From 46d9902a06da25abf80ef7cc8d1bc42a08e97f04 Mon Sep 17 00:00:00 2001 From: AlternateIf Date: Thu, 5 Jun 2025 12:50:58 +0000 Subject: [PATCH 1/2] Start draft PR From f17ecf2efa49157e747c83dd127982bd9d2bd216 Mon Sep 17 00:00:00 2001 From: AlternateIf Date: Thu, 5 Jun 2025 12:52:37 +0000 Subject: [PATCH 2/2] Convert readme tests from Vitest to Jest syntax --- node_modules/.bin/browserslist | 1 + node_modules/.bin/create-jest | 1 + node_modules/.bin/esparse | 1 + node_modules/.bin/esvalidate | 1 + node_modules/.bin/import-local-fixture | 1 + node_modules/.bin/jest | 1 + node_modules/.bin/js-yaml | 1 + node_modules/.bin/jsesc | 1 + node_modules/.bin/json5 | 1 + node_modules/.bin/node-which | 1 + node_modules/.bin/parser | 1 + node_modules/.bin/resolve | 1 + node_modules/.bin/semver | 1 + node_modules/.bin/update-browserslist-db | 1 + node_modules/.package-lock.json | 4085 ++++- node_modules/@ampproject/remapping/LICENSE | 202 + node_modules/@ampproject/remapping/README.md | 218 + .../@ampproject/remapping/dist/remapping.mjs | 197 + .../remapping/dist/remapping.mjs.map | 1 + .../remapping/dist/remapping.umd.js | 202 + .../remapping/dist/remapping.umd.js.map | 1 + .../dist/types/build-source-map-tree.d.ts | 14 + .../remapping/dist/types/remapping.d.ts | 20 + .../remapping/dist/types/source-map-tree.d.ts | 45 + .../remapping/dist/types/source-map.d.ts | 18 + .../remapping/dist/types/types.d.ts | 15 + .../@ampproject/remapping/package.json | 75 + node_modules/@babel/code-frame/LICENSE | 22 + node_modules/@babel/code-frame/README.md | 19 + node_modules/@babel/code-frame/lib/index.js | 216 + .../@babel/code-frame/lib/index.js.map | 1 + node_modules/@babel/code-frame/package.json | 31 + node_modules/@babel/compat-data/LICENSE | 22 + node_modules/@babel/compat-data/README.md | 19 + .../@babel/compat-data/corejs2-built-ins.js | 2 + .../compat-data/corejs3-shipped-proposals.js | 2 + .../compat-data/data/corejs2-built-ins.json | 2106 +++ .../data/corejs3-shipped-proposals.json | 5 + .../compat-data/data/native-modules.json | 18 + .../compat-data/data/overlapping-plugins.json | 35 + .../compat-data/data/plugin-bugfixes.json | 203 + .../@babel/compat-data/data/plugins.json | 831 + .../@babel/compat-data/native-modules.js | 2 + .../@babel/compat-data/overlapping-plugins.js | 2 + node_modules/@babel/compat-data/package.json | 40 + .../@babel/compat-data/plugin-bugfixes.js | 2 + node_modules/@babel/compat-data/plugins.js | 2 + node_modules/@babel/core/LICENSE | 22 + node_modules/@babel/core/README.md | 19 + .../@babel/core/lib/config/cache-contexts.js | 3 + .../core/lib/config/cache-contexts.js.map | 1 + .../@babel/core/lib/config/caching.js | 261 + .../@babel/core/lib/config/caching.js.map | 1 + .../@babel/core/lib/config/config-chain.js | 469 + .../core/lib/config/config-chain.js.map | 1 + .../core/lib/config/config-descriptors.js | 190 + .../core/lib/config/config-descriptors.js.map | 1 + .../core/lib/config/files/configuration.js | 290 + .../lib/config/files/configuration.js.map | 1 + .../@babel/core/lib/config/files/import.cjs | 6 + .../core/lib/config/files/import.cjs.map | 1 + .../core/lib/config/files/index-browser.js | 58 + .../lib/config/files/index-browser.js.map | 1 + .../@babel/core/lib/config/files/index.js | 78 + .../@babel/core/lib/config/files/index.js.map | 1 + .../core/lib/config/files/module-types.js | 206 + .../core/lib/config/files/module-types.js.map | 1 + .../@babel/core/lib/config/files/package.js | 61 + .../core/lib/config/files/package.js.map | 1 + .../@babel/core/lib/config/files/plugins.js | 230 + .../core/lib/config/files/plugins.js.map | 1 + .../@babel/core/lib/config/files/types.js | 3 + .../@babel/core/lib/config/files/types.js.map | 1 + .../@babel/core/lib/config/files/utils.js | 36 + .../@babel/core/lib/config/files/utils.js.map | 1 + node_modules/@babel/core/lib/config/full.js | 312 + .../@babel/core/lib/config/full.js.map | 1 + .../core/lib/config/helpers/config-api.js | 84 + .../core/lib/config/helpers/config-api.js.map | 1 + .../core/lib/config/helpers/deep-array.js | 23 + .../core/lib/config/helpers/deep-array.js.map | 1 + .../core/lib/config/helpers/environment.js | 12 + .../lib/config/helpers/environment.js.map | 1 + node_modules/@babel/core/lib/config/index.js | 93 + .../@babel/core/lib/config/index.js.map | 1 + node_modules/@babel/core/lib/config/item.js | 67 + .../@babel/core/lib/config/item.js.map | 1 + .../@babel/core/lib/config/partial.js | 158 + .../@babel/core/lib/config/partial.js.map | 1 + .../core/lib/config/pattern-to-regex.js | 38 + .../core/lib/config/pattern-to-regex.js.map | 1 + node_modules/@babel/core/lib/config/plugin.js | 33 + .../@babel/core/lib/config/plugin.js.map | 1 + .../@babel/core/lib/config/printer.js | 113 + .../@babel/core/lib/config/printer.js.map | 1 + .../lib/config/resolve-targets-browser.js | 41 + .../lib/config/resolve-targets-browser.js.map | 1 + .../@babel/core/lib/config/resolve-targets.js | 61 + .../core/lib/config/resolve-targets.js.map | 1 + node_modules/@babel/core/lib/config/util.js | 31 + .../@babel/core/lib/config/util.js.map | 1 + .../config/validation/option-assertions.js | 277 + .../validation/option-assertions.js.map | 1 + .../core/lib/config/validation/options.js | 189 + .../core/lib/config/validation/options.js.map | 1 + .../core/lib/config/validation/plugins.js | 67 + .../core/lib/config/validation/plugins.js.map | 1 + .../core/lib/config/validation/removed.js | 68 + .../core/lib/config/validation/removed.js.map | 1 + .../@babel/core/lib/errors/config-error.js | 18 + .../core/lib/errors/config-error.js.map | 1 + .../core/lib/errors/rewrite-stack-trace.js | 98 + .../lib/errors/rewrite-stack-trace.js.map | 1 + .../@babel/core/lib/gensync-utils/async.js | 90 + .../core/lib/gensync-utils/async.js.map | 1 + .../@babel/core/lib/gensync-utils/fs.js | 31 + .../@babel/core/lib/gensync-utils/fs.js.map | 1 + .../core/lib/gensync-utils/functional.js | 58 + .../core/lib/gensync-utils/functional.js.map | 1 + node_modules/@babel/core/lib/index.js | 233 + node_modules/@babel/core/lib/index.js.map | 1 + node_modules/@babel/core/lib/parse.js | 47 + node_modules/@babel/core/lib/parse.js.map | 1 + node_modules/@babel/core/lib/parser/index.js | 79 + .../@babel/core/lib/parser/index.js.map | 1 + .../lib/parser/util/missing-plugin-helper.js | 339 + .../parser/util/missing-plugin-helper.js.map | 1 + .../core/lib/tools/build-external-helpers.js | 144 + .../lib/tools/build-external-helpers.js.map | 1 + node_modules/@babel/core/lib/transform-ast.js | 50 + .../@babel/core/lib/transform-ast.js.map | 1 + .../@babel/core/lib/transform-file-browser.js | 23 + .../core/lib/transform-file-browser.js.map | 1 + .../@babel/core/lib/transform-file.js | 40 + .../@babel/core/lib/transform-file.js.map | 1 + node_modules/@babel/core/lib/transform.js | 49 + node_modules/@babel/core/lib/transform.js.map | 1 + .../lib/transformation/block-hoist-plugin.js | 84 + .../transformation/block-hoist-plugin.js.map | 1 + .../transformation/file/babel-7-helpers.cjs | 6 + .../file/babel-7-helpers.cjs.map | 1 + .../core/lib/transformation/file/file.js | 219 + .../core/lib/transformation/file/file.js.map | 1 + .../core/lib/transformation/file/generate.js | 84 + .../lib/transformation/file/generate.js.map | 1 + .../core/lib/transformation/file/merge-map.js | 37 + .../lib/transformation/file/merge-map.js.map | 1 + .../@babel/core/lib/transformation/index.js | 92 + .../core/lib/transformation/index.js.map | 1 + .../core/lib/transformation/normalize-file.js | 129 + .../lib/transformation/normalize-file.js.map | 1 + .../core/lib/transformation/normalize-opts.js | 59 + .../lib/transformation/normalize-opts.js.map | 1 + .../core/lib/transformation/plugin-pass.js | 50 + .../lib/transformation/plugin-pass.js.map | 1 + .../lib/transformation/util/clone-deep.js | 56 + .../lib/transformation/util/clone-deep.js.map | 1 + .../core/lib/vendor/import-meta-resolve.js | 1043 ++ .../lib/vendor/import-meta-resolve.js.map | 1 + node_modules/@babel/core/package.json | 81 + .../core/src/config/files/index-browser.ts | 115 + .../@babel/core/src/config/files/index.ts | 29 + .../src/config/resolve-targets-browser.ts | 42 + .../@babel/core/src/config/resolve-targets.ts | 56 + .../@babel/core/src/transform-file-browser.ts | 33 + .../@babel/core/src/transform-file.ts | 55 + node_modules/@babel/generator/LICENSE | 22 + node_modules/@babel/generator/README.md | 19 + node_modules/@babel/generator/lib/buffer.js | 317 + .../@babel/generator/lib/buffer.js.map | 1 + .../@babel/generator/lib/generators/base.js | 87 + .../generator/lib/generators/base.js.map | 1 + .../generator/lib/generators/classes.js | 212 + .../generator/lib/generators/classes.js.map | 1 + .../generator/lib/generators/deprecated.js | 28 + .../lib/generators/deprecated.js.map | 1 + .../generator/lib/generators/expressions.js | 300 + .../lib/generators/expressions.js.map | 1 + .../@babel/generator/lib/generators/flow.js | 660 + .../generator/lib/generators/flow.js.map | 1 + .../@babel/generator/lib/generators/index.js | 128 + .../generator/lib/generators/index.js.map | 1 + .../@babel/generator/lib/generators/jsx.js | 126 + .../generator/lib/generators/jsx.js.map | 1 + .../generator/lib/generators/methods.js | 198 + .../generator/lib/generators/methods.js.map | 1 + .../generator/lib/generators/modules.js | 287 + .../generator/lib/generators/modules.js.map | 1 + .../generator/lib/generators/statements.js | 279 + .../lib/generators/statements.js.map | 1 + .../lib/generators/template-literals.js | 40 + .../lib/generators/template-literals.js.map | 1 + .../@babel/generator/lib/generators/types.js | 234 + .../generator/lib/generators/types.js.map | 1 + .../generator/lib/generators/typescript.js | 724 + .../lib/generators/typescript.js.map | 1 + node_modules/@babel/generator/lib/index.js | 112 + .../@babel/generator/lib/index.js.map | 1 + .../@babel/generator/lib/node/index.js | 122 + .../@babel/generator/lib/node/index.js.map | 1 + .../@babel/generator/lib/node/parentheses.js | 262 + .../generator/lib/node/parentheses.js.map | 1 + .../@babel/generator/lib/node/whitespace.js | 145 + .../generator/lib/node/whitespace.js.map | 1 + node_modules/@babel/generator/lib/printer.js | 781 + .../@babel/generator/lib/printer.js.map | 1 + .../@babel/generator/lib/source-map.js | 85 + .../@babel/generator/lib/source-map.js.map | 1 + .../@babel/generator/lib/token-map.js | 191 + .../@babel/generator/lib/token-map.js.map | 1 + node_modules/@babel/generator/package.json | 40 + .../@babel/helper-compilation-targets/LICENSE | 22 + .../helper-compilation-targets/README.md | 19 + .../helper-compilation-targets/lib/debug.js | 28 + .../lib/debug.js.map | 1 + .../lib/filter-items.js | 67 + .../lib/filter-items.js.map | 1 + .../helper-compilation-targets/lib/index.js | 232 + .../lib/index.js.map | 1 + .../helper-compilation-targets/lib/options.js | 24 + .../lib/options.js.map | 1 + .../helper-compilation-targets/lib/pretty.js | 40 + .../lib/pretty.js.map | 1 + .../helper-compilation-targets/lib/targets.js | 28 + .../lib/targets.js.map | 1 + .../helper-compilation-targets/lib/utils.js | 58 + .../lib/utils.js.map | 1 + .../helper-compilation-targets/package.json | 43 + .../@babel/helper-module-imports/LICENSE | 22 + .../@babel/helper-module-imports/README.md | 19 + .../lib/import-builder.js | 122 + .../lib/import-builder.js.map | 1 + .../lib/import-injector.js | 304 + .../lib/import-injector.js.map | 1 + .../@babel/helper-module-imports/lib/index.js | 37 + .../helper-module-imports/lib/index.js.map | 1 + .../helper-module-imports/lib/is-module.js | 11 + .../lib/is-module.js.map | 1 + .../@babel/helper-module-imports/package.json | 28 + .../@babel/helper-module-transforms/LICENSE | 22 + .../@babel/helper-module-transforms/README.md | 19 + .../lib/dynamic-import.js | 48 + .../lib/dynamic-import.js.map | 1 + .../lib/get-module-name.js | 48 + .../lib/get-module-name.js.map | 1 + .../helper-module-transforms/lib/index.js | 398 + .../helper-module-transforms/lib/index.js.map | 1 + .../lib/lazy-modules.js | 31 + .../lib/lazy-modules.js.map | 1 + .../lib/normalize-and-load-metadata.js | 364 + .../lib/normalize-and-load-metadata.js.map | 1 + .../lib/rewrite-live-references.js | 360 + .../lib/rewrite-live-references.js.map | 1 + .../lib/rewrite-this.js | 22 + .../lib/rewrite-this.js.map | 1 + .../helper-module-transforms/package.json | 32 + .../@babel/helper-plugin-utils/LICENSE | 22 + .../@babel/helper-plugin-utils/README.md | 19 + .../@babel/helper-plugin-utils/lib/index.js | 76 + .../helper-plugin-utils/lib/index.js.map | 1 + .../@babel/helper-plugin-utils/package.json | 24 + .../@babel/helper-string-parser/LICENSE | 22 + .../@babel/helper-string-parser/README.md | 19 + .../@babel/helper-string-parser/lib/index.js | 295 + .../helper-string-parser/lib/index.js.map | 1 + .../@babel/helper-string-parser/package.json | 31 + .../helper-validator-identifier/LICENSE | 22 + .../helper-validator-identifier/README.md | 19 + .../lib/identifier.js | 70 + .../lib/identifier.js.map | 1 + .../helper-validator-identifier/lib/index.js | 57 + .../lib/index.js.map | 1 + .../lib/keyword.js | 35 + .../lib/keyword.js.map | 1 + .../helper-validator-identifier/package.json | 31 + .../@babel/helper-validator-option/LICENSE | 22 + .../@babel/helper-validator-option/README.md | 19 + .../lib/find-suggestion.js | 39 + .../lib/find-suggestion.js.map | 1 + .../helper-validator-option/lib/index.js | 21 + .../helper-validator-option/lib/index.js.map | 1 + .../helper-validator-option/lib/validator.js | 48 + .../lib/validator.js.map | 1 + .../helper-validator-option/package.json | 27 + node_modules/@babel/helpers/LICENSE | 23 + node_modules/@babel/helpers/README.md | 19 + .../@babel/helpers/lib/helpers-generated.js | 1442 ++ .../helpers/lib/helpers-generated.js.map | 1 + .../@babel/helpers/lib/helpers/AwaitValue.js | 11 + .../helpers/lib/helpers/AwaitValue.js.map | 1 + .../helpers/lib/helpers/OverloadYield.js | 12 + .../helpers/lib/helpers/OverloadYield.js.map | 1 + .../lib/helpers/applyDecoratedDescriptor.js | 31 + .../helpers/applyDecoratedDescriptor.js.map | 1 + .../@babel/helpers/lib/helpers/applyDecs.js | 459 + .../helpers/lib/helpers/applyDecs.js.map | 1 + .../helpers/lib/helpers/applyDecs2203.js | 363 + .../helpers/lib/helpers/applyDecs2203.js.map | 1 + .../helpers/lib/helpers/applyDecs2203R.js | 376 + .../helpers/lib/helpers/applyDecs2203R.js.map | 1 + .../helpers/lib/helpers/applyDecs2301.js | 421 + .../helpers/lib/helpers/applyDecs2301.js.map | 1 + .../helpers/lib/helpers/applyDecs2305.js | 235 + .../helpers/lib/helpers/applyDecs2305.js.map | 1 + .../helpers/lib/helpers/applyDecs2311.js | 236 + .../helpers/lib/helpers/applyDecs2311.js.map | 1 + .../helpers/lib/helpers/arrayLikeToArray.js | 13 + .../lib/helpers/arrayLikeToArray.js.map | 1 + .../helpers/lib/helpers/arrayWithHoles.js | 11 + .../helpers/lib/helpers/arrayWithHoles.js.map | 1 + .../helpers/lib/helpers/arrayWithoutHoles.js | 12 + .../lib/helpers/arrayWithoutHoles.js.map | 1 + .../helpers/lib/helpers/assertClassBrand.js | 14 + .../lib/helpers/assertClassBrand.js.map | 1 + .../lib/helpers/assertThisInitialized.js | 14 + .../lib/helpers/assertThisInitialized.js.map | 1 + .../lib/helpers/asyncGeneratorDelegate.js | 52 + .../lib/helpers/asyncGeneratorDelegate.js.map | 1 + .../helpers/lib/helpers/asyncIterator.js | 72 + .../helpers/lib/helpers/asyncIterator.js.map | 1 + .../helpers/lib/helpers/asyncToGenerator.js | 38 + .../lib/helpers/asyncToGenerator.js.map | 1 + .../lib/helpers/awaitAsyncGenerator.js | 12 + .../lib/helpers/awaitAsyncGenerator.js.map | 1 + .../@babel/helpers/lib/helpers/callSuper.js | 15 + .../helpers/lib/helpers/callSuper.js.map | 1 + .../@babel/helpers/lib/helpers/checkInRHS.js | 14 + .../helpers/lib/helpers/checkInRHS.js.map | 1 + .../lib/helpers/checkPrivateRedeclaration.js | 13 + .../helpers/checkPrivateRedeclaration.js.map | 1 + .../classApplyDescriptorDestructureSet.js | 25 + .../classApplyDescriptorDestructureSet.js.map | 1 + .../lib/helpers/classApplyDescriptorGet.js | 14 + .../helpers/classApplyDescriptorGet.js.map | 1 + .../lib/helpers/classApplyDescriptorSet.js | 18 + .../helpers/classApplyDescriptorSet.js.map | 1 + .../helpers/lib/helpers/classCallCheck.js | 13 + .../helpers/lib/helpers/classCallCheck.js.map | 1 + .../helpers/classCheckPrivateStaticAccess.js | 12 + .../classCheckPrivateStaticAccess.js.map | 1 + .../classCheckPrivateStaticFieldDescriptor.js | 13 + ...ssCheckPrivateStaticFieldDescriptor.js.map | 1 + .../helpers/classExtractFieldDescriptor.js | 12 + .../classExtractFieldDescriptor.js.map | 1 + .../helpers/lib/helpers/classNameTDZError.js | 11 + .../lib/helpers/classNameTDZError.js.map | 1 + .../classPrivateFieldDestructureSet.js | 14 + .../classPrivateFieldDestructureSet.js.map | 1 + .../lib/helpers/classPrivateFieldGet.js | 14 + .../lib/helpers/classPrivateFieldGet.js.map | 1 + .../lib/helpers/classPrivateFieldGet2.js | 12 + .../lib/helpers/classPrivateFieldGet2.js.map | 1 + .../lib/helpers/classPrivateFieldInitSpec.js | 13 + .../helpers/classPrivateFieldInitSpec.js.map | 1 + .../lib/helpers/classPrivateFieldLooseBase.js | 14 + .../helpers/classPrivateFieldLooseBase.js.map | 1 + .../lib/helpers/classPrivateFieldLooseKey.js | 12 + .../helpers/classPrivateFieldLooseKey.js.map | 1 + .../lib/helpers/classPrivateFieldSet.js | 15 + .../lib/helpers/classPrivateFieldSet.js.map | 1 + .../lib/helpers/classPrivateFieldSet2.js | 13 + .../lib/helpers/classPrivateFieldSet2.js.map | 1 + .../helpers/lib/helpers/classPrivateGetter.js | 12 + .../lib/helpers/classPrivateGetter.js.map | 1 + .../lib/helpers/classPrivateMethodGet.js | 13 + .../lib/helpers/classPrivateMethodGet.js.map | 1 + .../lib/helpers/classPrivateMethodInitSpec.js | 13 + .../helpers/classPrivateMethodInitSpec.js.map | 1 + .../lib/helpers/classPrivateMethodSet.js | 11 + .../lib/helpers/classPrivateMethodSet.js.map | 1 + .../helpers/lib/helpers/classPrivateSetter.js | 13 + .../lib/helpers/classPrivateSetter.js.map | 1 + .../classStaticPrivateFieldDestructureSet.js | 16 + ...assStaticPrivateFieldDestructureSet.js.map | 1 + .../helpers/classStaticPrivateFieldSpecGet.js | 16 + .../classStaticPrivateFieldSpecGet.js.map | 1 + .../helpers/classStaticPrivateFieldSpecSet.js | 17 + .../classStaticPrivateFieldSpecSet.js.map | 1 + .../helpers/classStaticPrivateMethodGet.js | 13 + .../classStaticPrivateMethodGet.js.map | 1 + .../helpers/classStaticPrivateMethodSet.js | 11 + .../classStaticPrivateMethodSet.js.map | 1 + .../@babel/helpers/lib/helpers/construct.js | 20 + .../helpers/lib/helpers/construct.js.map | 1 + .../@babel/helpers/lib/helpers/createClass.js | 26 + .../helpers/lib/helpers/createClass.js.map | 1 + .../lib/helpers/createForOfIteratorHelper.js | 64 + .../helpers/createForOfIteratorHelper.js.map | 1 + .../helpers/createForOfIteratorHelperLoose.js | 29 + .../createForOfIteratorHelperLoose.js.map | 1 + .../@babel/helpers/lib/helpers/createSuper.js | 25 + .../helpers/lib/helpers/createSuper.js.map | 1 + .../@babel/helpers/lib/helpers/decorate.js | 350 + .../helpers/lib/helpers/decorate.js.map | 1 + .../@babel/helpers/lib/helpers/defaults.js | 18 + .../helpers/lib/helpers/defaults.js.map | 1 + .../helpers/lib/helpers/defineAccessor.js | 16 + .../helpers/lib/helpers/defineAccessor.js.map | 1 + .../lib/helpers/defineEnumerableProperties.js | 27 + .../helpers/defineEnumerableProperties.js.map | 1 + .../helpers/lib/helpers/defineProperty.js | 23 + .../helpers/lib/helpers/defineProperty.js.map | 1 + .../@babel/helpers/lib/helpers/dispose.js | 47 + .../@babel/helpers/lib/helpers/dispose.js.map | 1 + .../@babel/helpers/lib/helpers/extends.js | 22 + .../@babel/helpers/lib/helpers/extends.js.map | 1 + .../@babel/helpers/lib/helpers/get.js | 25 + .../@babel/helpers/lib/helpers/get.js.map | 1 + .../helpers/lib/helpers/getPrototypeOf.js | 14 + .../helpers/lib/helpers/getPrototypeOf.js.map | 1 + .../@babel/helpers/lib/helpers/identity.js | 11 + .../helpers/lib/helpers/identity.js.map | 1 + .../helpers/lib/helpers/importDeferProxy.js | 35 + .../lib/helpers/importDeferProxy.js.map | 1 + .../@babel/helpers/lib/helpers/inherits.js | 25 + .../helpers/lib/helpers/inherits.js.map | 1 + .../helpers/lib/helpers/inheritsLoose.js | 14 + .../helpers/lib/helpers/inheritsLoose.js.map | 1 + .../lib/helpers/initializerDefineProperty.js | 17 + .../helpers/initializerDefineProperty.js.map | 1 + .../lib/helpers/initializerWarningHelper.js | 11 + .../helpers/initializerWarningHelper.js.map | 1 + .../@babel/helpers/lib/helpers/instanceof.js | 15 + .../helpers/lib/helpers/instanceof.js.map | 1 + .../lib/helpers/interopRequireDefault.js | 13 + .../lib/helpers/interopRequireDefault.js.map | 1 + .../lib/helpers/interopRequireWildcard.js | 44 + .../lib/helpers/interopRequireWildcard.js.map | 1 + .../helpers/lib/helpers/isNativeFunction.js | 15 + .../lib/helpers/isNativeFunction.js.map | 1 + .../lib/helpers/isNativeReflectConstruct.js | 16 + .../helpers/isNativeReflectConstruct.js.map | 1 + .../helpers/lib/helpers/iterableToArray.js | 13 + .../lib/helpers/iterableToArray.js.map | 1 + .../lib/helpers/iterableToArrayLimit.js | 41 + .../lib/helpers/iterableToArrayLimit.js.map | 1 + .../@babel/helpers/lib/helpers/jsx.js | 47 + .../@babel/helpers/lib/helpers/jsx.js.map | 1 + .../helpers/lib/helpers/maybeArrayLike.js | 16 + .../helpers/lib/helpers/maybeArrayLike.js.map | 1 + .../helpers/lib/helpers/newArrowCheck.js | 13 + .../helpers/lib/helpers/newArrowCheck.js.map | 1 + .../helpers/lib/helpers/nonIterableRest.js | 11 + .../lib/helpers/nonIterableRest.js.map | 1 + .../helpers/lib/helpers/nonIterableSpread.js | 11 + .../lib/helpers/nonIterableSpread.js.map | 1 + .../lib/helpers/nullishReceiverError.js | 11 + .../lib/helpers/nullishReceiverError.js.map | 1 + .../lib/helpers/objectDestructuringEmpty.js | 11 + .../helpers/objectDestructuringEmpty.js.map | 1 + .../helpers/lib/helpers/objectSpread.js | 24 + .../helpers/lib/helpers/objectSpread.js.map | 1 + .../helpers/lib/helpers/objectSpread2.js | 39 + .../helpers/lib/helpers/objectSpread2.js.map | 1 + .../lib/helpers/objectWithoutProperties.js | 24 + .../helpers/objectWithoutProperties.js.map | 1 + .../helpers/objectWithoutPropertiesLoose.js | 19 + .../objectWithoutPropertiesLoose.js.map | 1 + .../lib/helpers/possibleConstructorReturn.js | 17 + .../helpers/possibleConstructorReturn.js.map | 1 + .../helpers/lib/helpers/readOnlyError.js | 11 + .../helpers/lib/helpers/readOnlyError.js.map | 1 + .../@babel/helpers/lib/helpers/regenerator.js | 188 + .../helpers/lib/helpers/regenerator.js.map | 1 + .../helpers/lib/helpers/regeneratorAsync.js | 15 + .../lib/helpers/regeneratorAsync.js.map | 1 + .../lib/helpers/regeneratorAsyncGen.js | 13 + .../lib/helpers/regeneratorAsyncGen.js.map | 1 + .../lib/helpers/regeneratorAsyncIterator.js | 49 + .../helpers/regeneratorAsyncIterator.js.map | 1 + .../helpers/lib/helpers/regeneratorDefine.js | 40 + .../lib/helpers/regeneratorDefine.js.map | 1 + .../helpers/lib/helpers/regeneratorKeys.js | 28 + .../lib/helpers/regeneratorKeys.js.map | 1 + .../helpers/lib/helpers/regeneratorRuntime.js | 98 + .../lib/helpers/regeneratorRuntime.js.map | 1 + .../helpers/lib/helpers/regeneratorValues.js | 32 + .../lib/helpers/regeneratorValues.js.map | 1 + .../@babel/helpers/lib/helpers/set.js | 48 + .../@babel/helpers/lib/helpers/set.js.map | 1 + .../helpers/lib/helpers/setFunctionName.js | 21 + .../lib/helpers/setFunctionName.js.map | 1 + .../helpers/lib/helpers/setPrototypeOf.js | 15 + .../helpers/lib/helpers/setPrototypeOf.js.map | 1 + .../lib/helpers/skipFirstGeneratorNext.js | 15 + .../lib/helpers/skipFirstGeneratorNext.js.map | 1 + .../helpers/lib/helpers/slicedToArray.js | 15 + .../helpers/lib/helpers/slicedToArray.js.map | 1 + .../helpers/lib/helpers/superPropBase.js | 16 + .../helpers/lib/helpers/superPropBase.js.map | 1 + .../helpers/lib/helpers/superPropGet.js | 16 + .../helpers/lib/helpers/superPropGet.js.map | 1 + .../helpers/lib/helpers/superPropSet.js | 13 + .../helpers/lib/helpers/superPropSet.js.map | 1 + .../lib/helpers/taggedTemplateLiteral.js | 18 + .../lib/helpers/taggedTemplateLiteral.js.map | 1 + .../lib/helpers/taggedTemplateLiteralLoose.js | 15 + .../helpers/taggedTemplateLiteralLoose.js.map | 1 + .../@babel/helpers/lib/helpers/tdz.js | 11 + .../@babel/helpers/lib/helpers/tdz.js.map | 1 + .../@babel/helpers/lib/helpers/temporalRef.js | 13 + .../helpers/lib/helpers/temporalRef.js.map | 1 + .../helpers/lib/helpers/temporalUndefined.js | 9 + .../lib/helpers/temporalUndefined.js.map | 1 + .../@babel/helpers/lib/helpers/toArray.js | 15 + .../@babel/helpers/lib/helpers/toArray.js.map | 1 + .../helpers/lib/helpers/toConsumableArray.js | 15 + .../lib/helpers/toConsumableArray.js.map | 1 + .../@babel/helpers/lib/helpers/toPrimitive.js | 18 + .../helpers/lib/helpers/toPrimitive.js.map | 1 + .../helpers/lib/helpers/toPropertyKey.js | 13 + .../helpers/lib/helpers/toPropertyKey.js.map | 1 + .../@babel/helpers/lib/helpers/toSetter.js | 18 + .../helpers/lib/helpers/toSetter.js.map | 1 + .../tsRewriteRelativeImportExtensions.js | 16 + .../tsRewriteRelativeImportExtensions.js.map | 1 + .../@babel/helpers/lib/helpers/typeof.js | 22 + .../@babel/helpers/lib/helpers/typeof.js.map | 1 + .../lib/helpers/unsupportedIterableToArray.js | 19 + .../helpers/unsupportedIterableToArray.js.map | 1 + .../@babel/helpers/lib/helpers/using.js | 29 + .../@babel/helpers/lib/helpers/using.js.map | 1 + .../@babel/helpers/lib/helpers/usingCtx.js | 103 + .../helpers/lib/helpers/usingCtx.js.map | 1 + .../helpers/lib/helpers/wrapAsyncGenerator.js | 97 + .../lib/helpers/wrapAsyncGenerator.js.map | 1 + .../helpers/lib/helpers/wrapNativeSuper.js | 38 + .../lib/helpers/wrapNativeSuper.js.map | 1 + .../@babel/helpers/lib/helpers/wrapRegExp.js | 72 + .../helpers/lib/helpers/wrapRegExp.js.map | 1 + .../helpers/lib/helpers/writeOnlyError.js | 11 + .../helpers/lib/helpers/writeOnlyError.js.map | 1 + node_modules/@babel/helpers/lib/index.js | 126 + node_modules/@babel/helpers/lib/index.js.map | 1 + node_modules/@babel/helpers/package.json | 31 + node_modules/@babel/parser/CHANGELOG.md | 1073 ++ node_modules/@babel/parser/LICENSE | 19 + node_modules/@babel/parser/README.md | 19 + .../@babel/parser/bin/babel-parser.js | 15 + node_modules/@babel/parser/lib/index.js | 14504 ++++++++++++++++ node_modules/@babel/parser/lib/index.js.map | 1 + node_modules/@babel/parser/package.json | 50 + .../@babel/parser/typings/babel-parser.d.ts | 235 + .../plugin-syntax-async-generators/LICENSE | 22 + .../plugin-syntax-async-generators/README.md | 19 + .../lib/index.js | 22 + .../package.json | 23 + .../@babel/plugin-syntax-bigint/LICENSE | 22 + .../@babel/plugin-syntax-bigint/README.md | 19 + .../@babel/plugin-syntax-bigint/lib/index.js | 22 + .../@babel/plugin-syntax-bigint/package.json | 23 + .../plugin-syntax-class-properties/LICENSE | 22 + .../plugin-syntax-class-properties/README.md | 19 + .../lib/index.js | 22 + .../package.json | 28 + .../plugin-syntax-class-static-block/LICENSE | 22 + .../README.md | 19 + .../lib/index.js | 22 + .../package.json | 32 + .../plugin-syntax-import-attributes/LICENSE | 22 + .../plugin-syntax-import-attributes/README.md | 19 + .../lib/index.js | 39 + .../lib/index.js.map | 1 + .../package.json | 40 + .../@babel/plugin-syntax-import-meta/LICENSE | 22 + .../plugin-syntax-import-meta/README.md | 19 + .../plugin-syntax-import-meta/lib/index.js | 22 + .../plugin-syntax-import-meta/package.json | 28 + .../@babel/plugin-syntax-json-strings/LICENSE | 22 + .../plugin-syntax-json-strings/README.md | 19 + .../plugin-syntax-json-strings/lib/index.js | 22 + .../plugin-syntax-json-strings/package.json | 23 + node_modules/@babel/plugin-syntax-jsx/LICENSE | 22 + .../@babel/plugin-syntax-jsx/README.md | 19 + .../@babel/plugin-syntax-jsx/lib/index.js | 23 + .../@babel/plugin-syntax-jsx/lib/index.js.map | 1 + .../@babel/plugin-syntax-jsx/package.json | 33 + .../LICENSE | 22 + .../README.md | 19 + .../lib/index.js | 22 + .../package.json | 28 + .../LICENSE | 22 + .../README.md | 19 + .../lib/index.js | 22 + .../package.json | 23 + .../plugin-syntax-numeric-separator/LICENSE | 22 + .../plugin-syntax-numeric-separator/README.md | 19 + .../lib/index.js | 22 + .../package.json | 28 + .../plugin-syntax-object-rest-spread/LICENSE | 22 + .../README.md | 19 + .../lib/index.js | 22 + .../package.json | 23 + .../LICENSE | 22 + .../README.md | 19 + .../lib/index.js | 22 + .../package.json | 23 + .../plugin-syntax-optional-chaining/LICENSE | 22 + .../plugin-syntax-optional-chaining/README.md | 19 + .../lib/index.js | 22 + .../package.json | 23 + .../LICENSE | 22 + .../README.md | 19 + .../lib/index.js | 22 + .../package.json | 32 + .../plugin-syntax-top-level-await/LICENSE | 22 + .../plugin-syntax-top-level-await/README.md | 19 + .../lib/index.js | 22 + .../package.json | 32 + .../@babel/plugin-syntax-typescript/LICENSE | 22 + .../@babel/plugin-syntax-typescript/README.md | 19 + .../plugin-syntax-typescript/lib/index.js | 57 + .../plugin-syntax-typescript/lib/index.js.map | 1 + .../plugin-syntax-typescript/package.json | 35 + node_modules/@babel/template/LICENSE | 22 + node_modules/@babel/template/README.md | 19 + node_modules/@babel/template/lib/builder.js | 69 + .../@babel/template/lib/builder.js.map | 1 + .../@babel/template/lib/formatters.js | 61 + .../@babel/template/lib/formatters.js.map | 1 + node_modules/@babel/template/lib/index.js | 23 + node_modules/@babel/template/lib/index.js.map | 1 + node_modules/@babel/template/lib/literal.js | 69 + .../@babel/template/lib/literal.js.map | 1 + node_modules/@babel/template/lib/options.js | 73 + .../@babel/template/lib/options.js.map | 1 + node_modules/@babel/template/lib/parse.js | 163 + node_modules/@babel/template/lib/parse.js.map | 1 + node_modules/@babel/template/lib/populate.js | 138 + .../@babel/template/lib/populate.js.map | 1 + node_modules/@babel/template/lib/string.js | 20 + .../@babel/template/lib/string.js.map | 1 + node_modules/@babel/template/package.json | 27 + node_modules/@babel/traverse/LICENSE | 22 + node_modules/@babel/traverse/README.md | 19 + node_modules/@babel/traverse/lib/cache.js | 38 + node_modules/@babel/traverse/lib/cache.js.map | 1 + node_modules/@babel/traverse/lib/context.js | 119 + .../@babel/traverse/lib/context.js.map | 1 + node_modules/@babel/traverse/lib/hub.js | 19 + node_modules/@babel/traverse/lib/hub.js.map | 1 + node_modules/@babel/traverse/lib/index.js | 87 + node_modules/@babel/traverse/lib/index.js.map | 1 + .../@babel/traverse/lib/path/ancestry.js | 139 + .../@babel/traverse/lib/path/ancestry.js.map | 1 + .../@babel/traverse/lib/path/comments.js | 52 + .../@babel/traverse/lib/path/comments.js.map | 1 + .../@babel/traverse/lib/path/context.js | 242 + .../@babel/traverse/lib/path/context.js.map | 1 + .../@babel/traverse/lib/path/conversion.js | 612 + .../traverse/lib/path/conversion.js.map | 1 + .../@babel/traverse/lib/path/evaluation.js | 368 + .../traverse/lib/path/evaluation.js.map | 1 + .../@babel/traverse/lib/path/family.js | 346 + .../@babel/traverse/lib/path/family.js.map | 1 + .../@babel/traverse/lib/path/index.js | 293 + .../@babel/traverse/lib/path/index.js.map | 1 + .../traverse/lib/path/inference/index.js | 149 + .../traverse/lib/path/inference/index.js.map | 1 + .../lib/path/inference/inferer-reference.js | 151 + .../path/inference/inferer-reference.js.map | 1 + .../traverse/lib/path/inference/inferers.js | 207 + .../lib/path/inference/inferers.js.map | 1 + .../traverse/lib/path/inference/util.js | 30 + .../traverse/lib/path/inference/util.js.map | 1 + .../@babel/traverse/lib/path/introspection.js | 398 + .../traverse/lib/path/introspection.js.map | 1 + .../@babel/traverse/lib/path/lib/hoister.js | 171 + .../traverse/lib/path/lib/hoister.js.map | 1 + .../traverse/lib/path/lib/removal-hooks.js | 37 + .../lib/path/lib/removal-hooks.js.map | 1 + .../lib/path/lib/virtual-types-validator.js | 163 + .../path/lib/virtual-types-validator.js.map | 1 + .../traverse/lib/path/lib/virtual-types.js | 26 + .../lib/path/lib/virtual-types.js.map | 1 + .../@babel/traverse/lib/path/modification.js | 230 + .../traverse/lib/path/modification.js.map | 1 + .../@babel/traverse/lib/path/removal.js | 70 + .../@babel/traverse/lib/path/removal.js.map | 1 + .../@babel/traverse/lib/path/replacement.js | 263 + .../traverse/lib/path/replacement.js.map | 1 + .../@babel/traverse/lib/scope/binding.js | 84 + .../@babel/traverse/lib/scope/binding.js.map | 1 + .../@babel/traverse/lib/scope/index.js | 1037 ++ .../@babel/traverse/lib/scope/index.js.map | 1 + .../@babel/traverse/lib/scope/lib/renamer.js | 131 + .../traverse/lib/scope/lib/renamer.js.map | 1 + .../@babel/traverse/lib/traverse-node.js | 138 + .../@babel/traverse/lib/traverse-node.js.map | 1 + node_modules/@babel/traverse/lib/types.js | 3 + node_modules/@babel/traverse/lib/types.js.map | 1 + node_modules/@babel/traverse/lib/visitors.js | 258 + .../@babel/traverse/lib/visitors.js.map | 1 + node_modules/@babel/traverse/package.json | 35 + node_modules/@babel/types/LICENSE | 22 + node_modules/@babel/types/README.md | 19 + .../@babel/types/lib/asserts/assertNode.js | 16 + .../types/lib/asserts/assertNode.js.map | 1 + .../types/lib/asserts/generated/index.js | 1243 ++ .../types/lib/asserts/generated/index.js.map | 1 + .../types/lib/ast-types/generated/index.js | 3 + .../lib/ast-types/generated/index.js.map | 1 + .../lib/builders/flow/createFlowUnionType.js | 18 + .../builders/flow/createFlowUnionType.js.map | 1 + .../flow/createTypeAnnotationBasedOnTypeof.js | 31 + .../createTypeAnnotationBasedOnTypeof.js.map | 1 + .../types/lib/builders/generated/index.js | 29 + .../types/lib/builders/generated/index.js.map | 1 + .../types/lib/builders/generated/lowercase.js | 2886 +++ .../lib/builders/generated/lowercase.js.map | 1 + .../types/lib/builders/generated/uppercase.js | 273 + .../lib/builders/generated/uppercase.js.map | 1 + .../@babel/types/lib/builders/productions.js | 12 + .../types/lib/builders/productions.js.map | 1 + .../types/lib/builders/react/buildChildren.js | 24 + .../lib/builders/react/buildChildren.js.map | 1 + .../builders/typescript/createTSUnionType.js | 22 + .../typescript/createTSUnionType.js.map | 1 + .../@babel/types/lib/builders/validateNode.js | 21 + .../types/lib/builders/validateNode.js.map | 1 + node_modules/@babel/types/lib/clone/clone.js | 12 + .../@babel/types/lib/clone/clone.js.map | 1 + .../@babel/types/lib/clone/cloneDeep.js | 12 + .../@babel/types/lib/clone/cloneDeep.js.map | 1 + .../types/lib/clone/cloneDeepWithoutLoc.js | 12 + .../lib/clone/cloneDeepWithoutLoc.js.map | 1 + .../@babel/types/lib/clone/cloneNode.js | 107 + .../@babel/types/lib/clone/cloneNode.js.map | 1 + .../@babel/types/lib/clone/cloneWithoutLoc.js | 12 + .../types/lib/clone/cloneWithoutLoc.js.map | 1 + .../@babel/types/lib/comments/addComment.js | 15 + .../types/lib/comments/addComment.js.map | 1 + .../@babel/types/lib/comments/addComments.js | 22 + .../types/lib/comments/addComments.js.map | 1 + .../lib/comments/inheritInnerComments.js | 12 + .../lib/comments/inheritInnerComments.js.map | 1 + .../lib/comments/inheritLeadingComments.js | 12 + .../comments/inheritLeadingComments.js.map | 1 + .../lib/comments/inheritTrailingComments.js | 12 + .../comments/inheritTrailingComments.js.map | 1 + .../types/lib/comments/inheritsComments.js | 17 + .../lib/comments/inheritsComments.js.map | 1 + .../types/lib/comments/removeComments.js | 15 + .../types/lib/comments/removeComments.js.map | 1 + .../types/lib/constants/generated/index.js | 59 + .../lib/constants/generated/index.js.map | 1 + .../@babel/types/lib/constants/index.js | 33 + .../@babel/types/lib/constants/index.js.map | 1 + .../types/lib/converters/ensureBlock.js | 14 + .../types/lib/converters/ensureBlock.js.map | 1 + .../converters/gatherSequenceExpressions.js | 66 + .../gatherSequenceExpressions.js.map | 1 + .../lib/converters/toBindingIdentifierName.js | 14 + .../converters/toBindingIdentifierName.js.map | 1 + .../@babel/types/lib/converters/toBlock.js | 29 + .../types/lib/converters/toBlock.js.map | 1 + .../types/lib/converters/toComputedKey.js | 14 + .../types/lib/converters/toComputedKey.js.map | 1 + .../types/lib/converters/toExpression.js | 28 + .../types/lib/converters/toExpression.js.map | 1 + .../types/lib/converters/toIdentifier.js | 25 + .../types/lib/converters/toIdentifier.js.map | 1 + .../@babel/types/lib/converters/toKeyAlias.js | 38 + .../types/lib/converters/toKeyAlias.js.map | 1 + .../lib/converters/toSequenceExpression.js | 20 + .../converters/toSequenceExpression.js.map | 1 + .../types/lib/converters/toStatement.js | 39 + .../types/lib/converters/toStatement.js.map | 1 + .../types/lib/converters/valueToNode.js | 85 + .../types/lib/converters/valueToNode.js.map | 1 + .../@babel/types/lib/definitions/core.js | 1664 ++ .../@babel/types/lib/definitions/core.js.map | 1 + .../lib/definitions/deprecated-aliases.js | 11 + .../lib/definitions/deprecated-aliases.js.map | 1 + .../types/lib/definitions/experimental.js | 123 + .../types/lib/definitions/experimental.js.map | 1 + .../@babel/types/lib/definitions/flow.js | 495 + .../@babel/types/lib/definitions/flow.js.map | 1 + .../@babel/types/lib/definitions/index.js | 100 + .../@babel/types/lib/definitions/index.js.map | 1 + .../@babel/types/lib/definitions/jsx.js | 157 + .../@babel/types/lib/definitions/jsx.js.map | 1 + .../@babel/types/lib/definitions/misc.js | 33 + .../@babel/types/lib/definitions/misc.js.map | 1 + .../types/lib/definitions/placeholders.js | 27 + .../types/lib/definitions/placeholders.js.map | 1 + .../types/lib/definitions/typescript.js | 524 + .../types/lib/definitions/typescript.js.map | 1 + .../@babel/types/lib/definitions/utils.js | 292 + .../@babel/types/lib/definitions/utils.js.map | 1 + .../@babel/types/lib/index-legacy.d.ts | 2786 +++ node_modules/@babel/types/lib/index.d.ts | 3295 ++++ node_modules/@babel/types/lib/index.js | 584 + node_modules/@babel/types/lib/index.js.flow | 2640 +++ node_modules/@babel/types/lib/index.js.map | 1 + .../modifications/appendToMemberExpression.js | 15 + .../appendToMemberExpression.js.map | 1 + .../flow/removeTypeDuplicates.js | 65 + .../flow/removeTypeDuplicates.js.map | 1 + .../types/lib/modifications/inherits.js | 28 + .../types/lib/modifications/inherits.js.map | 1 + .../prependToMemberExpression.js | 17 + .../prependToMemberExpression.js.map | 1 + .../lib/modifications/removeProperties.js | 24 + .../lib/modifications/removeProperties.js.map | 1 + .../lib/modifications/removePropertiesDeep.js | 14 + .../modifications/removePropertiesDeep.js.map | 1 + .../typescript/removeTypeDuplicates.js | 66 + .../typescript/removeTypeDuplicates.js.map | 1 + .../retrievers/getAssignmentIdentifiers.js | 48 + .../getAssignmentIdentifiers.js.map | 1 + .../lib/retrievers/getBindingIdentifiers.js | 102 + .../retrievers/getBindingIdentifiers.js.map | 1 + .../types/lib/retrievers/getFunctionName.js | 63 + .../lib/retrievers/getFunctionName.js.map | 1 + .../retrievers/getOuterBindingIdentifiers.js | 13 + .../getOuterBindingIdentifiers.js.map | 1 + .../@babel/types/lib/traverse/traverse.js | 50 + .../@babel/types/lib/traverse/traverse.js.map | 1 + .../@babel/types/lib/traverse/traverseFast.js | 40 + .../types/lib/traverse/traverseFast.js.map | 1 + .../types/lib/utils/deprecationWarning.js | 44 + .../types/lib/utils/deprecationWarning.js.map | 1 + .../@babel/types/lib/utils/inherit.js | 13 + .../@babel/types/lib/utils/inherit.js.map | 1 + .../react/cleanJSXElementLiteralChild.js | 40 + .../react/cleanJSXElementLiteralChild.js.map | 1 + .../@babel/types/lib/utils/shallowEqual.js | 17 + .../types/lib/utils/shallowEqual.js.map | 1 + .../validators/buildMatchMemberExpression.js | 13 + .../buildMatchMemberExpression.js.map | 1 + .../types/lib/validators/generated/index.js | 2770 +++ .../lib/validators/generated/index.js.map | 1 + .../@babel/types/lib/validators/is.js | 27 + .../@babel/types/lib/validators/is.js.map | 1 + .../@babel/types/lib/validators/isBinding.js | 27 + .../types/lib/validators/isBinding.js.map | 1 + .../types/lib/validators/isBlockScoped.js | 13 + .../types/lib/validators/isBlockScoped.js.map | 1 + .../types/lib/validators/isImmutable.js | 21 + .../types/lib/validators/isImmutable.js.map | 1 + .../@babel/types/lib/validators/isLet.js | 17 + .../@babel/types/lib/validators/isLet.js.map | 1 + .../@babel/types/lib/validators/isNode.js | 12 + .../@babel/types/lib/validators/isNode.js.map | 1 + .../types/lib/validators/isNodesEquivalent.js | 57 + .../lib/validators/isNodesEquivalent.js.map | 1 + .../types/lib/validators/isPlaceholderType.js | 15 + .../lib/validators/isPlaceholderType.js.map | 1 + .../types/lib/validators/isReferenced.js | 96 + .../types/lib/validators/isReferenced.js.map | 1 + .../@babel/types/lib/validators/isScope.js | 18 + .../types/lib/validators/isScope.js.map | 1 + .../lib/validators/isSpecifierDefault.js | 14 + .../lib/validators/isSpecifierDefault.js.map | 1 + .../@babel/types/lib/validators/isType.js | 17 + .../@babel/types/lib/validators/isType.js.map | 1 + .../lib/validators/isValidES3Identifier.js | 13 + .../validators/isValidES3Identifier.js.map | 1 + .../types/lib/validators/isValidIdentifier.js | 18 + .../lib/validators/isValidIdentifier.js.map | 1 + .../@babel/types/lib/validators/isVar.js | 19 + .../@babel/types/lib/validators/isVar.js.map | 1 + .../types/lib/validators/matchesPattern.js | 36 + .../lib/validators/matchesPattern.js.map | 1 + .../types/lib/validators/react/isCompatTag.js | 11 + .../lib/validators/react/isCompatTag.js.map | 1 + .../lib/validators/react/isReactComponent.js | 11 + .../validators/react/isReactComponent.js.map | 1 + .../@babel/types/lib/validators/validate.js | 42 + .../types/lib/validators/validate.js.map | 1 + node_modules/@babel/types/package.json | 39 + node_modules/@bcoe/v8-coverage/.editorconfig | 9 + node_modules/@bcoe/v8-coverage/.gitattributes | 2 + node_modules/@bcoe/v8-coverage/CHANGELOG.md | 250 + node_modules/@bcoe/v8-coverage/LICENSE.md | 21 + node_modules/@bcoe/v8-coverage/LICENSE.txt | 14 + node_modules/@bcoe/v8-coverage/README.md | 11 + .../@bcoe/v8-coverage/dist/lib/CHANGELOG.md | 250 + .../@bcoe/v8-coverage/dist/lib/LICENSE.md | 21 + .../@bcoe/v8-coverage/dist/lib/README.md | 11 + .../@bcoe/v8-coverage/dist/lib/_src/ascii.ts | 146 + .../@bcoe/v8-coverage/dist/lib/_src/clone.ts | 70 + .../v8-coverage/dist/lib/_src/compare.ts | 40 + .../@bcoe/v8-coverage/dist/lib/_src/index.ts | 6 + .../@bcoe/v8-coverage/dist/lib/_src/merge.ts | 343 + .../v8-coverage/dist/lib/_src/normalize.ts | 84 + .../v8-coverage/dist/lib/_src/range-tree.ts | 156 + .../@bcoe/v8-coverage/dist/lib/_src/types.ts | 26 + .../@bcoe/v8-coverage/dist/lib/ascii.d.ts | 12 + .../@bcoe/v8-coverage/dist/lib/ascii.js | 136 + .../@bcoe/v8-coverage/dist/lib/ascii.mjs | 130 + .../@bcoe/v8-coverage/dist/lib/clone.d.ts | 29 + .../@bcoe/v8-coverage/dist/lib/clone.js | 70 + .../@bcoe/v8-coverage/dist/lib/clone.mjs | 64 + .../@bcoe/v8-coverage/dist/lib/compare.d.ts | 21 + .../@bcoe/v8-coverage/dist/lib/compare.js | 46 + .../@bcoe/v8-coverage/dist/lib/compare.mjs | 41 + .../@bcoe/v8-coverage/dist/lib/index.d.ts | 6 + .../@bcoe/v8-coverage/dist/lib/index.js | 24 + .../@bcoe/v8-coverage/dist/lib/index.mjs | 7 + .../@bcoe/v8-coverage/dist/lib/merge.d.ts | 39 + .../@bcoe/v8-coverage/dist/lib/merge.js | 302 + .../@bcoe/v8-coverage/dist/lib/merge.mjs | 297 + .../@bcoe/v8-coverage/dist/lib/normalize.d.ts | 53 + .../@bcoe/v8-coverage/dist/lib/normalize.js | 87 + .../@bcoe/v8-coverage/dist/lib/normalize.mjs | 79 + .../@bcoe/v8-coverage/dist/lib/package.json | 44 + .../v8-coverage/dist/lib/range-tree.d.ts | 24 + .../@bcoe/v8-coverage/dist/lib/range-tree.js | 139 + .../@bcoe/v8-coverage/dist/lib/range-tree.mjs | 136 + .../@bcoe/v8-coverage/dist/lib/tsconfig.json | 62 + .../@bcoe/v8-coverage/dist/lib/types.d.ts | 22 + .../@bcoe/v8-coverage/dist/lib/types.js | 4 + .../@bcoe/v8-coverage/dist/lib/types.mjs | 3 + node_modules/@bcoe/v8-coverage/gulpfile.ts | 95 + node_modules/@bcoe/v8-coverage/package.json | 48 + .../@bcoe/v8-coverage/src/lib/ascii.ts | 146 + .../@bcoe/v8-coverage/src/lib/clone.ts | 70 + .../@bcoe/v8-coverage/src/lib/compare.ts | 40 + .../@bcoe/v8-coverage/src/lib/index.ts | 6 + .../@bcoe/v8-coverage/src/lib/merge.ts | 343 + .../@bcoe/v8-coverage/src/lib/normalize.ts | 84 + .../@bcoe/v8-coverage/src/lib/range-tree.ts | 156 + .../@bcoe/v8-coverage/src/lib/types.ts | 26 + .../@bcoe/v8-coverage/src/test/merge.spec.ts | 280 + node_modules/@bcoe/v8-coverage/tsconfig.json | 59 + .../@istanbuljs/load-nyc-config/CHANGELOG.md | 41 + .../@istanbuljs/load-nyc-config/LICENSE | 16 + .../@istanbuljs/load-nyc-config/README.md | 64 + .../@istanbuljs/load-nyc-config/index.js | 166 + .../@istanbuljs/load-nyc-config/load-esm.js | 12 + .../@istanbuljs/load-nyc-config/package.json | 49 + node_modules/@istanbuljs/schema/CHANGELOG.md | 44 + node_modules/@istanbuljs/schema/LICENSE | 21 + node_modules/@istanbuljs/schema/README.md | 30 + .../@istanbuljs/schema/default-exclude.js | 22 + .../@istanbuljs/schema/default-extension.js | 10 + node_modules/@istanbuljs/schema/index.js | 466 + node_modules/@istanbuljs/schema/package.json | 30 + node_modules/@jest/console/LICENSE | 21 + .../@jest/console/build/BufferedConsole.js | 197 + .../@jest/console/build/CustomConsole.js | 182 + .../@jest/console/build/NullConsole.js | 35 + .../@jest/console/build/getConsoleOutput.js | 70 + node_modules/@jest/console/build/index.d.ts | 131 + node_modules/@jest/console/build/index.js | 36 + node_modules/@jest/console/build/types.js | 1 + node_modules/@jest/console/package.json | 37 + node_modules/@jest/core/LICENSE | 21 + node_modules/@jest/core/README.md | 3 + .../@jest/core/build/FailedTestsCache.js | 46 + .../core/build/FailedTestsInteractiveMode.js | 195 + .../@jest/core/build/ReporterDispatcher.js | 87 + node_modules/@jest/core/build/SearchSource.js | 408 + .../core/build/SnapshotInteractiveMode.js | 238 + .../@jest/core/build/TestNamePatternPrompt.js | 39 + .../@jest/core/build/TestPathPatternPrompt.js | 39 + .../@jest/core/build/TestScheduler.js | 463 + node_modules/@jest/core/build/cli/index.js | 417 + .../@jest/core/build/collectHandles.js | 266 + .../core/build/getChangedFilesPromise.js | 65 + .../core/build/getConfigsOfProjectsToRun.js | 40 + .../@jest/core/build/getNoTestFound.js | 80 + .../@jest/core/build/getNoTestFoundFailed.js | 43 + .../build/getNoTestFoundPassWithNoTests.js | 26 + .../getNoTestFoundRelatedToChangedFiles.js | 48 + .../@jest/core/build/getNoTestFoundVerbose.js | 91 + .../core/build/getNoTestsFoundMessage.js | 64 + .../@jest/core/build/getProjectDisplayName.js | 16 + .../build/getProjectNamesMissingWarning.js | 49 + .../core/build/getSelectProjectsMessage.js | 71 + node_modules/@jest/core/build/index.d.ts | 118 + node_modules/@jest/core/build/index.js | 36 + .../core/build/lib/activeFiltersMessage.js | 52 + .../@jest/core/build/lib/createContext.js | 31 + .../build/lib/handleDeprecationWarnings.js | 65 + .../@jest/core/build/lib/isValidPath.js | 26 + .../@jest/core/build/lib/logDebugMessages.js | 24 + .../core/build/lib/updateGlobalConfig.js | 95 + .../core/build/lib/watchPluginsHelpers.js | 56 + .../build/plugins/FailedTestsInteractive.js | 96 + node_modules/@jest/core/build/plugins/Quit.js | 42 + .../core/build/plugins/TestNamePattern.js | 70 + .../core/build/plugins/TestPathPattern.js | 70 + .../core/build/plugins/UpdateSnapshots.js | 51 + .../plugins/UpdateSnapshotsInteractive.js | 99 + .../@jest/core/build/runGlobalHook.js | 133 + node_modules/@jest/core/build/runJest.js | 391 + .../@jest/core/build/testSchedulerHelper.js | 57 + node_modules/@jest/core/build/types.js | 1 + node_modules/@jest/core/build/version.js | 18 + node_modules/@jest/core/build/watch.js | 666 + node_modules/@jest/core/package.json | 102 + node_modules/@jest/environment/LICENSE | 21 + .../@jest/environment/build/index.d.ts | 418 + node_modules/@jest/environment/build/index.js | 1 + node_modules/@jest/environment/package.json | 32 + node_modules/@jest/expect-utils/LICENSE | 21 + node_modules/@jest/expect-utils/README.md | 5 + .../expect-utils/build/immutableUtils.js | 66 + .../@jest/expect-utils/build/index.d.ts | 94 + .../@jest/expect-utils/build/index.js | 34 + .../@jest/expect-utils/build/jasmineUtils.js | 218 + .../@jest/expect-utils/build/types.js | 1 + .../@jest/expect-utils/build/utils.js | 462 + node_modules/@jest/expect-utils/package.json | 35 + node_modules/@jest/expect/LICENSE | 21 + node_modules/@jest/expect/README.md | 5 + node_modules/@jest/expect/build/index.d.ts | 68 + node_modules/@jest/expect/build/index.js | 40 + node_modules/@jest/expect/build/types.js | 1 + node_modules/@jest/expect/package.json | 34 + node_modules/@jest/fake-timers/LICENSE | 21 + .../@jest/fake-timers/build/index.d.ts | 110 + node_modules/@jest/fake-timers/build/index.js | 22 + .../fake-timers/build/legacyFakeTimers.js | 545 + .../fake-timers/build/modernFakeTimers.js | 191 + node_modules/@jest/fake-timers/package.json | 38 + node_modules/@jest/globals/LICENSE | 21 + node_modules/@jest/globals/build/index.d.ts | 71 + node_modules/@jest/globals/build/index.js | 14 + node_modules/@jest/globals/package.json | 32 + node_modules/@jest/reporters/LICENSE | 21 + .../@jest/reporters/assets/jest_logo.png | Bin 0 -> 3030 bytes .../@jest/reporters/build/BaseReporter.js | 48 + .../@jest/reporters/build/CoverageReporter.js | 561 + .../@jest/reporters/build/CoverageWorker.js | 89 + .../@jest/reporters/build/DefaultReporter.js | 229 + .../reporters/build/GitHubActionsReporter.js | 381 + .../@jest/reporters/build/NotifyReporter.js | 218 + node_modules/@jest/reporters/build/Status.js | 214 + .../@jest/reporters/build/SummaryReporter.js | 239 + .../@jest/reporters/build/VerboseReporter.js | 175 + .../@jest/reporters/build/formatTestPath.js | 84 + .../reporters/build/generateEmptyCoverage.js | 151 + .../@jest/reporters/build/getResultHeader.js | 65 + .../reporters/build/getSnapshotStatus.js | 92 + .../reporters/build/getSnapshotSummary.js | 169 + .../@jest/reporters/build/getSummary.js | 206 + .../@jest/reporters/build/getWatermarks.js | 38 + node_modules/@jest/reporters/build/index.d.ts | 325 + node_modules/@jest/reporters/build/index.js | 88 + .../@jest/reporters/build/printDisplayName.js | 35 + .../@jest/reporters/build/relativePath.js | 72 + .../reporters/build/trimAndFormatPath.js | 118 + node_modules/@jest/reporters/build/types.js | 1 + .../@jest/reporters/build/wrapAnsiString.js | 69 + node_modules/@jest/reporters/package.json | 82 + node_modules/@jest/schemas/LICENSE | 21 + node_modules/@jest/schemas/README.md | 3 + node_modules/@jest/schemas/build/index.d.ts | 63 + node_modules/@jest/schemas/build/index.js | 60 + node_modules/@jest/schemas/package.json | 29 + node_modules/@jest/source-map/LICENSE | 21 + .../@jest/source-map/build/getCallsite.js | 85 + .../@jest/source-map/build/index.d.ts | 16 + node_modules/@jest/source-map/build/index.js | 15 + node_modules/@jest/source-map/build/types.js | 1 + node_modules/@jest/source-map/package.json | 34 + node_modules/@jest/test-result/LICENSE | 21 + .../test-result/build/formatTestResults.js | 69 + .../@jest/test-result/build/helpers.js | 175 + .../@jest/test-result/build/index.d.ts | 232 + node_modules/@jest/test-result/build/index.js | 40 + node_modules/@jest/test-result/build/types.js | 1 + node_modules/@jest/test-result/package.json | 36 + node_modules/@jest/test-sequencer/LICENSE | 21 + .../@jest/test-sequencer/build/index.d.ts | 91 + .../@jest/test-sequencer/build/index.js | 287 + .../@jest/test-sequencer/package.json | 36 + node_modules/@jest/transform/LICENSE | 21 + .../transform/build/ScriptTransformer.js | 1000 ++ .../build/enhanceUnexpectedTokenMessage.js | 76 + node_modules/@jest/transform/build/index.d.ts | 240 + node_modules/@jest/transform/build/index.js | 37 + .../build/runtimeErrorsAndWarnings.js | 94 + .../@jest/transform/build/shouldInstrument.js | 177 + node_modules/@jest/transform/build/types.js | 1 + node_modules/@jest/transform/package.json | 52 + node_modules/@jest/types/LICENSE | 21 + node_modules/@jest/types/README.md | 30 + node_modules/@jest/types/build/Circus.js | 1 + node_modules/@jest/types/build/Config.js | 1 + node_modules/@jest/types/build/Global.js | 1 + node_modules/@jest/types/build/TestResult.js | 1 + node_modules/@jest/types/build/Transform.js | 1 + node_modules/@jest/types/build/index.d.ts | 1204 ++ node_modules/@jest/types/build/index.js | 1 + node_modules/@jest/types/package.json | 38 + node_modules/@jridgewell/gen-mapping/LICENSE | 19 + .../@jridgewell/gen-mapping/README.md | 227 + .../gen-mapping/dist/gen-mapping.mjs | 230 + .../gen-mapping/dist/gen-mapping.mjs.map | 1 + .../gen-mapping/dist/gen-mapping.umd.js | 246 + .../gen-mapping/dist/gen-mapping.umd.js.map | 1 + .../gen-mapping/dist/types/gen-mapping.d.ts | 88 + .../dist/types/sourcemap-segment.d.ts | 12 + .../gen-mapping/dist/types/types.d.ts | 36 + .../@jridgewell/gen-mapping/package.json | 76 + node_modules/@jridgewell/resolve-uri/LICENSE | 19 + .../@jridgewell/resolve-uri/README.md | 40 + .../resolve-uri/dist/resolve-uri.mjs | 232 + .../resolve-uri/dist/resolve-uri.mjs.map | 1 + .../resolve-uri/dist/resolve-uri.umd.js | 240 + .../resolve-uri/dist/resolve-uri.umd.js.map | 1 + .../resolve-uri/dist/types/resolve-uri.d.ts | 4 + .../@jridgewell/resolve-uri/package.json | 69 + node_modules/@jridgewell/set-array/LICENSE | 19 + node_modules/@jridgewell/set-array/README.md | 37 + .../@jridgewell/set-array/dist/set-array.mjs | 69 + .../set-array/dist/set-array.mjs.map | 1 + .../set-array/dist/set-array.umd.js | 83 + .../set-array/dist/set-array.umd.js.map | 1 + .../set-array/dist/types/set-array.d.ts | 32 + .../@jridgewell/set-array/package.json | 65 + .../@jridgewell/trace-mapping/LICENSE | 19 + .../@jridgewell/trace-mapping/README.md | 257 + .../trace-mapping/dist/trace-mapping.mjs | 580 + .../trace-mapping/dist/trace-mapping.mjs.map | 1 + .../trace-mapping/dist/trace-mapping.umd.js | 600 + .../dist/trace-mapping.umd.js.map | 1 + .../trace-mapping/dist/types/any-map.d.ts | 8 + .../dist/types/binary-search.d.ts | 32 + .../trace-mapping/dist/types/by-source.d.ts | 7 + .../trace-mapping/dist/types/resolve.d.ts | 1 + .../trace-mapping/dist/types/sort.d.ts | 2 + .../dist/types/sourcemap-segment.d.ts | 16 + .../dist/types/strip-filename.d.ts | 4 + .../dist/types/trace-mapping.d.ts | 79 + .../trace-mapping/dist/types/types.d.ts | 99 + .../@jridgewell/trace-mapping/package.json | 77 + .../@rollup/rollup-linux-x64-musl/README.md | 3 + .../rollup-linux-x64-musl/package.json | 22 + .../rollup.linux-x64-musl.node | Bin 0 -> 2656792 bytes .../@sinclair/typebox/compiler/compiler.d.ts | 35 + .../@sinclair/typebox/compiler/compiler.js | 577 + .../@sinclair/typebox/compiler/index.d.ts | 2 + .../@sinclair/typebox/compiler/index.js | 47 + .../@sinclair/typebox/errors/errors.d.ts | 88 + .../@sinclair/typebox/errors/errors.js | 609 + .../@sinclair/typebox/errors/index.d.ts | 1 + .../@sinclair/typebox/errors/index.js | 44 + node_modules/@sinclair/typebox/license | 23 + node_modules/@sinclair/typebox/package.json | 47 + node_modules/@sinclair/typebox/readme.md | 1424 ++ .../@sinclair/typebox/system/index.d.ts | 1 + .../@sinclair/typebox/system/index.js | 44 + .../@sinclair/typebox/system/system.d.ts | 26 + .../@sinclair/typebox/system/system.js | 90 + node_modules/@sinclair/typebox/typebox.d.ts | 723 + node_modules/@sinclair/typebox/typebox.js | 2220 +++ .../@sinclair/typebox/value/cast.d.ts | 30 + node_modules/@sinclair/typebox/value/cast.js | 372 + .../@sinclair/typebox/value/check.d.ts | 12 + node_modules/@sinclair/typebox/value/check.js | 484 + .../@sinclair/typebox/value/clone.d.ts | 3 + node_modules/@sinclair/typebox/value/clone.js | 71 + .../@sinclair/typebox/value/convert.d.ts | 13 + .../@sinclair/typebox/value/convert.js | 372 + .../@sinclair/typebox/value/create.d.ts | 26 + .../@sinclair/typebox/value/create.js | 480 + .../@sinclair/typebox/value/delta.d.ts | 43 + node_modules/@sinclair/typebox/value/delta.js | 204 + .../@sinclair/typebox/value/equal.d.ts | 3 + node_modules/@sinclair/typebox/value/equal.js | 80 + .../@sinclair/typebox/value/hash.d.ts | 8 + node_modules/@sinclair/typebox/value/hash.js | 208 + .../@sinclair/typebox/value/index.d.ts | 6 + node_modules/@sinclair/typebox/value/index.js | 56 + node_modules/@sinclair/typebox/value/is.d.ts | 11 + node_modules/@sinclair/typebox/value/is.js | 53 + .../@sinclair/typebox/value/mutate.d.ts | 13 + .../@sinclair/typebox/value/mutate.js | 121 + .../@sinclair/typebox/value/pointer.d.ts | 24 + .../@sinclair/typebox/value/pointer.js | 142 + .../@sinclair/typebox/value/value.d.ts | 39 + node_modules/@sinclair/typebox/value/value.js | 99 + node_modules/@sinonjs/commons/LICENSE | 29 + node_modules/@sinonjs/commons/README.md | 16 + .../@sinonjs/commons/lib/called-in-order.js | 55 + .../commons/lib/called-in-order.test.js | 121 + .../@sinonjs/commons/lib/class-name.js | 13 + .../@sinonjs/commons/lib/class-name.test.js | 37 + .../@sinonjs/commons/lib/deprecated.js | 48 + .../@sinonjs/commons/lib/deprecated.test.js | 101 + node_modules/@sinonjs/commons/lib/every.js | 26 + .../@sinonjs/commons/lib/every.test.js | 41 + .../@sinonjs/commons/lib/function-name.js | 28 + .../commons/lib/function-name.test.js | 76 + node_modules/@sinonjs/commons/lib/global.js | 21 + .../@sinonjs/commons/lib/global.test.js | 16 + node_modules/@sinonjs/commons/lib/index.js | 14 + .../@sinonjs/commons/lib/index.test.js | 31 + .../commons/lib/order-by-first-call.js | 34 + .../commons/lib/order-by-first-call.test.js | 52 + .../@sinonjs/commons/lib/prototypes/README.md | 43 + .../@sinonjs/commons/lib/prototypes/array.js | 5 + .../lib/prototypes/copy-prototype-methods.js | 40 + .../prototypes/copy-prototype-methods.test.js | 12 + .../commons/lib/prototypes/function.js | 5 + .../@sinonjs/commons/lib/prototypes/index.js | 10 + .../commons/lib/prototypes/index.test.js | 61 + .../@sinonjs/commons/lib/prototypes/map.js | 5 + .../@sinonjs/commons/lib/prototypes/object.js | 5 + .../@sinonjs/commons/lib/prototypes/set.js | 5 + .../@sinonjs/commons/lib/prototypes/string.js | 5 + .../commons/lib/prototypes/throws-on-proto.js | 24 + node_modules/@sinonjs/commons/lib/type-of.js | 12 + .../@sinonjs/commons/lib/type-of.test.js | 51 + .../@sinonjs/commons/lib/value-to-string.js | 16 + .../commons/lib/value-to-string.test.js | 20 + node_modules/@sinonjs/commons/package.json | 57 + .../commons/types/called-in-order.d.ts | 34 + .../@sinonjs/commons/types/class-name.d.ts | 7 + .../@sinonjs/commons/types/deprecated.d.ts | 3 + .../@sinonjs/commons/types/every.d.ts | 2 + .../@sinonjs/commons/types/function-name.d.ts | 2 + .../@sinonjs/commons/types/global.d.ts | 6 + .../@sinonjs/commons/types/index.d.ts | 17 + .../commons/types/order-by-first-call.d.ts | 24 + .../commons/types/prototypes/array.d.ts | 2 + .../prototypes/copy-prototype-methods.d.ts | 2 + .../commons/types/prototypes/function.d.ts | 2 + .../commons/types/prototypes/index.d.ts | 7 + .../commons/types/prototypes/map.d.ts | 2 + .../commons/types/prototypes/object.d.ts | 2 + .../commons/types/prototypes/set.d.ts | 2 + .../commons/types/prototypes/string.d.ts | 2 + .../types/prototypes/throws-on-proto.d.ts | 10 + .../@sinonjs/commons/types/type-of.d.ts | 2 + .../commons/types/value-to-string.d.ts | 7 + node_modules/@sinonjs/fake-timers/LICENSE | 11 + node_modules/@sinonjs/fake-timers/README.md | 358 + .../@sinonjs/fake-timers/package.json | 65 + .../fake-timers/src/fake-timers-src.js | 1787 ++ node_modules/@types/babel__core/LICENSE | 21 + node_modules/@types/babel__core/README.md | 15 + node_modules/@types/babel__core/index.d.ts | 831 + node_modules/@types/babel__core/package.json | 51 + node_modules/@types/babel__generator/LICENSE | 21 + .../@types/babel__generator/README.md | 15 + .../@types/babel__generator/index.d.ts | 210 + .../@types/babel__generator/package.json | 43 + node_modules/@types/babel__template/LICENSE | 21 + node_modules/@types/babel__template/README.md | 15 + .../@types/babel__template/index.d.ts | 92 + .../@types/babel__template/package.json | 43 + node_modules/@types/babel__traverse/LICENSE | 21 + node_modules/@types/babel__traverse/README.md | 15 + .../@types/babel__traverse/index.d.ts | 1494 ++ .../@types/babel__traverse/package.json | 63 + node_modules/@types/graceful-fs/LICENSE | 21 + node_modules/@types/graceful-fs/README.md | 31 + node_modules/@types/graceful-fs/index.d.ts | 12 + node_modules/@types/graceful-fs/package.json | 32 + .../@types/istanbul-lib-coverage/LICENSE | 21 + .../@types/istanbul-lib-coverage/README.md | 15 + .../@types/istanbul-lib-coverage/index.d.ts | 111 + .../@types/istanbul-lib-coverage/package.json | 25 + .../@types/istanbul-lib-report/LICENSE | 21 + .../@types/istanbul-lib-report/README.md | 15 + .../@types/istanbul-lib-report/index.d.ts | 184 + .../@types/istanbul-lib-report/package.json | 32 + node_modules/@types/istanbul-reports/LICENSE | 21 + .../@types/istanbul-reports/README.md | 86 + .../@types/istanbul-reports/index.d.ts | 67 + .../@types/istanbul-reports/package.json | 32 + node_modules/@types/node/LICENSE | 21 + node_modules/@types/node/README.md | 15 + node_modules/@types/node/assert.d.ts | 1054 ++ node_modules/@types/node/assert/strict.d.ts | 8 + node_modules/@types/node/async_hooks.d.ts | 603 + node_modules/@types/node/buffer.buffer.d.ts | 463 + node_modules/@types/node/buffer.d.ts | 1926 ++ node_modules/@types/node/child_process.d.ts | 1549 ++ node_modules/@types/node/cluster.d.ts | 579 + .../@types/node/compatibility/disposable.d.ts | 16 + .../@types/node/compatibility/index.d.ts | 9 + .../@types/node/compatibility/indexable.d.ts | 23 + .../@types/node/compatibility/iterators.d.ts | 21 + node_modules/@types/node/console.d.ts | 452 + node_modules/@types/node/constants.d.ts | 21 + node_modules/@types/node/crypto.d.ts | 4509 +++++ node_modules/@types/node/dgram.d.ts | 599 + .../@types/node/diagnostics_channel.d.ts | 578 + node_modules/@types/node/dns.d.ts | 865 + node_modules/@types/node/dns/promises.d.ts | 476 + node_modules/@types/node/dom-events.d.ts | 99 + node_modules/@types/node/domain.d.ts | 170 + node_modules/@types/node/events.d.ts | 931 + node_modules/@types/node/fs.d.ts | 4437 +++++ node_modules/@types/node/fs/promises.d.ts | 1272 ++ node_modules/@types/node/globals.d.ts | 366 + .../@types/node/globals.typedarray.d.ts | 21 + node_modules/@types/node/http.d.ts | 1984 +++ node_modules/@types/node/http2.d.ts | 2557 +++ node_modules/@types/node/https.d.ts | 545 + node_modules/@types/node/index.d.ts | 92 + node_modules/@types/node/inspector.d.ts | 4002 +++++ node_modules/@types/node/module.d.ts | 788 + node_modules/@types/node/net.d.ts | 1035 ++ node_modules/@types/node/os.d.ts | 495 + node_modules/@types/node/package.json | 225 + node_modules/@types/node/path.d.ts | 200 + node_modules/@types/node/perf_hooks.d.ts | 970 ++ node_modules/@types/node/process.d.ts | 2063 +++ node_modules/@types/node/punycode.d.ts | 117 + node_modules/@types/node/querystring.d.ts | 152 + node_modules/@types/node/readline.d.ts | 594 + .../@types/node/readline/promises.d.ts | 162 + node_modules/@types/node/repl.d.ts | 430 + node_modules/@types/node/sea.d.ts | 153 + node_modules/@types/node/sqlite.d.ts | 508 + node_modules/@types/node/stream.d.ts | 1668 ++ .../@types/node/stream/consumers.d.ts | 38 + node_modules/@types/node/stream/promises.d.ts | 90 + node_modules/@types/node/stream/web.d.ts | 614 + node_modules/@types/node/string_decoder.d.ts | 67 + node_modules/@types/node/test.d.ts | 2280 +++ node_modules/@types/node/timers.d.ts | 287 + node_modules/@types/node/timers/promises.d.ts | 108 + node_modules/@types/node/tls.d.ts | 1259 ++ node_modules/@types/node/trace_events.d.ts | 197 + .../@types/node/ts5.6/buffer.buffer.d.ts | 460 + .../@types/node/ts5.6/globals.typedarray.d.ts | 19 + node_modules/@types/node/ts5.6/index.d.ts | 92 + node_modules/@types/node/tty.d.ts | 208 + node_modules/@types/node/url.d.ts | 972 ++ node_modules/@types/node/util.d.ts | 2584 +++ node_modules/@types/node/v8.d.ts | 889 + node_modules/@types/node/vm.d.ts | 1029 ++ node_modules/@types/node/wasi.d.ts | 181 + node_modules/@types/node/worker_threads.d.ts | 759 + node_modules/@types/node/zlib.d.ts | 670 + node_modules/@types/stack-utils/LICENSE | 21 + node_modules/@types/stack-utils/README.md | 78 + node_modules/@types/stack-utils/index.d.ts | 59 + node_modules/@types/stack-utils/package.json | 25 + node_modules/@types/yargs-parser/LICENSE | 21 + node_modules/@types/yargs-parser/README.md | 15 + node_modules/@types/yargs-parser/index.d.ts | 112 + node_modules/@types/yargs-parser/package.json | 25 + node_modules/@types/yargs/LICENSE | 21 + node_modules/@types/yargs/README.md | 15 + node_modules/@types/yargs/helpers.d.mts | 1 + node_modules/@types/yargs/helpers.d.ts | 5 + node_modules/@types/yargs/index.d.mts | 47 + node_modules/@types/yargs/index.d.ts | 1036 ++ node_modules/@types/yargs/package.json | 87 + node_modules/@types/yargs/yargs.d.ts | 9 + node_modules/ansi-escapes/index.d.ts | 248 + node_modules/ansi-escapes/index.js | 157 + node_modules/ansi-escapes/license | 9 + node_modules/ansi-escapes/package.json | 57 + node_modules/ansi-escapes/readme.md | 245 + node_modules/ansi-regex/index.d.ts | 37 + node_modules/ansi-regex/index.js | 10 + node_modules/ansi-regex/license | 9 + node_modules/ansi-regex/package.json | 55 + node_modules/ansi-regex/readme.md | 78 + node_modules/ansi-styles/index.d.ts | 345 + node_modules/ansi-styles/index.js | 163 + node_modules/ansi-styles/license | 9 + node_modules/ansi-styles/package.json | 56 + node_modules/ansi-styles/readme.md | 152 + node_modules/anymatch/LICENSE | 15 + node_modules/anymatch/README.md | 87 + node_modules/anymatch/index.d.ts | 20 + node_modules/anymatch/index.js | 104 + .../node_modules/picomatch/CHANGELOG.md | 136 + .../anymatch/node_modules/picomatch/LICENSE | 21 + .../anymatch/node_modules/picomatch/README.md | 708 + .../anymatch/node_modules/picomatch/index.js | 3 + .../node_modules/picomatch/lib/constants.js | 179 + .../node_modules/picomatch/lib/parse.js | 1091 ++ .../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 | 185 + node_modules/argparse/LICENSE | 21 + node_modules/argparse/README.md | 257 + node_modules/argparse/index.js | 3 + node_modules/argparse/lib/action.js | 146 + node_modules/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 + node_modules/argparse/lib/action/version.js | 47 + node_modules/argparse/lib/action_container.js | 482 + node_modules/argparse/lib/argparse.js | 14 + node_modules/argparse/lib/argument/error.js | 50 + .../argparse/lib/argument/exclusive.js | 54 + node_modules/argparse/lib/argument/group.js | 75 + node_modules/argparse/lib/argument_parser.js | 1161 ++ node_modules/argparse/lib/const.js | 21 + .../argparse/lib/help/added_formatters.js | 87 + node_modules/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 + node_modules/babel-jest/LICENSE | 21 + node_modules/babel-jest/README.md | 25 + node_modules/babel-jest/build/index.d.ts | 24 + node_modules/babel-jest/build/index.js | 323 + .../babel-jest/build/loadBabelConfig.js | 24 + node_modules/babel-jest/package.json | 44 + .../babel-plugin-istanbul/CHANGELOG.md | 320 + node_modules/babel-plugin-istanbul/LICENSE | 27 + node_modules/babel-plugin-istanbul/README.md | 135 + .../babel-plugin-istanbul/lib/index.js | 170 + .../lib/load-nyc-config-sync.js | 20 + .../istanbul-lib-instrument/CHANGELOG.md | 631 + .../istanbul-lib-instrument/LICENSE | 24 + .../istanbul-lib-instrument/README.md | 22 + .../istanbul-lib-instrument/package.json | 50 + .../istanbul-lib-instrument/src/constants.js | 14 + .../istanbul-lib-instrument/src/index.js | 21 + .../src/instrumenter.js | 162 + .../src/read-coverage.js | 77 + .../src/source-coverage.js | 135 + .../istanbul-lib-instrument/src/visitor.js | 843 + .../babel-plugin-istanbul/package.json | 71 + node_modules/babel-plugin-jest-hoist/LICENSE | 21 + .../babel-plugin-jest-hoist/README.md | 33 + .../babel-plugin-jest-hoist/build/index.d.ts | 16 + .../babel-plugin-jest-hoist/build/index.js | 367 + .../babel-plugin-jest-hoist/package.json | 42 + .../.github/FUNDING.yml | 3 + .../.github/workflows/nodejs.yml | 49 + .../babel-preset-current-node-syntax/LICENSE | 22 + .../README.md | 30 + .../package.json | 45 + .../src/index.js | 72 + node_modules/babel-preset-jest/LICENSE | 21 + node_modules/babel-preset-jest/README.md | 33 + node_modules/babel-preset-jest/index.js | 14 + node_modules/babel-preset-jest/package.json | 29 + .../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/brace-expansion/LICENSE | 21 + node_modules/brace-expansion/README.md | 129 + node_modules/brace-expansion/index.js | 201 + node_modules/brace-expansion/package.json | 47 + 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/browserslist/LICENSE | 20 + node_modules/browserslist/README.md | 67 + node_modules/browserslist/browser.js | 54 + node_modules/browserslist/cli.js | 156 + node_modules/browserslist/error.d.ts | 7 + node_modules/browserslist/error.js | 12 + node_modules/browserslist/index.d.ts | 224 + node_modules/browserslist/index.js | 1246 ++ node_modules/browserslist/node.js | 469 + node_modules/browserslist/package.json | 44 + node_modules/browserslist/parse.js | 78 + node_modules/bser/README.md | 81 + node_modules/bser/index.js | 586 + node_modules/bser/package.json | 33 + node_modules/buffer-from/LICENSE | 21 + node_modules/buffer-from/index.js | 72 + node_modules/buffer-from/package.json | 19 + node_modules/buffer-from/readme.md | 69 + node_modules/callsites/index.d.ts | 96 + node_modules/callsites/index.js | 13 + node_modules/callsites/license | 9 + node_modules/callsites/package.json | 39 + node_modules/callsites/readme.md | 48 + node_modules/camelcase/index.d.ts | 63 + node_modules/camelcase/index.js | 76 + node_modules/camelcase/license | 9 + node_modules/camelcase/package.json | 43 + node_modules/camelcase/readme.md | 99 + node_modules/caniuse-lite/LICENSE | 395 + node_modules/caniuse-lite/README.md | 6 + node_modules/caniuse-lite/data/agents.js | 1 + .../caniuse-lite/data/browserVersions.js | 1 + node_modules/caniuse-lite/data/browsers.js | 1 + node_modules/caniuse-lite/data/features.js | 1 + .../caniuse-lite/data/features/aac.js | 1 + .../data/features/abortcontroller.js | 1 + .../caniuse-lite/data/features/ac3-ec3.js | 1 + .../data/features/accelerometer.js | 1 + .../data/features/addeventlistener.js | 1 + .../data/features/alternate-stylesheet.js | 1 + .../data/features/ambient-light.js | 1 + .../caniuse-lite/data/features/apng.js | 1 + .../data/features/array-find-index.js | 1 + .../caniuse-lite/data/features/array-find.js | 1 + .../caniuse-lite/data/features/array-flat.js | 1 + .../data/features/array-includes.js | 1 + .../data/features/arrow-functions.js | 1 + .../caniuse-lite/data/features/asmjs.js | 1 + .../data/features/async-clipboard.js | 1 + .../data/features/async-functions.js | 1 + .../caniuse-lite/data/features/atob-btoa.js | 1 + .../caniuse-lite/data/features/audio-api.js | 1 + .../caniuse-lite/data/features/audio.js | 1 + .../caniuse-lite/data/features/audiotracks.js | 1 + .../caniuse-lite/data/features/autofocus.js | 1 + .../caniuse-lite/data/features/auxclick.js | 1 + .../caniuse-lite/data/features/av1.js | 1 + .../caniuse-lite/data/features/avif.js | 1 + .../data/features/background-attachment.js | 1 + .../data/features/background-clip-text.js | 1 + .../data/features/background-img-opts.js | 1 + .../data/features/background-position-x-y.js | 1 + .../features/background-repeat-round-space.js | 1 + .../data/features/background-sync.js | 1 + .../data/features/battery-status.js | 1 + .../caniuse-lite/data/features/beacon.js | 1 + .../data/features/beforeafterprint.js | 1 + .../caniuse-lite/data/features/bigint.js | 1 + .../caniuse-lite/data/features/blobbuilder.js | 1 + .../caniuse-lite/data/features/bloburls.js | 1 + .../data/features/border-image.js | 1 + .../data/features/border-radius.js | 1 + .../data/features/broadcastchannel.js | 1 + .../caniuse-lite/data/features/brotli.js | 1 + .../caniuse-lite/data/features/calc.js | 1 + .../data/features/canvas-blending.js | 1 + .../caniuse-lite/data/features/canvas-text.js | 1 + .../caniuse-lite/data/features/canvas.js | 1 + .../caniuse-lite/data/features/ch-unit.js | 1 + .../data/features/chacha20-poly1305.js | 1 + .../data/features/channel-messaging.js | 1 + .../data/features/childnode-remove.js | 1 + .../caniuse-lite/data/features/classlist.js | 1 + .../client-hints-dpr-width-viewport.js | 1 + .../caniuse-lite/data/features/clipboard.js | 1 + .../caniuse-lite/data/features/colr-v1.js | 1 + .../caniuse-lite/data/features/colr.js | 1 + .../data/features/comparedocumentposition.js | 1 + .../data/features/console-basic.js | 1 + .../data/features/console-time.js | 1 + .../caniuse-lite/data/features/const.js | 1 + .../data/features/constraint-validation.js | 1 + .../data/features/contenteditable.js | 1 + .../data/features/contentsecuritypolicy.js | 1 + .../data/features/contentsecuritypolicy2.js | 1 + .../data/features/cookie-store-api.js | 1 + .../caniuse-lite/data/features/cors.js | 1 + .../data/features/createimagebitmap.js | 1 + .../data/features/credential-management.js | 1 + .../cross-document-view-transitions.js | 1 + .../data/features/cryptography.js | 1 + .../caniuse-lite/data/features/css-all.js | 1 + .../data/features/css-anchor-positioning.js | 1 + .../data/features/css-animation.js | 1 + .../data/features/css-any-link.js | 1 + .../data/features/css-appearance.js | 1 + .../data/features/css-at-counter-style.js | 1 + .../data/features/css-autofill.js | 1 + .../data/features/css-backdrop-filter.js | 1 + .../data/features/css-background-offsets.js | 1 + .../data/features/css-backgroundblendmode.js | 1 + .../data/features/css-boxdecorationbreak.js | 1 + .../data/features/css-boxshadow.js | 1 + .../caniuse-lite/data/features/css-canvas.js | 1 + .../data/features/css-caret-color.js | 1 + .../data/features/css-cascade-layers.js | 1 + .../data/features/css-cascade-scope.js | 1 + .../data/features/css-case-insensitive.js | 1 + .../data/features/css-clip-path.js | 1 + .../data/features/css-color-adjust.js | 1 + .../data/features/css-color-function.js | 1 + .../data/features/css-conic-gradients.js | 1 + .../features/css-container-queries-style.js | 1 + .../data/features/css-container-queries.js | 1 + .../features/css-container-query-units.js | 1 + .../data/features/css-containment.js | 1 + .../data/features/css-content-visibility.js | 1 + .../data/features/css-counters.js | 1 + .../data/features/css-crisp-edges.js | 1 + .../data/features/css-cross-fade.js | 1 + .../data/features/css-default-pseudo.js | 1 + .../data/features/css-descendant-gtgt.js | 1 + .../data/features/css-deviceadaptation.js | 1 + .../data/features/css-dir-pseudo.js | 1 + .../data/features/css-display-contents.js | 1 + .../data/features/css-element-function.js | 1 + .../data/features/css-env-function.js | 1 + .../data/features/css-exclusions.js | 1 + .../data/features/css-featurequeries.js | 1 + .../data/features/css-file-selector-button.js | 1 + .../data/features/css-filter-function.js | 1 + .../caniuse-lite/data/features/css-filters.js | 1 + .../data/features/css-first-letter.js | 1 + .../data/features/css-first-line.js | 1 + .../caniuse-lite/data/features/css-fixed.js | 1 + .../data/features/css-focus-visible.js | 1 + .../data/features/css-focus-within.js | 1 + .../data/features/css-font-palette.js | 1 + .../features/css-font-rendering-controls.js | 1 + .../data/features/css-font-stretch.js | 1 + .../data/features/css-gencontent.js | 1 + .../data/features/css-gradients.js | 1 + .../data/features/css-grid-animation.js | 1 + .../caniuse-lite/data/features/css-grid.js | 1 + .../data/features/css-hanging-punctuation.js | 1 + .../caniuse-lite/data/features/css-has.js | 1 + .../caniuse-lite/data/features/css-hyphens.js | 1 + .../data/features/css-image-orientation.js | 1 + .../data/features/css-image-set.js | 1 + .../data/features/css-in-out-of-range.js | 1 + .../data/features/css-indeterminate-pseudo.js | 1 + .../data/features/css-initial-letter.js | 1 + .../data/features/css-initial-value.js | 1 + .../caniuse-lite/data/features/css-lch-lab.js | 1 + .../data/features/css-letter-spacing.js | 1 + .../data/features/css-line-clamp.js | 1 + .../data/features/css-logical-props.js | 1 + .../data/features/css-marker-pseudo.js | 1 + .../caniuse-lite/data/features/css-masks.js | 1 + .../data/features/css-matches-pseudo.js | 1 + .../data/features/css-math-functions.js | 1 + .../data/features/css-media-interaction.js | 1 + .../data/features/css-media-range-syntax.js | 1 + .../data/features/css-media-resolution.js | 1 + .../data/features/css-media-scripting.js | 1 + .../data/features/css-mediaqueries.js | 1 + .../data/features/css-mixblendmode.js | 1 + .../data/features/css-module-scripts.js | 1 + .../data/features/css-motion-paths.js | 1 + .../data/features/css-namespaces.js | 1 + .../caniuse-lite/data/features/css-nesting.js | 1 + .../data/features/css-not-sel-list.js | 1 + .../data/features/css-nth-child-of.js | 1 + .../caniuse-lite/data/features/css-opacity.js | 1 + .../data/features/css-optional-pseudo.js | 1 + .../data/features/css-overflow-anchor.js | 1 + .../data/features/css-overflow-overlay.js | 1 + .../data/features/css-overflow.js | 1 + .../data/features/css-overscroll-behavior.js | 1 + .../data/features/css-page-break.js | 1 + .../data/features/css-paged-media.js | 1 + .../data/features/css-paint-api.js | 1 + .../data/features/css-placeholder-shown.js | 1 + .../data/features/css-placeholder.js | 1 + .../data/features/css-print-color-adjust.js | 1 + .../data/features/css-read-only-write.js | 1 + .../data/features/css-rebeccapurple.js | 1 + .../data/features/css-reflections.js | 1 + .../caniuse-lite/data/features/css-regions.js | 1 + .../data/features/css-relative-colors.js | 1 + .../data/features/css-repeating-gradients.js | 1 + .../caniuse-lite/data/features/css-resize.js | 1 + .../data/features/css-revert-value.js | 1 + .../data/features/css-rrggbbaa.js | 1 + .../data/features/css-scroll-behavior.js | 1 + .../data/features/css-scrollbar.js | 1 + .../caniuse-lite/data/features/css-sel2.js | 1 + .../caniuse-lite/data/features/css-sel3.js | 1 + .../data/features/css-selection.js | 1 + .../caniuse-lite/data/features/css-shapes.js | 1 + .../data/features/css-snappoints.js | 1 + .../caniuse-lite/data/features/css-sticky.js | 1 + .../caniuse-lite/data/features/css-subgrid.js | 1 + .../data/features/css-supports-api.js | 1 + .../caniuse-lite/data/features/css-table.js | 1 + .../data/features/css-text-align-last.js | 1 + .../data/features/css-text-box-trim.js | 1 + .../data/features/css-text-indent.js | 1 + .../data/features/css-text-justify.js | 1 + .../data/features/css-text-orientation.js | 1 + .../data/features/css-text-spacing.js | 1 + .../data/features/css-text-wrap-balance.js | 1 + .../data/features/css-textshadow.js | 1 + .../data/features/css-touch-action.js | 1 + .../data/features/css-transitions.js | 1 + .../data/features/css-unicode-bidi.js | 1 + .../data/features/css-unset-value.js | 1 + .../data/features/css-variables.js | 1 + .../data/features/css-when-else.js | 1 + .../data/features/css-widows-orphans.js | 1 + .../data/features/css-width-stretch.js | 1 + .../data/features/css-writing-mode.js | 1 + .../caniuse-lite/data/features/css-zoom.js | 1 + .../caniuse-lite/data/features/css3-attr.js | 1 + .../data/features/css3-boxsizing.js | 1 + .../caniuse-lite/data/features/css3-colors.js | 1 + .../data/features/css3-cursors-grab.js | 1 + .../data/features/css3-cursors-newer.js | 1 + .../data/features/css3-cursors.js | 1 + .../data/features/css3-tabsize.js | 1 + .../data/features/currentcolor.js | 1 + .../data/features/custom-elements.js | 1 + .../data/features/custom-elementsv1.js | 1 + .../caniuse-lite/data/features/customevent.js | 1 + .../caniuse-lite/data/features/datalist.js | 1 + .../caniuse-lite/data/features/dataset.js | 1 + .../caniuse-lite/data/features/datauri.js | 1 + .../data/features/date-tolocaledatestring.js | 1 + .../data/features/declarative-shadow-dom.js | 1 + .../caniuse-lite/data/features/decorators.js | 1 + .../caniuse-lite/data/features/details.js | 1 + .../data/features/deviceorientation.js | 1 + .../data/features/devicepixelratio.js | 1 + .../caniuse-lite/data/features/dialog.js | 1 + .../data/features/dispatchevent.js | 1 + .../caniuse-lite/data/features/dnssec.js | 1 + .../data/features/do-not-track.js | 1 + .../data/features/document-currentscript.js | 1 + .../data/features/document-evaluate-xpath.js | 1 + .../data/features/document-execcommand.js | 1 + .../data/features/document-policy.js | 1 + .../features/document-scrollingelement.js | 1 + .../data/features/documenthead.js | 1 + .../data/features/dom-manip-convenience.js | 1 + .../caniuse-lite/data/features/dom-range.js | 1 + .../data/features/domcontentloaded.js | 1 + .../caniuse-lite/data/features/dommatrix.js | 1 + .../caniuse-lite/data/features/download.js | 1 + .../caniuse-lite/data/features/dragndrop.js | 1 + .../data/features/element-closest.js | 1 + .../data/features/element-from-point.js | 1 + .../data/features/element-scroll-methods.js | 1 + .../caniuse-lite/data/features/eme.js | 1 + .../caniuse-lite/data/features/eot.js | 1 + .../caniuse-lite/data/features/es5.js | 1 + .../caniuse-lite/data/features/es6-class.js | 1 + .../data/features/es6-generators.js | 1 + .../features/es6-module-dynamic-import.js | 1 + .../caniuse-lite/data/features/es6-module.js | 1 + .../caniuse-lite/data/features/es6-number.js | 1 + .../data/features/es6-string-includes.js | 1 + .../caniuse-lite/data/features/es6.js | 1 + .../caniuse-lite/data/features/eventsource.js | 1 + .../data/features/extended-system-fonts.js | 1 + .../data/features/feature-policy.js | 1 + .../caniuse-lite/data/features/fetch.js | 1 + .../data/features/fieldset-disabled.js | 1 + .../caniuse-lite/data/features/fileapi.js | 1 + .../caniuse-lite/data/features/filereader.js | 1 + .../data/features/filereadersync.js | 1 + .../caniuse-lite/data/features/filesystem.js | 1 + .../caniuse-lite/data/features/flac.js | 1 + .../caniuse-lite/data/features/flexbox-gap.js | 1 + .../caniuse-lite/data/features/flexbox.js | 1 + .../caniuse-lite/data/features/flow-root.js | 1 + .../data/features/focusin-focusout-events.js | 1 + .../data/features/font-family-system-ui.js | 1 + .../data/features/font-feature.js | 1 + .../data/features/font-kerning.js | 1 + .../data/features/font-loading.js | 1 + .../data/features/font-size-adjust.js | 1 + .../caniuse-lite/data/features/font-smooth.js | 1 + .../data/features/font-unicode-range.js | 1 + .../data/features/font-variant-alternates.js | 1 + .../data/features/font-variant-numeric.js | 1 + .../caniuse-lite/data/features/fontface.js | 1 + .../data/features/form-attribute.js | 1 + .../data/features/form-submit-attributes.js | 1 + .../data/features/form-validation.js | 1 + .../caniuse-lite/data/features/forms.js | 1 + .../caniuse-lite/data/features/fullscreen.js | 1 + .../caniuse-lite/data/features/gamepad.js | 1 + .../caniuse-lite/data/features/geolocation.js | 1 + .../data/features/getboundingclientrect.js | 1 + .../data/features/getcomputedstyle.js | 1 + .../data/features/getelementsbyclassname.js | 1 + .../data/features/getrandomvalues.js | 1 + .../caniuse-lite/data/features/gyroscope.js | 1 + .../data/features/hardwareconcurrency.js | 1 + .../caniuse-lite/data/features/hashchange.js | 1 + .../caniuse-lite/data/features/heif.js | 1 + .../caniuse-lite/data/features/hevc.js | 1 + .../caniuse-lite/data/features/hidden.js | 1 + .../data/features/high-resolution-time.js | 1 + .../caniuse-lite/data/features/history.js | 1 + .../data/features/html-media-capture.js | 1 + .../data/features/html5semantic.js | 1 + .../data/features/http-live-streaming.js | 1 + .../caniuse-lite/data/features/http2.js | 1 + .../caniuse-lite/data/features/http3.js | 1 + .../data/features/iframe-sandbox.js | 1 + .../data/features/iframe-seamless.js | 1 + .../data/features/iframe-srcdoc.js | 1 + .../data/features/imagecapture.js | 1 + .../caniuse-lite/data/features/ime.js | 1 + .../img-naturalwidth-naturalheight.js | 1 + .../caniuse-lite/data/features/import-maps.js | 1 + .../caniuse-lite/data/features/imports.js | 1 + .../data/features/indeterminate-checkbox.js | 1 + .../caniuse-lite/data/features/indexeddb.js | 1 + .../caniuse-lite/data/features/indexeddb2.js | 1 + .../data/features/inline-block.js | 1 + .../caniuse-lite/data/features/innertext.js | 1 + .../data/features/input-autocomplete-onoff.js | 1 + .../caniuse-lite/data/features/input-color.js | 1 + .../data/features/input-datetime.js | 1 + .../data/features/input-email-tel-url.js | 1 + .../caniuse-lite/data/features/input-event.js | 1 + .../data/features/input-file-accept.js | 1 + .../data/features/input-file-directory.js | 1 + .../data/features/input-file-multiple.js | 1 + .../data/features/input-inputmode.js | 1 + .../data/features/input-minlength.js | 1 + .../data/features/input-number.js | 1 + .../data/features/input-pattern.js | 1 + .../data/features/input-placeholder.js | 1 + .../caniuse-lite/data/features/input-range.js | 1 + .../data/features/input-search.js | 1 + .../data/features/input-selection.js | 1 + .../data/features/insert-adjacent.js | 1 + .../data/features/insertadjacenthtml.js | 1 + .../data/features/internationalization.js | 1 + .../data/features/intersectionobserver-v2.js | 1 + .../data/features/intersectionobserver.js | 1 + .../data/features/intl-pluralrules.js | 1 + .../data/features/intrinsic-width.js | 1 + .../caniuse-lite/data/features/jpeg2000.js | 1 + .../caniuse-lite/data/features/jpegxl.js | 1 + .../caniuse-lite/data/features/jpegxr.js | 1 + .../data/features/js-regexp-lookbehind.js | 1 + .../caniuse-lite/data/features/json.js | 1 + .../features/justify-content-space-evenly.js | 1 + .../data/features/kerning-pairs-ligatures.js | 1 + .../data/features/keyboardevent-charcode.js | 1 + .../data/features/keyboardevent-code.js | 1 + .../keyboardevent-getmodifierstate.js | 1 + .../data/features/keyboardevent-key.js | 1 + .../data/features/keyboardevent-location.js | 1 + .../data/features/keyboardevent-which.js | 1 + .../caniuse-lite/data/features/lazyload.js | 1 + .../caniuse-lite/data/features/let.js | 1 + .../data/features/link-icon-png.js | 1 + .../data/features/link-icon-svg.js | 1 + .../data/features/link-rel-dns-prefetch.js | 1 + .../data/features/link-rel-modulepreload.js | 1 + .../data/features/link-rel-preconnect.js | 1 + .../data/features/link-rel-prefetch.js | 1 + .../data/features/link-rel-preload.js | 1 + .../data/features/link-rel-prerender.js | 1 + .../data/features/loading-lazy-attr.js | 1 + .../data/features/localecompare.js | 1 + .../data/features/magnetometer.js | 1 + .../data/features/matchesselector.js | 1 + .../caniuse-lite/data/features/matchmedia.js | 1 + .../caniuse-lite/data/features/mathml.js | 1 + .../caniuse-lite/data/features/maxlength.js | 1 + .../mdn-css-backdrop-pseudo-element.js | 1 + .../mdn-css-unicode-bidi-isolate-override.js | 1 + .../features/mdn-css-unicode-bidi-isolate.js | 1 + .../mdn-css-unicode-bidi-plaintext.js | 1 + .../features/mdn-text-decoration-color.js | 1 + .../data/features/mdn-text-decoration-line.js | 1 + .../features/mdn-text-decoration-shorthand.js | 1 + .../features/mdn-text-decoration-style.js | 1 + .../data/features/media-fragments.js | 1 + .../data/features/mediacapture-fromelement.js | 1 + .../data/features/mediarecorder.js | 1 + .../caniuse-lite/data/features/mediasource.js | 1 + .../caniuse-lite/data/features/menu.js | 1 + .../data/features/meta-theme-color.js | 1 + .../caniuse-lite/data/features/meter.js | 1 + .../caniuse-lite/data/features/midi.js | 1 + .../caniuse-lite/data/features/minmaxwh.js | 1 + .../caniuse-lite/data/features/mp3.js | 1 + .../caniuse-lite/data/features/mpeg-dash.js | 1 + .../caniuse-lite/data/features/mpeg4.js | 1 + .../data/features/multibackgrounds.js | 1 + .../caniuse-lite/data/features/multicolumn.js | 1 + .../data/features/mutation-events.js | 1 + .../data/features/mutationobserver.js | 1 + .../data/features/namevalue-storage.js | 1 + .../data/features/native-filesystem-api.js | 1 + .../caniuse-lite/data/features/nav-timing.js | 1 + .../caniuse-lite/data/features/netinfo.js | 1 + .../data/features/notifications.js | 1 + .../data/features/object-entries.js | 1 + .../caniuse-lite/data/features/object-fit.js | 1 + .../data/features/object-observe.js | 1 + .../data/features/object-values.js | 1 + .../caniuse-lite/data/features/objectrtc.js | 1 + .../data/features/offline-apps.js | 1 + .../data/features/offscreencanvas.js | 1 + .../caniuse-lite/data/features/ogg-vorbis.js | 1 + .../caniuse-lite/data/features/ogv.js | 1 + .../caniuse-lite/data/features/ol-reversed.js | 1 + .../data/features/once-event-listener.js | 1 + .../data/features/online-status.js | 1 + .../caniuse-lite/data/features/opus.js | 1 + .../data/features/orientation-sensor.js | 1 + .../caniuse-lite/data/features/outline.js | 1 + .../data/features/pad-start-end.js | 1 + .../data/features/page-transition-events.js | 1 + .../data/features/pagevisibility.js | 1 + .../data/features/passive-event-listener.js | 1 + .../caniuse-lite/data/features/passkeys.js | 1 + .../data/features/passwordrules.js | 1 + .../caniuse-lite/data/features/path2d.js | 1 + .../data/features/payment-request.js | 1 + .../caniuse-lite/data/features/pdf-viewer.js | 1 + .../data/features/permissions-api.js | 1 + .../data/features/permissions-policy.js | 1 + .../data/features/picture-in-picture.js | 1 + .../caniuse-lite/data/features/picture.js | 1 + .../caniuse-lite/data/features/ping.js | 1 + .../caniuse-lite/data/features/png-alpha.js | 1 + .../data/features/pointer-events.js | 1 + .../caniuse-lite/data/features/pointer.js | 1 + .../caniuse-lite/data/features/pointerlock.js | 1 + .../caniuse-lite/data/features/portals.js | 1 + .../data/features/prefers-color-scheme.js | 1 + .../data/features/prefers-reduced-motion.js | 1 + .../caniuse-lite/data/features/progress.js | 1 + .../data/features/promise-finally.js | 1 + .../caniuse-lite/data/features/promises.js | 1 + .../caniuse-lite/data/features/proximity.js | 1 + .../caniuse-lite/data/features/proxy.js | 1 + .../data/features/publickeypinning.js | 1 + .../caniuse-lite/data/features/push-api.js | 1 + .../data/features/queryselector.js | 1 + .../data/features/readonly-attr.js | 1 + .../data/features/referrer-policy.js | 1 + .../data/features/registerprotocolhandler.js | 1 + .../data/features/rel-noopener.js | 1 + .../data/features/rel-noreferrer.js | 1 + .../caniuse-lite/data/features/rellist.js | 1 + .../caniuse-lite/data/features/rem.js | 1 + .../data/features/requestanimationframe.js | 1 + .../data/features/requestidlecallback.js | 1 + .../data/features/resizeobserver.js | 1 + .../data/features/resource-timing.js | 1 + .../data/features/rest-parameters.js | 1 + .../data/features/rtcpeerconnection.js | 1 + .../caniuse-lite/data/features/ruby.js | 1 + .../caniuse-lite/data/features/run-in.js | 1 + .../features/same-site-cookie-attribute.js | 1 + .../data/features/screen-orientation.js | 1 + .../data/features/script-async.js | 1 + .../data/features/script-defer.js | 1 + .../data/features/scrollintoview.js | 1 + .../data/features/scrollintoviewifneeded.js | 1 + .../caniuse-lite/data/features/sdch.js | 1 + .../data/features/selection-api.js | 1 + .../caniuse-lite/data/features/selectlist.js | 1 + .../data/features/server-timing.js | 1 + .../data/features/serviceworkers.js | 1 + .../data/features/setimmediate.js | 1 + .../caniuse-lite/data/features/shadowdom.js | 1 + .../caniuse-lite/data/features/shadowdomv1.js | 1 + .../data/features/sharedarraybuffer.js | 1 + .../data/features/sharedworkers.js | 1 + .../caniuse-lite/data/features/sni.js | 1 + .../caniuse-lite/data/features/spdy.js | 1 + .../data/features/speech-recognition.js | 1 + .../data/features/speech-synthesis.js | 1 + .../data/features/spellcheck-attribute.js | 1 + .../caniuse-lite/data/features/sql-storage.js | 1 + .../caniuse-lite/data/features/srcset.js | 1 + .../caniuse-lite/data/features/stream.js | 1 + .../caniuse-lite/data/features/streams.js | 1 + .../data/features/stricttransportsecurity.js | 1 + .../data/features/style-scoped.js | 1 + .../data/features/subresource-bundling.js | 1 + .../data/features/subresource-integrity.js | 1 + .../caniuse-lite/data/features/svg-css.js | 1 + .../caniuse-lite/data/features/svg-filters.js | 1 + .../caniuse-lite/data/features/svg-fonts.js | 1 + .../data/features/svg-fragment.js | 1 + .../caniuse-lite/data/features/svg-html.js | 1 + .../caniuse-lite/data/features/svg-html5.js | 1 + .../caniuse-lite/data/features/svg-img.js | 1 + .../caniuse-lite/data/features/svg-smil.js | 1 + .../caniuse-lite/data/features/svg.js | 1 + .../caniuse-lite/data/features/sxg.js | 1 + .../data/features/tabindex-attr.js | 1 + .../data/features/template-literals.js | 1 + .../caniuse-lite/data/features/template.js | 1 + .../caniuse-lite/data/features/temporal.js | 1 + .../caniuse-lite/data/features/testfeat.js | 1 + .../data/features/text-decoration.js | 1 + .../data/features/text-emphasis.js | 1 + .../data/features/text-overflow.js | 1 + .../data/features/text-size-adjust.js | 1 + .../caniuse-lite/data/features/text-stroke.js | 1 + .../caniuse-lite/data/features/textcontent.js | 1 + .../caniuse-lite/data/features/textencoder.js | 1 + .../caniuse-lite/data/features/tls1-1.js | 1 + .../caniuse-lite/data/features/tls1-2.js | 1 + .../caniuse-lite/data/features/tls1-3.js | 1 + .../caniuse-lite/data/features/touch.js | 1 + .../data/features/transforms2d.js | 1 + .../data/features/transforms3d.js | 1 + .../data/features/trusted-types.js | 1 + .../caniuse-lite/data/features/ttf.js | 1 + .../caniuse-lite/data/features/typedarrays.js | 1 + .../caniuse-lite/data/features/u2f.js | 1 + .../data/features/unhandledrejection.js | 1 + .../data/features/upgradeinsecurerequests.js | 1 + .../features/url-scroll-to-text-fragment.js | 1 + .../caniuse-lite/data/features/url.js | 1 + .../data/features/urlsearchparams.js | 1 + .../caniuse-lite/data/features/use-strict.js | 1 + .../data/features/user-select-none.js | 1 + .../caniuse-lite/data/features/user-timing.js | 1 + .../data/features/variable-fonts.js | 1 + .../data/features/vector-effect.js | 1 + .../caniuse-lite/data/features/vibration.js | 1 + .../caniuse-lite/data/features/video.js | 1 + .../caniuse-lite/data/features/videotracks.js | 1 + .../data/features/view-transitions.js | 1 + .../data/features/viewport-unit-variants.js | 1 + .../data/features/viewport-units.js | 1 + .../caniuse-lite/data/features/wai-aria.js | 1 + .../caniuse-lite/data/features/wake-lock.js | 1 + .../caniuse-lite/data/features/wasm-bigint.js | 1 + .../data/features/wasm-bulk-memory.js | 1 + .../data/features/wasm-extended-const.js | 1 + .../caniuse-lite/data/features/wasm-gc.js | 1 + .../data/features/wasm-multi-memory.js | 1 + .../data/features/wasm-multi-value.js | 1 + .../data/features/wasm-mutable-globals.js | 1 + .../data/features/wasm-nontrapping-fptoint.js | 1 + .../data/features/wasm-reference-types.js | 1 + .../data/features/wasm-relaxed-simd.js | 1 + .../data/features/wasm-signext.js | 1 + .../caniuse-lite/data/features/wasm-simd.js | 1 + .../data/features/wasm-tail-calls.js | 1 + .../data/features/wasm-threads.js | 1 + .../caniuse-lite/data/features/wasm.js | 1 + .../caniuse-lite/data/features/wav.js | 1 + .../caniuse-lite/data/features/wbr-element.js | 1 + .../data/features/web-animation.js | 1 + .../data/features/web-app-manifest.js | 1 + .../data/features/web-bluetooth.js | 1 + .../caniuse-lite/data/features/web-serial.js | 1 + .../caniuse-lite/data/features/web-share.js | 1 + .../caniuse-lite/data/features/webauthn.js | 1 + .../caniuse-lite/data/features/webcodecs.js | 1 + .../caniuse-lite/data/features/webgl.js | 1 + .../caniuse-lite/data/features/webgl2.js | 1 + .../caniuse-lite/data/features/webgpu.js | 1 + .../caniuse-lite/data/features/webhid.js | 1 + .../data/features/webkit-user-drag.js | 1 + .../caniuse-lite/data/features/webm.js | 1 + .../caniuse-lite/data/features/webnfc.js | 1 + .../caniuse-lite/data/features/webp.js | 1 + .../caniuse-lite/data/features/websockets.js | 1 + .../data/features/webtransport.js | 1 + .../caniuse-lite/data/features/webusb.js | 1 + .../caniuse-lite/data/features/webvr.js | 1 + .../caniuse-lite/data/features/webvtt.js | 1 + .../caniuse-lite/data/features/webworkers.js | 1 + .../caniuse-lite/data/features/webxr.js | 1 + .../caniuse-lite/data/features/will-change.js | 1 + .../caniuse-lite/data/features/woff.js | 1 + .../caniuse-lite/data/features/woff2.js | 1 + .../caniuse-lite/data/features/word-break.js | 1 + .../caniuse-lite/data/features/wordwrap.js | 1 + .../data/features/x-doc-messaging.js | 1 + .../data/features/x-frame-options.js | 1 + .../caniuse-lite/data/features/xhr2.js | 1 + .../caniuse-lite/data/features/xhtml.js | 1 + .../caniuse-lite/data/features/xhtmlsmil.js | 1 + .../data/features/xml-serializer.js | 1 + .../caniuse-lite/data/features/zstd.js | 1 + node_modules/caniuse-lite/data/regions/AD.js | 1 + node_modules/caniuse-lite/data/regions/AE.js | 1 + node_modules/caniuse-lite/data/regions/AF.js | 1 + node_modules/caniuse-lite/data/regions/AG.js | 1 + node_modules/caniuse-lite/data/regions/AI.js | 1 + node_modules/caniuse-lite/data/regions/AL.js | 1 + node_modules/caniuse-lite/data/regions/AM.js | 1 + node_modules/caniuse-lite/data/regions/AO.js | 1 + node_modules/caniuse-lite/data/regions/AR.js | 1 + node_modules/caniuse-lite/data/regions/AS.js | 1 + node_modules/caniuse-lite/data/regions/AT.js | 1 + node_modules/caniuse-lite/data/regions/AU.js | 1 + node_modules/caniuse-lite/data/regions/AW.js | 1 + node_modules/caniuse-lite/data/regions/AX.js | 1 + node_modules/caniuse-lite/data/regions/AZ.js | 1 + node_modules/caniuse-lite/data/regions/BA.js | 1 + node_modules/caniuse-lite/data/regions/BB.js | 1 + node_modules/caniuse-lite/data/regions/BD.js | 1 + node_modules/caniuse-lite/data/regions/BE.js | 1 + node_modules/caniuse-lite/data/regions/BF.js | 1 + node_modules/caniuse-lite/data/regions/BG.js | 1 + node_modules/caniuse-lite/data/regions/BH.js | 1 + node_modules/caniuse-lite/data/regions/BI.js | 1 + node_modules/caniuse-lite/data/regions/BJ.js | 1 + node_modules/caniuse-lite/data/regions/BM.js | 1 + node_modules/caniuse-lite/data/regions/BN.js | 1 + node_modules/caniuse-lite/data/regions/BO.js | 1 + node_modules/caniuse-lite/data/regions/BR.js | 1 + node_modules/caniuse-lite/data/regions/BS.js | 1 + node_modules/caniuse-lite/data/regions/BT.js | 1 + node_modules/caniuse-lite/data/regions/BW.js | 1 + node_modules/caniuse-lite/data/regions/BY.js | 1 + node_modules/caniuse-lite/data/regions/BZ.js | 1 + node_modules/caniuse-lite/data/regions/CA.js | 1 + node_modules/caniuse-lite/data/regions/CD.js | 1 + node_modules/caniuse-lite/data/regions/CF.js | 1 + node_modules/caniuse-lite/data/regions/CG.js | 1 + node_modules/caniuse-lite/data/regions/CH.js | 1 + node_modules/caniuse-lite/data/regions/CI.js | 1 + node_modules/caniuse-lite/data/regions/CK.js | 1 + node_modules/caniuse-lite/data/regions/CL.js | 1 + node_modules/caniuse-lite/data/regions/CM.js | 1 + node_modules/caniuse-lite/data/regions/CN.js | 1 + node_modules/caniuse-lite/data/regions/CO.js | 1 + node_modules/caniuse-lite/data/regions/CR.js | 1 + node_modules/caniuse-lite/data/regions/CU.js | 1 + node_modules/caniuse-lite/data/regions/CV.js | 1 + node_modules/caniuse-lite/data/regions/CX.js | 1 + node_modules/caniuse-lite/data/regions/CY.js | 1 + node_modules/caniuse-lite/data/regions/CZ.js | 1 + node_modules/caniuse-lite/data/regions/DE.js | 1 + node_modules/caniuse-lite/data/regions/DJ.js | 1 + node_modules/caniuse-lite/data/regions/DK.js | 1 + node_modules/caniuse-lite/data/regions/DM.js | 1 + node_modules/caniuse-lite/data/regions/DO.js | 1 + node_modules/caniuse-lite/data/regions/DZ.js | 1 + node_modules/caniuse-lite/data/regions/EC.js | 1 + node_modules/caniuse-lite/data/regions/EE.js | 1 + node_modules/caniuse-lite/data/regions/EG.js | 1 + node_modules/caniuse-lite/data/regions/ER.js | 1 + node_modules/caniuse-lite/data/regions/ES.js | 1 + node_modules/caniuse-lite/data/regions/ET.js | 1 + node_modules/caniuse-lite/data/regions/FI.js | 1 + node_modules/caniuse-lite/data/regions/FJ.js | 1 + node_modules/caniuse-lite/data/regions/FK.js | 1 + node_modules/caniuse-lite/data/regions/FM.js | 1 + node_modules/caniuse-lite/data/regions/FO.js | 1 + node_modules/caniuse-lite/data/regions/FR.js | 1 + node_modules/caniuse-lite/data/regions/GA.js | 1 + node_modules/caniuse-lite/data/regions/GB.js | 1 + node_modules/caniuse-lite/data/regions/GD.js | 1 + node_modules/caniuse-lite/data/regions/GE.js | 1 + node_modules/caniuse-lite/data/regions/GF.js | 1 + node_modules/caniuse-lite/data/regions/GG.js | 1 + node_modules/caniuse-lite/data/regions/GH.js | 1 + node_modules/caniuse-lite/data/regions/GI.js | 1 + node_modules/caniuse-lite/data/regions/GL.js | 1 + node_modules/caniuse-lite/data/regions/GM.js | 1 + node_modules/caniuse-lite/data/regions/GN.js | 1 + node_modules/caniuse-lite/data/regions/GP.js | 1 + node_modules/caniuse-lite/data/regions/GQ.js | 1 + node_modules/caniuse-lite/data/regions/GR.js | 1 + node_modules/caniuse-lite/data/regions/GT.js | 1 + node_modules/caniuse-lite/data/regions/GU.js | 1 + node_modules/caniuse-lite/data/regions/GW.js | 1 + node_modules/caniuse-lite/data/regions/GY.js | 1 + node_modules/caniuse-lite/data/regions/HK.js | 1 + node_modules/caniuse-lite/data/regions/HN.js | 1 + node_modules/caniuse-lite/data/regions/HR.js | 1 + node_modules/caniuse-lite/data/regions/HT.js | 1 + node_modules/caniuse-lite/data/regions/HU.js | 1 + node_modules/caniuse-lite/data/regions/ID.js | 1 + node_modules/caniuse-lite/data/regions/IE.js | 1 + node_modules/caniuse-lite/data/regions/IL.js | 1 + node_modules/caniuse-lite/data/regions/IM.js | 1 + node_modules/caniuse-lite/data/regions/IN.js | 1 + node_modules/caniuse-lite/data/regions/IQ.js | 1 + node_modules/caniuse-lite/data/regions/IR.js | 1 + node_modules/caniuse-lite/data/regions/IS.js | 1 + node_modules/caniuse-lite/data/regions/IT.js | 1 + node_modules/caniuse-lite/data/regions/JE.js | 1 + node_modules/caniuse-lite/data/regions/JM.js | 1 + node_modules/caniuse-lite/data/regions/JO.js | 1 + node_modules/caniuse-lite/data/regions/JP.js | 1 + node_modules/caniuse-lite/data/regions/KE.js | 1 + node_modules/caniuse-lite/data/regions/KG.js | 1 + node_modules/caniuse-lite/data/regions/KH.js | 1 + node_modules/caniuse-lite/data/regions/KI.js | 1 + node_modules/caniuse-lite/data/regions/KM.js | 1 + node_modules/caniuse-lite/data/regions/KN.js | 1 + node_modules/caniuse-lite/data/regions/KP.js | 1 + node_modules/caniuse-lite/data/regions/KR.js | 1 + node_modules/caniuse-lite/data/regions/KW.js | 1 + node_modules/caniuse-lite/data/regions/KY.js | 1 + node_modules/caniuse-lite/data/regions/KZ.js | 1 + node_modules/caniuse-lite/data/regions/LA.js | 1 + node_modules/caniuse-lite/data/regions/LB.js | 1 + node_modules/caniuse-lite/data/regions/LC.js | 1 + node_modules/caniuse-lite/data/regions/LI.js | 1 + node_modules/caniuse-lite/data/regions/LK.js | 1 + node_modules/caniuse-lite/data/regions/LR.js | 1 + node_modules/caniuse-lite/data/regions/LS.js | 1 + node_modules/caniuse-lite/data/regions/LT.js | 1 + node_modules/caniuse-lite/data/regions/LU.js | 1 + node_modules/caniuse-lite/data/regions/LV.js | 1 + node_modules/caniuse-lite/data/regions/LY.js | 1 + node_modules/caniuse-lite/data/regions/MA.js | 1 + node_modules/caniuse-lite/data/regions/MC.js | 1 + node_modules/caniuse-lite/data/regions/MD.js | 1 + node_modules/caniuse-lite/data/regions/ME.js | 1 + node_modules/caniuse-lite/data/regions/MG.js | 1 + node_modules/caniuse-lite/data/regions/MH.js | 1 + node_modules/caniuse-lite/data/regions/MK.js | 1 + node_modules/caniuse-lite/data/regions/ML.js | 1 + node_modules/caniuse-lite/data/regions/MM.js | 1 + node_modules/caniuse-lite/data/regions/MN.js | 1 + node_modules/caniuse-lite/data/regions/MO.js | 1 + node_modules/caniuse-lite/data/regions/MP.js | 1 + node_modules/caniuse-lite/data/regions/MQ.js | 1 + node_modules/caniuse-lite/data/regions/MR.js | 1 + node_modules/caniuse-lite/data/regions/MS.js | 1 + node_modules/caniuse-lite/data/regions/MT.js | 1 + node_modules/caniuse-lite/data/regions/MU.js | 1 + node_modules/caniuse-lite/data/regions/MV.js | 1 + node_modules/caniuse-lite/data/regions/MW.js | 1 + node_modules/caniuse-lite/data/regions/MX.js | 1 + node_modules/caniuse-lite/data/regions/MY.js | 1 + node_modules/caniuse-lite/data/regions/MZ.js | 1 + node_modules/caniuse-lite/data/regions/NA.js | 1 + node_modules/caniuse-lite/data/regions/NC.js | 1 + node_modules/caniuse-lite/data/regions/NE.js | 1 + node_modules/caniuse-lite/data/regions/NF.js | 1 + node_modules/caniuse-lite/data/regions/NG.js | 1 + node_modules/caniuse-lite/data/regions/NI.js | 1 + node_modules/caniuse-lite/data/regions/NL.js | 1 + node_modules/caniuse-lite/data/regions/NO.js | 1 + node_modules/caniuse-lite/data/regions/NP.js | 1 + node_modules/caniuse-lite/data/regions/NR.js | 1 + node_modules/caniuse-lite/data/regions/NU.js | 1 + node_modules/caniuse-lite/data/regions/NZ.js | 1 + node_modules/caniuse-lite/data/regions/OM.js | 1 + node_modules/caniuse-lite/data/regions/PA.js | 1 + node_modules/caniuse-lite/data/regions/PE.js | 1 + node_modules/caniuse-lite/data/regions/PF.js | 1 + node_modules/caniuse-lite/data/regions/PG.js | 1 + node_modules/caniuse-lite/data/regions/PH.js | 1 + node_modules/caniuse-lite/data/regions/PK.js | 1 + node_modules/caniuse-lite/data/regions/PL.js | 1 + node_modules/caniuse-lite/data/regions/PM.js | 1 + node_modules/caniuse-lite/data/regions/PN.js | 1 + node_modules/caniuse-lite/data/regions/PR.js | 1 + node_modules/caniuse-lite/data/regions/PS.js | 1 + node_modules/caniuse-lite/data/regions/PT.js | 1 + node_modules/caniuse-lite/data/regions/PW.js | 1 + node_modules/caniuse-lite/data/regions/PY.js | 1 + node_modules/caniuse-lite/data/regions/QA.js | 1 + node_modules/caniuse-lite/data/regions/RE.js | 1 + node_modules/caniuse-lite/data/regions/RO.js | 1 + node_modules/caniuse-lite/data/regions/RS.js | 1 + node_modules/caniuse-lite/data/regions/RU.js | 1 + node_modules/caniuse-lite/data/regions/RW.js | 1 + node_modules/caniuse-lite/data/regions/SA.js | 1 + node_modules/caniuse-lite/data/regions/SB.js | 1 + node_modules/caniuse-lite/data/regions/SC.js | 1 + node_modules/caniuse-lite/data/regions/SD.js | 1 + node_modules/caniuse-lite/data/regions/SE.js | 1 + node_modules/caniuse-lite/data/regions/SG.js | 1 + node_modules/caniuse-lite/data/regions/SH.js | 1 + node_modules/caniuse-lite/data/regions/SI.js | 1 + node_modules/caniuse-lite/data/regions/SK.js | 1 + node_modules/caniuse-lite/data/regions/SL.js | 1 + node_modules/caniuse-lite/data/regions/SM.js | 1 + node_modules/caniuse-lite/data/regions/SN.js | 1 + node_modules/caniuse-lite/data/regions/SO.js | 1 + node_modules/caniuse-lite/data/regions/SR.js | 1 + node_modules/caniuse-lite/data/regions/ST.js | 1 + node_modules/caniuse-lite/data/regions/SV.js | 1 + node_modules/caniuse-lite/data/regions/SY.js | 1 + node_modules/caniuse-lite/data/regions/SZ.js | 1 + node_modules/caniuse-lite/data/regions/TC.js | 1 + node_modules/caniuse-lite/data/regions/TD.js | 1 + node_modules/caniuse-lite/data/regions/TG.js | 1 + node_modules/caniuse-lite/data/regions/TH.js | 1 + node_modules/caniuse-lite/data/regions/TJ.js | 1 + node_modules/caniuse-lite/data/regions/TL.js | 1 + node_modules/caniuse-lite/data/regions/TM.js | 1 + node_modules/caniuse-lite/data/regions/TN.js | 1 + node_modules/caniuse-lite/data/regions/TO.js | 1 + node_modules/caniuse-lite/data/regions/TR.js | 1 + node_modules/caniuse-lite/data/regions/TT.js | 1 + node_modules/caniuse-lite/data/regions/TV.js | 1 + node_modules/caniuse-lite/data/regions/TW.js | 1 + node_modules/caniuse-lite/data/regions/TZ.js | 1 + node_modules/caniuse-lite/data/regions/UA.js | 1 + node_modules/caniuse-lite/data/regions/UG.js | 1 + node_modules/caniuse-lite/data/regions/US.js | 1 + node_modules/caniuse-lite/data/regions/UY.js | 1 + node_modules/caniuse-lite/data/regions/UZ.js | 1 + node_modules/caniuse-lite/data/regions/VA.js | 1 + node_modules/caniuse-lite/data/regions/VC.js | 1 + node_modules/caniuse-lite/data/regions/VE.js | 1 + node_modules/caniuse-lite/data/regions/VG.js | 1 + node_modules/caniuse-lite/data/regions/VI.js | 1 + node_modules/caniuse-lite/data/regions/VN.js | 1 + node_modules/caniuse-lite/data/regions/VU.js | 1 + node_modules/caniuse-lite/data/regions/WF.js | 1 + node_modules/caniuse-lite/data/regions/WS.js | 1 + node_modules/caniuse-lite/data/regions/YE.js | 1 + node_modules/caniuse-lite/data/regions/YT.js | 1 + node_modules/caniuse-lite/data/regions/ZA.js | 1 + node_modules/caniuse-lite/data/regions/ZM.js | 1 + node_modules/caniuse-lite/data/regions/ZW.js | 1 + .../caniuse-lite/data/regions/alt-af.js | 1 + .../caniuse-lite/data/regions/alt-an.js | 1 + .../caniuse-lite/data/regions/alt-as.js | 1 + .../caniuse-lite/data/regions/alt-eu.js | 1 + .../caniuse-lite/data/regions/alt-na.js | 1 + .../caniuse-lite/data/regions/alt-oc.js | 1 + .../caniuse-lite/data/regions/alt-sa.js | 1 + .../caniuse-lite/data/regions/alt-ww.js | 1 + .../caniuse-lite/dist/lib/statuses.js | 9 + .../caniuse-lite/dist/lib/supported.js | 9 + .../caniuse-lite/dist/unpacker/agents.js | 47 + .../dist/unpacker/browserVersions.js | 1 + .../caniuse-lite/dist/unpacker/browsers.js | 1 + .../caniuse-lite/dist/unpacker/feature.js | 52 + .../caniuse-lite/dist/unpacker/features.js | 6 + .../caniuse-lite/dist/unpacker/index.js | 4 + .../caniuse-lite/dist/unpacker/region.js | 22 + node_modules/caniuse-lite/package.json | 34 + node_modules/chalk/index.d.ts | 415 + node_modules/chalk/license | 9 + node_modules/chalk/package.json | 68 + node_modules/chalk/readme.md | 341 + node_modules/chalk/source/index.js | 229 + node_modules/chalk/source/templates.js | 134 + node_modules/chalk/source/util.js | 39 + node_modules/char-regex/LICENSE | 21 + node_modules/char-regex/README.md | 27 + node_modules/char-regex/index.d.ts | 13 + node_modules/char-regex/index.js | 39 + node_modules/char-regex/package.json | 44 + node_modules/ci-info/CHANGELOG.md | 178 + node_modules/ci-info/LICENSE | 21 + node_modules/ci-info/README.md | 135 + node_modules/ci-info/index.d.ts | 75 + node_modules/ci-info/index.js | 90 + node_modules/ci-info/package.json | 45 + node_modules/ci-info/vendors.json | 321 + node_modules/cjs-module-lexer/LICENSE | 10 + node_modules/cjs-module-lexer/README.md | 462 + node_modules/cjs-module-lexer/dist/lexer.js | 1 + node_modules/cjs-module-lexer/dist/lexer.mjs | 2 + node_modules/cjs-module-lexer/lexer.d.ts | 8 + node_modules/cjs-module-lexer/lexer.js | 1443 ++ node_modules/cjs-module-lexer/package.json | 48 + node_modules/cliui/CHANGELOG.md | 139 + node_modules/cliui/LICENSE.txt | 14 + node_modules/cliui/README.md | 141 + node_modules/cliui/build/index.cjs | 302 + node_modules/cliui/build/index.d.cts | 43 + node_modules/cliui/build/lib/index.js | 287 + node_modules/cliui/build/lib/string-utils.js | 27 + node_modules/cliui/index.mjs | 13 + node_modules/cliui/package.json | 83 + node_modules/co/History.md | 172 + node_modules/co/LICENSE | 22 + node_modules/co/Readme.md | 212 + node_modules/co/index.js | 237 + node_modules/co/package.json | 34 + node_modules/collect-v8-coverage/CHANGELOG.md | 18 + node_modules/collect-v8-coverage/LICENSE | 22 + node_modules/collect-v8-coverage/README.md | 15 + node_modules/collect-v8-coverage/index.d.ts | 7 + node_modules/collect-v8-coverage/index.js | 52 + node_modules/collect-v8-coverage/package.json | 52 + node_modules/color-convert/CHANGELOG.md | 54 + node_modules/color-convert/LICENSE | 21 + node_modules/color-convert/README.md | 68 + node_modules/color-convert/conversions.js | 839 + node_modules/color-convert/index.js | 81 + node_modules/color-convert/package.json | 48 + node_modules/color-convert/route.js | 97 + node_modules/color-name/LICENSE | 8 + node_modules/color-name/README.md | 11 + node_modules/color-name/index.js | 152 + node_modules/color-name/package.json | 28 + 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/convert-source-map/LICENSE | 23 + node_modules/convert-source-map/README.md | 206 + node_modules/convert-source-map/index.js | 233 + node_modules/convert-source-map/package.json | 38 + node_modules/create-jest/LICENSE | 21 + node_modules/create-jest/README.md | 11 + node_modules/create-jest/bin/create-jest.js | 8 + node_modules/create-jest/build/errors.js | 31 + .../create-jest/build/generateConfigFile.js | 92 + node_modules/create-jest/build/index.d.ts | 12 + node_modules/create-jest/build/index.js | 18 + .../create-jest/build/modifyPackageJson.js | 26 + node_modules/create-jest/build/questions.js | 76 + node_modules/create-jest/build/runCreate.js | 237 + node_modules/create-jest/build/types.js | 1 + node_modules/create-jest/package.json | 43 + node_modules/cross-spawn/LICENSE | 21 + node_modules/cross-spawn/README.md | 89 + node_modules/cross-spawn/index.js | 39 + node_modules/cross-spawn/lib/enoent.js | 59 + node_modules/cross-spawn/lib/parse.js | 91 + node_modules/cross-spawn/lib/util/escape.js | 47 + .../cross-spawn/lib/util/readShebang.js | 23 + .../cross-spawn/lib/util/resolveCommand.js | 52 + node_modules/cross-spawn/package.json | 73 + node_modules/dedent/LICENSE.md | 20 + node_modules/dedent/README.md | 208 + node_modules/dedent/dist/dedent.d.mts | 14 + node_modules/dedent/dist/dedent.d.ts | 14 + node_modules/dedent/dist/dedent.js | 73 + node_modules/dedent/dist/dedent.mjs | 67 + node_modules/dedent/macro.js | 32 + node_modules/dedent/package.json | 119 + node_modules/deepmerge/.editorconfig | 7 + node_modules/deepmerge/.eslintcache | 1 + node_modules/deepmerge/changelog.md | 167 + node_modules/deepmerge/dist/cjs.js | 133 + node_modules/deepmerge/dist/umd.js | 139 + node_modules/deepmerge/index.d.ts | 20 + node_modules/deepmerge/index.js | 106 + node_modules/deepmerge/license.txt | 21 + node_modules/deepmerge/package.json | 42 + node_modules/deepmerge/readme.md | 264 + node_modules/deepmerge/rollup.config.js | 22 + node_modules/detect-newline/index.d.ts | 26 + node_modules/detect-newline/index.js | 21 + node_modules/detect-newline/license | 9 + node_modules/detect-newline/package.json | 39 + node_modules/detect-newline/readme.md | 42 + node_modules/diff-sequences/LICENSE | 21 + node_modules/diff-sequences/README.md | 404 + node_modules/diff-sequences/build/index.d.ts | 38 + node_modules/diff-sequences/build/index.js | 798 + node_modules/diff-sequences/package.json | 39 + node_modules/electron-to-chromium/LICENSE | 5 + node_modules/electron-to-chromium/README.md | 186 + .../electron-to-chromium/chromium-versions.js | 78 + .../chromium-versions.json | 1 + .../full-chromium-versions.js | 2419 +++ .../full-chromium-versions.json | 1 + .../electron-to-chromium/full-versions.js | 1563 ++ .../electron-to-chromium/full-versions.json | 1 + node_modules/electron-to-chromium/index.js | 36 + .../electron-to-chromium/package.json | 44 + node_modules/electron-to-chromium/versions.js | 195 + .../electron-to-chromium/versions.json | 1 + node_modules/emittery/index.d.ts | 606 + node_modules/emittery/index.js | 531 + node_modules/emittery/license | 9 + node_modules/emittery/maps.js | 9 + node_modules/emittery/package.json | 67 + node_modules/emittery/readme.md | 569 + node_modules/emoji-regex/LICENSE-MIT.txt | 20 + node_modules/emoji-regex/README.md | 73 + node_modules/emoji-regex/es2015/index.js | 6 + node_modules/emoji-regex/es2015/text.js | 6 + node_modules/emoji-regex/index.d.ts | 23 + node_modules/emoji-regex/index.js | 6 + node_modules/emoji-regex/package.json | 50 + node_modules/emoji-regex/text.js | 6 + node_modules/error-ex/LICENSE | 21 + node_modules/error-ex/README.md | 144 + node_modules/error-ex/index.js | 141 + node_modules/error-ex/package.json | 46 + node_modules/escalade/dist/index.js | 22 + node_modules/escalade/dist/index.mjs | 22 + node_modules/escalade/index.d.mts | 11 + node_modules/escalade/index.d.ts | 15 + node_modules/escalade/license | 9 + node_modules/escalade/package.json | 74 + node_modules/escalade/readme.md | 211 + node_modules/escalade/sync/index.d.mts | 9 + node_modules/escalade/sync/index.d.ts | 13 + node_modules/escalade/sync/index.js | 18 + node_modules/escalade/sync/index.mjs | 18 + node_modules/escape-string-regexp/index.d.ts | 18 + node_modules/escape-string-regexp/index.js | 11 + node_modules/escape-string-regexp/license | 9 + .../escape-string-regexp/package.json | 43 + node_modules/escape-string-regexp/readme.md | 29 + 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/execa/index.d.ts | 564 + node_modules/execa/index.js | 268 + node_modules/execa/lib/command.js | 52 + node_modules/execa/lib/error.js | 88 + node_modules/execa/lib/kill.js | 115 + node_modules/execa/lib/promise.js | 46 + node_modules/execa/lib/stdio.js | 52 + node_modules/execa/lib/stream.js | 97 + node_modules/execa/license | 9 + node_modules/execa/package.json | 74 + node_modules/execa/readme.md | 663 + node_modules/exit/.jshintrc | 14 + node_modules/exit/.npmignore | 0 node_modules/exit/.travis.yml | 6 + node_modules/exit/Gruntfile.js | 48 + node_modules/exit/LICENSE-MIT | 22 + node_modules/exit/README.md | 75 + node_modules/exit/lib/exit.js | 41 + node_modules/exit/package.json | 47 + node_modules/exit/test/exit_test.js | 121 + node_modules/exit/test/fixtures/10-stderr.txt | 10 + .../exit/test/fixtures/10-stdout-stderr.txt | 20 + node_modules/exit/test/fixtures/10-stdout.txt | 10 + .../exit/test/fixtures/100-stderr.txt | 100 + .../exit/test/fixtures/100-stdout-stderr.txt | 200 + .../exit/test/fixtures/100-stdout.txt | 100 + .../exit/test/fixtures/1000-stderr.txt | 1000 ++ .../exit/test/fixtures/1000-stdout-stderr.txt | 2000 +++ .../exit/test/fixtures/1000-stdout.txt | 1000 ++ .../exit/test/fixtures/create-files.sh | 8 + node_modules/exit/test/fixtures/log-broken.js | 23 + node_modules/exit/test/fixtures/log.js | 25 + node_modules/expect/LICENSE | 21 + node_modules/expect/README.md | 3 + .../expect/build/asymmetricMatchers.js | 375 + .../build/extractExpectedAssertionsErrors.js | 86 + node_modules/expect/build/index.d.ts | 370 + node_modules/expect/build/index.js | 410 + .../expect/build/jestMatchersObject.js | 123 + node_modules/expect/build/matchers.js | 1292 ++ node_modules/expect/build/print.js | 122 + node_modules/expect/build/spyMatchers.js | 1254 ++ node_modules/expect/build/toThrowMatchers.js | 481 + node_modules/expect/build/types.js | 3 + node_modules/expect/package.json | 43 + .../fast-json-stable-stringify/.eslintrc.yml | 26 + .../.github/FUNDING.yml | 1 + .../fast-json-stable-stringify/.travis.yml | 8 + .../fast-json-stable-stringify/LICENSE | 21 + .../fast-json-stable-stringify/README.md | 131 + .../benchmark/index.js | 31 + .../benchmark/test.json | 137 + .../example/key_cmp.js | 7 + .../example/nested.js | 3 + .../fast-json-stable-stringify/example/str.js | 3 + .../example/value_cmp.js | 7 + .../fast-json-stable-stringify/index.d.ts | 4 + .../fast-json-stable-stringify/index.js | 59 + .../fast-json-stable-stringify/package.json | 52 + .../fast-json-stable-stringify/test/cmp.js | 13 + .../fast-json-stable-stringify/test/nested.js | 44 + .../fast-json-stable-stringify/test/str.js | 46 + .../test/to-json.js | 22 + node_modules/fb-watchman/README.md | 34 + node_modules/fb-watchman/index.js | 327 + node_modules/fb-watchman/package.json | 35 + 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/find-up/index.d.ts | 137 + node_modules/find-up/index.js | 89 + node_modules/find-up/license | 9 + node_modules/find-up/package.json | 53 + node_modules/find-up/readme.md | 156 + node_modules/fs.realpath/LICENSE | 43 + node_modules/fs.realpath/README.md | 33 + node_modules/fs.realpath/index.js | 66 + node_modules/fs.realpath/old.js | 303 + node_modules/fs.realpath/package.json | 26 + node_modules/function-bind/.eslintrc | 21 + .../function-bind/.github/FUNDING.yml | 12 + .../function-bind/.github/SECURITY.md | 3 + node_modules/function-bind/.nycrc | 13 + node_modules/function-bind/CHANGELOG.md | 136 + node_modules/function-bind/LICENSE | 20 + node_modules/function-bind/README.md | 46 + node_modules/function-bind/implementation.js | 84 + node_modules/function-bind/index.js | 5 + node_modules/function-bind/package.json | 87 + node_modules/function-bind/test/.eslintrc | 9 + node_modules/function-bind/test/index.js | 252 + node_modules/gensync/LICENSE | 7 + node_modules/gensync/README.md | 196 + node_modules/gensync/index.js | 373 + node_modules/gensync/index.js.flow | 32 + node_modules/gensync/package.json | 37 + node_modules/gensync/test/.babelrc | 5 + node_modules/gensync/test/index.test.js | 489 + node_modules/get-caller-file/LICENSE.md | 6 + node_modules/get-caller-file/README.md | 41 + node_modules/get-caller-file/index.d.ts | 2 + node_modules/get-caller-file/index.js | 22 + node_modules/get-caller-file/index.js.map | 1 + node_modules/get-caller-file/package.json | 42 + node_modules/get-package-type/CHANGELOG.md | 10 + node_modules/get-package-type/LICENSE | 21 + node_modules/get-package-type/README.md | 32 + node_modules/get-package-type/async.cjs | 52 + node_modules/get-package-type/cache.cjs | 3 + node_modules/get-package-type/index.cjs | 7 + .../get-package-type/is-node-modules.cjs | 15 + node_modules/get-package-type/package.json | 35 + node_modules/get-package-type/sync.cjs | 42 + node_modules/get-stream/buffer-stream.js | 52 + node_modules/get-stream/index.d.ts | 105 + node_modules/get-stream/index.js | 61 + node_modules/get-stream/license | 9 + node_modules/get-stream/package.json | 47 + node_modules/get-stream/readme.md | 124 + node_modules/glob/LICENSE | 21 + node_modules/glob/README.md | 378 + node_modules/glob/common.js | 238 + node_modules/glob/glob.js | 790 + node_modules/glob/package.json | 55 + node_modules/glob/sync.js | 486 + node_modules/globals/globals.json | 1563 ++ node_modules/globals/index.js | 2 + node_modules/globals/license | 9 + node_modules/globals/package.json | 41 + node_modules/globals/readme.md | 41 + node_modules/graceful-fs/LICENSE | 15 + node_modules/graceful-fs/README.md | 143 + node_modules/graceful-fs/clone.js | 23 + node_modules/graceful-fs/graceful-fs.js | 448 + node_modules/graceful-fs/legacy-streams.js | 118 + node_modules/graceful-fs/package.json | 53 + node_modules/graceful-fs/polyfills.js | 355 + node_modules/has-flag/index.d.ts | 39 + node_modules/has-flag/index.js | 8 + node_modules/has-flag/license | 9 + node_modules/has-flag/package.json | 46 + node_modules/has-flag/readme.md | 89 + node_modules/hasown/.eslintrc | 5 + node_modules/hasown/.github/FUNDING.yml | 12 + node_modules/hasown/.nycrc | 13 + node_modules/hasown/CHANGELOG.md | 40 + node_modules/hasown/LICENSE | 21 + node_modules/hasown/README.md | 40 + node_modules/hasown/index.d.ts | 3 + node_modules/hasown/index.js | 8 + node_modules/hasown/package.json | 92 + node_modules/hasown/tsconfig.json | 6 + node_modules/html-escaper/LICENSE.txt | 19 + node_modules/html-escaper/README.md | 97 + node_modules/html-escaper/cjs/index.js | 65 + node_modules/html-escaper/cjs/package.json | 1 + node_modules/html-escaper/esm/index.js | 62 + node_modules/html-escaper/index.js | 70 + node_modules/html-escaper/min.js | 1 + node_modules/html-escaper/package.json | 42 + node_modules/html-escaper/test/index.js | 23 + node_modules/html-escaper/test/package.json | 1 + node_modules/human-signals/CHANGELOG.md | 11 + node_modules/human-signals/LICENSE | 201 + node_modules/human-signals/README.md | 165 + node_modules/human-signals/build/src/core.js | 273 + .../human-signals/build/src/core.js.map | 1 + .../human-signals/build/src/main.d.ts | 52 + node_modules/human-signals/build/src/main.js | 71 + .../human-signals/build/src/main.js.map | 1 + .../human-signals/build/src/realtime.js | 19 + .../human-signals/build/src/realtime.js.map | 1 + .../human-signals/build/src/signals.js | 35 + .../human-signals/build/src/signals.js.map | 1 + node_modules/human-signals/package.json | 64 + node_modules/import-local/fixtures/cli.js | 7 + node_modules/import-local/index.d.ts | 17 + node_modules/import-local/index.js | 24 + node_modules/import-local/license | 9 + node_modules/import-local/package.json | 54 + node_modules/import-local/readme.md | 25 + node_modules/imurmurhash/README.md | 122 + node_modules/imurmurhash/imurmurhash.js | 138 + node_modules/imurmurhash/imurmurhash.min.js | 12 + node_modules/imurmurhash/package.json | 40 + node_modules/inflight/LICENSE | 15 + node_modules/inflight/README.md | 37 + node_modules/inflight/inflight.js | 54 + node_modules/inflight/package.json | 29 + 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-arrayish/.editorconfig | 18 + node_modules/is-arrayish/.istanbul.yml | 4 + node_modules/is-arrayish/.npmignore | 5 + node_modules/is-arrayish/.travis.yml | 17 + node_modules/is-arrayish/LICENSE | 21 + node_modules/is-arrayish/README.md | 16 + node_modules/is-arrayish/index.js | 10 + node_modules/is-arrayish/package.json | 34 + node_modules/is-core-module/.eslintrc | 18 + node_modules/is-core-module/.nycrc | 9 + node_modules/is-core-module/CHANGELOG.md | 218 + node_modules/is-core-module/LICENSE | 20 + node_modules/is-core-module/README.md | 40 + node_modules/is-core-module/core.json | 162 + node_modules/is-core-module/index.js | 69 + node_modules/is-core-module/package.json | 76 + node_modules/is-core-module/test/index.js | 157 + .../is-fullwidth-code-point/index.d.ts | 17 + node_modules/is-fullwidth-code-point/index.js | 50 + node_modules/is-fullwidth-code-point/license | 9 + .../is-fullwidth-code-point/package.json | 42 + .../is-fullwidth-code-point/readme.md | 39 + node_modules/is-generator-fn/index.d.ts | 24 + node_modules/is-generator-fn/index.js | 14 + node_modules/is-generator-fn/license | 9 + node_modules/is-generator-fn/package.json | 38 + node_modules/is-generator-fn/readme.md | 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/is-stream/index.d.ts | 79 + node_modules/is-stream/index.js | 28 + node_modules/is-stream/license | 9 + node_modules/is-stream/package.json | 42 + node_modules/is-stream/readme.md | 60 + node_modules/isexe/.npmignore | 2 + node_modules/isexe/LICENSE | 15 + node_modules/isexe/README.md | 51 + node_modules/isexe/index.js | 57 + node_modules/isexe/mode.js | 41 + node_modules/isexe/package.json | 31 + node_modules/isexe/test/basic.js | 221 + node_modules/isexe/windows.js | 42 + .../istanbul-lib-coverage/CHANGELOG.md | 209 + node_modules/istanbul-lib-coverage/LICENSE | 24 + node_modules/istanbul-lib-coverage/README.md | 29 + node_modules/istanbul-lib-coverage/index.js | 64 + .../istanbul-lib-coverage/lib/coverage-map.js | 134 + .../lib/coverage-summary.js | 112 + .../lib/data-properties.js | 12 + .../lib/file-coverage.js | 444 + .../istanbul-lib-coverage/lib/percent.js | 15 + .../istanbul-lib-coverage/package.json | 47 + .../istanbul-lib-instrument/CHANGELOG.md | 664 + node_modules/istanbul-lib-instrument/LICENSE | 24 + .../istanbul-lib-instrument/README.md | 22 + .../node_modules/.bin/semver | 1 + .../node_modules/semver/LICENSE | 15 + .../node_modules/semver/README.md | 664 + .../node_modules/semver/bin/semver.js | 191 + .../node_modules/semver/classes/comparator.js | 143 + .../node_modules/semver/classes/index.js | 7 + .../node_modules/semver/classes/range.js | 556 + .../node_modules/semver/classes/semver.js | 319 + .../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 + .../semver/functions/prerelease.js | 8 + .../node_modules/semver/functions/rcompare.js | 5 + .../node_modules/semver/functions/rsort.js | 5 + .../semver/functions/satisfies.js | 12 + .../node_modules/semver/functions/sort.js | 5 + .../node_modules/semver/functions/valid.js | 8 + .../node_modules/semver/index.js | 91 + .../node_modules/semver/internal/constants.js | 37 + .../node_modules/semver/internal/debug.js | 11 + .../semver/internal/identifiers.js | 25 + .../node_modules/semver/internal/lrucache.js | 42 + .../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 | 16 + .../node_modules/semver/ranges/gtr.js | 6 + .../node_modules/semver/ranges/intersects.js | 9 + .../node_modules/semver/ranges/ltr.js | 6 + .../semver/ranges/max-satisfying.js | 27 + .../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 + .../semver/ranges/to-comparators.js | 10 + .../node_modules/semver/ranges/valid.js | 13 + .../istanbul-lib-instrument/package.json | 50 + .../istanbul-lib-instrument/src/constants.js | 14 + .../istanbul-lib-instrument/src/index.js | 21 + .../src/instrumenter.js | 164 + .../src/read-coverage.js | 77 + .../src/source-coverage.js | 135 + .../istanbul-lib-instrument/src/visitor.js | 843 + node_modules/istanbul-lib-report/CHANGELOG.md | 192 + node_modules/istanbul-lib-report/LICENSE | 24 + node_modules/istanbul-lib-report/README.md | 43 + node_modules/istanbul-lib-report/index.js | 40 + .../istanbul-lib-report/lib/context.js | 132 + .../istanbul-lib-report/lib/file-writer.js | 189 + node_modules/istanbul-lib-report/lib/path.js | 169 + .../istanbul-lib-report/lib/report-base.js | 16 + .../lib/summarizer-factory.js | 284 + node_modules/istanbul-lib-report/lib/tree.js | 137 + .../istanbul-lib-report/lib/watermarks.js | 15 + .../istanbul-lib-report/lib/xml-writer.js | 90 + node_modules/istanbul-lib-report/package.json | 44 + .../istanbul-lib-source-maps/CHANGELOG.md | 295 + node_modules/istanbul-lib-source-maps/LICENSE | 24 + .../istanbul-lib-source-maps/README.md | 11 + .../istanbul-lib-source-maps/index.js | 15 + .../lib/get-mapping.js | 182 + .../istanbul-lib-source-maps/lib/map-store.js | 226 + .../istanbul-lib-source-maps/lib/mapped.js | 113 + .../istanbul-lib-source-maps/lib/pathutils.js | 21 + .../lib/transform-utils.js | 21 + .../lib/transformer.js | 147 + .../istanbul-lib-source-maps/package.json | 45 + node_modules/istanbul-reports/CHANGELOG.md | 464 + node_modules/istanbul-reports/LICENSE | 24 + node_modules/istanbul-reports/README.md | 13 + node_modules/istanbul-reports/index.js | 24 + .../istanbul-reports/lib/clover/index.js | 163 + .../istanbul-reports/lib/cobertura/index.js | 151 + .../istanbul-reports/lib/html-spa/.babelrc | 3 + .../lib/html-spa/assets/bundle.js | 30 + .../lib/html-spa/assets/sort-arrow-sprite.png | Bin 0 -> 138 bytes .../lib/html-spa/assets/spa.css | 298 + .../istanbul-reports/lib/html-spa/index.js | 176 + .../lib/html-spa/src/fileBreadcrumbs.js | 31 + .../lib/html-spa/src/filterToggle.js | 50 + .../lib/html-spa/src/flattenToggle.js | 25 + .../lib/html-spa/src/getChildData.js | 155 + .../lib/html-spa/src/index.js | 160 + .../lib/html-spa/src/routing.js | 52 + .../lib/html-spa/src/summaryHeader.js | 63 + .../lib/html-spa/src/summaryTableHeader.js | 130 + .../lib/html-spa/src/summaryTableLine.js | 159 + .../lib/html-spa/webpack.config.js | 22 + .../istanbul-reports/lib/html/annotator.js | 305 + .../istanbul-reports/lib/html/assets/base.css | 224 + .../lib/html/assets/block-navigation.js | 86 + .../lib/html/assets/favicon.png | Bin 0 -> 445 bytes .../lib/html/assets/sort-arrow-sprite.png | Bin 0 -> 138 bytes .../lib/html/assets/sorter.js | 195 + .../lib/html/assets/vendor/prettify.css | 1 + .../lib/html/assets/vendor/prettify.js | 1 + .../istanbul-reports/lib/html/index.js | 421 + .../lib/html/insertion-text.js | 114 + .../lib/json-summary/index.js | 56 + .../istanbul-reports/lib/json/index.js | 44 + .../istanbul-reports/lib/lcov/index.js | 33 + .../istanbul-reports/lib/lcovonly/index.js | 77 + .../istanbul-reports/lib/none/index.js | 10 + .../istanbul-reports/lib/teamcity/index.js | 67 + .../istanbul-reports/lib/text-lcov/index.js | 17 + .../lib/text-summary/index.js | 62 + .../istanbul-reports/lib/text/index.js | 298 + node_modules/istanbul-reports/package.json | 60 + node_modules/jest-changed-files/LICENSE | 21 + node_modules/jest-changed-files/README.md | 95 + node_modules/jest-changed-files/build/git.js | 169 + node_modules/jest-changed-files/build/hg.js | 130 + .../jest-changed-files/build/index.d.ts | 36 + .../jest-changed-files/build/index.js | 82 + node_modules/jest-changed-files/build/sl.js | 134 + .../jest-changed-files/build/types.js | 1 + node_modules/jest-changed-files/package.json | 31 + node_modules/jest-circus/LICENSE | 21 + node_modules/jest-circus/README.md | 65 + .../jest-circus/build/eventHandler.js | 281 + .../build/formatNodeAssertErrors.js | 186 + .../jest-circus/build/globalErrorHandlers.js | 44 + node_modules/jest-circus/build/index.d.ts | 72 + node_modules/jest-circus/build/index.js | 238 + .../legacy-code-todo-rewrite/jestAdapter.js | 117 + .../jestAdapterInit.js | 240 + node_modules/jest-circus/build/run.js | 350 + .../jest-circus/build/shuffleArray.js | 41 + node_modules/jest-circus/build/state.js | 80 + .../build/testCaseReportHandler.js | 32 + node_modules/jest-circus/build/types.js | 27 + node_modules/jest-circus/build/utils.js | 511 + node_modules/jest-circus/package.json | 59 + node_modules/jest-circus/runner.js | 10 + node_modules/jest-cli/LICENSE | 21 + node_modules/jest-cli/README.md | 11 + node_modules/jest-cli/bin/jest.js | 17 + node_modules/jest-cli/build/args.js | 731 + node_modules/jest-cli/build/index.d.ts | 18 + node_modules/jest-cli/build/index.js | 19 + node_modules/jest-cli/build/run.js | 239 + node_modules/jest-cli/package.json | 88 + node_modules/jest-config/LICENSE | 21 + node_modules/jest-config/build/Defaults.js | 129 + node_modules/jest-config/build/Deprecated.js | 85 + .../jest-config/build/Descriptions.js | 104 + .../build/ReporterValidationErrors.js | 122 + node_modules/jest-config/build/ValidConfig.js | 342 + node_modules/jest-config/build/color.js | 31 + node_modules/jest-config/build/constants.js | 96 + .../jest-config/build/getCacheDirectory.js | 91 + .../jest-config/build/getMaxWorkers.js | 56 + node_modules/jest-config/build/index.d.ts | 147 + node_modules/jest-config/build/index.js | 494 + node_modules/jest-config/build/normalize.js | 1180 ++ .../jest-config/build/parseShardPair.js | 41 + .../build/readConfigFileAndSetRootDir.js | 195 + .../jest-config/build/resolveConfigPath.js | 217 + node_modules/jest-config/build/setFromArgv.js | 58 + .../jest-config/build/stringToBytes.js | 79 + node_modules/jest-config/build/utils.js | 172 + .../jest-config/build/validatePattern.js | 24 + node_modules/jest-config/package.json | 71 + node_modules/jest-diff/LICENSE | 21 + node_modules/jest-diff/README.md | 671 + .../jest-diff/build/cleanupSemantic.js | 599 + node_modules/jest-diff/build/constants.js | 19 + node_modules/jest-diff/build/diffLines.js | 193 + node_modules/jest-diff/build/diffStrings.js | 66 + .../jest-diff/build/getAlignedDiffs.js | 223 + node_modules/jest-diff/build/index.d.ts | 93 + node_modules/jest-diff/build/index.js | 232 + .../jest-diff/build/joinAlignedDiffs.js | 271 + .../jest-diff/build/normalizeDiffOptions.js | 59 + node_modules/jest-diff/build/printDiffs.js | 79 + node_modules/jest-diff/build/types.js | 1 + node_modules/jest-diff/package.json | 36 + node_modules/jest-docblock/LICENSE | 21 + node_modules/jest-docblock/README.md | 108 + node_modules/jest-docblock/build/index.d.ts | 29 + node_modules/jest-docblock/build/index.js | 130 + node_modules/jest-docblock/package.json | 32 + node_modules/jest-each/LICENSE | 21 + node_modules/jest-each/README.md | 548 + node_modules/jest-each/build/bind.js | 81 + node_modules/jest-each/build/index.d.ts | 141 + node_modules/jest-each/build/index.js | 83 + node_modules/jest-each/build/table/array.js | 130 + .../jest-each/build/table/interpolation.js | 53 + .../jest-each/build/table/template.js | 44 + node_modules/jest-each/build/validation.js | 107 + node_modules/jest-each/package.json | 41 + node_modules/jest-environment-node/LICENSE | 21 + .../jest-environment-node/build/index.d.ts | 42 + .../jest-environment-node/build/index.js | 212 + .../jest-environment-node/package.json | 37 + node_modules/jest-get-type/LICENSE | 21 + node_modules/jest-get-type/build/index.d.ts | 27 + node_modules/jest-get-type/build/index.js | 53 + node_modules/jest-get-type/package.json | 27 + node_modules/jest-haste-map/LICENSE | 21 + node_modules/jest-haste-map/build/HasteFS.js | 139 + .../jest-haste-map/build/ModuleMap.js | 249 + .../jest-haste-map/build/blacklist.js | 64 + .../jest-haste-map/build/constants.js | 46 + .../jest-haste-map/build/crawlers/node.js | 269 + .../jest-haste-map/build/crawlers/watchman.js | 339 + .../jest-haste-map/build/getMockName.js | 69 + node_modules/jest-haste-map/build/index.d.ts | 242 + node_modules/jest-haste-map/build/index.js | 1107 ++ .../build/lib/dependencyExtractor.js | 84 + .../jest-haste-map/build/lib/fast_path.js | 76 + .../build/lib/getPlatformExtension.js | 30 + .../build/lib/isWatchmanInstalled.js | 37 + .../build/lib/normalizePathSep.js | 68 + node_modules/jest-haste-map/build/types.js | 1 + .../build/watchers/FSEventsWatcher.js | 244 + .../build/watchers/NodeWatcher.js | 369 + .../build/watchers/RecrawlWarning.js | 49 + .../build/watchers/WatchmanWatcher.js | 383 + .../jest-haste-map/build/watchers/common.js | 111 + node_modules/jest-haste-map/build/worker.js | 180 + node_modules/jest-haste-map/package.json | 47 + node_modules/jest-leak-detector/LICENSE | 21 + node_modules/jest-leak-detector/README.md | 27 + .../jest-leak-detector/build/index.d.ts | 19 + .../jest-leak-detector/build/index.js | 99 + node_modules/jest-leak-detector/package.json | 33 + node_modules/jest-matcher-utils/LICENSE | 21 + node_modules/jest-matcher-utils/README.md | 24 + .../jest-matcher-utils/build/Replaceable.js | 64 + .../build/deepCyclicCopyReplaceable.js | 111 + .../jest-matcher-utils/build/index.d.ts | 138 + .../jest-matcher-utils/build/index.js | 542 + node_modules/jest-matcher-utils/package.json | 37 + node_modules/jest-message-util/LICENSE | 21 + .../jest-message-util/build/index.d.ts | 68 + node_modules/jest-message-util/build/index.js | 518 + node_modules/jest-message-util/build/types.js | 1 + node_modules/jest-message-util/package.json | 43 + node_modules/jest-mock/LICENSE | 21 + node_modules/jest-mock/README.md | 106 + node_modules/jest-mock/build/index.d.ts | 406 + node_modules/jest-mock/build/index.js | 978 ++ node_modules/jest-mock/package.json | 35 + node_modules/jest-pnp-resolver/README.md | 34 + .../jest-pnp-resolver/createRequire.js | 25 + .../jest-pnp-resolver/getDefaultResolver.js | 13 + node_modules/jest-pnp-resolver/index.d.ts | 10 + node_modules/jest-pnp-resolver/index.js | 50 + node_modules/jest-pnp-resolver/package.json | 31 + node_modules/jest-regex-util/LICENSE | 21 + node_modules/jest-regex-util/build/index.d.ts | 20 + node_modules/jest-regex-util/build/index.js | 40 + node_modules/jest-regex-util/package.json | 29 + .../jest-resolve-dependencies/LICENSE | 21 + .../build/index.d.ts | 43 + .../jest-resolve-dependencies/build/index.js | 197 + .../jest-resolve-dependencies/package.json | 37 + node_modules/jest-resolve/LICENSE | 21 + .../jest-resolve/build/ModuleNotFoundError.js | 108 + .../jest-resolve/build/defaultResolver.js | 240 + .../jest-resolve/build/fileWalkers.js | 178 + node_modules/jest-resolve/build/index.d.ts | 320 + node_modules/jest-resolve/build/index.js | 31 + .../jest-resolve/build/isBuiltinModule.js | 27 + .../jest-resolve/build/nodeModulesPaths.js | 131 + node_modules/jest-resolve/build/resolver.js | 796 + .../jest-resolve/build/shouldLoadAsEsm.js | 90 + node_modules/jest-resolve/build/types.js | 1 + node_modules/jest-resolve/build/utils.js | 233 + node_modules/jest-resolve/package.json | 44 + node_modules/jest-runner/LICENSE | 21 + node_modules/jest-runner/build/index.d.ts | 127 + node_modules/jest-runner/build/index.js | 219 + node_modules/jest-runner/build/runTest.js | 462 + node_modules/jest-runner/build/testWorker.js | 123 + node_modules/jest-runner/build/types.js | 28 + node_modules/jest-runner/package.json | 58 + node_modules/jest-runtime/LICENSE | 21 + node_modules/jest-runtime/build/helpers.js | 134 + node_modules/jest-runtime/build/index.d.ts | 193 + node_modules/jest-runtime/build/index.js | 2316 +++ node_modules/jest-runtime/package.json | 56 + node_modules/jest-snapshot/LICENSE | 21 + .../jest-snapshot/build/InlineSnapshots.js | 421 + .../jest-snapshot/build/SnapshotResolver.js | 153 + node_modules/jest-snapshot/build/State.js | 288 + node_modules/jest-snapshot/build/colors.js | 39 + .../jest-snapshot/build/dedentLines.js | 132 + node_modules/jest-snapshot/build/index.d.ts | 186 + node_modules/jest-snapshot/build/index.js | 591 + .../jest-snapshot/build/mockSerializer.js | 47 + node_modules/jest-snapshot/build/plugins.js | 43 + .../jest-snapshot/build/printSnapshot.js | 340 + node_modules/jest-snapshot/build/types.js | 1 + node_modules/jest-snapshot/build/utils.js | 320 + .../jest-snapshot/node_modules/.bin/semver | 1 + .../jest-snapshot/node_modules/semver/LICENSE | 15 + .../node_modules/semver/README.md | 664 + .../node_modules/semver/bin/semver.js | 191 + .../node_modules/semver/classes/comparator.js | 143 + .../node_modules/semver/classes/index.js | 7 + .../node_modules/semver/classes/range.js | 556 + .../node_modules/semver/classes/semver.js | 319 + .../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 + .../semver/functions/prerelease.js | 8 + .../node_modules/semver/functions/rcompare.js | 5 + .../node_modules/semver/functions/rsort.js | 5 + .../semver/functions/satisfies.js | 12 + .../node_modules/semver/functions/sort.js | 5 + .../node_modules/semver/functions/valid.js | 8 + .../node_modules/semver/index.js | 91 + .../node_modules/semver/internal/constants.js | 37 + .../node_modules/semver/internal/debug.js | 11 + .../semver/internal/identifiers.js | 25 + .../node_modules/semver/internal/lrucache.js | 42 + .../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 | 16 + .../node_modules/semver/ranges/gtr.js | 6 + .../node_modules/semver/ranges/intersects.js | 9 + .../node_modules/semver/ranges/ltr.js | 6 + .../semver/ranges/max-satisfying.js | 27 + .../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 + .../semver/ranges/to-comparators.js | 10 + .../node_modules/semver/ranges/valid.js | 13 + node_modules/jest-snapshot/package.json | 63 + node_modules/jest-util/LICENSE | 21 + node_modules/jest-util/Readme.md | 87 + .../jest-util/build/ErrorWithStack.js | 28 + node_modules/jest-util/build/clearLine.js | 18 + .../build/convertDescriptorToString.js | 30 + .../jest-util/build/createDirectory.js | 71 + .../jest-util/build/createProcessObject.js | 109 + .../jest-util/build/deepCyclicCopy.js | 76 + node_modules/jest-util/build/formatTime.js | 24 + .../jest-util/build/globsToMatcher.js | 98 + node_modules/jest-util/build/index.d.ts | 136 + node_modules/jest-util/build/index.js | 199 + .../jest-util/build/installCommonGlobals.js | 115 + .../jest-util/build/interopRequireDefault.js | 22 + node_modules/jest-util/build/invariant.js | 18 + node_modules/jest-util/build/isInteractive.js | 22 + node_modules/jest-util/build/isNonNullable.js | 16 + node_modules/jest-util/build/isPromise.js | 20 + node_modules/jest-util/build/pluralize.js | 16 + node_modules/jest-util/build/preRunMessage.js | 38 + .../jest-util/build/replacePathSepForGlob.js | 16 + .../jest-util/build/requireOrImportModule.js | 77 + node_modules/jest-util/build/setGlobal.js | 17 + node_modules/jest-util/build/specialChars.js | 25 + .../build/testPathPatternToRegExp.js | 19 + node_modules/jest-util/build/tryRealpath.js | 30 + .../node_modules/picomatch/CHANGELOG.md | 136 + .../jest-util/node_modules/picomatch/LICENSE | 21 + .../node_modules/picomatch/README.md | 708 + .../jest-util/node_modules/picomatch/index.js | 3 + .../node_modules/picomatch/lib/constants.js | 179 + .../node_modules/picomatch/lib/parse.js | 1091 ++ .../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/jest-util/package.json | 38 + node_modules/jest-validate/LICENSE | 21 + node_modules/jest-validate/README.md | 216 + node_modules/jest-validate/build/condition.js | 44 + .../jest-validate/build/defaultConfig.js | 37 + .../jest-validate/build/deprecated.js | 28 + node_modules/jest-validate/build/errors.js | 64 + .../jest-validate/build/exampleConfig.js | 38 + node_modules/jest-validate/build/index.d.ts | 89 + node_modules/jest-validate/build/index.js | 56 + node_modules/jest-validate/build/types.js | 1 + node_modules/jest-validate/build/utils.js | 100 + node_modules/jest-validate/build/validate.js | 117 + .../jest-validate/build/validateCLIOptions.js | 127 + node_modules/jest-validate/build/warnings.js | 41 + .../node_modules/camelcase/index.d.ts | 103 + .../node_modules/camelcase/index.js | 113 + .../node_modules/camelcase/license | 9 + .../node_modules/camelcase/package.json | 44 + .../node_modules/camelcase/readme.md | 144 + node_modules/jest-validate/package.json | 37 + node_modules/jest-watcher/LICENSE | 21 + .../jest-watcher/build/BaseWatchPlugin.js | 35 + node_modules/jest-watcher/build/JestHooks.js | 63 + .../jest-watcher/build/PatternPrompt.js | 74 + .../jest-watcher/build/TestWatcher.js | 45 + node_modules/jest-watcher/build/constants.js | 27 + node_modules/jest-watcher/build/index.d.ts | 222 + node_modules/jest-watcher/build/index.js | 74 + node_modules/jest-watcher/build/lib/Prompt.js | 113 + .../jest-watcher/build/lib/colorize.js | 30 + .../build/lib/formatTestNameByPattern.js | 67 + .../build/lib/patternModeHelpers.js | 54 + node_modules/jest-watcher/build/lib/scroll.js | 31 + node_modules/jest-watcher/build/types.js | 1 + node_modules/jest-watcher/package.json | 41 + node_modules/jest-worker/LICENSE | 21 + node_modules/jest-worker/README.md | 272 + node_modules/jest-worker/build/Farm.js | 152 + node_modules/jest-worker/build/FifoQueue.js | 89 + .../jest-worker/build/PriorityQueue.js | 137 + node_modules/jest-worker/build/WorkerPool.js | 34 + .../jest-worker/build/base/BaseWorkerPool.js | 156 + node_modules/jest-worker/build/index.d.ts | 355 + node_modules/jest-worker/build/index.js | 192 + node_modules/jest-worker/build/types.js | 72 + .../build/workers/ChildProcessWorker.js | 490 + .../build/workers/NodeThreadsWorker.js | 359 + .../build/workers/WorkerAbstract.js | 135 + .../build/workers/messageParent.js | 33 + .../jest-worker/build/workers/processChild.js | 159 + .../jest-worker/build/workers/threadChild.js | 177 + .../node_modules/supports-color/browser.js | 24 + .../node_modules/supports-color/index.js | 152 + .../node_modules/supports-color/license | 9 + .../node_modules/supports-color/package.json | 58 + .../node_modules/supports-color/readme.md | 77 + node_modules/jest-worker/package.json | 42 + node_modules/jest/LICENSE | 21 + node_modules/jest/README.md | 11 + node_modules/jest/bin/jest.js | 13 + node_modules/jest/build/index.d.ts | 26 + node_modules/jest/build/index.js | 49 + node_modules/jest/package.json | 74 + node_modules/js-tokens/CHANGELOG.md | 151 + node_modules/js-tokens/LICENSE | 21 + node_modules/js-tokens/README.md | 240 + node_modules/js-tokens/index.js | 23 + node_modules/js-tokens/package.json | 30 + node_modules/js-yaml/CHANGELOG.md | 557 + node_modules/js-yaml/LICENSE | 21 + node_modules/js-yaml/README.md | 299 + node_modules/js-yaml/bin/js-yaml.js | 132 + node_modules/js-yaml/dist/js-yaml.js | 3989 +++++ node_modules/js-yaml/dist/js-yaml.min.js | 1 + node_modules/js-yaml/index.js | 7 + node_modules/js-yaml/lib/js-yaml.js | 39 + node_modules/js-yaml/lib/js-yaml/common.js | 59 + node_modules/js-yaml/lib/js-yaml/dumper.js | 850 + node_modules/js-yaml/lib/js-yaml/exception.js | 43 + node_modules/js-yaml/lib/js-yaml/loader.js | 1644 ++ node_modules/js-yaml/lib/js-yaml/mark.js | 76 + node_modules/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 + node_modules/js-yaml/lib/js-yaml/type/bool.js | 35 + .../js-yaml/lib/js-yaml/type/float.js | 116 + node_modules/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 + node_modules/js-yaml/lib/js-yaml/type/map.js | 8 + .../js-yaml/lib/js-yaml/type/merge.js | 12 + node_modules/js-yaml/lib/js-yaml/type/null.js | 34 + node_modules/js-yaml/lib/js-yaml/type/omap.js | 44 + .../js-yaml/lib/js-yaml/type/pairs.js | 53 + node_modules/js-yaml/lib/js-yaml/type/seq.js | 8 + node_modules/js-yaml/lib/js-yaml/type/set.js | 29 + node_modules/js-yaml/lib/js-yaml/type/str.js | 8 + .../js-yaml/lib/js-yaml/type/timestamp.js | 88 + node_modules/js-yaml/package.json | 49 + node_modules/jsesc/LICENSE-MIT.txt | 20 + node_modules/jsesc/README.md | 422 + node_modules/jsesc/bin/jsesc | 148 + node_modules/jsesc/jsesc.js | 337 + node_modules/jsesc/man/jsesc.1 | 94 + node_modules/jsesc/package.json | 56 + .../CHANGELOG.md | 50 + .../json-parse-even-better-errors/LICENSE.md | 25 + .../json-parse-even-better-errors/README.md | 96 + .../json-parse-even-better-errors/index.js | 121 + .../package.json | 33 + node_modules/json5/LICENSE.md | 23 + node_modules/json5/README.md | 282 + node_modules/json5/dist/index.js | 1737 ++ node_modules/json5/dist/index.min.js | 1 + node_modules/json5/dist/index.min.mjs | 1 + node_modules/json5/dist/index.mjs | 1426 ++ node_modules/json5/lib/cli.js | 152 + node_modules/json5/lib/index.d.ts | 4 + node_modules/json5/lib/index.js | 9 + node_modules/json5/lib/parse.d.ts | 15 + node_modules/json5/lib/parse.js | 1114 ++ node_modules/json5/lib/register.js | 13 + node_modules/json5/lib/require.js | 4 + node_modules/json5/lib/stringify.d.ts | 89 + node_modules/json5/lib/stringify.js | 261 + node_modules/json5/lib/unicode.d.ts | 3 + node_modules/json5/lib/unicode.js | 4 + node_modules/json5/lib/util.d.ts | 5 + node_modules/json5/lib/util.js | 35 + node_modules/json5/package.json | 72 + node_modules/kleur/index.js | 104 + node_modules/kleur/kleur.d.ts | 45 + node_modules/kleur/license | 21 + node_modules/kleur/package.json | 35 + node_modules/kleur/readme.md | 172 + node_modules/leven/index.d.ts | 21 + node_modules/leven/index.js | 77 + node_modules/leven/license | 9 + node_modules/leven/package.json | 57 + node_modules/leven/readme.md | 50 + node_modules/lines-and-columns/LICENSE | 21 + node_modules/lines-and-columns/README.md | 33 + .../lines-and-columns/build/index.d.ts | 13 + node_modules/lines-and-columns/build/index.js | 62 + node_modules/lines-and-columns/package.json | 49 + node_modules/locate-path/index.d.ts | 83 + node_modules/locate-path/index.js | 65 + node_modules/locate-path/license | 9 + node_modules/locate-path/package.json | 45 + node_modules/locate-path/readme.md | 122 + node_modules/lru-cache/LICENSE | 15 + node_modules/lru-cache/README.md | 166 + node_modules/lru-cache/index.js | 334 + node_modules/lru-cache/package.json | 32 + node_modules/make-dir/index.d.ts | 66 + node_modules/make-dir/index.js | 155 + node_modules/make-dir/license | 9 + .../make-dir/node_modules/.bin/semver | 1 + .../make-dir/node_modules/semver/LICENSE | 15 + .../make-dir/node_modules/semver/README.md | 664 + .../node_modules/semver/bin/semver.js | 191 + .../node_modules/semver/classes/comparator.js | 143 + .../node_modules/semver/classes/index.js | 7 + .../node_modules/semver/classes/range.js | 556 + .../node_modules/semver/classes/semver.js | 319 + .../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 + .../semver/functions/prerelease.js | 8 + .../node_modules/semver/functions/rcompare.js | 5 + .../node_modules/semver/functions/rsort.js | 5 + .../semver/functions/satisfies.js | 12 + .../node_modules/semver/functions/sort.js | 5 + .../node_modules/semver/functions/valid.js | 8 + .../make-dir/node_modules/semver/index.js | 91 + .../node_modules/semver/internal/constants.js | 37 + .../node_modules/semver/internal/debug.js | 11 + .../semver/internal/identifiers.js | 25 + .../node_modules/semver/internal/lrucache.js | 42 + .../semver/internal/parse-options.js | 17 + .../node_modules/semver/internal/re.js | 223 + .../make-dir/node_modules/semver/package.json | 78 + .../make-dir/node_modules/semver/preload.js | 4 + .../make-dir/node_modules/semver/range.bnf | 16 + .../node_modules/semver/ranges/gtr.js | 6 + .../node_modules/semver/ranges/intersects.js | 9 + .../node_modules/semver/ranges/ltr.js | 6 + .../semver/ranges/max-satisfying.js | 27 + .../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 + .../semver/ranges/to-comparators.js | 10 + .../node_modules/semver/ranges/valid.js | 13 + node_modules/make-dir/package.json | 63 + node_modules/make-dir/readme.md | 125 + node_modules/makeerror/.travis.yml | 3 + node_modules/makeerror/lib/makeerror.js | 87 + node_modules/makeerror/license | 28 + node_modules/makeerror/package.json | 21 + node_modules/makeerror/readme.md | 77 + node_modules/merge-stream/LICENSE | 21 + node_modules/merge-stream/README.md | 78 + node_modules/merge-stream/index.js | 41 + node_modules/merge-stream/package.json | 19 + node_modules/micromatch/LICENSE | 21 + node_modules/micromatch/README.md | 1024 ++ node_modules/micromatch/index.js | 474 + .../node_modules/picomatch/CHANGELOG.md | 136 + .../micromatch/node_modules/picomatch/LICENSE | 21 + .../node_modules/picomatch/README.md | 708 + .../node_modules/picomatch/index.js | 3 + .../node_modules/picomatch/lib/constants.js | 179 + .../node_modules/picomatch/lib/parse.js | 1091 ++ .../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/micromatch/package.json | 119 + node_modules/mimic-fn/index.d.ts | 54 + node_modules/mimic-fn/index.js | 13 + node_modules/mimic-fn/license | 9 + node_modules/mimic-fn/package.json | 42 + node_modules/mimic-fn/readme.md | 69 + node_modules/minimatch/LICENSE | 15 + node_modules/minimatch/README.md | 230 + node_modules/minimatch/minimatch.js | 947 + node_modules/minimatch/package.json | 33 + node_modules/natural-compare/README.md | 125 + node_modules/natural-compare/index.js | 57 + node_modules/natural-compare/package.json | 42 + node_modules/node-int64/.npmignore | 3 + node_modules/node-int64/Int64.js | 268 + node_modules/node-int64/LICENSE | 19 + node_modules/node-int64/README.md | 78 + node_modules/node-int64/package.json | 27 + node_modules/node-int64/test.js | 120 + node_modules/node-releases/LICENSE | 21 + node_modules/node-releases/README.md | 12 + .../node-releases/data/processed/envs.json | 1 + .../release-schedule/release-schedule.json | 1 + node_modules/node-releases/package.json | 22 + 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/npm-run-path/index.d.ts | 89 + node_modules/npm-run-path/index.js | 47 + node_modules/npm-run-path/license | 9 + node_modules/npm-run-path/package.json | 44 + node_modules/npm-run-path/readme.md | 115 + node_modules/once/LICENSE | 15 + node_modules/once/README.md | 79 + node_modules/once/once.js | 42 + node_modules/once/package.json | 33 + node_modules/onetime/index.d.ts | 64 + node_modules/onetime/index.js | 44 + node_modules/onetime/license | 9 + node_modules/onetime/package.json | 43 + node_modules/onetime/readme.md | 94 + node_modules/p-limit/index.d.ts | 42 + node_modules/p-limit/index.js | 71 + node_modules/p-limit/license | 9 + node_modules/p-limit/package.json | 52 + node_modules/p-limit/readme.md | 101 + node_modules/p-locate/index.d.ts | 64 + node_modules/p-locate/index.js | 52 + node_modules/p-locate/license | 9 + .../p-locate/node_modules/p-limit/index.d.ts | 38 + .../p-locate/node_modules/p-limit/index.js | 57 + .../p-locate/node_modules/p-limit/license | 9 + .../node_modules/p-limit/package.json | 52 + .../p-locate/node_modules/p-limit/readme.md | 101 + node_modules/p-locate/package.json | 53 + node_modules/p-locate/readme.md | 90 + node_modules/p-try/index.d.ts | 39 + node_modules/p-try/index.js | 9 + node_modules/p-try/license | 9 + node_modules/p-try/package.json | 42 + node_modules/p-try/readme.md | 58 + node_modules/parse-json/index.js | 54 + node_modules/parse-json/license | 9 + node_modules/parse-json/package.json | 45 + node_modules/parse-json/readme.md | 119 + node_modules/path-exists/index.d.ts | 28 + node_modules/path-exists/index.js | 23 + node_modules/path-exists/license | 9 + node_modules/path-exists/package.json | 39 + node_modules/path-exists/readme.md | 52 + node_modules/path-is-absolute/index.js | 20 + node_modules/path-is-absolute/license | 21 + node_modules/path-is-absolute/package.json | 43 + node_modules/path-is-absolute/readme.md | 59 + node_modules/path-key/index.d.ts | 40 + node_modules/path-key/index.js | 16 + node_modules/path-key/license | 9 + node_modules/path-key/package.json | 39 + node_modules/path-key/readme.md | 61 + node_modules/path-parse/LICENSE | 21 + node_modules/path-parse/README.md | 42 + node_modules/path-parse/index.js | 75 + node_modules/path-parse/package.json | 33 + node_modules/pirates/LICENSE | 21 + node_modules/pirates/README.md | 73 + node_modules/pirates/index.d.ts | 82 + node_modules/pirates/lib/index.js | 155 + node_modules/pirates/package.json | 43 + node_modules/pkg-dir/index.d.ts | 44 + node_modules/pkg-dir/index.js | 17 + node_modules/pkg-dir/license | 9 + node_modules/pkg-dir/package.json | 56 + node_modules/pkg-dir/readme.md | 66 + node_modules/pretty-format/LICENSE | 21 + node_modules/pretty-format/README.md | 463 + .../pretty-format/build/collections.js | 180 + node_modules/pretty-format/build/index.d.ts | 163 + node_modules/pretty-format/build/index.js | 478 + .../build/plugins/AsymmetricMatcher.js | 89 + .../build/plugins/DOMCollection.js | 67 + .../pretty-format/build/plugins/DOMElement.js | 101 + .../pretty-format/build/plugins/Immutable.js | 217 + .../build/plugins/ReactElement.js | 143 + .../build/plugins/ReactTestComponent.js | 66 + .../build/plugins/lib/escapeHTML.js | 16 + .../pretty-format/build/plugins/lib/markup.js | 113 + node_modules/pretty-format/build/types.js | 1 + .../node_modules/ansi-styles/index.d.ts | 167 + .../node_modules/ansi-styles/index.js | 164 + .../node_modules/ansi-styles/license | 9 + .../node_modules/ansi-styles/package.json | 52 + .../node_modules/ansi-styles/readme.md | 144 + node_modules/pretty-format/package.json | 43 + .../prompts/dist/dateparts/datepart.js | 39 + node_modules/prompts/dist/dateparts/day.js | 35 + node_modules/prompts/dist/dateparts/hours.js | 30 + node_modules/prompts/dist/dateparts/index.js | 13 + .../prompts/dist/dateparts/meridiem.js | 25 + .../prompts/dist/dateparts/milliseconds.js | 28 + .../prompts/dist/dateparts/minutes.js | 29 + node_modules/prompts/dist/dateparts/month.js | 31 + .../prompts/dist/dateparts/seconds.js | 29 + node_modules/prompts/dist/dateparts/year.js | 29 + .../prompts/dist/elements/autocomplete.js | 285 + .../dist/elements/autocompleteMultiselect.js | 201 + node_modules/prompts/dist/elements/confirm.js | 93 + node_modules/prompts/dist/elements/date.js | 250 + node_modules/prompts/dist/elements/index.js | 13 + .../prompts/dist/elements/multiselect.js | 289 + node_modules/prompts/dist/elements/number.js | 250 + node_modules/prompts/dist/elements/prompt.js | 82 + node_modules/prompts/dist/elements/select.js | 190 + node_modules/prompts/dist/elements/text.js | 245 + node_modules/prompts/dist/elements/toggle.js | 124 + node_modules/prompts/dist/index.js | 154 + node_modules/prompts/dist/prompts.js | 222 + node_modules/prompts/dist/util/action.js | 38 + node_modules/prompts/dist/util/clear.js | 42 + .../prompts/dist/util/entriesToDisplay.js | 21 + node_modules/prompts/dist/util/figures.js | 32 + node_modules/prompts/dist/util/index.js | 12 + node_modules/prompts/dist/util/lines.js | 14 + node_modules/prompts/dist/util/strip.js | 7 + node_modules/prompts/dist/util/style.js | 51 + node_modules/prompts/dist/util/wrap.js | 16 + node_modules/prompts/index.js | 14 + .../prompts/lib/dateparts/datepart.js | 35 + node_modules/prompts/lib/dateparts/day.js | 42 + node_modules/prompts/lib/dateparts/hours.js | 30 + node_modules/prompts/lib/dateparts/index.js | 13 + .../prompts/lib/dateparts/meridiem.js | 24 + .../prompts/lib/dateparts/milliseconds.js | 28 + node_modules/prompts/lib/dateparts/minutes.js | 28 + node_modules/prompts/lib/dateparts/month.js | 33 + node_modules/prompts/lib/dateparts/seconds.js | 28 + node_modules/prompts/lib/dateparts/year.js | 28 + .../prompts/lib/elements/autocomplete.js | 264 + .../lib/elements/autocompleteMultiselect.js | 194 + node_modules/prompts/lib/elements/confirm.js | 89 + node_modules/prompts/lib/elements/date.js | 209 + node_modules/prompts/lib/elements/index.js | 13 + .../prompts/lib/elements/multiselect.js | 271 + node_modules/prompts/lib/elements/number.js | 213 + node_modules/prompts/lib/elements/prompt.js | 68 + node_modules/prompts/lib/elements/select.js | 175 + node_modules/prompts/lib/elements/text.js | 208 + node_modules/prompts/lib/elements/toggle.js | 118 + node_modules/prompts/lib/index.js | 98 + node_modules/prompts/lib/prompts.js | 206 + node_modules/prompts/lib/util/action.js | 39 + node_modules/prompts/lib/util/clear.js | 22 + .../prompts/lib/util/entriesToDisplay.js | 21 + node_modules/prompts/lib/util/figures.js | 33 + node_modules/prompts/lib/util/index.js | 12 + node_modules/prompts/lib/util/lines.js | 15 + node_modules/prompts/lib/util/strip.js | 11 + node_modules/prompts/lib/util/style.js | 40 + node_modules/prompts/lib/util/wrap.js | 27 + node_modules/prompts/license | 21 + node_modules/prompts/package.json | 53 + node_modules/prompts/readme.md | 882 + node_modules/pure-rand/CHANGELOG.md | 94 + node_modules/pure-rand/LICENSE | 21 + node_modules/pure-rand/README.md | 208 + .../lib/distribution/Distribution.js | 2 + .../UniformArrayIntDistribution.js | 15 + .../distribution/UniformBigIntDistribution.js | 15 + .../distribution/UniformIntDistribution.js | 15 + .../UnsafeUniformArrayIntDistribution.js | 12 + .../UnsafeUniformBigIntDistribution.js | 28 + .../UnsafeUniformIntDistribution.js | 34 + .../lib/distribution/internals/ArrayInt.js | 141 + ...safeUniformArrayIntDistributionInternal.js | 25 + .../UnsafeUniformIntDistributionInternal.js | 12 + .../lib/esm/distribution/Distribution.js | 1 + .../UniformArrayIntDistribution.js | 12 + .../distribution/UniformBigIntDistribution.js | 12 + .../distribution/UniformIntDistribution.js | 12 + .../UnsafeUniformArrayIntDistribution.js | 8 + .../UnsafeUniformBigIntDistribution.js | 24 + .../UnsafeUniformIntDistribution.js | 30 + .../esm/distribution/internals/ArrayInt.js | 132 + ...safeUniformArrayIntDistributionInternal.js | 21 + .../UnsafeUniformIntDistributionInternal.js | 8 + .../lib/esm/generator/LinearCongruential.js | 47 + .../lib/esm/generator/MersenneTwister.js | 107 + .../lib/esm/generator/RandomGenerator.js | 22 + .../pure-rand/lib/esm/generator/XorShift.js | 69 + .../pure-rand/lib/esm/generator/XoroShiro.js | 69 + node_modules/pure-rand/lib/esm/package.json | 3 + .../pure-rand/lib/esm/pure-rand-default.js | 15 + node_modules/pure-rand/lib/esm/pure-rand.js | 3 + .../esm/types/distribution/Distribution.d.ts | 2 + .../UniformArrayIntDistribution.d.ts | 6 + .../UniformBigIntDistribution.d.ts | 5 + .../distribution/UniformIntDistribution.d.ts | 5 + .../UnsafeUniformArrayIntDistribution.d.ts | 3 + .../UnsafeUniformBigIntDistribution.d.ts | 2 + .../UnsafeUniformIntDistribution.d.ts | 2 + .../distribution/internals/ArrayInt.d.ts | 13 + ...feUniformArrayIntDistributionInternal.d.ts | 3 + .../UnsafeUniformIntDistributionInternal.d.ts | 2 + .../types/generator/LinearCongruential.d.ts | 6 + .../esm/types/generator/MersenneTwister.d.ts | 6 + .../esm/types/generator/RandomGenerator.d.ts | 12 + .../lib/esm/types/generator/XorShift.d.ts | 6 + .../lib/esm/types/generator/XoroShiro.d.ts | 6 + .../lib/esm/types/pure-rand-default.d.ts | 16 + .../pure-rand/lib/esm/types/pure-rand.d.ts | 3 + .../lib/generator/LinearCongruential.js | 50 + .../lib/generator/MersenneTwister.js | 109 + .../lib/generator/RandomGenerator.js | 29 + .../pure-rand/lib/generator/XorShift.js | 72 + .../pure-rand/lib/generator/XoroShiro.js | 72 + .../pure-rand/lib/pure-rand-default.js | 34 + node_modules/pure-rand/lib/pure-rand.js | 19 + .../lib/types/distribution/Distribution.d.ts | 2 + .../UniformArrayIntDistribution.d.ts | 6 + .../UniformBigIntDistribution.d.ts | 5 + .../distribution/UniformIntDistribution.d.ts | 5 + .../UnsafeUniformArrayIntDistribution.d.ts | 3 + .../UnsafeUniformBigIntDistribution.d.ts | 2 + .../UnsafeUniformIntDistribution.d.ts | 2 + .../distribution/internals/ArrayInt.d.ts | 13 + ...feUniformArrayIntDistributionInternal.d.ts | 3 + .../UnsafeUniformIntDistributionInternal.d.ts | 2 + .../types/generator/LinearCongruential.d.ts | 6 + .../lib/types/generator/MersenneTwister.d.ts | 6 + .../lib/types/generator/RandomGenerator.d.ts | 12 + .../lib/types/generator/XorShift.d.ts | 6 + .../lib/types/generator/XoroShiro.d.ts | 6 + .../lib/types/pure-rand-default.d.ts | 16 + .../pure-rand/lib/types/pure-rand.d.ts | 3 + node_modules/pure-rand/package.json | 85 + node_modules/react-is/LICENSE | 21 + node_modules/react-is/README.md | 104 + .../react-is/cjs/react-is.development.js | 221 + .../react-is/cjs/react-is.production.min.js | 14 + node_modules/react-is/index.js | 7 + node_modules/react-is/package.json | 26 + .../react-is/umd/react-is.development.js | 220 + .../react-is/umd/react-is.production.min.js | 15 + node_modules/require-directory/.jshintrc | 67 + node_modules/require-directory/.npmignore | 1 + node_modules/require-directory/.travis.yml | 3 + node_modules/require-directory/LICENSE | 22 + .../require-directory/README.markdown | 184 + node_modules/require-directory/index.js | 86 + node_modules/require-directory/package.json | 40 + node_modules/resolve-cwd/index.d.ts | 48 + node_modules/resolve-cwd/index.js | 5 + node_modules/resolve-cwd/license | 9 + node_modules/resolve-cwd/package.json | 43 + node_modules/resolve-cwd/readme.md | 58 + node_modules/resolve-from/index.d.ts | 31 + node_modules/resolve-from/index.js | 47 + node_modules/resolve-from/license | 9 + node_modules/resolve-from/package.json | 36 + node_modules/resolve-from/readme.md | 72 + node_modules/resolve.exports/dist/index.js | 1 + node_modules/resolve.exports/dist/index.mjs | 1 + node_modules/resolve.exports/index.d.ts | 100 + node_modules/resolve.exports/license | 21 + node_modules/resolve.exports/package.json | 50 + node_modules/resolve.exports/readme.md | 458 + node_modules/resolve/.editorconfig | 37 + node_modules/resolve/.eslintrc | 65 + node_modules/resolve/.github/FUNDING.yml | 12 + node_modules/resolve/LICENSE | 21 + node_modules/resolve/SECURITY.md | 3 + node_modules/resolve/async.js | 3 + node_modules/resolve/bin/resolve | 50 + node_modules/resolve/example/async.js | 5 + node_modules/resolve/example/sync.js | 3 + node_modules/resolve/index.js | 6 + node_modules/resolve/lib/async.js | 329 + node_modules/resolve/lib/caller.js | 8 + node_modules/resolve/lib/core.js | 12 + node_modules/resolve/lib/core.json | 162 + node_modules/resolve/lib/homedir.js | 24 + node_modules/resolve/lib/is-core.js | 5 + .../resolve/lib/node-modules-paths.js | 42 + node_modules/resolve/lib/normalize-options.js | 10 + node_modules/resolve/lib/sync.js | 208 + node_modules/resolve/package.json | 75 + node_modules/resolve/readme.markdown | 301 + node_modules/resolve/sync.js | 3 + node_modules/resolve/test/core.js | 88 + node_modules/resolve/test/dotdot.js | 29 + node_modules/resolve/test/dotdot/abc/index.js | 2 + node_modules/resolve/test/dotdot/index.js | 1 + node_modules/resolve/test/faulty_basedir.js | 29 + node_modules/resolve/test/filter.js | 34 + node_modules/resolve/test/filter_sync.js | 33 + node_modules/resolve/test/home_paths.js | 127 + node_modules/resolve/test/home_paths_sync.js | 114 + node_modules/resolve/test/mock.js | 315 + node_modules/resolve/test/mock_sync.js | 214 + node_modules/resolve/test/module_dir.js | 56 + .../test/module_dir/xmodules/aaa/index.js | 1 + .../test/module_dir/ymodules/aaa/index.js | 1 + .../test/module_dir/zmodules/bbb/main.js | 1 + .../test/module_dir/zmodules/bbb/package.json | 3 + .../resolve/test/node-modules-paths.js | 143 + node_modules/resolve/test/node_path.js | 70 + .../resolve/test/node_path/x/aaa/index.js | 1 + .../resolve/test/node_path/x/ccc/index.js | 1 + .../resolve/test/node_path/y/bbb/index.js | 1 + .../resolve/test/node_path/y/ccc/index.js | 1 + node_modules/resolve/test/nonstring.js | 9 + node_modules/resolve/test/pathfilter.js | 75 + .../resolve/test/pathfilter/deep_ref/main.js | 0 node_modules/resolve/test/precedence.js | 23 + node_modules/resolve/test/precedence/aaa.js | 1 + .../resolve/test/precedence/aaa/index.js | 1 + .../resolve/test/precedence/aaa/main.js | 1 + node_modules/resolve/test/precedence/bbb.js | 1 + .../resolve/test/precedence/bbb/main.js | 1 + node_modules/resolve/test/resolver.js | 597 + .../resolve/test/resolver/baz/doom.js | 0 .../resolve/test/resolver/baz/package.json | 4 + .../resolve/test/resolver/baz/quux.js | 1 + .../resolve/test/resolver/browser_field/a.js | 0 .../resolve/test/resolver/browser_field/b.js | 0 .../test/resolver/browser_field/package.json | 5 + node_modules/resolve/test/resolver/cup.coffee | 1 + .../resolve/test/resolver/dot_main/index.js | 1 + .../test/resolver/dot_main/package.json | 3 + .../test/resolver/dot_slash_main/index.js | 1 + .../test/resolver/dot_slash_main/package.json | 3 + .../resolve/test/resolver/false_main/index.js | 0 .../test/resolver/false_main/package.json | 4 + node_modules/resolve/test/resolver/foo.js | 1 + .../test/resolver/incorrect_main/index.js | 2 + .../test/resolver/incorrect_main/package.json | 3 + .../test/resolver/invalid_main/package.json | 7 + node_modules/resolve/test/resolver/mug.coffee | 0 node_modules/resolve/test/resolver/mug.js | 0 .../test/resolver/multirepo/lerna.json | 6 + .../test/resolver/multirepo/package.json | 20 + .../multirepo/packages/package-a/index.js | 35 + .../multirepo/packages/package-a/package.json | 14 + .../multirepo/packages/package-b/index.js | 0 .../multirepo/packages/package-b/package.json | 14 + .../resolver/nested_symlinks/mylib/async.js | 26 + .../nested_symlinks/mylib/package.json | 15 + .../resolver/nested_symlinks/mylib/sync.js | 12 + .../test/resolver/other_path/lib/other-lib.js | 0 .../resolve/test/resolver/other_path/root.js | 0 .../resolve/test/resolver/quux/foo/index.js | 1 + .../resolve/test/resolver/same_names/foo.js | 1 + .../test/resolver/same_names/foo/index.js | 1 + .../resolver/symlinked/_/node_modules/foo.js | 0 .../symlinked/_/symlink_target/.gitkeep | 0 .../test/resolver/symlinked/package/bar.js | 1 + .../resolver/symlinked/package/package.json | 3 + .../test/resolver/without_basedir/main.js | 5 + node_modules/resolve/test/resolver_sync.js | 730 + node_modules/resolve/test/shadowed_core.js | 54 + .../shadowed_core/node_modules/util/index.js | 0 node_modules/resolve/test/subdirs.js | 13 + node_modules/resolve/test/symlinks.js | 176 + node_modules/semver/LICENSE | 15 + node_modules/semver/README.md | 443 + node_modules/semver/bin/semver.js | 174 + node_modules/semver/package.json | 38 + node_modules/semver/range.bnf | 16 + node_modules/semver/semver.js | 1643 ++ node_modules/shebang-command/index.js | 19 + node_modules/shebang-command/license | 9 + node_modules/shebang-command/package.json | 34 + node_modules/shebang-command/readme.md | 34 + node_modules/shebang-regex/index.d.ts | 22 + node_modules/shebang-regex/index.js | 2 + node_modules/shebang-regex/license | 9 + node_modules/shebang-regex/package.json | 35 + node_modules/shebang-regex/readme.md | 33 + node_modules/signal-exit/LICENSE.txt | 16 + node_modules/signal-exit/README.md | 39 + node_modules/signal-exit/index.js | 202 + node_modules/signal-exit/package.json | 38 + node_modules/signal-exit/signals.js | 53 + node_modules/sisteransi/license | 21 + node_modules/sisteransi/package.json | 34 + node_modules/sisteransi/readme.md | 113 + node_modules/sisteransi/src/index.js | 58 + node_modules/sisteransi/src/sisteransi.d.ts | 35 + 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/source-map-support/LICENSE.md | 21 + node_modules/source-map-support/README.md | 284 + .../browser-source-map-support.js | 113 + node_modules/source-map-support/package.json | 31 + node_modules/source-map-support/register.js | 1 + .../source-map-support/source-map-support.js | 567 + node_modules/source-map/CHANGELOG.md | 301 + node_modules/source-map/LICENSE | 28 + node_modules/source-map/README.md | 742 + .../source-map/dist/source-map.debug.js | 3234 ++++ node_modules/source-map/dist/source-map.js | 3233 ++++ .../source-map/dist/source-map.min.js | 2 + .../source-map/dist/source-map.min.js.map | 1 + node_modules/source-map/lib/array-set.js | 121 + node_modules/source-map/lib/base64-vlq.js | 140 + node_modules/source-map/lib/base64.js | 67 + node_modules/source-map/lib/binary-search.js | 111 + node_modules/source-map/lib/mapping-list.js | 79 + node_modules/source-map/lib/quick-sort.js | 114 + .../source-map/lib/source-map-consumer.js | 1145 ++ .../source-map/lib/source-map-generator.js | 425 + node_modules/source-map/lib/source-node.js | 413 + node_modules/source-map/lib/util.js | 488 + node_modules/source-map/package.json | 73 + node_modules/source-map/source-map.d.ts | 98 + node_modules/source-map/source-map.js | 8 + 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/stack-utils/LICENSE.md | 21 + node_modules/stack-utils/index.js | 344 + node_modules/stack-utils/package.json | 39 + node_modules/stack-utils/readme.md | 143 + node_modules/string-length/index.d.ts | 22 + node_modules/string-length/index.js | 19 + node_modules/string-length/license | 9 + node_modules/string-length/package.json | 45 + node_modules/string-length/readme.md | 43 + node_modules/string-width/index.d.ts | 29 + node_modules/string-width/index.js | 47 + node_modules/string-width/license | 9 + node_modules/string-width/package.json | 56 + node_modules/string-width/readme.md | 50 + node_modules/strip-ansi/index.d.ts | 17 + node_modules/strip-ansi/index.js | 4 + node_modules/strip-ansi/license | 9 + node_modules/strip-ansi/package.json | 54 + node_modules/strip-ansi/readme.md | 46 + node_modules/strip-bom/index.d.ts | 14 + node_modules/strip-bom/index.js | 15 + node_modules/strip-bom/license | 9 + node_modules/strip-bom/package.json | 42 + node_modules/strip-bom/readme.md | 54 + node_modules/strip-final-newline/index.js | 16 + node_modules/strip-final-newline/license | 9 + node_modules/strip-final-newline/package.json | 40 + node_modules/strip-final-newline/readme.md | 30 + node_modules/strip-json-comments/index.d.ts | 36 + node_modules/strip-json-comments/index.js | 77 + node_modules/strip-json-comments/license | 9 + node_modules/strip-json-comments/package.json | 47 + node_modules/strip-json-comments/readme.md | 78 + node_modules/supports-color/browser.js | 5 + node_modules/supports-color/index.js | 135 + node_modules/supports-color/license | 9 + node_modules/supports-color/package.json | 53 + node_modules/supports-color/readme.md | 76 + .../supports-preserve-symlinks-flag/.eslintrc | 14 + .../.github/FUNDING.yml | 12 + .../supports-preserve-symlinks-flag/.nycrc | 9 + .../CHANGELOG.md | 22 + .../supports-preserve-symlinks-flag/LICENSE | 21 + .../supports-preserve-symlinks-flag/README.md | 42 + .../browser.js | 3 + .../supports-preserve-symlinks-flag/index.js | 9 + .../package.json | 70 + .../test/index.js | 29 + node_modules/test-exclude/CHANGELOG.md | 352 + node_modules/test-exclude/LICENSE.txt | 14 + node_modules/test-exclude/README.md | 96 + node_modules/test-exclude/index.js | 161 + .../test-exclude/is-outside-dir-posix.js | 7 + .../test-exclude/is-outside-dir-win32.js | 10 + node_modules/test-exclude/is-outside-dir.js | 7 + node_modules/test-exclude/package.json | 45 + node_modules/tmpl/lib/tmpl.js | 17 + node_modules/tmpl/license | 28 + node_modules/tmpl/package.json | 19 + node_modules/tmpl/readme.md | 10 + 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/type-detect/LICENSE | 19 + node_modules/type-detect/README.md | 228 + node_modules/type-detect/index.js | 378 + node_modules/type-detect/package.json | 1 + node_modules/type-detect/type-detect.js | 388 + node_modules/type-fest/base.d.ts | 39 + node_modules/type-fest/index.d.ts | 2 + node_modules/type-fest/license | 9 + node_modules/type-fest/package.json | 58 + node_modules/type-fest/readme.md | 760 + .../type-fest/source/async-return-type.d.ts | 23 + node_modules/type-fest/source/asyncify.d.ts | 31 + node_modules/type-fest/source/basic.d.ts | 51 + .../type-fest/source/conditional-except.d.ts | 43 + .../type-fest/source/conditional-keys.d.ts | 43 + .../type-fest/source/conditional-pick.d.ts | 42 + node_modules/type-fest/source/entries.d.ts | 57 + node_modules/type-fest/source/entry.d.ts | 60 + node_modules/type-fest/source/except.d.ts | 22 + .../type-fest/source/fixed-length-array.d.ts | 38 + .../type-fest/source/iterable-element.d.ts | 46 + .../type-fest/source/literal-union.d.ts | 33 + .../type-fest/source/merge-exclusive.d.ts | 39 + node_modules/type-fest/source/merge.d.ts | 25 + node_modules/type-fest/source/mutable.d.ts | 38 + node_modules/type-fest/source/opaque.d.ts | 65 + .../type-fest/source/package-json.d.ts | 611 + .../type-fest/source/partial-deep.d.ts | 72 + node_modules/type-fest/source/promisable.d.ts | 23 + .../type-fest/source/promise-value.d.ts | 27 + .../type-fest/source/readonly-deep.d.ts | 59 + .../source/require-at-least-one.d.ts | 33 + .../type-fest/source/require-exactly-one.d.ts | 35 + .../type-fest/source/set-optional.d.ts | 33 + .../type-fest/source/set-required.d.ts | 33 + .../type-fest/source/set-return-type.d.ts | 29 + node_modules/type-fest/source/simplify.d.ts | 4 + .../type-fest/source/stringified.d.ts | 21 + .../type-fest/source/tsconfig-json.d.ts | 870 + .../type-fest/source/typed-array.d.ts | 15 + .../source/union-to-intersection.d.ts | 58 + node_modules/type-fest/source/utilities.d.ts | 5 + node_modules/type-fest/source/value-of.d.ts | 40 + node_modules/type-fest/ts41/camel-case.d.ts | 64 + .../type-fest/ts41/delimiter-case.d.ts | 85 + node_modules/type-fest/ts41/get.d.ts | 131 + node_modules/type-fest/ts41/index.d.ts | 10 + node_modules/type-fest/ts41/kebab-case.d.ts | 36 + node_modules/type-fest/ts41/pascal-case.d.ts | 36 + node_modules/type-fest/ts41/snake-case.d.ts | 35 + node_modules/type-fest/ts41/utilities.d.ts | 8 + node_modules/undici-types/LICENSE | 21 + node_modules/undici-types/README.md | 6 + node_modules/undici-types/agent.d.ts | 31 + node_modules/undici-types/api.d.ts | 43 + node_modules/undici-types/balanced-pool.d.ts | 29 + node_modules/undici-types/cache.d.ts | 36 + node_modules/undici-types/client.d.ts | 108 + node_modules/undici-types/connector.d.ts | 34 + node_modules/undici-types/content-type.d.ts | 21 + node_modules/undici-types/cookies.d.ts | 28 + .../undici-types/diagnostics-channel.d.ts | 66 + node_modules/undici-types/dispatcher.d.ts | 256 + .../undici-types/env-http-proxy-agent.d.ts | 21 + node_modules/undici-types/errors.d.ts | 149 + node_modules/undici-types/eventsource.d.ts | 61 + node_modules/undici-types/fetch.d.ts | 209 + node_modules/undici-types/file.d.ts | 39 + node_modules/undici-types/filereader.d.ts | 54 + node_modules/undici-types/formdata.d.ts | 108 + .../undici-types/global-dispatcher.d.ts | 9 + node_modules/undici-types/global-origin.d.ts | 7 + node_modules/undici-types/handlers.d.ts | 15 + node_modules/undici-types/header.d.ts | 4 + node_modules/undici-types/index.d.ts | 71 + node_modules/undici-types/interceptors.d.ts | 17 + node_modules/undici-types/mock-agent.d.ts | 50 + node_modules/undici-types/mock-client.d.ts | 25 + node_modules/undici-types/mock-errors.d.ts | 12 + .../undici-types/mock-interceptor.d.ts | 93 + node_modules/undici-types/mock-pool.d.ts | 25 + node_modules/undici-types/package.json | 55 + node_modules/undici-types/patch.d.ts | 33 + node_modules/undici-types/pool-stats.d.ts | 19 + node_modules/undici-types/pool.d.ts | 39 + node_modules/undici-types/proxy-agent.d.ts | 28 + node_modules/undici-types/readable.d.ts | 65 + node_modules/undici-types/retry-agent.d.ts | 8 + node_modules/undici-types/retry-handler.d.ts | 116 + node_modules/undici-types/util.d.ts | 18 + node_modules/undici-types/webidl.d.ts | 228 + node_modules/undici-types/websocket.d.ts | 150 + node_modules/update-browserslist-db/LICENSE | 20 + node_modules/update-browserslist-db/README.md | 22 + .../check-npm-version.js | 17 + node_modules/update-browserslist-db/cli.js | 42 + .../update-browserslist-db/index.d.ts | 6 + node_modules/update-browserslist-db/index.js | 341 + .../update-browserslist-db/package.json | 40 + node_modules/update-browserslist-db/utils.js | 25 + node_modules/v8-to-istanbul/CHANGELOG.md | 445 + node_modules/v8-to-istanbul/LICENSE.txt | 14 + node_modules/v8-to-istanbul/README.md | 88 + node_modules/v8-to-istanbul/index.d.ts | 25 + node_modules/v8-to-istanbul/index.js | 5 + node_modules/v8-to-istanbul/lib/branch.js | 28 + node_modules/v8-to-istanbul/lib/function.js | 29 + node_modules/v8-to-istanbul/lib/line.js | 34 + node_modules/v8-to-istanbul/lib/range.js | 35 + node_modules/v8-to-istanbul/lib/source.js | 254 + .../v8-to-istanbul/lib/v8-to-istanbul.js | 323 + node_modules/v8-to-istanbul/package.json | 49 + node_modules/walker/.travis.yml | 3 + node_modules/walker/LICENSE | 13 + node_modules/walker/lib/walker.js | 111 + node_modules/walker/package.json | 27 + node_modules/walker/readme.md | 52 + node_modules/which/CHANGELOG.md | 166 + node_modules/which/LICENSE | 15 + node_modules/which/README.md | 54 + node_modules/which/bin/node-which | 52 + node_modules/which/package.json | 43 + node_modules/which/which.js | 125 + node_modules/wrap-ansi/index.js | 216 + node_modules/wrap-ansi/license | 9 + node_modules/wrap-ansi/package.json | 62 + node_modules/wrap-ansi/readme.md | 91 + node_modules/wrappy/LICENSE | 15 + node_modules/wrappy/README.md | 36 + node_modules/wrappy/package.json | 29 + node_modules/wrappy/wrappy.js | 33 + node_modules/write-file-atomic/LICENSE.md | 6 + node_modules/write-file-atomic/README.md | 91 + node_modules/write-file-atomic/lib/index.js | 267 + node_modules/write-file-atomic/package.json | 55 + node_modules/y18n/CHANGELOG.md | 100 + node_modules/y18n/LICENSE | 13 + node_modules/y18n/README.md | 127 + node_modules/y18n/build/index.cjs | 203 + node_modules/y18n/build/lib/cjs.js | 6 + node_modules/y18n/build/lib/index.js | 174 + .../y18n/build/lib/platform-shims/node.js | 19 + node_modules/y18n/index.mjs | 8 + node_modules/y18n/package.json | 70 + node_modules/yallist/LICENSE | 15 + node_modules/yallist/README.md | 204 + node_modules/yallist/iterator.js | 8 + node_modules/yallist/package.json | 29 + node_modules/yallist/yallist.js | 426 + node_modules/yargs-parser/CHANGELOG.md | 308 + node_modules/yargs-parser/LICENSE.txt | 14 + node_modules/yargs-parser/README.md | 518 + node_modules/yargs-parser/browser.js | 29 + node_modules/yargs-parser/build/index.cjs | 1050 ++ node_modules/yargs-parser/build/lib/index.js | 62 + .../yargs-parser/build/lib/string-utils.js | 65 + .../build/lib/tokenize-arg-string.js | 40 + .../build/lib/yargs-parser-types.js | 12 + .../yargs-parser/build/lib/yargs-parser.js | 1045 ++ node_modules/yargs-parser/package.json | 92 + node_modules/yargs/LICENSE | 21 + node_modules/yargs/README.md | 204 + node_modules/yargs/browser.d.ts | 5 + node_modules/yargs/browser.mjs | 7 + node_modules/yargs/build/index.cjs | 1 + node_modules/yargs/build/lib/argsert.js | 62 + node_modules/yargs/build/lib/command.js | 449 + .../yargs/build/lib/completion-templates.js | 48 + node_modules/yargs/build/lib/completion.js | 243 + node_modules/yargs/build/lib/middleware.js | 88 + node_modules/yargs/build/lib/parse-command.js | 32 + .../yargs/build/lib/typings/common-types.js | 9 + .../build/lib/typings/yargs-parser-types.js | 1 + node_modules/yargs/build/lib/usage.js | 584 + .../yargs/build/lib/utils/apply-extends.js | 59 + .../yargs/build/lib/utils/is-promise.js | 5 + .../yargs/build/lib/utils/levenshtein.js | 34 + .../build/lib/utils/maybe-async-result.js | 17 + .../yargs/build/lib/utils/obj-filter.js | 10 + .../yargs/build/lib/utils/process-argv.js | 17 + .../yargs/build/lib/utils/set-blocking.js | 12 + .../yargs/build/lib/utils/which-module.js | 10 + node_modules/yargs/build/lib/validation.js | 305 + node_modules/yargs/build/lib/yargs-factory.js | 1512 ++ node_modules/yargs/build/lib/yerror.js | 9 + node_modules/yargs/helpers/helpers.mjs | 10 + node_modules/yargs/helpers/index.js | 14 + node_modules/yargs/helpers/package.json | 3 + node_modules/yargs/index.cjs | 53 + node_modules/yargs/index.mjs | 8 + .../yargs/lib/platform-shims/browser.mjs | 95 + node_modules/yargs/lib/platform-shims/esm.mjs | 73 + node_modules/yargs/locales/be.json | 46 + node_modules/yargs/locales/cs.json | 51 + node_modules/yargs/locales/de.json | 46 + node_modules/yargs/locales/en.json | 55 + node_modules/yargs/locales/es.json | 46 + node_modules/yargs/locales/fi.json | 49 + node_modules/yargs/locales/fr.json | 53 + node_modules/yargs/locales/hi.json | 49 + node_modules/yargs/locales/hu.json | 46 + node_modules/yargs/locales/id.json | 50 + node_modules/yargs/locales/it.json | 46 + node_modules/yargs/locales/ja.json | 51 + node_modules/yargs/locales/ko.json | 49 + node_modules/yargs/locales/nb.json | 44 + node_modules/yargs/locales/nl.json | 49 + node_modules/yargs/locales/nn.json | 44 + node_modules/yargs/locales/pirate.json | 13 + node_modules/yargs/locales/pl.json | 49 + node_modules/yargs/locales/pt.json | 45 + node_modules/yargs/locales/pt_BR.json | 48 + node_modules/yargs/locales/ru.json | 51 + node_modules/yargs/locales/th.json | 46 + node_modules/yargs/locales/tr.json | 48 + node_modules/yargs/locales/uk_UA.json | 51 + node_modules/yargs/locales/uz.json | 52 + node_modules/yargs/locales/zh_CN.json | 48 + node_modules/yargs/locales/zh_TW.json | 51 + node_modules/yargs/package.json | 123 + node_modules/yargs/yargs | 9 + node_modules/yargs/yargs.mjs | 10 + node_modules/yocto-queue/index.d.ts | 56 + node_modules/yocto-queue/index.js | 68 + node_modules/yocto-queue/license | 9 + node_modules/yocto-queue/package.json | 43 + node_modules/yocto-queue/readme.md | 64 + package-lock.json | 3940 ++++- package.json | 1 + tests/readme.test.js | 7 +- 4145 files changed, 396769 insertions(+), 398 deletions(-) create mode 120000 node_modules/.bin/browserslist create mode 120000 node_modules/.bin/create-jest create mode 120000 node_modules/.bin/esparse create mode 120000 node_modules/.bin/esvalidate create mode 120000 node_modules/.bin/import-local-fixture create mode 120000 node_modules/.bin/jest create mode 120000 node_modules/.bin/js-yaml create mode 120000 node_modules/.bin/jsesc create mode 120000 node_modules/.bin/json5 create mode 120000 node_modules/.bin/node-which create mode 120000 node_modules/.bin/parser create mode 120000 node_modules/.bin/resolve create mode 120000 node_modules/.bin/semver create mode 120000 node_modules/.bin/update-browserslist-db create mode 100644 node_modules/@ampproject/remapping/LICENSE create mode 100644 node_modules/@ampproject/remapping/README.md create mode 100644 node_modules/@ampproject/remapping/dist/remapping.mjs create mode 100644 node_modules/@ampproject/remapping/dist/remapping.mjs.map create mode 100644 node_modules/@ampproject/remapping/dist/remapping.umd.js create mode 100644 node_modules/@ampproject/remapping/dist/remapping.umd.js.map create mode 100644 node_modules/@ampproject/remapping/dist/types/build-source-map-tree.d.ts create mode 100644 node_modules/@ampproject/remapping/dist/types/remapping.d.ts create mode 100644 node_modules/@ampproject/remapping/dist/types/source-map-tree.d.ts create mode 100644 node_modules/@ampproject/remapping/dist/types/source-map.d.ts create mode 100644 node_modules/@ampproject/remapping/dist/types/types.d.ts create mode 100644 node_modules/@ampproject/remapping/package.json create mode 100644 node_modules/@babel/code-frame/LICENSE create mode 100644 node_modules/@babel/code-frame/README.md create mode 100644 node_modules/@babel/code-frame/lib/index.js create mode 100644 node_modules/@babel/code-frame/lib/index.js.map create mode 100644 node_modules/@babel/code-frame/package.json create mode 100644 node_modules/@babel/compat-data/LICENSE create mode 100644 node_modules/@babel/compat-data/README.md create mode 100644 node_modules/@babel/compat-data/corejs2-built-ins.js create mode 100644 node_modules/@babel/compat-data/corejs3-shipped-proposals.js create mode 100644 node_modules/@babel/compat-data/data/corejs2-built-ins.json create mode 100644 node_modules/@babel/compat-data/data/corejs3-shipped-proposals.json create mode 100644 node_modules/@babel/compat-data/data/native-modules.json create mode 100644 node_modules/@babel/compat-data/data/overlapping-plugins.json create mode 100644 node_modules/@babel/compat-data/data/plugin-bugfixes.json create mode 100644 node_modules/@babel/compat-data/data/plugins.json create mode 100644 node_modules/@babel/compat-data/native-modules.js create mode 100644 node_modules/@babel/compat-data/overlapping-plugins.js create mode 100644 node_modules/@babel/compat-data/package.json create mode 100644 node_modules/@babel/compat-data/plugin-bugfixes.js create mode 100644 node_modules/@babel/compat-data/plugins.js create mode 100644 node_modules/@babel/core/LICENSE create mode 100644 node_modules/@babel/core/README.md create mode 100644 node_modules/@babel/core/lib/config/cache-contexts.js create mode 100644 node_modules/@babel/core/lib/config/cache-contexts.js.map create mode 100644 node_modules/@babel/core/lib/config/caching.js create mode 100644 node_modules/@babel/core/lib/config/caching.js.map create mode 100644 node_modules/@babel/core/lib/config/config-chain.js create mode 100644 node_modules/@babel/core/lib/config/config-chain.js.map create mode 100644 node_modules/@babel/core/lib/config/config-descriptors.js create mode 100644 node_modules/@babel/core/lib/config/config-descriptors.js.map create mode 100644 node_modules/@babel/core/lib/config/files/configuration.js create mode 100644 node_modules/@babel/core/lib/config/files/configuration.js.map create mode 100644 node_modules/@babel/core/lib/config/files/import.cjs create mode 100644 node_modules/@babel/core/lib/config/files/import.cjs.map create mode 100644 node_modules/@babel/core/lib/config/files/index-browser.js create mode 100644 node_modules/@babel/core/lib/config/files/index-browser.js.map create mode 100644 node_modules/@babel/core/lib/config/files/index.js create mode 100644 node_modules/@babel/core/lib/config/files/index.js.map create mode 100644 node_modules/@babel/core/lib/config/files/module-types.js create mode 100644 node_modules/@babel/core/lib/config/files/module-types.js.map create mode 100644 node_modules/@babel/core/lib/config/files/package.js create mode 100644 node_modules/@babel/core/lib/config/files/package.js.map create mode 100644 node_modules/@babel/core/lib/config/files/plugins.js create mode 100644 node_modules/@babel/core/lib/config/files/plugins.js.map create mode 100644 node_modules/@babel/core/lib/config/files/types.js create mode 100644 node_modules/@babel/core/lib/config/files/types.js.map create mode 100644 node_modules/@babel/core/lib/config/files/utils.js create mode 100644 node_modules/@babel/core/lib/config/files/utils.js.map create mode 100644 node_modules/@babel/core/lib/config/full.js create mode 100644 node_modules/@babel/core/lib/config/full.js.map create mode 100644 node_modules/@babel/core/lib/config/helpers/config-api.js create mode 100644 node_modules/@babel/core/lib/config/helpers/config-api.js.map create mode 100644 node_modules/@babel/core/lib/config/helpers/deep-array.js create mode 100644 node_modules/@babel/core/lib/config/helpers/deep-array.js.map create mode 100644 node_modules/@babel/core/lib/config/helpers/environment.js create mode 100644 node_modules/@babel/core/lib/config/helpers/environment.js.map create mode 100644 node_modules/@babel/core/lib/config/index.js create mode 100644 node_modules/@babel/core/lib/config/index.js.map create mode 100644 node_modules/@babel/core/lib/config/item.js create mode 100644 node_modules/@babel/core/lib/config/item.js.map create mode 100644 node_modules/@babel/core/lib/config/partial.js create mode 100644 node_modules/@babel/core/lib/config/partial.js.map create mode 100644 node_modules/@babel/core/lib/config/pattern-to-regex.js create mode 100644 node_modules/@babel/core/lib/config/pattern-to-regex.js.map create mode 100644 node_modules/@babel/core/lib/config/plugin.js create mode 100644 node_modules/@babel/core/lib/config/plugin.js.map create mode 100644 node_modules/@babel/core/lib/config/printer.js create mode 100644 node_modules/@babel/core/lib/config/printer.js.map create mode 100644 node_modules/@babel/core/lib/config/resolve-targets-browser.js create mode 100644 node_modules/@babel/core/lib/config/resolve-targets-browser.js.map create mode 100644 node_modules/@babel/core/lib/config/resolve-targets.js create mode 100644 node_modules/@babel/core/lib/config/resolve-targets.js.map create mode 100644 node_modules/@babel/core/lib/config/util.js create mode 100644 node_modules/@babel/core/lib/config/util.js.map create mode 100644 node_modules/@babel/core/lib/config/validation/option-assertions.js create mode 100644 node_modules/@babel/core/lib/config/validation/option-assertions.js.map create mode 100644 node_modules/@babel/core/lib/config/validation/options.js create mode 100644 node_modules/@babel/core/lib/config/validation/options.js.map create mode 100644 node_modules/@babel/core/lib/config/validation/plugins.js create mode 100644 node_modules/@babel/core/lib/config/validation/plugins.js.map create mode 100644 node_modules/@babel/core/lib/config/validation/removed.js create mode 100644 node_modules/@babel/core/lib/config/validation/removed.js.map create mode 100644 node_modules/@babel/core/lib/errors/config-error.js create mode 100644 node_modules/@babel/core/lib/errors/config-error.js.map create mode 100644 node_modules/@babel/core/lib/errors/rewrite-stack-trace.js create mode 100644 node_modules/@babel/core/lib/errors/rewrite-stack-trace.js.map create mode 100644 node_modules/@babel/core/lib/gensync-utils/async.js create mode 100644 node_modules/@babel/core/lib/gensync-utils/async.js.map create mode 100644 node_modules/@babel/core/lib/gensync-utils/fs.js create mode 100644 node_modules/@babel/core/lib/gensync-utils/fs.js.map create mode 100644 node_modules/@babel/core/lib/gensync-utils/functional.js create mode 100644 node_modules/@babel/core/lib/gensync-utils/functional.js.map create mode 100644 node_modules/@babel/core/lib/index.js create mode 100644 node_modules/@babel/core/lib/index.js.map create mode 100644 node_modules/@babel/core/lib/parse.js create mode 100644 node_modules/@babel/core/lib/parse.js.map create mode 100644 node_modules/@babel/core/lib/parser/index.js create mode 100644 node_modules/@babel/core/lib/parser/index.js.map create mode 100644 node_modules/@babel/core/lib/parser/util/missing-plugin-helper.js create mode 100644 node_modules/@babel/core/lib/parser/util/missing-plugin-helper.js.map create mode 100644 node_modules/@babel/core/lib/tools/build-external-helpers.js create mode 100644 node_modules/@babel/core/lib/tools/build-external-helpers.js.map create mode 100644 node_modules/@babel/core/lib/transform-ast.js create mode 100644 node_modules/@babel/core/lib/transform-ast.js.map create mode 100644 node_modules/@babel/core/lib/transform-file-browser.js create mode 100644 node_modules/@babel/core/lib/transform-file-browser.js.map create mode 100644 node_modules/@babel/core/lib/transform-file.js create mode 100644 node_modules/@babel/core/lib/transform-file.js.map create mode 100644 node_modules/@babel/core/lib/transform.js create mode 100644 node_modules/@babel/core/lib/transform.js.map create mode 100644 node_modules/@babel/core/lib/transformation/block-hoist-plugin.js create mode 100644 node_modules/@babel/core/lib/transformation/block-hoist-plugin.js.map create mode 100644 node_modules/@babel/core/lib/transformation/file/babel-7-helpers.cjs create mode 100644 node_modules/@babel/core/lib/transformation/file/babel-7-helpers.cjs.map create mode 100644 node_modules/@babel/core/lib/transformation/file/file.js create mode 100644 node_modules/@babel/core/lib/transformation/file/file.js.map create mode 100644 node_modules/@babel/core/lib/transformation/file/generate.js create mode 100644 node_modules/@babel/core/lib/transformation/file/generate.js.map create mode 100644 node_modules/@babel/core/lib/transformation/file/merge-map.js create mode 100644 node_modules/@babel/core/lib/transformation/file/merge-map.js.map create mode 100644 node_modules/@babel/core/lib/transformation/index.js create mode 100644 node_modules/@babel/core/lib/transformation/index.js.map create mode 100644 node_modules/@babel/core/lib/transformation/normalize-file.js create mode 100644 node_modules/@babel/core/lib/transformation/normalize-file.js.map create mode 100644 node_modules/@babel/core/lib/transformation/normalize-opts.js create mode 100644 node_modules/@babel/core/lib/transformation/normalize-opts.js.map create mode 100644 node_modules/@babel/core/lib/transformation/plugin-pass.js create mode 100644 node_modules/@babel/core/lib/transformation/plugin-pass.js.map create mode 100644 node_modules/@babel/core/lib/transformation/util/clone-deep.js create mode 100644 node_modules/@babel/core/lib/transformation/util/clone-deep.js.map create mode 100644 node_modules/@babel/core/lib/vendor/import-meta-resolve.js create mode 100644 node_modules/@babel/core/lib/vendor/import-meta-resolve.js.map create mode 100644 node_modules/@babel/core/package.json create mode 100644 node_modules/@babel/core/src/config/files/index-browser.ts create mode 100644 node_modules/@babel/core/src/config/files/index.ts create mode 100644 node_modules/@babel/core/src/config/resolve-targets-browser.ts create mode 100644 node_modules/@babel/core/src/config/resolve-targets.ts create mode 100644 node_modules/@babel/core/src/transform-file-browser.ts create mode 100644 node_modules/@babel/core/src/transform-file.ts create mode 100644 node_modules/@babel/generator/LICENSE create mode 100644 node_modules/@babel/generator/README.md create mode 100644 node_modules/@babel/generator/lib/buffer.js create mode 100644 node_modules/@babel/generator/lib/buffer.js.map create mode 100644 node_modules/@babel/generator/lib/generators/base.js create mode 100644 node_modules/@babel/generator/lib/generators/base.js.map create mode 100644 node_modules/@babel/generator/lib/generators/classes.js create mode 100644 node_modules/@babel/generator/lib/generators/classes.js.map create mode 100644 node_modules/@babel/generator/lib/generators/deprecated.js create mode 100644 node_modules/@babel/generator/lib/generators/deprecated.js.map create mode 100644 node_modules/@babel/generator/lib/generators/expressions.js create mode 100644 node_modules/@babel/generator/lib/generators/expressions.js.map create mode 100644 node_modules/@babel/generator/lib/generators/flow.js create mode 100644 node_modules/@babel/generator/lib/generators/flow.js.map create mode 100644 node_modules/@babel/generator/lib/generators/index.js create mode 100644 node_modules/@babel/generator/lib/generators/index.js.map create mode 100644 node_modules/@babel/generator/lib/generators/jsx.js create mode 100644 node_modules/@babel/generator/lib/generators/jsx.js.map create mode 100644 node_modules/@babel/generator/lib/generators/methods.js create mode 100644 node_modules/@babel/generator/lib/generators/methods.js.map create mode 100644 node_modules/@babel/generator/lib/generators/modules.js create mode 100644 node_modules/@babel/generator/lib/generators/modules.js.map create mode 100644 node_modules/@babel/generator/lib/generators/statements.js create mode 100644 node_modules/@babel/generator/lib/generators/statements.js.map create mode 100644 node_modules/@babel/generator/lib/generators/template-literals.js create mode 100644 node_modules/@babel/generator/lib/generators/template-literals.js.map create mode 100644 node_modules/@babel/generator/lib/generators/types.js create mode 100644 node_modules/@babel/generator/lib/generators/types.js.map create mode 100644 node_modules/@babel/generator/lib/generators/typescript.js create mode 100644 node_modules/@babel/generator/lib/generators/typescript.js.map create mode 100644 node_modules/@babel/generator/lib/index.js create mode 100644 node_modules/@babel/generator/lib/index.js.map create mode 100644 node_modules/@babel/generator/lib/node/index.js create mode 100644 node_modules/@babel/generator/lib/node/index.js.map create mode 100644 node_modules/@babel/generator/lib/node/parentheses.js create mode 100644 node_modules/@babel/generator/lib/node/parentheses.js.map create mode 100644 node_modules/@babel/generator/lib/node/whitespace.js create mode 100644 node_modules/@babel/generator/lib/node/whitespace.js.map create mode 100644 node_modules/@babel/generator/lib/printer.js create mode 100644 node_modules/@babel/generator/lib/printer.js.map create mode 100644 node_modules/@babel/generator/lib/source-map.js create mode 100644 node_modules/@babel/generator/lib/source-map.js.map create mode 100644 node_modules/@babel/generator/lib/token-map.js create mode 100644 node_modules/@babel/generator/lib/token-map.js.map create mode 100644 node_modules/@babel/generator/package.json create mode 100644 node_modules/@babel/helper-compilation-targets/LICENSE create mode 100644 node_modules/@babel/helper-compilation-targets/README.md create mode 100644 node_modules/@babel/helper-compilation-targets/lib/debug.js create mode 100644 node_modules/@babel/helper-compilation-targets/lib/debug.js.map create mode 100644 node_modules/@babel/helper-compilation-targets/lib/filter-items.js create mode 100644 node_modules/@babel/helper-compilation-targets/lib/filter-items.js.map create mode 100644 node_modules/@babel/helper-compilation-targets/lib/index.js create mode 100644 node_modules/@babel/helper-compilation-targets/lib/index.js.map create mode 100644 node_modules/@babel/helper-compilation-targets/lib/options.js create mode 100644 node_modules/@babel/helper-compilation-targets/lib/options.js.map create mode 100644 node_modules/@babel/helper-compilation-targets/lib/pretty.js create mode 100644 node_modules/@babel/helper-compilation-targets/lib/pretty.js.map create mode 100644 node_modules/@babel/helper-compilation-targets/lib/targets.js create mode 100644 node_modules/@babel/helper-compilation-targets/lib/targets.js.map create mode 100644 node_modules/@babel/helper-compilation-targets/lib/utils.js create mode 100644 node_modules/@babel/helper-compilation-targets/lib/utils.js.map create mode 100644 node_modules/@babel/helper-compilation-targets/package.json create mode 100644 node_modules/@babel/helper-module-imports/LICENSE create mode 100644 node_modules/@babel/helper-module-imports/README.md create mode 100644 node_modules/@babel/helper-module-imports/lib/import-builder.js create mode 100644 node_modules/@babel/helper-module-imports/lib/import-builder.js.map create mode 100644 node_modules/@babel/helper-module-imports/lib/import-injector.js create mode 100644 node_modules/@babel/helper-module-imports/lib/import-injector.js.map create mode 100644 node_modules/@babel/helper-module-imports/lib/index.js create mode 100644 node_modules/@babel/helper-module-imports/lib/index.js.map create mode 100644 node_modules/@babel/helper-module-imports/lib/is-module.js create mode 100644 node_modules/@babel/helper-module-imports/lib/is-module.js.map create mode 100644 node_modules/@babel/helper-module-imports/package.json create mode 100644 node_modules/@babel/helper-module-transforms/LICENSE create mode 100644 node_modules/@babel/helper-module-transforms/README.md create mode 100644 node_modules/@babel/helper-module-transforms/lib/dynamic-import.js create mode 100644 node_modules/@babel/helper-module-transforms/lib/dynamic-import.js.map create mode 100644 node_modules/@babel/helper-module-transforms/lib/get-module-name.js create mode 100644 node_modules/@babel/helper-module-transforms/lib/get-module-name.js.map create mode 100644 node_modules/@babel/helper-module-transforms/lib/index.js create mode 100644 node_modules/@babel/helper-module-transforms/lib/index.js.map create mode 100644 node_modules/@babel/helper-module-transforms/lib/lazy-modules.js create mode 100644 node_modules/@babel/helper-module-transforms/lib/lazy-modules.js.map create mode 100644 node_modules/@babel/helper-module-transforms/lib/normalize-and-load-metadata.js create mode 100644 node_modules/@babel/helper-module-transforms/lib/normalize-and-load-metadata.js.map create mode 100644 node_modules/@babel/helper-module-transforms/lib/rewrite-live-references.js create mode 100644 node_modules/@babel/helper-module-transforms/lib/rewrite-live-references.js.map create mode 100644 node_modules/@babel/helper-module-transforms/lib/rewrite-this.js create mode 100644 node_modules/@babel/helper-module-transforms/lib/rewrite-this.js.map create mode 100644 node_modules/@babel/helper-module-transforms/package.json create mode 100644 node_modules/@babel/helper-plugin-utils/LICENSE create mode 100644 node_modules/@babel/helper-plugin-utils/README.md create mode 100644 node_modules/@babel/helper-plugin-utils/lib/index.js create mode 100644 node_modules/@babel/helper-plugin-utils/lib/index.js.map create mode 100644 node_modules/@babel/helper-plugin-utils/package.json create mode 100644 node_modules/@babel/helper-string-parser/LICENSE create mode 100644 node_modules/@babel/helper-string-parser/README.md create mode 100644 node_modules/@babel/helper-string-parser/lib/index.js create mode 100644 node_modules/@babel/helper-string-parser/lib/index.js.map create mode 100644 node_modules/@babel/helper-string-parser/package.json create mode 100644 node_modules/@babel/helper-validator-identifier/LICENSE create mode 100644 node_modules/@babel/helper-validator-identifier/README.md create mode 100644 node_modules/@babel/helper-validator-identifier/lib/identifier.js create mode 100644 node_modules/@babel/helper-validator-identifier/lib/identifier.js.map create mode 100644 node_modules/@babel/helper-validator-identifier/lib/index.js create mode 100644 node_modules/@babel/helper-validator-identifier/lib/index.js.map create mode 100644 node_modules/@babel/helper-validator-identifier/lib/keyword.js create mode 100644 node_modules/@babel/helper-validator-identifier/lib/keyword.js.map create mode 100644 node_modules/@babel/helper-validator-identifier/package.json create mode 100644 node_modules/@babel/helper-validator-option/LICENSE create mode 100644 node_modules/@babel/helper-validator-option/README.md create mode 100644 node_modules/@babel/helper-validator-option/lib/find-suggestion.js create mode 100644 node_modules/@babel/helper-validator-option/lib/find-suggestion.js.map create mode 100644 node_modules/@babel/helper-validator-option/lib/index.js create mode 100644 node_modules/@babel/helper-validator-option/lib/index.js.map create mode 100644 node_modules/@babel/helper-validator-option/lib/validator.js create mode 100644 node_modules/@babel/helper-validator-option/lib/validator.js.map create mode 100644 node_modules/@babel/helper-validator-option/package.json create mode 100644 node_modules/@babel/helpers/LICENSE create mode 100644 node_modules/@babel/helpers/README.md create mode 100644 node_modules/@babel/helpers/lib/helpers-generated.js create mode 100644 node_modules/@babel/helpers/lib/helpers-generated.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/AwaitValue.js create mode 100644 node_modules/@babel/helpers/lib/helpers/AwaitValue.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/OverloadYield.js create mode 100644 node_modules/@babel/helpers/lib/helpers/OverloadYield.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/applyDecoratedDescriptor.js create mode 100644 node_modules/@babel/helpers/lib/helpers/applyDecoratedDescriptor.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/applyDecs.js create mode 100644 node_modules/@babel/helpers/lib/helpers/applyDecs.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/applyDecs2203.js create mode 100644 node_modules/@babel/helpers/lib/helpers/applyDecs2203.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/applyDecs2203R.js create mode 100644 node_modules/@babel/helpers/lib/helpers/applyDecs2203R.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/applyDecs2301.js create mode 100644 node_modules/@babel/helpers/lib/helpers/applyDecs2301.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/applyDecs2305.js create mode 100644 node_modules/@babel/helpers/lib/helpers/applyDecs2305.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/applyDecs2311.js create mode 100644 node_modules/@babel/helpers/lib/helpers/applyDecs2311.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/arrayLikeToArray.js create mode 100644 node_modules/@babel/helpers/lib/helpers/arrayLikeToArray.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/arrayWithHoles.js create mode 100644 node_modules/@babel/helpers/lib/helpers/arrayWithHoles.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/arrayWithoutHoles.js create mode 100644 node_modules/@babel/helpers/lib/helpers/arrayWithoutHoles.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/assertClassBrand.js create mode 100644 node_modules/@babel/helpers/lib/helpers/assertClassBrand.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/assertThisInitialized.js create mode 100644 node_modules/@babel/helpers/lib/helpers/assertThisInitialized.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/asyncGeneratorDelegate.js create mode 100644 node_modules/@babel/helpers/lib/helpers/asyncGeneratorDelegate.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/asyncIterator.js create mode 100644 node_modules/@babel/helpers/lib/helpers/asyncIterator.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/asyncToGenerator.js create mode 100644 node_modules/@babel/helpers/lib/helpers/asyncToGenerator.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/awaitAsyncGenerator.js create mode 100644 node_modules/@babel/helpers/lib/helpers/awaitAsyncGenerator.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/callSuper.js create mode 100644 node_modules/@babel/helpers/lib/helpers/callSuper.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/checkInRHS.js create mode 100644 node_modules/@babel/helpers/lib/helpers/checkInRHS.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/checkPrivateRedeclaration.js create mode 100644 node_modules/@babel/helpers/lib/helpers/checkPrivateRedeclaration.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classApplyDescriptorDestructureSet.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classApplyDescriptorDestructureSet.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classApplyDescriptorGet.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classApplyDescriptorGet.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classApplyDescriptorSet.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classApplyDescriptorSet.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classCallCheck.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classCallCheck.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classCheckPrivateStaticAccess.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classCheckPrivateStaticAccess.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classCheckPrivateStaticFieldDescriptor.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classCheckPrivateStaticFieldDescriptor.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classExtractFieldDescriptor.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classExtractFieldDescriptor.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classNameTDZError.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classNameTDZError.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateFieldDestructureSet.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateFieldDestructureSet.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateFieldGet.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateFieldGet.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateFieldGet2.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateFieldGet2.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateFieldInitSpec.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateFieldInitSpec.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateFieldLooseBase.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateFieldLooseBase.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateFieldLooseKey.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateFieldLooseKey.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateFieldSet.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateFieldSet.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateFieldSet2.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateFieldSet2.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateGetter.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateGetter.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateMethodGet.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateMethodGet.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateMethodInitSpec.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateMethodInitSpec.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateMethodSet.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateMethodSet.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateSetter.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classPrivateSetter.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classStaticPrivateFieldDestructureSet.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classStaticPrivateFieldDestructureSet.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classStaticPrivateFieldSpecGet.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classStaticPrivateFieldSpecGet.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classStaticPrivateFieldSpecSet.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classStaticPrivateFieldSpecSet.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classStaticPrivateMethodGet.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classStaticPrivateMethodGet.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/classStaticPrivateMethodSet.js create mode 100644 node_modules/@babel/helpers/lib/helpers/classStaticPrivateMethodSet.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/construct.js create mode 100644 node_modules/@babel/helpers/lib/helpers/construct.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/createClass.js create mode 100644 node_modules/@babel/helpers/lib/helpers/createClass.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/createForOfIteratorHelper.js create mode 100644 node_modules/@babel/helpers/lib/helpers/createForOfIteratorHelper.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/createForOfIteratorHelperLoose.js create mode 100644 node_modules/@babel/helpers/lib/helpers/createForOfIteratorHelperLoose.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/createSuper.js create mode 100644 node_modules/@babel/helpers/lib/helpers/createSuper.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/decorate.js create mode 100644 node_modules/@babel/helpers/lib/helpers/decorate.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/defaults.js create mode 100644 node_modules/@babel/helpers/lib/helpers/defaults.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/defineAccessor.js create mode 100644 node_modules/@babel/helpers/lib/helpers/defineAccessor.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/defineEnumerableProperties.js create mode 100644 node_modules/@babel/helpers/lib/helpers/defineEnumerableProperties.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/defineProperty.js create mode 100644 node_modules/@babel/helpers/lib/helpers/defineProperty.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/dispose.js create mode 100644 node_modules/@babel/helpers/lib/helpers/dispose.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/extends.js create mode 100644 node_modules/@babel/helpers/lib/helpers/extends.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/get.js create mode 100644 node_modules/@babel/helpers/lib/helpers/get.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/getPrototypeOf.js create mode 100644 node_modules/@babel/helpers/lib/helpers/getPrototypeOf.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/identity.js create mode 100644 node_modules/@babel/helpers/lib/helpers/identity.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/importDeferProxy.js create mode 100644 node_modules/@babel/helpers/lib/helpers/importDeferProxy.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/inherits.js create mode 100644 node_modules/@babel/helpers/lib/helpers/inherits.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/inheritsLoose.js create mode 100644 node_modules/@babel/helpers/lib/helpers/inheritsLoose.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/initializerDefineProperty.js create mode 100644 node_modules/@babel/helpers/lib/helpers/initializerDefineProperty.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/initializerWarningHelper.js create mode 100644 node_modules/@babel/helpers/lib/helpers/initializerWarningHelper.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/instanceof.js create mode 100644 node_modules/@babel/helpers/lib/helpers/instanceof.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/interopRequireDefault.js create mode 100644 node_modules/@babel/helpers/lib/helpers/interopRequireDefault.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/interopRequireWildcard.js create mode 100644 node_modules/@babel/helpers/lib/helpers/interopRequireWildcard.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/isNativeFunction.js create mode 100644 node_modules/@babel/helpers/lib/helpers/isNativeFunction.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/isNativeReflectConstruct.js create mode 100644 node_modules/@babel/helpers/lib/helpers/isNativeReflectConstruct.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/iterableToArray.js create mode 100644 node_modules/@babel/helpers/lib/helpers/iterableToArray.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/iterableToArrayLimit.js create mode 100644 node_modules/@babel/helpers/lib/helpers/iterableToArrayLimit.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/jsx.js create mode 100644 node_modules/@babel/helpers/lib/helpers/jsx.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/maybeArrayLike.js create mode 100644 node_modules/@babel/helpers/lib/helpers/maybeArrayLike.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/newArrowCheck.js create mode 100644 node_modules/@babel/helpers/lib/helpers/newArrowCheck.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/nonIterableRest.js create mode 100644 node_modules/@babel/helpers/lib/helpers/nonIterableRest.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/nonIterableSpread.js create mode 100644 node_modules/@babel/helpers/lib/helpers/nonIterableSpread.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/nullishReceiverError.js create mode 100644 node_modules/@babel/helpers/lib/helpers/nullishReceiverError.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/objectDestructuringEmpty.js create mode 100644 node_modules/@babel/helpers/lib/helpers/objectDestructuringEmpty.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/objectSpread.js create mode 100644 node_modules/@babel/helpers/lib/helpers/objectSpread.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/objectSpread2.js create mode 100644 node_modules/@babel/helpers/lib/helpers/objectSpread2.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/objectWithoutProperties.js create mode 100644 node_modules/@babel/helpers/lib/helpers/objectWithoutProperties.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/objectWithoutPropertiesLoose.js create mode 100644 node_modules/@babel/helpers/lib/helpers/objectWithoutPropertiesLoose.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/possibleConstructorReturn.js create mode 100644 node_modules/@babel/helpers/lib/helpers/possibleConstructorReturn.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/readOnlyError.js create mode 100644 node_modules/@babel/helpers/lib/helpers/readOnlyError.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/regenerator.js create mode 100644 node_modules/@babel/helpers/lib/helpers/regenerator.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/regeneratorAsync.js create mode 100644 node_modules/@babel/helpers/lib/helpers/regeneratorAsync.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/regeneratorAsyncGen.js create mode 100644 node_modules/@babel/helpers/lib/helpers/regeneratorAsyncGen.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/regeneratorAsyncIterator.js create mode 100644 node_modules/@babel/helpers/lib/helpers/regeneratorAsyncIterator.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/regeneratorDefine.js create mode 100644 node_modules/@babel/helpers/lib/helpers/regeneratorDefine.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/regeneratorKeys.js create mode 100644 node_modules/@babel/helpers/lib/helpers/regeneratorKeys.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/regeneratorRuntime.js create mode 100644 node_modules/@babel/helpers/lib/helpers/regeneratorRuntime.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/regeneratorValues.js create mode 100644 node_modules/@babel/helpers/lib/helpers/regeneratorValues.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/set.js create mode 100644 node_modules/@babel/helpers/lib/helpers/set.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/setFunctionName.js create mode 100644 node_modules/@babel/helpers/lib/helpers/setFunctionName.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/setPrototypeOf.js create mode 100644 node_modules/@babel/helpers/lib/helpers/setPrototypeOf.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/skipFirstGeneratorNext.js create mode 100644 node_modules/@babel/helpers/lib/helpers/skipFirstGeneratorNext.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/slicedToArray.js create mode 100644 node_modules/@babel/helpers/lib/helpers/slicedToArray.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/superPropBase.js create mode 100644 node_modules/@babel/helpers/lib/helpers/superPropBase.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/superPropGet.js create mode 100644 node_modules/@babel/helpers/lib/helpers/superPropGet.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/superPropSet.js create mode 100644 node_modules/@babel/helpers/lib/helpers/superPropSet.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/taggedTemplateLiteral.js create mode 100644 node_modules/@babel/helpers/lib/helpers/taggedTemplateLiteral.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/taggedTemplateLiteralLoose.js create mode 100644 node_modules/@babel/helpers/lib/helpers/taggedTemplateLiteralLoose.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/tdz.js create mode 100644 node_modules/@babel/helpers/lib/helpers/tdz.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/temporalRef.js create mode 100644 node_modules/@babel/helpers/lib/helpers/temporalRef.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/temporalUndefined.js create mode 100644 node_modules/@babel/helpers/lib/helpers/temporalUndefined.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/toArray.js create mode 100644 node_modules/@babel/helpers/lib/helpers/toArray.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/toConsumableArray.js create mode 100644 node_modules/@babel/helpers/lib/helpers/toConsumableArray.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/toPrimitive.js create mode 100644 node_modules/@babel/helpers/lib/helpers/toPrimitive.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/toPropertyKey.js create mode 100644 node_modules/@babel/helpers/lib/helpers/toPropertyKey.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/toSetter.js create mode 100644 node_modules/@babel/helpers/lib/helpers/toSetter.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/tsRewriteRelativeImportExtensions.js create mode 100644 node_modules/@babel/helpers/lib/helpers/tsRewriteRelativeImportExtensions.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/typeof.js create mode 100644 node_modules/@babel/helpers/lib/helpers/typeof.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/unsupportedIterableToArray.js create mode 100644 node_modules/@babel/helpers/lib/helpers/unsupportedIterableToArray.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/using.js create mode 100644 node_modules/@babel/helpers/lib/helpers/using.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/usingCtx.js create mode 100644 node_modules/@babel/helpers/lib/helpers/usingCtx.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/wrapAsyncGenerator.js create mode 100644 node_modules/@babel/helpers/lib/helpers/wrapAsyncGenerator.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/wrapNativeSuper.js create mode 100644 node_modules/@babel/helpers/lib/helpers/wrapNativeSuper.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/wrapRegExp.js create mode 100644 node_modules/@babel/helpers/lib/helpers/wrapRegExp.js.map create mode 100644 node_modules/@babel/helpers/lib/helpers/writeOnlyError.js create mode 100644 node_modules/@babel/helpers/lib/helpers/writeOnlyError.js.map create mode 100644 node_modules/@babel/helpers/lib/index.js create mode 100644 node_modules/@babel/helpers/lib/index.js.map create mode 100644 node_modules/@babel/helpers/package.json create mode 100644 node_modules/@babel/parser/CHANGELOG.md create mode 100644 node_modules/@babel/parser/LICENSE create mode 100644 node_modules/@babel/parser/README.md create mode 100755 node_modules/@babel/parser/bin/babel-parser.js create mode 100644 node_modules/@babel/parser/lib/index.js create mode 100644 node_modules/@babel/parser/lib/index.js.map create mode 100644 node_modules/@babel/parser/package.json create mode 100644 node_modules/@babel/parser/typings/babel-parser.d.ts create mode 100644 node_modules/@babel/plugin-syntax-async-generators/LICENSE create mode 100644 node_modules/@babel/plugin-syntax-async-generators/README.md create mode 100644 node_modules/@babel/plugin-syntax-async-generators/lib/index.js create mode 100644 node_modules/@babel/plugin-syntax-async-generators/package.json create mode 100644 node_modules/@babel/plugin-syntax-bigint/LICENSE create mode 100644 node_modules/@babel/plugin-syntax-bigint/README.md create mode 100644 node_modules/@babel/plugin-syntax-bigint/lib/index.js create mode 100644 node_modules/@babel/plugin-syntax-bigint/package.json create mode 100644 node_modules/@babel/plugin-syntax-class-properties/LICENSE create mode 100644 node_modules/@babel/plugin-syntax-class-properties/README.md create mode 100644 node_modules/@babel/plugin-syntax-class-properties/lib/index.js create mode 100644 node_modules/@babel/plugin-syntax-class-properties/package.json create mode 100644 node_modules/@babel/plugin-syntax-class-static-block/LICENSE create mode 100644 node_modules/@babel/plugin-syntax-class-static-block/README.md create mode 100644 node_modules/@babel/plugin-syntax-class-static-block/lib/index.js create mode 100644 node_modules/@babel/plugin-syntax-class-static-block/package.json create mode 100644 node_modules/@babel/plugin-syntax-import-attributes/LICENSE create mode 100644 node_modules/@babel/plugin-syntax-import-attributes/README.md create mode 100644 node_modules/@babel/plugin-syntax-import-attributes/lib/index.js create mode 100644 node_modules/@babel/plugin-syntax-import-attributes/lib/index.js.map create mode 100644 node_modules/@babel/plugin-syntax-import-attributes/package.json create mode 100644 node_modules/@babel/plugin-syntax-import-meta/LICENSE create mode 100644 node_modules/@babel/plugin-syntax-import-meta/README.md create mode 100644 node_modules/@babel/plugin-syntax-import-meta/lib/index.js create mode 100644 node_modules/@babel/plugin-syntax-import-meta/package.json create mode 100644 node_modules/@babel/plugin-syntax-json-strings/LICENSE create mode 100644 node_modules/@babel/plugin-syntax-json-strings/README.md create mode 100644 node_modules/@babel/plugin-syntax-json-strings/lib/index.js create mode 100644 node_modules/@babel/plugin-syntax-json-strings/package.json create mode 100644 node_modules/@babel/plugin-syntax-jsx/LICENSE create mode 100644 node_modules/@babel/plugin-syntax-jsx/README.md create mode 100644 node_modules/@babel/plugin-syntax-jsx/lib/index.js create mode 100644 node_modules/@babel/plugin-syntax-jsx/lib/index.js.map create mode 100644 node_modules/@babel/plugin-syntax-jsx/package.json create mode 100644 node_modules/@babel/plugin-syntax-logical-assignment-operators/LICENSE create mode 100644 node_modules/@babel/plugin-syntax-logical-assignment-operators/README.md create mode 100644 node_modules/@babel/plugin-syntax-logical-assignment-operators/lib/index.js create mode 100644 node_modules/@babel/plugin-syntax-logical-assignment-operators/package.json create mode 100644 node_modules/@babel/plugin-syntax-nullish-coalescing-operator/LICENSE create mode 100644 node_modules/@babel/plugin-syntax-nullish-coalescing-operator/README.md create mode 100644 node_modules/@babel/plugin-syntax-nullish-coalescing-operator/lib/index.js create mode 100644 node_modules/@babel/plugin-syntax-nullish-coalescing-operator/package.json create mode 100644 node_modules/@babel/plugin-syntax-numeric-separator/LICENSE create mode 100644 node_modules/@babel/plugin-syntax-numeric-separator/README.md create mode 100644 node_modules/@babel/plugin-syntax-numeric-separator/lib/index.js create mode 100644 node_modules/@babel/plugin-syntax-numeric-separator/package.json create mode 100644 node_modules/@babel/plugin-syntax-object-rest-spread/LICENSE create mode 100644 node_modules/@babel/plugin-syntax-object-rest-spread/README.md create mode 100644 node_modules/@babel/plugin-syntax-object-rest-spread/lib/index.js create mode 100644 node_modules/@babel/plugin-syntax-object-rest-spread/package.json create mode 100644 node_modules/@babel/plugin-syntax-optional-catch-binding/LICENSE create mode 100644 node_modules/@babel/plugin-syntax-optional-catch-binding/README.md create mode 100644 node_modules/@babel/plugin-syntax-optional-catch-binding/lib/index.js create mode 100644 node_modules/@babel/plugin-syntax-optional-catch-binding/package.json create mode 100644 node_modules/@babel/plugin-syntax-optional-chaining/LICENSE create mode 100644 node_modules/@babel/plugin-syntax-optional-chaining/README.md create mode 100644 node_modules/@babel/plugin-syntax-optional-chaining/lib/index.js create mode 100644 node_modules/@babel/plugin-syntax-optional-chaining/package.json create mode 100644 node_modules/@babel/plugin-syntax-private-property-in-object/LICENSE create mode 100644 node_modules/@babel/plugin-syntax-private-property-in-object/README.md create mode 100644 node_modules/@babel/plugin-syntax-private-property-in-object/lib/index.js create mode 100644 node_modules/@babel/plugin-syntax-private-property-in-object/package.json create mode 100644 node_modules/@babel/plugin-syntax-top-level-await/LICENSE create mode 100644 node_modules/@babel/plugin-syntax-top-level-await/README.md create mode 100644 node_modules/@babel/plugin-syntax-top-level-await/lib/index.js create mode 100644 node_modules/@babel/plugin-syntax-top-level-await/package.json create mode 100644 node_modules/@babel/plugin-syntax-typescript/LICENSE create mode 100644 node_modules/@babel/plugin-syntax-typescript/README.md create mode 100644 node_modules/@babel/plugin-syntax-typescript/lib/index.js create mode 100644 node_modules/@babel/plugin-syntax-typescript/lib/index.js.map create mode 100644 node_modules/@babel/plugin-syntax-typescript/package.json create mode 100644 node_modules/@babel/template/LICENSE create mode 100644 node_modules/@babel/template/README.md create mode 100644 node_modules/@babel/template/lib/builder.js create mode 100644 node_modules/@babel/template/lib/builder.js.map create mode 100644 node_modules/@babel/template/lib/formatters.js create mode 100644 node_modules/@babel/template/lib/formatters.js.map create mode 100644 node_modules/@babel/template/lib/index.js create mode 100644 node_modules/@babel/template/lib/index.js.map create mode 100644 node_modules/@babel/template/lib/literal.js create mode 100644 node_modules/@babel/template/lib/literal.js.map create mode 100644 node_modules/@babel/template/lib/options.js create mode 100644 node_modules/@babel/template/lib/options.js.map create mode 100644 node_modules/@babel/template/lib/parse.js create mode 100644 node_modules/@babel/template/lib/parse.js.map create mode 100644 node_modules/@babel/template/lib/populate.js create mode 100644 node_modules/@babel/template/lib/populate.js.map create mode 100644 node_modules/@babel/template/lib/string.js create mode 100644 node_modules/@babel/template/lib/string.js.map create mode 100644 node_modules/@babel/template/package.json create mode 100644 node_modules/@babel/traverse/LICENSE create mode 100644 node_modules/@babel/traverse/README.md create mode 100644 node_modules/@babel/traverse/lib/cache.js create mode 100644 node_modules/@babel/traverse/lib/cache.js.map create mode 100644 node_modules/@babel/traverse/lib/context.js create mode 100644 node_modules/@babel/traverse/lib/context.js.map create mode 100644 node_modules/@babel/traverse/lib/hub.js create mode 100644 node_modules/@babel/traverse/lib/hub.js.map create mode 100644 node_modules/@babel/traverse/lib/index.js create mode 100644 node_modules/@babel/traverse/lib/index.js.map create mode 100644 node_modules/@babel/traverse/lib/path/ancestry.js create mode 100644 node_modules/@babel/traverse/lib/path/ancestry.js.map create mode 100644 node_modules/@babel/traverse/lib/path/comments.js create mode 100644 node_modules/@babel/traverse/lib/path/comments.js.map create mode 100644 node_modules/@babel/traverse/lib/path/context.js create mode 100644 node_modules/@babel/traverse/lib/path/context.js.map create mode 100644 node_modules/@babel/traverse/lib/path/conversion.js create mode 100644 node_modules/@babel/traverse/lib/path/conversion.js.map create mode 100644 node_modules/@babel/traverse/lib/path/evaluation.js create mode 100644 node_modules/@babel/traverse/lib/path/evaluation.js.map create mode 100644 node_modules/@babel/traverse/lib/path/family.js create mode 100644 node_modules/@babel/traverse/lib/path/family.js.map create mode 100644 node_modules/@babel/traverse/lib/path/index.js create mode 100644 node_modules/@babel/traverse/lib/path/index.js.map create mode 100644 node_modules/@babel/traverse/lib/path/inference/index.js create mode 100644 node_modules/@babel/traverse/lib/path/inference/index.js.map create mode 100644 node_modules/@babel/traverse/lib/path/inference/inferer-reference.js create mode 100644 node_modules/@babel/traverse/lib/path/inference/inferer-reference.js.map create mode 100644 node_modules/@babel/traverse/lib/path/inference/inferers.js create mode 100644 node_modules/@babel/traverse/lib/path/inference/inferers.js.map create mode 100644 node_modules/@babel/traverse/lib/path/inference/util.js create mode 100644 node_modules/@babel/traverse/lib/path/inference/util.js.map create mode 100644 node_modules/@babel/traverse/lib/path/introspection.js create mode 100644 node_modules/@babel/traverse/lib/path/introspection.js.map create mode 100644 node_modules/@babel/traverse/lib/path/lib/hoister.js create mode 100644 node_modules/@babel/traverse/lib/path/lib/hoister.js.map create mode 100644 node_modules/@babel/traverse/lib/path/lib/removal-hooks.js create mode 100644 node_modules/@babel/traverse/lib/path/lib/removal-hooks.js.map create mode 100644 node_modules/@babel/traverse/lib/path/lib/virtual-types-validator.js create mode 100644 node_modules/@babel/traverse/lib/path/lib/virtual-types-validator.js.map create mode 100644 node_modules/@babel/traverse/lib/path/lib/virtual-types.js create mode 100644 node_modules/@babel/traverse/lib/path/lib/virtual-types.js.map create mode 100644 node_modules/@babel/traverse/lib/path/modification.js create mode 100644 node_modules/@babel/traverse/lib/path/modification.js.map create mode 100644 node_modules/@babel/traverse/lib/path/removal.js create mode 100644 node_modules/@babel/traverse/lib/path/removal.js.map create mode 100644 node_modules/@babel/traverse/lib/path/replacement.js create mode 100644 node_modules/@babel/traverse/lib/path/replacement.js.map create mode 100644 node_modules/@babel/traverse/lib/scope/binding.js create mode 100644 node_modules/@babel/traverse/lib/scope/binding.js.map create mode 100644 node_modules/@babel/traverse/lib/scope/index.js create mode 100644 node_modules/@babel/traverse/lib/scope/index.js.map create mode 100644 node_modules/@babel/traverse/lib/scope/lib/renamer.js create mode 100644 node_modules/@babel/traverse/lib/scope/lib/renamer.js.map create mode 100644 node_modules/@babel/traverse/lib/traverse-node.js create mode 100644 node_modules/@babel/traverse/lib/traverse-node.js.map create mode 100644 node_modules/@babel/traverse/lib/types.js create mode 100644 node_modules/@babel/traverse/lib/types.js.map create mode 100644 node_modules/@babel/traverse/lib/visitors.js create mode 100644 node_modules/@babel/traverse/lib/visitors.js.map create mode 100644 node_modules/@babel/traverse/package.json create mode 100644 node_modules/@babel/types/LICENSE create mode 100644 node_modules/@babel/types/README.md create mode 100644 node_modules/@babel/types/lib/asserts/assertNode.js create mode 100644 node_modules/@babel/types/lib/asserts/assertNode.js.map create mode 100644 node_modules/@babel/types/lib/asserts/generated/index.js create mode 100644 node_modules/@babel/types/lib/asserts/generated/index.js.map create mode 100644 node_modules/@babel/types/lib/ast-types/generated/index.js create mode 100644 node_modules/@babel/types/lib/ast-types/generated/index.js.map create mode 100644 node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js create mode 100644 node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js.map create mode 100644 node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js create mode 100644 node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js.map create mode 100644 node_modules/@babel/types/lib/builders/generated/index.js create mode 100644 node_modules/@babel/types/lib/builders/generated/index.js.map create mode 100644 node_modules/@babel/types/lib/builders/generated/lowercase.js create mode 100644 node_modules/@babel/types/lib/builders/generated/lowercase.js.map create mode 100644 node_modules/@babel/types/lib/builders/generated/uppercase.js create mode 100644 node_modules/@babel/types/lib/builders/generated/uppercase.js.map create mode 100644 node_modules/@babel/types/lib/builders/productions.js create mode 100644 node_modules/@babel/types/lib/builders/productions.js.map create mode 100644 node_modules/@babel/types/lib/builders/react/buildChildren.js create mode 100644 node_modules/@babel/types/lib/builders/react/buildChildren.js.map create mode 100644 node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js create mode 100644 node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js.map create mode 100644 node_modules/@babel/types/lib/builders/validateNode.js create mode 100644 node_modules/@babel/types/lib/builders/validateNode.js.map create mode 100644 node_modules/@babel/types/lib/clone/clone.js create mode 100644 node_modules/@babel/types/lib/clone/clone.js.map create mode 100644 node_modules/@babel/types/lib/clone/cloneDeep.js create mode 100644 node_modules/@babel/types/lib/clone/cloneDeep.js.map create mode 100644 node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js create mode 100644 node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js.map create mode 100644 node_modules/@babel/types/lib/clone/cloneNode.js create mode 100644 node_modules/@babel/types/lib/clone/cloneNode.js.map create mode 100644 node_modules/@babel/types/lib/clone/cloneWithoutLoc.js create mode 100644 node_modules/@babel/types/lib/clone/cloneWithoutLoc.js.map create mode 100644 node_modules/@babel/types/lib/comments/addComment.js create mode 100644 node_modules/@babel/types/lib/comments/addComment.js.map create mode 100644 node_modules/@babel/types/lib/comments/addComments.js create mode 100644 node_modules/@babel/types/lib/comments/addComments.js.map create mode 100644 node_modules/@babel/types/lib/comments/inheritInnerComments.js create mode 100644 node_modules/@babel/types/lib/comments/inheritInnerComments.js.map create mode 100644 node_modules/@babel/types/lib/comments/inheritLeadingComments.js create mode 100644 node_modules/@babel/types/lib/comments/inheritLeadingComments.js.map create mode 100644 node_modules/@babel/types/lib/comments/inheritTrailingComments.js create mode 100644 node_modules/@babel/types/lib/comments/inheritTrailingComments.js.map create mode 100644 node_modules/@babel/types/lib/comments/inheritsComments.js create mode 100644 node_modules/@babel/types/lib/comments/inheritsComments.js.map create mode 100644 node_modules/@babel/types/lib/comments/removeComments.js create mode 100644 node_modules/@babel/types/lib/comments/removeComments.js.map create mode 100644 node_modules/@babel/types/lib/constants/generated/index.js create mode 100644 node_modules/@babel/types/lib/constants/generated/index.js.map create mode 100644 node_modules/@babel/types/lib/constants/index.js create mode 100644 node_modules/@babel/types/lib/constants/index.js.map create mode 100644 node_modules/@babel/types/lib/converters/ensureBlock.js create mode 100644 node_modules/@babel/types/lib/converters/ensureBlock.js.map create mode 100644 node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js create mode 100644 node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js.map create mode 100644 node_modules/@babel/types/lib/converters/toBindingIdentifierName.js create mode 100644 node_modules/@babel/types/lib/converters/toBindingIdentifierName.js.map create mode 100644 node_modules/@babel/types/lib/converters/toBlock.js create mode 100644 node_modules/@babel/types/lib/converters/toBlock.js.map create mode 100644 node_modules/@babel/types/lib/converters/toComputedKey.js create mode 100644 node_modules/@babel/types/lib/converters/toComputedKey.js.map create mode 100644 node_modules/@babel/types/lib/converters/toExpression.js create mode 100644 node_modules/@babel/types/lib/converters/toExpression.js.map create mode 100644 node_modules/@babel/types/lib/converters/toIdentifier.js create mode 100644 node_modules/@babel/types/lib/converters/toIdentifier.js.map create mode 100644 node_modules/@babel/types/lib/converters/toKeyAlias.js create mode 100644 node_modules/@babel/types/lib/converters/toKeyAlias.js.map create mode 100644 node_modules/@babel/types/lib/converters/toSequenceExpression.js create mode 100644 node_modules/@babel/types/lib/converters/toSequenceExpression.js.map create mode 100644 node_modules/@babel/types/lib/converters/toStatement.js create mode 100644 node_modules/@babel/types/lib/converters/toStatement.js.map create mode 100644 node_modules/@babel/types/lib/converters/valueToNode.js create mode 100644 node_modules/@babel/types/lib/converters/valueToNode.js.map create mode 100644 node_modules/@babel/types/lib/definitions/core.js create mode 100644 node_modules/@babel/types/lib/definitions/core.js.map create mode 100644 node_modules/@babel/types/lib/definitions/deprecated-aliases.js create mode 100644 node_modules/@babel/types/lib/definitions/deprecated-aliases.js.map create mode 100644 node_modules/@babel/types/lib/definitions/experimental.js create mode 100644 node_modules/@babel/types/lib/definitions/experimental.js.map create mode 100644 node_modules/@babel/types/lib/definitions/flow.js create mode 100644 node_modules/@babel/types/lib/definitions/flow.js.map create mode 100644 node_modules/@babel/types/lib/definitions/index.js create mode 100644 node_modules/@babel/types/lib/definitions/index.js.map create mode 100644 node_modules/@babel/types/lib/definitions/jsx.js create mode 100644 node_modules/@babel/types/lib/definitions/jsx.js.map create mode 100644 node_modules/@babel/types/lib/definitions/misc.js create mode 100644 node_modules/@babel/types/lib/definitions/misc.js.map create mode 100644 node_modules/@babel/types/lib/definitions/placeholders.js create mode 100644 node_modules/@babel/types/lib/definitions/placeholders.js.map create mode 100644 node_modules/@babel/types/lib/definitions/typescript.js create mode 100644 node_modules/@babel/types/lib/definitions/typescript.js.map create mode 100644 node_modules/@babel/types/lib/definitions/utils.js create mode 100644 node_modules/@babel/types/lib/definitions/utils.js.map create mode 100644 node_modules/@babel/types/lib/index-legacy.d.ts create mode 100644 node_modules/@babel/types/lib/index.d.ts create mode 100644 node_modules/@babel/types/lib/index.js create mode 100644 node_modules/@babel/types/lib/index.js.flow create mode 100644 node_modules/@babel/types/lib/index.js.map create mode 100644 node_modules/@babel/types/lib/modifications/appendToMemberExpression.js create mode 100644 node_modules/@babel/types/lib/modifications/appendToMemberExpression.js.map create mode 100644 node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js create mode 100644 node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js.map create mode 100644 node_modules/@babel/types/lib/modifications/inherits.js create mode 100644 node_modules/@babel/types/lib/modifications/inherits.js.map create mode 100644 node_modules/@babel/types/lib/modifications/prependToMemberExpression.js create mode 100644 node_modules/@babel/types/lib/modifications/prependToMemberExpression.js.map create mode 100644 node_modules/@babel/types/lib/modifications/removeProperties.js create mode 100644 node_modules/@babel/types/lib/modifications/removeProperties.js.map create mode 100644 node_modules/@babel/types/lib/modifications/removePropertiesDeep.js create mode 100644 node_modules/@babel/types/lib/modifications/removePropertiesDeep.js.map create mode 100644 node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js create mode 100644 node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js.map create mode 100644 node_modules/@babel/types/lib/retrievers/getAssignmentIdentifiers.js create mode 100644 node_modules/@babel/types/lib/retrievers/getAssignmentIdentifiers.js.map create mode 100644 node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js create mode 100644 node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js.map create mode 100644 node_modules/@babel/types/lib/retrievers/getFunctionName.js create mode 100644 node_modules/@babel/types/lib/retrievers/getFunctionName.js.map create mode 100644 node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js create mode 100644 node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js.map create mode 100644 node_modules/@babel/types/lib/traverse/traverse.js create mode 100644 node_modules/@babel/types/lib/traverse/traverse.js.map create mode 100644 node_modules/@babel/types/lib/traverse/traverseFast.js create mode 100644 node_modules/@babel/types/lib/traverse/traverseFast.js.map create mode 100644 node_modules/@babel/types/lib/utils/deprecationWarning.js create mode 100644 node_modules/@babel/types/lib/utils/deprecationWarning.js.map create mode 100644 node_modules/@babel/types/lib/utils/inherit.js create mode 100644 node_modules/@babel/types/lib/utils/inherit.js.map create mode 100644 node_modules/@babel/types/lib/utils/react/cleanJSXElementLiteralChild.js create mode 100644 node_modules/@babel/types/lib/utils/react/cleanJSXElementLiteralChild.js.map create mode 100644 node_modules/@babel/types/lib/utils/shallowEqual.js create mode 100644 node_modules/@babel/types/lib/utils/shallowEqual.js.map create mode 100644 node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js create mode 100644 node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js.map create mode 100644 node_modules/@babel/types/lib/validators/generated/index.js create mode 100644 node_modules/@babel/types/lib/validators/generated/index.js.map create mode 100644 node_modules/@babel/types/lib/validators/is.js create mode 100644 node_modules/@babel/types/lib/validators/is.js.map create mode 100644 node_modules/@babel/types/lib/validators/isBinding.js create mode 100644 node_modules/@babel/types/lib/validators/isBinding.js.map create mode 100644 node_modules/@babel/types/lib/validators/isBlockScoped.js create mode 100644 node_modules/@babel/types/lib/validators/isBlockScoped.js.map create mode 100644 node_modules/@babel/types/lib/validators/isImmutable.js create mode 100644 node_modules/@babel/types/lib/validators/isImmutable.js.map create mode 100644 node_modules/@babel/types/lib/validators/isLet.js create mode 100644 node_modules/@babel/types/lib/validators/isLet.js.map create mode 100644 node_modules/@babel/types/lib/validators/isNode.js create mode 100644 node_modules/@babel/types/lib/validators/isNode.js.map create mode 100644 node_modules/@babel/types/lib/validators/isNodesEquivalent.js create mode 100644 node_modules/@babel/types/lib/validators/isNodesEquivalent.js.map create mode 100644 node_modules/@babel/types/lib/validators/isPlaceholderType.js create mode 100644 node_modules/@babel/types/lib/validators/isPlaceholderType.js.map create mode 100644 node_modules/@babel/types/lib/validators/isReferenced.js create mode 100644 node_modules/@babel/types/lib/validators/isReferenced.js.map create mode 100644 node_modules/@babel/types/lib/validators/isScope.js create mode 100644 node_modules/@babel/types/lib/validators/isScope.js.map create mode 100644 node_modules/@babel/types/lib/validators/isSpecifierDefault.js create mode 100644 node_modules/@babel/types/lib/validators/isSpecifierDefault.js.map create mode 100644 node_modules/@babel/types/lib/validators/isType.js create mode 100644 node_modules/@babel/types/lib/validators/isType.js.map create mode 100644 node_modules/@babel/types/lib/validators/isValidES3Identifier.js create mode 100644 node_modules/@babel/types/lib/validators/isValidES3Identifier.js.map create mode 100644 node_modules/@babel/types/lib/validators/isValidIdentifier.js create mode 100644 node_modules/@babel/types/lib/validators/isValidIdentifier.js.map create mode 100644 node_modules/@babel/types/lib/validators/isVar.js create mode 100644 node_modules/@babel/types/lib/validators/isVar.js.map create mode 100644 node_modules/@babel/types/lib/validators/matchesPattern.js create mode 100644 node_modules/@babel/types/lib/validators/matchesPattern.js.map create mode 100644 node_modules/@babel/types/lib/validators/react/isCompatTag.js create mode 100644 node_modules/@babel/types/lib/validators/react/isCompatTag.js.map create mode 100644 node_modules/@babel/types/lib/validators/react/isReactComponent.js create mode 100644 node_modules/@babel/types/lib/validators/react/isReactComponent.js.map create mode 100644 node_modules/@babel/types/lib/validators/validate.js create mode 100644 node_modules/@babel/types/lib/validators/validate.js.map create mode 100644 node_modules/@babel/types/package.json create mode 100644 node_modules/@bcoe/v8-coverage/.editorconfig create mode 100644 node_modules/@bcoe/v8-coverage/.gitattributes create mode 100644 node_modules/@bcoe/v8-coverage/CHANGELOG.md create mode 100644 node_modules/@bcoe/v8-coverage/LICENSE.md create mode 100644 node_modules/@bcoe/v8-coverage/LICENSE.txt create mode 100644 node_modules/@bcoe/v8-coverage/README.md create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/CHANGELOG.md create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/LICENSE.md create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/README.md create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/_src/ascii.ts create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/_src/clone.ts create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/_src/compare.ts create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/_src/index.ts create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/_src/merge.ts create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/_src/normalize.ts create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/_src/range-tree.ts create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/_src/types.ts create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/ascii.d.ts create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/ascii.js create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/ascii.mjs create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/clone.d.ts create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/clone.js create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/clone.mjs create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/compare.d.ts create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/compare.js create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/compare.mjs create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/index.d.ts create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/index.js create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/index.mjs create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/merge.d.ts create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/merge.js create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/merge.mjs create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/normalize.d.ts create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/normalize.js create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/normalize.mjs create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/package.json create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/range-tree.d.ts create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/range-tree.js create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/range-tree.mjs create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/tsconfig.json create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/types.d.ts create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/types.js create mode 100644 node_modules/@bcoe/v8-coverage/dist/lib/types.mjs create mode 100644 node_modules/@bcoe/v8-coverage/gulpfile.ts create mode 100644 node_modules/@bcoe/v8-coverage/package.json create mode 100644 node_modules/@bcoe/v8-coverage/src/lib/ascii.ts create mode 100644 node_modules/@bcoe/v8-coverage/src/lib/clone.ts create mode 100644 node_modules/@bcoe/v8-coverage/src/lib/compare.ts create mode 100644 node_modules/@bcoe/v8-coverage/src/lib/index.ts create mode 100644 node_modules/@bcoe/v8-coverage/src/lib/merge.ts create mode 100644 node_modules/@bcoe/v8-coverage/src/lib/normalize.ts create mode 100644 node_modules/@bcoe/v8-coverage/src/lib/range-tree.ts create mode 100644 node_modules/@bcoe/v8-coverage/src/lib/types.ts create mode 100644 node_modules/@bcoe/v8-coverage/src/test/merge.spec.ts create mode 100644 node_modules/@bcoe/v8-coverage/tsconfig.json create mode 100644 node_modules/@istanbuljs/load-nyc-config/CHANGELOG.md create mode 100644 node_modules/@istanbuljs/load-nyc-config/LICENSE create mode 100644 node_modules/@istanbuljs/load-nyc-config/README.md create mode 100644 node_modules/@istanbuljs/load-nyc-config/index.js create mode 100644 node_modules/@istanbuljs/load-nyc-config/load-esm.js create mode 100644 node_modules/@istanbuljs/load-nyc-config/package.json create mode 100644 node_modules/@istanbuljs/schema/CHANGELOG.md create mode 100644 node_modules/@istanbuljs/schema/LICENSE create mode 100644 node_modules/@istanbuljs/schema/README.md create mode 100644 node_modules/@istanbuljs/schema/default-exclude.js create mode 100644 node_modules/@istanbuljs/schema/default-extension.js create mode 100644 node_modules/@istanbuljs/schema/index.js create mode 100644 node_modules/@istanbuljs/schema/package.json create mode 100644 node_modules/@jest/console/LICENSE create mode 100644 node_modules/@jest/console/build/BufferedConsole.js create mode 100644 node_modules/@jest/console/build/CustomConsole.js create mode 100644 node_modules/@jest/console/build/NullConsole.js create mode 100644 node_modules/@jest/console/build/getConsoleOutput.js create mode 100644 node_modules/@jest/console/build/index.d.ts create mode 100644 node_modules/@jest/console/build/index.js create mode 100644 node_modules/@jest/console/build/types.js create mode 100644 node_modules/@jest/console/package.json create mode 100644 node_modules/@jest/core/LICENSE create mode 100644 node_modules/@jest/core/README.md create mode 100644 node_modules/@jest/core/build/FailedTestsCache.js create mode 100644 node_modules/@jest/core/build/FailedTestsInteractiveMode.js create mode 100644 node_modules/@jest/core/build/ReporterDispatcher.js create mode 100644 node_modules/@jest/core/build/SearchSource.js create mode 100644 node_modules/@jest/core/build/SnapshotInteractiveMode.js create mode 100644 node_modules/@jest/core/build/TestNamePatternPrompt.js create mode 100644 node_modules/@jest/core/build/TestPathPatternPrompt.js create mode 100644 node_modules/@jest/core/build/TestScheduler.js create mode 100644 node_modules/@jest/core/build/cli/index.js create mode 100644 node_modules/@jest/core/build/collectHandles.js create mode 100644 node_modules/@jest/core/build/getChangedFilesPromise.js create mode 100644 node_modules/@jest/core/build/getConfigsOfProjectsToRun.js create mode 100644 node_modules/@jest/core/build/getNoTestFound.js create mode 100644 node_modules/@jest/core/build/getNoTestFoundFailed.js create mode 100644 node_modules/@jest/core/build/getNoTestFoundPassWithNoTests.js create mode 100644 node_modules/@jest/core/build/getNoTestFoundRelatedToChangedFiles.js create mode 100644 node_modules/@jest/core/build/getNoTestFoundVerbose.js create mode 100644 node_modules/@jest/core/build/getNoTestsFoundMessage.js create mode 100644 node_modules/@jest/core/build/getProjectDisplayName.js create mode 100644 node_modules/@jest/core/build/getProjectNamesMissingWarning.js create mode 100644 node_modules/@jest/core/build/getSelectProjectsMessage.js create mode 100644 node_modules/@jest/core/build/index.d.ts create mode 100644 node_modules/@jest/core/build/index.js create mode 100644 node_modules/@jest/core/build/lib/activeFiltersMessage.js create mode 100644 node_modules/@jest/core/build/lib/createContext.js create mode 100644 node_modules/@jest/core/build/lib/handleDeprecationWarnings.js create mode 100644 node_modules/@jest/core/build/lib/isValidPath.js create mode 100644 node_modules/@jest/core/build/lib/logDebugMessages.js create mode 100644 node_modules/@jest/core/build/lib/updateGlobalConfig.js create mode 100644 node_modules/@jest/core/build/lib/watchPluginsHelpers.js create mode 100644 node_modules/@jest/core/build/plugins/FailedTestsInteractive.js create mode 100644 node_modules/@jest/core/build/plugins/Quit.js create mode 100644 node_modules/@jest/core/build/plugins/TestNamePattern.js create mode 100644 node_modules/@jest/core/build/plugins/TestPathPattern.js create mode 100644 node_modules/@jest/core/build/plugins/UpdateSnapshots.js create mode 100644 node_modules/@jest/core/build/plugins/UpdateSnapshotsInteractive.js create mode 100644 node_modules/@jest/core/build/runGlobalHook.js create mode 100644 node_modules/@jest/core/build/runJest.js create mode 100644 node_modules/@jest/core/build/testSchedulerHelper.js create mode 100644 node_modules/@jest/core/build/types.js create mode 100644 node_modules/@jest/core/build/version.js create mode 100644 node_modules/@jest/core/build/watch.js create mode 100644 node_modules/@jest/core/package.json create mode 100644 node_modules/@jest/environment/LICENSE create mode 100644 node_modules/@jest/environment/build/index.d.ts create mode 100644 node_modules/@jest/environment/build/index.js create mode 100644 node_modules/@jest/environment/package.json create mode 100644 node_modules/@jest/expect-utils/LICENSE create mode 100644 node_modules/@jest/expect-utils/README.md create mode 100644 node_modules/@jest/expect-utils/build/immutableUtils.js create mode 100644 node_modules/@jest/expect-utils/build/index.d.ts create mode 100644 node_modules/@jest/expect-utils/build/index.js create mode 100644 node_modules/@jest/expect-utils/build/jasmineUtils.js create mode 100644 node_modules/@jest/expect-utils/build/types.js create mode 100644 node_modules/@jest/expect-utils/build/utils.js create mode 100644 node_modules/@jest/expect-utils/package.json create mode 100644 node_modules/@jest/expect/LICENSE create mode 100644 node_modules/@jest/expect/README.md create mode 100644 node_modules/@jest/expect/build/index.d.ts create mode 100644 node_modules/@jest/expect/build/index.js create mode 100644 node_modules/@jest/expect/build/types.js create mode 100644 node_modules/@jest/expect/package.json create mode 100644 node_modules/@jest/fake-timers/LICENSE create mode 100644 node_modules/@jest/fake-timers/build/index.d.ts create mode 100644 node_modules/@jest/fake-timers/build/index.js create mode 100644 node_modules/@jest/fake-timers/build/legacyFakeTimers.js create mode 100644 node_modules/@jest/fake-timers/build/modernFakeTimers.js create mode 100644 node_modules/@jest/fake-timers/package.json create mode 100644 node_modules/@jest/globals/LICENSE create mode 100644 node_modules/@jest/globals/build/index.d.ts create mode 100644 node_modules/@jest/globals/build/index.js create mode 100644 node_modules/@jest/globals/package.json create mode 100644 node_modules/@jest/reporters/LICENSE create mode 100644 node_modules/@jest/reporters/assets/jest_logo.png create mode 100644 node_modules/@jest/reporters/build/BaseReporter.js create mode 100644 node_modules/@jest/reporters/build/CoverageReporter.js create mode 100644 node_modules/@jest/reporters/build/CoverageWorker.js create mode 100644 node_modules/@jest/reporters/build/DefaultReporter.js create mode 100644 node_modules/@jest/reporters/build/GitHubActionsReporter.js create mode 100644 node_modules/@jest/reporters/build/NotifyReporter.js create mode 100644 node_modules/@jest/reporters/build/Status.js create mode 100644 node_modules/@jest/reporters/build/SummaryReporter.js create mode 100644 node_modules/@jest/reporters/build/VerboseReporter.js create mode 100644 node_modules/@jest/reporters/build/formatTestPath.js create mode 100644 node_modules/@jest/reporters/build/generateEmptyCoverage.js create mode 100644 node_modules/@jest/reporters/build/getResultHeader.js create mode 100644 node_modules/@jest/reporters/build/getSnapshotStatus.js create mode 100644 node_modules/@jest/reporters/build/getSnapshotSummary.js create mode 100644 node_modules/@jest/reporters/build/getSummary.js create mode 100644 node_modules/@jest/reporters/build/getWatermarks.js create mode 100644 node_modules/@jest/reporters/build/index.d.ts create mode 100644 node_modules/@jest/reporters/build/index.js create mode 100644 node_modules/@jest/reporters/build/printDisplayName.js create mode 100644 node_modules/@jest/reporters/build/relativePath.js create mode 100644 node_modules/@jest/reporters/build/trimAndFormatPath.js create mode 100644 node_modules/@jest/reporters/build/types.js create mode 100644 node_modules/@jest/reporters/build/wrapAnsiString.js create mode 100644 node_modules/@jest/reporters/package.json create mode 100644 node_modules/@jest/schemas/LICENSE create mode 100644 node_modules/@jest/schemas/README.md create mode 100644 node_modules/@jest/schemas/build/index.d.ts create mode 100644 node_modules/@jest/schemas/build/index.js create mode 100644 node_modules/@jest/schemas/package.json create mode 100644 node_modules/@jest/source-map/LICENSE create mode 100644 node_modules/@jest/source-map/build/getCallsite.js create mode 100644 node_modules/@jest/source-map/build/index.d.ts create mode 100644 node_modules/@jest/source-map/build/index.js create mode 100644 node_modules/@jest/source-map/build/types.js create mode 100644 node_modules/@jest/source-map/package.json create mode 100644 node_modules/@jest/test-result/LICENSE create mode 100644 node_modules/@jest/test-result/build/formatTestResults.js create mode 100644 node_modules/@jest/test-result/build/helpers.js create mode 100644 node_modules/@jest/test-result/build/index.d.ts create mode 100644 node_modules/@jest/test-result/build/index.js create mode 100644 node_modules/@jest/test-result/build/types.js create mode 100644 node_modules/@jest/test-result/package.json create mode 100644 node_modules/@jest/test-sequencer/LICENSE create mode 100644 node_modules/@jest/test-sequencer/build/index.d.ts create mode 100644 node_modules/@jest/test-sequencer/build/index.js create mode 100644 node_modules/@jest/test-sequencer/package.json create mode 100644 node_modules/@jest/transform/LICENSE create mode 100644 node_modules/@jest/transform/build/ScriptTransformer.js create mode 100644 node_modules/@jest/transform/build/enhanceUnexpectedTokenMessage.js create mode 100644 node_modules/@jest/transform/build/index.d.ts create mode 100644 node_modules/@jest/transform/build/index.js create mode 100644 node_modules/@jest/transform/build/runtimeErrorsAndWarnings.js create mode 100644 node_modules/@jest/transform/build/shouldInstrument.js create mode 100644 node_modules/@jest/transform/build/types.js create mode 100644 node_modules/@jest/transform/package.json create mode 100644 node_modules/@jest/types/LICENSE create mode 100644 node_modules/@jest/types/README.md create mode 100644 node_modules/@jest/types/build/Circus.js create mode 100644 node_modules/@jest/types/build/Config.js create mode 100644 node_modules/@jest/types/build/Global.js create mode 100644 node_modules/@jest/types/build/TestResult.js create mode 100644 node_modules/@jest/types/build/Transform.js create mode 100644 node_modules/@jest/types/build/index.d.ts create mode 100644 node_modules/@jest/types/build/index.js create mode 100644 node_modules/@jest/types/package.json create mode 100644 node_modules/@jridgewell/gen-mapping/LICENSE create mode 100644 node_modules/@jridgewell/gen-mapping/README.md create mode 100644 node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs create mode 100644 node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs.map create mode 100644 node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js create mode 100644 node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js.map create mode 100644 node_modules/@jridgewell/gen-mapping/dist/types/gen-mapping.d.ts create mode 100644 node_modules/@jridgewell/gen-mapping/dist/types/sourcemap-segment.d.ts create mode 100644 node_modules/@jridgewell/gen-mapping/dist/types/types.d.ts create mode 100644 node_modules/@jridgewell/gen-mapping/package.json create mode 100644 node_modules/@jridgewell/resolve-uri/LICENSE create mode 100644 node_modules/@jridgewell/resolve-uri/README.md create mode 100644 node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs create mode 100644 node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs.map create mode 100644 node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js create mode 100644 node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js.map create mode 100644 node_modules/@jridgewell/resolve-uri/dist/types/resolve-uri.d.ts create mode 100644 node_modules/@jridgewell/resolve-uri/package.json create mode 100644 node_modules/@jridgewell/set-array/LICENSE create mode 100644 node_modules/@jridgewell/set-array/README.md create mode 100644 node_modules/@jridgewell/set-array/dist/set-array.mjs create mode 100644 node_modules/@jridgewell/set-array/dist/set-array.mjs.map create mode 100644 node_modules/@jridgewell/set-array/dist/set-array.umd.js create mode 100644 node_modules/@jridgewell/set-array/dist/set-array.umd.js.map create mode 100644 node_modules/@jridgewell/set-array/dist/types/set-array.d.ts create mode 100644 node_modules/@jridgewell/set-array/package.json create mode 100644 node_modules/@jridgewell/trace-mapping/LICENSE create mode 100644 node_modules/@jridgewell/trace-mapping/README.md create mode 100644 node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs create mode 100644 node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs.map create mode 100644 node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js create mode 100644 node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js.map create mode 100644 node_modules/@jridgewell/trace-mapping/dist/types/any-map.d.ts create mode 100644 node_modules/@jridgewell/trace-mapping/dist/types/binary-search.d.ts create mode 100644 node_modules/@jridgewell/trace-mapping/dist/types/by-source.d.ts create mode 100644 node_modules/@jridgewell/trace-mapping/dist/types/resolve.d.ts create mode 100644 node_modules/@jridgewell/trace-mapping/dist/types/sort.d.ts create mode 100644 node_modules/@jridgewell/trace-mapping/dist/types/sourcemap-segment.d.ts create mode 100644 node_modules/@jridgewell/trace-mapping/dist/types/strip-filename.d.ts create mode 100644 node_modules/@jridgewell/trace-mapping/dist/types/trace-mapping.d.ts create mode 100644 node_modules/@jridgewell/trace-mapping/dist/types/types.d.ts create mode 100644 node_modules/@jridgewell/trace-mapping/package.json create mode 100644 node_modules/@rollup/rollup-linux-x64-musl/README.md create mode 100644 node_modules/@rollup/rollup-linux-x64-musl/package.json create mode 100644 node_modules/@rollup/rollup-linux-x64-musl/rollup.linux-x64-musl.node create mode 100644 node_modules/@sinclair/typebox/compiler/compiler.d.ts create mode 100644 node_modules/@sinclair/typebox/compiler/compiler.js create mode 100644 node_modules/@sinclair/typebox/compiler/index.d.ts create mode 100644 node_modules/@sinclair/typebox/compiler/index.js create mode 100644 node_modules/@sinclair/typebox/errors/errors.d.ts create mode 100644 node_modules/@sinclair/typebox/errors/errors.js create mode 100644 node_modules/@sinclair/typebox/errors/index.d.ts create mode 100644 node_modules/@sinclair/typebox/errors/index.js create mode 100644 node_modules/@sinclair/typebox/license create mode 100644 node_modules/@sinclair/typebox/package.json create mode 100644 node_modules/@sinclair/typebox/readme.md create mode 100644 node_modules/@sinclair/typebox/system/index.d.ts create mode 100644 node_modules/@sinclair/typebox/system/index.js create mode 100644 node_modules/@sinclair/typebox/system/system.d.ts create mode 100644 node_modules/@sinclair/typebox/system/system.js create mode 100644 node_modules/@sinclair/typebox/typebox.d.ts create mode 100644 node_modules/@sinclair/typebox/typebox.js create mode 100644 node_modules/@sinclair/typebox/value/cast.d.ts create mode 100644 node_modules/@sinclair/typebox/value/cast.js create mode 100644 node_modules/@sinclair/typebox/value/check.d.ts create mode 100644 node_modules/@sinclair/typebox/value/check.js create mode 100644 node_modules/@sinclair/typebox/value/clone.d.ts create mode 100644 node_modules/@sinclair/typebox/value/clone.js create mode 100644 node_modules/@sinclair/typebox/value/convert.d.ts create mode 100644 node_modules/@sinclair/typebox/value/convert.js create mode 100644 node_modules/@sinclair/typebox/value/create.d.ts create mode 100644 node_modules/@sinclair/typebox/value/create.js create mode 100644 node_modules/@sinclair/typebox/value/delta.d.ts create mode 100644 node_modules/@sinclair/typebox/value/delta.js create mode 100644 node_modules/@sinclair/typebox/value/equal.d.ts create mode 100644 node_modules/@sinclair/typebox/value/equal.js create mode 100644 node_modules/@sinclair/typebox/value/hash.d.ts create mode 100644 node_modules/@sinclair/typebox/value/hash.js create mode 100644 node_modules/@sinclair/typebox/value/index.d.ts create mode 100644 node_modules/@sinclair/typebox/value/index.js create mode 100644 node_modules/@sinclair/typebox/value/is.d.ts create mode 100644 node_modules/@sinclair/typebox/value/is.js create mode 100644 node_modules/@sinclair/typebox/value/mutate.d.ts create mode 100644 node_modules/@sinclair/typebox/value/mutate.js create mode 100644 node_modules/@sinclair/typebox/value/pointer.d.ts create mode 100644 node_modules/@sinclair/typebox/value/pointer.js create mode 100644 node_modules/@sinclair/typebox/value/value.d.ts create mode 100644 node_modules/@sinclair/typebox/value/value.js create mode 100644 node_modules/@sinonjs/commons/LICENSE create mode 100644 node_modules/@sinonjs/commons/README.md create mode 100644 node_modules/@sinonjs/commons/lib/called-in-order.js create mode 100644 node_modules/@sinonjs/commons/lib/called-in-order.test.js create mode 100644 node_modules/@sinonjs/commons/lib/class-name.js create mode 100644 node_modules/@sinonjs/commons/lib/class-name.test.js create mode 100644 node_modules/@sinonjs/commons/lib/deprecated.js create mode 100644 node_modules/@sinonjs/commons/lib/deprecated.test.js create mode 100644 node_modules/@sinonjs/commons/lib/every.js create mode 100644 node_modules/@sinonjs/commons/lib/every.test.js create mode 100644 node_modules/@sinonjs/commons/lib/function-name.js create mode 100644 node_modules/@sinonjs/commons/lib/function-name.test.js create mode 100644 node_modules/@sinonjs/commons/lib/global.js create mode 100644 node_modules/@sinonjs/commons/lib/global.test.js create mode 100644 node_modules/@sinonjs/commons/lib/index.js create mode 100644 node_modules/@sinonjs/commons/lib/index.test.js create mode 100644 node_modules/@sinonjs/commons/lib/order-by-first-call.js create mode 100644 node_modules/@sinonjs/commons/lib/order-by-first-call.test.js create mode 100644 node_modules/@sinonjs/commons/lib/prototypes/README.md create mode 100644 node_modules/@sinonjs/commons/lib/prototypes/array.js create mode 100644 node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.js create mode 100644 node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.test.js create mode 100644 node_modules/@sinonjs/commons/lib/prototypes/function.js create mode 100644 node_modules/@sinonjs/commons/lib/prototypes/index.js create mode 100644 node_modules/@sinonjs/commons/lib/prototypes/index.test.js create mode 100644 node_modules/@sinonjs/commons/lib/prototypes/map.js create mode 100644 node_modules/@sinonjs/commons/lib/prototypes/object.js create mode 100644 node_modules/@sinonjs/commons/lib/prototypes/set.js create mode 100644 node_modules/@sinonjs/commons/lib/prototypes/string.js create mode 100644 node_modules/@sinonjs/commons/lib/prototypes/throws-on-proto.js create mode 100644 node_modules/@sinonjs/commons/lib/type-of.js create mode 100644 node_modules/@sinonjs/commons/lib/type-of.test.js create mode 100644 node_modules/@sinonjs/commons/lib/value-to-string.js create mode 100644 node_modules/@sinonjs/commons/lib/value-to-string.test.js create mode 100644 node_modules/@sinonjs/commons/package.json create mode 100644 node_modules/@sinonjs/commons/types/called-in-order.d.ts create mode 100644 node_modules/@sinonjs/commons/types/class-name.d.ts create mode 100644 node_modules/@sinonjs/commons/types/deprecated.d.ts create mode 100644 node_modules/@sinonjs/commons/types/every.d.ts create mode 100644 node_modules/@sinonjs/commons/types/function-name.d.ts create mode 100644 node_modules/@sinonjs/commons/types/global.d.ts create mode 100644 node_modules/@sinonjs/commons/types/index.d.ts create mode 100644 node_modules/@sinonjs/commons/types/order-by-first-call.d.ts create mode 100644 node_modules/@sinonjs/commons/types/prototypes/array.d.ts create mode 100644 node_modules/@sinonjs/commons/types/prototypes/copy-prototype-methods.d.ts create mode 100644 node_modules/@sinonjs/commons/types/prototypes/function.d.ts create mode 100644 node_modules/@sinonjs/commons/types/prototypes/index.d.ts create mode 100644 node_modules/@sinonjs/commons/types/prototypes/map.d.ts create mode 100644 node_modules/@sinonjs/commons/types/prototypes/object.d.ts create mode 100644 node_modules/@sinonjs/commons/types/prototypes/set.d.ts create mode 100644 node_modules/@sinonjs/commons/types/prototypes/string.d.ts create mode 100644 node_modules/@sinonjs/commons/types/prototypes/throws-on-proto.d.ts create mode 100644 node_modules/@sinonjs/commons/types/type-of.d.ts create mode 100644 node_modules/@sinonjs/commons/types/value-to-string.d.ts create mode 100644 node_modules/@sinonjs/fake-timers/LICENSE create mode 100644 node_modules/@sinonjs/fake-timers/README.md create mode 100644 node_modules/@sinonjs/fake-timers/package.json create mode 100644 node_modules/@sinonjs/fake-timers/src/fake-timers-src.js create mode 100644 node_modules/@types/babel__core/LICENSE create mode 100644 node_modules/@types/babel__core/README.md create mode 100644 node_modules/@types/babel__core/index.d.ts create mode 100644 node_modules/@types/babel__core/package.json create mode 100644 node_modules/@types/babel__generator/LICENSE create mode 100644 node_modules/@types/babel__generator/README.md create mode 100644 node_modules/@types/babel__generator/index.d.ts create mode 100644 node_modules/@types/babel__generator/package.json create mode 100644 node_modules/@types/babel__template/LICENSE create mode 100644 node_modules/@types/babel__template/README.md create mode 100644 node_modules/@types/babel__template/index.d.ts create mode 100644 node_modules/@types/babel__template/package.json create mode 100644 node_modules/@types/babel__traverse/LICENSE create mode 100644 node_modules/@types/babel__traverse/README.md create mode 100644 node_modules/@types/babel__traverse/index.d.ts create mode 100644 node_modules/@types/babel__traverse/package.json create mode 100644 node_modules/@types/graceful-fs/LICENSE create mode 100644 node_modules/@types/graceful-fs/README.md create mode 100644 node_modules/@types/graceful-fs/index.d.ts create mode 100644 node_modules/@types/graceful-fs/package.json create mode 100644 node_modules/@types/istanbul-lib-coverage/LICENSE create mode 100644 node_modules/@types/istanbul-lib-coverage/README.md create mode 100644 node_modules/@types/istanbul-lib-coverage/index.d.ts create mode 100644 node_modules/@types/istanbul-lib-coverage/package.json create mode 100644 node_modules/@types/istanbul-lib-report/LICENSE create mode 100644 node_modules/@types/istanbul-lib-report/README.md create mode 100644 node_modules/@types/istanbul-lib-report/index.d.ts create mode 100644 node_modules/@types/istanbul-lib-report/package.json create mode 100644 node_modules/@types/istanbul-reports/LICENSE create mode 100644 node_modules/@types/istanbul-reports/README.md create mode 100644 node_modules/@types/istanbul-reports/index.d.ts create mode 100644 node_modules/@types/istanbul-reports/package.json create mode 100644 node_modules/@types/node/LICENSE create mode 100644 node_modules/@types/node/README.md create mode 100644 node_modules/@types/node/assert.d.ts create mode 100644 node_modules/@types/node/assert/strict.d.ts create mode 100644 node_modules/@types/node/async_hooks.d.ts create mode 100644 node_modules/@types/node/buffer.buffer.d.ts create mode 100644 node_modules/@types/node/buffer.d.ts create mode 100644 node_modules/@types/node/child_process.d.ts create mode 100644 node_modules/@types/node/cluster.d.ts create mode 100644 node_modules/@types/node/compatibility/disposable.d.ts create mode 100644 node_modules/@types/node/compatibility/index.d.ts create mode 100644 node_modules/@types/node/compatibility/indexable.d.ts create mode 100644 node_modules/@types/node/compatibility/iterators.d.ts create mode 100644 node_modules/@types/node/console.d.ts create mode 100644 node_modules/@types/node/constants.d.ts create mode 100644 node_modules/@types/node/crypto.d.ts create mode 100644 node_modules/@types/node/dgram.d.ts create mode 100644 node_modules/@types/node/diagnostics_channel.d.ts create mode 100644 node_modules/@types/node/dns.d.ts create mode 100644 node_modules/@types/node/dns/promises.d.ts create mode 100644 node_modules/@types/node/dom-events.d.ts create mode 100644 node_modules/@types/node/domain.d.ts create mode 100644 node_modules/@types/node/events.d.ts create mode 100644 node_modules/@types/node/fs.d.ts create mode 100644 node_modules/@types/node/fs/promises.d.ts create mode 100644 node_modules/@types/node/globals.d.ts create mode 100644 node_modules/@types/node/globals.typedarray.d.ts create mode 100644 node_modules/@types/node/http.d.ts create mode 100644 node_modules/@types/node/http2.d.ts create mode 100644 node_modules/@types/node/https.d.ts create mode 100644 node_modules/@types/node/index.d.ts create mode 100644 node_modules/@types/node/inspector.d.ts create mode 100644 node_modules/@types/node/module.d.ts create mode 100644 node_modules/@types/node/net.d.ts create mode 100644 node_modules/@types/node/os.d.ts create mode 100644 node_modules/@types/node/package.json create mode 100644 node_modules/@types/node/path.d.ts create mode 100644 node_modules/@types/node/perf_hooks.d.ts create mode 100644 node_modules/@types/node/process.d.ts create mode 100644 node_modules/@types/node/punycode.d.ts create mode 100644 node_modules/@types/node/querystring.d.ts create mode 100644 node_modules/@types/node/readline.d.ts create mode 100644 node_modules/@types/node/readline/promises.d.ts create mode 100644 node_modules/@types/node/repl.d.ts create mode 100644 node_modules/@types/node/sea.d.ts create mode 100644 node_modules/@types/node/sqlite.d.ts create mode 100644 node_modules/@types/node/stream.d.ts create mode 100644 node_modules/@types/node/stream/consumers.d.ts create mode 100644 node_modules/@types/node/stream/promises.d.ts create mode 100644 node_modules/@types/node/stream/web.d.ts create mode 100644 node_modules/@types/node/string_decoder.d.ts create mode 100644 node_modules/@types/node/test.d.ts create mode 100644 node_modules/@types/node/timers.d.ts create mode 100644 node_modules/@types/node/timers/promises.d.ts create mode 100644 node_modules/@types/node/tls.d.ts create mode 100644 node_modules/@types/node/trace_events.d.ts create mode 100644 node_modules/@types/node/ts5.6/buffer.buffer.d.ts create mode 100644 node_modules/@types/node/ts5.6/globals.typedarray.d.ts create mode 100644 node_modules/@types/node/ts5.6/index.d.ts create mode 100644 node_modules/@types/node/tty.d.ts create mode 100644 node_modules/@types/node/url.d.ts create mode 100644 node_modules/@types/node/util.d.ts create mode 100644 node_modules/@types/node/v8.d.ts create mode 100644 node_modules/@types/node/vm.d.ts create mode 100644 node_modules/@types/node/wasi.d.ts create mode 100644 node_modules/@types/node/worker_threads.d.ts create mode 100644 node_modules/@types/node/zlib.d.ts create mode 100644 node_modules/@types/stack-utils/LICENSE create mode 100644 node_modules/@types/stack-utils/README.md create mode 100644 node_modules/@types/stack-utils/index.d.ts create mode 100644 node_modules/@types/stack-utils/package.json create mode 100644 node_modules/@types/yargs-parser/LICENSE create mode 100644 node_modules/@types/yargs-parser/README.md create mode 100644 node_modules/@types/yargs-parser/index.d.ts create mode 100644 node_modules/@types/yargs-parser/package.json create mode 100644 node_modules/@types/yargs/LICENSE create mode 100644 node_modules/@types/yargs/README.md create mode 100644 node_modules/@types/yargs/helpers.d.mts create mode 100644 node_modules/@types/yargs/helpers.d.ts create mode 100644 node_modules/@types/yargs/index.d.mts create mode 100644 node_modules/@types/yargs/index.d.ts create mode 100644 node_modules/@types/yargs/package.json create mode 100644 node_modules/@types/yargs/yargs.d.ts create mode 100644 node_modules/ansi-escapes/index.d.ts create mode 100644 node_modules/ansi-escapes/index.js create mode 100644 node_modules/ansi-escapes/license create mode 100644 node_modules/ansi-escapes/package.json create mode 100644 node_modules/ansi-escapes/readme.md create mode 100644 node_modules/ansi-regex/index.d.ts create mode 100644 node_modules/ansi-regex/index.js create mode 100644 node_modules/ansi-regex/license create mode 100644 node_modules/ansi-regex/package.json create mode 100644 node_modules/ansi-regex/readme.md create mode 100644 node_modules/ansi-styles/index.d.ts create mode 100644 node_modules/ansi-styles/index.js create mode 100644 node_modules/ansi-styles/license create mode 100644 node_modules/ansi-styles/package.json create mode 100644 node_modules/ansi-styles/readme.md 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/CHANGELOG.md 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/index.js create mode 100644 node_modules/argparse/lib/action.js create mode 100644 node_modules/argparse/lib/action/append.js create mode 100644 node_modules/argparse/lib/action/append/constant.js create mode 100644 node_modules/argparse/lib/action/count.js create mode 100644 node_modules/argparse/lib/action/help.js create mode 100644 node_modules/argparse/lib/action/store.js create mode 100644 node_modules/argparse/lib/action/store/constant.js create mode 100644 node_modules/argparse/lib/action/store/false.js create mode 100644 node_modules/argparse/lib/action/store/true.js create mode 100644 node_modules/argparse/lib/action/subparsers.js create mode 100644 node_modules/argparse/lib/action/version.js create mode 100644 node_modules/argparse/lib/action_container.js create mode 100644 node_modules/argparse/lib/argparse.js create mode 100644 node_modules/argparse/lib/argument/error.js create mode 100644 node_modules/argparse/lib/argument/exclusive.js create mode 100644 node_modules/argparse/lib/argument/group.js create mode 100644 node_modules/argparse/lib/argument_parser.js create mode 100644 node_modules/argparse/lib/const.js create mode 100644 node_modules/argparse/lib/help/added_formatters.js create mode 100644 node_modules/argparse/lib/help/formatter.js create mode 100644 node_modules/argparse/lib/namespace.js create mode 100644 node_modules/argparse/lib/utils.js create mode 100644 node_modules/argparse/package.json create mode 100644 node_modules/babel-jest/LICENSE create mode 100644 node_modules/babel-jest/README.md create mode 100644 node_modules/babel-jest/build/index.d.ts create mode 100644 node_modules/babel-jest/build/index.js create mode 100644 node_modules/babel-jest/build/loadBabelConfig.js create mode 100644 node_modules/babel-jest/package.json create mode 100644 node_modules/babel-plugin-istanbul/CHANGELOG.md create mode 100644 node_modules/babel-plugin-istanbul/LICENSE create mode 100644 node_modules/babel-plugin-istanbul/README.md create mode 100644 node_modules/babel-plugin-istanbul/lib/index.js create mode 100644 node_modules/babel-plugin-istanbul/lib/load-nyc-config-sync.js create mode 100644 node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument/CHANGELOG.md create mode 100644 node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument/LICENSE create mode 100644 node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument/README.md create mode 100644 node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument/package.json create mode 100644 node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument/src/constants.js create mode 100644 node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument/src/index.js create mode 100644 node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument/src/instrumenter.js create mode 100644 node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument/src/read-coverage.js create mode 100644 node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument/src/source-coverage.js create mode 100644 node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument/src/visitor.js create mode 100644 node_modules/babel-plugin-istanbul/package.json create mode 100644 node_modules/babel-plugin-jest-hoist/LICENSE create mode 100644 node_modules/babel-plugin-jest-hoist/README.md create mode 100644 node_modules/babel-plugin-jest-hoist/build/index.d.ts create mode 100644 node_modules/babel-plugin-jest-hoist/build/index.js create mode 100644 node_modules/babel-plugin-jest-hoist/package.json create mode 100644 node_modules/babel-preset-current-node-syntax/.github/FUNDING.yml create mode 100644 node_modules/babel-preset-current-node-syntax/.github/workflows/nodejs.yml create mode 100644 node_modules/babel-preset-current-node-syntax/LICENSE create mode 100644 node_modules/babel-preset-current-node-syntax/README.md create mode 100644 node_modules/babel-preset-current-node-syntax/package.json create mode 100644 node_modules/babel-preset-current-node-syntax/src/index.js create mode 100644 node_modules/babel-preset-jest/LICENSE create mode 100644 node_modules/babel-preset-jest/README.md create mode 100644 node_modules/babel-preset-jest/index.js create mode 100644 node_modules/babel-preset-jest/package.json 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/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/browserslist/LICENSE create mode 100644 node_modules/browserslist/README.md create mode 100644 node_modules/browserslist/browser.js create mode 100755 node_modules/browserslist/cli.js create mode 100644 node_modules/browserslist/error.d.ts create mode 100644 node_modules/browserslist/error.js create mode 100644 node_modules/browserslist/index.d.ts create mode 100644 node_modules/browserslist/index.js create mode 100644 node_modules/browserslist/node.js create mode 100644 node_modules/browserslist/package.json create mode 100644 node_modules/browserslist/parse.js create mode 100644 node_modules/bser/README.md create mode 100644 node_modules/bser/index.js create mode 100644 node_modules/bser/package.json create mode 100644 node_modules/buffer-from/LICENSE create mode 100644 node_modules/buffer-from/index.js create mode 100644 node_modules/buffer-from/package.json create mode 100644 node_modules/buffer-from/readme.md create mode 100644 node_modules/callsites/index.d.ts create mode 100644 node_modules/callsites/index.js create mode 100644 node_modules/callsites/license create mode 100644 node_modules/callsites/package.json create mode 100644 node_modules/callsites/readme.md create mode 100644 node_modules/camelcase/index.d.ts create mode 100644 node_modules/camelcase/index.js create mode 100644 node_modules/camelcase/license create mode 100644 node_modules/camelcase/package.json create mode 100644 node_modules/camelcase/readme.md create mode 100644 node_modules/caniuse-lite/LICENSE create mode 100644 node_modules/caniuse-lite/README.md create mode 100644 node_modules/caniuse-lite/data/agents.js create mode 100644 node_modules/caniuse-lite/data/browserVersions.js create mode 100644 node_modules/caniuse-lite/data/browsers.js create mode 100644 node_modules/caniuse-lite/data/features.js create mode 100644 node_modules/caniuse-lite/data/features/aac.js create mode 100644 node_modules/caniuse-lite/data/features/abortcontroller.js create mode 100644 node_modules/caniuse-lite/data/features/ac3-ec3.js create mode 100644 node_modules/caniuse-lite/data/features/accelerometer.js create mode 100644 node_modules/caniuse-lite/data/features/addeventlistener.js create mode 100644 node_modules/caniuse-lite/data/features/alternate-stylesheet.js create mode 100644 node_modules/caniuse-lite/data/features/ambient-light.js create mode 100644 node_modules/caniuse-lite/data/features/apng.js create mode 100644 node_modules/caniuse-lite/data/features/array-find-index.js create mode 100644 node_modules/caniuse-lite/data/features/array-find.js create mode 100644 node_modules/caniuse-lite/data/features/array-flat.js create mode 100644 node_modules/caniuse-lite/data/features/array-includes.js create mode 100644 node_modules/caniuse-lite/data/features/arrow-functions.js create mode 100644 node_modules/caniuse-lite/data/features/asmjs.js create mode 100644 node_modules/caniuse-lite/data/features/async-clipboard.js create mode 100644 node_modules/caniuse-lite/data/features/async-functions.js create mode 100644 node_modules/caniuse-lite/data/features/atob-btoa.js create mode 100644 node_modules/caniuse-lite/data/features/audio-api.js create mode 100644 node_modules/caniuse-lite/data/features/audio.js create mode 100644 node_modules/caniuse-lite/data/features/audiotracks.js create mode 100644 node_modules/caniuse-lite/data/features/autofocus.js create mode 100644 node_modules/caniuse-lite/data/features/auxclick.js create mode 100644 node_modules/caniuse-lite/data/features/av1.js create mode 100644 node_modules/caniuse-lite/data/features/avif.js create mode 100644 node_modules/caniuse-lite/data/features/background-attachment.js create mode 100644 node_modules/caniuse-lite/data/features/background-clip-text.js create mode 100644 node_modules/caniuse-lite/data/features/background-img-opts.js create mode 100644 node_modules/caniuse-lite/data/features/background-position-x-y.js create mode 100644 node_modules/caniuse-lite/data/features/background-repeat-round-space.js create mode 100644 node_modules/caniuse-lite/data/features/background-sync.js create mode 100644 node_modules/caniuse-lite/data/features/battery-status.js create mode 100644 node_modules/caniuse-lite/data/features/beacon.js create mode 100644 node_modules/caniuse-lite/data/features/beforeafterprint.js create mode 100644 node_modules/caniuse-lite/data/features/bigint.js create mode 100644 node_modules/caniuse-lite/data/features/blobbuilder.js create mode 100644 node_modules/caniuse-lite/data/features/bloburls.js create mode 100644 node_modules/caniuse-lite/data/features/border-image.js create mode 100644 node_modules/caniuse-lite/data/features/border-radius.js create mode 100644 node_modules/caniuse-lite/data/features/broadcastchannel.js create mode 100644 node_modules/caniuse-lite/data/features/brotli.js create mode 100644 node_modules/caniuse-lite/data/features/calc.js create mode 100644 node_modules/caniuse-lite/data/features/canvas-blending.js create mode 100644 node_modules/caniuse-lite/data/features/canvas-text.js create mode 100644 node_modules/caniuse-lite/data/features/canvas.js create mode 100644 node_modules/caniuse-lite/data/features/ch-unit.js create mode 100644 node_modules/caniuse-lite/data/features/chacha20-poly1305.js create mode 100644 node_modules/caniuse-lite/data/features/channel-messaging.js create mode 100644 node_modules/caniuse-lite/data/features/childnode-remove.js create mode 100644 node_modules/caniuse-lite/data/features/classlist.js create mode 100644 node_modules/caniuse-lite/data/features/client-hints-dpr-width-viewport.js create mode 100644 node_modules/caniuse-lite/data/features/clipboard.js create mode 100644 node_modules/caniuse-lite/data/features/colr-v1.js create mode 100644 node_modules/caniuse-lite/data/features/colr.js create mode 100644 node_modules/caniuse-lite/data/features/comparedocumentposition.js create mode 100644 node_modules/caniuse-lite/data/features/console-basic.js create mode 100644 node_modules/caniuse-lite/data/features/console-time.js create mode 100644 node_modules/caniuse-lite/data/features/const.js create mode 100644 node_modules/caniuse-lite/data/features/constraint-validation.js create mode 100644 node_modules/caniuse-lite/data/features/contenteditable.js create mode 100644 node_modules/caniuse-lite/data/features/contentsecuritypolicy.js create mode 100644 node_modules/caniuse-lite/data/features/contentsecuritypolicy2.js create mode 100644 node_modules/caniuse-lite/data/features/cookie-store-api.js create mode 100644 node_modules/caniuse-lite/data/features/cors.js create mode 100644 node_modules/caniuse-lite/data/features/createimagebitmap.js create mode 100644 node_modules/caniuse-lite/data/features/credential-management.js create mode 100644 node_modules/caniuse-lite/data/features/cross-document-view-transitions.js create mode 100644 node_modules/caniuse-lite/data/features/cryptography.js create mode 100644 node_modules/caniuse-lite/data/features/css-all.js create mode 100644 node_modules/caniuse-lite/data/features/css-anchor-positioning.js create mode 100644 node_modules/caniuse-lite/data/features/css-animation.js create mode 100644 node_modules/caniuse-lite/data/features/css-any-link.js create mode 100644 node_modules/caniuse-lite/data/features/css-appearance.js create mode 100644 node_modules/caniuse-lite/data/features/css-at-counter-style.js create mode 100644 node_modules/caniuse-lite/data/features/css-autofill.js create mode 100644 node_modules/caniuse-lite/data/features/css-backdrop-filter.js create mode 100644 node_modules/caniuse-lite/data/features/css-background-offsets.js create mode 100644 node_modules/caniuse-lite/data/features/css-backgroundblendmode.js create mode 100644 node_modules/caniuse-lite/data/features/css-boxdecorationbreak.js create mode 100644 node_modules/caniuse-lite/data/features/css-boxshadow.js create mode 100644 node_modules/caniuse-lite/data/features/css-canvas.js create mode 100644 node_modules/caniuse-lite/data/features/css-caret-color.js create mode 100644 node_modules/caniuse-lite/data/features/css-cascade-layers.js create mode 100644 node_modules/caniuse-lite/data/features/css-cascade-scope.js create mode 100644 node_modules/caniuse-lite/data/features/css-case-insensitive.js create mode 100644 node_modules/caniuse-lite/data/features/css-clip-path.js create mode 100644 node_modules/caniuse-lite/data/features/css-color-adjust.js create mode 100644 node_modules/caniuse-lite/data/features/css-color-function.js create mode 100644 node_modules/caniuse-lite/data/features/css-conic-gradients.js create mode 100644 node_modules/caniuse-lite/data/features/css-container-queries-style.js create mode 100644 node_modules/caniuse-lite/data/features/css-container-queries.js create mode 100644 node_modules/caniuse-lite/data/features/css-container-query-units.js create mode 100644 node_modules/caniuse-lite/data/features/css-containment.js create mode 100644 node_modules/caniuse-lite/data/features/css-content-visibility.js create mode 100644 node_modules/caniuse-lite/data/features/css-counters.js create mode 100644 node_modules/caniuse-lite/data/features/css-crisp-edges.js create mode 100644 node_modules/caniuse-lite/data/features/css-cross-fade.js create mode 100644 node_modules/caniuse-lite/data/features/css-default-pseudo.js create mode 100644 node_modules/caniuse-lite/data/features/css-descendant-gtgt.js create mode 100644 node_modules/caniuse-lite/data/features/css-deviceadaptation.js create mode 100644 node_modules/caniuse-lite/data/features/css-dir-pseudo.js create mode 100644 node_modules/caniuse-lite/data/features/css-display-contents.js create mode 100644 node_modules/caniuse-lite/data/features/css-element-function.js create mode 100644 node_modules/caniuse-lite/data/features/css-env-function.js create mode 100644 node_modules/caniuse-lite/data/features/css-exclusions.js create mode 100644 node_modules/caniuse-lite/data/features/css-featurequeries.js create mode 100644 node_modules/caniuse-lite/data/features/css-file-selector-button.js create mode 100644 node_modules/caniuse-lite/data/features/css-filter-function.js create mode 100644 node_modules/caniuse-lite/data/features/css-filters.js create mode 100644 node_modules/caniuse-lite/data/features/css-first-letter.js create mode 100644 node_modules/caniuse-lite/data/features/css-first-line.js create mode 100644 node_modules/caniuse-lite/data/features/css-fixed.js create mode 100644 node_modules/caniuse-lite/data/features/css-focus-visible.js create mode 100644 node_modules/caniuse-lite/data/features/css-focus-within.js create mode 100644 node_modules/caniuse-lite/data/features/css-font-palette.js create mode 100644 node_modules/caniuse-lite/data/features/css-font-rendering-controls.js create mode 100644 node_modules/caniuse-lite/data/features/css-font-stretch.js create mode 100644 node_modules/caniuse-lite/data/features/css-gencontent.js create mode 100644 node_modules/caniuse-lite/data/features/css-gradients.js create mode 100644 node_modules/caniuse-lite/data/features/css-grid-animation.js create mode 100644 node_modules/caniuse-lite/data/features/css-grid.js create mode 100644 node_modules/caniuse-lite/data/features/css-hanging-punctuation.js create mode 100644 node_modules/caniuse-lite/data/features/css-has.js create mode 100644 node_modules/caniuse-lite/data/features/css-hyphens.js create mode 100644 node_modules/caniuse-lite/data/features/css-image-orientation.js create mode 100644 node_modules/caniuse-lite/data/features/css-image-set.js create mode 100644 node_modules/caniuse-lite/data/features/css-in-out-of-range.js create mode 100644 node_modules/caniuse-lite/data/features/css-indeterminate-pseudo.js create mode 100644 node_modules/caniuse-lite/data/features/css-initial-letter.js create mode 100644 node_modules/caniuse-lite/data/features/css-initial-value.js create mode 100644 node_modules/caniuse-lite/data/features/css-lch-lab.js create mode 100644 node_modules/caniuse-lite/data/features/css-letter-spacing.js create mode 100644 node_modules/caniuse-lite/data/features/css-line-clamp.js create mode 100644 node_modules/caniuse-lite/data/features/css-logical-props.js create mode 100644 node_modules/caniuse-lite/data/features/css-marker-pseudo.js create mode 100644 node_modules/caniuse-lite/data/features/css-masks.js create mode 100644 node_modules/caniuse-lite/data/features/css-matches-pseudo.js create mode 100644 node_modules/caniuse-lite/data/features/css-math-functions.js create mode 100644 node_modules/caniuse-lite/data/features/css-media-interaction.js create mode 100644 node_modules/caniuse-lite/data/features/css-media-range-syntax.js create mode 100644 node_modules/caniuse-lite/data/features/css-media-resolution.js create mode 100644 node_modules/caniuse-lite/data/features/css-media-scripting.js create mode 100644 node_modules/caniuse-lite/data/features/css-mediaqueries.js create mode 100644 node_modules/caniuse-lite/data/features/css-mixblendmode.js create mode 100644 node_modules/caniuse-lite/data/features/css-module-scripts.js create mode 100644 node_modules/caniuse-lite/data/features/css-motion-paths.js create mode 100644 node_modules/caniuse-lite/data/features/css-namespaces.js create mode 100644 node_modules/caniuse-lite/data/features/css-nesting.js create mode 100644 node_modules/caniuse-lite/data/features/css-not-sel-list.js create mode 100644 node_modules/caniuse-lite/data/features/css-nth-child-of.js create mode 100644 node_modules/caniuse-lite/data/features/css-opacity.js create mode 100644 node_modules/caniuse-lite/data/features/css-optional-pseudo.js create mode 100644 node_modules/caniuse-lite/data/features/css-overflow-anchor.js create mode 100644 node_modules/caniuse-lite/data/features/css-overflow-overlay.js create mode 100644 node_modules/caniuse-lite/data/features/css-overflow.js create mode 100644 node_modules/caniuse-lite/data/features/css-overscroll-behavior.js create mode 100644 node_modules/caniuse-lite/data/features/css-page-break.js create mode 100644 node_modules/caniuse-lite/data/features/css-paged-media.js create mode 100644 node_modules/caniuse-lite/data/features/css-paint-api.js create mode 100644 node_modules/caniuse-lite/data/features/css-placeholder-shown.js create mode 100644 node_modules/caniuse-lite/data/features/css-placeholder.js create mode 100644 node_modules/caniuse-lite/data/features/css-print-color-adjust.js create mode 100644 node_modules/caniuse-lite/data/features/css-read-only-write.js create mode 100644 node_modules/caniuse-lite/data/features/css-rebeccapurple.js create mode 100644 node_modules/caniuse-lite/data/features/css-reflections.js create mode 100644 node_modules/caniuse-lite/data/features/css-regions.js create mode 100644 node_modules/caniuse-lite/data/features/css-relative-colors.js create mode 100644 node_modules/caniuse-lite/data/features/css-repeating-gradients.js create mode 100644 node_modules/caniuse-lite/data/features/css-resize.js create mode 100644 node_modules/caniuse-lite/data/features/css-revert-value.js create mode 100644 node_modules/caniuse-lite/data/features/css-rrggbbaa.js create mode 100644 node_modules/caniuse-lite/data/features/css-scroll-behavior.js create mode 100644 node_modules/caniuse-lite/data/features/css-scrollbar.js create mode 100644 node_modules/caniuse-lite/data/features/css-sel2.js create mode 100644 node_modules/caniuse-lite/data/features/css-sel3.js create mode 100644 node_modules/caniuse-lite/data/features/css-selection.js create mode 100644 node_modules/caniuse-lite/data/features/css-shapes.js create mode 100644 node_modules/caniuse-lite/data/features/css-snappoints.js create mode 100644 node_modules/caniuse-lite/data/features/css-sticky.js create mode 100644 node_modules/caniuse-lite/data/features/css-subgrid.js create mode 100644 node_modules/caniuse-lite/data/features/css-supports-api.js create mode 100644 node_modules/caniuse-lite/data/features/css-table.js create mode 100644 node_modules/caniuse-lite/data/features/css-text-align-last.js create mode 100644 node_modules/caniuse-lite/data/features/css-text-box-trim.js create mode 100644 node_modules/caniuse-lite/data/features/css-text-indent.js create mode 100644 node_modules/caniuse-lite/data/features/css-text-justify.js create mode 100644 node_modules/caniuse-lite/data/features/css-text-orientation.js create mode 100644 node_modules/caniuse-lite/data/features/css-text-spacing.js create mode 100644 node_modules/caniuse-lite/data/features/css-text-wrap-balance.js create mode 100644 node_modules/caniuse-lite/data/features/css-textshadow.js create mode 100644 node_modules/caniuse-lite/data/features/css-touch-action.js create mode 100644 node_modules/caniuse-lite/data/features/css-transitions.js create mode 100644 node_modules/caniuse-lite/data/features/css-unicode-bidi.js create mode 100644 node_modules/caniuse-lite/data/features/css-unset-value.js create mode 100644 node_modules/caniuse-lite/data/features/css-variables.js create mode 100644 node_modules/caniuse-lite/data/features/css-when-else.js create mode 100644 node_modules/caniuse-lite/data/features/css-widows-orphans.js create mode 100644 node_modules/caniuse-lite/data/features/css-width-stretch.js create mode 100644 node_modules/caniuse-lite/data/features/css-writing-mode.js create mode 100644 node_modules/caniuse-lite/data/features/css-zoom.js create mode 100644 node_modules/caniuse-lite/data/features/css3-attr.js create mode 100644 node_modules/caniuse-lite/data/features/css3-boxsizing.js create mode 100644 node_modules/caniuse-lite/data/features/css3-colors.js create mode 100644 node_modules/caniuse-lite/data/features/css3-cursors-grab.js create mode 100644 node_modules/caniuse-lite/data/features/css3-cursors-newer.js create mode 100644 node_modules/caniuse-lite/data/features/css3-cursors.js create mode 100644 node_modules/caniuse-lite/data/features/css3-tabsize.js create mode 100644 node_modules/caniuse-lite/data/features/currentcolor.js create mode 100644 node_modules/caniuse-lite/data/features/custom-elements.js create mode 100644 node_modules/caniuse-lite/data/features/custom-elementsv1.js create mode 100644 node_modules/caniuse-lite/data/features/customevent.js create mode 100644 node_modules/caniuse-lite/data/features/datalist.js create mode 100644 node_modules/caniuse-lite/data/features/dataset.js create mode 100644 node_modules/caniuse-lite/data/features/datauri.js create mode 100644 node_modules/caniuse-lite/data/features/date-tolocaledatestring.js create mode 100644 node_modules/caniuse-lite/data/features/declarative-shadow-dom.js create mode 100644 node_modules/caniuse-lite/data/features/decorators.js create mode 100644 node_modules/caniuse-lite/data/features/details.js create mode 100644 node_modules/caniuse-lite/data/features/deviceorientation.js create mode 100644 node_modules/caniuse-lite/data/features/devicepixelratio.js create mode 100644 node_modules/caniuse-lite/data/features/dialog.js create mode 100644 node_modules/caniuse-lite/data/features/dispatchevent.js create mode 100644 node_modules/caniuse-lite/data/features/dnssec.js create mode 100644 node_modules/caniuse-lite/data/features/do-not-track.js create mode 100644 node_modules/caniuse-lite/data/features/document-currentscript.js create mode 100644 node_modules/caniuse-lite/data/features/document-evaluate-xpath.js create mode 100644 node_modules/caniuse-lite/data/features/document-execcommand.js create mode 100644 node_modules/caniuse-lite/data/features/document-policy.js create mode 100644 node_modules/caniuse-lite/data/features/document-scrollingelement.js create mode 100644 node_modules/caniuse-lite/data/features/documenthead.js create mode 100644 node_modules/caniuse-lite/data/features/dom-manip-convenience.js create mode 100644 node_modules/caniuse-lite/data/features/dom-range.js create mode 100644 node_modules/caniuse-lite/data/features/domcontentloaded.js create mode 100644 node_modules/caniuse-lite/data/features/dommatrix.js create mode 100644 node_modules/caniuse-lite/data/features/download.js create mode 100644 node_modules/caniuse-lite/data/features/dragndrop.js create mode 100644 node_modules/caniuse-lite/data/features/element-closest.js create mode 100644 node_modules/caniuse-lite/data/features/element-from-point.js create mode 100644 node_modules/caniuse-lite/data/features/element-scroll-methods.js create mode 100644 node_modules/caniuse-lite/data/features/eme.js create mode 100644 node_modules/caniuse-lite/data/features/eot.js create mode 100644 node_modules/caniuse-lite/data/features/es5.js create mode 100644 node_modules/caniuse-lite/data/features/es6-class.js create mode 100644 node_modules/caniuse-lite/data/features/es6-generators.js create mode 100644 node_modules/caniuse-lite/data/features/es6-module-dynamic-import.js create mode 100644 node_modules/caniuse-lite/data/features/es6-module.js create mode 100644 node_modules/caniuse-lite/data/features/es6-number.js create mode 100644 node_modules/caniuse-lite/data/features/es6-string-includes.js create mode 100644 node_modules/caniuse-lite/data/features/es6.js create mode 100644 node_modules/caniuse-lite/data/features/eventsource.js create mode 100644 node_modules/caniuse-lite/data/features/extended-system-fonts.js create mode 100644 node_modules/caniuse-lite/data/features/feature-policy.js create mode 100644 node_modules/caniuse-lite/data/features/fetch.js create mode 100644 node_modules/caniuse-lite/data/features/fieldset-disabled.js create mode 100644 node_modules/caniuse-lite/data/features/fileapi.js create mode 100644 node_modules/caniuse-lite/data/features/filereader.js create mode 100644 node_modules/caniuse-lite/data/features/filereadersync.js create mode 100644 node_modules/caniuse-lite/data/features/filesystem.js create mode 100644 node_modules/caniuse-lite/data/features/flac.js create mode 100644 node_modules/caniuse-lite/data/features/flexbox-gap.js create mode 100644 node_modules/caniuse-lite/data/features/flexbox.js create mode 100644 node_modules/caniuse-lite/data/features/flow-root.js create mode 100644 node_modules/caniuse-lite/data/features/focusin-focusout-events.js create mode 100644 node_modules/caniuse-lite/data/features/font-family-system-ui.js create mode 100644 node_modules/caniuse-lite/data/features/font-feature.js create mode 100644 node_modules/caniuse-lite/data/features/font-kerning.js create mode 100644 node_modules/caniuse-lite/data/features/font-loading.js create mode 100644 node_modules/caniuse-lite/data/features/font-size-adjust.js create mode 100644 node_modules/caniuse-lite/data/features/font-smooth.js create mode 100644 node_modules/caniuse-lite/data/features/font-unicode-range.js create mode 100644 node_modules/caniuse-lite/data/features/font-variant-alternates.js create mode 100644 node_modules/caniuse-lite/data/features/font-variant-numeric.js create mode 100644 node_modules/caniuse-lite/data/features/fontface.js create mode 100644 node_modules/caniuse-lite/data/features/form-attribute.js create mode 100644 node_modules/caniuse-lite/data/features/form-submit-attributes.js create mode 100644 node_modules/caniuse-lite/data/features/form-validation.js create mode 100644 node_modules/caniuse-lite/data/features/forms.js create mode 100644 node_modules/caniuse-lite/data/features/fullscreen.js create mode 100644 node_modules/caniuse-lite/data/features/gamepad.js create mode 100644 node_modules/caniuse-lite/data/features/geolocation.js create mode 100644 node_modules/caniuse-lite/data/features/getboundingclientrect.js create mode 100644 node_modules/caniuse-lite/data/features/getcomputedstyle.js create mode 100644 node_modules/caniuse-lite/data/features/getelementsbyclassname.js create mode 100644 node_modules/caniuse-lite/data/features/getrandomvalues.js create mode 100644 node_modules/caniuse-lite/data/features/gyroscope.js create mode 100644 node_modules/caniuse-lite/data/features/hardwareconcurrency.js create mode 100644 node_modules/caniuse-lite/data/features/hashchange.js create mode 100644 node_modules/caniuse-lite/data/features/heif.js create mode 100644 node_modules/caniuse-lite/data/features/hevc.js create mode 100644 node_modules/caniuse-lite/data/features/hidden.js create mode 100644 node_modules/caniuse-lite/data/features/high-resolution-time.js create mode 100644 node_modules/caniuse-lite/data/features/history.js create mode 100644 node_modules/caniuse-lite/data/features/html-media-capture.js create mode 100644 node_modules/caniuse-lite/data/features/html5semantic.js create mode 100644 node_modules/caniuse-lite/data/features/http-live-streaming.js create mode 100644 node_modules/caniuse-lite/data/features/http2.js create mode 100644 node_modules/caniuse-lite/data/features/http3.js create mode 100644 node_modules/caniuse-lite/data/features/iframe-sandbox.js create mode 100644 node_modules/caniuse-lite/data/features/iframe-seamless.js create mode 100644 node_modules/caniuse-lite/data/features/iframe-srcdoc.js create mode 100644 node_modules/caniuse-lite/data/features/imagecapture.js create mode 100644 node_modules/caniuse-lite/data/features/ime.js create mode 100644 node_modules/caniuse-lite/data/features/img-naturalwidth-naturalheight.js create mode 100644 node_modules/caniuse-lite/data/features/import-maps.js create mode 100644 node_modules/caniuse-lite/data/features/imports.js create mode 100644 node_modules/caniuse-lite/data/features/indeterminate-checkbox.js create mode 100644 node_modules/caniuse-lite/data/features/indexeddb.js create mode 100644 node_modules/caniuse-lite/data/features/indexeddb2.js create mode 100644 node_modules/caniuse-lite/data/features/inline-block.js create mode 100644 node_modules/caniuse-lite/data/features/innertext.js create mode 100644 node_modules/caniuse-lite/data/features/input-autocomplete-onoff.js create mode 100644 node_modules/caniuse-lite/data/features/input-color.js create mode 100644 node_modules/caniuse-lite/data/features/input-datetime.js create mode 100644 node_modules/caniuse-lite/data/features/input-email-tel-url.js create mode 100644 node_modules/caniuse-lite/data/features/input-event.js create mode 100644 node_modules/caniuse-lite/data/features/input-file-accept.js create mode 100644 node_modules/caniuse-lite/data/features/input-file-directory.js create mode 100644 node_modules/caniuse-lite/data/features/input-file-multiple.js create mode 100644 node_modules/caniuse-lite/data/features/input-inputmode.js create mode 100644 node_modules/caniuse-lite/data/features/input-minlength.js create mode 100644 node_modules/caniuse-lite/data/features/input-number.js create mode 100644 node_modules/caniuse-lite/data/features/input-pattern.js create mode 100644 node_modules/caniuse-lite/data/features/input-placeholder.js create mode 100644 node_modules/caniuse-lite/data/features/input-range.js create mode 100644 node_modules/caniuse-lite/data/features/input-search.js create mode 100644 node_modules/caniuse-lite/data/features/input-selection.js create mode 100644 node_modules/caniuse-lite/data/features/insert-adjacent.js create mode 100644 node_modules/caniuse-lite/data/features/insertadjacenthtml.js create mode 100644 node_modules/caniuse-lite/data/features/internationalization.js create mode 100644 node_modules/caniuse-lite/data/features/intersectionobserver-v2.js create mode 100644 node_modules/caniuse-lite/data/features/intersectionobserver.js create mode 100644 node_modules/caniuse-lite/data/features/intl-pluralrules.js create mode 100644 node_modules/caniuse-lite/data/features/intrinsic-width.js create mode 100644 node_modules/caniuse-lite/data/features/jpeg2000.js create mode 100644 node_modules/caniuse-lite/data/features/jpegxl.js create mode 100644 node_modules/caniuse-lite/data/features/jpegxr.js create mode 100644 node_modules/caniuse-lite/data/features/js-regexp-lookbehind.js create mode 100644 node_modules/caniuse-lite/data/features/json.js create mode 100644 node_modules/caniuse-lite/data/features/justify-content-space-evenly.js create mode 100644 node_modules/caniuse-lite/data/features/kerning-pairs-ligatures.js create mode 100644 node_modules/caniuse-lite/data/features/keyboardevent-charcode.js create mode 100644 node_modules/caniuse-lite/data/features/keyboardevent-code.js create mode 100644 node_modules/caniuse-lite/data/features/keyboardevent-getmodifierstate.js create mode 100644 node_modules/caniuse-lite/data/features/keyboardevent-key.js create mode 100644 node_modules/caniuse-lite/data/features/keyboardevent-location.js create mode 100644 node_modules/caniuse-lite/data/features/keyboardevent-which.js create mode 100644 node_modules/caniuse-lite/data/features/lazyload.js create mode 100644 node_modules/caniuse-lite/data/features/let.js create mode 100644 node_modules/caniuse-lite/data/features/link-icon-png.js create mode 100644 node_modules/caniuse-lite/data/features/link-icon-svg.js create mode 100644 node_modules/caniuse-lite/data/features/link-rel-dns-prefetch.js create mode 100644 node_modules/caniuse-lite/data/features/link-rel-modulepreload.js create mode 100644 node_modules/caniuse-lite/data/features/link-rel-preconnect.js create mode 100644 node_modules/caniuse-lite/data/features/link-rel-prefetch.js create mode 100644 node_modules/caniuse-lite/data/features/link-rel-preload.js create mode 100644 node_modules/caniuse-lite/data/features/link-rel-prerender.js create mode 100644 node_modules/caniuse-lite/data/features/loading-lazy-attr.js create mode 100644 node_modules/caniuse-lite/data/features/localecompare.js create mode 100644 node_modules/caniuse-lite/data/features/magnetometer.js create mode 100644 node_modules/caniuse-lite/data/features/matchesselector.js create mode 100644 node_modules/caniuse-lite/data/features/matchmedia.js create mode 100644 node_modules/caniuse-lite/data/features/mathml.js create mode 100644 node_modules/caniuse-lite/data/features/maxlength.js create mode 100644 node_modules/caniuse-lite/data/features/mdn-css-backdrop-pseudo-element.js create mode 100644 node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate-override.js create mode 100644 node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate.js create mode 100644 node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-plaintext.js create mode 100644 node_modules/caniuse-lite/data/features/mdn-text-decoration-color.js create mode 100644 node_modules/caniuse-lite/data/features/mdn-text-decoration-line.js create mode 100644 node_modules/caniuse-lite/data/features/mdn-text-decoration-shorthand.js create mode 100644 node_modules/caniuse-lite/data/features/mdn-text-decoration-style.js create mode 100644 node_modules/caniuse-lite/data/features/media-fragments.js create mode 100644 node_modules/caniuse-lite/data/features/mediacapture-fromelement.js create mode 100644 node_modules/caniuse-lite/data/features/mediarecorder.js create mode 100644 node_modules/caniuse-lite/data/features/mediasource.js create mode 100644 node_modules/caniuse-lite/data/features/menu.js create mode 100644 node_modules/caniuse-lite/data/features/meta-theme-color.js create mode 100644 node_modules/caniuse-lite/data/features/meter.js create mode 100644 node_modules/caniuse-lite/data/features/midi.js create mode 100644 node_modules/caniuse-lite/data/features/minmaxwh.js create mode 100644 node_modules/caniuse-lite/data/features/mp3.js create mode 100644 node_modules/caniuse-lite/data/features/mpeg-dash.js create mode 100644 node_modules/caniuse-lite/data/features/mpeg4.js create mode 100644 node_modules/caniuse-lite/data/features/multibackgrounds.js create mode 100644 node_modules/caniuse-lite/data/features/multicolumn.js create mode 100644 node_modules/caniuse-lite/data/features/mutation-events.js create mode 100644 node_modules/caniuse-lite/data/features/mutationobserver.js create mode 100644 node_modules/caniuse-lite/data/features/namevalue-storage.js create mode 100644 node_modules/caniuse-lite/data/features/native-filesystem-api.js create mode 100644 node_modules/caniuse-lite/data/features/nav-timing.js create mode 100644 node_modules/caniuse-lite/data/features/netinfo.js create mode 100644 node_modules/caniuse-lite/data/features/notifications.js create mode 100644 node_modules/caniuse-lite/data/features/object-entries.js create mode 100644 node_modules/caniuse-lite/data/features/object-fit.js create mode 100644 node_modules/caniuse-lite/data/features/object-observe.js create mode 100644 node_modules/caniuse-lite/data/features/object-values.js create mode 100644 node_modules/caniuse-lite/data/features/objectrtc.js create mode 100644 node_modules/caniuse-lite/data/features/offline-apps.js create mode 100644 node_modules/caniuse-lite/data/features/offscreencanvas.js create mode 100644 node_modules/caniuse-lite/data/features/ogg-vorbis.js create mode 100644 node_modules/caniuse-lite/data/features/ogv.js create mode 100644 node_modules/caniuse-lite/data/features/ol-reversed.js create mode 100644 node_modules/caniuse-lite/data/features/once-event-listener.js create mode 100644 node_modules/caniuse-lite/data/features/online-status.js create mode 100644 node_modules/caniuse-lite/data/features/opus.js create mode 100644 node_modules/caniuse-lite/data/features/orientation-sensor.js create mode 100644 node_modules/caniuse-lite/data/features/outline.js create mode 100644 node_modules/caniuse-lite/data/features/pad-start-end.js create mode 100644 node_modules/caniuse-lite/data/features/page-transition-events.js create mode 100644 node_modules/caniuse-lite/data/features/pagevisibility.js create mode 100644 node_modules/caniuse-lite/data/features/passive-event-listener.js create mode 100644 node_modules/caniuse-lite/data/features/passkeys.js create mode 100644 node_modules/caniuse-lite/data/features/passwordrules.js create mode 100644 node_modules/caniuse-lite/data/features/path2d.js create mode 100644 node_modules/caniuse-lite/data/features/payment-request.js create mode 100644 node_modules/caniuse-lite/data/features/pdf-viewer.js create mode 100644 node_modules/caniuse-lite/data/features/permissions-api.js create mode 100644 node_modules/caniuse-lite/data/features/permissions-policy.js create mode 100644 node_modules/caniuse-lite/data/features/picture-in-picture.js create mode 100644 node_modules/caniuse-lite/data/features/picture.js create mode 100644 node_modules/caniuse-lite/data/features/ping.js create mode 100644 node_modules/caniuse-lite/data/features/png-alpha.js create mode 100644 node_modules/caniuse-lite/data/features/pointer-events.js create mode 100644 node_modules/caniuse-lite/data/features/pointer.js create mode 100644 node_modules/caniuse-lite/data/features/pointerlock.js create mode 100644 node_modules/caniuse-lite/data/features/portals.js create mode 100644 node_modules/caniuse-lite/data/features/prefers-color-scheme.js create mode 100644 node_modules/caniuse-lite/data/features/prefers-reduced-motion.js create mode 100644 node_modules/caniuse-lite/data/features/progress.js create mode 100644 node_modules/caniuse-lite/data/features/promise-finally.js create mode 100644 node_modules/caniuse-lite/data/features/promises.js create mode 100644 node_modules/caniuse-lite/data/features/proximity.js create mode 100644 node_modules/caniuse-lite/data/features/proxy.js create mode 100644 node_modules/caniuse-lite/data/features/publickeypinning.js create mode 100644 node_modules/caniuse-lite/data/features/push-api.js create mode 100644 node_modules/caniuse-lite/data/features/queryselector.js create mode 100644 node_modules/caniuse-lite/data/features/readonly-attr.js create mode 100644 node_modules/caniuse-lite/data/features/referrer-policy.js create mode 100644 node_modules/caniuse-lite/data/features/registerprotocolhandler.js create mode 100644 node_modules/caniuse-lite/data/features/rel-noopener.js create mode 100644 node_modules/caniuse-lite/data/features/rel-noreferrer.js create mode 100644 node_modules/caniuse-lite/data/features/rellist.js create mode 100644 node_modules/caniuse-lite/data/features/rem.js create mode 100644 node_modules/caniuse-lite/data/features/requestanimationframe.js create mode 100644 node_modules/caniuse-lite/data/features/requestidlecallback.js create mode 100644 node_modules/caniuse-lite/data/features/resizeobserver.js create mode 100644 node_modules/caniuse-lite/data/features/resource-timing.js create mode 100644 node_modules/caniuse-lite/data/features/rest-parameters.js create mode 100644 node_modules/caniuse-lite/data/features/rtcpeerconnection.js create mode 100644 node_modules/caniuse-lite/data/features/ruby.js create mode 100644 node_modules/caniuse-lite/data/features/run-in.js create mode 100644 node_modules/caniuse-lite/data/features/same-site-cookie-attribute.js create mode 100644 node_modules/caniuse-lite/data/features/screen-orientation.js create mode 100644 node_modules/caniuse-lite/data/features/script-async.js create mode 100644 node_modules/caniuse-lite/data/features/script-defer.js create mode 100644 node_modules/caniuse-lite/data/features/scrollintoview.js create mode 100644 node_modules/caniuse-lite/data/features/scrollintoviewifneeded.js create mode 100644 node_modules/caniuse-lite/data/features/sdch.js create mode 100644 node_modules/caniuse-lite/data/features/selection-api.js create mode 100644 node_modules/caniuse-lite/data/features/selectlist.js create mode 100644 node_modules/caniuse-lite/data/features/server-timing.js create mode 100644 node_modules/caniuse-lite/data/features/serviceworkers.js create mode 100644 node_modules/caniuse-lite/data/features/setimmediate.js create mode 100644 node_modules/caniuse-lite/data/features/shadowdom.js create mode 100644 node_modules/caniuse-lite/data/features/shadowdomv1.js create mode 100644 node_modules/caniuse-lite/data/features/sharedarraybuffer.js create mode 100644 node_modules/caniuse-lite/data/features/sharedworkers.js create mode 100644 node_modules/caniuse-lite/data/features/sni.js create mode 100644 node_modules/caniuse-lite/data/features/spdy.js create mode 100644 node_modules/caniuse-lite/data/features/speech-recognition.js create mode 100644 node_modules/caniuse-lite/data/features/speech-synthesis.js create mode 100644 node_modules/caniuse-lite/data/features/spellcheck-attribute.js create mode 100644 node_modules/caniuse-lite/data/features/sql-storage.js create mode 100644 node_modules/caniuse-lite/data/features/srcset.js create mode 100644 node_modules/caniuse-lite/data/features/stream.js create mode 100644 node_modules/caniuse-lite/data/features/streams.js create mode 100644 node_modules/caniuse-lite/data/features/stricttransportsecurity.js create mode 100644 node_modules/caniuse-lite/data/features/style-scoped.js create mode 100644 node_modules/caniuse-lite/data/features/subresource-bundling.js create mode 100644 node_modules/caniuse-lite/data/features/subresource-integrity.js create mode 100644 node_modules/caniuse-lite/data/features/svg-css.js create mode 100644 node_modules/caniuse-lite/data/features/svg-filters.js create mode 100644 node_modules/caniuse-lite/data/features/svg-fonts.js create mode 100644 node_modules/caniuse-lite/data/features/svg-fragment.js create mode 100644 node_modules/caniuse-lite/data/features/svg-html.js create mode 100644 node_modules/caniuse-lite/data/features/svg-html5.js create mode 100644 node_modules/caniuse-lite/data/features/svg-img.js create mode 100644 node_modules/caniuse-lite/data/features/svg-smil.js create mode 100644 node_modules/caniuse-lite/data/features/svg.js create mode 100644 node_modules/caniuse-lite/data/features/sxg.js create mode 100644 node_modules/caniuse-lite/data/features/tabindex-attr.js create mode 100644 node_modules/caniuse-lite/data/features/template-literals.js create mode 100644 node_modules/caniuse-lite/data/features/template.js create mode 100644 node_modules/caniuse-lite/data/features/temporal.js create mode 100644 node_modules/caniuse-lite/data/features/testfeat.js create mode 100644 node_modules/caniuse-lite/data/features/text-decoration.js create mode 100644 node_modules/caniuse-lite/data/features/text-emphasis.js create mode 100644 node_modules/caniuse-lite/data/features/text-overflow.js create mode 100644 node_modules/caniuse-lite/data/features/text-size-adjust.js create mode 100644 node_modules/caniuse-lite/data/features/text-stroke.js create mode 100644 node_modules/caniuse-lite/data/features/textcontent.js create mode 100644 node_modules/caniuse-lite/data/features/textencoder.js create mode 100644 node_modules/caniuse-lite/data/features/tls1-1.js create mode 100644 node_modules/caniuse-lite/data/features/tls1-2.js create mode 100644 node_modules/caniuse-lite/data/features/tls1-3.js create mode 100644 node_modules/caniuse-lite/data/features/touch.js create mode 100644 node_modules/caniuse-lite/data/features/transforms2d.js create mode 100644 node_modules/caniuse-lite/data/features/transforms3d.js create mode 100644 node_modules/caniuse-lite/data/features/trusted-types.js create mode 100644 node_modules/caniuse-lite/data/features/ttf.js create mode 100644 node_modules/caniuse-lite/data/features/typedarrays.js create mode 100644 node_modules/caniuse-lite/data/features/u2f.js create mode 100644 node_modules/caniuse-lite/data/features/unhandledrejection.js create mode 100644 node_modules/caniuse-lite/data/features/upgradeinsecurerequests.js create mode 100644 node_modules/caniuse-lite/data/features/url-scroll-to-text-fragment.js create mode 100644 node_modules/caniuse-lite/data/features/url.js create mode 100644 node_modules/caniuse-lite/data/features/urlsearchparams.js create mode 100644 node_modules/caniuse-lite/data/features/use-strict.js create mode 100644 node_modules/caniuse-lite/data/features/user-select-none.js create mode 100644 node_modules/caniuse-lite/data/features/user-timing.js create mode 100644 node_modules/caniuse-lite/data/features/variable-fonts.js create mode 100644 node_modules/caniuse-lite/data/features/vector-effect.js create mode 100644 node_modules/caniuse-lite/data/features/vibration.js create mode 100644 node_modules/caniuse-lite/data/features/video.js create mode 100644 node_modules/caniuse-lite/data/features/videotracks.js create mode 100644 node_modules/caniuse-lite/data/features/view-transitions.js create mode 100644 node_modules/caniuse-lite/data/features/viewport-unit-variants.js create mode 100644 node_modules/caniuse-lite/data/features/viewport-units.js create mode 100644 node_modules/caniuse-lite/data/features/wai-aria.js create mode 100644 node_modules/caniuse-lite/data/features/wake-lock.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-bigint.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-bulk-memory.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-extended-const.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-gc.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-multi-memory.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-multi-value.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-mutable-globals.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-nontrapping-fptoint.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-reference-types.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-relaxed-simd.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-signext.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-simd.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-tail-calls.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-threads.js create mode 100644 node_modules/caniuse-lite/data/features/wasm.js create mode 100644 node_modules/caniuse-lite/data/features/wav.js create mode 100644 node_modules/caniuse-lite/data/features/wbr-element.js create mode 100644 node_modules/caniuse-lite/data/features/web-animation.js create mode 100644 node_modules/caniuse-lite/data/features/web-app-manifest.js create mode 100644 node_modules/caniuse-lite/data/features/web-bluetooth.js create mode 100644 node_modules/caniuse-lite/data/features/web-serial.js create mode 100644 node_modules/caniuse-lite/data/features/web-share.js create mode 100644 node_modules/caniuse-lite/data/features/webauthn.js create mode 100644 node_modules/caniuse-lite/data/features/webcodecs.js create mode 100644 node_modules/caniuse-lite/data/features/webgl.js create mode 100644 node_modules/caniuse-lite/data/features/webgl2.js create mode 100644 node_modules/caniuse-lite/data/features/webgpu.js create mode 100644 node_modules/caniuse-lite/data/features/webhid.js create mode 100644 node_modules/caniuse-lite/data/features/webkit-user-drag.js create mode 100644 node_modules/caniuse-lite/data/features/webm.js create mode 100644 node_modules/caniuse-lite/data/features/webnfc.js create mode 100644 node_modules/caniuse-lite/data/features/webp.js create mode 100644 node_modules/caniuse-lite/data/features/websockets.js create mode 100644 node_modules/caniuse-lite/data/features/webtransport.js create mode 100644 node_modules/caniuse-lite/data/features/webusb.js create mode 100644 node_modules/caniuse-lite/data/features/webvr.js create mode 100644 node_modules/caniuse-lite/data/features/webvtt.js create mode 100644 node_modules/caniuse-lite/data/features/webworkers.js create mode 100644 node_modules/caniuse-lite/data/features/webxr.js create mode 100644 node_modules/caniuse-lite/data/features/will-change.js create mode 100644 node_modules/caniuse-lite/data/features/woff.js create mode 100644 node_modules/caniuse-lite/data/features/woff2.js create mode 100644 node_modules/caniuse-lite/data/features/word-break.js create mode 100644 node_modules/caniuse-lite/data/features/wordwrap.js create mode 100644 node_modules/caniuse-lite/data/features/x-doc-messaging.js create mode 100644 node_modules/caniuse-lite/data/features/x-frame-options.js create mode 100644 node_modules/caniuse-lite/data/features/xhr2.js create mode 100644 node_modules/caniuse-lite/data/features/xhtml.js create mode 100644 node_modules/caniuse-lite/data/features/xhtmlsmil.js create mode 100644 node_modules/caniuse-lite/data/features/xml-serializer.js create mode 100644 node_modules/caniuse-lite/data/features/zstd.js create mode 100644 node_modules/caniuse-lite/data/regions/AD.js create mode 100644 node_modules/caniuse-lite/data/regions/AE.js create mode 100644 node_modules/caniuse-lite/data/regions/AF.js create mode 100644 node_modules/caniuse-lite/data/regions/AG.js create mode 100644 node_modules/caniuse-lite/data/regions/AI.js create mode 100644 node_modules/caniuse-lite/data/regions/AL.js create mode 100644 node_modules/caniuse-lite/data/regions/AM.js create mode 100644 node_modules/caniuse-lite/data/regions/AO.js create mode 100644 node_modules/caniuse-lite/data/regions/AR.js create mode 100644 node_modules/caniuse-lite/data/regions/AS.js create mode 100644 node_modules/caniuse-lite/data/regions/AT.js create mode 100644 node_modules/caniuse-lite/data/regions/AU.js create mode 100644 node_modules/caniuse-lite/data/regions/AW.js create mode 100644 node_modules/caniuse-lite/data/regions/AX.js create mode 100644 node_modules/caniuse-lite/data/regions/AZ.js create mode 100644 node_modules/caniuse-lite/data/regions/BA.js create mode 100644 node_modules/caniuse-lite/data/regions/BB.js create mode 100644 node_modules/caniuse-lite/data/regions/BD.js create mode 100644 node_modules/caniuse-lite/data/regions/BE.js create mode 100644 node_modules/caniuse-lite/data/regions/BF.js create mode 100644 node_modules/caniuse-lite/data/regions/BG.js create mode 100644 node_modules/caniuse-lite/data/regions/BH.js create mode 100644 node_modules/caniuse-lite/data/regions/BI.js create mode 100644 node_modules/caniuse-lite/data/regions/BJ.js create mode 100644 node_modules/caniuse-lite/data/regions/BM.js create mode 100644 node_modules/caniuse-lite/data/regions/BN.js create mode 100644 node_modules/caniuse-lite/data/regions/BO.js create mode 100644 node_modules/caniuse-lite/data/regions/BR.js create mode 100644 node_modules/caniuse-lite/data/regions/BS.js create mode 100644 node_modules/caniuse-lite/data/regions/BT.js create mode 100644 node_modules/caniuse-lite/data/regions/BW.js create mode 100644 node_modules/caniuse-lite/data/regions/BY.js create mode 100644 node_modules/caniuse-lite/data/regions/BZ.js create mode 100644 node_modules/caniuse-lite/data/regions/CA.js create mode 100644 node_modules/caniuse-lite/data/regions/CD.js create mode 100644 node_modules/caniuse-lite/data/regions/CF.js create mode 100644 node_modules/caniuse-lite/data/regions/CG.js create mode 100644 node_modules/caniuse-lite/data/regions/CH.js create mode 100644 node_modules/caniuse-lite/data/regions/CI.js create mode 100644 node_modules/caniuse-lite/data/regions/CK.js create mode 100644 node_modules/caniuse-lite/data/regions/CL.js create mode 100644 node_modules/caniuse-lite/data/regions/CM.js create mode 100644 node_modules/caniuse-lite/data/regions/CN.js create mode 100644 node_modules/caniuse-lite/data/regions/CO.js create mode 100644 node_modules/caniuse-lite/data/regions/CR.js create mode 100644 node_modules/caniuse-lite/data/regions/CU.js create mode 100644 node_modules/caniuse-lite/data/regions/CV.js create mode 100644 node_modules/caniuse-lite/data/regions/CX.js create mode 100644 node_modules/caniuse-lite/data/regions/CY.js create mode 100644 node_modules/caniuse-lite/data/regions/CZ.js create mode 100644 node_modules/caniuse-lite/data/regions/DE.js create mode 100644 node_modules/caniuse-lite/data/regions/DJ.js create mode 100644 node_modules/caniuse-lite/data/regions/DK.js create mode 100644 node_modules/caniuse-lite/data/regions/DM.js create mode 100644 node_modules/caniuse-lite/data/regions/DO.js create mode 100644 node_modules/caniuse-lite/data/regions/DZ.js create mode 100644 node_modules/caniuse-lite/data/regions/EC.js create mode 100644 node_modules/caniuse-lite/data/regions/EE.js create mode 100644 node_modules/caniuse-lite/data/regions/EG.js create mode 100644 node_modules/caniuse-lite/data/regions/ER.js create mode 100644 node_modules/caniuse-lite/data/regions/ES.js create mode 100644 node_modules/caniuse-lite/data/regions/ET.js create mode 100644 node_modules/caniuse-lite/data/regions/FI.js create mode 100644 node_modules/caniuse-lite/data/regions/FJ.js create mode 100644 node_modules/caniuse-lite/data/regions/FK.js create mode 100644 node_modules/caniuse-lite/data/regions/FM.js create mode 100644 node_modules/caniuse-lite/data/regions/FO.js create mode 100644 node_modules/caniuse-lite/data/regions/FR.js create mode 100644 node_modules/caniuse-lite/data/regions/GA.js create mode 100644 node_modules/caniuse-lite/data/regions/GB.js create mode 100644 node_modules/caniuse-lite/data/regions/GD.js create mode 100644 node_modules/caniuse-lite/data/regions/GE.js create mode 100644 node_modules/caniuse-lite/data/regions/GF.js create mode 100644 node_modules/caniuse-lite/data/regions/GG.js create mode 100644 node_modules/caniuse-lite/data/regions/GH.js create mode 100644 node_modules/caniuse-lite/data/regions/GI.js create mode 100644 node_modules/caniuse-lite/data/regions/GL.js create mode 100644 node_modules/caniuse-lite/data/regions/GM.js create mode 100644 node_modules/caniuse-lite/data/regions/GN.js create mode 100644 node_modules/caniuse-lite/data/regions/GP.js create mode 100644 node_modules/caniuse-lite/data/regions/GQ.js create mode 100644 node_modules/caniuse-lite/data/regions/GR.js create mode 100644 node_modules/caniuse-lite/data/regions/GT.js create mode 100644 node_modules/caniuse-lite/data/regions/GU.js create mode 100644 node_modules/caniuse-lite/data/regions/GW.js create mode 100644 node_modules/caniuse-lite/data/regions/GY.js create mode 100644 node_modules/caniuse-lite/data/regions/HK.js create mode 100644 node_modules/caniuse-lite/data/regions/HN.js create mode 100644 node_modules/caniuse-lite/data/regions/HR.js create mode 100644 node_modules/caniuse-lite/data/regions/HT.js create mode 100644 node_modules/caniuse-lite/data/regions/HU.js create mode 100644 node_modules/caniuse-lite/data/regions/ID.js create mode 100644 node_modules/caniuse-lite/data/regions/IE.js create mode 100644 node_modules/caniuse-lite/data/regions/IL.js create mode 100644 node_modules/caniuse-lite/data/regions/IM.js create mode 100644 node_modules/caniuse-lite/data/regions/IN.js create mode 100644 node_modules/caniuse-lite/data/regions/IQ.js create mode 100644 node_modules/caniuse-lite/data/regions/IR.js create mode 100644 node_modules/caniuse-lite/data/regions/IS.js create mode 100644 node_modules/caniuse-lite/data/regions/IT.js create mode 100644 node_modules/caniuse-lite/data/regions/JE.js create mode 100644 node_modules/caniuse-lite/data/regions/JM.js create mode 100644 node_modules/caniuse-lite/data/regions/JO.js create mode 100644 node_modules/caniuse-lite/data/regions/JP.js create mode 100644 node_modules/caniuse-lite/data/regions/KE.js create mode 100644 node_modules/caniuse-lite/data/regions/KG.js create mode 100644 node_modules/caniuse-lite/data/regions/KH.js create mode 100644 node_modules/caniuse-lite/data/regions/KI.js create mode 100644 node_modules/caniuse-lite/data/regions/KM.js create mode 100644 node_modules/caniuse-lite/data/regions/KN.js create mode 100644 node_modules/caniuse-lite/data/regions/KP.js create mode 100644 node_modules/caniuse-lite/data/regions/KR.js create mode 100644 node_modules/caniuse-lite/data/regions/KW.js create mode 100644 node_modules/caniuse-lite/data/regions/KY.js create mode 100644 node_modules/caniuse-lite/data/regions/KZ.js create mode 100644 node_modules/caniuse-lite/data/regions/LA.js create mode 100644 node_modules/caniuse-lite/data/regions/LB.js create mode 100644 node_modules/caniuse-lite/data/regions/LC.js create mode 100644 node_modules/caniuse-lite/data/regions/LI.js create mode 100644 node_modules/caniuse-lite/data/regions/LK.js create mode 100644 node_modules/caniuse-lite/data/regions/LR.js create mode 100644 node_modules/caniuse-lite/data/regions/LS.js create mode 100644 node_modules/caniuse-lite/data/regions/LT.js create mode 100644 node_modules/caniuse-lite/data/regions/LU.js create mode 100644 node_modules/caniuse-lite/data/regions/LV.js create mode 100644 node_modules/caniuse-lite/data/regions/LY.js create mode 100644 node_modules/caniuse-lite/data/regions/MA.js create mode 100644 node_modules/caniuse-lite/data/regions/MC.js create mode 100644 node_modules/caniuse-lite/data/regions/MD.js create mode 100644 node_modules/caniuse-lite/data/regions/ME.js create mode 100644 node_modules/caniuse-lite/data/regions/MG.js create mode 100644 node_modules/caniuse-lite/data/regions/MH.js create mode 100644 node_modules/caniuse-lite/data/regions/MK.js create mode 100644 node_modules/caniuse-lite/data/regions/ML.js create mode 100644 node_modules/caniuse-lite/data/regions/MM.js create mode 100644 node_modules/caniuse-lite/data/regions/MN.js create mode 100644 node_modules/caniuse-lite/data/regions/MO.js create mode 100644 node_modules/caniuse-lite/data/regions/MP.js create mode 100644 node_modules/caniuse-lite/data/regions/MQ.js create mode 100644 node_modules/caniuse-lite/data/regions/MR.js create mode 100644 node_modules/caniuse-lite/data/regions/MS.js create mode 100644 node_modules/caniuse-lite/data/regions/MT.js create mode 100644 node_modules/caniuse-lite/data/regions/MU.js create mode 100644 node_modules/caniuse-lite/data/regions/MV.js create mode 100644 node_modules/caniuse-lite/data/regions/MW.js create mode 100644 node_modules/caniuse-lite/data/regions/MX.js create mode 100644 node_modules/caniuse-lite/data/regions/MY.js create mode 100644 node_modules/caniuse-lite/data/regions/MZ.js create mode 100644 node_modules/caniuse-lite/data/regions/NA.js create mode 100644 node_modules/caniuse-lite/data/regions/NC.js create mode 100644 node_modules/caniuse-lite/data/regions/NE.js create mode 100644 node_modules/caniuse-lite/data/regions/NF.js create mode 100644 node_modules/caniuse-lite/data/regions/NG.js create mode 100644 node_modules/caniuse-lite/data/regions/NI.js create mode 100644 node_modules/caniuse-lite/data/regions/NL.js create mode 100644 node_modules/caniuse-lite/data/regions/NO.js create mode 100644 node_modules/caniuse-lite/data/regions/NP.js create mode 100644 node_modules/caniuse-lite/data/regions/NR.js create mode 100644 node_modules/caniuse-lite/data/regions/NU.js create mode 100644 node_modules/caniuse-lite/data/regions/NZ.js create mode 100644 node_modules/caniuse-lite/data/regions/OM.js create mode 100644 node_modules/caniuse-lite/data/regions/PA.js create mode 100644 node_modules/caniuse-lite/data/regions/PE.js create mode 100644 node_modules/caniuse-lite/data/regions/PF.js create mode 100644 node_modules/caniuse-lite/data/regions/PG.js create mode 100644 node_modules/caniuse-lite/data/regions/PH.js create mode 100644 node_modules/caniuse-lite/data/regions/PK.js create mode 100644 node_modules/caniuse-lite/data/regions/PL.js create mode 100644 node_modules/caniuse-lite/data/regions/PM.js create mode 100644 node_modules/caniuse-lite/data/regions/PN.js create mode 100644 node_modules/caniuse-lite/data/regions/PR.js create mode 100644 node_modules/caniuse-lite/data/regions/PS.js create mode 100644 node_modules/caniuse-lite/data/regions/PT.js create mode 100644 node_modules/caniuse-lite/data/regions/PW.js create mode 100644 node_modules/caniuse-lite/data/regions/PY.js create mode 100644 node_modules/caniuse-lite/data/regions/QA.js create mode 100644 node_modules/caniuse-lite/data/regions/RE.js create mode 100644 node_modules/caniuse-lite/data/regions/RO.js create mode 100644 node_modules/caniuse-lite/data/regions/RS.js create mode 100644 node_modules/caniuse-lite/data/regions/RU.js create mode 100644 node_modules/caniuse-lite/data/regions/RW.js create mode 100644 node_modules/caniuse-lite/data/regions/SA.js create mode 100644 node_modules/caniuse-lite/data/regions/SB.js create mode 100644 node_modules/caniuse-lite/data/regions/SC.js create mode 100644 node_modules/caniuse-lite/data/regions/SD.js create mode 100644 node_modules/caniuse-lite/data/regions/SE.js create mode 100644 node_modules/caniuse-lite/data/regions/SG.js create mode 100644 node_modules/caniuse-lite/data/regions/SH.js create mode 100644 node_modules/caniuse-lite/data/regions/SI.js create mode 100644 node_modules/caniuse-lite/data/regions/SK.js create mode 100644 node_modules/caniuse-lite/data/regions/SL.js create mode 100644 node_modules/caniuse-lite/data/regions/SM.js create mode 100644 node_modules/caniuse-lite/data/regions/SN.js create mode 100644 node_modules/caniuse-lite/data/regions/SO.js create mode 100644 node_modules/caniuse-lite/data/regions/SR.js create mode 100644 node_modules/caniuse-lite/data/regions/ST.js create mode 100644 node_modules/caniuse-lite/data/regions/SV.js create mode 100644 node_modules/caniuse-lite/data/regions/SY.js create mode 100644 node_modules/caniuse-lite/data/regions/SZ.js create mode 100644 node_modules/caniuse-lite/data/regions/TC.js create mode 100644 node_modules/caniuse-lite/data/regions/TD.js create mode 100644 node_modules/caniuse-lite/data/regions/TG.js create mode 100644 node_modules/caniuse-lite/data/regions/TH.js create mode 100644 node_modules/caniuse-lite/data/regions/TJ.js create mode 100644 node_modules/caniuse-lite/data/regions/TL.js create mode 100644 node_modules/caniuse-lite/data/regions/TM.js create mode 100644 node_modules/caniuse-lite/data/regions/TN.js create mode 100644 node_modules/caniuse-lite/data/regions/TO.js create mode 100644 node_modules/caniuse-lite/data/regions/TR.js create mode 100644 node_modules/caniuse-lite/data/regions/TT.js create mode 100644 node_modules/caniuse-lite/data/regions/TV.js create mode 100644 node_modules/caniuse-lite/data/regions/TW.js create mode 100644 node_modules/caniuse-lite/data/regions/TZ.js create mode 100644 node_modules/caniuse-lite/data/regions/UA.js create mode 100644 node_modules/caniuse-lite/data/regions/UG.js create mode 100644 node_modules/caniuse-lite/data/regions/US.js create mode 100644 node_modules/caniuse-lite/data/regions/UY.js create mode 100644 node_modules/caniuse-lite/data/regions/UZ.js create mode 100644 node_modules/caniuse-lite/data/regions/VA.js create mode 100644 node_modules/caniuse-lite/data/regions/VC.js create mode 100644 node_modules/caniuse-lite/data/regions/VE.js create mode 100644 node_modules/caniuse-lite/data/regions/VG.js create mode 100644 node_modules/caniuse-lite/data/regions/VI.js create mode 100644 node_modules/caniuse-lite/data/regions/VN.js create mode 100644 node_modules/caniuse-lite/data/regions/VU.js create mode 100644 node_modules/caniuse-lite/data/regions/WF.js create mode 100644 node_modules/caniuse-lite/data/regions/WS.js create mode 100644 node_modules/caniuse-lite/data/regions/YE.js create mode 100644 node_modules/caniuse-lite/data/regions/YT.js create mode 100644 node_modules/caniuse-lite/data/regions/ZA.js create mode 100644 node_modules/caniuse-lite/data/regions/ZM.js create mode 100644 node_modules/caniuse-lite/data/regions/ZW.js create mode 100644 node_modules/caniuse-lite/data/regions/alt-af.js create mode 100644 node_modules/caniuse-lite/data/regions/alt-an.js create mode 100644 node_modules/caniuse-lite/data/regions/alt-as.js create mode 100644 node_modules/caniuse-lite/data/regions/alt-eu.js create mode 100644 node_modules/caniuse-lite/data/regions/alt-na.js create mode 100644 node_modules/caniuse-lite/data/regions/alt-oc.js create mode 100644 node_modules/caniuse-lite/data/regions/alt-sa.js create mode 100644 node_modules/caniuse-lite/data/regions/alt-ww.js create mode 100644 node_modules/caniuse-lite/dist/lib/statuses.js create mode 100644 node_modules/caniuse-lite/dist/lib/supported.js create mode 100644 node_modules/caniuse-lite/dist/unpacker/agents.js create mode 100644 node_modules/caniuse-lite/dist/unpacker/browserVersions.js create mode 100644 node_modules/caniuse-lite/dist/unpacker/browsers.js create mode 100644 node_modules/caniuse-lite/dist/unpacker/feature.js create mode 100644 node_modules/caniuse-lite/dist/unpacker/features.js create mode 100644 node_modules/caniuse-lite/dist/unpacker/index.js create mode 100644 node_modules/caniuse-lite/dist/unpacker/region.js create mode 100644 node_modules/caniuse-lite/package.json create mode 100644 node_modules/chalk/index.d.ts create mode 100644 node_modules/chalk/license create mode 100644 node_modules/chalk/package.json create mode 100644 node_modules/chalk/readme.md create mode 100644 node_modules/chalk/source/index.js create mode 100644 node_modules/chalk/source/templates.js create mode 100644 node_modules/chalk/source/util.js create mode 100644 node_modules/char-regex/LICENSE create mode 100644 node_modules/char-regex/README.md create mode 100644 node_modules/char-regex/index.d.ts create mode 100644 node_modules/char-regex/index.js create mode 100644 node_modules/char-regex/package.json create mode 100644 node_modules/ci-info/CHANGELOG.md create mode 100644 node_modules/ci-info/LICENSE create mode 100644 node_modules/ci-info/README.md create mode 100644 node_modules/ci-info/index.d.ts create mode 100644 node_modules/ci-info/index.js create mode 100644 node_modules/ci-info/package.json create mode 100644 node_modules/ci-info/vendors.json create mode 100755 node_modules/cjs-module-lexer/LICENSE create mode 100755 node_modules/cjs-module-lexer/README.md create mode 100644 node_modules/cjs-module-lexer/dist/lexer.js create mode 100644 node_modules/cjs-module-lexer/dist/lexer.mjs create mode 100755 node_modules/cjs-module-lexer/lexer.d.ts create mode 100755 node_modules/cjs-module-lexer/lexer.js create mode 100755 node_modules/cjs-module-lexer/package.json create mode 100644 node_modules/cliui/CHANGELOG.md create mode 100644 node_modules/cliui/LICENSE.txt create mode 100644 node_modules/cliui/README.md create mode 100644 node_modules/cliui/build/index.cjs create mode 100644 node_modules/cliui/build/index.d.cts create mode 100644 node_modules/cliui/build/lib/index.js create mode 100644 node_modules/cliui/build/lib/string-utils.js create mode 100644 node_modules/cliui/index.mjs create mode 100644 node_modules/cliui/package.json create mode 100644 node_modules/co/History.md create mode 100644 node_modules/co/LICENSE create mode 100644 node_modules/co/Readme.md create mode 100644 node_modules/co/index.js create mode 100644 node_modules/co/package.json create mode 100644 node_modules/collect-v8-coverage/CHANGELOG.md create mode 100644 node_modules/collect-v8-coverage/LICENSE create mode 100644 node_modules/collect-v8-coverage/README.md create mode 100644 node_modules/collect-v8-coverage/index.d.ts create mode 100644 node_modules/collect-v8-coverage/index.js create mode 100644 node_modules/collect-v8-coverage/package.json create mode 100644 node_modules/color-convert/CHANGELOG.md create mode 100644 node_modules/color-convert/LICENSE create mode 100644 node_modules/color-convert/README.md create mode 100644 node_modules/color-convert/conversions.js create mode 100644 node_modules/color-convert/index.js create mode 100644 node_modules/color-convert/package.json create mode 100644 node_modules/color-convert/route.js create mode 100644 node_modules/color-name/LICENSE create mode 100644 node_modules/color-name/README.md create mode 100644 node_modules/color-name/index.js create mode 100644 node_modules/color-name/package.json 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/convert-source-map/LICENSE create mode 100644 node_modules/convert-source-map/README.md create mode 100644 node_modules/convert-source-map/index.js create mode 100644 node_modules/convert-source-map/package.json create mode 100644 node_modules/create-jest/LICENSE create mode 100644 node_modules/create-jest/README.md create mode 100755 node_modules/create-jest/bin/create-jest.js create mode 100644 node_modules/create-jest/build/errors.js create mode 100644 node_modules/create-jest/build/generateConfigFile.js create mode 100644 node_modules/create-jest/build/index.d.ts create mode 100644 node_modules/create-jest/build/index.js create mode 100644 node_modules/create-jest/build/modifyPackageJson.js create mode 100644 node_modules/create-jest/build/questions.js create mode 100644 node_modules/create-jest/build/runCreate.js create mode 100644 node_modules/create-jest/build/types.js create mode 100644 node_modules/create-jest/package.json create mode 100644 node_modules/cross-spawn/LICENSE create mode 100644 node_modules/cross-spawn/README.md create mode 100644 node_modules/cross-spawn/index.js create mode 100644 node_modules/cross-spawn/lib/enoent.js create mode 100644 node_modules/cross-spawn/lib/parse.js create mode 100644 node_modules/cross-spawn/lib/util/escape.js create mode 100644 node_modules/cross-spawn/lib/util/readShebang.js create mode 100644 node_modules/cross-spawn/lib/util/resolveCommand.js create mode 100644 node_modules/cross-spawn/package.json create mode 100644 node_modules/dedent/LICENSE.md create mode 100644 node_modules/dedent/README.md create mode 100644 node_modules/dedent/dist/dedent.d.mts create mode 100644 node_modules/dedent/dist/dedent.d.ts create mode 100644 node_modules/dedent/dist/dedent.js create mode 100644 node_modules/dedent/dist/dedent.mjs create mode 100644 node_modules/dedent/macro.js create mode 100644 node_modules/dedent/package.json create mode 100644 node_modules/deepmerge/.editorconfig create mode 100644 node_modules/deepmerge/.eslintcache create mode 100644 node_modules/deepmerge/changelog.md create mode 100644 node_modules/deepmerge/dist/cjs.js create mode 100644 node_modules/deepmerge/dist/umd.js create mode 100644 node_modules/deepmerge/index.d.ts create mode 100644 node_modules/deepmerge/index.js create mode 100644 node_modules/deepmerge/license.txt create mode 100644 node_modules/deepmerge/package.json create mode 100644 node_modules/deepmerge/readme.md create mode 100644 node_modules/deepmerge/rollup.config.js create mode 100644 node_modules/detect-newline/index.d.ts create mode 100644 node_modules/detect-newline/index.js create mode 100644 node_modules/detect-newline/license create mode 100644 node_modules/detect-newline/package.json create mode 100644 node_modules/detect-newline/readme.md create mode 100644 node_modules/diff-sequences/LICENSE create mode 100644 node_modules/diff-sequences/README.md create mode 100644 node_modules/diff-sequences/build/index.d.ts create mode 100644 node_modules/diff-sequences/build/index.js create mode 100644 node_modules/diff-sequences/package.json create mode 100644 node_modules/electron-to-chromium/LICENSE create mode 100644 node_modules/electron-to-chromium/README.md create mode 100644 node_modules/electron-to-chromium/chromium-versions.js create mode 100644 node_modules/electron-to-chromium/chromium-versions.json create mode 100644 node_modules/electron-to-chromium/full-chromium-versions.js create mode 100644 node_modules/electron-to-chromium/full-chromium-versions.json create mode 100644 node_modules/electron-to-chromium/full-versions.js create mode 100644 node_modules/electron-to-chromium/full-versions.json create mode 100644 node_modules/electron-to-chromium/index.js create mode 100644 node_modules/electron-to-chromium/package.json create mode 100644 node_modules/electron-to-chromium/versions.js create mode 100644 node_modules/electron-to-chromium/versions.json create mode 100644 node_modules/emittery/index.d.ts create mode 100644 node_modules/emittery/index.js create mode 100644 node_modules/emittery/license create mode 100644 node_modules/emittery/maps.js create mode 100644 node_modules/emittery/package.json create mode 100644 node_modules/emittery/readme.md create mode 100644 node_modules/emoji-regex/LICENSE-MIT.txt create mode 100644 node_modules/emoji-regex/README.md create mode 100644 node_modules/emoji-regex/es2015/index.js create mode 100644 node_modules/emoji-regex/es2015/text.js create mode 100644 node_modules/emoji-regex/index.d.ts create mode 100644 node_modules/emoji-regex/index.js create mode 100644 node_modules/emoji-regex/package.json create mode 100644 node_modules/emoji-regex/text.js create mode 100644 node_modules/error-ex/LICENSE create mode 100644 node_modules/error-ex/README.md create mode 100644 node_modules/error-ex/index.js create mode 100644 node_modules/error-ex/package.json create mode 100644 node_modules/escalade/dist/index.js create mode 100644 node_modules/escalade/dist/index.mjs create mode 100644 node_modules/escalade/index.d.mts create mode 100644 node_modules/escalade/index.d.ts create mode 100644 node_modules/escalade/license create mode 100644 node_modules/escalade/package.json create mode 100644 node_modules/escalade/readme.md create mode 100644 node_modules/escalade/sync/index.d.mts create mode 100644 node_modules/escalade/sync/index.d.ts create mode 100644 node_modules/escalade/sync/index.js create mode 100644 node_modules/escalade/sync/index.mjs 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/esprima/ChangeLog create mode 100644 node_modules/esprima/LICENSE.BSD create mode 100644 node_modules/esprima/README.md create mode 100755 node_modules/esprima/bin/esparse.js create mode 100755 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/execa/index.d.ts create mode 100644 node_modules/execa/index.js create mode 100644 node_modules/execa/lib/command.js create mode 100644 node_modules/execa/lib/error.js create mode 100644 node_modules/execa/lib/kill.js create mode 100644 node_modules/execa/lib/promise.js create mode 100644 node_modules/execa/lib/stdio.js create mode 100644 node_modules/execa/lib/stream.js create mode 100644 node_modules/execa/license create mode 100644 node_modules/execa/package.json create mode 100644 node_modules/execa/readme.md create mode 100644 node_modules/exit/.jshintrc create mode 100644 node_modules/exit/.npmignore create mode 100644 node_modules/exit/.travis.yml create mode 100644 node_modules/exit/Gruntfile.js create mode 100644 node_modules/exit/LICENSE-MIT create mode 100644 node_modules/exit/README.md create mode 100644 node_modules/exit/lib/exit.js create mode 100644 node_modules/exit/package.json create mode 100644 node_modules/exit/test/exit_test.js create mode 100644 node_modules/exit/test/fixtures/10-stderr.txt create mode 100644 node_modules/exit/test/fixtures/10-stdout-stderr.txt create mode 100644 node_modules/exit/test/fixtures/10-stdout.txt create mode 100644 node_modules/exit/test/fixtures/100-stderr.txt create mode 100644 node_modules/exit/test/fixtures/100-stdout-stderr.txt create mode 100644 node_modules/exit/test/fixtures/100-stdout.txt create mode 100644 node_modules/exit/test/fixtures/1000-stderr.txt create mode 100644 node_modules/exit/test/fixtures/1000-stdout-stderr.txt create mode 100644 node_modules/exit/test/fixtures/1000-stdout.txt create mode 100755 node_modules/exit/test/fixtures/create-files.sh create mode 100644 node_modules/exit/test/fixtures/log-broken.js create mode 100644 node_modules/exit/test/fixtures/log.js create mode 100644 node_modules/expect/LICENSE create mode 100644 node_modules/expect/README.md create mode 100644 node_modules/expect/build/asymmetricMatchers.js create mode 100644 node_modules/expect/build/extractExpectedAssertionsErrors.js create mode 100644 node_modules/expect/build/index.d.ts create mode 100644 node_modules/expect/build/index.js create mode 100644 node_modules/expect/build/jestMatchersObject.js create mode 100644 node_modules/expect/build/matchers.js create mode 100644 node_modules/expect/build/print.js create mode 100644 node_modules/expect/build/spyMatchers.js create mode 100644 node_modules/expect/build/toThrowMatchers.js create mode 100644 node_modules/expect/build/types.js create mode 100644 node_modules/expect/package.json create mode 100644 node_modules/fast-json-stable-stringify/.eslintrc.yml create mode 100644 node_modules/fast-json-stable-stringify/.github/FUNDING.yml create mode 100644 node_modules/fast-json-stable-stringify/.travis.yml create mode 100644 node_modules/fast-json-stable-stringify/LICENSE create mode 100644 node_modules/fast-json-stable-stringify/README.md create mode 100644 node_modules/fast-json-stable-stringify/benchmark/index.js create mode 100644 node_modules/fast-json-stable-stringify/benchmark/test.json create mode 100644 node_modules/fast-json-stable-stringify/example/key_cmp.js create mode 100644 node_modules/fast-json-stable-stringify/example/nested.js create mode 100644 node_modules/fast-json-stable-stringify/example/str.js create mode 100644 node_modules/fast-json-stable-stringify/example/value_cmp.js create mode 100644 node_modules/fast-json-stable-stringify/index.d.ts create mode 100644 node_modules/fast-json-stable-stringify/index.js create mode 100644 node_modules/fast-json-stable-stringify/package.json create mode 100644 node_modules/fast-json-stable-stringify/test/cmp.js create mode 100644 node_modules/fast-json-stable-stringify/test/nested.js create mode 100644 node_modules/fast-json-stable-stringify/test/str.js create mode 100644 node_modules/fast-json-stable-stringify/test/to-json.js create mode 100644 node_modules/fb-watchman/README.md create mode 100644 node_modules/fb-watchman/index.js create mode 100644 node_modules/fb-watchman/package.json 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/find-up/index.d.ts create mode 100644 node_modules/find-up/index.js create mode 100644 node_modules/find-up/license create mode 100644 node_modules/find-up/package.json create mode 100644 node_modules/find-up/readme.md create mode 100644 node_modules/fs.realpath/LICENSE create mode 100644 node_modules/fs.realpath/README.md create mode 100644 node_modules/fs.realpath/index.js create mode 100644 node_modules/fs.realpath/old.js create mode 100644 node_modules/fs.realpath/package.json create mode 100644 node_modules/function-bind/.eslintrc create mode 100644 node_modules/function-bind/.github/FUNDING.yml create mode 100644 node_modules/function-bind/.github/SECURITY.md create mode 100644 node_modules/function-bind/.nycrc create mode 100644 node_modules/function-bind/CHANGELOG.md create mode 100644 node_modules/function-bind/LICENSE create mode 100644 node_modules/function-bind/README.md create mode 100644 node_modules/function-bind/implementation.js create mode 100644 node_modules/function-bind/index.js create mode 100644 node_modules/function-bind/package.json create mode 100644 node_modules/function-bind/test/.eslintrc create mode 100644 node_modules/function-bind/test/index.js create mode 100644 node_modules/gensync/LICENSE create mode 100644 node_modules/gensync/README.md create mode 100644 node_modules/gensync/index.js create mode 100644 node_modules/gensync/index.js.flow create mode 100644 node_modules/gensync/package.json create mode 100644 node_modules/gensync/test/.babelrc create mode 100644 node_modules/gensync/test/index.test.js create mode 100644 node_modules/get-caller-file/LICENSE.md create mode 100644 node_modules/get-caller-file/README.md create mode 100644 node_modules/get-caller-file/index.d.ts create mode 100644 node_modules/get-caller-file/index.js create mode 100644 node_modules/get-caller-file/index.js.map create mode 100644 node_modules/get-caller-file/package.json create mode 100644 node_modules/get-package-type/CHANGELOG.md create mode 100644 node_modules/get-package-type/LICENSE create mode 100644 node_modules/get-package-type/README.md create mode 100644 node_modules/get-package-type/async.cjs create mode 100644 node_modules/get-package-type/cache.cjs create mode 100644 node_modules/get-package-type/index.cjs create mode 100644 node_modules/get-package-type/is-node-modules.cjs create mode 100644 node_modules/get-package-type/package.json create mode 100644 node_modules/get-package-type/sync.cjs create mode 100644 node_modules/get-stream/buffer-stream.js create mode 100644 node_modules/get-stream/index.d.ts create mode 100644 node_modules/get-stream/index.js create mode 100644 node_modules/get-stream/license create mode 100644 node_modules/get-stream/package.json create mode 100644 node_modules/get-stream/readme.md create mode 100644 node_modules/glob/LICENSE create mode 100644 node_modules/glob/README.md create mode 100644 node_modules/glob/common.js create mode 100644 node_modules/glob/glob.js create mode 100644 node_modules/glob/package.json create mode 100644 node_modules/glob/sync.js create mode 100644 node_modules/globals/globals.json create mode 100644 node_modules/globals/index.js create mode 100644 node_modules/globals/license create mode 100644 node_modules/globals/package.json create mode 100644 node_modules/globals/readme.md create mode 100644 node_modules/graceful-fs/LICENSE create mode 100644 node_modules/graceful-fs/README.md create mode 100644 node_modules/graceful-fs/clone.js create mode 100644 node_modules/graceful-fs/graceful-fs.js create mode 100644 node_modules/graceful-fs/legacy-streams.js create mode 100644 node_modules/graceful-fs/package.json create mode 100644 node_modules/graceful-fs/polyfills.js create mode 100644 node_modules/has-flag/index.d.ts create mode 100644 node_modules/has-flag/index.js create mode 100644 node_modules/has-flag/license create mode 100644 node_modules/has-flag/package.json create mode 100644 node_modules/has-flag/readme.md create mode 100644 node_modules/hasown/.eslintrc create mode 100644 node_modules/hasown/.github/FUNDING.yml create mode 100644 node_modules/hasown/.nycrc create mode 100644 node_modules/hasown/CHANGELOG.md create mode 100644 node_modules/hasown/LICENSE create mode 100644 node_modules/hasown/README.md create mode 100644 node_modules/hasown/index.d.ts create mode 100644 node_modules/hasown/index.js create mode 100644 node_modules/hasown/package.json create mode 100644 node_modules/hasown/tsconfig.json create mode 100644 node_modules/html-escaper/LICENSE.txt create mode 100644 node_modules/html-escaper/README.md create mode 100644 node_modules/html-escaper/cjs/index.js create mode 100644 node_modules/html-escaper/cjs/package.json create mode 100644 node_modules/html-escaper/esm/index.js create mode 100644 node_modules/html-escaper/index.js create mode 100644 node_modules/html-escaper/min.js create mode 100644 node_modules/html-escaper/package.json create mode 100644 node_modules/html-escaper/test/index.js create mode 100644 node_modules/html-escaper/test/package.json create mode 100644 node_modules/human-signals/CHANGELOG.md create mode 100644 node_modules/human-signals/LICENSE create mode 100644 node_modules/human-signals/README.md create mode 100644 node_modules/human-signals/build/src/core.js create mode 100644 node_modules/human-signals/build/src/core.js.map create mode 100644 node_modules/human-signals/build/src/main.d.ts create mode 100644 node_modules/human-signals/build/src/main.js create mode 100644 node_modules/human-signals/build/src/main.js.map create mode 100644 node_modules/human-signals/build/src/realtime.js create mode 100644 node_modules/human-signals/build/src/realtime.js.map create mode 100644 node_modules/human-signals/build/src/signals.js create mode 100644 node_modules/human-signals/build/src/signals.js.map create mode 100644 node_modules/human-signals/package.json create mode 100755 node_modules/import-local/fixtures/cli.js create mode 100644 node_modules/import-local/index.d.ts create mode 100644 node_modules/import-local/index.js create mode 100644 node_modules/import-local/license create mode 100644 node_modules/import-local/package.json create mode 100644 node_modules/import-local/readme.md create mode 100644 node_modules/imurmurhash/README.md create mode 100644 node_modules/imurmurhash/imurmurhash.js create mode 100644 node_modules/imurmurhash/imurmurhash.min.js create mode 100644 node_modules/imurmurhash/package.json create mode 100644 node_modules/inflight/LICENSE create mode 100644 node_modules/inflight/README.md create mode 100644 node_modules/inflight/inflight.js create mode 100644 node_modules/inflight/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-arrayish/.editorconfig create mode 100644 node_modules/is-arrayish/.istanbul.yml create mode 100644 node_modules/is-arrayish/.npmignore create mode 100644 node_modules/is-arrayish/.travis.yml create mode 100644 node_modules/is-arrayish/LICENSE create mode 100644 node_modules/is-arrayish/README.md create mode 100644 node_modules/is-arrayish/index.js create mode 100644 node_modules/is-arrayish/package.json create mode 100644 node_modules/is-core-module/.eslintrc create mode 100644 node_modules/is-core-module/.nycrc create mode 100644 node_modules/is-core-module/CHANGELOG.md create mode 100644 node_modules/is-core-module/LICENSE create mode 100644 node_modules/is-core-module/README.md create mode 100644 node_modules/is-core-module/core.json create mode 100644 node_modules/is-core-module/index.js create mode 100644 node_modules/is-core-module/package.json create mode 100644 node_modules/is-core-module/test/index.js create mode 100644 node_modules/is-fullwidth-code-point/index.d.ts create mode 100644 node_modules/is-fullwidth-code-point/index.js create mode 100644 node_modules/is-fullwidth-code-point/license create mode 100644 node_modules/is-fullwidth-code-point/package.json create mode 100644 node_modules/is-fullwidth-code-point/readme.md create mode 100644 node_modules/is-generator-fn/index.d.ts create mode 100644 node_modules/is-generator-fn/index.js create mode 100644 node_modules/is-generator-fn/license create mode 100644 node_modules/is-generator-fn/package.json create mode 100644 node_modules/is-generator-fn/readme.md 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/is-stream/index.d.ts create mode 100644 node_modules/is-stream/index.js create mode 100644 node_modules/is-stream/license create mode 100644 node_modules/is-stream/package.json create mode 100644 node_modules/is-stream/readme.md create mode 100644 node_modules/isexe/.npmignore create mode 100644 node_modules/isexe/LICENSE create mode 100644 node_modules/isexe/README.md create mode 100644 node_modules/isexe/index.js create mode 100644 node_modules/isexe/mode.js create mode 100644 node_modules/isexe/package.json create mode 100644 node_modules/isexe/test/basic.js create mode 100644 node_modules/isexe/windows.js create mode 100644 node_modules/istanbul-lib-coverage/CHANGELOG.md create mode 100644 node_modules/istanbul-lib-coverage/LICENSE create mode 100644 node_modules/istanbul-lib-coverage/README.md create mode 100644 node_modules/istanbul-lib-coverage/index.js create mode 100644 node_modules/istanbul-lib-coverage/lib/coverage-map.js create mode 100644 node_modules/istanbul-lib-coverage/lib/coverage-summary.js create mode 100644 node_modules/istanbul-lib-coverage/lib/data-properties.js create mode 100644 node_modules/istanbul-lib-coverage/lib/file-coverage.js create mode 100644 node_modules/istanbul-lib-coverage/lib/percent.js create mode 100644 node_modules/istanbul-lib-coverage/package.json create mode 100644 node_modules/istanbul-lib-instrument/CHANGELOG.md create mode 100644 node_modules/istanbul-lib-instrument/LICENSE create mode 100644 node_modules/istanbul-lib-instrument/README.md create mode 120000 node_modules/istanbul-lib-instrument/node_modules/.bin/semver create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/LICENSE create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/README.md create mode 100755 node_modules/istanbul-lib-instrument/node_modules/semver/bin/semver.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/classes/comparator.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/classes/index.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/classes/range.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/classes/semver.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/clean.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/cmp.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/coerce.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/compare-build.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/compare-loose.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/compare.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/diff.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/eq.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/gt.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/gte.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/inc.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/lt.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/lte.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/major.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/minor.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/neq.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/parse.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/patch.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/prerelease.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/rcompare.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/rsort.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/satisfies.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/sort.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/functions/valid.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/index.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/internal/constants.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/internal/debug.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/internal/identifiers.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/internal/lrucache.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/internal/parse-options.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/internal/re.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/package.json create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/preload.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/range.bnf create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/ranges/gtr.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/ranges/intersects.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/ranges/ltr.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/ranges/max-satisfying.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/ranges/min-satisfying.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/ranges/min-version.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/ranges/outside.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/ranges/simplify.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/ranges/subset.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/ranges/to-comparators.js create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/ranges/valid.js create mode 100644 node_modules/istanbul-lib-instrument/package.json create mode 100644 node_modules/istanbul-lib-instrument/src/constants.js create mode 100644 node_modules/istanbul-lib-instrument/src/index.js create mode 100644 node_modules/istanbul-lib-instrument/src/instrumenter.js create mode 100644 node_modules/istanbul-lib-instrument/src/read-coverage.js create mode 100644 node_modules/istanbul-lib-instrument/src/source-coverage.js create mode 100644 node_modules/istanbul-lib-instrument/src/visitor.js create mode 100644 node_modules/istanbul-lib-report/CHANGELOG.md create mode 100644 node_modules/istanbul-lib-report/LICENSE create mode 100644 node_modules/istanbul-lib-report/README.md create mode 100644 node_modules/istanbul-lib-report/index.js create mode 100644 node_modules/istanbul-lib-report/lib/context.js create mode 100644 node_modules/istanbul-lib-report/lib/file-writer.js create mode 100644 node_modules/istanbul-lib-report/lib/path.js create mode 100644 node_modules/istanbul-lib-report/lib/report-base.js create mode 100644 node_modules/istanbul-lib-report/lib/summarizer-factory.js create mode 100644 node_modules/istanbul-lib-report/lib/tree.js create mode 100644 node_modules/istanbul-lib-report/lib/watermarks.js create mode 100644 node_modules/istanbul-lib-report/lib/xml-writer.js create mode 100644 node_modules/istanbul-lib-report/package.json create mode 100644 node_modules/istanbul-lib-source-maps/CHANGELOG.md create mode 100644 node_modules/istanbul-lib-source-maps/LICENSE create mode 100644 node_modules/istanbul-lib-source-maps/README.md create mode 100644 node_modules/istanbul-lib-source-maps/index.js create mode 100644 node_modules/istanbul-lib-source-maps/lib/get-mapping.js create mode 100644 node_modules/istanbul-lib-source-maps/lib/map-store.js create mode 100644 node_modules/istanbul-lib-source-maps/lib/mapped.js create mode 100644 node_modules/istanbul-lib-source-maps/lib/pathutils.js create mode 100644 node_modules/istanbul-lib-source-maps/lib/transform-utils.js create mode 100644 node_modules/istanbul-lib-source-maps/lib/transformer.js create mode 100644 node_modules/istanbul-lib-source-maps/package.json create mode 100644 node_modules/istanbul-reports/CHANGELOG.md create mode 100644 node_modules/istanbul-reports/LICENSE create mode 100644 node_modules/istanbul-reports/README.md create mode 100644 node_modules/istanbul-reports/index.js create mode 100644 node_modules/istanbul-reports/lib/clover/index.js create mode 100644 node_modules/istanbul-reports/lib/cobertura/index.js create mode 100644 node_modules/istanbul-reports/lib/html-spa/.babelrc create mode 100644 node_modules/istanbul-reports/lib/html-spa/assets/bundle.js create mode 100644 node_modules/istanbul-reports/lib/html-spa/assets/sort-arrow-sprite.png create mode 100644 node_modules/istanbul-reports/lib/html-spa/assets/spa.css create mode 100644 node_modules/istanbul-reports/lib/html-spa/index.js create mode 100644 node_modules/istanbul-reports/lib/html-spa/src/fileBreadcrumbs.js create mode 100644 node_modules/istanbul-reports/lib/html-spa/src/filterToggle.js create mode 100644 node_modules/istanbul-reports/lib/html-spa/src/flattenToggle.js create mode 100644 node_modules/istanbul-reports/lib/html-spa/src/getChildData.js create mode 100644 node_modules/istanbul-reports/lib/html-spa/src/index.js create mode 100644 node_modules/istanbul-reports/lib/html-spa/src/routing.js create mode 100644 node_modules/istanbul-reports/lib/html-spa/src/summaryHeader.js create mode 100644 node_modules/istanbul-reports/lib/html-spa/src/summaryTableHeader.js create mode 100644 node_modules/istanbul-reports/lib/html-spa/src/summaryTableLine.js create mode 100644 node_modules/istanbul-reports/lib/html-spa/webpack.config.js create mode 100644 node_modules/istanbul-reports/lib/html/annotator.js create mode 100644 node_modules/istanbul-reports/lib/html/assets/base.css create mode 100644 node_modules/istanbul-reports/lib/html/assets/block-navigation.js create mode 100644 node_modules/istanbul-reports/lib/html/assets/favicon.png create mode 100644 node_modules/istanbul-reports/lib/html/assets/sort-arrow-sprite.png create mode 100644 node_modules/istanbul-reports/lib/html/assets/sorter.js create mode 100644 node_modules/istanbul-reports/lib/html/assets/vendor/prettify.css create mode 100644 node_modules/istanbul-reports/lib/html/assets/vendor/prettify.js create mode 100644 node_modules/istanbul-reports/lib/html/index.js create mode 100644 node_modules/istanbul-reports/lib/html/insertion-text.js create mode 100644 node_modules/istanbul-reports/lib/json-summary/index.js create mode 100644 node_modules/istanbul-reports/lib/json/index.js create mode 100644 node_modules/istanbul-reports/lib/lcov/index.js create mode 100644 node_modules/istanbul-reports/lib/lcovonly/index.js create mode 100644 node_modules/istanbul-reports/lib/none/index.js create mode 100644 node_modules/istanbul-reports/lib/teamcity/index.js create mode 100644 node_modules/istanbul-reports/lib/text-lcov/index.js create mode 100644 node_modules/istanbul-reports/lib/text-summary/index.js create mode 100644 node_modules/istanbul-reports/lib/text/index.js create mode 100644 node_modules/istanbul-reports/package.json create mode 100644 node_modules/jest-changed-files/LICENSE create mode 100644 node_modules/jest-changed-files/README.md create mode 100644 node_modules/jest-changed-files/build/git.js create mode 100644 node_modules/jest-changed-files/build/hg.js create mode 100644 node_modules/jest-changed-files/build/index.d.ts create mode 100644 node_modules/jest-changed-files/build/index.js create mode 100644 node_modules/jest-changed-files/build/sl.js create mode 100644 node_modules/jest-changed-files/build/types.js create mode 100644 node_modules/jest-changed-files/package.json create mode 100644 node_modules/jest-circus/LICENSE create mode 100644 node_modules/jest-circus/README.md create mode 100644 node_modules/jest-circus/build/eventHandler.js create mode 100644 node_modules/jest-circus/build/formatNodeAssertErrors.js create mode 100644 node_modules/jest-circus/build/globalErrorHandlers.js create mode 100644 node_modules/jest-circus/build/index.d.ts create mode 100644 node_modules/jest-circus/build/index.js create mode 100644 node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js create mode 100644 node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js create mode 100644 node_modules/jest-circus/build/run.js create mode 100644 node_modules/jest-circus/build/shuffleArray.js create mode 100644 node_modules/jest-circus/build/state.js create mode 100644 node_modules/jest-circus/build/testCaseReportHandler.js create mode 100644 node_modules/jest-circus/build/types.js create mode 100644 node_modules/jest-circus/build/utils.js create mode 100644 node_modules/jest-circus/package.json create mode 100644 node_modules/jest-circus/runner.js create mode 100644 node_modules/jest-cli/LICENSE create mode 100644 node_modules/jest-cli/README.md create mode 100755 node_modules/jest-cli/bin/jest.js create mode 100644 node_modules/jest-cli/build/args.js create mode 100644 node_modules/jest-cli/build/index.d.ts create mode 100644 node_modules/jest-cli/build/index.js create mode 100644 node_modules/jest-cli/build/run.js create mode 100644 node_modules/jest-cli/package.json create mode 100644 node_modules/jest-config/LICENSE create mode 100644 node_modules/jest-config/build/Defaults.js create mode 100644 node_modules/jest-config/build/Deprecated.js create mode 100644 node_modules/jest-config/build/Descriptions.js create mode 100644 node_modules/jest-config/build/ReporterValidationErrors.js create mode 100644 node_modules/jest-config/build/ValidConfig.js create mode 100644 node_modules/jest-config/build/color.js create mode 100644 node_modules/jest-config/build/constants.js create mode 100644 node_modules/jest-config/build/getCacheDirectory.js create mode 100644 node_modules/jest-config/build/getMaxWorkers.js create mode 100644 node_modules/jest-config/build/index.d.ts create mode 100644 node_modules/jest-config/build/index.js create mode 100644 node_modules/jest-config/build/normalize.js create mode 100644 node_modules/jest-config/build/parseShardPair.js create mode 100644 node_modules/jest-config/build/readConfigFileAndSetRootDir.js create mode 100644 node_modules/jest-config/build/resolveConfigPath.js create mode 100644 node_modules/jest-config/build/setFromArgv.js create mode 100644 node_modules/jest-config/build/stringToBytes.js create mode 100644 node_modules/jest-config/build/utils.js create mode 100644 node_modules/jest-config/build/validatePattern.js create mode 100644 node_modules/jest-config/package.json create mode 100644 node_modules/jest-diff/LICENSE create mode 100644 node_modules/jest-diff/README.md create mode 100644 node_modules/jest-diff/build/cleanupSemantic.js create mode 100644 node_modules/jest-diff/build/constants.js create mode 100644 node_modules/jest-diff/build/diffLines.js create mode 100644 node_modules/jest-diff/build/diffStrings.js create mode 100644 node_modules/jest-diff/build/getAlignedDiffs.js create mode 100644 node_modules/jest-diff/build/index.d.ts create mode 100644 node_modules/jest-diff/build/index.js create mode 100644 node_modules/jest-diff/build/joinAlignedDiffs.js create mode 100644 node_modules/jest-diff/build/normalizeDiffOptions.js create mode 100644 node_modules/jest-diff/build/printDiffs.js create mode 100644 node_modules/jest-diff/build/types.js create mode 100644 node_modules/jest-diff/package.json create mode 100644 node_modules/jest-docblock/LICENSE create mode 100644 node_modules/jest-docblock/README.md create mode 100644 node_modules/jest-docblock/build/index.d.ts create mode 100644 node_modules/jest-docblock/build/index.js create mode 100644 node_modules/jest-docblock/package.json create mode 100644 node_modules/jest-each/LICENSE create mode 100644 node_modules/jest-each/README.md create mode 100644 node_modules/jest-each/build/bind.js create mode 100644 node_modules/jest-each/build/index.d.ts create mode 100644 node_modules/jest-each/build/index.js create mode 100644 node_modules/jest-each/build/table/array.js create mode 100644 node_modules/jest-each/build/table/interpolation.js create mode 100644 node_modules/jest-each/build/table/template.js create mode 100644 node_modules/jest-each/build/validation.js create mode 100644 node_modules/jest-each/package.json create mode 100644 node_modules/jest-environment-node/LICENSE create mode 100644 node_modules/jest-environment-node/build/index.d.ts create mode 100644 node_modules/jest-environment-node/build/index.js create mode 100644 node_modules/jest-environment-node/package.json create mode 100644 node_modules/jest-get-type/LICENSE create mode 100644 node_modules/jest-get-type/build/index.d.ts create mode 100644 node_modules/jest-get-type/build/index.js create mode 100644 node_modules/jest-get-type/package.json create mode 100644 node_modules/jest-haste-map/LICENSE create mode 100644 node_modules/jest-haste-map/build/HasteFS.js create mode 100644 node_modules/jest-haste-map/build/ModuleMap.js create mode 100644 node_modules/jest-haste-map/build/blacklist.js create mode 100644 node_modules/jest-haste-map/build/constants.js create mode 100644 node_modules/jest-haste-map/build/crawlers/node.js create mode 100644 node_modules/jest-haste-map/build/crawlers/watchman.js create mode 100644 node_modules/jest-haste-map/build/getMockName.js create mode 100644 node_modules/jest-haste-map/build/index.d.ts create mode 100644 node_modules/jest-haste-map/build/index.js create mode 100644 node_modules/jest-haste-map/build/lib/dependencyExtractor.js create mode 100644 node_modules/jest-haste-map/build/lib/fast_path.js create mode 100644 node_modules/jest-haste-map/build/lib/getPlatformExtension.js create mode 100644 node_modules/jest-haste-map/build/lib/isWatchmanInstalled.js create mode 100644 node_modules/jest-haste-map/build/lib/normalizePathSep.js create mode 100644 node_modules/jest-haste-map/build/types.js create mode 100644 node_modules/jest-haste-map/build/watchers/FSEventsWatcher.js create mode 100644 node_modules/jest-haste-map/build/watchers/NodeWatcher.js create mode 100644 node_modules/jest-haste-map/build/watchers/RecrawlWarning.js create mode 100644 node_modules/jest-haste-map/build/watchers/WatchmanWatcher.js create mode 100644 node_modules/jest-haste-map/build/watchers/common.js create mode 100644 node_modules/jest-haste-map/build/worker.js create mode 100644 node_modules/jest-haste-map/package.json create mode 100644 node_modules/jest-leak-detector/LICENSE create mode 100644 node_modules/jest-leak-detector/README.md create mode 100644 node_modules/jest-leak-detector/build/index.d.ts create mode 100644 node_modules/jest-leak-detector/build/index.js create mode 100644 node_modules/jest-leak-detector/package.json create mode 100644 node_modules/jest-matcher-utils/LICENSE create mode 100644 node_modules/jest-matcher-utils/README.md create mode 100644 node_modules/jest-matcher-utils/build/Replaceable.js create mode 100644 node_modules/jest-matcher-utils/build/deepCyclicCopyReplaceable.js create mode 100644 node_modules/jest-matcher-utils/build/index.d.ts create mode 100644 node_modules/jest-matcher-utils/build/index.js create mode 100644 node_modules/jest-matcher-utils/package.json create mode 100644 node_modules/jest-message-util/LICENSE create mode 100644 node_modules/jest-message-util/build/index.d.ts create mode 100644 node_modules/jest-message-util/build/index.js create mode 100644 node_modules/jest-message-util/build/types.js create mode 100644 node_modules/jest-message-util/package.json create mode 100644 node_modules/jest-mock/LICENSE create mode 100644 node_modules/jest-mock/README.md create mode 100644 node_modules/jest-mock/build/index.d.ts create mode 100644 node_modules/jest-mock/build/index.js create mode 100644 node_modules/jest-mock/package.json create mode 100644 node_modules/jest-pnp-resolver/README.md create mode 100644 node_modules/jest-pnp-resolver/createRequire.js create mode 100644 node_modules/jest-pnp-resolver/getDefaultResolver.js create mode 100644 node_modules/jest-pnp-resolver/index.d.ts create mode 100644 node_modules/jest-pnp-resolver/index.js create mode 100644 node_modules/jest-pnp-resolver/package.json create mode 100644 node_modules/jest-regex-util/LICENSE create mode 100644 node_modules/jest-regex-util/build/index.d.ts create mode 100644 node_modules/jest-regex-util/build/index.js create mode 100644 node_modules/jest-regex-util/package.json create mode 100644 node_modules/jest-resolve-dependencies/LICENSE create mode 100644 node_modules/jest-resolve-dependencies/build/index.d.ts create mode 100644 node_modules/jest-resolve-dependencies/build/index.js create mode 100644 node_modules/jest-resolve-dependencies/package.json create mode 100644 node_modules/jest-resolve/LICENSE create mode 100644 node_modules/jest-resolve/build/ModuleNotFoundError.js create mode 100644 node_modules/jest-resolve/build/defaultResolver.js create mode 100644 node_modules/jest-resolve/build/fileWalkers.js create mode 100644 node_modules/jest-resolve/build/index.d.ts create mode 100644 node_modules/jest-resolve/build/index.js create mode 100644 node_modules/jest-resolve/build/isBuiltinModule.js create mode 100644 node_modules/jest-resolve/build/nodeModulesPaths.js create mode 100644 node_modules/jest-resolve/build/resolver.js create mode 100644 node_modules/jest-resolve/build/shouldLoadAsEsm.js create mode 100644 node_modules/jest-resolve/build/types.js create mode 100644 node_modules/jest-resolve/build/utils.js create mode 100644 node_modules/jest-resolve/package.json create mode 100644 node_modules/jest-runner/LICENSE create mode 100644 node_modules/jest-runner/build/index.d.ts create mode 100644 node_modules/jest-runner/build/index.js create mode 100644 node_modules/jest-runner/build/runTest.js create mode 100644 node_modules/jest-runner/build/testWorker.js create mode 100644 node_modules/jest-runner/build/types.js create mode 100644 node_modules/jest-runner/package.json create mode 100644 node_modules/jest-runtime/LICENSE create mode 100644 node_modules/jest-runtime/build/helpers.js create mode 100644 node_modules/jest-runtime/build/index.d.ts create mode 100644 node_modules/jest-runtime/build/index.js create mode 100644 node_modules/jest-runtime/package.json create mode 100644 node_modules/jest-snapshot/LICENSE create mode 100644 node_modules/jest-snapshot/build/InlineSnapshots.js create mode 100644 node_modules/jest-snapshot/build/SnapshotResolver.js create mode 100644 node_modules/jest-snapshot/build/State.js create mode 100644 node_modules/jest-snapshot/build/colors.js create mode 100644 node_modules/jest-snapshot/build/dedentLines.js create mode 100644 node_modules/jest-snapshot/build/index.d.ts create mode 100644 node_modules/jest-snapshot/build/index.js create mode 100644 node_modules/jest-snapshot/build/mockSerializer.js create mode 100644 node_modules/jest-snapshot/build/plugins.js create mode 100644 node_modules/jest-snapshot/build/printSnapshot.js create mode 100644 node_modules/jest-snapshot/build/types.js create mode 100644 node_modules/jest-snapshot/build/utils.js create mode 120000 node_modules/jest-snapshot/node_modules/.bin/semver create mode 100644 node_modules/jest-snapshot/node_modules/semver/LICENSE create mode 100644 node_modules/jest-snapshot/node_modules/semver/README.md create mode 100755 node_modules/jest-snapshot/node_modules/semver/bin/semver.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/classes/comparator.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/classes/index.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/classes/range.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/classes/semver.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/clean.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/cmp.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/coerce.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/compare-build.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/compare-loose.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/compare.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/diff.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/eq.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/gt.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/gte.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/inc.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/lt.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/lte.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/major.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/minor.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/neq.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/parse.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/patch.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/prerelease.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/rcompare.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/rsort.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/satisfies.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/sort.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/functions/valid.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/index.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/internal/constants.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/internal/debug.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/internal/identifiers.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/internal/lrucache.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/internal/parse-options.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/internal/re.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/package.json create mode 100644 node_modules/jest-snapshot/node_modules/semver/preload.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/range.bnf create mode 100644 node_modules/jest-snapshot/node_modules/semver/ranges/gtr.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/ranges/intersects.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/ranges/ltr.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/ranges/max-satisfying.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/ranges/min-satisfying.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/ranges/min-version.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/ranges/outside.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/ranges/simplify.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/ranges/subset.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/ranges/to-comparators.js create mode 100644 node_modules/jest-snapshot/node_modules/semver/ranges/valid.js create mode 100644 node_modules/jest-snapshot/package.json create mode 100644 node_modules/jest-util/LICENSE create mode 100644 node_modules/jest-util/Readme.md create mode 100644 node_modules/jest-util/build/ErrorWithStack.js create mode 100644 node_modules/jest-util/build/clearLine.js create mode 100644 node_modules/jest-util/build/convertDescriptorToString.js create mode 100644 node_modules/jest-util/build/createDirectory.js create mode 100644 node_modules/jest-util/build/createProcessObject.js create mode 100644 node_modules/jest-util/build/deepCyclicCopy.js create mode 100644 node_modules/jest-util/build/formatTime.js create mode 100644 node_modules/jest-util/build/globsToMatcher.js create mode 100644 node_modules/jest-util/build/index.d.ts create mode 100644 node_modules/jest-util/build/index.js create mode 100644 node_modules/jest-util/build/installCommonGlobals.js create mode 100644 node_modules/jest-util/build/interopRequireDefault.js create mode 100644 node_modules/jest-util/build/invariant.js create mode 100644 node_modules/jest-util/build/isInteractive.js create mode 100644 node_modules/jest-util/build/isNonNullable.js create mode 100644 node_modules/jest-util/build/isPromise.js create mode 100644 node_modules/jest-util/build/pluralize.js create mode 100644 node_modules/jest-util/build/preRunMessage.js create mode 100644 node_modules/jest-util/build/replacePathSepForGlob.js create mode 100644 node_modules/jest-util/build/requireOrImportModule.js create mode 100644 node_modules/jest-util/build/setGlobal.js create mode 100644 node_modules/jest-util/build/specialChars.js create mode 100644 node_modules/jest-util/build/testPathPatternToRegExp.js create mode 100644 node_modules/jest-util/build/tryRealpath.js create mode 100644 node_modules/jest-util/node_modules/picomatch/CHANGELOG.md create mode 100644 node_modules/jest-util/node_modules/picomatch/LICENSE create mode 100644 node_modules/jest-util/node_modules/picomatch/README.md create mode 100644 node_modules/jest-util/node_modules/picomatch/index.js create mode 100644 node_modules/jest-util/node_modules/picomatch/lib/constants.js create mode 100644 node_modules/jest-util/node_modules/picomatch/lib/parse.js create mode 100644 node_modules/jest-util/node_modules/picomatch/lib/picomatch.js create mode 100644 node_modules/jest-util/node_modules/picomatch/lib/scan.js create mode 100644 node_modules/jest-util/node_modules/picomatch/lib/utils.js create mode 100644 node_modules/jest-util/node_modules/picomatch/package.json create mode 100644 node_modules/jest-util/package.json create mode 100644 node_modules/jest-validate/LICENSE create mode 100644 node_modules/jest-validate/README.md create mode 100644 node_modules/jest-validate/build/condition.js create mode 100644 node_modules/jest-validate/build/defaultConfig.js create mode 100644 node_modules/jest-validate/build/deprecated.js create mode 100644 node_modules/jest-validate/build/errors.js create mode 100644 node_modules/jest-validate/build/exampleConfig.js create mode 100644 node_modules/jest-validate/build/index.d.ts create mode 100644 node_modules/jest-validate/build/index.js create mode 100644 node_modules/jest-validate/build/types.js create mode 100644 node_modules/jest-validate/build/utils.js create mode 100644 node_modules/jest-validate/build/validate.js create mode 100644 node_modules/jest-validate/build/validateCLIOptions.js create mode 100644 node_modules/jest-validate/build/warnings.js create mode 100644 node_modules/jest-validate/node_modules/camelcase/index.d.ts create mode 100644 node_modules/jest-validate/node_modules/camelcase/index.js create mode 100644 node_modules/jest-validate/node_modules/camelcase/license create mode 100644 node_modules/jest-validate/node_modules/camelcase/package.json create mode 100644 node_modules/jest-validate/node_modules/camelcase/readme.md create mode 100644 node_modules/jest-validate/package.json create mode 100644 node_modules/jest-watcher/LICENSE create mode 100644 node_modules/jest-watcher/build/BaseWatchPlugin.js create mode 100644 node_modules/jest-watcher/build/JestHooks.js create mode 100644 node_modules/jest-watcher/build/PatternPrompt.js create mode 100644 node_modules/jest-watcher/build/TestWatcher.js create mode 100644 node_modules/jest-watcher/build/constants.js create mode 100644 node_modules/jest-watcher/build/index.d.ts create mode 100644 node_modules/jest-watcher/build/index.js create mode 100644 node_modules/jest-watcher/build/lib/Prompt.js create mode 100644 node_modules/jest-watcher/build/lib/colorize.js create mode 100644 node_modules/jest-watcher/build/lib/formatTestNameByPattern.js create mode 100644 node_modules/jest-watcher/build/lib/patternModeHelpers.js create mode 100644 node_modules/jest-watcher/build/lib/scroll.js create mode 100644 node_modules/jest-watcher/build/types.js create mode 100644 node_modules/jest-watcher/package.json create mode 100644 node_modules/jest-worker/LICENSE create mode 100644 node_modules/jest-worker/README.md create mode 100644 node_modules/jest-worker/build/Farm.js create mode 100644 node_modules/jest-worker/build/FifoQueue.js create mode 100644 node_modules/jest-worker/build/PriorityQueue.js create mode 100644 node_modules/jest-worker/build/WorkerPool.js create mode 100644 node_modules/jest-worker/build/base/BaseWorkerPool.js create mode 100644 node_modules/jest-worker/build/index.d.ts create mode 100644 node_modules/jest-worker/build/index.js create mode 100644 node_modules/jest-worker/build/types.js create mode 100644 node_modules/jest-worker/build/workers/ChildProcessWorker.js create mode 100644 node_modules/jest-worker/build/workers/NodeThreadsWorker.js create mode 100644 node_modules/jest-worker/build/workers/WorkerAbstract.js create mode 100644 node_modules/jest-worker/build/workers/messageParent.js create mode 100644 node_modules/jest-worker/build/workers/processChild.js create mode 100644 node_modules/jest-worker/build/workers/threadChild.js create mode 100644 node_modules/jest-worker/node_modules/supports-color/browser.js create mode 100644 node_modules/jest-worker/node_modules/supports-color/index.js create mode 100644 node_modules/jest-worker/node_modules/supports-color/license create mode 100644 node_modules/jest-worker/node_modules/supports-color/package.json create mode 100644 node_modules/jest-worker/node_modules/supports-color/readme.md create mode 100644 node_modules/jest-worker/package.json create mode 100644 node_modules/jest/LICENSE create mode 100644 node_modules/jest/README.md create mode 100755 node_modules/jest/bin/jest.js create mode 100644 node_modules/jest/build/index.d.ts create mode 100644 node_modules/jest/build/index.js create mode 100644 node_modules/jest/package.json create mode 100644 node_modules/js-tokens/CHANGELOG.md create mode 100644 node_modules/js-tokens/LICENSE create mode 100644 node_modules/js-tokens/README.md create mode 100644 node_modules/js-tokens/index.js create mode 100644 node_modules/js-tokens/package.json create mode 100644 node_modules/js-yaml/CHANGELOG.md create mode 100644 node_modules/js-yaml/LICENSE create mode 100644 node_modules/js-yaml/README.md create mode 100755 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.min.js create mode 100644 node_modules/js-yaml/index.js create mode 100644 node_modules/js-yaml/lib/js-yaml.js create mode 100644 node_modules/js-yaml/lib/js-yaml/common.js create mode 100644 node_modules/js-yaml/lib/js-yaml/dumper.js create mode 100644 node_modules/js-yaml/lib/js-yaml/exception.js create mode 100644 node_modules/js-yaml/lib/js-yaml/loader.js create mode 100644 node_modules/js-yaml/lib/js-yaml/mark.js create mode 100644 node_modules/js-yaml/lib/js-yaml/schema.js create mode 100644 node_modules/js-yaml/lib/js-yaml/schema/core.js create mode 100644 node_modules/js-yaml/lib/js-yaml/schema/default_full.js create mode 100644 node_modules/js-yaml/lib/js-yaml/schema/default_safe.js create mode 100644 node_modules/js-yaml/lib/js-yaml/schema/failsafe.js create mode 100644 node_modules/js-yaml/lib/js-yaml/schema/json.js create mode 100644 node_modules/js-yaml/lib/js-yaml/type.js create mode 100644 node_modules/js-yaml/lib/js-yaml/type/binary.js create mode 100644 node_modules/js-yaml/lib/js-yaml/type/bool.js create mode 100644 node_modules/js-yaml/lib/js-yaml/type/float.js create mode 100644 node_modules/js-yaml/lib/js-yaml/type/int.js create mode 100644 node_modules/js-yaml/lib/js-yaml/type/js/function.js create mode 100644 node_modules/js-yaml/lib/js-yaml/type/js/regexp.js create mode 100644 node_modules/js-yaml/lib/js-yaml/type/js/undefined.js create mode 100644 node_modules/js-yaml/lib/js-yaml/type/map.js create mode 100644 node_modules/js-yaml/lib/js-yaml/type/merge.js create mode 100644 node_modules/js-yaml/lib/js-yaml/type/null.js create mode 100644 node_modules/js-yaml/lib/js-yaml/type/omap.js create mode 100644 node_modules/js-yaml/lib/js-yaml/type/pairs.js create mode 100644 node_modules/js-yaml/lib/js-yaml/type/seq.js create mode 100644 node_modules/js-yaml/lib/js-yaml/type/set.js create mode 100644 node_modules/js-yaml/lib/js-yaml/type/str.js create mode 100644 node_modules/js-yaml/lib/js-yaml/type/timestamp.js create mode 100644 node_modules/js-yaml/package.json create mode 100644 node_modules/jsesc/LICENSE-MIT.txt create mode 100644 node_modules/jsesc/README.md create mode 100755 node_modules/jsesc/bin/jsesc create mode 100644 node_modules/jsesc/jsesc.js create mode 100644 node_modules/jsesc/man/jsesc.1 create mode 100644 node_modules/jsesc/package.json create mode 100644 node_modules/json-parse-even-better-errors/CHANGELOG.md create mode 100644 node_modules/json-parse-even-better-errors/LICENSE.md create mode 100644 node_modules/json-parse-even-better-errors/README.md create mode 100644 node_modules/json-parse-even-better-errors/index.js create mode 100644 node_modules/json-parse-even-better-errors/package.json create mode 100644 node_modules/json5/LICENSE.md create mode 100644 node_modules/json5/README.md create mode 100644 node_modules/json5/dist/index.js create mode 100644 node_modules/json5/dist/index.min.js create mode 100644 node_modules/json5/dist/index.min.mjs create mode 100644 node_modules/json5/dist/index.mjs create mode 100755 node_modules/json5/lib/cli.js create mode 100644 node_modules/json5/lib/index.d.ts create mode 100644 node_modules/json5/lib/index.js create mode 100644 node_modules/json5/lib/parse.d.ts create mode 100644 node_modules/json5/lib/parse.js create mode 100644 node_modules/json5/lib/register.js create mode 100644 node_modules/json5/lib/require.js create mode 100644 node_modules/json5/lib/stringify.d.ts create mode 100644 node_modules/json5/lib/stringify.js create mode 100644 node_modules/json5/lib/unicode.d.ts create mode 100644 node_modules/json5/lib/unicode.js create mode 100644 node_modules/json5/lib/util.d.ts create mode 100644 node_modules/json5/lib/util.js create mode 100644 node_modules/json5/package.json create mode 100644 node_modules/kleur/index.js create mode 100644 node_modules/kleur/kleur.d.ts 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/leven/index.d.ts create mode 100644 node_modules/leven/index.js create mode 100644 node_modules/leven/license create mode 100644 node_modules/leven/package.json create mode 100644 node_modules/leven/readme.md create mode 100644 node_modules/lines-and-columns/LICENSE create mode 100644 node_modules/lines-and-columns/README.md create mode 100644 node_modules/lines-and-columns/build/index.d.ts create mode 100644 node_modules/lines-and-columns/build/index.js create mode 100644 node_modules/lines-and-columns/package.json create mode 100644 node_modules/locate-path/index.d.ts create mode 100644 node_modules/locate-path/index.js create mode 100644 node_modules/locate-path/license create mode 100644 node_modules/locate-path/package.json create mode 100644 node_modules/locate-path/readme.md create mode 100644 node_modules/lru-cache/LICENSE create mode 100644 node_modules/lru-cache/README.md create mode 100644 node_modules/lru-cache/index.js create mode 100644 node_modules/lru-cache/package.json create mode 100644 node_modules/make-dir/index.d.ts create mode 100644 node_modules/make-dir/index.js create mode 100644 node_modules/make-dir/license create mode 120000 node_modules/make-dir/node_modules/.bin/semver create mode 100644 node_modules/make-dir/node_modules/semver/LICENSE create mode 100644 node_modules/make-dir/node_modules/semver/README.md create mode 100755 node_modules/make-dir/node_modules/semver/bin/semver.js create mode 100644 node_modules/make-dir/node_modules/semver/classes/comparator.js create mode 100644 node_modules/make-dir/node_modules/semver/classes/index.js create mode 100644 node_modules/make-dir/node_modules/semver/classes/range.js create mode 100644 node_modules/make-dir/node_modules/semver/classes/semver.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/clean.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/cmp.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/coerce.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/compare-build.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/compare-loose.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/compare.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/diff.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/eq.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/gt.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/gte.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/inc.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/lt.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/lte.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/major.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/minor.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/neq.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/parse.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/patch.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/prerelease.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/rcompare.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/rsort.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/satisfies.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/sort.js create mode 100644 node_modules/make-dir/node_modules/semver/functions/valid.js create mode 100644 node_modules/make-dir/node_modules/semver/index.js create mode 100644 node_modules/make-dir/node_modules/semver/internal/constants.js create mode 100644 node_modules/make-dir/node_modules/semver/internal/debug.js create mode 100644 node_modules/make-dir/node_modules/semver/internal/identifiers.js create mode 100644 node_modules/make-dir/node_modules/semver/internal/lrucache.js create mode 100644 node_modules/make-dir/node_modules/semver/internal/parse-options.js create mode 100644 node_modules/make-dir/node_modules/semver/internal/re.js create mode 100644 node_modules/make-dir/node_modules/semver/package.json create mode 100644 node_modules/make-dir/node_modules/semver/preload.js create mode 100644 node_modules/make-dir/node_modules/semver/range.bnf create mode 100644 node_modules/make-dir/node_modules/semver/ranges/gtr.js create mode 100644 node_modules/make-dir/node_modules/semver/ranges/intersects.js create mode 100644 node_modules/make-dir/node_modules/semver/ranges/ltr.js create mode 100644 node_modules/make-dir/node_modules/semver/ranges/max-satisfying.js create mode 100644 node_modules/make-dir/node_modules/semver/ranges/min-satisfying.js create mode 100644 node_modules/make-dir/node_modules/semver/ranges/min-version.js create mode 100644 node_modules/make-dir/node_modules/semver/ranges/outside.js create mode 100644 node_modules/make-dir/node_modules/semver/ranges/simplify.js create mode 100644 node_modules/make-dir/node_modules/semver/ranges/subset.js create mode 100644 node_modules/make-dir/node_modules/semver/ranges/to-comparators.js create mode 100644 node_modules/make-dir/node_modules/semver/ranges/valid.js create mode 100644 node_modules/make-dir/package.json create mode 100644 node_modules/make-dir/readme.md create mode 100644 node_modules/makeerror/.travis.yml create mode 100644 node_modules/makeerror/lib/makeerror.js create mode 100644 node_modules/makeerror/license create mode 100644 node_modules/makeerror/package.json create mode 100644 node_modules/makeerror/readme.md create mode 100644 node_modules/merge-stream/LICENSE create mode 100644 node_modules/merge-stream/README.md create mode 100644 node_modules/merge-stream/index.js create mode 100644 node_modules/merge-stream/package.json create mode 100755 node_modules/micromatch/LICENSE create mode 100644 node_modules/micromatch/README.md create mode 100644 node_modules/micromatch/index.js create mode 100644 node_modules/micromatch/node_modules/picomatch/CHANGELOG.md create mode 100644 node_modules/micromatch/node_modules/picomatch/LICENSE create mode 100644 node_modules/micromatch/node_modules/picomatch/README.md create mode 100644 node_modules/micromatch/node_modules/picomatch/index.js create mode 100644 node_modules/micromatch/node_modules/picomatch/lib/constants.js create mode 100644 node_modules/micromatch/node_modules/picomatch/lib/parse.js create mode 100644 node_modules/micromatch/node_modules/picomatch/lib/picomatch.js create mode 100644 node_modules/micromatch/node_modules/picomatch/lib/scan.js create mode 100644 node_modules/micromatch/node_modules/picomatch/lib/utils.js create mode 100644 node_modules/micromatch/node_modules/picomatch/package.json create mode 100644 node_modules/micromatch/package.json create mode 100644 node_modules/mimic-fn/index.d.ts create mode 100644 node_modules/mimic-fn/index.js create mode 100644 node_modules/mimic-fn/license create mode 100644 node_modules/mimic-fn/package.json create mode 100644 node_modules/mimic-fn/readme.md 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/natural-compare/README.md create mode 100644 node_modules/natural-compare/index.js create mode 100644 node_modules/natural-compare/package.json create mode 100644 node_modules/node-int64/.npmignore create mode 100644 node_modules/node-int64/Int64.js create mode 100644 node_modules/node-int64/LICENSE create mode 100644 node_modules/node-int64/README.md create mode 100644 node_modules/node-int64/package.json create mode 100644 node_modules/node-int64/test.js create mode 100644 node_modules/node-releases/LICENSE create mode 100644 node_modules/node-releases/README.md create mode 100644 node_modules/node-releases/data/processed/envs.json create mode 100644 node_modules/node-releases/data/release-schedule/release-schedule.json create mode 100644 node_modules/node-releases/package.json 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/npm-run-path/index.d.ts create mode 100644 node_modules/npm-run-path/index.js create mode 100644 node_modules/npm-run-path/license create mode 100644 node_modules/npm-run-path/package.json create mode 100644 node_modules/npm-run-path/readme.md create mode 100644 node_modules/once/LICENSE create mode 100644 node_modules/once/README.md create mode 100644 node_modules/once/once.js create mode 100644 node_modules/once/package.json create mode 100644 node_modules/onetime/index.d.ts create mode 100644 node_modules/onetime/index.js create mode 100644 node_modules/onetime/license create mode 100644 node_modules/onetime/package.json create mode 100644 node_modules/onetime/readme.md create mode 100644 node_modules/p-limit/index.d.ts create mode 100644 node_modules/p-limit/index.js create mode 100644 node_modules/p-limit/license create mode 100644 node_modules/p-limit/package.json create mode 100644 node_modules/p-limit/readme.md create mode 100644 node_modules/p-locate/index.d.ts create mode 100644 node_modules/p-locate/index.js create mode 100644 node_modules/p-locate/license create mode 100644 node_modules/p-locate/node_modules/p-limit/index.d.ts create mode 100644 node_modules/p-locate/node_modules/p-limit/index.js create mode 100644 node_modules/p-locate/node_modules/p-limit/license create mode 100644 node_modules/p-locate/node_modules/p-limit/package.json create mode 100644 node_modules/p-locate/node_modules/p-limit/readme.md create mode 100644 node_modules/p-locate/package.json create mode 100644 node_modules/p-locate/readme.md create mode 100644 node_modules/p-try/index.d.ts create mode 100644 node_modules/p-try/index.js create mode 100644 node_modules/p-try/license create mode 100644 node_modules/p-try/package.json create mode 100644 node_modules/p-try/readme.md create mode 100644 node_modules/parse-json/index.js create mode 100644 node_modules/parse-json/license create mode 100644 node_modules/parse-json/package.json create mode 100644 node_modules/parse-json/readme.md create mode 100644 node_modules/path-exists/index.d.ts create mode 100644 node_modules/path-exists/index.js create mode 100644 node_modules/path-exists/license create mode 100644 node_modules/path-exists/package.json create mode 100644 node_modules/path-exists/readme.md create mode 100644 node_modules/path-is-absolute/index.js create mode 100644 node_modules/path-is-absolute/license create mode 100644 node_modules/path-is-absolute/package.json create mode 100644 node_modules/path-is-absolute/readme.md create mode 100644 node_modules/path-key/index.d.ts create mode 100644 node_modules/path-key/index.js create mode 100644 node_modules/path-key/license create mode 100644 node_modules/path-key/package.json create mode 100644 node_modules/path-key/readme.md create mode 100644 node_modules/path-parse/LICENSE create mode 100644 node_modules/path-parse/README.md create mode 100644 node_modules/path-parse/index.js create mode 100644 node_modules/path-parse/package.json create mode 100644 node_modules/pirates/LICENSE create mode 100644 node_modules/pirates/README.md create mode 100644 node_modules/pirates/index.d.ts create mode 100644 node_modules/pirates/lib/index.js create mode 100644 node_modules/pirates/package.json create mode 100644 node_modules/pkg-dir/index.d.ts create mode 100644 node_modules/pkg-dir/index.js create mode 100644 node_modules/pkg-dir/license create mode 100644 node_modules/pkg-dir/package.json create mode 100644 node_modules/pkg-dir/readme.md create mode 100644 node_modules/pretty-format/LICENSE create mode 100755 node_modules/pretty-format/README.md create mode 100644 node_modules/pretty-format/build/collections.js create mode 100644 node_modules/pretty-format/build/index.d.ts create mode 100644 node_modules/pretty-format/build/index.js create mode 100644 node_modules/pretty-format/build/plugins/AsymmetricMatcher.js create mode 100644 node_modules/pretty-format/build/plugins/DOMCollection.js create mode 100644 node_modules/pretty-format/build/plugins/DOMElement.js create mode 100644 node_modules/pretty-format/build/plugins/Immutable.js create mode 100644 node_modules/pretty-format/build/plugins/ReactElement.js create mode 100644 node_modules/pretty-format/build/plugins/ReactTestComponent.js create mode 100644 node_modules/pretty-format/build/plugins/lib/escapeHTML.js create mode 100644 node_modules/pretty-format/build/plugins/lib/markup.js create mode 100644 node_modules/pretty-format/build/types.js create mode 100644 node_modules/pretty-format/node_modules/ansi-styles/index.d.ts create mode 100644 node_modules/pretty-format/node_modules/ansi-styles/index.js create mode 100644 node_modules/pretty-format/node_modules/ansi-styles/license create mode 100644 node_modules/pretty-format/node_modules/ansi-styles/package.json create mode 100644 node_modules/pretty-format/node_modules/ansi-styles/readme.md create mode 100644 node_modules/pretty-format/package.json create mode 100644 node_modules/prompts/dist/dateparts/datepart.js create mode 100644 node_modules/prompts/dist/dateparts/day.js create mode 100644 node_modules/prompts/dist/dateparts/hours.js create mode 100644 node_modules/prompts/dist/dateparts/index.js create mode 100644 node_modules/prompts/dist/dateparts/meridiem.js create mode 100644 node_modules/prompts/dist/dateparts/milliseconds.js create mode 100644 node_modules/prompts/dist/dateparts/minutes.js create mode 100644 node_modules/prompts/dist/dateparts/month.js create mode 100644 node_modules/prompts/dist/dateparts/seconds.js create mode 100644 node_modules/prompts/dist/dateparts/year.js create mode 100644 node_modules/prompts/dist/elements/autocomplete.js create mode 100644 node_modules/prompts/dist/elements/autocompleteMultiselect.js create mode 100644 node_modules/prompts/dist/elements/confirm.js create mode 100644 node_modules/prompts/dist/elements/date.js create mode 100644 node_modules/prompts/dist/elements/index.js create mode 100644 node_modules/prompts/dist/elements/multiselect.js create mode 100644 node_modules/prompts/dist/elements/number.js create mode 100644 node_modules/prompts/dist/elements/prompt.js create mode 100644 node_modules/prompts/dist/elements/select.js create mode 100644 node_modules/prompts/dist/elements/text.js create mode 100644 node_modules/prompts/dist/elements/toggle.js create mode 100644 node_modules/prompts/dist/index.js create mode 100644 node_modules/prompts/dist/prompts.js create mode 100644 node_modules/prompts/dist/util/action.js create mode 100644 node_modules/prompts/dist/util/clear.js create mode 100644 node_modules/prompts/dist/util/entriesToDisplay.js create mode 100644 node_modules/prompts/dist/util/figures.js create mode 100644 node_modules/prompts/dist/util/index.js create mode 100644 node_modules/prompts/dist/util/lines.js create mode 100644 node_modules/prompts/dist/util/strip.js create mode 100644 node_modules/prompts/dist/util/style.js create mode 100644 node_modules/prompts/dist/util/wrap.js create mode 100644 node_modules/prompts/index.js create mode 100644 node_modules/prompts/lib/dateparts/datepart.js create mode 100644 node_modules/prompts/lib/dateparts/day.js create mode 100644 node_modules/prompts/lib/dateparts/hours.js create mode 100644 node_modules/prompts/lib/dateparts/index.js create mode 100644 node_modules/prompts/lib/dateparts/meridiem.js create mode 100644 node_modules/prompts/lib/dateparts/milliseconds.js create mode 100644 node_modules/prompts/lib/dateparts/minutes.js create mode 100644 node_modules/prompts/lib/dateparts/month.js create mode 100644 node_modules/prompts/lib/dateparts/seconds.js create mode 100644 node_modules/prompts/lib/dateparts/year.js create mode 100644 node_modules/prompts/lib/elements/autocomplete.js create mode 100644 node_modules/prompts/lib/elements/autocompleteMultiselect.js create mode 100644 node_modules/prompts/lib/elements/confirm.js create mode 100644 node_modules/prompts/lib/elements/date.js create mode 100644 node_modules/prompts/lib/elements/index.js create mode 100644 node_modules/prompts/lib/elements/multiselect.js create mode 100644 node_modules/prompts/lib/elements/number.js create mode 100644 node_modules/prompts/lib/elements/prompt.js create mode 100644 node_modules/prompts/lib/elements/select.js create mode 100644 node_modules/prompts/lib/elements/text.js create mode 100644 node_modules/prompts/lib/elements/toggle.js create mode 100644 node_modules/prompts/lib/index.js create mode 100644 node_modules/prompts/lib/prompts.js create mode 100644 node_modules/prompts/lib/util/action.js create mode 100644 node_modules/prompts/lib/util/clear.js create mode 100644 node_modules/prompts/lib/util/entriesToDisplay.js create mode 100644 node_modules/prompts/lib/util/figures.js create mode 100644 node_modules/prompts/lib/util/index.js create mode 100644 node_modules/prompts/lib/util/lines.js create mode 100644 node_modules/prompts/lib/util/strip.js create mode 100644 node_modules/prompts/lib/util/style.js create mode 100644 node_modules/prompts/lib/util/wrap.js create mode 100644 node_modules/prompts/license create mode 100644 node_modules/prompts/package.json create mode 100755 node_modules/prompts/readme.md create mode 100644 node_modules/pure-rand/CHANGELOG.md create mode 100644 node_modules/pure-rand/LICENSE create mode 100644 node_modules/pure-rand/README.md create mode 100644 node_modules/pure-rand/lib/distribution/Distribution.js create mode 100644 node_modules/pure-rand/lib/distribution/UniformArrayIntDistribution.js create mode 100644 node_modules/pure-rand/lib/distribution/UniformBigIntDistribution.js create mode 100644 node_modules/pure-rand/lib/distribution/UniformIntDistribution.js create mode 100644 node_modules/pure-rand/lib/distribution/UnsafeUniformArrayIntDistribution.js create mode 100644 node_modules/pure-rand/lib/distribution/UnsafeUniformBigIntDistribution.js create mode 100644 node_modules/pure-rand/lib/distribution/UnsafeUniformIntDistribution.js create mode 100644 node_modules/pure-rand/lib/distribution/internals/ArrayInt.js create mode 100644 node_modules/pure-rand/lib/distribution/internals/UnsafeUniformArrayIntDistributionInternal.js create mode 100644 node_modules/pure-rand/lib/distribution/internals/UnsafeUniformIntDistributionInternal.js create mode 100644 node_modules/pure-rand/lib/esm/distribution/Distribution.js create mode 100644 node_modules/pure-rand/lib/esm/distribution/UniformArrayIntDistribution.js create mode 100644 node_modules/pure-rand/lib/esm/distribution/UniformBigIntDistribution.js create mode 100644 node_modules/pure-rand/lib/esm/distribution/UniformIntDistribution.js create mode 100644 node_modules/pure-rand/lib/esm/distribution/UnsafeUniformArrayIntDistribution.js create mode 100644 node_modules/pure-rand/lib/esm/distribution/UnsafeUniformBigIntDistribution.js create mode 100644 node_modules/pure-rand/lib/esm/distribution/UnsafeUniformIntDistribution.js create mode 100644 node_modules/pure-rand/lib/esm/distribution/internals/ArrayInt.js create mode 100644 node_modules/pure-rand/lib/esm/distribution/internals/UnsafeUniformArrayIntDistributionInternal.js create mode 100644 node_modules/pure-rand/lib/esm/distribution/internals/UnsafeUniformIntDistributionInternal.js create mode 100644 node_modules/pure-rand/lib/esm/generator/LinearCongruential.js create mode 100644 node_modules/pure-rand/lib/esm/generator/MersenneTwister.js create mode 100644 node_modules/pure-rand/lib/esm/generator/RandomGenerator.js create mode 100644 node_modules/pure-rand/lib/esm/generator/XorShift.js create mode 100644 node_modules/pure-rand/lib/esm/generator/XoroShiro.js create mode 100644 node_modules/pure-rand/lib/esm/package.json create mode 100644 node_modules/pure-rand/lib/esm/pure-rand-default.js create mode 100644 node_modules/pure-rand/lib/esm/pure-rand.js create mode 100644 node_modules/pure-rand/lib/esm/types/distribution/Distribution.d.ts create mode 100644 node_modules/pure-rand/lib/esm/types/distribution/UniformArrayIntDistribution.d.ts create mode 100644 node_modules/pure-rand/lib/esm/types/distribution/UniformBigIntDistribution.d.ts create mode 100644 node_modules/pure-rand/lib/esm/types/distribution/UniformIntDistribution.d.ts create mode 100644 node_modules/pure-rand/lib/esm/types/distribution/UnsafeUniformArrayIntDistribution.d.ts create mode 100644 node_modules/pure-rand/lib/esm/types/distribution/UnsafeUniformBigIntDistribution.d.ts create mode 100644 node_modules/pure-rand/lib/esm/types/distribution/UnsafeUniformIntDistribution.d.ts create mode 100644 node_modules/pure-rand/lib/esm/types/distribution/internals/ArrayInt.d.ts create mode 100644 node_modules/pure-rand/lib/esm/types/distribution/internals/UnsafeUniformArrayIntDistributionInternal.d.ts create mode 100644 node_modules/pure-rand/lib/esm/types/distribution/internals/UnsafeUniformIntDistributionInternal.d.ts create mode 100644 node_modules/pure-rand/lib/esm/types/generator/LinearCongruential.d.ts create mode 100644 node_modules/pure-rand/lib/esm/types/generator/MersenneTwister.d.ts create mode 100644 node_modules/pure-rand/lib/esm/types/generator/RandomGenerator.d.ts create mode 100644 node_modules/pure-rand/lib/esm/types/generator/XorShift.d.ts create mode 100644 node_modules/pure-rand/lib/esm/types/generator/XoroShiro.d.ts create mode 100644 node_modules/pure-rand/lib/esm/types/pure-rand-default.d.ts create mode 100644 node_modules/pure-rand/lib/esm/types/pure-rand.d.ts create mode 100644 node_modules/pure-rand/lib/generator/LinearCongruential.js create mode 100644 node_modules/pure-rand/lib/generator/MersenneTwister.js create mode 100644 node_modules/pure-rand/lib/generator/RandomGenerator.js create mode 100644 node_modules/pure-rand/lib/generator/XorShift.js create mode 100644 node_modules/pure-rand/lib/generator/XoroShiro.js create mode 100644 node_modules/pure-rand/lib/pure-rand-default.js create mode 100644 node_modules/pure-rand/lib/pure-rand.js create mode 100644 node_modules/pure-rand/lib/types/distribution/Distribution.d.ts create mode 100644 node_modules/pure-rand/lib/types/distribution/UniformArrayIntDistribution.d.ts create mode 100644 node_modules/pure-rand/lib/types/distribution/UniformBigIntDistribution.d.ts create mode 100644 node_modules/pure-rand/lib/types/distribution/UniformIntDistribution.d.ts create mode 100644 node_modules/pure-rand/lib/types/distribution/UnsafeUniformArrayIntDistribution.d.ts create mode 100644 node_modules/pure-rand/lib/types/distribution/UnsafeUniformBigIntDistribution.d.ts create mode 100644 node_modules/pure-rand/lib/types/distribution/UnsafeUniformIntDistribution.d.ts create mode 100644 node_modules/pure-rand/lib/types/distribution/internals/ArrayInt.d.ts create mode 100644 node_modules/pure-rand/lib/types/distribution/internals/UnsafeUniformArrayIntDistributionInternal.d.ts create mode 100644 node_modules/pure-rand/lib/types/distribution/internals/UnsafeUniformIntDistributionInternal.d.ts create mode 100644 node_modules/pure-rand/lib/types/generator/LinearCongruential.d.ts create mode 100644 node_modules/pure-rand/lib/types/generator/MersenneTwister.d.ts create mode 100644 node_modules/pure-rand/lib/types/generator/RandomGenerator.d.ts create mode 100644 node_modules/pure-rand/lib/types/generator/XorShift.d.ts create mode 100644 node_modules/pure-rand/lib/types/generator/XoroShiro.d.ts create mode 100644 node_modules/pure-rand/lib/types/pure-rand-default.d.ts create mode 100644 node_modules/pure-rand/lib/types/pure-rand.d.ts create mode 100644 node_modules/pure-rand/package.json create mode 100644 node_modules/react-is/LICENSE create mode 100644 node_modules/react-is/README.md create mode 100644 node_modules/react-is/cjs/react-is.development.js create mode 100644 node_modules/react-is/cjs/react-is.production.min.js create mode 100644 node_modules/react-is/index.js create mode 100644 node_modules/react-is/package.json create mode 100644 node_modules/react-is/umd/react-is.development.js create mode 100644 node_modules/react-is/umd/react-is.production.min.js create mode 100644 node_modules/require-directory/.jshintrc create mode 100644 node_modules/require-directory/.npmignore create mode 100644 node_modules/require-directory/.travis.yml create mode 100644 node_modules/require-directory/LICENSE create mode 100644 node_modules/require-directory/README.markdown create mode 100644 node_modules/require-directory/index.js create mode 100644 node_modules/require-directory/package.json create mode 100644 node_modules/resolve-cwd/index.d.ts create mode 100644 node_modules/resolve-cwd/index.js create mode 100644 node_modules/resolve-cwd/license create mode 100644 node_modules/resolve-cwd/package.json create mode 100644 node_modules/resolve-cwd/readme.md create mode 100644 node_modules/resolve-from/index.d.ts create mode 100644 node_modules/resolve-from/index.js create mode 100644 node_modules/resolve-from/license create mode 100644 node_modules/resolve-from/package.json create mode 100644 node_modules/resolve-from/readme.md create mode 100644 node_modules/resolve.exports/dist/index.js create mode 100644 node_modules/resolve.exports/dist/index.mjs create mode 100644 node_modules/resolve.exports/index.d.ts create mode 100644 node_modules/resolve.exports/license create mode 100644 node_modules/resolve.exports/package.json create mode 100644 node_modules/resolve.exports/readme.md create mode 100644 node_modules/resolve/.editorconfig create mode 100644 node_modules/resolve/.eslintrc create mode 100644 node_modules/resolve/.github/FUNDING.yml create mode 100644 node_modules/resolve/LICENSE create mode 100644 node_modules/resolve/SECURITY.md create mode 100644 node_modules/resolve/async.js create mode 100755 node_modules/resolve/bin/resolve create mode 100644 node_modules/resolve/example/async.js create mode 100644 node_modules/resolve/example/sync.js create mode 100644 node_modules/resolve/index.js create mode 100644 node_modules/resolve/lib/async.js create mode 100644 node_modules/resolve/lib/caller.js create mode 100644 node_modules/resolve/lib/core.js create mode 100644 node_modules/resolve/lib/core.json create mode 100644 node_modules/resolve/lib/homedir.js create mode 100644 node_modules/resolve/lib/is-core.js create mode 100644 node_modules/resolve/lib/node-modules-paths.js create mode 100644 node_modules/resolve/lib/normalize-options.js create mode 100644 node_modules/resolve/lib/sync.js create mode 100644 node_modules/resolve/package.json create mode 100644 node_modules/resolve/readme.markdown create mode 100644 node_modules/resolve/sync.js create mode 100644 node_modules/resolve/test/core.js create mode 100644 node_modules/resolve/test/dotdot.js create mode 100644 node_modules/resolve/test/dotdot/abc/index.js create mode 100644 node_modules/resolve/test/dotdot/index.js create mode 100644 node_modules/resolve/test/faulty_basedir.js create mode 100644 node_modules/resolve/test/filter.js create mode 100644 node_modules/resolve/test/filter_sync.js create mode 100644 node_modules/resolve/test/home_paths.js create mode 100644 node_modules/resolve/test/home_paths_sync.js create mode 100644 node_modules/resolve/test/mock.js create mode 100644 node_modules/resolve/test/mock_sync.js create mode 100644 node_modules/resolve/test/module_dir.js create mode 100644 node_modules/resolve/test/module_dir/xmodules/aaa/index.js create mode 100644 node_modules/resolve/test/module_dir/ymodules/aaa/index.js create mode 100644 node_modules/resolve/test/module_dir/zmodules/bbb/main.js create mode 100644 node_modules/resolve/test/module_dir/zmodules/bbb/package.json create mode 100644 node_modules/resolve/test/node-modules-paths.js create mode 100644 node_modules/resolve/test/node_path.js create mode 100644 node_modules/resolve/test/node_path/x/aaa/index.js create mode 100644 node_modules/resolve/test/node_path/x/ccc/index.js create mode 100644 node_modules/resolve/test/node_path/y/bbb/index.js create mode 100644 node_modules/resolve/test/node_path/y/ccc/index.js create mode 100644 node_modules/resolve/test/nonstring.js create mode 100644 node_modules/resolve/test/pathfilter.js create mode 100644 node_modules/resolve/test/pathfilter/deep_ref/main.js create mode 100644 node_modules/resolve/test/precedence.js create mode 100644 node_modules/resolve/test/precedence/aaa.js create mode 100644 node_modules/resolve/test/precedence/aaa/index.js create mode 100644 node_modules/resolve/test/precedence/aaa/main.js create mode 100644 node_modules/resolve/test/precedence/bbb.js create mode 100644 node_modules/resolve/test/precedence/bbb/main.js create mode 100644 node_modules/resolve/test/resolver.js create mode 100644 node_modules/resolve/test/resolver/baz/doom.js create mode 100644 node_modules/resolve/test/resolver/baz/package.json create mode 100644 node_modules/resolve/test/resolver/baz/quux.js create mode 100644 node_modules/resolve/test/resolver/browser_field/a.js create mode 100644 node_modules/resolve/test/resolver/browser_field/b.js create mode 100644 node_modules/resolve/test/resolver/browser_field/package.json create mode 100644 node_modules/resolve/test/resolver/cup.coffee create mode 100644 node_modules/resolve/test/resolver/dot_main/index.js create mode 100644 node_modules/resolve/test/resolver/dot_main/package.json create mode 100644 node_modules/resolve/test/resolver/dot_slash_main/index.js create mode 100644 node_modules/resolve/test/resolver/dot_slash_main/package.json create mode 100644 node_modules/resolve/test/resolver/false_main/index.js create mode 100644 node_modules/resolve/test/resolver/false_main/package.json create mode 100644 node_modules/resolve/test/resolver/foo.js create mode 100644 node_modules/resolve/test/resolver/incorrect_main/index.js create mode 100644 node_modules/resolve/test/resolver/incorrect_main/package.json create mode 100644 node_modules/resolve/test/resolver/invalid_main/package.json create mode 100644 node_modules/resolve/test/resolver/mug.coffee create mode 100644 node_modules/resolve/test/resolver/mug.js create mode 100644 node_modules/resolve/test/resolver/multirepo/lerna.json create mode 100644 node_modules/resolve/test/resolver/multirepo/package.json create mode 100644 node_modules/resolve/test/resolver/multirepo/packages/package-a/index.js create mode 100644 node_modules/resolve/test/resolver/multirepo/packages/package-a/package.json create mode 100644 node_modules/resolve/test/resolver/multirepo/packages/package-b/index.js create mode 100644 node_modules/resolve/test/resolver/multirepo/packages/package-b/package.json create mode 100644 node_modules/resolve/test/resolver/nested_symlinks/mylib/async.js create mode 100644 node_modules/resolve/test/resolver/nested_symlinks/mylib/package.json create mode 100644 node_modules/resolve/test/resolver/nested_symlinks/mylib/sync.js create mode 100644 node_modules/resolve/test/resolver/other_path/lib/other-lib.js create mode 100644 node_modules/resolve/test/resolver/other_path/root.js create mode 100644 node_modules/resolve/test/resolver/quux/foo/index.js create mode 100644 node_modules/resolve/test/resolver/same_names/foo.js create mode 100644 node_modules/resolve/test/resolver/same_names/foo/index.js create mode 100644 node_modules/resolve/test/resolver/symlinked/_/node_modules/foo.js create mode 100644 node_modules/resolve/test/resolver/symlinked/_/symlink_target/.gitkeep create mode 100644 node_modules/resolve/test/resolver/symlinked/package/bar.js create mode 100644 node_modules/resolve/test/resolver/symlinked/package/package.json create mode 100644 node_modules/resolve/test/resolver/without_basedir/main.js create mode 100644 node_modules/resolve/test/resolver_sync.js create mode 100644 node_modules/resolve/test/shadowed_core.js create mode 100644 node_modules/resolve/test/shadowed_core/node_modules/util/index.js create mode 100644 node_modules/resolve/test/subdirs.js create mode 100644 node_modules/resolve/test/symlinks.js create mode 100644 node_modules/semver/LICENSE create mode 100644 node_modules/semver/README.md create mode 100755 node_modules/semver/bin/semver.js create mode 100644 node_modules/semver/package.json create mode 100644 node_modules/semver/range.bnf create mode 100644 node_modules/semver/semver.js create mode 100644 node_modules/shebang-command/index.js create mode 100644 node_modules/shebang-command/license create mode 100644 node_modules/shebang-command/package.json create mode 100644 node_modules/shebang-command/readme.md create mode 100644 node_modules/shebang-regex/index.d.ts create mode 100644 node_modules/shebang-regex/index.js create mode 100644 node_modules/shebang-regex/license create mode 100644 node_modules/shebang-regex/package.json create mode 100644 node_modules/shebang-regex/readme.md create mode 100644 node_modules/signal-exit/LICENSE.txt create mode 100644 node_modules/signal-exit/README.md create mode 100644 node_modules/signal-exit/index.js create mode 100644 node_modules/signal-exit/package.json create mode 100644 node_modules/signal-exit/signals.js create mode 100644 node_modules/sisteransi/license create mode 100755 node_modules/sisteransi/package.json create mode 100755 node_modules/sisteransi/readme.md create mode 100644 node_modules/sisteransi/src/index.js create mode 100644 node_modules/sisteransi/src/sisteransi.d.ts 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/source-map-support/LICENSE.md create mode 100644 node_modules/source-map-support/README.md create mode 100644 node_modules/source-map-support/browser-source-map-support.js create mode 100644 node_modules/source-map-support/package.json create mode 100644 node_modules/source-map-support/register.js create mode 100644 node_modules/source-map-support/source-map-support.js create mode 100644 node_modules/source-map/CHANGELOG.md create mode 100644 node_modules/source-map/LICENSE create mode 100644 node_modules/source-map/README.md create mode 100644 node_modules/source-map/dist/source-map.debug.js create mode 100644 node_modules/source-map/dist/source-map.js create mode 100644 node_modules/source-map/dist/source-map.min.js create mode 100644 node_modules/source-map/dist/source-map.min.js.map create mode 100644 node_modules/source-map/lib/array-set.js create mode 100644 node_modules/source-map/lib/base64-vlq.js create mode 100644 node_modules/source-map/lib/base64.js create mode 100644 node_modules/source-map/lib/binary-search.js create mode 100644 node_modules/source-map/lib/mapping-list.js create mode 100644 node_modules/source-map/lib/quick-sort.js create mode 100644 node_modules/source-map/lib/source-map-consumer.js create mode 100644 node_modules/source-map/lib/source-map-generator.js create mode 100644 node_modules/source-map/lib/source-node.js create mode 100644 node_modules/source-map/lib/util.js create mode 100644 node_modules/source-map/package.json create mode 100644 node_modules/source-map/source-map.d.ts create mode 100644 node_modules/source-map/source-map.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/stack-utils/LICENSE.md create mode 100644 node_modules/stack-utils/index.js create mode 100644 node_modules/stack-utils/package.json create mode 100644 node_modules/stack-utils/readme.md create mode 100644 node_modules/string-length/index.d.ts create mode 100644 node_modules/string-length/index.js create mode 100644 node_modules/string-length/license create mode 100644 node_modules/string-length/package.json create mode 100644 node_modules/string-length/readme.md create mode 100644 node_modules/string-width/index.d.ts create mode 100644 node_modules/string-width/index.js create mode 100644 node_modules/string-width/license create mode 100644 node_modules/string-width/package.json create mode 100644 node_modules/string-width/readme.md create mode 100644 node_modules/strip-ansi/index.d.ts create mode 100644 node_modules/strip-ansi/index.js create mode 100644 node_modules/strip-ansi/license create mode 100644 node_modules/strip-ansi/package.json create mode 100644 node_modules/strip-ansi/readme.md create mode 100644 node_modules/strip-bom/index.d.ts create mode 100644 node_modules/strip-bom/index.js create mode 100644 node_modules/strip-bom/license create mode 100644 node_modules/strip-bom/package.json create mode 100644 node_modules/strip-bom/readme.md create mode 100644 node_modules/strip-final-newline/index.js create mode 100644 node_modules/strip-final-newline/license create mode 100644 node_modules/strip-final-newline/package.json create mode 100644 node_modules/strip-final-newline/readme.md create mode 100644 node_modules/strip-json-comments/index.d.ts create mode 100644 node_modules/strip-json-comments/index.js create mode 100644 node_modules/strip-json-comments/license create mode 100644 node_modules/strip-json-comments/package.json create mode 100644 node_modules/strip-json-comments/readme.md create mode 100644 node_modules/supports-color/browser.js create mode 100644 node_modules/supports-color/index.js create mode 100644 node_modules/supports-color/license create mode 100644 node_modules/supports-color/package.json create mode 100644 node_modules/supports-color/readme.md create mode 100644 node_modules/supports-preserve-symlinks-flag/.eslintrc create mode 100644 node_modules/supports-preserve-symlinks-flag/.github/FUNDING.yml create mode 100644 node_modules/supports-preserve-symlinks-flag/.nycrc create mode 100644 node_modules/supports-preserve-symlinks-flag/CHANGELOG.md create mode 100644 node_modules/supports-preserve-symlinks-flag/LICENSE create mode 100644 node_modules/supports-preserve-symlinks-flag/README.md create mode 100644 node_modules/supports-preserve-symlinks-flag/browser.js create mode 100644 node_modules/supports-preserve-symlinks-flag/index.js create mode 100644 node_modules/supports-preserve-symlinks-flag/package.json create mode 100644 node_modules/supports-preserve-symlinks-flag/test/index.js create mode 100644 node_modules/test-exclude/CHANGELOG.md create mode 100644 node_modules/test-exclude/LICENSE.txt create mode 100644 node_modules/test-exclude/README.md create mode 100644 node_modules/test-exclude/index.js create mode 100644 node_modules/test-exclude/is-outside-dir-posix.js create mode 100644 node_modules/test-exclude/is-outside-dir-win32.js create mode 100644 node_modules/test-exclude/is-outside-dir.js create mode 100644 node_modules/test-exclude/package.json create mode 100644 node_modules/tmpl/lib/tmpl.js create mode 100644 node_modules/tmpl/license create mode 100644 node_modules/tmpl/package.json create mode 100644 node_modules/tmpl/readme.md 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/type-detect/LICENSE create mode 100644 node_modules/type-detect/README.md create mode 100644 node_modules/type-detect/index.js create mode 100644 node_modules/type-detect/package.json create mode 100644 node_modules/type-detect/type-detect.js create mode 100644 node_modules/type-fest/base.d.ts create mode 100644 node_modules/type-fest/index.d.ts create mode 100644 node_modules/type-fest/license create mode 100644 node_modules/type-fest/package.json create mode 100644 node_modules/type-fest/readme.md create mode 100644 node_modules/type-fest/source/async-return-type.d.ts create mode 100644 node_modules/type-fest/source/asyncify.d.ts create mode 100644 node_modules/type-fest/source/basic.d.ts create mode 100644 node_modules/type-fest/source/conditional-except.d.ts create mode 100644 node_modules/type-fest/source/conditional-keys.d.ts create mode 100644 node_modules/type-fest/source/conditional-pick.d.ts create mode 100644 node_modules/type-fest/source/entries.d.ts create mode 100644 node_modules/type-fest/source/entry.d.ts create mode 100644 node_modules/type-fest/source/except.d.ts create mode 100644 node_modules/type-fest/source/fixed-length-array.d.ts create mode 100644 node_modules/type-fest/source/iterable-element.d.ts create mode 100644 node_modules/type-fest/source/literal-union.d.ts create mode 100644 node_modules/type-fest/source/merge-exclusive.d.ts create mode 100644 node_modules/type-fest/source/merge.d.ts create mode 100644 node_modules/type-fest/source/mutable.d.ts create mode 100644 node_modules/type-fest/source/opaque.d.ts create mode 100644 node_modules/type-fest/source/package-json.d.ts create mode 100644 node_modules/type-fest/source/partial-deep.d.ts create mode 100644 node_modules/type-fest/source/promisable.d.ts create mode 100644 node_modules/type-fest/source/promise-value.d.ts create mode 100644 node_modules/type-fest/source/readonly-deep.d.ts create mode 100644 node_modules/type-fest/source/require-at-least-one.d.ts create mode 100644 node_modules/type-fest/source/require-exactly-one.d.ts create mode 100644 node_modules/type-fest/source/set-optional.d.ts create mode 100644 node_modules/type-fest/source/set-required.d.ts create mode 100644 node_modules/type-fest/source/set-return-type.d.ts create mode 100644 node_modules/type-fest/source/simplify.d.ts create mode 100644 node_modules/type-fest/source/stringified.d.ts create mode 100644 node_modules/type-fest/source/tsconfig-json.d.ts create mode 100644 node_modules/type-fest/source/typed-array.d.ts create mode 100644 node_modules/type-fest/source/union-to-intersection.d.ts create mode 100644 node_modules/type-fest/source/utilities.d.ts create mode 100644 node_modules/type-fest/source/value-of.d.ts create mode 100644 node_modules/type-fest/ts41/camel-case.d.ts create mode 100644 node_modules/type-fest/ts41/delimiter-case.d.ts create mode 100644 node_modules/type-fest/ts41/get.d.ts create mode 100644 node_modules/type-fest/ts41/index.d.ts create mode 100644 node_modules/type-fest/ts41/kebab-case.d.ts create mode 100644 node_modules/type-fest/ts41/pascal-case.d.ts create mode 100644 node_modules/type-fest/ts41/snake-case.d.ts create mode 100644 node_modules/type-fest/ts41/utilities.d.ts create mode 100644 node_modules/undici-types/LICENSE create mode 100644 node_modules/undici-types/README.md create mode 100644 node_modules/undici-types/agent.d.ts create mode 100644 node_modules/undici-types/api.d.ts create mode 100644 node_modules/undici-types/balanced-pool.d.ts create mode 100644 node_modules/undici-types/cache.d.ts create mode 100644 node_modules/undici-types/client.d.ts create mode 100644 node_modules/undici-types/connector.d.ts create mode 100644 node_modules/undici-types/content-type.d.ts create mode 100644 node_modules/undici-types/cookies.d.ts create mode 100644 node_modules/undici-types/diagnostics-channel.d.ts create mode 100644 node_modules/undici-types/dispatcher.d.ts create mode 100644 node_modules/undici-types/env-http-proxy-agent.d.ts create mode 100644 node_modules/undici-types/errors.d.ts create mode 100644 node_modules/undici-types/eventsource.d.ts create mode 100644 node_modules/undici-types/fetch.d.ts create mode 100644 node_modules/undici-types/file.d.ts create mode 100644 node_modules/undici-types/filereader.d.ts create mode 100644 node_modules/undici-types/formdata.d.ts create mode 100644 node_modules/undici-types/global-dispatcher.d.ts create mode 100644 node_modules/undici-types/global-origin.d.ts create mode 100644 node_modules/undici-types/handlers.d.ts create mode 100644 node_modules/undici-types/header.d.ts create mode 100644 node_modules/undici-types/index.d.ts create mode 100644 node_modules/undici-types/interceptors.d.ts create mode 100644 node_modules/undici-types/mock-agent.d.ts create mode 100644 node_modules/undici-types/mock-client.d.ts create mode 100644 node_modules/undici-types/mock-errors.d.ts create mode 100644 node_modules/undici-types/mock-interceptor.d.ts create mode 100644 node_modules/undici-types/mock-pool.d.ts create mode 100644 node_modules/undici-types/package.json create mode 100644 node_modules/undici-types/patch.d.ts create mode 100644 node_modules/undici-types/pool-stats.d.ts create mode 100644 node_modules/undici-types/pool.d.ts create mode 100644 node_modules/undici-types/proxy-agent.d.ts create mode 100644 node_modules/undici-types/readable.d.ts create mode 100644 node_modules/undici-types/retry-agent.d.ts create mode 100644 node_modules/undici-types/retry-handler.d.ts create mode 100644 node_modules/undici-types/util.d.ts create mode 100644 node_modules/undici-types/webidl.d.ts create mode 100644 node_modules/undici-types/websocket.d.ts create mode 100644 node_modules/update-browserslist-db/LICENSE create mode 100644 node_modules/update-browserslist-db/README.md create mode 100644 node_modules/update-browserslist-db/check-npm-version.js create mode 100755 node_modules/update-browserslist-db/cli.js create mode 100644 node_modules/update-browserslist-db/index.d.ts create mode 100644 node_modules/update-browserslist-db/index.js create mode 100644 node_modules/update-browserslist-db/package.json create mode 100644 node_modules/update-browserslist-db/utils.js create mode 100644 node_modules/v8-to-istanbul/CHANGELOG.md create mode 100644 node_modules/v8-to-istanbul/LICENSE.txt create mode 100644 node_modules/v8-to-istanbul/README.md create mode 100644 node_modules/v8-to-istanbul/index.d.ts create mode 100644 node_modules/v8-to-istanbul/index.js create mode 100644 node_modules/v8-to-istanbul/lib/branch.js create mode 100644 node_modules/v8-to-istanbul/lib/function.js create mode 100644 node_modules/v8-to-istanbul/lib/line.js create mode 100644 node_modules/v8-to-istanbul/lib/range.js create mode 100644 node_modules/v8-to-istanbul/lib/source.js create mode 100644 node_modules/v8-to-istanbul/lib/v8-to-istanbul.js create mode 100644 node_modules/v8-to-istanbul/package.json create mode 100644 node_modules/walker/.travis.yml create mode 100644 node_modules/walker/LICENSE create mode 100644 node_modules/walker/lib/walker.js create mode 100644 node_modules/walker/package.json create mode 100644 node_modules/walker/readme.md create mode 100644 node_modules/which/CHANGELOG.md create mode 100644 node_modules/which/LICENSE create mode 100644 node_modules/which/README.md create mode 100755 node_modules/which/bin/node-which create mode 100644 node_modules/which/package.json create mode 100644 node_modules/which/which.js create mode 100755 node_modules/wrap-ansi/index.js create mode 100644 node_modules/wrap-ansi/license create mode 100644 node_modules/wrap-ansi/package.json create mode 100644 node_modules/wrap-ansi/readme.md create mode 100644 node_modules/wrappy/LICENSE create mode 100644 node_modules/wrappy/README.md create mode 100644 node_modules/wrappy/package.json create mode 100644 node_modules/wrappy/wrappy.js create mode 100644 node_modules/write-file-atomic/LICENSE.md create mode 100644 node_modules/write-file-atomic/README.md create mode 100644 node_modules/write-file-atomic/lib/index.js create mode 100644 node_modules/write-file-atomic/package.json create mode 100644 node_modules/y18n/CHANGELOG.md create mode 100644 node_modules/y18n/LICENSE create mode 100644 node_modules/y18n/README.md create mode 100644 node_modules/y18n/build/index.cjs create mode 100644 node_modules/y18n/build/lib/cjs.js create mode 100644 node_modules/y18n/build/lib/index.js create mode 100644 node_modules/y18n/build/lib/platform-shims/node.js create mode 100644 node_modules/y18n/index.mjs create mode 100644 node_modules/y18n/package.json create mode 100644 node_modules/yallist/LICENSE create mode 100644 node_modules/yallist/README.md create mode 100644 node_modules/yallist/iterator.js create mode 100644 node_modules/yallist/package.json create mode 100644 node_modules/yallist/yallist.js create mode 100644 node_modules/yargs-parser/CHANGELOG.md create mode 100644 node_modules/yargs-parser/LICENSE.txt create mode 100644 node_modules/yargs-parser/README.md create mode 100644 node_modules/yargs-parser/browser.js create mode 100644 node_modules/yargs-parser/build/index.cjs create mode 100644 node_modules/yargs-parser/build/lib/index.js create mode 100644 node_modules/yargs-parser/build/lib/string-utils.js create mode 100644 node_modules/yargs-parser/build/lib/tokenize-arg-string.js create mode 100644 node_modules/yargs-parser/build/lib/yargs-parser-types.js create mode 100644 node_modules/yargs-parser/build/lib/yargs-parser.js create mode 100644 node_modules/yargs-parser/package.json create mode 100644 node_modules/yargs/LICENSE create mode 100644 node_modules/yargs/README.md create mode 100644 node_modules/yargs/browser.d.ts create mode 100644 node_modules/yargs/browser.mjs create mode 100644 node_modules/yargs/build/index.cjs create mode 100644 node_modules/yargs/build/lib/argsert.js create mode 100644 node_modules/yargs/build/lib/command.js create mode 100644 node_modules/yargs/build/lib/completion-templates.js create mode 100644 node_modules/yargs/build/lib/completion.js create mode 100644 node_modules/yargs/build/lib/middleware.js create mode 100644 node_modules/yargs/build/lib/parse-command.js create mode 100644 node_modules/yargs/build/lib/typings/common-types.js create mode 100644 node_modules/yargs/build/lib/typings/yargs-parser-types.js create mode 100644 node_modules/yargs/build/lib/usage.js create mode 100644 node_modules/yargs/build/lib/utils/apply-extends.js create mode 100644 node_modules/yargs/build/lib/utils/is-promise.js create mode 100644 node_modules/yargs/build/lib/utils/levenshtein.js create mode 100644 node_modules/yargs/build/lib/utils/maybe-async-result.js create mode 100644 node_modules/yargs/build/lib/utils/obj-filter.js create mode 100644 node_modules/yargs/build/lib/utils/process-argv.js create mode 100644 node_modules/yargs/build/lib/utils/set-blocking.js create mode 100644 node_modules/yargs/build/lib/utils/which-module.js create mode 100644 node_modules/yargs/build/lib/validation.js create mode 100644 node_modules/yargs/build/lib/yargs-factory.js create mode 100644 node_modules/yargs/build/lib/yerror.js create mode 100644 node_modules/yargs/helpers/helpers.mjs create mode 100644 node_modules/yargs/helpers/index.js create mode 100644 node_modules/yargs/helpers/package.json create mode 100644 node_modules/yargs/index.cjs create mode 100644 node_modules/yargs/index.mjs create mode 100644 node_modules/yargs/lib/platform-shims/browser.mjs create mode 100644 node_modules/yargs/lib/platform-shims/esm.mjs create mode 100644 node_modules/yargs/locales/be.json create mode 100644 node_modules/yargs/locales/cs.json create mode 100644 node_modules/yargs/locales/de.json create mode 100644 node_modules/yargs/locales/en.json create mode 100644 node_modules/yargs/locales/es.json create mode 100644 node_modules/yargs/locales/fi.json create mode 100644 node_modules/yargs/locales/fr.json create mode 100644 node_modules/yargs/locales/hi.json create mode 100644 node_modules/yargs/locales/hu.json create mode 100644 node_modules/yargs/locales/id.json create mode 100644 node_modules/yargs/locales/it.json create mode 100644 node_modules/yargs/locales/ja.json create mode 100644 node_modules/yargs/locales/ko.json create mode 100644 node_modules/yargs/locales/nb.json create mode 100644 node_modules/yargs/locales/nl.json create mode 100644 node_modules/yargs/locales/nn.json create mode 100644 node_modules/yargs/locales/pirate.json create mode 100644 node_modules/yargs/locales/pl.json create mode 100644 node_modules/yargs/locales/pt.json create mode 100644 node_modules/yargs/locales/pt_BR.json create mode 100644 node_modules/yargs/locales/ru.json create mode 100644 node_modules/yargs/locales/th.json create mode 100644 node_modules/yargs/locales/tr.json create mode 100644 node_modules/yargs/locales/uk_UA.json create mode 100644 node_modules/yargs/locales/uz.json create mode 100644 node_modules/yargs/locales/zh_CN.json create mode 100644 node_modules/yargs/locales/zh_TW.json create mode 100644 node_modules/yargs/package.json create mode 100644 node_modules/yargs/yargs create mode 100644 node_modules/yargs/yargs.mjs create mode 100644 node_modules/yocto-queue/index.d.ts create mode 100644 node_modules/yocto-queue/index.js create mode 100644 node_modules/yocto-queue/license create mode 100644 node_modules/yocto-queue/package.json create mode 100644 node_modules/yocto-queue/readme.md diff --git a/node_modules/.bin/browserslist b/node_modules/.bin/browserslist new file mode 120000 index 00000000..3cd991b2 --- /dev/null +++ b/node_modules/.bin/browserslist @@ -0,0 +1 @@ +../browserslist/cli.js \ No newline at end of file diff --git a/node_modules/.bin/create-jest b/node_modules/.bin/create-jest new file mode 120000 index 00000000..8d6301e0 --- /dev/null +++ b/node_modules/.bin/create-jest @@ -0,0 +1 @@ +../create-jest/bin/create-jest.js \ No newline at end of file diff --git a/node_modules/.bin/esparse b/node_modules/.bin/esparse new file mode 120000 index 00000000..7423b18b --- /dev/null +++ b/node_modules/.bin/esparse @@ -0,0 +1 @@ +../esprima/bin/esparse.js \ No newline at end of file diff --git a/node_modules/.bin/esvalidate b/node_modules/.bin/esvalidate new file mode 120000 index 00000000..16069eff --- /dev/null +++ b/node_modules/.bin/esvalidate @@ -0,0 +1 @@ +../esprima/bin/esvalidate.js \ No newline at end of file diff --git a/node_modules/.bin/import-local-fixture b/node_modules/.bin/import-local-fixture new file mode 120000 index 00000000..ff4b1048 --- /dev/null +++ b/node_modules/.bin/import-local-fixture @@ -0,0 +1 @@ +../import-local/fixtures/cli.js \ No newline at end of file diff --git a/node_modules/.bin/jest b/node_modules/.bin/jest new file mode 120000 index 00000000..61c18615 --- /dev/null +++ b/node_modules/.bin/jest @@ -0,0 +1 @@ +../jest/bin/jest.js \ No newline at end of file diff --git a/node_modules/.bin/js-yaml b/node_modules/.bin/js-yaml new file mode 120000 index 00000000..9dbd010d --- /dev/null +++ b/node_modules/.bin/js-yaml @@ -0,0 +1 @@ +../js-yaml/bin/js-yaml.js \ No newline at end of file diff --git a/node_modules/.bin/jsesc b/node_modules/.bin/jsesc new file mode 120000 index 00000000..7237604c --- /dev/null +++ b/node_modules/.bin/jsesc @@ -0,0 +1 @@ +../jsesc/bin/jsesc \ No newline at end of file diff --git a/node_modules/.bin/json5 b/node_modules/.bin/json5 new file mode 120000 index 00000000..217f3798 --- /dev/null +++ b/node_modules/.bin/json5 @@ -0,0 +1 @@ +../json5/lib/cli.js \ No newline at end of file diff --git a/node_modules/.bin/node-which b/node_modules/.bin/node-which new file mode 120000 index 00000000..6f8415ec --- /dev/null +++ b/node_modules/.bin/node-which @@ -0,0 +1 @@ +../which/bin/node-which \ No newline at end of file diff --git a/node_modules/.bin/parser b/node_modules/.bin/parser new file mode 120000 index 00000000..ce7bf97e --- /dev/null +++ b/node_modules/.bin/parser @@ -0,0 +1 @@ +../@babel/parser/bin/babel-parser.js \ No newline at end of file diff --git a/node_modules/.bin/resolve b/node_modules/.bin/resolve new file mode 120000 index 00000000..b6afda6c --- /dev/null +++ b/node_modules/.bin/resolve @@ -0,0 +1 @@ +../resolve/bin/resolve \ No newline at end of file diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver new file mode 120000 index 00000000..5aaadf42 --- /dev/null +++ b/node_modules/.bin/semver @@ -0,0 +1 @@ +../semver/bin/semver.js \ No newline at end of file diff --git a/node_modules/.bin/update-browserslist-db b/node_modules/.bin/update-browserslist-db new file mode 120000 index 00000000..b11e16f3 --- /dev/null +++ b/node_modules/.bin/update-browserslist-db @@ -0,0 +1 @@ +../update-browserslist-db/cli.js \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index 7af67ab6..f695ac85 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -3,280 +3,1855 @@ "lockfileVersion": 3, "requires": true, "packages": { - "node_modules/@esbuild/linux-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", - "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", - "cpu": [ - "x64" - ], + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, "engines": { - "node": ">=18" + "node": ">=6.0.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz", - "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==", - "cpu": [ - "x64" - ], + "node_modules/@babel/compat-data": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", + "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@types/chai": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", - "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", + "node_modules/@babel/core": { + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", + "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", "dev": true, "license": "MIT", "dependencies": { - "@types/deep-eql": "*" + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.4", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.27.4", + "@babel/types": "^7.27.3", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@types/deep-eql": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "node_modules/@babel/generator": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", + "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.5", + "@babel/types": "^7.27.3", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@vitest/expect": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.1.tgz", - "integrity": "sha512-FqS/BnDOzV6+IpxrTg5GQRyLOCtcJqkwMwcS8qGCI2IyRVDwPAtutztaf1CjtPHlZlWtl1yUPCd7HM0cNiDOYw==", + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, "license": "MIT", "dependencies": { - "@types/chai": "^5.2.2", - "@vitest/spy": "3.2.1", - "@vitest/utils": "3.2.1", - "chai": "^5.2.0", - "tinyrainbow": "^2.0.0" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@vitest/mocker": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.1.tgz", - "integrity": "sha512-OXxMJnx1lkB+Vl65Re5BrsZEHc90s5NMjD23ZQ9NlU7f7nZiETGoX4NeKZSmsKjseuMq2uOYXdLOeoM0pJU+qw==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.2.1", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.17" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } + "@babel/core": "^7.0.0" } }, - "node_modules/@vitest/pretty-format": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.1.tgz", - "integrity": "sha512-xBh1X2GPlOGBupp6E1RcUQWIxw0w/hRLd3XyBS6H+dMdKTAqHDNsIR2AnJwPA3yYe9DFy3VUKTe3VRTrAiQ01g==", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", "dev": true, "license": "MIT", "dependencies": { - "tinyrainbow": "^2.0.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@vitest/runner": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.1.tgz", - "integrity": "sha512-kygXhNTu/wkMYbwYpS3z/9tBe0O8qpdBuC3dD/AW9sWa0LE/DAZEjnHtWA9sIad7lpD4nFW1yQ+zN7mEKNH3yA==", + "node_modules/@babel/parser": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "3.2.1", - "pathe": "^2.0.3" + "@babel/types": "^7.27.3" }, - "funding": { - "url": "https://opencollective.com/vitest" + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@vitest/snapshot": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.1.tgz", - "integrity": "sha512-5xko/ZpW2Yc65NVK9Gpfg2y4BFvcF+At7yRT5AHUpTg9JvZ4xZoyuRY4ASlmNcBZjMslV08VRLDrBOmUe2YX3g==", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.2.1", - "magic-string": "^0.30.17", - "pathe": "^2.0.3" + "@babel/helper-plugin-utils": "^7.8.0" }, - "funding": { - "url": "https://opencollective.com/vitest" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@vitest/spy": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.1.tgz", - "integrity": "sha512-Nbfib34Z2rfcJGSetMxjDCznn4pCYPZOtQYox2kzebIJcgH75yheIKd5QYSFmR8DIZf2M8fwOm66qSDIfRFFfQ==", + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, "license": "MIT", "dependencies": { - "tinyspy": "^4.0.3" + "@babel/helper-plugin-utils": "^7.8.0" }, - "funding": { - "url": "https://opencollective.com/vitest" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@vitest/utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.1.tgz", - "integrity": "sha512-KkHlGhePEKZSub5ViknBcN5KEF+u7dSUr9NW8QsVICusUojrgrOnnY3DEWWO877ax2Pyopuk2qHmt+gkNKnBVw==", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.2.1", - "loupe": "^3.1.3", - "tinyrainbow": "^2.0.0" + "@babel/helper-plugin-utils": "^7.12.13" }, - "funding": { - "url": "https://opencollective.com/vitest" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/chai": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", - "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "license": "MIT", "dependencies": { - "assertion-error": "^2.0.1", - "check-error": "^2.1.1", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=12" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/check-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 16" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=6.0" + "node": ">=6.9.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/deep-eql": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/esbuild": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", - "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=18" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.5", - "@esbuild/android-arm": "0.25.5", + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz", + "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz", + "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/chai": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", + "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/node": { + "version": "22.15.29", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.29.tgz", + "integrity": "sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitest/expect": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.1.tgz", + "integrity": "sha512-FqS/BnDOzV6+IpxrTg5GQRyLOCtcJqkwMwcS8qGCI2IyRVDwPAtutztaf1CjtPHlZlWtl1yUPCd7HM0cNiDOYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.1", + "@vitest/utils": "3.2.1", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.1.tgz", + "integrity": "sha512-OXxMJnx1lkB+Vl65Re5BrsZEHc90s5NMjD23ZQ9NlU7f7nZiETGoX4NeKZSmsKjseuMq2uOYXdLOeoM0pJU+qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.1", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.1.tgz", + "integrity": "sha512-xBh1X2GPlOGBupp6E1RcUQWIxw0w/hRLd3XyBS6H+dMdKTAqHDNsIR2AnJwPA3yYe9DFy3VUKTe3VRTrAiQ01g==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.1.tgz", + "integrity": "sha512-kygXhNTu/wkMYbwYpS3z/9tBe0O8qpdBuC3dD/AW9sWa0LE/DAZEjnHtWA9sIad7lpD4nFW1yQ+zN7mEKNH3yA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.1", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.1.tgz", + "integrity": "sha512-5xko/ZpW2Yc65NVK9Gpfg2y4BFvcF+At7yRT5AHUpTg9JvZ4xZoyuRY4ASlmNcBZjMslV08VRLDrBOmUe2YX3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.1.tgz", + "integrity": "sha512-Nbfib34Z2rfcJGSetMxjDCznn4pCYPZOtQYox2kzebIJcgH75yheIKd5QYSFmR8DIZf2M8fwOm66qSDIfRFFfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.1.tgz", + "integrity": "sha512-KkHlGhePEKZSub5ViknBcN5KEF+u7dSUr9NW8QsVICusUojrgrOnnY3DEWWO877ax2Pyopuk2qHmt+gkNKnBVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.1", + "loupe": "^3.1.3", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", + "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001718", + "electron-to-chromium": "^1.5.160", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001721", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz", + "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chai": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.165", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.165.tgz", + "integrity": "sha512-naiMx1Z6Nb2TxPU6fiFrUrDTjyPMLdTtaOd2oLmG8zVSg2hCWGkhPyxwk+qRmZ1ytwVqUv0u7ZcDA5+ALhaUtw==", + "dev": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", "@esbuild/android-arm64": "0.25.5", "@esbuild/android-x64": "0.25.5", "@esbuild/darwin-arm64": "0.25.5", @@ -302,56 +1877,1338 @@ "@esbuild/win32-x64": "0.25.5" } }, - "node_modules/estree-walker": { + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz", + "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fdir": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", + "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kleur": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loupe": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "@types/estree": "^1.0.0" + "tmpl": "1.0.5" } }, - "node_modules/expect-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz", - "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==", + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, - "license": "Apache-2.0", + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, "engines": { - "node": ">=12.0.0" + "node": ">=8.6" } }, - "node_modules/fdir": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", - "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" + "engines": { + "node": ">=8.6" }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/loupe": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", - "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, "node_modules/ms": { @@ -380,6 +3237,187 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, "node_modules/pathe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", @@ -417,33 +3455,186 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/postcss": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", - "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", + "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=10" } }, "node_modules/rollup": { @@ -486,6 +3677,39 @@ "fsevents": "~2.3.2" } }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/siginfo": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", @@ -493,6 +3717,40 @@ "dev": true, "license": "ISC" }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -503,6 +3761,37 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/stackback": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", @@ -517,6 +3806,122 @@ "dev": true, "license": "MIT" }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", @@ -578,6 +3983,102 @@ "node": ">=14.0.0" } }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, "node_modules/vite": { "version": "6.3.5", "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", @@ -749,6 +4250,32 @@ } } }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/why-is-node-running": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", @@ -765,6 +4292,104 @@ "engines": { "node": ">=8" } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/node_modules/@ampproject/remapping/LICENSE b/node_modules/@ampproject/remapping/LICENSE new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/node_modules/@ampproject/remapping/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/node_modules/@ampproject/remapping/README.md b/node_modules/@ampproject/remapping/README.md new file mode 100644 index 00000000..1463c9f6 --- /dev/null +++ b/node_modules/@ampproject/remapping/README.md @@ -0,0 +1,218 @@ +# @ampproject/remapping + +> Remap sequential sourcemaps through transformations to point at the original source code + +Remapping allows you to take the sourcemaps generated through transforming your code and "remap" +them to the original source locations. Think "my minified code, transformed with babel and bundled +with webpack", all pointing to the correct location in your original source code. + +With remapping, none of your source code transformations need to be aware of the input's sourcemap, +they only need to generate an output sourcemap. This greatly simplifies building custom +transformations (think a find-and-replace). + +## Installation + +```sh +npm install @ampproject/remapping +``` + +## Usage + +```typescript +function remapping( + map: SourceMap | SourceMap[], + loader: (file: string, ctx: LoaderContext) => (SourceMap | null | undefined), + options?: { excludeContent: boolean, decodedMappings: boolean } +): SourceMap; + +// LoaderContext gives the loader the importing sourcemap, tree depth, the ability to override the +// "source" location (where child sources are resolved relative to, or the location of original +// source), and the ability to override the "content" of an original source for inclusion in the +// output sourcemap. +type LoaderContext = { + readonly importer: string; + readonly depth: number; + source: string; + content: string | null | undefined; +} +``` + +`remapping` takes the final output sourcemap, and a `loader` function. For every source file pointer +in the sourcemap, the `loader` will be called with the resolved path. If the path itself represents +a transformed file (it has a sourcmap associated with it), then the `loader` should return that +sourcemap. If not, the path will be treated as an original, untransformed source code. + +```js +// Babel transformed "helloworld.js" into "transformed.js" +const transformedMap = JSON.stringify({ + file: 'transformed.js', + // 1st column of 2nd line of output file translates into the 1st source + // file, line 3, column 2 + mappings: ';CAEE', + sources: ['helloworld.js'], + version: 3, +}); + +// Uglify minified "transformed.js" into "transformed.min.js" +const minifiedTransformedMap = JSON.stringify({ + file: 'transformed.min.js', + // 0th column of 1st line of output file translates into the 1st source + // file, line 2, column 1. + mappings: 'AACC', + names: [], + sources: ['transformed.js'], + version: 3, +}); + +const remapped = remapping( + minifiedTransformedMap, + (file, ctx) => { + + // The "transformed.js" file is an transformed file. + if (file === 'transformed.js') { + // The root importer is empty. + console.assert(ctx.importer === ''); + // The depth in the sourcemap tree we're currently loading. + // The root `minifiedTransformedMap` is depth 0, and its source children are depth 1, etc. + console.assert(ctx.depth === 1); + + return transformedMap; + } + + // Loader will be called to load transformedMap's source file pointers as well. + console.assert(file === 'helloworld.js'); + // `transformed.js`'s sourcemap points into `helloworld.js`. + console.assert(ctx.importer === 'transformed.js'); + // This is a source child of `transformed`, which is a source child of `minifiedTransformedMap`. + console.assert(ctx.depth === 2); + return null; + } +); + +console.log(remapped); +// { +// file: 'transpiled.min.js', +// mappings: 'AAEE', +// sources: ['helloworld.js'], +// version: 3, +// }; +``` + +In this example, `loader` will be called twice: + +1. `"transformed.js"`, the first source file pointer in the `minifiedTransformedMap`. We return the + associated sourcemap for it (its a transformed file, after all) so that sourcemap locations can + be traced through it into the source files it represents. +2. `"helloworld.js"`, our original, unmodified source code. This file does not have a sourcemap, so + we return `null`. + +The `remapped` sourcemap now points from `transformed.min.js` into locations in `helloworld.js`. If +you were to read the `mappings`, it says "0th column of the first line output line points to the 1st +column of the 2nd line of the file `helloworld.js`". + +### Multiple transformations of a file + +As a convenience, if you have multiple single-source transformations of a file, you may pass an +array of sourcemap files in the order of most-recent transformation sourcemap first. Note that this +changes the `importer` and `depth` of each call to our loader. So our above example could have been +written as: + +```js +const remapped = remapping( + [minifiedTransformedMap, transformedMap], + () => null +); + +console.log(remapped); +// { +// file: 'transpiled.min.js', +// mappings: 'AAEE', +// sources: ['helloworld.js'], +// version: 3, +// }; +``` + +### Advanced control of the loading graph + +#### `source` + +The `source` property can overridden to any value to change the location of the current load. Eg, +for an original source file, it allows us to change the location to the original source regardless +of what the sourcemap source entry says. And for transformed files, it allows us to change the +relative resolving location for child sources of the loaded sourcemap. + +```js +const remapped = remapping( + minifiedTransformedMap, + (file, ctx) => { + + if (file === 'transformed.js') { + // We pretend the transformed.js file actually exists in the 'src/' directory. When the nested + // source files are loaded, they will now be relative to `src/`. + ctx.source = 'src/transformed.js'; + return transformedMap; + } + + console.assert(file === 'src/helloworld.js'); + // We could futher change the source of this original file, eg, to be inside a nested directory + // itself. This will be reflected in the remapped sourcemap. + ctx.source = 'src/nested/transformed.js'; + return null; + } +); + +console.log(remapped); +// { +// …, +// sources: ['src/nested/helloworld.js'], +// }; +``` + + +#### `content` + +The `content` property can be overridden when we encounter an original source file. Eg, this allows +you to manually provide the source content of the original file regardless of whether the +`sourcesContent` field is present in the parent sourcemap. It can also be set to `null` to remove +the source content. + +```js +const remapped = remapping( + minifiedTransformedMap, + (file, ctx) => { + + if (file === 'transformed.js') { + // transformedMap does not include a `sourcesContent` field, so usually the remapped sourcemap + // would not include any `sourcesContent` values. + return transformedMap; + } + + console.assert(file === 'helloworld.js'); + // We can read the file to provide the source content. + ctx.content = fs.readFileSync(file, 'utf8'); + return null; + } +); + +console.log(remapped); +// { +// …, +// sourcesContent: [ +// 'console.log("Hello world!")', +// ], +// }; +``` + +### Options + +#### excludeContent + +By default, `excludeContent` is `false`. Passing `{ excludeContent: true }` will exclude the +`sourcesContent` field from the returned sourcemap. This is mainly useful when you want to reduce +the size out the sourcemap. + +#### decodedMappings + +By default, `decodedMappings` is `false`. Passing `{ decodedMappings: true }` will leave the +`mappings` field in a [decoded state](https://github.com/rich-harris/sourcemap-codec) instead of +encoding into a VLQ string. diff --git a/node_modules/@ampproject/remapping/dist/remapping.mjs b/node_modules/@ampproject/remapping/dist/remapping.mjs new file mode 100644 index 00000000..f3875999 --- /dev/null +++ b/node_modules/@ampproject/remapping/dist/remapping.mjs @@ -0,0 +1,197 @@ +import { decodedMappings, traceSegment, TraceMap } from '@jridgewell/trace-mapping'; +import { GenMapping, maybeAddSegment, setSourceContent, setIgnore, toDecodedMap, toEncodedMap } from '@jridgewell/gen-mapping'; + +const SOURCELESS_MAPPING = /* #__PURE__ */ SegmentObject('', -1, -1, '', null, false); +const EMPTY_SOURCES = []; +function SegmentObject(source, line, column, name, content, ignore) { + return { source, line, column, name, content, ignore }; +} +function Source(map, sources, source, content, ignore) { + return { + map, + sources, + source, + content, + ignore, + }; +} +/** + * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes + * (which may themselves be SourceMapTrees). + */ +function MapSource(map, sources) { + return Source(map, sources, '', null, false); +} +/** + * A "leaf" node in the sourcemap tree, representing an original, unmodified source file. Recursive + * segment tracing ends at the `OriginalSource`. + */ +function OriginalSource(source, content, ignore) { + return Source(null, EMPTY_SOURCES, source, content, ignore); +} +/** + * traceMappings is only called on the root level SourceMapTree, and begins the process of + * resolving each mapping in terms of the original source files. + */ +function traceMappings(tree) { + // TODO: Eventually support sourceRoot, which has to be removed because the sources are already + // fully resolved. We'll need to make sources relative to the sourceRoot before adding them. + const gen = new GenMapping({ file: tree.map.file }); + const { sources: rootSources, map } = tree; + const rootNames = map.names; + const rootMappings = decodedMappings(map); + for (let i = 0; i < rootMappings.length; i++) { + const segments = rootMappings[i]; + for (let j = 0; j < segments.length; j++) { + const segment = segments[j]; + const genCol = segment[0]; + let traced = SOURCELESS_MAPPING; + // 1-length segments only move the current generated column, there's no source information + // to gather from it. + if (segment.length !== 1) { + const source = rootSources[segment[1]]; + traced = originalPositionFor(source, segment[2], segment[3], segment.length === 5 ? rootNames[segment[4]] : ''); + // If the trace is invalid, then the trace ran into a sourcemap that doesn't contain a + // respective segment into an original source. + if (traced == null) + continue; + } + const { column, line, name, content, source, ignore } = traced; + maybeAddSegment(gen, i, genCol, source, line, column, name); + if (source && content != null) + setSourceContent(gen, source, content); + if (ignore) + setIgnore(gen, source, true); + } + } + return gen; +} +/** + * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own + * child SourceMapTrees, until we find the original source map. + */ +function originalPositionFor(source, line, column, name) { + if (!source.map) { + return SegmentObject(source.source, line, column, name, source.content, source.ignore); + } + const segment = traceSegment(source.map, line, column); + // If we couldn't find a segment, then this doesn't exist in the sourcemap. + if (segment == null) + return null; + // 1-length segments only move the current generated column, there's no source information + // to gather from it. + if (segment.length === 1) + return SOURCELESS_MAPPING; + return originalPositionFor(source.sources[segment[1]], segment[2], segment[3], segment.length === 5 ? source.map.names[segment[4]] : name); +} + +function asArray(value) { + if (Array.isArray(value)) + return value; + return [value]; +} +/** + * Recursively builds a tree structure out of sourcemap files, with each node + * being either an `OriginalSource` "leaf" or a `SourceMapTree` composed of + * `OriginalSource`s and `SourceMapTree`s. + * + * Every sourcemap is composed of a collection of source files and mappings + * into locations of those source files. When we generate a `SourceMapTree` for + * the sourcemap, we attempt to load each source file's own sourcemap. If it + * does not have an associated sourcemap, it is considered an original, + * unmodified source file. + */ +function buildSourceMapTree(input, loader) { + const maps = asArray(input).map((m) => new TraceMap(m, '')); + const map = maps.pop(); + for (let i = 0; i < maps.length; i++) { + if (maps[i].sources.length > 1) { + throw new Error(`Transformation map ${i} must have exactly one source file.\n` + + 'Did you specify these with the most recent transformation maps first?'); + } + } + let tree = build(map, loader, '', 0); + for (let i = maps.length - 1; i >= 0; i--) { + tree = MapSource(maps[i], [tree]); + } + return tree; +} +function build(map, loader, importer, importerDepth) { + const { resolvedSources, sourcesContent, ignoreList } = map; + const depth = importerDepth + 1; + const children = resolvedSources.map((sourceFile, i) => { + // The loading context gives the loader more information about why this file is being loaded + // (eg, from which importer). It also allows the loader to override the location of the loaded + // sourcemap/original source, or to override the content in the sourcesContent field if it's + // an unmodified source file. + const ctx = { + importer, + depth, + source: sourceFile || '', + content: undefined, + ignore: undefined, + }; + // Use the provided loader callback to retrieve the file's sourcemap. + // TODO: We should eventually support async loading of sourcemap files. + const sourceMap = loader(ctx.source, ctx); + const { source, content, ignore } = ctx; + // If there is a sourcemap, then we need to recurse into it to load its source files. + if (sourceMap) + return build(new TraceMap(sourceMap, source), loader, source, depth); + // Else, it's an unmodified source file. + // The contents of this unmodified source file can be overridden via the loader context, + // allowing it to be explicitly null or a string. If it remains undefined, we fall back to + // the importing sourcemap's `sourcesContent` field. + const sourceContent = content !== undefined ? content : sourcesContent ? sourcesContent[i] : null; + const ignored = ignore !== undefined ? ignore : ignoreList ? ignoreList.includes(i) : false; + return OriginalSource(source, sourceContent, ignored); + }); + return MapSource(map, children); +} + +/** + * A SourceMap v3 compatible sourcemap, which only includes fields that were + * provided to it. + */ +class SourceMap { + constructor(map, options) { + const out = options.decodedMappings ? toDecodedMap(map) : toEncodedMap(map); + this.version = out.version; // SourceMap spec says this should be first. + this.file = out.file; + this.mappings = out.mappings; + this.names = out.names; + this.ignoreList = out.ignoreList; + this.sourceRoot = out.sourceRoot; + this.sources = out.sources; + if (!options.excludeContent) { + this.sourcesContent = out.sourcesContent; + } + } + toString() { + return JSON.stringify(this); + } +} + +/** + * Traces through all the mappings in the root sourcemap, through the sources + * (and their sourcemaps), all the way back to the original source location. + * + * `loader` will be called every time we encounter a source file. If it returns + * a sourcemap, we will recurse into that sourcemap to continue the trace. If + * it returns a falsey value, that source file is treated as an original, + * unmodified source file. + * + * Pass `excludeContent` to exclude any self-containing source file content + * from the output sourcemap. + * + * Pass `decodedMappings` to receive a SourceMap with decoded (instead of + * VLQ encoded) mappings. + */ +function remapping(input, loader, options) { + const opts = typeof options === 'object' ? options : { excludeContent: !!options, decodedMappings: false }; + const tree = buildSourceMapTree(input, loader); + return new SourceMap(traceMappings(tree), opts); +} + +export { remapping as default }; +//# sourceMappingURL=remapping.mjs.map diff --git a/node_modules/@ampproject/remapping/dist/remapping.mjs.map b/node_modules/@ampproject/remapping/dist/remapping.mjs.map new file mode 100644 index 00000000..0eb007bf --- /dev/null +++ b/node_modules/@ampproject/remapping/dist/remapping.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"remapping.mjs","sources":["../src/source-map-tree.ts","../src/build-source-map-tree.ts","../src/source-map.ts","../src/remapping.ts"],"sourcesContent":["import { GenMapping, maybeAddSegment, setIgnore, setSourceContent } from '@jridgewell/gen-mapping';\nimport { traceSegment, decodedMappings } from '@jridgewell/trace-mapping';\n\nimport type { TraceMap } from '@jridgewell/trace-mapping';\n\nexport type SourceMapSegmentObject = {\n column: number;\n line: number;\n name: string;\n source: string;\n content: string | null;\n ignore: boolean;\n};\n\nexport type OriginalSource = {\n map: null;\n sources: Sources[];\n source: string;\n content: string | null;\n ignore: boolean;\n};\n\nexport type MapSource = {\n map: TraceMap;\n sources: Sources[];\n source: string;\n content: null;\n ignore: false;\n};\n\nexport type Sources = OriginalSource | MapSource;\n\nconst SOURCELESS_MAPPING = /* #__PURE__ */ SegmentObject('', -1, -1, '', null, false);\nconst EMPTY_SOURCES: Sources[] = [];\n\nfunction SegmentObject(\n source: string,\n line: number,\n column: number,\n name: string,\n content: string | null,\n ignore: boolean\n): SourceMapSegmentObject {\n return { source, line, column, name, content, ignore };\n}\n\nfunction Source(\n map: TraceMap,\n sources: Sources[],\n source: '',\n content: null,\n ignore: false\n): MapSource;\nfunction Source(\n map: null,\n sources: Sources[],\n source: string,\n content: string | null,\n ignore: boolean\n): OriginalSource;\nfunction Source(\n map: TraceMap | null,\n sources: Sources[],\n source: string | '',\n content: string | null,\n ignore: boolean\n): Sources {\n return {\n map,\n sources,\n source,\n content,\n ignore,\n } as any;\n}\n\n/**\n * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes\n * (which may themselves be SourceMapTrees).\n */\nexport function MapSource(map: TraceMap, sources: Sources[]): MapSource {\n return Source(map, sources, '', null, false);\n}\n\n/**\n * A \"leaf\" node in the sourcemap tree, representing an original, unmodified source file. Recursive\n * segment tracing ends at the `OriginalSource`.\n */\nexport function OriginalSource(\n source: string,\n content: string | null,\n ignore: boolean\n): OriginalSource {\n return Source(null, EMPTY_SOURCES, source, content, ignore);\n}\n\n/**\n * traceMappings is only called on the root level SourceMapTree, and begins the process of\n * resolving each mapping in terms of the original source files.\n */\nexport function traceMappings(tree: MapSource): GenMapping {\n // TODO: Eventually support sourceRoot, which has to be removed because the sources are already\n // fully resolved. We'll need to make sources relative to the sourceRoot before adding them.\n const gen = new GenMapping({ file: tree.map.file });\n const { sources: rootSources, map } = tree;\n const rootNames = map.names;\n const rootMappings = decodedMappings(map);\n\n for (let i = 0; i < rootMappings.length; i++) {\n const segments = rootMappings[i];\n\n for (let j = 0; j < segments.length; j++) {\n const segment = segments[j];\n const genCol = segment[0];\n let traced: SourceMapSegmentObject | null = SOURCELESS_MAPPING;\n\n // 1-length segments only move the current generated column, there's no source information\n // to gather from it.\n if (segment.length !== 1) {\n const source = rootSources[segment[1]];\n traced = originalPositionFor(\n source,\n segment[2],\n segment[3],\n segment.length === 5 ? rootNames[segment[4]] : ''\n );\n\n // If the trace is invalid, then the trace ran into a sourcemap that doesn't contain a\n // respective segment into an original source.\n if (traced == null) continue;\n }\n\n const { column, line, name, content, source, ignore } = traced;\n\n maybeAddSegment(gen, i, genCol, source, line, column, name);\n if (source && content != null) setSourceContent(gen, source, content);\n if (ignore) setIgnore(gen, source, true);\n }\n }\n\n return gen;\n}\n\n/**\n * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own\n * child SourceMapTrees, until we find the original source map.\n */\nexport function originalPositionFor(\n source: Sources,\n line: number,\n column: number,\n name: string\n): SourceMapSegmentObject | null {\n if (!source.map) {\n return SegmentObject(source.source, line, column, name, source.content, source.ignore);\n }\n\n const segment = traceSegment(source.map, line, column);\n\n // If we couldn't find a segment, then this doesn't exist in the sourcemap.\n if (segment == null) return null;\n // 1-length segments only move the current generated column, there's no source information\n // to gather from it.\n if (segment.length === 1) return SOURCELESS_MAPPING;\n\n return originalPositionFor(\n source.sources[segment[1]],\n segment[2],\n segment[3],\n segment.length === 5 ? source.map.names[segment[4]] : name\n );\n}\n","import { TraceMap } from '@jridgewell/trace-mapping';\n\nimport { OriginalSource, MapSource } from './source-map-tree';\n\nimport type { Sources, MapSource as MapSourceType } from './source-map-tree';\nimport type { SourceMapInput, SourceMapLoader, LoaderContext } from './types';\n\nfunction asArray(value: T | T[]): T[] {\n if (Array.isArray(value)) return value;\n return [value];\n}\n\n/**\n * Recursively builds a tree structure out of sourcemap files, with each node\n * being either an `OriginalSource` \"leaf\" or a `SourceMapTree` composed of\n * `OriginalSource`s and `SourceMapTree`s.\n *\n * Every sourcemap is composed of a collection of source files and mappings\n * into locations of those source files. When we generate a `SourceMapTree` for\n * the sourcemap, we attempt to load each source file's own sourcemap. If it\n * does not have an associated sourcemap, it is considered an original,\n * unmodified source file.\n */\nexport default function buildSourceMapTree(\n input: SourceMapInput | SourceMapInput[],\n loader: SourceMapLoader\n): MapSourceType {\n const maps = asArray(input).map((m) => new TraceMap(m, ''));\n const map = maps.pop()!;\n\n for (let i = 0; i < maps.length; i++) {\n if (maps[i].sources.length > 1) {\n throw new Error(\n `Transformation map ${i} must have exactly one source file.\\n` +\n 'Did you specify these with the most recent transformation maps first?'\n );\n }\n }\n\n let tree = build(map, loader, '', 0);\n for (let i = maps.length - 1; i >= 0; i--) {\n tree = MapSource(maps[i], [tree]);\n }\n return tree;\n}\n\nfunction build(\n map: TraceMap,\n loader: SourceMapLoader,\n importer: string,\n importerDepth: number\n): MapSourceType {\n const { resolvedSources, sourcesContent, ignoreList } = map;\n\n const depth = importerDepth + 1;\n const children = resolvedSources.map((sourceFile: string | null, i: number): Sources => {\n // The loading context gives the loader more information about why this file is being loaded\n // (eg, from which importer). It also allows the loader to override the location of the loaded\n // sourcemap/original source, or to override the content in the sourcesContent field if it's\n // an unmodified source file.\n const ctx: LoaderContext = {\n importer,\n depth,\n source: sourceFile || '',\n content: undefined,\n ignore: undefined,\n };\n\n // Use the provided loader callback to retrieve the file's sourcemap.\n // TODO: We should eventually support async loading of sourcemap files.\n const sourceMap = loader(ctx.source, ctx);\n\n const { source, content, ignore } = ctx;\n\n // If there is a sourcemap, then we need to recurse into it to load its source files.\n if (sourceMap) return build(new TraceMap(sourceMap, source), loader, source, depth);\n\n // Else, it's an unmodified source file.\n // The contents of this unmodified source file can be overridden via the loader context,\n // allowing it to be explicitly null or a string. If it remains undefined, we fall back to\n // the importing sourcemap's `sourcesContent` field.\n const sourceContent =\n content !== undefined ? content : sourcesContent ? sourcesContent[i] : null;\n const ignored = ignore !== undefined ? ignore : ignoreList ? ignoreList.includes(i) : false;\n return OriginalSource(source, sourceContent, ignored);\n });\n\n return MapSource(map, children);\n}\n","import { toDecodedMap, toEncodedMap } from '@jridgewell/gen-mapping';\n\nimport type { GenMapping } from '@jridgewell/gen-mapping';\nimport type { DecodedSourceMap, EncodedSourceMap, Options } from './types';\n\n/**\n * A SourceMap v3 compatible sourcemap, which only includes fields that were\n * provided to it.\n */\nexport default class SourceMap {\n declare file?: string | null;\n declare mappings: EncodedSourceMap['mappings'] | DecodedSourceMap['mappings'];\n declare sourceRoot?: string;\n declare names: string[];\n declare sources: (string | null)[];\n declare sourcesContent?: (string | null)[];\n declare version: 3;\n declare ignoreList: number[] | undefined;\n\n constructor(map: GenMapping, options: Options) {\n const out = options.decodedMappings ? toDecodedMap(map) : toEncodedMap(map);\n this.version = out.version; // SourceMap spec says this should be first.\n this.file = out.file;\n this.mappings = out.mappings as SourceMap['mappings'];\n this.names = out.names as SourceMap['names'];\n this.ignoreList = out.ignoreList as SourceMap['ignoreList'];\n this.sourceRoot = out.sourceRoot;\n\n this.sources = out.sources as SourceMap['sources'];\n if (!options.excludeContent) {\n this.sourcesContent = out.sourcesContent as SourceMap['sourcesContent'];\n }\n }\n\n toString(): string {\n return JSON.stringify(this);\n }\n}\n","import buildSourceMapTree from './build-source-map-tree';\nimport { traceMappings } from './source-map-tree';\nimport SourceMap from './source-map';\n\nimport type { SourceMapInput, SourceMapLoader, Options } from './types';\nexport type {\n SourceMapSegment,\n EncodedSourceMap,\n EncodedSourceMap as RawSourceMap,\n DecodedSourceMap,\n SourceMapInput,\n SourceMapLoader,\n LoaderContext,\n Options,\n} from './types';\nexport type { SourceMap };\n\n/**\n * Traces through all the mappings in the root sourcemap, through the sources\n * (and their sourcemaps), all the way back to the original source location.\n *\n * `loader` will be called every time we encounter a source file. If it returns\n * a sourcemap, we will recurse into that sourcemap to continue the trace. If\n * it returns a falsey value, that source file is treated as an original,\n * unmodified source file.\n *\n * Pass `excludeContent` to exclude any self-containing source file content\n * from the output sourcemap.\n *\n * Pass `decodedMappings` to receive a SourceMap with decoded (instead of\n * VLQ encoded) mappings.\n */\nexport default function remapping(\n input: SourceMapInput | SourceMapInput[],\n loader: SourceMapLoader,\n options?: boolean | Options\n): SourceMap {\n const opts =\n typeof options === 'object' ? options : { excludeContent: !!options, decodedMappings: false };\n const tree = buildSourceMapTree(input, loader);\n return new SourceMap(traceMappings(tree), opts);\n}\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@ampproject/remapping/dist/remapping.umd.js b/node_modules/@ampproject/remapping/dist/remapping.umd.js new file mode 100644 index 00000000..6b7b3bb5 --- /dev/null +++ b/node_modules/@ampproject/remapping/dist/remapping.umd.js @@ -0,0 +1,202 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@jridgewell/trace-mapping'), require('@jridgewell/gen-mapping')) : + typeof define === 'function' && define.amd ? define(['@jridgewell/trace-mapping', '@jridgewell/gen-mapping'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.remapping = factory(global.traceMapping, global.genMapping)); +})(this, (function (traceMapping, genMapping) { 'use strict'; + + const SOURCELESS_MAPPING = /* #__PURE__ */ SegmentObject('', -1, -1, '', null, false); + const EMPTY_SOURCES = []; + function SegmentObject(source, line, column, name, content, ignore) { + return { source, line, column, name, content, ignore }; + } + function Source(map, sources, source, content, ignore) { + return { + map, + sources, + source, + content, + ignore, + }; + } + /** + * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes + * (which may themselves be SourceMapTrees). + */ + function MapSource(map, sources) { + return Source(map, sources, '', null, false); + } + /** + * A "leaf" node in the sourcemap tree, representing an original, unmodified source file. Recursive + * segment tracing ends at the `OriginalSource`. + */ + function OriginalSource(source, content, ignore) { + return Source(null, EMPTY_SOURCES, source, content, ignore); + } + /** + * traceMappings is only called on the root level SourceMapTree, and begins the process of + * resolving each mapping in terms of the original source files. + */ + function traceMappings(tree) { + // TODO: Eventually support sourceRoot, which has to be removed because the sources are already + // fully resolved. We'll need to make sources relative to the sourceRoot before adding them. + const gen = new genMapping.GenMapping({ file: tree.map.file }); + const { sources: rootSources, map } = tree; + const rootNames = map.names; + const rootMappings = traceMapping.decodedMappings(map); + for (let i = 0; i < rootMappings.length; i++) { + const segments = rootMappings[i]; + for (let j = 0; j < segments.length; j++) { + const segment = segments[j]; + const genCol = segment[0]; + let traced = SOURCELESS_MAPPING; + // 1-length segments only move the current generated column, there's no source information + // to gather from it. + if (segment.length !== 1) { + const source = rootSources[segment[1]]; + traced = originalPositionFor(source, segment[2], segment[3], segment.length === 5 ? rootNames[segment[4]] : ''); + // If the trace is invalid, then the trace ran into a sourcemap that doesn't contain a + // respective segment into an original source. + if (traced == null) + continue; + } + const { column, line, name, content, source, ignore } = traced; + genMapping.maybeAddSegment(gen, i, genCol, source, line, column, name); + if (source && content != null) + genMapping.setSourceContent(gen, source, content); + if (ignore) + genMapping.setIgnore(gen, source, true); + } + } + return gen; + } + /** + * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own + * child SourceMapTrees, until we find the original source map. + */ + function originalPositionFor(source, line, column, name) { + if (!source.map) { + return SegmentObject(source.source, line, column, name, source.content, source.ignore); + } + const segment = traceMapping.traceSegment(source.map, line, column); + // If we couldn't find a segment, then this doesn't exist in the sourcemap. + if (segment == null) + return null; + // 1-length segments only move the current generated column, there's no source information + // to gather from it. + if (segment.length === 1) + return SOURCELESS_MAPPING; + return originalPositionFor(source.sources[segment[1]], segment[2], segment[3], segment.length === 5 ? source.map.names[segment[4]] : name); + } + + function asArray(value) { + if (Array.isArray(value)) + return value; + return [value]; + } + /** + * Recursively builds a tree structure out of sourcemap files, with each node + * being either an `OriginalSource` "leaf" or a `SourceMapTree` composed of + * `OriginalSource`s and `SourceMapTree`s. + * + * Every sourcemap is composed of a collection of source files and mappings + * into locations of those source files. When we generate a `SourceMapTree` for + * the sourcemap, we attempt to load each source file's own sourcemap. If it + * does not have an associated sourcemap, it is considered an original, + * unmodified source file. + */ + function buildSourceMapTree(input, loader) { + const maps = asArray(input).map((m) => new traceMapping.TraceMap(m, '')); + const map = maps.pop(); + for (let i = 0; i < maps.length; i++) { + if (maps[i].sources.length > 1) { + throw new Error(`Transformation map ${i} must have exactly one source file.\n` + + 'Did you specify these with the most recent transformation maps first?'); + } + } + let tree = build(map, loader, '', 0); + for (let i = maps.length - 1; i >= 0; i--) { + tree = MapSource(maps[i], [tree]); + } + return tree; + } + function build(map, loader, importer, importerDepth) { + const { resolvedSources, sourcesContent, ignoreList } = map; + const depth = importerDepth + 1; + const children = resolvedSources.map((sourceFile, i) => { + // The loading context gives the loader more information about why this file is being loaded + // (eg, from which importer). It also allows the loader to override the location of the loaded + // sourcemap/original source, or to override the content in the sourcesContent field if it's + // an unmodified source file. + const ctx = { + importer, + depth, + source: sourceFile || '', + content: undefined, + ignore: undefined, + }; + // Use the provided loader callback to retrieve the file's sourcemap. + // TODO: We should eventually support async loading of sourcemap files. + const sourceMap = loader(ctx.source, ctx); + const { source, content, ignore } = ctx; + // If there is a sourcemap, then we need to recurse into it to load its source files. + if (sourceMap) + return build(new traceMapping.TraceMap(sourceMap, source), loader, source, depth); + // Else, it's an unmodified source file. + // The contents of this unmodified source file can be overridden via the loader context, + // allowing it to be explicitly null or a string. If it remains undefined, we fall back to + // the importing sourcemap's `sourcesContent` field. + const sourceContent = content !== undefined ? content : sourcesContent ? sourcesContent[i] : null; + const ignored = ignore !== undefined ? ignore : ignoreList ? ignoreList.includes(i) : false; + return OriginalSource(source, sourceContent, ignored); + }); + return MapSource(map, children); + } + + /** + * A SourceMap v3 compatible sourcemap, which only includes fields that were + * provided to it. + */ + class SourceMap { + constructor(map, options) { + const out = options.decodedMappings ? genMapping.toDecodedMap(map) : genMapping.toEncodedMap(map); + this.version = out.version; // SourceMap spec says this should be first. + this.file = out.file; + this.mappings = out.mappings; + this.names = out.names; + this.ignoreList = out.ignoreList; + this.sourceRoot = out.sourceRoot; + this.sources = out.sources; + if (!options.excludeContent) { + this.sourcesContent = out.sourcesContent; + } + } + toString() { + return JSON.stringify(this); + } + } + + /** + * Traces through all the mappings in the root sourcemap, through the sources + * (and their sourcemaps), all the way back to the original source location. + * + * `loader` will be called every time we encounter a source file. If it returns + * a sourcemap, we will recurse into that sourcemap to continue the trace. If + * it returns a falsey value, that source file is treated as an original, + * unmodified source file. + * + * Pass `excludeContent` to exclude any self-containing source file content + * from the output sourcemap. + * + * Pass `decodedMappings` to receive a SourceMap with decoded (instead of + * VLQ encoded) mappings. + */ + function remapping(input, loader, options) { + const opts = typeof options === 'object' ? options : { excludeContent: !!options, decodedMappings: false }; + const tree = buildSourceMapTree(input, loader); + return new SourceMap(traceMappings(tree), opts); + } + + return remapping; + +})); +//# sourceMappingURL=remapping.umd.js.map diff --git a/node_modules/@ampproject/remapping/dist/remapping.umd.js.map b/node_modules/@ampproject/remapping/dist/remapping.umd.js.map new file mode 100644 index 00000000..d3f0f87d --- /dev/null +++ b/node_modules/@ampproject/remapping/dist/remapping.umd.js.map @@ -0,0 +1 @@ +{"version":3,"file":"remapping.umd.js","sources":["../src/source-map-tree.ts","../src/build-source-map-tree.ts","../src/source-map.ts","../src/remapping.ts"],"sourcesContent":["import { GenMapping, maybeAddSegment, setIgnore, setSourceContent } from '@jridgewell/gen-mapping';\nimport { traceSegment, decodedMappings } from '@jridgewell/trace-mapping';\n\nimport type { TraceMap } from '@jridgewell/trace-mapping';\n\nexport type SourceMapSegmentObject = {\n column: number;\n line: number;\n name: string;\n source: string;\n content: string | null;\n ignore: boolean;\n};\n\nexport type OriginalSource = {\n map: null;\n sources: Sources[];\n source: string;\n content: string | null;\n ignore: boolean;\n};\n\nexport type MapSource = {\n map: TraceMap;\n sources: Sources[];\n source: string;\n content: null;\n ignore: false;\n};\n\nexport type Sources = OriginalSource | MapSource;\n\nconst SOURCELESS_MAPPING = /* #__PURE__ */ SegmentObject('', -1, -1, '', null, false);\nconst EMPTY_SOURCES: Sources[] = [];\n\nfunction SegmentObject(\n source: string,\n line: number,\n column: number,\n name: string,\n content: string | null,\n ignore: boolean\n): SourceMapSegmentObject {\n return { source, line, column, name, content, ignore };\n}\n\nfunction Source(\n map: TraceMap,\n sources: Sources[],\n source: '',\n content: null,\n ignore: false\n): MapSource;\nfunction Source(\n map: null,\n sources: Sources[],\n source: string,\n content: string | null,\n ignore: boolean\n): OriginalSource;\nfunction Source(\n map: TraceMap | null,\n sources: Sources[],\n source: string | '',\n content: string | null,\n ignore: boolean\n): Sources {\n return {\n map,\n sources,\n source,\n content,\n ignore,\n } as any;\n}\n\n/**\n * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes\n * (which may themselves be SourceMapTrees).\n */\nexport function MapSource(map: TraceMap, sources: Sources[]): MapSource {\n return Source(map, sources, '', null, false);\n}\n\n/**\n * A \"leaf\" node in the sourcemap tree, representing an original, unmodified source file. Recursive\n * segment tracing ends at the `OriginalSource`.\n */\nexport function OriginalSource(\n source: string,\n content: string | null,\n ignore: boolean\n): OriginalSource {\n return Source(null, EMPTY_SOURCES, source, content, ignore);\n}\n\n/**\n * traceMappings is only called on the root level SourceMapTree, and begins the process of\n * resolving each mapping in terms of the original source files.\n */\nexport function traceMappings(tree: MapSource): GenMapping {\n // TODO: Eventually support sourceRoot, which has to be removed because the sources are already\n // fully resolved. We'll need to make sources relative to the sourceRoot before adding them.\n const gen = new GenMapping({ file: tree.map.file });\n const { sources: rootSources, map } = tree;\n const rootNames = map.names;\n const rootMappings = decodedMappings(map);\n\n for (let i = 0; i < rootMappings.length; i++) {\n const segments = rootMappings[i];\n\n for (let j = 0; j < segments.length; j++) {\n const segment = segments[j];\n const genCol = segment[0];\n let traced: SourceMapSegmentObject | null = SOURCELESS_MAPPING;\n\n // 1-length segments only move the current generated column, there's no source information\n // to gather from it.\n if (segment.length !== 1) {\n const source = rootSources[segment[1]];\n traced = originalPositionFor(\n source,\n segment[2],\n segment[3],\n segment.length === 5 ? rootNames[segment[4]] : ''\n );\n\n // If the trace is invalid, then the trace ran into a sourcemap that doesn't contain a\n // respective segment into an original source.\n if (traced == null) continue;\n }\n\n const { column, line, name, content, source, ignore } = traced;\n\n maybeAddSegment(gen, i, genCol, source, line, column, name);\n if (source && content != null) setSourceContent(gen, source, content);\n if (ignore) setIgnore(gen, source, true);\n }\n }\n\n return gen;\n}\n\n/**\n * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own\n * child SourceMapTrees, until we find the original source map.\n */\nexport function originalPositionFor(\n source: Sources,\n line: number,\n column: number,\n name: string\n): SourceMapSegmentObject | null {\n if (!source.map) {\n return SegmentObject(source.source, line, column, name, source.content, source.ignore);\n }\n\n const segment = traceSegment(source.map, line, column);\n\n // If we couldn't find a segment, then this doesn't exist in the sourcemap.\n if (segment == null) return null;\n // 1-length segments only move the current generated column, there's no source information\n // to gather from it.\n if (segment.length === 1) return SOURCELESS_MAPPING;\n\n return originalPositionFor(\n source.sources[segment[1]],\n segment[2],\n segment[3],\n segment.length === 5 ? source.map.names[segment[4]] : name\n );\n}\n","import { TraceMap } from '@jridgewell/trace-mapping';\n\nimport { OriginalSource, MapSource } from './source-map-tree';\n\nimport type { Sources, MapSource as MapSourceType } from './source-map-tree';\nimport type { SourceMapInput, SourceMapLoader, LoaderContext } from './types';\n\nfunction asArray(value: T | T[]): T[] {\n if (Array.isArray(value)) return value;\n return [value];\n}\n\n/**\n * Recursively builds a tree structure out of sourcemap files, with each node\n * being either an `OriginalSource` \"leaf\" or a `SourceMapTree` composed of\n * `OriginalSource`s and `SourceMapTree`s.\n *\n * Every sourcemap is composed of a collection of source files and mappings\n * into locations of those source files. When we generate a `SourceMapTree` for\n * the sourcemap, we attempt to load each source file's own sourcemap. If it\n * does not have an associated sourcemap, it is considered an original,\n * unmodified source file.\n */\nexport default function buildSourceMapTree(\n input: SourceMapInput | SourceMapInput[],\n loader: SourceMapLoader\n): MapSourceType {\n const maps = asArray(input).map((m) => new TraceMap(m, ''));\n const map = maps.pop()!;\n\n for (let i = 0; i < maps.length; i++) {\n if (maps[i].sources.length > 1) {\n throw new Error(\n `Transformation map ${i} must have exactly one source file.\\n` +\n 'Did you specify these with the most recent transformation maps first?'\n );\n }\n }\n\n let tree = build(map, loader, '', 0);\n for (let i = maps.length - 1; i >= 0; i--) {\n tree = MapSource(maps[i], [tree]);\n }\n return tree;\n}\n\nfunction build(\n map: TraceMap,\n loader: SourceMapLoader,\n importer: string,\n importerDepth: number\n): MapSourceType {\n const { resolvedSources, sourcesContent, ignoreList } = map;\n\n const depth = importerDepth + 1;\n const children = resolvedSources.map((sourceFile: string | null, i: number): Sources => {\n // The loading context gives the loader more information about why this file is being loaded\n // (eg, from which importer). It also allows the loader to override the location of the loaded\n // sourcemap/original source, or to override the content in the sourcesContent field if it's\n // an unmodified source file.\n const ctx: LoaderContext = {\n importer,\n depth,\n source: sourceFile || '',\n content: undefined,\n ignore: undefined,\n };\n\n // Use the provided loader callback to retrieve the file's sourcemap.\n // TODO: We should eventually support async loading of sourcemap files.\n const sourceMap = loader(ctx.source, ctx);\n\n const { source, content, ignore } = ctx;\n\n // If there is a sourcemap, then we need to recurse into it to load its source files.\n if (sourceMap) return build(new TraceMap(sourceMap, source), loader, source, depth);\n\n // Else, it's an unmodified source file.\n // The contents of this unmodified source file can be overridden via the loader context,\n // allowing it to be explicitly null or a string. If it remains undefined, we fall back to\n // the importing sourcemap's `sourcesContent` field.\n const sourceContent =\n content !== undefined ? content : sourcesContent ? sourcesContent[i] : null;\n const ignored = ignore !== undefined ? ignore : ignoreList ? ignoreList.includes(i) : false;\n return OriginalSource(source, sourceContent, ignored);\n });\n\n return MapSource(map, children);\n}\n","import { toDecodedMap, toEncodedMap } from '@jridgewell/gen-mapping';\n\nimport type { GenMapping } from '@jridgewell/gen-mapping';\nimport type { DecodedSourceMap, EncodedSourceMap, Options } from './types';\n\n/**\n * A SourceMap v3 compatible sourcemap, which only includes fields that were\n * provided to it.\n */\nexport default class SourceMap {\n declare file?: string | null;\n declare mappings: EncodedSourceMap['mappings'] | DecodedSourceMap['mappings'];\n declare sourceRoot?: string;\n declare names: string[];\n declare sources: (string | null)[];\n declare sourcesContent?: (string | null)[];\n declare version: 3;\n declare ignoreList: number[] | undefined;\n\n constructor(map: GenMapping, options: Options) {\n const out = options.decodedMappings ? toDecodedMap(map) : toEncodedMap(map);\n this.version = out.version; // SourceMap spec says this should be first.\n this.file = out.file;\n this.mappings = out.mappings as SourceMap['mappings'];\n this.names = out.names as SourceMap['names'];\n this.ignoreList = out.ignoreList as SourceMap['ignoreList'];\n this.sourceRoot = out.sourceRoot;\n\n this.sources = out.sources as SourceMap['sources'];\n if (!options.excludeContent) {\n this.sourcesContent = out.sourcesContent as SourceMap['sourcesContent'];\n }\n }\n\n toString(): string {\n return JSON.stringify(this);\n }\n}\n","import buildSourceMapTree from './build-source-map-tree';\nimport { traceMappings } from './source-map-tree';\nimport SourceMap from './source-map';\n\nimport type { SourceMapInput, SourceMapLoader, Options } from './types';\nexport type {\n SourceMapSegment,\n EncodedSourceMap,\n EncodedSourceMap as RawSourceMap,\n DecodedSourceMap,\n SourceMapInput,\n SourceMapLoader,\n LoaderContext,\n Options,\n} from './types';\nexport type { SourceMap };\n\n/**\n * Traces through all the mappings in the root sourcemap, through the sources\n * (and their sourcemaps), all the way back to the original source location.\n *\n * `loader` will be called every time we encounter a source file. If it returns\n * a sourcemap, we will recurse into that sourcemap to continue the trace. If\n * it returns a falsey value, that source file is treated as an original,\n * unmodified source file.\n *\n * Pass `excludeContent` to exclude any self-containing source file content\n * from the output sourcemap.\n *\n * Pass `decodedMappings` to receive a SourceMap with decoded (instead of\n * VLQ encoded) mappings.\n */\nexport default function remapping(\n input: SourceMapInput | SourceMapInput[],\n loader: SourceMapLoader,\n options?: boolean | Options\n): SourceMap {\n const opts =\n typeof options === 'object' ? options : { excludeContent: !!options, decodedMappings: false };\n const tree = buildSourceMapTree(input, loader);\n return new SourceMap(traceMappings(tree), opts);\n}\n"],"names":["GenMapping","decodedMappings","maybeAddSegment","setSourceContent","setIgnore","traceSegment","TraceMap","toDecodedMap","toEncodedMap"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@ampproject/remapping/dist/types/build-source-map-tree.d.ts b/node_modules/@ampproject/remapping/dist/types/build-source-map-tree.d.ts new file mode 100644 index 00000000..f87fceab --- /dev/null +++ b/node_modules/@ampproject/remapping/dist/types/build-source-map-tree.d.ts @@ -0,0 +1,14 @@ +import type { MapSource as MapSourceType } from './source-map-tree'; +import type { SourceMapInput, SourceMapLoader } from './types'; +/** + * Recursively builds a tree structure out of sourcemap files, with each node + * being either an `OriginalSource` "leaf" or a `SourceMapTree` composed of + * `OriginalSource`s and `SourceMapTree`s. + * + * Every sourcemap is composed of a collection of source files and mappings + * into locations of those source files. When we generate a `SourceMapTree` for + * the sourcemap, we attempt to load each source file's own sourcemap. If it + * does not have an associated sourcemap, it is considered an original, + * unmodified source file. + */ +export default function buildSourceMapTree(input: SourceMapInput | SourceMapInput[], loader: SourceMapLoader): MapSourceType; diff --git a/node_modules/@ampproject/remapping/dist/types/remapping.d.ts b/node_modules/@ampproject/remapping/dist/types/remapping.d.ts new file mode 100644 index 00000000..771fe307 --- /dev/null +++ b/node_modules/@ampproject/remapping/dist/types/remapping.d.ts @@ -0,0 +1,20 @@ +import SourceMap from './source-map'; +import type { SourceMapInput, SourceMapLoader, Options } from './types'; +export type { SourceMapSegment, EncodedSourceMap, EncodedSourceMap as RawSourceMap, DecodedSourceMap, SourceMapInput, SourceMapLoader, LoaderContext, Options, } from './types'; +export type { SourceMap }; +/** + * Traces through all the mappings in the root sourcemap, through the sources + * (and their sourcemaps), all the way back to the original source location. + * + * `loader` will be called every time we encounter a source file. If it returns + * a sourcemap, we will recurse into that sourcemap to continue the trace. If + * it returns a falsey value, that source file is treated as an original, + * unmodified source file. + * + * Pass `excludeContent` to exclude any self-containing source file content + * from the output sourcemap. + * + * Pass `decodedMappings` to receive a SourceMap with decoded (instead of + * VLQ encoded) mappings. + */ +export default function remapping(input: SourceMapInput | SourceMapInput[], loader: SourceMapLoader, options?: boolean | Options): SourceMap; diff --git a/node_modules/@ampproject/remapping/dist/types/source-map-tree.d.ts b/node_modules/@ampproject/remapping/dist/types/source-map-tree.d.ts new file mode 100644 index 00000000..935bc698 --- /dev/null +++ b/node_modules/@ampproject/remapping/dist/types/source-map-tree.d.ts @@ -0,0 +1,45 @@ +import { GenMapping } from '@jridgewell/gen-mapping'; +import type { TraceMap } from '@jridgewell/trace-mapping'; +export declare type SourceMapSegmentObject = { + column: number; + line: number; + name: string; + source: string; + content: string | null; + ignore: boolean; +}; +export declare type OriginalSource = { + map: null; + sources: Sources[]; + source: string; + content: string | null; + ignore: boolean; +}; +export declare type MapSource = { + map: TraceMap; + sources: Sources[]; + source: string; + content: null; + ignore: false; +}; +export declare type Sources = OriginalSource | MapSource; +/** + * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes + * (which may themselves be SourceMapTrees). + */ +export declare function MapSource(map: TraceMap, sources: Sources[]): MapSource; +/** + * A "leaf" node in the sourcemap tree, representing an original, unmodified source file. Recursive + * segment tracing ends at the `OriginalSource`. + */ +export declare function OriginalSource(source: string, content: string | null, ignore: boolean): OriginalSource; +/** + * traceMappings is only called on the root level SourceMapTree, and begins the process of + * resolving each mapping in terms of the original source files. + */ +export declare function traceMappings(tree: MapSource): GenMapping; +/** + * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own + * child SourceMapTrees, until we find the original source map. + */ +export declare function originalPositionFor(source: Sources, line: number, column: number, name: string): SourceMapSegmentObject | null; diff --git a/node_modules/@ampproject/remapping/dist/types/source-map.d.ts b/node_modules/@ampproject/remapping/dist/types/source-map.d.ts new file mode 100644 index 00000000..cbd7f0af --- /dev/null +++ b/node_modules/@ampproject/remapping/dist/types/source-map.d.ts @@ -0,0 +1,18 @@ +import type { GenMapping } from '@jridgewell/gen-mapping'; +import type { DecodedSourceMap, EncodedSourceMap, Options } from './types'; +/** + * A SourceMap v3 compatible sourcemap, which only includes fields that were + * provided to it. + */ +export default class SourceMap { + file?: string | null; + mappings: EncodedSourceMap['mappings'] | DecodedSourceMap['mappings']; + sourceRoot?: string; + names: string[]; + sources: (string | null)[]; + sourcesContent?: (string | null)[]; + version: 3; + ignoreList: number[] | undefined; + constructor(map: GenMapping, options: Options); + toString(): string; +} diff --git a/node_modules/@ampproject/remapping/dist/types/types.d.ts b/node_modules/@ampproject/remapping/dist/types/types.d.ts new file mode 100644 index 00000000..4d78c4bc --- /dev/null +++ b/node_modules/@ampproject/remapping/dist/types/types.d.ts @@ -0,0 +1,15 @@ +import type { SourceMapInput } from '@jridgewell/trace-mapping'; +export type { SourceMapSegment, DecodedSourceMap, EncodedSourceMap, } from '@jridgewell/trace-mapping'; +export type { SourceMapInput }; +export declare type LoaderContext = { + readonly importer: string; + readonly depth: number; + source: string; + content: string | null | undefined; + ignore: boolean | undefined; +}; +export declare type SourceMapLoader = (file: string, ctx: LoaderContext) => SourceMapInput | null | undefined | void; +export declare type Options = { + excludeContent?: boolean; + decodedMappings?: boolean; +}; diff --git a/node_modules/@ampproject/remapping/package.json b/node_modules/@ampproject/remapping/package.json new file mode 100644 index 00000000..091224c6 --- /dev/null +++ b/node_modules/@ampproject/remapping/package.json @@ -0,0 +1,75 @@ +{ + "name": "@ampproject/remapping", + "version": "2.3.0", + "description": "Remap sequential sourcemaps through transformations to point at the original source code", + "keywords": [ + "source", + "map", + "remap" + ], + "main": "dist/remapping.umd.js", + "module": "dist/remapping.mjs", + "types": "dist/types/remapping.d.ts", + "exports": { + ".": [ + { + "types": "./dist/types/remapping.d.ts", + "browser": "./dist/remapping.umd.js", + "require": "./dist/remapping.umd.js", + "import": "./dist/remapping.mjs" + }, + "./dist/remapping.umd.js" + ], + "./package.json": "./package.json" + }, + "files": [ + "dist" + ], + "author": "Justin Ridgewell ", + "repository": { + "type": "git", + "url": "git+https://github.com/ampproject/remapping.git" + }, + "license": "Apache-2.0", + "engines": { + "node": ">=6.0.0" + }, + "scripts": { + "build": "run-s -n build:*", + "build:rollup": "rollup -c rollup.config.js", + "build:ts": "tsc --project tsconfig.build.json", + "lint": "run-s -n lint:*", + "lint:prettier": "npm run test:lint:prettier -- --write", + "lint:ts": "npm run test:lint:ts -- --fix", + "prebuild": "rm -rf dist", + "prepublishOnly": "npm run preversion", + "preversion": "run-s test build", + "test": "run-s -n test:lint test:only", + "test:debug": "node --inspect-brk node_modules/.bin/jest --runInBand", + "test:lint": "run-s -n test:lint:*", + "test:lint:prettier": "prettier --check '{src,test}/**/*.ts'", + "test:lint:ts": "eslint '{src,test}/**/*.ts'", + "test:only": "jest --coverage", + "test:watch": "jest --coverage --watch" + }, + "devDependencies": { + "@rollup/plugin-typescript": "8.3.2", + "@types/jest": "27.4.1", + "@typescript-eslint/eslint-plugin": "5.20.0", + "@typescript-eslint/parser": "5.20.0", + "eslint": "8.14.0", + "eslint-config-prettier": "8.5.0", + "jest": "27.5.1", + "jest-config": "27.5.1", + "npm-run-all": "4.1.5", + "prettier": "2.6.2", + "rollup": "2.70.2", + "ts-jest": "27.1.4", + "tslib": "2.4.0", + "typescript": "4.6.3" + }, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } +} diff --git a/node_modules/@babel/code-frame/LICENSE b/node_modules/@babel/code-frame/LICENSE new file mode 100644 index 00000000..f31575ec --- /dev/null +++ b/node_modules/@babel/code-frame/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2014-present Sebastian McKenzie 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/@babel/code-frame/README.md b/node_modules/@babel/code-frame/README.md new file mode 100644 index 00000000..71607551 --- /dev/null +++ b/node_modules/@babel/code-frame/README.md @@ -0,0 +1,19 @@ +# @babel/code-frame + +> Generate errors that contain a code frame that point to source locations. + +See our website [@babel/code-frame](https://babeljs.io/docs/babel-code-frame) for more information. + +## Install + +Using npm: + +```sh +npm install --save-dev @babel/code-frame +``` + +or using yarn: + +```sh +yarn add @babel/code-frame --dev +``` diff --git a/node_modules/@babel/code-frame/lib/index.js b/node_modules/@babel/code-frame/lib/index.js new file mode 100644 index 00000000..b409f301 --- /dev/null +++ b/node_modules/@babel/code-frame/lib/index.js @@ -0,0 +1,216 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var picocolors = require('picocolors'); +var jsTokens = require('js-tokens'); +var helperValidatorIdentifier = require('@babel/helper-validator-identifier'); + +function isColorSupported() { + return (typeof process === "object" && (process.env.FORCE_COLOR === "0" || process.env.FORCE_COLOR === "false") ? false : picocolors.isColorSupported + ); +} +const compose = (f, g) => v => f(g(v)); +function buildDefs(colors) { + return { + keyword: colors.cyan, + capitalized: colors.yellow, + jsxIdentifier: colors.yellow, + punctuator: colors.yellow, + number: colors.magenta, + string: colors.green, + regex: colors.magenta, + comment: colors.gray, + invalid: compose(compose(colors.white, colors.bgRed), colors.bold), + gutter: colors.gray, + marker: compose(colors.red, colors.bold), + message: compose(colors.red, colors.bold), + reset: colors.reset + }; +} +const defsOn = buildDefs(picocolors.createColors(true)); +const defsOff = buildDefs(picocolors.createColors(false)); +function getDefs(enabled) { + return enabled ? defsOn : defsOff; +} + +const sometimesKeywords = new Set(["as", "async", "from", "get", "of", "set"]); +const NEWLINE$1 = /\r\n|[\n\r\u2028\u2029]/; +const BRACKET = /^[()[\]{}]$/; +let tokenize; +{ + const JSX_TAG = /^[a-z][\w-]*$/i; + const getTokenType = function (token, offset, text) { + if (token.type === "name") { + if (helperValidatorIdentifier.isKeyword(token.value) || helperValidatorIdentifier.isStrictReservedWord(token.value, true) || sometimesKeywords.has(token.value)) { + return "keyword"; + } + if (JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.slice(offset - 2, offset) === " defs[type](str)).join("\n"); + } else { + highlighted += value; + } + } + return highlighted; +} + +let deprecationWarningShown = false; +const NEWLINE = /\r\n|[\n\r\u2028\u2029]/; +function getMarkerLines(loc, source, opts) { + const startLoc = Object.assign({ + column: 0, + line: -1 + }, loc.start); + const endLoc = Object.assign({}, startLoc, loc.end); + const { + linesAbove = 2, + linesBelow = 3 + } = opts || {}; + const startLine = startLoc.line; + const startColumn = startLoc.column; + const endLine = endLoc.line; + const endColumn = endLoc.column; + let start = Math.max(startLine - (linesAbove + 1), 0); + let end = Math.min(source.length, endLine + linesBelow); + if (startLine === -1) { + start = 0; + } + if (endLine === -1) { + end = source.length; + } + const lineDiff = endLine - startLine; + const markerLines = {}; + if (lineDiff) { + for (let i = 0; i <= lineDiff; i++) { + const lineNumber = i + startLine; + if (!startColumn) { + markerLines[lineNumber] = true; + } else if (i === 0) { + const sourceLength = source[lineNumber - 1].length; + markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1]; + } else if (i === lineDiff) { + markerLines[lineNumber] = [0, endColumn]; + } else { + const sourceLength = source[lineNumber - i].length; + markerLines[lineNumber] = [0, sourceLength]; + } + } + } else { + if (startColumn === endColumn) { + if (startColumn) { + markerLines[startLine] = [startColumn, 0]; + } else { + markerLines[startLine] = true; + } + } else { + markerLines[startLine] = [startColumn, endColumn - startColumn]; + } + } + return { + start, + end, + markerLines + }; +} +function codeFrameColumns(rawLines, loc, opts = {}) { + const shouldHighlight = opts.forceColor || isColorSupported() && opts.highlightCode; + const defs = getDefs(shouldHighlight); + const lines = rawLines.split(NEWLINE); + const { + start, + end, + markerLines + } = getMarkerLines(loc, lines, opts); + const hasColumns = loc.start && typeof loc.start.column === "number"; + const numberMaxWidth = String(end).length; + const highlightedLines = shouldHighlight ? highlight(rawLines) : rawLines; + let frame = highlightedLines.split(NEWLINE, end).slice(start, end).map((line, index) => { + const number = start + 1 + index; + const paddedNumber = ` ${number}`.slice(-numberMaxWidth); + const gutter = ` ${paddedNumber} |`; + const hasMarker = markerLines[number]; + const lastMarkerLine = !markerLines[number + 1]; + if (hasMarker) { + let markerLine = ""; + if (Array.isArray(hasMarker)) { + const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\t]/g, " "); + const numberOfMarkers = hasMarker[1] || 1; + markerLine = ["\n ", defs.gutter(gutter.replace(/\d/g, " ")), " ", markerSpacing, defs.marker("^").repeat(numberOfMarkers)].join(""); + if (lastMarkerLine && opts.message) { + markerLine += " " + defs.message(opts.message); + } + } + return [defs.marker(">"), defs.gutter(gutter), line.length > 0 ? ` ${line}` : "", markerLine].join(""); + } else { + return ` ${defs.gutter(gutter)}${line.length > 0 ? ` ${line}` : ""}`; + } + }).join("\n"); + if (opts.message && !hasColumns) { + frame = `${" ".repeat(numberMaxWidth + 1)}${opts.message}\n${frame}`; + } + if (shouldHighlight) { + return defs.reset(frame); + } else { + return frame; + } +} +function index (rawLines, lineNumber, colNumber, opts = {}) { + if (!deprecationWarningShown) { + deprecationWarningShown = true; + const message = "Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`."; + if (process.emitWarning) { + process.emitWarning(message, "DeprecationWarning"); + } else { + const deprecationError = new Error(message); + deprecationError.name = "DeprecationWarning"; + console.warn(new Error(message)); + } + } + colNumber = Math.max(colNumber, 0); + const location = { + start: { + column: colNumber, + line: lineNumber + } + }; + return codeFrameColumns(rawLines, location, opts); +} + +exports.codeFrameColumns = codeFrameColumns; +exports.default = index; +exports.highlight = highlight; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@babel/code-frame/lib/index.js.map b/node_modules/@babel/code-frame/lib/index.js.map new file mode 100644 index 00000000..46a181dc --- /dev/null +++ b/node_modules/@babel/code-frame/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../src/defs.ts","../src/highlight.ts","../src/index.ts"],"sourcesContent":["import picocolors, { createColors } from \"picocolors\";\nimport type { Colors, Formatter } from \"picocolors/types\";\n\nexport function isColorSupported() {\n return (\n // See https://github.com/alexeyraspopov/picocolors/issues/62\n typeof process === \"object\" &&\n (process.env.FORCE_COLOR === \"0\" || process.env.FORCE_COLOR === \"false\")\n ? false\n : picocolors.isColorSupported\n );\n}\n\nexport type InternalTokenType =\n | \"keyword\"\n | \"capitalized\"\n | \"jsxIdentifier\"\n | \"punctuator\"\n | \"number\"\n | \"string\"\n | \"regex\"\n | \"comment\"\n | \"invalid\";\n\ntype UITokens = \"gutter\" | \"marker\" | \"message\";\n\nexport type Defs = {\n [_ in InternalTokenType | UITokens | \"reset\"]: Formatter;\n};\n\nconst compose: (f: (gv: U) => V, g: (v: T) => U) => (v: T) => V =\n (f, g) => v =>\n f(g(v));\n\n/**\n * Styles for token types.\n */\nfunction buildDefs(colors: Colors): Defs {\n return {\n keyword: colors.cyan,\n capitalized: colors.yellow,\n jsxIdentifier: colors.yellow,\n punctuator: colors.yellow,\n number: colors.magenta,\n string: colors.green,\n regex: colors.magenta,\n comment: colors.gray,\n invalid: compose(compose(colors.white, colors.bgRed), colors.bold),\n\n gutter: colors.gray,\n marker: compose(colors.red, colors.bold),\n message: compose(colors.red, colors.bold),\n\n reset: colors.reset,\n };\n}\n\nconst defsOn = buildDefs(createColors(true));\nconst defsOff = buildDefs(createColors(false));\n\nexport function getDefs(enabled: boolean): Defs {\n return enabled ? defsOn : defsOff;\n}\n","import type { Token as JSToken, JSXToken } from \"js-tokens\";\nimport jsTokens from \"js-tokens\";\n\nimport {\n isStrictReservedWord,\n isKeyword,\n} from \"@babel/helper-validator-identifier\";\n\nimport { getDefs, type InternalTokenType } from \"./defs.ts\";\n\n/**\n * Names that are always allowed as identifiers, but also appear as keywords\n * within certain syntactic productions.\n *\n * https://tc39.es/ecma262/#sec-keywords-and-reserved-words\n *\n * `target` has been omitted since it is very likely going to be a false\n * positive.\n */\nconst sometimesKeywords = new Set([\"as\", \"async\", \"from\", \"get\", \"of\", \"set\"]);\n\ntype Token = {\n type: InternalTokenType | \"uncolored\";\n value: string;\n};\n\n/**\n * RegExp to test for newlines in terminal.\n */\nconst NEWLINE = /\\r\\n|[\\n\\r\\u2028\\u2029]/;\n\n/**\n * RegExp to test for the three types of brackets.\n */\nconst BRACKET = /^[()[\\]{}]$/;\n\nlet tokenize: (\n text: string,\n) => Generator<{ type: InternalTokenType | \"uncolored\"; value: string }>;\n\nif (process.env.BABEL_8_BREAKING) {\n /**\n * Get the type of token, specifying punctuator type.\n */\n const getTokenType = function (\n token: JSToken | JSXToken,\n ): InternalTokenType | \"uncolored\" {\n if (token.type === \"IdentifierName\") {\n if (\n isKeyword(token.value) ||\n isStrictReservedWord(token.value, true) ||\n sometimesKeywords.has(token.value)\n ) {\n return \"keyword\";\n }\n\n if (token.value[0] !== token.value[0].toLowerCase()) {\n return \"capitalized\";\n }\n }\n\n if (token.type === \"Punctuator\" && BRACKET.test(token.value)) {\n return \"uncolored\";\n }\n\n if (token.type === \"Invalid\" && token.value === \"@\") {\n return \"punctuator\";\n }\n\n switch (token.type) {\n case \"NumericLiteral\":\n return \"number\";\n\n case \"StringLiteral\":\n case \"JSXString\":\n case \"NoSubstitutionTemplate\":\n return \"string\";\n\n case \"RegularExpressionLiteral\":\n return \"regex\";\n\n case \"Punctuator\":\n case \"JSXPunctuator\":\n return \"punctuator\";\n\n case \"MultiLineComment\":\n case \"SingleLineComment\":\n return \"comment\";\n\n case \"Invalid\":\n case \"JSXInvalid\":\n return \"invalid\";\n\n case \"JSXIdentifier\":\n return \"jsxIdentifier\";\n\n default:\n return \"uncolored\";\n }\n };\n\n /**\n * Turn a string of JS into an array of objects.\n */\n tokenize = function* (text: string): Generator {\n for (const token of jsTokens(text, { jsx: true })) {\n switch (token.type) {\n case \"TemplateHead\":\n yield { type: \"string\", value: token.value.slice(0, -2) };\n yield { type: \"punctuator\", value: \"${\" };\n break;\n\n case \"TemplateMiddle\":\n yield { type: \"punctuator\", value: \"}\" };\n yield { type: \"string\", value: token.value.slice(1, -2) };\n yield { type: \"punctuator\", value: \"${\" };\n break;\n\n case \"TemplateTail\":\n yield { type: \"punctuator\", value: \"}\" };\n yield { type: \"string\", value: token.value.slice(1) };\n break;\n\n default:\n yield {\n type: getTokenType(token),\n value: token.value,\n };\n }\n }\n };\n} else {\n /**\n * RegExp to test for what seems to be a JSX tag name.\n */\n const JSX_TAG = /^[a-z][\\w-]*$/i;\n\n // The token here is defined in js-tokens@4. However we don't bother\n // typing it since the whole block will be removed in Babel 8\n const getTokenType = function (token: any, offset: number, text: string) {\n if (token.type === \"name\") {\n if (\n isKeyword(token.value) ||\n isStrictReservedWord(token.value, true) ||\n sometimesKeywords.has(token.value)\n ) {\n return \"keyword\";\n }\n\n if (\n JSX_TAG.test(token.value) &&\n (text[offset - 1] === \"<\" || text.slice(offset - 2, offset) === \" defs[type as InternalTokenType](str))\n .join(\"\\n\");\n } else {\n highlighted += value;\n }\n }\n\n return highlighted;\n}\n","import { getDefs, isColorSupported } from \"./defs.ts\";\nimport { highlight } from \"./highlight.ts\";\n\nexport { highlight };\n\nlet deprecationWarningShown = false;\n\ntype Location = {\n column: number;\n line: number;\n};\n\ntype NodeLocation = {\n end?: Location;\n start: Location;\n};\n\nexport interface Options {\n /** Syntax highlight the code as JavaScript for terminals. default: false */\n highlightCode?: boolean;\n /** The number of lines to show above the error. default: 2 */\n linesAbove?: number;\n /** The number of lines to show below the error. default: 3 */\n linesBelow?: number;\n /**\n * Forcibly syntax highlight the code as JavaScript (for non-terminals);\n * overrides highlightCode.\n * default: false\n */\n forceColor?: boolean;\n /**\n * Pass in a string to be displayed inline (if possible) next to the\n * highlighted location in the code. If it can't be positioned inline,\n * it will be placed above the code frame.\n * default: nothing\n */\n message?: string;\n}\n\n/**\n * RegExp to test for newlines in terminal.\n */\n\nconst NEWLINE = /\\r\\n|[\\n\\r\\u2028\\u2029]/;\n\n/**\n * Extract what lines should be marked and highlighted.\n */\n\ntype MarkerLines = Record;\n\nfunction getMarkerLines(\n loc: NodeLocation,\n source: Array,\n opts: Options,\n): {\n start: number;\n end: number;\n markerLines: MarkerLines;\n} {\n const startLoc: Location = {\n column: 0,\n line: -1,\n ...loc.start,\n };\n const endLoc: Location = {\n ...startLoc,\n ...loc.end,\n };\n const { linesAbove = 2, linesBelow = 3 } = opts || {};\n const startLine = startLoc.line;\n const startColumn = startLoc.column;\n const endLine = endLoc.line;\n const endColumn = endLoc.column;\n\n let start = Math.max(startLine - (linesAbove + 1), 0);\n let end = Math.min(source.length, endLine + linesBelow);\n\n if (startLine === -1) {\n start = 0;\n }\n\n if (endLine === -1) {\n end = source.length;\n }\n\n const lineDiff = endLine - startLine;\n const markerLines: MarkerLines = {};\n\n if (lineDiff) {\n for (let i = 0; i <= lineDiff; i++) {\n const lineNumber = i + startLine;\n\n if (!startColumn) {\n markerLines[lineNumber] = true;\n } else if (i === 0) {\n const sourceLength = source[lineNumber - 1].length;\n\n markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1];\n } else if (i === lineDiff) {\n markerLines[lineNumber] = [0, endColumn];\n } else {\n const sourceLength = source[lineNumber - i].length;\n\n markerLines[lineNumber] = [0, sourceLength];\n }\n }\n } else {\n if (startColumn === endColumn) {\n if (startColumn) {\n markerLines[startLine] = [startColumn, 0];\n } else {\n markerLines[startLine] = true;\n }\n } else {\n markerLines[startLine] = [startColumn, endColumn - startColumn];\n }\n }\n\n return { start, end, markerLines };\n}\n\nexport function codeFrameColumns(\n rawLines: string,\n loc: NodeLocation,\n opts: Options = {},\n): string {\n const shouldHighlight =\n opts.forceColor || (isColorSupported() && opts.highlightCode);\n const defs = getDefs(shouldHighlight);\n\n const lines = rawLines.split(NEWLINE);\n const { start, end, markerLines } = getMarkerLines(loc, lines, opts);\n const hasColumns = loc.start && typeof loc.start.column === \"number\";\n\n const numberMaxWidth = String(end).length;\n\n const highlightedLines = shouldHighlight ? highlight(rawLines) : rawLines;\n\n let frame = highlightedLines\n .split(NEWLINE, end)\n .slice(start, end)\n .map((line, index) => {\n const number = start + 1 + index;\n const paddedNumber = ` ${number}`.slice(-numberMaxWidth);\n const gutter = ` ${paddedNumber} |`;\n const hasMarker = markerLines[number];\n const lastMarkerLine = !markerLines[number + 1];\n if (hasMarker) {\n let markerLine = \"\";\n if (Array.isArray(hasMarker)) {\n const markerSpacing = line\n .slice(0, Math.max(hasMarker[0] - 1, 0))\n .replace(/[^\\t]/g, \" \");\n const numberOfMarkers = hasMarker[1] || 1;\n\n markerLine = [\n \"\\n \",\n defs.gutter(gutter.replace(/\\d/g, \" \")),\n \" \",\n markerSpacing,\n defs.marker(\"^\").repeat(numberOfMarkers),\n ].join(\"\");\n\n if (lastMarkerLine && opts.message) {\n markerLine += \" \" + defs.message(opts.message);\n }\n }\n return [\n defs.marker(\">\"),\n defs.gutter(gutter),\n line.length > 0 ? ` ${line}` : \"\",\n markerLine,\n ].join(\"\");\n } else {\n return ` ${defs.gutter(gutter)}${line.length > 0 ? ` ${line}` : \"\"}`;\n }\n })\n .join(\"\\n\");\n\n if (opts.message && !hasColumns) {\n frame = `${\" \".repeat(numberMaxWidth + 1)}${opts.message}\\n${frame}`;\n }\n\n if (shouldHighlight) {\n return defs.reset(frame);\n } else {\n return frame;\n }\n}\n\n/**\n * Create a code frame, adding line numbers, code highlighting, and pointing to a given position.\n */\n\nexport default function (\n rawLines: string,\n lineNumber: number,\n colNumber?: number | null,\n opts: Options = {},\n): string {\n if (!deprecationWarningShown) {\n deprecationWarningShown = true;\n\n const message =\n \"Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`.\";\n\n if (process.emitWarning) {\n // A string is directly supplied to emitWarning, because when supplying an\n // Error object node throws in the tests because of different contexts\n process.emitWarning(message, \"DeprecationWarning\");\n } else {\n const deprecationError = new Error(message);\n deprecationError.name = \"DeprecationWarning\";\n console.warn(new Error(message));\n }\n }\n\n colNumber = Math.max(colNumber, 0);\n\n const location: NodeLocation = {\n start: { column: colNumber, line: lineNumber },\n };\n\n return codeFrameColumns(rawLines, location, opts);\n}\n"],"names":["isColorSupported","process","env","FORCE_COLOR","picocolors","compose","f","g","v","buildDefs","colors","keyword","cyan","capitalized","yellow","jsxIdentifier","punctuator","number","magenta","string","green","regex","comment","gray","invalid","white","bgRed","bold","gutter","marker","red","message","reset","defsOn","createColors","defsOff","getDefs","enabled","sometimesKeywords","Set","NEWLINE","BRACKET","tokenize","JSX_TAG","getTokenType","token","offset","text","type","isKeyword","value","isStrictReservedWord","has","test","slice","toLowerCase","match","jsTokens","default","exec","matchToToken","index","highlight","defs","highlighted","split","map","str","join","deprecationWarningShown","getMarkerLines","loc","source","opts","startLoc","Object","assign","column","line","start","endLoc","end","linesAbove","linesBelow","startLine","startColumn","endLine","endColumn","Math","max","min","length","lineDiff","markerLines","i","lineNumber","sourceLength","codeFrameColumns","rawLines","shouldHighlight","forceColor","highlightCode","lines","hasColumns","numberMaxWidth","String","highlightedLines","frame","paddedNumber","hasMarker","lastMarkerLine","markerLine","Array","isArray","markerSpacing","replace","numberOfMarkers","repeat","colNumber","emitWarning","deprecationError","Error","name","console","warn","location"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@babel/code-frame/package.json b/node_modules/@babel/code-frame/package.json new file mode 100644 index 00000000..c95c2449 --- /dev/null +++ b/node_modules/@babel/code-frame/package.json @@ -0,0 +1,31 @@ +{ + "name": "@babel/code-frame", + "version": "7.27.1", + "description": "Generate errors that contain a code frame that point to source locations.", + "author": "The Babel Team (https://babel.dev/team)", + "homepage": "https://babel.dev/docs/en/next/babel-code-frame", + "bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/babel/babel.git", + "directory": "packages/babel-code-frame" + }, + "main": "./lib/index.js", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "devDependencies": { + "import-meta-resolve": "^4.1.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "type": "commonjs" +} \ No newline at end of file diff --git a/node_modules/@babel/compat-data/LICENSE b/node_modules/@babel/compat-data/LICENSE new file mode 100644 index 00000000..f31575ec --- /dev/null +++ b/node_modules/@babel/compat-data/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2014-present Sebastian McKenzie 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/@babel/compat-data/README.md b/node_modules/@babel/compat-data/README.md new file mode 100644 index 00000000..c1918987 --- /dev/null +++ b/node_modules/@babel/compat-data/README.md @@ -0,0 +1,19 @@ +# @babel/compat-data + +> The compat-data to determine required Babel plugins + +See our website [@babel/compat-data](https://babeljs.io/docs/babel-compat-data) for more information. + +## Install + +Using npm: + +```sh +npm install --save @babel/compat-data +``` + +or using yarn: + +```sh +yarn add @babel/compat-data +``` diff --git a/node_modules/@babel/compat-data/corejs2-built-ins.js b/node_modules/@babel/compat-data/corejs2-built-ins.js new file mode 100644 index 00000000..ed19e0b8 --- /dev/null +++ b/node_modules/@babel/compat-data/corejs2-built-ins.js @@ -0,0 +1,2 @@ +// Todo (Babel 8): remove this file as Babel 8 drop support of core-js 2 +module.exports = require("./data/corejs2-built-ins.json"); diff --git a/node_modules/@babel/compat-data/corejs3-shipped-proposals.js b/node_modules/@babel/compat-data/corejs3-shipped-proposals.js new file mode 100644 index 00000000..7909b8c4 --- /dev/null +++ b/node_modules/@babel/compat-data/corejs3-shipped-proposals.js @@ -0,0 +1,2 @@ +// Todo (Babel 8): remove this file now that it is included in babel-plugin-polyfill-corejs3 +module.exports = require("./data/corejs3-shipped-proposals.json"); diff --git a/node_modules/@babel/compat-data/data/corejs2-built-ins.json b/node_modules/@babel/compat-data/data/corejs2-built-ins.json new file mode 100644 index 00000000..ba76060c --- /dev/null +++ b/node_modules/@babel/compat-data/data/corejs2-built-ins.json @@ -0,0 +1,2106 @@ +{ + "es6.array.copy-within": { + "chrome": "45", + "opera": "32", + "edge": "12", + "firefox": "32", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "5", + "rhino": "1.7.13", + "opera_mobile": "32", + "electron": "0.31" + }, + "es6.array.every": { + "chrome": "5", + "opera": "10.10", + "edge": "12", + "firefox": "2", + "safari": "3.1", + "node": "0.4", + "deno": "1", + "ie": "9", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "10.1", + "electron": "0.20" + }, + "es6.array.fill": { + "chrome": "45", + "opera": "32", + "edge": "12", + "firefox": "31", + "safari": "7.1", + "node": "4", + "deno": "1", + "ios": "8", + "samsung": "5", + "rhino": "1.7.13", + "opera_mobile": "32", + "electron": "0.31" + }, + "es6.array.filter": { + "chrome": "51", + "opera": "38", + "edge": "13", + "firefox": "48", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "es6.array.find": { + "chrome": "45", + "opera": "32", + "edge": "12", + "firefox": "25", + "safari": "7.1", + "node": "4", + "deno": "1", + "ios": "8", + "samsung": "5", + "rhino": "1.7.13", + "opera_mobile": "32", + "electron": "0.31" + }, + "es6.array.find-index": { + "chrome": "45", + "opera": "32", + "edge": "12", + "firefox": "25", + "safari": "7.1", + "node": "4", + "deno": "1", + "ios": "8", + "samsung": "5", + "rhino": "1.7.13", + "opera_mobile": "32", + "electron": "0.31" + }, + "es7.array.flat-map": { + "chrome": "69", + "opera": "56", + "edge": "79", + "firefox": "62", + "safari": "12", + "node": "11", + "deno": "1", + "ios": "12", + "samsung": "10", + "rhino": "1.7.15", + "opera_mobile": "48", + "electron": "4.0" + }, + "es6.array.for-each": { + "chrome": "5", + "opera": "10.10", + "edge": "12", + "firefox": "2", + "safari": "3.1", + "node": "0.4", + "deno": "1", + "ie": "9", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "10.1", + "electron": "0.20" + }, + "es6.array.from": { + "chrome": "51", + "opera": "38", + "edge": "15", + "firefox": "36", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.7.15", + "opera_mobile": "41", + "electron": "1.2" + }, + "es7.array.includes": { + "chrome": "47", + "opera": "34", + "edge": "14", + "firefox": "102", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.8", + "opera_mobile": "34", + "electron": "0.36" + }, + "es6.array.index-of": { + "chrome": "5", + "opera": "10.10", + "edge": "12", + "firefox": "2", + "safari": "3.1", + "node": "0.4", + "deno": "1", + "ie": "9", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "10.1", + "electron": "0.20" + }, + "es6.array.is-array": { + "chrome": "5", + "opera": "10.50", + "edge": "12", + "firefox": "4", + "safari": "4", + "node": "0.4", + "deno": "1", + "ie": "9", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "10.1", + "electron": "0.20" + }, + "es6.array.iterator": { + "chrome": "66", + "opera": "53", + "edge": "12", + "firefox": "60", + "safari": "9", + "node": "10", + "deno": "1", + "ios": "9", + "samsung": "9", + "rhino": "1.7.13", + "opera_mobile": "47", + "electron": "3.0" + }, + "es6.array.last-index-of": { + "chrome": "5", + "opera": "10.10", + "edge": "12", + "firefox": "2", + "safari": "3.1", + "node": "0.4", + "deno": "1", + "ie": "9", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "10.1", + "electron": "0.20" + }, + "es6.array.map": { + "chrome": "51", + "opera": "38", + "edge": "13", + "firefox": "48", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "es6.array.of": { + "chrome": "45", + "opera": "32", + "edge": "12", + "firefox": "25", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "5", + "rhino": "1.7.13", + "opera_mobile": "32", + "electron": "0.31" + }, + "es6.array.reduce": { + "chrome": "5", + "opera": "10.50", + "edge": "12", + "firefox": "3", + "safari": "4", + "node": "0.4", + "deno": "1", + "ie": "9", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "10.1", + "electron": "0.20" + }, + "es6.array.reduce-right": { + "chrome": "5", + "opera": "10.50", + "edge": "12", + "firefox": "3", + "safari": "4", + "node": "0.4", + "deno": "1", + "ie": "9", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "10.1", + "electron": "0.20" + }, + "es6.array.slice": { + "chrome": "51", + "opera": "38", + "edge": "13", + "firefox": "48", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "es6.array.some": { + "chrome": "5", + "opera": "10.10", + "edge": "12", + "firefox": "2", + "safari": "3.1", + "node": "0.4", + "deno": "1", + "ie": "9", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "10.1", + "electron": "0.20" + }, + "es6.array.sort": { + "chrome": "63", + "opera": "50", + "edge": "12", + "firefox": "5", + "safari": "12", + "node": "10", + "deno": "1", + "ie": "9", + "ios": "12", + "samsung": "8", + "rhino": "1.7.13", + "opera_mobile": "46", + "electron": "3.0" + }, + "es6.array.species": { + "chrome": "51", + "opera": "38", + "edge": "13", + "firefox": "48", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.7.15", + "opera_mobile": "41", + "electron": "1.2" + }, + "es6.date.now": { + "chrome": "5", + "opera": "10.50", + "edge": "12", + "firefox": "2", + "safari": "4", + "node": "0.4", + "deno": "1", + "ie": "9", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "10.1", + "electron": "0.20" + }, + "es6.date.to-iso-string": { + "chrome": "5", + "opera": "10.50", + "edge": "12", + "firefox": "3.5", + "safari": "4", + "node": "0.4", + "deno": "1", + "ie": "9", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "10.1", + "electron": "0.20" + }, + "es6.date.to-json": { + "chrome": "5", + "opera": "12.10", + "edge": "12", + "firefox": "4", + "safari": "10", + "node": "0.4", + "deno": "1", + "ie": "9", + "android": "4", + "ios": "10", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "12.1", + "electron": "0.20" + }, + "es6.date.to-primitive": { + "chrome": "47", + "opera": "34", + "edge": "15", + "firefox": "44", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.8", + "opera_mobile": "34", + "electron": "0.36" + }, + "es6.date.to-string": { + "chrome": "5", + "opera": "10.50", + "edge": "12", + "firefox": "2", + "safari": "3.1", + "node": "0.4", + "deno": "1", + "ie": "10", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "10.1", + "electron": "0.20" + }, + "es6.function.bind": { + "chrome": "7", + "opera": "12", + "edge": "12", + "firefox": "4", + "safari": "5.1", + "node": "0.4", + "deno": "1", + "ie": "9", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "12", + "electron": "0.20" + }, + "es6.function.has-instance": { + "chrome": "51", + "opera": "38", + "edge": "15", + "firefox": "50", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "es6.function.name": { + "chrome": "5", + "opera": "10.50", + "edge": "14", + "firefox": "2", + "safari": "4", + "node": "0.4", + "deno": "1", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "10.1", + "electron": "0.20" + }, + "es6.map": { + "chrome": "51", + "opera": "38", + "edge": "15", + "firefox": "53", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "es6.math.acosh": { + "chrome": "38", + "opera": "25", + "edge": "12", + "firefox": "25", + "safari": "7.1", + "node": "0.12", + "deno": "1", + "ios": "8", + "samsung": "3", + "rhino": "1.7.13", + "opera_mobile": "25", + "electron": "0.20" + }, + "es6.math.asinh": { + "chrome": "38", + "opera": "25", + "edge": "12", + "firefox": "25", + "safari": "7.1", + "node": "0.12", + "deno": "1", + "ios": "8", + "samsung": "3", + "rhino": "1.7.13", + "opera_mobile": "25", + "electron": "0.20" + }, + "es6.math.atanh": { + "chrome": "38", + "opera": "25", + "edge": "12", + "firefox": "25", + "safari": "7.1", + "node": "0.12", + "deno": "1", + "ios": "8", + "samsung": "3", + "rhino": "1.7.13", + "opera_mobile": "25", + "electron": "0.20" + }, + "es6.math.cbrt": { + "chrome": "38", + "opera": "25", + "edge": "12", + "firefox": "25", + "safari": "7.1", + "node": "0.12", + "deno": "1", + "ios": "8", + "samsung": "3", + "rhino": "1.7.13", + "opera_mobile": "25", + "electron": "0.20" + }, + "es6.math.clz32": { + "chrome": "38", + "opera": "25", + "edge": "12", + "firefox": "31", + "safari": "9", + "node": "0.12", + "deno": "1", + "ios": "9", + "samsung": "3", + "rhino": "1.7.13", + "opera_mobile": "25", + "electron": "0.20" + }, + "es6.math.cosh": { + "chrome": "38", + "opera": "25", + "edge": "12", + "firefox": "25", + "safari": "7.1", + "node": "0.12", + "deno": "1", + "ios": "8", + "samsung": "3", + "rhino": "1.7.13", + "opera_mobile": "25", + "electron": "0.20" + }, + "es6.math.expm1": { + "chrome": "38", + "opera": "25", + "edge": "12", + "firefox": "25", + "safari": "7.1", + "node": "0.12", + "deno": "1", + "ios": "8", + "samsung": "3", + "rhino": "1.7.13", + "opera_mobile": "25", + "electron": "0.20" + }, + "es6.math.fround": { + "chrome": "38", + "opera": "25", + "edge": "12", + "firefox": "26", + "safari": "7.1", + "node": "0.12", + "deno": "1", + "ios": "8", + "samsung": "3", + "rhino": "1.7.13", + "opera_mobile": "25", + "electron": "0.20" + }, + "es6.math.hypot": { + "chrome": "38", + "opera": "25", + "edge": "12", + "firefox": "27", + "safari": "7.1", + "node": "0.12", + "deno": "1", + "ios": "8", + "samsung": "3", + "rhino": "1.7.13", + "opera_mobile": "25", + "electron": "0.20" + }, + "es6.math.imul": { + "chrome": "30", + "opera": "17", + "edge": "12", + "firefox": "23", + "safari": "7", + "node": "0.12", + "deno": "1", + "android": "4.4", + "ios": "7", + "samsung": "2", + "rhino": "1.7.13", + "opera_mobile": "18", + "electron": "0.20" + }, + "es6.math.log1p": { + "chrome": "38", + "opera": "25", + "edge": "12", + "firefox": "25", + "safari": "7.1", + "node": "0.12", + "deno": "1", + "ios": "8", + "samsung": "3", + "rhino": "1.7.13", + "opera_mobile": "25", + "electron": "0.20" + }, + "es6.math.log10": { + "chrome": "38", + "opera": "25", + "edge": "12", + "firefox": "25", + "safari": "7.1", + "node": "0.12", + "deno": "1", + "ios": "8", + "samsung": "3", + "rhino": "1.7.13", + "opera_mobile": "25", + "electron": "0.20" + }, + "es6.math.log2": { + "chrome": "38", + "opera": "25", + "edge": "12", + "firefox": "25", + "safari": "7.1", + "node": "0.12", + "deno": "1", + "ios": "8", + "samsung": "3", + "rhino": "1.7.13", + "opera_mobile": "25", + "electron": "0.20" + }, + "es6.math.sign": { + "chrome": "38", + "opera": "25", + "edge": "12", + "firefox": "25", + "safari": "9", + "node": "0.12", + "deno": "1", + "ios": "9", + "samsung": "3", + "rhino": "1.7.13", + "opera_mobile": "25", + "electron": "0.20" + }, + "es6.math.sinh": { + "chrome": "38", + "opera": "25", + "edge": "12", + "firefox": "25", + "safari": "7.1", + "node": "0.12", + "deno": "1", + "ios": "8", + "samsung": "3", + "rhino": "1.7.13", + "opera_mobile": "25", + "electron": "0.20" + }, + "es6.math.tanh": { + "chrome": "38", + "opera": "25", + "edge": "12", + "firefox": "25", + "safari": "7.1", + "node": "0.12", + "deno": "1", + "ios": "8", + "samsung": "3", + "rhino": "1.7.13", + "opera_mobile": "25", + "electron": "0.20" + }, + "es6.math.trunc": { + "chrome": "38", + "opera": "25", + "edge": "12", + "firefox": "25", + "safari": "7.1", + "node": "0.12", + "deno": "1", + "ios": "8", + "samsung": "3", + "rhino": "1.7.13", + "opera_mobile": "25", + "electron": "0.20" + }, + "es6.number.constructor": { + "chrome": "41", + "opera": "28", + "edge": "12", + "firefox": "36", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "3.4", + "rhino": "1.7.13", + "opera_mobile": "28", + "electron": "0.21" + }, + "es6.number.epsilon": { + "chrome": "34", + "opera": "21", + "edge": "12", + "firefox": "25", + "safari": "9", + "node": "0.12", + "deno": "1", + "ios": "9", + "samsung": "2", + "rhino": "1.7.14", + "opera_mobile": "21", + "electron": "0.20" + }, + "es6.number.is-finite": { + "chrome": "19", + "opera": "15", + "edge": "12", + "firefox": "16", + "safari": "9", + "node": "0.8", + "deno": "1", + "android": "4.1", + "ios": "9", + "samsung": "1.5", + "rhino": "1.7.13", + "opera_mobile": "14", + "electron": "0.20" + }, + "es6.number.is-integer": { + "chrome": "34", + "opera": "21", + "edge": "12", + "firefox": "16", + "safari": "9", + "node": "0.12", + "deno": "1", + "ios": "9", + "samsung": "2", + "rhino": "1.7.13", + "opera_mobile": "21", + "electron": "0.20" + }, + "es6.number.is-nan": { + "chrome": "19", + "opera": "15", + "edge": "12", + "firefox": "15", + "safari": "9", + "node": "0.8", + "deno": "1", + "android": "4.1", + "ios": "9", + "samsung": "1.5", + "rhino": "1.7.13", + "opera_mobile": "14", + "electron": "0.20" + }, + "es6.number.is-safe-integer": { + "chrome": "34", + "opera": "21", + "edge": "12", + "firefox": "32", + "safari": "9", + "node": "0.12", + "deno": "1", + "ios": "9", + "samsung": "2", + "rhino": "1.7.13", + "opera_mobile": "21", + "electron": "0.20" + }, + "es6.number.max-safe-integer": { + "chrome": "34", + "opera": "21", + "edge": "12", + "firefox": "31", + "safari": "9", + "node": "0.12", + "deno": "1", + "ios": "9", + "samsung": "2", + "rhino": "1.7.13", + "opera_mobile": "21", + "electron": "0.20" + }, + "es6.number.min-safe-integer": { + "chrome": "34", + "opera": "21", + "edge": "12", + "firefox": "31", + "safari": "9", + "node": "0.12", + "deno": "1", + "ios": "9", + "samsung": "2", + "rhino": "1.7.13", + "opera_mobile": "21", + "electron": "0.20" + }, + "es6.number.parse-float": { + "chrome": "34", + "opera": "21", + "edge": "12", + "firefox": "25", + "safari": "9", + "node": "0.12", + "deno": "1", + "ios": "9", + "samsung": "2", + "rhino": "1.7.14", + "opera_mobile": "21", + "electron": "0.20" + }, + "es6.number.parse-int": { + "chrome": "34", + "opera": "21", + "edge": "12", + "firefox": "25", + "safari": "9", + "node": "0.12", + "deno": "1", + "ios": "9", + "samsung": "2", + "rhino": "1.7.14", + "opera_mobile": "21", + "electron": "0.20" + }, + "es6.object.assign": { + "chrome": "49", + "opera": "36", + "edge": "13", + "firefox": "36", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.8", + "opera_mobile": "36", + "electron": "0.37" + }, + "es6.object.create": { + "chrome": "5", + "opera": "12", + "edge": "12", + "firefox": "4", + "safari": "4", + "node": "0.4", + "deno": "1", + "ie": "9", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "12", + "electron": "0.20" + }, + "es7.object.define-getter": { + "chrome": "62", + "opera": "49", + "edge": "16", + "firefox": "48", + "safari": "9", + "node": "8.10", + "deno": "1", + "ios": "9", + "samsung": "8", + "opera_mobile": "46", + "electron": "3.0" + }, + "es7.object.define-setter": { + "chrome": "62", + "opera": "49", + "edge": "16", + "firefox": "48", + "safari": "9", + "node": "8.10", + "deno": "1", + "ios": "9", + "samsung": "8", + "opera_mobile": "46", + "electron": "3.0" + }, + "es6.object.define-property": { + "chrome": "5", + "opera": "12", + "edge": "12", + "firefox": "4", + "safari": "5.1", + "node": "0.4", + "deno": "1", + "ie": "9", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "12", + "electron": "0.20" + }, + "es6.object.define-properties": { + "chrome": "5", + "opera": "12", + "edge": "12", + "firefox": "4", + "safari": "4", + "node": "0.4", + "deno": "1", + "ie": "9", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "12", + "electron": "0.20" + }, + "es7.object.entries": { + "chrome": "54", + "opera": "41", + "edge": "14", + "firefox": "47", + "safari": "10.1", + "node": "7", + "deno": "1", + "ios": "10.3", + "samsung": "6", + "rhino": "1.7.14", + "opera_mobile": "41", + "electron": "1.4" + }, + "es6.object.freeze": { + "chrome": "44", + "opera": "31", + "edge": "12", + "firefox": "35", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "4", + "rhino": "1.7.13", + "opera_mobile": "32", + "electron": "0.30" + }, + "es6.object.get-own-property-descriptor": { + "chrome": "44", + "opera": "31", + "edge": "12", + "firefox": "35", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "4", + "rhino": "1.7.13", + "opera_mobile": "32", + "electron": "0.30" + }, + "es7.object.get-own-property-descriptors": { + "chrome": "54", + "opera": "41", + "edge": "15", + "firefox": "50", + "safari": "10.1", + "node": "7", + "deno": "1", + "ios": "10.3", + "samsung": "6", + "rhino": "1.8", + "opera_mobile": "41", + "electron": "1.4" + }, + "es6.object.get-own-property-names": { + "chrome": "40", + "opera": "27", + "edge": "12", + "firefox": "33", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "3.4", + "rhino": "1.7.13", + "opera_mobile": "27", + "electron": "0.21" + }, + "es6.object.get-prototype-of": { + "chrome": "44", + "opera": "31", + "edge": "12", + "firefox": "35", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "4", + "rhino": "1.7.13", + "opera_mobile": "32", + "electron": "0.30" + }, + "es7.object.lookup-getter": { + "chrome": "62", + "opera": "49", + "edge": "79", + "firefox": "36", + "safari": "9", + "node": "8.10", + "deno": "1", + "ios": "9", + "samsung": "8", + "opera_mobile": "46", + "electron": "3.0" + }, + "es7.object.lookup-setter": { + "chrome": "62", + "opera": "49", + "edge": "79", + "firefox": "36", + "safari": "9", + "node": "8.10", + "deno": "1", + "ios": "9", + "samsung": "8", + "opera_mobile": "46", + "electron": "3.0" + }, + "es6.object.prevent-extensions": { + "chrome": "44", + "opera": "31", + "edge": "12", + "firefox": "35", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "4", + "rhino": "1.7.13", + "opera_mobile": "32", + "electron": "0.30" + }, + "es6.object.to-string": { + "chrome": "57", + "opera": "44", + "edge": "15", + "firefox": "51", + "safari": "10", + "node": "8", + "deno": "1", + "ios": "10", + "samsung": "7", + "opera_mobile": "43", + "electron": "1.7" + }, + "es6.object.is": { + "chrome": "19", + "opera": "15", + "edge": "12", + "firefox": "22", + "safari": "9", + "node": "0.8", + "deno": "1", + "android": "4.1", + "ios": "9", + "samsung": "1.5", + "rhino": "1.7.13", + "opera_mobile": "14", + "electron": "0.20" + }, + "es6.object.is-frozen": { + "chrome": "44", + "opera": "31", + "edge": "12", + "firefox": "35", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "4", + "rhino": "1.7.13", + "opera_mobile": "32", + "electron": "0.30" + }, + "es6.object.is-sealed": { + "chrome": "44", + "opera": "31", + "edge": "12", + "firefox": "35", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "4", + "rhino": "1.7.13", + "opera_mobile": "32", + "electron": "0.30" + }, + "es6.object.is-extensible": { + "chrome": "44", + "opera": "31", + "edge": "12", + "firefox": "35", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "4", + "rhino": "1.7.13", + "opera_mobile": "32", + "electron": "0.30" + }, + "es6.object.keys": { + "chrome": "40", + "opera": "27", + "edge": "12", + "firefox": "35", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "3.4", + "rhino": "1.7.13", + "opera_mobile": "27", + "electron": "0.21" + }, + "es6.object.seal": { + "chrome": "44", + "opera": "31", + "edge": "12", + "firefox": "35", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "4", + "rhino": "1.7.13", + "opera_mobile": "32", + "electron": "0.30" + }, + "es6.object.set-prototype-of": { + "chrome": "34", + "opera": "21", + "edge": "12", + "firefox": "31", + "safari": "9", + "node": "0.12", + "deno": "1", + "ie": "11", + "ios": "9", + "samsung": "2", + "rhino": "1.7.13", + "opera_mobile": "21", + "electron": "0.20" + }, + "es7.object.values": { + "chrome": "54", + "opera": "41", + "edge": "14", + "firefox": "47", + "safari": "10.1", + "node": "7", + "deno": "1", + "ios": "10.3", + "samsung": "6", + "rhino": "1.7.14", + "opera_mobile": "41", + "electron": "1.4" + }, + "es6.promise": { + "chrome": "51", + "opera": "38", + "edge": "14", + "firefox": "45", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.7.15", + "opera_mobile": "41", + "electron": "1.2" + }, + "es7.promise.finally": { + "chrome": "63", + "opera": "50", + "edge": "18", + "firefox": "58", + "safari": "11.1", + "node": "10", + "deno": "1", + "ios": "11.3", + "samsung": "8", + "rhino": "1.7.15", + "opera_mobile": "46", + "electron": "3.0" + }, + "es6.reflect.apply": { + "chrome": "49", + "opera": "36", + "edge": "12", + "firefox": "42", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.8", + "opera_mobile": "36", + "electron": "0.37" + }, + "es6.reflect.construct": { + "chrome": "49", + "opera": "36", + "edge": "13", + "firefox": "49", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "36", + "electron": "0.37" + }, + "es6.reflect.define-property": { + "chrome": "49", + "opera": "36", + "edge": "13", + "firefox": "42", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.8", + "opera_mobile": "36", + "electron": "0.37" + }, + "es6.reflect.delete-property": { + "chrome": "49", + "opera": "36", + "edge": "12", + "firefox": "42", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.8", + "opera_mobile": "36", + "electron": "0.37" + }, + "es6.reflect.get": { + "chrome": "49", + "opera": "36", + "edge": "12", + "firefox": "42", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.8", + "opera_mobile": "36", + "electron": "0.37" + }, + "es6.reflect.get-own-property-descriptor": { + "chrome": "49", + "opera": "36", + "edge": "12", + "firefox": "42", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.8", + "opera_mobile": "36", + "electron": "0.37" + }, + "es6.reflect.get-prototype-of": { + "chrome": "49", + "opera": "36", + "edge": "12", + "firefox": "42", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.8", + "opera_mobile": "36", + "electron": "0.37" + }, + "es6.reflect.has": { + "chrome": "49", + "opera": "36", + "edge": "12", + "firefox": "42", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.8", + "opera_mobile": "36", + "electron": "0.37" + }, + "es6.reflect.is-extensible": { + "chrome": "49", + "opera": "36", + "edge": "12", + "firefox": "42", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.8", + "opera_mobile": "36", + "electron": "0.37" + }, + "es6.reflect.own-keys": { + "chrome": "49", + "opera": "36", + "edge": "12", + "firefox": "42", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.8", + "opera_mobile": "36", + "electron": "0.37" + }, + "es6.reflect.prevent-extensions": { + "chrome": "49", + "opera": "36", + "edge": "12", + "firefox": "42", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.8", + "opera_mobile": "36", + "electron": "0.37" + }, + "es6.reflect.set": { + "chrome": "49", + "opera": "36", + "edge": "12", + "firefox": "42", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.8", + "opera_mobile": "36", + "electron": "0.37" + }, + "es6.reflect.set-prototype-of": { + "chrome": "49", + "opera": "36", + "edge": "12", + "firefox": "42", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.8", + "opera_mobile": "36", + "electron": "0.37" + }, + "es6.regexp.constructor": { + "chrome": "50", + "opera": "37", + "edge": "79", + "firefox": "40", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "37", + "electron": "1.1" + }, + "es6.regexp.flags": { + "chrome": "49", + "opera": "36", + "edge": "79", + "firefox": "37", + "safari": "9", + "node": "6", + "deno": "1", + "ios": "9", + "samsung": "5", + "rhino": "1.7.15", + "opera_mobile": "36", + "electron": "0.37" + }, + "es6.regexp.match": { + "chrome": "50", + "opera": "37", + "edge": "79", + "firefox": "49", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.7.13", + "opera_mobile": "37", + "electron": "1.1" + }, + "es6.regexp.replace": { + "chrome": "50", + "opera": "37", + "edge": "79", + "firefox": "49", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "37", + "electron": "1.1" + }, + "es6.regexp.split": { + "chrome": "50", + "opera": "37", + "edge": "79", + "firefox": "49", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "37", + "electron": "1.1" + }, + "es6.regexp.search": { + "chrome": "50", + "opera": "37", + "edge": "79", + "firefox": "49", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.7.13", + "opera_mobile": "37", + "electron": "1.1" + }, + "es6.regexp.to-string": { + "chrome": "50", + "opera": "37", + "edge": "79", + "firefox": "39", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.7.15", + "opera_mobile": "37", + "electron": "1.1" + }, + "es6.set": { + "chrome": "51", + "opera": "38", + "edge": "15", + "firefox": "53", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "es6.symbol": { + "chrome": "51", + "opera": "38", + "edge": "79", + "firefox": "51", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "es7.symbol.async-iterator": { + "chrome": "63", + "opera": "50", + "edge": "79", + "firefox": "57", + "safari": "12", + "node": "10", + "deno": "1", + "ios": "12", + "samsung": "8", + "opera_mobile": "46", + "electron": "3.0" + }, + "es6.string.anchor": { + "chrome": "5", + "opera": "15", + "edge": "12", + "firefox": "17", + "safari": "6", + "node": "0.4", + "deno": "1", + "android": "4", + "ios": "7", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.14", + "opera_mobile": "14", + "electron": "0.20" + }, + "es6.string.big": { + "chrome": "5", + "opera": "15", + "edge": "12", + "firefox": "17", + "safari": "6", + "node": "0.4", + "deno": "1", + "android": "4", + "ios": "7", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.14", + "opera_mobile": "14", + "electron": "0.20" + }, + "es6.string.blink": { + "chrome": "5", + "opera": "15", + "edge": "12", + "firefox": "17", + "safari": "6", + "node": "0.4", + "deno": "1", + "android": "4", + "ios": "7", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.14", + "opera_mobile": "14", + "electron": "0.20" + }, + "es6.string.bold": { + "chrome": "5", + "opera": "15", + "edge": "12", + "firefox": "17", + "safari": "6", + "node": "0.4", + "deno": "1", + "android": "4", + "ios": "7", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.14", + "opera_mobile": "14", + "electron": "0.20" + }, + "es6.string.code-point-at": { + "chrome": "41", + "opera": "28", + "edge": "12", + "firefox": "29", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "3.4", + "rhino": "1.7.13", + "opera_mobile": "28", + "electron": "0.21" + }, + "es6.string.ends-with": { + "chrome": "41", + "opera": "28", + "edge": "12", + "firefox": "29", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "3.4", + "rhino": "1.7.13", + "opera_mobile": "28", + "electron": "0.21" + }, + "es6.string.fixed": { + "chrome": "5", + "opera": "15", + "edge": "12", + "firefox": "17", + "safari": "6", + "node": "0.4", + "deno": "1", + "android": "4", + "ios": "7", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.14", + "opera_mobile": "14", + "electron": "0.20" + }, + "es6.string.fontcolor": { + "chrome": "5", + "opera": "15", + "edge": "12", + "firefox": "17", + "safari": "6", + "node": "0.4", + "deno": "1", + "android": "4", + "ios": "7", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.14", + "opera_mobile": "14", + "electron": "0.20" + }, + "es6.string.fontsize": { + "chrome": "5", + "opera": "15", + "edge": "12", + "firefox": "17", + "safari": "6", + "node": "0.4", + "deno": "1", + "android": "4", + "ios": "7", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.14", + "opera_mobile": "14", + "electron": "0.20" + }, + "es6.string.from-code-point": { + "chrome": "41", + "opera": "28", + "edge": "12", + "firefox": "29", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "3.4", + "rhino": "1.7.13", + "opera_mobile": "28", + "electron": "0.21" + }, + "es6.string.includes": { + "chrome": "41", + "opera": "28", + "edge": "12", + "firefox": "40", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "3.4", + "rhino": "1.7.13", + "opera_mobile": "28", + "electron": "0.21" + }, + "es6.string.italics": { + "chrome": "5", + "opera": "15", + "edge": "12", + "firefox": "17", + "safari": "6", + "node": "0.4", + "deno": "1", + "android": "4", + "ios": "7", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.14", + "opera_mobile": "14", + "electron": "0.20" + }, + "es6.string.iterator": { + "chrome": "38", + "opera": "25", + "edge": "12", + "firefox": "36", + "safari": "9", + "node": "0.12", + "deno": "1", + "ios": "9", + "samsung": "3", + "rhino": "1.7.13", + "opera_mobile": "25", + "electron": "0.20" + }, + "es6.string.link": { + "chrome": "5", + "opera": "15", + "edge": "12", + "firefox": "17", + "safari": "6", + "node": "0.4", + "deno": "1", + "android": "4", + "ios": "7", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.14", + "opera_mobile": "14", + "electron": "0.20" + }, + "es7.string.pad-start": { + "chrome": "57", + "opera": "44", + "edge": "15", + "firefox": "48", + "safari": "10", + "node": "8", + "deno": "1", + "ios": "10", + "samsung": "7", + "rhino": "1.7.13", + "opera_mobile": "43", + "electron": "1.7" + }, + "es7.string.pad-end": { + "chrome": "57", + "opera": "44", + "edge": "15", + "firefox": "48", + "safari": "10", + "node": "8", + "deno": "1", + "ios": "10", + "samsung": "7", + "rhino": "1.7.13", + "opera_mobile": "43", + "electron": "1.7" + }, + "es6.string.raw": { + "chrome": "41", + "opera": "28", + "edge": "12", + "firefox": "34", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "3.4", + "rhino": "1.7.14", + "opera_mobile": "28", + "electron": "0.21" + }, + "es6.string.repeat": { + "chrome": "41", + "opera": "28", + "edge": "12", + "firefox": "24", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "3.4", + "rhino": "1.7.13", + "opera_mobile": "28", + "electron": "0.21" + }, + "es6.string.small": { + "chrome": "5", + "opera": "15", + "edge": "12", + "firefox": "17", + "safari": "6", + "node": "0.4", + "deno": "1", + "android": "4", + "ios": "7", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.14", + "opera_mobile": "14", + "electron": "0.20" + }, + "es6.string.starts-with": { + "chrome": "41", + "opera": "28", + "edge": "12", + "firefox": "29", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "3.4", + "rhino": "1.7.13", + "opera_mobile": "28", + "electron": "0.21" + }, + "es6.string.strike": { + "chrome": "5", + "opera": "15", + "edge": "12", + "firefox": "17", + "safari": "6", + "node": "0.4", + "deno": "1", + "android": "4", + "ios": "7", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.14", + "opera_mobile": "14", + "electron": "0.20" + }, + "es6.string.sub": { + "chrome": "5", + "opera": "15", + "edge": "12", + "firefox": "17", + "safari": "6", + "node": "0.4", + "deno": "1", + "android": "4", + "ios": "7", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.14", + "opera_mobile": "14", + "electron": "0.20" + }, + "es6.string.sup": { + "chrome": "5", + "opera": "15", + "edge": "12", + "firefox": "17", + "safari": "6", + "node": "0.4", + "deno": "1", + "android": "4", + "ios": "7", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.14", + "opera_mobile": "14", + "electron": "0.20" + }, + "es6.string.trim": { + "chrome": "5", + "opera": "10.50", + "edge": "12", + "firefox": "3.5", + "safari": "4", + "node": "0.4", + "deno": "1", + "ie": "9", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "10.1", + "electron": "0.20" + }, + "es7.string.trim-left": { + "chrome": "66", + "opera": "53", + "edge": "79", + "firefox": "61", + "safari": "12", + "node": "10", + "deno": "1", + "ios": "12", + "samsung": "9", + "rhino": "1.7.13", + "opera_mobile": "47", + "electron": "3.0" + }, + "es7.string.trim-right": { + "chrome": "66", + "opera": "53", + "edge": "79", + "firefox": "61", + "safari": "12", + "node": "10", + "deno": "1", + "ios": "12", + "samsung": "9", + "rhino": "1.7.13", + "opera_mobile": "47", + "electron": "3.0" + }, + "es6.typed.array-buffer": { + "chrome": "51", + "opera": "38", + "edge": "13", + "firefox": "48", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "es6.typed.data-view": { + "chrome": "5", + "opera": "12", + "edge": "12", + "firefox": "15", + "safari": "5.1", + "node": "0.4", + "deno": "1", + "ie": "10", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "12", + "electron": "0.20" + }, + "es6.typed.int8-array": { + "chrome": "51", + "opera": "38", + "edge": "13", + "firefox": "48", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "es6.typed.uint8-array": { + "chrome": "51", + "opera": "38", + "edge": "13", + "firefox": "48", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "es6.typed.uint8-clamped-array": { + "chrome": "51", + "opera": "38", + "edge": "13", + "firefox": "48", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "es6.typed.int16-array": { + "chrome": "51", + "opera": "38", + "edge": "13", + "firefox": "48", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "es6.typed.uint16-array": { + "chrome": "51", + "opera": "38", + "edge": "13", + "firefox": "48", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "es6.typed.int32-array": { + "chrome": "51", + "opera": "38", + "edge": "13", + "firefox": "48", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "es6.typed.uint32-array": { + "chrome": "51", + "opera": "38", + "edge": "13", + "firefox": "48", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "es6.typed.float32-array": { + "chrome": "51", + "opera": "38", + "edge": "13", + "firefox": "48", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "es6.typed.float64-array": { + "chrome": "51", + "opera": "38", + "edge": "13", + "firefox": "48", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "es6.weak-map": { + "chrome": "51", + "opera": "38", + "edge": "15", + "firefox": "53", + "safari": "9", + "node": "6.5", + "deno": "1", + "ios": "9", + "samsung": "5", + "rhino": "1.7.15", + "opera_mobile": "41", + "electron": "1.2" + }, + "es6.weak-set": { + "chrome": "51", + "opera": "38", + "edge": "15", + "firefox": "53", + "safari": "9", + "node": "6.5", + "deno": "1", + "ios": "9", + "samsung": "5", + "rhino": "1.7.15", + "opera_mobile": "41", + "electron": "1.2" + } +} diff --git a/node_modules/@babel/compat-data/data/corejs3-shipped-proposals.json b/node_modules/@babel/compat-data/data/corejs3-shipped-proposals.json new file mode 100644 index 00000000..d03b698f --- /dev/null +++ b/node_modules/@babel/compat-data/data/corejs3-shipped-proposals.json @@ -0,0 +1,5 @@ +[ + "esnext.promise.all-settled", + "esnext.string.match-all", + "esnext.global-this" +] diff --git a/node_modules/@babel/compat-data/data/native-modules.json b/node_modules/@babel/compat-data/data/native-modules.json new file mode 100644 index 00000000..2328d213 --- /dev/null +++ b/node_modules/@babel/compat-data/data/native-modules.json @@ -0,0 +1,18 @@ +{ + "es6.module": { + "chrome": "61", + "and_chr": "61", + "edge": "16", + "firefox": "60", + "and_ff": "60", + "node": "13.2.0", + "opera": "48", + "op_mob": "45", + "safari": "10.1", + "ios": "10.3", + "samsung": "8.2", + "android": "61", + "electron": "2.0", + "ios_saf": "10.3" + } +} diff --git a/node_modules/@babel/compat-data/data/overlapping-plugins.json b/node_modules/@babel/compat-data/data/overlapping-plugins.json new file mode 100644 index 00000000..9b884bd4 --- /dev/null +++ b/node_modules/@babel/compat-data/data/overlapping-plugins.json @@ -0,0 +1,35 @@ +{ + "transform-async-to-generator": [ + "bugfix/transform-async-arrows-in-class" + ], + "transform-parameters": [ + "bugfix/transform-edge-default-parameters", + "bugfix/transform-safari-id-destructuring-collision-in-function-expression" + ], + "transform-function-name": [ + "bugfix/transform-edge-function-name" + ], + "transform-block-scoping": [ + "bugfix/transform-safari-block-shadowing", + "bugfix/transform-safari-for-shadowing" + ], + "transform-template-literals": [ + "bugfix/transform-tagged-template-caching" + ], + "transform-optional-chaining": [ + "bugfix/transform-v8-spread-parameters-in-optional-chaining" + ], + "proposal-optional-chaining": [ + "bugfix/transform-v8-spread-parameters-in-optional-chaining" + ], + "transform-class-properties": [ + "bugfix/transform-v8-static-class-fields-redefine-readonly", + "bugfix/transform-firefox-class-in-computed-class-key", + "bugfix/transform-safari-class-field-initializer-scope" + ], + "proposal-class-properties": [ + "bugfix/transform-v8-static-class-fields-redefine-readonly", + "bugfix/transform-firefox-class-in-computed-class-key", + "bugfix/transform-safari-class-field-initializer-scope" + ] +} diff --git a/node_modules/@babel/compat-data/data/plugin-bugfixes.json b/node_modules/@babel/compat-data/data/plugin-bugfixes.json new file mode 100644 index 00000000..3d1aed6e --- /dev/null +++ b/node_modules/@babel/compat-data/data/plugin-bugfixes.json @@ -0,0 +1,203 @@ +{ + "bugfix/transform-async-arrows-in-class": { + "chrome": "55", + "opera": "42", + "edge": "15", + "firefox": "52", + "safari": "11", + "node": "7.6", + "deno": "1", + "ios": "11", + "samsung": "6", + "opera_mobile": "42", + "electron": "1.6" + }, + "bugfix/transform-edge-default-parameters": { + "chrome": "49", + "opera": "36", + "edge": "18", + "firefox": "52", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "36", + "electron": "0.37" + }, + "bugfix/transform-edge-function-name": { + "chrome": "51", + "opera": "38", + "edge": "79", + "firefox": "53", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "bugfix/transform-safari-block-shadowing": { + "chrome": "49", + "opera": "36", + "edge": "12", + "firefox": "44", + "safari": "11", + "node": "6", + "deno": "1", + "ie": "11", + "ios": "11", + "samsung": "5", + "opera_mobile": "36", + "electron": "0.37" + }, + "bugfix/transform-safari-for-shadowing": { + "chrome": "49", + "opera": "36", + "edge": "12", + "firefox": "4", + "safari": "11", + "node": "6", + "deno": "1", + "ie": "11", + "ios": "11", + "samsung": "5", + "rhino": "1.7.13", + "opera_mobile": "36", + "electron": "0.37" + }, + "bugfix/transform-safari-id-destructuring-collision-in-function-expression": { + "chrome": "49", + "opera": "36", + "edge": "14", + "firefox": "2", + "safari": "16.3", + "node": "6", + "deno": "1", + "ios": "16.3", + "samsung": "5", + "opera_mobile": "36", + "electron": "0.37" + }, + "bugfix/transform-tagged-template-caching": { + "chrome": "41", + "opera": "28", + "edge": "12", + "firefox": "34", + "safari": "13", + "node": "4", + "deno": "1", + "ios": "13", + "samsung": "3.4", + "rhino": "1.7.14", + "opera_mobile": "28", + "electron": "0.21" + }, + "bugfix/transform-v8-spread-parameters-in-optional-chaining": { + "chrome": "91", + "opera": "77", + "edge": "91", + "firefox": "74", + "safari": "13.1", + "node": "16.9", + "deno": "1.9", + "ios": "13.4", + "samsung": "16", + "opera_mobile": "64", + "electron": "13.0" + }, + "transform-optional-chaining": { + "chrome": "80", + "opera": "67", + "edge": "80", + "firefox": "74", + "safari": "13.1", + "node": "14", + "deno": "1", + "ios": "13.4", + "samsung": "13", + "rhino": "1.8", + "opera_mobile": "57", + "electron": "8.0" + }, + "proposal-optional-chaining": { + "chrome": "80", + "opera": "67", + "edge": "80", + "firefox": "74", + "safari": "13.1", + "node": "14", + "deno": "1", + "ios": "13.4", + "samsung": "13", + "rhino": "1.8", + "opera_mobile": "57", + "electron": "8.0" + }, + "transform-parameters": { + "chrome": "49", + "opera": "36", + "edge": "15", + "firefox": "52", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "36", + "electron": "0.37" + }, + "transform-async-to-generator": { + "chrome": "55", + "opera": "42", + "edge": "15", + "firefox": "52", + "safari": "10.1", + "node": "7.6", + "deno": "1", + "ios": "10.3", + "samsung": "6", + "opera_mobile": "42", + "electron": "1.6" + }, + "transform-template-literals": { + "chrome": "41", + "opera": "28", + "edge": "13", + "firefox": "34", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "3.4", + "opera_mobile": "28", + "electron": "0.21" + }, + "transform-function-name": { + "chrome": "51", + "opera": "38", + "edge": "14", + "firefox": "53", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "transform-block-scoping": { + "chrome": "50", + "opera": "37", + "edge": "14", + "firefox": "53", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "37", + "electron": "1.1" + } +} diff --git a/node_modules/@babel/compat-data/data/plugins.json b/node_modules/@babel/compat-data/data/plugins.json new file mode 100644 index 00000000..eebcce67 --- /dev/null +++ b/node_modules/@babel/compat-data/data/plugins.json @@ -0,0 +1,831 @@ +{ + "transform-duplicate-named-capturing-groups-regex": { + "chrome": "126", + "opera": "112", + "edge": "126", + "firefox": "129", + "safari": "17.4", + "node": "23", + "ios": "17.4", + "electron": "31.0" + }, + "transform-regexp-modifiers": { + "chrome": "125", + "opera": "111", + "edge": "125", + "firefox": "132", + "node": "23", + "samsung": "27", + "electron": "31.0" + }, + "transform-unicode-sets-regex": { + "chrome": "112", + "opera": "98", + "edge": "112", + "firefox": "116", + "safari": "17", + "node": "20", + "deno": "1.32", + "ios": "17", + "samsung": "23", + "opera_mobile": "75", + "electron": "24.0" + }, + "bugfix/transform-v8-static-class-fields-redefine-readonly": { + "chrome": "98", + "opera": "84", + "edge": "98", + "firefox": "75", + "safari": "15", + "node": "12", + "deno": "1.18", + "ios": "15", + "samsung": "11", + "opera_mobile": "52", + "electron": "17.0" + }, + "bugfix/transform-firefox-class-in-computed-class-key": { + "chrome": "74", + "opera": "62", + "edge": "79", + "firefox": "126", + "safari": "16", + "node": "12", + "deno": "1", + "ios": "16", + "samsung": "11", + "opera_mobile": "53", + "electron": "6.0" + }, + "bugfix/transform-safari-class-field-initializer-scope": { + "chrome": "74", + "opera": "62", + "edge": "79", + "firefox": "69", + "safari": "16", + "node": "12", + "deno": "1", + "ios": "16", + "samsung": "11", + "opera_mobile": "53", + "electron": "6.0" + }, + "transform-class-static-block": { + "chrome": "94", + "opera": "80", + "edge": "94", + "firefox": "93", + "safari": "16.4", + "node": "16.11", + "deno": "1.14", + "ios": "16.4", + "samsung": "17", + "opera_mobile": "66", + "electron": "15.0" + }, + "proposal-class-static-block": { + "chrome": "94", + "opera": "80", + "edge": "94", + "firefox": "93", + "safari": "16.4", + "node": "16.11", + "deno": "1.14", + "ios": "16.4", + "samsung": "17", + "opera_mobile": "66", + "electron": "15.0" + }, + "transform-private-property-in-object": { + "chrome": "91", + "opera": "77", + "edge": "91", + "firefox": "90", + "safari": "15", + "node": "16.9", + "deno": "1.9", + "ios": "15", + "samsung": "16", + "opera_mobile": "64", + "electron": "13.0" + }, + "proposal-private-property-in-object": { + "chrome": "91", + "opera": "77", + "edge": "91", + "firefox": "90", + "safari": "15", + "node": "16.9", + "deno": "1.9", + "ios": "15", + "samsung": "16", + "opera_mobile": "64", + "electron": "13.0" + }, + "transform-class-properties": { + "chrome": "74", + "opera": "62", + "edge": "79", + "firefox": "90", + "safari": "14.1", + "node": "12", + "deno": "1", + "ios": "14.5", + "samsung": "11", + "opera_mobile": "53", + "electron": "6.0" + }, + "proposal-class-properties": { + "chrome": "74", + "opera": "62", + "edge": "79", + "firefox": "90", + "safari": "14.1", + "node": "12", + "deno": "1", + "ios": "14.5", + "samsung": "11", + "opera_mobile": "53", + "electron": "6.0" + }, + "transform-private-methods": { + "chrome": "84", + "opera": "70", + "edge": "84", + "firefox": "90", + "safari": "15", + "node": "14.6", + "deno": "1", + "ios": "15", + "samsung": "14", + "opera_mobile": "60", + "electron": "10.0" + }, + "proposal-private-methods": { + "chrome": "84", + "opera": "70", + "edge": "84", + "firefox": "90", + "safari": "15", + "node": "14.6", + "deno": "1", + "ios": "15", + "samsung": "14", + "opera_mobile": "60", + "electron": "10.0" + }, + "transform-numeric-separator": { + "chrome": "75", + "opera": "62", + "edge": "79", + "firefox": "70", + "safari": "13", + "node": "12.5", + "deno": "1", + "ios": "13", + "samsung": "11", + "rhino": "1.7.14", + "opera_mobile": "54", + "electron": "6.0" + }, + "proposal-numeric-separator": { + "chrome": "75", + "opera": "62", + "edge": "79", + "firefox": "70", + "safari": "13", + "node": "12.5", + "deno": "1", + "ios": "13", + "samsung": "11", + "rhino": "1.7.14", + "opera_mobile": "54", + "electron": "6.0" + }, + "transform-logical-assignment-operators": { + "chrome": "85", + "opera": "71", + "edge": "85", + "firefox": "79", + "safari": "14", + "node": "15", + "deno": "1.2", + "ios": "14", + "samsung": "14", + "opera_mobile": "60", + "electron": "10.0" + }, + "proposal-logical-assignment-operators": { + "chrome": "85", + "opera": "71", + "edge": "85", + "firefox": "79", + "safari": "14", + "node": "15", + "deno": "1.2", + "ios": "14", + "samsung": "14", + "opera_mobile": "60", + "electron": "10.0" + }, + "transform-nullish-coalescing-operator": { + "chrome": "80", + "opera": "67", + "edge": "80", + "firefox": "72", + "safari": "13.1", + "node": "14", + "deno": "1", + "ios": "13.4", + "samsung": "13", + "rhino": "1.8", + "opera_mobile": "57", + "electron": "8.0" + }, + "proposal-nullish-coalescing-operator": { + "chrome": "80", + "opera": "67", + "edge": "80", + "firefox": "72", + "safari": "13.1", + "node": "14", + "deno": "1", + "ios": "13.4", + "samsung": "13", + "rhino": "1.8", + "opera_mobile": "57", + "electron": "8.0" + }, + "transform-optional-chaining": { + "chrome": "91", + "opera": "77", + "edge": "91", + "firefox": "74", + "safari": "13.1", + "node": "16.9", + "deno": "1.9", + "ios": "13.4", + "samsung": "16", + "opera_mobile": "64", + "electron": "13.0" + }, + "proposal-optional-chaining": { + "chrome": "91", + "opera": "77", + "edge": "91", + "firefox": "74", + "safari": "13.1", + "node": "16.9", + "deno": "1.9", + "ios": "13.4", + "samsung": "16", + "opera_mobile": "64", + "electron": "13.0" + }, + "transform-json-strings": { + "chrome": "66", + "opera": "53", + "edge": "79", + "firefox": "62", + "safari": "12", + "node": "10", + "deno": "1", + "ios": "12", + "samsung": "9", + "rhino": "1.7.14", + "opera_mobile": "47", + "electron": "3.0" + }, + "proposal-json-strings": { + "chrome": "66", + "opera": "53", + "edge": "79", + "firefox": "62", + "safari": "12", + "node": "10", + "deno": "1", + "ios": "12", + "samsung": "9", + "rhino": "1.7.14", + "opera_mobile": "47", + "electron": "3.0" + }, + "transform-optional-catch-binding": { + "chrome": "66", + "opera": "53", + "edge": "79", + "firefox": "58", + "safari": "11.1", + "node": "10", + "deno": "1", + "ios": "11.3", + "samsung": "9", + "opera_mobile": "47", + "electron": "3.0" + }, + "proposal-optional-catch-binding": { + "chrome": "66", + "opera": "53", + "edge": "79", + "firefox": "58", + "safari": "11.1", + "node": "10", + "deno": "1", + "ios": "11.3", + "samsung": "9", + "opera_mobile": "47", + "electron": "3.0" + }, + "transform-parameters": { + "chrome": "49", + "opera": "36", + "edge": "18", + "firefox": "52", + "safari": "16.3", + "node": "6", + "deno": "1", + "ios": "16.3", + "samsung": "5", + "opera_mobile": "36", + "electron": "0.37" + }, + "transform-async-generator-functions": { + "chrome": "63", + "opera": "50", + "edge": "79", + "firefox": "57", + "safari": "12", + "node": "10", + "deno": "1", + "ios": "12", + "samsung": "8", + "opera_mobile": "46", + "electron": "3.0" + }, + "proposal-async-generator-functions": { + "chrome": "63", + "opera": "50", + "edge": "79", + "firefox": "57", + "safari": "12", + "node": "10", + "deno": "1", + "ios": "12", + "samsung": "8", + "opera_mobile": "46", + "electron": "3.0" + }, + "transform-object-rest-spread": { + "chrome": "60", + "opera": "47", + "edge": "79", + "firefox": "55", + "safari": "11.1", + "node": "8.3", + "deno": "1", + "ios": "11.3", + "samsung": "8", + "opera_mobile": "44", + "electron": "2.0" + }, + "proposal-object-rest-spread": { + "chrome": "60", + "opera": "47", + "edge": "79", + "firefox": "55", + "safari": "11.1", + "node": "8.3", + "deno": "1", + "ios": "11.3", + "samsung": "8", + "opera_mobile": "44", + "electron": "2.0" + }, + "transform-dotall-regex": { + "chrome": "62", + "opera": "49", + "edge": "79", + "firefox": "78", + "safari": "11.1", + "node": "8.10", + "deno": "1", + "ios": "11.3", + "samsung": "8", + "rhino": "1.7.15", + "opera_mobile": "46", + "electron": "3.0" + }, + "transform-unicode-property-regex": { + "chrome": "64", + "opera": "51", + "edge": "79", + "firefox": "78", + "safari": "11.1", + "node": "10", + "deno": "1", + "ios": "11.3", + "samsung": "9", + "opera_mobile": "47", + "electron": "3.0" + }, + "proposal-unicode-property-regex": { + "chrome": "64", + "opera": "51", + "edge": "79", + "firefox": "78", + "safari": "11.1", + "node": "10", + "deno": "1", + "ios": "11.3", + "samsung": "9", + "opera_mobile": "47", + "electron": "3.0" + }, + "transform-named-capturing-groups-regex": { + "chrome": "64", + "opera": "51", + "edge": "79", + "firefox": "78", + "safari": "11.1", + "node": "10", + "deno": "1", + "ios": "11.3", + "samsung": "9", + "opera_mobile": "47", + "electron": "3.0" + }, + "transform-async-to-generator": { + "chrome": "55", + "opera": "42", + "edge": "15", + "firefox": "52", + "safari": "11", + "node": "7.6", + "deno": "1", + "ios": "11", + "samsung": "6", + "opera_mobile": "42", + "electron": "1.6" + }, + "transform-exponentiation-operator": { + "chrome": "52", + "opera": "39", + "edge": "14", + "firefox": "52", + "safari": "10.1", + "node": "7", + "deno": "1", + "ios": "10.3", + "samsung": "6", + "rhino": "1.7.14", + "opera_mobile": "41", + "electron": "1.3" + }, + "transform-template-literals": { + "chrome": "41", + "opera": "28", + "edge": "13", + "firefox": "34", + "safari": "13", + "node": "4", + "deno": "1", + "ios": "13", + "samsung": "3.4", + "opera_mobile": "28", + "electron": "0.21" + }, + "transform-literals": { + "chrome": "44", + "opera": "31", + "edge": "12", + "firefox": "53", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "4", + "rhino": "1.7.15", + "opera_mobile": "32", + "electron": "0.30" + }, + "transform-function-name": { + "chrome": "51", + "opera": "38", + "edge": "79", + "firefox": "53", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "transform-arrow-functions": { + "chrome": "47", + "opera": "34", + "edge": "13", + "firefox": "43", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.7.13", + "opera_mobile": "34", + "electron": "0.36" + }, + "transform-block-scoped-functions": { + "chrome": "41", + "opera": "28", + "edge": "12", + "firefox": "46", + "safari": "10", + "node": "4", + "deno": "1", + "ie": "11", + "ios": "10", + "samsung": "3.4", + "opera_mobile": "28", + "electron": "0.21" + }, + "transform-classes": { + "chrome": "46", + "opera": "33", + "edge": "13", + "firefox": "45", + "safari": "10", + "node": "5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "33", + "electron": "0.36" + }, + "transform-object-super": { + "chrome": "46", + "opera": "33", + "edge": "13", + "firefox": "45", + "safari": "10", + "node": "5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "33", + "electron": "0.36" + }, + "transform-shorthand-properties": { + "chrome": "43", + "opera": "30", + "edge": "12", + "firefox": "33", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "4", + "rhino": "1.7.14", + "opera_mobile": "30", + "electron": "0.27" + }, + "transform-duplicate-keys": { + "chrome": "42", + "opera": "29", + "edge": "12", + "firefox": "34", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "3.4", + "opera_mobile": "29", + "electron": "0.25" + }, + "transform-computed-properties": { + "chrome": "44", + "opera": "31", + "edge": "12", + "firefox": "34", + "safari": "7.1", + "node": "4", + "deno": "1", + "ios": "8", + "samsung": "4", + "rhino": "1.8", + "opera_mobile": "32", + "electron": "0.30" + }, + "transform-for-of": { + "chrome": "51", + "opera": "38", + "edge": "15", + "firefox": "53", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "transform-sticky-regex": { + "chrome": "49", + "opera": "36", + "edge": "13", + "firefox": "3", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "rhino": "1.7.15", + "opera_mobile": "36", + "electron": "0.37" + }, + "transform-unicode-escapes": { + "chrome": "44", + "opera": "31", + "edge": "12", + "firefox": "53", + "safari": "9", + "node": "4", + "deno": "1", + "ios": "9", + "samsung": "4", + "rhino": "1.7.15", + "opera_mobile": "32", + "electron": "0.30" + }, + "transform-unicode-regex": { + "chrome": "50", + "opera": "37", + "edge": "13", + "firefox": "46", + "safari": "12", + "node": "6", + "deno": "1", + "ios": "12", + "samsung": "5", + "opera_mobile": "37", + "electron": "1.1" + }, + "transform-spread": { + "chrome": "46", + "opera": "33", + "edge": "13", + "firefox": "45", + "safari": "10", + "node": "5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "33", + "electron": "0.36" + }, + "transform-destructuring": { + "chrome": "51", + "opera": "38", + "edge": "15", + "firefox": "53", + "safari": "10", + "node": "6.5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "41", + "electron": "1.2" + }, + "transform-block-scoping": { + "chrome": "50", + "opera": "37", + "edge": "14", + "firefox": "53", + "safari": "11", + "node": "6", + "deno": "1", + "ios": "11", + "samsung": "5", + "opera_mobile": "37", + "electron": "1.1" + }, + "transform-typeof-symbol": { + "chrome": "48", + "opera": "35", + "edge": "12", + "firefox": "36", + "safari": "9", + "node": "6", + "deno": "1", + "ios": "9", + "samsung": "5", + "rhino": "1.8", + "opera_mobile": "35", + "electron": "0.37" + }, + "transform-new-target": { + "chrome": "46", + "opera": "33", + "edge": "14", + "firefox": "41", + "safari": "10", + "node": "5", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "33", + "electron": "0.36" + }, + "transform-regenerator": { + "chrome": "50", + "opera": "37", + "edge": "13", + "firefox": "53", + "safari": "10", + "node": "6", + "deno": "1", + "ios": "10", + "samsung": "5", + "opera_mobile": "37", + "electron": "1.1" + }, + "transform-member-expression-literals": { + "chrome": "7", + "opera": "12", + "edge": "12", + "firefox": "2", + "safari": "5.1", + "node": "0.4", + "deno": "1", + "ie": "9", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "12", + "electron": "0.20" + }, + "transform-property-literals": { + "chrome": "7", + "opera": "12", + "edge": "12", + "firefox": "2", + "safari": "5.1", + "node": "0.4", + "deno": "1", + "ie": "9", + "android": "4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "12", + "electron": "0.20" + }, + "transform-reserved-words": { + "chrome": "13", + "opera": "10.50", + "edge": "12", + "firefox": "2", + "safari": "3.1", + "node": "0.6", + "deno": "1", + "ie": "9", + "android": "4.4", + "ios": "6", + "phantom": "1.9", + "samsung": "1", + "rhino": "1.7.13", + "opera_mobile": "10.1", + "electron": "0.20" + }, + "transform-export-namespace-from": { + "chrome": "72", + "deno": "1.0", + "edge": "79", + "firefox": "80", + "node": "13.2.0", + "opera": "60", + "opera_mobile": "51", + "safari": "14.1", + "ios": "14.5", + "samsung": "11.0", + "android": "72", + "electron": "5.0" + }, + "proposal-export-namespace-from": { + "chrome": "72", + "deno": "1.0", + "edge": "79", + "firefox": "80", + "node": "13.2.0", + "opera": "60", + "opera_mobile": "51", + "safari": "14.1", + "ios": "14.5", + "samsung": "11.0", + "android": "72", + "electron": "5.0" + } +} diff --git a/node_modules/@babel/compat-data/native-modules.js b/node_modules/@babel/compat-data/native-modules.js new file mode 100644 index 00000000..f8c25fa3 --- /dev/null +++ b/node_modules/@babel/compat-data/native-modules.js @@ -0,0 +1,2 @@ +// Todo (Babel 8): remove this file, in Babel 8 users import the .json directly +module.exports = require("./data/native-modules.json"); diff --git a/node_modules/@babel/compat-data/overlapping-plugins.js b/node_modules/@babel/compat-data/overlapping-plugins.js new file mode 100644 index 00000000..0dd35f15 --- /dev/null +++ b/node_modules/@babel/compat-data/overlapping-plugins.js @@ -0,0 +1,2 @@ +// Todo (Babel 8): remove this file, in Babel 8 users import the .json directly +module.exports = require("./data/overlapping-plugins.json"); diff --git a/node_modules/@babel/compat-data/package.json b/node_modules/@babel/compat-data/package.json new file mode 100644 index 00000000..eb2b83c8 --- /dev/null +++ b/node_modules/@babel/compat-data/package.json @@ -0,0 +1,40 @@ +{ + "name": "@babel/compat-data", + "version": "7.27.5", + "author": "The Babel Team (https://babel.dev/team)", + "license": "MIT", + "description": "The compat-data to determine required Babel plugins", + "repository": { + "type": "git", + "url": "https://github.com/babel/babel.git", + "directory": "packages/babel-compat-data" + }, + "publishConfig": { + "access": "public" + }, + "exports": { + "./plugins": "./plugins.js", + "./native-modules": "./native-modules.js", + "./corejs2-built-ins": "./corejs2-built-ins.js", + "./corejs3-shipped-proposals": "./corejs3-shipped-proposals.js", + "./overlapping-plugins": "./overlapping-plugins.js", + "./plugin-bugfixes": "./plugin-bugfixes.js" + }, + "scripts": { + "build-data": "./scripts/download-compat-table.sh && node ./scripts/build-data.mjs && node ./scripts/build-modules-support.mjs && node ./scripts/build-bugfixes-targets.mjs" + }, + "keywords": [ + "babel", + "compat-table", + "compat-data" + ], + "devDependencies": { + "@mdn/browser-compat-data": "^6.0.8", + "core-js-compat": "^3.41.0", + "electron-to-chromium": "^1.5.140" + }, + "engines": { + "node": ">=6.9.0" + }, + "type": "commonjs" +} \ No newline at end of file diff --git a/node_modules/@babel/compat-data/plugin-bugfixes.js b/node_modules/@babel/compat-data/plugin-bugfixes.js new file mode 100644 index 00000000..9aaf3641 --- /dev/null +++ b/node_modules/@babel/compat-data/plugin-bugfixes.js @@ -0,0 +1,2 @@ +// Todo (Babel 8): remove this file, in Babel 8 users import the .json directly +module.exports = require("./data/plugin-bugfixes.json"); diff --git a/node_modules/@babel/compat-data/plugins.js b/node_modules/@babel/compat-data/plugins.js new file mode 100644 index 00000000..b191017b --- /dev/null +++ b/node_modules/@babel/compat-data/plugins.js @@ -0,0 +1,2 @@ +// Todo (Babel 8): remove this file, in Babel 8 users import the .json directly +module.exports = require("./data/plugins.json"); diff --git a/node_modules/@babel/core/LICENSE b/node_modules/@babel/core/LICENSE new file mode 100644 index 00000000..f31575ec --- /dev/null +++ b/node_modules/@babel/core/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2014-present Sebastian McKenzie 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/@babel/core/README.md b/node_modules/@babel/core/README.md new file mode 100644 index 00000000..29035434 --- /dev/null +++ b/node_modules/@babel/core/README.md @@ -0,0 +1,19 @@ +# @babel/core + +> Babel compiler core. + +See our website [@babel/core](https://babeljs.io/docs/babel-core) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20core%22+is%3Aopen) associated with this package. + +## Install + +Using npm: + +```sh +npm install --save-dev @babel/core +``` + +or using yarn: + +```sh +yarn add @babel/core --dev +``` diff --git a/node_modules/@babel/core/lib/config/cache-contexts.js b/node_modules/@babel/core/lib/config/cache-contexts.js new file mode 100644 index 00000000..d7c09127 --- /dev/null +++ b/node_modules/@babel/core/lib/config/cache-contexts.js @@ -0,0 +1,3 @@ +0 && 0; + +//# sourceMappingURL=cache-contexts.js.map diff --git a/node_modules/@babel/core/lib/config/cache-contexts.js.map b/node_modules/@babel/core/lib/config/cache-contexts.js.map new file mode 100644 index 00000000..9fa85d56 --- /dev/null +++ b/node_modules/@babel/core/lib/config/cache-contexts.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"sources":["../../src/config/cache-contexts.ts"],"sourcesContent":["import type { Targets } from \"@babel/helper-compilation-targets\";\n\nimport type { ConfigContext } from \"./config-chain.ts\";\nimport type { CallerMetadata } from \"./validation/options.ts\";\n\nexport type { ConfigContext as FullConfig };\n\nexport type FullPreset = {\n targets: Targets;\n} & ConfigContext;\nexport type FullPlugin = {\n assumptions: { [name: string]: boolean };\n} & FullPreset;\n\n// Context not including filename since it is used in places that cannot\n// process 'ignore'/'only' and other filename-based logic.\nexport type SimpleConfig = {\n envName: string;\n caller: CallerMetadata | undefined;\n};\nexport type SimplePreset = {\n targets: Targets;\n} & SimpleConfig;\nexport type SimplePlugin = {\n assumptions: {\n [name: string]: boolean;\n };\n} & SimplePreset;\n"],"mappings":"","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/caching.js b/node_modules/@babel/core/lib/config/caching.js new file mode 100644 index 00000000..344c8390 --- /dev/null +++ b/node_modules/@babel/core/lib/config/caching.js @@ -0,0 +1,261 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.assertSimpleType = assertSimpleType; +exports.makeStrongCache = makeStrongCache; +exports.makeStrongCacheSync = makeStrongCacheSync; +exports.makeWeakCache = makeWeakCache; +exports.makeWeakCacheSync = makeWeakCacheSync; +function _gensync() { + const data = require("gensync"); + _gensync = function () { + return data; + }; + return data; +} +var _async = require("../gensync-utils/async.js"); +var _util = require("./util.js"); +const synchronize = gen => { + return _gensync()(gen).sync; +}; +function* genTrue() { + return true; +} +function makeWeakCache(handler) { + return makeCachedFunction(WeakMap, handler); +} +function makeWeakCacheSync(handler) { + return synchronize(makeWeakCache(handler)); +} +function makeStrongCache(handler) { + return makeCachedFunction(Map, handler); +} +function makeStrongCacheSync(handler) { + return synchronize(makeStrongCache(handler)); +} +function makeCachedFunction(CallCache, handler) { + const callCacheSync = new CallCache(); + const callCacheAsync = new CallCache(); + const futureCache = new CallCache(); + return function* cachedFunction(arg, data) { + const asyncContext = yield* (0, _async.isAsync)(); + const callCache = asyncContext ? callCacheAsync : callCacheSync; + const cached = yield* getCachedValueOrWait(asyncContext, callCache, futureCache, arg, data); + if (cached.valid) return cached.value; + const cache = new CacheConfigurator(data); + const handlerResult = handler(arg, cache); + let finishLock; + let value; + if ((0, _util.isIterableIterator)(handlerResult)) { + value = yield* (0, _async.onFirstPause)(handlerResult, () => { + finishLock = setupAsyncLocks(cache, futureCache, arg); + }); + } else { + value = handlerResult; + } + updateFunctionCache(callCache, cache, arg, value); + if (finishLock) { + futureCache.delete(arg); + finishLock.release(value); + } + return value; + }; +} +function* getCachedValue(cache, arg, data) { + const cachedValue = cache.get(arg); + if (cachedValue) { + for (const { + value, + valid + } of cachedValue) { + if (yield* valid(data)) return { + valid: true, + value + }; + } + } + return { + valid: false, + value: null + }; +} +function* getCachedValueOrWait(asyncContext, callCache, futureCache, arg, data) { + const cached = yield* getCachedValue(callCache, arg, data); + if (cached.valid) { + return cached; + } + if (asyncContext) { + const cached = yield* getCachedValue(futureCache, arg, data); + if (cached.valid) { + const value = yield* (0, _async.waitFor)(cached.value.promise); + return { + valid: true, + value + }; + } + } + return { + valid: false, + value: null + }; +} +function setupAsyncLocks(config, futureCache, arg) { + const finishLock = new Lock(); + updateFunctionCache(futureCache, config, arg, finishLock); + return finishLock; +} +function updateFunctionCache(cache, config, arg, value) { + if (!config.configured()) config.forever(); + let cachedValue = cache.get(arg); + config.deactivate(); + switch (config.mode()) { + case "forever": + cachedValue = [{ + value, + valid: genTrue + }]; + cache.set(arg, cachedValue); + break; + case "invalidate": + cachedValue = [{ + value, + valid: config.validator() + }]; + cache.set(arg, cachedValue); + break; + case "valid": + if (cachedValue) { + cachedValue.push({ + value, + valid: config.validator() + }); + } else { + cachedValue = [{ + value, + valid: config.validator() + }]; + cache.set(arg, cachedValue); + } + } +} +class CacheConfigurator { + constructor(data) { + this._active = true; + this._never = false; + this._forever = false; + this._invalidate = false; + this._configured = false; + this._pairs = []; + this._data = void 0; + this._data = data; + } + simple() { + return makeSimpleConfigurator(this); + } + mode() { + if (this._never) return "never"; + if (this._forever) return "forever"; + if (this._invalidate) return "invalidate"; + return "valid"; + } + forever() { + if (!this._active) { + throw new Error("Cannot change caching after evaluation has completed."); + } + if (this._never) { + throw new Error("Caching has already been configured with .never()"); + } + this._forever = true; + this._configured = true; + } + never() { + if (!this._active) { + throw new Error("Cannot change caching after evaluation has completed."); + } + if (this._forever) { + throw new Error("Caching has already been configured with .forever()"); + } + this._never = true; + this._configured = true; + } + using(handler) { + if (!this._active) { + throw new Error("Cannot change caching after evaluation has completed."); + } + if (this._never || this._forever) { + throw new Error("Caching has already been configured with .never or .forever()"); + } + this._configured = true; + const key = handler(this._data); + const fn = (0, _async.maybeAsync)(handler, `You appear to be using an async cache handler, but Babel has been called synchronously`); + if ((0, _async.isThenable)(key)) { + return key.then(key => { + this._pairs.push([key, fn]); + return key; + }); + } + this._pairs.push([key, fn]); + return key; + } + invalidate(handler) { + this._invalidate = true; + return this.using(handler); + } + validator() { + const pairs = this._pairs; + return function* (data) { + for (const [key, fn] of pairs) { + if (key !== (yield* fn(data))) return false; + } + return true; + }; + } + deactivate() { + this._active = false; + } + configured() { + return this._configured; + } +} +function makeSimpleConfigurator(cache) { + function cacheFn(val) { + if (typeof val === "boolean") { + if (val) cache.forever();else cache.never(); + return; + } + return cache.using(() => assertSimpleType(val())); + } + cacheFn.forever = () => cache.forever(); + cacheFn.never = () => cache.never(); + cacheFn.using = cb => cache.using(() => assertSimpleType(cb())); + cacheFn.invalidate = cb => cache.invalidate(() => assertSimpleType(cb())); + return cacheFn; +} +function assertSimpleType(value) { + if ((0, _async.isThenable)(value)) { + throw new Error(`You appear to be using an async cache handler, ` + `which your current version of Babel does not support. ` + `We may add support for this in the future, ` + `but if you're on the most recent version of @babel/core and still ` + `seeing this error, then you'll need to synchronously handle your caching logic.`); + } + if (value != null && typeof value !== "string" && typeof value !== "boolean" && typeof value !== "number") { + throw new Error("Cache keys must be either string, boolean, number, null, or undefined."); + } + return value; +} +class Lock { + constructor() { + this.released = false; + this.promise = void 0; + this._resolve = void 0; + this.promise = new Promise(resolve => { + this._resolve = resolve; + }); + } + release(value) { + this.released = true; + this._resolve(value); + } +} +0 && 0; + +//# sourceMappingURL=caching.js.map diff --git a/node_modules/@babel/core/lib/config/caching.js.map b/node_modules/@babel/core/lib/config/caching.js.map new file mode 100644 index 00000000..174ac861 --- /dev/null +++ b/node_modules/@babel/core/lib/config/caching.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_gensync","data","require","_async","_util","synchronize","gen","gensync","sync","genTrue","makeWeakCache","handler","makeCachedFunction","WeakMap","makeWeakCacheSync","makeStrongCache","Map","makeStrongCacheSync","CallCache","callCacheSync","callCacheAsync","futureCache","cachedFunction","arg","asyncContext","isAsync","callCache","cached","getCachedValueOrWait","valid","value","cache","CacheConfigurator","handlerResult","finishLock","isIterableIterator","onFirstPause","setupAsyncLocks","updateFunctionCache","delete","release","getCachedValue","cachedValue","get","waitFor","promise","config","Lock","configured","forever","deactivate","mode","set","validator","push","constructor","_active","_never","_forever","_invalidate","_configured","_pairs","_data","simple","makeSimpleConfigurator","Error","never","using","key","fn","maybeAsync","isThenable","then","invalidate","pairs","cacheFn","val","assertSimpleType","cb","released","_resolve","Promise","resolve"],"sources":["../../src/config/caching.ts"],"sourcesContent":["import gensync from \"gensync\";\nimport type { Handler } from \"gensync\";\nimport {\n maybeAsync,\n isAsync,\n onFirstPause,\n waitFor,\n isThenable,\n} from \"../gensync-utils/async.ts\";\nimport { isIterableIterator } from \"./util.ts\";\n\nexport type { CacheConfigurator };\n\nexport type SimpleCacheConfigurator = {\n (forever: boolean): void;\n (handler: () => T): T;\n\n forever: () => void;\n never: () => void;\n using: (handler: () => T) => T;\n invalidate: (handler: () => T) => T;\n};\n\nexport type CacheEntry = Array<{\n value: ResultT;\n valid: (channel: SideChannel) => Handler;\n}>;\n\nconst synchronize = (\n gen: (...args: ArgsT) => Handler,\n): ((...args: ArgsT) => ResultT) => {\n return gensync(gen).sync;\n};\n\n// eslint-disable-next-line require-yield\nfunction* genTrue() {\n return true;\n}\n\nexport function makeWeakCache(\n handler: (\n arg: ArgT,\n cache: CacheConfigurator,\n ) => Handler | ResultT,\n): (arg: ArgT, data: SideChannel) => Handler {\n return makeCachedFunction(WeakMap, handler);\n}\n\nexport function makeWeakCacheSync(\n handler: (arg: ArgT, cache?: CacheConfigurator) => ResultT,\n): (arg: ArgT, data?: SideChannel) => ResultT {\n return synchronize<[ArgT, SideChannel], ResultT>(\n makeWeakCache(handler),\n );\n}\n\nexport function makeStrongCache(\n handler: (\n arg: ArgT,\n cache: CacheConfigurator,\n ) => Handler | ResultT,\n): (arg: ArgT, data: SideChannel) => Handler {\n return makeCachedFunction(Map, handler);\n}\n\nexport function makeStrongCacheSync(\n handler: (arg: ArgT, cache?: CacheConfigurator) => ResultT,\n): (arg: ArgT, data?: SideChannel) => ResultT {\n return synchronize<[ArgT, SideChannel], ResultT>(\n makeStrongCache(handler),\n );\n}\n\n/* NOTE: Part of the logic explained in this comment is explained in the\n * getCachedValueOrWait and setupAsyncLocks functions.\n *\n * > There are only two hard things in Computer Science: cache invalidation and naming things.\n * > -- Phil Karlton\n *\n * I don't know if Phil was also thinking about handling a cache whose invalidation function is\n * defined asynchronously is considered, but it is REALLY hard to do correctly.\n *\n * The implemented logic (only when gensync is run asynchronously) is the following:\n * 1. If there is a valid cache associated to the current \"arg\" parameter,\n * a. RETURN the cached value\n * 3. If there is a FinishLock associated to the current \"arg\" parameter representing a valid cache,\n * a. Wait for that lock to be released\n * b. RETURN the value associated with that lock\n * 5. Start executing the function to be cached\n * a. If it pauses on a promise, then\n * i. Let FinishLock be a new lock\n * ii. Store FinishLock as associated to the current \"arg\" parameter\n * iii. Wait for the function to finish executing\n * iv. Release FinishLock\n * v. Send the function result to anyone waiting on FinishLock\n * 6. Store the result in the cache\n * 7. RETURN the result\n */\nfunction makeCachedFunction(\n CallCache: new () => CacheMap,\n handler: (\n arg: ArgT,\n cache: CacheConfigurator,\n ) => Handler | ResultT,\n): (arg: ArgT, data: SideChannel) => Handler {\n const callCacheSync = new CallCache();\n const callCacheAsync = new CallCache();\n const futureCache = new CallCache>();\n\n return function* cachedFunction(arg: ArgT, data: SideChannel) {\n const asyncContext = yield* isAsync();\n const callCache = asyncContext ? callCacheAsync : callCacheSync;\n\n const cached = yield* getCachedValueOrWait(\n asyncContext,\n callCache,\n futureCache,\n arg,\n data,\n );\n if (cached.valid) return cached.value;\n\n const cache = new CacheConfigurator(data);\n\n const handlerResult: Handler | ResultT = handler(arg, cache);\n\n let finishLock: Lock;\n let value: ResultT;\n\n if (isIterableIterator(handlerResult)) {\n value = yield* onFirstPause(handlerResult, () => {\n finishLock = setupAsyncLocks(cache, futureCache, arg);\n });\n } else {\n value = handlerResult;\n }\n\n updateFunctionCache(callCache, cache, arg, value);\n\n if (finishLock) {\n futureCache.delete(arg);\n finishLock.release(value);\n }\n\n return value;\n };\n}\n\ntype CacheMap =\n | Map>\n // @ts-expect-error todo(flow->ts): add `extends object` constraint to ArgT\n | WeakMap>;\n\nfunction* getCachedValue(\n cache: CacheMap,\n arg: ArgT,\n data: SideChannel,\n): Handler<{ valid: true; value: ResultT } | { valid: false; value: null }> {\n const cachedValue: CacheEntry | void = cache.get(arg);\n\n if (cachedValue) {\n for (const { value, valid } of cachedValue) {\n if (yield* valid(data)) return { valid: true, value };\n }\n }\n\n return { valid: false, value: null };\n}\n\nfunction* getCachedValueOrWait(\n asyncContext: boolean,\n callCache: CacheMap,\n futureCache: CacheMap, SideChannel>,\n arg: ArgT,\n data: SideChannel,\n): Handler<{ valid: true; value: ResultT } | { valid: false; value: null }> {\n const cached = yield* getCachedValue(callCache, arg, data);\n if (cached.valid) {\n return cached;\n }\n\n if (asyncContext) {\n const cached = yield* getCachedValue(futureCache, arg, data);\n if (cached.valid) {\n const value = yield* waitFor(cached.value.promise);\n return { valid: true, value };\n }\n }\n\n return { valid: false, value: null };\n}\n\nfunction setupAsyncLocks(\n config: CacheConfigurator,\n futureCache: CacheMap, SideChannel>,\n arg: ArgT,\n): Lock {\n const finishLock = new Lock();\n\n updateFunctionCache(futureCache, config, arg, finishLock);\n\n return finishLock;\n}\n\nfunction updateFunctionCache<\n ArgT,\n ResultT,\n SideChannel,\n Cache extends CacheMap,\n>(\n cache: Cache,\n config: CacheConfigurator,\n arg: ArgT,\n value: ResultT,\n) {\n if (!config.configured()) config.forever();\n\n let cachedValue: CacheEntry | void = cache.get(arg);\n\n config.deactivate();\n\n switch (config.mode()) {\n case \"forever\":\n cachedValue = [{ value, valid: genTrue }];\n cache.set(arg, cachedValue);\n break;\n case \"invalidate\":\n cachedValue = [{ value, valid: config.validator() }];\n cache.set(arg, cachedValue);\n break;\n case \"valid\":\n if (cachedValue) {\n cachedValue.push({ value, valid: config.validator() });\n } else {\n cachedValue = [{ value, valid: config.validator() }];\n cache.set(arg, cachedValue);\n }\n }\n}\n\nclass CacheConfigurator {\n _active: boolean = true;\n _never: boolean = false;\n _forever: boolean = false;\n _invalidate: boolean = false;\n\n _configured: boolean = false;\n\n _pairs: Array<\n [cachedValue: unknown, handler: (data: SideChannel) => Handler]\n > = [];\n\n _data: SideChannel;\n\n constructor(data: SideChannel) {\n this._data = data;\n }\n\n simple() {\n return makeSimpleConfigurator(this);\n }\n\n mode() {\n if (this._never) return \"never\";\n if (this._forever) return \"forever\";\n if (this._invalidate) return \"invalidate\";\n return \"valid\";\n }\n\n forever() {\n if (!this._active) {\n throw new Error(\"Cannot change caching after evaluation has completed.\");\n }\n if (this._never) {\n throw new Error(\"Caching has already been configured with .never()\");\n }\n this._forever = true;\n this._configured = true;\n }\n\n never() {\n if (!this._active) {\n throw new Error(\"Cannot change caching after evaluation has completed.\");\n }\n if (this._forever) {\n throw new Error(\"Caching has already been configured with .forever()\");\n }\n this._never = true;\n this._configured = true;\n }\n\n using(handler: (data: SideChannel) => T): T {\n if (!this._active) {\n throw new Error(\"Cannot change caching after evaluation has completed.\");\n }\n if (this._never || this._forever) {\n throw new Error(\n \"Caching has already been configured with .never or .forever()\",\n );\n }\n this._configured = true;\n\n const key = handler(this._data);\n\n const fn = maybeAsync(\n handler,\n `You appear to be using an async cache handler, but Babel has been called synchronously`,\n );\n\n if (isThenable(key)) {\n // @ts-expect-error todo(flow->ts): improve function return type annotation\n return key.then((key: unknown) => {\n this._pairs.push([key, fn]);\n return key;\n });\n }\n\n this._pairs.push([key, fn]);\n return key;\n }\n\n invalidate(handler: (data: SideChannel) => T): T {\n this._invalidate = true;\n return this.using(handler);\n }\n\n validator(): (data: SideChannel) => Handler {\n const pairs = this._pairs;\n return function* (data: SideChannel) {\n for (const [key, fn] of pairs) {\n if (key !== (yield* fn(data))) return false;\n }\n return true;\n };\n }\n\n deactivate() {\n this._active = false;\n }\n\n configured() {\n return this._configured;\n }\n}\n\nfunction makeSimpleConfigurator(\n cache: CacheConfigurator,\n): SimpleCacheConfigurator {\n function cacheFn(val: any) {\n if (typeof val === \"boolean\") {\n if (val) cache.forever();\n else cache.never();\n return;\n }\n\n return cache.using(() => assertSimpleType(val()));\n }\n cacheFn.forever = () => cache.forever();\n cacheFn.never = () => cache.never();\n cacheFn.using = (cb: () => SimpleType) =>\n cache.using(() => assertSimpleType(cb()));\n cacheFn.invalidate = (cb: () => SimpleType) =>\n cache.invalidate(() => assertSimpleType(cb()));\n\n return cacheFn as any;\n}\n\n// Types are limited here so that in the future these values can be used\n// as part of Babel's caching logic.\nexport type SimpleType =\n | string\n | boolean\n | number\n | null\n | void\n | Promise;\nexport function assertSimpleType(value: unknown): SimpleType {\n if (isThenable(value)) {\n throw new Error(\n `You appear to be using an async cache handler, ` +\n `which your current version of Babel does not support. ` +\n `We may add support for this in the future, ` +\n `but if you're on the most recent version of @babel/core and still ` +\n `seeing this error, then you'll need to synchronously handle your caching logic.`,\n );\n }\n\n if (\n value != null &&\n typeof value !== \"string\" &&\n typeof value !== \"boolean\" &&\n typeof value !== \"number\"\n ) {\n throw new Error(\n \"Cache keys must be either string, boolean, number, null, or undefined.\",\n );\n }\n // @ts-expect-error Type 'unknown' is not assignable to type 'SimpleType'. This can be removed\n // when strictNullCheck is enabled\n return value;\n}\n\nclass Lock {\n released: boolean = false;\n promise: Promise;\n _resolve: (value: T) => void;\n\n constructor() {\n this.promise = new Promise(resolve => {\n this._resolve = resolve;\n });\n }\n\n release(value: T) {\n this.released = true;\n this._resolve(value);\n }\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/config-chain.js b/node_modules/@babel/core/lib/config/config-chain.js new file mode 100644 index 00000000..591de0c9 --- /dev/null +++ b/node_modules/@babel/core/lib/config/config-chain.js @@ -0,0 +1,469 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.buildPresetChain = buildPresetChain; +exports.buildPresetChainWalker = void 0; +exports.buildRootChain = buildRootChain; +function _path() { + const data = require("path"); + _path = function () { + return data; + }; + return data; +} +function _debug() { + const data = require("debug"); + _debug = function () { + return data; + }; + return data; +} +var _options = require("./validation/options.js"); +var _patternToRegex = require("./pattern-to-regex.js"); +var _printer = require("./printer.js"); +var _rewriteStackTrace = require("../errors/rewrite-stack-trace.js"); +var _configError = require("../errors/config-error.js"); +var _index = require("./files/index.js"); +var _caching = require("./caching.js"); +var _configDescriptors = require("./config-descriptors.js"); +const debug = _debug()("babel:config:config-chain"); +function* buildPresetChain(arg, context) { + const chain = yield* buildPresetChainWalker(arg, context); + if (!chain) return null; + return { + plugins: dedupDescriptors(chain.plugins), + presets: dedupDescriptors(chain.presets), + options: chain.options.map(o => normalizeOptions(o)), + files: new Set() + }; +} +const buildPresetChainWalker = exports.buildPresetChainWalker = makeChainWalker({ + root: preset => loadPresetDescriptors(preset), + env: (preset, envName) => loadPresetEnvDescriptors(preset)(envName), + overrides: (preset, index) => loadPresetOverridesDescriptors(preset)(index), + overridesEnv: (preset, index, envName) => loadPresetOverridesEnvDescriptors(preset)(index)(envName), + createLogger: () => () => {} +}); +const loadPresetDescriptors = (0, _caching.makeWeakCacheSync)(preset => buildRootDescriptors(preset, preset.alias, _configDescriptors.createUncachedDescriptors)); +const loadPresetEnvDescriptors = (0, _caching.makeWeakCacheSync)(preset => (0, _caching.makeStrongCacheSync)(envName => buildEnvDescriptors(preset, preset.alias, _configDescriptors.createUncachedDescriptors, envName))); +const loadPresetOverridesDescriptors = (0, _caching.makeWeakCacheSync)(preset => (0, _caching.makeStrongCacheSync)(index => buildOverrideDescriptors(preset, preset.alias, _configDescriptors.createUncachedDescriptors, index))); +const loadPresetOverridesEnvDescriptors = (0, _caching.makeWeakCacheSync)(preset => (0, _caching.makeStrongCacheSync)(index => (0, _caching.makeStrongCacheSync)(envName => buildOverrideEnvDescriptors(preset, preset.alias, _configDescriptors.createUncachedDescriptors, index, envName)))); +function* buildRootChain(opts, context) { + let configReport, babelRcReport; + const programmaticLogger = new _printer.ConfigPrinter(); + const programmaticChain = yield* loadProgrammaticChain({ + options: opts, + dirname: context.cwd + }, context, undefined, programmaticLogger); + if (!programmaticChain) return null; + const programmaticReport = yield* programmaticLogger.output(); + let configFile; + if (typeof opts.configFile === "string") { + configFile = yield* (0, _index.loadConfig)(opts.configFile, context.cwd, context.envName, context.caller); + } else if (opts.configFile !== false) { + configFile = yield* (0, _index.findRootConfig)(context.root, context.envName, context.caller); + } + let { + babelrc, + babelrcRoots + } = opts; + let babelrcRootsDirectory = context.cwd; + const configFileChain = emptyChain(); + const configFileLogger = new _printer.ConfigPrinter(); + if (configFile) { + const validatedFile = validateConfigFile(configFile); + const result = yield* loadFileChain(validatedFile, context, undefined, configFileLogger); + if (!result) return null; + configReport = yield* configFileLogger.output(); + if (babelrc === undefined) { + babelrc = validatedFile.options.babelrc; + } + if (babelrcRoots === undefined) { + babelrcRootsDirectory = validatedFile.dirname; + babelrcRoots = validatedFile.options.babelrcRoots; + } + mergeChain(configFileChain, result); + } + let ignoreFile, babelrcFile; + let isIgnored = false; + const fileChain = emptyChain(); + if ((babelrc === true || babelrc === undefined) && typeof context.filename === "string") { + const pkgData = yield* (0, _index.findPackageData)(context.filename); + if (pkgData && babelrcLoadEnabled(context, pkgData, babelrcRoots, babelrcRootsDirectory)) { + ({ + ignore: ignoreFile, + config: babelrcFile + } = yield* (0, _index.findRelativeConfig)(pkgData, context.envName, context.caller)); + if (ignoreFile) { + fileChain.files.add(ignoreFile.filepath); + } + if (ignoreFile && shouldIgnore(context, ignoreFile.ignore, null, ignoreFile.dirname)) { + isIgnored = true; + } + if (babelrcFile && !isIgnored) { + const validatedFile = validateBabelrcFile(babelrcFile); + const babelrcLogger = new _printer.ConfigPrinter(); + const result = yield* loadFileChain(validatedFile, context, undefined, babelrcLogger); + if (!result) { + isIgnored = true; + } else { + babelRcReport = yield* babelrcLogger.output(); + mergeChain(fileChain, result); + } + } + if (babelrcFile && isIgnored) { + fileChain.files.add(babelrcFile.filepath); + } + } + } + if (context.showConfig) { + console.log(`Babel configs on "${context.filename}" (ascending priority):\n` + [configReport, babelRcReport, programmaticReport].filter(x => !!x).join("\n\n") + "\n-----End Babel configs-----"); + } + const chain = mergeChain(mergeChain(mergeChain(emptyChain(), configFileChain), fileChain), programmaticChain); + return { + plugins: isIgnored ? [] : dedupDescriptors(chain.plugins), + presets: isIgnored ? [] : dedupDescriptors(chain.presets), + options: isIgnored ? [] : chain.options.map(o => normalizeOptions(o)), + fileHandling: isIgnored ? "ignored" : "transpile", + ignore: ignoreFile || undefined, + babelrc: babelrcFile || undefined, + config: configFile || undefined, + files: chain.files + }; +} +function babelrcLoadEnabled(context, pkgData, babelrcRoots, babelrcRootsDirectory) { + if (typeof babelrcRoots === "boolean") return babelrcRoots; + const absoluteRoot = context.root; + if (babelrcRoots === undefined) { + return pkgData.directories.includes(absoluteRoot); + } + let babelrcPatterns = babelrcRoots; + if (!Array.isArray(babelrcPatterns)) { + babelrcPatterns = [babelrcPatterns]; + } + babelrcPatterns = babelrcPatterns.map(pat => { + return typeof pat === "string" ? _path().resolve(babelrcRootsDirectory, pat) : pat; + }); + if (babelrcPatterns.length === 1 && babelrcPatterns[0] === absoluteRoot) { + return pkgData.directories.includes(absoluteRoot); + } + return babelrcPatterns.some(pat => { + if (typeof pat === "string") { + pat = (0, _patternToRegex.default)(pat, babelrcRootsDirectory); + } + return pkgData.directories.some(directory => { + return matchPattern(pat, babelrcRootsDirectory, directory, context); + }); + }); +} +const validateConfigFile = (0, _caching.makeWeakCacheSync)(file => ({ + filepath: file.filepath, + dirname: file.dirname, + options: (0, _options.validate)("configfile", file.options, file.filepath) +})); +const validateBabelrcFile = (0, _caching.makeWeakCacheSync)(file => ({ + filepath: file.filepath, + dirname: file.dirname, + options: (0, _options.validate)("babelrcfile", file.options, file.filepath) +})); +const validateExtendFile = (0, _caching.makeWeakCacheSync)(file => ({ + filepath: file.filepath, + dirname: file.dirname, + options: (0, _options.validate)("extendsfile", file.options, file.filepath) +})); +const loadProgrammaticChain = makeChainWalker({ + root: input => buildRootDescriptors(input, "base", _configDescriptors.createCachedDescriptors), + env: (input, envName) => buildEnvDescriptors(input, "base", _configDescriptors.createCachedDescriptors, envName), + overrides: (input, index) => buildOverrideDescriptors(input, "base", _configDescriptors.createCachedDescriptors, index), + overridesEnv: (input, index, envName) => buildOverrideEnvDescriptors(input, "base", _configDescriptors.createCachedDescriptors, index, envName), + createLogger: (input, context, baseLogger) => buildProgrammaticLogger(input, context, baseLogger) +}); +const loadFileChainWalker = makeChainWalker({ + root: file => loadFileDescriptors(file), + env: (file, envName) => loadFileEnvDescriptors(file)(envName), + overrides: (file, index) => loadFileOverridesDescriptors(file)(index), + overridesEnv: (file, index, envName) => loadFileOverridesEnvDescriptors(file)(index)(envName), + createLogger: (file, context, baseLogger) => buildFileLogger(file.filepath, context, baseLogger) +}); +function* loadFileChain(input, context, files, baseLogger) { + const chain = yield* loadFileChainWalker(input, context, files, baseLogger); + chain == null || chain.files.add(input.filepath); + return chain; +} +const loadFileDescriptors = (0, _caching.makeWeakCacheSync)(file => buildRootDescriptors(file, file.filepath, _configDescriptors.createUncachedDescriptors)); +const loadFileEnvDescriptors = (0, _caching.makeWeakCacheSync)(file => (0, _caching.makeStrongCacheSync)(envName => buildEnvDescriptors(file, file.filepath, _configDescriptors.createUncachedDescriptors, envName))); +const loadFileOverridesDescriptors = (0, _caching.makeWeakCacheSync)(file => (0, _caching.makeStrongCacheSync)(index => buildOverrideDescriptors(file, file.filepath, _configDescriptors.createUncachedDescriptors, index))); +const loadFileOverridesEnvDescriptors = (0, _caching.makeWeakCacheSync)(file => (0, _caching.makeStrongCacheSync)(index => (0, _caching.makeStrongCacheSync)(envName => buildOverrideEnvDescriptors(file, file.filepath, _configDescriptors.createUncachedDescriptors, index, envName)))); +function buildFileLogger(filepath, context, baseLogger) { + if (!baseLogger) { + return () => {}; + } + return baseLogger.configure(context.showConfig, _printer.ChainFormatter.Config, { + filepath + }); +} +function buildRootDescriptors({ + dirname, + options +}, alias, descriptors) { + return descriptors(dirname, options, alias); +} +function buildProgrammaticLogger(_, context, baseLogger) { + var _context$caller; + if (!baseLogger) { + return () => {}; + } + return baseLogger.configure(context.showConfig, _printer.ChainFormatter.Programmatic, { + callerName: (_context$caller = context.caller) == null ? void 0 : _context$caller.name + }); +} +function buildEnvDescriptors({ + dirname, + options +}, alias, descriptors, envName) { + var _options$env; + const opts = (_options$env = options.env) == null ? void 0 : _options$env[envName]; + return opts ? descriptors(dirname, opts, `${alias}.env["${envName}"]`) : null; +} +function buildOverrideDescriptors({ + dirname, + options +}, alias, descriptors, index) { + var _options$overrides; + const opts = (_options$overrides = options.overrides) == null ? void 0 : _options$overrides[index]; + if (!opts) throw new Error("Assertion failure - missing override"); + return descriptors(dirname, opts, `${alias}.overrides[${index}]`); +} +function buildOverrideEnvDescriptors({ + dirname, + options +}, alias, descriptors, index, envName) { + var _options$overrides2, _override$env; + const override = (_options$overrides2 = options.overrides) == null ? void 0 : _options$overrides2[index]; + if (!override) throw new Error("Assertion failure - missing override"); + const opts = (_override$env = override.env) == null ? void 0 : _override$env[envName]; + return opts ? descriptors(dirname, opts, `${alias}.overrides[${index}].env["${envName}"]`) : null; +} +function makeChainWalker({ + root, + env, + overrides, + overridesEnv, + createLogger +}) { + return function* chainWalker(input, context, files = new Set(), baseLogger) { + const { + dirname + } = input; + const flattenedConfigs = []; + const rootOpts = root(input); + if (configIsApplicable(rootOpts, dirname, context, input.filepath)) { + flattenedConfigs.push({ + config: rootOpts, + envName: undefined, + index: undefined + }); + const envOpts = env(input, context.envName); + if (envOpts && configIsApplicable(envOpts, dirname, context, input.filepath)) { + flattenedConfigs.push({ + config: envOpts, + envName: context.envName, + index: undefined + }); + } + (rootOpts.options.overrides || []).forEach((_, index) => { + const overrideOps = overrides(input, index); + if (configIsApplicable(overrideOps, dirname, context, input.filepath)) { + flattenedConfigs.push({ + config: overrideOps, + index, + envName: undefined + }); + const overrideEnvOpts = overridesEnv(input, index, context.envName); + if (overrideEnvOpts && configIsApplicable(overrideEnvOpts, dirname, context, input.filepath)) { + flattenedConfigs.push({ + config: overrideEnvOpts, + index, + envName: context.envName + }); + } + } + }); + } + if (flattenedConfigs.some(({ + config: { + options: { + ignore, + only + } + } + }) => shouldIgnore(context, ignore, only, dirname))) { + return null; + } + const chain = emptyChain(); + const logger = createLogger(input, context, baseLogger); + for (const { + config, + index, + envName + } of flattenedConfigs) { + if (!(yield* mergeExtendsChain(chain, config.options, dirname, context, files, baseLogger))) { + return null; + } + logger(config, index, envName); + yield* mergeChainOpts(chain, config); + } + return chain; + }; +} +function* mergeExtendsChain(chain, opts, dirname, context, files, baseLogger) { + if (opts.extends === undefined) return true; + const file = yield* (0, _index.loadConfig)(opts.extends, dirname, context.envName, context.caller); + if (files.has(file)) { + throw new Error(`Configuration cycle detected loading ${file.filepath}.\n` + `File already loaded following the config chain:\n` + Array.from(files, file => ` - ${file.filepath}`).join("\n")); + } + files.add(file); + const fileChain = yield* loadFileChain(validateExtendFile(file), context, files, baseLogger); + files.delete(file); + if (!fileChain) return false; + mergeChain(chain, fileChain); + return true; +} +function mergeChain(target, source) { + target.options.push(...source.options); + target.plugins.push(...source.plugins); + target.presets.push(...source.presets); + for (const file of source.files) { + target.files.add(file); + } + return target; +} +function* mergeChainOpts(target, { + options, + plugins, + presets +}) { + target.options.push(options); + target.plugins.push(...(yield* plugins())); + target.presets.push(...(yield* presets())); + return target; +} +function emptyChain() { + return { + options: [], + presets: [], + plugins: [], + files: new Set() + }; +} +function normalizeOptions(opts) { + const options = Object.assign({}, opts); + delete options.extends; + delete options.env; + delete options.overrides; + delete options.plugins; + delete options.presets; + delete options.passPerPreset; + delete options.ignore; + delete options.only; + delete options.test; + delete options.include; + delete options.exclude; + if (hasOwnProperty.call(options, "sourceMap")) { + options.sourceMaps = options.sourceMap; + delete options.sourceMap; + } + return options; +} +function dedupDescriptors(items) { + const map = new Map(); + const descriptors = []; + for (const item of items) { + if (typeof item.value === "function") { + const fnKey = item.value; + let nameMap = map.get(fnKey); + if (!nameMap) { + nameMap = new Map(); + map.set(fnKey, nameMap); + } + let desc = nameMap.get(item.name); + if (!desc) { + desc = { + value: item + }; + descriptors.push(desc); + if (!item.ownPass) nameMap.set(item.name, desc); + } else { + desc.value = item; + } + } else { + descriptors.push({ + value: item + }); + } + } + return descriptors.reduce((acc, desc) => { + acc.push(desc.value); + return acc; + }, []); +} +function configIsApplicable({ + options +}, dirname, context, configName) { + return (options.test === undefined || configFieldIsApplicable(context, options.test, dirname, configName)) && (options.include === undefined || configFieldIsApplicable(context, options.include, dirname, configName)) && (options.exclude === undefined || !configFieldIsApplicable(context, options.exclude, dirname, configName)); +} +function configFieldIsApplicable(context, test, dirname, configName) { + const patterns = Array.isArray(test) ? test : [test]; + return matchesPatterns(context, patterns, dirname, configName); +} +function ignoreListReplacer(_key, value) { + if (value instanceof RegExp) { + return String(value); + } + return value; +} +function shouldIgnore(context, ignore, only, dirname) { + if (ignore && matchesPatterns(context, ignore, dirname)) { + var _context$filename; + const message = `No config is applied to "${(_context$filename = context.filename) != null ? _context$filename : "(unknown)"}" because it matches one of \`ignore: ${JSON.stringify(ignore, ignoreListReplacer)}\` from "${dirname}"`; + debug(message); + if (context.showConfig) { + console.log(message); + } + return true; + } + if (only && !matchesPatterns(context, only, dirname)) { + var _context$filename2; + const message = `No config is applied to "${(_context$filename2 = context.filename) != null ? _context$filename2 : "(unknown)"}" because it fails to match one of \`only: ${JSON.stringify(only, ignoreListReplacer)}\` from "${dirname}"`; + debug(message); + if (context.showConfig) { + console.log(message); + } + return true; + } + return false; +} +function matchesPatterns(context, patterns, dirname, configName) { + return patterns.some(pattern => matchPattern(pattern, dirname, context.filename, context, configName)); +} +function matchPattern(pattern, dirname, pathToTest, context, configName) { + if (typeof pattern === "function") { + return !!(0, _rewriteStackTrace.endHiddenCallStack)(pattern)(pathToTest, { + dirname, + envName: context.envName, + caller: context.caller + }); + } + if (typeof pathToTest !== "string") { + throw new _configError.default(`Configuration contains string/RegExp pattern, but no filename was passed to Babel`, configName); + } + if (typeof pattern === "string") { + pattern = (0, _patternToRegex.default)(pattern, dirname); + } + return pattern.test(pathToTest); +} +0 && 0; + +//# sourceMappingURL=config-chain.js.map diff --git a/node_modules/@babel/core/lib/config/config-chain.js.map b/node_modules/@babel/core/lib/config/config-chain.js.map new file mode 100644 index 00000000..c0b50bc5 --- /dev/null +++ b/node_modules/@babel/core/lib/config/config-chain.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_path","data","require","_debug","_options","_patternToRegex","_printer","_rewriteStackTrace","_configError","_index","_caching","_configDescriptors","debug","buildDebug","buildPresetChain","arg","context","chain","buildPresetChainWalker","plugins","dedupDescriptors","presets","options","map","o","normalizeOptions","files","Set","exports","makeChainWalker","root","preset","loadPresetDescriptors","env","envName","loadPresetEnvDescriptors","overrides","index","loadPresetOverridesDescriptors","overridesEnv","loadPresetOverridesEnvDescriptors","createLogger","makeWeakCacheSync","buildRootDescriptors","alias","createUncachedDescriptors","makeStrongCacheSync","buildEnvDescriptors","buildOverrideDescriptors","buildOverrideEnvDescriptors","buildRootChain","opts","configReport","babelRcReport","programmaticLogger","ConfigPrinter","programmaticChain","loadProgrammaticChain","dirname","cwd","undefined","programmaticReport","output","configFile","loadConfig","caller","findRootConfig","babelrc","babelrcRoots","babelrcRootsDirectory","configFileChain","emptyChain","configFileLogger","validatedFile","validateConfigFile","result","loadFileChain","mergeChain","ignoreFile","babelrcFile","isIgnored","fileChain","filename","pkgData","findPackageData","babelrcLoadEnabled","ignore","config","findRelativeConfig","add","filepath","shouldIgnore","validateBabelrcFile","babelrcLogger","showConfig","console","log","filter","x","join","fileHandling","absoluteRoot","directories","includes","babelrcPatterns","Array","isArray","pat","path","resolve","length","some","pathPatternToRegex","directory","matchPattern","file","validate","validateExtendFile","input","createCachedDescriptors","baseLogger","buildProgrammaticLogger","loadFileChainWalker","loadFileDescriptors","loadFileEnvDescriptors","loadFileOverridesDescriptors","loadFileOverridesEnvDescriptors","buildFileLogger","configure","ChainFormatter","Config","descriptors","_","_context$caller","Programmatic","callerName","name","_options$env","_options$overrides","Error","_options$overrides2","_override$env","override","chainWalker","flattenedConfigs","rootOpts","configIsApplicable","push","envOpts","forEach","overrideOps","overrideEnvOpts","only","logger","mergeExtendsChain","mergeChainOpts","extends","has","from","delete","target","source","Object","assign","passPerPreset","test","include","exclude","hasOwnProperty","call","sourceMaps","sourceMap","items","Map","item","value","fnKey","nameMap","get","set","desc","ownPass","reduce","acc","configName","configFieldIsApplicable","patterns","matchesPatterns","ignoreListReplacer","_key","RegExp","String","_context$filename","message","JSON","stringify","_context$filename2","pattern","pathToTest","endHiddenCallStack","ConfigError"],"sources":["../../src/config/config-chain.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\n\nimport path from \"node:path\";\nimport buildDebug from \"debug\";\nimport type { Handler } from \"gensync\";\nimport { validate } from \"./validation/options.ts\";\nimport type {\n ValidatedOptions,\n IgnoreList,\n ConfigApplicableTest,\n BabelrcSearch,\n CallerMetadata,\n IgnoreItem,\n} from \"./validation/options.ts\";\nimport pathPatternToRegex from \"./pattern-to-regex.ts\";\nimport { ConfigPrinter, ChainFormatter } from \"./printer.ts\";\nimport type { ReadonlyDeepArray } from \"./helpers/deep-array.ts\";\n\nimport { endHiddenCallStack } from \"../errors/rewrite-stack-trace.ts\";\nimport ConfigError from \"../errors/config-error.ts\";\nimport type { PluginAPI, PresetAPI } from \"./helpers/config-api.ts\";\n\nconst debug = buildDebug(\"babel:config:config-chain\");\n\nimport {\n findPackageData,\n findRelativeConfig,\n findRootConfig,\n loadConfig,\n} from \"./files/index.ts\";\nimport type { ConfigFile, IgnoreFile, FilePackageData } from \"./files/index.ts\";\n\nimport { makeWeakCacheSync, makeStrongCacheSync } from \"./caching.ts\";\n\nimport {\n createCachedDescriptors,\n createUncachedDescriptors,\n} from \"./config-descriptors.ts\";\nimport type {\n UnloadedDescriptor,\n OptionsAndDescriptors,\n ValidatedFile,\n} from \"./config-descriptors.ts\";\n\nexport type ConfigChain = {\n plugins: Array>;\n presets: Array>;\n options: Array;\n files: Set;\n};\n\nexport type PresetInstance = {\n options: ValidatedOptions;\n alias: string;\n dirname: string;\n externalDependencies: ReadonlyDeepArray;\n};\n\nexport type ConfigContext = {\n filename: string | undefined;\n cwd: string;\n root: string;\n envName: string;\n caller: CallerMetadata | undefined;\n showConfig: boolean;\n};\n\n/**\n * Build a config chain for a given preset.\n */\nexport function* buildPresetChain(\n arg: PresetInstance,\n context: any,\n): Handler {\n const chain = yield* buildPresetChainWalker(arg, context);\n if (!chain) return null;\n\n return {\n plugins: dedupDescriptors(chain.plugins),\n presets: dedupDescriptors(chain.presets),\n options: chain.options.map(o => normalizeOptions(o)),\n files: new Set(),\n };\n}\n\nexport const buildPresetChainWalker = makeChainWalker({\n root: preset => loadPresetDescriptors(preset),\n env: (preset, envName) => loadPresetEnvDescriptors(preset)(envName),\n overrides: (preset, index) => loadPresetOverridesDescriptors(preset)(index),\n overridesEnv: (preset, index, envName) =>\n loadPresetOverridesEnvDescriptors(preset)(index)(envName),\n createLogger: () => () => {}, // Currently we don't support logging how preset is expanded\n});\nconst loadPresetDescriptors = makeWeakCacheSync((preset: PresetInstance) =>\n buildRootDescriptors(preset, preset.alias, createUncachedDescriptors),\n);\nconst loadPresetEnvDescriptors = makeWeakCacheSync((preset: PresetInstance) =>\n makeStrongCacheSync((envName: string) =>\n buildEnvDescriptors(\n preset,\n preset.alias,\n createUncachedDescriptors,\n envName,\n ),\n ),\n);\nconst loadPresetOverridesDescriptors = makeWeakCacheSync(\n (preset: PresetInstance) =>\n makeStrongCacheSync((index: number) =>\n buildOverrideDescriptors(\n preset,\n preset.alias,\n createUncachedDescriptors,\n index,\n ),\n ),\n);\nconst loadPresetOverridesEnvDescriptors = makeWeakCacheSync(\n (preset: PresetInstance) =>\n makeStrongCacheSync((index: number) =>\n makeStrongCacheSync((envName: string) =>\n buildOverrideEnvDescriptors(\n preset,\n preset.alias,\n createUncachedDescriptors,\n index,\n envName,\n ),\n ),\n ),\n);\n\nexport type FileHandling = \"transpile\" | \"ignored\" | \"unsupported\";\nexport type RootConfigChain = ConfigChain & {\n babelrc: ConfigFile | void;\n config: ConfigFile | void;\n ignore: IgnoreFile | void;\n fileHandling: FileHandling;\n files: Set;\n};\n\n/**\n * Build a config chain for Babel's full root configuration.\n */\nexport function* buildRootChain(\n opts: ValidatedOptions,\n context: ConfigContext,\n): Handler {\n let configReport, babelRcReport;\n const programmaticLogger = new ConfigPrinter();\n const programmaticChain = yield* loadProgrammaticChain(\n {\n options: opts,\n dirname: context.cwd,\n },\n context,\n undefined,\n programmaticLogger,\n );\n if (!programmaticChain) return null;\n const programmaticReport = yield* programmaticLogger.output();\n\n let configFile;\n if (typeof opts.configFile === \"string\") {\n configFile = yield* loadConfig(\n opts.configFile,\n context.cwd,\n context.envName,\n context.caller,\n );\n } else if (opts.configFile !== false) {\n configFile = yield* findRootConfig(\n context.root,\n context.envName,\n context.caller,\n );\n }\n\n let { babelrc, babelrcRoots } = opts;\n let babelrcRootsDirectory = context.cwd;\n\n const configFileChain = emptyChain();\n const configFileLogger = new ConfigPrinter();\n if (configFile) {\n const validatedFile = validateConfigFile(configFile);\n const result = yield* loadFileChain(\n validatedFile,\n context,\n undefined,\n configFileLogger,\n );\n if (!result) return null;\n configReport = yield* configFileLogger.output();\n\n // Allow config files to toggle `.babelrc` resolution on and off and\n // specify where the roots are.\n if (babelrc === undefined) {\n babelrc = validatedFile.options.babelrc;\n }\n if (babelrcRoots === undefined) {\n babelrcRootsDirectory = validatedFile.dirname;\n babelrcRoots = validatedFile.options.babelrcRoots;\n }\n\n mergeChain(configFileChain, result);\n }\n\n let ignoreFile, babelrcFile;\n let isIgnored = false;\n const fileChain = emptyChain();\n // resolve all .babelrc files\n if (\n (babelrc === true || babelrc === undefined) &&\n typeof context.filename === \"string\"\n ) {\n const pkgData = yield* findPackageData(context.filename);\n\n if (\n pkgData &&\n babelrcLoadEnabled(context, pkgData, babelrcRoots, babelrcRootsDirectory)\n ) {\n ({ ignore: ignoreFile, config: babelrcFile } = yield* findRelativeConfig(\n pkgData,\n context.envName,\n context.caller,\n ));\n\n if (ignoreFile) {\n fileChain.files.add(ignoreFile.filepath);\n }\n\n if (\n ignoreFile &&\n shouldIgnore(context, ignoreFile.ignore, null, ignoreFile.dirname)\n ) {\n isIgnored = true;\n }\n\n if (babelrcFile && !isIgnored) {\n const validatedFile = validateBabelrcFile(babelrcFile);\n const babelrcLogger = new ConfigPrinter();\n const result = yield* loadFileChain(\n validatedFile,\n context,\n undefined,\n babelrcLogger,\n );\n if (!result) {\n isIgnored = true;\n } else {\n babelRcReport = yield* babelrcLogger.output();\n mergeChain(fileChain, result);\n }\n }\n\n if (babelrcFile && isIgnored) {\n fileChain.files.add(babelrcFile.filepath);\n }\n }\n }\n\n if (context.showConfig) {\n console.log(\n `Babel configs on \"${context.filename}\" (ascending priority):\\n` +\n // print config by the order of ascending priority\n [configReport, babelRcReport, programmaticReport]\n .filter(x => !!x)\n .join(\"\\n\\n\") +\n \"\\n-----End Babel configs-----\",\n );\n }\n // Insert file chain in front so programmatic options have priority\n // over configuration file chain items.\n const chain = mergeChain(\n mergeChain(mergeChain(emptyChain(), configFileChain), fileChain),\n programmaticChain,\n );\n\n return {\n plugins: isIgnored ? [] : dedupDescriptors(chain.plugins),\n presets: isIgnored ? [] : dedupDescriptors(chain.presets),\n options: isIgnored ? [] : chain.options.map(o => normalizeOptions(o)),\n fileHandling: isIgnored ? \"ignored\" : \"transpile\",\n ignore: ignoreFile || undefined,\n babelrc: babelrcFile || undefined,\n config: configFile || undefined,\n files: chain.files,\n };\n}\n\nfunction babelrcLoadEnabled(\n context: ConfigContext,\n pkgData: FilePackageData,\n babelrcRoots: BabelrcSearch | undefined,\n babelrcRootsDirectory: string,\n): boolean {\n if (typeof babelrcRoots === \"boolean\") return babelrcRoots;\n\n const absoluteRoot = context.root;\n\n // Fast path to avoid having to match patterns if the babelrc is just\n // loading in the standard root directory.\n if (babelrcRoots === undefined) {\n return pkgData.directories.includes(absoluteRoot);\n }\n\n let babelrcPatterns = babelrcRoots;\n if (!Array.isArray(babelrcPatterns)) {\n babelrcPatterns = [babelrcPatterns as IgnoreItem];\n }\n babelrcPatterns = babelrcPatterns.map(pat => {\n return typeof pat === \"string\"\n ? path.resolve(babelrcRootsDirectory, pat)\n : pat;\n });\n\n // Fast path to avoid having to match patterns if the babelrc is just\n // loading in the standard root directory.\n if (babelrcPatterns.length === 1 && babelrcPatterns[0] === absoluteRoot) {\n return pkgData.directories.includes(absoluteRoot);\n }\n\n return babelrcPatterns.some(pat => {\n if (typeof pat === \"string\") {\n pat = pathPatternToRegex(pat, babelrcRootsDirectory);\n }\n\n return pkgData.directories.some(directory => {\n return matchPattern(pat, babelrcRootsDirectory, directory, context);\n });\n });\n}\n\nconst validateConfigFile = makeWeakCacheSync(\n (file: ConfigFile): ValidatedFile => ({\n filepath: file.filepath,\n dirname: file.dirname,\n options: validate(\"configfile\", file.options, file.filepath),\n }),\n);\n\nconst validateBabelrcFile = makeWeakCacheSync(\n (file: ConfigFile): ValidatedFile => ({\n filepath: file.filepath,\n dirname: file.dirname,\n options: validate(\"babelrcfile\", file.options, file.filepath),\n }),\n);\n\nconst validateExtendFile = makeWeakCacheSync(\n (file: ConfigFile): ValidatedFile => ({\n filepath: file.filepath,\n dirname: file.dirname,\n options: validate(\"extendsfile\", file.options, file.filepath),\n }),\n);\n\n/**\n * Build a config chain for just the programmatic options passed into Babel.\n */\nconst loadProgrammaticChain = makeChainWalker({\n root: input => buildRootDescriptors(input, \"base\", createCachedDescriptors),\n env: (input, envName) =>\n buildEnvDescriptors(input, \"base\", createCachedDescriptors, envName),\n overrides: (input, index) =>\n buildOverrideDescriptors(input, \"base\", createCachedDescriptors, index),\n overridesEnv: (input, index, envName) =>\n buildOverrideEnvDescriptors(\n input,\n \"base\",\n createCachedDescriptors,\n index,\n envName,\n ),\n createLogger: (input, context, baseLogger) =>\n buildProgrammaticLogger(input, context, baseLogger),\n});\n\n/**\n * Build a config chain for a given file.\n */\nconst loadFileChainWalker = makeChainWalker({\n root: file => loadFileDescriptors(file),\n env: (file, envName) => loadFileEnvDescriptors(file)(envName),\n overrides: (file, index) => loadFileOverridesDescriptors(file)(index),\n overridesEnv: (file, index, envName) =>\n loadFileOverridesEnvDescriptors(file)(index)(envName),\n createLogger: (file, context, baseLogger) =>\n buildFileLogger(file.filepath, context, baseLogger),\n});\n\nfunction* loadFileChain(\n input: ValidatedFile,\n context: ConfigContext,\n files: Set,\n baseLogger: ConfigPrinter,\n) {\n const chain = yield* loadFileChainWalker(input, context, files, baseLogger);\n chain?.files.add(input.filepath);\n\n return chain;\n}\n\nconst loadFileDescriptors = makeWeakCacheSync((file: ValidatedFile) =>\n buildRootDescriptors(file, file.filepath, createUncachedDescriptors),\n);\nconst loadFileEnvDescriptors = makeWeakCacheSync((file: ValidatedFile) =>\n makeStrongCacheSync((envName: string) =>\n buildEnvDescriptors(\n file,\n file.filepath,\n createUncachedDescriptors,\n envName,\n ),\n ),\n);\nconst loadFileOverridesDescriptors = makeWeakCacheSync((file: ValidatedFile) =>\n makeStrongCacheSync((index: number) =>\n buildOverrideDescriptors(\n file,\n file.filepath,\n createUncachedDescriptors,\n index,\n ),\n ),\n);\nconst loadFileOverridesEnvDescriptors = makeWeakCacheSync(\n (file: ValidatedFile) =>\n makeStrongCacheSync((index: number) =>\n makeStrongCacheSync((envName: string) =>\n buildOverrideEnvDescriptors(\n file,\n file.filepath,\n createUncachedDescriptors,\n index,\n envName,\n ),\n ),\n ),\n);\n\nfunction buildFileLogger(\n filepath: string,\n context: ConfigContext,\n baseLogger: ConfigPrinter | void,\n) {\n if (!baseLogger) {\n return () => {};\n }\n return baseLogger.configure(context.showConfig, ChainFormatter.Config, {\n filepath,\n });\n}\n\nfunction buildRootDescriptors(\n { dirname, options }: Partial,\n alias: string,\n descriptors: (\n dirname: string,\n options: ValidatedOptions,\n alias: string,\n ) => OptionsAndDescriptors,\n) {\n return descriptors(dirname, options, alias);\n}\n\nfunction buildProgrammaticLogger(\n _: unknown,\n context: ConfigContext,\n baseLogger: ConfigPrinter | void,\n) {\n if (!baseLogger) {\n return () => {};\n }\n return baseLogger.configure(context.showConfig, ChainFormatter.Programmatic, {\n callerName: context.caller?.name,\n });\n}\n\nfunction buildEnvDescriptors(\n { dirname, options }: Partial,\n alias: string,\n descriptors: (\n dirname: string,\n options: ValidatedOptions,\n alias: string,\n ) => OptionsAndDescriptors,\n envName: string,\n) {\n const opts = options.env?.[envName];\n return opts ? descriptors(dirname, opts, `${alias}.env[\"${envName}\"]`) : null;\n}\n\nfunction buildOverrideDescriptors(\n { dirname, options }: Partial,\n alias: string,\n descriptors: (\n dirname: string,\n options: ValidatedOptions,\n alias: string,\n ) => OptionsAndDescriptors,\n index: number,\n) {\n const opts = options.overrides?.[index];\n if (!opts) throw new Error(\"Assertion failure - missing override\");\n\n return descriptors(dirname, opts, `${alias}.overrides[${index}]`);\n}\n\nfunction buildOverrideEnvDescriptors(\n { dirname, options }: Partial,\n alias: string,\n descriptors: (\n dirname: string,\n options: ValidatedOptions,\n alias: string,\n ) => OptionsAndDescriptors,\n index: number,\n envName: string,\n) {\n const override = options.overrides?.[index];\n if (!override) throw new Error(\"Assertion failure - missing override\");\n\n const opts = override.env?.[envName];\n return opts\n ? descriptors(\n dirname,\n opts,\n `${alias}.overrides[${index}].env[\"${envName}\"]`,\n )\n : null;\n}\n\nfunction makeChainWalker<\n ArgT extends {\n options: ValidatedOptions;\n dirname: string;\n filepath?: string;\n },\n>({\n root,\n env,\n overrides,\n overridesEnv,\n createLogger,\n}: {\n root: (configEntry: ArgT) => OptionsAndDescriptors;\n env: (configEntry: ArgT, env: string) => OptionsAndDescriptors | null;\n overrides: (configEntry: ArgT, index: number) => OptionsAndDescriptors;\n overridesEnv: (\n configEntry: ArgT,\n index: number,\n env: string,\n ) => OptionsAndDescriptors | null;\n createLogger: (\n configEntry: ArgT,\n context: ConfigContext,\n printer: ConfigPrinter | void,\n ) => (\n opts: OptionsAndDescriptors,\n index?: number | null,\n env?: string | null,\n ) => void;\n}): (\n configEntry: ArgT,\n context: ConfigContext,\n files?: Set,\n baseLogger?: ConfigPrinter,\n) => Handler {\n return function* chainWalker(input, context, files = new Set(), baseLogger) {\n const { dirname } = input;\n\n const flattenedConfigs: Array<{\n config: OptionsAndDescriptors;\n index: number | undefined | null;\n envName: string | undefined | null;\n }> = [];\n\n const rootOpts = root(input);\n if (configIsApplicable(rootOpts, dirname, context, input.filepath)) {\n flattenedConfigs.push({\n config: rootOpts,\n envName: undefined,\n index: undefined,\n });\n\n const envOpts = env(input, context.envName);\n if (\n envOpts &&\n configIsApplicable(envOpts, dirname, context, input.filepath)\n ) {\n flattenedConfigs.push({\n config: envOpts,\n envName: context.envName,\n index: undefined,\n });\n }\n\n (rootOpts.options.overrides || []).forEach((_, index) => {\n const overrideOps = overrides(input, index);\n if (configIsApplicable(overrideOps, dirname, context, input.filepath)) {\n flattenedConfigs.push({\n config: overrideOps,\n index,\n envName: undefined,\n });\n\n const overrideEnvOpts = overridesEnv(input, index, context.envName);\n if (\n overrideEnvOpts &&\n configIsApplicable(\n overrideEnvOpts,\n dirname,\n context,\n input.filepath,\n )\n ) {\n flattenedConfigs.push({\n config: overrideEnvOpts,\n index,\n envName: context.envName,\n });\n }\n }\n });\n }\n\n // Process 'ignore' and 'only' before 'extends' items are processed so\n // that we don't do extra work loading extended configs if a file is\n // ignored.\n if (\n flattenedConfigs.some(\n ({\n config: {\n options: { ignore, only },\n },\n }) => shouldIgnore(context, ignore, only, dirname),\n )\n ) {\n return null;\n }\n\n const chain = emptyChain();\n const logger = createLogger(input, context, baseLogger);\n\n for (const { config, index, envName } of flattenedConfigs) {\n if (\n !(yield* mergeExtendsChain(\n chain,\n config.options,\n dirname,\n context,\n files,\n baseLogger,\n ))\n ) {\n return null;\n }\n\n logger(config, index, envName);\n yield* mergeChainOpts(chain, config);\n }\n return chain;\n };\n}\n\nfunction* mergeExtendsChain(\n chain: ConfigChain,\n opts: ValidatedOptions,\n dirname: string,\n context: ConfigContext,\n files: Set,\n baseLogger?: ConfigPrinter,\n): Handler {\n if (opts.extends === undefined) return true;\n\n const file = yield* loadConfig(\n opts.extends,\n dirname,\n context.envName,\n context.caller,\n );\n\n if (files.has(file)) {\n throw new Error(\n `Configuration cycle detected loading ${file.filepath}.\\n` +\n `File already loaded following the config chain:\\n` +\n Array.from(files, file => ` - ${file.filepath}`).join(\"\\n\"),\n );\n }\n\n files.add(file);\n const fileChain = yield* loadFileChain(\n validateExtendFile(file),\n context,\n files,\n baseLogger,\n );\n files.delete(file);\n\n if (!fileChain) return false;\n\n mergeChain(chain, fileChain);\n\n return true;\n}\n\nfunction mergeChain(target: ConfigChain, source: ConfigChain): ConfigChain {\n target.options.push(...source.options);\n target.plugins.push(...source.plugins);\n target.presets.push(...source.presets);\n for (const file of source.files) {\n target.files.add(file);\n }\n\n return target;\n}\n\nfunction* mergeChainOpts(\n target: ConfigChain,\n { options, plugins, presets }: OptionsAndDescriptors,\n): Handler {\n target.options.push(options);\n target.plugins.push(...(yield* plugins()));\n target.presets.push(...(yield* presets()));\n\n return target;\n}\n\nfunction emptyChain(): ConfigChain {\n return {\n options: [],\n presets: [],\n plugins: [],\n files: new Set(),\n };\n}\n\nfunction normalizeOptions(opts: ValidatedOptions): ValidatedOptions {\n const options = {\n ...opts,\n };\n delete options.extends;\n delete options.env;\n delete options.overrides;\n delete options.plugins;\n delete options.presets;\n delete options.passPerPreset;\n delete options.ignore;\n delete options.only;\n delete options.test;\n delete options.include;\n delete options.exclude;\n\n // \"sourceMap\" is just aliased to sourceMap, so copy it over as\n // we merge the options together.\n if (Object.hasOwn(options, \"sourceMap\")) {\n options.sourceMaps = options.sourceMap;\n delete options.sourceMap;\n }\n return options;\n}\n\nfunction dedupDescriptors(\n items: Array>,\n): Array> {\n const map: Map<\n Function,\n Map }>\n > = new Map();\n\n const descriptors = [];\n\n for (const item of items) {\n if (typeof item.value === \"function\") {\n const fnKey = item.value;\n let nameMap = map.get(fnKey);\n if (!nameMap) {\n nameMap = new Map();\n map.set(fnKey, nameMap);\n }\n let desc = nameMap.get(item.name);\n if (!desc) {\n desc = { value: item };\n descriptors.push(desc);\n\n // Treat passPerPreset presets as unique, skipping them\n // in the merge processing steps.\n if (!item.ownPass) nameMap.set(item.name, desc);\n } else {\n desc.value = item;\n }\n } else {\n descriptors.push({ value: item });\n }\n }\n\n return descriptors.reduce((acc, desc) => {\n acc.push(desc.value);\n return acc;\n }, []);\n}\n\nfunction configIsApplicable(\n { options }: OptionsAndDescriptors,\n dirname: string,\n context: ConfigContext,\n configName: string,\n): boolean {\n return (\n (options.test === undefined ||\n configFieldIsApplicable(context, options.test, dirname, configName)) &&\n (options.include === undefined ||\n configFieldIsApplicable(context, options.include, dirname, configName)) &&\n (options.exclude === undefined ||\n !configFieldIsApplicable(context, options.exclude, dirname, configName))\n );\n}\n\nfunction configFieldIsApplicable(\n context: ConfigContext,\n test: ConfigApplicableTest,\n dirname: string,\n configName: string,\n): boolean {\n const patterns = Array.isArray(test) ? test : [test];\n\n return matchesPatterns(context, patterns, dirname, configName);\n}\n\n/**\n * Print the ignoreList-values in a more helpful way than the default.\n */\nfunction ignoreListReplacer(\n _key: string,\n value: IgnoreList | IgnoreItem,\n): IgnoreList | IgnoreItem | string {\n if (value instanceof RegExp) {\n return String(value);\n }\n\n return value;\n}\n\n/**\n * Tests if a filename should be ignored based on \"ignore\" and \"only\" options.\n */\nfunction shouldIgnore(\n context: ConfigContext,\n ignore: IgnoreList | undefined | null,\n only: IgnoreList | undefined | null,\n dirname: string,\n): boolean {\n if (ignore && matchesPatterns(context, ignore, dirname)) {\n const message = `No config is applied to \"${\n context.filename ?? \"(unknown)\"\n }\" because it matches one of \\`ignore: ${JSON.stringify(\n ignore,\n ignoreListReplacer,\n )}\\` from \"${dirname}\"`;\n debug(message);\n if (context.showConfig) {\n console.log(message);\n }\n return true;\n }\n\n if (only && !matchesPatterns(context, only, dirname)) {\n const message = `No config is applied to \"${\n context.filename ?? \"(unknown)\"\n }\" because it fails to match one of \\`only: ${JSON.stringify(\n only,\n ignoreListReplacer,\n )}\\` from \"${dirname}\"`;\n debug(message);\n if (context.showConfig) {\n console.log(message);\n }\n return true;\n }\n\n return false;\n}\n\n/**\n * Returns result of calling function with filename if pattern is a function.\n * Otherwise returns result of matching pattern Regex with filename.\n */\nfunction matchesPatterns(\n context: ConfigContext,\n patterns: IgnoreList,\n dirname: string,\n configName?: string,\n): boolean {\n return patterns.some(pattern =>\n matchPattern(pattern, dirname, context.filename, context, configName),\n );\n}\n\nfunction matchPattern(\n pattern: IgnoreItem,\n dirname: string,\n pathToTest: string | undefined,\n context: ConfigContext,\n configName?: string,\n): boolean {\n if (typeof pattern === \"function\") {\n return !!endHiddenCallStack(pattern)(pathToTest, {\n dirname,\n envName: context.envName,\n caller: context.caller,\n });\n }\n\n if (typeof pathToTest !== \"string\") {\n throw new ConfigError(\n `Configuration contains string/RegExp pattern, but no filename was passed to Babel`,\n configName,\n );\n }\n\n if (typeof pattern === \"string\") {\n pattern = pathPatternToRegex(pattern, dirname);\n }\n return pattern.test(pathToTest);\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/config-descriptors.js b/node_modules/@babel/core/lib/config/config-descriptors.js new file mode 100644 index 00000000..21fb4146 --- /dev/null +++ b/node_modules/@babel/core/lib/config/config-descriptors.js @@ -0,0 +1,190 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.createCachedDescriptors = createCachedDescriptors; +exports.createDescriptor = createDescriptor; +exports.createUncachedDescriptors = createUncachedDescriptors; +function _gensync() { + const data = require("gensync"); + _gensync = function () { + return data; + }; + return data; +} +var _functional = require("../gensync-utils/functional.js"); +var _index = require("./files/index.js"); +var _item = require("./item.js"); +var _caching = require("./caching.js"); +var _resolveTargets = require("./resolve-targets.js"); +function isEqualDescriptor(a, b) { + var _a$file, _b$file, _a$file2, _b$file2; + return a.name === b.name && a.value === b.value && a.options === b.options && a.dirname === b.dirname && a.alias === b.alias && a.ownPass === b.ownPass && ((_a$file = a.file) == null ? void 0 : _a$file.request) === ((_b$file = b.file) == null ? void 0 : _b$file.request) && ((_a$file2 = a.file) == null ? void 0 : _a$file2.resolved) === ((_b$file2 = b.file) == null ? void 0 : _b$file2.resolved); +} +function* handlerOf(value) { + return value; +} +function optionsWithResolvedBrowserslistConfigFile(options, dirname) { + if (typeof options.browserslistConfigFile === "string") { + options.browserslistConfigFile = (0, _resolveTargets.resolveBrowserslistConfigFile)(options.browserslistConfigFile, dirname); + } + return options; +} +function createCachedDescriptors(dirname, options, alias) { + const { + plugins, + presets, + passPerPreset + } = options; + return { + options: optionsWithResolvedBrowserslistConfigFile(options, dirname), + plugins: plugins ? () => createCachedPluginDescriptors(plugins, dirname)(alias) : () => handlerOf([]), + presets: presets ? () => createCachedPresetDescriptors(presets, dirname)(alias)(!!passPerPreset) : () => handlerOf([]) + }; +} +function createUncachedDescriptors(dirname, options, alias) { + return { + options: optionsWithResolvedBrowserslistConfigFile(options, dirname), + plugins: (0, _functional.once)(() => createPluginDescriptors(options.plugins || [], dirname, alias)), + presets: (0, _functional.once)(() => createPresetDescriptors(options.presets || [], dirname, alias, !!options.passPerPreset)) + }; +} +const PRESET_DESCRIPTOR_CACHE = new WeakMap(); +const createCachedPresetDescriptors = (0, _caching.makeWeakCacheSync)((items, cache) => { + const dirname = cache.using(dir => dir); + return (0, _caching.makeStrongCacheSync)(alias => (0, _caching.makeStrongCache)(function* (passPerPreset) { + const descriptors = yield* createPresetDescriptors(items, dirname, alias, passPerPreset); + return descriptors.map(desc => loadCachedDescriptor(PRESET_DESCRIPTOR_CACHE, desc)); + })); +}); +const PLUGIN_DESCRIPTOR_CACHE = new WeakMap(); +const createCachedPluginDescriptors = (0, _caching.makeWeakCacheSync)((items, cache) => { + const dirname = cache.using(dir => dir); + return (0, _caching.makeStrongCache)(function* (alias) { + const descriptors = yield* createPluginDescriptors(items, dirname, alias); + return descriptors.map(desc => loadCachedDescriptor(PLUGIN_DESCRIPTOR_CACHE, desc)); + }); +}); +const DEFAULT_OPTIONS = {}; +function loadCachedDescriptor(cache, desc) { + const { + value, + options = DEFAULT_OPTIONS + } = desc; + if (options === false) return desc; + let cacheByOptions = cache.get(value); + if (!cacheByOptions) { + cacheByOptions = new WeakMap(); + cache.set(value, cacheByOptions); + } + let possibilities = cacheByOptions.get(options); + if (!possibilities) { + possibilities = []; + cacheByOptions.set(options, possibilities); + } + if (!possibilities.includes(desc)) { + const matches = possibilities.filter(possibility => isEqualDescriptor(possibility, desc)); + if (matches.length > 0) { + return matches[0]; + } + possibilities.push(desc); + } + return desc; +} +function* createPresetDescriptors(items, dirname, alias, passPerPreset) { + return yield* createDescriptors("preset", items, dirname, alias, passPerPreset); +} +function* createPluginDescriptors(items, dirname, alias) { + return yield* createDescriptors("plugin", items, dirname, alias); +} +function* createDescriptors(type, items, dirname, alias, ownPass) { + const descriptors = yield* _gensync().all(items.map((item, index) => createDescriptor(item, dirname, { + type, + alias: `${alias}$${index}`, + ownPass: !!ownPass + }))); + assertNoDuplicates(descriptors); + return descriptors; +} +function* createDescriptor(pair, dirname, { + type, + alias, + ownPass +}) { + const desc = (0, _item.getItemDescriptor)(pair); + if (desc) { + return desc; + } + let name; + let options; + let value = pair; + if (Array.isArray(value)) { + if (value.length === 3) { + [value, options, name] = value; + } else { + [value, options] = value; + } + } + let file = undefined; + let filepath = null; + if (typeof value === "string") { + if (typeof type !== "string") { + throw new Error("To resolve a string-based item, the type of item must be given"); + } + const resolver = type === "plugin" ? _index.loadPlugin : _index.loadPreset; + const request = value; + ({ + filepath, + value + } = yield* resolver(value, dirname)); + file = { + request, + resolved: filepath + }; + } + if (!value) { + throw new Error(`Unexpected falsy value: ${String(value)}`); + } + if (typeof value === "object" && value.__esModule) { + if (value.default) { + value = value.default; + } else { + throw new Error("Must export a default export when using ES6 modules."); + } + } + if (typeof value !== "object" && typeof value !== "function") { + throw new Error(`Unsupported format: ${typeof value}. Expected an object or a function.`); + } + if (filepath !== null && typeof value === "object" && value) { + throw new Error(`Plugin/Preset files are not allowed to export objects, only functions. In ${filepath}`); + } + return { + name, + alias: filepath || alias, + value, + options, + dirname, + ownPass, + file + }; +} +function assertNoDuplicates(items) { + const map = new Map(); + for (const item of items) { + if (typeof item.value !== "function") continue; + let nameMap = map.get(item.value); + if (!nameMap) { + nameMap = new Set(); + map.set(item.value, nameMap); + } + if (nameMap.has(item.name)) { + const conflicts = items.filter(i => i.value === item.value); + throw new Error([`Duplicate plugin/preset detected.`, `If you'd like to use two separate instances of a plugin,`, `they need separate names, e.g.`, ``, ` plugins: [`, ` ['some-plugin', {}],`, ` ['some-plugin', {}, 'some unique name'],`, ` ]`, ``, `Duplicates detected are:`, `${JSON.stringify(conflicts, null, 2)}`].join("\n")); + } + nameMap.add(item.name); + } +} +0 && 0; + +//# sourceMappingURL=config-descriptors.js.map diff --git a/node_modules/@babel/core/lib/config/config-descriptors.js.map b/node_modules/@babel/core/lib/config/config-descriptors.js.map new file mode 100644 index 00000000..cddcbd81 --- /dev/null +++ b/node_modules/@babel/core/lib/config/config-descriptors.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_gensync","data","require","_functional","_index","_item","_caching","_resolveTargets","isEqualDescriptor","a","b","_a$file","_b$file","_a$file2","_b$file2","name","value","options","dirname","alias","ownPass","file","request","resolved","handlerOf","optionsWithResolvedBrowserslistConfigFile","browserslistConfigFile","resolveBrowserslistConfigFile","createCachedDescriptors","plugins","presets","passPerPreset","createCachedPluginDescriptors","createCachedPresetDescriptors","createUncachedDescriptors","once","createPluginDescriptors","createPresetDescriptors","PRESET_DESCRIPTOR_CACHE","WeakMap","makeWeakCacheSync","items","cache","using","dir","makeStrongCacheSync","makeStrongCache","descriptors","map","desc","loadCachedDescriptor","PLUGIN_DESCRIPTOR_CACHE","DEFAULT_OPTIONS","cacheByOptions","get","set","possibilities","includes","matches","filter","possibility","length","push","createDescriptors","type","gensync","all","item","index","createDescriptor","assertNoDuplicates","pair","getItemDescriptor","Array","isArray","undefined","filepath","Error","resolver","loadPlugin","loadPreset","String","__esModule","default","Map","nameMap","Set","has","conflicts","i","JSON","stringify","join","add"],"sources":["../../src/config/config-descriptors.ts"],"sourcesContent":["import gensync, { type Handler } from \"gensync\";\nimport { once } from \"../gensync-utils/functional.ts\";\n\nimport { loadPlugin, loadPreset } from \"./files/index.ts\";\n\nimport { getItemDescriptor } from \"./item.ts\";\n\nimport {\n makeWeakCacheSync,\n makeStrongCacheSync,\n makeStrongCache,\n} from \"./caching.ts\";\nimport type { CacheConfigurator } from \"./caching.ts\";\n\nimport type {\n ValidatedOptions,\n PluginList,\n PluginItem,\n} from \"./validation/options.ts\";\n\nimport { resolveBrowserslistConfigFile } from \"./resolve-targets.ts\";\nimport type { PluginAPI, PresetAPI } from \"./helpers/config-api.ts\";\n\n// Represents a config object and functions to lazily load the descriptors\n// for the plugins and presets so we don't load the plugins/presets unless\n// the options object actually ends up being applicable.\nexport type OptionsAndDescriptors = {\n options: ValidatedOptions;\n plugins: () => Handler>>;\n presets: () => Handler>>;\n};\n\n// Represents a plugin or presets at a given location in a config object.\n// At this point these have been resolved to a specific object or function,\n// but have not yet been executed to call functions with options.\nexport interface UnloadedDescriptor {\n name: string | undefined;\n value: object | ((api: API, options: Options, dirname: string) => unknown);\n options: Options;\n dirname: string;\n alias: string;\n ownPass?: boolean;\n file?: {\n request: string;\n resolved: string;\n };\n}\n\nfunction isEqualDescriptor(\n a: UnloadedDescriptor,\n b: UnloadedDescriptor,\n): boolean {\n return (\n a.name === b.name &&\n a.value === b.value &&\n a.options === b.options &&\n a.dirname === b.dirname &&\n a.alias === b.alias &&\n a.ownPass === b.ownPass &&\n a.file?.request === b.file?.request &&\n a.file?.resolved === b.file?.resolved\n );\n}\n\nexport type ValidatedFile = {\n filepath: string;\n dirname: string;\n options: ValidatedOptions;\n};\n\n// eslint-disable-next-line require-yield\nfunction* handlerOf(value: T): Handler {\n return value;\n}\n\nfunction optionsWithResolvedBrowserslistConfigFile(\n options: ValidatedOptions,\n dirname: string,\n): ValidatedOptions {\n if (typeof options.browserslistConfigFile === \"string\") {\n options.browserslistConfigFile = resolveBrowserslistConfigFile(\n options.browserslistConfigFile,\n dirname,\n );\n }\n return options;\n}\n\n/**\n * Create a set of descriptors from a given options object, preserving\n * descriptor identity based on the identity of the plugin/preset arrays\n * themselves, and potentially on the identity of the plugins/presets + options.\n */\nexport function createCachedDescriptors(\n dirname: string,\n options: ValidatedOptions,\n alias: string,\n): OptionsAndDescriptors {\n const { plugins, presets, passPerPreset } = options;\n return {\n options: optionsWithResolvedBrowserslistConfigFile(options, dirname),\n plugins: plugins\n ? () =>\n // @ts-expect-error todo(flow->ts) ts complains about incorrect arguments\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n createCachedPluginDescriptors(plugins, dirname)(alias)\n : () => handlerOf([]),\n presets: presets\n ? () =>\n // @ts-expect-error todo(flow->ts) ts complains about incorrect arguments\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n createCachedPresetDescriptors(presets, dirname)(alias)(\n !!passPerPreset,\n )\n : () => handlerOf([]),\n };\n}\n\n/**\n * Create a set of descriptors from a given options object, with consistent\n * identity for the descriptors, but not caching based on any specific identity.\n */\nexport function createUncachedDescriptors(\n dirname: string,\n options: ValidatedOptions,\n alias: string,\n): OptionsAndDescriptors {\n return {\n options: optionsWithResolvedBrowserslistConfigFile(options, dirname),\n // The returned result here is cached to represent a config object in\n // memory, so we build and memoize the descriptors to ensure the same\n // values are returned consistently.\n plugins: once(() =>\n createPluginDescriptors(options.plugins || [], dirname, alias),\n ),\n presets: once(() =>\n createPresetDescriptors(\n options.presets || [],\n dirname,\n alias,\n !!options.passPerPreset,\n ),\n ),\n };\n}\n\nconst PRESET_DESCRIPTOR_CACHE = new WeakMap();\nconst createCachedPresetDescriptors = makeWeakCacheSync(\n (items: PluginList, cache: CacheConfigurator) => {\n const dirname = cache.using(dir => dir);\n return makeStrongCacheSync((alias: string) =>\n makeStrongCache(function* (\n passPerPreset: boolean,\n ): Handler>> {\n const descriptors = yield* createPresetDescriptors(\n items,\n dirname,\n alias,\n passPerPreset,\n );\n return descriptors.map(\n // Items are cached using the overall preset array identity when\n // possibly, but individual descriptors are also cached if a match\n // can be found in the previously-used descriptor lists.\n desc => loadCachedDescriptor(PRESET_DESCRIPTOR_CACHE, desc),\n );\n }),\n );\n },\n);\n\nconst PLUGIN_DESCRIPTOR_CACHE = new WeakMap();\nconst createCachedPluginDescriptors = makeWeakCacheSync(\n (items: PluginList, cache: CacheConfigurator) => {\n const dirname = cache.using(dir => dir);\n return makeStrongCache(function* (\n alias: string,\n ): Handler>> {\n const descriptors = yield* createPluginDescriptors(items, dirname, alias);\n return descriptors.map(\n // Items are cached using the overall plugin array identity when\n // possibly, but individual descriptors are also cached if a match\n // can be found in the previously-used descriptor lists.\n desc => loadCachedDescriptor(PLUGIN_DESCRIPTOR_CACHE, desc),\n );\n });\n },\n);\n\n/**\n * When no options object is given in a descriptor, this object is used\n * as a WeakMap key in order to have consistent identity.\n */\nconst DEFAULT_OPTIONS = {};\n\n/**\n * Given the cache and a descriptor, returns a matching descriptor from the\n * cache, or else returns the input descriptor and adds it to the cache for\n * next time.\n */\nfunction loadCachedDescriptor(\n cache: WeakMap<\n object | Function,\n WeakMap>>\n >,\n desc: UnloadedDescriptor,\n) {\n const { value, options = DEFAULT_OPTIONS } = desc;\n if (options === false) return desc;\n\n let cacheByOptions = cache.get(value);\n if (!cacheByOptions) {\n cacheByOptions = new WeakMap();\n cache.set(value, cacheByOptions);\n }\n\n let possibilities = cacheByOptions.get(options);\n if (!possibilities) {\n possibilities = [];\n cacheByOptions.set(options, possibilities);\n }\n\n if (!possibilities.includes(desc)) {\n const matches = possibilities.filter(possibility =>\n isEqualDescriptor(possibility, desc),\n );\n if (matches.length > 0) {\n return matches[0];\n }\n\n possibilities.push(desc);\n }\n\n return desc;\n}\n\nfunction* createPresetDescriptors(\n items: PluginList,\n dirname: string,\n alias: string,\n passPerPreset: boolean,\n): Handler>> {\n return yield* createDescriptors(\n \"preset\",\n items,\n dirname,\n alias,\n passPerPreset,\n );\n}\n\nfunction* createPluginDescriptors(\n items: PluginList,\n dirname: string,\n alias: string,\n): Handler>> {\n return yield* createDescriptors(\"plugin\", items, dirname, alias);\n}\n\nfunction* createDescriptors(\n type: \"plugin\" | \"preset\",\n items: PluginList,\n dirname: string,\n alias: string,\n ownPass?: boolean,\n): Handler>> {\n const descriptors = yield* gensync.all(\n items.map((item, index) =>\n createDescriptor(item, dirname, {\n type,\n alias: `${alias}$${index}`,\n ownPass: !!ownPass,\n }),\n ),\n );\n\n assertNoDuplicates(descriptors);\n\n return descriptors;\n}\n\n/**\n * Given a plugin/preset item, resolve it into a standard format.\n */\nexport function* createDescriptor(\n pair: PluginItem,\n dirname: string,\n {\n type,\n alias,\n ownPass,\n }: {\n type?: \"plugin\" | \"preset\";\n alias: string;\n ownPass?: boolean;\n },\n): Handler> {\n const desc = getItemDescriptor(pair);\n if (desc) {\n return desc;\n }\n\n let name;\n let options;\n // todo(flow->ts) better type annotation\n let value: any = pair;\n if (Array.isArray(value)) {\n if (value.length === 3) {\n [value, options, name] = value;\n } else {\n [value, options] = value;\n }\n }\n\n let file = undefined;\n let filepath = null;\n if (typeof value === \"string\") {\n if (typeof type !== \"string\") {\n throw new Error(\n \"To resolve a string-based item, the type of item must be given\",\n );\n }\n const resolver = type === \"plugin\" ? loadPlugin : loadPreset;\n const request = value;\n\n ({ filepath, value } = yield* resolver(value, dirname));\n\n file = {\n request,\n resolved: filepath,\n };\n }\n\n if (!value) {\n throw new Error(`Unexpected falsy value: ${String(value)}`);\n }\n\n if (typeof value === \"object\" && value.__esModule) {\n if (value.default) {\n value = value.default;\n } else {\n throw new Error(\"Must export a default export when using ES6 modules.\");\n }\n }\n\n if (typeof value !== \"object\" && typeof value !== \"function\") {\n throw new Error(\n `Unsupported format: ${typeof value}. Expected an object or a function.`,\n );\n }\n\n if (filepath !== null && typeof value === \"object\" && value) {\n // We allow object values for plugins/presets nested directly within a\n // config object, because it can be useful to define them in nested\n // configuration contexts.\n throw new Error(\n `Plugin/Preset files are not allowed to export objects, only functions. In ${filepath}`,\n );\n }\n\n return {\n name,\n alias: filepath || alias,\n value,\n options,\n dirname,\n ownPass,\n file,\n };\n}\n\nfunction assertNoDuplicates(items: Array>): void {\n const map = new Map();\n\n for (const item of items) {\n if (typeof item.value !== \"function\") continue;\n\n let nameMap = map.get(item.value);\n if (!nameMap) {\n nameMap = new Set();\n map.set(item.value, nameMap);\n }\n\n if (nameMap.has(item.name)) {\n const conflicts = items.filter(i => i.value === item.value);\n throw new Error(\n [\n `Duplicate plugin/preset detected.`,\n `If you'd like to use two separate instances of a plugin,`,\n `they need separate names, e.g.`,\n ``,\n ` plugins: [`,\n ` ['some-plugin', {}],`,\n ` ['some-plugin', {}, 'some unique name'],`,\n ` ]`,\n ``,\n `Duplicates detected are:`,\n `${JSON.stringify(conflicts, null, 2)}`,\n ].join(\"\\n\"),\n );\n }\n\n nameMap.add(item.name);\n }\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/files/configuration.js b/node_modules/@babel/core/lib/config/files/configuration.js new file mode 100644 index 00000000..c9fe6ebc --- /dev/null +++ b/node_modules/@babel/core/lib/config/files/configuration.js @@ -0,0 +1,290 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ROOT_CONFIG_FILENAMES = void 0; +exports.findConfigUpwards = findConfigUpwards; +exports.findRelativeConfig = findRelativeConfig; +exports.findRootConfig = findRootConfig; +exports.loadConfig = loadConfig; +exports.resolveShowConfigPath = resolveShowConfigPath; +function _debug() { + const data = require("debug"); + _debug = function () { + return data; + }; + return data; +} +function _fs() { + const data = require("fs"); + _fs = function () { + return data; + }; + return data; +} +function _path() { + const data = require("path"); + _path = function () { + return data; + }; + return data; +} +function _json() { + const data = require("json5"); + _json = function () { + return data; + }; + return data; +} +function _gensync() { + const data = require("gensync"); + _gensync = function () { + return data; + }; + return data; +} +var _caching = require("../caching.js"); +var _configApi = require("../helpers/config-api.js"); +var _utils = require("./utils.js"); +var _moduleTypes = require("./module-types.js"); +var _patternToRegex = require("../pattern-to-regex.js"); +var _configError = require("../../errors/config-error.js"); +var fs = require("../../gensync-utils/fs.js"); +require("module"); +var _rewriteStackTrace = require("../../errors/rewrite-stack-trace.js"); +var _async = require("../../gensync-utils/async.js"); +const debug = _debug()("babel:config:loading:files:configuration"); +const ROOT_CONFIG_FILENAMES = exports.ROOT_CONFIG_FILENAMES = ["babel.config.js", "babel.config.cjs", "babel.config.mjs", "babel.config.json", "babel.config.cts"]; +const RELATIVE_CONFIG_FILENAMES = [".babelrc", ".babelrc.js", ".babelrc.cjs", ".babelrc.mjs", ".babelrc.json", ".babelrc.cts"]; +const BABELIGNORE_FILENAME = ".babelignore"; +const runConfig = (0, _caching.makeWeakCache)(function* runConfig(options, cache) { + yield* []; + return { + options: (0, _rewriteStackTrace.endHiddenCallStack)(options)((0, _configApi.makeConfigAPI)(cache)), + cacheNeedsConfiguration: !cache.configured() + }; +}); +function* readConfigCode(filepath, data) { + if (!_fs().existsSync(filepath)) return null; + let options = yield* (0, _moduleTypes.default)(filepath, (yield* (0, _async.isAsync)()) ? "auto" : "require", "You appear to be using a native ECMAScript module configuration " + "file, which is only supported when running Babel asynchronously " + "or when using the Node.js `--experimental-require-module` flag.", "You appear to be using a configuration file that contains top-level " + "await, which is only supported when running Babel asynchronously."); + let cacheNeedsConfiguration = false; + if (typeof options === "function") { + ({ + options, + cacheNeedsConfiguration + } = yield* runConfig(options, data)); + } + if (!options || typeof options !== "object" || Array.isArray(options)) { + throw new _configError.default(`Configuration should be an exported JavaScript object.`, filepath); + } + if (typeof options.then === "function") { + options.catch == null || options.catch(() => {}); + throw new _configError.default(`You appear to be using an async configuration, ` + `which your current version of Babel does not support. ` + `We may add support for this in the future, ` + `but if you're on the most recent version of @babel/core and still ` + `seeing this error, then you'll need to synchronously return your config.`, filepath); + } + if (cacheNeedsConfiguration) throwConfigError(filepath); + return buildConfigFileObject(options, filepath); +} +const cfboaf = new WeakMap(); +function buildConfigFileObject(options, filepath) { + let configFilesByFilepath = cfboaf.get(options); + if (!configFilesByFilepath) { + cfboaf.set(options, configFilesByFilepath = new Map()); + } + let configFile = configFilesByFilepath.get(filepath); + if (!configFile) { + configFile = { + filepath, + dirname: _path().dirname(filepath), + options + }; + configFilesByFilepath.set(filepath, configFile); + } + return configFile; +} +const packageToBabelConfig = (0, _caching.makeWeakCacheSync)(file => { + const babel = file.options.babel; + if (babel === undefined) return null; + if (typeof babel !== "object" || Array.isArray(babel) || babel === null) { + throw new _configError.default(`.babel property must be an object`, file.filepath); + } + return { + filepath: file.filepath, + dirname: file.dirname, + options: babel + }; +}); +const readConfigJSON5 = (0, _utils.makeStaticFileCache)((filepath, content) => { + let options; + try { + options = _json().parse(content); + } catch (err) { + throw new _configError.default(`Error while parsing config - ${err.message}`, filepath); + } + if (!options) throw new _configError.default(`No config detected`, filepath); + if (typeof options !== "object") { + throw new _configError.default(`Config returned typeof ${typeof options}`, filepath); + } + if (Array.isArray(options)) { + throw new _configError.default(`Expected config object but found array`, filepath); + } + delete options.$schema; + return { + filepath, + dirname: _path().dirname(filepath), + options + }; +}); +const readIgnoreConfig = (0, _utils.makeStaticFileCache)((filepath, content) => { + const ignoreDir = _path().dirname(filepath); + const ignorePatterns = content.split("\n").map(line => line.replace(/#.*$/, "").trim()).filter(Boolean); + for (const pattern of ignorePatterns) { + if (pattern[0] === "!") { + throw new _configError.default(`Negation of file paths is not supported.`, filepath); + } + } + return { + filepath, + dirname: _path().dirname(filepath), + ignore: ignorePatterns.map(pattern => (0, _patternToRegex.default)(pattern, ignoreDir)) + }; +}); +function findConfigUpwards(rootDir) { + let dirname = rootDir; + for (;;) { + for (const filename of ROOT_CONFIG_FILENAMES) { + if (_fs().existsSync(_path().join(dirname, filename))) { + return dirname; + } + } + const nextDir = _path().dirname(dirname); + if (dirname === nextDir) break; + dirname = nextDir; + } + return null; +} +function* findRelativeConfig(packageData, envName, caller) { + let config = null; + let ignore = null; + const dirname = _path().dirname(packageData.filepath); + for (const loc of packageData.directories) { + if (!config) { + var _packageData$pkg; + config = yield* loadOneConfig(RELATIVE_CONFIG_FILENAMES, loc, envName, caller, ((_packageData$pkg = packageData.pkg) == null ? void 0 : _packageData$pkg.dirname) === loc ? packageToBabelConfig(packageData.pkg) : null); + } + if (!ignore) { + const ignoreLoc = _path().join(loc, BABELIGNORE_FILENAME); + ignore = yield* readIgnoreConfig(ignoreLoc); + if (ignore) { + debug("Found ignore %o from %o.", ignore.filepath, dirname); + } + } + } + return { + config, + ignore + }; +} +function findRootConfig(dirname, envName, caller) { + return loadOneConfig(ROOT_CONFIG_FILENAMES, dirname, envName, caller); +} +function* loadOneConfig(names, dirname, envName, caller, previousConfig = null) { + const configs = yield* _gensync().all(names.map(filename => readConfig(_path().join(dirname, filename), envName, caller))); + const config = configs.reduce((previousConfig, config) => { + if (config && previousConfig) { + throw new _configError.default(`Multiple configuration files found. Please remove one:\n` + ` - ${_path().basename(previousConfig.filepath)}\n` + ` - ${config.filepath}\n` + `from ${dirname}`); + } + return config || previousConfig; + }, previousConfig); + if (config) { + debug("Found configuration %o from %o.", config.filepath, dirname); + } + return config; +} +function* loadConfig(name, dirname, envName, caller) { + const filepath = (((v, w) => (v = v.split("."), w = w.split("."), +v[0] > +w[0] || v[0] == w[0] && +v[1] >= +w[1]))(process.versions.node, "8.9") ? require.resolve : (r, { + paths: [b] + }, M = require("module")) => { + let f = M._findPath(r, M._nodeModulePaths(b).concat(b)); + if (f) return f; + f = new Error(`Cannot resolve module '${r}'`); + f.code = "MODULE_NOT_FOUND"; + throw f; + })(name, { + paths: [dirname] + }); + const conf = yield* readConfig(filepath, envName, caller); + if (!conf) { + throw new _configError.default(`Config file contains no configuration data`, filepath); + } + debug("Loaded config %o from %o.", name, dirname); + return conf; +} +function readConfig(filepath, envName, caller) { + const ext = _path().extname(filepath); + switch (ext) { + case ".js": + case ".cjs": + case ".mjs": + case ".ts": + case ".cts": + case ".mts": + return readConfigCode(filepath, { + envName, + caller + }); + default: + return readConfigJSON5(filepath); + } +} +function* resolveShowConfigPath(dirname) { + const targetPath = process.env.BABEL_SHOW_CONFIG_FOR; + if (targetPath != null) { + const absolutePath = _path().resolve(dirname, targetPath); + const stats = yield* fs.stat(absolutePath); + if (!stats.isFile()) { + throw new Error(`${absolutePath}: BABEL_SHOW_CONFIG_FOR must refer to a regular file, directories are not supported.`); + } + return absolutePath; + } + return null; +} +function throwConfigError(filepath) { + throw new _configError.default(`\ +Caching was left unconfigured. Babel's plugins, presets, and .babelrc.js files can be configured +for various types of caching, using the first param of their handler functions: + +module.exports = function(api) { + // The API exposes the following: + + // Cache the returned value forever and don't call this function again. + api.cache(true); + + // Don't cache at all. Not recommended because it will be very slow. + api.cache(false); + + // Cached based on the value of some function. If this function returns a value different from + // a previously-encountered value, the plugins will re-evaluate. + var env = api.cache(() => process.env.NODE_ENV); + + // If testing for a specific env, we recommend specifics to avoid instantiating a plugin for + // any possible NODE_ENV value that might come up during plugin execution. + var isProd = api.cache(() => process.env.NODE_ENV === "production"); + + // .cache(fn) will perform a linear search though instances to find the matching plugin based + // based on previous instantiated plugins. If you want to recreate the plugin and discard the + // previous instance whenever something changes, you may use: + var isProd = api.cache.invalidate(() => process.env.NODE_ENV === "production"); + + // Note, we also expose the following more-verbose versions of the above examples: + api.cache.forever(); // api.cache(true) + api.cache.never(); // api.cache(false) + api.cache.using(fn); // api.cache(fn) + + // Return the value that will be cached. + return { }; +};`, filepath); +} +0 && 0; + +//# sourceMappingURL=configuration.js.map diff --git a/node_modules/@babel/core/lib/config/files/configuration.js.map b/node_modules/@babel/core/lib/config/files/configuration.js.map new file mode 100644 index 00000000..734236da --- /dev/null +++ b/node_modules/@babel/core/lib/config/files/configuration.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_debug","data","require","_fs","_path","_json","_gensync","_caching","_configApi","_utils","_moduleTypes","_patternToRegex","_configError","fs","_rewriteStackTrace","_async","debug","buildDebug","ROOT_CONFIG_FILENAMES","exports","RELATIVE_CONFIG_FILENAMES","BABELIGNORE_FILENAME","runConfig","makeWeakCache","options","cache","endHiddenCallStack","makeConfigAPI","cacheNeedsConfiguration","configured","readConfigCode","filepath","nodeFs","existsSync","loadCodeDefault","isAsync","Array","isArray","ConfigError","then","catch","throwConfigError","buildConfigFileObject","cfboaf","WeakMap","configFilesByFilepath","get","set","Map","configFile","dirname","path","packageToBabelConfig","makeWeakCacheSync","file","babel","undefined","readConfigJSON5","makeStaticFileCache","content","json5","parse","err","message","$schema","readIgnoreConfig","ignoreDir","ignorePatterns","split","map","line","replace","trim","filter","Boolean","pattern","ignore","pathPatternToRegex","findConfigUpwards","rootDir","filename","join","nextDir","findRelativeConfig","packageData","envName","caller","config","loc","directories","_packageData$pkg","loadOneConfig","pkg","ignoreLoc","findRootConfig","names","previousConfig","configs","gensync","all","readConfig","reduce","basename","loadConfig","name","v","w","process","versions","node","resolve","r","paths","b","M","f","_findPath","_nodeModulePaths","concat","Error","code","conf","ext","extname","resolveShowConfigPath","targetPath","env","BABEL_SHOW_CONFIG_FOR","absolutePath","stats","stat","isFile"],"sources":["../../../src/config/files/configuration.ts"],"sourcesContent":["import buildDebug from \"debug\";\nimport nodeFs from \"node:fs\";\nimport path from \"node:path\";\nimport json5 from \"json5\";\nimport gensync from \"gensync\";\nimport type { Handler } from \"gensync\";\nimport { makeWeakCache, makeWeakCacheSync } from \"../caching.ts\";\nimport type { CacheConfigurator } from \"../caching.ts\";\nimport { makeConfigAPI } from \"../helpers/config-api.ts\";\nimport type { ConfigAPI } from \"../helpers/config-api.ts\";\nimport { makeStaticFileCache } from \"./utils.ts\";\nimport loadCodeDefault from \"./module-types.ts\";\nimport pathPatternToRegex from \"../pattern-to-regex.ts\";\nimport type { FilePackageData, RelativeConfig, ConfigFile } from \"./types.ts\";\nimport type { CallerMetadata, InputOptions } from \"../validation/options.ts\";\nimport ConfigError from \"../../errors/config-error.ts\";\n\nimport * as fs from \"../../gensync-utils/fs.ts\";\n\nimport { createRequire } from \"node:module\";\nimport { endHiddenCallStack } from \"../../errors/rewrite-stack-trace.ts\";\nimport { isAsync } from \"../../gensync-utils/async.ts\";\nconst require = createRequire(import.meta.url);\n\nconst debug = buildDebug(\"babel:config:loading:files:configuration\");\n\nexport const ROOT_CONFIG_FILENAMES = [\n \"babel.config.js\",\n \"babel.config.cjs\",\n \"babel.config.mjs\",\n \"babel.config.json\",\n \"babel.config.cts\",\n];\nconst RELATIVE_CONFIG_FILENAMES = [\n \".babelrc\",\n \".babelrc.js\",\n \".babelrc.cjs\",\n \".babelrc.mjs\",\n \".babelrc.json\",\n \".babelrc.cts\",\n];\n\nconst BABELIGNORE_FILENAME = \".babelignore\";\n\ntype ConfigCacheData = {\n envName: string;\n caller: CallerMetadata | undefined;\n};\n\nconst runConfig = makeWeakCache(function* runConfig(\n options: Function,\n cache: CacheConfigurator,\n): Handler<{\n options: InputOptions | null;\n cacheNeedsConfiguration: boolean;\n}> {\n // if we want to make it possible to use async configs\n yield* [];\n\n return {\n options: endHiddenCallStack(options as any as (api: ConfigAPI) => unknown)(\n makeConfigAPI(cache),\n ),\n cacheNeedsConfiguration: !cache.configured(),\n };\n});\n\nfunction* readConfigCode(\n filepath: string,\n data: ConfigCacheData,\n): Handler {\n if (!nodeFs.existsSync(filepath)) return null;\n\n let options = yield* loadCodeDefault(\n filepath,\n (yield* isAsync()) ? \"auto\" : \"require\",\n \"You appear to be using a native ECMAScript module configuration \" +\n \"file, which is only supported when running Babel asynchronously \" +\n \"or when using the Node.js `--experimental-require-module` flag.\",\n \"You appear to be using a configuration file that contains top-level \" +\n \"await, which is only supported when running Babel asynchronously.\",\n );\n\n let cacheNeedsConfiguration = false;\n if (typeof options === \"function\") {\n ({ options, cacheNeedsConfiguration } = yield* runConfig(options, data));\n }\n\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new ConfigError(\n `Configuration should be an exported JavaScript object.`,\n filepath,\n );\n }\n\n // @ts-expect-error todo(flow->ts)\n if (typeof options.then === \"function\") {\n // @ts-expect-error We use ?. in case options is a thenable but not a promise\n options.catch?.(() => {});\n throw new ConfigError(\n `You appear to be using an async configuration, ` +\n `which your current version of Babel does not support. ` +\n `We may add support for this in the future, ` +\n `but if you're on the most recent version of @babel/core and still ` +\n `seeing this error, then you'll need to synchronously return your config.`,\n filepath,\n );\n }\n\n if (cacheNeedsConfiguration) throwConfigError(filepath);\n\n return buildConfigFileObject(options, filepath);\n}\n\n// We cache the generated ConfigFile object rather than creating a new one\n// every time, so that it can be used as a cache key in other functions.\nconst cfboaf /* configFilesByOptionsAndFilepath */ = new WeakMap<\n InputOptions,\n Map\n>();\nfunction buildConfigFileObject(\n options: InputOptions,\n filepath: string,\n): ConfigFile {\n let configFilesByFilepath = cfboaf.get(options);\n if (!configFilesByFilepath) {\n cfboaf.set(options, (configFilesByFilepath = new Map()));\n }\n\n let configFile = configFilesByFilepath.get(filepath);\n if (!configFile) {\n configFile = {\n filepath,\n dirname: path.dirname(filepath),\n options,\n };\n configFilesByFilepath.set(filepath, configFile);\n }\n\n return configFile;\n}\n\nconst packageToBabelConfig = makeWeakCacheSync(\n (file: ConfigFile): ConfigFile | null => {\n const babel: unknown = file.options.babel;\n\n if (babel === undefined) return null;\n\n if (typeof babel !== \"object\" || Array.isArray(babel) || babel === null) {\n throw new ConfigError(`.babel property must be an object`, file.filepath);\n }\n\n return {\n filepath: file.filepath,\n dirname: file.dirname,\n options: babel,\n };\n },\n);\n\nconst readConfigJSON5 = makeStaticFileCache((filepath, content): ConfigFile => {\n let options;\n try {\n options = json5.parse(content);\n } catch (err) {\n throw new ConfigError(\n `Error while parsing config - ${err.message}`,\n filepath,\n );\n }\n\n if (!options) throw new ConfigError(`No config detected`, filepath);\n\n if (typeof options !== \"object\") {\n throw new ConfigError(`Config returned typeof ${typeof options}`, filepath);\n }\n if (Array.isArray(options)) {\n throw new ConfigError(`Expected config object but found array`, filepath);\n }\n\n delete options.$schema;\n\n return {\n filepath,\n dirname: path.dirname(filepath),\n options,\n };\n});\n\nconst readIgnoreConfig = makeStaticFileCache((filepath, content) => {\n const ignoreDir = path.dirname(filepath);\n const ignorePatterns = content\n .split(\"\\n\")\n .map(line =>\n line.replace(process.env.BABEL_8_BREAKING ? /^#.*$/ : /#.*$/, \"\").trim(),\n )\n .filter(Boolean);\n\n for (const pattern of ignorePatterns) {\n if (pattern[0] === \"!\") {\n throw new ConfigError(\n `Negation of file paths is not supported.`,\n filepath,\n );\n }\n }\n\n return {\n filepath,\n dirname: path.dirname(filepath),\n ignore: ignorePatterns.map(pattern =>\n pathPatternToRegex(pattern, ignoreDir),\n ),\n };\n});\n\nexport function findConfigUpwards(rootDir: string): string | null {\n let dirname = rootDir;\n for (;;) {\n for (const filename of ROOT_CONFIG_FILENAMES) {\n if (nodeFs.existsSync(path.join(dirname, filename))) {\n return dirname;\n }\n }\n\n const nextDir = path.dirname(dirname);\n if (dirname === nextDir) break;\n dirname = nextDir;\n }\n\n return null;\n}\n\nexport function* findRelativeConfig(\n packageData: FilePackageData,\n envName: string,\n caller: CallerMetadata | undefined,\n): Handler {\n let config = null;\n let ignore = null;\n\n const dirname = path.dirname(packageData.filepath);\n\n for (const loc of packageData.directories) {\n if (!config) {\n config = yield* loadOneConfig(\n RELATIVE_CONFIG_FILENAMES,\n loc,\n envName,\n caller,\n packageData.pkg?.dirname === loc\n ? packageToBabelConfig(packageData.pkg)\n : null,\n );\n }\n\n if (!ignore) {\n const ignoreLoc = path.join(loc, BABELIGNORE_FILENAME);\n ignore = yield* readIgnoreConfig(ignoreLoc);\n\n if (ignore) {\n debug(\"Found ignore %o from %o.\", ignore.filepath, dirname);\n }\n }\n }\n\n return { config, ignore };\n}\n\nexport function findRootConfig(\n dirname: string,\n envName: string,\n caller: CallerMetadata | undefined,\n): Handler {\n return loadOneConfig(ROOT_CONFIG_FILENAMES, dirname, envName, caller);\n}\n\nfunction* loadOneConfig(\n names: string[],\n dirname: string,\n envName: string,\n caller: CallerMetadata | undefined,\n previousConfig: ConfigFile | null = null,\n): Handler {\n const configs = yield* gensync.all(\n names.map(filename =>\n readConfig(path.join(dirname, filename), envName, caller),\n ),\n );\n const config = configs.reduce((previousConfig: ConfigFile | null, config) => {\n if (config && previousConfig) {\n throw new ConfigError(\n `Multiple configuration files found. Please remove one:\\n` +\n ` - ${path.basename(previousConfig.filepath)}\\n` +\n ` - ${config.filepath}\\n` +\n `from ${dirname}`,\n );\n }\n\n return config || previousConfig;\n }, previousConfig);\n\n if (config) {\n debug(\"Found configuration %o from %o.\", config.filepath, dirname);\n }\n return config;\n}\n\nexport function* loadConfig(\n name: string,\n dirname: string,\n envName: string,\n caller: CallerMetadata | undefined,\n): Handler {\n const filepath = require.resolve(name, { paths: [dirname] });\n\n const conf = yield* readConfig(filepath, envName, caller);\n if (!conf) {\n throw new ConfigError(\n `Config file contains no configuration data`,\n filepath,\n );\n }\n\n debug(\"Loaded config %o from %o.\", name, dirname);\n return conf;\n}\n\n/**\n * Read the given config file, returning the result. Returns null if no config was found, but will\n * throw if there are parsing errors while loading a config.\n */\nfunction readConfig(\n filepath: string,\n envName: string,\n caller: CallerMetadata | undefined,\n): Handler {\n const ext = path.extname(filepath);\n switch (ext) {\n case \".js\":\n case \".cjs\":\n case \".mjs\":\n case \".ts\":\n case \".cts\":\n case \".mts\":\n return readConfigCode(filepath, { envName, caller });\n default:\n return readConfigJSON5(filepath);\n }\n}\n\nexport function* resolveShowConfigPath(\n dirname: string,\n): Handler {\n const targetPath = process.env.BABEL_SHOW_CONFIG_FOR;\n if (targetPath != null) {\n const absolutePath = path.resolve(dirname, targetPath);\n const stats = yield* fs.stat(absolutePath);\n if (!stats.isFile()) {\n throw new Error(\n `${absolutePath}: BABEL_SHOW_CONFIG_FOR must refer to a regular file, directories are not supported.`,\n );\n }\n return absolutePath;\n }\n return null;\n}\n\nfunction throwConfigError(filepath: string): never {\n throw new ConfigError(\n `\\\nCaching was left unconfigured. Babel's plugins, presets, and .babelrc.js files can be configured\nfor various types of caching, using the first param of their handler functions:\n\nmodule.exports = function(api) {\n // The API exposes the following:\n\n // Cache the returned value forever and don't call this function again.\n api.cache(true);\n\n // Don't cache at all. Not recommended because it will be very slow.\n api.cache(false);\n\n // Cached based on the value of some function. If this function returns a value different from\n // a previously-encountered value, the plugins will re-evaluate.\n var env = api.cache(() => process.env.NODE_ENV);\n\n // If testing for a specific env, we recommend specifics to avoid instantiating a plugin for\n // any possible NODE_ENV value that might come up during plugin execution.\n var isProd = api.cache(() => process.env.NODE_ENV === \"production\");\n\n // .cache(fn) will perform a linear search though instances to find the matching plugin based\n // based on previous instantiated plugins. If you want to recreate the plugin and discard the\n // previous instance whenever something changes, you may use:\n var isProd = api.cache.invalidate(() => process.env.NODE_ENV === \"production\");\n\n // Note, we also expose the following more-verbose versions of the above examples:\n api.cache.forever(); // api.cache(true)\n api.cache.never(); // api.cache(false)\n api.cache.using(fn); // api.cache(fn)\n\n // Return the value that will be cached.\n return { };\n};`,\n filepath,\n );\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/files/import.cjs b/node_modules/@babel/core/lib/config/files/import.cjs new file mode 100644 index 00000000..46fa5d5c --- /dev/null +++ b/node_modules/@babel/core/lib/config/files/import.cjs @@ -0,0 +1,6 @@ +module.exports = function import_(filepath) { + return import(filepath); +}; +0 && 0; + +//# sourceMappingURL=import.cjs.map diff --git a/node_modules/@babel/core/lib/config/files/import.cjs.map b/node_modules/@babel/core/lib/config/files/import.cjs.map new file mode 100644 index 00000000..2200da80 --- /dev/null +++ b/node_modules/@babel/core/lib/config/files/import.cjs.map @@ -0,0 +1 @@ +{"version":3,"names":["module","exports","import_","filepath"],"sources":["../../../src/config/files/import.cjs"],"sourcesContent":["// We keep this in a separate file so that in older node versions, where\n// import() isn't supported, we can try/catch around the require() call\n// when loading this file.\n\nmodule.exports = function import_(filepath) {\n return import(filepath);\n};\n"],"mappings":"AAIAA,MAAM,CAACC,OAAO,GAAG,SAASC,OAAOA,CAACC,QAAQ,EAAE;EAC1C,OAAO,OAAOA,QAAQ,CAAC;AACzB,CAAC;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/files/index-browser.js b/node_modules/@babel/core/lib/config/files/index-browser.js new file mode 100644 index 00000000..d8ba7dbc --- /dev/null +++ b/node_modules/@babel/core/lib/config/files/index-browser.js @@ -0,0 +1,58 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ROOT_CONFIG_FILENAMES = void 0; +exports.findConfigUpwards = findConfigUpwards; +exports.findPackageData = findPackageData; +exports.findRelativeConfig = findRelativeConfig; +exports.findRootConfig = findRootConfig; +exports.loadConfig = loadConfig; +exports.loadPlugin = loadPlugin; +exports.loadPreset = loadPreset; +exports.resolvePlugin = resolvePlugin; +exports.resolvePreset = resolvePreset; +exports.resolveShowConfigPath = resolveShowConfigPath; +function findConfigUpwards(rootDir) { + return null; +} +function* findPackageData(filepath) { + return { + filepath, + directories: [], + pkg: null, + isPackage: false + }; +} +function* findRelativeConfig(pkgData, envName, caller) { + return { + config: null, + ignore: null + }; +} +function* findRootConfig(dirname, envName, caller) { + return null; +} +function* loadConfig(name, dirname, envName, caller) { + throw new Error(`Cannot load ${name} relative to ${dirname} in a browser`); +} +function* resolveShowConfigPath(dirname) { + return null; +} +const ROOT_CONFIG_FILENAMES = exports.ROOT_CONFIG_FILENAMES = []; +function resolvePlugin(name, dirname) { + return null; +} +function resolvePreset(name, dirname) { + return null; +} +function loadPlugin(name, dirname) { + throw new Error(`Cannot load plugin ${name} relative to ${dirname} in a browser`); +} +function loadPreset(name, dirname) { + throw new Error(`Cannot load preset ${name} relative to ${dirname} in a browser`); +} +0 && 0; + +//# sourceMappingURL=index-browser.js.map diff --git a/node_modules/@babel/core/lib/config/files/index-browser.js.map b/node_modules/@babel/core/lib/config/files/index-browser.js.map new file mode 100644 index 00000000..e10ddeee --- /dev/null +++ b/node_modules/@babel/core/lib/config/files/index-browser.js.map @@ -0,0 +1 @@ +{"version":3,"names":["findConfigUpwards","rootDir","findPackageData","filepath","directories","pkg","isPackage","findRelativeConfig","pkgData","envName","caller","config","ignore","findRootConfig","dirname","loadConfig","name","Error","resolveShowConfigPath","ROOT_CONFIG_FILENAMES","exports","resolvePlugin","resolvePreset","loadPlugin","loadPreset"],"sources":["../../../src/config/files/index-browser.ts"],"sourcesContent":["/* c8 ignore start */\n\nimport type { Handler } from \"gensync\";\n\nimport type {\n ConfigFile,\n IgnoreFile,\n RelativeConfig,\n FilePackageData,\n} from \"./types.ts\";\n\nimport type { CallerMetadata } from \"../validation/options.ts\";\n\nexport type { ConfigFile, IgnoreFile, RelativeConfig, FilePackageData };\n\nexport function findConfigUpwards(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n rootDir: string,\n): string | null {\n return null;\n}\n\n// eslint-disable-next-line require-yield\nexport function* findPackageData(filepath: string): Handler {\n return {\n filepath,\n directories: [],\n pkg: null,\n isPackage: false,\n };\n}\n\n// eslint-disable-next-line require-yield\nexport function* findRelativeConfig(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n pkgData: FilePackageData,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n envName: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n caller: CallerMetadata | undefined,\n): Handler {\n return { config: null, ignore: null };\n}\n\n// eslint-disable-next-line require-yield\nexport function* findRootConfig(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dirname: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n envName: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n caller: CallerMetadata | undefined,\n): Handler {\n return null;\n}\n\n// eslint-disable-next-line require-yield\nexport function* loadConfig(\n name: string,\n dirname: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n envName: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n caller: CallerMetadata | undefined,\n): Handler {\n throw new Error(`Cannot load ${name} relative to ${dirname} in a browser`);\n}\n\n// eslint-disable-next-line require-yield\nexport function* resolveShowConfigPath(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dirname: string,\n): Handler {\n return null;\n}\n\nexport const ROOT_CONFIG_FILENAMES: string[] = [];\n\ntype Resolved =\n | { loader: \"require\"; filepath: string }\n | { loader: \"import\"; filepath: string };\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function resolvePlugin(name: string, dirname: string): Resolved | null {\n return null;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function resolvePreset(name: string, dirname: string): Resolved | null {\n return null;\n}\n\nexport function loadPlugin(\n name: string,\n dirname: string,\n): Handler<{\n filepath: string;\n value: unknown;\n}> {\n throw new Error(\n `Cannot load plugin ${name} relative to ${dirname} in a browser`,\n );\n}\n\nexport function loadPreset(\n name: string,\n dirname: string,\n): Handler<{\n filepath: string;\n value: unknown;\n}> {\n throw new Error(\n `Cannot load preset ${name} relative to ${dirname} in a browser`,\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAeO,SAASA,iBAAiBA,CAE/BC,OAAe,EACA;EACf,OAAO,IAAI;AACb;AAGO,UAAUC,eAAeA,CAACC,QAAgB,EAA4B;EAC3E,OAAO;IACLA,QAAQ;IACRC,WAAW,EAAE,EAAE;IACfC,GAAG,EAAE,IAAI;IACTC,SAAS,EAAE;EACb,CAAC;AACH;AAGO,UAAUC,kBAAkBA,CAEjCC,OAAwB,EAExBC,OAAe,EAEfC,MAAkC,EACT;EACzB,OAAO;IAAEC,MAAM,EAAE,IAAI;IAAEC,MAAM,EAAE;EAAK,CAAC;AACvC;AAGO,UAAUC,cAAcA,CAE7BC,OAAe,EAEfL,OAAe,EAEfC,MAAkC,EACN;EAC5B,OAAO,IAAI;AACb;AAGO,UAAUK,UAAUA,CACzBC,IAAY,EACZF,OAAe,EAEfL,OAAe,EAEfC,MAAkC,EACb;EACrB,MAAM,IAAIO,KAAK,CAAC,eAAeD,IAAI,gBAAgBF,OAAO,eAAe,CAAC;AAC5E;AAGO,UAAUI,qBAAqBA,CAEpCJ,OAAe,EACS;EACxB,OAAO,IAAI;AACb;AAEO,MAAMK,qBAA+B,GAAAC,OAAA,CAAAD,qBAAA,GAAG,EAAE;AAO1C,SAASE,aAAaA,CAACL,IAAY,EAAEF,OAAe,EAAmB;EAC5E,OAAO,IAAI;AACb;AAGO,SAASQ,aAAaA,CAACN,IAAY,EAAEF,OAAe,EAAmB;EAC5E,OAAO,IAAI;AACb;AAEO,SAASS,UAAUA,CACxBP,IAAY,EACZF,OAAe,EAId;EACD,MAAM,IAAIG,KAAK,CACb,sBAAsBD,IAAI,gBAAgBF,OAAO,eACnD,CAAC;AACH;AAEO,SAASU,UAAUA,CACxBR,IAAY,EACZF,OAAe,EAId;EACD,MAAM,IAAIG,KAAK,CACb,sBAAsBD,IAAI,gBAAgBF,OAAO,eACnD,CAAC;AACH;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/files/index.js b/node_modules/@babel/core/lib/config/files/index.js new file mode 100644 index 00000000..8750f40a --- /dev/null +++ b/node_modules/@babel/core/lib/config/files/index.js @@ -0,0 +1,78 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "ROOT_CONFIG_FILENAMES", { + enumerable: true, + get: function () { + return _configuration.ROOT_CONFIG_FILENAMES; + } +}); +Object.defineProperty(exports, "findConfigUpwards", { + enumerable: true, + get: function () { + return _configuration.findConfigUpwards; + } +}); +Object.defineProperty(exports, "findPackageData", { + enumerable: true, + get: function () { + return _package.findPackageData; + } +}); +Object.defineProperty(exports, "findRelativeConfig", { + enumerable: true, + get: function () { + return _configuration.findRelativeConfig; + } +}); +Object.defineProperty(exports, "findRootConfig", { + enumerable: true, + get: function () { + return _configuration.findRootConfig; + } +}); +Object.defineProperty(exports, "loadConfig", { + enumerable: true, + get: function () { + return _configuration.loadConfig; + } +}); +Object.defineProperty(exports, "loadPlugin", { + enumerable: true, + get: function () { + return _plugins.loadPlugin; + } +}); +Object.defineProperty(exports, "loadPreset", { + enumerable: true, + get: function () { + return _plugins.loadPreset; + } +}); +Object.defineProperty(exports, "resolvePlugin", { + enumerable: true, + get: function () { + return _plugins.resolvePlugin; + } +}); +Object.defineProperty(exports, "resolvePreset", { + enumerable: true, + get: function () { + return _plugins.resolvePreset; + } +}); +Object.defineProperty(exports, "resolveShowConfigPath", { + enumerable: true, + get: function () { + return _configuration.resolveShowConfigPath; + } +}); +var _package = require("./package.js"); +var _configuration = require("./configuration.js"); +var _plugins = require("./plugins.js"); +({}); +0 && 0; + +//# sourceMappingURL=index.js.map diff --git a/node_modules/@babel/core/lib/config/files/index.js.map b/node_modules/@babel/core/lib/config/files/index.js.map new file mode 100644 index 00000000..1e473b82 --- /dev/null +++ b/node_modules/@babel/core/lib/config/files/index.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_package","require","_configuration","_plugins"],"sources":["../../../src/config/files/index.ts"],"sourcesContent":["type indexBrowserType = typeof import(\"./index-browser\");\ntype indexType = typeof import(\"./index\");\n\n// Kind of gross, but essentially asserting that the exports of this module are the same as the\n// exports of index-browser, since this file may be replaced at bundle time with index-browser.\n({}) as any as indexBrowserType as indexType;\n\nexport { findPackageData } from \"./package.ts\";\n\nexport {\n findConfigUpwards,\n findRelativeConfig,\n findRootConfig,\n loadConfig,\n resolveShowConfigPath,\n ROOT_CONFIG_FILENAMES,\n} from \"./configuration.ts\";\nexport type {\n ConfigFile,\n IgnoreFile,\n RelativeConfig,\n FilePackageData,\n} from \"./types.ts\";\nexport {\n loadPlugin,\n loadPreset,\n resolvePlugin,\n resolvePreset,\n} from \"./plugins.ts\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,IAAAA,QAAA,GAAAC,OAAA;AAEA,IAAAC,cAAA,GAAAD,OAAA;AAcA,IAAAE,QAAA,GAAAF,OAAA;AAlBA,CAAC,CAAC,CAAC;AAA0C","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/files/module-types.js b/node_modules/@babel/core/lib/config/files/module-types.js new file mode 100644 index 00000000..676f3479 --- /dev/null +++ b/node_modules/@babel/core/lib/config/files/module-types.js @@ -0,0 +1,206 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = loadCodeDefault; +exports.supportsESM = void 0; +var _async = require("../../gensync-utils/async.js"); +function _path() { + const data = require("path"); + _path = function () { + return data; + }; + return data; +} +function _url() { + const data = require("url"); + _url = function () { + return data; + }; + return data; +} +require("module"); +function _semver() { + const data = require("semver"); + _semver = function () { + return data; + }; + return data; +} +function _debug() { + const data = require("debug"); + _debug = function () { + return data; + }; + return data; +} +var _rewriteStackTrace = require("../../errors/rewrite-stack-trace.js"); +var _configError = require("../../errors/config-error.js"); +var _transformFile = require("../../transform-file.js"); +function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } +function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } +const debug = _debug()("babel:config:loading:files:module-types"); +{ + try { + var import_ = require("./import.cjs"); + } catch (_unused) {} +} +const supportsESM = exports.supportsESM = _semver().satisfies(process.versions.node, "^12.17 || >=13.2"); +const LOADING_CJS_FILES = new Set(); +function loadCjsDefault(filepath) { + if (LOADING_CJS_FILES.has(filepath)) { + debug("Auto-ignoring usage of config %o.", filepath); + return {}; + } + let module; + try { + LOADING_CJS_FILES.add(filepath); + module = (0, _rewriteStackTrace.endHiddenCallStack)(require)(filepath); + } finally { + LOADING_CJS_FILES.delete(filepath); + } + { + return module != null && (module.__esModule || module[Symbol.toStringTag] === "Module") ? module.default || (arguments[1] ? module : undefined) : module; + } +} +const loadMjsFromPath = (0, _rewriteStackTrace.endHiddenCallStack)(function () { + var _loadMjsFromPath = _asyncToGenerator(function* (filepath) { + const url = (0, _url().pathToFileURL)(filepath).toString() + "?import"; + { + if (!import_) { + throw new _configError.default("Internal error: Native ECMAScript modules aren't supported by this platform.\n", filepath); + } + return yield import_(url); + } + }); + function loadMjsFromPath(_x) { + return _loadMjsFromPath.apply(this, arguments); + } + return loadMjsFromPath; +}()); +const SUPPORTED_EXTENSIONS = { + ".js": "unknown", + ".mjs": "esm", + ".cjs": "cjs", + ".ts": "unknown", + ".mts": "esm", + ".cts": "cjs" +}; +const asyncModules = new Set(); +function* loadCodeDefault(filepath, loader, esmError, tlaError) { + let async; + const ext = _path().extname(filepath); + const isTS = ext === ".ts" || ext === ".cts" || ext === ".mts"; + const type = SUPPORTED_EXTENSIONS[hasOwnProperty.call(SUPPORTED_EXTENSIONS, ext) ? ext : ".js"]; + const pattern = `${loader} ${type}`; + switch (pattern) { + case "require cjs": + case "auto cjs": + if (isTS) { + return ensureTsSupport(filepath, ext, () => loadCjsDefault(filepath)); + } else { + return loadCjsDefault(filepath, arguments[2]); + } + case "auto unknown": + case "require unknown": + case "require esm": + try { + if (isTS) { + return ensureTsSupport(filepath, ext, () => loadCjsDefault(filepath)); + } else { + return loadCjsDefault(filepath, arguments[2]); + } + } catch (e) { + if (e.code === "ERR_REQUIRE_ASYNC_MODULE" || e.code === "ERR_REQUIRE_CYCLE_MODULE" && asyncModules.has(filepath)) { + asyncModules.add(filepath); + if (!(async != null ? async : async = yield* (0, _async.isAsync)())) { + throw new _configError.default(tlaError, filepath); + } + } else if (e.code === "ERR_REQUIRE_ESM" || type === "esm") {} else { + throw e; + } + } + case "auto esm": + if (async != null ? async : async = yield* (0, _async.isAsync)()) { + const promise = isTS ? ensureTsSupport(filepath, ext, () => loadMjsFromPath(filepath)) : loadMjsFromPath(filepath); + return (yield* (0, _async.waitFor)(promise)).default; + } + throw new _configError.default(esmError, filepath); + default: + throw new Error("Internal Babel error: unreachable code."); + } +} +function ensureTsSupport(filepath, ext, callback) { + if (require.extensions[".ts"] || require.extensions[".cts"] || require.extensions[".mts"]) { + return callback(); + } + if (ext !== ".cts") { + throw new _configError.default(`\ +You are using a ${ext} config file, but Babel only supports transpiling .cts configs. Either: +- Use a .cts config file +- Update to Node.js 23.6.0, which has native TypeScript support +- Install ts-node to transpile ${ext} files on the fly\ +`, filepath); + } + const opts = { + babelrc: false, + configFile: false, + sourceType: "unambiguous", + sourceMaps: "inline", + sourceFileName: _path().basename(filepath), + presets: [[getTSPreset(filepath), Object.assign({ + onlyRemoveTypeImports: true, + optimizeConstEnums: true + }, { + allowDeclareFields: true + })]] + }; + let handler = function (m, filename) { + if (handler && filename.endsWith(".cts")) { + try { + return m._compile((0, _transformFile.transformFileSync)(filename, Object.assign({}, opts, { + filename + })).code, filename); + } catch (error) { + const packageJson = require("@babel/preset-typescript/package.json"); + if (_semver().lt(packageJson.version, "7.21.4")) { + console.error("`.cts` configuration file failed to load, please try to update `@babel/preset-typescript`."); + } + throw error; + } + } + return require.extensions[".js"](m, filename); + }; + require.extensions[ext] = handler; + try { + return callback(); + } finally { + if (require.extensions[ext] === handler) delete require.extensions[ext]; + handler = undefined; + } +} +function getTSPreset(filepath) { + try { + return require("@babel/preset-typescript"); + } catch (error) { + if (error.code !== "MODULE_NOT_FOUND") throw error; + let message = "You appear to be using a .cts file as Babel configuration, but the `@babel/preset-typescript` package was not found: please install it!"; + { + if (process.versions.pnp) { + message += ` +If you are using Yarn Plug'n'Play, you may also need to add the following configuration to your .yarnrc.yml file: + +packageExtensions: +\t"@babel/core@*": +\t\tpeerDependencies: +\t\t\t"@babel/preset-typescript": "*" +`; + } + } + throw new _configError.default(message, filepath); + } +} +0 && 0; + +//# sourceMappingURL=module-types.js.map diff --git a/node_modules/@babel/core/lib/config/files/module-types.js.map b/node_modules/@babel/core/lib/config/files/module-types.js.map new file mode 100644 index 00000000..59e79a4d --- /dev/null +++ b/node_modules/@babel/core/lib/config/files/module-types.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_async","require","_path","data","_url","_semver","_debug","_rewriteStackTrace","_configError","_transformFile","asyncGeneratorStep","n","t","e","r","o","a","c","i","u","value","done","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","debug","buildDebug","import_","_unused","supportsESM","exports","semver","satisfies","process","versions","node","LOADING_CJS_FILES","Set","loadCjsDefault","filepath","has","module","add","endHiddenCallStack","delete","__esModule","Symbol","toStringTag","default","undefined","loadMjsFromPath","_loadMjsFromPath","url","pathToFileURL","toString","ConfigError","_x","SUPPORTED_EXTENSIONS","asyncModules","loadCodeDefault","loader","esmError","tlaError","async","ext","path","extname","isTS","type","hasOwnProperty","call","pattern","ensureTsSupport","code","isAsync","promise","waitFor","Error","callback","extensions","opts","babelrc","configFile","sourceType","sourceMaps","sourceFileName","basename","presets","getTSPreset","Object","assign","onlyRemoveTypeImports","optimizeConstEnums","allowDeclareFields","handler","m","filename","endsWith","_compile","transformFileSync","error","packageJson","lt","version","console","message","pnp"],"sources":["../../../src/config/files/module-types.ts"],"sourcesContent":["import { isAsync, waitFor } from \"../../gensync-utils/async.ts\";\nimport type { Handler } from \"gensync\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { createRequire } from \"node:module\";\nimport semver from \"semver\";\nimport buildDebug from \"debug\";\n\nimport { endHiddenCallStack } from \"../../errors/rewrite-stack-trace.ts\";\nimport ConfigError from \"../../errors/config-error.ts\";\n\nimport type { InputOptions } from \"../index.ts\";\nimport { transformFileSync } from \"../../transform-file.ts\";\n\nconst debug = buildDebug(\"babel:config:loading:files:module-types\");\n\nconst require = createRequire(import.meta.url);\n\nif (!process.env.BABEL_8_BREAKING) {\n try {\n // Old Node.js versions don't support import() syntax.\n // eslint-disable-next-line no-var\n var import_:\n | ((specifier: string | URL) => any)\n | undefined = require(\"./import.cjs\");\n } catch {}\n}\n\nexport const supportsESM = semver.satisfies(\n process.versions.node,\n // older versions, starting from 10, support the dynamic\n // import syntax but always return a rejected promise.\n \"^12.17 || >=13.2\",\n);\n\nconst LOADING_CJS_FILES = new Set();\n\nfunction loadCjsDefault(filepath: string) {\n // The `require()` call below can make this code reentrant if a require hook\n // like @babel/register has been loaded into the system. That would cause\n // Babel to attempt to compile the `.babelrc.js` file as it loads below. To\n // cover this case, we auto-ignore re-entrant config processing. ESM loaders\n // do not have this problem, because loaders do not apply to themselves.\n if (LOADING_CJS_FILES.has(filepath)) {\n debug(\"Auto-ignoring usage of config %o.\", filepath);\n return {};\n }\n\n let module;\n try {\n LOADING_CJS_FILES.add(filepath);\n module = endHiddenCallStack(require)(filepath);\n } finally {\n LOADING_CJS_FILES.delete(filepath);\n }\n\n if (process.env.BABEL_8_BREAKING) {\n return module != null &&\n (module.__esModule || module[Symbol.toStringTag] === \"Module\")\n ? module.default\n : module;\n } else {\n return module != null &&\n (module.__esModule || module[Symbol.toStringTag] === \"Module\")\n ? module.default ||\n /* fallbackToTranspiledModule */ (arguments[1] ? module : undefined)\n : module;\n }\n}\n\nconst loadMjsFromPath = endHiddenCallStack(async function loadMjsFromPath(\n filepath: string,\n) {\n // Add ?import as a workaround for https://github.com/nodejs/node/issues/55500\n const url = pathToFileURL(filepath).toString() + \"?import\";\n\n if (process.env.BABEL_8_BREAKING) {\n return await import(url);\n } else {\n if (!import_) {\n throw new ConfigError(\n \"Internal error: Native ECMAScript modules aren't supported by this platform.\\n\",\n filepath,\n );\n }\n\n return await import_(url);\n }\n});\n\nconst SUPPORTED_EXTENSIONS = {\n \".js\": \"unknown\",\n \".mjs\": \"esm\",\n \".cjs\": \"cjs\",\n \".ts\": \"unknown\",\n \".mts\": \"esm\",\n \".cts\": \"cjs\",\n} as const;\n\nconst asyncModules = new Set();\n\nexport default function* loadCodeDefault(\n filepath: string,\n loader: \"require\" | \"auto\",\n esmError: string,\n tlaError: string,\n): Handler {\n let async;\n\n const ext = path.extname(filepath);\n const isTS = ext === \".ts\" || ext === \".cts\" || ext === \".mts\";\n\n const type =\n SUPPORTED_EXTENSIONS[\n Object.hasOwn(SUPPORTED_EXTENSIONS, ext)\n ? (ext as keyof typeof SUPPORTED_EXTENSIONS)\n : (\".js\" as const)\n ];\n\n const pattern = `${loader} ${type}` as const;\n switch (pattern) {\n case \"require cjs\":\n case \"auto cjs\":\n if (isTS) {\n return ensureTsSupport(filepath, ext, () => loadCjsDefault(filepath));\n } else if (process.env.BABEL_8_BREAKING) {\n return loadCjsDefault(filepath);\n } else {\n return loadCjsDefault(\n filepath,\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n /* fallbackToTranspiledModule */ arguments[2],\n );\n }\n case \"auto unknown\":\n case \"require unknown\":\n case \"require esm\":\n try {\n if (isTS) {\n return ensureTsSupport(filepath, ext, () => loadCjsDefault(filepath));\n } else if (process.env.BABEL_8_BREAKING) {\n return loadCjsDefault(filepath);\n } else {\n return loadCjsDefault(\n filepath,\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n /* fallbackToTranspiledModule */ arguments[2],\n );\n }\n } catch (e) {\n if (\n e.code === \"ERR_REQUIRE_ASYNC_MODULE\" ||\n // Node.js 13.0.0 throws ERR_REQUIRE_CYCLE_MODULE instead of\n // ERR_REQUIRE_ASYNC_MODULE when requiring a module a second time\n // https://github.com/nodejs/node/issues/55516\n // This `asyncModules` won't catch all of such cases, but it will\n // at least catch those caused by Babel trying to load a module twice.\n (e.code === \"ERR_REQUIRE_CYCLE_MODULE\" && asyncModules.has(filepath))\n ) {\n asyncModules.add(filepath);\n if (!(async ??= yield* isAsync())) {\n throw new ConfigError(tlaError, filepath);\n }\n // fall through: require() failed due to TLA\n } else if (\n e.code === \"ERR_REQUIRE_ESM\" ||\n (!process.env.BABEL_8_BREAKING && type === \"esm\")\n ) {\n // fall through: require() failed due to ESM\n } else {\n throw e;\n }\n }\n // fall through: require() failed due to ESM or TLA, try import()\n case \"auto esm\":\n if ((async ??= yield* isAsync())) {\n const promise = isTS\n ? ensureTsSupport(filepath, ext, () => loadMjsFromPath(filepath))\n : loadMjsFromPath(filepath);\n\n return (yield* waitFor(promise)).default;\n }\n throw new ConfigError(esmError, filepath);\n default:\n throw new Error(\"Internal Babel error: unreachable code.\");\n }\n}\n\nfunction ensureTsSupport(\n filepath: string,\n ext: string,\n callback: () => T,\n): T {\n if (\n require.extensions[\".ts\"] ||\n require.extensions[\".cts\"] ||\n require.extensions[\".mts\"]\n ) {\n return callback();\n }\n\n if (ext !== \".cts\") {\n throw new ConfigError(\n `\\\nYou are using a ${ext} config file, but Babel only supports transpiling .cts configs. Either:\n- Use a .cts config file\n- Update to Node.js 23.6.0, which has native TypeScript support\n- Install ts-node to transpile ${ext} files on the fly\\\n`,\n filepath,\n );\n }\n\n const opts: InputOptions = {\n babelrc: false,\n configFile: false,\n sourceType: \"unambiguous\",\n sourceMaps: \"inline\",\n sourceFileName: path.basename(filepath),\n presets: [\n [\n getTSPreset(filepath),\n {\n onlyRemoveTypeImports: true,\n optimizeConstEnums: true,\n ...(process.env.BABEL_8_BREAKING ? {} : { allowDeclareFields: true }),\n },\n ],\n ],\n };\n\n let handler: NodeJS.RequireExtensions[\"\"] = function (m, filename) {\n // If we want to support `.ts`, `.d.ts` must be handled specially.\n if (handler && filename.endsWith(\".cts\")) {\n try {\n // @ts-expect-error Undocumented API\n return m._compile(\n transformFileSync(filename, {\n ...opts,\n filename,\n }).code,\n filename,\n );\n } catch (error) {\n // TODO(Babel 8): Add this as an optional peer dependency\n // eslint-disable-next-line import/no-extraneous-dependencies\n const packageJson = require(\"@babel/preset-typescript/package.json\");\n if (semver.lt(packageJson.version, \"7.21.4\")) {\n console.error(\n \"`.cts` configuration file failed to load, please try to update `@babel/preset-typescript`.\",\n );\n }\n throw error;\n }\n }\n return require.extensions[\".js\"](m, filename);\n };\n require.extensions[ext] = handler;\n\n try {\n return callback();\n } finally {\n if (require.extensions[ext] === handler) delete require.extensions[ext];\n handler = undefined;\n }\n}\n\nfunction getTSPreset(filepath: string) {\n try {\n // eslint-disable-next-line import/no-extraneous-dependencies\n return require(\"@babel/preset-typescript\");\n } catch (error) {\n if (error.code !== \"MODULE_NOT_FOUND\") throw error;\n\n let message =\n \"You appear to be using a .cts file as Babel configuration, but the `@babel/preset-typescript` package was not found: please install it!\";\n\n if (!process.env.BABEL_8_BREAKING) {\n if (process.versions.pnp) {\n // Using Yarn PnP, which doesn't allow requiring packages that are not\n // explicitly specified as dependencies.\n message += `\nIf you are using Yarn Plug'n'Play, you may also need to add the following configuration to your .yarnrc.yml file:\n\npackageExtensions:\n\\t\"@babel/core@*\":\n\\t\\tpeerDependencies:\n\\t\\t\\t\"@babel/preset-typescript\": \"*\"\n`;\n }\n }\n\n throw new ConfigError(message, filepath);\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,SAAAC,MAAA;EAAA,MAAAC,IAAA,GAAAF,OAAA;EAAAC,KAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAC,KAAA;EAAA,MAAAD,IAAA,GAAAF,OAAA;EAAAG,IAAA,YAAAA,CAAA;IAAA,OAAAD,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACAF,OAAA;AACA,SAAAI,QAAA;EAAA,MAAAF,IAAA,GAAAF,OAAA;EAAAI,OAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,OAAA;EAAA,MAAAH,IAAA,GAAAF,OAAA;EAAAK,MAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,IAAAI,kBAAA,GAAAN,OAAA;AACA,IAAAO,YAAA,GAAAP,OAAA;AAGA,IAAAQ,cAAA,GAAAR,OAAA;AAA4D,SAAAS,mBAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,cAAAC,CAAA,GAAAP,CAAA,CAAAK,CAAA,EAAAC,CAAA,GAAAE,CAAA,GAAAD,CAAA,CAAAE,KAAA,WAAAT,CAAA,gBAAAE,CAAA,CAAAF,CAAA,KAAAO,CAAA,CAAAG,IAAA,GAAAT,CAAA,CAAAO,CAAA,IAAAG,OAAA,CAAAC,OAAA,CAAAJ,CAAA,EAAAK,IAAA,CAAAV,CAAA,EAAAC,CAAA;AAAA,SAAAU,kBAAAd,CAAA,6BAAAC,CAAA,SAAAC,CAAA,GAAAa,SAAA,aAAAJ,OAAA,WAAAR,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAL,CAAA,CAAAgB,KAAA,CAAAf,CAAA,EAAAC,CAAA,YAAAe,MAAAjB,CAAA,IAAAD,kBAAA,CAAAM,CAAA,EAAAF,CAAA,EAAAC,CAAA,EAAAa,KAAA,EAAAC,MAAA,UAAAlB,CAAA,cAAAkB,OAAAlB,CAAA,IAAAD,kBAAA,CAAAM,CAAA,EAAAF,CAAA,EAAAC,CAAA,EAAAa,KAAA,EAAAC,MAAA,WAAAlB,CAAA,KAAAiB,KAAA;AAE5D,MAAME,KAAK,GAAGC,OAASA,CAAC,CAAC,yCAAyC,CAAC;AAIhC;EACjC,IAAI;IAGF,IAAIC,OAES,GAAG/B,OAAO,CAAC,cAAc,CAAC;EACzC,CAAC,CAAC,OAAAgC,OAAA,EAAM,CAAC;AACX;AAEO,MAAMC,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAGE,QAAKA,CAAC,CAACC,SAAS,CACzCC,OAAO,CAACC,QAAQ,CAACC,IAAI,EAGrB,kBACF,CAAC;AAED,MAAMC,iBAAiB,GAAG,IAAIC,GAAG,CAAC,CAAC;AAEnC,SAASC,cAAcA,CAACC,QAAgB,EAAE;EAMxC,IAAIH,iBAAiB,CAACI,GAAG,CAACD,QAAQ,CAAC,EAAE;IACnCd,KAAK,CAAC,mCAAmC,EAAEc,QAAQ,CAAC;IACpD,OAAO,CAAC,CAAC;EACX;EAEA,IAAIE,MAAM;EACV,IAAI;IACFL,iBAAiB,CAACM,GAAG,CAACH,QAAQ,CAAC;IAC/BE,MAAM,GAAG,IAAAE,qCAAkB,EAAC/C,OAAO,CAAC,CAAC2C,QAAQ,CAAC;EAChD,CAAC,SAAS;IACRH,iBAAiB,CAACQ,MAAM,CAACL,QAAQ,CAAC;EACpC;EAOO;IACL,OAAOE,MAAM,IAAI,IAAI,KAClBA,MAAM,CAACI,UAAU,IAAIJ,MAAM,CAACK,MAAM,CAACC,WAAW,CAAC,KAAK,QAAQ,CAAC,GAC5DN,MAAM,CAACO,OAAO,KACsB3B,SAAS,CAAC,CAAC,CAAC,GAAGoB,MAAM,GAAGQ,SAAS,CAAC,GACtER,MAAM;EACZ;AACF;AAEA,MAAMS,eAAe,GAAG,IAAAP,qCAAkB;EAAA,IAAAQ,gBAAA,GAAA/B,iBAAA,CAAC,WACzCmB,QAAgB,EAChB;IAEA,MAAMa,GAAG,GAAG,IAAAC,oBAAa,EAACd,QAAQ,CAAC,CAACe,QAAQ,CAAC,CAAC,GAAG,SAAS;IAInD;MACL,IAAI,CAAC3B,OAAO,EAAE;QACZ,MAAM,IAAI4B,oBAAW,CACnB,gFAAgF,EAChFhB,QACF,CAAC;MACH;MAEA,aAAaZ,OAAO,CAACyB,GAAG,CAAC;IAC3B;EACF,CAAC;EAAA,SAlByDF,eAAeA,CAAAM,EAAA;IAAA,OAAAL,gBAAA,CAAA7B,KAAA,OAAAD,SAAA;EAAA;EAAA,OAAf6B,eAAe;AAAA,GAkBxE,CAAC;AAEF,MAAMO,oBAAoB,GAAG;EAC3B,KAAK,EAAE,SAAS;EAChB,MAAM,EAAE,KAAK;EACb,MAAM,EAAE,KAAK;EACb,KAAK,EAAE,SAAS;EAChB,MAAM,EAAE,KAAK;EACb,MAAM,EAAE;AACV,CAAU;AAEV,MAAMC,YAAY,GAAG,IAAIrB,GAAG,CAAC,CAAC;AAEf,UAAUsB,eAAeA,CACtCpB,QAAgB,EAChBqB,MAA0B,EAC1BC,QAAgB,EAChBC,QAAgB,EACE;EAClB,IAAIC,KAAK;EAET,MAAMC,GAAG,GAAGC,MAAGA,CAAC,CAACC,OAAO,CAAC3B,QAAQ,CAAC;EAClC,MAAM4B,IAAI,GAAGH,GAAG,KAAK,KAAK,IAAIA,GAAG,KAAK,MAAM,IAAIA,GAAG,KAAK,MAAM;EAE9D,MAAMI,IAAI,GACRX,oBAAoB,CAClBY,cAAA,CAAAC,IAAA,CAAcb,oBAAoB,EAAEO,GAAG,CAAC,GACnCA,GAAG,GACH,KAAe,CACrB;EAEH,MAAMO,OAAO,GAAG,GAAGX,MAAM,IAAIQ,IAAI,EAAW;EAC5C,QAAQG,OAAO;IACb,KAAK,aAAa;IAClB,KAAK,UAAU;MACb,IAAIJ,IAAI,EAAE;QACR,OAAOK,eAAe,CAACjC,QAAQ,EAAEyB,GAAG,EAAE,MAAM1B,cAAc,CAACC,QAAQ,CAAC,CAAC;MACvE,CAAC,MAEM;QACL,OAAOD,cAAc,CACnBC,QAAQ,EAEyBlB,SAAS,CAAC,CAAC,CAC9C,CAAC;MACH;IACF,KAAK,cAAc;IACnB,KAAK,iBAAiB;IACtB,KAAK,aAAa;MAChB,IAAI;QACF,IAAI8C,IAAI,EAAE;UACR,OAAOK,eAAe,CAACjC,QAAQ,EAAEyB,GAAG,EAAE,MAAM1B,cAAc,CAACC,QAAQ,CAAC,CAAC;QACvE,CAAC,MAEM;UACL,OAAOD,cAAc,CACnBC,QAAQ,EAEyBlB,SAAS,CAAC,CAAC,CAC9C,CAAC;QACH;MACF,CAAC,CAAC,OAAOb,CAAC,EAAE;QACV,IACEA,CAAC,CAACiE,IAAI,KAAK,0BAA0B,IAMpCjE,CAAC,CAACiE,IAAI,KAAK,0BAA0B,IAAIf,YAAY,CAAClB,GAAG,CAACD,QAAQ,CAAE,EACrE;UACAmB,YAAY,CAAChB,GAAG,CAACH,QAAQ,CAAC;UAC1B,IAAI,EAAEwB,KAAK,WAALA,KAAK,GAALA,KAAK,GAAK,OAAO,IAAAW,cAAO,EAAC,CAAC,CAAC,EAAE;YACjC,MAAM,IAAInB,oBAAW,CAACO,QAAQ,EAAEvB,QAAQ,CAAC;UAC3C;QAEF,CAAC,MAAM,IACL/B,CAAC,CAACiE,IAAI,KAAK,iBAAiB,IACML,IAAI,KAAK,KAAK,EAChD,CAEF,CAAC,MAAM;UACL,MAAM5D,CAAC;QACT;MACF;IAEF,KAAK,UAAU;MACb,IAAKuD,KAAK,WAALA,KAAK,GAALA,KAAK,GAAK,OAAO,IAAAW,cAAO,EAAC,CAAC,EAAG;QAChC,MAAMC,OAAO,GAAGR,IAAI,GAChBK,eAAe,CAACjC,QAAQ,EAAEyB,GAAG,EAAE,MAAMd,eAAe,CAACX,QAAQ,CAAC,CAAC,GAC/DW,eAAe,CAACX,QAAQ,CAAC;QAE7B,OAAO,CAAC,OAAO,IAAAqC,cAAO,EAACD,OAAO,CAAC,EAAE3B,OAAO;MAC1C;MACA,MAAM,IAAIO,oBAAW,CAACM,QAAQ,EAAEtB,QAAQ,CAAC;IAC3C;MACE,MAAM,IAAIsC,KAAK,CAAC,yCAAyC,CAAC;EAC9D;AACF;AAEA,SAASL,eAAeA,CACtBjC,QAAgB,EAChByB,GAAW,EACXc,QAAiB,EACd;EACH,IACElF,OAAO,CAACmF,UAAU,CAAC,KAAK,CAAC,IACzBnF,OAAO,CAACmF,UAAU,CAAC,MAAM,CAAC,IAC1BnF,OAAO,CAACmF,UAAU,CAAC,MAAM,CAAC,EAC1B;IACA,OAAOD,QAAQ,CAAC,CAAC;EACnB;EAEA,IAAId,GAAG,KAAK,MAAM,EAAE;IAClB,MAAM,IAAIT,oBAAW,CACnB;AACN,kBAAkBS,GAAG;AACrB;AACA;AACA,iCAAiCA,GAAG;AACpC,CAAC,EACKzB,QACF,CAAC;EACH;EAEA,MAAMyC,IAAkB,GAAG;IACzBC,OAAO,EAAE,KAAK;IACdC,UAAU,EAAE,KAAK;IACjBC,UAAU,EAAE,aAAa;IACzBC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAEpB,MAAGA,CAAC,CAACqB,QAAQ,CAAC/C,QAAQ,CAAC;IACvCgD,OAAO,EAAE,CACP,CACEC,WAAW,CAACjD,QAAQ,CAAC,EAAAkD,MAAA,CAAAC,MAAA;MAEnBC,qBAAqB,EAAE,IAAI;MAC3BC,kBAAkB,EAAE;IAAI,GACgB;MAAEC,kBAAkB,EAAE;IAAK,CAAC,EAEvE;EAEL,CAAC;EAED,IAAIC,OAAqC,GAAG,SAAAA,CAAUC,CAAC,EAAEC,QAAQ,EAAE;IAEjE,IAAIF,OAAO,IAAIE,QAAQ,CAACC,QAAQ,CAAC,MAAM,CAAC,EAAE;MACxC,IAAI;QAEF,OAAOF,CAAC,CAACG,QAAQ,CACf,IAAAC,gCAAiB,EAACH,QAAQ,EAAAP,MAAA,CAAAC,MAAA,KACrBV,IAAI;UACPgB;QAAQ,EACT,CAAC,CAACvB,IAAI,EACPuB,QACF,CAAC;MACH,CAAC,CAAC,OAAOI,KAAK,EAAE;QAGd,MAAMC,WAAW,GAAGzG,OAAO,CAAC,uCAAuC,CAAC;QACpE,IAAImC,QAAKA,CAAC,CAACuE,EAAE,CAACD,WAAW,CAACE,OAAO,EAAE,QAAQ,CAAC,EAAE;UAC5CC,OAAO,CAACJ,KAAK,CACX,4FACF,CAAC;QACH;QACA,MAAMA,KAAK;MACb;IACF;IACA,OAAOxG,OAAO,CAACmF,UAAU,CAAC,KAAK,CAAC,CAACgB,CAAC,EAAEC,QAAQ,CAAC;EAC/C,CAAC;EACDpG,OAAO,CAACmF,UAAU,CAACf,GAAG,CAAC,GAAG8B,OAAO;EAEjC,IAAI;IACF,OAAOhB,QAAQ,CAAC,CAAC;EACnB,CAAC,SAAS;IACR,IAAIlF,OAAO,CAACmF,UAAU,CAACf,GAAG,CAAC,KAAK8B,OAAO,EAAE,OAAOlG,OAAO,CAACmF,UAAU,CAACf,GAAG,CAAC;IACvE8B,OAAO,GAAG7C,SAAS;EACrB;AACF;AAEA,SAASuC,WAAWA,CAACjD,QAAgB,EAAE;EACrC,IAAI;IAEF,OAAO3C,OAAO,CAAC,0BAA0B,CAAC;EAC5C,CAAC,CAAC,OAAOwG,KAAK,EAAE;IACd,IAAIA,KAAK,CAAC3B,IAAI,KAAK,kBAAkB,EAAE,MAAM2B,KAAK;IAElD,IAAIK,OAAO,GACT,yIAAyI;IAExG;MACjC,IAAIxE,OAAO,CAACC,QAAQ,CAACwE,GAAG,EAAE;QAGxBD,OAAO,IAAI;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;MACK;IACF;IAEA,MAAM,IAAIlD,oBAAW,CAACkD,OAAO,EAAElE,QAAQ,CAAC;EAC1C;AACF;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/files/package.js b/node_modules/@babel/core/lib/config/files/package.js new file mode 100644 index 00000000..eed8ab82 --- /dev/null +++ b/node_modules/@babel/core/lib/config/files/package.js @@ -0,0 +1,61 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.findPackageData = findPackageData; +function _path() { + const data = require("path"); + _path = function () { + return data; + }; + return data; +} +var _utils = require("./utils.js"); +var _configError = require("../../errors/config-error.js"); +const PACKAGE_FILENAME = "package.json"; +const readConfigPackage = (0, _utils.makeStaticFileCache)((filepath, content) => { + let options; + try { + options = JSON.parse(content); + } catch (err) { + throw new _configError.default(`Error while parsing JSON - ${err.message}`, filepath); + } + if (!options) throw new Error(`${filepath}: No config detected`); + if (typeof options !== "object") { + throw new _configError.default(`Config returned typeof ${typeof options}`, filepath); + } + if (Array.isArray(options)) { + throw new _configError.default(`Expected config object but found array`, filepath); + } + return { + filepath, + dirname: _path().dirname(filepath), + options + }; +}); +function* findPackageData(filepath) { + let pkg = null; + const directories = []; + let isPackage = true; + let dirname = _path().dirname(filepath); + while (!pkg && _path().basename(dirname) !== "node_modules") { + directories.push(dirname); + pkg = yield* readConfigPackage(_path().join(dirname, PACKAGE_FILENAME)); + const nextLoc = _path().dirname(dirname); + if (dirname === nextLoc) { + isPackage = false; + break; + } + dirname = nextLoc; + } + return { + filepath, + directories, + pkg, + isPackage + }; +} +0 && 0; + +//# sourceMappingURL=package.js.map diff --git a/node_modules/@babel/core/lib/config/files/package.js.map b/node_modules/@babel/core/lib/config/files/package.js.map new file mode 100644 index 00000000..38aeb2c7 --- /dev/null +++ b/node_modules/@babel/core/lib/config/files/package.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_path","data","require","_utils","_configError","PACKAGE_FILENAME","readConfigPackage","makeStaticFileCache","filepath","content","options","JSON","parse","err","ConfigError","message","Error","Array","isArray","dirname","path","findPackageData","pkg","directories","isPackage","basename","push","join","nextLoc"],"sources":["../../../src/config/files/package.ts"],"sourcesContent":["import path from \"node:path\";\nimport type { Handler } from \"gensync\";\nimport { makeStaticFileCache } from \"./utils.ts\";\n\nimport type { ConfigFile, FilePackageData } from \"./types.ts\";\n\nimport ConfigError from \"../../errors/config-error.ts\";\n\nconst PACKAGE_FILENAME = \"package.json\";\n\nconst readConfigPackage = makeStaticFileCache(\n (filepath, content): ConfigFile => {\n let options;\n try {\n options = JSON.parse(content) as unknown;\n } catch (err) {\n throw new ConfigError(\n `Error while parsing JSON - ${err.message}`,\n filepath,\n );\n }\n\n if (!options) throw new Error(`${filepath}: No config detected`);\n\n if (typeof options !== \"object\") {\n throw new ConfigError(\n `Config returned typeof ${typeof options}`,\n filepath,\n );\n }\n if (Array.isArray(options)) {\n throw new ConfigError(`Expected config object but found array`, filepath);\n }\n\n return {\n filepath,\n dirname: path.dirname(filepath),\n options,\n };\n },\n);\n\n/**\n * Find metadata about the package that this file is inside of. Resolution\n * of Babel's config requires general package information to decide when to\n * search for .babelrc files\n */\nexport function* findPackageData(filepath: string): Handler {\n let pkg = null;\n const directories = [];\n let isPackage = true;\n\n let dirname = path.dirname(filepath);\n while (!pkg && path.basename(dirname) !== \"node_modules\") {\n directories.push(dirname);\n\n pkg = yield* readConfigPackage(path.join(dirname, PACKAGE_FILENAME));\n\n const nextLoc = path.dirname(dirname);\n if (dirname === nextLoc) {\n isPackage = false;\n break;\n }\n dirname = nextLoc;\n }\n\n return { filepath, directories, pkg, isPackage };\n}\n"],"mappings":";;;;;;AAAA,SAAAA,MAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,KAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,IAAAE,MAAA,GAAAD,OAAA;AAIA,IAAAE,YAAA,GAAAF,OAAA;AAEA,MAAMG,gBAAgB,GAAG,cAAc;AAEvC,MAAMC,iBAAiB,GAAG,IAAAC,0BAAmB,EAC3C,CAACC,QAAQ,EAAEC,OAAO,KAAiB;EACjC,IAAIC,OAAO;EACX,IAAI;IACFA,OAAO,GAAGC,IAAI,CAACC,KAAK,CAACH,OAAO,CAAY;EAC1C,CAAC,CAAC,OAAOI,GAAG,EAAE;IACZ,MAAM,IAAIC,oBAAW,CACnB,8BAA8BD,GAAG,CAACE,OAAO,EAAE,EAC3CP,QACF,CAAC;EACH;EAEA,IAAI,CAACE,OAAO,EAAE,MAAM,IAAIM,KAAK,CAAC,GAAGR,QAAQ,sBAAsB,CAAC;EAEhE,IAAI,OAAOE,OAAO,KAAK,QAAQ,EAAE;IAC/B,MAAM,IAAII,oBAAW,CACnB,0BAA0B,OAAOJ,OAAO,EAAE,EAC1CF,QACF,CAAC;EACH;EACA,IAAIS,KAAK,CAACC,OAAO,CAACR,OAAO,CAAC,EAAE;IAC1B,MAAM,IAAII,oBAAW,CAAC,wCAAwC,EAAEN,QAAQ,CAAC;EAC3E;EAEA,OAAO;IACLA,QAAQ;IACRW,OAAO,EAAEC,MAAGA,CAAC,CAACD,OAAO,CAACX,QAAQ,CAAC;IAC/BE;EACF,CAAC;AACH,CACF,CAAC;AAOM,UAAUW,eAAeA,CAACb,QAAgB,EAA4B;EAC3E,IAAIc,GAAG,GAAG,IAAI;EACd,MAAMC,WAAW,GAAG,EAAE;EACtB,IAAIC,SAAS,GAAG,IAAI;EAEpB,IAAIL,OAAO,GAAGC,MAAGA,CAAC,CAACD,OAAO,CAACX,QAAQ,CAAC;EACpC,OAAO,CAACc,GAAG,IAAIF,MAAGA,CAAC,CAACK,QAAQ,CAACN,OAAO,CAAC,KAAK,cAAc,EAAE;IACxDI,WAAW,CAACG,IAAI,CAACP,OAAO,CAAC;IAEzBG,GAAG,GAAG,OAAOhB,iBAAiB,CAACc,MAAGA,CAAC,CAACO,IAAI,CAACR,OAAO,EAAEd,gBAAgB,CAAC,CAAC;IAEpE,MAAMuB,OAAO,GAAGR,MAAGA,CAAC,CAACD,OAAO,CAACA,OAAO,CAAC;IACrC,IAAIA,OAAO,KAAKS,OAAO,EAAE;MACvBJ,SAAS,GAAG,KAAK;MACjB;IACF;IACAL,OAAO,GAAGS,OAAO;EACnB;EAEA,OAAO;IAAEpB,QAAQ;IAAEe,WAAW;IAAED,GAAG;IAAEE;EAAU,CAAC;AAClD;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/files/plugins.js b/node_modules/@babel/core/lib/config/files/plugins.js new file mode 100644 index 00000000..88f82dc6 --- /dev/null +++ b/node_modules/@babel/core/lib/config/files/plugins.js @@ -0,0 +1,230 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.loadPlugin = loadPlugin; +exports.loadPreset = loadPreset; +exports.resolvePreset = exports.resolvePlugin = void 0; +function _debug() { + const data = require("debug"); + _debug = function () { + return data; + }; + return data; +} +function _path() { + const data = require("path"); + _path = function () { + return data; + }; + return data; +} +var _async = require("../../gensync-utils/async.js"); +var _moduleTypes = require("./module-types.js"); +function _url() { + const data = require("url"); + _url = function () { + return data; + }; + return data; +} +var _importMetaResolve = require("../../vendor/import-meta-resolve.js"); +require("module"); +function _fs() { + const data = require("fs"); + _fs = function () { + return data; + }; + return data; +} +const debug = _debug()("babel:config:loading:files:plugins"); +const EXACT_RE = /^module:/; +const BABEL_PLUGIN_PREFIX_RE = /^(?!@|module:|[^/]+\/|babel-plugin-)/; +const BABEL_PRESET_PREFIX_RE = /^(?!@|module:|[^/]+\/|babel-preset-)/; +const BABEL_PLUGIN_ORG_RE = /^(@babel\/)(?!plugin-|[^/]+\/)/; +const BABEL_PRESET_ORG_RE = /^(@babel\/)(?!preset-|[^/]+\/)/; +const OTHER_PLUGIN_ORG_RE = /^(@(?!babel\/)[^/]+\/)(?![^/]*babel-plugin(?:-|\/|$)|[^/]+\/)/; +const OTHER_PRESET_ORG_RE = /^(@(?!babel\/)[^/]+\/)(?![^/]*babel-preset(?:-|\/|$)|[^/]+\/)/; +const OTHER_ORG_DEFAULT_RE = /^(@(?!babel$)[^/]+)$/; +const resolvePlugin = exports.resolvePlugin = resolveStandardizedName.bind(null, "plugin"); +const resolvePreset = exports.resolvePreset = resolveStandardizedName.bind(null, "preset"); +function* loadPlugin(name, dirname) { + const { + filepath, + loader + } = resolvePlugin(name, dirname, yield* (0, _async.isAsync)()); + const value = yield* requireModule("plugin", loader, filepath); + debug("Loaded plugin %o from %o.", name, dirname); + return { + filepath, + value + }; +} +function* loadPreset(name, dirname) { + const { + filepath, + loader + } = resolvePreset(name, dirname, yield* (0, _async.isAsync)()); + const value = yield* requireModule("preset", loader, filepath); + debug("Loaded preset %o from %o.", name, dirname); + return { + filepath, + value + }; +} +function standardizeName(type, name) { + if (_path().isAbsolute(name)) return name; + const isPreset = type === "preset"; + return name.replace(isPreset ? BABEL_PRESET_PREFIX_RE : BABEL_PLUGIN_PREFIX_RE, `babel-${type}-`).replace(isPreset ? BABEL_PRESET_ORG_RE : BABEL_PLUGIN_ORG_RE, `$1${type}-`).replace(isPreset ? OTHER_PRESET_ORG_RE : OTHER_PLUGIN_ORG_RE, `$1babel-${type}-`).replace(OTHER_ORG_DEFAULT_RE, `$1/babel-${type}`).replace(EXACT_RE, ""); +} +function* resolveAlternativesHelper(type, name) { + const standardizedName = standardizeName(type, name); + const { + error, + value + } = yield standardizedName; + if (!error) return value; + if (error.code !== "MODULE_NOT_FOUND") throw error; + if (standardizedName !== name && !(yield name).error) { + error.message += `\n- If you want to resolve "${name}", use "module:${name}"`; + } + if (!(yield standardizeName(type, "@babel/" + name)).error) { + error.message += `\n- Did you mean "@babel/${name}"?`; + } + const oppositeType = type === "preset" ? "plugin" : "preset"; + if (!(yield standardizeName(oppositeType, name)).error) { + error.message += `\n- Did you accidentally pass a ${oppositeType} as a ${type}?`; + } + if (type === "plugin") { + const transformName = standardizedName.replace("-proposal-", "-transform-"); + if (transformName !== standardizedName && !(yield transformName).error) { + error.message += `\n- Did you mean "${transformName}"?`; + } + } + error.message += `\n +Make sure that all the Babel plugins and presets you are using +are defined as dependencies or devDependencies in your package.json +file. It's possible that the missing plugin is loaded by a preset +you are using that forgot to add the plugin to its dependencies: you +can workaround this problem by explicitly adding the missing package +to your top-level package.json. +`; + throw error; +} +function tryRequireResolve(id, dirname) { + try { + if (dirname) { + return { + error: null, + value: (((v, w) => (v = v.split("."), w = w.split("."), +v[0] > +w[0] || v[0] == w[0] && +v[1] >= +w[1]))(process.versions.node, "8.9") ? require.resolve : (r, { + paths: [b] + }, M = require("module")) => { + let f = M._findPath(r, M._nodeModulePaths(b).concat(b)); + if (f) return f; + f = new Error(`Cannot resolve module '${r}'`); + f.code = "MODULE_NOT_FOUND"; + throw f; + })(id, { + paths: [dirname] + }) + }; + } else { + return { + error: null, + value: require.resolve(id) + }; + } + } catch (error) { + return { + error, + value: null + }; + } +} +function tryImportMetaResolve(id, options) { + try { + return { + error: null, + value: (0, _importMetaResolve.resolve)(id, options) + }; + } catch (error) { + return { + error, + value: null + }; + } +} +function resolveStandardizedNameForRequire(type, name, dirname) { + const it = resolveAlternativesHelper(type, name); + let res = it.next(); + while (!res.done) { + res = it.next(tryRequireResolve(res.value, dirname)); + } + return { + loader: "require", + filepath: res.value + }; +} +function resolveStandardizedNameForImport(type, name, dirname) { + const parentUrl = (0, _url().pathToFileURL)(_path().join(dirname, "./babel-virtual-resolve-base.js")).href; + const it = resolveAlternativesHelper(type, name); + let res = it.next(); + while (!res.done) { + res = it.next(tryImportMetaResolve(res.value, parentUrl)); + } + return { + loader: "auto", + filepath: (0, _url().fileURLToPath)(res.value) + }; +} +function resolveStandardizedName(type, name, dirname, allowAsync) { + if (!_moduleTypes.supportsESM || !allowAsync) { + return resolveStandardizedNameForRequire(type, name, dirname); + } + try { + const resolved = resolveStandardizedNameForImport(type, name, dirname); + if (!(0, _fs().existsSync)(resolved.filepath)) { + throw Object.assign(new Error(`Could not resolve "${name}" in file ${dirname}.`), { + type: "MODULE_NOT_FOUND" + }); + } + return resolved; + } catch (e) { + try { + return resolveStandardizedNameForRequire(type, name, dirname); + } catch (e2) { + if (e.type === "MODULE_NOT_FOUND") throw e; + if (e2.type === "MODULE_NOT_FOUND") throw e2; + throw e; + } + } +} +{ + var LOADING_MODULES = new Set(); +} +function* requireModule(type, loader, name) { + { + if (!(yield* (0, _async.isAsync)()) && LOADING_MODULES.has(name)) { + throw new Error(`Reentrant ${type} detected trying to load "${name}". This module is not ignored ` + "and is trying to load itself while compiling itself, leading to a dependency cycle. " + 'We recommend adding it to your "ignore" list in your babelrc, or to a .babelignore.'); + } + } + try { + { + LOADING_MODULES.add(name); + } + { + return yield* (0, _moduleTypes.default)(name, loader, `You appear to be using a native ECMAScript module ${type}, ` + "which is only supported when running Babel asynchronously " + "or when using the Node.js `--experimental-require-module` flag.", `You appear to be using a ${type} that contains top-level await, ` + "which is only supported when running Babel asynchronously.", true); + } + } catch (err) { + err.message = `[BABEL]: ${err.message} (While processing: ${name})`; + throw err; + } finally { + { + LOADING_MODULES.delete(name); + } + } +} +0 && 0; + +//# sourceMappingURL=plugins.js.map diff --git a/node_modules/@babel/core/lib/config/files/plugins.js.map b/node_modules/@babel/core/lib/config/files/plugins.js.map new file mode 100644 index 00000000..8285b342 --- /dev/null +++ b/node_modules/@babel/core/lib/config/files/plugins.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_debug","data","require","_path","_async","_moduleTypes","_url","_importMetaResolve","_fs","debug","buildDebug","EXACT_RE","BABEL_PLUGIN_PREFIX_RE","BABEL_PRESET_PREFIX_RE","BABEL_PLUGIN_ORG_RE","BABEL_PRESET_ORG_RE","OTHER_PLUGIN_ORG_RE","OTHER_PRESET_ORG_RE","OTHER_ORG_DEFAULT_RE","resolvePlugin","exports","resolveStandardizedName","bind","resolvePreset","loadPlugin","name","dirname","filepath","loader","isAsync","value","requireModule","loadPreset","standardizeName","type","path","isAbsolute","isPreset","replace","resolveAlternativesHelper","standardizedName","error","code","message","oppositeType","transformName","tryRequireResolve","id","v","w","split","process","versions","node","resolve","r","paths","b","M","f","_findPath","_nodeModulePaths","concat","Error","tryImportMetaResolve","options","importMetaResolve","resolveStandardizedNameForRequire","it","res","next","done","resolveStandardizedNameForImport","parentUrl","pathToFileURL","join","href","fileURLToPath","allowAsync","supportsESM","resolved","existsSync","Object","assign","e","e2","LOADING_MODULES","Set","has","add","loadCodeDefault","err","delete"],"sources":["../../../src/config/files/plugins.ts"],"sourcesContent":["/**\n * This file handles all logic for converting string-based configuration references into loaded objects.\n */\n\nimport buildDebug from \"debug\";\nimport path from \"node:path\";\nimport type { Handler } from \"gensync\";\nimport { isAsync } from \"../../gensync-utils/async.ts\";\nimport loadCodeDefault, { supportsESM } from \"./module-types.ts\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\n\nimport { resolve as importMetaResolve } from \"../../vendor/import-meta-resolve.js\";\n\nimport { createRequire } from \"node:module\";\nimport { existsSync } from \"node:fs\";\nconst require = createRequire(import.meta.url);\n\nconst debug = buildDebug(\"babel:config:loading:files:plugins\");\n\nconst EXACT_RE = /^module:/;\nconst BABEL_PLUGIN_PREFIX_RE = /^(?!@|module:|[^/]+\\/|babel-plugin-)/;\nconst BABEL_PRESET_PREFIX_RE = /^(?!@|module:|[^/]+\\/|babel-preset-)/;\nconst BABEL_PLUGIN_ORG_RE = /^(@babel\\/)(?!plugin-|[^/]+\\/)/;\nconst BABEL_PRESET_ORG_RE = /^(@babel\\/)(?!preset-|[^/]+\\/)/;\nconst OTHER_PLUGIN_ORG_RE =\n /^(@(?!babel\\/)[^/]+\\/)(?![^/]*babel-plugin(?:-|\\/|$)|[^/]+\\/)/;\nconst OTHER_PRESET_ORG_RE =\n /^(@(?!babel\\/)[^/]+\\/)(?![^/]*babel-preset(?:-|\\/|$)|[^/]+\\/)/;\nconst OTHER_ORG_DEFAULT_RE = /^(@(?!babel$)[^/]+)$/;\n\nexport const resolvePlugin = resolveStandardizedName.bind(null, \"plugin\");\nexport const resolvePreset = resolveStandardizedName.bind(null, \"preset\");\n\nexport function* loadPlugin(\n name: string,\n dirname: string,\n): Handler<{ filepath: string; value: unknown }> {\n const { filepath, loader } = resolvePlugin(name, dirname, yield* isAsync());\n\n const value = yield* requireModule(\"plugin\", loader, filepath);\n debug(\"Loaded plugin %o from %o.\", name, dirname);\n\n return { filepath, value };\n}\n\nexport function* loadPreset(\n name: string,\n dirname: string,\n): Handler<{ filepath: string; value: unknown }> {\n const { filepath, loader } = resolvePreset(name, dirname, yield* isAsync());\n\n const value = yield* requireModule(\"preset\", loader, filepath);\n\n debug(\"Loaded preset %o from %o.\", name, dirname);\n\n return { filepath, value };\n}\n\nfunction standardizeName(type: \"plugin\" | \"preset\", name: string) {\n // Let absolute and relative paths through.\n if (path.isAbsolute(name)) return name;\n\n const isPreset = type === \"preset\";\n\n return (\n name\n // foo -> babel-preset-foo\n .replace(\n isPreset ? BABEL_PRESET_PREFIX_RE : BABEL_PLUGIN_PREFIX_RE,\n `babel-${type}-`,\n )\n // @babel/es2015 -> @babel/preset-es2015\n .replace(\n isPreset ? BABEL_PRESET_ORG_RE : BABEL_PLUGIN_ORG_RE,\n `$1${type}-`,\n )\n // @foo/mypreset -> @foo/babel-preset-mypreset\n .replace(\n isPreset ? OTHER_PRESET_ORG_RE : OTHER_PLUGIN_ORG_RE,\n `$1babel-${type}-`,\n )\n // @foo -> @foo/babel-preset\n .replace(OTHER_ORG_DEFAULT_RE, `$1/babel-${type}`)\n // module:mypreset -> mypreset\n .replace(EXACT_RE, \"\")\n );\n}\n\ntype Result = { error: Error; value: null } | { error: null; value: T };\n\nfunction* resolveAlternativesHelper(\n type: \"plugin\" | \"preset\",\n name: string,\n): Iterator> {\n const standardizedName = standardizeName(type, name);\n const { error, value } = yield standardizedName;\n if (!error) return value;\n\n // @ts-expect-error code may not index error\n if (error.code !== \"MODULE_NOT_FOUND\") throw error;\n\n if (standardizedName !== name && !(yield name).error) {\n error.message += `\\n- If you want to resolve \"${name}\", use \"module:${name}\"`;\n }\n\n if (!(yield standardizeName(type, \"@babel/\" + name)).error) {\n error.message += `\\n- Did you mean \"@babel/${name}\"?`;\n }\n\n const oppositeType = type === \"preset\" ? \"plugin\" : \"preset\";\n if (!(yield standardizeName(oppositeType, name)).error) {\n error.message += `\\n- Did you accidentally pass a ${oppositeType} as a ${type}?`;\n }\n\n if (type === \"plugin\") {\n const transformName = standardizedName.replace(\"-proposal-\", \"-transform-\");\n if (transformName !== standardizedName && !(yield transformName).error) {\n error.message += `\\n- Did you mean \"${transformName}\"?`;\n }\n }\n\n error.message += `\\n\nMake sure that all the Babel plugins and presets you are using\nare defined as dependencies or devDependencies in your package.json\nfile. It's possible that the missing plugin is loaded by a preset\nyou are using that forgot to add the plugin to its dependencies: you\ncan workaround this problem by explicitly adding the missing package\nto your top-level package.json.\n`;\n\n throw error;\n}\n\nfunction tryRequireResolve(\n id: string,\n dirname: string | undefined,\n): Result {\n try {\n if (dirname) {\n return { error: null, value: require.resolve(id, { paths: [dirname] }) };\n } else {\n return { error: null, value: require.resolve(id) };\n }\n } catch (error) {\n return { error, value: null };\n }\n}\n\nfunction tryImportMetaResolve(\n id: Parameters[0],\n options: Parameters[1],\n): Result {\n try {\n return { error: null, value: importMetaResolve(id, options) };\n } catch (error) {\n return { error, value: null };\n }\n}\n\nfunction resolveStandardizedNameForRequire(\n type: \"plugin\" | \"preset\",\n name: string,\n dirname: string,\n) {\n const it = resolveAlternativesHelper(type, name);\n let res = it.next();\n while (!res.done) {\n res = it.next(tryRequireResolve(res.value, dirname));\n }\n return { loader: \"require\" as const, filepath: res.value };\n}\nfunction resolveStandardizedNameForImport(\n type: \"plugin\" | \"preset\",\n name: string,\n dirname: string,\n) {\n const parentUrl = pathToFileURL(\n path.join(dirname, \"./babel-virtual-resolve-base.js\"),\n ).href;\n\n const it = resolveAlternativesHelper(type, name);\n let res = it.next();\n while (!res.done) {\n res = it.next(tryImportMetaResolve(res.value, parentUrl));\n }\n return { loader: \"auto\" as const, filepath: fileURLToPath(res.value) };\n}\n\nfunction resolveStandardizedName(\n type: \"plugin\" | \"preset\",\n name: string,\n dirname: string,\n allowAsync: boolean,\n) {\n if (!supportsESM || !allowAsync) {\n return resolveStandardizedNameForRequire(type, name, dirname);\n }\n\n try {\n const resolved = resolveStandardizedNameForImport(type, name, dirname);\n // import-meta-resolve 4.0 does not throw if the module is not found.\n if (!existsSync(resolved.filepath)) {\n throw Object.assign(\n new Error(`Could not resolve \"${name}\" in file ${dirname}.`),\n { type: \"MODULE_NOT_FOUND\" },\n );\n }\n return resolved;\n } catch (e) {\n try {\n return resolveStandardizedNameForRequire(type, name, dirname);\n } catch (e2) {\n if (e.type === \"MODULE_NOT_FOUND\") throw e;\n if (e2.type === \"MODULE_NOT_FOUND\") throw e2;\n throw e;\n }\n }\n}\n\nif (!process.env.BABEL_8_BREAKING) {\n // eslint-disable-next-line no-var\n var LOADING_MODULES = new Set();\n}\nfunction* requireModule(\n type: string,\n loader: \"require\" | \"auto\",\n name: string,\n): Handler {\n if (!process.env.BABEL_8_BREAKING) {\n if (!(yield* isAsync()) && LOADING_MODULES.has(name)) {\n throw new Error(\n `Reentrant ${type} detected trying to load \"${name}\". This module is not ignored ` +\n \"and is trying to load itself while compiling itself, leading to a dependency cycle. \" +\n 'We recommend adding it to your \"ignore\" list in your babelrc, or to a .babelignore.',\n );\n }\n }\n\n try {\n if (!process.env.BABEL_8_BREAKING) {\n LOADING_MODULES.add(name);\n }\n\n if (process.env.BABEL_8_BREAKING) {\n return yield* loadCodeDefault(\n name,\n loader,\n `You appear to be using a native ECMAScript module ${type}, ` +\n \"which is only supported when running Babel asynchronously \" +\n \"or when using the Node.js `--experimental-require-module` flag.\",\n `You appear to be using a ${type} that contains top-level await, ` +\n \"which is only supported when running Babel asynchronously.\",\n );\n } else {\n return yield* loadCodeDefault(\n name,\n loader,\n `You appear to be using a native ECMAScript module ${type}, ` +\n \"which is only supported when running Babel asynchronously \" +\n \"or when using the Node.js `--experimental-require-module` flag.\",\n `You appear to be using a ${type} that contains top-level await, ` +\n \"which is only supported when running Babel asynchronously.\",\n // For backward compatibility, we need to support malformed presets\n // defined as separate named exports rather than a single default\n // export.\n // See packages/babel-core/test/fixtures/option-manager/presets/es2015_named.js\n // @ts-ignore(Babel 7 vs Babel 8) This param has been removed\n true,\n );\n }\n } catch (err) {\n err.message = `[BABEL]: ${err.message} (While processing: ${name})`;\n throw err;\n } finally {\n if (!process.env.BABEL_8_BREAKING) {\n LOADING_MODULES.delete(name);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/files/types.js b/node_modules/@babel/core/lib/config/files/types.js new file mode 100644 index 00000000..c03b5a6f --- /dev/null +++ b/node_modules/@babel/core/lib/config/files/types.js @@ -0,0 +1,3 @@ +0 && 0; + +//# sourceMappingURL=types.js.map diff --git a/node_modules/@babel/core/lib/config/files/types.js.map b/node_modules/@babel/core/lib/config/files/types.js.map new file mode 100644 index 00000000..bce052ad --- /dev/null +++ b/node_modules/@babel/core/lib/config/files/types.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"sources":["../../../src/config/files/types.ts"],"sourcesContent":["import type { InputOptions } from \"../index.ts\";\n\nexport type ConfigFile = {\n filepath: string;\n dirname: string;\n options: InputOptions & { babel?: unknown };\n};\n\nexport type IgnoreFile = {\n filepath: string;\n dirname: string;\n ignore: Array;\n};\n\nexport type RelativeConfig = {\n // The actual config, either from package.json#babel, .babelrc, or\n // .babelrc.js, if there was one.\n config: ConfigFile | null;\n // The .babelignore, if there was one.\n ignore: IgnoreFile | null;\n};\n\nexport type FilePackageData = {\n // The file in the package.\n filepath: string;\n // Any ancestor directories of the file that are within the package.\n directories: Array;\n // The contents of the package.json. May not be found if the package just\n // terminated at a node_modules folder without finding one.\n pkg: ConfigFile | null;\n // True if a package.json or node_modules folder was found while traversing\n // the directory structure.\n isPackage: boolean;\n};\n"],"mappings":"","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/files/utils.js b/node_modules/@babel/core/lib/config/files/utils.js new file mode 100644 index 00000000..406aab9f --- /dev/null +++ b/node_modules/@babel/core/lib/config/files/utils.js @@ -0,0 +1,36 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.makeStaticFileCache = makeStaticFileCache; +var _caching = require("../caching.js"); +var fs = require("../../gensync-utils/fs.js"); +function _fs2() { + const data = require("fs"); + _fs2 = function () { + return data; + }; + return data; +} +function makeStaticFileCache(fn) { + return (0, _caching.makeStrongCache)(function* (filepath, cache) { + const cached = cache.invalidate(() => fileMtime(filepath)); + if (cached === null) { + return null; + } + return fn(filepath, yield* fs.readFile(filepath, "utf8")); + }); +} +function fileMtime(filepath) { + if (!_fs2().existsSync(filepath)) return null; + try { + return +_fs2().statSync(filepath).mtime; + } catch (e) { + if (e.code !== "ENOENT" && e.code !== "ENOTDIR") throw e; + } + return null; +} +0 && 0; + +//# sourceMappingURL=utils.js.map diff --git a/node_modules/@babel/core/lib/config/files/utils.js.map b/node_modules/@babel/core/lib/config/files/utils.js.map new file mode 100644 index 00000000..f3be2259 --- /dev/null +++ b/node_modules/@babel/core/lib/config/files/utils.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_caching","require","fs","_fs2","data","makeStaticFileCache","fn","makeStrongCache","filepath","cache","cached","invalidate","fileMtime","readFile","nodeFs","existsSync","statSync","mtime","e","code"],"sources":["../../../src/config/files/utils.ts"],"sourcesContent":["import type { Handler } from \"gensync\";\n\nimport { makeStrongCache } from \"../caching.ts\";\nimport type { CacheConfigurator } from \"../caching.ts\";\nimport * as fs from \"../../gensync-utils/fs.ts\";\nimport nodeFs from \"node:fs\";\n\nexport function makeStaticFileCache(\n fn: (filepath: string, contents: string) => T,\n) {\n return makeStrongCache(function* (\n filepath: string,\n cache: CacheConfigurator,\n ): Handler {\n const cached = cache.invalidate(() => fileMtime(filepath));\n\n if (cached === null) {\n return null;\n }\n\n return fn(filepath, yield* fs.readFile(filepath, \"utf8\"));\n });\n}\n\nfunction fileMtime(filepath: string): number | null {\n if (!nodeFs.existsSync(filepath)) return null;\n\n try {\n return +nodeFs.statSync(filepath).mtime;\n } catch (e) {\n if (e.code !== \"ENOENT\" && e.code !== \"ENOTDIR\") throw e;\n }\n\n return null;\n}\n"],"mappings":";;;;;;AAEA,IAAAA,QAAA,GAAAC,OAAA;AAEA,IAAAC,EAAA,GAAAD,OAAA;AACA,SAAAE,KAAA;EAAA,MAAAC,IAAA,GAAAH,OAAA;EAAAE,IAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEO,SAASC,mBAAmBA,CACjCC,EAA6C,EAC7C;EACA,OAAO,IAAAC,wBAAe,EAAC,WACrBC,QAAgB,EAChBC,KAA8B,EACX;IACnB,MAAMC,MAAM,GAAGD,KAAK,CAACE,UAAU,CAAC,MAAMC,SAAS,CAACJ,QAAQ,CAAC,CAAC;IAE1D,IAAIE,MAAM,KAAK,IAAI,EAAE;MACnB,OAAO,IAAI;IACb;IAEA,OAAOJ,EAAE,CAACE,QAAQ,EAAE,OAAON,EAAE,CAACW,QAAQ,CAACL,QAAQ,EAAE,MAAM,CAAC,CAAC;EAC3D,CAAC,CAAC;AACJ;AAEA,SAASI,SAASA,CAACJ,QAAgB,EAAiB;EAClD,IAAI,CAACM,KAAKA,CAAC,CAACC,UAAU,CAACP,QAAQ,CAAC,EAAE,OAAO,IAAI;EAE7C,IAAI;IACF,OAAO,CAACM,KAAKA,CAAC,CAACE,QAAQ,CAACR,QAAQ,CAAC,CAACS,KAAK;EACzC,CAAC,CAAC,OAAOC,CAAC,EAAE;IACV,IAAIA,CAAC,CAACC,IAAI,KAAK,QAAQ,IAAID,CAAC,CAACC,IAAI,KAAK,SAAS,EAAE,MAAMD,CAAC;EAC1D;EAEA,OAAO,IAAI;AACb;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/full.js b/node_modules/@babel/core/lib/config/full.js new file mode 100644 index 00000000..c2477ce7 --- /dev/null +++ b/node_modules/@babel/core/lib/config/full.js @@ -0,0 +1,312 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +function _gensync() { + const data = require("gensync"); + _gensync = function () { + return data; + }; + return data; +} +var _async = require("../gensync-utils/async.js"); +var _util = require("./util.js"); +var context = require("../index.js"); +var _plugin = require("./plugin.js"); +var _item = require("./item.js"); +var _configChain = require("./config-chain.js"); +var _deepArray = require("./helpers/deep-array.js"); +function _traverse() { + const data = require("@babel/traverse"); + _traverse = function () { + return data; + }; + return data; +} +var _caching = require("./caching.js"); +var _options = require("./validation/options.js"); +var _plugins = require("./validation/plugins.js"); +var _configApi = require("./helpers/config-api.js"); +var _partial = require("./partial.js"); +var _configError = require("../errors/config-error.js"); +var _default = exports.default = _gensync()(function* loadFullConfig(inputOpts) { + var _opts$assumptions; + const result = yield* (0, _partial.default)(inputOpts); + if (!result) { + return null; + } + const { + options, + context, + fileHandling + } = result; + if (fileHandling === "ignored") { + return null; + } + const optionDefaults = {}; + const { + plugins, + presets + } = options; + if (!plugins || !presets) { + throw new Error("Assertion failure - plugins and presets exist"); + } + const presetContext = Object.assign({}, context, { + targets: options.targets + }); + const toDescriptor = item => { + const desc = (0, _item.getItemDescriptor)(item); + if (!desc) { + throw new Error("Assertion failure - must be config item"); + } + return desc; + }; + const presetsDescriptors = presets.map(toDescriptor); + const initialPluginsDescriptors = plugins.map(toDescriptor); + const pluginDescriptorsByPass = [[]]; + const passes = []; + const externalDependencies = []; + const ignored = yield* enhanceError(context, function* recursePresetDescriptors(rawPresets, pluginDescriptorsPass) { + const presets = []; + for (let i = 0; i < rawPresets.length; i++) { + const descriptor = rawPresets[i]; + if (descriptor.options !== false) { + try { + var preset = yield* loadPresetDescriptor(descriptor, presetContext); + } catch (e) { + if (e.code === "BABEL_UNKNOWN_OPTION") { + (0, _options.checkNoUnwrappedItemOptionPairs)(rawPresets, i, "preset", e); + } + throw e; + } + externalDependencies.push(preset.externalDependencies); + if (descriptor.ownPass) { + presets.push({ + preset: preset.chain, + pass: [] + }); + } else { + presets.unshift({ + preset: preset.chain, + pass: pluginDescriptorsPass + }); + } + } + } + if (presets.length > 0) { + pluginDescriptorsByPass.splice(1, 0, ...presets.map(o => o.pass).filter(p => p !== pluginDescriptorsPass)); + for (const { + preset, + pass + } of presets) { + if (!preset) return true; + pass.push(...preset.plugins); + const ignored = yield* recursePresetDescriptors(preset.presets, pass); + if (ignored) return true; + preset.options.forEach(opts => { + (0, _util.mergeOptions)(optionDefaults, opts); + }); + } + } + })(presetsDescriptors, pluginDescriptorsByPass[0]); + if (ignored) return null; + const opts = optionDefaults; + (0, _util.mergeOptions)(opts, options); + const pluginContext = Object.assign({}, presetContext, { + assumptions: (_opts$assumptions = opts.assumptions) != null ? _opts$assumptions : {} + }); + yield* enhanceError(context, function* loadPluginDescriptors() { + pluginDescriptorsByPass[0].unshift(...initialPluginsDescriptors); + for (const descs of pluginDescriptorsByPass) { + const pass = []; + passes.push(pass); + for (let i = 0; i < descs.length; i++) { + const descriptor = descs[i]; + if (descriptor.options !== false) { + try { + var plugin = yield* loadPluginDescriptor(descriptor, pluginContext); + } catch (e) { + if (e.code === "BABEL_UNKNOWN_PLUGIN_PROPERTY") { + (0, _options.checkNoUnwrappedItemOptionPairs)(descs, i, "plugin", e); + } + throw e; + } + pass.push(plugin); + externalDependencies.push(plugin.externalDependencies); + } + } + } + })(); + opts.plugins = passes[0]; + opts.presets = passes.slice(1).filter(plugins => plugins.length > 0).map(plugins => ({ + plugins + })); + opts.passPerPreset = opts.presets.length > 0; + return { + options: opts, + passes: passes, + externalDependencies: (0, _deepArray.finalize)(externalDependencies) + }; +}); +function enhanceError(context, fn) { + return function* (arg1, arg2) { + try { + return yield* fn(arg1, arg2); + } catch (e) { + if (!/^\[BABEL\]/.test(e.message)) { + var _context$filename; + e.message = `[BABEL] ${(_context$filename = context.filename) != null ? _context$filename : "unknown file"}: ${e.message}`; + } + throw e; + } + }; +} +const makeDescriptorLoader = apiFactory => (0, _caching.makeWeakCache)(function* ({ + value, + options, + dirname, + alias +}, cache) { + if (options === false) throw new Error("Assertion failure"); + options = options || {}; + const externalDependencies = []; + let item = value; + if (typeof value === "function") { + const factory = (0, _async.maybeAsync)(value, `You appear to be using an async plugin/preset, but Babel has been called synchronously`); + const api = Object.assign({}, context, apiFactory(cache, externalDependencies)); + try { + item = yield* factory(api, options, dirname); + } catch (e) { + if (alias) { + e.message += ` (While processing: ${JSON.stringify(alias)})`; + } + throw e; + } + } + if (!item || typeof item !== "object") { + throw new Error("Plugin/Preset did not return an object."); + } + if ((0, _async.isThenable)(item)) { + yield* []; + throw new Error(`You appear to be using a promise as a plugin, ` + `which your current version of Babel does not support. ` + `If you're using a published plugin, ` + `you may need to upgrade your @babel/core version. ` + `As an alternative, you can prefix the promise with "await". ` + `(While processing: ${JSON.stringify(alias)})`); + } + if (externalDependencies.length > 0 && (!cache.configured() || cache.mode() === "forever")) { + let error = `A plugin/preset has external untracked dependencies ` + `(${externalDependencies[0]}), but the cache `; + if (!cache.configured()) { + error += `has not been configured to be invalidated when the external dependencies change. `; + } else { + error += ` has been configured to never be invalidated. `; + } + error += `Plugins/presets should configure their cache to be invalidated when the external ` + `dependencies change, for example using \`api.cache.invalidate(() => ` + `statSync(filepath).mtimeMs)\` or \`api.cache.never()\`\n` + `(While processing: ${JSON.stringify(alias)})`; + throw new Error(error); + } + return { + value: item, + options, + dirname, + alias, + externalDependencies: (0, _deepArray.finalize)(externalDependencies) + }; +}); +const pluginDescriptorLoader = makeDescriptorLoader(_configApi.makePluginAPI); +const presetDescriptorLoader = makeDescriptorLoader(_configApi.makePresetAPI); +const instantiatePlugin = (0, _caching.makeWeakCache)(function* ({ + value, + options, + dirname, + alias, + externalDependencies +}, cache) { + const pluginObj = (0, _plugins.validatePluginObject)(value); + const plugin = Object.assign({}, pluginObj); + if (plugin.visitor) { + plugin.visitor = _traverse().default.explode(Object.assign({}, plugin.visitor)); + } + if (plugin.inherits) { + const inheritsDescriptor = { + name: undefined, + alias: `${alias}$inherits`, + value: plugin.inherits, + options, + dirname + }; + const inherits = yield* (0, _async.forwardAsync)(loadPluginDescriptor, run => { + return cache.invalidate(data => run(inheritsDescriptor, data)); + }); + plugin.pre = chainMaybeAsync(inherits.pre, plugin.pre); + plugin.post = chainMaybeAsync(inherits.post, plugin.post); + plugin.manipulateOptions = chainMaybeAsync(inherits.manipulateOptions, plugin.manipulateOptions); + plugin.visitor = _traverse().default.visitors.merge([inherits.visitor || {}, plugin.visitor || {}]); + if (inherits.externalDependencies.length > 0) { + if (externalDependencies.length === 0) { + externalDependencies = inherits.externalDependencies; + } else { + externalDependencies = (0, _deepArray.finalize)([externalDependencies, inherits.externalDependencies]); + } + } + } + return new _plugin.default(plugin, options, alias, externalDependencies); +}); +function* loadPluginDescriptor(descriptor, context) { + if (descriptor.value instanceof _plugin.default) { + if (descriptor.options) { + throw new Error("Passed options to an existing Plugin instance will not work."); + } + return descriptor.value; + } + return yield* instantiatePlugin(yield* pluginDescriptorLoader(descriptor, context), context); +} +const needsFilename = val => val && typeof val !== "function"; +const validateIfOptionNeedsFilename = (options, descriptor) => { + if (needsFilename(options.test) || needsFilename(options.include) || needsFilename(options.exclude)) { + const formattedPresetName = descriptor.name ? `"${descriptor.name}"` : "/* your preset */"; + throw new _configError.default([`Preset ${formattedPresetName} requires a filename to be set when babel is called directly,`, `\`\`\``, `babel.transformSync(code, { filename: 'file.ts', presets: [${formattedPresetName}] });`, `\`\`\``, `See https://babeljs.io/docs/en/options#filename for more information.`].join("\n")); + } +}; +const validatePreset = (preset, context, descriptor) => { + if (!context.filename) { + var _options$overrides; + const { + options + } = preset; + validateIfOptionNeedsFilename(options, descriptor); + (_options$overrides = options.overrides) == null || _options$overrides.forEach(overrideOptions => validateIfOptionNeedsFilename(overrideOptions, descriptor)); + } +}; +const instantiatePreset = (0, _caching.makeWeakCacheSync)(({ + value, + dirname, + alias, + externalDependencies +}) => { + return { + options: (0, _options.validate)("preset", value), + alias, + dirname, + externalDependencies + }; +}); +function* loadPresetDescriptor(descriptor, context) { + const preset = instantiatePreset(yield* presetDescriptorLoader(descriptor, context)); + validatePreset(preset, context, descriptor); + return { + chain: yield* (0, _configChain.buildPresetChain)(preset, context), + externalDependencies: preset.externalDependencies + }; +} +function chainMaybeAsync(a, b) { + if (!a) return b; + if (!b) return a; + return function (...args) { + const res = a.apply(this, args); + if (res && typeof res.then === "function") { + return res.then(() => b.apply(this, args)); + } + return b.apply(this, args); + }; +} +0 && 0; + +//# sourceMappingURL=full.js.map diff --git a/node_modules/@babel/core/lib/config/full.js.map b/node_modules/@babel/core/lib/config/full.js.map new file mode 100644 index 00000000..60419f0c --- /dev/null +++ b/node_modules/@babel/core/lib/config/full.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_gensync","data","require","_async","_util","context","_plugin","_item","_configChain","_deepArray","_traverse","_caching","_options","_plugins","_configApi","_partial","_configError","_default","exports","default","gensync","loadFullConfig","inputOpts","_opts$assumptions","result","loadPrivatePartialConfig","options","fileHandling","optionDefaults","plugins","presets","Error","presetContext","Object","assign","targets","toDescriptor","item","desc","getItemDescriptor","presetsDescriptors","map","initialPluginsDescriptors","pluginDescriptorsByPass","passes","externalDependencies","ignored","enhanceError","recursePresetDescriptors","rawPresets","pluginDescriptorsPass","i","length","descriptor","preset","loadPresetDescriptor","e","code","checkNoUnwrappedItemOptionPairs","push","ownPass","chain","pass","unshift","splice","o","filter","p","forEach","opts","mergeOptions","pluginContext","assumptions","loadPluginDescriptors","descs","plugin","loadPluginDescriptor","slice","passPerPreset","freezeDeepArray","fn","arg1","arg2","test","message","_context$filename","filename","makeDescriptorLoader","apiFactory","makeWeakCache","value","dirname","alias","cache","factory","maybeAsync","api","JSON","stringify","isThenable","configured","mode","error","pluginDescriptorLoader","makePluginAPI","presetDescriptorLoader","makePresetAPI","instantiatePlugin","pluginObj","validatePluginObject","visitor","traverse","explode","inherits","inheritsDescriptor","name","undefined","forwardAsync","run","invalidate","pre","chainMaybeAsync","post","manipulateOptions","visitors","merge","Plugin","needsFilename","val","validateIfOptionNeedsFilename","include","exclude","formattedPresetName","ConfigError","join","validatePreset","_options$overrides","overrides","overrideOptions","instantiatePreset","makeWeakCacheSync","validate","buildPresetChain","a","b","args","res","apply","then"],"sources":["../../src/config/full.ts"],"sourcesContent":["import gensync, { type Handler } from \"gensync\";\nimport {\n forwardAsync,\n maybeAsync,\n isThenable,\n} from \"../gensync-utils/async.ts\";\n\nimport { mergeOptions } from \"./util.ts\";\nimport * as context from \"../index.ts\";\nimport Plugin from \"./plugin.ts\";\nimport { getItemDescriptor } from \"./item.ts\";\nimport { buildPresetChain } from \"./config-chain.ts\";\nimport { finalize as freezeDeepArray } from \"./helpers/deep-array.ts\";\nimport type { DeepArray, ReadonlyDeepArray } from \"./helpers/deep-array.ts\";\nimport type {\n ConfigContext,\n ConfigChain,\n PresetInstance,\n} from \"./config-chain.ts\";\nimport type { UnloadedDescriptor } from \"./config-descriptors.ts\";\nimport traverse from \"@babel/traverse\";\nimport { makeWeakCache, makeWeakCacheSync } from \"./caching.ts\";\nimport type { CacheConfigurator } from \"./caching.ts\";\nimport {\n validate,\n checkNoUnwrappedItemOptionPairs,\n} from \"./validation/options.ts\";\nimport type { InputOptions, PluginItem } from \"./validation/options.ts\";\nimport { validatePluginObject } from \"./validation/plugins.ts\";\nimport { makePluginAPI, makePresetAPI } from \"./helpers/config-api.ts\";\nimport type { PluginAPI, PresetAPI } from \"./helpers/config-api.ts\";\n\nimport loadPrivatePartialConfig from \"./partial.ts\";\nimport type { ValidatedOptions } from \"./validation/options.ts\";\n\nimport type * as Context from \"./cache-contexts.ts\";\nimport ConfigError from \"../errors/config-error.ts\";\n\ntype LoadedDescriptor = {\n value: any;\n options: object;\n dirname: string;\n alias: string;\n externalDependencies: ReadonlyDeepArray;\n};\n\nexport type { InputOptions } from \"./validation/options.ts\";\n\nexport type ResolvedConfig = {\n options: any;\n passes: PluginPasses;\n externalDependencies: ReadonlyDeepArray;\n};\n\nexport type { Plugin };\nexport type PluginPassList = Array;\nexport type PluginPasses = Array;\n\nexport default gensync(function* loadFullConfig(\n inputOpts: InputOptions,\n): Handler {\n const result = yield* loadPrivatePartialConfig(inputOpts);\n if (!result) {\n return null;\n }\n const { options, context, fileHandling } = result;\n\n if (fileHandling === \"ignored\") {\n return null;\n }\n\n const optionDefaults: ValidatedOptions = {};\n\n const { plugins, presets } = options;\n\n if (!plugins || !presets) {\n throw new Error(\"Assertion failure - plugins and presets exist\");\n }\n\n const presetContext: Context.FullPreset = {\n ...context,\n targets: options.targets,\n };\n\n const toDescriptor = (item: PluginItem) => {\n const desc = getItemDescriptor(item);\n if (!desc) {\n throw new Error(\"Assertion failure - must be config item\");\n }\n\n return desc;\n };\n\n const presetsDescriptors = presets.map(toDescriptor);\n const initialPluginsDescriptors = plugins.map(toDescriptor);\n const pluginDescriptorsByPass: Array>> = [\n [],\n ];\n const passes: Array> = [];\n\n const externalDependencies: DeepArray = [];\n\n const ignored = yield* enhanceError(\n context,\n function* recursePresetDescriptors(\n rawPresets: Array>,\n pluginDescriptorsPass: Array>,\n ): Handler {\n const presets: Array<{\n preset: ConfigChain | null;\n pass: Array>;\n }> = [];\n\n for (let i = 0; i < rawPresets.length; i++) {\n const descriptor = rawPresets[i];\n if (descriptor.options !== false) {\n try {\n // eslint-disable-next-line no-var\n var preset = yield* loadPresetDescriptor(descriptor, presetContext);\n } catch (e) {\n if (e.code === \"BABEL_UNKNOWN_OPTION\") {\n checkNoUnwrappedItemOptionPairs(rawPresets, i, \"preset\", e);\n }\n throw e;\n }\n\n externalDependencies.push(preset.externalDependencies);\n\n // Presets normally run in reverse order, but if they\n // have their own pass they run after the presets\n // in the previous pass.\n if (descriptor.ownPass) {\n presets.push({ preset: preset.chain, pass: [] });\n } else {\n presets.unshift({\n preset: preset.chain,\n pass: pluginDescriptorsPass,\n });\n }\n }\n }\n\n // resolve presets\n if (presets.length > 0) {\n // The passes are created in the same order as the preset list, but are inserted before any\n // existing additional passes.\n pluginDescriptorsByPass.splice(\n 1,\n 0,\n ...presets.map(o => o.pass).filter(p => p !== pluginDescriptorsPass),\n );\n\n for (const { preset, pass } of presets) {\n if (!preset) return true;\n\n pass.push(...preset.plugins);\n\n const ignored = yield* recursePresetDescriptors(preset.presets, pass);\n if (ignored) return true;\n\n preset.options.forEach(opts => {\n mergeOptions(optionDefaults, opts);\n });\n }\n }\n },\n )(presetsDescriptors, pluginDescriptorsByPass[0]);\n\n if (ignored) return null;\n\n const opts: ValidatedOptions = optionDefaults;\n mergeOptions(opts, options);\n\n const pluginContext: Context.FullPlugin = {\n ...presetContext,\n assumptions: opts.assumptions ?? {},\n };\n\n yield* enhanceError(context, function* loadPluginDescriptors() {\n pluginDescriptorsByPass[0].unshift(...initialPluginsDescriptors);\n\n for (const descs of pluginDescriptorsByPass) {\n const pass: Plugin[] = [];\n passes.push(pass);\n\n for (let i = 0; i < descs.length; i++) {\n const descriptor = descs[i];\n if (descriptor.options !== false) {\n try {\n // eslint-disable-next-line no-var\n var plugin = yield* loadPluginDescriptor(descriptor, pluginContext);\n } catch (e) {\n if (e.code === \"BABEL_UNKNOWN_PLUGIN_PROPERTY\") {\n // print special message for `plugins: [\"@babel/foo\", { foo: \"option\" }]`\n checkNoUnwrappedItemOptionPairs(descs, i, \"plugin\", e);\n }\n throw e;\n }\n pass.push(plugin);\n\n externalDependencies.push(plugin.externalDependencies);\n }\n }\n }\n })();\n\n opts.plugins = passes[0];\n opts.presets = passes\n .slice(1)\n .filter(plugins => plugins.length > 0)\n .map(plugins => ({ plugins }));\n opts.passPerPreset = opts.presets.length > 0;\n\n return {\n options: opts,\n passes: passes,\n externalDependencies: freezeDeepArray(externalDependencies),\n };\n});\n\nfunction enhanceError(context: ConfigContext, fn: T): T {\n return function* (arg1: unknown, arg2: unknown) {\n try {\n return yield* fn(arg1, arg2);\n } catch (e) {\n // There are a few case where thrown errors will try to annotate themselves multiple times, so\n // to keep things simple we just bail out if re-wrapping the message.\n if (!/^\\[BABEL\\]/.test(e.message)) {\n e.message = `[BABEL] ${context.filename ?? \"unknown file\"}: ${\n e.message\n }`;\n }\n\n throw e;\n }\n } as any;\n}\n\n/**\n * Load a generic plugin/preset from the given descriptor loaded from the config object.\n */\nconst makeDescriptorLoader = (\n apiFactory: (\n cache: CacheConfigurator,\n externalDependencies: Array,\n ) => API,\n) =>\n makeWeakCache(function* (\n { value, options, dirname, alias }: UnloadedDescriptor,\n cache: CacheConfigurator,\n ): Handler {\n // Disabled presets should already have been filtered out\n if (options === false) throw new Error(\"Assertion failure\");\n\n options = options || {};\n\n const externalDependencies: Array = [];\n\n let item: unknown = value;\n if (typeof value === \"function\") {\n const factory = maybeAsync(\n value as (api: API, options: object, dirname: string) => unknown,\n `You appear to be using an async plugin/preset, but Babel has been called synchronously`,\n );\n\n const api = {\n ...context,\n ...apiFactory(cache, externalDependencies),\n };\n try {\n item = yield* factory(api, options, dirname);\n } catch (e) {\n if (alias) {\n e.message += ` (While processing: ${JSON.stringify(alias)})`;\n }\n throw e;\n }\n }\n\n if (!item || typeof item !== \"object\") {\n throw new Error(\"Plugin/Preset did not return an object.\");\n }\n\n if (isThenable(item)) {\n // if we want to support async plugins\n yield* [];\n\n throw new Error(\n `You appear to be using a promise as a plugin, ` +\n `which your current version of Babel does not support. ` +\n `If you're using a published plugin, ` +\n `you may need to upgrade your @babel/core version. ` +\n `As an alternative, you can prefix the promise with \"await\". ` +\n `(While processing: ${JSON.stringify(alias)})`,\n );\n }\n\n if (\n externalDependencies.length > 0 &&\n (!cache.configured() || cache.mode() === \"forever\")\n ) {\n let error =\n `A plugin/preset has external untracked dependencies ` +\n `(${externalDependencies[0]}), but the cache `;\n if (!cache.configured()) {\n error += `has not been configured to be invalidated when the external dependencies change. `;\n } else {\n error += ` has been configured to never be invalidated. `;\n }\n error +=\n `Plugins/presets should configure their cache to be invalidated when the external ` +\n `dependencies change, for example using \\`api.cache.invalidate(() => ` +\n `statSync(filepath).mtimeMs)\\` or \\`api.cache.never()\\`\\n` +\n `(While processing: ${JSON.stringify(alias)})`;\n\n throw new Error(error);\n }\n\n return {\n value: item,\n options,\n dirname,\n alias,\n externalDependencies: freezeDeepArray(externalDependencies),\n };\n });\n\nconst pluginDescriptorLoader = makeDescriptorLoader<\n Context.SimplePlugin,\n PluginAPI\n>(makePluginAPI);\nconst presetDescriptorLoader = makeDescriptorLoader<\n Context.SimplePreset,\n PresetAPI\n>(makePresetAPI);\n\nconst instantiatePlugin = makeWeakCache(function* (\n { value, options, dirname, alias, externalDependencies }: LoadedDescriptor,\n cache: CacheConfigurator,\n): Handler {\n const pluginObj = validatePluginObject(value);\n\n const plugin = {\n ...pluginObj,\n };\n if (plugin.visitor) {\n plugin.visitor = traverse.explode({\n ...plugin.visitor,\n });\n }\n\n if (plugin.inherits) {\n const inheritsDescriptor: UnloadedDescriptor = {\n name: undefined,\n alias: `${alias}$inherits`,\n value: plugin.inherits,\n options,\n dirname,\n };\n\n const inherits = yield* forwardAsync(loadPluginDescriptor, run => {\n // If the inherited plugin changes, reinstantiate this plugin.\n return cache.invalidate(data => run(inheritsDescriptor, data));\n });\n\n plugin.pre = chainMaybeAsync(inherits.pre, plugin.pre);\n plugin.post = chainMaybeAsync(inherits.post, plugin.post);\n plugin.manipulateOptions = chainMaybeAsync(\n inherits.manipulateOptions,\n plugin.manipulateOptions,\n );\n plugin.visitor = traverse.visitors.merge([\n inherits.visitor || {},\n plugin.visitor || {},\n ]);\n\n if (inherits.externalDependencies.length > 0) {\n if (externalDependencies.length === 0) {\n externalDependencies = inherits.externalDependencies;\n } else {\n externalDependencies = freezeDeepArray([\n externalDependencies,\n inherits.externalDependencies,\n ]);\n }\n }\n }\n\n return new Plugin(plugin, options, alias, externalDependencies);\n});\n\n/**\n * Instantiate a plugin for the given descriptor, returning the plugin/options pair.\n */\nfunction* loadPluginDescriptor(\n descriptor: UnloadedDescriptor,\n context: Context.SimplePlugin,\n): Handler {\n if (descriptor.value instanceof Plugin) {\n if (descriptor.options) {\n throw new Error(\n \"Passed options to an existing Plugin instance will not work.\",\n );\n }\n\n return descriptor.value;\n }\n\n return yield* instantiatePlugin(\n yield* pluginDescriptorLoader(descriptor, context),\n context,\n );\n}\n\nconst needsFilename = (val: unknown) => val && typeof val !== \"function\";\n\nconst validateIfOptionNeedsFilename = (\n options: ValidatedOptions,\n descriptor: UnloadedDescriptor,\n): void => {\n if (\n needsFilename(options.test) ||\n needsFilename(options.include) ||\n needsFilename(options.exclude)\n ) {\n const formattedPresetName = descriptor.name\n ? `\"${descriptor.name}\"`\n : \"/* your preset */\";\n throw new ConfigError(\n [\n `Preset ${formattedPresetName} requires a filename to be set when babel is called directly,`,\n `\\`\\`\\``,\n `babel.transformSync(code, { filename: 'file.ts', presets: [${formattedPresetName}] });`,\n `\\`\\`\\``,\n `See https://babeljs.io/docs/en/options#filename for more information.`,\n ].join(\"\\n\"),\n );\n }\n};\n\nconst validatePreset = (\n preset: PresetInstance,\n context: ConfigContext,\n descriptor: UnloadedDescriptor,\n): void => {\n if (!context.filename) {\n const { options } = preset;\n validateIfOptionNeedsFilename(options, descriptor);\n options.overrides?.forEach(overrideOptions =>\n validateIfOptionNeedsFilename(overrideOptions, descriptor),\n );\n }\n};\n\nconst instantiatePreset = makeWeakCacheSync(\n ({\n value,\n dirname,\n alias,\n externalDependencies,\n }: LoadedDescriptor): PresetInstance => {\n return {\n options: validate(\"preset\", value),\n alias,\n dirname,\n externalDependencies,\n };\n },\n);\n\n/**\n * Generate a config object that will act as the root of a new nested config.\n */\nfunction* loadPresetDescriptor(\n descriptor: UnloadedDescriptor,\n context: Context.FullPreset,\n): Handler<{\n chain: ConfigChain | null;\n externalDependencies: ReadonlyDeepArray;\n}> {\n const preset = instantiatePreset(\n yield* presetDescriptorLoader(descriptor, context),\n );\n validatePreset(preset, context, descriptor);\n return {\n chain: yield* buildPresetChain(preset, context),\n externalDependencies: preset.externalDependencies,\n };\n}\n\nfunction chainMaybeAsync>(\n a: undefined | ((...args: Args) => R),\n b: undefined | ((...args: Args) => R),\n): (...args: Args) => R {\n if (!a) return b;\n if (!b) return a;\n\n return function (this: unknown, ...args: Args) {\n const res = a.apply(this, args);\n if (res && typeof res.then === \"function\") {\n return res.then(() => b.apply(this, args));\n }\n return b.apply(this, args);\n } as (...args: Args) => R;\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/helpers/config-api.js b/node_modules/@babel/core/lib/config/helpers/config-api.js new file mode 100644 index 00000000..57d3f379 --- /dev/null +++ b/node_modules/@babel/core/lib/config/helpers/config-api.js @@ -0,0 +1,84 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.makeConfigAPI = makeConfigAPI; +exports.makePluginAPI = makePluginAPI; +exports.makePresetAPI = makePresetAPI; +function _semver() { + const data = require("semver"); + _semver = function () { + return data; + }; + return data; +} +var _index = require("../../index.js"); +var _caching = require("../caching.js"); +function makeConfigAPI(cache) { + const env = value => cache.using(data => { + if (value === undefined) return data.envName; + if (typeof value === "function") { + return (0, _caching.assertSimpleType)(value(data.envName)); + } + return (Array.isArray(value) ? value : [value]).some(entry => { + if (typeof entry !== "string") { + throw new Error("Unexpected non-string value"); + } + return entry === data.envName; + }); + }); + const caller = cb => cache.using(data => (0, _caching.assertSimpleType)(cb(data.caller))); + return { + version: _index.version, + cache: cache.simple(), + env, + async: () => false, + caller, + assertVersion + }; +} +function makePresetAPI(cache, externalDependencies) { + const targets = () => JSON.parse(cache.using(data => JSON.stringify(data.targets))); + const addExternalDependency = ref => { + externalDependencies.push(ref); + }; + return Object.assign({}, makeConfigAPI(cache), { + targets, + addExternalDependency + }); +} +function makePluginAPI(cache, externalDependencies) { + const assumption = name => cache.using(data => data.assumptions[name]); + return Object.assign({}, makePresetAPI(cache, externalDependencies), { + assumption + }); +} +function assertVersion(range) { + if (typeof range === "number") { + if (!Number.isInteger(range)) { + throw new Error("Expected string or integer value."); + } + range = `^${range}.0.0-0`; + } + if (typeof range !== "string") { + throw new Error("Expected string or integer value."); + } + if (range === "*" || _semver().satisfies(_index.version, range)) return; + const limit = Error.stackTraceLimit; + if (typeof limit === "number" && limit < 25) { + Error.stackTraceLimit = 25; + } + const err = new Error(`Requires Babel "${range}", but was loaded with "${_index.version}". ` + `If you are sure you have a compatible version of @babel/core, ` + `it is likely that something in your build process is loading the ` + `wrong version. Inspect the stack trace of this error to look for ` + `the first entry that doesn't mention "@babel/core" or "babel-core" ` + `to see what is calling Babel.`); + if (typeof limit === "number") { + Error.stackTraceLimit = limit; + } + throw Object.assign(err, { + code: "BABEL_VERSION_UNSUPPORTED", + version: _index.version, + range + }); +} +0 && 0; + +//# sourceMappingURL=config-api.js.map diff --git a/node_modules/@babel/core/lib/config/helpers/config-api.js.map b/node_modules/@babel/core/lib/config/helpers/config-api.js.map new file mode 100644 index 00000000..f0efdcf9 --- /dev/null +++ b/node_modules/@babel/core/lib/config/helpers/config-api.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_semver","data","require","_index","_caching","makeConfigAPI","cache","env","value","using","undefined","envName","assertSimpleType","Array","isArray","some","entry","Error","caller","cb","version","coreVersion","simple","async","assertVersion","makePresetAPI","externalDependencies","targets","JSON","parse","stringify","addExternalDependency","ref","push","Object","assign","makePluginAPI","assumption","name","assumptions","range","Number","isInteger","semver","satisfies","limit","stackTraceLimit","err","code"],"sources":["../../../src/config/helpers/config-api.ts"],"sourcesContent":["import semver from \"semver\";\nimport type { Targets } from \"@babel/helper-compilation-targets\";\n\nimport { version as coreVersion } from \"../../index.ts\";\nimport { assertSimpleType } from \"../caching.ts\";\nimport type {\n CacheConfigurator,\n SimpleCacheConfigurator,\n SimpleType,\n} from \"../caching.ts\";\n\nimport type { AssumptionName, CallerMetadata } from \"../validation/options.ts\";\n\nimport type * as Context from \"../cache-contexts\";\n\ntype EnvFunction = {\n (): string;\n (extractor: (babelEnv: string) => T): T;\n (envVar: string): boolean;\n (envVars: Array): boolean;\n};\n\ntype CallerFactory = {\n (\n extractor: (callerMetadata: CallerMetadata | undefined) => T,\n ): T;\n (\n extractor: (callerMetadata: CallerMetadata | undefined) => unknown,\n ): SimpleType;\n};\ntype TargetsFunction = () => Targets;\ntype AssumptionFunction = (name: AssumptionName) => boolean | undefined;\n\nexport type ConfigAPI = {\n version: string;\n cache: SimpleCacheConfigurator;\n env: EnvFunction;\n async: () => boolean;\n assertVersion: typeof assertVersion;\n caller?: CallerFactory;\n};\n\nexport type PresetAPI = {\n targets: TargetsFunction;\n addExternalDependency: (ref: string) => void;\n} & ConfigAPI;\n\nexport type PluginAPI = {\n assumption: AssumptionFunction;\n} & PresetAPI;\n\nexport function makeConfigAPI(\n cache: CacheConfigurator,\n): ConfigAPI {\n // TODO(@nicolo-ribaudo): If we remove the explicit type from `value`\n // and the `as any` type cast, TypeScript crashes in an infinite\n // recursion. After upgrading to TS4.7 and finishing the noImplicitAny\n // PR, we should check if it still crashes and report it to the TS team.\n const env: EnvFunction = ((\n value: string | string[] | ((babelEnv: string) => T),\n ) =>\n cache.using(data => {\n if (value === undefined) return data.envName;\n if (typeof value === \"function\") {\n return assertSimpleType(value(data.envName));\n }\n return (Array.isArray(value) ? value : [value]).some(entry => {\n if (typeof entry !== \"string\") {\n throw new Error(\"Unexpected non-string value\");\n }\n return entry === data.envName;\n });\n })) as any;\n\n const caller = (\n cb: (CallerMetadata: CallerMetadata | undefined) => SimpleType,\n ) => cache.using(data => assertSimpleType(cb(data.caller)));\n\n return {\n version: coreVersion,\n cache: cache.simple(),\n // Expose \".env()\" so people can easily get the same env that we expose using the \"env\" key.\n env,\n async: () => false,\n caller,\n assertVersion,\n };\n}\n\nexport function makePresetAPI(\n cache: CacheConfigurator,\n externalDependencies: Array,\n): PresetAPI {\n const targets = () =>\n // We are using JSON.parse/JSON.stringify because it's only possible to cache\n // primitive values. We can safely stringify the targets object because it\n // only contains strings as its properties.\n // Please make the Record and Tuple proposal happen!\n JSON.parse(cache.using(data => JSON.stringify(data.targets)));\n\n const addExternalDependency = (ref: string) => {\n externalDependencies.push(ref);\n };\n\n return { ...makeConfigAPI(cache), targets, addExternalDependency };\n}\n\nexport function makePluginAPI(\n cache: CacheConfigurator,\n externalDependencies: Array,\n): PluginAPI {\n const assumption = (name: string) =>\n cache.using(data => data.assumptions[name]);\n\n return { ...makePresetAPI(cache, externalDependencies), assumption };\n}\n\nfunction assertVersion(range: string | number): void {\n if (typeof range === \"number\") {\n if (!Number.isInteger(range)) {\n throw new Error(\"Expected string or integer value.\");\n }\n range = `^${range}.0.0-0`;\n }\n if (typeof range !== \"string\") {\n throw new Error(\"Expected string or integer value.\");\n }\n\n // We want \"*\" to also allow any pre-release, but we do not pass\n // the includePrerelease option to semver.satisfies because we\n // do not want ^7.0.0 to match 8.0.0-alpha.1.\n if (range === \"*\" || semver.satisfies(coreVersion, range)) return;\n\n const limit = Error.stackTraceLimit;\n\n if (typeof limit === \"number\" && limit < 25) {\n // Bump up the limit if needed so that users are more likely\n // to be able to see what is calling Babel.\n Error.stackTraceLimit = 25;\n }\n\n const err = new Error(\n `Requires Babel \"${range}\", but was loaded with \"${coreVersion}\". ` +\n `If you are sure you have a compatible version of @babel/core, ` +\n `it is likely that something in your build process is loading the ` +\n `wrong version. Inspect the stack trace of this error to look for ` +\n `the first entry that doesn't mention \"@babel/core\" or \"babel-core\" ` +\n `to see what is calling Babel.`,\n );\n\n if (typeof limit === \"number\") {\n Error.stackTraceLimit = limit;\n }\n\n throw Object.assign(err, {\n code: \"BABEL_VERSION_UNSUPPORTED\",\n version: coreVersion,\n range,\n });\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/helpers/deep-array.js b/node_modules/@babel/core/lib/config/helpers/deep-array.js new file mode 100644 index 00000000..c611db20 --- /dev/null +++ b/node_modules/@babel/core/lib/config/helpers/deep-array.js @@ -0,0 +1,23 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.finalize = finalize; +exports.flattenToSet = flattenToSet; +function finalize(deepArr) { + return Object.freeze(deepArr); +} +function flattenToSet(arr) { + const result = new Set(); + const stack = [arr]; + while (stack.length > 0) { + for (const el of stack.pop()) { + if (Array.isArray(el)) stack.push(el);else result.add(el); + } + } + return result; +} +0 && 0; + +//# sourceMappingURL=deep-array.js.map diff --git a/node_modules/@babel/core/lib/config/helpers/deep-array.js.map b/node_modules/@babel/core/lib/config/helpers/deep-array.js.map new file mode 100644 index 00000000..d8c7819d --- /dev/null +++ b/node_modules/@babel/core/lib/config/helpers/deep-array.js.map @@ -0,0 +1 @@ +{"version":3,"names":["finalize","deepArr","Object","freeze","flattenToSet","arr","result","Set","stack","length","el","pop","Array","isArray","push","add"],"sources":["../../../src/config/helpers/deep-array.ts"],"sourcesContent":["export type DeepArray = Array>;\n\n// Just to make sure that DeepArray is not assignable to ReadonlyDeepArray\ndeclare const __marker: unique symbol;\nexport type ReadonlyDeepArray = ReadonlyArray> & {\n [__marker]: true;\n};\n\nexport function finalize(deepArr: DeepArray): ReadonlyDeepArray {\n return Object.freeze(deepArr) as ReadonlyDeepArray;\n}\n\nexport function flattenToSet(\n arr: ReadonlyDeepArray,\n): Set {\n const result = new Set();\n const stack = [arr];\n while (stack.length > 0) {\n for (const el of stack.pop()) {\n if (Array.isArray(el)) stack.push(el as ReadonlyDeepArray);\n else result.add(el as T);\n }\n }\n return result;\n}\n"],"mappings":";;;;;;;AAQO,SAASA,QAAQA,CAAIC,OAAqB,EAAwB;EACvE,OAAOC,MAAM,CAACC,MAAM,CAACF,OAAO,CAAC;AAC/B;AAEO,SAASG,YAAYA,CAC1BC,GAAyB,EACjB;EACR,MAAMC,MAAM,GAAG,IAAIC,GAAG,CAAI,CAAC;EAC3B,MAAMC,KAAK,GAAG,CAACH,GAAG,CAAC;EACnB,OAAOG,KAAK,CAACC,MAAM,GAAG,CAAC,EAAE;IACvB,KAAK,MAAMC,EAAE,IAAIF,KAAK,CAACG,GAAG,CAAC,CAAC,EAAE;MAC5B,IAAIC,KAAK,CAACC,OAAO,CAACH,EAAE,CAAC,EAAEF,KAAK,CAACM,IAAI,CAACJ,EAA0B,CAAC,CAAC,KACzDJ,MAAM,CAACS,GAAG,CAACL,EAAO,CAAC;IAC1B;EACF;EACA,OAAOJ,MAAM;AACf;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/helpers/environment.js b/node_modules/@babel/core/lib/config/helpers/environment.js new file mode 100644 index 00000000..a23b80be --- /dev/null +++ b/node_modules/@babel/core/lib/config/helpers/environment.js @@ -0,0 +1,12 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.getEnv = getEnv; +function getEnv(defaultValue = "development") { + return process.env.BABEL_ENV || process.env.NODE_ENV || defaultValue; +} +0 && 0; + +//# sourceMappingURL=environment.js.map diff --git a/node_modules/@babel/core/lib/config/helpers/environment.js.map b/node_modules/@babel/core/lib/config/helpers/environment.js.map new file mode 100644 index 00000000..c34fc173 --- /dev/null +++ b/node_modules/@babel/core/lib/config/helpers/environment.js.map @@ -0,0 +1 @@ +{"version":3,"names":["getEnv","defaultValue","process","env","BABEL_ENV","NODE_ENV"],"sources":["../../../src/config/helpers/environment.ts"],"sourcesContent":["export function getEnv(defaultValue: string = \"development\"): string {\n return process.env.BABEL_ENV || process.env.NODE_ENV || defaultValue;\n}\n"],"mappings":";;;;;;AAAO,SAASA,MAAMA,CAACC,YAAoB,GAAG,aAAa,EAAU;EACnE,OAAOC,OAAO,CAACC,GAAG,CAACC,SAAS,IAAIF,OAAO,CAACC,GAAG,CAACE,QAAQ,IAAIJ,YAAY;AACtE;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/index.js b/node_modules/@babel/core/lib/config/index.js new file mode 100644 index 00000000..b2262b27 --- /dev/null +++ b/node_modules/@babel/core/lib/config/index.js @@ -0,0 +1,93 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.createConfigItem = createConfigItem; +exports.createConfigItemAsync = createConfigItemAsync; +exports.createConfigItemSync = createConfigItemSync; +Object.defineProperty(exports, "default", { + enumerable: true, + get: function () { + return _full.default; + } +}); +exports.loadOptions = loadOptions; +exports.loadOptionsAsync = loadOptionsAsync; +exports.loadOptionsSync = loadOptionsSync; +exports.loadPartialConfig = loadPartialConfig; +exports.loadPartialConfigAsync = loadPartialConfigAsync; +exports.loadPartialConfigSync = loadPartialConfigSync; +function _gensync() { + const data = require("gensync"); + _gensync = function () { + return data; + }; + return data; +} +var _full = require("./full.js"); +var _partial = require("./partial.js"); +var _item = require("./item.js"); +var _rewriteStackTrace = require("../errors/rewrite-stack-trace.js"); +const loadPartialConfigRunner = _gensync()(_partial.loadPartialConfig); +function loadPartialConfigAsync(...args) { + return (0, _rewriteStackTrace.beginHiddenCallStack)(loadPartialConfigRunner.async)(...args); +} +function loadPartialConfigSync(...args) { + return (0, _rewriteStackTrace.beginHiddenCallStack)(loadPartialConfigRunner.sync)(...args); +} +function loadPartialConfig(opts, callback) { + if (callback !== undefined) { + (0, _rewriteStackTrace.beginHiddenCallStack)(loadPartialConfigRunner.errback)(opts, callback); + } else if (typeof opts === "function") { + (0, _rewriteStackTrace.beginHiddenCallStack)(loadPartialConfigRunner.errback)(undefined, opts); + } else { + { + return loadPartialConfigSync(opts); + } + } +} +function* loadOptionsImpl(opts) { + var _config$options; + const config = yield* (0, _full.default)(opts); + return (_config$options = config == null ? void 0 : config.options) != null ? _config$options : null; +} +const loadOptionsRunner = _gensync()(loadOptionsImpl); +function loadOptionsAsync(...args) { + return (0, _rewriteStackTrace.beginHiddenCallStack)(loadOptionsRunner.async)(...args); +} +function loadOptionsSync(...args) { + return (0, _rewriteStackTrace.beginHiddenCallStack)(loadOptionsRunner.sync)(...args); +} +function loadOptions(opts, callback) { + if (callback !== undefined) { + (0, _rewriteStackTrace.beginHiddenCallStack)(loadOptionsRunner.errback)(opts, callback); + } else if (typeof opts === "function") { + (0, _rewriteStackTrace.beginHiddenCallStack)(loadOptionsRunner.errback)(undefined, opts); + } else { + { + return loadOptionsSync(opts); + } + } +} +const createConfigItemRunner = _gensync()(_item.createConfigItem); +function createConfigItemAsync(...args) { + return (0, _rewriteStackTrace.beginHiddenCallStack)(createConfigItemRunner.async)(...args); +} +function createConfigItemSync(...args) { + return (0, _rewriteStackTrace.beginHiddenCallStack)(createConfigItemRunner.sync)(...args); +} +function createConfigItem(target, options, callback) { + if (callback !== undefined) { + (0, _rewriteStackTrace.beginHiddenCallStack)(createConfigItemRunner.errback)(target, options, callback); + } else if (typeof options === "function") { + (0, _rewriteStackTrace.beginHiddenCallStack)(createConfigItemRunner.errback)(target, undefined, callback); + } else { + { + return createConfigItemSync(target, options); + } + } +} +0 && 0; + +//# sourceMappingURL=index.js.map diff --git a/node_modules/@babel/core/lib/config/index.js.map b/node_modules/@babel/core/lib/config/index.js.map new file mode 100644 index 00000000..b47ec76c --- /dev/null +++ b/node_modules/@babel/core/lib/config/index.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_gensync","data","require","_full","_partial","_item","_rewriteStackTrace","loadPartialConfigRunner","gensync","loadPartialConfigImpl","loadPartialConfigAsync","args","beginHiddenCallStack","async","loadPartialConfigSync","sync","loadPartialConfig","opts","callback","undefined","errback","loadOptionsImpl","_config$options","config","loadFullConfig","options","loadOptionsRunner","loadOptionsAsync","loadOptionsSync","loadOptions","createConfigItemRunner","createConfigItemImpl","createConfigItemAsync","createConfigItemSync","createConfigItem","target"],"sources":["../../src/config/index.ts"],"sourcesContent":["import gensync, { type Handler } from \"gensync\";\n\nexport type {\n ResolvedConfig,\n InputOptions,\n PluginPasses,\n Plugin,\n} from \"./full.ts\";\n\nimport type { InputOptions, PluginTarget } from \"./validation/options.ts\";\n\nimport type {\n PluginAPI as basePluginAPI,\n PresetAPI as basePresetAPI,\n} from \"./helpers/config-api.ts\";\nexport type { PluginObject } from \"./validation/plugins.ts\";\ntype PluginAPI = basePluginAPI & typeof import(\"..\");\ntype PresetAPI = basePresetAPI & typeof import(\"..\");\nexport type { PluginAPI, PresetAPI };\n// todo: may need to refine PresetObject to be a subset of ValidatedOptions\nexport type {\n CallerMetadata,\n ValidatedOptions as PresetObject,\n} from \"./validation/options.ts\";\n\nimport loadFullConfig, { type ResolvedConfig } from \"./full.ts\";\nimport {\n type PartialConfig,\n loadPartialConfig as loadPartialConfigImpl,\n} from \"./partial.ts\";\n\nexport { loadFullConfig as default };\nexport type { PartialConfig } from \"./partial.ts\";\n\nimport { createConfigItem as createConfigItemImpl } from \"./item.ts\";\nimport type { ConfigItem } from \"./item.ts\";\nexport type { ConfigItem };\n\nimport { beginHiddenCallStack } from \"../errors/rewrite-stack-trace.ts\";\n\nconst loadPartialConfigRunner = gensync(loadPartialConfigImpl);\nexport function loadPartialConfigAsync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(loadPartialConfigRunner.async)(...args);\n}\nexport function loadPartialConfigSync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(loadPartialConfigRunner.sync)(...args);\n}\nexport function loadPartialConfig(\n opts: Parameters[0],\n callback?: (err: Error, val: PartialConfig | null) => void,\n) {\n if (callback !== undefined) {\n beginHiddenCallStack(loadPartialConfigRunner.errback)(opts, callback);\n } else if (typeof opts === \"function\") {\n beginHiddenCallStack(loadPartialConfigRunner.errback)(\n undefined,\n opts as (err: Error, val: PartialConfig | null) => void,\n );\n } else {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"Starting from Babel 8.0.0, the 'loadPartialConfig' function expects a callback. If you need to call it synchronously, please use 'loadPartialConfigSync'.\",\n );\n } else {\n return loadPartialConfigSync(opts);\n }\n }\n}\n\nfunction* loadOptionsImpl(opts: InputOptions): Handler {\n const config = yield* loadFullConfig(opts);\n // NOTE: We want to return \"null\" explicitly, while ?. alone returns undefined\n return config?.options ?? null;\n}\nconst loadOptionsRunner = gensync(loadOptionsImpl);\nexport function loadOptionsAsync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(loadOptionsRunner.async)(...args);\n}\nexport function loadOptionsSync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(loadOptionsRunner.sync)(...args);\n}\nexport function loadOptions(\n opts: Parameters[0],\n callback?: (err: Error, val: ResolvedConfig | null) => void,\n) {\n if (callback !== undefined) {\n beginHiddenCallStack(loadOptionsRunner.errback)(opts, callback);\n } else if (typeof opts === \"function\") {\n beginHiddenCallStack(loadOptionsRunner.errback)(\n undefined,\n opts as (err: Error, val: ResolvedConfig | null) => void,\n );\n } else {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"Starting from Babel 8.0.0, the 'loadOptions' function expects a callback. If you need to call it synchronously, please use 'loadOptionsSync'.\",\n );\n } else {\n return loadOptionsSync(opts);\n }\n }\n}\n\nconst createConfigItemRunner = gensync(createConfigItemImpl);\nexport function createConfigItemAsync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(createConfigItemRunner.async)(...args);\n}\nexport function createConfigItemSync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(createConfigItemRunner.sync)(...args);\n}\nexport function createConfigItem(\n target: PluginTarget,\n options: Parameters[1],\n callback?: (err: Error, val: ConfigItem | null) => void,\n) {\n if (callback !== undefined) {\n beginHiddenCallStack(createConfigItemRunner.errback)(\n target,\n options,\n callback,\n );\n } else if (typeof options === \"function\") {\n beginHiddenCallStack(createConfigItemRunner.errback)(\n target,\n undefined,\n callback,\n );\n } else {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"Starting from Babel 8.0.0, the 'createConfigItem' function expects a callback. If you need to call it synchronously, please use 'createConfigItemSync'.\",\n );\n } else {\n return createConfigItemSync(target, options);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/item.js b/node_modules/@babel/core/lib/config/item.js new file mode 100644 index 00000000..69cf01ff --- /dev/null +++ b/node_modules/@babel/core/lib/config/item.js @@ -0,0 +1,67 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.createConfigItem = createConfigItem; +exports.createItemFromDescriptor = createItemFromDescriptor; +exports.getItemDescriptor = getItemDescriptor; +function _path() { + const data = require("path"); + _path = function () { + return data; + }; + return data; +} +var _configDescriptors = require("./config-descriptors.js"); +function createItemFromDescriptor(desc) { + return new ConfigItem(desc); +} +function* createConfigItem(value, { + dirname = ".", + type +} = {}) { + const descriptor = yield* (0, _configDescriptors.createDescriptor)(value, _path().resolve(dirname), { + type, + alias: "programmatic item" + }); + return createItemFromDescriptor(descriptor); +} +const CONFIG_ITEM_BRAND = Symbol.for("@babel/core@7 - ConfigItem"); +function getItemDescriptor(item) { + if (item != null && item[CONFIG_ITEM_BRAND]) { + return item._descriptor; + } + return undefined; +} +class ConfigItem { + constructor(descriptor) { + this._descriptor = void 0; + this[CONFIG_ITEM_BRAND] = true; + this.value = void 0; + this.options = void 0; + this.dirname = void 0; + this.name = void 0; + this.file = void 0; + this._descriptor = descriptor; + Object.defineProperty(this, "_descriptor", { + enumerable: false + }); + Object.defineProperty(this, CONFIG_ITEM_BRAND, { + enumerable: false + }); + this.value = this._descriptor.value; + this.options = this._descriptor.options; + this.dirname = this._descriptor.dirname; + this.name = this._descriptor.name; + this.file = this._descriptor.file ? { + request: this._descriptor.file.request, + resolved: this._descriptor.file.resolved + } : undefined; + Object.freeze(this); + } +} +Object.freeze(ConfigItem.prototype); +0 && 0; + +//# sourceMappingURL=item.js.map diff --git a/node_modules/@babel/core/lib/config/item.js.map b/node_modules/@babel/core/lib/config/item.js.map new file mode 100644 index 00000000..877504d4 --- /dev/null +++ b/node_modules/@babel/core/lib/config/item.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_path","data","require","_configDescriptors","createItemFromDescriptor","desc","ConfigItem","createConfigItem","value","dirname","type","descriptor","createDescriptor","path","resolve","alias","CONFIG_ITEM_BRAND","Symbol","for","getItemDescriptor","item","_descriptor","undefined","constructor","options","name","file","Object","defineProperty","enumerable","request","resolved","freeze","prototype"],"sources":["../../src/config/item.ts"],"sourcesContent":["import type { Handler } from \"gensync\";\nimport type { PluginTarget, PluginOptions } from \"./validation/options.ts\";\n\nimport path from \"node:path\";\nimport { createDescriptor } from \"./config-descriptors.ts\";\n\nimport type { UnloadedDescriptor } from \"./config-descriptors.ts\";\n\nexport function createItemFromDescriptor(\n desc: UnloadedDescriptor,\n): ConfigItem {\n return new ConfigItem(desc);\n}\n\n/**\n * Create a config item using the same value format used in Babel's config\n * files. Items returned from this function should be cached by the caller\n * ideally, as recreating the config item will mean re-resolving the item\n * and re-evaluating the plugin/preset function.\n */\nexport function* createConfigItem(\n value:\n | PluginTarget\n | [PluginTarget, PluginOptions]\n | [PluginTarget, PluginOptions, string | void],\n {\n dirname = \".\",\n type,\n }: {\n dirname?: string;\n type?: \"preset\" | \"plugin\";\n } = {},\n): Handler> {\n const descriptor = yield* createDescriptor(value, path.resolve(dirname), {\n type,\n alias: \"programmatic item\",\n });\n\n return createItemFromDescriptor(descriptor);\n}\n\nconst CONFIG_ITEM_BRAND = Symbol.for(\"@babel/core@7 - ConfigItem\");\n\nexport function getItemDescriptor(\n item: unknown,\n): UnloadedDescriptor | void {\n if ((item as any)?.[CONFIG_ITEM_BRAND]) {\n return (item as ConfigItem)._descriptor;\n }\n\n return undefined;\n}\n\nexport type { ConfigItem };\n\n/**\n * A public representation of a plugin/preset that will _eventually_ be load.\n * Users can use this to interact with the results of a loaded Babel\n * configuration.\n *\n * Any changes to public properties of this class should be considered a\n * breaking change to Babel's API.\n */\nclass ConfigItem {\n /**\n * The private underlying descriptor that Babel actually cares about.\n * If you access this, you are a bad person.\n */\n _descriptor: UnloadedDescriptor;\n\n // TODO(Babel 9): Check if this symbol needs to be updated\n /**\n * Used to detect ConfigItem instances from other Babel instances.\n */\n [CONFIG_ITEM_BRAND] = true;\n\n /**\n * The resolved value of the item itself.\n */\n value: object | Function;\n\n /**\n * The options, if any, that were passed to the item.\n * Mutating this will lead to undefined behavior.\n *\n * \"false\" means that this item has been disabled.\n */\n options: object | void | false;\n\n /**\n * The directory that the options for this item are relative to.\n */\n dirname: string;\n\n /**\n * Get the name of the plugin, if the user gave it one.\n */\n name: string | void;\n\n /**\n * Data about the file that the item was loaded from, if Babel knows it.\n */\n file: {\n // The requested path, e.g. \"@babel/env\".\n request: string;\n // The resolved absolute path of the file.\n resolved: string;\n } | void;\n\n constructor(descriptor: UnloadedDescriptor) {\n // Make people less likely to stumble onto this if they are exploring\n // programmatically, and also make sure that if people happen to\n // pass the item through JSON.stringify, it doesn't show up.\n this._descriptor = descriptor;\n Object.defineProperty(this, \"_descriptor\", { enumerable: false });\n\n Object.defineProperty(this, CONFIG_ITEM_BRAND, { enumerable: false });\n\n this.value = this._descriptor.value;\n this.options = this._descriptor.options;\n this.dirname = this._descriptor.dirname;\n this.name = this._descriptor.name;\n this.file = this._descriptor.file\n ? {\n request: this._descriptor.file.request,\n resolved: this._descriptor.file.resolved,\n }\n : undefined;\n\n // Freeze the object to make it clear that people shouldn't expect mutating\n // this object to do anything. A new item should be created if they want\n // to change something.\n Object.freeze(this);\n }\n}\n\nObject.freeze(ConfigItem.prototype);\n"],"mappings":";;;;;;;;AAGA,SAAAA,MAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,KAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,IAAAE,kBAAA,GAAAD,OAAA;AAIO,SAASE,wBAAwBA,CACtCC,IAA6B,EACZ;EACjB,OAAO,IAAIC,UAAU,CAACD,IAAI,CAAC;AAC7B;AAQO,UAAUE,gBAAgBA,CAC/BC,KAGgD,EAChD;EACEC,OAAO,GAAG,GAAG;EACbC;AAIF,CAAC,GAAG,CAAC,CAAC,EACoB;EAC1B,MAAMC,UAAU,GAAG,OAAO,IAAAC,mCAAgB,EAACJ,KAAK,EAAEK,MAAGA,CAAC,CAACC,OAAO,CAACL,OAAO,CAAC,EAAE;IACvEC,IAAI;IACJK,KAAK,EAAE;EACT,CAAC,CAAC;EAEF,OAAOX,wBAAwB,CAACO,UAAU,CAAC;AAC7C;AAEA,MAAMK,iBAAiB,GAAGC,MAAM,CAACC,GAAG,CAAC,4BAA4B,CAAC;AAE3D,SAASC,iBAAiBA,CAC/BC,IAAa,EACmB;EAChC,IAAKA,IAAI,YAAJA,IAAI,CAAWJ,iBAAiB,CAAC,EAAE;IACtC,OAAQI,IAAI,CAAqBC,WAAW;EAC9C;EAEA,OAAOC,SAAS;AAClB;AAYA,MAAMhB,UAAU,CAAM;EA8CpBiB,WAAWA,CAACZ,UAAmC,EAAE;IAAA,KAzCjDU,WAAW;IAAA,KAMVL,iBAAiB,IAAI,IAAI;IAAA,KAK1BR,KAAK;IAAA,KAQLgB,OAAO;IAAA,KAKPf,OAAO;IAAA,KAKPgB,IAAI;IAAA,KAKJC,IAAI;IAWF,IAAI,CAACL,WAAW,GAAGV,UAAU;IAC7BgB,MAAM,CAACC,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE;MAAEC,UAAU,EAAE;IAAM,CAAC,CAAC;IAEjEF,MAAM,CAACC,cAAc,CAAC,IAAI,EAAEZ,iBAAiB,EAAE;MAAEa,UAAU,EAAE;IAAM,CAAC,CAAC;IAErE,IAAI,CAACrB,KAAK,GAAG,IAAI,CAACa,WAAW,CAACb,KAAK;IACnC,IAAI,CAACgB,OAAO,GAAG,IAAI,CAACH,WAAW,CAACG,OAAO;IACvC,IAAI,CAACf,OAAO,GAAG,IAAI,CAACY,WAAW,CAACZ,OAAO;IACvC,IAAI,CAACgB,IAAI,GAAG,IAAI,CAACJ,WAAW,CAACI,IAAI;IACjC,IAAI,CAACC,IAAI,GAAG,IAAI,CAACL,WAAW,CAACK,IAAI,GAC7B;MACEI,OAAO,EAAE,IAAI,CAACT,WAAW,CAACK,IAAI,CAACI,OAAO;MACtCC,QAAQ,EAAE,IAAI,CAACV,WAAW,CAACK,IAAI,CAACK;IAClC,CAAC,GACDT,SAAS;IAKbK,MAAM,CAACK,MAAM,CAAC,IAAI,CAAC;EACrB;AACF;AAEAL,MAAM,CAACK,MAAM,CAAC1B,UAAU,CAAC2B,SAAS,CAAC;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/partial.js b/node_modules/@babel/core/lib/config/partial.js new file mode 100644 index 00000000..a5a2f656 --- /dev/null +++ b/node_modules/@babel/core/lib/config/partial.js @@ -0,0 +1,158 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = loadPrivatePartialConfig; +exports.loadPartialConfig = loadPartialConfig; +function _path() { + const data = require("path"); + _path = function () { + return data; + }; + return data; +} +var _plugin = require("./plugin.js"); +var _util = require("./util.js"); +var _item = require("./item.js"); +var _configChain = require("./config-chain.js"); +var _environment = require("./helpers/environment.js"); +var _options = require("./validation/options.js"); +var _index = require("./files/index.js"); +var _resolveTargets = require("./resolve-targets.js"); +const _excluded = ["showIgnoredFiles"]; +function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } +function resolveRootMode(rootDir, rootMode) { + switch (rootMode) { + case "root": + return rootDir; + case "upward-optional": + { + const upwardRootDir = (0, _index.findConfigUpwards)(rootDir); + return upwardRootDir === null ? rootDir : upwardRootDir; + } + case "upward": + { + const upwardRootDir = (0, _index.findConfigUpwards)(rootDir); + if (upwardRootDir !== null) return upwardRootDir; + throw Object.assign(new Error(`Babel was run with rootMode:"upward" but a root could not ` + `be found when searching upward from "${rootDir}".\n` + `One of the following config files must be in the directory tree: ` + `"${_index.ROOT_CONFIG_FILENAMES.join(", ")}".`), { + code: "BABEL_ROOT_NOT_FOUND", + dirname: rootDir + }); + } + default: + throw new Error(`Assertion failure - unknown rootMode value.`); + } +} +function* loadPrivatePartialConfig(inputOpts) { + if (inputOpts != null && (typeof inputOpts !== "object" || Array.isArray(inputOpts))) { + throw new Error("Babel options must be an object, null, or undefined"); + } + const args = inputOpts ? (0, _options.validate)("arguments", inputOpts) : {}; + const { + envName = (0, _environment.getEnv)(), + cwd = ".", + root: rootDir = ".", + rootMode = "root", + caller, + cloneInputAst = true + } = args; + const absoluteCwd = _path().resolve(cwd); + const absoluteRootDir = resolveRootMode(_path().resolve(absoluteCwd, rootDir), rootMode); + const filename = typeof args.filename === "string" ? _path().resolve(cwd, args.filename) : undefined; + const showConfigPath = yield* (0, _index.resolveShowConfigPath)(absoluteCwd); + const context = { + filename, + cwd: absoluteCwd, + root: absoluteRootDir, + envName, + caller, + showConfig: showConfigPath === filename + }; + const configChain = yield* (0, _configChain.buildRootChain)(args, context); + if (!configChain) return null; + const merged = { + assumptions: {} + }; + configChain.options.forEach(opts => { + (0, _util.mergeOptions)(merged, opts); + }); + const options = Object.assign({}, merged, { + targets: (0, _resolveTargets.resolveTargets)(merged, absoluteRootDir), + cloneInputAst, + babelrc: false, + configFile: false, + browserslistConfigFile: false, + passPerPreset: false, + envName: context.envName, + cwd: context.cwd, + root: context.root, + rootMode: "root", + filename: typeof context.filename === "string" ? context.filename : undefined, + plugins: configChain.plugins.map(descriptor => (0, _item.createItemFromDescriptor)(descriptor)), + presets: configChain.presets.map(descriptor => (0, _item.createItemFromDescriptor)(descriptor)) + }); + return { + options, + context, + fileHandling: configChain.fileHandling, + ignore: configChain.ignore, + babelrc: configChain.babelrc, + config: configChain.config, + files: configChain.files + }; +} +function* loadPartialConfig(opts) { + let showIgnoredFiles = false; + if (typeof opts === "object" && opts !== null && !Array.isArray(opts)) { + var _opts = opts; + ({ + showIgnoredFiles + } = _opts); + opts = _objectWithoutPropertiesLoose(_opts, _excluded); + _opts; + } + const result = yield* loadPrivatePartialConfig(opts); + if (!result) return null; + const { + options, + babelrc, + ignore, + config, + fileHandling, + files + } = result; + if (fileHandling === "ignored" && !showIgnoredFiles) { + return null; + } + (options.plugins || []).forEach(item => { + if (item.value instanceof _plugin.default) { + throw new Error("Passing cached plugin instances is not supported in " + "babel.loadPartialConfig()"); + } + }); + return new PartialConfig(options, babelrc ? babelrc.filepath : undefined, ignore ? ignore.filepath : undefined, config ? config.filepath : undefined, fileHandling, files); +} +class PartialConfig { + constructor(options, babelrc, ignore, config, fileHandling, files) { + this.options = void 0; + this.babelrc = void 0; + this.babelignore = void 0; + this.config = void 0; + this.fileHandling = void 0; + this.files = void 0; + this.options = options; + this.babelignore = ignore; + this.babelrc = babelrc; + this.config = config; + this.fileHandling = fileHandling; + this.files = files; + Object.freeze(this); + } + hasFilesystemConfig() { + return this.babelrc !== undefined || this.config !== undefined; + } +} +Object.freeze(PartialConfig.prototype); +0 && 0; + +//# sourceMappingURL=partial.js.map diff --git a/node_modules/@babel/core/lib/config/partial.js.map b/node_modules/@babel/core/lib/config/partial.js.map new file mode 100644 index 00000000..6115e551 --- /dev/null +++ b/node_modules/@babel/core/lib/config/partial.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_path","data","require","_plugin","_util","_item","_configChain","_environment","_options","_index","_resolveTargets","_excluded","_objectWithoutPropertiesLoose","r","e","t","n","hasOwnProperty","call","indexOf","resolveRootMode","rootDir","rootMode","upwardRootDir","findConfigUpwards","Object","assign","Error","ROOT_CONFIG_FILENAMES","join","code","dirname","loadPrivatePartialConfig","inputOpts","Array","isArray","args","validate","envName","getEnv","cwd","root","caller","cloneInputAst","absoluteCwd","path","resolve","absoluteRootDir","filename","undefined","showConfigPath","resolveShowConfigPath","context","showConfig","configChain","buildRootChain","merged","assumptions","options","forEach","opts","mergeOptions","targets","resolveTargets","babelrc","configFile","browserslistConfigFile","passPerPreset","plugins","map","descriptor","createItemFromDescriptor","presets","fileHandling","ignore","config","files","loadPartialConfig","showIgnoredFiles","_opts","result","item","value","Plugin","PartialConfig","filepath","constructor","babelignore","freeze","hasFilesystemConfig","prototype"],"sources":["../../src/config/partial.ts"],"sourcesContent":["import path from \"node:path\";\nimport type { Handler } from \"gensync\";\nimport Plugin from \"./plugin.ts\";\nimport { mergeOptions } from \"./util.ts\";\nimport { createItemFromDescriptor } from \"./item.ts\";\nimport { buildRootChain } from \"./config-chain.ts\";\nimport type { ConfigContext, FileHandling } from \"./config-chain.ts\";\nimport { getEnv } from \"./helpers/environment.ts\";\nimport { validate } from \"./validation/options.ts\";\n\nimport type {\n ValidatedOptions,\n NormalizedOptions,\n RootMode,\n InputOptions,\n} from \"./validation/options.ts\";\n\nimport {\n findConfigUpwards,\n resolveShowConfigPath,\n ROOT_CONFIG_FILENAMES,\n} from \"./files/index.ts\";\nimport type { ConfigFile, IgnoreFile } from \"./files/index.ts\";\nimport { resolveTargets } from \"./resolve-targets.ts\";\n\nfunction resolveRootMode(rootDir: string, rootMode: RootMode): string {\n switch (rootMode) {\n case \"root\":\n return rootDir;\n\n case \"upward-optional\": {\n const upwardRootDir = findConfigUpwards(rootDir);\n return upwardRootDir === null ? rootDir : upwardRootDir;\n }\n\n case \"upward\": {\n const upwardRootDir = findConfigUpwards(rootDir);\n if (upwardRootDir !== null) return upwardRootDir;\n\n throw Object.assign(\n new Error(\n `Babel was run with rootMode:\"upward\" but a root could not ` +\n `be found when searching upward from \"${rootDir}\".\\n` +\n `One of the following config files must be in the directory tree: ` +\n `\"${ROOT_CONFIG_FILENAMES.join(\", \")}\".`,\n ) as any,\n {\n code: \"BABEL_ROOT_NOT_FOUND\",\n dirname: rootDir,\n },\n );\n }\n default:\n throw new Error(`Assertion failure - unknown rootMode value.`);\n }\n}\n\nexport type PrivPartialConfig = {\n showIgnoredFiles?: boolean;\n options: NormalizedOptions;\n context: ConfigContext;\n babelrc: ConfigFile | void;\n config: ConfigFile | void;\n ignore: IgnoreFile | void;\n fileHandling: FileHandling;\n files: Set;\n};\n\nexport default function* loadPrivatePartialConfig(\n inputOpts: InputOptions,\n): Handler {\n if (\n inputOpts != null &&\n (typeof inputOpts !== \"object\" || Array.isArray(inputOpts))\n ) {\n throw new Error(\"Babel options must be an object, null, or undefined\");\n }\n\n const args = inputOpts ? validate(\"arguments\", inputOpts) : {};\n\n const {\n envName = getEnv(),\n cwd = \".\",\n root: rootDir = \".\",\n rootMode = \"root\",\n caller,\n cloneInputAst = true,\n } = args;\n const absoluteCwd = path.resolve(cwd);\n const absoluteRootDir = resolveRootMode(\n path.resolve(absoluteCwd, rootDir),\n rootMode,\n );\n\n const filename =\n typeof args.filename === \"string\"\n ? path.resolve(cwd, args.filename)\n : undefined;\n\n const showConfigPath = yield* resolveShowConfigPath(absoluteCwd);\n\n const context: ConfigContext = {\n filename,\n cwd: absoluteCwd,\n root: absoluteRootDir,\n envName,\n caller,\n showConfig: showConfigPath === filename,\n };\n\n const configChain = yield* buildRootChain(args, context);\n if (!configChain) return null;\n\n const merged: ValidatedOptions = {\n assumptions: {},\n };\n configChain.options.forEach(opts => {\n mergeOptions(merged as any, opts);\n });\n\n const options: NormalizedOptions = {\n ...merged,\n targets: resolveTargets(merged, absoluteRootDir),\n\n // Tack the passes onto the object itself so that, if this object is\n // passed back to Babel a second time, it will be in the right structure\n // to not change behavior.\n cloneInputAst,\n babelrc: false,\n configFile: false,\n browserslistConfigFile: false,\n passPerPreset: false,\n envName: context.envName,\n cwd: context.cwd,\n root: context.root,\n rootMode: \"root\",\n filename:\n typeof context.filename === \"string\" ? context.filename : undefined,\n\n plugins: configChain.plugins.map(descriptor =>\n createItemFromDescriptor(descriptor),\n ),\n presets: configChain.presets.map(descriptor =>\n createItemFromDescriptor(descriptor),\n ),\n };\n\n return {\n options,\n context,\n fileHandling: configChain.fileHandling,\n ignore: configChain.ignore,\n babelrc: configChain.babelrc,\n config: configChain.config,\n files: configChain.files,\n };\n}\n\nexport function* loadPartialConfig(\n opts?: InputOptions,\n): Handler {\n let showIgnoredFiles = false;\n // We only extract showIgnoredFiles if opts is an object, so that\n // loadPrivatePartialConfig can throw the appropriate error if it's not.\n if (typeof opts === \"object\" && opts !== null && !Array.isArray(opts)) {\n ({ showIgnoredFiles, ...opts } = opts);\n }\n\n const result: PrivPartialConfig | undefined | null =\n yield* loadPrivatePartialConfig(opts);\n if (!result) return null;\n\n const { options, babelrc, ignore, config, fileHandling, files } = result;\n\n if (fileHandling === \"ignored\" && !showIgnoredFiles) {\n return null;\n }\n\n (options.plugins || []).forEach(item => {\n // @ts-expect-error todo(flow->ts): better type annotation for `item.value`\n if (item.value instanceof Plugin) {\n throw new Error(\n \"Passing cached plugin instances is not supported in \" +\n \"babel.loadPartialConfig()\",\n );\n }\n });\n\n return new PartialConfig(\n options,\n babelrc ? babelrc.filepath : undefined,\n ignore ? ignore.filepath : undefined,\n config ? config.filepath : undefined,\n fileHandling,\n files,\n );\n}\n\nexport type { PartialConfig };\n\nclass PartialConfig {\n /**\n * These properties are public, so any changes to them should be considered\n * a breaking change to Babel's API.\n */\n options: NormalizedOptions;\n babelrc: string | void;\n babelignore: string | void;\n config: string | void;\n fileHandling: FileHandling;\n files: Set;\n\n constructor(\n options: NormalizedOptions,\n babelrc: string | void,\n ignore: string | void,\n config: string | void,\n fileHandling: FileHandling,\n files: Set,\n ) {\n this.options = options;\n this.babelignore = ignore;\n this.babelrc = babelrc;\n this.config = config;\n this.fileHandling = fileHandling;\n this.files = files;\n\n // Freeze since this is a public API and it should be extremely obvious that\n // reassigning properties on here does nothing.\n Object.freeze(this);\n }\n\n /**\n * Returns true if there is a config file in the filesystem for this config.\n */\n hasFilesystemConfig(): boolean {\n return this.babelrc !== undefined || this.config !== undefined;\n }\n}\nObject.freeze(PartialConfig.prototype);\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/pattern-to-regex.js b/node_modules/@babel/core/lib/config/pattern-to-regex.js new file mode 100644 index 00000000..e061f793 --- /dev/null +++ b/node_modules/@babel/core/lib/config/pattern-to-regex.js @@ -0,0 +1,38 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = pathToPattern; +function _path() { + const data = require("path"); + _path = function () { + return data; + }; + return data; +} +const sep = `\\${_path().sep}`; +const endSep = `(?:${sep}|$)`; +const substitution = `[^${sep}]+`; +const starPat = `(?:${substitution}${sep})`; +const starPatLast = `(?:${substitution}${endSep})`; +const starStarPat = `${starPat}*?`; +const starStarPatLast = `${starPat}*?${starPatLast}?`; +function escapeRegExp(string) { + return string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&"); +} +function pathToPattern(pattern, dirname) { + const parts = _path().resolve(dirname, pattern).split(_path().sep); + return new RegExp(["^", ...parts.map((part, i) => { + const last = i === parts.length - 1; + if (part === "**") return last ? starStarPatLast : starStarPat; + if (part === "*") return last ? starPatLast : starPat; + if (part.indexOf("*.") === 0) { + return substitution + escapeRegExp(part.slice(1)) + (last ? endSep : sep); + } + return escapeRegExp(part) + (last ? endSep : sep); + })].join("")); +} +0 && 0; + +//# sourceMappingURL=pattern-to-regex.js.map diff --git a/node_modules/@babel/core/lib/config/pattern-to-regex.js.map b/node_modules/@babel/core/lib/config/pattern-to-regex.js.map new file mode 100644 index 00000000..5a02bc67 --- /dev/null +++ b/node_modules/@babel/core/lib/config/pattern-to-regex.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_path","data","require","sep","path","endSep","substitution","starPat","starPatLast","starStarPat","starStarPatLast","escapeRegExp","string","replace","pathToPattern","pattern","dirname","parts","resolve","split","RegExp","map","part","i","last","length","indexOf","slice","join"],"sources":["../../src/config/pattern-to-regex.ts"],"sourcesContent":["import path from \"node:path\";\n\nconst sep = `\\\\${path.sep}`;\nconst endSep = `(?:${sep}|$)`;\n\nconst substitution = `[^${sep}]+`;\n\nconst starPat = `(?:${substitution}${sep})`;\nconst starPatLast = `(?:${substitution}${endSep})`;\n\nconst starStarPat = `${starPat}*?`;\nconst starStarPatLast = `${starPat}*?${starPatLast}?`;\n\nfunction escapeRegExp(string: string) {\n return string.replace(/[|\\\\{}()[\\]^$+*?.]/g, \"\\\\$&\");\n}\n\n/**\n * Implement basic pattern matching that will allow users to do the simple\n * tests with * and **. If users want full complex pattern matching, then can\n * always use regex matching, or function validation.\n */\nexport default function pathToPattern(\n pattern: string,\n dirname: string,\n): RegExp {\n const parts = path.resolve(dirname, pattern).split(path.sep);\n\n return new RegExp(\n [\n \"^\",\n ...parts.map((part, i) => {\n const last = i === parts.length - 1;\n\n // ** matches 0 or more path parts.\n if (part === \"**\") return last ? starStarPatLast : starStarPat;\n\n // * matches 1 path part.\n if (part === \"*\") return last ? starPatLast : starPat;\n\n // *.ext matches a wildcard with an extension.\n if (part.indexOf(\"*.\") === 0) {\n return (\n substitution + escapeRegExp(part.slice(1)) + (last ? endSep : sep)\n );\n }\n\n // Otherwise match the pattern text.\n return escapeRegExp(part) + (last ? endSep : sep);\n }),\n ].join(\"\"),\n );\n}\n"],"mappings":";;;;;;AAAA,SAAAA,MAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,KAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,MAAME,GAAG,GAAG,KAAKC,MAAGA,CAAC,CAACD,GAAG,EAAE;AAC3B,MAAME,MAAM,GAAG,MAAMF,GAAG,KAAK;AAE7B,MAAMG,YAAY,GAAG,KAAKH,GAAG,IAAI;AAEjC,MAAMI,OAAO,GAAG,MAAMD,YAAY,GAAGH,GAAG,GAAG;AAC3C,MAAMK,WAAW,GAAG,MAAMF,YAAY,GAAGD,MAAM,GAAG;AAElD,MAAMI,WAAW,GAAG,GAAGF,OAAO,IAAI;AAClC,MAAMG,eAAe,GAAG,GAAGH,OAAO,KAAKC,WAAW,GAAG;AAErD,SAASG,YAAYA,CAACC,MAAc,EAAE;EACpC,OAAOA,MAAM,CAACC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC;AACtD;AAOe,SAASC,aAAaA,CACnCC,OAAe,EACfC,OAAe,EACP;EACR,MAAMC,KAAK,GAAGb,MAAGA,CAAC,CAACc,OAAO,CAACF,OAAO,EAAED,OAAO,CAAC,CAACI,KAAK,CAACf,MAAGA,CAAC,CAACD,GAAG,CAAC;EAE5D,OAAO,IAAIiB,MAAM,CACf,CACE,GAAG,EACH,GAAGH,KAAK,CAACI,GAAG,CAAC,CAACC,IAAI,EAAEC,CAAC,KAAK;IACxB,MAAMC,IAAI,GAAGD,CAAC,KAAKN,KAAK,CAACQ,MAAM,GAAG,CAAC;IAGnC,IAAIH,IAAI,KAAK,IAAI,EAAE,OAAOE,IAAI,GAAGd,eAAe,GAAGD,WAAW;IAG9D,IAAIa,IAAI,KAAK,GAAG,EAAE,OAAOE,IAAI,GAAGhB,WAAW,GAAGD,OAAO;IAGrD,IAAIe,IAAI,CAACI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;MAC5B,OACEpB,YAAY,GAAGK,YAAY,CAACW,IAAI,CAACK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAIH,IAAI,GAAGnB,MAAM,GAAGF,GAAG,CAAC;IAEtE;IAGA,OAAOQ,YAAY,CAACW,IAAI,CAAC,IAAIE,IAAI,GAAGnB,MAAM,GAAGF,GAAG,CAAC;EACnD,CAAC,CAAC,CACH,CAACyB,IAAI,CAAC,EAAE,CACX,CAAC;AACH;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/plugin.js b/node_modules/@babel/core/lib/config/plugin.js new file mode 100644 index 00000000..21a28cd5 --- /dev/null +++ b/node_modules/@babel/core/lib/config/plugin.js @@ -0,0 +1,33 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _deepArray = require("./helpers/deep-array.js"); +class Plugin { + constructor(plugin, options, key, externalDependencies = (0, _deepArray.finalize)([])) { + this.key = void 0; + this.manipulateOptions = void 0; + this.post = void 0; + this.pre = void 0; + this.visitor = void 0; + this.parserOverride = void 0; + this.generatorOverride = void 0; + this.options = void 0; + this.externalDependencies = void 0; + this.key = plugin.name || key; + this.manipulateOptions = plugin.manipulateOptions; + this.post = plugin.post; + this.pre = plugin.pre; + this.visitor = plugin.visitor || {}; + this.parserOverride = plugin.parserOverride; + this.generatorOverride = plugin.generatorOverride; + this.options = options; + this.externalDependencies = externalDependencies; + } +} +exports.default = Plugin; +0 && 0; + +//# sourceMappingURL=plugin.js.map diff --git a/node_modules/@babel/core/lib/config/plugin.js.map b/node_modules/@babel/core/lib/config/plugin.js.map new file mode 100644 index 00000000..181eafda --- /dev/null +++ b/node_modules/@babel/core/lib/config/plugin.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_deepArray","require","Plugin","constructor","plugin","options","key","externalDependencies","finalize","manipulateOptions","post","pre","visitor","parserOverride","generatorOverride","name","exports","default"],"sources":["../../src/config/plugin.ts"],"sourcesContent":["import { finalize } from \"./helpers/deep-array.ts\";\nimport type { ReadonlyDeepArray } from \"./helpers/deep-array.ts\";\nimport type { PluginObject } from \"./validation/plugins.ts\";\n\nexport default class Plugin {\n key: string | undefined | null;\n manipulateOptions?: (options: unknown, parserOpts: unknown) => void;\n post?: PluginObject[\"post\"];\n pre?: PluginObject[\"pre\"];\n visitor: PluginObject[\"visitor\"];\n\n parserOverride?: PluginObject[\"parserOverride\"];\n generatorOverride?: Function;\n\n options: object;\n\n externalDependencies: ReadonlyDeepArray;\n\n constructor(\n plugin: PluginObject,\n options: object,\n key?: string,\n externalDependencies: ReadonlyDeepArray = finalize([]),\n ) {\n this.key = plugin.name || key;\n\n this.manipulateOptions = plugin.manipulateOptions;\n this.post = plugin.post;\n this.pre = plugin.pre;\n this.visitor = plugin.visitor || {};\n this.parserOverride = plugin.parserOverride;\n this.generatorOverride = plugin.generatorOverride;\n\n this.options = options;\n this.externalDependencies = externalDependencies;\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAIe,MAAMC,MAAM,CAAC;EAc1BC,WAAWA,CACTC,MAAoB,EACpBC,OAAe,EACfC,GAAY,EACZC,oBAA+C,GAAG,IAAAC,mBAAQ,EAAC,EAAE,CAAC,EAC9D;IAAA,KAlBFF,GAAG;IAAA,KACHG,iBAAiB;IAAA,KACjBC,IAAI;IAAA,KACJC,GAAG;IAAA,KACHC,OAAO;IAAA,KAEPC,cAAc;IAAA,KACdC,iBAAiB;IAAA,KAEjBT,OAAO;IAAA,KAEPE,oBAAoB;IAQlB,IAAI,CAACD,GAAG,GAAGF,MAAM,CAACW,IAAI,IAAIT,GAAG;IAE7B,IAAI,CAACG,iBAAiB,GAAGL,MAAM,CAACK,iBAAiB;IACjD,IAAI,CAACC,IAAI,GAAGN,MAAM,CAACM,IAAI;IACvB,IAAI,CAACC,GAAG,GAAGP,MAAM,CAACO,GAAG;IACrB,IAAI,CAACC,OAAO,GAAGR,MAAM,CAACQ,OAAO,IAAI,CAAC,CAAC;IACnC,IAAI,CAACC,cAAc,GAAGT,MAAM,CAACS,cAAc;IAC3C,IAAI,CAACC,iBAAiB,GAAGV,MAAM,CAACU,iBAAiB;IAEjD,IAAI,CAACT,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACE,oBAAoB,GAAGA,oBAAoB;EAClD;AACF;AAACS,OAAA,CAAAC,OAAA,GAAAf,MAAA;AAAA","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/printer.js b/node_modules/@babel/core/lib/config/printer.js new file mode 100644 index 00000000..3ac2c075 --- /dev/null +++ b/node_modules/@babel/core/lib/config/printer.js @@ -0,0 +1,113 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ConfigPrinter = exports.ChainFormatter = void 0; +function _gensync() { + const data = require("gensync"); + _gensync = function () { + return data; + }; + return data; +} +const ChainFormatter = exports.ChainFormatter = { + Programmatic: 0, + Config: 1 +}; +const Formatter = { + title(type, callerName, filepath) { + let title = ""; + if (type === ChainFormatter.Programmatic) { + title = "programmatic options"; + if (callerName) { + title += " from " + callerName; + } + } else { + title = "config " + filepath; + } + return title; + }, + loc(index, envName) { + let loc = ""; + if (index != null) { + loc += `.overrides[${index}]`; + } + if (envName != null) { + loc += `.env["${envName}"]`; + } + return loc; + }, + *optionsAndDescriptors(opt) { + const content = Object.assign({}, opt.options); + delete content.overrides; + delete content.env; + const pluginDescriptors = [...(yield* opt.plugins())]; + if (pluginDescriptors.length) { + content.plugins = pluginDescriptors.map(d => descriptorToConfig(d)); + } + const presetDescriptors = [...(yield* opt.presets())]; + if (presetDescriptors.length) { + content.presets = [...presetDescriptors].map(d => descriptorToConfig(d)); + } + return JSON.stringify(content, undefined, 2); + } +}; +function descriptorToConfig(d) { + var _d$file; + let name = (_d$file = d.file) == null ? void 0 : _d$file.request; + if (name == null) { + if (typeof d.value === "object") { + name = d.value; + } else if (typeof d.value === "function") { + name = `[Function: ${d.value.toString().slice(0, 50)} ... ]`; + } + } + if (name == null) { + name = "[Unknown]"; + } + if (d.options === undefined) { + return name; + } else if (d.name == null) { + return [name, d.options]; + } else { + return [name, d.options, d.name]; + } +} +class ConfigPrinter { + constructor() { + this._stack = []; + } + configure(enabled, type, { + callerName, + filepath + }) { + if (!enabled) return () => {}; + return (content, index, envName) => { + this._stack.push({ + type, + callerName, + filepath, + content, + index, + envName + }); + }; + } + static *format(config) { + let title = Formatter.title(config.type, config.callerName, config.filepath); + const loc = Formatter.loc(config.index, config.envName); + if (loc) title += ` ${loc}`; + const content = yield* Formatter.optionsAndDescriptors(config.content); + return `${title}\n${content}`; + } + *output() { + if (this._stack.length === 0) return ""; + const configs = yield* _gensync().all(this._stack.map(s => ConfigPrinter.format(s))); + return configs.join("\n\n"); + } +} +exports.ConfigPrinter = ConfigPrinter; +0 && 0; + +//# sourceMappingURL=printer.js.map diff --git a/node_modules/@babel/core/lib/config/printer.js.map b/node_modules/@babel/core/lib/config/printer.js.map new file mode 100644 index 00000000..5a559404 --- /dev/null +++ b/node_modules/@babel/core/lib/config/printer.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_gensync","data","require","ChainFormatter","exports","Programmatic","Config","Formatter","title","type","callerName","filepath","loc","index","envName","optionsAndDescriptors","opt","content","Object","assign","options","overrides","env","pluginDescriptors","plugins","length","map","d","descriptorToConfig","presetDescriptors","presets","JSON","stringify","undefined","_d$file","name","file","request","value","toString","slice","ConfigPrinter","constructor","_stack","configure","enabled","push","format","config","output","configs","gensync","all","s","join"],"sources":["../../src/config/printer.ts"],"sourcesContent":["import gensync from \"gensync\";\n\nimport type { Handler } from \"gensync\";\n\nimport type {\n OptionsAndDescriptors,\n UnloadedDescriptor,\n} from \"./config-descriptors.ts\";\n\n// todo: Use flow enums when @babel/transform-flow-types supports it\nexport const ChainFormatter = {\n Programmatic: 0,\n Config: 1,\n};\n\ntype PrintableConfig = {\n content: OptionsAndDescriptors;\n type: (typeof ChainFormatter)[keyof typeof ChainFormatter];\n callerName: string | undefined | null;\n filepath: string | undefined | null;\n index: number | undefined | null;\n envName: string | undefined | null;\n};\n\nconst Formatter = {\n title(\n type: (typeof ChainFormatter)[keyof typeof ChainFormatter],\n callerName?: string | null,\n filepath?: string | null,\n ): string {\n let title = \"\";\n if (type === ChainFormatter.Programmatic) {\n title = \"programmatic options\";\n if (callerName) {\n title += \" from \" + callerName;\n }\n } else {\n title = \"config \" + filepath;\n }\n return title;\n },\n loc(index?: number | null, envName?: string | null): string {\n let loc = \"\";\n if (index != null) {\n loc += `.overrides[${index}]`;\n }\n if (envName != null) {\n loc += `.env[\"${envName}\"]`;\n }\n return loc;\n },\n\n *optionsAndDescriptors(opt: OptionsAndDescriptors) {\n const content = { ...opt.options };\n // overrides and env will be printed as separated config items\n delete content.overrides;\n delete content.env;\n // resolve to descriptors\n const pluginDescriptors = [...(yield* opt.plugins())];\n if (pluginDescriptors.length) {\n content.plugins = pluginDescriptors.map(d => descriptorToConfig(d));\n }\n const presetDescriptors = [...(yield* opt.presets())];\n if (presetDescriptors.length) {\n content.presets = [...presetDescriptors].map(d => descriptorToConfig(d));\n }\n return JSON.stringify(content, undefined, 2);\n },\n};\n\nfunction descriptorToConfig(\n d: UnloadedDescriptor,\n): object | string | [string, unknown] | [string, unknown, string] {\n let name: object | string = d.file?.request;\n if (name == null) {\n if (typeof d.value === \"object\") {\n name = d.value;\n } else if (typeof d.value === \"function\") {\n // If the unloaded descriptor is a function, i.e. `plugins: [ require(\"my-plugin\") ]`,\n // we print the first 50 characters of the function source code and hopefully we can see\n // `name: 'my-plugin'` in the source\n name = `[Function: ${d.value.toString().slice(0, 50)} ... ]`;\n }\n }\n if (name == null) {\n name = \"[Unknown]\";\n }\n if (d.options === undefined) {\n return name;\n } else if (d.name == null) {\n return [name, d.options];\n } else {\n return [name, d.options, d.name];\n }\n}\n\nexport class ConfigPrinter {\n _stack: Array = [];\n configure(\n enabled: boolean,\n type: (typeof ChainFormatter)[keyof typeof ChainFormatter],\n {\n callerName,\n filepath,\n }: {\n callerName?: string;\n filepath?: string;\n },\n ) {\n if (!enabled) return () => {};\n return (\n content: OptionsAndDescriptors,\n index?: number | null,\n envName?: string | null,\n ) => {\n this._stack.push({\n type,\n callerName,\n filepath,\n content,\n index,\n envName,\n });\n };\n }\n static *format(config: PrintableConfig): Handler {\n let title = Formatter.title(\n config.type,\n config.callerName,\n config.filepath,\n );\n const loc = Formatter.loc(config.index, config.envName);\n if (loc) title += ` ${loc}`;\n const content = yield* Formatter.optionsAndDescriptors(config.content);\n return `${title}\\n${content}`;\n }\n\n *output(): Handler {\n if (this._stack.length === 0) return \"\";\n const configs = yield* gensync.all(\n this._stack.map(s => ConfigPrinter.format(s)),\n );\n return configs.join(\"\\n\\n\");\n }\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/resolve-targets-browser.js b/node_modules/@babel/core/lib/config/resolve-targets-browser.js new file mode 100644 index 00000000..3fdbd882 --- /dev/null +++ b/node_modules/@babel/core/lib/config/resolve-targets-browser.js @@ -0,0 +1,41 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.resolveBrowserslistConfigFile = resolveBrowserslistConfigFile; +exports.resolveTargets = resolveTargets; +function _helperCompilationTargets() { + const data = require("@babel/helper-compilation-targets"); + _helperCompilationTargets = function () { + return data; + }; + return data; +} +function resolveBrowserslistConfigFile(browserslistConfigFile, configFilePath) { + return undefined; +} +function resolveTargets(options, root) { + const optTargets = options.targets; + let targets; + if (typeof optTargets === "string" || Array.isArray(optTargets)) { + targets = { + browsers: optTargets + }; + } else if (optTargets) { + if ("esmodules" in optTargets) { + targets = Object.assign({}, optTargets, { + esmodules: "intersect" + }); + } else { + targets = optTargets; + } + } + return (0, _helperCompilationTargets().default)(targets, { + ignoreBrowserslistConfig: true, + browserslistEnv: options.browserslistEnv + }); +} +0 && 0; + +//# sourceMappingURL=resolve-targets-browser.js.map diff --git a/node_modules/@babel/core/lib/config/resolve-targets-browser.js.map b/node_modules/@babel/core/lib/config/resolve-targets-browser.js.map new file mode 100644 index 00000000..25ed272d --- /dev/null +++ b/node_modules/@babel/core/lib/config/resolve-targets-browser.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_helperCompilationTargets","data","require","resolveBrowserslistConfigFile","browserslistConfigFile","configFilePath","undefined","resolveTargets","options","root","optTargets","targets","Array","isArray","browsers","Object","assign","esmodules","getTargets","ignoreBrowserslistConfig","browserslistEnv"],"sources":["../../src/config/resolve-targets-browser.ts"],"sourcesContent":["/* c8 ignore start */\n\nimport type { ValidatedOptions } from \"./validation/options.ts\";\nimport getTargets, {\n type InputTargets,\n} from \"@babel/helper-compilation-targets\";\n\nimport type { Targets } from \"@babel/helper-compilation-targets\";\n\nexport function resolveBrowserslistConfigFile(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n browserslistConfigFile: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n configFilePath: string,\n): string | void {\n return undefined;\n}\n\nexport function resolveTargets(\n options: ValidatedOptions,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n root: string,\n): Targets {\n const optTargets = options.targets;\n let targets: InputTargets;\n\n if (typeof optTargets === \"string\" || Array.isArray(optTargets)) {\n targets = { browsers: optTargets };\n } else if (optTargets) {\n if (\"esmodules\" in optTargets) {\n targets = { ...optTargets, esmodules: \"intersect\" };\n } else {\n // https://github.com/microsoft/TypeScript/issues/17002\n targets = optTargets as InputTargets;\n }\n }\n\n return getTargets(targets, {\n ignoreBrowserslistConfig: true,\n browserslistEnv: options.browserslistEnv,\n });\n}\n"],"mappings":";;;;;;;AAGA,SAAAA,0BAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,yBAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAMO,SAASE,6BAA6BA,CAE3CC,sBAA8B,EAE9BC,cAAsB,EACP;EACf,OAAOC,SAAS;AAClB;AAEO,SAASC,cAAcA,CAC5BC,OAAyB,EAEzBC,IAAY,EACH;EACT,MAAMC,UAAU,GAAGF,OAAO,CAACG,OAAO;EAClC,IAAIA,OAAqB;EAEzB,IAAI,OAAOD,UAAU,KAAK,QAAQ,IAAIE,KAAK,CAACC,OAAO,CAACH,UAAU,CAAC,EAAE;IAC/DC,OAAO,GAAG;MAAEG,QAAQ,EAAEJ;IAAW,CAAC;EACpC,CAAC,MAAM,IAAIA,UAAU,EAAE;IACrB,IAAI,WAAW,IAAIA,UAAU,EAAE;MAC7BC,OAAO,GAAAI,MAAA,CAAAC,MAAA,KAAQN,UAAU;QAAEO,SAAS,EAAE;MAAW,EAAE;IACrD,CAAC,MAAM;MAELN,OAAO,GAAGD,UAA0B;IACtC;EACF;EAEA,OAAO,IAAAQ,mCAAU,EAACP,OAAO,EAAE;IACzBQ,wBAAwB,EAAE,IAAI;IAC9BC,eAAe,EAAEZ,OAAO,CAACY;EAC3B,CAAC,CAAC;AACJ;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/resolve-targets.js b/node_modules/@babel/core/lib/config/resolve-targets.js new file mode 100644 index 00000000..1fc539a7 --- /dev/null +++ b/node_modules/@babel/core/lib/config/resolve-targets.js @@ -0,0 +1,61 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.resolveBrowserslistConfigFile = resolveBrowserslistConfigFile; +exports.resolveTargets = resolveTargets; +function _path() { + const data = require("path"); + _path = function () { + return data; + }; + return data; +} +function _helperCompilationTargets() { + const data = require("@babel/helper-compilation-targets"); + _helperCompilationTargets = function () { + return data; + }; + return data; +} +({}); +function resolveBrowserslistConfigFile(browserslistConfigFile, configFileDir) { + return _path().resolve(configFileDir, browserslistConfigFile); +} +function resolveTargets(options, root) { + const optTargets = options.targets; + let targets; + if (typeof optTargets === "string" || Array.isArray(optTargets)) { + targets = { + browsers: optTargets + }; + } else if (optTargets) { + if ("esmodules" in optTargets) { + targets = Object.assign({}, optTargets, { + esmodules: "intersect" + }); + } else { + targets = optTargets; + } + } + const { + browserslistConfigFile + } = options; + let configFile; + let ignoreBrowserslistConfig = false; + if (typeof browserslistConfigFile === "string") { + configFile = browserslistConfigFile; + } else { + ignoreBrowserslistConfig = browserslistConfigFile === false; + } + return (0, _helperCompilationTargets().default)(targets, { + ignoreBrowserslistConfig, + configFile, + configPath: root, + browserslistEnv: options.browserslistEnv + }); +} +0 && 0; + +//# sourceMappingURL=resolve-targets.js.map diff --git a/node_modules/@babel/core/lib/config/resolve-targets.js.map b/node_modules/@babel/core/lib/config/resolve-targets.js.map new file mode 100644 index 00000000..de3822f3 --- /dev/null +++ b/node_modules/@babel/core/lib/config/resolve-targets.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_path","data","require","_helperCompilationTargets","resolveBrowserslistConfigFile","browserslistConfigFile","configFileDir","path","resolve","resolveTargets","options","root","optTargets","targets","Array","isArray","browsers","Object","assign","esmodules","configFile","ignoreBrowserslistConfig","getTargets","configPath","browserslistEnv"],"sources":["../../src/config/resolve-targets.ts"],"sourcesContent":["type browserType = typeof import(\"./resolve-targets-browser\");\ntype nodeType = typeof import(\"./resolve-targets\");\n\n// Kind of gross, but essentially asserting that the exports of this module are the same as the\n// exports of index-browser, since this file may be replaced at bundle time with index-browser.\n({}) as any as browserType as nodeType;\n\nimport type { ValidatedOptions } from \"./validation/options.ts\";\nimport path from \"node:path\";\nimport getTargets, {\n type InputTargets,\n} from \"@babel/helper-compilation-targets\";\n\nimport type { Targets } from \"@babel/helper-compilation-targets\";\n\nexport function resolveBrowserslistConfigFile(\n browserslistConfigFile: string,\n configFileDir: string,\n): string | undefined {\n return path.resolve(configFileDir, browserslistConfigFile);\n}\n\nexport function resolveTargets(\n options: ValidatedOptions,\n root: string,\n): Targets {\n const optTargets = options.targets;\n let targets: InputTargets;\n\n if (typeof optTargets === \"string\" || Array.isArray(optTargets)) {\n targets = { browsers: optTargets };\n } else if (optTargets) {\n if (\"esmodules\" in optTargets) {\n targets = { ...optTargets, esmodules: \"intersect\" };\n } else {\n // https://github.com/microsoft/TypeScript/issues/17002\n targets = optTargets as InputTargets;\n }\n }\n\n const { browserslistConfigFile } = options;\n let configFile;\n let ignoreBrowserslistConfig = false;\n if (typeof browserslistConfigFile === \"string\") {\n configFile = browserslistConfigFile;\n } else {\n ignoreBrowserslistConfig = browserslistConfigFile === false;\n }\n\n return getTargets(targets, {\n ignoreBrowserslistConfig,\n configFile,\n configPath: root,\n browserslistEnv: options.browserslistEnv,\n });\n}\n"],"mappings":";;;;;;;AAQA,SAAAA,MAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,KAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,0BAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,yBAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAJA,CAAC,CAAC,CAAC;AAUI,SAASG,6BAA6BA,CAC3CC,sBAA8B,EAC9BC,aAAqB,EACD;EACpB,OAAOC,MAAGA,CAAC,CAACC,OAAO,CAACF,aAAa,EAAED,sBAAsB,CAAC;AAC5D;AAEO,SAASI,cAAcA,CAC5BC,OAAyB,EACzBC,IAAY,EACH;EACT,MAAMC,UAAU,GAAGF,OAAO,CAACG,OAAO;EAClC,IAAIA,OAAqB;EAEzB,IAAI,OAAOD,UAAU,KAAK,QAAQ,IAAIE,KAAK,CAACC,OAAO,CAACH,UAAU,CAAC,EAAE;IAC/DC,OAAO,GAAG;MAAEG,QAAQ,EAAEJ;IAAW,CAAC;EACpC,CAAC,MAAM,IAAIA,UAAU,EAAE;IACrB,IAAI,WAAW,IAAIA,UAAU,EAAE;MAC7BC,OAAO,GAAAI,MAAA,CAAAC,MAAA,KAAQN,UAAU;QAAEO,SAAS,EAAE;MAAW,EAAE;IACrD,CAAC,MAAM;MAELN,OAAO,GAAGD,UAA0B;IACtC;EACF;EAEA,MAAM;IAAEP;EAAuB,CAAC,GAAGK,OAAO;EAC1C,IAAIU,UAAU;EACd,IAAIC,wBAAwB,GAAG,KAAK;EACpC,IAAI,OAAOhB,sBAAsB,KAAK,QAAQ,EAAE;IAC9Ce,UAAU,GAAGf,sBAAsB;EACrC,CAAC,MAAM;IACLgB,wBAAwB,GAAGhB,sBAAsB,KAAK,KAAK;EAC7D;EAEA,OAAO,IAAAiB,mCAAU,EAACT,OAAO,EAAE;IACzBQ,wBAAwB;IACxBD,UAAU;IACVG,UAAU,EAAEZ,IAAI;IAChBa,eAAe,EAAEd,OAAO,CAACc;EAC3B,CAAC,CAAC;AACJ;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/util.js b/node_modules/@babel/core/lib/config/util.js new file mode 100644 index 00000000..077f1af8 --- /dev/null +++ b/node_modules/@babel/core/lib/config/util.js @@ -0,0 +1,31 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isIterableIterator = isIterableIterator; +exports.mergeOptions = mergeOptions; +function mergeOptions(target, source) { + for (const k of Object.keys(source)) { + if ((k === "parserOpts" || k === "generatorOpts" || k === "assumptions") && source[k]) { + const parserOpts = source[k]; + const targetObj = target[k] || (target[k] = {}); + mergeDefaultFields(targetObj, parserOpts); + } else { + const val = source[k]; + if (val !== undefined) target[k] = val; + } + } +} +function mergeDefaultFields(target, source) { + for (const k of Object.keys(source)) { + const val = source[k]; + if (val !== undefined) target[k] = val; + } +} +function isIterableIterator(value) { + return !!value && typeof value.next === "function" && typeof value[Symbol.iterator] === "function"; +} +0 && 0; + +//# sourceMappingURL=util.js.map diff --git a/node_modules/@babel/core/lib/config/util.js.map b/node_modules/@babel/core/lib/config/util.js.map new file mode 100644 index 00000000..696c28c7 --- /dev/null +++ b/node_modules/@babel/core/lib/config/util.js.map @@ -0,0 +1 @@ +{"version":3,"names":["mergeOptions","target","source","k","Object","keys","parserOpts","targetObj","mergeDefaultFields","val","undefined","isIterableIterator","value","next","Symbol","iterator"],"sources":["../../src/config/util.ts"],"sourcesContent":["import type {\n ValidatedOptions,\n NormalizedOptions,\n} from \"./validation/options.ts\";\n\nexport function mergeOptions(\n target: ValidatedOptions,\n source: ValidatedOptions | NormalizedOptions,\n): void {\n for (const k of Object.keys(source)) {\n if (\n (k === \"parserOpts\" || k === \"generatorOpts\" || k === \"assumptions\") &&\n source[k]\n ) {\n const parserOpts = source[k];\n const targetObj = target[k] || (target[k] = {});\n mergeDefaultFields(targetObj, parserOpts);\n } else {\n //@ts-expect-error k must index source\n const val = source[k];\n //@ts-expect-error assigning source to target\n if (val !== undefined) target[k] = val as any;\n }\n }\n}\n\nfunction mergeDefaultFields(target: T, source: T) {\n for (const k of Object.keys(source) as (keyof T)[]) {\n const val = source[k];\n if (val !== undefined) target[k] = val;\n }\n}\n\nexport function isIterableIterator(value: any): value is IterableIterator {\n return (\n !!value &&\n typeof value.next === \"function\" &&\n typeof value[Symbol.iterator] === \"function\"\n );\n}\n"],"mappings":";;;;;;;AAKO,SAASA,YAAYA,CAC1BC,MAAwB,EACxBC,MAA4C,EACtC;EACN,KAAK,MAAMC,CAAC,IAAIC,MAAM,CAACC,IAAI,CAACH,MAAM,CAAC,EAAE;IACnC,IACE,CAACC,CAAC,KAAK,YAAY,IAAIA,CAAC,KAAK,eAAe,IAAIA,CAAC,KAAK,aAAa,KACnED,MAAM,CAACC,CAAC,CAAC,EACT;MACA,MAAMG,UAAU,GAAGJ,MAAM,CAACC,CAAC,CAAC;MAC5B,MAAMI,SAAS,GAAGN,MAAM,CAACE,CAAC,CAAC,KAAKF,MAAM,CAACE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;MAC/CK,kBAAkB,CAACD,SAAS,EAAED,UAAU,CAAC;IAC3C,CAAC,MAAM;MAEL,MAAMG,GAAG,GAAGP,MAAM,CAACC,CAAC,CAAC;MAErB,IAAIM,GAAG,KAAKC,SAAS,EAAET,MAAM,CAACE,CAAC,CAAC,GAAGM,GAAU;IAC/C;EACF;AACF;AAEA,SAASD,kBAAkBA,CAAmBP,MAAS,EAAEC,MAAS,EAAE;EAClE,KAAK,MAAMC,CAAC,IAAIC,MAAM,CAACC,IAAI,CAACH,MAAM,CAAC,EAAiB;IAClD,MAAMO,GAAG,GAAGP,MAAM,CAACC,CAAC,CAAC;IACrB,IAAIM,GAAG,KAAKC,SAAS,EAAET,MAAM,CAACE,CAAC,CAAC,GAAGM,GAAG;EACxC;AACF;AAEO,SAASE,kBAAkBA,CAACC,KAAU,EAAkC;EAC7E,OACE,CAAC,CAACA,KAAK,IACP,OAAOA,KAAK,CAACC,IAAI,KAAK,UAAU,IAChC,OAAOD,KAAK,CAACE,MAAM,CAACC,QAAQ,CAAC,KAAK,UAAU;AAEhD;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/validation/option-assertions.js b/node_modules/@babel/core/lib/config/validation/option-assertions.js new file mode 100644 index 00000000..73d577c5 --- /dev/null +++ b/node_modules/@babel/core/lib/config/validation/option-assertions.js @@ -0,0 +1,277 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.access = access; +exports.assertArray = assertArray; +exports.assertAssumptions = assertAssumptions; +exports.assertBabelrcSearch = assertBabelrcSearch; +exports.assertBoolean = assertBoolean; +exports.assertCallerMetadata = assertCallerMetadata; +exports.assertCompact = assertCompact; +exports.assertConfigApplicableTest = assertConfigApplicableTest; +exports.assertConfigFileSearch = assertConfigFileSearch; +exports.assertFunction = assertFunction; +exports.assertIgnoreList = assertIgnoreList; +exports.assertInputSourceMap = assertInputSourceMap; +exports.assertObject = assertObject; +exports.assertPluginList = assertPluginList; +exports.assertRootMode = assertRootMode; +exports.assertSourceMaps = assertSourceMaps; +exports.assertSourceType = assertSourceType; +exports.assertString = assertString; +exports.assertTargets = assertTargets; +exports.msg = msg; +function _helperCompilationTargets() { + const data = require("@babel/helper-compilation-targets"); + _helperCompilationTargets = function () { + return data; + }; + return data; +} +var _options = require("./options.js"); +function msg(loc) { + switch (loc.type) { + case "root": + return ``; + case "env": + return `${msg(loc.parent)}.env["${loc.name}"]`; + case "overrides": + return `${msg(loc.parent)}.overrides[${loc.index}]`; + case "option": + return `${msg(loc.parent)}.${loc.name}`; + case "access": + return `${msg(loc.parent)}[${JSON.stringify(loc.name)}]`; + default: + throw new Error(`Assertion failure: Unknown type ${loc.type}`); + } +} +function access(loc, name) { + return { + type: "access", + name, + parent: loc + }; +} +function assertRootMode(loc, value) { + if (value !== undefined && value !== "root" && value !== "upward" && value !== "upward-optional") { + throw new Error(`${msg(loc)} must be a "root", "upward", "upward-optional" or undefined`); + } + return value; +} +function assertSourceMaps(loc, value) { + if (value !== undefined && typeof value !== "boolean" && value !== "inline" && value !== "both") { + throw new Error(`${msg(loc)} must be a boolean, "inline", "both", or undefined`); + } + return value; +} +function assertCompact(loc, value) { + if (value !== undefined && typeof value !== "boolean" && value !== "auto") { + throw new Error(`${msg(loc)} must be a boolean, "auto", or undefined`); + } + return value; +} +function assertSourceType(loc, value) { + if (value !== undefined && value !== "module" && value !== "script" && value !== "unambiguous") { + throw new Error(`${msg(loc)} must be "module", "script", "unambiguous", or undefined`); + } + return value; +} +function assertCallerMetadata(loc, value) { + const obj = assertObject(loc, value); + if (obj) { + if (typeof obj.name !== "string") { + throw new Error(`${msg(loc)} set but does not contain "name" property string`); + } + for (const prop of Object.keys(obj)) { + const propLoc = access(loc, prop); + const value = obj[prop]; + if (value != null && typeof value !== "boolean" && typeof value !== "string" && typeof value !== "number") { + throw new Error(`${msg(propLoc)} must be null, undefined, a boolean, a string, or a number.`); + } + } + } + return value; +} +function assertInputSourceMap(loc, value) { + if (value !== undefined && typeof value !== "boolean" && (typeof value !== "object" || !value)) { + throw new Error(`${msg(loc)} must be a boolean, object, or undefined`); + } + return value; +} +function assertString(loc, value) { + if (value !== undefined && typeof value !== "string") { + throw new Error(`${msg(loc)} must be a string, or undefined`); + } + return value; +} +function assertFunction(loc, value) { + if (value !== undefined && typeof value !== "function") { + throw new Error(`${msg(loc)} must be a function, or undefined`); + } + return value; +} +function assertBoolean(loc, value) { + if (value !== undefined && typeof value !== "boolean") { + throw new Error(`${msg(loc)} must be a boolean, or undefined`); + } + return value; +} +function assertObject(loc, value) { + if (value !== undefined && (typeof value !== "object" || Array.isArray(value) || !value)) { + throw new Error(`${msg(loc)} must be an object, or undefined`); + } + return value; +} +function assertArray(loc, value) { + if (value != null && !Array.isArray(value)) { + throw new Error(`${msg(loc)} must be an array, or undefined`); + } + return value; +} +function assertIgnoreList(loc, value) { + const arr = assertArray(loc, value); + arr == null || arr.forEach((item, i) => assertIgnoreItem(access(loc, i), item)); + return arr; +} +function assertIgnoreItem(loc, value) { + if (typeof value !== "string" && typeof value !== "function" && !(value instanceof RegExp)) { + throw new Error(`${msg(loc)} must be an array of string/Function/RegExp values, or undefined`); + } + return value; +} +function assertConfigApplicableTest(loc, value) { + if (value === undefined) { + return value; + } + if (Array.isArray(value)) { + value.forEach((item, i) => { + if (!checkValidTest(item)) { + throw new Error(`${msg(access(loc, i))} must be a string/Function/RegExp.`); + } + }); + } else if (!checkValidTest(value)) { + throw new Error(`${msg(loc)} must be a string/Function/RegExp, or an array of those`); + } + return value; +} +function checkValidTest(value) { + return typeof value === "string" || typeof value === "function" || value instanceof RegExp; +} +function assertConfigFileSearch(loc, value) { + if (value !== undefined && typeof value !== "boolean" && typeof value !== "string") { + throw new Error(`${msg(loc)} must be a undefined, a boolean, a string, ` + `got ${JSON.stringify(value)}`); + } + return value; +} +function assertBabelrcSearch(loc, value) { + if (value === undefined || typeof value === "boolean") { + return value; + } + if (Array.isArray(value)) { + value.forEach((item, i) => { + if (!checkValidTest(item)) { + throw new Error(`${msg(access(loc, i))} must be a string/Function/RegExp.`); + } + }); + } else if (!checkValidTest(value)) { + throw new Error(`${msg(loc)} must be a undefined, a boolean, a string/Function/RegExp ` + `or an array of those, got ${JSON.stringify(value)}`); + } + return value; +} +function assertPluginList(loc, value) { + const arr = assertArray(loc, value); + if (arr) { + arr.forEach((item, i) => assertPluginItem(access(loc, i), item)); + } + return arr; +} +function assertPluginItem(loc, value) { + if (Array.isArray(value)) { + if (value.length === 0) { + throw new Error(`${msg(loc)} must include an object`); + } + if (value.length > 3) { + throw new Error(`${msg(loc)} may only be a two-tuple or three-tuple`); + } + assertPluginTarget(access(loc, 0), value[0]); + if (value.length > 1) { + const opts = value[1]; + if (opts !== undefined && opts !== false && (typeof opts !== "object" || Array.isArray(opts) || opts === null)) { + throw new Error(`${msg(access(loc, 1))} must be an object, false, or undefined`); + } + } + if (value.length === 3) { + const name = value[2]; + if (name !== undefined && typeof name !== "string") { + throw new Error(`${msg(access(loc, 2))} must be a string, or undefined`); + } + } + } else { + assertPluginTarget(loc, value); + } + return value; +} +function assertPluginTarget(loc, value) { + if ((typeof value !== "object" || !value) && typeof value !== "string" && typeof value !== "function") { + throw new Error(`${msg(loc)} must be a string, object, function`); + } + return value; +} +function assertTargets(loc, value) { + if ((0, _helperCompilationTargets().isBrowsersQueryValid)(value)) return value; + if (typeof value !== "object" || !value || Array.isArray(value)) { + throw new Error(`${msg(loc)} must be a string, an array of strings or an object`); + } + const browsersLoc = access(loc, "browsers"); + const esmodulesLoc = access(loc, "esmodules"); + assertBrowsersList(browsersLoc, value.browsers); + assertBoolean(esmodulesLoc, value.esmodules); + for (const key of Object.keys(value)) { + const val = value[key]; + const subLoc = access(loc, key); + if (key === "esmodules") assertBoolean(subLoc, val);else if (key === "browsers") assertBrowsersList(subLoc, val);else if (!hasOwnProperty.call(_helperCompilationTargets().TargetNames, key)) { + const validTargets = Object.keys(_helperCompilationTargets().TargetNames).join(", "); + throw new Error(`${msg(subLoc)} is not a valid target. Supported targets are ${validTargets}`); + } else assertBrowserVersion(subLoc, val); + } + return value; +} +function assertBrowsersList(loc, value) { + if (value !== undefined && !(0, _helperCompilationTargets().isBrowsersQueryValid)(value)) { + throw new Error(`${msg(loc)} must be undefined, a string or an array of strings`); + } +} +function assertBrowserVersion(loc, value) { + if (typeof value === "number" && Math.round(value) === value) return; + if (typeof value === "string") return; + throw new Error(`${msg(loc)} must be a string or an integer number`); +} +function assertAssumptions(loc, value) { + if (value === undefined) return; + if (typeof value !== "object" || value === null) { + throw new Error(`${msg(loc)} must be an object or undefined.`); + } + let root = loc; + do { + root = root.parent; + } while (root.type !== "root"); + const inPreset = root.source === "preset"; + for (const name of Object.keys(value)) { + const subLoc = access(loc, name); + if (!_options.assumptionsNames.has(name)) { + throw new Error(`${msg(subLoc)} is not a supported assumption.`); + } + if (typeof value[name] !== "boolean") { + throw new Error(`${msg(subLoc)} must be a boolean.`); + } + if (inPreset && value[name] === false) { + throw new Error(`${msg(subLoc)} cannot be set to 'false' inside presets.`); + } + } + return value; +} +0 && 0; + +//# sourceMappingURL=option-assertions.js.map diff --git a/node_modules/@babel/core/lib/config/validation/option-assertions.js.map b/node_modules/@babel/core/lib/config/validation/option-assertions.js.map new file mode 100644 index 00000000..f68e0d32 --- /dev/null +++ b/node_modules/@babel/core/lib/config/validation/option-assertions.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_helperCompilationTargets","data","require","_options","msg","loc","type","parent","name","index","JSON","stringify","Error","access","assertRootMode","value","undefined","assertSourceMaps","assertCompact","assertSourceType","assertCallerMetadata","obj","assertObject","prop","Object","keys","propLoc","assertInputSourceMap","assertString","assertFunction","assertBoolean","Array","isArray","assertArray","assertIgnoreList","arr","forEach","item","i","assertIgnoreItem","RegExp","assertConfigApplicableTest","checkValidTest","assertConfigFileSearch","assertBabelrcSearch","assertPluginList","assertPluginItem","length","assertPluginTarget","opts","assertTargets","isBrowsersQueryValid","browsersLoc","esmodulesLoc","assertBrowsersList","browsers","esmodules","key","val","subLoc","hasOwnProperty","call","TargetNames","validTargets","join","assertBrowserVersion","Math","round","assertAssumptions","root","inPreset","source","assumptionsNames","has"],"sources":["../../../src/config/validation/option-assertions.ts"],"sourcesContent":["import {\n isBrowsersQueryValid,\n TargetNames,\n} from \"@babel/helper-compilation-targets\";\n\nimport type {\n ConfigFileSearch,\n BabelrcSearch,\n IgnoreList,\n IgnoreItem,\n PluginList,\n PluginItem,\n PluginTarget,\n ConfigApplicableTest,\n SourceMapsOption,\n SourceTypeOption,\n CompactOption,\n RootInputSourceMapOption,\n NestingPath,\n CallerMetadata,\n RootMode,\n TargetsListOrObject,\n AssumptionName,\n} from \"./options.ts\";\n\nimport { assumptionsNames } from \"./options.ts\";\n\nexport type { RootPath } from \"./options.ts\";\n\nexport type ValidatorSet = {\n [name: string]: Validator;\n};\n\nexport type Validator = (loc: OptionPath, value: unknown) => T;\n\nexport function msg(loc: NestingPath | GeneralPath): string {\n switch (loc.type) {\n case \"root\":\n return ``;\n case \"env\":\n return `${msg(loc.parent)}.env[\"${loc.name}\"]`;\n case \"overrides\":\n return `${msg(loc.parent)}.overrides[${loc.index}]`;\n case \"option\":\n return `${msg(loc.parent)}.${loc.name}`;\n case \"access\":\n return `${msg(loc.parent)}[${JSON.stringify(loc.name)}]`;\n default:\n // @ts-expect-error should not happen when code is type checked\n throw new Error(`Assertion failure: Unknown type ${loc.type}`);\n }\n}\n\nexport function access(loc: GeneralPath, name: string | number): AccessPath {\n return {\n type: \"access\",\n name,\n parent: loc,\n };\n}\n\nexport type OptionPath = Readonly<{\n type: \"option\";\n name: string;\n parent: NestingPath;\n}>;\ntype AccessPath = Readonly<{\n type: \"access\";\n name: string | number;\n parent: GeneralPath;\n}>;\ntype GeneralPath = OptionPath | AccessPath;\n\nexport function assertRootMode(\n loc: OptionPath,\n value: unknown,\n): RootMode | void {\n if (\n value !== undefined &&\n value !== \"root\" &&\n value !== \"upward\" &&\n value !== \"upward-optional\"\n ) {\n throw new Error(\n `${msg(loc)} must be a \"root\", \"upward\", \"upward-optional\" or undefined`,\n );\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertSourceMaps(\n loc: OptionPath,\n value: unknown,\n): SourceMapsOption | void {\n if (\n value !== undefined &&\n typeof value !== \"boolean\" &&\n value !== \"inline\" &&\n value !== \"both\"\n ) {\n throw new Error(\n `${msg(loc)} must be a boolean, \"inline\", \"both\", or undefined`,\n );\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertCompact(\n loc: OptionPath,\n value: unknown,\n): CompactOption | void {\n if (value !== undefined && typeof value !== \"boolean\" && value !== \"auto\") {\n throw new Error(`${msg(loc)} must be a boolean, \"auto\", or undefined`);\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertSourceType(\n loc: OptionPath,\n value: unknown,\n): SourceTypeOption | void {\n if (\n value !== undefined &&\n value !== \"module\" &&\n value !== \"script\" &&\n value !== \"unambiguous\"\n ) {\n throw new Error(\n `${msg(loc)} must be \"module\", \"script\", \"unambiguous\", or undefined`,\n );\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertCallerMetadata(\n loc: OptionPath,\n value: unknown,\n): CallerMetadata | undefined {\n const obj = assertObject(loc, value);\n if (obj) {\n if (typeof obj.name !== \"string\") {\n throw new Error(\n `${msg(loc)} set but does not contain \"name\" property string`,\n );\n }\n\n for (const prop of Object.keys(obj)) {\n const propLoc = access(loc, prop);\n const value = obj[prop];\n if (\n value != null &&\n typeof value !== \"boolean\" &&\n typeof value !== \"string\" &&\n typeof value !== \"number\"\n ) {\n // NOTE(logan): I'm limiting the type here so that we can guarantee that\n // the \"caller\" value will serialize to JSON nicely. We can always\n // allow more complex structures later though.\n throw new Error(\n `${msg(\n propLoc,\n )} must be null, undefined, a boolean, a string, or a number.`,\n );\n }\n }\n }\n // @ts-expect-error todo(flow->ts)\n return value;\n}\n\nexport function assertInputSourceMap(\n loc: OptionPath,\n value: unknown,\n): RootInputSourceMapOption {\n if (\n value !== undefined &&\n typeof value !== \"boolean\" &&\n (typeof value !== \"object\" || !value)\n ) {\n throw new Error(`${msg(loc)} must be a boolean, object, or undefined`);\n }\n return value as RootInputSourceMapOption;\n}\n\nexport function assertString(loc: GeneralPath, value: unknown): string | void {\n if (value !== undefined && typeof value !== \"string\") {\n throw new Error(`${msg(loc)} must be a string, or undefined`);\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertFunction(\n loc: GeneralPath,\n value: unknown,\n): Function | void {\n if (value !== undefined && typeof value !== \"function\") {\n throw new Error(`${msg(loc)} must be a function, or undefined`);\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertBoolean(\n loc: GeneralPath,\n value: unknown,\n): boolean | void {\n if (value !== undefined && typeof value !== \"boolean\") {\n throw new Error(`${msg(loc)} must be a boolean, or undefined`);\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertObject(\n loc: GeneralPath,\n value: unknown,\n): { readonly [key: string]: unknown } | void {\n if (\n value !== undefined &&\n (typeof value !== \"object\" || Array.isArray(value) || !value)\n ) {\n throw new Error(`${msg(loc)} must be an object, or undefined`);\n }\n // @ts-expect-error todo(flow->ts) value is still typed as unknown, also assert function typically should not return a value\n return value;\n}\n\nexport function assertArray(\n loc: GeneralPath,\n value: Array | undefined | null,\n): ReadonlyArray | undefined | null {\n if (value != null && !Array.isArray(value)) {\n throw new Error(`${msg(loc)} must be an array, or undefined`);\n }\n return value;\n}\n\nexport function assertIgnoreList(\n loc: OptionPath,\n value: unknown[] | undefined,\n): IgnoreList | void {\n const arr = assertArray(loc, value);\n arr?.forEach((item, i) => assertIgnoreItem(access(loc, i), item));\n // @ts-expect-error todo(flow->ts)\n return arr;\n}\nfunction assertIgnoreItem(loc: GeneralPath, value: unknown): IgnoreItem {\n if (\n typeof value !== \"string\" &&\n typeof value !== \"function\" &&\n !(value instanceof RegExp)\n ) {\n throw new Error(\n `${msg(\n loc,\n )} must be an array of string/Function/RegExp values, or undefined`,\n );\n }\n return value as IgnoreItem;\n}\n\nexport function assertConfigApplicableTest(\n loc: OptionPath,\n value: unknown,\n): ConfigApplicableTest | void {\n if (value === undefined) {\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, i) => {\n if (!checkValidTest(item)) {\n throw new Error(\n `${msg(access(loc, i))} must be a string/Function/RegExp.`,\n );\n }\n });\n } else if (!checkValidTest(value)) {\n throw new Error(\n `${msg(loc)} must be a string/Function/RegExp, or an array of those`,\n );\n }\n return value as ConfigApplicableTest;\n}\n\nfunction checkValidTest(value: unknown): value is string | Function | RegExp {\n return (\n typeof value === \"string\" ||\n typeof value === \"function\" ||\n value instanceof RegExp\n );\n}\n\nexport function assertConfigFileSearch(\n loc: OptionPath,\n value: unknown,\n): ConfigFileSearch | void {\n if (\n value !== undefined &&\n typeof value !== \"boolean\" &&\n typeof value !== \"string\"\n ) {\n throw new Error(\n `${msg(loc)} must be a undefined, a boolean, a string, ` +\n `got ${JSON.stringify(value)}`,\n );\n }\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n}\n\nexport function assertBabelrcSearch(\n loc: OptionPath,\n value: unknown,\n): BabelrcSearch | void {\n if (value === undefined || typeof value === \"boolean\") {\n // @ts-expect-error: TS can only narrow down the type when \"strictNullCheck\" is true\n return value;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, i) => {\n if (!checkValidTest(item)) {\n throw new Error(\n `${msg(access(loc, i))} must be a string/Function/RegExp.`,\n );\n }\n });\n } else if (!checkValidTest(value)) {\n throw new Error(\n `${msg(loc)} must be a undefined, a boolean, a string/Function/RegExp ` +\n `or an array of those, got ${JSON.stringify(value as any)}`,\n );\n }\n return value as BabelrcSearch;\n}\n\nexport function assertPluginList(\n loc: OptionPath,\n value: unknown[] | null | undefined,\n): PluginList | void {\n const arr = assertArray(loc, value);\n if (arr) {\n // Loop instead of using `.map` in order to preserve object identity\n // for plugin array for use during config chain processing.\n arr.forEach((item, i) => assertPluginItem(access(loc, i), item));\n }\n return arr as any;\n}\nfunction assertPluginItem(loc: GeneralPath, value: unknown): PluginItem {\n if (Array.isArray(value)) {\n if (value.length === 0) {\n throw new Error(`${msg(loc)} must include an object`);\n }\n\n if (value.length > 3) {\n throw new Error(`${msg(loc)} may only be a two-tuple or three-tuple`);\n }\n\n assertPluginTarget(access(loc, 0), value[0]);\n\n if (value.length > 1) {\n const opts = value[1];\n if (\n opts !== undefined &&\n opts !== false &&\n (typeof opts !== \"object\" || Array.isArray(opts) || opts === null)\n ) {\n throw new Error(\n `${msg(access(loc, 1))} must be an object, false, or undefined`,\n );\n }\n }\n if (value.length === 3) {\n const name = value[2];\n if (name !== undefined && typeof name !== \"string\") {\n throw new Error(\n `${msg(access(loc, 2))} must be a string, or undefined`,\n );\n }\n }\n } else {\n assertPluginTarget(loc, value);\n }\n\n // @ts-expect-error todo(flow->ts)\n return value;\n}\nfunction assertPluginTarget(loc: GeneralPath, value: unknown): PluginTarget {\n if (\n (typeof value !== \"object\" || !value) &&\n typeof value !== \"string\" &&\n typeof value !== \"function\"\n ) {\n throw new Error(`${msg(loc)} must be a string, object, function`);\n }\n return value;\n}\n\nexport function assertTargets(\n loc: GeneralPath,\n value: any,\n): TargetsListOrObject {\n if (isBrowsersQueryValid(value)) return value;\n\n if (typeof value !== \"object\" || !value || Array.isArray(value)) {\n throw new Error(\n `${msg(loc)} must be a string, an array of strings or an object`,\n );\n }\n\n const browsersLoc = access(loc, \"browsers\");\n const esmodulesLoc = access(loc, \"esmodules\");\n\n assertBrowsersList(browsersLoc, value.browsers);\n assertBoolean(esmodulesLoc, value.esmodules);\n\n for (const key of Object.keys(value)) {\n const val = value[key];\n const subLoc = access(loc, key);\n\n if (key === \"esmodules\") assertBoolean(subLoc, val);\n else if (key === \"browsers\") assertBrowsersList(subLoc, val);\n else if (!Object.hasOwn(TargetNames, key)) {\n const validTargets = Object.keys(TargetNames).join(\", \");\n throw new Error(\n `${msg(\n subLoc,\n )} is not a valid target. Supported targets are ${validTargets}`,\n );\n } else assertBrowserVersion(subLoc, val);\n }\n\n return value;\n}\n\nfunction assertBrowsersList(loc: GeneralPath, value: unknown) {\n if (value !== undefined && !isBrowsersQueryValid(value)) {\n throw new Error(\n `${msg(loc)} must be undefined, a string or an array of strings`,\n );\n }\n}\n\nfunction assertBrowserVersion(loc: GeneralPath, value: unknown) {\n if (typeof value === \"number\" && Math.round(value) === value) return;\n if (typeof value === \"string\") return;\n\n throw new Error(`${msg(loc)} must be a string or an integer number`);\n}\n\nexport function assertAssumptions(\n loc: GeneralPath,\n value: { [key: string]: unknown },\n): { [name: string]: boolean } | void {\n if (value === undefined) return;\n\n if (typeof value !== \"object\" || value === null) {\n throw new Error(`${msg(loc)} must be an object or undefined.`);\n }\n\n // todo(flow->ts): remove any\n let root: any = loc;\n do {\n root = root.parent;\n } while (root.type !== \"root\");\n const inPreset = root.source === \"preset\";\n\n for (const name of Object.keys(value)) {\n const subLoc = access(loc, name);\n if (!assumptionsNames.has(name as AssumptionName)) {\n throw new Error(`${msg(subLoc)} is not a supported assumption.`);\n }\n if (typeof value[name] !== \"boolean\") {\n throw new Error(`${msg(subLoc)} must be a boolean.`);\n }\n if (inPreset && value[name] === false) {\n throw new Error(\n `${msg(subLoc)} cannot be set to 'false' inside presets.`,\n );\n }\n }\n\n // @ts-expect-error todo(flow->ts)\n return value;\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/validation/options.js b/node_modules/@babel/core/lib/config/validation/options.js new file mode 100644 index 00000000..3b78adac --- /dev/null +++ b/node_modules/@babel/core/lib/config/validation/options.js @@ -0,0 +1,189 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.assumptionsNames = void 0; +exports.checkNoUnwrappedItemOptionPairs = checkNoUnwrappedItemOptionPairs; +exports.validate = validate; +var _removed = require("./removed.js"); +var _optionAssertions = require("./option-assertions.js"); +var _configError = require("../../errors/config-error.js"); +const ROOT_VALIDATORS = { + cwd: _optionAssertions.assertString, + root: _optionAssertions.assertString, + rootMode: _optionAssertions.assertRootMode, + configFile: _optionAssertions.assertConfigFileSearch, + caller: _optionAssertions.assertCallerMetadata, + filename: _optionAssertions.assertString, + filenameRelative: _optionAssertions.assertString, + code: _optionAssertions.assertBoolean, + ast: _optionAssertions.assertBoolean, + cloneInputAst: _optionAssertions.assertBoolean, + envName: _optionAssertions.assertString +}; +const BABELRC_VALIDATORS = { + babelrc: _optionAssertions.assertBoolean, + babelrcRoots: _optionAssertions.assertBabelrcSearch +}; +const NONPRESET_VALIDATORS = { + extends: _optionAssertions.assertString, + ignore: _optionAssertions.assertIgnoreList, + only: _optionAssertions.assertIgnoreList, + targets: _optionAssertions.assertTargets, + browserslistConfigFile: _optionAssertions.assertConfigFileSearch, + browserslistEnv: _optionAssertions.assertString +}; +const COMMON_VALIDATORS = { + inputSourceMap: _optionAssertions.assertInputSourceMap, + presets: _optionAssertions.assertPluginList, + plugins: _optionAssertions.assertPluginList, + passPerPreset: _optionAssertions.assertBoolean, + assumptions: _optionAssertions.assertAssumptions, + env: assertEnvSet, + overrides: assertOverridesList, + test: _optionAssertions.assertConfigApplicableTest, + include: _optionAssertions.assertConfigApplicableTest, + exclude: _optionAssertions.assertConfigApplicableTest, + retainLines: _optionAssertions.assertBoolean, + comments: _optionAssertions.assertBoolean, + shouldPrintComment: _optionAssertions.assertFunction, + compact: _optionAssertions.assertCompact, + minified: _optionAssertions.assertBoolean, + auxiliaryCommentBefore: _optionAssertions.assertString, + auxiliaryCommentAfter: _optionAssertions.assertString, + sourceType: _optionAssertions.assertSourceType, + wrapPluginVisitorMethod: _optionAssertions.assertFunction, + highlightCode: _optionAssertions.assertBoolean, + sourceMaps: _optionAssertions.assertSourceMaps, + sourceMap: _optionAssertions.assertSourceMaps, + sourceFileName: _optionAssertions.assertString, + sourceRoot: _optionAssertions.assertString, + parserOpts: _optionAssertions.assertObject, + generatorOpts: _optionAssertions.assertObject +}; +{ + Object.assign(COMMON_VALIDATORS, { + getModuleId: _optionAssertions.assertFunction, + moduleRoot: _optionAssertions.assertString, + moduleIds: _optionAssertions.assertBoolean, + moduleId: _optionAssertions.assertString + }); +} +const knownAssumptions = ["arrayLikeIsIterable", "constantReexports", "constantSuper", "enumerableModuleMeta", "ignoreFunctionLength", "ignoreToPrimitiveHint", "iterableIsArray", "mutableTemplateObject", "noClassCalls", "noDocumentAll", "noIncompleteNsImportDetection", "noNewArrows", "noUninitializedPrivateFieldAccess", "objectRestNoSymbols", "privateFieldsAsSymbols", "privateFieldsAsProperties", "pureGetters", "setClassMethods", "setComputedProperties", "setPublicClassFields", "setSpreadProperties", "skipForOfIteratorClosing", "superIsCallableConstructor"]; +const assumptionsNames = exports.assumptionsNames = new Set(knownAssumptions); +function getSource(loc) { + return loc.type === "root" ? loc.source : getSource(loc.parent); +} +function validate(type, opts, filename) { + try { + return validateNested({ + type: "root", + source: type + }, opts); + } catch (error) { + const configError = new _configError.default(error.message, filename); + if (error.code) configError.code = error.code; + throw configError; + } +} +function validateNested(loc, opts) { + const type = getSource(loc); + assertNoDuplicateSourcemap(opts); + Object.keys(opts).forEach(key => { + const optLoc = { + type: "option", + name: key, + parent: loc + }; + if (type === "preset" && NONPRESET_VALIDATORS[key]) { + throw new Error(`${(0, _optionAssertions.msg)(optLoc)} is not allowed in preset options`); + } + if (type !== "arguments" && ROOT_VALIDATORS[key]) { + throw new Error(`${(0, _optionAssertions.msg)(optLoc)} is only allowed in root programmatic options`); + } + if (type !== "arguments" && type !== "configfile" && BABELRC_VALIDATORS[key]) { + if (type === "babelrcfile" || type === "extendsfile") { + throw new Error(`${(0, _optionAssertions.msg)(optLoc)} is not allowed in .babelrc or "extends"ed files, only in root programmatic options, ` + `or babel.config.js/config file options`); + } + throw new Error(`${(0, _optionAssertions.msg)(optLoc)} is only allowed in root programmatic options, or babel.config.js/config file options`); + } + const validator = COMMON_VALIDATORS[key] || NONPRESET_VALIDATORS[key] || BABELRC_VALIDATORS[key] || ROOT_VALIDATORS[key] || throwUnknownError; + validator(optLoc, opts[key]); + }); + return opts; +} +function throwUnknownError(loc) { + const key = loc.name; + if (_removed.default[key]) { + const { + message, + version = 5 + } = _removed.default[key]; + throw new Error(`Using removed Babel ${version} option: ${(0, _optionAssertions.msg)(loc)} - ${message}`); + } else { + const unknownOptErr = new Error(`Unknown option: ${(0, _optionAssertions.msg)(loc)}. Check out https://babeljs.io/docs/en/babel-core/#options for more information about options.`); + unknownOptErr.code = "BABEL_UNKNOWN_OPTION"; + throw unknownOptErr; + } +} +function assertNoDuplicateSourcemap(opts) { + if (hasOwnProperty.call(opts, "sourceMap") && hasOwnProperty.call(opts, "sourceMaps")) { + throw new Error(".sourceMap is an alias for .sourceMaps, cannot use both"); + } +} +function assertEnvSet(loc, value) { + if (loc.parent.type === "env") { + throw new Error(`${(0, _optionAssertions.msg)(loc)} is not allowed inside of another .env block`); + } + const parent = loc.parent; + const obj = (0, _optionAssertions.assertObject)(loc, value); + if (obj) { + for (const envName of Object.keys(obj)) { + const env = (0, _optionAssertions.assertObject)((0, _optionAssertions.access)(loc, envName), obj[envName]); + if (!env) continue; + const envLoc = { + type: "env", + name: envName, + parent + }; + validateNested(envLoc, env); + } + } + return obj; +} +function assertOverridesList(loc, value) { + if (loc.parent.type === "env") { + throw new Error(`${(0, _optionAssertions.msg)(loc)} is not allowed inside an .env block`); + } + if (loc.parent.type === "overrides") { + throw new Error(`${(0, _optionAssertions.msg)(loc)} is not allowed inside an .overrides block`); + } + const parent = loc.parent; + const arr = (0, _optionAssertions.assertArray)(loc, value); + if (arr) { + for (const [index, item] of arr.entries()) { + const objLoc = (0, _optionAssertions.access)(loc, index); + const env = (0, _optionAssertions.assertObject)(objLoc, item); + if (!env) throw new Error(`${(0, _optionAssertions.msg)(objLoc)} must be an object`); + const overridesLoc = { + type: "overrides", + index, + parent + }; + validateNested(overridesLoc, env); + } + } + return arr; +} +function checkNoUnwrappedItemOptionPairs(items, index, type, e) { + if (index === 0) return; + const lastItem = items[index - 1]; + const thisItem = items[index]; + if (lastItem.file && lastItem.options === undefined && typeof thisItem.value === "object") { + e.message += `\n- Maybe you meant to use\n` + `"${type}s": [\n ["${lastItem.file.request}", ${JSON.stringify(thisItem.value, undefined, 2)}]\n]\n` + `To be a valid ${type}, its name and options should be wrapped in a pair of brackets`; + } +} +0 && 0; + +//# sourceMappingURL=options.js.map diff --git a/node_modules/@babel/core/lib/config/validation/options.js.map b/node_modules/@babel/core/lib/config/validation/options.js.map new file mode 100644 index 00000000..e85a4c70 --- /dev/null +++ b/node_modules/@babel/core/lib/config/validation/options.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_removed","require","_optionAssertions","_configError","ROOT_VALIDATORS","cwd","assertString","root","rootMode","assertRootMode","configFile","assertConfigFileSearch","caller","assertCallerMetadata","filename","filenameRelative","code","assertBoolean","ast","cloneInputAst","envName","BABELRC_VALIDATORS","babelrc","babelrcRoots","assertBabelrcSearch","NONPRESET_VALIDATORS","extends","ignore","assertIgnoreList","only","targets","assertTargets","browserslistConfigFile","browserslistEnv","COMMON_VALIDATORS","inputSourceMap","assertInputSourceMap","presets","assertPluginList","plugins","passPerPreset","assumptions","assertAssumptions","env","assertEnvSet","overrides","assertOverridesList","test","assertConfigApplicableTest","include","exclude","retainLines","comments","shouldPrintComment","assertFunction","compact","assertCompact","minified","auxiliaryCommentBefore","auxiliaryCommentAfter","sourceType","assertSourceType","wrapPluginVisitorMethod","highlightCode","sourceMaps","assertSourceMaps","sourceMap","sourceFileName","sourceRoot","parserOpts","assertObject","generatorOpts","Object","assign","getModuleId","moduleRoot","moduleIds","moduleId","knownAssumptions","assumptionsNames","exports","Set","getSource","loc","type","source","parent","validate","opts","validateNested","error","configError","ConfigError","message","assertNoDuplicateSourcemap","keys","forEach","key","optLoc","name","Error","msg","validator","throwUnknownError","removed","version","unknownOptErr","hasOwnProperty","call","value","obj","access","envLoc","arr","assertArray","index","item","entries","objLoc","overridesLoc","checkNoUnwrappedItemOptionPairs","items","e","lastItem","thisItem","file","options","undefined","request","JSON","stringify"],"sources":["../../../src/config/validation/options.ts"],"sourcesContent":["import type { InputTargets, Targets } from \"@babel/helper-compilation-targets\";\n\nimport type { ConfigItem } from \"../item.ts\";\nimport type Plugin from \"../plugin.ts\";\n\nimport removed from \"./removed.ts\";\nimport {\n msg,\n access,\n assertString,\n assertBoolean,\n assertObject,\n assertArray,\n assertCallerMetadata,\n assertInputSourceMap,\n assertIgnoreList,\n assertPluginList,\n assertConfigApplicableTest,\n assertConfigFileSearch,\n assertBabelrcSearch,\n assertFunction,\n assertRootMode,\n assertSourceMaps,\n assertCompact,\n assertSourceType,\n assertTargets,\n assertAssumptions,\n} from \"./option-assertions.ts\";\nimport type {\n ValidatorSet,\n Validator,\n OptionPath,\n} from \"./option-assertions.ts\";\nimport type { UnloadedDescriptor } from \"../config-descriptors.ts\";\nimport type { PluginAPI } from \"../helpers/config-api.ts\";\nimport type { ParserOptions } from \"@babel/parser\";\nimport type { GeneratorOptions } from \"@babel/generator\";\nimport ConfigError from \"../../errors/config-error.ts\";\n\nconst ROOT_VALIDATORS: ValidatorSet = {\n cwd: assertString as Validator,\n root: assertString as Validator,\n rootMode: assertRootMode as Validator,\n configFile: assertConfigFileSearch as Validator<\n ValidatedOptions[\"configFile\"]\n >,\n\n caller: assertCallerMetadata as Validator,\n filename: assertString as Validator,\n filenameRelative: assertString as Validator<\n ValidatedOptions[\"filenameRelative\"]\n >,\n code: assertBoolean as Validator,\n ast: assertBoolean as Validator,\n\n cloneInputAst: assertBoolean as Validator,\n\n envName: assertString as Validator,\n};\n\nconst BABELRC_VALIDATORS: ValidatorSet = {\n babelrc: assertBoolean as Validator,\n babelrcRoots: assertBabelrcSearch as Validator<\n ValidatedOptions[\"babelrcRoots\"]\n >,\n};\n\nconst NONPRESET_VALIDATORS: ValidatorSet = {\n extends: assertString as Validator,\n ignore: assertIgnoreList as Validator,\n only: assertIgnoreList as Validator,\n\n targets: assertTargets as Validator,\n browserslistConfigFile: assertConfigFileSearch as Validator<\n ValidatedOptions[\"browserslistConfigFile\"]\n >,\n browserslistEnv: assertString as Validator<\n ValidatedOptions[\"browserslistEnv\"]\n >,\n};\n\nconst COMMON_VALIDATORS: ValidatorSet = {\n // TODO: Should 'inputSourceMap' be moved to be a root-only option?\n // We may want a boolean-only version to be a common option, with the\n // object only allowed as a root config argument.\n inputSourceMap: assertInputSourceMap as Validator<\n ValidatedOptions[\"inputSourceMap\"]\n >,\n presets: assertPluginList as Validator,\n plugins: assertPluginList as Validator,\n passPerPreset: assertBoolean as Validator,\n assumptions: assertAssumptions as Validator,\n\n env: assertEnvSet as Validator,\n overrides: assertOverridesList as Validator,\n\n // We could limit these to 'overrides' blocks, but it's not clear why we'd\n // bother, when the ability to limit a config to a specific set of files\n // is a fairly general useful feature.\n test: assertConfigApplicableTest as Validator,\n include: assertConfigApplicableTest as Validator,\n exclude: assertConfigApplicableTest as Validator,\n\n retainLines: assertBoolean as Validator,\n comments: assertBoolean as Validator,\n shouldPrintComment: assertFunction as Validator<\n ValidatedOptions[\"shouldPrintComment\"]\n >,\n compact: assertCompact as Validator,\n minified: assertBoolean as Validator,\n auxiliaryCommentBefore: assertString as Validator<\n ValidatedOptions[\"auxiliaryCommentBefore\"]\n >,\n auxiliaryCommentAfter: assertString as Validator<\n ValidatedOptions[\"auxiliaryCommentAfter\"]\n >,\n sourceType: assertSourceType as Validator,\n wrapPluginVisitorMethod: assertFunction as Validator<\n ValidatedOptions[\"wrapPluginVisitorMethod\"]\n >,\n highlightCode: assertBoolean as Validator,\n sourceMaps: assertSourceMaps as Validator,\n sourceMap: assertSourceMaps as Validator,\n sourceFileName: assertString as Validator,\n sourceRoot: assertString as Validator,\n parserOpts: assertObject as Validator,\n generatorOpts: assertObject as Validator,\n};\nif (!process.env.BABEL_8_BREAKING) {\n Object.assign(COMMON_VALIDATORS, {\n getModuleId: assertFunction,\n moduleRoot: assertString,\n moduleIds: assertBoolean,\n moduleId: assertString,\n });\n}\n\nexport type InputOptions = ValidatedOptions;\n\nexport type ValidatedOptions = {\n cwd?: string;\n filename?: string;\n filenameRelative?: string;\n babelrc?: boolean;\n babelrcRoots?: BabelrcSearch;\n configFile?: ConfigFileSearch;\n root?: string;\n rootMode?: RootMode;\n code?: boolean;\n ast?: boolean;\n cloneInputAst?: boolean;\n inputSourceMap?: RootInputSourceMapOption;\n envName?: string;\n caller?: CallerMetadata;\n extends?: string;\n env?: EnvSet;\n ignore?: IgnoreList;\n only?: IgnoreList;\n overrides?: OverridesList;\n showIgnoredFiles?: boolean;\n // Generally verify if a given config object should be applied to the given file.\n test?: ConfigApplicableTest;\n include?: ConfigApplicableTest;\n exclude?: ConfigApplicableTest;\n presets?: PluginList;\n plugins?: PluginList;\n passPerPreset?: boolean;\n assumptions?: {\n [name: string]: boolean;\n };\n // browserslists-related options\n targets?: TargetsListOrObject;\n browserslistConfigFile?: ConfigFileSearch;\n browserslistEnv?: string;\n // Options for @babel/generator\n retainLines?: boolean;\n comments?: boolean;\n shouldPrintComment?: Function;\n compact?: CompactOption;\n minified?: boolean;\n auxiliaryCommentBefore?: string;\n auxiliaryCommentAfter?: string;\n // Parser\n sourceType?: SourceTypeOption;\n wrapPluginVisitorMethod?: Function;\n highlightCode?: boolean;\n // Sourcemap generation options.\n sourceMaps?: SourceMapsOption;\n sourceMap?: SourceMapsOption;\n sourceFileName?: string;\n sourceRoot?: string;\n // Deprecate top level parserOpts\n parserOpts?: ParserOptions;\n // Deprecate top level generatorOpts\n generatorOpts?: GeneratorOptions;\n};\n\nexport type NormalizedOptions = {\n readonly targets: Targets;\n} & Omit;\n\nexport type CallerMetadata = {\n // If 'caller' is specified, require that the name is given for debugging\n // messages.\n name: string;\n};\nexport type EnvSet = {\n [x: string]: T;\n};\nexport type IgnoreItem =\n | string\n | RegExp\n | ((\n path: string | undefined,\n context: { dirname: string; caller: CallerMetadata; envName: string },\n ) => unknown);\nexport type IgnoreList = ReadonlyArray;\n\nexport type PluginOptions = object | void | false;\nexport type PluginTarget = string | object | Function;\nexport type PluginItem =\n | ConfigItem\n | Plugin\n | PluginTarget\n | [PluginTarget, PluginOptions]\n | [PluginTarget, PluginOptions, string | void];\nexport type PluginList = ReadonlyArray;\n\nexport type OverridesList = Array;\nexport type ConfigApplicableTest = IgnoreItem | Array;\n\nexport type ConfigFileSearch = string | boolean;\nexport type BabelrcSearch = boolean | IgnoreItem | IgnoreList;\nexport type SourceMapsOption = boolean | \"inline\" | \"both\";\nexport type SourceTypeOption = \"module\" | \"script\" | \"unambiguous\";\nexport type CompactOption = boolean | \"auto\";\nexport type RootInputSourceMapOption = object | boolean;\nexport type RootMode = \"root\" | \"upward\" | \"upward-optional\";\n\nexport type TargetsListOrObject =\n | Targets\n | InputTargets\n | InputTargets[\"browsers\"];\n\nexport type OptionsSource =\n | \"arguments\"\n | \"configfile\"\n | \"babelrcfile\"\n | \"extendsfile\"\n | \"preset\"\n | \"plugin\";\n\nexport type RootPath = Readonly<{\n type: \"root\";\n source: OptionsSource;\n}>;\n\ntype OverridesPath = Readonly<{\n type: \"overrides\";\n index: number;\n parent: RootPath;\n}>;\n\ntype EnvPath = Readonly<{\n type: \"env\";\n name: string;\n parent: RootPath | OverridesPath;\n}>;\n\nexport type NestingPath = RootPath | OverridesPath | EnvPath;\n\nconst knownAssumptions = [\n \"arrayLikeIsIterable\",\n \"constantReexports\",\n \"constantSuper\",\n \"enumerableModuleMeta\",\n \"ignoreFunctionLength\",\n \"ignoreToPrimitiveHint\",\n \"iterableIsArray\",\n \"mutableTemplateObject\",\n \"noClassCalls\",\n \"noDocumentAll\",\n \"noIncompleteNsImportDetection\",\n \"noNewArrows\",\n \"noUninitializedPrivateFieldAccess\",\n \"objectRestNoSymbols\",\n \"privateFieldsAsSymbols\",\n \"privateFieldsAsProperties\",\n \"pureGetters\",\n \"setClassMethods\",\n \"setComputedProperties\",\n \"setPublicClassFields\",\n \"setSpreadProperties\",\n \"skipForOfIteratorClosing\",\n \"superIsCallableConstructor\",\n] as const;\nexport type AssumptionName = (typeof knownAssumptions)[number];\nexport const assumptionsNames = new Set(knownAssumptions);\n\nfunction getSource(loc: NestingPath): OptionsSource {\n return loc.type === \"root\" ? loc.source : getSource(loc.parent);\n}\n\nexport function validate(\n type: OptionsSource,\n opts: any,\n filename?: string,\n): ValidatedOptions {\n try {\n return validateNested(\n {\n type: \"root\",\n source: type,\n },\n opts,\n );\n } catch (error) {\n const configError = new ConfigError(error.message, filename);\n // @ts-expect-error TODO: .code is not defined on ConfigError or Error\n if (error.code) configError.code = error.code;\n throw configError;\n }\n}\n\nfunction validateNested(loc: NestingPath, opts: { [key: string]: unknown }) {\n const type = getSource(loc);\n\n assertNoDuplicateSourcemap(opts);\n\n Object.keys(opts).forEach((key: string) => {\n const optLoc = {\n type: \"option\",\n name: key,\n parent: loc,\n } as const;\n\n if (type === \"preset\" && NONPRESET_VALIDATORS[key]) {\n throw new Error(`${msg(optLoc)} is not allowed in preset options`);\n }\n if (type !== \"arguments\" && ROOT_VALIDATORS[key]) {\n throw new Error(\n `${msg(optLoc)} is only allowed in root programmatic options`,\n );\n }\n if (\n type !== \"arguments\" &&\n type !== \"configfile\" &&\n BABELRC_VALIDATORS[key]\n ) {\n if (type === \"babelrcfile\" || type === \"extendsfile\") {\n throw new Error(\n `${msg(\n optLoc,\n )} is not allowed in .babelrc or \"extends\"ed files, only in root programmatic options, ` +\n `or babel.config.js/config file options`,\n );\n }\n\n throw new Error(\n `${msg(\n optLoc,\n )} is only allowed in root programmatic options, or babel.config.js/config file options`,\n );\n }\n\n const validator =\n COMMON_VALIDATORS[key] ||\n NONPRESET_VALIDATORS[key] ||\n BABELRC_VALIDATORS[key] ||\n ROOT_VALIDATORS[key] ||\n (throwUnknownError as Validator);\n\n validator(optLoc, opts[key]);\n });\n\n return opts;\n}\n\nfunction throwUnknownError(loc: OptionPath) {\n const key = loc.name;\n\n if (removed[key]) {\n const { message, version = 5 } = removed[key];\n\n throw new Error(\n `Using removed Babel ${version} option: ${msg(loc)} - ${message}`,\n );\n } else {\n const unknownOptErr = new Error(\n `Unknown option: ${msg(\n loc,\n )}. Check out https://babeljs.io/docs/en/babel-core/#options for more information about options.`,\n );\n // @ts-expect-error todo(flow->ts): consider creating something like BabelConfigError with code field in it\n unknownOptErr.code = \"BABEL_UNKNOWN_OPTION\";\n\n throw unknownOptErr;\n }\n}\n\nfunction assertNoDuplicateSourcemap(opts: any): void {\n if (Object.hasOwn(opts, \"sourceMap\") && Object.hasOwn(opts, \"sourceMaps\")) {\n throw new Error(\".sourceMap is an alias for .sourceMaps, cannot use both\");\n }\n}\n\nfunction assertEnvSet(\n loc: OptionPath,\n value: unknown,\n): void | EnvSet {\n if (loc.parent.type === \"env\") {\n throw new Error(`${msg(loc)} is not allowed inside of another .env block`);\n }\n const parent: RootPath | OverridesPath = loc.parent;\n\n const obj = assertObject(loc, value);\n if (obj) {\n // Validate but don't copy the .env object in order to preserve\n // object identity for use during config chain processing.\n for (const envName of Object.keys(obj)) {\n const env = assertObject(access(loc, envName), obj[envName]);\n if (!env) continue;\n\n const envLoc = {\n type: \"env\",\n name: envName,\n parent,\n } as const;\n validateNested(envLoc, env);\n }\n }\n return obj;\n}\n\nfunction assertOverridesList(\n loc: OptionPath,\n value: unknown[],\n): undefined | OverridesList {\n if (loc.parent.type === \"env\") {\n throw new Error(`${msg(loc)} is not allowed inside an .env block`);\n }\n if (loc.parent.type === \"overrides\") {\n throw new Error(`${msg(loc)} is not allowed inside an .overrides block`);\n }\n const parent: RootPath = loc.parent;\n\n const arr = assertArray(loc, value);\n if (arr) {\n for (const [index, item] of arr.entries()) {\n const objLoc = access(loc, index);\n const env = assertObject(objLoc, item);\n if (!env) throw new Error(`${msg(objLoc)} must be an object`);\n\n const overridesLoc = {\n type: \"overrides\",\n index,\n parent,\n } as const;\n validateNested(overridesLoc, env);\n }\n }\n return arr as OverridesList;\n}\n\nexport function checkNoUnwrappedItemOptionPairs(\n items: Array>,\n index: number,\n type: \"plugin\" | \"preset\",\n e: Error,\n): void {\n if (index === 0) return;\n\n const lastItem = items[index - 1];\n const thisItem = items[index];\n\n if (\n lastItem.file &&\n lastItem.options === undefined &&\n typeof thisItem.value === \"object\"\n ) {\n e.message +=\n `\\n- Maybe you meant to use\\n` +\n `\"${type}s\": [\\n [\"${lastItem.file.request}\", ${JSON.stringify(\n thisItem.value,\n undefined,\n 2,\n )}]\\n]\\n` +\n `To be a valid ${type}, its name and options should be wrapped in a pair of brackets`;\n }\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/validation/plugins.js b/node_modules/@babel/core/lib/config/validation/plugins.js new file mode 100644 index 00000000..d744eccc --- /dev/null +++ b/node_modules/@babel/core/lib/config/validation/plugins.js @@ -0,0 +1,67 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.validatePluginObject = validatePluginObject; +var _optionAssertions = require("./option-assertions.js"); +const VALIDATORS = { + name: _optionAssertions.assertString, + manipulateOptions: _optionAssertions.assertFunction, + pre: _optionAssertions.assertFunction, + post: _optionAssertions.assertFunction, + inherits: _optionAssertions.assertFunction, + visitor: assertVisitorMap, + parserOverride: _optionAssertions.assertFunction, + generatorOverride: _optionAssertions.assertFunction +}; +function assertVisitorMap(loc, value) { + const obj = (0, _optionAssertions.assertObject)(loc, value); + if (obj) { + Object.keys(obj).forEach(prop => { + if (prop !== "_exploded" && prop !== "_verified") { + assertVisitorHandler(prop, obj[prop]); + } + }); + if (obj.enter || obj.exit) { + throw new Error(`${(0, _optionAssertions.msg)(loc)} cannot contain catch-all "enter" or "exit" handlers. Please target individual nodes.`); + } + } + return obj; +} +function assertVisitorHandler(key, value) { + if (value && typeof value === "object") { + Object.keys(value).forEach(handler => { + if (handler !== "enter" && handler !== "exit") { + throw new Error(`.visitor["${key}"] may only have .enter and/or .exit handlers.`); + } + }); + } else if (typeof value !== "function") { + throw new Error(`.visitor["${key}"] must be a function`); + } +} +function validatePluginObject(obj) { + const rootPath = { + type: "root", + source: "plugin" + }; + Object.keys(obj).forEach(key => { + const validator = VALIDATORS[key]; + if (validator) { + const optLoc = { + type: "option", + name: key, + parent: rootPath + }; + validator(optLoc, obj[key]); + } else { + const invalidPluginPropertyError = new Error(`.${key} is not a valid Plugin property`); + invalidPluginPropertyError.code = "BABEL_UNKNOWN_PLUGIN_PROPERTY"; + throw invalidPluginPropertyError; + } + }); + return obj; +} +0 && 0; + +//# sourceMappingURL=plugins.js.map diff --git a/node_modules/@babel/core/lib/config/validation/plugins.js.map b/node_modules/@babel/core/lib/config/validation/plugins.js.map new file mode 100644 index 00000000..2f20d977 --- /dev/null +++ b/node_modules/@babel/core/lib/config/validation/plugins.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_optionAssertions","require","VALIDATORS","name","assertString","manipulateOptions","assertFunction","pre","post","inherits","visitor","assertVisitorMap","parserOverride","generatorOverride","loc","value","obj","assertObject","Object","keys","forEach","prop","assertVisitorHandler","enter","exit","Error","msg","key","handler","validatePluginObject","rootPath","type","source","validator","optLoc","parent","invalidPluginPropertyError","code"],"sources":["../../../src/config/validation/plugins.ts"],"sourcesContent":["import {\n assertString,\n assertFunction,\n assertObject,\n msg,\n} from \"./option-assertions.ts\";\n\nimport type {\n ValidatorSet,\n Validator,\n OptionPath,\n RootPath,\n} from \"./option-assertions.ts\";\nimport type { parse, ParserOptions } from \"@babel/parser\";\nimport type { Visitor } from \"@babel/traverse\";\nimport type { ValidatedOptions } from \"./options.ts\";\nimport type { File, PluginAPI, PluginPass } from \"../../index.ts\";\n\n// Note: The casts here are just meant to be static assertions to make sure\n// that the assertion functions actually assert that the value's type matches\n// the declared types.\nconst VALIDATORS: ValidatorSet = {\n name: assertString as Validator,\n manipulateOptions: assertFunction as Validator<\n PluginObject[\"manipulateOptions\"]\n >,\n pre: assertFunction as Validator,\n post: assertFunction as Validator,\n inherits: assertFunction as Validator,\n visitor: assertVisitorMap as Validator,\n\n parserOverride: assertFunction as Validator,\n generatorOverride: assertFunction as Validator<\n PluginObject[\"generatorOverride\"]\n >,\n};\n\nfunction assertVisitorMap(loc: OptionPath, value: unknown): Visitor {\n const obj = assertObject(loc, value);\n if (obj) {\n Object.keys(obj).forEach(prop => {\n if (prop !== \"_exploded\" && prop !== \"_verified\") {\n assertVisitorHandler(prop, obj[prop]);\n }\n });\n\n if (obj.enter || obj.exit) {\n throw new Error(\n `${msg(\n loc,\n )} cannot contain catch-all \"enter\" or \"exit\" handlers. Please target individual nodes.`,\n );\n }\n }\n return obj as Visitor;\n}\n\nfunction assertVisitorHandler(\n key: string,\n value: unknown,\n): asserts value is VisitorHandler {\n if (value && typeof value === \"object\") {\n Object.keys(value).forEach((handler: string) => {\n if (handler !== \"enter\" && handler !== \"exit\") {\n throw new Error(\n `.visitor[\"${key}\"] may only have .enter and/or .exit handlers.`,\n );\n }\n });\n } else if (typeof value !== \"function\") {\n throw new Error(`.visitor[\"${key}\"] must be a function`);\n }\n}\n\ntype VisitorHandler =\n | Function\n | {\n enter?: Function;\n exit?: Function;\n };\n\nexport type PluginObject = {\n name?: string;\n manipulateOptions?: (\n options: ValidatedOptions,\n parserOpts: ParserOptions,\n ) => void;\n pre?: (this: S, file: File) => void | Promise;\n post?: (this: S, file: File) => void | Promise;\n inherits?: (\n api: PluginAPI,\n options: unknown,\n dirname: string,\n ) => PluginObject;\n visitor?: Visitor;\n parserOverride?: (\n ...args: [...Parameters, typeof parse]\n ) => ReturnType;\n generatorOverride?: Function;\n};\n\nexport function validatePluginObject(obj: {\n [key: string]: unknown;\n}): PluginObject {\n const rootPath: RootPath = {\n type: \"root\",\n source: \"plugin\",\n };\n Object.keys(obj).forEach((key: string) => {\n const validator = VALIDATORS[key];\n\n if (validator) {\n const optLoc: OptionPath = {\n type: \"option\",\n name: key,\n parent: rootPath,\n };\n validator(optLoc, obj[key]);\n } else {\n const invalidPluginPropertyError = new Error(\n `.${key} is not a valid Plugin property`,\n );\n // @ts-expect-error todo(flow->ts) consider adding BabelConfigError with code field\n invalidPluginPropertyError.code = \"BABEL_UNKNOWN_PLUGIN_PROPERTY\";\n throw invalidPluginPropertyError;\n }\n });\n\n return obj as any;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AAqBA,MAAMC,UAAwB,GAAG;EAC/BC,IAAI,EAAEC,8BAA+C;EACrDC,iBAAiB,EAAEC,gCAElB;EACDC,GAAG,EAAED,gCAAgD;EACrDE,IAAI,EAAEF,gCAAiD;EACvDG,QAAQ,EAAEH,gCAAqD;EAC/DI,OAAO,EAAEC,gBAAsD;EAE/DC,cAAc,EAAEN,gCAA2D;EAC3EO,iBAAiB,EAAEP;AAGrB,CAAC;AAED,SAASK,gBAAgBA,CAACG,GAAe,EAAEC,KAAc,EAAW;EAClE,MAAMC,GAAG,GAAG,IAAAC,8BAAY,EAACH,GAAG,EAAEC,KAAK,CAAC;EACpC,IAAIC,GAAG,EAAE;IACPE,MAAM,CAACC,IAAI,CAACH,GAAG,CAAC,CAACI,OAAO,CAACC,IAAI,IAAI;MAC/B,IAAIA,IAAI,KAAK,WAAW,IAAIA,IAAI,KAAK,WAAW,EAAE;QAChDC,oBAAoB,CAACD,IAAI,EAAEL,GAAG,CAACK,IAAI,CAAC,CAAC;MACvC;IACF,CAAC,CAAC;IAEF,IAAIL,GAAG,CAACO,KAAK,IAAIP,GAAG,CAACQ,IAAI,EAAE;MACzB,MAAM,IAAIC,KAAK,CACb,GAAG,IAAAC,qBAAG,EACJZ,GACF,CAAC,uFACH,CAAC;IACH;EACF;EACA,OAAOE,GAAG;AACZ;AAEA,SAASM,oBAAoBA,CAC3BK,GAAW,EACXZ,KAAc,EACmB;EACjC,IAAIA,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IACtCG,MAAM,CAACC,IAAI,CAACJ,KAAK,CAAC,CAACK,OAAO,CAAEQ,OAAe,IAAK;MAC9C,IAAIA,OAAO,KAAK,OAAO,IAAIA,OAAO,KAAK,MAAM,EAAE;QAC7C,MAAM,IAAIH,KAAK,CACb,aAAaE,GAAG,gDAClB,CAAC;MACH;IACF,CAAC,CAAC;EACJ,CAAC,MAAM,IAAI,OAAOZ,KAAK,KAAK,UAAU,EAAE;IACtC,MAAM,IAAIU,KAAK,CAAC,aAAaE,GAAG,uBAAuB,CAAC;EAC1D;AACF;AA6BO,SAASE,oBAAoBA,CAACb,GAEpC,EAAgB;EACf,MAAMc,QAAkB,GAAG;IACzBC,IAAI,EAAE,MAAM;IACZC,MAAM,EAAE;EACV,CAAC;EACDd,MAAM,CAACC,IAAI,CAACH,GAAG,CAAC,CAACI,OAAO,CAAEO,GAAW,IAAK;IACxC,MAAMM,SAAS,GAAG/B,UAAU,CAACyB,GAAG,CAAC;IAEjC,IAAIM,SAAS,EAAE;MACb,MAAMC,MAAkB,GAAG;QACzBH,IAAI,EAAE,QAAQ;QACd5B,IAAI,EAAEwB,GAAG;QACTQ,MAAM,EAAEL;MACV,CAAC;MACDG,SAAS,CAACC,MAAM,EAAElB,GAAG,CAACW,GAAG,CAAC,CAAC;IAC7B,CAAC,MAAM;MACL,MAAMS,0BAA0B,GAAG,IAAIX,KAAK,CAC1C,IAAIE,GAAG,iCACT,CAAC;MAEDS,0BAA0B,CAACC,IAAI,GAAG,+BAA+B;MACjE,MAAMD,0BAA0B;IAClC;EACF,CAAC,CAAC;EAEF,OAAOpB,GAAG;AACZ;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/config/validation/removed.js b/node_modules/@babel/core/lib/config/validation/removed.js new file mode 100644 index 00000000..9bd436e8 --- /dev/null +++ b/node_modules/@babel/core/lib/config/validation/removed.js @@ -0,0 +1,68 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = exports.default = { + auxiliaryComment: { + message: "Use `auxiliaryCommentBefore` or `auxiliaryCommentAfter`" + }, + blacklist: { + message: "Put the specific transforms you want in the `plugins` option" + }, + breakConfig: { + message: "This is not a necessary option in Babel 6" + }, + experimental: { + message: "Put the specific transforms you want in the `plugins` option" + }, + externalHelpers: { + message: "Use the `external-helpers` plugin instead. " + "Check out http://babeljs.io/docs/plugins/external-helpers/" + }, + extra: { + message: "" + }, + jsxPragma: { + message: "use the `pragma` option in the `react-jsx` plugin. " + "Check out http://babeljs.io/docs/plugins/transform-react-jsx/" + }, + loose: { + message: "Specify the `loose` option for the relevant plugin you are using " + "or use a preset that sets the option." + }, + metadataUsedHelpers: { + message: "Not required anymore as this is enabled by default" + }, + modules: { + message: "Use the corresponding module transform plugin in the `plugins` option. " + "Check out http://babeljs.io/docs/plugins/#modules" + }, + nonStandard: { + message: "Use the `react-jsx` and `flow-strip-types` plugins to support JSX and Flow. " + "Also check out the react preset http://babeljs.io/docs/plugins/preset-react/" + }, + optional: { + message: "Put the specific transforms you want in the `plugins` option" + }, + sourceMapName: { + message: "The `sourceMapName` option has been removed because it makes more sense for the " + "tooling that calls Babel to assign `map.file` themselves." + }, + stage: { + message: "Check out the corresponding stage-x presets http://babeljs.io/docs/plugins/#presets" + }, + whitelist: { + message: "Put the specific transforms you want in the `plugins` option" + }, + resolveModuleSource: { + version: 6, + message: "Use `babel-plugin-module-resolver@3`'s 'resolvePath' options" + }, + metadata: { + version: 6, + message: "Generated plugin metadata is always included in the output result" + }, + sourceMapTarget: { + version: 6, + message: "The `sourceMapTarget` option has been removed because it makes more sense for the tooling " + "that calls Babel to assign `map.file` themselves." + } +}; +0 && 0; + +//# sourceMappingURL=removed.js.map diff --git a/node_modules/@babel/core/lib/config/validation/removed.js.map b/node_modules/@babel/core/lib/config/validation/removed.js.map new file mode 100644 index 00000000..fa565957 --- /dev/null +++ b/node_modules/@babel/core/lib/config/validation/removed.js.map @@ -0,0 +1 @@ +{"version":3,"names":["auxiliaryComment","message","blacklist","breakConfig","experimental","externalHelpers","extra","jsxPragma","loose","metadataUsedHelpers","modules","nonStandard","optional","sourceMapName","stage","whitelist","resolveModuleSource","version","metadata","sourceMapTarget"],"sources":["../../../src/config/validation/removed.ts"],"sourcesContent":["export default {\n auxiliaryComment: {\n message: \"Use `auxiliaryCommentBefore` or `auxiliaryCommentAfter`\",\n },\n blacklist: {\n message: \"Put the specific transforms you want in the `plugins` option\",\n },\n breakConfig: {\n message: \"This is not a necessary option in Babel 6\",\n },\n experimental: {\n message: \"Put the specific transforms you want in the `plugins` option\",\n },\n externalHelpers: {\n message:\n \"Use the `external-helpers` plugin instead. \" +\n \"Check out http://babeljs.io/docs/plugins/external-helpers/\",\n },\n extra: {\n message: \"\",\n },\n jsxPragma: {\n message:\n \"use the `pragma` option in the `react-jsx` plugin. \" +\n \"Check out http://babeljs.io/docs/plugins/transform-react-jsx/\",\n },\n loose: {\n message:\n \"Specify the `loose` option for the relevant plugin you are using \" +\n \"or use a preset that sets the option.\",\n },\n metadataUsedHelpers: {\n message: \"Not required anymore as this is enabled by default\",\n },\n modules: {\n message:\n \"Use the corresponding module transform plugin in the `plugins` option. \" +\n \"Check out http://babeljs.io/docs/plugins/#modules\",\n },\n nonStandard: {\n message:\n \"Use the `react-jsx` and `flow-strip-types` plugins to support JSX and Flow. \" +\n \"Also check out the react preset http://babeljs.io/docs/plugins/preset-react/\",\n },\n optional: {\n message: \"Put the specific transforms you want in the `plugins` option\",\n },\n sourceMapName: {\n message:\n \"The `sourceMapName` option has been removed because it makes more sense for the \" +\n \"tooling that calls Babel to assign `map.file` themselves.\",\n },\n stage: {\n message:\n \"Check out the corresponding stage-x presets http://babeljs.io/docs/plugins/#presets\",\n },\n whitelist: {\n message: \"Put the specific transforms you want in the `plugins` option\",\n },\n\n resolveModuleSource: {\n version: 6,\n message: \"Use `babel-plugin-module-resolver@3`'s 'resolvePath' options\",\n },\n metadata: {\n version: 6,\n message:\n \"Generated plugin metadata is always included in the output result\",\n },\n sourceMapTarget: {\n version: 6,\n message:\n \"The `sourceMapTarget` option has been removed because it makes more sense for the tooling \" +\n \"that calls Babel to assign `map.file` themselves.\",\n },\n} as { [name: string]: { version?: number; message: string } };\n"],"mappings":";;;;;;iCAAe;EACbA,gBAAgB,EAAE;IAChBC,OAAO,EAAE;EACX,CAAC;EACDC,SAAS,EAAE;IACTD,OAAO,EAAE;EACX,CAAC;EACDE,WAAW,EAAE;IACXF,OAAO,EAAE;EACX,CAAC;EACDG,YAAY,EAAE;IACZH,OAAO,EAAE;EACX,CAAC;EACDI,eAAe,EAAE;IACfJ,OAAO,EACL,6CAA6C,GAC7C;EACJ,CAAC;EACDK,KAAK,EAAE;IACLL,OAAO,EAAE;EACX,CAAC;EACDM,SAAS,EAAE;IACTN,OAAO,EACL,qDAAqD,GACrD;EACJ,CAAC;EACDO,KAAK,EAAE;IACLP,OAAO,EACL,mEAAmE,GACnE;EACJ,CAAC;EACDQ,mBAAmB,EAAE;IACnBR,OAAO,EAAE;EACX,CAAC;EACDS,OAAO,EAAE;IACPT,OAAO,EACL,yEAAyE,GACzE;EACJ,CAAC;EACDU,WAAW,EAAE;IACXV,OAAO,EACL,8EAA8E,GAC9E;EACJ,CAAC;EACDW,QAAQ,EAAE;IACRX,OAAO,EAAE;EACX,CAAC;EACDY,aAAa,EAAE;IACbZ,OAAO,EACL,kFAAkF,GAClF;EACJ,CAAC;EACDa,KAAK,EAAE;IACLb,OAAO,EACL;EACJ,CAAC;EACDc,SAAS,EAAE;IACTd,OAAO,EAAE;EACX,CAAC;EAEDe,mBAAmB,EAAE;IACnBC,OAAO,EAAE,CAAC;IACVhB,OAAO,EAAE;EACX,CAAC;EACDiB,QAAQ,EAAE;IACRD,OAAO,EAAE,CAAC;IACVhB,OAAO,EACL;EACJ,CAAC;EACDkB,eAAe,EAAE;IACfF,OAAO,EAAE,CAAC;IACVhB,OAAO,EACL,4FAA4F,GAC5F;EACJ;AACF,CAAC;AAAA","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/errors/config-error.js b/node_modules/@babel/core/lib/errors/config-error.js new file mode 100644 index 00000000..c2908047 --- /dev/null +++ b/node_modules/@babel/core/lib/errors/config-error.js @@ -0,0 +1,18 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _rewriteStackTrace = require("./rewrite-stack-trace.js"); +class ConfigError extends Error { + constructor(message, filename) { + super(message); + (0, _rewriteStackTrace.expectedError)(this); + if (filename) (0, _rewriteStackTrace.injectVirtualStackFrame)(this, filename); + } +} +exports.default = ConfigError; +0 && 0; + +//# sourceMappingURL=config-error.js.map diff --git a/node_modules/@babel/core/lib/errors/config-error.js.map b/node_modules/@babel/core/lib/errors/config-error.js.map new file mode 100644 index 00000000..0045ded7 --- /dev/null +++ b/node_modules/@babel/core/lib/errors/config-error.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_rewriteStackTrace","require","ConfigError","Error","constructor","message","filename","expectedError","injectVirtualStackFrame","exports","default"],"sources":["../../src/errors/config-error.ts"],"sourcesContent":["import {\n injectVirtualStackFrame,\n expectedError,\n} from \"./rewrite-stack-trace.ts\";\n\nexport default class ConfigError extends Error {\n constructor(message: string, filename?: string) {\n super(message);\n expectedError(this);\n if (filename) injectVirtualStackFrame(this, filename);\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AAKe,MAAMC,WAAW,SAASC,KAAK,CAAC;EAC7CC,WAAWA,CAACC,OAAe,EAAEC,QAAiB,EAAE;IAC9C,KAAK,CAACD,OAAO,CAAC;IACd,IAAAE,gCAAa,EAAC,IAAI,CAAC;IACnB,IAAID,QAAQ,EAAE,IAAAE,0CAAuB,EAAC,IAAI,EAAEF,QAAQ,CAAC;EACvD;AACF;AAACG,OAAA,CAAAC,OAAA,GAAAR,WAAA;AAAA","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/errors/rewrite-stack-trace.js b/node_modules/@babel/core/lib/errors/rewrite-stack-trace.js new file mode 100644 index 00000000..68896d38 --- /dev/null +++ b/node_modules/@babel/core/lib/errors/rewrite-stack-trace.js @@ -0,0 +1,98 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.beginHiddenCallStack = beginHiddenCallStack; +exports.endHiddenCallStack = endHiddenCallStack; +exports.expectedError = expectedError; +exports.injectVirtualStackFrame = injectVirtualStackFrame; +var _Object$getOwnPropert; +const ErrorToString = Function.call.bind(Error.prototype.toString); +const SUPPORTED = !!Error.captureStackTrace && ((_Object$getOwnPropert = Object.getOwnPropertyDescriptor(Error, "stackTraceLimit")) == null ? void 0 : _Object$getOwnPropert.writable) === true; +const START_HIDING = "startHiding - secret - don't use this - v1"; +const STOP_HIDING = "stopHiding - secret - don't use this - v1"; +const expectedErrors = new WeakSet(); +const virtualFrames = new WeakMap(); +function CallSite(filename) { + return Object.create({ + isNative: () => false, + isConstructor: () => false, + isToplevel: () => true, + getFileName: () => filename, + getLineNumber: () => undefined, + getColumnNumber: () => undefined, + getFunctionName: () => undefined, + getMethodName: () => undefined, + getTypeName: () => undefined, + toString: () => filename + }); +} +function injectVirtualStackFrame(error, filename) { + if (!SUPPORTED) return; + let frames = virtualFrames.get(error); + if (!frames) virtualFrames.set(error, frames = []); + frames.push(CallSite(filename)); + return error; +} +function expectedError(error) { + if (!SUPPORTED) return; + expectedErrors.add(error); + return error; +} +function beginHiddenCallStack(fn) { + if (!SUPPORTED) return fn; + return Object.defineProperty(function (...args) { + setupPrepareStackTrace(); + return fn(...args); + }, "name", { + value: STOP_HIDING + }); +} +function endHiddenCallStack(fn) { + if (!SUPPORTED) return fn; + return Object.defineProperty(function (...args) { + return fn(...args); + }, "name", { + value: START_HIDING + }); +} +function setupPrepareStackTrace() { + setupPrepareStackTrace = () => {}; + const { + prepareStackTrace = defaultPrepareStackTrace + } = Error; + const MIN_STACK_TRACE_LIMIT = 50; + Error.stackTraceLimit && (Error.stackTraceLimit = Math.max(Error.stackTraceLimit, MIN_STACK_TRACE_LIMIT)); + Error.prepareStackTrace = function stackTraceRewriter(err, trace) { + let newTrace = []; + const isExpected = expectedErrors.has(err); + let status = isExpected ? "hiding" : "unknown"; + for (let i = 0; i < trace.length; i++) { + const name = trace[i].getFunctionName(); + if (name === START_HIDING) { + status = "hiding"; + } else if (name === STOP_HIDING) { + if (status === "hiding") { + status = "showing"; + if (virtualFrames.has(err)) { + newTrace.unshift(...virtualFrames.get(err)); + } + } else if (status === "unknown") { + newTrace = trace; + break; + } + } else if (status !== "hiding") { + newTrace.push(trace[i]); + } + } + return prepareStackTrace(err, newTrace); + }; +} +function defaultPrepareStackTrace(err, trace) { + if (trace.length === 0) return ErrorToString(err); + return `${ErrorToString(err)}\n at ${trace.join("\n at ")}`; +} +0 && 0; + +//# sourceMappingURL=rewrite-stack-trace.js.map diff --git a/node_modules/@babel/core/lib/errors/rewrite-stack-trace.js.map b/node_modules/@babel/core/lib/errors/rewrite-stack-trace.js.map new file mode 100644 index 00000000..725bf91c --- /dev/null +++ b/node_modules/@babel/core/lib/errors/rewrite-stack-trace.js.map @@ -0,0 +1 @@ +{"version":3,"names":["ErrorToString","Function","call","bind","Error","prototype","toString","SUPPORTED","captureStackTrace","_Object$getOwnPropert","Object","getOwnPropertyDescriptor","writable","START_HIDING","STOP_HIDING","expectedErrors","WeakSet","virtualFrames","WeakMap","CallSite","filename","create","isNative","isConstructor","isToplevel","getFileName","getLineNumber","undefined","getColumnNumber","getFunctionName","getMethodName","getTypeName","injectVirtualStackFrame","error","frames","get","set","push","expectedError","add","beginHiddenCallStack","fn","defineProperty","args","setupPrepareStackTrace","value","endHiddenCallStack","prepareStackTrace","defaultPrepareStackTrace","MIN_STACK_TRACE_LIMIT","stackTraceLimit","Math","max","stackTraceRewriter","err","trace","newTrace","isExpected","has","status","i","length","name","unshift","join"],"sources":["../../src/errors/rewrite-stack-trace.ts"],"sourcesContent":["/**\n * This file uses the internal V8 Stack Trace API (https://v8.dev/docs/stack-trace-api)\n * to provide utilities to rewrite the stack trace.\n * When this API is not present, all the functions in this file become noops.\n *\n * beginHiddenCallStack(fn) and endHiddenCallStack(fn) wrap their parameter to\n * mark an hidden portion of the stack trace. The function passed to\n * beginHiddenCallStack is the first hidden function, while the function passed\n * to endHiddenCallStack is the first shown function.\n *\n * When an error is thrown _outside_ of the hidden zone, everything between\n * beginHiddenCallStack and endHiddenCallStack will not be shown.\n * If an error is thrown _inside_ the hidden zone, then the whole stack trace\n * will be visible: this is to avoid hiding real bugs.\n * However, if an error inside the hidden zone is expected, it can be marked\n * with the expectedError(error) function to keep the hidden frames hidden.\n *\n * Consider this call stack (the outer function is the bottom one):\n *\n * 1. a()\n * 2. endHiddenCallStack(b)()\n * 3. c()\n * 4. beginHiddenCallStack(d)()\n * 5. e()\n * 6. f()\n *\n * - If a() throws an error, then its shown call stack will be \"a, b, e, f\"\n * - If b() throws an error, then its shown call stack will be \"b, e, f\"\n * - If c() throws an expected error, then its shown call stack will be \"e, f\"\n * - If c() throws an unexpected error, then its shown call stack will be \"c, d, e, f\"\n * - If d() throws an expected error, then its shown call stack will be \"e, f\"\n * - If d() throws an unexpected error, then its shown call stack will be \"d, e, f\"\n * - If e() throws an error, then its shown call stack will be \"e, f\"\n *\n * Additionally, an error can inject additional \"virtual\" stack frames using the\n * injectVirtualStackFrame(error, filename) function: those are injected as a\n * replacement of the hidden frames.\n * In the example above, if we called injectVirtualStackFrame(err, \"h\") and\n * injectVirtualStackFrame(err, \"i\") on the expected error thrown by c(), its\n * shown call stack would have been \"h, i, e, f\".\n * This can be useful, for example, to report config validation errors as if they\n * were directly thrown in the config file.\n */\n\nconst ErrorToString = Function.call.bind(Error.prototype.toString);\n\nconst SUPPORTED =\n !!Error.captureStackTrace &&\n Object.getOwnPropertyDescriptor(Error, \"stackTraceLimit\")?.writable === true;\n\nconst START_HIDING = \"startHiding - secret - don't use this - v1\";\nconst STOP_HIDING = \"stopHiding - secret - don't use this - v1\";\n\ntype CallSite = NodeJS.CallSite;\n\nconst expectedErrors = new WeakSet();\nconst virtualFrames = new WeakMap();\n\nfunction CallSite(filename: string): CallSite {\n // We need to use a prototype otherwise it breaks source-map-support's internals\n return Object.create({\n isNative: () => false,\n isConstructor: () => false,\n isToplevel: () => true,\n getFileName: () => filename,\n getLineNumber: () => undefined,\n getColumnNumber: () => undefined,\n getFunctionName: () => undefined,\n getMethodName: () => undefined,\n getTypeName: () => undefined,\n toString: () => filename,\n } as CallSite);\n}\n\nexport function injectVirtualStackFrame(error: Error, filename: string) {\n if (!SUPPORTED) return;\n\n let frames = virtualFrames.get(error);\n if (!frames) virtualFrames.set(error, (frames = []));\n frames.push(CallSite(filename));\n\n return error;\n}\n\nexport function expectedError(error: Error) {\n if (!SUPPORTED) return;\n expectedErrors.add(error);\n return error;\n}\n\nexport function beginHiddenCallStack(\n fn: (...args: A) => R,\n) {\n if (!SUPPORTED) return fn;\n\n return Object.defineProperty(\n function (...args: A) {\n setupPrepareStackTrace();\n return fn(...args);\n },\n \"name\",\n { value: STOP_HIDING },\n );\n}\n\nexport function endHiddenCallStack(\n fn: (...args: A) => R,\n) {\n if (!SUPPORTED) return fn;\n\n return Object.defineProperty(\n function (...args: A) {\n return fn(...args);\n },\n \"name\",\n { value: START_HIDING },\n );\n}\n\nfunction setupPrepareStackTrace() {\n // @ts-expect-error This function is a singleton\n setupPrepareStackTrace = () => {};\n\n const { prepareStackTrace = defaultPrepareStackTrace } = Error;\n\n // We add some extra frames to Error.stackTraceLimit, so that we can\n // always show some useful frames even after deleting ours.\n // STACK_TRACE_LIMIT_DELTA should be around the maximum expected number\n // of internal frames, and not too big because capturing the stack trace\n // is slow (this is why Error.stackTraceLimit does not default to Infinity!).\n // Increase it if needed.\n // However, we only do it if the user did not explicitly set it to 0.\n const MIN_STACK_TRACE_LIMIT = 50;\n Error.stackTraceLimit &&= Math.max(\n Error.stackTraceLimit,\n MIN_STACK_TRACE_LIMIT,\n );\n\n Error.prepareStackTrace = function stackTraceRewriter(err, trace) {\n let newTrace = [];\n\n const isExpected = expectedErrors.has(err);\n let status: \"showing\" | \"hiding\" | \"unknown\" = isExpected\n ? \"hiding\"\n : \"unknown\";\n for (let i = 0; i < trace.length; i++) {\n const name = trace[i].getFunctionName();\n if (name === START_HIDING) {\n status = \"hiding\";\n } else if (name === STOP_HIDING) {\n if (status === \"hiding\") {\n status = \"showing\";\n if (virtualFrames.has(err)) {\n newTrace.unshift(...virtualFrames.get(err));\n }\n } else if (status === \"unknown\") {\n // Unexpected internal error, show the full stack trace\n newTrace = trace;\n break;\n }\n } else if (status !== \"hiding\") {\n newTrace.push(trace[i]);\n }\n }\n\n return prepareStackTrace(err, newTrace);\n };\n}\n\nfunction defaultPrepareStackTrace(err: Error, trace: CallSite[]) {\n if (trace.length === 0) return ErrorToString(err);\n return `${ErrorToString(err)}\\n at ${trace.join(\"\\n at \")}`;\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/gensync-utils/async.js b/node_modules/@babel/core/lib/gensync-utils/async.js new file mode 100644 index 00000000..42946c63 --- /dev/null +++ b/node_modules/@babel/core/lib/gensync-utils/async.js @@ -0,0 +1,90 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.forwardAsync = forwardAsync; +exports.isAsync = void 0; +exports.isThenable = isThenable; +exports.maybeAsync = maybeAsync; +exports.waitFor = exports.onFirstPause = void 0; +function _gensync() { + const data = require("gensync"); + _gensync = function () { + return data; + }; + return data; +} +function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } +function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } +const runGenerator = _gensync()(function* (item) { + return yield* item; +}); +const isAsync = exports.isAsync = _gensync()({ + sync: () => false, + errback: cb => cb(null, true) +}); +function maybeAsync(fn, message) { + return _gensync()({ + sync(...args) { + const result = fn.apply(this, args); + if (isThenable(result)) throw new Error(message); + return result; + }, + async(...args) { + return Promise.resolve(fn.apply(this, args)); + } + }); +} +const withKind = _gensync()({ + sync: cb => cb("sync"), + async: function () { + var _ref = _asyncToGenerator(function* (cb) { + return cb("async"); + }); + return function async(_x) { + return _ref.apply(this, arguments); + }; + }() +}); +function forwardAsync(action, cb) { + const g = _gensync()(action); + return withKind(kind => { + const adapted = g[kind]; + return cb(adapted); + }); +} +const onFirstPause = exports.onFirstPause = _gensync()({ + name: "onFirstPause", + arity: 2, + sync: function (item) { + return runGenerator.sync(item); + }, + errback: function (item, firstPause, cb) { + let completed = false; + runGenerator.errback(item, (err, value) => { + completed = true; + cb(err, value); + }); + if (!completed) { + firstPause(); + } + } +}); +const waitFor = exports.waitFor = _gensync()({ + sync: x => x, + async: function () { + var _ref2 = _asyncToGenerator(function* (x) { + return x; + }); + return function async(_x2) { + return _ref2.apply(this, arguments); + }; + }() +}); +function isThenable(val) { + return !!val && (typeof val === "object" || typeof val === "function") && !!val.then && typeof val.then === "function"; +} +0 && 0; + +//# sourceMappingURL=async.js.map diff --git a/node_modules/@babel/core/lib/gensync-utils/async.js.map b/node_modules/@babel/core/lib/gensync-utils/async.js.map new file mode 100644 index 00000000..595d7571 --- /dev/null +++ b/node_modules/@babel/core/lib/gensync-utils/async.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_gensync","data","require","asyncGeneratorStep","n","t","e","r","o","a","c","i","u","value","done","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","runGenerator","gensync","item","isAsync","exports","sync","errback","cb","maybeAsync","fn","message","args","result","isThenable","Error","async","withKind","_ref","_x","forwardAsync","action","g","kind","adapted","onFirstPause","name","arity","firstPause","completed","err","waitFor","x","_ref2","_x2","val"],"sources":["../../src/gensync-utils/async.ts"],"sourcesContent":["import gensync, { type Gensync, type Handler, type Callback } from \"gensync\";\n\ntype MaybePromise = T | Promise;\n\nconst runGenerator: {\n sync(gen: Handler): Return;\n async(gen: Handler): Promise;\n errback(gen: Handler, cb: Callback): void;\n} = gensync(function* (item: Handler): Handler {\n return yield* item;\n});\n\n// This Gensync returns true if the current execution context is\n// asynchronous, otherwise it returns false.\nexport const isAsync = gensync({\n sync: () => false,\n errback: cb => cb(null, true),\n});\n\n// This function wraps any functions (which could be either synchronous or\n// asynchronous) with a Gensync. If the wrapped function returns a promise\n// but the current execution context is synchronous, it will throw the\n// provided error.\n// This is used to handle user-provided functions which could be asynchronous.\nexport function maybeAsync(\n fn: (...args: Args) => Return,\n message: string,\n): Gensync {\n return gensync({\n sync(...args) {\n const result = fn.apply(this, args);\n if (isThenable(result)) throw new Error(message);\n return result;\n },\n async(...args) {\n return Promise.resolve(fn.apply(this, args));\n },\n });\n}\n\nconst withKind = gensync({\n sync: cb => cb(\"sync\"),\n async: async cb => cb(\"async\"),\n}) as (cb: (kind: \"sync\" | \"async\") => MaybePromise) => Handler;\n\n// This function wraps a generator (or a Gensync) into another function which,\n// when called, will run the provided generator in a sync or async way, depending\n// on the execution context where this forwardAsync function is called.\n// This is useful, for example, when passing a callback to a function which isn't\n// aware of gensync, but it only knows about synchronous and asynchronous functions.\n// An example is cache.using, which being exposed to the user must be as simple as\n// possible:\n// yield* forwardAsync(gensyncFn, wrappedFn =>\n// cache.using(x => {\n// // Here we don't know about gensync. wrappedFn is a\n// // normal sync or async function\n// return wrappedFn(x);\n// })\n// )\nexport function forwardAsync(\n action: (...args: Args) => Handler,\n cb: (\n adapted: (...args: Args) => MaybePromise,\n ) => MaybePromise,\n): Handler {\n const g = gensync(action);\n return withKind(kind => {\n const adapted = g[kind];\n return cb(adapted);\n });\n}\n\n// If the given generator is executed asynchronously, the first time that it\n// is paused (i.e. When it yields a gensync generator which can't be run\n// synchronously), call the \"firstPause\" callback.\nexport const onFirstPause = gensync<\n [gen: Handler, firstPause: () => void],\n unknown\n>({\n name: \"onFirstPause\",\n arity: 2,\n sync: function (item) {\n return runGenerator.sync(item);\n },\n errback: function (item, firstPause, cb) {\n let completed = false;\n\n runGenerator.errback(item, (err, value) => {\n completed = true;\n cb(err, value);\n });\n\n if (!completed) {\n firstPause();\n }\n },\n}) as (gen: Handler, firstPause: () => void) => Handler;\n\n// Wait for the given promise to be resolved\nexport const waitFor = gensync({\n sync: x => x,\n async: async x => x,\n}) as (p: T | Promise) => Handler;\n\nexport function isThenable(val: any): val is PromiseLike {\n return (\n !!val &&\n (typeof val === \"object\" || typeof val === \"function\") &&\n !!val.then &&\n typeof val.then === \"function\"\n );\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/gensync-utils/fs.js b/node_modules/@babel/core/lib/gensync-utils/fs.js new file mode 100644 index 00000000..b842df84 --- /dev/null +++ b/node_modules/@babel/core/lib/gensync-utils/fs.js @@ -0,0 +1,31 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.stat = exports.readFile = void 0; +function _fs() { + const data = require("fs"); + _fs = function () { + return data; + }; + return data; +} +function _gensync() { + const data = require("gensync"); + _gensync = function () { + return data; + }; + return data; +} +const readFile = exports.readFile = _gensync()({ + sync: _fs().readFileSync, + errback: _fs().readFile +}); +const stat = exports.stat = _gensync()({ + sync: _fs().statSync, + errback: _fs().stat +}); +0 && 0; + +//# sourceMappingURL=fs.js.map diff --git a/node_modules/@babel/core/lib/gensync-utils/fs.js.map b/node_modules/@babel/core/lib/gensync-utils/fs.js.map new file mode 100644 index 00000000..ef4e8d95 --- /dev/null +++ b/node_modules/@babel/core/lib/gensync-utils/fs.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_fs","data","require","_gensync","readFile","exports","gensync","sync","fs","readFileSync","errback","stat","statSync"],"sources":["../../src/gensync-utils/fs.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport gensync from \"gensync\";\n\nexport const readFile = gensync<[filepath: string, encoding: \"utf8\"], string>({\n sync: fs.readFileSync,\n errback: fs.readFile,\n});\n\nexport const stat = gensync({\n sync: fs.statSync,\n errback: fs.stat,\n});\n"],"mappings":";;;;;;AAAA,SAAAA,IAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,GAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,SAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,QAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEO,MAAMG,QAAQ,GAAAC,OAAA,CAAAD,QAAA,GAAGE,SAAMA,CAAC,CAA+C;EAC5EC,IAAI,EAAEC,IAACA,CAAC,CAACC,YAAY;EACrBC,OAAO,EAAEF,IAACA,CAAC,CAACJ;AACd,CAAC,CAAC;AAEK,MAAMO,IAAI,GAAAN,OAAA,CAAAM,IAAA,GAAGL,SAAMA,CAAC,CAAC;EAC1BC,IAAI,EAAEC,IAACA,CAAC,CAACI,QAAQ;EACjBF,OAAO,EAAEF,IAACA,CAAC,CAACG;AACd,CAAC,CAAC;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/gensync-utils/functional.js b/node_modules/@babel/core/lib/gensync-utils/functional.js new file mode 100644 index 00000000..d7f77554 --- /dev/null +++ b/node_modules/@babel/core/lib/gensync-utils/functional.js @@ -0,0 +1,58 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.once = once; +var _async = require("./async.js"); +function once(fn) { + let result; + let resultP; + let promiseReferenced = false; + return function* () { + if (!result) { + if (resultP) { + promiseReferenced = true; + return yield* (0, _async.waitFor)(resultP); + } + if (!(yield* (0, _async.isAsync)())) { + try { + result = { + ok: true, + value: yield* fn() + }; + } catch (error) { + result = { + ok: false, + value: error + }; + } + } else { + let resolve, reject; + resultP = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + try { + result = { + ok: true, + value: yield* fn() + }; + resultP = null; + if (promiseReferenced) resolve(result.value); + } catch (error) { + result = { + ok: false, + value: error + }; + resultP = null; + if (promiseReferenced) reject(error); + } + } + } + if (result.ok) return result.value;else throw result.value; + }; +} +0 && 0; + +//# sourceMappingURL=functional.js.map diff --git a/node_modules/@babel/core/lib/gensync-utils/functional.js.map b/node_modules/@babel/core/lib/gensync-utils/functional.js.map new file mode 100644 index 00000000..e8c5ed03 --- /dev/null +++ b/node_modules/@babel/core/lib/gensync-utils/functional.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_async","require","once","fn","result","resultP","promiseReferenced","waitFor","isAsync","ok","value","error","resolve","reject","Promise","res","rej"],"sources":["../../src/gensync-utils/functional.ts"],"sourcesContent":["import type { Handler } from \"gensync\";\n\nimport { isAsync, waitFor } from \"./async.ts\";\n\nexport function once(fn: () => Handler): () => Handler {\n let result: { ok: true; value: R } | { ok: false; value: unknown };\n let resultP: Promise;\n let promiseReferenced = false;\n return function* () {\n if (!result) {\n if (resultP) {\n promiseReferenced = true;\n return yield* waitFor(resultP);\n }\n\n if (!(yield* isAsync())) {\n try {\n result = { ok: true, value: yield* fn() };\n } catch (error) {\n result = { ok: false, value: error };\n }\n } else {\n let resolve: (result: R) => void, reject: (error: unknown) => void;\n resultP = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n try {\n result = { ok: true, value: yield* fn() };\n // Avoid keeping the promise around\n // now that we have the result.\n resultP = null;\n // We only resolve/reject the promise if it has been actually\n // referenced. If there are no listeners we can forget about it.\n // In the reject case, this avoid uncatchable unhandledRejection\n // events.\n if (promiseReferenced) resolve(result.value);\n } catch (error) {\n result = { ok: false, value: error };\n resultP = null;\n if (promiseReferenced) reject(error);\n }\n }\n }\n\n if (result.ok) return result.value;\n else throw result.value;\n };\n}\n"],"mappings":";;;;;;AAEA,IAAAA,MAAA,GAAAC,OAAA;AAEO,SAASC,IAAIA,CAAIC,EAAoB,EAAoB;EAC9D,IAAIC,MAA8D;EAClE,IAAIC,OAAmB;EACvB,IAAIC,iBAAiB,GAAG,KAAK;EAC7B,OAAO,aAAa;IAClB,IAAI,CAACF,MAAM,EAAE;MACX,IAAIC,OAAO,EAAE;QACXC,iBAAiB,GAAG,IAAI;QACxB,OAAO,OAAO,IAAAC,cAAO,EAACF,OAAO,CAAC;MAChC;MAEA,IAAI,EAAE,OAAO,IAAAG,cAAO,EAAC,CAAC,CAAC,EAAE;QACvB,IAAI;UACFJ,MAAM,GAAG;YAAEK,EAAE,EAAE,IAAI;YAAEC,KAAK,EAAE,OAAOP,EAAE,CAAC;UAAE,CAAC;QAC3C,CAAC,CAAC,OAAOQ,KAAK,EAAE;UACdP,MAAM,GAAG;YAAEK,EAAE,EAAE,KAAK;YAAEC,KAAK,EAAEC;UAAM,CAAC;QACtC;MACF,CAAC,MAAM;QACL,IAAIC,OAA4B,EAAEC,MAAgC;QAClER,OAAO,GAAG,IAAIS,OAAO,CAAC,CAACC,GAAG,EAAEC,GAAG,KAAK;UAClCJ,OAAO,GAAGG,GAAG;UACbF,MAAM,GAAGG,GAAG;QACd,CAAC,CAAC;QAEF,IAAI;UACFZ,MAAM,GAAG;YAAEK,EAAE,EAAE,IAAI;YAAEC,KAAK,EAAE,OAAOP,EAAE,CAAC;UAAE,CAAC;UAGzCE,OAAO,GAAG,IAAI;UAKd,IAAIC,iBAAiB,EAAEM,OAAO,CAACR,MAAM,CAACM,KAAK,CAAC;QAC9C,CAAC,CAAC,OAAOC,KAAK,EAAE;UACdP,MAAM,GAAG;YAAEK,EAAE,EAAE,KAAK;YAAEC,KAAK,EAAEC;UAAM,CAAC;UACpCN,OAAO,GAAG,IAAI;UACd,IAAIC,iBAAiB,EAAEO,MAAM,CAACF,KAAK,CAAC;QACtC;MACF;IACF;IAEA,IAAIP,MAAM,CAACK,EAAE,EAAE,OAAOL,MAAM,CAACM,KAAK,CAAC,KAC9B,MAAMN,MAAM,CAACM,KAAK;EACzB,CAAC;AACH;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/index.js b/node_modules/@babel/core/lib/index.js new file mode 100644 index 00000000..5609000c --- /dev/null +++ b/node_modules/@babel/core/lib/index.js @@ -0,0 +1,233 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.DEFAULT_EXTENSIONS = void 0; +Object.defineProperty(exports, "File", { + enumerable: true, + get: function () { + return _file.default; + } +}); +Object.defineProperty(exports, "buildExternalHelpers", { + enumerable: true, + get: function () { + return _buildExternalHelpers.default; + } +}); +Object.defineProperty(exports, "createConfigItem", { + enumerable: true, + get: function () { + return _index2.createConfigItem; + } +}); +Object.defineProperty(exports, "createConfigItemAsync", { + enumerable: true, + get: function () { + return _index2.createConfigItemAsync; + } +}); +Object.defineProperty(exports, "createConfigItemSync", { + enumerable: true, + get: function () { + return _index2.createConfigItemSync; + } +}); +Object.defineProperty(exports, "getEnv", { + enumerable: true, + get: function () { + return _environment.getEnv; + } +}); +Object.defineProperty(exports, "loadOptions", { + enumerable: true, + get: function () { + return _index2.loadOptions; + } +}); +Object.defineProperty(exports, "loadOptionsAsync", { + enumerable: true, + get: function () { + return _index2.loadOptionsAsync; + } +}); +Object.defineProperty(exports, "loadOptionsSync", { + enumerable: true, + get: function () { + return _index2.loadOptionsSync; + } +}); +Object.defineProperty(exports, "loadPartialConfig", { + enumerable: true, + get: function () { + return _index2.loadPartialConfig; + } +}); +Object.defineProperty(exports, "loadPartialConfigAsync", { + enumerable: true, + get: function () { + return _index2.loadPartialConfigAsync; + } +}); +Object.defineProperty(exports, "loadPartialConfigSync", { + enumerable: true, + get: function () { + return _index2.loadPartialConfigSync; + } +}); +Object.defineProperty(exports, "parse", { + enumerable: true, + get: function () { + return _parse.parse; + } +}); +Object.defineProperty(exports, "parseAsync", { + enumerable: true, + get: function () { + return _parse.parseAsync; + } +}); +Object.defineProperty(exports, "parseSync", { + enumerable: true, + get: function () { + return _parse.parseSync; + } +}); +exports.resolvePreset = exports.resolvePlugin = void 0; +Object.defineProperty((0, exports), "template", { + enumerable: true, + get: function () { + return _template().default; + } +}); +Object.defineProperty((0, exports), "tokTypes", { + enumerable: true, + get: function () { + return _parser().tokTypes; + } +}); +Object.defineProperty(exports, "transform", { + enumerable: true, + get: function () { + return _transform.transform; + } +}); +Object.defineProperty(exports, "transformAsync", { + enumerable: true, + get: function () { + return _transform.transformAsync; + } +}); +Object.defineProperty(exports, "transformFile", { + enumerable: true, + get: function () { + return _transformFile.transformFile; + } +}); +Object.defineProperty(exports, "transformFileAsync", { + enumerable: true, + get: function () { + return _transformFile.transformFileAsync; + } +}); +Object.defineProperty(exports, "transformFileSync", { + enumerable: true, + get: function () { + return _transformFile.transformFileSync; + } +}); +Object.defineProperty(exports, "transformFromAst", { + enumerable: true, + get: function () { + return _transformAst.transformFromAst; + } +}); +Object.defineProperty(exports, "transformFromAstAsync", { + enumerable: true, + get: function () { + return _transformAst.transformFromAstAsync; + } +}); +Object.defineProperty(exports, "transformFromAstSync", { + enumerable: true, + get: function () { + return _transformAst.transformFromAstSync; + } +}); +Object.defineProperty(exports, "transformSync", { + enumerable: true, + get: function () { + return _transform.transformSync; + } +}); +Object.defineProperty((0, exports), "traverse", { + enumerable: true, + get: function () { + return _traverse().default; + } +}); +exports.version = exports.types = void 0; +var _file = require("./transformation/file/file.js"); +var _buildExternalHelpers = require("./tools/build-external-helpers.js"); +var resolvers = require("./config/files/index.js"); +var _environment = require("./config/helpers/environment.js"); +function _types() { + const data = require("@babel/types"); + _types = function () { + return data; + }; + return data; +} +Object.defineProperty((0, exports), "types", { + enumerable: true, + get: function () { + return _types(); + } +}); +function _parser() { + const data = require("@babel/parser"); + _parser = function () { + return data; + }; + return data; +} +function _traverse() { + const data = require("@babel/traverse"); + _traverse = function () { + return data; + }; + return data; +} +function _template() { + const data = require("@babel/template"); + _template = function () { + return data; + }; + return data; +} +var _index2 = require("./config/index.js"); +var _transform = require("./transform.js"); +var _transformFile = require("./transform-file.js"); +var _transformAst = require("./transform-ast.js"); +var _parse = require("./parse.js"); +; +const version = exports.version = "7.27.4"; +const resolvePlugin = (name, dirname) => resolvers.resolvePlugin(name, dirname, false).filepath; +exports.resolvePlugin = resolvePlugin; +const resolvePreset = (name, dirname) => resolvers.resolvePreset(name, dirname, false).filepath; +exports.resolvePreset = resolvePreset; +const DEFAULT_EXTENSIONS = exports.DEFAULT_EXTENSIONS = Object.freeze([".js", ".jsx", ".es6", ".es", ".mjs", ".cjs"]); +{ + exports.OptionManager = class OptionManager { + init(opts) { + return (0, _index2.loadOptionsSync)(opts); + } + }; + exports.Plugin = function Plugin(alias) { + throw new Error(`The (${alias}) Babel 5 plugin is being run with an unsupported Babel version.`); + }; +} +0 && (exports.types = exports.traverse = exports.tokTypes = exports.template = 0); + +//# sourceMappingURL=index.js.map diff --git a/node_modules/@babel/core/lib/index.js.map b/node_modules/@babel/core/lib/index.js.map new file mode 100644 index 00000000..98a63945 --- /dev/null +++ b/node_modules/@babel/core/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_file","require","_buildExternalHelpers","resolvers","_environment","_types","data","Object","defineProperty","exports","enumerable","get","_parser","_traverse","_template","_index2","_transform","_transformFile","_transformAst","_parse","version","resolvePlugin","name","dirname","filepath","resolvePreset","DEFAULT_EXTENSIONS","freeze","OptionManager","init","opts","loadOptionsSync","Plugin","alias","Error","types","traverse","tokTypes","template"],"sources":["../src/index.ts"],"sourcesContent":["if (!process.env.IS_PUBLISH && !USE_ESM && process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"BABEL_8_BREAKING is only supported in ESM. Please run `make use-esm`.\",\n );\n}\n\nexport const version = PACKAGE_JSON.version;\n\nexport { default as File } from \"./transformation/file/file.ts\";\nexport type { default as PluginPass } from \"./transformation/plugin-pass.ts\";\nexport { default as buildExternalHelpers } from \"./tools/build-external-helpers.ts\";\n\nimport * as resolvers from \"./config/files/index.ts\";\n// For backwards-compatibility, we expose the resolvers\n// with the old API.\nexport const resolvePlugin = (name: string, dirname: string) =>\n resolvers.resolvePlugin(name, dirname, false).filepath;\nexport const resolvePreset = (name: string, dirname: string) =>\n resolvers.resolvePreset(name, dirname, false).filepath;\n\nexport { getEnv } from \"./config/helpers/environment.ts\";\n\n// NOTE: Lazy re-exports aren't detected by the Node.js CJS-ESM interop.\n// These are handled by pluginInjectNodeReexportsHints in our babel.config.js\n// so that they can work well.\nexport * as types from \"@babel/types\";\nexport { tokTypes } from \"@babel/parser\";\nexport { default as traverse } from \"@babel/traverse\";\nexport { default as template } from \"@babel/template\";\n\n// rollup-plugin-dts assumes that all re-exported types are also valid values\n// Visitor is only a type, so we need to use this workaround to prevent\n// rollup-plugin-dts from breaking it.\n// TODO: Figure out how to fix this upstream.\nexport type { NodePath, Scope } from \"@babel/traverse\";\nexport type Visitor = import(\"@babel/traverse\").Visitor;\n\nexport {\n createConfigItem,\n createConfigItemAsync,\n createConfigItemSync,\n} from \"./config/index.ts\";\n\nexport {\n loadOptions,\n loadOptionsAsync,\n loadPartialConfig,\n loadPartialConfigAsync,\n loadPartialConfigSync,\n} from \"./config/index.ts\";\nimport { loadOptionsSync } from \"./config/index.ts\";\nexport { loadOptionsSync };\n\nexport type {\n CallerMetadata,\n ConfigItem,\n InputOptions,\n PluginAPI,\n PluginObject,\n PresetAPI,\n PresetObject,\n} from \"./config/index.ts\";\n\nexport {\n type FileResult,\n transform,\n transformAsync,\n transformSync,\n} from \"./transform.ts\";\nexport {\n transformFile,\n transformFileAsync,\n transformFileSync,\n} from \"./transform-file.ts\";\nexport {\n transformFromAst,\n transformFromAstAsync,\n transformFromAstSync,\n} from \"./transform-ast.ts\";\nexport { parse, parseAsync, parseSync } from \"./parse.ts\";\n\n/**\n * Recommended set of compilable extensions. Not used in @babel/core directly, but meant as\n * as an easy source for tooling making use of @babel/core.\n */\nexport const DEFAULT_EXTENSIONS = Object.freeze([\n \".js\",\n \".jsx\",\n \".es6\",\n \".es\",\n \".mjs\",\n \".cjs\",\n] as const);\n\nif (!process.env.BABEL_8_BREAKING && !USE_ESM) {\n // For easier backward-compatibility, provide an API like the one we exposed in Babel 6.\n // eslint-disable-next-line no-restricted-globals\n exports.OptionManager = class OptionManager {\n init(opts: any) {\n return loadOptionsSync(opts);\n }\n };\n\n // eslint-disable-next-line no-restricted-globals\n exports.Plugin = function Plugin(alias: string) {\n throw new Error(\n `The (${alias}) Babel 5 plugin is being run with an unsupported Babel version.`,\n );\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,IAAAA,KAAA,GAAAC,OAAA;AAEA,IAAAC,qBAAA,GAAAD,OAAA;AAEA,IAAAE,SAAA,GAAAF,OAAA;AAQA,IAAAG,YAAA,GAAAH,OAAA;AAAyD,SAAAI,OAAA;EAAA,MAAAC,IAAA,GAAAL,OAAA;EAAAI,MAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAAC,MAAA,CAAAC,cAAA,KAAAC,OAAA;EAAAC,UAAA;EAAAC,GAAA,WAAAA,CAAA;IAAA,OAAAN,MAAA;EAAA;AAAA;AAMzD,SAAAO,QAAA;EAAA,MAAAN,IAAA,GAAAL,OAAA;EAAAW,OAAA,YAAAA,CAAA;IAAA,OAAAN,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAO,UAAA;EAAA,MAAAP,IAAA,GAAAL,OAAA;EAAAY,SAAA,YAAAA,CAAA;IAAA,OAAAP,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAQ,UAAA;EAAA,MAAAR,IAAA,GAAAL,OAAA;EAAAa,SAAA,YAAAA,CAAA;IAAA,OAAAR,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AASA,IAAAS,OAAA,GAAAd,OAAA;AA0BA,IAAAe,UAAA,GAAAf,OAAA;AAMA,IAAAgB,cAAA,GAAAhB,OAAA;AAKA,IAAAiB,aAAA,GAAAjB,OAAA;AAKA,IAAAkB,MAAA,GAAAlB,OAAA;AAA0D;AAzEnD,MAAMmB,OAAO,GAAAX,OAAA,CAAAW,OAAA,WAAuB;AASpC,MAAMC,aAAa,GAAGA,CAACC,IAAY,EAAEC,OAAe,KACzDpB,SAAS,CAACkB,aAAa,CAACC,IAAI,EAAEC,OAAO,EAAE,KAAK,CAAC,CAACC,QAAQ;AAACf,OAAA,CAAAY,aAAA,GAAAA,aAAA;AAClD,MAAMI,aAAa,GAAGA,CAACH,IAAY,EAAEC,OAAe,KACzDpB,SAAS,CAACsB,aAAa,CAACH,IAAI,EAAEC,OAAO,EAAE,KAAK,CAAC,CAACC,QAAQ;AAACf,OAAA,CAAAgB,aAAA,GAAAA,aAAA;AAmElD,MAAMC,kBAAkB,GAAAjB,OAAA,CAAAiB,kBAAA,GAAGnB,MAAM,CAACoB,MAAM,CAAC,CAC9C,KAAK,EACL,MAAM,EACN,MAAM,EACN,KAAK,EACL,MAAM,EACN,MAAM,CACE,CAAC;AAEoC;EAG7ClB,OAAO,CAACmB,aAAa,GAAG,MAAMA,aAAa,CAAC;IAC1CC,IAAIA,CAACC,IAAS,EAAE;MACd,OAAO,IAAAC,uBAAe,EAACD,IAAI,CAAC;IAC9B;EACF,CAAC;EAGDrB,OAAO,CAACuB,MAAM,GAAG,SAASA,MAAMA,CAACC,KAAa,EAAE;IAC9C,MAAM,IAAIC,KAAK,CACb,QAAQD,KAAK,kEACf,CAAC;EACH,CAAC;AACH;AAAC,MAAAxB,OAAA,CAAA0B,KAAA,GAAA1B,OAAA,CAAA2B,QAAA,GAAA3B,OAAA,CAAA4B,QAAA,GAAA5B,OAAA,CAAA6B,QAAA","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/parse.js b/node_modules/@babel/core/lib/parse.js new file mode 100644 index 00000000..7e411424 --- /dev/null +++ b/node_modules/@babel/core/lib/parse.js @@ -0,0 +1,47 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.parse = void 0; +exports.parseAsync = parseAsync; +exports.parseSync = parseSync; +function _gensync() { + const data = require("gensync"); + _gensync = function () { + return data; + }; + return data; +} +var _index = require("./config/index.js"); +var _index2 = require("./parser/index.js"); +var _normalizeOpts = require("./transformation/normalize-opts.js"); +var _rewriteStackTrace = require("./errors/rewrite-stack-trace.js"); +const parseRunner = _gensync()(function* parse(code, opts) { + const config = yield* (0, _index.default)(opts); + if (config === null) { + return null; + } + return yield* (0, _index2.default)(config.passes, (0, _normalizeOpts.default)(config), code); +}); +const parse = exports.parse = function parse(code, opts, callback) { + if (typeof opts === "function") { + callback = opts; + opts = undefined; + } + if (callback === undefined) { + { + return (0, _rewriteStackTrace.beginHiddenCallStack)(parseRunner.sync)(code, opts); + } + } + (0, _rewriteStackTrace.beginHiddenCallStack)(parseRunner.errback)(code, opts, callback); +}; +function parseSync(...args) { + return (0, _rewriteStackTrace.beginHiddenCallStack)(parseRunner.sync)(...args); +} +function parseAsync(...args) { + return (0, _rewriteStackTrace.beginHiddenCallStack)(parseRunner.async)(...args); +} +0 && 0; + +//# sourceMappingURL=parse.js.map diff --git a/node_modules/@babel/core/lib/parse.js.map b/node_modules/@babel/core/lib/parse.js.map new file mode 100644 index 00000000..676788cd --- /dev/null +++ b/node_modules/@babel/core/lib/parse.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_gensync","data","require","_index","_index2","_normalizeOpts","_rewriteStackTrace","parseRunner","gensync","parse","code","opts","config","loadConfig","parser","passes","normalizeOptions","exports","callback","undefined","beginHiddenCallStack","sync","errback","parseSync","args","parseAsync","async"],"sources":["../src/parse.ts"],"sourcesContent":["import gensync, { type Handler } from \"gensync\";\n\nimport loadConfig, { type InputOptions } from \"./config/index.ts\";\nimport parser, { type ParseResult } from \"./parser/index.ts\";\nimport normalizeOptions from \"./transformation/normalize-opts.ts\";\nimport type { ValidatedOptions } from \"./config/validation/options.ts\";\n\nimport { beginHiddenCallStack } from \"./errors/rewrite-stack-trace.ts\";\n\ntype FileParseCallback = {\n (err: Error, ast: null): void;\n (err: null, ast: ParseResult | null): void;\n};\n\ntype Parse = {\n (code: string, callback: FileParseCallback): void;\n (\n code: string,\n opts: InputOptions | undefined | null,\n callback: FileParseCallback,\n ): void;\n (code: string, opts?: InputOptions | null): ParseResult | null;\n};\n\nconst parseRunner = gensync(function* parse(\n code: string,\n opts: InputOptions | undefined | null,\n): Handler {\n const config = yield* loadConfig(opts);\n\n if (config === null) {\n return null;\n }\n\n return yield* parser(config.passes, normalizeOptions(config), code);\n});\n\nexport const parse: Parse = function parse(\n code,\n opts?,\n callback?: FileParseCallback,\n) {\n if (typeof opts === \"function\") {\n callback = opts;\n opts = undefined as ValidatedOptions;\n }\n\n if (callback === undefined) {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"Starting from Babel 8.0.0, the 'parse' function expects a callback. If you need to call it synchronously, please use 'parseSync'.\",\n );\n } else {\n // console.warn(\n // \"Starting from Babel 8.0.0, the 'parse' function will expect a callback. If you need to call it synchronously, please use 'parseSync'.\",\n // );\n return beginHiddenCallStack(parseRunner.sync)(code, opts);\n }\n }\n\n beginHiddenCallStack(parseRunner.errback)(code, opts, callback);\n};\n\nexport function parseSync(...args: Parameters) {\n return beginHiddenCallStack(parseRunner.sync)(...args);\n}\nexport function parseAsync(...args: Parameters) {\n return beginHiddenCallStack(parseRunner.async)(...args);\n}\n"],"mappings":";;;;;;;;AAAA,SAAAA,SAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,QAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,IAAAE,MAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AAGA,IAAAI,kBAAA,GAAAJ,OAAA;AAiBA,MAAMK,WAAW,GAAGC,SAAMA,CAAC,CAAC,UAAUC,KAAKA,CACzCC,IAAY,EACZC,IAAqC,EACR;EAC7B,MAAMC,MAAM,GAAG,OAAO,IAAAC,cAAU,EAACF,IAAI,CAAC;EAEtC,IAAIC,MAAM,KAAK,IAAI,EAAE;IACnB,OAAO,IAAI;EACb;EAEA,OAAO,OAAO,IAAAE,eAAM,EAACF,MAAM,CAACG,MAAM,EAAE,IAAAC,sBAAgB,EAACJ,MAAM,CAAC,EAAEF,IAAI,CAAC;AACrE,CAAC,CAAC;AAEK,MAAMD,KAAY,GAAAQ,OAAA,CAAAR,KAAA,GAAG,SAASA,KAAKA,CACxCC,IAAI,EACJC,IAAK,EACLO,QAA4B,EAC5B;EACA,IAAI,OAAOP,IAAI,KAAK,UAAU,EAAE;IAC9BO,QAAQ,GAAGP,IAAI;IACfA,IAAI,GAAGQ,SAA6B;EACtC;EAEA,IAAID,QAAQ,KAAKC,SAAS,EAAE;IAKnB;MAIL,OAAO,IAAAC,uCAAoB,EAACb,WAAW,CAACc,IAAI,CAAC,CAACX,IAAI,EAAEC,IAAI,CAAC;IAC3D;EACF;EAEA,IAAAS,uCAAoB,EAACb,WAAW,CAACe,OAAO,CAAC,CAACZ,IAAI,EAAEC,IAAI,EAAEO,QAAQ,CAAC;AACjE,CAAC;AAEM,SAASK,SAASA,CAAC,GAAGC,IAAyC,EAAE;EACtE,OAAO,IAAAJ,uCAAoB,EAACb,WAAW,CAACc,IAAI,CAAC,CAAC,GAAGG,IAAI,CAAC;AACxD;AACO,SAASC,UAAUA,CAAC,GAAGD,IAA0C,EAAE;EACxE,OAAO,IAAAJ,uCAAoB,EAACb,WAAW,CAACmB,KAAK,CAAC,CAAC,GAAGF,IAAI,CAAC;AACzD;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/parser/index.js b/node_modules/@babel/core/lib/parser/index.js new file mode 100644 index 00000000..d198bb21 --- /dev/null +++ b/node_modules/@babel/core/lib/parser/index.js @@ -0,0 +1,79 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = parser; +function _parser() { + const data = require("@babel/parser"); + _parser = function () { + return data; + }; + return data; +} +function _codeFrame() { + const data = require("@babel/code-frame"); + _codeFrame = function () { + return data; + }; + return data; +} +var _missingPluginHelper = require("./util/missing-plugin-helper.js"); +function* parser(pluginPasses, { + parserOpts, + highlightCode = true, + filename = "unknown" +}, code) { + try { + const results = []; + for (const plugins of pluginPasses) { + for (const plugin of plugins) { + const { + parserOverride + } = plugin; + if (parserOverride) { + const ast = parserOverride(code, parserOpts, _parser().parse); + if (ast !== undefined) results.push(ast); + } + } + } + if (results.length === 0) { + return (0, _parser().parse)(code, parserOpts); + } else if (results.length === 1) { + yield* []; + if (typeof results[0].then === "function") { + throw new Error(`You appear to be using an async parser plugin, ` + `which your current version of Babel does not support. ` + `If you're using a published plugin, you may need to upgrade ` + `your @babel/core version.`); + } + return results[0]; + } + throw new Error("More than one plugin attempted to override parsing."); + } catch (err) { + if (err.code === "BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED") { + err.message += "\nConsider renaming the file to '.mjs', or setting sourceType:module " + "or sourceType:unambiguous in your Babel config for this file."; + } + const { + loc, + missingPlugin + } = err; + if (loc) { + const codeFrame = (0, _codeFrame().codeFrameColumns)(code, { + start: { + line: loc.line, + column: loc.column + 1 + } + }, { + highlightCode + }); + if (missingPlugin) { + err.message = `${filename}: ` + (0, _missingPluginHelper.default)(missingPlugin[0], loc, codeFrame, filename); + } else { + err.message = `${filename}: ${err.message}\n\n` + codeFrame; + } + err.code = "BABEL_PARSE_ERROR"; + } + throw err; + } +} +0 && 0; + +//# sourceMappingURL=index.js.map diff --git a/node_modules/@babel/core/lib/parser/index.js.map b/node_modules/@babel/core/lib/parser/index.js.map new file mode 100644 index 00000000..4dcd1cf3 --- /dev/null +++ b/node_modules/@babel/core/lib/parser/index.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_parser","data","require","_codeFrame","_missingPluginHelper","parser","pluginPasses","parserOpts","highlightCode","filename","code","results","plugins","plugin","parserOverride","ast","parse","undefined","push","length","then","Error","err","message","loc","missingPlugin","codeFrame","codeFrameColumns","start","line","column","generateMissingPluginMessage"],"sources":["../../src/parser/index.ts"],"sourcesContent":["import type { Handler } from \"gensync\";\nimport { parse, type ParseResult } from \"@babel/parser\";\nimport { codeFrameColumns } from \"@babel/code-frame\";\nimport generateMissingPluginMessage from \"./util/missing-plugin-helper.ts\";\nimport type { PluginPasses } from \"../config/index.ts\";\n\nexport type { ParseResult };\n\nexport default function* parser(\n pluginPasses: PluginPasses,\n { parserOpts, highlightCode = true, filename = \"unknown\" }: any,\n code: string,\n): Handler {\n try {\n const results = [];\n for (const plugins of pluginPasses) {\n for (const plugin of plugins) {\n const { parserOverride } = plugin;\n if (parserOverride) {\n const ast = parserOverride(code, parserOpts, parse);\n\n if (ast !== undefined) results.push(ast);\n }\n }\n }\n\n if (results.length === 0) {\n return parse(code, parserOpts);\n } else if (results.length === 1) {\n // If we want to allow async parsers\n yield* [];\n if (typeof (results[0] as any).then === \"function\") {\n throw new Error(\n `You appear to be using an async parser plugin, ` +\n `which your current version of Babel does not support. ` +\n `If you're using a published plugin, you may need to upgrade ` +\n `your @babel/core version.`,\n );\n }\n return results[0];\n }\n // TODO: Add an error code\n throw new Error(\"More than one plugin attempted to override parsing.\");\n } catch (err) {\n if (err.code === \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\") {\n err.message +=\n \"\\nConsider renaming the file to '.mjs', or setting sourceType:module \" +\n \"or sourceType:unambiguous in your Babel config for this file.\";\n // err.code will be changed to BABEL_PARSE_ERROR later.\n }\n\n const { loc, missingPlugin } = err;\n if (loc) {\n const codeFrame = codeFrameColumns(\n code,\n {\n start: {\n line: loc.line,\n column: loc.column + 1,\n },\n },\n {\n highlightCode,\n },\n );\n if (missingPlugin) {\n err.message =\n `${filename}: ` +\n generateMissingPluginMessage(\n missingPlugin[0],\n loc,\n codeFrame,\n filename,\n );\n } else {\n err.message = `${filename}: ${err.message}\\n\\n` + codeFrame;\n }\n err.code = \"BABEL_PARSE_ERROR\";\n }\n throw err;\n }\n}\n"],"mappings":";;;;;;AACA,SAAAA,QAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,OAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,WAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,UAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,IAAAG,oBAAA,GAAAF,OAAA;AAKe,UAAUG,MAAMA,CAC7BC,YAA0B,EAC1B;EAAEC,UAAU;EAAEC,aAAa,GAAG,IAAI;EAAEC,QAAQ,GAAG;AAAe,CAAC,EAC/DC,IAAY,EACU;EACtB,IAAI;IACF,MAAMC,OAAO,GAAG,EAAE;IAClB,KAAK,MAAMC,OAAO,IAAIN,YAAY,EAAE;MAClC,KAAK,MAAMO,MAAM,IAAID,OAAO,EAAE;QAC5B,MAAM;UAAEE;QAAe,CAAC,GAAGD,MAAM;QACjC,IAAIC,cAAc,EAAE;UAClB,MAAMC,GAAG,GAAGD,cAAc,CAACJ,IAAI,EAAEH,UAAU,EAAES,eAAK,CAAC;UAEnD,IAAID,GAAG,KAAKE,SAAS,EAAEN,OAAO,CAACO,IAAI,CAACH,GAAG,CAAC;QAC1C;MACF;IACF;IAEA,IAAIJ,OAAO,CAACQ,MAAM,KAAK,CAAC,EAAE;MACxB,OAAO,IAAAH,eAAK,EAACN,IAAI,EAAEH,UAAU,CAAC;IAChC,CAAC,MAAM,IAAII,OAAO,CAACQ,MAAM,KAAK,CAAC,EAAE;MAE/B,OAAO,EAAE;MACT,IAAI,OAAQR,OAAO,CAAC,CAAC,CAAC,CAASS,IAAI,KAAK,UAAU,EAAE;QAClD,MAAM,IAAIC,KAAK,CACb,iDAAiD,GAC/C,wDAAwD,GACxD,8DAA8D,GAC9D,2BACJ,CAAC;MACH;MACA,OAAOV,OAAO,CAAC,CAAC,CAAC;IACnB;IAEA,MAAM,IAAIU,KAAK,CAAC,qDAAqD,CAAC;EACxE,CAAC,CAAC,OAAOC,GAAG,EAAE;IACZ,IAAIA,GAAG,CAACZ,IAAI,KAAK,yCAAyC,EAAE;MAC1DY,GAAG,CAACC,OAAO,IACT,uEAAuE,GACvE,+DAA+D;IAEnE;IAEA,MAAM;MAAEC,GAAG;MAAEC;IAAc,CAAC,GAAGH,GAAG;IAClC,IAAIE,GAAG,EAAE;MACP,MAAME,SAAS,GAAG,IAAAC,6BAAgB,EAChCjB,IAAI,EACJ;QACEkB,KAAK,EAAE;UACLC,IAAI,EAAEL,GAAG,CAACK,IAAI;UACdC,MAAM,EAAEN,GAAG,CAACM,MAAM,GAAG;QACvB;MACF,CAAC,EACD;QACEtB;MACF,CACF,CAAC;MACD,IAAIiB,aAAa,EAAE;QACjBH,GAAG,CAACC,OAAO,GACT,GAAGd,QAAQ,IAAI,GACf,IAAAsB,4BAA4B,EAC1BN,aAAa,CAAC,CAAC,CAAC,EAChBD,GAAG,EACHE,SAAS,EACTjB,QACF,CAAC;MACL,CAAC,MAAM;QACLa,GAAG,CAACC,OAAO,GAAG,GAAGd,QAAQ,KAAKa,GAAG,CAACC,OAAO,MAAM,GAAGG,SAAS;MAC7D;MACAJ,GAAG,CAACZ,IAAI,GAAG,mBAAmB;IAChC;IACA,MAAMY,GAAG;EACX;AACF;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/parser/util/missing-plugin-helper.js b/node_modules/@babel/core/lib/parser/util/missing-plugin-helper.js new file mode 100644 index 00000000..5e05a265 --- /dev/null +++ b/node_modules/@babel/core/lib/parser/util/missing-plugin-helper.js @@ -0,0 +1,339 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = generateMissingPluginMessage; +const pluginNameMap = { + asyncDoExpressions: { + syntax: { + name: "@babel/plugin-syntax-async-do-expressions", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-async-do-expressions" + } + }, + decimal: { + syntax: { + name: "@babel/plugin-syntax-decimal", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-decimal" + } + }, + decorators: { + syntax: { + name: "@babel/plugin-syntax-decorators", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-decorators" + }, + transform: { + name: "@babel/plugin-proposal-decorators", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-decorators" + } + }, + doExpressions: { + syntax: { + name: "@babel/plugin-syntax-do-expressions", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-do-expressions" + }, + transform: { + name: "@babel/plugin-proposal-do-expressions", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-do-expressions" + } + }, + exportDefaultFrom: { + syntax: { + name: "@babel/plugin-syntax-export-default-from", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-export-default-from" + }, + transform: { + name: "@babel/plugin-proposal-export-default-from", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-export-default-from" + } + }, + flow: { + syntax: { + name: "@babel/plugin-syntax-flow", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-flow" + }, + transform: { + name: "@babel/preset-flow", + url: "https://github.com/babel/babel/tree/main/packages/babel-preset-flow" + } + }, + functionBind: { + syntax: { + name: "@babel/plugin-syntax-function-bind", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-function-bind" + }, + transform: { + name: "@babel/plugin-proposal-function-bind", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-function-bind" + } + }, + functionSent: { + syntax: { + name: "@babel/plugin-syntax-function-sent", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-function-sent" + }, + transform: { + name: "@babel/plugin-proposal-function-sent", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-function-sent" + } + }, + jsx: { + syntax: { + name: "@babel/plugin-syntax-jsx", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-jsx" + }, + transform: { + name: "@babel/preset-react", + url: "https://github.com/babel/babel/tree/main/packages/babel-preset-react" + } + }, + pipelineOperator: { + syntax: { + name: "@babel/plugin-syntax-pipeline-operator", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-pipeline-operator" + }, + transform: { + name: "@babel/plugin-proposal-pipeline-operator", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-pipeline-operator" + } + }, + recordAndTuple: { + syntax: { + name: "@babel/plugin-syntax-record-and-tuple", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-record-and-tuple" + } + }, + throwExpressions: { + syntax: { + name: "@babel/plugin-syntax-throw-expressions", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-throw-expressions" + }, + transform: { + name: "@babel/plugin-proposal-throw-expressions", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-throw-expressions" + } + }, + typescript: { + syntax: { + name: "@babel/plugin-syntax-typescript", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-typescript" + }, + transform: { + name: "@babel/preset-typescript", + url: "https://github.com/babel/babel/tree/main/packages/babel-preset-typescript" + } + } +}; +{ + Object.assign(pluginNameMap, { + asyncGenerators: { + syntax: { + name: "@babel/plugin-syntax-async-generators", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-async-generators" + }, + transform: { + name: "@babel/plugin-transform-async-generator-functions", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-async-generator-functions" + } + }, + classProperties: { + syntax: { + name: "@babel/plugin-syntax-class-properties", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties" + }, + transform: { + name: "@babel/plugin-transform-class-properties", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-class-properties" + } + }, + classPrivateProperties: { + syntax: { + name: "@babel/plugin-syntax-class-properties", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties" + }, + transform: { + name: "@babel/plugin-transform-class-properties", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-class-properties" + } + }, + classPrivateMethods: { + syntax: { + name: "@babel/plugin-syntax-class-properties", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties" + }, + transform: { + name: "@babel/plugin-transform-private-methods", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-private-methods" + } + }, + classStaticBlock: { + syntax: { + name: "@babel/plugin-syntax-class-static-block", + url: "https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-syntax-class-static-block" + }, + transform: { + name: "@babel/plugin-transform-class-static-block", + url: "https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-class-static-block" + } + }, + dynamicImport: { + syntax: { + name: "@babel/plugin-syntax-dynamic-import", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-dynamic-import" + } + }, + exportNamespaceFrom: { + syntax: { + name: "@babel/plugin-syntax-export-namespace-from", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-export-namespace-from" + }, + transform: { + name: "@babel/plugin-transform-export-namespace-from", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-export-namespace-from" + } + }, + importAssertions: { + syntax: { + name: "@babel/plugin-syntax-import-assertions", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-import-assertions" + } + }, + importAttributes: { + syntax: { + name: "@babel/plugin-syntax-import-attributes", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-import-attributes" + } + }, + importMeta: { + syntax: { + name: "@babel/plugin-syntax-import-meta", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-import-meta" + } + }, + logicalAssignment: { + syntax: { + name: "@babel/plugin-syntax-logical-assignment-operators", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-logical-assignment-operators" + }, + transform: { + name: "@babel/plugin-transform-logical-assignment-operators", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-logical-assignment-operators" + } + }, + moduleStringNames: { + syntax: { + name: "@babel/plugin-syntax-module-string-names", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-module-string-names" + } + }, + numericSeparator: { + syntax: { + name: "@babel/plugin-syntax-numeric-separator", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-numeric-separator" + }, + transform: { + name: "@babel/plugin-transform-numeric-separator", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-numeric-separator" + } + }, + nullishCoalescingOperator: { + syntax: { + name: "@babel/plugin-syntax-nullish-coalescing-operator", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-nullish-coalescing-operator" + }, + transform: { + name: "@babel/plugin-transform-nullish-coalescing-operator", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-nullish-coalescing-opearator" + } + }, + objectRestSpread: { + syntax: { + name: "@babel/plugin-syntax-object-rest-spread", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-object-rest-spread" + }, + transform: { + name: "@babel/plugin-transform-object-rest-spread", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-object-rest-spread" + } + }, + optionalCatchBinding: { + syntax: { + name: "@babel/plugin-syntax-optional-catch-binding", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-optional-catch-binding" + }, + transform: { + name: "@babel/plugin-transform-optional-catch-binding", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-optional-catch-binding" + } + }, + optionalChaining: { + syntax: { + name: "@babel/plugin-syntax-optional-chaining", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-optional-chaining" + }, + transform: { + name: "@babel/plugin-transform-optional-chaining", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-optional-chaining" + } + }, + privateIn: { + syntax: { + name: "@babel/plugin-syntax-private-property-in-object", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-private-property-in-object" + }, + transform: { + name: "@babel/plugin-transform-private-property-in-object", + url: "https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-private-property-in-object" + } + }, + regexpUnicodeSets: { + syntax: { + name: "@babel/plugin-syntax-unicode-sets-regex", + url: "https://github.com/babel/babel/blob/main/packages/babel-plugin-syntax-unicode-sets-regex/README.md" + }, + transform: { + name: "@babel/plugin-transform-unicode-sets-regex", + url: "https://github.com/babel/babel/blob/main/packages/babel-plugin-proposalunicode-sets-regex/README.md" + } + } + }); +} +const getNameURLCombination = ({ + name, + url +}) => `${name} (${url})`; +function generateMissingPluginMessage(missingPluginName, loc, codeFrame, filename) { + let helpMessage = `Support for the experimental syntax '${missingPluginName}' isn't currently enabled ` + `(${loc.line}:${loc.column + 1}):\n\n` + codeFrame; + const pluginInfo = pluginNameMap[missingPluginName]; + if (pluginInfo) { + const { + syntax: syntaxPlugin, + transform: transformPlugin + } = pluginInfo; + if (syntaxPlugin) { + const syntaxPluginInfo = getNameURLCombination(syntaxPlugin); + if (transformPlugin) { + const transformPluginInfo = getNameURLCombination(transformPlugin); + const sectionType = transformPlugin.name.startsWith("@babel/plugin") ? "plugins" : "presets"; + helpMessage += `\n\nAdd ${transformPluginInfo} to the '${sectionType}' section of your Babel config to enable transformation. +If you want to leave it as-is, add ${syntaxPluginInfo} to the 'plugins' section to enable parsing.`; + } else { + helpMessage += `\n\nAdd ${syntaxPluginInfo} to the 'plugins' section of your Babel config ` + `to enable parsing.`; + } + } + } + const msgFilename = filename === "unknown" ? "" : filename; + helpMessage += ` + +If you already added the plugin for this syntax to your config, it's possible that your config \ +isn't being loaded. +You can re-run Babel with the BABEL_SHOW_CONFIG_FOR environment variable to show the loaded \ +configuration: +\tnpx cross-env BABEL_SHOW_CONFIG_FOR=${msgFilename} +See https://babeljs.io/docs/configuration#print-effective-configs for more info. +`; + return helpMessage; +} +0 && 0; + +//# sourceMappingURL=missing-plugin-helper.js.map diff --git a/node_modules/@babel/core/lib/parser/util/missing-plugin-helper.js.map b/node_modules/@babel/core/lib/parser/util/missing-plugin-helper.js.map new file mode 100644 index 00000000..c6dfa8f9 --- /dev/null +++ b/node_modules/@babel/core/lib/parser/util/missing-plugin-helper.js.map @@ -0,0 +1 @@ +{"version":3,"names":["pluginNameMap","asyncDoExpressions","syntax","name","url","decimal","decorators","transform","doExpressions","exportDefaultFrom","flow","functionBind","functionSent","jsx","pipelineOperator","recordAndTuple","throwExpressions","typescript","Object","assign","asyncGenerators","classProperties","classPrivateProperties","classPrivateMethods","classStaticBlock","dynamicImport","exportNamespaceFrom","importAssertions","importAttributes","importMeta","logicalAssignment","moduleStringNames","numericSeparator","nullishCoalescingOperator","objectRestSpread","optionalCatchBinding","optionalChaining","privateIn","regexpUnicodeSets","getNameURLCombination","generateMissingPluginMessage","missingPluginName","loc","codeFrame","filename","helpMessage","line","column","pluginInfo","syntaxPlugin","transformPlugin","syntaxPluginInfo","transformPluginInfo","sectionType","startsWith","msgFilename"],"sources":["../../../src/parser/util/missing-plugin-helper.ts"],"sourcesContent":["const pluginNameMap: Record<\n string,\n Partial>>\n> = {\n asyncDoExpressions: {\n syntax: {\n name: \"@babel/plugin-syntax-async-do-expressions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-async-do-expressions\",\n },\n },\n decimal: {\n syntax: {\n name: \"@babel/plugin-syntax-decimal\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-decimal\",\n },\n },\n decorators: {\n syntax: {\n name: \"@babel/plugin-syntax-decorators\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-decorators\",\n },\n transform: {\n name: \"@babel/plugin-proposal-decorators\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-decorators\",\n },\n },\n doExpressions: {\n syntax: {\n name: \"@babel/plugin-syntax-do-expressions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-do-expressions\",\n },\n transform: {\n name: \"@babel/plugin-proposal-do-expressions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-do-expressions\",\n },\n },\n exportDefaultFrom: {\n syntax: {\n name: \"@babel/plugin-syntax-export-default-from\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-export-default-from\",\n },\n transform: {\n name: \"@babel/plugin-proposal-export-default-from\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-export-default-from\",\n },\n },\n flow: {\n syntax: {\n name: \"@babel/plugin-syntax-flow\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-flow\",\n },\n transform: {\n name: \"@babel/preset-flow\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-preset-flow\",\n },\n },\n functionBind: {\n syntax: {\n name: \"@babel/plugin-syntax-function-bind\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-function-bind\",\n },\n transform: {\n name: \"@babel/plugin-proposal-function-bind\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-function-bind\",\n },\n },\n functionSent: {\n syntax: {\n name: \"@babel/plugin-syntax-function-sent\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-function-sent\",\n },\n transform: {\n name: \"@babel/plugin-proposal-function-sent\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-function-sent\",\n },\n },\n jsx: {\n syntax: {\n name: \"@babel/plugin-syntax-jsx\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-jsx\",\n },\n transform: {\n name: \"@babel/preset-react\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-preset-react\",\n },\n },\n pipelineOperator: {\n syntax: {\n name: \"@babel/plugin-syntax-pipeline-operator\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-pipeline-operator\",\n },\n transform: {\n name: \"@babel/plugin-proposal-pipeline-operator\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-pipeline-operator\",\n },\n },\n recordAndTuple: {\n syntax: {\n name: \"@babel/plugin-syntax-record-and-tuple\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-record-and-tuple\",\n },\n },\n throwExpressions: {\n syntax: {\n name: \"@babel/plugin-syntax-throw-expressions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-throw-expressions\",\n },\n transform: {\n name: \"@babel/plugin-proposal-throw-expressions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-proposal-throw-expressions\",\n },\n },\n typescript: {\n syntax: {\n name: \"@babel/plugin-syntax-typescript\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-typescript\",\n },\n transform: {\n name: \"@babel/preset-typescript\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-preset-typescript\",\n },\n },\n};\n\nif (!process.env.BABEL_8_BREAKING) {\n // TODO: This plugins are now supported by default by @babel/parser.\n Object.assign(pluginNameMap, {\n asyncGenerators: {\n syntax: {\n name: \"@babel/plugin-syntax-async-generators\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-async-generators\",\n },\n transform: {\n name: \"@babel/plugin-transform-async-generator-functions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-async-generator-functions\",\n },\n },\n classProperties: {\n syntax: {\n name: \"@babel/plugin-syntax-class-properties\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties\",\n },\n transform: {\n name: \"@babel/plugin-transform-class-properties\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-class-properties\",\n },\n },\n classPrivateProperties: {\n syntax: {\n name: \"@babel/plugin-syntax-class-properties\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties\",\n },\n transform: {\n name: \"@babel/plugin-transform-class-properties\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-class-properties\",\n },\n },\n classPrivateMethods: {\n syntax: {\n name: \"@babel/plugin-syntax-class-properties\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-class-properties\",\n },\n transform: {\n name: \"@babel/plugin-transform-private-methods\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-private-methods\",\n },\n },\n classStaticBlock: {\n syntax: {\n name: \"@babel/plugin-syntax-class-static-block\",\n url: \"https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-syntax-class-static-block\",\n },\n transform: {\n name: \"@babel/plugin-transform-class-static-block\",\n url: \"https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-class-static-block\",\n },\n },\n dynamicImport: {\n syntax: {\n name: \"@babel/plugin-syntax-dynamic-import\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-dynamic-import\",\n },\n },\n exportNamespaceFrom: {\n syntax: {\n name: \"@babel/plugin-syntax-export-namespace-from\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-export-namespace-from\",\n },\n transform: {\n name: \"@babel/plugin-transform-export-namespace-from\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-export-namespace-from\",\n },\n },\n // Will be removed\n importAssertions: {\n syntax: {\n name: \"@babel/plugin-syntax-import-assertions\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-import-assertions\",\n },\n },\n importAttributes: {\n syntax: {\n name: \"@babel/plugin-syntax-import-attributes\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-import-attributes\",\n },\n },\n importMeta: {\n syntax: {\n name: \"@babel/plugin-syntax-import-meta\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-import-meta\",\n },\n },\n logicalAssignment: {\n syntax: {\n name: \"@babel/plugin-syntax-logical-assignment-operators\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-logical-assignment-operators\",\n },\n transform: {\n name: \"@babel/plugin-transform-logical-assignment-operators\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-logical-assignment-operators\",\n },\n },\n moduleStringNames: {\n syntax: {\n name: \"@babel/plugin-syntax-module-string-names\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-module-string-names\",\n },\n },\n numericSeparator: {\n syntax: {\n name: \"@babel/plugin-syntax-numeric-separator\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-numeric-separator\",\n },\n transform: {\n name: \"@babel/plugin-transform-numeric-separator\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-numeric-separator\",\n },\n },\n nullishCoalescingOperator: {\n syntax: {\n name: \"@babel/plugin-syntax-nullish-coalescing-operator\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-nullish-coalescing-operator\",\n },\n transform: {\n name: \"@babel/plugin-transform-nullish-coalescing-operator\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-nullish-coalescing-opearator\",\n },\n },\n objectRestSpread: {\n syntax: {\n name: \"@babel/plugin-syntax-object-rest-spread\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-object-rest-spread\",\n },\n transform: {\n name: \"@babel/plugin-transform-object-rest-spread\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-object-rest-spread\",\n },\n },\n optionalCatchBinding: {\n syntax: {\n name: \"@babel/plugin-syntax-optional-catch-binding\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-optional-catch-binding\",\n },\n transform: {\n name: \"@babel/plugin-transform-optional-catch-binding\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-optional-catch-binding\",\n },\n },\n optionalChaining: {\n syntax: {\n name: \"@babel/plugin-syntax-optional-chaining\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-optional-chaining\",\n },\n transform: {\n name: \"@babel/plugin-transform-optional-chaining\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-optional-chaining\",\n },\n },\n privateIn: {\n syntax: {\n name: \"@babel/plugin-syntax-private-property-in-object\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-private-property-in-object\",\n },\n transform: {\n name: \"@babel/plugin-transform-private-property-in-object\",\n url: \"https://github.com/babel/babel/tree/main/packages/babel-plugin-transform-private-property-in-object\",\n },\n },\n regexpUnicodeSets: {\n syntax: {\n name: \"@babel/plugin-syntax-unicode-sets-regex\",\n url: \"https://github.com/babel/babel/blob/main/packages/babel-plugin-syntax-unicode-sets-regex/README.md\",\n },\n transform: {\n name: \"@babel/plugin-transform-unicode-sets-regex\",\n url: \"https://github.com/babel/babel/blob/main/packages/babel-plugin-proposalunicode-sets-regex/README.md\",\n },\n },\n });\n}\n\nconst getNameURLCombination = ({ name, url }: { name: string; url: string }) =>\n `${name} (${url})`;\n\n/*\nReturns a string of the format:\nSupport for the experimental syntax [@babel/parser plugin name] isn't currently enabled ([loc]):\n\n[code frame]\n\nAdd [npm package name] ([url]) to the 'plugins' section of your Babel config\nto enable [parsing|transformation].\n*/\nexport default function generateMissingPluginMessage(\n missingPluginName: string,\n loc: {\n line: number;\n column: number;\n },\n codeFrame: string,\n filename: string,\n): string {\n let helpMessage =\n `Support for the experimental syntax '${missingPluginName}' isn't currently enabled ` +\n `(${loc.line}:${loc.column + 1}):\\n\\n` +\n codeFrame;\n const pluginInfo = pluginNameMap[missingPluginName];\n if (pluginInfo) {\n const { syntax: syntaxPlugin, transform: transformPlugin } = pluginInfo;\n if (syntaxPlugin) {\n const syntaxPluginInfo = getNameURLCombination(syntaxPlugin);\n if (transformPlugin) {\n const transformPluginInfo = getNameURLCombination(transformPlugin);\n const sectionType = transformPlugin.name.startsWith(\"@babel/plugin\")\n ? \"plugins\"\n : \"presets\";\n helpMessage += `\\n\\nAdd ${transformPluginInfo} to the '${sectionType}' section of your Babel config to enable transformation.\nIf you want to leave it as-is, add ${syntaxPluginInfo} to the 'plugins' section to enable parsing.`;\n } else {\n helpMessage +=\n `\\n\\nAdd ${syntaxPluginInfo} to the 'plugins' section of your Babel config ` +\n `to enable parsing.`;\n }\n }\n }\n\n const msgFilename =\n filename === \"unknown\" ? \"\" : filename;\n helpMessage += `\n\nIf you already added the plugin for this syntax to your config, it's possible that your config \\\nisn't being loaded.\nYou can re-run Babel with the BABEL_SHOW_CONFIG_FOR environment variable to show the loaded \\\nconfiguration:\n\\tnpx cross-env BABEL_SHOW_CONFIG_FOR=${msgFilename} \nSee https://babeljs.io/docs/configuration#print-effective-configs for more info.\n`;\n return helpMessage;\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/tools/build-external-helpers.js b/node_modules/@babel/core/lib/tools/build-external-helpers.js new file mode 100644 index 00000000..88c90dcc --- /dev/null +++ b/node_modules/@babel/core/lib/tools/build-external-helpers.js @@ -0,0 +1,144 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _default; +function helpers() { + const data = require("@babel/helpers"); + helpers = function () { + return data; + }; + return data; +} +function _generator() { + const data = require("@babel/generator"); + _generator = function () { + return data; + }; + return data; +} +function _template() { + const data = require("@babel/template"); + _template = function () { + return data; + }; + return data; +} +function _t() { + const data = require("@babel/types"); + _t = function () { + return data; + }; + return data; +} +const { + arrayExpression, + assignmentExpression, + binaryExpression, + blockStatement, + callExpression, + cloneNode, + conditionalExpression, + exportNamedDeclaration, + exportSpecifier, + expressionStatement, + functionExpression, + identifier, + memberExpression, + objectExpression, + program, + stringLiteral, + unaryExpression, + variableDeclaration, + variableDeclarator +} = _t(); +const buildUmdWrapper = replacements => _template().default.statement` + (function (root, factory) { + if (typeof define === "function" && define.amd) { + define(AMD_ARGUMENTS, factory); + } else if (typeof exports === "object") { + factory(COMMON_ARGUMENTS); + } else { + factory(BROWSER_ARGUMENTS); + } + })(UMD_ROOT, function (FACTORY_PARAMETERS) { + FACTORY_BODY + }); + `(replacements); +function buildGlobal(allowlist) { + const namespace = identifier("babelHelpers"); + const body = []; + const container = functionExpression(null, [identifier("global")], blockStatement(body)); + const tree = program([expressionStatement(callExpression(container, [conditionalExpression(binaryExpression("===", unaryExpression("typeof", identifier("global")), stringLiteral("undefined")), identifier("self"), identifier("global"))]))]); + body.push(variableDeclaration("var", [variableDeclarator(namespace, assignmentExpression("=", memberExpression(identifier("global"), namespace), objectExpression([])))])); + buildHelpers(body, namespace, allowlist); + return tree; +} +function buildModule(allowlist) { + const body = []; + const refs = buildHelpers(body, null, allowlist); + body.unshift(exportNamedDeclaration(null, Object.keys(refs).map(name => { + return exportSpecifier(cloneNode(refs[name]), identifier(name)); + }))); + return program(body, [], "module"); +} +function buildUmd(allowlist) { + const namespace = identifier("babelHelpers"); + const body = []; + body.push(variableDeclaration("var", [variableDeclarator(namespace, identifier("global"))])); + buildHelpers(body, namespace, allowlist); + return program([buildUmdWrapper({ + FACTORY_PARAMETERS: identifier("global"), + BROWSER_ARGUMENTS: assignmentExpression("=", memberExpression(identifier("root"), namespace), objectExpression([])), + COMMON_ARGUMENTS: identifier("exports"), + AMD_ARGUMENTS: arrayExpression([stringLiteral("exports")]), + FACTORY_BODY: body, + UMD_ROOT: identifier("this") + })]); +} +function buildVar(allowlist) { + const namespace = identifier("babelHelpers"); + const body = []; + body.push(variableDeclaration("var", [variableDeclarator(namespace, objectExpression([]))])); + const tree = program(body); + buildHelpers(body, namespace, allowlist); + body.push(expressionStatement(namespace)); + return tree; +} +function buildHelpers(body, namespace, allowlist) { + const getHelperReference = name => { + return namespace ? memberExpression(namespace, identifier(name)) : identifier(`_${name}`); + }; + const refs = {}; + helpers().list.forEach(function (name) { + if (allowlist && !allowlist.includes(name)) return; + const ref = refs[name] = getHelperReference(name); + const { + nodes + } = helpers().get(name, getHelperReference, namespace ? null : `_${name}`, [], namespace ? (ast, exportName, mapExportBindingAssignments) => { + mapExportBindingAssignments(node => assignmentExpression("=", ref, node)); + ast.body.push(expressionStatement(assignmentExpression("=", ref, identifier(exportName)))); + } : null); + body.push(...nodes); + }); + return refs; +} +function _default(allowlist, outputType = "global") { + let tree; + const build = { + global: buildGlobal, + module: buildModule, + umd: buildUmd, + var: buildVar + }[outputType]; + if (build) { + tree = build(allowlist); + } else { + throw new Error(`Unsupported output type ${outputType}`); + } + return (0, _generator().default)(tree).code; +} +0 && 0; + +//# sourceMappingURL=build-external-helpers.js.map diff --git a/node_modules/@babel/core/lib/tools/build-external-helpers.js.map b/node_modules/@babel/core/lib/tools/build-external-helpers.js.map new file mode 100644 index 00000000..56020e44 --- /dev/null +++ b/node_modules/@babel/core/lib/tools/build-external-helpers.js.map @@ -0,0 +1 @@ +{"version":3,"names":["helpers","data","require","_generator","_template","_t","arrayExpression","assignmentExpression","binaryExpression","blockStatement","callExpression","cloneNode","conditionalExpression","exportNamedDeclaration","exportSpecifier","expressionStatement","functionExpression","identifier","memberExpression","objectExpression","program","stringLiteral","unaryExpression","variableDeclaration","variableDeclarator","buildUmdWrapper","replacements","template","statement","buildGlobal","allowlist","namespace","body","container","tree","push","buildHelpers","buildModule","refs","unshift","Object","keys","map","name","buildUmd","FACTORY_PARAMETERS","BROWSER_ARGUMENTS","COMMON_ARGUMENTS","AMD_ARGUMENTS","FACTORY_BODY","UMD_ROOT","buildVar","getHelperReference","list","forEach","includes","ref","nodes","get","ast","exportName","mapExportBindingAssignments","node","_default","outputType","build","global","module","umd","var","Error","generator","code"],"sources":["../../src/tools/build-external-helpers.ts"],"sourcesContent":["import * as helpers from \"@babel/helpers\";\nimport generator from \"@babel/generator\";\nimport template from \"@babel/template\";\nimport {\n arrayExpression,\n assignmentExpression,\n binaryExpression,\n blockStatement,\n callExpression,\n cloneNode,\n conditionalExpression,\n exportNamedDeclaration,\n exportSpecifier,\n expressionStatement,\n functionExpression,\n identifier,\n memberExpression,\n objectExpression,\n program,\n stringLiteral,\n unaryExpression,\n variableDeclaration,\n variableDeclarator,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport type { Replacements } from \"@babel/template\";\n\n// Wrapped to avoid wasting time parsing this when almost no-one uses\n// build-external-helpers.\nconst buildUmdWrapper = (replacements: Replacements) =>\n template.statement`\n (function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(AMD_ARGUMENTS, factory);\n } else if (typeof exports === \"object\") {\n factory(COMMON_ARGUMENTS);\n } else {\n factory(BROWSER_ARGUMENTS);\n }\n })(UMD_ROOT, function (FACTORY_PARAMETERS) {\n FACTORY_BODY\n });\n `(replacements);\n\nfunction buildGlobal(allowlist?: Array) {\n const namespace = identifier(\"babelHelpers\");\n\n const body: t.Statement[] = [];\n const container = functionExpression(\n null,\n [identifier(\"global\")],\n blockStatement(body),\n );\n const tree = program([\n expressionStatement(\n callExpression(container, [\n // typeof global === \"undefined\" ? self : global\n conditionalExpression(\n binaryExpression(\n \"===\",\n unaryExpression(\"typeof\", identifier(\"global\")),\n stringLiteral(\"undefined\"),\n ),\n identifier(\"self\"),\n identifier(\"global\"),\n ),\n ]),\n ),\n ]);\n\n body.push(\n variableDeclaration(\"var\", [\n variableDeclarator(\n namespace,\n assignmentExpression(\n \"=\",\n memberExpression(identifier(\"global\"), namespace),\n objectExpression([]),\n ),\n ),\n ]),\n );\n\n buildHelpers(body, namespace, allowlist);\n\n return tree;\n}\n\nfunction buildModule(allowlist?: Array) {\n const body: t.Statement[] = [];\n const refs = buildHelpers(body, null, allowlist);\n\n body.unshift(\n exportNamedDeclaration(\n null,\n Object.keys(refs).map(name => {\n return exportSpecifier(cloneNode(refs[name]), identifier(name));\n }),\n ),\n );\n\n return program(body, [], \"module\");\n}\n\nfunction buildUmd(allowlist?: Array) {\n const namespace = identifier(\"babelHelpers\");\n\n const body: t.Statement[] = [];\n body.push(\n variableDeclaration(\"var\", [\n variableDeclarator(namespace, identifier(\"global\")),\n ]),\n );\n\n buildHelpers(body, namespace, allowlist);\n\n return program([\n buildUmdWrapper({\n FACTORY_PARAMETERS: identifier(\"global\"),\n BROWSER_ARGUMENTS: assignmentExpression(\n \"=\",\n memberExpression(identifier(\"root\"), namespace),\n objectExpression([]),\n ),\n COMMON_ARGUMENTS: identifier(\"exports\"),\n AMD_ARGUMENTS: arrayExpression([stringLiteral(\"exports\")]),\n FACTORY_BODY: body,\n UMD_ROOT: identifier(\"this\"),\n }),\n ]);\n}\n\nfunction buildVar(allowlist?: Array) {\n const namespace = identifier(\"babelHelpers\");\n\n const body: t.Statement[] = [];\n body.push(\n variableDeclaration(\"var\", [\n variableDeclarator(namespace, objectExpression([])),\n ]),\n );\n const tree = program(body);\n buildHelpers(body, namespace, allowlist);\n body.push(expressionStatement(namespace));\n return tree;\n}\n\nfunction buildHelpers(\n body: t.Statement[],\n namespace: t.Expression,\n allowlist?: Array,\n): Record;\nfunction buildHelpers(\n body: t.Statement[],\n namespace: null,\n allowlist?: Array,\n): Record;\n\nfunction buildHelpers(\n body: t.Statement[],\n namespace: t.Expression | null,\n allowlist?: Array,\n) {\n const getHelperReference = (name: string) => {\n return namespace\n ? memberExpression(namespace, identifier(name))\n : identifier(`_${name}`);\n };\n\n const refs: { [key: string]: t.Identifier | t.MemberExpression } = {};\n helpers.list.forEach(function (name) {\n if (allowlist && !allowlist.includes(name)) return;\n\n const ref = (refs[name] = getHelperReference(name));\n\n const { nodes } = helpers.get(\n name,\n getHelperReference,\n namespace ? null : `_${name}`,\n [],\n namespace\n ? (ast, exportName, mapExportBindingAssignments) => {\n mapExportBindingAssignments(node =>\n assignmentExpression(\"=\", ref, node),\n );\n ast.body.push(\n expressionStatement(\n assignmentExpression(\"=\", ref, identifier(exportName)),\n ),\n );\n }\n : null,\n );\n\n body.push(...nodes);\n });\n return refs;\n}\nexport default function (\n allowlist?: Array,\n outputType: \"global\" | \"module\" | \"umd\" | \"var\" = \"global\",\n) {\n let tree: t.Program;\n\n const build = {\n global: buildGlobal,\n module: buildModule,\n umd: buildUmd,\n var: buildVar,\n }[outputType];\n\n if (build) {\n tree = build(allowlist);\n } else {\n throw new Error(`Unsupported output type ${outputType}`);\n }\n\n return generator(tree).code;\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/transform-ast.js b/node_modules/@babel/core/lib/transform-ast.js new file mode 100644 index 00000000..0a86cd10 --- /dev/null +++ b/node_modules/@babel/core/lib/transform-ast.js @@ -0,0 +1,50 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.transformFromAst = void 0; +exports.transformFromAstAsync = transformFromAstAsync; +exports.transformFromAstSync = transformFromAstSync; +function _gensync() { + const data = require("gensync"); + _gensync = function () { + return data; + }; + return data; +} +var _index = require("./config/index.js"); +var _index2 = require("./transformation/index.js"); +var _rewriteStackTrace = require("./errors/rewrite-stack-trace.js"); +const transformFromAstRunner = _gensync()(function* (ast, code, opts) { + const config = yield* (0, _index.default)(opts); + if (config === null) return null; + if (!ast) throw new Error("No AST given"); + return yield* (0, _index2.run)(config, code, ast); +}); +const transformFromAst = exports.transformFromAst = function transformFromAst(ast, code, optsOrCallback, maybeCallback) { + let opts; + let callback; + if (typeof optsOrCallback === "function") { + callback = optsOrCallback; + opts = undefined; + } else { + opts = optsOrCallback; + callback = maybeCallback; + } + if (callback === undefined) { + { + return (0, _rewriteStackTrace.beginHiddenCallStack)(transformFromAstRunner.sync)(ast, code, opts); + } + } + (0, _rewriteStackTrace.beginHiddenCallStack)(transformFromAstRunner.errback)(ast, code, opts, callback); +}; +function transformFromAstSync(...args) { + return (0, _rewriteStackTrace.beginHiddenCallStack)(transformFromAstRunner.sync)(...args); +} +function transformFromAstAsync(...args) { + return (0, _rewriteStackTrace.beginHiddenCallStack)(transformFromAstRunner.async)(...args); +} +0 && 0; + +//# sourceMappingURL=transform-ast.js.map diff --git a/node_modules/@babel/core/lib/transform-ast.js.map b/node_modules/@babel/core/lib/transform-ast.js.map new file mode 100644 index 00000000..ff148349 --- /dev/null +++ b/node_modules/@babel/core/lib/transform-ast.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_gensync","data","require","_index","_index2","_rewriteStackTrace","transformFromAstRunner","gensync","ast","code","opts","config","loadConfig","Error","run","transformFromAst","exports","optsOrCallback","maybeCallback","callback","undefined","beginHiddenCallStack","sync","errback","transformFromAstSync","args","transformFromAstAsync","async"],"sources":["../src/transform-ast.ts"],"sourcesContent":["import gensync, { type Handler } from \"gensync\";\n\nimport loadConfig from \"./config/index.ts\";\nimport type { InputOptions, ResolvedConfig } from \"./config/index.ts\";\nimport { run } from \"./transformation/index.ts\";\nimport type * as t from \"@babel/types\";\n\nimport { beginHiddenCallStack } from \"./errors/rewrite-stack-trace.ts\";\n\nimport type { FileResult, FileResultCallback } from \"./transformation/index.ts\";\ntype AstRoot = t.File | t.Program;\n\ntype TransformFromAst = {\n (ast: AstRoot, code: string, callback: FileResultCallback): void;\n (\n ast: AstRoot,\n code: string,\n opts: InputOptions | undefined | null,\n callback: FileResultCallback,\n ): void;\n (ast: AstRoot, code: string, opts?: InputOptions | null): FileResult | null;\n};\n\nconst transformFromAstRunner = gensync(function* (\n ast: AstRoot,\n code: string,\n opts: InputOptions | undefined | null,\n): Handler {\n const config: ResolvedConfig | null = yield* loadConfig(opts);\n if (config === null) return null;\n\n if (!ast) throw new Error(\"No AST given\");\n\n return yield* run(config, code, ast);\n});\n\nexport const transformFromAst: TransformFromAst = function transformFromAst(\n ast,\n code,\n optsOrCallback?: InputOptions | null | undefined | FileResultCallback,\n maybeCallback?: FileResultCallback,\n) {\n let opts: InputOptions | undefined | null;\n let callback: FileResultCallback | undefined;\n if (typeof optsOrCallback === \"function\") {\n callback = optsOrCallback;\n opts = undefined;\n } else {\n opts = optsOrCallback;\n callback = maybeCallback;\n }\n\n if (callback === undefined) {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"Starting from Babel 8.0.0, the 'transformFromAst' function expects a callback. If you need to call it synchronously, please use 'transformFromAstSync'.\",\n );\n } else {\n // console.warn(\n // \"Starting from Babel 8.0.0, the 'transformFromAst' function will expect a callback. If you need to call it synchronously, please use 'transformFromAstSync'.\",\n // );\n return beginHiddenCallStack(transformFromAstRunner.sync)(ast, code, opts);\n }\n }\n\n beginHiddenCallStack(transformFromAstRunner.errback)(\n ast,\n code,\n opts,\n callback,\n );\n};\n\nexport function transformFromAstSync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(transformFromAstRunner.sync)(...args);\n}\n\nexport function transformFromAstAsync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(transformFromAstRunner.async)(...args);\n}\n"],"mappings":";;;;;;;;AAAA,SAAAA,SAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,QAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,IAAAE,MAAA,GAAAD,OAAA;AAEA,IAAAE,OAAA,GAAAF,OAAA;AAGA,IAAAG,kBAAA,GAAAH,OAAA;AAgBA,MAAMI,sBAAsB,GAAGC,SAAMA,CAAC,CAAC,WACrCC,GAAY,EACZC,IAAY,EACZC,IAAqC,EACT;EAC5B,MAAMC,MAA6B,GAAG,OAAO,IAAAC,cAAU,EAACF,IAAI,CAAC;EAC7D,IAAIC,MAAM,KAAK,IAAI,EAAE,OAAO,IAAI;EAEhC,IAAI,CAACH,GAAG,EAAE,MAAM,IAAIK,KAAK,CAAC,cAAc,CAAC;EAEzC,OAAO,OAAO,IAAAC,WAAG,EAACH,MAAM,EAAEF,IAAI,EAAED,GAAG,CAAC;AACtC,CAAC,CAAC;AAEK,MAAMO,gBAAkC,GAAAC,OAAA,CAAAD,gBAAA,GAAG,SAASA,gBAAgBA,CACzEP,GAAG,EACHC,IAAI,EACJQ,cAAqE,EACrEC,aAAkC,EAClC;EACA,IAAIR,IAAqC;EACzC,IAAIS,QAAwC;EAC5C,IAAI,OAAOF,cAAc,KAAK,UAAU,EAAE;IACxCE,QAAQ,GAAGF,cAAc;IACzBP,IAAI,GAAGU,SAAS;EAClB,CAAC,MAAM;IACLV,IAAI,GAAGO,cAAc;IACrBE,QAAQ,GAAGD,aAAa;EAC1B;EAEA,IAAIC,QAAQ,KAAKC,SAAS,EAAE;IAKnB;MAIL,OAAO,IAAAC,uCAAoB,EAACf,sBAAsB,CAACgB,IAAI,CAAC,CAACd,GAAG,EAAEC,IAAI,EAAEC,IAAI,CAAC;IAC3E;EACF;EAEA,IAAAW,uCAAoB,EAACf,sBAAsB,CAACiB,OAAO,CAAC,CAClDf,GAAG,EACHC,IAAI,EACJC,IAAI,EACJS,QACF,CAAC;AACH,CAAC;AAEM,SAASK,oBAAoBA,CAClC,GAAGC,IAAoD,EACvD;EACA,OAAO,IAAAJ,uCAAoB,EAACf,sBAAsB,CAACgB,IAAI,CAAC,CAAC,GAAGG,IAAI,CAAC;AACnE;AAEO,SAASC,qBAAqBA,CACnC,GAAGD,IAAqD,EACxD;EACA,OAAO,IAAAJ,uCAAoB,EAACf,sBAAsB,CAACqB,KAAK,CAAC,CAAC,GAAGF,IAAI,CAAC;AACpE;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/transform-file-browser.js b/node_modules/@babel/core/lib/transform-file-browser.js new file mode 100644 index 00000000..85768097 --- /dev/null +++ b/node_modules/@babel/core/lib/transform-file-browser.js @@ -0,0 +1,23 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.transformFile = void 0; +exports.transformFileAsync = transformFileAsync; +exports.transformFileSync = transformFileSync; +const transformFile = exports.transformFile = function transformFile(filename, opts, callback) { + if (typeof opts === "function") { + callback = opts; + } + callback(new Error("Transforming files is not supported in browsers"), null); +}; +function transformFileSync() { + throw new Error("Transforming files is not supported in browsers"); +} +function transformFileAsync() { + return Promise.reject(new Error("Transforming files is not supported in browsers")); +} +0 && 0; + +//# sourceMappingURL=transform-file-browser.js.map diff --git a/node_modules/@babel/core/lib/transform-file-browser.js.map b/node_modules/@babel/core/lib/transform-file-browser.js.map new file mode 100644 index 00000000..b632a42f --- /dev/null +++ b/node_modules/@babel/core/lib/transform-file-browser.js.map @@ -0,0 +1 @@ +{"version":3,"names":["transformFile","exports","filename","opts","callback","Error","transformFileSync","transformFileAsync","Promise","reject"],"sources":["../src/transform-file-browser.ts"],"sourcesContent":["/* c8 ignore start */\n\n// duplicated from transform-file so we do not have to import anything here\ntype TransformFile = {\n (filename: string, callback: (error: Error, file: null) => void): void;\n (\n filename: string,\n opts: any,\n callback: (error: Error, file: null) => void,\n ): void;\n};\n\nexport const transformFile: TransformFile = function transformFile(\n filename,\n opts,\n callback?: (error: Error, file: null) => void,\n) {\n if (typeof opts === \"function\") {\n callback = opts;\n }\n\n callback(new Error(\"Transforming files is not supported in browsers\"), null);\n};\n\nexport function transformFileSync(): never {\n throw new Error(\"Transforming files is not supported in browsers\");\n}\n\nexport function transformFileAsync() {\n return Promise.reject(\n new Error(\"Transforming files is not supported in browsers\"),\n );\n}\n"],"mappings":";;;;;;;;AAYO,MAAMA,aAA4B,GAAAC,OAAA,CAAAD,aAAA,GAAG,SAASA,aAAaA,CAChEE,QAAQ,EACRC,IAAI,EACJC,QAA6C,EAC7C;EACA,IAAI,OAAOD,IAAI,KAAK,UAAU,EAAE;IAC9BC,QAAQ,GAAGD,IAAI;EACjB;EAEAC,QAAQ,CAAC,IAAIC,KAAK,CAAC,iDAAiD,CAAC,EAAE,IAAI,CAAC;AAC9E,CAAC;AAEM,SAASC,iBAAiBA,CAAA,EAAU;EACzC,MAAM,IAAID,KAAK,CAAC,iDAAiD,CAAC;AACpE;AAEO,SAASE,kBAAkBA,CAAA,EAAG;EACnC,OAAOC,OAAO,CAACC,MAAM,CACnB,IAAIJ,KAAK,CAAC,iDAAiD,CAC7D,CAAC;AACH;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/transform-file.js b/node_modules/@babel/core/lib/transform-file.js new file mode 100644 index 00000000..ce7f9f97 --- /dev/null +++ b/node_modules/@babel/core/lib/transform-file.js @@ -0,0 +1,40 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.transformFile = transformFile; +exports.transformFileAsync = transformFileAsync; +exports.transformFileSync = transformFileSync; +function _gensync() { + const data = require("gensync"); + _gensync = function () { + return data; + }; + return data; +} +var _index = require("./config/index.js"); +var _index2 = require("./transformation/index.js"); +var fs = require("./gensync-utils/fs.js"); +({}); +const transformFileRunner = _gensync()(function* (filename, opts) { + const options = Object.assign({}, opts, { + filename + }); + const config = yield* (0, _index.default)(options); + if (config === null) return null; + const code = yield* fs.readFile(filename, "utf8"); + return yield* (0, _index2.run)(config, code); +}); +function transformFile(...args) { + transformFileRunner.errback(...args); +} +function transformFileSync(...args) { + return transformFileRunner.sync(...args); +} +function transformFileAsync(...args) { + return transformFileRunner.async(...args); +} +0 && 0; + +//# sourceMappingURL=transform-file.js.map diff --git a/node_modules/@babel/core/lib/transform-file.js.map b/node_modules/@babel/core/lib/transform-file.js.map new file mode 100644 index 00000000..aab7ce6d --- /dev/null +++ b/node_modules/@babel/core/lib/transform-file.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_gensync","data","require","_index","_index2","fs","transformFileRunner","gensync","filename","opts","options","Object","assign","config","loadConfig","code","readFile","run","transformFile","args","errback","transformFileSync","sync","transformFileAsync","async"],"sources":["../src/transform-file.ts"],"sourcesContent":["import gensync, { type Handler } from \"gensync\";\n\nimport loadConfig from \"./config/index.ts\";\nimport type { InputOptions, ResolvedConfig } from \"./config/index.ts\";\nimport { run } from \"./transformation/index.ts\";\nimport type { FileResult, FileResultCallback } from \"./transformation/index.ts\";\nimport * as fs from \"./gensync-utils/fs.ts\";\n\ntype transformFileBrowserType = typeof import(\"./transform-file-browser\");\ntype transformFileType = typeof import(\"./transform-file\");\n\n// Kind of gross, but essentially asserting that the exports of this module are the same as the\n// exports of transform-file-browser, since this file may be replaced at bundle time with\n// transform-file-browser.\n({}) as any as transformFileBrowserType as transformFileType;\n\nconst transformFileRunner = gensync(function* (\n filename: string,\n opts?: InputOptions,\n): Handler {\n const options = { ...opts, filename };\n\n const config: ResolvedConfig | null = yield* loadConfig(options);\n if (config === null) return null;\n\n const code = yield* fs.readFile(filename, \"utf8\");\n return yield* run(config, code);\n});\n\n// @ts-expect-error TS doesn't detect that this signature is compatible\nexport function transformFile(\n filename: string,\n callback: FileResultCallback,\n): void;\nexport function transformFile(\n filename: string,\n opts: InputOptions | undefined | null,\n callback: FileResultCallback,\n): void;\nexport function transformFile(\n ...args: Parameters\n) {\n transformFileRunner.errback(...args);\n}\n\nexport function transformFileSync(\n ...args: Parameters\n) {\n return transformFileRunner.sync(...args);\n}\nexport function transformFileAsync(\n ...args: Parameters\n) {\n return transformFileRunner.async(...args);\n}\n"],"mappings":";;;;;;;;AAAA,SAAAA,SAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,QAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,IAAAE,MAAA,GAAAD,OAAA;AAEA,IAAAE,OAAA,GAAAF,OAAA;AAEA,IAAAG,EAAA,GAAAH,OAAA;AAQA,CAAC,CAAC,CAAC;AAEH,MAAMI,mBAAmB,GAAGC,SAAMA,CAAC,CAAC,WAClCC,QAAgB,EAChBC,IAAmB,EACS;EAC5B,MAAMC,OAAO,GAAAC,MAAA,CAAAC,MAAA,KAAQH,IAAI;IAAED;EAAQ,EAAE;EAErC,MAAMK,MAA6B,GAAG,OAAO,IAAAC,cAAU,EAACJ,OAAO,CAAC;EAChE,IAAIG,MAAM,KAAK,IAAI,EAAE,OAAO,IAAI;EAEhC,MAAME,IAAI,GAAG,OAAOV,EAAE,CAACW,QAAQ,CAACR,QAAQ,EAAE,MAAM,CAAC;EACjD,OAAO,OAAO,IAAAS,WAAG,EAACJ,MAAM,EAAEE,IAAI,CAAC;AACjC,CAAC,CAAC;AAYK,SAASG,aAAaA,CAC3B,GAAGC,IAAoD,EACvD;EACAb,mBAAmB,CAACc,OAAO,CAAC,GAAGD,IAAI,CAAC;AACtC;AAEO,SAASE,iBAAiBA,CAC/B,GAAGF,IAAiD,EACpD;EACA,OAAOb,mBAAmB,CAACgB,IAAI,CAAC,GAAGH,IAAI,CAAC;AAC1C;AACO,SAASI,kBAAkBA,CAChC,GAAGJ,IAAkD,EACrD;EACA,OAAOb,mBAAmB,CAACkB,KAAK,CAAC,GAAGL,IAAI,CAAC;AAC3C;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/transform.js b/node_modules/@babel/core/lib/transform.js new file mode 100644 index 00000000..be557055 --- /dev/null +++ b/node_modules/@babel/core/lib/transform.js @@ -0,0 +1,49 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.transform = void 0; +exports.transformAsync = transformAsync; +exports.transformSync = transformSync; +function _gensync() { + const data = require("gensync"); + _gensync = function () { + return data; + }; + return data; +} +var _index = require("./config/index.js"); +var _index2 = require("./transformation/index.js"); +var _rewriteStackTrace = require("./errors/rewrite-stack-trace.js"); +const transformRunner = _gensync()(function* transform(code, opts) { + const config = yield* (0, _index.default)(opts); + if (config === null) return null; + return yield* (0, _index2.run)(config, code); +}); +const transform = exports.transform = function transform(code, optsOrCallback, maybeCallback) { + let opts; + let callback; + if (typeof optsOrCallback === "function") { + callback = optsOrCallback; + opts = undefined; + } else { + opts = optsOrCallback; + callback = maybeCallback; + } + if (callback === undefined) { + { + return (0, _rewriteStackTrace.beginHiddenCallStack)(transformRunner.sync)(code, opts); + } + } + (0, _rewriteStackTrace.beginHiddenCallStack)(transformRunner.errback)(code, opts, callback); +}; +function transformSync(...args) { + return (0, _rewriteStackTrace.beginHiddenCallStack)(transformRunner.sync)(...args); +} +function transformAsync(...args) { + return (0, _rewriteStackTrace.beginHiddenCallStack)(transformRunner.async)(...args); +} +0 && 0; + +//# sourceMappingURL=transform.js.map diff --git a/node_modules/@babel/core/lib/transform.js.map b/node_modules/@babel/core/lib/transform.js.map new file mode 100644 index 00000000..3a7832a0 --- /dev/null +++ b/node_modules/@babel/core/lib/transform.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_gensync","data","require","_index","_index2","_rewriteStackTrace","transformRunner","gensync","transform","code","opts","config","loadConfig","run","exports","optsOrCallback","maybeCallback","callback","undefined","beginHiddenCallStack","sync","errback","transformSync","args","transformAsync","async"],"sources":["../src/transform.ts"],"sourcesContent":["import gensync, { type Handler } from \"gensync\";\n\nimport loadConfig from \"./config/index.ts\";\nimport type { InputOptions, ResolvedConfig } from \"./config/index.ts\";\nimport { run } from \"./transformation/index.ts\";\n\nimport type { FileResult, FileResultCallback } from \"./transformation/index.ts\";\nimport { beginHiddenCallStack } from \"./errors/rewrite-stack-trace.ts\";\n\nexport type { FileResult } from \"./transformation/index.ts\";\n\ntype Transform = {\n (code: string, callback: FileResultCallback): void;\n (\n code: string,\n opts: InputOptions | undefined | null,\n callback: FileResultCallback,\n ): void;\n (code: string, opts?: InputOptions | null): FileResult | null;\n};\n\nconst transformRunner = gensync(function* transform(\n code: string,\n opts?: InputOptions,\n): Handler {\n const config: ResolvedConfig | null = yield* loadConfig(opts);\n if (config === null) return null;\n\n return yield* run(config, code);\n});\n\nexport const transform: Transform = function transform(\n code,\n optsOrCallback?: InputOptions | null | undefined | FileResultCallback,\n maybeCallback?: FileResultCallback,\n) {\n let opts: InputOptions | undefined | null;\n let callback: FileResultCallback | undefined;\n if (typeof optsOrCallback === \"function\") {\n callback = optsOrCallback;\n opts = undefined;\n } else {\n opts = optsOrCallback;\n callback = maybeCallback;\n }\n\n if (callback === undefined) {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"Starting from Babel 8.0.0, the 'transform' function expects a callback. If you need to call it synchronously, please use 'transformSync'.\",\n );\n } else {\n // console.warn(\n // \"Starting from Babel 8.0.0, the 'transform' function will expect a callback. If you need to call it synchronously, please use 'transformSync'.\",\n // );\n return beginHiddenCallStack(transformRunner.sync)(code, opts);\n }\n }\n\n beginHiddenCallStack(transformRunner.errback)(code, opts, callback);\n};\n\nexport function transformSync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(transformRunner.sync)(...args);\n}\nexport function transformAsync(\n ...args: Parameters\n) {\n return beginHiddenCallStack(transformRunner.async)(...args);\n}\n"],"mappings":";;;;;;;;AAAA,SAAAA,SAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,QAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,IAAAE,MAAA,GAAAD,OAAA;AAEA,IAAAE,OAAA,GAAAF,OAAA;AAGA,IAAAG,kBAAA,GAAAH,OAAA;AAcA,MAAMI,eAAe,GAAGC,SAAMA,CAAC,CAAC,UAAUC,SAASA,CACjDC,IAAY,EACZC,IAAmB,EACS;EAC5B,MAAMC,MAA6B,GAAG,OAAO,IAAAC,cAAU,EAACF,IAAI,CAAC;EAC7D,IAAIC,MAAM,KAAK,IAAI,EAAE,OAAO,IAAI;EAEhC,OAAO,OAAO,IAAAE,WAAG,EAACF,MAAM,EAAEF,IAAI,CAAC;AACjC,CAAC,CAAC;AAEK,MAAMD,SAAoB,GAAAM,OAAA,CAAAN,SAAA,GAAG,SAASA,SAASA,CACpDC,IAAI,EACJM,cAAqE,EACrEC,aAAkC,EAClC;EACA,IAAIN,IAAqC;EACzC,IAAIO,QAAwC;EAC5C,IAAI,OAAOF,cAAc,KAAK,UAAU,EAAE;IACxCE,QAAQ,GAAGF,cAAc;IACzBL,IAAI,GAAGQ,SAAS;EAClB,CAAC,MAAM;IACLR,IAAI,GAAGK,cAAc;IACrBE,QAAQ,GAAGD,aAAa;EAC1B;EAEA,IAAIC,QAAQ,KAAKC,SAAS,EAAE;IAKnB;MAIL,OAAO,IAAAC,uCAAoB,EAACb,eAAe,CAACc,IAAI,CAAC,CAACX,IAAI,EAAEC,IAAI,CAAC;IAC/D;EACF;EAEA,IAAAS,uCAAoB,EAACb,eAAe,CAACe,OAAO,CAAC,CAACZ,IAAI,EAAEC,IAAI,EAAEO,QAAQ,CAAC;AACrE,CAAC;AAEM,SAASK,aAAaA,CAC3B,GAAGC,IAA6C,EAChD;EACA,OAAO,IAAAJ,uCAAoB,EAACb,eAAe,CAACc,IAAI,CAAC,CAAC,GAAGG,IAAI,CAAC;AAC5D;AACO,SAASC,cAAcA,CAC5B,GAAGD,IAA8C,EACjD;EACA,OAAO,IAAAJ,uCAAoB,EAACb,eAAe,CAACmB,KAAK,CAAC,CAAC,GAAGF,IAAI,CAAC;AAC7D;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/transformation/block-hoist-plugin.js b/node_modules/@babel/core/lib/transformation/block-hoist-plugin.js new file mode 100644 index 00000000..ec22ee3b --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/block-hoist-plugin.js @@ -0,0 +1,84 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = loadBlockHoistPlugin; +function _traverse() { + const data = require("@babel/traverse"); + _traverse = function () { + return data; + }; + return data; +} +var _plugin = require("../config/plugin.js"); +let LOADED_PLUGIN; +const blockHoistPlugin = { + name: "internal.blockHoist", + visitor: { + Block: { + exit({ + node + }) { + node.body = performHoisting(node.body); + } + }, + SwitchCase: { + exit({ + node + }) { + node.consequent = performHoisting(node.consequent); + } + } + } +}; +function performHoisting(body) { + let max = Math.pow(2, 30) - 1; + let hasChange = false; + for (let i = 0; i < body.length; i++) { + const n = body[i]; + const p = priority(n); + if (p > max) { + hasChange = true; + break; + } + max = p; + } + if (!hasChange) return body; + return stableSort(body.slice()); +} +function loadBlockHoistPlugin() { + if (!LOADED_PLUGIN) { + LOADED_PLUGIN = new _plugin.default(Object.assign({}, blockHoistPlugin, { + visitor: _traverse().default.explode(blockHoistPlugin.visitor) + }), {}); + } + return LOADED_PLUGIN; +} +function priority(bodyNode) { + const priority = bodyNode == null ? void 0 : bodyNode._blockHoist; + if (priority == null) return 1; + if (priority === true) return 2; + return priority; +} +function stableSort(body) { + const buckets = Object.create(null); + for (let i = 0; i < body.length; i++) { + const n = body[i]; + const p = priority(n); + const bucket = buckets[p] || (buckets[p] = []); + bucket.push(n); + } + const keys = Object.keys(buckets).map(k => +k).sort((a, b) => b - a); + let index = 0; + for (const key of keys) { + const bucket = buckets[key]; + for (const n of bucket) { + body[index++] = n; + } + } + return body; +} +0 && 0; + +//# sourceMappingURL=block-hoist-plugin.js.map diff --git a/node_modules/@babel/core/lib/transformation/block-hoist-plugin.js.map b/node_modules/@babel/core/lib/transformation/block-hoist-plugin.js.map new file mode 100644 index 00000000..028e36a6 --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/block-hoist-plugin.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_traverse","data","require","_plugin","LOADED_PLUGIN","blockHoistPlugin","name","visitor","Block","exit","node","body","performHoisting","SwitchCase","consequent","max","Math","pow","hasChange","i","length","n","p","priority","stableSort","slice","loadBlockHoistPlugin","Plugin","Object","assign","traverse","explode","bodyNode","_blockHoist","buckets","create","bucket","push","keys","map","k","sort","a","b","index","key"],"sources":["../../src/transformation/block-hoist-plugin.ts"],"sourcesContent":["import traverse from \"@babel/traverse\";\nimport type { Statement } from \"@babel/types\";\nimport type { PluginObject } from \"../config/index.ts\";\nimport Plugin from \"../config/plugin.ts\";\n\nlet LOADED_PLUGIN: Plugin | void;\n\nconst blockHoistPlugin: PluginObject = {\n /**\n * [Please add a description.]\n *\n * Priority:\n *\n * - 0 We want this to be at the **very** bottom\n * - 1 Default node position\n * - 2 Priority over normal nodes\n * - 3 We want this to be at the **very** top\n * - 4 Reserved for the helpers used to implement module imports.\n */\n\n name: \"internal.blockHoist\",\n\n visitor: {\n Block: {\n exit({ node }) {\n node.body = performHoisting(node.body);\n },\n },\n SwitchCase: {\n exit({ node }) {\n // In case statements, hoisting is difficult to perform correctly due to\n // functions that are declared and referenced in different blocks.\n // Nevertheless, hoisting the statements *inside* of each case should at\n // least mitigate the failure cases.\n node.consequent = performHoisting(node.consequent);\n },\n },\n },\n};\n\nfunction performHoisting(body: Statement[]): Statement[] {\n // Largest SMI\n let max = 2 ** 30 - 1;\n let hasChange = false;\n for (let i = 0; i < body.length; i++) {\n const n = body[i];\n const p = priority(n);\n if (p > max) {\n hasChange = true;\n break;\n }\n max = p;\n }\n if (!hasChange) return body;\n\n // My kingdom for a stable sort!\n return stableSort(body.slice());\n}\n\nexport default function loadBlockHoistPlugin(): Plugin {\n if (!LOADED_PLUGIN) {\n // cache the loaded blockHoist plugin plugin\n LOADED_PLUGIN = new Plugin(\n {\n ...blockHoistPlugin,\n visitor: traverse.explode(blockHoistPlugin.visitor),\n },\n {},\n );\n }\n\n return LOADED_PLUGIN;\n}\n\nfunction priority(bodyNode: Statement & { _blockHoist?: number | true }) {\n const priority = bodyNode?._blockHoist;\n if (priority == null) return 1;\n if (priority === true) return 2;\n return priority;\n}\n\nfunction stableSort(body: Statement[]) {\n // By default, we use priorities of 0-4.\n const buckets = Object.create(null);\n\n // By collecting into buckets, we can guarantee a stable sort.\n for (let i = 0; i < body.length; i++) {\n const n = body[i];\n const p = priority(n);\n\n // In case some plugin is setting an unexpected priority.\n const bucket = buckets[p] || (buckets[p] = []);\n bucket.push(n);\n }\n\n // Sort our keys in descending order. Keys are unique, so we don't have to\n // worry about stability.\n const keys = Object.keys(buckets)\n .map(k => +k)\n .sort((a, b) => b - a);\n\n let index = 0;\n for (const key of keys) {\n const bucket = buckets[key];\n for (const n of bucket) {\n body[index++] = n;\n }\n }\n return body;\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/transformation/file/babel-7-helpers.cjs b/node_modules/@babel/core/lib/transformation/file/babel-7-helpers.cjs new file mode 100644 index 00000000..e606e550 --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/file/babel-7-helpers.cjs @@ -0,0 +1,6 @@ +{ + exports.getModuleName = () => require("@babel/helper-module-transforms").getModuleName; +} +0 && 0; + +//# sourceMappingURL=babel-7-helpers.cjs.map diff --git a/node_modules/@babel/core/lib/transformation/file/babel-7-helpers.cjs.map b/node_modules/@babel/core/lib/transformation/file/babel-7-helpers.cjs.map new file mode 100644 index 00000000..d27a70c0 --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/file/babel-7-helpers.cjs.map @@ -0,0 +1 @@ +{"version":3,"names":["exports","getModuleName","require"],"sources":["../../../src/transformation/file/babel-7-helpers.cjs"],"sourcesContent":["// TODO(Babel 8): Remove this file\n\nif (!process.env.BABEL_8_BREAKING) {\n exports.getModuleName = () =>\n require(\"@babel/helper-module-transforms\").getModuleName;\n} else if (process.env.IS_PUBLISH) {\n throw new Error(\n \"Internal Babel error: This file should only be loaded in Babel 7\",\n );\n}\n"],"mappings":"AAEmC;EACjCA,OAAO,CAACC,aAAa,GAAG,MACtBC,OAAO,CAAC,iCAAiC,CAAC,CAACD,aAAa;AAC5D;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/transformation/file/file.js b/node_modules/@babel/core/lib/transformation/file/file.js new file mode 100644 index 00000000..5cf92546 --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/file/file.js @@ -0,0 +1,219 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +function helpers() { + const data = require("@babel/helpers"); + helpers = function () { + return data; + }; + return data; +} +function _traverse() { + const data = require("@babel/traverse"); + _traverse = function () { + return data; + }; + return data; +} +function _codeFrame() { + const data = require("@babel/code-frame"); + _codeFrame = function () { + return data; + }; + return data; +} +function _t() { + const data = require("@babel/types"); + _t = function () { + return data; + }; + return data; +} +function _semver() { + const data = require("semver"); + _semver = function () { + return data; + }; + return data; +} +var _babel7Helpers = require("./babel-7-helpers.cjs"); +const { + cloneNode, + interpreterDirective +} = _t(); +const errorVisitor = { + enter(path, state) { + const loc = path.node.loc; + if (loc) { + state.loc = loc; + path.stop(); + } + } +}; +class File { + constructor(options, { + code, + ast, + inputMap + }) { + this._map = new Map(); + this.opts = void 0; + this.declarations = {}; + this.path = void 0; + this.ast = void 0; + this.scope = void 0; + this.metadata = {}; + this.code = ""; + this.inputMap = void 0; + this.hub = { + file: this, + getCode: () => this.code, + getScope: () => this.scope, + addHelper: this.addHelper.bind(this), + buildError: this.buildCodeFrameError.bind(this) + }; + this.opts = options; + this.code = code; + this.ast = ast; + this.inputMap = inputMap; + this.path = _traverse().NodePath.get({ + hub: this.hub, + parentPath: null, + parent: this.ast, + container: this.ast, + key: "program" + }).setContext(); + this.scope = this.path.scope; + } + get shebang() { + const { + interpreter + } = this.path.node; + return interpreter ? interpreter.value : ""; + } + set shebang(value) { + if (value) { + this.path.get("interpreter").replaceWith(interpreterDirective(value)); + } else { + this.path.get("interpreter").remove(); + } + } + set(key, val) { + { + if (key === "helpersNamespace") { + throw new Error("Babel 7.0.0-beta.56 has dropped support for the 'helpersNamespace' utility." + "If you are using @babel/plugin-external-helpers you will need to use a newer " + "version than the one you currently have installed. " + "If you have your own implementation, you'll want to explore using 'helperGenerator' " + "alongside 'file.availableHelper()'."); + } + } + this._map.set(key, val); + } + get(key) { + return this._map.get(key); + } + has(key) { + return this._map.has(key); + } + availableHelper(name, versionRange) { + if (helpers().isInternal(name)) return false; + let minVersion; + try { + minVersion = helpers().minVersion(name); + } catch (err) { + if (err.code !== "BABEL_HELPER_UNKNOWN") throw err; + return false; + } + if (typeof versionRange !== "string") return true; + if (_semver().valid(versionRange)) versionRange = `^${versionRange}`; + { + return !_semver().intersects(`<${minVersion}`, versionRange) && !_semver().intersects(`>=8.0.0`, versionRange); + } + } + addHelper(name) { + if (helpers().isInternal(name)) { + throw new Error("Cannot use internal helper " + name); + } + return this._addHelper(name); + } + _addHelper(name) { + const declar = this.declarations[name]; + if (declar) return cloneNode(declar); + const generator = this.get("helperGenerator"); + if (generator) { + const res = generator(name); + if (res) return res; + } + helpers().minVersion(name); + const uid = this.declarations[name] = this.scope.generateUidIdentifier(name); + const dependencies = {}; + for (const dep of helpers().getDependencies(name)) { + dependencies[dep] = this._addHelper(dep); + } + const { + nodes, + globals + } = helpers().get(name, dep => dependencies[dep], uid.name, Object.keys(this.scope.getAllBindings())); + globals.forEach(name => { + if (this.path.scope.hasBinding(name, true)) { + this.path.scope.rename(name); + } + }); + nodes.forEach(node => { + node._compact = true; + }); + const added = this.path.unshiftContainer("body", nodes); + for (const path of added) { + if (path.isVariableDeclaration()) this.scope.registerDeclaration(path); + } + return uid; + } + buildCodeFrameError(node, msg, _Error = SyntaxError) { + let loc = node == null ? void 0 : node.loc; + if (!loc && node) { + const state = { + loc: null + }; + (0, _traverse().default)(node, errorVisitor, this.scope, state); + loc = state.loc; + let txt = "This is an error on an internal node. Probably an internal error."; + if (loc) txt += " Location has been estimated."; + msg += ` (${txt})`; + } + if (loc) { + const { + highlightCode = true + } = this.opts; + msg += "\n" + (0, _codeFrame().codeFrameColumns)(this.code, { + start: { + line: loc.start.line, + column: loc.start.column + 1 + }, + end: loc.end && loc.start.line === loc.end.line ? { + line: loc.end.line, + column: loc.end.column + 1 + } : undefined + }, { + highlightCode + }); + } + return new _Error(msg); + } +} +exports.default = File; +{ + File.prototype.addImport = function addImport() { + throw new Error("This API has been removed. If you're looking for this " + "functionality in Babel 7, you should import the " + "'@babel/helper-module-imports' module and use the functions exposed " + " from that module, such as 'addNamed' or 'addDefault'."); + }; + File.prototype.addTemplateObject = function addTemplateObject() { + throw new Error("This function has been moved into the template literal transform itself."); + }; + { + File.prototype.getModuleName = function getModuleName() { + return _babel7Helpers.getModuleName()(this.opts, this.opts); + }; + } +} +0 && 0; + +//# sourceMappingURL=file.js.map diff --git a/node_modules/@babel/core/lib/transformation/file/file.js.map b/node_modules/@babel/core/lib/transformation/file/file.js.map new file mode 100644 index 00000000..39ae8203 --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/file/file.js.map @@ -0,0 +1 @@ +{"version":3,"names":["helpers","data","require","_traverse","_codeFrame","_t","_semver","_babel7Helpers","cloneNode","interpreterDirective","errorVisitor","enter","path","state","loc","node","stop","File","constructor","options","code","ast","inputMap","_map","Map","opts","declarations","scope","metadata","hub","file","getCode","getScope","addHelper","bind","buildError","buildCodeFrameError","NodePath","get","parentPath","parent","container","key","setContext","shebang","interpreter","value","replaceWith","remove","set","val","Error","has","availableHelper","name","versionRange","isInternal","minVersion","err","semver","valid","intersects","_addHelper","declar","generator","res","uid","generateUidIdentifier","dependencies","dep","getDependencies","nodes","globals","Object","keys","getAllBindings","forEach","hasBinding","rename","_compact","added","unshiftContainer","isVariableDeclaration","registerDeclaration","msg","_Error","SyntaxError","traverse","txt","highlightCode","codeFrameColumns","start","line","column","end","undefined","exports","default","prototype","addImport","addTemplateObject","getModuleName","babel7"],"sources":["../../../src/transformation/file/file.ts"],"sourcesContent":["import * as helpers from \"@babel/helpers\";\nimport { NodePath } from \"@babel/traverse\";\nimport type { HubInterface, Visitor, Scope } from \"@babel/traverse\";\nimport { codeFrameColumns } from \"@babel/code-frame\";\nimport traverse from \"@babel/traverse\";\nimport { cloneNode, interpreterDirective } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport semver from \"semver\";\n\nimport type { NormalizedFile } from \"../normalize-file.ts\";\n\n// @ts-expect-error This file is `any`\nimport babel7 from \"./babel-7-helpers.cjs\" with { if: \"!process.env.BABEL_8_BREAKING && (!USE_ESM || IS_STANDALONE)\" };\n\nconst errorVisitor: Visitor<{ loc: t.SourceLocation | null }> = {\n enter(path, state) {\n const loc = path.node.loc;\n if (loc) {\n state.loc = loc;\n path.stop();\n }\n },\n};\n\nexport default class File {\n _map: Map = new Map();\n opts: { [key: string]: any };\n declarations: { [key: string]: t.Identifier } = {};\n path: NodePath;\n ast: t.File;\n scope: Scope;\n metadata: { [key: string]: any } = {};\n code: string = \"\";\n inputMap: any;\n\n hub: HubInterface & { file: File } = {\n // keep it for the usage in babel-core, ex: path.hub.file.opts.filename\n file: this,\n getCode: () => this.code,\n getScope: () => this.scope,\n addHelper: this.addHelper.bind(this),\n buildError: this.buildCodeFrameError.bind(this),\n };\n\n constructor(options: any, { code, ast, inputMap }: NormalizedFile) {\n this.opts = options;\n this.code = code;\n this.ast = ast;\n this.inputMap = inputMap;\n\n this.path = NodePath.get({\n hub: this.hub,\n parentPath: null,\n parent: this.ast,\n container: this.ast,\n key: \"program\",\n }).setContext() as NodePath;\n this.scope = this.path.scope;\n }\n\n /**\n * Provide backward-compatible access to the interpreter directive handling\n * in Babel 6.x. If you are writing a plugin for Babel 7.x, it would be\n * best to use 'program.interpreter' directly.\n */\n get shebang(): string {\n const { interpreter } = this.path.node;\n return interpreter ? interpreter.value : \"\";\n }\n set shebang(value: string) {\n if (value) {\n this.path.get(\"interpreter\").replaceWith(interpreterDirective(value));\n } else {\n this.path.get(\"interpreter\").remove();\n }\n }\n\n set(key: unknown, val: unknown) {\n if (!process.env.BABEL_8_BREAKING) {\n if (key === \"helpersNamespace\") {\n throw new Error(\n \"Babel 7.0.0-beta.56 has dropped support for the 'helpersNamespace' utility.\" +\n \"If you are using @babel/plugin-external-helpers you will need to use a newer \" +\n \"version than the one you currently have installed. \" +\n \"If you have your own implementation, you'll want to explore using 'helperGenerator' \" +\n \"alongside 'file.availableHelper()'.\",\n );\n }\n }\n\n this._map.set(key, val);\n }\n\n get(key: unknown): any {\n return this._map.get(key);\n }\n\n has(key: unknown): boolean {\n return this._map.has(key);\n }\n\n /**\n * Check if a given helper is available in @babel/core's helper list.\n *\n * This _also_ allows you to pass a Babel version specifically. If the\n * helper exists, but was not available for the full given range, it will be\n * considered unavailable.\n */\n availableHelper(name: string, versionRange?: string | null): boolean {\n if (helpers.isInternal(name)) return false;\n\n let minVersion;\n try {\n minVersion = helpers.minVersion(name);\n } catch (err) {\n if (err.code !== \"BABEL_HELPER_UNKNOWN\") throw err;\n\n return false;\n }\n\n if (typeof versionRange !== \"string\") return true;\n\n // semver.intersects() has some surprising behavior with comparing ranges\n // with pre-release versions. We add '^' to ensure that we are always\n // comparing ranges with ranges, which sidesteps this logic.\n // For example:\n //\n // semver.intersects(`<7.0.1`, \"7.0.0-beta.0\") // false - surprising\n // semver.intersects(`<7.0.1`, \"^7.0.0-beta.0\") // true - expected\n //\n // This is because the first falls back to\n //\n // semver.satisfies(\"7.0.0-beta.0\", `<7.0.1`) // false - surprising\n //\n // and this fails because a prerelease version can only satisfy a range\n // if it is a prerelease within the same major/minor/patch range.\n //\n // Note: If this is found to have issues, please also revisit the logic in\n // transform-runtime's definitions.js file.\n if (semver.valid(versionRange)) versionRange = `^${versionRange}`;\n\n if (process.env.BABEL_8_BREAKING) {\n return (\n !semver.intersects(`<${minVersion}`, versionRange) &&\n !semver.intersects(`>=9.0.0`, versionRange)\n );\n } else {\n return (\n !semver.intersects(`<${minVersion}`, versionRange) &&\n !semver.intersects(`>=8.0.0`, versionRange)\n );\n }\n }\n\n addHelper(name: string): t.Identifier {\n if (helpers.isInternal(name)) {\n throw new Error(\"Cannot use internal helper \" + name);\n }\n return this._addHelper(name);\n }\n\n _addHelper(name: string): t.Identifier {\n const declar = this.declarations[name];\n if (declar) return cloneNode(declar);\n\n const generator = this.get(\"helperGenerator\");\n if (generator) {\n const res = generator(name);\n if (res) return res;\n }\n\n // make sure that the helper exists\n helpers.minVersion(name);\n\n const uid = (this.declarations[name] =\n this.scope.generateUidIdentifier(name));\n\n const dependencies: { [key: string]: t.Identifier } = {};\n for (const dep of helpers.getDependencies(name)) {\n dependencies[dep] = this._addHelper(dep);\n }\n\n const { nodes, globals } = helpers.get(\n name,\n dep => dependencies[dep],\n uid.name,\n Object.keys(this.scope.getAllBindings()),\n );\n\n globals.forEach(name => {\n if (this.path.scope.hasBinding(name, true /* noGlobals */)) {\n this.path.scope.rename(name);\n }\n });\n\n nodes.forEach(node => {\n // @ts-expect-error Fixme: document _compact node property\n node._compact = true;\n });\n\n const added = this.path.unshiftContainer(\"body\", nodes);\n // TODO: NodePath#unshiftContainer should automatically register new\n // bindings.\n for (const path of added) {\n if (path.isVariableDeclaration()) this.scope.registerDeclaration(path);\n }\n\n return uid;\n }\n\n buildCodeFrameError(\n node: t.Node | undefined | null,\n msg: string,\n _Error: typeof Error = SyntaxError,\n ): Error {\n let loc = node?.loc;\n\n if (!loc && node) {\n const state: { loc?: t.SourceLocation | null } = {\n loc: null,\n };\n traverse(node, errorVisitor, this.scope, state);\n loc = state.loc;\n\n let txt =\n \"This is an error on an internal node. Probably an internal error.\";\n if (loc) txt += \" Location has been estimated.\";\n\n msg += ` (${txt})`;\n }\n\n if (loc) {\n const { highlightCode = true } = this.opts;\n\n msg +=\n \"\\n\" +\n codeFrameColumns(\n this.code,\n {\n start: {\n line: loc.start.line,\n column: loc.start.column + 1,\n },\n end:\n loc.end && loc.start.line === loc.end.line\n ? {\n line: loc.end.line,\n column: loc.end.column + 1,\n }\n : undefined,\n },\n { highlightCode },\n );\n }\n\n return new _Error(msg);\n }\n}\n\nif (!process.env.BABEL_8_BREAKING) {\n // @ts-expect-error Babel 7\n File.prototype.addImport = function addImport() {\n throw new Error(\n \"This API has been removed. If you're looking for this \" +\n \"functionality in Babel 7, you should import the \" +\n \"'@babel/helper-module-imports' module and use the functions exposed \" +\n \" from that module, such as 'addNamed' or 'addDefault'.\",\n );\n };\n // @ts-expect-error Babel 7\n File.prototype.addTemplateObject = function addTemplateObject() {\n throw new Error(\n \"This function has been moved into the template literal transform itself.\",\n );\n };\n\n if (!USE_ESM || IS_STANDALONE) {\n // @ts-expect-error Babel 7\n File.prototype.getModuleName = function getModuleName() {\n return babel7.getModuleName()(this.opts, this.opts);\n };\n }\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/transformation/file/generate.js b/node_modules/@babel/core/lib/transformation/file/generate.js new file mode 100644 index 00000000..10b5b29f --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/file/generate.js @@ -0,0 +1,84 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = generateCode; +function _convertSourceMap() { + const data = require("convert-source-map"); + _convertSourceMap = function () { + return data; + }; + return data; +} +function _generator() { + const data = require("@babel/generator"); + _generator = function () { + return data; + }; + return data; +} +var _mergeMap = require("./merge-map.js"); +function generateCode(pluginPasses, file) { + const { + opts, + ast, + code, + inputMap + } = file; + const { + generatorOpts + } = opts; + generatorOpts.inputSourceMap = inputMap == null ? void 0 : inputMap.toObject(); + const results = []; + for (const plugins of pluginPasses) { + for (const plugin of plugins) { + const { + generatorOverride + } = plugin; + if (generatorOverride) { + const result = generatorOverride(ast, generatorOpts, code, _generator().default); + if (result !== undefined) results.push(result); + } + } + } + let result; + if (results.length === 0) { + result = (0, _generator().default)(ast, generatorOpts, code); + } else if (results.length === 1) { + result = results[0]; + if (typeof result.then === "function") { + throw new Error(`You appear to be using an async codegen plugin, ` + `which your current version of Babel does not support. ` + `If you're using a published plugin, ` + `you may need to upgrade your @babel/core version.`); + } + } else { + throw new Error("More than one plugin attempted to override codegen."); + } + let { + code: outputCode, + decodedMap: outputMap = result.map + } = result; + if (result.__mergedMap) { + outputMap = Object.assign({}, result.map); + } else { + if (outputMap) { + if (inputMap) { + outputMap = (0, _mergeMap.default)(inputMap.toObject(), outputMap, generatorOpts.sourceFileName); + } else { + outputMap = result.map; + } + } + } + if (opts.sourceMaps === "inline" || opts.sourceMaps === "both") { + outputCode += "\n" + _convertSourceMap().fromObject(outputMap).toComment(); + } + if (opts.sourceMaps === "inline") { + outputMap = null; + } + return { + outputCode, + outputMap + }; +} +0 && 0; + +//# sourceMappingURL=generate.js.map diff --git a/node_modules/@babel/core/lib/transformation/file/generate.js.map b/node_modules/@babel/core/lib/transformation/file/generate.js.map new file mode 100644 index 00000000..36401b40 --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/file/generate.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_convertSourceMap","data","require","_generator","_mergeMap","generateCode","pluginPasses","file","opts","ast","code","inputMap","generatorOpts","inputSourceMap","toObject","results","plugins","plugin","generatorOverride","result","generate","undefined","push","length","then","Error","outputCode","decodedMap","outputMap","map","__mergedMap","Object","assign","mergeSourceMap","sourceFileName","sourceMaps","convertSourceMap","fromObject","toComment"],"sources":["../../../src/transformation/file/generate.ts"],"sourcesContent":["import type { PluginPasses } from \"../../config/index.ts\";\nimport convertSourceMap from \"convert-source-map\";\nimport type { GeneratorResult } from \"@babel/generator\";\nimport generate from \"@babel/generator\";\n\nimport type File from \"./file.ts\";\nimport mergeSourceMap from \"./merge-map.ts\";\n\nexport default function generateCode(\n pluginPasses: PluginPasses,\n file: File,\n): {\n outputCode: string;\n outputMap: GeneratorResult[\"map\"] | null;\n} {\n const { opts, ast, code, inputMap } = file;\n const { generatorOpts } = opts;\n\n generatorOpts.inputSourceMap = inputMap?.toObject();\n\n const results = [];\n for (const plugins of pluginPasses) {\n for (const plugin of plugins) {\n const { generatorOverride } = plugin;\n if (generatorOverride) {\n const result = generatorOverride(ast, generatorOpts, code, generate);\n\n if (result !== undefined) results.push(result);\n }\n }\n }\n\n let result;\n if (results.length === 0) {\n result = generate(ast, generatorOpts, code);\n } else if (results.length === 1) {\n result = results[0];\n\n if (typeof result.then === \"function\") {\n throw new Error(\n `You appear to be using an async codegen plugin, ` +\n `which your current version of Babel does not support. ` +\n `If you're using a published plugin, ` +\n `you may need to upgrade your @babel/core version.`,\n );\n }\n } else {\n throw new Error(\"More than one plugin attempted to override codegen.\");\n }\n\n // Decoded maps are faster to merge, so we attempt to get use the decodedMap\n // first. But to preserve backwards compat with older Generator, we'll fall\n // back to the encoded map.\n let { code: outputCode, decodedMap: outputMap = result.map } = result;\n\n // For backwards compat.\n if (result.__mergedMap) {\n /**\n * @see mergeSourceMap\n */\n outputMap = { ...result.map };\n } else {\n if (outputMap) {\n if (inputMap) {\n // mergeSourceMap returns an encoded map\n outputMap = mergeSourceMap(\n inputMap.toObject(),\n outputMap,\n generatorOpts.sourceFileName,\n );\n } else {\n // We cannot output a decoded map, so retrieve the encoded form. Because\n // the decoded form is free, it's fine to prioritize decoded first.\n outputMap = result.map;\n }\n }\n }\n\n if (opts.sourceMaps === \"inline\" || opts.sourceMaps === \"both\") {\n outputCode += \"\\n\" + convertSourceMap.fromObject(outputMap).toComment();\n }\n\n if (opts.sourceMaps === \"inline\") {\n outputMap = null;\n }\n\n return { outputCode, outputMap };\n}\n"],"mappings":";;;;;;AACA,SAAAA,kBAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,iBAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAE,WAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,UAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAGA,IAAAG,SAAA,GAAAF,OAAA;AAEe,SAASG,YAAYA,CAClCC,YAA0B,EAC1BC,IAAU,EAIV;EACA,MAAM;IAAEC,IAAI;IAAEC,GAAG;IAAEC,IAAI;IAAEC;EAAS,CAAC,GAAGJ,IAAI;EAC1C,MAAM;IAAEK;EAAc,CAAC,GAAGJ,IAAI;EAE9BI,aAAa,CAACC,cAAc,GAAGF,QAAQ,oBAARA,QAAQ,CAAEG,QAAQ,CAAC,CAAC;EAEnD,MAAMC,OAAO,GAAG,EAAE;EAClB,KAAK,MAAMC,OAAO,IAAIV,YAAY,EAAE;IAClC,KAAK,MAAMW,MAAM,IAAID,OAAO,EAAE;MAC5B,MAAM;QAAEE;MAAkB,CAAC,GAAGD,MAAM;MACpC,IAAIC,iBAAiB,EAAE;QACrB,MAAMC,MAAM,GAAGD,iBAAiB,CAACT,GAAG,EAAEG,aAAa,EAAEF,IAAI,EAAEU,oBAAQ,CAAC;QAEpE,IAAID,MAAM,KAAKE,SAAS,EAAEN,OAAO,CAACO,IAAI,CAACH,MAAM,CAAC;MAChD;IACF;EACF;EAEA,IAAIA,MAAM;EACV,IAAIJ,OAAO,CAACQ,MAAM,KAAK,CAAC,EAAE;IACxBJ,MAAM,GAAG,IAAAC,oBAAQ,EAACX,GAAG,EAAEG,aAAa,EAAEF,IAAI,CAAC;EAC7C,CAAC,MAAM,IAAIK,OAAO,CAACQ,MAAM,KAAK,CAAC,EAAE;IAC/BJ,MAAM,GAAGJ,OAAO,CAAC,CAAC,CAAC;IAEnB,IAAI,OAAOI,MAAM,CAACK,IAAI,KAAK,UAAU,EAAE;MACrC,MAAM,IAAIC,KAAK,CACb,kDAAkD,GAChD,wDAAwD,GACxD,sCAAsC,GACtC,mDACJ,CAAC;IACH;EACF,CAAC,MAAM;IACL,MAAM,IAAIA,KAAK,CAAC,qDAAqD,CAAC;EACxE;EAKA,IAAI;IAAEf,IAAI,EAAEgB,UAAU;IAAEC,UAAU,EAAEC,SAAS,GAAGT,MAAM,CAACU;EAAI,CAAC,GAAGV,MAAM;EAGrE,IAAIA,MAAM,CAACW,WAAW,EAAE;IAItBF,SAAS,GAAAG,MAAA,CAAAC,MAAA,KAAQb,MAAM,CAACU,GAAG,CAAE;EAC/B,CAAC,MAAM;IACL,IAAID,SAAS,EAAE;MACb,IAAIjB,QAAQ,EAAE;QAEZiB,SAAS,GAAG,IAAAK,iBAAc,EACxBtB,QAAQ,CAACG,QAAQ,CAAC,CAAC,EACnBc,SAAS,EACThB,aAAa,CAACsB,cAChB,CAAC;MACH,CAAC,MAAM;QAGLN,SAAS,GAAGT,MAAM,CAACU,GAAG;MACxB;IACF;EACF;EAEA,IAAIrB,IAAI,CAAC2B,UAAU,KAAK,QAAQ,IAAI3B,IAAI,CAAC2B,UAAU,KAAK,MAAM,EAAE;IAC9DT,UAAU,IAAI,IAAI,GAAGU,kBAAeA,CAAC,CAACC,UAAU,CAACT,SAAS,CAAC,CAACU,SAAS,CAAC,CAAC;EACzE;EAEA,IAAI9B,IAAI,CAAC2B,UAAU,KAAK,QAAQ,EAAE;IAChCP,SAAS,GAAG,IAAI;EAClB;EAEA,OAAO;IAAEF,UAAU;IAAEE;EAAU,CAAC;AAClC;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/transformation/file/merge-map.js b/node_modules/@babel/core/lib/transformation/file/merge-map.js new file mode 100644 index 00000000..cf3971b2 --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/file/merge-map.js @@ -0,0 +1,37 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = mergeSourceMap; +function _remapping() { + const data = require("@ampproject/remapping"); + _remapping = function () { + return data; + }; + return data; +} +function mergeSourceMap(inputMap, map, sourceFileName) { + const source = sourceFileName.replace(/\\/g, "/"); + let found = false; + const result = _remapping()(rootless(map), (s, ctx) => { + if (s === source && !found) { + found = true; + ctx.source = ""; + return rootless(inputMap); + } + return null; + }); + if (typeof inputMap.sourceRoot === "string") { + result.sourceRoot = inputMap.sourceRoot; + } + return Object.assign({}, result); +} +function rootless(map) { + return Object.assign({}, map, { + sourceRoot: null + }); +} +0 && 0; + +//# sourceMappingURL=merge-map.js.map diff --git a/node_modules/@babel/core/lib/transformation/file/merge-map.js.map b/node_modules/@babel/core/lib/transformation/file/merge-map.js.map new file mode 100644 index 00000000..786f56dc --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/file/merge-map.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_remapping","data","require","mergeSourceMap","inputMap","map","sourceFileName","source","replace","found","result","remapping","rootless","s","ctx","sourceRoot","Object","assign"],"sources":["../../../src/transformation/file/merge-map.ts"],"sourcesContent":["type SourceMap = any;\nimport remapping from \"@ampproject/remapping\";\n\nexport default function mergeSourceMap(\n inputMap: SourceMap,\n map: SourceMap,\n sourceFileName: string,\n): SourceMap {\n // On win32 machines, the sourceFileName uses backslash paths like\n // `C:\\foo\\bar.js`. But sourcemaps are always posix paths, so we need to\n // normalize to regular slashes before we can merge (else we won't find the\n // source associated with our input map).\n // This mirrors code done while generating the output map at\n // https://github.com/babel/babel/blob/5c2fcadc9ae34fd20dd72b1111d5cf50476d700d/packages/babel-generator/src/source-map.ts#L102\n const source = sourceFileName.replace(/\\\\/g, \"/\");\n\n // Prevent an infinite recursion if one of the input map's sources has the\n // same resolved path as the input map. In the case, it would keep find the\n // input map, then get it's sources which will include a path like the input\n // map, on and on.\n let found = false;\n const result = remapping(rootless(map), (s, ctx) => {\n if (s === source && !found) {\n found = true;\n // We empty the source location, which will prevent the sourcemap from\n // becoming relative to the input's location. Eg, if we're transforming a\n // file 'foo/bar.js', and it is a transformation of a `baz.js` file in the\n // same directory, the expected output is just `baz.js`. Without this step,\n // it would become `foo/baz.js`.\n ctx.source = \"\";\n\n return rootless(inputMap);\n }\n\n return null;\n });\n\n if (typeof inputMap.sourceRoot === \"string\") {\n result.sourceRoot = inputMap.sourceRoot;\n }\n\n // remapping returns a SourceMap class type, but this breaks code downstream in\n // @babel/traverse and @babel/types that relies on data being plain objects.\n // When it encounters the sourcemap type it outputs a \"don't know how to turn\n // this value into a node\" error. As a result, we are converting the merged\n // sourcemap to a plain js object.\n return { ...result };\n}\n\nfunction rootless(map: SourceMap): SourceMap {\n return {\n ...map,\n\n // This is a bit hack. Remapping will create absolute sources in our\n // sourcemap, but we want to maintain sources relative to the sourceRoot.\n // We'll re-add the sourceRoot after remapping.\n sourceRoot: null,\n };\n}\n"],"mappings":";;;;;;AACA,SAAAA,WAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,UAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEe,SAASE,cAAcA,CACpCC,QAAmB,EACnBC,GAAc,EACdC,cAAsB,EACX;EAOX,MAAMC,MAAM,GAAGD,cAAc,CAACE,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;EAMjD,IAAIC,KAAK,GAAG,KAAK;EACjB,MAAMC,MAAM,GAAGC,WAAQA,CAAC,CAACC,QAAQ,CAACP,GAAG,CAAC,EAAE,CAACQ,CAAC,EAAEC,GAAG,KAAK;IAClD,IAAID,CAAC,KAAKN,MAAM,IAAI,CAACE,KAAK,EAAE;MAC1BA,KAAK,GAAG,IAAI;MAMZK,GAAG,CAACP,MAAM,GAAG,EAAE;MAEf,OAAOK,QAAQ,CAACR,QAAQ,CAAC;IAC3B;IAEA,OAAO,IAAI;EACb,CAAC,CAAC;EAEF,IAAI,OAAOA,QAAQ,CAACW,UAAU,KAAK,QAAQ,EAAE;IAC3CL,MAAM,CAACK,UAAU,GAAGX,QAAQ,CAACW,UAAU;EACzC;EAOA,OAAAC,MAAA,CAAAC,MAAA,KAAYP,MAAM;AACpB;AAEA,SAASE,QAAQA,CAACP,GAAc,EAAa;EAC3C,OAAAW,MAAA,CAAAC,MAAA,KACKZ,GAAG;IAKNU,UAAU,EAAE;EAAI;AAEpB;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/transformation/index.js b/node_modules/@babel/core/lib/transformation/index.js new file mode 100644 index 00000000..7997e0af --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/index.js @@ -0,0 +1,92 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.run = run; +function _traverse() { + const data = require("@babel/traverse"); + _traverse = function () { + return data; + }; + return data; +} +var _pluginPass = require("./plugin-pass.js"); +var _blockHoistPlugin = require("./block-hoist-plugin.js"); +var _normalizeOpts = require("./normalize-opts.js"); +var _normalizeFile = require("./normalize-file.js"); +var _generate = require("./file/generate.js"); +var _deepArray = require("../config/helpers/deep-array.js"); +var _async = require("../gensync-utils/async.js"); +function* run(config, code, ast) { + const file = yield* (0, _normalizeFile.default)(config.passes, (0, _normalizeOpts.default)(config), code, ast); + const opts = file.opts; + try { + yield* transformFile(file, config.passes); + } catch (e) { + var _opts$filename; + e.message = `${(_opts$filename = opts.filename) != null ? _opts$filename : "unknown file"}: ${e.message}`; + if (!e.code) { + e.code = "BABEL_TRANSFORM_ERROR"; + } + throw e; + } + let outputCode, outputMap; + try { + if (opts.code !== false) { + ({ + outputCode, + outputMap + } = (0, _generate.default)(config.passes, file)); + } + } catch (e) { + var _opts$filename2; + e.message = `${(_opts$filename2 = opts.filename) != null ? _opts$filename2 : "unknown file"}: ${e.message}`; + if (!e.code) { + e.code = "BABEL_GENERATE_ERROR"; + } + throw e; + } + return { + metadata: file.metadata, + options: opts, + ast: opts.ast === true ? file.ast : null, + code: outputCode === undefined ? null : outputCode, + map: outputMap === undefined ? null : outputMap, + sourceType: file.ast.program.sourceType, + externalDependencies: (0, _deepArray.flattenToSet)(config.externalDependencies) + }; +} +function* transformFile(file, pluginPasses) { + const async = yield* (0, _async.isAsync)(); + for (const pluginPairs of pluginPasses) { + const passPairs = []; + const passes = []; + const visitors = []; + for (const plugin of pluginPairs.concat([(0, _blockHoistPlugin.default)()])) { + const pass = new _pluginPass.default(file, plugin.key, plugin.options, async); + passPairs.push([plugin, pass]); + passes.push(pass); + visitors.push(plugin.visitor); + } + for (const [plugin, pass] of passPairs) { + if (plugin.pre) { + const fn = (0, _async.maybeAsync)(plugin.pre, `You appear to be using an async plugin/preset, but Babel has been called synchronously`); + yield* fn.call(pass, file); + } + } + const visitor = _traverse().default.visitors.merge(visitors, passes, file.opts.wrapPluginVisitorMethod); + { + (0, _traverse().default)(file.ast, visitor, file.scope); + } + for (const [plugin, pass] of passPairs) { + if (plugin.post) { + const fn = (0, _async.maybeAsync)(plugin.post, `You appear to be using an async plugin/preset, but Babel has been called synchronously`); + yield* fn.call(pass, file); + } + } + } +} +0 && 0; + +//# sourceMappingURL=index.js.map diff --git a/node_modules/@babel/core/lib/transformation/index.js.map b/node_modules/@babel/core/lib/transformation/index.js.map new file mode 100644 index 00000000..2d3ea15d --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/index.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_traverse","data","require","_pluginPass","_blockHoistPlugin","_normalizeOpts","_normalizeFile","_generate","_deepArray","_async","run","config","code","ast","file","normalizeFile","passes","normalizeOptions","opts","transformFile","e","_opts$filename","message","filename","outputCode","outputMap","generateCode","_opts$filename2","metadata","options","undefined","map","sourceType","program","externalDependencies","flattenToSet","pluginPasses","async","isAsync","pluginPairs","passPairs","visitors","plugin","concat","loadBlockHoistPlugin","pass","PluginPass","key","push","visitor","pre","fn","maybeAsync","call","traverse","merge","wrapPluginVisitorMethod","scope","post"],"sources":["../../src/transformation/index.ts"],"sourcesContent":["import traverse from \"@babel/traverse\";\nimport type * as t from \"@babel/types\";\nimport type { GeneratorResult } from \"@babel/generator\";\n\nimport type { Handler } from \"gensync\";\n\nimport type { ResolvedConfig, Plugin, PluginPasses } from \"../config/index.ts\";\n\nimport PluginPass from \"./plugin-pass.ts\";\nimport loadBlockHoistPlugin from \"./block-hoist-plugin.ts\";\nimport normalizeOptions from \"./normalize-opts.ts\";\nimport normalizeFile from \"./normalize-file.ts\";\n\nimport generateCode from \"./file/generate.ts\";\nimport type File from \"./file/file.ts\";\n\nimport { flattenToSet } from \"../config/helpers/deep-array.ts\";\nimport { isAsync, maybeAsync } from \"../gensync-utils/async.ts\";\n\nexport type FileResultCallback = {\n (err: Error, file: null): void;\n (err: null, file: FileResult | null): void;\n};\n\nexport type FileResult = {\n metadata: { [key: string]: any };\n options: { [key: string]: any };\n ast: t.File | null;\n code: string | null;\n map: GeneratorResult[\"map\"] | null;\n sourceType: \"script\" | \"module\";\n externalDependencies: Set;\n};\n\nexport function* run(\n config: ResolvedConfig,\n code: string,\n ast?: t.File | t.Program | null,\n): Handler {\n const file = yield* normalizeFile(\n config.passes,\n normalizeOptions(config),\n code,\n ast,\n );\n\n const opts = file.opts;\n try {\n yield* transformFile(file, config.passes);\n } catch (e) {\n e.message = `${opts.filename ?? \"unknown file\"}: ${e.message}`;\n if (!e.code) {\n e.code = \"BABEL_TRANSFORM_ERROR\";\n }\n throw e;\n }\n\n let outputCode, outputMap;\n try {\n if (opts.code !== false) {\n ({ outputCode, outputMap } = generateCode(config.passes, file));\n }\n } catch (e) {\n e.message = `${opts.filename ?? \"unknown file\"}: ${e.message}`;\n if (!e.code) {\n e.code = \"BABEL_GENERATE_ERROR\";\n }\n throw e;\n }\n\n return {\n metadata: file.metadata,\n options: opts,\n ast: opts.ast === true ? file.ast : null,\n code: outputCode === undefined ? null : outputCode,\n map: outputMap === undefined ? null : outputMap,\n sourceType: file.ast.program.sourceType,\n externalDependencies: flattenToSet(config.externalDependencies),\n };\n}\n\nfunction* transformFile(file: File, pluginPasses: PluginPasses): Handler {\n const async = yield* isAsync();\n\n for (const pluginPairs of pluginPasses) {\n const passPairs: [Plugin, PluginPass][] = [];\n const passes = [];\n const visitors = [];\n\n for (const plugin of pluginPairs.concat([loadBlockHoistPlugin()])) {\n const pass = new PluginPass(file, plugin.key, plugin.options, async);\n\n passPairs.push([plugin, pass]);\n passes.push(pass);\n visitors.push(plugin.visitor);\n }\n\n for (const [plugin, pass] of passPairs) {\n if (plugin.pre) {\n const fn = maybeAsync(\n plugin.pre,\n `You appear to be using an async plugin/preset, but Babel has been called synchronously`,\n );\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n yield* fn.call(pass, file);\n }\n }\n\n // merge all plugin visitors into a single visitor\n const visitor = traverse.visitors.merge(\n visitors,\n passes,\n file.opts.wrapPluginVisitorMethod,\n );\n if (process.env.BABEL_8_BREAKING) {\n traverse(file.ast.program, visitor, file.scope, null, file.path, true);\n } else {\n traverse(file.ast, visitor, file.scope);\n }\n\n for (const [plugin, pass] of passPairs) {\n if (plugin.post) {\n const fn = maybeAsync(\n plugin.post,\n `You appear to be using an async plugin/preset, but Babel has been called synchronously`,\n );\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n yield* fn.call(pass, file);\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/transformation/normalize-file.js b/node_modules/@babel/core/lib/transformation/normalize-file.js new file mode 100644 index 00000000..20c5dc07 --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/normalize-file.js @@ -0,0 +1,129 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = normalizeFile; +function _fs() { + const data = require("fs"); + _fs = function () { + return data; + }; + return data; +} +function _path() { + const data = require("path"); + _path = function () { + return data; + }; + return data; +} +function _debug() { + const data = require("debug"); + _debug = function () { + return data; + }; + return data; +} +function _t() { + const data = require("@babel/types"); + _t = function () { + return data; + }; + return data; +} +function _convertSourceMap() { + const data = require("convert-source-map"); + _convertSourceMap = function () { + return data; + }; + return data; +} +var _file = require("./file/file.js"); +var _index = require("../parser/index.js"); +var _cloneDeep = require("./util/clone-deep.js"); +const { + file, + traverseFast +} = _t(); +const debug = _debug()("babel:transform:file"); +const INLINE_SOURCEMAP_REGEX = /^[@#]\s+sourceMappingURL=data:(?:application|text)\/json;(?:charset[:=]\S+?;)?base64,.*$/; +const EXTERNAL_SOURCEMAP_REGEX = /^[@#][ \t]+sourceMappingURL=([^\s'"`]+)[ \t]*$/; +function* normalizeFile(pluginPasses, options, code, ast) { + code = `${code || ""}`; + if (ast) { + if (ast.type === "Program") { + ast = file(ast, [], []); + } else if (ast.type !== "File") { + throw new Error("AST root must be a Program or File node"); + } + if (options.cloneInputAst) { + ast = (0, _cloneDeep.default)(ast); + } + } else { + ast = yield* (0, _index.default)(pluginPasses, options, code); + } + let inputMap = null; + if (options.inputSourceMap !== false) { + if (typeof options.inputSourceMap === "object") { + inputMap = _convertSourceMap().fromObject(options.inputSourceMap); + } + if (!inputMap) { + const lastComment = extractComments(INLINE_SOURCEMAP_REGEX, ast); + if (lastComment) { + try { + inputMap = _convertSourceMap().fromComment("//" + lastComment); + } catch (err) { + { + debug("discarding unknown inline input sourcemap"); + } + } + } + } + if (!inputMap) { + const lastComment = extractComments(EXTERNAL_SOURCEMAP_REGEX, ast); + if (typeof options.filename === "string" && lastComment) { + try { + const match = EXTERNAL_SOURCEMAP_REGEX.exec(lastComment); + const inputMapContent = _fs().readFileSync(_path().resolve(_path().dirname(options.filename), match[1]), "utf8"); + inputMap = _convertSourceMap().fromJSON(inputMapContent); + } catch (err) { + debug("discarding unknown file input sourcemap", err); + } + } else if (lastComment) { + debug("discarding un-loadable file input sourcemap"); + } + } + } + return new _file.default(options, { + code, + ast: ast, + inputMap + }); +} +function extractCommentsFromList(regex, comments, lastComment) { + if (comments) { + comments = comments.filter(({ + value + }) => { + if (regex.test(value)) { + lastComment = value; + return false; + } + return true; + }); + } + return [comments, lastComment]; +} +function extractComments(regex, ast) { + let lastComment = null; + traverseFast(ast, node => { + [node.leadingComments, lastComment] = extractCommentsFromList(regex, node.leadingComments, lastComment); + [node.innerComments, lastComment] = extractCommentsFromList(regex, node.innerComments, lastComment); + [node.trailingComments, lastComment] = extractCommentsFromList(regex, node.trailingComments, lastComment); + }); + return lastComment; +} +0 && 0; + +//# sourceMappingURL=normalize-file.js.map diff --git a/node_modules/@babel/core/lib/transformation/normalize-file.js.map b/node_modules/@babel/core/lib/transformation/normalize-file.js.map new file mode 100644 index 00000000..e591c7b1 --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/normalize-file.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_fs","data","require","_path","_debug","_t","_convertSourceMap","_file","_index","_cloneDeep","file","traverseFast","debug","buildDebug","INLINE_SOURCEMAP_REGEX","EXTERNAL_SOURCEMAP_REGEX","normalizeFile","pluginPasses","options","code","ast","type","Error","cloneInputAst","cloneDeep","parser","inputMap","inputSourceMap","convertSourceMap","fromObject","lastComment","extractComments","fromComment","err","filename","match","exec","inputMapContent","fs","readFileSync","path","resolve","dirname","fromJSON","File","extractCommentsFromList","regex","comments","filter","value","test","node","leadingComments","innerComments","trailingComments"],"sources":["../../src/transformation/normalize-file.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport buildDebug from \"debug\";\nimport type { Handler } from \"gensync\";\nimport { file, traverseFast } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport type { PluginPasses } from \"../config/index.ts\";\nimport convertSourceMap from \"convert-source-map\";\nimport type { SourceMapConverter as Converter } from \"convert-source-map\";\nimport File from \"./file/file.ts\";\nimport parser from \"../parser/index.ts\";\nimport cloneDeep from \"./util/clone-deep.ts\";\n\nconst debug = buildDebug(\"babel:transform:file\");\n\n// These regexps are copied from the convert-source-map package,\n// but without // or /* at the beginning of the comment.\n\nconst INLINE_SOURCEMAP_REGEX =\n /^[@#]\\s+sourceMappingURL=data:(?:application|text)\\/json;(?:charset[:=]\\S+?;)?base64,.*$/;\nconst EXTERNAL_SOURCEMAP_REGEX =\n /^[@#][ \\t]+sourceMappingURL=([^\\s'\"`]+)[ \\t]*$/;\n\nexport type NormalizedFile = {\n code: string;\n ast: t.File;\n inputMap: Converter | null;\n};\n\nexport default function* normalizeFile(\n pluginPasses: PluginPasses,\n options: { [key: string]: any },\n code: string,\n ast?: t.File | t.Program | null,\n): Handler {\n code = `${code || \"\"}`;\n\n if (ast) {\n if (ast.type === \"Program\") {\n ast = file(ast, [], []);\n } else if (ast.type !== \"File\") {\n throw new Error(\"AST root must be a Program or File node\");\n }\n\n if (options.cloneInputAst) {\n ast = cloneDeep(ast);\n }\n } else {\n ast = yield* parser(pluginPasses, options, code);\n }\n\n let inputMap = null;\n if (options.inputSourceMap !== false) {\n // If an explicit object is passed in, it overrides the processing of\n // source maps that may be in the file itself.\n if (typeof options.inputSourceMap === \"object\") {\n inputMap = convertSourceMap.fromObject(options.inputSourceMap);\n }\n\n if (!inputMap) {\n const lastComment = extractComments(INLINE_SOURCEMAP_REGEX, ast);\n if (lastComment) {\n try {\n inputMap = convertSourceMap.fromComment(\"//\" + lastComment);\n } catch (err) {\n if (process.env.BABEL_8_BREAKING) {\n console.warn(\n \"discarding unknown inline input sourcemap\",\n options.filename,\n err,\n );\n } else {\n debug(\"discarding unknown inline input sourcemap\");\n }\n }\n }\n }\n\n if (!inputMap) {\n const lastComment = extractComments(EXTERNAL_SOURCEMAP_REGEX, ast);\n if (typeof options.filename === \"string\" && lastComment) {\n try {\n // when `lastComment` is non-null, EXTERNAL_SOURCEMAP_REGEX must have matches\n const match: [string, string] = EXTERNAL_SOURCEMAP_REGEX.exec(\n lastComment,\n ) as any;\n const inputMapContent = fs.readFileSync(\n path.resolve(path.dirname(options.filename), match[1]),\n \"utf8\",\n );\n inputMap = convertSourceMap.fromJSON(inputMapContent);\n } catch (err) {\n debug(\"discarding unknown file input sourcemap\", err);\n }\n } else if (lastComment) {\n debug(\"discarding un-loadable file input sourcemap\");\n }\n }\n }\n\n return new File(options, {\n code,\n ast: ast,\n inputMap,\n });\n}\n\nfunction extractCommentsFromList(\n regex: RegExp,\n comments: t.Comment[],\n lastComment: string | null,\n): [t.Comment[], string | null] {\n if (comments) {\n comments = comments.filter(({ value }) => {\n if (regex.test(value)) {\n lastComment = value;\n return false;\n }\n return true;\n });\n }\n return [comments, lastComment];\n}\n\nfunction extractComments(regex: RegExp, ast: t.Node) {\n let lastComment: string = null;\n traverseFast(ast, node => {\n [node.leadingComments, lastComment] = extractCommentsFromList(\n regex,\n node.leadingComments,\n lastComment,\n );\n [node.innerComments, lastComment] = extractCommentsFromList(\n regex,\n node.innerComments,\n lastComment,\n );\n [node.trailingComments, lastComment] = extractCommentsFromList(\n regex,\n node.trailingComments,\n lastComment,\n );\n });\n return lastComment;\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/transformation/normalize-opts.js b/node_modules/@babel/core/lib/transformation/normalize-opts.js new file mode 100644 index 00000000..20826fc2 --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/normalize-opts.js @@ -0,0 +1,59 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = normalizeOptions; +function _path() { + const data = require("path"); + _path = function () { + return data; + }; + return data; +} +function normalizeOptions(config) { + const { + filename, + cwd, + filenameRelative = typeof filename === "string" ? _path().relative(cwd, filename) : "unknown", + sourceType = "module", + inputSourceMap, + sourceMaps = !!inputSourceMap, + sourceRoot = config.options.moduleRoot, + sourceFileName = _path().basename(filenameRelative), + comments = true, + compact = "auto" + } = config.options; + const opts = config.options; + const options = Object.assign({}, opts, { + parserOpts: Object.assign({ + sourceType: _path().extname(filenameRelative) === ".mjs" ? "module" : sourceType, + sourceFileName: filename, + plugins: [] + }, opts.parserOpts), + generatorOpts: Object.assign({ + filename, + auxiliaryCommentBefore: opts.auxiliaryCommentBefore, + auxiliaryCommentAfter: opts.auxiliaryCommentAfter, + retainLines: opts.retainLines, + comments, + shouldPrintComment: opts.shouldPrintComment, + compact, + minified: opts.minified, + sourceMaps, + sourceRoot, + sourceFileName + }, opts.generatorOpts) + }); + for (const plugins of config.passes) { + for (const plugin of plugins) { + if (plugin.manipulateOptions) { + plugin.manipulateOptions(options, options.parserOpts); + } + } + } + return options; +} +0 && 0; + +//# sourceMappingURL=normalize-opts.js.map diff --git a/node_modules/@babel/core/lib/transformation/normalize-opts.js.map b/node_modules/@babel/core/lib/transformation/normalize-opts.js.map new file mode 100644 index 00000000..da09f019 --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/normalize-opts.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_path","data","require","normalizeOptions","config","filename","cwd","filenameRelative","path","relative","sourceType","inputSourceMap","sourceMaps","sourceRoot","options","moduleRoot","sourceFileName","basename","comments","compact","opts","Object","assign","parserOpts","extname","plugins","generatorOpts","auxiliaryCommentBefore","auxiliaryCommentAfter","retainLines","shouldPrintComment","minified","passes","plugin","manipulateOptions"],"sources":["../../src/transformation/normalize-opts.ts"],"sourcesContent":["import path from \"node:path\";\nimport type { ResolvedConfig } from \"../config/index.ts\";\n\nexport default function normalizeOptions(config: ResolvedConfig) {\n const {\n filename,\n cwd,\n filenameRelative = typeof filename === \"string\"\n ? path.relative(cwd, filename)\n : \"unknown\",\n sourceType = \"module\",\n inputSourceMap,\n sourceMaps = !!inputSourceMap,\n sourceRoot = process.env.BABEL_8_BREAKING\n ? undefined\n : config.options.moduleRoot,\n\n sourceFileName = path.basename(filenameRelative),\n\n comments = true,\n compact = \"auto\",\n } = config.options;\n\n const opts = config.options;\n\n const options = {\n ...opts,\n\n parserOpts: {\n sourceType:\n path.extname(filenameRelative) === \".mjs\" ? \"module\" : sourceType,\n\n sourceFileName: filename,\n plugins: [],\n ...opts.parserOpts,\n },\n\n generatorOpts: {\n // General generator flags.\n filename,\n\n auxiliaryCommentBefore: opts.auxiliaryCommentBefore,\n auxiliaryCommentAfter: opts.auxiliaryCommentAfter,\n retainLines: opts.retainLines,\n comments,\n shouldPrintComment: opts.shouldPrintComment,\n compact,\n minified: opts.minified,\n\n // Source-map generation flags.\n sourceMaps,\n\n sourceRoot,\n sourceFileName,\n ...opts.generatorOpts,\n },\n };\n\n for (const plugins of config.passes) {\n for (const plugin of plugins) {\n if (plugin.manipulateOptions) {\n plugin.manipulateOptions(options, options.parserOpts);\n }\n }\n }\n\n return options;\n}\n"],"mappings":";;;;;;AAAA,SAAAA,MAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,KAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAGe,SAASE,gBAAgBA,CAACC,MAAsB,EAAE;EAC/D,MAAM;IACJC,QAAQ;IACRC,GAAG;IACHC,gBAAgB,GAAG,OAAOF,QAAQ,KAAK,QAAQ,GAC3CG,MAAGA,CAAC,CAACC,QAAQ,CAACH,GAAG,EAAED,QAAQ,CAAC,GAC5B,SAAS;IACbK,UAAU,GAAG,QAAQ;IACrBC,cAAc;IACdC,UAAU,GAAG,CAAC,CAACD,cAAc;IAC7BE,UAAU,GAENT,MAAM,CAACU,OAAO,CAACC,UAAU;IAE7BC,cAAc,GAAGR,MAAGA,CAAC,CAACS,QAAQ,CAACV,gBAAgB,CAAC;IAEhDW,QAAQ,GAAG,IAAI;IACfC,OAAO,GAAG;EACZ,CAAC,GAAGf,MAAM,CAACU,OAAO;EAElB,MAAMM,IAAI,GAAGhB,MAAM,CAACU,OAAO;EAE3B,MAAMA,OAAO,GAAAO,MAAA,CAAAC,MAAA,KACRF,IAAI;IAEPG,UAAU,EAAAF,MAAA,CAAAC,MAAA;MACRZ,UAAU,EACRF,MAAGA,CAAC,CAACgB,OAAO,CAACjB,gBAAgB,CAAC,KAAK,MAAM,GAAG,QAAQ,GAAGG,UAAU;MAEnEM,cAAc,EAAEX,QAAQ;MACxBoB,OAAO,EAAE;IAAE,GACRL,IAAI,CAACG,UAAU,CACnB;IAEDG,aAAa,EAAAL,MAAA,CAAAC,MAAA;MAEXjB,QAAQ;MAERsB,sBAAsB,EAAEP,IAAI,CAACO,sBAAsB;MACnDC,qBAAqB,EAAER,IAAI,CAACQ,qBAAqB;MACjDC,WAAW,EAAET,IAAI,CAACS,WAAW;MAC7BX,QAAQ;MACRY,kBAAkB,EAAEV,IAAI,CAACU,kBAAkB;MAC3CX,OAAO;MACPY,QAAQ,EAAEX,IAAI,CAACW,QAAQ;MAGvBnB,UAAU;MAEVC,UAAU;MACVG;IAAc,GACXI,IAAI,CAACM,aAAa;EACtB,EACF;EAED,KAAK,MAAMD,OAAO,IAAIrB,MAAM,CAAC4B,MAAM,EAAE;IACnC,KAAK,MAAMC,MAAM,IAAIR,OAAO,EAAE;MAC5B,IAAIQ,MAAM,CAACC,iBAAiB,EAAE;QAC5BD,MAAM,CAACC,iBAAiB,CAACpB,OAAO,EAAEA,OAAO,CAACS,UAAU,CAAC;MACvD;IACF;EACF;EAEA,OAAOT,OAAO;AAChB;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/transformation/plugin-pass.js b/node_modules/@babel/core/lib/transformation/plugin-pass.js new file mode 100644 index 00000000..d8f2c5cc --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/plugin-pass.js @@ -0,0 +1,50 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +class PluginPass { + constructor(file, key, options, isAsync) { + this._map = new Map(); + this.key = void 0; + this.file = void 0; + this.opts = void 0; + this.cwd = void 0; + this.filename = void 0; + this.isAsync = void 0; + this.key = key; + this.file = file; + this.opts = options || {}; + this.cwd = file.opts.cwd; + this.filename = file.opts.filename; + this.isAsync = isAsync; + } + set(key, val) { + this._map.set(key, val); + } + get(key) { + return this._map.get(key); + } + availableHelper(name, versionRange) { + return this.file.availableHelper(name, versionRange); + } + addHelper(name) { + return this.file.addHelper(name); + } + buildCodeFrameError(node, msg, _Error) { + return this.file.buildCodeFrameError(node, msg, _Error); + } +} +exports.default = PluginPass; +{ + PluginPass.prototype.getModuleName = function getModuleName() { + return this.file.getModuleName(); + }; + PluginPass.prototype.addImport = function addImport() { + this.file.addImport(); + }; +} +0 && 0; + +//# sourceMappingURL=plugin-pass.js.map diff --git a/node_modules/@babel/core/lib/transformation/plugin-pass.js.map b/node_modules/@babel/core/lib/transformation/plugin-pass.js.map new file mode 100644 index 00000000..e691707f --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/plugin-pass.js.map @@ -0,0 +1 @@ +{"version":3,"names":["PluginPass","constructor","file","key","options","isAsync","_map","Map","opts","cwd","filename","set","val","get","availableHelper","name","versionRange","addHelper","buildCodeFrameError","node","msg","_Error","exports","default","prototype","getModuleName","addImport"],"sources":["../../src/transformation/plugin-pass.ts"],"sourcesContent":["import type * as t from \"@babel/types\";\nimport type File from \"./file/file.ts\";\n\nexport default class PluginPass {\n _map: Map = new Map();\n key: string | undefined | null;\n file: File;\n opts: Partial;\n\n /**\n * The working directory that Babel's programmatic options are loaded\n * relative to.\n */\n cwd: string;\n\n /** The absolute path of the file being compiled. */\n filename: string | void;\n\n /**\n * Is Babel executed in async mode or not.\n */\n isAsync: boolean;\n\n constructor(\n file: File,\n key: string | null,\n options: Options | undefined,\n isAsync: boolean,\n ) {\n this.key = key;\n this.file = file;\n this.opts = options || {};\n this.cwd = file.opts.cwd;\n this.filename = file.opts.filename;\n this.isAsync = isAsync;\n }\n\n set(key: unknown, val: unknown) {\n this._map.set(key, val);\n }\n\n get(key: unknown): any {\n return this._map.get(key);\n }\n\n availableHelper(name: string, versionRange?: string | null) {\n return this.file.availableHelper(name, versionRange);\n }\n\n addHelper(name: string) {\n return this.file.addHelper(name);\n }\n\n buildCodeFrameError(\n node: t.Node | undefined | null,\n msg: string,\n _Error?: typeof Error,\n ) {\n return this.file.buildCodeFrameError(node, msg, _Error);\n }\n}\n\nif (!process.env.BABEL_8_BREAKING) {\n (PluginPass as any).prototype.getModuleName = function getModuleName(\n this: PluginPass,\n ): string | undefined {\n // @ts-expect-error only exists in Babel 7\n return this.file.getModuleName();\n };\n (PluginPass as any).prototype.addImport = function addImport(\n this: PluginPass,\n ): void {\n // @ts-expect-error only exists in Babel 7\n this.file.addImport();\n };\n}\n"],"mappings":";;;;;;AAGe,MAAMA,UAAU,CAAmB;EAoBhDC,WAAWA,CACTC,IAAU,EACVC,GAAkB,EAClBC,OAA4B,EAC5BC,OAAgB,EAChB;IAAA,KAxBFC,IAAI,GAA0B,IAAIC,GAAG,CAAC,CAAC;IAAA,KACvCJ,GAAG;IAAA,KACHD,IAAI;IAAA,KACJM,IAAI;IAAA,KAMJC,GAAG;IAAA,KAGHC,QAAQ;IAAA,KAKRL,OAAO;IAQL,IAAI,CAACF,GAAG,GAAGA,GAAG;IACd,IAAI,CAACD,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACM,IAAI,GAAGJ,OAAO,IAAI,CAAC,CAAC;IACzB,IAAI,CAACK,GAAG,GAAGP,IAAI,CAACM,IAAI,CAACC,GAAG;IACxB,IAAI,CAACC,QAAQ,GAAGR,IAAI,CAACM,IAAI,CAACE,QAAQ;IAClC,IAAI,CAACL,OAAO,GAAGA,OAAO;EACxB;EAEAM,GAAGA,CAACR,GAAY,EAAES,GAAY,EAAE;IAC9B,IAAI,CAACN,IAAI,CAACK,GAAG,CAACR,GAAG,EAAES,GAAG,CAAC;EACzB;EAEAC,GAAGA,CAACV,GAAY,EAAO;IACrB,OAAO,IAAI,CAACG,IAAI,CAACO,GAAG,CAACV,GAAG,CAAC;EAC3B;EAEAW,eAAeA,CAACC,IAAY,EAAEC,YAA4B,EAAE;IAC1D,OAAO,IAAI,CAACd,IAAI,CAACY,eAAe,CAACC,IAAI,EAAEC,YAAY,CAAC;EACtD;EAEAC,SAASA,CAACF,IAAY,EAAE;IACtB,OAAO,IAAI,CAACb,IAAI,CAACe,SAAS,CAACF,IAAI,CAAC;EAClC;EAEAG,mBAAmBA,CACjBC,IAA+B,EAC/BC,GAAW,EACXC,MAAqB,EACrB;IACA,OAAO,IAAI,CAACnB,IAAI,CAACgB,mBAAmB,CAACC,IAAI,EAAEC,GAAG,EAAEC,MAAM,CAAC;EACzD;AACF;AAACC,OAAA,CAAAC,OAAA,GAAAvB,UAAA;AAEkC;EAChCA,UAAU,CAASwB,SAAS,CAACC,aAAa,GAAG,SAASA,aAAaA,CAAA,EAE9C;IAEpB,OAAO,IAAI,CAACvB,IAAI,CAACuB,aAAa,CAAC,CAAC;EAClC,CAAC;EACAzB,UAAU,CAASwB,SAAS,CAACE,SAAS,GAAG,SAASA,SAASA,CAAA,EAEpD;IAEN,IAAI,CAACxB,IAAI,CAACwB,SAAS,CAAC,CAAC;EACvB,CAAC;AACH;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/transformation/util/clone-deep.js b/node_modules/@babel/core/lib/transformation/util/clone-deep.js new file mode 100644 index 00000000..bc8eaa8a --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/util/clone-deep.js @@ -0,0 +1,56 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _default; +const circleSet = new Set(); +let depth = 0; +function deepClone(value, cache, allowCircle) { + if (value !== null) { + if (allowCircle) { + if (cache.has(value)) return cache.get(value); + } else if (++depth > 250) { + if (circleSet.has(value)) { + depth = 0; + circleSet.clear(); + throw new Error("Babel-deepClone: Cycles are not allowed in AST"); + } + circleSet.add(value); + } + let cloned; + if (Array.isArray(value)) { + cloned = new Array(value.length); + if (allowCircle) cache.set(value, cloned); + for (let i = 0; i < value.length; i++) { + cloned[i] = typeof value[i] !== "object" ? value[i] : deepClone(value[i], cache, allowCircle); + } + } else { + cloned = {}; + if (allowCircle) cache.set(value, cloned); + const keys = Object.keys(value); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + cloned[key] = typeof value[key] !== "object" ? value[key] : deepClone(value[key], cache, allowCircle || key === "leadingComments" || key === "innerComments" || key === "trailingComments" || key === "extra"); + } + } + if (!allowCircle) { + if (depth-- > 250) circleSet.delete(value); + } + return cloned; + } + return value; +} +function _default(value) { + if (typeof value !== "object") return value; + { + try { + return deepClone(value, new Map(), true); + } catch (_) { + return structuredClone(value); + } + } +} +0 && 0; + +//# sourceMappingURL=clone-deep.js.map diff --git a/node_modules/@babel/core/lib/transformation/util/clone-deep.js.map b/node_modules/@babel/core/lib/transformation/util/clone-deep.js.map new file mode 100644 index 00000000..2c0a5648 --- /dev/null +++ b/node_modules/@babel/core/lib/transformation/util/clone-deep.js.map @@ -0,0 +1 @@ +{"version":3,"names":["circleSet","Set","depth","deepClone","value","cache","allowCircle","has","get","clear","Error","add","cloned","Array","isArray","length","set","i","keys","Object","key","delete","_default","Map","_","structuredClone"],"sources":["../../../src/transformation/util/clone-deep.ts"],"sourcesContent":["const circleSet = new Set();\nlet depth = 0;\n// https://github.com/babel/babel/pull/14583#discussion_r882828856\nfunction deepClone(\n value: any,\n cache: Map,\n allowCircle: boolean,\n): any {\n if (value !== null) {\n if (allowCircle) {\n if (cache.has(value)) return cache.get(value);\n } else if (++depth > 250) {\n if (circleSet.has(value)) {\n depth = 0;\n circleSet.clear();\n throw new Error(\"Babel-deepClone: Cycles are not allowed in AST\");\n }\n circleSet.add(value);\n }\n let cloned: any;\n if (Array.isArray(value)) {\n cloned = new Array(value.length);\n if (allowCircle) cache.set(value, cloned);\n for (let i = 0; i < value.length; i++) {\n cloned[i] =\n typeof value[i] !== \"object\"\n ? value[i]\n : deepClone(value[i], cache, allowCircle);\n }\n } else {\n cloned = {};\n if (allowCircle) cache.set(value, cloned);\n const keys = Object.keys(value);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n cloned[key] =\n typeof value[key] !== \"object\"\n ? value[key]\n : deepClone(\n value[key],\n cache,\n allowCircle ||\n key === \"leadingComments\" ||\n key === \"innerComments\" ||\n key === \"trailingComments\" ||\n key === \"extra\",\n );\n }\n }\n if (!allowCircle) {\n if (depth-- > 250) circleSet.delete(value);\n }\n return cloned;\n }\n return value;\n}\n\nexport default function (value: T): T {\n if (typeof value !== \"object\") return value;\n\n if (process.env.BABEL_8_BREAKING) {\n if (!process.env.IS_PUBLISH && depth > 0) {\n throw new Error(\"depth > 0\");\n }\n return deepClone(value, new Map(), false);\n } else {\n try {\n return deepClone(value, new Map(), true);\n } catch (_) {\n return structuredClone(value);\n }\n }\n}\n"],"mappings":";;;;;;AAAA,MAAMA,SAAS,GAAG,IAAIC,GAAG,CAAC,CAAC;AAC3B,IAAIC,KAAK,GAAG,CAAC;AAEb,SAASC,SAASA,CAChBC,KAAU,EACVC,KAAoB,EACpBC,WAAoB,EACf;EACL,IAAIF,KAAK,KAAK,IAAI,EAAE;IAClB,IAAIE,WAAW,EAAE;MACf,IAAID,KAAK,CAACE,GAAG,CAACH,KAAK,CAAC,EAAE,OAAOC,KAAK,CAACG,GAAG,CAACJ,KAAK,CAAC;IAC/C,CAAC,MAAM,IAAI,EAAEF,KAAK,GAAG,GAAG,EAAE;MACxB,IAAIF,SAAS,CAACO,GAAG,CAACH,KAAK,CAAC,EAAE;QACxBF,KAAK,GAAG,CAAC;QACTF,SAAS,CAACS,KAAK,CAAC,CAAC;QACjB,MAAM,IAAIC,KAAK,CAAC,gDAAgD,CAAC;MACnE;MACAV,SAAS,CAACW,GAAG,CAACP,KAAK,CAAC;IACtB;IACA,IAAIQ,MAAW;IACf,IAAIC,KAAK,CAACC,OAAO,CAACV,KAAK,CAAC,EAAE;MACxBQ,MAAM,GAAG,IAAIC,KAAK,CAACT,KAAK,CAACW,MAAM,CAAC;MAChC,IAAIT,WAAW,EAAED,KAAK,CAACW,GAAG,CAACZ,KAAK,EAAEQ,MAAM,CAAC;MACzC,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGb,KAAK,CAACW,MAAM,EAAEE,CAAC,EAAE,EAAE;QACrCL,MAAM,CAACK,CAAC,CAAC,GACP,OAAOb,KAAK,CAACa,CAAC,CAAC,KAAK,QAAQ,GACxBb,KAAK,CAACa,CAAC,CAAC,GACRd,SAAS,CAACC,KAAK,CAACa,CAAC,CAAC,EAAEZ,KAAK,EAAEC,WAAW,CAAC;MAC/C;IACF,CAAC,MAAM;MACLM,MAAM,GAAG,CAAC,CAAC;MACX,IAAIN,WAAW,EAAED,KAAK,CAACW,GAAG,CAACZ,KAAK,EAAEQ,MAAM,CAAC;MACzC,MAAMM,IAAI,GAAGC,MAAM,CAACD,IAAI,CAACd,KAAK,CAAC;MAC/B,KAAK,IAAIa,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGC,IAAI,CAACH,MAAM,EAAEE,CAAC,EAAE,EAAE;QACpC,MAAMG,GAAG,GAAGF,IAAI,CAACD,CAAC,CAAC;QACnBL,MAAM,CAACQ,GAAG,CAAC,GACT,OAAOhB,KAAK,CAACgB,GAAG,CAAC,KAAK,QAAQ,GAC1BhB,KAAK,CAACgB,GAAG,CAAC,GACVjB,SAAS,CACPC,KAAK,CAACgB,GAAG,CAAC,EACVf,KAAK,EACLC,WAAW,IACTc,GAAG,KAAK,iBAAiB,IACzBA,GAAG,KAAK,eAAe,IACvBA,GAAG,KAAK,kBAAkB,IAC1BA,GAAG,KAAK,OACZ,CAAC;MACT;IACF;IACA,IAAI,CAACd,WAAW,EAAE;MAChB,IAAIJ,KAAK,EAAE,GAAG,GAAG,EAAEF,SAAS,CAACqB,MAAM,CAACjB,KAAK,CAAC;IAC5C;IACA,OAAOQ,MAAM;EACf;EACA,OAAOR,KAAK;AACd;AAEe,SAAAkB,SAAalB,KAAQ,EAAK;EACvC,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE,OAAOA,KAAK;EAOpC;IACL,IAAI;MACF,OAAOD,SAAS,CAACC,KAAK,EAAE,IAAImB,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;IAC1C,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV,OAAOC,eAAe,CAACrB,KAAK,CAAC;IAC/B;EACF;AACF;AAAC","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/lib/vendor/import-meta-resolve.js b/node_modules/@babel/core/lib/vendor/import-meta-resolve.js new file mode 100644 index 00000000..73d05ae0 --- /dev/null +++ b/node_modules/@babel/core/lib/vendor/import-meta-resolve.js @@ -0,0 +1,1043 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.moduleResolve = moduleResolve; +exports.resolve = resolve; +function _assert() { + const data = require("assert"); + _assert = function () { + return data; + }; + return data; +} +function _fs() { + const data = _interopRequireWildcard(require("fs"), true); + _fs = function () { + return data; + }; + return data; +} +function _process() { + const data = require("process"); + _process = function () { + return data; + }; + return data; +} +function _url() { + const data = require("url"); + _url = function () { + return data; + }; + return data; +} +function _path() { + const data = require("path"); + _path = function () { + return data; + }; + return data; +} +function _module() { + const data = require("module"); + _module = function () { + return data; + }; + return data; +} +function _v() { + const data = require("v8"); + _v = function () { + return data; + }; + return data; +} +function _util() { + const data = require("util"); + _util = function () { + return data; + }; + return data; +} +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +const own$1 = {}.hasOwnProperty; +const classRegExp = /^([A-Z][a-z\d]*)+$/; +const kTypes = new Set(['string', 'function', 'number', 'object', 'Function', 'Object', 'boolean', 'bigint', 'symbol']); +const codes = {}; +function formatList(array, type = 'and') { + return array.length < 3 ? array.join(` ${type} `) : `${array.slice(0, -1).join(', ')}, ${type} ${array[array.length - 1]}`; +} +const messages = new Map(); +const nodeInternalPrefix = '__node_internal_'; +let userStackTraceLimit; +codes.ERR_INVALID_ARG_TYPE = createError('ERR_INVALID_ARG_TYPE', (name, expected, actual) => { + _assert()(typeof name === 'string', "'name' must be a string"); + if (!Array.isArray(expected)) { + expected = [expected]; + } + let message = 'The '; + if (name.endsWith(' argument')) { + message += `${name} `; + } else { + const type = name.includes('.') ? 'property' : 'argument'; + message += `"${name}" ${type} `; + } + message += 'must be '; + const types = []; + const instances = []; + const other = []; + for (const value of expected) { + _assert()(typeof value === 'string', 'All expected entries have to be of type string'); + if (kTypes.has(value)) { + types.push(value.toLowerCase()); + } else if (classRegExp.exec(value) === null) { + _assert()(value !== 'object', 'The value "object" should be written as "Object"'); + other.push(value); + } else { + instances.push(value); + } + } + if (instances.length > 0) { + const pos = types.indexOf('object'); + if (pos !== -1) { + types.slice(pos, 1); + instances.push('Object'); + } + } + if (types.length > 0) { + message += `${types.length > 1 ? 'one of type' : 'of type'} ${formatList(types, 'or')}`; + if (instances.length > 0 || other.length > 0) message += ' or '; + } + if (instances.length > 0) { + message += `an instance of ${formatList(instances, 'or')}`; + if (other.length > 0) message += ' or '; + } + if (other.length > 0) { + if (other.length > 1) { + message += `one of ${formatList(other, 'or')}`; + } else { + if (other[0].toLowerCase() !== other[0]) message += 'an '; + message += `${other[0]}`; + } + } + message += `. Received ${determineSpecificType(actual)}`; + return message; +}, TypeError); +codes.ERR_INVALID_MODULE_SPECIFIER = createError('ERR_INVALID_MODULE_SPECIFIER', (request, reason, base = undefined) => { + return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ''}`; +}, TypeError); +codes.ERR_INVALID_PACKAGE_CONFIG = createError('ERR_INVALID_PACKAGE_CONFIG', (path, base, message) => { + return `Invalid package config ${path}${base ? ` while importing ${base}` : ''}${message ? `. ${message}` : ''}`; +}, Error); +codes.ERR_INVALID_PACKAGE_TARGET = createError('ERR_INVALID_PACKAGE_TARGET', (packagePath, key, target, isImport = false, base = undefined) => { + const relatedError = typeof target === 'string' && !isImport && target.length > 0 && !target.startsWith('./'); + if (key === '.') { + _assert()(isImport === false); + return `Invalid "exports" main target ${JSON.stringify(target)} defined ` + `in the package config ${packagePath}package.json${base ? ` imported from ${base}` : ''}${relatedError ? '; targets must start with "./"' : ''}`; + } + return `Invalid "${isImport ? 'imports' : 'exports'}" target ${JSON.stringify(target)} defined for '${key}' in the package config ${packagePath}package.json${base ? ` imported from ${base}` : ''}${relatedError ? '; targets must start with "./"' : ''}`; +}, Error); +codes.ERR_MODULE_NOT_FOUND = createError('ERR_MODULE_NOT_FOUND', (path, base, exactUrl = false) => { + return `Cannot find ${exactUrl ? 'module' : 'package'} '${path}' imported from ${base}`; +}, Error); +codes.ERR_NETWORK_IMPORT_DISALLOWED = createError('ERR_NETWORK_IMPORT_DISALLOWED', "import of '%s' by %s is not supported: %s", Error); +codes.ERR_PACKAGE_IMPORT_NOT_DEFINED = createError('ERR_PACKAGE_IMPORT_NOT_DEFINED', (specifier, packagePath, base) => { + return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ''} imported from ${base}`; +}, TypeError); +codes.ERR_PACKAGE_PATH_NOT_EXPORTED = createError('ERR_PACKAGE_PATH_NOT_EXPORTED', (packagePath, subpath, base = undefined) => { + if (subpath === '.') return `No "exports" main defined in ${packagePath}package.json${base ? ` imported from ${base}` : ''}`; + return `Package subpath '${subpath}' is not defined by "exports" in ${packagePath}package.json${base ? ` imported from ${base}` : ''}`; +}, Error); +codes.ERR_UNSUPPORTED_DIR_IMPORT = createError('ERR_UNSUPPORTED_DIR_IMPORT', "Directory import '%s' is not supported " + 'resolving ES modules imported from %s', Error); +codes.ERR_UNSUPPORTED_RESOLVE_REQUEST = createError('ERR_UNSUPPORTED_RESOLVE_REQUEST', 'Failed to resolve module specifier "%s" from "%s": Invalid relative URL or base scheme is not hierarchical.', TypeError); +codes.ERR_UNKNOWN_FILE_EXTENSION = createError('ERR_UNKNOWN_FILE_EXTENSION', (extension, path) => { + return `Unknown file extension "${extension}" for ${path}`; +}, TypeError); +codes.ERR_INVALID_ARG_VALUE = createError('ERR_INVALID_ARG_VALUE', (name, value, reason = 'is invalid') => { + let inspected = (0, _util().inspect)(value); + if (inspected.length > 128) { + inspected = `${inspected.slice(0, 128)}...`; + } + const type = name.includes('.') ? 'property' : 'argument'; + return `The ${type} '${name}' ${reason}. Received ${inspected}`; +}, TypeError); +function createError(sym, value, constructor) { + messages.set(sym, value); + return makeNodeErrorWithCode(constructor, sym); +} +function makeNodeErrorWithCode(Base, key) { + return NodeError; + function NodeError(...parameters) { + const limit = Error.stackTraceLimit; + if (isErrorStackTraceLimitWritable()) Error.stackTraceLimit = 0; + const error = new Base(); + if (isErrorStackTraceLimitWritable()) Error.stackTraceLimit = limit; + const message = getMessage(key, parameters, error); + Object.defineProperties(error, { + message: { + value: message, + enumerable: false, + writable: true, + configurable: true + }, + toString: { + value() { + return `${this.name} [${key}]: ${this.message}`; + }, + enumerable: false, + writable: true, + configurable: true + } + }); + captureLargerStackTrace(error); + error.code = key; + return error; + } +} +function isErrorStackTraceLimitWritable() { + try { + if (_v().startupSnapshot.isBuildingSnapshot()) { + return false; + } + } catch (_unused) {} + const desc = Object.getOwnPropertyDescriptor(Error, 'stackTraceLimit'); + if (desc === undefined) { + return Object.isExtensible(Error); + } + return own$1.call(desc, 'writable') && desc.writable !== undefined ? desc.writable : desc.set !== undefined; +} +function hideStackFrames(wrappedFunction) { + const hidden = nodeInternalPrefix + wrappedFunction.name; + Object.defineProperty(wrappedFunction, 'name', { + value: hidden + }); + return wrappedFunction; +} +const captureLargerStackTrace = hideStackFrames(function (error) { + const stackTraceLimitIsWritable = isErrorStackTraceLimitWritable(); + if (stackTraceLimitIsWritable) { + userStackTraceLimit = Error.stackTraceLimit; + Error.stackTraceLimit = Number.POSITIVE_INFINITY; + } + Error.captureStackTrace(error); + if (stackTraceLimitIsWritable) Error.stackTraceLimit = userStackTraceLimit; + return error; +}); +function getMessage(key, parameters, self) { + const message = messages.get(key); + _assert()(message !== undefined, 'expected `message` to be found'); + if (typeof message === 'function') { + _assert()(message.length <= parameters.length, `Code: ${key}; The provided arguments length (${parameters.length}) does not ` + `match the required ones (${message.length}).`); + return Reflect.apply(message, self, parameters); + } + const regex = /%[dfijoOs]/g; + let expectedLength = 0; + while (regex.exec(message) !== null) expectedLength++; + _assert()(expectedLength === parameters.length, `Code: ${key}; The provided arguments length (${parameters.length}) does not ` + `match the required ones (${expectedLength}).`); + if (parameters.length === 0) return message; + parameters.unshift(message); + return Reflect.apply(_util().format, null, parameters); +} +function determineSpecificType(value) { + if (value === null || value === undefined) { + return String(value); + } + if (typeof value === 'function' && value.name) { + return `function ${value.name}`; + } + if (typeof value === 'object') { + if (value.constructor && value.constructor.name) { + return `an instance of ${value.constructor.name}`; + } + return `${(0, _util().inspect)(value, { + depth: -1 + })}`; + } + let inspected = (0, _util().inspect)(value, { + colors: false + }); + if (inspected.length > 28) { + inspected = `${inspected.slice(0, 25)}...`; + } + return `type ${typeof value} (${inspected})`; +} +const hasOwnProperty$1 = {}.hasOwnProperty; +const { + ERR_INVALID_PACKAGE_CONFIG: ERR_INVALID_PACKAGE_CONFIG$1 +} = codes; +const cache = new Map(); +function read(jsonPath, { + base, + specifier +}) { + const existing = cache.get(jsonPath); + if (existing) { + return existing; + } + let string; + try { + string = _fs().default.readFileSync(_path().toNamespacedPath(jsonPath), 'utf8'); + } catch (error) { + const exception = error; + if (exception.code !== 'ENOENT') { + throw exception; + } + } + const result = { + exists: false, + pjsonPath: jsonPath, + main: undefined, + name: undefined, + type: 'none', + exports: undefined, + imports: undefined + }; + if (string !== undefined) { + let parsed; + try { + parsed = JSON.parse(string); + } catch (error_) { + const cause = error_; + const error = new ERR_INVALID_PACKAGE_CONFIG$1(jsonPath, (base ? `"${specifier}" from ` : '') + (0, _url().fileURLToPath)(base || specifier), cause.message); + error.cause = cause; + throw error; + } + result.exists = true; + if (hasOwnProperty$1.call(parsed, 'name') && typeof parsed.name === 'string') { + result.name = parsed.name; + } + if (hasOwnProperty$1.call(parsed, 'main') && typeof parsed.main === 'string') { + result.main = parsed.main; + } + if (hasOwnProperty$1.call(parsed, 'exports')) { + result.exports = parsed.exports; + } + if (hasOwnProperty$1.call(parsed, 'imports')) { + result.imports = parsed.imports; + } + if (hasOwnProperty$1.call(parsed, 'type') && (parsed.type === 'commonjs' || parsed.type === 'module')) { + result.type = parsed.type; + } + } + cache.set(jsonPath, result); + return result; +} +function getPackageScopeConfig(resolved) { + let packageJSONUrl = new URL('package.json', resolved); + while (true) { + const packageJSONPath = packageJSONUrl.pathname; + if (packageJSONPath.endsWith('node_modules/package.json')) { + break; + } + const packageConfig = read((0, _url().fileURLToPath)(packageJSONUrl), { + specifier: resolved + }); + if (packageConfig.exists) { + return packageConfig; + } + const lastPackageJSONUrl = packageJSONUrl; + packageJSONUrl = new URL('../package.json', packageJSONUrl); + if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) { + break; + } + } + const packageJSONPath = (0, _url().fileURLToPath)(packageJSONUrl); + return { + pjsonPath: packageJSONPath, + exists: false, + type: 'none' + }; +} +function getPackageType(url) { + return getPackageScopeConfig(url).type; +} +const { + ERR_UNKNOWN_FILE_EXTENSION +} = codes; +const hasOwnProperty = {}.hasOwnProperty; +const extensionFormatMap = { + __proto__: null, + '.cjs': 'commonjs', + '.js': 'module', + '.json': 'json', + '.mjs': 'module' +}; +function mimeToFormat(mime) { + if (mime && /\s*(text|application)\/javascript\s*(;\s*charset=utf-?8\s*)?/i.test(mime)) return 'module'; + if (mime === 'application/json') return 'json'; + return null; +} +const protocolHandlers = { + __proto__: null, + 'data:': getDataProtocolModuleFormat, + 'file:': getFileProtocolModuleFormat, + 'http:': getHttpProtocolModuleFormat, + 'https:': getHttpProtocolModuleFormat, + 'node:'() { + return 'builtin'; + } +}; +function getDataProtocolModuleFormat(parsed) { + const { + 1: mime + } = /^([^/]+\/[^;,]+)[^,]*?(;base64)?,/.exec(parsed.pathname) || [null, null, null]; + return mimeToFormat(mime); +} +function extname(url) { + const pathname = url.pathname; + let index = pathname.length; + while (index--) { + const code = pathname.codePointAt(index); + if (code === 47) { + return ''; + } + if (code === 46) { + return pathname.codePointAt(index - 1) === 47 ? '' : pathname.slice(index); + } + } + return ''; +} +function getFileProtocolModuleFormat(url, _context, ignoreErrors) { + const value = extname(url); + if (value === '.js') { + const packageType = getPackageType(url); + if (packageType !== 'none') { + return packageType; + } + return 'commonjs'; + } + if (value === '') { + const packageType = getPackageType(url); + if (packageType === 'none' || packageType === 'commonjs') { + return 'commonjs'; + } + return 'module'; + } + const format = extensionFormatMap[value]; + if (format) return format; + if (ignoreErrors) { + return undefined; + } + const filepath = (0, _url().fileURLToPath)(url); + throw new ERR_UNKNOWN_FILE_EXTENSION(value, filepath); +} +function getHttpProtocolModuleFormat() {} +function defaultGetFormatWithoutErrors(url, context) { + const protocol = url.protocol; + if (!hasOwnProperty.call(protocolHandlers, protocol)) { + return null; + } + return protocolHandlers[protocol](url, context, true) || null; +} +const { + ERR_INVALID_ARG_VALUE +} = codes; +const DEFAULT_CONDITIONS = Object.freeze(['node', 'import']); +const DEFAULT_CONDITIONS_SET = new Set(DEFAULT_CONDITIONS); +function getDefaultConditions() { + return DEFAULT_CONDITIONS; +} +function getDefaultConditionsSet() { + return DEFAULT_CONDITIONS_SET; +} +function getConditionsSet(conditions) { + if (conditions !== undefined && conditions !== getDefaultConditions()) { + if (!Array.isArray(conditions)) { + throw new ERR_INVALID_ARG_VALUE('conditions', conditions, 'expected an array'); + } + return new Set(conditions); + } + return getDefaultConditionsSet(); +} +const RegExpPrototypeSymbolReplace = RegExp.prototype[Symbol.replace]; +const { + ERR_NETWORK_IMPORT_DISALLOWED, + ERR_INVALID_MODULE_SPECIFIER, + ERR_INVALID_PACKAGE_CONFIG, + ERR_INVALID_PACKAGE_TARGET, + ERR_MODULE_NOT_FOUND, + ERR_PACKAGE_IMPORT_NOT_DEFINED, + ERR_PACKAGE_PATH_NOT_EXPORTED, + ERR_UNSUPPORTED_DIR_IMPORT, + ERR_UNSUPPORTED_RESOLVE_REQUEST +} = codes; +const own = {}.hasOwnProperty; +const invalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))?(\\|\/|$)/i; +const deprecatedInvalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\|\/|$)/i; +const invalidPackageNameRegEx = /^\.|%|\\/; +const patternRegEx = /\*/g; +const encodedSeparatorRegEx = /%2f|%5c/i; +const emittedPackageWarnings = new Set(); +const doubleSlashRegEx = /[/\\]{2}/; +function emitInvalidSegmentDeprecation(target, request, match, packageJsonUrl, internal, base, isTarget) { + if (_process().noDeprecation) { + return; + } + const pjsonPath = (0, _url().fileURLToPath)(packageJsonUrl); + const double = doubleSlashRegEx.exec(isTarget ? target : request) !== null; + _process().emitWarning(`Use of deprecated ${double ? 'double slash' : 'leading or trailing slash matching'} resolving "${target}" for module ` + `request "${request}" ${request === match ? '' : `matched to "${match}" `}in the "${internal ? 'imports' : 'exports'}" field module resolution of the package at ${pjsonPath}${base ? ` imported from ${(0, _url().fileURLToPath)(base)}` : ''}.`, 'DeprecationWarning', 'DEP0166'); +} +function emitLegacyIndexDeprecation(url, packageJsonUrl, base, main) { + if (_process().noDeprecation) { + return; + } + const format = defaultGetFormatWithoutErrors(url, { + parentURL: base.href + }); + if (format !== 'module') return; + const urlPath = (0, _url().fileURLToPath)(url.href); + const packagePath = (0, _url().fileURLToPath)(new (_url().URL)('.', packageJsonUrl)); + const basePath = (0, _url().fileURLToPath)(base); + if (!main) { + _process().emitWarning(`No "main" or "exports" field defined in the package.json for ${packagePath} resolving the main entry point "${urlPath.slice(packagePath.length)}", imported from ${basePath}.\nDefault "index" lookups for the main are deprecated for ES modules.`, 'DeprecationWarning', 'DEP0151'); + } else if (_path().resolve(packagePath, main) !== urlPath) { + _process().emitWarning(`Package ${packagePath} has a "main" field set to "${main}", ` + `excluding the full filename and extension to the resolved file at "${urlPath.slice(packagePath.length)}", imported from ${basePath}.\n Automatic extension resolution of the "main" field is ` + 'deprecated for ES modules.', 'DeprecationWarning', 'DEP0151'); + } +} +function tryStatSync(path) { + try { + return (0, _fs().statSync)(path); + } catch (_unused2) {} +} +function fileExists(url) { + const stats = (0, _fs().statSync)(url, { + throwIfNoEntry: false + }); + const isFile = stats ? stats.isFile() : undefined; + return isFile === null || isFile === undefined ? false : isFile; +} +function legacyMainResolve(packageJsonUrl, packageConfig, base) { + let guess; + if (packageConfig.main !== undefined) { + guess = new (_url().URL)(packageConfig.main, packageJsonUrl); + if (fileExists(guess)) return guess; + const tries = [`./${packageConfig.main}.js`, `./${packageConfig.main}.json`, `./${packageConfig.main}.node`, `./${packageConfig.main}/index.js`, `./${packageConfig.main}/index.json`, `./${packageConfig.main}/index.node`]; + let i = -1; + while (++i < tries.length) { + guess = new (_url().URL)(tries[i], packageJsonUrl); + if (fileExists(guess)) break; + guess = undefined; + } + if (guess) { + emitLegacyIndexDeprecation(guess, packageJsonUrl, base, packageConfig.main); + return guess; + } + } + const tries = ['./index.js', './index.json', './index.node']; + let i = -1; + while (++i < tries.length) { + guess = new (_url().URL)(tries[i], packageJsonUrl); + if (fileExists(guess)) break; + guess = undefined; + } + if (guess) { + emitLegacyIndexDeprecation(guess, packageJsonUrl, base, packageConfig.main); + return guess; + } + throw new ERR_MODULE_NOT_FOUND((0, _url().fileURLToPath)(new (_url().URL)('.', packageJsonUrl)), (0, _url().fileURLToPath)(base)); +} +function finalizeResolution(resolved, base, preserveSymlinks) { + if (encodedSeparatorRegEx.exec(resolved.pathname) !== null) { + throw new ERR_INVALID_MODULE_SPECIFIER(resolved.pathname, 'must not include encoded "/" or "\\" characters', (0, _url().fileURLToPath)(base)); + } + let filePath; + try { + filePath = (0, _url().fileURLToPath)(resolved); + } catch (error) { + const cause = error; + Object.defineProperty(cause, 'input', { + value: String(resolved) + }); + Object.defineProperty(cause, 'module', { + value: String(base) + }); + throw cause; + } + const stats = tryStatSync(filePath.endsWith('/') ? filePath.slice(-1) : filePath); + if (stats && stats.isDirectory()) { + const error = new ERR_UNSUPPORTED_DIR_IMPORT(filePath, (0, _url().fileURLToPath)(base)); + error.url = String(resolved); + throw error; + } + if (!stats || !stats.isFile()) { + const error = new ERR_MODULE_NOT_FOUND(filePath || resolved.pathname, base && (0, _url().fileURLToPath)(base), true); + error.url = String(resolved); + throw error; + } + if (!preserveSymlinks) { + const real = (0, _fs().realpathSync)(filePath); + const { + search, + hash + } = resolved; + resolved = (0, _url().pathToFileURL)(real + (filePath.endsWith(_path().sep) ? '/' : '')); + resolved.search = search; + resolved.hash = hash; + } + return resolved; +} +function importNotDefined(specifier, packageJsonUrl, base) { + return new ERR_PACKAGE_IMPORT_NOT_DEFINED(specifier, packageJsonUrl && (0, _url().fileURLToPath)(new (_url().URL)('.', packageJsonUrl)), (0, _url().fileURLToPath)(base)); +} +function exportsNotFound(subpath, packageJsonUrl, base) { + return new ERR_PACKAGE_PATH_NOT_EXPORTED((0, _url().fileURLToPath)(new (_url().URL)('.', packageJsonUrl)), subpath, base && (0, _url().fileURLToPath)(base)); +} +function throwInvalidSubpath(request, match, packageJsonUrl, internal, base) { + const reason = `request is not a valid match in pattern "${match}" for the "${internal ? 'imports' : 'exports'}" resolution of ${(0, _url().fileURLToPath)(packageJsonUrl)}`; + throw new ERR_INVALID_MODULE_SPECIFIER(request, reason, base && (0, _url().fileURLToPath)(base)); +} +function invalidPackageTarget(subpath, target, packageJsonUrl, internal, base) { + target = typeof target === 'object' && target !== null ? JSON.stringify(target, null, '') : `${target}`; + return new ERR_INVALID_PACKAGE_TARGET((0, _url().fileURLToPath)(new (_url().URL)('.', packageJsonUrl)), subpath, target, internal, base && (0, _url().fileURLToPath)(base)); +} +function resolvePackageTargetString(target, subpath, match, packageJsonUrl, base, pattern, internal, isPathMap, conditions) { + if (subpath !== '' && !pattern && target[target.length - 1] !== '/') throw invalidPackageTarget(match, target, packageJsonUrl, internal, base); + if (!target.startsWith('./')) { + if (internal && !target.startsWith('../') && !target.startsWith('/')) { + let isURL = false; + try { + new (_url().URL)(target); + isURL = true; + } catch (_unused3) {} + if (!isURL) { + const exportTarget = pattern ? RegExpPrototypeSymbolReplace.call(patternRegEx, target, () => subpath) : target + subpath; + return packageResolve(exportTarget, packageJsonUrl, conditions); + } + } + throw invalidPackageTarget(match, target, packageJsonUrl, internal, base); + } + if (invalidSegmentRegEx.exec(target.slice(2)) !== null) { + if (deprecatedInvalidSegmentRegEx.exec(target.slice(2)) === null) { + if (!isPathMap) { + const request = pattern ? match.replace('*', () => subpath) : match + subpath; + const resolvedTarget = pattern ? RegExpPrototypeSymbolReplace.call(patternRegEx, target, () => subpath) : target; + emitInvalidSegmentDeprecation(resolvedTarget, request, match, packageJsonUrl, internal, base, true); + } + } else { + throw invalidPackageTarget(match, target, packageJsonUrl, internal, base); + } + } + const resolved = new (_url().URL)(target, packageJsonUrl); + const resolvedPath = resolved.pathname; + const packagePath = new (_url().URL)('.', packageJsonUrl).pathname; + if (!resolvedPath.startsWith(packagePath)) throw invalidPackageTarget(match, target, packageJsonUrl, internal, base); + if (subpath === '') return resolved; + if (invalidSegmentRegEx.exec(subpath) !== null) { + const request = pattern ? match.replace('*', () => subpath) : match + subpath; + if (deprecatedInvalidSegmentRegEx.exec(subpath) === null) { + if (!isPathMap) { + const resolvedTarget = pattern ? RegExpPrototypeSymbolReplace.call(patternRegEx, target, () => subpath) : target; + emitInvalidSegmentDeprecation(resolvedTarget, request, match, packageJsonUrl, internal, base, false); + } + } else { + throwInvalidSubpath(request, match, packageJsonUrl, internal, base); + } + } + if (pattern) { + return new (_url().URL)(RegExpPrototypeSymbolReplace.call(patternRegEx, resolved.href, () => subpath)); + } + return new (_url().URL)(subpath, resolved); +} +function isArrayIndex(key) { + const keyNumber = Number(key); + if (`${keyNumber}` !== key) return false; + return keyNumber >= 0 && keyNumber < 0xffffffff; +} +function resolvePackageTarget(packageJsonUrl, target, subpath, packageSubpath, base, pattern, internal, isPathMap, conditions) { + if (typeof target === 'string') { + return resolvePackageTargetString(target, subpath, packageSubpath, packageJsonUrl, base, pattern, internal, isPathMap, conditions); + } + if (Array.isArray(target)) { + const targetList = target; + if (targetList.length === 0) return null; + let lastException; + let i = -1; + while (++i < targetList.length) { + const targetItem = targetList[i]; + let resolveResult; + try { + resolveResult = resolvePackageTarget(packageJsonUrl, targetItem, subpath, packageSubpath, base, pattern, internal, isPathMap, conditions); + } catch (error) { + const exception = error; + lastException = exception; + if (exception.code === 'ERR_INVALID_PACKAGE_TARGET') continue; + throw error; + } + if (resolveResult === undefined) continue; + if (resolveResult === null) { + lastException = null; + continue; + } + return resolveResult; + } + if (lastException === undefined || lastException === null) { + return null; + } + throw lastException; + } + if (typeof target === 'object' && target !== null) { + const keys = Object.getOwnPropertyNames(target); + let i = -1; + while (++i < keys.length) { + const key = keys[i]; + if (isArrayIndex(key)) { + throw new ERR_INVALID_PACKAGE_CONFIG((0, _url().fileURLToPath)(packageJsonUrl), base, '"exports" cannot contain numeric property keys.'); + } + } + i = -1; + while (++i < keys.length) { + const key = keys[i]; + if (key === 'default' || conditions && conditions.has(key)) { + const conditionalTarget = target[key]; + const resolveResult = resolvePackageTarget(packageJsonUrl, conditionalTarget, subpath, packageSubpath, base, pattern, internal, isPathMap, conditions); + if (resolveResult === undefined) continue; + return resolveResult; + } + } + return null; + } + if (target === null) { + return null; + } + throw invalidPackageTarget(packageSubpath, target, packageJsonUrl, internal, base); +} +function isConditionalExportsMainSugar(exports, packageJsonUrl, base) { + if (typeof exports === 'string' || Array.isArray(exports)) return true; + if (typeof exports !== 'object' || exports === null) return false; + const keys = Object.getOwnPropertyNames(exports); + let isConditionalSugar = false; + let i = 0; + let keyIndex = -1; + while (++keyIndex < keys.length) { + const key = keys[keyIndex]; + const currentIsConditionalSugar = key === '' || key[0] !== '.'; + if (i++ === 0) { + isConditionalSugar = currentIsConditionalSugar; + } else if (isConditionalSugar !== currentIsConditionalSugar) { + throw new ERR_INVALID_PACKAGE_CONFIG((0, _url().fileURLToPath)(packageJsonUrl), base, '"exports" cannot contain some keys starting with \'.\' and some not.' + ' The exports object must either be an object of package subpath keys' + ' or an object of main entry condition name keys only.'); + } + } + return isConditionalSugar; +} +function emitTrailingSlashPatternDeprecation(match, pjsonUrl, base) { + if (_process().noDeprecation) { + return; + } + const pjsonPath = (0, _url().fileURLToPath)(pjsonUrl); + if (emittedPackageWarnings.has(pjsonPath + '|' + match)) return; + emittedPackageWarnings.add(pjsonPath + '|' + match); + _process().emitWarning(`Use of deprecated trailing slash pattern mapping "${match}" in the ` + `"exports" field module resolution of the package at ${pjsonPath}${base ? ` imported from ${(0, _url().fileURLToPath)(base)}` : ''}. Mapping specifiers ending in "/" is no longer supported.`, 'DeprecationWarning', 'DEP0155'); +} +function packageExportsResolve(packageJsonUrl, packageSubpath, packageConfig, base, conditions) { + let exports = packageConfig.exports; + if (isConditionalExportsMainSugar(exports, packageJsonUrl, base)) { + exports = { + '.': exports + }; + } + if (own.call(exports, packageSubpath) && !packageSubpath.includes('*') && !packageSubpath.endsWith('/')) { + const target = exports[packageSubpath]; + const resolveResult = resolvePackageTarget(packageJsonUrl, target, '', packageSubpath, base, false, false, false, conditions); + if (resolveResult === null || resolveResult === undefined) { + throw exportsNotFound(packageSubpath, packageJsonUrl, base); + } + return resolveResult; + } + let bestMatch = ''; + let bestMatchSubpath = ''; + const keys = Object.getOwnPropertyNames(exports); + let i = -1; + while (++i < keys.length) { + const key = keys[i]; + const patternIndex = key.indexOf('*'); + if (patternIndex !== -1 && packageSubpath.startsWith(key.slice(0, patternIndex))) { + if (packageSubpath.endsWith('/')) { + emitTrailingSlashPatternDeprecation(packageSubpath, packageJsonUrl, base); + } + const patternTrailer = key.slice(patternIndex + 1); + if (packageSubpath.length >= key.length && packageSubpath.endsWith(patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && key.lastIndexOf('*') === patternIndex) { + bestMatch = key; + bestMatchSubpath = packageSubpath.slice(patternIndex, packageSubpath.length - patternTrailer.length); + } + } + } + if (bestMatch) { + const target = exports[bestMatch]; + const resolveResult = resolvePackageTarget(packageJsonUrl, target, bestMatchSubpath, bestMatch, base, true, false, packageSubpath.endsWith('/'), conditions); + if (resolveResult === null || resolveResult === undefined) { + throw exportsNotFound(packageSubpath, packageJsonUrl, base); + } + return resolveResult; + } + throw exportsNotFound(packageSubpath, packageJsonUrl, base); +} +function patternKeyCompare(a, b) { + const aPatternIndex = a.indexOf('*'); + const bPatternIndex = b.indexOf('*'); + const baseLengthA = aPatternIndex === -1 ? a.length : aPatternIndex + 1; + const baseLengthB = bPatternIndex === -1 ? b.length : bPatternIndex + 1; + if (baseLengthA > baseLengthB) return -1; + if (baseLengthB > baseLengthA) return 1; + if (aPatternIndex === -1) return 1; + if (bPatternIndex === -1) return -1; + if (a.length > b.length) return -1; + if (b.length > a.length) return 1; + return 0; +} +function packageImportsResolve(name, base, conditions) { + if (name === '#' || name.startsWith('#/') || name.endsWith('/')) { + const reason = 'is not a valid internal imports specifier name'; + throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, (0, _url().fileURLToPath)(base)); + } + let packageJsonUrl; + const packageConfig = getPackageScopeConfig(base); + if (packageConfig.exists) { + packageJsonUrl = (0, _url().pathToFileURL)(packageConfig.pjsonPath); + const imports = packageConfig.imports; + if (imports) { + if (own.call(imports, name) && !name.includes('*')) { + const resolveResult = resolvePackageTarget(packageJsonUrl, imports[name], '', name, base, false, true, false, conditions); + if (resolveResult !== null && resolveResult !== undefined) { + return resolveResult; + } + } else { + let bestMatch = ''; + let bestMatchSubpath = ''; + const keys = Object.getOwnPropertyNames(imports); + let i = -1; + while (++i < keys.length) { + const key = keys[i]; + const patternIndex = key.indexOf('*'); + if (patternIndex !== -1 && name.startsWith(key.slice(0, -1))) { + const patternTrailer = key.slice(patternIndex + 1); + if (name.length >= key.length && name.endsWith(patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && key.lastIndexOf('*') === patternIndex) { + bestMatch = key; + bestMatchSubpath = name.slice(patternIndex, name.length - patternTrailer.length); + } + } + } + if (bestMatch) { + const target = imports[bestMatch]; + const resolveResult = resolvePackageTarget(packageJsonUrl, target, bestMatchSubpath, bestMatch, base, true, true, false, conditions); + if (resolveResult !== null && resolveResult !== undefined) { + return resolveResult; + } + } + } + } + } + throw importNotDefined(name, packageJsonUrl, base); +} +function parsePackageName(specifier, base) { + let separatorIndex = specifier.indexOf('/'); + let validPackageName = true; + let isScoped = false; + if (specifier[0] === '@') { + isScoped = true; + if (separatorIndex === -1 || specifier.length === 0) { + validPackageName = false; + } else { + separatorIndex = specifier.indexOf('/', separatorIndex + 1); + } + } + const packageName = separatorIndex === -1 ? specifier : specifier.slice(0, separatorIndex); + if (invalidPackageNameRegEx.exec(packageName) !== null) { + validPackageName = false; + } + if (!validPackageName) { + throw new ERR_INVALID_MODULE_SPECIFIER(specifier, 'is not a valid package name', (0, _url().fileURLToPath)(base)); + } + const packageSubpath = '.' + (separatorIndex === -1 ? '' : specifier.slice(separatorIndex)); + return { + packageName, + packageSubpath, + isScoped + }; +} +function packageResolve(specifier, base, conditions) { + if (_module().builtinModules.includes(specifier)) { + return new (_url().URL)('node:' + specifier); + } + const { + packageName, + packageSubpath, + isScoped + } = parsePackageName(specifier, base); + const packageConfig = getPackageScopeConfig(base); + if (packageConfig.exists) { + const packageJsonUrl = (0, _url().pathToFileURL)(packageConfig.pjsonPath); + if (packageConfig.name === packageName && packageConfig.exports !== undefined && packageConfig.exports !== null) { + return packageExportsResolve(packageJsonUrl, packageSubpath, packageConfig, base, conditions); + } + } + let packageJsonUrl = new (_url().URL)('./node_modules/' + packageName + '/package.json', base); + let packageJsonPath = (0, _url().fileURLToPath)(packageJsonUrl); + let lastPath; + do { + const stat = tryStatSync(packageJsonPath.slice(0, -13)); + if (!stat || !stat.isDirectory()) { + lastPath = packageJsonPath; + packageJsonUrl = new (_url().URL)((isScoped ? '../../../../node_modules/' : '../../../node_modules/') + packageName + '/package.json', packageJsonUrl); + packageJsonPath = (0, _url().fileURLToPath)(packageJsonUrl); + continue; + } + const packageConfig = read(packageJsonPath, { + base, + specifier + }); + if (packageConfig.exports !== undefined && packageConfig.exports !== null) { + return packageExportsResolve(packageJsonUrl, packageSubpath, packageConfig, base, conditions); + } + if (packageSubpath === '.') { + return legacyMainResolve(packageJsonUrl, packageConfig, base); + } + return new (_url().URL)(packageSubpath, packageJsonUrl); + } while (packageJsonPath.length !== lastPath.length); + throw new ERR_MODULE_NOT_FOUND(packageName, (0, _url().fileURLToPath)(base), false); +} +function isRelativeSpecifier(specifier) { + if (specifier[0] === '.') { + if (specifier.length === 1 || specifier[1] === '/') return true; + if (specifier[1] === '.' && (specifier.length === 2 || specifier[2] === '/')) { + return true; + } + } + return false; +} +function shouldBeTreatedAsRelativeOrAbsolutePath(specifier) { + if (specifier === '') return false; + if (specifier[0] === '/') return true; + return isRelativeSpecifier(specifier); +} +function moduleResolve(specifier, base, conditions, preserveSymlinks) { + const protocol = base.protocol; + const isData = protocol === 'data:'; + const isRemote = isData || protocol === 'http:' || protocol === 'https:'; + let resolved; + if (shouldBeTreatedAsRelativeOrAbsolutePath(specifier)) { + try { + resolved = new (_url().URL)(specifier, base); + } catch (error_) { + const error = new ERR_UNSUPPORTED_RESOLVE_REQUEST(specifier, base); + error.cause = error_; + throw error; + } + } else if (protocol === 'file:' && specifier[0] === '#') { + resolved = packageImportsResolve(specifier, base, conditions); + } else { + try { + resolved = new (_url().URL)(specifier); + } catch (error_) { + if (isRemote && !_module().builtinModules.includes(specifier)) { + const error = new ERR_UNSUPPORTED_RESOLVE_REQUEST(specifier, base); + error.cause = error_; + throw error; + } + resolved = packageResolve(specifier, base, conditions); + } + } + _assert()(resolved !== undefined, 'expected to be defined'); + if (resolved.protocol !== 'file:') { + return resolved; + } + return finalizeResolution(resolved, base, preserveSymlinks); +} +function checkIfDisallowedImport(specifier, parsed, parsedParentURL) { + if (parsedParentURL) { + const parentProtocol = parsedParentURL.protocol; + if (parentProtocol === 'http:' || parentProtocol === 'https:') { + if (shouldBeTreatedAsRelativeOrAbsolutePath(specifier)) { + const parsedProtocol = parsed == null ? void 0 : parsed.protocol; + if (parsedProtocol && parsedProtocol !== 'https:' && parsedProtocol !== 'http:') { + throw new ERR_NETWORK_IMPORT_DISALLOWED(specifier, parsedParentURL, 'remote imports cannot import from a local location.'); + } + return { + url: (parsed == null ? void 0 : parsed.href) || '' + }; + } + if (_module().builtinModules.includes(specifier)) { + throw new ERR_NETWORK_IMPORT_DISALLOWED(specifier, parsedParentURL, 'remote imports cannot import from a local location.'); + } + throw new ERR_NETWORK_IMPORT_DISALLOWED(specifier, parsedParentURL, 'only relative and absolute specifiers are supported.'); + } + } +} +function isURL(self) { + return Boolean(self && typeof self === 'object' && 'href' in self && typeof self.href === 'string' && 'protocol' in self && typeof self.protocol === 'string' && self.href && self.protocol); +} +function throwIfInvalidParentURL(parentURL) { + if (parentURL === undefined) { + return; + } + if (typeof parentURL !== 'string' && !isURL(parentURL)) { + throw new codes.ERR_INVALID_ARG_TYPE('parentURL', ['string', 'URL'], parentURL); + } +} +function defaultResolve(specifier, context = {}) { + const { + parentURL + } = context; + _assert()(parentURL !== undefined, 'expected `parentURL` to be defined'); + throwIfInvalidParentURL(parentURL); + let parsedParentURL; + if (parentURL) { + try { + parsedParentURL = new (_url().URL)(parentURL); + } catch (_unused4) {} + } + let parsed; + let protocol; + try { + parsed = shouldBeTreatedAsRelativeOrAbsolutePath(specifier) ? new (_url().URL)(specifier, parsedParentURL) : new (_url().URL)(specifier); + protocol = parsed.protocol; + if (protocol === 'data:') { + return { + url: parsed.href, + format: null + }; + } + } catch (_unused5) {} + const maybeReturn = checkIfDisallowedImport(specifier, parsed, parsedParentURL); + if (maybeReturn) return maybeReturn; + if (protocol === undefined && parsed) { + protocol = parsed.protocol; + } + if (protocol === 'node:') { + return { + url: specifier + }; + } + if (parsed && parsed.protocol === 'node:') return { + url: specifier + }; + const conditions = getConditionsSet(context.conditions); + const url = moduleResolve(specifier, new (_url().URL)(parentURL), conditions, false); + return { + url: url.href, + format: defaultGetFormatWithoutErrors(url, { + parentURL + }) + }; +} +function resolve(specifier, parent) { + if (!parent) { + throw new Error('Please pass `parent`: `import-meta-resolve` cannot ponyfill that'); + } + try { + return defaultResolve(specifier, { + parentURL: parent + }).url; + } catch (error) { + const exception = error; + if ((exception.code === 'ERR_UNSUPPORTED_DIR_IMPORT' || exception.code === 'ERR_MODULE_NOT_FOUND') && typeof exception.url === 'string') { + return exception.url; + } + throw error; + } +} +0 && 0; + +//# sourceMappingURL=import-meta-resolve.js.map diff --git a/node_modules/@babel/core/lib/vendor/import-meta-resolve.js.map b/node_modules/@babel/core/lib/vendor/import-meta-resolve.js.map new file mode 100644 index 00000000..5265b7c1 --- /dev/null +++ b/node_modules/@babel/core/lib/vendor/import-meta-resolve.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_assert","data","require","_fs","_interopRequireWildcard","_process","_url","_path","_module","_v","_util","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","own$1","classRegExp","kTypes","Set","codes","formatList","array","type","length","join","slice","messages","Map","nodeInternalPrefix","userStackTraceLimit","ERR_INVALID_ARG_TYPE","createError","name","expected","actual","assert","Array","isArray","message","endsWith","includes","types","instances","other","value","push","toLowerCase","exec","pos","indexOf","determineSpecificType","TypeError","ERR_INVALID_MODULE_SPECIFIER","request","reason","base","undefined","ERR_INVALID_PACKAGE_CONFIG","path","Error","ERR_INVALID_PACKAGE_TARGET","packagePath","key","target","isImport","relatedError","startsWith","JSON","stringify","ERR_MODULE_NOT_FOUND","exactUrl","ERR_NETWORK_IMPORT_DISALLOWED","ERR_PACKAGE_IMPORT_NOT_DEFINED","specifier","ERR_PACKAGE_PATH_NOT_EXPORTED","subpath","ERR_UNSUPPORTED_DIR_IMPORT","ERR_UNSUPPORTED_RESOLVE_REQUEST","ERR_UNKNOWN_FILE_EXTENSION","extension","ERR_INVALID_ARG_VALUE","inspected","inspect","sym","constructor","makeNodeErrorWithCode","Base","NodeError","parameters","limit","stackTraceLimit","isErrorStackTraceLimitWritable","error","getMessage","defineProperties","enumerable","writable","configurable","toString","captureLargerStackTrace","code","v8","startupSnapshot","isBuildingSnapshot","_unused","desc","isExtensible","hideStackFrames","wrappedFunction","hidden","stackTraceLimitIsWritable","Number","POSITIVE_INFINITY","captureStackTrace","self","Reflect","apply","regex","expectedLength","unshift","format","String","depth","colors","hasOwnProperty$1","ERR_INVALID_PACKAGE_CONFIG$1","cache","read","jsonPath","existing","string","fs","readFileSync","toNamespacedPath","exception","result","exists","pjsonPath","main","exports","imports","parsed","parse","error_","cause","fileURLToPath","getPackageScopeConfig","resolved","packageJSONUrl","URL","packageJSONPath","pathname","packageConfig","lastPackageJSONUrl","getPackageType","url","extensionFormatMap","mimeToFormat","mime","test","protocolHandlers","getDataProtocolModuleFormat","getFileProtocolModuleFormat","getHttpProtocolModuleFormat","node:","extname","index","codePointAt","_context","ignoreErrors","packageType","filepath","defaultGetFormatWithoutErrors","context","protocol","DEFAULT_CONDITIONS","freeze","DEFAULT_CONDITIONS_SET","getDefaultConditions","getDefaultConditionsSet","getConditionsSet","conditions","RegExpPrototypeSymbolReplace","RegExp","prototype","Symbol","replace","own","invalidSegmentRegEx","deprecatedInvalidSegmentRegEx","invalidPackageNameRegEx","patternRegEx","encodedSeparatorRegEx","emittedPackageWarnings","doubleSlashRegEx","emitInvalidSegmentDeprecation","match","packageJsonUrl","internal","isTarget","process","noDeprecation","double","emitWarning","emitLegacyIndexDeprecation","parentURL","href","urlPath","URL$1","basePath","resolve","tryStatSync","statSync","_unused2","fileExists","stats","throwIfNoEntry","isFile","legacyMainResolve","guess","tries","finalizeResolution","preserveSymlinks","filePath","isDirectory","real","realpathSync","search","hash","pathToFileURL","sep","importNotDefined","exportsNotFound","throwInvalidSubpath","invalidPackageTarget","resolvePackageTargetString","pattern","isPathMap","isURL","_unused3","exportTarget","packageResolve","resolvedTarget","resolvedPath","isArrayIndex","keyNumber","resolvePackageTarget","packageSubpath","targetList","lastException","targetItem","resolveResult","keys","getOwnPropertyNames","conditionalTarget","isConditionalExportsMainSugar","isConditionalSugar","keyIndex","currentIsConditionalSugar","emitTrailingSlashPatternDeprecation","pjsonUrl","add","packageExportsResolve","bestMatch","bestMatchSubpath","patternIndex","patternTrailer","patternKeyCompare","lastIndexOf","b","aPatternIndex","bPatternIndex","baseLengthA","baseLengthB","packageImportsResolve","parsePackageName","separatorIndex","validPackageName","isScoped","packageName","builtinModules","packageJsonPath","lastPath","stat","isRelativeSpecifier","shouldBeTreatedAsRelativeOrAbsolutePath","moduleResolve","isData","isRemote","checkIfDisallowedImport","parsedParentURL","parentProtocol","parsedProtocol","Boolean","throwIfInvalidParentURL","defaultResolve","_unused4","_unused5","maybeReturn","parent"],"sources":["../../src/vendor/import-meta-resolve.js"],"sourcesContent":["\n/****************************************************************************\\\n * NOTE FROM BABEL AUTHORS *\n * This file is inlined from https://github.com/wooorm/import-meta-resolve, *\n * because we need to compile it to CommonJS. *\n\\****************************************************************************/\n\n/*\n(The MIT License)\n\nCopyright (c) 2021 Titus Wormer \n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n---\n\nThis is a derivative work based on:\n.\nWhich is licensed:\n\n\"\"\"\nCopyright Node.js contributors. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to\ndeal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or\nsell copies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.\n\"\"\"\n\nThis license applies to parts of Node.js originating from the\nhttps://github.com/joyent/node repository:\n\n\"\"\"\nCopyright Joyent, Inc. and other Node contributors. All rights reserved.\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to\ndeal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or\nsell copies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.\n\"\"\"\n*/\n\nimport assert from 'assert';\nimport fs, { realpathSync, statSync } from 'fs';\nimport process from 'process';\nimport { fileURLToPath, URL as URL$1, pathToFileURL } from 'url';\nimport path from 'path';\nimport { builtinModules } from 'module';\nimport v8 from 'v8';\nimport { format, inspect } from 'util';\n\n/**\n * @typedef ErrnoExceptionFields\n * @property {number | undefined} [errnode]\n * @property {string | undefined} [code]\n * @property {string | undefined} [path]\n * @property {string | undefined} [syscall]\n * @property {string | undefined} [url]\n *\n * @typedef {Error & ErrnoExceptionFields} ErrnoException\n */\n\n\nconst own$1 = {}.hasOwnProperty;\n\nconst classRegExp = /^([A-Z][a-z\\d]*)+$/;\n// Sorted by a rough estimate on most frequently used entries.\nconst kTypes = new Set([\n 'string',\n 'function',\n 'number',\n 'object',\n // Accept 'Function' and 'Object' as alternative to the lower cased version.\n 'Function',\n 'Object',\n 'boolean',\n 'bigint',\n 'symbol'\n]);\n\nconst codes = {};\n\n/**\n * Create a list string in the form like 'A and B' or 'A, B, ..., and Z'.\n * We cannot use Intl.ListFormat because it's not available in\n * --without-intl builds.\n *\n * @param {Array} array\n * An array of strings.\n * @param {string} [type]\n * The list type to be inserted before the last element.\n * @returns {string}\n */\nfunction formatList(array, type = 'and') {\n return array.length < 3\n ? array.join(` ${type} `)\n : `${array.slice(0, -1).join(', ')}, ${type} ${array[array.length - 1]}`\n}\n\n/** @type {Map} */\nconst messages = new Map();\nconst nodeInternalPrefix = '__node_internal_';\n/** @type {number} */\nlet userStackTraceLimit;\n\ncodes.ERR_INVALID_ARG_TYPE = createError(\n 'ERR_INVALID_ARG_TYPE',\n /**\n * @param {string} name\n * @param {Array | string} expected\n * @param {unknown} actual\n */\n (name, expected, actual) => {\n assert(typeof name === 'string', \"'name' must be a string\");\n if (!Array.isArray(expected)) {\n expected = [expected];\n }\n\n let message = 'The ';\n if (name.endsWith(' argument')) {\n // For cases like 'first argument'\n message += `${name} `;\n } else {\n const type = name.includes('.') ? 'property' : 'argument';\n message += `\"${name}\" ${type} `;\n }\n\n message += 'must be ';\n\n /** @type {Array} */\n const types = [];\n /** @type {Array} */\n const instances = [];\n /** @type {Array} */\n const other = [];\n\n for (const value of expected) {\n assert(\n typeof value === 'string',\n 'All expected entries have to be of type string'\n );\n\n if (kTypes.has(value)) {\n types.push(value.toLowerCase());\n } else if (classRegExp.exec(value) === null) {\n assert(\n value !== 'object',\n 'The value \"object\" should be written as \"Object\"'\n );\n other.push(value);\n } else {\n instances.push(value);\n }\n }\n\n // Special handle `object` in case other instances are allowed to outline\n // the differences between each other.\n if (instances.length > 0) {\n const pos = types.indexOf('object');\n if (pos !== -1) {\n types.slice(pos, 1);\n instances.push('Object');\n }\n }\n\n if (types.length > 0) {\n message += `${types.length > 1 ? 'one of type' : 'of type'} ${formatList(\n types,\n 'or'\n )}`;\n if (instances.length > 0 || other.length > 0) message += ' or ';\n }\n\n if (instances.length > 0) {\n message += `an instance of ${formatList(instances, 'or')}`;\n if (other.length > 0) message += ' or ';\n }\n\n if (other.length > 0) {\n if (other.length > 1) {\n message += `one of ${formatList(other, 'or')}`;\n } else {\n if (other[0].toLowerCase() !== other[0]) message += 'an ';\n message += `${other[0]}`;\n }\n }\n\n message += `. Received ${determineSpecificType(actual)}`;\n\n return message\n },\n TypeError\n);\n\ncodes.ERR_INVALID_MODULE_SPECIFIER = createError(\n 'ERR_INVALID_MODULE_SPECIFIER',\n /**\n * @param {string} request\n * @param {string} reason\n * @param {string} [base]\n */\n (request, reason, base = undefined) => {\n return `Invalid module \"${request}\" ${reason}${\n base ? ` imported from ${base}` : ''\n }`\n },\n TypeError\n);\n\ncodes.ERR_INVALID_PACKAGE_CONFIG = createError(\n 'ERR_INVALID_PACKAGE_CONFIG',\n /**\n * @param {string} path\n * @param {string} [base]\n * @param {string} [message]\n */\n (path, base, message) => {\n return `Invalid package config ${path}${\n base ? ` while importing ${base}` : ''\n }${message ? `. ${message}` : ''}`\n },\n Error\n);\n\ncodes.ERR_INVALID_PACKAGE_TARGET = createError(\n 'ERR_INVALID_PACKAGE_TARGET',\n /**\n * @param {string} packagePath\n * @param {string} key\n * @param {unknown} target\n * @param {boolean} [isImport=false]\n * @param {string} [base]\n */\n (packagePath, key, target, isImport = false, base = undefined) => {\n const relatedError =\n typeof target === 'string' &&\n !isImport &&\n target.length > 0 &&\n !target.startsWith('./');\n if (key === '.') {\n assert(isImport === false);\n return (\n `Invalid \"exports\" main target ${JSON.stringify(target)} defined ` +\n `in the package config ${packagePath}package.json${\n base ? ` imported from ${base}` : ''\n }${relatedError ? '; targets must start with \"./\"' : ''}`\n )\n }\n\n return `Invalid \"${\n isImport ? 'imports' : 'exports'\n }\" target ${JSON.stringify(\n target\n )} defined for '${key}' in the package config ${packagePath}package.json${\n base ? ` imported from ${base}` : ''\n }${relatedError ? '; targets must start with \"./\"' : ''}`\n },\n Error\n);\n\ncodes.ERR_MODULE_NOT_FOUND = createError(\n 'ERR_MODULE_NOT_FOUND',\n /**\n * @param {string} path\n * @param {string} base\n * @param {boolean} [exactUrl]\n */\n (path, base, exactUrl = false) => {\n return `Cannot find ${\n exactUrl ? 'module' : 'package'\n } '${path}' imported from ${base}`\n },\n Error\n);\n\ncodes.ERR_NETWORK_IMPORT_DISALLOWED = createError(\n 'ERR_NETWORK_IMPORT_DISALLOWED',\n \"import of '%s' by %s is not supported: %s\",\n Error\n);\n\ncodes.ERR_PACKAGE_IMPORT_NOT_DEFINED = createError(\n 'ERR_PACKAGE_IMPORT_NOT_DEFINED',\n /**\n * @param {string} specifier\n * @param {string} packagePath\n * @param {string} base\n */\n (specifier, packagePath, base) => {\n return `Package import specifier \"${specifier}\" is not defined${\n packagePath ? ` in package ${packagePath}package.json` : ''\n } imported from ${base}`\n },\n TypeError\n);\n\ncodes.ERR_PACKAGE_PATH_NOT_EXPORTED = createError(\n 'ERR_PACKAGE_PATH_NOT_EXPORTED',\n /**\n * @param {string} packagePath\n * @param {string} subpath\n * @param {string} [base]\n */\n (packagePath, subpath, base = undefined) => {\n if (subpath === '.')\n return `No \"exports\" main defined in ${packagePath}package.json${\n base ? ` imported from ${base}` : ''\n }`\n return `Package subpath '${subpath}' is not defined by \"exports\" in ${packagePath}package.json${\n base ? ` imported from ${base}` : ''\n }`\n },\n Error\n);\n\ncodes.ERR_UNSUPPORTED_DIR_IMPORT = createError(\n 'ERR_UNSUPPORTED_DIR_IMPORT',\n \"Directory import '%s' is not supported \" +\n 'resolving ES modules imported from %s',\n Error\n);\n\ncodes.ERR_UNSUPPORTED_RESOLVE_REQUEST = createError(\n 'ERR_UNSUPPORTED_RESOLVE_REQUEST',\n 'Failed to resolve module specifier \"%s\" from \"%s\": Invalid relative URL or base scheme is not hierarchical.',\n TypeError\n);\n\ncodes.ERR_UNKNOWN_FILE_EXTENSION = createError(\n 'ERR_UNKNOWN_FILE_EXTENSION',\n /**\n * @param {string} extension\n * @param {string} path\n */\n (extension, path) => {\n return `Unknown file extension \"${extension}\" for ${path}`\n },\n TypeError\n);\n\ncodes.ERR_INVALID_ARG_VALUE = createError(\n 'ERR_INVALID_ARG_VALUE',\n /**\n * @param {string} name\n * @param {unknown} value\n * @param {string} [reason='is invalid']\n */\n (name, value, reason = 'is invalid') => {\n let inspected = inspect(value);\n\n if (inspected.length > 128) {\n inspected = `${inspected.slice(0, 128)}...`;\n }\n\n const type = name.includes('.') ? 'property' : 'argument';\n\n return `The ${type} '${name}' ${reason}. Received ${inspected}`\n },\n TypeError\n // Note: extra classes have been shaken out.\n // , RangeError\n);\n\n/**\n * Utility function for registering the error codes. Only used here. Exported\n * *only* to allow for testing.\n * @param {string} sym\n * @param {MessageFunction | string} value\n * @param {ErrorConstructor} constructor\n * @returns {new (...parameters: Array) => Error}\n */\nfunction createError(sym, value, constructor) {\n // Special case for SystemError that formats the error message differently\n // The SystemErrors only have SystemError as their base classes.\n messages.set(sym, value);\n\n return makeNodeErrorWithCode(constructor, sym)\n}\n\n/**\n * @param {ErrorConstructor} Base\n * @param {string} key\n * @returns {ErrorConstructor}\n */\nfunction makeNodeErrorWithCode(Base, key) {\n // @ts-expect-error It’s a Node error.\n return NodeError\n /**\n * @param {Array} parameters\n */\n function NodeError(...parameters) {\n const limit = Error.stackTraceLimit;\n if (isErrorStackTraceLimitWritable()) Error.stackTraceLimit = 0;\n const error = new Base();\n // Reset the limit and setting the name property.\n if (isErrorStackTraceLimitWritable()) Error.stackTraceLimit = limit;\n const message = getMessage(key, parameters, error);\n Object.defineProperties(error, {\n // Note: no need to implement `kIsNodeError` symbol, would be hard,\n // probably.\n message: {\n value: message,\n enumerable: false,\n writable: true,\n configurable: true\n },\n toString: {\n /** @this {Error} */\n value() {\n return `${this.name} [${key}]: ${this.message}`\n },\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n\n captureLargerStackTrace(error);\n // @ts-expect-error It’s a Node error.\n error.code = key;\n return error\n }\n}\n\n/**\n * @returns {boolean}\n */\nfunction isErrorStackTraceLimitWritable() {\n // Do no touch Error.stackTraceLimit as V8 would attempt to install\n // it again during deserialization.\n try {\n if (v8.startupSnapshot.isBuildingSnapshot()) {\n return false\n }\n } catch {}\n\n const desc = Object.getOwnPropertyDescriptor(Error, 'stackTraceLimit');\n if (desc === undefined) {\n return Object.isExtensible(Error)\n }\n\n return own$1.call(desc, 'writable') && desc.writable !== undefined\n ? desc.writable\n : desc.set !== undefined\n}\n\n/**\n * This function removes unnecessary frames from Node.js core errors.\n * @template {(...parameters: unknown[]) => unknown} T\n * @param {T} wrappedFunction\n * @returns {T}\n */\nfunction hideStackFrames(wrappedFunction) {\n // We rename the functions that will be hidden to cut off the stacktrace\n // at the outermost one\n const hidden = nodeInternalPrefix + wrappedFunction.name;\n Object.defineProperty(wrappedFunction, 'name', {value: hidden});\n return wrappedFunction\n}\n\nconst captureLargerStackTrace = hideStackFrames(\n /**\n * @param {Error} error\n * @returns {Error}\n */\n // @ts-expect-error: fine\n function (error) {\n const stackTraceLimitIsWritable = isErrorStackTraceLimitWritable();\n if (stackTraceLimitIsWritable) {\n userStackTraceLimit = Error.stackTraceLimit;\n Error.stackTraceLimit = Number.POSITIVE_INFINITY;\n }\n\n Error.captureStackTrace(error);\n\n // Reset the limit\n if (stackTraceLimitIsWritable) Error.stackTraceLimit = userStackTraceLimit;\n\n return error\n }\n);\n\n/**\n * @param {string} key\n * @param {Array} parameters\n * @param {Error} self\n * @returns {string}\n */\nfunction getMessage(key, parameters, self) {\n const message = messages.get(key);\n assert(message !== undefined, 'expected `message` to be found');\n\n if (typeof message === 'function') {\n assert(\n message.length <= parameters.length, // Default options do not count.\n `Code: ${key}; The provided arguments length (${parameters.length}) does not ` +\n `match the required ones (${message.length}).`\n );\n return Reflect.apply(message, self, parameters)\n }\n\n const regex = /%[dfijoOs]/g;\n let expectedLength = 0;\n while (regex.exec(message) !== null) expectedLength++;\n assert(\n expectedLength === parameters.length,\n `Code: ${key}; The provided arguments length (${parameters.length}) does not ` +\n `match the required ones (${expectedLength}).`\n );\n if (parameters.length === 0) return message\n\n parameters.unshift(message);\n return Reflect.apply(format, null, parameters)\n}\n\n/**\n * Determine the specific type of a value for type-mismatch errors.\n * @param {unknown} value\n * @returns {string}\n */\nfunction determineSpecificType(value) {\n if (value === null || value === undefined) {\n return String(value)\n }\n\n if (typeof value === 'function' && value.name) {\n return `function ${value.name}`\n }\n\n if (typeof value === 'object') {\n if (value.constructor && value.constructor.name) {\n return `an instance of ${value.constructor.name}`\n }\n\n return `${inspect(value, {depth: -1})}`\n }\n\n let inspected = inspect(value, {colors: false});\n\n if (inspected.length > 28) {\n inspected = `${inspected.slice(0, 25)}...`;\n }\n\n return `type ${typeof value} (${inspected})`\n}\n\n// Manually “tree shaken” from:\n// \n// Last checked on: Apr 29, 2023.\n// Removed the native dependency.\n// Also: no need to cache, we do that in resolve already.\n\n\nconst hasOwnProperty$1 = {}.hasOwnProperty;\n\nconst {ERR_INVALID_PACKAGE_CONFIG: ERR_INVALID_PACKAGE_CONFIG$1} = codes;\n\n/** @type {Map} */\nconst cache = new Map();\n\n/**\n * @param {string} jsonPath\n * @param {{specifier: URL | string, base?: URL}} options\n * @returns {PackageConfig}\n */\nfunction read(jsonPath, {base, specifier}) {\n const existing = cache.get(jsonPath);\n\n if (existing) {\n return existing\n }\n\n /** @type {string | undefined} */\n let string;\n\n try {\n string = fs.readFileSync(path.toNamespacedPath(jsonPath), 'utf8');\n } catch (error) {\n const exception = /** @type {ErrnoException} */ (error);\n\n if (exception.code !== 'ENOENT') {\n throw exception\n }\n }\n\n /** @type {PackageConfig} */\n const result = {\n exists: false,\n pjsonPath: jsonPath,\n main: undefined,\n name: undefined,\n type: 'none', // Ignore unknown types for forwards compatibility\n exports: undefined,\n imports: undefined\n };\n\n if (string !== undefined) {\n /** @type {Record} */\n let parsed;\n\n try {\n parsed = JSON.parse(string);\n } catch (error_) {\n const cause = /** @type {ErrnoException} */ (error_);\n const error = new ERR_INVALID_PACKAGE_CONFIG$1(\n jsonPath,\n (base ? `\"${specifier}\" from ` : '') + fileURLToPath(base || specifier),\n cause.message\n );\n error.cause = cause;\n throw error\n }\n\n result.exists = true;\n\n if (\n hasOwnProperty$1.call(parsed, 'name') &&\n typeof parsed.name === 'string'\n ) {\n result.name = parsed.name;\n }\n\n if (\n hasOwnProperty$1.call(parsed, 'main') &&\n typeof parsed.main === 'string'\n ) {\n result.main = parsed.main;\n }\n\n if (hasOwnProperty$1.call(parsed, 'exports')) {\n // @ts-expect-error: assume valid.\n result.exports = parsed.exports;\n }\n\n if (hasOwnProperty$1.call(parsed, 'imports')) {\n // @ts-expect-error: assume valid.\n result.imports = parsed.imports;\n }\n\n // Ignore unknown types for forwards compatibility\n if (\n hasOwnProperty$1.call(parsed, 'type') &&\n (parsed.type === 'commonjs' || parsed.type === 'module')\n ) {\n result.type = parsed.type;\n }\n }\n\n cache.set(jsonPath, result);\n\n return result\n}\n\n/**\n * @param {URL | string} resolved\n * @returns {PackageConfig}\n */\nfunction getPackageScopeConfig(resolved) {\n // Note: in Node, this is now a native module.\n let packageJSONUrl = new URL('package.json', resolved);\n\n while (true) {\n const packageJSONPath = packageJSONUrl.pathname;\n if (packageJSONPath.endsWith('node_modules/package.json')) {\n break\n }\n\n const packageConfig = read(fileURLToPath(packageJSONUrl), {\n specifier: resolved\n });\n\n if (packageConfig.exists) {\n return packageConfig\n }\n\n const lastPackageJSONUrl = packageJSONUrl;\n packageJSONUrl = new URL('../package.json', packageJSONUrl);\n\n // Terminates at root where ../package.json equals ../../package.json\n // (can't just check \"/package.json\" for Windows support).\n if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) {\n break\n }\n }\n\n const packageJSONPath = fileURLToPath(packageJSONUrl);\n // ^^ Note: in Node, this is now a native module.\n\n return {\n pjsonPath: packageJSONPath,\n exists: false,\n type: 'none'\n }\n}\n\n/**\n * Returns the package type for a given URL.\n * @param {URL} url - The URL to get the package type for.\n * @returns {PackageType}\n */\nfunction getPackageType(url) {\n // To do @anonrig: Write a C++ function that returns only \"type\".\n return getPackageScopeConfig(url).type\n}\n\n// Manually “tree shaken” from:\n// \n// Last checked on: Apr 29, 2023.\n\n\nconst {ERR_UNKNOWN_FILE_EXTENSION} = codes;\n\nconst hasOwnProperty = {}.hasOwnProperty;\n\n/** @type {Record} */\nconst extensionFormatMap = {\n // @ts-expect-error: hush.\n __proto__: null,\n '.cjs': 'commonjs',\n '.js': 'module',\n '.json': 'json',\n '.mjs': 'module'\n};\n\n/**\n * @param {string | null} mime\n * @returns {string | null}\n */\nfunction mimeToFormat(mime) {\n if (\n mime &&\n /\\s*(text|application)\\/javascript\\s*(;\\s*charset=utf-?8\\s*)?/i.test(mime)\n )\n return 'module'\n if (mime === 'application/json') return 'json'\n return null\n}\n\n/**\n * @callback ProtocolHandler\n * @param {URL} parsed\n * @param {{parentURL: string, source?: Buffer}} context\n * @param {boolean} ignoreErrors\n * @returns {string | null | void}\n */\n\n/**\n * @type {Record}\n */\nconst protocolHandlers = {\n // @ts-expect-error: hush.\n __proto__: null,\n 'data:': getDataProtocolModuleFormat,\n 'file:': getFileProtocolModuleFormat,\n 'http:': getHttpProtocolModuleFormat,\n 'https:': getHttpProtocolModuleFormat,\n 'node:'() {\n return 'builtin'\n }\n};\n\n/**\n * @param {URL} parsed\n */\nfunction getDataProtocolModuleFormat(parsed) {\n const {1: mime} = /^([^/]+\\/[^;,]+)[^,]*?(;base64)?,/.exec(\n parsed.pathname\n ) || [null, null, null];\n return mimeToFormat(mime)\n}\n\n/**\n * Returns the file extension from a URL.\n *\n * Should give similar result to\n * `require('node:path').extname(require('node:url').fileURLToPath(url))`\n * when used with a `file:` URL.\n *\n * @param {URL} url\n * @returns {string}\n */\nfunction extname(url) {\n const pathname = url.pathname;\n let index = pathname.length;\n\n while (index--) {\n const code = pathname.codePointAt(index);\n\n if (code === 47 /* `/` */) {\n return ''\n }\n\n if (code === 46 /* `.` */) {\n return pathname.codePointAt(index - 1) === 47 /* `/` */\n ? ''\n : pathname.slice(index)\n }\n }\n\n return ''\n}\n\n/**\n * @type {ProtocolHandler}\n */\nfunction getFileProtocolModuleFormat(url, _context, ignoreErrors) {\n const value = extname(url);\n\n if (value === '.js') {\n const packageType = getPackageType(url);\n\n if (packageType !== 'none') {\n return packageType\n }\n\n return 'commonjs'\n }\n\n if (value === '') {\n const packageType = getPackageType(url);\n\n // Legacy behavior\n if (packageType === 'none' || packageType === 'commonjs') {\n return 'commonjs'\n }\n\n // Note: we don’t implement WASM, so we don’t need\n // `getFormatOfExtensionlessFile` from `formats`.\n return 'module'\n }\n\n const format = extensionFormatMap[value];\n if (format) return format\n\n // Explicit undefined return indicates load hook should rerun format check\n if (ignoreErrors) {\n return undefined\n }\n\n const filepath = fileURLToPath(url);\n throw new ERR_UNKNOWN_FILE_EXTENSION(value, filepath)\n}\n\nfunction getHttpProtocolModuleFormat() {\n // To do: HTTPS imports.\n}\n\n/**\n * @param {URL} url\n * @param {{parentURL: string}} context\n * @returns {string | null}\n */\nfunction defaultGetFormatWithoutErrors(url, context) {\n const protocol = url.protocol;\n\n if (!hasOwnProperty.call(protocolHandlers, protocol)) {\n return null\n }\n\n return protocolHandlers[protocol](url, context, true) || null\n}\n\n// Manually “tree shaken” from:\n// \n// Last checked on: Apr 29, 2023.\n\n\nconst {ERR_INVALID_ARG_VALUE} = codes;\n\n// In Node itself these values are populated from CLI arguments, before any\n// user code runs.\n// Here we just define the defaults.\nconst DEFAULT_CONDITIONS = Object.freeze(['node', 'import']);\nconst DEFAULT_CONDITIONS_SET = new Set(DEFAULT_CONDITIONS);\n\n/**\n * Returns the default conditions for ES module loading.\n */\nfunction getDefaultConditions() {\n return DEFAULT_CONDITIONS\n}\n\n/**\n * Returns the default conditions for ES module loading, as a Set.\n */\nfunction getDefaultConditionsSet() {\n return DEFAULT_CONDITIONS_SET\n}\n\n/**\n * @param {Array} [conditions]\n * @returns {Set}\n */\nfunction getConditionsSet(conditions) {\n if (conditions !== undefined && conditions !== getDefaultConditions()) {\n if (!Array.isArray(conditions)) {\n throw new ERR_INVALID_ARG_VALUE(\n 'conditions',\n conditions,\n 'expected an array'\n )\n }\n\n return new Set(conditions)\n }\n\n return getDefaultConditionsSet()\n}\n\n// Manually “tree shaken” from:\n// \n// Last checked on: Apr 29, 2023.\n\n\nconst RegExpPrototypeSymbolReplace = RegExp.prototype[Symbol.replace];\n\nconst {\n ERR_NETWORK_IMPORT_DISALLOWED,\n ERR_INVALID_MODULE_SPECIFIER,\n ERR_INVALID_PACKAGE_CONFIG,\n ERR_INVALID_PACKAGE_TARGET,\n ERR_MODULE_NOT_FOUND,\n ERR_PACKAGE_IMPORT_NOT_DEFINED,\n ERR_PACKAGE_PATH_NOT_EXPORTED,\n ERR_UNSUPPORTED_DIR_IMPORT,\n ERR_UNSUPPORTED_RESOLVE_REQUEST\n} = codes;\n\nconst own = {}.hasOwnProperty;\n\nconst invalidSegmentRegEx =\n /(^|\\\\|\\/)((\\.|%2e)(\\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))?(\\\\|\\/|$)/i;\nconst deprecatedInvalidSegmentRegEx =\n /(^|\\\\|\\/)((\\.|%2e)(\\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\\\|\\/|$)/i;\nconst invalidPackageNameRegEx = /^\\.|%|\\\\/;\nconst patternRegEx = /\\*/g;\nconst encodedSeparatorRegEx = /%2f|%5c/i;\n/** @type {Set} */\nconst emittedPackageWarnings = new Set();\n\nconst doubleSlashRegEx = /[/\\\\]{2}/;\n\n/**\n *\n * @param {string} target\n * @param {string} request\n * @param {string} match\n * @param {URL} packageJsonUrl\n * @param {boolean} internal\n * @param {URL} base\n * @param {boolean} isTarget\n */\nfunction emitInvalidSegmentDeprecation(\n target,\n request,\n match,\n packageJsonUrl,\n internal,\n base,\n isTarget\n) {\n // @ts-expect-error: apparently it does exist, TS.\n if (process.noDeprecation) {\n return\n }\n\n const pjsonPath = fileURLToPath(packageJsonUrl);\n const double = doubleSlashRegEx.exec(isTarget ? target : request) !== null;\n process.emitWarning(\n `Use of deprecated ${\n double ? 'double slash' : 'leading or trailing slash matching'\n } resolving \"${target}\" for module ` +\n `request \"${request}\" ${\n request === match ? '' : `matched to \"${match}\" `\n }in the \"${\n internal ? 'imports' : 'exports'\n }\" field module resolution of the package at ${pjsonPath}${\n base ? ` imported from ${fileURLToPath(base)}` : ''\n }.`,\n 'DeprecationWarning',\n 'DEP0166'\n );\n}\n\n/**\n * @param {URL} url\n * @param {URL} packageJsonUrl\n * @param {URL} base\n * @param {string} [main]\n * @returns {void}\n */\nfunction emitLegacyIndexDeprecation(url, packageJsonUrl, base, main) {\n // @ts-expect-error: apparently it does exist, TS.\n if (process.noDeprecation) {\n return\n }\n\n const format = defaultGetFormatWithoutErrors(url, {parentURL: base.href});\n if (format !== 'module') return\n const urlPath = fileURLToPath(url.href);\n const packagePath = fileURLToPath(new URL$1('.', packageJsonUrl));\n const basePath = fileURLToPath(base);\n if (!main) {\n process.emitWarning(\n `No \"main\" or \"exports\" field defined in the package.json for ${packagePath} resolving the main entry point \"${urlPath.slice(\n packagePath.length\n )}\", imported from ${basePath}.\\nDefault \"index\" lookups for the main are deprecated for ES modules.`,\n 'DeprecationWarning',\n 'DEP0151'\n );\n } else if (path.resolve(packagePath, main) !== urlPath) {\n process.emitWarning(\n `Package ${packagePath} has a \"main\" field set to \"${main}\", ` +\n `excluding the full filename and extension to the resolved file at \"${urlPath.slice(\n packagePath.length\n )}\", imported from ${basePath}.\\n Automatic extension resolution of the \"main\" field is ` +\n 'deprecated for ES modules.',\n 'DeprecationWarning',\n 'DEP0151'\n );\n }\n}\n\n/**\n * @param {string} path\n * @returns {Stats | undefined}\n */\nfunction tryStatSync(path) {\n // Note: from Node 15 onwards we can use `throwIfNoEntry: false` instead.\n try {\n return statSync(path)\n } catch {\n // Note: in Node code this returns `new Stats`,\n // but in Node 22 that’s marked as a deprecated internal API.\n // Which, well, we kinda are, but still to prevent that warning,\n // just yield `undefined`.\n }\n}\n\n/**\n * Legacy CommonJS main resolution:\n * 1. let M = pkg_url + (json main field)\n * 2. TRY(M, M.js, M.json, M.node)\n * 3. TRY(M/index.js, M/index.json, M/index.node)\n * 4. TRY(pkg_url/index.js, pkg_url/index.json, pkg_url/index.node)\n * 5. NOT_FOUND\n *\n * @param {URL} url\n * @returns {boolean}\n */\nfunction fileExists(url) {\n const stats = statSync(url, {throwIfNoEntry: false});\n const isFile = stats ? stats.isFile() : undefined;\n return isFile === null || isFile === undefined ? false : isFile\n}\n\n/**\n * @param {URL} packageJsonUrl\n * @param {PackageConfig} packageConfig\n * @param {URL} base\n * @returns {URL}\n */\nfunction legacyMainResolve(packageJsonUrl, packageConfig, base) {\n /** @type {URL | undefined} */\n let guess;\n if (packageConfig.main !== undefined) {\n guess = new URL$1(packageConfig.main, packageJsonUrl);\n // Note: fs check redundances will be handled by Descriptor cache here.\n if (fileExists(guess)) return guess\n\n const tries = [\n `./${packageConfig.main}.js`,\n `./${packageConfig.main}.json`,\n `./${packageConfig.main}.node`,\n `./${packageConfig.main}/index.js`,\n `./${packageConfig.main}/index.json`,\n `./${packageConfig.main}/index.node`\n ];\n let i = -1;\n\n while (++i < tries.length) {\n guess = new URL$1(tries[i], packageJsonUrl);\n if (fileExists(guess)) break\n guess = undefined;\n }\n\n if (guess) {\n emitLegacyIndexDeprecation(\n guess,\n packageJsonUrl,\n base,\n packageConfig.main\n );\n return guess\n }\n // Fallthrough.\n }\n\n const tries = ['./index.js', './index.json', './index.node'];\n let i = -1;\n\n while (++i < tries.length) {\n guess = new URL$1(tries[i], packageJsonUrl);\n if (fileExists(guess)) break\n guess = undefined;\n }\n\n if (guess) {\n emitLegacyIndexDeprecation(guess, packageJsonUrl, base, packageConfig.main);\n return guess\n }\n\n // Not found.\n throw new ERR_MODULE_NOT_FOUND(\n fileURLToPath(new URL$1('.', packageJsonUrl)),\n fileURLToPath(base)\n )\n}\n\n/**\n * @param {URL} resolved\n * @param {URL} base\n * @param {boolean} [preserveSymlinks]\n * @returns {URL}\n */\nfunction finalizeResolution(resolved, base, preserveSymlinks) {\n if (encodedSeparatorRegEx.exec(resolved.pathname) !== null) {\n throw new ERR_INVALID_MODULE_SPECIFIER(\n resolved.pathname,\n 'must not include encoded \"/\" or \"\\\\\" characters',\n fileURLToPath(base)\n )\n }\n\n /** @type {string} */\n let filePath;\n\n try {\n filePath = fileURLToPath(resolved);\n } catch (error) {\n const cause = /** @type {ErrnoException} */ (error);\n Object.defineProperty(cause, 'input', {value: String(resolved)});\n Object.defineProperty(cause, 'module', {value: String(base)});\n throw cause\n }\n\n const stats = tryStatSync(\n filePath.endsWith('/') ? filePath.slice(-1) : filePath\n );\n\n if (stats && stats.isDirectory()) {\n const error = new ERR_UNSUPPORTED_DIR_IMPORT(filePath, fileURLToPath(base));\n // @ts-expect-error Add this for `import.meta.resolve`.\n error.url = String(resolved);\n throw error\n }\n\n if (!stats || !stats.isFile()) {\n const error = new ERR_MODULE_NOT_FOUND(\n filePath || resolved.pathname,\n base && fileURLToPath(base),\n true\n );\n // @ts-expect-error Add this for `import.meta.resolve`.\n error.url = String(resolved);\n throw error\n }\n\n if (!preserveSymlinks) {\n const real = realpathSync(filePath);\n const {search, hash} = resolved;\n resolved = pathToFileURL(real + (filePath.endsWith(path.sep) ? '/' : ''));\n resolved.search = search;\n resolved.hash = hash;\n }\n\n return resolved\n}\n\n/**\n * @param {string} specifier\n * @param {URL | undefined} packageJsonUrl\n * @param {URL} base\n * @returns {Error}\n */\nfunction importNotDefined(specifier, packageJsonUrl, base) {\n return new ERR_PACKAGE_IMPORT_NOT_DEFINED(\n specifier,\n packageJsonUrl && fileURLToPath(new URL$1('.', packageJsonUrl)),\n fileURLToPath(base)\n )\n}\n\n/**\n * @param {string} subpath\n * @param {URL} packageJsonUrl\n * @param {URL} base\n * @returns {Error}\n */\nfunction exportsNotFound(subpath, packageJsonUrl, base) {\n return new ERR_PACKAGE_PATH_NOT_EXPORTED(\n fileURLToPath(new URL$1('.', packageJsonUrl)),\n subpath,\n base && fileURLToPath(base)\n )\n}\n\n/**\n * @param {string} request\n * @param {string} match\n * @param {URL} packageJsonUrl\n * @param {boolean} internal\n * @param {URL} [base]\n * @returns {never}\n */\nfunction throwInvalidSubpath(request, match, packageJsonUrl, internal, base) {\n const reason = `request is not a valid match in pattern \"${match}\" for the \"${\n internal ? 'imports' : 'exports'\n }\" resolution of ${fileURLToPath(packageJsonUrl)}`;\n throw new ERR_INVALID_MODULE_SPECIFIER(\n request,\n reason,\n base && fileURLToPath(base)\n )\n}\n\n/**\n * @param {string} subpath\n * @param {unknown} target\n * @param {URL} packageJsonUrl\n * @param {boolean} internal\n * @param {URL} [base]\n * @returns {Error}\n */\nfunction invalidPackageTarget(subpath, target, packageJsonUrl, internal, base) {\n target =\n typeof target === 'object' && target !== null\n ? JSON.stringify(target, null, '')\n : `${target}`;\n\n return new ERR_INVALID_PACKAGE_TARGET(\n fileURLToPath(new URL$1('.', packageJsonUrl)),\n subpath,\n target,\n internal,\n base && fileURLToPath(base)\n )\n}\n\n/**\n * @param {string} target\n * @param {string} subpath\n * @param {string} match\n * @param {URL} packageJsonUrl\n * @param {URL} base\n * @param {boolean} pattern\n * @param {boolean} internal\n * @param {boolean} isPathMap\n * @param {Set | undefined} conditions\n * @returns {URL}\n */\nfunction resolvePackageTargetString(\n target,\n subpath,\n match,\n packageJsonUrl,\n base,\n pattern,\n internal,\n isPathMap,\n conditions\n) {\n if (subpath !== '' && !pattern && target[target.length - 1] !== '/')\n throw invalidPackageTarget(match, target, packageJsonUrl, internal, base)\n\n if (!target.startsWith('./')) {\n if (internal && !target.startsWith('../') && !target.startsWith('/')) {\n let isURL = false;\n\n try {\n new URL$1(target);\n isURL = true;\n } catch {\n // Continue regardless of error.\n }\n\n if (!isURL) {\n const exportTarget = pattern\n ? RegExpPrototypeSymbolReplace.call(\n patternRegEx,\n target,\n () => subpath\n )\n : target + subpath;\n\n return packageResolve(exportTarget, packageJsonUrl, conditions)\n }\n }\n\n throw invalidPackageTarget(match, target, packageJsonUrl, internal, base)\n }\n\n if (invalidSegmentRegEx.exec(target.slice(2)) !== null) {\n if (deprecatedInvalidSegmentRegEx.exec(target.slice(2)) === null) {\n if (!isPathMap) {\n const request = pattern\n ? match.replace('*', () => subpath)\n : match + subpath;\n const resolvedTarget = pattern\n ? RegExpPrototypeSymbolReplace.call(\n patternRegEx,\n target,\n () => subpath\n )\n : target;\n emitInvalidSegmentDeprecation(\n resolvedTarget,\n request,\n match,\n packageJsonUrl,\n internal,\n base,\n true\n );\n }\n } else {\n throw invalidPackageTarget(match, target, packageJsonUrl, internal, base)\n }\n }\n\n const resolved = new URL$1(target, packageJsonUrl);\n const resolvedPath = resolved.pathname;\n const packagePath = new URL$1('.', packageJsonUrl).pathname;\n\n if (!resolvedPath.startsWith(packagePath))\n throw invalidPackageTarget(match, target, packageJsonUrl, internal, base)\n\n if (subpath === '') return resolved\n\n if (invalidSegmentRegEx.exec(subpath) !== null) {\n const request = pattern\n ? match.replace('*', () => subpath)\n : match + subpath;\n if (deprecatedInvalidSegmentRegEx.exec(subpath) === null) {\n if (!isPathMap) {\n const resolvedTarget = pattern\n ? RegExpPrototypeSymbolReplace.call(\n patternRegEx,\n target,\n () => subpath\n )\n : target;\n emitInvalidSegmentDeprecation(\n resolvedTarget,\n request,\n match,\n packageJsonUrl,\n internal,\n base,\n false\n );\n }\n } else {\n throwInvalidSubpath(request, match, packageJsonUrl, internal, base);\n }\n }\n\n if (pattern) {\n return new URL$1(\n RegExpPrototypeSymbolReplace.call(\n patternRegEx,\n resolved.href,\n () => subpath\n )\n )\n }\n\n return new URL$1(subpath, resolved)\n}\n\n/**\n * @param {string} key\n * @returns {boolean}\n */\nfunction isArrayIndex(key) {\n const keyNumber = Number(key);\n if (`${keyNumber}` !== key) return false\n return keyNumber >= 0 && keyNumber < 0xff_ff_ff_ff\n}\n\n/**\n * @param {URL} packageJsonUrl\n * @param {unknown} target\n * @param {string} subpath\n * @param {string} packageSubpath\n * @param {URL} base\n * @param {boolean} pattern\n * @param {boolean} internal\n * @param {boolean} isPathMap\n * @param {Set | undefined} conditions\n * @returns {URL | null}\n */\nfunction resolvePackageTarget(\n packageJsonUrl,\n target,\n subpath,\n packageSubpath,\n base,\n pattern,\n internal,\n isPathMap,\n conditions\n) {\n if (typeof target === 'string') {\n return resolvePackageTargetString(\n target,\n subpath,\n packageSubpath,\n packageJsonUrl,\n base,\n pattern,\n internal,\n isPathMap,\n conditions\n )\n }\n\n if (Array.isArray(target)) {\n /** @type {Array} */\n const targetList = target;\n if (targetList.length === 0) return null\n\n /** @type {ErrnoException | null | undefined} */\n let lastException;\n let i = -1;\n\n while (++i < targetList.length) {\n const targetItem = targetList[i];\n /** @type {URL | null} */\n let resolveResult;\n try {\n resolveResult = resolvePackageTarget(\n packageJsonUrl,\n targetItem,\n subpath,\n packageSubpath,\n base,\n pattern,\n internal,\n isPathMap,\n conditions\n );\n } catch (error) {\n const exception = /** @type {ErrnoException} */ (error);\n lastException = exception;\n if (exception.code === 'ERR_INVALID_PACKAGE_TARGET') continue\n throw error\n }\n\n if (resolveResult === undefined) continue\n\n if (resolveResult === null) {\n lastException = null;\n continue\n }\n\n return resolveResult\n }\n\n if (lastException === undefined || lastException === null) {\n return null\n }\n\n throw lastException\n }\n\n if (typeof target === 'object' && target !== null) {\n const keys = Object.getOwnPropertyNames(target);\n let i = -1;\n\n while (++i < keys.length) {\n const key = keys[i];\n if (isArrayIndex(key)) {\n throw new ERR_INVALID_PACKAGE_CONFIG(\n fileURLToPath(packageJsonUrl),\n base,\n '\"exports\" cannot contain numeric property keys.'\n )\n }\n }\n\n i = -1;\n\n while (++i < keys.length) {\n const key = keys[i];\n if (key === 'default' || (conditions && conditions.has(key))) {\n // @ts-expect-error: indexable.\n const conditionalTarget = /** @type {unknown} */ (target[key]);\n const resolveResult = resolvePackageTarget(\n packageJsonUrl,\n conditionalTarget,\n subpath,\n packageSubpath,\n base,\n pattern,\n internal,\n isPathMap,\n conditions\n );\n if (resolveResult === undefined) continue\n return resolveResult\n }\n }\n\n return null\n }\n\n if (target === null) {\n return null\n }\n\n throw invalidPackageTarget(\n packageSubpath,\n target,\n packageJsonUrl,\n internal,\n base\n )\n}\n\n/**\n * @param {unknown} exports\n * @param {URL} packageJsonUrl\n * @param {URL} base\n * @returns {boolean}\n */\nfunction isConditionalExportsMainSugar(exports, packageJsonUrl, base) {\n if (typeof exports === 'string' || Array.isArray(exports)) return true\n if (typeof exports !== 'object' || exports === null) return false\n\n const keys = Object.getOwnPropertyNames(exports);\n let isConditionalSugar = false;\n let i = 0;\n let keyIndex = -1;\n while (++keyIndex < keys.length) {\n const key = keys[keyIndex];\n const currentIsConditionalSugar = key === '' || key[0] !== '.';\n if (i++ === 0) {\n isConditionalSugar = currentIsConditionalSugar;\n } else if (isConditionalSugar !== currentIsConditionalSugar) {\n throw new ERR_INVALID_PACKAGE_CONFIG(\n fileURLToPath(packageJsonUrl),\n base,\n '\"exports\" cannot contain some keys starting with \\'.\\' and some not.' +\n ' The exports object must either be an object of package subpath keys' +\n ' or an object of main entry condition name keys only.'\n )\n }\n }\n\n return isConditionalSugar\n}\n\n/**\n * @param {string} match\n * @param {URL} pjsonUrl\n * @param {URL} base\n */\nfunction emitTrailingSlashPatternDeprecation(match, pjsonUrl, base) {\n // @ts-expect-error: apparently it does exist, TS.\n if (process.noDeprecation) {\n return\n }\n\n const pjsonPath = fileURLToPath(pjsonUrl);\n if (emittedPackageWarnings.has(pjsonPath + '|' + match)) return\n emittedPackageWarnings.add(pjsonPath + '|' + match);\n process.emitWarning(\n `Use of deprecated trailing slash pattern mapping \"${match}\" in the ` +\n `\"exports\" field module resolution of the package at ${pjsonPath}${\n base ? ` imported from ${fileURLToPath(base)}` : ''\n }. Mapping specifiers ending in \"/\" is no longer supported.`,\n 'DeprecationWarning',\n 'DEP0155'\n );\n}\n\n/**\n * @param {URL} packageJsonUrl\n * @param {string} packageSubpath\n * @param {Record} packageConfig\n * @param {URL} base\n * @param {Set | undefined} conditions\n * @returns {URL}\n */\nfunction packageExportsResolve(\n packageJsonUrl,\n packageSubpath,\n packageConfig,\n base,\n conditions\n) {\n let exports = packageConfig.exports;\n\n if (isConditionalExportsMainSugar(exports, packageJsonUrl, base)) {\n exports = {'.': exports};\n }\n\n if (\n own.call(exports, packageSubpath) &&\n !packageSubpath.includes('*') &&\n !packageSubpath.endsWith('/')\n ) {\n // @ts-expect-error: indexable.\n const target = exports[packageSubpath];\n const resolveResult = resolvePackageTarget(\n packageJsonUrl,\n target,\n '',\n packageSubpath,\n base,\n false,\n false,\n false,\n conditions\n );\n if (resolveResult === null || resolveResult === undefined) {\n throw exportsNotFound(packageSubpath, packageJsonUrl, base)\n }\n\n return resolveResult\n }\n\n let bestMatch = '';\n let bestMatchSubpath = '';\n const keys = Object.getOwnPropertyNames(exports);\n let i = -1;\n\n while (++i < keys.length) {\n const key = keys[i];\n const patternIndex = key.indexOf('*');\n\n if (\n patternIndex !== -1 &&\n packageSubpath.startsWith(key.slice(0, patternIndex))\n ) {\n // When this reaches EOL, this can throw at the top of the whole function:\n //\n // if (StringPrototypeEndsWith(packageSubpath, '/'))\n // throwInvalidSubpath(packageSubpath)\n //\n // To match \"imports\" and the spec.\n if (packageSubpath.endsWith('/')) {\n emitTrailingSlashPatternDeprecation(\n packageSubpath,\n packageJsonUrl,\n base\n );\n }\n\n const patternTrailer = key.slice(patternIndex + 1);\n\n if (\n packageSubpath.length >= key.length &&\n packageSubpath.endsWith(patternTrailer) &&\n patternKeyCompare(bestMatch, key) === 1 &&\n key.lastIndexOf('*') === patternIndex\n ) {\n bestMatch = key;\n bestMatchSubpath = packageSubpath.slice(\n patternIndex,\n packageSubpath.length - patternTrailer.length\n );\n }\n }\n }\n\n if (bestMatch) {\n // @ts-expect-error: indexable.\n const target = /** @type {unknown} */ (exports[bestMatch]);\n const resolveResult = resolvePackageTarget(\n packageJsonUrl,\n target,\n bestMatchSubpath,\n bestMatch,\n base,\n true,\n false,\n packageSubpath.endsWith('/'),\n conditions\n );\n\n if (resolveResult === null || resolveResult === undefined) {\n throw exportsNotFound(packageSubpath, packageJsonUrl, base)\n }\n\n return resolveResult\n }\n\n throw exportsNotFound(packageSubpath, packageJsonUrl, base)\n}\n\n/**\n * @param {string} a\n * @param {string} b\n */\nfunction patternKeyCompare(a, b) {\n const aPatternIndex = a.indexOf('*');\n const bPatternIndex = b.indexOf('*');\n const baseLengthA = aPatternIndex === -1 ? a.length : aPatternIndex + 1;\n const baseLengthB = bPatternIndex === -1 ? b.length : bPatternIndex + 1;\n if (baseLengthA > baseLengthB) return -1\n if (baseLengthB > baseLengthA) return 1\n if (aPatternIndex === -1) return 1\n if (bPatternIndex === -1) return -1\n if (a.length > b.length) return -1\n if (b.length > a.length) return 1\n return 0\n}\n\n/**\n * @param {string} name\n * @param {URL} base\n * @param {Set} [conditions]\n * @returns {URL}\n */\nfunction packageImportsResolve(name, base, conditions) {\n if (name === '#' || name.startsWith('#/') || name.endsWith('/')) {\n const reason = 'is not a valid internal imports specifier name';\n throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, fileURLToPath(base))\n }\n\n /** @type {URL | undefined} */\n let packageJsonUrl;\n\n const packageConfig = getPackageScopeConfig(base);\n\n if (packageConfig.exists) {\n packageJsonUrl = pathToFileURL(packageConfig.pjsonPath);\n const imports = packageConfig.imports;\n if (imports) {\n if (own.call(imports, name) && !name.includes('*')) {\n const resolveResult = resolvePackageTarget(\n packageJsonUrl,\n imports[name],\n '',\n name,\n base,\n false,\n true,\n false,\n conditions\n );\n if (resolveResult !== null && resolveResult !== undefined) {\n return resolveResult\n }\n } else {\n let bestMatch = '';\n let bestMatchSubpath = '';\n const keys = Object.getOwnPropertyNames(imports);\n let i = -1;\n\n while (++i < keys.length) {\n const key = keys[i];\n const patternIndex = key.indexOf('*');\n\n if (patternIndex !== -1 && name.startsWith(key.slice(0, -1))) {\n const patternTrailer = key.slice(patternIndex + 1);\n if (\n name.length >= key.length &&\n name.endsWith(patternTrailer) &&\n patternKeyCompare(bestMatch, key) === 1 &&\n key.lastIndexOf('*') === patternIndex\n ) {\n bestMatch = key;\n bestMatchSubpath = name.slice(\n patternIndex,\n name.length - patternTrailer.length\n );\n }\n }\n }\n\n if (bestMatch) {\n const target = imports[bestMatch];\n const resolveResult = resolvePackageTarget(\n packageJsonUrl,\n target,\n bestMatchSubpath,\n bestMatch,\n base,\n true,\n true,\n false,\n conditions\n );\n\n if (resolveResult !== null && resolveResult !== undefined) {\n return resolveResult\n }\n }\n }\n }\n }\n\n throw importNotDefined(name, packageJsonUrl, base)\n}\n\n/**\n * @param {string} specifier\n * @param {URL} base\n */\nfunction parsePackageName(specifier, base) {\n let separatorIndex = specifier.indexOf('/');\n let validPackageName = true;\n let isScoped = false;\n if (specifier[0] === '@') {\n isScoped = true;\n if (separatorIndex === -1 || specifier.length === 0) {\n validPackageName = false;\n } else {\n separatorIndex = specifier.indexOf('/', separatorIndex + 1);\n }\n }\n\n const packageName =\n separatorIndex === -1 ? specifier : specifier.slice(0, separatorIndex);\n\n // Package name cannot have leading . and cannot have percent-encoding or\n // \\\\ separators.\n if (invalidPackageNameRegEx.exec(packageName) !== null) {\n validPackageName = false;\n }\n\n if (!validPackageName) {\n throw new ERR_INVALID_MODULE_SPECIFIER(\n specifier,\n 'is not a valid package name',\n fileURLToPath(base)\n )\n }\n\n const packageSubpath =\n '.' + (separatorIndex === -1 ? '' : specifier.slice(separatorIndex));\n\n return {packageName, packageSubpath, isScoped}\n}\n\n/**\n * @param {string} specifier\n * @param {URL} base\n * @param {Set | undefined} conditions\n * @returns {URL}\n */\nfunction packageResolve(specifier, base, conditions) {\n if (builtinModules.includes(specifier)) {\n return new URL$1('node:' + specifier)\n }\n\n const {packageName, packageSubpath, isScoped} = parsePackageName(\n specifier,\n base\n );\n\n // ResolveSelf\n const packageConfig = getPackageScopeConfig(base);\n\n // Can’t test.\n /* c8 ignore next 16 */\n if (packageConfig.exists) {\n const packageJsonUrl = pathToFileURL(packageConfig.pjsonPath);\n if (\n packageConfig.name === packageName &&\n packageConfig.exports !== undefined &&\n packageConfig.exports !== null\n ) {\n return packageExportsResolve(\n packageJsonUrl,\n packageSubpath,\n packageConfig,\n base,\n conditions\n )\n }\n }\n\n let packageJsonUrl = new URL$1(\n './node_modules/' + packageName + '/package.json',\n base\n );\n let packageJsonPath = fileURLToPath(packageJsonUrl);\n /** @type {string} */\n let lastPath;\n do {\n const stat = tryStatSync(packageJsonPath.slice(0, -13));\n if (!stat || !stat.isDirectory()) {\n lastPath = packageJsonPath;\n packageJsonUrl = new URL$1(\n (isScoped ? '../../../../node_modules/' : '../../../node_modules/') +\n packageName +\n '/package.json',\n packageJsonUrl\n );\n packageJsonPath = fileURLToPath(packageJsonUrl);\n continue\n }\n\n // Package match.\n const packageConfig = read(packageJsonPath, {base, specifier});\n if (packageConfig.exports !== undefined && packageConfig.exports !== null) {\n return packageExportsResolve(\n packageJsonUrl,\n packageSubpath,\n packageConfig,\n base,\n conditions\n )\n }\n\n if (packageSubpath === '.') {\n return legacyMainResolve(packageJsonUrl, packageConfig, base)\n }\n\n return new URL$1(packageSubpath, packageJsonUrl)\n // Cross-platform root check.\n } while (packageJsonPath.length !== lastPath.length)\n\n throw new ERR_MODULE_NOT_FOUND(packageName, fileURLToPath(base), false)\n}\n\n/**\n * @param {string} specifier\n * @returns {boolean}\n */\nfunction isRelativeSpecifier(specifier) {\n if (specifier[0] === '.') {\n if (specifier.length === 1 || specifier[1] === '/') return true\n if (\n specifier[1] === '.' &&\n (specifier.length === 2 || specifier[2] === '/')\n ) {\n return true\n }\n }\n\n return false\n}\n\n/**\n * @param {string} specifier\n * @returns {boolean}\n */\nfunction shouldBeTreatedAsRelativeOrAbsolutePath(specifier) {\n if (specifier === '') return false\n if (specifier[0] === '/') return true\n return isRelativeSpecifier(specifier)\n}\n\n/**\n * The “Resolver Algorithm Specification” as detailed in the Node docs (which is\n * sync and slightly lower-level than `resolve`).\n *\n * @param {string} specifier\n * `/example.js`, `./example.js`, `../example.js`, `some-package`, `fs`, etc.\n * @param {URL} base\n * Full URL (to a file) that `specifier` is resolved relative from.\n * @param {Set} [conditions]\n * Conditions.\n * @param {boolean} [preserveSymlinks]\n * Keep symlinks instead of resolving them.\n * @returns {URL}\n * A URL object to the found thing.\n */\nfunction moduleResolve(specifier, base, conditions, preserveSymlinks) {\n // Note: The Node code supports `base` as a string (in this internal API) too,\n // we don’t.\n const protocol = base.protocol;\n const isData = protocol === 'data:';\n const isRemote = isData || protocol === 'http:' || protocol === 'https:';\n // Order swapped from spec for minor perf gain.\n // Ok since relative URLs cannot parse as URLs.\n /** @type {URL | undefined} */\n let resolved;\n\n if (shouldBeTreatedAsRelativeOrAbsolutePath(specifier)) {\n try {\n resolved = new URL$1(specifier, base);\n } catch (error_) {\n const error = new ERR_UNSUPPORTED_RESOLVE_REQUEST(specifier, base);\n error.cause = error_;\n throw error\n }\n } else if (protocol === 'file:' && specifier[0] === '#') {\n resolved = packageImportsResolve(specifier, base, conditions);\n } else {\n try {\n resolved = new URL$1(specifier);\n } catch (error_) {\n // Note: actual code uses `canBeRequiredWithoutScheme`.\n if (isRemote && !builtinModules.includes(specifier)) {\n const error = new ERR_UNSUPPORTED_RESOLVE_REQUEST(specifier, base);\n error.cause = error_;\n throw error\n }\n\n resolved = packageResolve(specifier, base, conditions);\n }\n }\n\n assert(resolved !== undefined, 'expected to be defined');\n\n if (resolved.protocol !== 'file:') {\n return resolved\n }\n\n return finalizeResolution(resolved, base, preserveSymlinks)\n}\n\n/**\n * @param {string} specifier\n * @param {URL | undefined} parsed\n * @param {URL | undefined} parsedParentURL\n */\nfunction checkIfDisallowedImport(specifier, parsed, parsedParentURL) {\n if (parsedParentURL) {\n // Avoid accessing the `protocol` property due to the lazy getters.\n const parentProtocol = parsedParentURL.protocol;\n\n if (parentProtocol === 'http:' || parentProtocol === 'https:') {\n if (shouldBeTreatedAsRelativeOrAbsolutePath(specifier)) {\n // Avoid accessing the `protocol` property due to the lazy getters.\n const parsedProtocol = parsed?.protocol;\n\n // `data:` and `blob:` disallowed due to allowing file: access via\n // indirection\n if (\n parsedProtocol &&\n parsedProtocol !== 'https:' &&\n parsedProtocol !== 'http:'\n ) {\n throw new ERR_NETWORK_IMPORT_DISALLOWED(\n specifier,\n parsedParentURL,\n 'remote imports cannot import from a local location.'\n )\n }\n\n return {url: parsed?.href || ''}\n }\n\n if (builtinModules.includes(specifier)) {\n throw new ERR_NETWORK_IMPORT_DISALLOWED(\n specifier,\n parsedParentURL,\n 'remote imports cannot import from a local location.'\n )\n }\n\n throw new ERR_NETWORK_IMPORT_DISALLOWED(\n specifier,\n parsedParentURL,\n 'only relative and absolute specifiers are supported.'\n )\n }\n }\n}\n\n// Note: this is from:\n// \n/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * @template {unknown} Value\n * @param {Value} self\n * @returns {Value is URL}\n */\nfunction isURL(self) {\n return Boolean(\n self &&\n typeof self === 'object' &&\n 'href' in self &&\n typeof self.href === 'string' &&\n 'protocol' in self &&\n typeof self.protocol === 'string' &&\n self.href &&\n self.protocol\n )\n}\n\n/**\n * Validate user-input in `context` supplied by a custom loader.\n *\n * @param {unknown} parentURL\n * @returns {asserts parentURL is URL | string | undefined}\n */\nfunction throwIfInvalidParentURL(parentURL) {\n if (parentURL === undefined) {\n return // Main entry point, so no parent\n }\n\n if (typeof parentURL !== 'string' && !isURL(parentURL)) {\n throw new codes.ERR_INVALID_ARG_TYPE(\n 'parentURL',\n ['string', 'URL'],\n parentURL\n )\n }\n}\n\n/**\n * @param {string} specifier\n * @param {{parentURL?: string, conditions?: Array}} context\n * @returns {{url: string, format?: string | null}}\n */\nfunction defaultResolve(specifier, context = {}) {\n const {parentURL} = context;\n assert(parentURL !== undefined, 'expected `parentURL` to be defined');\n throwIfInvalidParentURL(parentURL);\n\n /** @type {URL | undefined} */\n let parsedParentURL;\n if (parentURL) {\n try {\n parsedParentURL = new URL$1(parentURL);\n } catch {\n // Ignore exception\n }\n }\n\n /** @type {URL | undefined} */\n let parsed;\n /** @type {string | undefined} */\n let protocol;\n\n try {\n parsed = shouldBeTreatedAsRelativeOrAbsolutePath(specifier)\n ? new URL$1(specifier, parsedParentURL)\n : new URL$1(specifier);\n\n // Avoid accessing the `protocol` property due to the lazy getters.\n protocol = parsed.protocol;\n\n if (protocol === 'data:') {\n return {url: parsed.href, format: null}\n }\n } catch {\n // Ignore exception\n }\n\n // There are multiple deep branches that can either throw or return; instead\n // of duplicating that deeply nested logic for the possible returns, DRY and\n // check for a return. This seems the least gnarly.\n const maybeReturn = checkIfDisallowedImport(\n specifier,\n parsed,\n parsedParentURL\n );\n\n if (maybeReturn) return maybeReturn\n\n // This must come after checkIfDisallowedImport\n if (protocol === undefined && parsed) {\n protocol = parsed.protocol;\n }\n\n if (protocol === 'node:') {\n return {url: specifier}\n }\n\n // This must come after checkIfDisallowedImport\n if (parsed && parsed.protocol === 'node:') return {url: specifier}\n\n const conditions = getConditionsSet(context.conditions);\n\n const url = moduleResolve(specifier, new URL$1(parentURL), conditions, false);\n\n return {\n // Do NOT cast `url` to a string: that will work even when there are real\n // problems, silencing them\n url: url.href,\n format: defaultGetFormatWithoutErrors(url, {parentURL})\n }\n}\n\n/**\n * @typedef {import('./lib/errors.js').ErrnoException} ErrnoException\n */\n\n\n/**\n * Match `import.meta.resolve` except that `parent` is required (you can pass\n * `import.meta.url`).\n *\n * @param {string} specifier\n * The module specifier to resolve relative to parent\n * (`/example.js`, `./example.js`, `../example.js`, `some-package`, `fs`,\n * etc).\n * @param {string} parent\n * The absolute parent module URL to resolve from.\n * You must pass `import.meta.url` or something else.\n * @returns {string}\n * Returns a string to a full `file:`, `data:`, or `node:` URL\n * to the found thing.\n */\nfunction resolve(specifier, parent) {\n if (!parent) {\n throw new Error(\n 'Please pass `parent`: `import-meta-resolve` cannot ponyfill that'\n )\n }\n\n try {\n return defaultResolve(specifier, {parentURL: parent}).url\n } catch (error) {\n // See: \n const exception = /** @type {ErrnoException} */ (error);\n\n if (\n (exception.code === 'ERR_UNSUPPORTED_DIR_IMPORT' ||\n exception.code === 'ERR_MODULE_NOT_FOUND') &&\n typeof exception.url === 'string'\n ) {\n return exception.url\n }\n\n throw error\n }\n}\n\nexport { moduleResolve, resolve };\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/core/package.json b/node_modules/@babel/core/package.json new file mode 100644 index 00000000..b6a6aef0 --- /dev/null +++ b/node_modules/@babel/core/package.json @@ -0,0 +1,81 @@ +{ + "name": "@babel/core", + "version": "7.27.4", + "description": "Babel compiler core.", + "main": "./lib/index.js", + "author": "The Babel Team (https://babel.dev/team)", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/babel/babel.git", + "directory": "packages/babel-core" + }, + "homepage": "https://babel.dev/docs/en/next/babel-core", + "bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20core%22+is%3Aopen", + "keywords": [ + "6to5", + "babel", + "classes", + "const", + "es6", + "harmony", + "let", + "modules", + "transpile", + "transpiler", + "var", + "babel-core", + "compiler" + ], + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + }, + "browser": { + "./lib/config/files/index.js": "./lib/config/files/index-browser.js", + "./lib/config/resolve-targets.js": "./lib/config/resolve-targets-browser.js", + "./lib/transform-file.js": "./lib/transform-file-browser.js", + "./src/config/files/index.ts": "./src/config/files/index-browser.ts", + "./src/config/resolve-targets.ts": "./src/config/resolve-targets-browser.ts", + "./src/transform-file.ts": "./src/transform-file-browser.ts" + }, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.4", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.27.4", + "@babel/types": "^7.27.3", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "devDependencies": { + "@babel/helper-transform-fixture-test-runner": "^7.27.1", + "@babel/plugin-syntax-flow": "^7.27.1", + "@babel/plugin-transform-flow-strip-types": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/preset-env": "^7.27.2", + "@babel/preset-typescript": "^7.27.1", + "@jridgewell/trace-mapping": "^0.3.25", + "@types/convert-source-map": "^2.0.0", + "@types/debug": "^4.1.0", + "@types/resolve": "^1.3.2", + "@types/semver": "^5.4.0", + "rimraf": "^3.0.0", + "ts-node": "^11.0.0-beta.1" + }, + "type": "commonjs" +} \ No newline at end of file diff --git a/node_modules/@babel/core/src/config/files/index-browser.ts b/node_modules/@babel/core/src/config/files/index-browser.ts new file mode 100644 index 00000000..435c0684 --- /dev/null +++ b/node_modules/@babel/core/src/config/files/index-browser.ts @@ -0,0 +1,115 @@ +/* c8 ignore start */ + +import type { Handler } from "gensync"; + +import type { + ConfigFile, + IgnoreFile, + RelativeConfig, + FilePackageData, +} from "./types.ts"; + +import type { CallerMetadata } from "../validation/options.ts"; + +export type { ConfigFile, IgnoreFile, RelativeConfig, FilePackageData }; + +export function findConfigUpwards( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + rootDir: string, +): string | null { + return null; +} + +// eslint-disable-next-line require-yield +export function* findPackageData(filepath: string): Handler { + return { + filepath, + directories: [], + pkg: null, + isPackage: false, + }; +} + +// eslint-disable-next-line require-yield +export function* findRelativeConfig( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + pkgData: FilePackageData, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + envName: string, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + caller: CallerMetadata | undefined, +): Handler { + return { config: null, ignore: null }; +} + +// eslint-disable-next-line require-yield +export function* findRootConfig( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + dirname: string, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + envName: string, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + caller: CallerMetadata | undefined, +): Handler { + return null; +} + +// eslint-disable-next-line require-yield +export function* loadConfig( + name: string, + dirname: string, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + envName: string, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + caller: CallerMetadata | undefined, +): Handler { + throw new Error(`Cannot load ${name} relative to ${dirname} in a browser`); +} + +// eslint-disable-next-line require-yield +export function* resolveShowConfigPath( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + dirname: string, +): Handler { + return null; +} + +export const ROOT_CONFIG_FILENAMES: string[] = []; + +type Resolved = + | { loader: "require"; filepath: string } + | { loader: "import"; filepath: string }; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +export function resolvePlugin(name: string, dirname: string): Resolved | null { + return null; +} + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +export function resolvePreset(name: string, dirname: string): Resolved | null { + return null; +} + +export function loadPlugin( + name: string, + dirname: string, +): Handler<{ + filepath: string; + value: unknown; +}> { + throw new Error( + `Cannot load plugin ${name} relative to ${dirname} in a browser`, + ); +} + +export function loadPreset( + name: string, + dirname: string, +): Handler<{ + filepath: string; + value: unknown; +}> { + throw new Error( + `Cannot load preset ${name} relative to ${dirname} in a browser`, + ); +} diff --git a/node_modules/@babel/core/src/config/files/index.ts b/node_modules/@babel/core/src/config/files/index.ts new file mode 100644 index 00000000..b138e8da --- /dev/null +++ b/node_modules/@babel/core/src/config/files/index.ts @@ -0,0 +1,29 @@ +type indexBrowserType = typeof import("./index-browser"); +type indexType = typeof import("./index"); + +// Kind of gross, but essentially asserting that the exports of this module are the same as the +// exports of index-browser, since this file may be replaced at bundle time with index-browser. +({}) as any as indexBrowserType as indexType; + +export { findPackageData } from "./package.ts"; + +export { + findConfigUpwards, + findRelativeConfig, + findRootConfig, + loadConfig, + resolveShowConfigPath, + ROOT_CONFIG_FILENAMES, +} from "./configuration.ts"; +export type { + ConfigFile, + IgnoreFile, + RelativeConfig, + FilePackageData, +} from "./types.ts"; +export { + loadPlugin, + loadPreset, + resolvePlugin, + resolvePreset, +} from "./plugins.ts"; diff --git a/node_modules/@babel/core/src/config/resolve-targets-browser.ts b/node_modules/@babel/core/src/config/resolve-targets-browser.ts new file mode 100644 index 00000000..aa1edd1d --- /dev/null +++ b/node_modules/@babel/core/src/config/resolve-targets-browser.ts @@ -0,0 +1,42 @@ +/* c8 ignore start */ + +import type { ValidatedOptions } from "./validation/options.ts"; +import getTargets, { + type InputTargets, +} from "@babel/helper-compilation-targets"; + +import type { Targets } from "@babel/helper-compilation-targets"; + +export function resolveBrowserslistConfigFile( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + browserslistConfigFile: string, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + configFilePath: string, +): string | void { + return undefined; +} + +export function resolveTargets( + options: ValidatedOptions, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + root: string, +): Targets { + const optTargets = options.targets; + let targets: InputTargets; + + if (typeof optTargets === "string" || Array.isArray(optTargets)) { + targets = { browsers: optTargets }; + } else if (optTargets) { + if ("esmodules" in optTargets) { + targets = { ...optTargets, esmodules: "intersect" }; + } else { + // https://github.com/microsoft/TypeScript/issues/17002 + targets = optTargets as InputTargets; + } + } + + return getTargets(targets, { + ignoreBrowserslistConfig: true, + browserslistEnv: options.browserslistEnv, + }); +} diff --git a/node_modules/@babel/core/src/config/resolve-targets.ts b/node_modules/@babel/core/src/config/resolve-targets.ts new file mode 100644 index 00000000..21f86754 --- /dev/null +++ b/node_modules/@babel/core/src/config/resolve-targets.ts @@ -0,0 +1,56 @@ +type browserType = typeof import("./resolve-targets-browser"); +type nodeType = typeof import("./resolve-targets"); + +// Kind of gross, but essentially asserting that the exports of this module are the same as the +// exports of index-browser, since this file may be replaced at bundle time with index-browser. +({}) as any as browserType as nodeType; + +import type { ValidatedOptions } from "./validation/options.ts"; +import path from "node:path"; +import getTargets, { + type InputTargets, +} from "@babel/helper-compilation-targets"; + +import type { Targets } from "@babel/helper-compilation-targets"; + +export function resolveBrowserslistConfigFile( + browserslistConfigFile: string, + configFileDir: string, +): string | undefined { + return path.resolve(configFileDir, browserslistConfigFile); +} + +export function resolveTargets( + options: ValidatedOptions, + root: string, +): Targets { + const optTargets = options.targets; + let targets: InputTargets; + + if (typeof optTargets === "string" || Array.isArray(optTargets)) { + targets = { browsers: optTargets }; + } else if (optTargets) { + if ("esmodules" in optTargets) { + targets = { ...optTargets, esmodules: "intersect" }; + } else { + // https://github.com/microsoft/TypeScript/issues/17002 + targets = optTargets as InputTargets; + } + } + + const { browserslistConfigFile } = options; + let configFile; + let ignoreBrowserslistConfig = false; + if (typeof browserslistConfigFile === "string") { + configFile = browserslistConfigFile; + } else { + ignoreBrowserslistConfig = browserslistConfigFile === false; + } + + return getTargets(targets, { + ignoreBrowserslistConfig, + configFile, + configPath: root, + browserslistEnv: options.browserslistEnv, + }); +} diff --git a/node_modules/@babel/core/src/transform-file-browser.ts b/node_modules/@babel/core/src/transform-file-browser.ts new file mode 100644 index 00000000..0a15ca5e --- /dev/null +++ b/node_modules/@babel/core/src/transform-file-browser.ts @@ -0,0 +1,33 @@ +/* c8 ignore start */ + +// duplicated from transform-file so we do not have to import anything here +type TransformFile = { + (filename: string, callback: (error: Error, file: null) => void): void; + ( + filename: string, + opts: any, + callback: (error: Error, file: null) => void, + ): void; +}; + +export const transformFile: TransformFile = function transformFile( + filename, + opts, + callback?: (error: Error, file: null) => void, +) { + if (typeof opts === "function") { + callback = opts; + } + + callback(new Error("Transforming files is not supported in browsers"), null); +}; + +export function transformFileSync(): never { + throw new Error("Transforming files is not supported in browsers"); +} + +export function transformFileAsync() { + return Promise.reject( + new Error("Transforming files is not supported in browsers"), + ); +} diff --git a/node_modules/@babel/core/src/transform-file.ts b/node_modules/@babel/core/src/transform-file.ts new file mode 100644 index 00000000..6bc2f836 --- /dev/null +++ b/node_modules/@babel/core/src/transform-file.ts @@ -0,0 +1,55 @@ +import gensync, { type Handler } from "gensync"; + +import loadConfig from "./config/index.ts"; +import type { InputOptions, ResolvedConfig } from "./config/index.ts"; +import { run } from "./transformation/index.ts"; +import type { FileResult, FileResultCallback } from "./transformation/index.ts"; +import * as fs from "./gensync-utils/fs.ts"; + +type transformFileBrowserType = typeof import("./transform-file-browser"); +type transformFileType = typeof import("./transform-file"); + +// Kind of gross, but essentially asserting that the exports of this module are the same as the +// exports of transform-file-browser, since this file may be replaced at bundle time with +// transform-file-browser. +({}) as any as transformFileBrowserType as transformFileType; + +const transformFileRunner = gensync(function* ( + filename: string, + opts?: InputOptions, +): Handler { + const options = { ...opts, filename }; + + const config: ResolvedConfig | null = yield* loadConfig(options); + if (config === null) return null; + + const code = yield* fs.readFile(filename, "utf8"); + return yield* run(config, code); +}); + +// @ts-expect-error TS doesn't detect that this signature is compatible +export function transformFile( + filename: string, + callback: FileResultCallback, +): void; +export function transformFile( + filename: string, + opts: InputOptions | undefined | null, + callback: FileResultCallback, +): void; +export function transformFile( + ...args: Parameters +) { + transformFileRunner.errback(...args); +} + +export function transformFileSync( + ...args: Parameters +) { + return transformFileRunner.sync(...args); +} +export function transformFileAsync( + ...args: Parameters +) { + return transformFileRunner.async(...args); +} diff --git a/node_modules/@babel/generator/LICENSE b/node_modules/@babel/generator/LICENSE new file mode 100644 index 00000000..f31575ec --- /dev/null +++ b/node_modules/@babel/generator/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2014-present Sebastian McKenzie 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/@babel/generator/README.md b/node_modules/@babel/generator/README.md new file mode 100644 index 00000000..d56149a8 --- /dev/null +++ b/node_modules/@babel/generator/README.md @@ -0,0 +1,19 @@ +# @babel/generator + +> Turns an AST into code. + +See our website [@babel/generator](https://babeljs.io/docs/babel-generator) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20generator%22+is%3Aopen) associated with this package. + +## Install + +Using npm: + +```sh +npm install --save-dev @babel/generator +``` + +or using yarn: + +```sh +yarn add @babel/generator --dev +``` diff --git a/node_modules/@babel/generator/lib/buffer.js b/node_modules/@babel/generator/lib/buffer.js new file mode 100644 index 00000000..23bedfa7 --- /dev/null +++ b/node_modules/@babel/generator/lib/buffer.js @@ -0,0 +1,317 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +class Buffer { + constructor(map, indentChar) { + this._map = null; + this._buf = ""; + this._str = ""; + this._appendCount = 0; + this._last = 0; + this._queue = []; + this._queueCursor = 0; + this._canMarkIdName = true; + this._indentChar = ""; + this._fastIndentations = []; + this._position = { + line: 1, + column: 0 + }; + this._sourcePosition = { + identifierName: undefined, + identifierNamePos: undefined, + line: undefined, + column: undefined, + filename: undefined + }; + this._map = map; + this._indentChar = indentChar; + for (let i = 0; i < 64; i++) { + this._fastIndentations.push(indentChar.repeat(i)); + } + this._allocQueue(); + } + _allocQueue() { + const queue = this._queue; + for (let i = 0; i < 16; i++) { + queue.push({ + char: 0, + repeat: 1, + line: undefined, + column: undefined, + identifierName: undefined, + identifierNamePos: undefined, + filename: "" + }); + } + } + _pushQueue(char, repeat, line, column, filename) { + const cursor = this._queueCursor; + if (cursor === this._queue.length) { + this._allocQueue(); + } + const item = this._queue[cursor]; + item.char = char; + item.repeat = repeat; + item.line = line; + item.column = column; + item.filename = filename; + this._queueCursor++; + } + _popQueue() { + if (this._queueCursor === 0) { + throw new Error("Cannot pop from empty queue"); + } + return this._queue[--this._queueCursor]; + } + get() { + this._flush(); + const map = this._map; + const result = { + code: (this._buf + this._str).trimRight(), + decodedMap: map == null ? void 0 : map.getDecoded(), + get __mergedMap() { + return this.map; + }, + get map() { + const resultMap = map ? map.get() : null; + result.map = resultMap; + return resultMap; + }, + set map(value) { + Object.defineProperty(result, "map", { + value, + writable: true + }); + }, + get rawMappings() { + const mappings = map == null ? void 0 : map.getRawMappings(); + result.rawMappings = mappings; + return mappings; + }, + set rawMappings(value) { + Object.defineProperty(result, "rawMappings", { + value, + writable: true + }); + } + }; + return result; + } + append(str, maybeNewline) { + this._flush(); + this._append(str, this._sourcePosition, maybeNewline); + } + appendChar(char) { + this._flush(); + this._appendChar(char, 1, this._sourcePosition); + } + queue(char) { + if (char === 10) { + while (this._queueCursor !== 0) { + const char = this._queue[this._queueCursor - 1].char; + if (char !== 32 && char !== 9) { + break; + } + this._queueCursor--; + } + } + const sourcePosition = this._sourcePosition; + this._pushQueue(char, 1, sourcePosition.line, sourcePosition.column, sourcePosition.filename); + } + queueIndentation(repeat) { + if (repeat === 0) return; + this._pushQueue(-1, repeat, undefined, undefined, undefined); + } + _flush() { + const queueCursor = this._queueCursor; + const queue = this._queue; + for (let i = 0; i < queueCursor; i++) { + const item = queue[i]; + this._appendChar(item.char, item.repeat, item); + } + this._queueCursor = 0; + } + _appendChar(char, repeat, sourcePos) { + this._last = char; + if (char === -1) { + const fastIndentation = this._fastIndentations[repeat]; + if (fastIndentation !== undefined) { + this._str += fastIndentation; + } else { + this._str += repeat > 1 ? this._indentChar.repeat(repeat) : this._indentChar; + } + } else { + this._str += repeat > 1 ? String.fromCharCode(char).repeat(repeat) : String.fromCharCode(char); + } + if (char !== 10) { + this._mark(sourcePos.line, sourcePos.column, sourcePos.identifierName, sourcePos.identifierNamePos, sourcePos.filename); + this._position.column += repeat; + } else { + this._position.line++; + this._position.column = 0; + } + if (this._canMarkIdName) { + sourcePos.identifierName = undefined; + sourcePos.identifierNamePos = undefined; + } + } + _append(str, sourcePos, maybeNewline) { + const len = str.length; + const position = this._position; + this._last = str.charCodeAt(len - 1); + if (++this._appendCount > 4096) { + +this._str; + this._buf += this._str; + this._str = str; + this._appendCount = 0; + } else { + this._str += str; + } + if (!maybeNewline && !this._map) { + position.column += len; + return; + } + const { + column, + identifierName, + identifierNamePos, + filename + } = sourcePos; + let line = sourcePos.line; + if ((identifierName != null || identifierNamePos != null) && this._canMarkIdName) { + sourcePos.identifierName = undefined; + sourcePos.identifierNamePos = undefined; + } + let i = str.indexOf("\n"); + let last = 0; + if (i !== 0) { + this._mark(line, column, identifierName, identifierNamePos, filename); + } + while (i !== -1) { + position.line++; + position.column = 0; + last = i + 1; + if (last < len && line !== undefined) { + this._mark(++line, 0, null, null, filename); + } + i = str.indexOf("\n", last); + } + position.column += len - last; + } + _mark(line, column, identifierName, identifierNamePos, filename) { + var _this$_map; + (_this$_map = this._map) == null || _this$_map.mark(this._position, line, column, identifierName, identifierNamePos, filename); + } + removeTrailingNewline() { + const queueCursor = this._queueCursor; + if (queueCursor !== 0 && this._queue[queueCursor - 1].char === 10) { + this._queueCursor--; + } + } + removeLastSemicolon() { + const queueCursor = this._queueCursor; + if (queueCursor !== 0 && this._queue[queueCursor - 1].char === 59) { + this._queueCursor--; + } + } + getLastChar() { + const queueCursor = this._queueCursor; + return queueCursor !== 0 ? this._queue[queueCursor - 1].char : this._last; + } + getNewlineCount() { + const queueCursor = this._queueCursor; + let count = 0; + if (queueCursor === 0) return this._last === 10 ? 1 : 0; + for (let i = queueCursor - 1; i >= 0; i--) { + if (this._queue[i].char !== 10) { + break; + } + count++; + } + return count === queueCursor && this._last === 10 ? count + 1 : count; + } + endsWithCharAndNewline() { + const queue = this._queue; + const queueCursor = this._queueCursor; + if (queueCursor !== 0) { + const lastCp = queue[queueCursor - 1].char; + if (lastCp !== 10) return; + if (queueCursor > 1) { + return queue[queueCursor - 2].char; + } else { + return this._last; + } + } + } + hasContent() { + return this._queueCursor !== 0 || !!this._last; + } + exactSource(loc, cb) { + if (!this._map) { + cb(); + return; + } + this.source("start", loc); + const identifierName = loc.identifierName; + const sourcePos = this._sourcePosition; + if (identifierName) { + this._canMarkIdName = false; + sourcePos.identifierName = identifierName; + } + cb(); + if (identifierName) { + this._canMarkIdName = true; + sourcePos.identifierName = undefined; + sourcePos.identifierNamePos = undefined; + } + this.source("end", loc); + } + source(prop, loc) { + if (!this._map) return; + this._normalizePosition(prop, loc, 0); + } + sourceWithOffset(prop, loc, columnOffset) { + if (!this._map) return; + this._normalizePosition(prop, loc, columnOffset); + } + _normalizePosition(prop, loc, columnOffset) { + const pos = loc[prop]; + const target = this._sourcePosition; + if (pos) { + target.line = pos.line; + target.column = Math.max(pos.column + columnOffset, 0); + target.filename = loc.filename; + } + } + getCurrentColumn() { + const queue = this._queue; + const queueCursor = this._queueCursor; + let lastIndex = -1; + let len = 0; + for (let i = 0; i < queueCursor; i++) { + const item = queue[i]; + if (item.char === 10) { + lastIndex = len; + } + len += item.repeat; + } + return lastIndex === -1 ? this._position.column + len : len - 1 - lastIndex; + } + getCurrentLine() { + let count = 0; + const queue = this._queue; + for (let i = 0; i < this._queueCursor; i++) { + if (queue[i].char === 10) { + count++; + } + } + return this._position.line + count; + } +} +exports.default = Buffer; + +//# sourceMappingURL=buffer.js.map diff --git a/node_modules/@babel/generator/lib/buffer.js.map b/node_modules/@babel/generator/lib/buffer.js.map new file mode 100644 index 00000000..d92c017d --- /dev/null +++ b/node_modules/@babel/generator/lib/buffer.js.map @@ -0,0 +1 @@ +{"version":3,"names":["Buffer","constructor","map","indentChar","_map","_buf","_str","_appendCount","_last","_queue","_queueCursor","_canMarkIdName","_indentChar","_fastIndentations","_position","line","column","_sourcePosition","identifierName","undefined","identifierNamePos","filename","i","push","repeat","_allocQueue","queue","char","_pushQueue","cursor","length","item","_popQueue","Error","get","_flush","result","code","trimRight","decodedMap","getDecoded","__mergedMap","resultMap","value","Object","defineProperty","writable","rawMappings","mappings","getRawMappings","append","str","maybeNewline","_append","appendChar","_appendChar","sourcePosition","queueIndentation","queueCursor","sourcePos","fastIndentation","String","fromCharCode","_mark","len","position","charCodeAt","indexOf","last","_this$_map","mark","removeTrailingNewline","removeLastSemicolon","getLastChar","getNewlineCount","count","endsWithCharAndNewline","lastCp","hasContent","exactSource","loc","cb","source","prop","_normalizePosition","sourceWithOffset","columnOffset","pos","target","Math","max","getCurrentColumn","lastIndex","getCurrentLine","exports","default"],"sources":["../src/buffer.ts"],"sourcesContent":["import type SourceMap from \"./source-map.ts\";\n\n// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charcodes from \"charcodes\";\n\nexport type Pos = {\n line: number;\n column: number;\n index: number;\n};\nexport type Loc = {\n start?: Pos;\n end?: Pos;\n filename?: string;\n};\ntype SourcePos = {\n line: number | undefined;\n column: number | undefined;\n identifierName: string | undefined;\n filename: string | undefined;\n};\ntype InternalSourcePos = SourcePos & { identifierNamePos: Pos };\n\ntype QueueItem = {\n char: number;\n repeat: number;\n line: number | undefined;\n column: number | undefined;\n identifierName: undefined; // Not used, it always undefined.\n identifierNamePos: undefined; // Not used, it always undefined.\n filename: string | undefined;\n};\n\nexport default class Buffer {\n constructor(map: SourceMap | null, indentChar: string) {\n this._map = map;\n this._indentChar = indentChar;\n\n for (let i = 0; i < 64; i++) {\n this._fastIndentations.push(indentChar.repeat(i));\n }\n\n this._allocQueue();\n }\n\n _map: SourceMap = null;\n _buf = \"\";\n _str = \"\";\n _appendCount = 0;\n _last = 0;\n _queue: QueueItem[] = [];\n _queueCursor = 0;\n _canMarkIdName = true;\n _indentChar = \"\";\n _fastIndentations: string[] = [];\n\n _position = {\n line: 1,\n column: 0,\n };\n _sourcePosition: InternalSourcePos = {\n identifierName: undefined,\n identifierNamePos: undefined,\n line: undefined,\n column: undefined,\n filename: undefined,\n };\n\n _allocQueue() {\n const queue = this._queue;\n\n for (let i = 0; i < 16; i++) {\n queue.push({\n char: 0,\n repeat: 1,\n line: undefined,\n column: undefined,\n identifierName: undefined,\n identifierNamePos: undefined,\n filename: \"\",\n });\n }\n }\n\n _pushQueue(\n char: number,\n repeat: number,\n line: number | undefined,\n column: number | undefined,\n filename: string | undefined,\n ) {\n const cursor = this._queueCursor;\n if (cursor === this._queue.length) {\n this._allocQueue();\n }\n const item = this._queue[cursor];\n item.char = char;\n item.repeat = repeat;\n item.line = line;\n item.column = column;\n item.filename = filename;\n\n this._queueCursor++;\n }\n\n _popQueue(): QueueItem {\n if (this._queueCursor === 0) {\n throw new Error(\"Cannot pop from empty queue\");\n }\n return this._queue[--this._queueCursor];\n }\n\n /**\n * Get the final string output from the buffer, along with the sourcemap if one exists.\n */\n\n get() {\n this._flush();\n\n const map = this._map;\n const result = {\n // Whatever trim is used here should not execute a regex against the\n // source string since it may be arbitrarily large after all transformations\n code: (this._buf + this._str).trimRight(),\n // Decoded sourcemap is free to generate.\n decodedMap: map?.getDecoded(),\n // Used as a marker for backwards compatibility. We moved input map merging\n // into the generator. We cannot merge the input map a second time, so the\n // presence of this field tells us we've already done the work.\n get __mergedMap() {\n return this.map;\n },\n // Encoding the sourcemap is moderately CPU expensive.\n get map() {\n const resultMap = map ? map.get() : null;\n result.map = resultMap;\n return resultMap;\n },\n set map(value) {\n Object.defineProperty(result, \"map\", { value, writable: true });\n },\n // Retrieving the raw mappings is very memory intensive.\n get rawMappings() {\n const mappings = map?.getRawMappings();\n result.rawMappings = mappings;\n return mappings;\n },\n set rawMappings(value) {\n Object.defineProperty(result, \"rawMappings\", { value, writable: true });\n },\n };\n\n return result;\n }\n\n /**\n * Add a string to the buffer that cannot be reverted.\n */\n\n append(str: string, maybeNewline: boolean): void {\n this._flush();\n\n this._append(str, this._sourcePosition, maybeNewline);\n }\n\n appendChar(char: number): void {\n this._flush();\n this._appendChar(char, 1, this._sourcePosition);\n }\n\n /**\n * Add a string to the buffer than can be reverted.\n */\n queue(char: number): void {\n // Drop trailing spaces when a newline is inserted.\n if (char === charcodes.lineFeed) {\n while (this._queueCursor !== 0) {\n const char = this._queue[this._queueCursor - 1].char;\n if (char !== charcodes.space && char !== charcodes.tab) {\n break;\n }\n\n this._queueCursor--;\n }\n }\n\n const sourcePosition = this._sourcePosition;\n this._pushQueue(\n char,\n 1,\n sourcePosition.line,\n sourcePosition.column,\n sourcePosition.filename,\n );\n }\n\n /**\n * Same as queue, but this indentation will never have a sourcemap marker.\n */\n queueIndentation(repeat: number): void {\n if (repeat === 0) return;\n this._pushQueue(-1, repeat, undefined, undefined, undefined);\n }\n\n _flush(): void {\n const queueCursor = this._queueCursor;\n const queue = this._queue;\n for (let i = 0; i < queueCursor; i++) {\n const item: QueueItem = queue[i];\n this._appendChar(item.char, item.repeat, item);\n }\n this._queueCursor = 0;\n }\n\n _appendChar(\n char: number,\n repeat: number,\n sourcePos: InternalSourcePos,\n ): void {\n this._last = char;\n\n if (char === -1) {\n const fastIndentation = this._fastIndentations[repeat];\n if (fastIndentation !== undefined) {\n this._str += fastIndentation;\n } else {\n this._str +=\n repeat > 1 ? this._indentChar.repeat(repeat) : this._indentChar;\n }\n } else {\n this._str +=\n repeat > 1\n ? String.fromCharCode(char).repeat(repeat)\n : String.fromCharCode(char);\n }\n\n if (char !== charcodes.lineFeed) {\n this._mark(\n sourcePos.line,\n sourcePos.column,\n sourcePos.identifierName,\n sourcePos.identifierNamePos,\n sourcePos.filename,\n );\n this._position.column += repeat;\n } else {\n this._position.line++;\n this._position.column = 0;\n }\n\n if (this._canMarkIdName) {\n sourcePos.identifierName = undefined;\n sourcePos.identifierNamePos = undefined;\n }\n }\n\n _append(\n str: string,\n sourcePos: InternalSourcePos,\n maybeNewline: boolean,\n ): void {\n const len = str.length;\n const position = this._position;\n\n this._last = str.charCodeAt(len - 1);\n\n if (++this._appendCount > 4096) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n +this._str; // Unexplainable huge performance boost. Ref: https://github.com/davidmarkclements/flatstr License: MIT\n this._buf += this._str;\n this._str = str;\n this._appendCount = 0;\n } else {\n this._str += str;\n }\n\n if (!maybeNewline && !this._map) {\n position.column += len;\n return;\n }\n\n const { column, identifierName, identifierNamePos, filename } = sourcePos;\n let line = sourcePos.line;\n\n if (\n (identifierName != null || identifierNamePos != null) &&\n this._canMarkIdName\n ) {\n sourcePos.identifierName = undefined;\n sourcePos.identifierNamePos = undefined;\n }\n\n // Search for newline chars. We search only for `\\n`, since both `\\r` and\n // `\\r\\n` are normalized to `\\n` during parse. We exclude `\\u2028` and\n // `\\u2029` for performance reasons, they're so uncommon that it's probably\n // ok. It's also unclear how other sourcemap utilities handle them...\n let i = str.indexOf(\"\\n\");\n let last = 0;\n\n // If the string starts with a newline char, then adding a mark is redundant.\n // This catches both \"no newlines\" and \"newline after several chars\".\n if (i !== 0) {\n this._mark(line, column, identifierName, identifierNamePos, filename);\n }\n\n // Now, find each remaining newline char in the string.\n while (i !== -1) {\n position.line++;\n position.column = 0;\n last = i + 1;\n\n // We mark the start of each line, which happens directly after this newline char\n // unless this is the last char.\n // When manually adding multi-line content (such as a comment), `line` will be `undefined`.\n if (last < len && line !== undefined) {\n this._mark(++line, 0, null, null, filename);\n }\n i = str.indexOf(\"\\n\", last);\n }\n position.column += len - last;\n }\n\n _mark(\n line: number | undefined,\n column: number | undefined,\n identifierName: string | undefined,\n identifierNamePos: Pos | undefined,\n filename: string | undefined,\n ): void {\n this._map?.mark(\n this._position,\n line,\n column,\n identifierName,\n identifierNamePos,\n filename,\n );\n }\n\n removeTrailingNewline(): void {\n const queueCursor = this._queueCursor;\n if (\n queueCursor !== 0 &&\n this._queue[queueCursor - 1].char === charcodes.lineFeed\n ) {\n this._queueCursor--;\n }\n }\n\n removeLastSemicolon(): void {\n const queueCursor = this._queueCursor;\n if (\n queueCursor !== 0 &&\n this._queue[queueCursor - 1].char === charcodes.semicolon\n ) {\n this._queueCursor--;\n }\n }\n\n getLastChar(): number {\n const queueCursor = this._queueCursor;\n return queueCursor !== 0 ? this._queue[queueCursor - 1].char : this._last;\n }\n\n /**\n * This will only detect at most 1 newline after a call to `flush()`,\n * but this has not been found so far, and an accurate count can be achieved if needed later.\n */\n getNewlineCount(): number {\n const queueCursor = this._queueCursor;\n let count = 0;\n if (queueCursor === 0) return this._last === charcodes.lineFeed ? 1 : 0;\n for (let i = queueCursor - 1; i >= 0; i--) {\n if (this._queue[i].char !== charcodes.lineFeed) {\n break;\n }\n count++;\n }\n return count === queueCursor && this._last === charcodes.lineFeed\n ? count + 1\n : count;\n }\n\n /**\n * check if current _last + queue ends with newline, return the character before newline\n */\n endsWithCharAndNewline(): number {\n const queue = this._queue;\n const queueCursor = this._queueCursor;\n if (queueCursor !== 0) {\n // every element in queue is one-length whitespace string\n const lastCp = queue[queueCursor - 1].char;\n if (lastCp !== charcodes.lineFeed) return;\n if (queueCursor > 1) {\n return queue[queueCursor - 2].char;\n } else {\n return this._last;\n }\n }\n // We assume that everything being matched is at most a single token plus some whitespace,\n // which everything currently is, but otherwise we'd have to expand _last or check _buf.\n }\n\n hasContent(): boolean {\n return this._queueCursor !== 0 || !!this._last;\n }\n\n /**\n * Certain sourcemap usecases expect mappings to be more accurate than\n * Babel's generic sourcemap handling allows. For now, we special-case\n * identifiers to allow for the primary cases to work.\n * The goal of this line is to ensure that the map output from Babel will\n * have an exact range on identifiers in the output code. Without this\n * line, Babel would potentially include some number of trailing tokens\n * that are printed after the identifier, but before another location has\n * been assigned.\n * This allows tooling like Rollup and Webpack to more accurately perform\n * their own transformations. Most importantly, this allows the import/export\n * transformations performed by those tools to loose less information when\n * applying their own transformations on top of the code and map results\n * generated by Babel itself.\n *\n * The primary example of this is the snippet:\n *\n * import mod from \"mod\";\n * mod();\n *\n * With this line, there will be one mapping range over \"mod\" and another\n * over \"();\", where previously it would have been a single mapping.\n */\n exactSource(loc: Loc | undefined, cb: () => void) {\n if (!this._map) {\n cb();\n return;\n }\n\n this.source(\"start\", loc);\n // @ts-expect-error identifierName is not defined\n const identifierName = loc.identifierName;\n const sourcePos = this._sourcePosition;\n if (identifierName) {\n this._canMarkIdName = false;\n sourcePos.identifierName = identifierName;\n }\n cb();\n\n if (identifierName) {\n this._canMarkIdName = true;\n sourcePos.identifierName = undefined;\n sourcePos.identifierNamePos = undefined;\n }\n this.source(\"end\", loc);\n }\n\n /**\n * Sets a given position as the current source location so generated code after this call\n * will be given this position in the sourcemap.\n */\n\n source(prop: \"start\" | \"end\", loc: Loc | undefined): void {\n if (!this._map) return;\n\n // Since this is called extremely often, we reuse the same _sourcePosition\n // object for the whole lifetime of the buffer.\n this._normalizePosition(prop, loc, 0);\n }\n\n sourceWithOffset(\n prop: \"start\" | \"end\",\n loc: Loc | undefined,\n columnOffset: number,\n ): void {\n if (!this._map) return;\n\n this._normalizePosition(prop, loc, columnOffset);\n }\n\n _normalizePosition(prop: \"start\" | \"end\", loc: Loc, columnOffset: number) {\n const pos = loc[prop];\n const target = this._sourcePosition;\n\n if (pos) {\n target.line = pos.line;\n // TODO: Fix https://github.com/babel/babel/issues/15712 in downstream\n target.column = Math.max(pos.column + columnOffset, 0);\n target.filename = loc.filename;\n }\n }\n\n getCurrentColumn(): number {\n const queue = this._queue;\n const queueCursor = this._queueCursor;\n\n let lastIndex = -1;\n let len = 0;\n for (let i = 0; i < queueCursor; i++) {\n const item = queue[i];\n if (item.char === charcodes.lineFeed) {\n lastIndex = len;\n }\n len += item.repeat;\n }\n\n return lastIndex === -1 ? this._position.column + len : len - 1 - lastIndex;\n }\n\n getCurrentLine(): number {\n let count = 0;\n\n const queue = this._queue;\n for (let i = 0; i < this._queueCursor; i++) {\n if (queue[i].char === charcodes.lineFeed) {\n count++;\n }\n }\n\n return this._position.line + count;\n }\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/generator/lib/generators/base.js b/node_modules/@babel/generator/lib/generators/base.js new file mode 100644 index 00000000..eca90770 --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/base.js @@ -0,0 +1,87 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.BlockStatement = BlockStatement; +exports.Directive = Directive; +exports.DirectiveLiteral = DirectiveLiteral; +exports.File = File; +exports.InterpreterDirective = InterpreterDirective; +exports.Placeholder = Placeholder; +exports.Program = Program; +function File(node) { + if (node.program) { + this.print(node.program.interpreter); + } + this.print(node.program); +} +function Program(node) { + var _node$directives; + this.noIndentInnerCommentsHere(); + this.printInnerComments(); + const directivesLen = (_node$directives = node.directives) == null ? void 0 : _node$directives.length; + if (directivesLen) { + var _node$directives$trai; + const newline = node.body.length ? 2 : 1; + this.printSequence(node.directives, undefined, newline); + if (!((_node$directives$trai = node.directives[directivesLen - 1].trailingComments) != null && _node$directives$trai.length)) { + this.newline(newline); + } + } + this.printSequence(node.body); +} +function BlockStatement(node) { + var _node$directives2; + this.tokenChar(123); + const exit = this.enterDelimited(); + const directivesLen = (_node$directives2 = node.directives) == null ? void 0 : _node$directives2.length; + if (directivesLen) { + var _node$directives$trai2; + const newline = node.body.length ? 2 : 1; + this.printSequence(node.directives, true, newline); + if (!((_node$directives$trai2 = node.directives[directivesLen - 1].trailingComments) != null && _node$directives$trai2.length)) { + this.newline(newline); + } + } + this.printSequence(node.body, true); + exit(); + this.rightBrace(node); +} +function Directive(node) { + this.print(node.value); + this.semicolon(); +} +const unescapedSingleQuoteRE = /(?:^|[^\\])(?:\\\\)*'/; +const unescapedDoubleQuoteRE = /(?:^|[^\\])(?:\\\\)*"/; +function DirectiveLiteral(node) { + const raw = this.getPossibleRaw(node); + if (!this.format.minified && raw !== undefined) { + this.token(raw); + return; + } + const { + value + } = node; + if (!unescapedDoubleQuoteRE.test(value)) { + this.token(`"${value}"`); + } else if (!unescapedSingleQuoteRE.test(value)) { + this.token(`'${value}'`); + } else { + throw new Error("Malformed AST: it is not possible to print a directive containing" + " both unescaped single and double quotes."); + } +} +function InterpreterDirective(node) { + this.token(`#!${node.value}`); + this.newline(1, true); +} +function Placeholder(node) { + this.token("%%"); + this.print(node.name); + this.token("%%"); + if (node.expectedNode === "Statement") { + this.semicolon(); + } +} + +//# sourceMappingURL=base.js.map diff --git a/node_modules/@babel/generator/lib/generators/base.js.map b/node_modules/@babel/generator/lib/generators/base.js.map new file mode 100644 index 00000000..c40d63c5 --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/base.js.map @@ -0,0 +1 @@ +{"version":3,"names":["File","node","program","print","interpreter","Program","_node$directives","noIndentInnerCommentsHere","printInnerComments","directivesLen","directives","length","_node$directives$trai","newline","body","printSequence","undefined","trailingComments","BlockStatement","_node$directives2","token","exit","enterDelimited","_node$directives$trai2","rightBrace","Directive","value","semicolon","unescapedSingleQuoteRE","unescapedDoubleQuoteRE","DirectiveLiteral","raw","getPossibleRaw","format","minified","test","Error","InterpreterDirective","Placeholder","name","expectedNode"],"sources":["../../src/generators/base.ts"],"sourcesContent":["import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\n\nexport function File(this: Printer, node: t.File) {\n if (node.program) {\n // Print this here to ensure that Program node 'leadingComments' still\n // get printed after the hashbang.\n this.print(node.program.interpreter);\n }\n\n this.print(node.program);\n}\n\nexport function Program(this: Printer, node: t.Program) {\n // An empty Program doesn't have any inner tokens, so\n // we must explicitly print its inner comments.\n this.noIndentInnerCommentsHere();\n this.printInnerComments();\n\n const directivesLen = node.directives?.length;\n if (directivesLen) {\n const newline = node.body.length ? 2 : 1;\n this.printSequence(node.directives, undefined, newline);\n if (!node.directives[directivesLen - 1].trailingComments?.length) {\n this.newline(newline);\n }\n }\n\n this.printSequence(node.body);\n}\n\nexport function BlockStatement(this: Printer, node: t.BlockStatement) {\n this.token(\"{\");\n const exit = this.enterDelimited();\n\n const directivesLen = node.directives?.length;\n if (directivesLen) {\n const newline = node.body.length ? 2 : 1;\n this.printSequence(node.directives, true, newline);\n if (!node.directives[directivesLen - 1].trailingComments?.length) {\n this.newline(newline);\n }\n }\n\n this.printSequence(node.body, true);\n\n exit();\n this.rightBrace(node);\n}\n\nexport function Directive(this: Printer, node: t.Directive) {\n this.print(node.value);\n this.semicolon();\n}\n\n// These regexes match an even number of \\ followed by a quote\nconst unescapedSingleQuoteRE = /(?:^|[^\\\\])(?:\\\\\\\\)*'/;\nconst unescapedDoubleQuoteRE = /(?:^|[^\\\\])(?:\\\\\\\\)*\"/;\n\nexport function DirectiveLiteral(this: Printer, node: t.DirectiveLiteral) {\n const raw = this.getPossibleRaw(node);\n if (!this.format.minified && raw !== undefined) {\n this.token(raw);\n return;\n }\n\n const { value } = node;\n\n // NOTE: In directives we can't change escapings,\n // because they change the behavior.\n // e.g. \"us\\x65 strict\" (\\x65 is e) is not a \"use strict\" directive.\n\n if (!unescapedDoubleQuoteRE.test(value)) {\n this.token(`\"${value}\"`);\n } else if (!unescapedSingleQuoteRE.test(value)) {\n this.token(`'${value}'`);\n } else {\n throw new Error(\n \"Malformed AST: it is not possible to print a directive containing\" +\n \" both unescaped single and double quotes.\",\n );\n }\n}\n\nexport function InterpreterDirective(\n this: Printer,\n node: t.InterpreterDirective,\n) {\n this.token(`#!${node.value}`);\n this.newline(1, true);\n}\n\nexport function Placeholder(this: Printer, node: t.Placeholder) {\n this.token(\"%%\");\n this.print(node.name);\n this.token(\"%%\");\n\n if (node.expectedNode === \"Statement\") {\n this.semicolon();\n }\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/generator/lib/generators/classes.js b/node_modules/@babel/generator/lib/generators/classes.js new file mode 100644 index 00000000..6cdc9754 --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/classes.js @@ -0,0 +1,212 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ClassAccessorProperty = ClassAccessorProperty; +exports.ClassBody = ClassBody; +exports.ClassExpression = exports.ClassDeclaration = ClassDeclaration; +exports.ClassMethod = ClassMethod; +exports.ClassPrivateMethod = ClassPrivateMethod; +exports.ClassPrivateProperty = ClassPrivateProperty; +exports.ClassProperty = ClassProperty; +exports.StaticBlock = StaticBlock; +exports._classMethodHead = _classMethodHead; +var _t = require("@babel/types"); +const { + isExportDefaultDeclaration, + isExportNamedDeclaration +} = _t; +function ClassDeclaration(node, parent) { + const inExport = isExportDefaultDeclaration(parent) || isExportNamedDeclaration(parent); + if (!inExport || !this._shouldPrintDecoratorsBeforeExport(parent)) { + this.printJoin(node.decorators); + } + if (node.declare) { + this.word("declare"); + this.space(); + } + if (node.abstract) { + this.word("abstract"); + this.space(); + } + this.word("class"); + if (node.id) { + this.space(); + this.print(node.id); + } + this.print(node.typeParameters); + if (node.superClass) { + this.space(); + this.word("extends"); + this.space(); + this.print(node.superClass); + this.print(node.superTypeParameters); + } + if (node.implements) { + this.space(); + this.word("implements"); + this.space(); + this.printList(node.implements); + } + this.space(); + this.print(node.body); +} +function ClassBody(node) { + this.tokenChar(123); + if (node.body.length === 0) { + this.tokenChar(125); + } else { + this.newline(); + const separator = classBodyEmptySemicolonsPrinter(this, node); + separator == null || separator(-1); + const exit = this.enterDelimited(); + this.printJoin(node.body, true, true, separator, true); + exit(); + if (!this.endsWith(10)) this.newline(); + this.rightBrace(node); + } +} +function classBodyEmptySemicolonsPrinter(printer, node) { + if (!printer.tokenMap || node.start == null || node.end == null) { + return null; + } + const indexes = printer.tokenMap.getIndexes(node); + if (!indexes) return null; + let k = 1; + let occurrenceCount = 0; + let nextLocIndex = 0; + const advanceNextLocIndex = () => { + while (nextLocIndex < node.body.length && node.body[nextLocIndex].start == null) { + nextLocIndex++; + } + }; + advanceNextLocIndex(); + return i => { + if (nextLocIndex <= i) { + nextLocIndex = i + 1; + advanceNextLocIndex(); + } + const end = nextLocIndex === node.body.length ? node.end : node.body[nextLocIndex].start; + let tok; + while (k < indexes.length && printer.tokenMap.matchesOriginal(tok = printer._tokens[indexes[k]], ";") && tok.start < end) { + printer.token(";", undefined, occurrenceCount++); + k++; + } + }; +} +function ClassProperty(node) { + this.printJoin(node.decorators); + if (!node.static && !this.format.preserveFormat) { + var _node$key$loc; + const endLine = (_node$key$loc = node.key.loc) == null || (_node$key$loc = _node$key$loc.end) == null ? void 0 : _node$key$loc.line; + if (endLine) this.catchUp(endLine); + } + this.tsPrintClassMemberModifiers(node); + if (node.computed) { + this.tokenChar(91); + this.print(node.key); + this.tokenChar(93); + } else { + this._variance(node); + this.print(node.key); + } + if (node.optional) { + this.tokenChar(63); + } + if (node.definite) { + this.tokenChar(33); + } + this.print(node.typeAnnotation); + if (node.value) { + this.space(); + this.tokenChar(61); + this.space(); + this.print(node.value); + } + this.semicolon(); +} +function ClassAccessorProperty(node) { + var _node$key$loc2; + this.printJoin(node.decorators); + const endLine = (_node$key$loc2 = node.key.loc) == null || (_node$key$loc2 = _node$key$loc2.end) == null ? void 0 : _node$key$loc2.line; + if (endLine) this.catchUp(endLine); + this.tsPrintClassMemberModifiers(node); + this.word("accessor", true); + this.space(); + if (node.computed) { + this.tokenChar(91); + this.print(node.key); + this.tokenChar(93); + } else { + this._variance(node); + this.print(node.key); + } + if (node.optional) { + this.tokenChar(63); + } + if (node.definite) { + this.tokenChar(33); + } + this.print(node.typeAnnotation); + if (node.value) { + this.space(); + this.tokenChar(61); + this.space(); + this.print(node.value); + } + this.semicolon(); +} +function ClassPrivateProperty(node) { + this.printJoin(node.decorators); + this.tsPrintClassMemberModifiers(node); + this.print(node.key); + if (node.optional) { + this.tokenChar(63); + } + if (node.definite) { + this.tokenChar(33); + } + this.print(node.typeAnnotation); + if (node.value) { + this.space(); + this.tokenChar(61); + this.space(); + this.print(node.value); + } + this.semicolon(); +} +function ClassMethod(node) { + this._classMethodHead(node); + this.space(); + this.print(node.body); +} +function ClassPrivateMethod(node) { + this._classMethodHead(node); + this.space(); + this.print(node.body); +} +function _classMethodHead(node) { + this.printJoin(node.decorators); + if (!this.format.preserveFormat) { + var _node$key$loc3; + const endLine = (_node$key$loc3 = node.key.loc) == null || (_node$key$loc3 = _node$key$loc3.end) == null ? void 0 : _node$key$loc3.line; + if (endLine) this.catchUp(endLine); + } + this.tsPrintClassMemberModifiers(node); + this._methodHead(node); +} +function StaticBlock(node) { + this.word("static"); + this.space(); + this.tokenChar(123); + if (node.body.length === 0) { + this.tokenChar(125); + } else { + this.newline(); + this.printSequence(node.body, true); + this.rightBrace(node); + } +} + +//# sourceMappingURL=classes.js.map diff --git a/node_modules/@babel/generator/lib/generators/classes.js.map b/node_modules/@babel/generator/lib/generators/classes.js.map new file mode 100644 index 00000000..8eea53ae --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/classes.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_t","require","isExportDefaultDeclaration","isExportNamedDeclaration","ClassDeclaration","node","parent","inExport","_shouldPrintDecoratorsBeforeExport","printJoin","decorators","declare","word","space","abstract","id","print","typeParameters","superClass","superTypeParameters","implements","printList","body","ClassBody","token","length","newline","separator","classBodyEmptySemicolonsPrinter","exit","enterDelimited","endsWith","rightBrace","printer","tokenMap","start","end","indexes","getIndexes","k","occurrenceCount","nextLocIndex","advanceNextLocIndex","i","tok","matchesOriginal","_tokens","undefined","ClassProperty","static","format","preserveFormat","_node$key$loc","endLine","key","loc","line","catchUp","tsPrintClassMemberModifiers","computed","_variance","optional","definite","typeAnnotation","value","semicolon","ClassAccessorProperty","_node$key$loc2","ClassPrivateProperty","ClassMethod","_classMethodHead","ClassPrivateMethod","_node$key$loc3","_methodHead","StaticBlock","printSequence"],"sources":["../../src/generators/classes.ts"],"sourcesContent":["import type Printer from \"../printer.ts\";\nimport {\n isExportDefaultDeclaration,\n isExportNamedDeclaration,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\n// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\nexport function ClassDeclaration(\n this: Printer,\n node: t.ClassDeclaration,\n parent: t.Node,\n) {\n const inExport =\n isExportDefaultDeclaration(parent) || isExportNamedDeclaration(parent);\n\n if (\n !inExport ||\n !this._shouldPrintDecoratorsBeforeExport(\n parent as t.ExportDeclaration & { declaration: t.ClassDeclaration },\n )\n ) {\n this.printJoin(node.decorators);\n }\n\n if (node.declare) {\n // TS\n this.word(\"declare\");\n this.space();\n }\n\n if (node.abstract) {\n // TS\n this.word(\"abstract\");\n this.space();\n }\n\n this.word(\"class\");\n\n if (node.id) {\n this.space();\n this.print(node.id);\n }\n\n this.print(node.typeParameters);\n\n if (node.superClass) {\n this.space();\n this.word(\"extends\");\n this.space();\n this.print(node.superClass);\n this.print(\n process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Renamed\n node.superTypeArguments\n : // @ts-ignore(Babel 7 vs Babel 8) Renamed\n node.superTypeParameters,\n );\n }\n\n if (node.implements) {\n this.space();\n this.word(\"implements\");\n this.space();\n this.printList(node.implements);\n }\n\n this.space();\n this.print(node.body);\n}\n\nexport { ClassDeclaration as ClassExpression };\n\nexport function ClassBody(this: Printer, node: t.ClassBody) {\n this.token(\"{\");\n if (node.body.length === 0) {\n this.token(\"}\");\n } else {\n this.newline();\n\n const separator = classBodyEmptySemicolonsPrinter(this, node);\n separator?.(-1); // print leading semicolons in preserveFormat mode\n\n const exit = this.enterDelimited();\n this.printJoin(node.body, true, true, separator, true);\n exit();\n\n if (!this.endsWith(charCodes.lineFeed)) this.newline();\n\n this.rightBrace(node);\n }\n}\n\nfunction classBodyEmptySemicolonsPrinter(printer: Printer, node: t.ClassBody) {\n if (!printer.tokenMap || node.start == null || node.end == null) {\n return null;\n }\n\n // \"empty statements\" in class bodies are not represented in the AST.\n // Print them by checking if there are any ; tokens between the current AST\n // member and the next one.\n\n const indexes = printer.tokenMap.getIndexes(node);\n if (!indexes) return null;\n\n let k = 1; // start from 1 to skip '{'\n\n let occurrenceCount = 0;\n\n let nextLocIndex = 0;\n const advanceNextLocIndex = () => {\n while (\n nextLocIndex < node.body.length &&\n node.body[nextLocIndex].start == null\n ) {\n nextLocIndex++;\n }\n };\n advanceNextLocIndex();\n\n return (i: number) => {\n if (nextLocIndex <= i) {\n nextLocIndex = i + 1;\n advanceNextLocIndex();\n }\n\n const end =\n nextLocIndex === node.body.length\n ? node.end\n : node.body[nextLocIndex].start;\n\n let tok;\n while (\n k < indexes.length &&\n printer.tokenMap.matchesOriginal(\n (tok = printer._tokens[indexes[k]]),\n \";\",\n ) &&\n tok.start < end\n ) {\n printer.token(\";\", undefined, occurrenceCount++);\n k++;\n }\n };\n}\n\nexport function ClassProperty(this: Printer, node: t.ClassProperty) {\n this.printJoin(node.decorators);\n\n if (!node.static && !this.format.preserveFormat) {\n // catch up to property key, avoid line break\n // between member TS modifiers and the property key.\n const endLine = node.key.loc?.end?.line;\n if (endLine) this.catchUp(endLine);\n }\n\n this.tsPrintClassMemberModifiers(node);\n\n if (node.computed) {\n this.token(\"[\");\n this.print(node.key);\n this.token(\"]\");\n } else {\n this._variance(node);\n this.print(node.key);\n }\n\n // TS\n if (node.optional) {\n this.token(\"?\");\n }\n if (node.definite) {\n this.token(\"!\");\n }\n\n this.print(node.typeAnnotation);\n if (node.value) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.value);\n }\n this.semicolon();\n}\n\nexport function ClassAccessorProperty(\n this: Printer,\n node: t.ClassAccessorProperty,\n) {\n this.printJoin(node.decorators);\n\n // catch up to property key, avoid line break\n // between member modifiers and the property key.\n const endLine = node.key.loc?.end?.line;\n if (endLine) this.catchUp(endLine);\n\n // TS does not support class accessor property yet\n this.tsPrintClassMemberModifiers(node);\n\n this.word(\"accessor\", true);\n this.space();\n\n if (node.computed) {\n this.token(\"[\");\n this.print(node.key);\n this.token(\"]\");\n } else {\n // Todo: Flow does not support class accessor property yet.\n this._variance(node);\n this.print(node.key);\n }\n\n // TS\n if (node.optional) {\n this.token(\"?\");\n }\n if (node.definite) {\n this.token(\"!\");\n }\n\n this.print(node.typeAnnotation);\n if (node.value) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.value);\n }\n this.semicolon();\n}\n\nexport function ClassPrivateProperty(\n this: Printer,\n node: t.ClassPrivateProperty,\n) {\n this.printJoin(node.decorators);\n this.tsPrintClassMemberModifiers(node);\n this.print(node.key);\n // TS\n if (node.optional) {\n this.token(\"?\");\n }\n if (node.definite) {\n this.token(\"!\");\n }\n this.print(node.typeAnnotation);\n if (node.value) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.value);\n }\n this.semicolon();\n}\n\nexport function ClassMethod(this: Printer, node: t.ClassMethod) {\n this._classMethodHead(node);\n this.space();\n this.print(node.body);\n}\n\nexport function ClassPrivateMethod(this: Printer, node: t.ClassPrivateMethod) {\n this._classMethodHead(node);\n this.space();\n this.print(node.body);\n}\n\nexport function _classMethodHead(\n this: Printer,\n node: t.ClassMethod | t.ClassPrivateMethod | t.TSDeclareMethod,\n) {\n this.printJoin(node.decorators);\n\n if (!this.format.preserveFormat) {\n // catch up to method key, avoid line break\n // between member modifiers/method heads and the method key.\n const endLine = node.key.loc?.end?.line;\n if (endLine) this.catchUp(endLine);\n }\n\n this.tsPrintClassMemberModifiers(node);\n this._methodHead(node);\n}\n\nexport function StaticBlock(this: Printer, node: t.StaticBlock) {\n this.word(\"static\");\n this.space();\n this.token(\"{\");\n if (node.body.length === 0) {\n this.token(\"}\");\n } else {\n this.newline();\n this.printSequence(node.body, true);\n this.rightBrace(node);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AACA,IAAAA,EAAA,GAAAC,OAAA;AAGsB;EAFpBC,0BAA0B;EAC1BC;AAAwB,IAAAH,EAAA;AAQnB,SAASI,gBAAgBA,CAE9BC,IAAwB,EACxBC,MAAc,EACd;EACA,MAAMC,QAAQ,GACZL,0BAA0B,CAACI,MAAM,CAAC,IAAIH,wBAAwB,CAACG,MAAM,CAAC;EAExE,IACE,CAACC,QAAQ,IACT,CAAC,IAAI,CAACC,kCAAkC,CACtCF,MACF,CAAC,EACD;IACA,IAAI,CAACG,SAAS,CAACJ,IAAI,CAACK,UAAU,CAAC;EACjC;EAEA,IAAIL,IAAI,CAACM,OAAO,EAAE;IAEhB,IAAI,CAACC,IAAI,CAAC,SAAS,CAAC;IACpB,IAAI,CAACC,KAAK,CAAC,CAAC;EACd;EAEA,IAAIR,IAAI,CAACS,QAAQ,EAAE;IAEjB,IAAI,CAACF,IAAI,CAAC,UAAU,CAAC;IACrB,IAAI,CAACC,KAAK,CAAC,CAAC;EACd;EAEA,IAAI,CAACD,IAAI,CAAC,OAAO,CAAC;EAElB,IAAIP,IAAI,CAACU,EAAE,EAAE;IACX,IAAI,CAACF,KAAK,CAAC,CAAC;IACZ,IAAI,CAACG,KAAK,CAACX,IAAI,CAACU,EAAE,CAAC;EACrB;EAEA,IAAI,CAACC,KAAK,CAACX,IAAI,CAACY,cAAc,CAAC;EAE/B,IAAIZ,IAAI,CAACa,UAAU,EAAE;IACnB,IAAI,CAACL,KAAK,CAAC,CAAC;IACZ,IAAI,CAACD,IAAI,CAAC,SAAS,CAAC;IACpB,IAAI,CAACC,KAAK,CAAC,CAAC;IACZ,IAAI,CAACG,KAAK,CAACX,IAAI,CAACa,UAAU,CAAC;IAC3B,IAAI,CAACF,KAAK,CAKJX,IAAI,CAACc,mBACX,CAAC;EACH;EAEA,IAAId,IAAI,CAACe,UAAU,EAAE;IACnB,IAAI,CAACP,KAAK,CAAC,CAAC;IACZ,IAAI,CAACD,IAAI,CAAC,YAAY,CAAC;IACvB,IAAI,CAACC,KAAK,CAAC,CAAC;IACZ,IAAI,CAACQ,SAAS,CAAChB,IAAI,CAACe,UAAU,CAAC;EACjC;EAEA,IAAI,CAACP,KAAK,CAAC,CAAC;EACZ,IAAI,CAACG,KAAK,CAACX,IAAI,CAACiB,IAAI,CAAC;AACvB;AAIO,SAASC,SAASA,CAAgBlB,IAAiB,EAAE;EAC1D,IAAI,CAACmB,SAAK,IAAI,CAAC;EACf,IAAInB,IAAI,CAACiB,IAAI,CAACG,MAAM,KAAK,CAAC,EAAE;IAC1B,IAAI,CAACD,SAAK,IAAI,CAAC;EACjB,CAAC,MAAM;IACL,IAAI,CAACE,OAAO,CAAC,CAAC;IAEd,MAAMC,SAAS,GAAGC,+BAA+B,CAAC,IAAI,EAAEvB,IAAI,CAAC;IAC7DsB,SAAS,YAATA,SAAS,CAAG,CAAC,CAAC,CAAC;IAEf,MAAME,IAAI,GAAG,IAAI,CAACC,cAAc,CAAC,CAAC;IAClC,IAAI,CAACrB,SAAS,CAACJ,IAAI,CAACiB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAEK,SAAS,EAAE,IAAI,CAAC;IACtDE,IAAI,CAAC,CAAC;IAEN,IAAI,CAAC,IAAI,CAACE,QAAQ,GAAmB,CAAC,EAAE,IAAI,CAACL,OAAO,CAAC,CAAC;IAEtD,IAAI,CAACM,UAAU,CAAC3B,IAAI,CAAC;EACvB;AACF;AAEA,SAASuB,+BAA+BA,CAACK,OAAgB,EAAE5B,IAAiB,EAAE;EAC5E,IAAI,CAAC4B,OAAO,CAACC,QAAQ,IAAI7B,IAAI,CAAC8B,KAAK,IAAI,IAAI,IAAI9B,IAAI,CAAC+B,GAAG,IAAI,IAAI,EAAE;IAC/D,OAAO,IAAI;EACb;EAMA,MAAMC,OAAO,GAAGJ,OAAO,CAACC,QAAQ,CAACI,UAAU,CAACjC,IAAI,CAAC;EACjD,IAAI,CAACgC,OAAO,EAAE,OAAO,IAAI;EAEzB,IAAIE,CAAC,GAAG,CAAC;EAET,IAAIC,eAAe,GAAG,CAAC;EAEvB,IAAIC,YAAY,GAAG,CAAC;EACpB,MAAMC,mBAAmB,GAAGA,CAAA,KAAM;IAChC,OACED,YAAY,GAAGpC,IAAI,CAACiB,IAAI,CAACG,MAAM,IAC/BpB,IAAI,CAACiB,IAAI,CAACmB,YAAY,CAAC,CAACN,KAAK,IAAI,IAAI,EACrC;MACAM,YAAY,EAAE;IAChB;EACF,CAAC;EACDC,mBAAmB,CAAC,CAAC;EAErB,OAAQC,CAAS,IAAK;IACpB,IAAIF,YAAY,IAAIE,CAAC,EAAE;MACrBF,YAAY,GAAGE,CAAC,GAAG,CAAC;MACpBD,mBAAmB,CAAC,CAAC;IACvB;IAEA,MAAMN,GAAG,GACPK,YAAY,KAAKpC,IAAI,CAACiB,IAAI,CAACG,MAAM,GAC7BpB,IAAI,CAAC+B,GAAG,GACR/B,IAAI,CAACiB,IAAI,CAACmB,YAAY,CAAC,CAACN,KAAK;IAEnC,IAAIS,GAAG;IACP,OACEL,CAAC,GAAGF,OAAO,CAACZ,MAAM,IAClBQ,OAAO,CAACC,QAAQ,CAACW,eAAe,CAC7BD,GAAG,GAAGX,OAAO,CAACa,OAAO,CAACT,OAAO,CAACE,CAAC,CAAC,CAAC,EAClC,GACF,CAAC,IACDK,GAAG,CAACT,KAAK,GAAGC,GAAG,EACf;MACAH,OAAO,CAACT,KAAK,CAAC,GAAG,EAAEuB,SAAS,EAAEP,eAAe,EAAE,CAAC;MAChDD,CAAC,EAAE;IACL;EACF,CAAC;AACH;AAEO,SAASS,aAAaA,CAAgB3C,IAAqB,EAAE;EAClE,IAAI,CAACI,SAAS,CAACJ,IAAI,CAACK,UAAU,CAAC;EAE/B,IAAI,CAACL,IAAI,CAAC4C,MAAM,IAAI,CAAC,IAAI,CAACC,MAAM,CAACC,cAAc,EAAE;IAAA,IAAAC,aAAA;IAG/C,MAAMC,OAAO,IAAAD,aAAA,GAAG/C,IAAI,CAACiD,GAAG,CAACC,GAAG,cAAAH,aAAA,GAAZA,aAAA,CAAchB,GAAG,qBAAjBgB,aAAA,CAAmBI,IAAI;IACvC,IAAIH,OAAO,EAAE,IAAI,CAACI,OAAO,CAACJ,OAAO,CAAC;EACpC;EAEA,IAAI,CAACK,2BAA2B,CAACrD,IAAI,CAAC;EAEtC,IAAIA,IAAI,CAACsD,QAAQ,EAAE;IACjB,IAAI,CAACnC,SAAK,GAAI,CAAC;IACf,IAAI,CAACR,KAAK,CAACX,IAAI,CAACiD,GAAG,CAAC;IACpB,IAAI,CAAC9B,SAAK,GAAI,CAAC;EACjB,CAAC,MAAM;IACL,IAAI,CAACoC,SAAS,CAACvD,IAAI,CAAC;IACpB,IAAI,CAACW,KAAK,CAACX,IAAI,CAACiD,GAAG,CAAC;EACtB;EAGA,IAAIjD,IAAI,CAACwD,QAAQ,EAAE;IACjB,IAAI,CAACrC,SAAK,GAAI,CAAC;EACjB;EACA,IAAInB,IAAI,CAACyD,QAAQ,EAAE;IACjB,IAAI,CAACtC,SAAK,GAAI,CAAC;EACjB;EAEA,IAAI,CAACR,KAAK,CAACX,IAAI,CAAC0D,cAAc,CAAC;EAC/B,IAAI1D,IAAI,CAAC2D,KAAK,EAAE;IACd,IAAI,CAACnD,KAAK,CAAC,CAAC;IACZ,IAAI,CAACW,SAAK,GAAI,CAAC;IACf,IAAI,CAACX,KAAK,CAAC,CAAC;IACZ,IAAI,CAACG,KAAK,CAACX,IAAI,CAAC2D,KAAK,CAAC;EACxB;EACA,IAAI,CAACC,SAAS,CAAC,CAAC;AAClB;AAEO,SAASC,qBAAqBA,CAEnC7D,IAA6B,EAC7B;EAAA,IAAA8D,cAAA;EACA,IAAI,CAAC1D,SAAS,CAACJ,IAAI,CAACK,UAAU,CAAC;EAI/B,MAAM2C,OAAO,IAAAc,cAAA,GAAG9D,IAAI,CAACiD,GAAG,CAACC,GAAG,cAAAY,cAAA,GAAZA,cAAA,CAAc/B,GAAG,qBAAjB+B,cAAA,CAAmBX,IAAI;EACvC,IAAIH,OAAO,EAAE,IAAI,CAACI,OAAO,CAACJ,OAAO,CAAC;EAGlC,IAAI,CAACK,2BAA2B,CAACrD,IAAI,CAAC;EAEtC,IAAI,CAACO,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;EAC3B,IAAI,CAACC,KAAK,CAAC,CAAC;EAEZ,IAAIR,IAAI,CAACsD,QAAQ,EAAE;IACjB,IAAI,CAACnC,SAAK,GAAI,CAAC;IACf,IAAI,CAACR,KAAK,CAACX,IAAI,CAACiD,GAAG,CAAC;IACpB,IAAI,CAAC9B,SAAK,GAAI,CAAC;EACjB,CAAC,MAAM;IAEL,IAAI,CAACoC,SAAS,CAACvD,IAAI,CAAC;IACpB,IAAI,CAACW,KAAK,CAACX,IAAI,CAACiD,GAAG,CAAC;EACtB;EAGA,IAAIjD,IAAI,CAACwD,QAAQ,EAAE;IACjB,IAAI,CAACrC,SAAK,GAAI,CAAC;EACjB;EACA,IAAInB,IAAI,CAACyD,QAAQ,EAAE;IACjB,IAAI,CAACtC,SAAK,GAAI,CAAC;EACjB;EAEA,IAAI,CAACR,KAAK,CAACX,IAAI,CAAC0D,cAAc,CAAC;EAC/B,IAAI1D,IAAI,CAAC2D,KAAK,EAAE;IACd,IAAI,CAACnD,KAAK,CAAC,CAAC;IACZ,IAAI,CAACW,SAAK,GAAI,CAAC;IACf,IAAI,CAACX,KAAK,CAAC,CAAC;IACZ,IAAI,CAACG,KAAK,CAACX,IAAI,CAAC2D,KAAK,CAAC;EACxB;EACA,IAAI,CAACC,SAAS,CAAC,CAAC;AAClB;AAEO,SAASG,oBAAoBA,CAElC/D,IAA4B,EAC5B;EACA,IAAI,CAACI,SAAS,CAACJ,IAAI,CAACK,UAAU,CAAC;EAC/B,IAAI,CAACgD,2BAA2B,CAACrD,IAAI,CAAC;EACtC,IAAI,CAACW,KAAK,CAACX,IAAI,CAACiD,GAAG,CAAC;EAEpB,IAAIjD,IAAI,CAACwD,QAAQ,EAAE;IACjB,IAAI,CAACrC,SAAK,GAAI,CAAC;EACjB;EACA,IAAInB,IAAI,CAACyD,QAAQ,EAAE;IACjB,IAAI,CAACtC,SAAK,GAAI,CAAC;EACjB;EACA,IAAI,CAACR,KAAK,CAACX,IAAI,CAAC0D,cAAc,CAAC;EAC/B,IAAI1D,IAAI,CAAC2D,KAAK,EAAE;IACd,IAAI,CAACnD,KAAK,CAAC,CAAC;IACZ,IAAI,CAACW,SAAK,GAAI,CAAC;IACf,IAAI,CAACX,KAAK,CAAC,CAAC;IACZ,IAAI,CAACG,KAAK,CAACX,IAAI,CAAC2D,KAAK,CAAC;EACxB;EACA,IAAI,CAACC,SAAS,CAAC,CAAC;AAClB;AAEO,SAASI,WAAWA,CAAgBhE,IAAmB,EAAE;EAC9D,IAAI,CAACiE,gBAAgB,CAACjE,IAAI,CAAC;EAC3B,IAAI,CAACQ,KAAK,CAAC,CAAC;EACZ,IAAI,CAACG,KAAK,CAACX,IAAI,CAACiB,IAAI,CAAC;AACvB;AAEO,SAASiD,kBAAkBA,CAAgBlE,IAA0B,EAAE;EAC5E,IAAI,CAACiE,gBAAgB,CAACjE,IAAI,CAAC;EAC3B,IAAI,CAACQ,KAAK,CAAC,CAAC;EACZ,IAAI,CAACG,KAAK,CAACX,IAAI,CAACiB,IAAI,CAAC;AACvB;AAEO,SAASgD,gBAAgBA,CAE9BjE,IAA8D,EAC9D;EACA,IAAI,CAACI,SAAS,CAACJ,IAAI,CAACK,UAAU,CAAC;EAE/B,IAAI,CAAC,IAAI,CAACwC,MAAM,CAACC,cAAc,EAAE;IAAA,IAAAqB,cAAA;IAG/B,MAAMnB,OAAO,IAAAmB,cAAA,GAAGnE,IAAI,CAACiD,GAAG,CAACC,GAAG,cAAAiB,cAAA,GAAZA,cAAA,CAAcpC,GAAG,qBAAjBoC,cAAA,CAAmBhB,IAAI;IACvC,IAAIH,OAAO,EAAE,IAAI,CAACI,OAAO,CAACJ,OAAO,CAAC;EACpC;EAEA,IAAI,CAACK,2BAA2B,CAACrD,IAAI,CAAC;EACtC,IAAI,CAACoE,WAAW,CAACpE,IAAI,CAAC;AACxB;AAEO,SAASqE,WAAWA,CAAgBrE,IAAmB,EAAE;EAC9D,IAAI,CAACO,IAAI,CAAC,QAAQ,CAAC;EACnB,IAAI,CAACC,KAAK,CAAC,CAAC;EACZ,IAAI,CAACW,SAAK,IAAI,CAAC;EACf,IAAInB,IAAI,CAACiB,IAAI,CAACG,MAAM,KAAK,CAAC,EAAE;IAC1B,IAAI,CAACD,SAAK,IAAI,CAAC;EACjB,CAAC,MAAM;IACL,IAAI,CAACE,OAAO,CAAC,CAAC;IACd,IAAI,CAACiD,aAAa,CAACtE,IAAI,CAACiB,IAAI,EAAE,IAAI,CAAC;IACnC,IAAI,CAACU,UAAU,CAAC3B,IAAI,CAAC;EACvB;AACF","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/generator/lib/generators/deprecated.js b/node_modules/@babel/generator/lib/generators/deprecated.js new file mode 100644 index 00000000..fc02bf96 --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/deprecated.js @@ -0,0 +1,28 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.addDeprecatedGenerators = addDeprecatedGenerators; +function addDeprecatedGenerators(PrinterClass) { + { + const deprecatedBabel7Generators = { + Noop() {}, + TSExpressionWithTypeArguments(node) { + this.print(node.expression); + this.print(node.typeParameters); + }, + DecimalLiteral(node) { + const raw = this.getPossibleRaw(node); + if (!this.format.minified && raw !== undefined) { + this.word(raw); + return; + } + this.word(node.value + "m"); + } + }; + Object.assign(PrinterClass.prototype, deprecatedBabel7Generators); + } +} + +//# sourceMappingURL=deprecated.js.map diff --git a/node_modules/@babel/generator/lib/generators/deprecated.js.map b/node_modules/@babel/generator/lib/generators/deprecated.js.map new file mode 100644 index 00000000..73275264 --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/deprecated.js.map @@ -0,0 +1 @@ +{"version":3,"names":["addDeprecatedGenerators","PrinterClass","deprecatedBabel7Generators","Noop","TSExpressionWithTypeArguments","node","print","expression","typeParameters","DecimalLiteral","raw","getPossibleRaw","format","minified","undefined","word","value","Object","assign","prototype"],"sources":["../../src/generators/deprecated.ts"],"sourcesContent":["import type Printer from \"../printer\";\nimport type * as t from \"@babel/types\";\n\nexport type DeprecatedBabel7ASTTypes =\n | \"Noop\"\n | \"TSExpressionWithTypeArguments\"\n | \"DecimalLiteral\";\n\nexport function addDeprecatedGenerators(PrinterClass: typeof Printer) {\n // Add Babel 7 generator methods that is removed in Babel 8\n if (!process.env.BABEL_8_BREAKING) {\n const deprecatedBabel7Generators = {\n Noop(this: Printer) {},\n\n TSExpressionWithTypeArguments(\n this: Printer,\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n node: t.TSExpressionWithTypeArguments,\n ) {\n this.print(node.expression);\n this.print(node.typeParameters);\n },\n\n DecimalLiteral(this: Printer, node: any) {\n const raw = this.getPossibleRaw(node);\n if (!this.format.minified && raw !== undefined) {\n this.word(raw);\n return;\n }\n this.word(node.value + \"m\");\n },\n } satisfies Record<\n DeprecatedBabel7ASTTypes,\n (this: Printer, node: any) => void\n >;\n Object.assign(PrinterClass.prototype, deprecatedBabel7Generators);\n }\n}\n"],"mappings":";;;;;;AAQO,SAASA,uBAAuBA,CAACC,YAA4B,EAAE;EAEjC;IACjC,MAAMC,0BAA0B,GAAG;MACjCC,IAAIA,CAAA,EAAgB,CAAC,CAAC;MAEtBC,6BAA6BA,CAG3BC,IAAqC,EACrC;QACA,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,UAAU,CAAC;QAC3B,IAAI,CAACD,KAAK,CAACD,IAAI,CAACG,cAAc,CAAC;MACjC,CAAC;MAEDC,cAAcA,CAAgBJ,IAAS,EAAE;QACvC,MAAMK,GAAG,GAAG,IAAI,CAACC,cAAc,CAACN,IAAI,CAAC;QACrC,IAAI,CAAC,IAAI,CAACO,MAAM,CAACC,QAAQ,IAAIH,GAAG,KAAKI,SAAS,EAAE;UAC9C,IAAI,CAACC,IAAI,CAACL,GAAG,CAAC;UACd;QACF;QACA,IAAI,CAACK,IAAI,CAACV,IAAI,CAACW,KAAK,GAAG,GAAG,CAAC;MAC7B;IACF,CAGC;IACDC,MAAM,CAACC,MAAM,CAACjB,YAAY,CAACkB,SAAS,EAAEjB,0BAA0B,CAAC;EACnE;AACF","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/generator/lib/generators/expressions.js b/node_modules/@babel/generator/lib/generators/expressions.js new file mode 100644 index 00000000..b113ef79 --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/expressions.js @@ -0,0 +1,300 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.LogicalExpression = exports.BinaryExpression = exports.AssignmentExpression = AssignmentExpression; +exports.AssignmentPattern = AssignmentPattern; +exports.AwaitExpression = AwaitExpression; +exports.BindExpression = BindExpression; +exports.CallExpression = CallExpression; +exports.ConditionalExpression = ConditionalExpression; +exports.Decorator = Decorator; +exports.DoExpression = DoExpression; +exports.EmptyStatement = EmptyStatement; +exports.ExpressionStatement = ExpressionStatement; +exports.Import = Import; +exports.MemberExpression = MemberExpression; +exports.MetaProperty = MetaProperty; +exports.ModuleExpression = ModuleExpression; +exports.NewExpression = NewExpression; +exports.OptionalCallExpression = OptionalCallExpression; +exports.OptionalMemberExpression = OptionalMemberExpression; +exports.ParenthesizedExpression = ParenthesizedExpression; +exports.PrivateName = PrivateName; +exports.SequenceExpression = SequenceExpression; +exports.Super = Super; +exports.ThisExpression = ThisExpression; +exports.UnaryExpression = UnaryExpression; +exports.UpdateExpression = UpdateExpression; +exports.V8IntrinsicIdentifier = V8IntrinsicIdentifier; +exports.YieldExpression = YieldExpression; +exports._shouldPrintDecoratorsBeforeExport = _shouldPrintDecoratorsBeforeExport; +var _t = require("@babel/types"); +var _index = require("../node/index.js"); +const { + isCallExpression, + isLiteral, + isMemberExpression, + isNewExpression, + isPattern +} = _t; +function UnaryExpression(node) { + const { + operator + } = node; + if (operator === "void" || operator === "delete" || operator === "typeof" || operator === "throw") { + this.word(operator); + this.space(); + } else { + this.token(operator); + } + this.print(node.argument); +} +function DoExpression(node) { + if (node.async) { + this.word("async", true); + this.space(); + } + this.word("do"); + this.space(); + this.print(node.body); +} +function ParenthesizedExpression(node) { + this.tokenChar(40); + const exit = this.enterDelimited(); + this.print(node.expression); + exit(); + this.rightParens(node); +} +function UpdateExpression(node) { + if (node.prefix) { + this.token(node.operator); + this.print(node.argument); + } else { + this.print(node.argument, true); + this.token(node.operator); + } +} +function ConditionalExpression(node) { + this.print(node.test); + this.space(); + this.tokenChar(63); + this.space(); + this.print(node.consequent); + this.space(); + this.tokenChar(58); + this.space(); + this.print(node.alternate); +} +function NewExpression(node, parent) { + this.word("new"); + this.space(); + this.print(node.callee); + if (this.format.minified && node.arguments.length === 0 && !node.optional && !isCallExpression(parent, { + callee: node + }) && !isMemberExpression(parent) && !isNewExpression(parent)) { + return; + } + this.print(node.typeArguments); + { + this.print(node.typeParameters); + } + if (node.optional) { + this.token("?."); + } + if (node.arguments.length === 0 && this.tokenMap && !this.tokenMap.endMatches(node, ")")) { + return; + } + this.tokenChar(40); + const exit = this.enterDelimited(); + this.printList(node.arguments, this.shouldPrintTrailingComma(")")); + exit(); + this.rightParens(node); +} +function SequenceExpression(node) { + this.printList(node.expressions); +} +function ThisExpression() { + this.word("this"); +} +function Super() { + this.word("super"); +} +function _shouldPrintDecoratorsBeforeExport(node) { + if (typeof this.format.decoratorsBeforeExport === "boolean") { + return this.format.decoratorsBeforeExport; + } + return typeof node.start === "number" && node.start === node.declaration.start; +} +function Decorator(node) { + this.tokenChar(64); + this.print(node.expression); + this.newline(); +} +function OptionalMemberExpression(node) { + let { + computed + } = node; + const { + optional, + property + } = node; + this.print(node.object); + if (!computed && isMemberExpression(property)) { + throw new TypeError("Got a MemberExpression for MemberExpression property"); + } + if (isLiteral(property) && typeof property.value === "number") { + computed = true; + } + if (optional) { + this.token("?."); + } + if (computed) { + this.tokenChar(91); + this.print(property); + this.tokenChar(93); + } else { + if (!optional) { + this.tokenChar(46); + } + this.print(property); + } +} +function OptionalCallExpression(node) { + this.print(node.callee); + { + this.print(node.typeParameters); + } + if (node.optional) { + this.token("?."); + } + this.print(node.typeArguments); + this.tokenChar(40); + const exit = this.enterDelimited(); + this.printList(node.arguments); + exit(); + this.rightParens(node); +} +function CallExpression(node) { + this.print(node.callee); + this.print(node.typeArguments); + { + this.print(node.typeParameters); + } + this.tokenChar(40); + const exit = this.enterDelimited(); + this.printList(node.arguments, this.shouldPrintTrailingComma(")")); + exit(); + this.rightParens(node); +} +function Import() { + this.word("import"); +} +function AwaitExpression(node) { + this.word("await"); + this.space(); + this.print(node.argument); +} +function YieldExpression(node) { + if (node.delegate) { + this.word("yield", true); + this.tokenChar(42); + if (node.argument) { + this.space(); + this.print(node.argument); + } + } else if (node.argument) { + this.word("yield", true); + this.space(); + this.print(node.argument); + } else { + this.word("yield"); + } +} +function EmptyStatement() { + this.semicolon(true); +} +function ExpressionStatement(node) { + this.tokenContext |= _index.TokenContext.expressionStatement; + this.print(node.expression); + this.semicolon(); +} +function AssignmentPattern(node) { + this.print(node.left); + if (node.left.type === "Identifier" || isPattern(node.left)) { + if (node.left.optional) this.tokenChar(63); + this.print(node.left.typeAnnotation); + } + this.space(); + this.tokenChar(61); + this.space(); + this.print(node.right); +} +function AssignmentExpression(node) { + this.print(node.left); + this.space(); + if (node.operator === "in" || node.operator === "instanceof") { + this.word(node.operator); + } else { + this.token(node.operator); + this._endsWithDiv = node.operator === "/"; + } + this.space(); + this.print(node.right); +} +function BindExpression(node) { + this.print(node.object); + this.token("::"); + this.print(node.callee); +} +function MemberExpression(node) { + this.print(node.object); + if (!node.computed && isMemberExpression(node.property)) { + throw new TypeError("Got a MemberExpression for MemberExpression property"); + } + let computed = node.computed; + if (isLiteral(node.property) && typeof node.property.value === "number") { + computed = true; + } + if (computed) { + const exit = this.enterDelimited(); + this.tokenChar(91); + this.print(node.property); + this.tokenChar(93); + exit(); + } else { + this.tokenChar(46); + this.print(node.property); + } +} +function MetaProperty(node) { + this.print(node.meta); + this.tokenChar(46); + this.print(node.property); +} +function PrivateName(node) { + this.tokenChar(35); + this.print(node.id); +} +function V8IntrinsicIdentifier(node) { + this.tokenChar(37); + this.word(node.name); +} +function ModuleExpression(node) { + this.word("module", true); + this.space(); + this.tokenChar(123); + this.indent(); + const { + body + } = node; + if (body.body.length || body.directives.length) { + this.newline(); + } + this.print(body); + this.dedent(); + this.rightBrace(node); +} + +//# sourceMappingURL=expressions.js.map diff --git a/node_modules/@babel/generator/lib/generators/expressions.js.map b/node_modules/@babel/generator/lib/generators/expressions.js.map new file mode 100644 index 00000000..69c8daaa --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/expressions.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_t","require","_index","isCallExpression","isLiteral","isMemberExpression","isNewExpression","isPattern","UnaryExpression","node","operator","word","space","token","print","argument","DoExpression","async","body","ParenthesizedExpression","exit","enterDelimited","expression","rightParens","UpdateExpression","prefix","ConditionalExpression","test","consequent","alternate","NewExpression","parent","callee","format","minified","arguments","length","optional","typeArguments","typeParameters","tokenMap","endMatches","printList","shouldPrintTrailingComma","SequenceExpression","expressions","ThisExpression","Super","_shouldPrintDecoratorsBeforeExport","decoratorsBeforeExport","start","declaration","Decorator","newline","OptionalMemberExpression","computed","property","object","TypeError","value","OptionalCallExpression","CallExpression","Import","AwaitExpression","YieldExpression","delegate","EmptyStatement","semicolon","ExpressionStatement","tokenContext","TokenContext","expressionStatement","AssignmentPattern","left","type","typeAnnotation","right","AssignmentExpression","_endsWithDiv","BindExpression","MemberExpression","MetaProperty","meta","PrivateName","id","V8IntrinsicIdentifier","name","ModuleExpression","indent","directives","dedent","rightBrace"],"sources":["../../src/generators/expressions.ts"],"sourcesContent":["import type Printer from \"../printer.ts\";\nimport {\n isCallExpression,\n isLiteral,\n isMemberExpression,\n isNewExpression,\n isPattern,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport { TokenContext } from \"../node/index.ts\";\n\nexport function UnaryExpression(this: Printer, node: t.UnaryExpression) {\n const { operator } = node;\n if (\n operator === \"void\" ||\n operator === \"delete\" ||\n operator === \"typeof\" ||\n // throwExpressions\n operator === \"throw\"\n ) {\n this.word(operator);\n this.space();\n } else {\n this.token(operator);\n }\n\n this.print(node.argument);\n}\n\nexport function DoExpression(this: Printer, node: t.DoExpression) {\n if (node.async) {\n this.word(\"async\", true);\n this.space();\n }\n this.word(\"do\");\n this.space();\n this.print(node.body);\n}\n\nexport function ParenthesizedExpression(\n this: Printer,\n node: t.ParenthesizedExpression,\n) {\n this.token(\"(\");\n const exit = this.enterDelimited();\n this.print(node.expression);\n exit();\n this.rightParens(node);\n}\n\nexport function UpdateExpression(this: Printer, node: t.UpdateExpression) {\n if (node.prefix) {\n this.token(node.operator);\n this.print(node.argument);\n } else {\n this.print(node.argument, true);\n this.token(node.operator);\n }\n}\n\nexport function ConditionalExpression(\n this: Printer,\n node: t.ConditionalExpression,\n) {\n this.print(node.test);\n this.space();\n this.token(\"?\");\n this.space();\n this.print(node.consequent);\n this.space();\n this.token(\":\");\n this.space();\n this.print(node.alternate);\n}\n\nexport function NewExpression(\n this: Printer,\n node: t.NewExpression,\n parent: t.Node,\n) {\n this.word(\"new\");\n this.space();\n this.print(node.callee);\n if (\n this.format.minified &&\n node.arguments.length === 0 &&\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n !node.optional &&\n !isCallExpression(parent, { callee: node }) &&\n !isMemberExpression(parent) &&\n !isNewExpression(parent)\n ) {\n return;\n }\n\n this.print(node.typeArguments);\n if (!process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n this.print(node.typeParameters); // Legacy TS AST\n }\n\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n if (node.optional) {\n // TODO: This can never happen\n this.token(\"?.\");\n }\n\n if (\n node.arguments.length === 0 &&\n this.tokenMap &&\n !this.tokenMap.endMatches(node, \")\")\n ) {\n return;\n }\n\n this.token(\"(\");\n const exit = this.enterDelimited();\n this.printList(node.arguments, this.shouldPrintTrailingComma(\")\"));\n exit();\n this.rightParens(node);\n}\n\nexport function SequenceExpression(this: Printer, node: t.SequenceExpression) {\n this.printList(node.expressions);\n}\n\nexport function ThisExpression(this: Printer) {\n this.word(\"this\");\n}\n\nexport function Super(this: Printer) {\n this.word(\"super\");\n}\n\nexport function _shouldPrintDecoratorsBeforeExport(\n this: Printer,\n node: t.ExportDeclaration & { declaration: t.ClassDeclaration },\n) {\n if (typeof this.format.decoratorsBeforeExport === \"boolean\") {\n return this.format.decoratorsBeforeExport;\n }\n return (\n typeof node.start === \"number\" && node.start === node.declaration.start\n );\n}\n\nexport function Decorator(this: Printer, node: t.Decorator) {\n this.token(\"@\");\n this.print(node.expression);\n this.newline();\n}\n\nexport function OptionalMemberExpression(\n this: Printer,\n node: t.OptionalMemberExpression,\n) {\n let { computed } = node;\n const { optional, property } = node;\n\n this.print(node.object);\n\n if (!computed && isMemberExpression(property)) {\n throw new TypeError(\"Got a MemberExpression for MemberExpression property\");\n }\n\n // @ts-expect-error todo(flow->ts) maybe instead of typeof check specific literal types?\n if (isLiteral(property) && typeof property.value === \"number\") {\n computed = true;\n }\n if (optional) {\n this.token(\"?.\");\n }\n\n if (computed) {\n this.token(\"[\");\n this.print(property);\n this.token(\"]\");\n } else {\n if (!optional) {\n this.token(\".\");\n }\n this.print(property);\n }\n}\n\nexport function OptionalCallExpression(\n this: Printer,\n node: t.OptionalCallExpression,\n) {\n this.print(node.callee);\n\n if (!process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n this.print(node.typeParameters); // legacy TS AST\n }\n\n if (node.optional) {\n this.token(\"?.\");\n }\n\n this.print(node.typeArguments);\n\n this.token(\"(\");\n const exit = this.enterDelimited();\n this.printList(node.arguments);\n exit();\n this.rightParens(node);\n}\n\nexport function CallExpression(this: Printer, node: t.CallExpression) {\n this.print(node.callee);\n\n this.print(node.typeArguments);\n if (!process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n this.print(node.typeParameters); // legacy TS AST\n }\n this.token(\"(\");\n const exit = this.enterDelimited();\n this.printList(node.arguments, this.shouldPrintTrailingComma(\")\"));\n exit();\n this.rightParens(node);\n}\n\nexport function Import(this: Printer) {\n this.word(\"import\");\n}\n\nexport function AwaitExpression(this: Printer, node: t.AwaitExpression) {\n this.word(\"await\");\n this.space();\n this.print(node.argument);\n}\n\nexport function YieldExpression(this: Printer, node: t.YieldExpression) {\n if (node.delegate) {\n this.word(\"yield\", true);\n this.token(\"*\");\n if (node.argument) {\n this.space();\n // line terminators are allowed after yield*\n this.print(node.argument);\n }\n } else if (node.argument) {\n this.word(\"yield\", true);\n this.space();\n this.print(node.argument);\n } else {\n this.word(\"yield\");\n }\n}\n\nexport function EmptyStatement(this: Printer) {\n this.semicolon(true /* force */);\n}\n\nexport function ExpressionStatement(\n this: Printer,\n node: t.ExpressionStatement,\n) {\n this.tokenContext |= TokenContext.expressionStatement;\n this.print(node.expression);\n this.semicolon();\n}\n\nexport function AssignmentPattern(this: Printer, node: t.AssignmentPattern) {\n this.print(node.left);\n if (node.left.type === \"Identifier\" || isPattern(node.left)) {\n if (node.left.optional) this.token(\"?\");\n this.print(node.left.typeAnnotation);\n }\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.right);\n}\n\nexport function AssignmentExpression(\n this: Printer,\n node: t.AssignmentExpression | t.BinaryExpression | t.LogicalExpression,\n) {\n this.print(node.left);\n\n this.space();\n if (node.operator === \"in\" || node.operator === \"instanceof\") {\n this.word(node.operator);\n } else {\n this.token(node.operator);\n this._endsWithDiv = node.operator === \"/\";\n }\n this.space();\n\n this.print(node.right);\n}\n\nexport function BindExpression(this: Printer, node: t.BindExpression) {\n this.print(node.object);\n this.token(\"::\");\n this.print(node.callee);\n}\n\nexport {\n AssignmentExpression as BinaryExpression,\n AssignmentExpression as LogicalExpression,\n};\n\nexport function MemberExpression(this: Printer, node: t.MemberExpression) {\n this.print(node.object);\n\n if (!node.computed && isMemberExpression(node.property)) {\n throw new TypeError(\"Got a MemberExpression for MemberExpression property\");\n }\n\n let computed = node.computed;\n // @ts-expect-error todo(flow->ts) maybe use specific literal types\n if (isLiteral(node.property) && typeof node.property.value === \"number\") {\n computed = true;\n }\n\n if (computed) {\n const exit = this.enterDelimited();\n this.token(\"[\");\n this.print(node.property);\n this.token(\"]\");\n exit();\n } else {\n this.token(\".\");\n this.print(node.property);\n }\n}\n\nexport function MetaProperty(this: Printer, node: t.MetaProperty) {\n this.print(node.meta);\n this.token(\".\");\n this.print(node.property);\n}\n\nexport function PrivateName(this: Printer, node: t.PrivateName) {\n this.token(\"#\");\n this.print(node.id);\n}\n\nexport function V8IntrinsicIdentifier(\n this: Printer,\n node: t.V8IntrinsicIdentifier,\n) {\n this.token(\"%\");\n this.word(node.name);\n}\n\nexport function ModuleExpression(this: Printer, node: t.ModuleExpression) {\n this.word(\"module\", true);\n this.space();\n this.token(\"{\");\n this.indent();\n const { body } = node;\n if (body.body.length || body.directives.length) {\n this.newline();\n }\n this.print(body);\n this.dedent();\n this.rightBrace(node);\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/generator/lib/generators/flow.js b/node_modules/@babel/generator/lib/generators/flow.js new file mode 100644 index 00000000..322aa343 --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/flow.js @@ -0,0 +1,660 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.AnyTypeAnnotation = AnyTypeAnnotation; +exports.ArrayTypeAnnotation = ArrayTypeAnnotation; +exports.BooleanLiteralTypeAnnotation = BooleanLiteralTypeAnnotation; +exports.BooleanTypeAnnotation = BooleanTypeAnnotation; +exports.DeclareClass = DeclareClass; +exports.DeclareExportAllDeclaration = DeclareExportAllDeclaration; +exports.DeclareExportDeclaration = DeclareExportDeclaration; +exports.DeclareFunction = DeclareFunction; +exports.DeclareInterface = DeclareInterface; +exports.DeclareModule = DeclareModule; +exports.DeclareModuleExports = DeclareModuleExports; +exports.DeclareOpaqueType = DeclareOpaqueType; +exports.DeclareTypeAlias = DeclareTypeAlias; +exports.DeclareVariable = DeclareVariable; +exports.DeclaredPredicate = DeclaredPredicate; +exports.EmptyTypeAnnotation = EmptyTypeAnnotation; +exports.EnumBooleanBody = EnumBooleanBody; +exports.EnumBooleanMember = EnumBooleanMember; +exports.EnumDeclaration = EnumDeclaration; +exports.EnumDefaultedMember = EnumDefaultedMember; +exports.EnumNumberBody = EnumNumberBody; +exports.EnumNumberMember = EnumNumberMember; +exports.EnumStringBody = EnumStringBody; +exports.EnumStringMember = EnumStringMember; +exports.EnumSymbolBody = EnumSymbolBody; +exports.ExistsTypeAnnotation = ExistsTypeAnnotation; +exports.FunctionTypeAnnotation = FunctionTypeAnnotation; +exports.FunctionTypeParam = FunctionTypeParam; +exports.IndexedAccessType = IndexedAccessType; +exports.InferredPredicate = InferredPredicate; +exports.InterfaceDeclaration = InterfaceDeclaration; +exports.GenericTypeAnnotation = exports.ClassImplements = exports.InterfaceExtends = InterfaceExtends; +exports.InterfaceTypeAnnotation = InterfaceTypeAnnotation; +exports.IntersectionTypeAnnotation = IntersectionTypeAnnotation; +exports.MixedTypeAnnotation = MixedTypeAnnotation; +exports.NullLiteralTypeAnnotation = NullLiteralTypeAnnotation; +exports.NullableTypeAnnotation = NullableTypeAnnotation; +Object.defineProperty(exports, "NumberLiteralTypeAnnotation", { + enumerable: true, + get: function () { + return _types2.NumericLiteral; + } +}); +exports.NumberTypeAnnotation = NumberTypeAnnotation; +exports.ObjectTypeAnnotation = ObjectTypeAnnotation; +exports.ObjectTypeCallProperty = ObjectTypeCallProperty; +exports.ObjectTypeIndexer = ObjectTypeIndexer; +exports.ObjectTypeInternalSlot = ObjectTypeInternalSlot; +exports.ObjectTypeProperty = ObjectTypeProperty; +exports.ObjectTypeSpreadProperty = ObjectTypeSpreadProperty; +exports.OpaqueType = OpaqueType; +exports.OptionalIndexedAccessType = OptionalIndexedAccessType; +exports.QualifiedTypeIdentifier = QualifiedTypeIdentifier; +Object.defineProperty(exports, "StringLiteralTypeAnnotation", { + enumerable: true, + get: function () { + return _types2.StringLiteral; + } +}); +exports.StringTypeAnnotation = StringTypeAnnotation; +exports.SymbolTypeAnnotation = SymbolTypeAnnotation; +exports.ThisTypeAnnotation = ThisTypeAnnotation; +exports.TupleTypeAnnotation = TupleTypeAnnotation; +exports.TypeAlias = TypeAlias; +exports.TypeAnnotation = TypeAnnotation; +exports.TypeCastExpression = TypeCastExpression; +exports.TypeParameter = TypeParameter; +exports.TypeParameterDeclaration = exports.TypeParameterInstantiation = TypeParameterInstantiation; +exports.TypeofTypeAnnotation = TypeofTypeAnnotation; +exports.UnionTypeAnnotation = UnionTypeAnnotation; +exports.Variance = Variance; +exports.VoidTypeAnnotation = VoidTypeAnnotation; +exports._interfaceish = _interfaceish; +exports._variance = _variance; +var _t = require("@babel/types"); +var _modules = require("./modules.js"); +var _index = require("../node/index.js"); +var _types2 = require("./types.js"); +const { + isDeclareExportDeclaration, + isStatement +} = _t; +function AnyTypeAnnotation() { + this.word("any"); +} +function ArrayTypeAnnotation(node) { + this.print(node.elementType, true); + this.tokenChar(91); + this.tokenChar(93); +} +function BooleanTypeAnnotation() { + this.word("boolean"); +} +function BooleanLiteralTypeAnnotation(node) { + this.word(node.value ? "true" : "false"); +} +function NullLiteralTypeAnnotation() { + this.word("null"); +} +function DeclareClass(node, parent) { + if (!isDeclareExportDeclaration(parent)) { + this.word("declare"); + this.space(); + } + this.word("class"); + this.space(); + this._interfaceish(node); +} +function DeclareFunction(node, parent) { + if (!isDeclareExportDeclaration(parent)) { + this.word("declare"); + this.space(); + } + this.word("function"); + this.space(); + this.print(node.id); + this.print(node.id.typeAnnotation.typeAnnotation); + if (node.predicate) { + this.space(); + this.print(node.predicate); + } + this.semicolon(); +} +function InferredPredicate() { + this.tokenChar(37); + this.word("checks"); +} +function DeclaredPredicate(node) { + this.tokenChar(37); + this.word("checks"); + this.tokenChar(40); + this.print(node.value); + this.tokenChar(41); +} +function DeclareInterface(node) { + this.word("declare"); + this.space(); + this.InterfaceDeclaration(node); +} +function DeclareModule(node) { + this.word("declare"); + this.space(); + this.word("module"); + this.space(); + this.print(node.id); + this.space(); + this.print(node.body); +} +function DeclareModuleExports(node) { + this.word("declare"); + this.space(); + this.word("module"); + this.tokenChar(46); + this.word("exports"); + this.print(node.typeAnnotation); +} +function DeclareTypeAlias(node) { + this.word("declare"); + this.space(); + this.TypeAlias(node); +} +function DeclareOpaqueType(node, parent) { + if (!isDeclareExportDeclaration(parent)) { + this.word("declare"); + this.space(); + } + this.OpaqueType(node); +} +function DeclareVariable(node, parent) { + if (!isDeclareExportDeclaration(parent)) { + this.word("declare"); + this.space(); + } + this.word("var"); + this.space(); + this.print(node.id); + this.print(node.id.typeAnnotation); + this.semicolon(); +} +function DeclareExportDeclaration(node) { + this.word("declare"); + this.space(); + this.word("export"); + this.space(); + if (node.default) { + this.word("default"); + this.space(); + } + FlowExportDeclaration.call(this, node); +} +function DeclareExportAllDeclaration(node) { + this.word("declare"); + this.space(); + _modules.ExportAllDeclaration.call(this, node); +} +function EnumDeclaration(node) { + const { + id, + body + } = node; + this.word("enum"); + this.space(); + this.print(id); + this.print(body); +} +function enumExplicitType(context, name, hasExplicitType) { + if (hasExplicitType) { + context.space(); + context.word("of"); + context.space(); + context.word(name); + } + context.space(); +} +function enumBody(context, node) { + const { + members + } = node; + context.token("{"); + context.indent(); + context.newline(); + for (const member of members) { + context.print(member); + context.newline(); + } + if (node.hasUnknownMembers) { + context.token("..."); + context.newline(); + } + context.dedent(); + context.token("}"); +} +function EnumBooleanBody(node) { + const { + explicitType + } = node; + enumExplicitType(this, "boolean", explicitType); + enumBody(this, node); +} +function EnumNumberBody(node) { + const { + explicitType + } = node; + enumExplicitType(this, "number", explicitType); + enumBody(this, node); +} +function EnumStringBody(node) { + const { + explicitType + } = node; + enumExplicitType(this, "string", explicitType); + enumBody(this, node); +} +function EnumSymbolBody(node) { + enumExplicitType(this, "symbol", true); + enumBody(this, node); +} +function EnumDefaultedMember(node) { + const { + id + } = node; + this.print(id); + this.tokenChar(44); +} +function enumInitializedMember(context, node) { + context.print(node.id); + context.space(); + context.token("="); + context.space(); + context.print(node.init); + context.token(","); +} +function EnumBooleanMember(node) { + enumInitializedMember(this, node); +} +function EnumNumberMember(node) { + enumInitializedMember(this, node); +} +function EnumStringMember(node) { + enumInitializedMember(this, node); +} +function FlowExportDeclaration(node) { + if (node.declaration) { + const declar = node.declaration; + this.print(declar); + if (!isStatement(declar)) this.semicolon(); + } else { + this.tokenChar(123); + if (node.specifiers.length) { + this.space(); + this.printList(node.specifiers); + this.space(); + } + this.tokenChar(125); + if (node.source) { + this.space(); + this.word("from"); + this.space(); + this.print(node.source); + } + this.semicolon(); + } +} +function ExistsTypeAnnotation() { + this.tokenChar(42); +} +function FunctionTypeAnnotation(node, parent) { + this.print(node.typeParameters); + this.tokenChar(40); + if (node.this) { + this.word("this"); + this.tokenChar(58); + this.space(); + this.print(node.this.typeAnnotation); + if (node.params.length || node.rest) { + this.tokenChar(44); + this.space(); + } + } + this.printList(node.params); + if (node.rest) { + if (node.params.length) { + this.tokenChar(44); + this.space(); + } + this.token("..."); + this.print(node.rest); + } + this.tokenChar(41); + const type = parent == null ? void 0 : parent.type; + if (type != null && (type === "ObjectTypeCallProperty" || type === "ObjectTypeInternalSlot" || type === "DeclareFunction" || type === "ObjectTypeProperty" && parent.method)) { + this.tokenChar(58); + } else { + this.space(); + this.token("=>"); + } + this.space(); + this.print(node.returnType); +} +function FunctionTypeParam(node) { + this.print(node.name); + if (node.optional) this.tokenChar(63); + if (node.name) { + this.tokenChar(58); + this.space(); + } + this.print(node.typeAnnotation); +} +function InterfaceExtends(node) { + this.print(node.id); + this.print(node.typeParameters, true); +} +function _interfaceish(node) { + var _node$extends; + this.print(node.id); + this.print(node.typeParameters); + if ((_node$extends = node.extends) != null && _node$extends.length) { + this.space(); + this.word("extends"); + this.space(); + this.printList(node.extends); + } + if (node.type === "DeclareClass") { + var _node$mixins, _node$implements; + if ((_node$mixins = node.mixins) != null && _node$mixins.length) { + this.space(); + this.word("mixins"); + this.space(); + this.printList(node.mixins); + } + if ((_node$implements = node.implements) != null && _node$implements.length) { + this.space(); + this.word("implements"); + this.space(); + this.printList(node.implements); + } + } + this.space(); + this.print(node.body); +} +function _variance(node) { + var _node$variance; + const kind = (_node$variance = node.variance) == null ? void 0 : _node$variance.kind; + if (kind != null) { + if (kind === "plus") { + this.tokenChar(43); + } else if (kind === "minus") { + this.tokenChar(45); + } + } +} +function InterfaceDeclaration(node) { + this.word("interface"); + this.space(); + this._interfaceish(node); +} +function andSeparator(occurrenceCount) { + this.space(); + this.token("&", false, occurrenceCount); + this.space(); +} +function InterfaceTypeAnnotation(node) { + var _node$extends2; + this.word("interface"); + if ((_node$extends2 = node.extends) != null && _node$extends2.length) { + this.space(); + this.word("extends"); + this.space(); + this.printList(node.extends); + } + this.space(); + this.print(node.body); +} +function IntersectionTypeAnnotation(node) { + this.printJoin(node.types, undefined, undefined, andSeparator); +} +function MixedTypeAnnotation() { + this.word("mixed"); +} +function EmptyTypeAnnotation() { + this.word("empty"); +} +function NullableTypeAnnotation(node) { + this.tokenChar(63); + this.print(node.typeAnnotation); +} +function NumberTypeAnnotation() { + this.word("number"); +} +function StringTypeAnnotation() { + this.word("string"); +} +function ThisTypeAnnotation() { + this.word("this"); +} +function TupleTypeAnnotation(node) { + this.tokenChar(91); + this.printList(node.types); + this.tokenChar(93); +} +function TypeofTypeAnnotation(node) { + this.word("typeof"); + this.space(); + this.print(node.argument); +} +function TypeAlias(node) { + this.word("type"); + this.space(); + this.print(node.id); + this.print(node.typeParameters); + this.space(); + this.tokenChar(61); + this.space(); + this.print(node.right); + this.semicolon(); +} +function TypeAnnotation(node, parent) { + this.tokenChar(58); + this.space(); + if (parent.type === "ArrowFunctionExpression") { + this.tokenContext |= _index.TokenContext.arrowFlowReturnType; + } else if (node.optional) { + this.tokenChar(63); + } + this.print(node.typeAnnotation); +} +function TypeParameterInstantiation(node) { + this.tokenChar(60); + this.printList(node.params); + this.tokenChar(62); +} +function TypeParameter(node) { + this._variance(node); + this.word(node.name); + if (node.bound) { + this.print(node.bound); + } + if (node.default) { + this.space(); + this.tokenChar(61); + this.space(); + this.print(node.default); + } +} +function OpaqueType(node) { + this.word("opaque"); + this.space(); + this.word("type"); + this.space(); + this.print(node.id); + this.print(node.typeParameters); + if (node.supertype) { + this.tokenChar(58); + this.space(); + this.print(node.supertype); + } + if (node.impltype) { + this.space(); + this.tokenChar(61); + this.space(); + this.print(node.impltype); + } + this.semicolon(); +} +function ObjectTypeAnnotation(node) { + if (node.exact) { + this.token("{|"); + } else { + this.tokenChar(123); + } + const props = [...node.properties, ...(node.callProperties || []), ...(node.indexers || []), ...(node.internalSlots || [])]; + if (props.length) { + this.newline(); + this.space(); + this.printJoin(props, true, true, undefined, undefined, function addNewlines(leading) { + if (leading && !props[0]) return 1; + }, () => { + if (props.length !== 1 || node.inexact) { + this.tokenChar(44); + this.space(); + } + }); + this.space(); + } + if (node.inexact) { + this.indent(); + this.token("..."); + if (props.length) { + this.newline(); + } + this.dedent(); + } + if (node.exact) { + this.token("|}"); + } else { + this.tokenChar(125); + } +} +function ObjectTypeInternalSlot(node) { + if (node.static) { + this.word("static"); + this.space(); + } + this.tokenChar(91); + this.tokenChar(91); + this.print(node.id); + this.tokenChar(93); + this.tokenChar(93); + if (node.optional) this.tokenChar(63); + if (!node.method) { + this.tokenChar(58); + this.space(); + } + this.print(node.value); +} +function ObjectTypeCallProperty(node) { + if (node.static) { + this.word("static"); + this.space(); + } + this.print(node.value); +} +function ObjectTypeIndexer(node) { + if (node.static) { + this.word("static"); + this.space(); + } + this._variance(node); + this.tokenChar(91); + if (node.id) { + this.print(node.id); + this.tokenChar(58); + this.space(); + } + this.print(node.key); + this.tokenChar(93); + this.tokenChar(58); + this.space(); + this.print(node.value); +} +function ObjectTypeProperty(node) { + if (node.proto) { + this.word("proto"); + this.space(); + } + if (node.static) { + this.word("static"); + this.space(); + } + if (node.kind === "get" || node.kind === "set") { + this.word(node.kind); + this.space(); + } + this._variance(node); + this.print(node.key); + if (node.optional) this.tokenChar(63); + if (!node.method) { + this.tokenChar(58); + this.space(); + } + this.print(node.value); +} +function ObjectTypeSpreadProperty(node) { + this.token("..."); + this.print(node.argument); +} +function QualifiedTypeIdentifier(node) { + this.print(node.qualification); + this.tokenChar(46); + this.print(node.id); +} +function SymbolTypeAnnotation() { + this.word("symbol"); +} +function orSeparator(occurrenceCount) { + this.space(); + this.token("|", false, occurrenceCount); + this.space(); +} +function UnionTypeAnnotation(node) { + this.printJoin(node.types, undefined, undefined, orSeparator); +} +function TypeCastExpression(node) { + this.tokenChar(40); + this.print(node.expression); + this.print(node.typeAnnotation); + this.tokenChar(41); +} +function Variance(node) { + if (node.kind === "plus") { + this.tokenChar(43); + } else { + this.tokenChar(45); + } +} +function VoidTypeAnnotation() { + this.word("void"); +} +function IndexedAccessType(node) { + this.print(node.objectType, true); + this.tokenChar(91); + this.print(node.indexType); + this.tokenChar(93); +} +function OptionalIndexedAccessType(node) { + this.print(node.objectType); + if (node.optional) { + this.token("?."); + } + this.tokenChar(91); + this.print(node.indexType); + this.tokenChar(93); +} + +//# sourceMappingURL=flow.js.map diff --git a/node_modules/@babel/generator/lib/generators/flow.js.map b/node_modules/@babel/generator/lib/generators/flow.js.map new file mode 100644 index 00000000..a50152af --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/flow.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_t","require","_modules","_index","_types2","isDeclareExportDeclaration","isStatement","AnyTypeAnnotation","word","ArrayTypeAnnotation","node","print","elementType","token","BooleanTypeAnnotation","BooleanLiteralTypeAnnotation","value","NullLiteralTypeAnnotation","DeclareClass","parent","space","_interfaceish","DeclareFunction","id","typeAnnotation","predicate","semicolon","InferredPredicate","DeclaredPredicate","DeclareInterface","InterfaceDeclaration","DeclareModule","body","DeclareModuleExports","DeclareTypeAlias","TypeAlias","DeclareOpaqueType","OpaqueType","DeclareVariable","DeclareExportDeclaration","default","FlowExportDeclaration","call","DeclareExportAllDeclaration","ExportAllDeclaration","EnumDeclaration","enumExplicitType","context","name","hasExplicitType","enumBody","members","indent","newline","member","hasUnknownMembers","dedent","EnumBooleanBody","explicitType","EnumNumberBody","EnumStringBody","EnumSymbolBody","EnumDefaultedMember","enumInitializedMember","init","EnumBooleanMember","EnumNumberMember","EnumStringMember","declaration","declar","specifiers","length","printList","source","ExistsTypeAnnotation","FunctionTypeAnnotation","typeParameters","this","params","rest","type","method","returnType","FunctionTypeParam","optional","InterfaceExtends","_node$extends","extends","_node$mixins","_node$implements","mixins","implements","_variance","_node$variance","kind","variance","andSeparator","occurrenceCount","InterfaceTypeAnnotation","_node$extends2","IntersectionTypeAnnotation","printJoin","types","undefined","MixedTypeAnnotation","EmptyTypeAnnotation","NullableTypeAnnotation","NumberTypeAnnotation","StringTypeAnnotation","ThisTypeAnnotation","TupleTypeAnnotation","TypeofTypeAnnotation","argument","right","TypeAnnotation","tokenContext","TokenContext","arrowFlowReturnType","TypeParameterInstantiation","TypeParameter","bound","supertype","impltype","ObjectTypeAnnotation","exact","props","properties","callProperties","indexers","internalSlots","addNewlines","leading","inexact","ObjectTypeInternalSlot","static","ObjectTypeCallProperty","ObjectTypeIndexer","key","ObjectTypeProperty","proto","ObjectTypeSpreadProperty","QualifiedTypeIdentifier","qualification","SymbolTypeAnnotation","orSeparator","UnionTypeAnnotation","TypeCastExpression","expression","Variance","VoidTypeAnnotation","IndexedAccessType","objectType","indexType","OptionalIndexedAccessType"],"sources":["../../src/generators/flow.ts"],"sourcesContent":["import type Printer from \"../printer.ts\";\nimport { isDeclareExportDeclaration, isStatement } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport { ExportAllDeclaration } from \"./modules.ts\";\nimport { TokenContext } from \"../node/index.ts\";\n\nexport function AnyTypeAnnotation(this: Printer) {\n this.word(\"any\");\n}\n\nexport function ArrayTypeAnnotation(\n this: Printer,\n node: t.ArrayTypeAnnotation,\n) {\n this.print(node.elementType, true);\n this.token(\"[\");\n this.token(\"]\");\n}\n\nexport function BooleanTypeAnnotation(this: Printer) {\n this.word(\"boolean\");\n}\n\nexport function BooleanLiteralTypeAnnotation(\n this: Printer,\n node: t.BooleanLiteralTypeAnnotation,\n) {\n this.word(node.value ? \"true\" : \"false\");\n}\n\nexport function NullLiteralTypeAnnotation(this: Printer) {\n this.word(\"null\");\n}\n\nexport function DeclareClass(\n this: Printer,\n node: t.DeclareClass,\n parent: t.Node,\n) {\n if (!isDeclareExportDeclaration(parent)) {\n this.word(\"declare\");\n this.space();\n }\n this.word(\"class\");\n this.space();\n this._interfaceish(node);\n}\n\nexport function DeclareFunction(\n this: Printer,\n node: t.DeclareFunction,\n parent: t.Node,\n) {\n if (!isDeclareExportDeclaration(parent)) {\n this.word(\"declare\");\n this.space();\n }\n this.word(\"function\");\n this.space();\n this.print(node.id);\n // @ts-ignore(Babel 7 vs Babel 8) TODO(Babel 8) Remove this comment, since we'll remove the Noop node\n this.print(node.id.typeAnnotation.typeAnnotation);\n\n if (node.predicate) {\n this.space();\n this.print(node.predicate);\n }\n\n this.semicolon();\n}\n\nexport function InferredPredicate(this: Printer) {\n this.token(\"%\");\n this.word(\"checks\");\n}\n\nexport function DeclaredPredicate(this: Printer, node: t.DeclaredPredicate) {\n this.token(\"%\");\n this.word(\"checks\");\n this.token(\"(\");\n this.print(node.value);\n this.token(\")\");\n}\n\nexport function DeclareInterface(this: Printer, node: t.DeclareInterface) {\n this.word(\"declare\");\n this.space();\n this.InterfaceDeclaration(node);\n}\n\nexport function DeclareModule(this: Printer, node: t.DeclareModule) {\n this.word(\"declare\");\n this.space();\n this.word(\"module\");\n this.space();\n this.print(node.id);\n this.space();\n this.print(node.body);\n}\n\nexport function DeclareModuleExports(\n this: Printer,\n node: t.DeclareModuleExports,\n) {\n this.word(\"declare\");\n this.space();\n this.word(\"module\");\n this.token(\".\");\n this.word(\"exports\");\n this.print(node.typeAnnotation);\n}\n\nexport function DeclareTypeAlias(this: Printer, node: t.DeclareTypeAlias) {\n this.word(\"declare\");\n this.space();\n this.TypeAlias(node);\n}\n\nexport function DeclareOpaqueType(\n this: Printer,\n node: t.DeclareOpaqueType,\n parent: t.Node,\n) {\n if (!isDeclareExportDeclaration(parent)) {\n this.word(\"declare\");\n this.space();\n }\n this.OpaqueType(node);\n}\n\nexport function DeclareVariable(\n this: Printer,\n node: t.DeclareVariable,\n parent: t.Node,\n) {\n if (!isDeclareExportDeclaration(parent)) {\n this.word(\"declare\");\n this.space();\n }\n this.word(\"var\");\n this.space();\n this.print(node.id);\n this.print(node.id.typeAnnotation);\n this.semicolon();\n}\n\nexport function DeclareExportDeclaration(\n this: Printer,\n node: t.DeclareExportDeclaration,\n) {\n this.word(\"declare\");\n this.space();\n this.word(\"export\");\n this.space();\n if (node.default) {\n this.word(\"default\");\n this.space();\n }\n\n FlowExportDeclaration.call(this, node);\n}\n\nexport function DeclareExportAllDeclaration(\n this: Printer,\n node: t.DeclareExportAllDeclaration,\n) {\n this.word(\"declare\");\n this.space();\n ExportAllDeclaration.call(this, node);\n}\n\nexport function EnumDeclaration(this: Printer, node: t.EnumDeclaration) {\n const { id, body } = node;\n this.word(\"enum\");\n this.space();\n this.print(id);\n this.print(body);\n}\n\nfunction enumExplicitType(\n context: Printer,\n name: string,\n hasExplicitType: boolean,\n) {\n if (hasExplicitType) {\n context.space();\n context.word(\"of\");\n context.space();\n context.word(name);\n }\n context.space();\n}\n\nfunction enumBody(context: Printer, node: t.EnumBody) {\n const { members } = node;\n context.token(\"{\");\n context.indent();\n context.newline();\n for (const member of members) {\n context.print(member);\n context.newline();\n }\n if (node.hasUnknownMembers) {\n context.token(\"...\");\n context.newline();\n }\n context.dedent();\n context.token(\"}\");\n}\n\nexport function EnumBooleanBody(this: Printer, node: t.EnumBooleanBody) {\n const { explicitType } = node;\n enumExplicitType(this, \"boolean\", explicitType);\n enumBody(this, node);\n}\n\nexport function EnumNumberBody(this: Printer, node: t.EnumNumberBody) {\n const { explicitType } = node;\n enumExplicitType(this, \"number\", explicitType);\n enumBody(this, node);\n}\n\nexport function EnumStringBody(this: Printer, node: t.EnumStringBody) {\n const { explicitType } = node;\n enumExplicitType(this, \"string\", explicitType);\n enumBody(this, node);\n}\n\nexport function EnumSymbolBody(this: Printer, node: t.EnumSymbolBody) {\n enumExplicitType(this, \"symbol\", true);\n enumBody(this, node);\n}\n\nexport function EnumDefaultedMember(\n this: Printer,\n node: t.EnumDefaultedMember,\n) {\n const { id } = node;\n this.print(id);\n this.token(\",\");\n}\n\nfunction enumInitializedMember(\n context: Printer,\n node: t.EnumBooleanMember | t.EnumNumberMember | t.EnumStringMember,\n) {\n context.print(node.id);\n context.space();\n context.token(\"=\");\n context.space();\n context.print(node.init);\n context.token(\",\");\n}\n\nexport function EnumBooleanMember(this: Printer, node: t.EnumBooleanMember) {\n enumInitializedMember(this, node);\n}\n\nexport function EnumNumberMember(this: Printer, node: t.EnumNumberMember) {\n enumInitializedMember(this, node);\n}\n\nexport function EnumStringMember(this: Printer, node: t.EnumStringMember) {\n enumInitializedMember(this, node);\n}\n\nfunction FlowExportDeclaration(\n this: Printer,\n node: t.DeclareExportDeclaration,\n) {\n if (node.declaration) {\n const declar = node.declaration;\n this.print(declar);\n if (!isStatement(declar)) this.semicolon();\n } else {\n this.token(\"{\");\n if (node.specifiers.length) {\n this.space();\n this.printList(node.specifiers);\n this.space();\n }\n this.token(\"}\");\n\n if (node.source) {\n this.space();\n this.word(\"from\");\n this.space();\n this.print(node.source);\n }\n\n this.semicolon();\n }\n}\n\nexport function ExistsTypeAnnotation(this: Printer) {\n this.token(\"*\");\n}\n\nexport function FunctionTypeAnnotation(\n this: Printer,\n node: t.FunctionTypeAnnotation,\n parent?: t.Node,\n) {\n this.print(node.typeParameters);\n this.token(\"(\");\n\n if (node.this) {\n this.word(\"this\");\n this.token(\":\");\n this.space();\n this.print(node.this.typeAnnotation);\n if (node.params.length || node.rest) {\n this.token(\",\");\n this.space();\n }\n }\n\n this.printList(node.params);\n\n if (node.rest) {\n if (node.params.length) {\n this.token(\",\");\n this.space();\n }\n this.token(\"...\");\n this.print(node.rest);\n }\n\n this.token(\")\");\n\n // this node type is overloaded, not sure why but it makes it EXTREMELY annoying\n\n const type = parent?.type;\n if (\n type != null &&\n (type === \"ObjectTypeCallProperty\" ||\n type === \"ObjectTypeInternalSlot\" ||\n type === \"DeclareFunction\" ||\n (type === \"ObjectTypeProperty\" && parent.method))\n ) {\n this.token(\":\");\n } else {\n this.space();\n this.token(\"=>\");\n }\n\n this.space();\n this.print(node.returnType);\n}\n\nexport function FunctionTypeParam(this: Printer, node: t.FunctionTypeParam) {\n this.print(node.name);\n if (node.optional) this.token(\"?\");\n if (node.name) {\n this.token(\":\");\n this.space();\n }\n this.print(node.typeAnnotation);\n}\n\nexport function InterfaceExtends(this: Printer, node: t.InterfaceExtends) {\n this.print(node.id);\n this.print(node.typeParameters, true);\n}\n\nexport {\n InterfaceExtends as ClassImplements,\n InterfaceExtends as GenericTypeAnnotation,\n};\n\nexport function _interfaceish(\n this: Printer,\n node: t.InterfaceDeclaration | t.DeclareInterface | t.DeclareClass,\n) {\n this.print(node.id);\n this.print(node.typeParameters);\n if (node.extends?.length) {\n this.space();\n this.word(\"extends\");\n this.space();\n this.printList(node.extends);\n }\n if (node.type === \"DeclareClass\") {\n if (node.mixins?.length) {\n this.space();\n this.word(\"mixins\");\n this.space();\n this.printList(node.mixins);\n }\n if (node.implements?.length) {\n this.space();\n this.word(\"implements\");\n this.space();\n this.printList(node.implements);\n }\n }\n this.space();\n this.print(node.body);\n}\n\nexport function _variance(\n this: Printer,\n node:\n | t.TypeParameter\n | t.ObjectTypeIndexer\n | t.ObjectTypeProperty\n | t.ClassProperty\n | t.ClassPrivateProperty\n | t.ClassAccessorProperty,\n) {\n const kind = node.variance?.kind;\n if (kind != null) {\n if (kind === \"plus\") {\n this.token(\"+\");\n } else if (kind === \"minus\") {\n this.token(\"-\");\n }\n }\n}\n\nexport function InterfaceDeclaration(\n this: Printer,\n node: t.InterfaceDeclaration | t.DeclareInterface,\n) {\n this.word(\"interface\");\n this.space();\n this._interfaceish(node);\n}\n\nfunction andSeparator(this: Printer, occurrenceCount: number) {\n this.space();\n this.token(\"&\", false, occurrenceCount);\n this.space();\n}\n\nexport function InterfaceTypeAnnotation(\n this: Printer,\n node: t.InterfaceTypeAnnotation,\n) {\n this.word(\"interface\");\n if (node.extends?.length) {\n this.space();\n this.word(\"extends\");\n this.space();\n this.printList(node.extends);\n }\n this.space();\n this.print(node.body);\n}\n\nexport function IntersectionTypeAnnotation(\n this: Printer,\n node: t.IntersectionTypeAnnotation,\n) {\n this.printJoin(node.types, undefined, undefined, andSeparator);\n}\n\nexport function MixedTypeAnnotation(this: Printer) {\n this.word(\"mixed\");\n}\n\nexport function EmptyTypeAnnotation(this: Printer) {\n this.word(\"empty\");\n}\n\nexport function NullableTypeAnnotation(\n this: Printer,\n node: t.NullableTypeAnnotation,\n) {\n this.token(\"?\");\n this.print(node.typeAnnotation);\n}\n\nexport {\n NumericLiteral as NumberLiteralTypeAnnotation,\n StringLiteral as StringLiteralTypeAnnotation,\n} from \"./types.ts\";\n\nexport function NumberTypeAnnotation(this: Printer) {\n this.word(\"number\");\n}\n\nexport function StringTypeAnnotation(this: Printer) {\n this.word(\"string\");\n}\n\nexport function ThisTypeAnnotation(this: Printer) {\n this.word(\"this\");\n}\n\nexport function TupleTypeAnnotation(\n this: Printer,\n node: t.TupleTypeAnnotation,\n) {\n this.token(\"[\");\n this.printList(node.types);\n this.token(\"]\");\n}\n\nexport function TypeofTypeAnnotation(\n this: Printer,\n node: t.TypeofTypeAnnotation,\n) {\n this.word(\"typeof\");\n this.space();\n this.print(node.argument);\n}\n\nexport function TypeAlias(\n this: Printer,\n node: t.TypeAlias | t.DeclareTypeAlias,\n) {\n this.word(\"type\");\n this.space();\n this.print(node.id);\n this.print(node.typeParameters);\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.right);\n this.semicolon();\n}\n\nexport function TypeAnnotation(\n this: Printer,\n node: t.TypeAnnotation,\n parent: t.Node,\n) {\n this.token(\":\");\n this.space();\n if (parent.type === \"ArrowFunctionExpression\") {\n this.tokenContext |= TokenContext.arrowFlowReturnType;\n } else if (\n // @ts-expect-error todo(flow->ts) can this be removed? `.optional` looks to be not existing property\n node.optional\n ) {\n this.token(\"?\");\n }\n this.print(node.typeAnnotation);\n}\n\nexport function TypeParameterInstantiation(\n this: Printer,\n node: t.TypeParameterInstantiation,\n): void {\n this.token(\"<\");\n this.printList(node.params);\n this.token(\">\");\n}\n\nexport { TypeParameterInstantiation as TypeParameterDeclaration };\n\nexport function TypeParameter(this: Printer, node: t.TypeParameter) {\n this._variance(node);\n\n this.word(node.name);\n\n if (node.bound) {\n this.print(node.bound);\n }\n\n if (node.default) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.default);\n }\n}\n\nexport function OpaqueType(\n this: Printer,\n node: t.OpaqueType | t.DeclareOpaqueType,\n) {\n this.word(\"opaque\");\n this.space();\n this.word(\"type\");\n this.space();\n this.print(node.id);\n this.print(node.typeParameters);\n if (node.supertype) {\n this.token(\":\");\n this.space();\n this.print(node.supertype);\n }\n\n if (node.impltype) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.impltype);\n }\n this.semicolon();\n}\n\nexport function ObjectTypeAnnotation(\n this: Printer,\n node: t.ObjectTypeAnnotation,\n) {\n if (node.exact) {\n this.token(\"{|\");\n } else {\n this.token(\"{\");\n }\n\n // TODO: remove the array fallbacks and instead enforce the types to require an array\n const props = [\n ...node.properties,\n ...(node.callProperties || []),\n ...(node.indexers || []),\n ...(node.internalSlots || []),\n ];\n\n if (props.length) {\n this.newline();\n\n this.space();\n\n this.printJoin(\n props,\n true,\n true,\n undefined,\n undefined,\n function addNewlines(leading) {\n if (leading && !props[0]) return 1;\n },\n () => {\n if (props.length !== 1 || node.inexact) {\n this.token(\",\");\n this.space();\n }\n },\n );\n\n this.space();\n }\n\n if (node.inexact) {\n this.indent();\n this.token(\"...\");\n if (props.length) {\n this.newline();\n }\n this.dedent();\n }\n\n if (node.exact) {\n this.token(\"|}\");\n } else {\n this.token(\"}\");\n }\n}\n\nexport function ObjectTypeInternalSlot(\n this: Printer,\n node: t.ObjectTypeInternalSlot,\n) {\n if (node.static) {\n this.word(\"static\");\n this.space();\n }\n this.token(\"[\");\n this.token(\"[\");\n this.print(node.id);\n this.token(\"]\");\n this.token(\"]\");\n if (node.optional) this.token(\"?\");\n if (!node.method) {\n this.token(\":\");\n this.space();\n }\n this.print(node.value);\n}\n\nexport function ObjectTypeCallProperty(\n this: Printer,\n node: t.ObjectTypeCallProperty,\n) {\n if (node.static) {\n this.word(\"static\");\n this.space();\n }\n this.print(node.value);\n}\n\nexport function ObjectTypeIndexer(this: Printer, node: t.ObjectTypeIndexer) {\n if (node.static) {\n this.word(\"static\");\n this.space();\n }\n this._variance(node);\n this.token(\"[\");\n if (node.id) {\n this.print(node.id);\n this.token(\":\");\n this.space();\n }\n this.print(node.key);\n this.token(\"]\");\n this.token(\":\");\n this.space();\n this.print(node.value);\n}\n\nexport function ObjectTypeProperty(this: Printer, node: t.ObjectTypeProperty) {\n if (node.proto) {\n this.word(\"proto\");\n this.space();\n }\n if (node.static) {\n this.word(\"static\");\n this.space();\n }\n if (node.kind === \"get\" || node.kind === \"set\") {\n this.word(node.kind);\n this.space();\n }\n this._variance(node);\n this.print(node.key);\n if (node.optional) this.token(\"?\");\n if (!node.method) {\n this.token(\":\");\n this.space();\n }\n this.print(node.value);\n}\n\nexport function ObjectTypeSpreadProperty(\n this: Printer,\n node: t.ObjectTypeSpreadProperty,\n) {\n this.token(\"...\");\n this.print(node.argument);\n}\n\nexport function QualifiedTypeIdentifier(\n this: Printer,\n node: t.QualifiedTypeIdentifier,\n) {\n this.print(node.qualification);\n this.token(\".\");\n this.print(node.id);\n}\n\nexport function SymbolTypeAnnotation(this: Printer) {\n this.word(\"symbol\");\n}\n\nfunction orSeparator(this: Printer, occurrenceCount: number) {\n this.space();\n this.token(\"|\", false, occurrenceCount);\n this.space();\n}\n\nexport function UnionTypeAnnotation(\n this: Printer,\n node: t.UnionTypeAnnotation,\n) {\n this.printJoin(node.types, undefined, undefined, orSeparator);\n}\n\nexport function TypeCastExpression(this: Printer, node: t.TypeCastExpression) {\n this.token(\"(\");\n this.print(node.expression);\n this.print(node.typeAnnotation);\n this.token(\")\");\n}\n\nexport function Variance(this: Printer, node: t.Variance) {\n if (node.kind === \"plus\") {\n this.token(\"+\");\n } else {\n this.token(\"-\");\n }\n}\n\nexport function VoidTypeAnnotation(this: Printer) {\n this.word(\"void\");\n}\n\nexport function IndexedAccessType(this: Printer, node: t.IndexedAccessType) {\n this.print(node.objectType, true);\n this.token(\"[\");\n this.print(node.indexType);\n this.token(\"]\");\n}\n\nexport function OptionalIndexedAccessType(\n this: Printer,\n node: t.OptionalIndexedAccessType,\n) {\n this.print(node.objectType);\n if (node.optional) {\n this.token(\"?.\");\n }\n this.token(\"[\");\n this.print(node.indexType);\n this.token(\"]\");\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/generator/lib/generators/index.js b/node_modules/@babel/generator/lib/generators/index.js new file mode 100644 index 00000000..331c73f7 --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/index.js @@ -0,0 +1,128 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var _templateLiterals = require("./template-literals.js"); +Object.keys(_templateLiterals).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _templateLiterals[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _templateLiterals[key]; + } + }); +}); +var _expressions = require("./expressions.js"); +Object.keys(_expressions).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _expressions[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _expressions[key]; + } + }); +}); +var _statements = require("./statements.js"); +Object.keys(_statements).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _statements[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _statements[key]; + } + }); +}); +var _classes = require("./classes.js"); +Object.keys(_classes).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _classes[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _classes[key]; + } + }); +}); +var _methods = require("./methods.js"); +Object.keys(_methods).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _methods[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _methods[key]; + } + }); +}); +var _modules = require("./modules.js"); +Object.keys(_modules).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _modules[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _modules[key]; + } + }); +}); +var _types = require("./types.js"); +Object.keys(_types).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _types[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _types[key]; + } + }); +}); +var _flow = require("./flow.js"); +Object.keys(_flow).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _flow[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _flow[key]; + } + }); +}); +var _base = require("./base.js"); +Object.keys(_base).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _base[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _base[key]; + } + }); +}); +var _jsx = require("./jsx.js"); +Object.keys(_jsx).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _jsx[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _jsx[key]; + } + }); +}); +var _typescript = require("./typescript.js"); +Object.keys(_typescript).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _typescript[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _typescript[key]; + } + }); +}); + +//# sourceMappingURL=index.js.map diff --git a/node_modules/@babel/generator/lib/generators/index.js.map b/node_modules/@babel/generator/lib/generators/index.js.map new file mode 100644 index 00000000..e8b0341b --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/index.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_templateLiterals","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_expressions","_statements","_classes","_methods","_modules","_types","_flow","_base","_jsx","_typescript"],"sources":["../../src/generators/index.ts"],"sourcesContent":["export * from \"./template-literals.ts\";\nexport * from \"./expressions.ts\";\nexport * from \"./statements.ts\";\nexport * from \"./classes.ts\";\nexport * from \"./methods.ts\";\nexport * from \"./modules.ts\";\nexport * from \"./types.ts\";\nexport * from \"./flow.ts\";\nexport * from \"./base.ts\";\nexport * from \"./jsx.ts\";\nexport * from \"./typescript.ts\";\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/generator/lib/generators/jsx.js b/node_modules/@babel/generator/lib/generators/jsx.js new file mode 100644 index 00000000..2650ec1e --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/jsx.js @@ -0,0 +1,126 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.JSXAttribute = JSXAttribute; +exports.JSXClosingElement = JSXClosingElement; +exports.JSXClosingFragment = JSXClosingFragment; +exports.JSXElement = JSXElement; +exports.JSXEmptyExpression = JSXEmptyExpression; +exports.JSXExpressionContainer = JSXExpressionContainer; +exports.JSXFragment = JSXFragment; +exports.JSXIdentifier = JSXIdentifier; +exports.JSXMemberExpression = JSXMemberExpression; +exports.JSXNamespacedName = JSXNamespacedName; +exports.JSXOpeningElement = JSXOpeningElement; +exports.JSXOpeningFragment = JSXOpeningFragment; +exports.JSXSpreadAttribute = JSXSpreadAttribute; +exports.JSXSpreadChild = JSXSpreadChild; +exports.JSXText = JSXText; +function JSXAttribute(node) { + this.print(node.name); + if (node.value) { + this.tokenChar(61); + this.print(node.value); + } +} +function JSXIdentifier(node) { + this.word(node.name); +} +function JSXNamespacedName(node) { + this.print(node.namespace); + this.tokenChar(58); + this.print(node.name); +} +function JSXMemberExpression(node) { + this.print(node.object); + this.tokenChar(46); + this.print(node.property); +} +function JSXSpreadAttribute(node) { + this.tokenChar(123); + this.token("..."); + this.print(node.argument); + this.rightBrace(node); +} +function JSXExpressionContainer(node) { + this.tokenChar(123); + this.print(node.expression); + this.rightBrace(node); +} +function JSXSpreadChild(node) { + this.tokenChar(123); + this.token("..."); + this.print(node.expression); + this.rightBrace(node); +} +function JSXText(node) { + const raw = this.getPossibleRaw(node); + if (raw !== undefined) { + this.token(raw, true); + } else { + this.token(node.value, true); + } +} +function JSXElement(node) { + const open = node.openingElement; + this.print(open); + if (open.selfClosing) return; + this.indent(); + for (const child of node.children) { + this.print(child); + } + this.dedent(); + this.print(node.closingElement); +} +function spaceSeparator() { + this.space(); +} +function JSXOpeningElement(node) { + this.tokenChar(60); + this.print(node.name); + { + if (node.typeArguments) { + this.print(node.typeArguments); + } + this.print(node.typeParameters); + } + if (node.attributes.length > 0) { + this.space(); + this.printJoin(node.attributes, undefined, undefined, spaceSeparator); + } + if (node.selfClosing) { + this.space(); + this.tokenChar(47); + } + this.tokenChar(62); +} +function JSXClosingElement(node) { + this.tokenChar(60); + this.tokenChar(47); + this.print(node.name); + this.tokenChar(62); +} +function JSXEmptyExpression() { + this.printInnerComments(); +} +function JSXFragment(node) { + this.print(node.openingFragment); + this.indent(); + for (const child of node.children) { + this.print(child); + } + this.dedent(); + this.print(node.closingFragment); +} +function JSXOpeningFragment() { + this.tokenChar(60); + this.tokenChar(62); +} +function JSXClosingFragment() { + this.token(" 0) {\n this.space();\n this.printJoin(node.attributes, undefined, undefined, spaceSeparator);\n }\n if (node.selfClosing) {\n this.space();\n this.token(\"/\");\n }\n this.token(\">\");\n}\n\nexport function JSXClosingElement(this: Printer, node: t.JSXClosingElement) {\n this.token(\"<\");\n this.token(\"/\");\n this.print(node.name);\n this.token(\">\");\n}\n\nexport function JSXEmptyExpression(this: Printer) {\n // This node is empty, so forcefully print its inner comments.\n this.printInnerComments();\n}\n\nexport function JSXFragment(this: Printer, node: t.JSXFragment) {\n this.print(node.openingFragment);\n\n this.indent();\n for (const child of node.children) {\n this.print(child);\n }\n this.dedent();\n\n this.print(node.closingFragment);\n}\n\nexport function JSXOpeningFragment(this: Printer) {\n this.token(\"<\");\n this.token(\">\");\n}\n\nexport function JSXClosingFragment(this: Printer) {\n this.token(\"\");\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/generator/lib/generators/methods.js b/node_modules/@babel/generator/lib/generators/methods.js new file mode 100644 index 00000000..eabb16d1 --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/methods.js @@ -0,0 +1,198 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ArrowFunctionExpression = ArrowFunctionExpression; +exports.FunctionDeclaration = exports.FunctionExpression = FunctionExpression; +exports._functionHead = _functionHead; +exports._methodHead = _methodHead; +exports._param = _param; +exports._parameters = _parameters; +exports._params = _params; +exports._predicate = _predicate; +exports._shouldPrintArrowParamsParens = _shouldPrintArrowParamsParens; +var _t = require("@babel/types"); +var _index = require("../node/index.js"); +const { + isIdentifier +} = _t; +function _params(node, idNode, parentNode) { + this.print(node.typeParameters); + const nameInfo = _getFuncIdName.call(this, idNode, parentNode); + if (nameInfo) { + this.sourceIdentifierName(nameInfo.name, nameInfo.pos); + } + this.tokenChar(40); + this._parameters(node.params, ")"); + const noLineTerminator = node.type === "ArrowFunctionExpression"; + this.print(node.returnType, noLineTerminator); + this._noLineTerminator = noLineTerminator; +} +function _parameters(parameters, endToken) { + const exit = this.enterDelimited(); + const trailingComma = this.shouldPrintTrailingComma(endToken); + const paramLength = parameters.length; + for (let i = 0; i < paramLength; i++) { + this._param(parameters[i]); + if (trailingComma || i < paramLength - 1) { + this.token(",", null, i); + this.space(); + } + } + this.token(endToken); + exit(); +} +function _param(parameter) { + this.printJoin(parameter.decorators); + this.print(parameter); + if (parameter.optional) { + this.tokenChar(63); + } + this.print(parameter.typeAnnotation); +} +function _methodHead(node) { + const kind = node.kind; + const key = node.key; + if (kind === "get" || kind === "set") { + this.word(kind); + this.space(); + } + if (node.async) { + this.word("async", true); + this.space(); + } + if (kind === "method" || kind === "init") { + if (node.generator) { + this.tokenChar(42); + } + } + if (node.computed) { + this.tokenChar(91); + this.print(key); + this.tokenChar(93); + } else { + this.print(key); + } + if (node.optional) { + this.tokenChar(63); + } + this._params(node, node.computed && node.key.type !== "StringLiteral" ? undefined : node.key, undefined); +} +function _predicate(node, noLineTerminatorAfter) { + if (node.predicate) { + if (!node.returnType) { + this.tokenChar(58); + } + this.space(); + this.print(node.predicate, noLineTerminatorAfter); + } +} +function _functionHead(node, parent) { + if (node.async) { + this.word("async"); + if (!this.format.preserveFormat) { + this._endsWithInnerRaw = false; + } + this.space(); + } + this.word("function"); + if (node.generator) { + if (!this.format.preserveFormat) { + this._endsWithInnerRaw = false; + } + this.tokenChar(42); + } + this.space(); + if (node.id) { + this.print(node.id); + } + this._params(node, node.id, parent); + if (node.type !== "TSDeclareFunction") { + this._predicate(node); + } +} +function FunctionExpression(node, parent) { + this._functionHead(node, parent); + this.space(); + this.print(node.body); +} +function ArrowFunctionExpression(node, parent) { + if (node.async) { + this.word("async", true); + this.space(); + } + if (this._shouldPrintArrowParamsParens(node)) { + this._params(node, undefined, parent); + } else { + this.print(node.params[0], true); + } + this._predicate(node, true); + this.space(); + this.printInnerComments(); + this.token("=>"); + this.space(); + this.tokenContext |= _index.TokenContext.arrowBody; + this.print(node.body); +} +function _shouldPrintArrowParamsParens(node) { + var _firstParam$leadingCo, _firstParam$trailingC; + if (node.params.length !== 1) return true; + if (node.typeParameters || node.returnType || node.predicate) { + return true; + } + const firstParam = node.params[0]; + if (!isIdentifier(firstParam) || firstParam.typeAnnotation || firstParam.optional || (_firstParam$leadingCo = firstParam.leadingComments) != null && _firstParam$leadingCo.length || (_firstParam$trailingC = firstParam.trailingComments) != null && _firstParam$trailingC.length) { + return true; + } + if (this.tokenMap) { + if (node.loc == null) return true; + if (this.tokenMap.findMatching(node, "(") !== null) return true; + const arrowToken = this.tokenMap.findMatching(node, "=>"); + if ((arrowToken == null ? void 0 : arrowToken.loc) == null) return true; + return arrowToken.loc.start.line !== node.loc.start.line; + } + if (this.format.retainLines) return true; + return false; +} +function _getFuncIdName(idNode, parent) { + let id = idNode; + if (!id && parent) { + const parentType = parent.type; + if (parentType === "VariableDeclarator") { + id = parent.id; + } else if (parentType === "AssignmentExpression" || parentType === "AssignmentPattern") { + id = parent.left; + } else if (parentType === "ObjectProperty" || parentType === "ClassProperty") { + if (!parent.computed || parent.key.type === "StringLiteral") { + id = parent.key; + } + } else if (parentType === "ClassPrivateProperty" || parentType === "ClassAccessorProperty") { + id = parent.key; + } + } + if (!id) return; + let nameInfo; + if (id.type === "Identifier") { + var _id$loc, _id$loc2; + nameInfo = { + pos: (_id$loc = id.loc) == null ? void 0 : _id$loc.start, + name: ((_id$loc2 = id.loc) == null ? void 0 : _id$loc2.identifierName) || id.name + }; + } else if (id.type === "PrivateName") { + var _id$loc3; + nameInfo = { + pos: (_id$loc3 = id.loc) == null ? void 0 : _id$loc3.start, + name: "#" + id.id.name + }; + } else if (id.type === "StringLiteral") { + var _id$loc4; + nameInfo = { + pos: (_id$loc4 = id.loc) == null ? void 0 : _id$loc4.start, + name: id.value + }; + } + return nameInfo; +} + +//# sourceMappingURL=methods.js.map diff --git a/node_modules/@babel/generator/lib/generators/methods.js.map b/node_modules/@babel/generator/lib/generators/methods.js.map new file mode 100644 index 00000000..b81e15e7 --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/methods.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_t","require","_index","isIdentifier","_params","node","idNode","parentNode","print","typeParameters","nameInfo","_getFuncIdName","call","sourceIdentifierName","name","pos","token","_parameters","params","noLineTerminator","type","returnType","_noLineTerminator","parameters","endToken","exit","enterDelimited","trailingComma","shouldPrintTrailingComma","paramLength","length","i","_param","space","parameter","printJoin","decorators","optional","typeAnnotation","_methodHead","kind","key","word","async","generator","computed","undefined","_predicate","noLineTerminatorAfter","predicate","_functionHead","parent","format","preserveFormat","_endsWithInnerRaw","id","FunctionExpression","body","ArrowFunctionExpression","_shouldPrintArrowParamsParens","printInnerComments","tokenContext","TokenContext","arrowBody","_firstParam$leadingCo","_firstParam$trailingC","firstParam","leadingComments","trailingComments","tokenMap","loc","findMatching","arrowToken","start","line","retainLines","parentType","left","_id$loc","_id$loc2","identifierName","_id$loc3","_id$loc4","value"],"sources":["../../src/generators/methods.ts"],"sourcesContent":["import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\nimport { isIdentifier, type ParentMaps } from \"@babel/types\";\nimport { TokenContext } from \"../node/index.ts\";\n\ntype ParentsOf = ParentMaps[T[\"type\"]];\n\nexport function _params(\n this: Printer,\n node: t.Function | t.TSDeclareMethod | t.TSDeclareFunction,\n idNode: t.Expression | t.PrivateName,\n parentNode: ParentsOf,\n) {\n this.print(node.typeParameters);\n\n const nameInfo = _getFuncIdName.call(this, idNode, parentNode);\n if (nameInfo) {\n this.sourceIdentifierName(nameInfo.name, nameInfo.pos);\n }\n\n this.token(\"(\");\n this._parameters(node.params, \")\");\n\n const noLineTerminator = node.type === \"ArrowFunctionExpression\";\n this.print(node.returnType, noLineTerminator);\n\n this._noLineTerminator = noLineTerminator;\n}\n\nexport function _parameters(\n this: Printer,\n parameters: t.Function[\"params\"],\n endToken: string,\n) {\n const exit = this.enterDelimited();\n\n const trailingComma = this.shouldPrintTrailingComma(endToken);\n\n const paramLength = parameters.length;\n for (let i = 0; i < paramLength; i++) {\n this._param(parameters[i]);\n\n if (trailingComma || i < paramLength - 1) {\n this.token(\",\", null, i);\n this.space();\n }\n }\n\n this.token(endToken);\n exit();\n}\n\nexport function _param(\n this: Printer,\n parameter: t.Identifier | t.RestElement | t.Pattern | t.TSParameterProperty,\n) {\n this.printJoin(parameter.decorators);\n this.print(parameter);\n if (\n // @ts-expect-error optional is not in TSParameterProperty\n parameter.optional\n ) {\n this.token(\"?\"); // TS / flow\n }\n\n this.print(\n // @ts-expect-error typeAnnotation is not in TSParameterProperty\n parameter.typeAnnotation,\n ); // TS / flow\n}\n\nexport function _methodHead(this: Printer, node: t.Method | t.TSDeclareMethod) {\n const kind = node.kind;\n const key = node.key;\n\n if (kind === \"get\" || kind === \"set\") {\n this.word(kind);\n this.space();\n }\n\n if (node.async) {\n this.word(\"async\", true);\n this.space();\n }\n\n if (\n kind === \"method\" ||\n // @ts-expect-error Fixme: kind: \"init\" is not defined\n kind === \"init\"\n ) {\n if (node.generator) {\n this.token(\"*\");\n }\n }\n\n if (node.computed) {\n this.token(\"[\");\n this.print(key);\n this.token(\"]\");\n } else {\n this.print(key);\n }\n\n if (\n // @ts-expect-error optional is not in ObjectMethod\n node.optional\n ) {\n // TS\n this.token(\"?\");\n }\n\n this._params(\n node,\n node.computed && node.key.type !== \"StringLiteral\" ? undefined : node.key,\n undefined,\n );\n}\n\nexport function _predicate(\n this: Printer,\n node:\n | t.FunctionDeclaration\n | t.FunctionExpression\n | t.ArrowFunctionExpression,\n noLineTerminatorAfter?: boolean,\n) {\n if (node.predicate) {\n if (!node.returnType) {\n this.token(\":\");\n }\n this.space();\n this.print(node.predicate, noLineTerminatorAfter);\n }\n}\n\nexport function _functionHead(\n this: Printer,\n node: t.FunctionDeclaration | t.FunctionExpression | t.TSDeclareFunction,\n parent: ParentsOf,\n) {\n if (node.async) {\n this.word(\"async\");\n if (!this.format.preserveFormat) {\n // We prevent inner comments from being printed here,\n // so that they are always consistently printed in the\n // same place regardless of the function type.\n this._endsWithInnerRaw = false;\n }\n this.space();\n }\n this.word(\"function\");\n if (node.generator) {\n if (!this.format.preserveFormat) {\n // We prevent inner comments from being printed here,\n // so that they are always consistently printed in the\n // same place regardless of the function type.\n this._endsWithInnerRaw = false;\n }\n this.token(\"*\");\n }\n\n this.space();\n if (node.id) {\n this.print(node.id);\n }\n\n this._params(node, node.id, parent);\n if (node.type !== \"TSDeclareFunction\") {\n this._predicate(node);\n }\n}\n\nexport function FunctionExpression(\n this: Printer,\n node: t.FunctionExpression,\n parent: ParentsOf,\n) {\n this._functionHead(node, parent);\n this.space();\n this.print(node.body);\n}\n\nexport { FunctionExpression as FunctionDeclaration };\n\nexport function ArrowFunctionExpression(\n this: Printer,\n node: t.ArrowFunctionExpression,\n parent: ParentsOf,\n) {\n if (node.async) {\n this.word(\"async\", true);\n this.space();\n }\n\n if (this._shouldPrintArrowParamsParens(node)) {\n this._params(node, undefined, parent);\n } else {\n this.print(node.params[0], true);\n }\n\n this._predicate(node, true);\n this.space();\n // When printing (x)/*1*/=>{}, we remove the parentheses\n // and thus there aren't two contiguous inner tokens.\n // We forcefully print inner comments here.\n this.printInnerComments();\n this.token(\"=>\");\n\n this.space();\n\n this.tokenContext |= TokenContext.arrowBody;\n this.print(node.body);\n}\n\n// Try to avoid printing parens in simple cases, but only if we're pretty\n// sure that they aren't needed by type annotations or potential newlines.\nexport function _shouldPrintArrowParamsParens(\n this: Printer,\n node: t.ArrowFunctionExpression,\n): boolean {\n if (node.params.length !== 1) return true;\n\n if (node.typeParameters || node.returnType || node.predicate) {\n return true;\n }\n\n const firstParam = node.params[0];\n if (\n !isIdentifier(firstParam) ||\n firstParam.typeAnnotation ||\n firstParam.optional ||\n // Flow does not support `foo /*: string*/ => {};`\n firstParam.leadingComments?.length ||\n firstParam.trailingComments?.length\n ) {\n return true;\n }\n\n if (this.tokenMap) {\n if (node.loc == null) return true;\n if (this.tokenMap.findMatching(node, \"(\") !== null) return true;\n const arrowToken = this.tokenMap.findMatching(node, \"=>\");\n if (arrowToken?.loc == null) return true;\n return arrowToken.loc.start.line !== node.loc.start.line;\n }\n\n if (this.format.retainLines) return true;\n\n return false;\n}\n\nfunction _getFuncIdName(\n this: Printer,\n idNode: t.Expression | t.PrivateName,\n parent: ParentsOf,\n) {\n let id: t.Expression | t.PrivateName | t.LVal = idNode;\n\n if (!id && parent) {\n const parentType = parent.type;\n\n if (parentType === \"VariableDeclarator\") {\n id = parent.id;\n } else if (\n parentType === \"AssignmentExpression\" ||\n parentType === \"AssignmentPattern\"\n ) {\n id = parent.left;\n } else if (\n parentType === \"ObjectProperty\" ||\n parentType === \"ClassProperty\"\n ) {\n if (!parent.computed || parent.key.type === \"StringLiteral\") {\n id = parent.key;\n }\n } else if (\n parentType === \"ClassPrivateProperty\" ||\n parentType === \"ClassAccessorProperty\"\n ) {\n id = parent.key;\n }\n }\n\n if (!id) return;\n\n let nameInfo;\n\n if (id.type === \"Identifier\") {\n nameInfo = {\n pos: id.loc?.start,\n name: id.loc?.identifierName || id.name,\n };\n } else if (id.type === \"PrivateName\") {\n nameInfo = {\n pos: id.loc?.start,\n name: \"#\" + id.id.name,\n };\n } else if (id.type === \"StringLiteral\") {\n nameInfo = {\n pos: id.loc?.start,\n name: id.value,\n };\n }\n\n return nameInfo;\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/generator/lib/generators/modules.js b/node_modules/@babel/generator/lib/generators/modules.js new file mode 100644 index 00000000..8b536d90 --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/modules.js @@ -0,0 +1,287 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ExportAllDeclaration = ExportAllDeclaration; +exports.ExportDefaultDeclaration = ExportDefaultDeclaration; +exports.ExportDefaultSpecifier = ExportDefaultSpecifier; +exports.ExportNamedDeclaration = ExportNamedDeclaration; +exports.ExportNamespaceSpecifier = ExportNamespaceSpecifier; +exports.ExportSpecifier = ExportSpecifier; +exports.ImportAttribute = ImportAttribute; +exports.ImportDeclaration = ImportDeclaration; +exports.ImportDefaultSpecifier = ImportDefaultSpecifier; +exports.ImportExpression = ImportExpression; +exports.ImportNamespaceSpecifier = ImportNamespaceSpecifier; +exports.ImportSpecifier = ImportSpecifier; +exports._printAttributes = _printAttributes; +var _t = require("@babel/types"); +var _index = require("../node/index.js"); +const { + isClassDeclaration, + isExportDefaultSpecifier, + isExportNamespaceSpecifier, + isImportDefaultSpecifier, + isImportNamespaceSpecifier, + isStatement +} = _t; +function ImportSpecifier(node) { + if (node.importKind === "type" || node.importKind === "typeof") { + this.word(node.importKind); + this.space(); + } + this.print(node.imported); + if (node.local && node.local.name !== node.imported.name) { + this.space(); + this.word("as"); + this.space(); + this.print(node.local); + } +} +function ImportDefaultSpecifier(node) { + this.print(node.local); +} +function ExportDefaultSpecifier(node) { + this.print(node.exported); +} +function ExportSpecifier(node) { + if (node.exportKind === "type") { + this.word("type"); + this.space(); + } + this.print(node.local); + if (node.exported && node.local.name !== node.exported.name) { + this.space(); + this.word("as"); + this.space(); + this.print(node.exported); + } +} +function ExportNamespaceSpecifier(node) { + this.tokenChar(42); + this.space(); + this.word("as"); + this.space(); + this.print(node.exported); +} +let warningShown = false; +function _printAttributes(node, hasPreviousBrace) { + var _node$extra; + const { + importAttributesKeyword + } = this.format; + const { + attributes, + assertions + } = node; + if (attributes && !importAttributesKeyword && node.extra && (node.extra.deprecatedAssertSyntax || node.extra.deprecatedWithLegacySyntax) && !warningShown) { + warningShown = true; + console.warn(`\ +You are using import attributes, without specifying the desired output syntax. +Please specify the "importAttributesKeyword" generator option, whose value can be one of: + - "with" : \`import { a } from "b" with { type: "json" };\` + - "assert" : \`import { a } from "b" assert { type: "json" };\` + - "with-legacy" : \`import { a } from "b" with type: "json";\` +`); + } + const useAssertKeyword = importAttributesKeyword === "assert" || !importAttributesKeyword && assertions; + this.word(useAssertKeyword ? "assert" : "with"); + this.space(); + if (!useAssertKeyword && (importAttributesKeyword === "with-legacy" || !importAttributesKeyword && (_node$extra = node.extra) != null && _node$extra.deprecatedWithLegacySyntax)) { + this.printList(attributes || assertions); + return; + } + const occurrenceCount = hasPreviousBrace ? 1 : 0; + this.token("{", null, occurrenceCount); + this.space(); + this.printList(attributes || assertions, this.shouldPrintTrailingComma("}")); + this.space(); + this.token("}", null, occurrenceCount); +} +function ExportAllDeclaration(node) { + var _node$attributes, _node$assertions; + this.word("export"); + this.space(); + if (node.exportKind === "type") { + this.word("type"); + this.space(); + } + this.tokenChar(42); + this.space(); + this.word("from"); + this.space(); + if ((_node$attributes = node.attributes) != null && _node$attributes.length || (_node$assertions = node.assertions) != null && _node$assertions.length) { + this.print(node.source, true); + this.space(); + this._printAttributes(node, false); + } else { + this.print(node.source); + } + this.semicolon(); +} +function maybePrintDecoratorsBeforeExport(printer, node) { + if (isClassDeclaration(node.declaration) && printer._shouldPrintDecoratorsBeforeExport(node)) { + printer.printJoin(node.declaration.decorators); + } +} +function ExportNamedDeclaration(node) { + maybePrintDecoratorsBeforeExport(this, node); + this.word("export"); + this.space(); + if (node.declaration) { + const declar = node.declaration; + this.print(declar); + if (!isStatement(declar)) this.semicolon(); + } else { + if (node.exportKind === "type") { + this.word("type"); + this.space(); + } + const specifiers = node.specifiers.slice(0); + let hasSpecial = false; + for (;;) { + const first = specifiers[0]; + if (isExportDefaultSpecifier(first) || isExportNamespaceSpecifier(first)) { + hasSpecial = true; + this.print(specifiers.shift()); + if (specifiers.length) { + this.tokenChar(44); + this.space(); + } + } else { + break; + } + } + let hasBrace = false; + if (specifiers.length || !specifiers.length && !hasSpecial) { + hasBrace = true; + this.tokenChar(123); + if (specifiers.length) { + this.space(); + this.printList(specifiers, this.shouldPrintTrailingComma("}")); + this.space(); + } + this.tokenChar(125); + } + if (node.source) { + var _node$attributes2, _node$assertions2; + this.space(); + this.word("from"); + this.space(); + if ((_node$attributes2 = node.attributes) != null && _node$attributes2.length || (_node$assertions2 = node.assertions) != null && _node$assertions2.length) { + this.print(node.source, true); + this.space(); + this._printAttributes(node, hasBrace); + } else { + this.print(node.source); + } + } + this.semicolon(); + } +} +function ExportDefaultDeclaration(node) { + maybePrintDecoratorsBeforeExport(this, node); + this.word("export"); + this.noIndentInnerCommentsHere(); + this.space(); + this.word("default"); + this.space(); + this.tokenContext |= _index.TokenContext.exportDefault; + const declar = node.declaration; + this.print(declar); + if (!isStatement(declar)) this.semicolon(); +} +function ImportDeclaration(node) { + var _node$attributes3, _node$assertions3; + this.word("import"); + this.space(); + const isTypeKind = node.importKind === "type" || node.importKind === "typeof"; + if (isTypeKind) { + this.noIndentInnerCommentsHere(); + this.word(node.importKind); + this.space(); + } else if (node.module) { + this.noIndentInnerCommentsHere(); + this.word("module"); + this.space(); + } else if (node.phase) { + this.noIndentInnerCommentsHere(); + this.word(node.phase); + this.space(); + } + const specifiers = node.specifiers.slice(0); + const hasSpecifiers = !!specifiers.length; + while (hasSpecifiers) { + const first = specifiers[0]; + if (isImportDefaultSpecifier(first) || isImportNamespaceSpecifier(first)) { + this.print(specifiers.shift()); + if (specifiers.length) { + this.tokenChar(44); + this.space(); + } + } else { + break; + } + } + let hasBrace = false; + if (specifiers.length) { + hasBrace = true; + this.tokenChar(123); + this.space(); + this.printList(specifiers, this.shouldPrintTrailingComma("}")); + this.space(); + this.tokenChar(125); + } else if (isTypeKind && !hasSpecifiers) { + hasBrace = true; + this.tokenChar(123); + this.tokenChar(125); + } + if (hasSpecifiers || isTypeKind) { + this.space(); + this.word("from"); + this.space(); + } + if ((_node$attributes3 = node.attributes) != null && _node$attributes3.length || (_node$assertions3 = node.assertions) != null && _node$assertions3.length) { + this.print(node.source, true); + this.space(); + this._printAttributes(node, hasBrace); + } else { + this.print(node.source); + } + this.semicolon(); +} +function ImportAttribute(node) { + this.print(node.key); + this.tokenChar(58); + this.space(); + this.print(node.value); +} +function ImportNamespaceSpecifier(node) { + this.tokenChar(42); + this.space(); + this.word("as"); + this.space(); + this.print(node.local); +} +function ImportExpression(node) { + this.word("import"); + if (node.phase) { + this.tokenChar(46); + this.word(node.phase); + } + this.tokenChar(40); + const shouldPrintTrailingComma = this.shouldPrintTrailingComma(")"); + this.print(node.source); + if (node.options != null) { + this.tokenChar(44); + this.space(); + this.print(node.options); + } + if (shouldPrintTrailingComma) { + this.tokenChar(44); + } + this.rightParens(node); +} + +//# sourceMappingURL=modules.js.map diff --git a/node_modules/@babel/generator/lib/generators/modules.js.map b/node_modules/@babel/generator/lib/generators/modules.js.map new file mode 100644 index 00000000..66a2d4de --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/modules.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_t","require","_index","isClassDeclaration","isExportDefaultSpecifier","isExportNamespaceSpecifier","isImportDefaultSpecifier","isImportNamespaceSpecifier","isStatement","ImportSpecifier","node","importKind","word","space","print","imported","local","name","ImportDefaultSpecifier","ExportDefaultSpecifier","exported","ExportSpecifier","exportKind","ExportNamespaceSpecifier","token","warningShown","_printAttributes","hasPreviousBrace","_node$extra","importAttributesKeyword","format","attributes","assertions","extra","deprecatedAssertSyntax","deprecatedWithLegacySyntax","console","warn","useAssertKeyword","printList","occurrenceCount","shouldPrintTrailingComma","ExportAllDeclaration","_node$attributes","_node$assertions","length","source","semicolon","maybePrintDecoratorsBeforeExport","printer","declaration","_shouldPrintDecoratorsBeforeExport","printJoin","decorators","ExportNamedDeclaration","declar","specifiers","slice","hasSpecial","first","shift","hasBrace","_node$attributes2","_node$assertions2","ExportDefaultDeclaration","noIndentInnerCommentsHere","tokenContext","TokenContext","exportDefault","ImportDeclaration","_node$attributes3","_node$assertions3","isTypeKind","module","phase","hasSpecifiers","ImportAttribute","key","value","ImportNamespaceSpecifier","ImportExpression","options","rightParens"],"sources":["../../src/generators/modules.ts"],"sourcesContent":["import type Printer from \"../printer.ts\";\nimport {\n isClassDeclaration,\n isExportDefaultSpecifier,\n isExportNamespaceSpecifier,\n isImportDefaultSpecifier,\n isImportNamespaceSpecifier,\n isStatement,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport { TokenContext } from \"../node/index.ts\";\n\nexport function ImportSpecifier(this: Printer, node: t.ImportSpecifier) {\n if (node.importKind === \"type\" || node.importKind === \"typeof\") {\n this.word(node.importKind);\n this.space();\n }\n\n this.print(node.imported);\n // @ts-expect-error todo(flow-ts) maybe check node type instead of relying on name to be undefined on t.StringLiteral\n if (node.local && node.local.name !== node.imported.name) {\n this.space();\n this.word(\"as\");\n this.space();\n this.print(node.local);\n }\n}\n\nexport function ImportDefaultSpecifier(\n this: Printer,\n node: t.ImportDefaultSpecifier,\n) {\n this.print(node.local);\n}\n\nexport function ExportDefaultSpecifier(\n this: Printer,\n node: t.ExportDefaultSpecifier,\n) {\n this.print(node.exported);\n}\n\nexport function ExportSpecifier(this: Printer, node: t.ExportSpecifier) {\n if (node.exportKind === \"type\") {\n this.word(\"type\");\n this.space();\n }\n\n this.print(node.local);\n // @ts-expect-error todo(flow-ts) maybe check node type instead of relying on name to be undefined on t.StringLiteral\n if (node.exported && node.local.name !== node.exported.name) {\n this.space();\n this.word(\"as\");\n this.space();\n this.print(node.exported);\n }\n}\n\nexport function ExportNamespaceSpecifier(\n this: Printer,\n node: t.ExportNamespaceSpecifier,\n) {\n this.token(\"*\");\n this.space();\n this.word(\"as\");\n this.space();\n this.print(node.exported);\n}\n\nlet warningShown = false;\n\nexport function _printAttributes(\n this: Printer,\n node: Extract,\n hasPreviousBrace: boolean,\n) {\n const { importAttributesKeyword } = this.format;\n const { attributes, assertions } = node;\n\n if (\n !process.env.BABEL_8_BREAKING &&\n attributes &&\n !importAttributesKeyword &&\n node.extra &&\n (node.extra.deprecatedAssertSyntax ||\n node.extra.deprecatedWithLegacySyntax) &&\n // In the production build only show the warning once.\n // We want to show it per-usage locally for tests.\n (!process.env.IS_PUBLISH || !warningShown)\n ) {\n warningShown = true;\n console.warn(`\\\nYou are using import attributes, without specifying the desired output syntax.\nPlease specify the \"importAttributesKeyword\" generator option, whose value can be one of:\n - \"with\" : \\`import { a } from \"b\" with { type: \"json\" };\\`\n - \"assert\" : \\`import { a } from \"b\" assert { type: \"json\" };\\`\n - \"with-legacy\" : \\`import { a } from \"b\" with type: \"json\";\\`\n`);\n }\n\n const useAssertKeyword =\n importAttributesKeyword === \"assert\" ||\n (!importAttributesKeyword && assertions);\n\n this.word(useAssertKeyword ? \"assert\" : \"with\");\n this.space();\n\n if (\n !process.env.BABEL_8_BREAKING &&\n !useAssertKeyword &&\n (importAttributesKeyword === \"with-legacy\" ||\n (!importAttributesKeyword && node.extra?.deprecatedWithLegacySyntax))\n ) {\n // with-legacy\n this.printList(attributes || assertions);\n return;\n }\n\n const occurrenceCount = hasPreviousBrace ? 1 : 0;\n\n this.token(\"{\", null, occurrenceCount);\n this.space();\n this.printList(attributes || assertions, this.shouldPrintTrailingComma(\"}\"));\n this.space();\n this.token(\"}\", null, occurrenceCount);\n}\n\nexport function ExportAllDeclaration(\n this: Printer,\n node: t.ExportAllDeclaration | t.DeclareExportAllDeclaration,\n) {\n this.word(\"export\");\n this.space();\n if (node.exportKind === \"type\") {\n this.word(\"type\");\n this.space();\n }\n this.token(\"*\");\n this.space();\n this.word(\"from\");\n this.space();\n if (node.attributes?.length || node.assertions?.length) {\n this.print(node.source, true);\n this.space();\n this._printAttributes(node, false);\n } else {\n this.print(node.source);\n }\n\n this.semicolon();\n}\n\nfunction maybePrintDecoratorsBeforeExport(\n printer: Printer,\n node: t.ExportNamedDeclaration | t.ExportDefaultDeclaration,\n) {\n if (\n isClassDeclaration(node.declaration) &&\n printer._shouldPrintDecoratorsBeforeExport(\n node as t.ExportNamedDeclaration & { declaration: t.ClassDeclaration },\n )\n ) {\n printer.printJoin(node.declaration.decorators);\n }\n}\n\nexport function ExportNamedDeclaration(\n this: Printer,\n node: t.ExportNamedDeclaration,\n) {\n maybePrintDecoratorsBeforeExport(this, node);\n\n this.word(\"export\");\n this.space();\n if (node.declaration) {\n const declar = node.declaration;\n this.print(declar);\n if (!isStatement(declar)) this.semicolon();\n } else {\n if (node.exportKind === \"type\") {\n this.word(\"type\");\n this.space();\n }\n\n const specifiers = node.specifiers.slice(0);\n\n // print \"special\" specifiers first\n let hasSpecial = false;\n for (;;) {\n const first = specifiers[0];\n if (\n isExportDefaultSpecifier(first) ||\n isExportNamespaceSpecifier(first)\n ) {\n hasSpecial = true;\n this.print(specifiers.shift());\n if (specifiers.length) {\n this.token(\",\");\n this.space();\n }\n } else {\n break;\n }\n }\n\n let hasBrace = false;\n if (specifiers.length || (!specifiers.length && !hasSpecial)) {\n hasBrace = true;\n this.token(\"{\");\n if (specifiers.length) {\n this.space();\n this.printList(specifiers, this.shouldPrintTrailingComma(\"}\"));\n this.space();\n }\n this.token(\"}\");\n }\n\n if (node.source) {\n this.space();\n this.word(\"from\");\n this.space();\n if (node.attributes?.length || node.assertions?.length) {\n this.print(node.source, true);\n this.space();\n this._printAttributes(node, hasBrace);\n } else {\n this.print(node.source);\n }\n }\n\n this.semicolon();\n }\n}\n\nexport function ExportDefaultDeclaration(\n this: Printer,\n node: t.ExportDefaultDeclaration,\n) {\n maybePrintDecoratorsBeforeExport(this, node);\n\n this.word(\"export\");\n this.noIndentInnerCommentsHere();\n this.space();\n this.word(\"default\");\n this.space();\n this.tokenContext |= TokenContext.exportDefault;\n const declar = node.declaration;\n this.print(declar);\n if (!isStatement(declar)) this.semicolon();\n}\n\nexport function ImportDeclaration(this: Printer, node: t.ImportDeclaration) {\n this.word(\"import\");\n this.space();\n\n const isTypeKind = node.importKind === \"type\" || node.importKind === \"typeof\";\n if (isTypeKind) {\n this.noIndentInnerCommentsHere();\n this.word(node.importKind);\n this.space();\n } else if (node.module) {\n this.noIndentInnerCommentsHere();\n this.word(\"module\");\n this.space();\n } else if (node.phase) {\n this.noIndentInnerCommentsHere();\n this.word(node.phase);\n this.space();\n }\n\n const specifiers = node.specifiers.slice(0);\n const hasSpecifiers = !!specifiers.length;\n // print \"special\" specifiers first. The loop condition is constant,\n // but there is a \"break\" in the body.\n while (hasSpecifiers) {\n const first = specifiers[0];\n if (isImportDefaultSpecifier(first) || isImportNamespaceSpecifier(first)) {\n this.print(specifiers.shift());\n if (specifiers.length) {\n this.token(\",\");\n this.space();\n }\n } else {\n break;\n }\n }\n\n let hasBrace = false;\n if (specifiers.length) {\n hasBrace = true;\n this.token(\"{\");\n this.space();\n this.printList(specifiers, this.shouldPrintTrailingComma(\"}\"));\n this.space();\n this.token(\"}\");\n } else if (isTypeKind && !hasSpecifiers) {\n hasBrace = true;\n this.token(\"{\");\n this.token(\"}\");\n }\n\n if (hasSpecifiers || isTypeKind) {\n this.space();\n this.word(\"from\");\n this.space();\n }\n\n if (node.attributes?.length || node.assertions?.length) {\n this.print(node.source, true);\n this.space();\n this._printAttributes(node, hasBrace);\n } else {\n this.print(node.source);\n }\n\n this.semicolon();\n}\n\nexport function ImportAttribute(this: Printer, node: t.ImportAttribute) {\n this.print(node.key);\n this.token(\":\");\n this.space();\n this.print(node.value);\n}\n\nexport function ImportNamespaceSpecifier(\n this: Printer,\n node: t.ImportNamespaceSpecifier,\n) {\n this.token(\"*\");\n this.space();\n this.word(\"as\");\n this.space();\n this.print(node.local);\n}\n\nexport function ImportExpression(this: Printer, node: t.ImportExpression) {\n this.word(\"import\");\n if (node.phase) {\n this.token(\".\");\n this.word(node.phase);\n }\n this.token(\"(\");\n const shouldPrintTrailingComma = this.shouldPrintTrailingComma(\")\");\n this.print(node.source);\n if (node.options != null) {\n this.token(\",\");\n this.space();\n this.print(node.options);\n }\n if (shouldPrintTrailingComma) {\n this.token(\",\");\n }\n this.rightParens(node);\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/generator/lib/generators/statements.js b/node_modules/@babel/generator/lib/generators/statements.js new file mode 100644 index 00000000..b4c72581 --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/statements.js @@ -0,0 +1,279 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.BreakStatement = BreakStatement; +exports.CatchClause = CatchClause; +exports.ContinueStatement = ContinueStatement; +exports.DebuggerStatement = DebuggerStatement; +exports.DoWhileStatement = DoWhileStatement; +exports.ForOfStatement = exports.ForInStatement = void 0; +exports.ForStatement = ForStatement; +exports.IfStatement = IfStatement; +exports.LabeledStatement = LabeledStatement; +exports.ReturnStatement = ReturnStatement; +exports.SwitchCase = SwitchCase; +exports.SwitchStatement = SwitchStatement; +exports.ThrowStatement = ThrowStatement; +exports.TryStatement = TryStatement; +exports.VariableDeclaration = VariableDeclaration; +exports.VariableDeclarator = VariableDeclarator; +exports.WhileStatement = WhileStatement; +exports.WithStatement = WithStatement; +var _t = require("@babel/types"); +const { + isFor, + isForStatement, + isIfStatement, + isStatement +} = _t; +function WithStatement(node) { + this.word("with"); + this.space(); + this.tokenChar(40); + this.print(node.object); + this.tokenChar(41); + this.printBlock(node); +} +function IfStatement(node) { + this.word("if"); + this.space(); + this.tokenChar(40); + this.print(node.test); + this.tokenChar(41); + this.space(); + const needsBlock = node.alternate && isIfStatement(getLastStatement(node.consequent)); + if (needsBlock) { + this.tokenChar(123); + this.newline(); + this.indent(); + } + this.printAndIndentOnComments(node.consequent); + if (needsBlock) { + this.dedent(); + this.newline(); + this.tokenChar(125); + } + if (node.alternate) { + if (this.endsWith(125)) this.space(); + this.word("else"); + this.space(); + this.printAndIndentOnComments(node.alternate); + } +} +function getLastStatement(statement) { + const { + body + } = statement; + if (isStatement(body) === false) { + return statement; + } + return getLastStatement(body); +} +function ForStatement(node) { + this.word("for"); + this.space(); + this.tokenChar(40); + { + const exit = this.enterForStatementInit(); + this.print(node.init); + exit(); + } + this.tokenChar(59); + if (node.test) { + this.space(); + this.print(node.test); + } + this.token(";", false, 1); + if (node.update) { + this.space(); + this.print(node.update); + } + this.tokenChar(41); + this.printBlock(node); +} +function WhileStatement(node) { + this.word("while"); + this.space(); + this.tokenChar(40); + this.print(node.test); + this.tokenChar(41); + this.printBlock(node); +} +function ForXStatement(node) { + this.word("for"); + this.space(); + const isForOf = node.type === "ForOfStatement"; + if (isForOf && node.await) { + this.word("await"); + this.space(); + } + this.noIndentInnerCommentsHere(); + this.tokenChar(40); + { + const exit = this.enterForXStatementInit(isForOf); + this.print(node.left); + exit == null || exit(); + } + this.space(); + this.word(isForOf ? "of" : "in"); + this.space(); + this.print(node.right); + this.tokenChar(41); + this.printBlock(node); +} +const ForInStatement = exports.ForInStatement = ForXStatement; +const ForOfStatement = exports.ForOfStatement = ForXStatement; +function DoWhileStatement(node) { + this.word("do"); + this.space(); + this.print(node.body); + this.space(); + this.word("while"); + this.space(); + this.tokenChar(40); + this.print(node.test); + this.tokenChar(41); + this.semicolon(); +} +function printStatementAfterKeyword(printer, node) { + if (node) { + printer.space(); + printer.printTerminatorless(node); + } + printer.semicolon(); +} +function BreakStatement(node) { + this.word("break"); + printStatementAfterKeyword(this, node.label); +} +function ContinueStatement(node) { + this.word("continue"); + printStatementAfterKeyword(this, node.label); +} +function ReturnStatement(node) { + this.word("return"); + printStatementAfterKeyword(this, node.argument); +} +function ThrowStatement(node) { + this.word("throw"); + printStatementAfterKeyword(this, node.argument); +} +function LabeledStatement(node) { + this.print(node.label); + this.tokenChar(58); + this.space(); + this.print(node.body); +} +function TryStatement(node) { + this.word("try"); + this.space(); + this.print(node.block); + this.space(); + if (node.handlers) { + this.print(node.handlers[0]); + } else { + this.print(node.handler); + } + if (node.finalizer) { + this.space(); + this.word("finally"); + this.space(); + this.print(node.finalizer); + } +} +function CatchClause(node) { + this.word("catch"); + this.space(); + if (node.param) { + this.tokenChar(40); + this.print(node.param); + this.print(node.param.typeAnnotation); + this.tokenChar(41); + this.space(); + } + this.print(node.body); +} +function SwitchStatement(node) { + this.word("switch"); + this.space(); + this.tokenChar(40); + this.print(node.discriminant); + this.tokenChar(41); + this.space(); + this.tokenChar(123); + this.printSequence(node.cases, true, undefined, function addNewlines(leading, cas) { + if (!leading && node.cases[node.cases.length - 1] === cas) return -1; + }); + this.rightBrace(node); +} +function SwitchCase(node) { + if (node.test) { + this.word("case"); + this.space(); + this.print(node.test); + this.tokenChar(58); + } else { + this.word("default"); + this.tokenChar(58); + } + if (node.consequent.length) { + this.newline(); + this.printSequence(node.consequent, true); + } +} +function DebuggerStatement() { + this.word("debugger"); + this.semicolon(); +} +function VariableDeclaration(node, parent) { + if (node.declare) { + this.word("declare"); + this.space(); + } + const { + kind + } = node; + if (kind === "await using") { + this.word("await"); + this.space(); + this.word("using", true); + } else { + this.word(kind, kind === "using"); + } + this.space(); + let hasInits = false; + if (!isFor(parent)) { + for (const declar of node.declarations) { + if (declar.init) { + hasInits = true; + } + } + } + this.printList(node.declarations, undefined, undefined, node.declarations.length > 1, hasInits ? function (occurrenceCount) { + this.token(",", false, occurrenceCount); + this.newline(); + } : undefined); + if (isFor(parent)) { + if (isForStatement(parent)) { + if (parent.init === node) return; + } else { + if (parent.left === node) return; + } + } + this.semicolon(); +} +function VariableDeclarator(node) { + this.print(node.id); + if (node.definite) this.tokenChar(33); + this.print(node.id.typeAnnotation); + if (node.init) { + this.space(); + this.tokenChar(61); + this.space(); + this.print(node.init); + } +} + +//# sourceMappingURL=statements.js.map diff --git a/node_modules/@babel/generator/lib/generators/statements.js.map b/node_modules/@babel/generator/lib/generators/statements.js.map new file mode 100644 index 00000000..c977cc98 --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/statements.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_t","require","isFor","isForStatement","isIfStatement","isStatement","WithStatement","node","word","space","token","print","object","printBlock","IfStatement","test","needsBlock","alternate","getLastStatement","consequent","newline","indent","printAndIndentOnComments","dedent","endsWith","statement","body","ForStatement","exit","enterForStatementInit","init","update","WhileStatement","ForXStatement","isForOf","type","await","noIndentInnerCommentsHere","enterForXStatementInit","left","right","ForInStatement","exports","ForOfStatement","DoWhileStatement","semicolon","printStatementAfterKeyword","printer","printTerminatorless","BreakStatement","label","ContinueStatement","ReturnStatement","argument","ThrowStatement","LabeledStatement","TryStatement","block","handlers","handler","finalizer","CatchClause","param","typeAnnotation","SwitchStatement","discriminant","printSequence","cases","undefined","addNewlines","leading","cas","length","rightBrace","SwitchCase","DebuggerStatement","VariableDeclaration","parent","declare","kind","hasInits","declar","declarations","printList","occurrenceCount","VariableDeclarator","id","definite"],"sources":["../../src/generators/statements.ts"],"sourcesContent":["import type Printer from \"../printer.ts\";\nimport {\n isFor,\n isForStatement,\n isIfStatement,\n isStatement,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\n// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\nexport function WithStatement(this: Printer, node: t.WithStatement) {\n this.word(\"with\");\n this.space();\n this.token(\"(\");\n this.print(node.object);\n this.token(\")\");\n this.printBlock(node);\n}\n\nexport function IfStatement(this: Printer, node: t.IfStatement) {\n this.word(\"if\");\n this.space();\n this.token(\"(\");\n this.print(node.test);\n this.token(\")\");\n this.space();\n\n const needsBlock =\n node.alternate && isIfStatement(getLastStatement(node.consequent));\n if (needsBlock) {\n this.token(\"{\");\n this.newline();\n this.indent();\n }\n\n this.printAndIndentOnComments(node.consequent);\n\n if (needsBlock) {\n this.dedent();\n this.newline();\n this.token(\"}\");\n }\n\n if (node.alternate) {\n if (this.endsWith(charCodes.rightCurlyBrace)) this.space();\n this.word(\"else\");\n this.space();\n this.printAndIndentOnComments(node.alternate);\n }\n}\n\n// Recursively get the last statement.\nfunction getLastStatement(statement: t.Statement): t.Statement {\n // @ts-expect-error: If statement.body is empty or not a Node, isStatement will return false\n const { body } = statement;\n if (isStatement(body) === false) {\n return statement;\n }\n\n return getLastStatement(body);\n}\n\nexport function ForStatement(this: Printer, node: t.ForStatement) {\n this.word(\"for\");\n this.space();\n this.token(\"(\");\n\n {\n const exit = this.enterForStatementInit();\n this.print(node.init);\n exit();\n }\n\n this.token(\";\");\n\n if (node.test) {\n this.space();\n this.print(node.test);\n }\n this.token(\";\", false, 1);\n\n if (node.update) {\n this.space();\n this.print(node.update);\n }\n\n this.token(\")\");\n this.printBlock(node);\n}\n\nexport function WhileStatement(this: Printer, node: t.WhileStatement) {\n this.word(\"while\");\n this.space();\n this.token(\"(\");\n this.print(node.test);\n this.token(\")\");\n this.printBlock(node);\n}\n\nfunction ForXStatement(this: Printer, node: t.ForXStatement) {\n this.word(\"for\");\n this.space();\n const isForOf = node.type === \"ForOfStatement\";\n if (isForOf && node.await) {\n this.word(\"await\");\n this.space();\n }\n this.noIndentInnerCommentsHere();\n this.token(\"(\");\n {\n const exit = this.enterForXStatementInit(isForOf);\n this.print(node.left);\n exit?.();\n }\n this.space();\n this.word(isForOf ? \"of\" : \"in\");\n this.space();\n this.print(node.right);\n this.token(\")\");\n this.printBlock(node);\n}\n\nexport const ForInStatement = ForXStatement;\nexport const ForOfStatement = ForXStatement;\n\nexport function DoWhileStatement(this: Printer, node: t.DoWhileStatement) {\n this.word(\"do\");\n this.space();\n this.print(node.body);\n this.space();\n this.word(\"while\");\n this.space();\n this.token(\"(\");\n this.print(node.test);\n this.token(\")\");\n this.semicolon();\n}\n\nfunction printStatementAfterKeyword(printer: Printer, node: t.Node) {\n if (node) {\n printer.space();\n printer.printTerminatorless(node);\n }\n\n printer.semicolon();\n}\n\nexport function BreakStatement(this: Printer, node: t.ContinueStatement) {\n this.word(\"break\");\n printStatementAfterKeyword(this, node.label);\n}\n\nexport function ContinueStatement(this: Printer, node: t.ContinueStatement) {\n this.word(\"continue\");\n printStatementAfterKeyword(this, node.label);\n}\n\nexport function ReturnStatement(this: Printer, node: t.ReturnStatement) {\n this.word(\"return\");\n printStatementAfterKeyword(this, node.argument);\n}\n\nexport function ThrowStatement(this: Printer, node: t.ThrowStatement) {\n this.word(\"throw\");\n printStatementAfterKeyword(this, node.argument);\n}\n\nexport function LabeledStatement(this: Printer, node: t.LabeledStatement) {\n this.print(node.label);\n this.token(\":\");\n this.space();\n this.print(node.body);\n}\n\nexport function TryStatement(this: Printer, node: t.TryStatement) {\n this.word(\"try\");\n this.space();\n this.print(node.block);\n this.space();\n\n // Esprima bug puts the catch clause in a `handlers` array.\n // see https://code.google.com/p/esprima/issues/detail?id=433\n // We run into this from regenerator generated ast.\n // @ts-expect-error todo(flow->ts) should ast node type be updated to support this?\n if (node.handlers) {\n // @ts-expect-error todo(flow->ts) should ast node type be updated to support this?\n this.print(node.handlers[0]);\n } else {\n this.print(node.handler);\n }\n\n if (node.finalizer) {\n this.space();\n this.word(\"finally\");\n this.space();\n this.print(node.finalizer);\n }\n}\n\nexport function CatchClause(this: Printer, node: t.CatchClause) {\n this.word(\"catch\");\n this.space();\n if (node.param) {\n this.token(\"(\");\n this.print(node.param);\n this.print(node.param.typeAnnotation);\n this.token(\")\");\n this.space();\n }\n this.print(node.body);\n}\n\nexport function SwitchStatement(this: Printer, node: t.SwitchStatement) {\n this.word(\"switch\");\n this.space();\n this.token(\"(\");\n this.print(node.discriminant);\n this.token(\")\");\n this.space();\n this.token(\"{\");\n\n this.printSequence(\n node.cases,\n true,\n undefined,\n function addNewlines(leading, cas) {\n if (!leading && node.cases[node.cases.length - 1] === cas) return -1;\n },\n );\n\n this.rightBrace(node);\n}\n\nexport function SwitchCase(this: Printer, node: t.SwitchCase) {\n if (node.test) {\n this.word(\"case\");\n this.space();\n this.print(node.test);\n this.token(\":\");\n } else {\n this.word(\"default\");\n this.token(\":\");\n }\n\n if (node.consequent.length) {\n this.newline();\n this.printSequence(node.consequent, true);\n }\n}\n\nexport function DebuggerStatement(this: Printer) {\n this.word(\"debugger\");\n this.semicolon();\n}\n\nexport function VariableDeclaration(\n this: Printer,\n node: t.VariableDeclaration,\n parent: t.Node,\n) {\n if (node.declare) {\n // TS\n this.word(\"declare\");\n this.space();\n }\n\n const { kind } = node;\n if (kind === \"await using\") {\n this.word(\"await\");\n this.space();\n this.word(\"using\", true);\n } else {\n this.word(kind, kind === \"using\");\n }\n this.space();\n\n let hasInits = false;\n // don't add whitespace to loop heads\n if (!isFor(parent)) {\n for (const declar of node.declarations) {\n if (declar.init) {\n // has an init so let's split it up over multiple lines\n hasInits = true;\n }\n }\n }\n\n //\n // use a pretty separator when we aren't in compact mode, have initializers and don't have retainLines on\n // this will format declarations like:\n //\n // let foo = \"bar\", bar = \"foo\";\n //\n // into\n //\n // let foo = \"bar\",\n // bar = \"foo\";\n //\n\n this.printList(\n node.declarations,\n undefined,\n undefined,\n node.declarations.length > 1,\n hasInits\n ? function (this: Printer, occurrenceCount: number) {\n this.token(\",\", false, occurrenceCount);\n this.newline();\n }\n : undefined,\n );\n\n if (isFor(parent)) {\n // don't give semicolons to these nodes since they'll be inserted in the parent generator\n if (isForStatement(parent)) {\n if (parent.init === node) return;\n } else {\n if (parent.left === node) return;\n }\n }\n\n this.semicolon();\n}\n\nexport function VariableDeclarator(this: Printer, node: t.VariableDeclarator) {\n this.print(node.id);\n if (node.definite) this.token(\"!\"); // TS\n // @ts-ignore(Babel 7 vs Babel 8) Property 'typeAnnotation' does not exist on type 'MemberExpression'.\n this.print(node.id.typeAnnotation);\n if (node.init) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.init);\n }\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/generator/lib/generators/template-literals.js b/node_modules/@babel/generator/lib/generators/template-literals.js new file mode 100644 index 00000000..0e4b6a91 --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/template-literals.js @@ -0,0 +1,40 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.TaggedTemplateExpression = TaggedTemplateExpression; +exports.TemplateElement = TemplateElement; +exports.TemplateLiteral = TemplateLiteral; +exports._printTemplate = _printTemplate; +function TaggedTemplateExpression(node) { + this.print(node.tag); + { + this.print(node.typeParameters); + } + this.print(node.quasi); +} +function TemplateElement() { + throw new Error("TemplateElement printing is handled in TemplateLiteral"); +} +function _printTemplate(node, substitutions) { + const quasis = node.quasis; + let partRaw = "`"; + for (let i = 0; i < quasis.length - 1; i++) { + partRaw += quasis[i].value.raw; + this.token(partRaw + "${", true); + this.print(substitutions[i]); + partRaw = "}"; + if (this.tokenMap) { + const token = this.tokenMap.findMatching(node, "}", i); + if (token) this._catchUpTo(token.loc.start); + } + } + partRaw += quasis[quasis.length - 1].value.raw; + this.token(partRaw + "`", true); +} +function TemplateLiteral(node) { + this._printTemplate(node, node.expressions); +} + +//# sourceMappingURL=template-literals.js.map diff --git a/node_modules/@babel/generator/lib/generators/template-literals.js.map b/node_modules/@babel/generator/lib/generators/template-literals.js.map new file mode 100644 index 00000000..26bd4e94 --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/template-literals.js.map @@ -0,0 +1 @@ +{"version":3,"names":["TaggedTemplateExpression","node","print","tag","typeParameters","quasi","TemplateElement","Error","_printTemplate","substitutions","quasis","partRaw","i","length","value","raw","token","tokenMap","findMatching","_catchUpTo","loc","start","TemplateLiteral","expressions"],"sources":["../../src/generators/template-literals.ts"],"sourcesContent":["import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\n\nexport function TaggedTemplateExpression(\n this: Printer,\n node: t.TaggedTemplateExpression,\n) {\n this.print(node.tag);\n if (process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n this.print(node.typeArguments);\n } else {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n this.print(node.typeParameters);\n }\n this.print(node.quasi);\n}\n\nexport function TemplateElement(this: Printer) {\n throw new Error(\"TemplateElement printing is handled in TemplateLiteral\");\n}\n\nexport type TemplateLiteralBase = t.Node & {\n quasis: t.TemplateElement[];\n};\n\nexport function _printTemplate(\n this: Printer,\n node: TemplateLiteralBase,\n substitutions: T[],\n) {\n const quasis = node.quasis;\n let partRaw = \"`\";\n for (let i = 0; i < quasis.length - 1; i++) {\n partRaw += quasis[i].value.raw;\n this.token(partRaw + \"${\", true);\n this.print(substitutions[i]);\n partRaw = \"}\";\n\n // In Babel 7 we have individual tokens for ${ and }, so the automatic\n // catchup logic does not work. Manually look for those tokens.\n if (!process.env.BABEL_8_BREAKING && this.tokenMap) {\n const token = this.tokenMap.findMatching(node, \"}\", i);\n if (token) this._catchUpTo(token.loc.start);\n }\n }\n partRaw += quasis[quasis.length - 1].value.raw;\n this.token(partRaw + \"`\", true);\n}\n\nexport function TemplateLiteral(this: Printer, node: t.TemplateLiteral) {\n this._printTemplate(node, node.expressions);\n}\n"],"mappings":";;;;;;;;;AAGO,SAASA,wBAAwBA,CAEtCC,IAAgC,EAChC;EACA,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,GAAG,CAAC;EAIb;IAEL,IAAI,CAACD,KAAK,CAACD,IAAI,CAACG,cAAc,CAAC;EACjC;EACA,IAAI,CAACF,KAAK,CAACD,IAAI,CAACI,KAAK,CAAC;AACxB;AAEO,SAASC,eAAeA,CAAA,EAAgB;EAC7C,MAAM,IAAIC,KAAK,CAAC,wDAAwD,CAAC;AAC3E;AAMO,SAASC,cAAcA,CAE5BP,IAAyB,EACzBQ,aAAkB,EAClB;EACA,MAAMC,MAAM,GAAGT,IAAI,CAACS,MAAM;EAC1B,IAAIC,OAAO,GAAG,GAAG;EACjB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,MAAM,CAACG,MAAM,GAAG,CAAC,EAAED,CAAC,EAAE,EAAE;IAC1CD,OAAO,IAAID,MAAM,CAACE,CAAC,CAAC,CAACE,KAAK,CAACC,GAAG;IAC9B,IAAI,CAACC,KAAK,CAACL,OAAO,GAAG,IAAI,EAAE,IAAI,CAAC;IAChC,IAAI,CAACT,KAAK,CAACO,aAAa,CAACG,CAAC,CAAC,CAAC;IAC5BD,OAAO,GAAG,GAAG;IAIb,IAAqC,IAAI,CAACM,QAAQ,EAAE;MAClD,MAAMD,KAAK,GAAG,IAAI,CAACC,QAAQ,CAACC,YAAY,CAACjB,IAAI,EAAE,GAAG,EAAEW,CAAC,CAAC;MACtD,IAAII,KAAK,EAAE,IAAI,CAACG,UAAU,CAACH,KAAK,CAACI,GAAG,CAACC,KAAK,CAAC;IAC7C;EACF;EACAV,OAAO,IAAID,MAAM,CAACA,MAAM,CAACG,MAAM,GAAG,CAAC,CAAC,CAACC,KAAK,CAACC,GAAG;EAC9C,IAAI,CAACC,KAAK,CAACL,OAAO,GAAG,GAAG,EAAE,IAAI,CAAC;AACjC;AAEO,SAASW,eAAeA,CAAgBrB,IAAuB,EAAE;EACtE,IAAI,CAACO,cAAc,CAACP,IAAI,EAAEA,IAAI,CAACsB,WAAW,CAAC;AAC7C","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/generator/lib/generators/types.js b/node_modules/@babel/generator/lib/generators/types.js new file mode 100644 index 00000000..77223bb8 --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/types.js @@ -0,0 +1,234 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ArgumentPlaceholder = ArgumentPlaceholder; +exports.ArrayPattern = exports.ArrayExpression = ArrayExpression; +exports.BigIntLiteral = BigIntLiteral; +exports.BooleanLiteral = BooleanLiteral; +exports.Identifier = Identifier; +exports.NullLiteral = NullLiteral; +exports.NumericLiteral = NumericLiteral; +exports.ObjectPattern = exports.ObjectExpression = ObjectExpression; +exports.ObjectMethod = ObjectMethod; +exports.ObjectProperty = ObjectProperty; +exports.PipelineBareFunction = PipelineBareFunction; +exports.PipelinePrimaryTopicReference = PipelinePrimaryTopicReference; +exports.PipelineTopicExpression = PipelineTopicExpression; +exports.RecordExpression = RecordExpression; +exports.RegExpLiteral = RegExpLiteral; +exports.SpreadElement = exports.RestElement = RestElement; +exports.StringLiteral = StringLiteral; +exports.TopicReference = TopicReference; +exports.TupleExpression = TupleExpression; +exports._getRawIdentifier = _getRawIdentifier; +var _t = require("@babel/types"); +var _jsesc = require("jsesc"); +const { + isAssignmentPattern, + isIdentifier +} = _t; +let lastRawIdentNode = null; +let lastRawIdentResult = ""; +function _getRawIdentifier(node) { + if (node === lastRawIdentNode) return lastRawIdentResult; + lastRawIdentNode = node; + const { + name + } = node; + const token = this.tokenMap.find(node, tok => tok.value === name); + if (token) { + lastRawIdentResult = this._originalCode.slice(token.start, token.end); + return lastRawIdentResult; + } + return lastRawIdentResult = node.name; +} +function Identifier(node) { + var _node$loc; + this.sourceIdentifierName(((_node$loc = node.loc) == null ? void 0 : _node$loc.identifierName) || node.name); + this.word(this.tokenMap ? this._getRawIdentifier(node) : node.name); +} +function ArgumentPlaceholder() { + this.tokenChar(63); +} +function RestElement(node) { + this.token("..."); + this.print(node.argument); +} +function ObjectExpression(node) { + const props = node.properties; + this.tokenChar(123); + if (props.length) { + const exit = this.enterDelimited(); + this.space(); + this.printList(props, this.shouldPrintTrailingComma("}"), true, true); + this.space(); + exit(); + } + this.sourceWithOffset("end", node.loc, -1); + this.tokenChar(125); +} +function ObjectMethod(node) { + this.printJoin(node.decorators); + this._methodHead(node); + this.space(); + this.print(node.body); +} +function ObjectProperty(node) { + this.printJoin(node.decorators); + if (node.computed) { + this.tokenChar(91); + this.print(node.key); + this.tokenChar(93); + } else { + if (isAssignmentPattern(node.value) && isIdentifier(node.key) && node.key.name === node.value.left.name) { + this.print(node.value); + return; + } + this.print(node.key); + if (node.shorthand && isIdentifier(node.key) && isIdentifier(node.value) && node.key.name === node.value.name) { + return; + } + } + this.tokenChar(58); + this.space(); + this.print(node.value); +} +function ArrayExpression(node) { + const elems = node.elements; + const len = elems.length; + this.tokenChar(91); + const exit = this.enterDelimited(); + for (let i = 0; i < elems.length; i++) { + const elem = elems[i]; + if (elem) { + if (i > 0) this.space(); + this.print(elem); + if (i < len - 1 || this.shouldPrintTrailingComma("]")) { + this.token(",", false, i); + } + } else { + this.token(",", false, i); + } + } + exit(); + this.tokenChar(93); +} +function RecordExpression(node) { + const props = node.properties; + let startToken; + let endToken; + { + if (this.format.recordAndTupleSyntaxType === "bar") { + startToken = "{|"; + endToken = "|}"; + } else if (this.format.recordAndTupleSyntaxType !== "hash" && this.format.recordAndTupleSyntaxType != null) { + throw new Error(`The "recordAndTupleSyntaxType" generator option must be "bar" or "hash" (${JSON.stringify(this.format.recordAndTupleSyntaxType)} received).`); + } else { + startToken = "#{"; + endToken = "}"; + } + } + this.token(startToken); + if (props.length) { + this.space(); + this.printList(props, this.shouldPrintTrailingComma(endToken), true, true); + this.space(); + } + this.token(endToken); +} +function TupleExpression(node) { + const elems = node.elements; + const len = elems.length; + let startToken; + let endToken; + { + if (this.format.recordAndTupleSyntaxType === "bar") { + startToken = "[|"; + endToken = "|]"; + } else if (this.format.recordAndTupleSyntaxType === "hash") { + startToken = "#["; + endToken = "]"; + } else { + throw new Error(`${this.format.recordAndTupleSyntaxType} is not a valid recordAndTuple syntax type`); + } + } + this.token(startToken); + for (let i = 0; i < elems.length; i++) { + const elem = elems[i]; + if (elem) { + if (i > 0) this.space(); + this.print(elem); + if (i < len - 1 || this.shouldPrintTrailingComma(endToken)) { + this.token(",", false, i); + } + } + } + this.token(endToken); +} +function RegExpLiteral(node) { + this.word(`/${node.pattern}/${node.flags}`); +} +function BooleanLiteral(node) { + this.word(node.value ? "true" : "false"); +} +function NullLiteral() { + this.word("null"); +} +function NumericLiteral(node) { + const raw = this.getPossibleRaw(node); + const opts = this.format.jsescOption; + const value = node.value; + const str = value + ""; + if (opts.numbers) { + this.number(_jsesc(value, opts), value); + } else if (raw == null) { + this.number(str, value); + } else if (this.format.minified) { + this.number(raw.length < str.length ? raw : str, value); + } else { + this.number(raw, value); + } +} +function StringLiteral(node) { + const raw = this.getPossibleRaw(node); + if (!this.format.minified && raw !== undefined) { + this.token(raw); + return; + } + const val = _jsesc(node.value, this.format.jsescOption); + this.token(val); +} +function BigIntLiteral(node) { + const raw = this.getPossibleRaw(node); + if (!this.format.minified && raw !== undefined) { + this.word(raw); + return; + } + this.word(node.value + "n"); +} +const validTopicTokenSet = new Set(["^^", "@@", "^", "%", "#"]); +function TopicReference() { + const { + topicToken + } = this.format; + if (validTopicTokenSet.has(topicToken)) { + this.token(topicToken); + } else { + const givenTopicTokenJSON = JSON.stringify(topicToken); + const validTopics = Array.from(validTopicTokenSet, v => JSON.stringify(v)); + throw new Error(`The "topicToken" generator option must be one of ` + `${validTopics.join(", ")} (${givenTopicTokenJSON} received instead).`); + } +} +function PipelineTopicExpression(node) { + this.print(node.expression); +} +function PipelineBareFunction(node) { + this.print(node.callee); +} +function PipelinePrimaryTopicReference() { + this.tokenChar(35); +} + +//# sourceMappingURL=types.js.map diff --git a/node_modules/@babel/generator/lib/generators/types.js.map b/node_modules/@babel/generator/lib/generators/types.js.map new file mode 100644 index 00000000..7075d53e --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/types.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_t","require","_jsesc","isAssignmentPattern","isIdentifier","lastRawIdentNode","lastRawIdentResult","_getRawIdentifier","node","name","token","tokenMap","find","tok","value","_originalCode","slice","start","end","Identifier","_node$loc","sourceIdentifierName","loc","identifierName","word","ArgumentPlaceholder","RestElement","print","argument","ObjectExpression","props","properties","length","exit","enterDelimited","space","printList","shouldPrintTrailingComma","sourceWithOffset","ObjectMethod","printJoin","decorators","_methodHead","body","ObjectProperty","computed","key","left","shorthand","ArrayExpression","elems","elements","len","i","elem","RecordExpression","startToken","endToken","format","recordAndTupleSyntaxType","Error","JSON","stringify","TupleExpression","RegExpLiteral","pattern","flags","BooleanLiteral","NullLiteral","NumericLiteral","raw","getPossibleRaw","opts","jsescOption","str","numbers","number","jsesc","minified","StringLiteral","undefined","val","BigIntLiteral","validTopicTokenSet","Set","TopicReference","topicToken","has","givenTopicTokenJSON","validTopics","Array","from","v","join","PipelineTopicExpression","expression","PipelineBareFunction","callee","PipelinePrimaryTopicReference"],"sources":["../../src/generators/types.ts"],"sourcesContent":["import type Printer from \"../printer.ts\";\nimport { isAssignmentPattern, isIdentifier } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport jsesc from \"jsesc\";\n\nlet lastRawIdentNode: t.Identifier | null = null;\nlet lastRawIdentResult: string = \"\";\nexport function _getRawIdentifier(this: Printer, node: t.Identifier) {\n if (node === lastRawIdentNode) return lastRawIdentResult;\n lastRawIdentNode = node;\n\n const { name } = node;\n const token = this.tokenMap.find(node, tok => tok.value === name);\n if (token) {\n lastRawIdentResult = this._originalCode.slice(token.start, token.end);\n return lastRawIdentResult;\n }\n return (lastRawIdentResult = node.name);\n}\n\nexport function Identifier(this: Printer, node: t.Identifier) {\n this.sourceIdentifierName(node.loc?.identifierName || node.name);\n\n this.word(this.tokenMap ? this._getRawIdentifier(node) : node.name);\n}\n\nexport function ArgumentPlaceholder(this: Printer) {\n this.token(\"?\");\n}\n\nexport function RestElement(this: Printer, node: t.RestElement) {\n this.token(\"...\");\n this.print(node.argument);\n}\n\nexport { RestElement as SpreadElement };\n\nexport function ObjectExpression(this: Printer, node: t.ObjectExpression) {\n const props = node.properties;\n\n this.token(\"{\");\n\n if (props.length) {\n const exit = this.enterDelimited();\n this.space();\n this.printList(props, this.shouldPrintTrailingComma(\"}\"), true, true);\n this.space();\n exit();\n }\n\n this.sourceWithOffset(\"end\", node.loc, -1);\n\n this.token(\"}\");\n}\n\nexport { ObjectExpression as ObjectPattern };\n\nexport function ObjectMethod(this: Printer, node: t.ObjectMethod) {\n this.printJoin(node.decorators);\n this._methodHead(node);\n this.space();\n this.print(node.body);\n}\n\nexport function ObjectProperty(this: Printer, node: t.ObjectProperty) {\n this.printJoin(node.decorators);\n\n if (node.computed) {\n this.token(\"[\");\n this.print(node.key);\n this.token(\"]\");\n } else {\n // print `({ foo: foo = 5 } = {})` as `({ foo = 5 } = {});`\n if (\n isAssignmentPattern(node.value) &&\n isIdentifier(node.key) &&\n // @ts-expect-error todo(flow->ts) `.name` does not exist on some types in union\n node.key.name === node.value.left.name\n ) {\n this.print(node.value);\n return;\n }\n\n this.print(node.key);\n\n // shorthand!\n if (\n node.shorthand &&\n isIdentifier(node.key) &&\n isIdentifier(node.value) &&\n node.key.name === node.value.name\n ) {\n return;\n }\n }\n\n this.token(\":\");\n this.space();\n this.print(node.value);\n}\n\nexport function ArrayExpression(this: Printer, node: t.ArrayExpression) {\n const elems = node.elements;\n const len = elems.length;\n\n this.token(\"[\");\n\n const exit = this.enterDelimited();\n\n for (let i = 0; i < elems.length; i++) {\n const elem = elems[i];\n if (elem) {\n if (i > 0) this.space();\n this.print(elem);\n if (i < len - 1 || this.shouldPrintTrailingComma(\"]\")) {\n this.token(\",\", false, i);\n }\n } else {\n // If the array expression ends with a hole, that hole\n // will be ignored by the interpreter, but if it ends with\n // two (or more) holes, we need to write out two (or more)\n // commas so that the resulting code is interpreted with\n // both (all) of the holes.\n this.token(\",\", false, i);\n }\n }\n\n exit();\n\n this.token(\"]\");\n}\n\nexport { ArrayExpression as ArrayPattern };\n\nexport function RecordExpression(this: Printer, node: t.RecordExpression) {\n const props = node.properties;\n\n let startToken;\n let endToken;\n if (process.env.BABEL_8_BREAKING) {\n startToken = \"#{\";\n endToken = \"}\";\n } else {\n if (this.format.recordAndTupleSyntaxType === \"bar\") {\n startToken = \"{|\";\n endToken = \"|}\";\n } else if (\n this.format.recordAndTupleSyntaxType !== \"hash\" &&\n this.format.recordAndTupleSyntaxType != null\n ) {\n throw new Error(\n `The \"recordAndTupleSyntaxType\" generator option must be \"bar\" or \"hash\" (${JSON.stringify(\n this.format.recordAndTupleSyntaxType,\n )} received).`,\n );\n } else {\n startToken = \"#{\";\n endToken = \"}\";\n }\n }\n\n this.token(startToken);\n\n if (props.length) {\n this.space();\n this.printList(props, this.shouldPrintTrailingComma(endToken), true, true);\n this.space();\n }\n this.token(endToken);\n}\n\nexport function TupleExpression(this: Printer, node: t.TupleExpression) {\n const elems = node.elements;\n const len = elems.length;\n\n let startToken;\n let endToken;\n if (process.env.BABEL_8_BREAKING) {\n startToken = \"#[\";\n endToken = \"]\";\n } else {\n if (this.format.recordAndTupleSyntaxType === \"bar\") {\n startToken = \"[|\";\n endToken = \"|]\";\n } else if (this.format.recordAndTupleSyntaxType === \"hash\") {\n startToken = \"#[\";\n endToken = \"]\";\n } else {\n throw new Error(\n `${this.format.recordAndTupleSyntaxType} is not a valid recordAndTuple syntax type`,\n );\n }\n }\n\n this.token(startToken);\n\n for (let i = 0; i < elems.length; i++) {\n const elem = elems[i];\n if (elem) {\n if (i > 0) this.space();\n this.print(elem);\n if (i < len - 1 || this.shouldPrintTrailingComma(endToken)) {\n this.token(\",\", false, i);\n }\n }\n }\n\n this.token(endToken);\n}\n\nexport function RegExpLiteral(this: Printer, node: t.RegExpLiteral) {\n this.word(`/${node.pattern}/${node.flags}`);\n}\n\nexport function BooleanLiteral(this: Printer, node: t.BooleanLiteral) {\n this.word(node.value ? \"true\" : \"false\");\n}\n\nexport function NullLiteral(this: Printer) {\n this.word(\"null\");\n}\n\nexport function NumericLiteral(this: Printer, node: t.NumericLiteral) {\n const raw = this.getPossibleRaw(node);\n const opts = this.format.jsescOption;\n const value = node.value;\n const str = value + \"\";\n if (opts.numbers) {\n this.number(jsesc(value, opts), value);\n } else if (raw == null) {\n this.number(str, value); // normalize\n } else if (this.format.minified) {\n this.number(raw.length < str.length ? raw : str, value);\n } else {\n this.number(raw, value);\n }\n}\n\nexport function StringLiteral(this: Printer, node: t.StringLiteral) {\n const raw = this.getPossibleRaw(node);\n if (!this.format.minified && raw !== undefined) {\n this.token(raw);\n return;\n }\n\n const val = jsesc(node.value, this.format.jsescOption);\n\n this.token(val);\n}\n\nexport function BigIntLiteral(this: Printer, node: t.BigIntLiteral) {\n const raw = this.getPossibleRaw(node);\n if (!this.format.minified && raw !== undefined) {\n this.word(raw);\n return;\n }\n this.word(node.value + \"n\");\n}\n\n// Hack pipe operator\nconst validTopicTokenSet = new Set([\"^^\", \"@@\", \"^\", \"%\", \"#\"]);\nexport function TopicReference(this: Printer) {\n const { topicToken } = this.format;\n\n if (validTopicTokenSet.has(topicToken)) {\n this.token(topicToken);\n } else {\n const givenTopicTokenJSON = JSON.stringify(topicToken);\n const validTopics = Array.from(validTopicTokenSet, v => JSON.stringify(v));\n throw new Error(\n `The \"topicToken\" generator option must be one of ` +\n `${validTopics.join(\", \")} (${givenTopicTokenJSON} received instead).`,\n );\n }\n}\n\n// Smart-mix pipe operator\nexport function PipelineTopicExpression(\n this: Printer,\n node: t.PipelineTopicExpression,\n) {\n this.print(node.expression);\n}\n\nexport function PipelineBareFunction(\n this: Printer,\n node: t.PipelineBareFunction,\n) {\n this.print(node.callee);\n}\n\nexport function PipelinePrimaryTopicReference(this: Printer) {\n this.token(\"#\");\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/generator/lib/generators/typescript.js b/node_modules/@babel/generator/lib/generators/typescript.js new file mode 100644 index 00000000..6ebc1078 --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/typescript.js @@ -0,0 +1,724 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.TSAnyKeyword = TSAnyKeyword; +exports.TSArrayType = TSArrayType; +exports.TSSatisfiesExpression = exports.TSAsExpression = TSTypeExpression; +exports.TSBigIntKeyword = TSBigIntKeyword; +exports.TSBooleanKeyword = TSBooleanKeyword; +exports.TSCallSignatureDeclaration = TSCallSignatureDeclaration; +exports.TSInterfaceHeritage = exports.TSClassImplements = TSClassImplements; +exports.TSConditionalType = TSConditionalType; +exports.TSConstructSignatureDeclaration = TSConstructSignatureDeclaration; +exports.TSConstructorType = TSConstructorType; +exports.TSDeclareFunction = TSDeclareFunction; +exports.TSDeclareMethod = TSDeclareMethod; +exports.TSEnumBody = TSEnumBody; +exports.TSEnumDeclaration = TSEnumDeclaration; +exports.TSEnumMember = TSEnumMember; +exports.TSExportAssignment = TSExportAssignment; +exports.TSExternalModuleReference = TSExternalModuleReference; +exports.TSFunctionType = TSFunctionType; +exports.TSImportEqualsDeclaration = TSImportEqualsDeclaration; +exports.TSImportType = TSImportType; +exports.TSIndexSignature = TSIndexSignature; +exports.TSIndexedAccessType = TSIndexedAccessType; +exports.TSInferType = TSInferType; +exports.TSInstantiationExpression = TSInstantiationExpression; +exports.TSInterfaceBody = TSInterfaceBody; +exports.TSInterfaceDeclaration = TSInterfaceDeclaration; +exports.TSIntersectionType = TSIntersectionType; +exports.TSIntrinsicKeyword = TSIntrinsicKeyword; +exports.TSLiteralType = TSLiteralType; +exports.TSMappedType = TSMappedType; +exports.TSMethodSignature = TSMethodSignature; +exports.TSModuleBlock = TSModuleBlock; +exports.TSModuleDeclaration = TSModuleDeclaration; +exports.TSNamedTupleMember = TSNamedTupleMember; +exports.TSNamespaceExportDeclaration = TSNamespaceExportDeclaration; +exports.TSNeverKeyword = TSNeverKeyword; +exports.TSNonNullExpression = TSNonNullExpression; +exports.TSNullKeyword = TSNullKeyword; +exports.TSNumberKeyword = TSNumberKeyword; +exports.TSObjectKeyword = TSObjectKeyword; +exports.TSOptionalType = TSOptionalType; +exports.TSParameterProperty = TSParameterProperty; +exports.TSParenthesizedType = TSParenthesizedType; +exports.TSPropertySignature = TSPropertySignature; +exports.TSQualifiedName = TSQualifiedName; +exports.TSRestType = TSRestType; +exports.TSStringKeyword = TSStringKeyword; +exports.TSSymbolKeyword = TSSymbolKeyword; +exports.TSTemplateLiteralType = TSTemplateLiteralType; +exports.TSThisType = TSThisType; +exports.TSTupleType = TSTupleType; +exports.TSTypeAliasDeclaration = TSTypeAliasDeclaration; +exports.TSTypeAnnotation = TSTypeAnnotation; +exports.TSTypeAssertion = TSTypeAssertion; +exports.TSTypeLiteral = TSTypeLiteral; +exports.TSTypeOperator = TSTypeOperator; +exports.TSTypeParameter = TSTypeParameter; +exports.TSTypeParameterDeclaration = exports.TSTypeParameterInstantiation = TSTypeParameterInstantiation; +exports.TSTypePredicate = TSTypePredicate; +exports.TSTypeQuery = TSTypeQuery; +exports.TSTypeReference = TSTypeReference; +exports.TSUndefinedKeyword = TSUndefinedKeyword; +exports.TSUnionType = TSUnionType; +exports.TSUnknownKeyword = TSUnknownKeyword; +exports.TSVoidKeyword = TSVoidKeyword; +exports.tsPrintClassMemberModifiers = tsPrintClassMemberModifiers; +exports.tsPrintFunctionOrConstructorType = tsPrintFunctionOrConstructorType; +exports.tsPrintPropertyOrMethodName = tsPrintPropertyOrMethodName; +exports.tsPrintSignatureDeclarationBase = tsPrintSignatureDeclarationBase; +function TSTypeAnnotation(node, parent) { + this.token((parent.type === "TSFunctionType" || parent.type === "TSConstructorType") && parent.typeAnnotation === node ? "=>" : ":"); + this.space(); + if (node.optional) this.tokenChar(63); + this.print(node.typeAnnotation); +} +function TSTypeParameterInstantiation(node, parent) { + this.tokenChar(60); + let printTrailingSeparator = parent.type === "ArrowFunctionExpression" && node.params.length === 1; + if (this.tokenMap && node.start != null && node.end != null) { + printTrailingSeparator && (printTrailingSeparator = !!this.tokenMap.find(node, t => this.tokenMap.matchesOriginal(t, ","))); + printTrailingSeparator || (printTrailingSeparator = this.shouldPrintTrailingComma(">")); + } + this.printList(node.params, printTrailingSeparator); + this.tokenChar(62); +} +function TSTypeParameter(node) { + if (node.const) { + this.word("const"); + this.space(); + } + if (node.in) { + this.word("in"); + this.space(); + } + if (node.out) { + this.word("out"); + this.space(); + } + this.word(node.name); + if (node.constraint) { + this.space(); + this.word("extends"); + this.space(); + this.print(node.constraint); + } + if (node.default) { + this.space(); + this.tokenChar(61); + this.space(); + this.print(node.default); + } +} +function TSParameterProperty(node) { + if (node.accessibility) { + this.word(node.accessibility); + this.space(); + } + if (node.readonly) { + this.word("readonly"); + this.space(); + } + this._param(node.parameter); +} +function TSDeclareFunction(node, parent) { + if (node.declare) { + this.word("declare"); + this.space(); + } + this._functionHead(node, parent); + this.semicolon(); +} +function TSDeclareMethod(node) { + this._classMethodHead(node); + this.semicolon(); +} +function TSQualifiedName(node) { + this.print(node.left); + this.tokenChar(46); + this.print(node.right); +} +function TSCallSignatureDeclaration(node) { + this.tsPrintSignatureDeclarationBase(node); + maybePrintTrailingCommaOrSemicolon(this, node); +} +function maybePrintTrailingCommaOrSemicolon(printer, node) { + if (!printer.tokenMap || !node.start || !node.end) { + printer.semicolon(); + return; + } + if (printer.tokenMap.endMatches(node, ",")) { + printer.token(","); + } else if (printer.tokenMap.endMatches(node, ";")) { + printer.semicolon(); + } +} +function TSConstructSignatureDeclaration(node) { + this.word("new"); + this.space(); + this.tsPrintSignatureDeclarationBase(node); + maybePrintTrailingCommaOrSemicolon(this, node); +} +function TSPropertySignature(node) { + const { + readonly + } = node; + if (readonly) { + this.word("readonly"); + this.space(); + } + this.tsPrintPropertyOrMethodName(node); + this.print(node.typeAnnotation); + maybePrintTrailingCommaOrSemicolon(this, node); +} +function tsPrintPropertyOrMethodName(node) { + if (node.computed) { + this.tokenChar(91); + } + this.print(node.key); + if (node.computed) { + this.tokenChar(93); + } + if (node.optional) { + this.tokenChar(63); + } +} +function TSMethodSignature(node) { + const { + kind + } = node; + if (kind === "set" || kind === "get") { + this.word(kind); + this.space(); + } + this.tsPrintPropertyOrMethodName(node); + this.tsPrintSignatureDeclarationBase(node); + maybePrintTrailingCommaOrSemicolon(this, node); +} +function TSIndexSignature(node) { + const { + readonly, + static: isStatic + } = node; + if (isStatic) { + this.word("static"); + this.space(); + } + if (readonly) { + this.word("readonly"); + this.space(); + } + this.tokenChar(91); + this._parameters(node.parameters, "]"); + this.print(node.typeAnnotation); + maybePrintTrailingCommaOrSemicolon(this, node); +} +function TSAnyKeyword() { + this.word("any"); +} +function TSBigIntKeyword() { + this.word("bigint"); +} +function TSUnknownKeyword() { + this.word("unknown"); +} +function TSNumberKeyword() { + this.word("number"); +} +function TSObjectKeyword() { + this.word("object"); +} +function TSBooleanKeyword() { + this.word("boolean"); +} +function TSStringKeyword() { + this.word("string"); +} +function TSSymbolKeyword() { + this.word("symbol"); +} +function TSVoidKeyword() { + this.word("void"); +} +function TSUndefinedKeyword() { + this.word("undefined"); +} +function TSNullKeyword() { + this.word("null"); +} +function TSNeverKeyword() { + this.word("never"); +} +function TSIntrinsicKeyword() { + this.word("intrinsic"); +} +function TSThisType() { + this.word("this"); +} +function TSFunctionType(node) { + this.tsPrintFunctionOrConstructorType(node); +} +function TSConstructorType(node) { + if (node.abstract) { + this.word("abstract"); + this.space(); + } + this.word("new"); + this.space(); + this.tsPrintFunctionOrConstructorType(node); +} +function tsPrintFunctionOrConstructorType(node) { + const { + typeParameters + } = node; + const parameters = node.parameters; + this.print(typeParameters); + this.tokenChar(40); + this._parameters(parameters, ")"); + this.space(); + const returnType = node.typeAnnotation; + this.print(returnType); +} +function TSTypeReference(node) { + const typeArguments = node.typeParameters; + this.print(node.typeName, !!typeArguments); + this.print(typeArguments); +} +function TSTypePredicate(node) { + if (node.asserts) { + this.word("asserts"); + this.space(); + } + this.print(node.parameterName); + if (node.typeAnnotation) { + this.space(); + this.word("is"); + this.space(); + this.print(node.typeAnnotation.typeAnnotation); + } +} +function TSTypeQuery(node) { + this.word("typeof"); + this.space(); + this.print(node.exprName); + const typeArguments = node.typeParameters; + if (typeArguments) { + this.print(typeArguments); + } +} +function TSTypeLiteral(node) { + printBraced(this, node, () => this.printJoin(node.members, true, true)); +} +function TSArrayType(node) { + this.print(node.elementType, true); + this.tokenChar(91); + this.tokenChar(93); +} +function TSTupleType(node) { + this.tokenChar(91); + this.printList(node.elementTypes, this.shouldPrintTrailingComma("]")); + this.tokenChar(93); +} +function TSOptionalType(node) { + this.print(node.typeAnnotation); + this.tokenChar(63); +} +function TSRestType(node) { + this.token("..."); + this.print(node.typeAnnotation); +} +function TSNamedTupleMember(node) { + this.print(node.label); + if (node.optional) this.tokenChar(63); + this.tokenChar(58); + this.space(); + this.print(node.elementType); +} +function TSUnionType(node) { + tsPrintUnionOrIntersectionType(this, node, "|"); +} +function TSIntersectionType(node) { + tsPrintUnionOrIntersectionType(this, node, "&"); +} +function tsPrintUnionOrIntersectionType(printer, node, sep) { + var _printer$tokenMap; + let hasLeadingToken = 0; + if ((_printer$tokenMap = printer.tokenMap) != null && _printer$tokenMap.startMatches(node, sep)) { + hasLeadingToken = 1; + printer.token(sep); + } + printer.printJoin(node.types, undefined, undefined, function (i) { + this.space(); + this.token(sep, null, i + hasLeadingToken); + this.space(); + }); +} +function TSConditionalType(node) { + this.print(node.checkType); + this.space(); + this.word("extends"); + this.space(); + this.print(node.extendsType); + this.space(); + this.tokenChar(63); + this.space(); + this.print(node.trueType); + this.space(); + this.tokenChar(58); + this.space(); + this.print(node.falseType); +} +function TSInferType(node) { + this.word("infer"); + this.print(node.typeParameter); +} +function TSParenthesizedType(node) { + this.tokenChar(40); + this.print(node.typeAnnotation); + this.tokenChar(41); +} +function TSTypeOperator(node) { + this.word(node.operator); + this.space(); + this.print(node.typeAnnotation); +} +function TSIndexedAccessType(node) { + this.print(node.objectType, true); + this.tokenChar(91); + this.print(node.indexType); + this.tokenChar(93); +} +function TSMappedType(node) { + const { + nameType, + optional, + readonly, + typeAnnotation + } = node; + this.tokenChar(123); + const exit = this.enterDelimited(); + this.space(); + if (readonly) { + tokenIfPlusMinus(this, readonly); + this.word("readonly"); + this.space(); + } + this.tokenChar(91); + { + this.word(node.typeParameter.name); + } + this.space(); + this.word("in"); + this.space(); + { + this.print(node.typeParameter.constraint); + } + if (nameType) { + this.space(); + this.word("as"); + this.space(); + this.print(nameType); + } + this.tokenChar(93); + if (optional) { + tokenIfPlusMinus(this, optional); + this.tokenChar(63); + } + if (typeAnnotation) { + this.tokenChar(58); + this.space(); + this.print(typeAnnotation); + } + this.space(); + exit(); + this.tokenChar(125); +} +function tokenIfPlusMinus(self, tok) { + if (tok !== true) { + self.token(tok); + } +} +function TSTemplateLiteralType(node) { + this._printTemplate(node, node.types); +} +function TSLiteralType(node) { + this.print(node.literal); +} +function TSClassImplements(node) { + this.print(node.expression); + this.print(node.typeArguments); +} +function TSInterfaceDeclaration(node) { + const { + declare, + id, + typeParameters, + extends: extendz, + body + } = node; + if (declare) { + this.word("declare"); + this.space(); + } + this.word("interface"); + this.space(); + this.print(id); + this.print(typeParameters); + if (extendz != null && extendz.length) { + this.space(); + this.word("extends"); + this.space(); + this.printList(extendz); + } + this.space(); + this.print(body); +} +function TSInterfaceBody(node) { + printBraced(this, node, () => this.printJoin(node.body, true, true)); +} +function TSTypeAliasDeclaration(node) { + const { + declare, + id, + typeParameters, + typeAnnotation + } = node; + if (declare) { + this.word("declare"); + this.space(); + } + this.word("type"); + this.space(); + this.print(id); + this.print(typeParameters); + this.space(); + this.tokenChar(61); + this.space(); + this.print(typeAnnotation); + this.semicolon(); +} +function TSTypeExpression(node) { + const { + type, + expression, + typeAnnotation + } = node; + this.print(expression, true); + this.space(); + this.word(type === "TSAsExpression" ? "as" : "satisfies"); + this.space(); + this.print(typeAnnotation); +} +function TSTypeAssertion(node) { + const { + typeAnnotation, + expression + } = node; + this.tokenChar(60); + this.print(typeAnnotation); + this.tokenChar(62); + this.space(); + this.print(expression); +} +function TSInstantiationExpression(node) { + this.print(node.expression); + { + this.print(node.typeParameters); + } +} +function TSEnumDeclaration(node) { + const { + declare, + const: isConst, + id + } = node; + if (declare) { + this.word("declare"); + this.space(); + } + if (isConst) { + this.word("const"); + this.space(); + } + this.word("enum"); + this.space(); + this.print(id); + this.space(); + { + TSEnumBody.call(this, node); + } +} +function TSEnumBody(node) { + printBraced(this, node, () => { + var _this$shouldPrintTrai; + return this.printList(node.members, (_this$shouldPrintTrai = this.shouldPrintTrailingComma("}")) != null ? _this$shouldPrintTrai : true, true, true); + }); +} +function TSEnumMember(node) { + const { + id, + initializer + } = node; + this.print(id); + if (initializer) { + this.space(); + this.tokenChar(61); + this.space(); + this.print(initializer); + } +} +function TSModuleDeclaration(node) { + const { + declare, + id, + kind + } = node; + if (declare) { + this.word("declare"); + this.space(); + } + { + if (!node.global) { + this.word(kind != null ? kind : id.type === "Identifier" ? "namespace" : "module"); + this.space(); + } + this.print(id); + if (!node.body) { + this.semicolon(); + return; + } + let body = node.body; + while (body.type === "TSModuleDeclaration") { + this.tokenChar(46); + this.print(body.id); + body = body.body; + } + this.space(); + this.print(body); + } +} +function TSModuleBlock(node) { + printBraced(this, node, () => this.printSequence(node.body, true)); +} +function TSImportType(node) { + const { + argument, + qualifier, + options + } = node; + this.word("import"); + this.tokenChar(40); + this.print(argument); + if (options) { + this.tokenChar(44); + this.print(options); + } + this.tokenChar(41); + if (qualifier) { + this.tokenChar(46); + this.print(qualifier); + } + const typeArguments = node.typeParameters; + if (typeArguments) { + this.print(typeArguments); + } +} +function TSImportEqualsDeclaration(node) { + const { + id, + moduleReference + } = node; + if (node.isExport) { + this.word("export"); + this.space(); + } + this.word("import"); + this.space(); + this.print(id); + this.space(); + this.tokenChar(61); + this.space(); + this.print(moduleReference); + this.semicolon(); +} +function TSExternalModuleReference(node) { + this.token("require("); + this.print(node.expression); + this.tokenChar(41); +} +function TSNonNullExpression(node) { + this.print(node.expression); + this.tokenChar(33); +} +function TSExportAssignment(node) { + this.word("export"); + this.space(); + this.tokenChar(61); + this.space(); + this.print(node.expression); + this.semicolon(); +} +function TSNamespaceExportDeclaration(node) { + this.word("export"); + this.space(); + this.word("as"); + this.space(); + this.word("namespace"); + this.space(); + this.print(node.id); + this.semicolon(); +} +function tsPrintSignatureDeclarationBase(node) { + const { + typeParameters + } = node; + const parameters = node.parameters; + this.print(typeParameters); + this.tokenChar(40); + this._parameters(parameters, ")"); + const returnType = node.typeAnnotation; + this.print(returnType); +} +function tsPrintClassMemberModifiers(node) { + const isPrivateField = node.type === "ClassPrivateProperty"; + const isPublicField = node.type === "ClassAccessorProperty" || node.type === "ClassProperty"; + printModifiersList(this, node, [isPublicField && node.declare && "declare", !isPrivateField && node.accessibility]); + if (node.static) { + this.word("static"); + this.space(); + } + printModifiersList(this, node, [!isPrivateField && node.abstract && "abstract", !isPrivateField && node.override && "override", (isPublicField || isPrivateField) && node.readonly && "readonly"]); +} +function printBraced(printer, node, cb) { + printer.token("{"); + const exit = printer.enterDelimited(); + cb(); + exit(); + printer.rightBrace(node); +} +function printModifiersList(printer, node, modifiers) { + var _printer$tokenMap2; + const modifiersSet = new Set(); + for (const modifier of modifiers) { + if (modifier) modifiersSet.add(modifier); + } + (_printer$tokenMap2 = printer.tokenMap) == null || _printer$tokenMap2.find(node, tok => { + if (modifiersSet.has(tok.value)) { + printer.token(tok.value); + printer.space(); + modifiersSet.delete(tok.value); + return modifiersSet.size === 0; + } + }); + for (const modifier of modifiersSet) { + printer.word(modifier); + printer.space(); + } +} + +//# sourceMappingURL=typescript.js.map diff --git a/node_modules/@babel/generator/lib/generators/typescript.js.map b/node_modules/@babel/generator/lib/generators/typescript.js.map new file mode 100644 index 00000000..81caf47b --- /dev/null +++ b/node_modules/@babel/generator/lib/generators/typescript.js.map @@ -0,0 +1 @@ +{"version":3,"names":["TSTypeAnnotation","node","parent","token","type","typeAnnotation","space","optional","print","TSTypeParameterInstantiation","printTrailingSeparator","params","length","tokenMap","start","end","find","t","matchesOriginal","shouldPrintTrailingComma","printList","TSTypeParameter","const","word","in","out","name","constraint","default","TSParameterProperty","accessibility","readonly","_param","parameter","TSDeclareFunction","declare","_functionHead","semicolon","TSDeclareMethod","_classMethodHead","TSQualifiedName","left","right","TSCallSignatureDeclaration","tsPrintSignatureDeclarationBase","maybePrintTrailingCommaOrSemicolon","printer","endMatches","TSConstructSignatureDeclaration","TSPropertySignature","tsPrintPropertyOrMethodName","computed","key","TSMethodSignature","kind","TSIndexSignature","static","isStatic","_parameters","parameters","TSAnyKeyword","TSBigIntKeyword","TSUnknownKeyword","TSNumberKeyword","TSObjectKeyword","TSBooleanKeyword","TSStringKeyword","TSSymbolKeyword","TSVoidKeyword","TSUndefinedKeyword","TSNullKeyword","TSNeverKeyword","TSIntrinsicKeyword","TSThisType","TSFunctionType","tsPrintFunctionOrConstructorType","TSConstructorType","abstract","typeParameters","returnType","TSTypeReference","typeArguments","typeName","TSTypePredicate","asserts","parameterName","TSTypeQuery","exprName","TSTypeLiteral","printBraced","printJoin","members","TSArrayType","elementType","TSTupleType","elementTypes","TSOptionalType","TSRestType","TSNamedTupleMember","label","TSUnionType","tsPrintUnionOrIntersectionType","TSIntersectionType","sep","_printer$tokenMap","hasLeadingToken","startMatches","types","undefined","i","TSConditionalType","checkType","extendsType","trueType","falseType","TSInferType","typeParameter","TSParenthesizedType","TSTypeOperator","operator","TSIndexedAccessType","objectType","indexType","TSMappedType","nameType","exit","enterDelimited","tokenIfPlusMinus","self","tok","TSTemplateLiteralType","_printTemplate","TSLiteralType","literal","TSClassImplements","expression","TSInterfaceDeclaration","id","extends","extendz","body","TSInterfaceBody","TSTypeAliasDeclaration","TSTypeExpression","TSTypeAssertion","TSInstantiationExpression","TSEnumDeclaration","isConst","TSEnumBody","call","_this$shouldPrintTrai","TSEnumMember","initializer","TSModuleDeclaration","global","TSModuleBlock","printSequence","TSImportType","argument","qualifier","options","TSImportEqualsDeclaration","moduleReference","isExport","TSExternalModuleReference","TSNonNullExpression","TSExportAssignment","TSNamespaceExportDeclaration","tsPrintClassMemberModifiers","isPrivateField","isPublicField","printModifiersList","override","cb","rightBrace","modifiers","_printer$tokenMap2","modifiersSet","Set","modifier","add","has","value","delete","size"],"sources":["../../src/generators/typescript.ts"],"sourcesContent":["import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\n\nexport function TSTypeAnnotation(\n this: Printer,\n node: t.TSTypeAnnotation,\n parent: t.Node,\n) {\n // TODO(@nicolo-ribaudo): investigate not including => in the range\n // of the return type of an arrow function type\n this.token(\n (parent.type === \"TSFunctionType\" || parent.type === \"TSConstructorType\") &&\n (process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST shape\n parent.returnType\n : // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n parent.typeAnnotation) === node\n ? \"=>\"\n : \":\",\n );\n this.space();\n // @ts-expect-error todo(flow->ts) can this be removed? `.optional` looks to be not existing property\n if (node.optional) this.token(\"?\");\n this.print(node.typeAnnotation);\n}\n\nexport function TSTypeParameterInstantiation(\n this: Printer,\n node: t.TSTypeParameterInstantiation,\n parent: t.Node,\n): void {\n this.token(\"<\");\n\n let printTrailingSeparator =\n parent.type === \"ArrowFunctionExpression\" && node.params.length === 1;\n if (this.tokenMap && node.start != null && node.end != null) {\n // Only force the trailing comma for pre-existing nodes if they\n // already had a comma (either because they were multi-param, or\n // because they had a trailing comma)\n printTrailingSeparator &&= !!this.tokenMap.find(node, t =>\n this.tokenMap.matchesOriginal(t, \",\"),\n );\n // Preserve the trailing comma if it was there before\n printTrailingSeparator ||= this.shouldPrintTrailingComma(\">\");\n }\n\n this.printList(node.params, printTrailingSeparator);\n this.token(\">\");\n}\n\nexport { TSTypeParameterInstantiation as TSTypeParameterDeclaration };\n\nexport function TSTypeParameter(this: Printer, node: t.TSTypeParameter) {\n if (node.const) {\n this.word(\"const\");\n this.space();\n }\n\n if (node.in) {\n this.word(\"in\");\n this.space();\n }\n\n if (node.out) {\n this.word(\"out\");\n this.space();\n }\n\n this.word(\n !process.env.BABEL_8_BREAKING\n ? (node.name as unknown as string)\n : (node.name as unknown as t.Identifier).name,\n );\n\n if (node.constraint) {\n this.space();\n this.word(\"extends\");\n this.space();\n this.print(node.constraint);\n }\n\n if (node.default) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.default);\n }\n}\n\nexport function TSParameterProperty(\n this: Printer,\n node: t.TSParameterProperty,\n) {\n if (node.accessibility) {\n this.word(node.accessibility);\n this.space();\n }\n\n if (node.readonly) {\n this.word(\"readonly\");\n this.space();\n }\n\n this._param(node.parameter);\n}\n\nexport function TSDeclareFunction(\n this: Printer,\n node: t.TSDeclareFunction,\n parent: t.ParentMaps[\"TSDeclareFunction\"],\n) {\n if (node.declare) {\n this.word(\"declare\");\n this.space();\n }\n this._functionHead(node, parent);\n this.semicolon();\n}\n\nexport function TSDeclareMethod(this: Printer, node: t.TSDeclareMethod) {\n this._classMethodHead(node);\n this.semicolon();\n}\n\nexport function TSQualifiedName(this: Printer, node: t.TSQualifiedName) {\n this.print(node.left);\n this.token(\".\");\n this.print(node.right);\n}\n\nexport function TSCallSignatureDeclaration(\n this: Printer,\n node: t.TSCallSignatureDeclaration,\n) {\n this.tsPrintSignatureDeclarationBase(node);\n maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nfunction maybePrintTrailingCommaOrSemicolon(printer: Printer, node: t.Node) {\n if (!printer.tokenMap || !node.start || !node.end) {\n printer.semicolon();\n return;\n }\n\n if (printer.tokenMap.endMatches(node, \",\")) {\n printer.token(\",\");\n } else if (printer.tokenMap.endMatches(node, \";\")) {\n printer.semicolon();\n }\n}\n\nexport function TSConstructSignatureDeclaration(\n this: Printer,\n node: t.TSConstructSignatureDeclaration,\n) {\n this.word(\"new\");\n this.space();\n this.tsPrintSignatureDeclarationBase(node);\n maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nexport function TSPropertySignature(\n this: Printer,\n node: t.TSPropertySignature,\n) {\n const { readonly } = node;\n if (readonly) {\n this.word(\"readonly\");\n this.space();\n }\n this.tsPrintPropertyOrMethodName(node);\n this.print(node.typeAnnotation);\n maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nexport function tsPrintPropertyOrMethodName(\n this: Printer,\n node: t.TSPropertySignature | t.TSMethodSignature,\n) {\n if (node.computed) {\n this.token(\"[\");\n }\n this.print(node.key);\n if (node.computed) {\n this.token(\"]\");\n }\n if (node.optional) {\n this.token(\"?\");\n }\n}\n\nexport function TSMethodSignature(this: Printer, node: t.TSMethodSignature) {\n const { kind } = node;\n if (kind === \"set\" || kind === \"get\") {\n this.word(kind);\n this.space();\n }\n this.tsPrintPropertyOrMethodName(node);\n this.tsPrintSignatureDeclarationBase(node);\n maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nexport function TSIndexSignature(this: Printer, node: t.TSIndexSignature) {\n const { readonly, static: isStatic } = node;\n if (isStatic) {\n this.word(\"static\");\n this.space();\n }\n if (readonly) {\n this.word(\"readonly\");\n this.space();\n }\n this.token(\"[\");\n this._parameters(node.parameters, \"]\");\n this.print(node.typeAnnotation);\n maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nexport function TSAnyKeyword(this: Printer) {\n this.word(\"any\");\n}\nexport function TSBigIntKeyword(this: Printer) {\n this.word(\"bigint\");\n}\nexport function TSUnknownKeyword(this: Printer) {\n this.word(\"unknown\");\n}\nexport function TSNumberKeyword(this: Printer) {\n this.word(\"number\");\n}\nexport function TSObjectKeyword(this: Printer) {\n this.word(\"object\");\n}\nexport function TSBooleanKeyword(this: Printer) {\n this.word(\"boolean\");\n}\nexport function TSStringKeyword(this: Printer) {\n this.word(\"string\");\n}\nexport function TSSymbolKeyword(this: Printer) {\n this.word(\"symbol\");\n}\nexport function TSVoidKeyword(this: Printer) {\n this.word(\"void\");\n}\nexport function TSUndefinedKeyword(this: Printer) {\n this.word(\"undefined\");\n}\nexport function TSNullKeyword(this: Printer) {\n this.word(\"null\");\n}\nexport function TSNeverKeyword(this: Printer) {\n this.word(\"never\");\n}\nexport function TSIntrinsicKeyword(this: Printer) {\n this.word(\"intrinsic\");\n}\n\nexport function TSThisType(this: Printer) {\n this.word(\"this\");\n}\n\nexport function TSFunctionType(this: Printer, node: t.TSFunctionType) {\n this.tsPrintFunctionOrConstructorType(node);\n}\n\nexport function TSConstructorType(this: Printer, node: t.TSConstructorType) {\n if (node.abstract) {\n this.word(\"abstract\");\n this.space();\n }\n this.word(\"new\");\n this.space();\n this.tsPrintFunctionOrConstructorType(node);\n}\n\nexport function tsPrintFunctionOrConstructorType(\n this: Printer,\n node: t.TSFunctionType | t.TSConstructorType,\n) {\n const { typeParameters } = node;\n const parameters = process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST shape\n node.params\n : // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n node.parameters;\n this.print(typeParameters);\n this.token(\"(\");\n this._parameters(parameters, \")\");\n this.space();\n const returnType = process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST shape\n node.returnType\n : // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n node.typeAnnotation;\n this.print(returnType);\n}\n\nexport function TSTypeReference(this: Printer, node: t.TSTypeReference) {\n const typeArguments = process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST shape\n node.typeArguments\n : // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n node.typeParameters;\n this.print(node.typeName, !!typeArguments);\n this.print(typeArguments);\n}\n\nexport function TSTypePredicate(this: Printer, node: t.TSTypePredicate) {\n if (node.asserts) {\n this.word(\"asserts\");\n this.space();\n }\n this.print(node.parameterName);\n if (node.typeAnnotation) {\n this.space();\n this.word(\"is\");\n this.space();\n this.print(node.typeAnnotation.typeAnnotation);\n }\n}\n\nexport function TSTypeQuery(this: Printer, node: t.TSTypeQuery) {\n this.word(\"typeof\");\n this.space();\n this.print(node.exprName);\n\n const typeArguments = process.env.BABEL_8_BREAKING\n ? //@ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n node.typeArguments\n : //@ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n node.typeParameters;\n if (typeArguments) {\n this.print(typeArguments);\n }\n}\n\nexport function TSTypeLiteral(this: Printer, node: t.TSTypeLiteral) {\n printBraced(this, node, () => this.printJoin(node.members, true, true));\n}\n\nexport function TSArrayType(this: Printer, node: t.TSArrayType) {\n this.print(node.elementType, true);\n\n this.token(\"[\");\n this.token(\"]\");\n}\n\nexport function TSTupleType(this: Printer, node: t.TSTupleType) {\n this.token(\"[\");\n this.printList(node.elementTypes, this.shouldPrintTrailingComma(\"]\"));\n this.token(\"]\");\n}\n\nexport function TSOptionalType(this: Printer, node: t.TSOptionalType) {\n this.print(node.typeAnnotation);\n this.token(\"?\");\n}\n\nexport function TSRestType(this: Printer, node: t.TSRestType) {\n this.token(\"...\");\n this.print(node.typeAnnotation);\n}\n\nexport function TSNamedTupleMember(this: Printer, node: t.TSNamedTupleMember) {\n this.print(node.label);\n if (node.optional) this.token(\"?\");\n this.token(\":\");\n this.space();\n this.print(node.elementType);\n}\n\nexport function TSUnionType(this: Printer, node: t.TSUnionType) {\n tsPrintUnionOrIntersectionType(this, node, \"|\");\n}\n\nexport function TSIntersectionType(this: Printer, node: t.TSIntersectionType) {\n tsPrintUnionOrIntersectionType(this, node, \"&\");\n}\n\nfunction tsPrintUnionOrIntersectionType(\n printer: Printer,\n node: t.TSUnionType | t.TSIntersectionType,\n sep: \"|\" | \"&\",\n) {\n let hasLeadingToken = 0;\n if (printer.tokenMap?.startMatches(node, sep)) {\n hasLeadingToken = 1;\n printer.token(sep);\n }\n\n printer.printJoin(node.types, undefined, undefined, function (i) {\n this.space();\n this.token(sep, null, i + hasLeadingToken);\n this.space();\n });\n}\n\nexport function TSConditionalType(this: Printer, node: t.TSConditionalType) {\n this.print(node.checkType);\n this.space();\n this.word(\"extends\");\n this.space();\n this.print(node.extendsType);\n this.space();\n this.token(\"?\");\n this.space();\n this.print(node.trueType);\n this.space();\n this.token(\":\");\n this.space();\n this.print(node.falseType);\n}\n\nexport function TSInferType(this: Printer, node: t.TSInferType) {\n this.word(\"infer\");\n this.print(node.typeParameter);\n}\n\nexport function TSParenthesizedType(\n this: Printer,\n node: t.TSParenthesizedType,\n) {\n this.token(\"(\");\n this.print(node.typeAnnotation);\n this.token(\")\");\n}\n\nexport function TSTypeOperator(this: Printer, node: t.TSTypeOperator) {\n this.word(node.operator);\n this.space();\n this.print(node.typeAnnotation);\n}\n\nexport function TSIndexedAccessType(\n this: Printer,\n node: t.TSIndexedAccessType,\n) {\n this.print(node.objectType, true);\n this.token(\"[\");\n this.print(node.indexType);\n this.token(\"]\");\n}\n\nexport function TSMappedType(this: Printer, node: t.TSMappedType) {\n const { nameType, optional, readonly, typeAnnotation } = node;\n this.token(\"{\");\n const exit = this.enterDelimited();\n this.space();\n if (readonly) {\n tokenIfPlusMinus(this, readonly);\n this.word(\"readonly\");\n this.space();\n }\n\n this.token(\"[\");\n if (process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST shape\n this.word(node.key.name);\n } else {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n this.word(node.typeParameter.name);\n }\n\n this.space();\n this.word(\"in\");\n this.space();\n if (process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST shape\n this.print(node.constraint);\n } else {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n this.print(node.typeParameter.constraint);\n }\n\n if (nameType) {\n this.space();\n this.word(\"as\");\n this.space();\n this.print(nameType);\n }\n\n this.token(\"]\");\n\n if (optional) {\n tokenIfPlusMinus(this, optional);\n this.token(\"?\");\n }\n\n if (typeAnnotation) {\n this.token(\":\");\n this.space();\n this.print(typeAnnotation);\n }\n this.space();\n exit();\n this.token(\"}\");\n}\n\nfunction tokenIfPlusMinus(self: Printer, tok: true | \"+\" | \"-\") {\n if (tok !== true) {\n self.token(tok);\n }\n}\n\nexport function TSTemplateLiteralType(\n this: Printer,\n node: t.TSTemplateLiteralType,\n) {\n this._printTemplate(node, node.types);\n}\n\nexport function TSLiteralType(this: Printer, node: t.TSLiteralType) {\n this.print(node.literal);\n}\n\nexport function TSClassImplements(\n this: Printer,\n // TODO(Babel 8): Just use t.TSClassImplements\n node: t.Node & {\n expression: t.TSEntityName;\n typeArguments?: t.TSTypeParameterInstantiation;\n },\n) {\n this.print(node.expression);\n this.print(node.typeArguments);\n}\n\nexport { TSClassImplements as TSInterfaceHeritage };\n\nexport function TSInterfaceDeclaration(\n this: Printer,\n node: t.TSInterfaceDeclaration,\n) {\n const { declare, id, typeParameters, extends: extendz, body } = node;\n if (declare) {\n this.word(\"declare\");\n this.space();\n }\n this.word(\"interface\");\n this.space();\n this.print(id);\n this.print(typeParameters);\n if (extendz?.length) {\n this.space();\n this.word(\"extends\");\n this.space();\n this.printList(extendz);\n }\n this.space();\n this.print(body);\n}\n\nexport function TSInterfaceBody(this: Printer, node: t.TSInterfaceBody) {\n printBraced(this, node, () => this.printJoin(node.body, true, true));\n}\n\nexport function TSTypeAliasDeclaration(\n this: Printer,\n node: t.TSTypeAliasDeclaration,\n) {\n const { declare, id, typeParameters, typeAnnotation } = node;\n if (declare) {\n this.word(\"declare\");\n this.space();\n }\n this.word(\"type\");\n this.space();\n this.print(id);\n this.print(typeParameters);\n this.space();\n this.token(\"=\");\n this.space();\n this.print(typeAnnotation);\n this.semicolon();\n}\n\nfunction TSTypeExpression(\n this: Printer,\n node: t.TSAsExpression | t.TSSatisfiesExpression,\n) {\n const { type, expression, typeAnnotation } = node;\n this.print(expression, true);\n this.space();\n this.word(type === \"TSAsExpression\" ? \"as\" : \"satisfies\");\n this.space();\n this.print(typeAnnotation);\n}\n\nexport {\n TSTypeExpression as TSAsExpression,\n TSTypeExpression as TSSatisfiesExpression,\n};\n\nexport function TSTypeAssertion(this: Printer, node: t.TSTypeAssertion) {\n const { typeAnnotation, expression } = node;\n this.token(\"<\");\n this.print(typeAnnotation);\n this.token(\">\");\n this.space();\n this.print(expression);\n}\n\nexport function TSInstantiationExpression(\n this: Printer,\n node: t.TSInstantiationExpression,\n) {\n this.print(node.expression);\n if (process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n this.print(node.typeArguments);\n } else {\n // @ts-ignore(Babel 7 vs Babel 8) Removed in Babel 8\n this.print(node.typeParameters);\n }\n}\n\nexport function TSEnumDeclaration(this: Printer, node: t.TSEnumDeclaration) {\n const { declare, const: isConst, id } = node;\n if (declare) {\n this.word(\"declare\");\n this.space();\n }\n if (isConst) {\n this.word(\"const\");\n this.space();\n }\n this.word(\"enum\");\n this.space();\n this.print(id);\n this.space();\n\n if (process.env.BABEL_8_BREAKING) {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n this.print(node.body);\n } else {\n // cast to TSEnumBody for Babel 7 AST\n TSEnumBody.call(this, node as unknown as t.TSEnumBody);\n }\n}\n\nexport function TSEnumBody(this: Printer, node: t.TSEnumBody) {\n printBraced(this, node, () =>\n this.printList(\n node.members,\n this.shouldPrintTrailingComma(\"}\") ??\n (process.env.BABEL_8_BREAKING ? false : true),\n true,\n true,\n ),\n );\n}\n\nexport function TSEnumMember(this: Printer, node: t.TSEnumMember) {\n const { id, initializer } = node;\n this.print(id);\n if (initializer) {\n this.space();\n this.token(\"=\");\n this.space();\n this.print(initializer);\n }\n}\n\nexport function TSModuleDeclaration(\n this: Printer,\n node: t.TSModuleDeclaration,\n) {\n const { declare, id, kind } = node;\n\n if (declare) {\n this.word(\"declare\");\n this.space();\n }\n\n if (process.env.BABEL_8_BREAKING) {\n if (kind !== \"global\") {\n this.word(kind);\n this.space();\n }\n\n this.print(node.id);\n if (!node.body) {\n this.semicolon();\n return;\n }\n this.space();\n this.print(node.body);\n } else {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n if (!node.global) {\n this.word(kind ?? (id.type === \"Identifier\" ? \"namespace\" : \"module\"));\n this.space();\n }\n\n this.print(id);\n\n if (!node.body) {\n this.semicolon();\n return;\n }\n\n let body = node.body;\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n while (body.type === \"TSModuleDeclaration\") {\n this.token(\".\");\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n this.print(body.id);\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST shape\n body = body.body;\n }\n\n this.space();\n this.print(body);\n }\n}\n\nexport function TSModuleBlock(this: Printer, node: t.TSModuleBlock) {\n printBraced(this, node, () => this.printSequence(node.body, true));\n}\n\nexport function TSImportType(this: Printer, node: t.TSImportType) {\n const { argument, qualifier, options } = node;\n this.word(\"import\");\n this.token(\"(\");\n this.print(argument);\n if (options) {\n this.token(\",\");\n this.print(options);\n }\n this.token(\")\");\n if (qualifier) {\n this.token(\".\");\n this.print(qualifier);\n }\n const typeArguments = process.env.BABEL_8_BREAKING\n ? //@ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n node.typeArguments\n : //@ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n node.typeParameters;\n if (typeArguments) {\n this.print(typeArguments);\n }\n}\n\nexport function TSImportEqualsDeclaration(\n this: Printer,\n node: t.TSImportEqualsDeclaration,\n) {\n const { id, moduleReference } = node;\n if (\n !process.env.BABEL_8_BREAKING &&\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n node.isExport\n ) {\n this.word(\"export\");\n this.space();\n }\n this.word(\"import\");\n this.space();\n this.print(id);\n this.space();\n this.token(\"=\");\n this.space();\n this.print(moduleReference);\n this.semicolon();\n}\n\nexport function TSExternalModuleReference(\n this: Printer,\n node: t.TSExternalModuleReference,\n) {\n this.token(\"require(\");\n this.print(node.expression);\n this.token(\")\");\n}\n\nexport function TSNonNullExpression(\n this: Printer,\n node: t.TSNonNullExpression,\n) {\n this.print(node.expression);\n this.token(\"!\");\n}\n\nexport function TSExportAssignment(this: Printer, node: t.TSExportAssignment) {\n this.word(\"export\");\n this.space();\n this.token(\"=\");\n this.space();\n this.print(node.expression);\n this.semicolon();\n}\n\nexport function TSNamespaceExportDeclaration(\n this: Printer,\n node: t.TSNamespaceExportDeclaration,\n) {\n this.word(\"export\");\n this.space();\n this.word(\"as\");\n this.space();\n this.word(\"namespace\");\n this.space();\n this.print(node.id);\n this.semicolon();\n}\n\nexport function tsPrintSignatureDeclarationBase(this: Printer, node: any) {\n const { typeParameters } = node;\n const parameters = process.env.BABEL_8_BREAKING\n ? node.params\n : node.parameters;\n this.print(typeParameters);\n this.token(\"(\");\n this._parameters(parameters, \")\");\n const returnType = process.env.BABEL_8_BREAKING\n ? node.returnType\n : node.typeAnnotation;\n this.print(returnType);\n}\n\nexport function tsPrintClassMemberModifiers(\n this: Printer,\n node:\n | t.ClassProperty\n | t.ClassAccessorProperty\n | t.ClassPrivateProperty\n | t.ClassMethod\n | t.ClassPrivateMethod\n | t.TSDeclareMethod,\n) {\n const isPrivateField = node.type === \"ClassPrivateProperty\";\n const isPublicField =\n node.type === \"ClassAccessorProperty\" || node.type === \"ClassProperty\";\n printModifiersList(this, node, [\n isPublicField && node.declare && \"declare\",\n !isPrivateField && node.accessibility,\n ]);\n if (node.static) {\n this.word(\"static\");\n this.space();\n }\n printModifiersList(this, node, [\n !isPrivateField && node.abstract && \"abstract\",\n !isPrivateField && node.override && \"override\",\n (isPublicField || isPrivateField) && node.readonly && \"readonly\",\n ]);\n}\n\nfunction printBraced(printer: Printer, node: t.Node, cb: () => void) {\n printer.token(\"{\");\n const exit = printer.enterDelimited();\n cb();\n exit();\n printer.rightBrace(node);\n}\n\nfunction printModifiersList(\n printer: Printer,\n node: t.Node,\n modifiers: (string | false | null)[],\n) {\n const modifiersSet = new Set();\n for (const modifier of modifiers) {\n if (modifier) modifiersSet.add(modifier);\n }\n\n printer.tokenMap?.find(node, tok => {\n if (modifiersSet.has(tok.value)) {\n printer.token(tok.value);\n printer.space();\n modifiersSet.delete(tok.value);\n return modifiersSet.size === 0;\n }\n });\n\n for (const modifier of modifiersSet) {\n printer.word(modifier);\n printer.space();\n }\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/generator/lib/index.js b/node_modules/@babel/generator/lib/index.js new file mode 100644 index 00000000..9ee293a1 --- /dev/null +++ b/node_modules/@babel/generator/lib/index.js @@ -0,0 +1,112 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +exports.generate = generate; +var _sourceMap = require("./source-map.js"); +var _printer = require("./printer.js"); +function normalizeOptions(code, opts, ast) { + if (opts.experimental_preserveFormat) { + if (typeof code !== "string") { + throw new Error("`experimental_preserveFormat` requires the original `code` to be passed to @babel/generator as a string"); + } + if (!opts.retainLines) { + throw new Error("`experimental_preserveFormat` requires `retainLines` to be set to `true`"); + } + if (opts.compact && opts.compact !== "auto") { + throw new Error("`experimental_preserveFormat` is not compatible with the `compact` option"); + } + if (opts.minified) { + throw new Error("`experimental_preserveFormat` is not compatible with the `minified` option"); + } + if (opts.jsescOption) { + throw new Error("`experimental_preserveFormat` is not compatible with the `jsescOption` option"); + } + if (!Array.isArray(ast.tokens)) { + throw new Error("`experimental_preserveFormat` requires the AST to have attatched the token of the input code. Make sure to enable the `tokens: true` parser option."); + } + } + const format = { + auxiliaryCommentBefore: opts.auxiliaryCommentBefore, + auxiliaryCommentAfter: opts.auxiliaryCommentAfter, + shouldPrintComment: opts.shouldPrintComment, + preserveFormat: opts.experimental_preserveFormat, + retainLines: opts.retainLines, + retainFunctionParens: opts.retainFunctionParens, + comments: opts.comments == null || opts.comments, + compact: opts.compact, + minified: opts.minified, + concise: opts.concise, + indent: { + adjustMultilineComment: true, + style: " " + }, + jsescOption: Object.assign({ + quotes: "double", + wrap: true, + minimal: false + }, opts.jsescOption), + topicToken: opts.topicToken, + importAttributesKeyword: opts.importAttributesKeyword + }; + { + var _opts$recordAndTupleS; + format.decoratorsBeforeExport = opts.decoratorsBeforeExport; + format.jsescOption.json = opts.jsonCompatibleStrings; + format.recordAndTupleSyntaxType = (_opts$recordAndTupleS = opts.recordAndTupleSyntaxType) != null ? _opts$recordAndTupleS : "hash"; + } + if (format.minified) { + format.compact = true; + format.shouldPrintComment = format.shouldPrintComment || (() => format.comments); + } else { + format.shouldPrintComment = format.shouldPrintComment || (value => format.comments || value.includes("@license") || value.includes("@preserve")); + } + if (format.compact === "auto") { + format.compact = typeof code === "string" && code.length > 500000; + if (format.compact) { + console.error("[BABEL] Note: The code generator has deoptimised the styling of " + `${opts.filename} as it exceeds the max of ${"500KB"}.`); + } + } + if (format.compact || format.preserveFormat) { + format.indent.adjustMultilineComment = false; + } + const { + auxiliaryCommentBefore, + auxiliaryCommentAfter, + shouldPrintComment + } = format; + if (auxiliaryCommentBefore && !shouldPrintComment(auxiliaryCommentBefore)) { + format.auxiliaryCommentBefore = undefined; + } + if (auxiliaryCommentAfter && !shouldPrintComment(auxiliaryCommentAfter)) { + format.auxiliaryCommentAfter = undefined; + } + return format; +} +{ + exports.CodeGenerator = class CodeGenerator { + constructor(ast, opts = {}, code) { + this._ast = void 0; + this._format = void 0; + this._map = void 0; + this._ast = ast; + this._format = normalizeOptions(code, opts, ast); + this._map = opts.sourceMaps ? new _sourceMap.default(opts, code) : null; + } + generate() { + const printer = new _printer.default(this._format, this._map); + return printer.generate(this._ast); + } + }; +} +function generate(ast, opts = {}, code) { + const format = normalizeOptions(code, opts, ast); + const map = opts.sourceMaps ? new _sourceMap.default(opts, code) : null; + const printer = new _printer.default(format, map, ast.tokens, typeof code === "string" ? code : null); + return printer.generate(ast); +} +var _default = exports.default = generate; + +//# sourceMappingURL=index.js.map diff --git a/node_modules/@babel/generator/lib/index.js.map b/node_modules/@babel/generator/lib/index.js.map new file mode 100644 index 00000000..86913adb --- /dev/null +++ b/node_modules/@babel/generator/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_sourceMap","require","_printer","normalizeOptions","code","opts","ast","experimental_preserveFormat","Error","retainLines","compact","minified","jsescOption","Array","isArray","tokens","format","auxiliaryCommentBefore","auxiliaryCommentAfter","shouldPrintComment","preserveFormat","retainFunctionParens","comments","concise","indent","adjustMultilineComment","style","Object","assign","quotes","wrap","minimal","topicToken","importAttributesKeyword","_opts$recordAndTupleS","decoratorsBeforeExport","json","jsonCompatibleStrings","recordAndTupleSyntaxType","value","includes","length","console","error","filename","undefined","exports","CodeGenerator","constructor","_ast","_format","_map","sourceMaps","SourceMap","generate","printer","Printer","map","_default","default"],"sources":["../src/index.ts"],"sourcesContent":["import SourceMap from \"./source-map.ts\";\nimport Printer from \"./printer.ts\";\nimport type * as t from \"@babel/types\";\nimport type { Opts as jsescOptions } from \"jsesc\";\nimport type { Format } from \"./printer.ts\";\nimport type {\n EncodedSourceMap,\n DecodedSourceMap,\n Mapping,\n} from \"@jridgewell/gen-mapping\";\n\n/**\n * Normalize generator options, setting defaults.\n *\n * - Detects code indentation.\n * - If `opts.compact = \"auto\"` and the code is over 500KB, `compact` will be set to `true`.\n */\n\nfunction normalizeOptions(\n code: string | { [filename: string]: string },\n opts: GeneratorOptions,\n ast: t.Node,\n): Format {\n if (opts.experimental_preserveFormat) {\n if (typeof code !== \"string\") {\n throw new Error(\n \"`experimental_preserveFormat` requires the original `code` to be passed to @babel/generator as a string\",\n );\n }\n if (!opts.retainLines) {\n throw new Error(\n \"`experimental_preserveFormat` requires `retainLines` to be set to `true`\",\n );\n }\n if (opts.compact && opts.compact !== \"auto\") {\n throw new Error(\n \"`experimental_preserveFormat` is not compatible with the `compact` option\",\n );\n }\n if (opts.minified) {\n throw new Error(\n \"`experimental_preserveFormat` is not compatible with the `minified` option\",\n );\n }\n if (opts.jsescOption) {\n throw new Error(\n \"`experimental_preserveFormat` is not compatible with the `jsescOption` option\",\n );\n }\n if (!Array.isArray((ast as any).tokens)) {\n throw new Error(\n \"`experimental_preserveFormat` requires the AST to have attatched the token of the input code. Make sure to enable the `tokens: true` parser option.\",\n );\n }\n }\n\n const format: Format = {\n auxiliaryCommentBefore: opts.auxiliaryCommentBefore,\n auxiliaryCommentAfter: opts.auxiliaryCommentAfter,\n shouldPrintComment: opts.shouldPrintComment,\n preserveFormat: opts.experimental_preserveFormat,\n retainLines: opts.retainLines,\n retainFunctionParens: opts.retainFunctionParens,\n comments: opts.comments == null || opts.comments,\n compact: opts.compact,\n minified: opts.minified,\n concise: opts.concise,\n indent: {\n adjustMultilineComment: true,\n style: \" \",\n },\n jsescOption: {\n quotes: \"double\",\n wrap: true,\n minimal: process.env.BABEL_8_BREAKING ? true : false,\n ...opts.jsescOption,\n },\n topicToken: opts.topicToken,\n importAttributesKeyword: opts.importAttributesKeyword,\n };\n\n if (!process.env.BABEL_8_BREAKING) {\n format.decoratorsBeforeExport = opts.decoratorsBeforeExport;\n format.jsescOption.json = opts.jsonCompatibleStrings;\n format.recordAndTupleSyntaxType = opts.recordAndTupleSyntaxType ?? \"hash\";\n }\n\n if (format.minified) {\n format.compact = true;\n\n format.shouldPrintComment =\n format.shouldPrintComment || (() => format.comments);\n } else {\n format.shouldPrintComment =\n format.shouldPrintComment ||\n (value =>\n format.comments ||\n value.includes(\"@license\") ||\n value.includes(\"@preserve\"));\n }\n\n if (format.compact === \"auto\") {\n format.compact = typeof code === \"string\" && code.length > 500_000; // 500KB\n\n if (format.compact) {\n console.error(\n \"[BABEL] Note: The code generator has deoptimised the styling of \" +\n `${opts.filename} as it exceeds the max of ${\"500KB\"}.`,\n );\n }\n }\n\n if (format.compact || format.preserveFormat) {\n format.indent.adjustMultilineComment = false;\n }\n\n const { auxiliaryCommentBefore, auxiliaryCommentAfter, shouldPrintComment } =\n format;\n\n if (auxiliaryCommentBefore && !shouldPrintComment(auxiliaryCommentBefore)) {\n format.auxiliaryCommentBefore = undefined;\n }\n if (auxiliaryCommentAfter && !shouldPrintComment(auxiliaryCommentAfter)) {\n format.auxiliaryCommentAfter = undefined;\n }\n\n return format;\n}\n\nexport interface GeneratorOptions {\n /**\n * Optional string to add as a block comment at the start of the output file.\n */\n auxiliaryCommentBefore?: string;\n\n /**\n * Optional string to add as a block comment at the end of the output file.\n */\n auxiliaryCommentAfter?: string;\n\n /**\n * Function that takes a comment (as a string) and returns true if the comment should be included in the output.\n * By default, comments are included if `opts.comments` is `true` or if `opts.minified` is `false` and the comment\n * contains `@preserve` or `@license`.\n */\n shouldPrintComment?(comment: string): boolean;\n\n /**\n * Preserve the input code format while printing the transformed code.\n * This is experimental, and may have breaking changes in future\n * patch releases. It will be removed in a future minor release,\n * when it will graduate to stable.\n */\n experimental_preserveFormat?: boolean;\n\n /**\n * Attempt to use the same line numbers in the output code as in the source code (helps preserve stack traces).\n * Defaults to `false`.\n */\n retainLines?: boolean;\n\n /**\n * Retain parens around function expressions (could be used to change engine parsing behavior)\n * Defaults to `false`.\n */\n retainFunctionParens?: boolean;\n\n /**\n * Should comments be included in output? Defaults to `true`.\n */\n comments?: boolean;\n\n /**\n * Set to true to avoid adding whitespace for formatting. Defaults to the value of `opts.minified`.\n */\n compact?: boolean | \"auto\";\n\n /**\n * Should the output be minified. Defaults to `false`.\n */\n minified?: boolean;\n\n /**\n * Set to true to reduce whitespace (but not as much as opts.compact). Defaults to `false`.\n */\n concise?: boolean;\n\n /**\n * Used in warning messages\n */\n filename?: string;\n\n /**\n * Enable generating source maps. Defaults to `false`.\n */\n sourceMaps?: boolean;\n\n inputSourceMap?: any;\n\n /**\n * A root for all relative URLs in the source map.\n */\n sourceRoot?: string;\n\n /**\n * The filename for the source code (i.e. the code in the `code` argument).\n * This will only be used if `code` is a string.\n */\n sourceFileName?: string;\n\n /**\n * Set to true to run jsesc with \"json\": true to print \"\\u00A9\" vs. \"©\";\n * @deprecated use `jsescOptions: { json: true }` instead\n */\n jsonCompatibleStrings?: boolean;\n\n /**\n * Set to true to enable support for experimental decorators syntax before\n * module exports. If not specified, decorators will be printed in the same\n * position as they were in the input source code.\n * @deprecated Removed in Babel 8\n */\n decoratorsBeforeExport?: boolean;\n\n /**\n * Options for outputting jsesc representation.\n */\n jsescOption?: jsescOptions;\n\n /**\n * For use with the recordAndTuple token.\n * @deprecated It will be removed in Babel 8.\n */\n recordAndTupleSyntaxType?: \"bar\" | \"hash\";\n\n /**\n * For use with the Hack-style pipe operator.\n * Changes what token is used for pipe bodies’ topic references.\n */\n topicToken?: \"%\" | \"#\" | \"@@\" | \"^^\" | \"^\";\n\n /**\n * The import attributes syntax style:\n * - \"with\" : `import { a } from \"b\" with { type: \"json\" };`\n * - \"assert\" : `import { a } from \"b\" assert { type: \"json\" };`\n * - \"with-legacy\" : `import { a } from \"b\" with type: \"json\";`\n */\n importAttributesKeyword?: \"with\" | \"assert\" | \"with-legacy\";\n}\n\nexport interface GeneratorResult {\n code: string;\n map: EncodedSourceMap | null;\n decodedMap: DecodedSourceMap | undefined;\n rawMappings: Mapping[] | undefined;\n}\n\nif (!process.env.BABEL_8_BREAKING && !USE_ESM) {\n /**\n * We originally exported the Generator class above, but to make it extra clear that it is a private API,\n * we have moved that to an internal class instance and simplified the interface to the two public methods\n * that we wish to support.\n */\n\n // eslint-disable-next-line no-restricted-globals\n exports.CodeGenerator = class CodeGenerator {\n private _ast: t.Node;\n private _format: Format | undefined;\n private _map: SourceMap | null;\n constructor(ast: t.Node, opts: GeneratorOptions = {}, code?: string) {\n this._ast = ast;\n this._format = normalizeOptions(code, opts, ast);\n this._map = opts.sourceMaps ? new SourceMap(opts, code) : null;\n }\n generate(): GeneratorResult {\n const printer = new Printer(this._format, this._map);\n\n return printer.generate(this._ast);\n }\n };\n}\n\n/**\n * Turns an AST into code, maintaining sourcemaps, user preferences, and valid output.\n * @param ast - the abstract syntax tree from which to generate output code.\n * @param opts - used for specifying options for code generation.\n * @param code - the original source code, used for source maps.\n * @returns - an object containing the output code and source map.\n */\nexport function generate(\n ast: t.Node,\n opts: GeneratorOptions = {},\n code?: string | { [filename: string]: string },\n): GeneratorResult {\n const format = normalizeOptions(code, opts, ast);\n const map = opts.sourceMaps ? new SourceMap(opts, code) : null;\n\n const printer = new Printer(\n format,\n map,\n (ast as any).tokens,\n typeof code === \"string\" ? code : null,\n );\n\n return printer.generate(ast);\n}\n\nexport default generate;\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/generator/lib/node/index.js b/node_modules/@babel/generator/lib/node/index.js new file mode 100644 index 00000000..d6120627 --- /dev/null +++ b/node_modules/@babel/generator/lib/node/index.js @@ -0,0 +1,122 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.TokenContext = void 0; +exports.isLastChild = isLastChild; +exports.needsParens = needsParens; +exports.needsWhitespace = needsWhitespace; +exports.needsWhitespaceAfter = needsWhitespaceAfter; +exports.needsWhitespaceBefore = needsWhitespaceBefore; +var whitespace = require("./whitespace.js"); +var parens = require("./parentheses.js"); +var _t = require("@babel/types"); +const { + FLIPPED_ALIAS_KEYS, + VISITOR_KEYS, + isCallExpression, + isDecorator, + isExpressionStatement, + isMemberExpression, + isNewExpression, + isParenthesizedExpression +} = _t; +const TokenContext = exports.TokenContext = { + normal: 0, + expressionStatement: 1, + arrowBody: 2, + exportDefault: 4, + arrowFlowReturnType: 8, + forInitHead: 16, + forInHead: 32, + forOfHead: 64, + forInOrInitHeadAccumulate: 128, + forInOrInitHeadAccumulatePassThroughMask: 128 +}; +function expandAliases(obj) { + const map = new Map(); + function add(type, func) { + const fn = map.get(type); + map.set(type, fn ? function (node, parent, stack, getRawIdentifier) { + var _fn; + return (_fn = fn(node, parent, stack, getRawIdentifier)) != null ? _fn : func(node, parent, stack, getRawIdentifier); + } : func); + } + for (const type of Object.keys(obj)) { + const aliases = FLIPPED_ALIAS_KEYS[type]; + if (aliases) { + for (const alias of aliases) { + add(alias, obj[type]); + } + } else { + add(type, obj[type]); + } + } + return map; +} +const expandedParens = expandAliases(parens); +const expandedWhitespaceNodes = expandAliases(whitespace.nodes); +function isOrHasCallExpression(node) { + if (isCallExpression(node)) { + return true; + } + return isMemberExpression(node) && isOrHasCallExpression(node.object); +} +function needsWhitespace(node, parent, type) { + var _expandedWhitespaceNo; + if (!node) return false; + if (isExpressionStatement(node)) { + node = node.expression; + } + const flag = (_expandedWhitespaceNo = expandedWhitespaceNodes.get(node.type)) == null ? void 0 : _expandedWhitespaceNo(node, parent); + if (typeof flag === "number") { + return (flag & type) !== 0; + } + return false; +} +function needsWhitespaceBefore(node, parent) { + return needsWhitespace(node, parent, 1); +} +function needsWhitespaceAfter(node, parent) { + return needsWhitespace(node, parent, 2); +} +function needsParens(node, parent, tokenContext, getRawIdentifier) { + var _expandedParens$get; + if (!parent) return false; + if (isNewExpression(parent) && parent.callee === node) { + if (isOrHasCallExpression(node)) return true; + } + if (isDecorator(parent)) { + return !isDecoratorMemberExpression(node) && !(isCallExpression(node) && isDecoratorMemberExpression(node.callee)) && !isParenthesizedExpression(node); + } + return (_expandedParens$get = expandedParens.get(node.type)) == null ? void 0 : _expandedParens$get(node, parent, tokenContext, getRawIdentifier); +} +function isDecoratorMemberExpression(node) { + switch (node.type) { + case "Identifier": + return true; + case "MemberExpression": + return !node.computed && node.property.type === "Identifier" && isDecoratorMemberExpression(node.object); + default: + return false; + } +} +function isLastChild(parent, child) { + const visitorKeys = VISITOR_KEYS[parent.type]; + for (let i = visitorKeys.length - 1; i >= 0; i--) { + const val = parent[visitorKeys[i]]; + if (val === child) { + return true; + } else if (Array.isArray(val)) { + let j = val.length - 1; + while (j >= 0 && val[j] === null) j--; + return j >= 0 && val[j] === child; + } else if (val) { + return false; + } + } + return false; +} + +//# sourceMappingURL=index.js.map diff --git a/node_modules/@babel/generator/lib/node/index.js.map b/node_modules/@babel/generator/lib/node/index.js.map new file mode 100644 index 00000000..2fbb9049 --- /dev/null +++ b/node_modules/@babel/generator/lib/node/index.js.map @@ -0,0 +1 @@ +{"version":3,"names":["whitespace","require","parens","_t","FLIPPED_ALIAS_KEYS","VISITOR_KEYS","isCallExpression","isDecorator","isExpressionStatement","isMemberExpression","isNewExpression","isParenthesizedExpression","TokenContext","exports","normal","expressionStatement","arrowBody","exportDefault","arrowFlowReturnType","forInitHead","forInHead","forOfHead","forInOrInitHeadAccumulate","forInOrInitHeadAccumulatePassThroughMask","expandAliases","obj","map","Map","add","type","func","fn","get","set","node","parent","stack","getRawIdentifier","_fn","Object","keys","aliases","alias","expandedParens","expandedWhitespaceNodes","nodes","isOrHasCallExpression","object","needsWhitespace","_expandedWhitespaceNo","expression","flag","needsWhitespaceBefore","needsWhitespaceAfter","needsParens","tokenContext","_expandedParens$get","callee","isDecoratorMemberExpression","computed","property","isLastChild","child","visitorKeys","i","length","val","Array","isArray","j"],"sources":["../../src/node/index.ts"],"sourcesContent":["import * as whitespace from \"./whitespace.ts\";\nimport * as parens from \"./parentheses.ts\";\nimport {\n FLIPPED_ALIAS_KEYS,\n VISITOR_KEYS,\n isCallExpression,\n isDecorator,\n isExpressionStatement,\n isMemberExpression,\n isNewExpression,\n isParenthesizedExpression,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\nimport type { WhitespaceFlag } from \"./whitespace.ts\";\n\nexport const enum TokenContext {\n normal = 0,\n expressionStatement = 1 << 0,\n arrowBody = 1 << 1,\n exportDefault = 1 << 2,\n arrowFlowReturnType = 1 << 3,\n forInitHead = 1 << 4,\n forInHead = 1 << 5,\n forOfHead = 1 << 6,\n // This flag lives across the token boundary, and will\n // be reset after forIn or forInit head is printed\n forInOrInitHeadAccumulate = 1 << 7,\n forInOrInitHeadAccumulatePassThroughMask = 0x80,\n}\n\ntype NodeHandler = (\n node: t.Node,\n // todo:\n // node: K extends keyof typeof t\n // ? Extract\n // : t.Node,\n parent: t.Node,\n tokenContext?: number,\n getRawIdentifier?: (node: t.Identifier) => string,\n) => R;\n\nexport type NodeHandlers = {\n [K in string]?: NodeHandler;\n};\n\nfunction expandAliases(obj: NodeHandlers) {\n const map = new Map>();\n\n function add(type: string, func: NodeHandler) {\n const fn = map.get(type);\n map.set(\n type,\n fn\n ? function (node, parent, stack, getRawIdentifier) {\n return (\n fn(node, parent, stack, getRawIdentifier) ??\n func(node, parent, stack, getRawIdentifier)\n );\n }\n : func,\n );\n }\n\n for (const type of Object.keys(obj)) {\n const aliases = FLIPPED_ALIAS_KEYS[type];\n if (aliases) {\n for (const alias of aliases) {\n add(alias, obj[type]);\n }\n } else {\n add(type, obj[type]);\n }\n }\n\n return map;\n}\n\n// Rather than using `t.is` on each object property, we pre-expand any type aliases\n// into concrete types so that the 'find' call below can be as fast as possible.\nconst expandedParens = expandAliases(parens);\nconst expandedWhitespaceNodes = expandAliases(whitespace.nodes);\n\nfunction isOrHasCallExpression(node: t.Node): boolean {\n if (isCallExpression(node)) {\n return true;\n }\n\n return isMemberExpression(node) && isOrHasCallExpression(node.object);\n}\n\nexport function needsWhitespace(\n node: t.Node,\n parent: t.Node,\n type: WhitespaceFlag,\n): boolean {\n if (!node) return false;\n\n if (isExpressionStatement(node)) {\n node = node.expression;\n }\n\n const flag = expandedWhitespaceNodes.get(node.type)?.(node, parent);\n\n if (typeof flag === \"number\") {\n return (flag & type) !== 0;\n }\n\n return false;\n}\n\nexport function needsWhitespaceBefore(node: t.Node, parent: t.Node) {\n return needsWhitespace(node, parent, 1);\n}\n\nexport function needsWhitespaceAfter(node: t.Node, parent: t.Node) {\n return needsWhitespace(node, parent, 2);\n}\n\nexport function needsParens(\n node: t.Node,\n parent: t.Node,\n tokenContext?: number,\n getRawIdentifier?: (node: t.Identifier) => string,\n) {\n if (!parent) return false;\n\n if (isNewExpression(parent) && parent.callee === node) {\n if (isOrHasCallExpression(node)) return true;\n }\n\n if (isDecorator(parent)) {\n return (\n !isDecoratorMemberExpression(node) &&\n !(isCallExpression(node) && isDecoratorMemberExpression(node.callee)) &&\n !isParenthesizedExpression(node)\n );\n }\n\n return expandedParens.get(node.type)?.(\n node,\n parent,\n tokenContext,\n getRawIdentifier,\n );\n}\n\nfunction isDecoratorMemberExpression(node: t.Node): boolean {\n switch (node.type) {\n case \"Identifier\":\n return true;\n case \"MemberExpression\":\n return (\n !node.computed &&\n node.property.type === \"Identifier\" &&\n isDecoratorMemberExpression(node.object)\n );\n default:\n return false;\n }\n}\n\nexport function isLastChild(parent: t.Node, child: t.Node) {\n const visitorKeys = VISITOR_KEYS[parent.type];\n for (let i = visitorKeys.length - 1; i >= 0; i--) {\n const val = (parent as any)[visitorKeys[i]] as t.Node | t.Node[] | null;\n if (val === child) {\n return true;\n } else if (Array.isArray(val)) {\n let j = val.length - 1;\n while (j >= 0 && val[j] === null) j--;\n return j >= 0 && val[j] === child;\n } else if (val) {\n return false;\n }\n }\n return false;\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/generator/lib/node/parentheses.js b/node_modules/@babel/generator/lib/node/parentheses.js new file mode 100644 index 00000000..66eb16b5 --- /dev/null +++ b/node_modules/@babel/generator/lib/node/parentheses.js @@ -0,0 +1,262 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.AssignmentExpression = AssignmentExpression; +exports.Binary = Binary; +exports.BinaryExpression = BinaryExpression; +exports.ClassExpression = ClassExpression; +exports.ArrowFunctionExpression = exports.ConditionalExpression = ConditionalExpression; +exports.DoExpression = DoExpression; +exports.FunctionExpression = FunctionExpression; +exports.FunctionTypeAnnotation = FunctionTypeAnnotation; +exports.Identifier = Identifier; +exports.LogicalExpression = LogicalExpression; +exports.NullableTypeAnnotation = NullableTypeAnnotation; +exports.ObjectExpression = ObjectExpression; +exports.OptionalIndexedAccessType = OptionalIndexedAccessType; +exports.OptionalCallExpression = exports.OptionalMemberExpression = OptionalMemberExpression; +exports.SequenceExpression = SequenceExpression; +exports.TSSatisfiesExpression = exports.TSAsExpression = TSAsExpression; +exports.TSConditionalType = TSConditionalType; +exports.TSConstructorType = exports.TSFunctionType = TSFunctionType; +exports.TSInferType = TSInferType; +exports.TSInstantiationExpression = TSInstantiationExpression; +exports.TSIntersectionType = TSIntersectionType; +exports.UnaryLike = exports.TSTypeAssertion = UnaryLike; +exports.TSTypeOperator = TSTypeOperator; +exports.TSUnionType = TSUnionType; +exports.IntersectionTypeAnnotation = exports.UnionTypeAnnotation = UnionTypeAnnotation; +exports.UpdateExpression = UpdateExpression; +exports.AwaitExpression = exports.YieldExpression = YieldExpression; +var _t = require("@babel/types"); +var _index = require("./index.js"); +const { + isArrayTypeAnnotation, + isBinaryExpression, + isCallExpression, + isForOfStatement, + isIndexedAccessType, + isMemberExpression, + isObjectPattern, + isOptionalMemberExpression, + isYieldExpression, + isStatement +} = _t; +const PRECEDENCE = new Map([["||", 0], ["??", 0], ["|>", 0], ["&&", 1], ["|", 2], ["^", 3], ["&", 4], ["==", 5], ["===", 5], ["!=", 5], ["!==", 5], ["<", 6], [">", 6], ["<=", 6], [">=", 6], ["in", 6], ["instanceof", 6], [">>", 7], ["<<", 7], [">>>", 7], ["+", 8], ["-", 8], ["*", 9], ["/", 9], ["%", 9], ["**", 10]]); +function getBinaryPrecedence(node, nodeType) { + if (nodeType === "BinaryExpression" || nodeType === "LogicalExpression") { + return PRECEDENCE.get(node.operator); + } + if (nodeType === "TSAsExpression" || nodeType === "TSSatisfiesExpression") { + return PRECEDENCE.get("in"); + } +} +function isTSTypeExpression(nodeType) { + return nodeType === "TSAsExpression" || nodeType === "TSSatisfiesExpression" || nodeType === "TSTypeAssertion"; +} +const isClassExtendsClause = (node, parent) => { + const parentType = parent.type; + return (parentType === "ClassDeclaration" || parentType === "ClassExpression") && parent.superClass === node; +}; +const hasPostfixPart = (node, parent) => { + const parentType = parent.type; + return (parentType === "MemberExpression" || parentType === "OptionalMemberExpression") && parent.object === node || (parentType === "CallExpression" || parentType === "OptionalCallExpression" || parentType === "NewExpression") && parent.callee === node || parentType === "TaggedTemplateExpression" && parent.tag === node || parentType === "TSNonNullExpression"; +}; +function NullableTypeAnnotation(node, parent) { + return isArrayTypeAnnotation(parent); +} +function FunctionTypeAnnotation(node, parent, tokenContext) { + const parentType = parent.type; + return (parentType === "UnionTypeAnnotation" || parentType === "IntersectionTypeAnnotation" || parentType === "ArrayTypeAnnotation" || Boolean(tokenContext & _index.TokenContext.arrowFlowReturnType) + ); +} +function UpdateExpression(node, parent) { + return hasPostfixPart(node, parent) || isClassExtendsClause(node, parent); +} +function needsParenBeforeExpressionBrace(tokenContext) { + return Boolean(tokenContext & (_index.TokenContext.expressionStatement | _index.TokenContext.arrowBody)); +} +function ObjectExpression(node, parent, tokenContext) { + return needsParenBeforeExpressionBrace(tokenContext); +} +function DoExpression(node, parent, tokenContext) { + return !node.async && Boolean(tokenContext & _index.TokenContext.expressionStatement); +} +function Binary(node, parent) { + const parentType = parent.type; + if (node.type === "BinaryExpression" && node.operator === "**" && parentType === "BinaryExpression" && parent.operator === "**") { + return parent.left === node; + } + if (isClassExtendsClause(node, parent)) { + return true; + } + if (hasPostfixPart(node, parent) || parentType === "UnaryExpression" || parentType === "SpreadElement" || parentType === "AwaitExpression") { + return true; + } + const parentPos = getBinaryPrecedence(parent, parentType); + if (parentPos != null) { + const nodePos = getBinaryPrecedence(node, node.type); + if (parentPos === nodePos && parentType === "BinaryExpression" && parent.right === node || parentPos > nodePos) { + return true; + } + } + return undefined; +} +function UnionTypeAnnotation(node, parent) { + const parentType = parent.type; + return parentType === "ArrayTypeAnnotation" || parentType === "NullableTypeAnnotation" || parentType === "IntersectionTypeAnnotation" || parentType === "UnionTypeAnnotation"; +} +function OptionalIndexedAccessType(node, parent) { + return isIndexedAccessType(parent) && parent.objectType === node; +} +function TSAsExpression(node, parent) { + if ((parent.type === "AssignmentExpression" || parent.type === "AssignmentPattern") && parent.left === node) { + return true; + } + if (parent.type === "BinaryExpression" && (parent.operator === "|" || parent.operator === "&") && node === parent.left) { + return true; + } + return Binary(node, parent); +} +function TSConditionalType(node, parent) { + const parentType = parent.type; + if (parentType === "TSArrayType" || parentType === "TSIndexedAccessType" && parent.objectType === node || parentType === "TSOptionalType" || parentType === "TSTypeOperator" || parentType === "TSTypeParameter") { + return true; + } + if ((parentType === "TSIntersectionType" || parentType === "TSUnionType") && parent.types[0] === node) { + return true; + } + if (parentType === "TSConditionalType" && (parent.checkType === node || parent.extendsType === node)) { + return true; + } + return false; +} +function TSUnionType(node, parent) { + const parentType = parent.type; + return parentType === "TSIntersectionType" || parentType === "TSTypeOperator" || parentType === "TSArrayType" || parentType === "TSIndexedAccessType" && parent.objectType === node || parentType === "TSOptionalType"; +} +function TSIntersectionType(node, parent) { + const parentType = parent.type; + return parentType === "TSTypeOperator" || parentType === "TSArrayType" || parentType === "TSIndexedAccessType" && parent.objectType === node || parentType === "TSOptionalType"; +} +function TSInferType(node, parent) { + const parentType = parent.type; + if (parentType === "TSArrayType" || parentType === "TSIndexedAccessType" && parent.objectType === node || parentType === "TSOptionalType") { + return true; + } + if (node.typeParameter.constraint) { + if ((parentType === "TSIntersectionType" || parentType === "TSUnionType") && parent.types[0] === node) { + return true; + } + } + return false; +} +function TSTypeOperator(node, parent) { + const parentType = parent.type; + return parentType === "TSArrayType" || parentType === "TSIndexedAccessType" && parent.objectType === node || parentType === "TSOptionalType"; +} +function TSInstantiationExpression(node, parent) { + const parentType = parent.type; + return (parentType === "CallExpression" || parentType === "OptionalCallExpression" || parentType === "NewExpression" || parentType === "TSInstantiationExpression") && !!parent.typeParameters; +} +function TSFunctionType(node, parent) { + const parentType = parent.type; + return parentType === "TSIntersectionType" || parentType === "TSUnionType" || parentType === "TSTypeOperator" || parentType === "TSOptionalType" || parentType === "TSArrayType" || parentType === "TSIndexedAccessType" && parent.objectType === node || parentType === "TSConditionalType" && (parent.checkType === node || parent.extendsType === node); +} +function BinaryExpression(node, parent, tokenContext) { + return node.operator === "in" && Boolean(tokenContext & _index.TokenContext.forInOrInitHeadAccumulate); +} +function SequenceExpression(node, parent) { + const parentType = parent.type; + if (parentType === "SequenceExpression" || parentType === "ParenthesizedExpression" || parentType === "MemberExpression" && parent.property === node || parentType === "OptionalMemberExpression" && parent.property === node || parentType === "TemplateLiteral") { + return false; + } + if (parentType === "ClassDeclaration") { + return true; + } + if (parentType === "ForOfStatement") { + return parent.right === node; + } + if (parentType === "ExportDefaultDeclaration") { + return true; + } + return !isStatement(parent); +} +function YieldExpression(node, parent) { + const parentType = parent.type; + return parentType === "BinaryExpression" || parentType === "LogicalExpression" || parentType === "UnaryExpression" || parentType === "SpreadElement" || hasPostfixPart(node, parent) || parentType === "AwaitExpression" && isYieldExpression(node) || parentType === "ConditionalExpression" && node === parent.test || isClassExtendsClause(node, parent) || isTSTypeExpression(parentType); +} +function ClassExpression(node, parent, tokenContext) { + return Boolean(tokenContext & (_index.TokenContext.expressionStatement | _index.TokenContext.exportDefault)); +} +function UnaryLike(node, parent) { + return hasPostfixPart(node, parent) || isBinaryExpression(parent) && parent.operator === "**" && parent.left === node || isClassExtendsClause(node, parent); +} +function FunctionExpression(node, parent, tokenContext) { + return Boolean(tokenContext & (_index.TokenContext.expressionStatement | _index.TokenContext.exportDefault)); +} +function ConditionalExpression(node, parent) { + const parentType = parent.type; + if (parentType === "UnaryExpression" || parentType === "SpreadElement" || parentType === "BinaryExpression" || parentType === "LogicalExpression" || parentType === "ConditionalExpression" && parent.test === node || parentType === "AwaitExpression" || isTSTypeExpression(parentType)) { + return true; + } + return UnaryLike(node, parent); +} +function OptionalMemberExpression(node, parent) { + return isCallExpression(parent) && parent.callee === node || isMemberExpression(parent) && parent.object === node; +} +function AssignmentExpression(node, parent, tokenContext) { + if (needsParenBeforeExpressionBrace(tokenContext) && isObjectPattern(node.left)) { + return true; + } else { + return ConditionalExpression(node, parent); + } +} +function LogicalExpression(node, parent) { + const parentType = parent.type; + if (isTSTypeExpression(parentType)) return true; + if (parentType !== "LogicalExpression") return false; + switch (node.operator) { + case "||": + return parent.operator === "??" || parent.operator === "&&"; + case "&&": + return parent.operator === "??"; + case "??": + return parent.operator !== "??"; + } +} +function Identifier(node, parent, tokenContext, getRawIdentifier) { + var _node$extra; + const parentType = parent.type; + if ((_node$extra = node.extra) != null && _node$extra.parenthesized && parentType === "AssignmentExpression" && parent.left === node) { + const rightType = parent.right.type; + if ((rightType === "FunctionExpression" || rightType === "ClassExpression") && parent.right.id == null) { + return true; + } + } + if (getRawIdentifier && getRawIdentifier(node) !== node.name) { + return false; + } + if (node.name === "let") { + const isFollowedByBracket = isMemberExpression(parent, { + object: node, + computed: true + }) || isOptionalMemberExpression(parent, { + object: node, + computed: true, + optional: false + }); + if (isFollowedByBracket && tokenContext & (_index.TokenContext.expressionStatement | _index.TokenContext.forInitHead | _index.TokenContext.forInHead)) { + return true; + } + return Boolean(tokenContext & _index.TokenContext.forOfHead); + } + return node.name === "async" && isForOfStatement(parent, { + left: node, + await: false + }); +} + +//# sourceMappingURL=parentheses.js.map diff --git a/node_modules/@babel/generator/lib/node/parentheses.js.map b/node_modules/@babel/generator/lib/node/parentheses.js.map new file mode 100644 index 00000000..2f6f18c4 --- /dev/null +++ b/node_modules/@babel/generator/lib/node/parentheses.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_t","require","_index","isArrayTypeAnnotation","isBinaryExpression","isCallExpression","isForOfStatement","isIndexedAccessType","isMemberExpression","isObjectPattern","isOptionalMemberExpression","isYieldExpression","isStatement","PRECEDENCE","Map","getBinaryPrecedence","node","nodeType","get","operator","isTSTypeExpression","isClassExtendsClause","parent","parentType","type","superClass","hasPostfixPart","object","callee","tag","NullableTypeAnnotation","FunctionTypeAnnotation","tokenContext","Boolean","TokenContext","arrowFlowReturnType","UpdateExpression","needsParenBeforeExpressionBrace","expressionStatement","arrowBody","ObjectExpression","DoExpression","async","Binary","left","parentPos","nodePos","right","undefined","UnionTypeAnnotation","OptionalIndexedAccessType","objectType","TSAsExpression","TSConditionalType","types","checkType","extendsType","TSUnionType","TSIntersectionType","TSInferType","typeParameter","constraint","TSTypeOperator","TSInstantiationExpression","typeParameters","TSFunctionType","BinaryExpression","forInOrInitHeadAccumulate","SequenceExpression","property","YieldExpression","test","ClassExpression","exportDefault","UnaryLike","FunctionExpression","ConditionalExpression","OptionalMemberExpression","AssignmentExpression","LogicalExpression","Identifier","getRawIdentifier","_node$extra","extra","parenthesized","rightType","id","name","isFollowedByBracket","computed","optional","forInitHead","forInHead","forOfHead","await"],"sources":["../../src/node/parentheses.ts"],"sourcesContent":["import {\n isArrayTypeAnnotation,\n isBinaryExpression,\n isCallExpression,\n isForOfStatement,\n isIndexedAccessType,\n isMemberExpression,\n isObjectPattern,\n isOptionalMemberExpression,\n isYieldExpression,\n isStatement,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\nimport { TokenContext } from \"./index.ts\";\n\nconst PRECEDENCE = new Map([\n [\"||\", 0],\n [\"??\", 0],\n [\"|>\", 0],\n [\"&&\", 1],\n [\"|\", 2],\n [\"^\", 3],\n [\"&\", 4],\n [\"==\", 5],\n [\"===\", 5],\n [\"!=\", 5],\n [\"!==\", 5],\n [\"<\", 6],\n [\">\", 6],\n [\"<=\", 6],\n [\">=\", 6],\n [\"in\", 6],\n [\"instanceof\", 6],\n [\">>\", 7],\n [\"<<\", 7],\n [\">>>\", 7],\n [\"+\", 8],\n [\"-\", 8],\n [\"*\", 9],\n [\"/\", 9],\n [\"%\", 9],\n [\"**\", 10],\n]);\n\nfunction getBinaryPrecedence(\n node: t.Binary | t.TSAsExpression | t.TSSatisfiesExpression,\n nodeType: string,\n): number;\nfunction getBinaryPrecedence(\n node: t.Node,\n nodeType: string,\n): number | undefined;\nfunction getBinaryPrecedence(node: t.Node, nodeType: string) {\n if (nodeType === \"BinaryExpression\" || nodeType === \"LogicalExpression\") {\n return PRECEDENCE.get((node as t.Binary).operator);\n }\n if (nodeType === \"TSAsExpression\" || nodeType === \"TSSatisfiesExpression\") {\n return PRECEDENCE.get(\"in\");\n }\n}\n\nfunction isTSTypeExpression(nodeType: string) {\n return (\n nodeType === \"TSAsExpression\" ||\n nodeType === \"TSSatisfiesExpression\" ||\n nodeType === \"TSTypeAssertion\"\n );\n}\n\nconst isClassExtendsClause = (\n node: t.Node,\n parent: t.Node,\n): parent is t.Class => {\n const parentType = parent.type;\n return (\n (parentType === \"ClassDeclaration\" || parentType === \"ClassExpression\") &&\n parent.superClass === node\n );\n};\n\nconst hasPostfixPart = (node: t.Node, parent: t.Node) => {\n const parentType = parent.type;\n return (\n ((parentType === \"MemberExpression\" ||\n parentType === \"OptionalMemberExpression\") &&\n parent.object === node) ||\n ((parentType === \"CallExpression\" ||\n parentType === \"OptionalCallExpression\" ||\n parentType === \"NewExpression\") &&\n parent.callee === node) ||\n (parentType === \"TaggedTemplateExpression\" && parent.tag === node) ||\n parentType === \"TSNonNullExpression\"\n );\n};\n\nexport function NullableTypeAnnotation(\n node: t.NullableTypeAnnotation,\n parent: t.Node,\n): boolean {\n return isArrayTypeAnnotation(parent);\n}\n\nexport function FunctionTypeAnnotation(\n node: t.FunctionTypeAnnotation,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n const parentType = parent.type;\n return (\n // (() => A) | (() => B)\n parentType === \"UnionTypeAnnotation\" ||\n // (() => A) & (() => B)\n parentType === \"IntersectionTypeAnnotation\" ||\n // (() => A)[]\n parentType === \"ArrayTypeAnnotation\" ||\n Boolean(tokenContext & TokenContext.arrowFlowReturnType)\n );\n}\n\nexport function UpdateExpression(\n node: t.UpdateExpression,\n parent: t.Node,\n): boolean {\n return hasPostfixPart(node, parent) || isClassExtendsClause(node, parent);\n}\n\nfunction needsParenBeforeExpressionBrace(tokenContext: number) {\n return Boolean(\n tokenContext & (TokenContext.expressionStatement | TokenContext.arrowBody),\n );\n}\n\nexport function ObjectExpression(\n node: t.ObjectExpression,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n return needsParenBeforeExpressionBrace(tokenContext);\n}\n\nexport function DoExpression(\n node: t.DoExpression,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n // `async do` can start an expression statement\n return (\n !node.async && Boolean(tokenContext & TokenContext.expressionStatement)\n );\n}\n\nexport function Binary(\n node: t.Binary | t.TSAsExpression | t.TSSatisfiesExpression,\n parent: t.Node,\n): boolean | undefined {\n const parentType = parent.type;\n if (\n node.type === \"BinaryExpression\" &&\n node.operator === \"**\" &&\n parentType === \"BinaryExpression\" &&\n parent.operator === \"**\"\n ) {\n return parent.left === node;\n }\n\n if (isClassExtendsClause(node, parent)) {\n return true;\n }\n\n if (\n hasPostfixPart(node, parent) ||\n parentType === \"UnaryExpression\" ||\n parentType === \"SpreadElement\" ||\n parentType === \"AwaitExpression\"\n ) {\n return true;\n }\n\n const parentPos = getBinaryPrecedence(parent, parentType);\n if (parentPos != null) {\n const nodePos = getBinaryPrecedence(node, node.type);\n if (\n // Logical expressions with the same precedence don't need parens.\n (parentPos === nodePos &&\n parentType === \"BinaryExpression\" &&\n parent.right === node) ||\n parentPos > nodePos\n ) {\n return true;\n }\n }\n\n return undefined;\n}\n\nexport function UnionTypeAnnotation(\n node: t.UnionTypeAnnotation,\n parent: t.Node,\n): boolean {\n const parentType = parent.type;\n return (\n parentType === \"ArrayTypeAnnotation\" ||\n parentType === \"NullableTypeAnnotation\" ||\n parentType === \"IntersectionTypeAnnotation\" ||\n parentType === \"UnionTypeAnnotation\"\n );\n}\n\nexport { UnionTypeAnnotation as IntersectionTypeAnnotation };\n\nexport function OptionalIndexedAccessType(\n node: t.OptionalIndexedAccessType,\n parent: t.Node,\n): boolean {\n return isIndexedAccessType(parent) && parent.objectType === node;\n}\n\nexport function TSAsExpression(\n node: t.TSAsExpression | t.TSSatisfiesExpression,\n parent: t.Node,\n): boolean {\n if (\n (parent.type === \"AssignmentExpression\" ||\n parent.type === \"AssignmentPattern\") &&\n parent.left === node\n ) {\n return true;\n }\n if (\n parent.type === \"BinaryExpression\" &&\n (parent.operator === \"|\" || parent.operator === \"&\") &&\n node === parent.left\n ) {\n return true;\n }\n return Binary(node, parent);\n}\n\nexport { TSAsExpression as TSSatisfiesExpression };\n\nexport { UnaryLike as TSTypeAssertion };\n\nexport function TSConditionalType(\n node: t.TSConditionalType,\n parent: t.Node,\n): boolean {\n const parentType = parent.type;\n if (\n parentType === \"TSArrayType\" ||\n (parentType === \"TSIndexedAccessType\" && parent.objectType === node) ||\n parentType === \"TSOptionalType\" ||\n parentType === \"TSTypeOperator\" ||\n // for `infer K extends (L extends M ? M : ...)`\n parentType === \"TSTypeParameter\"\n ) {\n return true;\n }\n if (\n (parentType === \"TSIntersectionType\" || parentType === \"TSUnionType\") &&\n parent.types[0] === node\n ) {\n return true;\n }\n if (\n parentType === \"TSConditionalType\" &&\n (parent.checkType === node || parent.extendsType === node)\n ) {\n return true;\n }\n return false;\n}\n\nexport function TSUnionType(node: t.TSUnionType, parent: t.Node): boolean {\n const parentType = parent.type;\n return (\n parentType === \"TSIntersectionType\" ||\n parentType === \"TSTypeOperator\" ||\n parentType === \"TSArrayType\" ||\n (parentType === \"TSIndexedAccessType\" && parent.objectType === node) ||\n parentType === \"TSOptionalType\"\n );\n}\n\nexport function TSIntersectionType(\n node: t.TSUnionType,\n parent: t.Node,\n): boolean {\n const parentType = parent.type;\n return (\n parentType === \"TSTypeOperator\" ||\n parentType === \"TSArrayType\" ||\n (parentType === \"TSIndexedAccessType\" && parent.objectType === node) ||\n parentType === \"TSOptionalType\"\n );\n}\n\nexport function TSInferType(node: t.TSInferType, parent: t.Node): boolean {\n const parentType = parent.type;\n if (\n parentType === \"TSArrayType\" ||\n (parentType === \"TSIndexedAccessType\" && parent.objectType === node) ||\n parentType === \"TSOptionalType\"\n ) {\n return true;\n }\n if (node.typeParameter.constraint) {\n if (\n (parentType === \"TSIntersectionType\" || parentType === \"TSUnionType\") &&\n parent.types[0] === node\n ) {\n return true;\n }\n }\n return false;\n}\n\nexport function TSTypeOperator(\n node: t.TSTypeOperator,\n parent: t.Node,\n): boolean {\n const parentType = parent.type;\n return (\n parentType === \"TSArrayType\" ||\n (parentType === \"TSIndexedAccessType\" && parent.objectType === node) ||\n parentType === \"TSOptionalType\"\n );\n}\n\nexport function TSInstantiationExpression(\n node: t.TSInstantiationExpression,\n parent: t.Node,\n) {\n const parentType = parent.type;\n return (\n (parentType === \"CallExpression\" ||\n parentType === \"OptionalCallExpression\" ||\n parentType === \"NewExpression\" ||\n parentType === \"TSInstantiationExpression\") &&\n !!(process.env.BABEL_8_BREAKING\n ? // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n parent.typeArguments\n : // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n parent.typeParameters)\n );\n}\n\nexport function TSFunctionType(\n node: t.TSFunctionType,\n parent: t.Node,\n): boolean {\n const parentType = parent.type;\n return (\n parentType === \"TSIntersectionType\" ||\n parentType === \"TSUnionType\" ||\n parentType === \"TSTypeOperator\" ||\n parentType === \"TSOptionalType\" ||\n parentType === \"TSArrayType\" ||\n (parentType === \"TSIndexedAccessType\" && parent.objectType === node) ||\n (parentType === \"TSConditionalType\" &&\n (parent.checkType === node || parent.extendsType === node))\n );\n}\n\nexport { TSFunctionType as TSConstructorType };\n\nexport function BinaryExpression(\n node: t.BinaryExpression,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n // for ((1 in []);;);\n // for (var x = (1 in []) in 2);\n return (\n node.operator === \"in\" &&\n Boolean(tokenContext & TokenContext.forInOrInitHeadAccumulate)\n );\n}\n\nexport function SequenceExpression(\n node: t.SequenceExpression,\n parent: t.Node,\n): boolean {\n const parentType = parent.type;\n if (\n parentType === \"SequenceExpression\" ||\n parentType === \"ParenthesizedExpression\" ||\n (parentType === \"MemberExpression\" && parent.property === node) ||\n (parentType === \"OptionalMemberExpression\" && parent.property === node) ||\n parentType === \"TemplateLiteral\"\n ) {\n return false;\n }\n if (parentType === \"ClassDeclaration\") {\n return true;\n }\n if (parentType === \"ForOfStatement\") {\n return parent.right === node;\n }\n if (parentType === \"ExportDefaultDeclaration\") {\n return true;\n }\n\n return !isStatement(parent);\n}\n\nexport function YieldExpression(\n node: t.YieldExpression,\n parent: t.Node,\n): boolean {\n const parentType = parent.type;\n return (\n parentType === \"BinaryExpression\" ||\n parentType === \"LogicalExpression\" ||\n parentType === \"UnaryExpression\" ||\n parentType === \"SpreadElement\" ||\n hasPostfixPart(node, parent) ||\n (parentType === \"AwaitExpression\" && isYieldExpression(node)) ||\n (parentType === \"ConditionalExpression\" && node === parent.test) ||\n isClassExtendsClause(node, parent) ||\n isTSTypeExpression(parentType)\n );\n}\n\nexport { YieldExpression as AwaitExpression };\n\nexport function ClassExpression(\n node: t.ClassExpression,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n return Boolean(\n tokenContext &\n (TokenContext.expressionStatement | TokenContext.exportDefault),\n );\n}\n\nexport function UnaryLike(\n node:\n | t.UnaryLike\n | t.TSTypeAssertion\n | t.ArrowFunctionExpression\n | t.ConditionalExpression\n | t.AssignmentExpression,\n parent: t.Node,\n): boolean {\n return (\n hasPostfixPart(node, parent) ||\n (isBinaryExpression(parent) &&\n parent.operator === \"**\" &&\n parent.left === node) ||\n isClassExtendsClause(node, parent)\n );\n}\n\nexport function FunctionExpression(\n node: t.FunctionExpression,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n return Boolean(\n tokenContext &\n (TokenContext.expressionStatement | TokenContext.exportDefault),\n );\n}\n\nexport function ConditionalExpression(\n node:\n | t.ConditionalExpression\n | t.ArrowFunctionExpression\n | t.AssignmentExpression,\n parent?: t.Node,\n): boolean {\n const parentType = parent.type;\n if (\n parentType === \"UnaryExpression\" ||\n parentType === \"SpreadElement\" ||\n parentType === \"BinaryExpression\" ||\n parentType === \"LogicalExpression\" ||\n (parentType === \"ConditionalExpression\" && parent.test === node) ||\n parentType === \"AwaitExpression\" ||\n isTSTypeExpression(parentType)\n ) {\n return true;\n }\n\n return UnaryLike(node, parent);\n}\n\nexport { ConditionalExpression as ArrowFunctionExpression };\n\nexport function OptionalMemberExpression(\n node: t.OptionalMemberExpression,\n parent: t.Node,\n): boolean {\n return (\n (isCallExpression(parent) && parent.callee === node) ||\n (isMemberExpression(parent) && parent.object === node)\n );\n}\n\nexport { OptionalMemberExpression as OptionalCallExpression };\n\nexport function AssignmentExpression(\n node: t.AssignmentExpression,\n parent: t.Node,\n tokenContext: number,\n): boolean {\n if (\n needsParenBeforeExpressionBrace(tokenContext) &&\n isObjectPattern(node.left)\n ) {\n return true;\n } else {\n return ConditionalExpression(node, parent);\n }\n}\n\nexport function LogicalExpression(\n node: t.LogicalExpression,\n parent: t.Node,\n): boolean {\n const parentType = parent.type;\n if (isTSTypeExpression(parentType)) return true;\n if (parentType !== \"LogicalExpression\") return false;\n switch (node.operator) {\n case \"||\":\n return parent.operator === \"??\" || parent.operator === \"&&\";\n case \"&&\":\n return parent.operator === \"??\";\n case \"??\":\n return parent.operator !== \"??\";\n }\n}\n\nexport function Identifier(\n node: t.Identifier,\n parent: t.Node,\n tokenContext: number,\n getRawIdentifier: (node: t.Identifier) => string,\n): boolean {\n const parentType = parent.type;\n // 13.15.2 AssignmentExpression RS: Evaluation\n // (fn) = function () {};\n if (\n node.extra?.parenthesized &&\n parentType === \"AssignmentExpression\" &&\n parent.left === node\n ) {\n const rightType = parent.right.type;\n if (\n (rightType === \"FunctionExpression\" || rightType === \"ClassExpression\") &&\n parent.right.id == null\n ) {\n return true;\n }\n }\n\n if (getRawIdentifier && getRawIdentifier(node) !== node.name) {\n return false;\n }\n\n // Non-strict code allows the identifier `let`, but it cannot occur as-is in\n // certain contexts to avoid ambiguity with contextual keyword `let`.\n if (node.name === \"let\") {\n // Some contexts only forbid `let [`, so check if the next token would\n // be the left bracket of a computed member expression.\n const isFollowedByBracket =\n isMemberExpression(parent, {\n object: node,\n computed: true,\n }) ||\n isOptionalMemberExpression(parent, {\n object: node,\n computed: true,\n optional: false,\n });\n if (\n isFollowedByBracket &&\n tokenContext &\n (TokenContext.expressionStatement |\n TokenContext.forInitHead |\n TokenContext.forInHead)\n ) {\n return true;\n }\n return Boolean(tokenContext & TokenContext.forOfHead);\n }\n\n // ECMAScript specifically forbids a for-of loop from starting with the\n // token sequence `for (async of`, because it would be ambiguous with\n // `for (async of => {};;)`, so we need to add extra parentheses.\n return (\n node.name === \"async\" &&\n isForOfStatement(parent, { left: node, await: false })\n );\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/generator/lib/node/whitespace.js b/node_modules/@babel/generator/lib/node/whitespace.js new file mode 100644 index 00000000..181b9566 --- /dev/null +++ b/node_modules/@babel/generator/lib/node/whitespace.js @@ -0,0 +1,145 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.nodes = void 0; +var _t = require("@babel/types"); +const { + FLIPPED_ALIAS_KEYS, + isArrayExpression, + isAssignmentExpression, + isBinary, + isBlockStatement, + isCallExpression, + isFunction, + isIdentifier, + isLiteral, + isMemberExpression, + isObjectExpression, + isOptionalCallExpression, + isOptionalMemberExpression, + isStringLiteral +} = _t; +function crawlInternal(node, state) { + if (!node) return state; + if (isMemberExpression(node) || isOptionalMemberExpression(node)) { + crawlInternal(node.object, state); + if (node.computed) crawlInternal(node.property, state); + } else if (isBinary(node) || isAssignmentExpression(node)) { + crawlInternal(node.left, state); + crawlInternal(node.right, state); + } else if (isCallExpression(node) || isOptionalCallExpression(node)) { + state.hasCall = true; + crawlInternal(node.callee, state); + } else if (isFunction(node)) { + state.hasFunction = true; + } else if (isIdentifier(node)) { + state.hasHelper = state.hasHelper || node.callee && isHelper(node.callee); + } + return state; +} +function crawl(node) { + return crawlInternal(node, { + hasCall: false, + hasFunction: false, + hasHelper: false + }); +} +function isHelper(node) { + if (!node) return false; + if (isMemberExpression(node)) { + return isHelper(node.object) || isHelper(node.property); + } else if (isIdentifier(node)) { + return node.name === "require" || node.name.charCodeAt(0) === 95; + } else if (isCallExpression(node)) { + return isHelper(node.callee); + } else if (isBinary(node) || isAssignmentExpression(node)) { + return isIdentifier(node.left) && isHelper(node.left) || isHelper(node.right); + } else { + return false; + } +} +function isType(node) { + return isLiteral(node) || isObjectExpression(node) || isArrayExpression(node) || isIdentifier(node) || isMemberExpression(node); +} +const nodes = exports.nodes = { + AssignmentExpression(node) { + const state = crawl(node.right); + if (state.hasCall && state.hasHelper || state.hasFunction) { + return state.hasFunction ? 1 | 2 : 2; + } + }, + SwitchCase(node, parent) { + return (!!node.consequent.length || parent.cases[0] === node ? 1 : 0) | (!node.consequent.length && parent.cases[parent.cases.length - 1] === node ? 2 : 0); + }, + LogicalExpression(node) { + if (isFunction(node.left) || isFunction(node.right)) { + return 2; + } + }, + Literal(node) { + if (isStringLiteral(node) && node.value === "use strict") { + return 2; + } + }, + CallExpression(node) { + if (isFunction(node.callee) || isHelper(node)) { + return 1 | 2; + } + }, + OptionalCallExpression(node) { + if (isFunction(node.callee)) { + return 1 | 2; + } + }, + VariableDeclaration(node) { + for (let i = 0; i < node.declarations.length; i++) { + const declar = node.declarations[i]; + let enabled = isHelper(declar.id) && !isType(declar.init); + if (!enabled && declar.init) { + const state = crawl(declar.init); + enabled = isHelper(declar.init) && state.hasCall || state.hasFunction; + } + if (enabled) { + return 1 | 2; + } + } + }, + IfStatement(node) { + if (isBlockStatement(node.consequent)) { + return 1 | 2; + } + } +}; +nodes.ObjectProperty = nodes.ObjectTypeProperty = nodes.ObjectMethod = function (node, parent) { + if (parent.properties[0] === node) { + return 1; + } +}; +nodes.ObjectTypeCallProperty = function (node, parent) { + var _parent$properties; + if (parent.callProperties[0] === node && !((_parent$properties = parent.properties) != null && _parent$properties.length)) { + return 1; + } +}; +nodes.ObjectTypeIndexer = function (node, parent) { + var _parent$properties2, _parent$callPropertie; + if (parent.indexers[0] === node && !((_parent$properties2 = parent.properties) != null && _parent$properties2.length) && !((_parent$callPropertie = parent.callProperties) != null && _parent$callPropertie.length)) { + return 1; + } +}; +nodes.ObjectTypeInternalSlot = function (node, parent) { + var _parent$properties3, _parent$callPropertie2, _parent$indexers; + if (parent.internalSlots[0] === node && !((_parent$properties3 = parent.properties) != null && _parent$properties3.length) && !((_parent$callPropertie2 = parent.callProperties) != null && _parent$callPropertie2.length) && !((_parent$indexers = parent.indexers) != null && _parent$indexers.length)) { + return 1; + } +}; +[["Function", true], ["Class", true], ["Loop", true], ["LabeledStatement", true], ["SwitchStatement", true], ["TryStatement", true]].forEach(function ([type, amounts]) { + [type].concat(FLIPPED_ALIAS_KEYS[type] || []).forEach(function (type) { + const ret = amounts ? 1 | 2 : 0; + nodes[type] = () => ret; + }); +}); + +//# sourceMappingURL=whitespace.js.map diff --git a/node_modules/@babel/generator/lib/node/whitespace.js.map b/node_modules/@babel/generator/lib/node/whitespace.js.map new file mode 100644 index 00000000..dea7ddc6 --- /dev/null +++ b/node_modules/@babel/generator/lib/node/whitespace.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_t","require","FLIPPED_ALIAS_KEYS","isArrayExpression","isAssignmentExpression","isBinary","isBlockStatement","isCallExpression","isFunction","isIdentifier","isLiteral","isMemberExpression","isObjectExpression","isOptionalCallExpression","isOptionalMemberExpression","isStringLiteral","crawlInternal","node","state","object","computed","property","left","right","hasCall","callee","hasFunction","hasHelper","isHelper","crawl","name","charCodeAt","isType","nodes","exports","AssignmentExpression","SwitchCase","parent","consequent","length","cases","LogicalExpression","Literal","value","CallExpression","OptionalCallExpression","VariableDeclaration","i","declarations","declar","enabled","id","init","IfStatement","ObjectProperty","ObjectTypeProperty","ObjectMethod","properties","ObjectTypeCallProperty","_parent$properties","callProperties","ObjectTypeIndexer","_parent$properties2","_parent$callPropertie","indexers","ObjectTypeInternalSlot","_parent$properties3","_parent$callPropertie2","_parent$indexers","internalSlots","forEach","type","amounts","concat","ret"],"sources":["../../src/node/whitespace.ts"],"sourcesContent":["import {\n FLIPPED_ALIAS_KEYS,\n isArrayExpression,\n isAssignmentExpression,\n isBinary,\n isBlockStatement,\n isCallExpression,\n isFunction,\n isIdentifier,\n isLiteral,\n isMemberExpression,\n isObjectExpression,\n isOptionalCallExpression,\n isOptionalMemberExpression,\n isStringLiteral,\n} from \"@babel/types\";\n\n// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\nimport type { NodeHandlers } from \"./index.ts\";\n\nimport type * as t from \"@babel/types\";\n\nconst enum WhitespaceFlag {\n before = 1 << 0,\n after = 1 << 1,\n}\n\nexport type { WhitespaceFlag };\n\nfunction crawlInternal(\n node: t.Node,\n state: { hasCall: boolean; hasFunction: boolean; hasHelper: boolean },\n) {\n if (!node) return state;\n\n if (isMemberExpression(node) || isOptionalMemberExpression(node)) {\n crawlInternal(node.object, state);\n if (node.computed) crawlInternal(node.property, state);\n } else if (isBinary(node) || isAssignmentExpression(node)) {\n crawlInternal(node.left, state);\n crawlInternal(node.right, state);\n } else if (isCallExpression(node) || isOptionalCallExpression(node)) {\n state.hasCall = true;\n crawlInternal(node.callee, state);\n } else if (isFunction(node)) {\n state.hasFunction = true;\n } else if (isIdentifier(node)) {\n state.hasHelper =\n // @ts-expect-error todo(flow->ts): node.callee is not really expected here…\n state.hasHelper || (node.callee && isHelper(node.callee));\n }\n\n return state;\n}\n\n/**\n * Crawl a node to test if it contains a CallExpression, a Function, or a Helper.\n *\n * @example\n * crawl(node)\n * // { hasCall: false, hasFunction: true, hasHelper: false }\n */\n\nfunction crawl(node: t.Node) {\n return crawlInternal(node, {\n hasCall: false,\n hasFunction: false,\n hasHelper: false,\n });\n}\n\n/**\n * Test if a node is or has a helper.\n */\n\nfunction isHelper(node: t.Node): boolean {\n if (!node) return false;\n\n if (isMemberExpression(node)) {\n return isHelper(node.object) || isHelper(node.property);\n } else if (isIdentifier(node)) {\n return (\n node.name === \"require\" ||\n node.name.charCodeAt(0) === charCodes.underscore\n );\n } else if (isCallExpression(node)) {\n return isHelper(node.callee);\n } else if (isBinary(node) || isAssignmentExpression(node)) {\n return (\n (isIdentifier(node.left) && isHelper(node.left)) || isHelper(node.right)\n );\n } else {\n return false;\n }\n}\n\nfunction isType(node: t.Node) {\n return (\n isLiteral(node) ||\n isObjectExpression(node) ||\n isArrayExpression(node) ||\n isIdentifier(node) ||\n isMemberExpression(node)\n );\n}\n\n/**\n * Tests for node types that need whitespace.\n */\n\nexport const nodes: NodeHandlers = {\n /**\n * Test if AssignmentExpression needs whitespace.\n */\n\n AssignmentExpression(node: t.AssignmentExpression): WhitespaceFlag {\n const state = crawl(node.right);\n if ((state.hasCall && state.hasHelper) || state.hasFunction) {\n return state.hasFunction\n ? WhitespaceFlag.before | WhitespaceFlag.after\n : WhitespaceFlag.after;\n }\n },\n\n /**\n * Test if SwitchCase needs whitespace.\n */\n\n SwitchCase(node: t.SwitchCase, parent: t.SwitchStatement): WhitespaceFlag {\n return (\n (!!node.consequent.length || parent.cases[0] === node\n ? WhitespaceFlag.before\n : 0) |\n (!node.consequent.length && parent.cases[parent.cases.length - 1] === node\n ? WhitespaceFlag.after\n : 0)\n );\n },\n\n /**\n * Test if LogicalExpression needs whitespace.\n */\n\n LogicalExpression(node: t.LogicalExpression): WhitespaceFlag {\n if (isFunction(node.left) || isFunction(node.right)) {\n return WhitespaceFlag.after;\n }\n },\n\n /**\n * Test if Literal needs whitespace.\n */\n\n Literal(node: t.Literal): WhitespaceFlag {\n if (isStringLiteral(node) && node.value === \"use strict\") {\n return WhitespaceFlag.after;\n }\n },\n\n /**\n * Test if CallExpressionish needs whitespace.\n */\n\n CallExpression(node: t.CallExpression): WhitespaceFlag {\n if (isFunction(node.callee) || isHelper(node)) {\n return WhitespaceFlag.before | WhitespaceFlag.after;\n }\n },\n\n OptionalCallExpression(node: t.OptionalCallExpression): WhitespaceFlag {\n if (isFunction(node.callee)) {\n return WhitespaceFlag.before | WhitespaceFlag.after;\n }\n },\n\n /**\n * Test if VariableDeclaration needs whitespace.\n */\n\n VariableDeclaration(node: t.VariableDeclaration): WhitespaceFlag {\n for (let i = 0; i < node.declarations.length; i++) {\n const declar = node.declarations[i];\n\n let enabled = isHelper(declar.id) && !isType(declar.init);\n if (!enabled && declar.init) {\n const state = crawl(declar.init);\n enabled = (isHelper(declar.init) && state.hasCall) || state.hasFunction;\n }\n\n if (enabled) {\n return WhitespaceFlag.before | WhitespaceFlag.after;\n }\n }\n },\n\n /**\n * Test if IfStatement needs whitespace.\n */\n\n IfStatement(node: t.IfStatement): WhitespaceFlag {\n if (isBlockStatement(node.consequent)) {\n return WhitespaceFlag.before | WhitespaceFlag.after;\n }\n },\n};\n\n/**\n * Test if Property needs whitespace.\n */\n\nnodes.ObjectProperty =\n nodes.ObjectTypeProperty =\n nodes.ObjectMethod =\n function (\n node: t.ObjectProperty | t.ObjectTypeProperty | t.ObjectMethod,\n parent: t.ObjectExpression,\n ): WhitespaceFlag {\n if (parent.properties[0] === node) {\n return WhitespaceFlag.before;\n }\n };\n\nnodes.ObjectTypeCallProperty = function (\n node: t.ObjectTypeCallProperty,\n parent: t.ObjectTypeAnnotation,\n): WhitespaceFlag {\n if (parent.callProperties[0] === node && !parent.properties?.length) {\n return WhitespaceFlag.before;\n }\n};\n\nnodes.ObjectTypeIndexer = function (\n node: t.ObjectTypeIndexer,\n parent: t.ObjectTypeAnnotation,\n): WhitespaceFlag {\n if (\n parent.indexers[0] === node &&\n !parent.properties?.length &&\n !parent.callProperties?.length\n ) {\n return WhitespaceFlag.before;\n }\n};\n\nnodes.ObjectTypeInternalSlot = function (\n node: t.ObjectTypeInternalSlot,\n parent: t.ObjectTypeAnnotation,\n): WhitespaceFlag {\n if (\n parent.internalSlots[0] === node &&\n !parent.properties?.length &&\n !parent.callProperties?.length &&\n !parent.indexers?.length\n ) {\n return WhitespaceFlag.before;\n }\n};\n\n/**\n * Add whitespace tests for nodes and their aliases.\n */\n\n(\n [\n [\"Function\", true],\n [\"Class\", true],\n [\"Loop\", true],\n [\"LabeledStatement\", true],\n [\"SwitchStatement\", true],\n [\"TryStatement\", true],\n ] as const\n).forEach(function ([type, amounts]) {\n [type as string]\n .concat(FLIPPED_ALIAS_KEYS[type] || [])\n .forEach(function (type) {\n const ret = amounts ? WhitespaceFlag.before | WhitespaceFlag.after : 0;\n nodes[type] = () => ret;\n });\n});\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/generator/lib/printer.js b/node_modules/@babel/generator/lib/printer.js new file mode 100644 index 00000000..2977e633 --- /dev/null +++ b/node_modules/@babel/generator/lib/printer.js @@ -0,0 +1,781 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _buffer = require("./buffer.js"); +var _index = require("./node/index.js"); +var n = _index; +var _t = require("@babel/types"); +var _tokenMap = require("./token-map.js"); +var generatorFunctions = require("./generators/index.js"); +var _deprecated = require("./generators/deprecated.js"); +const { + isExpression, + isFunction, + isStatement, + isClassBody, + isTSInterfaceBody, + isTSEnumMember +} = _t; +const SCIENTIFIC_NOTATION = /e/i; +const ZERO_DECIMAL_INTEGER = /\.0+$/; +const HAS_NEWLINE = /[\n\r\u2028\u2029]/; +const HAS_NEWLINE_OR_BlOCK_COMMENT_END = /[\n\r\u2028\u2029]|\*\//; +function commentIsNewline(c) { + return c.type === "CommentLine" || HAS_NEWLINE.test(c.value); +} +const { + needsParens +} = n; +class Printer { + constructor(format, map, tokens, originalCode) { + this.tokenContext = _index.TokenContext.normal; + this._tokens = null; + this._originalCode = null; + this._currentNode = null; + this._indent = 0; + this._indentRepeat = 0; + this._insideAux = false; + this._noLineTerminator = false; + this._noLineTerminatorAfterNode = null; + this._printAuxAfterOnNextUserNode = false; + this._printedComments = new Set(); + this._endsWithInteger = false; + this._endsWithWord = false; + this._endsWithDiv = false; + this._lastCommentLine = 0; + this._endsWithInnerRaw = false; + this._indentInnerComments = true; + this.tokenMap = null; + this._boundGetRawIdentifier = this._getRawIdentifier.bind(this); + this._printSemicolonBeforeNextNode = -1; + this._printSemicolonBeforeNextToken = -1; + this.format = format; + this._tokens = tokens; + this._originalCode = originalCode; + this._indentRepeat = format.indent.style.length; + this._inputMap = map == null ? void 0 : map._inputMap; + this._buf = new _buffer.default(map, format.indent.style[0]); + } + enterForStatementInit() { + this.tokenContext |= _index.TokenContext.forInitHead | _index.TokenContext.forInOrInitHeadAccumulate; + return () => this.tokenContext = _index.TokenContext.normal; + } + enterForXStatementInit(isForOf) { + if (isForOf) { + this.tokenContext |= _index.TokenContext.forOfHead; + return null; + } else { + this.tokenContext |= _index.TokenContext.forInHead | _index.TokenContext.forInOrInitHeadAccumulate; + return () => this.tokenContext = _index.TokenContext.normal; + } + } + enterDelimited() { + const oldTokenContext = this.tokenContext; + const oldNoLineTerminatorAfterNode = this._noLineTerminatorAfterNode; + if (!(oldTokenContext & _index.TokenContext.forInOrInitHeadAccumulate) && oldNoLineTerminatorAfterNode === null) { + return () => {}; + } + this._noLineTerminatorAfterNode = null; + this.tokenContext = _index.TokenContext.normal; + return () => { + this._noLineTerminatorAfterNode = oldNoLineTerminatorAfterNode; + this.tokenContext = oldTokenContext; + }; + } + generate(ast) { + if (this.format.preserveFormat) { + this.tokenMap = new _tokenMap.TokenMap(ast, this._tokens, this._originalCode); + } + this.print(ast); + this._maybeAddAuxComment(); + return this._buf.get(); + } + indent() { + const { + format + } = this; + if (format.preserveFormat || format.compact || format.concise) { + return; + } + this._indent++; + } + dedent() { + const { + format + } = this; + if (format.preserveFormat || format.compact || format.concise) { + return; + } + this._indent--; + } + semicolon(force = false) { + this._maybeAddAuxComment(); + if (force) { + this._appendChar(59); + this._noLineTerminator = false; + return; + } + if (this.tokenMap) { + const node = this._currentNode; + if (node.start != null && node.end != null) { + if (!this.tokenMap.endMatches(node, ";")) { + this._printSemicolonBeforeNextNode = this._buf.getCurrentLine(); + return; + } + const indexes = this.tokenMap.getIndexes(this._currentNode); + this._catchUpTo(this._tokens[indexes[indexes.length - 1]].loc.start); + } + } + this._queue(59); + this._noLineTerminator = false; + } + rightBrace(node) { + if (this.format.minified) { + this._buf.removeLastSemicolon(); + } + this.sourceWithOffset("end", node.loc, -1); + this.tokenChar(125); + } + rightParens(node) { + this.sourceWithOffset("end", node.loc, -1); + this.tokenChar(41); + } + space(force = false) { + const { + format + } = this; + if (format.compact || format.preserveFormat) return; + if (force) { + this._space(); + } else if (this._buf.hasContent()) { + const lastCp = this.getLastChar(); + if (lastCp !== 32 && lastCp !== 10) { + this._space(); + } + } + } + word(str, noLineTerminatorAfter = false) { + this.tokenContext &= _index.TokenContext.forInOrInitHeadAccumulatePassThroughMask; + this._maybePrintInnerComments(str); + this._maybeAddAuxComment(); + if (this.tokenMap) this._catchUpToCurrentToken(str); + if (this._endsWithWord || this._endsWithDiv && str.charCodeAt(0) === 47) { + this._space(); + } + this._append(str, false); + this._endsWithWord = true; + this._noLineTerminator = noLineTerminatorAfter; + } + number(str, number) { + function isNonDecimalLiteral(str) { + if (str.length > 2 && str.charCodeAt(0) === 48) { + const secondChar = str.charCodeAt(1); + return secondChar === 98 || secondChar === 111 || secondChar === 120; + } + return false; + } + this.word(str); + this._endsWithInteger = Number.isInteger(number) && !isNonDecimalLiteral(str) && !SCIENTIFIC_NOTATION.test(str) && !ZERO_DECIMAL_INTEGER.test(str) && str.charCodeAt(str.length - 1) !== 46; + } + token(str, maybeNewline = false, occurrenceCount = 0) { + this.tokenContext &= _index.TokenContext.forInOrInitHeadAccumulatePassThroughMask; + this._maybePrintInnerComments(str, occurrenceCount); + this._maybeAddAuxComment(); + if (this.tokenMap) this._catchUpToCurrentToken(str, occurrenceCount); + const lastChar = this.getLastChar(); + const strFirst = str.charCodeAt(0); + if (lastChar === 33 && (str === "--" || strFirst === 61) || strFirst === 43 && lastChar === 43 || strFirst === 45 && lastChar === 45 || strFirst === 46 && this._endsWithInteger) { + this._space(); + } + this._append(str, maybeNewline); + this._noLineTerminator = false; + } + tokenChar(char) { + this.tokenContext &= _index.TokenContext.forInOrInitHeadAccumulatePassThroughMask; + const str = String.fromCharCode(char); + this._maybePrintInnerComments(str); + this._maybeAddAuxComment(); + if (this.tokenMap) this._catchUpToCurrentToken(str); + const lastChar = this.getLastChar(); + if (char === 43 && lastChar === 43 || char === 45 && lastChar === 45 || char === 46 && this._endsWithInteger) { + this._space(); + } + this._appendChar(char); + this._noLineTerminator = false; + } + newline(i = 1, force) { + if (i <= 0) return; + if (!force) { + if (this.format.retainLines || this.format.compact) return; + if (this.format.concise) { + this.space(); + return; + } + } + if (i > 2) i = 2; + i -= this._buf.getNewlineCount(); + for (let j = 0; j < i; j++) { + this._newline(); + } + return; + } + endsWith(char) { + return this.getLastChar() === char; + } + getLastChar() { + return this._buf.getLastChar(); + } + endsWithCharAndNewline() { + return this._buf.endsWithCharAndNewline(); + } + removeTrailingNewline() { + this._buf.removeTrailingNewline(); + } + exactSource(loc, cb) { + if (!loc) { + cb(); + return; + } + this._catchUp("start", loc); + this._buf.exactSource(loc, cb); + } + source(prop, loc) { + if (!loc) return; + this._catchUp(prop, loc); + this._buf.source(prop, loc); + } + sourceWithOffset(prop, loc, columnOffset) { + if (!loc || this.format.preserveFormat) return; + this._catchUp(prop, loc); + this._buf.sourceWithOffset(prop, loc, columnOffset); + } + sourceIdentifierName(identifierName, pos) { + if (!this._buf._canMarkIdName) return; + const sourcePosition = this._buf._sourcePosition; + sourcePosition.identifierNamePos = pos; + sourcePosition.identifierName = identifierName; + } + _space() { + this._queue(32); + } + _newline() { + this._queue(10); + } + _catchUpToCurrentToken(str, occurrenceCount = 0) { + const token = this.tokenMap.findMatching(this._currentNode, str, occurrenceCount); + if (token) this._catchUpTo(token.loc.start); + if (this._printSemicolonBeforeNextToken !== -1 && this._printSemicolonBeforeNextToken === this._buf.getCurrentLine()) { + this._buf.appendChar(59); + this._endsWithWord = false; + this._endsWithInteger = false; + this._endsWithDiv = false; + } + this._printSemicolonBeforeNextToken = -1; + this._printSemicolonBeforeNextNode = -1; + } + _append(str, maybeNewline) { + this._maybeIndent(str.charCodeAt(0)); + this._buf.append(str, maybeNewline); + this._endsWithWord = false; + this._endsWithInteger = false; + this._endsWithDiv = false; + } + _appendChar(char) { + this._maybeIndent(char); + this._buf.appendChar(char); + this._endsWithWord = false; + this._endsWithInteger = false; + this._endsWithDiv = false; + } + _queue(char) { + this._maybeIndent(char); + this._buf.queue(char); + this._endsWithWord = false; + this._endsWithInteger = false; + } + _maybeIndent(firstChar) { + if (this._indent && firstChar !== 10 && this.endsWith(10)) { + this._buf.queueIndentation(this._getIndent()); + } + } + _shouldIndent(firstChar) { + if (this._indent && firstChar !== 10 && this.endsWith(10)) { + return true; + } + } + catchUp(line) { + if (!this.format.retainLines) return; + const count = line - this._buf.getCurrentLine(); + for (let i = 0; i < count; i++) { + this._newline(); + } + } + _catchUp(prop, loc) { + const { + format + } = this; + if (!format.preserveFormat) { + if (format.retainLines && loc != null && loc[prop]) { + this.catchUp(loc[prop].line); + } + return; + } + const pos = loc == null ? void 0 : loc[prop]; + if (pos != null) this._catchUpTo(pos); + } + _catchUpTo({ + line, + column, + index + }) { + const count = line - this._buf.getCurrentLine(); + if (count > 0 && this._noLineTerminator) { + return; + } + for (let i = 0; i < count; i++) { + this._newline(); + } + const spacesCount = count > 0 ? column : column - this._buf.getCurrentColumn(); + if (spacesCount > 0) { + const spaces = this._originalCode ? this._originalCode.slice(index - spacesCount, index).replace(/[^\t\x0B\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]/gu, " ") : " ".repeat(spacesCount); + this._append(spaces, false); + } + } + _getIndent() { + return this._indentRepeat * this._indent; + } + printTerminatorless(node) { + this._noLineTerminator = true; + this.print(node); + } + print(node, noLineTerminatorAfter, trailingCommentsLineOffset) { + var _node$extra, _node$leadingComments, _node$leadingComments2; + if (!node) return; + this._endsWithInnerRaw = false; + const nodeType = node.type; + const format = this.format; + const oldConcise = format.concise; + if (node._compact) { + format.concise = true; + } + const printMethod = this[nodeType]; + if (printMethod === undefined) { + throw new ReferenceError(`unknown node of type ${JSON.stringify(nodeType)} with constructor ${JSON.stringify(node.constructor.name)}`); + } + const parent = this._currentNode; + this._currentNode = node; + if (this.tokenMap) { + this._printSemicolonBeforeNextToken = this._printSemicolonBeforeNextNode; + } + const oldInAux = this._insideAux; + this._insideAux = node.loc == null; + this._maybeAddAuxComment(this._insideAux && !oldInAux); + const parenthesized = (_node$extra = node.extra) == null ? void 0 : _node$extra.parenthesized; + let shouldPrintParens = parenthesized && format.preserveFormat || parenthesized && format.retainFunctionParens && nodeType === "FunctionExpression" || needsParens(node, parent, this.tokenContext, format.preserveFormat ? this._boundGetRawIdentifier : undefined); + if (!shouldPrintParens && parenthesized && (_node$leadingComments = node.leadingComments) != null && _node$leadingComments.length && node.leadingComments[0].type === "CommentBlock") { + const parentType = parent == null ? void 0 : parent.type; + switch (parentType) { + case "ExpressionStatement": + case "VariableDeclarator": + case "AssignmentExpression": + case "ReturnStatement": + break; + case "CallExpression": + case "OptionalCallExpression": + case "NewExpression": + if (parent.callee !== node) break; + default: + shouldPrintParens = true; + } + } + let indentParenthesized = false; + if (!shouldPrintParens && this._noLineTerminator && ((_node$leadingComments2 = node.leadingComments) != null && _node$leadingComments2.some(commentIsNewline) || this.format.retainLines && node.loc && node.loc.start.line > this._buf.getCurrentLine())) { + shouldPrintParens = true; + indentParenthesized = true; + } + let oldNoLineTerminatorAfterNode; + let oldTokenContext; + if (!shouldPrintParens) { + noLineTerminatorAfter || (noLineTerminatorAfter = parent && this._noLineTerminatorAfterNode === parent && n.isLastChild(parent, node)); + if (noLineTerminatorAfter) { + var _node$trailingComment; + if ((_node$trailingComment = node.trailingComments) != null && _node$trailingComment.some(commentIsNewline)) { + if (isExpression(node)) shouldPrintParens = true; + } else { + oldNoLineTerminatorAfterNode = this._noLineTerminatorAfterNode; + this._noLineTerminatorAfterNode = node; + } + } + } + if (shouldPrintParens) { + this.tokenChar(40); + if (indentParenthesized) this.indent(); + this._endsWithInnerRaw = false; + if (this.tokenContext & _index.TokenContext.forInOrInitHeadAccumulate) { + oldTokenContext = this.tokenContext; + this.tokenContext = _index.TokenContext.normal; + } + oldNoLineTerminatorAfterNode = this._noLineTerminatorAfterNode; + this._noLineTerminatorAfterNode = null; + } + this._lastCommentLine = 0; + this._printLeadingComments(node, parent); + const loc = nodeType === "Program" || nodeType === "File" ? null : node.loc; + this.exactSource(loc, printMethod.bind(this, node, parent)); + if (shouldPrintParens) { + this._printTrailingComments(node, parent); + if (indentParenthesized) { + this.dedent(); + this.newline(); + } + this.tokenChar(41); + this._noLineTerminator = noLineTerminatorAfter; + if (oldTokenContext) this.tokenContext = oldTokenContext; + } else if (noLineTerminatorAfter && !this._noLineTerminator) { + this._noLineTerminator = true; + this._printTrailingComments(node, parent); + } else { + this._printTrailingComments(node, parent, trailingCommentsLineOffset); + } + this._currentNode = parent; + format.concise = oldConcise; + this._insideAux = oldInAux; + if (oldNoLineTerminatorAfterNode !== undefined) { + this._noLineTerminatorAfterNode = oldNoLineTerminatorAfterNode; + } + this._endsWithInnerRaw = false; + } + _maybeAddAuxComment(enteredPositionlessNode) { + if (enteredPositionlessNode) this._printAuxBeforeComment(); + if (!this._insideAux) this._printAuxAfterComment(); + } + _printAuxBeforeComment() { + if (this._printAuxAfterOnNextUserNode) return; + this._printAuxAfterOnNextUserNode = true; + const comment = this.format.auxiliaryCommentBefore; + if (comment) { + this._printComment({ + type: "CommentBlock", + value: comment + }, 0); + } + } + _printAuxAfterComment() { + if (!this._printAuxAfterOnNextUserNode) return; + this._printAuxAfterOnNextUserNode = false; + const comment = this.format.auxiliaryCommentAfter; + if (comment) { + this._printComment({ + type: "CommentBlock", + value: comment + }, 0); + } + } + getPossibleRaw(node) { + const extra = node.extra; + if ((extra == null ? void 0 : extra.raw) != null && extra.rawValue != null && node.value === extra.rawValue) { + return extra.raw; + } + } + printJoin(nodes, statement, indent, separator, printTrailingSeparator, addNewlines, iterator, trailingCommentsLineOffset) { + if (!(nodes != null && nodes.length)) return; + if (indent == null && this.format.retainLines) { + var _nodes$0$loc; + const startLine = (_nodes$0$loc = nodes[0].loc) == null ? void 0 : _nodes$0$loc.start.line; + if (startLine != null && startLine !== this._buf.getCurrentLine()) { + indent = true; + } + } + if (indent) this.indent(); + const newlineOpts = { + addNewlines: addNewlines, + nextNodeStartLine: 0 + }; + const boundSeparator = separator == null ? void 0 : separator.bind(this); + const len = nodes.length; + for (let i = 0; i < len; i++) { + const node = nodes[i]; + if (!node) continue; + if (statement) this._printNewline(i === 0, newlineOpts); + this.print(node, undefined, trailingCommentsLineOffset || 0); + iterator == null || iterator(node, i); + if (boundSeparator != null) { + if (i < len - 1) boundSeparator(i, false);else if (printTrailingSeparator) boundSeparator(i, true); + } + if (statement) { + var _node$trailingComment2; + if (!((_node$trailingComment2 = node.trailingComments) != null && _node$trailingComment2.length)) { + this._lastCommentLine = 0; + } + if (i + 1 === len) { + this.newline(1); + } else { + var _nextNode$loc; + const nextNode = nodes[i + 1]; + newlineOpts.nextNodeStartLine = ((_nextNode$loc = nextNode.loc) == null ? void 0 : _nextNode$loc.start.line) || 0; + this._printNewline(true, newlineOpts); + } + } + } + if (indent) this.dedent(); + } + printAndIndentOnComments(node) { + const indent = node.leadingComments && node.leadingComments.length > 0; + if (indent) this.indent(); + this.print(node); + if (indent) this.dedent(); + } + printBlock(parent) { + const node = parent.body; + if (node.type !== "EmptyStatement") { + this.space(); + } + this.print(node); + } + _printTrailingComments(node, parent, lineOffset) { + const { + innerComments, + trailingComments + } = node; + if (innerComments != null && innerComments.length) { + this._printComments(2, innerComments, node, parent, lineOffset); + } + if (trailingComments != null && trailingComments.length) { + this._printComments(2, trailingComments, node, parent, lineOffset); + } + } + _printLeadingComments(node, parent) { + const comments = node.leadingComments; + if (!(comments != null && comments.length)) return; + this._printComments(0, comments, node, parent); + } + _maybePrintInnerComments(nextTokenStr, nextTokenOccurrenceCount) { + if (this._endsWithInnerRaw) { + var _this$tokenMap; + this.printInnerComments((_this$tokenMap = this.tokenMap) == null ? void 0 : _this$tokenMap.findMatching(this._currentNode, nextTokenStr, nextTokenOccurrenceCount)); + } + this._endsWithInnerRaw = true; + this._indentInnerComments = true; + } + printInnerComments(nextToken) { + const node = this._currentNode; + const comments = node.innerComments; + if (!(comments != null && comments.length)) return; + const hasSpace = this.endsWith(32); + const indent = this._indentInnerComments; + const printedCommentsCount = this._printedComments.size; + if (indent) this.indent(); + this._printComments(1, comments, node, undefined, undefined, nextToken); + if (hasSpace && printedCommentsCount !== this._printedComments.size) { + this.space(); + } + if (indent) this.dedent(); + } + noIndentInnerCommentsHere() { + this._indentInnerComments = false; + } + printSequence(nodes, indent, trailingCommentsLineOffset, addNewlines) { + this.printJoin(nodes, true, indent != null ? indent : false, undefined, undefined, addNewlines, undefined, trailingCommentsLineOffset); + } + printList(items, printTrailingSeparator, statement, indent, separator, iterator) { + this.printJoin(items, statement, indent, separator != null ? separator : commaSeparator, printTrailingSeparator, undefined, iterator); + } + shouldPrintTrailingComma(listEnd) { + if (!this.tokenMap) return null; + const listEndIndex = this.tokenMap.findLastIndex(this._currentNode, token => this.tokenMap.matchesOriginal(token, listEnd)); + if (listEndIndex <= 0) return null; + return this.tokenMap.matchesOriginal(this._tokens[listEndIndex - 1], ","); + } + _printNewline(newLine, opts) { + const format = this.format; + if (format.retainLines || format.compact) return; + if (format.concise) { + this.space(); + return; + } + if (!newLine) { + return; + } + const startLine = opts.nextNodeStartLine; + const lastCommentLine = this._lastCommentLine; + if (startLine > 0 && lastCommentLine > 0) { + const offset = startLine - lastCommentLine; + if (offset >= 0) { + this.newline(offset || 1); + return; + } + } + if (this._buf.hasContent()) { + this.newline(1); + } + } + _shouldPrintComment(comment, nextToken) { + if (comment.ignore) return 0; + if (this._printedComments.has(comment)) return 0; + if (this._noLineTerminator && HAS_NEWLINE_OR_BlOCK_COMMENT_END.test(comment.value)) { + return 2; + } + if (nextToken && this.tokenMap) { + const commentTok = this.tokenMap.find(this._currentNode, token => token.value === comment.value); + if (commentTok && commentTok.start > nextToken.start) { + return 2; + } + } + this._printedComments.add(comment); + if (!this.format.shouldPrintComment(comment.value)) { + return 0; + } + return 1; + } + _printComment(comment, skipNewLines) { + const noLineTerminator = this._noLineTerminator; + const isBlockComment = comment.type === "CommentBlock"; + const printNewLines = isBlockComment && skipNewLines !== 1 && !this._noLineTerminator; + if (printNewLines && this._buf.hasContent() && skipNewLines !== 2) { + this.newline(1); + } + const lastCharCode = this.getLastChar(); + if (lastCharCode !== 91 && lastCharCode !== 123 && lastCharCode !== 40) { + this.space(); + } + let val; + if (isBlockComment) { + val = `/*${comment.value}*/`; + if (this.format.indent.adjustMultilineComment) { + var _comment$loc; + const offset = (_comment$loc = comment.loc) == null ? void 0 : _comment$loc.start.column; + if (offset) { + const newlineRegex = new RegExp("\\n\\s{1," + offset + "}", "g"); + val = val.replace(newlineRegex, "\n"); + } + if (this.format.concise) { + val = val.replace(/\n(?!$)/g, `\n`); + } else { + let indentSize = this.format.retainLines ? 0 : this._buf.getCurrentColumn(); + if (this._shouldIndent(47) || this.format.retainLines) { + indentSize += this._getIndent(); + } + val = val.replace(/\n(?!$)/g, `\n${" ".repeat(indentSize)}`); + } + } + } else if (!noLineTerminator) { + val = `//${comment.value}`; + } else { + val = `/*${comment.value}*/`; + } + if (this._endsWithDiv) this._space(); + if (this.tokenMap) { + const { + _printSemicolonBeforeNextToken, + _printSemicolonBeforeNextNode + } = this; + this._printSemicolonBeforeNextToken = -1; + this._printSemicolonBeforeNextNode = -1; + this.source("start", comment.loc); + this._append(val, isBlockComment); + this._printSemicolonBeforeNextNode = _printSemicolonBeforeNextNode; + this._printSemicolonBeforeNextToken = _printSemicolonBeforeNextToken; + } else { + this.source("start", comment.loc); + this._append(val, isBlockComment); + } + if (!isBlockComment && !noLineTerminator) { + this.newline(1, true); + } + if (printNewLines && skipNewLines !== 3) { + this.newline(1); + } + } + _printComments(type, comments, node, parent, lineOffset = 0, nextToken) { + const nodeLoc = node.loc; + const len = comments.length; + let hasLoc = !!nodeLoc; + const nodeStartLine = hasLoc ? nodeLoc.start.line : 0; + const nodeEndLine = hasLoc ? nodeLoc.end.line : 0; + let lastLine = 0; + let leadingCommentNewline = 0; + const maybeNewline = this._noLineTerminator ? function () {} : this.newline.bind(this); + for (let i = 0; i < len; i++) { + const comment = comments[i]; + const shouldPrint = this._shouldPrintComment(comment, nextToken); + if (shouldPrint === 2) { + hasLoc = false; + break; + } + if (hasLoc && comment.loc && shouldPrint === 1) { + const commentStartLine = comment.loc.start.line; + const commentEndLine = comment.loc.end.line; + if (type === 0) { + let offset = 0; + if (i === 0) { + if (this._buf.hasContent() && (comment.type === "CommentLine" || commentStartLine !== commentEndLine)) { + offset = leadingCommentNewline = 1; + } + } else { + offset = commentStartLine - lastLine; + } + lastLine = commentEndLine; + maybeNewline(offset); + this._printComment(comment, 1); + if (i + 1 === len) { + maybeNewline(Math.max(nodeStartLine - lastLine, leadingCommentNewline)); + lastLine = nodeStartLine; + } + } else if (type === 1) { + const offset = commentStartLine - (i === 0 ? nodeStartLine : lastLine); + lastLine = commentEndLine; + maybeNewline(offset); + this._printComment(comment, 1); + if (i + 1 === len) { + maybeNewline(Math.min(1, nodeEndLine - lastLine)); + lastLine = nodeEndLine; + } + } else { + const offset = commentStartLine - (i === 0 ? nodeEndLine - lineOffset : lastLine); + lastLine = commentEndLine; + maybeNewline(offset); + this._printComment(comment, 1); + } + } else { + hasLoc = false; + if (shouldPrint !== 1) { + continue; + } + if (len === 1) { + const singleLine = comment.loc ? comment.loc.start.line === comment.loc.end.line : !HAS_NEWLINE.test(comment.value); + const shouldSkipNewline = singleLine && !isStatement(node) && !isClassBody(parent) && !isTSInterfaceBody(parent) && !isTSEnumMember(node); + if (type === 0) { + this._printComment(comment, shouldSkipNewline && node.type !== "ObjectExpression" || singleLine && isFunction(parent, { + body: node + }) ? 1 : 0); + } else if (shouldSkipNewline && type === 2) { + this._printComment(comment, 1); + } else { + this._printComment(comment, 0); + } + } else if (type === 1 && !(node.type === "ObjectExpression" && node.properties.length > 1) && node.type !== "ClassBody" && node.type !== "TSInterfaceBody") { + this._printComment(comment, i === 0 ? 2 : i === len - 1 ? 3 : 0); + } else { + this._printComment(comment, 0); + } + } + } + if (type === 2 && hasLoc && lastLine) { + this._lastCommentLine = lastLine; + } + } +} +Object.assign(Printer.prototype, generatorFunctions); +{ + (0, _deprecated.addDeprecatedGenerators)(Printer); +} +var _default = exports.default = Printer; +function commaSeparator(occurrenceCount, last) { + this.token(",", false, occurrenceCount); + if (!last) this.space(); +} + +//# sourceMappingURL=printer.js.map diff --git a/node_modules/@babel/generator/lib/printer.js.map b/node_modules/@babel/generator/lib/printer.js.map new file mode 100644 index 00000000..de4027ee --- /dev/null +++ b/node_modules/@babel/generator/lib/printer.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_buffer","require","_index","n","_t","_tokenMap","generatorFunctions","_deprecated","isExpression","isFunction","isStatement","isClassBody","isTSInterfaceBody","isTSEnumMember","SCIENTIFIC_NOTATION","ZERO_DECIMAL_INTEGER","HAS_NEWLINE","HAS_NEWLINE_OR_BlOCK_COMMENT_END","commentIsNewline","c","type","test","value","needsParens","Printer","constructor","format","map","tokens","originalCode","tokenContext","TokenContext","normal","_tokens","_originalCode","_currentNode","_indent","_indentRepeat","_insideAux","_noLineTerminator","_noLineTerminatorAfterNode","_printAuxAfterOnNextUserNode","_printedComments","Set","_endsWithInteger","_endsWithWord","_endsWithDiv","_lastCommentLine","_endsWithInnerRaw","_indentInnerComments","tokenMap","_boundGetRawIdentifier","_getRawIdentifier","bind","_printSemicolonBeforeNextNode","_printSemicolonBeforeNextToken","indent","style","length","_inputMap","_buf","Buffer","enterForStatementInit","forInitHead","forInOrInitHeadAccumulate","enterForXStatementInit","isForOf","forOfHead","forInHead","enterDelimited","oldTokenContext","oldNoLineTerminatorAfterNode","generate","ast","preserveFormat","TokenMap","print","_maybeAddAuxComment","get","compact","concise","dedent","semicolon","force","_appendChar","node","start","end","endMatches","getCurrentLine","indexes","getIndexes","_catchUpTo","loc","_queue","rightBrace","minified","removeLastSemicolon","sourceWithOffset","token","rightParens","space","_space","hasContent","lastCp","getLastChar","word","str","noLineTerminatorAfter","forInOrInitHeadAccumulatePassThroughMask","_maybePrintInnerComments","_catchUpToCurrentToken","charCodeAt","_append","number","isNonDecimalLiteral","secondChar","Number","isInteger","maybeNewline","occurrenceCount","lastChar","strFirst","tokenChar","char","String","fromCharCode","newline","i","retainLines","getNewlineCount","j","_newline","endsWith","endsWithCharAndNewline","removeTrailingNewline","exactSource","cb","_catchUp","source","prop","columnOffset","sourceIdentifierName","identifierName","pos","_canMarkIdName","sourcePosition","_sourcePosition","identifierNamePos","findMatching","appendChar","_maybeIndent","append","queue","firstChar","queueIndentation","_getIndent","_shouldIndent","catchUp","line","count","column","index","spacesCount","getCurrentColumn","spaces","slice","replace","repeat","printTerminatorless","trailingCommentsLineOffset","_node$extra","_node$leadingComments","_node$leadingComments2","nodeType","oldConcise","_compact","printMethod","undefined","ReferenceError","JSON","stringify","name","parent","oldInAux","parenthesized","extra","shouldPrintParens","retainFunctionParens","leadingComments","parentType","callee","indentParenthesized","some","isLastChild","_node$trailingComment","trailingComments","_printLeadingComments","_printTrailingComments","enteredPositionlessNode","_printAuxBeforeComment","_printAuxAfterComment","comment","auxiliaryCommentBefore","_printComment","auxiliaryCommentAfter","getPossibleRaw","raw","rawValue","printJoin","nodes","statement","separator","printTrailingSeparator","addNewlines","iterator","_nodes$0$loc","startLine","newlineOpts","nextNodeStartLine","boundSeparator","len","_printNewline","_node$trailingComment2","_nextNode$loc","nextNode","printAndIndentOnComments","printBlock","body","lineOffset","innerComments","_printComments","comments","nextTokenStr","nextTokenOccurrenceCount","_this$tokenMap","printInnerComments","nextToken","hasSpace","printedCommentsCount","size","noIndentInnerCommentsHere","printSequence","printList","items","commaSeparator","shouldPrintTrailingComma","listEnd","listEndIndex","findLastIndex","matchesOriginal","newLine","opts","lastCommentLine","offset","_shouldPrintComment","ignore","has","commentTok","find","add","shouldPrintComment","skipNewLines","noLineTerminator","isBlockComment","printNewLines","lastCharCode","val","adjustMultilineComment","_comment$loc","newlineRegex","RegExp","indentSize","nodeLoc","hasLoc","nodeStartLine","nodeEndLine","lastLine","leadingCommentNewline","shouldPrint","commentStartLine","commentEndLine","Math","max","min","singleLine","shouldSkipNewline","properties","Object","assign","prototype","addDeprecatedGenerators","_default","exports","default","last"],"sources":["../src/printer.ts"],"sourcesContent":["import Buffer, { type Pos } from \"./buffer.ts\";\nimport type { Loc } from \"./buffer.ts\";\nimport * as n from \"./node/index.ts\";\nimport type * as t from \"@babel/types\";\nimport {\n isExpression,\n isFunction,\n isStatement,\n isClassBody,\n isTSInterfaceBody,\n isTSEnumMember,\n} from \"@babel/types\";\nimport type { Opts as jsescOptions } from \"jsesc\";\n\nimport { TokenMap } from \"./token-map.ts\";\nimport type { GeneratorOptions } from \"./index.ts\";\nimport * as generatorFunctions from \"./generators/index.ts\";\nimport {\n addDeprecatedGenerators,\n type DeprecatedBabel7ASTTypes,\n} from \"./generators/deprecated.ts\";\nimport type SourceMap from \"./source-map.ts\";\nimport type { TraceMap } from \"@jridgewell/trace-mapping\";\nimport type { Token } from \"@babel/parser\";\n\n// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\nconst SCIENTIFIC_NOTATION = /e/i;\nconst ZERO_DECIMAL_INTEGER = /\\.0+$/;\nconst HAS_NEWLINE = /[\\n\\r\\u2028\\u2029]/;\nconst HAS_NEWLINE_OR_BlOCK_COMMENT_END = /[\\n\\r\\u2028\\u2029]|\\*\\//;\n\nfunction commentIsNewline(c: t.Comment) {\n return c.type === \"CommentLine\" || HAS_NEWLINE.test(c.value);\n}\n\nconst { needsParens } = n;\n\nimport { TokenContext } from \"./node/index.ts\";\n\nconst enum COMMENT_TYPE {\n LEADING,\n INNER,\n TRAILING,\n}\n\nconst enum COMMENT_SKIP_NEWLINE {\n DEFAULT,\n ALL,\n LEADING,\n TRAILING,\n}\n\nconst enum PRINT_COMMENT_HINT {\n SKIP,\n ALLOW,\n DEFER,\n}\n\nexport type Format = {\n shouldPrintComment: (comment: string) => boolean;\n preserveFormat: boolean;\n retainLines: boolean;\n retainFunctionParens: boolean;\n comments: boolean;\n auxiliaryCommentBefore: string;\n auxiliaryCommentAfter: string;\n compact: boolean | \"auto\";\n minified: boolean;\n concise: boolean;\n indent: {\n adjustMultilineComment: boolean;\n style: string;\n };\n /**\n * @deprecated Removed in Babel 8, syntax type is always 'hash'\n */\n recordAndTupleSyntaxType?: GeneratorOptions[\"recordAndTupleSyntaxType\"];\n jsescOption: jsescOptions;\n /**\n * @deprecated Removed in Babel 8, use `jsescOption` instead\n */\n jsonCompatibleStrings?: boolean;\n /**\n * For use with the Hack-style pipe operator.\n * Changes what token is used for pipe bodies’ topic references.\n */\n topicToken?: GeneratorOptions[\"topicToken\"];\n /**\n * @deprecated Removed in Babel 8\n */\n decoratorsBeforeExport?: boolean;\n /**\n * The import attributes syntax style:\n * - \"with\" : `import { a } from \"b\" with { type: \"json\" };`\n * - \"assert\" : `import { a } from \"b\" assert { type: \"json\" };`\n * - \"with-legacy\" : `import { a } from \"b\" with type: \"json\";`\n */\n importAttributesKeyword?: \"with\" | \"assert\" | \"with-legacy\";\n};\n\ninterface AddNewlinesOptions {\n addNewlines(leading: boolean, node: t.Node): number;\n nextNodeStartLine: number;\n}\n\ninterface PrintSequenceOptions extends Partial {\n statement?: boolean;\n indent?: boolean;\n trailingCommentsLineOffset?: number;\n}\n\ninterface PrintListOptions {\n separator?: (this: Printer, occurrenceCount: number, last: boolean) => void;\n iterator?: (node: t.Node, index: number) => void;\n statement?: boolean;\n indent?: boolean;\n printTrailingSeparator?: boolean;\n}\n\nexport type PrintJoinOptions = PrintListOptions & PrintSequenceOptions;\nclass Printer {\n constructor(\n format: Format,\n map: SourceMap,\n tokens?: Token[],\n originalCode?: string,\n ) {\n this.format = format;\n\n this._tokens = tokens;\n this._originalCode = originalCode;\n\n this._indentRepeat = format.indent.style.length;\n\n this._inputMap = map?._inputMap;\n\n this._buf = new Buffer(map, format.indent.style[0]);\n }\n declare _inputMap: TraceMap;\n\n declare format: Format;\n\n enterForStatementInit() {\n this.tokenContext |=\n TokenContext.forInitHead | TokenContext.forInOrInitHeadAccumulate;\n return () => (this.tokenContext = TokenContext.normal);\n }\n\n enterForXStatementInit(isForOf: boolean) {\n if (isForOf) {\n this.tokenContext |= TokenContext.forOfHead;\n return null;\n } else {\n this.tokenContext |=\n TokenContext.forInHead | TokenContext.forInOrInitHeadAccumulate;\n return () => (this.tokenContext = TokenContext.normal);\n }\n }\n\n enterDelimited() {\n const oldTokenContext = this.tokenContext;\n const oldNoLineTerminatorAfterNode = this._noLineTerminatorAfterNode;\n if (\n !(oldTokenContext & TokenContext.forInOrInitHeadAccumulate) &&\n oldNoLineTerminatorAfterNode === null\n ) {\n return () => {};\n }\n this._noLineTerminatorAfterNode = null;\n this.tokenContext = TokenContext.normal;\n return () => {\n this._noLineTerminatorAfterNode = oldNoLineTerminatorAfterNode;\n this.tokenContext = oldTokenContext;\n };\n }\n\n tokenContext: number = TokenContext.normal;\n\n _tokens: Token[] = null;\n _originalCode: string | null = null;\n\n declare _buf: Buffer;\n _currentNode: t.Node = null;\n _indent: number = 0;\n _indentRepeat: number = 0;\n _insideAux: boolean = false;\n _noLineTerminator: boolean = false;\n _noLineTerminatorAfterNode: t.Node | null = null;\n _printAuxAfterOnNextUserNode: boolean = false;\n _printedComments = new Set();\n _endsWithInteger = false;\n _endsWithWord = false;\n _endsWithDiv = false;\n _lastCommentLine = 0;\n _endsWithInnerRaw: boolean = false;\n _indentInnerComments: boolean = true;\n tokenMap: TokenMap = null;\n\n _boundGetRawIdentifier = this._getRawIdentifier.bind(this);\n\n generate(ast: t.Node) {\n if (this.format.preserveFormat) {\n this.tokenMap = new TokenMap(ast, this._tokens, this._originalCode);\n }\n this.print(ast);\n this._maybeAddAuxComment();\n\n return this._buf.get();\n }\n\n /**\n * Increment indent size.\n */\n\n indent(): void {\n const { format } = this;\n if (format.preserveFormat || format.compact || format.concise) {\n return;\n }\n\n this._indent++;\n }\n\n /**\n * Decrement indent size.\n */\n\n dedent(): void {\n const { format } = this;\n if (format.preserveFormat || format.compact || format.concise) {\n return;\n }\n\n this._indent--;\n }\n\n /**\n * If the next token is on the same line, we must first print a semicolon.\n * This option is only used in `preserveFormat` node, for semicolons that\n * might have omitted due to them being absent in the original code (thanks\n * to ASI).\n *\n * We need both *NextToken and *NextNode because we only want to insert the\n * semicolon when the next token starts a new node, and not in cases like\n * foo} (where } is not starting a new node). So we first set *NextNode, and\n * then the print() method will move it to *NextToken.\n */\n _printSemicolonBeforeNextNode: number = -1;\n _printSemicolonBeforeNextToken: number = -1;\n\n /**\n * Add a semicolon to the buffer.\n */\n semicolon(force: boolean = false): void {\n this._maybeAddAuxComment();\n if (force) {\n this._appendChar(charCodes.semicolon);\n this._noLineTerminator = false;\n return;\n }\n if (this.tokenMap) {\n const node = this._currentNode;\n if (node.start != null && node.end != null) {\n if (!this.tokenMap.endMatches(node, \";\")) {\n // no semicolon\n this._printSemicolonBeforeNextNode = this._buf.getCurrentLine();\n return;\n }\n const indexes = this.tokenMap.getIndexes(this._currentNode);\n this._catchUpTo(this._tokens[indexes[indexes.length - 1]].loc.start);\n }\n }\n this._queue(charCodes.semicolon);\n this._noLineTerminator = false;\n }\n\n /**\n * Add a right brace to the buffer.\n */\n\n rightBrace(node: t.Node): void {\n if (this.format.minified) {\n this._buf.removeLastSemicolon();\n }\n this.sourceWithOffset(\"end\", node.loc, -1);\n this.token(\"}\");\n }\n\n rightParens(node: t.Node): void {\n this.sourceWithOffset(\"end\", node.loc, -1);\n this.token(\")\");\n }\n\n /**\n * Add a space to the buffer unless it is compact.\n */\n\n space(force: boolean = false): void {\n const { format } = this;\n if (format.compact || format.preserveFormat) return;\n\n if (force) {\n this._space();\n } else if (this._buf.hasContent()) {\n const lastCp = this.getLastChar();\n if (lastCp !== charCodes.space && lastCp !== charCodes.lineFeed) {\n this._space();\n }\n }\n }\n\n /**\n * Writes a token that can't be safely parsed without taking whitespace into account.\n */\n\n word(str: string, noLineTerminatorAfter: boolean = false): void {\n this.tokenContext &= TokenContext.forInOrInitHeadAccumulatePassThroughMask;\n\n this._maybePrintInnerComments(str);\n\n this._maybeAddAuxComment();\n\n if (this.tokenMap) this._catchUpToCurrentToken(str);\n\n // prevent concatenating words and creating // comment out of division and regex\n if (\n this._endsWithWord ||\n (this._endsWithDiv && str.charCodeAt(0) === charCodes.slash)\n ) {\n this._space();\n }\n this._append(str, false);\n\n this._endsWithWord = true;\n this._noLineTerminator = noLineTerminatorAfter;\n }\n\n /**\n * Writes a number token so that we can validate if it is an integer.\n */\n\n number(str: string, number?: number): void {\n // const NON_DECIMAL_LITERAL = /^0[box]/;\n function isNonDecimalLiteral(str: string) {\n if (str.length > 2 && str.charCodeAt(0) === charCodes.digit0) {\n const secondChar = str.charCodeAt(1);\n return (\n secondChar === charCodes.lowercaseB ||\n secondChar === charCodes.lowercaseO ||\n secondChar === charCodes.lowercaseX\n );\n }\n return false;\n }\n this.word(str);\n\n // Integer tokens need special handling because they cannot have '.'s inserted\n // immediately after them.\n this._endsWithInteger =\n Number.isInteger(number) &&\n !isNonDecimalLiteral(str) &&\n !SCIENTIFIC_NOTATION.test(str) &&\n !ZERO_DECIMAL_INTEGER.test(str) &&\n str.charCodeAt(str.length - 1) !== charCodes.dot;\n }\n\n /**\n * Writes a simple token.\n *\n * @param {string} str The string to append.\n * @param {boolean} [maybeNewline=false] Wether `str` might potentially\n * contain a line terminator or not.\n * @param {number} [occurrenceCount=0] The occurrence count of this token in\n * the current node. This is used when printing in `preserveFormat` mode,\n * to know which token we should map to (for example, to disambiguate the\n * commas in an array literal).\n */\n token(str: string, maybeNewline = false, occurrenceCount = 0): void {\n this.tokenContext &= TokenContext.forInOrInitHeadAccumulatePassThroughMask;\n\n this._maybePrintInnerComments(str, occurrenceCount);\n\n this._maybeAddAuxComment();\n\n if (this.tokenMap) this._catchUpToCurrentToken(str, occurrenceCount);\n\n const lastChar = this.getLastChar();\n const strFirst = str.charCodeAt(0);\n if (\n (lastChar === charCodes.exclamationMark &&\n // space is mandatory to avoid outputting ` line comment\n const comment = this.skipLineComment(3);\n if (comment !== undefined) {\n this.addComment(comment);\n comments?.push(comment);\n }\n } else {\n break loop;\n }\n } else if (\n ch === charCodes.lessThan &&\n !this.inModule &&\n this.optionFlags & OptionFlags.AnnexB\n ) {\n const pos = this.state.pos;\n if (\n this.input.charCodeAt(pos + 1) === charCodes.exclamationMark &&\n this.input.charCodeAt(pos + 2) === charCodes.dash &&\n this.input.charCodeAt(pos + 3) === charCodes.dash\n ) {\n // `^ikXIvgK_Aex8%-uFY7PAbNB&td}M+U8H*sq;TJ)6G> zFaV~f9C^7znf&YB8khD`_S3EqF6H9LY3c ze9WGY={^H~Wrl_F?lKM*w{tE&l8dzK^*DEyRmfV~yFvLom*%~A z7lQokj*0t!D!Ur3`lWexB>%_<_b4jM$lo(OOB40Tcq_{pN26N>_B&or>Gt+J&Nj8C z-70F$^?#UnTOC1f+B5*hmtdg6J-so8WjxLk@w{(t*6XzoYGol&bl7JGq1QPbUepvZw-90R zJ0)>qP4Y!@>IN+v=`fqm{x~!vEPco%pBG53Q1S^m$tMSrdn>s(Ct2t8`IUE6 z@;6MHs@yvs;$Ts5;-C|%jX$vc<00^x?E~k)E#JW~#J^n)eM-2_4bv;dfzYc`U)Cy= zsLu$p_+8+X#~3_i?^T-<4k$bRy=t)oi8&_^yXq}UE)tMli6|wK!#t>M@~MI3Bb8i| zldOZl{L*_VIX@@4M<99oAtZ0f84mXHXG(8Y^7=q>PG24&watpo69=^FixxY5Xc{Sz zy2?jPX#TuF+679R;HNcQ$`OYM3^LOTZ z8)!p78yL9NsgbEjYDB6!H7r%hr9L)tVvoPE<__Ju9XfX69K2NDRG-vOu~uyA=Z|=) zA9o;iU-uuVTmE5QCh+1}GC(eFr-Mw801FBmPw~9Z9H{9ZFY@Vuf%(e%f21mCH$9v1 z64NloPx=kzB2AxnxV(r{bTj_CrnO;xybN!_)w}cRw@2bv=b2s7_WR|o@4Cam|Ik&^ zTLYf4Tlv63SUGNt3bm5z%yv6lAG_p&^`*8@P)BM5bGm4fDvA$tByVajml91PXLmqmS9O4a@tClWF=sxC4#pCxKS!JOY7!;uBk`%+ zmJuH>V{>gmDj$1oZP;l_b+~L_4lNgc9fRLjQ(HXyL}%5ZjMOhPmxoKbK0pH*eLWi2 z4d`;@FrDj^M)^Xp{qXwCDMo$_K>{flgp_2NolgU%#_GibR;|uf20onS=YR9U9)(-a zJK0(J`kA#CF5YuL=0Ps1} zNI|+!cPhz_c)7skCFnC(U3xg4AzLN)b%WpRC>H15e@juBloKzW_PCRhvb$8dR zH3=QjTrz3#*P+MPwtSEujeY3!YjNVg+~MAb9+ap~_ja*=QACcOG=E#en;H3}N~*cu z;B_}LZ%v-D5!M#YqX-avyzAA}L(cN;EnN?py`!ZomQMYFk(MpkzD;VMD9ck5L(0I< z2kD}JHVEd&G`4^zI?^Ju@CGdD^k(TenE=T3WR92xMDjHn2Q-`hiTep7HBLPV4XQ_0 zey%Sw@{>r7xgX@!qdU!&j>H?>{$V6OR4n}_Bq36QBp{{9R1fWxMiQe6(1hwMIn+Ng z06FlzZ+0@4fmuB9?O zH+gyUzHj9B@_j27)R%N#X{+bS9bB<1ea`CGj(Okb6_DPy#qH8#)dC7tG;SGM(YUEm z1@c#-7y^h2>|qL!J+DLF<;S(SJ$ihg?6Dn`EE(FPk(c~n*)A*PjN5m8J$)IdHqIO`a!Oe|DR&oXB86$ag4T!ZE3^JIMkK+` zpYP%$!cgiN0_GIV&xQs?&6qWh*e=60#)IWx8NpoTMmhPy=o`JLoyN;Gmm8J%I17#c zfiRNXiZ*8Asc^%56|67yAcR(Z6rF+43PenWX0$oNLsS?#dsV2XSqd3grc7oN>hb#- z60Z`PN3eUa=$69|%Cq((C!HsXM)fzZq_>%06ZwO>?VGn!Oe_7v+RSMG@w1@NQKgsw z(b&4=tAE#UsDADQLrrtyXER@}Po9TKnjKBb=TL7Jo_BNM8GeKhk2kQGkI74smc$`< zjcSs}ZT>8pxB7=^{{)&xEn1&^Z(45i6?q!TFwEUJv}3~+jtqa+gM4;_xE6M$vwP6l zbgf<1f{qKF^_@%jl((*`q$e0Gy0TCm-71nTcK5%37j|%ulF%}=D`)=3Q1f$SeYnHU zrwRIB%_CD=hx#dI&Bq+)(Ynd~)TH?D$C|9)GtlJS_vJQOf1zovVXT^JxWP2lI2%~& z`|KQcT<3;E0v$YlG_8qXXf4+AaEIoN4ZQ=&Jp;)lxW3nf$E}WSZu{iV7j5}Z_kmgd z^O!3#9Wq2CX6Sro3~PDG+f27Vu!#4*D#TN9&HlLz$au+Nh#OgzF+2QwnyHK->pCtS zX8pj@b9HGBJ@4%2(@$G^%fF~gfSx`0-GBaE-V8P^SqYKUc$+ma!q=qB3Bp=I_{mR# z5Zd$E%=)ykPw-D%$oy$e`TugDaZMNpUPk{V&Ds+ov@z+=k@(4&C#kKVENpvOnl9Rx zUN#Nxs4GwvM5Dgr3CdI7jb!sMyZsU=0hfGD!_(H!W?fyDk+xUAewwv_3P%lfo6~;TRNFwh(_-Vv*7)vjsO3iM!F<8iJ z=z&l>tMHF@&)U_2gGJ5JL67~(uD^f1r&;C{6hV7Q5Se(L3dNs{B52Q#U&(-!oTC17 zSp3p@wr`*8o`SGsT4>Ybn?D*8@48QMNXPO%dGnXLtHxg?U;}^6Imm%B#o*-MOdq070)61$$%W$GMVC z>AC_tA4%$^Yc&~-P5-P5Rr9l8>y?y@tZ%kMQ{l6OmAyaY{ zX#rf=^^i9DBL#B^`Z}*U)jr3oeK?ssePhMU%Dc|K^nmyZXTX=vlb4+L>}&mNQxly5 zSUhK!6S357lM||X8r7*8j3JO#y!6hOgC3Yx;+Xv3)UWIN_|$j)`h)oyg%Pz)GYdL3 z6gqK{QTjCPR;w>K2a|b~eiJ8EOd@DKQ8eho1M{BLT;=}0XV%}}rhkWPu_b`c`!2NT zRR3<}S=gJ@Ez`f{S$KCiE3)vu=yYpokg<+lyc@M_uIR;ySA^3aWZB#E-<$RR@0=g4 zsy{QGufkvZPe8O9Lpn==p62}RB*D8Y662hYiM4@Jr>RtsC^nPR5XE{G5f{fRN@4XV zXC=qJvSe*5{XjHqiVmP%+#WahMHliQjEpI;gziHH?Y{+zf#EGU8;b=^kolPzbH2DyUh3Uxgwj)2Y9mzU4Z8r=JzXmkf zZsdC~KHtT3!^E4I$^Ua24YW|>x9|$z)$b(~aLZ8KJbNmzeroY>;l>EVaU#h>> z_0(K)k9o;|;}F5pT=Fol^3sR3R;n>bFYcAM(nur`MM;1t5(9t!jp(7z=Mx!v_I^PR z#n$l?+g=mrj)pv|~-;{7#WXq_Y!av8U;C9YNGMU)~Bu9V8C=8K6fK2OV_! zUi>-f6y6xE{kXG-0E(m3Ee(66iJ*ZAD$hLg;seg8Jfm{V#UW;}Gb+!z7&6ZYrjAl|v1FtJO*NNnCaKZ{HaYRX zn+83mQsM@$o(+`cRs0i;Jy22$Sjmy3g$kQXbR1HsXLW_1i_N!%#uFSWyxw?yLxoF9 z9Fym~vQW=6!=auvh2+nR+xjMn&tb<}>R(FzJdT%VscY;-SiVe;1+mwh_`(w0vw3l! z@o_!z+(?1Yve_kF@Knw&nOPb8o-?w0NY--=aVf+*ii_PwP;D}g#-|(;nmYk@QAIw9Md8zKWXI znwt3=qj8JIXlzrcc?m2Q9h4+Qf(IwgDP%=wKC1wV&MTb`nk&?9|1mpG`r9Z# zVo4|Fj~QzSNx2Gh)?X{*W4aVn#%FiwQ5m1wrMNmizRQ8t@o1NDO}wfLAtI|fg_@Ie zg?m}XcPWXiq&!%_E7JS5D5gfs$6=@2dzCg6RN?K>_?VJ9C%v&I7R}GAjE%`JsEp0d z?@<%0$}g;pP0cT^j*ZVhFcPcJ4_AiviRPC=3rnd|S)sP;OE&9e!I=ExNUq8+*C)}v zK2>0WICwlwuS3n(bf<&hwfSluBJo~KhNt|;NnG`Pq-l4@N{O;O;MDJYW5M~u+ z)~n;#4WR$;y>8fJMp&W}BT)cdF!Oo9coV(`LueqAz|z zj+T$Yk#64#Ei)@u08n1+_0+|t+rQqE?j$#o$!n#mOD{E5+@`5ND-Tkl3oC~oP#wOK zDl~0y&x@~r7GTQCw>H!<0vDa&2Z$(-@3rAv`BQ0)NbgGQe*jv@2 zwTh|*OFW5Z(N!HIy3HaX_Ma#$KeHjF$HDMx%@FFqNA7&%1Yk}h_{diVG z>TFM5?eE*Z#Uw+#$tIS)wFA^eeK!OC7(Qo&1T z+24(vrh0uD$vX_lQsOdlNj*j` zNfIrmK&bHwx{FEi1m6R4i8bFSb!rw0U3)%R;+5g}X(cR6OT1MGy)Fep%?<*|iJv31 zR?Z5_Clqkb?>P&zz^li|DX?ke)Ly35fSl?BuSVgB&D0u{SE%j?t0>^^CMBuE_l>`# zDn7nbVSIL{URCiior)RuPEfjp(p%69xT^1T;FD%OFuhSi1@)*Zzd$kuX)`;&S2bd# zxOzc-{(+OKkw^zs#WuBkQCP_b)+i9X5z@mFS&~1c5>Wj^rN~YyH{z+xhp2|i%Z*6F zp7ul*BFRA{)tW_^Juz0CK}_fdU1>rNocM7lF>{DGNF$D@(TXG9>VIkFk?m}#c|SxF z-7A%Vicjs-epPXhPsm}0Xr1u5+Af!?lhp+rxM_RUFdfm`W$r~u z_I%}8DXhyFlf!t;ZHGSMMQGL5fn;$`Nyn1y0cV7kox>(NU;k+~BF4y@#_u}TABzYwFY!u_ zN3e-#O_}`hi;6{$4c!e5h8F!4gN;C#LbnnhaWY?wClxI)4=g6$rp-L?@oC;X;O?yw zIrG5XlbHu@!@XA(uPl#O4nY*+ZM=y2py+}YqZr<26hlee*aL>;tAO-+@R0rh@OfSU zzUTl?i}?!tJT2s#mC&g6d}S{okr(!v&cJtP0}F$3DOcW|Q)W8#4u%Sf9r@VFI6log6yLYPPaG24yw~(M%8$2Q2URY##^=*z(y+0pJu@TEGnG*N*YuvWKAR- z<}svpj;n21Ey$vjgqxA;e?#4rj>9<}@h1O1*6cH(1^Ia~-`g-~a%d6kfwr^1x5GIAa`P_~=;^H%3rl@_ob99=XuoFKF*EhxVS* zkJsq((O#oZ6bkIM>iC2(TFUSWenwU5{j9R;_=NJB_*n>mr>y`$&AOHXXh#!%#5V z(8Ul393oTpib-uFODzEeMK?shj*ya|u06MTNf{qOV*CHsF zl1Pu*8K0_Hi_zSpa3FK4W=7#aE$Qz9^^V%rTLf_}6RP zo5`Mh2`9Ld<(v#_P~Bo$5wHD$znXiN>TmoU1tUo8t9X4wH1<5Q>?Y!1g6kz;p6ZFQ z@*aldIX6B&xI$auB!9Yw7QLzIAU?8<^hOi#1@|&DW0Z&XsX%Z$2yXdCc!|+LgGh)p3C9l${xd^0mE@ z@rUIQlRicUTkfP9TIQ4kt{sB08iM*ufME`yF+tS7=6Ix`hJvUs3r?$H_)DlSYdx*D zhk7%o2k>uY4s$$PMZR`gQemwqwz#E1tk;*63Ef@WL%m3?(8Ihxa3H!7ME>C9WEsoj zs%Y%R%6I zIiW2ms2Jg3%UxQxj4#Es%sf|2OPZ}9sAlt#c`O{@8nmK>(b4nA3XD2oL_Z!z?jP=9 z);xrkT^^}u{2rIU&uNLLj-h_yQe>{7rn=Dl zqfi%^sRTuNs9$r*3~7Bjx-OtIuI4yeGI&mOGSw*)a$E|6P$ivFZLU(ArL<5T+d)rh zCHXq_|9?^Y>%ccv1=RkA{S0!Mmp-7m9JRkxaQ&aveia96QX2)lDa_wIDoNf4*dE1Q zLd?r!|l+F z{oYzQiPU}aHafrAzh_N6@c-Se!OmP9OiX<6ZrAEJscyS&Z#HmKEDqVzgsN$ zy)xMF7dofq+Nrasjq(%v`+!SCoOdW4^N0&REc6M`FlZ!pNwIph6xdKJt9^~FGFDxR zc8RCTfV59Fj&sSN1=YCAfr*Df$&HM#VLRQW6(3n(-4e1P7JUhyz^4a_oy1l?n?V=i zt_9bZJis42pXYGc{9BEYk4K*LW|RjNB!h6|OKQ zumo;fp;CAPk3v`h2*cvGC@f3<8VD*DJYZ_7LNp8g!em&ZEUAEaa~S)x^)Vw);=?LL z|IFLN%CZypHDu2Sjb&3{^8Aj3?mSgSogTTJTM33hy>Mz&fG!LV2lbTtsB%kx%7^8Y zFrF(JErqJKcZ<_qZqt@e!%ny7e+XR?VX8XR^K{n!PG#*6*USSY#RjkkOif0bSy9HX z$DhkA0&v|isX?J41T}34hH+ZTJ2LaufmWN%6 z>z|%?@XY+4vurFpX(?J%vYT`bgJa$+p>A8=iFMGUiaW8&0$xBOE1i5m?dT$gFWj}f2ZEtCDmg)NAcE*0d`ry^WV%xyrUY{QP9M$Hw!3HR`v9AF7hqeh{y?C-6b>OY2iV)lW};9L7X6mM%Jb zC@jRAsLXw9ZAXF(aDD0J$leI5#j0S*Xa7pOzvoBAFII6K@N^I*Q{%nLGB9Ihdg)ldguz+zB#Z6Mg5mRzsj=KW z*#pJzc{ORN-sX^5Q|2F(N%eI1Bb&Q7KdFx10kn5oil&^nz)dh-3U)s8eKIE9f2FhW zP{I3u{Nqt7@-p%IoWj6)m4EW$_05jo_TsVo3;3qsu0F+MX9L(W@#~I)zHgRrv+xqXrMZmVWQfT1k(RBU2VkO0S#EKMgyx?GmuC;fU>Rw5 zWYGH1wL|&Lc@tXcET(j*`6*+enCO!YKSNs~-Oe0}(JMM=Fx`~(Bt@wj z=WingBv}^lSO3gv)pgW5U>o~ZIkE0vhvp8$RvuPNv`x4w_F}Xf;RhqbXg$w5EgyzC zZ?xNM3Q&$+UaE;;2jxONhm}d5Em%130w7g3p#)i9hw3v)D@sg)1dicx_>H&;g{DDCdT2|j$Xr*Cb)$1FzCDPFKE+pfq2RHXop)oq~*QY_M z6YEuCEEZ)epc>r@1L95{-wxs)Fj{SvBrX}%266wLBql{d(_Z*GG{-`1SW5kYr661Z z8jW+FH+sfW^Ss1Bm0XA}uCX>2NUd~JWfjJR5cl$z1o<4@dmd`O2h7lgYY8JVr^y-e zBBbuYj=l2IL^y$I36Xv2jj9__;2ShG@uMj>TIK4f)g#NhkM}s@6;#zM-F)GW!oCzA z)IsSZQ0H@a%5jCu@T6K+*XXF$g-1U zav7b^P7{&X(~&{L!}VhUJ!}Tv*dH4B>i88Ewlnv>2|OTBUx}eADV5XNu4hOKAc`7X zg*Xz3F6DbE24W6#RM#PszEoB)b!O1Rw#DJ>k-c zZHf#U#l*41^sN4Ta8PP+P~lT6IPeDa&u>^9ETy?D4jdf@;&s1bccA}9WZ3>=1^P|= zH*pr>&@n?}UwKe!DYo}BI$u>Z7LE5PNp8`pd+eE>$u~0%H}cnH2u{h69wCPQ+JUz? z6_a*PNl&#`K~J?G3t|GQy-|~;#qa$(n$<+3(tq!M^_s8JizwZlyrxE2jk;DJKGlcg z10P<|hd%C!Tw!6q)+yVQ`s!)oh5GOpKG>ZEo^W>EU!d%rgxgrcM+EC$GZk?xr!yau zf3km52k;`Llx+=YE`K@}84}lZ>o@7i7hB_}P|`1v$$UjH%OGWG6et@|!E!1cW%b3FQPd2&5P*{RtDXXz-Xw;y>&8gcN&dLbaFJ#MKt}mJ$Ci<}-Qy**2?)V3fwGxJtNZYZ^1rHdc;%*u#PV z;+ru55zYc}nh%67zTzB2^%1X4Kc*8i5~A?uk>64a>kLyH`H9fv=0zl_bSzB;u{%o| zsWlRxR!8_!{WO|d)T*g1M|=G}+cYJ|Vz4ELmiF1yUQ5+xW>8Djg{l3F{+!cV!*8nx zY-2sFhxF(vxa8&eT*NnbSdvn%m`vnQqxb=M;zRwgnCBVAVD@GVaZmm z6xAW$c7;+t@G7W9W3E6qMvF#t@eKMQ&8AFhI9#e_ajxcef0{qrt4|DCGEjXO5Ojm>WbEx5q`VC=VILmh0j$gepa zT9pj<80ODMdIYq}@}pW>MKW9c+;5&2_i?~5-`)^BF87Fvm`9AQj!&PVOK+I^VO>o) zm-foe?wSD>Qy?{(;>N!|0v2a#sEki%n76twp!jA(!tXK=oFo!N=dpZ4k7r9?sn`EVnLa~NUpwdwvkflhOl5w)9fi#r_s zG{c6)0s@X;=@k;@VK_YacSHR&HQ6+UN`g;yD!~+lz%0xEo-m%QBAPBb%Wv{GrpfiT zNu!1Cpd^QJmQZSgO4af14MNy2HPw_N#=ro#@gS>&$}FokN@#_iDh#f$&)_nY6WM1n z&Cb)$nc`?0#DT4Hv~Qf^ha5rtIuHYS>Hy9zYu&N=eHBtMfJH?wI0{~+evifaNiZ!m zL?DjF51$QwK#^H!hpp5q_Tp^FLW{U$dzfxYK8U?*Lp{&Pu(%l7u(%kSO4Og8Bl+KO zwnz%jhNCa9gS#hJ#iq=tSTLnttUY7Fum;Q8qU$!SE$VhRZ}M3?tk)J^ebz42hllmS zW9>S9xQ!2D?KP>Wj;@tYZQ~Jk4&)6!e$0OpI~W$0exw4(UCAB8d_@p+Px4a z%1Pvc)rZZ(KA3^-uu#u21K;2`I&cHORRfocKg)(8DF*Hs85=)vHydOIYC5Wo4jNJt zYQCQeql4;8O6}bVmgBG{G>I@$YFC`zV@^kA(y0)ocA4m8VGuC121XPHJx2U}sn`2B z-_TAZlPffdP9Qi}y=de+J{(vOcx4d7mPA&G2WNzOjw^$}!yXkUKWFQKG-jxT%5>b2 zo_t)wL%1Q(gUzId-j3UwES_Sl0d7Os0@U60tmxEJjbG~Lq+>)_`F`bv2hSs zfjb3VjdYD9qI`BqfxCIVaI(u?{tUDhCAqb~Pt9}MC>S~@3Wg^0>S3s%uZN+95P+w@ zji?pUM^_--9gb!%S9CCr2!en^i{_Kfm+KPTQ3SV^UPsjN5UPn!mo{bMj%lNwAf^2K zN77kw^NVIq^B zBaN_wnyeb*@E|n?0cX4fjr16SR}q`yh>7-EFf5w2eTNzCM&CmVhEb{1ns!MM}XPjBN=!@&@9FWK1NH%)0AddNPaHd+KR`QhVs> z7~~bItQs4{M8{d8kVNxckZsMNU7_Y%cn}Xkv8X+(XvT`MuwK<_C2*E%w=r&PZHEF89c*;B}ut98ARWg95J+nac}3*On&^5rRh4+fXKXRTi6^IYLoeyT{hhdk(5eH-wW{ zAS3O0AX-xhq=lNtX(QUQ{3S#S1>yTAM<19$zKz;Vxch8H%6{+O+$#v5^d%oYX-u-T z+J`T9H)(Q<_Fq9bWmIpZc6oswK)s=|3Q-KaYsGe%C$eej z$V7M15>Y+J?5u%VFGjU-f5A_d`h(|F#1Bz4ox}MZ1Yw&?wL*tfFu{8FVVV1&CY)~S z)A>=^3vKV!P~@Cc^?SZ#`oEe8FC z4+)-j^&f0hdkm&0V4#Ok<1gXiEA61dXeX|=C>>viCB1TL!ENW0tP{4$>gN>r1qJm^x5JeO;5tRXg1R=&&9G7ul zM#p_zMnzOqKm=FZ6?GJKfZVnP9Jk;`zu(`fd%JHZ!Fk^2ozLgZAD!-dt4^Idb?R(& zs>%i+u44ye==7wjY_xy@@})xx?9~e3AVi8~PBRiYV&QWO$0m;wzLGDiN_5z~w2^p^ z=-!ou)wCiNGF28%A6Yv?`(W*K8q;UXk+r@0n3vsu9K6On9UH0n6HUbW{}`!Jq)ak_ z1sI+EHBD@o^W9*8_s$(zH?(&sA+3_4BkN+lx0#W490jB(OT{oIm7xLebPZI~_gpzT72f|>|$POYMCx)M|1^^f(At9zvXa;tq zM)xB-<8M*h=g3kD+hCpc@+p6dp~QZcKkL|rP2A_{Y%nK)+@zi=m0L|g?GiV6gWS1O zzww8{yTmO4K5@2hl9^V}EHB8K+!(s3>R@s+pUfsJ_^&qE>C0^{zsg+^I1Un)gLq;# z8FTqEI^=utm@D4tkXoY7?2vq~Pnl*`gV$>r%)V3x*>ij}x-V=JXOKh|o!7mz`uA2< zY#t;c#tC8{zo4DO;nHL>EMUvP4D zX)UKF&(-?*scgq}mr@ol<3NVsCOEd7(#%@#;OBYh7j$N}S9-iVdhTMH4bG>^$fy6Z zzCT*)`>R*zg1CDBzTM{5_hX{HH5)!}Ez`gB`aY&1_cH>o@%sJ_K#;I~_XUVE5vwgz z8GGNI-#zym;#3?w19uJIWk9Q{i{XMErP*9?*&hCcoNwH+a#Y2r%v~^K7wA#q&dPRiedCc0>fTX3d=9}8-?{ z`@c#xB(pnc-f=&?!F0#todOgM=g|B(bryu<6Y zp|x`sOu3rkJnlZlgE#%D{E|q`WoWZl{4C2cxnhpXFE!SVrg6)qi0#I4?tX{1uxvy)MyP~lNmyyUAH_t8CTg=pI za!cb&&om&_bm%Wf76rVY_^gM}a(MoUXlddd>E*ec7uuxgWqVr>c!T}JCV2j*@_ye< z=RuL$E1j+!G`qSCnTXB9Ek*GOq*!j^pz!DEV2k9QIxle_jYiv(C7yAamH>cM>s*dE zERVN2K<6q)YF3LJb*FF9a>QyCU%4Z--x8wqnH_ZONhu6>NwtB*{Yw`a%LHziwbbEcZ$sG$4fFQRCOM}63QOol+^S=mo30u z_+WE$MJi-@@m`-S8}f}T?5BV%|Do%DNS1v={Or?b{aBwqw*sjNeI7B0A^P0AgXj~+ z?F{OHTY=Cj4$wL}gH|PXd2n&swnl27K>qsp93SA*z9~MH-GZ@tS7WuiaCtAA&p3~d zjlp3fcg3zIO_FDE;bxAva``W*nNj{`QFCnl(>@~kp&Gf#J#Fx_@ktd8 zwf50=Deu*zoZ4ANr348IExd)88Kw$T-oyUOC->v!j(T|^FOvjHO;g5sEur}G;&hEm z{TlDy*}g?`v^O*jE0y9x!VCx<-MQ>C-ESOyD4P2|D8unKGO{-jHa#*s`YBQatsCM^_1>-OIdQ4C^b-b(lwRc{q?$3FR+H8DYEdGgW`^BKX%zoH`Gf~4= z;ynf+`Cc5W{C9n&hf|(LYPWQaS-du_pQGZnu76JF-({xd*}@0b_ohCF_MW?v2u6eV zBs54K67%t2WJpt!zw`RM$Ygi_$cXxM>$n<%^ig4c={71Bsca0Lx=y z8-1kaK>hO7#JoNE;jQ7!l|;TCFJa*IS1r*AO%R{w<-!#i9q9DWnUdUG1POIL`6slS zl>Q=|!2J`)+LH#a6pRurfD4MI1`Z5R{Hc?n2!l0vzu*icbo$09dc>kKcq8wvBn zJkg!SCD#T+)%f3hSXQ9)cKV1v3!8v z87yz%myS{tmVbXr4F-x$_j~w??cv8kf10ZYIU2lEXehCVwd~A-k$SL02$lW;DlH6^ zSteH6SYybqWJkxX#yR=+w87gzE?Q!x5lL4jixX3M%T%)e#A0r!iIcDOw>)~=|6cPp zYi?HAx)*Nb->ABK@6@ld2IggKb6mYL4deY-G`FOJC^2> z!@ND%IR#NOO8Xob+9=!GFrQVDR_CLGH@mt%nM~fpnvfk88s=2d54k}11++Ik>a@b6 z|4eIzGk64t*bJG(*#wC)n9JL5i4{oH@x$(23$(!B1+F;w^;iAsn0Sm1@yMuko#st^ zR*6?<6Uga{hyZ&GRbn1R6V-eqX9Ylx6_D}C^OCIJJ5^K4lY~xU5>UHp^R690MDO3-Y+7lUhnVa?{MM8fsQdNG0O46Ud85fX3n z!dv93+IW|RfPWC7gv=`Mx)AWqyJUbrp%PcB#08Y_rs!jmK2CQP{PSG1;&GeFS+jUt zz>XZu2843Q*r~i1ce03FDsK^AM4efW0dQvr(Dx65^Va)GTHX#o-ycOk5jmjFNa|RB zrujhn3&@+#7>yQ6U&=qCddiz%)dT;?pN5A~Ei?`H*f~87E8CaHZ5nwW@(|&``LBK( zA3RDMXVZpv1|J!9vT*JZ+jH*;(SgKwWVR)47Q1rnCG_$oByAkZ;nHqD@5o zArBM$ursfVL%O0A-K7>as_#nyy=Fc0QMgJ!2ypo*yvOC7i8FbohKa5qoKjxb88GP* zIxa9o2M=!@ne#dNO=x-bA%FP7me=_s@nAyKf7AP5eU6 zfG%itK_1qAv6!*9X+ea=mL0{$+&!W=H}^l}D`~#BuB2il244DJr_hC2<#kg$BEjAd zXa@efoA4Nm)m7_l=*%eO9tFVO1z7sQ+7su!NS6!Kafi`~f9i)%sD}WQxJwV3MZNuO zG=yE~U}!~ZZig#I#m^$>w*MFJc0v`LTew97e!8iu&AM4?MULTMRmC61b$akg z@E|@T-#eB=Tm$di3cUZ6XE~PqPlIxpin4Sl4=|qNMD!cp4^2FPnIB_n+F9(A#d=ugq8#i5O0z0hF zVM=fZ2AGt93C{xkFjx54C8_bV3g9#E(xnO-)F;;~R`3#rfQ3LFwJ%5>9eBpZcmgBa zN9MC=3_El<@Zzu^p-ZN!%Aoqyyrt0sbxed>$gzKh&52+GDY03?v-(R`rYUYk&kTz8 zQcb6QIotuYQbz=(+PUtT<<}#4_@C{ps>RUrcxdjjNEt|{iu1u<%4Sys73ZBuPA|M~u}vxH=)LSp$FKpM0vEN-dDin6$Ss1V+iB4s!|D z%0mU<;Hj8v<23X-C={n5t!d7dAPK_v+=^%6`^vvt_&&r>Wc8qAz9|EYEh=F|DQ#J*Olz~lDyY<<1gzJ7ih zUvIImPfX8ZzRt6+xA8SGUAnx~#k!!*#{-;T`4ZDHu?#Wo-HFANe*LWf`kykU z|EAY-cr8m-F$?-~lL{zI;k|XQUoSC@a#q0Hp68e|Fd$bXeb$Cydssg$(k8X`8js{? z?K}zit4wMFIB{SAAyE{3vw^xr5R~p?5W;eA4sU1$xi?*9ehA7W)**fU_7FuU>t*}& z%T>Y4#Ph*7pjd^Df5;vv`NhTlgG@D50sl=3YiHm{~hVD15Y3)s8 zN_u6FKGq|74G!Y)pnRf#8mWWQ&x+IEr2kxvU4m~0?h3$xvCZ_=`+)IQXy|?RNPzK% zG)a|flcB@0su!P8;9WvQFaYqp2I2XjTv#~m6BK`NGR5OFO1!i{UTCWG05+=9>)v zC@#@gGWc^^RdV!yy|?B9`n2A=Ie=uD3i|*FeUFA#e#K18>&@QUcGy3)zbC(LY^wg$ z!l+=gX!q{md=71S<-%`h09D39-kTK6)&8j4YP+2bG`RWP&%v+gZ2y5{-&pY!C`gnOUvBt6iVWH z{(F~Zs)zKcqt97XPkE18^?K-Imsn4b5>DlPoa)jdd7O86sCv`-C91y`z8-}sr1}|c zc@y=0ZOMAGuPOV?HzCgbzr1zQxa=+{^1*|Ayv>JiZ`pb^sW{N?PhST*D2LU~R8bi< z-O6(+uP@&vlz+c7?9DR%L4DMuP3SI-fc&q*cqU+v0W7mVs%uZ|KH=In zXji;QE_umSYIuCl6IaT%tcJ+ieOx*D$atFO!hnZVgKkL24Oi=E5JNW^h8MEvy@ke=lJn;wSkEig( zXIh^X7P^aC!T!a+cWDuHIT|0ZEY|&ZmIGb}X(f!ImC>Al&ATb6pCcWA{__n&ko*i=3dE;u5=VXb*I+&cA#|pd zGWER6PN3_Dct2os@g&X9S@E%1!1wPXB%clf5VATMh$3A#b!ZW_GlQKKkNPk9CAK!w zHNbzHNekcn(j5MoCe!OzOo)1K_4;%?kGQx?Sa=W!!uNt(!M9ywd;@u;t3m57%=NAu z!>kA;51y;`&Cqs2ZXCZQmqJC#U6E8?skPML<-5iXDAW%9?EJSAFxA zM)VBo2lBFgBOq`59MC5tFBkKSq4KH$X7`iX{iUp(aRb>Qc*9(9t*aO_iIk!FYWb99 zvH0xKL|(ny+naj>e>JL*zB4kNe`)2y~mz#?>F!0zYh=3gMg$#;$J@Ovw`jX zez%in8T!oq1`V=ZloSgh0>dVSA_CkT=0cH{BVp-fIo{p3G!r9wtRlNxrw-J6vjIef9Ob3-Fy+Oi9fX5N5U|KrY3qLyU*PTii!Y-X53$44 zooF)N_v{xssndj^IbYS?o0q{W^~JW3`syZittnDpbJ>%ix6+Y-p|IF#v`hoZBVu(& zWHM&_9$s(2rmKUID)jJnf^a90s%Mn9Hi=%~&CzHyB3r6xN5I1UD!*`lq7@Iy=+N(a zubSU_z8FjrukqX)fl21SJe`;2+@9T{@=OczJOQids3C(ioR{Laqp(%ofkz#Jn#BA3 zmwRJoBt8|`Z!xTr)2N$G^r=7kL_do!K zHuoO%l?)ExOnh-Spox&<99yGV+b}i5%~uwdj?(?*8BtLiY#n z^s(*_roKy8-8)zwz8pCaEDwtv+6j+qu2qO9SPwv*1R6O}AA>U_F`LuiUw==3%pwlT zOM?qwMNdZA0rc(x1m{BSi@~NWSa5arURpnvilZJ0^rN-r^!XLQ7ndD-J!IN&dn5gm zu}_@6ePFDvN?8n*9B?r+M@)geUC$+MzP-(K{#GrWK}(vj@2LnzRn>;*+?lK&V`9!k zC*-M9bu$ZqW+BB4y=C7?o=ug#y=hQdp3Tg6m2rU9dA$gck^f4o_>A>2e~*F;4suf4vJj?a3*lv05|N9H)cF23)^Pqv{a8_1>5N_J;tRzvnFB`%QKkNa=`BWx7d4tXf4qOFW_pA>t;g2!}VMR4hjnVd<_#TjxFXb;3G|= zoq4bRnLjtduzQQEd#!(2b0x7Eh(t`hlEazfeZ9dx6hGg})t{=~y-0zeerCEn;OdX| z2)p7P&m8OB_lA9`@LoW(@TA1+d$2kS)_+!Eyg+Y=u>MG<(z|>#>#q<72+Zax)(yf! zxG!L0b(6J4qw-L#N!S3y`#!(OO_=n259CFkFO6AkEm;ENP1Y|h=z+jc&|}@EE;^~^ z@F68r`|yPOSWYixVlPbFpZF7Rc&m}e5W?a;8Lqycx|C-cud5vFd--e-*0@vO`BN@e zt83S^JP13~X90jlVbSphYQ`ijm~{2$S%Ua7X2@4hX@1tz12B*=5_k=P*iIGgMQ!vQ zS2sQt6y}N-3V%Rh_+P-0>#tmGx;0GC^&7VPp{2Q20ZXjq#x4x4D0{_uH`d?yFW>dTlY`pTXMX&^hSeWv+GD6 zh2@dpvBYQmoFZExh(9@g)KKn54Sy)*>Xvw~=(gMVj0!LEnthq%wcAVV2uU`6<4E$< zRWM>X&3Z%m$cXcWZhrvxAu7wf?esIS-5(eivfY83L)LsU+%{eBHj*?!(um_O&b1B>7aZY*h^uhA)*jLI526sykig zzlK?_dhsf`E5EEeUH$HCi2EZvqqK$ge7saDtlowWHvYWz#{E?WODNtVdj%VvZOde9 zV`&gvLY#NGx)}p~zdB6Vx*4d!ROP-})Foje*ZU8WHEf4nlN4>iae=;=H{ypHLIe)x z$64eQyy<;jV#>phH@KzQk*;=urn?0yQel0Vu0LA!yOIC|*Vz1oA+!jdZQ7)Ye*GF+ zHa2(6sGZhL=FW_8fdml%i!uk1>O;RCE9SJ{vE1@V!5)n9#Jy1t8#K+VIf18%uukkPBb z`>764SIEGc$47>J+25%9+e3mBGcHSzev`0nIEoNt{TIK*O`-V1tFA~YZz*5IKMQCr znBN)uZFE$*r+*iG&e5vf%0l5E&f8RDP(3KV`X8(gwIgZ7 zxOnu}>YsOsEPBTdi6rl;`sbY^^9Qib6j}5tSyu;+4P{-$>Uzd%J#s)Ia~`7v6OSC9 z$xJV8fiZm)snH5r%#ZQij57>Atfx!<{~3*~xvHscw(n$UWo)~=-h_}#uo(dWasMdZ zCic+}7l0V3-<_;kT;-Ive^9%I+9m^dm>)bm-#s*0-a2@AvTMhp_nTN4NpKLZ#Aoh+ zHj#O!^4*L6g^Qa(Sg;kv_K8n=zvL7?dHb);H`v|7S!oVIMYLKO!;S4j#*C&2OAga#_{HgV7 zq?0CAWZt>FNwijz&%l`atBxMLV|4D%Z59*E;TX`t%a|IiBlES52$gg531O8}cMAJ= zKGi*-q`F~ruJG}KEo7vCT1H~H{PGht z82b|NGj;D|l z2%#J3wLeC`D9hPk$7ERn0mbIi@L1PNp zcNT2mHei7!^P*aWbzS%?g_Bd^UxYxIb2bwX@V@55XMoDnMIwopgEfvCS(-hGX4Cd+ zdi<^Ztnm-a(0S_uF&kU)to zCyIZYjU`d9+WPEAi3`X%ZGJ+Iou(;e^8gPri{ig)N+3syY-*TNYgA(L4cgm^%c^3l zcSl9raz~qa{)&nw*3)`C_oV_A=}G)3(H#loU5ZWTYWj=&1%OKE+zoF+@G5bQCYZn{ z5`0S@=2pw%MU@Zw{eK^zto687ud3l3^*r&uTU0|GKlBv}MLW&>ntcxoYRWD%JgZgFFsj+7BWr% zxnbh`H&w8HkDD6|g6eO@L8n@-2I@QI>nLHsdq;-Q8+`aEd^PhSQCM`l2xggXvz71>_?lAh*uxXrhOKq6vSNb?MA`CzJxku4ZsbYQcTHf);d#C zw4TRzSwN#`C8KPz{g0S4*djI8K~^p25PB_dSnFGmpC|JTpLm-C1N)Ja7-c_BVq*c9 z2)AolxwE(NTs9^i9`YAsb^8U&1v(;z{XdsU7p24UkzlRhxLFPIhu8o`P+?u=Uo~8* zw`DHCjw?UM{;NSUg`%o1N?Pw7#wp8oU=Vv+5UP8zyP;TJJ&m9tN96xdD+8Z+Dqv;< zhIQ&GV$^6$FS_iDHqn+ZvHuS(9OM&-f8n^V^WW3Ej7T?oG?KC}SLr;#^*x9>naua$UXr?+5 zK%IeR+4Wnh!`6C-z*=uPvmu3jWanszp4jhiiJr`^i#{`Y){$AEO@%Dvv9~o#Go*@+ zrA+p-^!mEDk`%LKTbmA`4Y^a^!9*jIoxFJq(qe>mb^-?BxHCj)Ec96S^-5IWFYP~Q zeiENJwM0XPx5f1NT=_yiW;@w8uuJ7F|5qR`7R+KKy3i2(5}Y4^NaGlH4q0g3vT{3b z;yI8FQ>f`e&Kt9vF@-*wVWyBS{j1zv1AqDIU@EcFWHE%HYJKhs_fwfG>hp`8AVb>u z-){KJlN{)+|jJqv&}c(3!;n=l_XGWie4(-UDa5?e*kmGLd+KrHX}U65;0VV4 z_fKHFZu|;$@Ml&ik-+%pvY+z3?d8&`DU;__Rr95zsr?bYQVt#F@R-l-i04b z|6re*!9SbieHSlnhMz8=w#$c^#5Xljq9#^g*ksrEt$F_shgb479XYni9Re=!74vh_9>5_mvRD!G#n0|+u6@A!B^&T2X^vY*s+Wy zo9!yUk!V<_<;Ab8IZ~EM`QiMdOoNpN_}1xXN~VhU{qW8|wobE2@se&QF=0W~Tf$Y- z=Gjx1`eGy0;dj=Em)z|60Lv&j%G(bs&H<9vf6Nsq(DZsz1$ueyf&!!Z|4_AGR(CE7 zfxDd2PVEk$VGfY&myG!F5xz?%t#GvYRO}>yqiWe;miug9JSmohMnt|`~JM4Tcu3&N=QE#nk zGIQ~W295wwdVWvDAFKEJSh5xV&_^o6tWdn2Ii+wr!nEomXq%O#aXL@ZOP0QFP34W^ zX_mb9?YoKCgAE?Cl=$xkf6+t;1qHsFks z2@Nr{3ClLiRx_uVaKEwNK{7LD`@7%pzQ(4b8_D%FfRV>GzE`A0;lC1E4HGf(mV7rv zwMq>MO6{Oh!N#aH0_+^UziedAKWM+*o|2A1jWr)w4GS{Z;e39L3e~vS)$pZ6%6lkR z(lSGeTd3Ta6#G#TQWV^_4N_<)Nr)6-{p{%R4~ZL}9-j~)p@Yx^k0RIwb^I#P1S!?U zn$HNa_MjJ<)4#uO*p-9_s+N=|u)FNmCfI4WMWjY@F&n#({gAyrG|0y->wLIc+6)g< zs%W~yB2B}ykhEbMo~Rm5OjmaIiT`h|It9yr-6Aag^&kB5^pr_`k^XAtL45zmttg!5 zuK^|Qpd-mWrM=?&U)T8Mqk8F7TPm@L0deKdZCvg{%JIr*8a0wX@E$tVt_ujU!F4u{{}nzW$ky!D>f1EW(r-D6mRj912X}o0;5C zg?IK**2LJ=HEtoqJ=FM*Anl#w8V`fp^sW!?M+Pncmv|I#FS%}lU@GqwmGZsTHz;T> zxwl8q7fRf#5@>;=w1;+q8v9*l))swyua8Z9&~dlkd<^+yHj^WW0GEHVI{dzO@P0FW za_=7rzbBsT>c17d&ys%*7vvvbBqcw-Q1TA|l7CtD9?k-q`dEwCHw3O0Og8-{n5?d_ zQ1&gEzuQ$JZR@=7@=Oh_lB&6 zj^5{(I_4E&q@Vqc2BFPH$Yx%VGJ07#cj5FP-!+Zz8yzMoqP_y@1D z^pp7$j1LqeKOSqv#?L^zbkP~q5Fv(KKo35e5!SYWemV|UPW}X|aqhe*k{-wslCzcL z)m_+(198Lowjh^@+COEP#c*bO;qIirb1iPMl;*YcCvYtiZ&~-UU5hiev&Ari2tAo^ zIo>XG#ms2foc-@q5o^tw=FewZ`kR57k?VX8@L%h#H6x(GJCR~u5=$qu9+l2FO{3%I zzdB^}Lt@NYi~6nQ0_MMu_p>)NH{SPHCa|)$|ND5aS-s8iex6s`9`DVl{Kn&5M-7el zaZ{l|eU^1)yAuXeSUNNR_5$Sd7nLfBeF{ARq=u6T`z634I?s`5=?Qk*WyJ-1jR!J z6?0^@m8!^?DGWl5)9IqiTOk<^}N-$vI1w z!oQj3geU$@z1M~nmE>0#MkW}33f7^fxOUwl$Yq&!e^fN%_@MZzp!gtH+$Ps)FHq!g z=C--1WAtnPux{Hq(mRA2&-FMf4im&&$lq&?L|{_Cru82A zj^1w5@rK)kovT6DhOCpcb2WB~yk_&8Y(8JCRxI#3h&LI3s=``#(c!{(=uf4$=%R3e zBV2(3p)mwB*rjxRP$1m(U0pegd+ecdJ-sPGx$^#-s`d>R{`xib*|~X}SjBOe-E%II zjj>Gbs_CB5A8vf#tbE>$E&f@(SF9#BcstO9*Ore=X(#WP(sPe6CEDQqMhhJIgD!0F za=9;-|NdM}6;%im9qqExUf<=mE_u6wiuaEy5khB}rSke&xwT#kUWDYKt-s4LZ+88? zoAWQFmbB@a!}~Jp@GkCmI>%#==+$QHfYy;kOP`@k3vMHuIkn zN)%PIvGQ4I(odeF_vv_|;7_71MGEw`y{(I(<>$VNl~^0d4Bs$ND2BkJvW)vmE~|Er zw}7{wx1>_4Wrgfjr)mcaK*Y+g0(8pqO&Ud0Gpq2yd<@p#Exz}n*<1el`|@)j>j|{t z9m7XZ-uy%4A!A1PPR)#zQzbKS*(*vaxX7X#Jx0|H(#uiWV;bLc_(J3R6d915BDyB% zrTN;SA55l~ut@S<|AwYCI1_W_&WoSm^W1QX=*)*GkAJl^jjZ12bF$uO72Q(XLA z$w{rJpO5@p+AkzOWe(|t*C{@Wajf5jMoY(4>jGVJ(By_x@@TW5Xs^w)K?Kt2_$NOtB(LYA^%X2cyDKhU81fahN?M=)mD04Z~!SC4? ztPb})+e```rSguZQ9aw0XMTJkwBGQzwIxf&p}04t1Ct@ould=eY>GMmU;56>E2mk~ z$xa7?ag%lG!-TD=m9!W=@pEa%zN1O+fe9q%f;Cbw8D|08FC1F-!~8LrC6_LmrCy{C z55`zX?%}=fn^5thmI1i5_H6L>`~&?(s611x z_F7D=ntRA>JI-Lab+8kO^CWwC4`4!Rfc>?r z|48ia;$545YKpMu>q4->`}ag9%yiy`CyXEe(fBLn+830PxAB2D^xdUJawqRsrn@At z1V?{P?R%v>KI`rB)7#9CwcL{W!ds$7*JfaPTBA*_PUi!7w=fjR7qY1kx{uhGM-xrL z?}dc7_?1M-K|*+CmbDbDFUTge4N}uh^Y>#=&7;@}>iO#fg)0<3^G&gkyV0KKg8u%Q z&G>(K7%Y^sUSwGyYyd1p?)dxvN{F<1SJ7KETqYk6?epwQ#uYMI6qdD^; zokqH;x#*;QDm^DMZXwcehoDlLJyPDjV2gX`$J1?n69HcDZAF_j-Y?ig`1mYw085+d z?S?a;<)!EGQN>4Qw6e~7G!ZZz3FiF8gUzC|Q>e7O*(r#}%AUi0b@6IB!)DL*p{3+k zHk;ixhr5?ICCh=I7+H$1_rnDbl_T#@n==YFN=r;zIVf#o+ zHyWuv9~f9ll7_V zs238C{tPIZ$z!QJw;p`HfCs0)ZekKDKIGOTb0x!$K(=giJ@O#6z%X}j;G}>SF(zgNYP& zy+uTkVs+0|gT6X`pMJ_j>ne=xV5~2c09kzi)fJ3}bCG9CsB-yj^6;W;`jCwK&v*5`^m&NE=dNT!myL2F~f!R1~b@+{uB=yFZw%qjp# z7RPEGlC|muhyH*h2w6H_W(Jx(J}SWVC?D5^#bjD2Riy3|b92UkiF)CpH5*)thu#F5 z$Z=reR#uj^wAx&1^cT-dh%}0Gi50vPessp!RTBaQ?G51(62}zM^p_yR{?OWM=d8EH z;Q1}3#OhD z2-OCyW%2ubpjwmM73pU=VjtAqE9Ko!EL!5et0e;DK$ zOI*);@xWV3ZD0On<{Lr5;_!JCB<$I?t4PhmbV>I-#rJ$+E@vkegynIR-ChNxSLCMN z8`Xb9q^6p(ZiAAJs~Es>6)R(Py_U&U>-dOfksVYqf((+SI?A1sS)6|k1hI7w!NX*j z#M0l(InvK{Q?}?RgQ4%K>#EH2^3+@G$5TnAcSLHYn-xkD#e0c!?dwp^g!B_Xh(Tu^ zbCxPP={aM=;`DmPcnd-x5pg32@KW+v)4oDMlCj=jFr0)WtVn@9C=mA7Q*YUM7EpV$ zcQj^-ooA88P3w_L?pXhNrO8JB%4`qi=s%zDUNoyzOCMa-BgP9R;kV^UmUoPFnA&ZSc*zVZ3(c zT@VB~SdGAQzn+qD9QWcGSx5@OV#1mV8GtdbV((MTn*fR_^<*Gubh`=TMc6xGj9tD>hJODrDk1p` zsRjLPQbivMlWqrLd)wzK1vOmaJqq}Z-8 zWc-N&_8nQxoa-FuM~fceDCc`SgPI*k67By9=V6LlCNCdr_kcv>eOg92fRlBH<wCt1jt1SIAR=cMMkb5hg(hAuMuRuk~J2WF_EXBcS$5v_d}L~8+4pI$DYG7wi@$O6tVZht-%2#>LVx)0)(5cm z{%AdD@uFsU+y$v_<5gC?Fjx;Vfpzo}*{{KQzHU8eGBso{A3T=ctisaD^ro@>s*pv- zUtyJSBK;Zo+RW_!zz^!sko)}(k$|znIW*8mYWCJQF=N9(H~g1H%3) z1CYEP6?_!&kr|=p_-z~VbE@R$EQt*H(r?&@H8RQRjjM`rM7r`@oL+{^D!5z#H-xZ4oIl&!lIz*JRv$nnzc{-2C|8L^7Ja z*qY7e<~FY5zfa#LH&>SUocu9m()u{f&&L_`EPe*TVyy28sCwGX=F3#kcaLH*;fJhC z45EN@%DgG{tz9mUBuE86=t@8Dqo;73-q0wyyyFpi;YXW}T*|xWnK<4K7;N&*;xnS$ zUx8^pUB%=3cMtj$lD&KRseHzEm%NVF^c4YPkyOP*$}V%4B-Y zl{MwFnz9LTwKYhch!?1CG6&D-3S3A z1j^O$3>AGvHqJ}>c)?X_y#45G$ZDF1Rq5t5zzV99q85>y|+6AH!N$YRH)cFkzN6Om^W@~(3 z-$Q^AX)hcF^|m|l5Bd|$wqFrvTt!3t|H5qh^?cJWHKqj-XUf-c`Xyw(9wOYy)vun> zr&U#_>|P{3HnTF^u|zw@C|F1S}lsXh3G3-UzoSQz!Yp6pR_!md#mP7V|mU( zx!c9r$Dt*uME66RN)ul*NMz&VP7YP1=0Xc8aHffV;XmRr+&E39kel!6_BsXanZKYD zmDXvmt+{dpNLDV9-JQLWTF$d&o=6dgq1mszQ zdm0~U{TZ@{*(&BjvQtNCvS;l0to~%3=kmg}rdqY1kC3Vxi?E?m6u-ZjNw%_?`Gt5& zdFKPp=9j=Z_b>(k38!6z{{6>gbK6iZLOHSQ1k2yjVPjodRdKhUE#h9Mr6*~~9fg6P zBy`}-Pb(u=Re*K*5Tb{zSJ`=sdsWZi1U78D)0qbAD$iBlIeslOWld5xTw?;11ApGA zEYI9`y08wE>osdL321&6X4{d?P%L*i6jQRK;+@G{6C(b8hk5q~1S8GT->#G@I-jR# z1iI$^@R`|KIo{!_d$jlbF&RokDW;z0(o<8K+^8DNU!g4dRVp9{qTVv{%WrxI*K{hc zr4Q!S5fE%V@EhqHEs38L3DD$+5GV0A%J>iVNT#!TZ2sGM8WTs0 zAQKj=zwG}|=f4|Hw=N&e#~eNa`h@0pNS|Wk!;|X2t*>CPxbto|T`ipd$Uk3lPln4g z%h)0M$bKrv-ZFdRcHlMk&o2dn@Et6CKRh~nMmO@$iTB_l{UmR=!JBr2F+BNSf{=A| zZ>arX{odBLx(59*US!Ru$@#tC+}&J%D9HUUdd1AGy&sMo==B6u#tC7_Us_+K?KSJ~ zBUkzT4Jpto0HgjMJB#E*VBc!1L@?CTV@@${%@ezJz35zoTFN9 z(jhMC{ss9OsGA1wQNq<}e!FZa{psAeKNjCt{=r1a z?l?uPb+K*L5xS4bmn{zr!%y8U{fgx8^sB3Q)#TjAo7i|w*ZlnLAP7Fh8r66QdEPB) zJ-Fb_tNGZ8NH_!j#a(W|?+>1V@*6x;*U!Mv7BgJQJFfs+FO-j^t-@V`#Ie`W zVH9+lt#84A1@bvn^d64`YOUhCnBeL%Bfs(T6Rw)~tDIlmTS{S@kT+Xl@|pBP zOOxJzuw8<;f97pie)#tHSuDSB9|87-o#$5W&hm7qma8R0^$6D{=RaB-4c^vLxbZI` z@OwJ&nfYt}3%0h6%v(go41QQOe|Pb9AE;d4-a5|a zHd8j`eYVh_+V@Z=n0oyd>0z*RcZJ~l>rb=n`&w@}kb`W`b9mNx{b^sd{49o#oj>R7 z8F^3E=Gj4;C4z=&7w{O_Sm{G*o;)*~AMPO_!|?e0(1gF%-zFqUCQI8U@A1S24Mtw2 zxBfw}Nm=MoZ_mIgLj>Q?>p(sS^tSO_`+PI>zSK39%A3X)k-7g7boNbb8}VK^7}K9{xo=N+si-4-V;Ggn#G5jr;mzP-8lD{s7ka1>GdC%Y6h~8#@Yox_{M}S|f_E*`Xoc|$= ze!}PpV-(tdT(?&+Z^@@i&)eVr)HojCi`OzzZ2!pu8e76*5hx_oo(ssrSM$ z?(Q`C%ba&04}k+Sy_=|9GXr6SUV3f% zG^Ms#rztho*PN$RA@14Ci2C`u%UVRO_%GtZk=xg~nUz}|E z8hOrsh6iotW6#PkMHV!#uRG90mb|8<&e!5FLh0)#1jN_Z|Lg+}!)4p02R~ci5FgGQ z*BR^mWs~DNr&quQ@3jtbL1xEPV7Vnukt6Nfs&~{N;ZAC%&;|Q{%rCA>`0_fy|)g{lib3)c@deeMQRQ-Sjbw={}=4N^gCs z^|8l)lfGm>rENEv)*F^+D_gAvA5HR?M@MVzL<2F_y(n7#bN?faNo$j_V3#$?bp%a$@5vNe&4=?>{PVhLbWU}s3+U%E0D*!b+n4Wx@cV(;GtlM7D*kBHKGcGX z;Rs@^cQX;h6Ze;2Y@0LOO~QU8axV&}{pH|zfgUP6HwZVnoI9`Y%kq~wW(0hAB-Fa` zNXDDD+b*r_-7&oL)?++nL`LR32>Po%15}tqi&MQeuog~Ag>zCSrSgWvo4Hl;bIt*T z9%&P%D}@3Q?aX)K@yP+sg*Ra2*UkXgPgi0xv{y-83lRM^m1=Tf2;%qf?`w5xXU1s9zszFt zXZUv;eR(DL}u!ZzjoS61y4tViB4v)P`FbuG${ zV|@B~Yo=qzafHDP?6`0$T=fCXEW*|G;2|xwR!f}k70v^AX;kkGT)5fVOw;nnV1~cL zkl#o(JH5@EXv7x=o|7+6YLAVtmZu{%=b0Ek zg}J%byZg`BcT%t-b)@DvUNM0Z-}1yXv1ZfSW!Pw~9YcG|AtUbeJ(x=FNpc_lr^gS0 z%=$X*H6Fhmu5kSOZcoN(BDFJvANT{Z4-rlx)v1YdF4E5KZ3OH)n51YFu+Q(FiJZCXEimDe+z%Rr{7aWV!|)K_R-%sLahdh~bEzak_36Rryn@jardD825%`T}h}B!p zec*W*Meg{y5k<_hO62~-5yJiA(0q7R`Qy`b)#BgiD|)|bmt=vNF}w59UTjZKDPXly zMX%2f3^fAQNzCS#WGuK{r;qYZyga>ov-%#_Y2MOE&6N!EA8owcFKiF_(TD4a#lz64 zyckWm44|y@K|}j5PrihKX|n%v7l&H*{73&^-b83-mI1%uW!82~vzJ2qF(1W!-{yYI zzX`P4|HC&8cSSK{`U6%`W=!3EGU>>bvyT_w3RoRJ6|#@V0K-N=E9IfxF#~+qZGhd# zKA!W9cqCdkJh%6!&*bZCEvMKvd|6)ma-@29tk>w`EpRS>v&;Lx9GSlzj|ikj@!^Zv zpn_E$V>vRisBH-eG|zF$bBh=BVJ6SK8ak)JeAkTcthN_lCehmruU~@$Za8FGcmcRw~k^XYkPHz6b~&NJvh>7Xt$h^wd10*_ftI5aad_2cWB|HNN%j~;z;gwg$wjF_twH2?d|xINXO#~A{|HN zQj#vQuJ7N|7OCkCC26{qnl7NU-}K2r(>lVP=^|W*8M73o^U(By)ssGTcEGIf=h4>&7 zBY5dW)qFwJ@s{q(xeF2Zpg<2EBJM-Q!%i8Xxcjx#laELhHmvtXUGwd{siB4a68riERnZDkNtJCt!T{=g`~hw^0???i zWK!@ISH$GB2np{KCH16qZn% zpI`bvOWn_}_^GZfv$EU&=Wt#Xc(&(ZXtOPU|B&yvDBX-{eV-f}JWa8NsI-fV5%|Ggve2y5Cw zbB6mWGGJcJrKFp4AD94|r9*Yyd~>oPcU0XW6#kP6S2QYIN@4jfFl=e8_9yR*X)R4C zETmjnq~nOuk`UGY4-*l5#0q&lrm!NCJFajlr6!c{abf`h3dJcgK7Jw?)Na{{peU z__K7u!-YBgPaKA&?K)^;A9CA7ps2c>caD;ZzCp>yzjGPxy5vaIycQq60y4rtu!k^-?C_$ zzMT;=Vfr4z64w70`W7re1lqtFJ(Gk(eR^I;B1{u{?qJPl(^JFa&wo{EOwX4%7B)=J zGdO8N82^8q|Bjw&J5A3Lkl&`H^Zv!Ss-u!}*2S7Q!Ar>f5Sc8QjY#>7=Y#R-_)E7UGi73s= zy649HH(56y*p5Mq(+pZbW0$D0FoWJXEX|-*iU?=Kohg`W7;77t{|inX%Lv=#FBPZS zw=!QQ1WL?n30G=pON@t4cNBS_bd=1n`r=7<5=CpX`PWGl$%DI8B|WGqCl6KuF3i98 zobx{!Q^&t*Tl_2ILpn^oU~eIkP51JG(oRCDfH%HcnRu~3u45fqCf2ZdonTBWnYG7i zY~4c){pMBK@ibw>B0|ap^6r>NSzcof5|{8q*N#$eJG$w|$%RDe4AU$(^L#QQ?} zo`_f88~gTF!#Ax9-xgMkMqmQw!fapYnU5(_q(!2$U$@bq%{vl<3}lTWkwqLg5Lxu3 zsjvS+9$}$IL?)3(2#7o)lQi{$>wF#kWMNANEx-jc#`WcL!X27vA^)Rvcdo(GY21pR zVA<@+Z}+-_hu+?LtrN!Gvs^vvpl8d|&kFSH=iPYrNcvfYo~_q2T)S}Hcl7M?^fN2> zJkOFc^Zre01gTR{E{P&k^{VJ3-B_p;v;#Qm@V1gJ~@_dfL1lr9ehvmyCL406tn_6 z`!6NQy+wMtubzm~YbseC$oCEt;J!imwq6gus)$@0Ok4BtAfLQK@2O|S>J8qM&eUm1 z!C-wTRHY-B2DpH-~XU5wt@4qTCe+`d_wnb{RXEIuM zp3JaoNn|N|9*O8=uklFz1&pNZg8O)EseyegI+KIUt~|T!Z}gO zgU~h$ZHB;J=g8BcT}qrYhNr`~G3I8B=^_Uw)gi<1=&Ck_RA=7f z{tF=`s^jR!=wj_OzKBj1mq3vamzcX^Y{<_gtQ4!=>UDu&C}ww?6cOz9k6LWiE6jtC zi@Szn2aVPjh#%aq)}f#l77vKdUCFXlhZom%YBBQkT^@+Gd@c1A%Lh4L0_~c(jZv~+ zGZ2*tT_lH}RcdZ$iAce@+bg{z5MAi<^GZh5&B7pq@TLhDwe5OCme$U@Xqr#(QvgIw z>AMl;m=qAeWRx~upQW?&h6NR3R>AzvXsmXF_swZ7TO_WaAI+e%6#bKpj+V%Pezl-W zIQr_heyWeoXFO{Tol_g3vnZ&b1t{N)Fm%R)juhmLJeOyQzguG=G5shNb42CI;e(D* z%xqlY#k^?j29K&8WQwaS(rI{3vbBz;a>1z~`GSyxe~EhLV4Fy%AqBD83yVt^OeQ|w zlgO1uG{ht!f!c1DjL0>;@MEWp$gQB7w@wdyk!ug$o6gV;SgV&@%4<|b9rQ;(ah_jA3X$2b z#vtb=Zy`QqVB0cGOmUHas(rPwWRAy(K{A%S8CO`rn{kCDe2ytB;4>!6wxjY1_VEpo zAvwuby+19BJUyb=Mv~XtEAQ}ZX5)ebK%uNzTNUOT*i@e~Qt zdRc?DFAq#VTG;=1$Plc2asPSxm(kI)+@A)oMMsE#9p=Hd;)~+q^4b(rYj|$md93}O zYMJ9Zu-&9}+WPEr`?#^vACV$~U zWJhny3@JXBp}mA2*=>htyHwsI!7uct*PFu=m}%bG5r*aWe9ejQeIq0#jNOLnOMy}& z)%OjLkie!eBQpVi8|~6?PO!rj#IKwz1IO$Wmn|w1Wg~b)eIK75{RT0Ww_gVme@<{>lhQL_^vq3Af!j{`hut z>eiQV8@xdr*Q;TyK-}0Uh9nv@<^)Nxqa?)0^&-}s7QW&W+8LpCB#!)c?l{|T$Ib9n zA>kX$@Lg1;B2(quph{?loAB*~Y4E=gzN2dQ3ugETQ>GRPCI&l%JT$Cab{;e@W<@{m z?e>9xWm0z;KeMFnV?6LxB#W(U=}eNiu2Y!r1iwV?9PhHfF^nC}FtZX&|3}q%t^e+* z$zDx^q5YiLXC4o1eP`n{CHe{rnYFtzQvC*jg7B1I8JYhKk1$v@I77Bfv3JOgWX#Jkl%Kn!EXGk)ft{Dnx2@XsJ7?Ju)v!L9tq!LPbo3f#M$){;%+Q{;buMaV+2H zF0wMW=6DquGMP{p_RB<{9Mym#tSqmm8aP_+d~hZ$VZ|-ww_EP4DXiA_+$$~GsYTB_ z?f0z~D~WW>Ui3`7Mff0{&mdl?km34oS`uCb%%c=3CgJ&dVt~#Ez-@$1-E*3@SnZ!tYv)Exm4&IF#3!RcW{)H%Dlt z*~8}=%mdbU+*%zxu=aHpQlF&z#zwB}au;NAbfMt)r>n9m7wXUL3hh z^ikRBGejE^(VKP$6RMZ@9##x5GbK(+m)J{^a|iEnO86UhaUb1m+{Gxn*86Qc6vILa z1p9G0|3Lc_!}+&sZfTld@WYwS=NJ5o=MviY09X3kKVJgnJ;~gxeM!JM_anJj?eDY% z95b$%}Zu99KZB63w%V?u2FPOM{V-QKxoxMDhw*@6bDmBYtTxQW9pf8hFM_qUE* zx4h<^N*~G^dI$tcvD_4`9g=T%rCW26?ii(Yv*ZrfkUtZi3I96Xp9!~9U78e9g|7^5Rq(zgb%2LaZw0B|S+V9`0&8b#>OE(Ym9+ z{#6kFX<6&i$n`5rb3UxnyOy)|P$lq&la2&~ebA?q#6j9l=KcMGEI#QDwF9Ag@)`61 zq1vsT^kr83fc!mq6Gl9n3Anw`pqgBla5Q$!X+8};GbVXS`-Qcj&4tt6z{os3jl~N$ z@-IsSuZYZF&Lc$DuzcCX?2jOTuuh^izp_NZV!&ZF?Kq`V>vl$_8%*KQUbgPV?<4!a6Ns4cSt!wt=vLya>^E z&Ns5gaS}Kqr;mt)!XOg6#!(G}J&Rf>tRs2kE3EuTjm2-62huLH20;T; zN4Zp$-);NgC2b_!pS32}DPtzR1;L{3cNt!Q9a-1w3qW5D=&%t|U*UtjpMs2nn7&xy z)vMT&b98O5dL=}*6wk}U7&cnpcrQMZW*t>B^8gAs}BXpHicw*x-{d1$#u<;FN? zID`1NYg~M&O>5-djaV-kQn~!;X5?S~bIr&6i=!um-fVL zk(yum5{=^$V$1a280(J*5~sg~~n$yfvq(XxL}G&jN}oo43uPaLA%1vC1UJ zOMpSD_WsoQv$8eG-cuYmnE;$fakUQ`0QX}sfq5bwX6^q|J^{)UtNVf3BOw4{LB{y5%01wrxuYrMY~bTUiF zpL4w`oILOIJ45q|OrEsrYZ~ugj1$KcV)f*wXQsj$c3c~|f-gm?SM99n$20v^lX|vA zYcyJpmd=`gzh2K{$#_X&g@DxFQ+OxyEK;+tUbx6oe{!SB%(Sr&Bta@Kev(h=vnZ!p zQ#H+jJXMhSuk1Z7e9H0CpG6UW>?oitGwbE#SEfc=vbKL^;UwymEm0}(PWpU}EOv~E~V*`9Xa4&FHc(G1=V1$f9?n%f2d(ZvUE$xPsEiqSd@Eh;IK5Q=~Yu=)GlM<@0iA z?f2MztCxM5%bQ`ftNHQHvafP@L&`2c-r{ljz=gk$7BB(9oM-y(ka#%3}T)8i4rZ;AIgGgjjea;M^yTUGDAC$mNmH3f}x$qevgvq zd{SglO<^w7;>mb@mqOzEsm^E|+Ihmn$oY_$5)&gI4((h4P;y#Y0BMqn>_ypg^`$Fc zrbJV3aV*qS?ZMNM&e&W~Is9Q84Z;liMZ^IthoM%ZY~fMX;?FtH&}0jLXYbXog|Zf7 zwU{E`M`jJHm>8Mukf<9riGdRa(y|4{8k@XjY#IZqI#^g@1_Qy5NOe0gN9`(|7z7@U zM`LxsjK!aHIjPY16<$W>uNQK{xh-+PSltxHs_nHivaJU!J^cR@U{eyQ;iwNyOW3XK z*kUw(W#IxNK6+aJ;nf@YuRk1@sG-64>PXEMG?Ga-HO|y|TBAwo?)_>)y;DAXysAJ- zlxsIUb&t{Xp%OZ6Lt^Hpk z6XaX^r<4bYhsdHo7w$CF_=uRO;Z_=TS?C2LYuj`a2vr?fJG97C`_>NaTRX~&<)t!V zi`FO;w&)c;hZZd+Z+%?1(!mS<+$}nM!O(8ygBMhG8!66RL7RgY3@u6lcd5Pu_gCZI z766(!820Uk@q;Rix%Qz9L<~lW4HW!3ioNhK*CCf+FZ2VZ z9}vB2j4%G?8*f;;=vc)$UVgwuabzesOOb(=oiIs$1R3mU15rsN7h4N6#lG*8DHOIy zdIc?Xqy^t!r-iNF_vbKJu#-#xOcCd@hnpZr-#1eld+pNvz^IfJ3Iox&B6^dE235Ao zFnloG5{Ht@llBLVEZES#$nr_6C7bWGc_&_FCdF891r!&ri15)k<}v>xxh*q{&vpV> zxIl)r!vmxFF0~gU+bp=!m`R!J zj>oSwM&0%tal9Jo9?TKP%ZavhSK_Ort_lG>tRPxG=l0Qn2dWIufFbvavfN)PLZ z((fbZ2NZIwlNs0Wx-zP1Hu=>{Y(CO*skQtrOS32^8vnBzM_l@`iTJ>~_jKu!wf;yd zJz_A((DflX))CDe?k}YB5vp7fR1T6Xx7tE)hUd$Mw4|}kCgUhe1Rh7)^(4rcZiYV_ zCr!gMn)%V%e3Jq~0v%SGlgObj0iiW$qBF!9mTSl^go|YmWTI?2h91!D&CCL?<35Bz z7aiX{vZ$&@WYNrG*lHAa_m0}X+_#HZecpRj`SvN4dTje&mTf@Ke@KO%rvASx$0R7< z{v9lX;@I}DmMv}vX63c7o9$6vyIe9@D24Y12&w;KkZ6tw!vt5Uks*Vciz2}2Noh0~ z8Rl3nfW2#yQYho2HnRT@ZD#^sWpVZYum?qN*fa|2wFZrf8rKF9O(20A3=j({?r~vJ zDNqT5QXw=!bG-(!+PYLN)}>fCS}jW5h@f#7U)#D?s2k5UintVU&Hwv5^E~%?ZW3Jj zzJER+a-V0OnKNh3oH=vm%*;7=i5e@q-O5p%kf-ng@$3L~tDEGKJ%yoJJH%TyiFyxC zreMfm<=@3%(PfMntUM=O7U_iyx{O#1)yM?bC-ckW)+cILS!z9%2$&#Ky^Ypz?Ah#l*83vXMTOpg z-PP-}kD#|NDpr>dp-YGHF#GV>ic^RWZfiF-_bYAYeSon_?dpdVT2D}M(5n@)Qa@=b zWqLURuN^L~tvjq!?KW-$$krkVby-0zHIzO;-(=O}BuE;kSd=U;skKP_;gDZAUz##w3!@VT}?~1&owPM;Pf+@$8CjCv!w9i;?Pf z3K{7!c)cAXop;v%ijj1dP9%zp&!x`!M8DIN+4Laz3mLo0gTlOlrcGR*P zmAhTbu4~h>r5OAEce7Kwmc8J&3=3+`du9e{IhBwD%^&R#o;#cgUHdUq^yV&#*C*cS4 zhiSt=(lXc7DzsxEu6N0?*ow-6T^cG2VtN?ZfGX@K4&Yf`N`5tgEZb`i6!wBC+Gyd$ ziVUHazICHxy_w*qe`3A4JO`{-8>G|Fr96v%N)xDR1Lbajs=RG1`-UU8w=A<(#LCGY zl{DqfEuTfVlDqSo7OKt&TFjI8$@`=|si$L!LlLo#zN!!RWHMJP%i~J>T_!D0X@6GQ zB|OQ;SV||5i({-E}-v{E5nBET3@hcmzi}H5RC|O?R|BZ+AM(|U%Pu;J5$kT_n z{13XJpz^&9{Q$^^BV{;w$ashIFTAB+@e4?(TVCcuvg7|xUz`1}Z@S+Qotyb;wO*%e z?wosbdX39w9~SDvy)MBG$D`)cz)2wHJ^%4%PCFK2!iQFS>!0Op@JM~WhtK)~Wmf5Z z(Ar*vx+}0JNgZ_%!8B}$6kC;GQy`sW9%9L37`a|*92;MF`~SKdzF^$yz>R_ z7h$Qq%*Z68Mx!^>c~kc8eUF@@$Qd<2mpFe)ZT1HeH?`j%xTUP){ejC!*Z#l+z_-~S zSolFc#Nr%-_7jUBDgMZ?5ZZp?4M>(Y=4@SmzgWrc`n$wW%|$wRp~d)I)SnBcWLpLq z8qW{+?Kfj6sA#^`$~;xuF*B(UYjtZlLDr0x`-aA&anN{~(Z=?-?lj^`Pn{}a`+_Zf z3#bcBwZQ0MDmB=H0ajfYiZ3%MS(&_m)rQS6b{&A}#m>~I`4PE?^sj3GNUCm$K&4W( z{BW!yR{sm8#@LE0xwH!coJy8CC!dDI8zvMKEbpQ<4i(^tLiTW3_&6O>Rxqe6c7J8T zek_G16dWKs%-~q>`hx2LlDyCMEK3?5DiF*{8uc4~CzsLi8+a&dxT@gy{E85@_UrsY zBpN3a42#{r&18`18e1{CGt)+Q8DQ2!8m$lG`sIDC|E?ja_a*jwncH(z$3YcX_p*tw}mFz_T?+rv`XlD;QL= z-hO@5F}CKYX>E>>DSwsH`n)-$l!L4Vf^}IHF5t7rDf?s^|mCVw~Nb zrRnJ8wB0cu;1*VTGShznl>o6Wb@-)W^c=(o^lR1eT33II#m{D ziK?-b8>^qJp^$tfJ&vtTl`I?NynVRmxc1|#B$q@n?`zg~?n9yW$*W>JJSmM%--Ng( zAN9t1{laCOK59yTjJYIO{AEN@76Te3oK7$uBkbCe>y}}VOZ2qulbBHS zyG#U|JVC?>6mU_!cS(s7zMEfq=&al-OLQwx6j1aLe`@6m-3XkUxi&<43{r+X?9vOBD052T=Qc{lX?BLpy^ z-qRq*eIEmKJa#_+X5+OGGq&Pr)_=3Av_U-^sY%~InpbV%?(Ia+w@KC7m%bW%I+Upd9nNK0g1YnT4QxB3@QX<1!PZm zae(TUQU?H2nmrS#x>|ndRd+;jI3KPQftXN56ZNY*pjf!oK286Lx^;*#cKITnyw5BA z)rG3R=uMO}&b!*Nnp1djdVL(&-s!yBdDjdTKDZq{>~P$8V}VI=jJ&n~g+tK#4A65iRs(+4)0!R!xxxs}hsPL{YwXCzF8qEMI)a$vO^~!jTalF|opa1uZ)p zZ^uhhBMZ4|m~UVtU&iKEq_z(`iVIlt@;OZ!Pma)4IY#xiu^pb~Sgh_; zChSzoDXYDo5kbRsg%I`rNqZrb(YMFp5^n3f7hcb9ep#FI`pXaiiR4<;(P}{G_<*Nh z--Xz=m}0VZQgb8r8TM>*BgPD8?EMGIR3txxY#TTn)5ek55yd{`9;TRPI;#OaYm3$B z^bHL!%{y9V=klw6^3F6PQRgxgGn%td>8c`yevwVC1P$;n$@81XHyN-rs?!w`@4!}_ z`ln~rm+L=g>O}ZD{2U&_S8a61m0Wp$IdAAXwN_M&sI^i|bFo$assZS!Uug^`QkT~9 zLl4L5f5SFTY{joLx~=UT{I|+&CCH)NmhdCxwv1mXx8?krayy0xDYxVJm2z8TzgHC$ z>vwC)Z8hzYq*@NjCLsOyrT)9jDAEMA?vf3q$bPRkYf=p5RxOrtTWi1ExsV!DEn3dC zYTcQ_K&>?q>C{@aCZg5~S=FP~#eS$-yOv4=wRV*d@YPytjIY)%b?GIVlB*|6Et`pX z*GCwY)*66H`)O>!vGK`)GdPi=R;Xl@T8ffH>nHnaZAD{w=UCy%+A2kdC$DIpBl0k> zEK^w&t_Sps&cDfi-C82>yiiGJ=8;~W{Ev==POPX~V}#oT#&&AqD$~z7tZ=wAUKz&Y#M|SxGrHOi)p(o2!Mj z)i}fr*UFR|N3r_X(L=@z`3ARuJXEB56(ojUX2USH2oFFsi?)}ec;}U}1JF-yM5M2- zorpB8;=3q9oLS5;zw5`nckzz*vCUDTYHY}#7*2%hH!{^*hz(iE$I zg9S><&s?nu;g((J_EP*}i)*w^B_acSxxr#POh6^SRGa=~U^Zy=b0D6Dzi|F;Im`59 zqOt#1x7tGI(nP1Vt?NsvihZ-~HoHXU1lOUFuihf?CBf;oVP@(cTl}AHs=kaJt*qnv z{&kI)`RaB(b@GBGK1PYaK9F9*M`H$h|9?2E^stnw=;C0|L7Jf;xvAfGlHHg^s9e09 zycyFnM_ER8v^dbg>EJ%qJf15W-He>)?TiMK=ANKK0Ejb~oeiFbhbaj{;o+L}U^w0J1=BXvW0`TSA;=IGCs{L%cC_`qV`-~6J<9Gw z4)odmah5H@3_8(m>srwLgr48}{a#PCN-W|3iF6OIvtC%#H6Qpedc zV=C|7LGJX^sdn;*tDfiEVq-eJP|X>m=tARx1N;scZ`D3-kR40RRIj6Q76DNb=wHvd zm4?!_(nyf5F4A}1i=cnlHsJ;Om*;Ugp6yKuIc5!;8?@q>Y)cMu`fCpDfRMe44)E_C z_PyRtsv0o0#Tuz;RYGho2^#U5UK_5rV~aYaSIsL-UM*~`{eR&21l_VYTyP{m=}^3J z=#?RXMlyVEhMFC&K!!t6H>PIqqNAp$n;UE0iu-X6JGeE-$z(En3;-7{g#qEFq*R?m zYGExuVeiX#6q&AYi;<+Hc7&_0wq|af1=645-N*)4=5pjz@6D%MTP0)|NSwq#>=^f( z9~+4_$M^8nS!I$*$_dqS(%K79r&F6hlrwUz-8D4bO*bBA>k^L$Gc$q>-pOJAcm5M* z4iBrN4=M}#Wh!N{J53c+WlmajaTVhyq>Xr$yI7$S883AtWuz%O$v=IWig?UvIjS8X ztsuJ3KPCX;um4=J5R8yvBC#p28j&^){?u6&6MA4-ne@_?bgEnboz8g;?{nfgxTS?; znKy4OE5N;3Q0Q3PNxaxMT_ZSMU!q=*sz``!+j5be?DHA*)!#AM9j5d8KU1=H2PW^w z`t2konNxl(>Bf_k;q8mBrii=}DMbUrt6yr%!QZ}OC;uH&uDwqY2iVYT?cZMjwIG}w zWbk(#dfiO99lTRra#-CvgQy>wB?E&sZ2`*uLsrZ=Gf)WvxeM*qTw1cydP4< zt+9WQn?2@tSVZa8*zA#6SDfb%l;b7*QOF4LQ{>W<<2Z2sP%cF(lK(MX$hJ~;+E-f! z8!L1T=wHl-v-@(@PQqvt)w`yrD*P(Q- zAlSQzLyCvT2BZk-(3_^2I`FYksLf@$8y%$q8LR)bK|?bc?e53T09tg$ZQk35WMj;o z7{mI({kRf|b2cwnqhr?ASv{8!dFh$ zr=ceopGqWOYblQ2*GzRSDBZlOOU-eK)~74#*2K9b!A0n@Tsq;Gxp^fGHM#kTx+Zk! z|EW2$V#o_ML!8oyyOtH)(yO5TbPyByRjWz}c2OGpO;dSp)9htP;~oqC&>|6^v)~qQ z(qX!~_G(KHJM41cQx(bW-J$tY!}#*pe$2(z%BLY>(4V2a!aswXi6j2v#U`@$tclg? z++37c+zyt7o%=1iE>Yyn@s%m_N!B_#+s=b4i3xl9v>Glr+OLrV8mif&7&E;_uuL4IA2TW{Kd z(1c8t_Z)#}t$Unsp3PF)H2VhQoY9?isjcmnm4-zzZt06gCeJF$1^<4-la)oiw9}{u zywg9Cue+D{%mw?{qB6+G|CBSSGTFZ8ZG1A624?u&4>D`7)ed6id(*L|N*=t|j6AsTMSncBmH!RII&CNa zp<##epLC6}tAH5s2T(--E*Iai?kkJOIH#CMkKWyRHc={`jhlyD?9}FPz6|227i&IU zK=w>L^@D`-6X*+JX80lGR}Kblt{LU5w3Ut1iJP)I|6wPyhCT5CGOM@nQz|!G&EL(= zb@LEcXyj)it~PiF?kMC4f&6mIs{wvth(*4%_J6a0)(-j4>^^GpO;12S!IM9mjYM$i zT=TJrd%|z&>J8oip_++T*Nz@lqQ@gY{h{=zGW~+=8G8JL>b(^&dr7-*ccxo@Tz5Fa|du#u%_i*tvw6mJ@Dm!^>gm$XwtFYk=?V7d9oVx=J ze6bCQ!Y~;t0YP}ril%qFj_I^fTo93eLI37i|DG9X&(Byhc<-UYWc9D_Ut%l#v=N7~ z0Q#Z)^eEXg^m}U!^_~BN>$CoPlcO#_tUl|nd&r)t?>yDl{Rh_vmp$dC>yJU&k*}lT?v(r_P zZEqqOVf-VwGt6JF9mZdwY5Q@(VvA0)LMJ20*;mQ+x;(zQHGL3i3Z_^)ub^|yeq_y4 zWNr*pnQU*Y*^G+e2Mh{Ah;3N48EfHg8cfgb!Ln!p3z{G%)KCOzdb*zgwAiAz%$}Bk zcqtImD@hZ&>?txl71lKq|MOccGEX5FDlG=n^WNbc9fGS{-c=12Vm7w0yWq<=f zaa_`qg&toFSE>GcjcJ^QPm;!Ad0rn@d_VV)v`f?nu=CO7%Zag z0IU>Xw87oEc}`f0ewRV6PyBvT!dIC6()-J@)FHxmUiqyeRt3n!>ZL~$bdO%$uXaNp z%x=>Pwn(|_0z&+@{sSe3_?qC;a=tp)j%SbaYhSF&2=%1C$Q9dMB%`CY^sd^?kVWHM z=S^iwO#d#D>-Zqo^hmDZ$~D{N%CO;f7@`P1rr=qx(_Tv;=+>Fj32M}uw2~UaDzlMb3WI8IYF1(LK zqxv(u4umK_HD3>}%-m7Xmenx~=}3joCSc<2%Y?qJ9hYg-PfSOfmeLvNmt33TDkfs2 zNaPp)F1tX6c5psm=maFF4zkWsR(L50fPScQpxG

1C89L#Ou zC2AkA5^dDedqSg*i|xW{xn67)k;bp_FnEMctd`SNH!qILJmoxpf;Z^%^1v)1p5!0l zb^cl;{4#EL~2tix|qxg>@2!x0!tZ1<@ma1VTMc5RPMHsum1VTlf9qtJSeU=f~ z0-ui}bd@5Cz%WWS5Hd!`oyzp%&>L(Y(d_WM$?zKyh}0qyA#mRZ^c}z8VI-aS}>9T*BIWCi*%=hO36 zU~d^<>U35>O2%|vfrm{6R)BV|&-ZXv@AL4E^sQQB3_bU>TE4A4H?6d0Z)89r*Th2D z`jiKac4kS;>6U(s8DRFoMcORjtOOcy)f}sl$C|}Wco|r$P*I@mP5*!=Vkv5iIIpFp zSeJTRVjIpdJ!npZky=5MZy87CrIsTWc6cwbWu4!Rvh3U&w}X6#ftwT*n}UL=tE2n* zyiIv`ZS?dma4$Vd+86(QJ9Ry|xv zE|%QaPK`E8aY}#$GsefAH-n|XO8Uo7%Z&5E3ydFKQ#S%LVE?VALs6ea9r6nm15X$P zQvQ(4NWUjunvo|zW3*TgP)7sQo=h62HaJ$<(skeEDG-&XqdOzhucg`4bxazNd^g{w zuz~HoAk3AbZw52Jjk@WvY(V9qmu5?*)u#vRwtO?U7j+B9oPW9}10*&kDi4G(tLYR0 zGTX15xsdivp7kqEAJ6M{ssqB#xRD;xQ6_858QK1=-2 z>Z0^7d1RRVVEm%WOz*^cAs5#nsX;uD@{bV%!<6jyo+o*h2T*BuXjFFvxYZ>J)lL03 z=;KWiSC#GlSZ3AJL%|F#;z5TQjOUS=fp;KwuV{Fg2Gtoll|I`5CcHfhm%0PWhF_+<6<)-}Ebf+oGD4e~oN4b=l&eJX_C5cl|!d zq+(|wQE&R!yr*|N;_s8bjF)21<=*UZ$!EPGM1hW8)GRS{{)d}`7m$`1PsiLDY=Hj; zJpg=;;HGcUnmK|M_=l$l%hKi!q{NcE(V-3D5RW@++*(?QBwk)FDxJY`=VGxnfy?f| z1B;5Fm3OyF2nt5pyW2|I8tM`YFw*v#{*y@SN5#>Sk0q<(m+oy;B~3$5MHch+<^#HT zyN~~NkH(#cTyr(x4yOyj{ezc$a5pl4tK}7^#Dm4@u>q%-{8c%{RI9&0X?P8XCo?zZ zEG6RUlb|*^Y7}$cOTP;18F7T0bpOuKXf)NK(T^5t-}NP}8=2WouQAu7`|726`G*31 zBuYp!a)%pw8|iYgsE`)MQfKT!Bi~EGj-I0p9bpgaR=LUz&aw95JkBx8fxj4Bues$? zgn^M%%@+MOD0)YV4$Ch(Qe~^56_T=WKBb-b_LnZ|AbOmwr-^yvR%ve~aLaa;-`<$YI6zI1QV5=5S3asBc}_)n(> zPxq6jN2vN;UY*2qkzwXsjIyHQN)>Z>o+c|bW$EJ+y0eI-R(xFfi~m_8kJ|CUX-s5 z=_GGmhJZlCI%)z@4$nUvknpcDdCPJ>AYbLl7TJPad?3;nIqXI9iaakA#7;#{7jiZz z_Uud^QmbglN>0oQ3}(XW718uQctcoCf9JfzTiZKO?NO1?t2NFav{g(q5?uP6lv^!u z;U=~;62z9?6gY0lNpMZpQ%lsEo9T~-Hw6r62X|u$DwSMJvDB5wi{hQsKk!c45=2h< z>!a~g#`L?J_^B~n#7~JJ@bBWM(hWc$mO58MsD9`D#P>=4{E|7T3E~%1*N52gW#x$l z4<>f>n0|UBby)mn5z%rhC0MtN&FNsSL(bh zfu_gFB+o2}xq6%`1#zao1{mnW3CMFt;Ef=l)jZem&_3cP@I-dVnt1y zY25(ljl>(}iNy~l7Vq@}R54?X-j&FdT8X`>LtrHG+O4t?^m0=oPkYxoi{wn#+hR2M zbSx5vR)MWK7b#C^^D~e$B+!37;ig0b)BIp$R1>0;vT2OOPA$IXZE~+{us_l@D^6K9BaU(pNjdG zw?!49hq2e{@82%${bC=2CAbbRnHPoi^0~j2&-(1hnf*AvnGClV38%sE)h z`^=DdQD?*j@z}X~%;_@L5tW^vbfh|p6E(ay=d{c?m~$5x9kJa z2sZ81f|Bcl0*)WfH2G^+A<6Hwnr2X!Bo!LTYdL50E1Ua)t&G9|_1u11NAo_gg~O5x zf^$g@9m)2PC5cBcM7k#}+`JznOKF<(I zQb}1v^;N-C&tcv~`H1H0LuoCG489MAvnc&-s`!Ivi1Uu2+I$_oRkH-=rL%6(88mU@ zfy8_H!;kN7`2XmoT1FXu1S$h^;2JSPN4^t6EmAfkXDQv$I&>~JIB$MgfE-O5sUuS^ zam;>|Rc2HyTMjYtn@3)cnZz!!s#^p}tmcjUO+)OB>Wi%z1Q4yOJ4d3KR6VQvOj1g4 z>Zrc!UOJGlrideM%f=JgXEyMH^*vsjXHZM=FD;17VIN-Ql^d-D-rE5=aNe*1=TE6C z#}RSFH`e#|!+o0{WMJAtd^qljxw)7dZ%f_3)yg$paA~6#cmK`zqC_RX|hFzB^`E?)0WgZtX|#W zl+luwX|PvkXJA~$(HpcGY&Uu*^62ENh)Ru$D59E}2ud?&hfX>g3dp515rrdX2lERE zi9 zg!DOYh{Jp1SM7DDo9sK1B?dI|Q_!g17G0syhBO=-aXuD9v;yxv1HAC(`CE4x#omQv zwTU_l;^cLzb+C8`M|m|!CoI|`?GT0046qK;rfCXth{x!tMxuc>uT-cFSeky9eHh*) zX)f4D2LGn*6>;9u>3WCDQHevkJ^?sIUO$740dq^u5Gm#E(32(cb$92rfM7Jme1gH$ z#yS;QSjUH>4zij~reBVto_yTgIRD|^f_V~-8wr0UsP`d3JYRWIg4*<-W|WDqZscN4(W{w+99C1E zbeXyiX~!&qf>MGu?qFyd=}Bp@W^6x`e~F=B@4b! z5R!ig(xWCc8?jC+*4b1j?oc6@;0zca7fVID3+G4+N~36jpj$otkQ#*uEr$s8X3vH{ zXVgg8zU7Xy?>V6}hVGC<4u**wa?dF?CjMSj6Z)#g`Moj^Vk+*T=`0%dF#zvZ;{#lw z8+ESQM==>*45-Ur1^9vFd#vH+3#+AfVN;b>A2t>@`jrR5yGvuKWO9{`v&}xBmhxz&r+y&Gl2CQ>0bvcp#9jXI(SDy0ep_F&R+xWMPL+IV1whJ z1Na%b2=U77<=!T^zaz$52IJ`(n_)iEtC_C@(&r^kToz?JLS0mX(L9l$R!UytWjR`(hZ(JOIhoU6KeBjseHu($uwXzknLpJwLR$&>Bj(@V%}gWkt> zdRZ;|5}F)VrPD(ESbdB4Sm;GB4n3pa(Nal*cuE`{Ph3k1^gAMr5EXPT^kF|#g85cW z<3g~^_}nga1OdAUamui zA1P-$p?8Lix6Soy>l>YlX z22PoycT?WQCGJq*MNQQ~U0RyaQ8 z>Ts;SA(FC9?yduQ0evKPJsj6{(cDM>C^`%xD{zf!*xS%9#P7MG*~RGxkrrs)%0Jq;!fDe4qrUBzfg7DZOdz&O9su2q~}NvsnakukWuGw)ZYeA5lyM8 z+LZOi*)1*k%S4Y|6MnbGSrUL|)<-Ddb=l0z0DSKnFuZ>}rF7QUm#INsJzO+Xs(39i z*Py@eg>=z&FkZ0qz}kIoy;&6HZ=6e5l$!?4t)4vw4JymI+@E*+Q5)O!8ygIV2ZsLB3;nBw_1BnG--;`Os*X9LGy=3p3ae#hGI- zAKX#snv8NbUCE$wXt=+UTXS_i20SW^`V;kz05itcRX|`I5_us1aIXk{8LKF3>AwCs@vZF)7yNJaAll*N6sFMR3bB)O5VukAZ-I#)8hJWI+G8@; zGTzAC5LOO$frv|zdTkE%yvl4mV}dn#@UQ?!?T{L^htD0Zg`=6G9oS{8XfZQgku8u@%KaANcvP5nW;zr;76=5hL!cn7KO-dXpQM^K3Ql8?D<0O|f0#hU|^s>CH z0aY)@lLiGz6Xml4Qzb9h-K}J8GhSO`lEq!w)2zhPEMZ<-iPn7usp$h@QASiM3jZnY zj!)Q>ZJWChFiCt}ZPl0c2aZk-{SH}wpc9+j18?WXk#rXSB^jd0Id&K!5()K9|!nKjM z&xkGSGvv;`M8j?eBfIe>b?l}e_9c8~KBaXzrNLt91)+F^^mY6>6Ln2s@x5C1GbrqP-;ALLG__#?;1>)!bVI}dS3cAo4v z*?y(?Ff8;`_N*BKRpClBiIt0G`dZBcgzy&eN9Sj7(<=#n7=k0yC`jZ{`Ff=CbuwQL zj#X~e47Xh*@!-1PP<@r{pgZqo z&iJ(W9s69sBg15SBwjAnu9?nOcS{6UI#MU$hu(hX`q|aB0cI4#C2qzsCp^a}5>w4v- z{8~Sn$g}TwLp-FImpXyiJKh^0SMgGU+1!0<2^uAix4)kvUXm|){iGy&wr#z~oNbtC zx&2RHNcb=Oi5GJ0%$x#$BjNF44r%;V;uTdP>No-Z|&pt8=8yoVP^!i!RC)+|A%XNt;s%6};!nnbD~ zK3DTuZJs3#kOq?bR76eAR->nyC1)+sdD?Kb#BzymjXKa!f#a!rMa*fGN*qD?QFT{K zYa*r<)aW9*E=qe;>~1F|%3dAjG|EmbNqLHg*NySWN*u}y>67KHZyv0K-R{9)pAr!5 z$zYe7ihDlT-}6FROhbDx*ui@SSrPR2Xt2sb{wI*V8)&8f$R9D*eM!iqL9JWlx(_)8 zI7^0Ba1(0FFANdvuR1TniZG$Z@bRA;ip;JlN)I|jjz4_;gvlNx#AToj7AOTif4RKM z56Gw5Gn^Uaac2seFYoYdrIYe1i4aN!D$PI>L;I*=w3h`3`+LAgjA^HO6Ln8y5k(mF zbYGxV`1o;I5^-f?mN0n+t?CX`?gJyA*mM2lxB>4G4Xw13y(@g#LtH^7(z&_#D9+W! zqSTl{+OSrs<;yD(<&Dx2K|l#qV|y4EC1Ky{@Is!Nr^V&jXVxupy^b+*h|hu9IC{N- zs9Kl}UC2uxnGIt}O@9AWYq3#||ri`k2 zliA4%{12AqxdHi;k<)NDOY;*PNB49#yGr+XHk+xMH=Eb=XK(dCDVF`?3z7yuvOY@2 zvDfJN0)wFn6cJo|mG|vk;cFA3@PLAY7b8zY!u6_?`Ak#(HKG^iQYZwV8d9KeVn-y! z%1cq_Yj1$qA3`t7CUZ0~yLgYwbte}ceK$@av2n1 zxe{U4Kt9o$m5FWU{-?|2n%9fE&m!d&NftyzwjK0Say~`LR)ZAK-);H;TZX{Q+gCI! zS^Y@h>%T<69Cvj0s(urfYDfIkon^uGPd7-8%n?+2QBKb+qy;$K>~w?V$n0KGYnp&# zFn~8&J^_8*c~Xgks5edMH7hg`FSz~5DD3fyY7~IZDx!PuM2y$D+n+vxuzQDzeQ$xR zRMWXqrNiYvpBk=~|jA=O_MA0jkKXGT9#zQwfBI4k4{E^Dyl>bkL zA?7VDZr;SN7-4jM=@D>7prR;(0X`64-X+YB0?CQp~Q(H6RFU2&+bh z3!sKdB?VMKniWvAj-EGnbyy_4RJ>{QnlRA-i`{O!FAdj~M>IGx5Kgn2c(s&95^LF_ zWNnu%s){eY<7Bnfe4V(|_vMmM)B)pB2S~afrK-u9!i~q1Geyaj{Hf@{B9*JyrlM7; zB*opw@yacd96B{(kYL}8xSwqBj8p|82Z{P@v*=t_Ajh1YdamLjK1GgMGFOh+2Q>d+ zJo!|`T%Jq1s>2$G>lG-|*oRwC@W>S?$2MLcIyz=WSJ_td3-3^bUrCewfn0`y7w#7M z+FMdGm!$s;9W$4q^fwvB4n6sEe3-7NAgbh~`%&J`-j8y6GP=2o^kSk1{PKg-QX@X13DS#wf`Isc=6;lqV#&#)%>5|#o7{v& z9_ZkHl-gu`RN?(7uX(pKk-Ym+m>I&hxgX^dBdhfRwF6JUXzq!bx)X-V%Oou&_M5R*ZUyL$d(nvN6*yN&#Os4GTNy#JgTgAAXq9j)J5~=<`6T9lM3ORSVSA@Sp zL8t1aCSuYPzVNaL_g~~TOY~?05~S9QcxaoyMI{&d9C_Ih$2!nknNNgekkZ}EUD|9Y z?hR_byG%N$mu!5fb^mH^GpQhPz20WBg)heNZ*DVLBL#W4nG9KzenYB2KinTa#ja^? zmGRBM6d}`K400459c6fxFUQEP3Pl!Smd)p1W_i0mN=<>z#XY^OSv@5lMJwiAO@JEW zQ}@gvqK-hj5b1**k%uFT*(ZSFAOD?Ku)NgOb45x5d?mR2x7tHmMzx|)^3&IP06TdJFo;iDg z_ zCSKzuVJr%HjVI($91P6_1d3hc-hSMF zpDDS&?|+ji*+|cYOvwUyVm)t|63B4Tf5McIVmK>L{GYhL?f)tMWc-tcKN&W&EB<8V zBZfbDPd|6dpB$*gUGOLO!Po35f3kJfZuygwP%ix6=1<1`Ez6(0NAP?n{-hCohw>+L z_>#|`Tq^~I{K@~4D#D*E_)|WA5|wHE_xO`b^i^SGI`Suf8Pu6SxxW(rWHzsK#h?7o zbr|2xvMF2hM1_1E1}>jD9Y+5`e#Gc6;sHNmwS4YusczbO?O10E&O^#(h+k}VbG564K)?d8z+W#5-#ZVZ6AfzY9Q%qF-g($mnrCbRjY8kn~ zRX7T*vODdC=sMMXHLJVmF3dvV9j>1XKXGVIcQH|_)XMMd9j>o;WG9~Q%uf7~M}fLq zfoV1UMVN_&dCbJeP;gOP2&}myQHVP#g{~DBBJvP)A{BP8x2TokZ_--~mP(!V7CAHl zMBBr!?=Hkf6&AieI|#Aaow|biP|+wh-`PQ3@f35(V;bz_{4UfLQw!7;Ls3^4rbDz8 zGvX<{xtym|jRvVdZzFWXe*Yh#$t@0===k( zif_~sjm2@oJ9OJU?|>H1-M9?)VIL@m=sSE_Q-n-)Z+B~s5Hz1G}?+W2#hal=3_khuGUY>No79x%$NI_U9}Uv6Mry6B8jf4Ji}x2GVjq6Cv_b z2PWb%sUl3ojSu@wgc14cj}QeA=6i7|a~5XGp1&5*lVlj*gi^8R&kd!|V~@z-MWKTx zWNN-9#N1z&RfdoyfbXiWK@&2KJ5lnlXzedboc)dRBU3hQx&WFD=MCvvS#nr;XJ(}D zp=6Mfz+Q$YBiD=fN-||VW!R!}5g(83e-&cF4=jwvcsQe6FTEL0%J*t)i0PStgS!RF zxKDFAv*IHOFo&!WQh>%)sDKI+qYi@#B(Fd=pGP(M*BGmM*=p(mNL1M=?i=Oe`G=8{ z)EW!bx!tN+ojYdG>zNmz2|le<|R%nLi}XYU)X2I;T8k6S}O+xB*1gdls`C1on6ak1$kb zupNJs{25HR#-G7CH1OA(Z@x zk{_Fr+p;C)QgS*aXPT0!*^-`8G9>Q?r)~T3pgixvW_e)cJy^v9>s#I^Z=^Te>q*Ay zGVj|OFqU!e`KQTP-MX*3=&6<9cMJ`$sq`=S^!D;f^p*2Gh}}XqtJT!Zb0vcweozZL zk`K8x*iaA26L*|wSVR8PdOYu<@%k52km!8n9KSbX}^*u9Xqv}~qs`R3Y z&))~WNE$Py4#?(m%>kX`P6*ZNEB^ao6GE03I+69vkub6`g|QO_4mlEGK-wY+CesK6 z^~32D07Tj%O&iUfd;cy3#+vmLe7)4G!jCTd9>1~27DSi%Lk{e}dHz`B5055Ia59`2 z4wJbMf_ort!d?!ugXjU$S523Pi-W)cQgjps4yY+Mo_s`(r&!h3R#P7ihbKc4ia1yn zpt=RG_4T$B$8CkCr+Np7y*v{7D(XCBT+ZK!$yJ<#c`a_e(5tq&b;i|Pm0~ryyiF+4 z?;5vnvhHfDN!cWh*uK@eYeD%kHtI9q!K+tYV4L5RZniGsm5=yF*})@C8HNlglY8fk zy*HAjPijbpszv@E#g3`uO1PI*07k`3w@)0plaD{vjB2Z3vp ztab;&lgL3;EzE+Q&rU3o-lkej^OVh+j4?n00|*cJ#DoV#lQpCf=$voMO5Dc+7ybPk@)p(IaI^bx**)(@6K$thM<0`)&a{i=aN% ztk*OefRtppi`CQfd1iLK$;IBIak2yhyc`4r^muKE1_QWk>KdXHi3V85ChNwWtGTk% zYHDF4beyZ7(LknLH?eS<6HVTn4Mf9jky$D%tXZ=S#JZkpUi4lB8Cs_5{ebrYr@pR+ zNIwcf;5+R+uU>30HQ`qZK$7@GR40qGApldD$o%7i5P&mKwWO!=$Gl1sp0_$STz61@ zc!lIu!FMDVS`i8TGe;MH($Vw(MF5-U`QI>D5v!x;|D(ig;kmPyxy^`G1ZmTM`0E}kuv%y#Cq%OV*ODpvVVY}}+LKPiuT`40c8iBVbC{AEA!UGw`jt*JjiU_ES6Bs3Q1kpAjs|3}K3)--I=65IK)1a?cV z%lw-N;AxXpxUgTjw=$*T#D2W;mYqi89qVT@;9PM(yO&fS@O%69Rz}t9r`#y22qnNn z=vdw_4V>6Z-52~9HhoJ|UPlGPjIX*ML@$o%hIND9g>mE~!GH#fn*i4IJK&eZY!i8? z&g9v;LAX4Zh)<>@2tlQl4pH;sc-DbK%*7NzM#SfA1ql!GyN#HfNz+DnSkfg?*6OZG z5B5fw(4ggAl;VI@kZ=hHEEqXLp|eSY4Ci?ES<%o^6M-9fa$mb@IeBK4*EuTj^+?H% ziGomB+e};J$x2f(EmxmQ=B&PnuaB^rcga@FEbyj99FN1oT*+o)FvaaG8eXWWvc>_M z)6~-pE{qeUtwsXiOtLI%)>{CY3fC3aaQ^veo5YJCf;pll{6H^StKNQlf4w+J5*dGeGP83CH6@Esqx{fU&GLE!h!kydjpkGSAC{kHTe zN2FLjCWM?Nz?yKe@N#0JVFtwlOu>&e7tcqd!f)$AE%DOaLqi#@Ud=fzx60%F#y#=> zo3}TCkE*&J_%kFx!r}`^6cjaT&_q!|QHg+NAdwlJSlqSZZmX?UF-#PT%aBQs=QyHP zt!=G8ZTst9i%W4qF#*|J5ZsC@-~#VCvT20?!u-GI-1lbQK(y`e|Ns2?=;Xco?z`{a zbI(2ZZ1Ts%GNiOkx}MrR{}*flx+$px6{G)7grE0us`snnI3d`)Bsg z@B{cspf9WC2~z>aLo0BmpZ)d|KKBV{v+3<80^a(v_uZLPOm>cGjz^On{x_85)rXk4 zq3&4rnX(UMPS0rMRD^dT+6?q=-X&xbIIQd#V-9y?;yC9fXTz^I(UfwJb`2}DICEzG zjB`T^d#X&XnFkxnHgfLK3o7XC{g(-IYg`q)y?+8F?CFA(x!{8CDCy^W_A>4Jm;^nu zT592$6`4J;sKytI`~YU|-jr};ll5I74~?{D-<6?>l;JGRnva<<8jVDW@J_rlk^AUz z4LwaS(nEv&u80cM0a7}0>NMd+DdF}wPft$vTwn;m^qvHrEzP_h?9lw09r(vCqMoxK$-l#X7*0n611l%=3d-{RPR@-gb?G9H1GT4sL zX*zH|J)ei)uCT5Iv@mOJzUkae%#{Q`5VEqe!CsgrL9dt!m(u$Ma+KEeel2yS_upvm z*Sdd{TKKs#isp+O(-D8M33v#AOMfWz7c`x{svCI0d>aVu;BB7!>sg)$7Bt&|;LzLk zWgogi8f2yhuyvBrb7J^Hlhrf1jbRIK8d&H`{pv%@@-Ybx&n#{r-d!>~rukylFLY9I z(LmyG0ov~CJ*txMvSv6{u4Z0XUo_cJ&1FMLcW zY&{(CuemyiZ?nq-F&3&eUk4Ol@M za$%_44KTv#aXo8S*dJQs9c%20$TM>Il79)|)kNV@NzYSvP2e|{M!qD@72y`hFk~;a z-?QCDd!uvbto7Ns2g#DUc~k$C-OMjy*9dl*i&!6r_l9%!XKcx zz~M^j?c#9NM3FBa7SJP({C!0#i2BsuWrwOK^Kt6$j1i{f=V~XMDeSJj0$`>`5Ob~S zu!yZG2V(XgL_g4{hi6g5)DO=_NQOPujmS6B zPr{ptM2XYN7aVmOJbqdMe9)ePb(?;SJ;pHoCu=# zHJ<2Pk-JPxyRr0u6XBJ@)`RVhwdhvvpWo0rKmL-(D6s&43aOMtZkYa0D~oyyH{PGPWnDisVHG{3=K;gwsh zBLvsdGghqRX>x0~rsF)G%4!)PFBoY6mPn;g$^DVzkI*Zyw%#pr*E5abh0_Jnq0n~w zy_%OJA^I3bTOBZ+w%hCR_Mq;qed4jIcY2qpkb+F) zT$$VsAzJBNoL!f7zA6nKsMYvhXNS-7^89WmSLD`%#8LtI%Jll--SS!|u#KhuB6t@| z{Z=S}Xo^ao<)Wyu<_j^omxBZY<(|16TtqYkE;;sR%|5GpQDR$V^Lai!iV$WeR=e6t z{+1g0906!CRpOr|ww1-bz9HpJ z|C70#+2p`n6Shpt5d_*a?3zxl!Q*2yo}KepGKywMFrGmNBeH=vj)pr}vXE|93V zzpTd!mmW>HlM!h8<`{rHDFCUrpAM0LzsqXErdy$7%-L*XYvi8;E( z#0O+9Xc+!}gS{zV*39rzvg=ISDj^1}`{vcBPk)whOoy_~%nO&k5$`Uk=nqJrzB9S4 z-n#u^*;|yZ8zQ!k$JIR~c!Z)x5?e(H{*Nt2@)NYW?)Ed8t$|Vif*bTaewn(^}SZa>H z2dU1BAV#9i?~|33_WXxUgL`lD*-WW8r9@JopX^K~NuMhuRf8!n=^9{4P*SOZ3^Ve~ zK2+vk!ec(?R0;^5oWO4^&6a7u>>TiW7)cRYy6AWpTRxr4R;14McKw3>#ffLV2imFb z1dz(?C45z1*r-VIBk09KBGd8PEmpfG-dn3#Gur5wtbn*vs+QY*AKXG(t3f6Kb; z-kTun@@pJef~?EeXPF%z#q7UjTf|Rimt8*5ac^SlP@!J#53xSrC-Bw~8nl->6GPay z(%t{Yt)kU(PV+~!EXNlNV^q$Ko$Ctuf{{{sDWy5S;L@qe7kmY;;Bg8oDUsb^{1*6v z_bE5|+QUJ9AoT|!;IY(;vJUmAOJfc3YEXxITm2%+hqn_is$(CIZ-8bED3M+N4EP7# z@3&e>+4N+;FZs9oeP?dJ?^CefcQ*Y#bN;UT{nn;?GW7-f{Z^}Gs_f!Nn*F|hf#6I0 zkl=+)K?#Of-zQpYGy3yM&AO17l+EY&|jbV2$);*uyJ+P;lJ!^De zi!azfVYF~k0G+oE=eYH%f=z9mn(yH*SPZ_nLsva~hzd6y(E57s$)i)s?^>Fui zp7<&=o|wpkVf2R$gwPZj=SV7GJ@UUs=s{%|jNMryrXoUnDUII4H{fGv{u^EO#>k$; zCO0y&iKSR>gwDKt+z?vUV27UQC-E#vgEB_bp!h1iY`doxed1uFt0TB>0)Rjqyr8lQ zpGZD*D!Xehfe+zG6+T`#QUf0GbIqy6$NKQ$mG854N)%a`rtvi9!-pp*HdXJEhtE+| z@Zn=ZZ2Kw(^dKLj2YDl0woFbKs|H+77)w@xWnJ{glkL!XD}+RpgT4^J)6;q9bO^+y z2;2R_vn&D9Pv})C!r@`@1Nj}(e4!eBbh^AyvEf+;Yf*_Be9N6Fw#N7 zhm^y1>=uetbqi+_kTiY~E1M)nH~omnWTLptVX8Q=oU$u+(w5b-oN@8i1h|+$NKys6 z1UbXFoZNO&e299P$(;&%MosxHE5oZ`wLL;Rgc6=o0THP83=s-6SF*eFg=O&4)IJ@| zK=G;Zg`+&7C<;o5l1@{=@q}Kv!8TR^SucxOF9o0QlrqU$-g3{7%( zaOH3K{cF7h0u#x514&oAiU<5C!ytif6>NWdp{2*f=#h@!fH^Q{=`n^LKPa5^UUEAW zL{UX$M&2HV$Oy}p6X(^0mR@W^OM6zEU{vBU33|~qNRe1|-Cab&4L{K4|IiqPcp5QA zAwf}bY7o`Gq;8@+=o1&$3iDdQlG~35A|ytH(2A8#9^iI=A0Bs-C328rfXlZT9x61t;ME(O%*%Y%~f@1 zAc#EP;lME6y_aOEehorYp4i&WYJHH`tnvnkR=@G3sk8f~ng@jK8wZE&a|cBil~nOm z`R8GLUoS@L1^ug=LA*APbG`(&>fk^_36fY*`D96vwpUyF@5XEy4HU-|AdDRd|@ihUBzDzdHQPpvfSTB zbZ)TjnkP?_+s?ISZZKCTTdnVkaF*P5s?~N9fM{)xA7;%afnZiK%bEOf56YVNqF^p~ zP~?2Mx(9q}=BVV((&iE_4ymK{!2ajCFB|^Xwj$63L%Wo zFeC67G<&+ts*Fn%6g-rk1JRPO-N@7S0gcke?4`R-dY zjyS|a`Qv}-Ss^&-lZl176zvBqi)UmL0jEwxASlny3MIGov2MSYYI7Iw2?&1sj@9yg z?vmSB6^rOea$AYjCT5LD3b1-`l89gom;nGM@#JS*CB#O@Ov6<_t4#!A^31e~S}TYe z=dBXdu-djzGn$%hAhdHD5VBg1l19@CNz?FfEjX=Kgoqy_7?fty5e~%l7Ar<#Yq52I zM_udd%@h6@ipPB5`~ba9a_2QS_9rZ7y6^f7tNikkY3M()tI{VgAKe#QNcyy|Xan!l zQj!K-M?dNk3*X?_<0hWDHuuBZ{nn;(C!+LZQ|l>e?Pn!NamO~=t=!)9rsJN=9qEn* z!T`N(GifL(0l0f*6Cdx9*j8$_jiA5-UDMIjWpt<2WsXWWcpYlYb!Zket_QW#4Xa06 z(jO9B)4IW=wk1}pE529RB@w%q`;k7HE+91D-!wPDb)dJp)hUMUCr`33N9=xl`2=pD0?y-)5RxG{wHLDjggkKMx5#<(!yaOTo7;;U z_jQEuE|-wi@&?aI6|CQ43=wxR1<`_aX0-_Alg>2Cdi+dprnmFQU$0{Xsd&yDL|n-Q zhh3~2B&8ji^tx5Qc=K{>=hpr6W`#;$7MJC=8?-~(hEFbtU&-MYvlyBfz7h->KJG{| z^t~df(!gVb(vh|$@g6#N1ZK(3?MvAO3W>SMJ#^OIWYSWi z-YPtMVp}h(O~#zui4XTjyz9>At}!i3M^fptXoe`bX@6oC!ZZ6F-zIJy$Hy#e@&TDfY$)W=#9-=EXhqotp zo(rm{OA^_3YxYJNc_UqPZq?PdD(?vsq`AyWX#LFhJoTxb(j3YoKJ(QSL3p_Iy zN}*8r1?q`naK@lLsFq8s)tLIda5d3vNtM<5)KOd|Q7|#(RaI8o#oX7!o+HdQ;)b`Wd5%m^eRT zpI8C=1xD}%ECjAFjL(s)%`b)GJs5cA1bKc`yprDw{!*5OmDrnTHE_-GZR^wFGbR47o?X30FxtlN`zkXQlHVY1Vf#SY97Ex zMv?zP&RvW9dZn{q%2!$U5pDr}9krM+Y~)!rZzlzECB#u8BT=69o;94K_F~tmnNIq>)t5NX?2^ZRg~n%Fr5b zHcm^&>}}3DC#{D#uW7Wuh^2$uo)XBd71Z%#c>g3JO$y zo2HRit(HX;a2=H3o}x$?=5;_u7_TSy;sY}b|GZF3*$t<+^VB1*mQP%voXx#6WPCRa zn57I@va@G=aI&*cd~a2Wzv&!L5}*i*08a`mj;4%ZJ*Cu0mv)j*%F-rdPPfsk8q>eu z$k$Tj@|?bm3*I~rd>Acz@LlH%Ha0BY+=15NimJ+ZEzU&KPp2@NdRY4Sr}6|W_+dnJ zo5r2hax46UFjK-vv%gwxw@~16G|Yd&tBK^Cy2z{be)GxhC#8({8JduP!~tErzmT*# z^;efOCiO%hTX(G}>k(PSWu24`zk@wdR+>X6t-qmx#LdO`E`+XN?(pXHIobH|fiZT*S8HC0ru!TK^C#P1EVRwb{Rj2wWZap^U|80%X~Sv#U|zXwQw8tCf70 zSKMPk6rjkdw*$c5|NrLw-r8@U_Z}nj^DY2`fP2a7Vw}+wVAjd0|1B%5#9cr)$DL!wgbF9BtjbWvk^<8aBo% z4Znz9pMt{lB<>iB1Q>zSeUVxgz18*`+Lu#(t>Q2WBb}`{hxu@;45D0OwJneiM9P8p zHahtedV)zKkWj$ANM-;gM!MT7N0>Dcpk*hyw3jB=m@^8()`+F*szP+ec1MSmOFSjO zzG(0m9CfBPN8MK~naC@uCPX_v<)GlYJpa;I`-Rnd5eshh{8|q?=iW!>rl2gm6S6ZNf>Ez4$>ta;6Br8nimX-q^~!mib5Dr;2@-HEr1KZ5Rs&e;AR+NdFv{h!mtsDHQ+XnwH&hrG`hVK^8 z^^&&Rg?AN;&O9tdANN5n2|&+GUy~Qz)EGOww6eMArklK^vhEyaOE?D9U}yHCXQ@6N z!XdS8=EJhr4HLhZX)pbe&gOj1F3hfuggPX86Z^oA0H*SCfK8B47u>(7&Lg1dJ-R-J zjcQsHgA&gHr}upKEURkivXT!|({0{_L1Y{%FlfS$JsFB- z*}kILKCl#`e|87Sn$Lqi*?xdjtc#?dHz8-q#8PK}gu{>X$28uWv;V5aXj{8ApB+m* zukl*)1bYTNq?LT0Up)!uPUi}&DeLrlF8Wz_&PIa-h_F>i0SqCM+)hN>kswC~On#{9 z9zeBwA6eZ;<-y&(^E3O+08+hNvkEMFE#GwHYwWzUTtm1@Z25C zPjC{u;>pjyTtd5QP@9pP=NC7RmKDZ4vrRj4gYxhFDM=9r|vW{z7vSkLzO0w`MK9Xxu40=12WUx0-} z1Mp#y`!r=L5!mnQ()tDlJ8^Re9aP&UF7qtxzZVLWH;Uj9$&P}F>MT_j=(ZqNOteH3 z;-@+jjv#i*DbGBsdgf8gXXryUborl>x)EDyUQ;!4H-RF4rV+?2d%O_j4j4ZsO>>UJ z?d?YyY=1t@JNY&af_2wTrZBO%$r)g^8Rq-}5$FWprs(?1WkU)qLubvc>$3#%xSN_- zLat&fNwrpqcEMvNlAS-b?&{#)c<`&zM~?g@J8!YtE>M=b`!CPLzE(*c&wKsLBcTtX z1^g$|2*KO)Uqtn@lAVX3*roks=ZRL^>1GV?oKZN2 zBmFV#X~r=2t6j%%yq1_T5LiPc%Kv%{TW)3rrBK9S*^k=j{KVbFnsGk8^R^lzU@Z6d zk#=~sByQnlxP_Da3|2KKi>U@ugNfJ7tC^3lC-T@`MjqShQ4hqjPKEN@k(xJ^#Kw$B zcBCSAfZvT7k!;Hm!tz4ijkS{=a*QX_U3RRIQBXdQ^%oA!V|^i`zGsb4Uf4@?ZFOi* z*MJ1VMiZtz8y^+u1=$kWo4=(eKhd6u0a+wO*QTZy%pmz|@G&+DKYU-N3je^9sm9J2 zTpi6W@Rp)7KC*yWiZT#3FLx5{{2w4FC*untxSLSxLGT|#B`k+8)B;KQHnIFsJQ>Nh z>hRqG=e)kJfl;0CwgJ9e1J%FZ&j56S4}jIosR6*AhRLnF!UKQ~G*wdN0m4myFdjp3 zJq*PN5YFQ!AT+L^2ASGT`7W%)I)Dr-2`e#xmv-kPg6Qh)%iX$5NxK-1WSh?1ViNN!sm?gyA=0ukf1@KI7XOaT{1d zA{D(%vTP&pDkbE>asP^4gV&-~3Ry5E> z?g;JqXscB=2xn3;gg>wAmXoTy3vUDqXG5q^1Yb~k?&>x zb{Fv7<#Yic(S37#ET_T!&W_8`Pa~qbcgv;hzqT0 zJsx`Hws!u%?bo5-(ywLJK{AOGI7`l7=lLF<@GU)*n0qFMV`sH+)*fw=rC;g3zJ*SU zbZ=BOP2ZIaJG25Vu1I(8FL(={K@3dxlY(j@M0h*}o`}};e^E>Ii(b516&J+GUlfd< zyPT(9EJJiP#~sFe&f>X(N)h`_HezSVjSO2h`UhxD=xIc@?m8+!Dr8<@=4Wu@T=G&6 zo!?gmG5e1o;9wN>n3= z83%wcs;EP-)hSVNRz&uJ&_;U^60Im5c*?TMTTQkIPpeiF#NlQme5&*+7L&h2V|d7_ z;vwR@3b=BnNK=QPZu^Kr_-G-JOq6mDRZJH4c~Ki_9GW3p@x|MN}ifTvO2e9zbhrZr#qe5 zRkeq`++8j>1f%&NH5D=uJ6yUj6ml<>N)Vn7Z2HEk(1ZmfXHjV0BeQ3o#gF$C_P$sA z5WgyxXj3)QGf?Y%snxsrjO4c4tlMAXiyZh!_q}jqUz6Uqt%PBu$9|OT984xkK*Ynp zz8dgU$(c9y7n6hc1y}gi%*{U1fW(T~>1;n^&$)%@<9}+NM|xjuK3#smsuK+4r}LGZI8j$>Ha3zSSbu% zxrgFip%?Mx`jne|4gU_koZnayo|0HQ9yNL6BIyAi;n?fIsC`joqkV1llj8)PTfau1 z;%52rlzHV!9)vRdj>0aLc~;BknEAR?=waaIt?y9kxrg&yG(&oF@U|Pr+e`342(1^~ z;!yO>PLG#1K4Rvoz-K{U8A$Q#hQIw$C~bF_2s-}`q&hn1h^LLrE~i71J_`a}RjH{0e?S3?lWOFUWng+5^g zwM#*^eK&mvv2K6OqdIH$Qu}qIvYZeKV_b)m6NmQkAXJ0>ibfBNLti93h8!g{PR#XX z?-~tbj7Mw==M~%A3Ex8W7FZrVDN*)Hxa@uZWMA9SRC9laTnB)r@LB2OpFj3`-#Qj~ zva3F#{&C-9De)<+C_mu!e65D`4+wUsQ6ZzXi||Wh4@-n%5&DO$OrycE)g^d4v%Za#d^;l^hKh z8+!jr;i|-Xes*<+TuC!gq&Ubp<~NY zkuT813KghR*)K>e2uSyo_Q+~IkR_n%dkJNFUpo?^#tu|eZ5|U&_3S!;;6=<%phZ7` zARDq#4LtG_#A?qV;M@1G2gLj5YyqTUnbR9ffQxy|Zu(wfck9GKNDK}fIFjCa<4S#dm$4s+KYe={U2e}@&3pPz=2BJX zZ`B>i3*BS2j6gEcLl%^%M^4K@l*kRMPeUIiSCDsCB$@=DoO~Xme(EDx^`&fvcd+wm zzDQ#!@S5(Fnoaw8&6@L0oOu9o@=fOHCsgcNEDLr=hg(c!oX>^6&jYTJ(6%vx9^6h@ zCFFhFKdsrESm}=CBNAE;T>rXfVer4f(wi+{V8KEti1f!9-SsjJ&N2e*p{SkJ%|~R{ zW(5`MJsRxK!Zi!NTX7VtAy5js3<;B=iX$u8CQA{GZ)tw-4+=>}jWlatVf5uiwr%V% zNH|=SH-udsp`DmkG~^bc*LX>Z}RMjul?S6Qw}#bxhc`GkmjAF^62Oa^Pdq8 zx#CSOpn=soPr2p^?6di4%dK~J2}8==A?_OSLERCBIh#~7kI9UsNB27=T~ZS*Ry|;j zUYiq`HE;Vlw&FjC@=ZcQ#G&go8)LQ3pd+}ReD0h? zM?`!{j;;bzj{8c4J0i(m#rNE5?g~*&%%g>vY>qEdi_k0UJOhNocodeWvVY8tpBpk)Gsfef%@5;?^Pgg3IQ)8)(48gc_nT z?+mj8)hxoHR5%N|E8N4W={}=1s(6SSqO}&vbiNl0uA%~~a?*fiOtsZssl+grLCqteLs7@MW?%G5b=^oF}*@w!uOf$}?Jyivg z@vPD6Z%QtBJah9QXzN4Z#BAYjj7n0aPI!cF9L2QkS$rB#W;HhZPDjQkAS|JJM;167 z!6>X{*L|Hw8=KCGaeTPZ?xwm(bJEgxHd>Y$4SUXUH_3pMb8u+dH{jerFHtY$Pr22H zwm!K}rbe^?#>Cq+NNWd=Vfs!Gp-oSY_Ov20-=%^u<<4&~I2ek0J|5B~OPBYj(M_<_7m3FkK*-s|DR=gQuI{1`2sZPYlL^@>pnZ~Gq)?;U3jol~ArHz?8M zJ)~hkJqL-&=~H#g?^)wy*nu(k{mwDBUKSYhxlfoeUpHI!)^Bl(aEBjigzjy=3&wY# zQwYA?7=C11m0oiU7gT{%e+tCpBjwqO+xCReza{tSF;hPtP~==RhbR)qbJvNU2<~hB z>H%Iti?g2P$$sWELM0G%dd#Mv4^_v?i$i$P>g~$;v51Ke>=84f?aMsNHr9`?p(JwN zeM(L!Ebw-nCHk0M=ga=)@pI;JhHzGxu(HlRqp?*<;%FrRzofb|Z0@?OJCZAVjyl~qln?y)oA~GBhRI121O02r-i(m4LY-*BGdLb#0BsIw$V)EQhN*&QY^K97!O=Xu{!gLF9bj@M*z$0!aB33|NDjubdQ zU^{Fjynluf_;##ns^hLnPk@k0?;U#)+ZRqh8=Fq0oDhVZqVYmo`jNcwmNY&o%|qRn zWE02jXIYeB!(LbHj+p(9_Q!~8mu9Av?X)*V(@k(u8n2P_S2(e$gg8&XbtDgAq4Xi2 z{i$#3AT+?*lgj>C)){E7f2O8vo4qVw@*M#I?AN09mxWN#xJ;zO5R8nZ$8*?p)y@b` zJ8korF_o64?MQIhG+1RvqHN-&(qx%vn<|V(kVYfL!a^BN?B$@pc+`G75_*HIPEB76 zQJArqx1$_VZWYob4lpxj%SG+G#6#pl=KYdJduLR#c)zIzJeap^#bkPLHP$&0G3-<52ekSb6-CV5B&?fbOcjx2$+Pa%FIps-+Q5b|7Q? zdPynERuoz+uyTo`G|;MHS?89Hs1s24&;j>dk+!`dd4nCw!J@q}fb~Q(Iinhf^rA(i zd#I`kH56sTrHeRRRizEMzvf*t#K~2FY^asIop)@v!|jn+(mtcKF7X*^k=GJ+Gp-8F z>Xv!hfM@ct)IH2fCcV0S5=&OiC^c`bJ}I#zF(VQRyxDD5v5Qp!{bRP;N;Y^e^-nC> zXkO}*@LwuuqFbPe;#no`@iY-hfeHlaiGsBfrlGAJNDCektZ}{oFQgj{Zit0+$ex1s zM9qzq`wKPiWpKj<6c>Bzm$2Q1{)%^qXpNIW?)mP120;?1tKLdZ;w`r?pH-WF7ZtuI z6~0il%W^ll`Zn!;)ZRY&DC_oKqNL?4=yBo1sDqn1>~}g&WRuP5&syF~oH)g58^(nK z;cRG}0s-`L&*g?v$*%`k#4*OQJM;t6@Z*qAj!-&P^bGsBIMxXWL8NPNNjO|X1V&Rc zg-gRK6D^);n6ul3o=5GOhB^DWkaKYTc-)ap%GwtxFy6b_3cE~kK4vv+v|4L~TrcdQ z0UjcYiVmTgcw9;Km_12dt>k(aYSgTU*h+;0%y8r}$uwJ6a*?gLTKrU}y|kE{yi4kQ zwn}@Itd$8QKyj`pV~lufaeea&m{G3DUW5P#z|wY$WM0q@L?%{mb*`K{zJs@^R zrz}a%Bs-Q#zI+q%7YTYn~}j_C)cb@E_^Y$vxk+OA#_`Eou=j6<^WG$0$7?? zCcmBe*mr_IL*b9+dF2hiWdbBig6N|)E|Tb@oACJ0JHG>eaUWPJX8>h|$A{6O64R=c zoC=gPGbq9P7SHmn_4ZQ#kpyyaCC3=#LwBhh4Oy6{A?&Jhph7`$P~uiVaS)(rd|Req zi*DdTUK&7D_k15TA4&K@JXUw=^rGK1=^!Tz_hvY*iq}e6KxiF8fpvqElA3qt0IOXv zpxdQ+40zzJ{}uxhz}#TKFUjX5t6WNQ7;v{d&ad))+zQ=f$GGBNneIFNZ@N04=1*XC zCLV+9zfuzz!NfSNf8-V#R568WbN8l25tl~&h0?M1233qar=>O9oaWapm4skr#C|ctZzE#A?riz9NOL?E#Z2ZoE};2Ena4Bxinb8W0F5^4PRIK4t8Av1 z^XM#EV>mp5=i^DKGvpEh-b!cP?-2&3@!Y2e=Da!KhEop<$&VT9e@ueqETJ=CU$KP9 zI!4cCn<{Bl-k7tUFEHga{BDR?)?g^!psf-u-W|fb4fZ_92>w3fLSjl0^^K5|3%WrP zjIDD%q2D=fr0Sbd*6dR;SG_|{1)@H!;ZTQ$eZpc|U&i@`S2FwQA}B*qJ|6>ub_K&K z-_FFsWtm9&RD8QtTHza$;kIQ>Y}BR?e`>^|6U8B^?nfPkV!$ttev<^J2RV zFBecsUB9_A9I{+MZC{W%fpH|*cpeCCLjVGy;H*|jX+V%Hf=ca?+>R2y5BEeyBm0vH zltpLH#~{1hL^YFu=~^t4v?| z){yCjO@zhvSi0}eU+r6@^4T~{bnIX1oF>+FO%t2$zGWU3%5=pLz#L2O_oL3fMVY~V zyhTFn+uLIHYG{QTBYNXw5eSWhPuMxeGEk5f9Yo%?tH#&2T}FyuXWJM+>)r@Z>a3 zm^1jvm1vhJ3&XZ1R|x=4QvgUb#Bto{@Bs*n2wsF@(Y=+ypOfQL01iA2A>_)IMeMDS z8gi?s&6LwQv`SRG^sO`@%*x_|=aUb1_of1mm3JXCQ^8}aWh-oyq!;;|HQ8Z?U-8j8 z89w3aI>kl}h8#AZ0&8p@3?BoAmw7OeqgOy!w@U@fALk2l1GQ1_ zRt{elxerk|{Eg7hgf&O$Pwv8$5OAU@Q<3d@ThGY{1oH?WOp3UatvF!^dl?%;=9oZ; zWcG3l8+c+M&pXcldNGpMU>)<$620|%<3W_3I?!2B3p^H$8wjSd#Z9gJVR%uGqIyE; zmIgTVUFgfg1etoI#yBy@KkAJ?qPGh1fY8yTPxen9S+h^nB++%PS)8fp zfW3`9hTtd|vwTZ}K@6nNRZTITpoQ_Doa`+U?e%ZS($2cGnTD=pMP5aIfaCn=8XG~C!;^g}P>AtE*cv_!7qKyQ?+%i#I z$Q0_uKrN|VOuT+r;;;@BWtqn&Jf)6`jmBbttBwd&4Jp;Ddk)g#eNzcH&*E?!TGv^> zn0M247~hk6zBQuDB}|?v-G=Lepb)P9Xx_TYJKrh`!H|*#VNw{$I>e9cVD~t>#cl($ z8MeR9?8yPfaM?!E3(2AXi7{-UR@)MImHL|PMA;A(M5V}I7z9t10R3DK z%b9~8lbMdztQ6B}Y0P$FHLKLvXGpEF>x02O0xh>WpKM>JCmP6ecLn@U@nAF@m|gJ3 zKEwp&$W~0)HlV1{{t6lvv#EpYO)O=A*lfvSD0Ln_<|`UOEj(^v$-xt&S!{z;6sNsm zL{9W^j`dltb0L1rqGY!5SUi9VKF(2Ligy~aNy7kpgQ9#=P_@uhEAbff4=4Di;_>f= zHho#Pe41`-llRXY554lettVTVYH_~aWS;t{roJQCt+onb@KLRJVpV14xcqz+3@nQN zFaP!96|!O#o-v(4>J}j+*NFJVxAW1i>LmQ2Eek16`tPhYw85x zd}H7UFG}B?W!|E;T6)U^wu{i@E&3UR_W!UrjbBgRkp{dHCv9 zQD#hDh8|fhqqQ+TQyjK;Xun${3=iAq$DA4Vt5r}fV5qWMG`CWL?bF@F-r~(i%wEY! zH?+2u>a$SK0VmuYih2VNFUZJDTYy6Z46Ajfxk3nNGgsuflZDIj7wt)9ea*H=ij63= ztZ>ywYTh&Bu306jk)#|g=>nWl`=8Dighr2~MzGjrq1xNr1=J0|FP#3zij^ErBU?an zjQO-rd7wJ-brivcUx()SUl)Qiri(8N!D;fotmYd-bg*AkXZ9+XzZm*m91cb>$d6(n z0<)v{UHmn4$Rk2Bk9CNApvJT>nO2C8eGOjjlJPeL@<^RpF=d^&2s9}Rus9t|Bf>SB?*t0&jTu)F0BtKD~`PYGuX zJs3jh7E>KZ59o#R!z#W)|5|0SNQWxjGpNDtRYyUQ?XX7($w=M@&~wM3@*3T1ykk}Q zVXZJ(v|UN$-~mh?qS#$v2JvRL;;w(u{m=)x6nw}zwVxTd)d{cyr_v&|3pnLKCuE<= zol1Lw-swo$Qhc)iha=Q`+d5(-=|7K+4B@j;Bgqm0dVnL{J~5whT9nNws1E&Z7n)wCOAgS^hF zDR?ZMrIY%V^SJ(x&U+Pn;!@snr|GL+q%NBd=Fe>fdOJ4Q+k&H8kdPJMvRK}8{`QqD z7WCx)VmVNhLUo)=iQ2DcEB60VIEL+@oUb2I)Ds2>*z3tU*g0+!07F?4YwQZyav_tx zbHpfPD{VUyZ!lMsAwf1#;q~3Y8rXzX!Ln<6#nRqCboPAU{FjH?z7sM(`!WcbsQns? zFbAA$Maic8O3W`4&u4j&f-QpuY}Zbo_B9(&F+3~|Cd=r1z$Bk+M|-6whRza-xW&1? zZauCedU6cDA2dRk>4Q7CdJPI|JH_L6*-q>Q^))+i0gx6djj5nssIhJ@=>hzea|Dv% zh9v7=^f{@EsA0|xA>h`0D7DZv;99n-(OxSKhh4aqi4f#8Z!*wf8y9VxeP`7S84W(| z3Hb~6Da452ADji0kZ|}TzOg~5K0b@Q09Z!qc<|YdCJ7Lhl#@?nx!5hVMbuuW`I*@^ z?x6v7U3dS7$~@2>%l3)oYeZm(#LV`nbioh{zPW>M%BBnz-0howk1KN@yjunZF`g7j zpNDBf4-&ocbBQLgGS@**Fr4$C6wg=gKwcRZNqIm?c|cmeS}a=)Y9Iae#sNi{W4);o z2ln(7+Q$~W-f5zJlpv-vUgH<-*7zvqFg`+#7hvG5K{JVCUr7yCjfgyHJ}`4JadFrg zIDQavB~%fKC|3}FxV=~_#98VcxGnJ_ad10$oH>#g4lbyPS`|KlqXlBXFzqhM^wg%j zd#m+Ooleu#O()XC2?X9b4plhHt`KSnR1e+Y=~bjO&Sgmt30b71 zvDaPI3)2=!?&vugOIufX%Cee@i=`~Wy3COxDYBdvfI(<4B(J%1#QlOqg0IQ}X_E9o z52)%Qn!a_Qvmd#F#rH>)w)rzptr~ekys}P$rZn$qT(jc6mDS5uIO|x5yLs;^DR<=@ zvX}{V#TajC^LF#R43;<0sBK;R0`NLp@hHt?CS*?0QeIICq8_I437G~hMMFPlFDT}| z&W8`8!$*MwX6({kdKmAO*+0`wRQ$AWyo&blJ&v;#wbES_JWkO}h*s^EINVE55Wbh@ z^4!u~kvSiHje+vXm8^_K#Zu>FQztavi~Dh-iTiQG2y6Da`IsLYn}#Bf`8b2O3QoVv z$`<3Xyr>(kG(Y!@C<^9_>`EvM{_4s1K#r5UaU~MTDdM>hRu~t;g&opm^_z{CW>-sk z*oSEJi;=n0spRdE9U*KlsXtuZT^mV6VNQg4d05C5EW(&^vxC%^N1i#5d;TSaERq@k zV$Y$}pGthc^pMIN(fpOmpoDxvP;P|nnRWU0%5*GcI+m=n{7!5`KX@QGAo4{`d-0Eea2o$x zEi2KkV<{RxjJ$*B^s*I8#r4x(d4aotC%gKWF@1>tdeGEY>gf!{jH#&+_g8P~phWwc zs2|u#E((V*7b_c(m@9l_w`TJA6b(a+JoteLf&(bo%8B^dOVDIbw;yXc{KTG`5c+cX zbuzpq!D+ z9$#ys_m^puDkWaedG~^xZ9~FcCdqb$p`y%BLt-WW${TJqg1FeP8p^)(%t==AXY#<} zLA|{r`I$JWozF?a_4+|+<)bhfOsnO7s__|;rHC;|9=tC`02K8+=fwDN461&{HB~*S z^rK=M&yt=UtJQpFG?n`NrLXg1}vaxq#W9NXTg8fhCF^FJHk=W~s`6OTT zjCL}CW$WGBrDF=I`Ft{p@zQ%kHHwY)yYsw}crB1qtQxVsp=>nXkXe zT*XhJ`tfnHg-Z2fn@9QS!;gMOPD16=hmWqr>OIIj?cOxtnG^Y^PiIF`2ONmDKWnk#FvLYdr4qSQ~Of-+oLp0Dx*-8Q~Rw~nn(Na0c*z9f-K4HM-Xm(Et>j*i7+X)jm)f8GSZ&Bu9mv_o@o{~~k*XN?t zJVsfA{S|~=lC(|WwEKr%f9i>xtUB+%m?@C6SmFgFhW>xbaa`R2B+~BtrovSu?7f0C zs65IUe2vb%p=^g3by1n}bOWT9xIjb~_WH6NVrXtVQ_AjeV>J zvU5;@sW)$ll?!mQIefzA01qph``e_~b!Dd&cNFz^pa&8ZK*6zx3_qHDk2GELiZdmk zWU->{EGqCpMO*t9+~i>CC%oUj@`mBmXkzYUDsr%F`T?ci_h_tvqxgP&1@DkK(*S{N zznMrw*~fT(81Nab6G3;m51Om4K9tNqc05h94i{ z-8EOnYT98`yWg<4N3Ge1pN^DF+a%N)l3Z0k<9i`89Tt+g`QgWp@!Ol5`5e6gK+efxwb~3AAfidwy#8cXLuHH9bdUA+PpA&O0qWGC*H{b*rJTPqyrKUa7_i z8|On5Jz)bjIo`Y*2}S@3OMb71T(O_<6?M150Yf-OT zml9AK!Ed+b-A)w$`7=_DImxCWC)qR_$)?dT04SD)Fy{|RVH?7F=?gS}V)*XE%r^794xMIy{Ars-E{oKcdttv)qZpiAtXX=}3CohQkF_lbOiFY@#U zDHnMY%$WWt*Q2{NpFl8(tGJ9Vnl68^4KvBxdo>>^s`?1yc0RfXH$L&YMeZkRON8qP z4u6?QIQ5t`=&qG@9wabwjWw4nf;!L|1Sdb5Pw*&&tQFCHY*anV4lT54MTPOkKO zGknSDZlrz+r~Z1E7$B@RIj#9`yLVF8-SZn|h^J)E`Omx8j=XZ8-JNQt5akZ352<@TN7a&yqau5(@d1GxI`kB5Ch0GA-)4?!8|!Zjn>C ze!Zt8uoKZ2qrpJ=n0h+%SKF8*&nl&;TA#@*iTbwhAEX`em_+s1S|w7UJmEyih$rDgW)J_;AS&4#A$xh<1Oa4Z2C&li%#rZAT`lx+jApTO+ zZYXls^$=u!OsEKsCrj(3>WXokrUTg^TbrE=+)_#UgpZ(YpSA@Tp#O#A5X*qC&E{yBL->d9#1AMGy5Tcv{b{CD6o<4*sP)baMYiPMp zTcIZ_DCX9X*w(6LdTY{5tuoh@Qf&s;VRb^9Q^jTGtbn~;`Y=T*$tNV&ruozrgZ@Rr z_CeoxT`U=-U92Be8qK1cdcGhC256O=oh6dGPe+&<3*fx%2#;9e?f5?>k%g~^r-j?~7JGvZN{>#l*WF`gu zMgFrt!svtmqzfffa3kR!YD`!m8+!#uJ1jkw@{8 z@F#;);Zjx+h>Kr8*cuxJiM86^R4J89=YuPI5i?sr`5&+6^YP~`T+e}ykMgIad3e_o zAhVhP5Kt>UXEzBx0=gwA%9LdoWDE@AdBa?=WiMa|Ian?hZMG{w-YJzrm>V z9shTXT3xId1pu6dasp3|@6Kc^O^p1N)i#}rt{0%xUvqJp>`)PVp>qN0Y*d}>(^&T_ zf+`VSN2C&%<)IwJ0Y}aQu+WwL zt+Abwo$$v7K(d!RHTiz;Vfr0El0G-re0zV7%lG#$#~YNAZNf(+GN?hp-1qrW9x>Tj z7T3f|<<1Ac0y60_Bmb^)*$uOOx$M3hvF{N~{v+pvI9G=TUip)GrMr1$T<(=idBy7O zS^Z$RuOGTI>z>PqGd>3L6Xh~*@o~PD_#O@d2fa$`93Rs@6dW65(ipQjhr=&=G@B?BP zn5!VKnqhL}!1r3mk}k)b)l-4UEv9hyy*P8F!dM>f()&O1p-e+&oIaO06Vj^i7w6V~ zlg(hXGSI0#d}lUuTdt9a-+775U^uMa55 zp9ZCf_is$gZpeV{%Jx8C{sr;bINHVAm1my7?`q>9p5Ck9`a02Ubn_}WEUqp z54LVUgIm#16W{NKK#18`YHB&jGU$2MX|3s5TGmiW#9y7YIAnWrv@y!|d#VkIq=F;+WK!z7h~0arb?_;SjE=>XiL({E?Vo> zK&^YF)^AL$99pIi6-DAyiJOyVOuXcZSwZm+e-ID&B-yX1#2eE~anO_40jM;El{@DI`wxyw>gF`~&UiH#tB%z%J?gE&#ptyf3p|<6X(A zW&n4J-bIj@!PMbPk0J_^32D21>U>5mRkC&?8W-N7exp-b2 zD>b6YMWwi1%((}*i@f~Qn7R`5UhBNoqEtcLFQ^yIz9#(MDA25u{s^jMD^@RIGwT8(6=qL6a%&2yqmh6zHcq@`RK*{zeGVnavc3FJx zb5fSNpi-8{eeF{1{*KZPtL^E+x-Upwjl9>@+WsG&?zXY~`AS*a7YwA$=4%3IRc_ZgjLNx`Qn-k5?0BVftW+-8$~b(jyD5lVu)`g`bxYQr z&M4h!I#l6NvQ9;o)Zi%=_VXLzv2KR6Iqx_5Y)01EywiL9Yk7R3Jbs?XnQ-PL!--^_ zH%*mN=chb%Pmn6V2(<8&Jf@?6?ZeZ-@^q>+z`Piy=stZNKIE0F%x9I1%TwJIB%6W^ zC|mLVLRNu<>o*@}Q(HobF!cwbsB;g2(q#^kXF*i`y;cELe=Tnd0o3p60-G+hQ5RT3 z9^R;=vhejQ{nsy&8uL83x#HF%?YQIoixd2d;ogNJc(uHxx^t<#m-omlZ(%vj*Skrr zBCl)iMsI}fTL0ps+?W~1+Y3N%L-L$I?Ey&Tu)I?Z1Ew8%!hh*c!IvJ9mr_$JokgOS z1Deih;{ll%x8*JE>&;Rp%_C(=(2&Wb9m@9VUKy-*wrQ%|dG$0}kZ9u0Unb@7C0lW< zJm<|FFm3J;^7u~gF}+q|`=+4Dp7Ny0e?t8+Y)JHMf>R}3Oi#VUnM#TKnh%zDy$kK@ zvX}BeXqDz(;;D0Rt{>pW->4$^{l8|!!<<)9^|=p8z3ta|z!KG2=6g8^{4~(&X%I&D zTB-e-S6e@PZlH>UzSppE&Y%4TNAQ9)=P?RLa?5M3QgXq70p4@XbM8#$HRoFS`BCm0 z^!%&&1JDUz@_)^0Jrn+ z-)>}z&zxty+QIW<-uJH@CQ$#M^-^^$-wzV>LA2`=bOHt%g8tMgx*umNw$GEUK?vqu zL5I$fUY+iJNBl>$Kfi^amHzONway9pkuNfzIW^SF%O4XE0wVAn(8_Y>?GFq2l>7M# zyR-3&geF(A>z1=S?{|mn&V~E)M)^wp6@mS^+}oe0;u9(C7U>J?X;7H?aljj2PW-><^oFs=r>H+96jlbZap zHrW>f=cThlT6i0Yj>Gc<{mO4^<+rJvt+-sjvc)<4@^z@R76zHV2#;8+1D%Uc2b(&; zCMtO6_ZYR{<8>ox$~oy#!G{fs55wSXCfvIP53jgJ+t2ZX+1KLzqs%o8 ztaaAk2MZ$dY{B^3{qb{=IoCPJv_O5wEH51uX8O{Diq*!S|%b3rAdb<3UtCe3z=_ zIjPol1_hLY;wv3!=7ar&f4vcKY;h9%K+2AQIEkx)S2k2qib^cZ%U=|UP1NuwD&z4M4OwGROv$JcW$rG9KrGg#2nXTwggPOQ-^Z0Va+(kU# zqtLA_&eI!U#D8ZBv}YXt&${BT>URq_dn7LkB=b&wr2F?P=scpA>HP2Kn$An(&#@(C zP6-S#>eosHYTYNbQ1Ijcaj;+O`+-{5Qj0co9mozD%~PmOUZ>zbSHBH3nD4HT-tt$h zT=I9Z_qW~rRUq$tK~b4O4Rqc>vET~Z>zw{0p~~~M#s`5Kv!uoyQsbyVjpqV2?xIHK zYNy;hCOD8iKXazv)IC&$+6;6`;Q}%Z&gaT`&CeXI6<9ozq=L6zbnlsYhqqp2E=8h~ zc|1kG2Zn^X5WFwDnC0+m8WZ|u)4LN^M;5$7(REc z6TJjRS?ft_#7ikyMejc^UokZgpk|I0{=3HtA2v~0Vey%tpYax)bL_vi3nn-}xyVp2 zS;P0xl9ZiKSx(Jv-q&j+Td{eLN7B~GMQSShR5o58Y&Az83))*cGuWOda{tM1 z>=7=IOhhFRM_DmSM)gSl6?)*GcxKVbh0TXp5j6Co23wb?Bg&9hvXy{-Q^6%&Pg-OCM%$*~xWJP});5Ak} zt4N_rmVPpcx08{MzuAhp=E-@2E)79+$@Q-g{~k_vfiE{nBhuO=)0*-n6Ql4Xa+c@> zK~ii|qRZHjFx*lAzjOM!Vw@!4K@|Wman|j%=1+s0_5lAQy}1Z5Ou6x+b9~jg=$ZWZ z^Ze3^XLx0I2Bw2zMNGQ>53XHt0?`7P+22th_(n&Jeq2}U+%_R-yYLe?QPqrJ8rhFV zoYxK0WBBm^KXTEXUEo)(|Nby}UmX3NndW_EN%o;MFyBFbEK7X3g%DP#O ze4Dw!8Rz#ULCer*!(Xv)W}Ty+miK-BDt@iut^Onp2*G=V3&HWL&Ii4}fpY;k{`-^U z{qH@Se?QL;{m67+g0swG=SodI&)K3bF)&8Aj!?#Em~+4Hk}}%+Mu~jmLE(;m#!r5{ z0sd$>-Oo)U{85Nk>5+EzYphPv)fdhSz6|{H^qJ#X2&daQ4>mC!*`C-s0GCnqJ|)Z% zKBU&|Cn9KDvn3PR@fQml)#naU$YfW?QpXszsWt6UYOs<6x_kI_(bxY?9;AimUh153 zn^_~D=_HKyRAsWlbnRV@Y^2ySmM%kGjY9fQkW~iaG>Q#Dw78KJr;U+s<$h27tdid& z{I^SFzz`Lg2Hf~elN<09)&5af>=(YL?xRMpw;n;r70+<`RzAAKYP&=P>cy9QiOO9{ zyHvT~gbK#%j(C5&t<>~(1M%Y2!8DtXsD{m!N*8+{ajvFuhDjh%^vd&eB&y`ZQmXCb z6rFF}3~{&{YSAh5@LxYsC>nZb^qa0~c^R`vXfp0eNR~z`B7R4dxL>gNn6G@&^4RcA zM1m|aaiK9N!TuIox0eZk(|sShFvu;7>T?(6o&Y|eNn3Spo_(;|Hp>W&Hf`;hX#LiB z!$Cm}{T9QHk;eo-&XLJTUpYbWE^ z=*Vt*#LMUefL0A<>-pLlMVW1?ofp7h7}#7)ZzMK`n4eTrCecG8sc|S{5&2{3tDw_E z#!t=h=h$~T#lCaJHNaZP^IO<=j6KEG;BsaV_w$j=wPtnZdD#oy3roST^Z3c3fcRzk z+aiO@P5+xem2V<4c=LbtZu1`$A-g~6lk~vXvP0HC;jIc3>6*bB4|w>eOU>GR&3SC9 zfxYaHrD~Ug_CIT08YWBh5ZMF)ZMieKch3Ut_0Oc1>~eQ-A#nDVz^_o^XJTSVF>K4# zrZwfj@~sWorL_jXwb7_p{P4V0@zee@G%sk%6Y!?rHSzz?e4&3Pf;?RWU%%0*iGsRk__`;S# z@qflAVJ&_YA4MD7m%-Y6eB?O23&#h_5`F&&^PXb92@mKo$<|Lald$;($f|RXi_LF0gM!Wu6 z3+34V{klM#V8%18M zU}^s{+K(>9`G!o-Ru4A;W9Cz#=OT|-;W+{KI%8{TORmB6z7RhW1JD>RK<-BR4&)oB zX}i2+GUbbg$ad`kd#()Rvh*1#4@p~RPcyxpRebdtAS9@t@`j+!E(aWE7$pj8=puZA zN>@br2=-7{_&Q9iyS0zOE?mKHBil(xil550vBf@MmQ~8K>L9$ZO-Mc9y1Dy!6W=Lq&@3yB1HIS#Q4|2SJ^JupJvJu9UN<8 zC{VDmuUvvMhqB;-X2Eg#CGEA33VSgkIdSGa0gYxIKWgoef%c`#Avz(<(P3z}LTpsO zGiLoMsM!^2LuK7TW&QH9(A^o%{i|AghSF=mSkZo|9Qyh3)+dZ4>(e9n@n3A%~d;aa5NxAK!lVEh}vR?~xxM|Dkp+2+`1?`M1jTqNNwJE2QnCZocSw zZJzlK1L-5YWBOSz&k#>D@J(|-YBcPRF?o^pV6(+nipr5a%Z>-_1;(78lI0~ELm*70xm8vyl{HI($q@(+qBZF z$3yTm;j{G72{+sNucdm`si ztFh(Imbs%@3T}vzFE0|vwKXywjYRF)T6g$f&{_%k6PW+*rN;c#!aoKT?BgasvCot* zA(NPN=Hf;T4brmDO%v6QMzz|{Bk{8vKaxKQ`}0U)!xoBCgZ40XiL|yM>7EX%%FxCjTf||ipLZh* zJLUpFFK~|mc9SUPzRVPNM{_DXTR_pE9fxGvE0B`VKEwVG@_}}`Su3@`p+Pd*ySoHN zSSQWeGK|_jaY_CR>%Uk-KpCeSosiC&!b2Xovzbn?^$1$Y4!OikZtIZSP)TgeHGy~V zCKG)U-rHX^N&0%C4o$-N$2(%jVZzJx3M_gEXSTZ#2}Y{1d%grp^Eig+Z3Zis)Sv9@ zVP`?(18LH}g~8Ry$O-%BzfmjVdN_?ZBhlVl@kaJUVBD ztiCMELi`)t5bVFI=&j!&-Vh$!{7}jjvpV=w-GzW9HwbC#EH)vZPY9wy4Fo_nl5Y(A zE7$kdY1ab)(H;iLNfa&RBm&cvLtvqSO%n17)~8&?dYOXaTx<`EYbS93&A((LUMN8$ z^3jM`UyA(Z_@(8VW6OOmSEE2l*BBbfySqq91Nx7%NxC+JuNcl8n+P03WBgK#ye7l3 zwg@vi*qM2PcWMgZI(WGj9T_g-|nQM*N$4cZ1IvD;e> z`;HnyL^F-OayH1rfuRRZ7u9BcVK9IXUl61M80?Br0Oz41xe#yuY9^h_r1T;asxj1h zN^t|#kWiFIW7;3m18~LnZ*2Y_Vay+Jh@?aQde2sxL(LdXMWSpe09t$3Fer_;d$$)r!O9 zwBLmcC9*TJ&sK3fL0-4dUf0O7qFI;n2HPexwBw4&|6(O#rs|K6V!T8C zhP;aybex|KV^OOt_#4j~kD;!eC)gv_Tf|yJ{#9tpPg-BfX}$3iOPvT`1}8(c zk{=uEQF-KF7mpQGY4BqS+O7X=ikQ2(;1C|NyVBM~n@o@dF>+FR$IN7n{iwEa7&$|& zUEj)MFD<*p(6?+I_0`-Ms@6k)B{z5i`L({3D|_Q7ar@P&J2pYJ=8|ssb#B&G7ELoY z{N3vcJu5f-P2&YF6X*WFR&kP2*-p?pV!p zhNex&J(IXX)4aIlj#O6|E3Bt}eHiV#L2Nt9!-lUCZX6f2TRU{-Kg!J`&d{UWY2rQD z3JLyxHExySPsQo;v;bm{c_2v9J~6m`xIc_e6omMP%K)+5GcAFZG2#eP%i+G`t0r)J z-xoWt6#oKfq-@1p0O>n0MDZUdZi?Mk4PlIOC2&8UovTDETLB?NxhptrCNH6qTr#IZ z;IBk%_sw(FmWb`X*r$+(t-hyWseuvY@|{bOK1Dwp9%#r!Fh1b|2bvn{|^E)VklbOjH14>{wicL&dN+5)9 zcH(-dJSlNm4GqwfKUsl08x=U9B?bP5Ogg>kS~~1r|1vrG-UJgqU?uh5D5C*k{7U+I zl=M}g2e&IFpT@{cP_8mecLv2s4bIQWK{AA|$i)Tw^=abgpBi2$?t%4w8~Ux$?#+ZP z2)jI6#wmW=m<(k1`3AVxc+NDTiXT>_lU)exJ^N%*@+un zu^9Y+fIHoHpo^yqx{37mR{ihL5P`TCIq5FjcR#aQrSFksCJ8wP=yO-i^ zqYju+D`tt%{93Z!0*vAvMar-(N{LR?Z9?IkG#^P3TVT%yP(?Y=JN!8r0z%`8=S=aO zo;3ya;ZaaiIDO*>atmx88=H?Lg6=qDpd=#`=R1B@#b;DnFTNspvNr7!c_bX)2vLHY z#8X%kGcoiD0c7YCm0vVw#Fq*|xJBZS+Rs-D+9mFn^pUtQH0CRd9Bw)}C#Mtx1H=t`%DE_2zJdC6SiAi2&gd#h zC!)^<;aCJ?(tzwqY{UP2vLv876okjetD7YtcE6y7I0Bj}@{)i?lt}{O8;gMEnwdyI zg0xHmGD*u$K##3535b!z9omG`T1G`rpKMW4<{{XxguDjSypgIuMhS5#xKE02P!~@L z?Q9kb2Tbwc%rc5gF*Ir)7w(VxtKBETwxB)lz^CBGH&SJZ7&w%@QX(A|q=NJ_`mJ#V zaVXsjVq^f#-{4zmaA8gzt_)F<32zWM8RFLci|=r*5@5_qXXx*OoopBEq~v>L*meRT zm;`_#(i!&TfBJurZzq({b(&FTyN+^2yFGSl51bPPAHtRnbxa?G&U zIwaAq`jmkJ_UK#ikXV!y@FMHMgUyUwL8{HrD$&bw zGvl&qVSSHg{qiVW2?ipu;9=VS?qJ5@A>+r1C=TUrGm69d0i3s?GHaj96y-9-BUXy} zNbx=~v#cCH+URp&_C~arv>YQIfyi8fY9n1WeV{Z>$r8uI#$yrUTi=U;W>J~`47i`R zI4(mffe%f_-0_!=QmCzGl@E824`hnkx9d^UB5evX>Rs`IkjUzmzi+GVi4)nAu*(X% z)mMY?wTqbNT_aDVv&<s$|ap(kDh+~=}*NIGsx3CF-rMNF+mO9); zvjUG`?Ri*aFcZWJy~Y%;Uj!IrokVvQp*2Y`(pP(}z(k!PME$%jY5;)%F9wtjJCwr{ zLD|h{9v1twF8c4$$m^oYSVc|YlMW}3q80oWo6Q6taGxSsKzD2Cj{;n3471NOU+i%f z9wQ@IkkM=gr(iFpz+WH8I)FQ@|Ac|8)Af(>z@+>zU3?gd55jWU=4^=$qZFezBExMZ zvx#SGzneW3IgQ`Q>0mnH0q6qeo|Htsk0D00z0viFxmQT-#l z(t72?Gp0Yks9|wuPQg#i0vcQ2!g>mf zZu?Z&wlYI)U;=0d7Y`-y0DyoBmKMrIaPsf*UoQpHvR%QS#ClSwHP9Fuo(86!X0DyE z)eLcz8HBX6r#M(w9MrYeu!bm$hya|bk&S?pne$TJU29uo*r1ax&xpLW7{r|tX$9TS zw<6c3kh0iNo^RD}zQd=!56umMLU3^RfbY(wH|OAGYHCAt8%{#W)USrg1~+Lsj77Z3 z)l1|}hJFEVLRFaIh79e`Z2jL>Qx8XfLZWQ_WSPjJA1`kT^-SJ`3bA>rxUjf;eJ=0r*Fm0vIT5JYm^_X*FTeAI_hh2V>`bW_T|+`2EUq+Y1dny;s9}7 zz3&iqD~fodX0Rzwe&U#vo-;_XqZz00lp(^3QfXS8M+?jC2s3agqy0jYZxXmvTAxKo zJ!yT$p(FEF9Bvezk;<_VCR5lWMc^Wjniwc0(1E`Q-^Ph&ac$$mOzFrC3 z$fqQM=n@6xlri?e0`_Ys%X+d+1i)jdm?g`=UoJ8FTZ(~yFK>(ivmp041K14D%|`>M z5{Qsj11SPn&me)6#K0)UgSG~1qBu%Wsvk5X2R??P#HfVT?9@Ro!g1BH!vtPMtWM zXe1&|y}j7b?HaT>#|yPi@w-s0h?G@`o5U?AuuHpHk+S;j#01=hsar^Qc?dWj9~RWa zx)S&=kdTbr7`5CYw-X08OKuxUV3OQm#=R6MMi{Qy=o%bJ8)wFqaawUO5bZ$1j4LAb zLXPi-GrF=d#byHgsF!kKutCI|hxK+T!eQurSZoU$J*XyWqy5yo4Pc*C0((Vo+krK^ z!GMxhs@+9O$w5S3rkV+;2`*znWkZqbPE{ildpj9#wmW=#>`N4GKPCn)QM`!`qhJl4 zOe&VJtd-)-GANc%F-JjRi&rd3Hlq>Z>@rk%j^}h}7ja|-*-?-ckFaBGtD@kqnzjQ+ z;lgtQUj!b}B~9??#-gUa1!YOEMZEZL(BJIL9zipA%$ zB~XP?5sW4S$3h&&TWNK}Ft8hTeXC(nv_`;NZ*c_F#^~w%?Hp^tvam)~jE@8Gt}I-EiZJ2YoU+q91q+67oQ zlj%XLo)5_biCL#_=&|ni(3A=w6>FYr(6?s8lt3Y#l674jxTZy6bpsM0NN+%rmZIg3 z_lTDNpWz~VqcN1F;2zPSeZ0*ypy^8?TsXZ`puSf*LsJlzd}4C;zUe;}dw;L1!QQ!p zMzHrA$-5HHz^w7xV=VT587kM$6`W2+6gKhiDdf8Ii=_CF2(%s-Z~Z`f&v_Qc@93WZ zjQO1c=VXz?SjXO?jY$RY&AptV%pY`2!0Q z6moHZ0KH+@-0O{H2~-=4n*8_VEpu2cn}rw{O$Hm!Qj>vITiT41L^EWbWG#stXSD@g zz=psUS%yn2)MRn!HF8Lf7mB8(u!C~kn0g}fXZB&fMd_{KU1OgZu6@9m7(QoL7win` zPNih0QyI4IXl4n+oaSYvHd7-Q?j)*jqp9A^!$*T@OADmn+gw}Eg9U~*!NHoW()?H3KQXjk!H&g>#y)JxFaQ+=$ zzzb172+@I-A4hTM-}c@j&9Jv<8J>$P7ruzACcP((V{6ZXZDR?(^Uv!n*b&^0-ufK9 zw&Q3p&`gifAa=wa8+oK2lhAetwEt7z+}uHSK7|L;2qyS=N$ecB!0OLJjA-dtd*kh- z%=!4c8;>S zqDYpKNK7iLMDEYxPSno2?$2fsb>T_5uTP+3IObA>i7%-`45{1`0&0Z${~no3(UX#?jiv ze0g!Czib-0*c=@56&V~kFJ?c>)N)aLBv)IT18Qm)X{*)n#%NqzAl)>H0!n^kz6T&7 zcsw3D0XC^ekwf}p+U!wNcT7i9aJmo!F&`=ozeu&sbdw73TWRRcO1x8ReZ0^u58Jbi zIQ*j-yZG?w=By0KKn1~#b^+zyccqO$)xF53WcsRj=>t2KZ#wRr7|uxS<3}dPx@5NI zfAcUT)d>(Su&0RW z&=9Brf*qz1XkiOL)tu+bY0|7x$8%rQuWc0n2`tF>E4v)yqY z66e_$6&%3nR?r0N;j?gHzpor$(mbcAi}QdI{CR2T5(E?6f<*2TkXB-8cv8lS4fnqso z3zbEP74;J!fa2_nfSNnvwbg{8;6WU>G4P2(yIfl5Jcv?o4yF>YPk6 z7~Kcd>Ca(WgXW5ICffU8&$l=-wLHz8G`C$vMYK#N#tf|p0t z*R&(Ut&yQAdznFWzRCs}h9)@b)o2HI2G&nz(8x8!=5>gb6DgQk$syM`WKkfNbO9AQ1I4ldr!J9(>(!vA|DHq(bjRsxYE5*D8ZN=fsXX7O(AY=62vA$DUioi&FC|La^5MHy^OysWwwQH1;R=P01EvrtfnQZz(Sr z67cyGAQFqcb8=VZdB(2F_Xir=D`M*t*8Ykgx*7W`5CC^Yll_%Hj;D|zLl-67UpWRv zvp>vu1OC&S-CyxI%WJxU?*YE{+2i6F8(I+mOy89#hbJ2%EQp93;0of=b zONb3KJM(3aTKf~M{_NV-=+DIaWx9!4n%OV&7)rLqk675J+5TKvW%j3S7f`hKYkUoI zvhgm?!d$>Y{4beD3j%ME3yk+r=0DGLUZ z0OcMm>|G|-W}$@zs_=sDW-w0$rsH1Za)kn>WaUB}QmyaHblSTvd#rLNQtopqQ;Hq2 z(r`>0s!IZ0UpsVNnt?7dq{ZMo{ZevpjLjIup@m^e4#fp;t-z&FnYGe+@~hRjr6G)} zcoKN~+u^;bS2Ni3z9)o8w<|KP#gK2AmjH63AkV2n6F@K0o{`cDgaTx9t~Ko$S8|DZ z1QAbJ7IAYXO#BFQMBQ-uoO&72Wx}BH*2MxY96jQd-N@~9|xqi^4ugM@+8Kn67Vp)jYc~< zEUePDQYlV#lwjg4EjBpAUb^CcSk&_#tG`GIoB_%&4MvJXuTq9C3htVUfRw-%q=f%` zLDdOHAvHY1fcjfVaahfsRNSvxTYeo*Hx=#XDmU7Pl!I|B#V?rnVFyA{`o@!ivKd0& z<6&PMNBfjJrFm?hG6ljVcuzLu-tHu3E0T$uY@&{D9O4ZQ1cS+McfbAGEf2LqSQ*IrPDu$M1mnQb-P%i^NgdjY zJaRx?bskDFsyD}gG!rUQzeE+rcqrrAXy`3c7Mwt{afuZ=5`{XA!3w7fWJ-n#?AeY( z#R(@_sA$5K^(jc4sHYNg;<+z0?I#N+|GO}X;)w%gm=buEPar4a%^3=l$iU>eqH2$7YvYBxR+a2~EtRLSW zZ!T%=`@U_>_g!j!YJ;+Z=BHD8C+i+{8?SH z@}-;3+J5hVJ*CR)TU<3OPQZDQYE7g-4eF)6wv1KoSUy%6UA>rai_7y8jSG!UVx_aql!L_cM@6%kt&&v9IR$Oqd z``qHN8Xa5QtEM=(+OrWQbUGY@c!yGIP>QD%o;cJ5RNtyhwb$;*|B3yh4gYo3Y)LCi zT~~@-+R?%Tw0Y#xkdE1htp&?TtSRq&+}7zZAp58|2^zyhZQk?=TqVAlOXq^H4t z>Cyf|4c3&cQe3^TX?F{oSJVm3`?4C~^mvEE93lPGUb^jz>iZxQWpCT3EUkv(qxRC! zou%n1AcAgVNt+@+zsmP&xV&ENwcR;=RC)@2vNF}0x-@Q_>GOeiODf|B_91~bY$^`A z)9cmRVFy5ym!-QDgGbu z*110rL@M}hd|{+%^FXVV$nhrUg4+CxaNJ<_+lG_WSHWRKzpuOG3>gsfD6bVhk(L7g zJU;eS0_TyNi3y4WQLS(?Gm4i2IAG}2cdtf5s{x)Og2nvY@;}7rMF_#FG$@yv7 z^!WMd*fGZZM6XEO{FIu3`RRci$V~p7ivO?l8uq?dfws2toWsUkpb9LxdwcV{cpT

LAJEm8l=WPQ@G@We&yP9ffgoPoOJq_+@X29k0K`S2l*%-FRY}*Y;<~ zUb)V}UYVc-M&c$hO5!nrnYtUssqklDhnxK&C7-b%!*B!+f|ZbJrI_y2(AAF8+q5by zR;g3da^~WFDVIYcy+i%8LnE`{ibuN?Mi0t@51w`lwyt6Scop`!&ve7*y0wa!n6L`| zhG>ZyE@k)%2z;qn$wIh9&zFk}QJ(j{t5e-?MAnj9+4K=%`SRXZkm6ntd5momeneQE zp3Gq^TgQrXanEMsHje^P2GG%8d0V!4EZz=K7Re^#!}+A_<4`F`X~IMCr1as9l9c>A zdI_Fxt!Y7YLN5GrQc>=Ny9$2cuL4P`0=HAj@pg)e1XHl4w_m>=1e0hcG{uKTGRv%I zn$CqyWELJnDkjA1FmSPUXc6=xvm4|@2>A-~vm?>C5 zuF)Hiqd4>)B?wsq=l5pitiV8C^{8G7-IDl zP!6W~@c~ZrfX($jiszr#6)vvtw_&WZyLzm0_nLnDISq^)!1?bh%wC%?Q5-^$s60D; zgYkc?rtZO!{1*=_sRy*mk+c$hkbZoDK!H+%PATQ?6FV_avC;@sasHq#poQIi3 z?X@fNq*`+@O$|FSZD?ZRNk@%$uR*RF+yLw9l6f8-g2q9ge&bDye5DL(mydZjb=FI&2{` zsTpLD4bl=cL@7?lhLUl>M*s!oh0=0x=}&qww4jOy<5|Ok>kQWL`bqJufjr_!Zfsb% zhghj`Hdj+us=nVhyE9#VR)Rs+gRG)ik6qtQ@QqWm67!9O67=;?Hsu=hVUyZCc9>vq zzYvF&z;PH*$ruCWX8WK$zjHGp{#+zJ3dZ*C?4}?#VQfl(5gn6(mqqyuJi&|p$O z{?g5`6S^=R1%M|c01#Z!uC;qAilrKr48rvW*D@j8uL#as6x`nooZlgn!Ou$+e^(&D zP}X$uC4s)1kOr>#ds76P6yV8mhTh9&?{Wc|e_mrG!wnakM9&Ii1tQk~;%QTp!qh}w zY$)*_s;F8Kj;V)+qmM^i`rv#cAOuV;m_hqZ!Kv>{t5Nv-{4ruu_^uIyrBo@dQ~YmW z^8oky)!{o;U>aUDT=}jZSN^%efz^Z*Qc68*4-0di8pH;eu(03}@=0Z3Pc~Q#hLYTo zjC1NEj?$1U?xJwo6lZPG3Qiudlww`Q*codM2*ExRcOqTgVuCn0Z6|UgN&fusOz{m_y zfGb$Kq9g7>gzhH;}s@POM^Q zX3ILS)vP0Qp67)maK=$mq(gIXwv>`Qj~xLRgdVWb4z@_}DWOrWB|x9|rvP33w<7|5 z6T&@PJro$pr;sq?6oJd;xY7VP6FivI8a9fmzeHZ&|J^HgSi&~J_ZYvsur3)ZhTVQ+lQ1m4Qi!7zU! zSYZlmcJ%+EO%Eo$O@NH_0liocum1zQq@qWuO<&$k~j0&K#?8g_`^gE{j_g z0+dq%1jTm%n$|SjAhd|K?(+j!PV?t@Q^-JN9tPauvo^Y67i>oIft{F(Ou}X;LKwq0 z3mUX&hV~OuHi=WbXCJe}#0arqChH45PRl0e5rQ_awWmFNBvO<|Zi2ijdcii!`>Idl zt4tB5Mw*$m%%!k~^aOEJM1;Ob@o>gUS@gn{mT!vO;t&%U(nF|C6ef4?9P~?f1Reou z@>wPDEyyl0Yk`#w-|W2m%QnsNME!mwZ-S!b`xBsO{oY-W@YC<4tbu-UGu#XJ-0>Oo z|NeutLJTRvV~XPME&EJ`HH!GtZu|xK6((HEz^N*)*QhnsC#a#5S|gJy_>HUA3bjVV z8gr-ZS92Nmj%vHDb2Svfdk#>Fp^(MDQgl8`CxzwV9SqMi1oPTAOt~`+O3@T41qkg7 zmQ1Y}ioxKR{sV1o>B`d7Iho7+mRD z59z`xGX2}TVIURuNI^Ls>?D`4xl&iSd@Eopt%ixlc-8A0PS6rc=+N~5SHA)>g)o+_ zB@>h}js&)z2Q|Vc3}$m$g_hhn;hsC-1GT6y%~yYOyVah1DQaADUb_^3wdW4rFYkDm zu`_Pk?-wI5(|rctzWReOfVq2m^8+5(k#}qF_7^5N#UFwU;>|x%2|Or-5omOBvEyL` z{^0mNLoRV)@cohj(4^t(ONvj{Qm_($!5|40dWP63@QSqNC@@kUR+o4WUama&CUj4| z20uqJAFK&++KZoRY%uz(faiHIwpQXw3_SV0VHCUyF9ZfI#!X@l4U=LyK4!Rwn%qVk zxaj~9eHIuEji@SmNr;JGBaH1xFf4~n~#hUPLlku+K1}Bg1oAm*Zho!T7$G0N1Fh~oV z0{vnBc?6`CCkbTl&pt11@-5D zGzPNvxoibEGGbxKMQ6s)Jza{{;R?(HXZAa`L&{8qYNb6u8v_{!*XS3F?Tnzpi0=T? zI@L08vR34$A&B(RtWoGReJ{*(939zmR774l3TizO$LTboRzqL1rc!QjmSr1a#M4Ru z+hGxdBhj)i;qUf!2H~fhU+_&#JJ6>f+BK((KKFp|I8uYP+P1fa=TJ230pOpd-M!fu zB5TloZ$6k%HEt5y%`p!0fF?sgiMOItTtQz@#R3GT8oex&nR@tLiobHh)2P`FH;^`0#RFEfggeD#awX` z`axuj0Fy1ijpS3fnUynFzL_JoF`)&ca$snlg1sjAEhW9cxGWgPu}CO|+;Z?zOsbBSt&8uiFgqmW(SL-e`5*gx9&CD(yB1t;;=! z8Cs7QxT{H8G=x7PeAMoB!Mr5b5rexixJj_uix z(t3q4_duB`*cYrdV4)6IC^Em{0`^^jmbUVo&#E-ML1c@MauNCrIK(kO zKmS5mLI`H9zA}d84Pb>rEV)ulJJJk9$x&nn?j$>%l~ak5@ksCxhO`P#%A#4K+Uc`$ z+c?N57=6mvlusgS8cu9t?dWP5z<93 zycD>|#!X@tWfxBb*=n2qYL`#~JW$C-qxr1QV6fW#4>v=jgvg>%g4}W%O%)p%V>FtM ztvG*_M&Fogqf!4qqEW8XjR06jHKnonoYJ0u72L2WXX1%!7{4S12b~V&G`+ouqmV?8>*b5eIquwj`NGO44_)+eY zc<+Z@Q9X?3Mtv~HQ1hi&!FtM35AlBbd@&1AuAe|`^M=@$WNBRST*vp}^!W^Iibu&h z(#PG=EcQhvAS)U6dmP#sEr>8c-achm=T*~#xJcRy8>-bf^d%{1lkp{) zt|3K-DTu_Q|7#y5W8wcP+&?qfFT1rjU*QZF;qAPyIat4>N`^UB*f@fl(RDMCME?mj zajNr*8u|Jjybe9hDX`^`{IVB$u#8dgS@2V3*oR8VXa9?;LtMyJcTA4Cm`%^1JunB5 z$@V^qTK-3_W2kg>C`+67G#}7NAk=t!vLSOU6wYC>)`Qk$HqBQuEHjj^kv|c#rOxTNTDd+N&vBfo?uszBb z#uiuc;sLyn5$+_Ax7|fXxmE9v{?Xd**nwdU*BScxYUT1%q@%VwBHtSZ7%xk{40{B0 zxTdA(*I~kwxr|+_ZJ)%ai>$XSD-C5?vr1bWBFTr@Ea$7)NX$TuTF|J)Vmq6klIb}1 zwf`{PeoXn1a#5KexszUkHhoXzmKe}aS0ULqNTv-$agnR_04fomA;+Jds6!~uMsdrSmHKZ+OnJ;qxmn~h|V0Ze1yqmJ!(j*b35 zXugO_CQvAOn%38k>=&4YnjAF^P1AE(a!>xiQ!O5aEB=nsvaDQ0Va=U36s~yEhQhxy zv4$eF5!=lUG|UZijC5pH+MP^SjdYE6(EbG_>-(6$P2>EdkY5iQ(82Bp`S${7`1i38 zPKf$ByxU^KF>8WN;05LZ=c&LW$6<#4v{8yAu6=i)&JK8`{Y^(diPqDu_=*P=DtIqV zp`vFR^tmWgFNUCEdmGi1C(&Q;KyxL+8ygMuB?eGUKD>b(`T+vp6L*pEIt|MD-;Hu4 zcq0kk<9Ma*({@DlQruZpQzI~1IfR)&O>AW}>xLmf4bSY9<;%97Ls4dZ~uLlE$H;q!{;sX41 z{8H{%E!{nEEbzh2ik~8|8UksleQM#jS|82&2Q$NwKSdso3^>?0FVLfPU4AgCPei%e z_h4U=!bz24 zoSOnm*)c2dV>ORmp8>S|7rLEHD0}JZ+tB16+2jL1%AOYc`9!VAQmIvzr3$*KjAo4+ zh^=^wpemDIGcN;)%tuB!nu%dE5)B+ALfGtn%r`rt+H)v11_T&l9qal5KLR3Cr5;AG zZq(cc48#*>HU3%IHxbFTM4JA6FSx+Okcy|-tY5TYCh}$8U!t?8V(N+_%8& z$RiH~g@7VH%Ja>B%V$|QujDIC<2~)?vmt(^>I%Zm{g4^+r?4#i@7cgoS?IM&Tx?;9 za7whX5j&5e1iy?N<~A3c-b2R<+~skbOGGt;DSidK!-V@#6-r^80ECbuKQY{Y9`dqq zWGD+i0BI|#RZL)Dkvqh0Y!QWs!he%+ib}wTVw1qui=-%E8hX=>v7qq> z!40q$BElhwV|hFmCk_VX3XKp>oCvFwi2zGLf~$6f+`KV32aylPkgbG>zTohT+SXW@ zPSH=oJ6HITxj+xy`wGKqjql*8%CyBy8_v4o2k0s{cYGKw`q3@E1Giuw-6|_M-xJas zJuWI=!S}2;R;mxTfg;hu@>k2oO?q&RSMR5f0F7yb)o~2&~s^0m6bch+b?$**e7c87Bbrm~cvE~Evk+C>Q(>I^Po3!AML!63xs zBK&-S_{@S`JdkFiG7O&M>(!cF4p(rst47N$?zaZV%a}nA|JUlU!*2_q=Y%RoNYd(@ zOCY-j)`;D5G%tgpOm2g2Ouj6`4iThbzJRGJ}_Q1D#;M`3g18P`E4`&9*I- zVNfBu0#=T*#zGDJCze`y=3vGLLa*?55qiZ3$D4XZ9e4u2Yc=Bg82P=g^}X8ozFK}S zlHX6ZzRxwj&y(MCnyf zHwQbSN08ku1_Jr#6+0u}z{jHCd|_lQ4d#Fvr0szzcwdKWhH+1m4gU(2MTqE+!qG)I z(d*uP`p;k+2)D>)dJnbov=<7lem2Uc6(C!|kpt8{07M^{e)`GVGjK~KmcE=Mvgvcg zx*IIDjw@iPb)Y6=6?IacVW~Y|l;{`9xjdYUY{vN!q+U*Ug1#pabT1zGV*m0~#m^a$ zA~WyvHUNV-Mcf%p=kQcjbH#Y4K3VhYV)KgUZln(?!wq zjg_o9GVr4pbTl~1fVyY+j)qnzzUICf3 z#<{{H#73S^#HSGsLOgo0=vCZR_WL?g6!RYuc);E?>?TO3J#8*B5!DNL?Od9HvpUkS z`EUh$&5L)={VU;$prSN8WLPOl(pFDTl1?E%nk|-*wbk`)G2lL@0Y7jq3?JMho~aI+Bdm0u6WDQ^0F3s@2Vk!NzYY&XawVau z#IV|=Mj?035k^l4mZ(ANhO%uyigSk&Q-=*>o45Qa7_0p25ioXQ3}dhzcS?#e8y9f* z&%kciMYkJl!0G)RZow}@tfE^m;uFEGYF5rXAV%rjD&*`Oa&-${*ey7$GwEn9UKdTD zFV@nyr02zR>7X$uWQz!_gN}DidZ&bgY&Py$0tiDP%GA`6#4KTyC$j>1nq12;E905uO5my>2%NwWtGJ(p`|qx7#vCuWB>@Gi zCFiv`mWXVq{p|<25;7NGtYv+&4GTGh&RP*>2?9UHqW(4vip`^Ff?r|IfZT9fsRXjg z;hLyK*a6dC2`m(%d2B|0?>lPf$cBy~wKWnO%#xMBa%9x^;HQO{osPnY*};#AWhP~? z8ZOFF$Z_l0MBr3h@tn_wh0~XJmJ1z)^3i`qGnh3pk%(-_1)G$Z&HtX51%r&ItQf(W ztL!EznvN30Y3SNGoFdXX(3x0^Qv#Ymr@^1^`nD;z(K{gbQKGEf-z3VghqHN<&CHBL z*`*`@ca)`X`2#4cxTX=xUI$u|p{&S`vJ1XRfU>_Jg~9cE{0)YlS$J+C6I*sOr9*1w znA@bNP2x7m*nO_S!=Co^Nj#^~jIrh|u1+B);VSKdN4UI%XePlMZIU2&o4~O_r3+ZO z*jmvLix=dJrqUqu7l$kQv9@dT9+-l*@jPV^iSV$1g*iKy^4ZroW;*Q2z%k16cDF~U zBR|Fk(Khw~a%i8gp+6eV2S@m%RT*mZL(h+8IK#-#GoVD++0RacDU)Zoa&9Mo;!IG7 zD=EK9>0^p%@iH7Y={IaD4gRQ1y%c+-^^Y*xoS`Oa86|_T+_H3E1vIlgaOolMt`_B+ z>?)z4vD6SWqFTS3IHQ~$FK3u`5$oUJc9+^J_;5>-bM-9$%Hzo(C zWrVTdO$&_P0E09ziP-l799MKDXlCq8Se``xPeK2$({_E!{*TK3ud@38RGQ$VU66Eu zzz&Gngb+~SAcYq#tYb$Dnf1;fpKnAq)vF}sdZE*fO7T^*RD_nL| z^s`M97lMd3_di09?%rDH+1Io;_3TL>n(KEC6s?`H+FVg<+?$aeYLF35tU1=!CqNZ1;MFMd+JMA zdGE(3{R^Z-EY$YGD6QAxiK&{%&el0Z6l__%Ht{^1PQ(xoOdqeU3e)Shl{93qLOBy_ zBak67POJRbe9x7KH*Q8`!!Fw8#!FpHl*k1-qeR>)4AU@3M>I26WFaa++H$@<3Q1tP9qJ$RDbgd6xgs1 zKYQ_G@o!svys0}TL3x3P(#Uk;=THdS3}@w3;30Hj8eFEhW(KpTDbrBfAse$|gwDW2 zY52|Az&e5isG+ATc~?7)7b^gpu#ZsgEgQ!kCm#fntL*VD)DRjbY(WMk!OJKwBsWWEh|wc9ONWFxGOC3u zI1GB4tb(~=egq|8l$#ymzYHB>v{Ui7KE-^P;JJ*9;?@+9G5n;kfgg6w)&EHalgtOE z!ElmlYpPr`lsK=Q(T(yKM;>{U2XI&$gwkXT=|Ve%(>`hrLaW^f3yG~@=H8G1o^))hha%ZB7G;p& z_REu#pi!0kczqxWHfy>I_ohBAJ5!jb*`w>GO1Cn}5WdsOPJFED)DBt_8LHi4^{9+;F&1Q#m9KX-~ zum$M#+@e<_-sDjt^O?(zh)l&_iE>T+$&mre;pMCh7`*RSF(%yOFdlpdj+=PPk_TIP z5x%fy!nIagI{{}&Nl6JjK~&fXJ|8D(CZFHL$*s=)E3jqDd1VEtw-0aN##dumgkw!yFz3%MKP}_y2ACx5F53^5tJC=BUGyerWiX6yJul{ z5jxX-PUuY`Nk7I}Beu$l4bu;pMSXxOVY{^PbK^J;(LC_h+hFrdT!?~KcRimZc?KTnF^4`<9v}>Ib!ub)Lsp&QL%2w zH12k4bd4Is(Q0kf;GS4oxGdnS8iN06wY!ZPT@Ce}_56D*drYn{|A@2Vxx$RqL!5lG zOWS_WA?&s{><&ucpQtuDVTsT|<^-`|d2@snx#%cKqTfZy(H8^I|Kjl`yJ@Ecp29;y zc4NrUh`P;rX=#FXI(EYqp>U6?-1AoQ+qakoewelsF{@q0!D@yLoh zMtUG8q_9rsE{#vyJ(7m+JjrBaPEo-J!5VlFD#H+~V5t=9uwG6}2|?k61&-z5Wkya8 zF3>hPyC47tSVj7#e(`(H^E$x}N%8+0C)cmbIb3plK!--goQLG9;tZFrmjvCZQI{N;!M0pkcw(qsujpg}H5 z+iGZHPH9-$sa(M-EZdf(DVdjagB?@lq8|H@tw$e@BzK@u7FR!aPQ6Qfu&yL?Py9Wy@f_(N}fLi1}U30(Jh_BdcSz$TOVNOz6=W>VPuLZ&(IOs(* zSQFUp^#4~MU1ekvelEb8>;rZfSym_aA;uMy)AoCZd?8nJX z?!loqDV1RcEGk$P{D5Ak!|QD_TDr7P$d-fUSW?<|HxvwCD*nm;p)0=MLuHY+Uz}Q@Kd$m6L$wSd}+RKawmuqJNs=Q0JA<2R1WGy%$ilF zb4R!cSQB^+iR754^qEfwk_v*&o6#5r;-=DkBQb$blf);mB`-dS!&Fmh3p1GvL;oMA zW9aANUU*=ZhI_Bv&_2Z(6#|NX)<9GUQ4?_x;53fCp8GiVXCk#4#P}A=^&n&~URchV zv9XKcG9BpQACp#)Z4vD%<~zt-vn+Ey2mM&2o*`1JfRw$WT(t&;I@no6plQ)igTut2 zB*vA_!+v9LI6znEj9gw8iXc)-=L>UchxKRO$e)kmru%b>@ExqR7#DN?Q!LtM} z#d_n}FM>q5S&k?-j^i5CMlN2mJGAevhb79CMLm~ueKx6%bA_Gl^j^{;w&T9r;s==C z{)M0@I?o@lj}I{Mme_j@esq6f3;2=e;pDA|6R2-k+*~VKE>Ii5)eUU{a4@G>23>4w zI0p|2d1Ue?l-fID4h|7+0slv^L7X3>@A@$sjb9&Xsl;V8@%IZ_)WmmDk3JPY!D@)a zgWs@3V$SrWJkInS{?R(VsWRS7!qt@90yUu7=!i!b!P-xSJ;OV(0ZZT$-X^)WcKq|1u*W~^+ zFk_Y>D10AzhNUT%3BBP1Wf(Re9fPI!w6c%~$@Y7WiS$LpW8=x)qbzhP-4-TZ#OOoY zz~^_a5qus?MPPSj!TV$AeXd#bo^7Fb&|A%-*K?gt&7h^&H8l4{gGok-m#r-PVNNsz z_v4g64?H9sCzgVufUzW}mso>tUD$ksuGUu)H7(>zMuUDFbi@WVGDR$}q|RFl0sQ~3 zDdNN{sT)esVhorKg^G$lO{XY6C0?g^=5SZ3Q@nW&=441pKxMpK;l&t-TyYdS1*Ayi zkm3U60M2fZ1IR`o2i(r`s960m&0qyKcnSXk0p9P2L44551-^b1C=IX7IYv^pb zQisz&LMRXz4~q0QBqJ{q?`$X7NJc%+)*Zu*xj_^Y*cRVvtq>8#!ofdZPRF=Hvu@uNY%oA-w1oxHR7iMv=@AY-(EY2aBE|VB!Kw z(O4RSacb$;hq^-6w#=KiH4oqnh zv2;4=1#V`mw3^W%%|e>3dB)LCTFui^+NRC|udGw$muS|SU%RI0*?6LeE=afoKeezK zhT!ENz-Aml5qF<18I1nIgT#b?R zTwQD=jm`NpM^Xl&I{t|x$<>!s8*>!9sCg3oyb+1^o!=~p*4vV6uMGjRPr?L7yLab@ zGE($q9Q_!VpCFmm6AL@GV@Z8AV`*)m9%x#ug0;boYH+QX;Ix^2jCGgIn&)9*Ls$HF zp*#`Miqm1@PDj;G1T3oUa6PD&I}KY(fQE$A`rHNx1s4-^FP0t6qO5Elz&zPo>58PP4l7IdT?S^Zx<#i7sXQnxtL2 z+-G%ZKDJrul}Oxj1Qvq|5MA$*c0}MMoB-kBVVf4e_$G$HCmnw#0tX?k-=8>`C!ZLw=hEY&(Z`+mMuX-j`o`RL`j;?S?{&3&qAt`O$J3^syKw$_CV-YPW$eJz1 z?s7cPBlT56SBj`4q322LYORkKdaAp8zqR*V5EFO4(*p4ALJMeOh}i`U!(=cOmI53K zXvip@3Vjbaw2~~|0?*TkAbtR|FFRFtei>6r-p`Q+9nLFNyC!t z%Q_Wb7^_zG-J1)^<0Iyv0sZgzfJn7Pg4L@q2g4!(EoVkf70dG7lbNCfrZRJ_)A&^G zpvjh&R5etNeXLF#ka}0H+NT~yY&F;|X9DbJ_kg%(2%1|$o3m4FJ=Z4e!FCE1OFrE`2td+Ijdc-HP_!_U zhH2mWR8ZSozzn-CXGd@?V+91pBfiicKbIyHx!`^nQwg^r7m{p^gjx~VB^K!?B3i3w zJj!98w<47@ZX2n*j#ngSdB$qP?%^1L!p?+xgi+gY9pd!NQKH?yl?x3tIKkX)KVlsH z5}?~9mYa1I0KuzP)(ELd)`WPuqQ+S{Tg4TFl2@f@Z&BzhTvmrtiwd;jpm5+X5*vb{ zxr@;Hz@O&BzBh32auFXDz6CK3F8$A;&t&54XSS@GsE0rQ2`%B{Ms8%I!WOUL(Bfud ze8P+5<7l}#Vu(vGYcjIR)d0(NA3NvyC6|R7ScKm`9U_)EBnvmY>dC1FA145UkGI85 zb6v)+(f%_T*-W~Ccz*H~m=)I%AguBbuza4y3+lG7^6)u@6bp*ZG2{JhwlR zp5ntegaBy= z75goTMTnkYxSxoJ3jCrSU*KZ6r+(H77CTUU8zDZiU%6&nS^J@F2kQ)_p&B8*vif3qr~wi>X69aMp4@$c*3eu#Sc|B%$0(!h_GSiG055bNM>%11COq&Z2j@aD2T#2eQuO;w;7~zlxsh}p`o4)m0kvKA zw(s&8QYf!9^#`tH=i^QTTOg7#uDG$Wm*y{#OCQ5t<+j@qP8D!uA?>M2s*TH>lY0#4rEXzd3bF;PJo5%FcOj)c4g|9bS9E8o&Z>IH5Su4Jb_u<^hLu=fJehvUAx333<`sFLtQGD7!hCmhGli5Z?B!~C7J=}Mp%KHJ-V z2*>F*+jh&MJrFr{?qvpz@`5>*kyYiS4tF93u1&1X8(fmmbBNKrK#pTdrilDyLS(ke z6yPZcEZIaEUXFFsi$bWyHcg8jL*vL)AWM$MP&7S;ssSgf{RCHzyw&0vCkx_gR6Com zFx4@sc9I{m9XP>UzPt@FZE&T>khNc2g}o2{LJ%RZgb3LWA|$29dbkTIi*V{CTE$86 ziME!%kl%>`W~)l;I}{UU7G55)yE`T7?$fj4yL&_P-95TdcX!0;!_9WL?naKIBk}1y z5|g+|Ievzb#*h=8W|<$m;AIkW8J-&>l_M=kJ)8xU8!Vit|4@Zmu?THAqOnad0pXPekirn8wk4aq-VXKSP=FMaY) zHNXAdC7xQwp#ElT>^nv7jXG!te!Bg-ZaU=>p46as6KEzQ;pic@)5Toe84Az;CUc$@icp~#9%OmsU zWKPaXE=Qs!=OmZpS_NK{o55jk2A(iB7*A287A69uo+MJgAiaY)Sl;Av!J+UgVBJW|->e)m{!s3eB+`u^(&WQr9>$B+! z*7b=uC3lW!l+t;Qz?{+|v5wO9N=svZ#dvY-d{yAj)(;I)&BY&vz{dQu_ zPwxQ8AT(2U1yApei~bCzN)jnCZhV5O{w76T&0vWD8mm3eG^~FUy-pJGmb$< zyy6xCV}8&twU?FQtN9J_rr*I@I)X(5OPy|en6i7f|5H=fM!#3XDvw|7rf0Jp1DH$} zfDk6-4MjP5+^O&GX^Jk|)H@6U_G9+(=EKZ!A8tbPrTq|@pyj+ERtuW-8I}?rU=kAr zTTLsj@EDfj6UdJ8JOAJ`dvmm_&2>1M_3l>?letXwNG2*rl(B+e;5Jfi3RR# z+_LYa8P3#6{K9mm7^8?PC7}Yh;vj=1`3zhL2ssA-h&FOCyec$aL5VE_YfA1*Tna}g zF({3gwlDnGK+AOKU=Wx8z%Zqf3~$DTIbH$VHm&kL3XNoQR@fle^~SR!py9j>)3?~C zNJ2?r(;#e;?HFd4TQ@P?X6>9|SX{UrXI2$)1;Fw`GA0G!t&Xpfk6;Gv+-q89HguebEvIHXtJ(40Od3E;) zzQ8BmSDh0ofW6t8&+uj_O&*w=M`D+Qx1CU%NiPm3lqSXzhHg3w)s}%RRN~PEn&wrm zlHt$+;s4A6>9KM{NUV}o<59&7FTH0?;WRZe96}3bdSqvyO2lx-D8z%A)P-j+pM$9` z;3HeB>%s_jATfs2tKtS18(i*d3F2I&f7$~yP0n$wnkE2NL(^u9Ql`xmg_j87+zXgs zo`JU*n_F9AxQg*X_=)|17SYNyNgFtX{UJ$TJ1Glc=s@N9h$x0IhZr6oR_w>{K+LdV zUv@>K-QbcmLgB2C(mr)IOH#uYS8$`NW>*@y0mlbdI5T(^mW26&^_TWJq}D`QtIOUV z_w^$F!vW#@$VzCt;verRi<71Do?^UtpK0842^itmQ`DN6HlzVBDVf! zjmrsJCn5vmJ@NqJY*%!>=SOm*+-z={6$f{G|3%jnp@9*<+4@klR<;8GREX2ZdFaS! zc0na5p`LAXKM;CF?Bv3BVWclu=?t#IQr9n3k-6AX6uKuv8Lr_FuZ0`Brf9qGX2`bX zYRH?5%%V{a^pNiW;$5On#m@;HiSNI)BQBlFXQ0Qi?uCn~_b(fPjM}#QaW>5^phIj# zQc$zYcNi-?BT+`+IX;Gqv#rgc=onZ$r3lBFh|(*s6}WQKCk~od{9{-eoU&6;BPC<2>1U()a;$CHj@UW-{Z8{vT~$0v|=O{GUJq%jE=2 zBpztcfI)Z?6g9!%%fg0iG)PcX6woNhp$I6u0)iUcU15LgA}ZcI#oPBDPZ0&d0}|!( z!27@p@Sbr*@Bjh|`~QBcXJ&VkO$6Wj^ZAgS>FJ}os=B(my1F`=ajn;uqUq?VI_=G0 zvIDuR(ZGf%L~}rtH##wY7Hsjk6>ws}M$5Ib|D>B;&JOqe$_kjzhA1jvw%4`bQk23P zBT~9UB*G(jg+xHJzWgbWfz#cQ!GFN$UlAGn8?6466rnGHLC!P8Waa5T7Tt72HNn*B6h#p`Nv8MrM6ouP?%L@rU7ev;k|i z@((GqiIDhsRa2p@hl64A2+)GWlkM2uumB3w{I%sBshAfD%Phjx$j{+lxJFmY4KCHu zE=3!#EcjTE8Xp;G9>n`EgcUb`(Hk%hb;A$3 zP?}qfxV|F3|9nzdJi-}IUHhs@;gkJ{p$?X!IMhd82F1hSuanc%I5Td;z6Ny8LTH$M zjXAh4*3wmnBVnX*Efb>NQoMMK3F@UiUb2jl@{%+5fkV^!#GqGveGO(-2E-23xAApg zLu5OB*WG|B+W(w?b6(Dwzx2?wRh+@~r=}wN<;b3Jh32R!NE_;;NxllE^>0+|gR0u! z|0UHHJJnvmY7aqnw7FS*%m#$2&3^p&GoVs!77-3(GSa?CPWzB)uQ_Q|%vZ;>Wk^fz zUS|czRMpfo&)7}9O>EqZ?11CYbD+RH?zE|QAR0Dm4V-I*U*hDZ}Y+lSL4DV zA22duF(6q8YM5j3Hjr=g_y#!o59V79-_FF_@qD|6Z#etj|5DVZXZ!JXBHpg#TPwch zDS`^aOqK(_92> z=`SMDz*XyM`d)NON+z!QXT45RY}cPlEHj5?9!Hs^hK8a$Y-qUNnGFH|T=(f0$qQ6} zeTr2F9gXx~+4;-Z?oDV{zaD?&F5#pqSM9|eiN~N{`Y3+?74;c60b#~G3v0%WsEb8Z zfNRH%2_XVxA`w5P6~L3RobSlU)zJFR50q`6GSc6i=!*)*v zFdR!dMY^!|Xv7-ZF- z;)J5%rc@EIai1VFcd^^C`TM>-z|m-=>ctpk0)kNcCKtMPmX+I_Xnal$ycupdjB}Xik5NLU10Q z_`RVG!YH1L0=LM#tTZuPks<@j^?B*SQd;mO6f18)+w_rR$_TSA>M-^3WD;0zQfZ+gu zI~(Nj>R8S&aF0RnK7QvI8_o9mvOKjuDP=e6g)zW*#%6kY-Wq2xqaD278-cG8opFr; zO#Y0+i$_US)w^{Usy4?P+}uOYn5ys0Lu>CNK{eFn@@S%;qOq6b?lV-z%RDjT|n z4N2HTT70#-4dd{lF+Iimu-F)l48~!|Zyv?c%43~q zDk0#X@N2Jxk^Wsxt2DWV)^4hlP1W>5Q@tJO5z}MGpm42&85|DSxCUf+%1R-XMID;9 zlegMDCyUiSF})z7MxJoM@1>|TA0_m?n8xk)q*y768CL@=eT((URxO>HyCfO_roe>4 zFM_SnJ$R-<-vo^H!DvtUGzNt&Yv0{$p^ksgvHJEDH%b9km=@|2G@t%`IjyM`b zexCHd5ITiE41bKmW>}fqJEjFzgTu7O6{yCz6n_-d4L?IymoLVJ)WS}%+Nl6UT6>`fQtx4bhw+EN5=Qy-AU|F2q*5muN!a2^R%gbN z)S}9i@cSqf(Lb9A?0GYhugWY;3iV7?(?r9to~MFMoK zR0ABIq%ln{EY}ZtHv{98Sc+Z=Y|h0WIjx|oZ#;qVb|2$2{s{s?<3^j-_9-PT_%=QY z6TQD0OvGE!1rNv|<|i%qrDT9aSc(jS%o&#|WH#>4O?GinpnlFJ8mZ5gAEESF&gFVP zd7(a=g$$yg>8r0mZ(hJ3MFfkB(sm>)gj?EmklG)0MoIWorRgCQGWI0&i;QZ=&WWv} zN~Zi5^oLpIeLE*p3C-fe!GW}0d0^~@bqSMi^ptToCtK@8XSP9;kq|;FvQm_rUCbWF zwWz{8)|MMbn@2nK8K?78YqQvy-cy_lHu~9s#gBVkeLO%@Q8K6!Y}cy}2TvW1j0P8U zHasFd{Kq1d6T0r3ps;AXg*P)#a#C1g)VAk)<8^#6xcg<-N!shP_dy~( zY^O>%>djaS8Mj(V20iLoLIm_3s1fmqu+zZns%GNM(H8xZZQO+TUEQBjkUO=ltzDWY z5DwfPJ_@Cr#2o$k@d|jelJ#2W(!fGhdfyxbXQA5WJC_s{0Bb-5(__Odi>0fO#H#Z! zTT?~VdvWzSE#?C(%*MwK$vKH)Zm2z*Z zRLg1&59BO3Am?dWmlSF}M#9Cr$1q$!*aPNCUUUsJ^X4tdX69301S7&2)Jw}6SgOK3 zw$!rDLM`W_mJx+ogXoTdHB}>CO|Y@-0cct~Zlz#r$M_M$0@(d|6rc=^OT2Jh!CMM= zz3VgbK_0B^J^3!^W%7_^r{vlXdHf{Cd8mxYO6v;k~dTjUd`uUOWi`|zP1>mKIY59lKe;XEYT$_c}*JE(!7P0seIzBiuEe|_S zz7qyV&Y(uIp(O=d7xzunkz+EG&~HB80-JQ2d$nOxVF;pxrux}U4OLCaJrS9>#ocUg zL$mt_y4~$gs5I8?I8r41Dq;q$oGox5U=Z>!N*a*$;Rx7M$_DMxL&M zsMF6c1XZoWS2Ww>=GJ)+;X}=y7XG1w)y>waZ*SE?9}7p!${)tPl`a#pgYL;6Y2SG} z442s^RHg;R+0eS+zT|%Y$kdm};TRBhy|M7Zj(hU$_TC8eCE4-jq{1y*m$4cU;A{Yb zjUT3kXkP47D>s;xjDVYPbjq)#HT&CYH&OmZr@V`o4%$sm;H6}w7JLxDrM25ytw5=? z(!38fxu}*04bDbN+(|Jb-|{+V$1IO?bWN_^-t)^o>n2v@VoaFC4u>?bUy2+1&l^M|GhKn6z}JkIvC(C(~tM{Zd+pFl+xtfO_mnBI5F-;AP}|7yG) zBKQ%B9sUw*sP8)(dq|O%#AOB~7S=qJJ`aAHEIxNH6X~M`=i|HV(oqn1EQK(Jkbw+> zAf*J(qAYG8O2LoAyIO#6Uw$ZVV*nL`*QqTjSYP2@$C&K!twZQ;jIe4;N{o7ywp^Fo z4__meT+aeATiR&-$LW;Ul&LV+%xa7eA z7y+0lRE`_Y5vx-5u^njyis^?SQGXcavAG{a-_w%scc&TvFNp9?3Va-?sj7@VaSzgJ zR&#K`wPY?zR7PGLkGG`b*Ri%ZY);jT{`75d9Wlm4wHrjh7=~fFBAk(LIcxj9Mhh%% zozvDC`Rb&#m06BiGrOF#zI6w|o(X>v%Km|Qj>GqAtOu;ff_-WObw*&%VcMM2F!x}0 z;XT;i51=XC5r64!)6I0EG53I)E4e z53#S$b{R3$?z~Wa#Y+Lc^fJCxU(^dXF)AYEh1^A`#RrHZ2vaCW_yg?-$Fr6omB+Id z$**!H#4fqQQ5XKzVDD^#CAB!g zl^=nVbAzmkT3wdR0L@p#kn@zSI0Cmtj~xydJo^|g@$3$q(Mb#S!IQdjF{U5YuRaFf z-e4DgjkHP(bv|GNwt9w3>+R=y)9Yeiq7c|`P_`VS#tX8UtOHtNi;G$iYRWDXW?akp8k=B*b z6+$`XPB%zWrYj%1V!!}$4Jt8v;|XO4dCYEZsBX~?1&LV1M__Rf$bl!2V-RMy(;`_( z^e9Wf<8GWsgTUnkzt~kDQ&Vs||LHRQ$}u0H0PQrw-dmT-SWwujh?WC;L$Zyz;7;nT zE)GU`!79I3zU1+Rvl+&1hPUpkJa3yC{p=9=rQ3n(H`$v!;w{&KV z!*y7x_^-0>yyKC_*WrfloxNu^n!5)4FtyYhIk(gsdXLvE;M-w57a9MI%kd&-;qz;} zVF9-=pn@&BCljL*XQi+R>cj;cQKnzA9V<+RjZ}^i#d_EfrwE-s!nMdjy`Yeu>C8^I z{6+F>3zo!Hml!LthA%~|4v%N<#C$IliSyw$lj!yP6gE=K&R7Lh zBnnt*L1RS%IvZ6tFbQPj5SKX?PZ(cAdYL2f1i3M!y?GAKm;ygZlIsk71ID&PhGZH4kgSkd)0OAM0{B%x=AfQI@T;Jc1-WGh(3^a`U^7!@ z<+l&76Dvxj@!5fa7n80H&kj7S%H?9tJ<7NjFK7smoQ-`nT&m){tj7z$z!z+}r72&J z3`{~Ua}4}Cuyn5NWnP3QENlOg7xNhc+@E+cy8#~l)o>7EkAD~pd8cOItXW|wavmO3$(cx;PwCh@g*i=MddYqlj0?8PcmgWc~ zP@|vp88rGU^sMuht}eB`kcr(iRU)qWnx{(@;Mtk~qJICqKCqIgTSM8m0a(?K!}jC?*P|lZrk0Cmwtc{H!P{JhMHas;tFRy3 z;q6-a4<2p6-kR0J@d3+%@9@J@(bV%QqmOXOka{B0LU*zWDwLd#w%{gUNRTXNrQqUx z6c6elAxL%whN3<=%dz>&=!>kKjcv!!ZmN|pk;iFehSLfJB$`7btsP1CPt;;u&*g+2 z{|U2lGfR>`zP2YmnY{<*#i0$J1CGM$A~YVT@9%39sE6`JTPXSa>xl5T7Nj?@96x&@ zu;&T_ZhWOd=~7NwE=M6S z+oYxK3XB3ca7x~cmxPl99bS;)=!7>42Rf-}fA|OeB@O4dmLjiQR(LLs$CY@n7!Tt7 z^BC1VE(L9x1Y!Qb`oN*dZ>Y2>nj}&F+ly?|HwOzdu6YaG++b<>YPp_%f zDWFfdF*dLU1+>r{QYW>ViHm=%k)4^M3uYC>`@%r|Am81A`iZ{VRn@31%{=vhXj!wh z0WFi@T`bP9{;QgR?HIxaKHscQ7%u27ux)mEkOv0{!Tv4HK;Vfe5IEXHCT3ryp0=|P zT@4{a=iEi;FxF)-8WkhOVaF?lJ5oiq(?abNx#M5B@>dDX_|P%($Q>ypSR+0zY1jiB zfZ%jc*V4BlGN2>RCSI%eA}4{c+`9vht9^(uot9RRc3gn=)c$E{d2m0u0fWgKwIve- zZ4;y@a7eKk*Y~0?Nu;m<^1IFI1M1Ngn;X!?s=(LPk;N^2If43CJ~1Z0h$xX<0Ml`V z2be&Oh};ZZT*sS)aJsh+`bhz-U%j~3QHbwph_hD2ZKb?iykHqH1kN>y%YY{yvX=qC zKn0coSlU%9dm?8E7!)xahjFiGWPVixgQCHW_Qs(nMKELO0C&!N-xnpxVxz+kRAQa; z1@Xclg@hr|dRB+7D@xo9T7 zYIt*9sa47JB2radmcvbAR15(+OV4BD`Di>z4p~RW7po)V2Gk|!N_(_&gQ{AMfVf#- z>yqewttI|yYZ|wKu)R&*9*Il3@_PMz4m`6yzJ+eW+N@;}7yU%6{YB zy=rIZE~|+yP?WHco2bnhg3e%d`}0s)1z{gfPEcF3O*#D7jc&|AH1QuSY#XW+qSy!h zymw>_ktO<}ZZ(!+r+P2sd<)a)ZXZ`opGmTbWi~D%Tqy ziHksBmQzdFdQ_dTlm(Pwxj(Ce&LOlOQ^ zTc`K;_w%l($9e|;ZmcL?H?1e>)koI8nODQh$E|oBx-u(`<*dCIt%hHL#PD|l;b<9t z7!Ap3TihoZ-lX=T$Ie&#&F9gDz}dx~oaM!7%@B+9GQ$EyIl{K z(6wbdw%c)-%;k-3^nWY6+MUrk)!mWqQQZ0-73((rJ{tvg8aBaUJAhNwD171tPfq=) z$=7jkbTYgUV*0HY<5X98yZJ-HhIvnvpgrN&)4_^!$`X+m-#=%6u!CNNyHmrzpkJ~j z)aNs^^?ZcRO!xUpwdETvw9JGQ@Mz2F`~;)6%U!dtg>MMoJ9@*}`GJ0I{cmc^2jpdJ zD`_zmSKtjmaKX0zl{M4za{bRnuEFWS4+H zfE;v@C`yuY;?HvUC(56tD|@sIax0FFvC6*yT`3h>-^#@-x0^%rP-C-ePG$Ja-~ytc zQnc3g_5vaU3kd8+T6OscElD>oNKjp~Y;!^*W&G*)L zy)AvM1AANfT7);`r=!oMirH+LAtfm@3j6&Si}Rm%_KzFTsqn^%Fv2j(OqmVa%FV-3 zDeNZ;>Pl<&wbpKbCHT4)`~evUM<1tY1)KRdvnMpM&@*drWEIW83E^KW0@&^?qI z$u9i}Tq8_f!ZG4x(TEeT#$Ra!P*2>q08-9zE}%6ga&rwEKp}B2xbHo>7u=xqR@=Y8 z0?AkMWV*k|U9*aqnc_dOGE#!AoW}bwCsk5DTDw>k*oQG*WM!~7 z-;k?+|4!2+1MZ+)BzM8;R}-)YJ&?)=+VsT6O|xJA3sU%?Q0t{Oh&5H&I;9Uruu&kJ z+TrwdZk)2j1ae($FQm+F><4i8#KlXjTiTtN7~m;H<_qkhvrVnpYDw$h`&#f@WL=um z=e0hcl@{sR%{-z3Ezbu&Cx?|qR&gn9`~JAYH*+yv7G6b@rZ>w>{>?-7Vy zjIzPkv>;pe6xVyg`?LW%f+Ey=!&@m05f~!#u3M;%Qh|?V?p@W)l7QKfFL^zHBYj*C zJaZO(W#E9(c(dU?oKtGN*+9qNK;5r_Jwv7)j*b6Q&Xhs+e+a7``*KN}rR|JAs79j3 zM3fpoVG<=?zv3Ai%%8_<%RTux|JUJ}|Fp+qI)l<3Q4hnf=<~5l!Npw%vC?|OS;hlc zoJwrh;AdKJ5fH-KIbjrO%e{Fub=x4j5t2Uqeq>5+qzcmpvhW|(e|QxN!C~EG^Iz|! zGuo$|fG%<-peoEbEX^55l}uIiNfu3wsBVI&zKH1b7AlV+sBRpetCWAo&**p zkPUed_{mrg+s_i$(zeD1m{OLsSek9D=0mHcEsf=PSbCW8w7iq0`n+d6j+bZCm*)0) zZArRuugclNxP=exmUez7-3aip?NVHxi-)Bd#?>lMx`AuvVjxa?;}U*oWen$g%cWVy z5WZ&`UjDQ;+)Qq}^bn&+J!nR6K4dQKWZ;x!Y)Qt_jz$+gxR$mtvhlFgMbMVGjCM>- zUwWvqA7`D>H_<>1T37KRTT7N_MR|sC3OESjxIhlq;331ff)*2|T#5%2P&-gQB)P;P zTOMd4VP(c`nevcf%;m$u#@ZQKk-)I1FBiLAiLrLtL{R4f%R^>Zev#!nLu*haR&59g zmBc0BJ4d2y_duxZsFO8?TLf!}lU_ySsRom$H-J6V6P&5!i-Ao^X8$1L9@KE4a&XKW zG`mbnoHYrC?*eQ7x!*t77C)G9DU>Rd6tZ0p3(*o?57DKH^@E&nJ9%m!^{3KiN6Ht8WMFJ0ui6;BRaTtdQjox7 z+$1vu)T3yJtTNKb@oy^6HL*Qjo)-XVU7^TFBnxabo`KdcKxDnnffOj<^ z6Zen^yYx#32<~BgL|53KJnA5pd&_S9rfE2oigpgSrIB)hda z?7cSN6X`a3TnI$=Wsi?lJubi*^~4_6++y{Z2MZE;H?WUI*u(s)Ml%b5Z4uKye4NV(qDS{SB5H>K=loK2VYz zH0AS!XgV^U>NO5gsf9)+9^z=)t%jb<9E8!R_QKPZOF$uGlu-oN4L5t>W2t$ZL@7Jv zBacYVdEWG&V_&kAiJ$~tj7|K_i<}f#_eWrV_tk2?+aG~Z^ORaCQL@ULzB~3kgBl0c zWt$__gUdWuJ@mrqe)-hibg!acp10*SF7s5CR)T|f5x55h)>Q%w`U&-KDZ-)e^WOCR zm`0`KQD$rPkRLe}u|E)}9Hv$T{eaL`0}%&VZu*PchXDePH59eb;Poi2oP=cN@0(pZM3|-u^lEmP`kbHH!!@aI?LFHa!#~}JUuu}?08$pi5>6g$+jJ@1Y^yP zlu(6!>Ob{DLSm$ZFOZrKn8Bf)(`UXbAD%|9)pvuz!fHRL-jyMo4%wv(5ywEheJNZ6fzGI|rOlYmF zy5BlM0Rnr;v&g{aUPO{U1dynBX-VsE>XfiESYFhYTSZ9=|MVs{#=5eHP}s3Qfcu2O zvJDp1CR7sZmMSRrwpl@DuVlyR^IvUbSdiPUESC=KRLYiD()~lZ`o9W^sR6}~B)$>Y@dP$k0XxN+NXK&`wYT9q$QB7J3I{Cohb*~4iF1fuQb4dz1JDq3Bsg?M7fzbUF+W*G+OYV=#j*dIY5Y3)inW8kTI>) zo?IvYMJcx-Qp4+aJ3Mn+aVnm%w^J`Ro(Hh1i7r~G1TS!$F2m0O!rr1u*e`Y}uGB(w z);S3Hwa|1FaQd*ZC{-UMD9ZtYIifZ-iv5FABTx&?vH%eFt5g7_W8}b^T;7{o? zTrkhc_-Gs>z)#99Q$CoOS}SD71EurzLoUi|WhD@`{eYi5b11eCq@huEN z_7Q;&wmVPgNlaqu@}lrhv)@X~qM+HL&)c?FgwoAjxSu4Keg`|t8k$%8PQll~;r-S| zat0tdK%BP5+BC`9h@ExIMi?x|tgkR}C~i8!OOu%RlG7IEGI~IY!+v*Ug3=7skjFi6154!hISyY(FUl3?fO~L)g2wQGfYJ>|aZ#Y7;PU*5%?!f*ke{mBBW&Z9k`&KwDrV#Sy2kKjD zbNaBxXosyO35skfj->qa0BLsa%S0DF2r*UAww$<0?TNf3-ZJEwGnLgv3-OE$btYUD zw7*IV9SURw`gQW37`X-(-H#&YWGAeCJIs-(O{`Jya%MfR7~IDC#qmCSU#k0b3e+Fz&%{Y||F%GVd)#S++=2Q6e>>b6boyyp&7FL&{UcD{-7=%>fTuII zPcpZh-Y%_Tbl)YF>FZ+Ok)5LMEGVqmMpujzKt2x6*g}O&yiCx7*NS4*|Kp2A5qfN> ztq7fbJi)bh26WOHsRrBhG+QKEQn(HbOe+z!hR7{r4{_)HLaaRg4p&(2V@(6gB(<_w>P>0_5&o zBYXl%_yj0?NVFM<$!E#g(3u#-2~22e<(tTa*zLs8R1AD#rzzl71CJrZ+)67I0fs|=~0c`EIPd80s-O=Q;1(FEQPQZ zOmLTxQ49Nbmi`RlBa;5(Y4pNwC1c$&Fa2TWq5}HE6wn`rb~t`1;_d-@x*NhG<0;ud za5Ty#XuB!SKNsH|&Nq9fa1iKf$kM7yMd&`U{xDHuuKGYTpHHx)etQXP*LK3~$wNnB z?7*IhA!_ty^rAAw(8kda zV+SZV$3548#0he<3;Mym*c|*)I-cH6*iH+kBLVJZ8DC>*8u$%hJIMEjT0>}3sz&}z z`zKVwN2n575;rW8HY|b5xwCX{2EyR34cBSq8$l~~%^zJzE6nbSRN9>oBP5jsCLyWR zRCGIoAB}}}qL7(o{6VXxAhW%Bf#7fsjUwLJ>&aSXxk76Z&{|@iCNJe)gj=XI{|29y z=qVSUEWCBIH+@HJtICTFj=H0GOodt!Ectc$-tgNviP||4{fvK*jQ$l{M3YOkLdlUv ztc`U{buP0Ee|wowY6rB(73k3ceQ84+K(-%A8{z;DjCXjAcDP2tXNAy+4#=Vnallcu zAr8ooq`8Sg2$!{B_>G)%iNQQzGGBO|Z0-W2VDoq3v69Hn zZ}%d~y!4{dsHUARI-tb301q*T5CHLcVA@b~x6LG;p<*dUs=! zqt0W@cHUugt;;g5#(RQVH}>!bhPm^YkZ73mAb~!2aGs)J?xZJR2U`lZ)ZgujoNza? z4joxy&g|u6ZOyE6nDudFZIlt`^HHaoW%SRMA@2y}m2B{*dKbQVXW<>51+pN5^G56 zhh)76Npwl7?yPnvq`L!I`Ku_bf0YO6untdRZxD5!e%PIefZrNcclc1V_Qe zT9gFL@;*Z1cVradM5!K$K4cuE9eU{P+r~Af3}h()8d73nBcc*oRcHw%{RE(M8oMRqH^`22_`LAcx^-Nm+OC_OK4B zt%nS3-;m7OzCv_+hem zB*0zsga{+pgl_A{?WEsR3I1ok>J7JDvchiRJ={Sf3OpusbgJ5*J0CUQ8vHiyU%aI7 zA`44|F$%FG(M2l#EXf#C&hd$O{l1f}*du{GEq%ua_O$XH3%9hRG1{mlFtW&;CsBGO z`=UKkrv>iAgL~H+bdL@Y*vR_sDg>?W+DUCDL~07yR-hhQ$~N}fxuoNFzTuLNX_rp$ z;R%dTAUBS4jn)@4ViC&ma7u|BPU(afOpiLks=~kI+NA)ug$2(8rYqpD`r4XMe*3KFtTVO+h1rHP? zD6O9GE-2P|i;qChMcffg1pUwkS@**!x4r(+hcuBS(lpeI4JMYv9<6lRZbX$_h>{IR z9}-v-iw28vVmZ7*Ib|0!f&6w z`wh*iDwTY?A6IW6sYw&c*uAYmI9QX`>7Ts^u(7@%HM+H+5wS!4anMhqnKSaio8$>~ zsnG2?pb}J-JYC;|($W57&J>g5!;Z1 z2AMsP=7=Qxa@_Vy~r(*(!hn=vp_TRW6*6IO$p^>iH4#jMjlTn3Iu zJT5Q1WSxbXe~@`)0%fhuOv!4=DC587}(hA+ zRj6{~->BlxI_ZsG2^Yle&>z{!1nt_Y#y3HAvA@5X%hy}p`$N2vT;A|2Wqo#;m;8^< z*!{Sg;+r8`v=9R+*~Y`Ip757&a)R*?Ph-^bmaDWp$g;VZm$*L5Wp|fn_JQ9_;`%H+ z-jd1X+_+hW%+~D`@_M!@W83U{tn7-uL=FZPl6pGo}hB92=b@Dx=R+O+$U+GheGYkbd!vMFKEzPj+v{G;6 zg3>0#0+r+Q5PWvR0_lY>LrPm!Cj&(Xw@z(<*@W{sI3KYIRzy#DqX)zv?u918lX-{^ z0e57&2&(fCmbbnCyb6WkiuFkt)?Irryu(UChj=|iU4~eh1d^-SpSmcSAiHd z3J{}XV?wToHv^ndD9**;iz48n3Y`yc#x8pv$%}aXZ|#j?hom4*ycQ%%WR7IS&Jv9& zHZL6ckG-)n6?PP7rGPVHpEqjNL-oeuFw0B(C;!zjx>fN8EzqhIUjj1=pjEFzI#vE` z5y(gK!}@_)5K4$F`&|AGR8bMQ0g@(k7(T&oS3aTEJQ05gt5r}D8I)TQxwgRDV+U^u zTa4*2Eo~|yP2G^Yk|NA)-6aX^5OA5-RD6KlBO68f8wOn! zK9v5=13=D)+jm-|--Nnrif}UGZ9FIgS`X`rcEN2sE_r}!Nf&svbbRel#r$ixPx^*QlZOLRmaiwE3_i0Goqu%X{R z7%5oOSEGj?pU$tr{2J6m2G^xV1_i)Y;}qWWy@@FZ{>Cm?(C08|dFC&nWa!Vl)PnxU zGYH;a2AwhrTw7#(-VbPWWW4G=m{-YpaWA$6Jr88vn5(z>2VKiAfsD8EY8}h-95EIu zhJ%YcvN{(CO&HtOs20I!4eb5;+qZMt!+Fj1diI-g$_Dm7bk7+`!M!{HZjD!C2gJz1 z09w5;6`*ke7{bXOr*_3ijNjgrq?OxL5=L^L?54%6#A`>yP~$g<60n7<_3o^4sj8-0JN;i6)1foRyzgr5K z48YR#4z2#8OwPW|k;!|0mVxOzk=K*$C>2q)d zzVW_P1hyyCP&bg*5$#-DL)WVUknhc!j&4>+0=NIj@i)1;11(pqpE%At17q?krZ z+19djP7$ZP27O1S4~zZ4ZV-bIi(04{*=$o+YJmKIcQ1!YN=+hC<9_{F_{BG+Q;58E zdO6q}aWJFi1RN)7a(Mfo)GeRG{yn){3wCD*8$q@Q#O+gSH?JZ$uNQ?O^4xlA4C0qv z{xe*&DHFF6*I<5;fDmV#C~ZjyE&a`7simvnwUp}=oubZKs=63t3Ynu8Uu>;G_stXj zbfAzxV}m2lQyWfD*>KNqTR*OigP5kGc5xPv3J(CsbG2H|t~&f;9MT0nJ_uR)#oauL zF|7$%8C;FX&=$YI1n~^tQmQg=?1zmzU8ZZHUfYOEB zcl;|*ea>a=2LbxA0KG9EBuLLgX#}yYj&Xht79!mk13W8{dLe)TEc3xD&>JJ?iA|HM z?y+m>S2>aaQxIyP{vu3S%UU>vHodYJhx34Vs67RG+ckS*JoT=H3II58(ozeyIh6#W z8X7JH5(>jOB}Zi7;sczJx5DTJhw&7KgWyJjBe)*lDL7<@E9Gj$4;PiV>RHpFX_4U! z6wyb`AqT@L^$SvQiY0`Xw;9e9p?n2#|cS>32Rpv0mP~T_5kb(5Q>*vsLM_2aMfeNfz?z~Azg$_d(@;7 zE42`#B-&`@YlD(n@WlqSexPY=!j&M7&F9-52$B8g7;B^f+kBzqLvyO_iMKb8m}wSb zG7we{h)I^!oZkzqwI>$NviSQc@K$LYf3el#E2LkL+ZuKg<@wC*6d`tHxR9!llN(ND zZzI34;%KlTIP^jebsnQ_g5Pj@D~_Q%+Z+&vMjNd#1Ze(3y=lfH@J2ZpK8nq67F}A9 zet&Yy4%f!i8Zf}mKqHmmZB9S+PZ+{ARBLh7HeY5xF*x@#;Bzwsx0z+vL#9^J!RqNsaIk`%@#A% zE~q-NLCFjo8J}VB-P+%CM}iW*)*V@>;@55pe*p(r_`y0#VDXFMdpabOw$dR~yH*HV ztY5r8DFn={Ee7M_RlKsInX|8_JEf(BKvUg-T!2cf5nJ)gf8J<3q8oJ*YP3{*C7;EG zG$+&|4e{jYkZNhfJ#6hJt}!d6MnVg!TG-(!1c6LrtHR;!u=8FXXrK;j*kEmnKOZ@q zrQ^cHiw!*?O;hU)<9U=g80xP>q=II2OJA`?cx>`F5VE#>rJsu8K1|IJDhS?WjKrS< zBeSI}3|T4evmDCsJp;u^XP~bMdcT7kMH1+J+sywly$cZp@P9;a|Lg|z=H5+edUJ;^ zPV12^o0dhU`(SAN)&Hd!;h?LSkhS0%O(ZlY1uT7*^DTKgO|asAkGqi}YiY$DxeQC0 zxy*eKOPLD*N;B-Hg^mZ|)pVjvlA*;&_>(nxl19?4Mbl`D3pD@v#t2k=FrY6CHxGKS zEh|)$E6l$4sW+K3`)up;9+zc^OG66Rf&;k5Jz+Aoe6Y%r_sF9nrWiYG_ol0}DM0cn z!+Dk>VmyqMwij+0!?{owc@c` zX6wB!2xOeVfM@LstkPM#_j%3Xh&$_Wvy&y8pHs5=7o6WN{{@l7;XOKz6%%G#uIabk zKBI=BPYHF@^a#`BT6gVz4HR=8n3SQz6{3N!oNz0D$GBVo?Wtq>1VZBXW zJy7j=MlRb$8L9D_^igW=U3H#f_xzKIr}y8M^X6D&71>VRmQT`e)aq8sFH#I_kI zvxYYiLzgcEy9>{H6P0Jy`96v%O7;E8-@>i`y??O>dMdaZm%oH60$ z)86Jdfk+vx0g--pasZ=dsW&RvL)}}%?JYrMfA8_twwKf$-Aj5yTC4yy8warI;5Y|r%9uANV9e@4={T4%CfH@(F5^!#?)^6mDI3;eq zt^p;uchwXn2IE`eFuMl+^-U@?mohW1p(h^uY{Rj{Qf8-Hb&6jChD-h*0BqaF1Owf7@?q(vAf^E;=dQI`+S!2|4W z-Uvdq=tsQ`6Nn!v2ScH8HO*3}0@$=D1l99&zNJ(>57O%X^D*pL-0J?!zo4pqf!>Pd zHM-4FZTY62a;|F-ouOY ze`6jrP>)~!!y~!DdaT7SlyYm!a{X`rGj<_D**`?;6(z5ITj0x*4Eh$>$FOzCXu2aS zBbR3l4t?V*_C`kGw9%_L8~(RgTZGn4K5t$bnOV>Am;FZumlW>Uhs;|Md(;1|H*h_U zqO|o!uE)jE`2#T_GJ@`rc<8gOEWFbgnys(|8V<*dv`{S*n=okUtvgYR91v19V}K5x&l{C@d4Ax2mBZ3thil4v0YrzCtHvMw&E8Y@C|;*CBvm1 zyr4QV2mh@u!XN$ZUnpyCkyLDD$jxfC_`sXhIFo7xmNP~CTp{Zsn%EArpdC&Mp1F%f zd9e^zfFy;uiD=?~B#9h0nv0`Z(D6WJ>_J}%xA}xU^A?sE_55pZth8olI`T1B8FC$r zMEY=Mvl8if^e--v{>itL5{aDq=|*SyGURc%AKq{R; zleLX6NQ8=Pbnkd@=vjVUs+EJK0{ITN!0P1JhyVkp{wW;`%{JT}D+IPg^`cwY_jnfX zvnL>%c)n~2`CSWMh#^AWEsYG%sEky*yf3p9{?#xQ+8TA%UE;8n;qQ~IUQ0al0f;wI z<|Vh*qLeqPCTW6mABZ5fLw(U!1W*m^&G5IMU3AsuzDu>>#zUCbS$iW|2u8_2FW~~b z!7N{FXrYNR%R5tL3j`9!99XSy8n+J{>d&S_X|fz8av^J_JHKdIr5OO6N6Mj3t;Y|L zrS!<)O1|xy!*D!U{`?z1f4(iR!lh9X@Lx@$mS}6lqClOV7hmiEyJtTk|*x;<590Fc&l|#Uiw=4qg#A;Ir z_#+;gmOdkKKNPs0rnq+>0s#?hIPF<1$}9(peIV+eGnwW4k)VCh2fW(WI^gwj>0D)7 z-AWu{5+E&rl;n;T#)qR?6Y4iil$8sI<#^?S5jny)1fqUh|HL0iL)gfZq~5d zW;}{;Cr`Q7Zoqbt>`YFD4{qIIOEi@YGu;PsYR>*zDuX@5iyTj|S zn*3E8xCuLB*#X9}uR2WH+dz2mFHsYL8Q`u_$!36`iYzn0u_*T6OtX-uxkM%QsMY*l z30%mqTPX87QPS8d(YgURm)PJehA-rQ0gkLDWGfv$7P4h!e2*E5D=NZdX;b7ekfxq^ z!aqE2m4`Ui_(}{Cn=bq(!?FSz07!IpR+s>Chvp7sCH*mk(;!#K0<@cw1;`py+lYq@ z&P~XgpwVX`iT{vFPN8OPPb2yXYq8^hH<~|~dH=krDfADu-Dc0S2Q>MQTI-CK_x_PQ zT6k{vsqs9zfB=c#o<^4#a<;+H!4Z+kmHDILP+$E5WIk{YQB38Y!k2Ecg_xzc-~&)s z%kMxC(VQ%;OXn(^7C5UK6^sVHDc>z=Pn~=#UKuVlUm_9d?>3csYnEI~T-cj;j_a-3xvWU%&;WN~vH4 z=$xa1^#Z%ID0gB*&taH}t=9rYJg>O3m%Dn5j5%&dymC2V~I8LiYKhs z=~p`PM;9KF5%e2P5)J&ry^g>uqdA9T5+5cFJUO+24sz7vJuT|6|c5S&%# zNQByZp%6TR+~O#8F4*w^;j}cDeVhQ}idG8EB?06+#yB8PhfoqXkmGHTk8T#^dukn! zI}qd@4cm1LqmIVZE#6vNyR}zAJV6lE`lb%e85tuZi_7E#<6|WQPyG7eWnc=yXD{Ce{H%2pa4E`!ljs@KybP2@_6}$* z2gn=EGlYK2Weyu${i>2)f98jNFCqw9D(oS5TXUGT|0n9$5?di-Fcph6J!0jCl53y! z&<_RYz-{$v^aR_6!Tf4Ga9KEBeiw*h#>^A>u6cfmoQl62BI$CZynF}tn>g^Nkl33* z^o9!XNm-5Eo&iqs_-L#EUw^46z>XR@>J@8fT!#(_vtEq{gbY(~WAP*K0tf}aGP zzKmj)DoR!VyF02v&~TeIBZfY4sG9(&!0mSyWUXqyG+ zCTp8DCtBKO2MkxLcT{_9^RnnYwtX6ha5(d6SqnvLYIq0-GBwXKFY_=Vl?mUp;Ag(6 z*kxqMAlcW(5w7ua@z!ZXJlZm`U#665-F7To3U!J110MJ@ctKvMgUkXLC44yESBaw0UAb1aL`Uc)ny3CC>@M(Ny& zyG9zjUDz92!I4|A@1izJa9HAOzB&GVYoA42MjCXE`~Fp6z_{@!~i(HDtQ3h*wY#SGhF|(0U)6qgSZ+%_EKizp--)mPazbjEii8U z8W_YTq;V}D?8WA3kcfiqTQ?x;G&W;GH{*eyYbkOd#W)%fhVCcabS4%PCR?8R-f*3F z_a|CSE(Wiq>M08gMO!T!hTghCevyvfq*bdsycUY7i6yIygg|kD+A{~0**2ObmJ3nU z8ny|2nNy<;n!fSoKfq!*L8kUeEHw~0l2*EE^6T^Y!B2h(5%8>4Vh!p>GxOO7{?T$c zoo2{tdBeka&=RdfwlhVHKj^f5V1w8r5(qKXR8E+b{|QT%Z}3W%&t)DRFKBKDe)vyW zoyL9EK=~}NEKCIo^Uc`V(GHsxIgVe*Z??`RYVlKm{|Z?dXyUJ~xamL85r=BIh*g%+ z!=A$~-fiqQ4MjFX>2Ko@+5g8mH0=j$^#X@m2?u&eTtX@RvpKZ*qU1UBaNHHgRZ&08 zpZ-(+bnfi8JbCW?7fvGaM#rV+X5w(JY%x{H7E@gT!X$2mP$2MZbB`Uv-l+Xm_ z_pS>at!L&73c5ejdLCKkXg#?+8wCc-v$P&4Jj>E~;pI^@+erMaXZFUR`Q(BRu}08> zeRlvjOb+v~?O`0xmq4w{I0+(~2mPzH0-m5Lu#VGoTp%_STEvKP8cE1wq{IgKRV-++ z91Kl#NNImovS=LB-4cyQaqvJl_={W5=oyD-t}QWa-g{vOCJ@|@*^M-a>D_MK8{>L5 z@HK3iFiHR@$$@XNoFZg$t3CX{cl+CHW`Vx*!O@-HBw8T3M)KkV%+|)1Hv~6@#$lWB zzzeAYxV5GYUjntIMj9UE29=zGuVLUEZQrFDsBLe2^Mz!}H9k`hdB%HuP<42XwJNp9 zcnJ^Ag&+*E`EMjBe>2+~8;7%vv`s7=7dAoy8oMpwBc#B)lFUjNSt4#OdJpQ{gCG9G zV-0`tud$$GP~0h;dbi@UC8-!Nmw<6t3Pu@cXIw90;+%D%$M{?Y5m&X8sau|q=Zkv1A>P?)3rfBX%Borb)H zBsn(%MKU4lMa)`+tjIVb6QROBdJ_r9tAq}!v2%@1X{!nd^8_~5R(;GtZs7`jAd3hI zqW!j48uFYkRZ7N$;uo>_=?zmoOzqY%^+cv7 zhRN)L1m0f*Be^XE^p9>pK*xUilfZZKhnMj|O<65(L}Zo;dZiWG*O-upq$+mNgJPCnTyfhQyJ8jY^3M@y=QMSpuBAx~$_V&-M$ z4aP#?+F%$RA(}8`a(}j6576F%1y+A)BWUv-xI(VcGuFc1VASGIa{iZ@e={o7Z$WdnND-bC=aPkB5S2+B7YT^DmFvLzJj~zY_?pCIU(Vc*;Ped0oC}1~rO9XkNM+zj zPM#6nu75hy>RO(3Fx%PLx)oNhPg;@4QB*nGwb>ea!BezLo~K8CO)druY?9> zq;7z*^%HWPn>yFgcCJRJm<>MwV1y4jC>h6)nHPU^e_cux-DER~QAfVsN3P3q(za3pvg$@lP~%KCRLVb#`DZ2mNY2K6 zyxV52)Srxggm!DwIQkEn`4Jl?j(D!5^qYt5rwkFkFt%~Hb%Agd7>uu*Zt^z!lkuh9 zIS?Iw>RNCr+7Ms$D~|>?Y= z!os3<;zAhU6bbxVsCNcKle^!t5lvn6;pu-U`;yda4Ibl48%2yeV|)OXknX|^WmMTO zPIn)?7t_Fr$@nk_vzxZlnZEGr1oTWse%90qHR)Gwuuw@AV!7&Fws9v3J`%k)uCcq$ zLB4YuR1M|W{v^rK4K*379awE*Op?ag<^0D5ArKnu_=l)f-wQ23!HV8LiVBS(sGxy- zCBky`?;b<-ALFax;h-31gTkH*)icqMF$2l^qfV{(Cd@ej);MESqavNA?FYWWwRz|O z&y2zyPLX9d>lta+^Q=NevNZeHuCDPonhf5NZZ-b&78;N8&vPc`vR3_E~Lscb1JR!PM*#_2X-vTb?dkr+IO5pUb=bTVr-4D??! z0mvO6%W*LmBgG`bacI1;<83&wP@oI0D+o5jB^IKApf-KZMdEPA8R2&}_6mEaHlZYs zMWkxnq;BwLH9fZ0L`@9)B$d#p7dQey{DzOla{d`PNtZ z*RpSpxH1^f)_59!q;3+*!tWzYQ}})IaCGesyqgj@G_JM{0f^`a@z$HXps%rDY|J{R zvK>*6coNsRotz{ZG!ba=N43vk9iNRpeu};%Cjs@X!=*X0)-ZfGt0XG9IuFHa01C4M z=;3<)T@Vd$677kMaY~t^y@$|&d7xD@GgY(6&%?280BQ0JR zL6ot2RgIh|#|CME{t)t+$LsIE3I%v-JTH!7>?Dl2I%hmmCkR#_YEWDx5#D@n+wLrvf|L)F+*?w5+-dF{A*Pm!zl8f*Z#d21o93NeJ zXr)C-S#UprbnTcLbU6){cV9;Y{)7|L7JW4WK2(N(H-Dh@0#WvHPFz!u*zu0#OtGpf zjOAR8N6-e7Ngl@TU98A<2K0BbXe@%bJ%*w=LuJiQL!c3WQ>BkBg{gkDKKGSGs5+v~ z`S28u!_(V=C((7-I1Ig_U1uvEP&3#9GjEAq7Z76l1Pg=%+>c(2;Z%5uU`0P+5y&XP zcA;#-`fwj=iAR7;YX9l46Yv4szl{&<8W11V1Vmx_JUqhm@9RQziRu4P#uPY&pGy(E z(WU=-o|@iW`kv=a1lp^^pSk!GZ(2LX19^Y`xmBe#`&;;7*;wOJK^uS9mk&Z=1aDMH zv2NexAP^kQvJh0C;+Zz3hf(d=`79rZwVc)g=eK+bb^MAba{A;3)jXI`%^g-XBUsIe z_I8cb$AFT38x$RrP;|IeG!I3S?&Bl}APz%C__qoKYq6XUU{8aQVZb{)$UhveX!pHK zOHKBCZ~80VaQpn&R~6AgS!N;rW|$}7Z-I%hXt?I(XmzJcPK)=LKjS8E`a8IHBRWWK ztR9pXDd4&iB>hf#fj+yH_^wnpO=o$-uX}fYs?81xMCGoE^@IY{>y=OM_OmM^S7B3V zo3CfwyS;zc&t*SoH2m4W*F77_3g5e9A1ij+SNOs)HRKVj;f6 z6YJK4S>?DHc19NABljkA8L6&-Ha)KIY16C0FN0)a3lk=ASZyj!gVm-8sg~8|p-!lW zR-11z_Hj^?)~H4JTp>P@FdNY!vIYr^vBz2wFZ8@T{29#1p=B_+1@r09i74T`r;10U z0%sKX^AoM4wG)&)i2{-6e)y;Gr+S;2G`RZmt1(+;p<1z8xq7gn<(ZG3nrvG7qoV~R z@2Nz%R`%7a_8=kQ*=h8A7g|DI0-wng;}l4cnXT9hILNDrUWGu@ZrIAs5lh!Qs;ehbJSR|Ku!p_!0BKND{&{E?P7`_k~Qduj{;Y)N-kx>y(^%^BAwa_>j4=a|S zR$gvobW_Rgjid0OOg8MH{={>bh4K;5|+^sbi|%qLF( zF_3-w0LcM?0o8EiR9$AjT>qxGZY7KF)2q(LI0~DkD>K zX`H{PA~H$#uZspp#=0s3YjDD)f0s>d1VTq34#pld1On_euMxKG5D3i54eW0!0%u_F zx*~D|<^~UIrl;QN1Tr#0`tu-++Kw0>=^o|2*nP>UShrkcA&x1{+e^8a{=qYXcd4RY zV-+)V^<$#IUVp(JroS(dJfHJ-r@_&QGCcMDpJ${E4*zHxiJ+`RKB;Gks>h{|17U>z zXhd)MBL3`uf#|~gb8aNv6D|G2jf)`ND=8z(v;iA{IoJ~)d$VoY*`qUVtw^tT$F_Q- zGqOyCUY?P`YlmhOn8)F-%j^=F!CNCcZfuKNBTH6Prmx3!^K(u}~4(QP)kv32j6J1~7+%d`=% zq5|g`)s~w7@uERYu*1zq@Lpv8!+Q6cci_FyjIQQT^0owMHzA?DF$1w&6Xv%#e;___ zF0{0Y@LPz&&WOY=h-W$zc@S^Ad*mrQ-jGo8&S_+Pq;uCr=fIB!B{Sc-^?`l-R@{?( z2hSM!n1HZPhG*O&au0r-i0ZK0ZvucS_;>2-Fa4)^qc7!eWj7FMK8>T{`pXEO*Wwdu~ z`7j^=0}w-NGY>-`-sKSX&67Wd;6CeZIVB&ifVH33w%np;`<%jb83Ne*%%t zqVauW7M4QzT+Pqp<+F|GD2^EGX=@N{99v^siOU|W28iFmT3Cql2ySrW6ou}UGHp5| znpb(kvMN2NKlc#h7gwB&22x*9tA##hrFPrs_Nl9zB(i-iPUvftF-}6IP$jCts_X#O z3LGC>kY9}#?fGH(mygBEReS-h#?4)j&(qS}HaP)>OoNqklJth4U?$aF{8Mj09K?FJ#eelDI zz7JU$lM%082p_gP(Gr9$4fa12CueNv?|8gqC#_TneGjWaZ)s>SjzxHxl;$1`R zWuhA69Wuqr36p%+Oqeuvf>$y?)a@AUWtOiwr0 z__J~rEx=GXy?$Cmrb5L5lIs-zf>jp z3xRC1W(59w_({+-J1hpYq$GlQ({mk^dI*%VFXHZrgjFb!rj+|@H`6WU19}aJ?-_`R zm@3&VjT_+)UDoFti+gw)U;_%#hUfKHr53Nad6}RjjJ_2w{^{ro9)~hYIu6r9b!a1{ zgtUdD{$VAWAV>1{rs1Ns|6+Am__xp*gjWz4^uFbN;&*_fb!@4qHIAC#q4`#x23kb$ zRz{!|VecA2XSCUj56QNHq$1&XXfGeaWF|sZ|Gf)XWj{_p(9~pWz6K|Y0~@&`1~iyH z90BzO&iyAGp_=p;Ub7>As4mguN z#^g=!x#5FDF)hdv)C-S4N`7NGH(-04x^Y(sGJR+v9chE1JWqS#EJnp>Yce957mI|DGDHz7Yzgv;5~YKb|i6jN?gA zB;%=GjVIzcVLZWZpoL1>V;C*OAFM+c9S?t&)ztu1{#eWPUs~Xx`)eHf3+lYlk|+$v zX_Z=8y%wCFB|=L=nxJlufEDulXnrkzEz~lZB0vjyFnu_T8(}r6QQXVsdZPGiT+7=u z_3tt3aTZ-uS1@U#@>EqWK4dwu>`V*%22f}Rwz!CSb?iETd@R!Zo)H(LOIvr z;BN(pE&A*QmIVHQz!yQzzkvto)1UMtaTHP!Pwvud6B4@g(jbDIFbaJq^ICAInlM7p zr~~nL5=Y;0H$q~=npu$M>n~%NfE4H@xiBpEvd4!=)lt}^7BAHwI*?IizY1OwG}+`1 z4)2q4(qrk0qwN!l0xfhu`lx%ds2wAFbeUZ}Q0^X%tPrGY(53%-Y8o^Ze&=Uf=8c&)Ks>2T|f4$S4JEcKkn=MDIdDUDu~PvVjP24DHp6mtw$8C5is zRntrclitGo8hq5U9#w|Iti}0@iM^}vcTDe6{2kf55PygD&colz z-dXsY(YqqHjto&+5m-CLktHvoCU4~5vXWRYcS2%7!Lq-vt^d?S+TXpjIav}%jd^J$ zmeODlVu1lz)FNs@KGDGIew`Tf4fUYYmqSqX_05iY4FYa9C>kF4Nt0oxn_)0x)oQ&`eF}JD!t$W zBv9W$3${bu)KNfEHzsE#khG2iKxcO;eoM8ibSp(@ysl( zBigX_jpsz9?F!JgTI#fWVzgzhc7OVP5+ zm0YqFram~Nwgj7-iUrNKt~v@&mgXXuMQPAjf^PD?(0X5Fz2{l)^YKoSZAzoGhBt&H~aPQX?-fzCm!n-g8-C^Mq%i&O94Tl12I22gJ zq2MnL2ha~_B0cq`mt$KHUI2E;(@5}*`GEOP3>G7CkPR-(HOMK)miR!FPT_CV`o%k| zf`#IXuQ12p^&a*5K==R3U@-*Y7XPxrLZ$?LVXs811sBCt08I@AcaMskD3DR_ZOrT{~Upx=Mt-1c(Ur2>g46VQAyGBA_oXJnlb!fvBApx z(VobM=@w>K?$&)+#P2Y&&e{uKN=NE&Bo}&%b$=1Kgwu*O@yfdD|8e&%;87Jx+X>fj zkrR+;P?V@a!-^VKSc8Bjkid*4fEN@I5d;ARCF%^K+=4R$nH>gk7hGN46%}1v5!nw# zRMa3>Z-_U%3!+FL1_W;e1eyPRtIs)eCYeOg{ht4Sejc98IeogTyQ{0KtE#K3S@YD9 znEU8IisuB>K+c34^-HW^0J87qS^NESYS$`VmoTC=_QIA$w|g<7+@DPW%*a z;7~d@uy4=CPO@53O)F7#%#_`6luz^F*a66@2=!DUv2t@BDFe(XQ2 zV}z}Lyi#lbVH&m{;_8{Dgv|I_%!#^c>_@Jt2Hmoz7x7>ZznqhzKG&LSY!T!h{Nnz1 zWMOEp5-&u+j57Sm^v2ig`_R3Cxb9DZH~zMo_J-9TZ=h#xny-Zvfd4q_U?A82c))=Z zS`}eOM7R&RHf=Coi}tO9G5Bt#K7Rk00<7HJ zkLdntc$Lu`lFO^cb5|Tg11}p*>51JjmM<3k8_TaSVDF`u94`{v#NST#vWzfcc$Y|r zKmfZy;x@4Byq^d`MGLI&8BE9brTj(tOs3;|mGwObzYtnipcwy&=wv?(&cKtLd9dbq zITJ8clrvEqx3y8_0=!W0rDVZ>e6GZ=l*V^T6c9x6P!oo+v#!vCAO0f)h6PQ_BLH2> zblUw2@W7xbh4@u}3Zgz>fiFhuLI@9*0Moi~AfMR_q!;peD*!N{ng}d;kX88&at3=| zV}lyvD_lVkn>l<@CS_S{SzH7Q>TDU1(cz1-jODXs1S&5&zBK&D!pa-rVAdOFWk~#O zu)Ah{ZGz^*KZ5JnVn>f_WN)q%er<(ijj@}zLpy+3tAh~?AE0UrbtC*!Jd5{LBhG;z zX;AIV_rAk7Dk(fR(OlQF^Ci%Kv{zq*8Sq52f*;w(4Ia548^&!IvD$Mlo?sn3tS-Ql z?aObuoqdlLL#l)S4=OXa@tsw05}^>3M$s(IPw>IyxFx=tn`P0mGi&wL-&{0M^WOv{ zn3x2GRj1u6zya6RHdN0kfZ7kJH#-3q{JKsRkj!E=@Hi$AAMvcWzefX`;N7In!D?W& z8rv8tj>DmOE?(uEQweXaEQA{uSx=AV`?ZZsAw)Hx;g8z-58GESs?CV%vB~&Gf>mqq z&5WXf8YEe+hs{`Ox6^zaPoiqeolCeuSR>97ZM05_Z8!4}z?r2{ zl2ZUln%fk&`8zV;YV%cla1zIuW~5nq%zI($x=6dPVEwS?3XGVN$wzfxJp@YEi;- zNv$+1e8VfQB-B+ z?&M1H7gil$^D^frWq`~R&)V^A8{2;ol8>)7w(G!&s#W|&x<4GQ;V<$$a*HUm6c6Up z?2%!&S`Yvi6vw{=6z&6gCcmWO}_y}BD@jaeZinrMH zY6+NYjS;crDXYEN0)MyDUX5K_JZvH`X}Rk>P7g+&dSogQr|VInJDIGvXfc~9aH$!M z$+`3%r1~1P8Y@+&qaErLyD=6$Ku~*ZH!(=t1pRHwqGP~n;%ZL|S#XFyYb(>*!kmcg zHc5O$1kS%gH!DM(c{gf!3W%jQrtg+I<_Z(xmV$bK!s8n6co zig|VyrQpdqrIB%Y-Z<|xu>4=WfnP+v9a9d^BQ@+>0@*=%eR4JiL(1Nv%MOG=k%Dtv zF_4&ixmJJS=83Pb7i}#=TLIopPd0qW&u^&X&N1PDDd;?;yDH#CH`9Az-h*;|3H+-Y=-#RY38X2XUvP*#n}t?UUC7{$S=GtOTjJVRFTV;z)3lG`O8W1k0M?+)A{S-OTZuJuU6U>#68t|66 zuTKWbHs)JkO?F~ZnPX^h4j?R!jE4Km)c5zsOQW}C1SaP+xHYRZG7`e~4uz9L7-O*Y zjXO9@J_wGHkN5f?>qUtEhWZG`;*s#K<|aQar3 z832YpAbJkYGg5JE9l9=Vwi0cUA=1%r6WrKGO`3W`vjX2qq`X{IioE*b- zR@IVbxShb_Uq4g||Dru(4eS|cPi!LU0P9EX#jXBf_+#F#V>R~6&dK_rlpF;F=i!e@{u zL)ZdMETfz1UTij(ljEwf&B28*kT}aXIWwMRZkMj+3udg7zUmnq%rrkC8CsYbDFCsm zyr8p7)%{s@FWnYWm+HlY&UONQ5qeO##g~!C6BCJGOt%3HV9P29cYwI+jT+s{*rm+C zWy~uTP9BT7f<<**GQY=#z@YgdnCPX^=`vsb3^*tk+aBoyoeo-m`dq=)w(l$BS+ne~_t;$PMSWI0`UB#%XZ`4yJ4a$?dN@^ZV*_4tBB zk?F3s6aNQ^Xb4oZEvhdP&2GA=L;JS`!4gROmfSN#L&@n<bvGHNF1#Bd!%Y%J`b$Wig)Vl=*q5#(7lPxQqKys1lXM73R*fU?h? zgt8PZ&^k4V2E6>~BBK;0P4FsXl)Mi9aQ@ED{s z+U=bunlT@S6g6^wCoz4Hc%*}@KLKfzv!Y!DUSd*f;)vSI<@R0{pR&g4gD<6}d2H$B zWsx&TLg}bB*416A!v)Eu9&(jB*(&u$rZhHJ8jJHTo2@2uApoLU;toLk)@XajL4bte z%OOviSH*73UzM@S2-%vf#Vn@<(U&>EK3i3bl@7<(TC8+jg|O0WF7)GF3;nss9P67B zPIf9dr@7#`1%_B4g}|_HIuetHXEk{*1&iclb64wqP`bb{7?;!BEIY+`>j>Mrxxs#W z4jaDa3-()g=3H#QoyoU<+He1WDa@Q}zfB+$y32kW!8f1%b{XGB+mm9 zY=Q{PAimmQzCTWC$xt@{g4u~+Rsak?lThBnXEx?j#4I$SSEi}ITVG>ElE=kqj^6_6 ziB8T_U!YU5Q&qVQ$Cc-YFRVN-AP*R_P~!zZq5n&;e5qb2qT9{NuaLIkyh*eI0`Dmn zICC-=IITxXpTy;(urHcM}5}&#Gh!&EJXkT)@^zd&cqO zIaXuMPButwoI`EL+bON=hsN&OI-|I?maDXEkj7r%T}`jl2sA&oM#0?V3lS3HUGxfI=oR(GEN4o^vj*`y2=A@7sNf`iUTl44>g}VX*#p(EtMCwo zhW0E{Onqn{IQz;%r;JB)g3{8C8peif#8-8VQya*0$EPy%Y74=!k4^9((P>mSE1!8c zO2u%yuFUy()-xz#L#?EIJc&@7I#7Y-dt6zrXO=XoLiWKt(*(`zuhLkV(kw zWcwkD#hyYjwTOQn<)43AP(;MdLq+xhQ%E*O5PT?J7QJ0$tR9PK0;rCCqi(dyi0$sj zPgtf9`t?TItENI}+@oHhU>yF1_PJ!$WgT(@F$HS(l|W1sq^#Pr8OJ-#fa3o!GR*}% zBiIQ#pmT=mlYeR(#CBzdbl2VX3akDx`Q&YHH+Jl0E{VenxR%7>Yw5A1jju;wsA%{) zQ~pXeO#qGpu^7{u#mh!PeOxRI)?eD3$DrZC6(zpXlp2kDDvglj|@K3CBCW z|8YWD-+*Uwueqopp`Q=**!HyBMKFB#M~Zt8@U@leuPj7a7Zx&}f%v0kZaeW|%BYTg z$g#Ke0W+;-Z%Y`>iUr&_^gvOM=>^c(DjQem5#w6|9-Pax{jC6&7j^dYmc5C4;<{Z2 zv0;V6VifD`va!{)--&(g3wDPtj|_@K;*Y=+HY%4XdbxY)Xu z&D>V5ts2j^)oZm(t7y0QL#|TxVsOHpnrd9QJ&zSrx#~X_%H|^Lq#sz_C7C z>|Z~|O!^cD7a*fFy!u1%+`r&WT@kQI(lvj0{?97^#gn96luznEO6&gPA$Fx|W5E#X z*MmrN({~N~*H4x`4lLHOhu(l9=uN&Fh~8k9!QMn?mB8w;YPIT$>w5`)$Ct+R5 z5>S&xf4jss{h#A9{m&Dag$aAvve_>FTif2h<~?iDzlaBCyle&*@3;`jwsH49$y=?4 z`!)TOR|a)4_1OS$Ec(A8v!G?1WR9z^C`vs=p7iQ8s~FbQGJK`M$5}5NegdN1p@uE6 z_=%f8wbKx>|Do%QXEl|SYW21c#5mFh55ec#cdZQs2R`lp+`p2MdAfnK9w$)y0?L3( z<*6^x6``y}NFi~Q6MQ3pSMjN!G2zEDzh!P?%Er}6re)gjp^QECXsbYZnUC>~LkQoR zVg2QKi#iUFB@LK7A8F#vg&JE?cLBZcyA7588I=k@DH;ThD66y7`Gm6SOd~W{5p5cy z0n#=d1@9+~ksh?YXyKn-^p&s|iOmpN#Ix@R6*xBLc*jSPB4dgs{*7M&TeX6h zJH;ANpnNjExyIARx5#RDi>S1N`-KU7U!<#wXBFXrXl};N{sSP{UYq}0T>s3{2+liH zt3jM!(OygLBiFBHlnt6l_PaPYO@MmmNwe|wVAIp>><*ibs|Rj%vx~V2`3FoJ!u>&G zdB34i&%ufVZH?vcK-_>+Pw&?&4zw|5T>w4BSpFJzDXzXdX_o>mq%qc*@i1~=48*do zcLC;Vd*)O85FG;7n&}o* z#@&e1s4zuNB%$=;`>|53h%0B=rN4fgyhj_sv+cyUb)txO4ei7ikO(Rg#pYYu3)WDv zfytt0BO^4Ns>-4}_r}eunVQms{{)Xa=;kb8`5Q(wRZJ5?LX_%yg|)iMklT zNyK8UrXFiivk~kpa2$&MpL-!_&b8_J{aLl>**wU3hd#p$BV8Q$u$Ewr;EjX}Tm3G{ zajxfi3@iUtly>>f6FAU_)^^+y(R&pP%nglM&4}RWF;!8wfte_(VZ9>aT_&fhTN108 z5!%Nd>iwnlH^Hp+jny5Py)*4CBIqk(@4kYA5gjv-^zruxZ2HhR9RlUY%tym59ACtD zI;2%hZi`JWV7iu}>^wB2mZ7XS8UaL$2`l4Vw4Ro0u^ zvY$Od&&{{gocS8}+~0TX-1qB3HLSdsbxgMM-o{*98E<6Oz_W$k2e2m)E9Lf#)>kgp z&}1b~*o+(3fY#B5)?P!)wxE@9hauYS@xRuReqC6NZ$(4YtNXAwOf{z*tUJ^E4zn)x z{0(2l87R{xI~if-*}we6B~eWTEPICutHrE01dTbEXnCyaZ)m+}07mFu40JLOQHBWQ z%LZ6qDfwsLq?HsFeUpiS)j7+X4T&7E1p3V^%cI|x0(kfy*Erb|XqzK_Y2 zqs&G8^C1Bu-Tp3iAaqWkGJt6eL{S(w9sDx)8SGx|TO3n02Va5pfsX5|XoNNMH| zXt6pGS#Xk;uvzv!>;cJ!p=#hRJDX*>Q$3O^5)Io!_+Sk}e?oiA>OY1wo;B2N*lBjd zSojL=r&~6xi|}mT!WP_5d261CM#LwCi<42B;$lKxqg8(_8YpS;Y&;ElvFoA4s2*ZbUm;S`fv$bT2+>`A_US-sm-uZ}zCC0S_0k z#deaAj376W#0v`X?`&9|39AYc4iO9f#r7xsQBKC44C23$;16d?Nrm$K_4&I5OX-!7?4vs8@T~6I}q>*HsEA@ z!~S)**xzs(27{u0Mp62_!2ShMO6yxqsnQ-tl{U}T^?HB{hze&V`1g3iTIsw0M(DSa zj}4J%`!0R)Ot#j_IRQDjry|Z8Pg{%Woud=#VT>Xwp@a?}fS>{Y(6I>x@ym6b^VRAJ zq$T`WXkQR{+Scw`*<#WqpMz89llbW!fpZ&TZ?n#8Oo!}-^BRwHeTZBBKF3%k<5?3? z6`J7^pGP4@i_fvn_;u1a3|CxT3vgxOJ<0O%A2h6Z)+tu|%`q69skdnPI3ceN zgcd^FmTI3eRIl4>+si;{>hNRMdM3`mxaN=RFGeMy=dE0emM5h_=U$&Y-xBn?1n?~X zDV+1iQ5DSaI{|^6>CI+tE_X}Upm&!(Uc?&_>=wWzS%iXm_~KdJ1W2{|Wpv%;FTq_p z?(*rb@;|N7WBpRi@-BRN#J(wt;OI{+x%4HLleKT0I1zRhRWaJFWHzOZVz{Ef|3q=F z-!_`4wEPFNp|<+n{)2wN!J-e#=%>D6sr0cQBgy($+o>`#SQEI{kFiSD_d61vjjP0H zwPJG3(bCRzKdhD#>f%E1?b+Z&LVe(&pWs9Ccv2r0{cMl0iyHdbzcnD(zwyBNbHnu* z*k5i=DDjo}VB6~){T+DSq5A*e@E^x;JcRJ5U(Z0x2(KOCJq37b5&k5a=IGb7|3Uw= zRKFqEx6P)l|`czp`lxyg0A>7|s=($?Z2 zg)F>NUS;pZ4as)`Moc{^M=UtcY`fc4%woUV2FCXf9Dv+IA@fXGPTPXT#&YcGa5{<* zRo{-Zu#P3Zjewb)nTAaRYw6qqVT;+;Bb&M!Qk9PHY3a_gaz)u zpL1NF&*kTzAyyE0S>yt7O*t8QmM41Bm`V}L;_so?yg$a8QQCHlmF!qgq#sn(gE;L8 z|IaF5j8k!XHo7Hl^O5N}?lK*3M;5ye{xcBEv^1=HxMXAsd+qbrf|!s8z9Rb6+YM}` zRbmQCn0>5f>(BInw?ALQ&*F#TVDwDa=L`6m!J+Kd7@?M~&mH)gJHd(1yZL6-oyO1W zU7wTsvJG>fmhE}>uo`{&hYQ|Pl!)D#sB4Dn+dO^)r_^-ezrk+96sE&%!%DxzP9Mc| z7`UwT?sj@9(~on~;Z>wD-xcY#T6-Z{>l(P#v5RBgSie|FtWT^ccA;e%KY!l=l$@Ta zzTANuNV>+(h;@ve7CXiI+TQ-UnqQAo+aW&18pRqohV_F#VPb<1oI9K{-)gX>10hQZ z;5Gp^3-~n)UxnW#)+gAXJfOMIyS|CAJkhB&Q=N?vBgXRaxt&WRaM~=a_ywmX@08&k zg;*WXDdClK0TfLFd?2eIQkR!1K5{xbP@^ai%8%ioO`9&pbF1cri|%6&jU& z;68X-Vdc2C<~9J;Aq*>Cwqo-W&jg6Y4)ybOhn%$eo<=>&s9WM(BEtpYPE@XR7S z@fMwic$WJQ0p>Sl*Z|4q$$rMAMTZg)jUfG6jO8;I;3qopg}~1pj9EOB@=AI|+Fiz@ z9~yymc#95vKJatz+YyVf*Z65kVrCKk6z*G_VFYOsEPS>BfaHYx zWD1&$)(ttTgwk?!xDN&!05IC1eNRI8TV1_24ZZfi8q26&TLISTUm*}f+i9TNhd(jI zgGoj`IHJ1h8k@2^)aVE)y9d4|)^wNsI7j$UNZ&~jsW3J+Om0?Lwsx#IQDa50e{Smp~OhTlK zOz%Fh<#!-P2O}w#CDOnS)q*dr)iDs#Z2926=e2w={A#zq0OFx~Ks1>9o-o3^dk~!o zeUc+Y_I#h@jr>!i+u<6Xz`^Ezgo2frIQ!I1;|1N=`bU^12@!-TfLJfFUO=&r3G3{|83<8zw9wAE@pNm((JgkIk<_9P613UV!N&M{D78un%`>-g+_D z!BM<|8;3(n!&_m(za@)oE2lI(DZ{fq4W{`t^ZawsDJTJjJTzPdFpSKwL3+AaPE8}e z|4b4ZY82}8k3fvf5S{K)_udFC09+o#;_Tx&-m&8(CPoH0`A`ws0jUp8E!Y) zMwGvlNVyQqGc{8D#cqVe$JRIQu|Y1nBG_lpC36uJlcOMp@q6nehR}U*rf^k}y2VD2 z@z0N<#-I1ps?nN}RwUt~$l^H?!7210I+VIre-AgFJ{(gYp6oH`*#N=I{tb{v(b%#& z8{4yiZ-g~dqW&wv@Hjh)B6AqI#hx=oda@LSr9a)xFf6>Q5ZhoS8e#M{5zU|qPb*LY zv=)>I1xp*)q~bdrSA+olbll`WC%skCzL~>O20K6GYv|Um^X+Fx14Gsf_|1H~@Y|Xr zSA%aa7QSuNH*OLp(q^O`*s5UeuP{>oKyxemf8-0y-*(q*D3GUx3yFzojoW-31}S;$ zFiJa(e(xX(2M^)a7)cD8HJGW%Qb+1_R?7>oPmT2iMH-;7aZ;*rT2WMB+5KIP3CJ^&;Auf8-(C!PU%fk8VN9+f@tQ35db(&9Gdz3PRYlO(@UkE5jN7qzW&T+!3NpSItmntWT>2ol0{Hv9f0) zyU$o&n%lIpGj%v>1=$@yJPy$8z%vxIxZ(!gO?S2I4WV;_iYH9@fd%D|v^@#e~ z94iB9+p?c|ERH!HMF%#iS{-oM*avJhW*Lb9S1|aR1@`wcLOk+;*|q-PZPHYO0iyPK zA{BW|h33{A8$Q0~=KL1eyPHRIN8m+BGobm<^Y~4ggeyke<{RO=VWcx1F%PSd74y)V zl|t^xvl8*3;G_>!T6)|ycuS2!Bh(g$nTWsgy{PKV5IkCYKQQo^}YS6zpYa#V_M{Oh{L zp>D#-ptqK5DUS`UkB-gbkUcS+Ae=5p5W>mBgNZAokA`si*V$lSb6}Fpr-?7mp0Zl{ z;j}#tC-T8@j38AKtjdJz4}J2aJ$!Y2ojoet2fnHc_eO9e^f9YD;QWK| z2I=ERbS~j|#uzbLfWX6{TpPg2uz%C<4j9iw zZBU=xMJF8`7uW|wOu7+jfMwSc+Ghk?@gaiS>LA|EMOy%zgMl~BVZ5!tnm`X%yxhfJx%K)HqbA%u{ti#~ z3ycsAp3=lFpQ7`u0#W9q1^d=Qb2$~CB{DO(%%TsQrKx45kON`zfszixF`r=fsYWau zmO)WzZrD^;x7rmqKZa_p{V5_%a3#hFUzZKWbNw65_zo);+SF{7gFz#-0(l|2bx3!$ zb)UvG+VOXMMHA*fiWPHHzZxqhJSoseteQqJf(P@_PHAZ<$}vOIU-4siq2p$BVeiF9 z)`k0yVPIYi0RfrEpaqHc&@tTxI`#tqec%Xz_5n~6VfPb|Q}*}Y$YH}TC;T1)f3=XgI>%&vOVnLLGk}aO-OFuw3kmPTi-;JfjuotTwWJ++9V1!C zN7z7BA7AMfU3Q<5sO&seb|V4f(kWYhVNAax>qZ)@n1(74@=|0r-*t93K7S98Gp%lL zK?Kdb9&M4P4td!%ryHbF{;TjbrT|$t8P98hx|*S`E}uf3zZBF}=r8~m@g9W#pey=( z<7M>%y^ug(Vi8(JJ>hc4D!T3@v}vVQFmWLepkPp`V}c4l!w=rb@9?%&zgbGx*LdS{ z!X+CVrUS^n6CNobXF&|}MwSqWH?hma;NnI|La4bGtv_8+A0IdU6lW~C&zFfSoE-zl zBWNk#!7@Vk;#n@zg|l$ATGq8GBHuboipy-Q^=RgKngL)T_%^OUn6DvBnTk?ODXS=$ z@Ao8Y{@^uKz%9|nR;er-j?w!&OY=v7U*ZTXp2*?;GFJ;CF&R;z4>7TUs337?ZbcVC zGiN;nJ~OsY4L;-RLdm=fzBfFt1+pEpc`z*a(Z*L^g{^GF6JLZnUha!O>ZXg}i@2yG zp5D9MJqz~d0=!#`{!IeBR;#Z%SL5i{)#}>HGxTQBpuzHmx}bJz{Jf7JBnny0mfMuD zf0|KjET5PACO#Rp#5Vn_c@3Hu+HeN=?b1qj7HWYy4&PQgRI06Oshq9A5G#_dNbP!IGb9 zg7%=7_HqYm!E(10KWai#+?X^48wMUKcKlai1ikoDgYajs;|gCCnYWH>d-r$3n?bG+ z&pk8N>xy6lPp(L{1!(gyARYz&3O}g}e@5_ag3=OUR9~Q!n5ubqS<)bluN4L09S`GS z-|BRKeoCCUv4M=%;;%+D0X8giSfZTobWdXko34^ox+K+9bp}e>^SP#Z2!jCe3>#t) ztw3Md>LP4En)hZ)cLoEUXf9*TIO~3BDc)pMjL>8H1LZj|sK4P&_qsT22EI%eO72h; z*os?$^p1p7@Nocphfrej^_~PnoAO_UCwfJ?r~5lbhzBW{0UW#t99*_4%tma{ksCke zVW~{5qxw#D=?A{7!2TvaVW`_?G))UaWFG)637lxxOk4G9*XO^W`cWpZXPXg<;H^IS zpG<>F`{4mH+djf;3bpU(ZVP^A=l$nvC4J1c1 zN5DKp8-w{h(v94vaOibc4YVOj8HXoKF27dQJ;$0C97V6{`E1s zqe6WK8k(B#`i5DkH~g2^J3;OJ=eGuEO0ecm;6M{2+hJ8{Cz;{XS`usqt7a&IJdTh$F;wJ%)~Xd9PnjmvCL1xb1^oSE97@&ZVI{QCnT1t zHb!vG_IR9T?%<1fa3+S>i66_;6T@vM{s(9@LHtK*?u+0SZwx1C*uCUv+CDlzm&`gl zR=2rN!oj&Tr$e6lnqx*GDkN|ObKfE)h`H|}JeZT@^AS7dT)T-bP}5Qf$d0)$&6jUu zUhiF!EuC?OCE#%tBx~K@iyIPc^oE2Z0iT_a+B|`($w@Pxh902YmVEt(;My$4gi{)$ zhuUa`iIm-afA}yi6gGPAPXcDM5zIIB#9F#S;hOYnHRp7zVRs=M0xkuag=#5UcuB1fDOS3VA76(IgMT1S6l81mR*ure(_jR02NUAH!8K4kxFj$5wcs z(F*T(;cBDz0p4(gK_#`2wRjwP9X`kfxV`AhD_~o}2Yq{Z7qlaZg}{vw`nW7-YV<0H zgHGbS^C9PZZNrdc~1Fj62C;AzOa}3&~(^TZlW3ISzoy&<53v8zaGca9qaT zSfg;Xioy}yPnMz|MxPCk2gw-8}!hKh{VFFy1^kG8fSL*x568F2~J;=*eGxzsPSDy zm`0HnxWYTt#(iMZPBoih7-a{ubqBGxh=hs)ECVa8FNbq#8SS*s5R0YXYGHagC_#!n zg$I6Fk7BZ&bOJ~gV~`sAM(9*hH1h8_v1yt)6YZr0$d#M-zX)B>f`n`L@^C9(wr70< zxYVFe7r{@tcc%FWutWkX7vvms7*_^5;c6j5k!j;AC4LM6S2}Pgnzd}@Ugh^807tPG z<)jIL)zalr6IdMuar~#vK-(-6sBHY1J}LB82dn2l;sl&*q{Z-HzKWCAZ0Z6+$C%U> zb=ir;QUk)4^@id%vj0X=mm4z_{ZKJUsfM%*Jh-LZ_ijZWEfvJP5aaKtIWiDHA^T1> zCxyC@3vqxLhB%-x+{Z{FJvHb@SU*AZgrW9Vh@MchP+;|S$qGUa3X!?xosFd?@H1iu zH_Jr3c-{S&>+!IBV1vN-zR}HIH-fy$L_XXm9|{`;_TmGsY5&mRc-Dt`HYtTS(f?0(vGk1@S5pEclA~F>Z=fX^`swp{#~j&L(xpl*U|4w!s=ar3IhZ;b z)AisGbCItk^0LJ!zIefA6fL{poKAQRn8&x{U?9Q-1^)ASsAyEGeHL3e3x8W2{#iZr zeN1mpk$gB&zin@kw^&LcPldMOOX}&pEM3kz{Xc{J^m>s$s+b#*W_yS^;2j(V5Do9t zF<-&{3`9oTqH*v75>yh?2)=TbC+`p`^YBxGFTVat-HIX zj}F7#&U67-j5ljPYG8)hfJ&JN_P>C3j!v-O^t{v9XHSsE`p!l}{hd-13>*1*mea^f z(MV~B>$Jc!sOT0GxhxxFa}z}mTp5e#Ht!lin|I@E6fUzJfgf*X={U3C;%Hm=A1;(B z$6pa6!N|6w?!O~uw`!oEB@9@HufsO1- z@<*c$!`-*WcEYWe35@}q_c|#RuPkX)gc*D=Ttc^;d@OHWdES9kfbM&un#-!w_mEv; z`m4oja3lq-K-8BF{*ZlFozn|ogM3##mIe2BFcJh0xoDO?P13uaMmfY5=sDX_Lmfid zVl9-xQ+5w7)Pq=N63GNhX|4sD0vpLWU`O~%{;x=&QR^4)`{ljyUv5Hucuf;=u<>R8 zX@*xyXjoMWkOj6m$a46V!cqvI3z_PX&(_F#qCkvlbb-EmQn+&`g28;$E0Gvawfe>5 zY94;sO0WPoSQfS7a6J62y5u>B{Qi`EWaKyOScm-Hi=`qzUX)}hkBxabt|i8;gXdiA z80Yo8<1v%5mO=%^5zJ@wMWd00vi$R+$8NYViDwutEUOiN-W$1A&NGZc5PthS!+Hcu zkozU|by^ZJ6yXF%gs?``JlC)~_1tpUSI=u3%k0Lf94-J(pe7ta_P4U8+wcst1>8M& zZl_Qde2ge5E>nJ2=4Q)pwb}}fA}k{c>{k?EM{J;7bjHohPm^_^7q@)+b^)B*&V8A_DWfYE#e`{c!{xGBZFS8-f3%*1Dzg3_Wd{WrPRF4d-y5xayEI#3Ow^)g(WjWEX7H| zzbwNdbqiurkQ)4eoiwN=k(D+zsKIu{+X)2fMr6)?fQ!W{`EbV^3Q6z}ppayQwjeV> z-)KPjXoh;a>~=Iz$GP0L`6QX9$#531;b1t!G0%U8h+bGZ-jUC9(;W#N40m#R<#lUT}YaFOqt{9^<1qID0{G_>nl39Bq=c`#a;y1xsW~_Qpic)C8ipiZ380>nJ z>@1$Iu73#-#^H?O;L`B6#O}E#ya5Zc?>J9*vnTK>n7d~YoYj0PFb&agw?QTbsTbkG z1Dm~ddAG}J>Iv44VZo9?UxXJ>H~&?5;;(wTZ?d?YC+x{E4GPd$g9ozlg&=lEh|9+d zSznI);__4eCVB*Bc{}gFM0kk_o^j*RY#8GbI4+GYT7(*7%@BJ87pec^b6HX^?%t@U ze@CB)uV-PO$mKnYd9x!iBA8KU?Z9#O*EDGK%b8?yn?tZaT4C>~`}#qqj}C`S5BJA3 zmD>?IQlf#NOqft++=Wj`Lyg6#3Te>OWTXA%Z(?!o>z{A$miv-+_<5eNX7Oiqan4ya z9mQ>tkj97&;Wvza9~r$j*h{1lyai1Tzg63qIy-kOAQ+wWI_I>(E z#D;u6vn2)Ab+#flXkh~KgIsh=L1MV%OX4SEM*|k=FRdXb@g_Xby0DeMs9nn!)-Ehe zzGQh!&k<4%%34Q4$hY1}C43)@clL?|LhX?RW3-+vqKtt(wgM~vK>5|a0Rzc6SP*^! zgV~ru0%=`T$aJY7TqJUi6b=^^Fpo444bEgVEkXVr)?&STnHZHm;34J^{3+?O+fBABsF%b#fjT?qgE~7yIF&t8 zi#qTA8tY78El3*Mt+#RVIH(3$clI~$Q!%A81mjm?ANL7N>73oj|4wWf?N$xoMfFH7 zIK@8z9|`-?k#G+aX6u9(TZ;D!$;XVdG*XY0?E*5T7D-a#k|6&>|xb?4^HTPLZ`MPC?L!7GB&!Z?mP1 zD}bkuP{`bkKd~!gH{h#ACUyq@4Y|Y0O)^kbh@$K)o2Owbf-fXEMNjtFdXszka+xkl znY;Kh6d+<_@k%>K;T+U9ixqW^{n1M6jI`K9vn%rrU}YFYf=u%jdm<}EmBIbrlM#8k zE5D*bX-YRVC3dR7*r6sZgyX?aXrTr3qbOiDW^6C3FHWOx7Fsdi(Rp=8`H@7ZzJz5I z`}Dl1!(3=X)7lhIx1$S|Y9+}0;W?0p-Tx-d9QEYMJ8{r{EQ-eln~X*iyG^cnl5^K) znFecBY{LVHMo5XOlLREFf$-KOq$h96nRgI0L+}v}VqNWc1OviT z;BL5g5$*uy{JYLsUn2%F^Si&E?=0r~H-VP?dge4{p32PG{Btb-&?Ueeji=ZjE3w=z~T<2A?_y9_Csn3ks7+|Q-987LeZ1}$v}D=kL} zH3c|8*qRe!{@8J`wy_Bo$ZiDLoFH}Q+`$lHWib!4y<+J}0m_(19caS1V|&!Y{MZd26X8i}-Y4scKxe+>AkJAFg6tOfIm3zx+|-!$ z2TTWe(hltIvf@Jl_5|GV^vt&)>_|MX_hF$%#4wK&*ZBubKTfU>;Z24xZDdK?1Pb7gSH z=fr&-Mvx0ysl>Z}OWiq0BHhKdmqte-SmETHb$qD)LGzQ@7aijy_SB#ULn5# zd*^Uq3l<9Y?&(SFF+v}j#J^}Gu!pG4yM5;h2}Qfzggi;{MA3=8gfZ_p8+{U7jq&)r zfu6b0!^+SXlc6_~`)tQQ=KUl??Y{Q!rTc0kvRh*#MB#y@*kgS*+{X0$<6W4(#kv)8 z!Lf*CHAEmRk0swa?&sIL^eGYnW1mD0%>(hmK&u!he+$YOMs5h`i z(<6G4m->?6KcVL2nPkVwTm0_>@!0uZxiMHhgcroFDNxHng62B*Uw@dXKjf%i?gN1i zz*kjzGI`QEWcMf@mW=uM#(ZfST-FJ(w%7 zx{x2^3pf%xR6k}4>rArag3Kn_KYk^Y;&JTeSR|)yOu2n=_JI()Yk&r$u-Uh0t|l_*jx{-fmIXy=!q#y%}j zX;$HnddXGZQ=@$A(kP;DqW^cJcxgDsc)Bw6rn2}97N4ezkDi+xKlcl`AlmmIJMp^B za=~a0AwKmGM9JRjLKIi$TQHL5e=@v{15?1eAMm((jc5ZPKb@Goehf60H{SHuHfgVv zqnWbz9nZ>}fCj+E)!?etuV4jFdzs%<*0D}}M({2KXFRC3%)~g^YY2ifo+B;SVRJdu zq}CIy+P`Yeh;b56HE>~Le``C=Zd*NXhOM@KY2n$Th5t}b&z)k3SS!A>o zPN}>Yc?-)TH+%Ft!S&p_&*^r=)5U%2132K-ywB+Cl(&bUL{ug%v8!?LOV`M|Z*l+K z&6sm7nHZgxqsXigU#>xcvYQ zBkOxVm`n<}Y)4={ZoCz8Fuy*y2P287l#$y(I_vG^=tB(9uHz~f0iZqDa7=@R+!}Dt zF^K_pA|_w%+op&1Bi?dh8|rQeP;3t#qqC(=$ttYlj~lQ`%I0Ne_1)-5MK6qQFX z?)CCfM+Y7%Amb`mK)UG(@x#c$_RSoEzv;ed;SVH~*vj0kpfP%GZNM-8@tGpNq6Q4gvHM1)AGMhdRJh3mUf*-%Vl^#;)|NhloV@{W5et{WAG(9)y~l z%J)>tdvzQ#30cTMWE1{X(|0SpSk8di-ZoA|qSRJ_qSWbQoKn}g>H>p9OG zy*b+(?GHv)nw$B&G|O^xzDn}Y(eEA;tQnretF+JMrK?p?Jbr>xlyMmb%z zwUGyV$4vFWz_wR%wM~Z!B^~zzVP5I;Qg&OxS4+dYc{1-22a-V{+vD+IY-@ z!KU_jSnYR*aA9m(d+Lep`>kC~c-E=70YmEL8^J%dUJknuW z%j#^>w$2*@?;yW3vouKv3E9>;ep6wEyE9wk!2Vs+)&B-G!1fW z291^#0;w*@g&;2v444D+QA?qib=f9Jj9jc_|F_G#;`pN8`s^2QSv?iK;SaFt8=)D{ z0qsdtifNhwB-n;>zd>?sj}&tR{*0c>*A0BV4B%7mMR6^AtWy)LR2u#%fKRx2gzHQz zt!>mn5`S<{(*q~eP1dpVkBES0!a!7;01|BpegP%JB4KR1ZsJ?YeYTqTF+w!x)X|G! z?p~Z*PcKk2eH$D2ZXtfi6?(#H@PHmaW$yYJn!$%MR!uOCO1gY){)}%&)brUeoz(8R z%?##3|4DTo#^2T5^hxk`1)EOICv8xDV=%`b!CXAJpq>W#TG|MJ5$RYWn_S-;-d!5r zZZ;#uiJNv}imKT&NzlS(G5cIQHr+QE!H;3(<)&3(QDjhB;MGHcpHG))E=HftFjQZk zC!uxk^`w6v-{y@D%8Xr#zj;uPqJtX6`r>a!tPp?mq0dDIL9%&ua4aA1g|R;X9xgxZ z_F@ePEn}JZo*iqBzd2TXhBns8pYEH(9~%7*8@)G+tvo1)njsymKnM8`j|=1hO~!MD z>zRlLi^Vnt&hy|`W;nSG=6Y$axPj=oK0bFa9cQq|Fp8;T2?M|7)^9$1_u%E%coRHY z+>9r0q{Vo?#7yOuT{$>ZAs_O2st!-|zR4U4mz>sv!D9x3*LWaV>7zkd+TgZaYB3f6 zFkE0;hH%t0c;w@@CE#ssMnWhpjaC|`4LWGWnQ z-oY2q-!|~Uf=}j^Lq?*HM9}LZqqzIllJJgVqu+jPv2OMBcu+(!BeWD7GNj`T=(Y;{ zjBV*TNU_G!V~)W2bPQC1IT#NwEJY@7!$BG5MR=3Ty>^3ou>9lt`BYQH2r){WdzxHw zTs_mo#cR?4*Wxvo!OFt7$ee-bQ}rtF09bH*ND9BcYUi;y0MUG&2xLYufJA0MtoqPp z8p2?d0Xr_?+rF7s;|;v)Jib}yMOKQqR>zT%AtWQq4Q}FJDOAgmk*j}fqMcB9-?q5H zg$S_@Zdk1*?`a~d40fRRuEz${mB{Uhlz=?Muc*Y5l-8Hf8ZJC5AIb=%nh;!8xT+S& z8BU09CZ}utJMkO;LfvSs`80CUS3YzAou*zF!tIgn+mYsvAnicinvDnZJ>+sk+2BT6 zS&JeMZlvEr_m9G#V?Q6;tQ<-%eUw5*zb39L9mI8|11UWpUp!Ik7w@zfVq0u?Kkd3w zs9%@h)(nkSOgm=5Ty{BWNg?8esUG=kiKE&{>)LGXx>A9HmVlX<@tB4|X`thzmCZ^4 zPCIFZ_k_PtPu(L3vKJI1)Ez{cTFEd%-0yG`@Z4kTCSda$WGd=xc3Elo7urEfC(;B3yU?T8VxYNQbVQBx{~g|$;cJp5bm}5h)~I!C za5{6W&0J@WRqvHK_Nz`s9Uy&Dg2UXJ zw*~`?_OV^!!0GZ$fR%coC{eN*^sD_Z#XhGJFmZL${nP+EBr7VmG;*%RrRw!Cog8!8 zxOX-E%lD`iK5I;jVc_i%t)|(H_k_o0xR&X#(|BG*gX?T?Zvc#({*K%+fc*jn8Q8ny zY9Soj@ax1Qe#5_=TelnX$g z0{ffcf;QP?ox_8C(Ox^xmu>L8-u5N1jVU#880#GC z=ww~NtgqQwNp|Kvcr*W#NZO9K3|PaWX9#ADrKqvWpp*fo+<57E`A zjRf)4M+f5Q;C-k~+NxTha(s}iYAwFn3|*;PU{o#DFi>PKn>z0rV6H%IZbE)3Lt3MI zG2B;*bY1B;gwR|qvU3wONl%rAat8f+;&1T&EV!paE4ua$ znx_xz{Xk8+uZj@#%@9r$f>{hOsu1<49(HAtV-0f1eOd9heXTvwYhZ-iqqc}stK8@2 zlAG>FR$+;A@c=g}_$V!4TSp8YpYlTR0MLbDHr&j3xS6jb z{x&Bnk)Oc=y6{xJ)Du2H&Rk8M-=gV)M;JbdL?|RRGutX0Q7`PCl`rM#pg! z9>bUES+Njp#=i<{G~p75kqFCij7*$zTiP)8U_v@|@2|q%$Mw1_{H8a&(G&gw*W};; z;$qpOB{Q33O^|$JxprUV$NP|IET5fQDZkIip($gz-V29lo>vT)#Abz+Q*v7rR{C;V zA|9Sm441_Y^jqY$8OM}{-&T2L`>{Z_%;iD0htYN%Y&gI(4MmYDYch%=zBMfooKAX$ zZUw4vL50>Acnqcj>FQr$E;VZ_UKFj;2z`v!@K*L5PxMK)ur#uaT+*{Xz#q7wKz2He zAP6Iwh>hkXot zEE)^r*JJ=Zun_I_)GYg8&TU5rzAeC4yf_#=purG7u=2EoXiW*i=^%yjQjIcCsK66(jBT-Owdo#8 zQn%qay3S~{?vo?KVmB~Yh3pkCF2G+L?OukTbpaW2Pb9!`_Jjj-`4j1rN6gPfTX8)J zu70uTWqqG)EtFgDB9}jz!4l7ix=-u*2`eep15C#j<>*;#3KHrnk8k4tK|)nwoK zy16a_ph0MdY3A@{Wy&@FCZt$!dtYf{o`0RykZ{n4Z-~x-9iE7^ zpXA^%vW$d``QLfQ#=Sw<__Ec? z2DusMVXPNymT5}^0pJ`YPRLkaI`Ab8eX}tg;!A1d(Hc|L8#n~+_OO&%ncEq8NE8n@ z5p}04US;wHtuHPP_a787FCubluN4ci{=_!Io_ zBL!A?cYNrz{Rz0ugrk+zd$EZ+V@&}7CnVK)$E}xQjkkFNm~EYm;khV@a3m%eb!>12 zyZ;iCQ&ZsaMrbBlpK_Lw0KPI0g9P8_zVE2A@EDr}AwE{17^o100#s@~pf7ei2v*N! zq)-^1n(@;v;A3LWUT?gWzlAr_gd)!D?{pBF3_&uKU~?@>!DPuguf4Jf;z9U}lcvV( z)#Oo;d8EpZ##a`i^FFh&v1l{g3|#Jdj`kKl7?FDN-L5)lac06FePci3j0 zWjOCdY;|IoD1@|c0rCc!!p9kX0FC-!^;+)BZN>l-&9TsfBJsC0w-x4QOVprooyXF7 zu(9!mB;NBhARB+K%qxZ0dwE&-O6=41D=Z3MSqzloAQk%W4fh*ZR5@U9QRVcjN-Fye zDXAQAby4N*L(RLOnJ2Kl3RQR_*6N7P!jB4~1`-RGH^kD^tf8+YB0L1ka$a}D|JdsZ zE6*yG)N-~KoblX8mp*PYWC_!HZ5iRleazV$?T%)AR zYu47@cx=32fo{bmsX*LtvF7LLR(40|-fv-%+e=-VGCHB<)6hcn@+O)2RfWOzzCXAm zfk0JJQllvce6Pmg)R`0_c8Cz>!5COeBF9w5sRh3;u)gQunTrN0UyL8r4bQ6CvJt}o zQ`sOm-813@A}7KUvx}{Y!aKdIzQG3MX6bS>@2YJDWzAkMG?vF#?Z_x?_F>Vgt(o3t z``MslR_(|xZMNQn{GMiqJ*&RV^ECU;vuayDtHBq~T@oPwP+?@q-sstMOBzjzxQ| z&7xBhZVUWS^E@&R4gjfGct6VImqkaDU*30Nf4joja$aFG|P z_a;MygewGVj&_{i*1{L=Si~BEzj2lRIaD$VS~lDy77u6nGIv9_s3J7pEJglAa!tv^ z?1;}+Z`M;v3He zCBx*Rx$;xQtg_Y=f7?Rn2d8)nU*`_48&oy?XpKF`F;Ors5C1!SfieV~L zovO8pjiH0};(soNBiLN$K3^ol|LX?lK3|J;d~lP2!)*weLFObR^~5uPc9Z&a-%bFx z`^?e<(N+(}GDl5hg%_z6$b$RVEd-*@3s`58KbBQLtyX|AP3r$KW{UAfdz3V1)qt9* zHtm9LKMF7t3a7qr@Nz2L@Oj3~bO$Ztn-OAo?J|9tW$GOW+yWThL2LC#zZ{~HX1gKq zK1xV$_QqU)b2}hmwVSDx4h%5%2P!dcDSbk&4kcn>@&3xbIW{D?EfA1)TWANj1-wxb zK+pH7A9;G7%!sF4;X?$~bpgMlC31ijO;t-{kPQMqxA6D%JU?>6&4{kheFskmiMd;)v>79{o3$ zMqi{>W-J#ajh-rPAOqATuF~m}=xsz<^{0a}#4W+PMGl^gDw0OGzqh3CKl+z+x451y!e1Gh0m z>qaJtLqMW8mN%0EQ=|YQ``?BKc4{nsQ=`QQ@uY%-nj3zuJr?FE$Z@2d+CL*9zDuVP zBN_Y?b{}0`d#yp>0Iqy_n+Vqf>-va(hcd7Pnp|OzwDQSPITct7qgLgf=wFFX?r(UE zlGlm5&>GnaeGQSCx;MeG&~>qku=K@Be!Z&67`(X3tXY*kcnyof>xwGANiPoX#jMLq z=s=it=fs-F8kdDnk2Nd{pDi<@|a@QX0qsna<1Ls8&s7d8{f}0&PFAHYbcr zHIShg=D*{MD@WyKgAWS;t=@K=4s@fow^x1H6hA+%`X-~<#%A!;u2%b=qB*-b7q_AY zC2SI3z}0lHrqW0*nCwC;%orlsqY{3rAUb3#HkdnH`j*M<*kCRz1s@-bp9W|Y4O2#l zzE6mF!*5`)=t?GN4t3v&y6q*vKcFnSggh+u{vGzjSv6*VA=iY$YMCgWBy*Sz$_R2& zS*uAKMCH=!3NCSyW=CgM0hBi~hd-Y1>(~SH%s4OuFSllRqZ6T_Tv3Q1CB9~!IKCan z+oBVn`{Hwde16T>#1ntb6Nb@ri6HvhM7JJYEdHc+xE9}_gEX1qj$iZ{!7hUM3_;fj zYGm@(TUmF;Bi*coY7F~|Tuts?Sj(M-wFFiIx$~7qF}d`$Aud+1w^+)P*VPd3E>4Y6 zKc;|%&F^tPFV?a;uo+qj7%|V0w#GlT?$+E2NL@a)`a9)GTB<%Ti@wZZ2U$uKww?{- zAgd9oltD^)X|CK+EOb!dv|KM*PyAj zHfk5^jasF{vg|kdDax;z$VyuEJ%JtnploP?fb|3CP$9naU4HSdO;3$~;zl7})8upG z<>U0ee>peyCm~IIc&M%NAInQQ6sX`k{CkKv$;aX4?ti%&fjEEqz;pyl~alrqQ+;(XJUY)}^K8 zq|JCeEggTqi65@M5N3_+G^6BuGMTI=z+@twaY1!)ZX+tfe4M9CP5`=|G!r^>FZJWbqAC0&az`+J!su-&m7+yxS7vI%boW9^) z$A!p^o}q(1)#XUTPQNTA82=Lk`y2QgW1aM01Z)mQ#s>aEJYB~M{D0zZ&Qyuhh3%}h zV9%GY#hw;E@n41KmpkcwiQqvO4e74ac*olYd>W0DsTE4I3^CpxgS5z`*0@Ya3&-``*J}}BJ+fWsiz*{ zq}P6U6w%UT03Q^Ske)gPs@*~iw6l&`w+Dx}q~_WFZVtcx61V)O;@73&g9&i{OHAIK zaul3#2&^*6f=UuV-)$CqO!wcAnmyVR-U!V{Z#j9JzS%_k6f$_IM5UUH2L$CQZzfA0 z^Bg;cf`;~TeqLC+UYzA9YmLPm!HQ%tm(V)Dz^Y7YcCY4-KU~v)FOP_i)?C*cpT)?k zSZ_S?x$(Cne{CHn&$CzMI@a;~_x`?hJiLbnj<0SIcQGK-+Qg5+R^SPLo|-I-&@_Ig zFu@gbU5w_5SSsp}t2Nnj$`ky@NIT=+8(bRxlKPYiK}O~T zCTRv5R2JR=;YFsJxeR4R%%nH&yj45{M2U*=35Qc4s=y0ztKX3+GLq!zjtx&^Om|@xYD9t^dd?uSPDW-8#2;$dDX^;n#w}OdzT5U>5U@K+0 z<#$S8prH-?(bqWvy<73de_Eo0(FySj^#%oZQkUWjaWA&<|E_fxjFa?Lmd7#%7vCo0m1wNj@3uO zWA>HTP`F#csy9uLgJ7?VYjy z34AV%j?XPe%t3Pe?z@cOn+(SjX_On7l83lEijNUr9wJQUNe~|jC8fBI@y!PT>~)Z> zvpm2KOp9F~9L=RjMT$!Eos86YRvdA7%EE^%DG;&we!|M!V;{Fx5{X|j@pL4XhP&$J z$#GCDSGx~`lSX@a+sM|&takR+#$%uCgoT_XT$!tM=Jq=C5GV5_X2$7?uDRM5lBA?g z|B#y_=F`AAzi>{$`R$}#2i?=vydR(Cle0oFGf1Itj>}80Tn!q6PTbiLaD7{L#?7nh zE~XtBDepVgnkVATycxvIB)tbAK9>{v0_t&+70WPNNcpDSTDkPGIJYx5W>&H6pV1?e z)5(F!p%9K|1V2DJr*}4TBK`+LB*_ta-DB8v%^Pi>z78L7i@-*PJ(x!D2WbKZ^lTR1 zjyJ0@aW!

;gdzq-2<8{?Yze8)4=-0tQk=9T+tiCiQ^KT`gWsOOWo1nmz(LKQ=h* z79ySGrp8=*FmCq$HRxv{gSpbG0wPg?$U@Q<*}}5=L?Wa`bFKyTh3^$jr7b_UtUQ&ggCP#x`+>4 z9k>4-Dqoe9b=SqcJPR2n~IPQl-H6(A_2>JIOAf9KLxs7@Kid&+uZ+UFK1 zA1dT7PLBEno-;9zdhjzBZ6r2yptVW-7a%jPIyB~aZNz^`Qr`~Xw4m%@?ZpGfl3JH) zi1x%TRwV$d3f-`&rDd%}R`JiY;9rAnjy=l2adgP6+Mm>|yWLC3Y`UefEx(_wm#*|w zPv8Z&ZW7DIxnlzbjs3?%SL&SR>mUi9$fOK4|0-E;2ktM`YHZY@=pMN68K1*$NzuJKAY#V&)#?6uh?fXnd>pmUWMYc$Nt|i&VK&4 z-)fwF^vn9piT{_4vrW(~a2?w?`{9Mj#@QYBrZ&#LjdXJ|l!v1=&W;{iQyy`Iks~wC z4%%8DHjmOc`_Y)XTa#p*-7^388)qNbVz>Nv8fQLZAv+egOb=o-FYUpn@&i?p$YGpq`r<8I3cZ{=>{#uW5_UcF~ z<1E8ZQ*8J`^+4gHHO_uGs;&v(`|lZNZ*m)FyWO2I&h~N{XXhr{WBdOir;uvcWAi#$ z3wj4WK(eI0GnGB|p}iT}eI&6y;)JZ&W7oX?YxdYz^Bj9DB$CdSO;&w+PiM`seoCUNvCd_T9nT1;|2<=D*_;H9{(mvX_H>M~ zh`&U8Y(aJ{dn~7=qj9?ovYlX%Z9|FP**U0TkZm7@>o86l<`uy|D7%3_2OAK%dDwt} z8)USkT~blCXZEjKZ?B&7+pM>z;ez5+_PHcu>(N_pAH23E>r4XpTdcR<<-cyd9W**& zy?p}$7;WBEw||rMRz;4`dOM+clJz#f|F13dM_|4E^poGW&}-{$N8C=21NDj3`8!xM z>apGi`I%ZLt+%`{xGwAM1I(DxdaL72{095&Yb^n?4*Ts7sLrzA-gSxCZ$CBN2BG@w zx2sY1zhl2`3rPPT*>49HC);lqb+GKWa#;WWhW(ZTg}LPDY`A~Cx+bSdvf-|UIGV8G z@{GpswBhcdaE^w`W_l#*nEc7APp?l~AZ zx9N5@O}7W}$DO!@iQnLlV-|CnXiqZ5o_oh3grbRNJ=f5-=YFszg*|t#lFX$#^Pio} zitLAH_V@>g8u zI>#<=1oul5V9FiI!aG^xTKutE6j!tR+V)&->i_rcxu1z=pJmT|`r_2~+`oDM7wox@ zgv6fv{{La^Ti~0hvj1D!LO^g@q*`A~)hI<#i=wsy+CZTxv`__+Rn+=MQA9};QL&gr zn2k|XTwU?Ot}j#;aa9CG1qE6a1zq2|fKO%!BKV+1l>EQnb7v-#Hi7E@$45JvnLGD+ z?m6e4XJdMKZqBh-pg$zfJ>;OY^4tItkPqz~0s(8dVBK|<1rReXnmH6{A|183vw{op3uP_d(7qOacEf01+XYuz*Lv{j)ZzGZ zxous$mt$R<-^RMOE8>7bykM-mg`(HV&`2&?1It{*_HKsj_!Pv?Q>Fxg3&_|Mxia3t z$^(T!M)Hk+;^R<%7!+O04Ie#Qnb`QqU_l#FOrR+?9$4x=)p_|+MWuaYF-~=4Ozi4T zM|CuP^EjqYLqY#23g{3VfM3e=={Pv^_m>2Pfj2zS(Ql+RdqUfAQs4luY>2BqGP{y) zlAVHw#f6^e1jp>D$)~>q`v;>kdIQX!njp&Wm=iduvV4bR9eNMi5>(`4TH9?d>z;15 z@sn!H$VEey`nDR(Oi^`XM><5*>X*RyX(EiDros4W1dN|1!uSbRmc9|yaC4*3%?u_3U2LAxU zukdBJ#3584-INqfUYsiQx%V!X>PNtR6oNH!+Svq)T57+%B&;3*x4 z4zB>2c`+MmLonmep~1q8;gpSYMyRN__beuM!s6q(Xvw;wH1Suy@zMaMo%tqy0G1hV z1+-V)yhENL(Z(ti1e6E6V=lX9A&xTw${34I1xDyLB%EOEj`haJPoRqMH!2EFoiPQL zX9T`tGz!I!8w1SJ7FCVQ-8rBK?4xLHh4d#0Gig*IS}l z(HncAowtYckHTmEW)%EmK)31hMAfwG2gi`Ho+!X?F7zv zc|4JYJ8(v#OR$7kpVkso{10ow!Csl=T5jd)&5*44i7wBH%--Ffj--3Y4N33rO8ra7 zCp?yucO_OmH_%Oac_aMWD?A)MP3@m<9Deh*W_Yr`zx=CCu>l=o{W{R<){`}TO;$Gk zewWz#L(lM=+K^^CD&(WL>x~C)0@ljUJLi`IF)pSJ4sK7eZYdZ?pXbTb=wi9t-6WSe zpYYNfwuoA98szjA3l~}pH%fVY$$46cQXch_pYva1Xqokk7B@7?VZtXmO=<<96>^Dw zfD0zE2QGT(8~n8+AUMml9N*b)?~#XbBg+LRnfp+>CYpAgjwMcq+r&EKu~ok%WFmpj zimmXyAQW_*vnmaah@assm-0Ne9hGPq5w$#(a$y39P#uSlu-D8AvjK+{so$y%E;JIR zqeB4E4AvWCio_BAw94osT)0a8yU@E8e9;Y7a0I3%3<&*v2`{q@59S6hQOfxK2GV|I zYs4TOYw^CO+z4vb`n4VeEr-vHWIXc2+u4vhY8b25G97{i5Db^aa|C{m*#1F;PeoK3 zPD@wg%eKN_@fD*EC^hHOSx~7YY;!%d59|LMnuF` z_1q>F7HBZeBGcW^SPjNUo>`Hd2BSCegZV_w{N$sbcYN*7p?#&kQI73yC@u zVfDs;fH!YML7QKqd*@gyUii*Rw~tMSTqyFJjeYSYds7PWPv7^A{W@U5X@$?JEu;5K z^JiBBZpGEH8<$)cXO#8VqfcOQB;y{|QQ4Ydl~EQf6_=XT(_rFx6mXFs!J4( zLj_zBFNd-CB{%Jp@i4x;PyBU3NvkSqqH~EHYoZH@=(PM!HF__tph2GL*I`Pl5O`oA zF`t${Q!WJ!>M{~9?o+6=s#wb(2{!pWY^9kSr0lGCU-p{x-jF{XWWyNTyNNWj74{q zS2M`yIB@wL8ULzNbOww|MFm&Tz*AkV2(YFzPt?fY@ zO&>od&Z*=kB>}l;nTYQh??W7A5SgKqO^(8(WeVSS4~$bk;MW$!Q-3V9jMYS=a!K`T z!%3#XA03s+ugxDDjMu~6er=VC@WZtsIj*;YvJq|Di8+6v?ZgV6hlt3w7*F9n)>R8D z`mi4Q0nCeWHy)d(iS5L8iQ(rEKbVc$l#gSz2wx|mdq-C#U0LgiUhO%E{01+w^sdc8 zXj-gU{L5>ZXEE{yJ=zAhs~e9)N@GV$NbSZnR6+}9j(xkaAb_#!yJXodmM-ag8wp`$ zGH?zENN#m`!mFyw!rMvwB=}U?9^Jvg@eyr1EJbD7oX}ps46*qI8s%c%oGNV2E=vnj zQes)YN5gN=5;$J^_H16uTR;aH?bx<_-%6+gT+Y8nOeH)h1YiqWHq6S}oA>#6!Ts}z zyw5v&8$^n@-Jou_^ivv?dit@AmpY(pXuwPUP^rY# zA$6%B4Vpv-gdL;_@)WW!SynG*O08fYEA@?}Qd>?IwTS~n6cAFDnwFi@A}`73YGGi4 zYphw?c5R%x)}XNY7gU%wB$Bn0c!2L%shjO_Uh72XHDZ#n*AQjhNMr7G#_-D_C&tL@ z>9IE6uP^sEf2vKV(Wv_dU&g2U4e zNrior>1WJ0bjjan2Ylm=xTqbAz%!Jpqo?bQV<*Oe8n$cU<8c13j!uJ%+9k?G&5@_u z_7GQzf7&TuNYEDALm<5h;&x9%u+sfKB%wP&qY{PP_#1p`3CACuufiz9tu|uhVKus- z8S*)kY>1@Va03@ru`f0cD|qY2NtCZxp%bY4MGWcrC|j+6f!1oHO9f!70j~sH7?)~|zSN(w~Kl(1wml*vO<4hidsMXJWn z23b)$_u@!l96pFqGw_Q>^z~qYajZbysnrIqQwx?IoS1gOoU_e?Qulge&3)LNH0-|( z55#XKgdgymsTaQ)z}tG`b3f7jXs~=J81Vyv6Z*gasx2qECR-zs`4$o}hUl9uBx3N? zVIz@C0S9PhKM8*=W{t!r-2QS!)q+N1d0P;mm@O5_>%3=5_k=za`pJMk>RwJ8qRJxq z;RqP2Cww@zM&Hq1e;P#c7!7{M#vtWC(DML`%=X6H{xpL~w3wVJa7<0KKdp$1%-}Wf z7rkW~@R;5*>?q2fOJ|ue#rQLV(#MVv(E-i&G3g=u2N28Zf$0$o(w2*;3fL+z#-;H2P?%V zDLZ;R^#y=r3<8Tad-Z+e(-@#3u%cz*B*DF;%A zB0S?{^={}=o3%T4_D)8TU-9E7A}T<7)iE!!PzH{eBHfDk*~W~ zKW5pe$G)OKzTQ}mS&6>`hQ!g})*ENP4HOs~_~JUz;QsP$ft5LXpC_P{Eprt-P8Gae z6rqB zj~(BFYof3Sxr^eU>8OgUX#vh}cqf3fBTcsAR-_&)0jNB-B8dxr zHlBhho=vQbn~uR5Ax||00>-9{%lbfDdVBhcrp70$!s;ya(0B+?E^$A(jZZ3!SD#|! zuiqSn^+w~T0<_dW4v4UZB|{JNP7eDJj4Lh{WH=>ZAM(I4kkwr--|)=-P!zXk%WYgD zG{S+Y+3?%}j__%_!>!^0(4V9>b`y^LKNxG?&jCC9JN-$L?ABAe3NWwODgVR|P7E=v z@jT4Z;x)$hCn3hzhCfyppy-~8Vo8CyM6YOP)-8?9OPNE|Eo#Q5nbIdbYA>d*x zzADCbyhVIK!?hPHy@y|dXSqCD^n&=KBQaEos){NdPvy*uyg9}`sDt70y7*RAU6F0x zi59Afv&sI2aYH^CaCKR6%>-i-Pqd2%;VJ$#)Wqt~jUQ>{r;GM0fs0};={SamV}|07Sk+04IKAjb8Q}gh8HaZ7}jPwqytP!QY(VM~f?1>rH>n4*Vzn z=HgPhDbEVL8h?a62gKe87ka04jvJ9vukhwnH2e;A#B(Um$(>~U^QRW!W5%*b38w^@ z6s!h*jK{T%G0z9cfeW*8DkmzJ6E%Fbr?V%8^6G zLMMzL<1HkCiNflg1+CNb-L{G})fat!6;I>k+mQTY&<;O>uoP)k+l-Pvt&IO7sL~1L zw}8i!>c(4>rxb*$K7>=|r}5uj3*?ki=O`r*7ckcw@1M@QHf;dE`%fUpFi}n-lfZc- z1Na5nmC)m<8664eOghrDo?L)L$RqfhD6R8;2p#@_vRGAXLANC2A;B*hFg$`7IhvIh(3gY+2>#zV&rcen+ zgpe@qy+9!ZAlY3A7E+^cW0r$wHwiWfcx!l$DDyS!$_c_3asmSe<|rUREx>awRj*lt zssM%p=mhx+{wg6Ljs%qNP0*|*ly~Jz@UQ?l^Z@l#&J1`Fju76Uh6i;(TYC@_mZDVt zstO>4f1yRW^G7QbRv@EEtN??6^MMt%0xNtUKSjt#62A|M_A4F~9bKI3UpyD(@vni6 zVx&NU& zzUU0u5r(Z|K>tgzb=h-j8W1`Fv%oEjiRj8bjLBrL)X=EmK*?g1%xB5Hu-o+sCHn9_ zsnh(11v{KLtvACSr81rxE)N7F#dYz$bq5zeyJ^EytuGv*0>)CMg zHdNEz-W`##cLO>EXa+MEJ(~vRMO zgeyjuj+UyUttkUDOazZ6WsoJ?hHSlPAr+c1w{qGGR-5;tlJ+iG@K{PX6p^sN$qs)t z%37{D!RqwOrJ^oiM$njweU5Md?fQer_4Yc>i@>nJ%%(+;8Kwn5Bz@~XxqV3#t$udeO3VL z4GC|eus8Y=houedOx7C%V2_9M!?cH}O~!}t-R_L{PQ2^Xc*P?MoOs2~&_4T-+;GD9 z*K8oB6H!kRncMng-x*XvPTzbVCroeD-|^`mD0bJkeFbs=l6kZNLld=z6Sh&<4j1=< z#p)6)wz**=hD^VJu_7B|L6Hx;l}gz`?S-xVkB0jKDj5q=iVI&g=6dbjV=>;kS*y1o zp1kn{j;LfIy_9(6gOAJ!qR53Lv;-M3|8;Skpm~sQBJ(AF6pJkD#Tqi%HQufaPtyyE z#=V8fX1D7VTe=waaFq2%7n6M5MQUsMS%e&E9j-}^bZ?s@1&IQ$>7a!qYbvZF>ZDBU z|C~4Fx+byT8#OUV@YvB*2KCtwTM`JQW(NpjexS5`DOl1P{VU_HL;gRw(%>Tk7rW(3 z>tSCo6HA9E;}+ z!(uL;Z>+jscvbGd(?7uR1v~nHJFyQJ;JN7kUFXfv<|*VaYlOdqV1^l@s76?b)dT!^ zxEBLG38$9Y!b&BCV8h{gC?ht?mZUm(?QZi7Sv!>arT9P7?a-54$|NVC@(>_eOIynm zAIy}d^`>W0+u*;pg5Wkup}{UYeGOLmqph>+sMJRi&4XKt-5RaBHQq)X^+X)D?k!CD ztR?^&j% zP(vu@mA>MYfx@(N30}MgB00`N(ku|ciDL^J@JI+mI*X+^4%=V-b@{GeTrZ51=(GqxTESZo;i!g0bwMxp< ztix8F(S|J8pd|}!s)v?p(`i^Pgps>t;^}da6br%eG0HSHMn6mKZgwx?QU}p@?H^x0DeCFa+!e?%O z$L2G8+@bhPVFJ;!T=Xn{jBu0jy)2e;?#^B8w$ZXTdf8o-G$s^-5cPuFf@EE}? zIjv$J#ZSXNq7ue901RSksgWoZFUK?KxUmdH<3~ET&+_&_Br)wFk6cuM#1hZgmm8;` z5ai!?C;8WEBP0KMdq<0Zm93-lT^xYoq@Q2upqtmCo;3WcaIYf2fXXQL8c)O8B2io6 z=y_85^n^jN!2!dz&e(Xr&5cxvyZ|DyPH|uKZaG!IiMdIKX<0PIcIoOvXCl*T9dcWHJ2bgXFXD%!?*$Id7wVf7#-AJRx=@%`^Y>YCHOq@<|KRG>P`HTmK#S@E(Kh0Bt%Up=(>ji>% zPJLYv&rNUIh-c2mtboYM zCM61oexvsE-gxWY&J~tFm>9%@47{y>=wsrAU7$}mht5F1ZTZBs8WlpmMhVUQZUH!i zW`_z1tJZ%uy4-7XY-)4k2nws(@8Sd98Eov628&p6_B&C&8=F>S{NpcNm|c)LIH%95 zVw^tF8O0YOt(eG}d`md7M(>}=YE+WJ0pm6xC)h)#cT8gf&7Pep?|tANvv< z258_Ze*JXIQNbTpzMA~eFsjQRM-%q3rCLEIHlZaRZN%rIjT2?Dl#G33eWNJ)w4 zj0QYb2^DTGGX8TAPn2qnA&M%f!XHILESxqZ`sf`>BKjbzr8RJVb@bs@{qu)*c2O~v zrGK&6Y5GUI0|?1%0;Pp%b`~Gr-i~%gN2~So1Q=CETU8i1&)4vpl8~O^v#d8TTFywd zvfgk(Z!xA(M5XWwf~=I{lkwXWuiTF_S`5ZqiwwiJODI@3@4zo>LSVtRM(M5QuTfHZ zpR)h5M5mLuLKFP0F+NO?fN@iduD+uaR zM~q)=TzRh&pdvUfy3YQCw4f|Oe-e>=nLnB&8XyzcT}p=fM!qnRm^qPuYLT66FY_WR zsTi>g7g|=pc=)a~tDUTor$otx2E0(})5oBHaI&b@#}sKVj`p4aesK&`kfXgP`DTvk z<%`}cbGiv(=Bs{$=u1denKo#XZ{`T7B`22n^lSSF#=%P*UG_G~hPM}pR_vc1h^*lU zAhi_`5~-~+07?a+YRdqq6fG(XpyKMrqy`M>`pR#vIZJ`CU zq_!osu}fjkbHaO%i9L@cugz(&&Ql*%hgOI|&o{Qb7CO|tbt12ACD@YXa%ftyq0JMT zHsNKVX-~dx)3nAAaTx&vBHHtc;)lm4I5*_p)UJvjA@#|dRKyTRVo7XaWz7MhH2f{M zf(RZJ@0t996mL=%93vpqosuXV{Xg*QNKlKpN;*vv$vOoip4WgiPq4NS$aUtlUwTamGB8qn-$)RiQumj9yg$6E;=I0x!G zx6iN~7HMJVScxu_8w>hrP^|y5d-pf7y9aSvXFPs~06stxr)a?%R5I&ZY{qGLe2l|F ztL;y;Xi!4d@10X{RdNoEJWV1@a4|F&+|%I)qP5+4xxo7Q`_cP`7qVvuNx7K9DB{z2!& z)%+CBiC^$q(8@V+Gae?L6PMx6nm(0zcemaobQy&Pn`?2v?Xnj2wkHY1=C&tE&=;TN ztOLN@UIcPIDMy*d3zNJkSOdomBhXjzq8*a$!M$wp+dTgJk?~>d)mKueQ15#UR3gi= zDqC+fUd`OVP>)aup+#Eou9{f{_^&}^;FLN*tDP5tDb8ypcx>@8|AV51--P?4!WtcF z=1CqHtAN8W|ASJL?~kQuz8;}vgQpOmg0O5P-MR3c<^$EM=R)C zjgF6|c(fAc6RZ%#4X$%&G0kjZOT7&!W#qgi2241CUp9!=hb`(b#ZBt4U(qOOcJyxX zWPDFw%kc75?GxUFUM_j?%CA!d-<-|q@kzH*r{bkkq z8rzN2KG)pP4#OVMg6+m}f0KO<)tZHKF{!N$dy*CaC{t~pY>;n;=bGgONfnCH*}B+5 zHqrNeOP_Y;Mz`=33}LX7FoW@G?51LUlrS3dW3DdTn6 zu+vw+M&&)V=lF{B4nV=b0Cy0DemqmA)?-brN`UI}wnymxkUB=BAzzp0+vJP8e{iuQ z|Af@DGP+cfZmV{bH})pxv50mRaX5fld~=B{Jif+``(PuP>+na8k~{`h5C{3`paHRf zMXPDfmp;>^()Po_ah;K)#&nSbE|3W3I?m~p;^pnohTRTO*Em3m`_uq!IR({HJavRx z&SI*jQNfeQUJE-=C#((8Y6TG~hA9c~*e_wTLvEX=H%156a0RF>-PzECvXA7IFlDYoKH&e1V;dL7uNs4?f_aG@Lb09sJpG{ z)q4XNgAiCTIaEqNdD^9!(0}k+9DxgdM6cTAc5LLFh5H&hr z-rJYPcXl@-i)oGoWGLV|MO8dsl4b=5XXw^BDqc2$;yH=n6@>F3NwsBawp0d7KPJ} z!NxDcWH+_DQ)O*CWz`fIAv$}B0fb6;o= zvqN=5yJzQsy;_qgyE}n1t=X9qto`$*MOs8uR^SbBl4~|@I6+whH0BWblA8sC38xLF z+3Qmqn}(S=xYxZd`=U#?@?#Kc5kdRN7~kMQRylomkCgsu zks4<6os2)up*Y|8l}>=Mfn(;&p?LOl_M!Mc0d**rcntZ*K0COv{4kou#?3c!d0P?R zAKI^^!LH&O;s-$obf`Rb6$By@;zvaTB$*QZ)7=JD>=Ro5rut<2uSt~r@T^!GP zRsw_>PeB9%5E|UPnf?hInU6x|QiUeyjItyK?_C9ydNC?VqEt7(2zw^(39+VFjY%vP zdtDd+Yl{|)#S5|HiR{lJv1iC$fG?;u?!?D6hhh(nQJVGOige+1uBOvRH)$WhO#NaF?J~} z@+8D7>HDrl4#hin|9`kSWB<)kl=Vd)rfsu5KiZ-@$Z<66=ny=Y2ezWx=!>nypVgsV zT_71lDOWoL$|B>I%#8sD+cm3%+jua8ti-@Mm^-9=Oe@5+B~TTZTqS`jbxWX1DS<+E z#{$UPlusjATKX@tK6e}rggJeoO2O@F9qA0pCHiLTXy2hCD0+velq z3H69~=Thmy<87~e%xl?fE%F!qNG|5Z=s>2$JQ9@9HOa=INC=z(7|k-Fn(YI@r}Btz zuMi`ruN9$tt|4={Wcf;Q{0{8I=7tsnte(%)m`z+-3vcck{TG;2 zz*zJ1KwnGj_t~8=r*Qni9eawLD^lfuZwDd&yUEEWn)?=z!1NW|;jZ&SY|`S;uEVq$ z5R(zdeH?=%`NDoL`m=W>zT({nTJ)gX>N zyPKRde}(tlI?kabWK9p?!EWsHX7OEzDN~VROKMf5ED@W84jjOe{+?&Bj|t#}k;r9%w>tg&@L>1c@PdSZvHHU_*@+ z9^gm}sxIFgwX+TA6$0~^{o6i&1%9FCVR-(3HTu=?^>UBCOpTtRn61Xh_hs08hG8>& zGPPM1xHUiC%O0rT-bP;@g6A`S#okX#KAmYX#(s;6I4Q$fSb5w~uv5NPe@_B?t+i%~ zGo;t$>VA)TEQ+?;o~MP--hRpFV3a7$BrKjd7%e2-dl#VRP7D`_!?Q2~=76l^iMJnC z1*cw+4&8?XyNC>YJ@^BPYG3YR4?B@B)pMhnu`4WA<-_s22`(|ENcv;{w zd+?A7mp8%Z6VY%sAW_isXtIMgs0s3yV)#^Q;e$v|l@`Sl?CnAw-DaYwK($Tr!TUhN z_?7X~kubafR>lTi@B2^6*k`}q_s#G!?H>qyX`z-!hjxTsf1J0HBJR?Loj95D zJ6Q;(cW%rQ+0eX}_M`UqerMz+r8iFHE%!vPp7;qfc?_Fs2fcb}BuGv+3WNS|@Jh-R zenMa@&_hOmZDx<)J4A^`hFC4U2td$kM*>XLj$DpHDb?kbBla>Gr!Ddo>=^yAp`Il& zC)@BS)N&5uOjL%y)WVx_n}qevk6Ii6qzaheGUKSmEG)eieoRqJ;D{$@b3b8E6GVw( zsIi$M*Vz)W#heZt!Xly2rn(z$W4U};EMFH@o@=Y1DprOZ>Msl;7lJ@ z%vR>&g;p>qU+;jOQLGOF*1e#swI2qRn2#Z~Ctg&*WNL#{K_xeCKH+DuLmYAmZkl)l z^OCBWVeeb`P2S-AFVP_9Fb~~s#j9zHe&VTi#3$R~@Q((FXIi9oi=|u4sm3IePbk?50h_-%xR1G_F z4LAcrUW6=y`51@@GiuLetr#t*kJHG*9d0+^g1d#d%zQu)g7%`CR!;8=cuZ4$POUF0 zRw9Bx--9C!aLAXKb!IHk2EE6FsGyL~abFvKW+5g8Y}8^d!Sb(j{IU6}2S`yI{t*wM z4)#Mw^uqZt#SN{5=IV_WAgT@KG{9#?!!I55Xv_+wPayIFGg4Zh{wlnT!~ zT9^(o2qUdUUc;6e5`9K31%tdnuzS}V(ZBbUt z|59j2Pi@8o+`g3Ekadgp$Xi9~U}86k~jUIw~K zl7|=X!`o{8#aYs$gi$+F;hD$~%y%p71b|W4>9C*hPX8|@H9X@HTJJeRpxb!mbqZ~S zWll>`6(cp)1GYo=_b@;G5j8DFz5LhU?{)_+X{pI$-gv@9sDIbgbjM(2JAaP8yQYRl z-N~s@SzHswHxIj~W**8Ur{;cZ@N-A(ZffqDVolAFAo;DP1^}R@#?xv*f6FwW4-UhC zS{&wqE8{~KWk6k02eb`!BnR|0?pS)ClmT%wBnLzjUY1!?yPE+4(4RTZ8q%4V*;Ydm zY(wtw1XxGqE*WsTcI!WYH{z4j?|DFX@r#JROVL|uYDN=xa}$w56!YqEI7GHJ*3KDL z%sT|{7$z3)6~Od1vok1H?Wbyhs%m8)i1O^ySn#w=$1jSo-N!G_#Ei!;yD}}z2-OyO z@2H7b3~uM zKhYu=P#But*bXVWk`lRtugo~q_{r@(1JC<8V@JZ_fiV;65@hG<`eMtoq$}3V&~%4AFJ!A1Ok@ijwncmz zjn#PXgKn*R5NVh<)PfmB5Za1-+P}=jRB)iz4^u<0M?|^c**0*bT8pu=Qiko~N96Lw z#JbcutE>d2X6|>mQJN+xYqJ?<-iNoV1BT)k%9Tg5y-{EC0}W z7Q~ypkqq7ILnIT-L#U;@7MY2eua4d1!M#!SS0rr+{n}ZJfD&f;ms~b6aPc*loPVMJ zcnFg#K$N#$?C;#9ECM+r8|N?_w-%m`(!OXATKF@1R7Zz+=D`+tt3Q#Y-Tn?RBoTX= z3)_d9dZplcBdezb%`&De-7^uX(Z^dv#9CgN%C7)M7y$P5SPTdBe*t>*Blf`%^l3;@ zb+p#AeYxsXwsw0N>9)4$jDxg&9EQi>fc4vi9hy1YyP3Ba=q zP@x^2Wi5k9@Q@+{w1MCJ06c^`+(F&|YfZ)X+F*q!GFoI6is0ymHIW4o#a!%Sk1u)- zJKqB<_W^oCHuZ@!)%w7NI`nI9@S^Eu7f%dc85|csAk$g}D;Sv~xgG<#-}bN``nu?B zY0|j#VE7d{b9xG3P8<^b-B}jyzIiP ztj=#~;Sh=}nH)Gjz!w#{C&+Vv)3yrSb=1ObXv=w?On`k!D!GJho)fO>t(Wa zUq4Q49S+Osj?ZM4!M88l1PZt0{0k-rt~vk0fWO=moJz?3H;$b|8do-y-4q<3elOb) z?E>9y|K=!_{MQn6=Nu%!OR`~fx>?cHa2S+K@$b%QZHC2%-MvJP;1l=6EhPaRj#=KU zz=1TqEeZAS9snD<-uU8Wb_7A7zJ_8;810Wtapr0xEH=L!tZ?O$As910lYb2uJ!E)2 zv@qdK*r@j!c68J3TAusUfG*ly%REhe-*l+vJ>0LN1>sHm}n zI=>C$F(Tha5Kib9;XAhK(5@iD{8o#@P;7IZN1sHtnJrS^4400=8hRHYts4StzAT2tpM7F5F7r*RN87un^KHGF5B z#u^?-d1JFWMvz}MuuiJ1*l}0A1pjXqA}HQzDIc5jQB?JYNr{pl0Ah^USL9}y)9eD$ z4Rd8mcP)`X|0ak8I;MPYubD|q2>5jM1#l`)wwH*!=8q{u z^hXsZiJ+4d`57Y{G1ddvaUSfG^I>M=nVQLFzL;;E0?c;&Sefrs)nB})dWUR)_JW{KJ+gwG;x%e{&~TCQ z_ft@9f8&$CI(qe~z1ORbDyDvDY3WF%la6yHQC} zALz2@o4%RrW*hWL$Rpd}rYwU&pIE5-X=avtJ`M(;ingPWUjmT~hN&58s{n&z{RZ7CnU2g83=idPWO$bG+8e}+ zd4Y<>gA;bxXTpx=wKBZ2ti_*s3XnvJ<|U{Tc1w1(@X>}|%Q}3tsue~SXBOknNE)-i zF%U;ERH*v5riUv;IF1B-kv4dRGJcYEopWxQb#>y52dhl7;Ozso;_tvVrHQTqSKces z8ebl~FzqU*@1+*G2yj6Nghk;xW7|2>)702JPEWPS_1qY1@yB*xRyhMKm)>%tm9rPC zoYq~Oz3MOb$1KmQ@%%O3aMaK3W(O6Sol&R!)1fCg5D7L-%3a`yV@Gx9zw>|GNX1$vfg&VI7yOjh@m zacNf9sirHcG4BUY(Z2Pq_$K4}T3J4_f}_%|ue}qkEKj|Sx@sp6lvcQ-t<+gCA487d^hT_5HU0ixJkQ^nUOImycMSAN%k0gFc>1l=kE$Z z>4|tE$`z!#P>bu$S0J#tOtJFUHI!usuSwq~YB_v2CaRL5zlA7T?gco@ZIWJJ0 zXQh(8l<%Wu&`;p2H=bJqX7|SSLD_yA(nFc;jg3xp%UzI02L(JzBxk> z;Uvdd0KN$DCK?=lTKMC)(T{Yn%44kUI%v6XUjDz`Fv!vQia(x~p+ge4SUNN+eTR^I zFf<9n6c*6t($n%jCf+wC1(r`ChBxHg-x&zDFuT4Xy`Eq!0K$lZ9y4I`8N-Kcb{@8Sh{ z!ex?@CS3V1L#<)z=GwVJgFbJyLgs(l|8ZXHkCS~3kB0C@QQj&o@&hPkG(;GVMybZK zmRt`}m{4x&hE}y4+-M)%>1x&nnOMbA+%Lxe*iLHD83r6dq$sfmlxckU^xaQmcq)3M zx`w#ASK=lu1ghk6`qt2fHKC?_u7WTxaD37W8N8U?rsJ z&N}ZpEnNqlt#J;@Vj_8Zgb7`sI@B^gP^tQRjuz<$^#GfFa=H*eEqoXrKtif5YKooq zQs~zsv>CsEyY#=Blhu$_!MW2O`A7?W$!B)ppxUc>^C6kk$f&)gHJX$oO4G1R1GvaN zfPrZT;9C5fWC&3XVfu~;IuYm`+HtlP`L8IIo|nU24OB8PR7Z@oK3+Kd;EU~{I(*;> zB7!)^cdU#rFsPv{5*!FgMShkRK50L6JbDv!JvUcm1$r4hx*??|uLStZl=-yq)5Sc7l<5jyB_d8DqDr7QkLPnv0Z* z1CR_X9L7`Q>8>daO@H$lG})>xf3%O+xGNWo;c2YMwNGte3*QZ0b*=u3g(2F6XL1hj z#>=P%CU5!ZH{eG7;3n8=-OCmCYvn#~KnRnCTQUwf&i%e>x7?Y0gtJ)caSkjWq`Hk3P}d@SMkLC`Z*y>`*OC@F z2Jf8xu?}f>(NrrcXbwV|c4DpLW(6-A$eF`^qpxEusmCTf@AzHr+7I!%#-@#fh0n z6#nCn9~{iAyy0NW9oLho33i1T^$0aRWJW8cVw*JqU!05bMaaA z^i}ml(xH_#HL)wa`KkF($OQXYC1kZA&Fjg+nZ{75tg#M3>=y>VNRe&%qg}nm7?`9m zH4)h}GuRpE5{@C^ePJUM+L5b;yWvOfT?6`Px8&fLGwH#K4C{YUa{X)4O^gLYft%EJ zhA#0-G@O=p*nNEo#07&|XH3Y=27?TdUOU(K>HoHZ8LRPNC`0FyEZf}S={g^8FIUsI zb<6IvWTnM9Rz_bYsz!3h(08v9TOXCJ4!)tkLiQn)1;#u*M5DLUVJ%=To|5y~KKr zVS|54P}xraM}P;jjNj}oj_Y5Wa8`aDmWu6Mk^SFqwIU8c11Q@N;fIhZs6R83xtRty{nz^vb--mmT%%nvvVtGd(x-zLk z5g*6$HZI#ORUoYq++}>f%1sQk zNDc~Rq6CjS4P)DU;7l}bM%bZ!f3Z2?Lc!RZp?ho1zZc;ORugF6{13LJvvJ_*hi7|4 zXlsxLxGg)-ZiH6(jnb1${g0y+W6iT$*?scMCM%MVWPiP@?E=x z2oJB$w19#BHs(EUx0qL)AFv)ozF+d%guW>Q5gVW58~4B!6>FM-i}`~ zEKwntv=!JH@Lxyt{WkuhJWUYt2-+KP z<=m2|<8`fE`v^0^(~a2Gd3-N0w6Xqa-fhOLVb4w?yoqM_fyJWP z<%4~+NPy3=3R7@($->-IMJhZ4)tFC%Af!UROOyBmn2r_+8>vpB(*8Q*nC-%L5X_+= zXbtZc++(fC2!PLcCO{yvJXK0*QASC5D<#SF0aG1P$Zsr8Y{c ziNY{#1@X$7Xz^C9Npo=TT^(+ibY&DlXj^!(H=N#-zKwLi5&CGHx$F788p+U8-6Sb zXWPI0`{Gyg`2$PHDaR}Qck?5BPTIV|dLu=_56tB~tPfoa^e+}&jOY9Zp;^iT4SG3c zfet&UT?gxoZ;~=|3T?4$q8<_DT{Gd3EJTDVre1J;*(Fd%Y z)$5JQJE8uWR1x0pkM{Fw;j5*r>V{EdmEC|oF)~5{>E=H809WY0pf_`BqFdMr{1zp) z&7wxhkG;YVjSE_}_s1)t6YJC5TmL^D0SZ5Ee{s^NRxs9~m4Gv4`C$YlW#T@hsV z#99~;)aoOko|srP1Q85<`cQARKB5H11*PVEIC)Zr3UFv(4K&XI%OIu~#oCLrz2r$R z!Q&I6chAPsSC((8)W6rNHff8V_s+n(ikSiLNk9sCd|j;wY^T`uC>F0% z5hlyfl5tdTJUG=KD|~S*)S{j6Gl|52peznitE$t%?su@pxbUxrToZ2Ab#fY>6>yZUw=`EoXJ2FIN$3 zYktoAH@<%c-VB`A6A4k%3~Wr_s@`4M#2`# z(KB(pI$l_QLf~&erTlt!e28V{@gc_6mTOHGmmtyjK$5>rf0=x%E8mA(UT=x()xk4E z#}4zyEPc==nL2iIyLlYoKy;EumVge9;Uwk|hW4BJCsI}s_HFkDm# z_kvO^Qa_yHyAJ^$f`{r{UWzYWXNGQzd5^bHwc}V074{2EcCsK-hawQisT~)AlXrc zxMH+g*olCCe@alw#LXk-s}-;#Ig4LbG+lBqE%Fto&qkOh9FrcrY@`=yMrm^>=tT|A zH*?u#{Q(i!QzyCs_jn~UGnUmlGn1StPR(n7!JkB7{uF}ENgHd}&-m+2C}8ecp2p5(E8E42jrz)2G3m!1R_ufNloh+@ z(LcXp)qUG(XTq*Ja=t8?CtJ=3kGZ>^;@a7ECR${UVE^=M2Xmg}+Fjo#{o0vzDAjI! zkn?;id|;~=|1YFQ`@u%iks4jLj&hZYJ&M~WpJh!&1tpK%#FRWvk*f-j)K>EN?>VWG z$Gqz-B2WSyopp9*wYH~Dx>{2`b%x+HDfY5Qe%X=`qmjb^ceVOW4n3yOWUWBkdSm6y zggUU!tJ(1M738E`cFyUJ*^0n`Qam{i`ucq!>*)KwulW}d`h?bYsBZpNL%;)8yAo*~ z^i_S|Uvel~^Fct4@C<$5Ocb^R(H6E=J?AR~8WKJna{BV2@B4=2RKFBnoF>K-k&Y*xAd!>`{}w zji_}Yig1)$d5z^gH%1Mbr$?OpyI#CiL=ft2fceeucmwWe38aNzktgbKL=cJm4_0tg zW&1HM@PQ=vzGkvAxmpDITQN^d#Q=dwlH=k(pF~N@^~XeI$dOjyGu$@tg4;4&Yho7` z`D25NIhuNZY`%PLquxqPApD?F`$gWmc+aG4h+z+w;f2;)HAfHXWLW=Mcr!$A&cJFU zndjam>G4T?5Lp{`Rs+KBO_m9gI`%d?2&}&Z*u%90m`_^L|L2*Vm|qAdOQa;mp%tM0 zT{cMx*I!Quv;OUr2NvB%dTC9$l%(+TSw^2d6dwWl5r!Y)@m{wo3jbKA&STgR6ifX`; zY+9Ef6F3n4!C!P#`R@RA5QNH`^tZICwRnR>1c+3qo`Pd1J4iIpge$br)%y3?34v+8 z&?%m3{heTcF^5Z@IbkE}i;gI=szXii|A7zCn1gDg*B0~3f&4P?34@X0e+ijh@*rUw zNolXTrU2ODVzj6BB*?!4e8RPP7&f28Fhei!WyXRuMQDa4Vc%sy664ITv2N|Air>%A zKo#3zbd#On8D~8`cCLjx6G@3#45+Z3?U;;0akMXfmINFapUj*?*}B3UmB3&5zR<3H zf|5NC9smK2aaUi6N~{tmWHGL%_T(<9p28Lb)pat1NVG-(^S^j6)<| zU^OaP$y}+-DvWuMkFj<8apxi}43?Rz2Ofjc$6n~LQklXdVG|;3X@gA8!dlE`wO%V+ zjZeQa-=`yvkUpfyJQ?vYTR|3&w>>{`;i5n{3aGe*#-*Qdf)v>^rv3{jgAI=G|LvWC z`q;p#8WH|SM%lvuM|#-KUBp?&nFU~i{)SPx{JR#?*DyA)tNL`9^XYheYMzU-E}g)B z{GLKY@B~HsS!#jieS!931GjwNIqTI!*~*svP|Ax^iNXsf7Gy=CbA%!?)C9C^GZ@wt z6Ae8`-Yb`Zy}<8D_&uGq;kV1&1?X2;CYOpIShy5Tq1~m5F_Tl=Zxhk*(|DXH+;nB@ zhUZCfOV8qTB+n;pJJtrD6}D|Y+1U&|Ah)Kh-(Nrv;(cgf3Jg+beDL#+2`Kks1EaM# zsV~|$sUaytZ;U2QC2N5AFW#Ml7Ud;(ig7^98#S1>Y~8 zg=hc7Gh-1J*y=6;f6L!d-EADugZ2wbqC1s9@O~o(W5W3%%LKrxZVHj$@uRFn2g)m=MLza@jF&P z-lj~8YC_2?tHy3MLUkMOZB@U~@btp)_i=iu zL|22+pLm}7$YwWOTRcqduf4_ZMKC{ciWEhW^9{!eF%G>}{1`ep^hDvymqQyNrmxZ; zJl`PipI0iE%`1^cW(J-ZI}6e4p{g>Tq;A27{wTwC_`BMR%C7D*?)xvgI>s7~OH8Rs zA7GbGnMw6-*Isr_=*L>N`rF~~x~wy%p>fqT##qNynLHbFc6RF60>hKz`uZ}vdrzX$ zq^Qy!0CriuvE_aAw2O!^UC--`kMLae=n8ynWTEwx{9=+%vw`zud0W29!>cWbN5c6> zcz{K6NM3N3#(4y3izVT_2!XFf3SW?VFjiF}gol2e3Fnosf4-EZ0QtceNQHn)M!+e7DJda{GZIp2e^Kn6*}B}@-B4QF4#h49=XG@#~PY&6XKB$)Hb z;iH0940W`ksK?>LoilCviUxFpQj~Lj=bhuq+Ggnv?p%XSgmIg_7>n{_4*f`W)>%!w zB-e5o$~g-=06ey&KC02F7MB8k6fj@H!D_c+nhy7ZgfnY|qB%c7wh!`o)nMUk{yog* zYu?6&wzZJo8Q;GP1aNj7T$OU&{`bX7PZ#VYrR?36AMYw9Tzic=yOF9C8>}$?1NCt{ z-}oTksvq&kpg3i*5)?C*;vU;WI%E6l#RTY8Y;GQLa7eor?ie4mDOljVHuk-%inH{f!0EPllutlm%Xee88<2*cnuCm zZA8+p1B7flIkrqg6h_JiB;CD8uIi;M1@r8kqrJG#s>QZart;~%JBg{1L6A-qfpNO6 zu0=lgu&>s3U%XFSXt1|!WGhOVr=qHMZU2FD01wteq#z;(y0q|jP|_;6fKSh-xJe5e zmec(6-enjnM7HcOh)>ryv1ek)-{+Fw76~Xg^4om59W1^v#p-u4m#+yGNwyK*c<_RB z9FRugG5>K}k-v-g8y?GjjbhU}t)vDmL4GrdqE>zb68(BH4*jo#L&|-MWh6Z6TdEPB7Y{id^Y8`# z@%KVpJ=X8Ve29Nm66@z&<`xi4Q7oxPXQ4*@Im&MaR0l`2LU*S%Ds=Z`Pn&0Gf|92wu z3?3X&W8oxM(_gtE1@|XVa1xDoe+H_@)No(;bx7uct6kE3GTIgXXjktry|TP?5M=x1 z#rRuOo{zt|<<$v9=bf*N6ci_X3i@rWHS&y>(SQGJ@Wtl#49szzzKe>BI^)}@;Cfon z4g2CJKsCa$Eu>AzIyvxCurX^0`QZJL;cXsC^a1SFT0wC>fT+ELUl)n|2)<86#Pl5OW&Zg|HhR_nhm^wgKqjwrbSNY zA=m;_V-T_g+Y<}8Nny6lOHk6Wxmfx(@v7xr_I@-S?q2FNsj6!bgu*Fo|KZ*DVn ziwU4^OYig&f>W8nY7;-Wu2uppBH7qZ@HhOZJg*j!A!E7@0HYN(?(0wpPI zP`V7JqZacd7TCKzAAdCi=i{HC&uZ6TAH9=fS>hLs2z?G z)#B{$997_&O8UCpJONACt{!!7-J@E4^B?HUVad+i2TvpEjAUk|>5 z9Rw%b&i)wwa&t@)7_+XpCq4pK?;W7_PKCPt_GYzr>L~mei)Ub$fH-lLjVK=hlh*So zF(#f`93S}nI^*vM`sncVM8kxR`&f)0@eMmjZht)AWU*1anIgy^Hj=4!kr&4_nzJpC*q1}OTN71-Mk(!sKc!sGB|3W%VqsAw5p8bez^rj?y~-IHT1uwisyXn zTbUv)d^>7wD9h0z5&Xy)NKAzeL&vDkL6)4YaCSsm9J1f4t2I#iVU^fPQT|aDfin^y zpW-+08c38e+Utdcttj|xI+h}$X%k_SlyV2tncDCJ zpf#|1K>GwTBpBNxrM#>>1??Ys)1OEC>pK5`P|Cg`2V(dACQqP>Oh!8(_avnB#iA1N z%zv>J;vpFEU}i3bs1SQa7@w_rv-lrx#RD?_nC!9mS*m`HOA(nO0XjFJuvNF;;&gE` z@QYF^x1)o9U*~jiFLaO&KmUWp1Nw{|^4FK(ry=TTK3~b_-~sZDL-DQM?WWsJ>wp8Xe6fMos$$PO#ok9TMBU7d9}>S(499Z4#zS49X*vdE#jodjO&@-k zm7HSSQ6zmcUms<^?r8tmpXD|JZ?hctGLa7yOP}x&_HzsF5``DkL9w*bD#hCRvbN`) z2QJzYuT(9%9}S8hr5=J)-H%mG#h2#Q_!B=&y#Th^H4-l-I#ni&clJUX485z0KgC&27!IJezBCjAj!hC(wLW}i-b2C#F|CWz1 zH?we?C>+Y-?>jT?ZfdDriBisDg0c8@#zik;2+XT)O#anOn2g$`hIkVqTA)sKGp>3t-R&_O|*TKF`11myYD2=r|*?&4OZ8;$F_U=q0*_>GvY%MYc1 z#S>~{?CPxXBGQIyykl7B59nsRAIph--yl2_|C`QRO+bFGH_egHB-XY2;ToKL_udcc zI}=J|)x2zz`={WOQ;nJ(>aDW|ft!=_zY0oqsUv39q2^}&B4`7^UCCTgHSsPV(q(6NR(UL1@re*n&S#s)}1x6$M3^OwmPxAHu@@gg6hUwd4bpk>cm8sponL4NdtRji9oKa6TB59 z1i@RYhD0Sxg310M>C>&`Rm2d`7rk{ReoOi4=&b}5eo-BpR%ARigQxFllK-7C@rM>O z1Nf^{-@~LE8Nlb?N`Z~??8(rzLkP6ewc8RqDLHQ4wf^ny&Vg;Z<8&r`H1;6w=At{u zgnp}Z5yRo+RqMCT!XP8L<;U{7O?s0e)c zHpAEg92>G(Y&RC}lCeR0OieyU38I|~8oo$+!oxXtJG6n3Y*goqE~vvr-vVhqS*B~A zSB_tAb+yG?fk_a7T0KAskb)5?W4`c5R&R5p_3F9$6PX15VKL`r370T_9o2Cd3Y+@+ zIn|xv69B1T4iO5|o(&@J@abfspq-3DlNLW50K^(9%Z*CWOM>e#8gmGm973f&AzvTf z!yj7Vcd=QExh_j62J}Vy?d^-^b}V=3ZVH7J1u2x0qe1lg+#nRzS@XzaXrnf|pv{K( zy-U#VK;6Dbb({w3F7QQPEkgUQ*06M{CD<)2n~D=sGuVQ51Lw3bXM3V+uh<<89B%_A z6Dp+xO~SzKAAzsYo5`r;JR^ajJ?2zLg;|QXpycz95Q4wyXq(`B1ZlmI+HgFNc=8Rd zRZ}i(CWfh-MB!(C;5u;q|Jr0G=u(-ww>sgtVs?Th~+}bECB|nQV!(KXp2(lPoaXX#A6N?rW`)ie@B`mKbQOnRF zQNf8O)9SdFr`SPdu(Px=*$_k*0VdmUOL8w@`?tkpk6M^a7nn+mWF@<#-NV;@&D=v~ zmvj*9?s_$>O|NX2ffEe`k2c(-hngfpLke#Tp%uFjS}_v1EJH0sN5Fgb7B(mI84y=7 zW}5NR%2))43!Xht&hR&Xay8Dg!)*jO*s7y~XI$WRTSWkMmf%N%GDuk1YhauLo z@X#Jc@R|&(U2J#2xORu^Pn>Fo2;wZ3MQ-;LcACE1g@rMuEUenwYRpCsPN=j3>QTKE ztIdB6l%-$-Fj3X98gF)W`I;cKo%WPbsL8QHXX8gf&m{uypuE|Ef|}TMWz~r_#zTka zaQ`Bo5$)h4#3_p=3NIc4h9@C}B0FrW98S^$Cw$ml9l^Sw}ip;SXGF0-R0|;a1oq?6b}22KU*HW`SZj zPlEyA{DHVT^EF_wzSjbNG*sPx{9QawvqHQ%#VWG-jKm_(xS7) z6ql~7^Y{{`x_r*bC3WJY&Xg-0a&WEfyRoM4hMLYT!Go$pD}r?301(%37d4}ieElQi zz^6AQe9_xU4e_K$`Fr|WIsCuJ!@m$4>=CT55~I>nia>Oz{oZlW(}bv~ZU7 z&VRsK|4QVmfYtC=n*NX13dYeSTq&*CZSvc^pTuuD4BWHn2He}h4|&hw@_wyVp2K9D z9Cm9z6wD4;Mob3XR^YF&1!gg?EyHgs=*mzZXbPBw8>$(qA>b{3i7!D*z#mi;WHsi% zs|&C;+0!=UT3Ql}NrhVjNbtbPAiHQ++4;l&>x7sSduzSvTxT#1Au8qd2MnmIxHo#x5xX#28l{!t`g~#Ww+61c5i# z8{PP^LK(+#PVwm1uRv*U$JcG?D;Gss943)i!>eP_=MKSB(#eHptIR9!=^u$v`L^m< z*h?#CZalC(%IeD)3kSFMeO>7VTjBon9DG_66T3xA78~4iF19H@3HEQBi|u6s;~&Vy zmYCW~BJUnWWpt^^HF0D5%uY(H=ciP6HZiCRD*Jv*wQ`7LZ9(yKhwn8d_oA2lW%P85m7*y2w4SAv4MGEQd9tGqOsF;9z(M)Rc06f(HtDyrEi$H!(9CO)I)BIzM-rCIv! zQKhzkd6K9ts3*X$@uYV=qe5XZ`7kB*75Wj&>v!pHrM~hJFhMaD7A5E{s(@vua%C`n zf~g}|8^4^kiIX8y5mE=0hhvh|z>o0QZIX1#l|1bwO_D<3pwe4jXp#TN+LypLRc!xv zg|g@kO0_CV#G*wJTM=yqp@kv|q*??76{S8AL0qaNh@w(VBE%TQ_i#t$DekEFR76B= zWpx2j!Ckp_xtnt(A+zBmNRG0oH=vOnKLI)x{^jQgFA0a zGuqZf4E93SXjr7Nq}95dtLAI~!Budc{6aY3Zx==k!vgIT__6$LyCn6v-heY@`7;9N zU=-xIp01W|hH#oqUoAEuSmW>)To-?-1se^F34xE9gP4iJtt!hJD??D=^E$3ZTo{E0 zgc3;eq=c%_7+lMBE2cHB<@yGQZ_es#j{N4wW#nssDw>x7;C>^2ql9`kC5K4vnV0|X zBfs?*2t!THynlxbV5~WFyzKZBgLgSPnSQn#K?Lqk(!jA>($GMZE+7Xs&0qF5Sxrn3 z{=e9F>5-JM?;idbjS^!lhE9`&=6LH>hYIAQ4ePiv(Ad-^T=H!?6m8)pv^;# ztX;4!#XfOUme?mg)7jc5vYm=-Rus5W^jiJ+6{R{zm?^xMdJaj8s|`D{Gor^~eC6Gy z9*zwcxfBdZ-3fJ8GF%$Lyy+hh=Q^pbki44K9eoV#M(@WTmY13N;cPHl4o>18uq)AO z?8cavS@bPnaE6ha%4*MmYHXAgwS^(0;CK9&(wGeFK;&ZDAv!Ikb4=g!g$bCgLrni( zrxVvT%6BOsIw=W)(*$A5>ALdQ%*@huHvWc8 zmk5`QiLD-=)l{adz4(A-y30}cZ_0FsJp7k3-D31r@icOhr#Q!Im?w=1eC)2?l`Tr!-6+HNtGToCB7CABU zV=nsNNB&6lf0yaTT$(D=U5iCKJqI^}a`4rX>#Kf9Lj%zhQ2fB8oo}yfvYJ@Z&i@ae zyr}+pJ9II>VId&ON1hnXVa|RM#3vcb^`xbhl+(6Sijc_W-23%tZ<5ZsJT+ zy1O_b-97Q9NOv9Eigb7Jp_X(vc}**yHMWs#rzf%vMYa^_uEocHA>Czdf^^ps zD29}iax^41m~sy(M7?+^iRyZYaWF;%(3>Xqw<55v&~NY{a7Ct3mB#H}Ufny|bT7B? zq~A>Ya1X3@!=pCr%k`LZW^6pD@$*86qKJ2Hkr}5F`)2d<6rHBe2UFp%bBgZ7iV=G8 z71sRInR!fD9|)<`0XVUG&jzHX_5`Z(N%~YsWk_Oi@*2u+{>F>FN8m0>Tq1{4Z4z;| z0BVQ!?0@VSd2f&R0(n2!dYYGo-nWOiG^wI&DFWFW16HE?n=6fe%DR?uW_@`;!Nslv zV}Z{>aU-x6C~O8va)pPJ7O}EWtx-CcV6@^RP%T6)ML#4c(Rtd0R6H| zJmKCWZyUJ-$q1f^Wc#>PT!sbb`D$RZeCJX)AJn5m^xFLbDQ@7w;d%oW68@XwDqCUr zzd8u%*ufN`+px$`FNb?FnFtg*n2$b`t65s^zzi;xZ~f&{6{d!>3J%Lf?r{GCci30t z>ayKawtd1;?#L|#a;T(2JVrgC|Ei4$2rgL~e$IAh`ui}Mi#tPqmrQaVDkx=hQ3b94CwYa1=v32sdE0B zGe&Ky{{tII9&a`RD^U@wsvQy^tM1{%jjOfK@z4d_Cp=wX7!+F#)I?6yBSs+9U5aPx zJQt(i@Sql&SV8CyA5H4eFFY0Fq@icE23n9|1kaM;Y7QYhTb7EDUvYtMvj_?9=AjbC zi6HD<0@86MKa z^d}JnPRrCLv$M3Q`Vb-21uiofT&=l1fvbDDF@Gfta9pm8`8YI$=V$O-vW1~J>zImo z&*3m9a7Ackg@0u^!cZ4vR2u!GxF7fY^jygZK8O6ovv8)Pzxq?oWCS)KH$r|ToH+EZ zuZ0mfAKb(Y3yeh$L3P!~z?_9faJ}$M0iC8qz^Z<@4WzD_I<6Np0*IB)Lw2v?8?CGh z_>0+Bk6**l!f>2}b5G|x4aX(LOjaNvqunKNC_q{}d~4SN^NJ3nz{)rHp%q{Qe|uh4 zIKpQLA*uL+79cnb2nmLnsk)V_U^H!%cR2TwTRP?x7T~v^(Qfo<<@h`Dv|{`ndYTh| zJ*PSFH|I20e5nh}A4+g^cc1$Hu14!NWg~ba(9|5lakD}a;d8(EbA$(ZC@tCtuxbAR zvJsMwoX|8ERiJAIlJ<+rXV(k1uOZp@6oWO}2dzStj$chW)>;wl3fgZDaE1v^P|A+a z{{rxB@I#8yjgt}L67=%F!asD>0l_bUJv2?WG=h0(J*`~@_p(;c%Zh$P-{}7lp^Gm$ zAb^4jZCK}OxF+J?6j!{S%YaBkk(u%f0-8EhHaWBj|2)TJ_ZJ_BGjH`%I?jxN7j%&2oZQ6+6W@AOQhXv} z2&IskdVw95yPm=PwS=&Oi*c?mXEcd_zyj!C~?rtm5i*WT38f1P*w}(Zv>>+GQ+2 zufd-G3ne+_UYnBKt}zUoCnRi^@V>vm7@mUkiRqBu7iZ0g1VI+bjbgdJ$tUf zylqxGwL&vSx;gHu-o zS(dYjDaA~|ba|?8>U7x$>xW1nldwRfOc$6>os7JbX1YAv9vkBi!IpZ-xz|b*bw%zh z^zhfHToH!Lq83rz2IgrP_EqfdB$Fu&e{s9$k6MZ~xFzxRjC?kK@xDUdb4TTB{o!i; z>U3)@l9OH1Mqi6But_OIZo|)|oSiaz#Xm@`S(`?SWU?gi2#ZaD=+G8z#HD2H^=ueb z!mv#LAlx^5u2v+On*b5)f*f^jbPAX|Wix=FTXKFPxe?flTY1r5%0?j8|L@T99V1A~ zb9AJHw8D7cj~(&2Ny!fz!EJc^OG*wrmkV@RoA71oSDY-0zJ`)Ih9ad_RsW9V^+b-V zmf$ru7#6qio>nNEf9W#3fjadI5Q2y;u#7pm5Bw3DvUWqQV7ujpujjfSuC6@qwE`v2_WrZNua{n9M5E z?1^Hv_~Pc~F*YW4STeNJCr4?m%|maQS{pF#w~-d5SY+KaqnRGH6kNuy)min@V+8(# zjI#VpGpjn+{BG?vMj`OF4rjP(nbzJ2j;3eXa5Nb&vGM8!WQetk4FjxXx3RXdfpE?~ zTROF$louP%!$wf9lJ3aza$51qV3l~F=lG@YFdr;7$dZ4m-qaWQ&vrOYOmWsoYT&y2MOxh39b zLJNXPXN8j6-^HfKFitA1FRMw3CD#H#aoz0xM=s6_|L7NpS{s1|z_-&M!q-g73^<6Hk8!IzeA$bU$Jv}o^Nns8Qg+$>CuBo;`o+8Q5bg!gW;s2Naz|hm(+Vg z-$Q`mK-dJB$ly1uX6yExXWV`fmfP4`OA1Bp{8vZDSVP8GgMrT(m=He4J!A@>8wx<( z^^h|TYz$r=(%cw)f_2OkWYUT(S{!Y7k_TCqM32NykV`;0q2z-L#pR(|Qp`PcBwUAH zdn9oB5KOnBa2QTYZ`^{HiWtjycO$fo7a=#+sZ%}>+;*_YkHK-_xoJkfsgbBRq%}mn z>Cc&~R-I=_H$)wVr3iZ{?kI~bqQxajX=#2E2UHqe_gnxCeNdFeB#_5TSMnC*Z zb7T4T{V&3^BWlxO&sr^_iY3CueCN5~#~ zgveV8M|w!D#R4Elfx6kJ0HEb1w!JchZ4AA{wzF$Ew?H`^Qe(N$3WG~eqPlzf%)&Yp zgY0=?X{zjb8*DRzkRx-sm?GwUK(f+_O}1+_jAm79b6AU3{jPm|&^`Dpmb|Cd)ykHz zMw1h-nLm-U2`*-gh?vn@Z`;ac+lJ-#-1g?SEt)Gec^S7^FX5o=(e&HL1r;gEBBR|X zD2awcNu&er=$#LgL_EboB~d+pu{Q*cMN3q!zI=*WBAAEFZ4$Ink{N0iW~QvSLVoWQ zFLyfJD|w$KXIjwVQRVnEoTB%+bl4k!z}qb=Lg(UC<#1dm1#E*Jt!2&#BG@jN3kazh z*3mh^I;P;JUkp|%zmg%2^*^wAe$Y8-=eaZvE+%_oAzy2u3fzc|f<1XQV25huA5@)i zq!*AWTYDzB#{0Dhglj0woTbPq-Al{*o9VMN(dY2eG<}W%!3Vz^rjdVE-YBdjyXyYsSpI zTF)5KnXU$E6NJxw5@v7;^;1D!(dW4^W#%Cth<(FL;o z`}0r@cSFQ&xoYDjH`=9ML9!ZvCQ`&|uI3NoOM3fpBY1;8Ut+so(v>*R3~u`j;P*8r zBZ>1pDP7&yAfr2$q~a3$G5ck^X!1+cW0OkFz{|<(DMsW1cTzBgrJ$eFw5eGB?{mXE zeP#Taf%`ZjM?m|%z8TP(xqnfEp90TxS9*AO;`<*kC26h#1KBXVgyt4{0i6dS1xMgF zEfY0kS9%LaCPUN>nb;_ihO)Iu7Yq0}cqqNI9jZ=K*V@p=T)^`j7&hoVIFtF0&)e~f z=(iZofCLocZzJAK-7bYpW^>>-&n!}aXa0lyGQz(y4}jB7>54qhA5Y}XI(gG3t{VO9 zWVH{V4C|WB!uaO_Bdd{Rl5dIW%w=-SjPzbVI5ecSn-{;6ess)Qd?TX^U@x@UBP1YS z7i{(`!UG`bYjSgkq1DQy^_p-p0?^vC$s8`nfj?wTm<-w_pbK0|Go!Wl@(!50j1pv3a}iI7tk2*BNMJ607|?MZe*KMy7&Gew z`iPJBhzkEL8Hf4~!A~AGf75Bg>{tf~K|io`O1=7OM!d2%$h54DmR8m#>%077edli% z^Pp!J(~P5+b-*AxHjp0|BCadd;G561(e03DxL|{s&EK+RL@v8DVLY25^Kgw{h9%0> zkrkQu0^xR>)l%@z!VUZld9om}56yze?#aSn&D0?v+vQ}r;>%oMgR>7WveGR zO^2FNw3lf2o)(M}Xy&skx4Z*r!Ityv@EE#a_Mh6=M} z-gDE3?H`XowX4j^;UKo>a2A5*%Q3bvo69H)bQmozI;JpKO+F{@)+qDNy$hj$iVi`% z6@&32FkZwHrzIpu2edv=svzv4J6w)Agp04R-WDZ>1EW!3w1fZI_~oTdCM)@0ISF&D zU^a#5Afh@dv(7PE1KJ$O*TWIk}jWJ{`lAZ+qI3 z*W|etcJfWQ+&RH}y{qKoaCx4q$GFS9om{O}czZB!TQjc_#J$gP*Bgn<{)Svv_dKh> z2`B*fHfE7WMCJ=WE4~#Mc(}q|q)qS}_YecjQ zlURO15jD_mc7<0m_kG}8xvtM0$j1c{oKjYQJ`@9ED8}sg=42A543c`Bzye(V)Njus z2-ONKkzsG)i0FT*T4JRZ$2EDQj&!ZYj)MN{SJ5(TPRLc+BO+>O(yl=^Be)8GJ)y?* z+f^ed0lh34b@=@BQjj3~W>i!a`ZaOx@71Q!UUg^Jsb6p~40fjt$S;OMK9B`H!(U)j ze(|m`oO^v#V^mg#NN)F&{}iKoI8y0@61Jdo;~N^CjP|-SiB63-6P;Kk^R2fqK4cTu0A2}0pO5Tf=c|x09{_pp?f!Yxz?}@mSlxIBI6BpqB zYW!E8?9*NTh8&lFS&gggeczAJ?s;LWY3p`J+J1;Hj)o1{u1HRK$tU*mr?qqW-z~r@ z;0!nZ{${$xXf8^GfEC&$4d zg7v-v*y?aKtvcul@QK+FXT%p2PH@}@SyPz{HwjWG4otWn@BBvz4tKzgF0A1nF%8!a zid0^Ws6IK+N1NKtNkEnn_yhUf{v`#dI(8V=dp<))i(uT4ZH&MV{EX_9i{6a<2hn_m z5m=37aYX>0gghF^45D^9%d!9={JZ4gKuOT<#vf7Oz|39}2rH?%ySvSdi9Hf`=8TlPQT1 zs(5}55FIs;#E!Qn8C7d!aRR9GZ_fhcqY;xFnk^^$qH(SS{Kg5`scTcSts4jp;|c9i zJq3JSzyhC0;2;rbPv$oF_|LIl`#GNf*j|h_#cs%r=9Z)@oKg3!PY%lkSBS#%Em9I*P~!BTGbZLujW4q)m?ANCDM&kDl* ziez~(9Q}0QIoI-j5_paT?m%#!Jl~}*-~ckudXNMt&vk0uOy> zxeF|KJYn^>^)glvT>~_ELcfT{sVsUEATdu%#MS5pa6IF~Pld z@%&3bAW=qq6ZI6LU*b_cdp<^hLuF~EM5jZ|RQwT9lu96aQ(2uCQ{I$&JLmXK85V0+@1j(G!N4@rN3w@=YIt|55Xt)5X@yDYWT{@YV zoNXES<_haOUE}%p{q6v?yVNBb!02Z>zd7T~Ha;GPA~O9xzYRc}GfXW+GJJgT!J%Hn zb9n%4>t0mAq#`v4=Rl&j>-y5{y<^=0S31o_%%#RXrMsdxshvi{^xr+!&FtJHc5dGt zNb9J|&5RaEH+06h<*6>oWJ>L-o*gh}}N#R@7J)FwH(L(dbQKbEMs$GY6t+9&FK*k5+4o-c4V?!*j2Oi8e8JRrTL z6)baDlE*|}1YEYDYz`~vB}H}WNNg$Y0S7qEO1;m!87zeV z>dcT>zFuZ1EY$P>;nm?LWt0)k7&mD)$O83~Qm{T!a^NT$e z&EC}%Hl5Trl)FNRV$?5>LPt3iouXB$MvBwrUs7`s?^#3OB0GefHSax?R-aq#37>#) zSP1M^d$o&GRN!})E%71f_9(Jn)#oO-GM4ep6TTJ)F5nNnzKMJRF+}2>O(}K9SE?6b z*~ZEqi&h1H^d64ffGaP_o#LIZZsdw!Pg@Lnj1}UKsgH`U^tN+HuEhcpSEEoJluNNq ztWJmS?urUXcfURelA8|cAxS&3e;h^vsu)&*8yNkY3&JfU)q6pSZ(t{qfvYRx@A-Eh zXH28tot%QozYbTx!ynjz~}_ZCTi$;;9vjDLcZ`tc{>*)!1oT+K?N10 z0GM&qj)!9L==)5IOwOyDT$trOjpgA6l8r?TL0W0?(^*#_t2=yybGtik_}W0N#s)sU z51T|mP(czw(W|@a7K!~5tlrW4MMr3YP@4)uEkPK7G&bx3;6gv~6nz;ky2ovU?_qd7 zkt>Sb@m1==PK-&nG4>OCR#NZknQcrRhs_uJp;o%UZ4l{&Z;qY)@=$gyzd>rUL3#MG zOj=ADY4YXhAGRXi(}X<#WM|g(`JV7)kkdA*E9i92D@Cr^$}mx`Q58M_78%-B5&xWbfdg(I;FVRe)Dk9+MP=wisVn%k5g108fwav| zj9XtUZ|oftVl?LrmOi8d_|9=~T`V7Uua&zuS*zirDkz{+)w zE!S<#^?=TmAj^xZX)>QoCE#Uf6IDkiAxrwfs5@KGAZ`8#)j@P1Yr`-D`%aDv{o`d^ zKKm6?W%vw{>%XWyob=fpQM@@itzE!QJpWbXKzEC!yNXSsBU3s8*=tE#W_NFu3enx5 z&Mr-lW78kmhGYa2urlZ|ir}8X7B^GtuwHdLp55!2A*~`zVsBJ~x~q8!=COq8AhhVF zXGLpwcnUHc%?!kEdued;SWJUjOoN2|O4I*^n8=>U6ixrA0!3m!h5O|}#>zFO2`G_+ zeuJ>n!;35YsxX&kK!x3>tqw`?I}>$NbgSH0qpMwP0he0=5ws9ZI~5w=?RZ_ zaJyK>vB8cf&lBl!_rjK1ot|WxRpBc@-W%1N=SkihE8?FqFL*iT8wSD%97c#yMLhrI z|3X-6sX-L*X25tY;N6ceXa%cpDM{hzPG^kQn_?6H0=XD-efWXqis?7{bB2 z7KD>__iSlQ{T>t19hs7+p6vkCe1kXkgiRD!O>{I%B*DtdFxZ%mg?9cHeaI6{*)oNgBr@Al~ z5$4puXa>lTV4iSKsSki*wEqoL7+x`?XpvJpg^7d2!yRQ|JCZ$5E^J56#H#WO;pBqQ zwH%@#ZZpB-FTIgQehc{TZ4^~vlPWvkwO!B*N2;%3yAT7X?N!JeJ3DPXgVWVB(pC>NIth>pkr`{h zbGs|v#@EIb&So!9VdfO9A%djH2$-TND`Mwke}$Vf=CP+A2KFaS001g~& zJwGnvD}b{XUxp7d#ol6$twO!H$KYWzEBLd_0;2%fxf_XU-vcHZCYf2H*IEx_%m=CO zYS#CjS)Zg_#FUL@iUzO;!4&{|^CNGoBY;sbH~ny^^#BJtoswy9BoC#`^-Jx=8KmfD z42QbN0&y(|hxL7EJ_sD2ZsydT>{NTk3GpCa7t9OMm(4tOM*R%4Mv(RHO4I~?rA`NL zvygJfX=ss`amc8WPfgPK9cukyNcAt4CE-&%M~B$64b~7i)CwOOF2yJH^!*8{jpvu} zJ7{lQKa@OzpQoFjnK}duFkq=xXA=I%LoGN-hh1@`Psai?p z9R1nV-g^PUF8tBxfUb8cGR=Ubj5{Z>lcA6g05+eftXA1@)RMthcSpTwRx3hf!x-yfy+F7{@1J05pbBU23+Y@d0=kTbl5o zk&SAgG(vdFkk7V%oVr;nu6DY3KUo#nN{BahRw(H++*AMEliQ;)ziQ z)L7onEqK} zEr)sj8GNaPEH;U;@Nag(0#Sz)3yn<7@!gz$JbdEFEMqYr*9NoM9JXrFzm726=Kwk> zw=?vGw{0r1OO5u+W*Pw32%r(Jbe-`teT6Nue=TK=Rr62N& z@ce4zf_5SgPDKuK-d$?TIa@a+RT0T#G#INY)*y!t&e$d&mROkZ* z`uj`xUKwh{hVRSg?R!g-tolbMEFRanBA^7o6gz}Zb$k*t(*t;7U3s|Jg7)rr08oZH z7;%1}7Obr(TN9!k`d1iG*HDp&cJo5D*v-It8mewfpoH1}A^IdFxU`f_FjJR-pC@DmBmOmFpJCi zi>nnB(=kcDz;C5_oUk%9r%+fAX2)uzTig`PV&xic6umr6LJWy(3ElNdUsjwuW9hyP$OYw#7)p4QUaUO1FG`V{+jvZAP*_eEt7pakb{ zEqekOWX=N{HRk&Ye5du9JxiQ%Ku;%`J)e%>Bv9HNpdx%9iLq=`NZ}S>UO~a7%;>u* zx&wQ1)8zn@aMcVXV>wzSxm88TenD>@zLBb~!;v(^3CNaX#@KI}_fldSh;aq)PUM91 zM&k<1V!RgV*EiZ?E&)qv-BQd#_?+s?!No;8A6$v(c*F-&s8okOLYtOZr;}d@V8ZL5 zfQ{md_ByDPyE0!tM2C*vzFSazPB+VwWGC+3ZA$rQB`;cUAKSuKlmA>C%Cd z#(n{p1;~M2DpYn&E_oX-6?*Y(xQJ0?QESL35`+eGW}XDG$cBY+0WgqM{x0Ud2Vs+= zL^Y8i0p>ilp#%c$?dYo72HA`Ggwfr2G??1;5Veq!3U{m+Nfxub%?(@BpxEI!=Gs?s z+T|SDL|9(6orNfDony|}F?gdrj)RrqJ=BHC;=p4(zx4)3MhxU6txreZRC2K7-|WNZBWNkh&&d5Ec-mHQ`JdpiL0!o4>xma zYe~CHcTfa%K|c&rOuX~d_1t90OY|qqQyShVp^ig3I;~33uzB8AtQ9qoGu2#Zj|27I zL&X(>DjS$}M$)iz@#0i(<3*|7P>2LXui2w)A$sH~o%08iNJicqfMhV>1@N z@=%My@-T@h?(n0W#?Z@oLZ=lP0UmP3%0G{34L@YV3MRKLd$1|0j-6oJkMRSwZjt)WZHFz&h{7i|F2 z0@nhl3;3^&uR1=ty6PbD;qvtK7LN7ZPs$jp@@iXT#BRq7aD_(}R#W50s4>RfR_6EfrKRX}cpbWT zeN*ukS^$zyKKAjJ88gla-yDO1A+B~@q)(l%9TdswinWE-WEe_(>o{}9!loy@vFa-- z7WAldq>Z3fag8Ls07!N7ElEAC5!^!kk=E7vZ-h?yTf9Sb65DxlxAP3(N$hsG#?h&! zoW9;G@Pf(1RSYuVEPjF~_-y%Q|F-spdgBwk>YWqgtxzc3&J>7B8ziGe6thH>l1>eG zzhlw*&LA=UDXkC)%5fSf)9D_-%`<_UEx&qa2clwM+u=V}iBfpqyiG7xnUMfWs4h zf%BXdm3-|Y-;(;kljv9YkCh~>ld!bXk4&CYv2$s*ubU@yl|`E0p-n`w zq?x}8ObKx>!M(SsO%r3-Bx;<5gA|D2^hb7W_e}#Mr(;?jVF~puqJu}Z(XMa7@+`2t zjL`LYp@D5Zp??5_+d#W*)v$6*ys1kHP@7FOQ@ww(BEWE1)w?%BXOE3#{!`ClWN8H2 zr!KlluWL&P+cgJ+zIP%kN899ksuffv(H&+YmPt1=(awcTDI6@i3W;*Nuvwh+p{T=* z@^FTVLcrk{)RB8JEDcdWh<~`LnBa!ibrd%h@#nqAj#5#M0 znx)Id2I*wPfBDRT^I}zHTfGMl4EKtGpQvs3AnO*Bq4XApvKM0(>#i=bS|x`RM$-Ks z+6QX}fw~>X4`K%q1biE-?!OX}9G0_cRRwTph7hE0=*@L_qndOBgu=F{QMJUMr0$aX zMUfA~9ogsWzO`&*S{}TP2h-%iq?JuU_ONTn|z)BoUpgBCmIpB1N=2 zwj;BiZ&p|mM$zRDV2$SsFV+^-7RP`F`s)PkA#o0}ut|+C?(w2D@NKYhJgt@rxX&9fu zYXZiH`C`JDi{>ozC}e!e2Bx@PwMCOrp2S8m0KbT*U1Lb4i=tIr`;el3KX}5ZU_&<`M zgGd5;rOyw7rAD(rT*`F|Tt#`Z0@G4JSoJaNZBuOtZ!zHtBt-l2&sqFa%0J!l$13#z zGR4M4olHNVuG5i%@#i5`9H2s=9tbLwD_wtbPm~J zoeGZae5uQzDM^YVfut$daD3xRa5xqCjRm1Mw0$N@FzUP z4e_9qocmxz5_7}$6cyUxZf%!(?mC`<2mO5vziB2shy-;q>LEW*+Jms=YUzOy4Se|8 z`)qvJ6P}`d7!q^y3(SfA=H?IAKn#G^C53B8Zvl4P;oePB&%kb^DttPD`DRI0Ml=WX zV7`CI_g{fdyhBZ%SFy7N_*p+>P~VN*iogYU+8?5`(?K*C5bfV~Pptl^yDE%3#OTYI z=v7v_Iu1e|$eM?h!w4|!0likLw6mzlW8xoLWAWNsAJ@D#nzn`6*QLSR^H&Sr)DVOZ zbo+aQ$#cbaqs@4J$5ouJe6^YWTO(1%GZPPh4chp)>cJzdk)!XrS3C^jpK>HZkn!xE zsPPS+aG%sZADj-NBLGoF-L39yZ!3%d;z1MTO-DA~`L>mqVfw=Dmbp-EO*UWlw$Wv4}S?X!C%2UA9gqy2t z^heRgp#}lh2uvcX2=Zrmh{4e^QAIre(+|PKE;RLIM6|a`BY7b|@cvUho+IR5cz!3aDk-|md^lLE1-lrI~G(`X!Gs7l7{j$@>`k_xNVRfeb z)LGhqedg*vm7nUSbjk9S!zU0fkJ=sXDr{0?M<+!tHw3;swG-ZN&})=K9`FvV@b@Zg z<;DJEqw0+fC3YeZt15Obleuu3tiC&C>P)1le=t3ITX3poj;ElHrts{8xD#t3u8i=e zY%=TPoyUAY?rSGLxIv3n>6V*}$IT!bg*@e?2e3Q7Bv~G2a_ui(>yCe@y1@knq$2#dK)cXEY33rtrq`zk zohN)^iU{5Gmk|_H``cKJy?*VFu4TJ};ZX@_V^KSOM&C2(a|0j3lWSPpNH>@kPp+Mb z9-`|@=r1|yo;3cFra$n6+gLRml;JQ5g%}(rf3!Ceuo{_+2Ver{_bvl@ElKnra_NU^ z6_}dU|6<+$QuLoi_Lq4|kZg$wo$(x{VnGt%Y|$PGT(1C#_mG6IMYsF3uSIJAS6KbW zgSa`WK3-Xdc|OjfCs{97%}O)BpS8-*X8ASbMR7~gf@p9DQf=db`smLgT==7(36A)4 zBz=4@M1EP^D~5tgPE@bxy3F_nz!J+}E5i6=%UK@h0kC`nUDpt=@%$rL0fh<&9ys~F z7zawfN>^i*uO)YV2fnyg`6Ri0xm*CKR^<+`+wkNO>Iy)DhZ?oD5)Twfa);r8ZOlbx zw&7(Pd1ymr<4>}`_W2b0-G$XqHf2v@VhT5)J2h6W%UMl$Ja$}Lyk~$0o#tfQa+jvK z{pMTyaYD)3Ki8UXlarljj|%C`->a=DsqHd7p>U zq~^%UDq?0{E1A~{;=4;LyVUPjXo=D0C0>9}LP4jTk43YAi(F_~6Z!!;$CdF^a{P-S zNl+m{WX1E>E(IxzD&RCoe^NYvkEkhSKD_;4n)&b`%If~(AvRq7w^nLEccK4B(ti9p zF(2OfAu%6pL+M5tA-ZC8N67H=!9s>(RkwpE5P%FjOPg5##()B+qCs^t{xsp|q2D11 zmZnNHy~d`Iu?CFh$~9ToYVQ;Rz^Z8Hr*Gp_#(w=?}gv3 zTb!W3Bm=lW7js%`MJm3m^`e^e`{+H1@-~DOu!8*wDig`V9^>lv-**v{BUGdsJf>%} zuY7432t)!Tl}V)^tNqAlHM>?&jScp-p1)_ zpih*Fcd4SwF@B365&+>UY!Xe7r@nhPDNn7%GuhfBs3O^!6nf%$Dp%-tWB!1V5!df^yW1P{KYjz-7oMxC z+kJ>Jtv9B+G5$R+C!SAwLAV5Y%qn$aSku@~ z(#Z}K9YIs%DIyDuhh!zQtrI||u0qrW&jJt*O%*j!$DuY?_$a=g#do^Pny&HmM3mA$ zHlV|#RSZ*smH3fPl(j0`N?eFUv?GeHtyJk?2gU(#^vW@UHB=)!a}_pT7cn)Vz_Fi} zx*#tB&WkJ`Ku!}JI(!Q_!*nAe_Tk2(cyyH6h#G{-MVrD?PVY)jM3OZEU8SDH;g0`I z$I>ywI?u7@M!}+9FZ6ki=9*zamNfWbo^SF&C>nr@aH-ILyVo|0c&IIg*X zBvdWbKCrYKqrz|A2a$am^u>L$0(@}3M#3kS5HFgOE% z?6*Ph3n0)5t$w;dfRWP_d!S#6K10Mn7r8SV(9oO?LBBw35ww+9##o5UV<9(oK4Dr* z2xE1?88)g{i%p|)5(EH>i)(0-KtFsxMQ@d&LZ|nlk=QkwiP>rAtoD23suX_`BtQeT zC8ncuiQ#|ccD9KPuRhPS=7#;o-!6ar^tP}v>_Kd;#XGM;vdjwXmbBhf`2VHAJ?7?0 zb=NeFd#yh)&+R;@3pF{lG6Z*W*tzHg=Ax8vC7TAG%_#t{&3Md1Gmt(7G)UJ5$;f^N zCbvm#ovqqB=-LX*+8BWr;>J@!+ev~nM_)+&?<(+m>J4hamL1VwFzeFK-_Rh=K$$kM zuG$e6?S|O>WHS>{7rS6echlYyG&(WSirCcsaz6=HEF*Xy^_eM^z@bK;src?!E>iGZ zE*M39fIiCcArno7UorRoS77d`yT|Grkb_yN=nHw*JWJW&h%W-FO-0(FwJ@xl$inBD zh3%uW7CB{fKEy-xNlr~vWzX@7mE$?)u+9)LhY|QxrZSIvMDS7iF!U0bo{oqe9zBFa zt~-PMKg;q)Zb^ys*yp#66U9Py{|FR~eocmB6+45)79b_M#GdSA@&inMfq!U~j6Pvz z&?hO*a2v2Y8HrK!K& z1NfrXv7rYk?9Id<4JpLSV^F%O{ISwoVfp%>GM)0nuGl7ZiM^Cs$h~3!n9}ks3ls z<=DWi20FRis;evOs)qo?K7oIw%G<~IO?fQIA5M~zP#3=ouNVuj_o3!kwVFghYJyo= z5+2zP>-{V??L2#s!oR+JgZ;uLuU6OSLzwbGvTiCl!S-CCAZ+!e=ZDxGhPBL8eN@DxW}cqI|f3 z$PlT@dn6I@`)?p$5w0B)U?AT4S!VGs(XTwdPq+%VlTYDbvKM!WfPw=k7IWew%Et32 zq6qum8_??l@%(>CHIoq=rmaQl=b{j^9gb}3`ODDLgg!9%wO1sts}kU7qiP2Y3||O} zw3cVKw)%n;{6kRmo@5R}XSNhM>((iMG6=R25$#;0^SM@b+klKmBT0#Qe|X=q(5KUBY03cMqb#%?PXo+byRm%(bgo@+&bId$fAy1P0&H1X~K?I|CChk`P9ESl8-EP|^5RF7V z`pbE`pC9rkJz=htyVR4iJA`(9)+;nJ-QeT`bz)VxH+kWT z?Z9p1=wl~~aMRS-Bn;lx9K4uQo1#6**3_9+Qzg17Y~6OL{5Qc~am+(Q(-Ln;wN)DL zoQ>SH9Ys1nc$2^(3kcR5@-Fq-P$E)nOX$Ss{}BwT$B=5JEk>G5kmU|_!nbJcXc5e; z&vO!=o$3KvWl?DjimP8C$0P|t)+YpGsm9s_Tjla>Z+CJxaHk6``F|TZagSebG=WSW zRtJw1&u5%e2j?*T9&R3%W;vTS7+W{2QBt$-DH|R*dpRV*D3&LHxJ3@~?^3S~0jO?( z%I}fR6Rp-0jD45-C$fyO-G@|7D1dO6X(;IKiCi785PxCXlnyoJ4gV5w8gRs=@d@o{ zNowicOsU|m!!&ide?@HnK#oSMJ^EKi3K+Hgb)&wyVw+LcBy5VmjMoUo-S%nf~ z3;(9U9QoyTd9#>3d(_*69|N9+FC|g+A_D%CoF<~YYE8*77k`@Re=@$(#hA|iDMc-5 zFrHGR#$uD|#-RbzP7b9t|cxI zr%m3s;w#1PVs}&GD}DH)=KV9P(Yc}&VN>+EdcFBw{n$h}nTc{1x1Mg+QH?qh@@d_a z4q2T1qZm!ecOo!ii@xv_Cvel~3olpE@{jaBAb2fpMj!bZs1q?y{pY7$z+xYD2a?DV zzdsicPfU@3BGnhUZDCYO-jl23w}%Q*5T= zLaDPHvVmzY?l+nhHft{)$_lvw8-xe0WhveP@y@3q*+N#4PggjTC4*w@%(S`l>&2u->2G-w?d03`(?W(=viH3JbyMG z0BSt{eo5J-MgbtT1Jak(_^oF3$@(e((*7kQ)8{Kz-^3m~khO*(|6Yf#NcE*=^%<;w zCaPC=e=?!k;X_5T0eW* zKWy}+_49T)yT1l3;oBYW+?`;FFcZ%|K^np?`_WTji5jHpAb43QZ-Z~P@wD)b?m&$( zF%7=Idd3{ZkMY0>{NO-z_GDB^c=h~kNfvn+S!9vLJ9=sg1@ACfI{fZ66Zvuw_@(3{ z>c-DY)emrQoEaDcE+VK)hv&ZX-$!}-IVWH`r~@J5lASl>k6m+`T< z#lai}_WrwumSdz%`y`~c57k!DZ)3fcu{g*q8PA{pwBX1#9CMJOheNL3 zOtg<$#9smGrnq`c^l9R+khI@jsq2d8Uy29fy9?k~Z$b7VzU};u6sA|K;{iGu9Mk zNv{DIq`*(?_9Q#K-pl&-=UTTiIfav%0y*SgT|&Lt2@H$JAuIwOh!6Yo3mL&t6VlM{ zk-DOIemgu6pI;6DKCc!D4=fN&uJOsFzB9q!z<@TYx1q;2^?`}~_xs2#{O1=y#`;36 z?`TSV1^AN$P4I0SFH>uh43(K8?}ENyKM4vJ=|2GnyL16EJ#4)x#+D}=<$O;1v-U=P zro9^VX$?$k)Ij3<|X+ArL zG&lh>d;)}K&~J{!By^%fcufU9-gz=|r>0S31XUsO4@3TV{spWL03Qp0@u`XaCZ)gU z0G_1(uDO>vLRwhtB)2)5>ptpQ+aH}DcP{>n#-Ahxw7#^7ers$tO;tdkO~19|iS+ud zxkzUNUNn$8UtLo-e}UF3LThoJlY7O81gy0J&rWoORyGrBp(Eu?Cl8(8dcGWpEwT>8 zI(ZdC?tdG($Xh9*+$6+yxN8J799E2ny4_j0*Q9^&$8zJ|W#xIFRpLNZo^L3i z3esLs6@GCn^&$3nzkjs$A+j~>2t?T++zbqe5M^WlxMF1?qKvex1QX1&8sM#4JmC&4W;MfY^QI8)EkwIlrl~+oTomnP!-ZHooHYp(*BN0t;>DWmzZy z9NuH10d&uT%=X0yj>iY0K?m|liw21|BxtA{`j=?%4T#EgXJz3e9Un!sz+uSWTfC>sIcSN_;tt<}I(f5oB~(_lHI0bp?|zI^7VE%v zJjflQq>~y~2$v}(%2QTJ1z~RgJD*f;!YO@XA;d=1W6D>LX38()7&b$_5 zX9Q{ig(o!LWC(=6R^5+q)?(H?K;W+UvMF#D+7Lh$c6g4WB?P@ zkx6j-*?{dvU*%fhMl$}@k(iteZs3FvwQ3cYq@@Yy#L}LgiyJ{6gGr3%tJV9{hTLqA zFhkNbE|bAsGDg4OY)$*?i_GS6#}X00E@u-iaM+RrH)`-Q1I2T|v)Npz9}eas7za<~ z)**p`TsSolXv&FzQx2nDc4&NQXizTfYy`jNn;8KetJDKXb?XS|?A3xUi2x)gXCdyw3&_o>U27hU&V3#E z`HZ8Qxsz|gq?IuNlPtmq32IP|UmzRop5KZY`Jhz3MS6U44GM5URkamZqjB0AVL$9Z z#~^nhIEcRBLVf)Mb_Lg&dYEl$?rzJOolN7>M{M$eCuj!8$Y6 zGnN-?5jz!UCb~%@_QfG~OzepLTBd~3^DNnF>WOm+cBV``9*Jrp(oY9~fyaP>1fEa*G!@TYV_xRYcQd_*SctZxd^fIscZER!bvI+s zy@2jX6M-61By zE;aIq)Sx{d-k(bFRBtUn8Y#W5%pM<-(+2w|vHZa^b(fm@n9R_4{&eOy&m8HURT2hE zzpwr2Zq;6TroJKF_Ni9_9-Bd$Cxznq$MO@V^^L!PgPo-&_f2k}Z0)7&pAJTQDfVVm z^VNOqU0gk03hr<^DoGZm{v76Z^1ky52%daTvS04qxzVYVw@;Z22H)&yR!6Mn5}4 z)I{hO&OhA?HG95j7x17_C}WoWF>a}slR8Q@Az=P0yDDgPU9;7jUD0H}*Q z!cuqWGu*P`4()YC9;KvUiKszJd{yC>^!{%ee{e1qJ9X^;;ADgtQjBLYXn+V>?Iq$4 z1RTWMsi=EL!u|LLL>Var(#BvkRL|50`=)C3OCm#_ICrE zRyE!Uc%op_!Z)sB*)*vdg|$#KZ3gRr_)&nCD6qQs1K34?uT22_5Uv`AB$f_fBhU-A z$)U}P@JrQr4sG?XD(CDRy_X7591|FtgBeUw+LN@VVIIvEy zTe%1FZMseyftQIo-Ejn7d;)JJUyC;{qW&`-xI5VV4xf=Z?7Ksb-no8ri zU%v1D)f^W)MylZu$9C^R44K61H`Xf$v_KuiYP035#*-TVH8HbM4LKFle`C+o>0h29 za^be&Hn}i7z!@H1xHvqZAUwPStO@7l;Sq9~w<_#zTec$fzA<36(XRm+9O2>Z@skrC zo~QF=`s?@l8;=*U#^}2myM>pf=JqpOneWEGcSS1TgVfMIoDpufSSpWH;P%6YJW0UU zBD{39ULf=~wAC+RH%z}%shDt0ZD1%HD-Xz^p_eUBg$oHDNeJT>+DQI;x@Wh!GFQWG zB~k&0@rDjoX(wI^t(RiFoMx|T1QJGCU(4}QX}!QdvcVxQcK-_SPdK4{Al&m;nA6QY zbK>5qyU3tip}WYSdIf!FLHQ@qPED4wQMGI2+}Nnx$NxdKjCp=PG#qoIrRFFbIsUsa z{-bzI$JYsG9>PO9xNxnu3`iw7?54%Ba3FQ;y%x{^y~HPmJ#OHnj0lIzsN zk8-)dntmDFXWq#Gip-#1Z-!+}$3DqGVFUnMAY-SW>+$Tse@0i`ZvL*ouQ9xys@&B~ zLXi#l#UUnnR`}&V@VAlv5As5@3aOoO>-gyI$fLCYqbl+umsWS=Z0zc^rUK7SR|vlI zsE(><{^PRAYSGzO<+j;`Iw6>go|^WoxAppedvg6pls;@8agU|wfBVRKGB(s-)W0<@ z1SO7@C+u-%yhOxP?VpD%49dkE49GQGTHdI>T*j5ZSD|^8DRD@9E z-TQ9d`$k|TAf{H2fi{{6`Pwr9+>5>U2QJx3u6D5@srHTofVWE;c$1ZWfL>LE-!4Gi z$#|}us17*wLapUcyWfJqy;4AbnS>L^=ubF;g5Ed1>&=ALA z@mc6KjC=4Gp>Uh2Teh}70#aUScUQwaYdj`GJwU=6ee)CSkm8bT&XQq?>Yb_={G zalq?qn!!OII}YB#oxtgFVAbWjR$Nn(48t8-*91GBP>fXS4s9XwcsJ{8G|#wr#Y^^p z@7#j;)DkXEaO4SX!3hgbXb10NeZ~g0cbN9qGM5E^RM@ zYf}wzC^m&U#Gha!aYyt?K%o6C`iI{pqp1w-V+hH8j8X~~LT>f$FYsV8XJuvRd!CEK zkvZ6d@SuXY_6Fotb13gb=U9Ls3n~^-p2uXh`702*8A#=-0_IVHEeJYmAo5}@b(?kg zWV9QMod`mEx67Di2%q} z2jdmaLlTF70e*J|gtumTar|j-E8j8x#zTBZFcvqZ}Fps~$66y~2M8{ZnJ^IJUfY0!^ z?A;01x~;iANU7P(_X1K;52894N2o`+;V z$ubB*HGdh_ zRF9U`*U%_)5ZDN{;!+bRXRN%>(&5d!kfyreZU&U#$kfR%Xv`A^k(PYINU-4d$pLs( zqp8bw+=D&AY2J!lj#7zsj|)QQia99g1hQ7hM@HrkSIADh+=@u=0Qq7kUTnsG2WLj? z>DELD2aM*d?HplvJZH(0WE8;~U=*=LyUMIQjAIreGY`!wB5Ny$JdjoDibFMEwGBdK z+wlg93Q)P4?_6Vh|~G43*NCs(T#-X6?5%gk#8`=SQd z8;Q*RhFn+oJgdM7C}0FTA`6%cMwK#-+OQeBUDITUu?b}0Gv4o-4gC3cXB&ZSaP0N( z#=UPpk?z4Bc>fzgjH29I=y zzOmT0TDOU!!M2p86(aqz8K|lvJZl*(S7fo(3ATmKX!d1wE_dKK-B&%kbKAVoQb0=E zr6eZoy;@Ybo$W+$PpDc{wkclrZRjgwz*?j4w|X%^RC3V1X)h|}WM_VfzRVe$AyP6C z6#+d1{SevjjWWpFAD++;7HjfVH?yKAT?@A3&R;ZBV2YNQ8vQe%3qXKt$Rt)hurWeB z@r{n%TvDI-$dvP9R~~>cH*(RQc%oQSDKxbW?~#aTdsy>kwTexSZ;qviA{R7yG-eu1H%q{;zbPRaa)TVFSWn=aiRxV)B1acGq?; z|GNd?qrM#wbr4*)MgJ0vjdC@pGkra6GONG7(N(ti2Junrj-5>it~V80>zK#NsSEw~ zR=tf1)?_WFb@3kAL*#b1&vJ&|A<^t zJ1CMf8bB|V@0p4d3S1Aa2f&jN_=%#S{2Yfu|?dZ6olZRM}r8BPh7a zRu}Wrsx-wz6Eq;tg}K8?g6)RK+%|Jt!Uapnn7>`V@RV(s(5=aWqi5VYjF6gp zD+n75O8OO^Wy%!mT@4#scrtf!3>&`3QnD5P(YIh%nfZeYJ2rNncPF^;3tn1kuBrqE z{;xo3v@?>>L7ZoYicw>RqMbUZ6&%7quQ+cH3u_9PjT4S1b0KVYa63FGex7%`hQ7aM`4#uRw;<_yP1^+}ea04^-r+!`l!2QcrRbz-$6 zLv87db54k%oj+$Z;v>aNcB)@M9!48YM%*T=JDkYUC3+;_j$VyFFs4!ns{vvz1hItN$3==mw!K*EGtqw>Hd0k#4%8-ynv6X{&iS$=npIY ziqzG1sS53l9jfE^ojwwFEm$SQ+u0Vs?^eVLiT$k4CF|3qn{nV6cBUfuycRcqUep5z zb@A7PgE~|~;{T}q8+o!r4yIWrMju9nscAIS5E$8iCHytZQIG14h%2f7ix|iYq=v;# zT7fRc0v_wDUOFBqcn*J1RjPgBfhsZrkzJ3j~vvZpG|Sg*qT-0Yk(*nV7U(CN9zps=Z_#e zaOffqkNobxVDGqZ+;Ydi;5LYI8;~Ql0=>V~<>_XH^3^Q=(6ORHjQ!*epPlDMI7!h} z(nSRR=tgii9-4qX{R8oxfYNZ6+B_AFO+cRXJv{n3W<~tc@I)Xqt{!QL`^!1ImfQ#< z8}9?}$g;?RV?GYGZVjTZ{*G?4FDO@(8eD6Ahct&1Hx(dJ0+;@Pf`q9QjYQY$S|qTf z5oAP9-poM*+JjPyK2&4`8KcY$FgY7FMJ33p|5hBd*Q0$D0R<$907+l9FuRZ`UnU|h z%T9(jG`nyVx_}5+wi>>iBsDmt|5o88lBf%JOcY*+NFU-UTc~4$K8jp1Dp_q)Vll=j zPt81zQ0(Uod^HLn7-`omZwY|b(F#rgA!4&5eShSrG#Gs5a2^C}QdhL^3)~C#No_p3 z_diG_2aBtFULxV_Qb!ij6dpa ztV+@fDsh{Yw6iKfS`Rbrj{?b;oY4t>;39u{@!S7`Wo)K@d6GhQPlSvVM%34gqj_TP z)?#%9p*csn(Wt7_EnDZG67^NHzGIF-iKg{EtLrOLtJk45)^|ASW4A{EI<@0i{Mm{> zTK`1ezMZ!Z0VO((AcadV|Fzt< zY0I~9Z+%7h&gCe~)2{~&?`ydD1b;*|9(c85a~W5A zCgo&A4}$2#mlw=(t?Ei4KR$ze72($@SC{WxmgQ^XUxiCu5D)4bQ6z{f0c{DtAYXIc z#u43=ZeMhK0=N5j+nArI^AVJbHWC1v)fr|Gaet7K@L{L}WW<+vKz#fH4bP**1A&59?Zp^>A&{b*7uf&4wDI5r0Acx#| z-BWnZ7`*W8LCJg3T2#fpk2*C$^+Z7un z`~D7iTb^kOUUI3}gS#w}Ol33Q(lQm!l;8H`aK`ZJz$-rm!+0CH6DxwcJ_l@H`Uyh- zmz1*Ap^wFLe|5!Mhv5B9av)jNHlbj2GTS;(44;TDSWY~tY}(heBK%GP>4y7h{;Nx_ z?jZM!M@c73X!yN+t8B{R`QKax>GUd;F?-&}2wuXsW_$kiCAsL_-6B$a3FGB}UyQzA z(%A{7!w$MRSP-1h*L`_6JP`^2h3Sb`Tb-K`!1_Jad|&^E zH08~$E4|)(BpY9;Q;fhR$Wm82-Utrk5}Fnp2_}>`OAf{1&b$+i;InYE&>S1QyM|J+ zd-oP@HRAcTKtS|v2+KguqPqaUsv*0(@HzBFF#l@)Sn;yH!+TDEw5 z2eLQZZp4_VfF77d4WbAuuJ&$aX^1_fA+-GO%&#citA1wT^`@Qs3TybSj}^}5C&0E- zcY7B#+P~~Egd&nfc}&E-`{E8?a}}EtyVeYmqJmHN_W44bh56AeY5hBj7etow_m}QW$svv^eum z_AyZN1C30eZj?mYk%ocWPfrS%nsj`LW~LSVT+u>UzI*BKQ|8SelPTUV`#sH_%ByV#aDWd^e}q{4er2UC$bq_ zb@`!Ec`u5#)we$D5Y-V9w@=xTYzcYVkVS8Rm6W1Ft z^Pa@a*WmF`XYhN0s8R4|0mM02>NQ^jMKH+Jw(9j0pzt=qlF_`H{w#cUkq^AJkLgSNso~P>sFM`riqD>I_md)E?m}MjfPh@{Yl6 zbLc>&wL-0dC+>e8?eL8=O;!VhX6Xa2{s|x^I+xo>3Sp~KpzI!ivR`MPI)ywm(dpeID-D6^W zWDhaC2+H{HWN`howVEiXWcSkNzD+{dYLRci%kkH^r2a=Psef5Z*MPUuI_~O~?Kj-)h$M=~ErlMXj1fCxh8285 zBt7_0`y97y`>&Irxl)oy6$^!{H~L(0ISELkhRBn(n|F0)=w`Pkb8B+0aBh3isWp<8 z+Nul>{Os;@5YmRl6TRm+v0cb)$ST|^&AsuJZ*fdXtFeN~ZYOq?&nztAOJZamPZ6FZ zQ45{N#&w>^s{iAr^>I%9>_UYtncc|(9os>9Rqx%T$HyUEW}AxG7~ssex$DOvTx=Z^ zHCXsU!@C=NG#t=20}VUynnpt& zZvp$lM~@uVgpcZ;p}NvXavvw388aoc@9oTvBdro~`Zd3H*Lmp^%7UYz@!U2~3_RAk zQm3Fpd_Wm#K@p*x*iv#CvGX(!zsT6TZvjv@+O%y2Eo*sAm@VC~q;+(V$Z|Jt74esh z>1KN8?%ZA;$m&Af?bE4H*Ldn6<~8o_tx1o+8&nm4skC-;+kj2Q-4XhWo|vl|>2W=; z(NW%6in`>hIH&)~-c2ie+}T zsZQ)8Trf4o?VY-Jc*xE!Ua?Lp49Pl)`j%zgJaQoGf(cU%kZM3G*`4(avhKdZnWU8t z_<{|hR@QwXr6+oeYODGET772H%M(PO{#->VeSv!IhiPxYTfxIcaE ziyaBgkn}yC*RxjHUQIk~FTk4XXv&@@u@Zhm>MAwN#8#1MqIAh)j-TxDTr^_bbcC_;DG zaL=zPT%%v;U7*xH<}*#NH(wRL^;0(+jj5Dvc5R^m*^F^?gYj-jWE}9NFEYC4N!H`~ z-HwOsvR?T|c_}Z=l0|rFKEN6QPBUHdE@Co+jm9r9>|U z{>x~+6!8L*)GZkQTZ4t!#&oXT)Xu5Xriw_z9Fw3RFzum42j^oViTiW(JHPGYgswbW zKv{qGpMRq7AXzD+A-*&yX?Iu=_O zNFv1n`+eba!1hMl!vP(d)%N0m5o=N$@Z7U-z)DO{In8^8Tx7M&392^w@LW5`LMbc@ zv;+6fYH4igRRIWc$yd5}H2QGh61JR(526K5T>4oGj>81UuFBn_vu+G6n!|nycO*G;t?6_o4DdPvF||VH?wcN zKHwd9G6KoW>BoRCBfxZ8Y4eD?`hO|5Y5fdr(_6V)WSic$G4E?=^Q*AEazP5)L~j0~ zusC^82DX34trovQUA)@)H)DI}87XY%xIVT&h4l=!-{+xuY!`fz!uGZ7k@D_uG4~t8 zw#pH1JmBte?FjNl+Z1GVc^{9IGHh|Ks78zrKT_dRFH+&dpnWsM3@z@<6Tex;M-Fg{ z2prI6Rg{*Fbe7Jl%Pe(@q^*n5QQ?(>+U3M(7_Wr{-kWtPG(LgsGSJ;@ga|TMPT}U! z`0ht3G>&|d0GhM#=ro>QvSDd!PV_+bVz07#=RUMi=YvEG)<=>fa-y9gW@p|y_o;7` zEZ2F)Wn#KVfVEIt^deLA0u|jZx}AS+=oJ(+3zpieGhQfQ3RTIk^uVV~bLF%d&3h0z z_0gDot-(akGJy`ErPYeWWw=@<5NO7QAsn!&TX4tX$xwWV&evS8UE;OhUL)co3rgb`a`N9% z`Z)Bwm?1I#2J<~$ZN3$}QYk2)guLiJn&cL-P~b_rp-KESu_B!JWK z{^#2*;Pr-+y=8IoN^M9B zg$IAN*Q`Cn3LoODo!G!hFoSYasF-Rs)K!nH^&;NIAM<$E+Qp@Ez^g1C@@WwUL=DgG zntzqU1XX{*af^o)QK5yrk9~&k5EXx!c+wBQO5vJHlA~WyV;cG58@Y8Y)((vI=;?ucOsi z6`owmkY`PxtneJWK;nmOwMvU9W!i#TCM@ zndQ2pe^SitQaQ1eDCf4xWaqaCP)Rd(&-E}~TKnp*1i4;oQY5%1QOui*lhg!0VbM(3 z6*UVsLc7ZtIj#Xul1k?oXoF8f{~^k04387Oa+BVz2J#M^=Wo*5ve?0%kw5nBz)z1` zit=+7^dX1)40#);a2At$>X$rCw);kU>C@>-m_VU@ZK11n2@2J#&=9_CZ@u}NIlp-<25K;xHpq(OKnlQw) z6hmCNFy8zKfLO_A&K3eej=akJ!?nvzVV!wRfIvP(68^_S}st=!qgTJpoTvDe{k}Yx}lzc-|PI z><0y9B*PGUtLbc!P`3bA${(lFVE^vXIqQND|eN9&4sYT1irZ2)4YMoAE5(^$v(tZWa3=vBgDD9 zWfNp7k5|oqR;3A`@hbJC(|`Sj2k7%iCBCE2I$ulG!)CH(FsS}Uis2pJl0EiT?OL%_ zCc`g%zQpG1tO~S#>gDj{SN$O;dwU9#_J-@vXZ&eA)RVW=lf?3KJ+54`C%mP~aJot6 zMv;ZXXz47a|J!B`!E`ezX_&54&V-){jNJeT?r!&go%Ajw(Ovzu!I*GSp|-TI%s}ri z(5!g{vQ?1imFZ6%{S06jsG9AKV9zV+%l77Xeg%dx`W{6Yc~?{=O~hBgPY+Xvr=<~3 zC+6yl$@|QkFp;|MRsfUPROYR)88SnEy_jE&3L}7LF+F({Bl9-@3rttTquW=|U(J&z zdZn8B+fY(o^HU(EnR+>~XGp;W;Qq&>=-C6jaZT(cM$oFLA?Wd6Ku{?(QiQagtw5Rp zYGkiSnlq}a(-i1VZH=cj?rRi7<9GvwZPUFt@0(;J=MI6ta5QmaUz3;g%${qT2Ep`= z-QB*D)&UIH`9hX5H6tK21TvDxiRw;fqX1IT2LzYfjMnZ-n~da&*SB|LSF`{Akn z{Q~X>>(d!0kulhBq5S54Qj`DwAb)r&Ie_fi>5#j|O}f`oPkMtuct02W1C~QrPC2vt z0}}IvaT9mmg}C$5M{{L)_2vqz@`eX);1l+~##*cBknC~&gcCk$_KU9u^P18z}7nqpyCZ@C> znNPLau$_JTfkwULQ~+mjvv3Aow$lgRBsFi!Zl^{M4x-14=!}gXF9=7E7ue|W_&$;Z z7#ZG8RMs4fcMB&%C);L)%h?;iC58OG<*2x!DS|k$MarFuZQEJ>f8gL=^4u?UQ{TKaSQ0Vz{pkq84SfgHqF;o9KQD7#}kB@aT zfFgVNv(C0k^YS_0Haq5YFT{*08qhqvg)z2yYC2%pj26`eJep{6!yS|5sR% zXk-#+CL;nzlM#NAK_mP4frsd#-UGgm|4i_quG8q{4E`Sep*?iMNRF60D!(*7tr)M} zK<{4Tamo^Wo#MdSD(1NtldZgARIh#;I6|mbhln%uD`);DcjL?2cd^7wF;Cq~;>2P+ zU@Bj9-l?1C7dh@F=(`>L zQTa`;*$Mq0@yZp|06^ocInJKUtgZ|t}9)bQ7d8q*&ISLLXdgltB)xirV_#G@YJx_H|Hq6nB zG4Ebt0v<@Wfvuubv#Yu2@53tY!F5}zICGiJ)(EY#i?&cM8N!u)Ju{6kW%<1bE>3f+ zX2_DTvZ9*-Geg356qwnqnyrFNO z@khTA?p4t(;0|oUQ}8NQ0Z9(f#R~7!Lo1BC?%6Tw)XDe@#FgxuN7gn6op+}tmvAzQ zJ#l)=y1znL8I$hWNG5tzy+491+PC?hU-Nv*MVfbu$Bv(gf$<_V z3qso|_pldm7wiN0O(+!*uyNQ{+6k{;&>S~7v7xl*^D#6yRBzBASDrU@>be)V7W=(l z+7kQcv1j6_Jg+TAQi=q|2@VNl--rZL^lM4*ccE9KT>omemISTOOp(BSVe3eczcfXH zI(8d{NMOXAjePg1@W?W#Fru}9UFF`zi`=sY==czGc8xm3Z7hi7?sCu)I9LTc-KZ`+ zZN?XGG0LX|S!@ykN-VOSOhNWAov61h`M$U9ixWGH?;#^;H(t}4v>R_mdjuq7AfQA3 zK&ZS_!NCy)JWFVHYbynJVV+mR4ii8z6GW%37BI7q{7h?gf!Exq-)g}>{JiG4uzHlw zfy1LiZ9l+=xUbjpCftW^FmaY_oe6X%L%Vl*{2hX9-2ufvTYrVhzQ4@!!q}SP3!!F;c1r)D(}89_+XEGKrjvwfQh7Ro6SG;nlC=YdmEmC2Q^s2h8B+XF_gCK3!j85DCssp3 zO>sqZs`w-|Hh1#7ae7VhlxSr-{bK}7R*9)Pm-5lb-7DC2)vU?o)V=6$%KDTUj(3P} zZ`IqvTK}D7msBqFQ^pItF=6mHk?Dl?zVXo=J2TW{vh`c&joksh&X_&S0x_CB)bJ~; ze9Et2?&>$fp8W~YJ;RN-JM^@q%y;G&yC)1t5`^s3MVX_fhGQ@W>n^1eT0A|HS{bMp zYE^X*&stTj)-oVSW_?q`#!-Yp3Evdqxm@Y|)AI^`(G%ubK2818bu$;%k1agXd2DQ9 z^+ZfdHXsCH_tnH|uqrZ7`MNPvBGR~+#s_Ngt^lE+mCo*}MY3NlY5lQ)mQ+Ij-0JZp z;$<_Y+p!_Q~9MV)A`lfQ9_OJ-64yBtdV>ePp8Ey|M-W5TS zk*OK;+^IW^oGSXnv+zns74th4D()$GKm6X8_8{fsutrX>q_1h&W=+c!@RFL5VYJ4_ z%{h74;OL<$@C?elX~yHMH`bu z@H3qi(+S}i4@IIP<}{=fVGo6{7e18BYreORIi8fjKPe|AP$>rSm4MVXN+3OkgQ?YV zoWy9xo8p&iiYGgDxAI^It2K2%f{<6y-4Mo!O*a{bM=$k19K?r|U^*ium?rq2zkRNS z(f&3cP3sY;(!yw;<5O_sGf?o~U)tH#--E(W2cXOMOtVc*w7;TUOe?ZaOCU zT*dUSCPNsdqnl^j=;qhs|8<7F&aTMvhFGEIoxX*IuOThd?!R8gJSN?C0ZgZ{xvkj_ zMLR3+-s;TiwYD>_Ajg2QdNS~F+sBrjxQ`4OfChG^s``s9?ZmWV(rmL%U4K3+{{v6c z^yz-n$NEi=t|=ZK9iD~s{hBu2vYPu-f7IMu5T%yBTWI@riqzZ*St|dws~zxzq^62} zrddT|il=r@@zjnX{UyB`iNEWXRiN<939DE6O;xC-Vd18-6zhDvJ)t}0FCwJ%BnC-n zlI_j@BIJySHPWNBRrG=1zaD<0dn(9vw=8t)?)ML!bY%4qq2y!4kYPt-gK6W?ELFWF z$=}WQWnnmu;EYs87H_BY=#aAjK^2(f$8+^nAlw-1#)!g&ls_X-U6LY5IZdndPjd}P zBg$0ioz2o;E9C#%WO8WYE(r~$7hD9BYBSC871!yItE3xS@}s$1lXZ@i$&kuLX?J%r zdTkoRt~e_e<=H}rO3MUpEpIpSanMlU08#l*uC)yfA7Qk0^{^0$LZ+pA(>{1Z=5Qfo z%MRJ<3An?~GTDr&CO%4^k^nqR27qTW+p5RmW*gbvi;y{^N3Uuicu}|EGV>gzs>f%eRDzuW> zig*SOTchoLwwDpsooA~z)W|u0BZJk*Af=pWQ=C}DG}5g49Ls0rzvOX*#u3VUDK@Pl_$-$N$Pn?~R1pD_a-q;`!Gloat zI5he=KCJ+J7QzXAV4WhWttzcQs@OY+9TtI(t5%?(nZrbj1lQTfJTvV6XJjOs^;h!H z{5<&ZApfN_Y0Q=jcxXQVc0vB`3>&l6dpjPo=Z`epXPmwj4W|_r5y-}}pFmvxln>%E z)(VvHm`(6^9|odaM?4ErF)4&@@pbM0%lF*ZJ} zART}PdzSE#%zh!Nv7yLND1}mE+PX_taey2=x0)|zeM4wnuWTw54%aKz7m03tiI@c+ zyK$)N38@+Xh9`WAJ_*)P%ud~dJY+|b2)@IkshNL*?MGfMxqlVj8vbJOMu1;)c-u)r zCXKh1$NVO|&HV5;@pd#;f#J7O&10H%bKdz-3U52J*~#lh zZt>v}K|KSF@M~5#T#5)){!^&OTO@g!ZIehruo}AYI6;cb?EyrE%Kdk~5APhtkx_KA z(X+!F5`FH6Ny=rBd)2pUglf13isk9TA_lp?nx>e%VksCTo;jbbi2GI}@#?|~GvSqP z$(ZQ6*Og;b?76KwAZw^c!YdC}l<;EvV{^=OZO05|8aMJcF;n}MznPiFj!iMs0ECel zgg>E63^TFiy&2+&m?z9jG1IH;2J&!=`~p9$8AGFW-VHXe976wFqZzNpCRi{3`l%h#UG$nJ)GZ zY3x7=$9#`c+gV)uCQY=$jK8+W3~!N2#z1L7gSUF;H&bcUF)1n?jAVmKzqo92^1oBm zd7Ujx^4WXsKm4WH$Y-NN+g$oORwyod&^F1Oxpnk}<{9Efo6m_&G(sASR$-DUmN;vG zSi<;reT%#9El8=kmUqCf9drHRJdHWF=rt$Oo@<*i=4#7Zq^2?ATA=2^|NYI>oIWZ= z&54Mpt)b@C_ok@XI+n2l6X*wbux<57SUAp1<)=|!T!Mkb*=yqE4Imf}+!?>f{l_%OM60heo zpBtxP-6L#1^1kJduWxmZ3_ba-iVm2JU&{GZ*%>i8Sn6V>~dW=V*{i9dmm} zmDW4w@!U9MNTPb*{2__4`*t6mDBCyhZVt3kZ34EB8Z;#YIZ7tdz+A;W5}K6PE*)Jl z00*jqO@}AiZ~;im$h==js@$NzL|Av&3#T z+tOR?Lu;HZmMKnyDWC+pL1zl6d&ufd1Y@R&zYOBZ>rFe#EnFPkFtCqX_s?&&1`s=f zujvZ?eh1KfCduABOr>h*r=P9!;M)TE1pzSPlr8uEjWfAr6Rf&|!e_m!Y}x%Eawi$- z^#gv^mh0-Hx}Nx$Y}QAdhYSP~C)S(p8jbc656ug(K6hg^e)vwvz2Yvt&#$6&P=&nW z%~$d1T~u+1KxonMoHiUtt7*xG8SVN$)6vutox5-ijiy)T>t4VoLSAv`WO5VNE56c*MxdbIF~ ziJkX2Ggvy_&O3_opvnE@9xH-J!64b`YBzIkcPErRdA0Q$;=Tw1%tH5poBLo@_vim@ z5vSnjvT|_Lh1x9E00iHn;&*f0WB;-_`GlZ^X3>2D9A^6StOL(Pt34@78bX)Hx%3!{ zzWhl>nCpQb)4_&8SAWNq6%9RJ{?YNb^nCsdQQd4<9JJ_jhx6(dX`7APmTNM+QpUUY zss0?w9~0KS#vOh$;ZGm%-dNQ*%`4N_f6}sdn4bR4lS0D9k?yUmRC*69`Bwdz!ykQP zQLct;ICT}<7-8Y5o;Tv(dlLVy6@PCX=7RSpkl=l)r}27vlqVm89l3PDJIU6jfUFLB zU!a^?2JsG76$j|gT}u0>{`8;u3ZJYCE=t=um z1UYP4$$OKv76UuQS zuU@sD&gG8}+k10B_&MgY{v4-2qxDA;$j{SG@M{Z+_b`9Bz2{2%O(16py0Du#>is-v zf?P~Wnjo+DfFKh|@^k{OcaZ+P%^#t{5O^UgrQRDhMZK!w8UwGtvVE&gw@QDRs4qL~ z%XRwGMSng~9_^1beGuQff0+g*rrV^({@xnp&~lh3w398+`5~LYTgrDI3puocoDyOu zQNS&_W1~N=Jgt(Di?1m&sPSxb?~nljBZjZ;xfQhkqZ(YNKX2>Lr~0#+KaD3fp3r!F z<8h5+8uw}JOLnvU0~5%=@+D%+~MKR?_H zwZBTqq;vm5sm5I!dzkiu-5)-nodpm}#%xntTRln(wqM=GmX4wBLC>alYAooMpObn2 z4uRmI{Te^_^Y?dzLc_13jEux%A7#77XA8pHHG=yb#&CBxLiq=KS$!(X=1Ndg(eTs_ zfL@V!SR{=stJP0O;ji{*|Jvg=y5(#vmjGkSb}Ef?kr)qc%H!>8o-!*<(bC4to&4G= z3Ys0-iCS^K%~)H*BUvL2Q+v6qN9aD;3+xH|PS+s?eg)Mf&iuq&GB%VxS-WZ1i}v;d ziJrTlpx?sUMNiaj9(>XE$kbjdnNpnE>8eQX>&cJiDpi#hutFZyA>h2&T>FL&e89O{m)XzZxx8isasNy);st>Z4=xnny7kdCVE z_(&Lqq5H6Fzld-Fb~!5F+bq0(*U6s}im8n>zwn+%GHKPXQmD#ApW)iP1$@JWx*wSSADk4>cbB_NDdbc2`xMQ0T*YsH!fd^}~7spt%st@t za;(FTjAHe#a&P|^v%kcUJkDWc{xYt_oWaNvWIO(kWW9lVR{3)Z$6RGOb`c^>%{R1L zY%is8kGtq=6Vz~-8t-ZvkHM6*@89pjn!q;^FyHBKCL_e>N+7Osxip`R681&+VgXvR z$0X83r6MZJpl7c{`-ag!)_%X|6S97t!7nCXsNKA~Gh-2!knWFZ=<(pYA(mqo2PZ0A zV6JVr{VXKz-{7T4;-tI{i&;jVX$qapBnU>xbB8?qIa@E4)-W}%W@=%pY9gnna{bb> z*3rGGyaE@bpS2fR%M%yr1W-qFzV<@rD@3=>1-3<@yq{(oML?bcp+hDJ z3m*c6)nrh^6#!nIWan5?0%reUKN!QDV80g_AQcT~6qP4mb?-UM-a+%Js%46Ccxz|+ zjcsi|-2L!Xcu!*r(X0FoL-HuwR&TXS!ceyFqNK%Qj3!_H{KML0MZ*PowNndPo!_G( zaVjS#tZ~mUlN#81K^IY~nsJmk)j+Jfr1sMGwq6wtgG&C}jvEI4>}u0tH4`y@OOtOi zA*5rkMuC^PcBHo0oVP+{=TRAbDAvI)u`dNBNERCJF^Tjg+{fv538+R&jcPE6~$YHXSs zyNt%DGEY?gGYR~1|5s-NY`$_$=?0RI59JybsaOLXLF_4^55)OH`mWOu^;s* zp7aPr$T9r4e~SMQDkXi>9KpRmMpvrUykw6FR72gPb$i)v zf@)t{EawiV>W<}!%gHcM8AOnSOoLM=F>b0DH<{z*Ld(q|g)=uMHKqQEmUQo2Oa^%ECgjY4 zFt2T@gEM0fadJcFhu#V|#n5z@pu@fPe5JPqYC@e&>R1DHZrpYte+y_zc1k1u%^>SO z$_gKIfnmO`K^!2`a06)`hZH^VMmuY+q~*zo#2E~SHSUtd8V+mBcD7}VhgTS%Y-e*~ zmm8TWTD;y7`?pG%^od;=wD}lcNHn3|!-K?sk_aFiXS2#Zgha2uEt=x}Ki-Q-sGXX+ zsqQ>m3pPag;q9I2A2V>v8!pdt&t%ePF3k+uby?^!XgSg^k>ZXnv=QcxU6erx>|ud1 z?0E52ShaVMFaKu)@i<+@^2Mfnr9$2w+fCOk=RQtbRNw%8l@SOa!$`I^_Ng7j3ra*a0_gA z1FZPZ2U&^$ME$r?4xT3CFuBK2YJz+Pl18%^svFlX%3I{rJqD(A5SXv2C*Mn7t|m== zF{(T)N=Nf`3q5|)T@s}y^`g!wj?h$9yOX)`sI2wmWvi!Ks2+1RnGe#+dsKguv&lZY zlf(@2ESA(&zRYCr{o-%1ToD-EG%Eg!A~tW=5~JfS58n2|uJE1=-u|Vx`+~Qd^rjQl zO}Wlk8{VwoZIy)36~Wub$e1SZLcAA`eOx(p+T&noS>DSw4(1}QFoB30;#aKYCqGA>C7BmgB*Fv z@gF~jmGX)SfP_f-#x{I>NUu#Ac!Lj6JK5s}<#^K!G_KN`;b--x1rO2S;hf;%RR6&g zze>dy`o&Gk6s3IVr&xG&_=tt)Bz@F*7J|pyF{o0fZJ8A5Og)&I_9wHix!sR@LaVPq zx;y;=i!N`aNT6zP52XujZY^0dwZJVfC(JOm?y7?fkNJ7RO!2C+Hjp)nF-Msq_vBfy zozERP8j_l?rr^2R=FfNUP-^XBqYQOkm8UcLQ`s)E5ahdGVnukEKsoL!_orAp+2eS9 zhs{P2$ms2=&-eSEm3nc)42;okB?rR*U8VaNDc-vQ&b0p_)l?@{Wo;WbUx2LOtNVvk zYcQkN$`IQ9NY$y2c{*@L3e!E*&*%M>w?@1oKHle3B&hW)4Zus3yF;p0xaOKrmSM_r zys~`uZ=W$<%KNY4}?RCz0zW>KFL+l!f>CPe_S#(i(80QjQuQ`fuC zc0OZ%XWKu+#6rHduiQs#Xg_RWlvA&7VN~O%w${b}>LHdU&-)nA5E5Vi6M(Ly33s~R zj^95V&4_WqLnCY4vrHp`=LGVZ`Fdhk@zr#H$3rkxf1OjSgDLt_o+YpvXe5nn{8#cf zl#U%Unwz-uq;RVb!puNRSD)w`C&QUqA?gd4hvb?yPRt#__=B)aG~Kor{@!<679IWA zEvU=*DqC~(PE=%2Rz3vy#(nfqgAVu4s0qRO>8;@5;(M*AE{Zeui-cU6H8&o z)F&iU>eGjO+G4fXyV)pz-=U&%0;jcURF@jt56L}_p>?SoE-&8bzIll4U?-psE(R_l zg9x{2uAj!R>rI;ScgM`qxA*zxR^21-Pz`Kr{4*Qc=Wwn4i)4@0KLMdXjXIF8nnvN*=s#&`J7h&n=ws4+hO1FD`09n0E-i_|+n|;qU#oE|n?#UM;z@DKaWH#cnk%cggpig8`YW>O`e0SR6{R&?* z{81@?w~=ih;+T?b<38l{6#Yh9W3tCA9so7jV}?oD=#By)_Y;hnpz+Cm^=W_V%xj)hsQ+*%5`t|>y`WV%_m-A<0*dNN+X2^1%I~y4c8o&L) z0rz(3N!7ub#=)7~<2}9vBkWc4yvn_fnoSy*e3CT(@_2VLQ$j#+FI3ANY1GIQ!;X?^ zw#~jln>DHpw^qPoa`*&O^)`#eW8w!pKi73l(5LDAJU~K!3s}nYnA~G`fn|hYvPVzT z(9}Hl>KIEH!`-So(s)U-a<}Ig_rlT;w$RCynnHDPYjNhzAYe_#8U>JE|1C zf&BNS{yr6ngOuku7zvNy{?AG7Zo~^n4HfZCA;~S5OIVCAt7zCGxya9+64Tu0Lu+Yp zXJz__L9#P{*vSo%A8IytcjmuNShw*L*KFS2nV}=|ocS-{B|d3MhL;!!<@R!>Yh6|| zytMCimi4#(TOS(EC`OyR_dI7P(fBE*RxcN?lZxbN%HCBtI~!eZIO?C94Rx(U@n2>p zfPYIq;N4}iCh&-_atG-4T@R{Eom?Pgh=8ZjN{PE*NjD|Bti$8Y4zGI}q9~P%4Vtjf< z0PepZt#_HTHB(uW+z(7|;h1>r?^%qV=dKfU*5wh?^uedm_j0Bhk%eP-LuBttIyuNwOIg zXyx+cQdpwA_NUzHKiaYRira=LXPkbW+c3%e5jjDA6;FO+U^Kyn`3M1<<~ZX+R*lUKC^}O8^UUGH7&V=3w!{p z&~EwOSB$#s)-lJ9SANNJS%KdP|b<%#;_fw(7+QkLRpevM2xU=hEmYHI;Q&s7X@Pwx; zK$I4O^G9<#0}V`EQmdoj7~OtQz9-%xh0Rle${q|-+xHT z{m)H1|HHlJzeeK(ScJ6+8kYCsfOrOI9p+M~yfV$}#;F#&xXlD022o7WanfZNr z!vqxTI`;tTE02HB__-L#iOFdnAr2ot`SdHl+xMxi62C6y7lLQ|a^}v(fa>1-q$qQPbJzRH9TA@ZC@RjNJe<9JY+Xnhj zOWQtnf;i}J#xgbZ{3A8VcI-0ox(#V7=%*z2p1)I}ONT8-v%NUNWJ z%*8NkxE$NOX?njG%&Kk4;}1m1Y)MjSV~F zL*MNC(0&;&Wj9m{QX`nUqIkpgqkqA#Y~xql1-@;ZIsa27nySvSwNd{VWCN| zGe67vq`zLj`&|OvKW}r(`S8I(Bm3|GCW^sC37AOrpE>!hWeH% z(^Ke=NDgLDZ}IGnM#z~2oO?@15Pvn9{|4hXteI{ktL?ukkt^F>cY|T`E#%3xMZP=< zmp>sWKU(GGcy}ML|~uXY$a1%lXk@E`PG$Mxokx{CfU8%%60BL;j+#wDBP%iFTtX z z(k0h4g!r?U@z)rsV6Db$sRyHy3%gfVpAwAv@O;0!sW3g?KlpZ4*Q|X!RP_aYO|$I& zO7^GG6Krf=r;3jj`QtO8 z%I~lVgRyZp9|C!u8Xw?wjXQZKF(mpjgqllKpZqts0-5R?p!#0H4sw_CCk>kQ-zc8U zdX&wK_x*P>iN3FD^R-Jr{9Znws}txu-#=}HuW?O0DMxF=plcp%!8JkX9n+?&AWO&{ zF_SveAcp+M5z9?m%=>$W~Br#XbzEJoima;0gkaw4;bn{pwXd)sW6#yQ+pm3|Un0O}kqtq-=MQ z%{?3gkp4Bn|D{cwwD*}>tmP22b^~durjlyH`j3b`RElQ%?j0O-6jq|At4QK(W?5^i z4+S#?zH(g4j^qq`GSH9R*`AsjFM)mx>A3DxC~xqPqAE_aOQ{F^J7N2v3l1;Fy_r9z z^}{=B1k6;Uw~h>HL2F-R=s#l4fuf23Q^k$`v-M1p{tLn%2Flso(7y-$vfz_b6OAp$ z_OX=K2y58S#Y{Jui2)@u$FN}i9%NeC=>AY|EvS%1(u+?pK`-}!ix~Th?AQMN1U`dg$LM~F8AZiy zaKE_0#92>?6HJ!ie3MALHRs^^bwo#a+vAxckoL+d)!i2tOljiEdY;K&p187xCrXqz zOzY*IU!a2xr`c$0!h??@05_<}iM`0oxU^=$Tney(^l804Z(3&D`(gK)*JO(E2N;{_(D+_`pPY2v;sX9Gg?sO&&Ebr111g}H~W z-x6~{WwBSusqU-4+$CE5NB^=IKGr7t`-_0&m8^u$SsXuEv%NtP0z{`BWZ)3joI74 z-&$hY;M(m0Zv1m+*a~xSrZd>pm9m`v#!*KjiNIg6%) zdb;7t3H)$W_7B30A||$uIUfF9Q|1T&B?J=RRcT^DFDlO5=(Uh^X6W07(tLy4L}` zIb`eb`4qB0oV_KoLxUI-ku6>Pu@?X=8k%_eRl{D1`(D+^3AVgQuw1}SICgM5=7bZ+ z>}@n;jTJ7`FMAzVoAv&IIUHkgfb~wG|>(x;i!Z@2m*l)lu)%%6`96EMKqRie` zckT^bK|f$!{7Y_W-^iuy>%??bW-MvvRE_FT+2F7zdv_LJ-toT_TY9c@AMGj}FH5sP zS0vVm#GPC4>yPm31DXc}0`;bAwnSlyxG#~@yFtQlYuKbWN&j zF2m&d9Be8)AVZr<26lCDL=&AW$1Q}wCeq#g9;aP-?Z85g)-tKd9*?h*f)|Wv2Z}k{s7~aHn%j_C`+ z*4^tRCS#YSY8$WG9wJv`7qS?Aboxpp$w{X6u>5L_kd!HW4kxD(J_o8upT@Gr!KM;s zbOoen%IIEd+Lq>QIE|KB)1;N8n?HR+vXN7UeVQzqv^LqezdHsfC_Mbf)S@cmGxb-N+P+49H zPgyphOG!Nk$&qB+aSiTiEu>;T!klF_Pfg?oEeThUv^9vBtnmHFn1% z3@cnq`9|=w$k{52*~lDYnN9@G@f5l#$z34PD@N2rnd4ROE0pAxIUplYhaKyq)74rH z{nj$1t+^hn;k)PXQ5tWiyRcVaAY8&i6U zS`sUmaUV3R7bZf!r4rhl9BRLAwo1k4n3MV9jb-sqTOz<{5ny`45MX>jfYIARfbQLz z5}-8xMSzX?2a$w@r21rE=v76J%`Ws(BxRDU7{1a_o^RTIJib9bjs+#gc`4-a;Qh<)M%ZXGgs|Ureq>73Y1f^ z!S%BXA5bn(as$8hGtD8s+%G$9z7!c(Ka%>S_`rRA`d3MvG4n8QQl;meK@T+j8wl*7 zs~Qw8l`(5JqI}+~q?7|vy+pf9J@ z1y-sfkKZMLK$==)T8mszCkGwwX&ZiZ>3}8iMa-yPW@fb{lJHq6KE|AzE0$m^=aH<2 z<6}6o)Z#Z1A7f6E&zl$@Gf1@QSU=`SbbwllEE`gw--`IuK4tZ14~!2li4Q4zen=#D zXul2K6-WXNvUij-EtM(&c#_0{Q}>EOQSd|nEZA~~T$m0`=AJA*`iEH^eLk{cF7M_{ zo*8Ww@ZrbeG8JwWGIyH^#Z*qpgMPwgJp_6GrQn4Oq<)IUEU%>|LFPc1Q+sLRg1S zIB*-eJKUh#yNgLo1qRS2(xFD6q)X@Lsyn0IKDIkUV;h{lOOsz+1Pc9Y^rWIs&gO3whOPfgw_+v<3B5Sp~5av zQzFAZKU(Y4lP}r;&l~^z5joX8$z#`w(kp0RyoUMObOmi$y2X^g8-2LO-G%y0{6~2$ z^>v`WWRH8OLDu#8=K*fJ3~-zJpKm||8*B9G!YanJy^)nmKi-F(r+=1A{(Pj+886nA ztj1X&;gS~&i)dMS;^r;%^$#7RcwwF{lz||DIs6J#cFcH!r1^nij80wG!vP=!=WWwl zf-~r|6Dy<~Z*mNCE>*T^sV-)%*jh+C~Vp zF}rD=t$`JN2gXe=8wUngF}~x(HmeBYYCIw!k32G96=JJ2cJiBlkgCcc7gfS@jsHBl zyx}OU4s-N}^(>Y*j4Y5D(yP4T>V>AVnT3;J1JX-$rdcJ=s#yLm{Yyu^axPy~IjZ2F zG8Qk&8hZunF`+esx=OZ-aTy<>7TMUusWYI3NKjC-btJfnE~VPDq~I*Ty&z0h9w>`H zU8n<)qNg?oh}nA`0_1vb{cWCS)4Xs$fN1q76kq1EMsM8x&;uUUBoE)docd)0HkT0~ zKJ49qZ*c3+Qaabf;OLhbJ~VOXXr-9z6g2oc^|y=CWv6m~0yiFDpVf^J>*CR`B!iA= zau43faZN}npxQ(vMCI zW`G6*wH4z{)=ZHk%IJ0)bGz#N7_#Esb-LOHQW&ZGGjhH;EWaxr3Sqh5w3e{!6;aj1 zt%L70yOV4lwm~_eUl{e!DF6*GZT+qDav@O zD)BqJxJ^r)jr|Y6q`z_;sDaG-_py{syKr3Hf8Xzg(#Jt&j=S{9pCIKjpW|a^lh|*im`8288;65+9XJ4g1h6kA zVu$m!Dhc=98IYa%Cl~&a;ivJ14Ly$^-`YY1qM-a9PhiJ@4qd90vttsA@$~rTL)Bxz zV^~BQ@GK+$;Pi_4?S-p(l#|2dH;{B-cs#YYicZv`?PTC9-(p=XQmb{bt0;xF7#;)r zarbcxe3n`+aALPp*vqGOwX$~$t#Gwa#xQ&FlC5px6H0oo(T*%+AzJf)(c5C9Yb4L< zTCyoZ|Lc8HR%%5W&2=>qF3-wF^Oe?TOO4XvRzO4*UiT;U4L6>lbF#-?eD1f_NUty5 zy^A&`iAXS#%BedARoGNsMLP>+(s}MH6XdpwS)~_$SDw2_d|!fvPRk=Ek5F+d=>poI zeMV*%N6~R%GTeFb*5Ro7Jbyf)Z+C2muA4{7~8as zwPs37;5V|YwDm&%Y@+D13;7gKPHg;v@W0i(TbS-U870B}SGHE@_k|OG1dVSS)8meVBme`>M)(k3wsRI+t@F@zzkMy0bYoQ`O&3hqG57Jv>}>;Z{~1t@I8Ds%=Kk>>oF?s`3ly ziLD0OfSoDZhZPxzY_Ef#iU3uY$t?9}PQQ99G z+I|_EPIqE2R9~hw^}2ogiLx_|B6sq0%>uGNTnQm>hGO>Ww=mTvb0u*L43TnfPo_@q z75=1#S=dVQ$J=gwHQvPb&09-0Yua2I+HawIOdKoj0 zp~fk{FiLMvk5XT&KTbSQc$DTZ@U{A@NP#W2`Z3S&nfapJQ2M8qZ=lZ=@dBgl;~yGf z=?-A8MI>>b$%o>1Vxzu6lb((e*_QFXcyksmU}&4=rRvipk|h-fVt45T+0w*(!NO`s zW_ZwdnY!Q=h{s@ojOm5$*K;vn1{ypw94S=vFUke zR}CVpL7mBF%y>;kPa-3wHJR0--g>@ibgkyyTJZTiX;DNeZs$F|O%5IKV_AF?zQ-j) zonb%fx}E})g*itgezb9ds*KZha2^DiB!>eBV{sRn87C+VX_QW@GkNv2r+kg_5Z}EM z%y4H>9BAADrfDh)e}3s=)@ND z-F&#fd?;yEyPglro!C8m@Sat%P=9SNaVD#)dU1bW$U2Bdc3V|6zwL>{$Am}MLr?mn z>*S(rqwAX|96Q;TkG1K1{(Y_p^!~@6MBbBsyx`)={a$zGm$a!}e`<&2;lAwzkQ)}~ z5|aHmFz8=Rq;}zD0iUy4HxEd00x&@m%O`)2_Z(qj(AH{#MO(DjmW?>E`%(M-7P2n! zht%9E_fgFz>9D4h%qBVNFm^r=WXvWhW@eL2IC#{ovPQoRJ@%O)3#QE#k=zx@)$l|; z$qb~K{E$iKRGSl?ecPtB*rpFtm2#)dL`)kt*z~`DpPtG6l8fhyDP5P;y;2J zHQLO@V#b@LiT8N_UD(ijCGTeLMhDH@O}`AjBBl48Sy*E7i$-Lg#EZM%Nx@h!afFNo zr|wCy@|Gi@OsdI=?V@$M3grU2<`@KLJW7% zpPrJ?qe;O1EG9H(B^&dzM1X{&gqtUi5X_ld$Iqndi7qSUz$_PdY4!c zdIX`+lFxf!3_5ii=~##qujb@Sb!~L7+HGSV1nUiw#Wp9WN$iT)lpX7BE(!65~gNP;dlvi7m($qc zli4PR4IX9H+pMBsoSa0GACg>}i1{JOvrR}cckXhp_6le4dX3~NjWAhdfgLO@bwcmZ zO6sPv_-4D3%G1+@-RURNwiiEer3QRoi^KQd28W}0HXf@;!|z&O-YzHkA5B7It;r*r zj3zrCuM$10s6?ujA+wF_aq{OF8RK*vUlh7-MA=t^&Gc*-_2+aghn%?*Ln(6lli_0o ziX3Ftc_tXFGc0y>ANXtw@0s@?dto-lA_=_Ciz0)j zgR1klQ);D2?HH+hA%g9qJgk8xUx>sxnyFnR{#82fOh0d~rbz7~$>mztpryq#k(ua!A1JZVlWa%GnQQRA5lM*oP@TN?e1CEJ3* z*T2X@x)e;+!FVDnr4lH&7*BKTczUNazKR8>P0p})B&G^LnsilcN5cJy*5eiNWgo<> zIT~?#HzN;Sihv~ex$O;5h|iDP*XLKZv*S{FYZ9#+B~Zh!{;9kv$H+BC`xKLd)~if$ z^p{&b$==_llwiJ~5nrPmG_;-~dM^^mnYeG#d%TowDd=_57+YoWB=;7uL?Pt64}YY^ z|D`G3u9Mp&JIS27*A0|up?%${Es@RpnC#gHhHpSfH}619$MlabPriNRqSfsiy5}_< zoHzaXoScH3=`ZHw^7pgk&l`_q#iD19GxTfm;%+-?ip9weWr_QYO@o=Ar)~y|6**nm zq=+qD8PQ^eY)Ks&rA=~{b+v|3?7r6v{_T!qWm|YF`gs=KN{NN%@zwa!nppA2^_EpE zs25WQrUJ6pcV|=0RpdtDET+&!^4ukC7ad=od@ahZ{~vQhg%h@LS;7{r-Xqd5Wcy&U zQx^Xc2_mrUT&LR(+~3E>$lupq)~i*tcOp7Eaoku6>=+cV*}mvuya3}V*DAUnNcj^_ zInmuC4Yf5q1eu%G{wT%7zP9JVaJbKmA9Yf`;xG|=^t99M5012waB@v?ZuHFTSO*9L zj#F2LG7t^!vZb8ZK_t`^ta8MDPUiqv|2?H8`PDeeAI#fF$9Rv3Yq!CG7~TSK z#FA2*U-=-X?haG;{~PTcT5wKH)mC*gqo&^mGuwCPJ-rDPz@i}glu_+py3g`mCm;l> z{sG>-zi%H>_5UE{SE~9yO=uD4CEJ4J&;FN%1OBg6{f+SCHmLfYW@V`QmH+vrvHDA@ zK3@5MFjm8=e)+piRQ*7PL36794e?}Xes=FkEs@RKik5w(6Sy{-c6?R8d7D)IAzhoO zdg-VPUEjS!HeHYXVATZYhf3FfnGXYBkFB~b%oYDQ3v;D(y-s8FM=-knaJ^;K^)f_? zB8k#`sXRg@SVKX-WC?RSv$w#j)|SML?gyQaho5QDGjX!D1*G1a+5%d}mo30p)uWVj z_2j?;(6ml!l(@(8_^N&@6$iQJjm8#;X%a1B^_bTy<|D#E6_wl|72~RJ;zv~<0J9+B5^MgUlFN$ zqqMm_qwlW%oRv7JSjuf6+SSlg!SXw#EcXkq#xaMICCo@m0t;-_IW>`n zk-3op%UN|`8ADgN^)FB8=(1IA;eWKwvI@t0= zIc83CV7c;w;8JQ zJPAkMnT9#iGhYV!$M_xvSUv@VTep7rr`9!aEkg`CFi#!m*@-ozShD(06?lUe`X*%H z_rN26KXS;)A8O{CYL{o`lOqb8 z{Nsv@G;{h^X#2UpH6?#&iDssn`jd0Cp6A-{W|2BZGF!8E;jhj(F8EN6PEUv)q@V{6}P{mSX3UoeqFJr#-jOlK7> zm#=ygr6sDn0E^$rF9pZt;CN$$eLRHr-AX@Sbrk{<7Si)Hw^@Y(-;@lqc z9Ntg@ID=5aoBrWDx0BseBU?UfrR=~d$}(EI!XCkH#W`k$NyeVg>@L~|>aZLbAZ#_D zBytje)tq*~bMZyauos=d&&jVSCe^xak)g`C0x`Q7R2?u3+jS()+;++;CWyqxjaL@K zEMzgv!tfQdI9{k!@qI>*q zj*tB+W=UYb$L-t1@x+Gjtp<{pE)ewFLrCQ z2X&?er%PRR8Y&0<#DN!_Ek$kmOSy_QP|SOrPg^MOmA_tZ zFSzm-^!BTCPyt1;PoZa^yC=OA=I%o?|$z z$Fn>>nlag){VgEh3RroIT=J*9KG!}M8L*z?kMdUJ5sdH(SYm|StsDunrC`9K_;b#% z*EyVAhRF`j{A#Qdr1d;<`cePZ|D(EL)&!d>r6~)Z+T>D&-MM9+X=>+uY zaY&01jOC%&c}cHYm%Tv`O&b1>=ut;i|9?!6N1x85N9P-Sdc2`I-2ZEOj0JhnrLi-o z?~Sh*@PiZEja?FhYcCztt4*|VaH4up(cr|`K?jF4UfX{`x?o0U)!qOiN*kZatmjOk z1GlxFuecDi@fq3L=yS1%Y;Gc8&wSVlI}ND7+};B``R4YZkh#r%g$#SU%Q;Q#?S?=6 zN_%_u0DzFaeJ}2Smh9~W-<#Uocjbia?OAjqg8T{W?Hl~}z}}wAdp3K!O6lmM8s%qX zZxSKUy-Ih7?u4bG3ot4Yf9C(`SQ}|e8Ed*yn#v5|Ov}1N>9aH%^M_*d`C2c3Xn`ab z)*1%8+z#fD?FX-eHyLXSO~a^RLn3QmTiH;GJP2e%X*TO2B^ypaE*yhg=zxK~UbgmD zVTH<@+S*~P7)ukNG<(+^N_;fM06E9l4uMFI9>$YhS13ZMiV#>DdCDp2tA90-wl(}@ zGWzJBT*VrSP+Q1;nKQB^B8ia&qRM(b$43=$*oiLOcDjzD$HVf4pUf`UIg3y)nJ)XO zKm=~Up%aOZ1fjEy_IE&CJ|CQ}y0aUT$(l%UOH~xcBL>_#Mt?*U-GZu?#WCjbOpD{* zYkUb)pg@W(ERHY!CL%v#>?K(mUpx@DKJTAxS-_H>wgFkTLovUyISvqin8b!j`Hr2h z{+apeI(O_L8b8d~&ZY`GeqN4#EM?G#vN_dVq!?8)*`u5ss#+ovExc4E3y3Yj%W?@_;c81@*vf@# zaif+xUi#jZH(R!MdxeDQ-ogbcH4?Y3Pk z7xv;b3hj}9*$)47>drEa+gXiJ;FcK|wiPMqI5PudJbj8m-DQ;X-r!H>w$#8k=I=)J zccP{?t7>Fl$U`Be!BK!Fs)U^+Pe4X3XTBgYR}J zk1sDL5VE{s{_;>~*a7HH-J5}!YA#k-$ai7Uw1~4o5j~oCiF1~QrA56rtA9G>xjko^~T z$ew0*pzi;Yg0cr@ZV?KIT74o}uEW_76|pYM=T)OgDU=di*<$B{&tx zBk}Qh-kzol!Fdqcr1Siy4T`yP>U2;=>4v35d9Hq@);X`RgYmZ8=zuj1HoSnZ4W+v%MKq)hs$eUV~aHs+jeuq zf>bwG?rOS8R2m=}fA;s}&(1$W%MUxHx?A-P7sb3RbTaY`voF&N+Ft-ka$F7T{0dTL z=~%yUTXsw$y-CM@m+n|A+p%Ay-`?pC-STyaerf#|#bch*ct0GFMdP*GH?8r~LuFFl zvK+xERaz;1fL&pw+$wkW8f(-`>=>gS(|Ytw8TIl~zYqT0^S(n1PhUbLRK}TCaT7&0 zRv%?&QQjSP07se3NF5Sb=^io;qBacr+nG9{sK<(`;3&W^`#~{X{BBPJl;P|CV}H^V zoo&)I;h3V7${=Nd$#s#^Do8V7+SGlBt-JRhg1Y~vx)HA7x=U4RhyRbaHvx~LNdLzZ zl0c$B2bM@wl%PR_f`EX6Tp37Y1}9vCq8x${4!L47!yzh(Nsw_E!~<8>W8JU1y6Y8J zg#@pJaC?EbC;}?d?I4E-r!xP~r>d*FCz*imKK~yN&!oG~x88c|t@nNF?RulrIx(%0 zl{SnpoXxcTcyhp%#I)_vX@@!?jfa$uu?`+3#`;fu_KmTAH%GzKi17RkWd+2JhM#96 zCD9E(jI?lpEYuTO`rS;p$x&-A6NU)?DM#n;jTD`CkeyGpIxp{n(iyV)e71KbtDBcF ziiC@hz)Ki$;R*CA9EJQe+_L2u%`vM+H*gOl0z}C|Lf)EH@ms{W94=4#(jKH$tM;po z+7Z^?5M8l5D^{`MwWw%33YbJ~V?CaXO{~FFZNtMKT-F|E6sZObkSfwxj$x2wrx08z z3BehViUft%EWAe2mImNFI#d+{d)LpX!LBz4r(Q-re~JNv)kFpQr9UD16T#3_xw8uhj$=z%KNqH$F#x$UtFA|6(<&NVbGV>V9i%JVUg8rXZvQ zZVp693f4esmjIO4P|WCs3S!;`*!9|LO59CPQlrAz)U=gIc?|oE94At)V@l9UL7(Qx zm#LADWOv2Rk^l5J45PaRCx*&8`iWPMMvTtr&iD&~O9Xc~1#pcOT=l>n$}L{dk3wP% z9Q!PV`oUG`eHBoyj>AP+;~CU4-o&A>Rh7uouWpMJw37{x^r{a0T+49b`4o^@gbmxi zR+fvQVY(w}-n)T^EAb{e0My219P40osSfCko@!7+uG+7=4}!wBvg>)5t3{#E_3kS` zR~9Oq0+bZ?Fka1axR-GQ+ETsAaet<;1;=oC0;82ZAqEJTA6^WY@5h@&3TXa{mB1da zW019z6vFItjLE1&jAaq*E6)P}JJqP9z?5({R26Y01vgVY5#zARH$izWxdP^_X?Y}4 zhS-!xshOcgu?BjeN8@{>=##+)1r%6|;4(||Y%a4w=yF^mQP(|hF6TCcaaH5NXsgC$ z{DTXShZ#019jk};AKPr8oK*vA8o}W7Yac@G-_WC@HZaxnVPI+rFlAg!(n{q|Us~Bo znqq#x*Qf2r{7$yf^M)`#>m?Uq*TaqTC@4{uajwLGKv=hy@z83`)!oD=u6Pi%dK{)A z;wcVY>CG-Ct@5h3aUzYxyz=Fv;Pm>XVBxZHG;$QfRtF9LDx(nq#E#+Vec)-snmj$w z`@GD#QRK0y?GFC5owj8oMwWKjDDkfyg#poq&n zjIpY^IbBuzFkO2%kpqxpAogOMfn$CLIEJ_o$)322F$=~G9OWu(`sR$9po}3XngYcL zp|8jTzTqK1_IsxL#~%HXHgJ zd%gvzpwc@4JSTe>K`KTWBbNnVLP6sSJjv3SJq`;y<;6?``RI6!q_w>Zv)78X&QN9R zeS>eb;!N-pEd2&&_X1BZzNqj-$0a@TgThmObKt2Rfy%TiaWFGm(O6_O#-!>ggc6vG z3y&3WvhOfHofQkxWJEJF1yz?XLt6%}yjF<8O*?Fz(`gjq$*jdLQqY9~m)JP{*^UsJ z;7mCg->kD$Fkj;_Rk+?|49s1`Zn$lU^3nDqHHI`p{NP)w^{5sGu>1kY~V4Co!iHrHRO zNAzm^IB2OIGGsrPc%dL@WxWOLP!cXBIGwDKgov@vaCqAFOA#1Z_n|FOS^CSs>&A!p zi=cf&1@4Ss|gYdj9{ z4EgyV<^*d3D#Lm>kQv87L&h8Uk-!Vk`T#WJR*v+`OLVMBHI-I3*IWSlX=P`~_WWp% z^9k##*&5FtIs?8s_D{I|h^Z7aFy}GH3~&&NWgos%X;u|T)msx;=AtVR8CA4x^oSbDWKCpz@zakp`>-S3KkG4mBFxn-rL(CPuA2Pxh=>>#g27jjDM|977%fgq2+ZnqsY;%50 z?J=bt;Cvs+W^`9fYCUO@(!W`Y1ouz|Na#Hv4q z8sH6z)vZ9?@Ho+;$y7_f2k6(>Df{(Xky7@h?@Csh&yh}Gr7Q^s&g5aJew?kIr59(J zqYSs!ed?LjxOnujf6a=K_LFZ1>6C6v zHWQ38+@b0Y4#K(BymVe=`O+`vit{B`64JQF0ZYrO6K$!xb@Lcqc zD3j>DiP`&|?2G~oW&}G)M4yEO{EejLNMK=H->HwL1$93-fGRael{(*1>T;IaBuiOj z+391N*$^gBE2HR&rj2J&(jXyRz2pj{4yKmAFHCzu_$I+1v%}-NrC@J zGNK%I?iVAz?^G;@y?Rb(!9`?zW2^@=zOh!u@aMoNkUShM8%^-4rg?(u^Gf6(5i(9h zzeXiqAOXQ{u~WYSiN?E(2w+##)&?NO`>&Z~Eokxc>1(gydsi z5E33yroZ@`9M1utz(5y{=OR)zc9~TDU${8SIjGGn#X(i$0b`I16Iucg)SK;Xf*ljH z?droYm1Z68zhX^M(kT#&paEf^B3X6~Ej_~vA_qqfb zX@8l7D1+?b!D_a?q9(aUD_<>!ZEbYdvx{X&Bhl20(Ao>R^|sfXzfiasla4n1P~ohm znxb&{>X_{uIx9vyzqPd65yvLx-n$NkmGI)n$Mr&R`GAF^um<;AAyZ(9M(v=VJV1#T z>-hGIF|nUwe-v*gVQMrsskh}9;cbn2Ysr$&tG7hHJ+9v7w#VCY_2y)@Virgj`_hpnff<>ksTZ5 zV%tc}6x%Z+%E_(er(3~Z1b-CJ!M?W(DHIWV(!Ta4m~?oufGN~tN-qa#Gh8b>C^0*5 zu9e3`6Id$`vh`9y>4}-n5(`y{LYDZ^EWzCe!92v~MBX=wneXxyz&We;QPsP##C{X~ z#y`xWz<*C-A&EAF6-d;5ZA>)WX%;d3>S3n&AQtzxI21EB+tV3I+s2f=W{Lz*=xl;H zzsk&uOz4dZRFgC%5o9A(Jv4E4awlp5M6o~r1iPd06Q)DocCHDc2xh|C+|>l?$#y)f zgk4H6_>of!qCav76SUea<7DaQvuFrKR|pvdfyJMv>yC+(iYDl>*xB@c98igc^9kLp zP1@Z|75xThv5hRoj{DJLp&zpJ^Guip?w(;jus(;2sx7lmo+F3E)XmtcQG1wPL9<&3 zVb3qdMrwSakhjNt5KWC`QznM83CLFD>Mxni2_d)_iiq_l(a}X8O#|bzEO)nA&bSY6 zP__hR1BHzpt=sjOq)nGQ>*qkXmN)v0u=x8Pz8S0@m zt3}S%Bl>av{K}t$_>r(+mEDGpqT(yy253lTd7*hi1_|Qch`hj&@b~%}vz9ms%Rwz^ zA9&x_A}@3Yl&k}~1`AVO;P>zk?qIZNe-;OWsLy&|nkGY_VSOe6nQ8$7YsH~iTHJC- z;;pp(7&8aS*-c>aZQwthOy&3M`x zVgsDORkV#O!R6xI@H&T#nW)|E=X`{kd9HHGm`V?n=4Ppu_fEApB2Bm~nVZporr0!R ziD})b|B5K&r3>9naNkR4pS=ex~V7RKK&jqHMO1LJ=j#!#pVprstUth+FO)zy z=w=yG6y1DyrYN4l@jZm%;i3AbG^~bN`~XBNUio{zuI|tbv8&w#+nzfR4*#G(E(<~5 zqUl=Y_gDGAupf&V-#?#8BP-ZjqB+EOk)TgNZL@vaw}MTmm(450dg*kfbGq?%IHc@22Y)c*x-*1%!WH=#x?3s^1pIqMjGI_7b1J9Bpi|u30iOC8vZCxq;%Ff+ zG)L%aJK<`R2Y1{b9N}|jpa$7oH;!T>L@FCLj)(CiT_dj@2IT=lzVA|Rup7rb3WNlU z&-KS6p<+ACP5``MymPv3 z>7zl>#u&NUX(I!ooi@lDV0bdYd6D(YP}0;Csc?wF_+=-;!WLkmo6Ju16I?zt(9kZ1 zXc4G7BUSiBbQJAa#)S_%fsU8w1*JXVm-Fk{6O0q!h#WKYEHT7_o-_bZ(7uK3!uGXK zl;~zh+VOThgv~V3xtS(tcc&1+p=Q2rPUb)q)loZ%c!#dIE7`fV9_9$8p0_s3SOO z^#G)vhI=!B0HTHNTt;!%oTKA3lTn(a$?k9hO-lkxMd?C;suDd9#P$o3%Nv>oJ5T#T z9UDV9E5_QO{q-pAuajZUz+b^n)=PV*ai^#%=yU}-3D2%iJLiF?>FM~fNZ@VJxgY@! z&YJ#@E@huEADZ*urr!KJEqY0lLDY3AHPU|nBy&}O#^ly7_WOx)ZN8_!2>F({H=IgF zm8?|9YEp!QKBuDg084S_xd#u#vx(kE5LqwmrHNBop=QX|vZ8G;?d!Cbt6J+LTT3@v z%VSW#P>&6lIP}vPrWdaIZ$c)31(1wW4c^R;-8#nlP3h007qM*8>n!c@r4Ty67al@e z%1R4u^_iOm8Z)rave?yXKo5+i!?F1xOmuW3xF1Mr>hXW0UIazDXQFPZ2N8YWN+H%{ zuopzeh!|6`ru3H}_lRn;(X&Al#t^aCgjz4G#ekzN;J}y!>*|*FE8H(xxzMcaoSk1M znzOSH56076nt;k#;v-dJ3rl?BD1jI~d;=0;|3#)4gD(L_h_l13g|`XY5_7+dbuT2@ zGbPmH{0@$JQg(!1sA_zPwPRJgp4BRmVxB;ntz|R$VJ5%8pJ(~=Bz{;=@->92mqeGQ z;QFeOi8)ND-uY{2Lo~4J<00u;-RTnq+5|Hm3)#l_84&BeQ6xM_w9UFd??Bz{%(%c= z_j%T(Fnl3}B3h)*k#e1wgywARX>WHAxoZ*fCe>QxTYB(C-(3kJUmcu@V5$1C+XsMs3 zpn{114Pgx%9cAikv2EscbZ(oRZp1&23+D;4=?EJkBA7GPg~b}i={6n_DmE^Ri#_r9 z9JfNsP~a;!eFNUvREaUe@g`PT76%mAImSh?ul+fA6SA|&Ybx_1X$g3sF}PdkV$s$kX27#Zt#D$cv6U8HFG7`?Eztw|%iM_m2qY6Dl8I zR5Ix}!a6R}eipimPNT|KhrZ#OGY8~>@uN8p=*(u9vZFBJ9 z0`wco&Y0qMyQ7tiLu28vW2zW?@J#HyfM)E)1^P7W!wl|IXY*j-(sU3PXUjMEc2CMS zXa0uEoP^{(UTLrC4@&KI7#bJtLAE`^9XO%iy9@IPpYNaD==uVwL7R0W?MDD4TL;Q9 z0c;ut;FRTNym=7`6utt&D&Sttoelvyo7+^8i28y+s0ujLk9}jrMxej?yPR*OZ+LMU zLOIIU&D1<@GLd}<&2aoTi3FE7iMt#w1?{VM=#2|DU|34K0 zNJWK5@cN$n*fv3inu6FVY&Vi{)@>kO4or>fsyr*q82Xry*Baf^eT9GKYZM%V|({m~I`Yy=}_G9J__8mI!x^@Epyrb!eJMg(0pqzY%+KEpLF=4a`I*SqD4*3>!)gd&G@&dEcFNZ z{VRPn-qXK^6b=kfezhj@_~`l**%-ZIN)}~sSbumTrBXduRkCOiZdS+1WH&nZw=SHC zA%I8hZw`2FAw1^PHitcrXub&b^)---^w;oXqo6K*!w!<6-_ZTnNby2%g0M~Y)YpK* zu|;6oBEIW9Ch>QNo`6&7bv%_`*%peUk_RmRj8{PL*u%wv^txmkK)!Q|gX^vrd?J$e zIv%Kr!5Goql#)~RPyZt|OC^Xt#6tDC{URotylq3do5j;YRUwS#mIR4 zEWced4`KVGcD+N`!K|&Satk9tjtU8W97%g)l$?^XBVtOpRC^(hvvjMSv_T$MN76!O z@lnXr4Tx5b{rJ8*M!$(DOG==aJj$$h9_rcX;eHHz*tIZCVWR_gUnC9YP&O=Qu^C5W zU}Wwu28Afws+5Ml1@GB6l5;MsO1^VAniKn!l%SBenMLX%Bxfn5Q8*GIxDCa$OiWNX zLxKMgst_gP4+|`bp6(LOEKH5Vp@=E!9}woCBl?vnCImC^V^dzi@)8=vObZ-ruj3=_ z`$%B;Vu}}$v@El?gTI>c1?;qlbG1S^1Uy(%w#nB{i7a_XV$AsHpT&$j+SK!da!wyZ zllAZ~?UC?Jta=^G5dVtZy*5?B!y-=eZh}RywC3BAV~_Cl?iZ;khSF|s=P(euOBW&j zZ`lLP!VDVQP!bz891}Lcedl&0djs9&`Nv^gka!&vtn6`)>|$o~+aNoeXOpV-L}sT) zW%F!OWe;HXF~Kb7rJCE@`Itp)Z}ZMM#rB3zfd2x|OcEd*GZFuM1jvKDZczqC^(Gp` zsInBByr<{C=>`Sa@op+N(y5@NG7vC62tOm^WVK`KPNoOPLP;6G<-q;VRw7bjW39dM}ke zmg#3%={Q=Gh{{2FJ!pplTF1oIhKGlThV#PLggxOwh-yl41@VQKaA~02#&mr)AP!#{ zz9gI#z9yZqxTCDF%hwC!`CSixQIBBG^0z#v=-}0Gom;2^+QR)Ghn6r z(RU>{X$DV8AWP)6mL6`F{0TWj$eccSG-1b;{%xs{#o&KR8npZ~`Tq{&d^IAr87&A0__@ z{qua-o`n48-0zPKA#;Y@d5{lqUSvD!y!1Cjlg7CGXK^+NK1$M1RbQC-4{CFF40Up= z!ni#Sg+D>zNZJFUmm~U^gL0#E$T#zmC3f|p*w&32kOR>os^sUrjgYfUTayzIyv~Zf<4+9j~C>MPm(en;qr`t`r z>MQ&>_j93uEP@UY(dTb7H|L?K1*XVb7c$`F>Ax202(;1-3I6`{f;Od?1z5G=v#l%$ z16I~}WYt^c)AxxLA-DHh*5k5H5S<>eHu^~WZC)zi=7JqrCKv3|{ifamm9PQ@xQOSg zG|<$eNMm!8%>$~j$kPu(igBE`9&QrvYom@ngIkrnAvgFjY!t_$F<1Dq12I1A*^2S&{)l)Yx{7Esw3oGaC#=RmS`|^|4@E z;SPW6MNVhu=RV+Mg0$`uO+@s;FmoAeK*>~6INbqJ0=S#N67samcR9s1Fd6u@_t0DN zsG|&3pt=XA>S#`Hg^furP!=-zi>*SWiKZ5cQ-$G53F_=nf*urYW}`jRKmC=2Q|mv2 z%|-J%9xN=4b(uPT`=^ksq`!wn*(3UdeYW&hCadXRZGaj1O$>yrgJ_u{3P<#A5KV+# zTVD&AOXT7_IS;u}>oHoN84quxdiu=Svc*VRs_Zk8)Rb(fNK)U42Qd zcQG?BEwI+RjoLM+gH@iT@5WHX;(it>B#r_$pNQu5$S{6j$KkAJFMN=v3IlT%#bN zLOe4K8XZ)h2-XP5$G{I?9;ZQEu#VHpQb}W^2YH_MRJ_X)*9USauajbK!w#PT^o5 zLz9G8uHPnPk!O)bW+~p$+g!)O$AXF= zf#N08zLVp(Xqqs$L&H_hY@(xs}F2oyz z0qp1N}ku4*3bUn1q9$-0AIDS60VRQc=_ zVioR|``c8;J0unHUTafCQ52w8K67Etl|3 zu0nYsJ+|8l<}z1*K(IUL$G81`2dR{>1|cymAi++$)<=>!W}x z^6$BJeOunEV*L>Od8;Yoz~4|G1W52OL4Utm2!37kJxrk(ywvPtB>T`Q41J3qd%RA2 zPVu6Sjr^@aVFGxZZedpd*?G_eRXfu=(rN6u^Lxs7b-oM?d_%5vZe3&72$Z#$nfl^j z9Lv_V?M%B3h;57c;np$+FGSJ<-0j$zr#Cb?VcF$ytiBE%c>GoO6$vu`(u@V4CSNXC&>~{%Bp?v|ElJm!d(XLPU8(1Jt*WT z@mZn#0G8>;m~QSMJHB%aa=W>M=(_~aPJ7d@^Cifg0FzA|(ekC~&u7~EF;KZbIPLw* zprDxi3&&rv4jg~W#?;j{L2tCX`8nnR0ao0CM-&qjx?8?#b z3JFANH2+*@(()awjJ?7Q5rj^O9iduL#7#=3_yPT%{1O800lnKd4t|*~?D6W*02J7R z!=URe?1ZqA)R$*o#V3`-kCJCTKI+(i>dP~G`U{GV#!RIB`%JEjEgFO)X|Ko{`k8M) zpk3+^X#a)`8zoWl%}X#g)#GQk$c7?m6Y;>+)L}Oe`zC}O#jD-OQ1ZXUufZes>doh{ zLD=&hs5yu2Q9gA6GPd`{F0?m`Len(-*q}w74=a1?Z)>B)p?CW!3@GzSB&`x@Y`7Q= z+wy?BWZx#S!5qdq55CCFCa|9owomqF;a8qPNS%m>o2q+pJitvx{j)#j0@NeIxT9#SN_u%3s$WxU(!NtXV4a9pw zcc$yV%vaZ`nxzpi0AB(ss9-$K4L-G)xBK|7i4CAuuG6zu0r?R^^Tqh5GlI8)Mp3v2pkDSa@6|$8TyP!1xA)pVBCkn!?xE@sr26dfF zuOD0w`8i7UY2+W-5S}+7-@@~Z1E<3?A-CjR6X6JYyr~&31&N;E=fwnT<<|q$hB^<6 z&h0B4!-%U3j6=||NQ*O&Dsbbt{1xhSoN*bHTB@)1qH}{rMr*MDcQEHMh-)^31Hcd! zZ8rjmlE03?N1)=~2~`mIMO*@lp32)nKxhc+Ip~-dJ`gM}p&qA%S_BF;c4FUJZo|hl z)*x`N`K_2{C{+itvMbT6viC@WZ=;pN6xYB-xH-LyoWKu=nPA2_h`t!tr44)!_h~wb zpzDYFcR1!nzc7n6!S_R$THr5}@Me)xpheBgU{D8=tS3;AfuIgr>QK-pqI@&D1D4nX zWTD;3_~S;$)9@FIr91p-oZ(QG_7v*`ck&6ZW`zF`<=wc*TQpVthP&pQ3~$O0uGNWMzw`vw8{a~PjG_<4PrBi{L&lwjN;DaRD*Zjl z{}*dwb&-|BBtE)xR~1dfpMh3hm0lsr%Y|OdI#}rJg$w-&{xugm zx9iauJr+2ym4PQDkXzx6Cy{u218=U?jkr%_A%!)#=iyT(h9=mGN8=T~|B)2{Vxr{N zy}-WtI)fFRdxLMZk~926Vw1gxHApQ86q5=^)DEBy5`~C*^ zh1E%FThVu~#{Lu7!P|T}1Xpn+Nh_O}jOBsL`VWfnLF19zJEL~q=?*Q;T#xZDaW&Fb z=VabKg&W=T;=X-O3>)F!Cr|{KA_{@1XXP7Fh_~kj`W_XL0f+sjx`zayU_{EKfyU>iDz5$oi2BnB|O(=1)yJlA+**RA|XPI4cmf5J*Vq{W= z*20?v{N^OVU3VR)jH9#pji7q}DBvPC(fe<-xXcTP<_px<6J@=Du-%^TwtD;v@(WC< z5%H1Ve<@EinjKS~i0awDynzw)utpHx^9M%YpJwpBbDN;cGK+z-hUJO;S*Hh1D_g0= zse1TnA{{3%1r5>rr(ny>HFDS$`|3&3;rFy=>#^3 zkDv%>W$l3&q#cP#X1iYEIYpVupOT3wPdTRD$cv992 z=2Sijuo-W2H}B8~GY&%!H_2SH#xZU^OS zF>3+a+|-aGo}a*9{$nemHp(sMJIXzbzoH!Jo|93G1byoF_;@rG6lQBB*csS9>sgX6 zqCv1e`ECKhK>o9QM+o;~{FRY4p1X-o${T@UGdRgM;5#-~(aI+y&su`_?T*b^?4}l@ zxUrY>C&M^E#(orlD4LJf8?abrI%2VbzwZK&_6T1!_b9{~LONp(ad6lYXJTAW@bN)G zb@=lX-V{lI62zc^1VJe%EWYzV{jDs0rvznUL2xC^;MZL)2N&KsH^3AZ7;xA~pBbbS}N&u!JpmY}}2Dz~GjbYFZ?&pwH` zX%7J;N_*m?t0X80)VVW2qP%3ET|mQfhp@)CP@WO>SM-{o(3hmHa5Za z9r(4ym$aEg{{5VNaXyMGf>9n{ zFNhDek}lEWh-PuGr;QDe&qK$|!lcDe+rclkEFVjTE8UAx(Bcmcd z+z6f_*i#MyA~&|D?&PV24?<;TCP*7Z4L&Qt@n&|UoYWm_W>BIhFf`Q@xIR5MFf{}9 zKSwcFU}&aiH=h8&mPGSMoQLg!W3Aiz~gEWM>^_PocR1arV$E57SQ<|XQ=jz{zzp@>oFsx4 z4uP;iLo$Q{^ElF(OfK~ir=-;XfilIV_qIV3tBCfi$P zwf8*Q)6V2~k~#3lQUlb==7OBXIYIDZ3~n0UjB+kS7OO{32F&;f2chzXe%BKzfSUyk9PB8$ae8xJYuR~Bz;$n8kfY0G$=7TJnhLCh)<{X<-}X{=?HamFguHAgT3 zFW8^NjmF?v$~$Y}K0wUUo=;z#a9aw}(YF_Zhg0iTHp`n}sQV`qm)nEgZ#JDe?>!pY#* zxbQLTwptcV97m(_US|(lF`h%S_%@L^51$|IEX$Vv=x=F3Xlw!~yfntrgg<*0P}~+S z3a5$U=54_l;j_XM;PWak1CL?K4G*$#6ZTj@5&e4p>u51cU%i!nKLCYYk-h4-6Fg0S z92xpbXYMX!=)6=A(*pUtjXq!*52f*4fd2UgvlVe(5C0EO=q9j@i2k-ghP{*iABtVp z2zL2tCXSp}={?y?H~w6PAN#yW+=|gL@nqd2(#vr~T8iV*TpW+5>MsLNbT{G|-2k4; zJ^?h5CzOh_(n$LP^uqLqpFz6(0?5oWUR&=hYFr104l~R0`oA2t$+?cNm#4h40evBA zhFj@(e4tXrXU%EmneTfjtWQLql7H;;D}Dk-r=U}wuR`j;a-)Ap1Lv!cUWhS?0V+of zesE~Z6Lrp4(O%v2)f>?QC+7l!x(a;Fu8jHPw;xzvP3$Wx+}*%;jwOJ9gCey7+xR(U zsM&;{p&(3Zb)P$aO9Y?sRRaq-ndvweMCF07k@qMDClhrd!|M(<7qh5##JNHSNUeG{4rDy zY|TUrk#!kk@MT~$j2Y|!pM#&WhwaD@_l*T$>NSny)})@M`s)8Y!vnh~`suZ$5Ss=YtcCR1?FRjp1@vwX*eDTgG2Vl+1PAD zot7g8629i(Z3&q0j}o|NHajv4p538lzce}&5vavC9JpcU`dgZ~M#69K+FO!GUF#Zg z3slmiGtk&DeZ~agtT4?XRoKu?SuW`jBnOg|vv(&DfkVttj|;<1;@03go2c0{DXT|; z03+$mXBq)0Fe&O9>1&|3#OWPIA;Kd=%1sb*SS_kAyuq( zt(;%@fTPCy=7@D}JS5($6YFxPSN8&T7|5gOyDkS^%F2qpbgt8_Z>s3hKbqb7?{lz~ z_JXanb+C!I5GzQLvB_52IkHzevK5uvJjZ^r=)L}W{SNVw>WxRO*XrqlRGK|if4wdk z{$G;(;}4_5dh2!D345SwBsM`Pf4K}#;4r^Ig`nXM;bQGNyyx9UV5(FYK@#G72<~ob zEWb<>V>$HuL44|hZzTlnK$P$Xj_J=26NLW&>SKj}z42gVO%j?xt~>CBzD(xcCUc9S z=}W%Fy_d4cY~;scU0fDDV>7Lle~pENcM%yt&9;dI-WXA9`PbRw&%pS_QI3;+y~A~d z6YJRHpDM@yTdeU9730s}(}d&aeSKnv)c9rYJFX%Ysmj|L)`sftRc2K%@CdZTwCStSX}da@i91BZmS|*aI;?7X5VanLVGM; z3Ws%>ZWj3*557;u>*;@DG2JyIF!U&)b0wFLKM}nm<(!7xm0_RhQ(W^;Te?;J%?I>?CSfvle;;+ySa1j`;)v_1bKR8lz z8tU=a2PcV@cHhw${Kb2XAjEr6U-1`{d6K_gCUXbM1}2=O%|*$DPr`m6@eAQ22$6p{?o+M#tt(Xf>bq%^OeiuYo-$?K^ zmkFGkPRR?8rJ;q_8))Gx1cf-Q4u0h^aMRmkAz>N;I2{3Rx)0T3S^%bfh3cmh(Yem7 zxnAmxo@<{b=-=0}K4lA`9oIvt73=FLg!YRZOC#kF`j2MKtHVik7toG_b}7}3;>WiB z5C7^)KiY(PnoF`yl7?`I(kJU_;`9UHgi4_)`|pq(#&&o+Jx!mvt0Z&kCf^5 z!}k!4P}aF}(hvc4nefH(z?PXoza^^r_inc*)*Hx-67ar3OM3p&O+sK&h0YiUTz9p ztfI~#=G-iEQjZ`fxp+mML>sful-XNZ z)sg)$N-}%jKry-(`rDAw?dn-G`#og;IXUmxJ?N<3{@HOqQcc1J$(F1mX*x|rihhgx zC-~2?1czWYY4P?kN?+e)Znu{0We6rWX@bfZH^Xg+3~$&#+3cbuAjs6}x4P@B-E6sc z;ZxAlTJ3K7(H@W~L?xceYS+P0-d?lW0OnvZu2yP=VfMPw941U`#)D^ydHI~xByDX( z=x?OqA|`pUK}=MPvfIEVd8b6hU5FiOpF2i|$mN}Y3%YiB9pc;{5OI4uz)=%vlfC^U zz8|b_kIk|cPpHS1j{vVFltr5;##|>9r_tehCW^FvfEjU!WP!c8((q#2V}I@YXZd=& za==lKuaDGiyo-U>F;O_~mxMg>Ip{~qBalO~AcsI=7=h3EZtUU?-O|$=x+MoPiU+a^ z4g?2Z4Y_0x^D>H{*`PPbevUhb)^- z83u9*e?m#$d?{0hxpA608VQHY1c)RvGp8XT?kicMfT9jWk~9qo6hVqf|A9B8ND@j* zHq4> zg1L62kYK7)FzJE%5=?R*K@43{$~4GBP7%_`{@#*ID0Z5%4XpW;3qF=PuiN{Nl6uz2 zoCmH%Yo=^NS!6V8JudTJrhsZnH>mlMBU{NZDKh(~E1Uo?6|+H@f4EBE;5kRODaCC?&Yu&0ek%b8^%hBI7)R9x zfkjfXj_bfF{8+a^Ir%{>d*yg8w+5KOkP(6zT(h?xGf0*r%#{U>=O}w6PtUj^=)L~z zI9tUW=b-PR##zcJ56;6G+AE{<6CD76A9#aWUTApFywDBVp3n_$PiXqEywI%~c_G*J zp3s8fp3to$JfY#&dP1I&o{(!)UTDE}^j1veItNck>lx;H#YZgEN)%6Mw*51v!ULF` z0z6?Xc|x=A%+zdh6|jS5Kbr}|$RtLaJfYd|X6ghQtH2Y|ntm?(fSQt%IUh{oT#-_`a3p;Al%4v6zE=Nt*M6WDdKK z7sVV3-UH@M-M=n#xMG-K4o@bpoJ#IxmU<)D#%h_f96^$t zEWpj>^oY!Rk)oVp0a9HmkvW}tQtDs;Lcz(GdFL_DVgROs3F98zR;UzNr z=69pBA2zekl-WW+aMV`JVc!*E_@7+v9E!~x-jmt)QZS={V=7mh%*J1o*>fDVP5${H za{e6esJ;Vz)Z-mL??S3manjMXgLf$VBhS+*nT48d*+z4iinv`zQi~@8;bfl5SeowRb=FKq#+ZVy+m2a@5b;OmKR!ot3~RsVxH zMS>bnRrU9l3BnE^ZT5VVCz+?~^@86W`oapbRL8jf8#{cPo#-`MZ#bpn$M-Zu+N2;n zV4~$K619-8;Ev(OIVU`ILIv&Iq4^hhL)qYt?hC!4VekMM-Ja|ah7;JzK`}>#RR_M_ zf`9Umf?Dkl8qqSptv%G79jecViqrq^UM)uPuc zMZ%w@*UjIs%NX=})&_IBV$kbyxZQwWfBzl6(SiCRd~O#(uWyo$qUrTgne)`8_2{*Q z%o$IIo@jbK(pj{223w1!*Bvrv#W%>QORqID?=sf1h|Z+fr)A!bbh#QsSX8C!2RaEl zNJptC3eojXWKJHP2TXbsMsHnzUFOts^P(sq4A{H#0=oVWne$Vwvo*+zx_-CJ=}%cE znyPethRl0%tvL$Yw5{tyk@x55VxbSs)T4_RKSQdME;#WHK4vqh<-C!z$*pxQ(8qJk zF-2lqpubl6r#Cx}>Fy9ChLDd3Z3kE1pRhph_|zWMAF)6`<0!9eQs(_zrYEzChq4KG zIo6Gb^2_1oz!+VM;GXQb-RUc&d*OZj)Wh_VR`x&Fhyidu3@$5d$LyHMRBsm3@k9afEA zaH4w3Ud{n{u@5V!evay=bBKQKC?wXHhm{i%9^te{rAjnq2jV*qWg zr9a|5(#28UB0J0A!TbB`+drKyTKnE|;<%3e(?#}{H2TweCXciZg0l^l1qSVtjv)^F zXV#zPEbR&aM?KCmlGa(9v(z(rIQ^I0A{r>D1=s&4`(t{he)j>IGbP#v4e7@^I*ijz zFN>a1t?XU&AP#S|@>)Fd0LM2&9N-xD^S#bWY5gX;Jl#4IF0Ja=Y$Z9ilZv9eQdc<6 zit2l%W_@Vm%cLHsS89SITM>)B1nnoAVb}LR>O#cP{|FA0mZM+SH|$Z?^FL~Z!%vV= zi;rXYAH92#AfyyoMEEySmNNYtUzE8ku#nL}L9QgTbfIC>|7aQVxq;PnO+STyXVok~ zT93~5(e&x0vkb|MZTb@Dg3pNwj#h3Dl0;AEWcJA?4mMGFY4ikZWxLR>NmHM(3*mqC z44*7-2CeK-yi5NhL1(sCQ8x$ha?*W8hVW5}ah7xw_v+JGDCU0dSOO_^z^!vWb3+Ul zq(`{UqS0AvQTLWEGk+O>aDQbGnee4rdn7Mdh}7{K=mw$m-v+z%%$p zopy4YKaE2EpObt_W&n`$U|m$iu-%+EJWI zkeaKPBVLM(uMD1zS67{ z8WDtJ#oFX8ewb>lo9Dl~FUHOD2SQ9t#I2s`75wCC{zQkDL z(@rtIFF*Yw<6F;CVtlptTjTpYGirP(&hfbeM}y0Vt_YO%hj_O`;Dbxw5+6#&f96hj zC>bg4z*`52&%i@R@h2dPPr)=lT03Pq>brw7J1DZU>PgmUJWg`Z1a5Bfi(?<)PazpMDz&bc`58;T=pm2-U~SIxJLU8Udj z&rR8m0tX9m$Kz0ZS0M^$s}?1owI;5bT`gTT-!v}W+dn7eGgr#da4M1-=carfW?s|W zl&vw~ag`h`21JD!F0p9v3UBVX!WMi0R$M|{b(L<9%ZdNY73k%vIMdy0i!ZylS6_c` zZ^(m-h$NJuLGd|(#bTTlUA!oAo{ME#!%bA|E!tJO0|d9z6~7}V@B$I&4L;oke>@S~ zUsVP#CFnRfL;`1yKY0TD5ItZW&GAU1MHZbl#`eq zg#8oLR}v{kg~F-kL`1|y+)xsUo`~=u^M1!%TrpSkZPT0-0d~0uC^jAek}Up<6`PZ? z(b;yL^K1Ldsc4ur(23?L{{ zho9+On9j?MvfLdGx_f)hM##l9ivCn(m2J18i` zExFFi;OO{LG+-Ei1%8R21iZL|kJ%`42ex!rOI532B_CB?hgAGCJV21 z0fTswkr%u(%N=~SC#DV8z2Jk$NRy(DUTk!{VJA{;HhFud#~b+G8#s>mAn2BtxVZ^d zMi^m!_W~lldMSiD`hc>OJ5ZC`wOW53Tf8U**@GZtT?(AJ<7+(~)+2O$lOojB>-FOf zd=0vcr2QR+ZqAxJe1Z7Ra=$)Kb|DLxU3e%(1lEb^bcgOp*WDQ)p^dreQc<}h!yCxY z>iVUaeoq8g;7wfqcEX5*7;5m6jijZK5+nFN(+~Q+h8kj4I!(1_H8My*GF(2Js9X1|LggzI*d6RG4HKD{l-uT_o zODZq$yF1W5)6)SPAi#*C5xrx`C(ny$>wu45*@WZ$|`nbEpPu}?NWA+02<}BkP zRTz0w^_?G3jo@Wu2f{-{bM9dGOjNeW43lsU%=vi$>zoH4Qzr`tbJTUCnxSGI>=gHk%Y>^a+;4(pxC}d_2O@K%QiKyoL#-+RaryNSz6u$74cx&3V z@{7nZ%7r`xaVUO!Uf1xOv}3S007wIf(!%AuFs%^s=7*=OUV%#&i~D58Nw$#e z4h&4jRYhm;lkWH>1LM0^F9A*&+&Fbit=i9>^_MUG-|A1m4cC9Rf6U*1t?xigr@r%F z*N;bi=lCoBi}5??FZh;_J!~>GrA%Aj666?5-x>_gqO__Tqx7x8m@<_!0#sN}-x>@m zH1(|!mK-Q#M$+Mju9U3}>stB9l72@|&ty~27i_{p!D3BZYoXRDTGCW$$b`_u4RXAE(HC>9jdjR$)Ie}V8p~yK{ zI1@E)O~}Qy7NvWk2JLNGvj;2j`~I$!{kf2I1HYF3eyP7#*z1PIEHM#T8;~P=xotS3 zG;*o`T!*$NcB=SoQfqd-d|u8HH#I(Ct{YdIvV*OKp+SN#2($|5p!hDpM3}36K_lq0 zt`uko0PiAX*^FR8^b`n{7vgfbu`6YJPT(`qxs=GYyXIk)SBYgWgmUe!DO~nKFc+5S z(l6qSYmww!@#J^^HN7_hy+`S@J%d6s_L>YdxQqmx7a9QVS#Un=bLWU%5fiHgUJ#S` z1$ZPbEwT6}w!B;7OZPyV#Vig%hGLt@xUmuD3dVz!ut3!SBGtwUq~yS#{@b=FIyyeELy+6IAj%!C;*+}yXCQf4 z)Ix*~TeBCmdJ@Xne$+;R2~gX2xS$idpcHa3x=O#p*70#}%D&vdH?Gp-o#Z)yaklK$ zM2bzg8R81|(%%8tVKnI}tycS#>vdFtW8GR;{6{%~$GNk)UOvD0tuRudQf|Vpx7RkU z>}@=_im&RYmA{53Ph_n(AhtL+%PWe z1`ggKq6+&W6Qm$ZYpbRulz!W!=3Af&8a5fgj+7nYwmD0N#=|9pEY`FwnnBicQ%>Xn zzXB5_zZYW&+Fd_V6XNARaV5V~F4FG$5-E6waO8Sj8XUfiGd3X6UQp5ee^{44zke|< zpFVHpzj#$BFV6uzyt~Pj5FBGkAngi)fKqrvJ7N2lxgfNWB5=e zJ4#@HVRt-4hMYL@y@`@HhT$&7|CjrHV}W1bd+$$z_=xXO5@B7WbcL;AF&Bb6xL9bl z!N)1u;c6u%8Gk?d;9PMRfx&qr_^@4PNjoO1jtVP&^zwb|uHWV3Z3r6J`Sox6L zNus}!`wu|2+JI4S3|N|JtK%jGvuR40w$YN~#ptRiGdzIIAUEYFmC`cY1u0Ekh#(=$ zz~CwN1iT9A9tKYsi$KC+OK@RNaK&%SF?X;3w04uP{ereJ^0Tq$_S4Ef;GnPvYvo_z z$s4)>++3g`H^hxs?u`HG?CtfrRHh}~a zw8bTODe2W0|NIL=1Df>O8rY@{+N2HG>aKhQS@;L0f`ftJ;tVjToZzxy_~Qxe68vQ& zs5>X{zFwWFN8XZ3FyfKie4`ze~gUdvNHlr#775 zgZT$LH`xAqe6+4_Z8(3$naHnbI6s&9%Nx%B6>cheLBsj4F@IRY`M=_XRPWMo{tD)& zHk`i)JFb54vIfULiuqd`&dPMpCVDo_J80;Pw=<3y#;&bi}-h$tlG-Pkp^^*Jzi60)-`!^-Z)u)gG^Y)aV_ z)poQTS&)EjJ16D+ltZE?Q?&M#Un2Eq>DZ+#b)68EW zvc*GoOAK6_7=Vl-EUSTQl9in%drU3&FXGo7G?n~bfupc(E${@6N@dz543V%&?VQ^g zsx{;jb(V-UXe4g{7zhV0Wp|`5g0n}M1rnr%vGnLz-_+8hi{_;T*1{QL;mRg)1B&}J zit~>!mZNT9ZOsqRW~yB^dI~V=1Y^rm`E?azgsLcb9uKVLnP;U`K|Y84 zw$|0^EFWjsm#^C}li&!5?? zv9@YRV(FpDDK%9y0c0gzg0!3(#|4cjo#<<8*1Du}-n8jft$ftF1r@?)mh_u9-8Zdj zhO-G}k7fOKqJDzEqqe$nkGT`k$EqQXN)HuIK?~E&7Us^GKDlaobPLcgSaU6|5jvhY z?*e?du>Mhp8)}umX!`7K&2eI$So+h{lr6sTwUz$aGiG;dTs3>nyxHA`By{~SrAAw^ zHk9~b5<{ufR{3X7zZErBUzb?&lRrN$E@g}Vor?Qw-KaM?f6DaP`EG#|oR%D#>;`oA zIRUD8uy(nC=Xb!9Ft0t}@i^hpRyQv>6=(MRVC&_>$1Qfk+hQFm-O>Zn_lF*0DlYp`M&e; z7tK_0Sz1$9F}1d0N^QlY+KPN=XcB*fx3PBjhbRY_pMJ!FL(WJM5Fuy8hZ#X=%<5f< zO_$bI7WpRn6gbl-5k{@-UiMXl=~fw&Fo6L6j>@71vu;+2b3jcn%-Q<+#r zy}^REvdAy+Ajq%~xgZWZ*IijO(Ko$l%5=xH6m|U&6C)<|{-nR6bZtebw&Ld6ihD8K zZ0Ibzp zo-=#q0(Y;*Rresxg4i||2>lm5rTDHB{hg2B#{RU*0{_iiBVuYL+I-_H9<8k`m^f($ z`kFCus_Y9BUQjrFE|TU>^qJk??d-~p{5ih-Nj}H$1ywF_ma14>TM@w6%aBN&?RaBf zD>3p${*F^h`pubARgUypxbo` zC|O%^9jI@LfA%Eb^f|M+)JHojR9s)X9FR2e!JQwg>O4U!iT=Eje)%(t@_kq1FG#v- zJ_p#PGJifM*If2ua%-xtWzJd1!SZfgl|OrOkz_I>qk0+P*ly9^T2fczdAGo4a?V2> zebeRc_!@kbSJH3toT}l@s+HKYCZgqu{+T|}vTp>ECV~4@&77z>8ZQI2(2VSv78CGc zK0pH4oq>hP`8WHgPR%bQ7KS*hR1B@H80O?J$%5Y{`O-{$++5Oc(!`?tDi3Of^C~Az z^i5I=X&Rc(shl)(Vv$NILQ0RyNpogfDLxRImsP=ak?xy5+n-M$@}htkTw8GsfFQj! z@%0z;p`?mGjgvx{+O7NiA7Zf&Z<=t=S`fhh|$OO{RFbBCKfHQ1eHll z<(3VkPrMl$AE+o)>1*-}eMN%)wekfJp(}2!tr%2WF}t>+2>P4pPdm)r z;iS7}e}d=j)w8}_#s6OIrIVfrJ|&98`&zg|H}&*HKF~=hFwQYPIqxTu&c1L%wlRoO zz82olq@F0Iw?%OTxDEe6)AI$B8UJ8b^aVz7s(*eSe>6$Edoz0oHGAv<;$3|tPd9YC zLt}|XJ`|nS>Rj3v;mR{l*tws^K+$O=?W-Dihah+`e4BljLBwLyGKjbXQxqtIg=%(bZL|t6ODPa5y=llgo#jDrhLSuoHU>k@f>on*I}^ z_FpU!aJV8LqYQqDxnFOFFNMhGAX^E4)Ac1SFt#ZybEQI z#93ENgn|9T1_7T0IYG!E2!oKuj=ccf6WM^KqvEl7N>Aci)Xnjo@fj#3w_KAzj4-ZU6-A|Yo4duMEnN$nKtS3R(8eLvu(1){VkVrGfPw!KB4!ZAG&zeOt>MVNuKM-2>M0Gu*KWEUia z;re3?7h{M8aG%Q$VUbDn@q2-?$3ZE1p{bajp(zGfWMKnObIM3C_D9|Fs>T3w5U>pRH>71iXn+o zAF|ZLvXn)Z&2Yf#E?t<6lhH}&6HOcQQ6%dn32 zRrvJCcZMgp2nF6_0pfQZ9subyEQ10p1IyoC(*KQE$llN*N&f&ERl<9MxRzh=XaP#7 z**}&=@#tFOtq$Q|Hh3R6R4h7rwa?)Qqm+J#o)BV4E2D9ZM@!|K@gTcO(e8c&FW3%- zM0LerL}e*J<>Sc3a5LBiN81_kK*i|3f1S*=E;JSA*_cmMMPFx8Ou9EXBQ*~mXuUW$ z9_%g%#L~YsiNW0Q&pL3(3r+=j@6|^_vcO+g54N5;|SowASOtXofb*!jS|JLKab?b zTGA;)O{T<9M938Psr9I`0fE+;=`qg?;;X7c8yfMswF>< zwrTzgmg1nc;sGE_1~^iH+nen@3|hi$4=*wI;ZM;cmv$5rhfEM`D>k-sIC6Vq+kzNF z#v#H9PN6StiLE$AJpO~b54!{WD~_tqw;a1yq_Cq7m?O&#sPv%muB<1yHd z)yTOy&-tJOwH}cJ=-n@L9g17MG|Btpefse9C{{Oi_6eg%a z7O$WL1EPS6f`EX6PBcMOR6Ib|16Wb;nBak6T*7LMzdasBF$mIpP-Y2k% z(8F-K0znYw_x@Br&&)GP+}-c%_5b^NIXrou?&|95>gww1>Z9J6jCok6Z1 zam0p9YAw>*wK+$+l>b~3e%@Q3Kh)>7($Dru7llQds|XZ$qa)y-QHc)%4NkY?mbxF; zs)hcY-5#fTxT&jcO=#BH7SZ>;&|ux@{ttwPNj+;ESMQFzkxF^V!OVw$unMHlwN{h8 zADk9pSR|1(Fl(f5AUXrScqNzti+M;*H~wwbIa=c7u*B0UVfk)p-%GU5Y~_(eyGb7x z=ubXIt4|KAU#Jo+N>(CuZ%`EZY_nhzifHO4Ub<(0ACTelph#*`_%JqjuqnHz;MtzQ zk42_%N4;THvlcvpx;f%S?%J36*d^#+iXfpLk6prt*5O0rXd|yu3lweLzd$IiW;ooA zA&Q@AaA-dDLGWOhO;;skseAGu<>iBwdmY9AJs*^b3hI$6nxyE`-3-y5ZUwR}B+8R8 zLh8yW=n`MPzzwvG4v8Azpo4i%ofIwB*ke%OEr206QU&H zUiUQ6+}{F_=Jno-LN}u+$EprsCnF^v1XjB9FB8z!=^xz{LFuSILV2}6uBUK4i`0JQ zY*onr7+GPzdLg^QCU%Mkt83zLM!kAzrf?QtO>q2?l$@@;uxb~yZ_G0K>+=|SmgS>##$2ARrW~rd`8O4-%-W^weIDU=tn8|>3gzxa@e{y*M6hzZly@n zA9i?Lr`SqAG>J{hn#93n$qO@s?bbkf^@j8=sK`U4EzQFcf>~sK=F)b9r}yvNGO=1z zS!9@?pR);DL<6o=!cv7Fq_FU(FIj!o_h(UJ zuJ6lw^`(RQvck1K6B;(>Cs#URFY=?jf6%j&X@j1%jp7*T8F#{S-3o%#Ff27*LMN^#5|^Q;umUi-Az zHGidqRG-}5|7O46c}5?S;~3e+?)uAlw*9_#T7N-lrAjNQnC--A6U^L$X!_&dZGioT z_6b|fm%4Jq_}4Vu|N$rKKuw%`h6hwx<&|I+paO~aQReLJ=Y ztYspm=4lZ?cj`|jnK2UUtxjK^Nu8m$4Q{o*LcI;pc~*8~jLRp)p^92{dz1m6~oC{7=*6Sy1vCZu8oQyJDZDxyj?G7Svvdz<#(G6(L86E1X z(SF^}>a0Z)BZ1C}U$uJZ_168$(XUqo-GMm@ykW@XpV@ruI`V`US?J=oo zR@M0Qb{a`fgk$UI>Gw6>!v2V#EDJ~=hI?f?mmU6HtWB&Uet&!j?LnpJ_?vK)c?3;z z=+p39-PSV22lCox1)FiZ3yi$l);RHdXwTeS(5~{(It0+lWmZV`ZgFY7)h@d4 zTc%mR&*#D3`yy$Nsh^m24bR_HAI(6UHXZ5=&yC+I)8|t6`Dd)jf$<6Iu0%(Jj72be ziJGbfdnneSQEbK?40Jw_xu!q?WbpUF9_8|~P_N6l?s^%dVs0d>#5m@jTX%Ax3VEOy z*&3yWX;Pw#MesNaJg97<>(Wu|ow}*=3qj@R2BNnx*64KSA@!)HCZM7vb_q+gR*6t2 zSBY5FCpML3c3bm=2A8$&rQ@Ym3n=bUO%Is$My4YP{7Nz!!?Zs;p7mnJpgV5XF%PgE@*=?7`gjV zzOv1gsIV91?pr99`WcMf6pAP>y}YWad$8($tq*5M>#lyBx-vvOtl`iO`yM?6gK(pu zJsR{M#>o`EuJR(-^kW0WRQXR@&H{b^N}f{}tD#?{RBhnLV~Wy0joSJ4G3CP^9O}+D zRY+B=O|NoqMr*~X6`ud9Jo>BGwa*I6M@2)^#ohyi#t*ukvgnBa_`a&lJw5f_3`_!72)1ao#9=b}mKN?Su4k(=HN#)#+4D zKGayvDJ5>7Lu?Oc%>6m!Ne_2lqF}jC0+lR>&(6}F4c>vklP;epzxsNJJ>5s_@S%E< zW^|PXN#l}^1M_MDzA^+{NB_r3$M!3PArQ`|BP0EOp_B@_`(B}b8{|Vr0rl$}@|6QS zopmg7({SkmhVaWOviCeDQspbMV>e064cL3)|4ETmc%NkPstfBYeJ$uDU!(NzslKc| zKcIgEpVq=Bpwh&RroXra$3UOc(Hz~$dFrFZhZ?SZ10-!n&UpUy+V<#7@tj9=c~=+fPKSm)KTJ1)%87X6c&l7w|nF@kdGgLqxf}-;8z&n z_ubJA;1}L;U=P-zp02S!NtEhY2M;A>iq_ezR(tyfBV?xV=|^m|rPU@nifU8%;;|~Q zJCd2=Y89EzCE_65q;0^OeXDgsi!wK(kszJXn9@aIgsM}hBJ%D9`hLfjDLm4^Ou-9u zr%=?aGj+7q)edDOYmTR@KK_;8YuHR%{d0&8TR;Z!*M|)m{h_@em}Uwc@6_6JfYJCF zeJZcsqlq@BmX)WX8wa=%Yi0{euN36r39Xs!$gPF&j@Jy#_BOTWPGU$k<97aLBZM93 zTJuV+9Vw(gANE`0L%c1G4*=bD-v`7V2%@DmE#k!ED&i2N;-vDL$?T#RG_4pI3BC0P zav!CCm;HprlFMBFP<0re6!TzxX{N1CN?Qn#(~d;V&5n=i>FqAosLr6nah&rIx9kzE zI!|^(zV;jFtArZ5e-5pN{Wv<}9JlwEFyl!fc*bN2 zAL{ETvX|M&Jn*5wo4qV|hWaFR(6CC}Kk15b)?ESkF#^8$6TTYXk9ltl$ST>RJHV-Z22(c*mtqo3u+fN7E!)F^ER5q*3p$ zbMoL3y7yF8V{P^g+gyLYFh7IiYJZf8*(tj{ONz_-YF2KwDNx`P^ndQp$whx?{7g}r#t zr2b_folOE#`1<+VQX;awL?qW-eO@(^0QwYZp-3nHkryI;kr!zzC(`ZyUB3Kz|33B1 zmyAiWgojvv55!H!0XcD#4tU-bf93_wC~%{v#unEAN%)rX4rcK4*YpJ&pHNy5PR5&g zZuyoav8R-Gd2^Iz=6U_=SJS_)W`FyE8#Yy=k_q&$HbKoyVS7V5IvmY-Noqx0K z14a7uB-G7}%iz#iPV5})!8!hZ?=LpAnZh|d2>Z_3vZVI#-!044fBi9t{z+ka&I2k!oRa{ce=``?HD zt4e*5+?dy%1u}&j?_n$I@7N-C5vy)bLw8%6lD+4Tk+>cLdiYbJ5Ug`QA0FW^Vob7rhnpf;cjH~) zTysW=)b`Qgtj&}E25?YL{^MB8i2jy+?oq+3&vG~Fb)IGr9Kdk?=WDq4cSQlXA))}B z&W9X5!tuBDU=l{c`s42bWePj-py5mPg{o4_jHBS~R(uHMZI-`bh?Q>fLIJe>wco!& zny>E^X;{x27y2ZccMIMDz;h*av_0q@>Wk3P_8Z??eD**cV!v^Npam-r_!tjd&O0GG z2*CN{9Y-X|+U;h%AcIOy2oF`2nhEG{YZ8aS07ZdtT{PNDn0oScL!Zcah4M8bBRAa9 zwvn{cqk58{B`01u--xa+YbQ4(UtXmyIGEfU7?GlWeTvG@``M2}=Y08jg{n(_UgY77 zm;BtTyhdU7T>lktdb0P%QQGv2-6+X#1H5$*wKc-Y1KtS>e`bY0Ga~O|t<<`24)ZH; zgqWLeXG|n9V$90a9M5}o&(7n>ml+YR`mcyz07zS5O&?s?TRV}8XjCa$P zn=(WEKWnqrEjko7{=KxrGx^Eiub`D$*0IeyRCEj!%KW*TQgks+R9eQaJyD`A+2;Il zkrNfdE*6y6Ok`o2PxnH4VvpxQnBry0adCR%I&LK_yUxo(b@z!+FcUAML_PqoFUy`E ztHN1W^@pqeJ^iFwQNOh2=vJl4X~@CZv8sPiLVkfWe&L}G+9m5bjt;i9{ngl|lxet! z+t{3g2719{TQTnIguktLb>5%R&*i_mx9U=YZFGTKvX)KCR=7go6?W3hDR@%)!|A0Y zjjLx%Sw)Tz#cGUI{Xj*@fj%^nTI!+TuC)NC#+mkssH9AZyA6upwEGZQ!N&bTAX(h? z(&^K(UVgg^Q83AxYQ8QCy3p9ZOy=BUlhl=<3%k>WbiXKsuWmI6MfBU<7gnBUFMZ{` zvz3>u5h0Igl<2HinZo-imDZs{WG^_EF>2**8z3yQF73h5b@7E%7+g86dy_;jkoMN7 z{j@y_D0pA*1}OM=FBw|uz)D>rbC}s)B8{hh{a{vi%{3Z``M??w&?jTbJ# zN92Zk`rvS9<$fQOpSk+&g%;?I0_czh0XB zi8Dvsv$g9HEv#?R@%`my1ShE!T%*Hek($=ijicT4Fjq>WZisKWo;({aczgAsMqPMM zcz7l5qs_D?c)I~l-98KK+|SZ<*79TeN!C94|NH%s?|aeiWZKOUCtu#htGC)Ml6J9c z|E>d}WSd!MN5okjE=KPArTN%a%-XKOi_j)|%nUG)cZs~t=ry%?Fo8}DyD3OK0(t9u5`Ww(C0{Tl0Ytm-_S6D9o~@L1cU z;BQU)GQ$!k8U%#MaIj15KI7$g8^hP1$=<`Bz~pz9qMNx}5K{Cnivo(C z)f44=A0T@GREO9P>lpt5WC1-f96$ab=t*@lN9?I8bp@q7j(72A7RMU> z5#ac!WiRpu=Gcsjt(dvYKHVMUfA6cAy>tT2r1p~x3cRgP*9*mu4-qL15orV>Hc~L( z2F`VDVN2f-aIQF~m7&1-Fke%49Xz5o%~8oDit%{V0O^j?Z$?zbDxc&xUNcJvn`Jc* zKgd63tEl2Zyn;U2Ddg4rFQAOKSJ)kkyF3=@3**yg30R}Vm;h3y@I;zRpFnAM-TMKq z19?RUa%}q7#_S(6dFxRgV4V1*J+|M$F6>73D z{A-*C)zdwz(~98i^^dA87Z^+PL($Ygz0t~%s^lj>wcbc_253_6ggs49ww^+d8%u5}LNp3$>&n>VEuPV2@aRoyY8@ZUBt~)E&i7 zZpjSyx6Gb7**gh{OSZPpQ^s9?KM7-Kjkx) zCw6N<6nuAWh)#Hv5qgZiIA?1n-P;wTgwg5Tdd&FYKj7`BZ(%MgmHkxUcQC@-06>l6 zh^~;<4T5)McEpw%TMOmcf0k>kJoi9U)e*YhCUUZqs1??vd%X0QxL3-qG&X%W2$o0Pv( zlHKNPCOKQZwXrFwvH+ehYg3C-8mc4eyghZ!Ha2L73YTA}FkNv!Vh>|~uh!oi;9UOJ zMq==$7U(}mQNT6cm2H!9MbyV=Y(p4bTr4!}wmoI7Hiw61cOTha?b8s91Asx%R_v~P ztdl(R2lgQ2w=rdb|JnU^h=%>6!4_tdw5}fA-X~L(2yyAv0;X-E7Dm6X7&rqdeU1K% zTvzJGOOp?scmOxE6l_!~#N?jOmYKg&-7CwX<1hz8`C86_4Pn$5jM$@*?1JgWwxLuc zuRF4t;)kllR-6Q9+>g{|EZc&#a?RRdiqVP{ z)LL#Ij&R?uMibF)*gci2wUCbjdG$&@{zV^e^dD`T1_VPlR&_a_4COm`NMGp2XF+5N zf1b`nIz8RQPPA?FR_=-XwLT06NZ=n7wdXA66fD^P8Tn4B_?VNZ7%s_4R?fz-Aa z**2Fuj3R+9URjLq~Z zaaL$lkGMPfO(sOmtV$R}LwlJ1lvQnFB?#MPX|3zA${ndL1s_v)&zwIm_rIwax0n)( z-05S4%u@Ed4Q}6dM?&Yt4o>C7&71uTRkmQJ~GX{dN#9c9Dw;~ErD>CROyiO56 z=*W;zf%LE^3XlCD8o)ZT1YKD^HMVO zje2yd1ig7ib$eOE1929%a?gHYT;NU-7OPORd>QtCR-XGFe8_b^kZ+~c+uaDZsu-1v zG@Y-@Hs=-ZKH0|be+~d`*vo)p)wU|VgNDE3wYxZ?-*n~(r=Ilx#cTf+@4G$GFJ8U1wEFYXIcuB2UJ7zC>nNRwWzWNy+D-F`Xx zEU!bK+W-`H?K+-C&*4;x%46*CqtN{sZsiHA{ci9Z%o1v4(p|Ir3pLhiW+roNve^Op z8gJ~7N}T@nVF_zYc0v*RYxx|gm!rXgf64zulj--v9tIb~v?%W+S5uYv`AQI+FuzY} z;{|11)A5W#q@lmYGw;hEWGwqh?w=t-%d1x?9#6*Ix(8kE(j_`NdG=HSkFv7;9IsZI zu7%AygDf`61NJ|%IhKxWf6RpqXotKi;jnAxIB}xK#wWZzQo&4d7wO+Po_RZ7&4-#1 zjagaAF+d`x#sxaGI55sNN%kY-3!>wD-g@=C*&bS27~jt<<(J0Sl;oQ%6A-V{GoVJ~ zQU&|E`RO727&U&pLPx~X-{lWpmOKxe-a6LZ$!_wWy#A%x_v|soZI1_b#CbH5c4Z(IG^h0Lw-E{qx_-s z|J?n;p5>^P_(Oj^DBquE68&FCJRL#z_jMK)=(r#L_GjAYR4qVR9L!A1=ZVzQuV@O+ zqbmLnms3je6@MVxMfA8cYv0I%nx#S>l$%6l5&yD|^kGMJq=hO-m>k%Qu$A*749ynm1+UNH9z35 z50EFxvpTqs|EZIyrRg=1_KEb1L&``hX!;fX4vM~nF6aKvkLQn^znHW+c?%rXL4wf; z8HvTUtU-S7el!qS5isp7&IfcMIhcjW}7jv{YK=PChDB$dHKP)RMX4#)X!exz-iDWXo)(@EDp1 zgK`}k1m)Ug0W&YT=LZ8C+~Jy6eH3zMG{5NIhsb&oSpc*!CyS?fXnCQv?%6H3Y`E?!Me#^lAu?iVQbGxH+7 zm$c2u`Xvr0V+U+z(#Ow%i{kLViJfHkIb}6h%|Se75<~QctblV`rT574yWcN%IT^`j z`^68nWMub?6aS?BVqSa3xz(O?KTKe6xKgJ{)35fkV<0q(2+>UO(-g^nXZOR@SitWe z${*s)&VwWxPu3mgKo zQ>47+s@0n%JAT+8w+N!kk$mq!Wg5)P*9u>;#7n@4bOOK7IGHK#p2azQC)5R~upOUn zF6~Q_ywaNftAXd15`;(cMj}-J$qb|0VTha`FY*0*W>?5L7!@p(Z-M?-N7TgMe7NSo z*W5!j2O2$VYa68J%>eattR6ipg7yZ`UVV8H_$$|GwDk3G5N)Ao$RBpe-z723AGQJc z)`&*4v};JdJwWw(^6kBgJ!x*;1=4guh5P>y---TcPV=Dwe23HWf5f*3)$8HgF~Ilx zoxyi9O51PZ3!@^Pjz=qar>v`szZMFochnS>$Cfy$n6kBi%aZ2 zc=}Y=B(c7{=DcN^*~^Xc(y!CsHrScz7v*=xYoQnNHc#G3|7u^JJdZrQQ#TK;sc7W7 z*`o8K_WQX-r#JO9YqqtcleeHuMfr95_9hjf;RR{5)g1$Ji0XhBGsU%&a>{v{XU*&v zfrR|Yt*<`Mf+lr1p^sxiH%GET4Q|w=+jxJsc}3CzxJz+W=VfM1CB6f)OfZ-395L{I z76c|-)fT(aJH9jRz4&1l8O+{H@fqL)qPbVWe0Co{wvqcyYAeQk=C13!BKPLTpEK#z zQNrvIbZ2=1gt;8OEIRt=x4Hg#{ek^ahtjUUmd;t-LVngc|Gz=3{BFrt|7kuwH!*)m zQHrwq!XS;#15~fapI1^##5qzJevXP0#W3Peo?SnUnli1GdfBmmpZB zJJ~JvP{O|68!qjU16f`()fi<1c4SG#hAC2H*&gIbTHV&%GK>#NCUP;V_hKkI2w-_bT_IV3}QfqU0^Zt$jgO)J>{oU7@P zakFEZ9*NGnjz$LKPfJ;iBun1ekr@&!zYWZgzMx)rhDe&Y=N{%T0r|oFn2NeHzk|E~ z-*xB5uM^bojGNa6dX7YO%c1J&$^E~<+50m8vF|A6T-tX@>{?QZHHsuFzh zK9CKxQtl;>AQJ|2!O%vH%c^B6)CT`Pv-Og%yZUSRDLR)eJ9~O%ui1)5yo|Wc z^RHybk}Q1l7*Hw#xO<8DXsPh{gQnQ7QtIAQMT#~(DMd_VrK#dLTLhowgD=lhiY0|}}0z3r;s-t=*+_cpyvdcRihkg1!+;tXQzsjZ_+ z;x&Uh0Icz?v{yh~g(^heY#MY(vkK#Kh11j!DEVHUp0rBnFVjRtJcQuTqbw9^QJ1 z?)>f$o54{UyAqo$r2)5}S7trAn(fxR6=TvB)gM9Ayy=9AN*0?_am3q{I3V`Qi1wMv zE%@`^4zO^}O!oA+x**K~)Tzvy#T2gir1*MPnlV{Wxq@IN}lr1$}Md!X+NlP`vsRB45KCw zZ_()3bNc@=-uR2m%F3S_SHB~$FEr)kr^zKdR$kS2d+S)$_n7yBHV0KM_!pI9mwYlf z^A7zV61#RDUx8HHPmm4)(&w2K@b5KmX?$&Pv2R>mkSTs*Y}-bdyQ+9iC+RmSZjWv} z6Hn?!veHhU&9;Bpda~xmr*B_}(V*+XOmT&;lXrit`lI-)`A?jE;HoQo|HQW9%lMqR z9plrd6>tQuB=2!6}%4#}1B7e0ywc%_-1hI_IW=KjlKR&Y2$Co zJH1ac{~R0pV%3Z_6@AJYbILZiK-V-<7i$MyGve{h)n$)w9#TEz@n7TBr#3SgQ_V?a zp0o6ku~+u!Kw4zNhfQjvroOZW>~-Z2jbpET6Yn~@pfq{L`qEBc9ev%d9ge=*>h^=xnGfs_c0hnW@08yD{;#g46U9wxO!3bXRh&lot12_ zUNxjTHMDveT1M(F#yo$1<<<`i*=BwZ^0)FE-EqVeS{|#C^OUxdWi=&?%cP-<#}{AL zqH0}OknWhT4DC4YDS))t(v z_NR3A>rIib34Prw`gOm^*Hic!(X@67HLcN2c_33TR0QPW<_ydf-8UP&X@1j+E@jmOE%e=ckx!*H719OE8&!beP?pto?)Ang z=8l{cR=NVZm%39BafOPy!0dOnDRr5`z4Van&jtC7pI|M7>Sk<4IiEv9oJ=z*c?_$s zYHP#~c1tBw`2O$FSN7pc`nYsy`WVyDu;1SeO9W_L0g2Klc-75yw-0zt?(0xJ@voFZ z=h}yF+vshv)Np&h{Vp73+PjZX-guKcoH>O?>u{5l)>zYe`klAWnEx2+0`b|uU!SM- z?*t?~pc9e(u=h4Ns+kd1vu4L^=!9X7cxeJD^u}{%fTAYapPTqoVd-N37$bV)f5W@n z)UBgGPhUMKoF7cj$*oHJ*7|H0d#~(i@zGN?4UmXEB?<^Y2QUL zb1=?oS$Zfi{fLJS5S@f^1ugi0SV64okj_Q1t|T;;9TE2d;^%O$uiQ4aO=T`B@478< zhH=_Vff)R1AAWmnDy#n9U2ztwob4moi*!g2@c13g`GhyCzY#?)?W2C3H%b)Px2#&e z-V+MaM-A<@=~V$Pov^(RXF#R~ugVlYL%H(C8#D#5XkOL1k5DLb?bm2UpcfJsu>zDY zFE0k=wgUd7*sW$4m*yb3wHcxPRB0uj8^*d(V|4!8_>vogNc_X$645Nju_~oDvvbBx zwqr(4Coga14;!(0AKAM_qx2qPuVp(oYIK~pK1R}z}dae z>3mN&w<)6YNtt>@P=7{wb8wzEu8(_&1_0>KV>f12WL)(Q(eqVQ?2_NePf^ZDu~R_1 z8FfhXB%)?0^4mt`g3d){H5IIGkZ%w-C`ywP{eYDv$8?y5975X|FuWLBLvjB4W@m8h z`Q~xumP{b?GqLH7s6Tl6Rh`#2NvzCX&mDoRO@AD(8Re5-%xWo&IN#C;7r4imhbdAe zvNB9#<)=7T#OUwzsYOlVEDS|TaB*IV#l64Tj_f0|>Dn_Qh>TE>qLHsY<{_WA&m%_(HcEI{(Yd@YUA{me0Vk zkH)xP71Ac+-g}(EoiaRAIM_dp$7k~*pMqnEiYoui6F9w<1^G9w2LOO%FK>urw{q|n z<=CzP$4)QO1j_O2i(4Ax*C6WU%Of=pr?S#k^bCWaRw5MxeBy@BxFW1q?$`p|{N%o_ zuIaAfgRbdTePs_Qoy&Qs8H#$sp8MJ__ycA5)E*IK7zQbDkM027XY!Rs;iLIB9SRIZ zXuluW)R!l{uC(G-^v7Rj6^ZZXSVY*JFV|Y|^Ti^_5O!3cCO$^_czyop+%` zDk$!Ly(!53(Uc<4yJwcPXJ1q6kxZRzETM%Uai{=vKoF!kUsw7L-N(o-%P|R^F#b;% z_O0VaUgoWFb0yQzd+_)-zs~j%@H2E)TCKCF$f}qrK37PH)3;tqwU6zwax#w# z?XggAU$@75^!U6z-lWIJ?6KJ;Jl<=MUlFw+eX~6-*5eF&oXcbCGHD%yq~jRhU44TW zLJNEGZ9f({cXT7^nZf5V!RL`j^SPBi@5g63%u_&p8K?qC@>Z^5(+XcN8w59m)1o@MwVUNNMu&t<@mHw!+cZnxzR2&o!-N{0w#3Xc$wOTCOfLk@~}(_S6@m;U~D;w?>`%_s0}T@zC+VdHd(N`v9(BbQioYpZ&6J~_3>oxQiPf$3u_Eaw zh9f|E;6C?WVbwlv_Z_La6_wU{X01G~3f4-2Tire^+QBX3IrULq(WxpLbmX61`TRVe z-ACJkju^Pp4BR?*af0u+==*cwcQM^-9;@N*7Gb4C6z?!!QwpQ!iG6bTWYBhuw0OJ_ z8YqaPLx`pftUSRp;?>L%utBTDU#d*{Knzg@gH$`g8VkrRqISJ@>GF?$^)V{G`i+aln7CNZsiB zbH%=1xAofAaDgywYYT*drH}Pdl0Xe?Z`TJHSn_Wdd0moy}Q8C-y#^j zkGpUWs8}wT7YOFK5T%_fwp5V+gRfrZU$Y(x6aw27@Duu9>HKtr?ldZR6;@1ktl2AdAO6&UCja#s zEvma~^(8xmg|OdG+sb)(GC->Y8aFo+)vE;(Dpv7SJmh`rmokn_L&zvcI6hLp+6?=ihxbjuHmJdiaNJ3=c% z?EjkI2?YDAd>L3nRQgR4Ksx$G(>jAaFOGL zTt<_uKfc(qbyz9FmR&&GoQ#oA!F{=&n%`}~C-1%-z3(P`@`rXejy*($rK{=vrKo0Z zB0pLC>`A%78U;y=hRct&!9rqjAJ}|l!uX@_@x>b>Glg&3^HTRG0NXp-f0B2Q-D<9F z>&ZS=4R6`FA``JkdjA6-a)ombMFe20cUz~(R*#J^CWN_OYTycjDa_l$?m$M=Gjjbk z6$*}6)nPyjgvToQFV)ii23nAA_EEGJh?JG-8%u2v75^?)wM9hmlIIy!e$W0^aTNJ|E{^2)X(mnkdmU6rGHo*Z6~vnA+byzo|Cno6 zTgmjvVey4w@nOC=df!sFPa25*!YCiR>aPQ$UD_wtrK})bA~I--G}lMlbwu18GR14- z;+;I#hd=|!xU(z$=AaueQeS|o>$(AbqnW=li|P!+4=adBXvt~Y42)kzIhvykZDtCu zQ!Dmm7+=B$(EqJ4dnpwN!Fv8nULL*?$#+zO84h{aktSRrKMl!4#gO(Z znq_i2nTC+`d&MF$`@iQqTGuuxo)ryTvjEXtgZ1avZ|6Je&ywWx9UZn;#OhsEvws;r zFv@rI93?adF*4wBE`z?^r-)U(p%1~G_IudJOD6tkO55wKvSQopwt9jcBEoXF9<5O) zIF6>60w8I0%K7>~g78c&Af6QeoALj%8(=3 z0v7okpZeu@VggHR^PBmO<`1>b*seD}-_fk~Y19{jHL06QuM}8l>g7Ayr;Yay^Y)n` z-l83~&(zCzG#fFlH9R)s0?omu>cLDHN&i*G58knXOh+43CfVkpJt9&S>=0vh5{3dW zV%Rv;NtA}+hVIcvf2nuCa+gV6&)+r{*q%IF0e8tz)fPrv|)b3*gn!J-!yaW&hO zX0!J(Li^khYyUUxb0;4Kzt!bb^1teJzPwgL77fvu!Jq;i%1+$_Cc)H>BD5n_nOaaUojVcY45P&W4>aT)o7fI;>q4UTSrz0 zufIoEpJiZ{-##>Ida!u z5gM&#|Bzd3+@*RQ+)zFY!*c3CM3y@gMauDpG_;b)(q&Fvn3vIX{$!EDg()9mx+ zEd<~#di5=@(uez($>P0s2q+Q=biXS00gqInCSA7f$*L=pYEZNH@>UUAW>?zn-&6A& z7&cdPch&p{ue_x+3$dx*-=X(U>E|*1{FNW8>7~pqw3j+8>_adPu3H=4cH*t;YFeLG zeyJ2M3=%JzKy{z1%r>gK=9Ed71wj4B6id6s_jE3uBY39pVgb;>;a$|`p}^gwhk(%2 z1@g&|0?Y;Sf2xA%5iRJqZ$tGvc&;%mX(yg7zNec)V{US;MQj6^f&R8Z-u^q1e<((q zKL5}WdG!`jFWBEoA7{Vr?HNnySv`BkJrp){Z_$IHd+NVHC7siKustLUYIudMoK-FGrkq>(aOADsoYlR!Nfg2Eq9`-5`sBlKZ5x$SJ66)=SSL*b;|QB{*% z@IO&m;XGV8e~pY1&Of?$DWBV)`Tc^n06K)1=52nlc2U|+C%rZ< zhmV4ENvMxQE;s%snO~Z9&z?*6)VXA=>PleXRC!GIX50HWjlD8^aO|iBRkLGNcR^55Rd~f&ky3*w zm2)Q9y8KT!=-(geM!S$K=Q+9t% zwIWq(_V1ut4b@T;(RT8sc6eQ4o!fFLK2W>Z%>+3>VacJflc~k>2`H{f)3@{(zKGZ# zP+IVBBh65{$lb9LKD&jV^ufLWbe`EXOK0v4vgPBh3=1)kju)i%?)Q|Zbgs3P{o2a$ z<=pt3W!%^h%gN#72Rt}Jf0L`pPi!R4$ls*a&G?RXe+L}%ztTDKQg_XF;mHo0enKkT z0#ri^(KUl-)hnl7PI>bI#^KWA^tarQgrV@UeTs@aLo z0cRg%5_Xg>g?Mc>ah{O=;9KZOmN@J|^w0Dwo{t8Vbgw`S=*u4_g=QZvfo95Nf|Fmf zd|XAuLi_lzK8DzzsZ>vy;+yo&x??ZwCR4KbcbukBg-f=S50dNl{#IMYkXolwPt@9* zx4bj>M;R$EIK!UFs%k@6 zDcI~Qd}O43XT1#~1h|H65@0#%^+@_X+SVufa)lrF$8_GX5q09Wbyq73g|w zvKb~$e}8K%4kycXe~Wz6U%>{S#A|SKj0C-FrnYnJ8OEPpb6D8j==E7kL}n;2;(K}@ zcrenzcfV)obOLQ1?%;M{Lu^eMzs<7kajiS&EBLJzJ;m7CaIXYdY1cKn7gpMM9Xlzr z$D>cMKe0V6mz*!;x5{Z%4jS7{*Ph0QS!;3Tv0S!^ zUh>NGZu#=~Y?Y4b{vshwGV?gEv3%Q88(F^XbuJ-$+4t5~7{}wM-iE1KQ^sw>@)@E5 zvU8cdt(jO>dbTodug_n*%#a(|U)YUz&A}cQTIe5Fi+gA4PVje|P=-R2nfxw$?-7M; zdOSDT5BoxjQjovYA7hOWa)FiValnx^=}BPObdmObi2rVa?>c?o-(4SkFYmjdqDx*+ zTSkDLL18odzx_Fa0%{SQC90qCMmptN-0y{U>$TSQSp|IT|5EIV`N^?c^uC}sc*V6z zlM6P3;O*(rd=fX}cnMttdwOsH_=iL2YF_TBQ+bp1ThywNYf%>m6rTijH{%8ZF1TOH zsZRi|qX)(c08-b866fAUP>p1hSqYR;d>?^nj6{}9gymb7?2QOUUKAOoE#{1*?R>Jy(ruK`N} zdgb!r-NF>gics{M=P4hq*pFJ>T6ZCJbB#;CiQK33(dT}(OAs8GG|F9q@Y%!L?B6;f zp;$w*=KIIwup2SoAFAepK+s`qw|~Q>Ot4wMXdGo&2_|sO8Qz7jTpQacb5?=^Yl-5i zYt1PO;;FCVh>EJ|A8Ek2O!+Bzktv+rD}NADH^~7l2n9bqEOn1cg?7&`a}x7J@Usmq zHB1{lA*?ap*Dxbp)nmCDMXGVR{hcGly==*%q}ZRzbxE-@Wu$lxXO#v?VNNJHQsnWA z(c>8?6Vl^rooyLC*lRPhi^Q(Ce=M57a8LJC^ErwBD@U3UiJr92Q_R*B4pgbfZs+>g z$ptG`^$3ke21@LlV=0Z70yO#9_eTV{`TVoNT=^Ys=F5|o9*ZnHoeGjs8m{bNL#9)i zMAu*?c-R>YFTh8Y-e*^W?3Bwa%RYL&_JF}w6wV8x?^%rb^qx{+lLvIJ`|s^mJstMURxCN~{oX75zK%Zm??*(xXV;q#!|ze~`Q!nH zOQ!IzJV?s^;X@GE_NAAfdHS;5$4H!LcQI;9YnPg;i_B`dkwLHN+*$Gx%TLP$@?oW$ zLk3p4k0XTExm}?H|H6k@HhTE@Fq}Qcr2tpF7jCk$2g?e)N-ARq0O{EAk2z3I8lE}m^pU#zy&pn!ypdsbw~*Gk{oa?nQ)>?b=D&~kvHxyp zyw9bb|8=~_XK{#Z!u)ub^Xa$8`z)q^-SOVtkYDM3cpn;EmZzQBctZ~um#B%FWVP;0 z>}@!yFjvU`oK1P`Y4cH6Xrs(N3+(exX31OXss(vZActNNk6XE=?jk;9^-G*yPPd7^ z-RdU?jBU(4tG4ca3@&=3iPo1pe(#hfr+vh|s%y&{Z_X@puYb+BFU|3&I}WQ-dU5vr z$en>JHi{FrH;;zn z4&qPWsgFUF?3#CTMvB;ssrurNs&AdoQMK+^2<>9FQ;|@_lbJM;_|xO`r=<1TVki-b zKTUizQ>Niu{J-P?;m^0_AruedPk(K`;KZMn=AZB1xbB?>)`~6jgfM;(pf!3S`igAz z=v1v-B^xS$jFhD;RF1pL+)n<()%mJBNS2gU`ykoX)Tdfcki^s>BqQ_5{MUwsxE>hb z>f=)vXalFDpJ4Lo0$T^tezn=eP6Gu_U-CIH^)wWbX^p7xl!%5Z$P_=<8IH<(r`1f* zyPWBbk)s!c>y_JuS2ST{Scq<&QaD@pIl2;cQp!!Dg)Mo&)^xrCoIWpH@CMUd>NX1I zIPO4RiSakhH!wjLoV){4i}-PqJ^b*)Fg5&=K8y-JD3)~`k!-mzOJbF>+JvQb@zW=M z>)}gBII1&N#&~d5r4LZ8e$ho|P`5}FF#peTw+X!o{B!bI=ZD$&);G}rj`PH~UL2G| zUqzpZhw-n&?~H(tZ{3ED8s{FeukZP<^O(aoQ#+7<(fNi&1|0MI-1HJiU>7)vnSS3WxqNE16+VdOsm05t~thk=?hK02ko zVo7C6J(S9yQuTN}Q@pg3Sv26nim-674Wlsoe?E)buA3WhTaKQO@`*X!!M)xMo_P}{ zV$`)B=Gm*19?bL=G(F`L{hOH0NN^tYEs(pLhtg$rtM~{Q@k5wj=6KdK%P*7P{Sq~9 z-QSC+^e9*9Vc3GSBd?=Us^OYPD+68PIv-RKkg+sf$u6t39IP&6fC3&&`wueDRAN2q5-n*NVkN%Wi7t)v1tC_(B<_klbFxUL$j zT1`FPq#jb$yi~AJeb29_Z46(Z5Ab?lk9@A8;0N?Qq+rhwy<_Pn% zIS##eWe0Oqw zZR_6%I@;3r35Kn8yIT|WGTbcRU7D=l(YbLap{uZnKk!Dd$wN)%6&zwS|25h;O}gUrm4Wm)t3FTj=kyWIzX-x0=9DI>`mhXU_AkrTYt^}OCAy&jK=LM2!=-DyK#N! zi>2A~GcGzMCg8jCmIXggcAit3A$BW|@#?iEb9?SHw?H zzJN*SAB){~3`&%Zl7x0`h@|8RJSJSH)` zR`OA6rbCNOAK|`6XA0coawOD!KJ>j&eW>9kflhG0F{(uCSd@txKf-c&ydBTXvFP?S7rbo)(N?|r{i{Y?JbvU`Mm&Fw10VA2dx}4R z;WQYJiQaiGZ#;;fc|ElNlm25q`8kIVNnJ=6B{`;|F{gXFN$7g^k@@8Fd)QTP5)m=n zVSWz|-WjBC3Pl_;dW8Lf!f%HuJqF>g>GOG%xPNn+$`lZNMaoP60To+Hr)rr zN6+E$>a9L$B`S1@`{6y>Rs^xoslL|Bi#&aJBIv_0!FhQ@nc2Dv-8z~m>BX47O^zpF z<)JPyTlbAz3yAN%>)(#RUegGXUx zPS^CHOR}2DQa1Q4q%K>Y4e8wj`ASf}e&&~{6N=&HzEi9@@hMg@?fM33-hM51Ip`H* z7xJHj5MdB%&cqKhvV}c}*Yq==1v16E+iNDNjb?yd;gW9telht6tXnqgWB$=Ra-Q2Im`9nyM}x-#H{oT-mU)w(E&K%Xw56iY z?xLfb?x87dmmOGMvxc?i{AHa(s!YMz=VajJzW(E#d`Wy5UqeZ}KhMJT=a)hcx(JQh z3N6X&=0T}Nl*${=ti7784!0yQ!F5YVHaYcEYwq|;1FCQP7qD@KONIIRrS@$`kNowC z4(e)2@W<{P<SuU(t6{nSzVlXaG_oeWV+eZ8F`)pyu*TnDv^KZ}BDFl;Sq0 zp64&kyeppnO?h8GpXcQghV}A!{s{*+$tOwYQzH3U78gOc2J(6SiTM_82P?3GwGbY+ zJPW&LFV7f%`D27sZI?j0G_-=OYD;(Ptsnw8=4dn7nwI(!AkuwY7gRJ>6X9A%za1o| zm`JI-`^l^)*8^Xpa^iEy#1%8^$e-N$=+~1TM3j=%B7u2(s%}tmC2Y@?pJnyE&>p$# zbG9-noSMv$iz`+TH-r5mDvok46{=H&iUL~w_(tYGa*_1CH)Eb3SpTMa1K3oe34PfH zjBBP2&w8-_?eA)g&GDP|r2>onCepi@JqA+C%8s4mk3c`~;J#-Cffimr zN3*%SXQK-8kLk9F^w5*6S)4;VJ_D}yx@IcI@_u@+0tbZ!etDXSm6W!29Y0wb?aX)e z&-N4EzxenMgZ|~sl~ijWCZ~3AjS%IeI6pFg66{}n{fpE)-A^+5!GFp; zJawd7`I$Y8ace)fhn}uj3%#(uN`={lxTA#i7gCl!=BFWjS%zXwh!IkmB6*aA!5&$C zHk&PpA@KU7*vM63Z-Xyk`Q?dk#Fsxj<@vI3%MJ+fcj`$zEo$U{)W`O=AY47j;z=w- zuyM_Mu{zRBesShAql+Sq=W-US!OgR8GQJ#FOhMZxJ{Ch4-KaPF8^KV0`n8c^&E_hY?RoK9nwfQ2U@51sIxft7dGnD!GZ&g-{*)kJ&95| zd0_Vc;o#w>!HD7gHSif>HGgR-5Vda36O6^lFPiF+<-hFysDtVsA?r4=YP0(z8h(xH zEVFidLighYYO+AJ29#^gPmVe{|C{h2u1pLR(akxTf!FC*Nn9FVll~s2) zZMe&m;<_*x_wM1%upWJLvCx>6I;){i$ ztH%TLRBp`x6i2jvH$-kO9mC9&M^h`^A^fWke}w{f56Z=T8dLAURtLYpA7&czz1GFp z`juC2*L+;*-u@fIbqczhJAt1D=o!eLSe4G4y$o6xI_=5JqJy1ZMZEDA^fY>o$FRw^ zrA6b!&TiD7xhdB#vYv(-`hMZYV-|BcqUe*m##TKy_Yv}WC?4n763MVTh4S8i3uM@# z&7ntCJrc@G#68)c`*bL&C~4D58YT9|LR+HFpZG2mZRgHK4GaBA)-{9qlFcrpfAyqV z)*fo|?9!f^YdXKQ`>D($_s7Q|U3;MA*uB1epc)gI_YaI!-DhN^cRBNb-Q&~^+N?as zKCo~8z0Cyl^xHt_+2+=I^z31*3q3h9_R(U-|1HYBZ9?w77?)o1^Gt%CYedg=?!!k# zPxy63Q=_Nu+UV8|n{aL>)iLe8O_}_6S$mT^v>!BYZl(|z6LJ&(nw?*I7q{`*!1846 zOan%E(a>xUKgw{&f7$sI+8=sq$gnUW49xxzU>3O#bdc~d)6?ch7>OHbNcLC!?L&V? z-8b9Rv~i-P`}}6eb^rmIY;j?M#A4-RiT7tp*E`8N<{@?xaumTIx}ygEu}7F?CZ$3r z#+RBHHT<8U1n+S;WY|sOOE!mFD574R26`sarofK!RV)$6xu(F@x_(0bLv$Q3pK|LV z`vGhQIr}fc1x(G1RXq(^h_{Z;y7=8@+)2%&9|ou*hOZ#=NqOHDv8qbSLU9x_CEM(e zd3Zrt4M{T@{eM2}M<2uRF<7r=Cl-q?MK+3DO+)v{B)Y}DL2Eo3`FzVyS##lL6dC99 zVf*;f=-(f*|4>P>Pps;)4CIoD=#$h1_Be$2c>!aY&A24%J3cB?{D;Oy%E&uoEc8h@ zvy6|Stb1?~EH%9aZh`Y-+nrq3J!#gVE1!5`u2Oq=@ZOhf(%rjM-sAkar5 z{s`v-K?36-VZ7kUe2ncp1@gI<$b}2N&}TO#P)%yxE`K$8`85E=Vc#qwqhTM;`=D7& z?;yq(4;sxNmDgz(3=)LFb3LhM^3|2oaK8QjztHC*>3jd(U*m@D|08`a(%RLKzs9jZ z5PfzQnvbFSL`O7oULpNi{)NdCxRyGH)Hm_zTUrHIj9SL7eVH>&teY2n9u>1}XCFsCuUO!48@vOya= zKG?ttQT!KH2=D5auZ5(hum=Z7B!*Pp`sV2~T#7^xPwM(_g&6Uq6u*a>Mfn?`dmm_^ z`N!_H4N#vf6`Nb{pyD3CYPhB_Pt2#%g4KViJkrVDf1N8TiUQDEzjndQLcApoF4Yy> zWbdhz$-|dnHu61kUr0W>ZR88$1p zzChpl_68Oh>=kG)p}hkCkekzYx|gVsTVDKmA`9J&3}Ib}Pam_WE}cT}_zRhcVa$l^ z75>Zbkg&F>BGS}_*^C3dgZ3MDMWN^I-@^4jdcO-1S$z7NOv&tih5eMt$Ev&3Rh`O9 zTh;RN+xNRJ-_(FkpzVLAa1@{NqGuO3X#!X*1QoL4B-fzE)SD8sdp}W&7O>=AL*4jfG8|szd z&_I@6#=rRUj8sEsA$bFTUTpWiKW6|&{n=Oj`3E{ru5NyRY=0z^kDNrk$p`NkB+ty( z*%bXQ*uQHJ=vsn#Y2T%>s#`QKC(yHGf6_fKEUnq8MZEeQWkC5NUQH@dzcI8;m)u;m z9nuM~gm*7(7uaBrFUY4?&3TOfN>_D<$saDiDkQo#MC2bK$4etJkFiND&l-stggfG83DjS)Z%06XwLVAT0RT%6b3Oh7 zZM*T41NwFxJ_!jQeu~I_f1iX=$`L^Cbb$w;tD+ z0(8YXfaYeSVty2VtariTg}?V`y5n*Cp%T*eF4RpQ?+QU)`WSii{vlnEjYT#(NUa-v zi&uA~^ZgNcnwiJ?ch>GiYr}_0eBnhQQ|r3%-Mx8_q|N^{U*CJBq4~Pu=KnNbH?7SM zaoEMcRiF$@UpO;AQYqGa@3KZd318hA1HLpKS6l@Q%m!7i=JMm=-E1~2yPFwpF&J6 zG3tOdY+`DTCR7MGwh|R&srHg(JZXXR4odMexw))nUyVqGSzB34e_d@OkA^nij`r2Z zs>PC{HRo*BGJ+9wrF-Q@nEOK^3I-)PqjAvTmJM}y=Nq5`J_w|0GO>*R$d&kOt>+IJ z`uxp{lkF1@RNhkmCUY|MV~NeM4T<+Le)zM=dN@R>g^z^AM}J_%%^A1jM@)>^oHlFvM(C9mTx*-UWIcE`cttz3&c z*yo@2U)Z|SjSaAM_v;&C>qEZ<-I~KR`}Q}NmpXi(DXv0`uLU)BPHf8%)3hoJ3;QRHrj)DR z1J4w0Px0b3UZgqZ6f&8@G_RO|sJ^u>Lwl(^`0S2QqrMt;)PpwwVe4&cmb2n~40xak$QobZ24|AKOnf=5M9nXh1T<{j(M2))ePV?|e-2Y?k zOyHxeuD_pzAOXQAC{a|Z@$aC)1%pB*f|9@lW^{t7pv8)cts<=(mPDv11T#^l!&s_l zwQ9w+wxvp~A}V5#)qS_t4RL{I99dO1m3hCv`#jIgGf9ZNZS#S7w!55r?z!ilbMCq4 zHq=s^Ti%7H7gyU|1>jtjdIvw_XEzS%T;EwrPIBlfDCRD9NaV~nMxHp66KN3ti2rkF z!_+1|$w`^wxS%s@T7#U%$@an^DUOS|+B!`Mi}dL0z96VoXv+_8{dw-Tph`lB2s5 z|BqzCabC>46QmjW$=h#QsX|s`3CqgQtk%ehapzi7HSrI)Q87=>1e-OKpQ~TiYGxKc zon^S+?gJql>8C%}H>{)Cl*a&>MI`{J`G%F|OuR;4JcLtc8vfNHUgKy7N)Y68WK8!y zS+8^6nFyF#_~!g8)#VLFg-1X>)p)|c%ZZP0C>E#PuBU$TIYpcGtarH+`sUsMV)`SF zWy!<8pEV?ZoynMVw`w-R9(03vHtgay<uK$93dsW7 zQh#F8#8)y3l$oQrAq#}C0jJKx+_1mLzYIT-l5ZFMQEE3ELP8bqS<%@f4qfux7%Adq zp+x`uP^=D(JpEiKrX=yv`G_&2StgAK^U>{t0nO!gRbpJ_k;DW_VhvULlCz~COYd6W zkS(CY^-_C0d$5cfgn<0@#~IFNMK6%80e06Di*s_c9*B{Y8GYxPMc2~QxvIR>EUmuw zDVP~_O`yCk;Hys_GQ=Nl%B@cE`T)@^06R)r&veP}C?JcF&6vm>zd-B|dR<1CVaFJe zMY*@XWQ@&8V=<#>wA*eyRnby*_ z9aTxpb?HyUsrM3QOA-9)M@hnyU{*gQV!8vpu*mLny`4@SnE3>oQ%{*s`|!z=*D`*` z2VMu8GmK1XlJaRZOfr>Q0If^f(fTpv$~>fE?kSin~zT z3Ha8PZ}!}Tm{o%aQ2Wi;AyC)L+gI^zqdG=PF^q$C(Y;kD4usfBF-19V>FQp_&*_vV zK=%&x{KO3;5}sk&qwJo!^sECNspQ7SEEj%sjRV=$yvz20xBm@LuWSLy3^I5uyxz@x za!%%)@dp1rR1p#bxk+ya4p>d;UVlv&m<2tvyiMnO+_uhMW-__)9niO0#GhRLu_?;9&YVGLbCjg@b$x3b7i}GK5j161A_F`A z$rs*kz+|Yw{k?c!*UCXVY#g-fD3JN6EM4*|-FY461%OKT9>r@9TO(9EL||QK&~Iq@ z1SgxVGZ~XIftrbvS>Pa(nDumhkgJG&C1RWR^}E%%_7GRUy%?HJ+t%MTUvmCl*zqNI zKz*Jp4ye!SPP+U8ZUoS@8BpWCzT)q4iqF!6nSZb?nVxwSvzIB~FADrhg=$CG50{i|OI7+~5_lfr2Nr}qpoKq0w;66<2gu_MJ^K%O>A6yLQTeVzz^;!>1MC$I?x=XF#wY zzIT3TaDe>7jXLqk=`@xwQAYl8#;@70wZB*-egO{ea5u)_T;aT^-{>)s9S!hHlaAiA zr%uo1KXFr?!){(BWrp26;DM&2c2ikNA`;Ke_E0PkXl6cblUs)@r?x<2B4!oktE0 zin?oQPEm{IxZ_plVY<$1awub$9rkN@W-%>b$N+!Z4qj^p75q{kk>a&};-EZhe8m3a z0+_K+8+o7k!MG!*{r={kTmwW`A=LR1ob?YhX19)$$76Dv|4*OEO}Z2{JCkFjMlKl$;qd7{5DcjQ#mHGC~M2)#1c2cOkj7t@M*gpJ~(5)WOb(vKzYNY|QeO zJ$c+$=x25q5zGB_5ueoKcTH^re{ICK%kaIy_q1F;aOcCR>fhb-zkfrMIAfrgmbJZ~ zsFa?zcj3oL!;O8Nr8Q}E>{lvN=9~c9`}4*yPv*le+-FH3mp|gv(uzO6_b#O=l+orm zSoyJif+ViK{7|5~Uj}<{sfhLpz;X3UUnr>CRe)y6+1v<;W3HxzFOhVRZ?f}=C*AC$ zSwp2&T@7b1r%6mGyNMrup4mcf+K>Ly&CSXA?@pDz>7xg435}9-$mJ_NfA7ZWI6&`BfdlPvOR*B3Li$SM zV%=XZ)}>MeO6`tUOA+uk2pr_OSnqR{yFnn!pWri3W?E9Q%8LF>n%4Q6b^APR)4fw~)7`l%(5Z;jlpqHR{KQ<$rW&^UO)v6J@}m4<-7+rUp-fkS;JP1) zmLF%P!25ffk+Uetti?4@mFxZ8F~|GcXMZyD4fcw0qP%C>IPKaiyfzs79s07Ic*_O4 z?05Fot02+eQkf&KwK3mFMxT49nQyiWz-3sCxjOR=^4M1XvM?W>G!#~+(s4rjDSLN8!t_v`b|ylJS#2ar_6R6sw6@-y4; zSNuCLf~IZJV~h3qYbZcn8>|Og?;->FvE`HRO%n-`A=njv%}7wbc&z;?$8nH0J3TV) zBfU)d*bnPk+Vjl%xBNvq7*pz37zp~U4?kmg3|uC4fYC36OnV!uQ>fxYEBY>9TWk=K z>j=iYn)u+oIKVX0&t@1GvVcuO4P%|76Q&#I{H;Yd+CLBCarhVHAO^!advqQBv9IZ) zTO=FlT_x|hrb~YM24;FDOgef5{dFIqWZsFgC{=HNo~#ixct~B-y3_Q zW6{}vlA+Ud$+1+XSrBhvqmmzERL#VI$8VGR1wF~1009&K-(MTl7=?V95s*Lgyed!v zKYvX?J3BrO70neIF9LUR%WCD%C|yfcz?t&y<&zrqt6#g?HpSkkHtj1R*H zr|{OBkHzndza0WL{s@qf@z3*tcB-i|XYa@#@F-DL=_^6j&4_6Bjr=(Jadv**d?lUi zo1gP32oQM1{)bl`V4tA`{|L?K-oFmAOlT6=$&Yv0)gO4G0qY7 zCLsUwwc%-5HTGgFjT?XT-LnjUx&4yv-JP^vdpnxqx7jaGbVOX0=^T8gy6FE`7!@&! zRR*<@oyb}&c$xR9y`56*%54Uk+Pu26K}@Y(>^O()i+D#0)3tYzzLh>``qzy5hwl)< zoAsk?yoFzq2X2Y|j~faeXK&k?PPc01mNQK&(cR`Z?41ab6gk z6-LYgCkw>|`D+MQ3}03MII8JuBI;jWp`M4WHM|Tm;hdLab7i;X!@ezRk5BZ=Q*%6d zYVoC*7Oro>sT^F}&lNiR{8l)C{ep@)+pcMf=?wR5J1X6qN`ZDdoTwvPmfcuU8Trh} z8|aVYG)zy2!ZZ7o@4Xz%{+Qyj$jOmkYeNf7YiX}$_C%;dxZCqhMKfMfM}lCVzF^jmoca7Xif=KW&m)s4r0z1XRWvyl zTkzjp{+$iz$!d8x5eyWDD^}DW?)ftf0me1}3sDDLKyo?5W1zk23FLCQ<|CJ{>`YbW?gpJtM!N{*+Yv>9l?r-nQnYfK_Qf{9n7j9Gswe@8& z1J@{JUQjERQ8|zJm`LJcBVTR!#tem2Qd=Xe=;fw=oY2_A*eREkz$Er#MMv?8o=k4y zjghQ)z(3O?d5HDbOune6a}cEHFwmAdoU7z7v);u7i$68><*awXWp+OA^w@Kk&|_zj zJBPlFeHBBekGT77Z%M)H?rlNAMiNWT-5}^!Ld%$Jl8>@l%=#cxvlipG*}vWj?`ule z_ehl*vF9K@nh)Vi)Kt%0dk)|^f*nTN6k;yhH`4A>-4MQMoOS|qZ~Y^4zEb0trCOd- z(E4!*O%qWPrj>@`!^=X60n;AZD^Gq9dFfgVMHp9RB229a2D;~I_41PNlC>R9PaLBi zl^?9_z@i=tJ`wc1p7;;NE)4W!J_`Y11aGa_d-jusP*mgch4r7#&)-Tp`SmQmpyQyF zP+z6$v;6fnE-TF_=1XHs=I2MBuX`nBXYJXJJ*7SP7yo%r;9mgzT~BKp{<19mJ31Kn z-)#r})BW}R58&VR;19uH2>u2CHKW>wzcvehg#-WmcHsY=zrOzg{HOTKYfV2jmuwga z?8R(F^U;ox$2|HOn1%m01qT1C+JXPo2YmSY&)_E@osa(g<+Xr+z3Bh*Lg3HamA_l~ zHBvqL&o}UIY6pJHU*G=#{>AtE@X;px9e}_5nS$NIkND-mza!7Uzr7v!PxsgNpTVEQ ze|Fusd-${b=PKIp!ACiLkl{b52Oj(t4*YgI@c+(V-~RyqQ~c$%z(4T2^gr9)Gx|@j z6aQ?N{_pkS>pz1(m;U|bwSeEDf6>p};@!jVqn{^t8Ti|yAIo3ge+GXJ{Vcx6hmRKU z=hDx28-9>}c6@K(Z;yUX_t*D7fPdHAAA&!_{~yTdgAD!q`M(2yyZql@-+u;w4*i_s zFRumu9s21A{WP`Lz%d_x@cNqM?)(-r4 z-|53wyYPGC<^J<*qiV)hoRi%C)H>9OsL|$){)1`QZ-1UJ4J}I11%3AC#};{NO0NC+ zPTosZyYM`zC^_+@XMA}ZRmgvkMZV!Ia`ly!B^0`(d5mrbhL+eJLQmct2;ZcCp>1pA z5Lg+)T;li&YTE zfpJ#Z=)lA(tNWRy{L~clQ;kJ^`M}U1R?`lfd2x2VXfiEIN%8GEA{uFn|8TEY+i@$}Q%Hyildlb1Hm z`S0M*;Xn8I3u^&C^y7|S2^+`#)jtMu#xE@0ga6-~4E*iM8^`&p{15P-1OJ+veaL7H zKlDFQ_`kbd{7=lnf1m^Z?Dpv2U*&%b|6%^ZTEp)eSB3xd%l_31%m;U{QwSYg%KN~qXtR4FI@z2{g82H=cpBsPw-@%_lKlk_xYXN@?`hVI_ zLpk{O)BpM(rhk8x{{jAU;9oP_hm1Di_l)yHPTMX0ApLpc_do~!h3(P5zsmm>{=@u* z?G}E~|056kX($K(e)|9Nhw1-!K9v2p@L%9BtTp_u{Pxd3`eAQ1|N7>y+fxSq_T;yX zH~tUdzsFx#oA6717)5BRcE<0REdBiZ3j=?9^22fdD*s#juSxij(HegEXGd3Ap8nKs z$M3i-{0BPl&ux$X{Z+OLzkmIfrLv2hKs%w>HwvBa23KCk4pL7Z!2eRGpedX#8xT={ z^6UDY9=~wIc5^Pr8b$q;rn0;i8+`V7kLSIpzb{8v@P9gYy%i5Ld8ga2fA)2HcBCRz zx6f(u!P?$vKYIcmy6aWmHzQG8VqX`}VoaEx z3+0@JQzy!=307}KgM1=bFo9YXmWXAR#y(khOizZZ`Vj2mWkA3dOy-^hSseuD$FV`X4X#dlWpLja3Zd}T%7QezYS`!=4^ zss1m+;};Gn9vTl0=mAiLy6G7!44fJtJD`XbosKumv$bA}(j|ZXtJ|C){>K%NfR41g#Ym|_*r3e41t;yD4SyH@d?frm_jbIWC7kcB}82Dy!ef;7CA zW)%X*=y+j(%b1n44PRZHhlCV%>SGTf?0-@xZ)SE@>c;5gLS3oZHW`UsfZl^;A{5Kl z6>~^c5jyuO%JS*lMtxqa=Gm{;I12Q}NNlV94<1sOaM=Auq^+-La|&;I6K|>13CA#G z^9~t>>_11Kra@<+2IuT|h5p$cDaXNF`cJ3&WawYSSTru3&K(Er0UKz>!jITZ-KqXP zIZ276M@D1?!As>LLGxm3x|bh|vo&KFDZ);m??|6iD7};_gY=gFy!%6GbLPDJPfnu| zSDo2%eINfYfsolR_~L0Y0<3nb#*6#?zd#Gd!|lA}kn?3va6HDA@*W;z$0;^zQTE{{ zhL^0h|ebL4WyTed$c>H=jPtjU)xRU+Ra z8LY~~@nZtiHJrNq1L049b}RZj=|w4w&QJ)W$wiCVn9-;>L@PBOX7btUKFo}VkcR0P z4bur$@mPjO_j4EqqZkIKF$_AK78^StPnNjyVb*@Z0rHW{La_zlswFf{py{)1B;qF*f&(jp${LgNobH{<_F6J;su zskRl_T?uHYZhb5awS-3b`_|BxkN<~b??{&-Y@FMz^~3#Lx?(auqi?c%MJ^R5g52Z_ z-SQmES2*@fmUo`?pa9rFH-=&#%HFjfBS7P`JD^q>M%xdb&XC=bF1hRhnZ=H)iCux~ z8jehcFg=$gA}TohDe(8!G6-X0cBt{&d>ueBc_1UhJ_ILPTBrRY{=G!L_{2HmXXDj! z&trd+M)AENF!JLwaxt>|`X;Kr%OBd)`lPSfLr9*f?|9X>;wO7rA1 zXQzu6Ofma4wfNuH_i4Ar-`wnh7V^c8|`MucO`zTZX? zm&?Pdrx7sN>$dh%EZp5?PuE+;?qPHLq=Oo#ZYro-&u$r8%rqZ!CRet=rT*>pw-eRL zl^}?JazC_J@lE}{>fj~A*)QPiHhZ~l10Gogb(_WgpL~mPxy~LWP<{MOB&JQ}1mpL! z|5RDdeD1}6V9CHR_F2@Z_zx0>Vs<27?&A4%`)Ql7?BuTr@X&B7e7yz8+6w7#{;+`V zlaiB0P5uT^xzC>N(QmP#r)z!v`$;wUzUuTA_%`;?w#G}j`uE`pdrD8z7wzdJ&-CxF zRo`B1)@S06(7S!T-W|_Chn450x`BTpLC~Me(vz&lL7nP0s0&t%0VAJf=5+O64c!K- z=a>=dQLa=smmbLfQr+juyG40_tGu>-4H98{{2`?F-q=~Ov-X6ZLu&8&B+s<>x*+Y{ zpIWlBVSDu%e)K1^%Y0AjlRjl%LGny}`>MVNkzv}dPv~_h)XXr6lOO%1yFYZ3Xza6L z-r&$@+TL=1r9*2U-qXr|`9;M)8*k|A&}JVz*9}wqcMDHTeq1YjZ@}Ym&+uKV_CHJV zZ2MK;gGgpM?f3Bych$~2HVHS@)hS#dIZWk9c8N0xiDyGV(`-DOiH~Zao0Yw`_Q}3J z*OP=Y6AmjhD#they!|efBF!rnN?yv1&l;x`b-<{hfWIzBcxtge*!U#^tyoNTzxAP5 z|A3i)!xbOaU4SronM4HGM@?cdKAyxbI|e`XQbgd@ki!A&hx$4&|BXI z)9WqHj}66p1?nE;Ot8Fk$(MH{c>WRIqBonn^^>m6uXfIBE zBH#T;d~l%tY_@q7(=68?)10hTUs+S}ecfq3um!Kc&IMQUtKfaXgLj%L(0K!Dn*-o! z0&u?L<84*Z`{pm>(jX{J{6z)~`zOfn#$UWvu@)!-C;lReurEcrurKDvPd?zw>;vvx zw^!r#F7;hluOpJuc9?f^6hWC8&sq9HzSYs>$TFeWqJW9#vN9U@SpC9Zh5#YGr zWZv>Vas6%NGAQI;Dy8mGIIh=m-@0c*_jshS;fQ)dJDC+8UVjTsX|ZS^j~8f>$hQ4B z%5!tuK%@FKjjNf&lV3+G*s-4cre zb9vI5;Ql|^o`xt`JAO#tb$FYkOrDhj$7p6F-`AoV`Ko51YzYVvbyI{qgO5ml~62CbAgd9n-B3cMLt8f}aCYq7 zVCPL%bg`h3GOE7@_JB?n&dQM%V;==$TSAFQpdA0)b?HpGO>t801_j6YQLta_51@dR z*F9_N?f+`Kt!6y;YtDdnOLJ8`+BAm-)5Bf4NFt{#8~VLrcRcP}7HLNdR}ltaw#gOG zS<$gb`@mWKH7U^IE7rWK*$M4kBiY7DE zgRtaY)fH=lu}`b45g%2>n$+3VvByPQ)z+}DeS|gdpu9YQFIULXXg~JXLSF>q9UT~` z@NGg%DVajC$#{wscjEu)D6#tA2_h}#6C~Bcq?i-v$<+hjYWhE(YU0ndLU+20)nvGe zkKa5PX&2=#3$vPDp%;^HQgB9}_nKli!Xbh&hvx;cB$ih-?xIQO!7^zdd$kGwgn233 ziasziO0xRQ3e4vkj-Ott@zKnEguc>XO4b#&>f6zQvbZ>z#}W(RhLO0#g2mbX_NMw4 zecsR6Opjzx6YZ{g-FQt-e;!~pX(yG}gJEaXgq@y)o!QHd+nJV4qv;7aw#K!1yRLI} z1(oUxdvT}l)7d@69Q!g|o8t{XWG{=D;k@+Pbanh0Q35LYSx;l{7)S|59Z#1$e5-5k zxPw}%E7k>LYpSfFuU1>bzYE3Z1S-iDiq&F`boySFKaqzlf91M%uf@y}f;#e;wFD9P zBS+MbhNce(>Zr*Dvdc&kgmWFk74(eZ;!IRB|77shbU#mRlTv+!f8?Hj>Yk8M{g~vf z0xNgS{!qWZ`T7s_Yuzv)7D;ukugGCVRq;8771582`J88;cr1Z7V*jE)>-J544TWZ9 z5N34-wYn!*@i7C~8u6}J`$WC4hJH++-TP#2pY5Du`YaTmXK0q_wG>Fl$$JQltIxuk z6nEEYIDd@}$PWyP=2zQ&87GiUFaB4??lgTC8yg4)F`I|t#$+3j#i$koRXIDOGd+i> zYc=gnec7J-v+21ud9LX>^|%C%2STRj#_^aPTG4<$`=yO@OaQBF&$;plgR!i&nBil% z`@iNgTrYzoZ~(9eD#uJao!6y4QWbyvHnk#ti=V4j#U7unx3OE)JH9Env3Z(Ed@fC; zheL^3=GGqi9kS(Y@tzQF5|{?}vWiC*TP@g5C_b{(V>?xgg-z_=y{h5~RYD6S2UP5c z?X*U`ZVlZLiqA3=w?;K3;)lm)SJZM?S12}epjGCwwlascS=~pLS>1>CgpL}h0HzV; zV!9K;pf4{B)J6s^GP0}3%Ibflf%P%z?9NAZpi>-iRt?Qlo#JkCC9ISyAx?#3kV}v%q1Z;PuCZYETC4ko-7Br`W4o6_bKPMTk?!z{!tPj6MdXr^tE>fP5*u7l zKN|V4ZMmeL{kB&&Y+svB&LfLxdbVgf7Ao@1uCb!zMmj>UvTDV^ zG)d5Q7ILG%23VKk0uE3C+j$}XSC*d3#`xn6I_JfVK3=n19@jwC~CQy%qA1;q*9+l z=CeCS#s13e{YKza4ab^GdY5BG1M`(xne;^fvX;pL3+R&As4pzlqxA%1X(owr&04!y z=@AQ&V63Jcl+ZQ_T1|gY={`nLIkY`8^oq5b9w1**_^ygS(^GKxI#et{5V4f<`m^p% z+m-f@i;dlo_}4cw83X<%Rh^}YVzuvM-dWxAlb@PzIRxIO@BxE4@A)=ug%S(NJP zJ+-PtT~{UL4uDy))LG1p2c5v!6n?iIW%n zYA-G&UtifRZ*iG&?t6l>3|0t#Zee&x{a>;RV=0BzPvQ?A*`LoM{zEt3nG?>O*Myx6 z@nRdGCD~O4d9vV0>qWPDR&=#qft+z%(j};QOONTMI{cJhfs+Lm9ke~kZ_4pM+?;>H6~dl2qq-8Sn7h2 z`c>*`a}Y~vl2fOP@eOE${oYUQZI3)r0Wk{$|IGIWkbM*1qVLytcIa1NdHuAIFUgmI zFZnNil#NL-b(nLLtEeX*%%o`12g$qLFPUO5pjbVKv)K1T3#m)(1wVG+a=Q9iu*4~6 z_qZ>`KTD2|%VO=b2by>V9A+qc>|Zke@E&hHM%Z+C>*n8LS?pzx%2a{4q^frinm1MG z;pt<*v~PW4D}#g>HHl-eA|6H#&)+52K4_X`90U>%-$q#ti;aR_KQR)&&v3Yvjk?GP z7jFEnOFaQr*ytcni#aF5t8i(EvH5~4@2c}s6;^Shu%Urm9B-V-t@++4IF&+y57p2k zmTzM=`9)7jCP-MrO8Yf8JZ-ABZfTB38#O<`79z4Z2s5g&fHRvLc+7L68Cnb24nH#( z*xSu0nE%!a=I{M5e?0g?_Zy%y_!(V|1RDq3s>XDu`u`J- zI1hbzQPs-5dgcYbg2aG zi49L{h!@nKYb|IL5}9tB=8|eR2pQ%L8DaIML76$nbd@{&>8ng(^*>Dxrc|cQt`wS= zT!+&9Lmf@ri=KAn(iRxY6lq1jprnSU=Ta`_mJfM|KP>``|5JQsg=t1X?CIG&#QrI2 zsOA8@=$}XzN+1Yu1+N{Pqu#kgT>h;o&_P7Et&Q^5K%$z#+pUd1;i0mAN@(GD9{Fp~ zoP(r;)z|*pLNjS=C2sbCaAx^s?1Zs447|f?+RTj$Oeo$c07J1x0j1>s=pp%IbttyN zK4Lwh*fJ6eI>p~#k(WO|pGvyUFGzKnU*O>mP&-;TOyaz{U~C86|GaS>6=1Q% zL*2y=sdcVDPaXHr0R?$E3}=orc4Mm@^T)tmL@tsoYlC{U>5aOwxJgh|u`IR(i{(q$ zoUmQ6nJczeY-C|g{30BKKCADR3if-$eWf2tEs}Igte7e@erWF|} z0$Y#x*+hF~iQ2(kG6jHp)D^+qz-2{mp$Hc?tI47B)pp4b!1sW{&#Ox`uC>o_jQZs) zfj7o31HAan;u2LAZ^hoBcfO{V-on`0KwYjm!8iCDoAHe>3;>gouybMx@nkOYlh!7F4KW{U1?mean&@10~t(7)>ZYR)n`ti*<3N}n5#3HY-N(puj}uO zAx2H4VpD93HR3gE=%$=b8JgQE_a+@dUzIU)V$E@tvog2%GN(Fhf@jG*I8xTZy^{Ch zAS>IYXvF3G)NSSvrr1cuir913h*f99tKa>3m2`XKDyyR0nJ7_3fb-#O(ss%SuN-cS0cf!ee8U!S0c**E*O@qm6|L;x ziqpciPn@P0Yyeq)Q1Hk6oSpu^yB-owa&7vU$H2tC=b;|%NiMlv>TFQ~hWpsQBXB}GtgbEa6c zpnkp4b)tcnXrI+2w6{$ejsrvy5U2x7%8e{n>@`U!(Kodz^)uKyiO?}}k&;ZGyepkW z3^U*lU}gFf9#)h#2PM&SXbUY7<=xSCuhw_d5Q%p#$V;998pJoo(LBReCXn0QOw^mO z=V;>ihVZEV5k-X5ro?a@jU4+M_oceG$%WgI>u@47oS35ikYK2FwBCnU zDcZy}e98KOQlF-zj8XStoKwd%ij|5})T_fKI%N8(qZL*BZnxJu)t9&3ZxMnljAOW}&tSCU zY&)__gRz}P+OYq{jQ({OcxV`i4}p>C99B^sUo6$o0~t-ZwyNUQ*b7K{|I%Dv z<*<_K*kWZ0TEoz<7MU@@P{2dw7dvSV{W`@RDaN6ofDQ-m#+ii)S;I-W%s9urAd+Cd z3&$pwYKp+KpenvVg|h-yTk%osLu*ZhtRCiEEF^*3@6441HcvK^ z0B-;2e^T`;G1#;0NjAw*R3cd-JM%-i#V8<9uIwz-$^X(=iZ%p9z-6LYJ{_ZhRZcoQ zh3U9@V`dy@pRli1#c=W$ZC9!~w8vnV*7c3Tp*A%=Zg>ljU|^R_Co1C7KhI$Li9Z8Ypc}R+Z89R&;@z@!U*CUZ}{XJGp^QG_6&| zZxy)+@Jd}pAk^lJilrYhRa{{bx0+W-XN(ifC|w_tl)ln_>v%E#ZT6QOA}jdosI2~q zwjpGQjiJ7R`Yu&luQ!H}`hB=FRuC&XgHI~yUZ*5y+gQUuM30O4(sqgS^OF%iwivy$ zRyeJkw?fUVNIL5|JFF2&4Wif7laR=%G?eumi-=SFiZeI!B?MKNE6>}_bH~@m%AVq^ z-y)CRG}l?rDHeTeMCQt)CKDL-%cIVC*Ln`;RUhlD=ZG;I*<9UV2DUPZegvTGY-RfL zvC8MmK!bQ^J!kfV#xx{k)w852wD-jh@W8nIc6_=%2J z3}tbGu9!<{a`1eJD+X@A@YA@eTqzp#))j#4^B>3{EV$R6A?(up48qp@+d){e4A|R{ zw!Bf1yqWL2X-oU0_$*x_QZ!48?UCZ}pXHEZr$7Byq`2^?|C$s#-k-tj7lj71R`hNH z>KZHMt=#OMB)jBgFg*QTc+Lb;YfeC>8dj7%&pbt)sZTFz^a8?B$J#fh^Xc7_yVODs ziIUJyy|t?GJ=gm6%Y#ac^4BH#E}4=y@MHEVqW|^fS#||2U76i!#r9Fqa`I7?9{Z7a zn>l0nn`3#oOfT!4mu7~sckw29y(n)-5Er&jc%8b;4(h{z)CH;Y`B)P}7=uny zb*b9a$W%n>(H%6>^K>|+<2J|oAFFPues0~rq3%>5b!h5Gse@Aono?TJSSfA2bi|?9 zF{D4(ezBK<-c;#LMrbeS4YI2A*iUONmHzW*Hg^+VvO5CC!z)_Wci!}TSy^nXN*BvUO5&ybE zX;<5K^VW1K@0Rio=)nW$MIpPUeq8+qHisbB5~?0$4l4JaX`MY$Uq^ zDxPs>sW4Be*aE_SmMg$o+CH5_V6x{QImf}ie|e@T`&GuSma6_xOhb;QA@&hDt?}>o z;jo0J_v?sCeu8@7Oi+Mfx-V@pNXCA)n&U$JJ(APs+Uu3*ogUyOSD%>vN!tfgcNQH! z{F(Uvv2U#fBgQ5|-!|;%VJ&#woI_#_eW78;zSa$=AaYp?o`=y)9wF-XmPG{NCXSV} zX52#x!j%*0Z4yVW$-*=n_h=S>{;m(~Aql5nvH$vGgM`%QW({gAz66SJuAtoJ40?ih zgCjQS-g_B{ixbSe>3u8umqLdGYWSKwoYF#ZTu)ZpC+ivYhcX7K2afe}Ur25fIh~h1 zy_csuFHK){@Lrze)T6$(H_*H8I?>eP!B_;wG1Tm`o~d;591XfgFG#y@cT4j2q6|0> zD}R)fE;xVU*)-9^XBDbe|63{Ne#UpzoZA)HfWn)#e*$t9enjSPE?DJOFh z+VTCJ{a4QUXQO)?ESlplR&w4D^qc$^&aF0c)P-r{Yo{<(nCS1nQn^Hb|I(y5A?uS7 z>9@Jnu|d`iorT~;w-2iQOe}s*t5fTQcoY6yjJL?Hv}~F(sdQ5)y|>l0RV|FemRH*& z_U1UdwQh4D4t6h!IK+P)`Z!CSk+`^4^l?yyX&Ln4bn(v^G|6%Rcb`wyb1BaaQ+pKD z9Sf#S)PB})fWZOeiG36eVsh!GaN5$bx}8KC&vg-W=ad>mpKX9KB(oC-k>o={3`dJ^ z?EtlEl}RMb#$z;cQ}ZyyIOZ)*P9~6h?>`?e2doChB&M;;wkzh{vcti(mW<#hY@%yFG0$U_E}B0>Qs#!XxRORuM34-F!yWf!Rh0+ zE}G}$DMXk=y=+`ssswqMK#~_TrfjQ+lfo_ZKxiU4(hN3CqFFemPXN`@K>De zrp#|3+NgMc@0>|W)0q)&k`HKTwn%Y;m*Oa;c-xo4ioU5QkeDv%#z)hJw>mSyADB8I zxvz-aX-v9g!^Px1+R30gH-ZzpT=ea22E+Y`zr1ECQyGq30B^=*3ncl}7o zN#4hg5;%PABn@NHXgx_y;e#pMe5XV0-x1*@$;u@g8<5*F<%X2lVdeInd`*4@#P%H| zNsY+l9i_bQ>BDvYyj_(SMq&R#I7z_3QAIMHFjA#G;I^MGO_zKy-UaNwA{Q`a9>b$_vLn z)cMXsa4wstzKLUb!vF0ex7qVlR;61O@{Qmz=ZWAfxX%6)0a?v?B3b_MHO zBg4$g+HaAnwYN)d`idX*QWhR_9+D|4UasGVv{H>o*FdYSV(TOPO-ZL)D>L>NwOHMpFC%Y?8n)B;JL_y&E`c`vg zyi*%<<*kJI);y7s%HB2y%`niqQW4x;Qd!+WBHyR^;y~q{OP~A&NgCY~Z`o>ZRvIt7 zL%3I`upZ9{2r%QPu-!VrU>1-?;7{vl*7wYizSk5pwK$K1x!j?$(TG#q?4Od%PVEDx zGWY=;Ln+5(z;Tc?)&WKj0>uz|$gQoIVtoE~?3a#PjZ3~`mCmfPSwokkS2b=w+`3^C zW@zw-Nc8W)K9L9vVdm%XWQJn&8F=?iVg<-@=AhoEO{TG)Omg^M$Uryg9nEi;8Yrmi zul%Mzj#B4j#h2|J+vt)Gobut|*)Km_c7Ri(dZHgFO)l%`17Tn;2y-bnY4J`KXJz!9 z{R@sf_B`wenV?+q*l$s4pnJ(<=M?p84h`yH%{WW7s2fj~>t?O2xn?8*KoXOR8mE>P{JKP^^=gP+Z2DRJ?*h>U=0crd>xyJ`M`|eQ#Ol&M zg_6H)$zP+9=Z*ZudDY8NK9IjcaU?c#P$`lJh5dxWXv07w0RBieevsB{7DyW^b}Sj3 z7b%IC)1+>+3Gkw~Hfm&ez&Ji{91@7+dF<>m-}!V)3xu|f>9@m-R|8M#D(Z05nY)D} zDx0Rtx>FfN8jgM$FAVkHKh7Ozq#DB>f@BI9y;LK-RMUK^j#sMXPO1!9CY~1N8Fp6m zXzHZsq%on3{&c*&Lw|nRd8$ssX(>Bj&k-9&M9S^g^JOtnn*j2k5~DS*NsOkuO4X5n z;-$g;+a#@tpXexx6A#dcIX(&>b!8c5jDM1XvdT^GOn242X}_h=`$dc{erimC@S&)a z+*CbKRln$tJ;8FMUOeT!kgH?Ib+8}49Q%9W13llBSRg zkc6?Hsc`B9sBj|cOJ;sG`t2dq6)|U~y<-2263CJIJU)z5g=G^uOXQX4c5H=@cepIA z#Xy<%C8B7XbXU0AX~3m;Hh`vqYD^`7cg7#u(?8zY-}G!t{lkhH{|K_DOV*r=_}1Uo zd9#sk4QMO*LKQ|yo$9@Ol$QWuxcGQU!rGdlR33}HauvCMPOjv$cOK*Zp~TY-0Bipofm7#`t+wCAUyf^T z&!v0+o?Mh}|K`@6PAv_35ue&ZF+1t;+&2Bp$p-)92Dn}RXZpn`z&q9hbz;C9hx=sp zHgu{`{7^HmeG0HXrT;WogYg-nXro*EkF|dyH|?QHEB_aDYb!}4U+4I=RfufsWa2*TO68`8s26(<~*I2IwIjoMoCx#Fi zW;yzMV%Da#F@Ps$n5H^P-Q=4XtZ~@R~AodvV^XdA$5ng8>g4~v> zN)7Rn3~-WgJ|@$3@+Bqt7HP%%yuUs}DVJM(eOO;Vj;gu!_W}Uv_So+}H<^+R zhNBwo(TX~}Qu^G)kHdTf;wf`4ed|=< z=b84|?kHN#P4bseno97eSmC93Mk&_2DIA^d9dS#;K<4V>NB89uvfEy*tTCp*T0pxC}| z4Hb{#lYL!>4B;XF>pK-h@$*Xd*XLijpS`O8sxlAKm$3JR^gTW{4XU-jeTy3%N_z%x zl5cs~{MfxQ9rR}wvOL^zmIRYKU+tX*9vldBQId!mUgIFD+`f-;llLjz8*aMfES^%Q z8|oEL|B0{E2P7=jEA{=EQc2R+m*hGnIYUWicm)pPNyWJm6%l|1LuO-C@?iJ7F^bry zlFhExPo;haxuuvC0JMku1NkG{4qI_U@f*%JT>~yLk(QL}Y(v0RHp&9`K z{q`UgD*ZO*rf#7RtNx42h5RdsgT+>6oe$!h-I8Z!XSd9m%26g!=q6qAB3}(_x@p_z ztbYiq!`ym|Jy`JEiTp2ksAQep#Z)4AcI0LCZFE^q{ax9i?gZu~DWgAgErdry-ppo& zKk_jvXEs9z9IKN=SsjzQHJE8&ojq%N8PwH->_w~Kp+B2Fx{v0G}5&th|z3PNW;|WJ4IMAu?OJU{f&PWxX7*W<)XPPuxcr{b7Bzv=Jbf}<9oV@*DLBrBqi&Y~hm|=FY z&<$>A2qbaxbN*b)tNG-^Z(Md?v9aFR;M|i`zZqplY^hj7#pf^>C7w@Ww4Z^rB_luT zSvH`hPFpsqEoExUTKk|hI4t2Oo4PH0DIS~g8QSKoA8;Nn@j0FIa8F^WhY}Ue&u4-+ zZC_7*`=DKFKR>%~e+a5aS}C?4zbsdesi#n+cdY8`>rO-}D%Gkc!{GY^CB5g$?*`|A zuL=F_tsj6-v;K(%+bBk*>5>2iO4%P)K9O)fQwO5aRff~cSkL>;;Cni~_>z6d@dke3 zduq9pcVN22{)vE@I!_;In|dDX->bog<$E6*km z%_+AlX%66xv)6rK=HLnTjcXtyapeJ~&TaPho1wwqBh%Tl_;Kxr=Da2x91`8GJ1R$o z)zQo@!jp%iOvXn@?#GH^Pr^E?Pbjv$&AW6 zJ`^;*6a?5c=ynDX(bEl*?C%gXlG91$cr<{9ZFZSSgpa}bB*J;3Cr88^z4n-z_%x%} z;yv-{{#wJ!tfv(gIR(EdwO7M|gS=0nOSOS7Os-@JH(N&(W8l*I1|Tv6Z?m6CAtdBE zFHGI@^kO3&twt!t9eVK*FXZWvZD%2Jy$|GiQjt1cGH;{1qGb2Fv#=`R%0iQUrV{rYOaAN-^1&qQIBpEK;O?VUJN& zf+sc7E9Zjl(B=X$Oc{nMPPNjVd=v>{@ z>E1`1TAY+ukTRnjKjJFKS92VPSGIx*%cgEOHGVDnwVzqXoz8O&tL7h}xD?gd}_>@DG5&6kKP7hQeDy`Tl&CKg#!>*gvNmvAF z`ZC!He}^esvr~?|acN+?bd~!Yd$=(eE+ZK1%k`i6D|syJR`NG)G>5tZN2dKf)&5G3W<@JlDZ zCB2bOu0-QaU1fjj2rw<=6T{E0cukjtRe%O)B{v$hMPESRcRIy*<6|N% zwl{{e`LpswX9s{<`(x%_iX3DAK{~wzi$j(h!J^zAAhld|d@#bP{O2ynp)x@tt>s!&Geu!3uTyLM}IiDtVVCEBM ztjwo}`4o;{B}brr2?)fm<_fInovOlo1 zb3`5qXr#T$d&e00a=6pp3z2d3Z64q3$}M6Z4a^`p{3B*oWYyxUOyy+%yRySeLRjME z#CQy%9ZOvU2J9ng1$#jaThVQer(dxDhpRK52w~57@{|n9xrlO5ddj33pXYHYE%+jzB@=K1yoS81a3wjvHt}olXQ^E7s ze(qaeu65&yd;Y1%8-0Hf>;%-T&g%Os;lxA*=R5+17VpG)1Q19^&az2;y4%p=S7o5^ z*q`w_3Riqt-_vC3Ojo2!PFFH%=KBK~)78LKXZ@-V{%z{oth#RBL0#+Y_(qW7tgpwu zwdX9~m?I_>QWQOEirqfUX>arA{`O|hZ*dM_SbQ5T^>)`ztcgE3LEPBCRWB32M!Qnp z+Pcleuc?ZmQ^>j%j&({^w7ofU1QE;K9iyGXY#6mKo~Dg>3``+2Snhe6{GW({q%Yz+E?CsJW`@ytnoBbY@Iu&XP zPJ-GSf@3>T4KuqrOc;gTG`SBVnHv1*H>SaCE>wdR0;!Xizdn-u6Uf@b#{cTtmW}ty zv7$d!G0vt?BF2XG)aD+ls`$g2EGxGzFR-GLrvbi<7hz*(d=hh^{-%d2R#}Z(_1-;e z*~HUU7zp+>(77N~>DZSkf6Z{?bOi^JvsHNI2=hhdm1>*HOpOAzrIm%_BYLt3R2J&9 zDOB;AVv|dYo>Uf2Oz-(5j<$JK?w(R-Pp{pz3Y(kKvpukZ&!Hu2JA^w-F4Zwzi5_qB z1};R5@x_pkL)*OnPV68z(lGDN#5*0x$5&;+WmIs*=5mYQDzstamxWiTUTu zP;8XDRfyLFlRM$Bn(D3zgzO!!BDWqcqM5>$4YPqS`zEwd=;UvDsH1iw8=q9OT}_~NXDb>V zr(H|zZhRUi7k`|C{b;xvGA3BDJ{U_9>| zT3MaPsvgXASRp5)7pkO3-**(L8OxL{+sWzP@1DZJMKNqt-&8da`SO+}iP~=)cNSPT zJy-NXJ#jzK%szUG!t?BpPR-AYcL>g`3+$5!$r0%(%mnOReO)V-Q$mRW6$i=yGx*j} z{KyJ6kfwG`{e;<$yC>!g;2A3)RLnyPuf*ib~CYh++Zu73&pEfma-`9%13I#Q8KR78j&c>ak)(y?v#NG%kE_y#E z97(UJ`vsvaYH99y!h7UWkwk#8SHu;6HOec#Z+Q%J~P16#=n zpDh+b*pyNy8R&!?7ed!XcA8yTjf3{BC%on`*1Mb$Zxs*Y%&uslff7sv9Vc*XDDjwi zMJe_Tw{1=*YXMsQjH3`U-MK}{i}7|@tj$h>_Sb_I|F+l%i{LO2w+Tuepu{`SsfsOL z?CaU|3ynMXw{FO%)mY8C^;G}%_ux=_UFMppDoV2s4( znTR6_;H+(>p+w;~0I6#w?Q5ZrHD1$kQ$c-a9S+#oY}aq%_=%c6-}g(K!we%ao5KvP zh8Mb!J+{QxxW?wELKRD_8|Ldv)ALreFT5BobEdpvfKIe!Vt|KYuZCkU5x?*x*pK*i zB(_G}*ASm#cU?{iW&@3#+yZfLZPK<^B7qIk;%T;L+sEb+_u)ePW95hsD^gQDAINKtBDUC7%=um+XVri?W1~1 zl_0@}OI>-^q^M_8KhNdnd6v7Mc$SHCDjF^od6`-hqXU+G>m&JKFBpgnMk8^$uMX}D z1&Ia2j7J9sTixdb?gR)0n4fK~4$WFmL;^MAX+*PLE{Ft9pE)b=9QT9S-Mj&utcaSx zA?)XMDBIrtB4H&=XPCq6J`<$~8z>l7v_JHXz=`1JtVd$sx1xXGYb0?+xpeL?aJxaw z#{X|mduQf7^o|ktriL(~#>7SUG;c(C#|pUJ3|WTQZbt3vbDYB^g=XzL&!ZGYCGRg8 zEuf*Szbuv!466(Isp-Mg&75Byi0|Fn{j-~O!wUHdCc3@cLu1q1)A#=k-tqr6c*#52 zEQQOQ6}{bzd$g=;2Vzo)^R&kZPTh@^04_9r(e6UpUC0%=v$|-0{y*{`&5sXiT=`vN z`iRBO+_NqHO5-lD&`b`dh7(GJ1$SzQzF|dA04U}V^W!_zvCn{uIZ8$Cj$0P*h3UnvW07=fDb6ZU0#3BeV;D*gOb0zas+vT@ky2OOM(tWi_92m+}^=zVt0+hUW-p7!sDni z1Cp1*2gL?l6-Q0N+_+Kgs@aq)U;Z!Y(v@pzh&?m<_@L@w=+? zgj!}Aoqb65W<4>(U9lWP^AmhyqAh2l?Vr49JLqsG=rK&tW0N!VA~C6wufb#;585ej z*aSg;E)~U>xoo1$V;i%axucI8&*TY*bBKdntMm&T?g10gGRjPcdBEDQ#@pptLFS(A z@J4?lKw8m7v`34bRHTW>qM~u;I>(Jdlo1`pN*nk@2E#39a<6x@x$+N$I~-H{|HtVe zXXp|#qL@@V4z^U+K7`n?`VeJP@w^D?6%3R{;HnZTs*D=_OgXoTzPO%iYM=mY=1u^< zX0A>EKZgA1<4XCB9A^$JIL@#?6b&jNs0pPr(|Eifa1)2|fjIWB-sPDeyOJvaf2J2Rn4!|{nrK>p!Kc-=n z8;Py8UnQimqJgVlk}s2(sY4|&bueYw&CB8Z%-s!q_RkqjFX89tV>pe?&*`+|roWkD ziGS}L@EeLvC|YSKJ^3jV;2hoAui25Cm@AtFYwZ5ODnSKRsE_o=(N#DGrz2L-4#hS_ z`q*&o6k4q$WWr%h>Hz8M&g&{#cPV<)o3s!Cs|^CYV-Da_*_cJtd=Ulw+vk;L8lxbk)UF0Yrk1ViqE zx|*D(2O{e%B>&2M9w_Zf6ujSH54peu9CIX^s?yNPD#JooRF&t=&+qqq@_luFViM?J zSKXGc;B~VCUkeO0aIrWIi9GsAxG-^G%pm5WQgUD^Ut}p!*qTyB(U7I2%j~@^D_57?jnj$QFGf|_9bZo#Csz{(QN+*QPery=qA_PKpU-*4G%>zk<8$9N?mXg2 zM?85U{e0t&Zj*n`=p5J89i58STOCDCdI${RNNBvO_uaZZom5Ew>gZ=y)I{N9G<;bE z>zl#bXmj1QUeaxEe2>R>bu?Y~D^0%kpC8|nR{V<9_RBBQPiIsB95b(n68+EM|0YM#X2_Q74vPx`{|WMHML!Z9Cqi&cjyeg( zCl+zO2ce%=@;VYP6^C!25}mDOSaUqoRcu;I0`bZoFyuMhRbl2a<8R&~bQR7Asj}uQ z=ddb1nSQ3|QYwU7P_^MK;v1EjNfP!F@>*-AYUVT}Vqv_NqeZf1G=Jyx zs7xmsoNwIh=GVf>+fQsygS4LL#1YCOG_gBTCPwGcQ;PyNZ#j4g?cRPKcN>DZ=uM}f zwZLg#{Y25xCf=p`w#+ScSi-V0&muGORw)ftpi4to)kSoVMmKbxd=T7_n3JQ_^Yj<; znR=e-A>^ICmi!P0T6>Aw3K91thck^t4N%erw*!b`kP%Z00>}ucU#Xa${6Bewv0o{lflbgn{ z*;|$7XpK-EeM4}k=<>Q=848)AuW$#KLI35+T^ixZQz*plNU@PYj|G~6roKd3bZ39F zl%PTJ`;F`rzGTI~s+EQED9TH9Onwb~Ccc7mmYuqxfiIy!j+NbtexnAM@jAIK5J)F--qB zLFF{Ub`w-iGZ#F-hz*dK#D+E+S=^$L>L%sPDEF?0Aec%`Ws$;iN%w_Dx-T@+ePL3& zMyujAdCsWHSX2|;uIbnj*~&4tX%MA92`6fLBx6*;%`s-4=cXuiHNRa`buM{U6|Kw{ zt~32N=9~^j$nZL+i1lktKTYo-ktEmgL;n7${$b=u&eR*5I*R9DDgaQJR7(;D3^$qz zUy4&*`0bS{o$6>;q;iG8g-?(I2^{OU9QmiL~tarcNLtxlQ0W zfJ9RFP{rWX9Zx={CU>Bvvt6n+qDAQwq<@I?_H^VVzNn5kh)&+jOXoRVvhzshu@KzG#++Cq(nNf#vn@K#ez^u~SXFiWul6(WG8mAL>Au5uLZ3-`3{+FNk{o?8Y znEljh)oG>iOz^ z&wpiI(W7|0b;Wz*t-5!|2d#g-Sxq4Gz8U|aud1y@?}hW<3?KGlc-#A@CwiSTtfK#I zbw^hxewH3zeb}4TvG?lVC-3XZ`v!UIdql85Ha=GzZd_6vI_!niU8g1n-xf-Y_!?m= zWCd3)?bp0CyXaht=ADP1jeqH8OmBJ z_1Q7ps}D+7eV*2OHVe^q;2o{YU4>a@o4uXj8(cGa%Si7msH97JnfulDXDdYk`0uSS zS(ZO$sM1HHdA3Q#;Nf0GhWKUf#RBx_JKvbG zVL}AEgzmf@@mdcchnVdrPIG6e`$ll6h1PSUjpskwm zy>pPU9)dBu^Sf4bxmuw?pg*mPOcvG-rGiGj#?r6b$4={fOPti8-0hqmyGf zOnCQHl8Vg6*TB@A>_Dmbi|rwr9yqr(np&b}oU6W)HfQ>D~w8>Y ztR$DEY$sx?j^goSe;0@Q?g93#CN$Z+WFp3C%0Or}X*_!f zu?tu1)M-rYN@zM2OT4vUY@nY)S!Gfncs#VLDgp%p){Jd!ZOfP4j}^;vP$cg zQ`(puUz4lzzGosT+3^%x!O|LK>sV4*nYWfVeM4P>?)AWimb`!DL8%H+CbGaNPEU0WRA5K5Cj@E>6*X=>Xe^X zTMJG-GB|UVG5S^`$%?kCD>hfh5H&{pI|w@y1y;w;I6Medz6-F`*3iuntZj3-SN!pZ zxP~*w?1j@yYARl^qK_h@Qmk4Rp;!@5Ft$1Q99Q=>MF^{us&Um4Gu9KM1HH!c(P*ix zbR05sPC#Z8jw3ce1}nA%6_a)+heU1>9CP`osss;dR3jEY$(AZx*!IvAgsN3%5ULgm zgVqy{HatEktrPS_O;te-5IZQW6Djo9P#xPu@uQW2SzH;l0Prr?>ezY3sziN&2Cx?; zj13%AJ@dQ+D0*z5=Xes7D3ifo?7YKCaHoUvndcoDp_TJhS`34TxjHs?Ua#Vju`kPf z2w-31D&U0GnHbA?R2w!a)uO=HTqXn=U5x$6aJyUpa3 zwrike`Q&5se7^xx%90?FxmHDBNGPbax?fmO$-%k><;dX$lEVw&;e`dR9=V-#IN~tc z9IiaL08Gy2r4>DxqLPzU9v}(gJ()7dt!8TKSajAlrgJxItV7#VNL__DZFH{3nvi9` z3X?p?OoK=|&f!o8KZ->bVYw)|xhOAhcE2|?wP;KQE9_t_WsP`O%zZA^L$)^3_Dy)_ zWTowJ?45MUx&w{CZAB-+35BqbX`q6^M~!(w8mMLxAz9u&1Zy^R(4U$mDmLo?o!2vl zhM}985LJ%D$s^8rrMHn%t61gu$*BVHK{)pyZXaV@83w1Hu{@4bIQa|Z);s}HY#=2q zkhr}&`tecCtof~}#*oYI4`6nz0{_4C(GTX|l051!*sT0SeAL13-;P{`>3pO8&xI_zc>emhn!YH1ePm&Bdx19R?~k7DP6-|`5r9c{q2BB% z%`Z7EoA;8qTFX$Vwt83c;B`#$gZ@T@_bxy>DFcz7n|= z5D#2j7XeqH+fe}z4h81_{nqR5>6u9YfB)Z)k7m02UG?hKt5;R8UcEyIB#u{Iy}nkc z0;=aTwm-Q#bae10{7PXd1ZGvpuPlPEN_VF1J>QtP0l~GwDpQao9FD!oWYsLhl%*&` zL%hxu!5~sf^)SRh72AJ#u>@3)vHB|dB-KZyS{0*~+d#1Yi`O2FQeD-uFXrFz$AdA= zW-V_3HvX#=6I(;84ITCnJw%7NT)3(zN-t#FYqefrJ=`iNmsS3SRk@_8eSN zF}hv`!|uzXAM#{cWRNPf;ROvP-YAWWX3%@NQF@ng?ac^UVa?6t%bqc6+Xc*hMt&Pi zV(vuX-MUVC51yh~qffy&&0SfIT4R2>E3ko-k2Mv$Js2HF`UO!IqOlU-9p6jfqA@~y zy@--pLj>^HQ*qyyZ@Yb1%u0$0sK-~LLjJZQNaw)=3_$bA{s_1x26r(Ze8 zGQAEEBN^BkIfY1L2GVr94Op5^G{@QB6bPLO!chBL63ych0&H_i4VeBZ%`lyMBD2}m zF2QAb-Fno)WnH4+NOp(QYk`xP6-4_qhCG_}ZYHWY0NRin!6R)|Zj2$BuAU$dN77WX zJ(87=pdrRvGhgN(x=)+uN;!eBCw#yOt1~6Ez!IjSaWyRp(YPK$)NJE~e*()_nv?Cq z3K^BGbqxL(bKb_r7dHaoIIb|TV7k2{rm2nCPUk%31%V1M)iVX4Rjjj0n zdgxr8ZrWS^IvMUjnK&qju={mbZ9b5DUa^>kaJ}w z17LnjI1yqE1Q*R(*;LxYY~r4UyS-;0!Z4vNAQ2>IOoAw2;9a&T*x@wFV_J_P)` zs=hW>wQ)HriwrT|e*-9e3x8r2_eU<;d(`<~YdjZ9eKMXg)SRa3BWjG+7%KK4)A;N~ zR5_9LUWq?3eT4g8m2+A(sOT#37!dLj_h&4T4VGxu#tez>AUk5WKO-LznAS5s+I~4w zLF0&#FLa{} z8sg{Cvk_|^R$yH9+4V=u>mRo_!0W$(c;>Hi$v^&@1Ku91wE2cI2$p-HE?)(2op;lL z25}3OF?!=fKuO>J8srn-{ymYi^flZgh1@tWow@Ow$#?8)FTlI)49M|-AHdbv$%Gh? z#~c`89Owdsdwm`EYPXMJomOES4#NiG7X^Ci2NYJ9AvcxzH}Gpa!*P>jt$bJRlHx9% zLAf1swi~vFT#I7((ixF+6XYqy`ObO}cm)@h7O-*77PP=xvhJ{6z;&G|p*;WLbS>~Q zK0`~-59!@J!6C2_6v7`+hd*Em?k;uTed|BmpuDgDaN~;0_Cd&i#>(58MK%njyEmu% ze~6W>p#c%xzGDL$IxWmvjOHQ*->J78iUwDkyel9Peyqu5L{1sf#9e|e4v@KV9+5uH zlxyfVQ7FFwIk3PB1+yzOR-J7ud5oR~7!dE2RU#GTGiRPvB2U#oVU7)WgLUn=TQ|Dp z;ZR^c^v+kf?c5c)DX@q&ekNtROl;;X{7{VcGsTl2h*3h0TWNWyBxb;?s|7>KpCDZt ztkZPQ6$FEFh`B)!DaaYusn!2*cM8%u3($zeI%&ko7Vu!ykv5K_Q=dbCGQXr0<*!MP zbj06II0NXf$%wRuGX=))tDW)Vhy8pc=Z1JSW07l5Uk-MWqv&B=0ciN9;mFcqU~Rfc zXfVoCc^vfw=Q-G6I34TTm8#jI$UpT^A(r==v5}|ow^!sJ*1IoqKi<1V?v{;xy&(V! zu8jonEz_I@Z!=B#G~C~1sUkj7XAnab1n^#+StiK|Mh96F-6 z5?7U0_Qau$0r63*I9byxIzjxw!6v#!q3hF>f(f<>?UErq$SjQ~#(*3PF@dm#7r56; zS|;A7yi$OawP4p&BL0Q3q}W32lPc52FA^_#cS5grj(w9tTn=6sh*mTTbq#({xNi*@=`(1C_%6~qD#N%?4##m1Qaqs({56OC z2hP&&sU@dbT$8@G{4a6q+#D`MZh~2P9hFWH#lDnOl4W^??LmhM`41Xi4eqgxFSQV* zoYpJ{)wQ^$p{I>`vkOMQuF8hFEAxhnGri#< zEyPpVnLi|Ah|raQ)22Y0tVn^Nenq_|FTO!>xET#eHy0xbFF0pCq?0)xFBl~REw1Ti z-U{|@4O=Nbj5Vk5Ls&1wOOZJaFDRFeav70JyrCf&-nlaNb8BVr`yjOdslDj`#8eLk zzt$Hy%L8v9aDy|XH`b{tPv7);@&~IVvzF*u+o9rpNI?b1CDW;sefZ zqjT1X7>5^u?@$sj#=Za*@dp6Q3al)ge8z*!(i>UKjTUAgXXG0z_?eroc77QeEznv% zVR-%lgqj-Oq%!zM8;ei`Q!+ztEHom|1G+YLX#m7E-MEg`F5=TiNJmi)s213SFM6nF zG|Put+1VD4p>%tvG$HDWqL_i@eIvt-g{rW5C(2owBE9Y0T!`ErVYz0qD5JUy>@#eUpTk$U5sLi_g%X?p=%IYpt(*z zzj9Og3~X!+?9}K;uZG%dHCq2waL@l-dkqWN0sq0&iVX+{k!dWgCXnSHdEjvB35`Y= zh3f<&GKeAo6?xegx+&8)Wp;K!M6=@~`BxX9k+p;2#C?j#-v{wk&^7~b;2cFXvK`83 zfornI>r-nRK}JFN$X}>FrF$uU^IxUQX)W6hae|=muS`M)eT|<#bTh-<8t@5e%a0(} zMf?qZZG8W-SoCOo;L4C~Ihv{D)XKM&_gbJk(ktI4M_E!acC}x=>LI@r3;HE@sDB19Xl|>IL=LA^w2X_JOBHm4Gy8^P^cJN%9@N3XESvHvm1-R|DEIjzu2HjCwtWLd|WpzK#MMR zx(xh)e;q*={@K_$#QlplJ0Rl`@^cdiPOY<7$^Q0F+Q2=suMO~}8$e+Sa%-9lmTd387wSl`3)c`$KN)rB03t*gv^Fe1`L!IYLp}1Mf z`GF20JFVXf$|z@o{&DUOGPcuBFqK}cyN!2-W8r-L6!sHN?!crTmbpP%rXqn?H5)*7 z^2$IL+?fkAFakCxU^-$ot8 z1*AN;)azfF@60Q@((0k-CZRePf7AVkPpp9blkrT9Q(ib4TZ>#_@neK9CqH0UtgQ&n zc$xr~;@8@ZP&`q5X8~>@jqHJL+=@8Yp7o+@!pQ>B?(BZrzy>@pL|IJDf1pUale;4R z0|;zH#Q6{O)~a$aA8|;Ry%MRq zIG>>6O1;Nk+=PY-*)0+tck!0;H#{n;_xMDsqF0a}wy7~y%k*aQMDsN6hL!2zAq^Q; zsfx4GysNoo;BnS#|A7Ho)x!u#pjdw>^bl&Z2u&>m!4O#jW#vLWGzxY!Fem_~Wu9R3 zQ`|#tZMZ2usEc>pL9|7@zk$p=smVfmY>A70OgHXjq(Icjiy;{IqXxgA#I^ickh`8= z!{8A3_4UM&C9Ucq+A1Ir>Bi5917RncRroCHKXJSTXBs(cuBt3(RWS}j#l@``g30Wb zj?_hFTGdXZS)}&#vqvK}xd70ich|CHh(@#O>R-HbKJx4pyT*S{PDJ`I+U>fX8Fda`2EF%Ck z({r?Dg_xRi7ZILjl}q`PIk!^1$;V93G$hEEOivlIPt!6zIiRb2Epu3*mU(H3)~poY zOYo}~B0V4a%M$oFz0W4B915{_xCd0G z<$-pIr9BvRtr>_Jm_qNilNiuD!y*d4Tlkp|T}I(&>wJYDCYsamIpl~NrJMlmG0Oi_ z7I8)Xu~>vfYL;t7Xn~qJ7$LT;RSAEso6EsvP`F&@r;kQ@k<0$4us?C`al(#i5*UT` zP>F_^GhV#Zz3?2pCs#f7f76q%y8MZrw8I=yJ%N8X0(95Y6Yz`{uadepgKcP4Q=0Pm zIvfv-u?~A~m0%?6S*h$Xy!Ofeo1X9Je5{^xX&`_xxC1@0awrVols|(k)ywC}t4XIl zJ_&Bp2G%OJ&ro5t+jI0Ln_SE)T1&2z33PHkA{ah?1Gzc;1)Je_YhLa~?5d_&u!-axDv?EutFZK5-m4sVCRCjG?CkJ zL2f=OhrxGoZXq7Xoo{R!|5CEnmT<7v7)ywSEV+fqU7KEd8i$t-z+7?KDWkLZIQa|D?i?0m)H)_^U_j_k*Zi$VxoQ)Nv6AYoiSt3$?0}NQSjv(S)P3?lvC4wJtoSi77N2 z_$LbtOd{JL0>|T_UIace%b|f5BQR6XLuP`s9sMUr+X))pH(BqStoKEHKZ>SUBV7U) zkY8w&@~dc_^M-nt@#%kg0{|@Qail$(pUPa?)Z1+w%3cZvaU7Jr?iQz4eTKUz+tp4m z74GXGiR=^XX>9yboI;;=`Dm6xp#DEc1Xd_?6t=!(6%|Aifhlv9SYFmC=vAr|K%9~V^9Gv#XeXjA&FJerLdf*42R`-Qv2w6{cf>^th?Z%Ymf z=g%`D^0XkA&2SvOVe^&hVL|RR)(W?D z!QgAd8UUeZX|Fe72quK*p`Hvq3AU#`G+<04Xw9%k0i}-J(t|?~8(>axPH-x`QYUod zxaG4#d~?JkA-B&Bt1B48p{eW&5CF8nGkBt=2a7N zye?9&_v00nEyY`K;nR4jp7%U+z%Y?JAvlj}H;4YL>Ul5Wu_*W=nMhG^9(P*Ibtq+v zvH>?^q>u0qunKM01{x&5GBU~Gmk5*0ZAd1GxEl2`$$xL+^m3Twk{18VO!6W`{3C%0 zp>_P9^2MUyF6>y$KHXuBSCQ8p+Z40lCWm>X4n<+0C(mfy73j>0p|ie)MjNIUng+*O zXzu$s4u_*p`CrE2J_hysUtehQPjj%DMIOtACW?6>3k}0Q*SpYMP~l+pIb4xu@;+&0 zhjlUKIwi<=vXT92PCl#~!mlp-+hO?FeWyldFkY}zT2=%P6`Y9KZQQz*%+I1ux6Fiv z#pZs9V*|z)6l2|3)NdKuwC>Ygo(sH2k`XH46smGfz97Buer|OH&cO{3)I(%^oqXB_WtzL zl*rk~hv?xgt-jFqAL&MPi$o&k`U@^1qggBhHDyDlRN{DM)jR?e5_A2v@#ad^P23OW z?%$ARb@gxUcQ7P?qvv3TNmvpfOZuzA98uaZM)Z}Q7hz*&-4N_1%w5UN7uU`VSq23( zk@w|yaqj2*g+V?86?4r=kzdOm{CXhwJEYT(y9JkoU3h^j_o?Pf2KN1aZ=xD!PmR$p z0o~!=uY3U6Je+mcI@`xs3t`i6l#MDQ^G3%>z4>u(B?G^7B4yT9e`z?Z^K4Rbz>vX+F#UkEkpI}vP{jLCwq;**=cq3GIE3LObN7REpp3~<&O)8EuqJz&V3s$ezs*tMhb$rYk?3- zQGUtJJ%IrQvj8CXu_dLs)EFpLr?hG^A|b0))Kx~qJkKXiP1KV{U_-Xyda zzs~f4cmV=)@t0rG99Sl~tTAa2ch!m0Be!Ea{q6<$6Xu_4{E2Oqi@n;lzdrYeH=s5I zH+vB}1^dBeu3g}CYZn-%di2p7dSnv1=v_0PKhUsKB;ZI7_I()!z=w^8PI;X2wkI^d8b89AQP3Njuf*3>-kM-sdIs%K z<7J0ba%;^7=6EVqjpZZpv=oK=R9uW|?w8u`t8(I;fM@o<_`1RbK*dOl89h(MTwJA&x*yEou0_4LyLrn>q z-+P_F3(T;yrUwVPJ9T75uY9!X3O!>vmD}I6AQY6DNONq%wyH>?b zgrNnvKv=}lT&pTjZ&qJ;+|CnviDT@h;y$PT8XXXNil06ER>CyB620Vcwk=?7-p~NL zs$mlhw}!Mk10Vdi{Giku zx*Yd~z+)_Qle#Zt%k(pN|4ZCGA^$c^1l5!*ay7_JIeNIoRy2vh#=Rie*~Iy6E@bTOf%M!?WY2;k>8)Q%HAB$wH%l;X?bkYm3H&nWhS#faP6|@Ew*jp6d>zO4j!bpnO2meqTCX=?^3W( z)N1`!<2N#G!XnFPgj^)lr2v-#(lYtQMxgw{b3uL|&!xYwmic_{9{jRoNk6UGb$R@I zbzUL1NHBOw@ z?&NItAH**2V@>(cM+-cN2ZkF^tP%%|2ZSDhq((ekGfCNdaGnjt094h4nb0btb^rQ|g%jHcTZ0mn`S(r*U907 z*sa0xKIe!m@9jLey~vqW6?5tvF47*mya&~jup)Ozmk)3hU4jpjAySyjkUh>{Q8*tG zEA?<`L(T)83hE*$u6*sy4cJY90K%5cAy`BH^Z63#*oI13DPD~439YAU*f`8$a}ZfTOSrhXy{T(opI zPN-vs)+bRqL#0(^6H!C)$BihFJRyn|)X!W~n#E{KWshgB&Qy5FnhJ;k3GiP^0{<|; z7sb&<7oSxhl`bZrDq489$iN@Z1lB`{Woq~`RlFHh&c{_El?K>2?&;vByq7h~4RPm_ zB@f5*PnQ%NE^SnVlWc{s^B0+KVnucOANY6?u!~@JA9L}*>7SzDZ(2VCQO)+qh@lUh z3N^jNoOrI7WM$9qei>7UuKY!BXL69jX#?M;Nh+X>)Zw)BC_+8sRr)H$+>Ads22pgp zq&$`su+8XxGD-OyQi7Y3aR{l%HU9$7o-Fgx5*7MrcU}*4`4564kjwiI!k6r?i82F1 z+KJ5IR*5X0xx1%QiP$6v06t~m&uB2Cp7R;gpcW}`9#Zr8Eg+ZwD)n%`R9?sw=nshW z5Y}lKlILY8d>EQdtP;hy$al*d2jk13(lU#4v`n5<995`gj>EY?d#F{M0;)2Z=nuD4 za`>BBT*f^4>KTq|@OF~td6fW$uO;f0Y?!ZQcoko_et7UfsoIVNUoenciC-$qy8b2r z;XgRceWV5E0&Du4;MK8DQ~3!+s#yj3y!j2D{0IALRo}pAz)d0Z??>!)YvjZ+v>Es( zmj%WApj#3P0HYGs6RC<|6<9@(P?jUzTe~yI+hn!=HbKC@N)zV2xMot|hKWi!B0P!~ zcn<0vnq^^Dsv3ikjrSmAYSaPnf5i`*J|Ms9Y$EPe#G$1x*bC^Pm6Ec7k`l|rag`S)tmdlyr+Mu-%m@wOVA+th5wPW!UD@vE5Y&@0+yZUozsH${yZmIhF0t z0D^<7-A-jSs0#N3Z=kIPt?(bnx|C`@M!V4Xv;Y$zXzI0Q4i;C%IJXxCztIM60@AoG z#w{(fp-p&ZmrJO2gKaItJGGt~{z4ruwAAr@{8EW~TJkGl0ULpZ;zEpXWZaChrMm#~ z*QDt^R%iha2McYn4Lyu`MJ5&W+@kRv>Z^Q!LK9{^y%X&h;j44hKwi(w*_9oh4 z#WcT`Fh|F;TFMb%n)J?SLTRW|E<4I0BV!c}%2qKZSW6_1CDgM-LafWtCG3k@d*D?` zCc)ZpvfFY+wQBbt!1;u~L!hDyDrud9(nQ=-!}(5e$e0ZM!MqGE`#vgpR^ypk6-l{n z0A5KQ9D03{wB}gg)LD$5Idxr2&A7^=Ej2O3y4Qpg!L=+X`e;>$P-7&s>sPTa-{VW& zaC!F49}cL%3b?m{4FVIv8xo}kPv{|$8hUIAZiURCA%2~;TvKEScT++8bF4U)aCu3T z7Gmo@=LMvPCa);zfwK;;AMQIo=|M`9^Z;_A^dO6rEj?W8SJDGN+T%=0R!rC?0c**D zU5*@#=_&k00|tK~IgmbryRj5LeMnAn0i|M))T-`8N`3l8J1HGAtcGwGFe3wndA~;e-@!Fm0W7Kb9?e>a43>80-+817u4jlE zcbpG{ssBgt0R$@}8cdBm4Ab~HlwO!nPER8PVDP898GsgOkNPZnhX+zizSSu!6Pi}I zHU_^u`f%5|*y=Sc)^&WaENoN{ERMvkRecXH;;vuSGvfm%(+B&w``!la4GvZ$^}S9` zP_+*&$L91S7_zQE(jLacQFX&p(cjH|w$C~mVYu3~CPKv+a~|jLad&5E!((>G=IZ&@ zfSyu;gSvO#kG^0Lc5e${BVZA~24!iEWXcB5a{$L$tVu4ke{*5XlwaFEj)PPv$c34# zB*r0dtl!7O6E}kyLZW>fb@ez9{9Wq@_tpb8^|3lB24RHN(1KeAM;kia;9?jYKn$Kt zgp}w(952QLJaCFLgE+J^+s9X=7nf9zD>XZy6*uzxgBs&(eTeC~MtT@pzJ}6Ayj!Qu z%*eb%<{-19;~rrOr!BfSO?a7r2$hUH4bmgby~X+DacXia9%roGuXgK7VjONU^VYp> z)XB~NU$|LFMuf{`>j}0>kDE5m$Bn{ApXP(1a>u55U%u5j&1vUnA303ekQm?$aovmk zkEqDK*xzyv*uoB!oqKQzuu##i?pDZ5KE4DFp?#1wLDNR~N3~||VSM5}TE7Ev5*>)a zQWk9ew0Iv!09QyyjdQ@D#GY@Waq)E7j)(eTxEL^446WvDK>knWR`M#A?60NyEpg4` zD)IQ{p?|LW%>m$9Y}5mQ@-Aq+qGSCHe~OE9t%e7pVFW;uK<^|4qZs0LSEIC5oQa zqGc3J+yx#xJ!g*|J*ff#pK$lsHlzPlyP(;Y=a$6ym=a7M#PwwKQNR&s2@W+an)MVs zBh+LC9?E>7nFwDLEk9R%3Y8+z#0tcoYM&Eo2+eT%0UE-K5T*dXp6KUH^hQ6f_>R|X zA(lkXl=2gKi&r$Ogw=BO9*74w7>Hd74rP>JSCMU$(GUp+qNASGzF9d5IKm@?;obvP;VP%_ zV=N4>&EAtA!(sjJCgbgNycO|n2H$YbymuSEU5ht(kDO_HRi8$&7 zk?F>;>n-mC?xC4~0g9x`$Qi2UB&lV~`y6iWoOQVvvII-fw|I+ zi>^R#s0_ySMHrM#qBp7}V1f(0QJRgGPh!ie3^vpvP3kRe*4TBcuAj{T+kkJzrI?6P z%x0t-l3abI24#HI4~^YsSHaQ1%ug|L`=j}5jZ;yD(JWREqD(&cUWRLb2AqxVgVSYZ zzZ4?V`vvh3(KE2Rf|PPiJ%(n2-<6>xagq)C$77_8@%ptkA&E_3PBCqaoOst*mPp}) zdP{}zbmOP-0OxiTa?Vf2`M=N@foKTc;9+0*HOh!~@Plc-&|{N0Ztma*hfb_$OO_Ae z;A`X8X%Jihw8s+DGQGhQB0Zdg|KKI+)W1rXGtS82!-;<&*O+%;A3A;&Tv~+b^v_}F z2i@|FMB9YL7krGP>kB2GANBH>atxBm|6h^Pl3_Up;5V1;~ zPqUENX&@+uL1=G08v>WI(r=bs2B5o(Hllme@uCYphEfA{@-ym2m zwXuq;o=&iiHCGfx%8nPk9ndM=-6^Y%@;27tyo#(ky->N@%mQswd}%>K)b(Hq?f?d> zN-;mjU-lLKf!mFo@r~=QoQzunI~;j|){LioB=y{3IfBMv5mxS9~fe8|Ty zGTRoRBADUum7E-3Nit!C;WOU+EA2HN95O47MP$w{$Qo!Rn znablnBSPEEO8e~m(a7{1XAt*ampq6LnM%x^;~K)sUlWGVCeso%fJ-U{)=j1%21=10 zGD?bI%{~#&7uX;fhO3;);x^-Z97vJ@^##i;S{@Mik+<4KjjxGGM2Nyqf^;a6e=?1x zev$63y-!5Lr~Yn>hO5Tek(AuiEYcA+a=2bbuEKBJ1dQ~GT!?RjgB>CRBebN`G+VX~ zt8lwW8)n8*TL~yq%1_ZlDr_S7{~KWX4UtNCTM^za$PsBS6`f0p%A^BEGqTV9MuW@1 z>+icN-s3SP#_ti>t!=1bxFqrJ-FDjiGik&LXI1~Lkt<|ncviaE5DBqMtAB?K%0Njv zU~e%7S5jB-1M*eQ%56~I#TU8?LGM;JtUw?io=Dkc?7oZ_TEo?4k2ji;Tan=nHA31h zWB;gKxV)|}d-ObgS5II)&fVDexSDwZHJB$`$z5x_JsWFtd9E1IauH%|PL9!vzGkSB zu}4{j5^fP#7tmzmVtB9r5bU$`QS^o9Yr%4u+86MWAz5P=tzWX0=cZ@vDN*}ic1QryOE$8Tc%T!X&P{!%M` z?ib7@@p`=yn@n8?9e537F^fHm*KZjNDa`TEaZ5r8A8oSTD;w0-X z^FKyVxkTkxLR&MRLWRUKz|1j9(436%G!YU$`4YEHyHGalRY6(4plm7&0^nBLfwEWF zQ5&qcG>noAYrt!P8_mi>SrNGfAG;*J1Fk=B$65dkYigbjcy0w|B+J!j;jIbF6A{JT zAtU}_r#+40GAN-N5O(v&@(VEt=@?~>knh&y_{|ug-NsedyXYa^p$9F{1l2NpT{LUj zasc@|`rLJ?-3T+MKmJ!t888DfOHts6l^@?CRhqKI@bXja4boM-Ikf;uVmxu8N zOyp3#$FRfg`fGd4RG0qFnrPWxtf~|uI{=Gz1b5*Av6rg~VB#qE$?`sOpJJcHyEDahE=kRRWZ|{}m5PbJU7~${SquZTbD| z%8sqf&?^^q3onFd48ZPx653tnUpdjSbnHG;hM>T}orV0MV~k_#M6~_;$nS*kY>w%m z$kmGoZ-{?~M4&S#nsq;`4b39qmY?P1zvQG?evbZ)(l}6ct;$Z;P=3eY5W*bnG6sMg zIsb2l#U#jCjvnH#Igv5fxSB+b56oZG#A<@*VCG`XZln5g*?3_Ek0X`27MzE~8BCml z#7J8dj>kddWrc$l7;tN)iW(DGH!Uw4Bz3=W?{KME`g@A%?>~_gX-r_yX*3nhT8b~` z6x1V)^i3)6tB9hSInTE~Y5_7lMRzx_z`s-h)RJ!Ai*aX-0Q?mgwNO0IxTOoIXO8vt z@Azsyf@v!6yNuR<0n}F-caBBhbbbqWeru+Mv(2c+6Giwp^dk)|anamxNvt0yD(Jpn z#w38h0}rC1qaJ%;IZ*3V29tY#2}v*7WuL%9L^m1(4rGaJ;-8Q3$L>+&J$`wUf0pA9 zC$iC%rxyQ%N{vlpq!_8k2%(3>j?o;OMkamUncqEId!Q{;kYnsY=aDtvSknt-!m|pD zhufjbpjCz+encn;b0*uk&T4}#<8n~u&o(wP`BIgiNZ*))@?K`|?SPbN=sf@lS0o@cS*&ohuPX4yipKjt;v z>(&FvijEZ+HRsSH0)WiN7xrr?05Sf1DgJzoKR^ZQ!2BmjwmgBATnqeL;F&1P)RG(7 z#IDFr<5^V((7WJ=grfzXmHap0NKe!VVHHJGE#$ui`Cai4OMIaYG1o<3*B!e5V52u6 z^`z)pzgh^<4QG@hzH7sU6bh~Qt_)fq&jih{V20vnT&xj7m}79wb*LgT+&>5F$<;`K zjOFH<=H%Z%Y{=@v>WP5KC=mz0|FE2|q^!2V*tkW>Y9^U>OJt3&E84#I3&3q${VRaR z2m_b`g+-VwxF4XIH>_|m2i19ji|<(-EJPTJL(i+BSUCivP+A%JDB)RU##i0I{uq8V*1zUn&?*Ldm+>&yJklQ+gwx(>vG&RlQ&t)QRKp zLX47~`#{RGm8}M`cZ=aY@}9U9lo#V^Df0HI=!F^xs3)|L+nx65r`7W$qbE3zMkO47 z@&p%hS1@=^aCoED{kxrDUM%vkTuiag$ig`Dq#L$Ne7Tu8)|8w*Z+GV_Xvo}vDRiSs|Rxi$-k7wTBP+A?x4M?wF6Od>dx)bm9 z;4+`MEF>;($CbjsrS9OeP;jZ))l~S*$EDum#AbuVNQWl6;fyykzc$&E$?Z&;aDP@bLw^3XGb-vNFkaL;*2VV%BXTR z;ySV~g^p1L20F{ALbx2G%2Kw46x*m0MHqwEza%$bV^gO+Szb(Kx$M zWTENkxF<`y|8jVz)-_p%TZ6l#!fOvFrWz-WR}Ci)Whny-S}Rr-7Vny3%hAiWu;hz{ zg*>FXDV&&sJvlvO<{N8>6KuNSCnheh;J%qTDMVQ`t0i{jBG|=Tp}@<-$4IlJD#3S+ zcXe>WVGs)K^%u9nlt?7w!;ECS_6;Bj+@ls@i*X3OhTPkKAhiPb-;6W&K0yJzEjCum ztu=4l3V!d%@4;4L5!vc>ZLR*>+FCUR;G?VqSTYvZY-0>G0G2ofOO1Q8wB3`GI>wan0)f$3uCN9BV|gb^)s`*cAJ;=uU1Zx2 zRw58QRuH%Sz+KzsCs12(n=_ix_ABtkc@?m^Q`-`P4n*W9kr1GXvS}_|9CfsdrL#xzmz$a9>nx7kH2Y1@YhU!0MW?y1%13%3~Za z+$qqo+>%qq!SCx2-7;E@*In4(W?_GFQ4;oN{6}H`rQ&$($H@a&9}N%#R!1-Vp~5nM z$O!DS!xb~Vp@$P@yqp_uM=H!AV|!_|%y<}Q?GwY~Mz{v9w|koBSZku4%UTwZPgcc? zw(SG687C7xM^;7NcTo+{=nkXSM;v{_HM;X;!BfF>92jW&qKjPKKD3=mv%g}izF^+! z!cHfcKR~%6BZPw&Ty4echf|;cPqEfD<{Fn#d9{xHjA-8o(Jp^Ve zeh4m4kl|QS#$zG8UF16UXIk|Fffu16y}|W%bPXHRzTo5PC|uPOgt~4DfTPE)xh+Tm zFN_olXl0Krp=p7UwX3VRQm&DRu>cMa(IZDF2|3PBFU5QEDIeIJ+HR$RUETYLoCnSRdSgz-fqF)PIM+M)+sVn@CU5`h$OJfnm^6z(c`5wJP#y_@A#{3IFqaJX=9c z+bjj!p@EA-jVl+Eq>GXqc(2oK;bp||!MStuELIvXgV+@9T;~iYhtuqjzF+~#T*%YV zXy%!_lGEB@ZI@%wNPBV)*&osE?7sxJ^FzKix`v_vR{!pIF%ze@(Gq;azIcJXF)r=T zbqyUzoT$5vi~AvOA0*W^P?0<)aOxQMJn{?NB60QHD;HC^SoKOOIb>59yCP}w${umW zZIrZ9fwYO`idKQIaBYgzHUPCnPF2tApbDs)4oZ!th>1*V<*Od>R4-bJ=|8-WKtd%X zr~(x?)Z-foX9Qf_al}}MyMRH~>6YLMVLsR>H_`(v&I*D6jX(uJu%!O^F{vNn4=(#R z1(_M(Z^*~c2MJz&>U56P)?v^W$g>5=vs-Qj%!=4(U(=98XO@#R0R~1buLz7MBj&9~ z>f^oLxr37qx5;Mn`9xGF_T}&}=?g9jLrt8lo!A*x2d&16@i18VkR50DW_`)--4N?u zTxI2xEswn>6=ik1l35*ZWOrN-HOj5HSP#NFtUB)5x4L1)Exuqk5kSUzXg$4&*3*+K zuJ(pb;0ijiH>{_lfvimQC@RMsKpQ$L8QCTE7ii z@%O|p((;1Cv7I;tjEm9Br{@GO&I?ZIg!X|~s^{(-8AN2m{T-XdqGGon^caF-UT`$bdr6$tWG;jk5kzK7w@Q{{iMd>aDi;TryZGuyyNMS{3bC z9OhnR%cqveFc&$)+)H#Vhiwi=t8 zfd=bc&*n*UB*qFuAe@Wf-lB4ELg1+$>pm>kz@qdfqN0e6}-FcwP`NijeQY!EB>|lR!c?$v;(D$^I=yfs3$HL zPGviYUlEy4%cBb?qQ|T@0x6ab)S`j;7=eW~W*LG7!O5@FOaKthnvCV)y*xB;R2Pz( zcNvRRdWK5Bd$yfE3F(e*)AKp#Hd)5I1FRW9CCEY{XFx_T_Y9b@i1M$cgt#PNrF@iO znmc}--&o@Blpaaq@61n>_`9s^oL25 z9cm1_dJ}E_hfu0Wj^U=uZ;CUouK=gs7QvNIvoiPfPX{Y5XHGZ}#N<)4a2+V|cI zoS%zVR09LXigb}2;IIKFBTn&5qb+8$BRpW!RD_4KyK^3&0Xu^h_*qJyPfXm?goM_+ z7vR9FC;BgR47WeU_a(YrTp|4{a*%42Y^CtIKR$~&2&P!+ZdW9;yUf}hwTtS77cx7?XoSpIbNQmS$Qgn}R1L0)*!rNSidMCdFVOC+4)y{2F-PE=G+6VW zSc5CmAtb9k>t|e_U%+R;6AyB<{gaC^cWAP{4SBtxsp2M(kFlVe09;0Tw;#*lfjzlzlC zXqFBL)jUU zBP>8L&xD}6VH*wi)_u|2>XG%iH9z+<-cR^^0zbDmp0+*{)OHZIBh8I_?VQ{)e&h@? zEWokzd~l>&>?FDW4uHsdLVsj$_;Pd?_JZ+br&}Z6$CJjEyDZZ97!TGMtdvJo9b(mO zQMC(2*jIfV>8xM&N4;U3BV1Ft^QP**J#-dDz=NqI_(X3|X8F!sb=w-x5 z*{!u^YcE6QF`maCHIks&3y^N_hoL`%!3Btup)hI=4({ZA^D+D3iL8q}JJqgq?Rltg zEb5En*OV7RjUfe|FKmOZf@HLG%~CsmYJZXI@oZmsqU=}B9%-$|%xSxdUE~X2AN9xu zLxY2dBB#f%KhTbFN(GZLI=z_(x42XYfL29ovV{87uEyGm5y9s3onl*h0<*V-S-9efN8lG{O$4YD-_kD+|BNCEKQ19 z+*P69+vBH-Hf{i(yAxpgS3oVhLf7e)oK0r42llc=0XwH?h5}5Yxle;tO0Z3E!{zsH~bb`tc{GBP#hA%P=;w zF}7K>i=1W2wr490z+^14Zp9wkYTp4|3j5oFuW{xxUw}(l_WY*8zpSHDHI_)7-9>mJ zkUI`ov?SJctCbKt27txDS>(vqA{wO4m;jkz?bJA#K(^eKL~PzR8R3#c;}Nm$D_nyM zIb6H9HoaD>dJ)v=lC5v*igk>;kCxz#qh+D-nanO1_C>}?|NSeiT3h}~zB>@Ja0c}E zHR!07F#E+{FkjJIM`~|{njIa&mfAaXwxxWwp%x8GEBGP5j{N&O34$ysUpc^nTvApM zMHK2YjojW)doqpHkf$sJezQ^`@bq)t2#oEAgxXTxZur-eWbJOW87oK+E+*or8C~hn zpIiQJBTjiy(o>8IS^OgEL71wb4 zkL~QA1AZK(Ba4W1cB9L^zYlp7EDoDnW5fC%l?P!M|3o6VX#GB{JlI^D-v_f-du<(5 z*P+*uAT#dJQ$LCB5D53^`?qLw#cx%3;&kvtx@kebIRdHm1r!BO1ZUf5+=4laxhwv* z*~WEHz`-2TsgpD#d{e}M7t;ETA>nTjl^{qy1C~V&G8m~Qmo`e6c<;^kQ&_uVZJq7X z-B6nKvdV1xV_Wr6Wc!Bp#}idM=sWKFgPdWmB+r1r-K&vSRfcCne+KTdV?^*4c^vb> zCEu9OFtCjRhxhTCxN64+=V819f@szgcSvU_%^N{x8gDgXM4qM`GX~rT-TXj$B71XM zpp(?&?9Vm0#JxY4+uxGkA-~!Fy>v)rpQ+KZ-%H0TrB(|}X1zh&=PNnRcf0xQO>*Ts{oYkU1d1nl~co{<|glM2l5A(rK9G6hr(fIB> zLN_Ky5PhitBdZ~=%{HGVVxU9qYY1q#Gy_U_T<_BY+@a7z{UMZLquUpr1cAE!j1mge zm6(&*(NXgBVvi+Hf3D=|jqtagEk%V+??oe#sTlnP+6hB%F{<&$ApwT1wYO){IcNAA zN}G`Rm4A0G+QTfWZ-2IXweYO?)}rm(;IqsM?EfmEMf{VlP;+yG@pXy9ecXC#&X+>@ zoT4#z)yLpy?bfnaFc(SvEj$p<){I=j9SI+gAFI`QiK-2Xi@Uaw3AI(&wOyxb%eHD8 zjM^ZA>>H9Ky0~T}v`A2Y^M6_ZP6OA^H1}fGQHf0+gC19L4V7ubHQiN_x$r5a60Ck1 zj2vB{F$Z$#zvc->azN~PY-$&vhXj%hSNi)f(D9XE!&zx0UEkwOhb%HF&lXkTug;H_ zzMF#WCUYX@l(Ef{rmRX&15KFdGA3K2To)We0S5{T>$nZ%>Fh zI<4?vKEbJps@&t((9ZFD6>@BL<$yam-+;tu)>b4+A0F=jP3E*nOS3tN9Cbnh7kGZV;YL_`ksa z6_SkcE&eD-p~p-`X>llY?2WW{c?O4P$ig-UTc(49`y<~QFS<(=pp;u)hW?}S54H2V z#hVieq3Az0sB7B;j87zMkq^g~|CP8UWhXrPlViHMZ?BsQD}>nVV*Fv2l*H+p=9y6UEWGXnULz&OT1rYQ@P`Pp^}CJb&FPyf_P;i$ zPyB7&`anljBkXn1-ce%?dTT7^sBv7r%0-KEuBcr0YWX0`@ z!_Wq8YnPQkFB~c@f6{5R_qGYd_%#fami~jX=zj^`L7*i@lMlf&L$gW;gX0#`B#)msudM1WJL&MJj`kALE>Dbj^S#@J+^JsxDhT zvF+nxZ&^6Uf(P^ge9aKv*+k&kZ+vnlCc!nTG$vPow!Z@H z*jm>}JhPV8s3nFh@E2G4Gk=LMf2ON^mQ{XhPD1(k`3%)F$2e`w&(X?RzJ@ZL3XF^X z4!tup3({e*Fpc-?UT`%g$HFmFXu*)+Mc=(PWx`2 zJ&KuZ)Qt69&OO`9qwV|ha~%DX)*}}XYc7R0Ta}JxX?P$O|J7E=&(+D14^dVDQMLL5 zjv<5Wnez2*iR+O=pE6&58dS%8c?N}~YfJH>jSmS4l%ZMUR|rGKZv0XFT=e%5 zvS(?jzLz1!AynUn1CFBlDs^{zk(I@z?jCC69$@T;I{TNxt+SJKhl_LS&>cp#f}LfL;}dW?d=O;JhZC_LY%XLm_5siEPGmkbIo|UVzbvse2E#%g1V=7;Ty@i~2 zhM03)Z5Z8OQO26<(M0@wb;d)Ent#ikyc>*_ht|# z?vcToJEJhRGi7OjRc-3nnObx@;F4KmnX_<62pmPW_!s{Z)iuNmG8l-LL5elrZw0&# zhu{_i+07pu=LDXd3F{5LJ=P~3;P7?b&Z9FD9T(?l*1`ed`Y~cXsn%0#qc~(E<~-oa zp2p_E2s&$>oe6IMS&Zdd-0_$gJR%RA=aaL{8;lp9Ad`Xpil=R~z%;1UXu$G5b{aTP z3vq_~MkP#7W+Mk~7Dg*}ILd3zd6}W8KHS zpTG!^_7;pmY}6M#Xta8fp+viXSeC{tT~-{4zQuDVNY#U18b@A`)b9sMY7PPp>tSDR zHUl0B)L$c=-k_Ou_G}jXVBe?dAMX1gwY*XK+DL&OD#}gYSJjA_($@10*>yOp)%G+qm|*x{2<@^tCn&b(7x0 zpX(yM+L5u&+T~-D@F?&Xk!BkwjEN2Z9+)BlKdkP`&q~c3PCVn8Xa9%rZ`@lK{Hezc ze+WB-HR-TF_Z;Q2KPQq}oAKxtws4P1Y8CVskmLM{5jmujJp`qj9i#L>Odf|&Z+R(U zZiw$*jGhwVdvGvXfY;4Y;p@&lXhzUVEIpB>j|Ja+z-OLQN9j|Do94%8`{09!EUm(n z3zK$m^MMbg$z6{&iF<;g%$JZU5%L>Y8fZUi>81cWQl40JF^keu?`RF*{wpra?2%Y> zB8wgiU;CFdh>hp7Tr*s}u3QtwQ{LR3T&|%dD>~oBiaH4^!v3LyvksS_eRPVTTde4H zgb*X6bmjVESS**_jFN}l@&BE&z+lGOdizw(i_mbaQEGV=yuq&rDSQ^V#H5T84c|3!9#ZRih7TKAj%SQqmuDoGePSdYiK z5JdmWUlBE8%2mI*Y>USi=3{JPW{-yot{&oGKuKry;^cekf zuP+vVu3A?<1rq~d-w9R%f89<>Kb9ac1A$^4{(3r=8~1$FsvbbSu1T2C!p&?Uaam53 zZmxk@Ihk3k8G)jjnyk)>o>=sv4?s+|lyciM@xYbqidm%Fvsk2+-Yyn#fv|{t*W_=+ zB`2Om)J8N{2NRgZMlJzXe!CgR-cSd>7?eFYd>LZ5OvZ(DgW!je0ps}(^b1=A|4N2z zik27`QfQyMlBRtZTM>PMx~Fpdv?vSF4ApEI z0?{??8iGP8gd%Qmb#z$$0_;Cv)py2e^HT}qbeWPSN6Pq&c8yPojL#s~_*~5;Bz}C_ zL^?WCI8>MoRIP=ECxAt_*FSPCTs1i(=a`0-zEl^#0JS*$u=fB!<1E7Q{IDm0fY4Sj zB#B@AwiNvjcfSv=YRItvaN|}o`?MATPF{QbcLi!;4V>^Il64UlQ{AY*vFFWfR z-jQ6a+^lD2()wG*=;`rl4x5NQ`{HXjT z?KKCl$Ko%S>~Zmz3hMN3q47`fmqxUG9E-n9di6N?%X08*yQX^hOKkojmgtdq!;;6w%MvtXeZ9uSQXHlqmG=9*u zz*f{P3xihmximvD=5ao84Hk2Q7NGdSMMA~ta4i%)Y2=6-NUbW2%<9T>EMtyVFrqth z9!o~4{ejjw%N)`o0oL-qY5~jV0;UDV(vp`TCp<|`;GV2GW9l?>#0D!K-+Bm+-ZviB z{U00w>itI=z<&85j6dbm1pW1jcwPFU-9)=Wq7>BvGN9AB3%NSEX3w!iywCa^2m0#Q4#d{7DBg5pUHgmvyh)3MYkA|c{{%nPA!iIN0J4s?ylnZ3*Aj#$h=De;f#}P|(kT1tgW$9pTIi`g!F7;g21j75d5TTNi&MdlY*o z3Fx+GNI*--lkZszZMG>S^LKZAHq8wqOFd$%K+BG)%V3~3pkm~pm+C39+W;`>Z& z%96v96F>4}F=fmJlSlj#s@>2DCEGHwWpd(0osmcd$NU{zI0+@MA+!{W%&koH*FrFa zIY(Lgvi3ayg*u$}G5~`z9(a<&NOL#^2D2Tc#e~{=5e{-6^Uma^Ud=-yz)LZ2Oinz> zfn#KH;xZzJ&J|`s9FXC(50C=N8X|B4ZUxyp$w=5s$SB^LzhPI$7xtoywK?v--ZGcp z$HJZyZoRRZJ?%b&Jq)M)s=B|QP|$+r;lWLCK?ZE_TtZpNoPkOcaIx_mWT#Qs^d~1i zLtMz1Oh`^VzY7u()f^#nlM`?6fJ7PUPRWVuSS=@^iBLv~05v2E5Ysuu{26qVIMjdK zFGHQB`r1kG%Asz90-iUxiDtIOuqSkKKcNw{KFm7fiG4l^4{)TIbCVO-5*h*Z>g2>n z9o!8}PCUdmK?f=3*~y8g69baiG&yk;0g^WNU|odpqW?VPUcNKUMBO0Hz0voM6yIMU`I zFhcjok-{+2R^5YZ6v{xf2~Ev$YP%`9sj*JtrOAm`ag1dcdnG5ni15RT{j^O^>`Rmi zVj3_JUQGa4_6F?bttFtvy4IW>>W7>OKyPv?s7>xsC%|Psp8Wj^!b_%UE=W%N-l_41 zPp~hxT;`-#o-yHy7LL#Lo zUwBwf!nA6gKNGc5l7a|T`Vfb>_tviT!EFDjymj8TMW|pbngSJ!V~cI{$v{3F~cUwe>2g6Okwtyu*ik? z|3xtSG6-Lxh)pR$*i1{FcTYLJotNC;*G}TK$%%e6r264YPHf?nJU2P$2sTvXhU#Y!tl5)xyZEJbfKvjRdtzc+ z0wPk)gyh5(1Oy@r^uOf9RxBxroe}`KAH_g_{qC^&2$`R`EEx;`=AtiTXL3s*9_;R% zf0DR9IkB5l@}=a&zdDKBLQAOjCt^dYtze>y)SpK&fE_}31I7L%*TLkTU*pt&UUL2Y zoW!i;#0N6TP{=;VnGM0mg-#WxKaq6Z%pp+{m7`W-8i}aFIyrJLRO0TJsDK|@Hgb# z0zXfYt85bzhdb3SOD=htlXy>ZVi~FSEPRjLT$kXCQ>#Qa$Tx8lcw&!U;^1>Cz&eZbJC?galG*MVd-g{V za?7%6DuZ4(qJ%Rp@@_(km%SpnMjlH@$*@^eBo#at;Mz)#GjF2q3)zLo1x)>n|~uBd@J%4b)E3L0wj{8k0cE7$F@E6Avf zRgh3&19ycDCCHM~CG1Mg8;#6e-$q5}Q6Ysr(|1PSz?@7`ujlae$05IIlVSbsCN53=^nZpf z++a?o`6+VZ%%wyF)v9hI1F>R>XMTryKAIn#Xr;`cTmU0nh9nb^#Dc0Z)5uXQ*eK51xVhPFEwO z8qe+6B@X=;VE4DcR>_nG?BuOXW(WbhIjxH4cI@Q$n4A`uoZ(7-gvmSO#^Xo6S>sX3 z z5s*;PQAH2?`+9yq)%lJ~L{*&n<@lZi?fYK~d$I?6MPyiHXk>8Y;)oZwDi5$C%fEF~ zEQ;LMKOKrjE{vQV$%~wYIElP1Xut7*E5p0YaH=u>`){L>Mk-RL&#zJQEmSTorZPzXmd{ ze7_V#fN<`-8`in0JIK)pzjD7&%iELiqp$Jvhf<*2!zLGYV;+2M6z|=~D;P5Ed*#!; z!Pvd>=3^+}y0E(}5=@_kr?f$yGCDym#8Zu={FtVR!F}F+|H7 zPyEJH?0QvA#Y8>quR--X&WeEBY?FcUr*6|-$^DTG z7b*B3o}fq9=|NPm&1ikk0id+j8~j2TC6A_7T@5bi3oe)IU_7A{{56OC2hMtvn!na> zEf&7p+6i}4=da;nmKpKkZ(gJre;Y;MY*3sYxd?yrBi$G=SohbIM$X22VFVHF@g8pa znbct2frylh$cgxy9chHWIU)G3KgUsUMy47~`$BaNNhjqDfFXHhw>=~SuoyyK^9Bdl zRaAJ*FgSf(W5UeVm<+&jjzPI-M%{y=1*nCpfoZH&^}-9TxX8mTD`n$x%L?T`>z0)_ zE&_+Fs?h>VkVnqP=kwrkI{F08Nl$saWy@RGKMlY9Sb~uyZSeX3vGyh4Q54Pl2?Pib zoNz?qfi4;(C}5&Qf?QchV55n`2MQu8$SsH{3Bo5wU^l@2mPPy&Z&3slZ~RaWxe{(X z!2>})1(jpQl|xa&CHsHh?wOt5BLsZ@JP(_h>F(<4>gww1>h3C+%e>-^L-t)A{NgC^ zFDPSiKe`d`*_6BJrNL=AfhMZI9fpxfF7&oJ;$kSsQE90mD*lHBd`qGj`)r-!Ye~hH zWb6kI3o0TWhomCHapc7X3hhBj()KWeyXhVpecj6^xbo!E&eUXIG8jnAfG@xCm0q-1&(Ezi?;(LwN zAVQcwobzta)m62pD16XXe>F5{@1u8SjIsjn&#sPBfdNJ1 zlbxf0IpV=c%&`SQjHr)r&<=n61mwXEvRLV7f(?p5;`XB$_adIkJ`c#~H+&wCYpBqC zeQw5ZU|5lM+Yo4^`xdRsHa1%6Sf$xo$~AcL0tqKF`;)$g03gbd0oE5P}-sGxR? z|9wrqAO0Hrt$M^^itr7B`=f)p=X(YvfWN+P;k-k*f7vf3mK$x2D_TPJC1px>Qk?i2 zSYS#Xm+>ynHbJap8w>HUoa^=c>fI8Jr}1WwSv_$#CM->UU`zFi@At_FLnP(^{abt! zp7(XnFZ)1z_*GKGcA!ZhHS!yMHm%(y^1A%1gfP|b!}8mB44^PGK7ayI<0H@qUuBIq zA}=Byr&!g&o7pR*JN-!rC+}c{J*P>OWAu+IsBpEQ!USYv?M~FLfBUnE0$Jipz+_5u zrmRFt*!)O;`kK4^jQiv@%cZn04{mXvxLTWW6t7hO{PnV~5C?vyy5hIMOQ3MdJQfZo zg8EZWV8c_|yY6N@3$1jeDAXSdXTgp)eh+2pKl}!FEh55w8sF4X}*4Q8{z9tIU;V3NL1r#)VW5sk(Dcxv>$ph(c zbt^@U@In2B{`^4cBWpkF5iW7Hsc?WG+M%z8EyuteR=$}L2EO5&JIoCtZfM|BEZ>Ru zw1INvADifY%u(%;6fk=_nSB@rG5!Wq-pgWF;!-c2?wT$&i<%e0l^UJiXZ&4_{xfyl zRMH23hl_`%yZeo382o2)jAP{qr!Vkp24DjL3~k7UZyU|i1a=b=t>pmpTNlhz78L`K z7{+88OJgG3p9q`egVQ<9GY{;{_<}e;_{y1T!v8)7>=FIz9pud;LBvPc0RQ;FCom3m zNO!a^lSZh0GApZ3eFImQ$VLz1gJ9wh+X!T_rro2@g!#}207olVcPrOyCD;ATwNd86 za#^zFOOL~zLN`I02b)3NAE-51lXc2LJ&j0{eYk zL9Y`vv>A7TDv%xCOBLAx?jr6H1f30oRcyX%1P4f@$U7WLWMVw$K!zJ%OX@gSj19OB z9|gjX+yH_`)sO^Bqs2yXR@Uy!DguAVu%21WVTSem^kg+?453S=mjBp&znb%r?LU}w z)jV9Ql2w8!zh}ZdT^ptI=HOVTKV(vzt)n^4J2?Y3X{EmaS;cAd-4G4N$NXmc zMpoU(FAL9mJ@d}SH+FuM=d}7rjhgl@|B{mD?o|4LAEi{g?<;8+hyiCSlA_>z^MwsZ z1R*h}X7-nHJn;*l;n1vP@GelE`A6tFKPz+Yn z_2}C_o(US1z4|Rssa#%}V~CQ&%N(_tBON&c&Om1?S7+wJSkiC8Y-Qj^ZJb_10pegX zSaK0gpcq@2dJu|DC_0E9CyK*IY1?hGX5)DwSA`E?%_Aiyz4CT%jgh*F@=~COxiSl1 zXio4$+!%1>6BigP()?K~|5Dh*a>={nOId-+cYm}p$C7~u(-%#+%iwKRj?K(*h=K$4 zOEGekGE<0=x0v`7Uy-O*@Pt)-CUbma(%--hT#?my*LqlJJ#alLn}{*`FP7SB_gXL| zhhGj_aIg!Y;DdAbCO(%kS6dTV!)3wlY(3nhR&uB%#+>PGuV)j`vMEyaoSkNW)UgW1 ztA&=ckpD4VayDG8uY%?A)M6F+uFXvmtDSI zdu0A({TueS$)a2EY|IRGKeFA#Y~XnP-H%Z5gGkb6eHY^1V9Lcz2j{K9aUJ6}CO>E< zTU9g8l+lJMy{r`Ezk*&1=~K1_Tjqyr&;Iyg9JZ)Q`)sI#KDf@NT{D8)k5oM&ga_Dk zHnLD8PA53``V8Xq7VK39FEHr4c9>*dfVaTyA;5hVz^gcRW-<5MW^O6}l`PLO3vIIc zObg(@@J4W^YK7~7M8oK0el~8f9$Mf*?}=i10e`ylr;7xSAB;fx79N| zjAlF!F4tFl3v52bkE9Hsc9PgA^F82eo)oMssB}ZYIH*5xmoaBc+ttFJ{gPbf?6+^4P|$)YE0HQ3D^L3r*j-E%>znnM?bSTkBoz3d zl7spw5yOS}7~kxZ{wERp0*uh~k8pG8KtRT79ZA8IJMc{T)&!N<%1!wFA@hE_%XCx> zHxbZ5{mni;3WX@tU+{%2)ct**2z4KZToKw3MSMG<+a39hq(?ju0a{*v_n`#I(CZUW>fqPm%?Z0t=fVosidR^Q@DHjUoJS}z z;uU^=gxa6N577UPvbsOFD*7K{0Yt_t{ImJ_#49{p%k(!127y0esz(Ucw;W}mA)H6N z!g;~~Ap8r!<*4ZjdIF16i5nx~45zwh#VhOpNdaZ&ufv?h82$h`rOFfDBf(}jpfuP8 zc9<D?on0 z(>TWK%enS=g?nap2SQJ_Kp8YALr+F?gwXyD#$G%O*C#`ki1AcI)LEf_z8PFN5EbhE z@q_Ucx=%$nE%oNr3tIwh7CSG(`>-(u{s*)V2euRLS}Sx*nB zp*N#Hj$C8+C)teQcN^qyp?@+q{DwM6uzH8h1!?bQf=D`+>~Y2vOTvwk25^dnp;4BV%Ba0`34@M+geEQgX#JS09i7n8S^}$bwN;2U%F# zBQCBx><#2|s>TlbTLGbAo@lX+JT(H?ve1WX8*B?gFWD4{3YWXK* zd4tg{L=x(5CZijULsH-p5jPttqLM+f5`86dBa~vgK8-#93kk~{7#mIrPdD(*_yj-t zvtNLbpTtjKWMD*KSYU|A3dXotW<{5z>i@=?-B`%%BaqX|@#j^daUw@w=9tDD-IW|) zDLHOJj=&&2omCN^z-<CzO`s&znHPh(&^F#i>)GDq8I*~vGS1tdf|0Q`fMJt z5lb(TkI+{B8a~UO7KaaH&d$ggT3o$v2J^Y4Tr93IW|e4WcibiYJNws5Y05eJ13)5U zO~AKU{>fs@&#($MyA+2R!{%q5s!{HGWquanFe{&*v)P2$^K%mY{fx+$vRNI`)85!b4Wg#0lWHR78bH56NV_I3}2bB8lk@nHBQJw^f&yT2>d~%BG)J64`_JqK>^yHj{J;`{+{97-0?$kN0;vn>Io0 z_*E6}uffk!zRGxSZN3&%#8SsnQ1=_Bh2Du>9W&nFVk|E?@cwDMzuao7c3*Y8KL-Vi zDQ&{y{WV_!JMsC(`#W{O;*WnE@9&vaF)YTfE+=+(I|QNcg0g6akoyPm{$}hA&EHnM zzlGb){mKiA_Xpb}%*1jJNU}g>@%|c$Iz#J|HmDEttlIxV#+ouKFIC7aOg*;Fjesz% z@mY+DO5*(;-YaPz7Vqz5V^Jt#TVlzWaP9wV=He>-6FiX4CV3;{{k<)riDiTxJ#a__ zv{DP&LMi*(D&F4_XfLKcl0dm4 ziWTqgKH!1ELUfJY`nwtL@4seYb#0YJjM+Oa@eniKUqdTL9pbYw z@aH}Lyon!XkaF#24r4a!4hyf#0bHhw;|cmGgf2E3BAfmK^r;Z&X3Q@S1n6FD)fjNz z8K;j&mcT7)@m4JU4b%Fo#Sb(>afazBL|Hr}>$!X|y8;fO;*6I~DhPARQs!sdCoMJ6 zW8tH)Y@>|Wl-x%v_efTBjOxo_{77W6E*y{2s=X)_@9*)Ss9!MN-x@W)D^CMs|%7iGa)5jY^4;T8gum@Z5;5ERD9q(@=3Wx^JA}ogq3-%SR zM}+^+Y_1X}|If5{+425-Ea^wQzb?ly_DqUSr>UZczLT2L*Z3i6Y<%o^f2{$}jE83L zskD<2GxVc>35X6ZbK3x-KrrwjU``?6e_Mdn^@gyQhsFEr2N@~t<@qR}tdF1}TZ=s& z1)^bzH>LZ1AHIH-_Eyh_iu|_ht@e7av;pb&7=-8`#QWQz=$Dp$jYA8c>8%^t_Ey`# z=R#p1&?BT%9sJ(hsBbM(MCiXfCG?*P-}Lt?0czPGPQ z7tnR1?744RC<%wD5MxRvbwX0qt%H1euMe&9S&j`HD=MuBB_RIAMKEH5(&7R^n{I+2`l!W} zX8Z*EA2P7veXVbp*e2o|!KJ}G%d`$i)3>eQVzC6AquOU&Ud9_0Ek3@(Y;i{x7rMOUdR@7){sV7&CopSZ`Q-gqL^bwp^h;A2-zp)XpTBnwG!coqE16?Lf8=w#?Xx4OzexHO&#j6 zP2!lUj7M3QB3X2eG)e}WUBWCO`6UJc&ObZ3F0tcL4#t@~J09hM+OlKbd)pi}sOc+w zLkTq=<@MsAUWGmb+4Rex2}bk(L@;lNQ^@}UN(BF#wdDYeH9x>wGPjK9*Pbf(Y$*yE zJYRapHbI1re=S-h1hm+pkYh^!C`TGR551+5-`d}V{f&{EN&6y%bGnjJub;V|{gnG; z{w&WnWo08*po%39edq0fV`&HVBp?*kU5$wl`anP~e%%@p_aZ=`N&XbzhaCDLQ=sGl zPkq-CNo{|#npW*0PO8waVp9}*UJo%JJQ}jo-&o*(FzBRtA+FH-XP}{}Kf5D);&Aj=;FigT0u4P6d)x9I#%t-XcgLWK!5(fpy6En*tuiT%M7fEYNb8f)Q2+wRbTU|nAL3g57fS| z8BLhifg%WVA6z&94jacXR42j-VOwlX!bmA`tyL)0w?VzzBKG`db^Vkf^i$v?^hlRxsbSRu+!Zo&p zv_SVf-+L@?ynrH3EqOX`jcF}#smke_J`>MQFSGil%iD!GC+MG?s*lOx6|B+XdZELq z)$fL*!WK%926?`Brt@Y{aejUjS}vfal?taByuCrx{uL9o5InK1@6?t~e}$+mJ>kE- z92ZF*Ey8{54u{}(eNd7#e>*o#7c>E~Y*D^<`W*hj^}o#HPWR;0+Ab~csD1}-tKm!# zG*28MzsAiN>ix(n%}b zMQX*a&({qKNN!pNh}kVwP%?jWw^Z~Qq(8`tV;HzhRUI|+H9au$yor9g({ZqvO7swk zN`HX4-052*OhDuv{wopJ`xuAR;XSK=-i85-yC>#vt_7nA83~v2c8-E@i@GW0cdaNn z*-M-DHh^|OFpZs{Pwd75iavO5TwGZ1JAEEOQV?OH)AycW-^1=Na+tX-+ReW&KhKM1 z--uqg1~wrQTfywG-U*l)eQ-Js{lngL`ksDKLBlCK*Xezlorfz~RnZ*xD!ZfIyhNCu z+wND<*PpNlGSK0_N?#W^GWGwfI#BH>P6St09dM2_p2c00Q0r#LY~AehY+X&n<=_Ei zauhEBX5_Xr^1Q$0YTbWA^NjrReU8G~zd60%y1d(6<%UDVc{3UV0m_GT4#Iaw><>nC zn}|lc-yw&)|E_g8iJQ8g@5Y7%Iyi?HPF;Cuj>~2{_ZA!%C99M5^xij+ z@o)&QLT~pZ@?pu>x+MFB;ue*&)IgkMM}AyF)^`lu4@omD(V&kG-b%&tx59f^zv6*o zL9l;cAchN^uj3CZ*ona{cxo;_lw_mRc>om`4IASqjeRLEnDS7tuFSXqE9C;OL%Buk zNh@J<&;a{3t+*2#Xh!c++(2DlF>u6{RKUGe<~eria9%XcTZL9u~WyPTx{7 zG*HeQ9Js|IS~2aJ(BLTLW*3|75VtU0K3TU`I!^dk;MKc@PvSP_{bHmnWj|pVIkDYg z@2^_-9a`7Fly0f_l-VwHOabowf?lp+h$}7yU^`uiKS)2e5-TEH1rFWdOvioS9C)qH zMQ=NJcT=AST+yrYQl@!3)4|)B8Cr7hG+fr~kITH__c95Ry{F&sgk*!9lI$AA?L$K# z)&LI;Rdb|^!HO=6Gx|ZJt%P6Sk^E{nIRd);q;)rVPjU`Qkl9(+xE-V6rRvz;PE2z!ReTC2f#U;j0uJ<5Vz2Wtt0d(SVB%j9sa`*%%aRAL7 zBnOZwT{+&z=o#N&>3$M-YQp8N;NcCt+d$OyTbS!> zok6wjLxt17##-tUy$(y>j<3|@_N~UZ)IdY=Du?w4LtxLlno-w9rDOD?Um=eyKw#^4=+JSd>ExH`-ft0 z@E(Ir?fCj?nuphbp!$&=5f3lfwE|NZ|4nhV+XAOCNX>UoO2@u4B&ra2rEl=t=DcL) zf_COWNtb(4GIW~fn8i#f^bK(o`X*sA$xC(laCWW5(Smj-;PD6N;a9L5q$}A1?hdcS-; zaN+o=cGr64M)nYp8tY+my`O{Cnzr?Efb=WQ{{6Y{+Xy5}=t6?a=49~iCpib%HncQCiP|t|G0}-@r#aU0xq&?m#uKj9Z=~L*9o0B)KNMfQDQ2viS># zvWDk-k8{=P7mEXHvC#pM9C2j#buKZ&RvKsO6ia^@6tM1htd)lJ^dS6Y1oEK@5;w8m z7+dGfv)37UJXOTk{+PGWq`Qh_Q2`miA;h{>0iSZ{8h~UIL)fE*pCBum>g4`KB1Af zGpJr|hi2{a-sl~f=j(TKPpFwxa%pYvpUMp;EEgYN1xT0J$p}Lfu0h zvuII_jtLAr_sX*usuJq^d31uXE;Pu99AFljMK_v#f6nE@RntP+&olk@gD=~QAp?H| zLa}k^pJ6F%8l;$aA!> z;i<2_mbn{>yv?b%Le++hf!&3s$^XuUs?ZH;k!?YK=@aMR@KYkHui$^E&e4U)`V1wfN=$l0S&c}`hQKobS z%J`Oq!+Q(4nZ_G^FvOzNWyKeV<`|0_6(Kpzpat+HIT^h9MU`$cwmcWPOb>LR=kBb{40^MXXwTiRDvqp56obE zh7@MKCp@dW{C|6|M$PN<{{72oE7#NDDbUd{T^v6>oo{|Fp%JYFM8+aX0Nq9;Qyf}1@ zuU3@*t&S>{Gt0yUpd4-KaU*#j)eT%&=!Vcw2BBQO(PM8CfC8V4`Gdq*)cg6hPfm?-N9L@=4z-QaUxblAdgr+Je}BG zOwGNHb91*uCI=Gvga<5NHuP2I+(K_Brl8GndEU`U%W)Fy`w+HzCA_xeE1eD9`0@Aa0rC4W$G*=39w=XCNhR>)4%}LTH z12A)6jNJNL$S{ZD)ZsEm^Slg%D3>9-X=o8HTj74yU*oFwrq|u7qjf%>4`0Dn9Nhn; zbE_>WOnEW*+eY3SBZ@n5!875XEvnh z=ypTV{?5kEz?sncOy2&0q3Kuw-PeEzc;6;evp?(8i%l22G2-0?+R*`U4gHHl7$(06 z^DQWkcZ`y#*>Fj)_`+di`0yYz7?e*PxX`Ih={%2K!Wf;GLBqTM>_D7Qm2{C|Uuw zD)64vS2;vOPkos{N}Pq16*2LUiXis-Jej&AThM6?;FAog765%R(n*HM(1r<#TLQ2| zL0%ruX_HV4PmkkaugU>?X1zHq79IYFQEoAi+3iklpUyE^{22Kj?jjkl6RbJ1(%{rd zUjPv95T7%a>p@KUA-;dUSvcQU6`XqZcGOU#iW*+~3bLi0IW$9I!S`GWUZk`Uyx2cY zM39V(oP90r>DHk9J1rc!e-fP9v(={U`2?rFP01e`g4X)JYWedj9Bi25VrtCtxas*l1Pj z`!m3|)kJ}Pll*qSQ+5u<8}5nEXu~$w^K3m76aoqsBN5-XI^+BHdZ4C^&sq%=*QZ!_ z_RvpX14@Lie{FH7?r%%{Iv4tHcNF^jKxMrT3h?de#1TD&YnfTwaN57XKN#D?{#JE? zDNt;6BMzAQoBaDmM%vE0Yn?!GAKpad80i9DV%YnE+Ri&b4Ma8S1?2YOigyp7i^nD? z1#hS|KKS8Kum{5);rTUy;J25y;G5pIIodFF1C7OsN+HhYRXu+0CpOp@LBCfuex|^g zS7`ivMOpn1=kI|VZMLX%{A|3zMC@GSr@jKI%JCCxzAi2YD!4!+Wn_4K`yoifEJeC< zzJ}8!4i3)Oe_bNR&$U1i8Jhoqgs}PgTclsu_=z7FYy7m?U=u3l_&Ht+9t3CwkrS7D zGc39j!}POhndjZVFOO8FfJ+mG7;i+V#NZzT4Uy zFHbJcIbQB4o~SK_f_-AJHti@9wWVA9jlBM(?d3+&$nAsE5v;ci7L;LsRgcq_C3G1I ziCQ}^bE|iYSZ1T>$5TM z<<89QfMMDv*df`wW$c%MPAUNKOJw=B=Pr*G=vmj)ATiL~Zu~k|@HxN5_5y!GhkPm| z{*)c}Cd94adIH-O3_ug7|G8s7MF45B-YJqg)EQelDWl8G+@!<+oXXW3|EFlKQ#98p z;vU@QPe>xfeE09wMR!@?GPmjr6o9BP>3*1-N?6k;(^ZpA)$*m<_2tg83vr>eh`2=zRg62oGN!6D}%T%`n5UnrYhV%>6mnZZGredk8&g1W_jUq#& zzO2Dulz2QozG!Tu8rnA*gsw^rT_C(O9puh)sy^=0@V?hPG=MFRKfVs;z4dr>K_M?1 z>EdF}z^MgrjaZb1G~c^60pF^W<}uv7wKU)A5mgoq6V(;N8g(+hc&@0bWFi(gMa_

Ss2))bvKCxV zUMCo6?+~hS*aNp0O?pAY*c?!0F!+c2p~5IWSV%rL2bR?oTU~M z21`0|ZD_E?v?Bb^O0QZAnV@!CL25Xs6y?ZngS!%RTSukaZW7&=q4dk{Rd!>{Zc7Mg zc7KS%O8(cB{8r;*+5^;;@^utNJVzHpKi`eR85q?&*F@>(bL)#?{{^HEGR(Lb>y|M6 zycp>hreDnO8>>IRS!t6%G$~R)7ya3ydQ^X=19hP_2KUD7Po6tDPpz`{4n?b+c=12) z&$>!u&Zj@W1%i>xtjhBOUuSw=$A%-e=|e^@F&wuowR<(%{*f-aHGXvrdA>>$9ot$g zU22T};!IGL=ksLh`|tyaZnxz*g(vNDlaYRb^8C#^WA*$0C{Du1v6Sangt>fLNxQhB zMvyuOt_k(xX2ZD?DuzF+lvI=J#LY%4duPEz0^z)=O}d5@zfSSEjRUf>gCwdbN$h)~`Vf z|I@`%8-!u9`l?c8=GkVU@mRS4+qcYyWC<{}_i`idgJC`1xX|AP{niho;1-Mmu^!Lf zX06A|G2*b;ZHo_B?EaZXwryhI4?6GrTKrS5LVT?E=L)RH$;J`u@dR|C2<6*Lf4DJd z6tNPA{S|gNnD%mDW3?iFZ89#t?0|Wn2I+2`R*al(yr}hD;^{#vz3S=aX6*Ncw1gih zm(@k@1xz=iC^N#9(sNEXH!1n8-l9Jr+a45aJ)81h)KbZOa~z`{a>ZKDn#LZkXPebU zyZl)bKr>|Mb3K|IHs91h`i0Fmng0SFQToGRj7^IMG3T3-DKV6Xl~+afX85Rl*-Edv zH#@9VbUrQlpZDgx5ABwm&tx-P$#3;0?+aDcpSLZpygy%n_h9zt(kT7mj@qI>|4(L^ z0qr^5K9Pm=3+vB;J!19eQ%h_r#O%*1+jrUffI!Pi4E?AZPnnDb%TkCglt%TgYndq1$j`M2!IR%I|wONwaO1=!>3E0|U~ zMHXKX>XOQ*$Z`%hwZk2EE8Am3#e7sn`>krK?%C@P`a zzsc6`<^lx2`9Gk3*PL=awthz+bhRFiR2TXY1KPkttC{c#rjwOkb)Vi{N7-X~k78Ku z(+f}+I=*N3#QBWYT1tLvw4M*Y-hY|d_Nv?V{v8UxenkO>EZHwN&-^krd z*(sHe*ZK;iP^-_ef98nXKkEtCaMn(?3m#3ek(~&;N^Nj!)@(Wd?EDnlO|bu07wW6D z|Hq^8{;bi6ID`qREiMLz&p+QH{ley-_5C*kQJ$Fl;rmYse!3J5 zM~24m#TUNb+=%oGn-70?0*@#;koKD04>9LM)qX3_uR#{}7w6ZKLt7I5tXlH{#~d|L z_S@VBq7}|JV#vcYCq+Xahq8r+p1t_@pg__*zxJa{?E$3(smZG)8B#41uf7K97bp*n zoLF=aqu%64v-2bO<7!3D0X_dzC80TrtSzJ-^+lUsx;1(WsdgnuSGk4MIwtA^Iheyy zS5{bI@($;nqV%=DUPkds&TITA>7KqWN?*%6A-b(4W>a*`qc|)aF3+1G{lfUOXXjY` z;^F8~8y6+d&HH-xesPA&3~sE>TJt&IQ5eVCFJ7pLzM8)<27mUi5Di_6Spf}gjm3yH z8S{K)Cz*Osl3@&jIf^fvfi-fGk0f%##_vKal^nok`tOuPQM81R5hQy3gH);&xV{vw<`04 z=J^4z&G}4(IurBRLRP5EXS^IM=QCWvR_C+597SgTSo4`5SppA4;mYA^a$=XiUUJJeG50RfHa)TA_q| zSCH3A=L5Dqo5rdok+qPWg$c6~^<)8R33Nnp9MB5aZjv}wYE@C(<5G@h_2D$5Ao)*D z>HY}z59fg5@^fu|FH-VbT?G5J#qSu`I4V|{!O5T;fF;jZ(+A$=QK(YX=`OXdNGs)o>}FM-3~AXcnae4cn7 z+HfNsIPeZnEC??WhpGQqL$*A$~DT`qs{ZEAH75IVp>g>1!_bt2NIQB zRyEvTiqbb?>cjr0QHQBjMd`zBu#*dABJ;%<`o?dE(NurdN52X~*ywj~p20ksKHYSj{{GhN`TXm8h<|}t=7I}XT&LPo>XX!xs_Jy@1CdC`e91-D66%q{p8{Z zgy>J-mA>jY-&*5Q)KV`V-hf<#%zK&e!;q*y${Sv|v5Uw4AK)4D@w28j3!7l8;| zB7zaW_yYG3vhJ8dPk3R$h!uBiCV?D{3G2+lFp;NWuWx?^HoYyv6EShn(twDR^AVw1Jw7|BhqWK zrNaGcqJAx}!47-ZIfJ|9zY zZ6&`g{?zzWI4RD95Bc6dxrga@Ib8l8*)IQ>RF{8zhXQ|2#{$0#v8Z~$c?2&cda*7- zmtX!Od7qA_a8N1Tg(RHDtk=!_iWs0pX;^m94-(GtJ;l6qFXrzLUr4wd=)%{Z&96NQ z5HYnc)$6|a`kVQ6KmiI2XDK+DDo7iTq~Ar7C#?k7@){>_@tEG8Y81Z2Dx~|ReBl=Z zm)?L;R?-~MD`e0}3){vhil_K(_R~^yhj+g%f#I6J(7RV}VF(faFXR$jfX}$8#}rMb zG=2fFsRD?U-aut=2g)qeYcQVU^*drA2pV}9;} zwS2!G)~pQSpSmATpTzyI9cQU#v}(Ih-2duBa$NmhE*GIPQ+ zG*_97FfkCp2p1qT>rw`UD~jhlVD|0fc797{hS}d@oi7{bL!r=mAbdaNaYRprqG+8j zBfEhkcwT4YJ|QnUqcAcwew_N0df)Ihq+i$|-hLhMh#JHRkxh!UznS-ieBIhCO4dqu z1H(lQt&}c-aO`z?BVz3DSXhpEe(K5O=D341Z8p-JE0~hM{MNgsXYbhfU>lo5T;47D z6?ZNyeWDmUuqjw~OX+hQHyh;rWE z2{o}=K`_5hkiCxPJ^>6%KFOHbJE4{!Rs91NL#!ilPzv+03$oox=UIhc0_nTys2Wd0D zhw5aU#gDcusn1YvfusoTNhR=Bli6u4%Eg#at~PC%ufX!BWVW)dHXZ31t}aP^F#5cu zYN?$y6MPt2T!xQ_)7X0iyPudHwg2|fPhvczf?bhe*g*vU3L6h|k$z$0p*%g-c=(f} z)t=Pc4CfVg-=DhB3Yz!uuf)|ZF-p*N=KiUiIAWe7xY|muTF@U@;L-~KOx3Ygbo#lL_(ndh0(albd)yx*IltPGE?;#y>|xZiu-lbmf@6;{BZ zx4+5r71i*TwdZ^Osh4oV)P2;IVZ{C34-@|in&+81PM52|?ep#POdA1^E5p^ZxH9a+ zNg+xh5%aNPe>3fhp*v@*O3~^_>yfqJGXNEU^WM$G5+mZu&?S3fFUqUj@9A_+EEas& z8%=y$en!s!wC5+no)51Qm#5_;xE1FAnFhU-^Zxh4nBi=D{%WuRmgOg35c7XOG#A95 zahwgS=kZ0%|Kk2P*5WmVJ)d`|jlV!+{WP`9bIkwe*7usBHZeM?=Kgg!#u}RD=l&AG z{THC`rBUL9PxI0G-b^&EN`3E}88#$K0kFG9>bq5*_q@ugscI6u{}(49Q`7m+&;OhR zO%=o|Re4Lf-zg=RVsE3RO);)*$KbPw8BK!o@W0UA4FHwwN1leiLdyS{(ei&c8t>1l z1{9IuQ3zit|A{VD>bXe2K>2?a@QBif{-g}3LjH^WI45jWDOzU^p^j&sA>v#Bw z@%qgSj8{&h*8Py^{kO|7S@zIx-GA=!D()}+p(V%r#;a|JD8TlnxnV>$`%R zT?oM-)3T68`TRoxbce~cB16aq;u#kfU8v&SLis$i%zNTuexeoC4L4{l}3HuZW8p7RPfeR=&;aiOtE)R!1$0a4NVlBZJMw&zXcfc_girnMib9HheVuiye?*=NQp&eMp zchfuzfp39-3L<%Yra$jy%#C1RKX5=K_2ZhS3y>f($-vNfQC2T3o762BrD2FdbCs{#qp>H%|&TRzz zaD4v;z8wX=!x(u)|8<&-5wc%+E*u4mhego=7J6^IYE$%9qW2xjBbR8z%~r0dGM8vX zGv@jLxtt}F(?ImjcqcuaaPO&=W(ri>q(L_8FXSQC?q2W_dk9TVM!z@qEB%gQsVr99 zw7@Hi3`dcWOVGNeOVF`S8T8z=%}OpY>OIbS;n@_SaR@*LxoIu{JnA@_AJmEgpcaUv z-v9tak$o@}H$aR(Ajhmm-hqRNqNiS*FGwMB zBDeySyt1amj3<-to}7rmGF(@!M!n2X&VcbE2JA&*IZ`aghck1eh7UOcvuvv&=>Qoud}|W2p#u3 z#Jv8fUF1nwq_6%li#%u+nIvin>NWlkMb@xLE{Yh9A(@dwrTKbnF$jkI7!RmBS#OG+ z9pfO&B+F{l>`z(Qed3`){~8hQ0(SzaNr?AQP!QsIED4QQ2xe<{(Lj@jA>+yT4ug}Y zKsRVSXW?ZJf$JnXsrr9PK&ZYb6sQ)E$g|J7ODKuPy(p>=Lk%L4l%4wZAJjV#JRUU z;Qf&++Hb*A<3-N~z)(D08D0V`j|uV)05GNyxesM&%U;S@aCW@u+wAg~Z?Q#;I)A-+ zpE>`VNbJG~{Xq$44m41^J(}Gfdq92vtjX;kuxWlVuj(IR^oo|PLMm(V5NIlZ>J9N@ z&(GYiW*k6dasC;u@lPdSGu~}6p2=7p0md$DttVuJLadPX=w~8==5}EHa+jO21(79~ zl5PS!+Ab`fXo0VJfp@Q~V&|AbM1X^hH(h^kFD3YWP@5luroIuSh5lmd6QAp6ACL}=mWe+y@;kdT}!~DYifFSTT==OoS=F57#s3A)m5>u-I z2t-*ug!#Qj_a7n0L|-r>VI7zsFsJ?ev?vfv*@Xw9G(Q{uc9r!P4hWP?X;G~>r@%Kh z(TbTnim?})*j*?C87v*gIdcO7Tz_743nLfSE;_)~$k{g-xe(=rqHk;LOWSeQjL;{_ zvls*vRRNb`XfOfnF96-fc#rIsYlwT8RtDxk92)35pF_yI*Nc%c01O?-)$ez*i#Chc zGDI?by=INC9O66gU2}XY@d!VjOY#KuX>HMC7Xy~vc!ht#y5&$8)E=0Mf)>jb3n1Ws z00}EkfQF^QJnX@v>JI}s$J1KwOLc7)NjRpWd9ag(O3wP;rZ?-H z;~Nq6Vj5B{587ixF2Yw1M}{yL;Rqga1+8Il5MI+I+;AtF4#E+y&|82aq%9WdH|hx87QJZ`Yctoi8z?x{W0?^ef*k}K}6`t zX;@s(xe8bzaK^+mS70n1=#HTk84;dvih*&ldN3~50IdaFUTZCQj|+5ySMABm>c*|j zM#(ii>=jJe@gML5V-wE8EBabMLfpPcKyd!whmjX=PsUFzMBD&&h(uKD??0fkj)u;i z2kM`wR@5xtcMr#3aUG&R{0Nv)S~Vv16nz{_S@W zXGquI#8l6^$@G$~(uyqGB8y6j#VNNcfSFnssUq#5zV|TjNYww+$vSWY)C;=PI)O}rP&XX33F$!8*{&t!Yh-Z?jdrfGm=({zq&>RMjfnu`D0v@7x3 z3-0}~Npl)DyHO{4V zVL+K0+KlOVh1J73QL%ay_#Ty!-q%_-gh$%IRL~JwLrDv*q&`f-nL#_LIc7vFwH;EU zgl}$!FqZ(9X_M)V!E2SMMR@S=92=f-V+?qIULOH3L4mgnB@BuwL@7pfFvS4BGnO^x zIRP)i8naNqJLm!#&@~DXjZ=UF2`CPPDAQZ@Iif3qDW@J677(*plOUw6W@RXdYo&vb zVyPmy4<9h8uY0Z>-}e2jtH#9Owkhj<889 z87lU4eb z5Jf$?Id{=$QnRwnC`u#5;4o?mM4~LrCg_4%(NdPCNRtbURZjl=-NW> znLwjCQa^kea4r2%MCms5!yjLweyCPf5VNx4P=NG_s3^p>(1iup&bZFvTC2tDtqE24 zt(Ozz`c^jk9`s4}eP4bfW|qDcT5si0ADq1)qz^KbJYso+9&e&FR7|X(_vo!)gbLiI z2Qjznr|^Tmq)!Y6xvhg!sgrrud1P^QawufqjnIrP`l_q(Zn~CZUMeqE=B0dp*G9%Nm_y9-3=F+$U=k-((y{YXGjLF&yCVkZ9b8 zhdkeFJTIT;TTR^#IW^BlWVHIreX^$Jp#d4ws8*WIcKh0p~ON-Jba?f;g0O&=9eFI{J%XJO`GBpzj0nqS}Fj77cOTby-%f4gM${G{Z6 zo7FDgtTdO%?-Bu52|`PrC2G==pGwQ-d;J~`t-cGP7BQ2Pb|BYqL9Q|Q?VUD$s7o7N zHdGt6&AGH%U?RFZ5#61{PAu(;=~d7_QP4jQ;LtU&0eI4q@m%0rm6nLV>=Ot3gc0Lo;Cx}yWTBSTx}tY`Iy#{S4WL^7k2r_zpstazA}_6i=PvR_6Ht^Nq6 z>?3+vO-jEb!IaG)gtiQQNc#HO}SSa&~H6Phi6}Yi#wn z{6QU-7sPK49(1`kH8QpXaK7)3^jzQleRF;P?l0ihA>4ITR{UL)0-f>OCeSY5*A=r& zS^vQGc+U;AaPr+>@4ZLDhiWo(VSm@l1GVuBX@K>CFTLHjh;R)@;)lQ(q>I+=SA^8% zU_)1sVuk2h!J)82KzrZfYPVi1-GGFA_u9Sa6702!`1YxtNcj2q1x!pL$v{Ae`sUM&@K3J`6v9Dmsy6sP09p) zw-42dwhhhIzWXE(+QGE~-(z{&s_pslf8;m)D!=0U+x?CH)unyHGev{*{5^w1^O}B= z=iOesd#E<vtZ)60KzyU(pjMy7+oOaYiW>T|`eu?gE_iNR{IoLmLBoY_Zeb zzJXQ>S8*T}VjhCJC3xl-=qks+7`&o(E=w)0=O_Kyz2y3bfE#|n;w}vMEkOAghIk@= za!zdaq%9Y%umBjp@Yj7J0n0g?sP3{nK~+K05It-Dwl4^DfL!3#u*^4B+67++7%u7^Q5pWQF0<8K zYoW71ImooZZ-mRVRnttF)*jh}Wx$iBqX3Nqpr)i79%h*oedwvQok*tm?Bn3C6s5KD z5Uy>A3nL-b-MK+=*F4X@A{XP-Bd{wJez70jk;j!Gs~8FKTSWDUT4U|Kin*}%Dysgj9gI)$u>3-qbR1HGY!xZ^cPh_&1~TX8T&?>lA=TO-c8T#Dqh`A|0E>Z5Z2~LT5(8KD$*}XC4ZMqQ$$>W*37ndMu?qZby+9>0-oZQPCo$hLfm_G4 zqd}o9O+%uQ!4m#@!+>$^9wr0R$m3=SCX#l(TX_*Om8R!c6W1QLpq zuXH9JMRF+x7cwxewf_7{n*WNSMo9@ZCC_0ZP@J$NK5*lb_>$GHApZ-+>6=OgVlH1P zQF3`p=ZHT?^w(kc)*440H=uiOC?FC*$ z%o+jNzau{xV%(VuA>7~VO3$4+rX|msgE*>L5l6}c-N6|x15W%V1=@cs2SE=Ef^C6T z_|_rNTzD#Wmla?T;=4a9ca+e#pBDNyvWP)gmPT&!WwiUvVlp&i%V(oi`rY_|=;B_4h(t$Rx|9p9BgPWZx8hqc zrFb$|Tt|#~=0|j2x?ZyLOwgbnsjqE8^9J*V@ll{=0Bn(vmh%y(Vm3Z5Ma;SuPD_^U4s#^r-dcV{;!PT{Nt*OPcfh^$0?46BBX z7n7RaXcd~zr(nv~iJ+f*Rayy%8du!d1yg-$9PSeOR*99J{w7gOk)Mm}k$}vp|91x= zfYx_ifo1EV<}_G@-G4-UbX;E?ETZcE?efo~46s6(-t0xZ+1R0|i$yGQY`Y)V@4H^e zs8mx%;h<#oK-XMfdxQ6AV#P^D#(dv&Q(6`JhhnGwpl&SvD+b&#jo6>Gz~B z;{Ci%IqLNHPy5(?`bupExqf+kN!&DT!OpQbCNK)+WVrY|-+PQ`YQ;@=df%g@&GWv; zhB^JYX)D|(x@j{O;tf+z2Q0WT?M-vVZwu~q`lk25=QrbWAook}!yNQx9DWeu7>F#I zrj<6pqQtXR^Gw8F{hmiLmN-#4r=H=cEH1F>1l`%e`QGWQ8i)DBqC5k1fq|k0^k_Dz6dTG;mGaHBzpwqXMO>1`)qO1E+t;-45@-Bda ze6VBgi!SKPVd8a)$qF<`B zdEALZSG93E`6!~W>g_R)!?LD%Mi2^As&oY*ciDauDJ&=;9KDBgv6^uGv@hs%pSef# zT*3yq&kQPV0!;hjr5cye*u#4P#MZ|Yfw*zZf*$)%hn6C3Y!lYnj4N~=Sp5kN$A;4n z{jlM*_^N$D_vvf28Ml*X{5493v0sy(g$XtIQx!b`ZD9vGl)^!D6wKw*d14|#^Q=P^ z`ZvJEYzmm4QF0u54!qzq6819!2dcgI;gZ)-Q77qP29VEfcQV&|3L)g7Ii7TR^PnS7O7z~5v^g&s7~t^Y z%)CZ0tg4~p*{u$Jv#@7C7EF zp~d_|(RKJs{b~3AaQ0|9ax0V%)!{vY^{js44begt{DFuPYf;-&tG4mytnCEY%dG7| z)^Cobj$H&mHYLUPbE5Bm~$6AHOjI)`tYrVFh+Tws$qk}(#| zelGnUbhw|nwdCnzKmj4bA(E-2R)WUV_bW%EaTpr4&xwW?RhVd;-32subCu}tc6b5uZDVJ-VR&I%+oD_%Yv~#$#Zd`Qqivh(JB__1}E$XTChh zmqPPp0AF(OB3l@b88U$V4)L0-|AF}?aFyBck-lce#IfS|8kw$nG)srGm{iJc4a|bGL6fp2-g-fFdrV z`nt|e%B z$=17;0J*6f2dR;qT7C89 z8x>k(l{ycoDK9ls&?!@!Fi3s5Mg`D4oLWynui zqk5qz1Xrs53CCvW{tymR)<~Vi1sJw<8{(xQUclxx$>x)@2v%AR#Vq=`ov{}z%8K@a^N59h#d2}OOOM(u_vFZk6%O! z*;p|jW3Q~M!{zr8LS~tHOb=@b*frtpL^v!7&+6T*Cu$Ux9`qhG4|(1;=8290BAigf ziH?yBYvPukq$tp>6Cc*z`K?H&a9?ndkjLb|MH3YMTY#4c{+r2k@ZXqCg8!z<9OS<> z|BmE8!W*N)8yO9+hY8Oi;pN-#M#qGgt-`x88eXaiZ`($JUws?i6*1w(sqjvZk81B; zd}4b`B)nZR2iyC_gjns}!u;0wT^|i^kqIwD!kcfyn;a9~92K4~8r~Qa-rfzOy(4UR ztz*LLtHSFQ4KLe-H%G$DwBh|YK301jD!j|0;l-KoawNQykA~#c?3nO$WC+pk7nxg? ze_NPN`L|xQx7>!;DJHzdD!jL&;mtAOy&~axZFq+tjn!U}-|AmqG`uk;ydDzX2pitK znDF{CzXh*XG`wsRUYvxNX~VlMCOn4<@3LrkaVEUQ>jeEyjtlk2*>SPjt0O}Qzh7kT zu>N2=`eT5ES8l_5FDAUjD!jL&;mtAOB};f-8{WM!;f+_}jg5xa*MwJAF527EhIdg+ zcsVM(_R;VhCcH5c-X%7?HN~;$m#D(49t}?~mh^K-ct7FQoXW32&>+L3#h<*jVjduEJXq z4ewbKUXFzKgbij?Q;f;<7uZIfn)@XPcCcJGcMSEM=@UDmnFI9!tFdE*8hb8?=B)s48YVz|J z55;QlUgo#>dAH21@^hI9FGIpxVZ)mo6W$^f-hya&GfjAVKNjtsYQt+C6W$mV-pFWp zJxq9WB)ohZ-jAbWwKrRZcVjfXR1;o~gje5&H#;W0I2GRMF;V=y7oUXww?edcm&`$a z?i3T=7UsA5V|_HdMJBvgB)s`Hyu%O1YVRBso-Z2S7!zI(32%fAZ(bBU`p?34N=HwB zSTongp+T_k`AT3lBFgdb+2UTA!G#~T9hVO*8u-YtAw@{pkbL)g*sqE&)7v*d88c7O z{{X4qzB+OGUp4X7-!bh^EcFosIRyqhe~s}MgAOKSJscH|NCE1f3d88;W1JFqq6=J_@mTcpY;RDkKy%a4VLS1#+3;Os~j?g z2z#Z4-{8A}-^;;Y&Pku1BSsG$@(3ws<9Askem4`pZ)*tpBuMTZomc4R)Jsf*b$?Lh2!^Fas>UJ{~7pYN&E)?A?Vju;BN2`B3SB{_OF5tKJ?{m}7Su|nHkO=;3ABkT-;`di|fnS=$ucCqE zf1s(*?+LWQ=6}}Txr+J+j-Bw}{SS=_qt8m%O~UB&{a(~xEbCu*RPw*9{{;Rh_19PH z_w;4^&z!sc1IHFULIzU#yM1K+{aF8B)nxl+{T20P`@`#h0yx_3XZ@Y4u76l6n5o|DG{2+b8|AoeXbh;&ewBVr9~v6g zb#ZFdq~DdS`eRN4{*J~WQS~ZK(63{7)pw$5NxxA0?_m2+R?+^4?tfs&pz!(YvAU7% z|AFn7NDP)pw3SFK#~-!*$YZyk^-rm){?Ww`-j4}FWunt{BI>`C^?$^f#@}(@Z-NNR zE)qn@4zItbTK|ULZ2yUKx4-A;A>$(Fr^h1efBt`LzpQ_-tiP?Se>wiB?MEKU|BW3i z`MT#!6#rWNlScgRs|vr7LneSn!sxTRb_9J+?FN2xIg|K1{y);L13t>4=_f!WG%u8B zEI^Q;K}CZS1!;+(UL?^VAXNnEMTn3H2tqK4a2}^9_`cY{g1upRDHe+G(i8+mMMat- z&v|r}BIUmSfA*<&PulzW`x)-pGP^T7J3BMGJG%zndCLDfLZ2jO|5~ztM*9o9q5WMa zqUht`&k^GtO%Jd)P5zw5rY}}aXQ`$yRZYKue{7^#j56l@-g$#TpA~q;DtdnBwn08N z7-E78qVtXZ|8^Jp-#EJe&iOrT^w|3bI@gEi;v?wy$xlF{2Ui+seSZl3de#>DZO1=0 zB#xqtNx#8tf5GuG>DLmvp`Epp?M;(@9oh6x6!L-gHB{3(YDv@gIGcVDO*`lJZ(WIh zbo&ncGlz~Fdw<0G{2a7ALxzif`pJ*PUv;85sPI>v*p7ef_@fN@`y1*H*!IDG6J98Z z9>3kKjQm~E`NsIAu>be|9YsG!{|DYTV%Uf=PWkjRHCelU{m*vv|7osN;D1f=e@(^z z&i=P#|Bdz+=A!*wf0f;SS11@`207C_TyS_*J52^Ow{9Q;hMYVqx|Jd5Uz-%A2dQUg>i^h2VuoU_Xz61SR za4d>G4*ty?f(0&O{#|14B<;hS*vap>5(L^;Q=R;wx)7lT2iFSD7qv7?^;qAt`Kj7Qdf_IH8ybL?Mw$bpCb$GKCyo)S& zJNvrf8*hilb7c|ytiiS+{W281J^0ke<8fDbTUg%U=Py-h`*f?s*06V#q0256uejq z-W{&+j=&Z&=@-IB#CU9BKE`9wt3tmGss!cBx!!L0F15q^C>q{89o_&1?@0^Zd#>;b z?eHc?!yBN(OHlB7Tk!h3!t>hUb&7_Us>55kQ1ESH!8_j-UVksj6ykJZue-q7K# zTp;+qWWhV%72a$+JbyI2JRM%1f;Yl~x4fGh{ob(4(^sP9=}hJW-(&@Ex++0@$GE~1 zd2Zm_G#XyK4sXkR!8g`|*T@x~$a4c;C|X`^(dAX4g15nvSDWvO#Fv5QJjDxOgwV1} z)?f4Hn=tY$S;3PPey`+18ZyRX9s8#K?~irlH?`iNDD|<9?XxTJSVxKtQuJdTvR`Gs zcZ<+W+5R-#F~(UDL;h@?x)#a?BwYY(t&wH8XBkfhp z9`Wr6yc&Xw`#7UqEd^j=^k;Mu4*DV6V-Ge?28{qezhN$}%)RV*f^UyA@tnu-^VmjCd74*opc?p$a@P9n?iEkR&OhBH(e9*k{{Fz3~8e2WODon(C+^ zmFP_oDQW7ccAaW!B6te;G}v%XZwkknV?rZKBhB_JfEJ6$TklTNY(^eHjrfIaIM7;K zAZUH43M@qweTA0Z9ql#byFK?(J$}7}f$;jPr5w*_RjuG6TpY$+&Pc`8@~=O`Ta(~~ znBW{@Wo3jLSBnWf?8Y3Arq~Ci6rS!)QWz8ez(Y=+&Tk|9j7!1f<>FSnwjS}M&QvsS zu&q8z8F=uG*i8f9&|9 zjDf=*cY z-$?v_j>6y3e%C<*^9Mly+L@qBWcwr8ew=E*m1@7bYJVpFu@T`Vlrh_H!1nJfr~S-9 z1Ea_PKqUUyJJd?Jk_6g+yjkIYMB(pjzX{tn-<$X2n$WUOA>8mE9==?^tQCHEve$bS zZzx*z>-1BMrr??J9yPK+;!Rfq?x5O_d1JSR_jrq@B|vSP!z}-_q~KPRwBq(oL9!9x z_Rbwpw0IZG%D%^zoyP1N9oZdh*>#zn1H@E)!(WSTH@1U$%1GhRf3iq6c zg@%L%g$9Q1#mUAf{5GKm#tMOvle8uq5KFad=*Ccb==xAgx6%u2rT<)y(oJRJg{m1( zz(hVNFoqrC{pTM<(BK8nS!WsBJDeHbhD&ew%iK4RYu>NxnR&MnuiHI3H)9=Q&-23O zoRZb1dt=v!cY{6>ZOT*fmW>^@Y{z&PD{j%V{kH56m_5XvUCcN(2CY3M{gD?urIJ+r zV*N`GX3gl|LH5Trj&@hTk9wM@-!>B5Espkwfa4NJ`_oo3J;R9~;)nH`*%vlG)G*-GPmkaapvHbp3?(Alf#f13ZfsIOz9Df2{b_aQ}EE*3;?iz-zp2 ztH*lsl*|HgN{OxXu-v_6tf%q&{$@Nn+`a9LYufmQ%eU21%s>_;K zx8lJPuIN1?9m=i@&^yWinh9u`p2d&y=CEh+$-teT6rE~3Vdy8Z5&&xB_R00-=@0SGVB zM~Z>fY=Ne3K8aXUwn|0oZ?-CGZ=f1tFB;=tFx8zQ5yYGq%gNmT+Uv&Lp|%y_6$$au zY-DNNmw&wx-ld?q`)F~prhld+v~R8U)?B_HH90;w1lR4M!&bpjPi@F{>a&RSq<#6R zq~2Cr;&+tPH{y4^g6XbGys1hwQzhQ6XOx)E5)4RUpCqBU5VSpc0dG3$g)Y`s|M+WI z(sF#)GJHaUJ#a~#Ef8|H8v!x@Px& z*m39I;tkC}4p1kaN0Dd|J;tD$Fc_mmrFc28;SWe`s6GF?jW z@!Cs^4kNr@eyTqou}!+CG_VC+D_V(X!w~XDkLr#0+Aw&To+T=DWFa(*{96@}t2a`k z{0HwlEE_ms;E3z-OhQJrq9ge=))%C>0CoV~{RDt2bs*M&w_}3|Z_4+ytQ zOGKjf=GI@sWyQP6BQF^7Yzz}-@_)-VVfrGU8qi1UX!OTe`?ZJ$Y7poXSkMbYh5|FsrGXEPuerR8AXKlg=bC;s`F^Dv3&_C8m8?f`GJ-NKUqTLU1Bm&gIO`)8c0x#@q$A zp485GQLwHV;k;8)uoo)143OBIrp;#z(fj>N9U@Oj1{Tk(&*iQz7FXcx7gHlEaLX1i z@bvoj!oqkM2Tm~CN#A2Z&LX@g)VnDRdP-c%nSTC?$Qg;*4LMUkR>_%U%9+##AW}Bs z0HP_a0U83E+a!ypWIb@r_P?+Ad4|Q$XKN}SsSFl7apF7Tc>M5Z3_%TwYl1M?udsAGOkJG+gT)A10A`56?$ zRG78Fm5`l1QvW`*yHH9na2Y9Za+1eQ*w7mWq6jxr~ z3=&W4@t!H7H$JNCRYO7dinYA1uTUY!H`XSK)CiT^^3U%ITQd}GuCzQpK6rquL!f=t zbKD(CTo!8>0QW+~FmOC^i6?)P`cLcR$ja(VcO4(VS8z3P!}G`}lw^NPcwHl*O*nBmenfSe??l@={l_Zw zgQ~KV7T+Q{%E7zybAuMj!HaDP6Zw}>A=JqU4P%ku7v_e(|Pss+7$KMI2f;eP4>0w?wNtjnMJLcR@?Q6XJ>kY{J zi+dl};9Cu2lAWZYF)8TNAt;9CL$tvUGv`6q< za5lmvX8T@YC%9Ipc~Y|x6}E1XNXxo@ibqUd?TVhXbI~)r;*+2&OVzQ$>klp>yds6F zmr)gct3%Zhuu;B!+d-9HT#m4-$Y*5BX)4qhWun?4HPos78k9;Q={?BM zj#8`{@fty2ISJ`m`~(Gc;i)PGi0=y}Y6azWwtoqc^{%rm#|S~$h9s^=5|7?&xRtCB zl%B+Oe}Din}%e-FxcTR=)X#De!i?>RE5tdx94lsc0ss(bydZSUI( zc1fPa)kSHm?wO&Hbpmn!PLM5Yb-vN-=LyhTQ*m-E2`9&H>|7-#G%X@=?kOB6tH;U+ z9gL}ptzu`bCajeek$5Q+Ve>lRk0mHX0WB5O+D-pB=UF#!{(7wc}HtGm?=WS}T@{;Z3Sv}F!5%YPMZ*@3v=tZ?+gd2${IZVFvtEcVkdc$hS6lOFtX{asY87)H9rWTfdYC_9Yf0u)w<^RXB zcqH53I0uGsPM}*tR-j7*udjAWb|8IeTRIT;W4C`kB8F!NT2%i62nAYf;Oq!A4AwqK zUR*3+b$+;yMe1xjaUiT81YQS=x97@{?@*LRG8$+4!z=2wNQ7!B3MG0#bG z3xM4R7sKR?X7H%lSXI$oT?!$%BS*|+s>J@G{ zVw9_0XqIzUJ1=uNyOB}&d&i8z&4n2=)9?zfy!_kzWOkb)aPoDf>-I8UDdCt~&S&GFKe zch&A{`df{nHrEIz-iQXcPBZGfuI0(;BACC&y}s|Wd_QQveS%@*Ts@xc`^W2Bg=Z$s z!ohW)a&QWPm3@C{`T<$We5ZX!(qp#A#KgtK91dr$;OuK3u6{V|nQ;{e;aRd43QjBh z-+KD*F|ZQ7%Qy=C@IS_32MUyAp^EQ|ReNj3Zi$OYdGQQhex$yP@$6iHe`zGP^9EF+ z7nyu24E%QVes;My9LId~tEBB(}(H_*<*v|lxvYHfbXL`?jr+hJDwpnSRz3#CP^ zWu8tc{Rw3dD|-WprPI^@nIb+&_J%<+v6<{7YwmdOxitDch5BXEue~e%ZYqa<`R#>v zvm$6WDVlaek)*~s*a4%i4>|U-&I>30fGyw7zLV=Z7iW-fGXuB9@;8|?vuIrv#RU)& zt;vpL-E7~-@`z$-BsO^2l^=uaO6A9efDL{mCpJ>&Ro&^CKUJsYZdYD(r{#_1(GqW1 zf)8gqX&EZSx19;^Cv6qo79b!HHZd~j4(jY_UYxQB{pUw_eyr3#26*Zgr+kGE@Mb$t zs$ME}mMTCelBaGq{E`W(6x~YwvIB!t+GYFG4mYMo-(E)6dmHxg-wE~Y?X{h331yPTjy!Na(xGs~JM2Rst_pElfr+#F2 zE^+%I z@z!r`{s~%m7JIKQTy?JSR8`O7tulQ)H*YN7kUxe;)OnHc1sN%!l6hxv+FxkJyq^YJ zm{f|qwYVgcLo5O*NvnAa$b*d>ZbRd6#Rhfs#<#_|V5yIT*}{D{*>BsG(n5MCD7JWA z)!Df)&ce&ch;3I&)n^4Oy>s_>c6Kh`E7#BRX+-3`8V(?WdU?zv%`NO zNRvT${r>5ykjI8##QnA9w(>?Zru|-){R5U2`)7E2!~S`%4cW5Ai3cchTC_nlOqe>s zKWGg#EI2@GD1DgxQ)f#LkVZrk4zfAzpUkc>fNFNrx_Uv2BFFQ3`uS6TW5{H9%O~I{ zN}apI&{K_r(cZx1cx`=s3`QsU+5Q6jY%M>>VY>>i*0R9A6Y=vh{>)rXuZ;E@*4PjX zjd*-y#qQ)hsCuD@1#}>u&Y@;a5v+)glfdKzZ9k#LYm*>tnZy@*t1<2ps(tmQT>`^C zgFl5(jrp(m-Cx}wU$p8BHXVfqo}0JICEYqNpCc{}o>cEZ6|ICz&dE_jx>tasG@Ne? z9)M2)-p(ipk0S({G+Gu4zKD0 z2>&SsLWq-uzPPf;b}g|OUkZeEgisz9EpWXf*s>G|Q!sUm6`|A{+I|lHVazNyI$TEx zuq(^Nq6R7XZYdCEB0{LO_Ledh>u^UPII0u~Z*{Ez3-{=aJ~S@{LKTEsD;JAjI{?Cd ztPE~+_=PN}udSt0GPV^Uyjlu`rw9SVT_z>Jz6=lsl>%WVA=E7g!u{ImaIi@!5ZYIy z5B>vyunS}EMu$#ZqXE54ENWa1EM6!D!ZZ6SK*#7_$kF9tumoo%fhYJxhUbcSRsP zc?J5ASPF#82%$VIJRC_}S$3tv2ftQ;lI<@7geMh*sHG*jWd)?{bDY_CmeL0=`%vDz z?A;9z>XZWE=-vuIxB_SHgI|K@-1y;JLMV@tPu~s*zEU8p$*zEeE8=M0Rtkh`*oX4C zIe|NO$<_49xvaY9RRoJ1+*S-uF9pJ!Jr$s2ts8(v$5J31 z++6_(Ka!Gg1Gr+*pdx)3)*KMz;DrkvPO}f?t=s?EaXK8D;zq_7xmcOTYAFlm?-#|! zgy33>R@b(*sKA_>vHLWvUEPGZvb9rP%g;~|EbgV6R*vbgYzI1vu^`vzrbB93rbCgf zykR=%JCde3a<5An%La7X7hb<7+g~>)@CY4SS%E$SvI4hH)UAyBpq{B+mhBi3SQ(jO zySAta3S|cx7LkPl>791b%Bb@|78C1?*@;~i*+JEADD3}Ct1 zzP8b}hWNW|{nIZiX8Xq`!21QQpZ}i!V)8FU z8D&58%e;qY0PYDl+i@Cq#KopC(y$%7&Y}mPohm*qR4!&BR}&jJDu zCEWJ{w*HU5W;Zu@zEnTI!3(ZDzCh20w*`#+qP8*lcq(^td^oX}^kFqNwDj)v50*fj z%C;~{U8qW3hf<+h%D&O|$@G#cT5pu4sk7&KbfCb|fuXY<^g8DCoy-p02^Yt`-t55G zUf#f+XcT8Ciw?xYfj+x7Phd>JLBv3_FCp<@GB!L2P7XB8#-Ly@ua$r5dI!#NgR!TM!p>^Ur#9*7quIHd>1|FT-FImU z&wU(xo|9XDa`Pv;CNaJz=Lz#l1%15YS{?%9e0 zDiNLgUtBFdyfhmjFUxebbhDK=y;zyp7-aUMzhosHq_ zOn|e~F!4>7?(&~NNL_`Fa&|7n=^1!3U)t{C?Cf_HSS*l!zbZ2IUK~?VGD4i49aQcJ zKnH-lL+Tia3a>?k8X>=u&d#iH=qZ#g=Q)rm-&u^H53C&evdcp`KX74A;N~Q(Y^hk; zlJ%7>^-5!98*{n%&n|@32Vs~iUk!U_&_|p8=8v+n{rhHF+2;O$m5l_$X(`KpX0B|M zgVRwVSF4pS!lAVD12%bGYX4?JJyI+0=4R5r3Hzmgi{z_eo3_%wKKR1Qdm>Z%_t*F6 zAN&|)^si_;`!}jpnf=qx3+5u?074S1tD1j3L?kChpKO0ya$D#ktO$Yhl+W}y3*Upy zvwcU5HJ0%_c0-_N^O<_glXw2jlaUcu>6gqwAFvn-ye^|X<`_zc?fI=$PgZ2fAIMze<0!L@P&>y^*(AQ@N?$@{Xb9{e=>Z|?7 ztfDoov%>4LivAlOUpEtnxT@zL;QVgz=9zG4ugtp|=s-Ae4uk#p`zDhXh@){md$lWx zv}m6sy+O2zAA}Ys4SaMRWViEsH8=TDYcB*DfT&vh>u;B$ot?|GsMS)k+8oA%VALU0 z>xpc=Xf-%^mv)MtQWoBV!t6hAF|W`nd^Y8;R=6A?F5WkQ%kSDv^FhOO{IN>Izf1Yo zT@I{h34dU|`uipk#jEt;K7+#}4R^=#RGk^kIMWq3ZxgHYd>qsIR?6eePBK zv5$uxf4bcRxo3+0xm-3Cu{#sS#!OSsj3zLbvBfw=qxaf~8U*ipuqrZexJG8Kr{o_< zW@8?v%*840^I_s*MTjq)oKl5MJP4<>*HkUQ0c)J30HcI4FB#$@`AAl{c1l6*EI&9E z>D6cN3+MPdvgZdH!sU7$0h`Utu{HBKAOv66d(m=bR@>^H=?DsmyO+b_vjWqSwM*go zC&-32raUJaiNe3ibkDMU#`OjH`k4RBaKqg|Yh!e&*~4wwN5yjnjuO;c{LKVafZS zqf@kO+{m5tBw6V&IGm-tSkQmVT;3Wbg1qqotpEr14y&;FJPByh;Ti03Kk=wc#^sR`xa(qq*#4Fd_^QVti!qkk%UC^v z>j02cM03en9-7Nso(70Al6j5D0H^Cg^OwXdgn|_lCn20zaHyuSk@FUAuLY;sJEn2( zR|c+ln4TU^?1UOY?5Zlv;?NY@ObB8%6V_r=FXE;fPSp?3@sG`e1t|6c?LSZPW5OTG z1{`^jvH|zuNF6t+JTvwR)H(u%8$z6g`lRITea^#KfWWL^tkJ!P6wG98&tDcFK7BqEuny9A zA5{bQ_QTpvSOB3bvWlh+04H#$!il5M7A|JJ1Ni6V*Uk#8D8w&q2!;|B!im|)4h_!s zcNEs_Yp`a?6ObEY(FF*JB<;jMQd)Z=0p_@HnIfnMl`)-C*>orLj(i(VJQV`Sx?EEZ z!)=5H{01})FZ@AglC`m|AND{QmvMk{3QV{80}f3_I_*Xnq4e_v46NXRLu0;vq{NL4&)>;7mhhRsu zjn-Pf6TtZzwhrS#J*tDdLxID35KbJ2 zG@L)6KQRaXL>TbO2;2Fbr>USBw)>;}jlF1y}odBxcZa{{g;X9O3>t}eAr+6D?GS>o*P_4Jw#r?1k zE>`88?K}0`b9GJss7>Tg1n_8)KMuo*25|qG{UgeqG!wmh=Slo|9e*&Yw)2J1 z_@HD-|Hi^48`k`2GRJoq{d)+7mAxYO)p2PKq=e>^pj{EGI}de->;8Rc$UiETew;R( z_*gU&AhpN7tF$#+dsyYgMw&ZA_vcVwOVIr}latgONe(B@1xOqzZ`&y?54Vvfw}v{I z0hM)jR?!*pM^A$l`IYwge+eZ_dt`E&s@od=U(^Ld573@~KtOkf=U_o;q%SDXL1>_B z+um_5C?J^WEebcg01(Liffnx=>6L3dd@{ z)VE02TQ!}g6+TKg2Iw$@2QC7Whilh>Ai^5yC_@a+mVhgsL`&K%{DFOCvxj(_@MI0o zjEf*%ycqpJou)hN8eY+AxVd(P&Ija#>AS>)?{eCbNZel7VT(MrOJ zGw=j8x%JK>V@c4eN!|&qol4?tVgSD2ub?nzE`;|3pni~=y|!qUK9wLH+v>2YqN2X2 z%ZzBMr-vR917L4!y2Kxb6vDig zFjqq})0X3pB11Sai+~OLTlaUXwdme=)mr56cVCR+LXo;U)E}n<;Qatde}TU`j_RM! zJ)L?yrzjTyVdaVt5wiFE~kp9rCPI~J0 z`zzCI@<-Y4hSLtS@>M(%O~rv)gj~G_20{#DaGri0CAI zxLIF7a;7OCH)dD{vmE;3)R%O9(bg5dS8X^=$JE38y-CZX0yPSMxQxqx=6IU=S~3T1 z{#*@ZpnppL3ZU?v(4L+8tJ2F>;UQ`!_>iDA1T>5I%isOyWJ)M4beX0Lv90bvqELEjBz@uqXiiewB zXluNd-uSl<3;NKyEd9j;aMTqY^5dtU1zb3BD}E5)XHZjXF~iy~Q}K_~Hiy^Img8n`X)lSC8@Yk#E!pkQ+ z5k0_~*i(2M)(}vP+KEuRGP)+D-1Ky9-)j`Nxwa>xHLJTed4)p+aNM89Ms~k|_jKVY z?5A&C2ID;je(Azf^*l3hE*w|jHo!6c(Kj~7bhiJhY@g;mvE4Jh9&BaID(YPD_x=|n z5B-_`ycWy|41*56Nvrt^X}n+jy-8X>IG(8WP-U)588u2AA(*07e!{pyfun3G#@!9_ zjFyAk;20{1{!94Xp5OiPt#4& zt9oY4WETT<25z-$&1%2LCY=%3i{%iv6FbL@5F4Cqt$7HV$V_z(;>ZN3kQ1eCPV-SP zn>eNvNR~X3@y#VM1H*DTzMs5mjISD^XW{x)hr!hMWBh)bSWIqECBFp*PF#i9h(Kpl zk9wj~&>MZ<$5Xu5qVY|HcPYOEgW``@1-H?uN;Wk11}@JEAVy9gJ$C_SkAKuj zx_9$uvzOcskU{1CeilPKcuE+nB=`va=wtd5owvSSLGka3#Iz6oELb?&44OHvyz%fZ z5C&|Bt|WL(>e=Y$1^x2da&BOy&<-t7w4*$S{|0-5;GI+7gF)%9Orz%(J6}4lXQE@F z%V`6va$8loR4rbWOVZ0-gmS?CuKAQ5jx9bLB8Y*H^<)eTZAFISLW~fJ7#ie`*_;oL zhzbpsr6y$q6)(^# zu|>6e341&y_&lrs2E9m1>U5cbMAAiura!AlM^ey{&>gBPfo8uW;pI5FXK=F-lg=ueYJ*5+td}P&!@0 ziA$LNFQ#+e1z+Qzm+(hwDmlYPF@i9QjWn^fwdFfN#ix;~{Q}L*YG^0`>TIE1Ne3@& zA8i@RgtB#@3c$kz(4CpjI{-8z02-zTDA*|naZ=f&K2G(-1RI&1p>OH0Zw*R+QeccH z>z|>kLAR2Q(2U*>ytHf4n0BSrB9yU@00905(TB4G#w}vugSYYlv;!fxF(BLI3na3q_#&)0Ik?uC z%RXNWq}k_vS`CyhTfe4L?P7S!EqPD-{s;wVr+h|B8_{994|=O#L1LVZZj? zVbWIgador<)A=Sgzt&c45^tGFC0hH)zq_*xLTd z__G&(%=Y9wEOb+pT!n=f|0?3agy@QPfEbd(iMQx|t^+6*^I-nj>QDdMS--BWewu`9}X6+-l>0<2+ySOyLA*&aUVAp8gs%a@ZtANHI?FO~7y4 zc$w$-o{;GuaenW11uC4Fi60n1tp;$=UU*39_qO>~_W5U-ADh7s7}v7SKW}znU$^tm z!XGAo*&G1R0s^~vUmm)7d{P9xE8Jh1Z_788*Warv+FzLuV*oGmy!IcPRDVAli~imk z*F^zVdL5B)=#&?Wd|>xG}|E_-pG^rEeXr@>^x?HvPr z9-J6KfAjp7zp-u#-cG-ApncKYGE6~rvT1-(#Ag0YK`YjTROiEZhB={dT7xPDU3g@V zokKW0=&d%*TtfB4YoCvG(ahJ6f@Us)Kn3p!H@o#K5KE3;F zE7^g37K=n8w5AGmQ!eTVJq^9(FX*SCWJ6qDpm%%cXu(oisv=-;ekdQ0xhOaA3REKI zOHfSf0{zeMf656?Id*ro*&VEC5Xzrzbg-=u=?$b2Odh~gcz%mN?3zb(e^{x$$!xPd z+j8nAkCM4w?VPUruWa(Drt~hXeKQJ34u$$ox#s+sd?r z-`3onzdTA`A2eH{JGGNn*B4|sUM9M^(bW&B_Zrf`g27+D&3!( zWOmO+Gv&`cyS@~EF4T>%)^We?U$T+!OVl7~=ZpmTu7GZ6A!GQLI3K`z$8kyrmN6o) zAv7gy1$(fJ>F?tFHT)X9n-Fz=d~hO;^2P(kj|Yg&WAlH! zgKBWds4E%H*O}jaUpoEvu&CgOsS2yulaR=PxVKI#tgPUO@j6y`JE3z*4QB`t_uz=F zI=LY=?6nA_U@-SDHQo#2KV}7Pg|WZ@9u|uAiK2Ob&WYmAMS^1Le|fFrR~a}=BZ>cb zS_bZFumw<@AZr-oKf(&(Ow*bnzjDD|y58)DV)3hGqlowq62G*^RsXlDKQX_EgPzM zDkHk3;>7>hw^Sj+4& zft>eI4!n$1=#LZ(xQ{Y@4Oz`*GFtYLu5VDjLIdKS9~B_D$W|xYX5nbcCwL8A0H{j4N~@! ztW}iOocA#;H+b8|d!{b}#%_0mZ(E37k+;jbQP<}?3UK{$Zw^Jb{YG8!FQ~4^Vxi5i zVzDgbFIy~@XYj3Ju{r0fu zw!Y?fR2Pxcq>sh@pt4IJVbXxr5c@lje!Z-hcz`SE7zGW*T~ zx7;D->{l8GzXJ5RCX|KLkMKw9u^*x#+*c6@6E20LPsM(ShLA)Eu&K)I!+#nBf{OhR z4PhN8dwCH4OaTNH`ym>_P(mn=5u3CF1Qq)s8p5rFP#z`6HU$I~`ym>_aZb_l`f%_{ zKv1zC)>Vrf&6S6&Ri)IZE^XTbf{OhR-G?XGhw`xS@ydyc{SXadTg?hglO=5d0XLE{ zTcaUVsR$O|-3SPA3PKbe=5Q93hsB>9O%?kgx)1d#g2hoZug89fhHx?afD>9}a`o4( z0ih$^94>S?wV(nJ8YTn6Sv2DY;RQk{j}D_q$xlmxa4fz8qgew8F!n<<5t>(|12WKXiU48F-^q)(6S<>m}R3L9G57!)z5V@6z{qXs-XiZlcDiZr)hON9ItHr)o8}p^b zbMF+gPg18o|7ms65|%!HK=gSk3c5aDa9Grcw^V`GKg7}jMIk}g^LA-HkY72yY5EO1 zaUJp8KYqp{f*=)Pvdng@@3`NCXk~%K(;wQ-7ep?c&7TLz^0@FjTwDo$$(bMuzO^F$ z^BihZk1UG^_CrB6dEm;woIHT%#Q@h@J0n||%@)dAJqlof1+Q}HUk}zU54$UHXd-w} zMpMjobG`pvvoizyZf?;Vv(RkteV5wX$bsd}kICqHC_fVE_gJ+&vZevA=%9{MS+%@% zDjmFQj>x=Y&JoG?h$56<&zLs0!C{P+>n+tS|7r>Eh!cV)%@D~oa-J>;#YJjT!GBq$ zjArOhvHWM4rW5VPCk#O`K6}IX>;vO7nI<6gVc1_#rK-)RDTkLHX)eOx(lK-B{9TK>=Y7-5ofGJw9%Ah*IeZsqj2Upik&DHq(|laMxLgz zBROJ0{{4qQ>upG6$q@_kXO(j`dSh6frk%I~d6kn&p_XWxEbWj=jh;p-W&wqO4CX|; zDQBK-vChk#6PUM zBkiI^2abw6SG$|GPBHouW5yHl!YOyWdTjpq$eH$JMa0YT4{XzA1ZBO=ZtxU;g@$w+ zXElD(e#jps952^PBAd*vh)ilapMG%NtU7+k*<}7OWvcXIQw2}k=3_INkBx2fv1E=l zIQqKT#Fjn4mTgQ#Yrb2*^!++(e&!+`gTzB>l7po#EeCIgx8}j;Hk=69!-k1|0E2-S1Jn8&PxU(f*K(q5k&G8BNvxM1kM=~B&-g+F4EdqP$X=Mq_;wRI6#YVEZPQM;>4?G3Dr)wfLb zVd+xTuJ2Mil@qDFpgPa)Ky8FSfwXk?{5K3;xohmzpQAQbw5ZzEDpI=x&JzWDyVRb~ zMUu>3mfEzEcwgdDyBFmxVg#32`;iw>`xnUSNW5<()ewTX%-VC|hzTxmsr?NXZr#&X z>UbY#?SU?}TM_T_^qP4bv8FDy$Fc45sP+(U^ac01sDfumweos?U@dCD?oxYWMQSf+ z&quh_-c7x|Jem*KgxYROY%$v|k80O#MQt}Fb`xn1Ewjw=?#vN;AB7^hC6?<0t`(PA z`}krvC3XXctGvnW-{_{qK1GbnlPX7G7Mn}txBDZO$V!-&_sv3Uy8coT)ADLtd1K9t zS|64E`nS1xLj4un9eL0zC-#E=ihV$v{@QttoBrD9DN}zPZ0N6nIy0YCsdhCsQ0FN< z)v3)+5eS`AoZ9T8dMdQphq38#3v}i5x8OQ6*o3d<+V?!Zkgd2D*S-fDN9nSfHeol? z1L;4LRWNNaC`y;rw0l%eV-6?1Euxq1$?<7gCzaFnDddo~4P92#nyZ}p?2lOox~!&o zRL%hOCPJ6hv_E%MR+nvjh2C9HwNY!~ET9;M+cnq!DkI>&oaNUx~dK`dC+md+T zgzRmOndP!2(Hxk7nj3$TB5yx`S_P`owUpwydRk3C z^{ItH5YfP%2<{+g>4Vup{cf%eXsOP_dg=gfZ=)-9 zX6Xso@9vKM?m(UABwnp7$b(+7^K1nV^yGDvMkIRvjaU zwz%dEjHb&1@Ze7}$_r4+5X{*=5%c|2PEAZ}Ydah+3r)LO<;-!^5iy^ta^7Ko^rb;u zBbs);%9;FxEe8yPO>a#*_M`M6hBMWug*1FgCq4ZHdb6$!w~Z zdbZm1*0g!ZuAG}>O)?;HC3Gw;CyJ12EiF---nxGTs|yws?$BoY!DZ^nQTt({{#>Gx z09}j+r;9r2sECrpN26TS-)tB9{DjJwiEDPNg(E?CG40YmM1JM4+}YR-%eqc1;Rv9M z#_-4R;;X0RRyfF!)Y*RCgzJaAU)co(56~c+l@q>%S(N2i>VfX)Y%LaG2M@e9V7l3i(hU9Aqt87U1 zQf;}Ka{EYkMBPt;ZTEeZaO>Xk5=FLfJzL;9UY4D^6fHzY%&o_&Fn-Id+Wu#omu$<= z&d&WW5p#PMqE)9UP-ev3Cbsg1DPU7xfl z%ubj`u5NKxF{f(7=D2MF=6(}jkoPxAkvgp&iHNTX?q=lhI2AdZF{Mu(01s<#Q(r7{ zzEWg*WL^7rJLA7%4vtJkA8pRCh6rY$7I^sXb^tiK*nZAwBsI&!oJSY$lYi>WMP7vR z)-CgH%)g#=hMk9LsDfVSvV-U-+#HyUN^8s4)4EUR#5=^!M@>9Cea-oHvPyyFIMzAe z^e%t@E=Z{6-E(uD^DZPC2iCm%8Q=6L+m52IS4F~!EAWFeZAJzi%!TN7Oi{-w1s9tK zk<@eE&vOeA?y8vZZhbn+sScis#Ou<5xI!aePED>2cNP1=b#EyED5i;fgc95~`HaZ< zZN&>*_M=)5gl+F2sf`X%dq)cLjqxA@aF zr=vyP0~BR{qy%NnZ!*=znB1`iXa>^vVIvc(extcz$N9G9D%Ya`q@ALm;dw?fFByG4 z@++x-Z@3UWjZ%HiJY-Q!Cy9zb9c_QP;=gVh>X&AJq$uQ?JnV-5*9!mr3ja9~_^Vux z0+4nx3V-BR7XJ%e@t;%*{+9h=+RwNS^$10xio*REwH`eX_W}eRR0~DYR4xrI_;M|z za8>zgIGZl=Kza~U7YoJtf^wZ&Q?O7dH;M|xjb{nCP*hh7MI7YO3RK9|9-$KKTqtlq zz}7#+2FmvBMqq-xd$N4tqG_qs^J_>Po23};EdRanh&#$F?a*Q@32nST!FXSrwE2^G ziXZVSa!P)4eSYGeXAG^!c648&2v&tE5K7lx?JPGs%=4junqN0dkH^&!;IkOdg5dS@ zj{rzc-gXm??+-_1t81dKF$PEV2O=f-Pw*d?CBc^)`Q=M+zg>b~^KFFC(VdhPk>Hmh`w>8^Ukn9gJYXt3ZWXhhF@{7N$0fdn^ZYn<=SY)*R~_eTt4-hM^qw}}?= zJn&$5yLZ_mxO*RrGUnqHZWAy~f!mF??3SpMj(BM z%3ZWEa)@^#zmh{-!-Jki=`ZcZMbJTahTG?(_%CSR!M5vzg9N617ypj2Y&U^e!m_=8 zE61xv_g%!hq3md_-DqCFi8_@M2K#GLqeYYkW>%Dm3XjTW}EE4C;<* zxUjocLfoq=?NKEQSRBa;pI=Zb%YPo};=Pv77eHE_&{}+s-qs~TMN<)Zzqme{!-ap6 zPw|nVrUl2(7i8nLk@&&>vHEg&41x%5MP$`gVKcb?>g!zY32(lJEvveZuOns$*!Z}M?Rycb~GLfU>or~6k zE&0v+GlpfcJb4V!9T-dWQ7Yt~!ZSkW<>DjuzxE>1$b%}rEuJe;y!YN1 zUEc-y@D4-qHeA)fU`vqZtfJ+Fgwzi#P{9TG4cdcVt(}h%%xURDulX&I7?|2i8v=(a z`wP+}XzOu})s8|uQNWEwWFkK30cK7`mUyPAm|BN*te*EwLsJc3i65f~9q;w&T# zN|#X|u$r2j)8yQB!=(t2!#VmbxzxAa*-m)3Ya^}P8tI5eNQC{5ItjXDmPpG8z|CGn zvM6t1t=SrN6tO)-c<>d>AMF6tBRw-7nbP<77lFl}1mTp*ryX9647^@&8{Yd4Vm*%0 z7F)HxVJ63V5^C|pFttSOGo%7n?c+~Tg{OVAB2)=xV8l>DALz?Cfx!U5NhqK?p@P1# z1X%rA#p=7UFBEDT>dA_b9@>k9`8#1=Yjop;*7kFm=SkX!5Rbw2$PIq0Fwoh8!Pike zSsRE}gRistksA=mNcE=!_-+nMfLVj^6U9h6F*)`HpOM?8UD*P9>V(UCcdx0SDL6P9)3f18G`oGNqJ=7_b8R|$pL_GW#Sr8B5#B+~vgm!6buSV_0 z$PW!yt%MVQMOJ7+sAdTJzpI0X%s~k!ZqO?|iAt)phUdCt?4#uX#X`}2ludmWIn{30g9iPL;CZ^DTW;s?i}!&LzMO)H_4zJ43=d&J%t1AuzG z639Tq@^w$y=~x)MMF3dn3nf3CIqV+r(sX6gdH3Btc;1*D@|;#Kft^VzB$ z$Ym=F3A8nUYS-hBg|DGcA=U|OnO)ir#!#|t+dR+u$_UhtB_sYP(#YYtfGPTN77R)F zOT2higD_@7Ly>uCyU*Djb=>ZAwi8%ktr}p_zOdf9HzY{~5k~h5Djh@Fg6zWL|KUix_Wm1%rB^ zDWFyWg(-BNIL$A_ccf%|bcR6{Ltg-K@S@)d?aXq_dKKzV8vrH`b=JPPjxL^cp_cf= zPCDZw8vK#L{+^q!^M|yop8mQRZBZibO~v3n2v`>KPJfm@3Z=Z4noECGhwkOs&+k0y zhMCnQDJ=1%a@pTQ-AsNqZ|IH$1ornj_IGW|i2e${;l0nnh-WNFI^X+jVKyK2-e*05 zdqVr^3Oh)Hf5CQ<@uv2aSoXko_|4&Y!BJVo3(@zdRXhYtNoPESg(G1pnJ4$0_Uzr9?Jy3Z|@iUhP@VvUpn$Dhu^>$H~i)fDi1%~ zenT1YN?sifIHmgkwg{RZ3~{m7M=upb{}?TZZf+Xk|5LdO6o8exmD|GFZ@32em9*D; zBaCjey*}%{2s#+{I{3eA{vA3DHFZx#}lU_)b6PhS$eXs*LSv@oPr$uWfu`_v1X5>we0R58>eEDKqTLNBLv6Z5A}Q4ssda zS&IeHjYHJYWkWYV`K5!ItEH%)fKkYrU7jZ-4k7u;1 zR&asWKM}so4D9o!FF)hf^`rMjb=?+ori}hCpzJawPelKdRsZj=9^L;RKmH&4f9|wf z|67*Xe`|g@&o9|so`)TXIG2cCU&%Q17#KCh>H!T9HT1p|`0FdhTUJz{V;@y^iZyb@ zuWSE^@o}7Aa_C#O`%gG8(LE)D_n$KL`%kHmGhm|@w=bYC2g8Mv9?t@E`2UtPQum+o z52P5b>PFfgt>bsJe5n|7U03m-T(fvBEwSMv-1HXOiX z6HAtZR8hw!#6PCSC)GS(X6*Sahwc^A@|)6*>BLeeWt?KV052t(}Tv?)u zT!Rs{Z$b1|xuaC>?Ee`4X_(HUUUfizCFS9WlWvpp`Mwsl9Q$2P|Ga))9ae`Tf!#&F zne)01I_9<{tXeN5SbmQS2_`KP5-dS|NYGD*fCRQBp|8r#Qvd>kBA0}=$gd;`hMsUE z!83i_Nnq*X&hsmbe^WTIc@;4`Pd*4Ni4OYIZ0{LnY8ZQU`JJ?kio^~+A~&XMy^=Rb(W zPT)bgj%O~<@m$i$IBxuxiKnT+Tpjwl@ZYI-h5vRd{=2FfHcs>d_*6-LR=Mj`Zu=)F zo_NGXXHo4_qkSgMq(CzldguDs8on$L zBE3)4`grUeA;VRui~_%Xpk$2|Qtlh%6VZyBQ0M-1!?R`22s|C@qtag_xRlqA?eJ9y z9ee6Lk%@R%VJp|2K%Kr1a8shelit{kVZ0fR7!`^a%oqY)IhRcelrsBb2f|ZzuQq=!qC0S=u7O#u zpJFNVeC;Y*c|+`2Gis>)ymL|O8U+*FFg>}-IL%YWdBkoXV`VaA`J?YUF|G7@#2F;6 zX+@U8z%gNjSv8uhAJJrGuK2&)EsCi2^N0`IvJDzqylwr8@+a!&m2s`V4^-RRz4|e< z;m;WR*|#pFG-`38=D$aCnkU8VD@ z+{Jf`nEkwuq0i_`jy4MUm0VB$b;wQ5Zs=+aYU%5VVJ|Y=w4uq!X=78CUP)gRQ8hvej-SM`wuN4U5HzqfVu&b>} zVEqz%Nx$C_clqydw?m(?+kbw95FZOq`!F0o;HgK>AM?B;_VqVu{in%(Z|Ub9@6U5_ zAFs8=+o%7S=NsXr32PpJi#XqSH2~02`&V6fk7r(DclB1Tzj9ve(Drir`}x=k_7~eX zVQm4xMf7(H0I@|`a3rP{Y{PTuhQpm!^ZlHm2jc-NjGYQ&HH`#<87 zhQ=$153Z(E3ZI8=DG#6R9tS=f@TslApZ^Cwxs}7mSBdd?t8;ny#5?ghbw2R<3x6E= z@Nr-8+rMSh!EavjTa35OM)2E4@S??UM_Y!ytAg!4CDT#%_CSNb@lT9*nZddy1Uy;nF?e0__CLPdg8>d}MOs>QqOM{E#x2Fw!%AP-Y zD5m%=Z;Es74CmYdDwsQ?Hsn=eT$#%Ek+ zdDv{J<-leYKDE#A$HFFheE5nNpFSve{T{sVUr+z(P#!+LYB+`|3!hqN{Bgslg7U4kiBFmGt#u{vxUO70X2(15n2t|v z3jSE^W}82i8=q7Yp9<+am03^wv@dUbmR5J*^(H>Gh4{nqG3+M@Yzc<`fU5`LF&xnp zBd{#HP7_-WJmhR=vC8@6R>13w1x^1?j(fe|uvG{eDK_WM0pB ziJmk(vweIuZfDFDx0;G#`%Nrv7wqRGF<&-D@LJ}@f7o|$X}=b_l}AN+$zmPKB1PVYR=EBLDJHIO@I#N-`+JNPu@~{Zr5Mc0UE0Ajzv1!@ zzisgqhTnss;uEi7xG8xdw}=-bJcWx$EdQqz7uo(-Uc^7VVj=&T5iI1r`6dQ0b!e~O zw~(jdJjD&r5*$&X(cYp@2{R`DUL9aK@mN0`_|C-{IC`o|?owFt*2gs5`uGl+NDn7| zg&zRMn@Q3|%u0UqW)i;Bw6BDj`a+=W(r`qRT;?3Ja5Enp(r;R6wdbmf0iDn7g{x^T zDQmPj&}g$4D^!&r6l}PiG&~3m@kp#(hF&{IPR+{j-_GFWJoK*lpwpm0us%NUZ>YWk zVfHndebrykZNOT8V&GZfd;Q;^^nYP^B zXK$8htw4b^37QuPM&=Y|UZQ8}&-|q_tvW#tbGGGS29Nq{ci7rGg#-iKL9B+suUO)0 zl+do=pUe2Cp{n3KZ@%It{rtPZZl2;91g3Zx=imE)LKC$;ae}euik03hv#wiXTdKEspzq#*@V)l;A7B_h=y;~L z@@K9&y*I4&0${Bh{#Xl$)4%Pn8pu6U^v~tX7(l>t^TzOoqEk&hGkQ~21`_}3#wDfp zW8T=U;XP z?*oo3w$>Zm-^LS?o{}O|55^J(dpEr2(QvQ;UyO!VG&#A-I5qcoi)bH}nS5~ zIvt_m(!I&C=KIBb&spPp&g1{#jRHJa_&rO>d(LXIV@*s5C+7FUIQS>G#(U|W;u>rV zlcFOpTk&oQPVXn-^uDJ!47#HjT3W~RV>=tmYrMAofgJy^lcYp7X>PwXw=N!BRj@Dk z1$mDM-A05KLa+l}EHEWx=-^y_GneZJ+h7k~K&00o4#26L!xW!-P7!lDGY1J=9JD64w5nY{*xIenC$`KTXiD$%-hH@d(hr5kqA* zv6H75WQdCQQFx*0aAF(O4Svs0_Pz@j6G(yJ3ZdI%GDwn^zUV9kzjhGM6x(I&*}Hjb zb673|L^LJczM9Sg?NVa$ar+To^Kjx%D1w}D;#T~?YA_sOE%LCzW85!2i~FUNec6Fw z;HOR6#ppH4hxRF@D9$rOs1&F(q^n)yqM!;>-dt+*e9!k7mGg}+4871g3qdrynE49L;rpoBxhq0ImLt?HiXnG9h5zyCiU znC`Cgy{cEQUcFcKiUd}SUIXy=rJ}CF{ZYtUDGkiL|%`G8GMVu?V&2Z_{HdIF;n zs}R{@Q_=y2S72bw`7Jqd5qwjUJC2%!*RXq;2`AECKzsV`GE3NcTDG~qPQE1jt{3SH z!YDcpbFjFZl`IK8HhYZdZS0Y}#~jW*SU=kTX_Vm0F$B^BfP${R7dOV@d>=iHSmy4xP$W968|mr_ z;^mqZNmoxG31WN`IoycCg9z}qqu|icUBI5D&qVQ2B#2>1$u5N`m#DvjF=19cAT^M5 zH6qc>DS@OE*5G-RgUZ!4n106xq4X4OPK`2}@GxH_3vxZ>q;r=8`rngC*nJ+t42n;1 z6F`bz-#uiwvSXCzD+GIgp)$TwDIXy?vE=df$I(x!~O5s(cp(md?sAxPqHNx0An$Q(%O zg%DE~6XY;R4*CvE*~`eTlsU;?#2{?O3)M zi0FX`A5K`v?*sb%Wb{uWUhnujaGlCz-X6m)HOS>#6lM>6E3kU@M&jI{-*U8(q&q`I z0g1oj#rGR12IYje*l3XiT=)hi;fYF-gzJ!&1W!om*D?0O3Nwc?!&d%3U05E!e zf<6NwzE@-$qx3}m_^&AaUFPe9eE!a;o;jDU6$2te-`^8tGKcX=Ms0GEE<})|w&zCz zRT8%cFC>FeheKF2Bm!8D1%1n@Q0Q)k_F`xSLiI2Cvw%Mz^XCKnuoYNlU!%-Gy$HiJ z7)ZJjVK|?Li4e!^Arm-p;}7iK2lRd&DU=`d@6)HqB1H0IBbYpw>0K8xEyR=q`jVM4 ztxqyoiOMP@6@66S16V%`y3j8tM3&14Bz$a^6uhvh^+SN}G1R8d zFslr$mji2*vJnEl2T)}|ACD@X@R_w=ACAOUe<2^keFe&u%UN7~Ug->-5BwbOtm<)8 z6%w}P`M`Yo8!^wv-WO5GW5{Tf7(5?4*(fXng;~}gXZ1IxcR)M;A%9~%dl>qFv-unQ z*vKYOnyJs`dM)U0Y<+i3t>OO0UPFOwn2Eoj`A;;2w+`q7 z_PTs-g2fb##YZ5f5UZmf^cL4cl*TUDAN1es#yQXSAU@324wNTjj$DSZW$BJTA;ugK zU5#3Q`5B{CvYpU^uoWVaF_2_4QmsTP6CX=^b3-z(@Af7v8)}hU9iCYclX?81D3kd` zxSPu9xsJGJVJYVmx&zO^aAk<^XY7eIQe6m4eXTLvjqhgsrcVic<5W7Hd)6j*oqAOxY&O7keD(LDkcRnj5DNSG~rCH%CAn*9(60>$}v zyqKOZ_CdW4KgdhkaUwpe=L=J~g=j4Wq=C^O(g2b0uD{+`HdIGvb@K$M%JI{>VIx;`_QIgr!}fchu+aUO7) ze_YTFg=>UtV?Rtf{_7DJ&HunI%pHdRfsmeV5pswQ_y{kkG*Q0_R1Nq7Nv{k0&=2~g zpD_AQLGaOk#ZQPq!hUM(Uxn)KG)@=`Z#=1Dd#c#VrGJ27)W{*v7Y7WDZTU_}-_$Hq z_$KSX&SII*#jD{w(^KlzK$}ANm=@aBSc^SI5Rf7e}M&Jz(%+ss@%`z!5{K3&~;c8 zHZJ@Nyfzcq8vX?eu(*MLfxC{7rT-!S02Iq98BK;=C<) z2be&ESH!VCE*(5myO|EBME{!mRqug{W3B$-FoSFEz@uGO&kHo+!A0FP=vyu%KH_y+=Qb-s4bPL){gQ zuhf5>vEUohf0#>v_GTq*WF=X^9PTdYYKsC`u>FGgi~YJIz=R=(`F+3_YIC@<;P|na zX##0q=0zd3YTtP99U(bD6nzOv%=tAaUkX|D!**fvrCe@IL2}U^6Y%0oMM3&fNJ1zL z^h9|>_>aha2M5Oo+iQkE<7E^;Msw#r@;}Hyzy!>-41l4H%=`tcf8dZ% z{vf@LBLEh9o8l8|p0T>Et5_^e(C^_P)6!)bVcO zVBbu`z_yy8_FYd>oC^KT&#t~4C{Va^u-y*Z z_<4j|x36%uL?ijN25#>`go48k3?qQZ{%;?x{{<|>pMYB}@LZq5KO*U87Wmy7{dU9l z4*CnN7q$-)*)Uh!jk!V^TrK?4$e+*rofAUz8)~qZSb(`w2@zBYf(46&o7fqmCCBPL zFp~ZK1$jj4-`g*W(!bd#N6>eMtVb_e14i|j{uG2RvYLqgmGqX69Qp%oL-Yo4Z$jf> zsQLy9a05wocwr~LTZjG|AWH+5!rlgU7tpUA7|b7PuJ@Up{IcDZ$D}^*C8L}PEaw?7ZV*Q8paTNLBPGkf8f}X}0MRYf3bSPU81 z>55NYsLURSp{^`g1w-9M*%m{c!_!OboZhCC{DaH@q9CL!kOP;!;7@00-w<4a`y1Bj z@3)XNhAWJL_Rk!W4YnjeNG*F0fDlI~VtrSlG}Y6A-#Pq- z$7Yn#pSgROxhEnw%Vl7)88}h~VyX)0&CS4mvL0b^r=rET9IFDrmN+0*DW8CMy{G`8 z;~5&Uak8#R<+Aqkpx`7lwWAG^Tpu%pEsGvGxKvDJf-eBSRAR z;W7-Q=%sQ&#J^%k=3(sZkEP>O8_v^KVi!(xWp*nzus5NouVvW|7-6Wit{0SYHoRrc zkjvXOj5UK&ew-M}b;B@Rq#_*ui5>xTk~rl47t)8Yzk2Th4_K#P*2<(0*~Pa&`R2<2 z;6|4Z=Qk{*w&F+IH*@tsOAFHg7CqwV3V!r2c12-=RXfC@M{eNZo*ko)PQh3ubd$8s z9&Zk4=(~a>EL^cJ5;e=?<(R=I!+w_bPP3r>O!M4-0=v}o1++i1-rkOs1plxqyJG~P+pMzZ{@jv z=_hzlcx{2S5eSxjfXk4C@G9ihI~|6;;ezG{|Hp(CZ_4YJ%1jYvpiR$$m0HvYN3#ts z`V(G&O^VUHxQ#F1cc3W^>Hiz1^E?X4$ZAw7k0|Xev$WS_X~{-uP8#F9eY(a7y#y>t zXi{>YuvQJ!k@~NnXaHCMww&lYj8PYT{4T2J2o%ExcT9(M&zU6LA`Uil{BAI6puia% zO0<>|hZGQdH&%7YbHc0)AE@R3L(^wiA-HxtRw(7}EZ{PK+D}a0gNn5Tn!2A0)13YFf=A>rqDRSZ6HOZ7ki}E!0_x_(qYDyUm;No;vAZcG81K|%? zR<2Q2qxI+OSab`0ScpITn>o38@2+IAC=>JY#ppnPzJ7uN&{6!bi$d@SdyA0YN1!~~ zX1M+d@~?5S#0))AmYBj3y`0@cYHULQ-(bP7m<5N+^Xrtdd4~N5Lf--Xk!EakVgEsf zi1lD;O^QC{U?5QZsH3^q(U+z7n=I5Dm`wt%Kbu;K-WILII2bH}Oc`2_3T0zI#`K@h zsgEe@Z4Br~@xqxA1`;j|<#yZunHRns{WB9amY@eQI7}ZwYlZ(hN{to)K3V1tBq?~I zK)dx@AsJhc90P+sdM#P+2#?99%cGFU8PpemfZ)H4hNLpkEDJBQ6wcewwVI!5-KO z#2xMvCZ4z3?+Dbl<}G7{pWh>=|*)vAHC_n5?@WfkV5)O$Hkkf^T_j3*Y^{3)h* z{}8gUg$4q8(e_}8cZp)KKg)${%a)0)o$GO76_Z_pWct6q2c|*$oM~S>DDJfSLADl* zbR8uyP+3Wbpkx&BMs2m5_6Yy8M*EWluQ58|E!O1CnR)UYonYw^kR3Z@q?z2(AyZLF zhju!zR3wt)gY8MpGUaerFT+}U ziz)vdCMEQ7nNWlzHlYTU*h4dISdf0h$Z4d%Xo+jHI7WmWxbSUjV@Yb)S*m{_&Y|co97vXJ~0EO>K`5vs}#=1!G>Ag zqjAGL1lQR>apbSj*~M8JMly}d%uE)haou|Me2rD!$RK8&0gtgCItWic!eca5PcAPo zVvnx_>Q6yd)64N=#Xo3oE1uP{8HxRlc-YShuf_nitc0(t4XuQO)-(GWT4u2X7=#X% z%-;7O@G!~5v0kCYa*+NCf=I&C2t$jo>VZ#4-k`olaIsd(?1u$6Is-;_@G1)} z19Gu|?NdY(HjeUP*aYG$Wyzk~u>n-=-&`s2;M3u~TOK-jl4V&ppx%RFEHxizs28t;nqmyXM1|K|D%=8*&YvWLudxI#MQ|gK18MrzpePDM zfm(twRqnrq`jh)_vB5j%o+E6_Vn8h9J)N@jb88HFZz~gp>}|%9^Ldm>1u8b4C}mrb zQBa!`TZ~0dVRtXKCsFl)i6&kYFXc&7Kaq+tO;LW6R8Oog+#kL_t~bl4M*AAP_#XzV zC0PrLu+chqt&Kv{_w(MUFlt(6v~FP^OUrgeUJcGccrQ%b)WXX&4_Chj^q$BrZf;nF znMJQ%&o0J24!qNbhILw_#TxN|o_Z%2&rt3JlHBQJAmC^D-$>?1l86=Y2<$Hcjhse~ zo6Q`ZgE>TkAN0S!g`H~L6B1V0Rs{I$_|cz)q~vc#Sg@p|?9D>)v1YipgZ?5NnkJCFzNLA~PaXGi2_LGo){3({jt|&1JRaxkF5NW`lJT2jQ z6nuv7BhB%pO6O;7zE;5jV@SU>WuIk_>{{ z{|?^(B4P8GntYc107}_)D9$1D+iUf!*VJQv$N3Jbe5nZy-`Re;CW-*uVmT>_)9X_N zjQs99Oo31GLmU&q`i>`NpGJU~=3bV`B48bayI8_ug?)zSPqtw~0emWDw$)F;hn;{g zY8!RfCdz=AJRU3|pg+1(^a##BUJ0_J5rc&VH4$xbZo&7N2rqFB3y`9IO|O=pvA|=L#_lBf4OX5XJ$N zbr*=Q>mJN}!c?dCzeVzi>C46VB&6LC#6IUq9REoD$Xd)v7x~*E17ZV752GUAF|-v+ zAfxOqA-+=r0Q)~)IOJ1;MFx`c5aypI>kK4aXQVi@%&at!bcM{Wzw&RKtfUrJe;5@b zM}$4p*iWK@X7ssp4kAT_{%v~~b`CbQ7qCBZoN&o|3!cwZ`r1_6A1(;ED&!%xUQiu+DBgKUGH1Z6=U3Nf+I!aLi?hU~(g z3i^WD@wD(aXU(LrW@C;pGoMb8nU__G`A4NDw0sh4p_N8x2HxL#y_F~+ORdREg}VYYEMCUq z3AV*TkVj=uKE!=AI=v!4ghJrdLO*#0naT3W%gDdO_+!1pbGZ|)l%3vD$(k3=yWDMY z^<1BA_mesgU>$u&8@iY1u@wRE&$%r>2DNn>cOgVeZ=Vdrfn^@J52hJ!!rmD8=ft6Z zKq>umw&s14a6lhFW)ytPLrje;LH2xo{2daS;B~C=*wl;&? zH0bP^&L>DQ>k!{W=bR^BiROo)J8$Q}@TQ|mt8>n9{|iR{B%^=2p?^}${<+EYpW1mO z8^6arYZ3M7n*>^TMR4zIel;@iTTR#d_Hz8s`Ru?RThlKm?&TMzx5ZoiT7q0jeBl? zq0M3eE3C2SgmpV^^9(x4`QYYoSpR^((18|k&gJ|@@GrA{$uk6Z5JPz=hH{_Jnn!6^ z^ZtPf)QJ38gsWhPwppafj2!T zZyyuhrAqlklpFHn8qFoN&b~Mwj2ZCW;`<$-L@QwtOE@2#BXH#4tnR-ZEFt+km_7#X z7Tx{#Eq??69{-E({(Ep9{P`rFr*?`F!FGO-tk*KkUCKu>$E#vo7d9RgAe)#%DBG|? zmG^se7x#N$;TG)YUwDs2*dQ||M}in`^{tQWA1Hb9}U0NoDd73h=50_xGWTsZ%mR7BdiQJ?B(k{$Dzp@UBnVX zAWT22$y))>avvSFzIx}~hJIFD7kEif)-eTK*ng5uk;e?9ttM1sP+r3V66ek84E?Go zuNBI}`S(jGAO-Y)E`nTk9Ym~9=CJmLKd(7x9nEd{^GZ>@aIfwy$WpyU*$!`RH-}e+ z5*N3U)6X7a5+pB@Tkat~4k~6(|b(Ar`4z-j9SSHhJmrcf9z+9AY02<*Gp1Jl8Z>qzo z#Ai_qrB6SOo(1o)8vH9lL$gK6a`w4J_KPNu=0e^9d3A(RZJ7#rvOpb8;m}#}=4E z1RHigfSA&74}v#oXCkLC({YKMrh|;>L(Y%qlPUI{#y*oRqRqpnuMh4-N0Cm>HTex| zW06QM8wmtF7U`+{Wn{NZUlH(KOZZ46=c*yCvrtDxWIc5151{rGvIcqn<0Ha>`@gyJ zA@*p9g#O5t59^ME(g%6Ix!#PVw@aMf>*4a_7V!MxU^HU=Q#8z!ua|(KQ@)N9^j0gr zI$g@v_x3q~b_Bg0xI@s}-eVE;Cgf`_f9zcUklqqOyjcI-bWVB;!G}qwD99Ya{_+#S z94`fPybR0{>Qc-4ao9<@Is^;7m5fn1_Ks_JN`_{T1%fdO2ZsrdinNZ@TyjG2L>GUs zZX{0yV>GzqgdhW)49MRxN-7BBetSs`h71(R{Wjb#xZl9`KsE~ZdlEjz(S#3NZ{bRk z$K5Am_L4}0d{OYYn`F!lmOO^X!YmmR6BZ+QX=fSJ0NuX0>BQi0g8MZ?T+>|Y_4ER$ zMjYvapgy>p9XJXzi91&>MP6(A%7zCcTy7W-8FzRm~-T1K1Ed9-aWrl()}q zCk4IDxJ}TT>j>zL!k@|C+K|5m>8%BNEdzz+>wdC_v-7tQy-E2e8hkp=txNvbx?B_9## zDEHA^258QEoz3@R#bB&E>ohctm2>_tZ`>NsdpN>G(zD&TMW++z75*O-y=%bQI|9}} zuIRuW$2Sd|B=q)teg~?|@dKeDBJGVd{zLz{QgETAU;Xd=>e1cpA@^D%=(fd8V zhe8EY@{~i0^p&M?bH>4F&m=nR2g%WG1Sb77~z=qMj3ONr8Gli z?ki&wEin{i1)J}HxTdlBVY5+nBR2oYPY4YOvZc$dY(6xEgg#gtL^C*-xS)pW*b!JU z#I3j)O(B;7M^$%q;6~6S7P)iS*)_4Lz}IGIbdqiwYmuY+;1UZft8(2U*3N}v#7g;Q z%St(4tdxga*1*esA;=B+sk1-bytos0%|f{7)6E1dP#5A1k*jH!r6iN1giwzdf0p%~ zcNnS|nW1`b&Q!fK{^alu1Iri*8W)Q@wvaccw4T(A#g(zRlR9wkVS~nv#hrtTySTna zXs)ri8y%Ekg!m!^8Oy3}vXQ(XDAW|8kZB?`%Bn8rFxrdjAqdEk1b-6SML_VA+C(S# z58+E3jp;`!bFpWT=<_nhO<{qH14<%tC_Ex#T#N~>-Gsz5LB`ye9U4A{#4}XJ3}qf; z_yh_5Y8ls?adf+A$UI_IcLCy>HW>QhbW`KOaQ^{>h6Y2URb7ZEiU&1^_0?2jN?QAB zw9!0)x~PL>z8OzPC+8j{UV)%7M<(LFim*YFD+dXzZ%`-YSO&>;VvuB52FV-yLl_x@ zB-XE-eJD(^q&J5G?JLmRDhq791jU;W-vwGBPkZq6gx|?pJ+ZK&8mz#hVdPf_cEkRJ zi2(0s^C!K4)ELw>hWnGAI*Qa7H(B?C{r+fB+z+5QJ*~eW#7AU;8ccYkk3=(x9*6j* z5klq@(FkGUzEHD?X23qP+b!x~>-~CXzbthO1t<76Jm->>PGy7Z$~1EP|A(U6{JkMO zB25P23-ofrN<+%Imd}%{Wcl!*a9IC<=+?#pj!9i1S`58~>HmWIOUOFo(xJahg#I$# zl-H;)f%VwDN&40s1tYuvO{z3=o;-eveCs_(j3Czbh!ZFV(*P^JU8v5q;@|pD{3sMh1i2}|40P=TQ4)sMpYr&h@gL16iNT6 zDw6)Q1pPlG6V$*hLj?UJzKQfd3ve`&3MTFe(M?qPH}}iXo{23#Jaec4 zI{uGG#lP+>_*>Smu!wn+KKc!-ilFK+$}-l@snwu_v&x2V^GxhpWQb8ph+_%oQ}Dq` z7UHH``=Jr7+_bR;EY`3_2GyK?hdGI#<5JYuA?lvh0(J|h(DPx6+lYe}utqT4{YPNf z0T`lN!1i$RI-jPN{!pS@z}{tcN?7Nb37*~q&T3j3AIJ`G=l`7r?BMsP-w?tKktK=+ ztiqDYoJy?xH|#!C@~1@bC(IgR)}yc@Y|meCLNc1F(SD1)!^QaA{X>-T`P!ev`1Bw@ zhVZ)gz@OOV27j640ojq!)g4#@4^6%GGPfqyCTBT46%vERhPpJ&S0du43hg(iP8nn=GL@lD0QC@TIt z{{a4SzYVnE!=MQd@BdAl=gx{hE`T8Z-$%ngL*kG8NOI=Bz2W%F*n4GcUAsp3BfhEl z&xnfuj@5e^9DJkfZ+#e3IA2l~AGE!I604fL4Cpj!m& zu=RuH9V$jH{Hq5??jTwVsc{fkgv(FYNF=&_*GPWa*Hd)c8cb`z@{7x5$Am6}UxE0h z$xnw1qal~NJ)&PC*AI>5r>Oj?4acV;l{Xrnd9V`#3;WI}^!Zy4foP^oG7w$^L}MBJ zX_t)sB3%?vF;p(2l7%9W`@xnVzKQhdb46>1j@u&I;au_)G)CB*jxE5UUaqA41!qE0 z<)^$M68|01@b510pNITtqQ52{3JB(D;xA*r=qB+W(g=UVHx>WsQSsk;HvG@GK7M`| zat61Xh12&9*rNihRCt_=SRcem#CBaJ5*)}g*T>kg1F`4_ecv@rrSEo8@ygp0fmbAb zhxm_zJAdPk$Hcg%M~YhiVCNdb@mWQ}=GNtL3(hN6fv#)~5EI%ErF~;a5P#^ zwvR+Ll3v32Jvkk&_NcbvHn{w7aamg$;rDAdfnPQ<1HS_qk@$U!_@?0( z6BWPSnS!a@%cF%|GVaE2qwu@76474B4@Bpp`@;7BUL~5L zvy82cHRTa=y|@nXP2_hc{~E2IyKjtW2b15M{GfQ21MaAVhYcvj(ZRumR~@I!wgB8J zmP8s4RzQLbE;~+;*;$6>|8{@v^bH~4Bb8<0uztdBI^R-siWozN4%ZO@>mN{-?Wzrd zb8hyK7vYZ<`~3zvVTf>gZ-$NY4(vG^fIUYwm|VHvuTLGs9*1`#?VCNuq1B;6`_CmL ziB7*`x`x)Fy9i9!3rnHsk)XbesuzxOZFYzzKMO;jTP!s34oCCqAS!#n(^mXs6TDx=}WH;CmdH36zU_^ zhkC`}>E~3aCtK2+y$E}BnEZz$W?ne7jj}#z!+DmgCJc(k@*nJi80_{9QTV}cSBeq; zBW55Z>G^87{%n_wT`gmC<4k^FuFsYrzKQ&R7dtfO`yJPXS}SaQYVrfv6^e`6H#1p6 zxK4UDu|Jj+7SGaEFm1$d7R-mZJvvLP1=fJqy+bD0`lB2;A^TG~;+rN zr_05D3p@5(fN6;R7ILF;!vfdvIHqFA)$ebi& z)-r~j8QO1gy0ger!5G#W+HbL2#;m>!lZ#vznOl@=WXy}qBPC$5aaioP_&4I3*0Wpx zf?^s`Z0l7B#biW2A$qpRvaK$pzzpM$9h((4T09M;#Cbju8@IvFeEEx1tKK$*&$aBL6lI_Egm^f%6s=cB{F!cBy) zlMuneXU#jA+mLV0x*jjK%5Kd$wOFaRybjQZroL#Fql<8RQb<>LmVHT2`LQ+pv1r+! z=B#@@6g@h!=S0gsjM>kJ;|Dl79h3|%=PYBv@&9Ib`P<7;tHEcC;Zu38jUNS;^yYX9 zv7;#RL1&_Qkod2NhJUia zzeFaPyE9y#>M3Jewig8?W}5O8r!Rp&;+u*;JU2(dzv^uGpHH4TMoG-j)T%h+Vx8V! zy;i{e((*?9aLgqF?VcBj1bs6kVu{AQ{Da;H@lE50citWiujeZx@QReD!q#JAKLbRl z!C8^?-O++&Bl`ZVr@-RlWl{R~zKaE-KS8boeRsYF{mYru&_|Duu^VJ;#wyC-wQklf<4tTK@FF8 zVf)bv5#KcY{xLopew&w^2S1CvNOwj`*}p+Lk=k!JrGj7|o@E}q!aCc&K*npCiIlQB zlxry5h5Ifj+?DcoSXuB?t5U|hsJInTDSuYP1eJV=7Chvv*?GjE;X^3wcJ>57Ca5S3d%D#%gy2;}up7MgR zoQvf5|CV;ecb7E6?=S5Hep@ijf*%aK+Qg57w2*%h-!%Ll92*V4H@`d|einVa+`ooJ zF%H^C$TRJU<=Nz!<8p4ifE9?LTiD!*VPF9_Sx{)PxG zOD#t8gdNrENpa;YI)$#n2AcNVchPkUJ9)Ol+b0>RY5}CS;T;+C z55`dR3~3v@GG-fnaAGkAB&i{)V;rBvYf!`jPAhe$6Kqfyc zM10fm`^Ttg_-$Tr9{jBOjh7C?iX-(K-W7jDzY(oH#&KxjV!&wnjc=|L?XhxUqxLB0 z0TOQ?AEtTm_Zbytf0HcP9)Cf6)7s;2H$`iY<)5FYJ;M5%l6s^)`AJHQLEA$3{OpGe z1n~7Q8sYa=Yk}W!ncxy!GZj8Rmm|Ju_ucn}*+p{Al>ao)5p!{1kRxb6PykYhwSuJo89s_PG>ayp8x24 z_!;tWA}-(60v8kxg-h$i;FZwUiz2RYMRDxeqX2l&XCoGIKj{C(I!g)+y0CqR_G%<@c4O!1x03 z3hy(4q)|xCB|?V>(Ln!w1a64LdQ`MelH5YThSA603tt9=28{v$&@PuEClZ&jIpzHk z!e1{oA9yfSMxy6dI@0UaO1-(d__^Xznj0Rz ztF!!~qci6V?WHqUwk$k=h+2IKy4AlAUf9Kb61{}GZ}>G!c4VJ$ zb<#WzxYwOppQXmE)20USSg%dpg3B(G*R--ZW6n4^dk2kVaN7hQ!niM0_*ecb_O>+W zvw)D({R{m4g7_$-(udQj2hc!sA2$4F0zq71u*#)MMW5#m>@ppO+qiJUTz0(+4!A}c zAZ*d5Rs)1ub?SyJ;S3)%Ht!qs77B3099G>oNVmS0y~^C5S30PrQhv{CV7#Spm$`0w zxVy{<|CA9ezWCqo%fD!?JxjFqAhq(RSk3*d!+RH7I9brF|B{eWLhP0ctbot;z;rf! zeKXfVG`+451}OgBX4CT)VPMXduXA+;PMAMqq3P^hd4o50qUs$`IounIiwHO%+UEw6 zURcd8*za`DNDL=oannim&lr+u@@qwte9}==EK=u&ctJKQf*izJ9GkfLaswll;(sxLHP`yI~YK{#O`Si3& z$^)IMj&PVikhEGp6E@0c+zvd&#e%B4QmyoXb)Ae+OE;h)Zq8u7r;L2h8u?x^^8FLf zA(<8MrLb~$GnU-rBN>yklFvNlfw=X25r4t^Du!fk4D&yGbg1&cts86kn7FZykNY;( z^U-$W(P7F1y<7A5vDS%42O~l26n>3voiS;Ma_HzJyHarcSNtA3j_-nx=mrtp!07Kp^d>}aLCm3jlazvEzfMw)9b>wEBM`m@|JO0=1_tdBS@-buFk^9L z@#f`PX;r*da;g~pu9Vvax38F_Jn-WrW%}l8Cn<;UawzTP!))k+?^rsjIrcqbkES5| zcSyR&Op2F7X>(=L&1TYX5qpG5HzVn8GbvsU9YBd|%w%g3bC}5h@&k2dvO400uY%=f zx)q43XS(HTNfjwU%U-FJKMe2u?#hzg0odly*}2n`WGN5$@H~S5r+t17gfv|46sYvI zP-AfUQbh)+Fmod&>m5I!w}bt86dhJui(gl5-BI+pqqZI&skKM1R~{J9j2$_;St1{| zHcR0nuNjEy(C;9Rf&;(e_ZSiToeg{%;BWp7L5J8u1v^Ch??CKv#saR*N7*^s8M#SB zZsMztv4DK@Pt3ZUK`TYB!usHtgnT&fK8JoSdX8GdHP= z-~8g!doKUx;r(hR+jOJIv_)MwVok-qq9<;tb!66)3%hGHcP-0XuP%OkO<-D=h4Dij znWvCrmB_J1UFd2UoI1Cz&ohq9I^@vYm5$6BEpvkwb5e_0#jGpTMf*$ob#)Brc9SC$ zJyTHe3t?EHF8uOu%WU7wsr`$ZsRto+#H_*ujM+C$&8*ZGodl|XyXVgrYs!C(@DzqG z9O>VDRnCW>R5_IYR%;El>f+DFWv+Z<=Bn+E%#G^8qUjTVTJb??Z-F|n*rH}utBW`J zm#rw7A26#8S)rFfUzkbcdOU6EK zB3G+rR%kINw3vEz@vwjVHt)p34Uaf7e^M9LX099ZO}}|B2vqi{nN^OMD%D*p@u&jy z*hj!GK#%a1!D-y;9a-#ehx{q-56~8wJ*~NqIFTQ|oE@HF@#><5XYR|s^35BTI5M}Z z3m=Oq5#8^=WdrQw4QL%l%mz&AnBH#2O=6TL_vcQ|5>s+pV6XcJJv zWOeboryd&g<7>SKISAv)@4l?5X*05u0V6YhH*Ul3lcmYkW-DdUN9@>Ta? zOtW$HrklAFXZ4@jVdbX|&znNyCwxF@fFn;;}0Hizef%b#I! zp0dkd!gGW-wi~*2M6dh$Uo^Z|UjGhS!#>e0N1QR}^-a7Y$?4vu238fm>Tm9(e+pOM zdRT?}o=_JJGFpe%2`}tqw1ViIAcY6CWYoRHM@3J8>IR8V@4F#*Q> zT7=xdkiy4Q`U4Pmmg#pPDf$RYgoSC}Xx$#~viB>s;XZm#-6UBHWaHBpsxiwfd3p+{ zu&i*Tqa%0rUa<9vT^$A+*~pHN=M?ggl+`I%@c?j)Id|OJ14J!Y_x`&9<`k48Qk=UW zbWYNf%-%@(Ec~bR&#A0v1-ooJm=vI_#Wfd&xV>c-E<)^zZb{hJ3QZe>ju@7VryZJ; zVex!{3Vv83UlQ?x6^zW)&E~oaxwh^Vx$G&3%VHvIP#e~bFWvBx!IuoY$4r54eX>+hmz-iji#s;)pvx`Xu$O!>@ zDMzl&H2|P?mzhgMtYG;VfK0h)(`NU@(A4Z8f-erk%j1onxXZ8t%vj{$shw1pqCqC{K&C!hGNH9q;oCr6uEVm#huiF@}*tVOJ6HU}_^ z5ChpWo9Xz;CyL_3GlTUnpWPI|8&lEn461(ADmiWtViM5FJ%+50M@QFN3M>P4w zXNK{~Cq8reFiKSME=zpPC{e_EW{)-U@QFN3#}fI(XTI^tCq5_eVU#!-@3O?kG1s~qHma>RB;?py4rA#!3Pb8`}KKaDwHsg~|eAXGC zeBx6#KKaCFz46H>K2I2*eB#pvJ`LdJ@QKfO}GuO ziO&q4Z4i*2yOxJ+|Tj!$6JrN-KDu>63~?V8Z{1z_?e$BjHs%D1Ok}Bd!K< zpUJGS-vrmTW5(z&V^<59IlL^+%!Lj*AMyzfOszr&VNVq<%XIy@e*;$U%n3-*7b&b! zMIvfRu>iNvU3H;Y=nM2)WbAwy8)wPO*a3(|k;ieSikj1!DlE^Shdjx+6q&OEIRVgj zBFQh|Nqz^)ns>>3wve~aawG|l|6asnGqbnPc&uZ?BP(R)I+pK_DELjpq0(moF1Y%1 zQ8$~-;r+LJSjYb}b_NBAI>oE)yt;!#`zqF^;U+TSsJngz3CXY_f?< zw?($%BkvK6xndAO@p!f7c~Xq8mjEFw1yW>brp44k9fn3j3F(k{a-JuVdXuu*!`_5ALP7CGb8km?Y<-iF zaq&MuW$dvzd9zjr4n%LxZ8F;~98X8KAMr4T0O((z&upGfi*`v_C_~C&J8qG(P)1`} z2#V4z5b=djrNwN~V%Dk6J3WEyTKX=6laU#~eNf2$<@$zEKfd+q@)Us>y*E$EOBDrb z?#)`|L6*=`i`lHjEH_f9P^uBcUrzk{^O-;rpo7PEq`oQhO8)a2f{)jNr0K17gQ z2qyQz^D|Z_4Suz9U+YiD6esqc{MC7O;ti$QcUC12H@4v3?6$;(z|d zZ>;bA;YB#yShyo>W3Vj1E96Q|AW)@EsgiZTSU?+P(mS%A-Qtn63$!EZ*_~MtKzCu~ zdy}4y%E)g3&a(h#2?z`94QEqM>2pC#yotFtx{maT0^blNVGp0`-UUbx{*$2z!Ypg-SnC9mUG>OyN84#uWYug)gL^UR4*Y!ndAU-p z#u$`&k!l;d!qD_nei!;=ZnDId;M3*DmGbQ@&l7j+F5D}Ds~Yb`D=X-dB{o~UEpsCp zxEWdiBW@1b+2&p`B=fkxy=8r+#Z+shXHuq*Uz~z?NBWWB-rl`&ed-4{qut6YX8oXl zf;SIt!HacmDLv7~wE>Y!5#%4kHijQ!o5;C{RD#+ZGG9?A7^hMSGksIgugKv=FzYG2 z+;=lV^xN=Vn$@)sGiu!5zi&{- z+AE>MC+PKFj?@g9Qq7^32b3}xS!{Oq8uzyvdEe<=Wx)!2 z%0adCOpI2#)#h!Ro2M*Dn7FK!tvKiBt*vY^g*TMue21foSd=GWY(V)?%`aE)JokxK z+ujQVF1IN!ROGq$6d#F+uPW?>(f-g5G1`?fxYYq)%@0sRk~9IK_R8HC*h^Pk;dHOC zS7StiEA0a39^zi9x5HcuTQ5en@;r*$U3@quzOry+an3y^6n~abEN7vmIk^%Fd#fMp z4K;+Ku$$oKyTtJdedA5!D~0Xt)kADC{sb@e#+Yqtcdxa(EA+*j)6fuotK;@>Lvp5tmt$r6YYD195eOM$%hs{F@*uhrNdEqhqAk*Ur(zB2f(FHQPJBss- z$B)p@N&6(O%XNQ4;(fkC#ia6lWqf7s=h#o54@$7ZzV1G*xqs7(ZUoal5y(|uSmBy5 zqzt593Sd?5s0nb1t2S(h@Us>)qh?p-D$iA`ak-@C>?-Biirkd?0WpOWRQEd4!}KCY zI-GT4ppqWyB|S_>e?qh<8ei{-nLgQno8Aw#d9w5l`QY*1oGZ|laOmrB??GMY&WSkU zLlDXz7wZvLPoLX^QFJ{cMfpl2{tXkS;v~_smu7`Tl-#4>jnSG%R^CY5dwiMg6G=4$?=V!5P+Qs6<)(nA( zxCg*y%e6U_>nj{?m?dh}>=O_5)x5a@M@)?xSg(Ov=mO#Mr)G{W z8==$G+#9q?U#u3hL0hUAf6gu^wXb4~KUh`PAVt;)Z|@dbV4Vg-_ly()@iwgs_|#6< zpOgi?s+&U^aAwy()Yr!~3`VX2uTtjaSaH`2n6>mR$WgeCyS|mo<06YPdkYBI;Xa~n z_{q^_2bAnu`X+~a2jJ5x{mq*okH+m(2i&DJH4z@XhEFiLq2y3uzpe!$9&h^@*3AEtzL*vsQ^A9w$x zxwq+GaDO9LMW1jy!GhQ7Fm{(f6i89ZAdEwf(;AMez#f6E zNMw&)AU{>B>1R|=!qTrWs=YS`hI>0^s{t^I4PaV@mvhK>`Np4}S>b<>*a;BJZxaKu z&VM_ZX)DSNg0i;3O4V@K-@=WThQliRp&mx1UTSuYs~u2!Ze1%Ikh$+P)eH5`?B86S zoaw&_b$Y@K#9@Dj!@VCVhRYOEEH(yGXoVo<<9zqGSY^6mIRy%a2DS#~Ruy0MDYzQ$ zCIyR)^L=TOwYu0OYqd)i2{0W7O_QuOca;WuuGE{UU1}XMwUjDBFC_5ACRsDVLX)gP zLr9@#m9286IlR65%0X9pqS>^rmce#saIoF3dfWDe$txaX0I8;5CWof8OSP7M1{_40 z=K&4)^2tp@RA)Ey!}`LeG{*2Cyh~!tv5etReD`4d)keHEdts$X!D{+?Kc=7{IUAtN zU5zmTx7QQEJ$GYU6lduh)a**-xhj+2SAyTC)DA#9mkVk>0;62zjhMlYXdWo$#r&^f z{ulH2ab+&%K`Q++eV;RV)S?P+Q!$1cc3|;a?^G)7MOu123j_ajWLIGRa4H|$WqCz+ z*K08kP6k{`Ik=$Bw-rA~i~8#|H*)s3V_v{p0qA0;9rgNiMKnr`j8^7g;9Wc=6c4y)X3- zQPVSxG_in9&(lPjo&e$q&W1vtwiyl{Py^PQhru0Q!58$4?o*gPA+>-xT+tE|E?1Yh zvE7)BFu!pdl(2tWh7F_v4x0*gJ#P(;`|m=iR4|=r*c2z3Bd3&$C2s`XItAU%n&k5$ zi+hWOS9URZWjNKQ1gWyK$tlCgvMxl4>%m)Lke4H4F3vmJ$~J;~dHdXiEn<*QDPSyl z2~FaNX;3{+KEsal&Mn5nn7>avemmvQC5$Po_uq(SM$e*&+MxjE{zBxYgdz+;i{`M1 z<_S-|h4Q_^L}Xb%Qy#d0<$WQ`bGR!Z5M-8tS2Muj>G98%gp0kI2k!OSFwsvl^zkY$ z|6XqQv`sBN*`~0g-MF44l=MN7wD5cX@Y0hPV+DY#<>QqXz{3i!gseCW#j@vRdU13} zA0!LEjD-TBop4RTKF6GJ1Rb6k#|{rFS)_ediXLJECU4S)k~Kb|B=Gf zU*m^zi_JeOY`>W}>YBb}Pa-v*MmcY@oKkct+Ur5iBUoUhsEa~& zZ0L5kG7xKRTSxn ztmDJIk`w=N>>bF1nzcV}!c&!z4qPbHA9pAz^WfDJJB^pA{c*RbQq~n;n)^Gga&Kp6 z4E7zzdB16mW%6A7La61MOe~)Alpz&RaM^Mf<3IZJz#`1(Ha&w~0y4P1I__5Fh|wGJ zjFnhA4vk?1T#Mox=Q9>$N4QF&5cW3kRoyGlT*yJ$4jhu)l7INl@l6MN7i&jL`) zUY_NxWFJB0ER0zCxWgDxVYx5%U&7RsjOQ_%|M3uq@5wBHxCoJvAJ%S{^HZ9qGUPY#3p-h&Q&N$zkW6XOLHz` zsfF*C=J>FVw7D`7v{k&V!`ttb2rKf65zeVE?)Mrn@&0l95w6U|HtB%>9hCPDGU!L1 z6y?3b%!SMR^Q699$O}*($iurh>U1Se`e{6pfW_EfOLLA2q-J1#*n>9&&dLL$*n^X% zxbZM^=QAazZ5RoztHA@7%mVykIy)k)Mwz)_nC`$5&T{&j_`sm5^~Ze~gA5uxdjPP% zEfxfXZtN`@W}D?)DX+&slBsNq>j=B2(;Wr~mA)dNCdL=f=an3Ux$6I456{Q)8GQFc zLRgyfl>B;uUtv96FJNfg(^v*i)j$7&JEvTCsot+r+0CkZ_mTkGfwq-P2jPIhawO2_ z$y5V?YWHe%q$jQuALSKj@*fwVag`zUXp%!;idM4+wuFk?g)e;;@}mXW8a%d&q~Cvy z);m##;L@C0yhFVNC*1-6c5{EbdA`vbcQrJcss|%*r)xS@Z>6W3O}m2zbJ8u$upnr@ zFbWeBhAjg%mdq7t9k7JM=Ggimoc@)k? zfhslos2y^PQfn&EwgFDF zHI?G6q1FMtT&X{o{Ge7<21BIEOU0(notoD!0@0ttPB5?zFVN`crEaq?%@yrjL9T?7Hw@{F zbG2dtwf<(*um;;g&EBp&N$U;-yx@LxoKD(GlDI@wzFwx5)(>JQC;JM4o)~`%2`j>s zvbzxE@OFn7La3q50aFH2ZLx9Jk$Qq(+srS0NakJ#mRY4e#F!xjYI8>_rXF7l2T(eJ zHM^R9SSh^#WeO8^5FV#@8aVGNNBRb5_Bu@&y55PSH)_oa(cGmc2hC{1DWsFSX`kBg zt)u)`rF=D}FD+&@?#hmLX0M*M#NRgaXGFOCzK<9qP4n(bZPR}HVj`nKC)Thvn3Zw3w{uPwFZ5S7ME#e)FWYGw*R6K z{WA{(Qw69E8zS-xZOCdaxX0KEk7%X8#VTd*V&rL_+t7_WU6-2utOb^{TgykIk$g`g zh3IKBbRa_uIAT4`SwjfEa$PC!hu+ZK%d}R0j++jJKlwf)%$xT6uW~A1Z{(0FJz8N; zXQ$ZhXR7ibuWZ`yaBn9G&UOQ|ET#R{!rlHy1X38pO4(6r%_Q+U zl&>~8`j5s)nEgFN(F7}Hk^VHG13lR{tS>Kp1M53eiMpInBFY^97UdjPyHplpALwDV zRVDk;X)FAJV;x(y{cVS2uJT_fMt;m{upFxEKhoTZ_Tt?!d0|`8q0b0gk0opF)!26c z-8-pzg2VGzYQ82r&|clrX0MLnZI&&#qk;!@TQ~)OkDCuht$Jwt!2v<2VZdXt4`HlU z@*7pfP|slhbBrz5raXt0y|eshtS#eL7TztkIYGzfaBqZ?z=>0M7 zr+cfz{VR?tI^74I?(g*~6zg>Ro$h^3_c6`=3#!2WODs8@?o%3+br`TIV9tpoZW6*w zq%X}m4b=fA!%Ojjipy`s6I09gBD5TrOaZBuF$RuW$?uR|ZOUx8Rky*g(+{u;m|Pur zm}b2JCe0-{bRlTG<}zj5Ahy7f~CKm)a6~QwaZ= z8^vNke;m&HFbv485|uJHa--B1b7FkOcm*#Q|Q*isVOw(Lz5r623NCs1Q+i`pTA3v~}>%b?M# zk^R!s)xihU2GE{HBCaGqJ?1{5?ZCrX&i)^IzHyLYPlH0Q<|)zceCgMV_kaljDq zq`kyYp;;)D+G89#5+y6;IH=F#i_o~PcXiV|EeL7~AT8gRtGryDeF|!p+_Ei&-x19D z1k?43f4y4zI}YM~i*D~T2@v`7&Rg+PPh`dKp-)&b=vFCvg&(4FrED(V4FFyu0MA$D z#vdu%OaNXI06gojiIiugy;+#-?8sn`uM$UotsN}(TCG6u=ea9N>t>beF=Dx@3|4Plag#No|y)ovJE3r zE1gMw!debtOljzv{c6d6Y&qS!(=#GV05u4+ zIy}Ok%vEN0r7%z(m&Uu8yQ>-``Oq6#m#jrM99zCB>DDPb$!l zXz6Cj9er=3cK|Gn9HDTio)8RPDok|{i4tD?7sw(L(>={}XQ=L)b|t=OrNbAjbV=gH zu+kwW7vk3SD;?=zArR_dr>mZRo$9p*Z~|EktW(P?3t_Q_k!2k=5>XlsT2r8xm(~=# z(3-LZY-R&i&(6=$>|w*!ciA2QDfexP8Ni0k{jyD`C1S?hv`1~&hu>1N{v_x# z*IrsT2nWs4FDG(mJQT{#u9?xnC}(#30zMlgVNdZfxfWRF%-&J>qa%GM zny2|R*k-laSl4WH&d!fVCg<$2i6Ub`GGq{EmtD>-TUZ2)>-H2@m;&kRx58BvG{Jm; zd8OKA1Eq#|Kn60Te1aVsWh<33IPwelx?x1vk5|ShWh?o4DL#dWuaa)U+D5D&v`uw5 zk;kT~gK_{CJojPQAmDO{fI_6Aeq@)}li0wCy-P&@Oz!kJ931qc4Sqoz%tRa1Yo&E9 zUCC%$Am*5jQ`bbi(wV)o@E1q=I;2)h11+Zwf{-ygi$6v2;uk(a@t!PxQ^apK@td&} zeQZM%j;yJ<4v>3k^@&30k5-w~2%eyn6{FwlwJz;^Gw?!wXRObWmwpx+D^UJ7N}2HG zx1d3>{N_3}Lwv@jmgemK5E6?k7gEZ4@pcoY=jET0aQEn)9|caOIqMccKk2#<>+KbI zQ$2mE@o@hTsO4fB1sRL!XOJHT6#d;oG99dta~@}jg&&sYI7HD@&h!&+@8fOkM~E!? zTSz(cQdS!(XY2@9=01d>=r08`n%?|IHMxaXU#B}oDEjEo~-bMg%!fEE?FU7$O^Y|ambk`^SD@?W83%5^j}DE z4(>l~bYn6>Vm?QWb+`*Ky^Kw!#FnDYR^ur;xYd-rIg`8Mwf!75)$PMhsX1y|<|@Q@ z!>_kJ%w|=&YUPiy@K^vIS)FSd+T8ij@D*ffr3WgU=?ydci7kjoDp!el*fY3kzuEx3 z#bLh4RlZgl$i=GrFhNMh61FoKeecyA7U-qpt{ycl(2oHjUs6Yxkp4Mn4D;o5SiO?I z`xp%09lJVE>5g|_;J-4IteKgtJ(7KHNoM~n#*ZU)frPrxT7zxv&BMmx(&gQ(VqtJO zW;qX$kNKNBo*Fc4Oa}GD+iQl9d@y4RnGh>gwd6;92j+}UZBAjDE^?Yf-;U09|A4U@ zt6%UvmuAZsQXYi|6s3%!2|J{@J$^k2%#gvsx9o!M?Td)JeN4XI3k-qs8wPv^$gwr1 zkN4ieDD);ReZQHl__5UHAgLj>7!WfUEH)!weh`}H3jf_)nC7Y8PX#F6QqrI%h`t%R z0M=*Dk2YIHK)4%Mu1DLfQ@cPpmT(3m32O-tVc$q15*6qC`nFjETrLI#HUJHF)S#>! zTu+CMKgbr#+-r^YYf;mjxC!CwMKptbDL>1P=PBBmqHBh@IYDmuFM1dE+Lo_U%2GhP zTK4*B7%))yY$35@YZeXTjdX0nHxb7`JPe|F?lU^v_OjhM1|Tj19SGPP#WpV*rm0Dt z29&^)powekLxX?K9`e14pCOq)`<}xSX|JiJ%?rz!%YyN?7SiF zlcVzWN3dT*c3j~Iv09OZ%MQq$)(;+UUi<(Y?eb#OB31upS#(i3emg)fsYX-PeFY=Xheh}Kd{*Kx|+jvpzHg!Kn3S+AwSXap(vd7-~I zv?KQFX6E9$rCeN3Ol^t9_5We-&Euo0?#BO2_8@qp0>%vojheXBL_wKCbOw@eFU$aL zfIC%-OI;9Vh;@PBWF)uKsaUnz&Dz?gpPUPbgpX4I;LtbrcvDGuE%#bmV# zC44(CR)lc#=aYu&&iVPq{3}(x7b8-O)clSGtF1caM4e6@-#v?aBib1mMizx73EGVe0~3>n-@LZAR18 z@(I^l@LRt^;=&1A2p94+xvbWOUcci6yDj=jaddB~@o3c5sc@vWz)L8x4o*CmT0egj zaf0L&cle($9SKwd!Cm0m{zRclifg;e>)OM>J^R&6w)q?|7dIL6 zzr(0mp=E)OgmQ$f1G8;>Y2f|%1C(R;G{4rga`58+{CaFyEXZy^LU~#mc>k6B3H9zCR{qwq`sZke{ z_Ei~rD6-a`p?{%IqyOxMTcH~LL87`3e^K+>`n3Op-tCX4+8@tqe|pPU_W7Q!Hb@*< zz+qXyJdF@ui_?Ev{1Jw~t_jVKKDm0kX{dtu?LZj|uN2nJ>E$4GcW^wJH3uLSjrpRH z)3nilT(D-}Z^5!4;*k)D9e=Q9i%NL7B~ie8bqkK?^W4sN-OV?b7s9105LO+OV9#N# zj%S1*1?rlV)4I^hg_$oyT&iwO$jvE}Zpy(VXS=YK#3V}uf6AYzCNUn}Wg6vgIz?^#uR_AEhb)n$vXgIx|Gsci3AWyV6TPAesO0NyQR zL-%GBK+bZ4>&zqIoE$wuILI#d!fY`{@00o}q&{$!yU#+HbL?OafwPqRyFz0j_a(Z0 zleobK{!y9%z5;<}?=eCg<(p1@pJac}89)sg!m=GxEq}lZ#=~&2@R;~w2H|FG3_cMCNlOt7k|&fpkxA>OJKZT!3rk&emc3E+ zSND?(D6@5qkO)o_2riQYK7CRcR*V@I6yS_lT*yYrDTS(VbG5dE>c0cZC)fse;V+*M zGbq{xQZsyue40QqH5WW4h|VWC%Ca}chLFs+1&NvTHC#ZiN_DR)OzKn9j{EE_K6^uY zTTT=^7-ea7|H#^Bc`@Ny_qnsrX;lPG?XI;a`7 z*J3}TjkJ4}tQQV?dt=Xaj{FNga{OFjCd&xF7Q^ouj{;;bjUP`s1;;(km5!3YS=Y-9 z?TJqmd@NEkUL_;T#DiKlGZ#Bt6w+gO|91_nyAXN$Ri6#7tbP&=bF|0b;NIzD$t|&l?)wcVXF+#uJ6hK_6(33 z6+GyrP_V6!X>yUBLQb;3nNK z12;NpMUFiSb!!nL4^^YK79OOvCibMm?*U=MAJeATM_{}0qbMg%mQc4#jiuzJvLzY7Y=%7I@z7=^rZH3L^hQciz&9m>yV*c)(a23X+4)cpeetC>^KzjDne z?VQ$~z7jNE(Bed`aVhH_PAg=xuq73lyiMdOM(x_2R>{TX6@Sd(_Va%`wUHDg*Hx#2 zln1UXB(4Zs1vjvULd>%nvnjJ+O_`dfra#DBbAHL2|EXZjVZT%dnH(r2fAI_60!MNV z>f|?d@<4g>&-<4Rwd8_H%Wq{NmMG>P>XPbyPz=yfbQ8?ts^5yRrNw{fo&~&3(rX0>JGMe$j1u{}_1s}F-kYZSVpU0+OD--^S*Z!2Ix>XC6&@@i`LxDbz)@PtcWJ8}I z9n&J#_z+#UyBBo7Z0K?g-5?m_G>(~68CD5T)2D*H%v1fP*a%bWOP_j%6)h# zhZMZrHmD)v!4`M%&f-pyzxNzMgVKkPm;J=a;#xOzVB*x&Vbqg03rc>yS&8(#bLId( zr1&A0U4?NGXC+8*o`v$6-Or8%Y|D_M$1v`Uq=e{fNL2GUcf9z$8sv2(RFCmGE}#aT=HK zfCU0JDKG+$7r`ZsQX>NC=oY%(AH=j?p_%Y3@<0kFSDBHS6-+S)!Y;3U4wBJ4_=BPW z)Wdq=+)hH6$3{=f9@Yd&EPIi^#V4|w)B7{6zsBU$8qdwntqs=?w3Mrzd?R=Q=rl%3 zZA`Dx^hX+IhR5Lv&3;@SBL!QSD$9i!A#MD?3)1ykv3>~D`E2w+usK?b_CfTgizwo& zgeIEzG*6lNK(T{c2>pbgN_t=?pSr_^2Dx$=lt9CAo|HriV%qA-9H}apQ^dQJ5O^aE zUb55YI1FcEl_0s}rn3Iv+BN}bNqP7jt&9cI{5 zl^!2$UqSmkRp^tNNl!)MDDp>`fZ6 z^#k#Y%<}%;qiW3`DmNB>xAfchcx%K3l@SstpRussQC>8PpgkAy7OZ(x1NGNM?$vK+ z$Qybfu+cL+D>wysP9%?AUkdT+ zwCsAurhWv&%ygT?G`)zm*TULc>9wo9_AF=o8I^@&*OL_g5c-W(3iiP%jjq}on8=Bv zlyjBI5_?RvH5CGzUR9w#3AQjnpW5alStle4*|E7-N+&ravDy%E!N~wHNNWI3z&9&s z=v!byp8}WY0&Asydr$0FGo`*w?e(kxo>KcJr6_qSu+TQKe$)Yx5f{Cuw0?lthcea& zU`HPvta}ZZlLl|W&qj43ceL+>?FkX>;6;OZsXtn>nt}3HRu4XGTp~CB$QEW6t zdBfKyZbIiesB4;Hk}f3?pS@Gf$g_{jW29gtbBbIQi`4eCg;E8ZrS^sK(s-(b9zH-MDP{kiS2}EKtpi;=BkgcCaDnQwv>OtVo zNQ0kZ+QmH`2%XO{qz1sAR2)Bx7pgrkk!MyOiof%zB2=uuLu47OC!xnT#hzwNIa)y+ zTM#w{_ZH6@h?Oo*9#+H$L00n|_w!4Rb5{R!4qj!LbEI`!w^)&%SjB44UdP?)Nf$gO z&$pd%DZkjdGL~KZ;js5pOp!iq(e$mcaIv_Zoo?KU|M$f$EMy$0-rCMT)7nXBlmwmU zPUWqZyw$jd{Z5Az&H%LR*M;8_0L&m4H%daPa4Jt%EQOcy&oxo0Ap_L{$5TG9KOr?p zLaK&To~~VLSR;iq04@;zF`<;FKbIpGKxp^;&M^cXN-r1rn zs57R~w>ukC$&1}go;<(BXQy@cd^?pY<3s?G)W>z%#f_;1_3_kmyA*Gg;!*y&W~sD4 zT~6xYsOb5MbWVh&szE%vQ_q{Fjtx@B+fqCWqD7`L-AGkDm9RsKr=DfrroAG?SMtv_ ztN7>U4ocl76SHv{ueYs{r#JY=zm(xgNUr~Nd0IN%xV^h@y0P&qz*s-E#&zwIzLS4$ z-&H8ZUS(m)7+<$ON9ic#G~Rtu0wCc{vm#uZ%o;d~2M4mc?>q5s{mls!Jv2O*f`}%t!H7yb-_3{yp>> z_tqOf;+en1t1?j1OcaNVkeCxQB)eot)^snucej}7FOHc@WJxkEuZGPonN^dx97S$KSB8jw>55V`M|qfOCA1WgEd1T=X3nm zapD{D1drYATrRT2JPs*exR9f)lykTYuIVy*_^L(;le4BxiWP|k2TU2k(v+#89Ot32 zZ0z`n`~$}JU8;;Nm<+x1Cw43ee}M*$%_Sl6qYSdtqaVqA1n);KfBTDI&5^1-O`>{C z>m2%RfgHcN)hW{~9r zv5USZ$nw}yK9i$y<*`*hdk0d@z$!F$)2MQPpFIaud2E%y1#6n<7AU_k_(Vm%=4N?E zD-M@GT=TnQ$K4D*9c%}*56Dd!&Gy|O=&bhLP@@dTg^lv;dIdfQ9P{2z z9(&6>u!q$CS{F;6^4ID>i#D7pRnIoPS5+|bSpm3P?n!wtlOh>{y?feSQ$coO%NPjn z{JZYJ7mJ&0x-`bAe!~Sf{-ht18sd~Kn<_~Tz(`A zX7SW(4RROv3`;1^)>XqQckw&&!qA08Y#4t|-Xb-Bj<6sd7E9FIAvGVmE+tRX`tD8nBQ z4~ml(xx*ovS@X7N+OOU@Z-=gLwbWNr2uR=!@R32Ic-m=J4*G}sO&0v+LE0NG_~0Q- zFO_{7sII0U{ZsJr?2Jru%!3IjOlQaTg)=Lp{P|ey9av(PW50XPkr}yifj6SU}6gnGAdl+`(HT(IT&PZp7}7AmNV{7YFqK4;+FKHsMR z2yXt&*-~^m>pg0(L|spyFL8pO2e*FdzYJ2oF4to`*J6gNHCKsM!SPu!y^eGB1g)Ns zTEE>M)~p#mNAin3P|0@Z%(!dm?7+*1N^>K_pARcT!I>M_*Rbj8FmYw5Qh>cJoR30=i>@_+`GZ zp>JC{z6tWFzL1Z76J)3_r2m^BFYgOE?wcU1`$9Uu39_g!WEbfALHjQDE4@bP6%A=L zoyYj~9;prSr^qzJ^Yn=&8&*AyR0o&Zu${8zl352L#Imm_EKZ;)zPY+f4z^}O zDW|O!venWu`tKV5^D*)0;>_FcU{4sq$7PeDDC0&W5d<$!?!X2Vag~)n!VvD5LvI0u z-Fqw9iOZE%O>R!ZsY+7;XzTeSXr($Z1bPcN2+&5;(NZ&tB#8=DgpbYN1>p081)BQ+ zzRCL7vuWs$NKhQ0O|e^Vki52FjX$LDzO9l4UrN9IQURtMRpu26@9HjvqTcrZf}-}` z-`|L@J~8c^@m2JZHNKjc=cLmV0y7(J7k`%`W_lY7y4Z!ZK7Kr_iXjfxJlLdA zB6;Vkox@u!I!<-=cAawsIf=ii$#Ul`0_jCvZw#S0sIe{ammYjB#gCn&`2KHz;V(Xt z?<|2q$33|V@oVf)*HSHW=tL}sR9PX;+hh6HvkYHo1S~HwzzR>9niz=6)#JQFk4&7Q zFM+k&jD@Vfb%+XfnFOZ@tqAlZ_7tLmRVF?t^l6QDYEHgrr`qN~LAkH?2x~Ghwae|u z_g@J62D#j@A*cxQaVzwic+%SB9om(kJv+T6JCzYZT2R@Q7F1$ow2o0OHY+#LVAYz~ z1B*pcx>ut$iZE(T^VJvMj`K&&1ORF?5*%y&B{%|)I4ukalg)(~hmMR4} z5=C|*)T(##we_bjN(GR)z_m#{lf^)Zp3%Z^-k#Q}F?+dh0h3(jZ-+c6sD zh^0BfXpv=ipi7g7xgnL8&Ya4>V;c^ygIvPwa7e;T(@&mfELyLSiea3mRucaS*jQre z2wqX>Ng)=s6>F@uaZ2WSTDIlZRjlzeM)#@pS3Bah0C7+!#w-__6swK-cgalg8Oznl z21jJPrr`#$IHpg?=Yt3GXMz%Ro53Al5`^ehxQsJeYJHJ>yuY=SA-==lKn}DXdWAS+ zb89!`1gKyY@A#siLN9CB_rVz%5(ayTD`be8!Pg9}yy) z9y{s*q^J0G|KZp+Sl|;r1jxueCOQMF5ajJyz)1EfdvbQ! zjZ${q*UKiB{+C4`m!dyENYVKRD_WiPRijCi6e*6Sx{Q0@mbWUOx`Gh&>b3DOrtPOl z$xP>srori|1{|!a7vo)Qo&|VIm{VGs!xi`t-2QQejav^CN1Ml?rdep(qtP=PJ%Xjm z!k>WQn0o}90eh1u)~=>K*bGm|Y?T?Z5h5NIDvph|>>cO2xQOj>nc5yieoSwVtx}n6 zkAAfgx9D#TNt`J~1pj57vLtrNI(^;^+%q+`6)UW@F`!tdTUn=QoVM)qM($TcRj@54 z_&aS-`(vfWHuU_x&;GcKZ@ibiKmMM*Kh|2wRsMdK@e-Cld)SvsVoSEkd`a_lLH=QTqeF z9{a-^>A#w_U*>g0zZS1g_Qx8%KiITO^HDVoeCTzxrS=E3@M^t3I@lk{`5lLdkC4p% z%F;*ihW}7TuF}iDh^qtgS!?e$&(4L|*ZmO_OM8oKj6Vx70wd;ktG___Uhk=*WfXnd z0lk_p_?m@AKuS6$;;%}W+U5*%?T5bbuyVzOjf^U_=CwC7R2GX=(SirPq}Yd>)cHpA z8AbmIcozM~JvOC>{;M;d8~g9le^Yztzk4+Ow@TuAyO5A7BzW*h5URbjL6Czg3Cr@%8+H3t5ccu_90 z^cX}24Gm=7aak7`Be6dI8MPr9id_NPmH34fZm95tCk|AK0lmDB#VKjY9-N%_OpO+2WyPC7JvwDq&(X<2lD0}3J zvSE8y^Cb?a4u;oEbQ(>M_o=3{7i>7F7kqxXto|qDC9n$}2<~1%yYwUvpo&CM7pacG z;d>T%!wOFJMQEuITZ)C%qpG0zSCcP7uxduere((1Xy1d77YPQM_Q4|u0-6`Fhucp#eK zwA^gB#_mSQjIob;E|m_hSEYLBh14!X+njL=&#f>c&&iq$j~l4Fpf*iUcE) z%`nuHMAu}?5D*@8*DRLw>eP~M9$gr}l+Sn+yCtp2Cm7){zFXHU?cQr${-CFFndC= zN)r6jYjfXb-K9;WQ9OWNaltB3T5rTE63f@%w!ITvwWZvv*8qX5-ORljr!o3ot&3d1 zowtp9Rf@=Qz`cqIEcaWXw&{?2l^gCuptx7x<6eE+)3}s-_0gVtwFh5I->*WLM-zG4 z7NiINtc}d#Tj01E{BvREezojPxIk6kKVS*oTc};x$oEkk{DhKxe+S<`-~sVf_+QV8*8Pg(l5JlS8#9G}dLzfOK3ch7*Hmxp zO;6(oXm0Jso$`~5;-r04qeL97~61!Cvv$%u%U4od?AAl4M*n~ z?Non1ukq3zE7&E|wZu&WWx6nLOn?u0TDIrbR_w{bhdd)T$b3x%A9@Sri!?qo-r;k# zGG85D!G|!K5j%s*)z}zAFIcFJf{+Wnkj94wGG9xXFRYW*g!QaHMK8Rq@gWv*EBMd` znJ)r?YkJwfI5l5_56wGp5LA`}2G?OJdm^zv4%fq{p3H8Ypm(d9(UigpyR|{>)^m-} zUzsl1t$;xonl6%lmYVNuBJn;+LrW1NanNyh$ZqwpTZQHjELi6Kx}JGY5s3*k?}7#Y zZ_Il(ef9tE`A;?rK8(y?w211f8mAW?5L@lca$g|#i@mgQ+gHs~3d0QpLFk4k!&G+U z%z(*`h2N8h0e!4an@LlD)qc~7t zx<>d%iQthoE9mf1!r>D%!^SqHD|U(?Iw{Rc#Ps6D>+O_uEk6FuWRh0W2JIbH&>Lek z`XUpH@K;p4rg>tKsmz{h9rESkFVlVO-8CDU~oA zse{Vt&F>O%UHB;}>Ujy)A)>0Mr1Wj2>tWvKD zwpatY)Y!au!>5fllUcYaKx_;s*7NxHII*ji@WiYtvv!$h&s;h0TrXf zLhxhMllxn)*Ni5GOW5y9w}^X@M3{@Kc>k zc2a_j9AEhNWehG@vj2n>eTkcnze(EH=*z%lrC^v)GSK}oIdTC-y3f?^MXxT>b&On-l@Al1&0 zuxUV?Kfh5-so#IOzf@+w4f=eM6EaEZ)Hn7i+KH>dlLbDbnRGas=|i zlLpdcmfOkdLyY^|Xb^xjKZ52YVh6D1*eg7eD_fjkNZE?g@iiZBg?Imc;^&#=Fnz(K z*r`rDNe(JktYZ(ux&PLG5vf<=v3z5E-f7<}$(fpUm}cZRX?eYDd3{V8^Z&r66}`{U zV?3xcR?wcAN2U*1aZ_Tq{Y6_Jt6#$FJ!MP8~P&{VzeV6hD16nPYSjkAs7etXN1IF)UxY~Id02nI%dMtiw?wp zOR60E)jcBI(^WCy3ZOw%sWhq5H3b%`nr2WYQJrGQ9!%2P(sxKgAG0d)lExS>SNB9D zsD9YSWuE68So&z-V|H610_ZfUu5tG;= zupx30j|jh|XG9TA(;qb!*CBL+c&*Q!?ipDR>FbsEuKGeuG)Jlfb`FxdcDaO8x)Pz? zGC8TmahE)$@H;pOT7MvWef)3qXZ8(QeL3fO`l9*OXvj$ynjRF^M{tfPy^CQD^WJBT z%#>7FO9x#PI4~qX{-|PE^a7&x!0+Q?h9~RaEB;)(;TPok^p1Q%F0t8{FOln&tVbRQYZZ0oQROm~wH+_ZvirlZMrWx~Z{Kor{dHVYOXt@ZzH@e&B+Tky!idUeWAM#G_<=vqT#TaydIWAUUz z#rd-wt&=3;U=r5F4z2u#Oi!5`bgY!VAjpE-)a&@I&FSr55^DzWG)18Fuf}kTN!TY= zBL}L|o$`jywZi9cpIi1h+~?2VBKP^}IDq3qKdCwy`WU^%c28Tqy4in0E;sux`AK$q z!)Hr69v;Q}ERGOgm7$0fOt}<&rtqUqS!|(=m_4>z?aQ1hujcI0ARD)C-yq@C8BXbNn~M zGn3O!l%|fztWUMxlH>iREL5D|wQ_e5c??>(iBfXxZ5KRby)Qf+8yML?-Aecj*X@}P z6l(D9o&||Gd_TFma}ouriHN{MA0tIlSMDFhD%jp!OXG%o&SR=YM$`M8QVMfOq3v=G z<1u1LZ+eWqCh~yb-toi(k`jP96~eE!Rd^UKJG=b2$yJ+dR5Wp6c6snJ)sp3&#_P&u zA7G0pUYWuFL2kv$>r~Xn#C9vS33k+?fn&cNyJ&?N@Zt#YPIjQMGsCm1F#9s326d+z z_s*fi>h)m!Mb1w&cLJX(1*|Dt2({%0yJ3aDi0nSCfkp4WN&o7SH2>W-UGd*{V{$5A zSC{KlC4W_S!Nqd#Ge#VrWXhyS*NYB#@OfXF6Zm#qbUSxf>J0ov z=3AFCn*Ko{Ow#*Rk#tX;leh`_B=+;yIoS7b zx`#gYpTyavj_a)NbD(i3uxU`Q>=(za9YRDIXd|>lu7tZ)N#&Kq5B6Aa-6h#u-i`h~ z9+REYfJlw|JhuE@+hoh{)LY(N9AmeaSm7eC>yA?8&9c|I8$RwMlothI|9~y$jnsV1 zD`yBxHi=eqq6B@&Hk^n1+fWt}z4vip+)S|GVqPpm!=6%}1Mg(-m+BVb=6|QuUm#$+ zB>zP-{QY7tHgFVh8kN|>RjS`o1G_pwjc9x*87N9T2z@8A)d7#(z~RTWyBp~>8#gJA z1(yJ(9TRYy*8fGdFMbv6%#5Y1w+#KoX^y%oo{68~6PZKf3Et2S)khg_*|sN+%5J|U z^yya|6{328Qw>E4dmXsf9JLH>cOxXKhlve6>px2xg6!95Dk3|hNwy+S+z=vQdOQ9J z?e7aLq|ZTtqXz;0>o);EbP(Xi6foRUl=(8vNZi!B4gSmczR`3J?^4K2A)hqAI!gVR~hG&#ot^-Dsm|SKS--W!f_@qhT zkn$rI6yK`G#HL3cybm2FSv3P;L9}~~+I=DnP6oI}S$!L5mREPv^OAISd}P?S#zh96 zCKy)fMh4MwpETdBRK4IFD#Poud?)}PVsq?D90+6&?QwLSq5b`7JwvNFV3uo{8dD>r z4KfQtDS-5Vihi^nP+aZOru3i|z$;LL%CyEF-*oVCO-#tFAD{iHB9TOU!WTYMin(yE z2Fu_B(H(+cP$cYvQRRWp6Ki`W0|wY;!gVlrcX!Fk-Q1HCr>i-}AwAnH*jp@oWh*I(O|yNGI^$bRatUEssC8bX2*kU zfmY75H>i~OI9Y*qw|=RQpP}ob`)B7{6Pie1(JkB+mUZg`} z;~svbk*DB(<6825e zg~9zeQILRS=L?Ob0zL8|en)m@f(PQ9#jNZ!9qm@-K78c5qKXfP?h8Q*u%#ZepXxl? z;(pc*n6RiIs!P2k5@pfp$D4%IRvT)pjOiHLiiICEp_@Sb7oO1 zeJyrBnhuE_ET-6SaPq{v^0bN*C9zhV-1g8-TTrdUQX8-0+$nNt%zsJvr3?TraPrIJ z*R$7q##8KhI0LU>TD^F2NIP!8gW__P`*0-FL2cfF9J+cCuJ zN^K1y;|7MPt#N#xt#PvM%2ll_DfS0DxI4W?QaSOHIu*SyJ{jvBy`Hl0349dV z=(u+IzmMT{O1l6>Wvdd!EprBXQdV?JA>rOxgKDpi?rO@BvoY5Q{gypg8=iwFgd_|^6c%bR$9e|Q-*SSsC^ zpC`$Y(M6_O>$OE-S~H3j;UR2f#s551*q?;V_B4L!2%N%Aytf(*HCZfcM$9HE_Y&K$ znvleAK=8);G326JB$22DwdiUs3Y2g6r96Uoq^rVMV#^}(BqlF-kOHRDZzeO1ELm_6~nE$Axp^3>Nc|H?Y74`-mQ##D& z({WXqJ9FqtP7UI!c9;$>7Ksi|T-B(#C>>W-a-L7eRYhwXTh{mpFu;a$y{#Z5X-vEeL+$2MeqlK zgF0@;Rvv1z6E93wPv?9?QE=?^Rd!fCox}NuZzvjuv0UHK4xgh_HU z=^PFrP}q%+KqJ%9Fe-g33?nK}!<=R~tE-s5es6NK$!2M%E3)yLg;c@Ss<|ef9SC=&Bvr1-1j6M+ z6|cC_I1{!8r#GTurUK!vG@s8*7zMH>Yz+_+Ou6C8)G86TudI@WDNJAk+Vlue`(ApZ z@UxL55O3h@%uF8SnoG}@^d~dHU^_|-q8SWnn3L;8$}8iMIUhydg_=Wg!;$Q2nf)v$ zGVy=Pg)Q8W(O_*{4Bp7>o}=F0y^q`_u^U_4{Gng**=luN}3 zjeyRm4d1{)`W1N`q*sw(x!&Y| zxrk*M5}1XU*CYt*mQ~p--cq?Ssl@7uV2sOob%}On0&{EE_p;N7&+T=rml!@woaI=W z*=gihJrl=;-w6bZQNm#FlM`DX>ztVKN!J= z8==i4WC^zDK4wDVFV%zV)=9lIM0eoRUT!CI?WbmRM`2gfi2E5gbj7Slow^0S>U9es z{4zygxipr)R&D_V+#gasNB^6a>oaxq4}@camI zT?mVsze2OcVr%pzp1QshJ=gbpT;BJw z_wr^qB8z!RPuSm7hD?~bBy%*vHSEBdl({5*G^!v=_$ZL0aifjkgpp$| z$=Ye)U!RN!9&j}Hdge+U#4=Yhh6kG~!3=I^o(ASyLw5&m&YC0qw;3U)Oyt)Dkjl%t zUW}nxaC$Rak<}&kodC@nd6g;EjPkC zU4nqbefD2~!V-g4a3AOu(;kR)c7L6XSApfRGLH;7nU)=^Q(rK{LVYfe|3-8yBQwA@ zwkwu6mW5md;t(jSnh$Ygo@(P`@Dx=|1Rv0Cm70`$+W2JZ(zpS)@FDt1UBo!fjr|Tm zLVOFIIfyv6Pgid01RIAGZ(8kW|2AycTupQi}7DDmegkfXrnE{iM!6Y>OhpS9)Nb z1(#GP0yI?4c98Xds;vLlWG^&2X|848=LEoNzfa&;4=8j$=H`**4X5MQ24S1r*Fr+5 zWp0_Q`D2FC$##`g3iu-V=Oy_^sgqPj&1<7|;TP{~qzLhL)i0U&3i^@Mf;VlCtqOAw z>Izpnzh0pg-QlcUZeF|G6aJy90-vwFYx{|+ZFIUe%l?scfb&dO8aPO$|5hu@4^rX( zq?J|Ktz3Ql*Sr32wQ|luD*P{7nN%~w2#%m_sT6{b_!U`FibX-v5DO)2<)QzcAF_bj3LT9#zqthQQeb3T!B2TWHa-04@j{Ic zPq-CU8$04vsi9!t`J~!;p743X+<<2>JeQQ%aB^QBk^@(uRlXEz5%bl8B3NB*1>n@{0c@HNh6Zp3!E*;6?PQ*ddka+W2A3RE{|_Bu~CP++6LNcu7~)XqYf z=X0Uf^_7GjBM26vI_^?EzfUj?a-)_>O9fMpFQS2BREs+BaxZQki;erf;C?n;C`+|A zER265FOiyOO@`(q7-)>$?|GK7yT3qc={3*T)*grrX;yb&JfERGDE=I&xvQM&7IuJr z>HEt&vgYZNL?!A^p!wd&<4$Q*|tSppAx$Pa|RvIx8S6) zDZZuAbQ9&-Qzud|eyKc%3(mhl3x3xt_mOn2 zl9z`EjD-`4b>_K9Y>i+<9j6|q@cH&bDclnr?7xnPBW_s_&4j}-XEE6@^R7p9_5L~P z6X(b$=8I=}lPmat_=&8DJ0GAYsdmjvf>+2v``}KQ`ba_I2tKH#A}K)#$|MT;DCkUO z3DaId3z(9E7)|){rXIw#EQu$9TdV*$s}pU4_&*^F%NzN-TYf~{Ew+|e2jQS#0bnLa zk`|j+mXp)2QrP(#F+nE5V+Jz`|0UQ+iS{P-Lsm{WELAWjwkj!DiK=Ya*DJ&CiqliM z+`4vo_=l>zSrX5#=|NS~=u}Nexi~|@X{`ZWJV@co^5FuI6ua&7*lj-M=VL1l7EAmLH& zc1n2>X+>{&h4xbZfMjZaJH z8AHh^)EP$TeZHCc&hBwEKeU#FlpLqmd~whS0@3s?7pgb>+!mQ5*Jgh#HVdyk(45TSDxFCasD@6s?ZxhY%Jh=rw zu1=1hKZ?hse;X(H(bdfAynS+#H&p9W{F&56;eQI>6g@$Qcvc)G0^stXqDLkkS|W=% z5uu*fVG^e6nbfv(JJRtxg!`~RDR$c5%Kq>b5F>Hb=^*mq~Tx!#9 zc2Yh(GEF7CBdlv9O1+<+dZb&9Chrn?w z{;5(%7PXv$LK=bkT_a@K68RV1{GGI^+l1z6%O4^O`fRFDBD>8oC+(4BiBY|VmLHU2MkyNNy19ZD`!ryO1~fHbwFW#=1CCUHqcq^t z8t_~V=+uCpj8ruqt^iNdfRAdxlQp2B0hepQ_#FB4(HgK(0}j%F2WnIsf1v?e6kv%4 zyg>uzYru~+;4BUJhyvV88XJF-2HYbM;X&_cz;PPzRt3020}Ahy;n}7ES82eZ8n8|Q zuG4@{4Y)=FF4lm1zpZ+GtO8uF0gE+Yiw69o23)NH_uM1B{)YzKDcDAM_){A2Q4RQe z4Y*PPKA{2EYrw}e;Cu~uj|Tj;0{pQCY|(%b4LDl^UaSG{P=NC^;FB8gZVmWd4S1Rc zoTvb2Xut&;@Ov8YVhxz90Z&$dS8G5_%%n4yX}~cWaDz(?&sTR#uP120X&TVdfM;pI zr#0Xk3a~~4Lgq@1BQ)Sp4LDx|{#gN@t^unw;3*ogR0Ce60q<3S$7sMZ4LDc>CZXHe z3d1$vr3$d0281G(PZwywPc&eE4OpcB_mRdjQ&equ_-6tU9`vpTd~by6b&&#$X~0f( zxeb3$1HPgG7i+*xcggTHXh1mz*x=U)gkA6gKlpXhS<7_R)jI1*`ALbM=*Eqxa>V`t zMBMmNj-HwslJJBioT3vNB;m)BaK28MBMCyd#HZ+lkR;5Igxhq&4<+GhNtmw_9+ZR$ zlJF~?@H0uMk%Z@T!mlOabV*pP6P}cWVj7izGZK34hQDJ0#&= zNqAW&d?E?AOTt?^;d4otCJCSFgfAswq9lkuBVWlAcFlQ`aJ)|VlR%t70(1Bn&&**r zKf#)(`Ij4glm`2`fE7x)(@4mQe`(J9s6$FGy5+`OzH{@(A` zp&ye#Z+X>XH-IVq4trhW_X!6bvADc0O!^C9G&maK{EK$%kE6!IDh$=o7i_63?g$J^ zdB4fR|3)_tD;aGp^cOoYViudW0bU}*;587n^ra13v4Cx(c39jHMt7H2#riMiJ`{Gv z156{g`Q3wM{g+4tKW%qFV?cwKO8}*+W^Z{BjQ*z8G?&K!7 z3+Xwo`6|Sf53(RC!Fz-Hgj5_pc8wA#9xEwOX%z^t%daRpgH9~ z&;B&ly@-p^URI0p)JO8@S{4{Z07d%g9afD7CmQkXmSYp#kI=`$jCTf(ibJ!agposX zI?-slnzTA&$$7P|uN0Wk+uAv5)Yet&N8>voNJZH^UGsfWPSM&qc zqm)b-FJ>G~{f74wXExR}od+5d!2S~orX8a=Y0Sligsp)O+G>xjlCWY`IsUg?_E+McIoMFW>;;Ln9+(oVw|5idY& z?k0KB@*IwaPPv!ZWFv40Q115fWd84krdD+eyKxa*hn~>XN-^Pn643w9DjKmLalY}{ zdt}vgl4IIimn7+pm>}-{2gvU)0g%;w3WwlfhjBEx%4Fde+@n}8WoTTdN;1vKwTWS| zQM$&{xN|p*1o;gYtdt+3U_=HiIGxIjx{h?2TjE1I;vgGaaJ`%h^@kNp8 ziLNt2dEww(`cJj8oek%JCl5P?5FFvhgnLBejA3rdbdce?Y4#A3VuF8v20c0&p*3K$$_hwj(zZ>xSmiY+=# zF#Ec_GEkhHn;8pFl4!0we%S0%o+G{DQ(N=b_(a=*ix=X+Mwob zY4J+SwOm@XM&b{TjIBFW4bn(f*({eDf$QW)t+G?eBjid{eKqzDZ`t-d>}lN|R6zKi zDZYH|i^|;1r{hfTtA0l43K=5_0*hyvwtR`h_^(@IgpQ&_tX8#1J07G}?~YKddQE;* zs~)P%ZdEyop&nZ>H7$pmimCE)BpO=+#fH?!GI4dcklghG^)|1qhU(We`(#K#+-pCmd z^*t0EWl^DZ#)>_g53{FFBquxhSduZ*CPGuO@gq^LMl$!LLb(QYe@j3`d5+?rDK%K> zO93@lM%`OISsO%`CNk(qRdaXZ9_f|Q9Hy?UHV#wG&hFa@q_7!B>W^*YV>GWxeUl?w zzS&5{RF>Vmr6 z4RbXrJ+saeu~wj;r_nWU!Bd+Q{)NlKAQv0<`1Hh5pp477RLHRWtf6SSCv?@e<)$L-S4}6>XiB{B^$k>MO6j zf|B2UGy3U?==3Q4-+ty#&2FSa?Flr2ySqhNw)lF5@=TvDnyB3$ifh#9M}$1vpKCeZ zKoN^@=J}0QWxE=Hf?uC515mI^evH}{dhxtUxw*VzNioe9XQ?f*<$vY8Cj4yodY@so z1N2LP6-nk%DpeHGQmanf>|n}^*zG)$sgi!`^Lx3SZBc!!6p zXSC06WX?pclN?(W7y{I?OQsuhT9PgH*kOS~<^7ZN`-s-eT`2m1wRS67(_EQ|0U|$u zmCf~v`ddp9QVm_TBfXKoNo)ga-UrIuPbu}eXA2f?e@Ix^Ma&@TO)Fwo{Y9ZPNz153 zK%A{vh*)(UHY6CGMQgU4#ciU>BvDGoQFf6SeiB12sOcyn>NFx*o61}GMaFf4X^+C~^{Dcg7=_CN8ZjzU#zN`gERm;-w96BIsHssZX>U@$ zWK!V|RT-s-ql=5oi~TsTJa#@6t2#tW>T9)Ewwc$qQU2?7CUu?IhMa^^UI76yO%92c zq{8$?#aF(pI6IE0&+#eyS_B0HTB?aX!9bny91jed*k@xJ!LR_4R)#`VN-IN&(b3?z zVDM>;D1{hKlN(mtN{CN>%l;BH0%W=ObUpPaks)IK*u@e=zF`3xKZSp?{V}sXDtxH1 z*{>>nYkZ`9g$eF7Z22E*aT)$n5FuYaN{!AAqv>aKM`(ajUpP= zEFAss;)VsRFd!7y4dSyI0J??+ttadgoa!E2!J&h>r8u~CuD2u_-BDzgtTyctzHlAK z{91f<722J_E$8EsQM6d`j3I=*+1@TokPxWnd&QW&;S|APou~(_-C=gWg@!e8;*U_; zvK2i?)RnCW62kfG)%j!sL;URV#xwob2X>pGy~3Li=|OZ`8GcnAbCv9X^BsY6MK3}%`NQ5#ZWt%6 z9n;fVq8aQ+oI~^uM|`~Mm2~q%kf5w?HhfRYT-UqIlgx~)7@!? z+Wlvk(f62+0mq*TddsXBq6cDcN~yfW7G17ve+`F(qb`KevNyhp#UPdTZzI;W8Cnft z(ypV2pC5mUJlUsZp6A`nyM>M$ALU+6O-6g0nv=EL&F*z%tliFWAy=*MD3nCr_EoN| zwbulJ_k z>oEQjC&wZg9kDm--e9GIkgwe;ra^j~tnM{7UZ%I=(M{M}zN0q!O2C!hMmf4?fW*mT z_v;fP{o7=I)c|cu4Umew-ik|tw#*paC)3e0MxFQ>&hwu_{XJc)MxvIa%yM_}Cwh=t zeXjL^&Av+fVKGRAMM)1*DoCbpzULbT$r{??8@kCil<%WT^f0kyr6qcx7Kx?03h0v_ zEEN)12CHPRI&%bm=aYnZXV*fsFkJB_{&`uASta%zy@xF`Sg-5BdOamnHY>ldH>lOL z%~!H=TzC`<_AM*Kig~CVTOV$tHq0WvaL>FB_l$*J41+9aRtdo3#I>+DJj4oqA@<9y zwa(1~YbBTZTx$Z`y_GC6M&t}{m=L@ZusVo(!}Y{3pIqh}s%#yC`=wkR(Wu+GI{q?=?yj~}hnpVdH9nnx#9kp-Q-@L!48}jnf(h1~ zDR2Jq$_+ohHR~OAv~eq*xAFt$248Lj1|v38!UFdfBg7XtRB}v-3VbN`EU2>YQnqU= z{D=3?Z6^LyXk*~m9_~EO|1AfeAy=jI{O<>A&OK4ScR61^Nj+W9QSli%O)9!^imXY+ zIF3w_(^gxVz`eK+cwuc282~m}OI!{HVINS{O;VK+I+s0_XasFsbpki~V*(MZS;BKp z;HSE3E%nuP#&5YS8{LPV*I`mc<0);~C+ckBu^6Sn__$jRRC}#2q9U1dIvY)Lw~EH~ z*_wX$wATv~pksh>M{)0U#pZK@;TUa_l|=2V%`G%~P&5oV*(W$sL;W7M8h8Vmz~5xf z_Z9vlxK#s3AW60_7~vf`t0Hhx;uww-K#P(po+`N4NI4#JR$O8e-ZFwDv5yv3S;*{$r&{fd_G{B~2?-%~^oM z0qN%Zs!F0{NS+bmBBxS9!CoT|De_-z5Yzk;f=NXR{wWIs%q|@%Se{XB;x8Q+#(V)6(`bC9c}n$tjJ;~HxG3^97VPN)4eu#V zV0r_LRBC%*&0J7=cRo+0cz{rXZ8NW)iQ#W#y?Zt}^=>n7j>%A%=EymdW*6`@sTDW9 zlvOc*slrpLV*XMEW~%yx>{ZK>#G*8Rv=@Fo!YAAh%o5jt{<&GHB2ZWxV~M(Rf(P(|DRSw7LZW!Em4umE~8~SuPb&=~BLgl$6-O!pGX{M=kj7*_xlmy;rH(*> zG}$4{(GbzEPmSNzI_!4QtVq? zN%&840tyLo52)>w_2}Bo|CJCXAg=^hujK|CNc_hu%8$@7dc|X~eBsa*Tv>9l2hPNF z`7SDuK*-cid$+@O(N+tW+>{gBFh_N|6z$izgI3kruLrjsup<9lL80muwf1IraeI1w zHBWe%kJU>|%|pRYcX^8U);9AR@i_QR60(A%eYMR<2oMAXKWT*T5LoGvn3ku&_#(1q zGqs9o8^*cK{m(+sa~4M)g<3tut7@CCILlFI|FaPopMA+B88@u7>Sp-t?@smE_e^62 z-MOzA`Q|Sn_)_{;^Xu+l$A3?htip|=-{-B4QRW5@GQU}8SGUx`jLiyguDwx#EK7j% zORBO$BYEv_A(P94zZqi@Wa(fdAga0iSiNvBe@`vk_*ABb`=QrOBRhv!#sF zX!;E~y&Z0Fo=@Sc`GHxfxbR%_9O+XN1LR(sp_zwkxARgY<~_z!ViwF!2@un#o|ry3 z5N>1D7wLdbTq^7j{Qksa>j?laJE4>lo6=(ipIA}MRw!aCtii`Yd zo64b2y$R$*M^_XZdPG7w_R6l;yOtIjAsATLJ19SH5-z@R>sOxUiH=N*aU?Z0aj0ss z=SBLMW37E(n(Vbdpvm~9`J5*EFQB1?Ii7zy#QD_a=%E~~4xdM4Z4z%%zda#uYQLoR zxAdrxctBH*6Rq}mEIEM=VFopY@8~gDZdESJsygsHpeuon3%^y3y#Ek2X-4SBLgK7Q zyMaV0=*Be|&IX|;Ly z%4#5S~SgtvhjyQkn10&JApnKhMjqu`-pZ|J zIJAJLEc}A#!dl-lA{ppgdL6%$9g{w9SS3(|;p@sv0|lPOiH_nr+;mppTGnyEN=`6E z3|*`gF0grraAe6%Nc>J_R~-{Z(^?J&ZrCtMsKUWXeqOVaM|W`H z7JFVOre$8kx1qYlCsxK26!?IDIN^28gLy5nPyY@Gx(UvqB29rXIu#fUu;&jrG@T+r zMEJ-YDODqdRP56;$^KgG)60PIU(6~=@h{rUa8~?NGJEMWpbHcy?Z1kD3P>vcDNj2k z{wcp!WL6SY-hwBG(5i63*5mt$f7tev#{gnGvHv+4za9hiIUvQK4Lkxb4)L5+GT>S& z!BMZ1q2L3_0c(M=l4IS(6_F!b^o43UoQHYs>qMyRPYIP%s69k1|9{LCnK%L$!xF|u z4(_WtxW#`8UTv-D`-Nk=YEPCZpgzZE;v>w-1mP_6r+iVpruZX0{x38B+rIzr`)@Pu zlfx_R!!3Y!Nk&37tV~w^u@-K{@H9A3oT>Ho z?S_SmhYpnr%_FXNJ#gX%dNFkkeJ*dtbKdfN!i3-Zz8qOSJrBOgYkX}gtxP%AM0>?k zNdp8*z8h#x{DuY7qr`3DfSJnK*fIm``w_J?dKjUix>_Cnk~-H@jkMZ7n`v|B%^a~n zI7xt3h(`e*0paXbu}cw`s!l>_i{}zbe#OW-j!&wmGk9e$8(EXY` zUIV*ixw&{sw83cptHT960vUn1_jwmD3-;$fBbp zPBPK_AnbT61bLRDOa@IXx3H4KG9~siPDmX%3_vZfCHS5a(uyB!Z@9>cxSiI#7KJz| zlV#Xlu~`urV}wjBK^3VPHe^3@-d&}|j6mS9y72WF{eLNqFoIw3g9?VwY4f%TxBpI?tw1GxXg*BQJxCSh2;kX%^E?c`rrA;uycTU6SiQEmNMR}}7xNVO8ctY`( zY>}&y@7kSW5d0b826^yweb5lT4AF&lz1Z4fRdiq6@x&dSS`A$8gxuY^_dJ6efPGclKc#^z72b46!;s{B~= z1j(tzRaiNnNsKpHcYq%mgLWb|HxGVz}a_0e#a>FAIF?CI=o z-C2mPPGLskH?R`pv^9(s1{0n9?DFWv#AxmIRd#6p5*q*$x`zJK7v+@V4z0V(cy7Jr zS`Q5F6~uNsb^>EF-Q&0_7std7yz(p0&n!pfhotAc^TI*0^rG;D?^Qk83!dv^MJTLs z+zgLe4c6K%kT~r1D8kbf1S;|2Z}75OVm|r8mre6JHt_BrC+I{SUL<7VQwsxoLaTch z3xfww_b#t2iB8MW>Z@EY-k3T>Tq_s$m=>?AgP)}Y8RI08q0hx@3H-Cy@JUfJAu=$R z;4r+dLj~?Ic!G0JkT4y_Q*9JL=_NIPmR-zN#ybe{|7PPVaw0p8@kW{y@-M1>=1Ik6PHN4)}( zMJ_?dvhN33O2R!oQUulnm60%aB^=wzi{iFKt;%1)h^Pd7tr5I|nHpq<=ZTj)(=L>( zXOzb~hHI=-SNJ97VY#V7AEy_MT3Be1u&>{a9U-HGzaD6r?DIKW-=vgdA$--qUar2z zLOuzXv}aX8H-q(M*rb8WQ!c*P*YIjnF1}U+2C3n_#HCtX$34!$%RQ8nKl2#59|e%(kQ+h({{o;e9)zfl z-_dLA)cVx;@WtwG@kVCCU|K^TS zlzlClyjP_>_!#rw7TCzw-P{;WE#zc8+|&t0dVu;5?&?O31&8UC@uPnPt0C2(`46hv z^Uo62oI=Kp`O5i-V;xL*F2C)2!A8zSvUrs!wQ7#K@;sdfqYv7pMLR2D%{w-DhjR3x z7Q4a})ez206e(u$sqK2pY&I*qwLdfEnx*lF=lzJ*=Hlo3=vrqBZd=iJ&45?#(Xa_b zZH3{cA-@1tJFYf@B9@V(7At*RS?JgVu`v;m!S;?fOgIYe;aYn+*AFLi8gC7bB>2r(NusgWeBeL2lk&UUN5$=mJJOB8_GPx#yRxw?&}UsDS+ zmGa3uRPeO-y$%R)7}4OT2%k0nul@1f`2X&Y*Z;7l|H1=G4oi`hSI|)9pSQbIr37}z zEs_|a?XV_dLpym6)@!TGP^WmHiw>WMwZfs;;Fjr~6L zsd&!Q@NfWU@vtvNi}7huk)FlB8Bpwp_@FEsuAQuceTyW_Q`EC{RtysOy;tCgZ%ShKG=Yj~~ zTXA#jeo1C#*{f0M{D5@=0M#!LFPM>Gj>Yn*Vr?JDY2*pDFBzOz|8>tu+NbbH~DgbOauv<=OeFJgND zmbMK_x9!`Rw#}9feq-y7`k%G#Le;uSbZ_c=?8gV^%YKX+3mZi(ouz_Rpe>JW4#zOZ zr5GDB9yvJzUm@_<0^g=!d&N+BI=7cce^vm;QdW`~xn^&2duB{7G2t`XuOvYUKf025 zOVf>t4tsC+dbHf0bolY}R}n=_GV8>|fZaxE!Bv=L%j-bIQbUyeqa9rnNA7EP%>HP% zap{UDbNwIl8%^wxiYYSSG>Ystu0p4*B6?-(q^Ygai~s!hpAq=a2>fRR{xbsq8G(Oq z1pax$wq()&(cg79ZcDy))3)T__*=qXgum_l9pJBxzro+zmVAQWL;1az-$(iD;;(_f zh5X&j-#Y#Z$v>IDO+0_X-w>W}yk%Rm<>vpJzptqKy&2n*t^BR!?>GE?!QTPYKUIO!fBg^>VUx zaP;)#QR)6s`vyke6z>!t4N`n`>esbR^A`PDv~1a;S+}nJ_~`gTsp24a-+s=v0ltGA zU42|#+=rTj4Q;S>=TQx(o(-F_V^pnWox-k_(pm!XjzJ&ib0Qu=Pf_0qYL)P)SM$&l znoCoi2MG@oSdzbuU@w+Tdm7@*V0qw$;kyujBV#9(}3G zFD=g1{d#`Bw@Pojk#zPzyT+d{|NPAFBfXtdj!pHLks}8?dJk^u=xwW6y}Ordy61n> zzmm6?Q>B4!J{7&Z9lgD6Ui!p$=)BOS^(j2LWlckp&~apD1T=-<-U-AR|X80l$q^07HPIy?9C^!2j!bMkO=v$^|x z=Hfow(bdJ-!F!aukK@R(lw5p9IkB}SlX|d+w~vFbyO+(; zX|Uq}SDU+sgSU@|mm`Pp_T&X`jvL7F+#TI)4%QDxABWC1FEagr zb@cFQGMwwtd0lOUWl$S;pXc)&Ij)!98CMtVj;?LH_T<)hHS^%=UEFP6 z%^bN3?m(yEHm`xM9wXY=Z%FDSfT#N98J2t5vU2 zvsUdojsu*WZ38*0BTx2fRVxe_#jZo&O7U?d#mAc|K0aFgKw@9Rxit^uFqpnmme{QQ zQ@!|-na6bB-4CQ+8nK+Y>C=cBKl1y=en=a7GrLq8k^kTW8E_zVIH%HQ&f9kAfiyh) zK(asy@F%ySGocFXf~VBhqSw(!Fpl^PnjbxgwnG=e1?UN0a0EU%{Xm>g@inNSC$I8+ zg*UG8X9=`@L4UEmhK_~&r2?3~R+iYT{ZsA!l9|=1*YmGYA#Q3^sb|bs*zL7sN_3*G&qu%Z`FN^;7Wj>;edb-ATe+fhR zZdz%5zwmZwW%F_1Ycz+x#%IuGzI^&}Yt^j9NIo67JGz?hKmGc3?*37We*J9E>kjYR z=ZiSo9G&@HJVSj3^Cs@>P>Ofzmil?Jn~R&xxs$I?bE98zwEYuT3-7MaKe2W*)Mv2G z$I*L~o1?=37rsy&<>>C<;pF4!TB^LmAU@}o(oZ8!`k9K)KVB}*Hs0@^f8MsgJbb;W^LfYS?BZtECSG2SquRUp=;tWB`U%ZhwcB79Z&hcTt8EbP(@uP%b8+{z zJwM$bJ_8Qm9iLB~j!sTCZ*LE;ZpQn0H}4J}&c3d;4jflMx9I0dH%~qotV zJ8Q0=>ddcKc&m4D=To%D^RN0HUAuWVd43)Gg+M!aY|?mCL~T$;BJ zU)DVTeCRP?$n!56?9YQojoLQwm%`A{(7ogR<+~~Va%Ymi?3?T_V<-BH^B4ZoX&OH2 z8E5)SCVD%_cTd1e|9#?a#2@1iXZ-vGzV`6~CD*=a#Av*WL% z4R^UGJFle;nI8B{=$$m;p1(}In>Jj#?=P2`pB6X-@S5^Z8?J=<%eNtEL(#|nQua~W zkihKpX+*IYf5{V_HoP0_FNw@f3ywbFy_xxGL8CVw%8+zvgCDcsO(SMxcqr##9c+h1 za1(;z5c~n9GCh<#um}#oK**8#q11)*#Lnn6^kcL;Is(cQH%B)@ZHR={)W(Al7e&3G zP~L~)m@92K$L#n#X+vE8hf+U{_@UrK@hp%wj9|7hw6GmBulwFZDNxkj%Twr~TxS2Y z;5vINZP`mP^B)`@%9{7>`K_|VX+-sMJg1qR7R1$kD3j8N-1Qzx`i2iBsKG;d0vDkG zc?C!&Zi?PV>!Bym-=QS&0W=bJKo;`q&>3<`Sm3 z_QNE247u8I573J3dCx*ilaEAaK_+51bQ=tSTTp~rL%e~+$xxH{WGC)Z$F#w@^FwKt zMhxh}`!=)Fg7Cf%rAiv%`zh}Sso+s6JSpc~59jky1kZ~oo(r%v>7kr5IP~T@N(0qRxX z9aPuqOzkUXPiqnMbT6%0`J0`b>Pi_Sk3^Mky#u65$VXjy!nrkHX>jwi067hp4UI*g zLdG#XSH|)@GuVb^qt+6g1&5#pnEln3Tz#LBJA!)E=L))3XKG(Dds^!PI!kNTzUJ1N zdjDW;6;v6{Sv7xySlLPbCb`lME{x`RNG%y!kngqhZI)bp!SuRQQ?L5^5bIiBNd-A8NIzUJ1NdY$31K@H|;KExn!BCq>NyoR6{lfXC{)&FLn%Ctz z-Uqe>NZfYr>9zoAkCxfW`^WA8xwRue`tA#m^84-h{=z*V{~1bBb0r^W=`XhA>dT2| z5;gUzZzi#>)tTB?%%0X((bv7SX603rr0aQ}=focn&%PNTN8o$d0gs{oZ97Ho@IG>b*UhZ}=}j#Ud7`D?*pjQSC7!a> z)T_Q~#JW~zYF{yXT5CgJ_tKiRuer6R-lNR<0>ARZb$foAn$i*fVS{}1s~YR~p*hIA zS^AYNx%$?E12y%kuOzYVtuwW+m_4o4q_2Bv&Dz)8T2pUvxMi@Ib8247p#0qc84Mkv z4>X3gK>-o~XW<4MgsQ~@Wj1sK57qYrr2sr2-V9aC2Fe>{?5sjJl81m394;3qH>j0H zbD)m!6I`TMAI**yL}#Phs|HFDs13a;2TG=Df%1%a3Az*NRSA?pv@bed>*yJLMX8mC zQq?&FOrZ8Vy$&_(b9B}@@=iuA2j0BIUGQp82_dgbJw0;=kO#xBjRWOClR)_ZdO&VS zfT>LbWd(YqL!ev-KR5^Bkhf!??ElEl%C3Quxf|Dv_Uj%ft6(sB$BzSL4z=`XE_4LU zqxUB24`)~(h;J9QU(g{v0>z!$Wc026C=`NrP}7-vW($`#hbAMd|Wg-ai z4z$9MK>5&<8Z>|rFx@9m&ck9j2t$1XWhS(TF;L*MK})H9$FhH(eNwWf;<~|4z6c^v@&>Z43twa6_&x1 zO+2ofc@9DuxU?lug5W-khg{ouj(`JH1pRrR=ReX>zkx&BuAMsaw}R5?&jyu+a=`Bw zPsi_MPgfBtLlvkB)qsCODINdZQo5Q@3u;3hXbk#W9CAV~(7$S!2l4_x?Vm0`=+7q= zghEgl-h(1g6pDcZ6o>cW11JIf{mpbGp%j#cGQi(PNylGg(SOD*T~^2jnIHr3cUjWu z_x~C~U8o23p*L@&%H6@C zLPH1rUZInRv#lLJk~7fP)wL2chWUEGL zx36basK!sVIHFakyEXB3b8P`_pc8ZlN3eklcz`dAf?hDt-D9AWi?w2dF6;l~DDTnF$|Q2M>bh7B7wa3Z$3dfVJNrw`x5y zs6TPik-7Z95Qsgufdk4PhhXgR)tJ z`<~(X0R|ZKTxU+)C1dTyk zqQzkyT!QvS{>$nhvC^ITQn+RGyL`{%2_LNrlA);Pi&Xk0Tx>8*wJcvC~hEKuxH@zlagO zF-ROY2TAr#LGnAa+ZiN3?hcau=%Za+=Z`_sY)_EfLkko4)@aHH>Q=#I-ts822DM zaW%{J=eEQi#4(1ilTjav`Wv;B_oyDdD+hUOpyp5ZI6tbfD?I)=NWMGD`zC1oIeHR$ z9uAV`VlLePmIDRMH1f3MLVCy;k0o`PmL6(n!K ziqrOZg%M{%mrx4Cn~eWHSe#a+Ze1;W zzc7C+Yu1AUaavK1z3y%bmStOlrTY3{nPaHN%4YI!j|Iy+C%Esof~B3I8Y_j#vm6hW zDbSDnn4uag-;f`>7cBk#g5@DP4P6deGckK+{%@)|TlY?ho<;XcSvU9391tvp{DWm+ zV6a?;MDlNff@KBNgT2t3`et+vz4{M%p7GlZ2L=brIcP~785S%b#s^E)aJy=(Jfm*o z-z(hnW{9+gv9RKe5OGN#B6ndndDpi>B%E4#bQF35_RwpNeoX%l)@LQpK)+aq5NWFG z;0AfEOd(PnPa@vK#6RQx6rBQ}(|RTjOgm^aSnRNXQ=9R?z8~GBnI_iV!zFCQd{!HR!#0}Bz zc$z{c&cUyIl(p0@z)AdN@kO9|*2)mUS(4x$#Nuhj452;--wfi*)b&0mv1T^;Qm$n$ zx(VG6S~D?wX8v!gIa~KmiJnFGN?AAeFUWmZ4nfcdou*3FFsY1g5+C243VoPLu3*4!lmr0u@Xf65_`Uljv{YwsK!b`@*$86y~x|J zUe)9s@{ye1#vXO3?=nUhd>FTtI8S;~co18W^vGn!dN z+4~~#71j-)cc0p7)`Sp$g0^JMVD>FdJPhA*W+%cd^8anta}B-WC}*|R`TL}1U1~h9 z+uNLB>g)Vwzx!*h$vW?4u~{=!=UQWPAFIBuZ}t9f#Co3XJm1RJ{`;h6U1~h9+uNLB z>g)VwztC&0$vW?4u~{=!=UQWPAFIBuZ}t9f#Co17yoT5E{!xGOTXz1F^?)fLw^+Uw9W{5mQ!yt(H*A3O)L~?ib ztp$DHJZsjXXW)L)`ILx{}#FKFDJuf5v+cWeKf{Zg*! z&^B%M{%_|lG45e3_oX;-Z|=>;j(oihb73F(Vne&3gP=5I;yUUYx|}#qCq5r_xle)tE6HZ$9!1hH9)#AGhzlC?b_;akG8Y_p$FMPwF1?Gpy zSFi^@fuG^sZ~5~kS^+Hqs^iG7!w(P!4-CzY2E#7MjxQsqzPTtw?kx?GLQsDhe-=SI zz=`je4~wAE623-U%%7#uPeEAoD)KD!L$rt}bRFq?U1oKoMl z_)_*#<~RRhPD<~~ay?VDmz`YRp<<;tx%Q5J9V&BX*{McccXp_Zf*9gXb3$bhx|e(f zp2yIEydU{_;^o8}PzUnH3qxhgf>1dPA@f6J0r@N_wYt*0tjDYFCac)=)2Vv;%p)wQN!x$)VFI2kTXD%8HonTWysN@L@ zmHTKSoPdht{ewAENT{@cJ;VplKB1xVepskXCSFe5jJP&*gfh?z&c*WFe-bK>VnW50 z_&QpI`~xHI@r>sf6oEYOhJ;E_2r_aH;s(SW-wl(AV1uEsI$M~;WDS#@=n+VlBTRZg zey9jja)wC|EQfv2KX;gn08hvP-{%PvKiCe3piKTSnNZ;MeDM;Wf8H0@X>P5p%=cnH zHTzgStzWXIwf}eHL8+KmG8Om2+&7!WTO*a%`a8aEukq%4P2b%A-_$iJ?oBlL$6Q}S z%QgO!{o;6TcynDpR}Yh|4a1~YoiMr6AWS}~9VT-cg~`0eVd6}^O_MNLOKm^#jIG~3zL5Bc}}$nlfK=2lLNu&_;|s!M<3ipqpcQ0- z2$;Bt>qPsn;<12bFby_<3w*iB&dqgU{LEOGY+KKJ&&Dum27}4}K<`moh4x2JKsDmd zXcXjzsrb55^FXs~=5b+W3DoC@Fo}gP;Q*Z6%eCwa6E|26t)R#LFe!dCOg2L_ctG)E zVSEpZ`+6!&7D8_r12fLz16NoIdoPAb`pe9?#I->bdFS7$!(>L0})Soo<0kc zcyuA0OdrnoMZ)Dinh1k4gv((V2j9YwjN$SfjD#=Xt*qe^nKN9fXAhTUIl`rDws2{b zJ6ww94VSis!{rI|gn{r~>2R4=CS0zf@1j4WqiclAtp?$8ym4pF`mi2Ng51!$U%34KX}Bc7R`4P}0FQ=-%Lw;y zSqwux!sQ;?0!`-`E(IanHJslA7%rvU@Y4GY{hZo1Jb_SoSUA7?FI-Ae%SqqOJ6y(6 zb0a^5H!Emu4Bq9`7SWplTd0@A-icCluTgRs_Ih8!l(* zU!wo>8qP<*FxqQ#xD?vPeb~*l5^tw}Xcvz!c}6^&S>N`@a9OpA`%SII58+a2C-XP4 zC;A3+^Q{h-m7L`=Oo#NW`{5L`!2`CR43}$Yfz#pA?M%2#gy!%joPgFF>}alW74!fE z_~C!Ry@zUsE=G@ovpHMvLTXX(RXjp66^xK`ND#`$UF5SWH-73iV+L?Zqo=^ z)jWcK6fZ))YY`ziVFc7~86gv(K(h!b(JDf^qVH3G3*Tzigb}|_e<{6w(3DyOdOmF< zB%FL6c_?e@fY!F+KS3>9>j-&D|99#=@NZ|vShP63Bp8YBVH-Pn(HLj~=cw0bPA+hO zKd7}udqPDR2yel0M>{(|;T(MP^rq^a>K6qCTE@8*vA;D*2nR z&oe@X!g#oZKM|cWEJEg^eMa&4P2k>+jgV^Nc$~*@j)@WS8|)#!H7P=J)B6J5JUT*7 z)9*wtCvlO_BgBjK3s~<+-+40UCO$GfLj0z&H(ClEw!lvBd93{=Lf(c<^SMXg^4L*R zRdx|qrZ?8;X{{Lfb@B~pHFOTznRy>VA85QPLJq@V=mu9|7aUp5W4?~_K$rDAAJB5> zBdD<V%wE=iX5g(_1ox|$G32^oim#vWF7GnbR6|Z#3$hzY=md-~0W z{tzLaKe7i5*u#0@IB~bV5mFBo@`HGa6Ms#-nYbOX2O5ZOqjnjczb`_PVH?;kMo9O| zyml_}+=t)DHu<5wJzf{^(2q5c;X#B% zp|#Ln;2LVDcR+-E6Br?t;ESLLIR?SRBZGNeqaUF6@w6b`Meh=^2k|^K3;9)eLcTAA z*CjKrq5+R1q$Bi)8c`9FH=26~k0EnRgyet3YZJS29j$d9$Y&8U7ZRT`2d)s8 z5guDq^Tx#Q5l_n+DaCR`^7m3BrC`oT`3jAJnZ%pnn{1KNI9H@xM3+$?pFL6>i0jew zf&=tEgG0>ON3TKNNO>oBq-4i4ko*T!Yi02^A+A90J?KvFD%_%;fPTmN5%f>9$Cf;H z?&3R0oCW@%{uTLQW-US2Lv`XrdU?@pXd`q0l!Pg8gj(nFb{dw7l#!()B{vKy6DjN9 zJn<)GBc&Od2|bRd4DkYbyNSCJk3b{QJ=A_jzbh9hZ!vQZn%p8%=CzKLAK|Muk@5x% z0@t>Y{CO@?GPjD9Zta+l=As^pe$z5i3e)=t&eQuEs#2@Kj3ynqH|-;368TNMWk74o zSo;IDhV&}H8S1U@-)Dv!nv-4_tjD*bgPjNXju2;qByI-s1Iso7XW+g-X!q4%hpT_YH7`r7$gs*Lg6HCpf`j^2JfSW+UxH6YnDK_lW(W z0F-~seWF$v9f@9mWz@T($MBaxTaX`4Wd9`Y4djQX|RnI8djJlu~@jO6(#diu%G-UXMnEqGP>eA2F*FHyQl_&3m zUuzxl7AJ0lUwcYh`srBfjJlJ@LN|P$<5BXnE)1H$`hiiBb5N9&LW@Ed;x$kUG(U*8 zMr|Xw?;~H&(UX+i)ROH&`!f4Ai{*(Qxa!p&|^q45=H!eyhLa*^rasjP|4xSJt zTj1K*DCs;gO0s{>`vbirXn$(?>2-wD^k%>_<|NQ-FooCsBwpiq){;L#wKjyA6Nu~5 zD+BZC8pbM18e zDoUo!ijogt^w-RW+r+N3qogaEAH9aB4)HpA$BCVYr=ri$Q`ADxEpvFEWacR}VH2<0 zEwAU}&Hw4yx$(uC=GNM@yY4Ft-c+ zBKS&hjtT5loEei2_(@6D58}lj4#1)x$hW=;7 zAX7IL<^JP(viaEtq7=8uV6o{f6W_2Ybx6swpXI_bts>HkKUx4D*qa+jDWX=hC`ERfXd2u{m#`%-zTON%Uvodkeomo=CU=*~tq*0`Z6FZ|K|inc??(2EN31?Cy)} zG`H3!+Dmp7Hyx({FV*LeR(abL~-(o&~b zu0{8`LS7Rs`Zw;!U!Cs;*VL8k9?86p5BRzfeFpR3Tk`3Ts6Do`gg6mSLAK0~y!fksei^keCa))@0x-iBhZa_M7n{O++tp{3DdXfXQqGG=XhEE!im7Ej3k{bPyP z_*m)@XM<4?L!NQfV>!MWFL{d%kLAL;$8v`HUbH5?46M5jLm)q%_n0a4-$5^;74SIF zn*|xDHOI4n_yRc44_*VrjqoKAPo!Uz{bry)=^XaF&R$*Uk0jnhEdlc4*@LGlYl~1H zMP85kuP}&u8JI{d41!tTj@kFn_trj^j`*w6PlmkIH!!2>dd>#FcgFSGt8wd3R-P!c}ZoL(u;pI_&quGEt7_GQM0Xbolu zqTR?Bu-5}TM%oy=MncHz7B~x5AOwh>!~|Y`LUF=ytR}>Iyrqa}B@!r)urr#N6lKocT{@>6xrp=WTz<^{4h4 ztUhaOop0`|HPd6&g12%Su9o+~A;V9hC87+JBN6V^QcCCpP%pEPCR*jbZFa~ZwlWNhjKp`I2 zC0Zt1IAn>f_1DGw{>ybb_n5KvG}^dFG~Zi@mRYa_K8GAVqooKOCO+yJEeZc3)_Kt7YWYOU6F&AuVg^7voGI?o#a)gGz!y=sPa{j1_vt<}1&aU2&di~dEd z^Q`e-?U7pFt7cf&zbby!TCMAvOLL;7{k+#xbMAk7KAZhwO>=9lc`9eWYX9hexIX3F zJTJM1l%C*Jc+52yEZ(ar?uF?|siV23C$I7Dcuha$%zq>AX}K1ix0Sponm!fJjnwS_ zHP@7%Yj>L;Exo?^PyV21t#^8b&-4sR(Qjqs{m>rYf{}kqd~iv$%v~BS(P&fj26_{9 zKgs8bG@!;mm^p&Ab^Zo=eyd;iR;;y`#iq~HmA^#G@Bbp!dDi%^_DHSoRWq#XUlqS< zt=4r-ue;GQ=U>D+&l>;L9;x-cYKC?FtKwI!)w-@Z@Mg?&T4st7MRPO$|4FUaWnQzX z=5?C+s+=)WI8ThcOszGIP1OJ2V6HdyznSq**XZ7_n_+rVYRYxyb(pGsb4^OG*)#ho z)%2Tn({EKX{*Y^k&lMvL*-tfpjz2YJthrfJuQJY9XXdZce)!Dw1(~C~%A1z;;d$9N zcZ}rvi*uXTm{L=o%e)>_wQsIT={0+1Kc$*}vu^sWYQ}x5#mM?XFY>ZlO3&ZT#~b?$ zYY-#tr^kr@j2QlX+8DV5U0@F!{3=F%g`Qu=h|jDTnTHOb-W=~k)(oZhJ)EJp4JJ|> zOK-;P7|Hi_j9euzOFoKqT8m_D2I8vpNuSY)~UlM(#JY->QPxROV z;)OAi4t^!R3#W-^z*=}0ZbG_6oF6TT7C|4bv2$ewp6_G$eZ(>H46U~+M*5?V&>Pg2 zpgqx_pd4{)Gzi{-iTK)4b3>~zZy~gU>gTx+24m53&=LlK4>SO?zrvEMuM>O;>Q&!7 z(6u^K`-<7q+6K^BTC?^wx7O5q_FRm-k1F$sHNR@m_CbuCG?`P#x`x?v zt)+&mA*u7d_nNt>os*g~rPfm>I7UoTyCyY0ooV_aLjR1-nyFTw)}9)VLCU)6f1UPc z{pupIQUP)ojg?P|{d??wFLkqGU*XgBt((V+kHP+KvC@>d8@R&`@{UGNJ$Ed*`g+4D zYU)+rC1PExGqtanJ*@@O*Ew3V_BFTG)O)=d*M?u&NUZs7gNTlt1(tQPYx~ZzqV)M9 zR$BVT$}^W(aW%9WIu7PS%aO5iV3eKulUYyAg?tBeAn$7FSF+^lTZZQg!>hj8#JW~z zKJVkvIoi{jH?i)eHEUmUYfZfcsU4kUCnIw-|G;4Nx5Nu#ds;@GtYjvjf6|<+cSkS$+X6xQXKG*3Ioi`&d1Bp1Yu3Kz)|z@VQX9X@PDkcwp2OfA zI*GF=LErPdAg@3?3O<2DmVO+4Ggse0`X3oyt+yc7wK`M#iq6rV)~XTfK3cQ(HMiE( z>j#1CrxY~uFjVQkB34ctWTsz_^*-c>pdk4WOFwDlpSk)r(wl2|)wdLMtP+n`W>0G$g3i*KwXeCgrrvX`bwQPi#G3zVP+%+1*KM(q zQni*6^}G!0`jl(T+?;QEt+`nJQAke7U%(NoV;Fmv@Cg0-Mtt#1cit24E)m_4n{1D&Ha zYhQC~O}%wss=-yxsd+PlzWZWj!2vs8{uC=WcJcXx+8k;V$Ol^bTP(Ty#_Bq1>Q&zg zVqL2Bwb zhV6-!p0E&Bf+LKE39t(`!X12RNm=$749%esdl1RR9S&;hPMPN)TGd7jkF{(v(q z`7u^Hp~@cawa4yQ`JGw|^3&w&E&Yv_TzysX=(Va>eI-y`t24E)m_4m!qObdC&Dz)8 zT2t>9*unEx(dV@0dkos5H?$7x;T;~^uhGk}6Pj51-&=C^?IqXemwMHgpIF!GOzkUX zPiqzE>pohu_BFTG)LVyIH3M(1UGqi;AEE0EKIXaGhS(XF!Bp}-Mo&F$ExGz;z(`Q9 z`X+#`)tTB?%%0ZVK<8-9+SlA#Q*TDd%6`fY-Ul?#ZgBKutn5B#r`P#dIr}ru>r=6^ ziP}K&Uo8C&mRx-c@Jt5vs_!dQ*Xm5|D`rn?qv-2iTC?^wx7O5~n_A%ucB(Q*^Y;wO z9E+6(cuGP|*h;-KUSMMcjTAitV#q4SA zE&95T)~tQatu^&-Vop=`Q|5AJ&G#C_qV-s#ybEu09qG^-kPi|q{fw4eeeaRq1NEx! z3aV>$ruG%Hr?p^ux{ubZea)>k^?nBn42GSs=c~w-p!`o{MiD!m(dgt@DfiwJnMm9h z?ppe-EV=pylCK2ys_z?A*Xm5|D`rn?8|mv_TC?^wx7O4f${as~-ptWF#$Z&%C$h$% zZIvhDO*{pbLlg3GMo&F%mRx-^pa(Ves;@t>uGN{^SInN)hSS$MTC?^wx7O5~3BoJe zxmCfQXQieLt@cE|HHbiMFal;n5DWvepQ-wvx%$RJ9H>`)PeIq}OzkUXPit9Oud}pf z?Q3qWsW-mr6B&;x7l<`~W^kb96RBJKi6qzJo}oWO{yKpE*7J$<>%-#)T|ark-*tW> z70}v!IWJu6^+X&#eInU=GgqZ)Dq|ocYGqj zuP5V#|MUzP_hLnNo|M-Rk{> z^@_Fjve@*Q`p&i|qO{s&S2N#tlFx6acs;{K;vjV0Y2FLYvIp^oUwE&8{csz$-{9UF z97R{dj}Q*$VI!FRgO*%A>N7!TS z<)x=;r2@4)cxF>yYVle<8b9^6uM05rf}#D5dF2cpiB4wDhb7{q_WS=nzZd`SXEx$Y zL99e_HE{FVf|G4 zd30a=O2;;FQXUa2GFuwoYaTThE_&RM%&_~x3itQ#6sM1 zU>v^-B~IRg41?mN5%oCYNO}c{ClW6u-bCzzmM35Af)0t3$LJgAEz}LY2svT%XLc43 zkCSU7;=}_^j*OG^qvE7Ax))te%?Witr$7w#9OyQ<%DT4Xx#`zH6Gq2Le`e-}`;+6O z-;_AX46(%CXjd4vkoy254K2Ei8Ozxh&5ZU(r=zE#^!hj{1WgSsj<$i$-~s^#g7$<- z@EhdVz+;M<{b*t{SKkR(2kO=OZqT(lQ~Qe9)7os%Sz5F9HMiE(+Zd)899d`2JCG~s ze~ROG3&crt@P=w|4g^-fhabkv;}ZWqmHxrpf~<|$)~VRYl*DQNxYceboh|oDyYxeGpHN>R`lOu=J1Mk)>U9V@l~`3^dcKs%~iO{dk!KHygxD{)X&@o=1048-Z3w7eOZC66i4qV%?|sN>OWr zW@Vlal!D#E;^o5VKe6U!tZK%u@>=U={IWG>@Bf0n>bmr7|K#kcUHdAZ*6)tAvv$;< z@#7!krSYD4c@s*&Bbd5BUN*wi1M!lCI->m##>*N=-WxBie~On{`{LzY>cQwVYT45Ve`OffqgM1K9UK4%y zlAXk}Jm=5H%f)l}F2suyOd~JwOS}lRW8~w}0O(5WiDsu?4c&-(Q=5Hk8k(zxEa80$i?hWrI z$jqz>5{7m`yA@85L+>R>JX#l>i>51*AdO%Q`R5u}OpxxC6679Q2px-FuALw;brQrE zc0+Dx?vxG{x#H|(Tjk6)NA2i!HmATPG`bke8YV0eDA|qiGM*4 zP(MSw9JatDxB&rh0AgScT$^a;=-32F{yaezK;*atDL0<`fZj(>QJaCbMz=s=;@ap9 zNMfBAzIxR9qQ#jv4eG)2g$dGO5i`*2=tXo8x&-RO=w%7g@jE*Yh=sWA@&wronIZd% z1ZhP58S!~~1&O~Po=v=sxG!3nyy)5l{th_LN0m=}id|ioT2f z2I;pX$cW9{1IP|#f8?=-x-c2WoZ$TMGPTw;Hc@|SFxQ)2bG@l%{eM$ap6O+Ko1T=K z(raFasoFQ!r1Y9Sv!7B;zgai^RyE_(#}Y(2dGt@r{AE3>@9)Is%)hfHExfO~CbO<; zJIQu zy1*>z{^&|-pIzd$21Ty$dZ*urS~=zfUQLj5)Mk^P!J8MfmL2a=Y7z8q!(Qqw@Q-8d zP_!t$8?Y1KRs1{QCs+!1Ap}lCEUW|HyL|4tmmn?S7_l!J3KIkDT=C7vYmngl_ z@5&^~%Cd>F9o~U*Rn8GV$R^4y z;$H0&rAh}oLy3Qe1#r4^qWqzBN|fv9p^p+J5q<@K@a@Jm!gz2{?VTt$U;%7}Y@Z~` zASew@;r+ge(j6*8LnylhY*nWV$sr5k%pkpD7dS-MToMT;6@^|Q0Kp!7Wl%C9d2Pz*+lv5`X zB@})>naJO-OyticiL&BUqU?kE$MK#{lo4o4>ZS3WW=$u0U%(}L^I#w~M|xS$@%Wud zls)9x$osNRYgbqsLah$Ha`2S;XY_-au@Y@TuNbx4_{N^KvlZV=;+yEyUlZjQI1Y>8 zdsurtQCwg$Tq56#`oVn2bR$tRpf>{(rAd&TJ(2jxBcT?x)8r2={f(AfeI@X`3+h#0 zK2+E0OzkUXPiyg@duh$u*W6lD?{e4~ZKt-8Z$Ondg1HwVi4uWY`6=|p+}cZ^cj_hm z`<59q=(i0|lo=5H_(dFFQZqecpYS@R-xc<=&Poe<*4!G8!n-kn$2l=kYNO-vt|oR! zvh#>|E^LHC)DqDpVD>{Tx%$%KnFQ)p-zZeq>P+n`W>0I=>FX@5S^Jt>YwDc{V+;~G ztLD=THpC?I?@RD{OTn=exwRig?>hH8e;BWmM=ugVJ!Q?zTi{(;FiFlE6fKk_84D!I z7V?u&fP9^$U)z$aZx_AN)YPlKip08BXKG(Dds=HqU-#0QwXeCgrrwIM+rT})J+Dr# zY%H84E#I?qrAU&LXKpOD`qcc%_gMNTEV=s1;K>QIH=I-Rtp;)UXLA;1C!W2!p7;wmM*f!3)BYMuu0Ahny+OU|a|T_jGqtan zJ*~B*r*pJs?Q3qWsW%c@u%F^!Cbhu&(T?}$w%PV+7P@Ah#%n9 zo-&aB0_x+@FUfPz&*;UOpa^^bx2H4b%Ov>}?GDq3?}0mL{s%e^Z89fG3eL6Dm3RY; zgYygR?4QT;^+Mq`d8$=F}$ok)_8P9{m+oAi%!?NEkV5AqAA zlVrvDBxy_So9pa*m3hDO97jJr!|R!K_3_+CE8uzWR+7wN-8ndeuL&LxdfiU(yrp&s z&oJU*tnvCSNd{d^lHtUk;af)Bl70J~<8eg2SfBVS%3eRvfBy#iQ}ba?Q#@<&Y+!bE z&UKUg4D$l%N3q8sh^ChP0_SCYPOkH7G@3nj;GaxCiS^^@Z{j>Pu5nJd$+dpLo&|^( zvS$>0M4X>B)A7$_zbn+fJDVi6SQh}tIafTCpkA9ZY=$D7@#jnI$$3uW`I=hQ%Sn8# z!E2a$A!?cEm4HxclUSd``OZKM_IL^{Ioo$ohP`It&&7;hcwLzjPHiJ=GD8>6){^{9 zdSkfe?)b`c9q&@RkGCDyo`pS&Ug4gRS0sO%YmCNok!!nwZv->$P#aJD3-Mj%ZfD+p z_Wudre(GV=YjeIfJZ#?_^p)PpZ!yxkzQA4fYd-wi#6{|3EM z{pd*()YQA%)4o@5uFLk;2P`( z-P7!^w&d#D4^{l^UiFnA*0nlQ`-;xdp4RHp*I8P#_BFTG)LS2F8pLuhG;eBfjX6Uf z@?HbBfF$`HZG<)tOp?BE|3Q)@qlNu>&!Tr8b)^=Arz~}!Al?%p3$+aNcZBdBNZyBh zC*C(eYs2w>MePo~i?EVbq0!8P^)ME`fG=Zs z4}ih2n|vvH0!Bd?gix#hM)GsYCiC^q(FTel{Z-?z^XjSk}m}pa{Xs5rRP<7YS+HXr}ZyOBulhG{ST9+ z5b-hyhPLG27(Mk=wdCr%1_wdC>N^R#R%dEoF?(8D4?0I{*1qP}ntD5f&Q>OVV9$FK zE9YOsJ^Hs_;)!`lE#<6>uke_4RV&u@KlezMVZD-NQ_p06b~jnl!!GhCPzk(yC-ZMA zB};WQbKhisRybM8KyIiG{h{}#$ub(ggdwmP>VdmgvNRoL=L&HQ@n_!2atGqI=aVee z&?@LbdRdA0&>K&@int5bD7}RHu=D7^MN5kL-_`xaA`&j6kWN|W> zh-Rc#6735!!2!(v7)!3cw&Zm|z3OWWx>jduUom@HD-SwLYu3Kz)|z@x%uAL;19#4< z`8k6N3wWFs{riM2eEH1gso3jPYhQKFn~PuEOV_7nhUqiaI$vwk;q;RKN8DS0Mb))! z!_!40p@fWz0@B?fC7@y;ia|4U34?&Bbf~nn1&TBZilC&5A|;@LC}NLR}UBUjeni&jUmOc7OuFB=|RWEYMvaLmr*bXMiJs9^k26kWc>t-Rs5w z8h-x}ue=@|U4ehJV29{!({^Vc{^|4`;%!~b{P7XLwh-2Xvetdu+Vm;BcKhi!cb z@$~)|aZ&$^@RjoaU&@rfw1tuH8{qmNH~(++$NyBH51<>i(5|llhAzngb_2KowSde( z_*+WhLv+uOA^Ib5dj<{B&x3paQTY2>!SJ`FK-xtN(d$Bo=!BC)^dJZ)f*&tn9pEMS zS3o>x$Rh~iZ391PKt1?b9fQB+bz+GA9^?$j(~vJQ4F0YcgogwEnok_W*$L&BLm5v1 zO2GXg?{nZj2xVpfn!x=C{CptoRX`N@p`aW|Naqh|hrFi%Cg9Hv_1Oz}0(FWz4u5|N zq&>vZ2fs$(x4edNyq9M#1{6!(&0LUWn+YIeTK>LdTTHwY3rXWvANMj5V4{{U4{Ry%d zFav1>A zVV#gB2jbO&w1+r50r3!)2~q{>WdhI!_jbs`9OBGE-0$Fy0(Tj>TOn=`#90Js2Y%e( zJ_`9}fLj#YMIbvt`hi>xXoRp@;0FP305gCC=cP?x3ALjf1TEh|T(9|HLn z_#njD0&X90cY@mk+({rC7!v%7Kz@e!6vz_`_-YLGHKoz-n$YNmAm_Hy=-bU`^d3MA z@Z@bY`bh}e4e~aGX@NTt!j6I)1>s5{Nx-=woP7t4?rIL>3~~an9dHHs8^C73^j;c0 zdq0hyw~s~_2KmX7M(4GHaR3|wZgPM|cZ4uDki`(T5!@CK<^k@v;Fbp25AnLeFB0Ok z`q1e7zBKwzka&7f7dh1L_3Q_zuiPKqjCN5Dr*XOQVMXYQRnCT*8kQ8eOiH zM(=n8ZES=707L=jX@~Ivzb4?vK@I_Sg4+`$3xvypECA^PekmX=J77!!J^;^WFlK-> zKp21ycnipX0c#at6F?ZS2(Ww!?OEoY;5Gp_@g0q>2(W%jqrU_g0CoUByX=k~rO~gC z!JGql0os61fs`Jn(PgF~{S4FrWEbE7dXXNDS)?NY27q(GAAm$-7wNphi*(hsi}X7n ze*yLbjP2b#DNban582Jzjp}Ca>2{1l_O|zRBRdCpJ5t?zyvdICo}M!Qis$I#eU#!y zU5a$n-ZOv#Ng=&ofIpQ?4fdsw?RNSy5^C+$vGcX}^QR#GmDrEs;^t4K`28#Qr6^1P zZ}AWIcKi=w+uAcC+Wn8&1_im=`@7mY*!xpdlxze1Jnfcz^ua?><$o^ZFKHE3{*q4q zKTjvGVh7#k<0$Lz=P2uEA831&;wa{|W)g~@pAVyNNF)RM0DtHShhPm7$$|=H zlmApegG64s{x6DVXoxh$+tJ5~A}uGQC?n4--qX#2F)%O@Z2kO~^vyQV$IoLIL!tND z`~S;%Fm>(%bGGs@HZ{*p?n#jRORJ?fn&iKHzOKGiXU(X9+m;PZ< zSR@LILt)V%kPHW&04_8U0Zt^5=}pAr7y%dp0mTSIVK7JxGZ=+J;1P_3I3xnSlp2k| zBJoRkAR%u8p1{lrk3$jBL<}=KGy#dh5%DNyrbr?JkH!#iXlB+>9uAK|BXP|9F?bvS zjYnb$C}trjGy#JoVDUsGf>}`{l88bOQ3N6ui(pn7OT-~CI1C1lU#>rjNI;;_C`gFM zEj0y+AtI1S93+LzmYRjfU=dgX0umD;BC{H3JhYOCfaDk)lDOPh0uF`4U?Bq(8bQP^ zwVQ}WLiSiZM8jh6grzRPK*MlI6akM$;PGhUa*ski2xtTjgT`TDyoordH?t3+tw<~y zg(RSGMCb@4W~q}HjmG0}2qF@Vfi6MdQA_=Wg4UxUBMcUYN28$@IH&<*RFD`fj2HAd z6obP-RR{>&Qa9pJcq~*HhlJikV^CNk0*zkkQ8W&XC*lbN7)2ryk3px1Sl3BgF;~l z*k#SdBN12(R1kU!fkYrc(+GGZ5`{rQeV6707K_3|9T^>lz#>5Ph-fTK3?z)h@?hfe zI5gA~G#!CJVHwJZ!$Vpa3Fu0u@)HOIBp&n_>V;s;CFln@5(%pSVznC&CN@fcJt{!ejri|*(WJ=28#|%lf%|+>h z96f5H%8-}S1iV1%jhvUe3^IA`gZk$nl{S6%U^PI5y;BWt-eQ2reG$E1>8Jss)!fDF zUa0{>JH>9;YREt@{#KCibzZ|=)9;@T3v4q??c0Ito(VIAeE*+Z$mLu}%hG9Cj>6)= zxH!d@WNyq-Og()Lrbk#t)>6RGchG9M+H;mVbC_i>iov1v{0zx?wRe;ubN$R$6G7@7 z1Gu3r5g~(Ej#(Ae^b7S*IWL4G#EBG={?&uJ!t#W0{i#&!o!0C zJUqz4lOa4Uxdh8P`PsYpc>iO|on*Z1y{Tj!vfO{~6$o?l4)FhXfxe#qK8%s6jH4^X z(Szb->mT4CzMPi?f{9 zG`~6f>;1QB8kNa!htW%l%5U8wEgom`GiJv9v1?><+Q zbk^7K&V$7&CimdwX!mj?{%|z=$%ZC)0Eu& zfb;OM4851hpQZY{Ws8cIn9>KCoV^_p`Sn&T&5=ILO1WpXLXn)g=xHBWBR7nqze=CH_|@1nz`U%nVi&?udCnK_g_{2Ww{M({9s6fx~r zkh*U8T7(dj-{i%&g>+@!RYQm}x$oiekS>LjNfrnxCU*@RE6rDX+UJE(VsfMPIsBW% zc3z4@Xfe6i{DWTk%Z`(m5r#}&RNfk|MtM`wfY{FDuPCJgiG)XyFA#f~JV*G5{%>LH z2VW6~ncV7=V1bm|j#M_J6O)f8_zE~pAqT{eo=k2QIGvMy#p|*@lFH=K9w(|of{0%a zBabtA;Of`GdBc0F0+CTne*fXQL#Z)`Vp5UuOs;L6(fZIrxwQDS^t&)+d|xS)B`5J8g%&Cxh`_2Gpdux-&(8-`F4;mD;(9!(Lzif z-CcOhW}9Ky8MG*qOTR8d>kY4Kx{8)!@+7*UjqG`s#JgxECf{;9{`>`g#oht57LykX zeyB=)wdUe?v>}tf418Pb-IVc}1GAmU|902JKWE&_nfGzVJsj@e|5!IKAE$q; z5EOAp&Khnx4q|d*axxT(w7I>xo42zZVp=ko_1E`--~NF{ z3q>BXO60$U0rTS}500;m9IXRuU(8Hw!9ux&ByU=V%Tx}~8J;2r2^ z?<+20M+O^Plf6b-)9`UEz zQ{5aHwRVLfm=`?yBT;a{4+r=K0zW?C`d1jkpWz2TJ>XXlkw_x3u&}bS!LPS!6FEM6Y6&H+?P5Y%tUD#Ykm=EECQ%@2Bl4E+g~5(kQ( zr9Xqh!;YstJnJwlRnTZgqZn4QK#G&ypN9F{ks%V8f&L7*KZW8gMg~Q6b9RG4adRC^ajulZ3Wq{vK834#&vBZsWC zTYS0o&KVB>MEnisK824ui)Cd8F zSu_~xuwVj&+YO3@WkIoHIFVc^ZtN-{9waY{AGL-}2rEnwL5d>XF&?Pv=t@*QsvGqL z)yvvPe2(fz4ItlPhftp|qo^tJ4CWVV4l|Er71Pu)->Mf19{xcmLQm(HT(7v>bM3mf&+9j5ZPtfi(HLp8Ga4x?6BZ$imgf+{ zh!WRgC9#GW_RV1>I8lr!Mx3C;Vvbf~4Ob=dkqE0bjnvVO1fm=tb{$#}i_}xYY{SZ8 zNMHcgBa2~Ji7IFftNr5@mm!dFo6y1pR9Md*PPD2NVKbk=CLtbvqB#_0 z$hHPg!kG}nhyg76I-7BtSQ2hG*akV#Se63>l(55E69Or$z-GM>3kk=zN&`p2@d!y_ z_`~jKIa#op5J|>Hf+hqDHd8z)ta?2=31>_aMsGD$MYBVx>UdJP${M^TTG$fFp}-b- z&N+Z3?7`{nj%-nKoP4CDbJ&QjId?Q-S|Zf(n=yxRn@GkaaqOz_3XQOqLzHb8bv&0I zLvu2J5u%<;kS>1;SL8qnFq;(Ep;7F(u$;&j7%ns$IuK)v zW5pmjSTSnQUU7mH2Bj0emsJ=|!m8ngzziBT7X?;mhItw6oHzoW$VC!jS;H#8#>vjg zf#F1RbFU)uA^9<@k!#QbctNBPN`#M$mPAXl$ROn~@+bvlA*L8rf+;1;q2{qP)FPTr zEDs7klWI*%>!?Hstg5YRY47SD9zpz>9-55#VdF%JN;!9-t*e`jOF~1_$aMdq!#1`~l!TOG zNb<1l?eNG98<&x(6D2I_Mtx&bU;oUP$mlcq1&vJ)A9WABGRbOq+|t!;YQA&-0UO&> ziAj~!HBI+g9`$qa@gF+;u8(+&i7+GxVsKpHW$a<4SP??F5PA(5vt=<# z@L~gr$Kkn1yEwS2B8QKKH!ck;i`4{0TTKjW zTu)^UdoB>pi47Yfe!YlRC59j73A;@Qd(EqfCgIcw#spRzm1QmZAm#uuEONCFiI2D) z6LuO`n$OCQkSq4;#<%5jF@4()>b$D%|6}5`U7} zN50Rsmgd7w_a3 zgG)zr#3!^B-(M}V`#O!?)ui?=ZF)wt_v;(yje-r_C@*T(V*1gmQTw;q{gkWThKx(m zIjPy(byeC%O}XL9#VzB?UDjr&^tlzXfz{Z#l_V%n3>(+2(`0;X&9 z=RfEDV)^~><7Xbu0=sjUxaXYPf0zdbzS|_w+oKk-HS;!tR<+(TJ*$FzD#Ecc-o~GN zu|nC>+Sa?u(xLvftV(jxL*d90rJtwPeGZZAt23zL{yDs%4;e5qc2!!FVp&q*k>jnh zab26@jjg{YYbL&is1%%aqo%oJXC16`TG80CRq~?B>aaC+FG>iFp<)oE->>e!l7sG&Rp^lOcdwbn|S@@ zj$xZ?GZT2T%asZ|V@F=?vcK@-rPOGfH}?9aGI_C6PYvn3`Z#|Ezx zLE(2UXzzGVsO%f)tdk;|f1WuTVLTIkHSr&?~v(w`%cUI7V1c&=xc9 z*><-2ITV{tTC82MhacmpTXlYPbYmq^<)?Oc$)&Qfz47)bm4U+X=m56J^hf-n?$dX^ zU+CNDWB9b^!?EAO<%S;O{@87S58Wdjx+cykOppwIyL>S3J8C34j~u(A5Ic2w;FY& zpHJe@yZNLsJ^Q7Kr)o-`$o)G+0_O&4_=MJQYxJ$tg$m-Vq~6lsaEu>s_Q&_0yLA(7NA_{`8|>55+p{1P zI<0f!wBJS#=W%6m6KBm~o6x5xx+{shReGH^X+AMjC@$1>E-ahnLcNmn$K!sN zHn?9xspo~6Klpr)E+S+eTV}Y`AhwO{aLf4yUF^#G;(p#WJY(}kwGN0&^e@|1-e(k7 zY1=jH2KuZ&&Y69azw5!Xbvx9mI4nCP&+QG(y@32-;%;Z0XR-O@{JXTBQK);_Uiu3i zhSUKW^)<&FHyX&_C0NWaT5_e##a*(hpE|2O(=JwfveZ&J_?Baha=`IT8E>qVWY1XM z+jd!NV`QpeMIE0Ha(=R;^5V+-lfm|T!Nt5b#z5_+ULL<pTfk3Y9gLmT~j4?$|rHgC0E>@xbXx(ogK}hyLf}Q zq-yYEp-4=dJHn-_tKn@<@6g$IDTOW#`gVvddC$+h6ZJYQRoD7%<$cX+?>PUTV{=v} zt{KVS4}}g~JmtPCAYc8uG}7i+aCTB0IzxX?8!pN#DE#}2{?MBxk($p6LI@+R&xaJc zAKTjXIg#R$bIjJxZ+aY>_fGS0bSTa;CwJ=WVV}Ei+g_O6ELdwYe%GW#cJ@rg{)I$g zyPi!0qF)BmG{3C8AF?9UJSS*BJUSUJdW)aGwP!2MWeUMgPdo;$L+~*E{M!h~<0nkxkUQCtvUX)O~71 zc3@mUapnEjx}($9txsok9UBkgSgzJr6|uP?~rP_W{$CLDfQSK2Rq#A)J!(gP{=u!@`AB^f({6B=9|ZuuU#HFq#K(sCiUe`dl?(DZkS z)bJ@ozgrg`#PH3kJDjWOQ?)MZ>stRXKwLM16Z?DFHSg7J};9%0oMudcihszrQT ze!rJ5{807#C6);$fDNAH*jIxkJsCKS_^7d=0BYaw-#5oO#GFk$KNaB@Qgw1~!t(n|gOUw9 zbL=mU$%{14{tj<>)0;N&9x;b?I{EFlniiMV8O-Zv33~OBZ)|+kww~c-xn|UBQn{;C zG~;MIZq3v{!pr@{bFW38mut51=XduO{fd1)5=QF3x_zWxH~~$1_M>>a$hybdyD!;D zQhcL2W2wC&E^Y{N^VXv)?@RsPZ9&YwoRA=P2R`B_&0kHn+JiX4={nna-}26d&fxB< zDQCR|o`@q&*?nilTpYu=^do_;ysE)+dH z!$o*mU?$fPXDnk#b1V?{;xkK1meD!NJ8|CZ;$o}<#ys&r&dU2)nuKoj(3fdF@q2MY za_M`29-mG8cwkEM$(^9@@j9>5a=NV6$o-<$MSOa$AeYFaaSwT2L`!9l`-i-E-TKPx zxG(o|#5$Tk8V-)s6!LP|eb2aa_m_&l&!4w(var7yn^R+?x;ykx6vpVypryB}+OTfcBhZ|81n?KzSM=B9+zNABI5xvpHT zVjcW=|2>Dm&!ken+VSX5Gh5H*`oB8+ZuaIr4mXO+y2%5#<90p0z544rDT`*Edv30B z{+51`{yQ_{=T~VwTCKljZTGmj)238{@ea!QQ#YOfI3sP%zK&%mxwkk%& z)^<#aifj0^XDnmOLRKM0wPu4Fmx)wv;gyBmnxRh~Vy;TX@E-j6z~rO$s_5y6`SqV( z`R~Ze`M&(VyY}c!Rwi{sw4?T_vzd5p58Dvu<~R zJ>PkA!r=neyhhyZ1h)~6Il*QJ(zouNrrsti@7L!#r<m+%1rtl9I8SJdx{8o#wC6Q!{y$HYl{e$~^ym z(dXC0yNm_6YgY|>+B@v{mg>yAcBDTyW0YUG^>;0~BGB%!!gP$NO^OV+@F10^i?s4S zzjmMKs?_XowvTpAecWp{d~oxe%=|$g;!HZ9`LJ~Qd%``(*|l@J3GFu{Y1J7X{*^b5 zR~GzAl55Bvu6H_a-1GX)E9;&gH;&7fYN zy?JWE<@lE^YPwPj@5>B&gUDrdcPCXOA`8!5VB202wJmL1pL}uDH^&szL$0^I6r13S zq!Z65Gxf>_Kl=F0;CmY59Wwd4d>P2`Y$Nl;rYBw7cBvie-q)Q`u_XOGg*i3y>c*AQih*&N zsPRr}nUSPV+fHMTYptmlQn?XrXIL~l>OSz}29DJjs`BgAd3O;TN(L{)CLb8##R_w} zlk_{Q$BXapo!g%zy@A^-!npX76J_tWv0u_Rf0t$quFpEVb!9)s&wcf0B~Jz&P?=uS za&&zD%)x3)tykus_oF>>19?W~u6^0y!IHZE%7$vHd+K!#G2%!B$ zRmJgCeO`^~c*PZ7^mO4CdZ=Vg-lj|U8}>ZEya#{$ieYx2t?7)hqSvQwSI`@i_WXe3T_(4NUb&sC z6&TWKydKjgh&s1^V2|N_SNrU)@Kilv9+|@Nik6OEjnF75o zZI@yn4|3RbV8?D(H;~)z)y0k>_O4RX*}B0+bkbGxM#$wgG=2fxTSq;7OD7`&CEFf+tL_ zSL}Y#GIQZzq_pAs)mdVKuLdcJzdViPhkvc?r=eR3I(1x36nr@FbV^0~Oqs6idhL_O ze(wWQVoRcamG^VhxpxY`U_Ufon>N0ut}|w=>i#9}tz%hN$JDQijfWPAI^5japS3}k z-6<}ya`@8Ia*fTQ!*Z(-!F~T(r+%ZUD?00 zBN*4gJ)5e^)udx<$)6b3!!q1>=0)B6=icl!n=e%6K48Ca?OK=np);hXP63!VtpR%s z4<3v#`YMxvYfO#io#%Gxo0)n4d`f%ugX$3f$@3m|(HYNo7+Y>%8<2mnNBlv|?M+(S zhcZjvQc`yu!6<$&a+ce6>7{mG>GFOd3BAQcbdm8$hHXw%(5s{-#hwN~%$}?_$A8|v zy6>s~w4R|?Qna&9MtM$_*ipx#^dhtT;8loEuMgZiS!r>cyKav)o7L*Oc9z$Vyt&{i z*gsZK#p%6v=5`4izSLpekxi+izU`P*88_RXv|84=u~k&BXQMsL46)P3F7Hor-*vp^ zM9%H_512za$4=i#)W1=lnrQbeP^jgL-kM358_(7rP`#lxV|hhYCdGCX`8Lj3_Td|2 zPmh-O^|hMv_Gfr=wKcbuZP*Yf=vjRFg!(lB0vpLDbE4F8{UeLX!ACFGnI*?7H+;$n z2spf#XIv<5ugpN;mgl=pK3(1qHFl?`?+MGu>)61a<|gU#UZ+vRZ7t?D=~ZS91DRSA zQ94{K)0$rnHrT(O>uJ~~R*=~Dc>HvE5Ps%I>db;a4YDzj2veFxVz_vn#y6 z%QrTydpt~jfyd^jt^VZ%)Q;ld$c=eAnmNkfe?D!OGssa2zcDig6IB>!0=tdlO%f;}`=tVP?^xY4qo?VO0_=#QrJ+k3-q{bf2 z0K>;TjX4I&!G0O;sSm_Xr=}xvyzZq%@N;NkYXT~ze%6K|+PQ=ZAjG% z92_qW6O{)=tJ34YUAz|+WwDCAYMcHlnW0*r3f$ML6!DJb{bjvIGKMv=y1y4oL_1jM zpRb$ttMguUOZwT^H`&m&`0Ga=KPJ92!JJfTeJpcAS8imx{Om(Tp)SG#lhdb})` z-yMeiwn>Mf9HBjo5B8g?rQ$yWI9BbHeaoH{@Dz?>_M(?TnS=IagV9L z@!zQQzjD1AgWA9Hl`X?7ew#lc-uesAl`ppa@E4A0Y7DR_(*%+!E*RKL#(B= z2B_XeZL=?H9vQS$)MShR@4-Gk@8z?+-xB!c4Ty;0Gv9^bKx_$>tn|&;9@4wpc;?#x zLXXS#=xbIjj>n?kB#*v`L$tcjyOH9qS|FyTtIx8RB90jy!?2AfuI%p&d+|KWC^_G6 z%gm9_&W=~2cWsRcl^iJ8y4%ydKu?RcQ1qpXZFO>THU|VDZgYm z8P1&)9+AK9)G_uiznUJUyRPs5y6y^_yX2ZZ(m$`O*P%Yg`;2!a8y>w>@N4!Q!M%B- zFU!bcRiDMy9+j`CmHnj2lr$-QhkoSqlCTTYGwUCHKY6F-sm2cdGkx!(B+Ebly78uv z5_{_1)4*s}MR-ebPWE%$rCG~P$G(DYx~WLe{rQa^kB)dWX`N1P4iysP`*v*FNZs6c z`piC!f$k$OCNs-!b$pmP6OcL4+GCJtKGwj0rBP^dYLE8H{?*sprW}h(3b(`gwxYI1 zHfiqDRGs4X(Ik~&^{MLT0e1`~xf3mD?{6Afw-!5XfA)#5I^#%D{VO{&4dL-dj^X6T z@{7h}mZ$1p$K~f=TP1vJOJhTpV`-@ePwC?wIaW^ZpGZ%h)XK&A=UR@Jaio0dLWkmhNUKCNmHmSnV2g_CbjFtbKUB>Hmtwf zUslB0<;pg$KzJbeymWH~+l!~k$mZmHUDEfJ{ke1Rf(Ke$HU;m|-IrI{emh_7!0MFS zNZRw2zNtd~9xQLT#T6vS(>IXj2hZg*_y16~1%tbM?f)F9CzO>mF5VU$b{~ z+unMl&+F`}wlTG}kJo6_qir?1%uIu<<~KZ|=;fM}VnT-Rc1dsJzi{-tuDBE1XNQ&j zz-f^?6&iZ3Y9c6XX9FqJ@4-$VPEHsmwUcc}>)e}Mvpd$Bcdt5=eRA~Zdv~Mh`%Nbc z)-}JF)V+9_=iEcS(woz3Imf@5k99vBnF!OIGV4j_HuJN3@+GfMMBKi;*xIlzb1?Cm zk@xA%oBV!j@dWUWH=I=v=qE~lU)g`W@4T(=rcGK0WQHzx2R6T}_KXZwf-vu|s9=UsM?2F4au97QZxC1XH#+LUxr>Aw2 zO?=o#Z&<}7FDh+`dp#J+lYk}4znLmj(uvqz!rOc4z>M*>hK%ti_a46==@n?h`F1$Mrsr=ly~>)PryMJ{im`;C07cbPna#4&dH1eG3OQ9i--C!+-p`$rzoEf8-sP@> zW7n=7pN%r#8LMQ}*66_>TSHzYJM%YWy=c}f9@$k*Kc?SRq-#CV*j06UmB`4IxA9|P zZCh*4sv;{@JQaOf_-8f@)x9jb9ks>Ua4Ul4w(x}K%gvn6K8~bNc@NxWD@a{6{77Kj zAX)a6Yq@GxYwXJY@p-Q1EThI+i8PzNFWQ9NhmJk}w)osjVph0LN$ldD_wlUGR<;Gh z*{g@gkd;QC1S*n3Wqx*B-?g!J(ii5>TQ}%0GB;}w;Cr<8q^aLEO!}!J3!z{$Q=Gfo zn^)`uMsua9u8#Z{Ud3Y2&r?%(_5XTat*>Pr^|aV%Wxx83Vx!vB4X0TYY9hX>xPC2M z%hT@~Smv2XciM2>5Hs2KJho-ltW(!Fd#K&h>1l;Ve1# z>g&q>_(x?UX=xFuKJl}48Z|}wbHDjTYSlLccJv3`it;OVJ3sGj!Gk%vna*QeR79;%=&f-a^GXsV^iF>JJ(m0rfA$G-Lrh>P*%eKF;p^-ubODLL*64RWPjR) zx3))3&wpUKolA>8d2sT?{m=7bWH_gb-;+zENJam)-$?vyGlcfZD&Qz)?Sdj18RIQ=K*OUyu8 z*zP<@!I<@!V0unTtUked=BeR)vbdzt{-!PI#TI7NGCZG#^49=9Y1!1dXQPKxGEbe0 z)2|`Q9JfAqJc?_ec2U_r-EHN2gY;y#laY7k3}mM9-1l#wy6a}qHp4Ez(@uOh+;-=> zefamF`?XW=1ce6`_%0R-*5)bj`@3y^>ELv>>0ETmW%2gK!ESUwQpky*>!?r49XA$q zdYcXR_zxT|Ew`^gHcekBbeeNt6-UtETXRh4{xy$>J+#|Kt4mH34lRG*V5BX!|Ki^A z)7g%?1+iqUoNX~dKi=;xQwi1TPAV4fxcj=0uS(E;f7B(G=5Now(q{U03*}ul^r9Gi zIuP`r=3>Uio0a(^W=@xQ?0qwCQH<-SMBcDnveu405X`!;p1%L{c%kJJ+%4AP7ag&$ z1L%BbzsB|Hi+(92u6$1+`}wqm*CZEfxQys#@#$wHb635JT3z{)I4|rI2oA_ks*g2v zI{|;(%hGVdu0J*5W?6B1^I&+Js=K9_dcsfNcliP{aMCOy$V`}bhJ!4I~WnNvBzq^19$;PdGzkwF{)$n0L#PHzLlBw6S zTBXgKj+P6JiuHYov2^d#WO+`lc=lq$`y;3KQ3D((*hkT(=20&Dq+@@0KH;uwY*8zG zWluqt{SvQw6y5LU{R{VGPi-TzUqx}~{LM`$qeJ--{!0Az#;Cg!QFayje11EwBqObV z_oHUSR=yXR-BR^40X-q#m7&|%(JMm76$~!lO3*7 z4~SNeTnQhq1clt)V`Lwps>~|$JL2@)&V4z)g&oH$_46LppG&D`(K~8a5V!cs`s}IS zrT3Nd*?Z3Z>ULk;qx|dh&wbwvc5pwq{UZ|lX8HRRGv71E6p#5eKQ9_PQ1L~u@$hz; z19w;Nq_VDZ@)er8Jn8>7*k|UA1J|cBIxSCnqtl8c%Z&DQygof7)1`_tE4-7c!rw2c zlkSyWd+%Ya5Z9a+@^(4L2tn7sja%;|gJc(?TTWzIcb&57pR|lkdWPjQ9 zdQIR@adU3jC$eo?ALto-PWzPPy!7>GhzOZy8En$}RK{Y73DFC{n<3jx)a9?mW7sXeUhQSNuf01fIDa&K+x*OmM5OU2rk$n_rhS{P_>Q06zHQ<4 z%k$MDB<)}6iNBqAIj=XEaV&pd^hLE%pjW`_!Ya#zC$?`b#wQ-{+o zYHHQF;i~UiG=)I->Q@mlTs3+3h1V;_*X#0P^HVpB_6?gUULDuHUdkaIS)j>RiA`eH zEBqR}qeJ4?hUE4`!jEonbMBrVBkNFqNGUbk7!G>Nw|Aq5Xz`AemG7An_x`+JeX2)* z+}v}e)Gy;&rNk|N(Xyz#(Qgmp_i<T73C?txb_aYpT8;Z}&U#-BF~g z_ukAEM-h8jAzJs~SFJ*%+1H79Ef;l7$9iNte+*%Zcjl@W(eKdM#=eO93x#G+OdD34 z7rrozk=}M$GJ5v~qw^CN*F9l>{^{3iBh7DnB1(tOqHpQ9jU?B#^OGt*Iq(hKHgGtr zDH7nWz4ConuSO8bh5I4v`&gvW348bChoWbk!zAa$2FA8z4E~O)`Y|aTX7}TFIiMcj1@~Pe~)JPxZ%>Ak>g&)FYUD)5(@q4dgWV# z`HvUhecsqxd>}N&+N86yG;z|@H-5^LM^2=OdXV0<@2l(Kcv<(uYZf*=<&vlSOvps~ z*I3_wnPhDhS$dNG(1Ir4y79Y0&o`<}zNJlQP0?|kTAv%b59GKt9)DK09eFC)CBE|g z+s*Jp-HuPff}NXpuTinF%oTA^Xs*W&_3J4WTx!1M-dZ@f_)T)_%Y6|r?9Og4tp>fo?_NWWlq?yi-X zeVy3jh7%3lonxP}&Ie`Q7V1+AlUn}Xu6bX>M@Q1ucR@T^m|fQ6Q`9ogcMF|Xt2UJ&7M<7pAQ%? z5NHG<5<^C$VC@jrt8x+C{A3YUvYp7Z6j^e!T&|=~ft?hp=$+Ks`FGNYMY768x}6FQ zIi!Llty2|c8&WN0w^x^4J)|xtG-UQ|?U1>iQr@1m_Cppk?)H0k`V8&8P;YOE=(gWS zd6KseF|ckw;$5EAwfE}|P7Dtn>KU~^Oh!x{oW>tiL+n#9ekkz`d!04HuB(RdO{7^%TX4rebAktCD= zd|{>z+xp?S4Ky0L77m(VVQ@Hd0)ym1@xi8lhz)te$rxx7YAsR|(y~HIamXHWMZ>`v zaJB;rGgqhsoVT&Wg;46iR!R{@n!x!GkU1P)u^WlPvl1NOL=zUgDM}FXLn2k#8HZe8 zS&*Vcq%#H%)qt-o)}SzGP7E73aYzn0SOtL*LJOnTqV(V>5ja$Zg@}aRyT}04dgM_! zIfaPCp6 z44~&xC{}2fEK(7g4=2t*yEnr@AXAKPgA+OsoSd8p$mu;YopBrpoYf-^-?LtYGPYn5 zsGS&N7I{nvQiVeTT1rC8L%w*VHd+)8iP1r_qLhfxXK*}P zP~VXxIF=)saqbF|OcKX2#}0==%fJvI@X$@jJ$z6#$m19sQvwqD*@RKh|Ht0Dz{gos zjsH)2p|unn?jUHlP)G}Hl3su|y(DScLM3fOlX4L>yUA|SK$2Z{H*ErirhnjI<(h3X10{}ksOOhMXSS8bHjpV}Z=qM#-j zk3d2nOcOGiJRkIyEqDXaATWvnOrw z9Zn<-va`Rz;?ajRIOpuVB0u>p%&(`V-w>SLgCHn$*DQxlJ@b`&u_t!ij4jn_(7CDzOKB7cJwI!Wx+rsQ&5aHj)eAGB5YM-TMD!vcL& zEt{pVZPIW-b+nb!Y1G0=`KA&$YA$_ofrNiQ{yEhaYe`m{1K$LcPQn}M?L!wSMwG^Q z`+EC%yw}x5dN!l*lO!OdMFNBJBR& z;obyqnpf(Dy!GBgm?v8=l21AXG37KiCpU-QHK#DABq!*#d+j0&M|ipWAK-B;XdjNq zjTk$8zhNKG8Mml4M%8l6b7FI-DKaHc4}+Y{5%4PPE{03v@et=zo9m+X*l-!*D^QE% z<2>fcWqb)}FAMa+_M)P2JQ}k;1AD<4VkB?s^!#Zj=1)6Gw}l!itUl6Q9dBt)HZ(;F z&P`P7Q}Ky{kmS%O^J3rjWJ_~AQkR)I>=|c0rumXQ3@k%sEGm zS9AV7opImzrHwo|$S01uClY~RFaQA~VgZOVwQ_KtGva~ZM_Eb8;+DopwaX)|V1={Q zX+GJ~Su&jwZy;|=moHpdzNmV|qLY_YRxMglT~=CNzM!=1RADt^JJH5bZKGd3&5>D` z6I-H5M$B@=IuHag1&zjoQ{=?FwgteEeGa2e@C+MQ*VmSr3M%v2da*mKz2`(tP;EUF zj&KK|jah5RFQTm70E)ZA~@N#+@aOiR%9g zVN;{U9E_YU-mYmesE8Si3`6$l3Z9Hs>!zSZU^*-Hh!GpV{$ga2Uq5M&R)9$y)+9;B zH*1Sm+ujYDir}2K$Rh1ONQ1)0MuwoFk!kC_8G_9ukH{Hl#@EJYg`95_VN!nnf!;O*3+Gs4Yv;hMRm^_fLVp%rJ@wApm z3$47dv5X`2ka7WM8k>_YwS@?1_ny%oIj4mY%+;=vk*)q{7}9+_LyY(?r0I&ylx5LH zt#Xb()M$7jQEE(}tZY87nSt|%DfpdXUBem;b!~7W9NL7fH%wu~uo>J|jYKu(-vZjV zj4Cv|&A;c}a9iHl4$p{2zy9M-6E42tbNA*M ztCl#mpEGxBZ|7$n{+Bx*dFY1ecRcHGe24+hLq2XJTJn1LpWglXh^Y?uO1|@(3(q?9 zbcdh+)!<1djoRGla0%A_KabK@QobbAS9saw|Uh#t+XPkYu!@b<^HebKvnTs60 z@h7*`95UhgA30pom;HSXZ#!c2?Wa%v?x=lT##X)Df9E&e{FuXkdeYSO_g%7etiwI8 zyXuy~L?^Hx{*hBJ*Ss~qlmB~O25(P^t3-t@{fYxke?opy(NhrRgw=@+SQIsDdb z>W=80D<5*Wq@O?g=dU>Y{6C$3U1Y{SBc1(K@8-83pZLZ9_;}mtb8r36pAH@6fA?}9 z`(a^tw8JN_``N-9mTvo)!@UttUR(K_@9pdG^-mww(>vuy`#Ic^*}?VCZho%%?{^&F ze;@Jt_`!dE_+W=meywGB<;e2G9Zv22`5Ti@|D?m)maCh;)cMZ|4)<>U)2hZV&B$~3 z`Ex7hJp9ioQyosaC4Kw+?+l0Uf7Cvoe09#va~$sVJ%7#A%T_LQ_*snwH&t#pcA3Lz zeup)Bv(9q(l3PA~@&Py89&xz$$fqX0dD9&UhxhiD-}u@Ab(c6?mz({k4tMg$;oia@ zUDSEjgAX|TW7F>cYRP_8e{?wM|KpIld;jV16Ml32oi#6=h}mQNyYBfJubyzNk01J( zGiPs2{>#Vlb!NlaVa%4B-{Cht^7f~H{-Te2-}v(Hdc#3XF`M7pv#)r1^YVTl_q=n) zFGzlQANT#D&);?K_)W7$Io$i)+c(~S=Nmp={l?|LSa;Zin55451#kSA!$SvF-uhkM7K|DUs; z{aUWWZ~f2pCzh{0;sA$}i&bC#cK3k}|G|y1eV=T+>|lp`$NhQr~Qa&k>zj9n=sYk&;9DwGyatGY@x$F@6F(Z-#<3f;VU11^M#c= zhR=4mclTMZKC$)7^BjKCf&Jq@S=F$>;UwSMH|v`xJKXhe4)=ahv~m1phgLfLh+A)Z zX<MlhH~!(d%kIAITMqZUOBWuO`@;7fzO{7ZLEjp8_gxP67B_$4 z`AEe>4uAaUrrE_O{`j{JC+*889-23!3JN~j`+uIHgZ7(0) zc<}33zjwcl8|Ewu3M;yr*k@Jm-}MVn3PlBOlkku=nZw=lt&>uclrs z!^FA^KmSvkmw(O2HrS{=<|N-5ec+SmVHdd}--?*9WHUw?P^9e?`731j{5l7YWG=Hu%hI;NxN3!mH1 z|Nc-;c>S_>e0)NDL%jUF&X4=wy$O-89(d|Fhlf74;-V$(@A$aa`_jgDUb!pReJ_1z z{IxG#o7~^wBwza5pUgSH;Sas~%QHe(jycfb-o}?xfB$T+kN4g>_Q(xQ-3R&Kz4aHI zqHaCd;TymH*rR_v>-s|+?&bVFI_|Nr9P03#UqnBC)zupgbGV`M#={++^Vps90u4X^ zgu}g@H_rIkCtf(h;TwZlIj~ib*y!YX6{PVEmE*$T0Z{u<04HZuW9R5)I zlANa!6OM8?(P;DR4liw*eCNwk{yov*Uhk_tbHCVntiwZ7PyRuF?Z`hSgdoB!uGmpzg1a4E)w+?xs=zJAz(jl*91!gPmw zrPJRT5xQum!zaw!dizCvUpUd>aL>W_{p+S#4iByV*((Pe{#22}z0ijJ|MAS2c@8h# z@waQYednBFhm*V>KRf)P@7+*#{*!YSI^3IZ=laHy-z;``?+=gr)w#LNOB@dSeD9{` z^2!~)acIeg z@1alZoBy%m?>gL#4;@bSAO7^|XW!xQ(8I|Ge)?wKT@LqpOWVKtjq$&5c~JsVoqf()*xc{%oE=9zvFM2-b~s$hpZWW!6c1b_AlF7&9SFKPG1==J12ski z8p4Qgtv2;rBkPHn2Cip64Mub^s+<2&BYb-{{s~e-qYFQj7gK*PNX5l$ufUzU`_=l$%Jfe5qpr`nJn=LpwHNR7dNm zMOF)h8hEXQe6nbV$@3=?EF8w#ye;CcNZ822aXi#mjkdg+cC;J1`994$;}CqJg~zV^Zag+c#6vdY zu-rh75kadl z=q~GTLu{#S4Uxw1?qasWL<>m!uK8_Gd{QRc9hPe5D=HFMgN61=gkwmq&wO8jOIwoB z(%M>tZ#2HAfFj9Ea#pkrHGpgtvAYj;ik(_rWI8XYBVEgTsJ8NkB;FFORa_XdQ*;AHABO2&b6KK0{YB@u zgc|pl>+Fz*b4`aM9qs!|*DsKXW>0}DLKJXU^cqk=lcg$|t|i}3xJoTvGD8a^?3rZ- z4>x397(Dn88GG=+@2de09>x3O|G}adVr5k(o2c0{xFx5W3;pCekfotmjPcvb73K3j z=oHf5wJTE?y85a_1^4&sQ3DI}m>}qIXZfVLM;Z()j7PHxe(YfAClpS=? z?wHG@Lyc`0FqJYJ=!X)79V^pLtag`d%RFuXd;6aPvPEc3C@yz3VcI-9a=lxoI?~i2 z!`h4cw0E=(+@l=|%XpdVQKT6U80lx0ORGt=K$L8;tKEf_-GA;q89L8@rvW-= zNePupLt|!A5`}ZraX3Ur;t+|&z1v+#=8AW7dl4ONB2*vQYhH1TR~tW;IMZv0=vah7)Ht z$mKmPvs$K|*fL{!%ZW4fWj=K?rq^-5{e|rKZ;8u%JkZzx`?2Sa%tXQ$%?}h6U0BQB zHMyo;H^IQ10Jo2~G|TqYz)^v^=1GBh0WOdVTvXVa-`Kdi2`w9YYxh_Q`hxTeB~JsA z%p|nY=>;qCRWA98gcmm@OT%0n4^cHm!VR(;imUE@KZ{ydq5s3{NUINX`$F9Q2nR>l z?=$Mq0Ef6o`BR>^KTqr#u6f|6@0_j&;_yCk=^caR&%{RZ({DdZ)iqFm_rjEcn{p*G1o*}Bci^F znT^U?X@Q6*2hldWyU!e#G(u9^&fc6xU;xRzwMI2J-IPrvHWwcyv(rQ%+?%Q-GDY$IAGG`51N2K0x;)x%pGX@WLLrYE!=}> z??B6tFM}T<^H~uw@Bt3(`PpDnS|E2c%E(67yD!%UPuCqZ$`40sTI#FqSvHG=!*S=X zuWCzJthNO;7Snl)%JCcfs*7Pl%c~sMa$lmg>9@v)1e#;xFDvFa9bd+`ba38KDAu7y za^aHMnMg8!&+JPX2gIjK9#H&FpKed!nImQyl`*KVjLuo^U*se++UTMp)0m5j=ygzF zBqvRl#TuDU_?>B}4jHeHMH|0)3GOVkKjHYsfLvp#uh*>MGDm&k93p{pZ1!476Rg0d zK>gL>zmY+RK2_xU-!bV}iM*8F+P?=cq}3$$fW*{{G}o+Zptsk}fq@lwP$ohgpOEb2 zXGgb?ee{&cM&wArK|8tA(T11nA9XS94r%KgjZesqi=%j4sKzP>eSQ6|!epdB#%Ou8 zxF59StcW$pNk2I&sZUQD0UE8<6blDTDdl3$Rq-gt<)om7rin2FXw2yxO<%~OZxHkk zA0aUjIyP8f$-<&Q4OjYziiM$!?WX0-yXPX*_kcErE@)$|q4qo?bst0sGoGv!3A18l zWmR?gk_FXrR;X%4Y1ty};$sX>T4JIWCpUgL1`1Nj3>TU~B-F$q`>?JhMmKVpNLG_@ zSy{Ds>MRtxO$~aP0`_WV^$b7F2xJ*2anwTY3T=)g_z&U$#y2~AD}1ZsqE zIyOos2RWnhHqACZ=D+A-3%|F?YQofLGd)Hfb;yORGy}QARQe-^=>c~4H?%Zmd~1v{ zE5ie#ODB>ZIZle?*XIWkZJh39jZyqfre~tPxI#%RG+Q}8(O|EFY-r~Eq)cwmoY3l> zv$QBV0T`Bh1J~#iW3sl#-L2=zow-yqZ<=)_&Wzlh-@?V3a9AzJS|eedU@{uDYn|@g zR!vKyEz-)k*PI>JzQnDT6cS7vR&&gQp(%x+oCqn&8<8-dpkKu~fv%!OCSPD2UeyUi zo9ol{p@;hM7P(e4gCkqgic1C+A`m5InKtms`hrv!)g6!43zwK{u5`=fPz4=qeKgKs zIBdk%@`OEuH7Uy6KrTEE$h^T^tJ@H@2c*pr2pKDoQX}n}V^{Vlke-a4M|8-eBEMC0 zDdZ}e8EUBr7dS%cTC>*fT8Mn-*tpae{J})lC8=AlEJG679l<6&*cUbz`N1W%hF8f9 z=k`Qd=fX-w6HHfw&{`Udv`5LD)U`kLS+=s=Tofwfopk#y8UxcaZK{kCHq6PHhDNg_ z9A(}>6-*JyZ$^s2Y;iHK4rL@)L}ejUUxHbkSS1U1zErW_ zsL6p}5~i<``!fSJ3jwAxQZl(xbIjZpb2exG>kt0YRJ-dDgyQgmyA4$zU>P&02wy?I z%%#DJK$E<4d^^rn)pA&VHz8bg>Wf+_Hl_fYb!&-=qq%ia7!n`cgSAWe2`pevW{60ZJo;kS)jDJZN3(hhCk>m+C4 zHcY2P>yQ-;38B5_2V4yKE`;6#B7(hns<}0JP|t%>HQiqHLYa)Mbt+SA6LTD!pI^X# zpB40qH*$|-jI>bO_5xGwkfqG;IaZjCBh!JA*eTIOQqFi<9l$cvtz@{Q{g=uKxkz|f zG-=&9x=o+5qF<@64V{mvo%R*rsM5;v zbj+uT6klY8xHwluqvfI?USUP}0;KgKUxJGdaVZn|9Z4+I0z5&OrAX{@5!f~p;!*g! z)XML2#J5C^@J3CD7}X+sWqJ^i*2FD})-7*IF0W(#206W?8ReuF)63;H!j+iaGHpK>w*oxE4Z%hut(I#w@G`D15ukH`mj1N7MMSrup0BJ2jmdpLjMqKlP z{*Uen>PA}<3>fs_I~J9DuOngU1a$`~+q6(m$+&_s08=;Vuve@p=QZS(i~JdFLxK~7 z;wuuKM2V7-$%D2_XzY#=`h#RrYtzFRhEjp5@=7D%wR%9Siqk_?A-j<#GPH#L8J?gC zW=+zA&7J(RGs4aO2hG~fWg>*!RIin6feG^hr!G3Hx^mI7s?$r${eE`$0z}U-3!q0r zI%7M*b92fyZjxx`i#|%_M)JdHR3?g3i4}O8XCh>8^Q${4FqKfqCdg$?1tI~8Gp$zox_OkJf1tZ z=g#*zcL&`$K=<99Yjfx64z~KYfqFyd?w~ur=fb&okG0`vS$MdGhYpC>okwuzeq8>X zKNrr$@AB!+HM;$M?wq9a=i+haBVB%--qX3e_?)|gt{g6Y7oVf6E4PD=j_$jon=79S z@8Wmmb?FbpU3eFti{F*c<=^>p@w)uFbe+3{j;=18gD!p--lgNdyK*|ZxcD4&<#4zw zkJJ0Q@BQC=PX)gAo_hB!r9QqxsZa7u;hE2~oabzwLcWKAQJyxQFY>%Dz|5hrO=Lnu-dFJsf;aSP!-T0oW2e$C6=jq`2F3%l2_wqc(^E;lu z@T7Qz4)W|{AJH%Gjm~pTtzM>LBsOhYexcPK>CQ1>M@e*m24@6WtGhW_5{ay4;vg$3 z^{WCwEK7vis!<&@V`rycE|X8Rh${1gYnunnmds!fLs{9-^D4c|FF5rx0Z|&TAu%3j z6OUxY4yLV+Cxpo)-RaTOp=`249J52!ozs?ihE{I59*9Br2UVFmd2D*N0^PGoZ;`)q zk3>(xM!~uBpz()KH$8(V;YFHQwQjAJT4W=l)ida6*oR(YmXX2@q55XJr-oW8g+4=X zs~Us|(#Nx&~GYvt@J=6q&q8?|?~YV?9G(q-(Gm3_V2BW0$?HNf~?i^JvyK zlc5g!l0S_JbYF4#lc?cOV^~o6QzL)E zp?bERFVufmvCE<%rZt?6u{d*y3i;ER2uTS2mw9Y+1dRo&F-=s)nn*(=9zzF9u`zBK zhXmAtRzhkWqO3TDpqC8InlP}&>>$dTwFIDU;oD|b;+aoy)S$M7C6%PinIbb2M9!=^ z#_CkVYEE;&O3_$j3z{#P-!#@n8XDPOg5nB$epsf{e;cD0&=Uy1HxghKoRNejLQSTb zFp1OcAw7@R#0!|+y)r77)^B$pI3-@9BAQrktp+ZO)VtU8)GrW;)-BB70LL7{hLNyg zm`o1I{w~^H2sRZUD$!kfXJRT!>imG12|G7Yn{Vnp-?b1o^<_?L+lS~&*cTJoIZCb1 z)y)KDGy3bK-W8eH*`ursq6ZL_G{;y_f1_oEC02{(Lng}ZXoXp`ptMpN-I!#*yPJ;& zwGfyzIp`d0mq`BfmnF@ta+y~%OUq2cE&u53M#6dNR-7lF(nT?e%T!SISBsu36mUWX zwV&TYr=(q>9fcD`<`hxo;w6#DUt;#n52z*K$WpYG2$?nM2nO*KG_p~~Ax1_RHVEhl zFuta@glmPO-K=eg30grH3QKuPckeB#m2siQ(m;^tf_4!}@^6%}diw|5LH(e!NZ^f> zGQ4Shp!O7LWj4-Coe4UMEE^z+{=ShBR%0NvCd7u1L5R$%4kq2o^==s!=PfU zZ%FRt;9_tAta}_}E-g}Wg#uWXS$0iXny4sc#WMxSW)Go~j%KAOnh=uGIh!RL`gXmQ zE9;Ap6eXt~PoXRKi_5y2-soURn<=DB^(17i-)L>n!7y@IO)}C&6$P^5$6Ozb%mN0v z2{mSYa+~j$_*LLIuMShTG!G+AGty4ioU2QleUnS)n4R|pD2UPlEvvZfqj7Z=>=*s` zDd<#b296Y#2ZLkdMS z#!8?aYvn~)Rm>yya3Ig`aq>4&gmS&3;>II)E8 zx}FA^Cxb!LTJvZ)vPdY(I!fyT8v!lKbGqjk%SFE2(2HI9dB+`>nR~WKG}^O;`XEMu zkttN36}IHF+69WFQj2Ffd+gP>joRzY)=N z{jxm7BN96!gh?bA%n$gC6VTFspr3q3#o+)OqaYHsW;wzP9c8GH)q0?%J&~3^?n4zc z*hv7xb_U~qf_ZuA*ExAp0(lqZ3FFRXATeJP=(zOm1!IgcZ1%fJ?`GJ?)rV+Yqil@` zHRcCaQhDf|S(uLG(_P9?pOrKSkzZzd2C3apcE+V7ArW11ISCu~b1&QQ8!(?-8%2Si zV3bxLFzc7m_@v_E$wXpD2Gl=mfo3hQsi9Ro>KSokv>vl$*ma{P&@+hAK!OjotDI2F z=&Y=LGFhF|$KMiFc5A5?eIaCJbDmM=>6xN!)4C*>Of`G!wQ#lX{*sprE$L>Aj|#~t z6qKEX=n#AsbX6-YQkMA>@FvXTGQOu^h!8!>Wu*d2TJf$CSvqrkZfn5si5{7;Yr_e? z4DK-#6rVkGTlcZNIhs$>OkW6ZpdkA zERB#X`E~93C@R^CUS>O{4Q6zL!oYSMNUA=C^QB})bQ@77EN8aE=mEHVmPrgH_p8Bp zH%&LACZy}gCPvoag2OU!3}YbH|K&ZcPcV&ICr5@&lc61l7-ct4)h#fixk*rSVAYPw zq?JMuhH1$1G!1ms1en;$XiEZ#{==_*lpoM47B&5@&YCgSiB}bg!3=)O33`j%?=64^(hIfL=g) zf}oA6gmjE=vD9ihj8fOm5R^uGI%ct5F;sN(5a%Ob&Z!thQwA4F_avr2(O`V}ndu~iH3o{lG8yVHS9L3bdW3HHM!1y?1sw8X zCTa6W@phEWzhq&j99Wu zWKU-1m)bE~M!eEpnR(-Y(4wOvU0(*2TBe{hX5y?1Br+}|V5vXQbW@eINJt9|zw(hW z#HPoBB7BV!Oe$2LK+Ufd{U3Q1d-1-sae>Ryloq*Zbl;hr#rPj7BxByJ*;0O$D5}^{ zNVC^>{+OxR!{MME2wxaD z>L?jQ*0H{SQLuPuu^VEhW7i|bGU zlMJya%k7LTjgH1O4c#2|UVPc<#c_)BjJ!*C#2Io$$4*~f%T7j$=?k1p+2clqY=>;l z4;peZyB#Q-n5Cg9g>$TYup%E`s$-cAp2EgQc#z;3h1b2I);zd0jbIQpJYvByZBTdp zJLkYjN24VhK*uzPy4JiCsjU|yplLj5iixV!462=ihO{Dy6Qt*7FEGN19#^_UtC}mY zdKjzSGKwnORv2d6p|QUW$4q?evI4DYQQ6W`d#}R@y7E?Wn@%L2t{zv{X`0jBXUM?} zo|pbK%`*OQZ3rPtg#=ou>IAV7GnzhwYW=d)G86!5CTEhO7~Go-y{H zIYN~VfL02JWwkMB6&XYG(mkwPvb(j1G}fi2GHvFvb6YpL|+YiiX_Gkp^)j}kO z9a@VRLU+QpC#gb*_~MHF#tix?EfvqINK0hU0-viBHl~P-7W)A+gAr z)=BJo$ss~dNY5tPJ=xvuS3~x&!N_1d4H9io?`aMvT;J?ZsI}=X-R69H2z9fiXkw`yTn>~8B0iT!U{w(* zb*!ACbf*`A&Kdg_^f(<>LV9PVIRv>md}G!^`TbGG>3x$N1#bxSt|m;%qDftS@Z>97oK#eT{MiP7l{r#KQ5qh>>qka-e! zcC2>#pofJbx$OkWwsXCE-zs)=#`Joe^UPr$JCIHb*ZlXF4((WGx+Wcqm`u{FGt;r( zeEG#3$)~)p(A;TgEX^vb=gn@3nQ>$cCkBtkQC8|Gvop_*au*#D`ABPzGlZ8LKFTfw zV{FK1D}3fO%czE`(gHGj5i9vvUlk(Cx^XE}FtZ6=^wN|)&xFy(f*67GSvL#KV|nb1 z&dYZ_zGf0#`)O{J$+8f`s<@G4B81_rOtEg-nLkgFFuNc^AkX#2nWeA|OGX@_fr4cZ z5j8Xq5)s{uEEgh>e8r-jz zjaDS1TGxXPdk>ORF8i}T(Fj;YiGNiOp&{^K6m1UV$tjvRxyop=&c3CzJsDZpxwEOg za1;%Qv}o56@h<8x{S{?vS|ermOH3IwXz6(TbT% znC(K&Z!jPF8g^}{!Dxi2gWj)xWMH>tXM}X;tN`iFNiIhj?I~mHmevzCv#cSXjaee9 z%`8p`BMWWZv{~0_o+f`<-^tj{ESJ)H>NqLDqK8yHMGxdRL2^iwUklU())ox)iVVEO zNRlHk8N(8*W!w7%INl*GBWt+?ZN6^d!MRma=CcSiZ@!!>3L0*rppxN?%pfZD2{ZDU z;pz)h203~|zfas+(H|0xKR)3!j*L4*b;pT8nNFP>g+w$bt}*s6H?^xmEYQtIc(Vjk zRJ648%n!OJPAZC15m=I>EwcpQ#8TaSM)@4H&=Uk4pWX%<;y1u)S$cRNEcA9S@Y8u&j$izZeUT;fn@edI;wtXlp$rzs+V|(<6_H(v6BtmZS zv_BiYLwAPSdq#kPK6C^hB`51`i|))D4Ik#yN>DLcP%S$ETZ2XRypM$!DBa> zSkNFRzy|uTT&Gvw49kD?l%%y8OQh_)hcbI(#e(d!dsJ^nf>|qs@{5J=dXHrA!o2x; z7X^dI)+gr#K`zoroZG8wBXfcuMmcp=XYFV;ykd8G<{=6%oFWZ_rld{$NzRO_bZ50vLMf zjX8;GGk~$D7Y65c>M^^3X6u3p$?QO{EingTEX{_om)V_>;f^y3GC|bl)&8lH0%EtIL!>hpm|ni*#%LG8F9cO zu@52=hc@NwY(o{@N*ufupK4E?#r?H2xYoJEQoe zG061GFg9b@8Z-eP1~=^79UB)rb`ymHGuwRIMr3ngU7&*Xux7FOIVHfh^j4Z z4wpJrvh$kZpgYLLvUSbw-!EsD+rsHD5{ej8E$rT3DHk9tX(l_e2(AxG`}^w`XuYZC zoOJo?qu85?*gC9|v7QvCvV|>IoT8;WN4R4ejor3P9TISKn&eBGEidW?4e8ru>mNyL zeyC&{4SWw8mp()D5`BL>I|kZqrQ43aJPwQ4t>|U`PISpmx!GR6Jhs$afz9PAS{p6I z4(U1-2D9S>Gj_lzi*#3#ydJvvn5_}bjk-aJ7g|!L9c=5TR2QsD?*?$i(zWIgDWkv6 zueWFG+VuAV(;d3DWJpCo29;Uwws{#h20$U#;K(6s^HO{|Iguvv>KMb?v%$lXW-Xge zp|xww-^QEqL1&FE8Ggo=$8|=XyW5WJVn0jROpAgg&4kf)XHgwaJCLkjv7}{pG-tLt z8K>FZy}Ay-Wi)B23wC;_u_Xd@^t7WoHvAEJdGcf#*X{hxhPV4`kw|8Ht^cxIY8^6H zC7k%tEaGHdmD`E0OC)Ryr7Oi4;R180`|LLXGsu0G|$rUO{amO#v> z>-~TkE>)G&3JYiGzbELwv*qu!nfkAGnXX-C6pG7?Y5MOh`8#vE{(F-Ct6fewQQl|i zP_uNX+1k%+?LJ%lkeL1}?$Zjz=d?okI;~LRnN}#F0Q#@wVcIn9XPWjiUGh0?rsQGT zi8_W8wV#u;%SqbhB<<%UKi^31nQ zD(BhtGrGT%FS@xK_JS!{O_G(3YS}<*9EHF9OJgi^iktbW1%UIYJD>D7+c@|dN4V(m z*&=-@M^!?C>A|WAD*b$mX4Xn=;DC^fM?|)yQ_E2Wu1PDA{XOVfD^{Alh-$Q|?(`!1pgb*`7wbVt40~x2 zV|twp1@+BHI4B)o7Fi=e>tG`yi;>QZGsR6au6~hWxV-2gpuE7!W@y6!~8E4um)>x+GNjOq_v9N>MIG%#grHq4Y8pgs@ZX) z9(?G*orur9NGRcIZC9M3g#-!D^~HvjWb@~WK81Wm%$w-i=Fd&joQ)h8UUc?n=S;~j zDxPrh@l%g0IA-qrwVyk7UdhqHdGnDh#~(j+YQel?=FOcuZ~pvwYv+A#-m&wJJ8s_E zweyZWc3yGuyyEHmzz0CmoM|KP1 z5O}L-C-JPeD@dX2#svx$n56e2V0@@{mF73IBZ}=wdYGq|Vf3-x#B;h9~1~(uXgvW6PYj2#b(LVajf{Py&8t&=8WzwOOpK zG1oupT$uZV>ah*v^e?&SSbAGYdvBr@S}X z{J7EdB(SBg_1mV!m>qanmy*jC#r(6FLAM5f^-?qTa3~Q20)6usbwQqvo-h|NAWP?Z zyTXT~0Nj~Hok$V0tnWjl6d9dwwG3o1vs@cRWxz273{uP0yvfQ0W@zDd`wR@uH7|(VOWGQg?Z7f*NUN z!f3+rBF$S5rnI6^rjlj>fj75GzyQsRF{={(onIL$H(xbj`bEO<$crB?cxRY(>dTHX3*HTp0xWqoYt#QnRh2SysHUNoD^%*hB`?6uXI=yZ6r2kGk<_o9E5RKinbs2iHfZ6o>9^%g)gpmP_M2V`d~ zJA>9#CPlAncJ46QkF-LzDoU>9R6MkXyvq^61fG!Ty8A~uBSlPW(3I4~K>N;!dlI#&Xh4fOfFISbI>4;S$6VlL3 ziyL3Oi#V%79x%CbXXFf*`>l3>yR<;jX8X=n3EKy_@bnmF(IxF*dWMW3Oz8CCCR-$_ z58H+t@XzjXkO(nq?X7pmj9t3mSUqX!%9aq6|Jynu7D^m13LeEs79?jXR z^ywPad``^ntPaDgDvm<6xjM5g(nn3p^HI~HeUxTSmy$-coqZoYoh`9GveFH^d>2tB zr4bq7`51I2V#a^I3sgiAX(%CE45U%U;-Yxcl+_JE*G`6Pr@l0|3!|C3hdGzX*-UJ- zXbrH0)rU1LooH^vZOzok$Ba5QIgpwj=6=J6v)N#$4GHWyFu!5uE;x51+|C{ccNv<0 zm&hP-?B>%TzTdx7dMl>6{w4G7k`KBu(wWTl??=Iapt-0~hTgKtK4a-wtLz5ZO0177 zi8e~c_}C?tpo{`C?h~reCh_%HshsOKG-M_ zq+mf~d&L{E@3;dGJ!1UPd8kNc%`F+WNZ0ccZ>cvj-aaSg z1Sf@8HO7uluD;;n&wufXtFOK88{Zx|{X6pg=8+?BF_Dywyv+~5%k4ZPfBdt1Gg4SF za^x>Fy~z86w>~7`5&2_(J?}7 z$6s-=c;W941<1Qno2p+N|I9cw{>AZwW@kiTgi`D9C(lRo8#G<#IHGf}(jVuMbM7GF zH*QzCe^?Fo##gum9o%$($sd(^+Yj`h|2FW&h0k{1bbt3A!ViBZJA}dB1FRdS-~HJO z*kz+AN%rsUJ%*RK)Pr|RNW#lc#~`oW`kO|TD)55c-i@C3E;!#())`PNw~R|VqYAmc zTaEI+JnX;m^7>8cU3HUl*G2&()ucb(nD`e7m1ex}J>FGwMBZrNh5*Q(Jr2GirE6>N3Hb zB(=|Z-jQDFK|;OzcS+B~aac=PsK)>~q~v<~0-k zjR)uCc+V*Bz1K|mH*T7pBE4bWt0w%zkI!50bwk(GCg}UFlKAt8)a%vw>w*V|bDK@S z;7a9rC9!tCzmrnyp#0kf>+m2yWx~I)XJ7mO zKU@v({FMp+p4z0$TZw$+C#kDZUc2WN&#me1Rl`e++k*l9h1?A3S8QX#vuywpxtGzt zhx_pq%iH^le;xTO_7pKbD1p_xrr}5m?l*7UJpHQw3bM|AG0q@5jI<^D0Z?4*zwbHx zcJDoDH`(DW{rzY@gcn_pLOuCq#dnjgymWhioHnb5xAWkSXH$;#FSk#%>npVO9KM+F z;|YgU-n5?$FQKj}G#r(c2h!s=Qvc--b%J2j8I`wUiHDy^bytdeRJ!Ix#>mevfeDZQ zaoysc72eg?Iuoa6ev?wW0s3!B!jbpXc;hJDN=~q<%PApAP}lazNG-quG(`1Z{35;jE~?+u?nKHU!2?MT0?w^BNR3>UanoFr{|OY!$T zl@hI_uHIH}A7R1_>`%0- z=ER|fFMe0TJopveVrXR`>s-NlBpgc7Afa*Qr`vb@FYzJlY?w@?!i; z9P*6f@uSjFMEiC4%XF9l;Uyz`3U9vi*Y-OGmvrQ3pq3^gN7`LZb<+Be@yFlYgjb$v zr^OHK96lYBdDHO?AI?m}$H%vm8%H5idPf^6VfIglKf(_$;!cM*8BE7xXp3~v0hEp8 zSc?nF2g)ShC6x|Mk(2HBQQoIKPhZ(;f*U`~Z=jI=jT)iDJNdLp_3QA<^ktyNyqF}lQ`R37Ua9?UdKPCgObf;*_;y6W@ZE;jB}qr? z;>4wW-9MwCUVG-Ms_D>kbPZU)zMPd)PF$lDV>+ zBw0osrO6^6{U6!(-v_)5%)u@b-Q$PMh~0e9^HA&TGVRO|gT0UPU>`3Jg~VWA#ZBTa z-sRU_h01W3vEXih=^Ec70kS+0X>pdr`$TM}cF9rpyGYc`+BNT_Y`%M1n9&qd1NlEQ zyp!eb3XA)UJ#<=Vs!-;cZdTEaMg zy9|Gs_0gWD;1QnFW4h3p5aP?^#w9y2;tvIXU4-}UetT@zI&iUOoR z-!odI+T=*JDg2Up<#mfaxP6m+xUl*i-48fFyM@Jk#kVMccs2oe)&b;^Xyl{i9I%~! z#klM-{4<%s*6C4z8XpiX5BiazQzkQ(o!?zN_KR+E&dosmWqf6TR|Ne{9 zf=T%HY)>XUv(K_@_g!OzARZlVkF9U8SO~e!mq#DCt?3wco4(|8cfv`RU^nUO?~ZaB z$^0|k7R|Yh8$DQA{c<{QJ{)gH#J&S#+`(dyc5vN$Z;iS1Z`b|sy0_l?oO)Z0dyQu> zzk|8?@elGM{s(a$vXdSC6c0JT?mX_2(mMy*U9YsW@4;Nsl*;%jt>b1UjI)@MRBwe01tU)6B#d0Yk_jh)X8;VrAzw6AC1B6`yd==*7vm$|hc&I-z6R`l4gY=T2I2-&Y>? zp1iy#a^(?~`QJT1e9G6qv){j$%{u(`#XorIwimwtpVh@%Zk$>C?-%cT{PBI4fAWgc zQl~zB*ICn^xas0w|EV<*{@bIsT{82zR~~+JeW&`*fwiw3y5C<<`+5JLmppgK%3~)# zzv|n^AM(JN7oEKEooja7^ScXrru}x&lSS8j?T`_Z?)>B1zq#+!5*aq@*?`Q?qyflC z7~P|u+e)`5%}O@1$!uB1GpK64{dhjkBaHxg>+R2T0MCIuGO0h9=MbKZUwg*;|1Vy( za)O*XDCL%)!yPoP=C9Ds{e*_{6CHv4oOp8cU#-xcoi>7b+4Q2o1b4!ZPr1s&a8Iu3W?9dz~NpsQy$c6ZQ^XPb9esSW>GiPbor3>B|q2UIJhf! z_g&hk{G?sV&*9Q;<>%akm%OWf$a4dayjSo%#`81#UIKiV=XX5vUdS`^(s$Kp9(fP& zEaWK$mv`@qchz5cUi*@H?+0$U@?G^ZZt|Yuc@q349(nKK8FtmX>JQ-Z-pw-`d_Nv} zuhkceH(LYsa$G~(_iw0giMC(~um#h`G0vd|j=7+P3o`@9#Kw4ONA_#8lUq)m1dUloxC z#u+#tC~3-lA{byV3KX^;b3yA+<1qICzpt3sUhZxelib<+(X*o%h(piVg@haAcmezQsd8b}UY&Ov<|;sqv2rfb@g&}EDl zi$`lC7zyC~7)A+g<#YC>g-g;J#abLSL%IZ&!xOb!B3F-#&ybtC-aU;tCv%vu!4cwG~U%aKvsT)lZ>hC^Qj?IoivoInbDiHNrOnee8DYA{Yl^kHvmt-esz zn`%xbi3>(tIp7_Sc-RPwB|LM`Awg&izH#8jJ7!uTHf@hN>4KJw`b;}FhVzdpoWVt* z6d}?`48&=IP#tky2({y1^wXG zx^p8&vN?Iz7^tDqNqZOaO|^xRHkWS212V5;l%s7VFLK?nq|Wy-Tx}w^B_JupM1;v< zt;wQp{F*X2H;nN(h^V>QYYK%|b057Hh}=E1=kU!@6GIdAF9$n^62^o`%l#V8(;4BM z!46z}5;dKjkibW?cS-z~A>rbjHmwaZ?WZGmr z-V#Hw(=W)`tEsy072}Fyyo_qI9fkA-Nv>P9Y@I2Q>DuL*AuFuu%kr?4kvAA;XC3m= zvV`-zA&fePGPol{#*0i%%lK8%HPyN<5uWmH4xI|I+}9dxg%yV|7dJS>)( zd9sK>VV!_vSKg`qYU%2$g-6Ia#s!j+b6rgyFPKmfo^j-nSKEapw7bg?8EgzSG|^Hx z9T;uH>KKRVq1Q19TQxMP#>UpHzR)%wZ`z!y6)P9bIcrhnoaM{B!a0je%PSYnS+;!6 z^2Lk2Nb~B3c(hqsvAvdxk%H-1t7*c_^tJWzW{$ygX^uV&pYI0jW?1}R|C@8f@Hv+@ zdfqh*(0eY}q&j);x^R*7&ViojXtGdI0> zlUl{iD;2=eNzc0*I1w0Fw@C$oCBTvv;scL7^$fOCNrmuymJ0%O1=um{+AQI2=urNj#!0Ny6wflmOtfqlTkzd(L2q+Gxw zFCss{DQF-`u1oeF?a6lWGO_{E&PAy`OAShh0JWegU0;!G|d)u;iRE}@257Y9l#jy z%&W-{F!vgC98YgjF<=n5w!`y2@!L(R=PRC94m@Q8=>UUY^SslZ*`(e9b^trSn&YLO zCH!^ZzlScs+&^qmj{t+fbG}Z#|F}tgAK3B2CiUVi(Bn^=RQC_a$Dc|6r|by>UJji8 z7t#a9fV1u*9B{|4bG*Pyo7BzVC7bvT{4B5^*a-~&hVQ-P;~vVrd6NqKg7mkLe_*PQ z{5(N?Td9wy_`ZFUssg5fYk$jOLEwl#<#@rD;iG4$@Bbmcz#sgL_IoPGjz(^E0#^ZZznoH634S%@0D9M?)QiMZ_!a1QL5|mTEjaEyz;}TCz==`#>Z>VL z0gP>+9)TUe8-ayigYLjC;Mf@T4h#TOz?nerx|BKv7zADlZ2x*nbpr#}Q+{9v@F3)9 z?hPqbLi!yyQ@`L{z*b-n@G4+Guv7fqLjHgOU_UT*8|9Ca?(LLM;Ez-4E?^4y1hC>K z(2IJixR-Fi)C1HL?u8G+7i*z!H~9i~Jq$kqJ02lF3Fz}Ed<^s+Ctt|f&L=3hxc{1b z0K0*A3H%N50{frBUy}U&7JtC@9=-#Ezo*`S-N0PrefJ;XPhjB1l`oC6uw)DE2iUnarJe^CZciz14fwywKd?KeSFHuchWD!51Rv3>Qox>(y~?8> zNdW`E+|j+N99S`?SG59T!0Uk>ziMzXT8JRVBc#gL_pYu>X)=wE@_9Xs_x9#t!RMuL3I$?^TDb1%9Ge zEd<7n=v6Ub$&us-82DtbdIZ=N=v8k5Q%CozSr-vsUazVGc1)tYz!dQNz>?#7)$_oL z|370@fAeB!>4bb%#{ z@!w8*r}U~*fc>BDRY_p`slDoEU}p{K0%MV0^$xIqRj-<~-t&%X=v5WK6~H9$^T6wY z&zuV#;G@b$;s-w5L^*MPx|whn=XmEwsR!_0;9>N;hsS!=T;N;4RltJtsSo`9Z4LPa zFKng!z!>lmUtoEmjh!L;1AdVd;!=Ad=;1ij=mJST-d9o0Q-UE zz>2lR1N1KHRW}0L*TG-J-`U=)M$rFvuJ2WS;1ypGdg2aD0=vH0tL_4pT-K{*;xBMH z@c>JJmjh#0^r|O-{de}N9l)-;DE}9U|8D977`P9Az(U}Sz#ib}cG~4bk-dnRH7wt22QyU@Nc-*ad7a-K?GmRxH@8a<8VmWt-JZU>7h3EL^l%bql_j z{9J?olQ*k!V8tn$)#X5M$!2vMunTzD$saHU{64U7 z>1H(x|GCR3AF!)xvw9Kt9$>$GUrBzxLcIas;c{n><8Y%_mT$E5&!2B-<9;Ejno6*bDKA-9pW## zSsi&T^g5q>0=>j$bq=sQNxAVKSPfl(?X8~U|{4Hbv@s^M{QBB z0)wNss3RFqcLOVATn&r?D?YYGbzMh!fNz3#?z=@T+(7+(oN&0807rivI*!|-W&+!R z_Y1y1?$<+?1GcCtVC?WM>Skc!QN#mGP28eNZlFAq$QQ8Z(_2*THz-f}7IhBLTe?N9 z1$HdkqBf9T>Pq4Tk6lf9zDf8F@&}Avw?%aW3%|KV-E{;0I=85?Hc48QMVDk z;(;yd1@P`}@^KU49wmKX?o;HylYBk9MZNq@>hT}s8@y{|pXvj4j_p&08;SqpeQGT* zHLg!R0n9zHPaX6f@PqnP5Ewh8Pu&LWIjm2;{4MAl=u~9sv&&^^t$_Q`)C;zlZ!Q<2$ftai6*zn0pHO z0CoXW_$yh`rvf)2kAOj7@U%Yl4zS|vK2_dHy92HT_5kkzmV6ff8;KuyIk5Y4eX1YW zQQfD`{0`rPeX1K643YkK;rp6CRVA<qDAIe@uW_Nfs+f}g(Jr!EDST-~Sc0_I-Rr;fah@&d!a!j3-G z3G}|wr$*mSc;K19z_op<1DLx3x&pg_Gw;CP*9Zsf2Hpby{HllXugz|QL_2e9IX zJ~gom92gY%4eANl^G*E!7<$~;r;@;~Z&5B_?#4c~@F$cD*bdD7E_4F611J8JeBKNn z0K2~j{qG{5xAdv|fq`53{xkgDLHfXoJE;#~u#0r>CcPh%E->{I==O8I-wR!Cflq-? zfOr0adb)>l-3NaFdw@3r1Ksf1z2Fb^shfepUqNSJ?!%=23*vc%^nvY<_9^c^==&J? z2lfNk0=?h#si%O2PlDf1I>7sZ-A|L>U*hk#ed>8&R}b~`0RDdmKLNX*B|i_6-gABG zF!I^?d%^>|{y=_#{lFOC3%5WwU^|dOwbuje=X(k`7rg!7&_mqcro6Y(Zr>qYU>7h3 z>;Ya1EP1z2bqRcrbiWT>fD?f|3cdw)dRtYa;J_Wkm&)0yt^zOIXR9iFh4#0nBZJUceZz3)mjVA25(0-rJ!^a;rK8*nI)<0lU@` zAFzGhR@DzIT)$Nvc?b0YEC;q&Bti+ui=@_w6mf!?M~N4h`xyRz3Jwea z+kp##-N16Gr^l%`VD1y}5AH$WBj6ptmw_qZtGM_4ntJ^;eE$r50!;N#zrf({pxa&0 z0ayhLKD$+|1$F_u`CjrI<@y=*^!!#e^|!UL}d27&j8f8YziPT&q;H}J5#sV`uXa2>s*175M2`u;iT0Xu;mz;0j{ z@MT~RaP&REEnC%0U~V7f09F8Fz{2fY)f2#uzim}-0#mO;hkK!OKmLHRe^6dv#Xq4R zu=5S#2Nu2sUjh4p6~7?<|G<~Pu6OZA{<;+P10KuSrVhG~_<<=Y_wa3MCU_?>2=qqq z{VC`&f15f5*mK%8wH6p$u}ys+n5x{SUI2P$Z&Mxk?*TpntoZCUHTr4d3vN?$fw9JI z>P_6co42XJ{d_-vn`*_qCqX>GU<>g818cXbvA-qW+qS6+{B_-qKVa%7+f)heh4*Yz zNnkhd`@q1x+tl;Gl3#%1&%1A%>H)?c*rvQ+QeTg3Q@PK;XRmBi3xUB`iBI6)x2fC2 zee8DiW)JD@zg8FWtYM~!!e}cc%8~%P0q7Jq)yxcW8dGPEy|^?k~}U_FD1^eVycwcHZySi9=cY zo_tUa!!~I4tdsOr=tDR3^{$grsQ0gvXPx9zwl>l~v^TAjAoLF4uaa+O z9-!ylLOwquj=^L`0%UD6JNFzIvrNa&KRe=@#1c1a#(JGD!^l)Za& zNtI%HmsB7(5ABj5W&7|hag_XsE=g}DPi7bUB>o=LB|d1v1{i{27&w-G-pBtFyJRJH ze7RlXrtCkJexUm_^pqcq=#O$>ahKFXtNAz=bmlQ#_mv+z#%hC5<({+%O9UUMF7k^*6}dx8w#xKIZI}yD6n!GGWv47`K?Fx*7Gzrfym~C4OPVNaA2Tkh3>%>xVjZ^O=claOF!DC$H?-E!4-CPq4&q%)zM;R9`2)@G7>70F z@q7A#A(*t5`gP<12D%t;80;qhovlGBGjdv!|yhM)t3dv}YwpLwtk z`p||=s=RNvq^(CUy<038*bjZ^*}q#%2fq*KmSxZbgNjDCWNsjT2ci$%2N4hS9*qAR z>E{sQf%>7{5?1BRZpq(79uLC~48sWY9YH(;#F^DC>6_^vE`w$^{X^~eZYkP=ofGI6 z`cI_aLGqA89-(%6w;0R^17;54m%Ceh(7%YdU>Is!vA>u+LkCtt_mXbO8m6329-#m1 zZfS?+Io*;sf?wx$%Ssq1zz^s>kNiieKfhbbp!>pZX@tIuD38()TnV*Hx+V2L=v_+x z(7CKz$_4$RZn2?rIsRxaE$~C^;kS83w|G_gs&4U9wy*A%7DX?1zGNN2Oc;i_P`jpE zJkWb>w=9P?Y^J?_eYdQj9E2?}a6`8YsWMzX&&B=QZb|-%^$CliR!W|r4wpd#)<6@k zgdP}#KG+KVFzsvBJ5kw@rvfxbVHuLUkG zWHXLXe~tXY;OpIzm_+>>tQY8gi*ba3ztYb_^cq=zFbHjE|E*iPpzrVWyCd=@+V2EE zWW4bw43|^(d_|s?m~SB z?V$c0>mRzmC$Bp8daw_}5#rvJc75ap2G$cd)Ex2#JsVgzyHOq{p518=E1-XbafI3^ z`&BCKVFmOG{X_q}9`WvheHehYt49VD7xaj4PwJC;BnUkVdn9u&#$iX~&<9sS_f9>M znucAN2hHRjsfNZbJrad}n6)?g(R-v4`giS-5cKWVBj!Hz1HI6`&NK7l;_fc7W$ND0((kV6X&z!1zhgg8#_k#gug1%II@ zm-wJ|D)~ATJy-(+rx9N!ah~2IZs>E9C+J>8o)i}o_hGaWjw9$7Rzu^Q9_fUhb9$k;HugWoUXB@1wADVUILH z{UZ818u`Wa2mP>7l`riP-K3xE$p`e^K%Sv~Q;#GcLw`5p4>Zci6ZG9myvNe+wjL>k zx(`2~brJj@C^xvc3T*@#Xn$5_e4~C)M(j(TX z_zT;h^$~VXqu-AiS7?61x`h4^ew|K#up0V4MIRdfB42LW!AcnVn)SH|yY1M8{?$D) z1ho$2i)jy=p#z6hc@6XK4E$S5-k|3@<|EX;Cr^3Q!$#;`$9zANe0Q<_pu4+ATAzRZBRR+SKQ~~7hDE?S-nyZZRkMvk?1qN7BmX*_o!a+ zK=bHcse(R5>VvQjdXDLpX5`j!y^?euc|5*XYGDAjL*oSeIG_5{dnF1Tn0o>C+`Uo; z^+og#Je-wv(|U;uFaUF* z1B;;hyk04X7PMd(u7u|KxI!Pyfk9XZbr0hLy|4<}unuY$_DU1< zz%UHJC^Rm@pH9j!4;mNuN~tQtDpf8d9#w{|s(eYW3_&+c{*Hd33BxcCdM~BDD#I$M zUDhiBXux_HfNd}cBhX#cEBg1egBj2db6@}#K;v@aQDs;S9T;YujVthrvJbYvAnbyA zF?n8xJ!n81=0fdC@(ew&90s5T9k>$eSM^E|ny?jmVA6%mr>n6`*$Wf9um=qog4xjH z#V)k2VLmJQwah88>Lbq$}|AulNH4(1!j-?7|?-E~fu~ z5*PHrj4P2tFLave4+h>RKUYzPWzhVfS5`oO2l-RwHRSbb%AMq;oBYCB%2r>m48ZXE zUdi`Tb{I$K-9Y~^2(z!j?~Uw7v@>A|^g_R~16RNxY=91Ig~lfOg&vsP!#sqU(1v+1 z482evz#jG;SOtAs(7TrW>=2Qv>zFU|Bhn7t3nG$NLcU=&bo7W+Tn~4RNEn*CMMS>= z|DgwlpdZ@1N2D1#F!4t0?-`Lo=-n$KE1&~Ap_vwu)KdE0Cn6;<2&pmt?MlJ6uQSO|@) z(8G=g`e6XBfDUYczN;BORfbxG{mDxnXcvGj(77fe*>_?0j)>Hh;~#8>J~*VxcSfY( zZu~FDF7(|^KA`&^TNB9d@Lhs`d>4G-QsHFS^;{tUHedvMa1H|sJ}{{p!OQ;2%7Z~$^RMr zON767V4UF)v|cBkhtPi`B3>ARwb0){e?KQLuo#-}M8v%u`Fo5r)K?J?^uW}I>8F`^ zpc^*8;QP$qM~LqO>_Y9sh}6L_bdd_77TrZa!ck5~s#`?T>BTxJE@mwC< zw@(5v07KB)ANkYd;eb9_4nv3b$%<;)9o{Dq7=-E1P=7?96hLk#2h4@~ z(S1@2{m0Wpof({JA&?(5DM?beu z@?aRQgzi)Oq#Zgi{RPUW(GF^-&2B=sfA7xzgC)C&8g8hS1xz5sC+;XkyB@kf=f?31kjLH}y>U=TJz z{Tl52igwpx2ZpZelNM-|ApbS`H!x1nfekQlW1kqcv@0b~FbJEV`wsH?8{~JAPZ);g zZ_&T2Piml5&Un0x-aX78=((490gVd$tz(>ijNPrwTNtDqe2}<*N53!!>OWyzq4%eK z(gi(B`^58m;{F+O=)f-Me~5nnKzrzg;pNOz=y|wL!qELlpJc2=AC|%3qkYl}tt#fp zAMxig;)UMF@k5oL=##`hQHI$t_$1>6Jx`HW=zqFT%3mRG(1zAC#A&1VEOA2Z7sRj1 zHTVaO=ZWXfw10v54YgmQ_bTfQHbUdYK8ZpL=DtS1FENf#3(!CL(P2I`U@_Ewg&)-W zU{*c-{Gm_uzYymi`*?1G{KE#tKjGKweUp*@Hk>OciAS4{V1anEVdqQSt=c|6w13AsB(WkneYCKd)cPU;wUwmaAXF(4ElF_wXRHf*JAr_lbNwBMC_ zX*QW z!~w&Ki~GfB!5;KLJ&$_mU((O>Dac_SG|%oAKeW#6mo8`&ppRc3Xnu@7^g{iDerbjw znDzOl@Y7xqgXv|t+y!K4uWT!eqnytrQ~p|`MKIu$SJmx52RcPa6}FpNU`GWz`& z{T1~~12lfv&vO&3uPew848S^QUx~bxyg)bfUV~hfVHCQrrQgpe!vHj|>z9x!!_?2Q zb3Oh*&kgtkwHwj@0=qB(LpPDPHuP>Luh4r-zc?^l)-Oe0;?J$!xE?(iYQ)cP8HacKr5rlFj1LS%n2)QePgpO7&{(jZ`!uxMdA&rTmAYO$VcMOr zUTUFs+Iks+7R>CR{pst)2Sb;xmnIl4TF>7JvM*e|ULw!~wJ7@oOkIQC)$64chVNW2 zjnKYpy`)ngf+lpAujhL+*2mrJC1Wl6_pO%-sQ+j^-@DTP1M4NJlm1^_FU8RP8vUyB zKh{gycjVzC+C%fR_0kTV4(xtUe`|;fyZTz}Q4YeeVkhm^!5;kUg8Z+JmC%>yNC+A` zIFi$iA20y@^BoybWoY)Od^u7E{jd@H7F_>a(KH8D2KI}msG><_JL)pmt$;a`I6hjMELC=Z!2mLUl;yuZc zjP=N&7X}wOQV;b!{Br2;Y}!NHPQ!KKjuj8CiI?k#De~(@DtikV`l(8=!14Oau|HZk+jXspBnN9y)QZvRIDW*Td?`B}pwNT$-gXmHGg&ydczd`)af;KdF+#sFk*{K^OX_R>P+8{m{fZ4)& zNZ%k0l!HfYkY$uTM{kfCsGA!k`9Ii$`OrLJgDi((_XcT){_8hLvuc0C1~CPDwlK?}iLsAp{yBPl`Cj@&4v&^~ITgrI3|l$?d=!wTp-W}^h54WrOF7C&}O(7bRt zG>+RSEzp74JE51oQI^5b2^%Fb8T&aKrA+apjnb-kKK&)|oWKPeC39!`@e&X8UcXW5 zk$Y~y56XHeexxMueAGq>Kr^sW2A~g`yO1wf1_QsrKWM(OQBrmMNZ%x-FtFbyv7oj8 zCTW1Wu}KPdr5|WP|G}H2UGeBmV(vy9r*7i=ZN}%cO|p!#7q(Ll!64

6;{Tclvj4 z;(Ju}ciNl8h9S=;F;Z!N{U#}g)~(o4`X1=txk-v(;N4BK5{6+HG@CX_#-8*8 z3!&4zNt&SX!6r#c#E%a*N$OtIM~DXoU=7rrO`@gIKQv)bHi>s{+CvNaT>~-%-3bGd zzYqN+4u}PVunlTE4Dfv_{VW)eB51+o(4RCQEzp7K>9pHzK(zhv7v{sj?gLTst=-+cd8etelVQ{Yj$vc4l(gws2efthb7xe5uAh`zp8v{}Uooffg{R8^D zX+W}w+Y8$%2VmME#C!9Ac%gC2fHbRe*??poN?u?I^gM`vwDb4}q=9nqaq2Vi&l-?Y zs8u6}f!_^C@?rS#59}$vJ0Qzco|^`wo^qg>yc`bSACLm*`v5t#K16;5{CYr&VF=bh ztsQ@$9v+bFEc{qAAOYxnKOp*%wC}+`Xm1#h2=s3rkes9Ndysx%D9U(1Yu;wbI2yTY zvsA%g!e(iQzWJLa-=w_LW~qnP5$GL*y%RP|1+%FUu@GfscsEG5wSV6!wpWA$dKQTd0-$J1|^{$ZeFv)C}a z9(yMe_b~RL2i8J&bhAXDk+?L}rJ#2*`nzor3kFiR zNEq6CZV~eo+CeWgjV+Rwi~n#L^c}cGTA&S+PNn@pTcikjVKofECK!g=X|z9hi{wHp zV~f;6;|KHuZK$74{h?cAC3IjE8i#F>5;r`YexP>57Rg?O9xQ=2Tmb`FTclITkK7_z zi}4EMTS=fgbbf1C0stl8t&|lsbDS+-Xv7>l4?P%{mhxjQQ1zRLP zAHQLR;+3?A!K;Y(Y~s3Zi=>@{9jNUJM7u3IH-au_N{zD(k z_0X=1JY7hhy0HU|9`XZyeT*ZtVb(>|uV-Gs01QFR!S9QiAFv1-8>okYP2?ZyLY#%f z0hdGH!a-?=#*TxMcM0u^2c-svt{jvh=qnqP;>(EVcJ!d-8eq{V@Fs+QA}d{diF7VDP~~(TnNNKPV-NKN*x3==^k0 zvacl1O9!PKn#%^I5&B?6$$v)uRoH<(=)eH z4@x04tU;-T7Hoz7CyC=4^q(3OFLYonbU!;N15p3Ppk!T39Iym>YX+qO>dy^|aUJ%b zAC%=#dtp$Tpi_^%66AjwlrrdheNa-Fcism2huWKi(yZno9Dx3}urr@}Udoma?Z!c= zgucI#FU7wPN}J+8h;sqwh2Wr=(0rS`!q7X6qvE^RRr2=+B?`UGgOZyxPcuHmKd841 zN}e%K5RUc%!*FVuITJL1%uEJ?OleX8X7ursxoYZ4h%tS*CFXtaySITFgX=FyA5&u zO1s^O8~R{A)KZ6}Se2m<>U#{yGHAgXRlnzutb`6MWemye4!UsL+z>|X@w?Cyod7DnG?xg&g`}BlNt0|39VOi_EvB zj2HAkKlH=kOSFe}fc3Bpzn~9VzhWLj?Kk-GGwNYA)PIXU48zQa==WvDPjMx3=)jDh zWA~5DM;Q1Mau|mCa_qdqe1f`7yf6s6RQb=edzd(3sp6}Q2Q*%z9$K#>e}wXz$YBT? zkHR4H0_tzm5A;C23i&(q1C1u;9dw}i80A&O4TI2z`Uk}EIC=RHf1u|R=BFx$nEy|p z|1b2QABJJ*-`KHe_ZfDe^*R1Q&lkv_ME^_XKeS;h^nNuYxlhp!RzUyP*nz$^%)6(N z!<8_wmU&l=yc0Qez8jJjXn)VRJVX6D<`eXEGtSRqw}-q#vlqXie*UTj8`t_~SNZjsSv9}ld^ln=v4+i0K=-+*- zv_N<2R?*X_-(#y3!XT`H{yn!!J9O{0RgArVdvJ8d~*ecn`1IAXVfZhY~7a9lQZ#w${%!7f0@fUhC z@E00Cz~B9-hlMb32>wFvq4*1pO#I!SdRPJjhv6^u9*)1zIAW`q2T%{&{)aqfk^f)e z&rw^Y652=8599(!l75Z+81jt1|5)-%*?}vd_c;24A(&pvy2z#;hT%$RAHP+i&^Uo{ z{0-v?E1`ZOaY8?gs&WqXzoiT-q5Gt*(g}knqo@3Y*)QYI1>^yGe@MU3S4zI?=m%Cp z^Jen=JM?a09zh>$fOa|l{+@pBrXBRaWA=)eM zJ1h;*I&hf3>!*CguoS~k*02n~;E|MHr+n37DKamSel>(6aP;AmBUg1ZMYm7R}D)DhG5!1mS|L0j&p!3;KRMEDqG3#lJ)G z18SMX`-@>|qkruM?7fX2&hE_4I&B#9(mX**8+o9(}{CFQf zKVp7CH*AK%kB7zl0R2z!8}dcHG(a~TfB~5CA$C3`Ptf`o_7wj;EO{;X^Ubi-!0@-s z3-Y0_CXbZ$Fyr?T^6!SZPfFgphNTwzU^#MMFL_ht2zfY+JVFC{`xtM{dFd{)1hFvg}I3lS> zGw*g7kz8oaACVI1Uoaw;V$z5-DJ~q5A?V%_dnWPhG$Jb%lSd>B^_@o~=@^(YBH4<& zj7X`XJ|Z>Hfk7DBm42an_Yp}ymU)^wB6*5?j7T{Q!vGBKIU>!9d(kh{(un6c;)H&v z?K2|v(AsxI2B3KW{boZ0|Dkpueld1bN+>$bI3O|&ShK_3q~aK->hp`qImv@ zv_SL95iwd>k2j1+741W?oU(Q!?J0X;BlOvj>y)Xybun=l@lTYY@RWJbSpaYwr`yS>Y zv|tp5VcO~Re=qYD`k@DgU>P(jm|xHbYhe%up?)9vgI+iUZJ6q&|NEH_&;tu#2>Mj{ zN8|_kU>$T|3)Cy|2U;+35q4l2G#?;8&;va%1j|+V$BdUM!$wtpkoKw!6BlC_ra|35 z!uJ8#g&tM@3GG!G)~NDNX|KvK3~e|7&84(IgEGv8A?Se)EP=jd%*a{su1l=gKaPf2cTZXIy{SUf?3dp`A~Zdf1n5YVF0dx4s3w#$MFYR(1Br?yoCOr zU_C-V%!485g@!dEmCy%kU=Y?r{Ymlzy)Xi8n3PZdPqCh$2fASZ7DESCK=;$k7id8n zhG7ddt65Lb4-?O(e`rAC8OBTTS>_uIKF558?&n!QsthBl`~vwnhce8D?iH**Rfd(S z{7dqw%CJe5U!*@(hRNqreu?pbL0G8D0p`nR>?6M>kI?!p`p|e8z0cWa{=hiF;46#^ z^u0#hU$C#kdg#>S7Yx72I&M?fDfkaVFaXWJGq0fb59SH|=`j6E^n#2JWk2jv{=g^< zL%o3V+t`DFcNib&f0ua+jVAP<8|vpVUhgrlU>H^@e#p9p?iS`DbYS}Vsfc(dXqF;(%utxEi zs5C1c8MK^UgqcLw&>v2OFC5=CyD8I`On z@art%Ra`*GyV6H_gk3P z)Q4aN43rT+^xcZT(0v>JLj891ufZNHgtm`yhWEru@X@F=LcNOkpa*95F&>Z69tL4hm7m0JKjQ|gq5d>} zLJ!PZPn^#phsJYJ>4fGBQOS0g7qA4{wT#mS!3OGp*XtR#w;6{a`h_)=wI=$9 z0a$bcc2^;X`ah$Rd?WoeBZvO?=?5Ag(0?i8^C5YFo)-Fr4)onbe;+eWil2}-82&UW zxi?e(7yAg*{vDM{7>2db{TcH^$vpkiG{X3OE9{_O#Wlg66TjyEICD_Ne4S_erBt1-&QZr;?w7pQ@ZY%6n$m z$4=$FsnA};yH25zNB=N%Ci4HVuFm1zrcf)uu3+!{Q7M4_3q~aX^$SP&MuB**Adgxi zf450IFbJd2fAy&7^Ahd{l}Qc@JwP3_LO_b7dCOX^|hMfzDl{Y%(^Ogt%rp8ugA z=)f-MuH~JxN$@wL;)mLA@f+$d(;u|{K)Z#MS2DiP`zPXoo>xaDf5$}4{|5Rn@D}3$ z-G601E56M<+X?;mXb=6X7!Rm5k4i+9-)H=j$;*edht@}^$E~K#P*+t2PF|4!?)fE(cEP zluqenAxyd?F!Xr+JeN3{>*aJ7@o}oXYW}{*99=S{hIf?=uXBEAM;gHF{^RRLBIWguv{5$(^aI*#pX>B^(_a7 z<$(D5%VX6s-z&!J_lmDSm-@39t3_janbZZ)Yr>A2OOt*rSvtQeHWK%sI5xOSw*}oH zboYsm;jE=GP1nezYRtbObR!wOXDQyU>YuX8Z5rFQs(&WFek`|lPgqiYy3s57L0Imd zt~c(V>#_-5HO^(|X6`&S_ha)Dxtg2Hsat^^b*z3AS0JlFrt+94$`K7pJ5xPB9jxWG+fEm+nx-e0aijrz#n-8tPea=2%-!Gg>Qcjq#jKZ>whe zLoU~U;u^C~Rbv%)Fh(ak!P_i9b) z;!jMsctY2p&O)yoz5A3NCYHKNV%x)2v46=Q;(B!4$*ZMW=}hnUt_fR-hySw6D=*W4(3MYPT0eQ;_%sh@m)%aCOv zdrNI(vGk~MTAY%(IK^C)lCvZwIB#l`dB~OU;{22xavf6`A3Cx>mV*XttvER>{I{er zTi3_(;T59W{>+t|EwU8yFcnh9h3f)Cx!b9vvK(v6Mpn71mhTtpW2nlJ zM5xKd!g_4XaGy#VsTJt+S|w9mUJEElWx{3ux`vf3S2kL|B{DTaY;2wD0iVcEzr z8>}_&l9Z$~f$JYCdDcADE`0%d=uDg=Gmx3c5_wM_f7TT9KemP|$5*+lF}8uIoD`wg zj^2^%Gb+xQ-sHZO@XLwaG`9bv>&Cwu;%#!Q>H^d~LfsWJ>Qw$4sjDjr%iiN_H`Yf& zsxlpG+fIE0ZKv(Qw9Dpqh`OrF!*WZ!f9Fk216SX8OvP~V*!fe%WipOUSA^wXtRXGI zGjE&7?oEj0K%G;H(XH_E4m*yw&4EgqGJMXYeiiz4=x>dWXYtYm*H@^hZQk|y_`z6i z8qptGxNY7{x@)7ZnD-xEru>}9e_VVC&nZ7u|E}LF2UM<;7h;!uox<^C8xB=nCUqxL zmorOU9(5P1x_H0QQ)A?%F8hYC>=EDY0@dSKy??g)g0cEcbOPh``_3^=2@72@Wu@DK zZe}UhA@RBiUrbCjm+DrfQO)BabaQVG%LDPcv1@{auO}L)F*J7M&uz-Wa#g&ZXKJ1# z?5_HsItP2uZ@P{5QpV?EYTh3jZ@UuROx`(pv%0vM7^8UG3A;|(R=%u6zm#`Rrm5u3 zroYRANqseD?dYrdaRSGa`Wz}-L)7K+p31s-KjY>{>{4bdES`VH&z)FrkMbVLczxHz zrGV?{@s7`)a6pZHF>Ts-=jAT(Z4!2jtxr{7NqsZ#!rYnTN&oV&Kv9k73hEoEpSFi2 zG)<(?bO9nCkn`E<%BZWM-{a%+K^ueL<i$wrQ71T^V%+v()8L7ohHfS?avh zwNiKaj5>pIC3SVg_`CSJ$)z;rZvdUXS$tA+zL7eWU-kKGGS0ZMoA_9#_PZ{0bDs~( zY4N(}PJE6?I7-bPWmD(FYT*m&{lBx@bUhy%g0bsgblcGV=UlpfnbIvqw{k^TzMV_A zWlFaiUGtY=8JtV^yD8lux`{7_Wv}?S;&PC%!`Qk|If$S;gzkIsb|-V-ig~MYkjlkR z;H9v99j_N>)AjyX|7uOR(Jc({{^Id#%h;NT(@j{c&a-11sq(>xe*Le*a#*~6>~mGZ z*%KR^nx{4BB{NTFn~U|zKi<8oZV63}JBP}Ch`Q?Ehvg}bC+ntS{HgL>#W z8QiLTC>XzzaxFq-)kU19`QUX2$7AcD4&CGhJm(S9t8uuLPvi`)mi_aF5ZR5wiCUGLvvCn_#C%+b! zKdHQ&KOXDY^~RGbk?(%IN;9ak(5tRz@8)>YuIq_OTS})M9pf)^pDUDqZRo5-r!YCr zPW-jS%L}L3OyYxI``gT8<)3TGxPyzh_`Fbgw@S^eEOheU4a>s#v31pr+i_jNL2Nt< z(X-}nJ02?MKI&4Nc+YbD`6l6j*h$8u-l9HZ71tT@_3?Rit8AUAu3I;#{?wdnqK%t( zLr=R#i*Hjfbq;gTE$4mFRkWMTukt)*Qr)gl2TPRc*maV@$*UFp-PDbmiFp^F$4~b_ zcWQlm&~NJCz2))#pFg?J{!MwJe6B#Rtdr0A@%uo*__=(q>3c>kxNKy&R4wEKaZhLBwvX#hGe`-vxj@_df8}DV*g{ZrK zypCHGOI^2*M`es%57wcRH8{R*iRDJs-hEN*U)5(b^(&~qRN3&RxK%&x$hwf#D%l)y zU9)XiS_$fDI9)sxmV3t6@&7heiF4@RKXvXjQK?1We^iHj62Hf|t{k@+JMXAX`(6a&;G}=**Po4oj04@i_P49Szp+nI8V&*U)`>p{LYB&&6qcvp|esvvvz=e)klCn zTHPJ8d3@}*>BBdzkLEf0@XghS8tX(Bh{5&BNptPf{^|Sl?z7&PUX}(xBoBpYO&|tZMAGv8|t?6B#(}#C81@G^T>pM1IoWN_5k(aVm5n$>Gt%6vkly$ zl)!krdHZ4Kz}0dD_f%)KH^aXj7R+vM!oO>1cwhCPRMbPmTV-leXw?=kY!EqOK% zwMW;Xlg>K$jnZL1ihbAQj(vah{KR)Y`Ba6_t3IhL7!^b;#Qv=@|R0 zhMsEQh-`UPhx}UY4gAF7N0#w;hwwPnY;$Mkp1NW7nd6SxPdBjnWQQE8jPt{(lfOmb z^DQ#fmv*NbtMfTkk6lLUKz2H!`meaQE&mHo}?0(PKOI`QR z?zbm)@2nMD_NyIo33kWklZ&au#G=U3*9Hvc8}%o1JXU{4O43=e>#f)rq#j6|r%gZ4 z(?rWcK193b@pj57m+P_d3pJ0XbUf(PzSbchPSdd_b<`M_qhriszY2LyeaGZIP%bgB zf6I7Vcg((xP7^x6o3yWVZkyCm_FK`>XV_QkHlpnRr9AkRdn;LQ&C{WP74i*!%ynyUbv%(ps(!n*zy9wwm2L~V4d{L_WmBa=eINhAgiY1I(j7v# zJ$JRdwXJS-ysk-o1`eBzT<1*bj{AD^l&W#*#BprzD56cvyB(9y@u+oIhO7^@%z5?Rmm)=BXz{Ccm1GojZ~bA-~^s$WLi9=l(t8 z10!e7yy-jo*tLBTw%QL_BMZiToIDSYJ?o$xiMuv-HO#&<_->d@uJ*D9>{lJSMi%ct zVLSG+{r<}}VLm33ILTFI{TF*Pu8|I#)!x{>nL=z?$E_LrUS~4*{U{rb@@ z&sj5ezCLf_*$K65W8-wK`W*bp*%QTtgW`vcn%KN+!bbF@splJVu-k@gMe&-k=Nsla z7r!=r#GzuK%|xPPw=WW za`gDzoO*63A!FXe;zLix5kNQb)-{v+em!^9^y|5?e%fi9NnYN@&iHztbw5=7 zBpt?jrk~jT>C4COf0ghdd6oK<%&qv|spDIx4r6OAkGB5X*2t>ye(*82*1Y3G{&d_@ zTa@CBjadb4&WjtfO4?Q-Yi9rWor}V@b9zSJ6T0R&ow{9@%{C%@l3g;J{LI+6sQowj zaLx-{Hz;4&b4=F_>H^#>Pd7Cq zN0y?Oe(xGNP_>Nh{XbM@WAkAdbtZN1tGY286XP^_Z9j3|w9#!v*Egk0u4Cu8$@6AD zb#3THiRElH$F|L-+A`zzp9FK(T+&p=js;G zYAiQZ_|Ralk-qJl2ke!zUQWB!T5iKu@vCd(B#u=)vCq`wpK)>#4N+f7{lluS$@9ZD z_xIkJzOSk?1fT!-%{hwoykU(zI{P@zoU^;m>ML81>&rQUpbs_10s6_?v_`JozJ5Zp z_A|aVBG@Y3yhfJJboG|KAofO&9MO}dw%RyVQ=V&werFC+2aB4S@wSwY{JWP_B3Z6=wHR8^Fg`r!nM+{ zJB4lM)RL6I^k>CS+GRE;xHrz&t2ye$UQ@|h>6uyd`iXr0{rOt?bi4AOu>V|fs(8 zP5%sX&>V}_t8CR_tFmgXY}`J-4*PF@4PeWBe64)FeYW=aZ?@Ef2Axl{*Ke0C*E@5~ z*Gyup!dBY~=7qAw&F@>)$4|Fc-5MMJ_p+Eo<)Z=J^cUCicdZn*-KS<=dp$qbwZFO+ zPUIrl{Xc8vbk*u7z68aJ zp33bupHqsr$Il41a}OuuDcqWm{iN}4K>3I4lJWKB>KywfOZncY{JE@i?0!G~aLXok zE154xSu*Ce6ZeBvp1aV^D(VzI0>yk^>f$fP#y=0L^S-*lUT}G*Trk&OHDga+Imc$D z_GIOE5%yZVopR7*e^H9{1r;<-npYrNGm!18^!ZV- zHz3PG_MQ@qU4u{DGkR&_B7EYzj!tw#=*I46PS<^4rmlV}`7Z60mTm3+cBXDFx)n#S zme04vmoM#F7-1UsjJ%){Y^b>dGRXzf=Yx>>vwN;PInIUUd z_J2QJuN_(b44H$h9GS|u`cZu(o`$^{dTGeg|1jNN7P9;qGB>jF8L~oTfjC(@eUu_= zLB_|{@iFJ-B6F6hs%0TsPJKJ|503BW+dM~p`P4I^2Ko)?XT8!n`8{Y%|4bg&eTkd1 z)T=(*(P==3%b-}FF`e7T>eZM;sc)lx;<=4j{nRs3e^5_h#U6`QkAjasL#pOp_UX*0 z*E`4V6%#|O-Pqp-tLM98P1GauDlRX&g$#+&}fq?5Yc5_q}6>sG0m`q1%A&!uUSU9{>C5r)Z-h=NA5i zUm3LV(x&>oPI;E&$@r(9hkpd!*nR%x=q0b}l&tZ6ZX#}%`dc_#XtfTWpTxlg}^4Gn4Ss$p&iPrk%lhTHPtUrZL`M z?qenVf9$;vSY=hY_@TCt|nna^*Iqx7xz1KElRd0$x0H zx~1Frwqg)F+o5mRHE#ZxYsXKnx>3&`xpL7U^pWv#^A>kqhL5pLG{h7k7unO$R!)qY zFNFPNhi{MNSgG^u68!Mzaq|?n4_s$L7;=A1HLOAVV%$=v`sga*-%XvnZPR&j*k<@S z7h+p0v~APl=3`tt?(t+ zt=?ukP1^Xh-#4qwG9ODiZQ`qb_^S7fn;%=k7dxihe5W2^`Af(CIP~p@O_)!+>D^`dc#K|R zI%_rg{^$v3e5Trp>+Fu@7M|s*n0|SNL;_9n5@3;21zjm}wz=tyKPm#jH-S$-X2RL) zrt`Mu&jH_M;a6DvYG3^MYRtemNsnCyp;?X$x<9pUF8eup ze;6B>bxYOCcr>zxBY)X%$q<>rUq;R~YO1F5Y7V%XtO>p6TaD4=-ma`?-)G!mkJNyO zoHA%H@{uDp)qmjCd8keLtejHv(fc?< zz}*gF@my+4mHI4$w)Xwo&9}Q{>LX#4-F4tE2VdmIb1iyW!R5bW!rbe|+5N8ZGh2;{ ztA1!Rb0*AV-LxNtgzsX0Y z+q~`O@7%I<|NTAND6zi;y6R;U=0)y4)+N_|-d=2|hqmKiC(Lt#`aIWp5<=e%eg6k1 zOv9ajTz!}G_$9O||B3vQC(KXr-6_BQjNKL5PeL~f-86J#ZaRG?)_>V$6MyEM&3@j( z3A0S}hYQoJ8Itm65x6aE1c$`g+5CrA>R|->PUQbFsD6iJh^yyvv(UCtw@Cxy^gZoGF}&X zqtNw3cgs?sv&WrNt?@y4eJr1f{n;PKPrsiu*G2+lXU6iG*k1;H-gA@Y?x0v4jE}_} zc$(p9**$62OIt9$ZY3Q#cj7nLt!>^2&FJ)`8Fsf9w_o-sQa%2Gw*Q6X@l=AUS?H=> z^yH;=maAl$McSDh&F20ub13;PV`^j+@hLtZe$L~^~XgbJxNQcyzM2L1$7#S7C)%#K2vl^!*V1IDD`w}ml6e5vzQh>o};BO1Rx@0@EUlNq7alV_1%0Da`m zQFDxIr;IMY7(aK!tNd9FeLwUq?)K)Q4_^`A=GvjpIy!2e;ih-xCFA=s`OTOx2>tS` zsQG?bD6#W@*g0k{{9`+fg^#iutMPeDM1%GJ63=(zn-)MaloVeLw$;Td3sP z5_!0W|h-j^(p7Cqut{;!*2AdJ@z1{w_8ozmCr*(iV!~sl7OA-r#O)F8N`#eyiJ>s(YE#{&( zzOL;N*`3f9T^2Q;4eEQ;-AOGw2l`>?r`JXGvo3bM$=LrBKCtia$-*FDp<51JJ#xP0rqgkE3slM|p{s&!3c4rVbj~!IyV^)LbMv)ETe80?m^u$8H6`v|-_VFSe$C zg8bbWH3zwNY|v$Tz%G;Y@deP0LwBQ_&RvI|F}299fv4c+g!q9_Z`75Y=Z) z+vRflFiB3@MxosdZ6CDncKghZr#XjI*%`Wo@_aGsdk<VRG;Z&%a%PNQvFuD5}8|| zn?~k^X?(HiTz!h(52Iy9E@K|k6OF%bC2du@8dtgVp(}*$Rzx~74c#${U&_FDf|ub| z3@-^&>!}0(1KQ@5ZoFP|mX@IcSn8$&x<2HHOh*ovg6jj<56-XNM!+q7*i()RlzQd6 zX$xQGmaFv3N}Fy!s{U*62Xg3UWBO$(z*klO;0wS9#byQg9PoazCw16h;s3=gf30PL zmHR|b7j${Zp&N_EMWfI?sqEMUzVHYBdc;>-!B0IBHD&3>>&IDeTfxaPjT3WP{BhLWBJ%V-X^!0T>^J^#;(lXkn=|lc{gg3NSo3lpS_&5C;YcY9 zUyZNoQfd2guE4&>qvnH_E(k1N#NP3+IwN-YLkV;h@Kg^HKUUlGJR9rTn{B-2we?+-3qC?IE z%;B;Uconp&-B7Qf*qdErZC)u32~86;TcG(5uEj5!W}QPL^1Gp_nTU@Mfe!$$1HN8( zX;Jd5zO?UA;6uQF6^k2buWG+axHHYQV+Ff~_bTK^qvnv%v;R}a1-Zn2aZLDoX|7jn zJTbzV6Ge~~!Z$xf4w86s^U1jk);njyj~nqxNO9}+jYjypb~D!ze##y@1LaF;k{nh3 zhi2e~sB=a$G^8lKX{0VYys9iYxQ&NVwck|rF>n$ zw_GvhJR2hA>jPHvnJIlPd|+Onql!C)G4Z(#ku{I3rFTvp@-rZk^GoY!Z^$yamU4Og z?#=m=emP&t+>V@%yQbpz{{w3Wrut84gl+&>mkTDbJOZo-ShZj5C)r~kxth3XoibM; zLw@r4ECp6~_mugN0Cah%SL^&7rp{ls&-5UN9E(=&Qup<>j!}5SN0XxnGD*`6+j&Z@tfpq|rDv%%XWeu?QcU$Ko z>6lf%w9dG>%yy-Wr9^)R^wr34+uj4L3YgpWO~5LF36K29|50ESz|`2&f{k19)L0K# z0iRi5bq3q3@~j`$O3&{gksOp>Px}FuAw0zUnHFsh@FC#twznLZ@VjB9z_xl|RlufP zFc}Ni1FN~;--m7BhQS>rHt>_lryE#S$CN2;OnwB`53IlilfGgYSQ)TWgb4dDR8NM@0cft;82EB81e_fzQoYJ8j*0?P(=ICA7ibd&*G z3QUHW@+0M~29^cvSOH+y217=8y02=o=pYk1)5kJTqMpo4W zQ_k}+9$B98-6u0j@5m@$p$;5akx{!cqkd&Z<4T?!UzyRWPEJ^99jQ>7(ZlyXJ_CFP z(@Haj`9GRg7L>osuOq&vW4@BUp$1syZ~pA8pCz}=@I6mT#vHxKsr>Dq^}8;D`@a40 zeV;zFMCxK1{^7HqH&<{ib#aS|4qZ>_*Au_zJg@rzaJO4Hu|F4FX8H5xJ<@2wNlK25 z<*Ip-PUnhhJ-l0$QGJ6Ap(|I-PQ^kUa+Y54yt&fSZ=V4!wzYyQ3&3pz*BpQw1lJ#c z+X`+f05=ORd!4^6Sq+TW18@c4S^{uo;06M4wcw@$a4q0+YW;2L23HY)+XSvP0JjC) zrU2X?a5Dk8%p0ihEB$TB2Ui(@D+SjUfU5yF7=UXAwaMLtc zsRaU|8HA?dn&fiEq3MGrnVj@S#-GxHJ(!#4=5BMG0#9*1TInjl|`?DU(Z|Bl%tuxwzJE||zF09FGmnVl8T40`x# zfsHJ{*9J}Ab@4WI16%Ha^#dz*!Njg%U}eC9>=K%3XnK;+EQKZ$Cq=IJkM(?TwGIBb zQgB@XxEgSy0k~$-cZ0voE^vhbxB+l=0l3ZJx&v@C;5G-~mawp&eq*975(|0YiohMk zwfqRI2w15HRt~Jf1rwjv0L!^4QLf;ch294z^1Hybg0pqz0P6$R0W7GVWnRA-ni*(5 zV2xKi<1O#`5!pd&AR;TLN!rifM^+uOw%p7ZD>b|FgX|LD3?Qp$?s@0k;sP51)|0;5 zlsTvTh=0d`4FOvw0LE^gaExPt3<2ev_>sf4Bt8q$q#|1SEQ zpqYZkPk$%4O=F2Tsi%H$GvJ=EWG_%p-}9>{Ret0Q>`c@leqGv3{DZS|kIcXGfi2}8 z%2&CTdlK9Wvd`Rzd*AmA3m%owj=Z?r{N=kGT3HvBx%G%Ww+0YC@(B00w!>ZDjPJO< zRJyLuc;i~KSk4=MPf0kZGKZ*#rsBwH=NT-0W}*GArGne7+a+pl*9C3qXQ$)t zFZTf(`qs4GKY=`%s|*1f1m?aMw*}ZHV4KAjeq{bR4Qw_uab6m^hjo?TTl|b7O1VQP z^P_Cwh0jg<&d&cMRez_o!(-|DZg2V9X4E(be@z}16eIv1O3de(`j zpcz?!X34$Gum3b1IA>js_yTAm+o#Phh%VeG z30Nhtbdkl6(6s{_I_d@e4rdFt5m@!nFX%mT7Hk06{99gdVnga{1lVx-3+4%2hj{rrp_cdOxbCH~y>D=zW)CxecCHp>E?|ebO_lobLqX5|E zdtcCN5X6ew1Hga5m4QqD#Ea${u4S!hgK?u;ZBpe2R|GCwaQp~;6R=WX?-YQd*Ly~V zz7t&AO)on87z%;)0_z0ER=#-OyY^gN7w>v?^HX@I;2nYY1gmZ8H3RBR@!lJ`PYxpb zn~PcReo%Fi+fKPB;T667h<$~?HXZ(wv;I~DtPEJshhB2t;ir9kqt*NijE&9}h1K$H zcPp7~@HhVHrMNon23EnDL2nhs%14|5%w;B@P2g&wf2-BT1vUz-1o|AVtWGo6*lb+G`p5-v8b9@`BV+4uPHv??<>MSgF(Vm!8;Cb zNNkjMFtIU7d@?Kg*|%u>L|{w4Nd5+9?_Ur*bAW9;Y+*ZvzYN-Rd}Z^O0jma9a>R^z zlO$*A&$Cul!rp?o&9dhOob}y@{UWaqc{NLC%wI+V!k|ePY1~BMxNLlx}WvD z6K71i2K6JbEMR@Weq_NU4)TB%;TzR{J#Do_=r5l!r!0DD3zfh&T{~kwD;ujg2GUh> ziH=2W>WL(F2cN|rN#}*hx>1zE(g}an^)qH`P&woG7!Uhy4dI>W#mE{**5Iu(=JB#m z(uq^Omsl3?Fy_y~txD=aY&<ykNDRe zh;0&G zUuHb?GX6KRs|ok93Sk)n7rOOTbC1RE*FP9vNbDfQ z_E0DO`Pr-bJ@0%KSQfD6XZPrHlld+&o(HV%Lw|9eA=iETV|G6tUYBNHIzuT!R_}ch znYHkjmHfs0u+^3Y)clYepgd(qPltl|fI%}J}Sw4UGF!nx^WjT{UdrPJl5mYPsK z{G;$k9@(p(Sxu~K?>(%w8Ko;T%2%q5a4YSNaPmgl6|RkNrRo(zJ`sjKsp}GMh!mjn z$6QPOX`AhL!^Y+`LR$~*5VViP(I(D+a=~{&TiL%??#*(O#W@ zZT<2tQOiM2jpz$y^DI31KVI18eB|eTjs62#Q*3r(SqA*7*Dz*W8+e7j0{ZqxQ=^x1 zwm@G!uvecm7hg_&G$z9)q3eZi=}(gTLt~-d6s{Fv}fxRsJ zDa@^erxBi_p#$UTg{Scsd(BVA`T6ujPg!v;F*63w#wU}x^%n+H2-o_2C(( zuE}VRfA3Mc@B0sEE6A!qR`IWr$Ft~cf^HVN@*tg_cP%Xs&{>46VPwt!nwWL_hS%y^ z@ooIUxgyv+F|W%14MO;tz2fm4c$KV!8T`QpL=KN*%{tt3E$FFMozo&De7-L_=|OP`Lx#Et@B%YhYgt@Aef zHZ41r11bk!0sbV3zRd;K9>6PcT>`!jymW&yK5*>|X}8x>#D+TP z@?P<`L442#z7)J&2Vz$@um)gWy9&T<0#^&}%?4kH334`LY?;wAE@38U81}$~ga?Vp zn}MffPog}rZ^=WfYk~8tTd^-6d?k3>K7kbjYw^G;fc3dxqPG^YyZmPppN$z zaK(R#$rbueV0FOW;?VP2B(4S553W7{HwvyH05=V;F#wmok@yI}<$`Mtz!igQ3BXl> zYYo6Pf@=%Fb%1LR!1aOa2*8bi>kPn6f$IvuMZQU#1>kbPZ4AH_f$IstRf6jcz%_vD z3&6F5>kq*7f*T0H4TIa{gOeB?2R8`Lj$4WKSzyz^3c2>?G2vPIE!xB07>|m7V1+JN z4s^x9YJgRz*>cJ^7_#UogA70gd}^TSer>OLn$=FFg&MrNP>(~(yf(v&Ox^ zg)Z~kj0fiTnwPlfa)H$YYjwd2flUK*>n#Je^sjr(E*D)ju#Lcub-@~d^#RLs!CHZh z0DF%M)&*<|*qg++{D^&hz{dZ!*DO^K4I2WMW5$z{=8I)8izA`6`QLVnZ?T%@@AroKNH#H%nE!hhlH{9g1;A zgXFa~WDT%Cv|aR)&yA0&RS@+IX%D#hi(b?3+FE0e)2unRzK7%7JIsT93-rBfU(;vO zUN2!KeS^GipkS{WZk&#VyKa}>k zuPsd}wx*BBSjPWwaq9J^j$^7)3_QAM zqYD|chbUtV84ZUYT3K>`$oS|GWz-_0?ubLPqZb)dhajVbYMntw&C#)=l9RKm2 zcYWuBzGG+P@)AO zVnnYw-)c>m3zFW;YJqT~oocAgwpHt{_L7dy6+68hhh};e>&1lCJoqW2v?%@-E zE=Xz6xgZi(wcH#n!j6}@PURkv_^1n>^fQzDQrgiFbc4`67u1eCdyIY_(2%4JXFkgM zZP~uK`&+rd#(<@2yOg&Qo~n=TGcR-3o4n{*uXH4|BdO~)cskG7XMWAiW87=AB&}=l z*9iQx<;ndebbFxd`&e>1X+PNm)Z4iS+kW(+G6#Auy&at$=$uA>vU`!@<4w?3o|k&A zk}}P}(@?R`vzJco9ATQuJ^o_%dIjkuZht^5C#1SRK@z=otfq5v zkylcQ@zUm@_3rQ6Ma5xClG&AwPJrCnBlYybH^y&s8pqUk;>`CjW* zc&eV*=j;Vn`5#y%uw-#1ejI`>b11d3PZ9KcpdW+&VER-k-}0YQ&L>kZpOmE*o_TnZ zl|}MXJ9Pa|y?$-I1)Y(f;SY2YCMk@G1IGxGUSy20;$X)JZP>AN_`v)+2+ue?$^0sH zHU(YRFD==ef2(8i8-e@(rOvV+r`~?G&%9CcHakGl!b{SmIku|Vx1`P^aoPY+^B)g6P7f*Hif`tzV*oo| zZ;0{Av#FO;>Zl5y(&rYgqZa5wTdnrOVTwVyN9^c>b~Ci8){*3vad^7_lv-}dg+A*S zjF+}0w_E6npv&8yoK9@6fo=@COX)A9ZL9L}0t$Nq;N71qvOD3)-jQ6klx+~Y&Cr=# zTleAA9vHv9xl-pd&~MzC+PFUZN!s_Wg>5K-ZU(wkY{#f^ zc>X)^xu(?1JUW+7>`Qq+sf-;9o}#~>+~+zARMwmp665Zbqn-k&=2k2XOiku@N11a7xwSH{v&Z$J52xf;==R# zQfND%&3tK}d8XlO^BUHf+>`Y1GT)7FdTcg^tgM$0tS`>`CA_a3Y%Ct!e7hB$Rp^|d z$P10X`k~EvHF>*~9I_R;*HM%ZILW?>=)M z*P*L}^R&cWCA4*~{onU-W7x3~I~H2UkQ}t+Y4Y9d!Pfi1<)CJC)}S-hv7+Ryes~J@ zrQQch9Z$hC4^Of&dnR<5Bgo&sPrrwQ@8XwSV57iZuiPwlbfR zX9KGQreq_hRwjQr%*ALoh2Yx2srTs6r%UsqBPdhZdlg^Uqr@Jg_^b1*+}@tXC^!M@ z$MFWt-;=5OMb-QGZ-|Fw`xDM_ka`b2LwujOUyoh*D)pWPtoUCO=>=B+t|0(d2CgRn zR|{@y0ImgG=D+#t>jqa6fZGJFF#xv(TyFqw54f=aT;?d{Kgr*gd~l@!xKeOU0k|4) zeF3;;aN_~EE^tei``a=At}Fnz8C-J!ZU$U`0B*@|$&&%NJaE|`@VBJ|TzLSl8eB^N zt_j>g0In0 zxBy=%G}))d^Hl-M0~TbH=xc_i#lzPDtbGB#0cfT@d?UbSlkiDdW}vAk3bsjTvKS=w zEkIKU&63lS%c+8<7Mfd->C}n+STKrI`Jowt#`d?sI)IJ3V33A-fNfns-v~5?9}dF^79yCQOg5`+*GH5!Xaobc4Y@-V%vKoN(C6OgG zozN^<8LUreHbGOHghp%{gJuXC+a}@L18fvnP+SVl(kR_H2*AyQ8xFuNeU|l*~OJOH;9Tx|eu7F<^VF6%kkM*yw>T;vRYTgt!{ z2HMz;y@Uy1{J@z- zHQ9jk9FpRh1Jfd}Y`^)StiAG_D*GVZYvtj#u>HKK zdPt=>2eO<$(I1uv=QE)xfu?=|np$W^7NBW^Chud(b@f5hvH;CyXvP+xnT4k4+~E8! z<;vbhdtHF07@9rM1m$~?Qv*%;dC7IPLemRPGC94_q*o-T8HJ`M2~7$1?185JwQc5w zNApF;f%ELr8eVed+K9AkiO-gvLDqj%|F@m?e*J#uEGB`K1M6tm@9bj{SPigtU?+1e zKLTq6wh7pA3PPX9|2AO5z!;(h?xPaAe(0KSSeR}rbcHu2r>jR^WQ_h8x(=?TKX&$I z>9a%@xc7YE>z=Co=*+%pzjGd9A*$PeYSERK7952+F|y@phYy!qSqo97~qcVOgPZLJ;V@U;P4 z@$LJa_x|$6JK5xQy86pvrPOgJG$YV3bn(W*uhj#Lq^NvQgV43yvEMY(G@U1>8LzrZ zDt?-QzNUHqL7j~wu~M*;@yn<8ALKrTSgg4BDXdsvpTb6TwtptprV6lQ09YHaMMv-j z=jnT@j~;HVuohezf1%c~r{Sr+XTSM1SbXZ(8|Rkx&;jer5|2_7k zoWZK{LG7)QdY{6Mt@rJBo-Nh)9q+Wglyq;g#97`r{reZKby8RR^1IJ0aZ(BWR_G5d zryTe_G|@SN&h-0VKb@KAES_Nf^4t5Jcg={eDuCrYo|><6p>KhH26~pLylp-H{43~s z29xJ=v1v1O)&Cvqm*k%66tF5_cNu)~%Wt0ZebxuuQ+(d{DkjL8=gt#t0ki(iZ3Z}|;%XO+#Jn^_lr+S)bW&ZcDK~e-Tih z(oU+7mHx-n`eyNA8}w7q|6lr0?9O_g{Pk>V?OW(epr1*RUVPjD{or%^&9)SCQGGxz zlH56ntjMI7D|eZSe_&ILxJo$8YI*Y)skfq&E3>(>{GKg*`^GdlaZJ_LWt@JcpWyK_;>&zj|- zdNX!(@7SNxGen^m=%04(Px*OAiTCC3H1A5iebhi-KAsxA)LjSkITQO+eMXg}?molx zz{gJFvvf9r=1=Zla4)DTKeRK@n(+Coqr{yDD)C(d{a`eflSM`&u-iNY0IGPTr#K6KZv)X z+iOE3v_(hGnL~;8e#1+<5!x|mpG>4pkUI)(OGavP=b_De^PKsMM7a-oZOHoz`32fk z{96HSeP(L3&Cq5Ym72Z1&<;SmkPQ-7TcE8vdd~c4T-!g%X=Q$M?j?K4%g4+)YuBa7 z$pO{?tR=;jCVddOJ5_N(V0qLDK<7jzvP0~&&C3DPNTCBovEHv zE_o$qmi%5hw_u+xIlc_qS!f@M%kd*lj!*WE0O`Nm;ICaf_kTKnkeJWfM}DlDGc$u? z-gCb6o`5v~spo2BWqtDXt7oZ)&FCyf=Tq*sA3HZ?!MS7Be#S2sAFRy>KK~G(x1w_% zozGY{d*u5ht;`7bOYQE(4vtR1DbdLV_b<`>Cc@sLfpflAoMx>3+z>{^^-2dsC zhxn_JiC-CZba1`!T0!tR9I4)mkrFO8 zm2)XSBPTId0Z;W+bNc;RsjRF01JwyYDbkA_Q_%M|B)3E2Ju@vWRC7b>^GuOl0#Eae$z=;&9dv~^ zC8v}6>wsQXs)W>x#@XW$9ee?fqKOnKx%tSf&mbnGb1`xmWLOTU* zs(#rD{lKlM=PuEa8BPn0H>IXS>a-a8{@aq*spS4z=<06&`}95i$O<*jrF@@I`hY2T zvOgW)2h0O21ePp6O8&}?5RcFu%zID7r#0}8ZAi_hD*mDGYe|h>>R<@^=FcWChsd3V zuJF#(xm?j-0^Q&Obka`iplfVReLYTOcf-^FxrJ>QhOX}O$?3!gGtlMU zoth6MZgUo;h4w)IrWD64F9eKPq%3vF8n`F9jY8J}UH!eu=_IB%L6>)5d`yo5D*=`) zrbWjrbn_|Dg3wtT>(%?&^d`PL?AIpp7EV?F(Dp!kw8-K|l^@v9 zSLV!00eJY0RW1Rbi-m@lE9`;(Kdik0o_S~7IRp0|mhg^A^&a37WK@5B&O9rOJiRx{ z*-z@)OL|H;{uq4a4>2L_mh!T5Lurkfiyzq0a9HTLMtH7>H3DObsRZ`jR@zwl;`jL~H5MV!OijI7AR@G87(&ol4HNl&wHv{6Ic z@h*p_lTZB%+st9g6S>>r(`B;XFXuUf!Sr4CTftEc+Lmc#PS0#pXK6*&Ix^M%Yqdv{ z*H7<>Go?VkdkFrTv2Er*!yh?W^XZ5o)_|3O&w6E>`LV^|-|NVYx7G9Rw)=edZgR_+ z94CJ3L}t#uZDteyBgZ&0<80mUW2=;PYP)6YOJ7s|wr!PMIs?9R|2Fdri;%k=yeC#T z*urqd%lj7j>^&Z}Y%Jn`S7^Jo@hPoKw-wpJq~3qT8&-0-4WJg{saoyN2KX9m8y`xv zu><^2+IDT@{fB1b7_ye8TQ=UBx{XVv9oaTskZ5Be_~JKNHm*4|8(Wao@n*}$6H~Ww z6MSvkthzoT-o^sV-wHnaE!)la;DgBAS5++BX`FuKqO)TuB|M%+OJA{M5y?z)S7ro% z9lKq(*H>LUXKYY!i{|J_hkg(A#n2D)?vY#A)DroFruXD8HY7)43hy+|SQauGmxZoe z7P@#@=mPbZYvVpX#mhpM^Y5q2LO1j8x@Do;_;=Q_Q2706TwJ^?^P-HN$cl`<$Qj5K zYDkRD%R-kdBYF2kF0wG!13iCP=i zsB&58LdD;p{$9E)blI}d>SdwQWooZ>A-Ov9BxJRue>!GGx6_#ED6XVGt{@p+=|S)(|DH+|0Bl)$Q+E5Y25E`;~*lH%mT_g zyK=kQA0K(O)0IE$vpn1M3t69Yz3Z0_VRc4zNjyZ}W~^nlAanES+s!iKHS#DjbsrI* zKRtWjZ}1)CtyX*AYmmDInWL+>tNpBz4Zboxd#l*k#L>G2o)wZq`fR^3=jSk{9xb%dgLDH#c$}`L>Ja zqtaW*d&-U5?8G2CDxrVomF?zZ(mw8X(Yx*XTg)yQx3$4Dzi+#_N_5;053l!aP$L4} zC-#CL35}U=5xegKuluf8pLm~PJZ$$jY7kPOVs;$9eq+r1mc-X(+LnYI<=K0DxbJ&T zS7eN#TgF6%Z=(G#8q@W1y0*oBztg=&l|2qh7!%1{wgKK;cv=3ST{`6;-c=i_-*A}K zh935|n0i&7e)#vmf2a6q?#s3xG(R!t@E6DPua?&$5tKQq@OqdgbydeF{cvLG)G_t0 zrpP16^lO8j@z#3-+Tdtf_{#zAli`UfLnHcfR*acp`j5zlL(!+lchVL|kePqhn7Kpz zy4E98wMBKlvji(6y+6e_Iz99>zL)^z%x7fR^2w)<+f+8D-USdj(Iek}U%e~78QM#+UrE$|`n8&<=>xPIMKNkD04aqb#qnYU@`YgNxn$YSXe%t?DI1#*OrOMbc%y z!snu8p^q;MeQH^VZZUkNKFMb%R+R@S8;_L`aC*37_U~mTwJ3d zM$57g9i_$rs!|l|VOqt9o>rKpGcQ-2?Hydr@S$H70(w>Y>u}*BP4k6iA?!qz@p*Nn zrCzHz(O9ok8H@m6xsYHxt=)^DT z;m5F#DIj)&;uknTO~AEg0ge}e135I+6-e02zrh6EtaUxWa3{{_o05JsGsL{T*X9;MQ>UR{35$i-?UO&i1fjy9S1X7c^# z$IN%iSn6VCDDL*Ca!a+{5z_2;gcH&T!yV~I>ya~i@0i)3a+H>%_DONyi=@=6Iu3FX zxjIw~eK+*A?PKO&xQ?ua-kGndzJde4?9O7yo7&qY*NTjBWQ>2ol5xU;%aGicmr4Kd zr7`n0v3u_R`10Gi4{O{nTI5X=J|m~qY^yeE{V=lOT6A@wYx7se%+tiz5Blozp1)}P z)=%JSrvCCowT~6jYm}iYbQER#I{molTIZ|FGfoWuK46)lSjGkABJV%O^jgWa$Wv3_ zrF6Qo_cHlfNgKRH@LniB{)l5sYyrB=d07>w*wzvOJCTH zp4wlGnfJ>$()^-d+%YeTk2_w);9KJ}_*KSVdyu(tWX!x>{2WDQe4DDan^c&$9eIXJ z)ur$+$Ip9yGp6U&k9%w)7ue5lTLX>fd~(4cszZ_wnvu0-bj9Puc8s zx4yVJV|Xgy#hrcDJhTRxxzCQN=l%j@ChV>GV?Z7DQEpiu8$f2kpT^WX+aoW1!H$c# zw(>_$TPcQb2ENj5W9ofZk*DEv*ZmsaCgfB;tCF6|7v18caCFDF zx6$~RyeObNqgHuZky-HPG4o?muj?I|apif*Qy#Hp5WdRi$IJ`FmNgDvye;u_8{=~S z<{?uXRlcl$BEF}`%y-Cq=@?&`C8TP1J_&aRB*k`wO8;4l%)yt&%#+2==h|IN8HJ>bHyaY8pd@|8<9%o`guh)Cqric!xP9_MPWz zle{^_)!iCD_P3~7m2nDrGst`JJyKp@dF0VWZh_&Pclb-3As0&-i26Evy)M=~_8D(Ws#f!ndTAfiJ&JBq5dQ?c?Sn*c&f1kR;{Dze4qySxU^F(9JPZ!ff z-{s2H%o3$co6wX0;T>kKwA1K){%s+yOyN^}O{Y*ye0@qQy$)@cPu|;zpW+?n)8fAe z19UaVw~_Y+C~HnLD*UxIruT?=asdx=#1#Qe$ltS*uR8pg(((g=$32_+Hxf z7_tgi?J&P8EejN3C<__~Da&Kh&y?%aQlhGV@2UGa8qXSAz z-HDy8$gI9>hxs$H^DJLG6UI4r2jsOG$}V-b6`3QoJIqqamB;(aEaBLTI6FV%J6dL4 zH7#Hnv^!0$hnHrPo9lL%@0M8H7@N4XdzQHj<{Ll^k)T!IdRpQrUHN9u;GNBF) z-#U~NPT22?%st3#z{V5Bx6yn2;@2~F56}AMU8qD}$vbGTH|;QMMc#LP<$3Rggahin zKAZUOK;E98>@ZiJhP(~F^1N-qU{Sze9xv-pm3}R46_W(tWU3G>T?8>T1R<_N+ppA$ zf^j;Rtj8FvU>UM{bk4HOn^|ajpR5|Ou3>O5$ymeZM|uG)EbuGjmep)pMMks1dQe)q z{#wS@Gx$nT!Y4td7uyV$B#c}5ur48MM69Q=bSEoNSENYrKZd>T)^uYRhfYr_bP`b_4!YiWu6TeJ5`J`lT|9Zq?DK~D`qSB^zdQ*kXTU? zPPg=maTjS*N-PjevcxDsC2N-wSl{M@?~%$Xmw~TXjFg* zRaT@Z)a7b%i}fmguZk}+3vpMo-s$Jo6_icYFBaD-A^I;h4n+S=gy3YB3{KXTAK!jj9-XPwoeLNHNi#u2mWObFlxQ?YuR!^l>@LfFmakV4|fbY&< zE?9jdj35W@p!Bu-FO*4s-IVTYUluoka}6ceiS!Nub~;$%KojF0E(})Oi5-U&I?AIZ zayQvw(-6%mF_q{_W2IUo)#J!ShwDbYb0J=@)3watDD(le|qvpT~Do?`Hh|!JTI2@%U~XCom<> zo0;Rrt?Nk4g+H5y80i@hbuIr0Rh?0cFR8r{s$auPB!l((whrEwzVIh}fEXiuz^hv& zJu2^$OjNJEQVDe#~%&PTH9g_>eL6t_BJL~sWm>0qlQ z>ZXkI*d?(dW0p^IxFn-ByfULbdm7Ti zU;QVn=`0JF2g!I^#(hP3{QvS!^X)Rfc=faXGUMl;C;8?fl7x(P+mP4xz)o{SY<%2T zo_F0p+#g`$C^i-$a}1fo-`Q!la~=6EGTmzw%q8vRKI7xwHHreopYuNUL;a`4f7gNW zccQZz{#y9&kuqK8TPDxE=wknTQXRhAcMMLNJ>QQ5c=)fr9BjqW^*4`gRX^BizVs$+ zoAb5JI}doDue;eKlTTU8-p~Gx|JteEhZ(tp9D}c8dm_%Ym$Fx9mu_^IW$ zccr4|!2KpUXb?S(=y{vO!5>nIVWT;~Z=qu3W&R8I2Y$BG%oceMyW6{7r3)@u;{Q&etcqnqB zuU#HLhI4)GS{c02Q2MbR^o;#-r@r5MjJAt)AnJL8-f!tVn821Z9I3jwbkOjM|EAz? z{?$%%t=Jj%wbRoNu`u9YvDE?os}}#2(+C6E69G80hXZ+C5EQok+l0Bay@7K(Yq)+>{uRKpVeYbtG3TgbrPmgq~n|&9rz!*3B zvC!WdU-Lt(%&7LAJRs>TKYHN4GbrHa1<;42PR9S0HM-whG5zM`FfpNdv|0aqSPS*hL+I)M!%p)@qUUbk zI`_uVFa7+LEN4m1%s+|o${%-{S<;3s_SNGl&n13p*yLwS`yoj80Zpr1jYWIW-}~%N zvqI|SB=iT2WiO8(%5s-O--Dfoe+2$9;Wszf{BeB+gEJ?4(4*D6zA{?YbBX12JT=cT zP8T`5969=)vy7=@edPHGeI&O(6`_-%3PO#@X+`E3GP@$kd^oAh$Kxdsec>y(iRzY$ zZGo@YiL*D}Z&xKz6pJ=Z)-VeBsmOPOCLGI6@XPfAGz^RkCc)83KAb33? z4-~>%gPfLK);NEIw|vRR`Q7lg!mG-9-an?SW!RX0GUE&MTrOoj!YM03MZmh|iB~1G zt;8+WGA^q`Ugr2t^ZO$2sn7VfHSf4g>}ZFt6~0}P%N~Jm!MY8f;v0)ZKsoZpke4^P z)BJa_L*xbI4Ax8HcDvAA5(|b5iPz;+Y6~(+C)}UWGGp-?KhF~zYM}3c{t=)moR2H1VSPH$rkg}McR{o5Y{R+FS z(nhYbuNjb)x~|W0U0-frtASb(GTV_~Ic3e89@X;o{l54(G%ky`S(2IfdKCU)_YS3*t58$#YV@-CFQ(Z#9A3pe}b3?_5F&QCHhlK3bg zaED&pX|Cova+CH+tWBJ0$2jfaJo{R$0ZDu`!@C9EUa7aUd~NrP*Nvb1)th?0%qMPS z2awn}g`S)l){Df(4amGBh1fdqwTvO`YC}&KdRoL6kEEi9 zEZ|e-plSpjFs}%N2aHDp=~Y{-_%J#DWqa)>m2w=oza(}xp{Li@^M~92A@w5rXmUTo zegyQKFKf7W`|9zI4`+R+i1OUelwXa>jxK!0ryX5Wv(|X$)Kq-O9S@%vNYZ4Lo>}yi z@7rlcRKD~rlXnbR6n$Yfb36Li9YElAgN)^jsJK4^`v0Vf2LNcA6X~ z!#-;CIC(j~->i-AHW?0hSN{Eb|4zi`uOQygagFRnU+Y^IPaLfGH@Q6gj)44I9$p$4 zIRTBNTqzb-%=;l&)#nmlAe`OJ5>+GIJ&4Ph*!^&2{8HEhm=C z-Rn2;d9n=pGI)F8eL{FI_Vtf9rhK~_h&We(T!_5<@Gf&@1bHVeP^McFibMz+iBJX- ziI3X~>Ba;B_=Lyw3KB*|#n>iowdi#2M=#oCZWN!dPpQ1W@e7D#W1AB6Y(!6P`Y!Xc zTt`mVeu&ixqc1h4lEpsv^Cj_POR;wvId#Z+NaVaZ6?+3h&cDe^wJE<;V01rvmWyAW zxGjaeOg$Z74ntLF6MEX-w99*)rybUu1+La#Zc8P1AEaPfvFHP{(9kI(iJPhAizJBtIeZn{T<_!iv zy~rCuUVg?d^PS?4b-waE?az0$g2wPszv@T=_ua6StP4`>SxpQWd$IR2@!NAvuKJ75 z**;Sp6=$2^-wOZR4EP^`KXGp1^&c;M@(r}WHEr>0?izU}&GPHrzIr@<_1#SfjqfHB z{95W~74V??@qOM?Qg}%0-Hg3iN9{5nlQ;;cVz2K#XY?DsTP7(;K*tt1E;M}aQDd?6 zIW495_~>1FetGw;b{x=tlFu*8;2ngw5Z>=dS=Ykr7Xxwkfq7oo&)ba6s*sm?2J^dP zthRhoqAl0ib6sXL&QVTWUueUb*_>rx11C?btR&f4#(4F}Z#;IFdCC&(jo#vCFMG%1 z_Thy8knV3Vvl!K94n z_bajw{{Dcn%*5}5e@DPR_!)Ab^il1|oGRR9u9h~v+gGNit%dzxX9m@!er_Y?Bxlc} zXY?bxOpfZ(wmUwPk&?cp_LI2kD^}|(1!uuqvP+#29l6QZzJ&eQcLfBT?8l}H3$-A# zVf8Na-^G?wJu>MmWKbD<+=27+R#y48F%jC8!V>5K&zu1_>y~d?uwAP|madw2Jci+DZiZh9c zjqr}6>)WF1xtsmkj3*|1mv*Rm->C|`)G6_|kN zbn{`8qHHKDWyjVkc6zDJ&}>SR4QxX4Uwoo`Zc&@Mj7Pa-7n<4|SFHAY!3Zroy9~aw z-Hu&hvSX2*is8?&1B{(uYzbp`nK8_Vjbm&ByN)Y%w6WidZDDMcWV<38#ja5o?EPXd zp&Y3sYUGj~W9;umtQ_GW8{eQs4|-)EA`-(VqvsB;W!oc+a)bff>nH>?NI^ex&@1>U zbykAf*T*(M?q~yBqiiwQre-|DN6fp|`j0sV+715K@^2%b4y6nWqzuLoA1U4Ge5z!l z-|&$Y8KXy*WNbN-Llcf<@8prV;0lfT1eldz*i@%5NX0BR6tHX1_zoZJ#0|#feA?6w zIDxRM&PIq0m~DTJr;~FcD68x LB%XYlz?4H5gOYO#~5R0R=D?7vgTLEtQdEq%sk z)Sf~%ic%kpu;7 zIEcUe>aTDjg=;MWhd_V3BI6n|7$IOEI2S~r=H)MvfjhtG1_&8pgZbKOAV`Lh(m=pp zv}lc*(IJBdVpLyE0oVZxH8?E5T(sgh1Zf^}3h5=3{xSNVJ9n8slpMUFF@+psyyBN2 zC7DRST8TVvT$w80-Gn@+f6<*wvV7M8Zx+1znch@v2~PxcF~zla1(X7NBon1XORW ze?u2BcbT6Nx+ffY3HREX;@4`_?Zvp8RP>EG$QVLi2lCj`#Iv?q?*<;V-o z?&Xs*&BE7r)Hd}ltjJR?KKI#x|7_T*)bnup74(sZkDDAd%HA3m&*>5@#;Xvo;_0~( zn@Rjo4Nu`)wwZSb&s{Da>pVf@cQ&=2kGDg=1syNQ_-~zy-Zh55(NYw?PRvi+jF?ZvMtRcD@um1=$;W9E@V!TDeY1=2%vhIi{L$9Ly&!ms z;hD`CH~&X?Ub-RXf43i7V&|NRPa5EZgqIYzA<=vJ}_?f3Ge*@yl;!yCp=l_Gu}Fx*p+e6wJsi49fS){ ziqlgH&)}!V&B0^fF{5u2w?H4dYur3q*6hPB*)DtJ`As?bQp%iu0d?6vZthm|4wwCIAAcv- z9;9B1;F@_BFyg`p~#Zc4w^avM*MiBW!I#-vfQl zw`k{5kBfcj&$P=g<=Fy#^S8&%AIMsD)Zeynr(=?eC~a< zDTb$WeB4|ix$#)tSE>Bt@4c5ZnnT5$D`~0Jcz|(P9Bk1>47Kn`Em0i z;W1t1S3K9kqC!RG`pwXmKzod8lP+3!JN~_;<)e;i$_JSjvj6ul@V*y4(l^nEB$TH) zzC0!HEYF_Mdoz!7`9PQF9&dTXZ;kMb!80r6d9#=2Fi|bB>26 z?Ba3zdPPK!+0?Y;-x&e^UIyp;`FxJg<$M?qsRw4{`kQ-jvJuaY*zY@#AQeSy%$v?#t=5b5m zIW~aj7qR?S2u~F}*=r}vB8kIuTs#-L`jcwAs_(O_TG`kMZ^0)g%wpNc>K;G1>-vav zi&>Xz1fG%l3A5nvB<1RPlfxr@r5q~Mdh3Mw4zY30l_#7$WPH-L@LtP8DO(|Y?LVK; z`{e)N;`1%rbrz?#vjN_Q-%glckg`4O;&qqpO))#g|2?ue7o9Ml6`uP7c+QIF*$PkH z%M<1|VU1kt;?eE0$ui2xGomN+6X<$%!YpS!Aaa(A$CW$6$9md7JT>zZ<~rdy!Nue5 zJBICSu6@u5&rIf|dUsM}v5Uv0$LO{^k6n@jd*LZNdeYn~<=N%xm)EHA*P}MIlw%9D zp<^a>Ii7RTy5zgdA$7Xslk{hAoz!*un2TqDIu+hhc>9i&51Ic&m<|)Z@Jq19-)&(i^#W#lM9Y z(;vTcQpeUYF5ZCH5`A^>biwl=*O8YRVttF-)|LMHdf@FoVN&1UekOpo*>S6im#y$L z(TbJit{ zfj>2AzFo#jH_6zv1isvsN%bDO$X8r^vAOO>+d9$H0R8w~lj{8-k^B7Uue8({H`{zU z@b$vCsnu#f>s@@-TvB3W6q=sTO`0@qV#Gybo$*p@Nw&{yk-QqYEEM`v#y0aNxjxy& zvuZ=wkP_<>Td1~N^+->oM7v_gBo_5K0@fd%Lm7xrtyc*)^KH8D! z`ECHuh&mC1VV0~cu2)Oqm&&qrrhPOxqdSqsrxAJGUz^nH7Pq?O>AviITf4;9Mrb1s zOq##tIPBe6QP-frl8BBIWdtY8=CCPxxf7NN%hX> z$nh>3>L3?<5%|x1W77PNJOpm*}TrapH={@UyY{7kl=IJ^wjra=U|hD?FaH$t&%9eyola zLz8<2Wq|%t(ebE5uh;8%BKt7=A?oleY4J;T9DHyXenLhqGU~rKsotv_x!WT{Zn@dV z*m@TIWIeSU{vP;e;D0fK4HxTj>V45_8#8yr67OwY8S!7C?aCjoPa!e#>7+euQ4yP~=!Iy>rh?(TmMh7X6U~Q{>fpRW}JX&%~dE1GF(hS%;q2a*|HI=niTWU<(e z1D~_+%i!;WKmA$iK-$vj@F(8yr;M@r6-VZ7_4jD8TK5lK$=G#j(!5RNE%ue?+0z&P zK)_mic`^2ti@X;m&A)LSdHPzrekfnUo}}-^?f+$e zE9gc~W!Tbl(?3p6`qhl3(DRU#=cH8h9Jt>kf7PQWJrdRD6-0g8m#2P`pI0!5ye-I6 z=M_ATJl!Ao<(t6s3L@7qUOFtQ&ntM?*CtPF9^82aO;Ubzl^!0|W6wEXUEcElUC$ku zLH{iJPm+3;+={Vm%cIQTI%bFs6KaKgRi|_-yGDr1Fh&8Jkql3)`jgFfPNHu zb?(3gzIJ*1cyQ+qq?!Ys? z@;v4I|NprIRo5{F&bDIuWN)3sx3v=Lqz(Ey=+*j|Rfjs(V*995Id@<)a)ywj&K>Zt zTTh!kxN`@Ju4g{*_NYF0;1SUT!%9p z?XoFB=HLCifaN!E|LEOOeO|!nsno~c_q>39^lyG|)T|bNo~r#B>%$Vy3mAt!k{8v_ z(2M^Q$DZCeJ*e{n%5J3nqGy}fwcV)`RuN+DHS!^S*2eqWU;UwJ!-soPAYm1ZoJryo&of*WWzmQ$ESL}%#_idFQ;-Yf%JPb z$lHQEb-uvkbt(8K`S}9HjjZLJ5Y=l{A}=5}9LV_s9mw2_Of^QkPs@zee|*0o`DFhlGT@Rt41 z&li|Meh>0h+&-~BxW0TIx)EO&+`@Ty%cA;xfd}3E33(TQnua)wK`he6L1e{4=G868 zY(S>OXJnlt)7hJs?0kVicw6D!BfKZWyKsB=edcgwlFi}L-t%r{E^uO0pD!?XRVsRX zH=!rfQ;eQ=^h}{=la%Li^f>J)!M}-pB|PH8&B&-Ji0bv`2U4;%>G=Y=Ox%|LYgC^v zus#)ef8X;3Hljakc~qY-utEDImJgDjFE9pg9=z&&feUCO==G1>TMDsy2CquZ^Dm`M~>vvU-8xB8Q+Hw`h0;IbQONs z8Xv7m#dimHzCdL&>z(LP=L^jFmdO*-#zCDgFo>Sgk3{wP0#Br*=b+9P$on+of#Rs% ze{ny0oV*-A2RfAV1=`Rtj}CRdz&hWuc;X=7G0cC!`2u;LVeGg%s?QgA*j;|zFQsz6 zfQ%pNk+Wq@)XbA{)dOxh@qRQ0;_oCft}2U%==&uyei%Y#f2lPex>d`J^$+f~pTv7v zp$*sr?`g=1oaN=M2)qv_{cI7uTj6~|c#ng3!TjKVwh;|Mop;cNys9&z`n-eP>s&GB zlKOcXISba$f#>fUWS4xF`3HK`c?Wl-qUYewJLpBvrgNhDyo0k6pLcMAuRKp56ZAa&>vP^g-Cg8&?7d9<_TUw+_8p)5e5PJ%Exi~1{Eu_* z$bkPQ_!HyV>%W6K?;xv{cs}3q>p8x9JbwMZJ?~%$duuL;>hlhsy4=q%9(#T7S-)=Q z9W;E7`EI2(-#rI=^;lxT`L6UieekxztIj((-nXotF+%e54nm)2zIh=zU1IXJngm;} zbKTxK(DM!?H&!Em_@bz}K8*bDI`R|NuZ)@a-krzQ*T+M6{4d;_77x>70MRpyp0P`! z`kBe6(UaIVJTY+K&rIf{r{HeplYje@d9nEGdR-p+CSG2Wwt*Ks-)s*Uc>PFPu9P48 zO6Y$e^yg^1q>&oNr>)H#)oKl-6}p1Uqvro(?|GU`1ULe~dfqw~D;6QLWDqT_sKywRmw9FsB@ zG~(ZDx|~@;cYeOIiS+pU;gl}4q25PT4*hoM-y-x~CVgd!o&`dkpI8e0z&&01tnIVV z5877Q&)V(+Z^6PY=SGpg+mv6GlAl?3N*A%4*cZuP!n;#=AB?2St+vILY?lj^fL()} zhT1NNZCBWVsbl7TD_y7Spznl!p3q-s(tCG{s=a1{zX$r#4|O?j7y6MVJ-3snI+h(- z8vmT&r|3_!vkxDXZeu^a#O-6g1pbG+oYR8;jHcInjr?Pmndha~%1zAJv6mvHYwJCM z^eEKNbE5GWi3!vU$PGqqfD^YWyD@zjpVjCWKe{u1(@UD-P+Ho6JS6<>AZ*bz}|H1{}G z+IVOa>zT;8=B4PqJ4E*;|9vi1A$QX>;qL{r8q6)t#PZ_*r&@KNHmuoyC&?E>uE3MM z$AY;X%p)7SoF@hI`Vh=^KjwiD%yt(u|KHGcbC>f0iLEAvU^e(Me;=|Du))Qg2WIVe zyPP)*ru506Z3XW7*)#}d3z$`pFkVa9&xW*-QJ-PSqEvk*zf7He-_7YC0@KTF1o{zQ z44%`MHmU-1_@iCUaVfj>?FePRH>8bH^|=+ytv~2;-YU6+`>mMf-8=E$+dFGB5Nbbd zYz_NUe%R$m9xgdYmp$zVGsmuqln=$11@G3I4o(|58wKY|t8Pa8k$WGV0Co#<^0#$4 zFNmCH??|;3I!V~4?=5=NH}|SkKBQapgYSpJ_XvE!_AvB|TQAGWHqNzxUAdO^q3vDH zyDvq~?N&KPd>Vhj)2SWVqA!wREDJxD{rwusY_QIq&~ia{r{-TIU_o+vFdEp zjWsO}O=7RL`!cgg9I*aEb)o>qxC$LA+q#^4hM~hOtNoaByMz^ymx08;U@NZtur=g| zL|zycuWt?Ei60F4Au%PSeX6Y^r+OV(Ok$YEuQI0p++FwGfWP#`B>r_@$@{fJzZZI` z!sK$3KKnj_bMUsqTQ9z3hSfKlcAE2k+zRxnevtU$7hTRYkuxfioK3cR<$5~Rk6Q%q z88=={Sn&*7y|{h1h3l}#cGsUhVYNp?PVW9p+Pncd>yT3=ZMekrznQsP9k;eXzX$s9 zLO;`_586m4^ar3X6Z)|xeYlMX{pha|pTev5)}Hr#tr`G{Xfxk)V%=LyS|U~r#*SZh zIeju-_XaWidGiYY)oyA(L0SBO_1iB5z9rQgUmN&VyBL;1V}0l{`q!zww^97ui}%hi z=?k@Ar@tb9NRqnPY?W{HxkRtk`{20+uNAz;=ZGyO#@KJgGi)?*bqHSBWblSQgnkFR zoacE?9`xEu=HO~zWpb|~Bbi0Ty-ObX8G4D+E8wr~=yLW+Uw=A^KJnk$`g*o8R{G3# zsuCL4`u4z z7@f$e>v8wa9W zrsiFx?z}6?-qyw7>;R`s^c|^j((}#mctrZlR(MOyhrsdEth5jy~U#{tGxxpxVRHdA2!CMR7kvMo0t>rZOY+{9V ze97X>q?{L!Gy0G2zJVELIsN;nrJN;9?kk{IXGZLLnf1TL=Cj0hB}Y;(cxTz zo0(Ikds*MjCAs2uFt>ntl;`Bx+l;o$+&_A6DxX0#6ZU>8PJ*jELB0xdq|Qn=(SOgm zAI!%Xv_@CW1z40DD!nAY9wuf~Eyv6XUJ*)|M2hYu1 z)E?G8EuC>ZH@ya@JmaXErb$k~OQMIz@Rg zncBQ)--pHA)+v(oL8-^u?@`92YcKcB{hQbe>7Lj== z1ZR1aGG5$1-lDCXl|{~Bk#lV%IUleUADgt=4Bso;ScRO1q211AvHcV8x7mgf^TqG6 z%Lz#wFoP2t>_^U?mv!s?7(1Y8i68G0;EnW5S4lst0A~Q4U6*$|2c%7>MXG~4ZFNmWskSTs zKKnI?yZ!pgD0sP#1JZU|k+U8-$`+r!)n+4R+udr@J6qdH{S-Wk&wqKh-V?GWlAOD2 za-@Ew-4=ki2|N{(&j-&NztZO-Kk6G^OJ`;LiAm_S%B|p3yrSFroV42vjgyXHGWWT> zD@5rFmXH|q+%hdkKz{ehyI^rK6auiO1)d}#uxh&`AflDTHuc7 zXTkI8L&qGM<9QkMo1otgeIL)sE{|Si9OyimdH4?oaue`K8+3zFeFgqSFrLvE>ALgY zn}&bQ+*{+XJF&r1HgfF&NBP|ik?JDnSU}{gLr&={yPYRR-#L-wPT`nh4pJG`(!4y7r<-fIeB;1vcEU1>_I;|I()RD~^U@}TY|3hfo~#7>44@CTi8233EVIT?StcNpk<);jJ)>Ov z+otuhff1fqLiv?BfD`lyh8?|F=K}2S zA(VKc61{ez*V@;0J4~P1E33vkFi>ug9pw)^$FB1FG-7jr9^wQuisDh2atD`ub`FAu?# zdKBLnBY3H~u3Mi8c*u%r^y&D_T2~G_#=%=`{>I2zCc?ViV(A|T!0Wt$`GeqXu;M9m z&PakLZVRy$v1zHJ5)O{cD|hQ?378SJ)$zbB_MR>0c|ukv#{;SG+Df&Mv|pKAtl z$MkOJqpzflYpj^~_)B~~e*Y_MJro~*i7w*+m`84N%eXqXb}Vfp9|-SfUV=Wiht+v9 zQ=hnFSEoHmeajqR1(*|Ry7m3>%QG=m|KU#HFC|wexXCy3Ot||(IkAIX@DITM)|a8v zj7)yDT^%RQ-O!!>I=U&u4m#aBDtr=u@G-ZJM5i2VeKx#n;oTs1Y1gNGSc~8HUmv1R z3mD?3w}9EXtXtoiZ?|Po4BbDa`qc2J$OnA9+c_b+KO16iMxXjZi0-LAwE)Zs z%iX%%9KBD8Z8XC>9p3poCzpA=+P5+xNZo&BS(a6PwG;k2_}K=;xMMAkIlft6t__j0 z)zY2JS5x|o%3Ytu@SlU9f4CF8(&i&feXMhlls;_$)z!Q8vlBdTT=nN~Z1p4c8{36# zrT8DpoxcqJ11bI`x$#RLy8-_EPj)-QRo}JNhhf)=$yReCzi*v1$%-P|H0(N2YOOL>)~pLfaEo3o$f%{bmBi>l;I&$gvKw zSxQ46raXI)(}^6Fdlp;r^)Y`vmr41d?}uLXu?I74Inc*~ehdC`K9he=K4ycvuDis; zV1l2{Uk|pfD{Zj?oPy?V=V57!xz>JQw0Zooi)o8KpO#l~)Z&-S&*35n%x zX9dI__rhNb|L=HCp07yp`|L5w9`%BD_&4E~1?RBFNsm|F_HVN0-X0}n=-fgjy!r5| zF=Cs^%WgvD&t#{bpSJ>8jqpx}m$VLN9X$O5bG@bhBpTbHm-xS7UMP0h0p3>d)PC1F z;0@|a<2mnl6*=XFvQIX_a)c)PA$Qk+_H>Nu@BT9L4j_IU41;3&^$YBct zccMg+b5VPw>XEY-IZNM!oEcU*(}p$qa!H8|ueW(V@~BCj!*2)k+_7(k_#ODEdKJjZs(6u4`V$n)t{R3^g3?*3E$dL6Re82 z3f`jMc02z^cpa}VD_*V&(g*dI`*<6Kx026Vc-O-FfXtzvt_q&gHv$v$G{=ewO-1Y>hHj2EmJVq1&BC_Lo$ z@zvI{nPXkf>kT630CE;1XCu$asZr$QJ_eP6UG{78v&h*ma?Tn)D>L^Wf7q-OWh)Z9 ztN>$nXSdTN7&|ov{#Nq+-2D{4Gvzd8KeE{6cIdZ5UncY$JbG+P=x)^DnB;;7fG;m%5iLF)c4$Ee&}bllBIphP-v~ z=hJ`ry!o1SFqN6#7wuz(_*k)-3zVm^-;KAnh1ZWQ-jcpF`8nbX_{Z~{yifC|<0OCI zD~F~Q`c~*wd^XpU=WE9(@!588W}kHX|5Q_MczjlY4*l>}!K>o45uOf#7%R#gUiy34 zZ<()x_cf`5XWp6acV*&FmZrKHK7C=vvmPVs;q8ETjqpB}!CNZ4i_`R_H5t$BM}>X| zyk)1loqWmbZG;zFlv!6iaVYLyW>+e7ozUgK5_SwbomFtd)ZNahu%XO zbl%-~rD|+0g|7P*N1fOGGk9w>o%RzdjiT3@+Wj%hC&TXdO6s}m3NUv~JgV&|p~uxQ zI}*Fw4*k9q{UOs&`t449+Y#uGK(F>SJns4AK%4))ecJ+bYv{mtPdcjK?Rz)61$~Mc z4^-KDb+!b7^!IM$l)de!`wpVaIxy$^GyN$wVn%L43S`;D_9s72e+ILR=j7Sw{ZRC& zgSQRd&xl>_hBsL5z*_P6uow>v>Dzn3yzus;`o5CYR!p-ltsauPRJJ}EN4595qt0y6 zafuZ#aNkzQT5mHDv1lg zm1mP-JqZ9q;>*?nPZol#_ftrM@>!c&*;a_O9qc>A`0&o7&L<@nx-LqeN?c_vCx#$) zRoqF8T5(j*%dgMuJO0=x%DlWByrtj`fOnMVSF@*1JJAU5F4yEZ1%I0ww9EBRs!A%@OI5Ss?RrW z*79}CY(EdN9r|SDQGFgl=I35qXZkYkn-6#{y`SJ57%gC^+=#?3LH}cx;i7UQ)&GsJ zd(Tmw8g+F3Yl@%Ej(M&hT4~>hm2EoBC`aV_K8td`B5=G5j$4g44=#azEpH zc->mpUc^3TgE0Vx&VglO`1?zg7^@S!P2d&GVw{n6kNo4$*=R6JEe) z!TZ6NQii!v>MCptOX6DVpvb9<#FnsM?01skA3_(fC06T3=dyow%e&09hw$6B!9=szX`M=d6V@24u2(`|(2RTIxkLrBa!6#-6&HGaGv_O7e`eZG<_3)~3_I8uk-zOzTUJrdE^fN~y>pE+h$XxpO zqSuVD)!r1y^tjg#=Bm%Q^|Ufdd*ohE)6u<(;HDip(^U+n?aiAf2J_J056eS~&20kf z$cm$mlTSTd6-DR7dy}?mAmEUC9RP3b7mvycepr0S9o7E*i94;%b_!&AEp&PhYuBrf zI^rLaBkeI==Al;7WaUQ6O4)G}IOo85N^nj`DQjrA5A82v$LEk!-E`EMBXSV_fTW*a1gtj}+2a)BSB0i$bw^cjm7+>@*KaNj9&Rskw?+@2I zYP`D^yn>BxynDS>Z^PCS;d$o&2jg97o4OOkf{(cKqGzmSG}|WUc~J>+I+2sV)%8_t zblar;oZnYTd^)_J^*QKOe7Y#SEp73s$g6~ZQcB)++2xf(-vIq|=v6!`@sSr>rT5T8 ziD&nK(+N%)m}>q2PP&}o@txRj@+9LcyeeNJIqX5_sNwk%DbsB53LbUy8_()EN6+We zWr~vDSPxDsIG+<8A2;Kr==qH!;3QjI8@S)Z@!NpZN5LsR(5w80#A$=pM?7nOV*z+a ze&FUe?#`?adwydr^u<4P^BZ$KdT$Lsy?$@cZ%7*)0HYm@%~E&Qn`Mrk4=6f~J#TaK z0hedhB{Uzf0F3QmsJU(L%@OJ|d~PegW4qw}hdWmtf=+|CPtNwb25%L-u^mU9pC+mQ$26}umZ??Q)S0-iCHzaO^5!HRtFH&6vGu6)8Z~#ameUvq z;=i+pz1h#aB+n2JKlr?}@=|nt!rDH8T>P6awMo+F`K0cuz%2doQKypUsCu~2kc7?t&KG*%3|8*VJ?|7YM#);A1@mdB%8#vR!QTh5Sz4+1Q zGpz43mGLxro;n0$TJ+rW7p(4)_65?cQ;=2#$0kvsk4%{*j?IW=mqxoz^`KQm0qlqb8dMyI4gSHxIxw{BE}6e zZZ^TY<=9c@Jv;~FHt(*IKwd`LaWA}k;VqYOPGYrSKQR44&gXd~7c${5#9zmcI>RqV z&VH*uFnsI(W-cWD8(UAzwuD_4!VvP}C6=%gCD#6sWvMzb!pec?&^fks|3iN6g4v?|Lm%g$G`o++firpMGZO(tjN_@~cmwvC%KjGQB&2I$He-KJ2!t^mfmA|QQ=s)P7 z=8>|dGN}E9`*rD$>%klCxbfX;vrN(EFw!rMfU^P|l~av2pS!4i;}x;ISRZnplsX+5 zrTlU0k*X|iRMqo#aAlOSA)XhT^s*j3e#;t9c+4N{ zhww{3*#*XSFj&^mcBe6X)2)0~R?;k+bRY9(|tZ zP$W6uvDsU;ej+}u139h3d-NGl-yA%!Peg5AEK%V)!S)uVRcD9>1@xqU8H_fYT0689F7$Yn&+gKB@l!c=y4(QFs$k>Oc22zzVSE zU6L0Y{fZu)7k`X7m}lGmxoDI*oy104!JC}ITcYvOWez`ECA{76E{0dF+fFrk!`E%4 zzKSo+i>-iH)z=8?T+-+lx!0G-X++N6l$_nuB8;E8%aOVmKu*C3*LId8$LEK`bH$=# z=@9H6UR4(}{x&+6A!i+Os*%&mbJDpf!*&9FH#G0q0Y(QHKM{8dFGA$E% z%XmHXW%w89mA_1AdRuH0#b1_#HxImdZ*b$%{dQX$EG`wCP2eQQ_ULuMCp1oa+>gEv z*auDpIBMU@N)snoAESq%KlExHaK6>%O}~+K9k3R>k~j9~ea;Ir>%+bdxE}gi==-RH zQ`JIp^=imruVuFV=}1maI4%7fDXeV}{s53v%kN?a^yK zPnR1u9W5sye(;>=3(j{%--k4g=|5`?KPY{wba-B@s9Yj=dpA?PEDHH6!No$4gP-^-lDj z2VNt1dj1YxP;Vn%`p25TOP!UyA}`kcHa8a&scph@F*0Xu61>Sh`h5g*O#AZQ$;a)@ znQN%2$RhBnoS4|`5ipD2;rhK1CZ^x-iMbHBOW|7oSUK@raCk09d|^Mlb?~Yf@H&&%?+Yc~C@N&U|45IslIP?|O>e{rvokD+ zZQV;V{=|sk6Py}wno~HvQ!?z>+Y>h^P8B#U;BO1Sj(^tmcRI4El{ljw%)MY1OZz3j4BDI7emT!gME4`eS-Y~w*}`*jccu**x~o5n)bK8= z0M?5@z!2Rhjb?lRlPw3_5f#bya-Q#qziLL#s#WfsajvI3V{UNHD0;O+zX$pw(uZeQ z^)h4boZlTSeQ(mMiANrA=L)xbdIjtu%3OizO>7l-i@|G`Gd`mt=^ei3eXP~UCGUEN ztzTrxyT%{2F_8SRo>|Y5U$QRrLT`OxDBnvRuV>?D$(kOgMcQ&)NZ0nfPr#B&I!MYx2f!M)ARyk&$uCUqxb{n?9AniBwwT%B?ch^frj*hjx z*dk-!dFFr@x?U=}SA)3+OtoG#->SP&N4dv@GEdusoZ%0-^R$tfy8C^+ZJs7&&wpKB ztQ7veJSPudpRMe{b$CRmO3K&|BmHL{m|MYAvF4*1GpxVWLEi{{EA$tV=9)%52g>2y1+OaW zRezhZial*bPRX}=oNCeWAUD1Fe3h3QBAuY`_v(Ot9`vg3?bh^Ge{6X2KXJ8HK60c__JKF=yRJQqih`HBFK$52>}%NHgPb`M%ROVQH{;!z zA@?IxCrUyhx$4B9LP}b#^EU_3q2ULv@7-*+wLjJoThAYp7i)sPjOXP2CjB7&AKta_ z)=L~P%UZ9-_-vo-Wr;(TPu+@~tv~G1?@qbOD#sX0bANZI*j>Tv*&nj4$GKL@b10h>}4e13~PkZ%4@I^I%f)}_u0x#ch7k&lX`DNejoCO$oPM| zRlZ?IiQbT2pym%9;B9@p$LW@OUv0%R%X5dVJP;}SE8zvI6|FtaKCz3tBjNqlhL^?d z#Y&|8k+bW^Jx-PAJry}Vd*SWaY8;R|wDmZ#3;F@*r;A=!M$+qtHoc^r(hdc@m}lT8 z_zuByCP(o5_Wqozw*}xGd4hF)!8>ThGuk!YX45a5e~?&cFLExl^*H}2^|k>yI)3-X zLRA^rNj2{xf0Gfms&+1TV_t0Olf=TJ?|mWq`to4$=j{4chfFuBReru6IUP^+IG+}M zXJzWEa~tgFQzej=&d{<*#Nh0YIK}$Q4P-Q} zYXW2r?MIzR9ZDTkGl(2`+Kr8`iPBEF-)ACn_8_NhuPf(}wGIq>h+9)H*?g18DJ^9^ zA316-*_udla^6cOa@HXy_VXU+Fweq^9)(07jtbLI0RbP+2iTomRHcMY0VwGe1 zrhDviLXvCbvSfZ;gPitX^f+uI!w0@S<(rrf_~++w<1*&3+>rR`Rxlf%apR#Uz#O!H zalf}UFJ2aF0dFXYtD)^Z&b#Ft^cpLkSr;$Z@hazqd>?Xzhy-1HK?ut&w(l7V^tw_T zI`8>)kAv$c2bEc`dY`O+J?Ja8^`KY@WzT1@Yxzx&K0mZgqN@DhRsGh@e;x+UGNwn_L)Q&X?4Y}c z?rDvaZr|v8=t|#`7n=@_%4w}Jas2Zt>7&)qS3&qPTA@MzpU)E1-voO zyXzs#GV3F_9#V$Rb^ZrRuM?kMv@Wgk)W`cMd5+`3Z(g%{cwP|Qlt z_iFz{&1CY6J??(v{clP2WzXh6nwsmfg_AvSdfveR99aBAE0}#?&gVJ#kcS!Y zzn1jAe*XvjqkCQcCAsm7O-;seSHQnhYTpIwk~dh`_R{m(tlZ9+f7qz^xzCVj68-fDQ&ok54k+xm(zJ|upZ z?arVr;KhdY>a$VeKZAYG#0!0=gUt2MfmiyHUT3}R*F6{o?-Lt@e3%N6> zj1AA0Bm@Ikyx;Z%#X?`{n_F+dpAGAEej{Vs*eGLL{D=(^-9lp(vGIbbtY=-`>&SST z9D*E1qjaCREtT`6ugy(82M!*T!8;F}K5$wE=h@6Y9*FO)cN0nfYzCudc(0ysZqpcP zU4pTBJM?wXtGkR=M`_o@7p(Ci?GaW<(g!D%W8Wis_1elBuWUa5W1gcFzQynr7WC>p z^egRrcVy%YVH$JD=IU)%43s z`0`)V>-5VxSt(c0PZ=@7|LQr}k6LX%%Ra{V{{!b_w@<@AjdlCb(_SA6#C1{5sfu4s zvT&Fz>DBv?H-HyxGh=MY{an3_iM7btiyU>nZhpAlQRC58@cO`0=j*Pt>TTHCKVCfA zd^7pRxAf|BrH@+6XtvEo?X%8*C-Ee5R9-XSUxVY!BicG{3AdTBIJp!4G4OYaorn0pC~@+b8Te~(RQ&g?a=>D1~L{QSMt z!94K#-rlS4Wtw5HgDAQCP2jA(u2-LbA8(c;dhWgtoDOhQ8=fa7_r-O78<+YR{Vw!} zUghrhM~UIH--BHXUh6x0_4)ThT0TQIW3fGVzaIJv(DzCEJ>${i=L7L$Xzsofj4l7t ztIvx+W|lcx?!FB9W8O`?bG;kOuFR^7HP0;dSqnxZ80sGE`Ctq>&V-*8mT{|9@NVeU z=XCFjf_HJ}bc<(lU({5$58iIpVR#=D9joEZFYk30N}P9XX1y8fzJEoWSAv{9$muVC z-dWFca;B%FjDPZ8XD>jO{AC$5=b*2?@pdYuNIlcO>*0`@t}zkZ?PQ;F*vz}WMF=bhI}{TzO?%_gP|>-4{i<}T}|$SIJ; zRIYa)nETL+tDs}aE-R)H7sS7Bn>z0L~pi;slh@ml#IjhBA$k}oA! zCq5TX{JS-Gzc+Uon0oEV7nk4Sp9f9L_){$aiEeG+OnPUp^PJ@5 zW?FUQ9`1afZpoL}OWVNy8Nn>Lh5cu)61asA}xtbM}jC&g#11*70! zdz~kFPTp^=D`Ony)S*445;ld`^IzoDBS(C5h7a(@qp$p#fR4YZFiVmN=c3CD0k z4xVCAl4odsFZOh=8~;8MUeC7pSNJ>O-vPfmL$J)__u4qVEVaPGS2I%2q*36Nai!>e zoTp`;ack-s zAe9GdfOpICUZ+aNmMrCam%n%npow=FNgvt%9n1}hetf!-)BMR^z1Q@#9&haPh?_H1 z^v;Bcy2>6(tH|Gds#oumdfdbb?vtu^=~qel9<=sr!yXc))_$EOX)FF{4|2*H+?>e$ zS})t4`6xLNsjtFY@kihtYtk@NX?k#ht&OYe7cD03spv4#a%Oi=Z)in;8cT;a~OuGDps?qkvBTB7e- zaF&Ael(fZ((kS(k^FAqwS1ur@137y|&SvCzV|XBb51vtD`l1>;WAnV|UO5kY|EwFk zEQzGMHPp(o{J`DctbZb>4LRQs+ZpTWp4mUEGva0OjUP7t-jMOPnvjV8!#}`$ZDp^% zGiPKZ{d0bYfb_RIzLJRL>PJPd;kOZQeBSjl z8%@3Zen#r64Ein5-!1dE`y%P}b*o-k8eD933vyZ-d-c6w_nUfo)7#wEf57YmQ{AI; zy@?rqkB*dk((M@D7kl;D(#xZiJNL5<(jLvonT{Og_jisn?8M(5Wze@nUj=L_>J>(RFvIr&Y!`p)GCta6Nb(TjWMa?zdi z?|*a0qWM<&M*Mbh=T}xCXZV+U^|_K!k>pr6$PH$5{m7|7&L_mSpDBsZZua%bY;wwJ zx2pM^zg^R--*2=TIlehTX55##UhR*!1*aLDJ>aNyghd)h$7Sg_G|DCb1~b*X(;+D179bJAVJ;~RRNM=u9+ zp|xDRL;Dh6-feA2-mRT{s?60J!7O>S*ZHQ{=3M%K7mwkDGMG=U(Bz&fq7)N%8-^-ybdYRr5jS*FWfW>MujLu8{ib_vcVA&9}EfKjjn5RxsDM zGUucIlB=ygBk&HwiliO0fp(R#Z}{E#+oxQA_lyJ)d%+yKpE;}8`DyETN-o`>3%5N>un+q{@G_ zLmj`wXXhhAFdNAIik?fsEdK-jcMO;tLNJ^CeW&vO)(b8@VG zzHaUb6kTHX5bwfw?MV1W!e{dh{eIu@WWugXzv~-jgSoW0&zUJP@k7=e82-j*>-LRm zQ=mdc(Q^x!i?8W({zIM33&Zs5c{)VTln=WAX2%=*oUMZSYzSt1($}`H4)KfaNv&t) zzp@@Nq0f24>%eqEFq?<@FxyAj>r?L9m$GjHv*3Mw&P1{6v(~)^_*!3mCT54&U^^8m zW5_u$V;|^qKErczhPlU&J@#(SP7+@-4v$&L_zC@GuqDSEdk^ug5`I5r z1NQV6t33%$8#vP+>~nerXORu3DKBl9@3Y`E zrnj-g|I?RPE6ZHBmg7LmHtN7>y5QQzS*vbF-_6}NBrfPg&H?1`I(XLZk)va3l_yN; z`wPFmv2)NCeuVh`FMZAhi7i(~(a*jzEC;rh*t!YH0GKPltPsp+Gy8<@z+vnD!dtqO`c3g}jLusEZ!NrA;jI?AOEhnKeZ+ zmBTv$-WrMb4_U{GK#t=NR==)u98&gmU{)3#bM6rRp8(UR|G%d6C*SSAcSrIF``}#x zZ=>+~?m==LbY*ItKXd1+M7nw|Rq!$LzwkG`6#j);cFMIM2)PTV;31Uewg7Zyd z+_T?1G?;HafSk&y$DD`6Cgl#Xpd8{ke=gu{AvW1UEHh1_ zy9xa~mtNW743Az;$FL{yT`3#pw7;&KM(8hq{{yL;@m8J9y4h`Ov23|n(Q5!Xv!}b| z7~$zf2N1pd<&eHu{Bi8_=3{yf_6cp*>2hc8m+-I0h;OKdw;SGC>QMD#TRRvznY%+` zuvAWFJDAB^jyc>Ik8NA)DbTj|YpteW0y@8rPyB*&&3QYSQo|N4mGkk8O%}OXc{zlq2xg7t! zoIWYfkC=DghOYz4*ir`Xba-17j^<7I%2L%z204Tx*tPcB;?e`2FKX4fI3nX)kzZ$-LjO#!loUeL1Fh$mXr4cw(Q` zL*E2IEwbv675mIFXFhYqr2Wod=4?J$iA7d>y9u(ynXoQH7g1wOx5)dqW6o4;GkJ)5 z3EE=d-5w8zfHngqeS7jJ@mF6v=6o4DN?ucD!!+}JiG;NbI?*R~&;;i6Zys~L!EEv zP^QJu*Fpb7Dc^2uJD7S|_poNuOJbk{$Z1E;rBeRoS}*#gj+-S}mpY&MygzPE?fEXe zkNRsq<~*l-tX0o|z5Fp`)|RrDS};pC9&@&fkDYJDH2YU#VMtD)3BAMy+rV76<(Lzb zKD#;^=0~hOa|%6EV-_@!@B02R=YYh2&xBwaeRCkB?44kWUDtrwzT=oPMcQMU(N_Zb zu0L7wRC+Id3pfXUbj(>Q>qz4b94}Ah_ZzI)RabuR7Nj@HxzcGjjLh3ywg) z3;KJcKAy#%z4}m-W^Y~eKGPN8OQr0^_fwzncZhx1@A5bE>x)C&yvnaH1#iXE#Ggs< z9t`PUE&f>R^&x$>h4D;u+yiFyGsm1fX`jcfm}dKY%GN#*sr9tN6?w6u_G3<$;63Ek znaZ2FaZRE;FJt5(AQ6953EzQV9&`3e-t=j!9>iz<{#hL2_f+#&-0vo z)U)SIU5s~!)nzEAhD7Bn`@rewJm!3_2%MGH{ukH>FyuA%T53Z#DR0?lS?|g_?pzSt zI3I@T&*`>>7)Kj*E%E4DFlP@ruHTEj6HMRSKl{A|?eJEWJg?9Dtrey*?8^9UooDXnl1Kpa_?sOO2H#ev@go z3_WTL$Y05LKk~S9tF&WU??9d{;y(OZzbip3x{EC@M$Wod9oOrQbIkI3dub?d=Daev zuVx20Ew4H5%zOp2-pe`U=UXTHM#w&v78i2`m@Ddz zJFk@SAPlp~kGVNyJZN$;4}iJ&Q^%d-(jGF8u<2=FzAI$zox&{n0`W`Zai>Dc9&x_& za28*;f;MUZbIVtbJ9FO*rW4Xe#`({>VYW89f%BhgyWbvlXnbz}nnrLdLC>t;_?nWcP6=e<+yOhF~`M$HGTK=9~@qB^l>i!0i6@ zapyzg|HfJ|jd4CPHN;d@zl$}JFL>^_vsm(^C#-f7SUdfG$bN)QY){6o*B3jk6ewV=l=$qiJf_InjUKXW%_B*Y!#p2T5=aAEM_PDcI@((h` z+S&vB6qaV{fm0FRGj_ ze9)#^wgZgc3So%$qLN12jEn@#i|WLO&1s3h4JrOyRz3 zSLYziz4&wd+s+ADZwq`AoS5Ahpou>j{E8EAYUY=YfP#EFHW`YeuYKhS9Xq=3`c0QF z`uU~V;Oqlun3TKAYS*TZ%K5BH1@+sCoch8O`aX$gBFR~6wPBovwC~V=18!!P50#aiwIN$C=JS82E|W$>e$DYvpiY|-PJ|DF8%^Sk6rd0F3eaI;; zIpO@Vfc6Q?UpHOqo1^_PB<^k^uP*W8mRU=IJ?kYHZs@Zx9N!K|w~q1VtKv0|ESne!UD$eFZ`{(9>P z=NHILK46t&jD7Kaw%W+{PA{pWX5>tod%~IeR^%+S%3;mKzYp{7t8J24-(YSherf>B z3IFE$%&9jS^OMZHi+{`)-qNq354_?Bk|Q*)_S-tY7Pfav%2Eq&1-#Eodmp~hWOytC3?=Pl%ci@~e`vtekzzK8U(_b5!+2ojGkmCJSWWfO?dH9?pEvVMK9tW)XI zRYLb&m##9l4!RxCwL`~NC-Sb)sr()>Zjs*y|Gm#TiH*#Di1A@qzqXOho^H%{v)jmY zDL=e>;2kOR`(?WPI6l`_I&)s7utt$%sHb6(cURvK8TwX!yU z{=o^!RkgW3t8_i<)35G#)=PfBHw4qj@Bb`h-rNGF)Yl3ySB&j(} z-kt?@_lo$THhA+(`t=!rN3>me^<^Ksa=t4;`udn}kWWL-F41wmRgSR+6klWS5sTIO zN*#Fp;B^Y#L|x`o{FmA**P4;Xmi|!-Z3}$s-q`PaLh=?Pta=2-q3f+a}I}dAInOkzi`Olvj$$oqE4Y zC9fDzGcVID6CYXy@9+=wJFk5Yyr)CT*z{7L4=s3`z20OWrs%U3%)bBA@B9nT$%*ez z=_7sxeKOaD{JAFK?S{7>Ue(8jn7o-eIscef0&g)DlKg(Z&TH*wg~ZoC{j$VHXS?)` zN%Y(Xy>0w3a=Mp>Ow38#9jLcdu2&l;;Ai>((*67pHw4_T6sQoq$3$!EXd_MJoXjCS|;9clL_mtNhM^*Ho{xBErimvs&~ z4c+~E4!c?FrN>Qw{1jylTaMn-H(}r49pyQ>+{42+rPpN#%M%Gs6FBRR_UpTT=bQDF z84G0WA2#kCka|A=PA53(-juN>j^C~;pwIs{`a`eo`W*uOp!J^puHP!~+Isu-eOi}i z)`yM(d5g1(SY_p-4Ed{|kM;HIJv)x>hh7{b`6Ob#FDAc~SRIcC_w2wgW!MYGRxk+L z$-8D^_}er}KBp6m(cdAT1D?unZj98|-(dCCbkM{b!@6$#c3ZcS{&v9j!wthKU(Ebw zY%}L;&h+b?_juDzqUF5HsH^GVG=Zb?R|&7ZRpy<8IhpMjn!joUW9T3I-Sd*x`Zj#N zb%iBc>QaqG1IU?;9Mw0(hx^8Jf8UV4RJ?`rz$yAg+3CfH&4zv{^fH7cXGAGS?zvvc z!L}l&^=!Y+!H(5>*?d@74)y~49q_BWRnF>|C>4XJ_HIYX!IpoQ@}8rgpi}aY8C!+t zJ*BQ1;H`sK-4Fe!r$b;K``6rWDe-7GavIL}JHIBdPd!n9oP~Kp4M^Pa7W~ z<2Uh{&!>UU=lI++E++8he16I2YkY3!BjV=r`QW(NvT-p1`0Tit{BQ%G_l=8voPX-n zZ-OL$`G1fSpr(+?jl4H5#@y1oj4Q7I&fJXslSI;;G3h{<)ct)R%}v z3{?+&{2@L<^e~?(?k7-j_wfVt{731hE2S#N#b}8|TBCS%hDuW?=?!j4MWvg?0DyE0 zBW56N;1(vVj!4cbPGq9|ym2x3sCKae+Sb$L{rpXhQ*(U#fpIbZ*8i7g5^Ix^xA4Kj zV4?~6zqCCyL8){Li&^a%7yH<_*r#}+HavK#eGoJ!1qVC+TUCDAoo{C-lsIiCW{e>q z0J4SSVl(-QC;mgFko;Z4B~lU6*2vVFs~%y(AysM(VbJo2Xi0m0NHs^DvOJ35N|b&D z0H!FdhDmeanFkbs4SxQ^;NHzw*ah-IrXc)>(p1OYs!)`KqQ6&3`^dQ1I~9RoK!p8Z zya+@-MEt)-{a=g<4*ug?+KC#%3TZhYKbb-Wf&u`KHS)}V&{M_4@n7Obp^ddoDib z_ZCPyZAZ>_k%+*ZExJic2~%Gak-C8a<22hENMBZ=LMUo58pg1e4Vib-gWSn!duF7a+%5N z`6{(9Ue0drap{MNP0X^^y}6Gwevi%3%7)mGy|R*W6DO z(Me~y^w%(X?f&(S16FxcxRQ*uEy}O}%;b+xI^*RWv>h|BXZ)bGzuv^w@^V{E61L|h zj$8G(QN43U))xEFqjl#==P4B5_ga9_@#p`W`cO(5&WKI81#`oWxbjqa-&s+Vc z=@SxRHr^a&;~0$igzd;m9z5y%*Okb!_a|}#{`Hyvw)Q7-8Og-!UTH5_1E!AGKueM~K_{5uv#% zb1hhXQ%*U<3c>0!uu}cJ#UHcPg{&pF;KQUI+rZp%>nZ04O1}^K_0yPvywvY@HfLV0cDd)X%zG>{;Ha!DpzfXtkA4}O#E0`sV zPC1Xsd7NjXVctCm=J21e{!(|!xmM;X%WLd^sA?wak4LA;=kH4je9`WhS?IfBk|hMCx~CacgmR~{&(!c zR9va%xD9!Fo|kxYo^Mx%*vtZWr^CDWkyFkuc}@<2HyA$}d4SyKxz)&OK~6Vv%4FX6 zgtgqp`s?50%*fAej!9O1rdpfvMP9I-W|Mv~3%0bK_>_Vt*$=zplv5~ub)&T{nOpn) z)TLp5)SU~|fZ6oaDQBkG$EaFkE^ucm-#|R?-{Vvc{U&%f!K?20>^1aJu~t)t4-UWM zvk#n#U5q*6*A5vtDgSHC8>fW$HJLY-pj+8f#LG{g(rZa`%yM~oA~jEGfPOLb-Ox8m zoG>2xLHo&kTkF!762Azst+K==)?Z|MN2~=M2GC)k{gksn;^3W8bco++Ed>skEK0qEPHze;@B@-re0vnU_&``gNIR7N zU)Jjmy6qr%zB#?$-aDbMhJF?FY7PB5t9-*>|6`pIl6Bbf|KfhM!>9B*?9;kVynGD) zDV2{2TZdf%fAYvFy$<`J$FIiST-IUtg0mi+GIUDbXSPlFI;_}9{%+2n!>jgA%=B~! ztiwjxJ0Y<|6?knaT`r5Ri`dv&cz408*5?o6r?c3Y$l3+{zLc!TO#1M03vY~s?g4nE z4w5T1FKtKNXU}VkkC_Z_AG{KmBy+NJ^+338QTA*}`&|I954>V2>+RqTIu^$->fFzQpOLTaKBdq7Top;q2W@u3 zC>d%eQl7oYsW|G!;9b^vhG~yE=by!%2Ivpr7Q+FgPmsrRkmb@ZLmd+N@EN4;nIDsxX=2lS(l zozi>idOdpEo-FI0I%$KVpK~4qjLlMa&uWbHx?=SGVKv~C9zUh`hi%NNOX&Wvtzc{g z<6-Hq_kl5Ze|;>ZKC||t0uFTzoH(WTq1_%uPVW2Aq`%f9XLA23{chqBQRL))*Mp34 zN074*IbxH^{p3juyUDh8Tl5U`6?kXn!@D_Jj^(={b0*2#h(1ffJaW#BHO^~&(l%9{ zF(i3&LB=-C+X8RlpNO}mEQd_q@O#rlZXdjR&%5!_qb6^7oFHvAhQxY1yoW{Zeb#y~ z`|_>1+Mejxgq*4ir}R06>rEXqeU(=?>MW4Np?l%2h4(w6z+(?7^)ubN&q-FnZe zYSkL|&|l(T;NK|xXUY3%I|;;q@#W?!Vri@xo(lLY{&LD$BmBE{-cW-3cznKhc1?2S zOQG8Z-6@%WK5oq~26C3)x8^L_N|k3FD%B=EX}3;ft&5*_z9K$jXNauDna5B#*D{Hq zT`k!bsnAEx=iNALaXiFnEEeB9{a4sW;Su%v`%&rXWhR=NkUd_LNgbXPx@iuKF%+_>a?B@iQUi_((PHB z(VkvER2@ldZZ^CN;8p!-O_ch{ef$tRYemjheezUJ#bvxu8~J^?j&q!oU2qelOLPnf%_K3)7dxe`2cwaV6+PRmKW_L%zQL zv{T1(^6ZCFevtOnbHX^ojP|42cZ$7Cho=pmGT}L>dD8Y0KDNl*aRt1);8kae9)UL) z*BCjHzei5{#k&XTfAtU&?IHfTdq4j93#WDLz7sp~_2*#hUU-20ZqTbcE;eX-H5f2( zVu)T&C(2y29QifiRX%W9&t;Z)co)Wuw@Laq2gbRZAklP1N zYn{?Q+usLdTrcS${{+37e?AjMe(vXbWGq>WoL%ePvE)%xukf)%<^b*R?tynU&&m5V zug!0T<)Vi_&wLMlbtY(r$M5q~QO*Qafz$8}w+!Q>mqFTjExaq>{iOJs1iZoV&}`?> zHIQ2Hj)1p)!)fP3vVUcW6_1$4zn=MX>l~JYGKoakvH1q3Gb(zs&Kj(QV&?EtfJyBmk@v|<|dcyV!P z`62QP$obD((0!Rz4*PNa_j%tq)fR-YXOQyGL-%!HmJJ!uOU-naH2qnVQe>oOvc9 z^Eq>#7rd`v`hR1ug#*r0B5P-qvho5bOP(Q1kz(Q-TadE_IclA5xh|8Vuu+o zz*8~IM62FLKlsOrVPrmcgfbSt*0qD(UY(`qbIVfxSf%cj?<_pRd=8!;L~qaOxwdBs z*bT@jeBFSamn_q|g~cEe8?-<_26`DYlCwVruYz|mylVdREdDhlml$RKBxBhY@H)XO#&;(-Tm7{$ zmgT-yCv`gf1^U-j1J1)z=7r&UlS@tKBREOH_MyPp3b8%WeF2!s;sL$>cU>gitx3&6 z*Z+{S9yyE zW`>%#2Q2m_tf^SB=T>lPuXg*+N{tiNcf{uVps$Bs#kTY9a-+ny6S~rSuQ?wteLepu^XoUber2So zSGZr1zFrRRQg~Io-i3~XkMp7Ny0p_;@HUmWv0txOW}kgT$(3|~Q}M9qqoS8`uweb{p)`=H+r zeIL3c7kTuNb0yLSg}vBA>42X1&oRp!ecoRU&K_`DMVD)`>JmEd-vmban+Ei}KLN(z z_7!^1wd_Y25WEQk&M!o#D?Ocj_Vp>l;Rs(zAMqr7+l6n0o$td2pNuIB;9KyP0q1_< zb3S6sWxV(P5_@L$vy>~~YyVKL#*`gkHiNlQFdqkV&^pO|ZYN_`(J}G?$Wb|uMN#Bj zT+U+^a!MzUS5s6X5NAm9(c-$H1D!XRfeCYw7a}g~yp6Rt`9Oq<+`v zwodzw_|#PEFiv@s0a|KW>U*9uCk(31YQd~{kK1O_FaHK@CVh7wau(b(pwF&fW$Nzv zD`oHQ_OF1Esrc^%zt~WIKS9%~0q1Lyf4Lt1VA}-F zC_ZY<5y??Ry|y(E%*K`hXNi<)nW0n08bY8*#5e2USr7kS`0tf?&g~Pnx!&Jl;)wO9u%Dl}bEre%_7imu)d$`M z@YEb?o7Kku>N%8(e@>IXe!|UBWU>3GIf_l-9RW|}D8^g${)f&{$T+)dfc()OcaFHz zT1K;Na-JiKU+zcF0pzGycBQtd^tk4Y4Jrp9ezoWf<3IFjJz>74xA`F3TuTxfPLq&33*h^Om*XZ2FlyZ&_{X9(~@@0Ztz{s;%dkIR3VlemnFm z`a`egE#sjNj)A5PX5Ftk54^p5-FeG(ne}0xw=_aO^ylupWvoY^)4Zh}j2&R8{i-9( zGDn}c6rRhA75&1Uw;W!SG4GDPUO5kp^ga*DJ+GY!$p;y0Q4dD0mka zix>O}fBP%9?>w%{p7s&peMfAl65eijRW9IxC_09}bE*@(X7CDsJ)rlRt&W2CkG0oK zeC&!p)87xc{${?eZ<~*`#fc5@?}Gmb{8!7l#_OWgQRtb%--WHeB>vm_3#me#i<^F) z^PPuWU*qU9q;1CUYh-Rw2Yoa2u(Myvqz|_-=?B~4-2|^XYy3!*^5*`Y8yUMsUts@y z=YT#tv(VJhe|Dw?`U>dlp;zZBXGYTNfAw6Y)Me~1oDVuYpwCH;jihtV=Om>rYmgH= z;@Zavb03M{KITEc4*KEHtFiQHlm4$;|6L3IIq;joe~I|!2f!cHH^&d!G6u4V^&25S z& zfu5-*Ic&3j{qu97ALC@uUz43)`gfH}f1}_hO!~|i#!HisgV6Klweapjw`Spe*4sZ3 z*ryfewSfeN%2n#ytaM%MgTJ`jE!#HDpY}!mvQ>zTSX|NXlxNwmF}N*QV{d{ZwMIJ| zyiLe|r_9@Lx8fP|mH5Lp6XJqcg||uYjt)3Vzo}L{GcJ3-4G&vYd8h#?Z;z|rNGqPH zpLL%$I|D+t#OuAe^YY@He{%C(&t{$}4a8742VT<1`kD&-yq&hC>Mp4kFl)fKbK_mYp)+sZoPKY0q^Kz1I_{A-5u$C>OFQH!_OUxj^&AXY%Ow>j`u~^ zQSxpL@a}WvRD% zFo&KP(D#!*qR+FY{Z!`tcz&N%1@8`chr_F4pyir3v)<$y!1R^*_xNx3O5Fum8c?iE z>aXAu+7s+GJSVRUVyA&W?(d`wMgc?y7>P4#!0ZI`wbEZ4&Q1n>tm$*UXt%|1pCjW` zJ94)4yL%iSH_vF^ksjnm)W99|#mst(6B$t?F?e*tI7IoF@f) zZV)?NkMR#gsYt2E7BI)08*qk8Jzit2M{_K&zP2OV8h<%*3Wwm|kn?HTgZWJGyr$2- z?hI6m429|pZ#6iD=fROWIH+;bHl7*hXWF}e!Atbn0!}qJ_e!}f=SSsYIM3eYlA>Un zsC!uZ!C7}LZnD{-6tEDCvix{#`d=6aE(dSE70_6u-`{Dx&Uy8p%&KA-A`YgJuqNHQcY`WKi zIr(L0ob!Ttc_iJfab~uCK;i@UA!i?Q7Kt49%r-uaxFDE!6Q7d2EFLQucE&j(eSK$$ z4g1z|5-Y4$lqHy{Ku#@k)(=0U_b%>7PRPEYDC+{^|60Lo1+P6Hz1Kw2`wdpTWmoK2 ztC7p{)E#y!4;_c%kJ=d6Uu)f7i-eHw9s0iNSvGudq>kH%#$$DbXPg#k%fpfCq}^I4 zOg_Yxie46v9r&j+I)|Ll{UGhX{quIAuY|rkMSn=QaTvYyvj*tTLH}m)$B&2GM7+`O zBM3E&SY0A>y?1;cm`6sP(Yb?1O&$Ka+=0Yx6NbfOOGls4xvNDce&(1KjL8?nTLt1wFB%nY?3GKS9W&j9zm(cz39uu&p_XPW#}W0RLXmN$xBN*Xeyx zbP~HBGo1PaQ>~>e(U@U&T?c&?^li{zNTS2ctU5gH*MT{wyvok3tN3*PR}3_^Si3^X zkL>b)#xF|wHz0d(8?(NHN@5(brQ(;zW4pk6O7NCN!pnJYdpX#R$SJw{j9&Y@)~hqd zt@OHEl(oNoqAxgQqVGtJlWwc*{d4#$m=D0K%GzZ;Q*HLooXaZqREM0>YtA^;qGRB` z0B=v2w+_1n`fBLaJoy3i@@(3OrRMwnq5or!!P!cyxZgVVuG-}JY~=qkHDY8 z+bX;hJzm?oT(CdEBQk5is2+31z3U`Wz1D^Jy_nSB4)BJ*{){tSbUJ*Os*iLVd-DfX zfA!FGLthI0JqhS{LO*DqNPN%g4@sisn%7n3FNnvAO3pZ+6@Pp%lKiW!@^SpqCwG8X zJb0d!=urF?*Z0oS z_LpvJe+(kFz7P5d(8C@}UTe}1(*Iu>k4=KNUdCs~T3%z^v`@magu<#n)FG$xt!JER zBIlV%azf^zmC8r&5xj|KbdLBjE1v1MtZPr%;tH|j(vgh!$hlVZUSgGF*3U|NKdw~$ zxBL*znU{sBN zA^6ow|5psE@h|(oB1{qgF{Y6D;B{y8I@vU9xy|~$&sJ{CJ?HU4>U|6HnbIiJ_ z_#(ku6A90nq)F9V19+>-&p4kHyhT<#qg~@|HvO{s8;PyDk<)zR8RtKFPL9|0rgH-6 z*s99Eu2`P&rJxKlcc{L4+m)}rr-5PhqC_bEMR*S9)kT2Zaym37Ezn07|z4ZFC@ zU&lLMyi%KSWDkF#e$D4s(QzNV``}fv($nw;`-)+UxsQ!9&P*Q7`pWb(POa4GeOkw~ z@AA%<;<|$Kz&dy<;Z-`$|J&%e4!t^&vkp0bknwwD6gi3IR=*+R^c3qaq@$MEnwUC{ z|Jn9~4D2Q7R{!dFtnb}t^jWBtX8i@vLT!b9^h`H4k5p&5pRpDDDR@mhwjw2GRFpc4 zTT?RGe3|%?dgSyWNA>+@?zGvdkvoq6)K;Ie2VV5v3*PAWoY7}iAG6{acF&}85?woU zX3pJ8+4L4U6Rsrxfts5_+FJ~J#sD}XS4X4u~s>zZ?vvoh9>d& zLGlI3BIe7p&geU&oI6s!Cb-{#<*v+_A}j|bZCeFqY_=PZ9R_nyA7sDVQR<=vye;50 zfcI|c$B$X@%({5NUgwn|cdJz<##vLKBm(0LLZEK3ea}#&*M8=`mVEd7&p0L0e!ZFX zs&hlWHKh1g0tpTA6Jl?hz$u=4#<@ap_FKzt+Vv{CVs?9jS;-mtx_GPuIm)hAN0M`E zu5!dSmLg}tyfe-wDbGx+9OFGl_B#oA&5>GT+XddP54icxiQsu-WqNFnvhR54RjgOu zc1E9;Zj9!}_8%a*CX%BTStNNdrFCyoDsh7jNJ4)MTz_%{* zyH+pWY=%F7z8h~p;ql{!J=?C%h*M>nSKF1Km{=LQ5dDpc%aAX0;(`^HL=TSe7&>oE3J8~V@ zq5W%UkCxDp_`mqxiLxQoH!ZC=gl#RAF^r2k=qJ4@{7tV0*3lI{w#ak0)jG<2%hv#( z3wSgChNDN>aD*~axGg%+VCtL@%z^Te$n?pS5S6d`;McOTXg{2 z60o0{a@=xEQ94=mSk66EtX#`sz_+d4W#4TQ-(8mYqUK16`6=qR%ot5^Y|y>IOV#X(ppydCUqxj#JXr@>ayBLDx)^KT1MZ#~A1o z%MdXLZf^wu!YtdP-u%APCD66I(`Da$&}h5ZvKY^IEjmvlBe!u_xnofoCtC1J@XRgu zQPbO?|K17gqfd+Dj1^yy_IH24js@(eQicrzY;hTe_lHG(r}0>fjkE)EEqN>tIN4Cd z!Q~j=vBVk06G|tmxkMv#&eE$x{sG@3lEx;M_;ANO^8IY5V$j$dI3$g|fV1VWz!{;E zCC+FXE%QMnjdBgP0p9`OGjpyl;+xP|q0qh#x8H*P2s7teu7S86{yV_pb=ioI0Ja2c z&>_b7+YHPPawK%7mW+_+~}$o&Dpn^7Y1oKLGe%Met2- z96t39op=>L7)@n|p*Vpnb)^dF%zJq~?$Rxrk# z-z#!_!1uDGZw&Cou+3u4Z=D(#AK>4W@PTj6``0Hr_KzFNrX>}W88sz;^a6b9s6hV> zZ@mB2fNxd=U-rh~uK>Om;7!}~;xjSFZ)MX+`s>t$zAoy2du({C`IGv-7vQe|ezBat zxqvUe=c4(;QmugiJrv{~7wzJWNYF)wTL8EJwaTDAW0IDDx}XDho@zOMD6)dL7=OGiy0 zKlJ=PxIeJxvj4q|&&B4clD<(*to^v{C-T&eTeTK4EQkv^oC?c$^4jd-#-mJ zy@6*n%C`5fHEzYy7bbPa6yUf59OnBIUM>mXmlciERI=XJY( zO~PXf@InR;ITg@G&QTk{Y+(8RIa(6Ej*)XD+m8*je;Q@m$msTwce&-9Zb17>z~4-c z|2@mK#p18I&Xl^~pVImM*z5b2ay`nvQf@f*DtWv&`l)?WzVAIb z))&xEl>gPz=LD~X9QSI#_5y67JTo-3q!HggihQsCgHG#lABKFEI6V&_Kfg-8kIDn* z%osR(YY}t#?oHM>d*l1*5@#FWtko#rS8xk(E@)-V^XH8SoM*~e<2(<$Na9=poQGe@ z_Z`D}+4fud{W11PpPAs+I1ghVNqMW+!+dtg_qpYF-__PubVlh|^+8LN5E`cc6Zq=9 zk?;5UPq2)0M&XO)^MA>Ta2zcxO^IuXER(k{fv(-4>m0^xyR9U2DVA|w5PwZSYs(Dy z_ukC+3AsiWE$6dI-1*2gs%NtrYJD{GuX`?Vru549`z+Mx7;P|b96KbKItl$&lop5T zU}`j~F@DKQw)*f70B0)tu&o81K|fHm9|t!SBWw#862(mt(--+Pa8`IX-}jirKi!Wr zq!<2CL=cF0Ev)RPXDnbF0Tv<`IdL)OEho~~x+jK?$O-sbPXp)SKKZ^G(yp_Pt477# z)!H%AAu{Eh)o!4$jQ;t)OA=rE@HxYTNKAqERjO$e9ofw67+Hf)3j!Z-4g=1!1M~gw zc7G~*&cfF-auI6*b`xOPpnU(kX{!e5iLh;=-%Ts`JZlJj2Do?SI1&MOT{|JRy_*Yk zEr4&ukbK`qlIKfX;)~K7Z(A|EOxgL|>H*F@F<$W0LYZX+AWu-|tR6^jmS5M|8o_=T zk?;FK^8c%rG)KuPe2vZ`Z|YiSi$>_H1Ny0+mG2vXvaO+ijY4|@5fXFmWfo)5&MvlL zrEXpdJl%ok9!am;kH>F={MW|BQyWYFYQEow-vb>JTQ2;wm|OszlD}F5$0p!tE64n4 zI1cQSuoyr|{XV(CcN+LizmJTu7w6X~{`#Ng_mS&6_Cd(M$@%^q_mb)1p_abMYiL4g zXI?=+)u-nB{X>puevI^2%J$WpK%W=259D%$_&2h>97jvEZ-(~f_XuR}M)9?Z-dA(1 z_SH3pVa72wpr1C=^8NP(C&cD4D?gdsm$s(J_XND@_j)-9A0azS;`eF>JgL*cn-b^4 zemtT1iG5y^GzeJ zpG*Hf;LoZ56z7AWoHcC;d;@iuZG<`!0cuFh3a0l+UTJ}5Q{7S41@xw0r{w`>&JX$i z??z-t;S7_z|0~~(kn550F!cT2e4n&IY^(hJgyuK+YIJ#h#~f=W+HXSp^737U6VSdm zUlp^7$66jT{5G-l8E*j2v4``0JEYHek0s71o$!~>IAq5AKc*YYXDrt^t+~Q%zXbN& zs^~owx#y(Ze**23(Edxw6BA0ZZ*DwKzZr0^MnApK&%4rgeY7O~#I{`*0-yc};^DvM z`+c>K`^RbSHtadmRtdgf=Kl;|?P}0F*5~D#5jdS^C(c`N`7Jdo6#9)C~vF&q8~FKW5ym zME%@w%vj3XM*qTmItqL#(rC(ru%Mxew9PO|= zJEIYk`s+0CRY)lC6`*XJ4t!yJ*V>=zuIvgs2+BK!a%>fzf_??udg;%5$C8dlaXFDb z?E7Q+VlfsOuj>w+m&z3Qe9~@{d7;JSNu#)|NSu$xn6E5~5gW+D_lMBeVf2;qc!A&M zkn{(~9T@bRMe#cGh+@ut($nw<0%oY3t2cu%#rQqyee9O6ev{*E1ALc&?>mVvkcS%D zZx4r=0524kan29__H3*&qGRUV`R}{S^X?AxHSg&H|9f6sLE0f-u6>_D!s-Z}o^2bD z3;UzvjzRqbTtVB?oV2BYZ3?6_Sk82C%;q@d9Mweo6tvGk*|yz3zoE6fwvOrm*i^up zwyNBN#rZyJj&A&ZuB34{`st5;%$RB*$0tOik`cx<5sBbZW_m!@Ccsvba;IeZJR_~- z&b91mIqyBuPgd8Wc?ZGRmmwM>=UvL7d1${5?UB;ykGmJ2yJFwxnrz7w{_k_idAb6e z3%eKi8q2W;V)-E&l=)%v^h{A1%x}gJYeVIp?@{2tcNNM5C?+GCNBV5wc~R>Y^V!r? zIz%>u9S-`W4VQy{PQO{;>x;6Pj}$Ra;W_=W-=8XT2~Pu0&7KAR_b{qDf|#OMNlKFIxG!iY7E%m7fADu=&IXen`Bjj9cjh>5e zxgC2SNjX##VUp9p^SBLo#>C)<-jTM;niz7ZH~2x~><^rmc0(3QobQ(m=X^_5i0@Yd zr+g<`9&jGcEAZvY^&1(!etus|BeV>AVRDLM5y_Xh?6LOwiK{(R^BK>)4>>?}grc-467=$| zSr3N&(K4*uC9JGqtNP7V|Gt#-(HngXE`V=A(v}_U1GJfaWEMe41FQ|&iWqWxiCPLQ!tEfGO z5j43l#=!muY%Rd{ldx(u?0=TilPBqS6#CCSYjG&>^JkFPLwsH`Uu!eaR=q9mJ2?ye zet`GGaYpKdlKKI90bd=h(C-I$0r;-FmdXwL0VLhW(T~kl=s(X@icNP(&U2CnYrTT~ z1bmm|dR@c;^ZIn(uwOyaJq7(7KtDIjGu5Xh=_htRUIy@;1-^x)3VrxoGIW=p&-}W! znE(A)F~2b2bMdSBD&%=ep)Xa+(CNT&-Lc2W@5xYN-Cd56-;-heksKT}6w4EcvBm zf#k;xXn!2-o5^*pT9P%vs}O5L28Vn9uk+p~NmuoD*#G4U{dViG{(ThEU6FQc2HLj_ zv^VbnYz^Oc#rVxKe@NO7Il$4he4#&T=! z3>sP0%j`MHdl~Jak1H4Ys!BU(kmcB;&UVTfD}2}U7tBLHSyc=Dv5$BBYZl_YNPmIk z)jYJ%DQf@JwcBT)z36~^7qmBd^)7$=7_zZ=Y!dKtE}8*H_4I&k;x5Tt+_-Hb`&o*9 zx)=4cz9f3##`}>rO=?HHzXJWNN7?o!`iZbC3~ zxlW=p?AO}@y6y3j(0JpzP4ZMG`Z;|kbd{V7m!C%SSa2Qxv|P)DfbI1_p-=kMZTk`2 ziCBZ+aRfGb>@%sP;S%s9Jyz)VkIsz76Wc#3X{ebAee^`3?=4Bgo6)f0xp~1d=y@s3 z{`bp@p1{-knL_{fyXpbYb$Q~(zhNrRE{D-i-gAY%MUq}00)G*67JNr3Xbkc&%CX`N z;q~Es9$xPs-_u=i{%9HC`330ry5qZXo|kfd9s0?8A)psth#p_0UXb?dd9*)`_IByd zyT2rK#riaY`cn)|ouU5C(m5le5zkoZK13s8ZYIgEv%2EE@mfIkG>PW9;JQVNVbgbW z7_dzNYwowwe%O-iHz~JLyUF)k75ZZVr%Ezc)|U9Sbi3@QKl({)_utDaavsm3pAP89 zJfj!mmDp!=$!F=^ai0~i=3V+4*XA=hrl-+9>)(aG4^XzbN-}ph{3FzFacj2okFb2#= zG8tB$_9g;;2jEu>FZA7G$Gp2sLTAkV{Z_2~9qSEr>TF90u)ja1-{B4Hr!j>-pFGb` zC<$%qzb#W=fl>10YT(nS2Y9lZe{aXKiB0}T`&6_CImr2oZXa8YNPbR#6YCFH^Lvvw z1NORncH{a=jwuWMOhi9}C5?xo_gUmOx8-`TL;FIsH@~^Pz9jq1S_VtuZ29&z`M~mR zqf%(dP^U1%bqwd&nWc2XKk&2EPmM=^bsTQS0QM_N~2ZI^;p0)ni-J0b4xTP zOApAk*Y6S=C>|L16iLN;m=}Z!~=e_Uw{E zfBxMn%P~fsajbLjuf?-cKjfmHo=XGg$}#@A59$YOpd$Sc>s)yr@Dl-V=HCTufapD0 zlJj8gUWlhJE3(O=c_6kdmHgNpu(bedp3_Rl9z#j|Pm&)u0N)e9XWAya{5mt19*{Eg z656*x`$wdXT@+BDFW7xu8qVP1d`}uUQ_5F+3WZwvxse4g=p{;4^a# zE0sj&-gu0`n1 z%5%?Yz|~w)=qo4l_(odN7bSyY+{JI9Sbp^tVk3s%{u=jkf3*@o{(HHNK=YLM;D1_O zaHN@8?^V??t&vD?feID@bjS0?~RV>WX4=v|Cy*KQC;24Xtty>UB#Jq>Ucv@!g zNO{#7a4D@1_#AStJr#s2ir7l<|Ne=JJJM#dVXZM!MZzAnnP zPovvE5$1mh_gnaV6}G;R$D0G^&q08_?i}B^uR`*32lP|Nid z6gLU`(@YAJvSumpYyh4!5>H}D=(YZ`G?vVAX`}(00oZ(`r`o_w-;&kDCz7g-tQF_G<<_+Sq z@SDi%$K~*c&_HcqL+y)!+6IAIrHl0#dUMI!=h5#I>0aLzl&$3VFJX%=dAq_074P8o z`ual#gy=N$XIl3wdKqRnHB5jYn1`lK@oNd#p4Gj+Rj_?Sux6+XSE_19$$T}}(vF5m zmUPSmuCsS|&F|Gj;F2~2?#7LtBO}ZMce=b+VyDkmFeTk7>W70%j>&8dVVBbMO58he17DZ zdI2{59`Ja8pZvCDG=Hmm!^Z@7gK4X*0PKN#y}nY`{8KD1@ZdG_0@FZ?$WqzDI$mEH zNelSVe1VUm%#)e1aBv)!)l#R_M7vpav8E`8_9XbhOkgTd1#4vZN(755XkOt_JW)WIB`^B7k;+UKBst$JSH6qKX(+`mJuYnn1+8`{o8+mCE$ zTYOJNyyIw+tyl=!%!l)gQdv?XuMgo2D;!Zgs|=2N8n+eR!ENYKmfUNesoMZ&%?G`{ zg@L&Zt}~LCithuIv)1E}qTSMy zgnray%aOpyQg&NO7Cb=Ta&4Q9R@v!?y}pcywIwr|YE@{lTlS zsQHAaM)HDOA4^X=`UB41_;m+f&tqPnd`FiBpBB4+GQ$=(ks$P`LEJq2a_J%5P?2IO zhn_|WhwtK#pRii0`e=yHgPdm^!g1U{(WWt%SipNz*XYz4pALn#wPGvMg^Q3Vqav#0Ee(>W)tWTt_x!*45IOCyW+5yc>dDIekPQT{$ z&5534G>FhU@^VSEiUDR*{sG4m?Y-vrDkA4reK;sCL8hF)ZD>2V1NMI`oe;U7c3Jv& zfhPmMl<}}nx_W(kqSvAr?XQs)?b2Rq2^^ccd3{$=j#vZWDDsuy{YdFx4pSsbU%DK} zSiog<_xc`<(5XSYA(}Vuv%K;JJRbZG1J~F$flH19|5EU~gt{F)y}qvkW9z4=8wh$; z_U)OVvi@(w&L~;mug2=z96xZacsD{O$$f#O`GJb!H8bW-N0|5u(Pnjj zukU#|2QYh~=AnDdO&iR6ZM^7*L+ua#D4JWuc-B~^kkzA&ZFom6S&d_ zd40C%Jz=Q})rqn8_%kMo-E-wf^BVs>edD7zH9`mr$U8=M9Q zPzLa|0lszPy}m@rYeAn;Ad%)|5$l5ckhWkxmUn+}RQ8tx{0|&cCU|{YfT9?Vb)mL$ z4R)h##ze3AonF~o+S;d4Hw<<1TfCt$K_7(6qLY!b2#-vgH!U0bV3OB2St0{bp{=5X zztAEW#0B+DijK)Flf6E?Dyk%FGdc#(XGmPRz-61__2r`+Ma$ltg0wFtMv9*MDwRozmqN-Nm%RZr45T^$3L|IWl|(3LvFYx*vu`KNsm`(R+WGf>2K zCf`(;iunK>Uh@;Sc13&>ICa(yw<93Z(X@0IpQJNlAE~u% zMa(4`7LO;QZR&Ebue3EE75m=NGcg1jT$tuv?9;$^_A{@qLTLY^C-dm(9~%yz6~OF8 zi!b+D>U7xuE5S1oruca>+DD^4Ww}g#U({>BrLXq-{w;Am8Rmnqmd{UEqFTT08|im= z0w`7hU!BjrK16Ve)+y*ymIssI>w@ILv?ln~d>R;@+(*-j)v^qr^5m$j(OR$he(}Ki zhv97P2Cx9b&o!4g`Ht@Hc%hym>{Y%*65&I};(?y@9p0;NA7ACHxz{NIr zeVMWNJwlHw+pKZ5Hpk08fIYG~q?^Lz-78@%DPOH^a)1EWgtAZlGP4nIuq|HShjMM3 z6|HTNjPSodP0gZ6g|m$t|2JA^V*hQ)dCW%z#hCa{z#Sc+H80v<^nzYT5k(Dp64 z4u09?k99z*7M(ZLMp5g4XR;qL6Y^%S*LMnK_H2ZX|GH@DVGf(?RSRtoqpkFT%YPES zDe6}5^ZK3)^c~_OwHD-LkasfBwmaIM-w%5*f=<7E6*w0TH-(b2uGl7(hI9wuSOFYo z4|shDFGcbP#uIV2RE9_5FjY#1al2$y2CS2X=vCV(j7upK$qax0c}#y z<^@@y{3Fia<}tMSO4cx+kA#EY!SoEX>|y&cvHKPGS%sZZK(H^n9HqQxtas2tdSJGL z#w%BB_+zZYz05)HnJ6R<58Da2or?P?uHpLOoMfYva=|v)_tD>mld&z1R?o&KvT%&v37aqpUa=Y63k3XxoE6_9*Vt3Oi}t$L&CSNDqf%_9z1OK^_MPKt zl;^l+(&AF=lenthWOl^OcP6s|o@F*XKbgcwlwt#t)6i;uav8?fC+jF~C}mtOMLSDj zQxq*G`n+SaDt<87A%0Vy!3z2Bklep%_e?a{ce)2PNA-BdF6!?72J34`H#2CeOZW64 zzTHjVI`p}2+UIx$*>FOi;iiMm5z2Ts9njMbx~Z?hQC{kf-{PiIZhqAr!9z7x*-HJX zvAI0{Ta7KS$1l>@G)KZm8v9hZQUAW?KBuuMn)?$x)!Lf<#*@Y};Y3(UbCfV#**8(b zR7G2Cr+un>nw^gDSJ>}ZmPU);aD*KaXfP;;t%@Ail+QhGR z_M_d?&%u7PYgg@b#eQp$2|z34PEDrYE8#0r+0>^`5gSMROJb9$1z3-?D@2ztqHw+u zxA7NQ&3{Rl`>571#R288Nf9SBwnNEv|Z%~RNAeEum|R35G8)eF`Vs~j-PC42RIwfVKi*yo;{pSbAFlA zFFXY0%RaBtPil{S^vj#{wZl{R25lAY!*9^|(&y>7H)-Ha@1y%sWi*tt%iwKh=gQ>D z`e~`dQ2${$S--U0>x@k+pMc`A@_T5;TePwQrj%W&sG)p0trbwOy{o@6_bpm~_b5Er zeUE|ik$Yg^FT3|MLit?n;i&)PK3PBb??}A)0A%``ju4*{utFEZPObxrDNK>H)w39w83xCh|Xz0^q~EjeCS(rB9mY0Nxx-^ zoVUoAX`p6Q7Xvl3yHuS27H#dqf9y%$cj4=M(%CM2ZcobZ!pHZd-dzpUkM3%qer{I* zT9$S-@bs&$2A<}1~tS>(t4+Rx0B90J$*IG()a`|hypmO(JiI;uL?aCw_c&?q@&nhN!zE;dd2g-LdO(- zCR~0=`6LeyACd-t`%gsz{_Rz9Gt-H7C>_fesU+!nelfGGTdllNJ zxPK0=yxC75Y}h_F_h=i-vPm1yN6u#Mam1c`vPfr?VxMDTK39w(D!Zg4BCs_`ZDh(q zAA~d50l$PRacq~<_%4necFscU{<`~{I5tL?A?LM*aVCy^Yq$@@u^$Zx)N@ACo;cPw z4tBwmxC($-7w1Cjt#Qwo{in(^F@DBL8(UyA_S)D=n|rH`ZMHoS;L924VTR&{`urrY zwjMSOb<>n2Ec;@moY}722$I8^N;C0jo$5jPJ2mOF%1){e7LCor7UJPT#f>4Z3gAj* zYf!gFG1l1FR^=y*V5v=@yxLaQ#G5iwNkM3Ct|CpvtG0f4Zwk2B->1G%nL<--cuhxV zvu(8%O5%Jc(DcVNZ?|hGzb}l*PIghmPj|9`&IHssTRT;Xt@UWfO0hpZM+sF+6Wv=&u_MXxzm#IXCF6L|w^S2A zZ7yZ1ZT~+06!ZD1ns8EOn^kBkbKRx9A4T!o304WF19e!pnNEhEXJZq#-kH3+F+1l> zT-Jn5*F4jku$7u;Rb#eAE0@!lozlwnZOr<+${laSK5&)$su9c82fHseV~5ICp3#VX zmD=-Q12(FBjXq7-`SO1|_8^;abD1%X*y@|h{ML~5u25ssgX~a+8jBueqbgPy)0FL~ zn6R!P8*oc)l-J!-W_uIny(M9ML$;vO9Vib>t3LHXwlr-c;jy=J^{fZk>?-AkG-O{^ zk&eeh)pn^lP1%pPH$Bpr&Ay|wuK_!FM;X*itLfQYpIxkZQ5n;K4Ziy(RQ0~6K)u?8 z9lk#f^qsqZ5x}R`OTuuM*NewMzps~offm+#3?n(5;ab;#^{%f2Y-#=SX#ZXPZ(K#| z6hDQGY-HCe@i_{cq*N@bFUu~1DK09;A%vvW>R>I^_)%q_sSW(=TW&8U&gBqH(E9AE z;#tGlX`5#WXN9)FUiDGw!6abaeMMr0!X_(mA0dlOc_RQnlRT5{VEe>Noc*qNvg~Xb z_vCZf5z>M;*HNEIt~s22EcsBbYw0XX8EIqlNQ#s#N~f#vx~pCMZByAm*gXRs@mDoA z!ObI!;R@Ht^XE}D)sA_D7J!yC~cHBN2*oU}M`cz{}T*(vC zS)MDge>(fwwHTZ`H9i6L`{K3b>FmeE(r2r(ONlw?eQa_f>c^JV@~W}@sqUrK*sgNg zX8d1Xd{~Y3sT}`VH8!ELv8WoGUs<17jUBBVKf4+$tn40HjSZ{f8c>Z*sp9EZjV-Lw z1hZTvJ};dOtm;OS)m4*!NM}c@3Y5=O-HbKxkFU~E`+Hd~wofDsaj|927f@cVCA{xq z`C2^6gIq8<yL-G~iyZMNZ*-K-5$u3NdOpnd9)>x` zFKL*a4Yf`F6HV;S20Ic5lIY zW!v?SAffE#L-dZoz(&~gDK<9Q1`+{x3)oQVNbPGIyP_D&Y;1^{4U%Ws+?a(WHd82} z-Be<;;6<1v-kA6{o9x`HW9pNCQLnzm4&SsP0S~HooBTGLaC;8a$EOYF)A+a9uZ@=w z8ZT|)%6gmSG}TdF*z|4K-Ve>Cv2U|)n{@@my5<=E(nnmQ-)5ga+8h=ATTBAFsV`MU z^9?VJzyyEyY8BKMzIp&;?QU1G_uK4pJE(Csti6Hqr1taOf%PcI3Nh?L^*eQp3kExa zE$pP0igI5UOn&^sI7-b@Q+h*;OA+{+s-t*S#mbq_9$|Tyi#(~T{hR#@pN4_Ha-te&n9f}oUF?(R7(H2F8d)(NBL-4A3Qi#dAo9^E*pAle?r}q zJ6>5)m-VgD6&V9HT-)oiLp5d73wI^~(}2G%z!-Dy7H3g&chb(fY}7qE>Zjf_1&BVo zxA|)HSzA6`|96i1O@E(;`jhvIm31NbCZjyKu53THu6d+3_W;8|6u;M|$3dh2TTa0o zni|Lc>EX7!%kKCKAp{1wSj^yQDKSxq4K2~>u(cZI$4fQ zn=06Po5<2wo{dihGH$HV+2@>JF<^0O{qfZ9TqoF{cAoEIs~wW4O%CTl!SWo=J%XKZ zh-FUpi=#e{QbMc}bU{=;>Y^E%SftVCn%JUIo)&-BMFm>?DHohtVy25eafvl9+UAPC z;GzM#{+Ujjbn(4TCv;<|L9-3Lz@TkL`QHp07YF@J-^V%o!9@~RBQ&AD>}@K2tv(^n zy4YJ{or_H&vC?3xNStx8L&Q(&>^O-}bT&%iYZKwE;AcEAXZQ~~IEDWZ4?B%#C$dGV ztp7&k>)q@JReWf$Q!4++&CaW0h5`FhOn0+f8)#;`Y+|tirN@7bW0!1VzRosqanQ|< za=sTeydv;Sv-93+`&Ed+u#24%cCl0Z=wjbH`R6)2>f~c})>{*YFmz3z zmwB3O^P|S6d)Q!?^ADX(bU9J;u}iFS(N>qpbI~pr#KAf}ey~A%bulS{e$qw0PMZzB z%b=r1g4dt{aeQPPWyi(sb<-zt0$$85aeQ|i9ggE?;>a79I$3(A_!>8Dar517%JPWG z9$MxxPI%}`4-WL>;*Fj0G$XztV<+N`X$dqU!HJ%hCFtW5X@5fHQHj($u^MCZ6ZMse zv^P;dlUSr%q(4R6%-m__UKF~h&XQn@$n#p2X2y5K-sLBW^`$4V$4ML^x=i{hg_bGK zqYAB2ATcBN+wJ^i*29=a)R!toJS#^xB|E#Zx*R&}4bhuu92si}hDNZN^cmljbiFp% z?=ky;Kj>)z|(HkCOO0$2Yi?uHRm1tcLyyN`Z_@;gg(KE)4skO4gjZK=%k%atX~n~rtMHh zdx!l~!+~-r@lix038$$*17CJ!y7}&M$B4ZoHWGUsUZCA14$5UVrYY1{nyW!v;k*K0 z?~}K4DBg~Ir;Uvu=XxYG6G!NJI|-cr_RvevEs8j(LIenSvd*ab*ESkwb8fTIG#kv3 z6Ea{$x81vnLky2E7pC%k0MV!0jBiXh)7-J|{j52Qz|Sg26igKj%c{ zUF-qXSfkSSs^L}9i*dz9D{c4n;dId!L@MFTdIc>y22;gU<}kAVWUN=KEwtJoMUX% z*M@|8nr$^nIQoG4BjY%vL(=)WehMP~;{Y}DCh;#&>4T%b6o zC}Ok0jwn1Qo}E*~Y=iYv#bKR|RryeZ?N)_1jvY`RW^Ara9E_6(*}e%l$o3-~%egkr z#YWlr=>!N|F~DFS+XXxbIHfLhv8#45Q)f#Z;;I`G7l+%u4gpbk!~wT0BrW>iAjASU z+a?}^$>!v%JZz2AS>R&dI>kVp{o-^&fBfkb{dG1#>jaBY6Wd+v53K<_2`;h4MR_i9 z!bOK&OF+sPL*y9rsUbEPwA&Cz4En<;vo{V}3zNJiE*@g@RGhek3b#JTO&i_1*G)U! znC@{NeYuCe_ZV<-T=682kEdnv#-H(YFh02uLHkpVM_pnmZhk|jGFU8jqtER!!eN}_m)#V8(DIq^;3jz~GoGshlM2WS;o2(9; zGvi4An&^XYA?nNCK(vM$2*|@%1mZ-UpszjwBEi-Yzvy5a2&av`#P>N6d=iH^^AR75 zxPT&lfpY|i$}1N2lIpCH&yo0w#0 zmu+GlXMfrx`{dfi=XTm?FE?7yReSt!LD>#5&p{g;@q+~&afovc%6Eu`~c36>GUs72m1!jr5O=vWaXdC&X$jh)o=~(I76?avI4if@CgM799mK$I0Z; zMNO6>nz4ID6RL+6MY1Jo{y&%VA9@T}oIA^EI6X8Ji;1-oF!RTdb1%^p!sdbULvd$_ zizOd~?19L&EruIy6GanN_8*cD5c{p7jUXtUcUa2|h#uneB{4zQF4{n@))dGB&*X); zKIcS8>r>O0vCrguto%WR4ONm37>Owa$9Skqldprej->G>(F6Mi4$Oz@%1tb?h(=K5Fr4-2{yR84D|bPB zJ}KZzd{O*r?oHg*gT&oQY&Jn)jZwr@g}|Uo6#7!pe^BUKC9>b72jz@Ef^Oa?kt?VD zZ*rcJ$z7pwH^jtr7)+xmG#vAp-_FtJ%5zPK^8kmr_K3f+6i5M6f8P$>#r`RV5qtJI zgk#9~l?c;#hUjP{PU!kZVm+~TVkWjRC_hAEx2}lS`P)A=F&Jxz$aq;H(cpEy9Z^me|-%;uknhRpK`! z&ntW=XCL6)WWyH6Uid}f*>?7a!Y|n15rJ1?n#%KRY_2Lc*l>1$xWy3xx^;-{U!dP6 z&f2KZCI)aC#mg<>^aZbWmeT;cKHg5V?fPyzePT}!E~%V5ox%JmgZaB9P0rt)7}g8O z36U#{ILaWr3!YlSKR}|dsfOpObXjrEQ0Z#8v1{5@4*n2J7I(99@De<(ze+EJ7Tr9T z#{)OmS_T*RqSpDl|;_ zhxh{#>B^IEw83_CNu8AEWUEOW7m&PQO<1s(bv9DrBU~`4#BxnKe7+D!oe(QDDQXnv>1se2~U|;rx^fPO>T}pSEj5 z1RLRS9>r6K=;LGy9M}avI`|ZWEfG$fmA(_=kf42HBIe>Zrw27-wDLdV@TwvF`I9E{ zHR|u;KkGEXC1$y3nX5d`y_a43Se=&X#(AB7)O9=^U>Fk&T4oq|27PJV1+{7DIAG0= zGj_(&;y5gOKxzc`V9lG~mHMifOq25Rc8=}(xPU|AIk>(*AhEzS5Pd{vNc>LpTWE)w zyi}JDS74`ZCf4<3#C*vZtiZV^`bl0gjwl3U_<%yYlrW=I!rh)EZNF5Q9RCn=04vrJ zdmFaMCnQ!$yA%#KsKl#8`5}qs%RWH#12!^aUHC*DM!0rKNGXZ{*d@}|2sR#?6IxK= zn_TP%nWEuU#0EsrRPi(7aH{C5Nq58%!H!@{Ii;pqrLlcnT*7h2E)aCsVV7=-e7iX5 zWXl~Kh<7=(4+OjH5YXCv<#MrwLVPA@vk*{}I|WAI6Jm&y205GKEa4PKa5~ZS({d<=&23a+(_z^nI){UQZ+N#GN*O8DB&ht2j)=E80>_zPpLZSfQ zMr<8%*cKb*iS07!a~0|%(-=Z)YU-^zEUB4XU-(XIilGpVP!6+6$C2}s(30W#ZlZ6A zL1R3_H#uNI9k%1NtNqSdE{WB4wt`^A9wo8dfz*PVU_rrtc1ZuvL0BCMpKFIjtxe{L zc5$Qy{E5{yk9?Qxu&c#BJCbJj1f(;l{J29pfMCeXvT4gXB$qakv!R@C=4>Q?L&h4# zXgf`|ixq-Cw2M#ewAc>Wi__l#2aR%wYzNJCh)*2!nL{9xYP&-ma?lA6#MW%pq@9u}GGaqQM>%OI@P?fkerS3@U24;>= z`tYa|pH2wuhRf)-^kTBM4Y$_h;j%9Y1pKCv28(SSvPe`mP7(PC3M$xq-zgk<9EA!; zNb^tSp9s*YQuF+*Y6U8edHMw#9k9irW*j$q+i5dT8(>G01`b31#gH_YVjn@SeMI~y zNxq#T`L;q)1M_T(*lRg{7i+9PPmhJ~0pzT_%s*G5KAmt^FCc9sZqF&QX1pTJr+Eth zU4d*CD^xn6I>*`QoD3)h`2cdc(yNd~ z@{D^M*c3@2)tV5HAdB@}pUl!~mzBAR5* z5fu2p1aecJhh#O!kNmOHzfn#K>n)Btrlqit1#1*+SZJ&Ta} zz>Xk_aD=;N-OBpgn|zbbw%UhkkWwCfRXRJHQWkNm%{RNhLl~)2nUm@4Koxh^t?Yc2 zq<*)uAywVytFg&d^&{2TysGXmsP?ZB`Vbzq;>1=Yk zHYc6dq>D}I^nJQ^B%KbWKY-<_W{kd#HdNCNRHHGsYSV9}9k*(z*>@|nbAXRvzsyv4 zAH?Vs8OFvQO@8$GGX%E6lI)>)6i-tHIi2!Z!azks2KpBYmu?GX2v$>$7iZIFy7p7C zMk%Kh@FJvVj?x$vmyq(M&=nqqAe5B zXqzrr4qRPMHd~d!#4jE0p9QpqK3T9qA|7o%7uq~{r{H=ObWUi~oK$GmjBv)ybkZ`X zd#FYmoDUa`)TAGI8fBS&i@%(Rt>IrU*g7@&tE`7-2GIcN+X(Su_GwOgIT8(_JL8Ox zI`TDf@?PjTPv*ExzB+;Tew|-Q&`}>v8>dDtV}+(oNIR%zM`C1)`f2` zCw}O{50&GWyYN5C8CN>+8Re66I`bXnjg9U2S^VFg_qn+gYQ|MCroYZ}D;OwWu26AH z2R^J)^1OC@Po?CXc6@P~_GJhDXPQ{tfnTgTP?^`6d#gQ-JlR`0YWCi$ZF`+xy44t* z$v?S`=d|a`ZWp^>=ilAA#=f*0&#DavD9gRC^@1)u>+fHnyz~CEBDV|wyb)9<8}i`y z`r>Zf`}oVK8vEpHfVlD`Tu^MoQ^RO-H@@TPk@(}#GdpN|7k;Xxf#<7QiPf+3-K~tJ zuk!^j+>J(aUrd^u$#=e32T!NGWnkN1NIi``Xcr z*Nv=hRPefy-JbflH^#T89qsv{_H?Sf(Z35_X>a&4=|G24?{}j?9W~TU>gYyIZb#$G zj1LF_>}2fhM0-0K7dp|Y&f3+^bg47%mq}AIwab|_ zH`8@KlNM(hpk!^P#J??5_O&-tQZlZKKBo(<>mtiPb>Zi`Ah+yhl;?KUK*J|p;|F%5 zFT3774m5XdbD#(P(ycem>%lH}=VN-X1wCAQdeHJ7N#FILEjCEf;j+*#Uy%PY zPgx}8i_8bQ)7=0jLH_a(f|WlvS# zW8uRwWprqtqwiy+o_Enn8VONcq&sBZ=Pi#R?{ln~_c@8MH!hIqBQ5PHd4DT^mepwC zmmjyI@4xxW9(GZMqfvD)g{Q{$lBCBVC+o^sSG|AHDH!zX%MjL*MiYGFlD2rZ53+5a zP2b7cN!uV);-4JX9UN|lBHS=kVYu_(W&Uoa`P{>fVls~^n0h!eV0)RkW+R_swxiW( zCoF0B)dIK@CX%sRg&V#s43S?+CRv;9bzCrp<9iNlBK)1bTBT(&aRicC<$d8qP+^*| zN%kafCL&&UAIM}r#|&t+4-CGqGn->Ty0iJ7(x~qp&&PIR7vfuf--+!^tgr&*#Ll>W zp41-2t;te+{9Nibls_w7VRamYVx@jJ9s#S6$eOy1miIiU(?S#wer|_J-t+qFD1Ol%G+$`%Lh-W>u1#Ioh7Oe& zJJmr)@nVN~B%pP4FUe%%I=a_&X0tj%aV+i_KejX5*wOtvM&HqmX*$!f3c#;+(noft z4?F9tI@5;E`uCmbL}&hMXDaM024vF2OnrVPeVVCn%%t_1($qWOMZXG>(`6FMRcVF7zpg?f)YQ{e=p>?~Rp@hv`(zc`=J*(}zYF)qDzwSq zXDZV|kIyxzVduh75bv0@K&MC70+U|msOVaTPy2(D+i5w z$*b|aIV;t}G2X1{XmuATNo6lXa2XQkLyN5$;Y zY^YWpO_pn4fX)Kr5oD@ujFayc%Jp=cikk!Re}mx_ABW{9TZn>5C=Ux4rzmG8pM1$Cetky-Cri0GV50fb1DV{8U*r}TIx z_B9aWUy1T)^=2^WBtF45$Y8ln@bDR@8&5yfvN)m)(^6MjvJaZp zhv;dl&qTwfI{~`(A8|9DW1}86{(P2w)gs@vvnBiLDgDy3?EPom>z-#*o^@|;#g;v* zfAuUKdshFV74>;epZXjPf6g`kMVj-R{>5{2=DBhx&uytMYe_%1)Th2ceOu{sThWMC zI_h&9+w&btNa|F!jkf3TyqJv$y|!|rdr=V5lHP7+}E)~!6eITpur{vT{YgV8kR zVK(ML{m?(ytfuZQ&Db~1^!?3fVRL<5b6U|HR{iDXe8eO4dvkae!fe=zR3=d@M<@tK zR#r<|?Vpo~icCtrL%V7M9-zkjGh+W3gLXJ|U6gKLSmq&oK6>tx1bto|b|6vzqYhh| zB+HYM^~H7A?Bog15v$AakLs}Z%Nj@Ovcj^)7swe(%>_xz?*2vnvkv>=KI2Rsw(jq7 z>+7&@|Nb?)8CNI%v$||f9jG{SKUG7Jm*MAHroqu9(~5pmUC8hL)7*pocpOerqd1~4 z=3M)zEgOOp{gATy**jS8@_PRo>_~ZM{vGU0`SV!*eUR|lCUiUC5 zSbnCs*$VSgL$j_DTL)fPXXwKc*l9!e#k0|FeO3ZH=+;Lhurux-0`kPeh9_a8Ch@UJ zY;+Qil_ox%-{BH+K@a~zcLwU7NVjwjq6s9OTZ-;zYW zGLfxF1RnvPR-PkNQmL;=u!(;uM8{IQ{;i#@vwO@ox=(R#wIeqW?sOBTmDokBt=|Cg z`xce}ehG1S_rD_N9-{5xrjVcR;&?rvIg)Pa*RPD&HM?~qR^nHi@Y$%q7Th={eZ^qR z^Vloa=P}@G!S@k+QrZ=l$^C)6Ux1PO*|XUAWjGHl

UkEfyrD#0!STU0 z7B_*m@);68Z2G#To@Z@&S9(3jR(}2*4`Rlf?y>Bk-5gyfZU2WVVRye(3DffdITsQw zCFe$>&%+7Cn3B!wcf6ks(TxujB(t7Sp{(T`N|_*!yql=v7zJ@COgQRrmjLVWf#S}B z?^k&r?n7rN5SAAiuiycuB7Rt4qB$V^TMaoCMwTmO(F(q^nO^)I5q_apH zCHEDAYZ^y0)HxqYLV8uJM*eZixneWHI5TaPhH>_l4gTbj+?m5^Vg!F+Y#ssM3jCbF z5sx@J!;d4gH&2D-z1GF8eY6t`^wrOh+PqN9RZj1?jcL%S- zJb0Z(3W#gSTTs)8^@eXJmFa0_pLe`%KY1_a6Ok}BQsuMmWrOd~w%*J3+-;wFFZ=Os zxLbDKll0BK?8H6uOoGh2fA4VU$Vrq4qh=v22bsBaoM4}Zx-r*9r17R$mKVbKUzFj0 zXE&R^Kg?0d?hqnt1zoQp-XHgbsG~`@2hLbzs#05osk0PWC&%4d=1a8Al;IyY#MAMJ zd@GsD{VHRxmhDe$5NY6;QDFqjaiy}gnAEkZfivp2svDdAsH&Y)>8wma4rp~>_Fws{ zf90?KmA@+GaxkX@lrrIGG4q@n$WKMtDXOvf>H*);U%9IP59X@MJ5~Z2 z1GP20LaU7i$8e`d5S1gOk<%Ap-a*MDf90$y6+)Zo|Nop-++=>Iomh$B96~C1kp@!5 z?FhjM1lw>2=NmgBg|EqXsmPmXR}}FpXW6PiO881ujI-nA31W;LFQX8n>}lScEu(NI2+5wWzH6Iagoal@VGiN)Lvt#kB{T7uHVV7(;I4b&l z1@q1sa{WID%MK0DnZfQ*9%oJXBh)O+pKi_rhJaLL|D04|rTno8%uk>!??Tp+7Z5U( zL%1u==Mw7-SN;#A>?6vHid7>2ydm$&UUd({efLVp%p%-1rfFf3dGnrJGyWdyV(I2H{p4f{e?FAC^H+{|(HrF=S6vXteUNo;bWA`$jkB zHe|n-=IiRSH+s34cPVv+&?s6haYfnXuvK!;GWfh^{wX~)PQ|ZPs~TddhUxE zY;`^Nj12ZoJ@>JC%v;Zxnn43IjENbvBE#5{LEmK<$1|vZ{nD%IQ%-%cygse3@7h(L z_Sbj)T%Ru1*ZMY~i4C+F4QW|}o2NFUQw@y#26VN7ftuwFjjau7eZz2myT*Ajdy^Ek zhgDBOA{)q!pAzxP%c_j6h&53NGD{f>0Tj_chZ!yw66B5~*Ll=$FoZwV?Yw?6A!vZ#Jfi)vgz^e z3kfVY-n}`2eHHJXlEC)FyC)>DpW}@~iS%c@aXgVeO_1e%3C7t3TugQjPo$3$%bo4`R=)4BSE)Lmmj2If`+W8u*BENv~;SPSiT8Z-<>|tX(-g{|Ex#^1QCp%tP z6}QTcH{q;C?5>~PU4WY}cK04Tn{9V*20nYU)ef5D2x5}^6nQ>)trgyr_M76FWU z8ySDYY>20SXfr;u(N{Jt&qg~!X$K}uwWVYrR(^(zK{gmx9=yh9yn@6R+{JJsRQ88j z@go~ek#D9eqWNyR<9pS!S6%`3d}Y#w2t4T8ZAX3uqJL-XNz)yKcc)Eu&}hg1$KF>! z$#Guk-rL=O_wDMcu4;yvks-DvS&{>`D^ zjhLC4StDjE7pq9Q0^LxHBjw)WKj01{ysJqXldwN(^@y}@I0UO^2bRU$*ahf!mduUj9 zOu{<$HF<@;<*sM<7_Y#MeBW3H_(FS}_xAPL59R+#b74m5mf{1sA9Je*mW%ED6D?>{ zSAfuO&*}=;_h>#sQii`u)YKy*f?)pPXN>oNyaiPBsboe%N$P~?=>ud$Yz zJi?4DFnMNC>ZfUIAf7^8<|fPfpr-B? zhQMUdiaHRfS!~iRk2+!iX(I!J)XOVPASUURMF!1>JPlNLymB)@7roV>D(I8;u8m6qEeH@nB830zZ8N`T|D> zWTlq*kvXDoRl6W$e!dG@hR7)4!;*z;PlMq91}`-j0q3!~f#%LcL*^O0$&md9pLV5w z+J~ffh$n;~&ZDJ%AOQrapJJ2So4A7;O$+kX`^?7y-?Gdz7SFUQ9JhFzRc>lxo-Oh5 zTpwYd$3NMa)>NqJ5x}R6ZV|wDFjzqTn39H4rZE+0Xpi(yLtIXEO#?wGg)!=`Z_Q$_ zT#0D9Tb~T3HHPv`pLC4UO0W#mw9!`sSD<8FmU?M|)O01+qO@Gev6LQ11LJg7$s!;N z{L(!Rc`{j$(n1qg9op*0*Eb8u^c3|9NShQicV&A-->zLzIu(#(Nopk0E>4{=sGue- zYGzVPBsGcC9Fgf!Y7kU6^Pr^o46vU;xtO7qLEM=3hN_=On+(-92Jv6%nWQrYWD!Iszz5lc*feaMzd&it((NS{&nLaoHT_hKb0$G>=PU z*Q9x0BC;sWEt1kD$-|Q}CCT%Wk>zRLlvKO(`Fc{Cr?_V-J}JdpQgSfG*Hh9w&FwPM zJ;ReS=9vud%II$?%33S4JR>VhvV1gaUCVM&o;5v>H|Ciod0dol9?0j#`TCqI^6^Y_ z>nP%?kM7TcYxa_00ecm@>>m{{unqZLfY4pqdZEX>ta;GEbDBzz#Upn<&DVZSW--;p z%dMdmq0{Ye1ABPq(%Yo={*mWM}s%7H3%to6CHh44GdbXz|5H=!2rnRSIaX+fUH z4H)57$ISUBx$f6AJ!k+yRtPY%`W`jY57|fqaO(kD_F^~0!;uqsRZEaly_#-1SIdE1 z@ES!*rw|AHG|y)gDmvy<&HdP$WR&6sDhNU;n7xM;Usk|$BYDsi)0KX;+0R7*b8vts z1^F$G`LMpAhIB{Y_2%Ji7!mSGu`R15%;VKG7p^I-TkHPc1GA zISXtmVbZF;VEu3O{u!8$5YKfkg^|!u_i@;rk4iUb8p%+`5%=3V}hD;3Wdws=4UURNi z3o;vPl^*k&k5~Kh@cJ<=+DYjWZo*d?tM$ zFv~Z3exrIh!1Qmha0N0Xq*Y1!hqOxDOiRy_mX@AmB_S;4vNr^Y4cQUG$Wmt@5v*~U z$W%|6dSQo#&}olc2x)%F80hs0Nu!mtH)*vp zMjCVzswE*rS#lFHZ2pJAtn^DOlaBh+5E=;RZ-Zda2rbd}9v+pbr8d;pf)}u5iqsF$ zNeLbUd{_ixqlLj=A?ywcRQ9d~p9L2Bj>H}0+j)w$#!%@=@7)NCXkl^bwcH|T4C z7c+E&_G#Uq!weSKcvt)fa-9u5Um2y>LTtYqJz6zouLr-iY;1qox+SGsvr@Vq@=zd!I?%&pYh8LKeq`KToTCUN6reL49Hb@ zl}O}-@Js>I6Shz4~c1BEEDzbJNG}d6*GKqPQ=k*k{WNK+L^AB*p{~%46CvkAO z);lUU2JXHmAE`I-CF=8hN9xkExH?_m$n{2l&%df+jMF+sn_L~E4X%z62x!nTy6);2 zL9qooM(bQ1BM<`@c?6l)2FR0m5&6j)FU|JKaxX9PV*eiKlhHn2=#$kxK8fm;kGm@< zIdOk@#n2ih+sc%TZs#l?uVn=7g0Bg50e-FKV$uk(m+hc(@0PGI*q6Dh?`0M!V-50{ zP)z%vR@$f11Im0)ih*ZE=s<5H+U~+yccTx#s8gyB%=J&F7xbOS6!aGUMwT;D5YVQ7 z3fcyeuDy&gfdX%1jT;43@ftLLJ<{I8y|6LrUtpEZ%-i?nV|%rDb~&y+uu*?0?Vrar z4*y*(o-~QgGrD$Cwz%j#)|4l1YwTbJz10I+KrNsJbXscxEmH(7AfS?=1vKB)0&3*f zDOp3G-itQ*sE0@OM7a|wsg4@}S-#<_6+=g{k&b%=19T81M13^ei`W3tS-pMS&4+mS ztWR$GxP_7~iU+8Ig&GE5`6l*yzd6{?llJLjzs)nKSbMp`UyWCUMwZ@OdCTNUs zNM5A-A+lEK8}RUwf8zJc|1I=^zOBGo83c(WP3_0;ga}#(FZa~J@G_9?T~Q)Px!v^O z2A8erpR~RpK7CT=dZ_vuEPt&%0zvyCPYu04SZ%$G$=t#Vg{`s$OV5FO{toC0weeJ! z6@ufxti2sAtcdierznnj+su&H^~Zi{Al zWsrdRAmDgGi*B4QG$7Pn;FA?5t?*UE_76c=gL){PU=L8wfPbR|%9-<^mKj2P7=#YZ zWxqhrs8c|i1*vBMDZ$2ojyQG(UPG!Zs%MB-ifj`;B&uJCkINsS!yJs@u#Ms1&FO|L zHh8_EHd=hZkh2EgFtUTS$dI`~iws#!U6q=}S~Ax}gfYmnwpqN~5`6xmW%UVj!!W|9 z(r2M-IVf*DDnFuc=rtGj(f(MSA@I1K&>A&=^9$S}Hg_>EWpFTfZEo{$p9ORRpVzV+ zKSUfmiFKoFmgYVed8}m~o}p#__@KvvR#i){^zw2?Z@lz^-0!cheyi(4=m50m`%B-^ z*M?jyE{B*Z>x8VPbk_=DV1Hovp=3RZF$XU(<_O=+1t0G9U_5 zF@XToGlB%*cQVCGe?WAyfMtt^Rxl#nQRoMwzUh(mnvZXe*J6$@W2kyfh_+nyD!h5C z9Lyir_(^L8dJ;B%UoFVp(GP0soLIWJ_w=y7r@1J_z24|op}b4g_1gW0{1?54=tw{R zPg*zJ_y4t2*Kww9tK6S^SbA(Z4?+B|Dkj}OnE%DU$*mynJ$^!lV{GHv{-{7QUdZMp zt)8XMLcGIcLV~D$`Plc9t_8K!Z+(B6`=s#XiXcJFh!ca@QBRedE$(kh$^U{z(C_q^ z|FC}DJ=W*Do@-71&YPOH4}Cz$)j>23TDJ4pnCrzBr3NGT@u)FgI_MF&^B<3Z z^YJ)ex$VLo&-c1V54j3dI)Z->rKiR$h;c@-0>S6QN7{f;#vHZp2aX|#M#lzy~?$@aDT7{MHQxDbv0T? zOlXAv4E$K^$PKU!vxU{?B%3%cDfg81*u|PySq^&WN5S!>~ZBUdh6}&fzpwy=QCk~RFNOk-2YYk`Cy=M$qQ_$on6?tzFa(4L}|9 z|8H#Kx93s9mDc=~UPLy2NE7j{=Z0r6&=b4jgETZmg0+*vc^^&k*-%qnpgSS^e8wps zw^2sl574#nn}>S1ucwzUvOS+h`w(@vQqHg}jr3cMv(zf!G%kPyuXQw^4h3}A;i@=0 z^QlE}JdS4?&WJo(p~X3ATgcg;Psc)d^wi37cH~jhur;xOI)$+f-3W)SW~r-VZOqaj z=T*oqIPsnZv@c?{D4^4kcVJ-}bw=gGtix)SPb1>`56`4xa|)iu_c-9`pYqxzKDy<# z5puTk**kpH&u6dl(Mg}tM)7r@(NS@e@(mxo<~@iaktPT_bD$LJvEhz6+GDTu&@PX0 z#=}QG5bq;@?78Rqkit zw_;s;PX3*~|MvuLyP#8lCnC}J0c*vx4$5IW*@5!vNyaveR*#MBud&x2;6;rG>l)84 zw*l$8+V_@w4D=8id1HVu?D6V;Vh3LgJ-_aja};X#76a->%vg)-5b`-Z#M$IASbDQxY5pAlR{y=c~#;2TzZjqP4WPwR@8&y@Sq z+uyOB9k`aY_S(a|)Kh;4T3~Cva3}n@@Ax$1Yl+r|9iyBjRjFMdys8QfFsza))H3AE ztwJY5PTwkY({wsir4E*HtqS$DhT_*Ru$`NgXoEch*L=%yAU-xcs*c0#CT8J0r(?hj z^o=JbRstpY-|#};q}ouK+NFjv{$pwy?;cGj=2xaRS!3Fx)HMsqQ5Y^c{VLO@d~Bi6 zo^YT>*5^Ls*rRm(ext>swB$kKOhsDv;7BjDiXXOnRG|)!*xjnoh)3)hm1)i+c279) zJYsjMOotzdU#dhm9*INMtYgLa!b&u(qCK(_O|NLThIU#-yRZ@+swjJ^(D{ni?5e!E zvT>*~pRa5cKFX~ht$45s&wKQtV^#R%qZLnA;gMCW8C7^~73)G3zFEa;U6uP+wdPml zF;(^7ZmDXWtjY(ge%$^41^@l!fVCqEx@>GHdPzq3QiO(w95kVhSr&|EriGo>QTUEp zqoOp~i5!T~w1~A|_uFyG^%1*SlnzI%IZ^HwwRS~$Y*ZgFjv6>V9yM-68Jggw+lJl) zjTa4+CSKNig&voGr#e$ zX035q9+u5r5w4;9oYEZ9Vs=VA5T@7b$zk2tZQ+VLb|^oFb=>xIUE2P&UaZczdZwlM zi$2F*b{0c$$ZHpSVO@Z8Z1Eb$pcPsE9Cv;1$LSYhO?pB8k$zMI>|QroFSjOr+}|J$ zd>rdoJ^9a%j@>`*?>_76BYix?S4%pk=iYnN;G@731haL0D!YEzy z3Dj!ZDH$50eo7W3X|j?&G2QztPSQ1HjM083G7cUoet}fZ0>89R(jFAf(M%0U6Lbh6 zP@aI{sC16ejDQ?W(29VpPte(bs-K}t0qoN&Ajg`ZEpRo7p^7eWA-X7dbX|jTHLmqo zm*W>{hlpl|tdCPKLpNW?8v>NeV)Q=a@Y7XCfp0Tpj-4R&~rqn0|n&5^?n@6#qHlOnPt&9frf zy>>%P_Qtq*JUlbS6XV%MDLxR7%u8|0gepq#kc3Q3@VtbqO7QlC+Lhs332Bw&-pRyz^aQ>rd>sp$NGUomaFV5({U6H8gKOV7azUzV^;vQi{5+{X!h`AfYiu94+5^%y1vDOyw)nM;c0d7 z@g$#xde(Md7O!6{=VGDfdM@uA$~=GxK`8#o0Hq;*DBD837GT5!EP%S4&|Ui;9$Dm8 z)!;oc3(ylkq&X2~?nhY(_(PAZP}IsRXA~+jxJR?#wHPebf{s z86S%4|Ah-yk$H;8D4D6?VyuoUm>a6rT6J5E^z#zGTJ2|a?z#l{tiLP`#kGH)9P}RE z0-uzlBG-RXhvn5VGykY=>O9mcaaEiz=zfhgM@!Q_Sh~o&_qbG_K{@is_*F-Oyxl{@jXV9hi5BD@jQwtZ4p=nw=f=RaLut1q^yjX){khHX zQ}PR%g)96hz3lgEOOWHbKi4RrzYYDl<=W8WCwSDNjyg0|6xxP6Mc`J|B&ar{wHTC{ zCQS%pec2S$J;7ZXPXQyU(IJ{=2rQMC8qZ*<2}x0i7lvdVYH%T~@vy^Ehb+EsN%Jsw z4XgfPo*K@!vw2+@r@9!9w6uAWZ7#C;plzZxcUJp%OmfTv4$pJ2pj>pUaS`qoiHwZ! zLS!V^r6ZBTC|{3Yst$`Wqena(xtB*a!d=FL zDT=uWiRO!5Ymhq&59-deHBRwxrS`!+LRqIZ(hF_eLcg`s&!hbn@$yE0uIz!BpgKPl zRj9L8SE#Zgp+~&XN|%+^vm8b;dPlb!KW380!noMxQFwWG`DELTg|RQD`UA3(7Y7meb=Ro!~QSU8FL5~>OwbFpr4;<=#W*wf1`pmXizw&jb* z_q=|cr+nORyXSk~<|m^N{Xx$YH}@5-ZvD=;Py%Iz9!_^%xo_eLBgMj9z393ZyXjWh zlhNZL=WT-f@~8IOaGtoTNtqw$_z&2U0_{8XFiI&u&=oc;#XYo1V{Y9;ulUn@FMO81 zj{EG(*2NF^6j68n*t#zO7K{C;#BHdD0K$s47hC>5wahn0)}xF0M)!B(PqJR?l~7Yh~yJ9OUZI9novU@Jb5*PGU7A!?Eqs&a zRW)wDLCvb^d(o+yG39mIQq8&g8eOcWI=)6N9$L9)=fK-^^$Dx%+jQ=m>H@yy zDXaJmTJeui0CrdL<{UZ*+L-$SnU zw6WziI{0+B*?V;TY1Ij*uVEdnOH*s8^Ka6s8qTCQ>0(W5$=kH}S?k2BwCh{u4SFL@o^4V9d-EVW( z*Q}v$@yyq(Rj=_a_qg-x*3j2^!0T9A4!@ph@;+~STQSZ&`SE*IN%SdY^l}ZH;`JC%Zj*IM>2 zZ+O=_^e&%ySAVi;U8`GN9#GesRF~(}wbs_F$zHK zIUWP0qow8a&TfAeZq^gn>gfUM^ZN)WJ@#-9S{BAM4^Juo*?ZNP?y;`p_ti7zgE@hv zK>t3hp;e7P&^LjT*T<1iRmy+p_VMG^@2Cb^C;Ihr$MM&l?My#^AA^%^*koF*QzXfR6nZ1!biP zH@Clo?6G0MNq3zgdqR*)l@%c>F=_(i8UTV4JY&8s^bqnGwF@c6ltE zEw;I_jS~*BBeUGt?~={1ZCm1SKSxIzjtKL?e@; zJW>lSZjD;U%Ob$re^)< zAq zVlXT(_za*5ZbRVi&!BJk=KUy8{RcjQF!ydc7tVpK4Kc2+0xsj&_S#y=|MK^+mN*M* z(_rN+he5jEnO~c_1&m4GgIB6E59aHJv!o972w9u!02mEC3qa+u@wI8CWeoTpZ45hO zYtvHOX#YJL5mEb}qs0*il%V}^Cw-P~MpU<&)F|p4s6k_5Mz`8DFYb)44Mzv#*7LM1 z>5QyRTT;&O+H@%G46RMuGRDd0X;#)LsYNTZH4v2NSv_h|_q@qoAc-ni@QB}VpEK=w zT6MqE`+3^>fU)a&n*3m-buHTZpjBLpEl1Pl{$&Q%h^ohH6%y znzXmtZ!u#Yv!*{s?Z0Mie1=+l!&vbQo%)8lRD&8lZmp<6(;s*0KS$dicZNPoMNg^& z&r(`-XPus_8Q_rXECbeno)AsQf zXu;F=M)=b|ZBKuJ4n1wdrT+5McJmjg*)#Uy?@_mB>^0BR@Mr9?&(n-&>}Jo?j%Tb> z&v0>#pAN6Z2Wx)yLM7e8y^m5t9@c;)!BPTyMG^f?Ew&wfrotlIFL(Wn+5 ze$HrCizn2wwm#2mYFVdi@lN-+)$`WqI=uXQ6=&7q)-UMe0WVmSUf|g;SZiM3tuI&; z>hS3otOm8YMQv+p9qv;5H5eS#mTR@SaUK0;mpV3H-d@M*_#&UFWA%EGZ`856zQ`?J z#2Qt)zm=cM<&VFx^&NBezFFTN}=D++4{pfo- z8~LF5q23G1w8`Kv{;CB_m0^s`54Kyn^U>b(8^Zr|kERquKGQV@9m+sTVZ}q+{A0ao zb>C8V_r|kCAurqRq)E7H_n)aZQbtPQznNKkD}(6pe8LY-Z2LI!yx& znU8L$fg3P1%&B&88G4LEw`SahheRGkJ8vQYT_`$r9Y2Mq$Bu28Gq>IIR!M>NqUi@vPd~ z1`4$OZ3mY(*_M?_I%gZ5V${wtAO<|kG1f+Di(_nxQenhc5v8_~=U_1u`8_^A9cn%AVIPXS*}OXCc8&O}CLcx6VmW%x`+Ze)0C);yNw!aQ?U9*@pb zIRDl>>v$d)=9|Ovc_IG4fRE)XoZ)vaq1jl4}XCL;; zbz9?(uY@&16*c-5zHg%xtfZxl$XVt(G)2ixl+~47wE>KfOJVBkmtzi$Fy)9t#eOMv zXtQ5V*mTh^BW>yoTX&mQ1{9d(MIwhxnlEalMMp&yg>|j{Jd7xUYI~UGV9N{Bil9sl z)Bd39W`PnTOHFEIU{#)D$OQOl8>+WOZ9~!`jNJ~|$g+?o=Nt~nf7o`J$=LhPkOFoh+Vh>DP~1weiZbu!5KN>M(-k?zRlExxYOY+s-;CvMQCx8Ph2iaBrpi=5Yg~Vn zrsg@P0NTi#j?*-}&zf18+TI5UFYUeGm{OT8e?>z&Hau)xuS~lh)|b$+qFw(n>R-`8 ztXR>WRE-u@w0l&eZ58d4Rq0ekdu3H>Sjiq#l{#0l+f=3DmFx>uXhtO)D2^4C?4ea? zXC=Eu6*^VPUi&EBs$@@ml-gCc2R};vD%)Kjr8$+YwUv3wqlvTCc*CQK6VUX?Fbv6@%q_En9(Re5Mt{rZ}!)vi_J-qozJ)p%+(3&#tqp@rS!F>B#tJoYhb z*<(EGv0Ux`o_zsmsE_ARTOY#T&;>8Lo4Wk7(rd$vZkN{vyP(kb&G|l_krNdFFJ4~@U0a736Q41^#2{p$8^hzy7l?LAt#^MSQ zh<#v(quJ(DTOxqu3H$)I_+-4LaqEpt>Y{?}Egc7A24ht?6oM~6aE(dz{lVoXwetrT zfqduJ^LxBsf9*lP^hA5ykEMGQTvx$-4ro&QwSaED4Hh*pL`y^_n{-B`uSw0^r2&lQ zz6Ko*YRX(wLmf7#m4OP{1|zu7;G&S~6XGkOU@K7J%-|^SzD<36%q*C0aUV;+vIb63 z79X-wo5I{YtU89dPgo5L^T6Lnpg>0&GrUL^*oeEY;WC45PYhCyx-G{DjB9W;gqd3?}V5agM`Tt@^kKnTKhEdjCTUy_b7 zwAUP9ZMsRe1$ZWP3n6r2P@M$iDtHLTXH27^#aGR{&LL^3PWRuADJ(+E?@0wh!FT=% zXLREXix91ROCcAie&;pJ$p_O}(5Yvlz30`9S6Ch{^?=+DD7~D~AoScf=}5R`_;{A@Wf|nqzsq5_K2r=lGvKSx zJz}*rqJgUeBN}tPB!kL~ngH8SWLyxS@<{y@GA@+%hoLC}V?D2|P62w2u25s2{#<{b zuI!KSY5ev~pMruDVA$hh@a$Eq6LiHV5E|*G^e0CsH7=n`HO(Tl1F0E+%Sw$&K)p_N z1IF5~nkQgfs^+BWx<7``cMYiXaatIV#YvQEF!vjx6`{4J)UG&97JbSEq87x_C07uL z+ArETu2oQWIn*nt_QW(=@^X~c1f_e7_6F6m7%WDmKe_^joQlv&Ljg%%VyJmA9YmuX zQ1Fl%8=(PcTR5~JBuyMTi&jOPZiMuA^)rEwrnRPmuGKYD%WE~Va8Xk&4FyF`Kpbw3QdSail8hQk%cMV z5s{-2J`g#H*Vo3>_81?Ig$E|NLp(J)$&=!0jxODVhb4J$Tu#OLYFsr=aI1t&%W&U> z8lK>ZiO8}9FHGoKOF}hIa#2$CNpkn(k3ddITG#MG%37A<87YPDE5&15)6={$4dw)2 zODmkKaV8HWh&~ydWoyPfmMLvLV7>e@;+6xI=pwc8m)?qn)3|Y6U@b$kZUvtU#BfMSg33kRhCN%Fjpr81sPtL$7col=K2T zAA)fK-V~5M0qB;fYXLr|x6L9kHwyQYmw}QMYe|q%H^fQC1iy*uZqV#%@L7%izf)?{ zxv}$gaGJl3D$Dof*YvmF(0dRtG%589Kv(}r&pwB3@uT>&E|wOx=jvGG|EM-7I28sb zx_U>bJ%e{S(~DZkk3YKhY~8Ls7wg)ywOa9bjio)PtXYs_@mIvllkUROmXC2ia9kD# zf1cPE=gi2{^nl*i^?5!EPP|7e1#oaJ>6(Y0YLA5Osa}hh^;Bo)>7FW<6ZBN~xINWL zd1XD-jS1aT-JM_7Q*EBqJ=L~(Wj)pL1!X-|G%C?kMFSQ+)q`kJDp{S?J=Lu#-BVqe z)jd_n%$4?37i4u$6$DE3RHr3$PZdo_^i;2BbWau5%jl_|$$@V~SWqdJ|S zBO(hkC@Wzkbqva&3@r%C7+j$qGgnYrN>gh?X28qYkS-~}KV?Un_8BrZLFWybigzKA zm!$FFjihLPNJge0n51r0A;Kd~Iq9?!qint<6J}rA8#FwVPi|2c7}~WJ?sSR=oxvj>!5bU5v=pD7A=c227u*oJDgu zsz2W{rmzf-h^a}s`KmU?_;gH_#CUjIO^ox>xLP0Q6LEDZ&P@~2DZyKGpZ8MP-c|19z=4N-0v%GgOE%MCa`P?BtfsLsEl8TNOG zJoUZ6T+{_Z!V?*&)ncq`9=_mF8#L|S+UjM@Zyc}4q2lkZMgFyC`seSN{&(d{d`@0N zS#RW{IY?i~K3Vo1R&Qq1(ZCs$D*UD~(q>98{ANR1%aSX=rN zFH1+3WqEg6oyzA%8EKc{{+Y;BpwlvPD8tt?(mcy0Srb9gpgePD9$Ey5j8KckiwKsr!OZ*)a#nuNA^Rv^QBMbfBg@uh5rSxYVoY`pY&6s zv$kPU?X|2j()2r{K(AS4`j?-$PuydV!FkH|xgLLw-~RmZ+n+J+*ZNR^Ke=_058(*D zI1F4aw)vbfAjW1c&eMCY_MxwAK&9$u#z+Jms0o$2#w5#T#+{nSpNzfJT1O8PJ#0Zo zaW>wpO9^6lHEkC!AT{U6@>D6R5 zF0*F5U1XHozN>Sq1hkalT~d0v)-HTLoK@=X@E#zP=+{MLqIT01t-s{r|{g9n^3{Ka@6d^F#!-1h-9GM*y~U9{O2 z=5nInw|XpKp2J_0Rss4JAb7u%VFAd)sUuqZQrGu(u{Mmj&T3geYj~daL-PTj+XCSS zzgEBOi4ve!rnyc~u#FhyQ>WlE;Ztayfv$f%0ErO5^A9Q+=BL)+W(727f2~$lP`iY0 z_*K&YcL~VA08b65xd!hDs6zoBB-Vc64Jb_uqYQ|aSl^)F-GxE(XpjpHbD_b*4gL8s zMj7zVV&vF)9@CK)x8y_mvI>j3;Pk6?p_5 zyGzi&^wJWq?A5~V6|Q;teD0}hJm9^~@#!=LclcOKwPAz}1aS|gG&T;vsE3XDs3U0_ z1-voVWl-QV_C>Ws1ENNFV@$|EbRLlr;G?Ma!xdvy9$Yc-=@~wm6$5%yhC%qpR};ls zCFh_(hkS{aD9t$7s-!TZ`Fc|mbPGJbG`bU-tpKqGRPT=a9|SE5mLXX*B#ePD4hrC` zO++@QsfWmjG))oh$+2CeWt>ik4mKMEWnh9j1a&!1^Cwa?5)Fw2po?-ihNx6^tw2q* zXv0E7`sbr7fuyE=NF6MoO(8WYPDesAEk$QSh+aFIQj|jbP}+fnVQTk{Ri+l1*>B1k zKx|DJlcWKbIuNIE77AhntyGlo8i(aNRO-UdqoWX3eG6!JSgt1MOjyn&V38y%64coi z)Bu;*3eq&UY{C6&99&bch!iJiZsZ*tkBiFeD6fg4 z6v$hmuM>@pN!NUy9hc>C-jzTo%-xca9T{Gp%)-~=Rx+|T!$VRsF$MmFY)J90R0I*{ z`II_cfxD$;aGIy3z4EzD zzQQ+7%C}DD^Y(l>lFzpT(n$s8o&vsDV0Em(gDRL8D)8nC`dfBX0Bxo;PC?+B&dBef z!U}?Ko$7d;ERaub!&qa>K65w52gIR$Y$BIDg{AmIxg=`&VdyVbk$35FbTrzsIY4)q z%VwTllRqloghuC1HlfjZw7lS=#@*dpyZA4tCw^CKcE<~0k@iBk>UtrpbiELkxLyeR zTrY%it`|ZdQ){g>b+uL+x>_rp(G|brh0w{;6B(>m@NK&TvFTMCT`z3Q=tpNO4>V;5Z(_E4E zA+6#x7z|q11))7AZiu>RFNCJr@`u_Q&teK0vdiEThLjk5!8nGMX_qO-O-3@!REC#(!xT=n&S{A4?B3Qr; zgT^Be>GM6%V1VEl^aGlEQHNTCE}|ALgakkL^2u(^qr#rC#wQS-y|YT_=Tn-;d_+yK z?7fe!<>lhYyX#9I>KWYi91si5=4a)vo(`o;HJ-ue;kDd-?>|c0<>UPm?&0^2XO`0s z{-k<1G!Fj1(E4|A0$;E{Q0e^oh&j|_gNIjmYAE3Q>p)l@Rten=?B(iAP^SmW!rF`O zcn}g3GQ`wgbPEklGbn_F7S!^wU3t|Mo7Q^OO$%^&1;zlxO2@+y$17b8Y6H40OnZDX z7JfNCpx?kYcnqO}GP(t67+f|C?W)#01g$R_ZO~O^)DO~NzcdNa6u&eEd%!O{4BF|J z-tg4%%c3Cl4g_ZgA(pRhnlw=KWsVow9@KJz%Y(F6q$m9C1TpIHpiBvJNibVt@+l*7 z0fG+3*AZrgWLAjL?A;sU)1k;|lRKJ5f0GdyE;4z8898P$Z09yu+|NQzeZrCwZOUUU z40HeR<5>2?=6IX0hbxS-xx064Y-;#SM(&7>3RYUzF$gjKmCXF^g{zg?N&6O<%AC!Ao!t;J#bH< zDX47&4dRjO3MzfL!?3=98Zo3k8vAKGQVDoq`ed-8Sw2tzd9N?H4c=ZpX{;EA!Tl89 zc3U~A)Mdrz)GOt#QOA4#&-i+|egSwcub^3s;B}XFzBTu2Z-i9tCt;oaOM7pDoAwv> zg8GYjnFLfFO30H`0F2S!nm^;Zx#S`jgM8E)3GM%Jo*J^>L=ZI1(mn~(Y?OYmlwD;D zFSPThX{IJ(kMSDUg8<4R-2(;dau^gWV|S1? z`Ly#HC|KY^UDF)RiAbaoW@}*;_=lW>`EXmWMRm3eq^61CQXijTozf zK=ug~ZPtsnLftL^pcMt>x&=rdX4JW$x@vMOL%JE<$-ue*qeu&{tPf>xncU7)-Ax_> zLr9YsnAye_1MRXGYno+FwD_Q9U3OQ%31Pg}hgPhW*U=Z=Py4HP%NOC@@(FqocjfGV^;Ibi8}F`dxEvh?d9ReVkb6ZS z0`(61Ppw()XXx{()l5^lo)-Q}kJpZ$7HnP`d$X{4>77#-)cJokuJ}{!nfImvQ&K3e zLj`gi8#u{%Hf}*=#A5>4G4F28*-z<#^7(vMKE^-gvud|v|GTF~Jo2-T)1AjU_@O@T zBCX8_tUR>&5RyQfZ-}~F1w+&dH`#pAHitUgK&$eB0)D~awOW<0Fk;P% z@UTc^W`s9JET}+S1DPPot+XoNw5YYbOqI{&4}D=ezHYB`Ygw-oEQZ?vD|n;wf$}y( zADCyk+6)?{?`RHFUk)D9Aq5JNaB{`ru3V*DV+eA&ChFj~@dki%bzvBhaZg?OyfdTA z@CK;h>th!$rH^~e^zjsMUuJ6V%PE)p0()|BU#7drvsl!INt|$3;Qe8~)nIt0EX(?+tKAp0< zr@3WX;ajJr&1Gpmn6_qRxLZb_rFRC^kn*gTFNgDTU8|@NGN{+pMbVrWxH`6iPO27C z?Fm8)%2ffRWvE|(+_4{oO%KpDi#=*3*qk0|Ed<>2rT{AZG6^=jC|`;8g>5N76zJOt9X~3-Ho_ z6dSx1s&E0`8$bn0DjWkM!tjJYwB7EC_SAFuH6@QIhxY893j1 zG`<^_Kr_6u!prl$vC^~X`p@G?Pri$6ucq86K^^H>kG#=g+lGMN@FA{4|(ljbAISt@3Lfs|$YgHgP@6JTe%A0{{v| zJ-jl|Pw-Cf@1iF9!oR|+t7)Bma!t_^pPW>5z$Yb&uET*Cp0U_cVSSAVxajXYi9P5G{j&-Js zW8LTCSeLlGpb0q~Yj0O;ad!^KI@QIocFf^e$LE*vf@ZilR)7J(3tHjgSXa6@*7+`u zb-9aU9hB2r#GV3PPtz?mI^D&wo^o-l8(bV~uOv+p*_x$U5K{qo zK<&wg9+d{Ob}`g~1PwD}QW~ni2oE+GST(5=@TzH?BQg_lz)tk{~{b1o#i5(MVY zloX9ORSDYl;4G$Sn<-#N-7@7c;H{t?r>LJL4e%LDb|q=Cr9lBD7I-&WY7zISU0Cq9 zj+BTYCb}`i z%3KTq1Iw})qKg|t6uB`(M>mFO|5;*)7XGh{@$)EuuKDL;41X1G%sP~T2Xoupu-7?Y z0kuJ6qs?R1*ss&5$D)J3P94AM6n~ute044|3>^z$K0Flu2l~cKIxhMNzxa}IMbYc2 zZA!yKIw)XCZ4kt7aCR0#7!RCp5JMYX6s#Z6Wo)2qGy}UUW1ydhDQl|Yo$8x7?&!Y@ z>#Jk1KR}};2!eZ|4r<-+%_m@P@y|YluA&D95mf9malFchz})RKJY@U}J@)EHN!#On z;DBIL2SpRV)c~8WA&58z87K^&HJn>fY7pA*19{5M9Erl>Z2->R7j#N|B#Pi_d{l5a zFZwY4@_5v`8ih`z)i=gtW5$LUPmfuvW4t(4R@~Ru+v5a-H$@0Q-?Ca|X$nxG88Gqx zfa7UiwJd|i==X8FTB%8Z4*DlE{$st^B^lrz&C3}`Fm&Pl8H6foN(O*N4bYrq>NB;q z6vU_xTd(5yOjun=!->Geaj`8&(sbU|pIPr%TL7<&*nKiIGp1kZ7FQF}v?BgZyxufX zaZ{QWCJfMkRww=e*-KK5PSfG!ukgVmsRs|@g3@-&4E0Lem(sL74Hzkxq@_uQ+hmOH zn)dP%Ug?-Mhh(`=wk-I()#JK{FGH&kn$iD9wQ*}ykO@VNYOhZr z)yu6>b#-f0<8n2sF>Z~jm0P2NB^YW{7u_1wBv?V*!Lx02YgF?>)E;^mF|6W;L-YaZ3!VL;EJMz!0mQC)FsR1lmg z^$r7KZddT133yYPY|}<9T-Yn53LWYnLfm->8W{t}F z)<$_+G_oSf2cy>T7`Kc?2F18%3~|@em<7>`+ev~u5AL~+0xOdRt{Hmq5QB#Z{M}CJ zdVZJTZg8BdKVI>6AhV-i`JyKBZjQT!eB`I2z3a_B?rEf z_}r|Ji~yuLB;y>q9+F#-MKJ}K-`+?WqBO=7c)Tt!wR+1rQ$gRi#1!0@c9sDoWijlm z9ol5c_6X94cW`_%jJ_~8vtg3Q?QDeh`)!$;dVA z_Awq1ld&j4(i`i zR%iMoEH~;Mw)~N53G(0nhT8P^hN<(%|rhi z8SJ57s-qrk1!}BjI0^dj7x-7079Q2y#}_@;2rmO!jpK!03v8zgsI_X&Q@NnY9mi$Q z-K{SkE7k7#QhhMX*8@vAbl|tR+S{LiK`uW|!EwKbzvUOi#k<$_l)d*EvDAp;zZ^Y* zyT|uOVS_*3_wjSr4NOaZL*E9aq^4dYKPSdH9#U`9LsEyTBH4If{WJfp{N4auAJrwQ z+muK7^ki%1qwZc4$Ai7tPS<-M#NlPH-NQ${eKOR?V|_-kkEfRtl)ifn-=pg)1hX#u zLlcOa@KcC2AkK)m%j0yi>6k|~)X-ZQY|~b+1)tvIUK7V{d?tFp3w;jIUmcY?X3;t& zc;&bfM9kg&vL3)Ozk^p+1fuoB)Il78cZW!*f0(w49I=3+)yLg~4nEn|i1xJ*=sM8q zKWK!CUB!OrId%!@i!hyZn8d>EX$Gy+Wh|I${O*5gx(u8m~RQ0@!D2Y6U>$u(ALUoSIlbtNgzuC_|0r z`uD-vP4%ikeS>H5c~HL^RG`iwEP8ara`0|(SZyhw#o@MicayDd70`AYDKG7ILOTm+ zazxE6fTogxPmYVK=>>Eus{iU{^c$Lr^*Rol#nE~`h=v*{Wl5{ceKaKH^r=8sQ-b5Z zX<1u=E`ar)Pu;V%@bO()WX-MezK+8sd9pE|*5u_89nTZIa3#-fRDqi3XK@S_fO7>j zA>YPTEXcPD3ut{l`aI1FtnLN8r@$J1A2+FBb*;d&Dp)Hj@P-Q3{tCRe!ha&H6TtMv+PF7Ogy`oitASR9P=n$~cy*igq^-s! zX@_IM_o+3k+>n7l?IA|pbofjCVj+BfN$kNE32GeAj!g2-c<5xDkHkSzYn>3hP?V?# zoMyrtlH@K){X(B4#_7VOc{#~zlewnbtsbqIF?_UpLMv9l$hU`Yp0=q}jSTAV`6DF0 zU|V89Enb}kqEk5_L5=e}V+@^*;CN_2L+2X@Wh>g1TBU4i(8kA?2JLNtvj>e6L2hPP z(?VQiAo5&d7#j?}XqXVgZxF&24G9@|Z(Jz%)b(@yq_uUbmnV23ZR*OKwuHF?gZxa5 zz3O-+sQn$s@dcmSScyt}@bIEZerrZ$xPD-UO$>yZSA>qgnp27Di+&R#wbLr&a`EO2 zBXsl;*i@-mm8fZG58ga%s;w2_8=+_J2KaGQq^;peUKEj{q0^OUebl*Hk>J6(t0(Z%TxESA@&1GoT_Br|n%8>3Ujqt4Iwp?_!!}WN0P2ma#fkqGs8BnAXSg zt>*BG$VWSRZh@3MLZ=I4-@|mdAcW(F6?E&P$9>kxN;LF7eB|tXviT9}d%x^?n1

~)C0hBgeZ3-0dqnzH=53G2 z)JlBfkxCaUa&biquk5X8oTCid&Yw9>Ed|0GEP-?KvW zTDK+`ZDrFKLjf8z(P)ELAl5QoFV(|vp7T}~@3sw_fFAS+V}8L7tcT6rY?KN&+vKH6Hy#|iw`s@}a^;i1!&i?2?i+1=U z{Vgby+ED*J8&Jzkx+MmVCkNG;5Sw#5qpj4LO)zczM`=dQg#{UgYC z*GAOMId?xsM5ouGqKE8Bb!g!KCJY!*K|!T4M-~-u6GqIuUmd&EdH?U- z`+wiP@A`dMt5(&nUAs=jRcrlLtX}>B?TZx;JHyYkqVL3t^!I37oP5@mPQ^LOy3*8I z9m~7W$y%uQ=y?A8eHtG>7~+k1zP}4Si&xdotYcPprHOSN)4I^{x<*@-Hpz@8-&_Fem551GpBPb zzTrscmRTRMtz9DSb!WG_oUkCWiV7%lwE<`3OH&%}1fgxUjoc(4DRC9)c{Vx@#5P z*^BPlq>tICk88i4GoT+(OAYl;05bC}K58c8ISN4W^(cUUMK1;nicGXkCIGJ!p-rZ4 z%2&XOA(2*DRF61{WeomyywuzS?_0MMX#!W{evg%BCDKJL&VO>g(6$|Rp!#J5ymoCnl|vdm3nvRx!FU&IBK`wvr~rD7Ae#8 zR|5waDhdyr7NZ7>882u9oDbCwyDj`)YdYj@rgoyExY6ney&XlT_{dQm>9CJK=#@f_ zfU91c;umUxr`pjT4QuB%-EprY?Xt^f?Ex;U=uy6MdpnwJGyz>{I%c+|%I_1p{7#Xz>cBCwq;@7y$3GL`^kj!XD+rwp6M>-KGtIUAdthJ$K8wZRtpiV}4tj5U1*Ju$F6edpO&2O>0jJYa3JA z(~a7WJ?*Hnjti+Zb)pp`>@>s$0|2cjAg$)4_K>!9J?BYjbP1v$Z(dnmuhTvOBTi zZE(?ezl|KxmJMx-UYFEP8_|j7wbO2OWCz=cF&){}c5+gCR?|*`v%b9qXJ`Aba8KAl z?&`o+cTnsF9p#T5*}0C2uI?yNz=Tf9Pw~u7zOTA6#%dO0fCf_Y?j**mu~CBQCH5p1 zo+AOhqZA4kddWo+jwpBr{`ZzRn3r<{S6p+f#y+4uSmhE)6;?GK#tLH+_He+(rc|4} zgN+$n@!4seCXfYJRqG@UQ)&<=*#%N3+ueEa4Q6+zNF34|j`d}0Bn}HxE)GX}+X77F*%&CdB~W#s#A3E0 zNMtccu`bPtk!Mh+7`+0EM2xtB zMZ!Z@$B1=xX;Yku`~|h-h`My6mK<7_9@oe7OEQCWwU#w&V%yx5E7r#8P;hfdTM zORy}}R#kXd+r2b_=G2LrlR(?+xKk5odEJqg$BArp0tUnA#6XZ3zxNYaL1GIWw-N=& zyNOL+bz1!9VFbNP{Arb5u+TULdZd@Sv6$e6rTXVH@=x-CwL0Vj&|EymK0c@`X;rok zL=7GECNE6fYrG|HS0`}!M5nu49|!A5t9%CMaaIZXppU!+BXH3IE5RJiZ?#U#l?v=B z51FnTGqKp{u#`Nlx7lWAbL=9=&Q{np(Cgpugre$n-@+gd|LNSG=f-Hm-3?u~$h|Q% z%bQPf!~9aw%Q&AFjf1b;76-S@@@WhpF%><-CU?g`Mj=37vdPJ@v_zAqVqlaY&&SX; zUF9jV%bhV8N-{SFFqU#z3;-<6Zx;R2CiKV>}P;wm|sb0P~(!I+~2P55&qUk}T zaVDBlquev1)yepI9J?5;-HB$;qs5~*mg0U7J88E#)B-Z{QmK}_R zNHrtQzA29FjFalgI6Jc3igW(lVg7UZ#CPmV`iAJ6U#t>zig74sr&}@^A|t)ELP6`i zQ(2aByu+XPK=B_N>C;yJ$cNH=?8pOD(@G!O?&F>(C|ihSf~^(yQo%~Z>uCzVKkh22 z8C%(lQ(f&)FRjQs)&xJ6rMVFi|d%8UCw+*n`^GEOfuxffpEb2KIjn+Id%w? zPs|O2X}mLN%m7;GRD*4)%XM!cT@R4C1E@TZgPtA~IbtA<2~J{&oDXrG>P>6mExSLR z50gk(5Uw7W5aFusMb{%_UOyZ@6{j#tj_yk{qZOU)cI@s?Rc^nM{+Ny;m-M5tvGQOa z`Y}#|z8xo*_NH64TtinlF0NhD06otwcGzHyx;N-tA52>+2|IMg#e*7fo-d z-ZHb1V}Bp2XymuM4=s8ta$+Bx7!|*uNyw&Nbi9c?*^|aLm4|!Lm8Ry4Ui7f3jyyw~ z$;bU@YBRBaAT4edj)t4s+{_+8b6XU!GXp89WyqufbhD+LKY;GGlDh`bu6M4ggcWU^ z>HVmrjRc+AR$l8**V~5N89+zc$%1|~uDt-A(_S3tM=RRTz?!wEqs;G5dpo(R`r@SM zcfBtie>Y@&Uz`Z#{=Rg(i@<9pcQujcdRLLvhsM3}icI#8ItS3GE6vzMU&qQud%KL)PA3_CRoIqmg*RHBT zl=U@~L1^AL=DvP3>X*E#4-NlTfX?~WzGyJ5{1!uc*SGeHfppTtxc;qu=Rg|zUEG3! zwB$QQZ}`q$K7bB=7ne4GhW3a{?oW9=;;!|hvpwQA_obAc_Tjx~T2HxqAj|FvDb3EF z61rFyd){Z@TQ~RsJ zR`uV*kZ0&XY(p0fRH+XKs**DX+4m1(TL!7ZN(X%hFp$CW)?ijPSY8{=%cyq9Jv#(hZR{Ls<2YH>LuN=l=*ZWuk?_)1p%}RSc!l) z_Ev^VS)2pvIGf`bj;-6O0J_inU_rFX#er~$Wjp{FvM>ONyh%tHK_%N1|AtNO12D1% zA2hU57vSH--9`{J)A!*WTcj~EkoHU5s&4d^hhg7jaH!U=F&vP6FEZs-D5;x#G1SHV z1n7AV1$vk3!0zshgXaa(1Ah*;AM2cAJb;^>ItnOrx~~M#V|Cea%$4vgkgW~ScLlKG z00`f%L5Vz&-3j;%BJn_bbs(z$~kV=LB?jXwN(2<;ONFyMq}O9;)gJx2G; zw2MU{w8k#7L#Wzrf}SD8Bq+Mc&q1dcj?=-k&v2X!#?_LZ971WP!ZOS>6}`|@N8v4g zjvXOzr13HOw?o_yru_~9ZMrgt4tk`&b|9Fh_=|nP*b<6)!MN{{(9t{Za;y)goB+q# zU|JubZw{s_0U`?khaNg5ki*7dOkg0yTY+LyFs%#J@Mv)$ew2csHu!|QLH3cMloV{B ztn}bqwl#!p3W4N&d8jN2WgA0Z_cW{P-VcT!R;5j}*=pRC^vKF*`_d^N6N26Y!YK2FQJZnpmv-7D#Jw{#e;9k_ zY4gz@2Xy5T_(!`E18=j7BHRnw-6$trx(j{bmB~0I>8#XlN*n|<*jSGB6+mKJ?JKq$ zY_l(RT#s--HGlzu>7>xmKyG?dNc^Q}IS#=wjBe}%Uk@yFqL%zA^!g+mna~-@&j!LrlnXjtiwt?r zpKcgoit&hXR0x$Gw}B5wFaVs>+ANBv>Y$q&G|(4hb&uQ}YSoK)yP z%#s((j=Jn)0$}~7r3A1w0rEs3D+!puknkYTzBq^tRdOYGcPaqj=T=`2MG6K+*4e(9?xE zyaBub4HF|8!HEuE1fijyALt|~$~B}>j&?N-Xs1Izf`=XQPy@Q}kn0;zmQ!A2wg|;pA1TM8iji_hecBzxC)cN)(E@amn?Fya zr*46q2V!)*r6NXDBv5LsT!uHs^5qTbZmc>!KZp~XA-jy15JJ|` zaUOnFM@&h;R!h+n>dJMfXWgdx4e4@S)rc?Z#+|^|)r;FzpAOc0>&N<(l3--PF?@nt znSj$?-D`=gEKw|J#8%bUCNyMw>j#xKU^nW^7xmfW`j7{1YS10*aSd@GENN&T+K3%g z^1Hu)R)G>ij%SQH^kK*-L^ONQD4z0_y3412OXtX z`8>LE4Jkm>rwFWEO3&g|8n6fIthAT~9+mndR!B$9LskqRb*(nnYHYF6HY>Cb*&b{7 z&mZg2pZB-5p)g$IcC~-YK6_(6_mthAf`0FL4^TES9A^8gyXuAhl_(Sc@P6mV8YJuA zpn>Nwqm*IPV}-8C{2luh%mI`+O3*mm3M=)?(-xz|2Ble^4%cqpOEDZVuXe`J0{#tzxusB`85 zFE$g(hj{Zc=wP_1kSSTsGOwUp(X_)$$!d~#P(?IN<6R)z;C_4Ea10+XE{001j!V&M zMlX)Wn;gsCSa%#F+>k#xlHHW9IUYnqcjV9D@6+XkXqsSuXHqncl{`BdGrBB~rb=ld z&stvx_-hTvjwo2fIZC2vl4)LuqCKXZA4SJK^nFtnM$u3|b!{=zAr3~;0tbEoKd?R36|M8AVG19VtE7ffjpu9Fe$T7(;n)X0`EB3Vf! z?w4*v%Ih&KH!96CDux|&o0r_|g1Zy;=`r>zF>HT~NdRR2|@-1Ch{+Wn1iJ3Y-g#2K~aNUTlUJ2Yb%{N2l;-EFp|f zKRtoMVpUt7W=e*&3azk;1;TA@scNy!7Gt!j?z6Z1QY8;u=SxGa9}(@h`oWyxyw!n3 zd=V7iagn{)fRcof=S!n)a)~e0Bm9rzvfK70)G#$s1sSV`Um1SqDkaU;`FaT}4h>3G zcXf$;H9EFdlxOD?Ogdl}Q06*r#}7JOhTs)*r2RG$rTv00Mhe_)0*DKZKE_w8FoC^g zpKq|0h8@l@VXlJ2Y}0&V^|?h1_ofstGz#36LK}INR|s+(^0MFeqO)Gm2bk#{ywRJjd_!AJwI2YVA;15r z7hSZy>P6K+ceIGRHo9st4%n3Q(`PmSKwwTh4~d%%n-ax-%=rWxCNfy-9Kj~h2I&sI zaHx-1j0wx9H*%DV5EM1kX1@yCdmA>N+il{Q#tz%W85 zn86|*vjYpdWrt3gy1QK96?hd!DC%<_dujMFQoZd5A#C@yL*#za+rV{IA?FM1xV|yK z8SmqOZoz&W(_r)A11$U*LTrUvgTR!#M~IDf1s?%XWwNFr$4X5cleAF@DPbqDN>Y`E z*>{E>f;X(v?a-ks*6q-tJEY4I5{4pi)pkm?<5U7%h}FLE-~91jwdKZkon`rI;N<$g z@ky$$da*Ju`W4Zy%o}fEgUI*2MQgmwi_K`Ux18LRZh0%Zh|9%|Da)$pX+CmvQ}j|r z7YjMRF}xxEc11JTE?^1Yt@i_2V-LL61ij4M*Mv?$xUdd zIh`Rg&RRYtP zZ3q3MTd!$E8)D28O({Rtk>8Xa#`-R8N_lbS*2Xlx7N7AJjffYZXV(@d8_|o}kJ-US zbfTUks}apjFlINRNf_xs=j>w z7FE>O@*2~k2JV`sw68(@;wCh-p?g3qDmVJ(CJOI`Ayh{Ch|-(cD<>5(v;0>_BQA%&17nGcCVR+JkOiG8mwwx^4bR( z`~|r9R7Q2RKhh@x8^Lcda%VHXgt7UrcSoMRNT}AIT8e+rZ^d8OzhjAic|`H-b8P6X zepn@IGCjIPG3{8t!w|@nx1p&(LWRZgPS8>aEYxsn}Zsf*|lNHt5)Qug9{t zQ)tU{1t*wl$Kf0sl>;_ok4CAQAAk<$YI2pv_G#J~jU89!P`FbaVP{8mS)sGLx&t(> zZ1&k%fj#q3hWkMP3S2#ltn`nNYeN zWC#5`=o2{SIvrfd5SbZj6opY8^N|lywO-Sndu5xKX#`j z4=6a^vI-V!d?!QXi4T8dVwRMkf3)!m_+rMrHq4MTJ2<;>uWc%gD1g1ENb$^%#>qt7 zwn`0&x1^TlM=O2BKG<&gcEk?P0B|D&N$SZeL!85L)ociQrJrM$A1n8h)qV^nXmDCE z&+)o)FZZnJ=taE0GN}pVZTwhjd={JF|R*YjVbeIUE3-KU0cX}YBGV7 zPFS7ZHfp@7M=%T)CNr(fn|1*%*&EhNa<#Wo6iw!8R|U=lZzIbam!MjKH{0W_!LjgB z?@%azK(CJjQQm%pv(50E%h`^9#+ApO?cY2`vGTqK-8+6xgU(KanL4zk`EHGBymZi6 z-r8Ob=5YM1jZRp#gEpGwV~o*hq|JB;>}Ffg7>x>GUTRZ%x0i5AuxWQ~?1}B&WjYp9 z41mX)mZGz9dI%Vc-c&gC-0!6@d=|vPj33hBI!4_~-LmkdfG@R-v!EAoGgntPyVLPT zYn>}P?eM@k@3*F6COK&X{y&^|h-!^SYdYw34QtU}&Df&T87(MZN7ofkb(XB7qe88G zz0TmBw^V0)^azL}bq#6v{<%)Ta>w=to0u;5EK_tU^U{W+V%`$3n8hVtvC}FcW6JiC z`!zb}!!K*g4{f|m!-_4?bS2t4d`OKhFZyFcraX+?wcGL33%d>nyoFMgpbR?w z)rbKN*=rIUi1_NDCm9M>YK@^o$TZw^Z1%@2!xuT}p~F}VXX^giI)Ap+zt>?G{E*wB zeVpR5?{l#wu268cyWUvj6%JmlpEVPqFf&sDHlJiBM5>ig?7@~w_iW@HeqnAL#6GL2JCsxXaXPMYHDd1BTnoHga`^5B-VUyG=Ud>T0oZ^NW=-dTb>s#AmJ-;4 zlfAG+!N91-i&c6&58Qp@Fz_GB=#;$5P$sdR#5@?1p--j3J{kCf%wD0Sw69KEYRm%< zG)%e3{Ep-N4j?9+k_#A5hesxcu6mTo=@tfrY%s>YK6ZK5$ zzZv#!ghC>W?v#i*?-Q*b`}WOr)lV=|TZ#fs9lk2!Fg)a001&c_@j_%J4=LkpKY#s% zsxM>8#H&@}JpWK6~0;x?Sed#gL4^8j7* z!NCqc&LpdNVZ~?)N0th!{j3k&Q__c-KH3t&cKSFfeb`75273M*7qIGF8q-ujYoIk+ zZ;-%B@!QXpfI~iGtP+YZ%3SiF#sKEh23n1Uej!$QQE%lR>vzhp=?}_LJ0Qq2;gExA z{lpG9YVy$6{HhodPWbD~VV&<3r+{MQRPx`rH6bX2ztnhz89!oGbYGg6GHhx2Ar2}4hotL zzfVEq+2jy5BSgyyVZ|X5PQVX_G$I-n+8X5M*B2J*PT%#?|J7i68?xu$L(!c5?NwK+ z$=t%&8lZm$;0PSx9NM0C1e6P0QAf)1cC%bjdv&^p!X#6uq9uX_wp5 z%vxf1Tgs{BkJRh&d^_~Z;zQTArNyb7*Hb}Qsbs%xBT2SMjO^vz)j&Vy}nr@Yx0 zckrL0dnRzoD&2Z^w$;#=v;N zL*8zywk5Co2W*vVyh2X{slppd*blu!&vM`ld=JruXAHmgD~mk_btLKtT>k#{2@02g z3}Zh)W;2;#7GX19??}{Ga5u93fm$XK4YWh`>)!>eN|G?xv3n8=6c){^hV;mKU~?O5 z`;0oixJ*uEOi8tQ`9L89sbXS3sZvEs~Z87>~Nr=78-SSb<@-CtV2g*Dpw+MXLl`>oGM`~qj+oLXYuQi}VX?9!Z z<}P%oEl=x8liL|Dy3n@vytE4)X>UA4$sPHQE;Oa1alZ@g?!-&F(78_hSr@w8=>v#} z->rieUU;_-DwWo`4vOE@IS2(D?;M0j?{*HtLu0!b=ey9XF2hyE|X*z^r zx)YEg`MR?hdsbZ>)Y%DLT+`WwH@BN8Uyb)FKm0a+MmF5O`C$oM><~K~Y`H_*>R{^} zuU4~~%*9?T%d5!yv1LPF=r$h5d^cGSnAw-E`-VR3OCtLeR&u9_~#+D{G@n~KPp3;Z5x8TG3K*jbp z>a(t;SlgSnw#4~`rnlvndZT}srM>BBJC4_0Y$q%F(4}`nC!@;mz6VwP&JyIdE^=-k zy4gj{>qmRLId}G^^&iEd#^*nR$4i>r?dY-lDKKyV6_E>c{T&o{zCMr5^`f+)q2! zkL~OCY9jUYozL0FaC`=1H>=#L(T_gbT#a@MF;1gH0#eGwHsiL9HrWjLn<=%S51h4W zl{R+Qrj63rGh4(=jlom)Mvbk|BFZ$jUwd7;+Q)Xt@Ddt{p04&0&Zf#pt#wcAAsIZt!bTQB^Pu8x2v2`>(Z#~DSRvhdwuFt;>8r+OQsBcOY42R)HHE{9_>mgmFihz}nM zp^p&YR0#pjBOyz|;6zfp7_R(bq=o?v(hho~ro(^ab4^x-D(O6OPLQn@MbKnlvpS5X z8FDe6HO$;_+G+~$cbh;sq%nS41~`8FRw!+Bm?)>f-#8dXxBY$hhCwY)38Y>)`GZiZ zbP3SV=G=jssenHCodZ?&5=}g zn$)vzd5sa0?#;#l_j6PLuzZ%A%76Vt6Y>nGb?jhbaRBz$TE40L*8?pI{_E!iz^4hW zK_+>LN>lm7yB+Y#e|<6}OSl(OC(m}+ioxj<;55B)U-|?9x_*?(#c7wq{XFWR6Y~I?;rU=q8e)ZJ9x*eYI?ZuJ~dnu-V|d40hJwR}J8j^Hh_~ zG)0cd7MPf>s!g#5`c)3`%)u7;`>qIJJN^Au1+d%xfEHz`PBG2NvLU#1vh_~C^*BvC z`Mw}_--)w1OLO_Zs&ExA(mH6XmPXzJs&5yx!{}p~i%x0X%6@YvmI9Yw-j1?yMR?&DZ~}xF(tZ zqyE6(kY(Pmuq(i0Tcvyk03!lE14=x2Y+F2dY|s?jgNsxT9$T6RkL{VqzbI~}AYYmI z8jo$f2aoN#R80@VUEr}D@!+v#y!IJT_=eAb2_ByT%RG2&xgI>WM;`y8Wga{>z@-0- z$CmvXj}31F9^0PRJ_D|Kdd7=Q#L;VOjhIZrqi}O_pJ?@364BmQK)P zu*jKS5N&XVS|hFJ$>^_Y*?B6Kj7qMZt!9d zbV00+Kb~J38pS_?-e}>uwP~xR3frs#?wDK~7M5#3Kl9;BYtvAXk37q4{82m=+NOcO zR}adKr_1_K@XPJ|WG$*x&_xTR<9s}=lEc9U2;s6=y5}pA5ukF{V`-jg=Ec%fKgal3 zI^$>H+XthHgj-h7`^GY1;_2>KJXq;0#sYQpKAsgfA zxXV#ki)IHH1+}onF~bK&wCvg}t2VaKr)t~p)M0DtaAet72j|3{byV?3>qNg= zMR2#OAhkRwTyngd<}>~z8XhzM06H5kgrn(&*V~}yaBWi*++ONMk;<6`&}=Sy=u9iW z6HUjhV;M3{6#RBH?j{_CP`A>Y$D*-KRfW#gwd2U7o77+ZaHkhV6%IZnf^z*8 zea>HAkEDDj->)!lv?Eb)|6tsVq|1TgMmUWK5~)#iI!H^2q%k4dr3l&Scp63X!;KSBv^88i7|vEj z)V>$ZDk6Z!!|p_Aphrh)8zNa+>Iff0QYuc}I%d4CF2GJ5be?E{7N!RIt zRO)9u=})Kq7UASR++~yx1VF|-%vptjW+qHr zVE`>}rseddwB{0=GtD)mPH$lrqU09ZqP{fj?L_d8wiG4b(}7m4L1(@r=Juw%cYXjp ztPQW}OUv4b9F*LqEjTyZx_0#eK!x^W9~#wOm08?DRDMr;JM_cv*O6c8OUa$Y0@!DD z((#glPWIIUXj3O0;*dj~L`i=-+1Ui=Xcxzxel)AAvArKH?W!mBr*mD!DOgl_=<2Q- z^4xe&%j`pQ-dFi&eBgkv>HG)A`95^}1N{K(nm!a$`p~=&6}|F9d89vW{SXRFlL1-L zo1S;mih9$gkK~fxboe8_us7v&4?fw8ws#jbJ?YRdL~3tJ{Y2jDMXNrM%X`w?Pqi04 z=prs)dQkPJ{8A6f`^-e@yw4pYdQs))#?W5$_;Y=4FIw=0DDO#2zfknXFXWD1bp8u% z74m$c6!)^ea#Z%Ag0H&c-0-!??nNuU7KeM%+OKuc55HE;wdfnIq9>JnBT${vZ}g)* z>B=`6=;z;PyL-@zUup$CXzI7x)E;!|Tb2Lnw;0^hzB9HCq@3@J+<~<2J7f4j+Vh=6 z&pP*=b3$Kw@STB-BYGGQdQoN%Ew2Y#)k7=k!4CGQUH&~A)>B*3la1~9CFtutwI@AU zPOmhENJ($)R&TbycL&gO`e^xm*y=tKbXs3+USD>iuh{ZEE9j>c^<$&^D|$_Tfz+J? z_@M#p)Bvq=02?__n=+8)57ageWZMU7Wdqr@f!d>iY{Vc9IX4Uvy9TkDgB_rc500Mv zJ%;zv<*Ypz9DXKs)pd}vc8v!{e3fJO!<|4)34a1UqN{I)BK4&+bbPO(64l* z6*l-pwE09PcGw^*Q1%R276JX@#g>&2xq8k`FYRqJkpyg!vp`A%zBu+O7M>MJm%RKJ zM$tN}Sr!33I++tmSA>}lz%-k95Cyd&u`G)2+2o`ss1@np9MR;0NJwVQd6BS!GQc@( z*B%3!P4aC(V)HdeMZyfkaV>%hOrs)#?wRHZX#V<{nUS>1VE`R&gugK@g0}jr)o`R! z@t--3^axt(GA2X-_zQZvG&Mj6zcheDv@#)3U>%$qsH2=Sf&6SVZV$wkD4H3hc4hm6 z&CTI7H$;?$Q%;DEGS7yXIpMSzfN$Zj?$J@&nNYsM4JBbQDw>vtL0@lLxUn;m&V&aK zi(zLX-iAzUZ=?i$Ldn6N!#p60WkhLnqu7s8I@m{}>{U_hag+u+JKBCCnyrY&uKz)_ zTzB-3_w!;qY;dnF#e@aYb75h^j-UoJ&(%3r7_F8Q0qc-2~`recqr z<^`x~9&^bn2xbL{e573sFtef4u|Lq<4z-L0K{6Myv|v-E0TJxx7Dh!OhKd~s(N7^Z zHq?`LI8^Sz14Uut5SYWl%?U-!W0HX?t&fOT@0%KF9s~1Qq*012%cA65pw>N(G8A)E zv_1i`;cj^!Gs`;nZ`I@LWAt3?`m18h-6&;itlW)F8<>L{7S#7tt){*_iAGFrXr4!NU1=!G5mYsr%~YN}jg2%!Pd0`nJ#A_( zccbi_7UJ4=l+r?8M)0(SS%Dl6--!W5B^uu@LL4Co?uP+Sp#sK(MxhC&T!T@)}yMq~laC^>lt0xeDJ^ z*_DsPuX5u(p}NDO_vKLp(?4+C#?Nv614ku-r5~CZxHvuaVYBu4=1JZ3g@_&QW-h{p zV(~{Zdo`nHABh=gv*hl&%9-9>UyIhg-CfQ@mg^r&_1vXjxT=t4rinP6->+136pG)Bix zV>zRJFJt$|00lacw~h zE$btT@dKUhvy9aseA>@32{kD0?>`nnS$}g5+HKMRc?eaWJ-`z?H^8NGZW!oy6Q6ow zpl>dMR&S`btGTI>V8>o?{hJiq*3_!W0{IR`Ky_ZZ=L?P4^=Gv@8(8)*uB5=g9x7gAXL`; ze|R2Tmc(37pbS2AD04hOxOFHq58=_d!x+y+xMVmJ>f!R?uNAuiG zW%3Z>Rk#$ty^PU#ETzj3PMOG}pqPr-2*fr`WO2AlK`aTev6Gl%E1t=n%;Xk?t0yzF z7~wU^!lz6ECX0$snZo1_q~}e+yV1_u zrZO=X!+i5JW*>_1{xranqqjbr=0S^`H-p9BMHk(b$(-Bp31>2yo`WwQIg^Pgc-@4V zFXJ;1-+`8z2PKB3=ro16)KSkpo5Ms7ewE}bhSTZNET$J=U`zxcnM$2Em+321->Xr{ys7D4x&D zVR6L>%W{~p3={Engm=`Wo6F)VRkzAzLFEYd|Ji}>^(nOyQCV}$@ASLvI6WY}!pLTo(VGPID%v_fdP-~_93=M}Q=RjzB0jy+uo zc-2)*PFclR$?BKs$5y|r>!sBUf}WLYSd7X&aV-;BfRSFfmT~p&C2Ij9Lc`WEskqbD zu@6Za}zi19-%7t;g*+QoL2NQo`X<*b1_2I!Y7NErt;lH zd^F-uidbzGU$>RXy@(%0Sb^~3R^_KWe;W%_sr$Aud43yX_qV-#Yj!aUIbFr;1y!L;dLccD$_O@}103pR#l3 z%ceQI6Q2re^nzV1O67jA3+m6i8QZ#>MW}pNcE5b?-frf%4DsYW%&qtf_pqR!j}DMQ z!zS~u2E?A2;pY7BehHzoy_^~7wou`_gwKQLVg?H=$E(Nj{C^Wx@tfxsj|~(y!e1!( zyF(UU#%YX~270QOxW?(Kmk#;>+|F`3?%e`QG>?LjTLCvp;HD8CNH{ydvD^VBZ?b~P z`=@*OObm}D?0tD5P~BorgI_>~Ws1&QG;k^{@bW+}teIYjOxN}yp+eVj@4w2<0lIL) z-WT)+xgElgVL&c`J3&*9hFe-c4$pvB{RHSLKamrNZL+ooU=c2TV*t=z1dt>OJ@jT5 zjt0X6qEZ8K!)#PTWjDZl7|5Okh~z*vK2U(35{Tb?OJIGFw_d9d0LvAcsurBfJZCd# zI2Ky|L{JA4H$s5Vq(dQcn788?;0wI>pw{Q$hZjZ>R=zg`n0nC8q$M`KGX!!k=#%7W ze0K;HXm~zHmq&u>w$8Ic=)MlcSSpfydKvsJ+Y^od|?SSTDXh2a`7xG@;3L$qxn>`X{F*iS;-KlfIp&mcu3a$%19&#{ie z;omt0?@nR*QtaoL!0dtv?&reP*;&~ZVC3MBqtPcZ>=tV>uQGOl4VD)psEF~!O8a3G zLj=Ih3nQR^#+OC_5Y7(HCacH=9J=@cG~k6Ypb(*T-5ExAd<}3G8gfJgRU3R-IH1u4 z=trj57eQzJe!Dq>&N)O?IIZ?KpfqvMpI=uh40iAfochTy%5fP>!j%fcRJIh4GVLRLdjtUj=ihHjIH6cCro<~!IHzZv~ZRmu5AowCE?nUaCSOegImZe;n>!s zMzlwky%E^xl}8AWHzVF?gqlp;Z9z%&WlQk_bsqxZC-5uzt$5%sjYIPQwW}f?PNcCt zpc9;z#?x7@e$^x&z9$~2i_bw11DJ3;jj_ECbw?Y&QHxI4l2mq$R{#lG%SDk8BJ7Wc zNlZWJU`aV5o?b{*;z~oigWD5B-if0!(>PFzCi(HzwE!^ zM;n~{bR5+u8kJWL0#`h@F%e}E3zJ5z934w5KHT$ zRh9E&jcK)MbF5JnPX}U+v2k=cR=XF=Cd6s8M%GqonYFdN+AO;^e!7?9A@oU) zEg6)~mB$+~+k|qd`n_;7Jkq3UiyG=ZZ1C0hB39umcH^bDU&b~VJQ>Uxrdc@yH8G{ind|3YjbIWy#-b+04o_^q zzg&zrq&Q_Ng0oIul*#CVOQ_iN0A7yA?*}Yno~i|jTok$|NUAS68Du|>I-L(TA0f6a zgg->^DCAr9ic?|c4&+=NE|*Nj^Wl6eVhba5m9{NHoXfzDIYJ!9sLhEq^YGlbD82;2 zl_*b^J5gd9icXJ~>VZAc=5^F*gPUJL@XXy-F;imA41Dg!SS?k(HrB+khz`W@g?QiO zTIM#ys%!C`2*%WwDobh|*UV|CbsfK{2&UCFm!T35>T(>a=ngQfQRdSG*JFI{?nJ-) z2$JiY8&J^xZJ{=h0<2E z^3>^8EAs$8X=`iqFHtSN^6OxhbrR|g`#WpHQK!XS?6=c!F6$yMBDmj0%tg*;UH*XSud6l_ zU$WzU?H($f`+;^6!P5`q3e_GT>NtSXl@IxRG+=%=aRNoH>ZYs8-s;9jDdtDwh+=-E ztIDQy=V$Q+%eu==iurN-S!m<=zu?!Aw&W98ih8a2M4y2y*FO;_#^9**GPd?JZ6?xg zeD28t(fRh21?wvifOzYDtKV?jwdHZE+uS3jzq=OYtk->mPUt z4Kikco{6G24iGy~iISJGg#$fl8wcv^QTeKYVm;Cxy^PHsj4k<NkJ&+ni!GVWi+4K%#g*!Umps%3M35Zmzi1wS0b zggQKli6i)7Qj?VSL?L235qmhCdEPrEnZ=Dm^-B;|q5s}aX2u+ZDX_;>Gtrb3=Kl=y zOnwS$tLk|d{3GZI!$&aVD*EHp5iCgkd>cnFX9{X}4B=&b`J)jmKz;hekt}#8;!8#{ z=TOwQ2;o6gxNIadAhw~KBVnC1lCcq^n4E*9E^QRkmIG}g2k}zGH~kbZLp)fGi)F_iJ z^E|L>7L%&#+h(zEREAlzJy%HCbKnUOaLCnjSd3z?%wqPdh>wK~$P=H7bnqby;wnCF zp0b#EeOKiWbtwdU1GOIy&>KCit>~;>?sx|v=VJQXR1Cn;=I{q1 z4mYExQUiYrl!aQ+K|@Y|hboL9q%JVcoh{YTbWuw{tcC1qjs1lvZApt9V#(X|#9^kt zjVm5L;cXbDNu-`}nRi;y3Ru&(zLbE1DM1@3o+V@#4zcbRu2{C#kmmObeP)o9}Kx zdupq9jj9t?){64#h>{jGv#ta^zMf-cbJ|zWT;80{*3(Zl2gJG92h55DMK4NF?>dvf zPqm}MM6nPSWr_GPs}sesci=UdKWR(V^|fiOXifuF*t~|0{N})kh{|bB<&AlDbGqL| zyV;zEH+7&Q8BO){W^}r#druomY9`QlW15NTmh_^TcBws^+FWjK!_GGspr19D3tF(z zEdoI2w~$*}u&THHkXqhS+-=EHTdihD7~V!(*M^O2qak5xoA%&LZ!1bVu#&d+2W?qK zJNvPA>_I#G+4gKk`wmD=>0sa8f#r7aL!R{=UJWhJczSJH_CM;2?+yJ`Pyg>Epl9D# z1860D&cfHzQXD$~D#!#d7vOVttV{Wvh58YE&ZdOD@;O`TQa)$Tg}w4QTLCvyUZOno zmCxA%Ktd=*_5a1*d%#C=o$JHz+1<1I?(EFYY*AbF1`^eP3)O&ecWmdz#>Nzboj5&C za+BN?H;@n=L=yr;@4fd9LNw7q^d@@mz3Km)wUOj}_a?U_`G5EO!taOXoik_7oIP{q zl(#(3c?b83Qk=7EVio6XuV_Hj@W@!jIh!4=IA@2)D$d#KKqGW=UbKST8W^iMXQ3@Q z=H%JnmvZrzNX0q3F{C(W??)-lS>RZLb9Q)0an2r&Qk=6>BNgW?f(+I%R#gh>d}ff& z!AU)at|>>Nff^r)f!&*@;)iJ%Dd5KnxXR%kE{1jpKCMwIIH_X{AcW-ND23;KC>p52 zd_Iy^>O3M!0SWDjrc#|Z0WuWmnV@<$cvciGHWVsop}}aM?FQrC>xP0D9p&Y75j4sB zG~y<`+O_~31bKgu@=e|opvk5p+udUFZurofQ2?wmd14ezvb0SBT4!lfk=@b|72n6F z^$NhPOv?&Tk*@`+?f)Hq*sy?{5D-fPvM3-{1zy0mJSckw#qc0c35qR2xjQJX1!dO= zaX*NtbCDI%3NhdjJSkork5J>)qG&FP7MG&E`Eg=!OlU%!*bw6z7ALO6$a^uOXNU)f z#ORQ3bevcak}DF#fe@bwiF+YmZmgIU%gbZMu2?=6D>laI2jax7IDNXp=8`CXW4v)N zUfhb;3lqe|1aQu*)Rafr5WWlN z)6cPr1PlFM8vw9iw3=q)zM$x|@lKl}?VN2FS#~&^mDu$>hq!N-xQNi$Co{0x8~+XY zS<&X@zQYCo^j-gl`>y|o@eqH_cl$45pH__L>YL(3GSwRGZ{_!nGAp>L{|A2SVGima zD-P)P89g;;$rPu{J#_$9{S2!c4mSTFj?p29Ua1*x;nadH&S zmd1sjur%JnTZX18oU>P=JcesUiQ$~flVlFgt|#$89Ofijt8nO+BA4Q@BK3@8B9xrt zGlG3l==O{T>a2Taa5?HUFEdr0oyznr#I^it;cMHg1qb3_=Q ziQgR+E^^lQw9+qW$@e^`zeH>>U;Bb?h2`9L_|TVh`kl{JiC5p{i(gQWmg(wbb<6sL zKBp7!g`c(beZKJp6~5mSONOlHazG>A)jCqa$JYatBjgUiXoP%iBNl-1>|je8j^(qwJ5B zJnG}{-S@w5Ekd<^piTXPX8gc7{TZ$M0k8a$ay|*S`2A1(SzpqsADWN8plv_&to@Si z|B%mrL0Lai^7J3Ysh0$|oKk#Py?zYE_ue0ei=FfnKL0sg_z55SjBt5?+zJNj!g>odCi>km-)?cW$nKc}g`?ILn;@;f=}Gur$IZPaHp@Q+5< z&uQl$^-|RH#2Xz(k4^5Mpu&#v27=D-i&D`Q}1xB-0i zx;h)tQ5+KLJS$7YtAvSJB7A*S7T_aQ!p3aT0Er z%2C_)De${dcPzy5$qEF1kFZt?f*Zj5a;+Pl@@nFM_ny(Hw>xhnxzi zD+dp8(HhAYT(n7I)qY934?}4nc^A_#CqvUP&RGX5CMQqRpjW`E7W_tt6yNHS`&{BA zxQ^W7oa;~U@nIjt?rsYg=ey-fwumew0Edol0JfFy2%|5Nx#J1cZT)k`*0k=M-A5TMH0(u5(EWtl_*o zh3*>GA;hqI`9uokndXdC+U@7ZX|yV!$aqEut>MW4>DTb!^AVoDNy>4wR}w6gO70S+ zBYkWXUr(a*QC4v>9gX%+O@_+BI}UfnSjUoR2DT2#bR}dRgllgs?@T6a6t*ORkXe0(p5AGyD=x~aMTtPsb57xNl6!<}sY?jhO&vPPWDa~NHt5oaxT#ZVt7<3gcR z-i)FxE(2FFN6(8v45gAsxQ*d4bkeO%@JBsXK@8>Vd_RVYbnX{NTXcLw;|$puL8i?RXT(e80N_>m#0Er&Wd*dDY4A%jgQ* zuun%l@A$M$_^kZjM~sf&e>)WfnYOS4B#&QGuXhJlLzE zjBP1^eX?-1TZ}m}jkd;^L(`~t2py5`hm2zIS;g{ha8Jc{bzrngls8h~9nH9UFUeDy zPW_WTFgl-0PU(n%zLb=csql{u^h%{IDK7#OAXOWcD$b?y?o3gZ%3Z6Au4!2FP_J|) zpHHui^kY@LSF4Desw&T(s&1rTsj5SspTWJVi;@iOZiYCT5rvezOnqCXSe0o&zLlx> zs}A-{3wfqgdk1$tss?TBH@e^Q_jf%*MPnX9^V)c829~>15W)xgD6?l(+UT$#A9t9z zFkZ^t>F^dXkOJV0RcU~o^dKEbxmT*tIhWj8g%-0lD}$E1O*DMAX0EA9D>Y+$Ra)g? zr0??>H>=PCj|O?3F0ZE3Sc7qOiy^0H(l{@72YH(pWB*|Vy~*9pGY&Sp+7skkLI2F?WisY+bAxb+^X$#QWQyD95JKt|Z3Q$;qC6RcKAJ z2hIUQQc`ABrFAJOxoLDhC9o_NyF!G9%zmJIUw?Fj~?y))ui?#qmd3T;yOkx9C_A+J|u?9T0zNf;Eo{ zYVax|kA!DC_8lU03-*|bg^3!Epc{!ukXUWKDPdX56Z$fkWJFSVAI4nWMeqffjKj7N z@WI$bp{<#m3db5?g26RMOcb3E$YM7UFq&ugL7r*%;=*OSoCaVKhk=w^4tX?|@}&pq z`y}vXX@XM%j{c_8f*;Uzmstvc61I-U(>1n=0g2*fq~CQLW8$em^FZFF$-+2V3_W8! zLT%*o1ccgnZpBf5!&nkaw+)Gb9T<=W07>!sq2pX^TDUsfGEc_>!YHB?WIsM*BXCOm z#>!ZPlfsb-oTWeWCQCS`j(4Gg6e z0|YN*W&wyV)C}Z;vD%IXRoPznrCGAvEjxKee?b zA3zpy@{=B@`Y67`_lzA*f`M(Z6IuiqNioH0C!Dm-HVNO)WrqPYxP?;Y136MM(BK|Q z4^n12YaVfm(@wta6qhTz(WtpqK%ejjW3K@oma8;IN;I#Nm< zay8)BB_ro?8Jq)hB4;|}ea_%m(3ZM1$VDy&^28Qb2RIvYIDt7A2^<2i?;y8!KnKK& z0Yr;6ng*bV&6)=o7q>MAdF11;+z*2{D2zS7hG&wVf~RiK>-8|i1N|qb4UywDW_U$^ zZ>1(d{h=$x_5t~Y%yq$=729FN`ODtu9JWW0`#a2WE*kCl1Th-GnRU`eDS@^(&B>4p zohcZ-9y__4OLTEz5AkGCqcC1GUNgXS(_bid!F+KCW%aR}Ywa}O&MWO=y`KRF~?FKf0?CGZUw$Zr%tX*B*?JxoJ)<>F$-Ly^m5u(@CB?r6d zrb~tEfg*8;hURMsA5>1+3W$Ao(}9|puNlWQu|`X+T*sdXgjAwj0GeWCTnL&(rFSy& z5h(4D2$A0Jcnb1$*B{Cs454i9W17eqp$+gcm%wu#M^2pq$>fEbI_cr33v zsEbhVudmJM3V>9b+~%M&w%@?OU}u$Jk2>Z64*;rt!r>VvVPu8BXAh}C99RLJS{Bv` ze$Tkz#%Ccnx)IiI%yNU$mXQMBW9%lU+YK~twnHKga*88_bRZy&M0}*wAQwyH5C{*P zat@!h-`CNDVOn9j3= zeR8~}~rkfeL>X&6#<39LJ z)l?;xRg3Q3gsxQM?8Y>?x_@;;x?NqH)`)i3=qzS~QMy+2`G$0@_E2@Qv@Tz50KUm4 zkRR6LTMel5)79ZP{q$!@nDUI#uOXd!<~7JOp7l&=Nc*4VVGXD>EN4CE!(+PDXPBLL z*H5|dJmSAkh=djl_;d+ObCBN+a!YBhkC@B^xf}H8oZ@6=RyFJ^3QR6>Sp* z(Bi7zEaYzBY+)0KFn<8_M1Us?t~2mR^uvs|#J(Kz9fx)oCOv7C1!1(5mx8p@X`Bs1 zU?aUBn*$?2U}5%;pe}9$pw0)~@^p|!YmBRtHQpVhBCQGJQjZBjwgTPU5~Mx4F$DOP zhFl7u%P2Wgj=As_U9hVXyWfVjpouLb~QYhDgePoJk-5HRw5AVAB* z@-CmMU}wKPgcLvL;emb+ia+S*X~3TLH^G)IV6KV)Qhy2nsCx#pMc+u#CjwJhVT86V zLTrghge@{64yoNLz@niClHw*{TG0mJ)IQoATzYCW0H^l;=9t*`LB461hnwTGhf0GM zOL?$4-Ij81bF`Ck2_DaV#M~At;&pO!tcbX06Uy~`1-Xx|hC`4q=C%O&;=f_9?lnrD zr(8I+H>Y(b2)}8VB^NiNtCspUr~8boCiK{6j&1@laN}lk?A2DQl7ZJXs2M;I)D4>= zjH^O!y8YzcTU=l-7}#Htxe};4QX>&zL3s+o6wDPLgL5}R8-wq*o?Z>^e$^kV{2(84dF^*PQj;Ni~BdkC+UIw zu$ETbkh<4adDhgHJ@Gw1#kgy29SsA_);i{yhV-xw_l2)YT@U1;b+vU3XZhz|M%^2jE1st*4OH)0+`xR?fHpNS&%ouS zfp)Kf=+yAp9xcTAhCkTSLOg0@>5ySZr|K*;V(A>eb4NFbg zrzTCeorXNXp%~W(JHAiK6uiM9yvWdYtc-XF}6CU zD%q<#CaE?^S?~5=u7-Vs1$mIi1XublkGY}-z7k_!bqpBO@hNTanj>q`UN0uxO(qa? zXs{(mRs*;sBg-(qhFh2Vt-dv>*soTb#{%+v4Z0GPOERf@q#T+_L!*tynRGguv#ZhO z7-Ld(8XV#&)s@qHZVhl68;`1E=j%C8okqoTw`w#aLEg%sGYLF6lddFq@Wg(JJRp;X zB$}mw4NBA?Pf60YWI&6dje{;H#TpK^L8{h0lP08jaCKRl0eNGZfx7KUtBTaCGpRzr5LDLU7Lj(d7d z4-yvDY^wZ;j4riA-&zI|hSzF<;k8y8#QU|(CzAuI_0uQfBXF%FN@`G^jw=Ps|o!1ZAd<0m*5#ZYlqf*6*f>HV01u@ z{}4PEwP?CDE~B-i+*bp=%NSn+kF=0p$maf<)X{Bjuc_Evrq-lBn#60qsPT%Lh?cS* zR|7AW)wMcJ^z!BHK-VilbVPWu-4T8%CZGc#0@@cUTwq>S^2dnE5ML@1pH%b z)2V>5uNEx~dXRD@sIRC-4}zX)_#0u&sDYRk3r_*a(Yfk$JIXv(on}WHXRFbQ=o$Du zP_6CQ`qx4RUi^|+Ij%a5j$>4_D9&@Q8f}k*-gIKT%&$gg2Hh zb2YjJB&%xlD8YkU=O$XnJ}Jq+C6g{EnHw_cQIh9ICQVG{&Y3hbS;@PSxu_c5PxdUS zPE%7%)NE6Vr$RmIFl2~|AfGpV!+XJyj4 zu)LwFwjh&sR`qnrq^u0?m+(@Hd6{XvZ9nA4cE*09i{mwD3ml4`G+X++xq-RO2biWwwZ+-u zG`3)~>%^c1vfxDw?i;ng&0-Iddvgm!j4)4gi+x-V-+?;@;6s}Bgu8~~Nxcl-;q*pji}+67>8SeLXuL7L?>uKOw5B@g>)r;Cwtz~#T= zM+-E8JlSo6uH=N<91KS_&FCJWV;*gxpU!(0qujBE30%}U#;;)Q^%{9d_DVol?=Tq| zPns5dx^9|Sb!@j}CqH%f@c=(!pFGGo%m*{lW?xFrfP%f==*JgUV|!3+_G|n6;=Vr) z@}K|~fBk|Q#DZWdU@XGohG3=1>B(>ZW*xiFU$Ksz;>S8x{q}QqxyldK7JmCm2M-T` zj}yQBhC{pRM|UuQ(Rv4~HXi|*3MpHi{_8$4#x;RF94lHs?Paqs&|I;u^}~x!o9{!g zm-_Abx>@F@2>{ZkL52b5qa%hK>%%gRk#V2bn&yXI>xVEOo3hNJt`_(6QLg1d#-SE| z`z9+T8`ZMR^*#iG)tD0yn|#_HpSb0Vf!xOrCBO~82Jw*}zkO6di2ze8f9)8fJK6hw6O&sguF|eSy6sFu1 z_9OWy^SNYLa+G}4Ete(JEq6bZ1!R^jFqG*Y*d>nY2_4fE5be2CD)g$9J6>aBDjhPd zZK*WNGLSONXF=~j-ETn;+%aITNTu9>2TYdx163h+4DLpqc1L(1AB|A3eOn`=AzzMU z80+pv@`x0g9`)*(R1oI!s#I+A3qG+qj*c}PnB7IL3 z&0x=-NGipC0Vij)hWnyutcM}5)_ur&TGwU+1KH3vg7e*Ltc|1vrm+Swy_S)SP+gzV zFN)6jj8##z0=&eL=sZ5iX9C*YNW>Bv#gVil!T@#rk%)INNJW|_Bk4?}b|X?eh%|ac ziEdFyJ{YB4iV~-yQl9j(vVv7MfuJ=tIs=37VH!;mYE>{7GzMw3$hIB7vzzoNE0nax zRHfNYKjbkkYiCs;N?JXt(slN1uSyf#jFcJf_*GRgim3eaz5ZS4pxut{mrm3CzrB@C z+XFuvmPQAI1|T0V1+4|?bT`7kA&rV6%|aMNqYR`BiJFb4Z;Cb%(zrhw)91Dr0|=CP zA%@vwdx()`U!12fofah|EU7|!60mI9p7_$zbXZQ+;5;E&Ka)mdQe=-b%1LG1IxAH_ zR~5cE)>hOYRl!Z3PEDDeM)T5IjLQJ1Bfh<%>DugcaU|WinlA398CqrzJsBdv-7M4XXQze4FWOe}>QUS~m3 z9hb)oeX|g=MN*~qcZfxf7a2j$-`9@%6{hw|jFsPDY99xSywEUikG9FdaSBs=KbT#< z!PFiSP?*{?L*rZ~B!%4GlBP zVBEXYkRWjH=;iqV>ZW{@mwC12e%j`>P^A-Iz8*m%O>L>4mYdozOlYR|09<#L_Q(gL zo1&9gX0^ZzwSI@}z5O!ZFQ)nB0>3EsGiI(`etbp~0(>_lW(3qrJ{RQMLD4IcheV3i zk=_e2;$mdzevB9v<+~aq3ZvwfC~*`hm{DMe_uYySJ)&iwI58udmqv>%(Y_PWqH_%Q zixCrJcwUSc64IxHL{Uh86cU$15>FWtYfOz5MX~yTIB_Rd-TN@MCZgu!jHPjv?fh#I zWQ3?p)M$v{gLoZbB$o9y-W#B8wi0~DSQ_nz^2BLu2*3s*y98*ND{=yqEr6;F&;T~B z_@T|vAtNeflb=qq26?bso9hROsxb!hyJmF`&?Qa6WqY1(VkJ_jt5wNSuZ5huP5+bt z<~~JXw$rlEJ;(Uuem@=camN6i@p+JP-3Qy@0>4(|7hC+@#DJhE31FpD7BKn*pZpqS ze~IEol!!@G#lh49^AviJFy<=i7o`EeYvb8=pptoz(${VjDe_rfWfv#V=*_zZh>a?u3auOu;*ww*-LrS%<;l%qd~qUd5v1kVHjBA z)TS9U$)%FJ^E3Ha>49&~OEWbs9~ju0XStUyXwV6lc(kqtJS3F0<+yI{G3bWwN0y<6 zvBebo4da3#5HHiwE4q0#q>S{+4W^jkI!?5fN_OpgNF|g_(*ghUb41`mhaV|td zjbPs_aDg%(WQ0NSBap4Qee*Rj)y<3C0#N)1+@i#tjzzOO1pW4K&9_7oC7RLIBaSP! z-10Rtg6y*Ku183!k1qB(-;lsW;A@hm2nmo5v_mIJn*=oIU2J^T0XG=g4fNA+`A{sz zd__{Bol7OwRkiUjJFjp6EL;FXh&v8>z$tP;QYgh_$qT^0DCHqgFFK8*PO;Xh zu5NV3KBHm37$$uo~J8XEbB8uAv$1Qkpv~3QU1R=YGx$^Ky^|J8_8}{cv z#zx#G?*a?ouHzdku^U-xJFnkRM3hlTKdy)<%ilwodoNdU?~M<0?=64Ay*I)pJAw}S z3HKi49J>y0ntpbS(M5JW#{up=mE}rhpW|<}<3D}-|1bFV|84x_@gB=#G$5DbyH|d{ zf0kb1GYEh6ni7y6ugf(EZU%Z9yrRExLqy-nvl$0%Vu>xd$0oK`j)R1sM2I`k)BGK3 z437(Zla`-?kwdm0#B42!MO+|{_~Y) z`1er7<<1x_WiGjANmjYJpNkz%HN8E;V;C&D1OnJ5^vybMSS!=kjR02 zc2$Uj$^l56_!bTpzMqP32EoukEcnJ7VVDIA_&H3scWp+F1x2gOwx|qlKo(qoWSL20 zoyL4%ueh{5Cf#r;c_kY|Ey{OG;Iovv87b%7n7ij`@{tL^ZXF4^y0Ouu5?y7#V8}5h z&4Q-Yq(xp2(sNDUe8^_pCQIx#e*kA0gaBG%&7a}0AP&qWU!w?qhT@@y`!077t;)OB z*L?}>D~gyv^((jM8@@f*_hX|NORYC0^dpFCM^HIh2H0S0L~{9b6uzedZwdE!_z#rC zKSgJKk6w5gn_J-<4d?TU-W-08`xC}4_!rM&2ZwXulX-t?eg;0#K8Vz>oE6u8A%60z z(GNVRVY0+~h{<*V7fUUxmf3iri}u?z$i3}yfD5kS+7&0(oLDlbHPbrKp*k2Gs(qyf zd8Fi0c+$u;rNdJR@BrBCgk9w~mt5jhh09u5K@;)ZD}3LEK5@ZDKYI<*Jh(F2u*%gS z?@1!9=D!GSz)2=m0SKq7hg});P+l-^hwAW^JO@>>ElDj&r zu}MI_*Hya1(;wc<(t>D+4+0iQ#VaEAwzeIp5|Lk-EO%Fnod^~8KPK5ud|2i1EBF#%cWR5hDvOCH;n?Mtz z8S>PS2dL0p;u6Lu0VNrVv+nUPEKH>0_@85|nV@e-rlJH3`~xKkuzw6pH0~seHHq5( zMDZZe=$#~{C$$)sEXF0r7bc71WaB`xI1cofWN{_AyrYFV`qJYu#(g2n1l<3P`$Ak0 z4Cg#dFDq?gj4kC!uL2J&fE_^SLG)``=%TL}9*DDr%wt+0&}A+H9@2&V3ami|HhzR9 zu}#94ct41Jo!GQ6ynII5xs#KQ*cIGRM~4I{TY-ZCH?-U#XDbR#i97|8Pf8jqzoRH4 z8D{D`5-3C?5g*_b6P+KU5nMdT1wS&p!V(u;xx@pPwQe>*j~x#|%%1L)gNA)j~1Lm#5YTC+Z+ zds1%vFieNg9{M3U1L-cz)=+;laxQhtQ|)Mw_6Fq59)I5tX_&4!%SUZ#ZbE0VzYVQO`fyAuI-ktfThoXX6Db!`w2SZ4*mPrN8|qqxSGT3%Rd`uj z>RB}cR|jSo$PdqxM=fbwW(4HLnXNarq}A0`dP$84$h~SBW$(bqE%&`kr)$eaEos41 zs&cdI_;<9XJ9W&>t*J|0&*9dzxGrz`fL4d)MNg|dbD#0wZAJHkb@ZqIrSeLzc} z<>l{FVOZ|;oVKtP^?c4cfjT_LSKg!I=RA1tRW)RYIeqSZ~cPOYf4DHpV+driY7H`5-z56~jd+Ez5PIZt?x7B*M% z?&jKwmX!N~wjT9=feYJFUJKsbo`$zj-l0V=^4RvYP%xH+w< zf8s5MeB~`(^FDQYTlKoNZ>#i9-<3DtqjmqHWw)fe|Dx))?t4D;>eBC}WVNT9cT^A0 zeaBqamPWl3jk}iM?+3K|9rIBuI`vNUxp%3@yYfssar<3<@S*6^(wN&)jBaT_-rX_{ z=||sJ>783?16qmctyIqStyIeCRt&l02S)!7#Ly463M9>GW2|i>Hn&liPqtB6hqnzu z-q=>#*H(0F=SRwzcH>pnoc2*8+Kc(^jrHxtsrE*02XVc9`S7Ub6Bf6)#)~UIR(@v_ zK|x`&mV68sWCJPF9Vuf!hNVi5|Cr`U9Vus}>;wi0r;a=bf7PRb*9U@32q0L zXFJek;DRFOT#b*l1Fem^Yqf_Dwxh!yqqrSxRnhC((OHn{wWq-b-)Rer6(i3vqtU=N z3a$WS&jznbDfMzz8+zo`Aonu4OFLSIzik0h;6n=78V|IlBUW?Bdwp`oM^IH++dEL_ zfGkEO0@k>X6nNjrkEmCK)$b!Z7{RkXqQ?>Svp)varO~M!O^Nc1Y)2(g{ICr${giwo zDuAn-qUGZb^e|fG92GLwwFh>I=T>{#7vhI);hCW1dm)vxUo7|hkZ#Am0U2=gJuuqE z%bfP~D83<5mL>4%4zxSr70AOA`D6!Ll<0?CmdN`*q`^s5An!`5zqbwbP3G+wiIaJ9 zds>)mA-!t~cfq)u;)Q%AHGbhoRFK98+S7)#0OXr#Ew-ZFs`&BS*H%HO%b=>fuPqf; z<=GwRT-6r1X>~^ZPHpLN22bliqceYvl>XJ8-qjZTv0MUzjB2Xj?$zrb`Hw+R1MRQN%i7VjdVH({t*BSOxIN`P&Br^?#HS7X zqUq1@?honkGd!+6^?sITpe3K>`5(c_j*oPpJJ0?K@|oxO5Li8)Q#>CB>sz>MQv?6Z z52@{DP9Zw(w)N+0w%7+m;Ts@XTyWxi9jg)|CIEl9#`zql7yzs+^}^^6zXz(_S{W zw4tRhdoWvGewlByrrTk;%PR(2DgRYV_4(KQBihi;*UTYpsPr|@p*Ga(bw1yk2EMN3 z6|cvjw7su$&$d(s)naQP_kWC(1K;s)z<2bfS=feVzUjHx1|u9_Y)!|*^4&L$$sf_s zw<7Ug4!oskRtCJSqgyO_TSt$&`Q4tj^X;hfJB)&6y`!TCJ$y$;2krf?2RE#Gm$$d3 zE$^ycklm7tThoM=IzHOMmTghpUGJ??Jz{>VFH2g}q7T#)2DVPYII*a;8UqfuzV6!b zvAFfIG2;6o>-$*texrs`YaNh?Vm5$#%V^~WIRSEbEsy=w*Kruv5O54lIU=&f&y;#u z>tYj+D=+TL3VcEjLV@so{*Cxq`BE{wj;h#)0BhzV>^Bz`*35_qWxp96EVtkEic|KR zVG+uH1E?9;Z?fac?Kg)bl>G)!Gn?(ubU(E7od{*WIT2fKzX8S{QA0!t=RaiXpVgsqEvL@Q2I z#OHw%wIHN8Q7=U)PSmBaA%>A=_JplCXAoT)qjD7K5qy5F!CJo*V}^8yMLK zdw6~fO~+6irQ$NjM=1_ez~^S^a$^+r)%id)O+m0=ByH1qMid>>c}Fx|(-|>^iU^LG$gK=+`R}P6(`^kF|*iS;sbJ43E4N$hp=U^%_`E&pt#tdfk z!zP~$&?$v9^U&mlQEHnBuhBi0wiMZYT0YzweA=)875lXQfTU4KGlTuV!w;JlkP8B$ zH~@2z*shRf`UmB(pqL)yB|-49%acLTDMIE)h#v5_j1c`5(hQh+fdq3sLfL;8L~~)Z zxDf5lixY!lLgV7Zx)|TkIB_XP-iZ<2Lp&%XMuvPNQz3CDBM4A0?zkz?|Izh0+8=lD-tn14K{>3vN%He-1_0$xVLF-`yFdPaa9orfcSKv!`Bs}Z}5nb1(#HyeC1 zf_57_F^*2K42;GXEx9d7$9#;ta{Y2jkT&~yc@RPT9$Y=@hoe-3PEeEuV;~QX_&yw!BO)N?MQWoX#mGqD-IUv?!t?qk^ke>m z_*JEOy1Kf*oS+~3#JV?5F?q>uc%i**;j_Nd8U;6> zA1wP|AGWPIWJ#brgz{tg6 zW57C&A_oVJ!#H$_u$JNO6A{L09OgtCJ5b1gC`(}iLl3A*o(c5~s!|-Sjlf}hjByHC zW{0e7_^t!H=T-r5YGRE$IP8kEdO`oaB;I%opNKUH)*vM2Cx%N|lUVyAo_8&=E9!SQ z$y6n;N;V##kl86M#;dbbL!rgaOJjAmERFZ!>_A$BEIjUhx}g#;B2EFn>v0v7OG7f= zQ)%m}8U66k$<=u@GWMw<7momJMolh6;*45+0Ec6>tUGW7+E&}IuHC9_TvE?@%Gv`D z$GLTQ5w6Xx%V%*oRoB{pUw*6Zc08cyX@$Q^o1QULW%oWa3g6A0=ZuZG>uP;tKrSGU z8vLs&xS(OYdd!K2)*?9K%xPo{!J$`Us{n~Tn)rJm%fTl8t~d;R-Wr1<^PzCTwYg1= zjmWvDX*g$}W=0M#F5lmFtg6Cto z-SI_Z6HE>}UJPH`_>zArdil_o0~2tV{<3E^avpn`HzMcRug?lzF?!+Jfmg!6bq;tiLd(qXFi8YMe!7H-G9Guj>3unS)QD|1VLO-M{2r_?mkBDqNS# zzY5o7*Kdroxa-(&E~58s{v8kLk5B*K_!!2MNB<^A;gI!v_)@I+y+?KYbHCS4q9Hf@ zK`QX&vOnl*_$m6MbsL{l;h+55)aUt`xe132pINt&Gw%y)iaLDh8H7X0m&Reds%>Af zx_0#|?K<9c|BgcIj;b!~C@gipxRcOwQHw%E&i6%IT*mHgC*I}lZ_c{|A*c}Ple2_% z0#ygNn05m9PstV@z#!9M&~&Xti_$K_GYWTIggvML$Btb^iu%zL0SKLg)?5leXm!2?=jU-( zX;%@SjaJL<1`;O>4*58ipsl9jI2!G;631>h?!s{;hJ=gVM9Op=2Xq&~ZTR)mx(l-l z+6X|}<~97vtvIegYn?1-Q#|yEpkKi1DB=74Z43$17SA^90B^+mtz_G9JJnAb1AfpYH zp4DHl$~O%#(dv3(e-LjCfRAi{(O8}L91!-_&l?CbG88`zM|Inlfx@G1I}R}E0$@Df z2I<&FfJk@D6P<)g=s8Ge`+ydmKS(rI=Rl1%X23ePJ0EWnVAv1yg+~=MbFk1>3>IR; zU}1C~E5sulC&B*LV~B_e*B>5m^YP%dLxi>q>4%31kE%%Tq1cN9Y( z576oDc;1`>5u?gKP#`q03JB1Z)lk=$4-?vEtPQ3N7y7~BLfpV{9)9O|cx9{Kdu0TO z#PGxNMuPAO$JIEhdR!Zcbll%#l+cF29y@82NLA;z09HL0zia4dVXEI(G#d55bFbm3 zou>zx{Iv=rMp1$KzD(Ap}PQ(Ep!*T!E)WjJwKIs zEmR4Xt<6w}m>ME5E}2>hq8Kb~hM(qJ%Fpt+rA_u@Ees{aOyBR2z0l9w{o<6Lulq&U z01pg^@c~Ap!1Ta71b=(p7c062mtu@AjNt7N;&dd#B z5kf^AJi;M{INrv-#KE^5q7(cJr5GxGaKu|IlS`$zCG{>&IOXYUono|NZ7E;#14Du8 z5!I8k1T|)iv@Zg23jUH9i+d=>xh2Z2NUW@+0Q{@`OxWj@`!xMizwnROFBD{o)U+y# z1btUxCH?_p@Lr?2 z2_-52W9Y!#{1gQ|wJ4#=*E+WfADjP-&h5YA^98OuFMm$e`9rGrf#UQ+@5GL@VvCC3 z5cUU}BItXJRY&VKVSk`2m@5RI$JF{Qf1rW};u*iZCn#BNS40AX;FVb){>=VA&{s zu3TZgS8d8C^OjAVut~^gD;(%ln^fp7fL|0TR|?A1upIr7HVys{|Dq6+pg|X#z*F|* zOZ#)ZT~N zfHY%M{=5Zt9_j?X0S|`rg`Ec}&l}}}G04FWBqB`tlBAOkz9$iA%6B9Ulza<=5h5cb zB6*bSaBpXo`A#v{iIL*TI8wQ9{9XKK|9_{W{crl-{R4G`3cD+krwgjDVIS}V4U@;G zZvYEI@J1~5Du15%KI27nn)*cE)xMw);hF<{q?v#(t&~fRDTMpq;9t=@;lBNs{Qv$A zI>~}ncCpw_7(3b+E9wHPM~-=lI@*+c)?tjOOQ)pOu^!N>cvM~B6e{_Ki*xJJCB7<(o z@F|2+^X=LIt=vIri)G#;JrPDRiQD*;|DdX$Vf|@?a8*7@^o}!~Q z(`VPF-L<&5j#yBePuD}7^RFM&6}O)4)l-FSeAQZdx^ok+{ABLi#Rad)VqF<;2euvAGdkC=iBL zF?sw&pD)!X;W1N=|B7+0e4c|`j)7K&0^uC+J#9IlUO$6HH9X$`Khp|23k3OZh5liy zE3yE=M6MJ}H*7*Y0(KcFK(z#{`A2Io?UiUji03pc@wR({Gm+VYCEi>;INT3JIi(ey z=vA2?dfh$zp!&n~zQ)wMA)in7@guxg_VUwxpS}yR$Ns1(elf`p-@Hm|Qs{eY$`;g8 z|5SYBFTe7)^Zj1+<Xc#_;_OV)*{X>q&gK|Ja3n1HM|nm&e&Cj_rTOdpw!1 z{uit{{~qhUzlRO^f2l9L^6mO}*95Cl3TJr{36br^f}oh+y7;w$TQrXv8VD8?B3C5AXAcOCG-O5nXiO1YH#AdX^z}sECm~!&q;K zF$VN$C5ArQEAAV~X^}TaC%$42nkY zX~FM^H!AHj)Vr5)q^EtO3#uen#9|?~?nV9)eW#hyb4gfR`U&&N)Bo%~^}MH`7i-O! z`w-Z;LMiqtuj6Zqs!#J0aH7D%2TP-XA{p_aMKCJ5JxJ_(|Ar)9?XL_70Pqu%b%?JT1DQ!RKLG;4bS+l4hM<0ErBK@B%ZOL(yvp` z@Np)^sCTUT%4@1V(=kHAj0O+eC#|4-XpNe(HGQHZcJ9~Z&7;~j=DRxHSzDxisfbRm z3ONkqamsA@bra$l-`2gV=lq!G!>B6cMR4DK>p9{6^d)@<10JH-mw^hm(q*N`^#B&( z5zM$s?}<7CzxuaYkpozC+Ik1g6531$-m~`5PT4kXhy&O++I>67AheDSg*UO^fuK0; zv7Jt0RCiFW4rH7Y+ai|fC!DI9H!=-WIfH&x$rKM>;bxBB}bhuGu5FM&s{;OjB8N@yqj zbU|o^e!8X1cjG|Br+{L#<9<3|_A=nS!_6EsQg9^wYCq@A|z)KgDHKoxCDP{(6R{^ONLl>NQhX5*G z333saHV%kdE|l7Zd2cioFi(x9h0HktI>_7;j$X_l9_i%faX@}?^P?!5=$8AVXquac zMu0?t&jetxlY@a@uQkQ8R^u^X8PU+7{XFtiJYr8J2qxiJ20qHG9*l$obVYGFDQv1+ z9HzD03YTMGz399>NOyIf83}+GxbxC%gF8o3v7z8&JA3(Ih@9OTeP^aNOUK2s9 zeC;65_VWtA*zV`UezDIF&*51C9vmlD1i3gUjzsW<2r(qmcPK^_M}}Z^D~t4%!VVY3 z^P z^^LItID>0r#i>|*c%0}H2h1SFl5#0d9E{_$apG%Z-TZj{nBuWC1|*2_3Hr?hu{S|I zYtXpB`vIoCJ|ewRo^RVWpmRAc^pQ4nR`iFyHXdrL zq^qiI+h_~)N1?-_4a0kRad_sxw_myq`@PVw!3tjK6F^>!Pab|9vAoYxMqR?(@Kf<| zMPX$HzZ0J}(|{85Deu824eoFUO~qe3JpK8hL!qF|b*QD=PCF3&xW5Ci^?cV(yKRim z{=SX3+i3+1kan@oj-YE`p3HCvV4iGqh)b{*IAC?;qf(5K09D-%%t2ZHQ^WBA75nZ( zHc?{xwOnV>SMt7r5PII?Q8n4%p{0V48&oWKwn4`PkJRz;a#vm1MzeI(O%4L?jEXyj zRbwFV?rnTkrz>bz9bu%hL|06;W4&Oi#l*JH&Z~6**=UnB>L=wWAB~W_Os5%=7wUj^ z*H&r3(Bxwt#mG0q1R)<@WT}(q=zw^NCII58r@<-kAPRJSgh7<$J(E^3_w&#`<_R9U z$NU(DFmi9fxaq(G05jr4a56gJ%Bq1w;j~S=U`HUf zT1Sn8f!R)T?GkSsF&J27;{8sV zFS(<_IGT$deiZ;|PSM8|f1Aa6m+u;jOCWJ}i9zhU$YL4uMivK{!DEo))(5%8c(=X) zjPGv!j$7<-SG0nf_v4?#So@*^9rzC3)#or}i}}J`tbSv8*ZZsf2>&Df(6`%uxoZ35 ziWe1LC1@HOGDeND2R6}~1|F2UDi z*q{5FObz>*WW)ArR}%z$P0s(BuL)-EYYu+w5IrR4OEFf)7fG>8WnD5k2 zI>qX5`I?0FEN2z2QulIPrS4B~m2zzigur}-t5jx_9Z}9VxJr8GFs{-AhuG$bMf&+~ z;VM1(h72@uR^?ZNc35T;^K4CIkq3iLiJRJRPmoIp3GlAfLiPeL3as?38e^=79>Z7; z&IlXlc$DMKe7A!CTCc0RoYknCoyUQh!_HmYG{es8G=+*a#!Z*({Mbde>==B3`a4Gn&z8Y=w;}M{08Q~FgJ-o^zHhX**72Tn}Mi>2*vI6)dT@7(uhq5Bi0P>qyW+VWK?SN6P ztoYi7RWY`FYkaLEs=b9RJ-vtN z`uhwcS$iY{vgiODS`}d>X8RH$u%TQN-j^;{`_h<-8^imep!+w}MCJ(kH-^_ko-nXG z9aHhj)p!y6uG$Cvkm2{TLhyK-DshTUToV|epHu?hixt7Yq*Uxln)3(rS{UyLI+RYL zCU=+g4BD~-1AF2ZJiWW1M_n53|PMKz0renKhTVVwOx?R^QHRK>M^Rd?U% z>gDz_D-56wvJ4_PDkx~cagB*fFww*q6LG;MaY03&Sv14Gi3}nLf(Qc2rVOjdq64yu z=pcy7q63J43k(P%i}L@@y{Be|qA$e6XMRA)Rey>$<8t z>8rxoQ+)jHewwl_^@$#!7$hrfdCv{X;~L=T@D;H*M?OREso^Kt5@a3E5O)5DKoWYZ1uM;HW* zmeH9~zFa+$C!LLF3gqdXs;5uf4`FG{QeW~xBnva|p+5D36ZTR+8otm%zZ~hWQE_-& zf4yj=E)vbr5Zo30o9tXYI;tK^q-zH;C#cdT1Vt>riry)2{zv_G_sQ>MTlHO7K!rmX zZ)JTI5mO*V77_DNXG0`q^sT}S2Lp|9m@q_fGXloVi+$F!5xN8N16-x$`<*kCm|=^J zP#_4EueL{~|^5yAr8PayV>I$?`1187UoT&@Y@ek_ISfZniBpo=qpkIR<6!suLy zK|yL=v8p>LBxVOO``QeYB zyztb=XuNjpnBgqhyd@1wApnkYI|34zVv!63K*Nc$HO*&zO|zruP9FxQHR{=M~TrEgTH<%Yp3gL1DENo2ksXig7-Jvar7yN2& z7)@Fj3hcMzHmZ>59l(WyxT;cZMR~E*o7iNq=$5DoOMQcj-f-?aMAy144dGfh3;g4P zVf4>af~aliXlG#uLaC>f9IMn+B_}Hgf2>u|_bG>kaJ#V_9m249M<{v_q_*6+iV(DQumOg#aX@1$oe;vjw{^;Of$UIn0+|6`1o)TB?bt z?|7HTtV5)mD~dIt&!vSmA+#g2eR5#UJ_>2eQ}a z--1ewJqk2{FVhM()dDPeckxwc9<{yI^Cifvx4iK+Vbec z2F6;(1)0`hpU9(SjO*2_kR3+7#b5?wwdvA&SK{)^4%DC5nnrE7jpTIq=OZ~Ik1ns+ zoB1Wg2E~nG42Ynoua6J&^e_VXT859HVEUr(_~e3`331lJv54<1+6g{K4*$w3-N0#YKr@5 z-u+)^BMY2yS9SiQe4yQUFMz8zozXuwEu6_%W@EqX<9aNBNuM55Mh~i)ttXbo89mv(6EhMgJhL ztyx#GNB*PWn7jT|-64KaMC-n!sj;ZOT6$7`#+!ov8ZVcq+veR-MIFse!weIMlc?=37}JTEh`M1`U_)hC~#q5fi@ z{Z-Y1xN~Rk0^d5BIM4*kY6=&8kMm!F=P3cTtPw_taXjy}=o;~FG7^&-V@oA5rx9H= z{YE3PI1~r|Rygr&BT*8ei^T^=6C)aly;0Sxv6yMczi1=|#uKX=;($?NZ9^!uw}G$7 zOw4L1CT1mOHxwhY6B}`zbB^7uiRhJ=c&@SNSu64acyL{GBQd3RWOgGlAwTg}Bhjah zdbg3-T*v;fAzcqQvLqZ8!lY9&`!&S19PyqFMd_)D4X252sc0qc1W83c zK23a{qB}k|)>pv0G)Po76k8hDADkxkHHd$V2v3WzY9vOS)?gp*3qS3_K?U-QhM4`m z-^l)~k=)&=34qOw?e81QU5#x#_i7Rz)C6})M>jQ*pEpSX>01!1sz%874N|^OlXK@# z&kMOY)H4~+vwW&wF4}Qyz+%TMu_Xt3H?4IzkCqXhp9^g{k!{(y!%TggE#7sWcLiUO zaM%#C_GgRYZ~>kVhUuPxu92&883i_=vc=aCf~Q2o2eNSqfmM->Q}Dyd*Xo!J6+SP- zt*zK4i{}9ul0eHMMkj4(v3V}j?wKP#&x+5&Rf^e3xPG3k-piGHvVV#d?VRxYIdXB% zr2zWmo`-9&a>IChtNNxwDqBOTufwu6gk$|`XB{!u|D;dg5?OU9U#zmm;CXK_fvc3u zRboLM@eVGztphpRy7O^Ca#;0+j-W^;p1axMVL01o+jz!xSRdz$5pmVKj+ho#2cQfn zt~TV0Q3-NgmdKu4M{G!_*Kn~zQti(dJu?$P4rOLOSw}3$ia&w4vLcg#WT}1mxa^aj zpUlQ!TXfG=rTJoVu6ib4%*c)4d0-y-?O7|cE3T}l75}a_?k9}&$`?=8R)=bfA+_mw zbZrc-KgUJo`J!*W+EGW2$PZ7-m(%lAS-xDBAO0X;ZpybS^W~H}t>L<@PW5(_({@*{ z5C4dIolhhufHt>!zvrZm^8Z#H(z<&c;ryg|o5mB1-@&4#tU4Xr<4_LNFbBO3&A>Iva}(Vw{Z~U#seDEVk^mUN3AR<7{k?TBO%& zDYlI*wKYYV;y`IP;yvyiZrOd>c}| za%piDXKUw?aswwOa#w0sB6CJ|MhMOU;;zy&K2>x(S9qNPU;UC}Zwi>_$-D2on+ zKqbrEC>_^b?(Dr|4{$T?8nLY{Nl{{x(yuADg5OoPwFq14wt}ocuNZppxv_Bnq}Ub< z_rp~z@$i=kG)CcN39&LBUYQUFS`J^==Dd!~B(xhCN zgkZzqOtrnXd@d8iKCvlV?ZgdZIk9!Mb28kMM zrI%upHA8%g&GiiEKE@ITv>q>Uc3QBuJReuJ;Ia@OcH_2S3XU^)KJ~Um*NjwJbj=91 zZE(%VI~H9tvdqH7m#*pf%&)cuAR(#Vrj1z)xBFYk1(uwG9c>FzYStH)?3Q8m&yeFX zENDYsmSMe{A+dt{Oi=F5sG8!^82?Pl^|rL9^jr0~xCOHycMN^pIpTlx4vrsq-p`qr z(S9=KcUauQ&;gUfgEX~(;L}&MdrOPFOKFi8D>Yc*8sV3H{TAQ>HI|p1zOs4`8RPRy zFb2Q!cAPqQq~NN@=hU8R`8}+^KZN-!&0#I<5A}h_94%5s_9>Ek-HZjSK;4%Vu0zB+ z+uN4fuW+eU7`M!P1;I6J{rnsoJzoZ+01gJ@uPWR-M9;%i6r!thRCpO~5mjf+2+8gt z6qXl4VLVQ*aUCO#@o1)bu9|*|crY>S6fwX*JTUZBv0CMgt0z{3?5_31z_9f?6pM#v z`{D3<%<5B5tcxeh%#HZC4YwM`~^~IJt@j-RP!8+ldQ2kfe9&n0$ z9sf<`H+8M=>dNu;2zjes-KS5HpE=LnPObvba>*}dgIhkxjkt9^52Vp0o|uz3cz z{Q9rP^9WoM)C~9O#PPhvN=$DK8D_PqnRq&wIC45^a_HU+nttQJp9&}DPp=M%icH)iG#kbk^$ERb;VlQYWCe%vcCg16`)hErwf!c|Er;|3_gQw$O>%_1# z#G7^1$TP%*diK0#V(=++0qk?9+zg43QxdaJ7yD1m9C*5zpNcKBYr_PY?pAqfdTt3y@exg#*|wY6=0yCeh@ z8)NR=;zHrd_SX2$!*MeHMG1+S)wz%h48Hl84M|=~pc0!3L&2~WIem|JTbgp{ zb{_6q&)nWh;Fd!?f6*umyu7LXaVxRv^ql#v#HePO(_4vY%_0NO6&sqVJuRWVnVxqw zI~(y1Zk{u>mDt^!(oozYas-?$)K@LV9Orp!3&Ibyppbi>c@08db7o|4EAjoA>Wh}5 zXCXbmR2c5pN=z@LRBbG@hMzCGp7p!Qt;F`TGU0dr*;cO$#ICb#e7wVFcY?Opa~kbE zUkq%Cfz#}k@i}e8s+P6j^VwD%4qqU9otrniwOoF#!t>^HEj;f&cYuUtZ0j&A3tQW3 zTFdRN?Srl5zSdZ&9n;31*+#z6#$MG%u5V+1)kcmx-`;h;+@63IW!Va@ zBXbh{FB08y?N2Te8*|BZPG0z_i$r;?#L|n!n%X%pT`b1uXO6pAY|BqYE!x5zX{Q;kPao+Z)+Kip1{53f>Mhwh`HTO%e-> zM7O4ik1vJ-@SMdLifyMS%Pth-nk5EaD7G|<1K-~)^74h^)iV;^+KHuSKxn;7b2Y!6 z=+hkYbtuG})lTeeu6nl<^IE8F?Zl!M5%@gVLhWlSK0i~*%={3q*ebEKNW9-leceuce6GTCpYyKW(N3(xbp>rj|JG`FTQRsbJ-^*L{#;w= z^p4DHD|)t3!`g}`+tBlKZO#M#hBnbJFBD(3u@Um{^X-Y?KR>+nV)66^YWt;P#0B?b zi2IX9-(4i8{Uko`BB=Uqbf8G=`bj>%V!yW0@$JNdwr7rMCo9|D1<}iP;k`u?ml$lh zRDM`w_*gz83=4CrL3WpoT#nHDE2r z-O2&=bX=?pko@YmP=yUaQ;Rq!SytC1ZI(Z4RlaJ984)@l?>L**^%`gN4}qOyDvB>(zw#CP;yGSJrb0+A^gQ* z3VBD^S|1g|A{L}_-;Aik5blkj1=|y`4oBn@Q8g?opN?WXR4lfW-^Jv5TaAXUPh0Jy ziy>bHJ~3|1psOEa`;zjDc;1nud@^ATO~|o{*g;HnA#t9Ns}t77gxsC54kcudWD*PH zLz1XqLd(WlW|HcgOTgdA*rVgigRaub#ZrpV+n zDa$09psh0c3`tAXoGYr@s-38hJ+33eac3De=8;YuB%!ZuZ3Ml%uOMk zYJU?D6+Y|J0OrGyZv$91QmX=DjsGRM;y7RrOm?kPt6vxCYa`FWW)3bJ_TvgloHHB; z&IJ&?f^scvA6SrBjNth&-3E^{gdfoPt{MT*SiVZX5y|`>m-#F%EYtg>do6Z_w~qY5*=dweX!5Tj5O^qDw{? z8iXc8A`v&HX55DhmV&sgRL%_AtHZJ!YV(8gL+ZgHCh>}rbCp`GQ^ZXDdfjk8?=nbKDG`j~*F9htx0qjrP11-oe zTMMyZX4&sravC;!q2$M&5ApSkCV*#VRJGVBKQz~`p^KpE`A5|!_Aji>Q+tngp_ytg z&T-mn$R&!igg6Ul48^siAmMkYayT&y-I_IS_H))+#h--uliCh#yb$n%GG2*}Ax%eT z=D|O9Z<=#Y>1@AvFl&S#@;z2>KPIHHk$$n%hxYd~Uuu+JjPa}KemSXH6ano3={CEI zberLzIdq%7=;$_EjAJYrB-{F*)NK~AQX+x2> zVrqa+AHA4i54CX$!p5L%ThQ(v!)YNKhluv6+wi%n{Le7aN-d z@z5MJ(=;&o(y(r^qvgV1fh4BQoScL-r1AE?#|!lUeEP z$vo-o$*gqtWWI3rWEMGlGCQ0-nZeb2GT5ZSp3F>VPiBv^C-bDUC-aoECo|XClj-B^ z$$aMQ$&7UNWWIFvWXh`dWS|ukdonngh&`E?tM_F3J9{$FeX93lK6CbDx@FUz%vxtp zW{R^Xv)kE|f%bgt$zYs~JsAwhu_uEC80^VluNr$YYqRNG)^=x4W{0yUgFM2X4E$nG z26w(=PiA8Ep3ER;PiCOAC$sA~dot?tgglZ^PbB5Iq%|ce%aUqkQZA!CncIw1q4u3F?D3G zI^_3>I?XW@hz!;s?+-cKU%_nU-tGNb8D{&A3(_B8Q2@!D! zkKyzr&T03$fv> z<_ZKD#2_DY*&PYYlB@#}%wiQ9*q$Nl0~|9Ak<|Ef+TC3nQp2O-82k?4Xfu`Gfm7x8^W;khR?24sn8(eM}0oe;GbXNs3? z3!1n;vlTk<4Y36Lu8PN3;!>7Gd_|^sE)nU15U>c7NjK2q`LjeA@fIhe@cTq^fQ03_ z%s9MF%?y`i%AJ|vgPF2>)^9du$u8O9LD{ljcFpn35t-XV=3&k^Lf$HHFb~4OIQxyw zPiG9Cz;xKrjesSCbZ5a0Y^oV}8dRR!qEk|XX1EXX_mg#;~nOA>Z2p%Vr; zY_O6J8&t77^O`EzUd$o#)rF$KYAc#!xOrswUcda(-_}}^jWd*MGqL{(osv)+08x}x zIJ}TcdY`&xlHRAW*`)Vr4X*RSGDJ4%eVUa?``@_LXn^0^0R{SgH4bG7hcq%tg#aXc zaIkm`mO^pHG$Bd@>cg0r9l+2R2TL)+ddgDU5ST@RG_x%=8cN_T^&Y-{h8l?Sl%a6p z&?^~gM<(r-4$7oM`&cP`GH7A!`*P4)3dur6(uz2$zbzqf;CMq)>{SXfOMOCWV5WF2 zq!z{m?(&-u7yZN5QwcFKY*k{>Gpw*Ax*<$gyB`c&@5X6BIW8uijo_ft+K3tu6WycM z!I*dvVxd{(u6WwDx4n7m^C&##fVSQBr=HOal2X`8Oyz z%1my_mVL7@+nbrC7G}v0vT)m`&F?9hi&Gz_hl z;tJKnCw^l=n*TOBMse3)NL@z=M=5s6pFywDY+sc}YJaHi|5{BAhzCed2Bfx!25>Y& zZSs?R5)=Xq^pU!NDL%E;kK>`YU>(%2w)n*ozqKNObHe8@3CJk{RKx1=S~P*Gd@k~; z9X^jU7td8#^Zp~9^?ndiLlBFfCMCvJIQ6}~MzsYmWVC}=vY--pVf@$fn(CAu8Ge~; zcd9iXrxS3fhZ@F-J{%aRx5`JlAIAG|fE8(j7z{dM9P}FOm$=%#(l4<*_=R6?so6Cn z9(>%Ha)U3kTOIMaKfE(vR9czO*1`2>s!v_9HT;>JSXa!pGb`(e?RE~HN5{i+^P%LJ zuC4q&bEJGSUzBItyK9SqIo7(`;=LTTtF~B|69MvFj@1Y1W^%1JYm33T>Xq8!)!Z=d zxcD$v0Y8wdp3N8E)`~w>SM;eJe>-2SsBOJpTYg(xy;M&Y=VSU@o^S8SmmBlPN+6Iq z8CO@XsQW8CkE|D~%4WO+`cNFM;8uHQCR**DC_d0Lu{9HYMK`P(kGJeyNoX>73iJ7; zL2DHzqQUsWOtC%K8qcHD&G{C*VNhob68Qk3FW<|J}3g6B8w+i>+;%*I6g z>zIW$Yj#`>%M@kt2#|wuYjIM%f$Nx)Vre3RyV#NLx=oJ zjt=>8jt==Tjt=?JKSYQ8vl-_=IBjLdl~o_fsasdj^%r;I5(}(%s}}>}U5Rp9ijzjD zX3+2g&GgR6>!cNY93NF7WHYmi#(^mGT;OE2{qD>YYM2Np<2vY;n*w zhr$uTIq0F3Sm;}iZ~t6|Jr)O5GpqqPA{bOJC6fXoV_AAQL=3OGeItO^=o(Ow8f zAo!6=!q+gPfmQ+EJ|MFKsziy`18ed8bcT(?g`+btD(DlmwgtrsQiUN_2P1%w1XUj; zd#S3gMrpiOUZwYizRSSA5Eh$IKG(}3K~Wr-1IrxCuFMdS^IM-G$}-f>46!UD0_5uq zH7O_$Wni2%EEvY)m|%_epyv0c@~|Eut(O*bp;Sm5FF<)fzX+_4v~UvXNr~e>WN2)4 z8}?LbU)6dI$1;7Fp%e6}RUw@1rES$O{q|6(ee`3^P<&?DkZn7dK^s)Fpf@KZ<_05h z-5a#FV534=5Qv+pBH&rBYK?=qn`#YNwrRA{%AXAJ{Y+kVUU*?Z{8#vMQsoui8Ni{l zFwWgWYZqGmy}mG7`riKVmsmsehd290zkr2SepbMmACMmhtgQjLC4hd>4Ux*Zb7t2m z=g>RW(#F|Cyd*>er((<22W|Bc3+4A$+4svkkN$Q+ z=p2ipOGEsIj{Kw7YH*J9Xx%V$_V!1WwLQ_;^M}l9#s=ibz;$X=414HDY}!MgoS+qj zkulmsUmT}B^!^FjL*J7_d*~x^Td~iY8K*t;eOXx2hnOdpFW<$Tn6!KTsh>Ey1}t1E z)GweWCLmd7Z9(%6A@hWo6R_rFLKIVNvc-V_arU#U5tzO}bxmBnZYdzEE$dm_MCt6U z_s&pXC$aZs9my6OGP2LHhrwLN)wl)T}Zq{1~(KlobPl!Pw)h{7NhpZVGa)#8f1QsEzc`@;INR7bQGHi{A zi#}oXMNEvt5t{_Gg;imK7J zm>pGPu>2fV&)ZP%L0+fX);wF5+txZ;R@%_HCHuzIGcoy8tUt>5^YLVtghXGnI9o1@ ztM}uwJdQ1axe04=Las{0aKX~yMBcD0mM))}j19mY(MfcE658f>Cgs7TwLM4n!`aA8 z`Fv(_W~MC7M1lQ0)7qOUi?gi0S+YkKdY;8uc4d|voNd3AE$3!ih;B!A^kB9eoMV5L zBbVn;DDUK;7WB!DKAT&;9`ZAJakhnXp4X}Ged4BzoI{XHePW(-k2zFZp+dh;7nYYn zUkj;{h#sKL!RQv+9LxjqUd`i|sIzNu@fz+05aI?4`irpBxFU#&<aWZPc-QpGUV7$E@k1ovdCr z#F|MfI%?h)-|I2!dpcWeAE2|vYA@-^upvhMf)9h5>Nd7o2KFD=GyR9x9pCoJMbHuV zO$<8XAWMUF$3BjZxbBXQxRH*IxUZtL?zlce>yB?mNJrf35z-O&UbJf6u{=uaj*}f7 zaci*-;I{@w1x66xMKJdaLylrqz$%a9-dY8f13Lri>xdX&g`qeAjlzfsDe6JxI&5L) zF%tc41RFf)V;5ym6w5O(Xzw4iCd4pcunt0TMNqvHM*nVALeEc7y&c9D5DG$HrN)JE z9oyv)i&E-PNbJYy6R12^*F&*ONNozqL6DjW%i%ctE5x%=^-@&69#t!%ay|AXqVh;I zAJujk?Et-DC*QZ_K07)#CcDrfk(n`jcT9d1OMV%XJ>vF?xSSMEVhwU$yg5`A#O*_I zU5lu%x?Wz>igwlAZ;PE$?3Y4b1B*&yePV`$u2I@s`^HD-GI#sr=RWHND2MUeIKljs zA3gPAzx`Z5?({bSJUCEed(;_IR_%$RJXJlrYud-rZ*@E!PRDb@oHAlz;V0kfC{D95 z9BB=Wvu$q^7&hfXH_)u=*%FNds`aU*xw8qv35%t*{+K(PXg%~_&@CTpZrvsxPNS0r z>8aj3J#pQvxjrK>eJn)5X$?x_furWxG(Ny*Zw~iX&V2G8)GJN$E&`wT9Lmqu9i8TN zBB@uZF%GG!x9Q)f`g_mzLp11OYhzqoX?<;@$)012jXVS4#*^I>a$F+1IU%PeP#mxU@lsNDO(ID%lhH1j za$PccnB?Njb)TxW9+cCnviC#Qa86WKs>ic6+6kww-wK`4BS;w+x;wXn5!7z|vu-H= z&=7&yJ+0|r%zp)`2#2->sF$cN+6W&CC!Y3QZb6yMFRXzfaf4c*M6tBq3c`=|VFc4YXfEmxSB30zQp;e1dZB1!D;o3EcnH!eMuIL+Nb7JjoPtC zfl>R^EE=_g1*7(7Fr>$BA=Y1%g`EwI+MkPy@05kRNBf1;EUeLl)JI9NAY|e4rMJ*y zCvl0Yg^5G|uzE8lMux3jkeUsvX>qYAtQJEMH>?oLcVP;Dbj0c%7po%H+Jrb1QB$xS z6UEpKV{{DWS7W3eqnlH^VU5{VJz}^yRdtDp{Wf`hI%YvR?6epr2=dj~TomLz@#LDM z?3YmEaG_}eGaET3(FHTov6Ykw2JD|^TR0$kFx%>$BadWbJiI)|UY{fP z<=7JuU#^8%m*+;;<;s1z_R2gtA&)|NB@YAk9eL4%dFkW{(1ujCC#0+B)KFKbV6iZ@ z?jh9xl97!krpoX`oa=7U>Np@+Cvhf zbZT;}wB}ow5YS1GGQ@TtU7FehtHsdc=U3}3vBHnV)q~JS79fG^ zxwt+6g4F@2=d;#j$N`pxs{kO?I*Z2U)>_hPX@8O-G3tZs@{FVF1@`3g!+*u)Uqk59 zRBND=xFNc#_4?=6zW;-=ZT}WoR;-oRg~~jvL67s1VA*^}*XJ&1;q_U?0lHuFbDyk0 zqe&yoC`Jtf{TR&0w-k>{xdQO|8w@`t7KD-Dihe( z5x>Iv8R>)SM5^^3#e55TKp{B11mgBs?Z+fX&huHzNwrdq?jLQ-kG)RzL)O8tkK=g< z)u*KAUECzZP1e>Rty8RooHnmhyceumrhoywaKSbxN+4X4fsQqdhH|}SVST^Cx&vbV z8TOkYi9Obx8FEJkdh@|S^?XoHhQ_?0d=tuQgK}+9RRp2y*}@294^4UptLXbmj#e0* z>{Ir#kenE@5Xh7eq)@kpqC>-Scc|vtH`@GT*De0B^@L>oa0hHqV|e^0^;h{&eckxd zcg-ClL%T@v5Q+xo6}ErYZIe`$$l{j}$gJ9N>V9P-mr&k(HrXJ8lG`oI#KvB;Pqwgql+Zi{%2w7o)( z{`CyCf);b^QKVKiHr$b^|0XEc2V=W~a!0UwM(wnB)q6N9gnLDj$gdNvC1*7ZKO|cG znvSEZr=@(N=F2*IvMwW)3Ria$(EMm^m2x5JpX8CYzTjDmJ#GUXdw zinVmdUdXfq(-Nj-Oe-!t)!{2*|Bj``ABQF?^DxtgNz`&FR#6`k95)@QvpGHIxpY1I$JpC3P--RI9Cq#6 zzor#eyZ(Ojhm^yhd9Q^HgHmDQj{(a{gO3K5N`ub^)+i0W61e(LuS0cMaE)n zr#%mJ@a}|Ce{7n2B#)saK!jt>%L?6MA%Cm|8mk0i+ z2fh$E#cPIh2pE+I6Zhf0Fq=6B{|m5m>G`t<{vg6>m?oV60#0SbjF+@crHl6t;OWwN z74QaW!ifQQ(s@q`u0mjc(J@qh=(`U!@Cm@u@lW)?CwbsgJn%5mLv_lGw+OiNU5xa+ z>=Djn51g9ibm^yRnl9dZfTxRh3veonW;(I9C9qU^4E{FbE$>ai)vY5$=i*1{G4XjG zIOR_|{)h)o?X-=s;Cz%B&FMh%>lm}0Ucm0UU0=<1%mf`{-IsExcF$uw)nziLvz^Ki znXlMCwHag%WVreIM}u!8-01yGd@JLBXMXB?$ds@><=CJ;y_5T-)5WmR?Wm?@w;^L- zN{oJOGW*YCk8iS_$^aRYf0W_>ZG+$R?}p;Go%F2J(+L{I$y7Y!(xRa*-NNDNe8ozP zptODeKnnkE+evf`5=eE|#39@u=$j=UOyS>cSBd_f?bLUWxyA41dw0fl{taP!1D8#d z8t-em&t`r-o_L4tR0hecXZsnhRRkYOIZwKr)MY!wSsY`Q%b&8lE{C_UJ(Kw#V*BZA zf6lNk?VNI4^!NP@3LE)NhZm&5e~xlXX*KyD^}zqk_{SWte$So=11n_WYsTHLjoSeY zzQ2Qq^5P)ly4)8`a7O?bjyR^w_%4qd<1Y1Z%HfN+>>`WpjoJQTe>Xf`9^0@xlJA%k zg?AzI>+f#zU(fDY9NunFDg$>hPGdka^j)c6Gx0Dm%7;>;zEc}a-^s*p1V(9T@z)go z-Djc`(GXHwc*WQhSp`m;IOfnxDTj7&{&92$Oq7n_jZZnq?--wg4@GT(iJysvl-ey5 z$K|=scQ)}|z^T7C@k-P~3jdM`Dg2`yb^ht5Ah&-q@%g}8g6Cd?|2kllFV8Sum&2LP zcFG?zzs8UFOhb7@ru2wgGVO^e$9}!@FGMRaP+2tb`+zr3gWu2m<;M5BmBVe%;qC)X z;x~i6CO8|8Dyw)GvH@{0@(-Z=ST;`akj z;a3^K2ZGV_Am!Nb*N#dk7DS`2dk5R44v0U^r)ja_uKPvpE;_j*;R>cVar$#Ozz5j= z3%1{n=+4G-8RLbF4?}*?vx&#>S*gyM_#Y8Yb{hO%;M7i<{C@#X-zXhUZN7>B75voZ zq{Gwk|ILG+@O1o-dGHgSj=u-+)6%4ea4O$sI(q?6_r8Ru3m=*;(!MX@>G=D3gim-n z{wF-bCp;a0e-D1b)A4r(PJN}B4-0`)yJO;S0;e*X4yUqe;%|6_Q|1v4;q4GkC6{yE zey4y@eKzsafl;4h#tV5|(JBr867X}<;NyW)e_)0~czzoEWptd4(%=E~6IZ9fA+q4K zJ7)O9fS;L$e-LnLxlI1)z)wqq&jd~_ipdYL2hkMxo0C)cck4dU-E4107MPNkQx0wJ z{A1^c?Ye!f%l6Lf{ui__XnKw@8Y{mX9}=d*7;CQ$w$qvf8FO5+fZgwNopBeX``rdIPT!WyB(~F-f{YnXQG54&%zhz-YqZJyce|VK z*$8Q(?{4BW@24@JiJyvmp}y(1sVV$duM_lP`~41zasq1O_buZEjHjlhoF|Htj4lVR z4gc#?&SMpB*blOQ8Z(hOWqQh?ZZC;7OSbFzY&*77n?UBLY)5f-%vEgH{jM1vvpH*A z^sM{k%Ej*YEL-AIFTRqc{N0xwpRbbLJH2%Rz7?)}+1tnGD_QBf7ro=sIWtmD60hTg zUXKi}%41;qy)@P9j5p47{por%m+iN3I2V9YUYd9@;|rIj@PzW>{9`^3O8sU5<99IL z3zW)Y{aGmox!d`7=LQsaU&e`tjLApsKc&OOuK-4M-o)E`;LVXKjnnX-<$<5=fkSxO zS&ud2rFJD<_}dUCwJ|3DK48?=nD|}~e5?n47jT-{nc=*K^u*KP^BAAP`F<;S$WXgL z_1eT~eoE;#@vUh8b=iUQG388;f1l*?(2|&7%<^#=F#5hG-jQ*$oKd-?^fX$Q!oS<+ z5pBnIT^@e}jM@ehf6oKYLB7y<(B#kcz*E5Mr{S*;oZ1{SoGXFT_b~B`f&T<}8K+;j zf1k4bD!7q(5&2E;Q@A`uR?)%vcgGaeMwzm+NcyX_%S!ss1~7^m>a5Ki&m$GCp4C@^~G zp$4wgyO8mw;31>&FBm_=g`F`dh2Q6cl!IuT%40g5(n$Gi@?Q-MQoG0CRQ}S1b1QHP zC-0pU{;S&*Gu+4FM&;=o=F{oBne9|g$WUFN_QAy40;Bj%{BmFvzlnDMmX7~!5B@&^ zr#v>p>F*KF5RY)i0H^#j!VjaEiAPekPs*M(H$h3ZK$r;#5x?r@>n@e|IBZ zs>_tlDU9oKLuHBZ^^EKHZ3&Fh6E08T|Je6x#W$@e`lYP(i3-&w>2WAfEPdradB->MWj3opLf z%y$m+>HIarBe?^oUNT<`C)8u(tph$PbEf|S;FN~`>|fV+ldmQCC=I2|cfLnFZNXOn zx6hf6$`2VcymsKDZ{6U%6gfNXBvF$O2Lqh-wriPBxBDg^^m04(pf~e*<-<_$Q9jIK zKHWc=;XMyN%8M_UkNRRVCf_LVQCnVrb&8xl-(xiRsIInWKHbll;k^Jp8t43l`MlBx zK~yJwQ<%@I9MSqWmA4A!YmR3!X1t{Fo5ub2niM%ZYobI=z66h#E@VD>Co(1Xd|vNS&U{VRrkrptasH1D5BC&1`Et(*_|`Jt z6y~GxJ{dE8A2HwO%;!~3ZNFPiP5R7A`VCM zQvVoDgC~xIQ#~-lp?69b4&mwesm-GHXg{atTs)Kc1AbJ-P5c^Q6uybK2S#Kjw^8{p=b!ZR67i~75G@nDyhFuk9{sqL~K6E4-W zbn*QZIQ3V(*?%_sH_OxIz-hd)i23NdkumwM1V()CG9Tp`8IzCl%^ClkfbV+d+jfF@ zZ)Cnb%$EZ@88hD7fl<7{k5c$|zbR3Z?`~kkm&JTGF~OL8RPKo{bppPJn6LQ>;(e6) zDvbShGv3FTZxmE$kx4oK)#W5{w~LqJtPYt%=pZ4}iD@a*N~VQS&PAq(X&FdfIa4q9#Lua;9&5D!^1P$nHLhvtCvLiQ2(|b@ z*P}uXzZ28;SGwVi;rD34{M7GISvPU2^XYJEN7CVU0H^Vk8P5H{nxw%y0jrk=e-K!G z5B!QWIF&nUv(0!P2bM1U8NeH-;hzaCUA%pP|11rEKVUSTGUFwj`Y{uK4p^%+cvoQ5 zKAHU8fi+5l_hNhve@ERfpA9? z#A!X4`YaQtdBsnGU$!oV|7y9CS`#Uk(N8=7*f(N#>i@}%VtdlH9uw|O2$#x-8Q&Yg zDP$8r1>+tXZZwQ>elZp2NPH8gnHRv#D>}}$>fWyHH)~DcFJuki$&(wFC zIJMvOT}}K~crQx-49=IjoPQ~%A22?Z=^BG?5!>Hj`mW*r8rzpMZOGvkFkNTx>-c9e zzJzI$Pf|!FZY*LsE6q2L-QQ+kGYJC##1RKDrgXk!ZhSm$v5 zg}4Zm%C|PUz0_3i-*~yFu5sJZ$2nZ8yJW_FmU1XQyJIG@`ybez2TJAPfsa!TLUn+Q zVmp0LGMD2=^{E%*R7S~|d^ElzJ`<;YfZorYMwLeXZZ*cuD<9yfYxd9)v5S~nY39u&k_2%>!aKJl|Kc}R@ z=K{}6gVQ!6^_!&}jvilpjD%C#&G2cPyeV)|k)nV188jQr4ME9IO>-~TAB~&#vfsP! zonTKoKidDn#fxutX@^@}YJSJ7&~8z@yEr|KIhUSmGx@h59O}bzHl^@i z-TvJGetKUMpAPIC{E9ZE@Gr!j&OcO*Zb~^%6gQc#@S`tZwkd^w#OwS+3FzjO^K>oS zQ(Ij7d2ElcU5~Q|A$?TeZem=AUk;4wmNsU+D*M1KcjZhUX8(E~(iiVXG7VK4k%J|d#@t8927I(YL18Ic4UtE zPA)8pm@1};U2b|(Oc|~!=bEoQw3U$Q#8iEra_oBCc_$K72t=pLam1fF9yQ%tayV#S z9Al0Pntz#c@J!cPT*!8sOOfe`AN7a7WxNG}Fil+|dNHp17hO+=GEQS2GF|bz6h9O1 z4oue-JRXxT#XKGvWl-WJqw`PGGUlr==nPJe?(b-xP9^?b#%U}^#^ie(80CeD{|VS> z_#I&Xr{kH-Xi!GyXV@sOOnfUaDgl3D|5xIf%q+I+azJAUYEd>D z@zDFDYY-VbQ~1ZZ2djnAVMkY>Wi{3M^D}{gTM?3#0=O|EZ@ND9w_MFPV z+03uoza_vZFHL*|^NU_?d$?yy3S2_?KXqw>@f6b>#tWF9&-ABEuV?y4rjIb~!gL7J zNlfQ3UB+}hQ@PcRzYWu0GQFGW!%QD%TFB|^&GzS+&StuV>1w7aZvVHj-N)@)5r>mt zdt;^-Fuk1VO-%1*+L`I!nNl9sG`jwmN8I+jDCW|NxJzsD(zE6lJg>U(>y*Pn-<-_h zJt>F&!TE>AU3j4KJBayiV7v<`wYgs~-i&e6|D8S_U++yh9KT?`0K%p6XY${OhKou} zNo_a%|LD1r!V8anUvs=(%FRr%7M`8qJ|#I!2k*ux}#AH1Gp$~oK>jQ^H# zdKaqam+ebA$i2=#&KV*=8_$m!;}P?`{m`K6-|Jj|$ye_Cc)53Ccg;6DufRz`)G+xU7Dt5Ve%5kl3f5l-J_i|6+-g(C`Utujb-W1ytxPyv}j<;m5YuE8Q zj`%bC^-4}xVyDaByUx+?lRDA+u>UJK0>!jQzmJD|A-iinQQM7o6sNnAX$SVN@f7E) zfSOV=?KwU(UN3hu-bami%TEw*F@HZ@Z_RkU+|76^jd)8>5O10OzMLOLOgkLl@BEER zQ@DA|$rsJXcp2NvnU2C0hh&O9{1tM1g7Z7Uv=FMt$#md&Mlr46a2!Yc>3q?&Lo=?~ zU%37&n10Un_$TbK@i!^w>DO$(5i}FOzcH@oMNhLm%6yubO1r<_V;u2yJzCr#IFMG`fwS|_ba~ME#W0h2Yr`v7^%-AGlK1U zKK=sRfA2brA|#B)0mHseIY@KHbB?(79JXK2_5!w>=ZwnPy^!5UOZWY#E|Qtfc3uA# zvK_DIn8j>&N2`z*Hu~izJ~uqKH4x%aW1fE&yW@2n^XGueuiyLcY}e}`hl8%W9_Rm; z5uX`eX4vJ|^I-G+lTp{bF~>id?Z0IE_iWei|ETTqH)Qt_Y}ex%GyXruTz*|^y0JaN z{!RWT*4l|ML4&j*I&bIr|gDw=c&HPv@r@U;SLyUFV1C{t&xg&FL9l z$L0SC+fDxS>$&b%u=}&1R5rRYuFJp4Hx)dzN7Rq`^gMb5+o}H`^J&0cpZkXKPA)7) zfKnMS@kgXv@8d;ox^%hAV7pGwkqcdS3@aT|I>0UQy4^GVoBU>YrvFN#UbN=;ERL_Y z;eIQ->vFfgp_@KkFU|L)bylj=Cf*z`kS<@|#7AkDhJQEssa-R}`2+GjUHBEqK$=sV z{Chm`!@$#pb2;!PX~MY_IF$=C{C3E=bm_cI*T z+rLiVj~(vG@J{By|Arjs!1eVcb=$9#`EW8HsNVixDF^2K(vR`SnRx$EdVQQ5v4Z;U zxJJ)6OnM#kLPh+8oA}|28a7t zz6Ri<{A+QU%l8}RTL?l@Jwb5(nsk?ZFX0NQUt=FSURTU_uS&AT&i(Ri+}0jqrP$dYh2S} zV_g@~IYv{x?pwak_3!>y$6qm?Qde!XKTSKd=k&$Xr?0~ycYdrx(Ec<{-0J!(ztg2= z{2g9$<4;M~y?_JK?^kh$i>G`pb!X?*>F@Ac7cc%5^BMjt8Q1AE<2To<%N}sU(ft2s z>4R=Qw13E@m49RUm`e*EcWEc4ny-}Yl}ro&&U{QOy14dKR}QBKyE83jTJ|H+4n5uQ zM=`BnTFF%OaorP4+cT}?_x%5bmKg6*l4*qYIgQC;xJ6--o-0^o|`)zEW4|+C!sb(&p9w#3JM&mydF9X&TKW)tM zOQ(Hq{+4if*E8dF7(lhavx#2<{MfBjWGYC_cZ4%=Df!A*8=Ho1%D=9fN?j?d;QJbcy&Aj!B6qr z!#J&(kTLma9zgS<)K{+Ls~$IMn!1Tr8>$V0b&RG}VM zzqOlwJ)imuVz~gnL2X=Izt_EpnC4B|=yYmY$l;Yurd)C7&P26)ipT4fMXtNXH5CVs zKOWcbTY6D?|7DY0oZ=*7me-Qyu6rrd4!pi`oy#t${D$x|@%F%|-k9qiR3@kfm^kH8 z>ohp+d0vEHaW^fw081KE>nCo$>vf));Q1wfCcY6E)ejS=H7%+SCY}w9%H;tLU(fR% z0hUUGQ#ojk-wF2{d7n}5H@?%>P5EXb^CClaLsUn98Tf~rq2w==5SK~VmMhGPN5NwnLlRywb@@j=Led_wE1fK zJC*%4{DJ-s;k)J_1~a^79Nw+G9^~#C2w}?2nEo2EKNCN~_yZhXM}9AA9jW}UWt`S5 z$(VdpABfMyscfgisa~hU+j`)adEi%j;MCqw_?-s3?VZ_f>vfH?0qNa4Omy4zPIFy% z-F|AS*If{WW28ZKJ6hN+y?@<~7T%fOeN>O5+gTm2rj;Yz^p!12-!By&aq&?j(!bxR zDX#w$t*dmJ;QCMT`|0>A7-zVu|IzNHUETC|DoG!I>J>MBFaKq|-G13zhb)H&8poJ8 ziKo_Fr`PE~v35+QA?L2$H8tfMwLeWOuXk&D!gAB4{b`!`jr*R(m%HxAlsA6ge|epa z-^Z)GvGXzCqxfMrT_-9prDu4&-*qnT6@KZgqsyzAzSM7A|K-hGN_{t(s{FhD_~Ex7 zw|5ZZgCG#(&0keZKcY#%cYQjLFv;`wi4Sx4Fs< zSNEg0v0eK+)pEx%uQ9IW7Rx%j{&c?@MOc^OXX4bKr^9KyLHMH++0zdyGTqMf zOQw}fI~!DoV^YocH|8&9+MQ`{rcW>}Vfr-Fp-e|G9mRAk)A39vGc9F0gXwIh^O%+~ zUBq-5)3=$HGhM^sa5%Rcvpsai%vgy@_cDrnfV_i|IW~ zJ26!pZj@<)=?}&Ca(FG7etUxOZn%2>ED?4V0!V-T=x!rTz}WF{r5~eF@6u*|H`y4(_u_sWICJaVy3H^IvZ#{{8t6=gBPyXO-z10o;UH739!Au126Qz^?2BH zE;0eOxA(w1c;KBp@L~^qlm}ksfme9oLZ){p^1zEd@G=iv=!GpKnqm)JU_B+BDfYmt z6!Mv#FrH6q^g$ET5%Yw!#;YLeg(cGyO%T$Vnv>s}?p_6&CJyP0S3%bkCeu&K1lWGE z0&qrn6x@>)fb-{M1#mOshxGtTq&WYMCJ7JxXs-WRwwg8M=O;*-=DnEPQ*Ce0_Uh)* zb)hw2GE@HS&O_YYRIHb*ZQ|hWDk=2qIW|`oj~-{UyKeS$Dc$$|k^9M=uibWZ&XB#3 z+h5)MmvR52oAF{!pFSU|n_1oMjQXA1VCrtGHNTi{rrEor8`6pITl#l(ffL=HOaImD zX;*A=?X=fMM#raD+4TDyI^w>M&d2ZBKAyunVz^hby_6QcU=FbTpbpT5f3*M7-@5r? z2H04*DL$9!+#cDr@}G1Wj`+44|Xi!`(t%`{euHIfd?J_ z3D|zH^S?V>DLF@s?^*m?-E%rgF8-kj=TMLFm-5gj<`sU?vg(mZO`Z-Pr^iJjcR#Tv zFFhAGOpjM=Odn3+r+Nf*bVy|${G&YZVh>z+q^J0_^yw5Hc&Y8d?-6gshV<{-!2>Vy zz>6ECk2mGPKWcsYcvBvDsYm_`4}Rg1p5k@sV+dj8^+$9s9;#ix4kA6*@)Y=xhsk2euYA5Nz&>G{R)wM0%;(9VO`_iFDE zPN4_h-b$aIL?At0d{g@L9G$vqTZu=!iLL41xAN2UxbTSAt6q4uS6=;b2aobuex1jH zm`8fN(&-hx*Z1|x2haTXNYBZBfy?3#Z2$k)wDTVAgJ=8i(Qf~{+w=cv?Y3t<@@VHv zJjN9X54Z`u!4r`g}-u;3dBF{GB}T zN|~O&+yig#ffsttf;8M?VwZ}MC&o2_caOag(^Kg%S zHoXp_>Cv(Oc((1G+;xl(nd*==uI(r3$sG7+a-h8~SO3@KNlw16TU<`&!^wQ09MI*! z&5f#mRrPfAgBR}6T~_T=9vzAhDHC9O`qg{)u9$RQe%LO1wSIattPUo?_LFi}oDm+| zA1CFkIDhnpyjhOY4^vN80G&@2`oW}CBk`jhiahXQ54_9+KPhO)`RcK*T6Gfq=?cMzIv(x+r z51MvjK}w33>Z10qdzC_96t?!SH7OjM;`%R6ei*YV}XL615f zO-Ww?$x>>&mZ#LTh&;iV>32~fu46atU(0uDs^vS){L}CM2ljt42Uz&6`=F_oFD3uv z$IQRGfKi@kdDiNlz|AQgFIXI7=HG2VYx+-cPoims>#gcvw-cJ)XZWvV|C&Bp<DTnX4F8>2K1kCGA3a)LQ^%`=ea!H$<%cyr(ffB}|N8rhVwSsOT4YtZI8hck|J8r} z@JRWmxr%t+t!ejrs(It?a6Oy0qwMtJnrR)jb`*mV?%`k^+a(`L5&D z<@iCk)r?=umup(6JvyOO=f4i8((o^|TpiO+_1Pm69j`{e!2^Y*(_h@Bz;Wutw6Hh7 o0DCB6s>vZd5J#Z~m}>vG8@LXwCe?A*WL?AY2Q(u)8dmZD0D1t=ApigX literal 0 HcmV?d00001 diff --git a/node_modules/@sinclair/typebox/compiler/compiler.d.ts b/node_modules/@sinclair/typebox/compiler/compiler.d.ts new file mode 100644 index 00000000..f35f75f5 --- /dev/null +++ b/node_modules/@sinclair/typebox/compiler/compiler.d.ts @@ -0,0 +1,35 @@ +import * as Types from '../typebox'; +import { ValueErrorIterator } from '../errors/index'; +export type CheckFunction = (value: unknown) => boolean; +export declare class TypeCheck { + private readonly schema; + private readonly references; + private readonly checkFunc; + private readonly code; + constructor(schema: T, references: Types.TSchema[], checkFunc: CheckFunction, code: string); + /** Returns the generated assertion code used to validate this type. */ + Code(): string; + /** Returns an iterator for each error in this value. */ + Errors(value: unknown): ValueErrorIterator; + /** Returns true if the value matches the compiled type. */ + Check(value: unknown): value is Types.Static; +} +export declare class TypeCompilerUnknownTypeError extends Error { + readonly schema: Types.TSchema; + constructor(schema: Types.TSchema); +} +export declare class TypeCompilerDereferenceError extends Error { + readonly schema: Types.TRef; + constructor(schema: Types.TRef); +} +export declare class TypeCompilerTypeGuardError extends Error { + readonly schema: Types.TSchema; + constructor(schema: Types.TSchema); +} +/** Compiles Types for Runtime Type Checking */ +export declare namespace TypeCompiler { + /** Returns the generated assertion code used to validate this type. */ + function Code(schema: T, references?: Types.TSchema[]): string; + /** Compiles the given type for runtime type checking. This compiler only accepts known TypeBox types non-inclusive of unsafe types. */ + function Compile(schema: T, references?: Types.TSchema[]): TypeCheck; +} diff --git a/node_modules/@sinclair/typebox/compiler/compiler.js b/node_modules/@sinclair/typebox/compiler/compiler.js new file mode 100644 index 00000000..b318e7d8 --- /dev/null +++ b/node_modules/@sinclair/typebox/compiler/compiler.js @@ -0,0 +1,577 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/compiler + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TypeCompiler = exports.TypeCompilerTypeGuardError = exports.TypeCompilerDereferenceError = exports.TypeCompilerUnknownTypeError = exports.TypeCheck = void 0; +const Types = require("../typebox"); +const index_1 = require("../errors/index"); +const index_2 = require("../system/index"); +const hash_1 = require("../value/hash"); +// ------------------------------------------------------------------- +// TypeCheck +// ------------------------------------------------------------------- +class TypeCheck { + constructor(schema, references, checkFunc, code) { + this.schema = schema; + this.references = references; + this.checkFunc = checkFunc; + this.code = code; + } + /** Returns the generated assertion code used to validate this type. */ + Code() { + return this.code; + } + /** Returns an iterator for each error in this value. */ + Errors(value) { + return index_1.ValueErrors.Errors(this.schema, this.references, value); + } + /** Returns true if the value matches the compiled type. */ + Check(value) { + return this.checkFunc(value); + } +} +exports.TypeCheck = TypeCheck; +// ------------------------------------------------------------------- +// Character +// ------------------------------------------------------------------- +var Character; +(function (Character) { + function DollarSign(code) { + return code === 36; + } + Character.DollarSign = DollarSign; + function IsUnderscore(code) { + return code === 95; + } + Character.IsUnderscore = IsUnderscore; + function IsAlpha(code) { + return (code >= 65 && code <= 90) || (code >= 97 && code <= 122); + } + Character.IsAlpha = IsAlpha; + function IsNumeric(code) { + return code >= 48 && code <= 57; + } + Character.IsNumeric = IsNumeric; +})(Character || (Character = {})); +// ------------------------------------------------------------------- +// MemberExpression +// ------------------------------------------------------------------- +var MemberExpression; +(function (MemberExpression) { + function IsFirstCharacterNumeric(value) { + if (value.length === 0) + return false; + return Character.IsNumeric(value.charCodeAt(0)); + } + function IsAccessor(value) { + if (IsFirstCharacterNumeric(value)) + return false; + for (let i = 0; i < value.length; i++) { + const code = value.charCodeAt(i); + const check = Character.IsAlpha(code) || Character.IsNumeric(code) || Character.DollarSign(code) || Character.IsUnderscore(code); + if (!check) + return false; + } + return true; + } + function EscapeHyphen(key) { + return key.replace(/'/g, "\\'"); + } + function Encode(object, key) { + return IsAccessor(key) ? `${object}.${key}` : `${object}['${EscapeHyphen(key)}']`; + } + MemberExpression.Encode = Encode; +})(MemberExpression || (MemberExpression = {})); +// ------------------------------------------------------------------- +// Identifier +// ------------------------------------------------------------------- +var Identifier; +(function (Identifier) { + function Encode($id) { + const buffer = []; + for (let i = 0; i < $id.length; i++) { + const code = $id.charCodeAt(i); + if (Character.IsNumeric(code) || Character.IsAlpha(code)) { + buffer.push($id.charAt(i)); + } + else { + buffer.push(`_${code}_`); + } + } + return buffer.join('').replace(/__/g, '_'); + } + Identifier.Encode = Encode; +})(Identifier || (Identifier = {})); +// ------------------------------------------------------------------- +// TypeCompiler +// ------------------------------------------------------------------- +class TypeCompilerUnknownTypeError extends Error { + constructor(schema) { + super('TypeCompiler: Unknown type'); + this.schema = schema; + } +} +exports.TypeCompilerUnknownTypeError = TypeCompilerUnknownTypeError; +class TypeCompilerDereferenceError extends Error { + constructor(schema) { + super(`TypeCompiler: Unable to dereference schema with $id '${schema.$ref}'`); + this.schema = schema; + } +} +exports.TypeCompilerDereferenceError = TypeCompilerDereferenceError; +class TypeCompilerTypeGuardError extends Error { + constructor(schema) { + super('TypeCompiler: Preflight validation check failed to guard for the given schema'); + this.schema = schema; + } +} +exports.TypeCompilerTypeGuardError = TypeCompilerTypeGuardError; +/** Compiles Types for Runtime Type Checking */ +var TypeCompiler; +(function (TypeCompiler) { + // ------------------------------------------------------------------- + // Guards + // ------------------------------------------------------------------- + function IsBigInt(value) { + return typeof value === 'bigint'; + } + function IsNumber(value) { + return typeof value === 'number' && globalThis.Number.isFinite(value); + } + function IsString(value) { + return typeof value === 'string'; + } + // ------------------------------------------------------------------- + // Polices + // ------------------------------------------------------------------- + function IsExactOptionalProperty(value, key, expression) { + return index_2.TypeSystem.ExactOptionalPropertyTypes ? `('${key}' in ${value} ? ${expression} : true)` : `(${MemberExpression.Encode(value, key)} !== undefined ? ${expression} : true)`; + } + function IsObjectCheck(value) { + return !index_2.TypeSystem.AllowArrayObjects ? `(typeof ${value} === 'object' && ${value} !== null && !Array.isArray(${value}))` : `(typeof ${value} === 'object' && ${value} !== null)`; + } + function IsRecordCheck(value) { + return !index_2.TypeSystem.AllowArrayObjects + ? `(typeof ${value} === 'object' && ${value} !== null && !Array.isArray(${value}) && !(${value} instanceof Date) && !(${value} instanceof Uint8Array))` + : `(typeof ${value} === 'object' && ${value} !== null && !(${value} instanceof Date) && !(${value} instanceof Uint8Array))`; + } + function IsNumberCheck(value) { + return !index_2.TypeSystem.AllowNaN ? `(typeof ${value} === 'number' && Number.isFinite(${value}))` : `typeof ${value} === 'number'`; + } + function IsVoidCheck(value) { + return index_2.TypeSystem.AllowVoidNull ? `(${value} === undefined || ${value} === null)` : `${value} === undefined`; + } + // ------------------------------------------------------------------- + // Types + // ------------------------------------------------------------------- + function* Any(schema, references, value) { + yield 'true'; + } + function* Array(schema, references, value) { + const expression = CreateExpression(schema.items, references, 'value'); + yield `Array.isArray(${value}) && ${value}.every(value => ${expression})`; + if (IsNumber(schema.minItems)) + yield `${value}.length >= ${schema.minItems}`; + if (IsNumber(schema.maxItems)) + yield `${value}.length <= ${schema.maxItems}`; + if (schema.uniqueItems === true) + yield `((function() { const set = new Set(); for(const element of ${value}) { const hashed = hash(element); if(set.has(hashed)) { return false } else { set.add(hashed) } } return true })())`; + } + function* BigInt(schema, references, value) { + yield `(typeof ${value} === 'bigint')`; + if (IsBigInt(schema.multipleOf)) + yield `(${value} % BigInt(${schema.multipleOf})) === 0`; + if (IsBigInt(schema.exclusiveMinimum)) + yield `${value} > BigInt(${schema.exclusiveMinimum})`; + if (IsBigInt(schema.exclusiveMaximum)) + yield `${value} < BigInt(${schema.exclusiveMaximum})`; + if (IsBigInt(schema.minimum)) + yield `${value} >= BigInt(${schema.minimum})`; + if (IsBigInt(schema.maximum)) + yield `${value} <= BigInt(${schema.maximum})`; + } + function* Boolean(schema, references, value) { + yield `typeof ${value} === 'boolean'`; + } + function* Constructor(schema, references, value) { + yield* Visit(schema.returns, references, `${value}.prototype`); + } + function* Date(schema, references, value) { + yield `(${value} instanceof Date) && Number.isFinite(${value}.getTime())`; + if (IsNumber(schema.exclusiveMinimumTimestamp)) + yield `${value}.getTime() > ${schema.exclusiveMinimumTimestamp}`; + if (IsNumber(schema.exclusiveMaximumTimestamp)) + yield `${value}.getTime() < ${schema.exclusiveMaximumTimestamp}`; + if (IsNumber(schema.minimumTimestamp)) + yield `${value}.getTime() >= ${schema.minimumTimestamp}`; + if (IsNumber(schema.maximumTimestamp)) + yield `${value}.getTime() <= ${schema.maximumTimestamp}`; + } + function* Function(schema, references, value) { + yield `typeof ${value} === 'function'`; + } + function* Integer(schema, references, value) { + yield `(typeof ${value} === 'number' && Number.isInteger(${value}))`; + if (IsNumber(schema.multipleOf)) + yield `(${value} % ${schema.multipleOf}) === 0`; + if (IsNumber(schema.exclusiveMinimum)) + yield `${value} > ${schema.exclusiveMinimum}`; + if (IsNumber(schema.exclusiveMaximum)) + yield `${value} < ${schema.exclusiveMaximum}`; + if (IsNumber(schema.minimum)) + yield `${value} >= ${schema.minimum}`; + if (IsNumber(schema.maximum)) + yield `${value} <= ${schema.maximum}`; + } + function* Intersect(schema, references, value) { + if (schema.unevaluatedProperties === undefined) { + const expressions = schema.allOf.map((schema) => CreateExpression(schema, references, value)); + yield `${expressions.join(' && ')}`; + } + else if (schema.unevaluatedProperties === false) { + // prettier-ignore + const schemaKeys = Types.KeyResolver.Resolve(schema).map((key) => `'${key}'`).join(', '); + const expressions = schema.allOf.map((schema) => CreateExpression(schema, references, value)); + const expression1 = `Object.getOwnPropertyNames(${value}).every(key => [${schemaKeys}].includes(key))`; + yield `${expressions.join(' && ')} && ${expression1}`; + } + else if (typeof schema.unevaluatedProperties === 'object') { + // prettier-ignore + const schemaKeys = Types.KeyResolver.Resolve(schema).map((key) => `'${key}'`).join(', '); + const expressions = schema.allOf.map((schema) => CreateExpression(schema, references, value)); + const expression1 = CreateExpression(schema.unevaluatedProperties, references, 'value[key]'); + const expression2 = `Object.getOwnPropertyNames(${value}).every(key => [${schemaKeys}].includes(key) || ${expression1})`; + yield `${expressions.join(' && ')} && ${expression2}`; + } + } + function* Literal(schema, references, value) { + if (typeof schema.const === 'number' || typeof schema.const === 'boolean') { + yield `${value} === ${schema.const}`; + } + else { + yield `${value} === '${schema.const}'`; + } + } + function* Never(schema, references, value) { + yield `false`; + } + function* Not(schema, references, value) { + const left = CreateExpression(schema.allOf[0].not, references, value); + const right = CreateExpression(schema.allOf[1], references, value); + yield `!${left} && ${right}`; + } + function* Null(schema, references, value) { + yield `${value} === null`; + } + function* Number(schema, references, value) { + yield IsNumberCheck(value); + if (IsNumber(schema.multipleOf)) + yield `(${value} % ${schema.multipleOf}) === 0`; + if (IsNumber(schema.exclusiveMinimum)) + yield `${value} > ${schema.exclusiveMinimum}`; + if (IsNumber(schema.exclusiveMaximum)) + yield `${value} < ${schema.exclusiveMaximum}`; + if (IsNumber(schema.minimum)) + yield `${value} >= ${schema.minimum}`; + if (IsNumber(schema.maximum)) + yield `${value} <= ${schema.maximum}`; + } + function* Object(schema, references, value) { + yield IsObjectCheck(value); + if (IsNumber(schema.minProperties)) + yield `Object.getOwnPropertyNames(${value}).length >= ${schema.minProperties}`; + if (IsNumber(schema.maxProperties)) + yield `Object.getOwnPropertyNames(${value}).length <= ${schema.maxProperties}`; + const knownKeys = globalThis.Object.getOwnPropertyNames(schema.properties); + for (const knownKey of knownKeys) { + const memberExpression = MemberExpression.Encode(value, knownKey); + const property = schema.properties[knownKey]; + if (schema.required && schema.required.includes(knownKey)) { + yield* Visit(property, references, memberExpression); + if (Types.ExtendsUndefined.Check(property)) + yield `('${knownKey}' in ${value})`; + } + else { + const expression = CreateExpression(property, references, memberExpression); + yield IsExactOptionalProperty(value, knownKey, expression); + } + } + if (schema.additionalProperties === false) { + if (schema.required && schema.required.length === knownKeys.length) { + yield `Object.getOwnPropertyNames(${value}).length === ${knownKeys.length}`; + } + else { + const keys = `[${knownKeys.map((key) => `'${key}'`).join(', ')}]`; + yield `Object.getOwnPropertyNames(${value}).every(key => ${keys}.includes(key))`; + } + } + if (typeof schema.additionalProperties === 'object') { + const expression = CreateExpression(schema.additionalProperties, references, 'value[key]'); + const keys = `[${knownKeys.map((key) => `'${key}'`).join(', ')}]`; + yield `(Object.getOwnPropertyNames(${value}).every(key => ${keys}.includes(key) || ${expression}))`; + } + } + function* Promise(schema, references, value) { + yield `(typeof value === 'object' && typeof ${value}.then === 'function')`; + } + function* Record(schema, references, value) { + yield IsRecordCheck(value); + if (IsNumber(schema.minProperties)) + yield `Object.getOwnPropertyNames(${value}).length >= ${schema.minProperties}`; + if (IsNumber(schema.maxProperties)) + yield `Object.getOwnPropertyNames(${value}).length <= ${schema.maxProperties}`; + const [keyPattern, valueSchema] = globalThis.Object.entries(schema.patternProperties)[0]; + const local = PushLocal(`new RegExp(/${keyPattern}/)`); + yield `(Object.getOwnPropertyNames(${value}).every(key => ${local}.test(key)))`; + const expression = CreateExpression(valueSchema, references, 'value'); + yield `Object.values(${value}).every(value => ${expression})`; + } + function* Ref(schema, references, value) { + const index = references.findIndex((foreign) => foreign.$id === schema.$ref); + if (index === -1) + throw new TypeCompilerDereferenceError(schema); + const target = references[index]; + // Reference: If we have seen this reference before we can just yield and return + // the function call. If this isn't the case we defer to visit to generate and + // set the function for subsequent passes. Consider for refactor. + if (state_local_function_names.has(schema.$ref)) + return yield `${CreateFunctionName(schema.$ref)}(${value})`; + yield* Visit(target, references, value); + } + function* String(schema, references, value) { + yield `(typeof ${value} === 'string')`; + if (IsNumber(schema.minLength)) + yield `${value}.length >= ${schema.minLength}`; + if (IsNumber(schema.maxLength)) + yield `${value}.length <= ${schema.maxLength}`; + if (schema.pattern !== undefined) { + const local = PushLocal(`${new RegExp(schema.pattern)};`); + yield `${local}.test(${value})`; + } + if (schema.format !== undefined) { + yield `format('${schema.format}', ${value})`; + } + } + function* Symbol(schema, references, value) { + yield `(typeof ${value} === 'symbol')`; + } + function* TemplateLiteral(schema, references, value) { + yield `(typeof ${value} === 'string')`; + const local = PushLocal(`${new RegExp(schema.pattern)};`); + yield `${local}.test(${value})`; + } + function* This(schema, references, value) { + const func = CreateFunctionName(schema.$ref); + yield `${func}(${value})`; + } + function* Tuple(schema, references, value) { + yield `(Array.isArray(${value}))`; + if (schema.items === undefined) + return yield `${value}.length === 0`; + yield `(${value}.length === ${schema.maxItems})`; + for (let i = 0; i < schema.items.length; i++) { + const expression = CreateExpression(schema.items[i], references, `${value}[${i}]`); + yield `${expression}`; + } + } + function* Undefined(schema, references, value) { + yield `${value} === undefined`; + } + function* Union(schema, references, value) { + const expressions = schema.anyOf.map((schema) => CreateExpression(schema, references, value)); + yield `(${expressions.join(' || ')})`; + } + function* Uint8Array(schema, references, value) { + yield `${value} instanceof Uint8Array`; + if (IsNumber(schema.maxByteLength)) + yield `(${value}.length <= ${schema.maxByteLength})`; + if (IsNumber(schema.minByteLength)) + yield `(${value}.length >= ${schema.minByteLength})`; + } + function* Unknown(schema, references, value) { + yield 'true'; + } + function* Void(schema, references, value) { + yield IsVoidCheck(value); + } + function* UserDefined(schema, references, value) { + const schema_key = `schema_key_${state_remote_custom_types.size}`; + state_remote_custom_types.set(schema_key, schema); + yield `custom('${schema[Types.Kind]}', '${schema_key}', ${value})`; + } + function* Visit(schema, references, value) { + const references_ = IsString(schema.$id) ? [...references, schema] : references; + const schema_ = schema; + // Reference: Referenced schemas can originate from either additional schemas + // or inline in the schema itself. Ideally the recursive path should align to + // reference path. Consider for refactor. + if (IsString(schema.$id) && !state_local_function_names.has(schema.$id)) { + state_local_function_names.add(schema.$id); + const name = CreateFunctionName(schema.$id); + const body = CreateFunction(name, schema, references, 'value'); + PushFunction(body); + yield `${name}(${value})`; + return; + } + switch (schema_[Types.Kind]) { + case 'Any': + return yield* Any(schema_, references_, value); + case 'Array': + return yield* Array(schema_, references_, value); + case 'BigInt': + return yield* BigInt(schema_, references_, value); + case 'Boolean': + return yield* Boolean(schema_, references_, value); + case 'Constructor': + return yield* Constructor(schema_, references_, value); + case 'Date': + return yield* Date(schema_, references_, value); + case 'Function': + return yield* Function(schema_, references_, value); + case 'Integer': + return yield* Integer(schema_, references_, value); + case 'Intersect': + return yield* Intersect(schema_, references_, value); + case 'Literal': + return yield* Literal(schema_, references_, value); + case 'Never': + return yield* Never(schema_, references_, value); + case 'Not': + return yield* Not(schema_, references_, value); + case 'Null': + return yield* Null(schema_, references_, value); + case 'Number': + return yield* Number(schema_, references_, value); + case 'Object': + return yield* Object(schema_, references_, value); + case 'Promise': + return yield* Promise(schema_, references_, value); + case 'Record': + return yield* Record(schema_, references_, value); + case 'Ref': + return yield* Ref(schema_, references_, value); + case 'String': + return yield* String(schema_, references_, value); + case 'Symbol': + return yield* Symbol(schema_, references_, value); + case 'TemplateLiteral': + return yield* TemplateLiteral(schema_, references_, value); + case 'This': + return yield* This(schema_, references_, value); + case 'Tuple': + return yield* Tuple(schema_, references_, value); + case 'Undefined': + return yield* Undefined(schema_, references_, value); + case 'Union': + return yield* Union(schema_, references_, value); + case 'Uint8Array': + return yield* Uint8Array(schema_, references_, value); + case 'Unknown': + return yield* Unknown(schema_, references_, value); + case 'Void': + return yield* Void(schema_, references_, value); + default: + if (!Types.TypeRegistry.Has(schema_[Types.Kind])) + throw new TypeCompilerUnknownTypeError(schema); + return yield* UserDefined(schema_, references_, value); + } + } + // ------------------------------------------------------------------- + // Compiler State + // ------------------------------------------------------------------- + const state_local_variables = new Set(); // local variables and functions + const state_local_function_names = new Set(); // local function names used call ref validators + const state_remote_custom_types = new Map(); // remote custom types used during compilation + function ResetCompiler() { + state_local_variables.clear(); + state_local_function_names.clear(); + state_remote_custom_types.clear(); + } + function CreateExpression(schema, references, value) { + return `(${[...Visit(schema, references, value)].join(' && ')})`; + } + function CreateFunctionName($id) { + return `check_${Identifier.Encode($id)}`; + } + function CreateFunction(name, schema, references, value) { + const expression = [...Visit(schema, references, value)].map((condition) => ` ${condition}`).join(' &&\n'); + return `function ${name}(value) {\n return (\n${expression}\n )\n}`; + } + function PushFunction(functionBody) { + state_local_variables.add(functionBody); + } + function PushLocal(expression) { + const local = `local_${state_local_variables.size}`; + state_local_variables.add(`const ${local} = ${expression}`); + return local; + } + function GetLocals() { + return [...state_local_variables.values()]; + } + // ------------------------------------------------------------------- + // Compile + // ------------------------------------------------------------------- + function Build(schema, references) { + ResetCompiler(); + const check = CreateFunction('check', schema, references, 'value'); + const locals = GetLocals(); + return `${locals.join('\n')}\nreturn ${check}`; + } + /** Returns the generated assertion code used to validate this type. */ + function Code(schema, references = []) { + if (!Types.TypeGuard.TSchema(schema)) + throw new TypeCompilerTypeGuardError(schema); + for (const schema of references) + if (!Types.TypeGuard.TSchema(schema)) + throw new TypeCompilerTypeGuardError(schema); + return Build(schema, references); + } + TypeCompiler.Code = Code; + /** Compiles the given type for runtime type checking. This compiler only accepts known TypeBox types non-inclusive of unsafe types. */ + function Compile(schema, references = []) { + const code = Code(schema, references); + const custom_schemas = new Map(state_remote_custom_types); + const compiledFunction = globalThis.Function('custom', 'format', 'hash', code); + const checkFunction = compiledFunction((kind, schema_key, value) => { + if (!Types.TypeRegistry.Has(kind) || !custom_schemas.has(schema_key)) + return false; + const schema = custom_schemas.get(schema_key); + const func = Types.TypeRegistry.Get(kind); + return func(schema, value); + }, (format, value) => { + if (!Types.FormatRegistry.Has(format)) + return false; + const func = Types.FormatRegistry.Get(format); + return func(value); + }, (value) => { + return hash_1.ValueHash.Create(value); + }); + return new TypeCheck(schema, references, checkFunction, code); + } + TypeCompiler.Compile = Compile; +})(TypeCompiler = exports.TypeCompiler || (exports.TypeCompiler = {})); diff --git a/node_modules/@sinclair/typebox/compiler/index.d.ts b/node_modules/@sinclair/typebox/compiler/index.d.ts new file mode 100644 index 00000000..4062a62f --- /dev/null +++ b/node_modules/@sinclair/typebox/compiler/index.d.ts @@ -0,0 +1,2 @@ +export { ValueError, ValueErrorType } from '../errors/index'; +export * from './compiler'; diff --git a/node_modules/@sinclair/typebox/compiler/index.js b/node_modules/@sinclair/typebox/compiler/index.js new file mode 100644 index 00000000..7a013c3e --- /dev/null +++ b/node_modules/@sinclair/typebox/compiler/index.js @@ -0,0 +1,47 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/compiler + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ValueErrorType = void 0; +var index_1 = require("../errors/index"); +Object.defineProperty(exports, "ValueErrorType", { enumerable: true, get: function () { return index_1.ValueErrorType; } }); +__exportStar(require("./compiler"), exports); diff --git a/node_modules/@sinclair/typebox/errors/errors.d.ts b/node_modules/@sinclair/typebox/errors/errors.d.ts new file mode 100644 index 00000000..89786c61 --- /dev/null +++ b/node_modules/@sinclair/typebox/errors/errors.d.ts @@ -0,0 +1,88 @@ +import * as Types from '../typebox'; +export declare enum ValueErrorType { + Array = 0, + ArrayMinItems = 1, + ArrayMaxItems = 2, + ArrayUniqueItems = 3, + BigInt = 4, + BigIntMultipleOf = 5, + BigIntExclusiveMinimum = 6, + BigIntExclusiveMaximum = 7, + BigIntMinimum = 8, + BigIntMaximum = 9, + Boolean = 10, + Date = 11, + DateExclusiveMinimumTimestamp = 12, + DateExclusiveMaximumTimestamp = 13, + DateMinimumTimestamp = 14, + DateMaximumTimestamp = 15, + Function = 16, + Integer = 17, + IntegerMultipleOf = 18, + IntegerExclusiveMinimum = 19, + IntegerExclusiveMaximum = 20, + IntegerMinimum = 21, + IntegerMaximum = 22, + Intersect = 23, + IntersectUnevaluatedProperties = 24, + Literal = 25, + Never = 26, + Not = 27, + Null = 28, + Number = 29, + NumberMultipleOf = 30, + NumberExclusiveMinimum = 31, + NumberExclusiveMaximum = 32, + NumberMinumum = 33, + NumberMaximum = 34, + Object = 35, + ObjectMinProperties = 36, + ObjectMaxProperties = 37, + ObjectAdditionalProperties = 38, + ObjectRequiredProperties = 39, + Promise = 40, + RecordKeyNumeric = 41, + RecordKeyString = 42, + String = 43, + StringMinLength = 44, + StringMaxLength = 45, + StringPattern = 46, + StringFormatUnknown = 47, + StringFormat = 48, + Symbol = 49, + TupleZeroLength = 50, + TupleLength = 51, + Undefined = 52, + Union = 53, + Uint8Array = 54, + Uint8ArrayMinByteLength = 55, + Uint8ArrayMaxByteLength = 56, + Void = 57, + Custom = 58 +} +export interface ValueError { + type: ValueErrorType; + schema: Types.TSchema; + path: string; + value: unknown; + message: string; +} +export declare class ValueErrorIterator { + private readonly iterator; + constructor(iterator: IterableIterator); + [Symbol.iterator](): IterableIterator; + /** Returns the first value error or undefined if no errors */ + First(): ValueError | undefined; +} +export declare class ValueErrorsUnknownTypeError extends Error { + readonly schema: Types.TSchema; + constructor(schema: Types.TSchema); +} +export declare class ValueErrorsDereferenceError extends Error { + readonly schema: Types.TRef | Types.TThis; + constructor(schema: Types.TRef | Types.TThis); +} +/** Provides functionality to generate a sequence of errors against a TypeBox type. */ +export declare namespace ValueErrors { + function Errors(schema: T, references: Types.TSchema[], value: any): ValueErrorIterator; +} diff --git a/node_modules/@sinclair/typebox/errors/errors.js b/node_modules/@sinclair/typebox/errors/errors.js new file mode 100644 index 00000000..4f7210ba --- /dev/null +++ b/node_modules/@sinclair/typebox/errors/errors.js @@ -0,0 +1,609 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ValueErrors = exports.ValueErrorsDereferenceError = exports.ValueErrorsUnknownTypeError = exports.ValueErrorIterator = exports.ValueErrorType = void 0; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/errors + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +const Types = require("../typebox"); +const index_1 = require("../system/index"); +const hash_1 = require("../value/hash"); +// ------------------------------------------------------------------- +// ValueErrorType +// ------------------------------------------------------------------- +var ValueErrorType; +(function (ValueErrorType) { + ValueErrorType[ValueErrorType["Array"] = 0] = "Array"; + ValueErrorType[ValueErrorType["ArrayMinItems"] = 1] = "ArrayMinItems"; + ValueErrorType[ValueErrorType["ArrayMaxItems"] = 2] = "ArrayMaxItems"; + ValueErrorType[ValueErrorType["ArrayUniqueItems"] = 3] = "ArrayUniqueItems"; + ValueErrorType[ValueErrorType["BigInt"] = 4] = "BigInt"; + ValueErrorType[ValueErrorType["BigIntMultipleOf"] = 5] = "BigIntMultipleOf"; + ValueErrorType[ValueErrorType["BigIntExclusiveMinimum"] = 6] = "BigIntExclusiveMinimum"; + ValueErrorType[ValueErrorType["BigIntExclusiveMaximum"] = 7] = "BigIntExclusiveMaximum"; + ValueErrorType[ValueErrorType["BigIntMinimum"] = 8] = "BigIntMinimum"; + ValueErrorType[ValueErrorType["BigIntMaximum"] = 9] = "BigIntMaximum"; + ValueErrorType[ValueErrorType["Boolean"] = 10] = "Boolean"; + ValueErrorType[ValueErrorType["Date"] = 11] = "Date"; + ValueErrorType[ValueErrorType["DateExclusiveMinimumTimestamp"] = 12] = "DateExclusiveMinimumTimestamp"; + ValueErrorType[ValueErrorType["DateExclusiveMaximumTimestamp"] = 13] = "DateExclusiveMaximumTimestamp"; + ValueErrorType[ValueErrorType["DateMinimumTimestamp"] = 14] = "DateMinimumTimestamp"; + ValueErrorType[ValueErrorType["DateMaximumTimestamp"] = 15] = "DateMaximumTimestamp"; + ValueErrorType[ValueErrorType["Function"] = 16] = "Function"; + ValueErrorType[ValueErrorType["Integer"] = 17] = "Integer"; + ValueErrorType[ValueErrorType["IntegerMultipleOf"] = 18] = "IntegerMultipleOf"; + ValueErrorType[ValueErrorType["IntegerExclusiveMinimum"] = 19] = "IntegerExclusiveMinimum"; + ValueErrorType[ValueErrorType["IntegerExclusiveMaximum"] = 20] = "IntegerExclusiveMaximum"; + ValueErrorType[ValueErrorType["IntegerMinimum"] = 21] = "IntegerMinimum"; + ValueErrorType[ValueErrorType["IntegerMaximum"] = 22] = "IntegerMaximum"; + ValueErrorType[ValueErrorType["Intersect"] = 23] = "Intersect"; + ValueErrorType[ValueErrorType["IntersectUnevaluatedProperties"] = 24] = "IntersectUnevaluatedProperties"; + ValueErrorType[ValueErrorType["Literal"] = 25] = "Literal"; + ValueErrorType[ValueErrorType["Never"] = 26] = "Never"; + ValueErrorType[ValueErrorType["Not"] = 27] = "Not"; + ValueErrorType[ValueErrorType["Null"] = 28] = "Null"; + ValueErrorType[ValueErrorType["Number"] = 29] = "Number"; + ValueErrorType[ValueErrorType["NumberMultipleOf"] = 30] = "NumberMultipleOf"; + ValueErrorType[ValueErrorType["NumberExclusiveMinimum"] = 31] = "NumberExclusiveMinimum"; + ValueErrorType[ValueErrorType["NumberExclusiveMaximum"] = 32] = "NumberExclusiveMaximum"; + ValueErrorType[ValueErrorType["NumberMinumum"] = 33] = "NumberMinumum"; + ValueErrorType[ValueErrorType["NumberMaximum"] = 34] = "NumberMaximum"; + ValueErrorType[ValueErrorType["Object"] = 35] = "Object"; + ValueErrorType[ValueErrorType["ObjectMinProperties"] = 36] = "ObjectMinProperties"; + ValueErrorType[ValueErrorType["ObjectMaxProperties"] = 37] = "ObjectMaxProperties"; + ValueErrorType[ValueErrorType["ObjectAdditionalProperties"] = 38] = "ObjectAdditionalProperties"; + ValueErrorType[ValueErrorType["ObjectRequiredProperties"] = 39] = "ObjectRequiredProperties"; + ValueErrorType[ValueErrorType["Promise"] = 40] = "Promise"; + ValueErrorType[ValueErrorType["RecordKeyNumeric"] = 41] = "RecordKeyNumeric"; + ValueErrorType[ValueErrorType["RecordKeyString"] = 42] = "RecordKeyString"; + ValueErrorType[ValueErrorType["String"] = 43] = "String"; + ValueErrorType[ValueErrorType["StringMinLength"] = 44] = "StringMinLength"; + ValueErrorType[ValueErrorType["StringMaxLength"] = 45] = "StringMaxLength"; + ValueErrorType[ValueErrorType["StringPattern"] = 46] = "StringPattern"; + ValueErrorType[ValueErrorType["StringFormatUnknown"] = 47] = "StringFormatUnknown"; + ValueErrorType[ValueErrorType["StringFormat"] = 48] = "StringFormat"; + ValueErrorType[ValueErrorType["Symbol"] = 49] = "Symbol"; + ValueErrorType[ValueErrorType["TupleZeroLength"] = 50] = "TupleZeroLength"; + ValueErrorType[ValueErrorType["TupleLength"] = 51] = "TupleLength"; + ValueErrorType[ValueErrorType["Undefined"] = 52] = "Undefined"; + ValueErrorType[ValueErrorType["Union"] = 53] = "Union"; + ValueErrorType[ValueErrorType["Uint8Array"] = 54] = "Uint8Array"; + ValueErrorType[ValueErrorType["Uint8ArrayMinByteLength"] = 55] = "Uint8ArrayMinByteLength"; + ValueErrorType[ValueErrorType["Uint8ArrayMaxByteLength"] = 56] = "Uint8ArrayMaxByteLength"; + ValueErrorType[ValueErrorType["Void"] = 57] = "Void"; + ValueErrorType[ValueErrorType["Custom"] = 58] = "Custom"; +})(ValueErrorType = exports.ValueErrorType || (exports.ValueErrorType = {})); +// ------------------------------------------------------------------- +// ValueErrorIterator +// ------------------------------------------------------------------- +class ValueErrorIterator { + constructor(iterator) { + this.iterator = iterator; + } + [Symbol.iterator]() { + return this.iterator; + } + /** Returns the first value error or undefined if no errors */ + First() { + const next = this.iterator.next(); + return next.done ? undefined : next.value; + } +} +exports.ValueErrorIterator = ValueErrorIterator; +// ------------------------------------------------------------------- +// ValueErrors +// ------------------------------------------------------------------- +class ValueErrorsUnknownTypeError extends Error { + constructor(schema) { + super('ValueErrors: Unknown type'); + this.schema = schema; + } +} +exports.ValueErrorsUnknownTypeError = ValueErrorsUnknownTypeError; +class ValueErrorsDereferenceError extends Error { + constructor(schema) { + super(`ValueErrors: Unable to dereference schema with $id '${schema.$ref}'`); + this.schema = schema; + } +} +exports.ValueErrorsDereferenceError = ValueErrorsDereferenceError; +/** Provides functionality to generate a sequence of errors against a TypeBox type. */ +var ValueErrors; +(function (ValueErrors) { + // ---------------------------------------------------------------------- + // Guards + // ---------------------------------------------------------------------- + function IsBigInt(value) { + return typeof value === 'bigint'; + } + function IsInteger(value) { + return globalThis.Number.isInteger(value); + } + function IsString(value) { + return typeof value === 'string'; + } + function IsDefined(value) { + return value !== undefined; + } + // ---------------------------------------------------------------------- + // Policies + // ---------------------------------------------------------------------- + function IsExactOptionalProperty(value, key) { + return index_1.TypeSystem.ExactOptionalPropertyTypes ? key in value : value[key] !== undefined; + } + function IsObject(value) { + const result = typeof value === 'object' && value !== null; + return index_1.TypeSystem.AllowArrayObjects ? result : result && !globalThis.Array.isArray(value); + } + function IsRecordObject(value) { + return IsObject(value) && !(value instanceof globalThis.Date) && !(value instanceof globalThis.Uint8Array); + } + function IsNumber(value) { + const result = typeof value === 'number'; + return index_1.TypeSystem.AllowNaN ? result : result && globalThis.Number.isFinite(value); + } + function IsVoid(value) { + const result = value === undefined; + return index_1.TypeSystem.AllowVoidNull ? result || value === null : result; + } + // ---------------------------------------------------------------------- + // Types + // ---------------------------------------------------------------------- + function* Any(schema, references, path, value) { } + function* Array(schema, references, path, value) { + if (!globalThis.Array.isArray(value)) { + return yield { type: ValueErrorType.Array, schema, path, value, message: `Expected array` }; + } + if (IsDefined(schema.minItems) && !(value.length >= schema.minItems)) { + yield { type: ValueErrorType.ArrayMinItems, schema, path, value, message: `Expected array length to be greater or equal to ${schema.minItems}` }; + } + if (IsDefined(schema.maxItems) && !(value.length <= schema.maxItems)) { + yield { type: ValueErrorType.ArrayMinItems, schema, path, value, message: `Expected array length to be less or equal to ${schema.maxItems}` }; + } + // prettier-ignore + if (schema.uniqueItems === true && !((function () { const set = new Set(); for (const element of value) { + const hashed = hash_1.ValueHash.Create(element); + if (set.has(hashed)) { + return false; + } + else { + set.add(hashed); + } + } return true; })())) { + yield { type: ValueErrorType.ArrayUniqueItems, schema, path, value, message: `Expected array elements to be unique` }; + } + for (let i = 0; i < value.length; i++) { + yield* Visit(schema.items, references, `${path}/${i}`, value[i]); + } + } + function* BigInt(schema, references, path, value) { + if (!IsBigInt(value)) { + return yield { type: ValueErrorType.BigInt, schema, path, value, message: `Expected bigint` }; + } + if (IsDefined(schema.multipleOf) && !(value % schema.multipleOf === globalThis.BigInt(0))) { + yield { type: ValueErrorType.BigIntMultipleOf, schema, path, value, message: `Expected bigint to be a multiple of ${schema.multipleOf}` }; + } + if (IsDefined(schema.exclusiveMinimum) && !(value > schema.exclusiveMinimum)) { + yield { type: ValueErrorType.BigIntExclusiveMinimum, schema, path, value, message: `Expected bigint to be greater than ${schema.exclusiveMinimum}` }; + } + if (IsDefined(schema.exclusiveMaximum) && !(value < schema.exclusiveMaximum)) { + yield { type: ValueErrorType.BigIntExclusiveMaximum, schema, path, value, message: `Expected bigint to be less than ${schema.exclusiveMaximum}` }; + } + if (IsDefined(schema.minimum) && !(value >= schema.minimum)) { + yield { type: ValueErrorType.BigIntMinimum, schema, path, value, message: `Expected bigint to be greater or equal to ${schema.minimum}` }; + } + if (IsDefined(schema.maximum) && !(value <= schema.maximum)) { + yield { type: ValueErrorType.BigIntMaximum, schema, path, value, message: `Expected bigint to be less or equal to ${schema.maximum}` }; + } + } + function* Boolean(schema, references, path, value) { + if (!(typeof value === 'boolean')) { + return yield { type: ValueErrorType.Boolean, schema, path, value, message: `Expected boolean` }; + } + } + function* Constructor(schema, references, path, value) { + yield* Visit(schema.returns, references, path, value.prototype); + } + function* Date(schema, references, path, value) { + if (!(value instanceof globalThis.Date)) { + return yield { type: ValueErrorType.Date, schema, path, value, message: `Expected Date object` }; + } + if (!globalThis.isFinite(value.getTime())) { + return yield { type: ValueErrorType.Date, schema, path, value, message: `Invalid Date` }; + } + if (IsDefined(schema.exclusiveMinimumTimestamp) && !(value.getTime() > schema.exclusiveMinimumTimestamp)) { + yield { type: ValueErrorType.DateExclusiveMinimumTimestamp, schema, path, value, message: `Expected Date timestamp to be greater than ${schema.exclusiveMinimum}` }; + } + if (IsDefined(schema.exclusiveMaximumTimestamp) && !(value.getTime() < schema.exclusiveMaximumTimestamp)) { + yield { type: ValueErrorType.DateExclusiveMaximumTimestamp, schema, path, value, message: `Expected Date timestamp to be less than ${schema.exclusiveMaximum}` }; + } + if (IsDefined(schema.minimumTimestamp) && !(value.getTime() >= schema.minimumTimestamp)) { + yield { type: ValueErrorType.DateMinimumTimestamp, schema, path, value, message: `Expected Date timestamp to be greater or equal to ${schema.minimum}` }; + } + if (IsDefined(schema.maximumTimestamp) && !(value.getTime() <= schema.maximumTimestamp)) { + yield { type: ValueErrorType.DateMaximumTimestamp, schema, path, value, message: `Expected Date timestamp to be less or equal to ${schema.maximum}` }; + } + } + function* Function(schema, references, path, value) { + if (!(typeof value === 'function')) { + return yield { type: ValueErrorType.Function, schema, path, value, message: `Expected function` }; + } + } + function* Integer(schema, references, path, value) { + if (!IsInteger(value)) { + return yield { type: ValueErrorType.Integer, schema, path, value, message: `Expected integer` }; + } + if (IsDefined(schema.multipleOf) && !(value % schema.multipleOf === 0)) { + yield { type: ValueErrorType.IntegerMultipleOf, schema, path, value, message: `Expected integer to be a multiple of ${schema.multipleOf}` }; + } + if (IsDefined(schema.exclusiveMinimum) && !(value > schema.exclusiveMinimum)) { + yield { type: ValueErrorType.IntegerExclusiveMinimum, schema, path, value, message: `Expected integer to be greater than ${schema.exclusiveMinimum}` }; + } + if (IsDefined(schema.exclusiveMaximum) && !(value < schema.exclusiveMaximum)) { + yield { type: ValueErrorType.IntegerExclusiveMaximum, schema, path, value, message: `Expected integer to be less than ${schema.exclusiveMaximum}` }; + } + if (IsDefined(schema.minimum) && !(value >= schema.minimum)) { + yield { type: ValueErrorType.IntegerMinimum, schema, path, value, message: `Expected integer to be greater or equal to ${schema.minimum}` }; + } + if (IsDefined(schema.maximum) && !(value <= schema.maximum)) { + yield { type: ValueErrorType.IntegerMaximum, schema, path, value, message: `Expected integer to be less or equal to ${schema.maximum}` }; + } + } + function* Intersect(schema, references, path, value) { + for (const subschema of schema.allOf) { + const next = Visit(subschema, references, path, value).next(); + if (!next.done) { + yield next.value; + yield { type: ValueErrorType.Intersect, schema, path, value, message: `Expected all sub schemas to be valid` }; + return; + } + } + if (schema.unevaluatedProperties === false) { + const schemaKeys = Types.KeyResolver.Resolve(schema); + const valueKeys = globalThis.Object.getOwnPropertyNames(value); + for (const valueKey of valueKeys) { + if (!schemaKeys.includes(valueKey)) { + yield { type: ValueErrorType.IntersectUnevaluatedProperties, schema, path: `${path}/${valueKey}`, value, message: `Unexpected property` }; + } + } + } + if (typeof schema.unevaluatedProperties === 'object') { + const schemaKeys = Types.KeyResolver.Resolve(schema); + const valueKeys = globalThis.Object.getOwnPropertyNames(value); + for (const valueKey of valueKeys) { + if (!schemaKeys.includes(valueKey)) { + const next = Visit(schema.unevaluatedProperties, references, `${path}/${valueKey}`, value[valueKey]).next(); + if (!next.done) { + yield next.value; + yield { type: ValueErrorType.IntersectUnevaluatedProperties, schema, path: `${path}/${valueKey}`, value, message: `Invalid additional property` }; + return; + } + } + } + } + } + function* Literal(schema, references, path, value) { + if (!(value === schema.const)) { + const error = typeof schema.const === 'string' ? `'${schema.const}'` : schema.const; + return yield { type: ValueErrorType.Literal, schema, path, value, message: `Expected ${error}` }; + } + } + function* Never(schema, references, path, value) { + yield { type: ValueErrorType.Never, schema, path, value, message: `Value cannot be validated` }; + } + function* Not(schema, references, path, value) { + if (Visit(schema.allOf[0].not, references, path, value).next().done === true) { + yield { type: ValueErrorType.Not, schema, path, value, message: `Value should not validate` }; + } + yield* Visit(schema.allOf[1], references, path, value); + } + function* Null(schema, references, path, value) { + if (!(value === null)) { + return yield { type: ValueErrorType.Null, schema, path, value, message: `Expected null` }; + } + } + function* Number(schema, references, path, value) { + if (!IsNumber(value)) { + return yield { type: ValueErrorType.Number, schema, path, value, message: `Expected number` }; + } + if (IsDefined(schema.multipleOf) && !(value % schema.multipleOf === 0)) { + yield { type: ValueErrorType.NumberMultipleOf, schema, path, value, message: `Expected number to be a multiple of ${schema.multipleOf}` }; + } + if (IsDefined(schema.exclusiveMinimum) && !(value > schema.exclusiveMinimum)) { + yield { type: ValueErrorType.NumberExclusiveMinimum, schema, path, value, message: `Expected number to be greater than ${schema.exclusiveMinimum}` }; + } + if (IsDefined(schema.exclusiveMaximum) && !(value < schema.exclusiveMaximum)) { + yield { type: ValueErrorType.NumberExclusiveMaximum, schema, path, value, message: `Expected number to be less than ${schema.exclusiveMaximum}` }; + } + if (IsDefined(schema.minimum) && !(value >= schema.minimum)) { + yield { type: ValueErrorType.NumberMaximum, schema, path, value, message: `Expected number to be greater or equal to ${schema.minimum}` }; + } + if (IsDefined(schema.maximum) && !(value <= schema.maximum)) { + yield { type: ValueErrorType.NumberMinumum, schema, path, value, message: `Expected number to be less or equal to ${schema.maximum}` }; + } + } + function* Object(schema, references, path, value) { + if (!IsObject(value)) { + return yield { type: ValueErrorType.Object, schema, path, value, message: `Expected object` }; + } + if (IsDefined(schema.minProperties) && !(globalThis.Object.getOwnPropertyNames(value).length >= schema.minProperties)) { + yield { type: ValueErrorType.ObjectMinProperties, schema, path, value, message: `Expected object to have at least ${schema.minProperties} properties` }; + } + if (IsDefined(schema.maxProperties) && !(globalThis.Object.getOwnPropertyNames(value).length <= schema.maxProperties)) { + yield { type: ValueErrorType.ObjectMaxProperties, schema, path, value, message: `Expected object to have less than ${schema.minProperties} properties` }; + } + const requiredKeys = globalThis.Array.isArray(schema.required) ? schema.required : []; + const knownKeys = globalThis.Object.getOwnPropertyNames(schema.properties); + const unknownKeys = globalThis.Object.getOwnPropertyNames(value); + for (const knownKey of knownKeys) { + const property = schema.properties[knownKey]; + if (schema.required && schema.required.includes(knownKey)) { + yield* Visit(property, references, `${path}/${knownKey}`, value[knownKey]); + if (Types.ExtendsUndefined.Check(schema) && !(knownKey in value)) { + yield { type: ValueErrorType.ObjectRequiredProperties, schema: property, path: `${path}/${knownKey}`, value: undefined, message: `Expected required property` }; + } + } + else { + if (IsExactOptionalProperty(value, knownKey)) { + yield* Visit(property, references, `${path}/${knownKey}`, value[knownKey]); + } + } + } + for (const requiredKey of requiredKeys) { + if (unknownKeys.includes(requiredKey)) + continue; + yield { type: ValueErrorType.ObjectRequiredProperties, schema: schema.properties[requiredKey], path: `${path}/${requiredKey}`, value: undefined, message: `Expected required property` }; + } + if (schema.additionalProperties === false) { + for (const valueKey of unknownKeys) { + if (!knownKeys.includes(valueKey)) { + yield { type: ValueErrorType.ObjectAdditionalProperties, schema, path: `${path}/${valueKey}`, value: value[valueKey], message: `Unexpected property` }; + } + } + } + if (typeof schema.additionalProperties === 'object') { + for (const valueKey of unknownKeys) { + if (knownKeys.includes(valueKey)) + continue; + yield* Visit(schema.additionalProperties, references, `${path}/${valueKey}`, value[valueKey]); + } + } + } + function* Promise(schema, references, path, value) { + if (!(typeof value === 'object' && typeof value.then === 'function')) { + yield { type: ValueErrorType.Promise, schema, path, value, message: `Expected Promise` }; + } + } + function* Record(schema, references, path, value) { + if (!IsRecordObject(value)) { + return yield { type: ValueErrorType.Object, schema, path, value, message: `Expected record object` }; + } + if (IsDefined(schema.minProperties) && !(globalThis.Object.getOwnPropertyNames(value).length >= schema.minProperties)) { + yield { type: ValueErrorType.ObjectMinProperties, schema, path, value, message: `Expected object to have at least ${schema.minProperties} properties` }; + } + if (IsDefined(schema.maxProperties) && !(globalThis.Object.getOwnPropertyNames(value).length <= schema.maxProperties)) { + yield { type: ValueErrorType.ObjectMaxProperties, schema, path, value, message: `Expected object to have less than ${schema.minProperties} properties` }; + } + const [keyPattern, valueSchema] = globalThis.Object.entries(schema.patternProperties)[0]; + const regex = new RegExp(keyPattern); + if (!globalThis.Object.getOwnPropertyNames(value).every((key) => regex.test(key))) { + const numeric = keyPattern === Types.PatternNumberExact; + const type = numeric ? ValueErrorType.RecordKeyNumeric : ValueErrorType.RecordKeyString; + const message = numeric ? 'Expected all object property keys to be numeric' : 'Expected all object property keys to be strings'; + return yield { type, schema, path, value, message }; + } + for (const [propKey, propValue] of globalThis.Object.entries(value)) { + yield* Visit(valueSchema, references, `${path}/${propKey}`, propValue); + } + } + function* Ref(schema, references, path, value) { + const index = references.findIndex((foreign) => foreign.$id === schema.$ref); + if (index === -1) + throw new ValueErrorsDereferenceError(schema); + const target = references[index]; + yield* Visit(target, references, path, value); + } + function* String(schema, references, path, value) { + if (!IsString(value)) { + return yield { type: ValueErrorType.String, schema, path, value, message: 'Expected string' }; + } + if (IsDefined(schema.minLength) && !(value.length >= schema.minLength)) { + yield { type: ValueErrorType.StringMinLength, schema, path, value, message: `Expected string length greater or equal to ${schema.minLength}` }; + } + if (IsDefined(schema.maxLength) && !(value.length <= schema.maxLength)) { + yield { type: ValueErrorType.StringMaxLength, schema, path, value, message: `Expected string length less or equal to ${schema.maxLength}` }; + } + if (schema.pattern !== undefined) { + const regex = new RegExp(schema.pattern); + if (!regex.test(value)) { + yield { type: ValueErrorType.StringPattern, schema, path, value, message: `Expected string to match pattern ${schema.pattern}` }; + } + } + if (schema.format !== undefined) { + if (!Types.FormatRegistry.Has(schema.format)) { + yield { type: ValueErrorType.StringFormatUnknown, schema, path, value, message: `Unknown string format '${schema.format}'` }; + } + else { + const format = Types.FormatRegistry.Get(schema.format); + if (!format(value)) { + yield { type: ValueErrorType.StringFormat, schema, path, value, message: `Expected string to match format '${schema.format}'` }; + } + } + } + } + function* Symbol(schema, references, path, value) { + if (!(typeof value === 'symbol')) { + return yield { type: ValueErrorType.Symbol, schema, path, value, message: 'Expected symbol' }; + } + } + function* TemplateLiteral(schema, references, path, value) { + if (!IsString(value)) { + return yield { type: ValueErrorType.String, schema, path, value, message: 'Expected string' }; + } + const regex = new RegExp(schema.pattern); + if (!regex.test(value)) { + yield { type: ValueErrorType.StringPattern, schema, path, value, message: `Expected string to match pattern ${schema.pattern}` }; + } + } + function* This(schema, references, path, value) { + const index = references.findIndex((foreign) => foreign.$id === schema.$ref); + if (index === -1) + throw new ValueErrorsDereferenceError(schema); + const target = references[index]; + yield* Visit(target, references, path, value); + } + function* Tuple(schema, references, path, value) { + if (!globalThis.Array.isArray(value)) { + return yield { type: ValueErrorType.Array, schema, path, value, message: 'Expected Array' }; + } + if (schema.items === undefined && !(value.length === 0)) { + return yield { type: ValueErrorType.TupleZeroLength, schema, path, value, message: 'Expected tuple to have 0 elements' }; + } + if (!(value.length === schema.maxItems)) { + yield { type: ValueErrorType.TupleLength, schema, path, value, message: `Expected tuple to have ${schema.maxItems} elements` }; + } + if (!schema.items) { + return; + } + for (let i = 0; i < schema.items.length; i++) { + yield* Visit(schema.items[i], references, `${path}/${i}`, value[i]); + } + } + function* Undefined(schema, references, path, value) { + if (!(value === undefined)) { + yield { type: ValueErrorType.Undefined, schema, path, value, message: `Expected undefined` }; + } + } + function* Union(schema, references, path, value) { + const errors = []; + for (const inner of schema.anyOf) { + const variantErrors = [...Visit(inner, references, path, value)]; + if (variantErrors.length === 0) + return; + errors.push(...variantErrors); + } + if (errors.length > 0) { + yield { type: ValueErrorType.Union, schema, path, value, message: 'Expected value of union' }; + } + for (const error of errors) { + yield error; + } + } + function* Uint8Array(schema, references, path, value) { + if (!(value instanceof globalThis.Uint8Array)) { + return yield { type: ValueErrorType.Uint8Array, schema, path, value, message: `Expected Uint8Array` }; + } + if (IsDefined(schema.maxByteLength) && !(value.length <= schema.maxByteLength)) { + yield { type: ValueErrorType.Uint8ArrayMaxByteLength, schema, path, value, message: `Expected Uint8Array to have a byte length less or equal to ${schema.maxByteLength}` }; + } + if (IsDefined(schema.minByteLength) && !(value.length >= schema.minByteLength)) { + yield { type: ValueErrorType.Uint8ArrayMinByteLength, schema, path, value, message: `Expected Uint8Array to have a byte length greater or equal to ${schema.maxByteLength}` }; + } + } + function* Unknown(schema, references, path, value) { } + function* Void(schema, references, path, value) { + if (!IsVoid(value)) { + return yield { type: ValueErrorType.Void, schema, path, value, message: `Expected void` }; + } + } + function* UserDefined(schema, references, path, value) { + const check = Types.TypeRegistry.Get(schema[Types.Kind]); + if (!check(schema, value)) { + return yield { type: ValueErrorType.Custom, schema, path, value, message: `Expected kind ${schema[Types.Kind]}` }; + } + } + function* Visit(schema, references, path, value) { + const references_ = IsDefined(schema.$id) ? [...references, schema] : references; + const schema_ = schema; + switch (schema_[Types.Kind]) { + case 'Any': + return yield* Any(schema_, references_, path, value); + case 'Array': + return yield* Array(schema_, references_, path, value); + case 'BigInt': + return yield* BigInt(schema_, references_, path, value); + case 'Boolean': + return yield* Boolean(schema_, references_, path, value); + case 'Constructor': + return yield* Constructor(schema_, references_, path, value); + case 'Date': + return yield* Date(schema_, references_, path, value); + case 'Function': + return yield* Function(schema_, references_, path, value); + case 'Integer': + return yield* Integer(schema_, references_, path, value); + case 'Intersect': + return yield* Intersect(schema_, references_, path, value); + case 'Literal': + return yield* Literal(schema_, references_, path, value); + case 'Never': + return yield* Never(schema_, references_, path, value); + case 'Not': + return yield* Not(schema_, references_, path, value); + case 'Null': + return yield* Null(schema_, references_, path, value); + case 'Number': + return yield* Number(schema_, references_, path, value); + case 'Object': + return yield* Object(schema_, references_, path, value); + case 'Promise': + return yield* Promise(schema_, references_, path, value); + case 'Record': + return yield* Record(schema_, references_, path, value); + case 'Ref': + return yield* Ref(schema_, references_, path, value); + case 'String': + return yield* String(schema_, references_, path, value); + case 'Symbol': + return yield* Symbol(schema_, references_, path, value); + case 'TemplateLiteral': + return yield* TemplateLiteral(schema_, references_, path, value); + case 'This': + return yield* This(schema_, references_, path, value); + case 'Tuple': + return yield* Tuple(schema_, references_, path, value); + case 'Undefined': + return yield* Undefined(schema_, references_, path, value); + case 'Union': + return yield* Union(schema_, references_, path, value); + case 'Uint8Array': + return yield* Uint8Array(schema_, references_, path, value); + case 'Unknown': + return yield* Unknown(schema_, references_, path, value); + case 'Void': + return yield* Void(schema_, references_, path, value); + default: + if (!Types.TypeRegistry.Has(schema_[Types.Kind])) + throw new ValueErrorsUnknownTypeError(schema); + return yield* UserDefined(schema_, references_, path, value); + } + } + function Errors(schema, references, value) { + const iterator = Visit(schema, references, '', value); + return new ValueErrorIterator(iterator); + } + ValueErrors.Errors = Errors; +})(ValueErrors = exports.ValueErrors || (exports.ValueErrors = {})); diff --git a/node_modules/@sinclair/typebox/errors/index.d.ts b/node_modules/@sinclair/typebox/errors/index.d.ts new file mode 100644 index 00000000..f72bc43e --- /dev/null +++ b/node_modules/@sinclair/typebox/errors/index.d.ts @@ -0,0 +1 @@ +export * from './errors'; diff --git a/node_modules/@sinclair/typebox/errors/index.js b/node_modules/@sinclair/typebox/errors/index.js new file mode 100644 index 00000000..9637155f --- /dev/null +++ b/node_modules/@sinclair/typebox/errors/index.js @@ -0,0 +1,44 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/errors + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +__exportStar(require("./errors"), exports); diff --git a/node_modules/@sinclair/typebox/license b/node_modules/@sinclair/typebox/license new file mode 100644 index 00000000..1aa53980 --- /dev/null +++ b/node_modules/@sinclair/typebox/license @@ -0,0 +1,23 @@ +TypeBox: JSON Schema Type Builder with Static Type Resolution for TypeScript + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. \ No newline at end of file diff --git a/node_modules/@sinclair/typebox/package.json b/node_modules/@sinclair/typebox/package.json new file mode 100644 index 00000000..fff6589e --- /dev/null +++ b/node_modules/@sinclair/typebox/package.json @@ -0,0 +1,47 @@ +{ + "name": "@sinclair/typebox", + "version": "0.27.8", + "description": "JSONSchema Type Builder with Static Type Resolution for TypeScript", + "keywords": [ + "typescript", + "json-schema", + "validate", + "typecheck" + ], + "author": "sinclairzx81", + "license": "MIT", + "main": "./typebox.js", + "types": "./typebox.d.ts", + "exports": { + "./compiler": "./compiler/index.js", + "./errors": "./errors/index.js", + "./system": "./system/index.js", + "./value": "./value/index.js", + ".": "./typebox.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/sinclairzx81/typebox" + }, + "scripts": { + "clean": "hammer task clean", + "format": "hammer task format", + "start": "hammer task start", + "test": "hammer task test", + "benchmark": "hammer task benchmark", + "build": "hammer task build", + "publish": "hammer task publish" + }, + "devDependencies": { + "@sinclair/hammer": "^0.17.1", + "@types/chai": "^4.3.3", + "@types/mocha": "^9.1.1", + "@types/node": "^18.11.9", + "ajv": "^8.12.0", + "ajv-formats": "^2.1.1", + "chai": "^4.3.6", + "mocha": "^9.2.2", + "prettier": "^2.7.1", + "typescript": "^5.0.2" + } +} diff --git a/node_modules/@sinclair/typebox/readme.md b/node_modules/@sinclair/typebox/readme.md new file mode 100644 index 00000000..8e71d68d --- /dev/null +++ b/node_modules/@sinclair/typebox/readme.md @@ -0,0 +1,1424 @@ +
+ +

TypeBox

+ +

JSON Schema Type Builder with Static Type Resolution for TypeScript

+ + + +
+
+ +[![npm version](https://badge.fury.io/js/%40sinclair%2Ftypebox.svg)](https://badge.fury.io/js/%40sinclair%2Ftypebox) +[![Downloads](https://img.shields.io/npm/dm/%40sinclair%2Ftypebox.svg)](https://www.npmjs.com/package/%40sinclair%2Ftypebox) +[![GitHub CI](https://github.com/sinclairzx81/typebox/workflows/GitHub%20CI/badge.svg)](https://github.com/sinclairzx81/typebox/actions) + +
+ +
+ +## Install + +#### Npm +```bash +$ npm install @sinclair/typebox --save +``` + +#### Deno +```typescript +import { Static, Type } from 'npm:@sinclair/typebox' +``` + +#### Esm + +```typescript +import { Static, Type } from 'https://esm.sh/@sinclair/typebox' +``` + +## Example + +```typescript +import { Static, Type } from '@sinclair/typebox' + +const T = Type.Object({ // const T = { + x: Type.Number(), // type: 'object', + y: Type.Number(), // required: ['x', 'y', 'z'], + z: Type.Number() // properties: { +}) // x: { type: 'number' }, + // y: { type: 'number' }, + // z: { type: 'number' } + // } + // } + +type T = Static // type T = { + // x: number, + // y: number, + // z: number + // } +``` + + + + +## Overview + +TypeBox is a runtime type builder that creates in-memory JSON Schema objects that can be statically inferred as TypeScript types. The schemas produced by this library are designed to match the static type assertion rules of the TypeScript compiler. TypeBox enables one to create a unified type that can be statically checked by TypeScript and runtime asserted using standard JSON Schema validation. + +This library is designed to enable JSON schema to compose with the same flexibility as TypeScript's type system. It can be used as a simple tool to build up complex schemas or integrated into REST or RPC services to help validate data received over the wire. + +License MIT + +## Contents +- [Install](#install) +- [Overview](#overview) +- [Usage](#usage) +- [Types](#types) + - [Standard](#types-standard) + - [Extended](#types-extended) + - [Modifiers](#types-modifiers) + - [Options](#types-options) + - [Generics](#types-generics) + - [References](#types-references) + - [Recursive](#types-recursive) + - [Conditional](#types-conditional) + - [Template Literal](#types-template-literal) + - [Guards](#types-guards) + - [Unsafe](#types-unsafe) + - [Strict](#types-strict) +- [Values](#values) + - [Create](#values-create) + - [Clone](#values-clone) + - [Check](#values-check) + - [Convert](#values-convert) + - [Cast](#values-cast) + - [Equal](#values-equal) + - [Hash](#values-hash) + - [Diff](#values-diff) + - [Patch](#values-patch) + - [Errors](#values-errors) + - [Mutate](#values-mutate) + - [Pointer](#values-pointer) +- [TypeCheck](#typecheck) + - [Ajv](#typecheck-ajv) + - [TypeCompiler](#typecheck-typecompiler) +- [TypeSystem](#typesystem) + - [Types](#typesystem-types) + - [Formats](#typesystem-formats) + - [Policies](#typesystem-policies) +- [Benchmark](#benchmark) + - [Compile](#benchmark-compile) + - [Validate](#benchmark-validate) + - [Compression](#benchmark-compression) +- [Contribute](#contribute) + + + +## Usage + +The following shows general usage. + +```typescript +import { Static, Type } from '@sinclair/typebox' + +//-------------------------------------------------------------------------------------------- +// +// Let's say you have the following type ... +// +//-------------------------------------------------------------------------------------------- + +type T = { + id: string, + name: string, + timestamp: number +} + +//-------------------------------------------------------------------------------------------- +// +// ... you can express this type in the following way. +// +//-------------------------------------------------------------------------------------------- + +const T = Type.Object({ // const T = { + id: Type.String(), // type: 'object', + name: Type.String(), // properties: { + timestamp: Type.Integer() // id: { +}) // type: 'string' + // }, + // name: { + // type: 'string' + // }, + // timestamp: { + // type: 'integer' + // } + // }, + // required: [ + // 'id', + // 'name', + // 'timestamp' + // ] + // } + +//-------------------------------------------------------------------------------------------- +// +// ... then infer back to the original static type this way. +// +//-------------------------------------------------------------------------------------------- + +type T = Static // type T = { + // id: string, + // name: string, + // timestamp: number + // } + +//-------------------------------------------------------------------------------------------- +// +// ... then use the type both as JSON schema and as a TypeScript type. +// +//-------------------------------------------------------------------------------------------- + +import { Value } from '@sinclair/typebox/value' + +function receive(value: T) { // ... as a Static Type + + if(Value.Check(T, value)) { // ... as a JSON Schema + + // ok... + } +} +``` + + + +## Types + +TypeBox types are JSON schema fragments that can be composed into more complex types. Each fragment is structured such that a JSON schema compliant validator can runtime assert a value the same way TypeScript will statically assert a type. TypeBox provides a set of Standard types which are used create JSON schema compliant schematics as well as an Extended type set used to create schematics for constructs native to JavaScript. + + + +### Standard Types + +The following table lists the Standard TypeBox types. These types are fully compatible with the JSON Schema Draft 6 specification. + +```typescript +┌────────────────────────────────┬─────────────────────────────┬────────────────────────────────┐ +│ TypeBox │ TypeScript │ JSON Schema │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Any() │ type T = any │ const T = { } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Unknown() │ type T = unknown │ const T = { } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.String() │ type T = string │ const T = { │ +│ │ │ type: 'string' │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Number() │ type T = number │ const T = { │ +│ │ │ type: 'number' │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Integer() │ type T = number │ const T = { │ +│ │ │ type: 'integer' │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Boolean() │ type T = boolean │ const T = { │ +│ │ │ type: 'boolean' │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Null() │ type T = null │ const T = { │ +│ │ │ type: 'null' │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Literal(42) │ type T = 42 │ const T = { │ +│ │ │ const: 42, │ +│ │ │ type: 'number' │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Array( │ type T = number[] │ const T = { │ +│ Type.Number() │ │ type: 'array', │ +│ ) │ │ items: { │ +│ │ │ type: 'number' │ +│ │ │ } │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Object({ │ type T = { │ const T = { │ +│ x: Type.Number(), │ x: number, │ type: 'object', │ +│ y: Type.Number() │ y: number │ required: ['x', 'y'], │ +│ }) │ } │ properties: { │ +│ │ │ x: { │ +│ │ │ type: 'number' │ +│ │ │ }, { │ +│ │ │ type: 'number' │ +│ │ │ } │ +│ │ │ } │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Tuple([ │ type T = [number, number] │ const T = { │ +│ Type.Number(), │ │ type: 'array', │ +│ Type.Number() │ │ items: [{ │ +│ ]) │ │ type: 'number' │ +│ │ │ }, { │ +│ │ │ type: 'number' │ +│ │ │ }], │ +│ │ │ additionalItems: false, │ +│ │ │ minItems: 2, │ +│ │ │ maxItems: 2 │ +│ │ │ } │ +│ │ │ │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ enum Foo { │ enum Foo { │ const T = { │ +│ A, │ A, │ anyOf: [{ │ +│ B │ B │ type: 'number', │ +│ } │ } │ const: 0 │ +│ │ │ }, { │ +│ const T = Type.Enum(Foo) │ type T = Foo │ type: 'number', │ +│ │ │ const: 1 │ +│ │ │ }] │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.KeyOf( │ type T = keyof { │ const T = { │ +│ Type.Object({ │ x: number, │ anyOf: [{ │ +│ x: Type.Number(), │ y: number │ type: 'string', │ +│ y: Type.Number() │ } │ const: 'x' │ +│ }) │ │ }, { │ +│ ) │ │ type: 'string', │ +│ │ │ const: 'y' │ +│ │ │ }] │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Union([ │ type T = string | number │ const T = { │ +│ Type.String(), │ │ anyOf: [{ │ +│ Type.Number() │ │ type: 'string' │ +│ ]) │ │ }, { │ +│ │ │ type: 'number' │ +│ │ │ }] │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Intersect([ │ type T = { │ const T = { │ +│ Type.Object({ │ x: number │ allOf: [{ │ +│ x: Type.Number() │ } & { │ type: 'object', │ +│ }), │ y: number │ required: ['x'], │ +│ Type.Object({ │ } │ properties: { │ +│ y: Type.Number() │ │ x: { │ +│ ]) │ │ type: 'number' │ +│ ]) │ │ } │ +│ │ │ } │ +│ │ │ }, { │ +│ │ │ type: 'object', | +│ │ │ required: ['y'], │ +│ │ │ properties: { │ +│ │ │ y: { │ +│ │ │ type: 'number' │ +│ │ │ } │ +│ │ │ } │ +│ │ │ }] │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Composite([ │ type I = { │ const T = { │ +│ Type.Object({ │ x: number │ type: 'object', │ +│ x: Type.Number() │ } & { │ required: ['x', 'y'], │ +│ }), │ y: number │ properties: { │ +│ Type.Object({ │ } │ x: { │ +│ y: Type.Number() │ │ type: 'number' │ +│ }) │ type T = { │ }, │ +│ ]) │ [K in keyof I]: I[K] │ y: { │ +│ │ } │ type: 'number' │ +│ │ │ } │ +│ │ │ } │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Never() │ type T = never │ const T = { │ +│ │ │ not: {} │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Not( | type T = string │ const T = { │ +| Type.Union([ │ │ allOf: [{ │ +│ Type.Literal('x'), │ │ not: { │ +│ Type.Literal('y'), │ │ anyOf: [ │ +│ Type.Literal('z') │ │ { const: 'x' }, │ +│ ]), │ │ { const: 'y' }, │ +│ Type.String() │ │ { const: 'z' } │ +│ ) │ │ ] │ +│ │ │ } │ +│ │ │ }, { │ +│ │ │ type: 'string' │ +│ │ │ }] │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Extends( │ type T = │ const T = { │ +│ Type.String(), │ string extends number │ const: false, │ +│ Type.Number(), │ true : false │ type: 'boolean' │ +│ Type.Literal(true), │ │ } │ +│ Type.Literal(false) │ │ │ +│ ) │ │ │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Extract( │ type T = Extract< │ const T = { │ +│ Type.Union([ │ string | number, │ type: 'string' │ +│ Type.String(), │ string │ } │ +│ Type.Number(), │ > │ │ +│ ]), │ │ │ +│ Type.String() │ │ │ +│ ) │ │ │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Exclude( │ type T = Exclude< │ const T = { │ +│ Type.Union([ │ string | number, │ type: 'number' │ +│ Type.String(), │ string │ } │ +│ Type.Number(), │ > │ │ +│ ]), │ │ │ +│ Type.String() │ │ │ +│ ) │ │ │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const U = Type.Union([ │ type U = 'open' | 'close' │ const T = { │ +│ Type.Literal('open'), │ │ type: 'string', │ +│ Type.Literal('close') │ type T = `on${U}` │ pattern: '^on(open|close)$' │ +│ ]) │ │ } │ +│ │ │ │ +│ const T = Type │ │ │ +│ .TemplateLiteral([ │ │ │ +│ Type.Literal('on'), │ │ │ +│ U │ │ │ +│ ]) │ │ │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Record( │ type T = Record< │ const T = { │ +│ Type.String(), │ string, │ type: 'object', │ +│ Type.Number() │ number │ patternProperties: { │ +│ ) │ > │ '^.*$': { │ +│ │ │ type: 'number' │ +│ │ │ } │ +│ │ │ } │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Partial( │ type T = Partial<{ │ const T = { │ +│ Type.Object({ │ x: number, │ type: 'object', │ +│ x: Type.Number(), │ y: number │ properties: { │ +│ y: Type.Number() | }> │ x: { │ +│ }) │ │ type: 'number' │ +│ ) │ │ }, │ +│ │ │ y: { │ +│ │ │ type: 'number' │ +│ │ │ } │ +│ │ │ } │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Required( │ type T = Required<{ │ const T = { │ +│ Type.Object({ │ x?: number, │ type: 'object', │ +│ x: Type.Optional( │ y?: number │ required: ['x', 'y'], │ +│ Type.Number() | }> │ properties: { │ +│ ), │ │ x: { │ +│ y: Type.Optional( │ │ type: 'number' │ +│ Type.Number() │ │ }, │ +│ ) │ │ y: { │ +│ }) │ │ type: 'number' │ +│ ) │ │ } │ +│ │ │ } │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Pick( │ type T = Pick<{ │ const T = { │ +│ Type.Object({ │ x: number, │ type: 'object', │ +│ x: Type.Number(), │ y: number │ required: ['x'], │ +│ y: Type.Number() │ }, 'x'> │ properties: { │ +│ }), ['x'] | │ x: { │ +│ ) │ │ type: 'number' │ +│ │ │ } │ +│ │ │ } │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Omit( │ type T = Omit<{ │ const T = { │ +│ Type.Object({ │ x: number, │ type: 'object', │ +│ x: Type.Number(), │ y: number │ required: ['y'], │ +│ y: Type.Number() │ }, 'x'> │ properties: { │ +│ }), ['x'] | │ y: { │ +│ ) │ │ type: 'number' │ +│ │ │ } │ +│ │ │ } │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Object({ │ type T = { │ const R = { │ +│ x: Type.Number(), │ x: number, │ $ref: 'T' │ +│ y: Type.Number() │ y: number │ } │ +│ }, { $id: 'T' }) | } │ │ +│ │ │ │ +│ const R = Type.Ref(T) │ type R = T │ │ +│ │ │ │ +│ │ │ │ +│ │ │ │ +│ │ │ │ +└────────────────────────────────┴─────────────────────────────┴────────────────────────────────┘ +``` + + + +### Extended Types + +TypeBox provides several extended types that can be used to produce schematics for common JavaScript constructs. These types can not be used with standard JSON schema validators; but are useful to help frame schematics for RPC interfaces that may receive JSON validated data. Extended types are prefixed with the `[Extended]` doc comment for convenience. The following table lists the supported types. + +```typescript +┌────────────────────────────────┬─────────────────────────────┬────────────────────────────────┐ +│ TypeBox │ TypeScript │ Extended Schema │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Constructor([ │ type T = new ( │ const T = { │ +│ Type.String(), │ arg0: string, │ type: 'object', │ +│ Type.Number() │ arg1: number │ instanceOf: 'Constructor', │ +│ ], Type.Boolean()) │ ) => boolean │ parameters: [{ │ +│ │ │ type: 'string' │ +│ │ │ }, { │ +│ │ │ type: 'number' │ +│ │ │ }], │ +│ │ │ return: { │ +│ │ │ type: 'boolean' │ +│ │ │ } │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Function([ │ type T = ( │ const T = { │ +| Type.String(), │ arg0: string, │ type : 'object', │ +│ Type.Number() │ arg1: number │ instanceOf: 'Function', │ +│ ], Type.Boolean()) │ ) => boolean │ parameters: [{ │ +│ │ │ type: 'string' │ +│ │ │ }, { │ +│ │ │ type: 'number' │ +│ │ │ }], │ +│ │ │ return: { │ +│ │ │ type: 'boolean' │ +│ │ │ } │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Promise( │ type T = Promise │ const T = { │ +│ Type.String() │ │ type: 'object', │ +│ ) │ │ instanceOf: 'Promise', │ +│ │ │ item: { │ +│ │ │ type: 'string' │ +│ │ │ } │ +│ │ │ } │ +│ │ │ │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Uint8Array() │ type T = Uint8Array │ const T = { │ +│ │ │ type: 'object', │ +│ │ │ instanceOf: 'Uint8Array' │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Date() │ type T = Date │ const T = { │ +│ │ │ type: 'object', │ +│ │ │ instanceOf: 'Date' │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Undefined() │ type T = undefined │ const T = { │ +│ │ │ type: 'null', │ +│ │ │ typeOf: 'Undefined' │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.RegEx(/foo/) │ type T = string │ const T = { │ +│ │ │ type: 'string', │ +│ │ │ pattern: 'foo' │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Symbol() │ type T = symbol │ const T = { │ +│ │ │ type: 'null', │ +│ │ │ typeOf: 'Symbol' │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.BigInt() │ type T = bigint │ const T = { │ +│ │ │ type: 'null', │ +│ │ │ typeOf: 'BigInt' │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Void() │ type T = void │ const T = { │ +│ │ │ type: 'null' │ +│ │ │ typeOf: 'Void' │ +│ │ │ } │ +│ │ │ │ +└────────────────────────────────┴─────────────────────────────┴────────────────────────────────┘ +``` + + + +### Modifiers + +TypeBox provides modifiers that allow schema properties to be statically inferred as `readonly` or `optional`. The following table shows the supported modifiers and how they map between TypeScript and JSON Schema. + +```typescript +┌────────────────────────────────┬─────────────────────────────┬────────────────────────────────┐ +│ TypeBox │ TypeScript │ JSON Schema │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Object({ │ type T = { │ const T = { │ +│ name: Type.Optional( │ name?: string │ type: 'object', │ +│ Type.String() │ } │ properties: { │ +│ ) │ │ name: { │ +│ }) │ │ type: 'string' │ +│ │ │ } │ +│ │ │ } │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Object({ │ type T = { │ const T = { │ +│ name: Type.Readonly( │ readonly name: string │ type: 'object', │ +│ Type.String() │ } │ properties: { │ +│ ) │ │ name: { │ +│ }) │ │ type: 'string' │ +│ │ │ } │ +│ │ │ }, │ +│ │ │ required: ['name'] │ +│ │ │ } │ +│ │ │ │ +├────────────────────────────────┼─────────────────────────────┼────────────────────────────────┤ +│ const T = Type.Object({ │ type T = { │ const T = { │ +│ name: Type.ReadonlyOptional( │ readonly name?: string │ type: 'object', │ +│ Type.String() │ } │ properties: { │ +│ ) │ │ name: { │ +│ }) │ │ type: 'string' │ +│ │ │ } │ +│ │ │ } │ +│ │ │ } │ +│ │ │ │ +└────────────────────────────────┴─────────────────────────────┴────────────────────────────────┘ +``` + + + +### Options + +You can pass JSON Schema options on the last argument of any type. Option hints specific to each type are provided for convenience. + +```typescript +// String must be an email +const T = Type.String({ // const T = { + format: 'email' // type: 'string', +}) // format: 'email' + // } + +// Mumber must be a multiple of 2 +const T = Type.Number({ // const T = { + multipleOf: 2 // type: 'number', +}) // multipleOf: 2 + // } + +// Array must have at least 5 integer values +const T = Type.Array(Type.Integer(), { // const T = { + minItems: 5 // type: 'array', +}) // minItems: 5, + // items: { + // type: 'integer' + // } + // } + +``` + + + +### Generic Types + +Generic types can be created with generic functions constrained to type `TSchema`. The following creates a generic `Vector` type. + +```typescript +import { Type, Static, TSchema } from '@sinclair/typebox' + +const Vector = (t: T) => Type.Object({ x: t, y: t, z: t }) + +const NumberVector = Vector(Type.Number()) // const NumberVector = { + // type: 'object', + // required: ['x', 'y', 'z'], + // properties: { + // x: { type: 'number' }, + // y: { type: 'number' }, + // z: { type: 'number' } + // } + // } + +type NumberVector = Static // type NumberVector = { + // x: number, + // y: number, + // z: number + // } + +const BooleanVector = Vector(Type.Boolean()) // const BooleanVector = { + // type: 'object', + // required: ['x', 'y', 'z'], + // properties: { + // x: { type: 'boolean' }, + // y: { type: 'boolean' }, + // z: { type: 'boolean' } + // } + // } + +type BooleanVector = Static // type BooleanVector = { + // x: boolean, + // y: boolean, + // z: boolean + // } +``` + +The following creates a generic `Nullable` type. + +```typescript +const Nullable = (schema: T) => Type.Union([schema, Type.Null()]) + +const T = Nullable(Type.String()) // const T = { + // anyOf: [ + // { type: 'string' }, + // { type: 'null' } + // ] + // } + +type T = Static // type T = string | null +``` + + + +### Reference Types + +Reference types are supported with `Type.Ref`. The target type must specify a valid `$id`. + +```typescript +const T = Type.String({ $id: 'T' }) // const T = { + // $id: 'T', + // type: 'string' + // } + +const R = Type.Ref(T) // const R = { + // $ref: 'T' + // } +``` + + + +### Recursive Types + +Recursive types are supported with `Type.Recursive` + +```typescript +const Node = Type.Recursive(Node => Type.Object({ // const Node = { + id: Type.String(), // $id: 'Node', + nodes: Type.Array(Node) // type: 'object', +}), { $id: 'Node' }) // properties: { + // id: { + // type: 'string' + // }, + // nodes: { + // type: 'array', + // items: { + // $ref: 'Node' + // } + // } + // }, + // required: [ + // 'id', + // 'nodes' + // ] + // } + +type Node = Static // type Node = { + // id: string + // nodes: Node[] + // } + +function test(node: Node) { + const id = node.nodes[0].nodes[0].id // id is string +} +``` + + + +### Conditional Types + +Conditional types are supported with `Type.Extends`, `Type.Exclude` and `Type.Extract` + +```typescript +// TypeScript + +type T0 = string extends number ? true : false // type T0 = false + +type T1 = Extract // type T1 = number + +type T2 = Exclude // type T2 = string + +// TypeBox + +const T0 = Type.Extends(Type.String(), Type.Number(), Type.Literal(true), Type.Literal(false)) + +const T1 = Type.Extract(Type.Union([Type.String(), Type.Number()]), Type.Number()) + +const T2 = Type.Exclude(Type.Union([Type.String(), Type.Number()]), Type.Number()) + + +type T0 = Static // type T0 = false + +type T1 = Static // type T1 = number + +type T2 = Static // type T2 = string +``` + + + +### Template Literal Types + +Template Literal types are supported with `Type.TemplateLiteral` + +```typescript +// TypeScript + +type T = `option${'A'|'B'}` // type T = 'optionA' | 'optionB' + +type R = Record // type R = { + // optionA: string + // optionB: string + // } + +// TypeBox + +const T = Type.TemplateLiteral([ // const T = { + Type.Literal('option'), // pattern: '^option(A|B)$', + Type.Union([ // type: 'string' + Type.Literal('A'), // } + Type.Literal('B') + ]) +]) + +const R = Type.Record(T, Type.String()) // const R = { + // type: 'object', + // required: ['optionA', 'optionB'], + // properties: { + // optionA: { + // type: 'string' + // }, + // optionB: { + // type: 'string' + // } + // } + // } + +type T = Static // type T = 'optionA' | 'optionB' + +type R = Static // type R = { + // optionA: string + // optionB: string + // } +``` + + + +### Unsafe + +Use `Type.Unsafe` to create custom schematics with user defined inference rules. + +```typescript +const T = Type.Unsafe({ type: 'number' }) // const T = { + // type: 'number' + // } + +type T = Static // type T = string +``` + +The `Type.Unsafe` type can be useful to express specific OpenAPI schema representations. + +```typescript +import { Type, Static, TSchema } from '@sinclair/typebox' + +// Nullable + +function Nullable(schema: T) { + return Type.Unsafe | null>({ ...schema, nullable: true }) +} + +const T = Nullable(Type.String()) // const T = { + // type: 'string', + // nullable: true + // } + +type T = Static // type T = string | null + +// StringEnum + +function StringEnum(values: [...T]) { + return Type.Unsafe({ type: 'string', enum: values }) +} + +const T = StringEnum(['A', 'B', 'C']) // const T = { + // enum: ['A', 'B', 'C'] + // } + +type T = Static // type T = 'A' | 'B' | 'C' +``` + + + +### Guards + +TypeBox provides a `TypeGuard` module that can be used for reflection and asserting values as types. + +```typescript +import { Type, TypeGuard } from '@sinclair/typebox' + +const T = Type.String() + +if(TypeGuard.TString(T)) { + + // T is TString +} +``` + + + +### Strict + +TypeBox schemas contain the `Kind` and `Modifier` symbol properties. These properties are used for type composition and reflection. These properties are not strictly valid JSON schema; so in some cases it may be desirable to omit them. TypeBox provides a `Type.Strict` function that will omit these properties if necessary. + +```typescript +const T = Type.Object({ // const T = { + name: Type.Optional(Type.String()) // [Kind]: 'Object', +}) // type: 'object', + // properties: { + // name: { + // [Kind]: 'String', + // type: 'string', + // [Modifier]: 'Optional' + // } + // } + // } + +const U = Type.Strict(T) // const U = { + // type: 'object', + // properties: { + // name: { + // type: 'string' + // } + // } + // } +``` + + + +## Values + +TypeBox provides an optional utility module that can be used to perform common operations on JavaScript values. This module includes functionality to create, check and cast values from types as well as check equality, clone, diff and patch JavaScript values. This module is provided via optional import. + +```typescript +import { Value } from '@sinclair/typebox/value' +``` + + + +### Create + +Use the Create function to create a value from a type. TypeBox will use default values if specified. + +```typescript +const T = Type.Object({ x: Type.Number(), y: Type.Number({ default: 42 }) }) + +const A = Value.Create(T) // const A = { x: 0, y: 42 } +``` + + + +### Clone + +Use the Clone function to deeply clone a value + +```typescript +const A = Value.Clone({ x: 1, y: 2, z: 3 }) // const A = { x: 1, y: 2, z: 3 } +``` + + + +### Check + +Use the Check function to type check a value + +```typescript +const T = Type.Object({ x: Type.Number() }) + +const R = Value.Check(T, { x: 1 }) // const R = true +``` + + + +### Convert + +Use the Convert function to convert a value into its target type if a reasonable conversion is possible. + +```typescript +const T = Type.Object({ x: Type.Number() }) + +const R1 = Value.Convert(T, { x: '3.14' }) // const R1 = { x: 3.14 } + +const R2 = Value.Convert(T, { x: 'not a number' }) // const R2 = { x: 'not a number' } +``` + + + +### Cast + +Use the Cast function to cast a value into a type. The cast function will retain as much information as possible from the original value. + +```typescript +const T = Type.Object({ x: Type.Number(), y: Type.Number() }, { additionalProperties: false }) + +const X = Value.Cast(T, null) // const X = { x: 0, y: 0 } + +const Y = Value.Cast(T, { x: 1 }) // const Y = { x: 1, y: 0 } + +const Z = Value.Cast(T, { x: 1, y: 2, z: 3 }) // const Z = { x: 1, y: 2 } +``` + + + +### Equal + +Use the Equal function to deeply check for value equality. + +```typescript +const R = Value.Equal( // const R = true + { x: 1, y: 2, z: 3 }, + { x: 1, y: 2, z: 3 } +) +``` + + + +### Hash + +Use the Hash function to create a [FNV1A-64](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function) non cryptographic hash of a value. + +```typescript +const A = Value.Hash({ x: 1, y: 2, z: 3 }) // const A = 2910466848807138541n + +const B = Value.Hash({ x: 1, y: 4, z: 3 }) // const B = 1418369778807423581n +``` + + + +### Diff + +Use the Diff function to produce a sequence of edits to transform one value into another. + +```typescript +const E = Value.Diff( // const E = [ + { x: 1, y: 2, z: 3 }, // { type: 'update', path: '/y', value: 4 }, + { y: 4, z: 5, w: 6 } // { type: 'update', path: '/z', value: 5 }, +) // { type: 'insert', path: '/w', value: 6 }, + // { type: 'delete', path: '/x' } + // ] +``` + + + +### Patch + +Use the Patch function to apply edits + +```typescript +const A = { x: 1, y: 2 } + +const B = { x: 3 } + +const E = Value.Diff(A, B) // const E = [ + // { type: 'update', path: '/x', value: 3 }, + // { type: 'delete', path: '/y' } + // ] + +const C = Value.Patch(A, E) // const C = { x: 3 } +``` + + + +### Errors + +Use the Errors function enumerate validation errors. + +```typescript +const T = Type.Object({ x: Type.Number(), y: Type.Number() }) + +const R = [...Value.Errors(T, { x: '42' })] // const R = [{ + // schema: { type: 'number' }, + // path: '/x', + // value: '42', + // message: 'Expected number' + // }, { + // schema: { type: 'number' }, + // path: '/y', + // value: undefined, + // message: 'Expected number' + // }] +``` + + + +### Mutate + +Use the Mutate function to perform a deep mutable value assignment while retaining internal references. + +```typescript +const Y = { z: 1 } // const Y = { z: 1 } + +const X = { y: Y } // const X = { y: { z: 1 } } + +const A = { x: X } // const A = { x: { y: { z: 1 } } } + + +Value.Mutate(A, { x: { y: { z: 2 } } }) // const A' = { x: { y: { z: 2 } } } + +const R0 = A.x.y.z === 2 // const R0 = 2 + +const R1 = A.x.y === Y // const R1 = true + +const R2 = A.x === X // const R2 = true +``` + + + +### Pointer + +Use ValuePointer to perform mutable updates on existing values using [RFC6901](https://www.rfc-editor.org/rfc/rfc6901) JSON Pointers. + +```typescript +import { ValuePointer } from '@sinclair/typebox/value' + +const A = { x: 0, y: 0, z: 0 } + +ValuePointer.Set(A, '/x', 1) // const A' = { x: 1, y: 0, z: 0 } + +ValuePointer.Set(A, '/y', 1) // const A' = { x: 1, y: 1, z: 0 } + +ValuePointer.Set(A, '/z', 1) // const A' = { x: 1, y: 1, z: 1 } +``` + + + +## TypeCheck + +TypeBox types target JSON Schema draft 6 so are compatible with any validator that supports this specification. TypeBox also provides a built in type checking compiler designed specifically for high performance compilation and value assertion. + +The following sections detail using Ajv and TypeBox's compiler infrastructure. + + + +## Ajv + +The following shows the recommended setup for Ajv. + +```bash +$ npm install ajv ajv-formats --save +``` + +```typescript +import { Type } from '@sinclair/typebox' +import addFormats from 'ajv-formats' +import Ajv from 'ajv' + +const ajv = addFormats(new Ajv({}), [ + 'date-time', + 'time', + 'date', + 'email', + 'hostname', + 'ipv4', + 'ipv6', + 'uri', + 'uri-reference', + 'uuid', + 'uri-template', + 'json-pointer', + 'relative-json-pointer', + 'regex' +]) + +const C = ajv.compile(Type.Object({ + x: Type.Number(), + y: Type.Number(), + z: Type.Number() +})) + +const R = C({ x: 1, y: 2, z: 3 }) // const R = true +``` + + + +### TypeCompiler + +The TypeBox TypeCompiler is a high performance JIT compiler that transforms TypeBox types into optimized JavaScript validation routines. The compiler is tuned for fast compilation as well as fast value assertion. It is designed to serve as a validation backend that can be integrated into larger applications; but can also be used as a general purpose validator. + +The TypeCompiler is provided as an optional import. + +```typescript +import { TypeCompiler } from '@sinclair/typebox/compiler' +``` + +Use the `Compile(...)` function to compile a type. + +```typescript +const C = TypeCompiler.Compile(Type.Object({ // const C: TypeCheck> + +const R = C.Check({ x: 1, y: 2, z: 3 }) // const R = true +``` + +Use the `Errors(...)` function to produce diagnostic errors for a value. The `Errors(...)` function will return an iterator that if enumerated; will perform an exhaustive check across the entire value and yield any error found. For performance, this function should only be called after failed `Check(...)`. Applications may also choose to yield only the first value to avoid exhaustive error generation. + +```typescript +const C = TypeCompiler.Compile(Type.Object({ // const C: TypeCheck> + +const value = { } + +const errors = [...C.Errors(value)] // const errors = [{ + // schema: { type: 'number' }, + // path: '/x', + // value: undefined, + // message: 'Expected number' + // }, { + // schema: { type: 'number' }, + // path: '/y', + // value: undefined, + // message: 'Expected number' + // }, { + // schema: { type: 'number' }, + // path: '/z', + // value: undefined, + // message: 'Expected number' + // }] +``` + +Compiled routines can be inspected with the `.Code()` function. + +```typescript +const C = TypeCompiler.Compile(Type.String()) // const C: TypeCheck + +console.log(C.Code()) // return function check(value) { + // return ( + // (typeof value === 'string') + // ) + // } +``` + + + +## TypeSystem + +The TypeBox TypeSystem module provides functionality to define types above and beyond the Standard and Extended type sets as well as control various assertion polices. Configurations made to the TypeSystem module are observed by both `TypeCompiler` and `Value` modules. + +The TypeSystem module is provided as an optional import. + +```typescript +import { TypeSystem } from '@sinclair/typebox/system' +``` + + + +### Types + +Use the `Type(...)` function to create a custom type. This function will return a type factory function that can be used to construct the type. The following creates a Point type. + +```typescript +type PointOptions = { } // The Type Options + +type PointType = { x: number, y: number } // The Static Type + +const Point = TypeSystem.Type('Point', (options, value) => { + return ( + typeof value === 'object' && value !== null && + typeof value.x === 'number' && + typeof value.y === 'number' + ) +}) + +const T = Point() + +type T = Static // type T = { x: number, y: number } + +const R = Value.Check(T, { x: 1, y: 2 }) // const R = true +``` + + + +### Formats + +Use the `Format(...)` function to create a custom string format. The following creates a format that checks for lowercase strings. + +```typescript +TypeSystem.Format('lowercase', value => value === value.toLowerCase()) // format should be lowercase + +const T = Type.String({ format: 'lowercase' }) + +const A = Value.Check(T, 'Hello') // const A = false + +const B = Value.Check(T, 'hello') // const B = true +``` + + + +### Policies + +TypeBox validates using JSON Schema assertion policies by default. It is possible to override these policies and have TypeBox assert using TypeScript policies. The following overrides are available. + +```typescript +// Allow arrays to validate as object types (default is false) +// +// const A: {} = [] - allowed in TS + +TypeSystem.AllowArrayObjects = true + +// Allow numeric values to be NaN or + or - Infinity (default is false) +// +// const A: number = NaN - allowed in TS + +TypeSystem.AllowNaN = true +``` + + + +## Benchmark + +This project maintains a set of benchmarks that measure Ajv, Value and TypeCompiler compilation and validation performance. These benchmarks can be run locally by cloning this repository and running `npm run benchmark`. The results below show for Ajv version 8.12.0. + +For additional comparative benchmarks, please refer to [typescript-runtime-type-benchmarks](https://moltar.github.io/typescript-runtime-type-benchmarks/). + + + +### Compile + +This benchmark measures compilation performance for varying types. You can review this benchmark [here](https://github.com/sinclairzx81/typebox/blob/master/benchmark/measurement/module/compile.ts). + +```typescript +┌────────────────────────────┬────────────┬──────────────┬──────────────┬──────────────┐ +│ (index) │ Iterations │ Ajv │ TypeCompiler │ Performance │ +├────────────────────────────┼────────────┼──────────────┼──────────────┼──────────────┤ +│ Literal_String │ 1000 │ ' 257 ms' │ ' 8 ms' │ ' 32.13 x' │ +│ Literal_Number │ 1000 │ ' 203 ms' │ ' 4 ms' │ ' 50.75 x' │ +│ Literal_Boolean │ 1000 │ ' 183 ms' │ ' 4 ms' │ ' 45.75 x' │ +│ Primitive_Number │ 1000 │ ' 174 ms' │ ' 8 ms' │ ' 21.75 x' │ +│ Primitive_String │ 1000 │ ' 158 ms' │ ' 9 ms' │ ' 17.56 x' │ +│ Primitive_String_Pattern │ 1000 │ ' 213 ms' │ ' 13 ms' │ ' 16.38 x' │ +│ Primitive_Boolean │ 1000 │ ' 136 ms' │ ' 6 ms' │ ' 22.67 x' │ +│ Primitive_Null │ 1000 │ ' 144 ms' │ ' 6 ms' │ ' 24.00 x' │ +│ Object_Unconstrained │ 1000 │ ' 1176 ms' │ ' 38 ms' │ ' 30.95 x' │ +│ Object_Constrained │ 1000 │ ' 1181 ms' │ ' 31 ms' │ ' 38.10 x' │ +│ Object_Vector3 │ 1000 │ ' 387 ms' │ ' 8 ms' │ ' 48.38 x' │ +│ Object_Box3D │ 1000 │ ' 1693 ms' │ ' 25 ms' │ ' 67.72 x' │ +│ Tuple_Primitive │ 1000 │ ' 470 ms' │ ' 15 ms' │ ' 31.33 x' │ +│ Tuple_Object │ 1000 │ ' 1206 ms' │ ' 17 ms' │ ' 70.94 x' │ +│ Composite_Intersect │ 1000 │ ' 567 ms' │ ' 20 ms' │ ' 28.35 x' │ +│ Composite_Union │ 1000 │ ' 515 ms' │ ' 21 ms' │ ' 24.52 x' │ +│ Math_Vector4 │ 1000 │ ' 787 ms' │ ' 10 ms' │ ' 78.70 x' │ +│ Math_Matrix4 │ 1000 │ ' 386 ms' │ ' 8 ms' │ ' 48.25 x' │ +│ Array_Primitive_Number │ 1000 │ ' 349 ms' │ ' 7 ms' │ ' 49.86 x' │ +│ Array_Primitive_String │ 1000 │ ' 336 ms' │ ' 4 ms' │ ' 84.00 x' │ +│ Array_Primitive_Boolean │ 1000 │ ' 284 ms' │ ' 3 ms' │ ' 94.67 x' │ +│ Array_Object_Unconstrained │ 1000 │ ' 1704 ms' │ ' 19 ms' │ ' 89.68 x' │ +│ Array_Object_Constrained │ 1000 │ ' 1456 ms' │ ' 18 ms' │ ' 80.89 x' │ +│ Array_Tuple_Primitive │ 1000 │ ' 792 ms' │ ' 15 ms' │ ' 52.80 x' │ +│ Array_Tuple_Object │ 1000 │ ' 1552 ms' │ ' 17 ms' │ ' 91.29 x' │ +│ Array_Composite_Intersect │ 1000 │ ' 744 ms' │ ' 18 ms' │ ' 41.33 x' │ +│ Array_Composite_Union │ 1000 │ ' 783 ms' │ ' 15 ms' │ ' 52.20 x' │ +│ Array_Math_Vector4 │ 1000 │ ' 1093 ms' │ ' 14 ms' │ ' 78.07 x' │ +│ Array_Math_Matrix4 │ 1000 │ ' 684 ms' │ ' 6 ms' │ ' 114.00 x' │ +└────────────────────────────┴────────────┴──────────────┴──────────────┴──────────────┘ +``` + + + +### Validate + +This benchmark measures validation performance for varying types. You can review this benchmark [here](https://github.com/sinclairzx81/typebox/blob/master/benchmark/measurement/module/check.ts). + +```typescript +┌────────────────────────────┬────────────┬──────────────┬──────────────┬──────────────┬──────────────┐ +│ (index) │ Iterations │ ValueCheck │ Ajv │ TypeCompiler │ Performance │ +├────────────────────────────┼────────────┼──────────────┼──────────────┼──────────────┼──────────────┤ +│ Literal_String │ 1000000 │ ' 27 ms' │ ' 6 ms' │ ' 5 ms' │ ' 1.20 x' │ +│ Literal_Number │ 1000000 │ ' 23 ms' │ ' 21 ms' │ ' 11 ms' │ ' 1.91 x' │ +│ Literal_Boolean │ 1000000 │ ' 21 ms' │ ' 20 ms' │ ' 10 ms' │ ' 2.00 x' │ +│ Primitive_Number │ 1000000 │ ' 26 ms' │ ' 19 ms' │ ' 11 ms' │ ' 1.73 x' │ +│ Primitive_String │ 1000000 │ ' 25 ms' │ ' 19 ms' │ ' 10 ms' │ ' 1.90 x' │ +│ Primitive_String_Pattern │ 1000000 │ ' 155 ms' │ ' 49 ms' │ ' 43 ms' │ ' 1.14 x' │ +│ Primitive_Boolean │ 1000000 │ ' 23 ms' │ ' 19 ms' │ ' 10 ms' │ ' 1.90 x' │ +│ Primitive_Null │ 1000000 │ ' 24 ms' │ ' 19 ms' │ ' 10 ms' │ ' 1.90 x' │ +│ Object_Unconstrained │ 1000000 │ ' 804 ms' │ ' 35 ms' │ ' 28 ms' │ ' 1.25 x' │ +│ Object_Constrained │ 1000000 │ ' 1041 ms' │ ' 55 ms' │ ' 41 ms' │ ' 1.34 x' │ +│ Object_Vector3 │ 1000000 │ ' 380 ms' │ ' 26 ms' │ ' 20 ms' │ ' 1.30 x' │ +│ Object_Box3D │ 1000000 │ ' 1785 ms' │ ' 65 ms' │ ' 52 ms' │ ' 1.25 x' │ +│ Object_Recursive │ 1000000 │ ' 4984 ms' │ ' 396 ms' │ ' 114 ms' │ ' 3.47 x' │ +│ Tuple_Primitive │ 1000000 │ ' 168 ms' │ ' 24 ms' │ ' 16 ms' │ ' 1.50 x' │ +│ Tuple_Object │ 1000000 │ ' 673 ms' │ ' 30 ms' │ ' 26 ms' │ ' 1.15 x' │ +│ Composite_Intersect │ 1000000 │ ' 751 ms' │ ' 28 ms' │ ' 20 ms' │ ' 1.40 x' │ +│ Composite_Union │ 1000000 │ ' 489 ms' │ ' 24 ms' │ ' 16 ms' │ ' 1.50 x' │ +│ Math_Vector4 │ 1000000 │ ' 259 ms' │ ' 23 ms' │ ' 13 ms' │ ' 1.77 x' │ +│ Math_Matrix4 │ 1000000 │ ' 1002 ms' │ ' 40 ms' │ ' 30 ms' │ ' 1.33 x' │ +│ Array_Primitive_Number │ 1000000 │ ' 252 ms' │ ' 22 ms' │ ' 15 ms' │ ' 1.47 x' │ +│ Array_Primitive_String │ 1000000 │ ' 227 ms' │ ' 22 ms' │ ' 18 ms' │ ' 1.22 x' │ +│ Array_Primitive_Boolean │ 1000000 │ ' 150 ms' │ ' 23 ms' │ ' 22 ms' │ ' 1.05 x' │ +│ Array_Object_Unconstrained │ 1000000 │ ' 4754 ms' │ ' 71 ms' │ ' 64 ms' │ ' 1.11 x' │ +│ Array_Object_Constrained │ 1000000 │ ' 4787 ms' │ ' 142 ms' │ ' 123 ms' │ ' 1.15 x' │ +│ Array_Object_Recursive │ 1000000 │ ' 19088 ms' │ ' 1735 ms' │ ' 314 ms' │ ' 5.53 x' │ +│ Array_Tuple_Primitive │ 1000000 │ ' 650 ms' │ ' 41 ms' │ ' 31 ms' │ ' 1.32 x' │ +│ Array_Tuple_Object │ 1000000 │ ' 2770 ms' │ ' 67 ms' │ ' 55 ms' │ ' 1.22 x' │ +│ Array_Composite_Intersect │ 1000000 │ ' 2693 ms' │ ' 50 ms' │ ' 39 ms' │ ' 1.28 x' │ +│ Array_Composite_Union │ 1000000 │ ' 1982 ms' │ ' 72 ms' │ ' 33 ms' │ ' 2.18 x' │ +│ Array_Math_Vector4 │ 1000000 │ ' 1068 ms' │ ' 40 ms' │ ' 26 ms' │ ' 1.54 x' │ +│ Array_Math_Matrix4 │ 1000000 │ ' 4609 ms' │ ' 115 ms' │ ' 88 ms' │ ' 1.31 x' │ +└────────────────────────────┴────────────┴──────────────┴──────────────┴──────────────┴──────────────┘ +``` + + + +### Compression + +The following table lists esbuild compiled and minified sizes for each TypeBox module. + +```typescript +┌──────────────────────┬────────────┬────────────┬─────────────┐ +│ (index) │ Compiled │ Minified │ Compression │ +├──────────────────────┼────────────┼────────────┼─────────────┤ +│ typebox/compiler │ '124.3 kb' │ ' 55.7 kb' │ '2.23 x' │ +│ typebox/errors │ '107.8 kb' │ ' 47.9 kb' │ '2.25 x' │ +│ typebox/system │ ' 73.3 kb' │ ' 30.2 kb' │ '2.43 x' │ +│ typebox/value │ '170.7 kb' │ ' 74.2 kb' │ '2.30 x' │ +│ typebox │ ' 72.0 kb' │ ' 29.7 kb' │ '2.43 x' │ +└──────────────────────┴────────────┴────────────┴─────────────┘ +``` + + + +## Contribute + +TypeBox is open to community contribution. Please ensure you submit an open issue before submitting your pull request. The TypeBox project preferences open community discussion prior to accepting new features. diff --git a/node_modules/@sinclair/typebox/system/index.d.ts b/node_modules/@sinclair/typebox/system/index.d.ts new file mode 100644 index 00000000..4b58cda6 --- /dev/null +++ b/node_modules/@sinclair/typebox/system/index.d.ts @@ -0,0 +1 @@ +export * from './system'; diff --git a/node_modules/@sinclair/typebox/system/index.js b/node_modules/@sinclair/typebox/system/index.js new file mode 100644 index 00000000..3c5107f1 --- /dev/null +++ b/node_modules/@sinclair/typebox/system/index.js @@ -0,0 +1,44 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/system + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +__exportStar(require("./system"), exports); diff --git a/node_modules/@sinclair/typebox/system/system.d.ts b/node_modules/@sinclair/typebox/system/system.d.ts new file mode 100644 index 00000000..43084544 --- /dev/null +++ b/node_modules/@sinclair/typebox/system/system.d.ts @@ -0,0 +1,26 @@ +import * as Types from '../typebox'; +export declare class TypeSystemDuplicateTypeKind extends Error { + constructor(kind: string); +} +export declare class TypeSystemDuplicateFormat extends Error { + constructor(kind: string); +} +/** Creates user defined types and formats and provides overrides for value checking behaviours */ +export declare namespace TypeSystem { + /** Sets whether TypeBox should assert optional properties using the TypeScript `exactOptionalPropertyTypes` assertion policy. The default is `false` */ + let ExactOptionalPropertyTypes: boolean; + /** Sets whether arrays should be treated as a kind of objects. The default is `false` */ + let AllowArrayObjects: boolean; + /** Sets whether `NaN` or `Infinity` should be treated as valid numeric values. The default is `false` */ + let AllowNaN: boolean; + /** Sets whether `null` should validate for void types. The default is `false` */ + let AllowVoidNull: boolean; + /** Creates a new type */ + function Type(kind: string, check: (options: Options, value: unknown) => boolean): (options?: Partial) => Types.TUnsafe; + /** Creates a new string format */ + function Format(format: F, check: (value: string) => boolean): F; + /** @deprecated Use `TypeSystem.Type()` instead. */ + function CreateType(kind: string, check: (options: Options, value: unknown) => boolean): (options?: Partial) => Types.TUnsafe; + /** @deprecated Use `TypeSystem.Format()` instead. */ + function CreateFormat(format: F, check: (value: string) => boolean): F; +} diff --git a/node_modules/@sinclair/typebox/system/system.js b/node_modules/@sinclair/typebox/system/system.js new file mode 100644 index 00000000..44911a48 --- /dev/null +++ b/node_modules/@sinclair/typebox/system/system.js @@ -0,0 +1,90 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/system + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TypeSystem = exports.TypeSystemDuplicateFormat = exports.TypeSystemDuplicateTypeKind = void 0; +const Types = require("../typebox"); +class TypeSystemDuplicateTypeKind extends Error { + constructor(kind) { + super(`Duplicate type kind '${kind}' detected`); + } +} +exports.TypeSystemDuplicateTypeKind = TypeSystemDuplicateTypeKind; +class TypeSystemDuplicateFormat extends Error { + constructor(kind) { + super(`Duplicate string format '${kind}' detected`); + } +} +exports.TypeSystemDuplicateFormat = TypeSystemDuplicateFormat; +/** Creates user defined types and formats and provides overrides for value checking behaviours */ +var TypeSystem; +(function (TypeSystem) { + // ------------------------------------------------------------------------ + // Assertion Policies + // ------------------------------------------------------------------------ + /** Sets whether TypeBox should assert optional properties using the TypeScript `exactOptionalPropertyTypes` assertion policy. The default is `false` */ + TypeSystem.ExactOptionalPropertyTypes = false; + /** Sets whether arrays should be treated as a kind of objects. The default is `false` */ + TypeSystem.AllowArrayObjects = false; + /** Sets whether `NaN` or `Infinity` should be treated as valid numeric values. The default is `false` */ + TypeSystem.AllowNaN = false; + /** Sets whether `null` should validate for void types. The default is `false` */ + TypeSystem.AllowVoidNull = false; + // ------------------------------------------------------------------------ + // String Formats and Types + // ------------------------------------------------------------------------ + /** Creates a new type */ + function Type(kind, check) { + if (Types.TypeRegistry.Has(kind)) + throw new TypeSystemDuplicateTypeKind(kind); + Types.TypeRegistry.Set(kind, check); + return (options = {}) => Types.Type.Unsafe({ ...options, [Types.Kind]: kind }); + } + TypeSystem.Type = Type; + /** Creates a new string format */ + function Format(format, check) { + if (Types.FormatRegistry.Has(format)) + throw new TypeSystemDuplicateFormat(format); + Types.FormatRegistry.Set(format, check); + return format; + } + TypeSystem.Format = Format; + // ------------------------------------------------------------------------ + // Deprecated + // ------------------------------------------------------------------------ + /** @deprecated Use `TypeSystem.Type()` instead. */ + function CreateType(kind, check) { + return Type(kind, check); + } + TypeSystem.CreateType = CreateType; + /** @deprecated Use `TypeSystem.Format()` instead. */ + function CreateFormat(format, check) { + return Format(format, check); + } + TypeSystem.CreateFormat = CreateFormat; +})(TypeSystem = exports.TypeSystem || (exports.TypeSystem = {})); diff --git a/node_modules/@sinclair/typebox/typebox.d.ts b/node_modules/@sinclair/typebox/typebox.d.ts new file mode 100644 index 00000000..1632b965 --- /dev/null +++ b/node_modules/@sinclair/typebox/typebox.d.ts @@ -0,0 +1,723 @@ +export declare const Modifier: unique symbol; +export declare const Hint: unique symbol; +export declare const Kind: unique symbol; +export declare const PatternBoolean = "(true|false)"; +export declare const PatternNumber = "(0|[1-9][0-9]*)"; +export declare const PatternString = "(.*)"; +export declare const PatternBooleanExact: string; +export declare const PatternNumberExact: string; +export declare const PatternStringExact: string; +export type TupleToIntersect = T extends [infer I] ? I : T extends [infer I, ...infer R] ? I & TupleToIntersect : never; +export type TupleToUnion = { + [K in keyof T]: T[K]; +}[number]; +export type UnionToIntersect = (U extends unknown ? (arg: U) => 0 : never) extends (arg: infer I) => 0 ? I : never; +export type UnionLast = UnionToIntersect 0 : never> extends (x: infer L) => 0 ? L : never; +export type UnionToTuple> = [U] extends [never] ? [] : [...UnionToTuple>, L]; +export type Assert = T extends E ? T : never; +export type Evaluate = T extends infer O ? { + [K in keyof O]: O[K]; +} : never; +export type Ensure = T extends infer U ? U : never; +export type TModifier = TReadonlyOptional | TOptional | TReadonly; +export type TReadonly = T & { + [Modifier]: 'Readonly'; +}; +export type TOptional = T & { + [Modifier]: 'Optional'; +}; +export type TReadonlyOptional = T & { + [Modifier]: 'ReadonlyOptional'; +}; +export interface SchemaOptions { + $schema?: string; + /** Id for this schema */ + $id?: string; + /** Title of this schema */ + title?: string; + /** Description of this schema */ + description?: string; + /** Default value for this schema */ + default?: any; + /** Example values matching this schema */ + examples?: any; + [prop: string]: any; +} +export interface TKind { + [Kind]: string; +} +export interface TSchema extends SchemaOptions, TKind { + [Modifier]?: string; + [Hint]?: string; + params: unknown[]; + static: unknown; +} +export type TAnySchema = TSchema | TAny | TArray | TBigInt | TBoolean | TConstructor | TDate | TEnum | TFunction | TInteger | TIntersect | TLiteral | TNot | TNull | TNumber | TObject | TPromise | TRecord | TRef | TString | TSymbol | TTemplateLiteral | TThis | TTuple | TUndefined | TUnion | TUint8Array | TUnknown | TVoid; +export type TNumeric = TInteger | TNumber; +export interface NumericOptions extends SchemaOptions { + exclusiveMaximum?: N; + exclusiveMinimum?: N; + maximum?: N; + minimum?: N; + multipleOf?: N; +} +export interface TAny extends TSchema { + [Kind]: 'Any'; + static: any; +} +export interface ArrayOptions extends SchemaOptions { + uniqueItems?: boolean; + minItems?: number; + maxItems?: number; +} +export interface TArray extends TSchema, ArrayOptions { + [Kind]: 'Array'; + static: Static[]; + type: 'array'; + items: T; +} +export interface TBigInt extends TSchema, NumericOptions { + [Kind]: 'BigInt'; + static: bigint; + type: 'null'; + typeOf: 'BigInt'; +} +export interface TBoolean extends TSchema { + [Kind]: 'Boolean'; + static: boolean; + type: 'boolean'; +} +export type TConstructorParameters> = TTuple; +export type TInstanceType> = T['returns']; +export type TCompositeEvaluateArray = { + [K in keyof T]: T[K] extends TSchema ? Static : never; +}; +export type TCompositeArray = { + [K in keyof T]: T[K] extends TObject ? P : {}; +}; +export type TCompositeProperties = Evaluate : I extends object ? I : {}>; +export interface TComposite extends TObject { + [Hint]: 'Composite'; + static: Evaluate>>; + properties: TCompositeProperties>; +} +export type TConstructorParameterArray = [...{ + [K in keyof T]: Static, P>; +}]; +export interface TConstructor extends TSchema { + [Kind]: 'Constructor'; + static: new (...param: TConstructorParameterArray) => Static; + type: 'object'; + instanceOf: 'Constructor'; + parameters: T; + returns: U; +} +export interface DateOptions extends SchemaOptions { + exclusiveMaximumTimestamp?: number; + exclusiveMinimumTimestamp?: number; + maximumTimestamp?: number; + minimumTimestamp?: number; +} +export interface TDate extends TSchema, DateOptions { + [Kind]: 'Date'; + static: Date; + type: 'object'; + instanceOf: 'Date'; +} +export interface TEnumOption { + type: 'number' | 'string'; + const: T; +} +export interface TEnum = Record> extends TSchema { + [Kind]: 'Union'; + static: T[keyof T]; + anyOf: TLiteral[]; +} +export type TExtends = (Static extends Static ? T : U) extends infer O ? UnionToTuple extends [infer X, infer Y] ? TUnion<[Assert, Assert]> : Assert : never; +export type TExcludeTemplateLiteralResult = TUnionResult; +}[T]>, TSchema[]>>; +export type TExcludeTemplateLiteral = Exclude, Static> extends infer S ? TExcludeTemplateLiteralResult> : never; +export type TExcludeArray = Assert> extends Static ? never : T[K]; +}[number]>, TSchema[]> extends infer R ? TUnionResult> : never; +export type TExclude = T extends TTemplateLiteral ? TExcludeTemplateLiteral : T extends TUnion ? TExcludeArray : T extends U ? TNever : T; +export type TExtractTemplateLiteralResult = TUnionResult; +}[T]>, TSchema[]>>; +export type TExtractTemplateLiteral = Extract, Static> extends infer S ? TExtractTemplateLiteralResult> : never; +export type TExtractArray = Assert> extends Static ? T[K] : never; +}[number]>, TSchema[]> extends infer R ? TUnionResult> : never; +export type TExtract = T extends TTemplateLiteral ? TExtractTemplateLiteral : T extends TUnion ? TExtractArray : T extends U ? T : T; +export type TFunctionParameters = [...{ + [K in keyof T]: Static, P>; +}]; +export interface TFunction extends TSchema { + [Kind]: 'Function'; + static: (...param: TFunctionParameters) => Static; + type: 'object'; + instanceOf: 'Function'; + parameters: T; + returns: U; +} +export interface TInteger extends TSchema, NumericOptions { + [Kind]: 'Integer'; + static: number; + type: 'integer'; +} +export type TUnevaluatedProperties = undefined | TSchema | boolean; +export interface IntersectOptions extends SchemaOptions { + unevaluatedProperties?: TUnevaluatedProperties; +} +export interface TIntersect extends TSchema, IntersectOptions { + [Kind]: 'Intersect'; + static: TupleToIntersect<{ + [K in keyof T]: Static, this['params']>; + }>; + type?: 'object'; + allOf: [...T]; +} +export type TKeyOfTuple = { + [K in keyof Static]: TLiteral>; +} extends infer U ? UnionToTuple> : never; +export type TKeyOf = (T extends TRecursive ? TKeyOfTuple : T extends TComposite ? TKeyOfTuple : T extends TIntersect ? TKeyOfTuple : T extends TUnion ? TKeyOfTuple : T extends TObject ? TKeyOfTuple : T extends TRecord ? [K] : [ +]) extends infer R ? TUnionResult> : never; +export type TLiteralValue = string | number | boolean; +export interface TLiteral extends TSchema { + [Kind]: 'Literal'; + static: T; + const: T; +} +export interface TNever extends TSchema { + [Kind]: 'Never'; + static: never; + not: {}; +} +export interface TNot extends TSchema { + [Kind]: 'Not'; + static: Static; + allOf: [{ + not: Not; + }, T]; +} +export interface TNull extends TSchema { + [Kind]: 'Null'; + static: null; + type: 'null'; +} +export interface TNumber extends TSchema, NumericOptions { + [Kind]: 'Number'; + static: number; + type: 'number'; +} +export type ReadonlyOptionalPropertyKeys = { + [K in keyof T]: T[K] extends TReadonlyOptional ? K : never; +}[keyof T]; +export type ReadonlyPropertyKeys = { + [K in keyof T]: T[K] extends TReadonly ? K : never; +}[keyof T]; +export type OptionalPropertyKeys = { + [K in keyof T]: T[K] extends TOptional ? K : never; +}[keyof T]; +export type RequiredPropertyKeys = keyof Omit | ReadonlyPropertyKeys | OptionalPropertyKeys>; +export type PropertiesReducer> = Evaluate<(Readonly>>> & Readonly>> & Partial>> & Required>>)>; +export type PropertiesReduce = PropertiesReducer; +}>; +export type TProperties = Record; +export type ObjectProperties = T extends TObject ? U : never; +export type ObjectPropertyKeys = T extends TObject ? keyof U : never; +export type TAdditionalProperties = undefined | TSchema | boolean; +export interface ObjectOptions extends SchemaOptions { + additionalProperties?: TAdditionalProperties; + minProperties?: number; + maxProperties?: number; +} +export interface TObject extends TSchema, ObjectOptions { + [Kind]: 'Object'; + static: PropertiesReduce; + additionalProperties?: TAdditionalProperties; + type: 'object'; + properties: T; + required?: string[]; +} +export type TOmitArray = Assert<{ + [K2 in keyof T]: TOmit, K>; +}, TSchema[]>; +export type TOmitProperties = Evaluate, TProperties>>; +export type TOmit = T extends TRecursive ? TRecursive> : T extends TComposite ? TComposite> : T extends TIntersect ? TIntersect> : T extends TUnion ? TUnion> : T extends TObject ? TObject> : T; +export type TParameters = TTuple; +export type TPartialObjectArray = Assert<{ + [K in keyof T]: TPartial>; +}, TObject[]>; +export type TPartialArray = Assert<{ + [K in keyof T]: TPartial>; +}, TSchema[]>; +export type TPartialProperties = Evaluate ? TReadonlyOptional : T[K] extends TReadonly ? TReadonlyOptional : T[K] extends TOptional ? TOptional : TOptional; +}, TProperties>>; +export type TPartial = T extends TRecursive ? TRecursive> : T extends TComposite ? TComposite> : T extends TIntersect ? TIntersect> : T extends TUnion ? TUnion> : T extends TObject ? TObject> : T; +export type TPickArray = { + [K2 in keyof T]: TPick, K>; +}; +export type TPickProperties = Pick, keyof T>> extends infer R ? ({ + [K in keyof R]: Assert extends TSchema ? R[K] : never; +}) : never; +export type TPick = T extends TRecursive ? TRecursive> : T extends TComposite ? TComposite> : T extends TIntersect ? TIntersect> : T extends TUnion ? TUnion> : T extends TObject ? TObject> : T; +export interface TPromise extends TSchema { + [Kind]: 'Promise'; + static: Promise>; + type: 'object'; + instanceOf: 'Promise'; + item: TSchema; +} +export type RecordTemplateLiteralObjectType = Ensure]: T; +}>>>; +export type RecordTemplateLiteralType = IsTemplateLiteralFinite extends true ? RecordTemplateLiteralObjectType : TRecord; +export type RecordUnionLiteralType[]>, T extends TSchema> = Static extends string ? Ensure]: T; +}>> : never; +export type RecordLiteralType, T extends TSchema> = Ensure>; +export type RecordNumberType = Ensure>; +export type RecordStringType = Ensure>; +export type RecordKey = TUnion[]> | TLiteral | TTemplateLiteral | TInteger | TNumber | TString; +export interface TRecord extends TSchema { + [Kind]: 'Record'; + static: Record, Static>; + type: 'object'; + patternProperties: { + [pattern: string]: T; + }; + additionalProperties: false; +} +export interface TThis extends TSchema { + [Kind]: 'This'; + static: this['params'][0]; + $ref: string; +} +export type TRecursiveReduce = Static]>; +export interface TRecursive extends TSchema { + [Hint]: 'Recursive'; + static: TRecursiveReduce; +} +export interface TRef extends TSchema { + [Kind]: 'Ref'; + static: Static; + $ref: string; +} +export type TReturnType = T['returns']; +export type TRequiredArray = Assert<{ + [K in keyof T]: TRequired>; +}, TSchema[]>; +export type TRequiredProperties = Evaluate ? TReadonly : T[K] extends TReadonly ? TReadonly : T[K] extends TOptional ? U : T[K]; +}, TProperties>>; +export type TRequired = T extends TRecursive ? TRecursive> : T extends TComposite ? TComposite> : T extends TIntersect ? TIntersect> : T extends TUnion ? TUnion> : T extends TObject ? TObject> : T; +export type StringFormatOption = 'date-time' | 'time' | 'date' | 'email' | 'idn-email' | 'hostname' | 'idn-hostname' | 'ipv4' | 'ipv6' | 'uri' | 'uri-reference' | 'iri' | 'uuid' | 'iri-reference' | 'uri-template' | 'json-pointer' | 'relative-json-pointer' | 'regex'; +export interface StringOptions extends SchemaOptions { + minLength?: number; + maxLength?: number; + pattern?: string; + format?: Format; + contentEncoding?: '7bit' | '8bit' | 'binary' | 'quoted-printable' | 'base64'; + contentMediaType?: string; +} +export interface TString extends TSchema, StringOptions { + [Kind]: 'String'; + static: string; + type: 'string'; +} +export type SymbolValue = string | number | undefined; +export interface TSymbol extends TSchema, SchemaOptions { + [Kind]: 'Symbol'; + static: symbol; + type: 'null'; + typeOf: 'Symbol'; +} +export type IsTemplateLiteralFiniteCheck = T extends TTemplateLiteral ? IsTemplateLiteralFiniteArray> : T extends TUnion ? IsTemplateLiteralFiniteArray> : T extends TString ? false : T extends TBoolean ? false : T extends TNumber ? false : T extends TInteger ? false : T extends TBigInt ? false : T extends TLiteral ? true : false; +export type IsTemplateLiteralFiniteArray = T extends [infer L, ...infer R] ? IsTemplateLiteralFiniteCheck extends false ? false : IsTemplateLiteralFiniteArray> : T extends [infer L] ? IsTemplateLiteralFiniteCheck extends false ? false : true : true; +export type IsTemplateLiteralFinite = T extends TTemplateLiteral ? IsTemplateLiteralFiniteArray : false; +export type TTemplateLiteralKind = TUnion | TLiteral | TInteger | TTemplateLiteral | TNumber | TBigInt | TString | TBoolean | TNever; +export type TTemplateLiteralConst = T extends TUnion ? { + [K in keyof U]: TTemplateLiteralUnion, Acc>; +}[number] : T extends TTemplateLiteral ? `${Static}` : T extends TLiteral ? `${U}` : T extends TString ? `${string}` : T extends TNumber ? `${number}` : T extends TBigInt ? `${bigint}` : T extends TBoolean ? `${boolean}` : never; +export type TTemplateLiteralUnion = T extends [infer L, ...infer R] ? `${TTemplateLiteralConst}${TTemplateLiteralUnion, Acc>}` : T extends [infer L] ? `${TTemplateLiteralConst}${Acc}` : Acc; +export interface TTemplateLiteral extends TSchema { + [Kind]: 'TemplateLiteral'; + static: TTemplateLiteralUnion; + type: 'string'; + pattern: string; +} +export type TTupleIntoArray> = T extends TTuple ? Assert : never; +export interface TTuple extends TSchema { + [Kind]: 'Tuple'; + static: { + [K in keyof T]: T[K] extends TSchema ? Static : T[K]; + }; + type: 'array'; + items?: T; + additionalItems?: false; + minItems: number; + maxItems: number; +} +export interface TUndefined extends TSchema { + [Kind]: 'Undefined'; + static: undefined; + type: 'null'; + typeOf: 'Undefined'; +} +export type TUnionOfLiteralArray[]> = { + [K in keyof T]: Assert['const']; +}[number]; +export type TUnionOfLiteral[]>> = TUnionOfLiteralArray; +export type TUnionResult = T extends [] ? TNever : T extends [infer S] ? S : TUnion; +export type TUnionTemplateLiteral> = Ensure; +}[S]>, TLiteral[]>>>; +export interface TUnion extends TSchema { + [Kind]: 'Union'; + static: { + [K in keyof T]: T[K] extends TSchema ? Static : never; + }[number]; + anyOf: T; +} +export interface Uint8ArrayOptions extends SchemaOptions { + maxByteLength?: number; + minByteLength?: number; +} +export interface TUint8Array extends TSchema, Uint8ArrayOptions { + [Kind]: 'Uint8Array'; + static: Uint8Array; + instanceOf: 'Uint8Array'; + type: 'object'; +} +export interface TUnknown extends TSchema { + [Kind]: 'Unknown'; + static: unknown; +} +export interface UnsafeOptions extends SchemaOptions { + [Kind]?: string; +} +export interface TUnsafe extends TSchema { + [Kind]: string; + static: T; +} +export interface TVoid extends TSchema { + [Kind]: 'Void'; + static: void; + type: 'null'; + typeOf: 'Void'; +} +/** Creates a TypeScript static type from a TypeBox type */ +export type Static = (T & { + params: P; +})['static']; +export type TypeRegistryValidationFunction = (schema: TSchema, value: unknown) => boolean; +/** A registry for user defined types */ +export declare namespace TypeRegistry { + /** Returns the entries in this registry */ + function Entries(): Map>; + /** Clears all user defined types */ + function Clear(): void; + /** Returns true if this registry contains this kind */ + function Has(kind: string): boolean; + /** Sets a validation function for a user defined type */ + function Set(kind: string, func: TypeRegistryValidationFunction): void; + /** Gets a custom validation function for a user defined type */ + function Get(kind: string): TypeRegistryValidationFunction | undefined; +} +export type FormatRegistryValidationFunction = (value: string) => boolean; +/** A registry for user defined string formats */ +export declare namespace FormatRegistry { + /** Returns the entries in this registry */ + function Entries(): Map; + /** Clears all user defined string formats */ + function Clear(): void; + /** Returns true if the user defined string format exists */ + function Has(format: string): boolean; + /** Sets a validation function for a user defined string format */ + function Set(format: string, func: FormatRegistryValidationFunction): void; + /** Gets a validation function for a user defined string format */ + function Get(format: string): FormatRegistryValidationFunction | undefined; +} +export declare class TypeGuardUnknownTypeError extends Error { + readonly schema: unknown; + constructor(schema: unknown); +} +/** Provides functions to test if JavaScript values are TypeBox types */ +export declare namespace TypeGuard { + /** Returns true if the given schema is TAny */ + function TAny(schema: unknown): schema is TAny; + /** Returns true if the given schema is TArray */ + function TArray(schema: unknown): schema is TArray; + /** Returns true if the given schema is TBigInt */ + function TBigInt(schema: unknown): schema is TBigInt; + /** Returns true if the given schema is TBoolean */ + function TBoolean(schema: unknown): schema is TBoolean; + /** Returns true if the given schema is TConstructor */ + function TConstructor(schema: unknown): schema is TConstructor; + /** Returns true if the given schema is TDate */ + function TDate(schema: unknown): schema is TDate; + /** Returns true if the given schema is TFunction */ + function TFunction(schema: unknown): schema is TFunction; + /** Returns true if the given schema is TInteger */ + function TInteger(schema: unknown): schema is TInteger; + /** Returns true if the given schema is TIntersect */ + function TIntersect(schema: unknown): schema is TIntersect; + /** Returns true if the given schema is TKind */ + function TKind(schema: unknown): schema is Record; + /** Returns true if the given schema is TLiteral */ + function TLiteral(schema: unknown): schema is TLiteral; + /** Returns true if the given schema is TNever */ + function TNever(schema: unknown): schema is TNever; + /** Returns true if the given schema is TNot */ + function TNot(schema: unknown): schema is TNot; + /** Returns true if the given schema is TNull */ + function TNull(schema: unknown): schema is TNull; + /** Returns true if the given schema is TNumber */ + function TNumber(schema: unknown): schema is TNumber; + /** Returns true if the given schema is TObject */ + function TObject(schema: unknown): schema is TObject; + /** Returns true if the given schema is TPromise */ + function TPromise(schema: unknown): schema is TPromise; + /** Returns true if the given schema is TRecord */ + function TRecord(schema: unknown): schema is TRecord; + /** Returns true if the given schema is TRef */ + function TRef(schema: unknown): schema is TRef; + /** Returns true if the given schema is TString */ + function TString(schema: unknown): schema is TString; + /** Returns true if the given schema is TSymbol */ + function TSymbol(schema: unknown): schema is TSymbol; + /** Returns true if the given schema is TTemplateLiteral */ + function TTemplateLiteral(schema: unknown): schema is TTemplateLiteral; + /** Returns true if the given schema is TThis */ + function TThis(schema: unknown): schema is TThis; + /** Returns true if the given schema is TTuple */ + function TTuple(schema: unknown): schema is TTuple; + /** Returns true if the given schema is TUndefined */ + function TUndefined(schema: unknown): schema is TUndefined; + /** Returns true if the given schema is TUnion */ + function TUnion(schema: unknown): schema is TUnion; + /** Returns true if the given schema is TUnion[]> */ + function TUnionLiteral(schema: unknown): schema is TUnion[]>; + /** Returns true if the given schema is TUint8Array */ + function TUint8Array(schema: unknown): schema is TUint8Array; + /** Returns true if the given schema is TUnknown */ + function TUnknown(schema: unknown): schema is TUnknown; + /** Returns true if the given schema is a raw TUnsafe */ + function TUnsafe(schema: unknown): schema is TUnsafe; + /** Returns true if the given schema is TVoid */ + function TVoid(schema: unknown): schema is TVoid; + /** Returns true if this schema has the ReadonlyOptional modifier */ + function TReadonlyOptional(schema: T): schema is TReadonlyOptional; + /** Returns true if this schema has the Readonly modifier */ + function TReadonly(schema: T): schema is TReadonly; + /** Returns true if this schema has the Optional modifier */ + function TOptional(schema: T): schema is TOptional; + /** Returns true if the given schema is TSchema */ + function TSchema(schema: unknown): schema is TSchema; +} +/** Fast undefined check used for properties of type undefined */ +export declare namespace ExtendsUndefined { + function Check(schema: TSchema): boolean; +} +export declare enum TypeExtendsResult { + Union = 0, + True = 1, + False = 2 +} +export declare namespace TypeExtends { + function Extends(left: TSchema, right: TSchema): TypeExtendsResult; +} +/** Specialized Clone for Types */ +export declare namespace TypeClone { + /** Clones a type. */ + function Clone(schema: T, options: SchemaOptions): T; +} +export declare namespace ObjectMap { + function Map(schema: TSchema, callback: (object: TObject) => TObject, options: SchemaOptions): T; +} +export declare namespace KeyResolver { + function Resolve(schema: T): string[]; +} +export declare namespace TemplateLiteralPattern { + function Create(kinds: TTemplateLiteralKind[]): string; +} +export declare namespace TemplateLiteralResolver { + function Resolve(template: TTemplateLiteral): TString | TUnion | TLiteral; +} +export declare class TemplateLiteralParserError extends Error { + constructor(message: string); +} +export declare namespace TemplateLiteralParser { + type Expression = And | Or | Const; + type Const = { + type: 'const'; + const: string; + }; + type And = { + type: 'and'; + expr: Expression[]; + }; + type Or = { + type: 'or'; + expr: Expression[]; + }; + /** Parses a pattern and returns an expression tree */ + function Parse(pattern: string): Expression; + /** Parses a pattern and strips forward and trailing ^ and $ */ + function ParseExact(pattern: string): Expression; +} +export declare namespace TemplateLiteralFinite { + function Check(expression: TemplateLiteralParser.Expression): boolean; +} +export declare namespace TemplateLiteralGenerator { + function Generate(expression: TemplateLiteralParser.Expression): IterableIterator; +} +export declare class TypeBuilder { + /** `[Utility]` Creates a schema without `static` and `params` types */ + protected Create(schema: Omit): T; + /** `[Standard]` Omits compositing symbols from this schema */ + Strict(schema: T): T; +} +export declare class StandardTypeBuilder extends TypeBuilder { + /** `[Modifier]` Creates a Optional property */ + Optional(schema: T): TOptional; + /** `[Modifier]` Creates a ReadonlyOptional property */ + ReadonlyOptional(schema: T): TReadonlyOptional; + /** `[Modifier]` Creates a Readonly object or property */ + Readonly(schema: T): TReadonly; + /** `[Standard]` Creates an Any type */ + Any(options?: SchemaOptions): TAny; + /** `[Standard]` Creates an Array type */ + Array(items: T, options?: ArrayOptions): TArray; + /** `[Standard]` Creates a Boolean type */ + Boolean(options?: SchemaOptions): TBoolean; + /** `[Standard]` Creates a Composite object type. */ + Composite(objects: [...T], options?: ObjectOptions): TComposite; + /** `[Standard]` Creates a Enum type */ + Enum>(item: T, options?: SchemaOptions): TEnum; + /** `[Standard]` A conditional type expression that will return the true type if the left type extends the right */ + Extends(left: L, right: R, trueType: T, falseType: U, options?: SchemaOptions): TExtends; + /** `[Standard]` Excludes from the left type any type that is not assignable to the right */ + Exclude(left: L, right: R, options?: SchemaOptions): TExclude; + /** `[Standard]` Extracts from the left type any type that is assignable to the right */ + Extract(left: L, right: R, options?: SchemaOptions): TExtract; + /** `[Standard]` Creates an Integer type */ + Integer(options?: NumericOptions): TInteger; + /** `[Standard]` Creates a Intersect type */ + Intersect(allOf: [], options?: SchemaOptions): TNever; + /** `[Standard]` Creates a Intersect type */ + Intersect(allOf: [...T], options?: SchemaOptions): T[0]; + Intersect(allOf: [...T], options?: IntersectOptions): TIntersect; + /** `[Standard]` Creates a KeyOf type */ + KeyOf(schema: T, options?: SchemaOptions): TKeyOf; + /** `[Standard]` Creates a Literal type */ + Literal(value: T, options?: SchemaOptions): TLiteral; + /** `[Standard]` Creates a Never type */ + Never(options?: SchemaOptions): TNever; + /** `[Standard]` Creates a Not type. The first argument is the disallowed type, the second is the allowed. */ + Not(not: N, schema: T, options?: SchemaOptions): TNot; + /** `[Standard]` Creates a Null type */ + Null(options?: SchemaOptions): TNull; + /** `[Standard]` Creates a Number type */ + Number(options?: NumericOptions): TNumber; + /** `[Standard]` Creates an Object type */ + Object(properties: T, options?: ObjectOptions): TObject; + /** `[Standard]` Creates a mapped type whose keys are omitted from the given type */ + Omit)[]>(schema: T, keys: readonly [...K], options?: SchemaOptions): TOmit; + /** `[Standard]` Creates a mapped type whose keys are omitted from the given type */ + Omit[]>>(schema: T, keys: K, options?: SchemaOptions): TOmit>; + /** `[Standard]` Creates a mapped type whose keys are omitted from the given type */ + Omit>(schema: T, key: K, options?: SchemaOptions): TOmit; + /** `[Standard]` Creates a mapped type whose keys are omitted from the given type */ + Omit(schema: T, key: K, options?: SchemaOptions): TOmit; + /** `[Standard]` Creates a mapped type where all properties are Optional */ + Partial(schema: T, options?: ObjectOptions): TPartial; + /** `[Standard]` Creates a mapped type whose keys are picked from the given type */ + Pick)[]>(schema: T, keys: readonly [...K], options?: SchemaOptions): TPick; + /** `[Standard]` Creates a mapped type whose keys are picked from the given type */ + Pick[]>>(schema: T, keys: K, options?: SchemaOptions): TPick>; + /** `[Standard]` Creates a mapped type whose keys are picked from the given type */ + Pick>(schema: T, key: K, options?: SchemaOptions): TPick; + /** `[Standard]` Creates a mapped type whose keys are picked from the given type */ + Pick(schema: T, key: K, options?: SchemaOptions): TPick; + /** `[Standard]` Creates a Record type */ + Record[]>, T extends TSchema>(key: K, schema: T, options?: ObjectOptions): RecordUnionLiteralType; + /** `[Standard]` Creates a Record type */ + Record, T extends TSchema>(key: K, schema: T, options?: ObjectOptions): RecordLiteralType; + /** `[Standard]` Creates a Record type */ + Record(key: K, schema: T, options?: ObjectOptions): RecordTemplateLiteralType; + /** `[Standard]` Creates a Record type */ + Record(key: K, schema: T, options?: ObjectOptions): RecordNumberType; + /** `[Standard]` Creates a Record type */ + Record(key: K, schema: T, options?: ObjectOptions): RecordStringType; + /** `[Standard]` Creates a Recursive type */ + Recursive(callback: (thisType: TThis) => T, options?: SchemaOptions): TRecursive; + /** `[Standard]` Creates a Ref type. The referenced type must contain a $id */ + Ref(schema: T, options?: SchemaOptions): TRef; + /** `[Standard]` Creates a mapped type where all properties are Required */ + Required(schema: T, options?: SchemaOptions): TRequired; + /** `[Standard]` Creates a String type */ + String(options?: StringOptions): TString; + /** `[Standard]` Creates a template literal type */ + TemplateLiteral(kinds: [...T], options?: SchemaOptions): TTemplateLiteral; + /** `[Standard]` Creates a Tuple type */ + Tuple(items: [...T], options?: SchemaOptions): TTuple; + /** `[Standard]` Creates a Union type */ + Union(anyOf: [], options?: SchemaOptions): TNever; + /** `[Standard]` Creates a Union type */ + Union(anyOf: [...T], options?: SchemaOptions): T[0]; + /** `[Standard]` Creates a Union type */ + Union(anyOf: [...T], options?: SchemaOptions): TUnion; + /** `[Experimental]` Remaps a TemplateLiteral into a Union representation. This function is known to cause TS compiler crashes for finite templates with large generation counts. Use with caution. */ + Union(template: T): TUnionTemplateLiteral; + /** `[Standard]` Creates an Unknown type */ + Unknown(options?: SchemaOptions): TUnknown; + /** `[Standard]` Creates a Unsafe type that infers for the generic argument */ + Unsafe(options?: UnsafeOptions): TUnsafe; +} +export declare class ExtendedTypeBuilder extends StandardTypeBuilder { + /** `[Extended]` Creates a BigInt type */ + BigInt(options?: NumericOptions): TBigInt; + /** `[Extended]` Extracts the ConstructorParameters from the given Constructor type */ + ConstructorParameters>(schema: T, options?: SchemaOptions): TConstructorParameters; + /** `[Extended]` Creates a Constructor type */ + Constructor, U extends TSchema>(parameters: T, returns: U, options?: SchemaOptions): TConstructor, U>; + /** `[Extended]` Creates a Constructor type */ + Constructor(parameters: [...T], returns: U, options?: SchemaOptions): TConstructor; + /** `[Extended]` Creates a Date type */ + Date(options?: DateOptions): TDate; + /** `[Extended]` Creates a Function type */ + Function, U extends TSchema>(parameters: T, returns: U, options?: SchemaOptions): TFunction, U>; + /** `[Extended]` Creates a Function type */ + Function(parameters: [...T], returns: U, options?: SchemaOptions): TFunction; + /** `[Extended]` Extracts the InstanceType from the given Constructor */ + InstanceType>(schema: T, options?: SchemaOptions): TInstanceType; + /** `[Extended]` Extracts the Parameters from the given Function type */ + Parameters>(schema: T, options?: SchemaOptions): TParameters; + /** `[Extended]` Creates a Promise type */ + Promise(item: T, options?: SchemaOptions): TPromise; + /** `[Extended]` Creates a regular expression type */ + RegEx(regex: RegExp, options?: SchemaOptions): TString; + /** `[Extended]` Extracts the ReturnType from the given Function */ + ReturnType>(schema: T, options?: SchemaOptions): TReturnType; + /** `[Extended]` Creates a Symbol type */ + Symbol(options?: SchemaOptions): TSymbol; + /** `[Extended]` Creates a Undefined type */ + Undefined(options?: SchemaOptions): TUndefined; + /** `[Extended]` Creates a Uint8Array type */ + Uint8Array(options?: Uint8ArrayOptions): TUint8Array; + /** `[Extended]` Creates a Void type */ + Void(options?: SchemaOptions): TVoid; +} +/** JSON Schema TypeBuilder with Static Resolution for TypeScript */ +export declare const StandardType: StandardTypeBuilder; +/** JSON Schema TypeBuilder with Static Resolution for TypeScript */ +export declare const Type: ExtendedTypeBuilder; diff --git a/node_modules/@sinclair/typebox/typebox.js b/node_modules/@sinclair/typebox/typebox.js new file mode 100644 index 00000000..c8953c35 --- /dev/null +++ b/node_modules/@sinclair/typebox/typebox.js @@ -0,0 +1,2220 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Type = exports.StandardType = exports.ExtendedTypeBuilder = exports.StandardTypeBuilder = exports.TypeBuilder = exports.TemplateLiteralGenerator = exports.TemplateLiteralFinite = exports.TemplateLiteralParser = exports.TemplateLiteralParserError = exports.TemplateLiteralResolver = exports.TemplateLiteralPattern = exports.KeyResolver = exports.ObjectMap = exports.TypeClone = exports.TypeExtends = exports.TypeExtendsResult = exports.ExtendsUndefined = exports.TypeGuard = exports.TypeGuardUnknownTypeError = exports.FormatRegistry = exports.TypeRegistry = exports.PatternStringExact = exports.PatternNumberExact = exports.PatternBooleanExact = exports.PatternString = exports.PatternNumber = exports.PatternBoolean = exports.Kind = exports.Hint = exports.Modifier = void 0; +// -------------------------------------------------------------------------- +// Symbols +// -------------------------------------------------------------------------- +exports.Modifier = Symbol.for('TypeBox.Modifier'); +exports.Hint = Symbol.for('TypeBox.Hint'); +exports.Kind = Symbol.for('TypeBox.Kind'); +// -------------------------------------------------------------------------- +// Patterns +// -------------------------------------------------------------------------- +exports.PatternBoolean = '(true|false)'; +exports.PatternNumber = '(0|[1-9][0-9]*)'; +exports.PatternString = '(.*)'; +exports.PatternBooleanExact = `^${exports.PatternBoolean}$`; +exports.PatternNumberExact = `^${exports.PatternNumber}$`; +exports.PatternStringExact = `^${exports.PatternString}$`; +/** A registry for user defined types */ +var TypeRegistry; +(function (TypeRegistry) { + const map = new Map(); + /** Returns the entries in this registry */ + function Entries() { + return new Map(map); + } + TypeRegistry.Entries = Entries; + /** Clears all user defined types */ + function Clear() { + return map.clear(); + } + TypeRegistry.Clear = Clear; + /** Returns true if this registry contains this kind */ + function Has(kind) { + return map.has(kind); + } + TypeRegistry.Has = Has; + /** Sets a validation function for a user defined type */ + function Set(kind, func) { + map.set(kind, func); + } + TypeRegistry.Set = Set; + /** Gets a custom validation function for a user defined type */ + function Get(kind) { + return map.get(kind); + } + TypeRegistry.Get = Get; +})(TypeRegistry = exports.TypeRegistry || (exports.TypeRegistry = {})); +/** A registry for user defined string formats */ +var FormatRegistry; +(function (FormatRegistry) { + const map = new Map(); + /** Returns the entries in this registry */ + function Entries() { + return new Map(map); + } + FormatRegistry.Entries = Entries; + /** Clears all user defined string formats */ + function Clear() { + return map.clear(); + } + FormatRegistry.Clear = Clear; + /** Returns true if the user defined string format exists */ + function Has(format) { + return map.has(format); + } + FormatRegistry.Has = Has; + /** Sets a validation function for a user defined string format */ + function Set(format, func) { + map.set(format, func); + } + FormatRegistry.Set = Set; + /** Gets a validation function for a user defined string format */ + function Get(format) { + return map.get(format); + } + FormatRegistry.Get = Get; +})(FormatRegistry = exports.FormatRegistry || (exports.FormatRegistry = {})); +// -------------------------------------------------------------------------- +// TypeGuard +// -------------------------------------------------------------------------- +class TypeGuardUnknownTypeError extends Error { + constructor(schema) { + super('TypeGuard: Unknown type'); + this.schema = schema; + } +} +exports.TypeGuardUnknownTypeError = TypeGuardUnknownTypeError; +/** Provides functions to test if JavaScript values are TypeBox types */ +var TypeGuard; +(function (TypeGuard) { + function IsObject(value) { + return typeof value === 'object' && value !== null && !Array.isArray(value); + } + function IsArray(value) { + return typeof value === 'object' && value !== null && Array.isArray(value); + } + function IsPattern(value) { + try { + new RegExp(value); + return true; + } + catch { + return false; + } + } + function IsControlCharacterFree(value) { + if (typeof value !== 'string') + return false; + for (let i = 0; i < value.length; i++) { + const code = value.charCodeAt(i); + if ((code >= 7 && code <= 13) || code === 27 || code === 127) { + return false; + } + } + return true; + } + function IsBigInt(value) { + return typeof value === 'bigint'; + } + function IsString(value) { + return typeof value === 'string'; + } + function IsNumber(value) { + return typeof value === 'number' && globalThis.Number.isFinite(value); + } + function IsBoolean(value) { + return typeof value === 'boolean'; + } + function IsOptionalBigInt(value) { + return value === undefined || (value !== undefined && IsBigInt(value)); + } + function IsOptionalNumber(value) { + return value === undefined || (value !== undefined && IsNumber(value)); + } + function IsOptionalBoolean(value) { + return value === undefined || (value !== undefined && IsBoolean(value)); + } + function IsOptionalString(value) { + return value === undefined || (value !== undefined && IsString(value)); + } + function IsOptionalPattern(value) { + return value === undefined || (value !== undefined && IsString(value) && IsControlCharacterFree(value) && IsPattern(value)); + } + function IsOptionalFormat(value) { + return value === undefined || (value !== undefined && IsString(value) && IsControlCharacterFree(value)); + } + function IsOptionalSchema(value) { + return value === undefined || TSchema(value); + } + /** Returns true if the given schema is TAny */ + function TAny(schema) { + return TKind(schema) && schema[exports.Kind] === 'Any' && IsOptionalString(schema.$id); + } + TypeGuard.TAny = TAny; + /** Returns true if the given schema is TArray */ + function TArray(schema) { + return (TKind(schema) && + schema[exports.Kind] === 'Array' && + schema.type === 'array' && + IsOptionalString(schema.$id) && + TSchema(schema.items) && + IsOptionalNumber(schema.minItems) && + IsOptionalNumber(schema.maxItems) && + IsOptionalBoolean(schema.uniqueItems)); + } + TypeGuard.TArray = TArray; + /** Returns true if the given schema is TBigInt */ + function TBigInt(schema) { + // prettier-ignore + return (TKind(schema) && + schema[exports.Kind] === 'BigInt' && + schema.type === 'null' && + schema.typeOf === 'BigInt' && + IsOptionalString(schema.$id) && + IsOptionalBigInt(schema.multipleOf) && + IsOptionalBigInt(schema.minimum) && + IsOptionalBigInt(schema.maximum) && + IsOptionalBigInt(schema.exclusiveMinimum) && + IsOptionalBigInt(schema.exclusiveMaximum)); + } + TypeGuard.TBigInt = TBigInt; + /** Returns true if the given schema is TBoolean */ + function TBoolean(schema) { + // prettier-ignore + return (TKind(schema) && + schema[exports.Kind] === 'Boolean' && + schema.type === 'boolean' && + IsOptionalString(schema.$id)); + } + TypeGuard.TBoolean = TBoolean; + /** Returns true if the given schema is TConstructor */ + function TConstructor(schema) { + // prettier-ignore + if (!(TKind(schema) && + schema[exports.Kind] === 'Constructor' && + schema.type === 'object' && + schema.instanceOf === 'Constructor' && + IsOptionalString(schema.$id) && + IsArray(schema.parameters) && + TSchema(schema.returns))) { + return false; + } + for (const parameter of schema.parameters) { + if (!TSchema(parameter)) + return false; + } + return true; + } + TypeGuard.TConstructor = TConstructor; + /** Returns true if the given schema is TDate */ + function TDate(schema) { + return (TKind(schema) && + schema[exports.Kind] === 'Date' && + schema.type === 'object' && + schema.instanceOf === 'Date' && + IsOptionalString(schema.$id) && + IsOptionalNumber(schema.minimumTimestamp) && + IsOptionalNumber(schema.maximumTimestamp) && + IsOptionalNumber(schema.exclusiveMinimumTimestamp) && + IsOptionalNumber(schema.exclusiveMaximumTimestamp)); + } + TypeGuard.TDate = TDate; + /** Returns true if the given schema is TFunction */ + function TFunction(schema) { + // prettier-ignore + if (!(TKind(schema) && + schema[exports.Kind] === 'Function' && + schema.type === 'object' && + schema.instanceOf === 'Function' && + IsOptionalString(schema.$id) && + IsArray(schema.parameters) && + TSchema(schema.returns))) { + return false; + } + for (const parameter of schema.parameters) { + if (!TSchema(parameter)) + return false; + } + return true; + } + TypeGuard.TFunction = TFunction; + /** Returns true if the given schema is TInteger */ + function TInteger(schema) { + return (TKind(schema) && + schema[exports.Kind] === 'Integer' && + schema.type === 'integer' && + IsOptionalString(schema.$id) && + IsOptionalNumber(schema.multipleOf) && + IsOptionalNumber(schema.minimum) && + IsOptionalNumber(schema.maximum) && + IsOptionalNumber(schema.exclusiveMinimum) && + IsOptionalNumber(schema.exclusiveMaximum)); + } + TypeGuard.TInteger = TInteger; + /** Returns true if the given schema is TIntersect */ + function TIntersect(schema) { + // prettier-ignore + if (!(TKind(schema) && + schema[exports.Kind] === 'Intersect' && + IsArray(schema.allOf) && + IsOptionalString(schema.type) && + (IsOptionalBoolean(schema.unevaluatedProperties) || IsOptionalSchema(schema.unevaluatedProperties)) && + IsOptionalString(schema.$id))) { + return false; + } + if ('type' in schema && schema.type !== 'object') { + return false; + } + for (const inner of schema.allOf) { + if (!TSchema(inner)) + return false; + } + return true; + } + TypeGuard.TIntersect = TIntersect; + /** Returns true if the given schema is TKind */ + function TKind(schema) { + return IsObject(schema) && exports.Kind in schema && typeof schema[exports.Kind] === 'string'; // TS 4.1.5: any required for symbol indexer + } + TypeGuard.TKind = TKind; + /** Returns true if the given schema is TLiteral */ + function TLiteral(schema) { + // prettier-ignore + return (TKind(schema) && + schema[exports.Kind] === 'Literal' && + IsOptionalString(schema.$id) && + (IsString(schema.const) || + IsNumber(schema.const) || + IsBoolean(schema.const) || + IsBigInt(schema.const))); + } + TypeGuard.TLiteral = TLiteral; + /** Returns true if the given schema is TNever */ + function TNever(schema) { + return TKind(schema) && schema[exports.Kind] === 'Never' && IsObject(schema.not) && globalThis.Object.getOwnPropertyNames(schema.not).length === 0; + } + TypeGuard.TNever = TNever; + /** Returns true if the given schema is TNot */ + function TNot(schema) { + // prettier-ignore + return (TKind(schema) && + schema[exports.Kind] === 'Not' && + IsArray(schema.allOf) && + schema.allOf.length === 2 && + IsObject(schema.allOf[0]) && + TSchema(schema.allOf[0].not) && + TSchema(schema.allOf[1])); + } + TypeGuard.TNot = TNot; + /** Returns true if the given schema is TNull */ + function TNull(schema) { + // prettier-ignore + return (TKind(schema) && + schema[exports.Kind] === 'Null' && + schema.type === 'null' && + IsOptionalString(schema.$id)); + } + TypeGuard.TNull = TNull; + /** Returns true if the given schema is TNumber */ + function TNumber(schema) { + return (TKind(schema) && + schema[exports.Kind] === 'Number' && + schema.type === 'number' && + IsOptionalString(schema.$id) && + IsOptionalNumber(schema.multipleOf) && + IsOptionalNumber(schema.minimum) && + IsOptionalNumber(schema.maximum) && + IsOptionalNumber(schema.exclusiveMinimum) && + IsOptionalNumber(schema.exclusiveMaximum)); + } + TypeGuard.TNumber = TNumber; + /** Returns true if the given schema is TObject */ + function TObject(schema) { + if (!(TKind(schema) && + schema[exports.Kind] === 'Object' && + schema.type === 'object' && + IsOptionalString(schema.$id) && + IsObject(schema.properties) && + (IsOptionalBoolean(schema.additionalProperties) || IsOptionalSchema(schema.additionalProperties)) && + IsOptionalNumber(schema.minProperties) && + IsOptionalNumber(schema.maxProperties))) { + return false; + } + for (const [key, value] of Object.entries(schema.properties)) { + if (!IsControlCharacterFree(key)) + return false; + if (!TSchema(value)) + return false; + } + return true; + } + TypeGuard.TObject = TObject; + /** Returns true if the given schema is TPromise */ + function TPromise(schema) { + // prettier-ignore + return (TKind(schema) && + schema[exports.Kind] === 'Promise' && + schema.type === 'object' && + schema.instanceOf === 'Promise' && + IsOptionalString(schema.$id) && + TSchema(schema.item)); + } + TypeGuard.TPromise = TPromise; + /** Returns true if the given schema is TRecord */ + function TRecord(schema) { + // prettier-ignore + if (!(TKind(schema) && + schema[exports.Kind] === 'Record' && + schema.type === 'object' && + IsOptionalString(schema.$id) && + schema.additionalProperties === false && + IsObject(schema.patternProperties))) { + return false; + } + const keys = Object.keys(schema.patternProperties); + if (keys.length !== 1) { + return false; + } + if (!IsPattern(keys[0])) { + return false; + } + if (!TSchema(schema.patternProperties[keys[0]])) { + return false; + } + return true; + } + TypeGuard.TRecord = TRecord; + /** Returns true if the given schema is TRef */ + function TRef(schema) { + // prettier-ignore + return (TKind(schema) && + schema[exports.Kind] === 'Ref' && + IsOptionalString(schema.$id) && + IsString(schema.$ref)); + } + TypeGuard.TRef = TRef; + /** Returns true if the given schema is TString */ + function TString(schema) { + return (TKind(schema) && + schema[exports.Kind] === 'String' && + schema.type === 'string' && + IsOptionalString(schema.$id) && + IsOptionalNumber(schema.minLength) && + IsOptionalNumber(schema.maxLength) && + IsOptionalPattern(schema.pattern) && + IsOptionalFormat(schema.format)); + } + TypeGuard.TString = TString; + /** Returns true if the given schema is TSymbol */ + function TSymbol(schema) { + // prettier-ignore + return (TKind(schema) && + schema[exports.Kind] === 'Symbol' && + schema.type === 'null' && + schema.typeOf === 'Symbol' && + IsOptionalString(schema.$id)); + } + TypeGuard.TSymbol = TSymbol; + /** Returns true if the given schema is TTemplateLiteral */ + function TTemplateLiteral(schema) { + // prettier-ignore + return (TKind(schema) && + schema[exports.Kind] === 'TemplateLiteral' && + schema.type === 'string' && + IsString(schema.pattern) && + schema.pattern[0] === '^' && + schema.pattern[schema.pattern.length - 1] === '$'); + } + TypeGuard.TTemplateLiteral = TTemplateLiteral; + /** Returns true if the given schema is TThis */ + function TThis(schema) { + // prettier-ignore + return (TKind(schema) && + schema[exports.Kind] === 'This' && + IsOptionalString(schema.$id) && + IsString(schema.$ref)); + } + TypeGuard.TThis = TThis; + /** Returns true if the given schema is TTuple */ + function TTuple(schema) { + // prettier-ignore + if (!(TKind(schema) && + schema[exports.Kind] === 'Tuple' && + schema.type === 'array' && + IsOptionalString(schema.$id) && + IsNumber(schema.minItems) && + IsNumber(schema.maxItems) && + schema.minItems === schema.maxItems)) { + return false; + } + if (schema.items === undefined && schema.additionalItems === undefined && schema.minItems === 0) { + return true; + } + if (!IsArray(schema.items)) { + return false; + } + for (const inner of schema.items) { + if (!TSchema(inner)) + return false; + } + return true; + } + TypeGuard.TTuple = TTuple; + /** Returns true if the given schema is TUndefined */ + function TUndefined(schema) { + // prettier-ignore + return (TKind(schema) && + schema[exports.Kind] === 'Undefined' && + schema.type === 'null' && + schema.typeOf === 'Undefined' && + IsOptionalString(schema.$id)); + } + TypeGuard.TUndefined = TUndefined; + /** Returns true if the given schema is TUnion */ + function TUnion(schema) { + // prettier-ignore + if (!(TKind(schema) && + schema[exports.Kind] === 'Union' && + IsArray(schema.anyOf) && + IsOptionalString(schema.$id))) { + return false; + } + for (const inner of schema.anyOf) { + if (!TSchema(inner)) + return false; + } + return true; + } + TypeGuard.TUnion = TUnion; + /** Returns true if the given schema is TUnion[]> */ + function TUnionLiteral(schema) { + return TUnion(schema) && schema.anyOf.every((schema) => TLiteral(schema) && typeof schema.const === 'string'); + } + TypeGuard.TUnionLiteral = TUnionLiteral; + /** Returns true if the given schema is TUint8Array */ + function TUint8Array(schema) { + return TKind(schema) && schema[exports.Kind] === 'Uint8Array' && schema.type === 'object' && IsOptionalString(schema.$id) && schema.instanceOf === 'Uint8Array' && IsOptionalNumber(schema.minByteLength) && IsOptionalNumber(schema.maxByteLength); + } + TypeGuard.TUint8Array = TUint8Array; + /** Returns true if the given schema is TUnknown */ + function TUnknown(schema) { + // prettier-ignore + return (TKind(schema) && + schema[exports.Kind] === 'Unknown' && + IsOptionalString(schema.$id)); + } + TypeGuard.TUnknown = TUnknown; + /** Returns true if the given schema is a raw TUnsafe */ + function TUnsafe(schema) { + // prettier-ignore + return (TKind(schema) && + schema[exports.Kind] === 'Unsafe'); + } + TypeGuard.TUnsafe = TUnsafe; + /** Returns true if the given schema is TVoid */ + function TVoid(schema) { + // prettier-ignore + return (TKind(schema) && + schema[exports.Kind] === 'Void' && + schema.type === 'null' && + schema.typeOf === 'Void' && + IsOptionalString(schema.$id)); + } + TypeGuard.TVoid = TVoid; + /** Returns true if this schema has the ReadonlyOptional modifier */ + function TReadonlyOptional(schema) { + return IsObject(schema) && schema[exports.Modifier] === 'ReadonlyOptional'; + } + TypeGuard.TReadonlyOptional = TReadonlyOptional; + /** Returns true if this schema has the Readonly modifier */ + function TReadonly(schema) { + return IsObject(schema) && schema[exports.Modifier] === 'Readonly'; + } + TypeGuard.TReadonly = TReadonly; + /** Returns true if this schema has the Optional modifier */ + function TOptional(schema) { + return IsObject(schema) && schema[exports.Modifier] === 'Optional'; + } + TypeGuard.TOptional = TOptional; + /** Returns true if the given schema is TSchema */ + function TSchema(schema) { + return (typeof schema === 'object' && + (TAny(schema) || + TArray(schema) || + TBoolean(schema) || + TBigInt(schema) || + TConstructor(schema) || + TDate(schema) || + TFunction(schema) || + TInteger(schema) || + TIntersect(schema) || + TLiteral(schema) || + TNever(schema) || + TNot(schema) || + TNull(schema) || + TNumber(schema) || + TObject(schema) || + TPromise(schema) || + TRecord(schema) || + TRef(schema) || + TString(schema) || + TSymbol(schema) || + TTemplateLiteral(schema) || + TThis(schema) || + TTuple(schema) || + TUndefined(schema) || + TUnion(schema) || + TUint8Array(schema) || + TUnknown(schema) || + TUnsafe(schema) || + TVoid(schema) || + (TKind(schema) && TypeRegistry.Has(schema[exports.Kind])))); + } + TypeGuard.TSchema = TSchema; +})(TypeGuard = exports.TypeGuard || (exports.TypeGuard = {})); +// -------------------------------------------------------------------------- +// ExtendsUndefined +// -------------------------------------------------------------------------- +/** Fast undefined check used for properties of type undefined */ +var ExtendsUndefined; +(function (ExtendsUndefined) { + function Check(schema) { + if (schema[exports.Kind] === 'Undefined') + return true; + if (schema[exports.Kind] === 'Union') { + const union = schema; + return union.anyOf.some((schema) => Check(schema)); + } + return false; + } + ExtendsUndefined.Check = Check; +})(ExtendsUndefined = exports.ExtendsUndefined || (exports.ExtendsUndefined = {})); +// -------------------------------------------------------------------------- +// TypeExtends +// -------------------------------------------------------------------------- +var TypeExtendsResult; +(function (TypeExtendsResult) { + TypeExtendsResult[TypeExtendsResult["Union"] = 0] = "Union"; + TypeExtendsResult[TypeExtendsResult["True"] = 1] = "True"; + TypeExtendsResult[TypeExtendsResult["False"] = 2] = "False"; +})(TypeExtendsResult = exports.TypeExtendsResult || (exports.TypeExtendsResult = {})); +var TypeExtends; +(function (TypeExtends) { + // -------------------------------------------------------------------------- + // IntoBooleanResult + // -------------------------------------------------------------------------- + function IntoBooleanResult(result) { + return result === TypeExtendsResult.False ? TypeExtendsResult.False : TypeExtendsResult.True; + } + // -------------------------------------------------------------------------- + // Any + // -------------------------------------------------------------------------- + function AnyRight(left, right) { + return TypeExtendsResult.True; + } + function Any(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right) && right.anyOf.some((schema) => TypeGuard.TAny(schema) || TypeGuard.TUnknown(schema))) + return TypeExtendsResult.True; + if (TypeGuard.TUnion(right)) + return TypeExtendsResult.Union; + if (TypeGuard.TUnknown(right)) + return TypeExtendsResult.True; + if (TypeGuard.TAny(right)) + return TypeExtendsResult.True; + return TypeExtendsResult.Union; + } + // -------------------------------------------------------------------------- + // Array + // -------------------------------------------------------------------------- + function ArrayRight(left, right) { + if (TypeGuard.TUnknown(left)) + return TypeExtendsResult.False; + if (TypeGuard.TAny(left)) + return TypeExtendsResult.Union; + if (TypeGuard.TNever(left)) + return TypeExtendsResult.True; + return TypeExtendsResult.False; + } + function Array(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TObject(right) && IsObjectArrayLike(right)) + return TypeExtendsResult.True; + if (!TypeGuard.TArray(right)) + return TypeExtendsResult.False; + return IntoBooleanResult(Visit(left.items, right.items)); + } + // -------------------------------------------------------------------------- + // BigInt + // -------------------------------------------------------------------------- + function BigInt(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TNever(right)) + return NeverRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TObject(right)) + return ObjectRight(left, right); + if (TypeGuard.TRecord(right)) + return RecordRight(left, right); + return TypeGuard.TBigInt(right) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + // -------------------------------------------------------------------------- + // Boolean + // -------------------------------------------------------------------------- + function BooleanRight(left, right) { + if (TypeGuard.TLiteral(left) && typeof left.const === 'boolean') + return TypeExtendsResult.True; + return TypeGuard.TBoolean(left) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + function Boolean(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TNever(right)) + return NeverRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TObject(right)) + return ObjectRight(left, right); + if (TypeGuard.TRecord(right)) + return RecordRight(left, right); + return TypeGuard.TBoolean(right) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + // -------------------------------------------------------------------------- + // Constructor + // -------------------------------------------------------------------------- + function Constructor(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TObject(right)) + return ObjectRight(left, right); + if (!TypeGuard.TConstructor(right)) + return TypeExtendsResult.False; + if (left.parameters.length > right.parameters.length) + return TypeExtendsResult.False; + if (!left.parameters.every((schema, index) => IntoBooleanResult(Visit(right.parameters[index], schema)) === TypeExtendsResult.True)) { + return TypeExtendsResult.False; + } + return IntoBooleanResult(Visit(left.returns, right.returns)); + } + // -------------------------------------------------------------------------- + // Date + // -------------------------------------------------------------------------- + function Date(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TObject(right)) + return ObjectRight(left, right); + if (TypeGuard.TRecord(right)) + return RecordRight(left, right); + return TypeGuard.TDate(right) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + // -------------------------------------------------------------------------- + // Function + // -------------------------------------------------------------------------- + function Function(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TObject(right)) + return ObjectRight(left, right); + if (!TypeGuard.TFunction(right)) + return TypeExtendsResult.False; + if (left.parameters.length > right.parameters.length) + return TypeExtendsResult.False; + if (!left.parameters.every((schema, index) => IntoBooleanResult(Visit(right.parameters[index], schema)) === TypeExtendsResult.True)) { + return TypeExtendsResult.False; + } + return IntoBooleanResult(Visit(left.returns, right.returns)); + } + // -------------------------------------------------------------------------- + // Integer + // -------------------------------------------------------------------------- + function IntegerRight(left, right) { + if (TypeGuard.TLiteral(left) && typeof left.const === 'number') + return TypeExtendsResult.True; + return TypeGuard.TNumber(left) || TypeGuard.TInteger(left) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + function Integer(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TNever(right)) + return NeverRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TObject(right)) + return ObjectRight(left, right); + if (TypeGuard.TRecord(right)) + return RecordRight(left, right); + return TypeGuard.TInteger(right) || TypeGuard.TNumber(right) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + // -------------------------------------------------------------------------- + // Intersect + // -------------------------------------------------------------------------- + function IntersectRight(left, right) { + return right.allOf.every((schema) => Visit(left, schema) === TypeExtendsResult.True) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + function Intersect(left, right) { + return left.allOf.some((schema) => Visit(schema, right) === TypeExtendsResult.True) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + // -------------------------------------------------------------------------- + // Literal + // -------------------------------------------------------------------------- + function IsLiteralString(schema) { + return typeof schema.const === 'string'; + } + function IsLiteralNumber(schema) { + return typeof schema.const === 'number'; + } + function IsLiteralBoolean(schema) { + return typeof schema.const === 'boolean'; + } + function Literal(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TNever(right)) + return NeverRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TObject(right)) + return ObjectRight(left, right); + if (TypeGuard.TRecord(right)) + return RecordRight(left, right); + if (TypeGuard.TString(right)) + return StringRight(left, right); + if (TypeGuard.TNumber(right)) + return NumberRight(left, right); + if (TypeGuard.TInteger(right)) + return IntegerRight(left, right); + if (TypeGuard.TBoolean(right)) + return BooleanRight(left, right); + return TypeGuard.TLiteral(right) && right.const === left.const ? TypeExtendsResult.True : TypeExtendsResult.False; + } + // -------------------------------------------------------------------------- + // Never + // -------------------------------------------------------------------------- + function NeverRight(left, right) { + return TypeExtendsResult.False; + } + function Never(left, right) { + return TypeExtendsResult.True; + } + // -------------------------------------------------------------------------- + // Null + // -------------------------------------------------------------------------- + function Null(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TNever(right)) + return NeverRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TObject(right)) + return ObjectRight(left, right); + if (TypeGuard.TRecord(right)) + return RecordRight(left, right); + return TypeGuard.TNull(right) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + // -------------------------------------------------------------------------- + // Number + // -------------------------------------------------------------------------- + function NumberRight(left, right) { + if (TypeGuard.TLiteral(left) && IsLiteralNumber(left)) + return TypeExtendsResult.True; + return TypeGuard.TNumber(left) || TypeGuard.TInteger(left) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + function Number(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TNever(right)) + return NeverRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TObject(right)) + return ObjectRight(left, right); + if (TypeGuard.TRecord(right)) + return RecordRight(left, right); + return TypeGuard.TInteger(right) || TypeGuard.TNumber(right) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + // -------------------------------------------------------------------------- + // Object + // -------------------------------------------------------------------------- + function IsObjectPropertyCount(schema, count) { + return globalThis.Object.keys(schema.properties).length === count; + } + function IsObjectStringLike(schema) { + return IsObjectArrayLike(schema); + } + function IsObjectSymbolLike(schema) { + // prettier-ignore + return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'description' in schema.properties && TypeGuard.TUnion(schema.properties.description) && schema.properties.description.anyOf.length === 2 && ((TypeGuard.TString(schema.properties.description.anyOf[0]) && + TypeGuard.TUndefined(schema.properties.description.anyOf[1])) || (TypeGuard.TString(schema.properties.description.anyOf[1]) && + TypeGuard.TUndefined(schema.properties.description.anyOf[0])))); + } + function IsObjectNumberLike(schema) { + return IsObjectPropertyCount(schema, 0); + } + function IsObjectBooleanLike(schema) { + return IsObjectPropertyCount(schema, 0); + } + function IsObjectBigIntLike(schema) { + return IsObjectPropertyCount(schema, 0); + } + function IsObjectDateLike(schema) { + return IsObjectPropertyCount(schema, 0); + } + function IsObjectUint8ArrayLike(schema) { + return IsObjectArrayLike(schema); + } + function IsObjectFunctionLike(schema) { + const length = exports.Type.Number(); + return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'length' in schema.properties && IntoBooleanResult(Visit(schema.properties['length'], length)) === TypeExtendsResult.True); + } + function IsObjectConstructorLike(schema) { + return IsObjectPropertyCount(schema, 0); + } + function IsObjectArrayLike(schema) { + const length = exports.Type.Number(); + return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'length' in schema.properties && IntoBooleanResult(Visit(schema.properties['length'], length)) === TypeExtendsResult.True); + } + function IsObjectPromiseLike(schema) { + const then = exports.Type.Function([exports.Type.Any()], exports.Type.Any()); + return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'then' in schema.properties && IntoBooleanResult(Visit(schema.properties['then'], then)) === TypeExtendsResult.True); + } + // -------------------------------------------------------------------------- + // Property + // -------------------------------------------------------------------------- + function Property(left, right) { + if (Visit(left, right) === TypeExtendsResult.False) + return TypeExtendsResult.False; + if (TypeGuard.TOptional(left) && !TypeGuard.TOptional(right)) + return TypeExtendsResult.False; + return TypeExtendsResult.True; + } + function ObjectRight(left, right) { + if (TypeGuard.TUnknown(left)) + return TypeExtendsResult.False; + if (TypeGuard.TAny(left)) + return TypeExtendsResult.Union; + if (TypeGuard.TNever(left)) + return TypeExtendsResult.True; + if (TypeGuard.TLiteral(left) && IsLiteralString(left) && IsObjectStringLike(right)) + return TypeExtendsResult.True; + if (TypeGuard.TLiteral(left) && IsLiteralNumber(left) && IsObjectNumberLike(right)) + return TypeExtendsResult.True; + if (TypeGuard.TLiteral(left) && IsLiteralBoolean(left) && IsObjectBooleanLike(right)) + return TypeExtendsResult.True; + if (TypeGuard.TSymbol(left) && IsObjectSymbolLike(right)) + return TypeExtendsResult.True; + if (TypeGuard.TBigInt(left) && IsObjectBigIntLike(right)) + return TypeExtendsResult.True; + if (TypeGuard.TString(left) && IsObjectStringLike(right)) + return TypeExtendsResult.True; + if (TypeGuard.TSymbol(left) && IsObjectSymbolLike(right)) + return TypeExtendsResult.True; + if (TypeGuard.TNumber(left) && IsObjectNumberLike(right)) + return TypeExtendsResult.True; + if (TypeGuard.TInteger(left) && IsObjectNumberLike(right)) + return TypeExtendsResult.True; + if (TypeGuard.TBoolean(left) && IsObjectBooleanLike(right)) + return TypeExtendsResult.True; + if (TypeGuard.TUint8Array(left) && IsObjectUint8ArrayLike(right)) + return TypeExtendsResult.True; + if (TypeGuard.TDate(left) && IsObjectDateLike(right)) + return TypeExtendsResult.True; + if (TypeGuard.TConstructor(left) && IsObjectConstructorLike(right)) + return TypeExtendsResult.True; + if (TypeGuard.TFunction(left) && IsObjectFunctionLike(right)) + return TypeExtendsResult.True; + if (TypeGuard.TRecord(left) && TypeGuard.TString(RecordKey(left))) { + // When expressing a Record with literal key values, the Record is converted into a Object with + // the Hint assigned as `Record`. This is used to invert the extends logic. + return right[exports.Hint] === 'Record' ? TypeExtendsResult.True : TypeExtendsResult.False; + } + if (TypeGuard.TRecord(left) && TypeGuard.TNumber(RecordKey(left))) { + return IsObjectPropertyCount(right, 0) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + return TypeExtendsResult.False; + } + function Object(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TRecord(right)) + return RecordRight(left, right); + if (!TypeGuard.TObject(right)) + return TypeExtendsResult.False; + for (const key of globalThis.Object.keys(right.properties)) { + if (!(key in left.properties)) + return TypeExtendsResult.False; + if (Property(left.properties[key], right.properties[key]) === TypeExtendsResult.False) { + return TypeExtendsResult.False; + } + } + return TypeExtendsResult.True; + } + // -------------------------------------------------------------------------- + // Promise + // -------------------------------------------------------------------------- + function Promise(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TObject(right) && IsObjectPromiseLike(right)) + return TypeExtendsResult.True; + if (!TypeGuard.TPromise(right)) + return TypeExtendsResult.False; + return IntoBooleanResult(Visit(left.item, right.item)); + } + // -------------------------------------------------------------------------- + // Record + // -------------------------------------------------------------------------- + function RecordKey(schema) { + if (exports.PatternNumberExact in schema.patternProperties) + return exports.Type.Number(); + if (exports.PatternStringExact in schema.patternProperties) + return exports.Type.String(); + throw Error('TypeExtends: Cannot get record key'); + } + function RecordValue(schema) { + if (exports.PatternNumberExact in schema.patternProperties) + return schema.patternProperties[exports.PatternNumberExact]; + if (exports.PatternStringExact in schema.patternProperties) + return schema.patternProperties[exports.PatternStringExact]; + throw Error('TypeExtends: Cannot get record value'); + } + function RecordRight(left, right) { + const Key = RecordKey(right); + const Value = RecordValue(right); + if (TypeGuard.TLiteral(left) && IsLiteralString(left) && TypeGuard.TNumber(Key) && IntoBooleanResult(Visit(left, Value)) === TypeExtendsResult.True) + return TypeExtendsResult.True; + if (TypeGuard.TUint8Array(left) && TypeGuard.TNumber(Key)) + return Visit(left, Value); + if (TypeGuard.TString(left) && TypeGuard.TNumber(Key)) + return Visit(left, Value); + if (TypeGuard.TArray(left) && TypeGuard.TNumber(Key)) + return Visit(left, Value); + if (TypeGuard.TObject(left)) { + for (const key of globalThis.Object.keys(left.properties)) { + if (Property(Value, left.properties[key]) === TypeExtendsResult.False) { + return TypeExtendsResult.False; + } + } + return TypeExtendsResult.True; + } + return TypeExtendsResult.False; + } + function Record(left, right) { + const Value = RecordValue(left); + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TObject(right)) + return ObjectRight(left, right); + if (!TypeGuard.TRecord(right)) + return TypeExtendsResult.False; + return Visit(Value, RecordValue(right)); + } + // -------------------------------------------------------------------------- + // String + // -------------------------------------------------------------------------- + function StringRight(left, right) { + if (TypeGuard.TLiteral(left) && typeof left.const === 'string') + return TypeExtendsResult.True; + return TypeGuard.TString(left) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + function String(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TNever(right)) + return NeverRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TObject(right)) + return ObjectRight(left, right); + if (TypeGuard.TRecord(right)) + return RecordRight(left, right); + return TypeGuard.TString(right) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + // -------------------------------------------------------------------------- + // Symbol + // -------------------------------------------------------------------------- + function Symbol(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TNever(right)) + return NeverRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TObject(right)) + return ObjectRight(left, right); + if (TypeGuard.TRecord(right)) + return RecordRight(left, right); + return TypeGuard.TSymbol(right) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + // -------------------------------------------------------------------------- + // Tuple + // -------------------------------------------------------------------------- + function TupleRight(left, right) { + if (TypeGuard.TUnknown(left)) + return TypeExtendsResult.False; + if (TypeGuard.TAny(left)) + return TypeExtendsResult.Union; + if (TypeGuard.TNever(left)) + return TypeExtendsResult.True; + return TypeExtendsResult.False; + } + function IsArrayOfTuple(left, right) { + return TypeGuard.TArray(right) && left.items !== undefined && left.items.every((schema) => Visit(schema, right.items) === TypeExtendsResult.True); + } + function Tuple(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TObject(right) && IsObjectArrayLike(right)) + return TypeExtendsResult.True; + if (TypeGuard.TArray(right) && IsArrayOfTuple(left, right)) + return TypeExtendsResult.True; + if (!TypeGuard.TTuple(right)) + return TypeExtendsResult.False; + if ((left.items === undefined && right.items !== undefined) || (left.items !== undefined && right.items === undefined)) + return TypeExtendsResult.False; + if (left.items === undefined && right.items === undefined) + return TypeExtendsResult.True; + return left.items.every((schema, index) => Visit(schema, right.items[index]) === TypeExtendsResult.True) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + // -------------------------------------------------------------------------- + // Uint8Array + // -------------------------------------------------------------------------- + function Uint8Array(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TObject(right)) + return ObjectRight(left, right); + if (TypeGuard.TRecord(right)) + return RecordRight(left, right); + return TypeGuard.TUint8Array(right) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + // -------------------------------------------------------------------------- + // Undefined + // -------------------------------------------------------------------------- + function Undefined(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TNever(right)) + return NeverRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TObject(right)) + return ObjectRight(left, right); + if (TypeGuard.TRecord(right)) + return RecordRight(left, right); + if (TypeGuard.TVoid(right)) + return VoidRight(left, right); + return TypeGuard.TUndefined(right) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + // -------------------------------------------------------------------------- + // Union + // -------------------------------------------------------------------------- + function UnionRight(left, right) { + return right.anyOf.some((schema) => Visit(left, schema) === TypeExtendsResult.True) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + function Union(left, right) { + return left.anyOf.every((schema) => Visit(schema, right) === TypeExtendsResult.True) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + // -------------------------------------------------------------------------- + // Unknown + // -------------------------------------------------------------------------- + function UnknownRight(left, right) { + return TypeExtendsResult.True; + } + function Unknown(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TString(right)) + return StringRight(left, right); + if (TypeGuard.TNumber(right)) + return NumberRight(left, right); + if (TypeGuard.TInteger(right)) + return IntegerRight(left, right); + if (TypeGuard.TBoolean(right)) + return BooleanRight(left, right); + if (TypeGuard.TArray(right)) + return ArrayRight(left, right); + if (TypeGuard.TTuple(right)) + return TupleRight(left, right); + if (TypeGuard.TObject(right)) + return ObjectRight(left, right); + return TypeGuard.TUnknown(right) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + // -------------------------------------------------------------------------- + // Void + // -------------------------------------------------------------------------- + function VoidRight(left, right) { + if (TypeGuard.TUndefined(left)) + return TypeExtendsResult.True; + return TypeGuard.TUndefined(left) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + function Void(left, right) { + if (TypeGuard.TIntersect(right)) + return IntersectRight(left, right); + if (TypeGuard.TUnion(right)) + return UnionRight(left, right); + if (TypeGuard.TUnknown(right)) + return UnknownRight(left, right); + if (TypeGuard.TAny(right)) + return AnyRight(left, right); + if (TypeGuard.TObject(right)) + return ObjectRight(left, right); + return TypeGuard.TVoid(right) ? TypeExtendsResult.True : TypeExtendsResult.False; + } + function Visit(left, right) { + // template union remap + if (TypeGuard.TTemplateLiteral(left)) + return Visit(TemplateLiteralResolver.Resolve(left), right); + if (TypeGuard.TTemplateLiteral(right)) + return Visit(left, TemplateLiteralResolver.Resolve(right)); + // standard extends + if (TypeGuard.TAny(left)) + return Any(left, right); + if (TypeGuard.TArray(left)) + return Array(left, right); + if (TypeGuard.TBigInt(left)) + return BigInt(left, right); + if (TypeGuard.TBoolean(left)) + return Boolean(left, right); + if (TypeGuard.TConstructor(left)) + return Constructor(left, right); + if (TypeGuard.TDate(left)) + return Date(left, right); + if (TypeGuard.TFunction(left)) + return Function(left, right); + if (TypeGuard.TInteger(left)) + return Integer(left, right); + if (TypeGuard.TIntersect(left)) + return Intersect(left, right); + if (TypeGuard.TLiteral(left)) + return Literal(left, right); + if (TypeGuard.TNever(left)) + return Never(left, right); + if (TypeGuard.TNull(left)) + return Null(left, right); + if (TypeGuard.TNumber(left)) + return Number(left, right); + if (TypeGuard.TObject(left)) + return Object(left, right); + if (TypeGuard.TRecord(left)) + return Record(left, right); + if (TypeGuard.TString(left)) + return String(left, right); + if (TypeGuard.TSymbol(left)) + return Symbol(left, right); + if (TypeGuard.TTuple(left)) + return Tuple(left, right); + if (TypeGuard.TPromise(left)) + return Promise(left, right); + if (TypeGuard.TUint8Array(left)) + return Uint8Array(left, right); + if (TypeGuard.TUndefined(left)) + return Undefined(left, right); + if (TypeGuard.TUnion(left)) + return Union(left, right); + if (TypeGuard.TUnknown(left)) + return Unknown(left, right); + if (TypeGuard.TVoid(left)) + return Void(left, right); + throw Error(`TypeExtends: Unknown left type operand '${left[exports.Kind]}'`); + } + function Extends(left, right) { + return Visit(left, right); + } + TypeExtends.Extends = Extends; +})(TypeExtends = exports.TypeExtends || (exports.TypeExtends = {})); +// -------------------------------------------------------------------------- +// TypeClone +// -------------------------------------------------------------------------- +/** Specialized Clone for Types */ +var TypeClone; +(function (TypeClone) { + function IsObject(value) { + return typeof value === 'object' && value !== null; + } + function IsArray(value) { + return globalThis.Array.isArray(value); + } + function Array(value) { + return value.map((value) => Visit(value)); + } + function Object(value) { + const clonedProperties = globalThis.Object.getOwnPropertyNames(value).reduce((acc, key) => { + return { ...acc, [key]: Visit(value[key]) }; + }, {}); + const clonedSymbols = globalThis.Object.getOwnPropertySymbols(value).reduce((acc, key) => { + return { ...acc, [key]: Visit(value[key]) }; + }, {}); + return { ...clonedProperties, ...clonedSymbols }; + } + function Visit(value) { + if (IsArray(value)) + return Array(value); + if (IsObject(value)) + return Object(value); + return value; + } + /** Clones a type. */ + function Clone(schema, options) { + return { ...Visit(schema), ...options }; + } + TypeClone.Clone = Clone; +})(TypeClone = exports.TypeClone || (exports.TypeClone = {})); +// -------------------------------------------------------------------------- +// ObjectMap +// -------------------------------------------------------------------------- +var ObjectMap; +(function (ObjectMap) { + function Intersect(schema, callback) { + // prettier-ignore + return exports.Type.Intersect(schema.allOf.map((inner) => Visit(inner, callback)), { ...schema }); + } + function Union(schema, callback) { + // prettier-ignore + return exports.Type.Union(schema.anyOf.map((inner) => Visit(inner, callback)), { ...schema }); + } + function Object(schema, callback) { + return callback(schema); + } + function Visit(schema, callback) { + // There are cases where users need to map objects with unregistered kinds. Using a TypeGuard here would + // prevent sub schema mapping as unregistered kinds will not pass TSchema checks. This is notable in the + // case of TObject where unregistered property kinds cause the TObject check to fail. As mapping is only + // used for composition, we use explicit checks instead. + if (schema[exports.Kind] === 'Intersect') + return Intersect(schema, callback); + if (schema[exports.Kind] === 'Union') + return Union(schema, callback); + if (schema[exports.Kind] === 'Object') + return Object(schema, callback); + return schema; + } + function Map(schema, callback, options) { + return { ...Visit(TypeClone.Clone(schema, {}), callback), ...options }; + } + ObjectMap.Map = Map; +})(ObjectMap = exports.ObjectMap || (exports.ObjectMap = {})); +// -------------------------------------------------------------------------- +// KeyResolver +// -------------------------------------------------------------------------- +var KeyResolver; +(function (KeyResolver) { + function IsKeyable(schema) { + return TypeGuard.TIntersect(schema) || TypeGuard.TUnion(schema) || (TypeGuard.TObject(schema) && globalThis.Object.getOwnPropertyNames(schema.properties).length > 0); + } + function Intersect(schema) { + return [...schema.allOf.filter((schema) => IsKeyable(schema)).reduce((set, schema) => Visit(schema).map((key) => set.add(key))[0], new Set())]; + } + function Union(schema) { + const sets = schema.anyOf.filter((schema) => IsKeyable(schema)).map((inner) => Visit(inner)); + return [...sets.reduce((set, outer) => outer.map((key) => (sets.every((inner) => inner.includes(key)) ? set.add(key) : set))[0], new Set())]; + } + function Object(schema) { + return globalThis.Object.keys(schema.properties); + } + function Visit(schema) { + if (TypeGuard.TIntersect(schema)) + return Intersect(schema); + if (TypeGuard.TUnion(schema)) + return Union(schema); + if (TypeGuard.TObject(schema)) + return Object(schema); + return []; + } + function Resolve(schema) { + return Visit(schema); + } + KeyResolver.Resolve = Resolve; +})(KeyResolver = exports.KeyResolver || (exports.KeyResolver = {})); +// -------------------------------------------------------------------------- +// TemplateLiteralPattern +// -------------------------------------------------------------------------- +var TemplateLiteralPattern; +(function (TemplateLiteralPattern) { + function Escape(value) { + return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + } + function Visit(schema, acc) { + if (TypeGuard.TTemplateLiteral(schema)) { + const pattern = schema.pattern.slice(1, schema.pattern.length - 1); + return pattern; + } + else if (TypeGuard.TUnion(schema)) { + const tokens = schema.anyOf.map((schema) => Visit(schema, acc)).join('|'); + return `(${tokens})`; + } + else if (TypeGuard.TNumber(schema)) { + return `${acc}${exports.PatternNumber}`; + } + else if (TypeGuard.TInteger(schema)) { + return `${acc}${exports.PatternNumber}`; + } + else if (TypeGuard.TBigInt(schema)) { + return `${acc}${exports.PatternNumber}`; + } + else if (TypeGuard.TString(schema)) { + return `${acc}${exports.PatternString}`; + } + else if (TypeGuard.TLiteral(schema)) { + return `${acc}${Escape(schema.const.toString())}`; + } + else if (TypeGuard.TBoolean(schema)) { + return `${acc}${exports.PatternBoolean}`; + } + else if (TypeGuard.TNever(schema)) { + throw Error('TemplateLiteralPattern: TemplateLiteral cannot operate on types of TNever'); + } + else { + throw Error(`TemplateLiteralPattern: Unexpected Kind '${schema[exports.Kind]}'`); + } + } + function Create(kinds) { + return `^${kinds.map((schema) => Visit(schema, '')).join('')}\$`; + } + TemplateLiteralPattern.Create = Create; +})(TemplateLiteralPattern = exports.TemplateLiteralPattern || (exports.TemplateLiteralPattern = {})); +// -------------------------------------------------------------------------------------- +// TemplateLiteralResolver +// -------------------------------------------------------------------------------------- +var TemplateLiteralResolver; +(function (TemplateLiteralResolver) { + function Resolve(template) { + const expression = TemplateLiteralParser.ParseExact(template.pattern); + if (!TemplateLiteralFinite.Check(expression)) + return exports.Type.String(); + const literals = [...TemplateLiteralGenerator.Generate(expression)].map((value) => exports.Type.Literal(value)); + return exports.Type.Union(literals); + } + TemplateLiteralResolver.Resolve = Resolve; +})(TemplateLiteralResolver = exports.TemplateLiteralResolver || (exports.TemplateLiteralResolver = {})); +// -------------------------------------------------------------------------------------- +// TemplateLiteralParser +// -------------------------------------------------------------------------------------- +class TemplateLiteralParserError extends Error { + constructor(message) { + super(message); + } +} +exports.TemplateLiteralParserError = TemplateLiteralParserError; +var TemplateLiteralParser; +(function (TemplateLiteralParser) { + function IsNonEscaped(pattern, index, char) { + return pattern[index] === char && pattern.charCodeAt(index - 1) !== 92; + } + function IsOpenParen(pattern, index) { + return IsNonEscaped(pattern, index, '('); + } + function IsCloseParen(pattern, index) { + return IsNonEscaped(pattern, index, ')'); + } + function IsSeparator(pattern, index) { + return IsNonEscaped(pattern, index, '|'); + } + function IsGroup(pattern) { + if (!(IsOpenParen(pattern, 0) && IsCloseParen(pattern, pattern.length - 1))) + return false; + let count = 0; + for (let index = 0; index < pattern.length; index++) { + if (IsOpenParen(pattern, index)) + count += 1; + if (IsCloseParen(pattern, index)) + count -= 1; + if (count === 0 && index !== pattern.length - 1) + return false; + } + return true; + } + function InGroup(pattern) { + return pattern.slice(1, pattern.length - 1); + } + function IsPrecedenceOr(pattern) { + let count = 0; + for (let index = 0; index < pattern.length; index++) { + if (IsOpenParen(pattern, index)) + count += 1; + if (IsCloseParen(pattern, index)) + count -= 1; + if (IsSeparator(pattern, index) && count === 0) + return true; + } + return false; + } + function IsPrecedenceAnd(pattern) { + for (let index = 0; index < pattern.length; index++) { + if (IsOpenParen(pattern, index)) + return true; + } + return false; + } + function Or(pattern) { + let [count, start] = [0, 0]; + const expressions = []; + for (let index = 0; index < pattern.length; index++) { + if (IsOpenParen(pattern, index)) + count += 1; + if (IsCloseParen(pattern, index)) + count -= 1; + if (IsSeparator(pattern, index) && count === 0) { + const range = pattern.slice(start, index); + if (range.length > 0) + expressions.push(Parse(range)); + start = index + 1; + } + } + const range = pattern.slice(start); + if (range.length > 0) + expressions.push(Parse(range)); + if (expressions.length === 0) + return { type: 'const', const: '' }; + if (expressions.length === 1) + return expressions[0]; + return { type: 'or', expr: expressions }; + } + function And(pattern) { + function Group(value, index) { + if (!IsOpenParen(value, index)) + throw new TemplateLiteralParserError(`TemplateLiteralParser: Index must point to open parens`); + let count = 0; + for (let scan = index; scan < value.length; scan++) { + if (IsOpenParen(value, scan)) + count += 1; + if (IsCloseParen(value, scan)) + count -= 1; + if (count === 0) + return [index, scan]; + } + throw new TemplateLiteralParserError(`TemplateLiteralParser: Unclosed group parens in expression`); + } + function Range(pattern, index) { + for (let scan = index; scan < pattern.length; scan++) { + if (IsOpenParen(pattern, scan)) + return [index, scan]; + } + return [index, pattern.length]; + } + const expressions = []; + for (let index = 0; index < pattern.length; index++) { + if (IsOpenParen(pattern, index)) { + const [start, end] = Group(pattern, index); + const range = pattern.slice(start, end + 1); + expressions.push(Parse(range)); + index = end; + } + else { + const [start, end] = Range(pattern, index); + const range = pattern.slice(start, end); + if (range.length > 0) + expressions.push(Parse(range)); + index = end - 1; + } + } + if (expressions.length === 0) + return { type: 'const', const: '' }; + if (expressions.length === 1) + return expressions[0]; + return { type: 'and', expr: expressions }; + } + /** Parses a pattern and returns an expression tree */ + function Parse(pattern) { + if (IsGroup(pattern)) + return Parse(InGroup(pattern)); + if (IsPrecedenceOr(pattern)) + return Or(pattern); + if (IsPrecedenceAnd(pattern)) + return And(pattern); + return { type: 'const', const: pattern }; + } + TemplateLiteralParser.Parse = Parse; + /** Parses a pattern and strips forward and trailing ^ and $ */ + function ParseExact(pattern) { + return Parse(pattern.slice(1, pattern.length - 1)); + } + TemplateLiteralParser.ParseExact = ParseExact; +})(TemplateLiteralParser = exports.TemplateLiteralParser || (exports.TemplateLiteralParser = {})); +// -------------------------------------------------------------------------------------- +// TemplateLiteralFinite +// -------------------------------------------------------------------------------------- +var TemplateLiteralFinite; +(function (TemplateLiteralFinite) { + function IsNumber(expression) { + // prettier-ignore + return (expression.type === 'or' && + expression.expr.length === 2 && + expression.expr[0].type === 'const' && + expression.expr[0].const === '0' && + expression.expr[1].type === 'const' && + expression.expr[1].const === '[1-9][0-9]*'); + } + function IsBoolean(expression) { + // prettier-ignore + return (expression.type === 'or' && + expression.expr.length === 2 && + expression.expr[0].type === 'const' && + expression.expr[0].const === 'true' && + expression.expr[1].type === 'const' && + expression.expr[1].const === 'false'); + } + function IsString(expression) { + return expression.type === 'const' && expression.const === '.*'; + } + function Check(expression) { + if (IsBoolean(expression)) + return true; + if (IsNumber(expression) || IsString(expression)) + return false; + if (expression.type === 'and') + return expression.expr.every((expr) => Check(expr)); + if (expression.type === 'or') + return expression.expr.every((expr) => Check(expr)); + if (expression.type === 'const') + return true; + throw Error(`TemplateLiteralFinite: Unknown expression type`); + } + TemplateLiteralFinite.Check = Check; +})(TemplateLiteralFinite = exports.TemplateLiteralFinite || (exports.TemplateLiteralFinite = {})); +// -------------------------------------------------------------------------------------- +// TemplateLiteralGenerator +// -------------------------------------------------------------------------------------- +var TemplateLiteralGenerator; +(function (TemplateLiteralGenerator) { + function* Reduce(buffer) { + if (buffer.length === 1) + return yield* buffer[0]; + for (const left of buffer[0]) { + for (const right of Reduce(buffer.slice(1))) { + yield `${left}${right}`; + } + } + } + function* And(expression) { + return yield* Reduce(expression.expr.map((expr) => [...Generate(expr)])); + } + function* Or(expression) { + for (const expr of expression.expr) + yield* Generate(expr); + } + function* Const(expression) { + return yield expression.const; + } + function* Generate(expression) { + if (expression.type === 'and') + return yield* And(expression); + if (expression.type === 'or') + return yield* Or(expression); + if (expression.type === 'const') + return yield* Const(expression); + throw Error('TemplateLiteralGenerator: Unknown expression'); + } + TemplateLiteralGenerator.Generate = Generate; +})(TemplateLiteralGenerator = exports.TemplateLiteralGenerator || (exports.TemplateLiteralGenerator = {})); +// -------------------------------------------------------------------------- +// TypeOrdinal: Used for auto $id generation +// -------------------------------------------------------------------------- +let TypeOrdinal = 0; +// -------------------------------------------------------------------------- +// TypeBuilder +// -------------------------------------------------------------------------- +class TypeBuilder { + /** `[Utility]` Creates a schema without `static` and `params` types */ + Create(schema) { + return schema; + } + /** `[Standard]` Omits compositing symbols from this schema */ + Strict(schema) { + return JSON.parse(JSON.stringify(schema)); + } +} +exports.TypeBuilder = TypeBuilder; +// -------------------------------------------------------------------------- +// StandardTypeBuilder +// -------------------------------------------------------------------------- +class StandardTypeBuilder extends TypeBuilder { + // ------------------------------------------------------------------------ + // Modifiers + // ------------------------------------------------------------------------ + /** `[Modifier]` Creates a Optional property */ + Optional(schema) { + return { [exports.Modifier]: 'Optional', ...TypeClone.Clone(schema, {}) }; + } + /** `[Modifier]` Creates a ReadonlyOptional property */ + ReadonlyOptional(schema) { + return { [exports.Modifier]: 'ReadonlyOptional', ...TypeClone.Clone(schema, {}) }; + } + /** `[Modifier]` Creates a Readonly object or property */ + Readonly(schema) { + return { [exports.Modifier]: 'Readonly', ...schema }; + } + // ------------------------------------------------------------------------ + // Types + // ------------------------------------------------------------------------ + /** `[Standard]` Creates an Any type */ + Any(options = {}) { + return this.Create({ ...options, [exports.Kind]: 'Any' }); + } + /** `[Standard]` Creates an Array type */ + Array(items, options = {}) { + return this.Create({ ...options, [exports.Kind]: 'Array', type: 'array', items: TypeClone.Clone(items, {}) }); + } + /** `[Standard]` Creates a Boolean type */ + Boolean(options = {}) { + return this.Create({ ...options, [exports.Kind]: 'Boolean', type: 'boolean' }); + } + /** `[Standard]` Creates a Composite object type. */ + Composite(objects, options) { + const isOptionalAll = (objects, key) => objects.every((object) => !(key in object.properties) || IsOptional(object.properties[key])); + const IsOptional = (schema) => TypeGuard.TOptional(schema) || TypeGuard.TReadonlyOptional(schema); + const [required, optional] = [new Set(), new Set()]; + for (const object of objects) { + for (const key of globalThis.Object.getOwnPropertyNames(object.properties)) { + if (isOptionalAll(objects, key)) + optional.add(key); + } + } + for (const object of objects) { + for (const key of globalThis.Object.getOwnPropertyNames(object.properties)) { + if (!optional.has(key)) + required.add(key); + } + } + const properties = {}; + for (const object of objects) { + for (const [key, schema] of Object.entries(object.properties)) { + const property = TypeClone.Clone(schema, {}); + if (!optional.has(key)) + delete property[exports.Modifier]; + if (key in properties) { + const left = TypeExtends.Extends(properties[key], property) !== TypeExtendsResult.False; + const right = TypeExtends.Extends(property, properties[key]) !== TypeExtendsResult.False; + if (!left && !right) + properties[key] = exports.Type.Never(); + if (!left && right) + properties[key] = property; + } + else { + properties[key] = property; + } + } + } + if (required.size > 0) { + return this.Create({ ...options, [exports.Kind]: 'Object', [exports.Hint]: 'Composite', type: 'object', properties, required: [...required] }); + } + else { + return this.Create({ ...options, [exports.Kind]: 'Object', [exports.Hint]: 'Composite', type: 'object', properties }); + } + } + /** `[Standard]` Creates a Enum type */ + Enum(item, options = {}) { + // prettier-ignore + const values = globalThis.Object.keys(item).filter((key) => isNaN(key)).map((key) => item[key]); + const anyOf = values.map((value) => (typeof value === 'string' ? { [exports.Kind]: 'Literal', type: 'string', const: value } : { [exports.Kind]: 'Literal', type: 'number', const: value })); + return this.Create({ ...options, [exports.Kind]: 'Union', anyOf }); + } + /** `[Standard]` A conditional type expression that will return the true type if the left type extends the right */ + Extends(left, right, trueType, falseType, options = {}) { + switch (TypeExtends.Extends(left, right)) { + case TypeExtendsResult.Union: + return this.Union([TypeClone.Clone(trueType, options), TypeClone.Clone(falseType, options)]); + case TypeExtendsResult.True: + return TypeClone.Clone(trueType, options); + case TypeExtendsResult.False: + return TypeClone.Clone(falseType, options); + } + } + /** `[Standard]` Excludes from the left type any type that is not assignable to the right */ + Exclude(left, right, options = {}) { + if (TypeGuard.TTemplateLiteral(left)) + return this.Exclude(TemplateLiteralResolver.Resolve(left), right, options); + if (TypeGuard.TTemplateLiteral(right)) + return this.Exclude(left, TemplateLiteralResolver.Resolve(right), options); + if (TypeGuard.TUnion(left)) { + const narrowed = left.anyOf.filter((inner) => TypeExtends.Extends(inner, right) === TypeExtendsResult.False); + return (narrowed.length === 1 ? TypeClone.Clone(narrowed[0], options) : this.Union(narrowed, options)); + } + else { + return (TypeExtends.Extends(left, right) !== TypeExtendsResult.False ? this.Never(options) : TypeClone.Clone(left, options)); + } + } + /** `[Standard]` Extracts from the left type any type that is assignable to the right */ + Extract(left, right, options = {}) { + if (TypeGuard.TTemplateLiteral(left)) + return this.Extract(TemplateLiteralResolver.Resolve(left), right, options); + if (TypeGuard.TTemplateLiteral(right)) + return this.Extract(left, TemplateLiteralResolver.Resolve(right), options); + if (TypeGuard.TUnion(left)) { + const narrowed = left.anyOf.filter((inner) => TypeExtends.Extends(inner, right) !== TypeExtendsResult.False); + return (narrowed.length === 1 ? TypeClone.Clone(narrowed[0], options) : this.Union(narrowed, options)); + } + else { + return (TypeExtends.Extends(left, right) !== TypeExtendsResult.False ? TypeClone.Clone(left, options) : this.Never(options)); + } + } + /** `[Standard]` Creates an Integer type */ + Integer(options = {}) { + return this.Create({ ...options, [exports.Kind]: 'Integer', type: 'integer' }); + } + Intersect(allOf, options = {}) { + if (allOf.length === 0) + return exports.Type.Never(); + if (allOf.length === 1) + return TypeClone.Clone(allOf[0], options); + const objects = allOf.every((schema) => TypeGuard.TObject(schema)); + const cloned = allOf.map((schema) => TypeClone.Clone(schema, {})); + const clonedUnevaluatedProperties = TypeGuard.TSchema(options.unevaluatedProperties) ? { unevaluatedProperties: TypeClone.Clone(options.unevaluatedProperties, {}) } : {}; + if (options.unevaluatedProperties === false || TypeGuard.TSchema(options.unevaluatedProperties) || objects) { + return this.Create({ ...options, ...clonedUnevaluatedProperties, [exports.Kind]: 'Intersect', type: 'object', allOf: cloned }); + } + else { + return this.Create({ ...options, ...clonedUnevaluatedProperties, [exports.Kind]: 'Intersect', allOf: cloned }); + } + } + /** `[Standard]` Creates a KeyOf type */ + KeyOf(schema, options = {}) { + if (TypeGuard.TRecord(schema)) { + const pattern = Object.getOwnPropertyNames(schema.patternProperties)[0]; + if (pattern === exports.PatternNumberExact) + return this.Number(options); + if (pattern === exports.PatternStringExact) + return this.String(options); + throw Error('StandardTypeBuilder: Unable to resolve key type from Record key pattern'); + } + else { + const resolved = KeyResolver.Resolve(schema); + if (resolved.length === 0) + return this.Never(options); + const literals = resolved.map((key) => this.Literal(key)); + return this.Union(literals, options); + } + } + /** `[Standard]` Creates a Literal type */ + Literal(value, options = {}) { + return this.Create({ ...options, [exports.Kind]: 'Literal', const: value, type: typeof value }); + } + /** `[Standard]` Creates a Never type */ + Never(options = {}) { + return this.Create({ ...options, [exports.Kind]: 'Never', not: {} }); + } + /** `[Standard]` Creates a Not type. The first argument is the disallowed type, the second is the allowed. */ + Not(not, schema, options) { + return this.Create({ ...options, [exports.Kind]: 'Not', allOf: [{ not: TypeClone.Clone(not, {}) }, TypeClone.Clone(schema, {})] }); + } + /** `[Standard]` Creates a Null type */ + Null(options = {}) { + return this.Create({ ...options, [exports.Kind]: 'Null', type: 'null' }); + } + /** `[Standard]` Creates a Number type */ + Number(options = {}) { + return this.Create({ ...options, [exports.Kind]: 'Number', type: 'number' }); + } + /** `[Standard]` Creates an Object type */ + Object(properties, options = {}) { + const propertyKeys = globalThis.Object.getOwnPropertyNames(properties); + const optionalKeys = propertyKeys.filter((key) => TypeGuard.TOptional(properties[key]) || TypeGuard.TReadonlyOptional(properties[key])); + const requiredKeys = propertyKeys.filter((name) => !optionalKeys.includes(name)); + const clonedAdditionalProperties = TypeGuard.TSchema(options.additionalProperties) ? { additionalProperties: TypeClone.Clone(options.additionalProperties, {}) } : {}; + const clonedProperties = propertyKeys.reduce((acc, key) => ({ ...acc, [key]: TypeClone.Clone(properties[key], {}) }), {}); + if (requiredKeys.length > 0) { + return this.Create({ ...options, ...clonedAdditionalProperties, [exports.Kind]: 'Object', type: 'object', properties: clonedProperties, required: requiredKeys }); + } + else { + return this.Create({ ...options, ...clonedAdditionalProperties, [exports.Kind]: 'Object', type: 'object', properties: clonedProperties }); + } + } + Omit(schema, unresolved, options = {}) { + // prettier-ignore + const keys = TypeGuard.TUnionLiteral(unresolved) ? unresolved.anyOf.map((schema) => schema.const) : + TypeGuard.TLiteral(unresolved) ? [unresolved.const] : + TypeGuard.TNever(unresolved) ? [] : + unresolved; + // prettier-ignore + return ObjectMap.Map(TypeClone.Clone(schema, {}), (schema) => { + if (schema.required) { + schema.required = schema.required.filter((key) => !keys.includes(key)); + if (schema.required.length === 0) + delete schema.required; + } + for (const key of globalThis.Object.keys(schema.properties)) { + if (keys.includes(key)) + delete schema.properties[key]; + } + return this.Create(schema); + }, options); + } + /** `[Standard]` Creates a mapped type where all properties are Optional */ + Partial(schema, options = {}) { + function Apply(schema) { + // prettier-ignore + switch (schema[exports.Modifier]) { + case 'ReadonlyOptional': + schema[exports.Modifier] = 'ReadonlyOptional'; + break; + case 'Readonly': + schema[exports.Modifier] = 'ReadonlyOptional'; + break; + case 'Optional': + schema[exports.Modifier] = 'Optional'; + break; + default: + schema[exports.Modifier] = 'Optional'; + break; + } + } + // prettier-ignore + return ObjectMap.Map(TypeClone.Clone(schema, {}), (schema) => { + delete schema.required; + globalThis.Object.keys(schema.properties).forEach(key => Apply(schema.properties[key])); + return schema; + }, options); + } + Pick(schema, unresolved, options = {}) { + // prettier-ignore + const keys = TypeGuard.TUnionLiteral(unresolved) ? unresolved.anyOf.map((schema) => schema.const) : + TypeGuard.TLiteral(unresolved) ? [unresolved.const] : + TypeGuard.TNever(unresolved) ? [] : + unresolved; + // prettier-ignore + return ObjectMap.Map(TypeClone.Clone(schema, {}), (schema) => { + if (schema.required) { + schema.required = schema.required.filter((key) => keys.includes(key)); + if (schema.required.length === 0) + delete schema.required; + } + for (const key of globalThis.Object.keys(schema.properties)) { + if (!keys.includes(key)) + delete schema.properties[key]; + } + return this.Create(schema); + }, options); + } + /** `[Standard]` Creates a Record type */ + Record(key, schema, options = {}) { + if (TypeGuard.TTemplateLiteral(key)) { + const expression = TemplateLiteralParser.ParseExact(key.pattern); + // prettier-ignore + return TemplateLiteralFinite.Check(expression) + ? (this.Object([...TemplateLiteralGenerator.Generate(expression)].reduce((acc, key) => ({ ...acc, [key]: TypeClone.Clone(schema, {}) }), {}), options)) + : this.Create({ ...options, [exports.Kind]: 'Record', type: 'object', patternProperties: { [key.pattern]: TypeClone.Clone(schema, {}) }, additionalProperties: false }); + } + else if (TypeGuard.TUnionLiteral(key)) { + if (key.anyOf.every((schema) => TypeGuard.TLiteral(schema) && (typeof schema.const === 'string' || typeof schema.const === 'number'))) { + const properties = key.anyOf.reduce((acc, literal) => ({ ...acc, [literal.const]: TypeClone.Clone(schema, {}) }), {}); + return this.Object(properties, { ...options, [exports.Hint]: 'Record' }); + } + else + throw Error('TypeBuilder: Record key can only be derived from union literal of number or string'); + } + else if (TypeGuard.TLiteral(key)) { + if (typeof key.const === 'string' || typeof key.const === 'number') { + return this.Object({ [key.const]: TypeClone.Clone(schema, {}) }, options); + } + else + throw Error('TypeBuilder: Record key can only be derived from literals of number or string'); + } + else if (TypeGuard.TInteger(key) || TypeGuard.TNumber(key)) { + const pattern = exports.PatternNumberExact; + return this.Create({ ...options, [exports.Kind]: 'Record', type: 'object', patternProperties: { [pattern]: TypeClone.Clone(schema, {}) }, additionalProperties: false }); + } + else if (TypeGuard.TString(key)) { + const pattern = key.pattern === undefined ? exports.PatternStringExact : key.pattern; + return this.Create({ ...options, [exports.Kind]: 'Record', type: 'object', patternProperties: { [pattern]: TypeClone.Clone(schema, {}) }, additionalProperties: false }); + } + else { + throw Error(`StandardTypeBuilder: Invalid Record Key`); + } + } + /** `[Standard]` Creates a Recursive type */ + Recursive(callback, options = {}) { + if (options.$id === undefined) + options.$id = `T${TypeOrdinal++}`; + const thisType = callback({ [exports.Kind]: 'This', $ref: `${options.$id}` }); + thisType.$id = options.$id; + return this.Create({ ...options, [exports.Hint]: 'Recursive', ...thisType }); + } + /** `[Standard]` Creates a Ref type. The referenced type must contain a $id */ + Ref(schema, options = {}) { + if (schema.$id === undefined) + throw Error('StandardTypeBuilder.Ref: Target type must specify an $id'); + return this.Create({ ...options, [exports.Kind]: 'Ref', $ref: schema.$id }); + } + /** `[Standard]` Creates a mapped type where all properties are Required */ + Required(schema, options = {}) { + function Apply(schema) { + // prettier-ignore + switch (schema[exports.Modifier]) { + case 'ReadonlyOptional': + schema[exports.Modifier] = 'Readonly'; + break; + case 'Readonly': + schema[exports.Modifier] = 'Readonly'; + break; + case 'Optional': + delete schema[exports.Modifier]; + break; + default: + delete schema[exports.Modifier]; + break; + } + } + // prettier-ignore + return ObjectMap.Map(TypeClone.Clone(schema, {}), (schema) => { + schema.required = globalThis.Object.keys(schema.properties); + globalThis.Object.keys(schema.properties).forEach(key => Apply(schema.properties[key])); + return schema; + }, options); + } + /** `[Standard]` Creates a String type */ + String(options = {}) { + return this.Create({ ...options, [exports.Kind]: 'String', type: 'string' }); + } + /** `[Standard]` Creates a template literal type */ + TemplateLiteral(kinds, options = {}) { + const pattern = TemplateLiteralPattern.Create(kinds); + return this.Create({ ...options, [exports.Kind]: 'TemplateLiteral', type: 'string', pattern }); + } + /** `[Standard]` Creates a Tuple type */ + Tuple(items, options = {}) { + const [additionalItems, minItems, maxItems] = [false, items.length, items.length]; + const clonedItems = items.map((item) => TypeClone.Clone(item, {})); + // prettier-ignore + const schema = (items.length > 0 ? + { ...options, [exports.Kind]: 'Tuple', type: 'array', items: clonedItems, additionalItems, minItems, maxItems } : + { ...options, [exports.Kind]: 'Tuple', type: 'array', minItems, maxItems }); + return this.Create(schema); + } + Union(union, options = {}) { + if (TypeGuard.TTemplateLiteral(union)) { + return TemplateLiteralResolver.Resolve(union); + } + else { + const anyOf = union; + if (anyOf.length === 0) + return this.Never(options); + if (anyOf.length === 1) + return this.Create(TypeClone.Clone(anyOf[0], options)); + const clonedAnyOf = anyOf.map((schema) => TypeClone.Clone(schema, {})); + return this.Create({ ...options, [exports.Kind]: 'Union', anyOf: clonedAnyOf }); + } + } + /** `[Standard]` Creates an Unknown type */ + Unknown(options = {}) { + return this.Create({ ...options, [exports.Kind]: 'Unknown' }); + } + /** `[Standard]` Creates a Unsafe type that infers for the generic argument */ + Unsafe(options = {}) { + return this.Create({ ...options, [exports.Kind]: options[exports.Kind] || 'Unsafe' }); + } +} +exports.StandardTypeBuilder = StandardTypeBuilder; +// -------------------------------------------------------------------------- +// ExtendedTypeBuilder +// -------------------------------------------------------------------------- +class ExtendedTypeBuilder extends StandardTypeBuilder { + /** `[Extended]` Creates a BigInt type */ + BigInt(options = {}) { + return this.Create({ ...options, [exports.Kind]: 'BigInt', type: 'null', typeOf: 'BigInt' }); + } + /** `[Extended]` Extracts the ConstructorParameters from the given Constructor type */ + ConstructorParameters(schema, options = {}) { + return this.Tuple([...schema.parameters], { ...options }); + } + Constructor(parameters, returns, options = {}) { + const clonedReturns = TypeClone.Clone(returns, {}); + if (TypeGuard.TTuple(parameters)) { + const clonedParameters = parameters.items === undefined ? [] : parameters.items.map((parameter) => TypeClone.Clone(parameter, {})); + return this.Create({ ...options, [exports.Kind]: 'Constructor', type: 'object', instanceOf: 'Constructor', parameters: clonedParameters, returns: clonedReturns }); + } + else if (globalThis.Array.isArray(parameters)) { + const clonedParameters = parameters.map((parameter) => TypeClone.Clone(parameter, {})); + return this.Create({ ...options, [exports.Kind]: 'Constructor', type: 'object', instanceOf: 'Constructor', parameters: clonedParameters, returns: clonedReturns }); + } + else { + throw new Error('ExtendedTypeBuilder.Constructor: Invalid parameters'); + } + } + /** `[Extended]` Creates a Date type */ + Date(options = {}) { + return this.Create({ ...options, [exports.Kind]: 'Date', type: 'object', instanceOf: 'Date' }); + } + Function(parameters, returns, options = {}) { + const clonedReturns = TypeClone.Clone(returns, {}); + if (TypeGuard.TTuple(parameters)) { + const clonedParameters = parameters.items === undefined ? [] : parameters.items.map((parameter) => TypeClone.Clone(parameter, {})); + return this.Create({ ...options, [exports.Kind]: 'Function', type: 'object', instanceOf: 'Function', parameters: clonedParameters, returns: clonedReturns }); + } + else if (globalThis.Array.isArray(parameters)) { + const clonedParameters = parameters.map((parameter) => TypeClone.Clone(parameter, {})); + return this.Create({ ...options, [exports.Kind]: 'Function', type: 'object', instanceOf: 'Function', parameters: clonedParameters, returns: clonedReturns }); + } + else { + throw new Error('ExtendedTypeBuilder.Function: Invalid parameters'); + } + } + /** `[Extended]` Extracts the InstanceType from the given Constructor */ + InstanceType(schema, options = {}) { + return TypeClone.Clone(schema.returns, options); + } + /** `[Extended]` Extracts the Parameters from the given Function type */ + Parameters(schema, options = {}) { + return this.Tuple(schema.parameters, { ...options }); + } + /** `[Extended]` Creates a Promise type */ + Promise(item, options = {}) { + return this.Create({ ...options, [exports.Kind]: 'Promise', type: 'object', instanceOf: 'Promise', item: TypeClone.Clone(item, {}) }); + } + /** `[Extended]` Creates a regular expression type */ + RegEx(regex, options = {}) { + return this.Create({ ...options, [exports.Kind]: 'String', type: 'string', pattern: regex.source }); + } + /** `[Extended]` Extracts the ReturnType from the given Function */ + ReturnType(schema, options = {}) { + return TypeClone.Clone(schema.returns, options); + } + /** `[Extended]` Creates a Symbol type */ + Symbol(options) { + return this.Create({ ...options, [exports.Kind]: 'Symbol', type: 'null', typeOf: 'Symbol' }); + } + /** `[Extended]` Creates a Undefined type */ + Undefined(options = {}) { + return this.Create({ ...options, [exports.Kind]: 'Undefined', type: 'null', typeOf: 'Undefined' }); + } + /** `[Extended]` Creates a Uint8Array type */ + Uint8Array(options = {}) { + return this.Create({ ...options, [exports.Kind]: 'Uint8Array', type: 'object', instanceOf: 'Uint8Array' }); + } + /** `[Extended]` Creates a Void type */ + Void(options = {}) { + return this.Create({ ...options, [exports.Kind]: 'Void', type: 'null', typeOf: 'Void' }); + } +} +exports.ExtendedTypeBuilder = ExtendedTypeBuilder; +/** JSON Schema TypeBuilder with Static Resolution for TypeScript */ +exports.StandardType = new StandardTypeBuilder(); +/** JSON Schema TypeBuilder with Static Resolution for TypeScript */ +exports.Type = new ExtendedTypeBuilder(); diff --git a/node_modules/@sinclair/typebox/value/cast.d.ts b/node_modules/@sinclair/typebox/value/cast.d.ts new file mode 100644 index 00000000..992d9e3f --- /dev/null +++ b/node_modules/@sinclair/typebox/value/cast.d.ts @@ -0,0 +1,30 @@ +import * as Types from '../typebox'; +export declare class ValueCastReferenceTypeError extends Error { + readonly schema: Types.TRef | Types.TThis; + constructor(schema: Types.TRef | Types.TThis); +} +export declare class ValueCastArrayUniqueItemsTypeError extends Error { + readonly schema: Types.TSchema; + readonly value: unknown; + constructor(schema: Types.TSchema, value: unknown); +} +export declare class ValueCastNeverTypeError extends Error { + readonly schema: Types.TSchema; + constructor(schema: Types.TSchema); +} +export declare class ValueCastRecursiveTypeError extends Error { + readonly schema: Types.TSchema; + constructor(schema: Types.TSchema); +} +export declare class ValueCastUnknownTypeError extends Error { + readonly schema: Types.TSchema; + constructor(schema: Types.TSchema); +} +export declare class ValueCastDereferenceError extends Error { + readonly schema: Types.TRef | Types.TThis; + constructor(schema: Types.TRef | Types.TThis); +} +export declare namespace ValueCast { + function Visit(schema: Types.TSchema, references: Types.TSchema[], value: any): any; + function Cast(schema: T, references: Types.TSchema[], value: any): Types.Static; +} diff --git a/node_modules/@sinclair/typebox/value/cast.js b/node_modules/@sinclair/typebox/value/cast.js new file mode 100644 index 00000000..42fe2e14 --- /dev/null +++ b/node_modules/@sinclair/typebox/value/cast.js @@ -0,0 +1,372 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/value + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ValueCast = exports.ValueCastDereferenceError = exports.ValueCastUnknownTypeError = exports.ValueCastRecursiveTypeError = exports.ValueCastNeverTypeError = exports.ValueCastArrayUniqueItemsTypeError = exports.ValueCastReferenceTypeError = void 0; +const Types = require("../typebox"); +const create_1 = require("./create"); +const check_1 = require("./check"); +const clone_1 = require("./clone"); +// ---------------------------------------------------------------------------------------------- +// Errors +// ---------------------------------------------------------------------------------------------- +class ValueCastReferenceTypeError extends Error { + constructor(schema) { + super(`ValueCast: Cannot locate referenced schema with $id '${schema.$ref}'`); + this.schema = schema; + } +} +exports.ValueCastReferenceTypeError = ValueCastReferenceTypeError; +class ValueCastArrayUniqueItemsTypeError extends Error { + constructor(schema, value) { + super('ValueCast: Array cast produced invalid data due to uniqueItems constraint'); + this.schema = schema; + this.value = value; + } +} +exports.ValueCastArrayUniqueItemsTypeError = ValueCastArrayUniqueItemsTypeError; +class ValueCastNeverTypeError extends Error { + constructor(schema) { + super('ValueCast: Never types cannot be cast'); + this.schema = schema; + } +} +exports.ValueCastNeverTypeError = ValueCastNeverTypeError; +class ValueCastRecursiveTypeError extends Error { + constructor(schema) { + super('ValueCast.Recursive: Cannot cast recursive schemas'); + this.schema = schema; + } +} +exports.ValueCastRecursiveTypeError = ValueCastRecursiveTypeError; +class ValueCastUnknownTypeError extends Error { + constructor(schema) { + super('ValueCast: Unknown type'); + this.schema = schema; + } +} +exports.ValueCastUnknownTypeError = ValueCastUnknownTypeError; +class ValueCastDereferenceError extends Error { + constructor(schema) { + super(`ValueCast: Unable to dereference schema with $id '${schema.$ref}'`); + this.schema = schema; + } +} +exports.ValueCastDereferenceError = ValueCastDereferenceError; +// ---------------------------------------------------------------------------------------------- +// The following will score a schema against a value. For objects, the score is the tally of +// points awarded for each property of the value. Property points are (1.0 / propertyCount) +// to prevent large property counts biasing results. Properties that match literal values are +// maximally awarded as literals are typically used as union discriminator fields. +// ---------------------------------------------------------------------------------------------- +var UnionCastCreate; +(function (UnionCastCreate) { + function Score(schema, references, value) { + if (schema[Types.Kind] === 'Object' && typeof value === 'object' && value !== null) { + const object = schema; + const keys = Object.keys(value); + const entries = globalThis.Object.entries(object.properties); + const [point, max] = [1 / entries.length, entries.length]; + return entries.reduce((acc, [key, schema]) => { + const literal = schema[Types.Kind] === 'Literal' && schema.const === value[key] ? max : 0; + const checks = check_1.ValueCheck.Check(schema, references, value[key]) ? point : 0; + const exists = keys.includes(key) ? point : 0; + return acc + (literal + checks + exists); + }, 0); + } + else { + return check_1.ValueCheck.Check(schema, references, value) ? 1 : 0; + } + } + function Select(union, references, value) { + let [select, best] = [union.anyOf[0], 0]; + for (const schema of union.anyOf) { + const score = Score(schema, references, value); + if (score > best) { + select = schema; + best = score; + } + } + return select; + } + function Create(union, references, value) { + if (union.default !== undefined) { + return union.default; + } + else { + const schema = Select(union, references, value); + return ValueCast.Cast(schema, references, value); + } + } + UnionCastCreate.Create = Create; +})(UnionCastCreate || (UnionCastCreate = {})); +var ValueCast; +(function (ValueCast) { + // ---------------------------------------------------------------------------------------------- + // Guards + // ---------------------------------------------------------------------------------------------- + function IsObject(value) { + return typeof value === 'object' && value !== null && !globalThis.Array.isArray(value); + } + function IsArray(value) { + return typeof value === 'object' && globalThis.Array.isArray(value); + } + function IsNumber(value) { + return typeof value === 'number' && !isNaN(value); + } + function IsString(value) { + return typeof value === 'string'; + } + // ---------------------------------------------------------------------------------------------- + // Cast + // ---------------------------------------------------------------------------------------------- + function Any(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? clone_1.ValueClone.Clone(value) : create_1.ValueCreate.Create(schema, references); + } + function Array(schema, references, value) { + if (check_1.ValueCheck.Check(schema, references, value)) + return clone_1.ValueClone.Clone(value); + const created = IsArray(value) ? clone_1.ValueClone.Clone(value) : create_1.ValueCreate.Create(schema, references); + const minimum = IsNumber(schema.minItems) && created.length < schema.minItems ? [...created, ...globalThis.Array.from({ length: schema.minItems - created.length }, () => null)] : created; + const maximum = IsNumber(schema.maxItems) && minimum.length > schema.maxItems ? minimum.slice(0, schema.maxItems) : minimum; + const casted = maximum.map((value) => Visit(schema.items, references, value)); + if (schema.uniqueItems !== true) + return casted; + const unique = [...new Set(casted)]; + if (!check_1.ValueCheck.Check(schema, references, unique)) + throw new ValueCastArrayUniqueItemsTypeError(schema, unique); + return unique; + } + function BigInt(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? value : create_1.ValueCreate.Create(schema, references); + } + function Boolean(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? value : create_1.ValueCreate.Create(schema, references); + } + function Constructor(schema, references, value) { + if (check_1.ValueCheck.Check(schema, references, value)) + return create_1.ValueCreate.Create(schema, references); + const required = new Set(schema.returns.required || []); + const result = function () { }; + for (const [key, property] of globalThis.Object.entries(schema.returns.properties)) { + if (!required.has(key) && value.prototype[key] === undefined) + continue; + result.prototype[key] = Visit(property, references, value.prototype[key]); + } + return result; + } + function Date(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? clone_1.ValueClone.Clone(value) : create_1.ValueCreate.Create(schema, references); + } + function Function(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? value : create_1.ValueCreate.Create(schema, references); + } + function Integer(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? value : create_1.ValueCreate.Create(schema, references); + } + function Intersect(schema, references, value) { + const created = create_1.ValueCreate.Create(schema, references); + const mapped = IsObject(created) && IsObject(value) ? { ...created, ...value } : value; + return check_1.ValueCheck.Check(schema, references, mapped) ? mapped : create_1.ValueCreate.Create(schema, references); + } + function Literal(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? value : create_1.ValueCreate.Create(schema, references); + } + function Never(schema, references, value) { + throw new ValueCastNeverTypeError(schema); + } + function Not(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? value : create_1.ValueCreate.Create(schema.allOf[1], references); + } + function Null(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? value : create_1.ValueCreate.Create(schema, references); + } + function Number(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? value : create_1.ValueCreate.Create(schema, references); + } + function Object(schema, references, value) { + if (check_1.ValueCheck.Check(schema, references, value)) + return value; + if (value === null || typeof value !== 'object') + return create_1.ValueCreate.Create(schema, references); + const required = new Set(schema.required || []); + const result = {}; + for (const [key, property] of globalThis.Object.entries(schema.properties)) { + if (!required.has(key) && value[key] === undefined) + continue; + result[key] = Visit(property, references, value[key]); + } + // additional schema properties + if (typeof schema.additionalProperties === 'object') { + const propertyNames = globalThis.Object.getOwnPropertyNames(schema.properties); + for (const propertyName of globalThis.Object.getOwnPropertyNames(value)) { + if (propertyNames.includes(propertyName)) + continue; + result[propertyName] = Visit(schema.additionalProperties, references, value[propertyName]); + } + } + return result; + } + function Promise(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? value : create_1.ValueCreate.Create(schema, references); + } + function Record(schema, references, value) { + if (check_1.ValueCheck.Check(schema, references, value)) + return clone_1.ValueClone.Clone(value); + if (value === null || typeof value !== 'object' || globalThis.Array.isArray(value) || value instanceof globalThis.Date) + return create_1.ValueCreate.Create(schema, references); + const subschemaPropertyName = globalThis.Object.getOwnPropertyNames(schema.patternProperties)[0]; + const subschema = schema.patternProperties[subschemaPropertyName]; + const result = {}; + for (const [propKey, propValue] of globalThis.Object.entries(value)) { + result[propKey] = Visit(subschema, references, propValue); + } + return result; + } + function Ref(schema, references, value) { + const index = references.findIndex((foreign) => foreign.$id === schema.$ref); + if (index === -1) + throw new ValueCastDereferenceError(schema); + const target = references[index]; + return Visit(target, references, value); + } + function String(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? value : create_1.ValueCreate.Create(schema, references); + } + function Symbol(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? clone_1.ValueClone.Clone(value) : create_1.ValueCreate.Create(schema, references); + } + function TemplateLiteral(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? clone_1.ValueClone.Clone(value) : create_1.ValueCreate.Create(schema, references); + } + function This(schema, references, value) { + const index = references.findIndex((foreign) => foreign.$id === schema.$ref); + if (index === -1) + throw new ValueCastDereferenceError(schema); + const target = references[index]; + return Visit(target, references, value); + } + function Tuple(schema, references, value) { + if (check_1.ValueCheck.Check(schema, references, value)) + return clone_1.ValueClone.Clone(value); + if (!globalThis.Array.isArray(value)) + return create_1.ValueCreate.Create(schema, references); + if (schema.items === undefined) + return []; + return schema.items.map((schema, index) => Visit(schema, references, value[index])); + } + function Undefined(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? clone_1.ValueClone.Clone(value) : create_1.ValueCreate.Create(schema, references); + } + function Union(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? clone_1.ValueClone.Clone(value) : UnionCastCreate.Create(schema, references, value); + } + function Uint8Array(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? clone_1.ValueClone.Clone(value) : create_1.ValueCreate.Create(schema, references); + } + function Unknown(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? clone_1.ValueClone.Clone(value) : create_1.ValueCreate.Create(schema, references); + } + function Void(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? clone_1.ValueClone.Clone(value) : create_1.ValueCreate.Create(schema, references); + } + function UserDefined(schema, references, value) { + return check_1.ValueCheck.Check(schema, references, value) ? clone_1.ValueClone.Clone(value) : create_1.ValueCreate.Create(schema, references); + } + function Visit(schema, references, value) { + const references_ = IsString(schema.$id) ? [...references, schema] : references; + const schema_ = schema; + switch (schema[Types.Kind]) { + case 'Any': + return Any(schema_, references_, value); + case 'Array': + return Array(schema_, references_, value); + case 'BigInt': + return BigInt(schema_, references_, value); + case 'Boolean': + return Boolean(schema_, references_, value); + case 'Constructor': + return Constructor(schema_, references_, value); + case 'Date': + return Date(schema_, references_, value); + case 'Function': + return Function(schema_, references_, value); + case 'Integer': + return Integer(schema_, references_, value); + case 'Intersect': + return Intersect(schema_, references_, value); + case 'Literal': + return Literal(schema_, references_, value); + case 'Never': + return Never(schema_, references_, value); + case 'Not': + return Not(schema_, references_, value); + case 'Null': + return Null(schema_, references_, value); + case 'Number': + return Number(schema_, references_, value); + case 'Object': + return Object(schema_, references_, value); + case 'Promise': + return Promise(schema_, references_, value); + case 'Record': + return Record(schema_, references_, value); + case 'Ref': + return Ref(schema_, references_, value); + case 'String': + return String(schema_, references_, value); + case 'Symbol': + return Symbol(schema_, references_, value); + case 'TemplateLiteral': + return TemplateLiteral(schema_, references_, value); + case 'This': + return This(schema_, references_, value); + case 'Tuple': + return Tuple(schema_, references_, value); + case 'Undefined': + return Undefined(schema_, references_, value); + case 'Union': + return Union(schema_, references_, value); + case 'Uint8Array': + return Uint8Array(schema_, references_, value); + case 'Unknown': + return Unknown(schema_, references_, value); + case 'Void': + return Void(schema_, references_, value); + default: + if (!Types.TypeRegistry.Has(schema_[Types.Kind])) + throw new ValueCastUnknownTypeError(schema_); + return UserDefined(schema_, references_, value); + } + } + ValueCast.Visit = Visit; + function Cast(schema, references, value) { + return Visit(schema, references, clone_1.ValueClone.Clone(value)); + } + ValueCast.Cast = Cast; +})(ValueCast = exports.ValueCast || (exports.ValueCast = {})); diff --git a/node_modules/@sinclair/typebox/value/check.d.ts b/node_modules/@sinclair/typebox/value/check.d.ts new file mode 100644 index 00000000..ee18d9b0 --- /dev/null +++ b/node_modules/@sinclair/typebox/value/check.d.ts @@ -0,0 +1,12 @@ +import * as Types from '../typebox'; +export declare class ValueCheckUnknownTypeError extends Error { + readonly schema: Types.TSchema; + constructor(schema: Types.TSchema); +} +export declare class ValueCheckDereferenceError extends Error { + readonly schema: Types.TRef | Types.TThis; + constructor(schema: Types.TRef | Types.TThis); +} +export declare namespace ValueCheck { + function Check(schema: T, references: Types.TSchema[], value: any): boolean; +} diff --git a/node_modules/@sinclair/typebox/value/check.js b/node_modules/@sinclair/typebox/value/check.js new file mode 100644 index 00000000..833aa648 --- /dev/null +++ b/node_modules/@sinclair/typebox/value/check.js @@ -0,0 +1,484 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/value + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ValueCheck = exports.ValueCheckDereferenceError = exports.ValueCheckUnknownTypeError = void 0; +const Types = require("../typebox"); +const index_1 = require("../system/index"); +const hash_1 = require("./hash"); +// ------------------------------------------------------------------------- +// Errors +// ------------------------------------------------------------------------- +class ValueCheckUnknownTypeError extends Error { + constructor(schema) { + super(`ValueCheck: ${schema[Types.Kind] ? `Unknown type '${schema[Types.Kind]}'` : 'Unknown type'}`); + this.schema = schema; + } +} +exports.ValueCheckUnknownTypeError = ValueCheckUnknownTypeError; +class ValueCheckDereferenceError extends Error { + constructor(schema) { + super(`ValueCheck: Unable to dereference schema with $id '${schema.$ref}'`); + this.schema = schema; + } +} +exports.ValueCheckDereferenceError = ValueCheckDereferenceError; +var ValueCheck; +(function (ValueCheck) { + // ---------------------------------------------------------------------- + // Guards + // ---------------------------------------------------------------------- + function IsBigInt(value) { + return typeof value === 'bigint'; + } + function IsInteger(value) { + return globalThis.Number.isInteger(value); + } + function IsString(value) { + return typeof value === 'string'; + } + function IsDefined(value) { + return value !== undefined; + } + // ---------------------------------------------------------------------- + // Policies + // ---------------------------------------------------------------------- + function IsExactOptionalProperty(value, key) { + return index_1.TypeSystem.ExactOptionalPropertyTypes ? key in value : value[key] !== undefined; + } + function IsObject(value) { + const result = typeof value === 'object' && value !== null; + return index_1.TypeSystem.AllowArrayObjects ? result : result && !globalThis.Array.isArray(value); + } + function IsRecordObject(value) { + return IsObject(value) && !(value instanceof globalThis.Date) && !(value instanceof globalThis.Uint8Array); + } + function IsNumber(value) { + const result = typeof value === 'number'; + return index_1.TypeSystem.AllowNaN ? result : result && globalThis.Number.isFinite(value); + } + function IsVoid(value) { + const result = value === undefined; + return index_1.TypeSystem.AllowVoidNull ? result || value === null : result; + } + // ---------------------------------------------------------------------- + // Types + // ---------------------------------------------------------------------- + function Any(schema, references, value) { + return true; + } + function Array(schema, references, value) { + if (!globalThis.Array.isArray(value)) { + return false; + } + if (IsDefined(schema.minItems) && !(value.length >= schema.minItems)) { + return false; + } + if (IsDefined(schema.maxItems) && !(value.length <= schema.maxItems)) { + return false; + } + // prettier-ignore + if (schema.uniqueItems === true && !((function () { const set = new Set(); for (const element of value) { + const hashed = hash_1.ValueHash.Create(element); + if (set.has(hashed)) { + return false; + } + else { + set.add(hashed); + } + } return true; })())) { + return false; + } + return value.every((value) => Visit(schema.items, references, value)); + } + function BigInt(schema, references, value) { + if (!IsBigInt(value)) { + return false; + } + if (IsDefined(schema.multipleOf) && !(value % schema.multipleOf === globalThis.BigInt(0))) { + return false; + } + if (IsDefined(schema.exclusiveMinimum) && !(value > schema.exclusiveMinimum)) { + return false; + } + if (IsDefined(schema.exclusiveMaximum) && !(value < schema.exclusiveMaximum)) { + return false; + } + if (IsDefined(schema.minimum) && !(value >= schema.minimum)) { + return false; + } + if (IsDefined(schema.maximum) && !(value <= schema.maximum)) { + return false; + } + return true; + } + function Boolean(schema, references, value) { + return typeof value === 'boolean'; + } + function Constructor(schema, references, value) { + return Visit(schema.returns, references, value.prototype); + } + function Date(schema, references, value) { + if (!(value instanceof globalThis.Date)) { + return false; + } + if (!IsNumber(value.getTime())) { + return false; + } + if (IsDefined(schema.exclusiveMinimumTimestamp) && !(value.getTime() > schema.exclusiveMinimumTimestamp)) { + return false; + } + if (IsDefined(schema.exclusiveMaximumTimestamp) && !(value.getTime() < schema.exclusiveMaximumTimestamp)) { + return false; + } + if (IsDefined(schema.minimumTimestamp) && !(value.getTime() >= schema.minimumTimestamp)) { + return false; + } + if (IsDefined(schema.maximumTimestamp) && !(value.getTime() <= schema.maximumTimestamp)) { + return false; + } + return true; + } + function Function(schema, references, value) { + return typeof value === 'function'; + } + function Integer(schema, references, value) { + if (!IsInteger(value)) { + return false; + } + if (IsDefined(schema.multipleOf) && !(value % schema.multipleOf === 0)) { + return false; + } + if (IsDefined(schema.exclusiveMinimum) && !(value > schema.exclusiveMinimum)) { + return false; + } + if (IsDefined(schema.exclusiveMaximum) && !(value < schema.exclusiveMaximum)) { + return false; + } + if (IsDefined(schema.minimum) && !(value >= schema.minimum)) { + return false; + } + if (IsDefined(schema.maximum) && !(value <= schema.maximum)) { + return false; + } + return true; + } + function Intersect(schema, references, value) { + if (!schema.allOf.every((schema) => Visit(schema, references, value))) { + return false; + } + else if (schema.unevaluatedProperties === false) { + const schemaKeys = Types.KeyResolver.Resolve(schema); + const valueKeys = globalThis.Object.getOwnPropertyNames(value); + return valueKeys.every((key) => schemaKeys.includes(key)); + } + else if (Types.TypeGuard.TSchema(schema.unevaluatedProperties)) { + const schemaKeys = Types.KeyResolver.Resolve(schema); + const valueKeys = globalThis.Object.getOwnPropertyNames(value); + return valueKeys.every((key) => schemaKeys.includes(key) || Visit(schema.unevaluatedProperties, references, value[key])); + } + else { + return true; + } + } + function Literal(schema, references, value) { + return value === schema.const; + } + function Never(schema, references, value) { + return false; + } + function Not(schema, references, value) { + return !Visit(schema.allOf[0].not, references, value) && Visit(schema.allOf[1], references, value); + } + function Null(schema, references, value) { + return value === null; + } + function Number(schema, references, value) { + if (!IsNumber(value)) { + return false; + } + if (IsDefined(schema.multipleOf) && !(value % schema.multipleOf === 0)) { + return false; + } + if (IsDefined(schema.exclusiveMinimum) && !(value > schema.exclusiveMinimum)) { + return false; + } + if (IsDefined(schema.exclusiveMaximum) && !(value < schema.exclusiveMaximum)) { + return false; + } + if (IsDefined(schema.minimum) && !(value >= schema.minimum)) { + return false; + } + if (IsDefined(schema.maximum) && !(value <= schema.maximum)) { + return false; + } + return true; + } + function Object(schema, references, value) { + if (!IsObject(value)) { + return false; + } + if (IsDefined(schema.minProperties) && !(globalThis.Object.getOwnPropertyNames(value).length >= schema.minProperties)) { + return false; + } + if (IsDefined(schema.maxProperties) && !(globalThis.Object.getOwnPropertyNames(value).length <= schema.maxProperties)) { + return false; + } + const knownKeys = globalThis.Object.getOwnPropertyNames(schema.properties); + for (const knownKey of knownKeys) { + const property = schema.properties[knownKey]; + if (schema.required && schema.required.includes(knownKey)) { + if (!Visit(property, references, value[knownKey])) { + return false; + } + if (Types.ExtendsUndefined.Check(property)) { + return knownKey in value; + } + } + else { + if (IsExactOptionalProperty(value, knownKey) && !Visit(property, references, value[knownKey])) { + return false; + } + } + } + if (schema.additionalProperties === false) { + const valueKeys = globalThis.Object.getOwnPropertyNames(value); + // optimization: value is valid if schemaKey length matches the valueKey length + if (schema.required && schema.required.length === knownKeys.length && valueKeys.length === knownKeys.length) { + return true; + } + else { + return valueKeys.every((valueKey) => knownKeys.includes(valueKey)); + } + } + else if (typeof schema.additionalProperties === 'object') { + const valueKeys = globalThis.Object.getOwnPropertyNames(value); + return valueKeys.every((key) => knownKeys.includes(key) || Visit(schema.additionalProperties, references, value[key])); + } + else { + return true; + } + } + function Promise(schema, references, value) { + return typeof value === 'object' && typeof value.then === 'function'; + } + function Record(schema, references, value) { + if (!IsRecordObject(value)) { + return false; + } + if (IsDefined(schema.minProperties) && !(globalThis.Object.getOwnPropertyNames(value).length >= schema.minProperties)) { + return false; + } + if (IsDefined(schema.maxProperties) && !(globalThis.Object.getOwnPropertyNames(value).length <= schema.maxProperties)) { + return false; + } + const [keyPattern, valueSchema] = globalThis.Object.entries(schema.patternProperties)[0]; + const regex = new RegExp(keyPattern); + if (!globalThis.Object.getOwnPropertyNames(value).every((key) => regex.test(key))) { + return false; + } + for (const propValue of globalThis.Object.values(value)) { + if (!Visit(valueSchema, references, propValue)) + return false; + } + return true; + } + function Ref(schema, references, value) { + const index = references.findIndex((foreign) => foreign.$id === schema.$ref); + if (index === -1) + throw new ValueCheckDereferenceError(schema); + const target = references[index]; + return Visit(target, references, value); + } + function String(schema, references, value) { + if (!IsString(value)) { + return false; + } + if (IsDefined(schema.minLength)) { + if (!(value.length >= schema.minLength)) + return false; + } + if (IsDefined(schema.maxLength)) { + if (!(value.length <= schema.maxLength)) + return false; + } + if (IsDefined(schema.pattern)) { + const regex = new RegExp(schema.pattern); + if (!regex.test(value)) + return false; + } + if (IsDefined(schema.format)) { + if (!Types.FormatRegistry.Has(schema.format)) + return false; + const func = Types.FormatRegistry.Get(schema.format); + return func(value); + } + return true; + } + function Symbol(schema, references, value) { + if (!(typeof value === 'symbol')) { + return false; + } + return true; + } + function TemplateLiteral(schema, references, value) { + if (!IsString(value)) { + return false; + } + return new RegExp(schema.pattern).test(value); + } + function This(schema, references, value) { + const index = references.findIndex((foreign) => foreign.$id === schema.$ref); + if (index === -1) + throw new ValueCheckDereferenceError(schema); + const target = references[index]; + return Visit(target, references, value); + } + function Tuple(schema, references, value) { + if (!globalThis.Array.isArray(value)) { + return false; + } + if (schema.items === undefined && !(value.length === 0)) { + return false; + } + if (!(value.length === schema.maxItems)) { + return false; + } + if (!schema.items) { + return true; + } + for (let i = 0; i < schema.items.length; i++) { + if (!Visit(schema.items[i], references, value[i])) + return false; + } + return true; + } + function Undefined(schema, references, value) { + return value === undefined; + } + function Union(schema, references, value) { + return schema.anyOf.some((inner) => Visit(inner, references, value)); + } + function Uint8Array(schema, references, value) { + if (!(value instanceof globalThis.Uint8Array)) { + return false; + } + if (IsDefined(schema.maxByteLength) && !(value.length <= schema.maxByteLength)) { + return false; + } + if (IsDefined(schema.minByteLength) && !(value.length >= schema.minByteLength)) { + return false; + } + return true; + } + function Unknown(schema, references, value) { + return true; + } + function Void(schema, references, value) { + return IsVoid(value); + } + function UserDefined(schema, references, value) { + if (!Types.TypeRegistry.Has(schema[Types.Kind])) + return false; + const func = Types.TypeRegistry.Get(schema[Types.Kind]); + return func(schema, value); + } + function Visit(schema, references, value) { + const references_ = IsDefined(schema.$id) ? [...references, schema] : references; + const schema_ = schema; + switch (schema_[Types.Kind]) { + case 'Any': + return Any(schema_, references_, value); + case 'Array': + return Array(schema_, references_, value); + case 'BigInt': + return BigInt(schema_, references_, value); + case 'Boolean': + return Boolean(schema_, references_, value); + case 'Constructor': + return Constructor(schema_, references_, value); + case 'Date': + return Date(schema_, references_, value); + case 'Function': + return Function(schema_, references_, value); + case 'Integer': + return Integer(schema_, references_, value); + case 'Intersect': + return Intersect(schema_, references_, value); + case 'Literal': + return Literal(schema_, references_, value); + case 'Never': + return Never(schema_, references_, value); + case 'Not': + return Not(schema_, references_, value); + case 'Null': + return Null(schema_, references_, value); + case 'Number': + return Number(schema_, references_, value); + case 'Object': + return Object(schema_, references_, value); + case 'Promise': + return Promise(schema_, references_, value); + case 'Record': + return Record(schema_, references_, value); + case 'Ref': + return Ref(schema_, references_, value); + case 'String': + return String(schema_, references_, value); + case 'Symbol': + return Symbol(schema_, references_, value); + case 'TemplateLiteral': + return TemplateLiteral(schema_, references_, value); + case 'This': + return This(schema_, references_, value); + case 'Tuple': + return Tuple(schema_, references_, value); + case 'Undefined': + return Undefined(schema_, references_, value); + case 'Union': + return Union(schema_, references_, value); + case 'Uint8Array': + return Uint8Array(schema_, references_, value); + case 'Unknown': + return Unknown(schema_, references_, value); + case 'Void': + return Void(schema_, references_, value); + default: + if (!Types.TypeRegistry.Has(schema_[Types.Kind])) + throw new ValueCheckUnknownTypeError(schema_); + return UserDefined(schema_, references_, value); + } + } + // ------------------------------------------------------------------------- + // Check + // ------------------------------------------------------------------------- + function Check(schema, references, value) { + return Visit(schema, references, value); + } + ValueCheck.Check = Check; +})(ValueCheck = exports.ValueCheck || (exports.ValueCheck = {})); diff --git a/node_modules/@sinclair/typebox/value/clone.d.ts b/node_modules/@sinclair/typebox/value/clone.d.ts new file mode 100644 index 00000000..5ca0adf1 --- /dev/null +++ b/node_modules/@sinclair/typebox/value/clone.d.ts @@ -0,0 +1,3 @@ +export declare namespace ValueClone { + function Clone(value: T): T; +} diff --git a/node_modules/@sinclair/typebox/value/clone.js b/node_modules/@sinclair/typebox/value/clone.js new file mode 100644 index 00000000..75e2685c --- /dev/null +++ b/node_modules/@sinclair/typebox/value/clone.js @@ -0,0 +1,71 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/value + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ValueClone = void 0; +const is_1 = require("./is"); +var ValueClone; +(function (ValueClone) { + function Array(value) { + return value.map((element) => Clone(element)); + } + function Date(value) { + return new globalThis.Date(value.toISOString()); + } + function Object(value) { + const keys = [...globalThis.Object.keys(value), ...globalThis.Object.getOwnPropertySymbols(value)]; + return keys.reduce((acc, key) => ({ ...acc, [key]: Clone(value[key]) }), {}); + } + function TypedArray(value) { + return value.slice(); + } + function Value(value) { + return value; + } + function Clone(value) { + if (is_1.Is.Date(value)) { + return Date(value); + } + else if (is_1.Is.Object(value)) { + return Object(value); + } + else if (is_1.Is.Array(value)) { + return Array(value); + } + else if (is_1.Is.TypedArray(value)) { + return TypedArray(value); + } + else if (is_1.Is.Value(value)) { + return Value(value); + } + else { + throw new Error('ValueClone: Unable to clone value'); + } + } + ValueClone.Clone = Clone; +})(ValueClone = exports.ValueClone || (exports.ValueClone = {})); diff --git a/node_modules/@sinclair/typebox/value/convert.d.ts b/node_modules/@sinclair/typebox/value/convert.d.ts new file mode 100644 index 00000000..99c5d5d3 --- /dev/null +++ b/node_modules/@sinclair/typebox/value/convert.d.ts @@ -0,0 +1,13 @@ +import * as Types from '../typebox'; +export declare class ValueConvertUnknownTypeError extends Error { + readonly schema: Types.TSchema; + constructor(schema: Types.TSchema); +} +export declare class ValueConvertDereferenceError extends Error { + readonly schema: Types.TRef | Types.TThis; + constructor(schema: Types.TRef | Types.TThis); +} +export declare namespace ValueConvert { + function Visit(schema: Types.TSchema, references: Types.TSchema[], value: any): unknown; + function Convert(schema: T, references: Types.TSchema[], value: any): unknown; +} diff --git a/node_modules/@sinclair/typebox/value/convert.js b/node_modules/@sinclair/typebox/value/convert.js new file mode 100644 index 00000000..70df03bb --- /dev/null +++ b/node_modules/@sinclair/typebox/value/convert.js @@ -0,0 +1,372 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/value + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ValueConvert = exports.ValueConvertDereferenceError = exports.ValueConvertUnknownTypeError = void 0; +const Types = require("../typebox"); +const clone_1 = require("./clone"); +const check_1 = require("./check"); +// ---------------------------------------------------------------------------------------------- +// Errors +// ---------------------------------------------------------------------------------------------- +class ValueConvertUnknownTypeError extends Error { + constructor(schema) { + super('ValueConvert: Unknown type'); + this.schema = schema; + } +} +exports.ValueConvertUnknownTypeError = ValueConvertUnknownTypeError; +class ValueConvertDereferenceError extends Error { + constructor(schema) { + super(`ValueConvert: Unable to dereference schema with $id '${schema.$ref}'`); + this.schema = schema; + } +} +exports.ValueConvertDereferenceError = ValueConvertDereferenceError; +var ValueConvert; +(function (ValueConvert) { + // ---------------------------------------------------------------------------------------------- + // Guards + // ---------------------------------------------------------------------------------------------- + function IsObject(value) { + return typeof value === 'object' && value !== null && !globalThis.Array.isArray(value); + } + function IsArray(value) { + return typeof value === 'object' && globalThis.Array.isArray(value); + } + function IsDate(value) { + return typeof value === 'object' && value instanceof globalThis.Date; + } + function IsSymbol(value) { + return typeof value === 'symbol'; + } + function IsString(value) { + return typeof value === 'string'; + } + function IsBoolean(value) { + return typeof value === 'boolean'; + } + function IsBigInt(value) { + return typeof value === 'bigint'; + } + function IsNumber(value) { + return typeof value === 'number' && !isNaN(value); + } + function IsStringNumeric(value) { + return IsString(value) && !isNaN(value) && !isNaN(parseFloat(value)); + } + function IsValueToString(value) { + return IsBigInt(value) || IsBoolean(value) || IsNumber(value); + } + function IsValueTrue(value) { + return value === true || (IsNumber(value) && value === 1) || (IsBigInt(value) && value === globalThis.BigInt('1')) || (IsString(value) && (value.toLowerCase() === 'true' || value === '1')); + } + function IsValueFalse(value) { + return value === false || (IsNumber(value) && value === 0) || (IsBigInt(value) && value === globalThis.BigInt('0')) || (IsString(value) && (value.toLowerCase() === 'false' || value === '0')); + } + function IsTimeStringWithTimeZone(value) { + return IsString(value) && /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i.test(value); + } + function IsTimeStringWithoutTimeZone(value) { + return IsString(value) && /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)?$/i.test(value); + } + function IsDateTimeStringWithTimeZone(value) { + return IsString(value) && /^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i.test(value); + } + function IsDateTimeStringWithoutTimeZone(value) { + return IsString(value) && /^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)?$/i.test(value); + } + function IsDateString(value) { + return IsString(value) && /^\d\d\d\d-[0-1]\d-[0-3]\d$/i.test(value); + } + // ---------------------------------------------------------------------------------------------- + // Convert + // ---------------------------------------------------------------------------------------------- + function TryConvertLiteralString(value, target) { + const conversion = TryConvertString(value); + return conversion === target ? conversion : value; + } + function TryConvertLiteralNumber(value, target) { + const conversion = TryConvertNumber(value); + return conversion === target ? conversion : value; + } + function TryConvertLiteralBoolean(value, target) { + const conversion = TryConvertBoolean(value); + return conversion === target ? conversion : value; + } + function TryConvertLiteral(schema, value) { + if (typeof schema.const === 'string') { + return TryConvertLiteralString(value, schema.const); + } + else if (typeof schema.const === 'number') { + return TryConvertLiteralNumber(value, schema.const); + } + else if (typeof schema.const === 'boolean') { + return TryConvertLiteralBoolean(value, schema.const); + } + else { + return clone_1.ValueClone.Clone(value); + } + } + function TryConvertBoolean(value) { + return IsValueTrue(value) ? true : IsValueFalse(value) ? false : value; + } + function TryConvertBigInt(value) { + return IsStringNumeric(value) ? globalThis.BigInt(parseInt(value)) : IsNumber(value) ? globalThis.BigInt(value | 0) : IsValueFalse(value) ? 0 : IsValueTrue(value) ? 1 : value; + } + function TryConvertString(value) { + return IsValueToString(value) ? value.toString() : IsSymbol(value) && value.description !== undefined ? value.description.toString() : value; + } + function TryConvertNumber(value) { + return IsStringNumeric(value) ? parseFloat(value) : IsValueTrue(value) ? 1 : IsValueFalse(value) ? 0 : value; + } + function TryConvertInteger(value) { + return IsStringNumeric(value) ? parseInt(value) : IsNumber(value) ? value | 0 : IsValueTrue(value) ? 1 : IsValueFalse(value) ? 0 : value; + } + function TryConvertNull(value) { + return IsString(value) && value.toLowerCase() === 'null' ? null : value; + } + function TryConvertUndefined(value) { + return IsString(value) && value === 'undefined' ? undefined : value; + } + function TryConvertDate(value) { + // note: this function may return an invalid dates for the regex tests + // above. Invalid dates will however be checked during the casting + // function and will return a epoch date if invalid. Consider better + // string parsing for the iso dates in future revisions. + return IsDate(value) + ? value + : IsNumber(value) + ? new globalThis.Date(value) + : IsValueTrue(value) + ? new globalThis.Date(1) + : IsValueFalse(value) + ? new globalThis.Date(0) + : IsStringNumeric(value) + ? new globalThis.Date(parseInt(value)) + : IsTimeStringWithoutTimeZone(value) + ? new globalThis.Date(`1970-01-01T${value}.000Z`) + : IsTimeStringWithTimeZone(value) + ? new globalThis.Date(`1970-01-01T${value}`) + : IsDateTimeStringWithoutTimeZone(value) + ? new globalThis.Date(`${value}.000Z`) + : IsDateTimeStringWithTimeZone(value) + ? new globalThis.Date(value) + : IsDateString(value) + ? new globalThis.Date(`${value}T00:00:00.000Z`) + : value; + } + // ---------------------------------------------------------------------------------------------- + // Cast + // ---------------------------------------------------------------------------------------------- + function Any(schema, references, value) { + return value; + } + function Array(schema, references, value) { + if (IsArray(value)) { + return value.map((value) => Visit(schema.items, references, value)); + } + return value; + } + function BigInt(schema, references, value) { + return TryConvertBigInt(value); + } + function Boolean(schema, references, value) { + return TryConvertBoolean(value); + } + function Constructor(schema, references, value) { + return clone_1.ValueClone.Clone(value); + } + function Date(schema, references, value) { + return TryConvertDate(value); + } + function Function(schema, references, value) { + return value; + } + function Integer(schema, references, value) { + return TryConvertInteger(value); + } + function Intersect(schema, references, value) { + return value; + } + function Literal(schema, references, value) { + return TryConvertLiteral(schema, value); + } + function Never(schema, references, value) { + return value; + } + function Null(schema, references, value) { + return TryConvertNull(value); + } + function Number(schema, references, value) { + return TryConvertNumber(value); + } + function Object(schema, references, value) { + if (IsObject(value)) + return globalThis.Object.keys(schema.properties).reduce((acc, key) => { + return value[key] !== undefined ? { ...acc, [key]: Visit(schema.properties[key], references, value[key]) } : { ...acc }; + }, value); + return value; + } + function Promise(schema, references, value) { + return value; + } + function Record(schema, references, value) { + const propertyKey = globalThis.Object.getOwnPropertyNames(schema.patternProperties)[0]; + const property = schema.patternProperties[propertyKey]; + const result = {}; + for (const [propKey, propValue] of globalThis.Object.entries(value)) { + result[propKey] = Visit(property, references, propValue); + } + return result; + } + function Ref(schema, references, value) { + const index = references.findIndex((foreign) => foreign.$id === schema.$ref); + if (index === -1) + throw new ValueConvertDereferenceError(schema); + const target = references[index]; + return Visit(target, references, value); + } + function String(schema, references, value) { + return TryConvertString(value); + } + function Symbol(schema, references, value) { + return value; + } + function TemplateLiteral(schema, references, value) { + return value; + } + function This(schema, references, value) { + const index = references.findIndex((foreign) => foreign.$id === schema.$ref); + if (index === -1) + throw new ValueConvertDereferenceError(schema); + const target = references[index]; + return Visit(target, references, value); + } + function Tuple(schema, references, value) { + if (IsArray(value) && schema.items !== undefined) { + return value.map((value, index) => { + return index < schema.items.length ? Visit(schema.items[index], references, value) : value; + }); + } + return value; + } + function Undefined(schema, references, value) { + return TryConvertUndefined(value); + } + function Union(schema, references, value) { + for (const subschema of schema.anyOf) { + const converted = Visit(subschema, references, value); + if (check_1.ValueCheck.Check(subschema, references, converted)) { + return converted; + } + } + return value; + } + function Uint8Array(schema, references, value) { + return value; + } + function Unknown(schema, references, value) { + return value; + } + function Void(schema, references, value) { + return value; + } + function UserDefined(schema, references, value) { + return value; + } + function Visit(schema, references, value) { + const references_ = IsString(schema.$id) ? [...references, schema] : references; + const schema_ = schema; + switch (schema[Types.Kind]) { + case 'Any': + return Any(schema_, references_, value); + case 'Array': + return Array(schema_, references_, value); + case 'BigInt': + return BigInt(schema_, references_, value); + case 'Boolean': + return Boolean(schema_, references_, value); + case 'Constructor': + return Constructor(schema_, references_, value); + case 'Date': + return Date(schema_, references_, value); + case 'Function': + return Function(schema_, references_, value); + case 'Integer': + return Integer(schema_, references_, value); + case 'Intersect': + return Intersect(schema_, references_, value); + case 'Literal': + return Literal(schema_, references_, value); + case 'Never': + return Never(schema_, references_, value); + case 'Null': + return Null(schema_, references_, value); + case 'Number': + return Number(schema_, references_, value); + case 'Object': + return Object(schema_, references_, value); + case 'Promise': + return Promise(schema_, references_, value); + case 'Record': + return Record(schema_, references_, value); + case 'Ref': + return Ref(schema_, references_, value); + case 'String': + return String(schema_, references_, value); + case 'Symbol': + return Symbol(schema_, references_, value); + case 'TemplateLiteral': + return TemplateLiteral(schema_, references_, value); + case 'This': + return This(schema_, references_, value); + case 'Tuple': + return Tuple(schema_, references_, value); + case 'Undefined': + return Undefined(schema_, references_, value); + case 'Union': + return Union(schema_, references_, value); + case 'Uint8Array': + return Uint8Array(schema_, references_, value); + case 'Unknown': + return Unknown(schema_, references_, value); + case 'Void': + return Void(schema_, references_, value); + default: + if (!Types.TypeRegistry.Has(schema_[Types.Kind])) + throw new ValueConvertUnknownTypeError(schema_); + return UserDefined(schema_, references_, value); + } + } + ValueConvert.Visit = Visit; + function Convert(schema, references, value) { + return Visit(schema, references, clone_1.ValueClone.Clone(value)); + } + ValueConvert.Convert = Convert; +})(ValueConvert = exports.ValueConvert || (exports.ValueConvert = {})); diff --git a/node_modules/@sinclair/typebox/value/create.d.ts b/node_modules/@sinclair/typebox/value/create.d.ts new file mode 100644 index 00000000..86e1e5e0 --- /dev/null +++ b/node_modules/@sinclair/typebox/value/create.d.ts @@ -0,0 +1,26 @@ +import * as Types from '../typebox'; +export declare class ValueCreateUnknownTypeError extends Error { + readonly schema: Types.TSchema; + constructor(schema: Types.TSchema); +} +export declare class ValueCreateNeverTypeError extends Error { + readonly schema: Types.TSchema; + constructor(schema: Types.TSchema); +} +export declare class ValueCreateIntersectTypeError extends Error { + readonly schema: Types.TSchema; + constructor(schema: Types.TSchema); +} +export declare class ValueCreateTempateLiteralTypeError extends Error { + readonly schema: Types.TSchema; + constructor(schema: Types.TSchema); +} +export declare class ValueCreateDereferenceError extends Error { + readonly schema: Types.TRef | Types.TThis; + constructor(schema: Types.TRef | Types.TThis); +} +export declare namespace ValueCreate { + /** Creates a value from the given schema. If the schema specifies a default value, then that value is returned. */ + function Visit(schema: Types.TSchema, references: Types.TSchema[]): unknown; + function Create(schema: T, references: Types.TSchema[]): Types.Static; +} diff --git a/node_modules/@sinclair/typebox/value/create.js b/node_modules/@sinclair/typebox/value/create.js new file mode 100644 index 00000000..42374a8b --- /dev/null +++ b/node_modules/@sinclair/typebox/value/create.js @@ -0,0 +1,480 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/value + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ValueCreate = exports.ValueCreateDereferenceError = exports.ValueCreateTempateLiteralTypeError = exports.ValueCreateIntersectTypeError = exports.ValueCreateNeverTypeError = exports.ValueCreateUnknownTypeError = void 0; +const Types = require("../typebox"); +const check_1 = require("./check"); +// -------------------------------------------------------------------------- +// Errors +// -------------------------------------------------------------------------- +class ValueCreateUnknownTypeError extends Error { + constructor(schema) { + super('ValueCreate: Unknown type'); + this.schema = schema; + } +} +exports.ValueCreateUnknownTypeError = ValueCreateUnknownTypeError; +class ValueCreateNeverTypeError extends Error { + constructor(schema) { + super('ValueCreate: Never types cannot be created'); + this.schema = schema; + } +} +exports.ValueCreateNeverTypeError = ValueCreateNeverTypeError; +class ValueCreateIntersectTypeError extends Error { + constructor(schema) { + super('ValueCreate: Intersect produced invalid value. Consider using a default value.'); + this.schema = schema; + } +} +exports.ValueCreateIntersectTypeError = ValueCreateIntersectTypeError; +class ValueCreateTempateLiteralTypeError extends Error { + constructor(schema) { + super('ValueCreate: Can only create template literal values from patterns that produce finite sequences. Consider using a default value.'); + this.schema = schema; + } +} +exports.ValueCreateTempateLiteralTypeError = ValueCreateTempateLiteralTypeError; +class ValueCreateDereferenceError extends Error { + constructor(schema) { + super(`ValueCreate: Unable to dereference schema with $id '${schema.$ref}'`); + this.schema = schema; + } +} +exports.ValueCreateDereferenceError = ValueCreateDereferenceError; +// -------------------------------------------------------------------------- +// ValueCreate +// -------------------------------------------------------------------------- +var ValueCreate; +(function (ValueCreate) { + // -------------------------------------------------------- + // Guards + // -------------------------------------------------------- + function IsString(value) { + return typeof value === 'string'; + } + // -------------------------------------------------------- + // Types + // -------------------------------------------------------- + function Any(schema, references) { + if ('default' in schema) { + return schema.default; + } + else { + return {}; + } + } + function Array(schema, references) { + if (schema.uniqueItems === true && schema.default === undefined) { + throw new Error('ValueCreate.Array: Arrays with uniqueItems require a default value'); + } + else if ('default' in schema) { + return schema.default; + } + else if (schema.minItems !== undefined) { + return globalThis.Array.from({ length: schema.minItems }).map((item) => { + return ValueCreate.Create(schema.items, references); + }); + } + else { + return []; + } + } + function BigInt(schema, references) { + if ('default' in schema) { + return schema.default; + } + else { + return globalThis.BigInt(0); + } + } + function Boolean(schema, references) { + if ('default' in schema) { + return schema.default; + } + else { + return false; + } + } + function Constructor(schema, references) { + if ('default' in schema) { + return schema.default; + } + else { + const value = ValueCreate.Create(schema.returns, references); + if (typeof value === 'object' && !globalThis.Array.isArray(value)) { + return class { + constructor() { + for (const [key, val] of globalThis.Object.entries(value)) { + const self = this; + self[key] = val; + } + } + }; + } + else { + return class { + }; + } + } + } + function Date(schema, references) { + if ('default' in schema) { + return schema.default; + } + else if (schema.minimumTimestamp !== undefined) { + return new globalThis.Date(schema.minimumTimestamp); + } + else { + return new globalThis.Date(0); + } + } + function Function(schema, references) { + if ('default' in schema) { + return schema.default; + } + else { + return () => ValueCreate.Create(schema.returns, references); + } + } + function Integer(schema, references) { + if ('default' in schema) { + return schema.default; + } + else if (schema.minimum !== undefined) { + return schema.minimum; + } + else { + return 0; + } + } + function Intersect(schema, references) { + if ('default' in schema) { + return schema.default; + } + else { + // Note: The best we can do here is attempt to instance each sub type and apply through object assign. For non-object + // sub types, we just escape the assignment and just return the value. In the latter case, this is typically going to + // be a consequence of an illogical intersection. + const value = schema.allOf.reduce((acc, schema) => { + const next = Visit(schema, references); + return typeof next === 'object' ? { ...acc, ...next } : next; + }, {}); + if (!check_1.ValueCheck.Check(schema, references, value)) + throw new ValueCreateIntersectTypeError(schema); + return value; + } + } + function Literal(schema, references) { + if ('default' in schema) { + return schema.default; + } + else { + return schema.const; + } + } + function Never(schema, references) { + throw new ValueCreateNeverTypeError(schema); + } + function Not(schema, references) { + if ('default' in schema) { + return schema.default; + } + else { + return Visit(schema.allOf[1], references); + } + } + function Null(schema, references) { + if ('default' in schema) { + return schema.default; + } + else { + return null; + } + } + function Number(schema, references) { + if ('default' in schema) { + return schema.default; + } + else if (schema.minimum !== undefined) { + return schema.minimum; + } + else { + return 0; + } + } + function Object(schema, references) { + if ('default' in schema) { + return schema.default; + } + else { + const required = new Set(schema.required); + return (schema.default || + globalThis.Object.entries(schema.properties).reduce((acc, [key, schema]) => { + return required.has(key) ? { ...acc, [key]: ValueCreate.Create(schema, references) } : { ...acc }; + }, {})); + } + } + function Promise(schema, references) { + if ('default' in schema) { + return schema.default; + } + else { + return globalThis.Promise.resolve(ValueCreate.Create(schema.item, references)); + } + } + function Record(schema, references) { + const [keyPattern, valueSchema] = globalThis.Object.entries(schema.patternProperties)[0]; + if ('default' in schema) { + return schema.default; + } + else if (!(keyPattern === Types.PatternStringExact || keyPattern === Types.PatternNumberExact)) { + const propertyKeys = keyPattern.slice(1, keyPattern.length - 1).split('|'); + return propertyKeys.reduce((acc, key) => { + return { ...acc, [key]: Create(valueSchema, references) }; + }, {}); + } + else { + return {}; + } + } + function Ref(schema, references) { + if ('default' in schema) { + return schema.default; + } + else { + const index = references.findIndex((foreign) => foreign.$id === schema.$id); + if (index === -1) + throw new ValueCreateDereferenceError(schema); + const target = references[index]; + return Visit(target, references); + } + } + function String(schema, references) { + if (schema.pattern !== undefined) { + if (!('default' in schema)) { + throw new Error('ValueCreate.String: String types with patterns must specify a default value'); + } + else { + return schema.default; + } + } + else if (schema.format !== undefined) { + if (!('default' in schema)) { + throw new Error('ValueCreate.String: String types with formats must specify a default value'); + } + else { + return schema.default; + } + } + else { + if ('default' in schema) { + return schema.default; + } + else if (schema.minLength !== undefined) { + return globalThis.Array.from({ length: schema.minLength }) + .map(() => '.') + .join(''); + } + else { + return ''; + } + } + } + function Symbol(schema, references) { + if ('default' in schema) { + return schema.default; + } + else if ('value' in schema) { + return globalThis.Symbol.for(schema.value); + } + else { + return globalThis.Symbol(); + } + } + function TemplateLiteral(schema, references) { + if ('default' in schema) { + return schema.default; + } + const expression = Types.TemplateLiteralParser.ParseExact(schema.pattern); + if (!Types.TemplateLiteralFinite.Check(expression)) + throw new ValueCreateTempateLiteralTypeError(schema); + const sequence = Types.TemplateLiteralGenerator.Generate(expression); + return sequence.next().value; + } + function This(schema, references) { + if ('default' in schema) { + return schema.default; + } + else { + const index = references.findIndex((foreign) => foreign.$id === schema.$id); + if (index === -1) + throw new ValueCreateDereferenceError(schema); + const target = references[index]; + return Visit(target, references); + } + } + function Tuple(schema, references) { + if ('default' in schema) { + return schema.default; + } + if (schema.items === undefined) { + return []; + } + else { + return globalThis.Array.from({ length: schema.minItems }).map((_, index) => ValueCreate.Create(schema.items[index], references)); + } + } + function Undefined(schema, references) { + if ('default' in schema) { + return schema.default; + } + else { + return undefined; + } + } + function Union(schema, references) { + if ('default' in schema) { + return schema.default; + } + else if (schema.anyOf.length === 0) { + throw new Error('ValueCreate.Union: Cannot create Union with zero variants'); + } + else { + return ValueCreate.Create(schema.anyOf[0], references); + } + } + function Uint8Array(schema, references) { + if ('default' in schema) { + return schema.default; + } + else if (schema.minByteLength !== undefined) { + return new globalThis.Uint8Array(schema.minByteLength); + } + else { + return new globalThis.Uint8Array(0); + } + } + function Unknown(schema, references) { + if ('default' in schema) { + return schema.default; + } + else { + return {}; + } + } + function Void(schema, references) { + if ('default' in schema) { + return schema.default; + } + else { + return void 0; + } + } + function UserDefined(schema, references) { + if ('default' in schema) { + return schema.default; + } + else { + throw new Error('ValueCreate.UserDefined: User defined types must specify a default value'); + } + } + /** Creates a value from the given schema. If the schema specifies a default value, then that value is returned. */ + function Visit(schema, references) { + const references_ = IsString(schema.$id) ? [...references, schema] : references; + const schema_ = schema; + switch (schema_[Types.Kind]) { + case 'Any': + return Any(schema_, references_); + case 'Array': + return Array(schema_, references_); + case 'BigInt': + return BigInt(schema_, references_); + case 'Boolean': + return Boolean(schema_, references_); + case 'Constructor': + return Constructor(schema_, references_); + case 'Date': + return Date(schema_, references_); + case 'Function': + return Function(schema_, references_); + case 'Integer': + return Integer(schema_, references_); + case 'Intersect': + return Intersect(schema_, references_); + case 'Literal': + return Literal(schema_, references_); + case 'Never': + return Never(schema_, references_); + case 'Not': + return Not(schema_, references_); + case 'Null': + return Null(schema_, references_); + case 'Number': + return Number(schema_, references_); + case 'Object': + return Object(schema_, references_); + case 'Promise': + return Promise(schema_, references_); + case 'Record': + return Record(schema_, references_); + case 'Ref': + return Ref(schema_, references_); + case 'String': + return String(schema_, references_); + case 'Symbol': + return Symbol(schema_, references_); + case 'TemplateLiteral': + return TemplateLiteral(schema_, references_); + case 'This': + return This(schema_, references_); + case 'Tuple': + return Tuple(schema_, references_); + case 'Undefined': + return Undefined(schema_, references_); + case 'Union': + return Union(schema_, references_); + case 'Uint8Array': + return Uint8Array(schema_, references_); + case 'Unknown': + return Unknown(schema_, references_); + case 'Void': + return Void(schema_, references_); + default: + if (!Types.TypeRegistry.Has(schema_[Types.Kind])) + throw new ValueCreateUnknownTypeError(schema_); + return UserDefined(schema_, references_); + } + } + ValueCreate.Visit = Visit; + function Create(schema, references) { + return Visit(schema, references); + } + ValueCreate.Create = Create; +})(ValueCreate = exports.ValueCreate || (exports.ValueCreate = {})); diff --git a/node_modules/@sinclair/typebox/value/delta.d.ts b/node_modules/@sinclair/typebox/value/delta.d.ts new file mode 100644 index 00000000..3320fac7 --- /dev/null +++ b/node_modules/@sinclair/typebox/value/delta.d.ts @@ -0,0 +1,43 @@ +import { Static } from '../typebox'; +export type Insert = Static; +export declare const Insert: import("../typebox").TObject<{ + type: import("../typebox").TLiteral<"insert">; + path: import("../typebox").TString; + value: import("../typebox").TUnknown; +}>; +export type Update = Static; +export declare const Update: import("../typebox").TObject<{ + type: import("../typebox").TLiteral<"update">; + path: import("../typebox").TString; + value: import("../typebox").TUnknown; +}>; +export type Delete = Static; +export declare const Delete: import("../typebox").TObject<{ + type: import("../typebox").TLiteral<"delete">; + path: import("../typebox").TString; +}>; +export type Edit = Static; +export declare const Edit: import("../typebox").TUnion<[import("../typebox").TObject<{ + type: import("../typebox").TLiteral<"insert">; + path: import("../typebox").TString; + value: import("../typebox").TUnknown; +}>, import("../typebox").TObject<{ + type: import("../typebox").TLiteral<"update">; + path: import("../typebox").TString; + value: import("../typebox").TUnknown; +}>, import("../typebox").TObject<{ + type: import("../typebox").TLiteral<"delete">; + path: import("../typebox").TString; +}>]>; +export declare class ValueDeltaObjectWithSymbolKeyError extends Error { + readonly key: unknown; + constructor(key: unknown); +} +export declare class ValueDeltaUnableToDiffUnknownValue extends Error { + readonly value: unknown; + constructor(value: unknown); +} +export declare namespace ValueDelta { + function Diff(current: unknown, next: unknown): Edit[]; + function Patch(current: unknown, edits: Edit[]): T; +} diff --git a/node_modules/@sinclair/typebox/value/delta.js b/node_modules/@sinclair/typebox/value/delta.js new file mode 100644 index 00000000..89c06a0d --- /dev/null +++ b/node_modules/@sinclair/typebox/value/delta.js @@ -0,0 +1,204 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/value + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ValueDelta = exports.ValueDeltaUnableToDiffUnknownValue = exports.ValueDeltaObjectWithSymbolKeyError = exports.Edit = exports.Delete = exports.Update = exports.Insert = void 0; +const typebox_1 = require("../typebox"); +const is_1 = require("./is"); +const clone_1 = require("./clone"); +const pointer_1 = require("./pointer"); +exports.Insert = typebox_1.Type.Object({ + type: typebox_1.Type.Literal('insert'), + path: typebox_1.Type.String(), + value: typebox_1.Type.Unknown(), +}); +exports.Update = typebox_1.Type.Object({ + type: typebox_1.Type.Literal('update'), + path: typebox_1.Type.String(), + value: typebox_1.Type.Unknown(), +}); +exports.Delete = typebox_1.Type.Object({ + type: typebox_1.Type.Literal('delete'), + path: typebox_1.Type.String(), +}); +exports.Edit = typebox_1.Type.Union([exports.Insert, exports.Update, exports.Delete]); +// --------------------------------------------------------------------- +// Errors +// --------------------------------------------------------------------- +class ValueDeltaObjectWithSymbolKeyError extends Error { + constructor(key) { + super('ValueDelta: Cannot diff objects with symbol keys'); + this.key = key; + } +} +exports.ValueDeltaObjectWithSymbolKeyError = ValueDeltaObjectWithSymbolKeyError; +class ValueDeltaUnableToDiffUnknownValue extends Error { + constructor(value) { + super('ValueDelta: Unable to create diff edits for unknown value'); + this.value = value; + } +} +exports.ValueDeltaUnableToDiffUnknownValue = ValueDeltaUnableToDiffUnknownValue; +// --------------------------------------------------------------------- +// ValueDelta +// --------------------------------------------------------------------- +var ValueDelta; +(function (ValueDelta) { + // --------------------------------------------------------------------- + // Edits + // --------------------------------------------------------------------- + function Update(path, value) { + return { type: 'update', path, value }; + } + function Insert(path, value) { + return { type: 'insert', path, value }; + } + function Delete(path) { + return { type: 'delete', path }; + } + // --------------------------------------------------------------------- + // Diff + // --------------------------------------------------------------------- + function* Object(path, current, next) { + if (!is_1.Is.Object(next)) + return yield Update(path, next); + const currentKeys = [...globalThis.Object.keys(current), ...globalThis.Object.getOwnPropertySymbols(current)]; + const nextKeys = [...globalThis.Object.keys(next), ...globalThis.Object.getOwnPropertySymbols(next)]; + for (const key of currentKeys) { + if (typeof key === 'symbol') + throw new ValueDeltaObjectWithSymbolKeyError(key); + if (next[key] === undefined && nextKeys.includes(key)) + yield Update(`${path}/${String(key)}`, undefined); + } + for (const key of nextKeys) { + if (current[key] === undefined || next[key] === undefined) + continue; + if (typeof key === 'symbol') + throw new ValueDeltaObjectWithSymbolKeyError(key); + yield* Visit(`${path}/${String(key)}`, current[key], next[key]); + } + for (const key of nextKeys) { + if (typeof key === 'symbol') + throw new ValueDeltaObjectWithSymbolKeyError(key); + if (current[key] === undefined) + yield Insert(`${path}/${String(key)}`, next[key]); + } + for (const key of currentKeys.reverse()) { + if (typeof key === 'symbol') + throw new ValueDeltaObjectWithSymbolKeyError(key); + if (next[key] === undefined && !nextKeys.includes(key)) + yield Delete(`${path}/${String(key)}`); + } + } + function* Array(path, current, next) { + if (!is_1.Is.Array(next)) + return yield Update(path, next); + for (let i = 0; i < Math.min(current.length, next.length); i++) { + yield* Visit(`${path}/${i}`, current[i], next[i]); + } + for (let i = 0; i < next.length; i++) { + if (i < current.length) + continue; + yield Insert(`${path}/${i}`, next[i]); + } + for (let i = current.length - 1; i >= 0; i--) { + if (i < next.length) + continue; + yield Delete(`${path}/${i}`); + } + } + function* TypedArray(path, current, next) { + if (!is_1.Is.TypedArray(next) || current.length !== next.length || globalThis.Object.getPrototypeOf(current).constructor.name !== globalThis.Object.getPrototypeOf(next).constructor.name) + return yield Update(path, next); + for (let i = 0; i < Math.min(current.length, next.length); i++) { + yield* Visit(`${path}/${i}`, current[i], next[i]); + } + } + function* Value(path, current, next) { + if (current === next) + return; + yield Update(path, next); + } + function* Visit(path, current, next) { + if (is_1.Is.Object(current)) { + return yield* Object(path, current, next); + } + else if (is_1.Is.Array(current)) { + return yield* Array(path, current, next); + } + else if (is_1.Is.TypedArray(current)) { + return yield* TypedArray(path, current, next); + } + else if (is_1.Is.Value(current)) { + return yield* Value(path, current, next); + } + else { + throw new ValueDeltaUnableToDiffUnknownValue(current); + } + } + function Diff(current, next) { + return [...Visit('', current, next)]; + } + ValueDelta.Diff = Diff; + // --------------------------------------------------------------------- + // Patch + // --------------------------------------------------------------------- + function IsRootUpdate(edits) { + return edits.length > 0 && edits[0].path === '' && edits[0].type === 'update'; + } + function IsIdentity(edits) { + return edits.length === 0; + } + function Patch(current, edits) { + if (IsRootUpdate(edits)) { + return clone_1.ValueClone.Clone(edits[0].value); + } + if (IsIdentity(edits)) { + return clone_1.ValueClone.Clone(current); + } + const clone = clone_1.ValueClone.Clone(current); + for (const edit of edits) { + switch (edit.type) { + case 'insert': { + pointer_1.ValuePointer.Set(clone, edit.path, edit.value); + break; + } + case 'update': { + pointer_1.ValuePointer.Set(clone, edit.path, edit.value); + break; + } + case 'delete': { + pointer_1.ValuePointer.Delete(clone, edit.path); + break; + } + } + } + return clone; + } + ValueDelta.Patch = Patch; +})(ValueDelta = exports.ValueDelta || (exports.ValueDelta = {})); diff --git a/node_modules/@sinclair/typebox/value/equal.d.ts b/node_modules/@sinclair/typebox/value/equal.d.ts new file mode 100644 index 00000000..785c2b8d --- /dev/null +++ b/node_modules/@sinclair/typebox/value/equal.d.ts @@ -0,0 +1,3 @@ +export declare namespace ValueEqual { + function Equal(left: T, right: unknown): right is T; +} diff --git a/node_modules/@sinclair/typebox/value/equal.js b/node_modules/@sinclair/typebox/value/equal.js new file mode 100644 index 00000000..ed9773b5 --- /dev/null +++ b/node_modules/@sinclair/typebox/value/equal.js @@ -0,0 +1,80 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/value + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ValueEqual = void 0; +const is_1 = require("./is"); +var ValueEqual; +(function (ValueEqual) { + function Object(left, right) { + if (!is_1.Is.Object(right)) + return false; + const leftKeys = [...globalThis.Object.keys(left), ...globalThis.Object.getOwnPropertySymbols(left)]; + const rightKeys = [...globalThis.Object.keys(right), ...globalThis.Object.getOwnPropertySymbols(right)]; + if (leftKeys.length !== rightKeys.length) + return false; + return leftKeys.every((key) => Equal(left[key], right[key])); + } + function Date(left, right) { + return is_1.Is.Date(right) && left.getTime() === right.getTime(); + } + function Array(left, right) { + if (!is_1.Is.Array(right) || left.length !== right.length) + return false; + return left.every((value, index) => Equal(value, right[index])); + } + function TypedArray(left, right) { + if (!is_1.Is.TypedArray(right) || left.length !== right.length || globalThis.Object.getPrototypeOf(left).constructor.name !== globalThis.Object.getPrototypeOf(right).constructor.name) + return false; + return left.every((value, index) => Equal(value, right[index])); + } + function Value(left, right) { + return left === right; + } + function Equal(left, right) { + if (is_1.Is.Object(left)) { + return Object(left, right); + } + else if (is_1.Is.Date(left)) { + return Date(left, right); + } + else if (is_1.Is.TypedArray(left)) { + return TypedArray(left, right); + } + else if (is_1.Is.Array(left)) { + return Array(left, right); + } + else if (is_1.Is.Value(left)) { + return Value(left, right); + } + else { + throw new Error('ValueEquals: Unable to compare value'); + } + } + ValueEqual.Equal = Equal; +})(ValueEqual = exports.ValueEqual || (exports.ValueEqual = {})); diff --git a/node_modules/@sinclair/typebox/value/hash.d.ts b/node_modules/@sinclair/typebox/value/hash.d.ts new file mode 100644 index 00000000..4c9116b5 --- /dev/null +++ b/node_modules/@sinclair/typebox/value/hash.d.ts @@ -0,0 +1,8 @@ +export declare class ValueHashError extends Error { + readonly value: unknown; + constructor(value: unknown); +} +export declare namespace ValueHash { + /** Creates a FNV1A-64 non cryptographic hash of the given value */ + function Create(value: unknown): bigint; +} diff --git a/node_modules/@sinclair/typebox/value/hash.js b/node_modules/@sinclair/typebox/value/hash.js new file mode 100644 index 00000000..95944208 --- /dev/null +++ b/node_modules/@sinclair/typebox/value/hash.js @@ -0,0 +1,208 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/hash + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ValueHash = exports.ValueHashError = void 0; +class ValueHashError extends Error { + constructor(value) { + super(`Hash: Unable to hash value`); + this.value = value; + } +} +exports.ValueHashError = ValueHashError; +var ValueHash; +(function (ValueHash) { + let ByteMarker; + (function (ByteMarker) { + ByteMarker[ByteMarker["Undefined"] = 0] = "Undefined"; + ByteMarker[ByteMarker["Null"] = 1] = "Null"; + ByteMarker[ByteMarker["Boolean"] = 2] = "Boolean"; + ByteMarker[ByteMarker["Number"] = 3] = "Number"; + ByteMarker[ByteMarker["String"] = 4] = "String"; + ByteMarker[ByteMarker["Object"] = 5] = "Object"; + ByteMarker[ByteMarker["Array"] = 6] = "Array"; + ByteMarker[ByteMarker["Date"] = 7] = "Date"; + ByteMarker[ByteMarker["Uint8Array"] = 8] = "Uint8Array"; + ByteMarker[ByteMarker["Symbol"] = 9] = "Symbol"; + ByteMarker[ByteMarker["BigInt"] = 10] = "BigInt"; + })(ByteMarker || (ByteMarker = {})); + // ---------------------------------------------------- + // State + // ---------------------------------------------------- + let Hash = globalThis.BigInt('14695981039346656037'); + const [Prime, Size] = [globalThis.BigInt('1099511628211'), globalThis.BigInt('2') ** globalThis.BigInt('64')]; + const Bytes = globalThis.Array.from({ length: 256 }).map((_, i) => globalThis.BigInt(i)); + const F64 = new globalThis.Float64Array(1); + const F64In = new globalThis.DataView(F64.buffer); + const F64Out = new globalThis.Uint8Array(F64.buffer); + // ---------------------------------------------------- + // Guards + // ---------------------------------------------------- + function IsDate(value) { + return value instanceof globalThis.Date; + } + function IsUint8Array(value) { + return value instanceof globalThis.Uint8Array; + } + function IsArray(value) { + return globalThis.Array.isArray(value); + } + function IsBoolean(value) { + return typeof value === 'boolean'; + } + function IsNull(value) { + return value === null; + } + function IsNumber(value) { + return typeof value === 'number'; + } + function IsSymbol(value) { + return typeof value === 'symbol'; + } + function IsBigInt(value) { + return typeof value === 'bigint'; + } + function IsObject(value) { + return typeof value === 'object' && value !== null && !IsArray(value) && !IsDate(value) && !IsUint8Array(value); + } + function IsString(value) { + return typeof value === 'string'; + } + function IsUndefined(value) { + return value === undefined; + } + // ---------------------------------------------------- + // Encoding + // ---------------------------------------------------- + function Array(value) { + FNV1A64(ByteMarker.Array); + for (const item of value) { + Visit(item); + } + } + function Boolean(value) { + FNV1A64(ByteMarker.Boolean); + FNV1A64(value ? 1 : 0); + } + function BigInt(value) { + FNV1A64(ByteMarker.BigInt); + F64In.setBigInt64(0, value); + for (const byte of F64Out) { + FNV1A64(byte); + } + } + function Date(value) { + FNV1A64(ByteMarker.Date); + Visit(value.getTime()); + } + function Null(value) { + FNV1A64(ByteMarker.Null); + } + function Number(value) { + FNV1A64(ByteMarker.Number); + F64In.setFloat64(0, value); + for (const byte of F64Out) { + FNV1A64(byte); + } + } + function Object(value) { + FNV1A64(ByteMarker.Object); + for (const key of globalThis.Object.keys(value).sort()) { + Visit(key); + Visit(value[key]); + } + } + function String(value) { + FNV1A64(ByteMarker.String); + for (let i = 0; i < value.length; i++) { + FNV1A64(value.charCodeAt(i)); + } + } + function Symbol(value) { + FNV1A64(ByteMarker.Symbol); + Visit(value.description); + } + function Uint8Array(value) { + FNV1A64(ByteMarker.Uint8Array); + for (let i = 0; i < value.length; i++) { + FNV1A64(value[i]); + } + } + function Undefined(value) { + return FNV1A64(ByteMarker.Undefined); + } + function Visit(value) { + if (IsArray(value)) { + Array(value); + } + else if (IsBoolean(value)) { + Boolean(value); + } + else if (IsBigInt(value)) { + BigInt(value); + } + else if (IsDate(value)) { + Date(value); + } + else if (IsNull(value)) { + Null(value); + } + else if (IsNumber(value)) { + Number(value); + } + else if (IsObject(value)) { + Object(value); + } + else if (IsString(value)) { + String(value); + } + else if (IsSymbol(value)) { + Symbol(value); + } + else if (IsUint8Array(value)) { + Uint8Array(value); + } + else if (IsUndefined(value)) { + Undefined(value); + } + else { + throw new ValueHashError(value); + } + } + function FNV1A64(byte) { + Hash = Hash ^ Bytes[byte]; + Hash = (Hash * Prime) % Size; + } + /** Creates a FNV1A-64 non cryptographic hash of the given value */ + function Create(value) { + Hash = globalThis.BigInt('14695981039346656037'); + Visit(value); + return Hash; + } + ValueHash.Create = Create; +})(ValueHash = exports.ValueHash || (exports.ValueHash = {})); diff --git a/node_modules/@sinclair/typebox/value/index.d.ts b/node_modules/@sinclair/typebox/value/index.d.ts new file mode 100644 index 00000000..4ad0b778 --- /dev/null +++ b/node_modules/@sinclair/typebox/value/index.d.ts @@ -0,0 +1,6 @@ +export { ValueError, ValueErrorIterator, ValueErrorType } from '../errors/index'; +export { ValueHash } from './hash'; +export { Edit, Insert, Update, Delete } from './delta'; +export { Mutable } from './mutate'; +export * from './pointer'; +export * from './value'; diff --git a/node_modules/@sinclair/typebox/value/index.js b/node_modules/@sinclair/typebox/value/index.js new file mode 100644 index 00000000..1f21de4d --- /dev/null +++ b/node_modules/@sinclair/typebox/value/index.js @@ -0,0 +1,56 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/value + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Delete = exports.Update = exports.Insert = exports.Edit = exports.ValueHash = exports.ValueErrorType = exports.ValueErrorIterator = void 0; +var index_1 = require("../errors/index"); +Object.defineProperty(exports, "ValueErrorIterator", { enumerable: true, get: function () { return index_1.ValueErrorIterator; } }); +Object.defineProperty(exports, "ValueErrorType", { enumerable: true, get: function () { return index_1.ValueErrorType; } }); +var hash_1 = require("./hash"); +Object.defineProperty(exports, "ValueHash", { enumerable: true, get: function () { return hash_1.ValueHash; } }); +var delta_1 = require("./delta"); +Object.defineProperty(exports, "Edit", { enumerable: true, get: function () { return delta_1.Edit; } }); +Object.defineProperty(exports, "Insert", { enumerable: true, get: function () { return delta_1.Insert; } }); +Object.defineProperty(exports, "Update", { enumerable: true, get: function () { return delta_1.Update; } }); +Object.defineProperty(exports, "Delete", { enumerable: true, get: function () { return delta_1.Delete; } }); +__exportStar(require("./pointer"), exports); +__exportStar(require("./value"), exports); diff --git a/node_modules/@sinclair/typebox/value/is.d.ts b/node_modules/@sinclair/typebox/value/is.d.ts new file mode 100644 index 00000000..b78ba9c2 --- /dev/null +++ b/node_modules/@sinclair/typebox/value/is.d.ts @@ -0,0 +1,11 @@ +export type ValueType = null | undefined | Function | symbol | bigint | number | boolean | string; +export type ObjectType = Record; +export type TypedArrayType = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array; +export type ArrayType = unknown[]; +export declare namespace Is { + function Object(value: unknown): value is ObjectType; + function Date(value: unknown): value is Date; + function Array(value: unknown): value is ArrayType; + function Value(value: unknown): value is ValueType; + function TypedArray(value: unknown): value is TypedArrayType; +} diff --git a/node_modules/@sinclair/typebox/value/is.js b/node_modules/@sinclair/typebox/value/is.js new file mode 100644 index 00000000..fbe1ed43 --- /dev/null +++ b/node_modules/@sinclair/typebox/value/is.js @@ -0,0 +1,53 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/value + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Is = void 0; +var Is; +(function (Is) { + function Object(value) { + return value !== null && typeof value === 'object' && !globalThis.Array.isArray(value) && !ArrayBuffer.isView(value) && !(value instanceof globalThis.Date); + } + Is.Object = Object; + function Date(value) { + return value instanceof globalThis.Date; + } + Is.Date = Date; + function Array(value) { + return globalThis.Array.isArray(value) && !ArrayBuffer.isView(value); + } + Is.Array = Array; + function Value(value) { + return value === null || value === undefined || typeof value === 'function' || typeof value === 'symbol' || typeof value === 'bigint' || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'string'; + } + Is.Value = Value; + function TypedArray(value) { + return ArrayBuffer.isView(value); + } + Is.TypedArray = TypedArray; +})(Is = exports.Is || (exports.Is = {})); diff --git a/node_modules/@sinclair/typebox/value/mutate.d.ts b/node_modules/@sinclair/typebox/value/mutate.d.ts new file mode 100644 index 00000000..e45c07e2 --- /dev/null +++ b/node_modules/@sinclair/typebox/value/mutate.d.ts @@ -0,0 +1,13 @@ +export declare class ValueMutateTypeMismatchError extends Error { + constructor(); +} +export declare class ValueMutateInvalidRootMutationError extends Error { + constructor(); +} +export type Mutable = { + [key: string]: unknown; +} | unknown[]; +export declare namespace ValueMutate { + /** Performs a deep mutable value assignment while retaining internal references. */ + function Mutate(current: Mutable, next: Mutable): void; +} diff --git a/node_modules/@sinclair/typebox/value/mutate.js b/node_modules/@sinclair/typebox/value/mutate.js new file mode 100644 index 00000000..4151596b --- /dev/null +++ b/node_modules/@sinclair/typebox/value/mutate.js @@ -0,0 +1,121 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/value + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ValueMutate = exports.ValueMutateInvalidRootMutationError = exports.ValueMutateTypeMismatchError = void 0; +const is_1 = require("./is"); +const pointer_1 = require("./pointer"); +const clone_1 = require("./clone"); +class ValueMutateTypeMismatchError extends Error { + constructor() { + super('ValueMutate: Cannot assign due type mismatch of assignable values'); + } +} +exports.ValueMutateTypeMismatchError = ValueMutateTypeMismatchError; +class ValueMutateInvalidRootMutationError extends Error { + constructor() { + super('ValueMutate: Only object and array types can be mutated at the root level'); + } +} +exports.ValueMutateInvalidRootMutationError = ValueMutateInvalidRootMutationError; +var ValueMutate; +(function (ValueMutate) { + function Object(root, path, current, next) { + if (!is_1.Is.Object(current)) { + pointer_1.ValuePointer.Set(root, path, clone_1.ValueClone.Clone(next)); + } + else { + const currentKeys = globalThis.Object.keys(current); + const nextKeys = globalThis.Object.keys(next); + for (const currentKey of currentKeys) { + if (!nextKeys.includes(currentKey)) { + delete current[currentKey]; + } + } + for (const nextKey of nextKeys) { + if (!currentKeys.includes(nextKey)) { + current[nextKey] = null; + } + } + for (const nextKey of nextKeys) { + Visit(root, `${path}/${nextKey}`, current[nextKey], next[nextKey]); + } + } + } + function Array(root, path, current, next) { + if (!is_1.Is.Array(current)) { + pointer_1.ValuePointer.Set(root, path, clone_1.ValueClone.Clone(next)); + } + else { + for (let index = 0; index < next.length; index++) { + Visit(root, `${path}/${index}`, current[index], next[index]); + } + current.splice(next.length); + } + } + function TypedArray(root, path, current, next) { + if (is_1.Is.TypedArray(current) && current.length === next.length) { + for (let i = 0; i < current.length; i++) { + current[i] = next[i]; + } + } + else { + pointer_1.ValuePointer.Set(root, path, clone_1.ValueClone.Clone(next)); + } + } + function Value(root, path, current, next) { + if (current === next) + return; + pointer_1.ValuePointer.Set(root, path, next); + } + function Visit(root, path, current, next) { + if (is_1.Is.Array(next)) { + return Array(root, path, current, next); + } + else if (is_1.Is.TypedArray(next)) { + return TypedArray(root, path, current, next); + } + else if (is_1.Is.Object(next)) { + return Object(root, path, current, next); + } + else if (is_1.Is.Value(next)) { + return Value(root, path, current, next); + } + } + /** Performs a deep mutable value assignment while retaining internal references. */ + function Mutate(current, next) { + if (is_1.Is.TypedArray(current) || is_1.Is.Value(current) || is_1.Is.TypedArray(next) || is_1.Is.Value(next)) { + throw new ValueMutateInvalidRootMutationError(); + } + if ((is_1.Is.Object(current) && is_1.Is.Array(next)) || (is_1.Is.Array(current) && is_1.Is.Object(next))) { + throw new ValueMutateTypeMismatchError(); + } + Visit(current, '', current, next); + } + ValueMutate.Mutate = Mutate; +})(ValueMutate = exports.ValueMutate || (exports.ValueMutate = {})); diff --git a/node_modules/@sinclair/typebox/value/pointer.d.ts b/node_modules/@sinclair/typebox/value/pointer.d.ts new file mode 100644 index 00000000..abae1e1c --- /dev/null +++ b/node_modules/@sinclair/typebox/value/pointer.d.ts @@ -0,0 +1,24 @@ +export declare class ValuePointerRootSetError extends Error { + readonly value: unknown; + readonly path: string; + readonly update: unknown; + constructor(value: unknown, path: string, update: unknown); +} +export declare class ValuePointerRootDeleteError extends Error { + readonly value: unknown; + readonly path: string; + constructor(value: unknown, path: string); +} +/** Provides functionality to update values through RFC6901 string pointers */ +export declare namespace ValuePointer { + /** Formats the given pointer into navigable key components */ + function Format(pointer: string): IterableIterator; + /** Sets the value at the given pointer. If the value at the pointer does not exist it is created */ + function Set(value: any, pointer: string, update: unknown): void; + /** Deletes a value at the given pointer */ + function Delete(value: any, pointer: string): void; + /** Returns true if a value exists at the given pointer */ + function Has(value: any, pointer: string): boolean; + /** Gets the value at the given pointer */ + function Get(value: any, pointer: string): any; +} diff --git a/node_modules/@sinclair/typebox/value/pointer.js b/node_modules/@sinclair/typebox/value/pointer.js new file mode 100644 index 00000000..981be635 --- /dev/null +++ b/node_modules/@sinclair/typebox/value/pointer.js @@ -0,0 +1,142 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/value + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ValuePointer = exports.ValuePointerRootDeleteError = exports.ValuePointerRootSetError = void 0; +class ValuePointerRootSetError extends Error { + constructor(value, path, update) { + super('ValuePointer: Cannot set root value'); + this.value = value; + this.path = path; + this.update = update; + } +} +exports.ValuePointerRootSetError = ValuePointerRootSetError; +class ValuePointerRootDeleteError extends Error { + constructor(value, path) { + super('ValuePointer: Cannot delete root value'); + this.value = value; + this.path = path; + } +} +exports.ValuePointerRootDeleteError = ValuePointerRootDeleteError; +/** Provides functionality to update values through RFC6901 string pointers */ +var ValuePointer; +(function (ValuePointer) { + function Escape(component) { + return component.indexOf('~') === -1 ? component : component.replace(/~1/g, '/').replace(/~0/g, '~'); + } + /** Formats the given pointer into navigable key components */ + function* Format(pointer) { + if (pointer === '') + return; + let [start, end] = [0, 0]; + for (let i = 0; i < pointer.length; i++) { + const char = pointer.charAt(i); + if (char === '/') { + if (i === 0) { + start = i + 1; + } + else { + end = i; + yield Escape(pointer.slice(start, end)); + start = i + 1; + } + } + else { + end = i; + } + } + yield Escape(pointer.slice(start)); + } + ValuePointer.Format = Format; + /** Sets the value at the given pointer. If the value at the pointer does not exist it is created */ + function Set(value, pointer, update) { + if (pointer === '') + throw new ValuePointerRootSetError(value, pointer, update); + let [owner, next, key] = [null, value, '']; + for (const component of Format(pointer)) { + if (next[component] === undefined) + next[component] = {}; + owner = next; + next = next[component]; + key = component; + } + owner[key] = update; + } + ValuePointer.Set = Set; + /** Deletes a value at the given pointer */ + function Delete(value, pointer) { + if (pointer === '') + throw new ValuePointerRootDeleteError(value, pointer); + let [owner, next, key] = [null, value, '']; + for (const component of Format(pointer)) { + if (next[component] === undefined || next[component] === null) + return; + owner = next; + next = next[component]; + key = component; + } + if (globalThis.Array.isArray(owner)) { + const index = parseInt(key); + owner.splice(index, 1); + } + else { + delete owner[key]; + } + } + ValuePointer.Delete = Delete; + /** Returns true if a value exists at the given pointer */ + function Has(value, pointer) { + if (pointer === '') + return true; + let [owner, next, key] = [null, value, '']; + for (const component of Format(pointer)) { + if (next[component] === undefined) + return false; + owner = next; + next = next[component]; + key = component; + } + return globalThis.Object.getOwnPropertyNames(owner).includes(key); + } + ValuePointer.Has = Has; + /** Gets the value at the given pointer */ + function Get(value, pointer) { + if (pointer === '') + return value; + let current = value; + for (const component of Format(pointer)) { + if (current[component] === undefined) + return undefined; + current = current[component]; + } + return current; + } + ValuePointer.Get = Get; +})(ValuePointer = exports.ValuePointer || (exports.ValuePointer = {})); diff --git a/node_modules/@sinclair/typebox/value/value.d.ts b/node_modules/@sinclair/typebox/value/value.d.ts new file mode 100644 index 00000000..bf8d32f5 --- /dev/null +++ b/node_modules/@sinclair/typebox/value/value.d.ts @@ -0,0 +1,39 @@ +import * as Types from '../typebox'; +import { ValueErrorIterator } from '../errors/index'; +import { Mutable } from './mutate'; +import { Edit } from './delta'; +/** Provides functions to perform structural updates to JavaScript values */ +export declare namespace Value { + /** Casts a value into a given type. The return value will retain as much information of the original value as possible. Cast will convert string, number, boolean and date values if a reasonable conversion is possible. */ + function Cast(schema: T, references: [...R], value: unknown): Types.Static; + /** Casts a value into a given type. The return value will retain as much information of the original value as possible. Cast will convert string, number, boolean and date values if a reasonable conversion is possible. */ + function Cast(schema: T, value: unknown): Types.Static; + /** Creates a value from the given type */ + function Create(schema: T, references: [...R]): Types.Static; + /** Creates a value from the given type */ + function Create(schema: T): Types.Static; + /** Returns true if the value matches the given type. */ + function Check(schema: T, references: [...R], value: unknown): value is Types.Static; + /** Returns true if the value matches the given type. */ + function Check(schema: T, value: unknown): value is Types.Static; + /** Converts any type mismatched values to their target type if a conversion is possible. */ + function Convert(schema: T, references: [...R], value: unknown): unknown; + /** Converts any type mismatched values to their target type if a conversion is possible. */ + function Convert(schema: T, value: unknown): unknown; + /** Returns a structural clone of the given value */ + function Clone(value: T): T; + /** Returns an iterator for each error in this value. */ + function Errors(schema: T, references: [...R], value: unknown): ValueErrorIterator; + /** Returns an iterator for each error in this value. */ + function Errors(schema: T, value: unknown): ValueErrorIterator; + /** Returns true if left and right values are structurally equal */ + function Equal(left: T, right: unknown): right is T; + /** Returns edits to transform the current value into the next value */ + function Diff(current: unknown, next: unknown): Edit[]; + /** Returns a FNV1A-64 non cryptographic hash of the given value */ + function Hash(value: unknown): bigint; + /** Returns a new value with edits applied to the given value */ + function Patch(current: unknown, edits: Edit[]): T; + /** Performs a deep mutable value assignment while retaining internal references. */ + function Mutate(current: Mutable, next: Mutable): void; +} diff --git a/node_modules/@sinclair/typebox/value/value.js b/node_modules/@sinclair/typebox/value/value.js new file mode 100644 index 00000000..e1ab919f --- /dev/null +++ b/node_modules/@sinclair/typebox/value/value.js @@ -0,0 +1,99 @@ +"use strict"; +/*-------------------------------------------------------------------------- + +@sinclair/typebox/value + +The MIT License (MIT) + +Copyright (c) 2017-2023 Haydn Paterson (sinclair) + +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. + +---------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Value = void 0; +const index_1 = require("../errors/index"); +const mutate_1 = require("./mutate"); +const hash_1 = require("./hash"); +const equal_1 = require("./equal"); +const cast_1 = require("./cast"); +const clone_1 = require("./clone"); +const convert_1 = require("./convert"); +const create_1 = require("./create"); +const check_1 = require("./check"); +const delta_1 = require("./delta"); +/** Provides functions to perform structural updates to JavaScript values */ +var Value; +(function (Value) { + function Cast(...args) { + const [schema, references, value] = args.length === 3 ? [args[0], args[1], args[2]] : [args[0], [], args[1]]; + return cast_1.ValueCast.Cast(schema, references, value); + } + Value.Cast = Cast; + function Create(...args) { + const [schema, references] = args.length === 2 ? [args[0], args[1]] : [args[0], []]; + return create_1.ValueCreate.Create(schema, references); + } + Value.Create = Create; + function Check(...args) { + const [schema, references, value] = args.length === 3 ? [args[0], args[1], args[2]] : [args[0], [], args[1]]; + return check_1.ValueCheck.Check(schema, references, value); + } + Value.Check = Check; + function Convert(...args) { + const [schema, references, value] = args.length === 3 ? [args[0], args[1], args[2]] : [args[0], [], args[1]]; + return convert_1.ValueConvert.Convert(schema, references, value); + } + Value.Convert = Convert; + /** Returns a structural clone of the given value */ + function Clone(value) { + return clone_1.ValueClone.Clone(value); + } + Value.Clone = Clone; + function Errors(...args) { + const [schema, references, value] = args.length === 3 ? [args[0], args[1], args[2]] : [args[0], [], args[1]]; + return index_1.ValueErrors.Errors(schema, references, value); + } + Value.Errors = Errors; + /** Returns true if left and right values are structurally equal */ + function Equal(left, right) { + return equal_1.ValueEqual.Equal(left, right); + } + Value.Equal = Equal; + /** Returns edits to transform the current value into the next value */ + function Diff(current, next) { + return delta_1.ValueDelta.Diff(current, next); + } + Value.Diff = Diff; + /** Returns a FNV1A-64 non cryptographic hash of the given value */ + function Hash(value) { + return hash_1.ValueHash.Create(value); + } + Value.Hash = Hash; + /** Returns a new value with edits applied to the given value */ + function Patch(current, edits) { + return delta_1.ValueDelta.Patch(current, edits); + } + Value.Patch = Patch; + /** Performs a deep mutable value assignment while retaining internal references. */ + function Mutate(current, next) { + mutate_1.ValueMutate.Mutate(current, next); + } + Value.Mutate = Mutate; +})(Value = exports.Value || (exports.Value = {})); diff --git a/node_modules/@sinonjs/commons/LICENSE b/node_modules/@sinonjs/commons/LICENSE new file mode 100644 index 00000000..5a77f0a2 --- /dev/null +++ b/node_modules/@sinonjs/commons/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2018, Sinon.JS +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/@sinonjs/commons/README.md b/node_modules/@sinonjs/commons/README.md new file mode 100644 index 00000000..9c420ba5 --- /dev/null +++ b/node_modules/@sinonjs/commons/README.md @@ -0,0 +1,16 @@ +# commons + +[![CircleCI](https://circleci.com/gh/sinonjs/commons.svg?style=svg)](https://circleci.com/gh/sinonjs/commons) +[![codecov](https://codecov.io/gh/sinonjs/commons/branch/master/graph/badge.svg)](https://codecov.io/gh/sinonjs/commons) +Contributor Covenant + +Simple functions shared among the sinon end user libraries + +## Rules + +- Follows the [Sinon.JS compatibility](https://github.com/sinonjs/sinon/blob/master/CONTRIBUTING.md#compatibility) +- 100% test coverage +- Code formatted using [Prettier](https://prettier.io) +- No side effects welcome! (only pure functions) +- No platform specific functions +- One export per file (any bundler can do tree shaking) diff --git a/node_modules/@sinonjs/commons/lib/called-in-order.js b/node_modules/@sinonjs/commons/lib/called-in-order.js new file mode 100644 index 00000000..cdbbb3f2 --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/called-in-order.js @@ -0,0 +1,55 @@ +"use strict"; + +var every = require("./prototypes/array").every; + +/** + * @private + */ +function hasCallsLeft(callMap, spy) { + if (callMap[spy.id] === undefined) { + callMap[spy.id] = 0; + } + + return callMap[spy.id] < spy.callCount; +} + +/** + * @private + */ +function checkAdjacentCalls(callMap, spy, index, spies) { + var calledBeforeNext = true; + + if (index !== spies.length - 1) { + calledBeforeNext = spy.calledBefore(spies[index + 1]); + } + + if (hasCallsLeft(callMap, spy) && calledBeforeNext) { + callMap[spy.id] += 1; + return true; + } + + return false; +} + +/** + * A Sinon proxy object (fake, spy, stub) + * @typedef {object} SinonProxy + * @property {Function} calledBefore - A method that determines if this proxy was called before another one + * @property {string} id - Some id + * @property {number} callCount - Number of times this proxy has been called + */ + +/** + * Returns true when the spies have been called in the order they were supplied in + * @param {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments + * @returns {boolean} true when spies are called in order, false otherwise + */ +function calledInOrder(spies) { + var callMap = {}; + // eslint-disable-next-line no-underscore-dangle + var _spies = arguments.length > 1 ? arguments : spies; + + return every(_spies, checkAdjacentCalls.bind(null, callMap)); +} + +module.exports = calledInOrder; diff --git a/node_modules/@sinonjs/commons/lib/called-in-order.test.js b/node_modules/@sinonjs/commons/lib/called-in-order.test.js new file mode 100644 index 00000000..5fe66118 --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/called-in-order.test.js @@ -0,0 +1,121 @@ +"use strict"; + +var assert = require("@sinonjs/referee-sinon").assert; +var calledInOrder = require("./called-in-order"); +var sinon = require("@sinonjs/referee-sinon").sinon; + +var testObject1 = { + someFunction: function () { + return; + }, +}; +var testObject2 = { + otherFunction: function () { + return; + }, +}; +var testObject3 = { + thirdFunction: function () { + return; + }, +}; + +function testMethod() { + testObject1.someFunction(); + testObject2.otherFunction(); + testObject2.otherFunction(); + testObject2.otherFunction(); + testObject3.thirdFunction(); +} + +describe("calledInOrder", function () { + beforeEach(function () { + sinon.stub(testObject1, "someFunction"); + sinon.stub(testObject2, "otherFunction"); + sinon.stub(testObject3, "thirdFunction"); + testMethod(); + }); + afterEach(function () { + testObject1.someFunction.restore(); + testObject2.otherFunction.restore(); + testObject3.thirdFunction.restore(); + }); + + describe("given single array argument", function () { + describe("when stubs were called in expected order", function () { + it("returns true", function () { + assert.isTrue( + calledInOrder([ + testObject1.someFunction, + testObject2.otherFunction, + ]) + ); + assert.isTrue( + calledInOrder([ + testObject1.someFunction, + testObject2.otherFunction, + testObject2.otherFunction, + testObject3.thirdFunction, + ]) + ); + }); + }); + + describe("when stubs were called in unexpected order", function () { + it("returns false", function () { + assert.isFalse( + calledInOrder([ + testObject2.otherFunction, + testObject1.someFunction, + ]) + ); + assert.isFalse( + calledInOrder([ + testObject2.otherFunction, + testObject1.someFunction, + testObject1.someFunction, + testObject3.thirdFunction, + ]) + ); + }); + }); + }); + + describe("given multiple arguments", function () { + describe("when stubs were called in expected order", function () { + it("returns true", function () { + assert.isTrue( + calledInOrder( + testObject1.someFunction, + testObject2.otherFunction + ) + ); + assert.isTrue( + calledInOrder( + testObject1.someFunction, + testObject2.otherFunction, + testObject3.thirdFunction + ) + ); + }); + }); + + describe("when stubs were called in unexpected order", function () { + it("returns false", function () { + assert.isFalse( + calledInOrder( + testObject2.otherFunction, + testObject1.someFunction + ) + ); + assert.isFalse( + calledInOrder( + testObject2.otherFunction, + testObject1.someFunction, + testObject3.thirdFunction + ) + ); + }); + }); + }); +}); diff --git a/node_modules/@sinonjs/commons/lib/class-name.js b/node_modules/@sinonjs/commons/lib/class-name.js new file mode 100644 index 00000000..a125e53d --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/class-name.js @@ -0,0 +1,13 @@ +"use strict"; + +/** + * Returns a display name for a value from a constructor + * @param {object} value A value to examine + * @returns {(string|null)} A string or null + */ +function className(value) { + const name = value.constructor && value.constructor.name; + return name || null; +} + +module.exports = className; diff --git a/node_modules/@sinonjs/commons/lib/class-name.test.js b/node_modules/@sinonjs/commons/lib/class-name.test.js new file mode 100644 index 00000000..994f21b8 --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/class-name.test.js @@ -0,0 +1,37 @@ +"use strict"; +/* eslint-disable no-empty-function */ + +var assert = require("@sinonjs/referee").assert; +var className = require("./class-name"); + +describe("className", function () { + it("returns the class name of an instance", function () { + // Because eslint-config-sinon disables es6, we can't + // use a class definition here + // https://github.com/sinonjs/eslint-config-sinon/blob/master/index.js + // var instance = new (class TestClass {})(); + var instance = new (function TestClass() {})(); + var name = className(instance); + assert.equals(name, "TestClass"); + }); + + it("returns 'Object' for {}", function () { + var name = className({}); + assert.equals(name, "Object"); + }); + + it("returns null for an object that has no prototype", function () { + var obj = Object.create(null); + var name = className(obj); + assert.equals(name, null); + }); + + it("returns null for an object whose prototype was mangled", function () { + // This is what Node v6 and v7 do for objects returned by querystring.parse() + function MangledObject() {} + MangledObject.prototype = Object.create(null); + var obj = new MangledObject(); + var name = className(obj); + assert.equals(name, null); + }); +}); diff --git a/node_modules/@sinonjs/commons/lib/deprecated.js b/node_modules/@sinonjs/commons/lib/deprecated.js new file mode 100644 index 00000000..9957f79c --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/deprecated.js @@ -0,0 +1,48 @@ +/* eslint-disable no-console */ +"use strict"; + +/** + * Returns a function that will invoke the supplied function and print a + * deprecation warning to the console each time it is called. + * @param {Function} func + * @param {string} msg + * @returns {Function} + */ +exports.wrap = function (func, msg) { + var wrapped = function () { + exports.printWarning(msg); + return func.apply(this, arguments); + }; + if (func.prototype) { + wrapped.prototype = func.prototype; + } + return wrapped; +}; + +/** + * Returns a string which can be supplied to `wrap()` to notify the user that a + * particular part of the sinon API has been deprecated. + * @param {string} packageName + * @param {string} funcName + * @returns {string} + */ +exports.defaultMsg = function (packageName, funcName) { + return `${packageName}.${funcName} is deprecated and will be removed from the public API in a future version of ${packageName}.`; +}; + +/** + * Prints a warning on the console, when it exists + * @param {string} msg + * @returns {undefined} + */ +exports.printWarning = function (msg) { + /* istanbul ignore next */ + if (typeof process === "object" && process.emitWarning) { + // Emit Warnings in Node + process.emitWarning(msg); + } else if (console.info) { + console.info(msg); + } else { + console.log(msg); + } +}; diff --git a/node_modules/@sinonjs/commons/lib/deprecated.test.js b/node_modules/@sinonjs/commons/lib/deprecated.test.js new file mode 100644 index 00000000..275d8b1c --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/deprecated.test.js @@ -0,0 +1,101 @@ +/* eslint-disable no-console */ +"use strict"; + +var assert = require("@sinonjs/referee-sinon").assert; +var sinon = require("@sinonjs/referee-sinon").sinon; + +var deprecated = require("./deprecated"); + +var msg = "test"; + +describe("deprecated", function () { + describe("defaultMsg", function () { + it("should return a string", function () { + assert.equals( + deprecated.defaultMsg("sinon", "someFunc"), + "sinon.someFunc is deprecated and will be removed from the public API in a future version of sinon." + ); + }); + }); + + describe("printWarning", function () { + beforeEach(function () { + sinon.replace(process, "emitWarning", sinon.fake()); + }); + + afterEach(sinon.restore); + + describe("when `process.emitWarning` is defined", function () { + it("should call process.emitWarning with a msg", function () { + deprecated.printWarning(msg); + assert.calledOnceWith(process.emitWarning, msg); + }); + }); + + describe("when `process.emitWarning` is undefined", function () { + beforeEach(function () { + sinon.replace(console, "info", sinon.fake()); + sinon.replace(console, "log", sinon.fake()); + process.emitWarning = undefined; + }); + + afterEach(sinon.restore); + + describe("when `console.info` is defined", function () { + it("should call `console.info` with a message", function () { + deprecated.printWarning(msg); + assert.calledOnceWith(console.info, msg); + }); + }); + + describe("when `console.info` is undefined", function () { + it("should call `console.log` with a message", function () { + console.info = undefined; + deprecated.printWarning(msg); + assert.calledOnceWith(console.log, msg); + }); + }); + }); + }); + + describe("wrap", function () { + // eslint-disable-next-line mocha/no-setup-in-describe + var method = sinon.fake(); + var wrapped; + + beforeEach(function () { + wrapped = deprecated.wrap(method, msg); + }); + + it("should return a wrapper function", function () { + assert.match(wrapped, sinon.match.func); + }); + + it("should assign the prototype of the passed method", function () { + assert.equals(method.prototype, wrapped.prototype); + }); + + context("when the passed method has falsy prototype", function () { + it("should not be assigned to the wrapped method", function () { + method.prototype = null; + wrapped = deprecated.wrap(method, msg); + assert.match(wrapped.prototype, sinon.match.object); + }); + }); + + context("when invoking the wrapped function", function () { + before(function () { + sinon.replace(deprecated, "printWarning", sinon.fake()); + wrapped({}); + }); + + it("should call `printWarning` before invoking", function () { + assert.calledOnceWith(deprecated.printWarning, msg); + }); + + it("should invoke the passed method with the given arguments", function () { + assert.calledOnceWith(method, {}); + }); + }); + }); +}); diff --git a/node_modules/@sinonjs/commons/lib/every.js b/node_modules/@sinonjs/commons/lib/every.js new file mode 100644 index 00000000..91b8419a --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/every.js @@ -0,0 +1,26 @@ +"use strict"; + +/** + * Returns true when fn returns true for all members of obj. + * This is an every implementation that works for all iterables + * @param {object} obj + * @param {Function} fn + * @returns {boolean} + */ +module.exports = function every(obj, fn) { + var pass = true; + + try { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + obj.forEach(function () { + if (!fn.apply(this, arguments)) { + // Throwing an error is the only way to break `forEach` + throw new Error(); + } + }); + } catch (e) { + pass = false; + } + + return pass; +}; diff --git a/node_modules/@sinonjs/commons/lib/every.test.js b/node_modules/@sinonjs/commons/lib/every.test.js new file mode 100644 index 00000000..e054a14d --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/every.test.js @@ -0,0 +1,41 @@ +"use strict"; + +var assert = require("@sinonjs/referee-sinon").assert; +var sinon = require("@sinonjs/referee-sinon").sinon; +var every = require("./every"); + +describe("util/core/every", function () { + it("returns true when the callback function returns true for every element in an iterable", function () { + var obj = [true, true, true, true]; + var allTrue = every(obj, function (val) { + return val; + }); + + assert(allTrue); + }); + + it("returns false when the callback function returns false for any element in an iterable", function () { + var obj = [true, true, true, false]; + var result = every(obj, function (val) { + return val; + }); + + assert.isFalse(result); + }); + + it("calls the given callback once for each item in an iterable until it returns false", function () { + var iterableOne = [true, true, true, true]; + var iterableTwo = [true, true, false, true]; + var callback = sinon.spy(function (val) { + return val; + }); + + every(iterableOne, callback); + assert.equals(callback.callCount, 4); + + callback.resetHistory(); + + every(iterableTwo, callback); + assert.equals(callback.callCount, 3); + }); +}); diff --git a/node_modules/@sinonjs/commons/lib/function-name.js b/node_modules/@sinonjs/commons/lib/function-name.js new file mode 100644 index 00000000..2ecf981d --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/function-name.js @@ -0,0 +1,28 @@ +"use strict"; + +/** + * Returns a display name for a function + * @param {Function} func + * @returns {string} + */ +module.exports = function functionName(func) { + if (!func) { + return ""; + } + + try { + return ( + func.displayName || + func.name || + // Use function decomposition as a last resort to get function + // name. Does not rely on function decomposition to work - if it + // doesn't debugging will be slightly less informative + // (i.e. toString will say 'spy' rather than 'myFunc'). + (String(func).match(/function ([^\s(]+)/) || [])[1] + ); + } catch (e) { + // Stringify may fail and we might get an exception, as a last-last + // resort fall back to empty string. + return ""; + } +}; diff --git a/node_modules/@sinonjs/commons/lib/function-name.test.js b/node_modules/@sinonjs/commons/lib/function-name.test.js new file mode 100644 index 00000000..0798b4e7 --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/function-name.test.js @@ -0,0 +1,76 @@ +"use strict"; + +var jsc = require("jsverify"); +var refute = require("@sinonjs/referee-sinon").refute; + +var functionName = require("./function-name"); + +describe("function-name", function () { + it("should return empty string if func is falsy", function () { + jsc.assertForall("falsy", function (fn) { + return functionName(fn) === ""; + }); + }); + + it("should use displayName by default", function () { + jsc.assertForall("nestring", function (displayName) { + var fn = { displayName: displayName }; + + return functionName(fn) === fn.displayName; + }); + }); + + it("should use name if displayName is not available", function () { + jsc.assertForall("nestring", function (name) { + var fn = { name: name }; + + return functionName(fn) === fn.name; + }); + }); + + it("should fallback to string parsing", function () { + jsc.assertForall("nat", function (naturalNumber) { + var name = `fn${naturalNumber}`; + var fn = { + toString: function () { + return `\nfunction ${name}`; + }, + }; + + return functionName(fn) === name; + }); + }); + + it("should not fail when a name cannot be found", function () { + refute.exception(function () { + var fn = { + toString: function () { + return "\nfunction ("; + }, + }; + + functionName(fn); + }); + }); + + it("should not fail when toString is undefined", function () { + refute.exception(function () { + functionName(Object.create(null)); + }); + }); + + it("should not fail when toString throws", function () { + refute.exception(function () { + var fn; + try { + // eslint-disable-next-line no-eval + fn = eval("(function*() {})")().constructor; + } catch (e) { + // env doesn't support generators + return; + } + + functionName(fn); + }); + }); +}); diff --git a/node_modules/@sinonjs/commons/lib/global.js b/node_modules/@sinonjs/commons/lib/global.js new file mode 100644 index 00000000..ac5edb3f --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/global.js @@ -0,0 +1,21 @@ +"use strict"; + +/** + * A reference to the global object + * @type {object} globalObject + */ +var globalObject; + +/* istanbul ignore else */ +if (typeof global !== "undefined") { + // Node + globalObject = global; +} else if (typeof window !== "undefined") { + // Browser + globalObject = window; +} else { + // WebWorker + globalObject = self; +} + +module.exports = globalObject; diff --git a/node_modules/@sinonjs/commons/lib/global.test.js b/node_modules/@sinonjs/commons/lib/global.test.js new file mode 100644 index 00000000..4fa73ebc --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/global.test.js @@ -0,0 +1,16 @@ +"use strict"; + +var assert = require("@sinonjs/referee-sinon").assert; +var globalObject = require("./global"); + +describe("global", function () { + before(function () { + if (typeof global === "undefined") { + this.skip(); + } + }); + + it("is same as global", function () { + assert.same(globalObject, global); + }); +}); diff --git a/node_modules/@sinonjs/commons/lib/index.js b/node_modules/@sinonjs/commons/lib/index.js new file mode 100644 index 00000000..870df32c --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/index.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = { + global: require("./global"), + calledInOrder: require("./called-in-order"), + className: require("./class-name"), + deprecated: require("./deprecated"), + every: require("./every"), + functionName: require("./function-name"), + orderByFirstCall: require("./order-by-first-call"), + prototypes: require("./prototypes"), + typeOf: require("./type-of"), + valueToString: require("./value-to-string"), +}; diff --git a/node_modules/@sinonjs/commons/lib/index.test.js b/node_modules/@sinonjs/commons/lib/index.test.js new file mode 100644 index 00000000..e79aa7ee --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/index.test.js @@ -0,0 +1,31 @@ +"use strict"; + +var assert = require("@sinonjs/referee-sinon").assert; +var index = require("./index"); + +var expectedMethods = [ + "calledInOrder", + "className", + "every", + "functionName", + "orderByFirstCall", + "typeOf", + "valueToString", +]; +var expectedObjectProperties = ["deprecated", "prototypes"]; + +describe("package", function () { + // eslint-disable-next-line mocha/no-setup-in-describe + expectedMethods.forEach(function (name) { + it(`should export a method named ${name}`, function () { + assert.isFunction(index[name]); + }); + }); + + // eslint-disable-next-line mocha/no-setup-in-describe + expectedObjectProperties.forEach(function (name) { + it(`should export an object property named ${name}`, function () { + assert.isObject(index[name]); + }); + }); +}); diff --git a/node_modules/@sinonjs/commons/lib/order-by-first-call.js b/node_modules/@sinonjs/commons/lib/order-by-first-call.js new file mode 100644 index 00000000..26826cbd --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/order-by-first-call.js @@ -0,0 +1,34 @@ +"use strict"; + +var sort = require("./prototypes/array").sort; +var slice = require("./prototypes/array").slice; + +/** + * @private + */ +function comparator(a, b) { + // uuid, won't ever be equal + var aCall = a.getCall(0); + var bCall = b.getCall(0); + var aId = (aCall && aCall.callId) || -1; + var bId = (bCall && bCall.callId) || -1; + + return aId < bId ? -1 : 1; +} + +/** + * A Sinon proxy object (fake, spy, stub) + * @typedef {object} SinonProxy + * @property {Function} getCall - A method that can return the first call + */ + +/** + * Sorts an array of SinonProxy instances (fake, spy, stub) by their first call + * @param {SinonProxy[] | SinonProxy} spies + * @returns {SinonProxy[]} + */ +function orderByFirstCall(spies) { + return sort(slice(spies), comparator); +} + +module.exports = orderByFirstCall; diff --git a/node_modules/@sinonjs/commons/lib/order-by-first-call.test.js b/node_modules/@sinonjs/commons/lib/order-by-first-call.test.js new file mode 100644 index 00000000..cbc71beb --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/order-by-first-call.test.js @@ -0,0 +1,52 @@ +"use strict"; + +var assert = require("@sinonjs/referee-sinon").assert; +var knuthShuffle = require("knuth-shuffle").knuthShuffle; +var sinon = require("@sinonjs/referee-sinon").sinon; +var orderByFirstCall = require("./order-by-first-call"); + +describe("orderByFirstCall", function () { + it("should order an Array of spies by the callId of the first call, ascending", function () { + // create an array of spies + var spies = [ + sinon.spy(), + sinon.spy(), + sinon.spy(), + sinon.spy(), + sinon.spy(), + sinon.spy(), + ]; + + // call all the spies + spies.forEach(function (spy) { + spy(); + }); + + // add a few uncalled spies + spies.push(sinon.spy()); + spies.push(sinon.spy()); + + // randomise the order of the spies + knuthShuffle(spies); + + var sortedSpies = orderByFirstCall(spies); + + assert.equals(sortedSpies.length, spies.length); + + var orderedByFirstCall = sortedSpies.every(function (spy, index) { + if (index + 1 === sortedSpies.length) { + return true; + } + var nextSpy = sortedSpies[index + 1]; + + // uncalled spies should be ordered first + if (!spy.called) { + return true; + } + + return spy.calledImmediatelyBefore(nextSpy); + }); + + assert.isTrue(orderedByFirstCall); + }); +}); diff --git a/node_modules/@sinonjs/commons/lib/prototypes/README.md b/node_modules/@sinonjs/commons/lib/prototypes/README.md new file mode 100644 index 00000000..c3d92fe8 --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/prototypes/README.md @@ -0,0 +1,43 @@ +# Prototypes + +The functions in this folder are to be use for keeping cached references to the built-in prototypes, so that people can't inadvertently break the library by making mistakes in userland. + +See https://github.com/sinonjs/sinon/pull/1523 + +## Without cached references + +```js +// in userland, the library user needs to replace the filter method on +// Array.prototype +var array = [1, 2, 3]; +sinon.replace(array, "filter", sinon.fake.returns(2)); + +// in a sinon module, the library author needs to use the filter method +var someArray = ["a", "b", 42, "c"]; +var answer = filter(someArray, function (v) { + return v === 42; +}); + +console.log(answer); +// => 2 +``` + +## With cached references + +```js +// in userland, the library user needs to replace the filter method on +// Array.prototype +var array = [1, 2, 3]; +sinon.replace(array, "filter", sinon.fake.returns(2)); + +// in a sinon module, the library author needs to use the filter method +// get a reference to the original Array.prototype.filter +var filter = require("@sinonjs/commons").prototypes.array.filter; +var someArray = ["a", "b", 42, "c"]; +var answer = filter(someArray, function (v) { + return v === 42; +}); + +console.log(answer); +// => 42 +``` diff --git a/node_modules/@sinonjs/commons/lib/prototypes/array.js b/node_modules/@sinonjs/commons/lib/prototypes/array.js new file mode 100644 index 00000000..381a032a --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/prototypes/array.js @@ -0,0 +1,5 @@ +"use strict"; + +var copyPrototype = require("./copy-prototype-methods"); + +module.exports = copyPrototype(Array.prototype); diff --git a/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.js b/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.js new file mode 100644 index 00000000..38549c19 --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.js @@ -0,0 +1,40 @@ +"use strict"; + +var call = Function.call; +var throwsOnProto = require("./throws-on-proto"); + +var disallowedProperties = [ + // ignore size because it throws from Map + "size", + "caller", + "callee", + "arguments", +]; + +// This branch is covered when tests are run with `--disable-proto=throw`, +// however we can test both branches at the same time, so this is ignored +/* istanbul ignore next */ +if (throwsOnProto) { + disallowedProperties.push("__proto__"); +} + +module.exports = function copyPrototypeMethods(prototype) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + return Object.getOwnPropertyNames(prototype).reduce(function ( + result, + name + ) { + if (disallowedProperties.includes(name)) { + return result; + } + + if (typeof prototype[name] !== "function") { + return result; + } + + result[name] = call.bind(prototype[name]); + + return result; + }, + Object.create(null)); +}; diff --git a/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.test.js b/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.test.js new file mode 100644 index 00000000..31de7cd3 --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.test.js @@ -0,0 +1,12 @@ +"use strict"; + +var refute = require("@sinonjs/referee-sinon").refute; +var copyPrototypeMethods = require("./copy-prototype-methods"); + +describe("copyPrototypeMethods", function () { + it("does not throw for Map", function () { + refute.exception(function () { + copyPrototypeMethods(Map.prototype); + }); + }); +}); diff --git a/node_modules/@sinonjs/commons/lib/prototypes/function.js b/node_modules/@sinonjs/commons/lib/prototypes/function.js new file mode 100644 index 00000000..a75c25d8 --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/prototypes/function.js @@ -0,0 +1,5 @@ +"use strict"; + +var copyPrototype = require("./copy-prototype-methods"); + +module.exports = copyPrototype(Function.prototype); diff --git a/node_modules/@sinonjs/commons/lib/prototypes/index.js b/node_modules/@sinonjs/commons/lib/prototypes/index.js new file mode 100644 index 00000000..ab766bf8 --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/prototypes/index.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + array: require("./array"), + function: require("./function"), + map: require("./map"), + object: require("./object"), + set: require("./set"), + string: require("./string"), +}; diff --git a/node_modules/@sinonjs/commons/lib/prototypes/index.test.js b/node_modules/@sinonjs/commons/lib/prototypes/index.test.js new file mode 100644 index 00000000..2b3c2625 --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/prototypes/index.test.js @@ -0,0 +1,61 @@ +"use strict"; + +var assert = require("@sinonjs/referee-sinon").assert; + +var arrayProto = require("./index").array; +var functionProto = require("./index").function; +var mapProto = require("./index").map; +var objectProto = require("./index").object; +var setProto = require("./index").set; +var stringProto = require("./index").string; +var throwsOnProto = require("./throws-on-proto"); + +describe("prototypes", function () { + describe(".array", function () { + // eslint-disable-next-line mocha/no-setup-in-describe + verifyProperties(arrayProto, Array); + }); + describe(".function", function () { + // eslint-disable-next-line mocha/no-setup-in-describe + verifyProperties(functionProto, Function); + }); + describe(".map", function () { + // eslint-disable-next-line mocha/no-setup-in-describe + verifyProperties(mapProto, Map); + }); + describe(".object", function () { + // eslint-disable-next-line mocha/no-setup-in-describe + verifyProperties(objectProto, Object); + }); + describe(".set", function () { + // eslint-disable-next-line mocha/no-setup-in-describe + verifyProperties(setProto, Set); + }); + describe(".string", function () { + // eslint-disable-next-line mocha/no-setup-in-describe + verifyProperties(stringProto, String); + }); +}); + +function verifyProperties(p, origin) { + var disallowedProperties = ["size", "caller", "callee", "arguments"]; + if (throwsOnProto) { + disallowedProperties.push("__proto__"); + } + + it("should have all the methods of the origin prototype", function () { + var methodNames = Object.getOwnPropertyNames(origin.prototype).filter( + function (name) { + if (disallowedProperties.includes(name)) { + return false; + } + + return typeof origin.prototype[name] === "function"; + } + ); + + methodNames.forEach(function (name) { + assert.isTrue(Object.prototype.hasOwnProperty.call(p, name), name); + }); + }); +} diff --git a/node_modules/@sinonjs/commons/lib/prototypes/map.js b/node_modules/@sinonjs/commons/lib/prototypes/map.js new file mode 100644 index 00000000..91ec65e2 --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/prototypes/map.js @@ -0,0 +1,5 @@ +"use strict"; + +var copyPrototype = require("./copy-prototype-methods"); + +module.exports = copyPrototype(Map.prototype); diff --git a/node_modules/@sinonjs/commons/lib/prototypes/object.js b/node_modules/@sinonjs/commons/lib/prototypes/object.js new file mode 100644 index 00000000..eab7faa8 --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/prototypes/object.js @@ -0,0 +1,5 @@ +"use strict"; + +var copyPrototype = require("./copy-prototype-methods"); + +module.exports = copyPrototype(Object.prototype); diff --git a/node_modules/@sinonjs/commons/lib/prototypes/set.js b/node_modules/@sinonjs/commons/lib/prototypes/set.js new file mode 100644 index 00000000..7495c3b9 --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/prototypes/set.js @@ -0,0 +1,5 @@ +"use strict"; + +var copyPrototype = require("./copy-prototype-methods"); + +module.exports = copyPrototype(Set.prototype); diff --git a/node_modules/@sinonjs/commons/lib/prototypes/string.js b/node_modules/@sinonjs/commons/lib/prototypes/string.js new file mode 100644 index 00000000..3917fe9b --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/prototypes/string.js @@ -0,0 +1,5 @@ +"use strict"; + +var copyPrototype = require("./copy-prototype-methods"); + +module.exports = copyPrototype(String.prototype); diff --git a/node_modules/@sinonjs/commons/lib/prototypes/throws-on-proto.js b/node_modules/@sinonjs/commons/lib/prototypes/throws-on-proto.js new file mode 100644 index 00000000..d77ab4a6 --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/prototypes/throws-on-proto.js @@ -0,0 +1,24 @@ +"use strict"; + +/** + * Is true when the environment causes an error to be thrown for accessing the + * __proto__ property. + * This is necessary in order to support `node --disable-proto=throw`. + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto + * @type {boolean} + */ +let throwsOnProto; +try { + const object = {}; + // eslint-disable-next-line no-proto, no-unused-expressions + object.__proto__; + throwsOnProto = false; +} catch (_) { + // This branch is covered when tests are run with `--disable-proto=throw`, + // however we can test both branches at the same time, so this is ignored + /* istanbul ignore next */ + throwsOnProto = true; +} + +module.exports = throwsOnProto; diff --git a/node_modules/@sinonjs/commons/lib/type-of.js b/node_modules/@sinonjs/commons/lib/type-of.js new file mode 100644 index 00000000..40b92151 --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/type-of.js @@ -0,0 +1,12 @@ +"use strict"; + +var type = require("type-detect"); + +/** + * Returns the lower-case result of running type from type-detect on the value + * @param {*} value + * @returns {string} + */ +module.exports = function typeOf(value) { + return type(value).toLowerCase(); +}; diff --git a/node_modules/@sinonjs/commons/lib/type-of.test.js b/node_modules/@sinonjs/commons/lib/type-of.test.js new file mode 100644 index 00000000..ba377b94 --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/type-of.test.js @@ -0,0 +1,51 @@ +"use strict"; + +var assert = require("@sinonjs/referee-sinon").assert; +var typeOf = require("./type-of"); + +describe("typeOf", function () { + it("returns boolean", function () { + assert.equals(typeOf(false), "boolean"); + }); + + it("returns string", function () { + assert.equals(typeOf("Sinon.JS"), "string"); + }); + + it("returns number", function () { + assert.equals(typeOf(123), "number"); + }); + + it("returns object", function () { + assert.equals(typeOf({}), "object"); + }); + + it("returns function", function () { + assert.equals( + typeOf(function () { + return undefined; + }), + "function" + ); + }); + + it("returns undefined", function () { + assert.equals(typeOf(undefined), "undefined"); + }); + + it("returns null", function () { + assert.equals(typeOf(null), "null"); + }); + + it("returns array", function () { + assert.equals(typeOf([]), "array"); + }); + + it("returns regexp", function () { + assert.equals(typeOf(/.*/), "regexp"); + }); + + it("returns date", function () { + assert.equals(typeOf(new Date()), "date"); + }); +}); diff --git a/node_modules/@sinonjs/commons/lib/value-to-string.js b/node_modules/@sinonjs/commons/lib/value-to-string.js new file mode 100644 index 00000000..303f6571 --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/value-to-string.js @@ -0,0 +1,16 @@ +"use strict"; + +/** + * Returns a string representation of the value + * @param {*} value + * @returns {string} + */ +function valueToString(value) { + if (value && value.toString) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + return value.toString(); + } + return String(value); +} + +module.exports = valueToString; diff --git a/node_modules/@sinonjs/commons/lib/value-to-string.test.js b/node_modules/@sinonjs/commons/lib/value-to-string.test.js new file mode 100644 index 00000000..64564471 --- /dev/null +++ b/node_modules/@sinonjs/commons/lib/value-to-string.test.js @@ -0,0 +1,20 @@ +"use strict"; + +var assert = require("@sinonjs/referee-sinon").assert; +var valueToString = require("./value-to-string"); + +describe("util/core/valueToString", function () { + it("returns string representation of an object", function () { + var obj = {}; + + assert.equals(valueToString(obj), obj.toString()); + }); + + it("returns 'null' for literal null'", function () { + assert.equals(valueToString(null), "null"); + }); + + it("returns 'undefined' for literal undefined", function () { + assert.equals(valueToString(undefined), "undefined"); + }); +}); diff --git a/node_modules/@sinonjs/commons/package.json b/node_modules/@sinonjs/commons/package.json new file mode 100644 index 00000000..97610454 --- /dev/null +++ b/node_modules/@sinonjs/commons/package.json @@ -0,0 +1,57 @@ +{ + "name": "@sinonjs/commons", + "version": "3.0.1", + "description": "Simple functions shared among the sinon end user libraries", + "main": "lib/index.js", + "types": "./types/index.d.ts", + "scripts": { + "build": "rm -rf types && tsc", + "lint": "eslint .", + "precommit": "lint-staged", + "test": "mocha --recursive -R dot \"lib/**/*.test.js\"", + "test-check-coverage": "npm run test-coverage && nyc check-coverage --branches 100 --functions 100 --lines 100", + "test-coverage": "nyc --reporter text --reporter html --reporter lcovonly npm run test", + "prepublishOnly": "npm run build", + "prettier:check": "prettier --check '**/*.{js,css,md}'", + "prettier:write": "prettier --write '**/*.{js,css,md}'", + "preversion": "npm run test-check-coverage", + "version": "changes --commits --footer", + "postversion": "git push --follow-tags && npm publish", + "prepare": "husky install" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/sinonjs/commons.git" + }, + "files": [ + "lib", + "types" + ], + "author": "", + "license": "BSD-3-Clause", + "bugs": { + "url": "https://github.com/sinonjs/commons/issues" + }, + "homepage": "https://github.com/sinonjs/commons#readme", + "lint-staged": { + "*.{js,css,md}": "prettier --check", + "*.js": "eslint" + }, + "devDependencies": { + "@sinonjs/eslint-config": "^4.0.6", + "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.0", + "@sinonjs/referee-sinon": "^10.1.0", + "@studio/changes": "^2.2.0", + "husky": "^6.0.0", + "jsverify": "0.8.4", + "knuth-shuffle": "^1.0.8", + "lint-staged": "^13.0.3", + "mocha": "^10.1.0", + "nyc": "^15.1.0", + "prettier": "^2.7.1", + "typescript": "^4.8.4" + }, + "dependencies": { + "type-detect": "4.0.8" + } +} diff --git a/node_modules/@sinonjs/commons/types/called-in-order.d.ts b/node_modules/@sinonjs/commons/types/called-in-order.d.ts new file mode 100644 index 00000000..ad528871 --- /dev/null +++ b/node_modules/@sinonjs/commons/types/called-in-order.d.ts @@ -0,0 +1,34 @@ +export = calledInOrder; +/** + * A Sinon proxy object (fake, spy, stub) + * @typedef {object} SinonProxy + * @property {Function} calledBefore - A method that determines if this proxy was called before another one + * @property {string} id - Some id + * @property {number} callCount - Number of times this proxy has been called + */ +/** + * Returns true when the spies have been called in the order they were supplied in + * @param {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments + * @returns {boolean} true when spies are called in order, false otherwise + */ +declare function calledInOrder(spies: SinonProxy[] | SinonProxy, ...args: any[]): boolean; +declare namespace calledInOrder { + export { SinonProxy }; +} +/** + * A Sinon proxy object (fake, spy, stub) + */ +type SinonProxy = { + /** + * - A method that determines if this proxy was called before another one + */ + calledBefore: Function; + /** + * - Some id + */ + id: string; + /** + * - Number of times this proxy has been called + */ + callCount: number; +}; diff --git a/node_modules/@sinonjs/commons/types/class-name.d.ts b/node_modules/@sinonjs/commons/types/class-name.d.ts new file mode 100644 index 00000000..58d8284b --- /dev/null +++ b/node_modules/@sinonjs/commons/types/class-name.d.ts @@ -0,0 +1,7 @@ +export = className; +/** + * Returns a display name for a value from a constructor + * @param {object} value A value to examine + * @returns {(string|null)} A string or null + */ +declare function className(value: object): (string | null); diff --git a/node_modules/@sinonjs/commons/types/deprecated.d.ts b/node_modules/@sinonjs/commons/types/deprecated.d.ts new file mode 100644 index 00000000..81a35bf8 --- /dev/null +++ b/node_modules/@sinonjs/commons/types/deprecated.d.ts @@ -0,0 +1,3 @@ +export function wrap(func: Function, msg: string): Function; +export function defaultMsg(packageName: string, funcName: string): string; +export function printWarning(msg: string): undefined; diff --git a/node_modules/@sinonjs/commons/types/every.d.ts b/node_modules/@sinonjs/commons/types/every.d.ts new file mode 100644 index 00000000..bcfa64e0 --- /dev/null +++ b/node_modules/@sinonjs/commons/types/every.d.ts @@ -0,0 +1,2 @@ +declare function _exports(obj: object, fn: Function): boolean; +export = _exports; diff --git a/node_modules/@sinonjs/commons/types/function-name.d.ts b/node_modules/@sinonjs/commons/types/function-name.d.ts new file mode 100644 index 00000000..f27d519a --- /dev/null +++ b/node_modules/@sinonjs/commons/types/function-name.d.ts @@ -0,0 +1,2 @@ +declare function _exports(func: Function): string; +export = _exports; diff --git a/node_modules/@sinonjs/commons/types/global.d.ts b/node_modules/@sinonjs/commons/types/global.d.ts new file mode 100644 index 00000000..20c67841 --- /dev/null +++ b/node_modules/@sinonjs/commons/types/global.d.ts @@ -0,0 +1,6 @@ +export = globalObject; +/** + * A reference to the global object + * @type {object} globalObject + */ +declare var globalObject: object; diff --git a/node_modules/@sinonjs/commons/types/index.d.ts b/node_modules/@sinonjs/commons/types/index.d.ts new file mode 100644 index 00000000..7d675b18 --- /dev/null +++ b/node_modules/@sinonjs/commons/types/index.d.ts @@ -0,0 +1,17 @@ +export const global: any; +export const calledInOrder: typeof import("./called-in-order"); +export const className: typeof import("./class-name"); +export const deprecated: typeof import("./deprecated"); +export const every: (obj: any, fn: Function) => boolean; +export const functionName: (func: Function) => string; +export const orderByFirstCall: typeof import("./order-by-first-call"); +export const prototypes: { + array: any; + function: any; + map: any; + object: any; + set: any; + string: any; +}; +export const typeOf: (value: any) => string; +export const valueToString: typeof import("./value-to-string"); diff --git a/node_modules/@sinonjs/commons/types/order-by-first-call.d.ts b/node_modules/@sinonjs/commons/types/order-by-first-call.d.ts new file mode 100644 index 00000000..834c7a52 --- /dev/null +++ b/node_modules/@sinonjs/commons/types/order-by-first-call.d.ts @@ -0,0 +1,24 @@ +export = orderByFirstCall; +/** + * A Sinon proxy object (fake, spy, stub) + * @typedef {object} SinonProxy + * @property {Function} getCall - A method that can return the first call + */ +/** + * Sorts an array of SinonProxy instances (fake, spy, stub) by their first call + * @param {SinonProxy[] | SinonProxy} spies + * @returns {SinonProxy[]} + */ +declare function orderByFirstCall(spies: SinonProxy[] | SinonProxy): SinonProxy[]; +declare namespace orderByFirstCall { + export { SinonProxy }; +} +/** + * A Sinon proxy object (fake, spy, stub) + */ +type SinonProxy = { + /** + * - A method that can return the first call + */ + getCall: Function; +}; diff --git a/node_modules/@sinonjs/commons/types/prototypes/array.d.ts b/node_modules/@sinonjs/commons/types/prototypes/array.d.ts new file mode 100644 index 00000000..1cce6350 --- /dev/null +++ b/node_modules/@sinonjs/commons/types/prototypes/array.d.ts @@ -0,0 +1,2 @@ +declare const _exports: any; +export = _exports; diff --git a/node_modules/@sinonjs/commons/types/prototypes/copy-prototype-methods.d.ts b/node_modules/@sinonjs/commons/types/prototypes/copy-prototype-methods.d.ts new file mode 100644 index 00000000..1479b93c --- /dev/null +++ b/node_modules/@sinonjs/commons/types/prototypes/copy-prototype-methods.d.ts @@ -0,0 +1,2 @@ +declare function _exports(prototype: any): any; +export = _exports; diff --git a/node_modules/@sinonjs/commons/types/prototypes/function.d.ts b/node_modules/@sinonjs/commons/types/prototypes/function.d.ts new file mode 100644 index 00000000..1cce6350 --- /dev/null +++ b/node_modules/@sinonjs/commons/types/prototypes/function.d.ts @@ -0,0 +1,2 @@ +declare const _exports: any; +export = _exports; diff --git a/node_modules/@sinonjs/commons/types/prototypes/index.d.ts b/node_modules/@sinonjs/commons/types/prototypes/index.d.ts new file mode 100644 index 00000000..0026d6c2 --- /dev/null +++ b/node_modules/@sinonjs/commons/types/prototypes/index.d.ts @@ -0,0 +1,7 @@ +export declare const array: any; +declare const _function: any; +export { _function as function }; +export declare const map: any; +export declare const object: any; +export declare const set: any; +export declare const string: any; diff --git a/node_modules/@sinonjs/commons/types/prototypes/map.d.ts b/node_modules/@sinonjs/commons/types/prototypes/map.d.ts new file mode 100644 index 00000000..1cce6350 --- /dev/null +++ b/node_modules/@sinonjs/commons/types/prototypes/map.d.ts @@ -0,0 +1,2 @@ +declare const _exports: any; +export = _exports; diff --git a/node_modules/@sinonjs/commons/types/prototypes/object.d.ts b/node_modules/@sinonjs/commons/types/prototypes/object.d.ts new file mode 100644 index 00000000..1cce6350 --- /dev/null +++ b/node_modules/@sinonjs/commons/types/prototypes/object.d.ts @@ -0,0 +1,2 @@ +declare const _exports: any; +export = _exports; diff --git a/node_modules/@sinonjs/commons/types/prototypes/set.d.ts b/node_modules/@sinonjs/commons/types/prototypes/set.d.ts new file mode 100644 index 00000000..1cce6350 --- /dev/null +++ b/node_modules/@sinonjs/commons/types/prototypes/set.d.ts @@ -0,0 +1,2 @@ +declare const _exports: any; +export = _exports; diff --git a/node_modules/@sinonjs/commons/types/prototypes/string.d.ts b/node_modules/@sinonjs/commons/types/prototypes/string.d.ts new file mode 100644 index 00000000..1cce6350 --- /dev/null +++ b/node_modules/@sinonjs/commons/types/prototypes/string.d.ts @@ -0,0 +1,2 @@ +declare const _exports: any; +export = _exports; diff --git a/node_modules/@sinonjs/commons/types/prototypes/throws-on-proto.d.ts b/node_modules/@sinonjs/commons/types/prototypes/throws-on-proto.d.ts new file mode 100644 index 00000000..2ec7145c --- /dev/null +++ b/node_modules/@sinonjs/commons/types/prototypes/throws-on-proto.d.ts @@ -0,0 +1,10 @@ +export = throwsOnProto; +/** + * Is true when the environment causes an error to be thrown for accessing the + * __proto__ property. + * This is necessary in order to support `node --disable-proto=throw`. + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto + * @type {boolean} + */ +declare let throwsOnProto: boolean; diff --git a/node_modules/@sinonjs/commons/types/type-of.d.ts b/node_modules/@sinonjs/commons/types/type-of.d.ts new file mode 100644 index 00000000..fc72887c --- /dev/null +++ b/node_modules/@sinonjs/commons/types/type-of.d.ts @@ -0,0 +1,2 @@ +declare function _exports(value: any): string; +export = _exports; diff --git a/node_modules/@sinonjs/commons/types/value-to-string.d.ts b/node_modules/@sinonjs/commons/types/value-to-string.d.ts new file mode 100644 index 00000000..827caf81 --- /dev/null +++ b/node_modules/@sinonjs/commons/types/value-to-string.d.ts @@ -0,0 +1,7 @@ +export = valueToString; +/** + * Returns a string representation of the value + * @param {*} value + * @returns {string} + */ +declare function valueToString(value: any): string; diff --git a/node_modules/@sinonjs/fake-timers/LICENSE b/node_modules/@sinonjs/fake-timers/LICENSE new file mode 100644 index 00000000..eb84755e --- /dev/null +++ b/node_modules/@sinonjs/fake-timers/LICENSE @@ -0,0 +1,11 @@ +Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. 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. + +3. 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. \ No newline at end of file diff --git a/node_modules/@sinonjs/fake-timers/README.md b/node_modules/@sinonjs/fake-timers/README.md new file mode 100644 index 00000000..049f0672 --- /dev/null +++ b/node_modules/@sinonjs/fake-timers/README.md @@ -0,0 +1,358 @@ +# `@sinonjs/fake-timers` + +[![codecov](https://codecov.io/gh/sinonjs/fake-timers/branch/main/graph/badge.svg)](https://codecov.io/gh/sinonjs/fake-timers) +Contributor Covenant + +JavaScript implementation of the timer APIs; `setTimeout`, `clearTimeout`, `setImmediate`, `clearImmediate`, `setInterval`, `clearInterval`, `requestAnimationFrame`, `cancelAnimationFrame`, `requestIdleCallback`, and `cancelIdleCallback`, along with a clock instance that controls the flow of time. FakeTimers also provides a `Date` implementation that gets its time from the clock. + +In addition in browser environment `@sinonjs/fake-timers` provides a `performance` implementation that gets its time from the clock. In Node environments FakeTimers provides a `nextTick` implementation that is synchronized with the clock - and a `process.hrtime` shim that works with the clock. + +`@sinonjs/fake-timers` can be used to simulate passing time in automated tests and other +situations where you want the scheduling semantics, but don't want to actually +wait. + +`@sinonjs/fake-timers` is extracted from [Sinon.JS](https://github.com/sinonjs/sinon.js) and targets the [same runtimes](https://sinonjs.org/releases/latest/#supported-runtimes). + +## Autocomplete, IntelliSense and TypeScript definitions + +Version 7 introduced JSDoc to the codebase. This should provide autocomplete and type suggestions in supporting IDEs. If you need more elaborate type support, TypeScript definitions for the Sinon projects are independently maintained by the Definitely Types community: + +``` +npm install -D @types/sinonjs__fake-timers +``` + +## Installation + +`@sinonjs/fake-timers` can be used in both Node and browser environments. Installation is as easy as + +```sh +npm install @sinonjs/fake-timers +``` + +If you want to use `@sinonjs/fake-timers` in a browser you can either build your own bundle or use [Skypack](https://www.skypack.dev). + +## Usage + +To use `@sinonjs/fake-timers`, create a new clock, schedule events on it using the timer +functions and pass time using the `tick` method. + +```js +// In the browser distribution, a global `FakeTimers` is already available +var FakeTimers = require("@sinonjs/fake-timers"); +var clock = FakeTimers.createClock(); + +clock.setTimeout(function () { + console.log( + "The poblano is a mild chili pepper originating in the state of Puebla, Mexico." + ); +}, 15); + +// ... + +clock.tick(15); +``` + +Upon executing the last line, an interesting fact about the +[Poblano](https://en.wikipedia.org/wiki/Poblano) will be printed synchronously to +the screen. If you want to simulate asynchronous behavior, please see the `async` function variants (eg `clock.tick(time)` vs `await clock.tickAsync(time)`). + +The `next`, `runAll`, `runToFrame`, and `runToLast` methods are available to advance the clock. See the +API Reference for more details. + +### Faking the native timers + +When using `@sinonjs/fake-timers` to test timers, you will most likely want to replace the native +timers such that calling `setTimeout` actually schedules a callback with your +clock instance, not the browser's internals. + +Calling `install` with no arguments achieves this. You can call `uninstall` +later to restore things as they were again. + +```js +// In the browser distribution, a global `FakeTimers` is already available +var FakeTimers = require("@sinonjs/fake-timers"); + +var clock = FakeTimers.install(); +// Equivalent to +// var clock = FakeTimers.install(typeof global !== "undefined" ? global : window); + +setTimeout(fn, 15); // Schedules with clock.setTimeout + +clock.uninstall(); +// setTimeout is restored to the native implementation +``` + +To hijack timers in another context pass it to the `install` method. + +```js +var FakeTimers = require("@sinonjs/fake-timers"); +var context = { + setTimeout: setTimeout, // By default context.setTimeout uses the global setTimeout +}; +var clock = FakeTimers.withGlobal(context).install(); + +context.setTimeout(fn, 15); // Schedules with clock.setTimeout + +clock.uninstall(); +// context.setTimeout is restored to the original implementation +``` + +Usually you want to install the timers onto the global object, so call `install` +without arguments. + +#### Automatically incrementing mocked time + +FakeTimers supports the possibility to attach the faked timers to any change +in the real system time. This means that there is no need to `tick()` the +clock in a situation where you won't know **when** to call `tick()`. + +Please note that this is achieved using the original setImmediate() API at a certain +configurable interval `config.advanceTimeDelta` (default: 20ms). Meaning time would +be incremented every 20ms, not in real time. + +An example would be: + +```js +var FakeTimers = require("@sinonjs/fake-timers"); +var clock = FakeTimers.install({ + shouldAdvanceTime: true, + advanceTimeDelta: 40, +}); + +setTimeout(() => { + console.log("this just timed out"); //executed after 40ms +}, 30); + +setImmediate(() => { + console.log("not so immediate"); //executed after 40ms +}); + +setTimeout(() => { + console.log("this timed out after"); //executed after 80ms + clock.uninstall(); +}, 50); +``` + +## API Reference + +### `var clock = FakeTimers.createClock([now[, loopLimit]])` + +Creates a clock. The default +[epoch](https://en.wikipedia.org/wiki/Epoch_%28reference_date%29) is `0`. + +The `now` argument may be a number (in milliseconds) or a Date object. + +The `loopLimit` argument sets the maximum number of timers that will be run when calling `runAll()` before assuming that we have an infinite loop and throwing an error. The default is `1000`. + +### `var clock = FakeTimers.install([config])` + +Installs FakeTimers using the specified config (otherwise with epoch `0` on the global scope). The following configuration options are available + +| Parameter | Type | Default | Description | +| -------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config.now` | Number/Date | 0 | installs FakeTimers with the specified unix epoch | +| `config.toFake` | String[] | ["setTimeout", "clearTimeout", "setImmediate", "clearImmediate","setInterval", "clearInterval", "Date", "requestAnimationFrame", "cancelAnimationFrame", "requestIdleCallback", "cancelIdleCallback", "hrtime", "performance"] | an array with explicit function names (or objects, in the case of "performance") to hijack. _When not set, FakeTimers will automatically fake all methods **except** `nextTick`_ e.g., `FakeTimers.install({ toFake: ["setTimeout","nextTick"]})` will fake only `setTimeout` and `nextTick` | +| `config.loopLimit` | Number | 1000 | the maximum number of timers that will be run when calling runAll() | +| `config.shouldAdvanceTime` | Boolean | false | tells FakeTimers to increment mocked time automatically based on the real system time shift (e.g. the mocked time will be incremented by 20ms for every 20ms change in the real system time) | +| `config.advanceTimeDelta` | Number | 20 | relevant only when using with `shouldAdvanceTime: true`. increment mocked time by `advanceTimeDelta` ms every `advanceTimeDelta` ms change in the real system time. | +| `config.shouldClearNativeTimers` | Boolean | false | tells FakeTimers to clear 'native' (i.e. not fake) timers by delegating to their respective handlers. These are not cleared by default, leading to potentially unexpected behavior if timers existed prior to installing FakeTimers. | + +### `var id = clock.setTimeout(callback, timeout)` + +Schedules the callback to be fired once `timeout` milliseconds have ticked by. + +In Node.js `setTimeout` returns a timer object. FakeTimers will do the same, however +its `ref()` and `unref()` methods have no effect. + +In browsers a timer ID is returned. + +### `clock.clearTimeout(id)` + +Clears the timer given the ID or timer object, as long as it was created using +`setTimeout`. + +### `var id = clock.setInterval(callback, timeout)` + +Schedules the callback to be fired every time `timeout` milliseconds have ticked +by. + +In Node.js `setInterval` returns a timer object. FakeTimers will do the same, however +its `ref()` and `unref()` methods have no effect. + +In browsers a timer ID is returned. + +### `clock.clearInterval(id)` + +Clears the timer given the ID or timer object, as long as it was created using +`setInterval`. + +### `var id = clock.setImmediate(callback)` + +Schedules the callback to be fired once `0` milliseconds have ticked by. Note +that you'll still have to call `clock.tick()` for the callback to fire. If +called during a tick the callback won't fire until `1` millisecond has ticked +by. + +In Node.js `setImmediate` returns a timer object. FakeTimers will do the same, +however its `ref()` and `unref()` methods have no effect. + +In browsers a timer ID is returned. + +### `clock.clearImmediate(id)` + +Clears the timer given the ID or timer object, as long as it was created using +`setImmediate`. + +### `clock.requestAnimationFrame(callback)` + +Schedules the callback to be fired on the next animation frame, which runs every +16 ticks. Returns an `id` which can be used to cancel the callback. This is +available in both browser & node environments. + +### `clock.cancelAnimationFrame(id)` + +Cancels the callback scheduled by the provided id. + +### `clock.requestIdleCallback(callback[, timeout])` + +Queued the callback to be fired during idle periods to perform background and low priority work on the main event loop. Callbacks which have a timeout option will be fired no later than time in milliseconds. Returns an `id` which can be used to cancel the callback. + +### `clock.cancelIdleCallback(id)` + +Cancels the callback scheduled by the provided id. + +### `clock.countTimers()` + +Returns the number of waiting timers. This can be used to assert that a test +finishes without leaking any timers. + +### `clock.hrtime(prevTime?)` + +Only available in Node.js, mimicks process.hrtime(). + +### `clock.nextTick(callback)` + +Only available in Node.js, mimics `process.nextTick` to enable completely synchronous testing flows. + +### `clock.performance.now()` + +Only available in browser environments, mimicks performance.now(). + +### `clock.tick(time)` / `await clock.tickAsync(time)` + +Advance the clock, firing callbacks if necessary. `time` may be the number of +milliseconds to advance the clock by or a human-readable string. Valid string +formats are `"08"` for eight seconds, `"01:00"` for one minute and `"02:34:10"` +for two hours, 34 minutes and ten seconds. + +The `tickAsync()` will also break the event loop, allowing any scheduled promise +callbacks to execute _before_ running the timers. + +### `clock.next()` / `await clock.nextAsync()` + +Advances the clock to the the moment of the first scheduled timer, firing it. + +The `nextAsync()` will also break the event loop, allowing any scheduled promise +callbacks to execute _before_ running the timers. + +### `clock.jump(time)` + +Advance the clock by jumping forward in time, firing callbacks at most once. +`time` takes the same formats as [`clock.tick`](#clockticktime--await-clocktickasynctime). + +This can be used to simulate the JS engine (such as a browser) being put to sleep and resumed later, skipping intermediary timers. + +### `clock.reset()` + +Removes all timers and ticks without firing them, and sets `now` to `config.now` +that was provided to `FakeTimers.install` or to `0` if `config.now` was not provided. +Useful to reset the state of the clock without having to `uninstall` and `install` it. + +### `clock.runAll()` / `await clock.runAllAsync()` + +This runs all pending timers until there are none remaining. If new timers are added while it is executing they will be run as well. + +This makes it easier to run asynchronous tests to completion without worrying about the number of timers they use, or the delays in those timers. + +It runs a maximum of `loopLimit` times after which it assumes there is an infinite loop of timers and throws an error. + +The `runAllAsync()` will also break the event loop, allowing any scheduled promise +callbacks to execute _before_ running the timers. + +### `clock.runMicrotasks()` + +This runs all pending microtasks scheduled with `nextTick` but none of the timers and is mostly useful for libraries using FakeTimers underneath and for running `nextTick` items without any timers. + +### `clock.runToFrame()` + +Advances the clock to the next frame, firing all scheduled animation frame callbacks, +if any, for that frame as well as any other timers scheduled along the way. + +### `clock.runToLast()` / `await clock.runToLastAsync()` + +This takes note of the last scheduled timer when it is run, and advances the +clock to that time firing callbacks as necessary. + +If new timers are added while it is executing they will be run only if they +would occur before this time. + +This is useful when you want to run a test to completion, but the test recursively +sets timers that would cause `runAll` to trigger an infinite loop warning. + +The `runToLastAsync()` will also break the event loop, allowing any scheduled promise +callbacks to execute _before_ running the timers. + +### `clock.setSystemTime([now])` + +This simulates a user changing the system clock while your program is running. +It affects the current time but it does not in itself cause e.g. timers to fire; +they will fire exactly as they would have done without the call to +setSystemTime(). + +### `clock.uninstall()` + +Restores the original methods of the native timers or the methods on the object +that was passed to `FakeTimers.withGlobal` + +### `Date` + +Implements the `Date` object but using the clock to provide the correct time. + +### `Performance` + +Implements the `now` method of the [`Performance`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) object but using the clock to provide the correct time. Only available in environments that support the Performance object (browsers mostly). + +### `FakeTimers.withGlobal` + +In order to support creating clocks based on separate or sandboxed environments (such as JSDOM), FakeTimers exports a factory method which takes single argument `global`, which it inspects to figure out what to mock and what features to support. When invoking this function with a global, you will get back an object with `timers`, `createClock` and `install` - same as the regular FakeTimers exports only based on the passed in global instead of the global environment. + +## Running tests + +FakeTimers has a comprehensive test suite. If you're thinking of contributing bug +fixes or suggesting new features, you need to make sure you have not broken any +tests. You are also expected to add tests for any new behavior. + +### On node: + +```sh +npm test +``` + +Or, if you prefer more verbose output: + +``` +$(npm bin)/mocha ./test/fake-timers-test.js +``` + +### In the browser + +[Mochify](https://github.com/mantoni/mochify.js) is used to run the tests in +PhantomJS. Make sure you have `phantomjs` installed. Then: + +```sh +npm test-headless +``` + +## License + +BSD 3-clause "New" or "Revised" License (see LICENSE file) diff --git a/node_modules/@sinonjs/fake-timers/package.json b/node_modules/@sinonjs/fake-timers/package.json new file mode 100644 index 00000000..fdb18926 --- /dev/null +++ b/node_modules/@sinonjs/fake-timers/package.json @@ -0,0 +1,65 @@ +{ + "name": "@sinonjs/fake-timers", + "description": "Fake JavaScript timers", + "version": "10.3.0", + "homepage": "https://github.com/sinonjs/fake-timers", + "author": "Christian Johansen", + "repository": { + "type": "git", + "url": "https://github.com/sinonjs/fake-timers.git" + }, + "bugs": { + "mail": "christian@cjohansen.no", + "url": "https://github.com/sinonjs/fake-timers/issues" + }, + "license": "BSD-3-Clause", + "scripts": { + "lint": "eslint .", + "test-node": "mocha --timeout 200 test/ integration-test/ -R dot --check-leaks", + "test-headless": "mochify --no-detect-globals --timeout=10000", + "test-check-coverage": "npm run test-coverage && nyc check-coverage", + "test-cloud": "mochify --wd --no-detect-globals --timeout=10000", + "test-coverage": "nyc --all --reporter text --reporter html --reporter lcovonly npm run test-node", + "test": "npm run test-node && npm run test-headless", + "prettier:check": "prettier --check '**/*.{js,css,md}'", + "prettier:write": "prettier --write '**/*.{js,css,md}'", + "preversion": "./scripts/preversion.sh", + "version": "./scripts/version.sh", + "postversion": "./scripts/postversion.sh", + "prepare": "husky install" + }, + "lint-staged": { + "*.{js,css,md}": "prettier --check", + "*.js": "eslint" + }, + "files": [ + "src/" + ], + "devDependencies": { + "@sinonjs/eslint-config": "^4.1.0", + "@sinonjs/referee-sinon": "11.0.0", + "husky": "^8.0.3", + "jsdom": "22.0.0", + "lint-staged": "13.2.2", + "mocha": "10.2.0", + "mochify": "9.2.0", + "nyc": "15.1.0", + "prettier": "2.8.8" + }, + "main": "./src/fake-timers-src.js", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + }, + "nyc": { + "branches": 85, + "lines": 92, + "functions": 92, + "statements": 92, + "exclude": [ + "**/*-test.js", + "coverage/**", + "types/**", + "fake-timers.js" + ] + } +} diff --git a/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js b/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js new file mode 100644 index 00000000..607d91fb --- /dev/null +++ b/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js @@ -0,0 +1,1787 @@ +"use strict"; + +const globalObject = require("@sinonjs/commons").global; + +/** + * @typedef {object} IdleDeadline + * @property {boolean} didTimeout - whether or not the callback was called before reaching the optional timeout + * @property {function():number} timeRemaining - a floating-point value providing an estimate of the number of milliseconds remaining in the current idle period + */ + +/** + * Queues a function to be called during a browser's idle periods + * + * @callback RequestIdleCallback + * @param {function(IdleDeadline)} callback + * @param {{timeout: number}} options - an options object + * @returns {number} the id + */ + +/** + * @callback NextTick + * @param {VoidVarArgsFunc} callback - the callback to run + * @param {...*} arguments - optional arguments to call the callback with + * @returns {void} + */ + +/** + * @callback SetImmediate + * @param {VoidVarArgsFunc} callback - the callback to run + * @param {...*} arguments - optional arguments to call the callback with + * @returns {NodeImmediate} + */ + +/** + * @callback VoidVarArgsFunc + * @param {...*} callback - the callback to run + * @returns {void} + */ + +/** + * @typedef RequestAnimationFrame + * @property {function(number):void} requestAnimationFrame + * @returns {number} - the id + */ + +/** + * @typedef Performance + * @property {function(): number} now + */ + +/* eslint-disable jsdoc/require-property-description */ +/** + * @typedef {object} Clock + * @property {number} now - the current time + * @property {Date} Date - the Date constructor + * @property {number} loopLimit - the maximum number of timers before assuming an infinite loop + * @property {RequestIdleCallback} requestIdleCallback + * @property {function(number):void} cancelIdleCallback + * @property {setTimeout} setTimeout + * @property {clearTimeout} clearTimeout + * @property {NextTick} nextTick + * @property {queueMicrotask} queueMicrotask + * @property {setInterval} setInterval + * @property {clearInterval} clearInterval + * @property {SetImmediate} setImmediate + * @property {function(NodeImmediate):void} clearImmediate + * @property {function():number} countTimers + * @property {RequestAnimationFrame} requestAnimationFrame + * @property {function(number):void} cancelAnimationFrame + * @property {function():void} runMicrotasks + * @property {function(string | number): number} tick + * @property {function(string | number): Promise} tickAsync + * @property {function(): number} next + * @property {function(): Promise} nextAsync + * @property {function(): number} runAll + * @property {function(): number} runToFrame + * @property {function(): Promise} runAllAsync + * @property {function(): number} runToLast + * @property {function(): Promise} runToLastAsync + * @property {function(): void} reset + * @property {function(number | Date): void} setSystemTime + * @property {function(number): void} jump + * @property {Performance} performance + * @property {function(number[]): number[]} hrtime - process.hrtime (legacy) + * @property {function(): void} uninstall Uninstall the clock. + * @property {Function[]} methods - the methods that are faked + * @property {boolean} [shouldClearNativeTimers] inherited from config + */ +/* eslint-enable jsdoc/require-property-description */ + +/** + * Configuration object for the `install` method. + * + * @typedef {object} Config + * @property {number|Date} [now] a number (in milliseconds) or a Date object (default epoch) + * @property {string[]} [toFake] names of the methods that should be faked. + * @property {number} [loopLimit] the maximum number of timers that will be run when calling runAll() + * @property {boolean} [shouldAdvanceTime] tells FakeTimers to increment mocked time automatically (default false) + * @property {number} [advanceTimeDelta] increment mocked time every <> ms (default: 20ms) + * @property {boolean} [shouldClearNativeTimers] forwards clear timer calls to native functions if they are not fakes (default: false) + */ + +/* eslint-disable jsdoc/require-property-description */ +/** + * The internal structure to describe a scheduled fake timer + * + * @typedef {object} Timer + * @property {Function} func + * @property {*[]} args + * @property {number} delay + * @property {number} callAt + * @property {number} createdAt + * @property {boolean} immediate + * @property {number} id + * @property {Error} [error] + */ + +/** + * A Node timer + * + * @typedef {object} NodeImmediate + * @property {function(): boolean} hasRef + * @property {function(): NodeImmediate} ref + * @property {function(): NodeImmediate} unref + */ +/* eslint-enable jsdoc/require-property-description */ + +/* eslint-disable complexity */ + +/** + * Mocks available features in the specified global namespace. + * + * @param {*} _global Namespace to mock (e.g. `window`) + * @returns {FakeTimers} + */ +function withGlobal(_global) { + const userAgent = _global.navigator && _global.navigator.userAgent; + const isRunningInIE = userAgent && userAgent.indexOf("MSIE ") > -1; + const maxTimeout = Math.pow(2, 31) - 1; //see https://heycam.github.io/webidl/#abstract-opdef-converttoint + const idCounterStart = 1e12; // arbitrarily large number to avoid collisions with native timer IDs + const NOOP = function () { + return undefined; + }; + const NOOP_ARRAY = function () { + return []; + }; + const timeoutResult = _global.setTimeout(NOOP, 0); + const addTimerReturnsObject = typeof timeoutResult === "object"; + const hrtimePresent = + _global.process && typeof _global.process.hrtime === "function"; + const hrtimeBigintPresent = + hrtimePresent && typeof _global.process.hrtime.bigint === "function"; + const nextTickPresent = + _global.process && typeof _global.process.nextTick === "function"; + const utilPromisify = _global.process && require("util").promisify; + const performancePresent = + _global.performance && typeof _global.performance.now === "function"; + const hasPerformancePrototype = + _global.Performance && + (typeof _global.Performance).match(/^(function|object)$/); + const hasPerformanceConstructorPrototype = + _global.performance && + _global.performance.constructor && + _global.performance.constructor.prototype; + const queueMicrotaskPresent = _global.hasOwnProperty("queueMicrotask"); + const requestAnimationFramePresent = + _global.requestAnimationFrame && + typeof _global.requestAnimationFrame === "function"; + const cancelAnimationFramePresent = + _global.cancelAnimationFrame && + typeof _global.cancelAnimationFrame === "function"; + const requestIdleCallbackPresent = + _global.requestIdleCallback && + typeof _global.requestIdleCallback === "function"; + const cancelIdleCallbackPresent = + _global.cancelIdleCallback && + typeof _global.cancelIdleCallback === "function"; + const setImmediatePresent = + _global.setImmediate && typeof _global.setImmediate === "function"; + + // Make properties writable in IE, as per + // https://www.adequatelygood.com/Replacing-setTimeout-Globally.html + /* eslint-disable no-self-assign */ + if (isRunningInIE) { + _global.setTimeout = _global.setTimeout; + _global.clearTimeout = _global.clearTimeout; + _global.setInterval = _global.setInterval; + _global.clearInterval = _global.clearInterval; + _global.Date = _global.Date; + } + + // setImmediate is not a standard function + // avoid adding the prop to the window object if not present + if (setImmediatePresent) { + _global.setImmediate = _global.setImmediate; + _global.clearImmediate = _global.clearImmediate; + } + /* eslint-enable no-self-assign */ + + _global.clearTimeout(timeoutResult); + + const NativeDate = _global.Date; + let uniqueTimerId = idCounterStart; + + /** + * @param {number} num + * @returns {boolean} + */ + function isNumberFinite(num) { + if (Number.isFinite) { + return Number.isFinite(num); + } + + return isFinite(num); + } + + let isNearInfiniteLimit = false; + + /** + * @param {Clock} clock + * @param {number} i + */ + function checkIsNearInfiniteLimit(clock, i) { + if (clock.loopLimit && i === clock.loopLimit - 1) { + isNearInfiniteLimit = true; + } + } + + /** + * + */ + function resetIsNearInfiniteLimit() { + isNearInfiniteLimit = false; + } + + /** + * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into + * number of milliseconds. This is used to support human-readable strings passed + * to clock.tick() + * + * @param {string} str + * @returns {number} + */ + function parseTime(str) { + if (!str) { + return 0; + } + + const strings = str.split(":"); + const l = strings.length; + let i = l; + let ms = 0; + let parsed; + + if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { + throw new Error( + "tick only understands numbers, 'm:s' and 'h:m:s'. Each part must be two digits" + ); + } + + while (i--) { + parsed = parseInt(strings[i], 10); + + if (parsed >= 60) { + throw new Error(`Invalid time ${str}`); + } + + ms += parsed * Math.pow(60, l - i - 1); + } + + return ms * 1000; + } + + /** + * Get the decimal part of the millisecond value as nanoseconds + * + * @param {number} msFloat the number of milliseconds + * @returns {number} an integer number of nanoseconds in the range [0,1e6) + * + * Example: nanoRemainer(123.456789) -> 456789 + */ + function nanoRemainder(msFloat) { + const modulo = 1e6; + const remainder = (msFloat * 1e6) % modulo; + const positiveRemainder = + remainder < 0 ? remainder + modulo : remainder; + + return Math.floor(positiveRemainder); + } + + /** + * Used to grok the `now` parameter to createClock. + * + * @param {Date|number} epoch the system time + * @returns {number} + */ + function getEpoch(epoch) { + if (!epoch) { + return 0; + } + if (typeof epoch.getTime === "function") { + return epoch.getTime(); + } + if (typeof epoch === "number") { + return epoch; + } + throw new TypeError("now should be milliseconds since UNIX epoch"); + } + + /** + * @param {number} from + * @param {number} to + * @param {Timer} timer + * @returns {boolean} + */ + function inRange(from, to, timer) { + return timer && timer.callAt >= from && timer.callAt <= to; + } + + /** + * @param {Clock} clock + * @param {Timer} job + */ + function getInfiniteLoopError(clock, job) { + const infiniteLoopError = new Error( + `Aborting after running ${clock.loopLimit} timers, assuming an infinite loop!` + ); + + if (!job.error) { + return infiniteLoopError; + } + + // pattern never matched in Node + const computedTargetPattern = /target\.*[<|(|[].*?[>|\]|)]\s*/; + let clockMethodPattern = new RegExp( + String(Object.keys(clock).join("|")) + ); + + if (addTimerReturnsObject) { + // node.js environment + clockMethodPattern = new RegExp( + `\\s+at (Object\\.)?(?:${Object.keys(clock).join("|")})\\s+` + ); + } + + let matchedLineIndex = -1; + job.error.stack.split("\n").some(function (line, i) { + // If we've matched a computed target line (e.g. setTimeout) then we + // don't need to look any further. Return true to stop iterating. + const matchedComputedTarget = line.match(computedTargetPattern); + /* istanbul ignore if */ + if (matchedComputedTarget) { + matchedLineIndex = i; + return true; + } + + // If we've matched a clock method line, then there may still be + // others further down the trace. Return false to keep iterating. + const matchedClockMethod = line.match(clockMethodPattern); + if (matchedClockMethod) { + matchedLineIndex = i; + return false; + } + + // If we haven't matched anything on this line, but we matched + // previously and set the matched line index, then we can stop. + // If we haven't matched previously, then we should keep iterating. + return matchedLineIndex >= 0; + }); + + const stack = `${infiniteLoopError}\n${job.type || "Microtask"} - ${ + job.func.name || "anonymous" + }\n${job.error.stack + .split("\n") + .slice(matchedLineIndex + 1) + .join("\n")}`; + + try { + Object.defineProperty(infiniteLoopError, "stack", { + value: stack, + }); + } catch (e) { + // noop + } + + return infiniteLoopError; + } + + /** + * @param {Date} target + * @param {Date} source + * @returns {Date} the target after modifications + */ + function mirrorDateProperties(target, source) { + let prop; + for (prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + + // set special now implementation + if (source.now) { + target.now = function now() { + return target.clock.now; + }; + } else { + delete target.now; + } + + // set special toSource implementation + if (source.toSource) { + target.toSource = function toSource() { + return source.toSource(); + }; + } else { + delete target.toSource; + } + + // set special toString implementation + target.toString = function toString() { + return source.toString(); + }; + + target.prototype = source.prototype; + target.parse = source.parse; + target.UTC = source.UTC; + target.prototype.toUTCString = source.prototype.toUTCString; + target.isFake = true; + + return target; + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function createDate() { + /** + * @param {number} year + * @param {number} month + * @param {number} date + * @param {number} hour + * @param {number} minute + * @param {number} second + * @param {number} ms + * @returns {Date} + */ + function ClockDate(year, month, date, hour, minute, second, ms) { + // the Date constructor called as a function, ref Ecma-262 Edition 5.1, section 15.9.2. + // This remains so in the 10th edition of 2019 as well. + if (!(this instanceof ClockDate)) { + return new NativeDate(ClockDate.clock.now).toString(); + } + + // if Date is called as a constructor with 'new' keyword + // Defensive and verbose to avoid potential harm in passing + // explicit undefined when user does not pass argument + switch (arguments.length) { + case 0: + return new NativeDate(ClockDate.clock.now); + case 1: + return new NativeDate(year); + case 2: + return new NativeDate(year, month); + case 3: + return new NativeDate(year, month, date); + case 4: + return new NativeDate(year, month, date, hour); + case 5: + return new NativeDate(year, month, date, hour, minute); + case 6: + return new NativeDate( + year, + month, + date, + hour, + minute, + second + ); + default: + return new NativeDate( + year, + month, + date, + hour, + minute, + second, + ms + ); + } + } + + return mirrorDateProperties(ClockDate, NativeDate); + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function enqueueJob(clock, job) { + // enqueues a microtick-deferred task - ecma262/#sec-enqueuejob + if (!clock.jobs) { + clock.jobs = []; + } + clock.jobs.push(job); + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function runJobs(clock) { + // runs all microtick-deferred tasks - ecma262/#sec-runjobs + if (!clock.jobs) { + return; + } + for (let i = 0; i < clock.jobs.length; i++) { + const job = clock.jobs[i]; + job.func.apply(null, job.args); + + checkIsNearInfiniteLimit(clock, i); + if (clock.loopLimit && i > clock.loopLimit) { + throw getInfiniteLoopError(clock, job); + } + } + resetIsNearInfiniteLimit(); + clock.jobs = []; + } + + /** + * @param {Clock} clock + * @param {Timer} timer + * @returns {number} id of the created timer + */ + function addTimer(clock, timer) { + if (timer.func === undefined) { + throw new Error("Callback must be provided to timer calls"); + } + + if (addTimerReturnsObject) { + // Node.js environment + if (typeof timer.func !== "function") { + throw new TypeError( + `[ERR_INVALID_CALLBACK]: Callback must be a function. Received ${ + timer.func + } of type ${typeof timer.func}` + ); + } + } + + if (isNearInfiniteLimit) { + timer.error = new Error(); + } + + timer.type = timer.immediate ? "Immediate" : "Timeout"; + + if (timer.hasOwnProperty("delay")) { + if (typeof timer.delay !== "number") { + timer.delay = parseInt(timer.delay, 10); + } + + if (!isNumberFinite(timer.delay)) { + timer.delay = 0; + } + timer.delay = timer.delay > maxTimeout ? 1 : timer.delay; + timer.delay = Math.max(0, timer.delay); + } + + if (timer.hasOwnProperty("interval")) { + timer.type = "Interval"; + timer.interval = timer.interval > maxTimeout ? 1 : timer.interval; + } + + if (timer.hasOwnProperty("animation")) { + timer.type = "AnimationFrame"; + timer.animation = true; + } + + if (timer.hasOwnProperty("idleCallback")) { + timer.type = "IdleCallback"; + timer.idleCallback = true; + } + + if (!clock.timers) { + clock.timers = {}; + } + + timer.id = uniqueTimerId++; + timer.createdAt = clock.now; + timer.callAt = + clock.now + (parseInt(timer.delay) || (clock.duringTick ? 1 : 0)); + + clock.timers[timer.id] = timer; + + if (addTimerReturnsObject) { + const res = { + refed: true, + ref: function () { + this.refed = true; + return res; + }, + unref: function () { + this.refed = false; + return res; + }, + hasRef: function () { + return this.refed; + }, + refresh: function () { + timer.callAt = + clock.now + + (parseInt(timer.delay) || (clock.duringTick ? 1 : 0)); + + // it _might_ have been removed, but if not the assignment is perfectly fine + clock.timers[timer.id] = timer; + + return res; + }, + [Symbol.toPrimitive]: function () { + return timer.id; + }, + }; + return res; + } + + return timer.id; + } + + /* eslint consistent-return: "off" */ + /** + * Timer comparitor + * + * @param {Timer} a + * @param {Timer} b + * @returns {number} + */ + function compareTimers(a, b) { + // Sort first by absolute timing + if (a.callAt < b.callAt) { + return -1; + } + if (a.callAt > b.callAt) { + return 1; + } + + // Sort next by immediate, immediate timers take precedence + if (a.immediate && !b.immediate) { + return -1; + } + if (!a.immediate && b.immediate) { + return 1; + } + + // Sort next by creation time, earlier-created timers take precedence + if (a.createdAt < b.createdAt) { + return -1; + } + if (a.createdAt > b.createdAt) { + return 1; + } + + // Sort next by id, lower-id timers take precedence + if (a.id < b.id) { + return -1; + } + if (a.id > b.id) { + return 1; + } + + // As timer ids are unique, no fallback `0` is necessary + } + + /** + * @param {Clock} clock + * @param {number} from + * @param {number} to + * @returns {Timer} + */ + function firstTimerInRange(clock, from, to) { + const timers = clock.timers; + let timer = null; + let id, isInRange; + + for (id in timers) { + if (timers.hasOwnProperty(id)) { + isInRange = inRange(from, to, timers[id]); + + if ( + isInRange && + (!timer || compareTimers(timer, timers[id]) === 1) + ) { + timer = timers[id]; + } + } + } + + return timer; + } + + /** + * @param {Clock} clock + * @returns {Timer} + */ + function firstTimer(clock) { + const timers = clock.timers; + let timer = null; + let id; + + for (id in timers) { + if (timers.hasOwnProperty(id)) { + if (!timer || compareTimers(timer, timers[id]) === 1) { + timer = timers[id]; + } + } + } + + return timer; + } + + /** + * @param {Clock} clock + * @returns {Timer} + */ + function lastTimer(clock) { + const timers = clock.timers; + let timer = null; + let id; + + for (id in timers) { + if (timers.hasOwnProperty(id)) { + if (!timer || compareTimers(timer, timers[id]) === -1) { + timer = timers[id]; + } + } + } + + return timer; + } + + /** + * @param {Clock} clock + * @param {Timer} timer + */ + function callTimer(clock, timer) { + if (typeof timer.interval === "number") { + clock.timers[timer.id].callAt += timer.interval; + } else { + delete clock.timers[timer.id]; + } + + if (typeof timer.func === "function") { + timer.func.apply(null, timer.args); + } else { + /* eslint no-eval: "off" */ + const eval2 = eval; + (function () { + eval2(timer.func); + })(); + } + } + + /** + * Gets clear handler name for a given timer type + * + * @param {string} ttype + */ + function getClearHandler(ttype) { + if (ttype === "IdleCallback" || ttype === "AnimationFrame") { + return `cancel${ttype}`; + } + return `clear${ttype}`; + } + + /** + * Gets schedule handler name for a given timer type + * + * @param {string} ttype + */ + function getScheduleHandler(ttype) { + if (ttype === "IdleCallback" || ttype === "AnimationFrame") { + return `request${ttype}`; + } + return `set${ttype}`; + } + + /** + * Creates an anonymous function to warn only once + */ + function createWarnOnce() { + let calls = 0; + return function (msg) { + // eslint-disable-next-line + !calls++ && console.warn(msg); + }; + } + const warnOnce = createWarnOnce(); + + /** + * @param {Clock} clock + * @param {number} timerId + * @param {string} ttype + */ + function clearTimer(clock, timerId, ttype) { + if (!timerId) { + // null appears to be allowed in most browsers, and appears to be + // relied upon by some libraries, like Bootstrap carousel + return; + } + + if (!clock.timers) { + clock.timers = {}; + } + + // in Node, the ID is stored as the primitive value for `Timeout` objects + // for `Immediate` objects, no ID exists, so it gets coerced to NaN + const id = Number(timerId); + + if (Number.isNaN(id) || id < idCounterStart) { + const handlerName = getClearHandler(ttype); + + if (clock.shouldClearNativeTimers === true) { + const nativeHandler = clock[`_${handlerName}`]; + return typeof nativeHandler === "function" + ? nativeHandler(timerId) + : undefined; + } + warnOnce( + `FakeTimers: ${handlerName} was invoked to clear a native timer instead of one created by this library.` + + "\nTo automatically clean-up native timers, use `shouldClearNativeTimers`." + ); + } + + if (clock.timers.hasOwnProperty(id)) { + // check that the ID matches a timer of the correct type + const timer = clock.timers[id]; + if ( + timer.type === ttype || + (timer.type === "Timeout" && ttype === "Interval") || + (timer.type === "Interval" && ttype === "Timeout") + ) { + delete clock.timers[id]; + } else { + const clear = getClearHandler(ttype); + const schedule = getScheduleHandler(timer.type); + throw new Error( + `Cannot clear timer: timer created with ${schedule}() but cleared with ${clear}()` + ); + } + } + } + + /** + * @param {Clock} clock + * @param {Config} config + * @returns {Timer[]} + */ + function uninstall(clock, config) { + let method, i, l; + const installedHrTime = "_hrtime"; + const installedNextTick = "_nextTick"; + + for (i = 0, l = clock.methods.length; i < l; i++) { + method = clock.methods[i]; + if (method === "hrtime" && _global.process) { + _global.process.hrtime = clock[installedHrTime]; + } else if (method === "nextTick" && _global.process) { + _global.process.nextTick = clock[installedNextTick]; + } else if (method === "performance") { + const originalPerfDescriptor = Object.getOwnPropertyDescriptor( + clock, + `_${method}` + ); + if ( + originalPerfDescriptor && + originalPerfDescriptor.get && + !originalPerfDescriptor.set + ) { + Object.defineProperty( + _global, + method, + originalPerfDescriptor + ); + } else if (originalPerfDescriptor.configurable) { + _global[method] = clock[`_${method}`]; + } + } else { + if (_global[method] && _global[method].hadOwnProperty) { + _global[method] = clock[`_${method}`]; + } else { + try { + delete _global[method]; + } catch (ignore) { + /* eslint no-empty: "off" */ + } + } + } + } + + if (config.shouldAdvanceTime === true) { + _global.clearInterval(clock.attachedInterval); + } + + // Prevent multiple executions which will completely remove these props + clock.methods = []; + + // return pending timers, to enable checking what timers remained on uninstall + if (!clock.timers) { + return []; + } + return Object.keys(clock.timers).map(function mapper(key) { + return clock.timers[key]; + }); + } + + /** + * @param {object} target the target containing the method to replace + * @param {string} method the keyname of the method on the target + * @param {Clock} clock + */ + function hijackMethod(target, method, clock) { + clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call( + target, + method + ); + clock[`_${method}`] = target[method]; + + if (method === "Date") { + const date = mirrorDateProperties(clock[method], target[method]); + target[method] = date; + } else if (method === "performance") { + const originalPerfDescriptor = Object.getOwnPropertyDescriptor( + target, + method + ); + // JSDOM has a read only performance field so we have to save/copy it differently + if ( + originalPerfDescriptor && + originalPerfDescriptor.get && + !originalPerfDescriptor.set + ) { + Object.defineProperty( + clock, + `_${method}`, + originalPerfDescriptor + ); + + const perfDescriptor = Object.getOwnPropertyDescriptor( + clock, + method + ); + Object.defineProperty(target, method, perfDescriptor); + } else { + target[method] = clock[method]; + } + } else { + target[method] = function () { + return clock[method].apply(clock, arguments); + }; + + Object.defineProperties( + target[method], + Object.getOwnPropertyDescriptors(clock[method]) + ); + } + + target[method].clock = clock; + } + + /** + * @param {Clock} clock + * @param {number} advanceTimeDelta + */ + function doIntervalTick(clock, advanceTimeDelta) { + clock.tick(advanceTimeDelta); + } + + /** + * @typedef {object} Timers + * @property {setTimeout} setTimeout + * @property {clearTimeout} clearTimeout + * @property {setInterval} setInterval + * @property {clearInterval} clearInterval + * @property {Date} Date + * @property {SetImmediate=} setImmediate + * @property {function(NodeImmediate): void=} clearImmediate + * @property {function(number[]):number[]=} hrtime + * @property {NextTick=} nextTick + * @property {Performance=} performance + * @property {RequestAnimationFrame=} requestAnimationFrame + * @property {boolean=} queueMicrotask + * @property {function(number): void=} cancelAnimationFrame + * @property {RequestIdleCallback=} requestIdleCallback + * @property {function(number): void=} cancelIdleCallback + */ + + /** @type {Timers} */ + const timers = { + setTimeout: _global.setTimeout, + clearTimeout: _global.clearTimeout, + setInterval: _global.setInterval, + clearInterval: _global.clearInterval, + Date: _global.Date, + }; + + if (setImmediatePresent) { + timers.setImmediate = _global.setImmediate; + timers.clearImmediate = _global.clearImmediate; + } + + if (hrtimePresent) { + timers.hrtime = _global.process.hrtime; + } + + if (nextTickPresent) { + timers.nextTick = _global.process.nextTick; + } + + if (performancePresent) { + timers.performance = _global.performance; + } + + if (requestAnimationFramePresent) { + timers.requestAnimationFrame = _global.requestAnimationFrame; + } + + if (queueMicrotaskPresent) { + timers.queueMicrotask = true; + } + + if (cancelAnimationFramePresent) { + timers.cancelAnimationFrame = _global.cancelAnimationFrame; + } + + if (requestIdleCallbackPresent) { + timers.requestIdleCallback = _global.requestIdleCallback; + } + + if (cancelIdleCallbackPresent) { + timers.cancelIdleCallback = _global.cancelIdleCallback; + } + + const originalSetTimeout = _global.setImmediate || _global.setTimeout; + + /** + * @param {Date|number} [start] the system time - non-integer values are floored + * @param {number} [loopLimit] maximum number of timers that will be run when calling runAll() + * @returns {Clock} + */ + function createClock(start, loopLimit) { + // eslint-disable-next-line no-param-reassign + start = Math.floor(getEpoch(start)); + // eslint-disable-next-line no-param-reassign + loopLimit = loopLimit || 1000; + let nanos = 0; + const adjustedSystemTime = [0, 0]; // [millis, nanoremainder] + + if (NativeDate === undefined) { + throw new Error( + "The global scope doesn't have a `Date` object" + + " (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)" + ); + } + + const clock = { + now: start, + Date: createDate(), + loopLimit: loopLimit, + }; + + clock.Date.clock = clock; + + //eslint-disable-next-line jsdoc/require-jsdoc + function getTimeToNextFrame() { + return 16 - ((clock.now - start) % 16); + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function hrtime(prev) { + const millisSinceStart = clock.now - adjustedSystemTime[0] - start; + const secsSinceStart = Math.floor(millisSinceStart / 1000); + const remainderInNanos = + (millisSinceStart - secsSinceStart * 1e3) * 1e6 + + nanos - + adjustedSystemTime[1]; + + if (Array.isArray(prev)) { + if (prev[1] > 1e9) { + throw new TypeError( + "Number of nanoseconds can't exceed a billion" + ); + } + + const oldSecs = prev[0]; + let nanoDiff = remainderInNanos - prev[1]; + let secDiff = secsSinceStart - oldSecs; + + if (nanoDiff < 0) { + nanoDiff += 1e9; + secDiff -= 1; + } + + return [secDiff, nanoDiff]; + } + return [secsSinceStart, remainderInNanos]; + } + + function fakePerformanceNow() { + const hrt = hrtime(); + const millis = hrt[0] * 1000 + hrt[1] / 1e6; + return millis; + } + + if (hrtimeBigintPresent) { + hrtime.bigint = function () { + const parts = hrtime(); + return BigInt(parts[0]) * BigInt(1e9) + BigInt(parts[1]); // eslint-disable-line + }; + } + + clock.requestIdleCallback = function requestIdleCallback( + func, + timeout + ) { + let timeToNextIdlePeriod = 0; + + if (clock.countTimers() > 0) { + timeToNextIdlePeriod = 50; // const for now + } + + const result = addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: + typeof timeout === "undefined" + ? timeToNextIdlePeriod + : Math.min(timeout, timeToNextIdlePeriod), + idleCallback: true, + }); + + return Number(result); + }; + + clock.cancelIdleCallback = function cancelIdleCallback(timerId) { + return clearTimer(clock, timerId, "IdleCallback"); + }; + + clock.setTimeout = function setTimeout(func, timeout) { + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: timeout, + }); + }; + if (typeof _global.Promise !== "undefined" && utilPromisify) { + clock.setTimeout[utilPromisify.custom] = + function promisifiedSetTimeout(timeout, arg) { + return new _global.Promise(function setTimeoutExecutor( + resolve + ) { + addTimer(clock, { + func: resolve, + args: [arg], + delay: timeout, + }); + }); + }; + } + + clock.clearTimeout = function clearTimeout(timerId) { + return clearTimer(clock, timerId, "Timeout"); + }; + + clock.nextTick = function nextTick(func) { + return enqueueJob(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 1), + error: isNearInfiniteLimit ? new Error() : null, + }); + }; + + clock.queueMicrotask = function queueMicrotask(func) { + return clock.nextTick(func); // explicitly drop additional arguments + }; + + clock.setInterval = function setInterval(func, timeout) { + // eslint-disable-next-line no-param-reassign + timeout = parseInt(timeout, 10); + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: timeout, + interval: timeout, + }); + }; + + clock.clearInterval = function clearInterval(timerId) { + return clearTimer(clock, timerId, "Interval"); + }; + + if (setImmediatePresent) { + clock.setImmediate = function setImmediate(func) { + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 1), + immediate: true, + }); + }; + + if (typeof _global.Promise !== "undefined" && utilPromisify) { + clock.setImmediate[utilPromisify.custom] = + function promisifiedSetImmediate(arg) { + return new _global.Promise( + function setImmediateExecutor(resolve) { + addTimer(clock, { + func: resolve, + args: [arg], + immediate: true, + }); + } + ); + }; + } + + clock.clearImmediate = function clearImmediate(timerId) { + return clearTimer(clock, timerId, "Immediate"); + }; + } + + clock.countTimers = function countTimers() { + return ( + Object.keys(clock.timers || {}).length + + (clock.jobs || []).length + ); + }; + + clock.requestAnimationFrame = function requestAnimationFrame(func) { + const result = addTimer(clock, { + func: func, + delay: getTimeToNextFrame(), + get args() { + return [fakePerformanceNow()]; + }, + animation: true, + }); + + return Number(result); + }; + + clock.cancelAnimationFrame = function cancelAnimationFrame(timerId) { + return clearTimer(clock, timerId, "AnimationFrame"); + }; + + clock.runMicrotasks = function runMicrotasks() { + runJobs(clock); + }; + + /** + * @param {number|string} tickValue milliseconds or a string parseable by parseTime + * @param {boolean} isAsync + * @param {Function} resolve + * @param {Function} reject + * @returns {number|undefined} will return the new `now` value or nothing for async + */ + function doTick(tickValue, isAsync, resolve, reject) { + const msFloat = + typeof tickValue === "number" + ? tickValue + : parseTime(tickValue); + const ms = Math.floor(msFloat); + const remainder = nanoRemainder(msFloat); + let nanosTotal = nanos + remainder; + let tickTo = clock.now + ms; + + if (msFloat < 0) { + throw new TypeError("Negative ticks are not supported"); + } + + // adjust for positive overflow + if (nanosTotal >= 1e6) { + tickTo += 1; + nanosTotal -= 1e6; + } + + nanos = nanosTotal; + let tickFrom = clock.now; + let previous = clock.now; + // ESLint fails to detect this correctly + /* eslint-disable prefer-const */ + let timer, + firstException, + oldNow, + nextPromiseTick, + compensationCheck, + postTimerCall; + /* eslint-enable prefer-const */ + + clock.duringTick = true; + + // perform microtasks + oldNow = clock.now; + runJobs(clock); + if (oldNow !== clock.now) { + // compensate for any setSystemTime() call during microtask callback + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function doTickInner() { + // perform each timer in the requested range + timer = firstTimerInRange(clock, tickFrom, tickTo); + // eslint-disable-next-line no-unmodified-loop-condition + while (timer && tickFrom <= tickTo) { + if (clock.timers[timer.id]) { + tickFrom = timer.callAt; + clock.now = timer.callAt; + oldNow = clock.now; + try { + runJobs(clock); + callTimer(clock, timer); + } catch (e) { + firstException = firstException || e; + } + + if (isAsync) { + // finish up after native setImmediate callback to allow + // all native es6 promises to process their callbacks after + // each timer fires. + originalSetTimeout(nextPromiseTick); + return; + } + + compensationCheck(); + } + + postTimerCall(); + } + + // perform process.nextTick()s again + oldNow = clock.now; + runJobs(clock); + if (oldNow !== clock.now) { + // compensate for any setSystemTime() call during process.nextTick() callback + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + } + clock.duringTick = false; + + // corner case: during runJobs new timers were scheduled which could be in the range [clock.now, tickTo] + timer = firstTimerInRange(clock, tickFrom, tickTo); + if (timer) { + try { + clock.tick(tickTo - clock.now); // do it all again - for the remainder of the requested range + } catch (e) { + firstException = firstException || e; + } + } else { + // no timers remaining in the requested range: move the clock all the way to the end + clock.now = tickTo; + + // update nanos + nanos = nanosTotal; + } + if (firstException) { + throw firstException; + } + + if (isAsync) { + resolve(clock.now); + } else { + return clock.now; + } + } + + nextPromiseTick = + isAsync && + function () { + try { + compensationCheck(); + postTimerCall(); + doTickInner(); + } catch (e) { + reject(e); + } + }; + + compensationCheck = function () { + // compensate for any setSystemTime() call during timer callback + if (oldNow !== clock.now) { + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + previous += clock.now - oldNow; + } + }; + + postTimerCall = function () { + timer = firstTimerInRange(clock, previous, tickTo); + previous = tickFrom; + }; + + return doTickInner(); + } + + /** + * @param {string|number} tickValue number of milliseconds or a human-readable value like "01:11:15" + * @returns {number} will return the new `now` value + */ + clock.tick = function tick(tickValue) { + return doTick(tickValue, false); + }; + + if (typeof _global.Promise !== "undefined") { + /** + * @param {string|number} tickValue number of milliseconds or a human-readable value like "01:11:15" + * @returns {Promise} + */ + clock.tickAsync = function tickAsync(tickValue) { + return new _global.Promise(function (resolve, reject) { + originalSetTimeout(function () { + try { + doTick(tickValue, true, resolve, reject); + } catch (e) { + reject(e); + } + }); + }); + }; + } + + clock.next = function next() { + runJobs(clock); + const timer = firstTimer(clock); + if (!timer) { + return clock.now; + } + + clock.duringTick = true; + try { + clock.now = timer.callAt; + callTimer(clock, timer); + runJobs(clock); + return clock.now; + } finally { + clock.duringTick = false; + } + }; + + if (typeof _global.Promise !== "undefined") { + clock.nextAsync = function nextAsync() { + return new _global.Promise(function (resolve, reject) { + originalSetTimeout(function () { + try { + const timer = firstTimer(clock); + if (!timer) { + resolve(clock.now); + return; + } + + let err; + clock.duringTick = true; + clock.now = timer.callAt; + try { + callTimer(clock, timer); + } catch (e) { + err = e; + } + clock.duringTick = false; + + originalSetTimeout(function () { + if (err) { + reject(err); + } else { + resolve(clock.now); + } + }); + } catch (e) { + reject(e); + } + }); + }); + }; + } + + clock.runAll = function runAll() { + let numTimers, i; + runJobs(clock); + for (i = 0; i < clock.loopLimit; i++) { + if (!clock.timers) { + resetIsNearInfiniteLimit(); + return clock.now; + } + + numTimers = Object.keys(clock.timers).length; + if (numTimers === 0) { + resetIsNearInfiniteLimit(); + return clock.now; + } + + clock.next(); + checkIsNearInfiniteLimit(clock, i); + } + + const excessJob = firstTimer(clock); + throw getInfiniteLoopError(clock, excessJob); + }; + + clock.runToFrame = function runToFrame() { + return clock.tick(getTimeToNextFrame()); + }; + + if (typeof _global.Promise !== "undefined") { + clock.runAllAsync = function runAllAsync() { + return new _global.Promise(function (resolve, reject) { + let i = 0; + /** + * + */ + function doRun() { + originalSetTimeout(function () { + try { + let numTimers; + if (i < clock.loopLimit) { + if (!clock.timers) { + resetIsNearInfiniteLimit(); + resolve(clock.now); + return; + } + + numTimers = Object.keys( + clock.timers + ).length; + if (numTimers === 0) { + resetIsNearInfiniteLimit(); + resolve(clock.now); + return; + } + + clock.next(); + + i++; + + doRun(); + checkIsNearInfiniteLimit(clock, i); + return; + } + + const excessJob = firstTimer(clock); + reject(getInfiniteLoopError(clock, excessJob)); + } catch (e) { + reject(e); + } + }); + } + doRun(); + }); + }; + } + + clock.runToLast = function runToLast() { + const timer = lastTimer(clock); + if (!timer) { + runJobs(clock); + return clock.now; + } + + return clock.tick(timer.callAt - clock.now); + }; + + if (typeof _global.Promise !== "undefined") { + clock.runToLastAsync = function runToLastAsync() { + return new _global.Promise(function (resolve, reject) { + originalSetTimeout(function () { + try { + const timer = lastTimer(clock); + if (!timer) { + resolve(clock.now); + } + + resolve(clock.tickAsync(timer.callAt - clock.now)); + } catch (e) { + reject(e); + } + }); + }); + }; + } + + clock.reset = function reset() { + nanos = 0; + clock.timers = {}; + clock.jobs = []; + clock.now = start; + }; + + clock.setSystemTime = function setSystemTime(systemTime) { + // determine time difference + const newNow = getEpoch(systemTime); + const difference = newNow - clock.now; + let id, timer; + + adjustedSystemTime[0] = adjustedSystemTime[0] + difference; + adjustedSystemTime[1] = adjustedSystemTime[1] + nanos; + // update 'system clock' + clock.now = newNow; + nanos = 0; + + // update timers and intervals to keep them stable + for (id in clock.timers) { + if (clock.timers.hasOwnProperty(id)) { + timer = clock.timers[id]; + timer.createdAt += difference; + timer.callAt += difference; + } + } + }; + + /** + * @param {string|number} tickValue number of milliseconds or a human-readable value like "01:11:15" + * @returns {number} will return the new `now` value + */ + clock.jump = function jump(tickValue) { + const msFloat = + typeof tickValue === "number" + ? tickValue + : parseTime(tickValue); + const ms = Math.floor(msFloat); + + for (const timer of Object.values(clock.timers)) { + if (clock.now + ms > timer.callAt) { + timer.callAt = clock.now + ms; + } + } + clock.tick(ms); + }; + + if (performancePresent) { + clock.performance = Object.create(null); + clock.performance.now = fakePerformanceNow; + } + + if (hrtimePresent) { + clock.hrtime = hrtime; + } + + return clock; + } + + /* eslint-disable complexity */ + + /** + * @param {Config=} [config] Optional config + * @returns {Clock} + */ + function install(config) { + if ( + arguments.length > 1 || + config instanceof Date || + Array.isArray(config) || + typeof config === "number" + ) { + throw new TypeError( + `FakeTimers.install called with ${String( + config + )} install requires an object parameter` + ); + } + + if (_global.Date.isFake === true) { + // Timers are already faked; this is a problem. + // Make the user reset timers before continuing. + throw new TypeError( + "Can't install fake timers twice on the same global object." + ); + } + + // eslint-disable-next-line no-param-reassign + config = typeof config !== "undefined" ? config : {}; + config.shouldAdvanceTime = config.shouldAdvanceTime || false; + config.advanceTimeDelta = config.advanceTimeDelta || 20; + config.shouldClearNativeTimers = + config.shouldClearNativeTimers || false; + + if (config.target) { + throw new TypeError( + "config.target is no longer supported. Use `withGlobal(target)` instead." + ); + } + + let i, l; + const clock = createClock(config.now, config.loopLimit); + clock.shouldClearNativeTimers = config.shouldClearNativeTimers; + + clock.uninstall = function () { + return uninstall(clock, config); + }; + + clock.methods = config.toFake || []; + + if (clock.methods.length === 0) { + // do not fake nextTick by default - GitHub#126 + clock.methods = Object.keys(timers).filter(function (key) { + return key !== "nextTick" && key !== "queueMicrotask"; + }); + } + + if (config.shouldAdvanceTime === true) { + const intervalTick = doIntervalTick.bind( + null, + clock, + config.advanceTimeDelta + ); + const intervalId = _global.setInterval( + intervalTick, + config.advanceTimeDelta + ); + clock.attachedInterval = intervalId; + } + + if (clock.methods.includes("performance")) { + const proto = (() => { + if (hasPerformancePrototype) { + return _global.Performance.prototype; + } + if (hasPerformanceConstructorPrototype) { + return _global.performance.constructor.prototype; + } + })(); + if (proto) { + Object.getOwnPropertyNames(proto).forEach(function (name) { + if (name !== "now") { + clock.performance[name] = + name.indexOf("getEntries") === 0 + ? NOOP_ARRAY + : NOOP; + } + }); + } else if ((config.toFake || []).includes("performance")) { + // user explicitly tried to fake performance when not present + throw new ReferenceError( + "non-existent performance object cannot be faked" + ); + } + } + + for (i = 0, l = clock.methods.length; i < l; i++) { + const nameOfMethodToReplace = clock.methods[i]; + if (nameOfMethodToReplace === "hrtime") { + if ( + _global.process && + typeof _global.process.hrtime === "function" + ) { + hijackMethod(_global.process, nameOfMethodToReplace, clock); + } + } else if (nameOfMethodToReplace === "nextTick") { + if ( + _global.process && + typeof _global.process.nextTick === "function" + ) { + hijackMethod(_global.process, nameOfMethodToReplace, clock); + } + } else { + hijackMethod(_global, nameOfMethodToReplace, clock); + } + } + + return clock; + } + + /* eslint-enable complexity */ + + return { + timers: timers, + createClock: createClock, + install: install, + withGlobal: withGlobal, + }; +} + +/** + * @typedef {object} FakeTimers + * @property {Timers} timers + * @property {createClock} createClock + * @property {Function} install + * @property {withGlobal} withGlobal + */ + +/* eslint-enable complexity */ + +/** @type {FakeTimers} */ +const defaultImplementation = withGlobal(globalObject); + +exports.timers = defaultImplementation.timers; +exports.createClock = defaultImplementation.createClock; +exports.install = defaultImplementation.install; +exports.withGlobal = withGlobal; diff --git a/node_modules/@types/babel__core/LICENSE b/node_modules/@types/babel__core/LICENSE new file mode 100644 index 00000000..9e841e7a --- /dev/null +++ b/node_modules/@types/babel__core/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + 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/@types/babel__core/README.md b/node_modules/@types/babel__core/README.md new file mode 100644 index 00000000..3e4c0244 --- /dev/null +++ b/node_modules/@types/babel__core/README.md @@ -0,0 +1,15 @@ +# Installation +> `npm install --save @types/babel__core` + +# Summary +This package contains type definitions for @babel/core (https://github.com/babel/babel/tree/master/packages/babel-core). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__core. + +### Additional Details + * Last updated: Mon, 20 Nov 2023 23:36:23 GMT + * Dependencies: [@babel/parser](https://npmjs.com/package/@babel/parser), [@babel/types](https://npmjs.com/package/@babel/types), [@types/babel__generator](https://npmjs.com/package/@types/babel__generator), [@types/babel__template](https://npmjs.com/package/@types/babel__template), [@types/babel__traverse](https://npmjs.com/package/@types/babel__traverse) + +# Credits +These definitions were written by [Troy Gerwien](https://github.com/yortus), [Marvin Hagemeister](https://github.com/marvinhagemeister), [Melvin Groenhoff](https://github.com/mgroenhoff), [Jessica Franco](https://github.com/Jessidhia), and [Ifiok Jr.](https://github.com/ifiokjr). diff --git a/node_modules/@types/babel__core/index.d.ts b/node_modules/@types/babel__core/index.d.ts new file mode 100644 index 00000000..48dc0500 --- /dev/null +++ b/node_modules/@types/babel__core/index.d.ts @@ -0,0 +1,831 @@ +import { GeneratorOptions } from "@babel/generator"; +import { ParserOptions } from "@babel/parser"; +import template from "@babel/template"; +import traverse, { Hub, NodePath, Scope, Visitor } from "@babel/traverse"; +import * as t from "@babel/types"; + +export { GeneratorOptions, NodePath, ParserOptions, t as types, template, traverse, Visitor }; + +export type Node = t.Node; +export type ParseResult = ReturnType; +export const version: string; +export const DEFAULT_EXTENSIONS: [".js", ".jsx", ".es6", ".es", ".mjs"]; + +/** + * Source map standard format as to revision 3 + * @see {@link https://sourcemaps.info/spec.html} + * @see {@link https://github.com/mozilla/source-map/blob/HEAD/source-map.d.ts} + */ +interface InputSourceMap { + version: number; + sources: string[]; + names: string[]; + sourceRoot?: string | undefined; + sourcesContent?: string[] | undefined; + mappings: string; + file: string; +} + +export interface TransformOptions { + /** + * Specify which assumptions it can make about your code, to better optimize the compilation result. **NOTE**: This replaces the various `loose` options in plugins in favor of + * top-level options that can apply to multiple plugins + * + * @see https://babeljs.io/docs/en/assumptions + */ + assumptions?: { [name: string]: boolean } | null | undefined; + + /** + * Include the AST in the returned object + * + * Default: `false` + */ + ast?: boolean | null | undefined; + + /** + * Attach a comment after all non-user injected code + * + * Default: `null` + */ + auxiliaryCommentAfter?: string | null | undefined; + + /** + * Attach a comment before all non-user injected code + * + * Default: `null` + */ + auxiliaryCommentBefore?: string | null | undefined; + + /** + * Specify the "root" folder that defines the location to search for "babel.config.js", and the default folder to allow `.babelrc` files inside of. + * + * Default: `"."` + */ + root?: string | null | undefined; + + /** + * This option, combined with the "root" value, defines how Babel chooses its project root. + * The different modes define different ways that Babel can process the "root" value to get + * the final project root. + * + * @see https://babeljs.io/docs/en/next/options#rootmode + */ + rootMode?: "root" | "upward" | "upward-optional" | undefined; + + /** + * The config file to load Babel's config from. Defaults to searching for "babel.config.js" inside the "root" folder. `false` will disable searching for config files. + * + * Default: `undefined` + */ + configFile?: string | boolean | null | undefined; + + /** + * Specify whether or not to use .babelrc and + * .babelignore files. + * + * Default: `true` + */ + babelrc?: boolean | null | undefined; + + /** + * Specify which packages should be search for .babelrc files when they are being compiled. `true` to always search, or a path string or an array of paths to packages to search + * inside of. Defaults to only searching the "root" package. + * + * Default: `(root)` + */ + babelrcRoots?: boolean | MatchPattern | MatchPattern[] | null | undefined; + + /** + * Toggles whether or not browserslist config sources are used, which includes searching for any browserslist files or referencing the browserslist key inside package.json. + * This is useful for projects that use a browserslist config for files that won't be compiled with Babel. + * + * If a string is specified, it must represent the path of a browserslist configuration file. Relative paths are resolved relative to the configuration file which specifies + * this option, or to `cwd` when it's passed as part of the programmatic options. + * + * Default: `true` + */ + browserslistConfigFile?: boolean | null | undefined; + + /** + * The Browserslist environment to use. + * + * Default: `undefined` + */ + browserslistEnv?: string | null | undefined; + + /** + * By default `babel.transformFromAst` will clone the input AST to avoid mutations. + * Specifying `cloneInputAst: false` can improve parsing performance if the input AST is not used elsewhere. + * + * Default: `true` + */ + cloneInputAst?: boolean | null | undefined; + + /** + * Defaults to environment variable `BABEL_ENV` if set, or else `NODE_ENV` if set, or else it defaults to `"development"` + * + * Default: env vars + */ + envName?: string | undefined; + + /** + * If any of patterns match, the current configuration object is considered inactive and is ignored during config processing. + */ + exclude?: MatchPattern | MatchPattern[] | undefined; + + /** + * Enable code generation + * + * Default: `true` + */ + code?: boolean | null | undefined; + + /** + * Output comments in generated output + * + * Default: `true` + */ + comments?: boolean | null | undefined; + + /** + * Do not include superfluous whitespace characters and line terminators. When set to `"auto"` compact is set to `true` on input sizes of >500KB + * + * Default: `"auto"` + */ + compact?: boolean | "auto" | null | undefined; + + /** + * The working directory that Babel's programmatic options are loaded relative to. + * + * Default: `"."` + */ + cwd?: string | null | undefined; + + /** + * Utilities may pass a caller object to identify themselves to Babel and + * pass capability-related flags for use by configs, presets and plugins. + * + * @see https://babeljs.io/docs/en/next/options#caller + */ + caller?: TransformCaller | undefined; + + /** + * This is an object of keys that represent different environments. For example, you may have: `{ env: { production: { \/* specific options *\/ } } }` + * which will use those options when the `envName` is `production` + * + * Default: `{}` + */ + env?: { [index: string]: TransformOptions | null | undefined } | null | undefined; + + /** + * A path to a `.babelrc` file to extend + * + * Default: `null` + */ + extends?: string | null | undefined; + + /** + * Filename for use in errors etc + * + * Default: `"unknown"` + */ + filename?: string | null | undefined; + + /** + * Filename relative to `sourceRoot` + * + * Default: `(filename)` + */ + filenameRelative?: string | null | undefined; + + /** + * An object containing the options to be passed down to the babel code generator, @babel/generator + * + * Default: `{}` + */ + generatorOpts?: GeneratorOptions | null | undefined; + + /** + * Specify a custom callback to generate a module id with. Called as `getModuleId(moduleName)`. If falsy value is returned then the generated module id is used + * + * Default: `null` + */ + getModuleId?: ((moduleName: string) => string | null | undefined) | null | undefined; + + /** + * ANSI highlight syntax error code frames + * + * Default: `true` + */ + highlightCode?: boolean | null | undefined; + + /** + * Opposite to the `only` option. `ignore` is disregarded if `only` is specified + * + * Default: `null` + */ + ignore?: MatchPattern[] | null | undefined; + + /** + * This option is a synonym for "test" + */ + include?: MatchPattern | MatchPattern[] | undefined; + + /** + * A source map object that the output source map will be based on + * + * Default: `null` + */ + inputSourceMap?: InputSourceMap | null | undefined; + + /** + * Should the output be minified (not printing last semicolons in blocks, printing literal string values instead of escaped ones, stripping `()` from `new` when safe) + * + * Default: `false` + */ + minified?: boolean | null | undefined; + + /** + * Specify a custom name for module ids + * + * Default: `null` + */ + moduleId?: string | null | undefined; + + /** + * If truthy, insert an explicit id for modules. By default, all modules are anonymous. (Not available for `common` modules) + * + * Default: `false` + */ + moduleIds?: boolean | null | undefined; + + /** + * Optional prefix for the AMD module formatter that will be prepend to the filename on module definitions + * + * Default: `(sourceRoot)` + */ + moduleRoot?: string | null | undefined; + + /** + * A glob, regex, or mixed array of both, matching paths to **only** compile. Can also be an array of arrays containing paths to explicitly match. When attempting to compile + * a non-matching file it's returned verbatim + * + * Default: `null` + */ + only?: MatchPattern[] | null | undefined; + + /** + * Allows users to provide an array of options that will be merged into the current configuration one at a time. + * This feature is best used alongside the "test"/"include"/"exclude" options to provide conditions for which an override should apply + */ + overrides?: TransformOptions[] | undefined; + + /** + * An object containing the options to be passed down to the babel parser, @babel/parser + * + * Default: `{}` + */ + parserOpts?: ParserOptions | null | undefined; + + /** + * List of plugins to load and use + * + * Default: `[]` + */ + plugins?: PluginItem[] | null | undefined; + + /** + * List of presets (a set of plugins) to load and use + * + * Default: `[]` + */ + presets?: PluginItem[] | null | undefined; + + /** + * Retain line numbers. This will lead to wacky code but is handy for scenarios where you can't use source maps. (**NOTE**: This will not retain the columns) + * + * Default: `false` + */ + retainLines?: boolean | null | undefined; + + /** + * An optional callback that controls whether a comment should be output or not. Called as `shouldPrintComment(commentContents)`. **NOTE**: This overrides the `comment` option when used + * + * Default: `null` + */ + shouldPrintComment?: ((commentContents: string) => boolean) | null | undefined; + + /** + * Set `sources[0]` on returned source map + * + * Default: `(filenameRelative)` + */ + sourceFileName?: string | null | undefined; + + /** + * If truthy, adds a `map` property to returned output. If set to `"inline"`, a comment with a sourceMappingURL directive is added to the bottom of the returned code. If set to `"both"` + * then a `map` property is returned as well as a source map comment appended. **This does not emit sourcemap files by itself!** + * + * Default: `false` + */ + sourceMaps?: boolean | "inline" | "both" | null | undefined; + + /** + * The root from which all sources are relative + * + * Default: `(moduleRoot)` + */ + sourceRoot?: string | null | undefined; + + /** + * Indicate the mode the code should be parsed in. Can be one of "script", "module", or "unambiguous". `"unambiguous"` will make Babel attempt to guess, based on the presence of ES6 + * `import` or `export` statements. Files with ES6 `import`s and `export`s are considered `"module"` and are otherwise `"script"`. + * + * Default: `("module")` + */ + sourceType?: "script" | "module" | "unambiguous" | null | undefined; + + /** + * If all patterns fail to match, the current configuration object is considered inactive and is ignored during config processing. + */ + test?: MatchPattern | MatchPattern[] | undefined; + + /** + * Describes the environments you support/target for your project. + * This can either be a [browserslist-compatible](https://github.com/ai/browserslist) query (with [caveats](https://babeljs.io/docs/en/babel-preset-env#ineffective-browserslist-queries)) + * + * Default: `{}` + */ + targets?: + | string + | string[] + | { + esmodules?: boolean; + node?: Omit | "current" | true; + safari?: Omit | "tp"; + browsers?: string | string[]; + android?: string; + chrome?: string; + deno?: string; + edge?: string; + electron?: string; + firefox?: string; + ie?: string; + ios?: string; + opera?: string; + rhino?: string; + samsung?: string; + }; + + /** + * An optional callback that can be used to wrap visitor methods. **NOTE**: This is useful for things like introspection, and not really needed for implementing anything. Called as + * `wrapPluginVisitorMethod(pluginAlias, visitorType, callback)`. + */ + wrapPluginVisitorMethod?: + | (( + pluginAlias: string, + visitorType: "enter" | "exit", + callback: (path: NodePath, state: any) => void, + ) => (path: NodePath, state: any) => void) + | null + | undefined; +} + +export interface TransformCaller { + // the only required property + name: string; + // e.g. set to true by `babel-loader` and false by `babel-jest` + supportsStaticESM?: boolean | undefined; + supportsDynamicImport?: boolean | undefined; + supportsExportNamespaceFrom?: boolean | undefined; + supportsTopLevelAwait?: boolean | undefined; + // augment this with a "declare module '@babel/core' { ... }" if you need more keys +} + +export type FileResultCallback = (err: Error | null, result: BabelFileResult | null) => any; + +export interface MatchPatternContext { + envName: string; + dirname: string; + caller: TransformCaller | undefined; +} +export type MatchPattern = string | RegExp | ((filename: string | undefined, context: MatchPatternContext) => boolean); + +/** + * Transforms the passed in code. Calling a callback with an object with the generated code, source map, and AST. + */ +export function transform(code: string, callback: FileResultCallback): void; + +/** + * Transforms the passed in code. Calling a callback with an object with the generated code, source map, and AST. + */ +export function transform(code: string, opts: TransformOptions | undefined, callback: FileResultCallback): void; + +/** + * Here for backward-compatibility. Ideally use `transformSync` if you want a synchronous API. + */ +export function transform(code: string, opts?: TransformOptions): BabelFileResult | null; + +/** + * Transforms the passed in code. Returning an object with the generated code, source map, and AST. + */ +export function transformSync(code: string, opts?: TransformOptions): BabelFileResult | null; + +/** + * Transforms the passed in code. Calling a callback with an object with the generated code, source map, and AST. + */ +export function transformAsync(code: string, opts?: TransformOptions): Promise; + +/** + * Asynchronously transforms the entire contents of a file. + */ +export function transformFile(filename: string, callback: FileResultCallback): void; + +/** + * Asynchronously transforms the entire contents of a file. + */ +export function transformFile(filename: string, opts: TransformOptions | undefined, callback: FileResultCallback): void; + +/** + * Synchronous version of `babel.transformFile`. Returns the transformed contents of the `filename`. + */ +export function transformFileSync(filename: string, opts?: TransformOptions): BabelFileResult | null; + +/** + * Asynchronously transforms the entire contents of a file. + */ +export function transformFileAsync(filename: string, opts?: TransformOptions): Promise; + +/** + * Given an AST, transform it. + */ +export function transformFromAst(ast: Node, code: string | undefined, callback: FileResultCallback): void; + +/** + * Given an AST, transform it. + */ +export function transformFromAst( + ast: Node, + code: string | undefined, + opts: TransformOptions | undefined, + callback: FileResultCallback, +): void; + +/** + * Here for backward-compatibility. Ideally use ".transformSync" if you want a synchronous API. + */ +export function transformFromAstSync(ast: Node, code?: string, opts?: TransformOptions): BabelFileResult | null; + +/** + * Given an AST, transform it. + */ +export function transformFromAstAsync( + ast: Node, + code?: string, + opts?: TransformOptions, +): Promise; + +// A babel plugin is a simple function which must return an object matching +// the following interface. Babel will throw if it finds unknown properties. +// The list of allowed plugin keys is here: +// https://github.com/babel/babel/blob/4e50b2d9d9c376cee7a2cbf56553fe5b982ea53c/packages/babel-core/src/config/option-manager.js#L71 +export interface PluginObj { + name?: string | undefined; + manipulateOptions?(opts: any, parserOpts: any): void; + pre?(this: S, file: BabelFile): void; + visitor: Visitor; + post?(this: S, file: BabelFile): void; + inherits?: any; +} + +export interface BabelFile { + ast: t.File; + opts: TransformOptions; + hub: Hub; + metadata: object; + path: NodePath; + scope: Scope; + inputMap: object | null; + code: string; +} + +export interface PluginPass { + file: BabelFile; + key: string; + opts: object; + cwd: string; + filename: string | undefined; + get(key: unknown): any; + set(key: unknown, value: unknown): void; + [key: string]: unknown; +} + +export interface BabelFileResult { + ast?: t.File | null | undefined; + code?: string | null | undefined; + ignored?: boolean | undefined; + map?: + | { + version: number; + sources: string[]; + names: string[]; + sourceRoot?: string | undefined; + sourcesContent?: string[] | undefined; + mappings: string; + file: string; + } + | null + | undefined; + metadata?: BabelFileMetadata | undefined; +} + +export interface BabelFileMetadata { + usedHelpers: string[]; + marked: Array<{ + type: string; + message: string; + loc: object; + }>; + modules: BabelFileModulesMetadata; +} + +export interface BabelFileModulesMetadata { + imports: object[]; + exports: { + exported: object[]; + specifiers: object[]; + }; +} + +export type FileParseCallback = (err: Error | null, result: ParseResult | null) => any; + +/** + * Given some code, parse it using Babel's standard behavior. + * Referenced presets and plugins will be loaded such that optional syntax plugins are automatically enabled. + */ +export function parse(code: string, callback: FileParseCallback): void; + +/** + * Given some code, parse it using Babel's standard behavior. + * Referenced presets and plugins will be loaded such that optional syntax plugins are automatically enabled. + */ +export function parse(code: string, options: TransformOptions | undefined, callback: FileParseCallback): void; + +/** + * Given some code, parse it using Babel's standard behavior. + * Referenced presets and plugins will be loaded such that optional syntax plugins are automatically enabled. + */ +export function parse(code: string, options?: TransformOptions): ParseResult | null; + +/** + * Given some code, parse it using Babel's standard behavior. + * Referenced presets and plugins will be loaded such that optional syntax plugins are automatically enabled. + */ +export function parseSync(code: string, options?: TransformOptions): ParseResult | null; + +/** + * Given some code, parse it using Babel's standard behavior. + * Referenced presets and plugins will be loaded such that optional syntax plugins are automatically enabled. + */ +export function parseAsync(code: string, options?: TransformOptions): Promise; + +/** + * Resolve Babel's options fully, resulting in an options object where: + * + * * opts.plugins is a full list of Plugin instances. + * * opts.presets is empty and all presets are flattened into opts. + * * It can be safely passed back to Babel. Fields like babelrc have been set to false so that later calls to Babel + * will not make a second attempt to load config files. + * + * Plugin instances aren't meant to be manipulated directly, but often callers will serialize this opts to JSON to + * use it as a cache key representing the options Babel has received. Caching on this isn't 100% guaranteed to + * invalidate properly, but it is the best we have at the moment. + */ +export function loadOptions(options?: TransformOptions): object | null; + +/** + * To allow systems to easily manipulate and validate a user's config, this function resolves the plugins and + * presets and proceeds no further. The expectation is that callers will take the config's .options, manipulate it + * as then see fit and pass it back to Babel again. + * + * * `babelrc: string | void` - The path of the `.babelrc` file, if there was one. + * * `babelignore: string | void` - The path of the `.babelignore` file, if there was one. + * * `options: ValidatedOptions` - The partially resolved options, which can be manipulated and passed back + * to Babel again. + * * `plugins: Array` - See below. + * * `presets: Array` - See below. + * * It can be safely passed back to Babel. Fields like `babelrc` have been set to false so that later calls to + * Babel will not make a second attempt to load config files. + * + * `ConfigItem` instances expose properties to introspect the values, but each item should be treated as + * immutable. If changes are desired, the item should be removed from the list and replaced with either a normal + * Babel config value, or with a replacement item created by `babel.createConfigItem`. See that function for + * information about `ConfigItem` fields. + */ +export function loadPartialConfig(options?: TransformOptions): Readonly | null; +export function loadPartialConfigAsync(options?: TransformOptions): Promise | null>; + +export interface PartialConfig { + options: TransformOptions; + babelrc?: string | undefined; + babelignore?: string | undefined; + config?: string | undefined; + hasFilesystemConfig: () => boolean; +} + +export interface ConfigItem { + /** + * The name that the user gave the plugin instance, e.g. `plugins: [ ['env', {}, 'my-env'] ]` + */ + name?: string | undefined; + + /** + * The resolved value of the plugin. + */ + value: object | ((...args: any[]) => any); + + /** + * The options object passed to the plugin. + */ + options?: object | false | undefined; + + /** + * The path that the options are relative to. + */ + dirname: string; + + /** + * Information about the plugin's file, if Babel knows it. + * * + */ + file?: + | { + /** + * The file that the user requested, e.g. `"@babel/env"` + */ + request: string; + + /** + * The full path of the resolved file, e.g. `"/tmp/node_modules/@babel/preset-env/lib/index.js"` + */ + resolved: string; + } + | null + | undefined; +} + +export type PluginOptions = object | undefined | false; + +export type PluginTarget = string | object | ((...args: any[]) => any); + +export type PluginItem = + | ConfigItem + | PluginObj + | PluginTarget + | [PluginTarget, PluginOptions] + | [PluginTarget, PluginOptions, string | undefined]; + +export function resolvePlugin(name: string, dirname: string): string | null; +export function resolvePreset(name: string, dirname: string): string | null; + +export interface CreateConfigItemOptions { + dirname?: string | undefined; + type?: "preset" | "plugin" | undefined; +} + +/** + * Allows build tooling to create and cache config items up front. If this function is called multiple times for a + * given plugin, Babel will call the plugin's function itself multiple times. If you have a clear set of expected + * plugins and presets to inject, pre-constructing the config items would be recommended. + */ +export function createConfigItem( + value: PluginTarget | [PluginTarget, PluginOptions] | [PluginTarget, PluginOptions, string | undefined], + options?: CreateConfigItemOptions, +): ConfigItem; + +// NOTE: the documentation says the ConfigAPI also exposes @babel/core's exports, but it actually doesn't +/** + * @see https://babeljs.io/docs/en/next/config-files#config-function-api + */ +export interface ConfigAPI { + /** + * The version string for the Babel version that is loading the config file. + * + * @see https://babeljs.io/docs/en/next/config-files#apiversion + */ + version: string; + /** + * @see https://babeljs.io/docs/en/next/config-files#apicache + */ + cache: SimpleCacheConfigurator; + /** + * @see https://babeljs.io/docs/en/next/config-files#apienv + */ + env: EnvFunction; + // undocumented; currently hardcoded to return 'false' + // async(): boolean + /** + * This API is used as a way to access the `caller` data that has been passed to Babel. + * Since many instances of Babel may be running in the same process with different `caller` values, + * this API is designed to automatically configure `api.cache`, the same way `api.env()` does. + * + * The `caller` value is available as the first parameter of the callback function. + * It is best used with something like this to toggle configuration behavior + * based on a specific environment: + * + * @example + * function isBabelRegister(caller?: { name: string }) { + * return !!(caller && caller.name === "@babel/register") + * } + * api.caller(isBabelRegister) + * + * @see https://babeljs.io/docs/en/next/config-files#apicallercb + */ + caller(callerCallback: (caller: TransformOptions["caller"]) => T): T; + /** + * While `api.version` can be useful in general, it's sometimes nice to just declare your version. + * This API exposes a simple way to do that with: + * + * @example + * api.assertVersion(7) // major version only + * api.assertVersion("^7.2") + * + * @see https://babeljs.io/docs/en/next/config-files#apiassertversionrange + */ + assertVersion(versionRange: number | string): boolean; + // NOTE: this is an undocumented reexport from "@babel/parser" but it's missing from its types + // tokTypes: typeof tokTypes +} + +/** + * JS configs are great because they can compute a config on the fly, + * but the downside there is that it makes caching harder. + * Babel wants to avoid re-executing the config function every time a file is compiled, + * because then it would also need to re-execute any plugin and preset functions + * referenced in that config. + * + * To avoid this, Babel expects users of config functions to tell it how to manage caching + * within a config file. + * + * @see https://babeljs.io/docs/en/next/config-files#apicache + */ +export interface SimpleCacheConfigurator { + // there is an undocumented call signature that is a shorthand for forever()/never()/using(). + // (ever: boolean): void + // (callback: CacheCallback): T + /** + * Permacache the computed config and never call the function again. + */ + forever(): void; + /** + * Do not cache this config, and re-execute the function every time. + */ + never(): void; + /** + * Any time the using callback returns a value other than the one that was expected, + * the overall config function will be called again and a new entry will be added to the cache. + * + * @example + * api.cache.using(() => process.env.NODE_ENV) + */ + using(callback: SimpleCacheCallback): T; + /** + * Any time the using callback returns a value other than the one that was expected, + * the overall config function will be called again and all entries in the cache will + * be replaced with the result. + * + * @example + * api.cache.invalidate(() => process.env.NODE_ENV) + */ + invalidate(callback: SimpleCacheCallback): T; +} + +// https://github.com/babel/babel/blob/v7.3.3/packages/babel-core/src/config/caching.js#L231 +export type SimpleCacheKey = string | boolean | number | null | undefined; +export type SimpleCacheCallback = () => T; + +/** + * Since `NODE_ENV` is a fairly common way to toggle behavior, Babel also includes an API function + * meant specifically for that. This API is used as a quick way to check the `"envName"` that Babel + * was loaded with, which takes `NODE_ENV` into account if no other overriding environment is set. + * + * @see https://babeljs.io/docs/en/next/config-files#apienv + */ +export interface EnvFunction { + /** + * @returns the current `envName` string + */ + (): string; + /** + * @returns `true` if the `envName` is `===` any of the given strings + */ + (envName: string | readonly string[]): boolean; + // the official documentation is misleading for this one... + // this just passes the callback to `cache.using` but with an additional argument. + // it returns its result instead of necessarily returning a boolean. + (envCallback: (envName: NonNullable) => T): T; +} + +export type ConfigFunction = (api: ConfigAPI) => TransformOptions; + +export as namespace babel; diff --git a/node_modules/@types/babel__core/package.json b/node_modules/@types/babel__core/package.json new file mode 100644 index 00000000..487e31cc --- /dev/null +++ b/node_modules/@types/babel__core/package.json @@ -0,0 +1,51 @@ +{ + "name": "@types/babel__core", + "version": "7.20.5", + "description": "TypeScript definitions for @babel/core", + "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__core", + "license": "MIT", + "contributors": [ + { + "name": "Troy Gerwien", + "githubUsername": "yortus", + "url": "https://github.com/yortus" + }, + { + "name": "Marvin Hagemeister", + "githubUsername": "marvinhagemeister", + "url": "https://github.com/marvinhagemeister" + }, + { + "name": "Melvin Groenhoff", + "githubUsername": "mgroenhoff", + "url": "https://github.com/mgroenhoff" + }, + { + "name": "Jessica Franco", + "githubUsername": "Jessidhia", + "url": "https://github.com/Jessidhia" + }, + { + "name": "Ifiok Jr.", + "githubUsername": "ifiokjr", + "url": "https://github.com/ifiokjr" + } + ], + "main": "", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", + "directory": "types/babel__core" + }, + "scripts": {}, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + }, + "typesPublisherContentHash": "3ece429b02ff9f70503a5644f2b303b04d10e6da7940c91a9eff5e52f2c76b91", + "typeScriptVersion": "4.5" +} \ No newline at end of file diff --git a/node_modules/@types/babel__generator/LICENSE b/node_modules/@types/babel__generator/LICENSE new file mode 100644 index 00000000..9e841e7a --- /dev/null +++ b/node_modules/@types/babel__generator/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + 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/@types/babel__generator/README.md b/node_modules/@types/babel__generator/README.md new file mode 100644 index 00000000..8bb78e41 --- /dev/null +++ b/node_modules/@types/babel__generator/README.md @@ -0,0 +1,15 @@ +# Installation +> `npm install --save @types/babel__generator` + +# Summary +This package contains type definitions for @babel/generator (https://github.com/babel/babel/tree/master/packages/babel-generator). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__generator. + +### Additional Details + * Last updated: Thu, 03 Apr 2025 16:02:41 GMT + * Dependencies: [@babel/types](https://npmjs.com/package/@babel/types) + +# Credits +These definitions were written by [Troy Gerwien](https://github.com/yortus), [Melvin Groenhoff](https://github.com/mgroenhoff), [Cameron Yan](https://github.com/khell), and [Lyanbin](https://github.com/Lyanbin). diff --git a/node_modules/@types/babel__generator/index.d.ts b/node_modules/@types/babel__generator/index.d.ts new file mode 100644 index 00000000..b89cc42e --- /dev/null +++ b/node_modules/@types/babel__generator/index.d.ts @@ -0,0 +1,210 @@ +import * as t from "@babel/types"; + +export interface GeneratorOptions { + /** + * Optional string to add as a block comment at the start of the output file. + */ + auxiliaryCommentBefore?: string | undefined; + + /** + * Optional string to add as a block comment at the end of the output file. + */ + auxiliaryCommentAfter?: string | undefined; + + /** + * Function that takes a comment (as a string) and returns true if the comment should be included in the output. + * By default, comments are included if `opts.comments` is `true` or if `opts.minifed` is `false` and the comment + * contains `@preserve` or `@license`. + */ + shouldPrintComment?(comment: string): boolean; + + /** + * Attempt to use the same line numbers in the output code as in the source code (helps preserve stack traces). + * Defaults to `false`. + */ + retainLines?: boolean | undefined; + + /** + * Retain parens around function expressions (could be used to change engine parsing behavior) + * Defaults to `false`. + */ + retainFunctionParens?: boolean | undefined; + + /** + * Should comments be included in output? Defaults to `true`. + */ + comments?: boolean | undefined; + + /** + * Set to true to avoid adding whitespace for formatting. Defaults to the value of `opts.minified`. + */ + compact?: boolean | "auto" | undefined; + + /** + * Should the output be minified. Defaults to `false`. + */ + minified?: boolean | undefined; + + /** + * Set to true to reduce whitespace (but not as much as opts.compact). Defaults to `false`. + */ + concise?: boolean | undefined; + + /** + * Used in warning messages + */ + filename?: string | undefined; + + /** + * Enable generating source maps. Defaults to `false`. + */ + sourceMaps?: boolean | undefined; + + /** + * A root for all relative URLs in the source map. + */ + sourceRoot?: string | undefined; + + /** + * The filename for the source code (i.e. the code in the `code` argument). + * This will only be used if `code` is a string. + */ + sourceFileName?: string | undefined; + + /** + * Set to true to run jsesc with "json": true to print "\u00A9" vs. "©"; + */ + jsonCompatibleStrings?: boolean | undefined; + + /** + * Set to true to enable support for experimental decorators syntax before module exports. + * Defaults to `false`. + */ + decoratorsBeforeExport?: boolean | undefined; + + /** + * The import attributes/assertions syntax to use. + * When not specified, @babel/generator will try to match the style in the input code based on the AST shape. + */ + importAttributesKeyword?: "with" | "assert" | "with-legacy"; + + /** + * Options for outputting jsesc representation. + */ + jsescOption?: { + /** + * The default value for the quotes option is 'single'. This means that any occurrences of ' in the input + * string are escaped as \', so that the output can be used in a string literal wrapped in single quotes. + */ + quotes?: "single" | "double" | "backtick" | undefined; + + /** + * The default value for the numbers option is 'decimal'. This means that any numeric values are represented + * using decimal integer literals. Other valid options are binary, octal, and hexadecimal, which result in + * binary integer literals, octal integer literals, and hexadecimal integer literals, respectively. + */ + numbers?: "binary" | "octal" | "decimal" | "hexadecimal" | undefined; + + /** + * The wrap option takes a boolean value (true or false), and defaults to false (disabled). When enabled, the + * output is a valid JavaScript string literal wrapped in quotes. The type of quotes can be specified through + * the quotes setting. + */ + wrap?: boolean | undefined; + + /** + * The es6 option takes a boolean value (true or false), and defaults to false (disabled). When enabled, any + * astral Unicode symbols in the input are escaped using ECMAScript 6 Unicode code point escape sequences + * instead of using separate escape sequences for each surrogate half. If backwards compatibility with ES5 + * environments is a concern, don’t enable this setting. If the json setting is enabled, the value for the es6 + * setting is ignored (as if it was false). + */ + es6?: boolean | undefined; + + /** + * The escapeEverything option takes a boolean value (true or false), and defaults to false (disabled). When + * enabled, all the symbols in the output are escaped — even printable ASCII symbols. + */ + escapeEverything?: boolean | undefined; + + /** + * The minimal option takes a boolean value (true or false), and defaults to false (disabled). When enabled, + * only a limited set of symbols in the output are escaped: \0, \b, \t, \n, \f, \r, \\, \u2028, \u2029. + */ + minimal?: boolean | undefined; + + /** + * The isScriptContext option takes a boolean value (true or false), and defaults to false (disabled). When + * enabled, occurrences of or + + `; +} + +function headerTemplate(details) { + function metricsTemplate({ pct, covered, total }, kind) { + return ` +
+ ${pct}% + ${kind} + ${covered}/${total} +
+ `; + } + + function skipTemplate(metrics) { + const statements = metrics.statements.skipped; + const branches = metrics.branches.skipped; + const functions = metrics.functions.skipped; + + const countLabel = (c, label, plural) => + c === 0 ? [] : `${c} ${label}${c === 1 ? '' : plural}`; + const skips = [].concat( + countLabel(statements, 'statement', 's'), + countLabel(functions, 'function', 's'), + countLabel(branches, 'branch', 'es') + ); + + if (skips.length === 0) { + return ''; + } + + return ` +
+ ${skips.join(', ')} + Ignored      +
+ `; + } + + return ` + + +${htmlHead(details)} + +
+
+

${details.pathHtml}

+
+ ${metricsTemplate(details.metrics.statements, 'Statements')} + ${metricsTemplate(details.metrics.branches, 'Branches')} + ${metricsTemplate(details.metrics.functions, 'Functions')} + ${metricsTemplate(details.metrics.lines, 'Lines')} + ${skipTemplate(details.metrics)} +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+ `; +} + +function footerTemplate(details) { + return ` +
+
+ + + + + + + + `; +} + +function detailTemplate(data) { + const lineNumbers = new Array(data.maxLines).fill().map((_, i) => i + 1); + const lineLink = num => + `${num}`; + const lineCount = line => + `${line.hits}`; + + /* This is rendered in a `
`, need control of all whitespace. */
+    return [
+        '',
+        `${lineNumbers
+            .map(lineLink)
+            .join('\n')}`,
+        `${data.lineCoverage
+            .map(lineCount)
+            .join('\n')}`,
+        `
${data.annotatedCode.join(
+            '\n'
+        )}
`, + '' + ].join(''); +} +const summaryTableHeader = [ + '
', + '', + '', + '', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + '', + '', + '' +].join('\n'); + +function summaryLineTemplate(details) { + const { reportClasses, metrics, file, output } = details; + const percentGraph = pct => { + if (!isFinite(pct)) { + return ''; + } + + const cls = ['cover-fill']; + if (pct === 100) { + cls.push('cover-full'); + } + + pct = Math.floor(pct); + return [ + `
`, + `
` + ].join(''); + }; + const summaryType = (type, showGraph = false) => { + const info = metrics[type]; + const reportClass = reportClasses[type]; + const result = [ + ``, + `` + ]; + if (showGraph) { + result.unshift( + `` + ); + } + + return result; + }; + + return [] + .concat( + '', + ``, + summaryType('statements', true), + summaryType('branches'), + summaryType('functions'), + summaryType('lines'), + '\n' + ) + .join('\n\t'); +} + +const summaryTableFooter = ['', '
FileStatementsBranchesFunctionsLines
${info.pct}%${info.covered}/${info.total}`, + `
${percentGraph(info.pct)}
`, + `
${html.escape(file)}
', '
'].join('\n'); +const emptyClasses = { + statements: 'empty', + lines: 'empty', + functions: 'empty', + branches: 'empty' +}; + +const standardLinkMapper = { + getPath(node) { + if (typeof node === 'string') { + return node; + } + let filePath = node.getQualifiedName(); + if (node.isSummary()) { + if (filePath !== '') { + filePath += '/index.html'; + } else { + filePath = 'index.html'; + } + } else { + filePath += '.html'; + } + return filePath; + }, + + relativePath(source, target) { + const targetPath = this.getPath(target); + const sourcePath = path.dirname(this.getPath(source)); + return path.posix.relative(sourcePath, targetPath); + }, + + assetPath(node, name) { + return this.relativePath(this.getPath(node), name); + } +}; + +function fixPct(metrics) { + Object.keys(emptyClasses).forEach(key => { + metrics[key].pct = 0; + }); + return metrics; +} + +class HtmlReport extends ReportBase { + constructor(opts) { + super(); + + this.verbose = opts.verbose; + this.linkMapper = opts.linkMapper || standardLinkMapper; + this.subdir = opts.subdir || ''; + this.date = new Date().toISOString(); + this.skipEmpty = opts.skipEmpty; + } + + getBreadcrumbHtml(node) { + let parent = node.getParent(); + const nodePath = []; + + while (parent) { + nodePath.push(parent); + parent = parent.getParent(); + } + + const linkPath = nodePath.map(ancestor => { + const target = this.linkMapper.relativePath(node, ancestor); + const name = ancestor.getRelativeName() || 'All files'; + return '' + name + ''; + }); + + linkPath.reverse(); + return linkPath.length > 0 + ? linkPath.join(' / ') + ' ' + node.getRelativeName() + : 'All files'; + } + + fillTemplate(node, templateData, context) { + const linkMapper = this.linkMapper; + const summary = node.getCoverageSummary(); + templateData.entity = node.getQualifiedName() || 'All files'; + templateData.metrics = summary; + templateData.reportClass = context.classForPercent( + 'statements', + summary.statements.pct + ); + templateData.pathHtml = this.getBreadcrumbHtml(node); + templateData.base = { + css: linkMapper.assetPath(node, 'base.css') + }; + templateData.sorter = { + js: linkMapper.assetPath(node, 'sorter.js'), + image: linkMapper.assetPath(node, 'sort-arrow-sprite.png') + }; + templateData.blockNavigation = { + js: linkMapper.assetPath(node, 'block-navigation.js') + }; + templateData.prettify = { + js: linkMapper.assetPath(node, 'prettify.js'), + css: linkMapper.assetPath(node, 'prettify.css') + }; + templateData.favicon = linkMapper.assetPath(node, 'favicon.png'); + } + + getTemplateData() { + return { datetime: this.date }; + } + + getWriter(context) { + if (!this.subdir) { + return context.writer; + } + return context.writer.writerForDir(this.subdir); + } + + onStart(root, context) { + const assetHeaders = { + '.js': '/* eslint-disable */\n' + }; + + ['.', 'vendor'].forEach(subdir => { + const writer = this.getWriter(context); + const srcDir = path.resolve(__dirname, 'assets', subdir); + fs.readdirSync(srcDir).forEach(f => { + const resolvedSource = path.resolve(srcDir, f); + const resolvedDestination = '.'; + const stat = fs.statSync(resolvedSource); + let dest; + + if (stat.isFile()) { + dest = resolvedDestination + '/' + f; + if (this.verbose) { + console.log('Write asset: ' + dest); + } + writer.copyFile( + resolvedSource, + dest, + assetHeaders[path.extname(f)] + ); + } + }); + }); + } + + onSummary(node, context) { + const linkMapper = this.linkMapper; + const templateData = this.getTemplateData(); + const children = node.getChildren(); + const skipEmpty = this.skipEmpty; + + this.fillTemplate(node, templateData, context); + const cw = this.getWriter(context).writeFile(linkMapper.getPath(node)); + cw.write(headerTemplate(templateData)); + cw.write(summaryTableHeader); + children.forEach(child => { + const metrics = child.getCoverageSummary(); + const isEmpty = metrics.isEmpty(); + if (skipEmpty && isEmpty) { + return; + } + const reportClasses = isEmpty + ? emptyClasses + : { + statements: context.classForPercent( + 'statements', + metrics.statements.pct + ), + lines: context.classForPercent( + 'lines', + metrics.lines.pct + ), + functions: context.classForPercent( + 'functions', + metrics.functions.pct + ), + branches: context.classForPercent( + 'branches', + metrics.branches.pct + ) + }; + const data = { + metrics: isEmpty ? fixPct(metrics) : metrics, + reportClasses, + file: child.getRelativeName(), + output: linkMapper.relativePath(node, child) + }; + cw.write(summaryLineTemplate(data) + '\n'); + }); + cw.write(summaryTableFooter); + cw.write(footerTemplate(templateData)); + cw.close(); + } + + onDetail(node, context) { + const linkMapper = this.linkMapper; + const templateData = this.getTemplateData(); + + this.fillTemplate(node, templateData, context); + const cw = this.getWriter(context).writeFile(linkMapper.getPath(node)); + cw.write(headerTemplate(templateData)); + cw.write('
\n');
+        cw.write(detailTemplate(annotator(node.getFileCoverage(), context)));
+        cw.write('
\n'); + cw.write(footerTemplate(templateData)); + cw.close(); + } +} + +module.exports = HtmlReport; diff --git a/node_modules/istanbul-reports/lib/html/insertion-text.js b/node_modules/istanbul-reports/lib/html/insertion-text.js new file mode 100644 index 00000000..6f806424 --- /dev/null +++ b/node_modules/istanbul-reports/lib/html/insertion-text.js @@ -0,0 +1,114 @@ +'use strict'; +/* + Copyright 2012-2015, Yahoo Inc. + Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ +function InsertionText(text, consumeBlanks) { + this.text = text; + this.origLength = text.length; + this.offsets = []; + this.consumeBlanks = consumeBlanks; + this.startPos = this.findFirstNonBlank(); + this.endPos = this.findLastNonBlank(); +} + +const WHITE_RE = /[ \f\n\r\t\v\u00A0\u2028\u2029]/; + +InsertionText.prototype = { + findFirstNonBlank() { + let pos = -1; + const text = this.text; + const len = text.length; + let i; + for (i = 0; i < len; i += 1) { + if (!text.charAt(i).match(WHITE_RE)) { + pos = i; + break; + } + } + return pos; + }, + findLastNonBlank() { + const text = this.text; + const len = text.length; + let pos = text.length + 1; + let i; + for (i = len - 1; i >= 0; i -= 1) { + if (!text.charAt(i).match(WHITE_RE)) { + pos = i; + break; + } + } + return pos; + }, + originalLength() { + return this.origLength; + }, + + insertAt(col, str, insertBefore, consumeBlanks) { + consumeBlanks = + typeof consumeBlanks === 'undefined' + ? this.consumeBlanks + : consumeBlanks; + col = col > this.originalLength() ? this.originalLength() : col; + col = col < 0 ? 0 : col; + + if (consumeBlanks) { + if (col <= this.startPos) { + col = 0; + } + if (col > this.endPos) { + col = this.origLength; + } + } + + const len = str.length; + const offset = this.findOffset(col, len, insertBefore); + const realPos = col + offset; + const text = this.text; + this.text = text.substring(0, realPos) + str + text.substring(realPos); + return this; + }, + + findOffset(pos, len, insertBefore) { + const offsets = this.offsets; + let offsetObj; + let cumulativeOffset = 0; + let i; + + for (i = 0; i < offsets.length; i += 1) { + offsetObj = offsets[i]; + if ( + offsetObj.pos < pos || + (offsetObj.pos === pos && !insertBefore) + ) { + cumulativeOffset += offsetObj.len; + } + if (offsetObj.pos >= pos) { + break; + } + } + if (offsetObj && offsetObj.pos === pos) { + offsetObj.len += len; + } else { + offsets.splice(i, 0, { pos, len }); + } + return cumulativeOffset; + }, + + wrap(startPos, startText, endPos, endText, consumeBlanks) { + this.insertAt(startPos, startText, true, consumeBlanks); + this.insertAt(endPos, endText, false, consumeBlanks); + return this; + }, + + wrapLine(startText, endText) { + this.wrap(0, startText, this.originalLength(), endText); + }, + + toString() { + return this.text; + } +}; + +module.exports = InsertionText; diff --git a/node_modules/istanbul-reports/lib/json-summary/index.js b/node_modules/istanbul-reports/lib/json-summary/index.js new file mode 100644 index 00000000..318a47fa --- /dev/null +++ b/node_modules/istanbul-reports/lib/json-summary/index.js @@ -0,0 +1,56 @@ +/* + Copyright 2012-2015, Yahoo Inc. + Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ +'use strict'; +const { ReportBase } = require('istanbul-lib-report'); + +class JsonSummaryReport extends ReportBase { + constructor(opts) { + super(); + + this.file = opts.file || 'coverage-summary.json'; + this.contentWriter = null; + this.first = true; + } + + onStart(root, context) { + this.contentWriter = context.writer.writeFile(this.file); + this.contentWriter.write('{'); + } + + writeSummary(filePath, sc) { + const cw = this.contentWriter; + if (this.first) { + this.first = false; + } else { + cw.write(','); + } + cw.write(JSON.stringify(filePath)); + cw.write(': '); + cw.write(JSON.stringify(sc)); + cw.println(''); + } + + onSummary(node) { + if (!node.isRoot()) { + return; + } + this.writeSummary('total', node.getCoverageSummary()); + } + + onDetail(node) { + this.writeSummary( + node.getFileCoverage().path, + node.getCoverageSummary() + ); + } + + onEnd() { + const cw = this.contentWriter; + cw.println('}'); + cw.close(); + } +} + +module.exports = JsonSummaryReport; diff --git a/node_modules/istanbul-reports/lib/json/index.js b/node_modules/istanbul-reports/lib/json/index.js new file mode 100644 index 00000000..bcae6aea --- /dev/null +++ b/node_modules/istanbul-reports/lib/json/index.js @@ -0,0 +1,44 @@ +/* + Copyright 2012-2015, Yahoo Inc. + Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ +'use strict'; +const { ReportBase } = require('istanbul-lib-report'); + +class JsonReport extends ReportBase { + constructor(opts) { + super(); + + this.file = opts.file || 'coverage-final.json'; + this.first = true; + } + + onStart(root, context) { + this.contentWriter = context.writer.writeFile(this.file); + this.contentWriter.write('{'); + } + + onDetail(node) { + const fc = node.getFileCoverage(); + const key = fc.path; + const cw = this.contentWriter; + + if (this.first) { + this.first = false; + } else { + cw.write(','); + } + cw.write(JSON.stringify(key)); + cw.write(': '); + cw.write(JSON.stringify(fc)); + cw.println(''); + } + + onEnd() { + const cw = this.contentWriter; + cw.println('}'); + cw.close(); + } +} + +module.exports = JsonReport; diff --git a/node_modules/istanbul-reports/lib/lcov/index.js b/node_modules/istanbul-reports/lib/lcov/index.js new file mode 100644 index 00000000..383c2027 --- /dev/null +++ b/node_modules/istanbul-reports/lib/lcov/index.js @@ -0,0 +1,33 @@ +'use strict'; +/* + Copyright 2012-2015, Yahoo Inc. + Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ +const { ReportBase } = require('istanbul-lib-report'); +const LcovOnlyReport = require('../lcovonly'); +const HtmlReport = require('../html'); + +class LcovReport extends ReportBase { + constructor(opts) { + super(); + this.lcov = new LcovOnlyReport({ file: 'lcov.info', ...opts }); + this.html = new HtmlReport({ subdir: 'lcov-report' }); + } +} + +['Start', 'End', 'Summary', 'SummaryEnd', 'Detail'].forEach(what => { + const meth = 'on' + what; + LcovReport.prototype[meth] = function(...args) { + const lcov = this.lcov; + const html = this.html; + + if (lcov[meth]) { + lcov[meth](...args); + } + if (html[meth]) { + html[meth](...args); + } + }; +}); + +module.exports = LcovReport; diff --git a/node_modules/istanbul-reports/lib/lcovonly/index.js b/node_modules/istanbul-reports/lib/lcovonly/index.js new file mode 100644 index 00000000..0720e469 --- /dev/null +++ b/node_modules/istanbul-reports/lib/lcovonly/index.js @@ -0,0 +1,77 @@ +/* + Copyright 2012-2015, Yahoo Inc. + Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ +'use strict'; +const { ReportBase } = require('istanbul-lib-report'); + +class LcovOnlyReport extends ReportBase { + constructor(opts) { + super(); + opts = opts || {}; + this.file = opts.file || 'lcov.info'; + this.projectRoot = opts.projectRoot || process.cwd(); + this.contentWriter = null; + } + + onStart(root, context) { + this.contentWriter = context.writer.writeFile(this.file); + } + + onDetail(node) { + const fc = node.getFileCoverage(); + const writer = this.contentWriter; + const functions = fc.f; + const functionMap = fc.fnMap; + const lines = fc.getLineCoverage(); + const branches = fc.b; + const branchMap = fc.branchMap; + const summary = node.getCoverageSummary(); + const path = require('path'); + + writer.println('TN:'); + const fileName = path.relative(this.projectRoot, fc.path); + writer.println('SF:' + fileName); + + Object.values(functionMap).forEach(meta => { + // Some versions of the instrumenter in the wild populate 'loc' + // but not 'decl': + const decl = meta.decl || meta.loc; + writer.println('FN:' + [decl.start.line, meta.name].join(',')); + }); + writer.println('FNF:' + summary.functions.total); + writer.println('FNH:' + summary.functions.covered); + + Object.entries(functionMap).forEach(([key, meta]) => { + const stats = functions[key]; + writer.println('FNDA:' + [stats, meta.name].join(',')); + }); + + Object.entries(lines).forEach(entry => { + writer.println('DA:' + entry.join(',')); + }); + writer.println('LF:' + summary.lines.total); + writer.println('LH:' + summary.lines.covered); + + Object.entries(branches).forEach(([key, branchArray]) => { + const meta = branchMap[key]; + if (meta) { + const { line } = meta.loc.start; + branchArray.forEach((b, i) => { + writer.println('BRDA:' + [line, key, i, b].join(',')); + }); + } else { + console.warn('Missing coverage entries in', fileName, key); + } + }); + writer.println('BRF:' + summary.branches.total); + writer.println('BRH:' + summary.branches.covered); + writer.println('end_of_record'); + } + + onEnd() { + this.contentWriter.close(); + } +} + +module.exports = LcovOnlyReport; diff --git a/node_modules/istanbul-reports/lib/none/index.js b/node_modules/istanbul-reports/lib/none/index.js new file mode 100644 index 00000000..81c14088 --- /dev/null +++ b/node_modules/istanbul-reports/lib/none/index.js @@ -0,0 +1,10 @@ +'use strict'; +/* + Copyright 2012-2015, Yahoo Inc. + Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ +const { ReportBase } = require('istanbul-lib-report'); + +class NoneReport extends ReportBase {} + +module.exports = NoneReport; diff --git a/node_modules/istanbul-reports/lib/teamcity/index.js b/node_modules/istanbul-reports/lib/teamcity/index.js new file mode 100644 index 00000000..2bca26a8 --- /dev/null +++ b/node_modules/istanbul-reports/lib/teamcity/index.js @@ -0,0 +1,67 @@ +/* + Copyright 2012-2015, Yahoo Inc. + Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ +'use strict'; +const { ReportBase } = require('istanbul-lib-report'); + +class TeamcityReport extends ReportBase { + constructor(opts) { + super(); + + opts = opts || {}; + this.file = opts.file || null; + this.blockName = opts.blockName || 'Code Coverage Summary'; + } + + onStart(node, context) { + const metrics = node.getCoverageSummary(); + const cw = context.writer.writeFile(this.file); + + cw.println(''); + cw.println("##teamcity[blockOpened name='" + this.blockName + "']"); + + //Statements Covered + cw.println( + lineForKey(metrics.statements.covered, 'CodeCoverageAbsBCovered') + ); + cw.println( + lineForKey(metrics.statements.total, 'CodeCoverageAbsBTotal') + ); + + //Branches Covered + cw.println( + lineForKey(metrics.branches.covered, 'CodeCoverageAbsRCovered') + ); + cw.println(lineForKey(metrics.branches.total, 'CodeCoverageAbsRTotal')); + + //Functions Covered + cw.println( + lineForKey(metrics.functions.covered, 'CodeCoverageAbsMCovered') + ); + cw.println( + lineForKey(metrics.functions.total, 'CodeCoverageAbsMTotal') + ); + + //Lines Covered + cw.println( + lineForKey(metrics.lines.covered, 'CodeCoverageAbsLCovered') + ); + cw.println(lineForKey(metrics.lines.total, 'CodeCoverageAbsLTotal')); + + cw.println("##teamcity[blockClosed name='" + this.blockName + "']"); + cw.close(); + } +} + +function lineForKey(value, teamcityVar) { + return ( + "##teamcity[buildStatisticValue key='" + + teamcityVar + + "' value='" + + value + + "']" + ); +} + +module.exports = TeamcityReport; diff --git a/node_modules/istanbul-reports/lib/text-lcov/index.js b/node_modules/istanbul-reports/lib/text-lcov/index.js new file mode 100644 index 00000000..847aedfd --- /dev/null +++ b/node_modules/istanbul-reports/lib/text-lcov/index.js @@ -0,0 +1,17 @@ +'use strict'; +/* + Copyright 2012-2015, Yahoo Inc. + Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ +const LcovOnly = require('../lcovonly'); + +class TextLcov extends LcovOnly { + constructor(opts) { + super({ + ...opts, + file: '-' + }); + } +} + +module.exports = TextLcov; diff --git a/node_modules/istanbul-reports/lib/text-summary/index.js b/node_modules/istanbul-reports/lib/text-summary/index.js new file mode 100644 index 00000000..a9e6eab3 --- /dev/null +++ b/node_modules/istanbul-reports/lib/text-summary/index.js @@ -0,0 +1,62 @@ +/* + Copyright 2012-2015, Yahoo Inc. + Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ +'use strict'; +const { ReportBase } = require('istanbul-lib-report'); + +class TextSummaryReport extends ReportBase { + constructor(opts) { + super(); + + opts = opts || {}; + this.file = opts.file || null; + } + + onStart(node, context) { + const summary = node.getCoverageSummary(); + const cw = context.writer.writeFile(this.file); + const printLine = function(key) { + const str = lineForKey(summary, key); + const clazz = context.classForPercent(key, summary[key].pct); + cw.println(cw.colorize(str, clazz)); + }; + + cw.println(''); + cw.println( + '=============================== Coverage summary ===============================' + ); + printLine('statements'); + printLine('branches'); + printLine('functions'); + printLine('lines'); + cw.println( + '================================================================================' + ); + cw.close(); + } +} + +function lineForKey(summary, key) { + const metrics = summary[key]; + + key = key.substring(0, 1).toUpperCase() + key.substring(1); + if (key.length < 12) { + key += ' '.substring(0, 12 - key.length); + } + const result = [ + key, + ':', + metrics.pct + '%', + '(', + metrics.covered + '/' + metrics.total, + ')' + ].join(' '); + const skipped = metrics.skipped; + if (skipped > 0) { + return result + ', ' + skipped + ' ignored'; + } + return result; +} + +module.exports = TextSummaryReport; diff --git a/node_modules/istanbul-reports/lib/text/index.js b/node_modules/istanbul-reports/lib/text/index.js new file mode 100644 index 00000000..c28cedb0 --- /dev/null +++ b/node_modules/istanbul-reports/lib/text/index.js @@ -0,0 +1,298 @@ +/* + Copyright 2012-2015, Yahoo Inc. + Copyrights licensed under the New BSD License. See the accompanying LICENSE + file for terms. + */ +'use strict'; +const { ReportBase } = require('istanbul-lib-report'); + +const NAME_COL = 4; +const PCT_COLS = 7; +const MISSING_COL = 17; +const TAB_SIZE = 1; +const DELIM = ' | '; + +function padding(num, ch) { + let str = ''; + let i; + ch = ch || ' '; + for (i = 0; i < num; i += 1) { + str += ch; + } + return str; +} + +function fill(str, width, right, tabs) { + tabs = tabs || 0; + str = String(str); + + const leadingSpaces = tabs * TAB_SIZE; + const remaining = width - leadingSpaces; + const leader = padding(leadingSpaces); + let fmtStr = ''; + + if (remaining > 0) { + const strlen = str.length; + let fillStr; + + if (remaining >= strlen) { + fillStr = padding(remaining - strlen); + } else { + fillStr = '...'; + const length = remaining - fillStr.length; + + str = str.substring(strlen - length); + right = true; + } + fmtStr = right ? fillStr + str : str + fillStr; + } + + return leader + fmtStr; +} + +function formatName(name, maxCols, level) { + return fill(name, maxCols, false, level); +} + +function formatPct(pct, width) { + return fill(pct, width || PCT_COLS, true, 0); +} + +function nodeMissing(node) { + if (node.isSummary()) { + return ''; + } + + const metrics = node.getCoverageSummary(); + const isEmpty = metrics.isEmpty(); + const lines = isEmpty ? 0 : metrics.lines.pct; + + let coveredLines; + + const fileCoverage = node.getFileCoverage(); + if (lines === 100) { + const branches = fileCoverage.getBranchCoverageByLine(); + coveredLines = Object.entries(branches).map(([key, { coverage }]) => [ + key, + coverage === 100 + ]); + } else { + coveredLines = Object.entries(fileCoverage.getLineCoverage()); + } + + let newRange = true; + const ranges = coveredLines + .reduce((acum, [line, hit]) => { + if (hit) newRange = true; + else { + line = parseInt(line); + if (newRange) { + acum.push([line]); + newRange = false; + } else acum[acum.length - 1][1] = line; + } + + return acum; + }, []) + .map(range => { + const { length } = range; + + if (length === 1) return range[0]; + + return `${range[0]}-${range[1]}`; + }); + + return [].concat(...ranges).join(','); +} + +function nodeName(node) { + return node.getRelativeName() || 'All files'; +} + +function depthFor(node) { + let ret = 0; + node = node.getParent(); + while (node) { + ret += 1; + node = node.getParent(); + } + return ret; +} + +function nullDepthFor() { + return 0; +} + +function findWidth(node, context, nodeExtractor, depthFor = nullDepthFor) { + let last = 0; + function compareWidth(node) { + last = Math.max( + last, + TAB_SIZE * depthFor(node) + nodeExtractor(node).length + ); + } + const visitor = { + onSummary: compareWidth, + onDetail: compareWidth + }; + node.visit(context.getVisitor(visitor)); + return last; +} + +function makeLine(nameWidth, missingWidth) { + const name = padding(nameWidth, '-'); + const pct = padding(PCT_COLS, '-'); + const elements = []; + + elements.push(name); + elements.push(pct); + elements.push(padding(PCT_COLS + 1, '-')); + elements.push(pct); + elements.push(pct); + elements.push(padding(missingWidth, '-')); + return elements.join(DELIM.replace(/ /g, '-')) + '-'; +} + +function tableHeader(maxNameCols, missingWidth) { + const elements = []; + elements.push(formatName('File', maxNameCols, 0)); + elements.push(formatPct('% Stmts')); + elements.push(formatPct('% Branch', PCT_COLS + 1)); + elements.push(formatPct('% Funcs')); + elements.push(formatPct('% Lines')); + elements.push(formatName('Uncovered Line #s', missingWidth)); + return elements.join(DELIM) + ' '; +} + +function isFull(metrics) { + return ( + metrics.statements.pct === 100 && + metrics.branches.pct === 100 && + metrics.functions.pct === 100 && + metrics.lines.pct === 100 + ); +} + +function tableRow( + node, + context, + colorizer, + maxNameCols, + level, + skipEmpty, + skipFull, + missingWidth +) { + const name = nodeName(node); + const metrics = node.getCoverageSummary(); + const isEmpty = metrics.isEmpty(); + if (skipEmpty && isEmpty) { + return ''; + } + if (skipFull && isFull(metrics)) { + return ''; + } + + const mm = { + statements: isEmpty ? 0 : metrics.statements.pct, + branches: isEmpty ? 0 : metrics.branches.pct, + functions: isEmpty ? 0 : metrics.functions.pct, + lines: isEmpty ? 0 : metrics.lines.pct + }; + const colorize = isEmpty + ? function(str) { + return str; + } + : function(str, key) { + return colorizer(str, context.classForPercent(key, mm[key])); + }; + const elements = []; + + elements.push(colorize(formatName(name, maxNameCols, level), 'statements')); + elements.push(colorize(formatPct(mm.statements), 'statements')); + elements.push(colorize(formatPct(mm.branches, PCT_COLS + 1), 'branches')); + elements.push(colorize(formatPct(mm.functions), 'functions')); + elements.push(colorize(formatPct(mm.lines), 'lines')); + elements.push( + colorizer( + formatName(nodeMissing(node), missingWidth), + mm.lines === 100 ? 'medium' : 'low' + ) + ); + + return elements.join(DELIM) + ' '; +} + +class TextReport extends ReportBase { + constructor(opts) { + super(opts); + + opts = opts || {}; + const { maxCols } = opts; + + this.file = opts.file || null; + this.maxCols = maxCols != null ? maxCols : process.stdout.columns || 80; + this.cw = null; + this.skipEmpty = opts.skipEmpty; + this.skipFull = opts.skipFull; + } + + onStart(root, context) { + this.cw = context.writer.writeFile(this.file); + this.nameWidth = Math.max( + NAME_COL, + findWidth(root, context, nodeName, depthFor) + ); + this.missingWidth = Math.max( + MISSING_COL, + findWidth(root, context, nodeMissing) + ); + + if (this.maxCols > 0) { + const pct_cols = DELIM.length + 4 * (PCT_COLS + DELIM.length) + 2; + + const maxRemaining = this.maxCols - (pct_cols + MISSING_COL); + if (this.nameWidth > maxRemaining) { + this.nameWidth = maxRemaining; + this.missingWidth = MISSING_COL; + } else if (this.nameWidth < maxRemaining) { + const maxRemaining = this.maxCols - (this.nameWidth + pct_cols); + if (this.missingWidth > maxRemaining) { + this.missingWidth = maxRemaining; + } + } + } + const line = makeLine(this.nameWidth, this.missingWidth); + this.cw.println(line); + this.cw.println(tableHeader(this.nameWidth, this.missingWidth)); + this.cw.println(line); + } + + onSummary(node, context) { + const nodeDepth = depthFor(node); + const row = tableRow( + node, + context, + this.cw.colorize.bind(this.cw), + this.nameWidth, + nodeDepth, + this.skipEmpty, + this.skipFull, + this.missingWidth + ); + if (row) { + this.cw.println(row); + } + } + + onDetail(node, context) { + return this.onSummary(node, context); + } + + onEnd() { + this.cw.println(makeLine(this.nameWidth, this.missingWidth)); + this.cw.close(); + } +} + +module.exports = TextReport; diff --git a/node_modules/istanbul-reports/package.json b/node_modules/istanbul-reports/package.json new file mode 100644 index 00000000..fcfa841f --- /dev/null +++ b/node_modules/istanbul-reports/package.json @@ -0,0 +1,60 @@ +{ + "name": "istanbul-reports", + "version": "3.1.7", + "description": "istanbul reports", + "author": "Krishnan Anantheswaran ", + "main": "index.js", + "files": [ + "index.js", + "lib" + ], + "scripts": { + "test": "nyc mocha --recursive", + "prepare": "webpack --config lib/html-spa/webpack.config.js --mode production", + "prepare:watch": "webpack --config lib/html-spa/webpack.config.js --watch --mode development" + }, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "devDependencies": { + "@babel/core": "^7.7.5", + "@babel/preset-env": "^7.7.5", + "@babel/preset-react": "^7.7.4", + "babel-loader": "^8.0.6", + "chai": "^4.2.0", + "is-windows": "^1.0.2", + "istanbul-lib-coverage": "^3.0.0", + "mocha": "^6.2.2", + "nyc": "^15.0.0-beta.2", + "react": "^16.12.0", + "react-dom": "^16.12.0", + "webpack": "^4.41.2", + "webpack-cli": "^3.3.10" + }, + "license": "BSD-3-Clause", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/istanbuljs/istanbuljs.git", + "directory": "packages/istanbul-reports" + }, + "keywords": [ + "istanbul", + "reports" + ], + "bugs": { + "url": "https://github.com/istanbuljs/istanbuljs/issues" + }, + "homepage": "https://istanbul.js.org/", + "nyc": { + "exclude": [ + "lib/html/assets/**", + "lib/html-spa/assets/**", + "lib/html-spa/rollup.config.js", + "test/**" + ] + }, + "engines": { + "node": ">=8" + } +} diff --git a/node_modules/jest-changed-files/LICENSE b/node_modules/jest-changed-files/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-changed-files/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-changed-files/README.md b/node_modules/jest-changed-files/README.md new file mode 100644 index 00000000..54b96079 --- /dev/null +++ b/node_modules/jest-changed-files/README.md @@ -0,0 +1,95 @@ +# jest-changed-files + +A module used internally by Jest to check which files have changed since you last committed in git or hg. + +## Install + +```sh +$ npm install --save jest-changed-files +``` + +## API + +### `getChangedFilesForRoots(roots: Array, options: Options): Promise` + +Get the list of files and repos that have changed since the last commit. + +#### Parameters + +roots: Array of string paths gathered from [jest roots](https://jestjs.io/docs/configuration#roots-arraystring). + +options: Object literal with keys + +- lastCommit: boolean +- withAncestor: boolean +- changedSince: string + +### Returns + +A Promise of Object literal with keys + +- changedFiles: Set\ +- repos: + - git: Set\ + - hg: Set\ + +### findRepos(roots: Array): Promise + +Get a set of git and hg repositories. + +#### Parameters + +roots: Array of string paths gathered from [jest roots](https://jestjs.io/docs/configuration#roots-arraystring). + +### Returns + +A Promise of Object literal with keys + +- git: Set\ +- hg: Set\ + +## Usage + +```javascript +import {getChangedFilesForRoots} from 'jest-changed-files'; + +getChangedFilesForRoots(['/path/to/test'], { + lastCommit: true, + withAncestor: true, +}).then(files => { + /* + { + repos: [], + changedFiles: [] + } + */ +}); +``` + +```javascript +import {getChangedFilesForRoots} from 'jest-changed-files'; + +getChangedFilesForRoots(['/path/to/test'], { + changedSince: 'main', +}).then(files => { + /* + { + repos: [], + changedFiles: [] + } + */ +}); +``` + +```javascript +import {findRepos} from 'jest-changed-files'; + +findRepos(['/path/to/test']).then(repos => { + /* + { + git: Set, + hg: Set + } + */ +}); +``` diff --git a/node_modules/jest-changed-files/build/git.js b/node_modules/jest-changed-files/build/git.js new file mode 100644 index 00000000..4a443e42 --- /dev/null +++ b/node_modules/jest-changed-files/build/git.js @@ -0,0 +1,169 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _util() { + const data = require('util'); + _util = function () { + return data; + }; + return data; +} +function _execa() { + const data = _interopRequireDefault(require('execa')); + _execa = function () { + return data; + }; + return data; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +const findChangedFilesUsingCommand = async (args, cwd) => { + let result; + try { + result = await (0, _execa().default)('git', args, { + cwd + }); + } catch (e) { + if (_util().types.isNativeError(e)) { + const err = e; + // TODO: Should we keep the original `message`? + err.message = err.stderr; + } + throw e; + } + return result.stdout + .split('\n') + .filter(s => s !== '') + .map(changedPath => path().resolve(cwd, changedPath)); +}; +const adapter = { + findChangedFiles: async (cwd, options) => { + const changedSince = + options.withAncestor === true ? 'HEAD^' : options.changedSince; + const includePaths = (options.includePaths ?? []).map(absoluteRoot => + path().normalize(path().relative(cwd, absoluteRoot)) + ); + if (options.lastCommit === true) { + return findChangedFilesUsingCommand( + ['show', '--name-only', '--pretty=format:', 'HEAD', '--'].concat( + includePaths + ), + cwd + ); + } + if (changedSince != null && changedSince.length > 0) { + const [committed, staged, unstaged] = await Promise.all([ + findChangedFilesUsingCommand( + ['diff', '--name-only', `${changedSince}...HEAD`, '--'].concat( + includePaths + ), + cwd + ), + findChangedFilesUsingCommand( + ['diff', '--cached', '--name-only', '--'].concat(includePaths), + cwd + ), + findChangedFilesUsingCommand( + [ + 'ls-files', + '--other', + '--modified', + '--exclude-standard', + '--' + ].concat(includePaths), + cwd + ) + ]); + return [...committed, ...staged, ...unstaged]; + } + const [staged, unstaged] = await Promise.all([ + findChangedFilesUsingCommand( + ['diff', '--cached', '--name-only', '--'].concat(includePaths), + cwd + ), + findChangedFilesUsingCommand( + [ + 'ls-files', + '--other', + '--modified', + '--exclude-standard', + '--' + ].concat(includePaths), + cwd + ) + ]); + return [...staged, ...unstaged]; + }, + getRoot: async cwd => { + const options = ['rev-parse', '--show-cdup']; + try { + const result = await (0, _execa().default)('git', options, { + cwd + }); + return path().resolve(cwd, result.stdout); + } catch { + return null; + } + } +}; +var _default = adapter; +exports.default = _default; diff --git a/node_modules/jest-changed-files/build/hg.js b/node_modules/jest-changed-files/build/hg.js new file mode 100644 index 00000000..b6836c0c --- /dev/null +++ b/node_modules/jest-changed-files/build/hg.js @@ -0,0 +1,130 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _util() { + const data = require('util'); + _util = function () { + return data; + }; + return data; +} +function _execa() { + const data = _interopRequireDefault(require('execa')); + _execa = function () { + return data; + }; + return data; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +const env = { + ...process.env, + HGPLAIN: '1' +}; +const adapter = { + findChangedFiles: async (cwd, options) => { + const includePaths = options.includePaths ?? []; + const args = ['status', '-amnu']; + if (options.withAncestor === true) { + args.push('--rev', 'first(min(!public() & ::.)^+.^)'); + } else if ( + options.changedSince != null && + options.changedSince.length > 0 + ) { + args.push('--rev', `ancestor(., ${options.changedSince})`); + } else if (options.lastCommit === true) { + args.push('--change', '.'); + } + args.push(...includePaths); + let result; + try { + result = await (0, _execa().default)('hg', args, { + cwd, + env + }); + } catch (e) { + if (_util().types.isNativeError(e)) { + const err = e; + // TODO: Should we keep the original `message`? + err.message = err.stderr; + } + throw e; + } + return result.stdout + .split('\n') + .filter(s => s !== '') + .map(changedPath => path().resolve(cwd, changedPath)); + }, + getRoot: async cwd => { + try { + const result = await (0, _execa().default)('hg', ['root'], { + cwd, + env + }); + return result.stdout; + } catch { + return null; + } + } +}; +var _default = adapter; +exports.default = _default; diff --git a/node_modules/jest-changed-files/build/index.d.ts b/node_modules/jest-changed-files/build/index.d.ts new file mode 100644 index 00000000..fd8e08bf --- /dev/null +++ b/node_modules/jest-changed-files/build/index.d.ts @@ -0,0 +1,36 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +export declare type ChangedFiles = { + repos: Repos; + changedFiles: Paths; +}; + +export declare type ChangedFilesPromise = Promise; + +export declare const findRepos: (roots: Array) => Promise; + +export declare const getChangedFilesForRoots: ( + roots: Array, + options: Options, +) => ChangedFilesPromise; + +declare type Options = { + lastCommit?: boolean; + withAncestor?: boolean; + changedSince?: string; + includePaths?: Array; +}; + +declare type Paths = Set; + +declare type Repos = { + git: Paths; + hg: Paths; + sl: Paths; +}; + +export {}; diff --git a/node_modules/jest-changed-files/build/index.js b/node_modules/jest-changed-files/build/index.js new file mode 100644 index 00000000..c8107dc8 --- /dev/null +++ b/node_modules/jest-changed-files/build/index.js @@ -0,0 +1,82 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.getChangedFilesForRoots = exports.findRepos = void 0; +function _pLimit() { + const data = _interopRequireDefault(require('p-limit')); + _pLimit = function () { + return data; + }; + return data; +} +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +var _git = _interopRequireDefault(require('./git')); +var _hg = _interopRequireDefault(require('./hg')); +var _sl = _interopRequireDefault(require('./sl')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +// This is an arbitrary number. The main goal is to prevent projects with +// many roots (50+) from spawning too many processes at once. +const mutex = (0, _pLimit().default)(5); +const findGitRoot = dir => mutex(() => _git.default.getRoot(dir)); +const findHgRoot = dir => mutex(() => _hg.default.getRoot(dir)); +const findSlRoot = dir => mutex(() => _sl.default.getRoot(dir)); +const getChangedFilesForRoots = async (roots, options) => { + const repos = await findRepos(roots); + const changedFilesOptions = { + includePaths: roots, + ...options + }; + const gitPromises = Array.from(repos.git, repo => + _git.default.findChangedFiles(repo, changedFilesOptions) + ); + const hgPromises = Array.from(repos.hg, repo => + _hg.default.findChangedFiles(repo, changedFilesOptions) + ); + const slPromises = Array.from(repos.sl, repo => + _sl.default.findChangedFiles(repo, changedFilesOptions) + ); + const changedFiles = ( + await Promise.all([...gitPromises, ...hgPromises, ...slPromises]) + ).reduce((allFiles, changedFilesInTheRepo) => { + for (const file of changedFilesInTheRepo) { + allFiles.add(file); + } + return allFiles; + }, new Set()); + return { + changedFiles, + repos + }; +}; +exports.getChangedFilesForRoots = getChangedFilesForRoots; +const findRepos = async roots => { + const [gitRepos, hgRepos, slRepos] = await Promise.all([ + Promise.all(roots.map(findGitRoot)), + Promise.all(roots.map(findHgRoot)), + Promise.all(roots.map(findSlRoot)) + ]); + return { + git: new Set(gitRepos.filter(_jestUtil().isNonNullable)), + hg: new Set(hgRepos.filter(_jestUtil().isNonNullable)), + sl: new Set(slRepos.filter(_jestUtil().isNonNullable)) + }; +}; +exports.findRepos = findRepos; diff --git a/node_modules/jest-changed-files/build/sl.js b/node_modules/jest-changed-files/build/sl.js new file mode 100644 index 00000000..6c42e589 --- /dev/null +++ b/node_modules/jest-changed-files/build/sl.js @@ -0,0 +1,134 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _util() { + const data = require('util'); + _util = function () { + return data; + }; + return data; +} +function _execa() { + const data = _interopRequireDefault(require('execa')); + _execa = function () { + return data; + }; + return data; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +/** + * Disable any configuration settings that might change Sapling's default output. + * More info in `sl help environment`. _HG_PLAIN is intentional + */ +const env = { + ...process.env, + HGPLAIN: '1' +}; +const adapter = { + findChangedFiles: async (cwd, options) => { + const includePaths = options.includePaths ?? []; + const args = ['status', '-amnu']; + if (options.withAncestor === true) { + args.push('--rev', 'first(min(!public() & ::.)^+.^)'); + } else if ( + options.changedSince != null && + options.changedSince.length > 0 + ) { + args.push('--rev', `ancestor(., ${options.changedSince})`); + } else if (options.lastCommit === true) { + args.push('--change', '.'); + } + args.push(...includePaths); + let result; + try { + result = await (0, _execa().default)('sl', args, { + cwd, + env + }); + } catch (e) { + if (_util().types.isNativeError(e)) { + const err = e; + // TODO: Should we keep the original `message`? + err.message = err.stderr; + } + throw e; + } + return result.stdout + .split('\n') + .filter(s => s !== '') + .map(changedPath => path().resolve(cwd, changedPath)); + }, + getRoot: async cwd => { + try { + const result = await (0, _execa().default)('sl', ['root'], { + cwd, + env + }); + return result.stdout; + } catch { + return null; + } + } +}; +var _default = adapter; +exports.default = _default; diff --git a/node_modules/jest-changed-files/build/types.js b/node_modules/jest-changed-files/build/types.js new file mode 100644 index 00000000..ad9a93a7 --- /dev/null +++ b/node_modules/jest-changed-files/build/types.js @@ -0,0 +1 @@ +'use strict'; diff --git a/node_modules/jest-changed-files/package.json b/node_modules/jest-changed-files/package.json new file mode 100644 index 00000000..143782dc --- /dev/null +++ b/node_modules/jest-changed-files/package.json @@ -0,0 +1,31 @@ +{ + "name": "jest-changed-files", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-changed-files" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-circus/LICENSE b/node_modules/jest-circus/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-circus/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-circus/README.md b/node_modules/jest-circus/README.md new file mode 100644 index 00000000..6c5c6836 --- /dev/null +++ b/node_modules/jest-circus/README.md @@ -0,0 +1,65 @@ +[type-definitions]: https://github.com/jestjs/jest/blob/main/packages/jest-types/src/Circus.ts + +

+ + +

jest-circus

+

The next-gen test runner for Jest

+

+ +## Overview + +Circus is a flux-based test runner for Jest that is fast, maintainable, and simple to extend. + +Circus allows you to bind to events via an optional event handler on any [custom environment](https://jestjs.io/docs/configuration#testenvironment-string). See the [type definitions][type-definitions] for more information on the events and state data currently available. + +```js +import {Event, State} from 'jest-circus'; +import {TestEnvironment as NodeEnvironment} from 'jest-environment-node'; + +class MyCustomEnvironment extends NodeEnvironment { + //... + + async handleTestEvent(event: Event, state: State) { + if (event.name === 'test_start') { + // ... + } + } +} +``` + +Mutating event or state data is currently unsupported and may cause unexpected behavior or break in a future release without warning. New events, event data, and/or state data will not be considered a breaking change and may be added in any minor release. + +Note, that `jest-circus` test runner would pause until a promise returned from `handleTestEvent` gets fulfilled. **However, there are a few events that do not conform to this rule, namely**: `start_describe_definition`, `finish_describe_definition`, `add_hook`, `add_test` or `error` (for the up-to-date list you can look at [SyncEvent type in the types definitions][type-definitions]). That is caused by backward compatibility reasons and `process.on('unhandledRejection', callback)` signature, but that usually should not be a problem for most of the use cases. + +## Installation + +> Note: As of Jest 27, `jest-circus` is the default test runner, so you do not have to install it to use it. + +Install `jest-circus` using yarn: + +```bash +yarn add --dev jest-circus +``` + +Or via npm: + +```bash +npm install --save-dev jest-circus +``` + +## Configure + +Configure Jest to use `jest-circus` via the [`testRunner`](https://jestjs.io/docs/configuration#testrunner-string) option: + +```json +{ + "testRunner": "jest-circus/runner" +} +``` + +Or via CLI: + +```bash +jest --testRunner='jest-circus/runner' +``` diff --git a/node_modules/jest-circus/build/eventHandler.js b/node_modules/jest-circus/build/eventHandler.js new file mode 100644 index 00000000..ececd7b2 --- /dev/null +++ b/node_modules/jest-circus/build/eventHandler.js @@ -0,0 +1,281 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +var _jestUtil = require('jest-util'); +var _globalErrorHandlers = require('./globalErrorHandlers'); +var _types = require('./types'); +var _utils = require('./utils'); +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +var jestNow = globalThis[Symbol.for('jest-native-now')] || globalThis.Date.now; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +const eventHandler = (event, state) => { + switch (event.name) { + case 'include_test_location_in_result': { + state.includeTestLocationInResult = true; + break; + } + case 'hook_start': { + event.hook.seenDone = false; + break; + } + case 'start_describe_definition': { + const {blockName, mode} = event; + const {currentDescribeBlock, currentlyRunningTest} = state; + if (currentlyRunningTest) { + currentlyRunningTest.errors.push( + new Error( + `Cannot nest a describe inside a test. Describe block "${blockName}" cannot run because it is nested within "${currentlyRunningTest.name}".` + ) + ); + break; + } + const describeBlock = (0, _utils.makeDescribe)( + blockName, + currentDescribeBlock, + mode + ); + currentDescribeBlock.children.push(describeBlock); + state.currentDescribeBlock = describeBlock; + break; + } + case 'finish_describe_definition': { + const {currentDescribeBlock} = state; + (0, _jestUtil.invariant)( + currentDescribeBlock, + 'currentDescribeBlock must be there' + ); + if (!(0, _utils.describeBlockHasTests)(currentDescribeBlock)) { + currentDescribeBlock.hooks.forEach(hook => { + hook.asyncError.message = `Invalid: ${hook.type}() may not be used in a describe block containing no tests.`; + state.unhandledErrors.push(hook.asyncError); + }); + } + + // pass mode of currentDescribeBlock to tests + // but do not when there is already a single test with "only" mode + const shouldPassMode = !( + currentDescribeBlock.mode === 'only' && + currentDescribeBlock.children.some( + child => child.type === 'test' && child.mode === 'only' + ) + ); + if (shouldPassMode) { + currentDescribeBlock.children.forEach(child => { + if (child.type === 'test' && !child.mode) { + child.mode = currentDescribeBlock.mode; + } + }); + } + if ( + !state.hasFocusedTests && + currentDescribeBlock.mode !== 'skip' && + currentDescribeBlock.children.some( + child => child.type === 'test' && child.mode === 'only' + ) + ) { + state.hasFocusedTests = true; + } + if (currentDescribeBlock.parent) { + state.currentDescribeBlock = currentDescribeBlock.parent; + } + break; + } + case 'add_hook': { + const {currentDescribeBlock, currentlyRunningTest, hasStarted} = state; + const {asyncError, fn, hookType: type, timeout} = event; + if (currentlyRunningTest) { + currentlyRunningTest.errors.push( + new Error( + `Hooks cannot be defined inside tests. Hook of type "${type}" is nested within "${currentlyRunningTest.name}".` + ) + ); + break; + } else if (hasStarted) { + state.unhandledErrors.push( + new Error( + 'Cannot add a hook after tests have started running. Hooks must be defined synchronously.' + ) + ); + break; + } + const parent = currentDescribeBlock; + currentDescribeBlock.hooks.push({ + asyncError, + fn, + parent, + seenDone: false, + timeout, + type + }); + break; + } + case 'add_test': { + const {currentDescribeBlock, currentlyRunningTest, hasStarted} = state; + const { + asyncError, + fn, + mode, + testName: name, + timeout, + concurrent, + failing + } = event; + if (currentlyRunningTest) { + currentlyRunningTest.errors.push( + new Error( + `Tests cannot be nested. Test "${name}" cannot run because it is nested within "${currentlyRunningTest.name}".` + ) + ); + break; + } else if (hasStarted) { + state.unhandledErrors.push( + new Error( + 'Cannot add a test after tests have started running. Tests must be defined synchronously.' + ) + ); + break; + } + const test = (0, _utils.makeTest)( + fn, + mode, + concurrent, + name, + currentDescribeBlock, + timeout, + asyncError, + failing + ); + if (currentDescribeBlock.mode !== 'skip' && test.mode === 'only') { + state.hasFocusedTests = true; + } + currentDescribeBlock.children.push(test); + currentDescribeBlock.tests.push(test); + break; + } + case 'hook_failure': { + const {test, describeBlock, error, hook} = event; + const {asyncError, type} = hook; + if (type === 'beforeAll') { + (0, _jestUtil.invariant)( + describeBlock, + 'always present for `*All` hooks' + ); + (0, _utils.addErrorToEachTestUnderDescribe)( + describeBlock, + error, + asyncError + ); + } else if (type === 'afterAll') { + // Attaching `afterAll` errors to each test makes execution flow + // too complicated, so we'll consider them to be global. + state.unhandledErrors.push([error, asyncError]); + } else { + (0, _jestUtil.invariant)(test, 'always present for `*Each` hooks'); + test.errors.push([error, asyncError]); + } + break; + } + case 'test_skip': { + event.test.status = 'skip'; + break; + } + case 'test_todo': { + event.test.status = 'todo'; + break; + } + case 'test_done': { + event.test.duration = (0, _utils.getTestDuration)(event.test); + event.test.status = 'done'; + state.currentlyRunningTest = null; + break; + } + case 'test_start': { + state.currentlyRunningTest = event.test; + event.test.startedAt = jestNow(); + event.test.invocations += 1; + break; + } + case 'test_fn_start': { + event.test.seenDone = false; + break; + } + case 'test_fn_failure': { + const { + error, + test: {asyncError} + } = event; + event.test.errors.push([error, asyncError]); + break; + } + case 'test_retry': { + const logErrorsBeforeRetry = + // eslint-disable-next-line no-restricted-globals + global[_types.LOG_ERRORS_BEFORE_RETRY] || false; + if (logErrorsBeforeRetry) { + event.test.retryReasons.push(...event.test.errors); + } + event.test.errors = []; + break; + } + case 'run_start': { + state.hasStarted = true; + /* eslint-disable no-restricted-globals */ + global[_types.TEST_TIMEOUT_SYMBOL] && + (state.testTimeout = global[_types.TEST_TIMEOUT_SYMBOL]); + /* eslint-enable */ + break; + } + case 'run_finish': { + break; + } + case 'setup': { + // Uncaught exception handlers should be defined on the parent process + // object. If defined on the VM's process object they just no op and let + // the parent process crash. It might make sense to return a `dispatch` + // function to the parent process and register handlers there instead, but + // i'm not sure if this is works. For now i just replicated whatever + // jasmine was doing -- dabramov + state.parentProcess = event.parentProcess; + (0, _jestUtil.invariant)(state.parentProcess); + state.originalGlobalErrorHandlers = (0, + _globalErrorHandlers.injectGlobalErrorHandlers)(state.parentProcess); + if (event.testNamePattern) { + state.testNamePattern = new RegExp(event.testNamePattern, 'i'); + } + break; + } + case 'teardown': { + (0, _jestUtil.invariant)(state.originalGlobalErrorHandlers); + (0, _jestUtil.invariant)(state.parentProcess); + (0, _globalErrorHandlers.restoreGlobalErrorHandlers)( + state.parentProcess, + state.originalGlobalErrorHandlers + ); + break; + } + case 'error': { + // It's very likely for long-running async tests to throw errors. In this + // case we want to catch them and fail the current test. At the same time + // there's a possibility that one test sets a long timeout, that will + // eventually throw after this test finishes but during some other test + // execution, which will result in one test's error failing another test. + // In any way, it should be possible to track where the error was thrown + // from. + state.currentlyRunningTest + ? state.currentlyRunningTest.errors.push(event.error) + : state.unhandledErrors.push(event.error); + break; + } + } +}; +var _default = eventHandler; +exports.default = _default; diff --git a/node_modules/jest-circus/build/formatNodeAssertErrors.js b/node_modules/jest-circus/build/formatNodeAssertErrors.js new file mode 100644 index 00000000..a608c593 --- /dev/null +++ b/node_modules/jest-circus/build/formatNodeAssertErrors.js @@ -0,0 +1,186 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +var _assert = require('assert'); +var _chalk = _interopRequireDefault(require('chalk')); +var _jestMatcherUtils = require('jest-matcher-utils'); +var _prettyFormat = require('pretty-format'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const assertOperatorsMap = { + '!=': 'notEqual', + '!==': 'notStrictEqual', + '==': 'equal', + '===': 'strictEqual' +}; +const humanReadableOperators = { + deepEqual: 'to deeply equal', + deepStrictEqual: 'to deeply and strictly equal', + equal: 'to be equal', + notDeepEqual: 'not to deeply equal', + notDeepStrictEqual: 'not to deeply and strictly equal', + notEqual: 'to not be equal', + notStrictEqual: 'not be strictly equal', + strictEqual: 'to strictly be equal' +}; +const formatNodeAssertErrors = (event, state) => { + if (event.name === 'test_done') { + event.test.errors = event.test.errors.map(errors => { + let error; + if (Array.isArray(errors)) { + const [originalError, asyncError] = errors; + if (originalError == null) { + error = asyncError; + } else if (!originalError.stack) { + error = asyncError; + error.message = originalError.message + ? originalError.message + : `thrown: ${(0, _prettyFormat.format)(originalError, { + maxDepth: 3 + })}`; + } else { + error = originalError; + } + } else { + error = errors; + } + return isAssertionError(error) + ? { + message: assertionErrorMessage(error, { + expand: state.expand + }) + } + : errors; + }); + } +}; +const getOperatorName = (operator, stack) => { + if (typeof operator === 'string') { + return assertOperatorsMap[operator] || operator; + } + if (stack.match('.doesNotThrow')) { + return 'doesNotThrow'; + } + if (stack.match('.throws')) { + return 'throws'; + } + return ''; +}; +const operatorMessage = operator => { + const niceOperatorName = getOperatorName(operator, ''); + const humanReadableOperator = humanReadableOperators[niceOperatorName]; + return typeof operator === 'string' + ? `${humanReadableOperator || niceOperatorName} to:\n` + : ''; +}; +const assertThrowingMatcherHint = operatorName => + operatorName + ? _chalk.default.dim('assert') + + _chalk.default.dim(`.${operatorName}(`) + + _chalk.default.red('function') + + _chalk.default.dim(')') + : ''; +const assertMatcherHint = (operator, operatorName, expected) => { + let message = ''; + if (operator === '==' && expected === true) { + message = + _chalk.default.dim('assert') + + _chalk.default.dim('(') + + _chalk.default.red('received') + + _chalk.default.dim(')'); + } else if (operatorName) { + message = + _chalk.default.dim('assert') + + _chalk.default.dim(`.${operatorName}(`) + + _chalk.default.red('received') + + _chalk.default.dim(', ') + + _chalk.default.green('expected') + + _chalk.default.dim(')'); + } + return message; +}; +function assertionErrorMessage(error, options) { + const {expected, actual, generatedMessage, message, operator, stack} = error; + const diffString = (0, _jestMatcherUtils.diff)(expected, actual, options); + const hasCustomMessage = !generatedMessage; + const operatorName = getOperatorName(operator, stack); + const trimmedStack = stack + .replace(message, '') + .replace(/AssertionError(.*)/g, ''); + if (operatorName === 'doesNotThrow') { + return ( + // eslint-disable-next-line prefer-template + buildHintString(assertThrowingMatcherHint(operatorName)) + + _chalk.default.reset('Expected the function not to throw an error.\n') + + _chalk.default.reset('Instead, it threw:\n') + + ` ${(0, _jestMatcherUtils.printReceived)(actual)}` + + _chalk.default.reset( + hasCustomMessage ? `\n\nMessage:\n ${message}` : '' + ) + + trimmedStack + ); + } + if (operatorName === 'throws') { + if (error.generatedMessage) { + return ( + buildHintString(assertThrowingMatcherHint(operatorName)) + + _chalk.default.reset(error.message) + + _chalk.default.reset( + hasCustomMessage ? `\n\nMessage:\n ${message}` : '' + ) + + trimmedStack + ); + } + return ( + buildHintString(assertThrowingMatcherHint(operatorName)) + + _chalk.default.reset('Expected the function to throw an error.\n') + + _chalk.default.reset("But it didn't throw anything.") + + _chalk.default.reset( + hasCustomMessage ? `\n\nMessage:\n ${message}` : '' + ) + + trimmedStack + ); + } + if (operatorName === 'fail') { + return ( + buildHintString(assertMatcherHint(operator, operatorName, expected)) + + _chalk.default.reset(hasCustomMessage ? `Message:\n ${message}` : '') + + trimmedStack + ); + } + return ( + // eslint-disable-next-line prefer-template + buildHintString(assertMatcherHint(operator, operatorName, expected)) + + _chalk.default.reset(`Expected value ${operatorMessage(operator)}`) + + ` ${(0, _jestMatcherUtils.printExpected)(expected)}\n` + + _chalk.default.reset('Received:\n') + + ` ${(0, _jestMatcherUtils.printReceived)(actual)}` + + _chalk.default.reset(hasCustomMessage ? `\n\nMessage:\n ${message}` : '') + + (diffString ? `\n\nDifference:\n\n${diffString}` : '') + + trimmedStack + ); +} +function isAssertionError(error) { + return ( + error && + (error instanceof _assert.AssertionError || + error.name === _assert.AssertionError.name || + error.code === 'ERR_ASSERTION') + ); +} +function buildHintString(hint) { + return hint ? `${hint}\n\n` : ''; +} +var _default = formatNodeAssertErrors; +exports.default = _default; diff --git a/node_modules/jest-circus/build/globalErrorHandlers.js b/node_modules/jest-circus/build/globalErrorHandlers.js new file mode 100644 index 00000000..888232a0 --- /dev/null +++ b/node_modules/jest-circus/build/globalErrorHandlers.js @@ -0,0 +1,44 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.restoreGlobalErrorHandlers = exports.injectGlobalErrorHandlers = void 0; +var _state = require('./state'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const uncaught = error => { + (0, _state.dispatchSync)({ + error, + name: 'error' + }); +}; +const injectGlobalErrorHandlers = parentProcess => { + const uncaughtException = process.listeners('uncaughtException').slice(); + const unhandledRejection = process.listeners('unhandledRejection').slice(); + parentProcess.removeAllListeners('uncaughtException'); + parentProcess.removeAllListeners('unhandledRejection'); + parentProcess.on('uncaughtException', uncaught); + parentProcess.on('unhandledRejection', uncaught); + return { + uncaughtException, + unhandledRejection + }; +}; +exports.injectGlobalErrorHandlers = injectGlobalErrorHandlers; +const restoreGlobalErrorHandlers = (parentProcess, originalErrorHandlers) => { + parentProcess.removeListener('uncaughtException', uncaught); + parentProcess.removeListener('unhandledRejection', uncaught); + for (const listener of originalErrorHandlers.uncaughtException) { + parentProcess.on('uncaughtException', listener); + } + for (const listener of originalErrorHandlers.unhandledRejection) { + parentProcess.on('unhandledRejection', listener); + } +}; +exports.restoreGlobalErrorHandlers = restoreGlobalErrorHandlers; diff --git a/node_modules/jest-circus/build/index.d.ts b/node_modules/jest-circus/build/index.d.ts new file mode 100644 index 00000000..654496e7 --- /dev/null +++ b/node_modules/jest-circus/build/index.d.ts @@ -0,0 +1,72 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import type {Circus} from '@jest/types'; +import type {Global} from '@jest/types'; + +export declare const afterAll: THook; + +export declare const afterEach: THook; + +export declare const beforeAll: THook; + +export declare const beforeEach: THook; + +declare const _default: { + afterAll: THook; + afterEach: THook; + beforeAll: THook; + beforeEach: THook; + describe: { + (blockName: Global.BlockNameLike, blockFn: Global.BlockFn): void; + each: Global.EachTestFn; + only: { + (blockName: Global.BlockNameLike, blockFn: Global.BlockFn): void; + each: Global.EachTestFn; + }; + skip: { + (blockName: Global.BlockNameLike, blockFn: Global.BlockFn): void; + each: Global.EachTestFn; + }; + }; + it: Global.It; + test: Global.It; +}; +export default _default; + +export declare const describe: { + (blockName: Circus.BlockNameLike, blockFn: Circus.BlockFn): void; + each: Global.EachTestFn; + only: { + (blockName: Circus.BlockNameLike, blockFn: Circus.BlockFn): void; + each: Global.EachTestFn; + }; + skip: { + (blockName: Circus.BlockNameLike, blockFn: Circus.BlockFn): void; + each: Global.EachTestFn; + }; +}; + +declare type Event_2 = Circus.Event; +export {Event_2 as Event}; + +export declare const getState: () => Circus.State; + +export declare const it: Global.It; + +export declare const resetState: () => void; + +export declare const run: () => Promise; + +export declare const setState: (state: Circus.State) => Circus.State; + +export declare type State = Circus.State; + +export declare const test: Global.It; + +declare type THook = (fn: Circus.HookFn, timeout?: number) => void; + +export {}; diff --git a/node_modules/jest-circus/build/index.js b/node_modules/jest-circus/build/index.js new file mode 100644 index 00000000..97a2521c --- /dev/null +++ b/node_modules/jest-circus/build/index.js @@ -0,0 +1,238 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.describe = + exports.default = + exports.beforeEach = + exports.beforeAll = + exports.afterEach = + exports.afterAll = + void 0; +Object.defineProperty(exports, 'getState', { + enumerable: true, + get: function () { + return _state.getState; + } +}); +exports.it = void 0; +Object.defineProperty(exports, 'resetState', { + enumerable: true, + get: function () { + return _state.resetState; + } +}); +Object.defineProperty(exports, 'run', { + enumerable: true, + get: function () { + return _run.default; + } +}); +Object.defineProperty(exports, 'setState', { + enumerable: true, + get: function () { + return _state.setState; + } +}); +exports.test = void 0; +var _jestEach = require('jest-each'); +var _jestUtil = require('jest-util'); +var _state = require('./state'); +var _run = _interopRequireDefault(require('./run')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const describe = (() => { + const describe = (blockName, blockFn) => + _dispatchDescribe(blockFn, blockName, describe); + const only = (blockName, blockFn) => + _dispatchDescribe(blockFn, blockName, only, 'only'); + const skip = (blockName, blockFn) => + _dispatchDescribe(blockFn, blockName, skip, 'skip'); + describe.each = (0, _jestEach.bind)(describe, false); + only.each = (0, _jestEach.bind)(only, false); + skip.each = (0, _jestEach.bind)(skip, false); + describe.only = only; + describe.skip = skip; + return describe; +})(); +exports.describe = describe; +const _dispatchDescribe = (blockFn, blockName, describeFn, mode) => { + const asyncError = new _jestUtil.ErrorWithStack(undefined, describeFn); + if (blockFn === undefined) { + asyncError.message = + 'Missing second argument. It must be a callback function.'; + throw asyncError; + } + if (typeof blockFn !== 'function') { + asyncError.message = `Invalid second argument, ${blockFn}. It must be a callback function.`; + throw asyncError; + } + try { + blockName = (0, _jestUtil.convertDescriptorToString)(blockName); + } catch (error) { + asyncError.message = error.message; + throw asyncError; + } + (0, _state.dispatchSync)({ + asyncError, + blockName, + mode, + name: 'start_describe_definition' + }); + const describeReturn = blockFn(); + if ((0, _jestUtil.isPromise)(describeReturn)) { + throw new _jestUtil.ErrorWithStack( + 'Returning a Promise from "describe" is not supported. Tests must be defined synchronously.', + describeFn + ); + } else if (describeReturn !== undefined) { + throw new _jestUtil.ErrorWithStack( + 'A "describe" callback must not return a value.', + describeFn + ); + } + (0, _state.dispatchSync)({ + blockName, + mode, + name: 'finish_describe_definition' + }); +}; +const _addHook = (fn, hookType, hookFn, timeout) => { + const asyncError = new _jestUtil.ErrorWithStack(undefined, hookFn); + if (typeof fn !== 'function') { + asyncError.message = + 'Invalid first argument. It must be a callback function.'; + throw asyncError; + } + (0, _state.dispatchSync)({ + asyncError, + fn, + hookType, + name: 'add_hook', + timeout + }); +}; + +// Hooks have to pass themselves to the HOF in order for us to trim stack traces. +const beforeEach = (fn, timeout) => + _addHook(fn, 'beforeEach', beforeEach, timeout); +exports.beforeEach = beforeEach; +const beforeAll = (fn, timeout) => + _addHook(fn, 'beforeAll', beforeAll, timeout); +exports.beforeAll = beforeAll; +const afterEach = (fn, timeout) => + _addHook(fn, 'afterEach', afterEach, timeout); +exports.afterEach = afterEach; +const afterAll = (fn, timeout) => _addHook(fn, 'afterAll', afterAll, timeout); +exports.afterAll = afterAll; +const test = (() => { + const test = (testName, fn, timeout) => + _addTest(testName, undefined, false, fn, test, timeout); + const skip = (testName, fn, timeout) => + _addTest(testName, 'skip', false, fn, skip, timeout); + const only = (testName, fn, timeout) => + _addTest(testName, 'only', false, fn, test.only, timeout); + const concurrentTest = (testName, fn, timeout) => + _addTest(testName, undefined, true, fn, concurrentTest, timeout); + const concurrentOnly = (testName, fn, timeout) => + _addTest(testName, 'only', true, fn, concurrentOnly, timeout); + const bindFailing = (concurrent, mode) => { + const failing = (testName, fn, timeout, eachError) => + _addTest( + testName, + mode, + concurrent, + fn, + failing, + timeout, + true, + eachError + ); + failing.each = (0, _jestEach.bind)(failing, false, true); + return failing; + }; + test.todo = (testName, ...rest) => { + if (rest.length > 0 || typeof testName !== 'string') { + throw new _jestUtil.ErrorWithStack( + 'Todo must be called with only a description.', + test.todo + ); + } + // eslint-disable-next-line @typescript-eslint/no-empty-function + return _addTest(testName, 'todo', false, () => {}, test.todo); + }; + const _addTest = ( + testName, + mode, + concurrent, + fn, + testFn, + timeout, + failing, + asyncError = new _jestUtil.ErrorWithStack(undefined, testFn) + ) => { + try { + testName = (0, _jestUtil.convertDescriptorToString)(testName); + } catch (error) { + asyncError.message = error.message; + throw asyncError; + } + if (fn === undefined) { + asyncError.message = + 'Missing second argument. It must be a callback function. Perhaps you want to use `test.todo` for a test placeholder.'; + throw asyncError; + } + if (typeof fn !== 'function') { + asyncError.message = `Invalid second argument, ${fn}. It must be a callback function.`; + throw asyncError; + } + return (0, _state.dispatchSync)({ + asyncError, + concurrent, + failing: failing === undefined ? false : failing, + fn, + mode, + name: 'add_test', + testName, + timeout + }); + }; + test.each = (0, _jestEach.bind)(test); + only.each = (0, _jestEach.bind)(only); + skip.each = (0, _jestEach.bind)(skip); + concurrentTest.each = (0, _jestEach.bind)(concurrentTest, false); + concurrentOnly.each = (0, _jestEach.bind)(concurrentOnly, false); + only.failing = bindFailing(false, 'only'); + skip.failing = bindFailing(false, 'skip'); + test.failing = bindFailing(false); + test.only = only; + test.skip = skip; + test.concurrent = concurrentTest; + concurrentTest.only = concurrentOnly; + concurrentTest.skip = skip; + concurrentTest.failing = bindFailing(true); + concurrentOnly.failing = bindFailing(true, 'only'); + return test; +})(); +exports.test = test; +const it = test; +exports.it = it; +var _default = { + afterAll, + afterEach, + beforeAll, + beforeEach, + describe, + it, + test +}; +exports.default = _default; diff --git a/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js b/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js new file mode 100644 index 00000000..423eeb4b --- /dev/null +++ b/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js @@ -0,0 +1,117 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +var _jestUtil = require('jest-util'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const FRAMEWORK_INITIALIZER = require.resolve('./jestAdapterInit'); +const jestAdapter = async ( + globalConfig, + config, + environment, + runtime, + testPath, + sendMessageToJest +) => { + const {initialize, runAndTransformResultsToJestFormat} = + runtime.requireInternalModule(FRAMEWORK_INITIALIZER); + const {globals, snapshotState} = await initialize({ + config, + environment, + globalConfig, + localRequire: runtime.requireModule.bind(runtime), + parentProcess: process, + sendMessageToJest, + setGlobalsForRuntime: runtime.setGlobalsForRuntime.bind(runtime), + testPath + }); + if (config.fakeTimers.enableGlobally) { + if (config.fakeTimers.legacyFakeTimers) { + // during setup, this cannot be null (and it's fine to explode if it is) + environment.fakeTimers.useFakeTimers(); + } else { + environment.fakeTimersModern.useFakeTimers(); + } + } + globals.beforeEach(() => { + if (config.resetModules) { + runtime.resetModules(); + } + if (config.clearMocks) { + runtime.clearAllMocks(); + } + if (config.resetMocks) { + runtime.resetAllMocks(); + if ( + config.fakeTimers.enableGlobally && + config.fakeTimers.legacyFakeTimers + ) { + // during setup, this cannot be null (and it's fine to explode if it is) + environment.fakeTimers.useFakeTimers(); + } + } + if (config.restoreMocks) { + runtime.restoreAllMocks(); + } + }); + for (const path of config.setupFilesAfterEnv) { + const esm = runtime.unstable_shouldLoadAsEsm(path); + if (esm) { + await runtime.unstable_importModule(path); + } else { + runtime.requireModule(path); + } + } + const esm = runtime.unstable_shouldLoadAsEsm(testPath); + if (esm) { + await runtime.unstable_importModule(testPath); + } else { + runtime.requireModule(testPath); + } + const results = await runAndTransformResultsToJestFormat({ + config, + globalConfig, + testPath + }); + _addSnapshotData(results, snapshotState); + + // We need to copy the results object to ensure we don't leaks the prototypes + // from the VM. Jasmine creates the result objects in the parent process, we + // should consider doing that for circus as well. + return (0, _jestUtil.deepCyclicCopy)(results, { + keepPrototype: false + }); +}; +const _addSnapshotData = (results, snapshotState) => { + results.testResults.forEach(({fullName, status}) => { + if (status === 'pending' || status === 'failed') { + // if test is skipped or failed, we don't want to mark + // its snapshots as obsolete. + snapshotState.markSnapshotsAsCheckedForTest(fullName); + } + }); + const uncheckedCount = snapshotState.getUncheckedCount(); + const uncheckedKeys = snapshotState.getUncheckedKeys(); + if (uncheckedCount) { + snapshotState.removeUncheckedKeys(); + } + const status = snapshotState.save(); + results.snapshot.fileDeleted = status.deleted; + results.snapshot.added = snapshotState.added; + results.snapshot.matched = snapshotState.matched; + results.snapshot.unmatched = snapshotState.unmatched; + results.snapshot.updated = snapshotState.updated; + results.snapshot.unchecked = !status.deleted ? uncheckedCount : 0; + // Copy the array to prevent memory leaks + results.snapshot.uncheckedKeys = Array.from(uncheckedKeys); +}; +var _default = jestAdapter; +exports.default = _default; diff --git a/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js b/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js new file mode 100644 index 00000000..1528b99d --- /dev/null +++ b/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js @@ -0,0 +1,240 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.runAndTransformResultsToJestFormat = exports.initialize = void 0; +var _expect = require('@jest/expect'); +var _testResult = require('@jest/test-result'); +var _jestMessageUtil = require('jest-message-util'); +var _jestSnapshot = require('jest-snapshot'); +var _ = _interopRequireDefault(require('..')); +var _run = _interopRequireDefault(require('../run')); +var _state = require('../state'); +var _testCaseReportHandler = _interopRequireDefault( + require('../testCaseReportHandler') +); +var _utils = require('../utils'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const initialize = async ({ + config, + environment, + globalConfig, + localRequire, + parentProcess, + sendMessageToJest, + setGlobalsForRuntime, + testPath +}) => { + if (globalConfig.testTimeout) { + (0, _state.getState)().testTimeout = globalConfig.testTimeout; + } + (0, _state.getState)().maxConcurrency = globalConfig.maxConcurrency; + (0, _state.getState)().randomize = globalConfig.randomize; + (0, _state.getState)().seed = globalConfig.seed; + + // @ts-expect-error: missing `concurrent` which is added later + const globalsObject = { + ..._.default, + fdescribe: _.default.describe.only, + fit: _.default.it.only, + xdescribe: _.default.describe.skip, + xit: _.default.it.skip, + xtest: _.default.it.skip + }; + (0, _state.addEventHandler)(eventHandler); + if (environment.handleTestEvent) { + (0, _state.addEventHandler)(environment.handleTestEvent.bind(environment)); + } + _expect.jestExpect.setState({ + expand: globalConfig.expand + }); + const runtimeGlobals = { + ...globalsObject, + expect: _expect.jestExpect + }; + setGlobalsForRuntime(runtimeGlobals); + if (config.injectGlobals) { + Object.assign(environment.global, runtimeGlobals); + } + await (0, _state.dispatch)({ + name: 'setup', + parentProcess, + runtimeGlobals, + testNamePattern: globalConfig.testNamePattern + }); + if (config.testLocationInResults) { + await (0, _state.dispatch)({ + name: 'include_test_location_in_result' + }); + } + + // Jest tests snapshotSerializers in order preceding built-in serializers. + // Therefore, add in reverse because the last added is the first tested. + config.snapshotSerializers + .concat() + .reverse() + .forEach(path => (0, _jestSnapshot.addSerializer)(localRequire(path))); + const snapshotResolver = await (0, _jestSnapshot.buildSnapshotResolver)( + config, + localRequire + ); + const snapshotPath = snapshotResolver.resolveSnapshotPath(testPath); + const snapshotState = new _jestSnapshot.SnapshotState(snapshotPath, { + expand: globalConfig.expand, + prettierPath: config.prettierPath, + rootDir: config.rootDir, + snapshotFormat: config.snapshotFormat, + updateSnapshot: globalConfig.updateSnapshot + }); + _expect.jestExpect.setState({ + snapshotState, + testPath + }); + (0, _state.addEventHandler)(handleSnapshotStateAfterRetry(snapshotState)); + if (sendMessageToJest) { + (0, _state.addEventHandler)( + (0, _testCaseReportHandler.default)(testPath, sendMessageToJest) + ); + } + + // Return it back to the outer scope (test runner outside the VM). + return { + globals: globalsObject, + snapshotState + }; +}; +exports.initialize = initialize; +const runAndTransformResultsToJestFormat = async ({ + config, + globalConfig, + testPath +}) => { + const runResult = await (0, _run.default)(); + let numFailingTests = 0; + let numPassingTests = 0; + let numPendingTests = 0; + let numTodoTests = 0; + const assertionResults = runResult.testResults.map(testResult => { + let status; + if (testResult.status === 'skip') { + status = 'pending'; + numPendingTests += 1; + } else if (testResult.status === 'todo') { + status = 'todo'; + numTodoTests += 1; + } else if (testResult.errors.length) { + status = 'failed'; + numFailingTests += 1; + } else { + status = 'passed'; + numPassingTests += 1; + } + const ancestorTitles = testResult.testPath.filter( + name => name !== _state.ROOT_DESCRIBE_BLOCK_NAME + ); + const title = ancestorTitles.pop(); + return { + ancestorTitles, + duration: testResult.duration, + failureDetails: testResult.errorsDetailed, + failureMessages: testResult.errors, + fullName: title + ? ancestorTitles.concat(title).join(' ') + : ancestorTitles.join(' '), + invocations: testResult.invocations, + location: testResult.location, + numPassingAsserts: testResult.numPassingAsserts, + retryReasons: testResult.retryReasons, + status, + title: testResult.testPath[testResult.testPath.length - 1] + }; + }); + let failureMessage = (0, _jestMessageUtil.formatResultsErrors)( + assertionResults, + config, + globalConfig, + testPath + ); + let testExecError; + if (runResult.unhandledErrors.length) { + testExecError = { + message: '', + stack: runResult.unhandledErrors.join('\n') + }; + failureMessage = `${failureMessage || ''}\n\n${runResult.unhandledErrors + .map(err => + (0, _jestMessageUtil.formatExecError)(err, config, globalConfig) + ) + .join('\n')}`; + } + await (0, _state.dispatch)({ + name: 'teardown' + }); + return { + ...(0, _testResult.createEmptyTestResult)(), + console: undefined, + displayName: config.displayName, + failureMessage, + numFailingTests, + numPassingTests, + numPendingTests, + numTodoTests, + testExecError, + testFilePath: testPath, + testResults: assertionResults + }; +}; +exports.runAndTransformResultsToJestFormat = runAndTransformResultsToJestFormat; +const handleSnapshotStateAfterRetry = snapshotState => event => { + switch (event.name) { + case 'test_retry': { + // Clear any snapshot data that occurred in previous test run + snapshotState.clear(); + } + } +}; +const eventHandler = async event => { + switch (event.name) { + case 'test_start': { + _expect.jestExpect.setState({ + currentTestName: (0, _utils.getTestID)(event.test) + }); + break; + } + case 'test_done': { + event.test.numPassingAsserts = + _expect.jestExpect.getState().numPassingAsserts; + _addSuppressedErrors(event.test); + _addExpectedAssertionErrors(event.test); + break; + } + } +}; +const _addExpectedAssertionErrors = test => { + const failures = _expect.jestExpect.extractExpectedAssertionsErrors(); + const errors = failures.map(failure => failure.error); + test.errors = test.errors.concat(errors); +}; + +// Get suppressed errors from ``jest-matchers`` that weren't throw during +// test execution and add them to the test result, potentially failing +// a passing test. +const _addSuppressedErrors = test => { + const {suppressedErrors} = _expect.jestExpect.getState(); + _expect.jestExpect.setState({ + suppressedErrors: [] + }); + if (suppressedErrors.length) { + test.errors = test.errors.concat(suppressedErrors); + } +}; diff --git a/node_modules/jest-circus/build/run.js b/node_modules/jest-circus/build/run.js new file mode 100644 index 00000000..294b9e59 --- /dev/null +++ b/node_modules/jest-circus/build/run.js @@ -0,0 +1,350 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +var _async_hooks = require('async_hooks'); +var _pLimit = _interopRequireDefault(require('p-limit')); +var _expect = require('@jest/expect'); +var _jestUtil = require('jest-util'); +var _shuffleArray = _interopRequireWildcard(require('./shuffleArray')); +var _state = require('./state'); +var _types = require('./types'); +var _utils = require('./utils'); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const run = async () => { + const {rootDescribeBlock, seed, randomize} = (0, _state.getState)(); + const rng = randomize ? (0, _shuffleArray.rngBuilder)(seed) : undefined; + await (0, _state.dispatch)({ + name: 'run_start' + }); + await _runTestsForDescribeBlock(rootDescribeBlock, rng, true); + await (0, _state.dispatch)({ + name: 'run_finish' + }); + return (0, _utils.makeRunResult)( + (0, _state.getState)().rootDescribeBlock, + (0, _state.getState)().unhandledErrors + ); +}; +const _runTestsForDescribeBlock = async ( + describeBlock, + rng, + isRootBlock = false +) => { + await (0, _state.dispatch)({ + describeBlock, + name: 'run_describe_start' + }); + const {beforeAll, afterAll} = (0, _utils.getAllHooksForDescribe)( + describeBlock + ); + const isSkipped = describeBlock.mode === 'skip'; + if (!isSkipped) { + for (const hook of beforeAll) { + await _callCircusHook({ + describeBlock, + hook + }); + } + } + if (isRootBlock) { + const concurrentTests = collectConcurrentTests(describeBlock); + if (concurrentTests.length > 0) { + startTestsConcurrently(concurrentTests); + } + } + + // Tests that fail and are retried we run after other tests + // eslint-disable-next-line no-restricted-globals + const retryTimes = parseInt(global[_types.RETRY_TIMES], 10) || 0; + const deferredRetryTests = []; + if (rng) { + describeBlock.children = (0, _shuffleArray.default)( + describeBlock.children, + rng + ); + } + for (const child of describeBlock.children) { + switch (child.type) { + case 'describeBlock': { + await _runTestsForDescribeBlock(child, rng); + break; + } + case 'test': { + const hasErrorsBeforeTestRun = child.errors.length > 0; + await _runTest(child, isSkipped); + if ( + hasErrorsBeforeTestRun === false && + retryTimes > 0 && + child.errors.length > 0 + ) { + deferredRetryTests.push(child); + } + break; + } + } + } + + // Re-run failed tests n-times if configured + for (const test of deferredRetryTests) { + let numRetriesAvailable = retryTimes; + while (numRetriesAvailable > 0 && test.errors.length > 0) { + // Clear errors so retries occur + await (0, _state.dispatch)({ + name: 'test_retry', + test + }); + await _runTest(test, isSkipped); + numRetriesAvailable--; + } + } + if (!isSkipped) { + for (const hook of afterAll) { + await _callCircusHook({ + describeBlock, + hook + }); + } + } + await (0, _state.dispatch)({ + describeBlock, + name: 'run_describe_finish' + }); +}; +function collectConcurrentTests(describeBlock) { + if (describeBlock.mode === 'skip') { + return []; + } + const {hasFocusedTests, testNamePattern} = (0, _state.getState)(); + return describeBlock.children.flatMap(child => { + switch (child.type) { + case 'describeBlock': + return collectConcurrentTests(child); + case 'test': + const skip = + !child.concurrent || + child.mode === 'skip' || + (hasFocusedTests && child.mode !== 'only') || + (testNamePattern && + !testNamePattern.test((0, _utils.getTestID)(child))); + return skip ? [] : [child]; + } + }); +} +function startTestsConcurrently(concurrentTests) { + const mutex = (0, _pLimit.default)((0, _state.getState)().maxConcurrency); + const testNameStorage = new _async_hooks.AsyncLocalStorage(); + _expect.jestExpect.setState({ + currentConcurrentTestName: () => testNameStorage.getStore() + }); + for (const test of concurrentTests) { + try { + const testFn = test.fn; + const promise = mutex(() => + testNameStorage.run((0, _utils.getTestID)(test), testFn) + ); + // Avoid triggering the uncaught promise rejection handler in case the + // test fails before being awaited on. + // eslint-disable-next-line @typescript-eslint/no-empty-function + promise.catch(() => {}); + test.fn = () => promise; + } catch (err) { + test.fn = () => { + throw err; + }; + } + } +} +const _runTest = async (test, parentSkipped) => { + await (0, _state.dispatch)({ + name: 'test_start', + test + }); + const testContext = Object.create(null); + const {hasFocusedTests, testNamePattern} = (0, _state.getState)(); + const isSkipped = + parentSkipped || + test.mode === 'skip' || + (hasFocusedTests && test.mode === undefined) || + (testNamePattern && !testNamePattern.test((0, _utils.getTestID)(test))); + if (isSkipped) { + await (0, _state.dispatch)({ + name: 'test_skip', + test + }); + return; + } + if (test.mode === 'todo') { + await (0, _state.dispatch)({ + name: 'test_todo', + test + }); + return; + } + await (0, _state.dispatch)({ + name: 'test_started', + test + }); + const {afterEach, beforeEach} = (0, _utils.getEachHooksForTest)(test); + for (const hook of beforeEach) { + if (test.errors.length) { + // If any of the before hooks failed already, we don't run any + // hooks after that. + break; + } + await _callCircusHook({ + hook, + test, + testContext + }); + } + await _callCircusTest(test, testContext); + for (const hook of afterEach) { + await _callCircusHook({ + hook, + test, + testContext + }); + } + + // `afterAll` hooks should not affect test status (pass or fail), because if + // we had a global `afterAll` hook it would block all existing tests until + // this hook is executed. So we dispatch `test_done` right away. + await (0, _state.dispatch)({ + name: 'test_done', + test + }); +}; +const _callCircusHook = async ({ + hook, + test, + describeBlock, + testContext = {} +}) => { + await (0, _state.dispatch)({ + hook, + name: 'hook_start' + }); + const timeout = hook.timeout || (0, _state.getState)().testTimeout; + try { + await (0, _utils.callAsyncCircusFn)(hook, testContext, { + isHook: true, + timeout + }); + await (0, _state.dispatch)({ + describeBlock, + hook, + name: 'hook_success', + test + }); + } catch (error) { + await (0, _state.dispatch)({ + describeBlock, + error, + hook, + name: 'hook_failure', + test + }); + } +}; +const _callCircusTest = async (test, testContext) => { + await (0, _state.dispatch)({ + name: 'test_fn_start', + test + }); + const timeout = test.timeout || (0, _state.getState)().testTimeout; + (0, _jestUtil.invariant)( + test.fn, + "Tests with no 'fn' should have 'mode' set to 'skipped'" + ); + if (test.errors.length) { + return; // We don't run the test if there's already an error in before hooks. + } + + try { + await (0, _utils.callAsyncCircusFn)(test, testContext, { + isHook: false, + timeout + }); + if (test.failing) { + test.asyncError.message = + 'Failing test passed even though it was supposed to fail. Remove `.failing` to remove error.'; + await (0, _state.dispatch)({ + error: test.asyncError, + name: 'test_fn_failure', + test + }); + } else { + await (0, _state.dispatch)({ + name: 'test_fn_success', + test + }); + } + } catch (error) { + if (test.failing) { + await (0, _state.dispatch)({ + name: 'test_fn_success', + test + }); + } else { + await (0, _state.dispatch)({ + error, + name: 'test_fn_failure', + test + }); + } + } +}; +var _default = run; +exports.default = _default; diff --git a/node_modules/jest-circus/build/shuffleArray.js b/node_modules/jest-circus/build/shuffleArray.js new file mode 100644 index 00000000..cc9d442a --- /dev/null +++ b/node_modules/jest-circus/build/shuffleArray.js @@ -0,0 +1,41 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = shuffleArray; +exports.rngBuilder = void 0; +var _pureRand = require('pure-rand'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// Generates [from, to] inclusive + +const rngBuilder = seed => { + const gen = (0, _pureRand.xoroshiro128plus)(seed); + return { + next: (from, to) => + (0, _pureRand.unsafeUniformIntDistribution)(from, to, gen) + }; +}; + +// Fisher-Yates shuffle +// This is performed in-place +exports.rngBuilder = rngBuilder; +function shuffleArray(array, random) { + const length = array.length; + if (length === 0) { + return []; + } + for (let i = 0; i < length; i++) { + const n = random.next(i, length - 1); + const value = array[i]; + array[i] = array[n]; + array[n] = value; + } + return array; +} diff --git a/node_modules/jest-circus/build/state.js b/node_modules/jest-circus/build/state.js new file mode 100644 index 00000000..0fe5e8d4 --- /dev/null +++ b/node_modules/jest-circus/build/state.js @@ -0,0 +1,80 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.setState = + exports.resetState = + exports.getState = + exports.dispatchSync = + exports.dispatch = + exports.addEventHandler = + exports.ROOT_DESCRIBE_BLOCK_NAME = + void 0; +var _eventHandler = _interopRequireDefault(require('./eventHandler')); +var _formatNodeAssertErrors = _interopRequireDefault( + require('./formatNodeAssertErrors') +); +var _types = require('./types'); +var _utils = require('./utils'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const eventHandlers = [_eventHandler.default, _formatNodeAssertErrors.default]; +const ROOT_DESCRIBE_BLOCK_NAME = 'ROOT_DESCRIBE_BLOCK'; +exports.ROOT_DESCRIBE_BLOCK_NAME = ROOT_DESCRIBE_BLOCK_NAME; +const createState = () => { + const ROOT_DESCRIBE_BLOCK = (0, _utils.makeDescribe)( + ROOT_DESCRIBE_BLOCK_NAME + ); + return { + currentDescribeBlock: ROOT_DESCRIBE_BLOCK, + currentlyRunningTest: null, + expand: undefined, + hasFocusedTests: false, + hasStarted: false, + includeTestLocationInResult: false, + maxConcurrency: 5, + parentProcess: null, + rootDescribeBlock: ROOT_DESCRIBE_BLOCK, + seed: 0, + testNamePattern: null, + testTimeout: 5000, + unhandledErrors: [] + }; +}; + +/* eslint-disable no-restricted-globals */ +const resetState = () => { + global[_types.STATE_SYM] = createState(); +}; +exports.resetState = resetState; +resetState(); +const getState = () => global[_types.STATE_SYM]; +exports.getState = getState; +const setState = state => (global[_types.STATE_SYM] = state); +/* eslint-enable */ +exports.setState = setState; +const dispatch = async event => { + for (const handler of eventHandlers) { + await handler(event, getState()); + } +}; +exports.dispatch = dispatch; +const dispatchSync = event => { + for (const handler of eventHandlers) { + handler(event, getState()); + } +}; +exports.dispatchSync = dispatchSync; +const addEventHandler = handler => { + eventHandlers.push(handler); +}; +exports.addEventHandler = addEventHandler; diff --git a/node_modules/jest-circus/build/testCaseReportHandler.js b/node_modules/jest-circus/build/testCaseReportHandler.js new file mode 100644 index 00000000..883b7756 --- /dev/null +++ b/node_modules/jest-circus/build/testCaseReportHandler.js @@ -0,0 +1,32 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +var _utils = require('./utils'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const testCaseReportHandler = (testPath, sendMessageToJest) => event => { + switch (event.name) { + case 'test_started': { + const testCaseStartInfo = (0, _utils.createTestCaseStartInfo)(event.test); + sendMessageToJest('test-case-start', [testPath, testCaseStartInfo]); + break; + } + case 'test_todo': + case 'test_done': { + const testResult = (0, _utils.makeSingleTestResult)(event.test); + const testCaseResult = (0, _utils.parseSingleTestResult)(testResult); + sendMessageToJest('test-case-result', [testPath, testCaseResult]); + break; + } + } +}; +var _default = testCaseReportHandler; +exports.default = _default; diff --git a/node_modules/jest-circus/build/types.js b/node_modules/jest-circus/build/types.js new file mode 100644 index 00000000..7bdfae84 --- /dev/null +++ b/node_modules/jest-circus/build/types.js @@ -0,0 +1,27 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.TEST_TIMEOUT_SYMBOL = + exports.STATE_SYM = + exports.RETRY_TIMES = + exports.LOG_ERRORS_BEFORE_RETRY = + void 0; +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const STATE_SYM = Symbol('JEST_STATE_SYMBOL'); +exports.STATE_SYM = STATE_SYM; +const RETRY_TIMES = Symbol.for('RETRY_TIMES'); +// To pass this value from Runtime object to state we need to use global[sym] +exports.RETRY_TIMES = RETRY_TIMES; +const TEST_TIMEOUT_SYMBOL = Symbol.for('TEST_TIMEOUT_SYMBOL'); +exports.TEST_TIMEOUT_SYMBOL = TEST_TIMEOUT_SYMBOL; +const LOG_ERRORS_BEFORE_RETRY = Symbol.for('LOG_ERRORS_BEFORE_RETRY'); +exports.LOG_ERRORS_BEFORE_RETRY = LOG_ERRORS_BEFORE_RETRY; diff --git a/node_modules/jest-circus/build/utils.js b/node_modules/jest-circus/build/utils.js new file mode 100644 index 00000000..defd9b36 --- /dev/null +++ b/node_modules/jest-circus/build/utils.js @@ -0,0 +1,511 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.parseSingleTestResult = + exports.makeTest = + exports.makeSingleTestResult = + exports.makeRunResult = + exports.makeDescribe = + exports.getTestID = + exports.getTestDuration = + exports.getEachHooksForTest = + exports.getAllHooksForDescribe = + exports.describeBlockHasTests = + exports.createTestCaseStartInfo = + exports.callAsyncCircusFn = + exports.addErrorToEachTestUnderDescribe = + void 0; +var path = _interopRequireWildcard(require('path')); +var _co = _interopRequireDefault(require('co')); +var _dedent = _interopRequireDefault(require('dedent')); +var _isGeneratorFn = _interopRequireDefault(require('is-generator-fn')); +var _slash = _interopRequireDefault(require('slash')); +var _stackUtils = _interopRequireDefault(require('stack-utils')); +var _jestUtil = require('jest-util'); +var _prettyFormat = require('pretty-format'); +var _state = require('./state'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +var jestNow = globalThis[Symbol.for('jest-native-now')] || globalThis.Date.now; +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +var Promise = + globalThis[Symbol.for('jest-native-promise')] || globalThis.Promise; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +const stackUtils = new _stackUtils.default({ + cwd: 'A path that does not exist' +}); +const jestEachBuildDir = (0, _slash.default)( + path.dirname(require.resolve('jest-each')) +); +function takesDoneCallback(fn) { + return fn.length > 0; +} +function isGeneratorFunction(fn) { + return (0, _isGeneratorFn.default)(fn); +} +const makeDescribe = (name, parent, mode) => { + let _mode = mode; + if (parent && !mode) { + // If not set explicitly, inherit from the parent describe. + _mode = parent.mode; + } + return { + type: 'describeBlock', + // eslint-disable-next-line sort-keys + children: [], + hooks: [], + mode: _mode, + name: (0, _jestUtil.convertDescriptorToString)(name), + parent, + tests: [] + }; +}; +exports.makeDescribe = makeDescribe; +const makeTest = ( + fn, + mode, + concurrent, + name, + parent, + timeout, + asyncError, + failing +) => ({ + type: 'test', + // eslint-disable-next-line sort-keys + asyncError, + concurrent, + duration: null, + errors: [], + failing, + fn, + invocations: 0, + mode, + name: (0, _jestUtil.convertDescriptorToString)(name), + numPassingAsserts: 0, + parent, + retryReasons: [], + seenDone: false, + startedAt: null, + status: null, + timeout +}); + +// Traverse the tree of describe blocks and return true if at least one describe +// block has an enabled test. +exports.makeTest = makeTest; +const hasEnabledTest = describeBlock => { + const {hasFocusedTests, testNamePattern} = (0, _state.getState)(); + return describeBlock.children.some(child => + child.type === 'describeBlock' + ? hasEnabledTest(child) + : !( + child.mode === 'skip' || + (hasFocusedTests && child.mode !== 'only') || + (testNamePattern && !testNamePattern.test(getTestID(child))) + ) + ); +}; +const getAllHooksForDescribe = describe => { + const result = { + afterAll: [], + beforeAll: [] + }; + if (hasEnabledTest(describe)) { + for (const hook of describe.hooks) { + switch (hook.type) { + case 'beforeAll': + result.beforeAll.push(hook); + break; + case 'afterAll': + result.afterAll.push(hook); + break; + } + } + } + return result; +}; +exports.getAllHooksForDescribe = getAllHooksForDescribe; +const getEachHooksForTest = test => { + const result = { + afterEach: [], + beforeEach: [] + }; + if (test.concurrent) { + // *Each hooks are not run for concurrent tests + return result; + } + let block = test.parent; + do { + const beforeEachForCurrentBlock = []; + for (const hook of block.hooks) { + switch (hook.type) { + case 'beforeEach': + beforeEachForCurrentBlock.push(hook); + break; + case 'afterEach': + result.afterEach.push(hook); + break; + } + } + // 'beforeEach' hooks are executed from top to bottom, the opposite of the + // way we traversed it. + result.beforeEach = [...beforeEachForCurrentBlock, ...result.beforeEach]; + } while ((block = block.parent)); + return result; +}; +exports.getEachHooksForTest = getEachHooksForTest; +const describeBlockHasTests = describe => + describe.children.some( + child => child.type === 'test' || describeBlockHasTests(child) + ); +exports.describeBlockHasTests = describeBlockHasTests; +const _makeTimeoutMessage = (timeout, isHook, takesDoneCallback) => + `Exceeded timeout of ${(0, _jestUtil.formatTime)(timeout)} for a ${ + isHook ? 'hook' : 'test' + }${ + takesDoneCallback ? ' while waiting for `done()` to be called' : '' + }.\nAdd a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout.`; + +// Global values can be overwritten by mocks or tests. We'll capture +// the original values in the variables before we require any files. +const {setTimeout, clearTimeout} = globalThis; +function checkIsError(error) { + return !!(error && error.message && error.stack); +} +const callAsyncCircusFn = (testOrHook, testContext, {isHook, timeout}) => { + let timeoutID; + let completed = false; + const {fn, asyncError} = testOrHook; + const doneCallback = takesDoneCallback(fn); + return new Promise((resolve, reject) => { + timeoutID = setTimeout( + () => reject(_makeTimeoutMessage(timeout, isHook, doneCallback)), + timeout + ); + + // If this fn accepts `done` callback we return a promise that fulfills as + // soon as `done` called. + if (doneCallback) { + let returnedValue = undefined; + const done = reason => { + // We need to keep a stack here before the promise tick + const errorAtDone = new _jestUtil.ErrorWithStack(undefined, done); + if (!completed && testOrHook.seenDone) { + errorAtDone.message = + 'Expected done to be called once, but it was called multiple times.'; + if (reason) { + errorAtDone.message += ` Reason: ${(0, _prettyFormat.format)( + reason, + { + maxDepth: 3 + } + )}`; + } + reject(errorAtDone); + throw errorAtDone; + } else { + testOrHook.seenDone = true; + } + + // Use `Promise.resolve` to allow the event loop to go a single tick in case `done` is called synchronously + Promise.resolve().then(() => { + if (returnedValue !== undefined) { + asyncError.message = (0, _dedent.default)` + Test functions cannot both take a 'done' callback and return something. Either use a 'done' callback, or return a promise. + Returned value: ${(0, _prettyFormat.format)(returnedValue, { + maxDepth: 3 + })} + `; + return reject(asyncError); + } + let errorAsErrorObject; + if (checkIsError(reason)) { + errorAsErrorObject = reason; + } else { + errorAsErrorObject = errorAtDone; + errorAtDone.message = `Failed: ${(0, _prettyFormat.format)(reason, { + maxDepth: 3 + })}`; + } + + // Consider always throwing, regardless if `reason` is set or not + if (completed && reason) { + errorAsErrorObject.message = `Caught error after test environment was torn down\n\n${errorAsErrorObject.message}`; + throw errorAsErrorObject; + } + return reason ? reject(errorAsErrorObject) : resolve(); + }); + }; + returnedValue = fn.call(testContext, done); + return; + } + let returnedValue; + if (isGeneratorFunction(fn)) { + returnedValue = _co.default.wrap(fn).call({}); + } else { + try { + returnedValue = fn.call(testContext); + } catch (error) { + reject(error); + return; + } + } + if ((0, _jestUtil.isPromise)(returnedValue)) { + returnedValue.then(() => resolve(), reject); + return; + } + if (!isHook && returnedValue !== undefined) { + reject( + new Error((0, _dedent.default)` + test functions can only return Promise or undefined. + Returned value: ${(0, _prettyFormat.format)(returnedValue, { + maxDepth: 3 + })} + `) + ); + return; + } + + // Otherwise this test is synchronous, and if it didn't throw it means + // it passed. + resolve(); + }) + .then(() => { + completed = true; + // If timeout is not cleared/unrefed the node process won't exit until + // it's resolved. + timeoutID.unref?.(); + clearTimeout(timeoutID); + }) + .catch(error => { + completed = true; + timeoutID.unref?.(); + clearTimeout(timeoutID); + throw error; + }); +}; +exports.callAsyncCircusFn = callAsyncCircusFn; +const getTestDuration = test => { + const {startedAt} = test; + return typeof startedAt === 'number' ? jestNow() - startedAt : null; +}; +exports.getTestDuration = getTestDuration; +const makeRunResult = (describeBlock, unhandledErrors) => ({ + testResults: makeTestResults(describeBlock), + unhandledErrors: unhandledErrors.map(_getError).map(getErrorStack) +}); +exports.makeRunResult = makeRunResult; +const getTestNamesPath = test => { + const titles = []; + let parent = test; + do { + titles.unshift(parent.name); + } while ((parent = parent.parent)); + return titles; +}; +const makeSingleTestResult = test => { + const {includeTestLocationInResult} = (0, _state.getState)(); + const {status} = test; + (0, _jestUtil.invariant)( + status, + 'Status should be present after tests are run.' + ); + const testPath = getTestNamesPath(test); + let location = null; + if (includeTestLocationInResult) { + const stackLines = test.asyncError.stack.split('\n'); + const stackLine = stackLines[1]; + let parsedLine = stackUtils.parseLine(stackLine); + if (parsedLine?.file?.startsWith(jestEachBuildDir)) { + const stackLine = stackLines[4]; + parsedLine = stackUtils.parseLine(stackLine); + } + if ( + parsedLine && + typeof parsedLine.column === 'number' && + typeof parsedLine.line === 'number' + ) { + location = { + column: parsedLine.column, + line: parsedLine.line + }; + } + } + const errorsDetailed = test.errors.map(_getError); + return { + duration: test.duration, + errors: errorsDetailed.map(getErrorStack), + errorsDetailed, + invocations: test.invocations, + location, + numPassingAsserts: test.numPassingAsserts, + retryReasons: test.retryReasons.map(_getError).map(getErrorStack), + status, + testPath: Array.from(testPath) + }; +}; +exports.makeSingleTestResult = makeSingleTestResult; +const makeTestResults = describeBlock => { + const testResults = []; + for (const child of describeBlock.children) { + switch (child.type) { + case 'describeBlock': { + testResults.push(...makeTestResults(child)); + break; + } + case 'test': { + testResults.push(makeSingleTestResult(child)); + break; + } + } + } + return testResults; +}; + +// Return a string that identifies the test (concat of parent describe block +// names + test title) +const getTestID = test => { + const testNamesPath = getTestNamesPath(test); + testNamesPath.shift(); // remove TOP_DESCRIBE_BLOCK_NAME + return testNamesPath.join(' '); +}; +exports.getTestID = getTestID; +const _getError = errors => { + let error; + let asyncError; + if (Array.isArray(errors)) { + error = errors[0]; + asyncError = errors[1]; + } else { + error = errors; + asyncError = new Error(); + } + if (error && (typeof error.stack === 'string' || error.message)) { + return error; + } + asyncError.message = `thrown: ${(0, _prettyFormat.format)(error, { + maxDepth: 3 + })}`; + return asyncError; +}; +const getErrorStack = error => + typeof error.stack === 'string' ? error.stack : error.message; +const addErrorToEachTestUnderDescribe = (describeBlock, error, asyncError) => { + for (const child of describeBlock.children) { + switch (child.type) { + case 'describeBlock': + addErrorToEachTestUnderDescribe(child, error, asyncError); + break; + case 'test': + child.errors.push([error, asyncError]); + break; + } + } +}; +exports.addErrorToEachTestUnderDescribe = addErrorToEachTestUnderDescribe; +const resolveTestCaseStartInfo = testNamesPath => { + const ancestorTitles = testNamesPath.filter( + name => name !== _state.ROOT_DESCRIBE_BLOCK_NAME + ); + const fullName = ancestorTitles.join(' '); + const title = testNamesPath[testNamesPath.length - 1]; + // remove title + ancestorTitles.pop(); + return { + ancestorTitles, + fullName, + title + }; +}; +const parseSingleTestResult = testResult => { + let status; + if (testResult.status === 'skip') { + status = 'pending'; + } else if (testResult.status === 'todo') { + status = 'todo'; + } else if (testResult.errors.length > 0) { + status = 'failed'; + } else { + status = 'passed'; + } + const {ancestorTitles, fullName, title} = resolveTestCaseStartInfo( + testResult.testPath + ); + return { + ancestorTitles, + duration: testResult.duration, + failureDetails: testResult.errorsDetailed, + failureMessages: Array.from(testResult.errors), + fullName, + invocations: testResult.invocations, + location: testResult.location, + numPassingAsserts: testResult.numPassingAsserts, + retryReasons: Array.from(testResult.retryReasons), + status, + title + }; +}; +exports.parseSingleTestResult = parseSingleTestResult; +const createTestCaseStartInfo = test => { + const testPath = getTestNamesPath(test); + const {ancestorTitles, fullName, title} = resolveTestCaseStartInfo(testPath); + return { + ancestorTitles, + fullName, + mode: test.mode, + startedAt: test.startedAt, + title + }; +}; +exports.createTestCaseStartInfo = createTestCaseStartInfo; diff --git a/node_modules/jest-circus/package.json b/node_modules/jest-circus/package.json new file mode 100644 index 00000000..8f2dfd98 --- /dev/null +++ b/node_modules/jest-circus/package.json @@ -0,0 +1,59 @@ +{ + "name": "jest-circus", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-circus" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json", + "./runner": "./runner.js" + }, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "devDependencies": { + "@babel/core": "^7.11.6", + "@babel/register": "^7.0.0", + "@types/co": "^4.6.2", + "@types/graceful-fs": "^4.1.3", + "@types/stack-utils": "^2.0.0", + "execa": "^5.0.0", + "graceful-fs": "^4.2.9", + "tempy": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-circus/runner.js b/node_modules/jest-circus/runner.js new file mode 100644 index 00000000..de11d642 --- /dev/null +++ b/node_modules/jest-circus/runner.js @@ -0,0 +1,10 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// Allow people to use `jest-circus/runner` as a runner. +const runner = require('./build/legacy-code-todo-rewrite/jestAdapter').default; +module.exports = runner; diff --git a/node_modules/jest-cli/LICENSE b/node_modules/jest-cli/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-cli/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-cli/README.md b/node_modules/jest-cli/README.md new file mode 100644 index 00000000..9c3d31ef --- /dev/null +++ b/node_modules/jest-cli/README.md @@ -0,0 +1,11 @@ +# Jest + +🃏 Delightful JavaScript Testing + +- **👩🏻‍💻 Developer Ready**: Complete and ready to set-up JavaScript testing solution. Works out of the box for any React project. + +- **🏃🏽 Instant Feedback**: Failed tests run first. Fast interactive mode can switch between running all tests or only test files related to changed files. + +- **📸 Snapshot Testing**: Jest can [capture snapshots](https://jestjs.io/docs/snapshot-testing) of React trees or other serializable values to simplify UI testing. + +Read More: https://jestjs.io/ diff --git a/node_modules/jest-cli/bin/jest.js b/node_modules/jest-cli/bin/jest.js new file mode 100755 index 00000000..3ddf9403 --- /dev/null +++ b/node_modules/jest-cli/bin/jest.js @@ -0,0 +1,17 @@ +#!/usr/bin/env node +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const importLocal = require('import-local'); + +if (!importLocal(__filename)) { + if (process.env.NODE_ENV == null) { + process.env.NODE_ENV = 'test'; + } + + require('..').run(); +} diff --git a/node_modules/jest-cli/build/args.js b/node_modules/jest-cli/build/args.js new file mode 100644 index 00000000..170606fc --- /dev/null +++ b/node_modules/jest-cli/build/args.js @@ -0,0 +1,731 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.check = check; +exports.usage = exports.options = exports.docs = void 0; +function _jestConfig() { + const data = require('jest-config'); + _jestConfig = function () { + return data; + }; + return data; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function check(argv) { + if ( + argv.runInBand && + Object.prototype.hasOwnProperty.call(argv, 'maxWorkers') + ) { + throw new Error( + 'Both --runInBand and --maxWorkers were specified, only one is allowed.' + ); + } + for (const key of [ + 'onlyChanged', + 'lastCommit', + 'changedFilesWithAncestor', + 'changedSince' + ]) { + if (argv[key] && argv.watchAll) { + throw new Error( + `Both --${key} and --watchAll were specified, but cannot be used ` + + 'together. Try the --watch option which reruns only tests ' + + 'related to changed files.' + ); + } + } + if (argv.onlyFailures && argv.watchAll) { + throw new Error( + 'Both --onlyFailures and --watchAll were specified, only one is allowed.' + ); + } + if (argv.findRelatedTests && argv._.length === 0) { + throw new Error( + 'The --findRelatedTests option requires file paths to be specified.\n' + + 'Example usage: jest --findRelatedTests ./src/source.js ' + + './src/index.js.' + ); + } + if ( + Object.prototype.hasOwnProperty.call(argv, 'maxWorkers') && + argv.maxWorkers === undefined + ) { + throw new Error( + 'The --maxWorkers (-w) option requires a number or string to be specified.\n' + + 'Example usage: jest --maxWorkers 2\n' + + 'Example usage: jest --maxWorkers 50%\n' + + 'Or did you mean --watch?' + ); + } + if (argv.selectProjects && argv.selectProjects.length === 0) { + throw new Error( + 'The --selectProjects option requires the name of at least one project to be specified.\n' + + 'Example usage: jest --selectProjects my-first-project my-second-project' + ); + } + if (argv.ignoreProjects && argv.ignoreProjects.length === 0) { + throw new Error( + 'The --ignoreProjects option requires the name of at least one project to be specified.\n' + + 'Example usage: jest --ignoreProjects my-first-project my-second-project' + ); + } + if ( + argv.config && + !(0, _jestConfig().isJSONString)(argv.config) && + !argv.config.match( + new RegExp( + `\\.(${_jestConfig() + .constants.JEST_CONFIG_EXT_ORDER.map(e => e.substring(1)) + .join('|')})$`, + 'i' + ) + ) + ) { + throw new Error( + `The --config option requires a JSON string literal, or a file path with one of these extensions: ${_jestConfig().constants.JEST_CONFIG_EXT_ORDER.join( + ', ' + )}.\nExample usage: jest --config ./jest.config.js` + ); + } + return true; +} +const usage = 'Usage: $0 [--config=] [TestPathPattern]'; +exports.usage = usage; +const docs = 'Documentation: https://jestjs.io/'; + +// The default values are all set in jest-config +exports.docs = docs; +const options = { + all: { + description: + 'The opposite of `onlyChanged`. If `onlyChanged` is set by ' + + 'default, running jest with `--all` will force Jest to run all tests ' + + 'instead of running only tests related to changed files.', + type: 'boolean' + }, + automock: { + description: 'Automock all files by default.', + type: 'boolean' + }, + bail: { + alias: 'b', + description: + 'Exit the test suite immediately after `n` number of failing tests.', + type: 'boolean' + }, + cache: { + description: + 'Whether to use the transform cache. Disable the cache ' + + 'using --no-cache.', + type: 'boolean' + }, + cacheDirectory: { + description: + 'The directory where Jest should store its cached ' + + ' dependency information.', + type: 'string' + }, + changedFilesWithAncestor: { + description: + 'Runs tests related to the current changes and the changes made in the ' + + 'last commit. Behaves similarly to `--onlyChanged`.', + type: 'boolean' + }, + changedSince: { + description: + 'Runs tests related to the changes since the provided branch. If the ' + + 'current branch has diverged from the given branch, then only changes ' + + 'made locally will be tested. Behaves similarly to `--onlyChanged`.', + nargs: 1, + type: 'string' + }, + ci: { + description: + 'Whether to run Jest in continuous integration (CI) mode. ' + + 'This option is on by default in most popular CI environments. It will ' + + 'prevent snapshots from being written unless explicitly requested.', + type: 'boolean' + }, + clearCache: { + description: + 'Clears the configured Jest cache directory and then exits. ' + + 'Default directory can be found by calling jest --showConfig', + type: 'boolean' + }, + clearMocks: { + description: + 'Automatically clear mock calls, instances, contexts and results before every test. ' + + 'Equivalent to calling jest.clearAllMocks() before each test.', + type: 'boolean' + }, + collectCoverage: { + description: 'Alias for --coverage.', + type: 'boolean' + }, + collectCoverageFrom: { + description: + 'A glob pattern relative to matching the files that coverage ' + + 'info needs to be collected from.', + type: 'string' + }, + color: { + description: + 'Forces test results output color highlighting (even if ' + + 'stdout is not a TTY). Set to false if you would like to have no colors.', + type: 'boolean' + }, + colors: { + description: 'Alias for `--color`.', + type: 'boolean' + }, + config: { + alias: 'c', + description: + 'The path to a jest config file specifying how to find ' + + 'and execute tests. If no rootDir is set in the config, the directory ' + + 'containing the config file is assumed to be the rootDir for the project. ' + + 'This can also be a JSON encoded value which Jest will use as configuration.', + type: 'string' + }, + coverage: { + description: + 'Indicates that test coverage information should be ' + + 'collected and reported in the output.', + type: 'boolean' + }, + coverageDirectory: { + description: 'The directory where Jest should output its coverage files.', + type: 'string' + }, + coveragePathIgnorePatterns: { + description: + 'An array of regexp pattern strings that are matched ' + + 'against all file paths before executing the test. If the file path ' + + 'matches any of the patterns, coverage information will be skipped.', + string: true, + type: 'array' + }, + coverageProvider: { + choices: ['babel', 'v8'], + description: 'Select between Babel and V8 to collect coverage' + }, + coverageReporters: { + description: + 'A list of reporter names that Jest uses when writing ' + + 'coverage reports. Any istanbul reporter can be used.', + string: true, + type: 'array' + }, + coverageThreshold: { + description: + 'A JSON string with which will be used to configure ' + + 'minimum threshold enforcement for coverage results', + type: 'string' + }, + debug: { + description: 'Print debugging info about your jest config.', + type: 'boolean' + }, + detectLeaks: { + description: + '**EXPERIMENTAL**: Detect memory leaks in tests. After executing a ' + + 'test, it will try to garbage collect the global object used, and fail ' + + 'if it was leaked', + type: 'boolean' + }, + detectOpenHandles: { + description: + 'Print out remaining open handles preventing Jest from exiting at the ' + + 'end of a test run. Implies `runInBand`.', + type: 'boolean' + }, + env: { + description: + 'The test environment used for all tests. This can point to ' + + 'any file or node module. Examples: `jsdom`, `node` or ' + + '`path/to/my-environment.js`', + type: 'string' + }, + errorOnDeprecated: { + description: 'Make calling deprecated APIs throw helpful error messages.', + type: 'boolean' + }, + expand: { + alias: 'e', + description: 'Use this flag to show full diffs instead of a patch.', + type: 'boolean' + }, + filter: { + description: + 'Path to a module exporting a filtering function. This method receives ' + + 'a list of tests which can be manipulated to exclude tests from ' + + 'running. Especially useful when used in conjunction with a testing ' + + 'infrastructure to filter known broken tests.', + type: 'string' + }, + findRelatedTests: { + description: + 'Find related tests for a list of source files that were ' + + 'passed in as arguments. Useful for pre-commit hook integration to run ' + + 'the minimal amount of tests necessary.', + type: 'boolean' + }, + forceExit: { + description: + 'Force Jest to exit after all tests have completed running. ' + + 'This is useful when resources set up by test code cannot be ' + + 'adequately cleaned up.', + type: 'boolean' + }, + globalSetup: { + description: 'The path to a module that runs before All Tests.', + type: 'string' + }, + globalTeardown: { + description: 'The path to a module that runs after All Tests.', + type: 'string' + }, + globals: { + description: + 'A JSON string with map of global variables that need ' + + 'to be available in all test environments.', + type: 'string' + }, + haste: { + description: + 'A JSON string with map of variables for the haste module system', + type: 'string' + }, + ignoreProjects: { + description: + 'Ignore the tests of the specified projects. ' + + 'Jest uses the attribute `displayName` in the configuration to identify each project.', + string: true, + type: 'array' + }, + init: { + description: 'Generate a basic configuration file', + type: 'boolean' + }, + injectGlobals: { + description: 'Should Jest inject global variables or not', + type: 'boolean' + }, + json: { + description: + 'Prints the test results in JSON. This mode will send all ' + + 'other test output and user messages to stderr.', + type: 'boolean' + }, + lastCommit: { + description: + 'Run all tests affected by file changes in the last commit made. ' + + 'Behaves similarly to `--onlyChanged`.', + type: 'boolean' + }, + listTests: { + description: + 'Lists all tests Jest will run given the arguments and ' + + 'exits. Most useful in a CI system together with `--findRelatedTests` ' + + 'to determine the tests Jest will run based on specific files', + type: 'boolean' + }, + logHeapUsage: { + description: + 'Logs the heap usage after every test. Useful to debug ' + + 'memory leaks. Use together with `--runInBand` and `--expose-gc` in ' + + 'node.', + type: 'boolean' + }, + maxConcurrency: { + description: + 'Specifies the maximum number of tests that are allowed to run ' + + 'concurrently. This only affects tests using `test.concurrent`.', + type: 'number' + }, + maxWorkers: { + alias: 'w', + description: + 'Specifies the maximum number of workers the worker-pool ' + + 'will spawn for running tests. This defaults to the number of the ' + + 'cores available on your machine. (its usually best not to override ' + + 'this default)', + type: 'string' + }, + moduleDirectories: { + description: + 'An array of directory names to be searched recursively ' + + "up from the requiring module's location.", + string: true, + type: 'array' + }, + moduleFileExtensions: { + description: + 'An array of file extensions your modules use. If you ' + + 'require modules without specifying a file extension, these are the ' + + 'extensions Jest will look for.', + string: true, + type: 'array' + }, + moduleNameMapper: { + description: + 'A JSON string with a map from regular expressions to ' + + 'module names or to arrays of module names that allow to stub ' + + 'out resources, like images or styles with a single module', + type: 'string' + }, + modulePathIgnorePatterns: { + description: + 'An array of regexp pattern strings that are matched ' + + 'against all module paths before those paths are to be considered ' + + '"visible" to the module loader.', + string: true, + type: 'array' + }, + modulePaths: { + description: + 'An alternative API to setting the NODE_PATH env variable, ' + + 'modulePaths is an array of absolute paths to additional locations to ' + + 'search when resolving modules.', + string: true, + type: 'array' + }, + noStackTrace: { + description: 'Disables stack trace in test results output', + type: 'boolean' + }, + notify: { + description: 'Activates notifications for test results.', + type: 'boolean' + }, + notifyMode: { + description: 'Specifies when notifications will appear for test results.', + type: 'string' + }, + onlyChanged: { + alias: 'o', + description: + 'Attempts to identify which tests to run based on which ' + + "files have changed in the current repository. Only works if you're " + + 'running tests in a git or hg repository at the moment.', + type: 'boolean' + }, + onlyFailures: { + alias: 'f', + description: 'Run tests that failed in the previous execution.', + type: 'boolean' + }, + openHandlesTimeout: { + description: + 'Print a warning about probable open handles if Jest does not exit ' + + 'cleanly after this number of milliseconds. `0` to disable.', + type: 'number' + }, + outputFile: { + description: + 'Write test results to a file when the --json option is ' + + 'also specified.', + type: 'string' + }, + passWithNoTests: { + description: + 'Will not fail if no tests are found (for example while using `--testPathPattern`.)', + type: 'boolean' + }, + preset: { + description: "A preset that is used as a base for Jest's configuration.", + type: 'string' + }, + prettierPath: { + description: 'The path to the "prettier" module used for inline snapshots.', + type: 'string' + }, + projects: { + description: + 'A list of projects that use Jest to run all tests of all ' + + 'projects in a single instance of Jest.', + string: true, + type: 'array' + }, + randomize: { + description: + 'Shuffle the order of the tests within a file. In order to choose the seed refer to the `--seed` CLI option.', + type: 'boolean' + }, + reporters: { + description: 'A list of custom reporters for the test suite.', + string: true, + type: 'array' + }, + resetMocks: { + description: + 'Automatically reset mock state before every test. ' + + 'Equivalent to calling jest.resetAllMocks() before each test.', + type: 'boolean' + }, + resetModules: { + description: + 'If enabled, the module registry for every test file will ' + + 'be reset before running each individual test.', + type: 'boolean' + }, + resolver: { + description: 'A JSON string which allows the use of a custom resolver.', + type: 'string' + }, + restoreMocks: { + description: + 'Automatically restore mock state and implementation before every test. ' + + 'Equivalent to calling jest.restoreAllMocks() before each test.', + type: 'boolean' + }, + rootDir: { + description: + 'The root directory that Jest should scan for tests and ' + + 'modules within.', + type: 'string' + }, + roots: { + description: + 'A list of paths to directories that Jest should use to ' + + 'search for files in.', + string: true, + type: 'array' + }, + runInBand: { + alias: 'i', + description: + 'Run all tests serially in the current process (rather than ' + + 'creating a worker pool of child processes that run tests). This ' + + 'is sometimes useful for debugging, but such use cases are pretty ' + + 'rare.', + type: 'boolean' + }, + runTestsByPath: { + description: + 'Used when provided patterns are exact file paths. This avoids ' + + 'converting them into a regular expression and matching it against ' + + 'every single file.', + type: 'boolean' + }, + runner: { + description: + "Allows to use a custom runner instead of Jest's default test runner.", + type: 'string' + }, + seed: { + description: + 'Sets a seed value that can be retrieved in a tests file via `jest.getSeed()`. If this option is not specified Jest will randomly generate the value. The seed value must be between `-0x80000000` and `0x7fffffff` inclusive.', + type: 'number' + }, + selectProjects: { + description: + 'Run the tests of the specified projects. ' + + 'Jest uses the attribute `displayName` in the configuration to identify each project.', + string: true, + type: 'array' + }, + setupFiles: { + description: + 'A list of paths to modules that run some code to configure or ' + + 'set up the testing environment before each test.', + string: true, + type: 'array' + }, + setupFilesAfterEnv: { + description: + 'A list of paths to modules that run some code to configure or ' + + 'set up the testing framework before each test', + string: true, + type: 'array' + }, + shard: { + description: + 'Shard tests and execute only the selected shard, specify in ' + + 'the form "current/all". 1-based, for example "3/5".', + type: 'string' + }, + showConfig: { + description: 'Print your jest config and then exits.', + type: 'boolean' + }, + showSeed: { + description: + 'Prints the seed value in the test report summary. See `--seed` for how to set this value', + type: 'boolean' + }, + silent: { + description: 'Prevent tests from printing messages through the console.', + type: 'boolean' + }, + skipFilter: { + description: + 'Disables the filter provided by --filter. Useful for CI jobs, or ' + + 'local enforcement when fixing tests.', + type: 'boolean' + }, + snapshotSerializers: { + description: + 'A list of paths to snapshot serializer modules Jest should ' + + 'use for snapshot testing.', + string: true, + type: 'array' + }, + testEnvironment: { + description: 'Alias for --env', + type: 'string' + }, + testEnvironmentOptions: { + description: + 'A JSON string with options that will be passed to the `testEnvironment`. ' + + 'The relevant options depend on the environment.', + type: 'string' + }, + testFailureExitCode: { + description: 'Exit code of `jest` command if the test run failed', + type: 'string' // number + }, + + testLocationInResults: { + description: 'Add `location` information to the test results', + type: 'boolean' + }, + testMatch: { + description: 'The glob patterns Jest uses to detect test files.', + string: true, + type: 'array' + }, + testNamePattern: { + alias: 't', + description: 'Run only tests with a name that matches the regex pattern.', + type: 'string' + }, + testPathIgnorePatterns: { + description: + 'An array of regexp pattern strings that are matched ' + + 'against all test paths before executing the test. If the test path ' + + 'matches any of the patterns, it will be skipped.', + string: true, + type: 'array' + }, + testPathPattern: { + description: + 'A regexp pattern string that is matched against all tests ' + + 'paths before executing the test.', + string: true, + type: 'array' + }, + testRegex: { + description: + 'A string or array of string regexp patterns that Jest uses to detect test files.', + string: true, + type: 'array' + }, + testResultsProcessor: { + description: + 'Allows the use of a custom results processor. ' + + 'This processor must be a node module that exports ' + + 'a function expecting as the first argument the result object.', + type: 'string' + }, + testRunner: { + description: + 'Allows to specify a custom test runner. The default is' + + ' `jest-circus/runner`. A path to a custom test runner can be provided:' + + ' `/path/to/testRunner.js`.', + type: 'string' + }, + testSequencer: { + description: + 'Allows to specify a custom test sequencer. The default is ' + + '`@jest/test-sequencer`. A path to a custom test sequencer can be ' + + 'provided: `/path/to/testSequencer.js`', + type: 'string' + }, + testTimeout: { + description: 'This option sets the default timeouts of test cases.', + type: 'number' + }, + transform: { + description: + 'A JSON string which maps from regular expressions to paths ' + + 'to transformers.', + type: 'string' + }, + transformIgnorePatterns: { + description: + 'An array of regexp pattern strings that are matched ' + + 'against all source file paths before transformation.', + string: true, + type: 'array' + }, + unmockedModulePathPatterns: { + description: + 'An array of regexp pattern strings that are matched ' + + 'against all modules before the module loader will automatically ' + + 'return a mock for them.', + string: true, + type: 'array' + }, + updateSnapshot: { + alias: 'u', + description: + 'Use this flag to re-record snapshots. ' + + 'Can be used together with a test suite pattern or with ' + + '`--testNamePattern` to re-record snapshot for test matching ' + + 'the pattern', + type: 'boolean' + }, + useStderr: { + description: 'Divert all output to stderr.', + type: 'boolean' + }, + verbose: { + description: + 'Display individual test results with the test suite hierarchy.', + type: 'boolean' + }, + watch: { + description: + 'Watch files for changes and rerun tests related to ' + + 'changed files. If you want to re-run all tests when a file has ' + + 'changed, use the `--watchAll` option.', + type: 'boolean' + }, + watchAll: { + description: + 'Watch files for changes and rerun all tests. If you want ' + + 'to re-run only the tests related to the changed files, use the ' + + '`--watch` option.', + type: 'boolean' + }, + watchPathIgnorePatterns: { + description: + 'An array of regexp pattern strings that are matched ' + + 'against all paths before trigger test re-run in watch mode. ' + + 'If the test path matches any of the patterns, it will be skipped.', + string: true, + type: 'array' + }, + watchman: { + description: + 'Whether to use watchman for file crawling. Disable using ' + + '--no-watchman.', + type: 'boolean' + }, + workerThreads: { + description: + 'Whether to use worker threads for parallelization. Child processes ' + + 'are used by default.', + type: 'boolean' + } +}; +exports.options = options; diff --git a/node_modules/jest-cli/build/index.d.ts b/node_modules/jest-cli/build/index.d.ts new file mode 100644 index 00000000..88680093 --- /dev/null +++ b/node_modules/jest-cli/build/index.d.ts @@ -0,0 +1,18 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import type {Options} from 'yargs'; + +export declare function run( + maybeArgv?: Array, + project?: string, +): Promise; + +export declare const yargsOptions: { + [key: string]: Options; +}; + +export {}; diff --git a/node_modules/jest-cli/build/index.js b/node_modules/jest-cli/build/index.js new file mode 100644 index 00000000..fc00c8bf --- /dev/null +++ b/node_modules/jest-cli/build/index.js @@ -0,0 +1,19 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +Object.defineProperty(exports, 'run', { + enumerable: true, + get: function () { + return _run.run; + } +}); +Object.defineProperty(exports, 'yargsOptions', { + enumerable: true, + get: function () { + return _args.options; + } +}); +var _run = require('./run'); +var _args = require('./args'); diff --git a/node_modules/jest-cli/build/run.js b/node_modules/jest-cli/build/run.js new file mode 100644 index 00000000..6e0a5cc5 --- /dev/null +++ b/node_modules/jest-cli/build/run.js @@ -0,0 +1,239 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.buildArgv = buildArgv; +exports.run = run; +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +function _exit() { + const data = _interopRequireDefault(require('exit')); + _exit = function () { + return data; + }; + return data; +} +function _yargs() { + const data = _interopRequireDefault(require('yargs')); + _yargs = function () { + return data; + }; + return data; +} +function _core() { + const data = require('@jest/core'); + _core = function () { + return data; + }; + return data; +} +function _createJest() { + const data = require('create-jest'); + _createJest = function () { + return data; + }; + return data; +} +function _jestConfig() { + const data = require('jest-config'); + _jestConfig = function () { + return data; + }; + return data; +} +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +function _jestValidate() { + const data = require('jest-validate'); + _jestValidate = function () { + return data; + }; + return data; +} +var args = _interopRequireWildcard(require('./args')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +async function run(maybeArgv, project) { + try { + const argv = await buildArgv(maybeArgv); + if (argv.init) { + await (0, _createJest().runCreate)(); + return; + } + const projects = getProjectListFromCLIArgs(argv, project); + const {results, globalConfig} = await (0, _core().runCLI)(argv, projects); + readResultsAndExit(results, globalConfig); + } catch (error) { + (0, _jestUtil().clearLine)(process.stderr); + (0, _jestUtil().clearLine)(process.stdout); + if (error?.stack) { + console.error(_chalk().default.red(error.stack)); + } else { + console.error(_chalk().default.red(error)); + } + (0, _exit().default)(1); + throw error; + } +} +async function buildArgv(maybeArgv) { + const version = + (0, _core().getVersion)() + + (__dirname.includes(`packages${path().sep}jest-cli`) ? '-dev' : ''); + const rawArgv = maybeArgv || process.argv.slice(2); + const argv = await (0, _yargs().default)(rawArgv) + .usage(args.usage) + .version(version) + .alias('help', 'h') + .options(args.options) + .epilogue(args.docs) + .check(args.check).argv; + (0, _jestValidate().validateCLIOptions)( + argv, + { + ...args.options, + deprecationEntries: _jestConfig().deprecationEntries + }, + // strip leading dashes + Array.isArray(rawArgv) + ? rawArgv.map(rawArgv => rawArgv.replace(/^--?/, '')) + : Object.keys(rawArgv) + ); + + // strip dashed args + return Object.keys(argv).reduce( + (result, key) => { + if (!key.includes('-')) { + result[key] = argv[key]; + } + return result; + }, + { + $0: argv.$0, + _: argv._ + } + ); +} +const getProjectListFromCLIArgs = (argv, project) => { + const projects = argv.projects ? argv.projects : []; + if (project) { + projects.push(project); + } + if (!projects.length && process.platform === 'win32') { + try { + projects.push((0, _jestUtil().tryRealpath)(process.cwd())); + } catch { + // do nothing, just catch error + // process.binding('fs').realpath can throw, e.g. on mapped drives + } + } + if (!projects.length) { + projects.push(process.cwd()); + } + return projects; +}; +const readResultsAndExit = (result, globalConfig) => { + const code = !result || result.success ? 0 : globalConfig.testFailureExitCode; + + // Only exit if needed + process.on('exit', () => { + if (typeof code === 'number' && code !== 0) { + process.exitCode = code; + } + }); + if (globalConfig.forceExit) { + if (!globalConfig.detectOpenHandles) { + console.warn( + `${_chalk().default.bold( + 'Force exiting Jest: ' + )}Have you considered using \`--detectOpenHandles\` to detect ` + + 'async operations that kept running after all tests finished?' + ); + } + (0, _exit().default)(code); + } else if ( + !globalConfig.detectOpenHandles && + globalConfig.openHandlesTimeout !== 0 + ) { + const timeout = globalConfig.openHandlesTimeout; + setTimeout(() => { + console.warn( + _chalk().default.yellow.bold( + `Jest did not exit ${ + timeout === 1000 ? 'one second' : `${timeout / 1000} seconds` + } after the test run has completed.\n\n'` + ) + + _chalk().default.yellow( + 'This usually means that there are asynchronous operations that ' + + "weren't stopped in your tests. Consider running Jest with " + + '`--detectOpenHandles` to troubleshoot this issue.' + ) + ); + }, timeout).unref(); + } +}; diff --git a/node_modules/jest-cli/package.json b/node_modules/jest-cli/package.json new file mode 100644 index 00000000..a923ae25 --- /dev/null +++ b/node_modules/jest-cli/package.json @@ -0,0 +1,88 @@ +{ + "name": "jest-cli", + "description": "Delightful JavaScript Testing.", + "version": "29.7.0", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json", + "./bin/jest": "./bin/jest.js" + }, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "devDependencies": { + "@tsd/typescript": "^5.0.4", + "@types/exit": "^0.1.30", + "@types/yargs": "^17.0.8", + "tsd-lite": "^0.7.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + }, + "bin": { + "jest": "./bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-cli" + }, + "bugs": { + "url": "https://github.com/jestjs/jest/issues" + }, + "homepage": "https://jestjs.io/", + "license": "MIT", + "keywords": [ + "ava", + "babel", + "coverage", + "easy", + "expect", + "facebook", + "immersive", + "instant", + "jasmine", + "jest", + "jsdom", + "mocha", + "mocking", + "painless", + "qunit", + "runner", + "sandboxed", + "snapshot", + "tap", + "tape", + "test", + "testing", + "typescript", + "watch" + ], + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-config/LICENSE b/node_modules/jest-config/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-config/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-config/build/Defaults.js b/node_modules/jest-config/build/Defaults.js new file mode 100644 index 00000000..ee5c7b1a --- /dev/null +++ b/node_modules/jest-config/build/Defaults.js @@ -0,0 +1,129 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function _path() { + const data = require('path'); + _path = function () { + return data; + }; + return data; +} +function _ciInfo() { + const data = require('ci-info'); + _ciInfo = function () { + return data; + }; + return data; +} +function _jestRegexUtil() { + const data = require('jest-regex-util'); + _jestRegexUtil = function () { + return data; + }; + return data; +} +var _constants = require('./constants'); +var _getCacheDirectory = _interopRequireDefault(require('./getCacheDirectory')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const NODE_MODULES_REGEXP = (0, _jestRegexUtil().replacePathSepForRegex)( + _constants.NODE_MODULES +); +const defaultOptions = { + automock: false, + bail: 0, + cache: true, + cacheDirectory: (0, _getCacheDirectory.default)(), + changedFilesWithAncestor: false, + ci: _ciInfo().isCI, + clearMocks: false, + collectCoverage: false, + coveragePathIgnorePatterns: [NODE_MODULES_REGEXP], + coverageProvider: 'babel', + coverageReporters: ['json', 'text', 'lcov', 'clover'], + detectLeaks: false, + detectOpenHandles: false, + errorOnDeprecated: false, + expand: false, + extensionsToTreatAsEsm: [], + fakeTimers: { + enableGlobally: false + }, + forceCoverageMatch: [], + globals: {}, + haste: { + computeSha1: false, + enableSymlinks: false, + forceNodeFilesystemAPI: true, + throwOnModuleCollision: false + }, + injectGlobals: true, + listTests: false, + maxConcurrency: 5, + maxWorkers: '50%', + moduleDirectories: ['node_modules'], + moduleFileExtensions: [ + 'js', + 'mjs', + 'cjs', + 'jsx', + 'ts', + 'tsx', + 'json', + 'node' + ], + moduleNameMapper: {}, + modulePathIgnorePatterns: [], + noStackTrace: false, + notify: false, + notifyMode: 'failure-change', + openHandlesTimeout: 1000, + passWithNoTests: false, + prettierPath: 'prettier', + resetMocks: false, + resetModules: false, + restoreMocks: false, + roots: [''], + runTestsByPath: false, + runner: 'jest-runner', + setupFiles: [], + setupFilesAfterEnv: [], + skipFilter: false, + slowTestThreshold: 5, + snapshotFormat: { + escapeString: false, + printBasicPrototype: false + }, + snapshotSerializers: [], + testEnvironment: 'jest-environment-node', + testEnvironmentOptions: {}, + testFailureExitCode: 1, + testLocationInResults: false, + testMatch: ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[tj]s?(x)'], + testPathIgnorePatterns: [NODE_MODULES_REGEXP], + testRegex: [], + testRunner: 'jest-circus/runner', + testSequencer: '@jest/test-sequencer', + transformIgnorePatterns: [ + NODE_MODULES_REGEXP, + `\\.pnp\\.[^\\${_path().sep}]+$` + ], + useStderr: false, + watch: false, + watchPathIgnorePatterns: [], + watchman: true, + workerThreads: false +}; +var _default = defaultOptions; +exports.default = _default; diff --git a/node_modules/jest-config/build/Deprecated.js b/node_modules/jest-config/build/Deprecated.js new file mode 100644 index 00000000..e13c1659 --- /dev/null +++ b/node_modules/jest-config/build/Deprecated.js @@ -0,0 +1,85 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const deprecatedOptions = { + browser: () => + ` Option ${_chalk().default.bold( + '"browser"' + )} has been deprecated. Please install "browser-resolve" and use the "resolver" option in Jest configuration as shown in the documentation: https://jestjs.io/docs/configuration#resolver-string`, + collectCoverageOnlyFrom: _options => ` Option ${_chalk().default.bold( + '"collectCoverageOnlyFrom"' + )} was replaced by ${_chalk().default.bold('"collectCoverageFrom"')}. + + Please update your configuration.`, + extraGlobals: _options => ` Option ${_chalk().default.bold( + '"extraGlobals"' + )} was replaced by ${_chalk().default.bold('"sandboxInjectedGlobals"')}. + + Please update your configuration.`, + moduleLoader: _options => ` Option ${_chalk().default.bold( + '"moduleLoader"' + )} was replaced by ${_chalk().default.bold('"runtime"')}. + + Please update your configuration.`, + preprocessorIgnorePatterns: _options => ` Option ${_chalk().default.bold( + '"preprocessorIgnorePatterns"' + )} was replaced by ${_chalk().default.bold( + '"transformIgnorePatterns"' + )}, which support multiple preprocessors. + + Please update your configuration.`, + scriptPreprocessor: _options => ` Option ${_chalk().default.bold( + '"scriptPreprocessor"' + )} was replaced by ${_chalk().default.bold( + '"transform"' + )}, which support multiple preprocessors. + + Please update your configuration.`, + setupTestFrameworkScriptFile: _options => ` Option ${_chalk().default.bold( + '"setupTestFrameworkScriptFile"' + )} was replaced by configuration ${_chalk().default.bold( + '"setupFilesAfterEnv"' + )}, which supports multiple paths. + + Please update your configuration.`, + testPathDirs: _options => ` Option ${_chalk().default.bold( + '"testPathDirs"' + )} was replaced by ${_chalk().default.bold('"roots"')}. + + Please update your configuration. + `, + testURL: _options => ` Option ${_chalk().default.bold( + '"testURL"' + )} was replaced by passing the URL via ${_chalk().default.bold( + '"testEnvironmentOptions.url"' + )}. + + Please update your configuration.`, + timers: _options => ` Option ${_chalk().default.bold( + '"timers"' + )} was replaced by ${_chalk().default.bold('"fakeTimers"')}. + + Please update your configuration.` +}; +var _default = deprecatedOptions; +exports.default = _default; diff --git a/node_modules/jest-config/build/Descriptions.js b/node_modules/jest-config/build/Descriptions.js new file mode 100644 index 00000000..d46491cd --- /dev/null +++ b/node_modules/jest-config/build/Descriptions.js @@ -0,0 +1,104 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const descriptions = { + automock: 'All imported modules in your tests should be mocked automatically', + bail: 'Stop running tests after `n` failures', + cacheDirectory: + 'The directory where Jest should store its cached dependency information', + clearMocks: + 'Automatically clear mock calls, instances, contexts and results before every test', + collectCoverage: + 'Indicates whether the coverage information should be collected while executing the test', + collectCoverageFrom: + 'An array of glob patterns indicating a set of files for which coverage information should be collected', + coverageDirectory: + 'The directory where Jest should output its coverage files', + coveragePathIgnorePatterns: + 'An array of regexp pattern strings used to skip coverage collection', + coverageProvider: + 'Indicates which provider should be used to instrument code for coverage', + coverageReporters: + 'A list of reporter names that Jest uses when writing coverage reports', + coverageThreshold: + 'An object that configures minimum threshold enforcement for coverage results', + dependencyExtractor: 'A path to a custom dependency extractor', + errorOnDeprecated: + 'Make calling deprecated APIs throw helpful error messages', + fakeTimers: 'The default configuration for fake timers', + forceCoverageMatch: + 'Force coverage collection from ignored files using an array of glob patterns', + globalSetup: + 'A path to a module which exports an async function that is triggered once before all test suites', + globalTeardown: + 'A path to a module which exports an async function that is triggered once after all test suites', + globals: + 'A set of global variables that need to be available in all test environments', + maxWorkers: + 'The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.', + moduleDirectories: + "An array of directory names to be searched recursively up from the requiring module's location", + moduleFileExtensions: 'An array of file extensions your modules use', + moduleNameMapper: + 'A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module', + modulePathIgnorePatterns: + "An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader", + notify: 'Activates notifications for test results', + notifyMode: + 'An enum that specifies notification mode. Requires { notify: true }', + preset: "A preset that is used as a base for Jest's configuration", + projects: 'Run tests from one or more projects', + reporters: 'Use this configuration option to add custom reporters to Jest', + resetMocks: 'Automatically reset mock state before every test', + resetModules: 'Reset the module registry before running each individual test', + resolver: 'A path to a custom resolver', + restoreMocks: + 'Automatically restore mock state and implementation before every test', + rootDir: + 'The root directory that Jest should scan for tests and modules within', + roots: + 'A list of paths to directories that Jest should use to search for files in', + runner: + "Allows you to use a custom runner instead of Jest's default test runner", + setupFiles: + 'The paths to modules that run some code to configure or set up the testing environment before each test', + setupFilesAfterEnv: + 'A list of paths to modules that run some code to configure or set up the testing framework before each test', + slowTestThreshold: + 'The number of seconds after which a test is considered as slow and reported as such in the results.', + snapshotSerializers: + 'A list of paths to snapshot serializer modules Jest should use for snapshot testing', + testEnvironment: 'The test environment that will be used for testing', + testEnvironmentOptions: 'Options that will be passed to the testEnvironment', + testLocationInResults: 'Adds a location field to test results', + testMatch: 'The glob patterns Jest uses to detect test files', + testPathIgnorePatterns: + 'An array of regexp pattern strings that are matched against all test paths, matched tests are skipped', + testRegex: + 'The regexp pattern or array of patterns that Jest uses to detect test files', + testResultsProcessor: + 'This option allows the use of a custom results processor', + testRunner: 'This option allows use of a custom test runner', + transform: 'A map from regular expressions to paths to transformers', + transformIgnorePatterns: + 'An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation', + unmockedModulePathPatterns: + 'An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them', + verbose: + 'Indicates whether each individual test should be reported during the run', + watchPathIgnorePatterns: + 'An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode', + watchman: 'Whether to use watchman for file crawling' +}; +var _default = descriptions; +exports.default = _default; diff --git a/node_modules/jest-config/build/ReporterValidationErrors.js b/node_modules/jest-config/build/ReporterValidationErrors.js new file mode 100644 index 00000000..2be0df37 --- /dev/null +++ b/node_modules/jest-config/build/ReporterValidationErrors.js @@ -0,0 +1,122 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.createArrayReporterError = createArrayReporterError; +exports.createReporterError = createReporterError; +exports.validateReporters = validateReporters; +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +function _jestGetType() { + const data = require('jest-get-type'); + _jestGetType = function () { + return data; + }; + return data; +} +function _jestValidate() { + const data = require('jest-validate'); + _jestValidate = function () { + return data; + }; + return data; +} +var _utils = require('./utils'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const validReporterTypes = ['array', 'string']; +const ERROR = `${_utils.BULLET}Reporter Validation Error`; + +/** + * Reporter Validation Error is thrown if the given arguments + * within the reporter are not valid. + * + * This is a highly specific reporter error and in the future will be + * merged with jest-validate. Till then, we can make use of it. It works + * and that's what counts most at this time. + */ +function createReporterError(reporterIndex, reporterValue) { + const errorMessage = + ` Reporter at index ${reporterIndex} must be of type:\n` + + ` ${_chalk().default.bold.green(validReporterTypes.join(' or '))}\n` + + ' but instead received:\n' + + ` ${_chalk().default.bold.red( + (0, _jestGetType().getType)(reporterValue) + )}`; + return new (_jestValidate().ValidationError)( + ERROR, + errorMessage, + _utils.DOCUMENTATION_NOTE + ); +} +function createArrayReporterError( + arrayReporter, + reporterIndex, + valueIndex, + value, + expectedType, + valueName +) { + const errorMessage = + ` Unexpected value for ${valueName} ` + + `at index ${valueIndex} of reporter at index ${reporterIndex}\n` + + ' Expected:\n' + + ` ${_chalk().default.bold.red(expectedType)}\n` + + ' Got:\n' + + ` ${_chalk().default.bold.green((0, _jestGetType().getType)(value))}\n` + + ' Reporter configuration:\n' + + ` ${_chalk().default.bold.green( + JSON.stringify(arrayReporter, null, 2).split('\n').join('\n ') + )}`; + return new (_jestValidate().ValidationError)( + ERROR, + errorMessage, + _utils.DOCUMENTATION_NOTE + ); +} +function validateReporters(reporterConfig) { + return reporterConfig.every((reporter, index) => { + if (Array.isArray(reporter)) { + validateArrayReporter(reporter, index); + } else if (typeof reporter !== 'string') { + throw createReporterError(index, reporter); + } + return true; + }); +} +function validateArrayReporter(arrayReporter, reporterIndex) { + const [path, options] = arrayReporter; + if (typeof path !== 'string') { + throw createArrayReporterError( + arrayReporter, + reporterIndex, + 0, + path, + 'string', + 'Path' + ); + } else if (typeof options !== 'object') { + throw createArrayReporterError( + arrayReporter, + reporterIndex, + 1, + options, + 'object', + 'Reporter Configuration' + ); + } +} diff --git a/node_modules/jest-config/build/ValidConfig.js b/node_modules/jest-config/build/ValidConfig.js new file mode 100644 index 00000000..0c1250c4 --- /dev/null +++ b/node_modules/jest-config/build/ValidConfig.js @@ -0,0 +1,342 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.initialProjectOptions = exports.initialOptions = void 0; +function _jestRegexUtil() { + const data = require('jest-regex-util'); + _jestRegexUtil = function () { + return data; + }; + return data; +} +function _jestValidate() { + const data = require('jest-validate'); + _jestValidate = function () { + return data; + }; + return data; +} +function _prettyFormat() { + const data = require('pretty-format'); + _prettyFormat = function () { + return data; + }; + return data; +} +var _constants = require('./constants'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const NODE_MODULES_REGEXP = (0, _jestRegexUtil().replacePathSepForRegex)( + _constants.NODE_MODULES +); +const initialOptions = { + automock: false, + bail: (0, _jestValidate().multipleValidOptions)(false, 0), + cache: true, + cacheDirectory: '/tmp/user/jest', + changedFilesWithAncestor: false, + changedSince: 'master', + ci: false, + clearMocks: false, + collectCoverage: true, + collectCoverageFrom: ['src', '!public'], + coverageDirectory: 'coverage', + coveragePathIgnorePatterns: [NODE_MODULES_REGEXP], + coverageProvider: 'v8', + coverageReporters: ['json', 'text', 'lcov', 'clover'], + coverageThreshold: { + global: { + branches: 50, + functions: 100, + lines: 100, + statements: 100 + } + }, + dependencyExtractor: '/dependencyExtractor.js', + detectLeaks: false, + detectOpenHandles: false, + displayName: (0, _jestValidate().multipleValidOptions)('test-config', { + color: 'blue', + name: 'test-config' + }), + errorOnDeprecated: false, + expand: false, + extensionsToTreatAsEsm: [], + fakeTimers: { + advanceTimers: (0, _jestValidate().multipleValidOptions)(40, true), + doNotFake: [ + 'Date', + 'hrtime', + 'nextTick', + 'performance', + 'queueMicrotask', + 'requestAnimationFrame', + 'cancelAnimationFrame', + 'requestIdleCallback', + 'cancelIdleCallback', + 'setImmediate', + 'clearImmediate', + 'setInterval', + 'clearInterval', + 'setTimeout', + 'clearTimeout' + ], + enableGlobally: true, + legacyFakeTimers: false, + now: 1483228800000, + timerLimit: 1000 + }, + filter: '/filter.js', + forceCoverageMatch: ['**/*.t.js'], + forceExit: false, + globalSetup: 'setup.js', + globalTeardown: 'teardown.js', + globals: { + __DEV__: true + }, + haste: { + computeSha1: true, + defaultPlatform: 'ios', + enableSymlinks: false, + forceNodeFilesystemAPI: true, + hasteImplModulePath: '/haste_impl.js', + hasteMapModulePath: '', + platforms: ['ios', 'android'], + retainAllFiles: false, + throwOnModuleCollision: false + }, + id: 'string', + injectGlobals: true, + json: false, + lastCommit: false, + listTests: false, + logHeapUsage: true, + maxConcurrency: 5, + maxWorkers: '50%', + moduleDirectories: ['node_modules'], + moduleFileExtensions: [ + 'js', + 'mjs', + 'cjs', + 'json', + 'jsx', + 'ts', + 'tsx', + 'node' + ], + moduleNameMapper: { + '^React$': '/node_modules/react' + }, + modulePathIgnorePatterns: ['/build/'], + modulePaths: ['/shared/vendor/modules'], + noStackTrace: false, + notify: false, + notifyMode: 'failure-change', + onlyChanged: false, + onlyFailures: false, + openHandlesTimeout: 1000, + passWithNoTests: false, + preset: 'react-native', + prettierPath: '/node_modules/prettier', + projects: ['project-a', 'project-b/'], + randomize: false, + reporters: [ + 'default', + 'custom-reporter-1', + [ + 'custom-reporter-2', + { + configValue: true + } + ] + ], + resetMocks: false, + resetModules: false, + resolver: '/resolver.js', + restoreMocks: false, + rootDir: '/', + roots: [''], + runTestsByPath: false, + runner: 'jest-runner', + runtime: '', + sandboxInjectedGlobals: [], + setupFiles: ['/setup.js'], + setupFilesAfterEnv: ['/testSetupFile.js'], + showSeed: false, + silent: true, + skipFilter: false, + skipNodeResolution: false, + slowTestThreshold: 5, + snapshotFormat: _prettyFormat().DEFAULT_OPTIONS, + snapshotResolver: '/snapshotResolver.js', + snapshotSerializers: ['my-serializer-module'], + testEnvironment: 'jest-environment-node', + testEnvironmentOptions: { + url: 'http://localhost', + userAgent: 'Agent/007' + }, + testFailureExitCode: 1, + testLocationInResults: false, + testMatch: ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[jt]s?(x)'], + testNamePattern: 'test signature', + testPathIgnorePatterns: [NODE_MODULES_REGEXP], + testRegex: (0, _jestValidate().multipleValidOptions)( + '(/__tests__/.*|(\\.|/)(test|spec))\\.[jt]sx?$', + ['/__tests__/\\.test\\.[jt]sx?$', '/__tests__/\\.spec\\.[jt]sx?$'] + ), + testResultsProcessor: 'processor-node-module', + testRunner: 'circus', + testSequencer: '@jest/test-sequencer', + testTimeout: 5000, + transform: { + '\\.js$': '/preprocessor.js' + }, + transformIgnorePatterns: [NODE_MODULES_REGEXP], + unmockedModulePathPatterns: ['mock'], + updateSnapshot: true, + useStderr: false, + verbose: false, + watch: false, + watchAll: false, + watchPathIgnorePatterns: ['/e2e/'], + watchPlugins: [ + 'path/to/yourWatchPlugin', + [ + 'jest-watch-typeahead/filename', + { + key: 'k', + prompt: 'do something with my custom prompt' + } + ] + ], + watchman: true, + workerIdleMemoryLimit: (0, _jestValidate().multipleValidOptions)(0.2, '50%'), + workerThreads: true +}; +exports.initialOptions = initialOptions; +const initialProjectOptions = { + automock: false, + cache: true, + cacheDirectory: '/tmp/user/jest', + clearMocks: false, + collectCoverageFrom: ['src', '!public'], + coverageDirectory: 'coverage', + coveragePathIgnorePatterns: [NODE_MODULES_REGEXP], + dependencyExtractor: '/dependencyExtractor.js', + detectLeaks: false, + detectOpenHandles: false, + displayName: (0, _jestValidate().multipleValidOptions)('test-config', { + color: 'blue', + name: 'test-config' + }), + errorOnDeprecated: false, + extensionsToTreatAsEsm: [], + fakeTimers: { + advanceTimers: (0, _jestValidate().multipleValidOptions)(40, true), + doNotFake: [ + 'Date', + 'hrtime', + 'nextTick', + 'performance', + 'queueMicrotask', + 'requestAnimationFrame', + 'cancelAnimationFrame', + 'requestIdleCallback', + 'cancelIdleCallback', + 'setImmediate', + 'clearImmediate', + 'setInterval', + 'clearInterval', + 'setTimeout', + 'clearTimeout' + ], + enableGlobally: true, + legacyFakeTimers: false, + now: 1483228800000, + timerLimit: 1000 + }, + filter: '/filter.js', + forceCoverageMatch: ['**/*.t.js'], + globalSetup: 'setup.js', + globalTeardown: 'teardown.js', + globals: { + __DEV__: true + }, + haste: { + computeSha1: true, + defaultPlatform: 'ios', + enableSymlinks: false, + forceNodeFilesystemAPI: true, + hasteImplModulePath: '/haste_impl.js', + hasteMapModulePath: '', + platforms: ['ios', 'android'], + retainAllFiles: false, + throwOnModuleCollision: false + }, + id: 'string', + injectGlobals: true, + moduleDirectories: ['node_modules'], + moduleFileExtensions: [ + 'js', + 'mjs', + 'cjs', + 'json', + 'jsx', + 'ts', + 'tsx', + 'node' + ], + moduleNameMapper: { + '^React$': '/node_modules/react' + }, + modulePathIgnorePatterns: ['/build/'], + modulePaths: ['/shared/vendor/modules'], + openHandlesTimeout: 1000, + preset: 'react-native', + prettierPath: '/node_modules/prettier', + resetMocks: false, + resetModules: false, + resolver: '/resolver.js', + restoreMocks: false, + rootDir: '/', + roots: [''], + runner: 'jest-runner', + runtime: '', + sandboxInjectedGlobals: [], + setupFiles: ['/setup.js'], + setupFilesAfterEnv: ['/testSetupFile.js'], + skipFilter: false, + skipNodeResolution: false, + slowTestThreshold: 5, + snapshotFormat: _prettyFormat().DEFAULT_OPTIONS, + snapshotResolver: '/snapshotResolver.js', + snapshotSerializers: ['my-serializer-module'], + testEnvironment: 'jest-environment-node', + testEnvironmentOptions: { + url: 'http://localhost', + userAgent: 'Agent/007' + }, + testLocationInResults: false, + testMatch: ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[jt]s?(x)'], + testPathIgnorePatterns: [NODE_MODULES_REGEXP], + testRegex: (0, _jestValidate().multipleValidOptions)( + '(/__tests__/.*|(\\.|/)(test|spec))\\.[jt]sx?$', + ['/__tests__/\\.test\\.[jt]sx?$', '/__tests__/\\.spec\\.[jt]sx?$'] + ), + testRunner: 'circus', + transform: { + '\\.js$': '/preprocessor.js' + }, + transformIgnorePatterns: [NODE_MODULES_REGEXP], + unmockedModulePathPatterns: ['mock'], + watchPathIgnorePatterns: ['/e2e/'], + workerIdleMemoryLimit: (0, _jestValidate().multipleValidOptions)(0.2, '50%') +}; +exports.initialProjectOptions = initialProjectOptions; diff --git a/node_modules/jest-config/build/color.js b/node_modules/jest-config/build/color.js new file mode 100644 index 00000000..ac0bf905 --- /dev/null +++ b/node_modules/jest-config/build/color.js @@ -0,0 +1,31 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.getDisplayNameColor = void 0; +function _crypto() { + const data = require('crypto'); + _crypto = function () { + return data; + }; + return data; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const colors = ['red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white']; +const getDisplayNameColor = seed => { + if (seed === undefined) { + return 'white'; + } + const hash = (0, _crypto().createHash)('sha256'); + hash.update(seed); + const num = hash.digest().readUInt32LE(0); + return colors[num % colors.length]; +}; +exports.getDisplayNameColor = getDisplayNameColor; diff --git a/node_modules/jest-config/build/constants.js b/node_modules/jest-config/build/constants.js new file mode 100644 index 00000000..273cd39e --- /dev/null +++ b/node_modules/jest-config/build/constants.js @@ -0,0 +1,96 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.PACKAGE_JSON = + exports.NODE_MODULES = + exports.JEST_CONFIG_EXT_TS = + exports.JEST_CONFIG_EXT_ORDER = + exports.JEST_CONFIG_EXT_MJS = + exports.JEST_CONFIG_EXT_JSON = + exports.JEST_CONFIG_EXT_JS = + exports.JEST_CONFIG_EXT_CJS = + exports.JEST_CONFIG_BASE_NAME = + exports.DEFAULT_JS_PATTERN = + void 0; +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const NODE_MODULES = `${path().sep}node_modules${path().sep}`; +exports.NODE_MODULES = NODE_MODULES; +const DEFAULT_JS_PATTERN = '\\.[jt]sx?$'; +exports.DEFAULT_JS_PATTERN = DEFAULT_JS_PATTERN; +const PACKAGE_JSON = 'package.json'; +exports.PACKAGE_JSON = PACKAGE_JSON; +const JEST_CONFIG_BASE_NAME = 'jest.config'; +exports.JEST_CONFIG_BASE_NAME = JEST_CONFIG_BASE_NAME; +const JEST_CONFIG_EXT_CJS = '.cjs'; +exports.JEST_CONFIG_EXT_CJS = JEST_CONFIG_EXT_CJS; +const JEST_CONFIG_EXT_MJS = '.mjs'; +exports.JEST_CONFIG_EXT_MJS = JEST_CONFIG_EXT_MJS; +const JEST_CONFIG_EXT_JS = '.js'; +exports.JEST_CONFIG_EXT_JS = JEST_CONFIG_EXT_JS; +const JEST_CONFIG_EXT_TS = '.ts'; +exports.JEST_CONFIG_EXT_TS = JEST_CONFIG_EXT_TS; +const JEST_CONFIG_EXT_JSON = '.json'; +exports.JEST_CONFIG_EXT_JSON = JEST_CONFIG_EXT_JSON; +const JEST_CONFIG_EXT_ORDER = Object.freeze([ + JEST_CONFIG_EXT_JS, + JEST_CONFIG_EXT_TS, + JEST_CONFIG_EXT_MJS, + JEST_CONFIG_EXT_CJS, + JEST_CONFIG_EXT_JSON +]); +exports.JEST_CONFIG_EXT_ORDER = JEST_CONFIG_EXT_ORDER; diff --git a/node_modules/jest-config/build/getCacheDirectory.js b/node_modules/jest-config/build/getCacheDirectory.js new file mode 100644 index 00000000..896ef992 --- /dev/null +++ b/node_modules/jest-config/build/getCacheDirectory.js @@ -0,0 +1,91 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function _os() { + const data = require('os'); + _os = function () { + return data; + }; + return data; +} +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const getCacheDirectory = () => { + const {getuid} = process; + const tmpdirPath = path().join( + (0, _jestUtil().tryRealpath)((0, _os().tmpdir)()), + 'jest' + ); + if (getuid == null) { + return tmpdirPath; + } else { + // On some platforms tmpdir() is `/tmp`, causing conflicts between different + // users and permission issues. Adding an additional subdivision by UID can + // help. + return `${tmpdirPath}_${getuid.call(process).toString(36)}`; + } +}; +var _default = getCacheDirectory; +exports.default = _default; diff --git a/node_modules/jest-config/build/getMaxWorkers.js b/node_modules/jest-config/build/getMaxWorkers.js new file mode 100644 index 00000000..7a437419 --- /dev/null +++ b/node_modules/jest-config/build/getMaxWorkers.js @@ -0,0 +1,56 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = getMaxWorkers; +function _os() { + const data = require('os'); + _os = function () { + return data; + }; + return data; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function getNumCpus() { + return typeof _os().availableParallelism === 'function' + ? (0, _os().availableParallelism)() + : (0, _os().cpus)()?.length ?? 1; +} +function getMaxWorkers(argv, defaultOptions) { + if (argv.runInBand) { + return 1; + } else if (argv.maxWorkers) { + return parseWorkers(argv.maxWorkers); + } else if (defaultOptions && defaultOptions.maxWorkers) { + return parseWorkers(defaultOptions.maxWorkers); + } else { + // In watch mode, Jest should be unobtrusive and not use all available CPUs. + const numCpus = getNumCpus(); + const isWatchModeEnabled = argv.watch || argv.watchAll; + return Math.max( + isWatchModeEnabled ? Math.floor(numCpus / 2) : numCpus - 1, + 1 + ); + } +} +const parseWorkers = maxWorkers => { + const parsed = parseInt(maxWorkers.toString(), 10); + if ( + typeof maxWorkers === 'string' && + maxWorkers.trim().endsWith('%') && + parsed > 0 && + parsed <= 100 + ) { + const numCpus = getNumCpus(); + const workers = Math.floor((parsed / 100) * numCpus); + return Math.max(workers, 1); + } + return parsed > 0 ? parsed : 1; +}; diff --git a/node_modules/jest-config/build/index.d.ts b/node_modules/jest-config/build/index.d.ts new file mode 100644 index 00000000..e3165e0f --- /dev/null +++ b/node_modules/jest-config/build/index.d.ts @@ -0,0 +1,147 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import type {Config} from '@jest/types'; +import type {DeprecatedOptions} from 'jest-validate'; + +declare type AllOptions = Config.ProjectConfig & Config.GlobalConfig; + +declare namespace constants { + export { + NODE_MODULES, + DEFAULT_JS_PATTERN, + PACKAGE_JSON, + JEST_CONFIG_BASE_NAME, + JEST_CONFIG_EXT_CJS, + JEST_CONFIG_EXT_MJS, + JEST_CONFIG_EXT_JS, + JEST_CONFIG_EXT_TS, + JEST_CONFIG_EXT_JSON, + JEST_CONFIG_EXT_ORDER, + }; +} +export {constants}; + +declare const DEFAULT_JS_PATTERN = '\\.[jt]sx?$'; + +export declare const defaults: Config.DefaultOptions; + +export declare const deprecationEntries: DeprecatedOptions; + +export declare const descriptions: { + [key in keyof Config.InitialOptions]: string; +}; + +export declare const isJSONString: ( + text?: JSONString | string, +) => text is JSONString; + +declare const JEST_CONFIG_BASE_NAME = 'jest.config'; + +declare const JEST_CONFIG_EXT_CJS = '.cjs'; + +declare const JEST_CONFIG_EXT_JS = '.js'; + +declare const JEST_CONFIG_EXT_JSON = '.json'; + +declare const JEST_CONFIG_EXT_MJS = '.mjs'; + +declare const JEST_CONFIG_EXT_ORDER: readonly string[]; + +declare const JEST_CONFIG_EXT_TS = '.ts'; + +declare type JSONString = string & { + readonly $$type: never; +}; + +declare const NODE_MODULES: string; + +export declare function normalize( + initialOptions: Config.InitialOptions, + argv: Config.Argv, + configPath?: string | null, + projectIndex?: number, + isProjectOptions?: boolean, +): Promise<{ + hasDeprecationWarnings: boolean; + options: AllOptions; +}>; + +declare const PACKAGE_JSON = 'package.json'; + +declare type ReadConfig = { + configPath: string | null | undefined; + globalConfig: Config.GlobalConfig; + hasDeprecationWarnings: boolean; + projectConfig: Config.ProjectConfig; +}; + +export declare function readConfig( + argv: Config.Argv, + packageRootOrConfig: string | Config.InitialOptions, + skipArgvConfigOption?: boolean, + parentConfigDirname?: string | null, + projectIndex?: number, + skipMultipleConfigError?: boolean, +): Promise; + +export declare function readConfigs( + argv: Config.Argv, + projectPaths: Array, +): Promise<{ + globalConfig: Config.GlobalConfig; + configs: Array; + hasDeprecationWarnings: boolean; +}>; + +/** + * Reads the jest config, without validating them or filling it out with defaults. + * @param config The path to the file or serialized config. + * @param param1 Additional options + * @returns The raw initial config (not validated) + */ +export declare function readInitialOptions( + config?: string, + { + packageRootOrConfig, + parentConfigDirname, + readFromCwd, + skipMultipleConfigError, + }?: ReadJestConfigOptions, +): Promise<{ + config: Config.InitialOptions; + configPath: string | null; +}>; + +export declare interface ReadJestConfigOptions { + /** + * The package root or deserialized config (default is cwd) + */ + packageRootOrConfig?: string | Config.InitialOptions; + /** + * When the `packageRootOrConfig` contains config, this parameter should + * contain the dirname of the parent config + */ + parentConfigDirname?: null | string; + /** + * Indicates whether or not to read the specified config file from disk. + * When true, jest will read try to read config from the current working directory. + * (default is false) + */ + readFromCwd?: boolean; + /** + * Indicates whether or not to ignore the error of jest finding multiple config files. + * (default is false) + */ + skipMultipleConfigError?: boolean; +} + +export declare const replaceRootDirInPath: ( + rootDir: string, + filePath: string, +) => string; + +export {}; diff --git a/node_modules/jest-config/build/index.js b/node_modules/jest-config/build/index.js new file mode 100644 index 00000000..a78c4681 --- /dev/null +++ b/node_modules/jest-config/build/index.js @@ -0,0 +1,494 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.constants = void 0; +Object.defineProperty(exports, 'defaults', { + enumerable: true, + get: function () { + return _Defaults.default; + } +}); +Object.defineProperty(exports, 'deprecationEntries', { + enumerable: true, + get: function () { + return _Deprecated.default; + } +}); +Object.defineProperty(exports, 'descriptions', { + enumerable: true, + get: function () { + return _Descriptions.default; + } +}); +Object.defineProperty(exports, 'isJSONString', { + enumerable: true, + get: function () { + return _utils.isJSONString; + } +}); +Object.defineProperty(exports, 'normalize', { + enumerable: true, + get: function () { + return _normalize.default; + } +}); +exports.readConfig = readConfig; +exports.readConfigs = readConfigs; +exports.readInitialOptions = readInitialOptions; +Object.defineProperty(exports, 'replaceRootDirInPath', { + enumerable: true, + get: function () { + return _utils.replaceRootDirInPath; + } +}); +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +function fs() { + const data = _interopRequireWildcard(require('graceful-fs')); + fs = function () { + return data; + }; + return data; +} +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +var constants = _interopRequireWildcard(require('./constants')); +exports.constants = constants; +var _normalize = _interopRequireDefault(require('./normalize')); +var _readConfigFileAndSetRootDir = _interopRequireDefault( + require('./readConfigFileAndSetRootDir') +); +var _resolveConfigPath = _interopRequireDefault(require('./resolveConfigPath')); +var _utils = require('./utils'); +var _Deprecated = _interopRequireDefault(require('./Deprecated')); +var _Defaults = _interopRequireDefault(require('./Defaults')); +var _Descriptions = _interopRequireDefault(require('./Descriptions')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +async function readConfig( + argv, + packageRootOrConfig, + // Whether it needs to look into `--config` arg passed to CLI. + // It only used to read initial config. If the initial config contains + // `project` property, we don't want to read `--config` value and rather + // read individual configs for every project. + skipArgvConfigOption, + parentConfigDirname, + projectIndex = Infinity, + skipMultipleConfigError = false +) { + const {config: initialOptions, configPath} = await readInitialOptions( + argv.config, + { + packageRootOrConfig, + parentConfigDirname, + readFromCwd: skipArgvConfigOption, + skipMultipleConfigError + } + ); + const packageRoot = + typeof packageRootOrConfig === 'string' + ? path().resolve(packageRootOrConfig) + : undefined; + const {options, hasDeprecationWarnings} = await (0, _normalize.default)( + initialOptions, + argv, + configPath, + projectIndex, + skipArgvConfigOption && !(packageRoot === parentConfigDirname) + ); + const {globalConfig, projectConfig} = groupOptions(options); + return { + configPath, + globalConfig, + hasDeprecationWarnings, + projectConfig + }; +} +const groupOptions = options => ({ + globalConfig: Object.freeze({ + bail: options.bail, + changedFilesWithAncestor: options.changedFilesWithAncestor, + changedSince: options.changedSince, + ci: options.ci, + collectCoverage: options.collectCoverage, + collectCoverageFrom: options.collectCoverageFrom, + coverageDirectory: options.coverageDirectory, + coverageProvider: options.coverageProvider, + coverageReporters: options.coverageReporters, + coverageThreshold: options.coverageThreshold, + detectLeaks: options.detectLeaks, + detectOpenHandles: options.detectOpenHandles, + errorOnDeprecated: options.errorOnDeprecated, + expand: options.expand, + filter: options.filter, + findRelatedTests: options.findRelatedTests, + forceExit: options.forceExit, + globalSetup: options.globalSetup, + globalTeardown: options.globalTeardown, + json: options.json, + lastCommit: options.lastCommit, + listTests: options.listTests, + logHeapUsage: options.logHeapUsage, + maxConcurrency: options.maxConcurrency, + maxWorkers: options.maxWorkers, + noSCM: undefined, + noStackTrace: options.noStackTrace, + nonFlagArgs: options.nonFlagArgs, + notify: options.notify, + notifyMode: options.notifyMode, + onlyChanged: options.onlyChanged, + onlyFailures: options.onlyFailures, + openHandlesTimeout: options.openHandlesTimeout, + outputFile: options.outputFile, + passWithNoTests: options.passWithNoTests, + projects: options.projects, + randomize: options.randomize, + replname: options.replname, + reporters: options.reporters, + rootDir: options.rootDir, + runInBand: options.runInBand, + runTestsByPath: options.runTestsByPath, + seed: options.seed, + shard: options.shard, + showSeed: options.showSeed, + silent: options.silent, + skipFilter: options.skipFilter, + snapshotFormat: options.snapshotFormat, + testFailureExitCode: options.testFailureExitCode, + testNamePattern: options.testNamePattern, + testPathPattern: options.testPathPattern, + testResultsProcessor: options.testResultsProcessor, + testSequencer: options.testSequencer, + testTimeout: options.testTimeout, + updateSnapshot: options.updateSnapshot, + useStderr: options.useStderr, + verbose: options.verbose, + watch: options.watch, + watchAll: options.watchAll, + watchPlugins: options.watchPlugins, + watchman: options.watchman, + workerIdleMemoryLimit: options.workerIdleMemoryLimit, + workerThreads: options.workerThreads + }), + projectConfig: Object.freeze({ + automock: options.automock, + cache: options.cache, + cacheDirectory: options.cacheDirectory, + clearMocks: options.clearMocks, + collectCoverageFrom: options.collectCoverageFrom, + coverageDirectory: options.coverageDirectory, + coveragePathIgnorePatterns: options.coveragePathIgnorePatterns, + cwd: options.cwd, + dependencyExtractor: options.dependencyExtractor, + detectLeaks: options.detectLeaks, + detectOpenHandles: options.detectOpenHandles, + displayName: options.displayName, + errorOnDeprecated: options.errorOnDeprecated, + extensionsToTreatAsEsm: options.extensionsToTreatAsEsm, + fakeTimers: options.fakeTimers, + filter: options.filter, + forceCoverageMatch: options.forceCoverageMatch, + globalSetup: options.globalSetup, + globalTeardown: options.globalTeardown, + globals: options.globals, + haste: options.haste, + id: options.id, + injectGlobals: options.injectGlobals, + moduleDirectories: options.moduleDirectories, + moduleFileExtensions: options.moduleFileExtensions, + moduleNameMapper: options.moduleNameMapper, + modulePathIgnorePatterns: options.modulePathIgnorePatterns, + modulePaths: options.modulePaths, + openHandlesTimeout: options.openHandlesTimeout, + prettierPath: options.prettierPath, + resetMocks: options.resetMocks, + resetModules: options.resetModules, + resolver: options.resolver, + restoreMocks: options.restoreMocks, + rootDir: options.rootDir, + roots: options.roots, + runner: options.runner, + runtime: options.runtime, + sandboxInjectedGlobals: options.sandboxInjectedGlobals, + setupFiles: options.setupFiles, + setupFilesAfterEnv: options.setupFilesAfterEnv, + skipFilter: options.skipFilter, + skipNodeResolution: options.skipNodeResolution, + slowTestThreshold: options.slowTestThreshold, + snapshotFormat: options.snapshotFormat, + snapshotResolver: options.snapshotResolver, + snapshotSerializers: options.snapshotSerializers, + testEnvironment: options.testEnvironment, + testEnvironmentOptions: options.testEnvironmentOptions, + testLocationInResults: options.testLocationInResults, + testMatch: options.testMatch, + testPathIgnorePatterns: options.testPathIgnorePatterns, + testRegex: options.testRegex, + testRunner: options.testRunner, + transform: options.transform, + transformIgnorePatterns: options.transformIgnorePatterns, + unmockedModulePathPatterns: options.unmockedModulePathPatterns, + watchPathIgnorePatterns: options.watchPathIgnorePatterns + }) +}); +const ensureNoDuplicateConfigs = (parsedConfigs, projects) => { + if (projects.length <= 1) { + return; + } + const configPathMap = new Map(); + for (const config of parsedConfigs) { + const {configPath} = config; + if (configPathMap.has(configPath)) { + const message = `Whoops! Two projects resolved to the same config path: ${_chalk().default.bold( + String(configPath) + )}: + + Project 1: ${_chalk().default.bold( + projects[parsedConfigs.findIndex(x => x === config)] + )} + Project 2: ${_chalk().default.bold( + projects[parsedConfigs.findIndex(x => x === configPathMap.get(configPath))] + )} + +This usually means that your ${_chalk().default.bold( + '"projects"' + )} config includes a directory that doesn't have any configuration recognizable by Jest. Please fix it. +`; + throw new Error(message); + } + if (configPath !== null) { + configPathMap.set(configPath, config); + } + } +}; +/** + * Reads the jest config, without validating them or filling it out with defaults. + * @param config The path to the file or serialized config. + * @param param1 Additional options + * @returns The raw initial config (not validated) + */ +async function readInitialOptions( + config, + { + packageRootOrConfig = process.cwd(), + parentConfigDirname = null, + readFromCwd = false, + skipMultipleConfigError = false + } = {} +) { + if (typeof packageRootOrConfig !== 'string') { + if (parentConfigDirname) { + const rawOptions = packageRootOrConfig; + rawOptions.rootDir = rawOptions.rootDir + ? (0, _utils.replaceRootDirInPath)( + parentConfigDirname, + rawOptions.rootDir + ) + : parentConfigDirname; + return { + config: rawOptions, + configPath: null + }; + } else { + throw new Error( + 'Jest: Cannot use configuration as an object without a file path.' + ); + } + } + if ((0, _utils.isJSONString)(config)) { + try { + // A JSON string was passed to `--config` argument and we can parse it + // and use as is. + const initialOptions = JSON.parse(config); + // NOTE: we might need to resolve this dir to an absolute path in the future + initialOptions.rootDir = initialOptions.rootDir || packageRootOrConfig; + return { + config: initialOptions, + configPath: null + }; + } catch { + throw new Error( + 'There was an error while parsing the `--config` argument as a JSON string.' + ); + } + } + if (!readFromCwd && typeof config == 'string') { + // A string passed to `--config`, which is either a direct path to the config + // or a path to directory containing `package.json`, `jest.config.js` or `jest.config.ts` + const configPath = (0, _resolveConfigPath.default)( + config, + process.cwd(), + skipMultipleConfigError + ); + return { + config: await (0, _readConfigFileAndSetRootDir.default)(configPath), + configPath + }; + } + // Otherwise just try to find config in the current rootDir. + const configPath = (0, _resolveConfigPath.default)( + packageRootOrConfig, + process.cwd(), + skipMultipleConfigError + ); + return { + config: await (0, _readConfigFileAndSetRootDir.default)(configPath), + configPath + }; +} + +// Possible scenarios: +// 1. jest --config config.json +// 2. jest --projects p1 p2 +// 3. jest --projects p1 p2 --config config.json +// 4. jest --projects p1 +// 5. jest +// +// If no projects are specified, process.cwd() will be used as the default +// (and only) project. +async function readConfigs(argv, projectPaths) { + let globalConfig; + let hasDeprecationWarnings; + let configs = []; + let projects = projectPaths; + let configPath; + if (projectPaths.length === 1) { + const parsedConfig = await readConfig(argv, projects[0]); + configPath = parsedConfig.configPath; + hasDeprecationWarnings = parsedConfig.hasDeprecationWarnings; + globalConfig = parsedConfig.globalConfig; + configs = [parsedConfig.projectConfig]; + if (globalConfig.projects && globalConfig.projects.length) { + // Even though we had one project in CLI args, there might be more + // projects defined in the config. + // In other words, if this was a single project, + // and its config has `projects` settings, use that value instead. + projects = globalConfig.projects; + } + } + if (projects.length > 0) { + const cwd = + process.platform === 'win32' + ? (0, _jestUtil().tryRealpath)(process.cwd()) + : process.cwd(); + const projectIsCwd = projects[0] === cwd; + const parsedConfigs = await Promise.all( + projects + .filter(root => { + // Ignore globbed files that cannot be `require`d. + if ( + typeof root === 'string' && + fs().existsSync(root) && + !fs().lstatSync(root).isDirectory() && + !constants.JEST_CONFIG_EXT_ORDER.some(ext => root.endsWith(ext)) + ) { + return false; + } + return true; + }) + .map((root, projectIndex) => { + const projectIsTheOnlyProject = + projectIndex === 0 && projects.length === 1; + const skipArgvConfigOption = !( + projectIsTheOnlyProject && projectIsCwd + ); + return readConfig( + argv, + root, + skipArgvConfigOption, + configPath ? path().dirname(configPath) : cwd, + projectIndex, + // we wanna skip the warning if this is the "main" project + projectIsCwd + ); + }) + ); + ensureNoDuplicateConfigs(parsedConfigs, projects); + configs = parsedConfigs.map(({projectConfig}) => projectConfig); + if (!hasDeprecationWarnings) { + hasDeprecationWarnings = parsedConfigs.some( + ({hasDeprecationWarnings}) => !!hasDeprecationWarnings + ); + } + // If no config was passed initially, use the one from the first project + if (!globalConfig) { + globalConfig = parsedConfigs[0].globalConfig; + } + } + if (!globalConfig || !configs.length) { + throw new Error('jest: No configuration found for any project.'); + } + return { + configs, + globalConfig, + hasDeprecationWarnings: !!hasDeprecationWarnings + }; +} diff --git a/node_modules/jest-config/build/normalize.js b/node_modules/jest-config/build/normalize.js new file mode 100644 index 00000000..62246fa8 --- /dev/null +++ b/node_modules/jest-config/build/normalize.js @@ -0,0 +1,1180 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = normalize; +function _crypto() { + const data = require('crypto'); + _crypto = function () { + return data; + }; + return data; +} +function _os() { + const data = require('os'); + _os = function () { + return data; + }; + return data; +} +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +function _deepmerge() { + const data = _interopRequireDefault(require('deepmerge')); + _deepmerge = function () { + return data; + }; + return data; +} +function _glob() { + const data = require('glob'); + _glob = function () { + return data; + }; + return data; +} +function _gracefulFs() { + const data = require('graceful-fs'); + _gracefulFs = function () { + return data; + }; + return data; +} +function _micromatch() { + const data = _interopRequireDefault(require('micromatch')); + _micromatch = function () { + return data; + }; + return data; +} +function _jestRegexUtil() { + const data = require('jest-regex-util'); + _jestRegexUtil = function () { + return data; + }; + return data; +} +function _jestResolve() { + const data = _interopRequireWildcard(require('jest-resolve')); + _jestResolve = function () { + return data; + }; + return data; +} +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +function _jestValidate() { + const data = require('jest-validate'); + _jestValidate = function () { + return data; + }; + return data; +} +var _Defaults = _interopRequireDefault(require('./Defaults')); +var _Deprecated = _interopRequireDefault(require('./Deprecated')); +var _ReporterValidationErrors = require('./ReporterValidationErrors'); +var _ValidConfig = require('./ValidConfig'); +var _color = require('./color'); +var _constants = require('./constants'); +var _getMaxWorkers = _interopRequireDefault(require('./getMaxWorkers')); +var _parseShardPair = require('./parseShardPair'); +var _setFromArgv = _interopRequireDefault(require('./setFromArgv')); +var _stringToBytes = _interopRequireDefault(require('./stringToBytes')); +var _utils = require('./utils'); +var _validatePattern = _interopRequireDefault(require('./validatePattern')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const ERROR = `${_utils.BULLET}Validation Error`; +const PRESET_EXTENSIONS = ['.json', '.js', '.cjs', '.mjs']; +const PRESET_NAME = 'jest-preset'; +const createConfigError = message => + new (_jestValidate().ValidationError)( + ERROR, + message, + _utils.DOCUMENTATION_NOTE + ); +function verifyDirectoryExists(path, key) { + try { + const rootStat = (0, _gracefulFs().statSync)(path); + if (!rootStat.isDirectory()) { + throw createConfigError( + ` ${_chalk().default.bold(path)} in the ${_chalk().default.bold( + key + )} option is not a directory.` + ); + } + } catch (err) { + if (err instanceof _jestValidate().ValidationError) { + throw err; + } + if (err.code === 'ENOENT') { + throw createConfigError( + ` Directory ${_chalk().default.bold( + path + )} in the ${_chalk().default.bold(key)} option was not found.` + ); + } + + // Not sure in which cases `statSync` can throw, so let's just show the underlying error to the user + throw createConfigError( + ` Got an error trying to find ${_chalk().default.bold( + path + )} in the ${_chalk().default.bold(key)} option.\n\n Error was: ${ + err.message + }` + ); + } +} +const mergeOptionWithPreset = (options, preset, optionName) => { + if (options[optionName] && preset[optionName]) { + options[optionName] = { + ...options[optionName], + ...preset[optionName], + ...options[optionName] + }; + } +}; +const mergeGlobalsWithPreset = (options, preset) => { + if (options.globals && preset.globals) { + options.globals = (0, _deepmerge().default)( + preset.globals, + options.globals + ); + } +}; +const setupPreset = async (options, optionsPreset) => { + let preset; + const presetPath = (0, _utils.replaceRootDirInPath)( + options.rootDir, + optionsPreset + ); + const presetModule = _jestResolve().default.findNodeModule( + presetPath.startsWith('.') + ? presetPath + : path().join(presetPath, PRESET_NAME), + { + basedir: options.rootDir, + extensions: PRESET_EXTENSIONS + } + ); + try { + if (!presetModule) { + throw new Error(`Cannot find module '${presetPath}'`); + } + + // Force re-evaluation to support multiple projects + try { + delete require.cache[require.resolve(presetModule)]; + } catch {} + preset = await (0, _jestUtil().requireOrImportModule)(presetModule); + } catch (error) { + if (error instanceof SyntaxError || error instanceof TypeError) { + throw createConfigError( + ` Preset ${_chalk().default.bold(presetPath)} is invalid:\n\n ${ + error.message + }\n ${error.stack}` + ); + } + if (error.message.includes('Cannot find module')) { + if (error.message.includes(presetPath)) { + const preset = _jestResolve().default.findNodeModule(presetPath, { + basedir: options.rootDir + }); + if (preset) { + throw createConfigError( + ` Module ${_chalk().default.bold( + presetPath + )} should have "jest-preset.js" or "jest-preset.json" file at the root.` + ); + } + throw createConfigError( + ` Preset ${_chalk().default.bold(presetPath)} not found.` + ); + } + throw createConfigError( + ` Missing dependency in ${_chalk().default.bold(presetPath)}:\n\n ${ + error.message + }\n ${error.stack}` + ); + } + throw createConfigError( + ` An unknown error occurred in ${_chalk().default.bold( + presetPath + )}:\n\n ${error.message}\n ${error.stack}` + ); + } + if (options.setupFiles) { + options.setupFiles = (preset.setupFiles || []).concat(options.setupFiles); + } + if (options.setupFilesAfterEnv) { + options.setupFilesAfterEnv = (preset.setupFilesAfterEnv || []).concat( + options.setupFilesAfterEnv + ); + } + if (options.modulePathIgnorePatterns && preset.modulePathIgnorePatterns) { + options.modulePathIgnorePatterns = preset.modulePathIgnorePatterns.concat( + options.modulePathIgnorePatterns + ); + } + mergeOptionWithPreset(options, preset, 'moduleNameMapper'); + mergeOptionWithPreset(options, preset, 'transform'); + mergeGlobalsWithPreset(options, preset); + return { + ...preset, + ...options + }; +}; +const setupBabelJest = options => { + const transform = options.transform; + let babelJest; + if (transform) { + const customJSPattern = Object.keys(transform).find(pattern => { + const regex = new RegExp(pattern); + return regex.test('a.js') || regex.test('a.jsx'); + }); + const customTSPattern = Object.keys(transform).find(pattern => { + const regex = new RegExp(pattern); + return regex.test('a.ts') || regex.test('a.tsx'); + }); + [customJSPattern, customTSPattern].forEach(pattern => { + if (pattern) { + const customTransformer = transform[pattern]; + if (Array.isArray(customTransformer)) { + if (customTransformer[0] === 'babel-jest') { + babelJest = require.resolve('babel-jest'); + customTransformer[0] = babelJest; + } else if (customTransformer[0].includes('babel-jest')) { + babelJest = customTransformer[0]; + } + } else { + if (customTransformer === 'babel-jest') { + babelJest = require.resolve('babel-jest'); + transform[pattern] = babelJest; + } else if (customTransformer.includes('babel-jest')) { + babelJest = customTransformer; + } + } + } + }); + } else { + babelJest = require.resolve('babel-jest'); + options.transform = { + [_constants.DEFAULT_JS_PATTERN]: babelJest + }; + } +}; +const normalizeCollectCoverageFrom = (options, key) => { + const initialCollectCoverageFrom = options[key]; + let value; + if (!initialCollectCoverageFrom) { + value = []; + } + if (!Array.isArray(initialCollectCoverageFrom)) { + try { + value = JSON.parse(initialCollectCoverageFrom); + } catch {} + if (options[key] && !Array.isArray(value)) { + value = [initialCollectCoverageFrom]; + } + } else { + value = initialCollectCoverageFrom; + } + if (value) { + value = value.map(filePath => + filePath.replace(/^(!?)(\/)(.*)/, '$1$3') + ); + } + return value; +}; +const normalizeUnmockedModulePathPatterns = (options, key) => + // _replaceRootDirTags is specifically well-suited for substituting + // in paths (it deals with properly interpreting relative path + // separators, etc). + // + // For patterns, direct global substitution is far more ideal, so we + // special case substitutions for patterns here. + options[key].map(pattern => + (0, _jestRegexUtil().replacePathSepForRegex)( + pattern.replace(//g, options.rootDir) + ) + ); +const normalizeMissingOptions = (options, configPath, projectIndex) => { + if (!options.id) { + options.id = (0, _crypto().createHash)('sha1') + .update(options.rootDir) + // In case we load config from some path that has the same root dir + .update(configPath || '') + .update(String(projectIndex)) + .digest('hex') + .substring(0, 32); + } + if (!options.setupFiles) { + options.setupFiles = []; + } + return options; +}; +const normalizeRootDir = options => { + // Assert that there *is* a rootDir + if (!options.rootDir) { + throw createConfigError( + ` Configuration option ${_chalk().default.bold( + 'rootDir' + )} must be specified.` + ); + } + options.rootDir = path().normalize(options.rootDir); + try { + // try to resolve windows short paths, ignoring errors (permission errors, mostly) + options.rootDir = (0, _jestUtil().tryRealpath)(options.rootDir); + } catch { + // ignored + } + verifyDirectoryExists(options.rootDir, 'rootDir'); + return { + ...options, + rootDir: options.rootDir + }; +}; +const normalizeReporters = ({reporters, rootDir}) => { + if (!reporters || !Array.isArray(reporters)) { + return undefined; + } + (0, _ReporterValidationErrors.validateReporters)(reporters); + return reporters.map(reporterConfig => { + const normalizedReporterConfig = + typeof reporterConfig === 'string' + ? // if reporter config is a string, we wrap it in an array + // and pass an empty object for options argument, to normalize + // the shape. + [reporterConfig, {}] + : reporterConfig; + const reporterPath = (0, _utils.replaceRootDirInPath)( + rootDir, + normalizedReporterConfig[0] + ); + if (!['default', 'github-actions', 'summary'].includes(reporterPath)) { + const reporter = _jestResolve().default.findNodeModule(reporterPath, { + basedir: rootDir + }); + if (!reporter) { + throw new (_jestResolve().default.ModuleNotFoundError)( + 'Could not resolve a module for a custom reporter.\n' + + ` Module name: ${reporterPath}` + ); + } + normalizedReporterConfig[0] = reporter; + } + return normalizedReporterConfig; + }); +}; +const buildTestPathPattern = argv => { + const patterns = []; + if (argv._) { + patterns.push(...argv._); + } + if (argv.testPathPattern) { + patterns.push(...argv.testPathPattern); + } + const replacePosixSep = pattern => { + // yargs coerces positional args into numbers + const patternAsString = pattern.toString(); + if (path().sep === '/') { + return patternAsString; + } + return patternAsString.replace(/\//g, '\\\\'); + }; + const testPathPattern = patterns.map(replacePosixSep).join('|'); + if ((0, _validatePattern.default)(testPathPattern)) { + return testPathPattern; + } else { + showTestPathPatternError(testPathPattern); + return ''; + } +}; +const showTestPathPatternError = testPathPattern => { + (0, _jestUtil().clearLine)(process.stdout); + + // eslint-disable-next-line no-console + console.log( + _chalk().default.red( + ` Invalid testPattern ${testPathPattern} supplied. ` + + 'Running all tests instead.' + ) + ); +}; +function validateExtensionsToTreatAsEsm(extensionsToTreatAsEsm) { + if (!extensionsToTreatAsEsm || extensionsToTreatAsEsm.length === 0) { + return; + } + function printConfig(opts) { + const string = opts.map(ext => `'${ext}'`).join(', '); + return _chalk().default.bold(`extensionsToTreatAsEsm: [${string}]`); + } + const extensionWithoutDot = extensionsToTreatAsEsm.some( + ext => !ext.startsWith('.') + ); + if (extensionWithoutDot) { + throw createConfigError(` Option: ${printConfig( + extensionsToTreatAsEsm + )} includes a string that does not start with a period (${_chalk().default.bold( + '.' + )}). + Please change your configuration to ${printConfig( + extensionsToTreatAsEsm.map(ext => (ext.startsWith('.') ? ext : `.${ext}`)) + )}.`); + } + if (extensionsToTreatAsEsm.includes('.js')) { + throw createConfigError( + ` Option: ${printConfig( + extensionsToTreatAsEsm + )} includes ${_chalk().default.bold( + "'.js'" + )} which is always inferred based on ${_chalk().default.bold( + 'type' + )} in its nearest ${_chalk().default.bold('package.json')}.` + ); + } + if (extensionsToTreatAsEsm.includes('.cjs')) { + throw createConfigError( + ` Option: ${printConfig( + extensionsToTreatAsEsm + )} includes ${_chalk().default.bold( + "'.cjs'" + )} which is always treated as CommonJS.` + ); + } + if (extensionsToTreatAsEsm.includes('.mjs')) { + throw createConfigError( + ` Option: ${printConfig( + extensionsToTreatAsEsm + )} includes ${_chalk().default.bold( + "'.mjs'" + )} which is always treated as an ECMAScript Module.` + ); + } +} +async function normalize( + initialOptions, + argv, + configPath, + projectIndex = Infinity, + isProjectOptions +) { + const {hasDeprecationWarnings} = (0, _jestValidate().validate)( + initialOptions, + { + comment: _utils.DOCUMENTATION_NOTE, + deprecatedConfig: _Deprecated.default, + exampleConfig: isProjectOptions + ? _ValidConfig.initialProjectOptions + : _ValidConfig.initialOptions, + recursiveDenylist: [ + // 'coverageThreshold' allows to use 'global' and glob strings on the same + // level, there's currently no way we can deal with such config + 'coverageThreshold', + 'globals', + 'moduleNameMapper', + 'testEnvironmentOptions', + 'transform' + ] + } + ); + let options = normalizeMissingOptions( + normalizeRootDir((0, _setFromArgv.default)(initialOptions, argv)), + configPath, + projectIndex + ); + if (options.preset) { + options = await setupPreset(options, options.preset); + } + if (!options.setupFilesAfterEnv) { + options.setupFilesAfterEnv = []; + } + options.testEnvironment = (0, _jestResolve().resolveTestEnvironment)({ + requireResolveFunction: require.resolve, + rootDir: options.rootDir, + testEnvironment: + options.testEnvironment || + require.resolve(_Defaults.default.testEnvironment) + }); + if (!options.roots) { + options.roots = [options.rootDir]; + } + if ( + !options.testRunner || + options.testRunner === 'circus' || + options.testRunner === 'jest-circus' || + options.testRunner === 'jest-circus/runner' + ) { + options.testRunner = require.resolve('jest-circus/runner'); + } else if (options.testRunner === 'jasmine2') { + try { + options.testRunner = require.resolve('jest-jasmine2'); + } catch (error) { + if (error.code === 'MODULE_NOT_FOUND') { + throw createConfigError( + 'jest-jasmine is no longer shipped by default with Jest, you need to install it explicitly or provide an absolute path to Jest' + ); + } + throw error; + } + } + if (!options.coverageDirectory) { + options.coverageDirectory = path().resolve(options.rootDir, 'coverage'); + } + setupBabelJest(options); + // TODO: Type this properly + const newOptions = { + ..._Defaults.default + }; + if (options.resolver) { + newOptions.resolver = (0, _utils.resolve)(null, { + filePath: options.resolver, + key: 'resolver', + rootDir: options.rootDir + }); + } + validateExtensionsToTreatAsEsm(options.extensionsToTreatAsEsm); + if (options.watchman == null) { + options.watchman = _Defaults.default.watchman; + } + const optionKeys = Object.keys(options); + optionKeys.reduce((newOptions, key) => { + // The resolver has been resolved separately; skip it + if (key === 'resolver') { + return newOptions; + } + + // This is cheating, because it claims that all keys of InitialOptions are Required. + // We only really know it's Required for oldOptions[key], not for oldOptions.someOtherKey, + // so oldOptions[key] is the only way it should be used. + const oldOptions = options; + let value; + switch (key) { + case 'setupFiles': + case 'setupFilesAfterEnv': + case 'snapshotSerializers': + { + const option = oldOptions[key]; + value = + option && + option.map(filePath => + (0, _utils.resolve)(newOptions.resolver, { + filePath, + key, + rootDir: options.rootDir + }) + ); + } + break; + case 'modulePaths': + case 'roots': + { + const option = oldOptions[key]; + value = + option && + option.map(filePath => + path().resolve( + options.rootDir, + (0, _utils.replaceRootDirInPath)(options.rootDir, filePath) + ) + ); + } + break; + case 'collectCoverageFrom': + value = normalizeCollectCoverageFrom(oldOptions, key); + break; + case 'cacheDirectory': + case 'coverageDirectory': + { + const option = oldOptions[key]; + value = + option && + path().resolve( + options.rootDir, + (0, _utils.replaceRootDirInPath)(options.rootDir, option) + ); + } + break; + case 'dependencyExtractor': + case 'globalSetup': + case 'globalTeardown': + case 'runtime': + case 'snapshotResolver': + case 'testResultsProcessor': + case 'testRunner': + case 'filter': + { + const option = oldOptions[key]; + value = + option && + (0, _utils.resolve)(newOptions.resolver, { + filePath: option, + key, + rootDir: options.rootDir + }); + } + break; + case 'runner': + { + const option = oldOptions[key]; + value = + option && + (0, _jestResolve().resolveRunner)(newOptions.resolver, { + filePath: option, + requireResolveFunction: require.resolve, + rootDir: options.rootDir + }); + } + break; + case 'prettierPath': + { + // We only want this to throw if "prettierPath" is explicitly passed + // from config or CLI, and the requested path isn't found. Otherwise we + // set it to null and throw an error lazily when it is used. + + const option = oldOptions[key]; + value = + option && + (0, _utils.resolve)(newOptions.resolver, { + filePath: option, + key, + optional: option === _Defaults.default[key], + rootDir: options.rootDir + }); + } + break; + case 'moduleNameMapper': + const moduleNameMapper = oldOptions[key]; + value = + moduleNameMapper && + Object.keys(moduleNameMapper).map(regex => { + const item = moduleNameMapper && moduleNameMapper[regex]; + return ( + item && [ + regex, + (0, _utils._replaceRootDirTags)(options.rootDir, item) + ] + ); + }); + break; + case 'transform': + const transform = oldOptions[key]; + value = + transform && + Object.keys(transform).map(regex => { + const transformElement = transform[regex]; + return [ + regex, + (0, _utils.resolve)(newOptions.resolver, { + filePath: Array.isArray(transformElement) + ? transformElement[0] + : transformElement, + key, + rootDir: options.rootDir + }), + Array.isArray(transformElement) ? transformElement[1] : {} + ]; + }); + break; + case 'reporters': + value = normalizeReporters(oldOptions); + break; + case 'coveragePathIgnorePatterns': + case 'modulePathIgnorePatterns': + case 'testPathIgnorePatterns': + case 'transformIgnorePatterns': + case 'watchPathIgnorePatterns': + case 'unmockedModulePathPatterns': + value = normalizeUnmockedModulePathPatterns(oldOptions, key); + break; + case 'haste': + value = { + ...oldOptions[key] + }; + if (value.hasteImplModulePath != null) { + const resolvedHasteImpl = (0, _utils.resolve)(newOptions.resolver, { + filePath: (0, _utils.replaceRootDirInPath)( + options.rootDir, + value.hasteImplModulePath + ), + key: 'haste.hasteImplModulePath', + rootDir: options.rootDir + }); + value.hasteImplModulePath = resolvedHasteImpl || undefined; + } + break; + case 'projects': + value = (oldOptions[key] || []) + .map(project => + typeof project === 'string' + ? (0, _utils._replaceRootDirTags)(options.rootDir, project) + : project + ) + .reduce((projects, project) => { + // Project can be specified as globs. If a glob matches any files, + // We expand it to these paths. If not, we keep the original path + // for the future resolution. + const globMatches = + typeof project === 'string' ? (0, _glob().sync)(project) : []; + return projects.concat(globMatches.length ? globMatches : project); + }, []); + break; + case 'moduleDirectories': + case 'testMatch': + { + const replacedRootDirTags = (0, _utils._replaceRootDirTags)( + (0, _utils.escapeGlobCharacters)(options.rootDir), + oldOptions[key] + ); + if (replacedRootDirTags) { + value = Array.isArray(replacedRootDirTags) + ? replacedRootDirTags.map(_jestUtil().replacePathSepForGlob) + : (0, _jestUtil().replacePathSepForGlob)(replacedRootDirTags); + } else { + value = replacedRootDirTags; + } + } + break; + case 'testRegex': + { + const option = oldOptions[key]; + value = option + ? (Array.isArray(option) ? option : [option]).map( + _jestRegexUtil().replacePathSepForRegex + ) + : []; + } + break; + case 'moduleFileExtensions': { + value = oldOptions[key]; + if ( + Array.isArray(value) && + // If it's the wrong type, it can throw at a later time + (options.runner === undefined || + options.runner === _Defaults.default.runner) && + // Only require 'js' for the default jest-runner + !value.includes('js') + ) { + const errorMessage = + " moduleFileExtensions must include 'js':\n" + + ' but instead received:\n' + + ` ${_chalk().default.bold.red(JSON.stringify(value))}`; + + // If `js` is not included, any dependency Jest itself injects into + // the environment, like jasmine or sourcemap-support, will need to + // `require` its modules with a file extension. This is not plausible + // in the long run, so it's way easier to just fail hard early. + // We might consider throwing if `json` is missing as well, as it's a + // fair assumption from modules that they can do + // `require('some-package/package') without the trailing `.json` as it + // works in Node normally. + throw createConfigError( + `${errorMessage}\n Please change your configuration to include 'js'.` + ); + } + break; + } + case 'bail': { + const bail = oldOptions[key]; + if (typeof bail === 'boolean') { + value = bail ? 1 : 0; + } else if (typeof bail === 'string') { + value = 1; + // If Jest is invoked as `jest --bail someTestPattern` then need to + // move the pattern from the `bail` configuration and into `argv._` + // to be processed as an extra parameter + argv._.push(bail); + } else { + value = oldOptions[key]; + } + break; + } + case 'displayName': { + const displayName = oldOptions[key]; + /** + * Ensuring that displayName shape is correct here so that the + * reporters can trust the shape of the data + */ + if (typeof displayName === 'object') { + const {name, color} = displayName; + if ( + !name || + !color || + typeof name !== 'string' || + typeof color !== 'string' + ) { + const errorMessage = + ` Option "${_chalk().default.bold( + 'displayName' + )}" must be of type:\n\n` + + ' {\n' + + ' name: string;\n' + + ' color: string;\n' + + ' }\n'; + throw createConfigError(errorMessage); + } + value = oldOptions[key]; + } else { + value = { + color: (0, _color.getDisplayNameColor)(options.runner), + name: displayName + }; + } + break; + } + case 'testTimeout': { + if (oldOptions[key] < 0) { + throw createConfigError( + ` Option "${_chalk().default.bold( + 'testTimeout' + )}" must be a natural number.` + ); + } + value = oldOptions[key]; + break; + } + case 'snapshotFormat': { + value = { + ..._Defaults.default.snapshotFormat, + ...oldOptions[key] + }; + break; + } + case 'automock': + case 'cache': + case 'changedSince': + case 'changedFilesWithAncestor': + case 'clearMocks': + case 'collectCoverage': + case 'coverageProvider': + case 'coverageReporters': + case 'coverageThreshold': + case 'detectLeaks': + case 'detectOpenHandles': + case 'errorOnDeprecated': + case 'expand': + case 'extensionsToTreatAsEsm': + case 'globals': + case 'fakeTimers': + case 'findRelatedTests': + case 'forceCoverageMatch': + case 'forceExit': + case 'injectGlobals': + case 'lastCommit': + case 'listTests': + case 'logHeapUsage': + case 'maxConcurrency': + case 'id': + case 'noStackTrace': + case 'notify': + case 'notifyMode': + case 'onlyChanged': + case 'onlyFailures': + case 'openHandlesTimeout': + case 'outputFile': + case 'passWithNoTests': + case 'randomize': + case 'replname': + case 'resetMocks': + case 'resetModules': + case 'restoreMocks': + case 'rootDir': + case 'runTestsByPath': + case 'sandboxInjectedGlobals': + case 'silent': + case 'showSeed': + case 'skipFilter': + case 'skipNodeResolution': + case 'slowTestThreshold': + case 'testEnvironment': + case 'testEnvironmentOptions': + case 'testFailureExitCode': + case 'testLocationInResults': + case 'testNamePattern': + case 'useStderr': + case 'verbose': + case 'watch': + case 'watchAll': + case 'watchman': + case 'workerThreads': + value = oldOptions[key]; + break; + case 'workerIdleMemoryLimit': + value = (0, _stringToBytes.default)( + oldOptions[key], + (0, _os().totalmem)() + ); + break; + case 'watchPlugins': + value = (oldOptions[key] || []).map(watchPlugin => { + if (typeof watchPlugin === 'string') { + return { + config: {}, + path: (0, _jestResolve().resolveWatchPlugin)( + newOptions.resolver, + { + filePath: watchPlugin, + requireResolveFunction: require.resolve, + rootDir: options.rootDir + } + ) + }; + } else { + return { + config: watchPlugin[1] || {}, + path: (0, _jestResolve().resolveWatchPlugin)( + newOptions.resolver, + { + filePath: watchPlugin[0], + requireResolveFunction: require.resolve, + rootDir: options.rootDir + } + ) + }; + } + }); + break; + } + // @ts-expect-error: automock is missing in GlobalConfig, so what + newOptions[key] = value; + return newOptions; + }, newOptions); + if (options.watchman && options.haste?.enableSymlinks) { + throw new (_jestValidate().ValidationError)( + 'Validation Error', + 'haste.enableSymlinks is incompatible with watchman', + 'Either set haste.enableSymlinks to false or do not use watchman' + ); + } + newOptions.roots.forEach((root, i) => { + verifyDirectoryExists(root, `roots[${i}]`); + }); + try { + // try to resolve windows short paths, ignoring errors (permission errors, mostly) + newOptions.cwd = (0, _jestUtil().tryRealpath)(process.cwd()); + } catch { + // ignored + } + newOptions.testSequencer = (0, _jestResolve().resolveSequencer)( + newOptions.resolver, + { + filePath: + options.testSequencer || + require.resolve(_Defaults.default.testSequencer), + requireResolveFunction: require.resolve, + rootDir: options.rootDir + } + ); + if (newOptions.runner === _Defaults.default.runner) { + newOptions.runner = require.resolve(newOptions.runner); + } + newOptions.nonFlagArgs = argv._?.map(arg => `${arg}`); + newOptions.testPathPattern = buildTestPathPattern(argv); + newOptions.json = !!argv.json; + newOptions.testFailureExitCode = parseInt(newOptions.testFailureExitCode, 10); + if ( + newOptions.lastCommit || + newOptions.changedFilesWithAncestor || + newOptions.changedSince + ) { + newOptions.onlyChanged = true; + } + if (argv.all) { + newOptions.onlyChanged = false; + newOptions.onlyFailures = false; + } else if (newOptions.testPathPattern) { + // When passing a test path pattern we don't want to only monitor changed + // files unless `--watch` is also passed. + newOptions.onlyChanged = newOptions.watch; + } + newOptions.randomize = newOptions.randomize || argv.randomize; + newOptions.showSeed = + newOptions.randomize || newOptions.showSeed || argv.showSeed; + const upperBoundSeedValue = 2 ** 31; + + // bounds are determined by xoroshiro128plus which is used in v8 and is used here (at time of writing) + newOptions.seed = + argv.seed ?? + Math.floor((2 ** 32 - 1) * Math.random() - upperBoundSeedValue); + if ( + newOptions.seed < -upperBoundSeedValue || + newOptions.seed > upperBoundSeedValue - 1 + ) { + throw new (_jestValidate().ValidationError)( + 'Validation Error', + `seed value must be between \`-0x80000000\` and \`0x7fffffff\` inclusive - instead it is ${newOptions.seed}` + ); + } + if (!newOptions.onlyChanged) { + newOptions.onlyChanged = false; + } + if (!newOptions.lastCommit) { + newOptions.lastCommit = false; + } + if (!newOptions.onlyFailures) { + newOptions.onlyFailures = false; + } + if (!newOptions.watchAll) { + newOptions.watchAll = false; + } + + // as unknown since it can happen. We really need to fix the types here + if (newOptions.moduleNameMapper === _Defaults.default.moduleNameMapper) { + newOptions.moduleNameMapper = []; + } + if (argv.ci != null) { + newOptions.ci = argv.ci; + } + newOptions.updateSnapshot = + newOptions.ci && !argv.updateSnapshot + ? 'none' + : argv.updateSnapshot + ? 'all' + : 'new'; + newOptions.maxConcurrency = parseInt(newOptions.maxConcurrency, 10); + newOptions.maxWorkers = (0, _getMaxWorkers.default)(argv, options); + if (newOptions.testRegex.length > 0 && options.testMatch) { + throw createConfigError( + ` Configuration options ${_chalk().default.bold('testMatch')} and` + + ` ${_chalk().default.bold('testRegex')} cannot be used together.` + ); + } + if (newOptions.testRegex.length > 0 && !options.testMatch) { + // Prevent the default testMatch conflicting with any explicitly + // configured `testRegex` value + newOptions.testMatch = []; + } + + // If argv.json is set, coverageReporters shouldn't print a text report. + if (argv.json) { + newOptions.coverageReporters = (newOptions.coverageReporters || []).filter( + reporter => reporter !== 'text' + ); + } + + // If collectCoverage is enabled while using --findRelatedTests we need to + // avoid having false negatives in the generated coverage report. + // The following: `--findRelatedTests '/rootDir/file1.js' --coverage` + // Is transformed to: `--findRelatedTests '/rootDir/file1.js' --coverage --collectCoverageFrom 'file1.js'` + // where arguments to `--collectCoverageFrom` should be globs (or relative + // paths to the rootDir) + if (newOptions.collectCoverage && argv.findRelatedTests) { + let collectCoverageFrom = newOptions.nonFlagArgs.map(filename => { + filename = (0, _utils.replaceRootDirInPath)(options.rootDir, filename); + return path().isAbsolute(filename) + ? path().relative(options.rootDir, filename) + : filename; + }); + + // Don't override existing collectCoverageFrom options + if (newOptions.collectCoverageFrom) { + collectCoverageFrom = collectCoverageFrom.reduce((patterns, filename) => { + if ( + (0, _micromatch().default)( + [ + (0, _jestUtil().replacePathSepForGlob)( + path().relative(options.rootDir, filename) + ) + ], + newOptions.collectCoverageFrom + ).length === 0 + ) { + return patterns; + } + return [...patterns, filename]; + }, newOptions.collectCoverageFrom); + } + newOptions.collectCoverageFrom = collectCoverageFrom; + } else if (!newOptions.collectCoverageFrom) { + newOptions.collectCoverageFrom = []; + } + if (!newOptions.findRelatedTests) { + newOptions.findRelatedTests = false; + } + if (!newOptions.projects) { + newOptions.projects = []; + } + if (!newOptions.sandboxInjectedGlobals) { + newOptions.sandboxInjectedGlobals = []; + } + if (!newOptions.forceExit) { + newOptions.forceExit = false; + } + if (!newOptions.logHeapUsage) { + newOptions.logHeapUsage = false; + } + if (argv.shard) { + newOptions.shard = (0, _parseShardPair.parseShardPair)(argv.shard); + } + return { + hasDeprecationWarnings, + options: newOptions + }; +} diff --git a/node_modules/jest-config/build/parseShardPair.js b/node_modules/jest-config/build/parseShardPair.js new file mode 100644 index 00000000..f45d2dca --- /dev/null +++ b/node_modules/jest-config/build/parseShardPair.js @@ -0,0 +1,41 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.parseShardPair = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const parseShardPair = pair => { + const shardPair = pair + .split('/') + .filter(d => /^\d+$/.test(d)) + .map(d => parseInt(d, 10)) + .filter(shard => !Number.isNaN(shard)); + const [shardIndex, shardCount] = shardPair; + if (shardPair.length !== 2) { + throw new Error( + 'The shard option requires a string in the format of /.' + ); + } + if (shardIndex === 0 || shardCount === 0) { + throw new Error( + 'The shard option requires 1-based values, received 0 or lower in the pair.' + ); + } + if (shardIndex > shardCount) { + throw new Error( + 'The shard option / requires to be lower or equal than .' + ); + } + return { + shardCount, + shardIndex + }; +}; +exports.parseShardPair = parseShardPair; diff --git a/node_modules/jest-config/build/readConfigFileAndSetRootDir.js b/node_modules/jest-config/build/readConfigFileAndSetRootDir.js new file mode 100644 index 00000000..e989961b --- /dev/null +++ b/node_modules/jest-config/build/readConfigFileAndSetRootDir.js @@ -0,0 +1,195 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = readConfigFileAndSetRootDir; +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function fs() { + const data = _interopRequireWildcard(require('graceful-fs')); + fs = function () { + return data; + }; + return data; +} +function _parseJson() { + const data = _interopRequireDefault(require('parse-json')); + _parseJson = function () { + return data; + }; + return data; +} +function _stripJsonComments() { + const data = _interopRequireDefault(require('strip-json-comments')); + _stripJsonComments = function () { + return data; + }; + return data; +} +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +var _constants = require('./constants'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// Read the configuration and set its `rootDir` +// 1. If it's a `package.json` file, we look into its "jest" property +// 2. If it's a `jest.config.ts` file, we use `ts-node` to transpile & require it +// 3. For any other file, we just require it. If we receive an 'ERR_REQUIRE_ESM' +// from node, perform a dynamic import instead. +async function readConfigFileAndSetRootDir(configPath) { + const isTS = configPath.endsWith(_constants.JEST_CONFIG_EXT_TS); + const isJSON = configPath.endsWith(_constants.JEST_CONFIG_EXT_JSON); + let configObject; + try { + if (isTS) { + configObject = await loadTSConfigFile(configPath); + } else if (isJSON) { + const fileContent = fs().readFileSync(configPath, 'utf8'); + configObject = (0, _parseJson().default)( + (0, _stripJsonComments().default)(fileContent), + configPath + ); + } else { + configObject = await (0, _jestUtil().requireOrImportModule)(configPath); + } + } catch (error) { + if (isTS) { + throw new Error( + `Jest: Failed to parse the TypeScript config file ${configPath}\n` + + ` ${error}` + ); + } + throw error; + } + if (configPath.endsWith(_constants.PACKAGE_JSON)) { + // Event if there's no "jest" property in package.json we will still use + // an empty object. + configObject = configObject.jest || {}; + } + if (typeof configObject === 'function') { + configObject = await configObject(); + } + if (configObject.rootDir) { + // We don't touch it if it has an absolute path specified + if (!path().isAbsolute(configObject.rootDir)) { + // otherwise, we'll resolve it relative to the file's __dirname + configObject = { + ...configObject, + rootDir: path().resolve( + path().dirname(configPath), + configObject.rootDir + ) + }; + } + } else { + // If rootDir is not there, we'll set it to this file's __dirname + configObject = { + ...configObject, + rootDir: path().dirname(configPath) + }; + } + return configObject; +} + +// Load the TypeScript configuration +const loadTSConfigFile = async configPath => { + // Get registered TypeScript compiler instance + const registeredCompiler = await getRegisteredCompiler(); + registeredCompiler.enabled(true); + let configObject = (0, _jestUtil().interopRequireDefault)( + require(configPath) + ).default; + + // In case the config is a function which imports more Typescript code + if (typeof configObject === 'function') { + configObject = await configObject(); + } + registeredCompiler.enabled(false); + return configObject; +}; +let registeredCompilerPromise; +function getRegisteredCompiler() { + // Cache the promise to avoid multiple registrations + registeredCompilerPromise = registeredCompilerPromise ?? registerTsNode(); + return registeredCompilerPromise; +} +async function registerTsNode() { + try { + // Register TypeScript compiler instance + const tsNode = await import('ts-node'); + return tsNode.register({ + compilerOptions: { + module: 'CommonJS' + }, + moduleTypes: { + '**': 'cjs' + } + }); + } catch (e) { + if (e.code === 'ERR_MODULE_NOT_FOUND') { + throw new Error( + `Jest: 'ts-node' is required for the TypeScript configuration files. Make sure it is installed\nError: ${e.message}` + ); + } + throw e; + } +} diff --git a/node_modules/jest-config/build/resolveConfigPath.js b/node_modules/jest-config/build/resolveConfigPath.js new file mode 100644 index 00000000..7dd8e02b --- /dev/null +++ b/node_modules/jest-config/build/resolveConfigPath.js @@ -0,0 +1,217 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = resolveConfigPath; +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +function fs() { + const data = _interopRequireWildcard(require('graceful-fs')); + fs = function () { + return data; + }; + return data; +} +function _slash() { + const data = _interopRequireDefault(require('slash')); + _slash = function () { + return data; + }; + return data; +} +function _jestValidate() { + const data = require('jest-validate'); + _jestValidate = function () { + return data; + }; + return data; +} +var _constants = require('./constants'); +var _utils = require('./utils'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const isFile = filePath => + fs().existsSync(filePath) && !fs().lstatSync(filePath).isDirectory(); +const getConfigFilename = ext => _constants.JEST_CONFIG_BASE_NAME + ext; +function resolveConfigPath( + pathToResolve, + cwd, + skipMultipleConfigError = false +) { + if (!path().isAbsolute(cwd)) { + throw new Error(`"cwd" must be an absolute path. cwd: ${cwd}`); + } + const absolutePath = path().isAbsolute(pathToResolve) + ? pathToResolve + : path().resolve(cwd, pathToResolve); + if (isFile(absolutePath)) { + return absolutePath; + } + + // This is a guard against passing non existing path as a project/config, + // that will otherwise result in a very confusing situation. + // e.g. + // With a directory structure like this: + // my_project/ + // package.json + // + // Passing a `my_project/some_directory_that_doesnt_exist` as a project + // name will resolve into a (possibly empty) `my_project/package.json` and + // try to run all tests it finds under `my_project` directory. + if (!fs().existsSync(absolutePath)) { + throw new Error( + "Can't find a root directory while resolving a config file path.\n" + + `Provided path to resolve: ${pathToResolve}\n` + + `cwd: ${cwd}` + ); + } + return resolveConfigPathByTraversing( + absolutePath, + pathToResolve, + cwd, + skipMultipleConfigError + ); +} +const resolveConfigPathByTraversing = ( + pathToResolve, + initialPath, + cwd, + skipMultipleConfigError +) => { + const configFiles = _constants.JEST_CONFIG_EXT_ORDER.map(ext => + path().resolve(pathToResolve, getConfigFilename(ext)) + ).filter(isFile); + const packageJson = findPackageJson(pathToResolve); + if (packageJson && hasPackageJsonJestKey(packageJson)) { + configFiles.push(packageJson); + } + if (!skipMultipleConfigError && configFiles.length > 1) { + throw new (_jestValidate().ValidationError)( + ...makeMultipleConfigsErrorMessage(configFiles) + ); + } + if (configFiles.length > 0 || packageJson) { + return configFiles[0] ?? packageJson; + } + + // This is the system root. + // We tried everything, config is nowhere to be found ¯\_(ツ)_/¯ + if (pathToResolve === path().dirname(pathToResolve)) { + throw new Error(makeResolutionErrorMessage(initialPath, cwd)); + } + + // go up a level and try it again + return resolveConfigPathByTraversing( + path().dirname(pathToResolve), + initialPath, + cwd, + skipMultipleConfigError + ); +}; +const findPackageJson = pathToResolve => { + const packagePath = path().resolve(pathToResolve, _constants.PACKAGE_JSON); + if (isFile(packagePath)) { + return packagePath; + } + return undefined; +}; +const hasPackageJsonJestKey = packagePath => { + const content = fs().readFileSync(packagePath, 'utf8'); + try { + return 'jest' in JSON.parse(content); + } catch { + // If package is not a valid JSON + return false; + } +}; +const makeResolutionErrorMessage = (initialPath, cwd) => + 'Could not find a config file based on provided values:\n' + + `path: "${initialPath}"\n` + + `cwd: "${cwd}"\n` + + 'Config paths must be specified by either a direct path to a config\n' + + 'file, or a path to a directory. If directory is given, Jest will try to\n' + + `traverse directory tree up, until it finds one of those files in exact order: ${_constants.JEST_CONFIG_EXT_ORDER.map( + ext => `"${getConfigFilename(ext)}"` + ).join(' or ')}.`; +function extraIfPackageJson(configPath) { + if (configPath.endsWith(_constants.PACKAGE_JSON)) { + return '`jest` key in '; + } + return ''; +} +const makeMultipleConfigsErrorMessage = configPaths => [ + `${_utils.BULLET}${_chalk().default.bold('Multiple configurations found')}`, + [ + ...configPaths.map( + configPath => + ` * ${extraIfPackageJson(configPath)}${(0, _slash().default)( + configPath + )}` + ), + '', + ' Implicit config resolution does not allow multiple configuration files.', + ' Either remove unused config files or select one explicitly with `--config`.' + ].join('\n'), + _utils.DOCUMENTATION_NOTE +]; diff --git a/node_modules/jest-config/build/setFromArgv.js b/node_modules/jest-config/build/setFromArgv.js new file mode 100644 index 00000000..9f5c1627 --- /dev/null +++ b/node_modules/jest-config/build/setFromArgv.js @@ -0,0 +1,58 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = setFromArgv; +var _utils = require('./utils'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const specialArgs = ['_', '$0', 'h', 'help', 'config']; +function setFromArgv(options, argv) { + const argvToOptions = Object.keys(argv).reduce((options, key) => { + if (argv[key] === undefined || specialArgs.includes(key)) { + return options; + } + switch (key) { + case 'coverage': + options.collectCoverage = argv[key]; + break; + case 'json': + options.useStderr = argv[key]; + break; + case 'watchAll': + options.watch = false; + options.watchAll = argv[key]; + break; + case 'env': + options.testEnvironment = argv[key]; + break; + case 'config': + break; + case 'coverageThreshold': + case 'globals': + case 'haste': + case 'moduleNameMapper': + case 'testEnvironmentOptions': + case 'transform': + const str = argv[key]; + if ((0, _utils.isJSONString)(str)) { + options[key] = JSON.parse(str); + } + break; + default: + options[key] = argv[key]; + } + return options; + }, {}); + return { + ...options, + ...((0, _utils.isJSONString)(argv.config) ? JSON.parse(argv.config) : null), + ...argvToOptions + }; +} diff --git a/node_modules/jest-config/build/stringToBytes.js b/node_modules/jest-config/build/stringToBytes.js new file mode 100644 index 00000000..a939fac1 --- /dev/null +++ b/node_modules/jest-config/build/stringToBytes.js @@ -0,0 +1,79 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * Converts a string representing an amount of memory to bytes. + * + * @param input The value to convert to bytes. + * @param percentageReference The reference value to use when a '%' value is supplied. + */ +function stringToBytes(input, percentageReference) { + if (input === null || input === undefined) { + return input; + } + if (typeof input === 'string') { + if (isNaN(Number.parseFloat(input.slice(-1)))) { + // eslint-disable-next-line prefer-const + let [, numericString, trailingChars] = + input.match(/(.*?)([^0-9.-]+)$/i) || []; + if (trailingChars && numericString) { + const numericValue = Number.parseFloat(numericString); + trailingChars = trailingChars.toLowerCase(); + switch (trailingChars) { + case '%': + input = numericValue / 100; + break; + case 'kb': + case 'k': + return numericValue * 1000; + case 'kib': + return numericValue * 1024; + case 'mb': + case 'm': + return numericValue * 1000 * 1000; + case 'mib': + return numericValue * 1024 * 1024; + case 'gb': + case 'g': + return numericValue * 1000 * 1000 * 1000; + case 'gib': + return numericValue * 1024 * 1024 * 1024; + } + } + + // It ends in some kind of char so we need to do some parsing + } else { + input = Number.parseFloat(input); + } + } + if (typeof input === 'number') { + if (input <= 1 && input > 0) { + if (percentageReference) { + return Math.floor(input * percentageReference); + } else { + throw new Error( + 'For a percentage based memory limit a percentageReference must be supplied' + ); + } + } else if (input > 1) { + return Math.floor(input); + } else { + throw new Error('Unexpected numerical input'); + } + } + throw new Error('Unexpected input'); +} + +// https://github.com/import-js/eslint-plugin-import/issues/1590 +var _default = stringToBytes; +exports.default = _default; diff --git a/node_modules/jest-config/build/utils.js b/node_modules/jest-config/build/utils.js new file mode 100644 index 00000000..16f6d225 --- /dev/null +++ b/node_modules/jest-config/build/utils.js @@ -0,0 +1,172 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.resolve = + exports.replaceRootDirInPath = + exports.isJSONString = + exports.escapeGlobCharacters = + exports._replaceRootDirTags = + exports.DOCUMENTATION_NOTE = + exports.BULLET = + void 0; +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +function _jestResolve() { + const data = _interopRequireDefault(require('jest-resolve')); + _jestResolve = function () { + return data; + }; + return data; +} +function _jestValidate() { + const data = require('jest-validate'); + _jestValidate = function () { + return data; + }; + return data; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const BULLET = _chalk().default.bold('\u25cf '); +exports.BULLET = BULLET; +const DOCUMENTATION_NOTE = ` ${_chalk().default.bold( + 'Configuration Documentation:' +)} + https://jestjs.io/docs/configuration +`; +exports.DOCUMENTATION_NOTE = DOCUMENTATION_NOTE; +const createValidationError = message => + new (_jestValidate().ValidationError)( + `${BULLET}Validation Error`, + message, + DOCUMENTATION_NOTE + ); +const resolve = (resolver, {key, filePath, rootDir, optional}) => { + const module = _jestResolve().default.findNodeModule( + replaceRootDirInPath(rootDir, filePath), + { + basedir: rootDir, + resolver: resolver || undefined + } + ); + if (!module && !optional) { + throw createValidationError(` Module ${_chalk().default.bold( + filePath + )} in the ${_chalk().default.bold(key)} option was not found. + ${_chalk().default.bold('')} is: ${rootDir}`); + } + /// can cast as string since nulls will be thrown + return module; +}; +exports.resolve = resolve; +const escapeGlobCharacters = path => path.replace(/([()*{}[\]!?\\])/g, '\\$1'); +exports.escapeGlobCharacters = escapeGlobCharacters; +const replaceRootDirInPath = (rootDir, filePath) => { + if (!/^/.test(filePath)) { + return filePath; + } + return path().resolve( + rootDir, + path().normalize(`./${filePath.substring(''.length)}`) + ); +}; +exports.replaceRootDirInPath = replaceRootDirInPath; +const _replaceRootDirInObject = (rootDir, config) => { + const newConfig = {}; + for (const configKey in config) { + newConfig[configKey] = + configKey === 'rootDir' + ? config[configKey] + : _replaceRootDirTags(rootDir, config[configKey]); + } + return newConfig; +}; +const _replaceRootDirTags = (rootDir, config) => { + if (config == null) { + return config; + } + switch (typeof config) { + case 'object': + if (Array.isArray(config)) { + /// can be string[] or {}[] + return config.map(item => _replaceRootDirTags(rootDir, item)); + } + if (config instanceof RegExp) { + return config; + } + return _replaceRootDirInObject(rootDir, config); + case 'string': + return replaceRootDirInPath(rootDir, config); + } + return config; +}; +exports._replaceRootDirTags = _replaceRootDirTags; +// newtype +const isJSONString = text => + text != null && + typeof text === 'string' && + text.startsWith('{') && + text.endsWith('}'); +exports.isJSONString = isJSONString; diff --git a/node_modules/jest-config/build/validatePattern.js b/node_modules/jest-config/build/validatePattern.js new file mode 100644 index 00000000..2493833c --- /dev/null +++ b/node_modules/jest-config/build/validatePattern.js @@ -0,0 +1,24 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = validatePattern; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function validatePattern(pattern) { + if (pattern) { + try { + // eslint-disable-next-line no-new + new RegExp(pattern, 'i'); + } catch { + return false; + } + } + return true; +} diff --git a/node_modules/jest-config/package.json b/node_modules/jest-config/package.json new file mode 100644 index 00000000..81b79f0a --- /dev/null +++ b/node_modules/jest-config/package.json @@ -0,0 +1,71 @@ +{ + "name": "jest-config", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-config" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + }, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "devDependencies": { + "@types/glob": "^7.1.1", + "@types/graceful-fs": "^4.1.3", + "@types/micromatch": "^4.0.1", + "@types/parse-json": "^4.0.0", + "semver": "^7.5.3", + "ts-node": "^10.5.0", + "typescript": "^5.0.4" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-diff/LICENSE b/node_modules/jest-diff/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-diff/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-diff/README.md b/node_modules/jest-diff/README.md new file mode 100644 index 00000000..d52f8217 --- /dev/null +++ b/node_modules/jest-diff/README.md @@ -0,0 +1,671 @@ +# jest-diff + +Display differences clearly so people can review changes confidently. + +The `diff` named export serializes JavaScript **values**, compares them line-by-line, and returns a string which includes comparison lines. + +Two named exports compare **strings** character-by-character: + +- `diffStringsUnified` returns a string. +- `diffStringsRaw` returns an array of `Diff` objects. + +Three named exports compare **arrays of strings** line-by-line: + +- `diffLinesUnified` and `diffLinesUnified2` return a string. +- `diffLinesRaw` returns an array of `Diff` objects. + +## Installation + +To add this package as a dependency of a project, run either of the following commands: + +- `npm install jest-diff` +- `yarn add jest-diff` + +## Usage of `diff()` + +Given JavaScript **values**, `diff(a, b, options?)` does the following: + +1. **serialize** the values as strings using the `pretty-format` package +2. **compare** the strings line-by-line using the `diff-sequences` package +3. **format** the changed or common lines using the `chalk` package + +To use this function, write either of the following: + +- `const {diff} = require('jest-diff');` in CommonJS modules +- `import {diff} from 'jest-diff';` in ECMAScript modules + +### Example of `diff()` + +```js +const a = ['delete', 'common', 'changed from']; +const b = ['common', 'changed to', 'insert']; + +const difference = diff(a, b); +``` + +The returned **string** consists of: + +- annotation lines: describe the two change indicators with labels, and a blank line +- comparison lines: similar to “unified” view on GitHub, but `Expected` lines are green, `Received` lines are red, and common lines are dim (by default, see Options) + +```diff +- Expected ++ Received + + Array [ +- "delete", + "common", +- "changed from", ++ "changed to", ++ "insert", + ] +``` + +### Edge cases of `diff()` + +Here are edge cases for the return value: + +- `' Comparing two different types of values. …'` if the arguments have **different types** according to the `jest-get-type` package (instances of different classes have the same `'object'` type) +- `'Compared values have no visual difference.'` if the arguments have either **referential identity** according to `Object.is` method or **same serialization** according to the `pretty-format` package +- `null` if either argument is a so-called **asymmetric matcher** in Jasmine or Jest + +## Usage of diffStringsUnified + +Given **strings**, `diffStringsUnified(a, b, options?)` does the following: + +1. **compare** the strings character-by-character using the `diff-sequences` package +2. **clean up** small (often coincidental) common substrings, also known as chaff +3. **format** the changed or common lines using the `chalk` package + +Although the function is mainly for **multiline** strings, it compares any strings. + +Write either of the following: + +- `const {diffStringsUnified} = require('jest-diff');` in CommonJS modules +- `import {diffStringsUnified} from 'jest-diff';` in ECMAScript modules + +### Example of diffStringsUnified + +```js +const a = 'common\nchanged from'; +const b = 'common\nchanged to'; + +const difference = diffStringsUnified(a, b); +``` + +The returned **string** consists of: + +- annotation lines: describe the two change indicators with labels, and a blank line +- comparison lines: similar to “unified” view on GitHub, and **changed substrings** have **inverse** foreground and background colors (that is, `from` has white-on-green and `to` has white-on-red, which the following example does not show) + +```diff +- Expected ++ Received + + common +- changed from ++ changed to +``` + +### Performance of diffStringsUnified + +To get the benefit of **changed substrings** within the comparison lines, a character-by-character comparison has a higher computational cost (in time and space) than a line-by-line comparison. + +If the input strings can have **arbitrary length**, we recommend that the calling code set a limit, beyond which splits the strings, and then calls `diffLinesUnified` instead. For example, Jest falls back to line-by-line comparison if either string has length greater than 20K characters. + +## Usage of diffLinesUnified + +Given **arrays of strings**, `diffLinesUnified(aLines, bLines, options?)` does the following: + +1. **compare** the arrays line-by-line using the `diff-sequences` package +2. **format** the changed or common lines using the `chalk` package + +You might call this function when strings have been split into lines and you do not need to see changed substrings within lines. + +### Example of diffLinesUnified + +```js +const aLines = ['delete', 'common', 'changed from']; +const bLines = ['common', 'changed to', 'insert']; + +const difference = diffLinesUnified(aLines, bLines); +``` + +```diff +- Expected ++ Received + +- delete + common +- changed from ++ changed to ++ insert +``` + +### Edge cases of diffLinesUnified or diffStringsUnified + +Here are edge cases for arguments and return values: + +- both `a` and `b` are empty strings: no comparison lines +- only `a` is empty string: all comparison lines have `bColor` and `bIndicator` (see Options) +- only `b` is empty string: all comparison lines have `aColor` and `aIndicator` (see Options) +- `a` and `b` are equal non-empty strings: all comparison lines have `commonColor` and `commonIndicator` (see Options) + +## Usage of diffLinesUnified2 + +Given two **pairs** of arrays of strings, `diffLinesUnified2(aLinesDisplay, bLinesDisplay, aLinesCompare, bLinesCompare, options?)` does the following: + +1. **compare** the pair of `Compare` arrays line-by-line using the `diff-sequences` package +2. **format** the corresponding lines in the pair of `Display` arrays using the `chalk` package + +Jest calls this function to consider lines as common instead of changed if the only difference is indentation. + +You might call this function for case insensitive or Unicode equivalence comparison of lines. + +### Example of diffLinesUnified2 + +```js +import {format} from 'pretty-format'; + +const a = { + text: 'Ignore indentation in serialized object', + time: '2019-09-19T12:34:56.000Z', + type: 'CREATE_ITEM', +}; +const b = { + payload: { + text: 'Ignore indentation in serialized object', + time: '2019-09-19T12:34:56.000Z', + }, + type: 'CREATE_ITEM', +}; + +const difference = diffLinesUnified2( + // serialize with indentation to display lines + format(a).split('\n'), + format(b).split('\n'), + // serialize without indentation to compare lines + format(a, {indent: 0}).split('\n'), + format(b, {indent: 0}).split('\n'), +); +``` + +The `text` and `time` properties are common, because their only difference is indentation: + +```diff +- Expected ++ Received + + Object { ++ payload: Object { + text: 'Ignore indentation in serialized object', + time: '2019-09-19T12:34:56.000Z', ++ }, + type: 'CREATE_ITEM', + } +``` + +The preceding example illustrates why (at least for indentation) it seems more intuitive that the function returns the common line from the `bLinesDisplay` array instead of from the `aLinesDisplay` array. + +## Usage of diffStringsRaw + +Given **strings** and a boolean option, `diffStringsRaw(a, b, cleanup)` does the following: + +1. **compare** the strings character-by-character using the `diff-sequences` package +2. optionally **clean up** small (often coincidental) common substrings, also known as chaff + +Because `diffStringsRaw` returns the difference as **data** instead of a string, you can format it as your application requires (for example, enclosed in HTML markup for browser instead of escape sequences for console). + +The returned **array** describes substrings as instances of the `Diff` class, which calling code can access like array tuples: + +The value at index `0` is one of the following: + +| value | named export | description | +| ----: | :------------ | :-------------------- | +| `0` | `DIFF_EQUAL` | in `a` and in `b` | +| `-1` | `DIFF_DELETE` | in `a` but not in `b` | +| `1` | `DIFF_INSERT` | in `b` but not in `a` | + +The value at index `1` is a substring of `a` or `b` or both. + +### Example of diffStringsRaw with cleanup + +```js +const diffs = diffStringsRaw('changed from', 'changed to', true); +``` + +| `i` | `diffs[i][0]` | `diffs[i][1]` | +| --: | ------------: | :------------ | +| `0` | `0` | `'changed '` | +| `1` | `-1` | `'from'` | +| `2` | `1` | `'to'` | + +### Example of diffStringsRaw without cleanup + +```js +const diffs = diffStringsRaw('changed from', 'changed to', false); +``` + +| `i` | `diffs[i][0]` | `diffs[i][1]` | +| --: | ------------: | :------------ | +| `0` | `0` | `'changed '` | +| `1` | `-1` | `'fr'` | +| `2` | `1` | `'t'` | +| `3` | `0` | `'o'` | +| `4` | `-1` | `'m'` | + +### Advanced import for diffStringsRaw + +Here are all the named imports that you might need for the `diffStringsRaw` function: + +- `const {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff, diffStringsRaw} = require('jest-diff');` in CommonJS modules +- `import {DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff, diffStringsRaw} from 'jest-diff';` in ECMAScript modules + +To write a **formatting** function, you might need the named constants (and `Diff` in TypeScript annotations). + +If you write an application-specific **cleanup** algorithm, then you might need to call the `Diff` constructor: + +```js +const diffCommon = new Diff(DIFF_EQUAL, 'changed '); +const diffDelete = new Diff(DIFF_DELETE, 'from'); +const diffInsert = new Diff(DIFF_INSERT, 'to'); +``` + +## Usage of diffLinesRaw + +Given **arrays of strings**, `diffLinesRaw(aLines, bLines)` does the following: + +- **compare** the arrays line-by-line using the `diff-sequences` package + +Because `diffLinesRaw` returns the difference as **data** instead of a string, you can format it as your application requires. + +### Example of diffLinesRaw + +```js +const aLines = ['delete', 'common', 'changed from']; +const bLines = ['common', 'changed to', 'insert']; + +const diffs = diffLinesRaw(aLines, bLines); +``` + +| `i` | `diffs[i][0]` | `diffs[i][1]` | +| --: | ------------: | :--------------- | +| `0` | `-1` | `'delete'` | +| `1` | `0` | `'common'` | +| `2` | `-1` | `'changed from'` | +| `3` | `1` | `'changed to'` | +| `4` | `1` | `'insert'` | + +### Edge case of diffLinesRaw + +If you call `string.split('\n')` for an empty string: + +- the result is `['']` an array which contains an empty string +- instead of `[]` an empty array + +Depending of your application, you might call `diffLinesRaw` with either array. + +### Example of split method + +```js +import {diffLinesRaw} from 'jest-diff'; + +const a = 'non-empty string'; +const b = ''; + +const diffs = diffLinesRaw(a.split('\n'), b.split('\n')); +``` + +| `i` | `diffs[i][0]` | `diffs[i][1]` | +| --: | ------------: | :------------------- | +| `0` | `-1` | `'non-empty string'` | +| `1` | `1` | `''` | + +Which you might format as follows: + +```diff +- Expected - 1 ++ Received + 1 + +- non-empty string ++ +``` + +### Example of splitLines0 function + +For edge case behavior like the `diffLinesUnified` function, you might define a `splitLines0` function, which given an empty string, returns `[]` an empty array: + +```js +export const splitLines0 = string => + string.length === 0 ? [] : string.split('\n'); +``` + +```js +import {diffLinesRaw} from 'jest-diff'; + +const a = ''; +const b = 'line 1\nline 2\nline 3'; + +const diffs = diffLinesRaw(a.split('\n'), b.split('\n')); +``` + +| `i` | `diffs[i][0]` | `diffs[i][1]` | +| --: | ------------: | :------------ | +| `0` | `1` | `'line 1'` | +| `1` | `1` | `'line 2'` | +| `2` | `1` | `'line 3'` | + +Which you might format as follows: + +```diff +- Expected - 0 ++ Received + 3 + ++ line 1 ++ line 2 ++ line 3 +``` + +In contrast to the `diffLinesRaw` function, the `diffLinesUnified` and `diffLinesUnified2` functions **automatically** convert array arguments computed by string `split` method, so callers do **not** need a `splitLine0` function. + +## Options + +The default options are for the report when an assertion fails from the `expect` package used by Jest. + +For other applications, you can provide an options object as a third argument: + +- `diff(a, b, options)` +- `diffStringsUnified(a, b, options)` +- `diffLinesUnified(aLines, bLines, options)` +- `diffLinesUnified2(aLinesDisplay, bLinesDisplay, aLinesCompare, bLinesCompare, options)` + +### Properties of options object + +| name | default | +| :-------------------------------- | :----------------- | +| `aAnnotation` | `'Expected'` | +| `aColor` | `chalk.green` | +| `aIndicator` | `'-'` | +| `bAnnotation` | `'Received'` | +| `bColor` | `chalk.red` | +| `bIndicator` | `'+'` | +| `changeColor` | `chalk.inverse` | +| `changeLineTrailingSpaceColor` | `string => string` | +| `commonColor` | `chalk.dim` | +| `commonIndicator` | `' '` | +| `commonLineTrailingSpaceColor` | `string => string` | +| `compareKeys` | `undefined` | +| `contextLines` | `5` | +| `emptyFirstOrLastLinePlaceholder` | `''` | +| `expand` | `true` | +| `includeChangeCounts` | `false` | +| `omitAnnotationLines` | `false` | +| `patchColor` | `chalk.yellow` | + +For more information about the options, see the following examples. + +### Example of options for labels + +If the application is code modification, you might replace the labels: + +```js +const options = { + aAnnotation: 'Original', + bAnnotation: 'Modified', +}; +``` + +```diff +- Original ++ Modified + + common +- changed from ++ changed to +``` + +The `jest-diff` package does not assume that the 2 labels have equal length. + +### Example of options for colors of changed lines + +For consistency with most diff tools, you might exchange the colors: + +```ts +import chalk = require('chalk'); + +const options = { + aColor: chalk.red, + bColor: chalk.green, +}; +``` + +### Example of option for color of changed substrings + +Although the default inverse of foreground and background colors is hard to beat for changed substrings **within lines**, especially because it highlights spaces, if you want bold font weight on yellow background color: + +```ts +import chalk = require('chalk'); + +const options = { + changeColor: chalk.bold.bgYellowBright, +}; +``` + +### Example of option to format trailing spaces + +Because `diff()` does not display substring differences within lines, formatting can help you see when lines differ by the presence or absence of trailing spaces found by `/\s+$/` regular expression. + +- If change lines have a background color, then you can see trailing spaces. +- If common lines have default dim color, then you cannot see trailing spaces. You might want yellowish background color to see them. + +```js +const options = { + aColor: chalk.rgb(128, 0, 128).bgRgb(255, 215, 255), // magenta + bColor: chalk.rgb(0, 95, 0).bgRgb(215, 255, 215), // green + commonLineTrailingSpaceColor: chalk.bgYellow, +}; +``` + +The value of a Color option is a function, which given a string, returns a string. + +If you want to replace trailing spaces with middle dot characters: + +```js +const replaceSpacesWithMiddleDot = string => '·'.repeat(string.length); + +const options = { + changeLineTrailingSpaceColor: replaceSpacesWithMiddleDot, + commonLineTrailingSpaceColor: replaceSpacesWithMiddleDot, +}; +``` + +If you need the TypeScript type of a Color option: + +```ts +import {DiffOptionsColor} from 'jest-diff'; +``` + +### Example of options for no colors + +To store the difference in a file without escape codes for colors, provide an identity function: + +```js +const noColor = string => string; + +const options = { + aColor: noColor, + bColor: noColor, + changeColor: noColor, + commonColor: noColor, + patchColor: noColor, +}; +``` + +### Example of options for indicators + +For consistency with the `diff` command, you might replace the indicators: + +```js +const options = { + aIndicator: '<', + bIndicator: '>', +}; +``` + +The `jest-diff` package assumes (but does not enforce) that the 3 indicators have equal length. + +### Example of options to limit common lines + +By default, the output includes all common lines. + +To emphasize the changes, you might limit the number of common “context” lines: + +```js +const options = { + contextLines: 1, + expand: false, +}; +``` + +A patch mark like `@@ -12,7 +12,9 @@` accounts for omitted common lines. + +### Example of option for color of patch marks + +If you want patch marks to have the same dim color as common lines: + +```ts +import chalk = require('chalk'); + +const options = { + expand: false, + patchColor: chalk.dim, +}; +``` + +### Example of option to include change counts + +To display the number of changed lines at the right of annotation lines: + +```js +const a = ['common', 'changed from']; +const b = ['common', 'changed to', 'insert']; + +const options = { + includeChangeCounts: true, +}; + +const difference = diff(a, b, options); +``` + +```diff +- Expected - 1 ++ Received + 2 + + Array [ + "common", +- "changed from", ++ "changed to", ++ "insert", + ] +``` + +### Example of option to omit annotation lines + +To display only the comparison lines: + +```js +const a = 'common\nchanged from'; +const b = 'common\nchanged to'; + +const options = { + omitAnnotationLines: true, +}; + +const difference = diffStringsUnified(a, b, options); +``` + +```diff + common +- changed from ++ changed to +``` + +### Example of option for empty first or last lines + +If the **first** or **last** comparison line is **empty**, because the content is empty and the indicator is a space, you might not notice it. + +The replacement option is a string whose default value is `''` empty string. + +Because Jest trims the report when a matcher fails, it deletes an empty last line. + +Therefore, Jest uses as placeholder the downwards arrow with corner leftwards: + +```js +const options = { + emptyFirstOrLastLinePlaceholder: '↵', // U+21B5 +}; +``` + +If a content line is empty, then the corresponding comparison line is automatically trimmed to remove the margin space (represented as a middle dot below) for the default indicators: + +| Indicator | untrimmed | trimmed | +| ----------------: | :-------- | :------ | +| `aIndicator` | `'-·'` | `'-'` | +| `bIndicator` | `'+·'` | `'+'` | +| `commonIndicator` | `' ·'` | `''` | + +### Example of option for sorting object keys + +When two objects are compared their keys are printed in alphabetical order by default. If this was not the original order of the keys the diff becomes harder to read as the keys are not in their original position. + +Use `compareKeys` to pass a function which will be used when sorting the object keys. + +```js +const a = {c: 'c', b: 'b1', a: 'a'}; +const b = {c: 'c', b: 'b2', a: 'a'}; + +const options = { + // The keys will be in their original order + compareKeys: () => 0, +}; + +const difference = diff(a, b, options); +``` + +```diff +- Expected ++ Received + + Object { + "c": "c", +- "b": "b1", ++ "b": "b2", + "a": "a", + } +``` + +Depending on the implementation of `compareKeys` any sort order can be used. + +```js +const a = {c: 'c', b: 'b1', a: 'a'}; +const b = {c: 'c', b: 'b2', a: 'a'}; + +const options = { + // The keys will be in reverse order + compareKeys: (a, b) => (a > b ? -1 : 1), +}; + +const difference = diff(a, b, options); +``` + +```diff +- Expected ++ Received + + Object { + "a": "a", +- "b": "b1", ++ "b": "b2", + "c": "c", + } +``` diff --git a/node_modules/jest-diff/build/cleanupSemantic.js b/node_modules/jest-diff/build/cleanupSemantic.js new file mode 100644 index 00000000..bc84226e --- /dev/null +++ b/node_modules/jest-diff/build/cleanupSemantic.js @@ -0,0 +1,599 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.cleanupSemantic = + exports.Diff = + exports.DIFF_INSERT = + exports.DIFF_EQUAL = + exports.DIFF_DELETE = + void 0; +/** + * Diff Match and Patch + * Copyright 2018 The diff-match-patch Authors. + * https://github.com/google/diff-match-patch + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Computes the difference between two texts to create a patch. + * Applies the patch onto another text, allowing for errors. + * @author fraser@google.com (Neil Fraser) + */ + +/** + * CHANGES by pedrottimark to diff_match_patch_uncompressed.ts file: + * + * 1. Delete anything not needed to use diff_cleanupSemantic method + * 2. Convert from prototype properties to var declarations + * 3. Convert Diff to class from constructor and prototype + * 4. Add type annotations for arguments and return values + * 5. Add exports + */ + +/** + * The data structure representing a diff is an array of tuples: + * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']] + * which means: delete 'Hello', add 'Goodbye' and keep ' world.' + */ +var DIFF_DELETE = -1; +exports.DIFF_DELETE = DIFF_DELETE; +var DIFF_INSERT = 1; +exports.DIFF_INSERT = DIFF_INSERT; +var DIFF_EQUAL = 0; + +/** + * Class representing one diff tuple. + * Attempts to look like a two-element array (which is what this used to be). + * @param {number} op Operation, one of: DIFF_DELETE, DIFF_INSERT, DIFF_EQUAL. + * @param {string} text Text to be deleted, inserted, or retained. + * @constructor + */ +exports.DIFF_EQUAL = DIFF_EQUAL; +class Diff { + 0; + 1; + constructor(op, text) { + this[0] = op; + this[1] = text; + } +} + +/** + * Determine the common prefix of two strings. + * @param {string} text1 First string. + * @param {string} text2 Second string. + * @return {number} The number of characters common to the start of each + * string. + */ +exports.Diff = Diff; +var diff_commonPrefix = function (text1, text2) { + // Quick check for common null cases. + if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) { + return 0; + } + // Binary search. + // Performance analysis: https://neil.fraser.name/news/2007/10/09/ + var pointermin = 0; + var pointermax = Math.min(text1.length, text2.length); + var pointermid = pointermax; + var pointerstart = 0; + while (pointermin < pointermid) { + if ( + text1.substring(pointerstart, pointermid) == + text2.substring(pointerstart, pointermid) + ) { + pointermin = pointermid; + pointerstart = pointermin; + } else { + pointermax = pointermid; + } + pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); + } + return pointermid; +}; + +/** + * Determine the common suffix of two strings. + * @param {string} text1 First string. + * @param {string} text2 Second string. + * @return {number} The number of characters common to the end of each string. + */ +var diff_commonSuffix = function (text1, text2) { + // Quick check for common null cases. + if ( + !text1 || + !text2 || + text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1) + ) { + return 0; + } + // Binary search. + // Performance analysis: https://neil.fraser.name/news/2007/10/09/ + var pointermin = 0; + var pointermax = Math.min(text1.length, text2.length); + var pointermid = pointermax; + var pointerend = 0; + while (pointermin < pointermid) { + if ( + text1.substring(text1.length - pointermid, text1.length - pointerend) == + text2.substring(text2.length - pointermid, text2.length - pointerend) + ) { + pointermin = pointermid; + pointerend = pointermin; + } else { + pointermax = pointermid; + } + pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); + } + return pointermid; +}; + +/** + * Determine if the suffix of one string is the prefix of another. + * @param {string} text1 First string. + * @param {string} text2 Second string. + * @return {number} The number of characters common to the end of the first + * string and the start of the second string. + * @private + */ +var diff_commonOverlap_ = function (text1, text2) { + // Cache the text lengths to prevent multiple calls. + var text1_length = text1.length; + var text2_length = text2.length; + // Eliminate the null case. + if (text1_length == 0 || text2_length == 0) { + return 0; + } + // Truncate the longer string. + if (text1_length > text2_length) { + text1 = text1.substring(text1_length - text2_length); + } else if (text1_length < text2_length) { + text2 = text2.substring(0, text1_length); + } + var text_length = Math.min(text1_length, text2_length); + // Quick check for the worst case. + if (text1 == text2) { + return text_length; + } + + // Start by looking for a single character match + // and increase length until no match is found. + // Performance analysis: https://neil.fraser.name/news/2010/11/04/ + var best = 0; + var length = 1; + while (true) { + var pattern = text1.substring(text_length - length); + var found = text2.indexOf(pattern); + if (found == -1) { + return best; + } + length += found; + if ( + found == 0 || + text1.substring(text_length - length) == text2.substring(0, length) + ) { + best = length; + length++; + } + } +}; + +/** + * Reduce the number of edits by eliminating semantically trivial equalities. + * @param {!Array.} diffs Array of diff tuples. + */ +var diff_cleanupSemantic = function (diffs) { + var changes = false; + var equalities = []; // Stack of indices where equalities are found. + var equalitiesLength = 0; // Keeping our own length var is faster in JS. + /** @type {?string} */ + var lastEquality = null; + // Always equal to diffs[equalities[equalitiesLength - 1]][1] + var pointer = 0; // Index of current position. + // Number of characters that changed prior to the equality. + var length_insertions1 = 0; + var length_deletions1 = 0; + // Number of characters that changed after the equality. + var length_insertions2 = 0; + var length_deletions2 = 0; + while (pointer < diffs.length) { + if (diffs[pointer][0] == DIFF_EQUAL) { + // Equality found. + equalities[equalitiesLength++] = pointer; + length_insertions1 = length_insertions2; + length_deletions1 = length_deletions2; + length_insertions2 = 0; + length_deletions2 = 0; + lastEquality = diffs[pointer][1]; + } else { + // An insertion or deletion. + if (diffs[pointer][0] == DIFF_INSERT) { + length_insertions2 += diffs[pointer][1].length; + } else { + length_deletions2 += diffs[pointer][1].length; + } + // Eliminate an equality that is smaller or equal to the edits on both + // sides of it. + if ( + lastEquality && + lastEquality.length <= + Math.max(length_insertions1, length_deletions1) && + lastEquality.length <= Math.max(length_insertions2, length_deletions2) + ) { + // Duplicate record. + diffs.splice( + equalities[equalitiesLength - 1], + 0, + new Diff(DIFF_DELETE, lastEquality) + ); + // Change second copy to insert. + diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT; + // Throw away the equality we just deleted. + equalitiesLength--; + // Throw away the previous equality (it needs to be reevaluated). + equalitiesLength--; + pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1; + length_insertions1 = 0; // Reset the counters. + length_deletions1 = 0; + length_insertions2 = 0; + length_deletions2 = 0; + lastEquality = null; + changes = true; + } + } + pointer++; + } + + // Normalize the diff. + if (changes) { + diff_cleanupMerge(diffs); + } + diff_cleanupSemanticLossless(diffs); + + // Find any overlaps between deletions and insertions. + // e.g: abcxxxxxxdef + // -> abcxxxdef + // e.g: xxxabcdefxxx + // -> defxxxabc + // Only extract an overlap if it is as big as the edit ahead or behind it. + pointer = 1; + while (pointer < diffs.length) { + if ( + diffs[pointer - 1][0] == DIFF_DELETE && + diffs[pointer][0] == DIFF_INSERT + ) { + var deletion = diffs[pointer - 1][1]; + var insertion = diffs[pointer][1]; + var overlap_length1 = diff_commonOverlap_(deletion, insertion); + var overlap_length2 = diff_commonOverlap_(insertion, deletion); + if (overlap_length1 >= overlap_length2) { + if ( + overlap_length1 >= deletion.length / 2 || + overlap_length1 >= insertion.length / 2 + ) { + // Overlap found. Insert an equality and trim the surrounding edits. + diffs.splice( + pointer, + 0, + new Diff(DIFF_EQUAL, insertion.substring(0, overlap_length1)) + ); + diffs[pointer - 1][1] = deletion.substring( + 0, + deletion.length - overlap_length1 + ); + diffs[pointer + 1][1] = insertion.substring(overlap_length1); + pointer++; + } + } else { + if ( + overlap_length2 >= deletion.length / 2 || + overlap_length2 >= insertion.length / 2 + ) { + // Reverse overlap found. + // Insert an equality and swap and trim the surrounding edits. + diffs.splice( + pointer, + 0, + new Diff(DIFF_EQUAL, deletion.substring(0, overlap_length2)) + ); + diffs[pointer - 1][0] = DIFF_INSERT; + diffs[pointer - 1][1] = insertion.substring( + 0, + insertion.length - overlap_length2 + ); + diffs[pointer + 1][0] = DIFF_DELETE; + diffs[pointer + 1][1] = deletion.substring(overlap_length2); + pointer++; + } + } + pointer++; + } + pointer++; + } +}; + +/** + * Look for single edits surrounded on both sides by equalities + * which can be shifted sideways to align the edit to a word boundary. + * e.g: The cat came. -> The cat came. + * @param {!Array.} diffs Array of diff tuples. + */ +exports.cleanupSemantic = diff_cleanupSemantic; +var diff_cleanupSemanticLossless = function (diffs) { + /** + * Given two strings, compute a score representing whether the internal + * boundary falls on logical boundaries. + * Scores range from 6 (best) to 0 (worst). + * Closure, but does not reference any external variables. + * @param {string} one First string. + * @param {string} two Second string. + * @return {number} The score. + * @private + */ + function diff_cleanupSemanticScore_(one, two) { + if (!one || !two) { + // Edges are the best. + return 6; + } + + // Each port of this function behaves slightly differently due to + // subtle differences in each language's definition of things like + // 'whitespace'. Since this function's purpose is largely cosmetic, + // the choice has been made to use each language's native features + // rather than force total conformity. + var char1 = one.charAt(one.length - 1); + var char2 = two.charAt(0); + var nonAlphaNumeric1 = char1.match(nonAlphaNumericRegex_); + var nonAlphaNumeric2 = char2.match(nonAlphaNumericRegex_); + var whitespace1 = nonAlphaNumeric1 && char1.match(whitespaceRegex_); + var whitespace2 = nonAlphaNumeric2 && char2.match(whitespaceRegex_); + var lineBreak1 = whitespace1 && char1.match(linebreakRegex_); + var lineBreak2 = whitespace2 && char2.match(linebreakRegex_); + var blankLine1 = lineBreak1 && one.match(blanklineEndRegex_); + var blankLine2 = lineBreak2 && two.match(blanklineStartRegex_); + if (blankLine1 || blankLine2) { + // Five points for blank lines. + return 5; + } else if (lineBreak1 || lineBreak2) { + // Four points for line breaks. + return 4; + } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) { + // Three points for end of sentences. + return 3; + } else if (whitespace1 || whitespace2) { + // Two points for whitespace. + return 2; + } else if (nonAlphaNumeric1 || nonAlphaNumeric2) { + // One point for non-alphanumeric. + return 1; + } + return 0; + } + var pointer = 1; + // Intentionally ignore the first and last element (don't need checking). + while (pointer < diffs.length - 1) { + if ( + diffs[pointer - 1][0] == DIFF_EQUAL && + diffs[pointer + 1][0] == DIFF_EQUAL + ) { + // This is a single edit surrounded by equalities. + var equality1 = diffs[pointer - 1][1]; + var edit = diffs[pointer][1]; + var equality2 = diffs[pointer + 1][1]; + + // First, shift the edit as far left as possible. + var commonOffset = diff_commonSuffix(equality1, edit); + if (commonOffset) { + var commonString = edit.substring(edit.length - commonOffset); + equality1 = equality1.substring(0, equality1.length - commonOffset); + edit = commonString + edit.substring(0, edit.length - commonOffset); + equality2 = commonString + equality2; + } + + // Second, step character by character right, looking for the best fit. + var bestEquality1 = equality1; + var bestEdit = edit; + var bestEquality2 = equality2; + var bestScore = + diff_cleanupSemanticScore_(equality1, edit) + + diff_cleanupSemanticScore_(edit, equality2); + while (edit.charAt(0) === equality2.charAt(0)) { + equality1 += edit.charAt(0); + edit = edit.substring(1) + equality2.charAt(0); + equality2 = equality2.substring(1); + var score = + diff_cleanupSemanticScore_(equality1, edit) + + diff_cleanupSemanticScore_(edit, equality2); + // The >= encourages trailing rather than leading whitespace on edits. + if (score >= bestScore) { + bestScore = score; + bestEquality1 = equality1; + bestEdit = edit; + bestEquality2 = equality2; + } + } + if (diffs[pointer - 1][1] != bestEquality1) { + // We have an improvement, save it back to the diff. + if (bestEquality1) { + diffs[pointer - 1][1] = bestEquality1; + } else { + diffs.splice(pointer - 1, 1); + pointer--; + } + diffs[pointer][1] = bestEdit; + if (bestEquality2) { + diffs[pointer + 1][1] = bestEquality2; + } else { + diffs.splice(pointer + 1, 1); + pointer--; + } + } + } + pointer++; + } +}; + +// Define some regex patterns for matching boundaries. +var nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/; +var whitespaceRegex_ = /\s/; +var linebreakRegex_ = /[\r\n]/; +var blanklineEndRegex_ = /\n\r?\n$/; +var blanklineStartRegex_ = /^\r?\n\r?\n/; + +/** + * Reorder and merge like edit sections. Merge equalities. + * Any edit section can move as long as it doesn't cross an equality. + * @param {!Array.} diffs Array of diff tuples. + */ +var diff_cleanupMerge = function (diffs) { + // Add a dummy entry at the end. + diffs.push(new Diff(DIFF_EQUAL, '')); + var pointer = 0; + var count_delete = 0; + var count_insert = 0; + var text_delete = ''; + var text_insert = ''; + var commonlength; + while (pointer < diffs.length) { + switch (diffs[pointer][0]) { + case DIFF_INSERT: + count_insert++; + text_insert += diffs[pointer][1]; + pointer++; + break; + case DIFF_DELETE: + count_delete++; + text_delete += diffs[pointer][1]; + pointer++; + break; + case DIFF_EQUAL: + // Upon reaching an equality, check for prior redundancies. + if (count_delete + count_insert > 1) { + if (count_delete !== 0 && count_insert !== 0) { + // Factor out any common prefixies. + commonlength = diff_commonPrefix(text_insert, text_delete); + if (commonlength !== 0) { + if ( + pointer - count_delete - count_insert > 0 && + diffs[pointer - count_delete - count_insert - 1][0] == + DIFF_EQUAL + ) { + diffs[pointer - count_delete - count_insert - 1][1] += + text_insert.substring(0, commonlength); + } else { + diffs.splice( + 0, + 0, + new Diff(DIFF_EQUAL, text_insert.substring(0, commonlength)) + ); + pointer++; + } + text_insert = text_insert.substring(commonlength); + text_delete = text_delete.substring(commonlength); + } + // Factor out any common suffixies. + commonlength = diff_commonSuffix(text_insert, text_delete); + if (commonlength !== 0) { + diffs[pointer][1] = + text_insert.substring(text_insert.length - commonlength) + + diffs[pointer][1]; + text_insert = text_insert.substring( + 0, + text_insert.length - commonlength + ); + text_delete = text_delete.substring( + 0, + text_delete.length - commonlength + ); + } + } + // Delete the offending records and add the merged ones. + pointer -= count_delete + count_insert; + diffs.splice(pointer, count_delete + count_insert); + if (text_delete.length) { + diffs.splice(pointer, 0, new Diff(DIFF_DELETE, text_delete)); + pointer++; + } + if (text_insert.length) { + diffs.splice(pointer, 0, new Diff(DIFF_INSERT, text_insert)); + pointer++; + } + pointer++; + } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) { + // Merge this equality with the previous one. + diffs[pointer - 1][1] += diffs[pointer][1]; + diffs.splice(pointer, 1); + } else { + pointer++; + } + count_insert = 0; + count_delete = 0; + text_delete = ''; + text_insert = ''; + break; + } + } + if (diffs[diffs.length - 1][1] === '') { + diffs.pop(); // Remove the dummy entry at the end. + } + + // Second pass: look for single edits surrounded on both sides by equalities + // which can be shifted sideways to eliminate an equality. + // e.g: ABAC -> ABAC + var changes = false; + pointer = 1; + // Intentionally ignore the first and last element (don't need checking). + while (pointer < diffs.length - 1) { + if ( + diffs[pointer - 1][0] == DIFF_EQUAL && + diffs[pointer + 1][0] == DIFF_EQUAL + ) { + // This is a single edit surrounded by equalities. + if ( + diffs[pointer][1].substring( + diffs[pointer][1].length - diffs[pointer - 1][1].length + ) == diffs[pointer - 1][1] + ) { + // Shift the edit over the previous equality. + diffs[pointer][1] = + diffs[pointer - 1][1] + + diffs[pointer][1].substring( + 0, + diffs[pointer][1].length - diffs[pointer - 1][1].length + ); + diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1]; + diffs.splice(pointer - 1, 1); + changes = true; + } else if ( + diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) == + diffs[pointer + 1][1] + ) { + // Shift the edit over the next equality. + diffs[pointer - 1][1] += diffs[pointer + 1][1]; + diffs[pointer][1] = + diffs[pointer][1].substring(diffs[pointer + 1][1].length) + + diffs[pointer + 1][1]; + diffs.splice(pointer + 1, 1); + changes = true; + } + } + pointer++; + } + // If shifts were made, the diff needs reordering and another shift sweep. + if (changes) { + diff_cleanupMerge(diffs); + } +}; diff --git a/node_modules/jest-diff/build/constants.js b/node_modules/jest-diff/build/constants.js new file mode 100644 index 00000000..ed4f9276 --- /dev/null +++ b/node_modules/jest-diff/build/constants.js @@ -0,0 +1,19 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.SIMILAR_MESSAGE = exports.NO_DIFF_MESSAGE = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const NO_DIFF_MESSAGE = 'Compared values have no visual difference.'; +exports.NO_DIFF_MESSAGE = NO_DIFF_MESSAGE; +const SIMILAR_MESSAGE = + 'Compared values serialize to the same structure.\n' + + 'Printing internal object structure without calling `toJSON` instead.'; +exports.SIMILAR_MESSAGE = SIMILAR_MESSAGE; diff --git a/node_modules/jest-diff/build/diffLines.js b/node_modules/jest-diff/build/diffLines.js new file mode 100644 index 00000000..c4632c6d --- /dev/null +++ b/node_modules/jest-diff/build/diffLines.js @@ -0,0 +1,193 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.printDiffLines = + exports.diffLinesUnified2 = + exports.diffLinesUnified = + exports.diffLinesRaw = + void 0; +var _diffSequences = _interopRequireDefault(require('diff-sequences')); +var _cleanupSemantic = require('./cleanupSemantic'); +var _joinAlignedDiffs = require('./joinAlignedDiffs'); +var _normalizeDiffOptions = require('./normalizeDiffOptions'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const isEmptyString = lines => lines.length === 1 && lines[0].length === 0; +const countChanges = diffs => { + let a = 0; + let b = 0; + diffs.forEach(diff => { + switch (diff[0]) { + case _cleanupSemantic.DIFF_DELETE: + a += 1; + break; + case _cleanupSemantic.DIFF_INSERT: + b += 1; + break; + } + }); + return { + a, + b + }; +}; +const printAnnotation = ( + { + aAnnotation, + aColor, + aIndicator, + bAnnotation, + bColor, + bIndicator, + includeChangeCounts, + omitAnnotationLines + }, + changeCounts +) => { + if (omitAnnotationLines) { + return ''; + } + let aRest = ''; + let bRest = ''; + if (includeChangeCounts) { + const aCount = String(changeCounts.a); + const bCount = String(changeCounts.b); + + // Padding right aligns the ends of the annotations. + const baAnnotationLengthDiff = bAnnotation.length - aAnnotation.length; + const aAnnotationPadding = ' '.repeat(Math.max(0, baAnnotationLengthDiff)); + const bAnnotationPadding = ' '.repeat(Math.max(0, -baAnnotationLengthDiff)); + + // Padding left aligns the ends of the counts. + const baCountLengthDiff = bCount.length - aCount.length; + const aCountPadding = ' '.repeat(Math.max(0, baCountLengthDiff)); + const bCountPadding = ' '.repeat(Math.max(0, -baCountLengthDiff)); + aRest = `${aAnnotationPadding} ${aIndicator} ${aCountPadding}${aCount}`; + bRest = `${bAnnotationPadding} ${bIndicator} ${bCountPadding}${bCount}`; + } + const a = `${aIndicator} ${aAnnotation}${aRest}`; + const b = `${bIndicator} ${bAnnotation}${bRest}`; + return `${aColor(a)}\n${bColor(b)}\n\n`; +}; +const printDiffLines = (diffs, options) => + printAnnotation(options, countChanges(diffs)) + + (options.expand + ? (0, _joinAlignedDiffs.joinAlignedDiffsExpand)(diffs, options) + : (0, _joinAlignedDiffs.joinAlignedDiffsNoExpand)(diffs, options)); + +// Compare two arrays of strings line-by-line. Format as comparison lines. +exports.printDiffLines = printDiffLines; +const diffLinesUnified = (aLines, bLines, options) => + printDiffLines( + diffLinesRaw( + isEmptyString(aLines) ? [] : aLines, + isEmptyString(bLines) ? [] : bLines + ), + (0, _normalizeDiffOptions.normalizeDiffOptions)(options) + ); + +// Given two pairs of arrays of strings: +// Compare the pair of comparison arrays line-by-line. +// Format the corresponding lines in the pair of displayable arrays. +exports.diffLinesUnified = diffLinesUnified; +const diffLinesUnified2 = ( + aLinesDisplay, + bLinesDisplay, + aLinesCompare, + bLinesCompare, + options +) => { + if (isEmptyString(aLinesDisplay) && isEmptyString(aLinesCompare)) { + aLinesDisplay = []; + aLinesCompare = []; + } + if (isEmptyString(bLinesDisplay) && isEmptyString(bLinesCompare)) { + bLinesDisplay = []; + bLinesCompare = []; + } + if ( + aLinesDisplay.length !== aLinesCompare.length || + bLinesDisplay.length !== bLinesCompare.length + ) { + // Fall back to diff of display lines. + return diffLinesUnified(aLinesDisplay, bLinesDisplay, options); + } + const diffs = diffLinesRaw(aLinesCompare, bLinesCompare); + + // Replace comparison lines with displayable lines. + let aIndex = 0; + let bIndex = 0; + diffs.forEach(diff => { + switch (diff[0]) { + case _cleanupSemantic.DIFF_DELETE: + diff[1] = aLinesDisplay[aIndex]; + aIndex += 1; + break; + case _cleanupSemantic.DIFF_INSERT: + diff[1] = bLinesDisplay[bIndex]; + bIndex += 1; + break; + default: + diff[1] = bLinesDisplay[bIndex]; + aIndex += 1; + bIndex += 1; + } + }); + return printDiffLines( + diffs, + (0, _normalizeDiffOptions.normalizeDiffOptions)(options) + ); +}; + +// Compare two arrays of strings line-by-line. +exports.diffLinesUnified2 = diffLinesUnified2; +const diffLinesRaw = (aLines, bLines) => { + const aLength = aLines.length; + const bLength = bLines.length; + const isCommon = (aIndex, bIndex) => aLines[aIndex] === bLines[bIndex]; + const diffs = []; + let aIndex = 0; + let bIndex = 0; + const foundSubsequence = (nCommon, aCommon, bCommon) => { + for (; aIndex !== aCommon; aIndex += 1) { + diffs.push( + new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_DELETE, aLines[aIndex]) + ); + } + for (; bIndex !== bCommon; bIndex += 1) { + diffs.push( + new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_INSERT, bLines[bIndex]) + ); + } + for (; nCommon !== 0; nCommon -= 1, aIndex += 1, bIndex += 1) { + diffs.push( + new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_EQUAL, bLines[bIndex]) + ); + } + }; + (0, _diffSequences.default)(aLength, bLength, isCommon, foundSubsequence); + + // After the last common subsequence, push remaining change items. + for (; aIndex !== aLength; aIndex += 1) { + diffs.push( + new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_DELETE, aLines[aIndex]) + ); + } + for (; bIndex !== bLength; bIndex += 1) { + diffs.push( + new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_INSERT, bLines[bIndex]) + ); + } + return diffs; +}; +exports.diffLinesRaw = diffLinesRaw; diff --git a/node_modules/jest-diff/build/diffStrings.js b/node_modules/jest-diff/build/diffStrings.js new file mode 100644 index 00000000..e11c5a52 --- /dev/null +++ b/node_modules/jest-diff/build/diffStrings.js @@ -0,0 +1,66 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +var _diffSequences = _interopRequireDefault(require('diff-sequences')); +var _cleanupSemantic = require('./cleanupSemantic'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const diffStrings = (a, b) => { + const isCommon = (aIndex, bIndex) => a[aIndex] === b[bIndex]; + let aIndex = 0; + let bIndex = 0; + const diffs = []; + const foundSubsequence = (nCommon, aCommon, bCommon) => { + if (aIndex !== aCommon) { + diffs.push( + new _cleanupSemantic.Diff( + _cleanupSemantic.DIFF_DELETE, + a.slice(aIndex, aCommon) + ) + ); + } + if (bIndex !== bCommon) { + diffs.push( + new _cleanupSemantic.Diff( + _cleanupSemantic.DIFF_INSERT, + b.slice(bIndex, bCommon) + ) + ); + } + aIndex = aCommon + nCommon; // number of characters compared in a + bIndex = bCommon + nCommon; // number of characters compared in b + diffs.push( + new _cleanupSemantic.Diff( + _cleanupSemantic.DIFF_EQUAL, + b.slice(bCommon, bIndex) + ) + ); + }; + (0, _diffSequences.default)(a.length, b.length, isCommon, foundSubsequence); + + // After the last common subsequence, push remaining change items. + if (aIndex !== a.length) { + diffs.push( + new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_DELETE, a.slice(aIndex)) + ); + } + if (bIndex !== b.length) { + diffs.push( + new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_INSERT, b.slice(bIndex)) + ); + } + return diffs; +}; +var _default = diffStrings; +exports.default = _default; diff --git a/node_modules/jest-diff/build/getAlignedDiffs.js b/node_modules/jest-diff/build/getAlignedDiffs.js new file mode 100644 index 00000000..04da5471 --- /dev/null +++ b/node_modules/jest-diff/build/getAlignedDiffs.js @@ -0,0 +1,223 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +var _cleanupSemantic = require('./cleanupSemantic'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// Given change op and array of diffs, return concatenated string: +// * include common strings +// * include change strings which have argument op with changeColor +// * exclude change strings which have opposite op +const concatenateRelevantDiffs = (op, diffs, changeColor) => + diffs.reduce( + (reduced, diff) => + reduced + + (diff[0] === _cleanupSemantic.DIFF_EQUAL + ? diff[1] + : diff[0] === op && diff[1].length !== 0 // empty if change is newline + ? changeColor(diff[1]) + : ''), + '' + ); + +// Encapsulate change lines until either a common newline or the end. +class ChangeBuffer { + op; + line; // incomplete line + lines; // complete lines + changeColor; + constructor(op, changeColor) { + this.op = op; + this.line = []; + this.lines = []; + this.changeColor = changeColor; + } + pushSubstring(substring) { + this.pushDiff(new _cleanupSemantic.Diff(this.op, substring)); + } + pushLine() { + // Assume call only if line has at least one diff, + // therefore an empty line must have a diff which has an empty string. + + // If line has multiple diffs, then assume it has a common diff, + // therefore change diffs have change color; + // otherwise then it has line color only. + this.lines.push( + this.line.length !== 1 + ? new _cleanupSemantic.Diff( + this.op, + concatenateRelevantDiffs(this.op, this.line, this.changeColor) + ) + : this.line[0][0] === this.op + ? this.line[0] // can use instance + : new _cleanupSemantic.Diff(this.op, this.line[0][1]) // was common diff + ); + + this.line.length = 0; + } + isLineEmpty() { + return this.line.length === 0; + } + + // Minor input to buffer. + pushDiff(diff) { + this.line.push(diff); + } + + // Main input to buffer. + align(diff) { + const string = diff[1]; + if (string.includes('\n')) { + const substrings = string.split('\n'); + const iLast = substrings.length - 1; + substrings.forEach((substring, i) => { + if (i < iLast) { + // The first substring completes the current change line. + // A middle substring is a change line. + this.pushSubstring(substring); + this.pushLine(); + } else if (substring.length !== 0) { + // The last substring starts a change line, if it is not empty. + // Important: This non-empty condition also automatically omits + // the newline appended to the end of expected and received strings. + this.pushSubstring(substring); + } + }); + } else { + // Append non-multiline string to current change line. + this.pushDiff(diff); + } + } + + // Output from buffer. + moveLinesTo(lines) { + if (!this.isLineEmpty()) { + this.pushLine(); + } + lines.push(...this.lines); + this.lines.length = 0; + } +} + +// Encapsulate common and change lines. +class CommonBuffer { + deleteBuffer; + insertBuffer; + lines; + constructor(deleteBuffer, insertBuffer) { + this.deleteBuffer = deleteBuffer; + this.insertBuffer = insertBuffer; + this.lines = []; + } + pushDiffCommonLine(diff) { + this.lines.push(diff); + } + pushDiffChangeLines(diff) { + const isDiffEmpty = diff[1].length === 0; + + // An empty diff string is redundant, unless a change line is empty. + if (!isDiffEmpty || this.deleteBuffer.isLineEmpty()) { + this.deleteBuffer.pushDiff(diff); + } + if (!isDiffEmpty || this.insertBuffer.isLineEmpty()) { + this.insertBuffer.pushDiff(diff); + } + } + flushChangeLines() { + this.deleteBuffer.moveLinesTo(this.lines); + this.insertBuffer.moveLinesTo(this.lines); + } + + // Input to buffer. + align(diff) { + const op = diff[0]; + const string = diff[1]; + if (string.includes('\n')) { + const substrings = string.split('\n'); + const iLast = substrings.length - 1; + substrings.forEach((substring, i) => { + if (i === 0) { + const subdiff = new _cleanupSemantic.Diff(op, substring); + if ( + this.deleteBuffer.isLineEmpty() && + this.insertBuffer.isLineEmpty() + ) { + // If both current change lines are empty, + // then the first substring is a common line. + this.flushChangeLines(); + this.pushDiffCommonLine(subdiff); + } else { + // If either current change line is non-empty, + // then the first substring completes the change lines. + this.pushDiffChangeLines(subdiff); + this.flushChangeLines(); + } + } else if (i < iLast) { + // A middle substring is a common line. + this.pushDiffCommonLine(new _cleanupSemantic.Diff(op, substring)); + } else if (substring.length !== 0) { + // The last substring starts a change line, if it is not empty. + // Important: This non-empty condition also automatically omits + // the newline appended to the end of expected and received strings. + this.pushDiffChangeLines(new _cleanupSemantic.Diff(op, substring)); + } + }); + } else { + // Append non-multiline string to current change lines. + // Important: It cannot be at the end following empty change lines, + // because newline appended to the end of expected and received strings. + this.pushDiffChangeLines(diff); + } + } + + // Output from buffer. + getLines() { + this.flushChangeLines(); + return this.lines; + } +} + +// Given diffs from expected and received strings, +// return new array of diffs split or joined into lines. +// +// To correctly align a change line at the end, the algorithm: +// * assumes that a newline was appended to the strings +// * omits the last newline from the output array +// +// Assume the function is not called: +// * if either expected or received is empty string +// * if neither expected nor received is multiline string +const getAlignedDiffs = (diffs, changeColor) => { + const deleteBuffer = new ChangeBuffer( + _cleanupSemantic.DIFF_DELETE, + changeColor + ); + const insertBuffer = new ChangeBuffer( + _cleanupSemantic.DIFF_INSERT, + changeColor + ); + const commonBuffer = new CommonBuffer(deleteBuffer, insertBuffer); + diffs.forEach(diff => { + switch (diff[0]) { + case _cleanupSemantic.DIFF_DELETE: + deleteBuffer.align(diff); + break; + case _cleanupSemantic.DIFF_INSERT: + insertBuffer.align(diff); + break; + default: + commonBuffer.align(diff); + } + }); + return commonBuffer.getLines(); +}; +var _default = getAlignedDiffs; +exports.default = _default; diff --git a/node_modules/jest-diff/build/index.d.ts b/node_modules/jest-diff/build/index.d.ts new file mode 100644 index 00000000..f84a803c --- /dev/null +++ b/node_modules/jest-diff/build/index.d.ts @@ -0,0 +1,93 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import type {CompareKeys} from 'pretty-format'; + +/** + * Class representing one diff tuple. + * Attempts to look like a two-element array (which is what this used to be). + * @param {number} op Operation, one of: DIFF_DELETE, DIFF_INSERT, DIFF_EQUAL. + * @param {string} text Text to be deleted, inserted, or retained. + * @constructor + */ +export declare class Diff { + 0: number; + 1: string; + constructor(op: number, text: string); +} + +export declare function diff( + a: any, + b: any, + options?: DiffOptions, +): string | null; + +/** + * The data structure representing a diff is an array of tuples: + * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']] + * which means: delete 'Hello', add 'Goodbye' and keep ' world.' + */ +export declare var DIFF_DELETE: number; + +export declare var DIFF_EQUAL: number; + +export declare var DIFF_INSERT: number; + +export declare const diffLinesRaw: ( + aLines: Array, + bLines: Array, +) => Array; + +export declare const diffLinesUnified: ( + aLines: Array, + bLines: Array, + options?: DiffOptions, +) => string; + +export declare const diffLinesUnified2: ( + aLinesDisplay: Array, + bLinesDisplay: Array, + aLinesCompare: Array, + bLinesCompare: Array, + options?: DiffOptions, +) => string; + +export declare type DiffOptions = { + aAnnotation?: string; + aColor?: DiffOptionsColor; + aIndicator?: string; + bAnnotation?: string; + bColor?: DiffOptionsColor; + bIndicator?: string; + changeColor?: DiffOptionsColor; + changeLineTrailingSpaceColor?: DiffOptionsColor; + commonColor?: DiffOptionsColor; + commonIndicator?: string; + commonLineTrailingSpaceColor?: DiffOptionsColor; + contextLines?: number; + emptyFirstOrLastLinePlaceholder?: string; + expand?: boolean; + includeChangeCounts?: boolean; + omitAnnotationLines?: boolean; + patchColor?: DiffOptionsColor; + compareKeys?: CompareKeys; +}; + +export declare type DiffOptionsColor = (arg: string) => string; + +export declare const diffStringsRaw: ( + a: string, + b: string, + cleanup: boolean, +) => Array; + +export declare const diffStringsUnified: ( + a: string, + b: string, + options?: DiffOptions, +) => string; + +export {}; diff --git a/node_modules/jest-diff/build/index.js b/node_modules/jest-diff/build/index.js new file mode 100644 index 00000000..7efc7bfa --- /dev/null +++ b/node_modules/jest-diff/build/index.js @@ -0,0 +1,232 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +Object.defineProperty(exports, 'DIFF_DELETE', { + enumerable: true, + get: function () { + return _cleanupSemantic.DIFF_DELETE; + } +}); +Object.defineProperty(exports, 'DIFF_EQUAL', { + enumerable: true, + get: function () { + return _cleanupSemantic.DIFF_EQUAL; + } +}); +Object.defineProperty(exports, 'DIFF_INSERT', { + enumerable: true, + get: function () { + return _cleanupSemantic.DIFF_INSERT; + } +}); +Object.defineProperty(exports, 'Diff', { + enumerable: true, + get: function () { + return _cleanupSemantic.Diff; + } +}); +exports.diff = diff; +Object.defineProperty(exports, 'diffLinesRaw', { + enumerable: true, + get: function () { + return _diffLines.diffLinesRaw; + } +}); +Object.defineProperty(exports, 'diffLinesUnified', { + enumerable: true, + get: function () { + return _diffLines.diffLinesUnified; + } +}); +Object.defineProperty(exports, 'diffLinesUnified2', { + enumerable: true, + get: function () { + return _diffLines.diffLinesUnified2; + } +}); +Object.defineProperty(exports, 'diffStringsRaw', { + enumerable: true, + get: function () { + return _printDiffs.diffStringsRaw; + } +}); +Object.defineProperty(exports, 'diffStringsUnified', { + enumerable: true, + get: function () { + return _printDiffs.diffStringsUnified; + } +}); +var _chalk = _interopRequireDefault(require('chalk')); +var _jestGetType = require('jest-get-type'); +var _prettyFormat = require('pretty-format'); +var _cleanupSemantic = require('./cleanupSemantic'); +var _constants = require('./constants'); +var _diffLines = require('./diffLines'); +var _normalizeDiffOptions = require('./normalizeDiffOptions'); +var _printDiffs = require('./printDiffs'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +const getCommonMessage = (message, options) => { + const {commonColor} = (0, _normalizeDiffOptions.normalizeDiffOptions)( + options + ); + return commonColor(message); +}; +const { + AsymmetricMatcher, + DOMCollection, + DOMElement, + Immutable, + ReactElement, + ReactTestComponent +} = _prettyFormat.plugins; +const PLUGINS = [ + ReactTestComponent, + ReactElement, + DOMElement, + DOMCollection, + Immutable, + AsymmetricMatcher +]; +const FORMAT_OPTIONS = { + plugins: PLUGINS +}; +const FALLBACK_FORMAT_OPTIONS = { + callToJSON: false, + maxDepth: 10, + plugins: PLUGINS +}; + +// Generate a string that will highlight the difference between two values +// with green and red. (similar to how github does code diffing) +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +function diff(a, b, options) { + if (Object.is(a, b)) { + return getCommonMessage(_constants.NO_DIFF_MESSAGE, options); + } + const aType = (0, _jestGetType.getType)(a); + let expectedType = aType; + let omitDifference = false; + if (aType === 'object' && typeof a.asymmetricMatch === 'function') { + if (a.$$typeof !== Symbol.for('jest.asymmetricMatcher')) { + // Do not know expected type of user-defined asymmetric matcher. + return null; + } + if (typeof a.getExpectedType !== 'function') { + // For example, expect.anything() matches either null or undefined + return null; + } + expectedType = a.getExpectedType(); + // Primitive types boolean and number omit difference below. + // For example, omit difference for expect.stringMatching(regexp) + omitDifference = expectedType === 'string'; + } + if (expectedType !== (0, _jestGetType.getType)(b)) { + return ( + ' Comparing two different types of values.' + + ` Expected ${_chalk.default.green(expectedType)} but ` + + `received ${_chalk.default.red((0, _jestGetType.getType)(b))}.` + ); + } + if (omitDifference) { + return null; + } + switch (aType) { + case 'string': + return (0, _diffLines.diffLinesUnified)( + a.split('\n'), + b.split('\n'), + options + ); + case 'boolean': + case 'number': + return comparePrimitive(a, b, options); + case 'map': + return compareObjects(sortMap(a), sortMap(b), options); + case 'set': + return compareObjects(sortSet(a), sortSet(b), options); + default: + return compareObjects(a, b, options); + } +} +function comparePrimitive(a, b, options) { + const aFormat = (0, _prettyFormat.format)(a, FORMAT_OPTIONS); + const bFormat = (0, _prettyFormat.format)(b, FORMAT_OPTIONS); + return aFormat === bFormat + ? getCommonMessage(_constants.NO_DIFF_MESSAGE, options) + : (0, _diffLines.diffLinesUnified)( + aFormat.split('\n'), + bFormat.split('\n'), + options + ); +} +function sortMap(map) { + return new Map(Array.from(map.entries()).sort()); +} +function sortSet(set) { + return new Set(Array.from(set.values()).sort()); +} +function compareObjects(a, b, options) { + let difference; + let hasThrown = false; + try { + const formatOptions = getFormatOptions(FORMAT_OPTIONS, options); + difference = getObjectsDifference(a, b, formatOptions, options); + } catch { + hasThrown = true; + } + const noDiffMessage = getCommonMessage(_constants.NO_DIFF_MESSAGE, options); + // If the comparison yields no results, compare again but this time + // without calling `toJSON`. It's also possible that toJSON might throw. + if (difference === undefined || difference === noDiffMessage) { + const formatOptions = getFormatOptions(FALLBACK_FORMAT_OPTIONS, options); + difference = getObjectsDifference(a, b, formatOptions, options); + if (difference !== noDiffMessage && !hasThrown) { + difference = `${getCommonMessage( + _constants.SIMILAR_MESSAGE, + options + )}\n\n${difference}`; + } + } + return difference; +} +function getFormatOptions(formatOptions, options) { + const {compareKeys} = (0, _normalizeDiffOptions.normalizeDiffOptions)( + options + ); + return { + ...formatOptions, + compareKeys + }; +} +function getObjectsDifference(a, b, formatOptions, options) { + const formatOptionsZeroIndent = { + ...formatOptions, + indent: 0 + }; + const aCompare = (0, _prettyFormat.format)(a, formatOptionsZeroIndent); + const bCompare = (0, _prettyFormat.format)(b, formatOptionsZeroIndent); + if (aCompare === bCompare) { + return getCommonMessage(_constants.NO_DIFF_MESSAGE, options); + } else { + const aDisplay = (0, _prettyFormat.format)(a, formatOptions); + const bDisplay = (0, _prettyFormat.format)(b, formatOptions); + return (0, _diffLines.diffLinesUnified2)( + aDisplay.split('\n'), + bDisplay.split('\n'), + aCompare.split('\n'), + bCompare.split('\n'), + options + ); + } +} diff --git a/node_modules/jest-diff/build/joinAlignedDiffs.js b/node_modules/jest-diff/build/joinAlignedDiffs.js new file mode 100644 index 00000000..af5eb53c --- /dev/null +++ b/node_modules/jest-diff/build/joinAlignedDiffs.js @@ -0,0 +1,271 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.joinAlignedDiffsNoExpand = exports.joinAlignedDiffsExpand = void 0; +var _cleanupSemantic = require('./cleanupSemantic'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const formatTrailingSpaces = (line, trailingSpaceFormatter) => + line.replace(/\s+$/, match => trailingSpaceFormatter(match)); +const printDiffLine = ( + line, + isFirstOrLast, + color, + indicator, + trailingSpaceFormatter, + emptyFirstOrLastLinePlaceholder +) => + line.length !== 0 + ? color( + `${indicator} ${formatTrailingSpaces(line, trailingSpaceFormatter)}` + ) + : indicator !== ' ' + ? color(indicator) + : isFirstOrLast && emptyFirstOrLastLinePlaceholder.length !== 0 + ? color(`${indicator} ${emptyFirstOrLastLinePlaceholder}`) + : ''; +const printDeleteLine = ( + line, + isFirstOrLast, + { + aColor, + aIndicator, + changeLineTrailingSpaceColor, + emptyFirstOrLastLinePlaceholder + } +) => + printDiffLine( + line, + isFirstOrLast, + aColor, + aIndicator, + changeLineTrailingSpaceColor, + emptyFirstOrLastLinePlaceholder + ); +const printInsertLine = ( + line, + isFirstOrLast, + { + bColor, + bIndicator, + changeLineTrailingSpaceColor, + emptyFirstOrLastLinePlaceholder + } +) => + printDiffLine( + line, + isFirstOrLast, + bColor, + bIndicator, + changeLineTrailingSpaceColor, + emptyFirstOrLastLinePlaceholder + ); +const printCommonLine = ( + line, + isFirstOrLast, + { + commonColor, + commonIndicator, + commonLineTrailingSpaceColor, + emptyFirstOrLastLinePlaceholder + } +) => + printDiffLine( + line, + isFirstOrLast, + commonColor, + commonIndicator, + commonLineTrailingSpaceColor, + emptyFirstOrLastLinePlaceholder + ); + +// In GNU diff format, indexes are one-based instead of zero-based. +const createPatchMark = (aStart, aEnd, bStart, bEnd, {patchColor}) => + patchColor( + `@@ -${aStart + 1},${aEnd - aStart} +${bStart + 1},${bEnd - bStart} @@` + ); + +// jest --no-expand +// +// Given array of aligned strings with inverse highlight formatting, +// return joined lines with diff formatting (and patch marks, if needed). +const joinAlignedDiffsNoExpand = (diffs, options) => { + const iLength = diffs.length; + const nContextLines = options.contextLines; + const nContextLines2 = nContextLines + nContextLines; + + // First pass: count output lines and see if it has patches. + let jLength = iLength; + let hasExcessAtStartOrEnd = false; + let nExcessesBetweenChanges = 0; + let i = 0; + while (i !== iLength) { + const iStart = i; + while (i !== iLength && diffs[i][0] === _cleanupSemantic.DIFF_EQUAL) { + i += 1; + } + if (iStart !== i) { + if (iStart === 0) { + // at start + if (i > nContextLines) { + jLength -= i - nContextLines; // subtract excess common lines + hasExcessAtStartOrEnd = true; + } + } else if (i === iLength) { + // at end + const n = i - iStart; + if (n > nContextLines) { + jLength -= n - nContextLines; // subtract excess common lines + hasExcessAtStartOrEnd = true; + } + } else { + // between changes + const n = i - iStart; + if (n > nContextLines2) { + jLength -= n - nContextLines2; // subtract excess common lines + nExcessesBetweenChanges += 1; + } + } + } + while (i !== iLength && diffs[i][0] !== _cleanupSemantic.DIFF_EQUAL) { + i += 1; + } + } + const hasPatch = nExcessesBetweenChanges !== 0 || hasExcessAtStartOrEnd; + if (nExcessesBetweenChanges !== 0) { + jLength += nExcessesBetweenChanges + 1; // add patch lines + } else if (hasExcessAtStartOrEnd) { + jLength += 1; // add patch line + } + + const jLast = jLength - 1; + const lines = []; + let jPatchMark = 0; // index of placeholder line for current patch mark + if (hasPatch) { + lines.push(''); // placeholder line for first patch mark + } + + // Indexes of expected or received lines in current patch: + let aStart = 0; + let bStart = 0; + let aEnd = 0; + let bEnd = 0; + const pushCommonLine = line => { + const j = lines.length; + lines.push(printCommonLine(line, j === 0 || j === jLast, options)); + aEnd += 1; + bEnd += 1; + }; + const pushDeleteLine = line => { + const j = lines.length; + lines.push(printDeleteLine(line, j === 0 || j === jLast, options)); + aEnd += 1; + }; + const pushInsertLine = line => { + const j = lines.length; + lines.push(printInsertLine(line, j === 0 || j === jLast, options)); + bEnd += 1; + }; + + // Second pass: push lines with diff formatting (and patch marks, if needed). + i = 0; + while (i !== iLength) { + let iStart = i; + while (i !== iLength && diffs[i][0] === _cleanupSemantic.DIFF_EQUAL) { + i += 1; + } + if (iStart !== i) { + if (iStart === 0) { + // at beginning + if (i > nContextLines) { + iStart = i - nContextLines; + aStart = iStart; + bStart = iStart; + aEnd = aStart; + bEnd = bStart; + } + for (let iCommon = iStart; iCommon !== i; iCommon += 1) { + pushCommonLine(diffs[iCommon][1]); + } + } else if (i === iLength) { + // at end + const iEnd = i - iStart > nContextLines ? iStart + nContextLines : i; + for (let iCommon = iStart; iCommon !== iEnd; iCommon += 1) { + pushCommonLine(diffs[iCommon][1]); + } + } else { + // between changes + const nCommon = i - iStart; + if (nCommon > nContextLines2) { + const iEnd = iStart + nContextLines; + for (let iCommon = iStart; iCommon !== iEnd; iCommon += 1) { + pushCommonLine(diffs[iCommon][1]); + } + lines[jPatchMark] = createPatchMark( + aStart, + aEnd, + bStart, + bEnd, + options + ); + jPatchMark = lines.length; + lines.push(''); // placeholder line for next patch mark + + const nOmit = nCommon - nContextLines2; + aStart = aEnd + nOmit; + bStart = bEnd + nOmit; + aEnd = aStart; + bEnd = bStart; + for (let iCommon = i - nContextLines; iCommon !== i; iCommon += 1) { + pushCommonLine(diffs[iCommon][1]); + } + } else { + for (let iCommon = iStart; iCommon !== i; iCommon += 1) { + pushCommonLine(diffs[iCommon][1]); + } + } + } + } + while (i !== iLength && diffs[i][0] === _cleanupSemantic.DIFF_DELETE) { + pushDeleteLine(diffs[i][1]); + i += 1; + } + while (i !== iLength && diffs[i][0] === _cleanupSemantic.DIFF_INSERT) { + pushInsertLine(diffs[i][1]); + i += 1; + } + } + if (hasPatch) { + lines[jPatchMark] = createPatchMark(aStart, aEnd, bStart, bEnd, options); + } + return lines.join('\n'); +}; + +// jest --expand +// +// Given array of aligned strings with inverse highlight formatting, +// return joined lines with diff formatting. +exports.joinAlignedDiffsNoExpand = joinAlignedDiffsNoExpand; +const joinAlignedDiffsExpand = (diffs, options) => + diffs + .map((diff, i, diffs) => { + const line = diff[1]; + const isFirstOrLast = i === 0 || i === diffs.length - 1; + switch (diff[0]) { + case _cleanupSemantic.DIFF_DELETE: + return printDeleteLine(line, isFirstOrLast, options); + case _cleanupSemantic.DIFF_INSERT: + return printInsertLine(line, isFirstOrLast, options); + default: + return printCommonLine(line, isFirstOrLast, options); + } + }) + .join('\n'); +exports.joinAlignedDiffsExpand = joinAlignedDiffsExpand; diff --git a/node_modules/jest-diff/build/normalizeDiffOptions.js b/node_modules/jest-diff/build/normalizeDiffOptions.js new file mode 100644 index 00000000..c8eaeb98 --- /dev/null +++ b/node_modules/jest-diff/build/normalizeDiffOptions.js @@ -0,0 +1,59 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.normalizeDiffOptions = exports.noColor = void 0; +var _chalk = _interopRequireDefault(require('chalk')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const noColor = string => string; +exports.noColor = noColor; +const DIFF_CONTEXT_DEFAULT = 5; +const OPTIONS_DEFAULT = { + aAnnotation: 'Expected', + aColor: _chalk.default.green, + aIndicator: '-', + bAnnotation: 'Received', + bColor: _chalk.default.red, + bIndicator: '+', + changeColor: _chalk.default.inverse, + changeLineTrailingSpaceColor: noColor, + commonColor: _chalk.default.dim, + commonIndicator: ' ', + commonLineTrailingSpaceColor: noColor, + compareKeys: undefined, + contextLines: DIFF_CONTEXT_DEFAULT, + emptyFirstOrLastLinePlaceholder: '', + expand: true, + includeChangeCounts: false, + omitAnnotationLines: false, + patchColor: _chalk.default.yellow +}; +const getCompareKeys = compareKeys => + compareKeys && typeof compareKeys === 'function' + ? compareKeys + : OPTIONS_DEFAULT.compareKeys; +const getContextLines = contextLines => + typeof contextLines === 'number' && + Number.isSafeInteger(contextLines) && + contextLines >= 0 + ? contextLines + : DIFF_CONTEXT_DEFAULT; + +// Pure function returns options with all properties. +const normalizeDiffOptions = (options = {}) => ({ + ...OPTIONS_DEFAULT, + ...options, + compareKeys: getCompareKeys(options.compareKeys), + contextLines: getContextLines(options.contextLines) +}); +exports.normalizeDiffOptions = normalizeDiffOptions; diff --git a/node_modules/jest-diff/build/printDiffs.js b/node_modules/jest-diff/build/printDiffs.js new file mode 100644 index 00000000..2b8f27ed --- /dev/null +++ b/node_modules/jest-diff/build/printDiffs.js @@ -0,0 +1,79 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.diffStringsUnified = exports.diffStringsRaw = void 0; +var _cleanupSemantic = require('./cleanupSemantic'); +var _diffLines = require('./diffLines'); +var _diffStrings = _interopRequireDefault(require('./diffStrings')); +var _getAlignedDiffs = _interopRequireDefault(require('./getAlignedDiffs')); +var _normalizeDiffOptions = require('./normalizeDiffOptions'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const hasCommonDiff = (diffs, isMultiline) => { + if (isMultiline) { + // Important: Ignore common newline that was appended to multiline strings! + const iLast = diffs.length - 1; + return diffs.some( + (diff, i) => + diff[0] === _cleanupSemantic.DIFF_EQUAL && + (i !== iLast || diff[1] !== '\n') + ); + } + return diffs.some(diff => diff[0] === _cleanupSemantic.DIFF_EQUAL); +}; + +// Compare two strings character-by-character. +// Format as comparison lines in which changed substrings have inverse colors. +const diffStringsUnified = (a, b, options) => { + if (a !== b && a.length !== 0 && b.length !== 0) { + const isMultiline = a.includes('\n') || b.includes('\n'); + + // getAlignedDiffs assumes that a newline was appended to the strings. + const diffs = diffStringsRaw( + isMultiline ? `${a}\n` : a, + isMultiline ? `${b}\n` : b, + true // cleanupSemantic + ); + + if (hasCommonDiff(diffs, isMultiline)) { + const optionsNormalized = (0, _normalizeDiffOptions.normalizeDiffOptions)( + options + ); + const lines = (0, _getAlignedDiffs.default)( + diffs, + optionsNormalized.changeColor + ); + return (0, _diffLines.printDiffLines)(lines, optionsNormalized); + } + } + + // Fall back to line-by-line diff. + return (0, _diffLines.diffLinesUnified)( + a.split('\n'), + b.split('\n'), + options + ); +}; + +// Compare two strings character-by-character. +// Optionally clean up small common substrings, also known as chaff. +exports.diffStringsUnified = diffStringsUnified; +const diffStringsRaw = (a, b, cleanup) => { + const diffs = (0, _diffStrings.default)(a, b); + if (cleanup) { + (0, _cleanupSemantic.cleanupSemantic)(diffs); // impure function + } + + return diffs; +}; +exports.diffStringsRaw = diffStringsRaw; diff --git a/node_modules/jest-diff/build/types.js b/node_modules/jest-diff/build/types.js new file mode 100644 index 00000000..ad9a93a7 --- /dev/null +++ b/node_modules/jest-diff/build/types.js @@ -0,0 +1 @@ +'use strict'; diff --git a/node_modules/jest-diff/package.json b/node_modules/jest-diff/package.json new file mode 100644 index 00000000..41a1d236 --- /dev/null +++ b/node_modules/jest-diff/package.json @@ -0,0 +1,36 @@ +{ + "name": "jest-diff", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-diff" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "devDependencies": { + "@jest/test-utils": "^29.7.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-docblock/LICENSE b/node_modules/jest-docblock/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-docblock/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-docblock/README.md b/node_modules/jest-docblock/README.md new file mode 100644 index 00000000..ba3fc7b6 --- /dev/null +++ b/node_modules/jest-docblock/README.md @@ -0,0 +1,108 @@ +# jest-docblock + +`jest-docblock` is a package that can extract and parse a specially-formatted comment called a "docblock" at the top of a file. + +A docblock looks like this: + +```js +/** + * Stuff goes here! + */ +``` + +Docblocks can contain pragmas, which are words prefixed by `@`: + +```js +/** + * Pragma incoming! + * + * @flow + */ +``` + +Pragmas can also take arguments: + +```js +/** + * Check this out: + * + * @myPragma it is so cool + */ +``` + +`jest-docblock` can: + +- extract the docblock from some code as a string +- parse a docblock string's pragmas into an object +- print an object and some comments back to a string + +## Installation + +```sh +# with yarn +$ yarn add jest-docblock +# with npm +$ npm install jest-docblock +``` + +## Usage + +```js +const code = ` +/** + * Everything is awesome! + * + * @everything is:awesome + * @flow + */ + + export const everything = Object.create(null); + export default function isAwesome(something) { + return something === everything; + } +`; + +const { + extract, + strip, + parse, + parseWithComments, + print, +} = require('jest-docblock'); + +const docblock = extract(code); +console.log(docblock); // "/**\n * Everything is awesome!\n * \n * @everything is:awesome\n * @flow\n */" + +const stripped = strip(code); +console.log(stripped); // "export const everything = Object.create(null);\n export default function isAwesome(something) {\n return something === everything;\n }" + +const pragmas = parse(docblock); +console.log(pragmas); // { everything: "is:awesome", flow: "" } + +const parsed = parseWithComments(docblock); +console.log(parsed); // { comments: "Everything is awesome!", pragmas: { everything: "is:awesome", flow: "" } } + +console.log(print({pragmas, comments: 'hi!'})); // /**\n * hi!\n *\n * @everything is:awesome\n * @flow\n */; +``` + +## API Documentation + +### `extract(contents: string): string` + +Extracts a docblock from some file contents. Returns the docblock contained in `contents`. If `contents` did not contain a docblock, it will return the empty string (`""`). + +### `strip(contents: string): string` + +Strips the top docblock from a file and return the result. If a file does not have a docblock at the top, then return the file unchanged. + +### `parse(docblock: string): {[key: string]: string | string[] }` + +Parses the pragmas in a docblock string into an object whose keys are the pragma tags and whose values are the arguments to those pragmas. + +### `parseWithComments(docblock: string): { comments: string, pragmas: {[key: string]: string | string[]} }` + +Similar to `parse` except this method also returns the comments from the docblock. Useful when used with `print()`. + +### `print({ comments?: string, pragmas?: {[key: string]: string | string[]} }): string` + +Prints an object of key-value pairs back into a docblock. If `comments` are provided, they will be positioned on the top of the docblock. diff --git a/node_modules/jest-docblock/build/index.d.ts b/node_modules/jest-docblock/build/index.d.ts new file mode 100644 index 00000000..b4e72f5a --- /dev/null +++ b/node_modules/jest-docblock/build/index.d.ts @@ -0,0 +1,29 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +export declare function extract(contents: string): string; + +export declare function parse(docblock: string): Pragmas; + +export declare function parseWithComments(docblock: string): { + comments: string; + pragmas: Pragmas; +}; + +declare type Pragmas = Record>; + +declare function print_2({ + comments, + pragmas, +}: { + comments?: string; + pragmas?: Pragmas; +}): string; +export {print_2 as print}; + +export declare function strip(contents: string): string; + +export {}; diff --git a/node_modules/jest-docblock/build/index.js b/node_modules/jest-docblock/build/index.js new file mode 100644 index 00000000..267aa012 --- /dev/null +++ b/node_modules/jest-docblock/build/index.js @@ -0,0 +1,130 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.extract = extract; +exports.parse = parse; +exports.parseWithComments = parseWithComments; +exports.print = print; +exports.strip = strip; +function _os() { + const data = require('os'); + _os = function () { + return data; + }; + return data; +} +function _detectNewline() { + const data = _interopRequireDefault(require('detect-newline')); + _detectNewline = function () { + return data; + }; + return data; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const commentEndRe = /\*\/$/; +const commentStartRe = /^\/\*\*?/; +const docblockRe = /^\s*(\/\*\*?(.|\r?\n)*?\*\/)/; +const lineCommentRe = /(^|\s+)\/\/([^\r\n]*)/g; +const ltrimNewlineRe = /^(\r?\n)+/; +const multilineRe = + /(?:^|\r?\n) *(@[^\r\n]*?) *\r?\n *(?![^@\r\n]*\/\/[^]*)([^@\r\n\s][^@\r\n]+?) *\r?\n/g; +const propertyRe = /(?:^|\r?\n) *@(\S+) *([^\r\n]*)/g; +const stringStartRe = /(\r?\n|^) *\* ?/g; +const STRING_ARRAY = []; +function extract(contents) { + const match = contents.match(docblockRe); + return match ? match[0].trimLeft() : ''; +} +function strip(contents) { + const match = contents.match(docblockRe); + return match && match[0] ? contents.substring(match[0].length) : contents; +} +function parse(docblock) { + return parseWithComments(docblock).pragmas; +} +function parseWithComments(docblock) { + const line = (0, _detectNewline().default)(docblock) ?? _os().EOL; + docblock = docblock + .replace(commentStartRe, '') + .replace(commentEndRe, '') + .replace(stringStartRe, '$1'); + + // Normalize multi-line directives + let prev = ''; + while (prev !== docblock) { + prev = docblock; + docblock = docblock.replace(multilineRe, `${line}$1 $2${line}`); + } + docblock = docblock.replace(ltrimNewlineRe, '').trimRight(); + const result = Object.create(null); + const comments = docblock + .replace(propertyRe, '') + .replace(ltrimNewlineRe, '') + .trimRight(); + let match; + while ((match = propertyRe.exec(docblock))) { + // strip linecomments from pragmas + const nextPragma = match[2].replace(lineCommentRe, ''); + if ( + typeof result[match[1]] === 'string' || + Array.isArray(result[match[1]]) + ) { + result[match[1]] = STRING_ARRAY.concat(result[match[1]], nextPragma); + } else { + result[match[1]] = nextPragma; + } + } + return { + comments, + pragmas: result + }; +} +function print({comments = '', pragmas = {}}) { + const line = (0, _detectNewline().default)(comments) ?? _os().EOL; + const head = '/**'; + const start = ' *'; + const tail = ' */'; + const keys = Object.keys(pragmas); + const printedObject = keys + .flatMap(key => printKeyValues(key, pragmas[key])) + .map(keyValue => `${start} ${keyValue}${line}`) + .join(''); + if (!comments) { + if (keys.length === 0) { + return ''; + } + if (keys.length === 1 && !Array.isArray(pragmas[keys[0]])) { + const value = pragmas[keys[0]]; + return `${head} ${printKeyValues(keys[0], value)[0]}${tail}`; + } + } + const printedComments = + comments + .split(line) + .map(textLine => `${start} ${textLine}`) + .join(line) + line; + return ( + head + + line + + (comments ? printedComments : '') + + (comments && keys.length ? start + line : '') + + printedObject + + tail + ); +} +function printKeyValues(key, valueOrArray) { + return STRING_ARRAY.concat(valueOrArray).map(value => + `@${key} ${value}`.trim() + ); +} diff --git a/node_modules/jest-docblock/package.json b/node_modules/jest-docblock/package.json new file mode 100644 index 00000000..22432f8f --- /dev/null +++ b/node_modules/jest-docblock/package.json @@ -0,0 +1,32 @@ +{ + "name": "jest-docblock", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-docblock" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "devDependencies": { + "@types/node": "*" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-each/LICENSE b/node_modules/jest-each/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-each/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-each/README.md b/node_modules/jest-each/README.md new file mode 100644 index 00000000..3b438438 --- /dev/null +++ b/node_modules/jest-each/README.md @@ -0,0 +1,548 @@ +
+

jest-each

+ Jest Parameterised Testing +
+ +
+ +[![version](https://img.shields.io/npm/v/jest-each.svg?style=flat-square)](https://www.npmjs.com/package/jest-each) [![downloads](https://img.shields.io/npm/dm/jest-each.svg?style=flat-square)](http://npm-stat.com/charts.html?package=jest-each&from=2017-03-21) [![MIT License](https://img.shields.io/npm/l/jest-each.svg?style=flat-square)](https://github.com/jestjs/jest/blob/main/LICENSE) + +A parameterised testing library for [Jest](https://jestjs.io/) inspired by [mocha-each](https://github.com/ryym/mocha-each). + +jest-each allows you to provide multiple arguments to your `test`/`describe` which results in the test/suite being run once per row of parameters. + +## Features + +- `.test` to runs multiple tests with parameterised data + - Also under the alias: `.it` +- `.test.only` to only run the parameterised tests + - Also under the aliases: `.it.only` or `.fit` +- `.test.skip` to skip the parameterised tests + - Also under the aliases: `.it.skip` or `.xit` or `.xtest` +- `.test.concurrent` + - Also under the alias: `.it.concurrent` +- `.test.concurrent.only` + - Also under the alias: `.it.concurrent.only` +- `.test.concurrent.skip` + - Also under the alias: `.it.concurrent.skip` +- `.describe` to runs test suites with parameterised data +- `.describe.only` to only run the parameterised suite of tests + - Also under the aliases: `.fdescribe` +- `.describe.skip` to skip the parameterised suite of tests + - Also under the aliases: `.xdescribe` +- Asynchronous tests with `done` +- Unique test titles with [`printf` formatting](https://nodejs.org/api/util.html#util_util_format_format_args): + - `%p` - [pretty-format](https://www.npmjs.com/package/pretty-format). + - `%s`- String. + - `%d`- Number. + - `%i` - Integer. + - `%f` - Floating point value. + - `%j` - JSON. + - `%o` - Object. + - `%#` - Index of the test case. + - `%%` - single percent sign ('%'). This does not consume an argument. +- Unique test titles by injecting properties of test case object +- 🖖 Spock like data tables with [Tagged Template Literals](#tagged-template-literal-of-rows) + +--- + +- [Demo](#demo) +- [Installation](#installation) +- [Importing](#importing) +- APIs + - [Array of Rows](#array-of-rows) + - [Usage](#usage) + - [Tagged Template Literal of rows](#tagged-template-literal-of-rows) + - [Usage](#usage-1) + +## Demo + +#### Tests without jest-each + +![Current jest tests](assets/default-demo.gif) + +#### Tests can be re-written with jest-each to: + +**`.test`** + +![Current jest tests](assets/test-demo.gif) + +**`.test` with Tagged Template Literals** + +![Current jest tests](assets/tagged-template-literal.gif) + +**`.describe`** + +![Current jest tests](assets/describe-demo.gif) + +## Installation + +`npm i --save-dev jest-each` + +`yarn add -D jest-each` + +## Importing + +jest-each is a default export so it can be imported with whatever name you like. + +```js +// es6 +import each from 'jest-each'; +``` + +```js +// es5 +const each = require('jest-each').default; +``` + +## Array of rows + +### API + +#### `each([parameters]).test(name, testFn)` + +##### `each`: + +- parameters: `Array` of Arrays with the arguments that are passed into the `testFn` for each row + - _Note_ If you pass in a 1D array of primitives, internally it will be mapped to a table i.e. `[1, 2, 3] -> [[1], [2], [3]]` + +##### `.test`: + +- name: `String` the title of the `test`. + - Generate unique test titles by positionally injecting parameters with [`printf` formatting](https://nodejs.org/api/util.html#util_util_format_format_args): + - `%p` - [pretty-format](https://www.npmjs.com/package/pretty-format). + - `%s`- String. + - `%d`- Number. + - `%i` - Integer. + - `%f` - Floating point value. + - `%j` - JSON. + - `%o` - Object. + - `%#` - Index of the test case. + - `%%` - single percent sign ('%'). This does not consume an argument. + - Or generate unique test titles by injecting properties of test case object with `$variable` + - To inject nested object values use you can supply a keyPath i.e. `$variable.path.to.value` + - You can use `$#` to inject the index of the test case + - You cannot use `$variable` with the `printf` formatting except for `%%` +- testFn: `Function` the test logic, this is the function that will receive the parameters of each row as function arguments + +#### `each([parameters]).describe(name, suiteFn)` + +##### `each`: + +- parameters: `Array` of Arrays with the arguments that are passed into the `suiteFn` for each row + - _Note_ If you pass in a 1D array of primitives, internally it will be mapped to a table i.e. `[1, 2, 3] -> [[1], [2], [3]]` + +##### `.describe`: + +- name: `String` the title of the `describe` + - Generate unique test titles by positionally injecting parameters with [`printf` formatting](https://nodejs.org/api/util.html#util_util_format_format_args): + - `%p` - [pretty-format](https://www.npmjs.com/package/pretty-format). + - `%s`- String. + - `%d`- Number. + - `%i` - Integer. + - `%f` - Floating point value. + - `%j` - JSON. + - `%o` - Object. + - `%#` - Index of the test case. + - `%%` - single percent sign ('%'). This does not consume an argument. + - Or generate unique test titles by injecting properties of test case object with `$variable` + - To inject nested object values use you can supply a keyPath i.e. `$variable.path.to.value` + - You can use `$#` to inject the index of the test case + - You cannot use `$variable` with the `printf` formatting except for `%%` +- suiteFn: `Function` the suite of `test`/`it`s to be ran, this is the function that will receive the parameters in each row as function arguments + +### Usage + +#### `.test(name, fn)` + +Alias: `.it(name, fn)` + +```js +each([ + [1, 1, 2], + [1, 2, 3], + [2, 1, 3], +]).test('returns the result of adding %d to %d', (a, b, expected) => { + expect(a + b).toBe(expected); +}); +``` + +```js +each([ + {a: 1, b: 1, expected: 2}, + {a: 1, b: 2, expected: 3}, + {a: 2, b: 1, expected: 3}, +]).test('returns the result of adding $a to $b', ({a, b, expected}) => { + expect(a + b).toBe(expected); +}); +``` + +#### `.test.only(name, fn)` + +Aliases: `.it.only(name, fn)` or `.fit(name, fn)` + +```js +each([ + [1, 1, 2], + [1, 2, 3], + [2, 1, 3], +]).test.only('returns the result of adding %d to %d', (a, b, expected) => { + expect(a + b).toBe(expected); +}); +``` + +#### `.test.skip(name, fn)` + +Aliases: `.it.skip(name, fn)` or `.xit(name, fn)` or `.xtest(name, fn)` + +```js +each([ + [1, 1, 2], + [1, 2, 3], + [2, 1, 3], +]).test.skip('returns the result of adding %d to %d', (a, b, expected) => { + expect(a + b).toBe(expected); +}); +``` + +#### `.test.concurrent(name, fn)` + +Aliases: `.it.concurrent(name, fn)` + +```js +each([ + [1, 1, 2], + [1, 2, 3], + [2, 1, 3], +]).test.concurrent( + 'returns the result of adding %d to %d', + (a, b, expected) => { + expect(a + b).toBe(expected); + }, +); +``` + +#### `.test.concurrent.only(name, fn)` + +Aliases: `.it.concurrent.only(name, fn)` + +```js +each([ + [1, 1, 2], + [1, 2, 3], + [2, 1, 3], +]).test.concurrent.only( + 'returns the result of adding %d to %d', + (a, b, expected) => { + expect(a + b).toBe(expected); + }, +); +``` + +#### `.test.concurrent.skip(name, fn)` + +Aliases: `.it.concurrent.skip(name, fn)` + +```js +each([ + [1, 1, 2], + [1, 2, 3], + [2, 1, 3], +]).test.concurrent.skip( + 'returns the result of adding %d to %d', + (a, b, expected) => { + expect(a + b).toBe(expected); + }, +); +``` + +#### Asynchronous `.test(name, fn(done))` + +Alias: `.it(name, fn(done))` + +```js +each([['hello'], ['mr'], ['spy']]).test( + 'gives 007 secret message: %s', + (str, done) => { + const asynchronousSpy = message => { + expect(message).toBe(str); + done(); + }; + callSomeAsynchronousFunction(asynchronousSpy)(str); + }, +); +``` + +#### `.describe(name, fn)` + +```js +each([ + [1, 1, 2], + [1, 2, 3], + [2, 1, 3], +]).describe('.add(%d, %d)', (a, b, expected) => { + test(`returns ${expected}`, () => { + expect(a + b).toBe(expected); + }); + + test('does not mutate first arg', () => { + a + b; + expect(a).toBe(a); + }); + + test('does not mutate second arg', () => { + a + b; + expect(b).toBe(b); + }); +}); +``` + +```js +each([ + {a: 1, b: 1, expected: 2}, + {a: 1, b: 2, expected: 3}, + {a: 2, b: 1, expected: 3}, +]).describe('.add($a, $b)', ({a, b, expected}) => { + test(`returns ${expected}`, () => { + expect(a + b).toBe(expected); + }); + + test('does not mutate first arg', () => { + a + b; + expect(a).toBe(a); + }); + + test('does not mutate second arg', () => { + a + b; + expect(b).toBe(b); + }); +}); +``` + +#### `.describe.only(name, fn)` + +Aliases: `.fdescribe(name, fn)` + +```js +each([ + [1, 1, 2], + [1, 2, 3], + [2, 1, 3], +]).describe.only('.add(%d, %d)', (a, b, expected) => { + test(`returns ${expected}`, () => { + expect(a + b).toBe(expected); + }); +}); +``` + +#### `.describe.skip(name, fn)` + +Aliases: `.xdescribe(name, fn)` + +```js +each([ + [1, 1, 2], + [1, 2, 3], + [2, 1, 3], +]).describe.skip('.add(%d, %d)', (a, b, expected) => { + test(`returns ${expected}`, () => { + expect(a + b).toBe(expected); + }); +}); +``` + +--- + +## Tagged Template Literal of rows + +### API + +#### `each[tagged template].test(name, suiteFn)` + +```js +each` + a | b | expected + ${1} | ${1} | ${2} + ${1} | ${2} | ${3} + ${2} | ${1} | ${3} +`.test('returns $expected when adding $a to $b', ({a, b, expected}) => { + expect(a + b).toBe(expected); +}); +``` + +##### `each` takes a tagged template string with: + +- First row of variable name column headings separated with `|` +- One or more subsequent rows of data supplied as template literal expressions using `${value}` syntax. + +##### `.test`: + +- name: `String` the title of the `test`, use `$variable` in the name string to inject test values into the test title from the tagged template expressions + - To inject nested object values use you can supply a keyPath i.e. `$variable.path.to.value` + - You can use `$#` to inject the index of the table row. +- testFn: `Function` the test logic, this is the function that will receive the parameters of each row as function arguments + +#### `each[tagged template].describe(name, suiteFn)` + +```js +each` + a | b | expected + ${1} | ${1} | ${2} + ${1} | ${2} | ${3} + ${2} | ${1} | ${3} +`.describe('$a + $b', ({a, b, expected}) => { + test(`returns ${expected}`, () => { + expect(a + b).toBe(expected); + }); + + test('does not mutate first arg', () => { + a + b; + expect(a).toBe(a); + }); + + test('does not mutate second arg', () => { + a + b; + expect(b).toBe(b); + }); +}); +``` + +##### `each` takes a tagged template string with: + +- First row of variable name column headings separated with `|` +- One or more subsequent rows of data supplied as template literal expressions using `${value}` syntax. + +##### `.describe`: + +- name: `String` the title of the `test`, use `$variable` in the name string to inject test values into the test title from the tagged template expressions + - To inject nested object values use you can supply a keyPath i.e. `$variable.path.to.value` +- suiteFn: `Function` the suite of `test`/`it`s to be ran, this is the function that will receive the parameters in each row as function arguments + +### Usage + +#### `.test(name, fn)` + +Alias: `.it(name, fn)` + +```js +each` + a | b | expected + ${1} | ${1} | ${2} + ${1} | ${2} | ${3} + ${2} | ${1} | ${3} +`.test('returns $expected when adding $a to $b', ({a, b, expected}) => { + expect(a + b).toBe(expected); +}); +``` + +#### `.test.only(name, fn)` + +Aliases: `.it.only(name, fn)` or `.fit(name, fn)` + +```js +each` + a | b | expected + ${1} | ${1} | ${2} + ${1} | ${2} | ${3} + ${2} | ${1} | ${3} +`.test.only('returns $expected when adding $a to $b', ({a, b, expected}) => { + expect(a + b).toBe(expected); +}); +``` + +#### `.test.skip(name, fn)` + +Aliases: `.it.skip(name, fn)` or `.xit(name, fn)` or `.xtest(name, fn)` + +```js +each` + a | b | expected + ${1} | ${1} | ${2} + ${1} | ${2} | ${3} + ${2} | ${1} | ${3} +`.test.skip('returns $expected when adding $a to $b', ({a, b, expected}) => { + expect(a + b).toBe(expected); +}); +``` + +#### Asynchronous `.test(name, fn(done))` + +Alias: `.it(name, fn(done))` + +```js +each` + str + ${'hello'} + ${'mr'} + ${'spy'} +`.test('gives 007 secret message: $str', ({str}, done) => { + const asynchronousSpy = message => { + expect(message).toBe(str); + done(); + }; + callSomeAsynchronousFunction(asynchronousSpy)(str); +}); +``` + +#### `.describe(name, fn)` + +```js +each` + a | b | expected + ${1} | ${1} | ${2} + ${1} | ${2} | ${3} + ${2} | ${1} | ${3} +`.describe('$a + $b', ({a, b, expected}) => { + test(`returns ${expected}`, () => { + expect(a + b).toBe(expected); + }); + + test('does not mutate first arg', () => { + a + b; + expect(a).toBe(a); + }); + + test('does not mutate second arg', () => { + a + b; + expect(b).toBe(b); + }); +}); +``` + +#### `.describe.only(name, fn)` + +Aliases: `.fdescribe(name, fn)` + +```js +each` + a | b | expected + ${1} | ${1} | ${2} + ${1} | ${2} | ${3} + ${2} | ${1} | ${3} +`.describe.only('$a + $b', ({a, b, expected}) => { + test(`returns ${expected}`, () => { + expect(a + b).toBe(expected); + }); +}); +``` + +#### `.describe.skip(name, fn)` + +Aliases: `.xdescribe(name, fn)` + +```js +each` + a | b | expected + ${1} | ${1} | ${2} + ${1} | ${2} | ${3} + ${2} | ${1} | ${3} +`.describe.skip('$a + $b', ({a, b, expected}) => { + test(`returns ${expected}`, () => { + expect(a + b).toBe(expected); + }); +}); +``` + +## License + +MIT diff --git a/node_modules/jest-each/build/bind.js b/node_modules/jest-each/build/bind.js new file mode 100644 index 00000000..8e042063 --- /dev/null +++ b/node_modules/jest-each/build/bind.js @@ -0,0 +1,81 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = bind; +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +var _array = _interopRequireDefault(require('./table/array')); +var _template = _interopRequireDefault(require('./table/template')); +var _validation = require('./validation'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +// type TestFn = (done?: Global.DoneFn) => Promise | void | undefined; + +function bind(cb, supportsDone = true, needsEachError = false) { + const bindWrap = (table, ...taggedTemplateData) => { + const error = new (_jestUtil().ErrorWithStack)(undefined, bindWrap); + return function eachBind(title, test, timeout) { + title = (0, _jestUtil().convertDescriptorToString)(title); + try { + const tests = isArrayTable(taggedTemplateData) + ? buildArrayTests(title, table) + : buildTemplateTests(title, table, taggedTemplateData); + return tests.forEach(row => + needsEachError + ? cb( + row.title, + applyArguments(supportsDone, row.arguments, test), + timeout, + error + ) + : cb( + row.title, + applyArguments(supportsDone, row.arguments, test), + timeout + ) + ); + } catch (e) { + const err = new Error(e.message); + err.stack = error.stack?.replace(/^Error: /s, `Error: ${e.message}`); + return cb(title, () => { + throw err; + }); + } + }; + }; + return bindWrap; +} +const isArrayTable = data => data.length === 0; +const buildArrayTests = (title, table) => { + (0, _validation.validateArrayTable)(table); + return (0, _array.default)(title, table); +}; +const buildTemplateTests = (title, table, taggedTemplateData) => { + const headings = getHeadingKeys(table[0]); + (0, _validation.validateTemplateTableArguments)(headings, taggedTemplateData); + return (0, _template.default)(title, headings, taggedTemplateData); +}; +const getHeadingKeys = headings => + (0, _validation.extractValidTemplateHeadings)(headings) + .replace(/\s/g, '') + .split('|'); +const applyArguments = (supportsDone, params, test) => + supportsDone && params.length < test.length + ? done => test(...params, done) + : () => test(...params); diff --git a/node_modules/jest-each/build/index.d.ts b/node_modules/jest-each/build/index.d.ts new file mode 100644 index 00000000..86ca927b --- /dev/null +++ b/node_modules/jest-each/build/index.d.ts @@ -0,0 +1,141 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import type {Global} from '@jest/types'; + +export declare function bind( + cb: GlobalCallback, + supportsDone?: boolean, + needsEachError?: boolean, +): Global.EachTestFn; + +declare const each: { + (table: Global.EachTable, ...data: Global.TemplateData): ReturnType< + typeof install + >; + withGlobal(g: Global): ( + table: Global.EachTable, + ...data: Global.TemplateData + ) => { + describe: { + ( + title: string, + suite: Global.EachTestFn, + timeout?: number, + ): any; + skip: any; + only: any; + }; + fdescribe: any; + fit: any; + it: { + ( + title: string, + test: Global.EachTestFn, + timeout?: number, + ): any; + skip: any; + only: any; + concurrent: { + ( + title: string, + test: Global.EachTestFn, + timeout?: number, + ): any; + only: any; + skip: any; + }; + }; + test: { + ( + title: string, + test: Global.EachTestFn, + timeout?: number, + ): any; + skip: any; + only: any; + concurrent: { + ( + title: string, + test: Global.EachTestFn, + timeout?: number, + ): any; + only: any; + skip: any; + }; + }; + xdescribe: any; + xit: any; + xtest: any; + }; +}; +export default each; + +declare type GlobalCallback = ( + testName: string, + fn: Global.ConcurrentTestFn, + timeout?: number, + eachError?: Error, +) => void; + +declare const install: ( + g: Global, + table: Global.EachTable, + ...data: Global.TemplateData +) => { + describe: { + ( + title: string, + suite: Global.EachTestFn, + timeout?: number, + ): any; + skip: any; + only: any; + }; + fdescribe: any; + fit: any; + it: { + ( + title: string, + test: Global.EachTestFn, + timeout?: number, + ): any; + skip: any; + only: any; + concurrent: { + ( + title: string, + test: Global.EachTestFn, + timeout?: number, + ): any; + only: any; + skip: any; + }; + }; + test: { + ( + title: string, + test: Global.EachTestFn, + timeout?: number, + ): any; + skip: any; + only: any; + concurrent: { + ( + title: string, + test: Global.EachTestFn, + timeout?: number, + ): any; + only: any; + skip: any; + }; + }; + xdescribe: any; + xit: any; + xtest: any; +}; + +export {}; diff --git a/node_modules/jest-each/build/index.js b/node_modules/jest-each/build/index.js new file mode 100644 index 00000000..56de956d --- /dev/null +++ b/node_modules/jest-each/build/index.js @@ -0,0 +1,83 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +Object.defineProperty(exports, 'bind', { + enumerable: true, + get: function () { + return _bind.default; + } +}); +exports.default = void 0; +var _bind = _interopRequireDefault(require('./bind')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +const install = (g, table, ...data) => { + const bindingWithArray = data.length === 0; + const bindingWithTemplate = Array.isArray(table) && !!table.raw; + if (!bindingWithArray && !bindingWithTemplate) { + throw new Error( + '`.each` must only be called with an Array or Tagged Template Literal.' + ); + } + const test = (title, test, timeout) => + (0, _bind.default)(g.test)(table, ...data)(title, test, timeout); + test.skip = (0, _bind.default)(g.test.skip)(table, ...data); + test.only = (0, _bind.default)(g.test.only)(table, ...data); + const testConcurrent = (title, test, timeout) => + (0, _bind.default)(g.test.concurrent)(table, ...data)(title, test, timeout); + test.concurrent = testConcurrent; + testConcurrent.only = (0, _bind.default)(g.test.concurrent.only)( + table, + ...data + ); + testConcurrent.skip = (0, _bind.default)(g.test.concurrent.skip)( + table, + ...data + ); + const it = (title, test, timeout) => + (0, _bind.default)(g.it)(table, ...data)(title, test, timeout); + it.skip = (0, _bind.default)(g.it.skip)(table, ...data); + it.only = (0, _bind.default)(g.it.only)(table, ...data); + it.concurrent = testConcurrent; + const xit = (0, _bind.default)(g.xit)(table, ...data); + const fit = (0, _bind.default)(g.fit)(table, ...data); + const xtest = (0, _bind.default)(g.xtest)(table, ...data); + const describe = (title, suite, timeout) => + (0, _bind.default)(g.describe, false)(table, ...data)( + title, + suite, + timeout + ); + describe.skip = (0, _bind.default)(g.describe.skip, false)(table, ...data); + describe.only = (0, _bind.default)(g.describe.only, false)(table, ...data); + const fdescribe = (0, _bind.default)(g.fdescribe, false)(table, ...data); + const xdescribe = (0, _bind.default)(g.xdescribe, false)(table, ...data); + return { + describe, + fdescribe, + fit, + it, + test, + xdescribe, + xit, + xtest + }; +}; +const each = (table, ...data) => install(globalThis, table, ...data); +each.withGlobal = + g => + (table, ...data) => + install(g, table, ...data); +var _default = each; +exports.default = _default; diff --git a/node_modules/jest-each/build/table/array.js b/node_modules/jest-each/build/table/array.js new file mode 100644 index 00000000..a0251565 --- /dev/null +++ b/node_modules/jest-each/build/table/array.js @@ -0,0 +1,130 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = array; +function util() { + const data = _interopRequireWildcard(require('util')); + util = function () { + return data; + }; + return data; +} +function _prettyFormat() { + const data = require('pretty-format'); + _prettyFormat = function () { + return data; + }; + return data; +} +var _interpolation = require('./interpolation'); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +const SUPPORTED_PLACEHOLDERS = /%[sdifjoOp#]/g; +const PRETTY_PLACEHOLDER = '%p'; +const INDEX_PLACEHOLDER = '%#'; +const PLACEHOLDER_PREFIX = '%'; +const ESCAPED_PLACEHOLDER_PREFIX = /%%/g; +const JEST_EACH_PLACEHOLDER_ESCAPE = '@@__JEST_EACH_PLACEHOLDER_ESCAPE__@@'; +function array(title, arrayTable) { + if (isTemplates(title, arrayTable)) { + return arrayTable.map((template, index) => ({ + arguments: [template], + title: (0, _interpolation.interpolateVariables)( + title, + template, + index + ).replace(ESCAPED_PLACEHOLDER_PREFIX, PLACEHOLDER_PREFIX) + })); + } + return normaliseTable(arrayTable).map((row, index) => ({ + arguments: row, + title: formatTitle(title, row, index) + })); +} +const isTemplates = (title, arrayTable) => + !SUPPORTED_PLACEHOLDERS.test(interpolateEscapedPlaceholders(title)) && + !isTable(arrayTable) && + arrayTable.every(col => col != null && typeof col === 'object'); +const normaliseTable = table => (isTable(table) ? table : table.map(colToRow)); +const isTable = table => table.every(Array.isArray); +const colToRow = col => [col]; +const formatTitle = (title, row, rowIndex) => + row + .reduce((formattedTitle, value) => { + const [placeholder] = getMatchingPlaceholders(formattedTitle); + const normalisedValue = normalisePlaceholderValue(value); + if (!placeholder) return formattedTitle; + if (placeholder === PRETTY_PLACEHOLDER) + return interpolatePrettyPlaceholder(formattedTitle, normalisedValue); + return util().format(formattedTitle, normalisedValue); + }, interpolateTitleIndex(interpolateEscapedPlaceholders(title), rowIndex)) + .replace(new RegExp(JEST_EACH_PLACEHOLDER_ESCAPE, 'g'), PLACEHOLDER_PREFIX); +const normalisePlaceholderValue = value => + typeof value === 'string' + ? value.replace( + new RegExp(PLACEHOLDER_PREFIX, 'g'), + JEST_EACH_PLACEHOLDER_ESCAPE + ) + : value; +const getMatchingPlaceholders = title => + title.match(SUPPORTED_PLACEHOLDERS) || []; +const interpolateEscapedPlaceholders = title => + title.replace(ESCAPED_PLACEHOLDER_PREFIX, JEST_EACH_PLACEHOLDER_ESCAPE); +const interpolateTitleIndex = (title, index) => + title.replace(INDEX_PLACEHOLDER, index.toString()); +const interpolatePrettyPlaceholder = (title, value) => + title.replace( + PRETTY_PLACEHOLDER, + (0, _prettyFormat().format)(value, { + maxDepth: 1, + min: true + }) + ); diff --git a/node_modules/jest-each/build/table/interpolation.js b/node_modules/jest-each/build/table/interpolation.js new file mode 100644 index 00000000..acf63070 --- /dev/null +++ b/node_modules/jest-each/build/table/interpolation.js @@ -0,0 +1,53 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.getPath = getPath; +exports.interpolateVariables = void 0; +function _jestGetType() { + const data = require('jest-get-type'); + _jestGetType = function () { + return data; + }; + return data; +} +function _prettyFormat() { + const data = require('pretty-format'); + _prettyFormat = function () { + return data; + }; + return data; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +const interpolateVariables = (title, template, index) => + title + .replace( + new RegExp(`\\$(${Object.keys(template).join('|')})[.\\w]*`, 'g'), + match => { + const keyPath = match.slice(1).split('.'); + const value = getPath(template, keyPath); + return (0, _jestGetType().isPrimitive)(value) + ? String(value) + : (0, _prettyFormat().format)(value, { + maxDepth: 1, + min: true + }); + } + ) + .replace('$#', `${index}`); + +/* eslint import/export: 0*/ +exports.interpolateVariables = interpolateVariables; +function getPath(template, [head, ...tail]) { + if (!head || !Object.prototype.hasOwnProperty.call(template, head)) + return template; + return getPath(template[head], tail); +} diff --git a/node_modules/jest-each/build/table/template.js b/node_modules/jest-each/build/table/template.js new file mode 100644 index 00000000..49b84ca2 --- /dev/null +++ b/node_modules/jest-each/build/table/template.js @@ -0,0 +1,44 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = template; +var _interpolation = require('./interpolation'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +function template(title, headings, row) { + const table = convertRowToTable(row, headings); + const templates = convertTableToTemplates(table, headings); + return templates.map((template, index) => ({ + arguments: [template], + title: (0, _interpolation.interpolateVariables)(title, template, index) + })); +} +const convertRowToTable = (row, headings) => + Array.from( + { + length: row.length / headings.length + }, + (_, index) => + row.slice( + index * headings.length, + index * headings.length + headings.length + ) + ); +const convertTableToTemplates = (table, headings) => + table.map(row => + row.reduce( + (acc, value, index) => + Object.assign(acc, { + [headings[index]]: value + }), + {} + ) + ); diff --git a/node_modules/jest-each/build/validation.js b/node_modules/jest-each/build/validation.js new file mode 100644 index 00000000..9f421dbc --- /dev/null +++ b/node_modules/jest-each/build/validation.js @@ -0,0 +1,107 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.validateTemplateTableArguments = + exports.validateArrayTable = + exports.extractValidTemplateHeadings = + void 0; +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +function _prettyFormat() { + const data = require('pretty-format'); + _prettyFormat = function () { + return data; + }; + return data; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +const EXPECTED_COLOR = _chalk().default.green; +const RECEIVED_COLOR = _chalk().default.red; +const validateArrayTable = table => { + if (!Array.isArray(table)) { + throw new Error( + '`.each` must be called with an Array or Tagged Template Literal.\n\n' + + `Instead was called with: ${(0, _prettyFormat().format)(table, { + maxDepth: 1, + min: true + })}\n` + ); + } + if (isTaggedTemplateLiteral(table)) { + if (isEmptyString(table[0])) { + throw new Error( + 'Error: `.each` called with an empty Tagged Template Literal of table data.\n' + ); + } + throw new Error( + 'Error: `.each` called with a Tagged Template Literal with no data, remember to interpolate with ${expression} syntax.\n' + ); + } + if (isEmptyTable(table)) { + throw new Error( + 'Error: `.each` called with an empty Array of table data.\n' + ); + } +}; +exports.validateArrayTable = validateArrayTable; +const isTaggedTemplateLiteral = array => array.raw !== undefined; +const isEmptyTable = table => table.length === 0; +const isEmptyString = str => typeof str === 'string' && str.trim() === ''; +const validateTemplateTableArguments = (headings, data) => { + const incompleteData = data.length % headings.length; + const missingData = headings.length - incompleteData; + if (incompleteData > 0) { + throw new Error( + `Not enough arguments supplied for given headings:\n${EXPECTED_COLOR( + headings.join(' | ') + )}\n\n` + + `Received:\n${RECEIVED_COLOR((0, _prettyFormat().format)(data))}\n\n` + + `Missing ${RECEIVED_COLOR(missingData.toString())} ${pluralize( + 'argument', + missingData + )}` + ); + } +}; +exports.validateTemplateTableArguments = validateTemplateTableArguments; +const pluralize = (word, count) => word + (count === 1 ? '' : 's'); +const START_OF_LINE = '^'; +const NEWLINE = '\\n'; +const HEADING = '\\s*[^\\s]+\\s*'; +const PIPE = '\\|'; +const REPEATABLE_HEADING = `(${PIPE}${HEADING})*`; +const HEADINGS_FORMAT = new RegExp( + START_OF_LINE + NEWLINE + HEADING + REPEATABLE_HEADING + NEWLINE, + 'g' +); +const extractValidTemplateHeadings = headings => { + const matches = headings.match(HEADINGS_FORMAT); + if (matches === null) { + throw new Error( + `Table headings do not conform to expected format:\n\n${EXPECTED_COLOR( + 'heading1 | headingN' + )}\n\nReceived:\n\n${RECEIVED_COLOR( + (0, _prettyFormat().format)(headings) + )}` + ); + } + return matches[0]; +}; +exports.extractValidTemplateHeadings = extractValidTemplateHeadings; diff --git a/node_modules/jest-each/package.json b/node_modules/jest-each/package.json new file mode 100644 index 00000000..a271f71b --- /dev/null +++ b/node_modules/jest-each/package.json @@ -0,0 +1,41 @@ +{ + "name": "jest-each", + "version": "29.7.0", + "description": "Parameterised tests for Jest", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-each" + }, + "keywords": [ + "jest", + "parameterised", + "test", + "each" + ], + "author": "Matt Phillips (mattphillips)", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-environment-node/LICENSE b/node_modules/jest-environment-node/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-environment-node/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-environment-node/build/index.d.ts b/node_modules/jest-environment-node/build/index.d.ts new file mode 100644 index 00000000..11bf4d10 --- /dev/null +++ b/node_modules/jest-environment-node/build/index.d.ts @@ -0,0 +1,42 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/// + +import {Context} from 'vm'; +import type {EnvironmentContext} from '@jest/environment'; +import type {Global} from '@jest/types'; +import type {JestEnvironment} from '@jest/environment'; +import type {JestEnvironmentConfig} from '@jest/environment'; +import {LegacyFakeTimers} from '@jest/fake-timers'; +import {ModernFakeTimers} from '@jest/fake-timers'; +import {ModuleMocker} from 'jest-mock'; + +declare class NodeEnvironment implements JestEnvironment { + context: Context | null; + fakeTimers: LegacyFakeTimers | null; + fakeTimersModern: ModernFakeTimers | null; + global: Global.Global; + moduleMocker: ModuleMocker | null; + customExportConditions: string[]; + private _configuredExportConditions?; + constructor(config: JestEnvironmentConfig, _context: EnvironmentContext); + setup(): Promise; + teardown(): Promise; + exportConditions(): Array; + getVmContext(): Context | null; +} +export default NodeEnvironment; + +export declare const TestEnvironment: typeof NodeEnvironment; + +declare type Timer = { + id: number; + ref: () => Timer; + unref: () => Timer; +}; + +export {}; diff --git a/node_modules/jest-environment-node/build/index.js b/node_modules/jest-environment-node/build/index.js new file mode 100644 index 00000000..5be7c088 --- /dev/null +++ b/node_modules/jest-environment-node/build/index.js @@ -0,0 +1,212 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = exports.TestEnvironment = void 0; +function _vm() { + const data = require('vm'); + _vm = function () { + return data; + }; + return data; +} +function _fakeTimers() { + const data = require('@jest/fake-timers'); + _fakeTimers = function () { + return data; + }; + return data; +} +function _jestMock() { + const data = require('jest-mock'); + _jestMock = function () { + return data; + }; + return data; +} +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// some globals we do not want, either because deprecated or we set it ourselves +const denyList = new Set([ + 'GLOBAL', + 'root', + 'global', + 'globalThis', + 'Buffer', + 'ArrayBuffer', + 'Uint8Array', + // if env is loaded within a jest test + 'jest-symbol-do-not-touch' +]); +const nodeGlobals = new Map( + Object.getOwnPropertyNames(globalThis) + .filter(global => !denyList.has(global)) + .map(nodeGlobalsKey => { + const descriptor = Object.getOwnPropertyDescriptor( + globalThis, + nodeGlobalsKey + ); + if (!descriptor) { + throw new Error( + `No property descriptor for ${nodeGlobalsKey}, this is a bug in Jest.` + ); + } + return [nodeGlobalsKey, descriptor]; + }) +); +function isString(value) { + return typeof value === 'string'; +} +class NodeEnvironment { + context; + fakeTimers; + fakeTimersModern; + global; + moduleMocker; + customExportConditions = ['node', 'node-addons']; + _configuredExportConditions; + + // while `context` is unused, it should always be passed + constructor(config, _context) { + const {projectConfig} = config; + this.context = (0, _vm().createContext)(); + const global = (0, _vm().runInContext)( + 'this', + Object.assign(this.context, projectConfig.testEnvironmentOptions) + ); + this.global = global; + const contextGlobals = new Set(Object.getOwnPropertyNames(global)); + for (const [nodeGlobalsKey, descriptor] of nodeGlobals) { + if (!contextGlobals.has(nodeGlobalsKey)) { + if (descriptor.configurable) { + Object.defineProperty(global, nodeGlobalsKey, { + configurable: true, + enumerable: descriptor.enumerable, + get() { + const value = globalThis[nodeGlobalsKey]; + + // override lazy getter + Object.defineProperty(global, nodeGlobalsKey, { + configurable: true, + enumerable: descriptor.enumerable, + value, + writable: true + }); + return value; + }, + set(value) { + // override lazy getter + Object.defineProperty(global, nodeGlobalsKey, { + configurable: true, + enumerable: descriptor.enumerable, + value, + writable: true + }); + } + }); + } else if ('value' in descriptor) { + Object.defineProperty(global, nodeGlobalsKey, { + configurable: false, + enumerable: descriptor.enumerable, + value: descriptor.value, + writable: descriptor.writable + }); + } else { + Object.defineProperty(global, nodeGlobalsKey, { + configurable: false, + enumerable: descriptor.enumerable, + get: descriptor.get, + set: descriptor.set + }); + } + } + } + + // @ts-expect-error - Buffer and gc is "missing" + global.global = global; + global.Buffer = Buffer; + global.ArrayBuffer = ArrayBuffer; + // TextEncoder (global or via 'util') references a Uint8Array constructor + // different than the global one used by users in tests. This makes sure the + // same constructor is referenced by both. + global.Uint8Array = Uint8Array; + (0, _jestUtil().installCommonGlobals)(global, projectConfig.globals); + + // Node's error-message stack size is limited at 10, but it's pretty useful + // to see more than that when a test fails. + global.Error.stackTraceLimit = 100; + if ('customExportConditions' in projectConfig.testEnvironmentOptions) { + const {customExportConditions} = projectConfig.testEnvironmentOptions; + if ( + Array.isArray(customExportConditions) && + customExportConditions.every(isString) + ) { + this._configuredExportConditions = customExportConditions; + } else { + throw new Error( + 'Custom export conditions specified but they are not an array of strings' + ); + } + } + this.moduleMocker = new (_jestMock().ModuleMocker)(global); + const timerIdToRef = id => ({ + id, + ref() { + return this; + }, + unref() { + return this; + } + }); + const timerRefToId = timer => timer?.id; + this.fakeTimers = new (_fakeTimers().LegacyFakeTimers)({ + config: projectConfig, + global, + moduleMocker: this.moduleMocker, + timerConfig: { + idToRef: timerIdToRef, + refToId: timerRefToId + } + }); + this.fakeTimersModern = new (_fakeTimers().ModernFakeTimers)({ + config: projectConfig, + global + }); + } + + // eslint-disable-next-line @typescript-eslint/no-empty-function + async setup() {} + async teardown() { + if (this.fakeTimers) { + this.fakeTimers.dispose(); + } + if (this.fakeTimersModern) { + this.fakeTimersModern.dispose(); + } + this.context = null; + this.fakeTimers = null; + this.fakeTimersModern = null; + } + exportConditions() { + return this._configuredExportConditions ?? this.customExportConditions; + } + getVmContext() { + return this.context; + } +} +exports.default = NodeEnvironment; +const TestEnvironment = NodeEnvironment; +exports.TestEnvironment = TestEnvironment; diff --git a/node_modules/jest-environment-node/package.json b/node_modules/jest-environment-node/package.json new file mode 100644 index 00000000..c1c7d197 --- /dev/null +++ b/node_modules/jest-environment-node/package.json @@ -0,0 +1,37 @@ +{ + "name": "jest-environment-node", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-environment-node" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "devDependencies": { + "@jest/test-utils": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-get-type/LICENSE b/node_modules/jest-get-type/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-get-type/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-get-type/build/index.d.ts b/node_modules/jest-get-type/build/index.d.ts new file mode 100644 index 00000000..20931392 --- /dev/null +++ b/node_modules/jest-get-type/build/index.d.ts @@ -0,0 +1,27 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +export declare function getType(value: unknown): ValueType; + +export declare const isPrimitive: (value: unknown) => boolean; + +declare type ValueType = + | 'array' + | 'bigint' + | 'boolean' + | 'function' + | 'null' + | 'number' + | 'object' + | 'regexp' + | 'map' + | 'set' + | 'date' + | 'string' + | 'symbol' + | 'undefined'; + +export {}; diff --git a/node_modules/jest-get-type/build/index.js b/node_modules/jest-get-type/build/index.js new file mode 100644 index 00000000..3368978e --- /dev/null +++ b/node_modules/jest-get-type/build/index.js @@ -0,0 +1,53 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.getType = getType; +exports.isPrimitive = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// get the type of a value with handling the edge cases like `typeof []` +// and `typeof null` +function getType(value) { + if (value === undefined) { + return 'undefined'; + } else if (value === null) { + return 'null'; + } else if (Array.isArray(value)) { + return 'array'; + } else if (typeof value === 'boolean') { + return 'boolean'; + } else if (typeof value === 'function') { + return 'function'; + } else if (typeof value === 'number') { + return 'number'; + } else if (typeof value === 'string') { + return 'string'; + } else if (typeof value === 'bigint') { + return 'bigint'; + } else if (typeof value === 'object') { + if (value != null) { + if (value.constructor === RegExp) { + return 'regexp'; + } else if (value.constructor === Map) { + return 'map'; + } else if (value.constructor === Set) { + return 'set'; + } else if (value.constructor === Date) { + return 'date'; + } + } + return 'object'; + } else if (typeof value === 'symbol') { + return 'symbol'; + } + throw new Error(`value of unknown type: ${value}`); +} +const isPrimitive = value => Object(value) !== value; +exports.isPrimitive = isPrimitive; diff --git a/node_modules/jest-get-type/package.json b/node_modules/jest-get-type/package.json new file mode 100644 index 00000000..ffd8a152 --- /dev/null +++ b/node_modules/jest-get-type/package.json @@ -0,0 +1,27 @@ +{ + "name": "jest-get-type", + "description": "A utility function to get the type of a value", + "version": "29.6.3", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-get-type" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "fb7d95c8af6e0d65a8b65348433d8a0ea0725b5b" +} diff --git a/node_modules/jest-haste-map/LICENSE b/node_modules/jest-haste-map/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-haste-map/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-haste-map/build/HasteFS.js b/node_modules/jest-haste-map/build/HasteFS.js new file mode 100644 index 00000000..09384ba5 --- /dev/null +++ b/node_modules/jest-haste-map/build/HasteFS.js @@ -0,0 +1,139 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +var _constants = _interopRequireDefault(require('./constants')); +var fastPath = _interopRequireWildcard(require('./lib/fast_path')); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +class HasteFS { + _rootDir; + _files; + constructor({rootDir, files}) { + this._rootDir = rootDir; + this._files = files; + } + getModuleName(file) { + const fileMetadata = this._getFileData(file); + return (fileMetadata && fileMetadata[_constants.default.ID]) || null; + } + getSize(file) { + const fileMetadata = this._getFileData(file); + return (fileMetadata && fileMetadata[_constants.default.SIZE]) || null; + } + getDependencies(file) { + const fileMetadata = this._getFileData(file); + if (fileMetadata) { + return fileMetadata[_constants.default.DEPENDENCIES] + ? fileMetadata[_constants.default.DEPENDENCIES].split( + _constants.default.DEPENDENCY_DELIM + ) + : []; + } else { + return null; + } + } + getSha1(file) { + const fileMetadata = this._getFileData(file); + return (fileMetadata && fileMetadata[_constants.default.SHA1]) || null; + } + exists(file) { + return this._getFileData(file) != null; + } + getAllFiles() { + return Array.from(this.getAbsoluteFileIterator()); + } + getFileIterator() { + return this._files.keys(); + } + *getAbsoluteFileIterator() { + for (const file of this.getFileIterator()) { + yield fastPath.resolve(this._rootDir, file); + } + } + matchFiles(pattern) { + if (!(pattern instanceof RegExp)) { + pattern = new RegExp(pattern); + } + const files = []; + for (const file of this.getAbsoluteFileIterator()) { + if (pattern.test(file)) { + files.push(file); + } + } + return files; + } + matchFilesWithGlob(globs, root) { + const files = new Set(); + const matcher = (0, _jestUtil().globsToMatcher)(globs); + for (const file of this.getAbsoluteFileIterator()) { + const filePath = root ? fastPath.relative(root, file) : file; + if (matcher((0, _jestUtil().replacePathSepForGlob)(filePath))) { + files.add(file); + } + } + return files; + } + _getFileData(file) { + const relativePath = fastPath.relative(this._rootDir, file); + return this._files.get(relativePath); + } +} +exports.default = HasteFS; diff --git a/node_modules/jest-haste-map/build/ModuleMap.js b/node_modules/jest-haste-map/build/ModuleMap.js new file mode 100644 index 00000000..5ddd1fd8 --- /dev/null +++ b/node_modules/jest-haste-map/build/ModuleMap.js @@ -0,0 +1,249 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +var _constants = _interopRequireDefault(require('./constants')); +var fastPath = _interopRequireWildcard(require('./lib/fast_path')); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const EMPTY_OBJ = {}; +const EMPTY_MAP = new Map(); +class ModuleMap { + static DuplicateHasteCandidatesError; + _raw; + json; + static mapToArrayRecursive(map) { + let arr = Array.from(map); + if (arr[0] && arr[0][1] instanceof Map) { + arr = arr.map(el => [el[0], this.mapToArrayRecursive(el[1])]); + } + return arr; + } + static mapFromArrayRecursive(arr) { + if (arr[0] && Array.isArray(arr[1])) { + arr = arr.map(el => [el[0], this.mapFromArrayRecursive(el[1])]); + } + return new Map(arr); + } + constructor(raw) { + this._raw = raw; + } + getModule(name, platform, supportsNativePlatform, type) { + if (type == null) { + type = _constants.default.MODULE; + } + const module = this._getModuleMetadata( + name, + platform, + !!supportsNativePlatform + ); + if (module && module[_constants.default.TYPE] === type) { + const modulePath = module[_constants.default.PATH]; + return modulePath && fastPath.resolve(this._raw.rootDir, modulePath); + } + return null; + } + getPackage(name, platform, _supportsNativePlatform) { + return this.getModule(name, platform, null, _constants.default.PACKAGE); + } + getMockModule(name) { + const mockPath = + this._raw.mocks.get(name) || this._raw.mocks.get(`${name}/index`); + return mockPath && fastPath.resolve(this._raw.rootDir, mockPath); + } + getRawModuleMap() { + return { + duplicates: this._raw.duplicates, + map: this._raw.map, + mocks: this._raw.mocks, + rootDir: this._raw.rootDir + }; + } + toJSON() { + if (!this.json) { + this.json = { + duplicates: ModuleMap.mapToArrayRecursive(this._raw.duplicates), + map: Array.from(this._raw.map), + mocks: Array.from(this._raw.mocks), + rootDir: this._raw.rootDir + }; + } + return this.json; + } + static fromJSON(serializableModuleMap) { + return new ModuleMap({ + duplicates: ModuleMap.mapFromArrayRecursive( + serializableModuleMap.duplicates + ), + map: new Map(serializableModuleMap.map), + mocks: new Map(serializableModuleMap.mocks), + rootDir: serializableModuleMap.rootDir + }); + } + + /** + * When looking up a module's data, we walk through each eligible platform for + * the query. For each platform, we want to check if there are known + * duplicates for that name+platform pair. The duplication logic normally + * removes elements from the `map` object, but we want to check upfront to be + * extra sure. If metadata exists both in the `duplicates` object and the + * `map`, this would be a bug. + */ + _getModuleMetadata(name, platform, supportsNativePlatform) { + const map = this._raw.map.get(name) || EMPTY_OBJ; + const dupMap = this._raw.duplicates.get(name) || EMPTY_MAP; + if (platform != null) { + this._assertNoDuplicates( + name, + platform, + supportsNativePlatform, + dupMap.get(platform) + ); + if (map[platform] != null) { + return map[platform]; + } + } + if (supportsNativePlatform) { + this._assertNoDuplicates( + name, + _constants.default.NATIVE_PLATFORM, + supportsNativePlatform, + dupMap.get(_constants.default.NATIVE_PLATFORM) + ); + if (map[_constants.default.NATIVE_PLATFORM]) { + return map[_constants.default.NATIVE_PLATFORM]; + } + } + this._assertNoDuplicates( + name, + _constants.default.GENERIC_PLATFORM, + supportsNativePlatform, + dupMap.get(_constants.default.GENERIC_PLATFORM) + ); + if (map[_constants.default.GENERIC_PLATFORM]) { + return map[_constants.default.GENERIC_PLATFORM]; + } + return null; + } + _assertNoDuplicates(name, platform, supportsNativePlatform, relativePathSet) { + if (relativePathSet == null) { + return; + } + // Force flow refinement + const previousSet = relativePathSet; + const duplicates = new Map(); + for (const [relativePath, type] of previousSet) { + const duplicatePath = fastPath.resolve(this._raw.rootDir, relativePath); + duplicates.set(duplicatePath, type); + } + throw new DuplicateHasteCandidatesError( + name, + platform, + supportsNativePlatform, + duplicates + ); + } + static create(rootDir) { + return new ModuleMap({ + duplicates: new Map(), + map: new Map(), + mocks: new Map(), + rootDir + }); + } +} +exports.default = ModuleMap; +class DuplicateHasteCandidatesError extends Error { + hasteName; + platform; + supportsNativePlatform; + duplicatesSet; + constructor(name, platform, supportsNativePlatform, duplicatesSet) { + const platformMessage = getPlatformMessage(platform); + super( + `The name \`${name}\` was looked up in the Haste module map. It ` + + 'cannot be resolved, because there exists several different ' + + 'files, or packages, that provide a module for ' + + `that particular name and platform. ${platformMessage} You must ` + + `delete or exclude files until there remains only one of these:\n\n${Array.from( + duplicatesSet + ) + .map( + ([dupFilePath, dupFileType]) => + ` * \`${dupFilePath}\` (${getTypeMessage(dupFileType)})\n` + ) + .sort() + .join('')}` + ); + this.hasteName = name; + this.platform = platform; + this.supportsNativePlatform = supportsNativePlatform; + this.duplicatesSet = duplicatesSet; + } +} +function getPlatformMessage(platform) { + if (platform === _constants.default.GENERIC_PLATFORM) { + return 'The platform is generic (no extension).'; + } + return `The platform extension is \`${platform}\`.`; +} +function getTypeMessage(type) { + switch (type) { + case _constants.default.MODULE: + return 'module'; + case _constants.default.PACKAGE: + return 'package'; + } + return 'unknown'; +} +ModuleMap.DuplicateHasteCandidatesError = DuplicateHasteCandidatesError; diff --git a/node_modules/jest-haste-map/build/blacklist.js b/node_modules/jest-haste-map/build/blacklist.js new file mode 100644 index 00000000..ae90b1a7 --- /dev/null +++ b/node_modules/jest-haste-map/build/blacklist.js @@ -0,0 +1,64 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// This list is compiled after the MDN list of the most common MIME types (see +// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/ +// Complete_list_of_MIME_types). +// +// Only MIME types starting with "image/", "video/", "audio/" and "font/" are +// reflected in the list. Adding "application/" is too risky since some text +// file formats (like ".js" and ".json") have an "application/" MIME type. +// +// Feel free to add any extensions that cannot be a Haste module. + +const extensions = new Set([ + // JSONs are never haste modules, except for "package.json", which is handled. + '.json', + // Image extensions. + '.bmp', + '.gif', + '.ico', + '.jpeg', + '.jpg', + '.png', + '.svg', + '.tiff', + '.tif', + '.webp', + // Video extensions. + '.avi', + '.mp4', + '.mpeg', + '.mpg', + '.ogv', + '.webm', + '.3gp', + '.3g2', + // Audio extensions. + '.aac', + '.midi', + '.mid', + '.mp3', + '.oga', + '.wav', + '.3gp', + '.3g2', + // Font extensions. + '.eot', + '.otf', + '.ttf', + '.woff', + '.woff2' +]); +var _default = extensions; +exports.default = _default; diff --git a/node_modules/jest-haste-map/build/constants.js b/node_modules/jest-haste-map/build/constants.js new file mode 100644 index 00000000..1b8804ec --- /dev/null +++ b/node_modules/jest-haste-map/build/constants.js @@ -0,0 +1,46 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* + * This file exports a set of constants that are used for Jest's haste map + * serialization. On very large repositories, the haste map cache becomes very + * large to the point where it is the largest overhead in starting up Jest. + * + * This constant key map allows to keep the map smaller without having to build + * a custom serialization library. + */ + +/* eslint-disable sort-keys */ +const constants = { + /* dependency serialization */ + DEPENDENCY_DELIM: '\0', + /* file map attributes */ + ID: 0, + MTIME: 1, + SIZE: 2, + VISITED: 3, + DEPENDENCIES: 4, + SHA1: 5, + /* module map attributes */ + PATH: 0, + TYPE: 1, + /* module types */ + MODULE: 0, + PACKAGE: 1, + /* platforms */ + GENERIC_PLATFORM: 'g', + NATIVE_PLATFORM: 'native' +}; +/* eslint-enable */ +var _default = constants; +exports.default = _default; diff --git a/node_modules/jest-haste-map/build/crawlers/node.js b/node_modules/jest-haste-map/build/crawlers/node.js new file mode 100644 index 00000000..eb90b4e1 --- /dev/null +++ b/node_modules/jest-haste-map/build/crawlers/node.js @@ -0,0 +1,269 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.nodeCrawl = nodeCrawl; +function _child_process() { + const data = require('child_process'); + _child_process = function () { + return data; + }; + return data; +} +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function fs() { + const data = _interopRequireWildcard(require('graceful-fs')); + fs = function () { + return data; + }; + return data; +} +var _constants = _interopRequireDefault(require('../constants')); +var fastPath = _interopRequireWildcard(require('../lib/fast_path')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +async function hasNativeFindSupport(forceNodeFilesystemAPI) { + if (forceNodeFilesystemAPI) { + return false; + } + try { + return await new Promise(resolve => { + // Check the find binary supports the non-POSIX -iname parameter wrapped in parens. + const args = [ + '.', + '-type', + 'f', + '(', + '-iname', + '*.ts', + '-o', + '-iname', + '*.js', + ')' + ]; + const child = (0, _child_process().spawn)('find', args, { + cwd: __dirname + }); + child.on('error', () => { + resolve(false); + }); + child.on('exit', code => { + resolve(code === 0); + }); + }); + } catch { + return false; + } +} +function find(roots, extensions, ignore, enableSymlinks, callback) { + const result = []; + let activeCalls = 0; + function search(directory) { + activeCalls++; + fs().readdir( + directory, + { + withFileTypes: true + }, + (err, entries) => { + activeCalls--; + if (err) { + if (activeCalls === 0) { + callback(result); + } + return; + } + entries.forEach(entry => { + const file = path().join(directory, entry.name); + if (ignore(file)) { + return; + } + if (entry.isSymbolicLink()) { + return; + } + if (entry.isDirectory()) { + search(file); + return; + } + activeCalls++; + const stat = enableSymlinks ? fs().stat : fs().lstat; + stat(file, (err, stat) => { + activeCalls--; + + // This logic is unnecessary for node > v10.10, but leaving it in + // since we need it for backwards-compatibility still. + if (!err && stat && !stat.isSymbolicLink()) { + if (stat.isDirectory()) { + search(file); + } else { + const ext = path().extname(file).substr(1); + if (extensions.indexOf(ext) !== -1) { + result.push([file, stat.mtime.getTime(), stat.size]); + } + } + } + if (activeCalls === 0) { + callback(result); + } + }); + }); + if (activeCalls === 0) { + callback(result); + } + } + ); + } + if (roots.length > 0) { + roots.forEach(search); + } else { + callback(result); + } +} +function findNative(roots, extensions, ignore, enableSymlinks, callback) { + const args = Array.from(roots); + if (enableSymlinks) { + args.push('(', '-type', 'f', '-o', '-type', 'l', ')'); + } else { + args.push('-type', 'f'); + } + if (extensions.length) { + args.push('('); + } + extensions.forEach((ext, index) => { + if (index) { + args.push('-o'); + } + args.push('-iname'); + args.push(`*.${ext}`); + }); + if (extensions.length) { + args.push(')'); + } + const child = (0, _child_process().spawn)('find', args); + let stdout = ''; + if (child.stdout === null) { + throw new Error( + 'stdout is null - this should never happen. Please open up an issue at https://github.com/jestjs/jest' + ); + } + child.stdout.setEncoding('utf-8'); + child.stdout.on('data', data => (stdout += data)); + child.stdout.on('close', () => { + const lines = stdout + .trim() + .split('\n') + .filter(x => !ignore(x)); + const result = []; + let count = lines.length; + if (!count) { + callback([]); + } else { + lines.forEach(path => { + fs().stat(path, (err, stat) => { + // Filter out symlinks that describe directories + if (!err && stat && !stat.isDirectory()) { + result.push([path, stat.mtime.getTime(), stat.size]); + } + if (--count === 0) { + callback(result); + } + }); + }); + } + }); +} +async function nodeCrawl(options) { + const { + data, + extensions, + forceNodeFilesystemAPI, + ignore, + rootDir, + enableSymlinks, + roots + } = options; + const useNativeFind = await hasNativeFindSupport(forceNodeFilesystemAPI); + return new Promise(resolve => { + const callback = list => { + const files = new Map(); + const removedFiles = new Map(data.files); + list.forEach(fileData => { + const [filePath, mtime, size] = fileData; + const relativeFilePath = fastPath.relative(rootDir, filePath); + const existingFile = data.files.get(relativeFilePath); + if (existingFile && existingFile[_constants.default.MTIME] === mtime) { + files.set(relativeFilePath, existingFile); + } else { + // See ../constants.js; SHA-1 will always be null and fulfilled later. + files.set(relativeFilePath, ['', mtime, size, 0, '', null]); + } + removedFiles.delete(relativeFilePath); + }); + data.files = files; + resolve({ + hasteMap: data, + removedFiles + }); + }; + if (useNativeFind) { + findNative(roots, extensions, ignore, enableSymlinks, callback); + } else { + find(roots, extensions, ignore, enableSymlinks, callback); + } + }); +} diff --git a/node_modules/jest-haste-map/build/crawlers/watchman.js b/node_modules/jest-haste-map/build/crawlers/watchman.js new file mode 100644 index 00000000..3b2fbfff --- /dev/null +++ b/node_modules/jest-haste-map/build/crawlers/watchman.js @@ -0,0 +1,339 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.watchmanCrawl = watchmanCrawl; +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _fbWatchman() { + const data = _interopRequireDefault(require('fb-watchman')); + _fbWatchman = function () { + return data; + }; + return data; +} +var _constants = _interopRequireDefault(require('../constants')); +var fastPath = _interopRequireWildcard(require('../lib/fast_path')); +var _normalizePathSep = _interopRequireDefault( + require('../lib/normalizePathSep') +); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const watchmanURL = 'https://facebook.github.io/watchman/docs/troubleshooting'; +function WatchmanError(error) { + error.message = + `Watchman error: ${error.message.trim()}. Make sure watchman ` + + `is running for this project. See ${watchmanURL}.`; + return error; +} + +/** + * Wrap watchman capabilityCheck method as a promise. + * + * @param client watchman client + * @param caps capabilities to verify + * @returns a promise resolving to a list of verified capabilities + */ +async function capabilityCheck(client, caps) { + return new Promise((resolve, reject) => { + client.capabilityCheck( + // @ts-expect-error: incorrectly typed + caps, + (error, response) => { + if (error) { + reject(error); + } else { + resolve(response); + } + } + ); + }); +} +async function watchmanCrawl(options) { + const fields = ['name', 'exists', 'mtime_ms', 'size']; + const {data, extensions, ignore, rootDir, roots} = options; + const defaultWatchExpression = ['allof', ['type', 'f']]; + const clocks = data.clocks; + const client = new (_fbWatchman().default.Client)(); + + // https://facebook.github.io/watchman/docs/capabilities.html + // Check adds about ~28ms + const capabilities = await capabilityCheck(client, { + // If a required capability is missing then an error will be thrown, + // we don't need this assertion, so using optional instead. + optional: ['suffix-set'] + }); + if (capabilities?.capabilities['suffix-set']) { + // If available, use the optimized `suffix-set` operation: + // https://facebook.github.io/watchman/docs/expr/suffix.html#suffix-set + defaultWatchExpression.push(['suffix', extensions]); + } else { + // Otherwise use the older and less optimal suffix tuple array + defaultWatchExpression.push([ + 'anyof', + ...extensions.map(extension => ['suffix', extension]) + ]); + } + let clientError; + client.on('error', error => (clientError = WatchmanError(error))); + const cmd = (...args) => + new Promise((resolve, reject) => + client.command(args, (error, result) => + error ? reject(WatchmanError(error)) : resolve(result) + ) + ); + if (options.computeSha1) { + const {capabilities} = await cmd('list-capabilities'); + if (capabilities.indexOf('field-content.sha1hex') !== -1) { + fields.push('content.sha1hex'); + } + } + async function getWatchmanRoots(roots) { + const watchmanRoots = new Map(); + await Promise.all( + roots.map(async root => { + const response = await cmd('watch-project', root); + const existing = watchmanRoots.get(response.watch); + // A root can only be filtered if it was never seen with a + // relative_path before. + const canBeFiltered = !existing || existing.length > 0; + if (canBeFiltered) { + if (response.relative_path) { + watchmanRoots.set( + response.watch, + (existing || []).concat(response.relative_path) + ); + } else { + // Make the filter directories an empty array to signal that this + // root was already seen and needs to be watched for all files or + // directories. + watchmanRoots.set(response.watch, []); + } + } + }) + ); + return watchmanRoots; + } + async function queryWatchmanForDirs(rootProjectDirMappings) { + const results = new Map(); + let isFresh = false; + await Promise.all( + Array.from(rootProjectDirMappings).map( + async ([root, directoryFilters]) => { + const expression = Array.from(defaultWatchExpression); + const glob = []; + if (directoryFilters.length > 0) { + expression.push([ + 'anyof', + ...directoryFilters.map(dir => ['dirname', dir]) + ]); + for (const directory of directoryFilters) { + for (const extension of extensions) { + glob.push(`${directory}/**/*.${extension}`); + } + } + } else { + for (const extension of extensions) { + glob.push(`**/*.${extension}`); + } + } + + // Jest is only going to store one type of clock; a string that + // represents a local clock. However, the Watchman crawler supports + // a second type of clock that can be written by automation outside of + // Jest, called an "scm query", which fetches changed files based on + // source control mergebases. The reason this is necessary is because + // local clocks are not portable across systems, but scm queries are. + // By using scm queries, we can create the haste map on a different + // system and import it, transforming the clock into a local clock. + const since = clocks.get(fastPath.relative(rootDir, root)); + const query = + since !== undefined + ? // Use the `since` generator if we have a clock available + { + expression, + fields, + since + } + : // Otherwise use the `glob` filter + { + expression, + fields, + glob, + glob_includedotfiles: true + }; + const response = await cmd('query', root, query); + if ('warning' in response) { + console.warn('watchman warning: ', response.warning); + } + + // When a source-control query is used, we ignore the "is fresh" + // response from Watchman because it will be true despite the query + // being incremental. + const isSourceControlQuery = + typeof since !== 'string' && + since?.scm?.['mergebase-with'] !== undefined; + if (!isSourceControlQuery) { + isFresh = isFresh || response.is_fresh_instance; + } + results.set(root, response); + } + ) + ); + return { + isFresh, + results + }; + } + let files = data.files; + let removedFiles = new Map(); + const changedFiles = new Map(); + let results; + let isFresh = false; + try { + const watchmanRoots = await getWatchmanRoots(roots); + const watchmanFileResults = await queryWatchmanForDirs(watchmanRoots); + + // Reset the file map if watchman was restarted and sends us a list of + // files. + if (watchmanFileResults.isFresh) { + files = new Map(); + removedFiles = new Map(data.files); + isFresh = true; + } + results = watchmanFileResults.results; + } finally { + client.end(); + } + if (clientError) { + throw clientError; + } + for (const [watchRoot, response] of results) { + const fsRoot = (0, _normalizePathSep.default)(watchRoot); + const relativeFsRoot = fastPath.relative(rootDir, fsRoot); + clocks.set( + relativeFsRoot, + // Ensure we persist only the local clock. + typeof response.clock === 'string' ? response.clock : response.clock.clock + ); + for (const fileData of response.files) { + const filePath = + fsRoot + path().sep + (0, _normalizePathSep.default)(fileData.name); + const relativeFilePath = fastPath.relative(rootDir, filePath); + const existingFileData = data.files.get(relativeFilePath); + + // If watchman is fresh, the removed files map starts with all files + // and we remove them as we verify they still exist. + if (isFresh && existingFileData && fileData.exists) { + removedFiles.delete(relativeFilePath); + } + if (!fileData.exists) { + // No need to act on files that do not exist and were not tracked. + if (existingFileData) { + files.delete(relativeFilePath); + + // If watchman is not fresh, we will know what specific files were + // deleted since we last ran and can track only those files. + if (!isFresh) { + removedFiles.set(relativeFilePath, existingFileData); + } + } + } else if (!ignore(filePath)) { + const mtime = + typeof fileData.mtime_ms === 'number' + ? fileData.mtime_ms + : fileData.mtime_ms.toNumber(); + const size = fileData.size; + let sha1hex = fileData['content.sha1hex']; + if (typeof sha1hex !== 'string' || sha1hex.length !== 40) { + sha1hex = undefined; + } + let nextData; + if ( + existingFileData && + existingFileData[_constants.default.MTIME] === mtime + ) { + nextData = existingFileData; + } else if ( + existingFileData && + sha1hex && + existingFileData[_constants.default.SHA1] === sha1hex + ) { + nextData = [ + existingFileData[0], + mtime, + existingFileData[2], + existingFileData[3], + existingFileData[4], + existingFileData[5] + ]; + } else { + // See ../constants.ts + nextData = ['', mtime, size, 0, '', sha1hex ?? null]; + } + files.set(relativeFilePath, nextData); + changedFiles.set(relativeFilePath, nextData); + } + } + } + data.files = files; + return { + changedFiles: isFresh ? undefined : changedFiles, + hasteMap: data, + removedFiles + }; +} diff --git a/node_modules/jest-haste-map/build/getMockName.js b/node_modules/jest-haste-map/build/getMockName.js new file mode 100644 index 00000000..445e0b27 --- /dev/null +++ b/node_modules/jest-haste-map/build/getMockName.js @@ -0,0 +1,69 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const MOCKS_PATTERN = `${path().sep}__mocks__${path().sep}`; +const getMockName = filePath => { + const mockPath = filePath.split(MOCKS_PATTERN)[1]; + return mockPath + .substring(0, mockPath.lastIndexOf(path().extname(mockPath))) + .replace(/\\/g, '/'); +}; +var _default = getMockName; +exports.default = _default; diff --git a/node_modules/jest-haste-map/build/index.d.ts b/node_modules/jest-haste-map/build/index.d.ts new file mode 100644 index 00000000..a0466fe8 --- /dev/null +++ b/node_modules/jest-haste-map/build/index.d.ts @@ -0,0 +1,242 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/// + +import type {Config} from '@jest/types'; +import type {Stats} from 'graceful-fs'; + +declare type ChangeEvent = { + eventsQueue: EventsQueue; + hasteFS: HasteFS; + moduleMap: ModuleMap_2; +}; + +export declare class DuplicateError extends Error { + mockPath1: string; + mockPath2: string; + constructor(mockPath1: string, mockPath2: string); +} + +declare class DuplicateHasteCandidatesError extends Error { + hasteName: string; + platform: string | null; + supportsNativePlatform: boolean; + duplicatesSet: DuplicatesSet; + constructor( + name: string, + platform: string, + supportsNativePlatform: boolean, + duplicatesSet: DuplicatesSet, + ); +} + +declare type DuplicatesIndex = Map>; + +declare type DuplicatesSet = Map; + +declare type EventsQueue = Array<{ + filePath: string; + stat: Stats | undefined; + type: string; +}>; + +declare type FileData = Map; + +declare type FileMetaData = [ + id: string, + mtime: number, + size: number, + visited: 0 | 1, + dependencies: string, + sha1: string | null | undefined, +]; + +declare class HasteFS implements IHasteFS { + private readonly _rootDir; + private readonly _files; + constructor({rootDir, files}: {rootDir: string; files: FileData}); + getModuleName(file: string): string | null; + getSize(file: string): number | null; + getDependencies(file: string): Array | null; + getSha1(file: string): string | null; + exists(file: string): boolean; + getAllFiles(): Array; + getFileIterator(): Iterable; + getAbsoluteFileIterator(): Iterable; + matchFiles(pattern: RegExp | string): Array; + matchFilesWithGlob(globs: Array, root: string | null): Set; + private _getFileData; +} + +declare type HasteMapStatic = { + getCacheFilePath( + tmpdir: string, + name: string, + ...extra: Array + ): string; + getModuleMapFromJSON(json: S): IModuleMap; +}; + +declare type HasteRegExp = RegExp | ((str: string) => boolean); + +declare type HType = { + ID: 0; + MTIME: 1; + SIZE: 2; + VISITED: 3; + DEPENDENCIES: 4; + SHA1: 5; + PATH: 0; + TYPE: 1; + MODULE: 0; + PACKAGE: 1; + GENERIC_PLATFORM: 'g'; + NATIVE_PLATFORM: 'native'; + DEPENDENCY_DELIM: '\0'; +}; + +declare type HTypeValue = HType[keyof HType]; + +export declare interface IHasteFS { + exists(path: string): boolean; + getAbsoluteFileIterator(): Iterable; + getAllFiles(): Array; + getDependencies(file: string): Array | null; + getSize(path: string): number | null; + matchFiles(pattern: RegExp | string): Array; + matchFilesWithGlob( + globs: ReadonlyArray, + root: string | null, + ): Set; +} + +export declare interface IHasteMap { + on(eventType: 'change', handler: (event: ChangeEvent) => void): void; + build(): Promise<{ + hasteFS: IHasteFS; + moduleMap: IModuleMap; + }>; +} + +declare type IJestHasteMap = HasteMapStatic & { + create(options: Options): Promise; + getStatic(config: Config.ProjectConfig): HasteMapStatic; +}; + +export declare interface IModuleMap { + getModule( + name: string, + platform?: string | null, + supportsNativePlatform?: boolean | null, + type?: HTypeValue | null, + ): string | null; + getPackage( + name: string, + platform: string | null | undefined, + _supportsNativePlatform: boolean | null, + ): string | null; + getMockModule(name: string): string | undefined; + getRawModuleMap(): RawModuleMap; + toJSON(): S; +} + +declare const JestHasteMap: IJestHasteMap; +export default JestHasteMap; + +declare type MockData = Map; + +export declare const ModuleMap: { + create: (rootPath: string) => IModuleMap; +}; + +declare class ModuleMap_2 implements IModuleMap { + static DuplicateHasteCandidatesError: typeof DuplicateHasteCandidatesError; + private readonly _raw; + private json; + private static mapToArrayRecursive; + private static mapFromArrayRecursive; + constructor(raw: RawModuleMap); + getModule( + name: string, + platform?: string | null, + supportsNativePlatform?: boolean | null, + type?: HTypeValue | null, + ): string | null; + getPackage( + name: string, + platform: string | null | undefined, + _supportsNativePlatform: boolean | null, + ): string | null; + getMockModule(name: string): string | undefined; + getRawModuleMap(): RawModuleMap; + toJSON(): SerializableModuleMap; + static fromJSON(serializableModuleMap: SerializableModuleMap): ModuleMap_2; + /** + * When looking up a module's data, we walk through each eligible platform for + * the query. For each platform, we want to check if there are known + * duplicates for that name+platform pair. The duplication logic normally + * removes elements from the `map` object, but we want to check upfront to be + * extra sure. If metadata exists both in the `duplicates` object and the + * `map`, this would be a bug. + */ + private _getModuleMetadata; + private _assertNoDuplicates; + static create(rootDir: string): ModuleMap_2; +} + +declare type ModuleMapData = Map; + +declare type ModuleMapItem = { + [platform: string]: ModuleMetaData; +}; + +declare type ModuleMetaData = [path: string, type: number]; + +declare type Options = { + cacheDirectory?: string; + computeDependencies?: boolean; + computeSha1?: boolean; + console?: Console; + dependencyExtractor?: string | null; + enableSymlinks?: boolean; + extensions: Array; + forceNodeFilesystemAPI?: boolean; + hasteImplModulePath?: string; + hasteMapModulePath?: string; + id: string; + ignorePattern?: HasteRegExp; + maxWorkers: number; + mocksPattern?: string; + platforms: Array; + resetCache?: boolean; + retainAllFiles: boolean; + rootDir: string; + roots: Array; + skipPackageJson?: boolean; + throwOnModuleCollision?: boolean; + useWatchman?: boolean; + watch?: boolean; + workerThreads?: boolean; +}; + +declare type RawModuleMap = { + rootDir: string; + duplicates: DuplicatesIndex; + map: ModuleMapData; + mocks: MockData; +}; + +export declare type SerializableModuleMap = { + duplicates: ReadonlyArray<[string, [string, [string, [string, number]]]]>; + map: ReadonlyArray<[string, ValueType]>; + mocks: ReadonlyArray<[string, ValueType]>; + rootDir: string; +}; + +declare type ValueType = T extends Map ? V : never; + +export {}; diff --git a/node_modules/jest-haste-map/build/index.js b/node_modules/jest-haste-map/build/index.js new file mode 100644 index 00000000..d8a3b5ec --- /dev/null +++ b/node_modules/jest-haste-map/build/index.js @@ -0,0 +1,1107 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = exports.ModuleMap = exports.DuplicateError = void 0; +function _crypto() { + const data = require('crypto'); + _crypto = function () { + return data; + }; + return data; +} +function _events() { + const data = require('events'); + _events = function () { + return data; + }; + return data; +} +function _os() { + const data = require('os'); + _os = function () { + return data; + }; + return data; +} +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _v() { + const data = require('v8'); + _v = function () { + return data; + }; + return data; +} +function _gracefulFs() { + const data = require('graceful-fs'); + _gracefulFs = function () { + return data; + }; + return data; +} +function _jestRegexUtil() { + const data = require('jest-regex-util'); + _jestRegexUtil = function () { + return data; + }; + return data; +} +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +function _jestWorker() { + const data = require('jest-worker'); + _jestWorker = function () { + return data; + }; + return data; +} +var _HasteFS = _interopRequireDefault(require('./HasteFS')); +var _ModuleMap = _interopRequireDefault(require('./ModuleMap')); +var _constants = _interopRequireDefault(require('./constants')); +var _node = require('./crawlers/node'); +var _watchman = require('./crawlers/watchman'); +var _getMockName = _interopRequireDefault(require('./getMockName')); +var fastPath = _interopRequireWildcard(require('./lib/fast_path')); +var _getPlatformExtension = _interopRequireDefault( + require('./lib/getPlatformExtension') +); +var _isWatchmanInstalled = _interopRequireDefault( + require('./lib/isWatchmanInstalled') +); +var _normalizePathSep = _interopRequireDefault( + require('./lib/normalizePathSep') +); +var _FSEventsWatcher = require('./watchers/FSEventsWatcher'); +var _NodeWatcher = _interopRequireDefault(require('./watchers/NodeWatcher')); +var _WatchmanWatcher = _interopRequireDefault( + require('./watchers/WatchmanWatcher') +); +var _worker = require('./worker'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// @ts-expect-error: not converted to TypeScript - it's a fork: https://github.com/jestjs/jest/pull/10919 + +// @ts-expect-error: not converted to TypeScript - it's a fork: https://github.com/jestjs/jest/pull/5387 + +// TypeScript doesn't like us importing from outside `rootDir`, but it doesn't +// understand `require`. +const {version: VERSION} = require('../package.json'); +const ModuleMap = _ModuleMap.default; +exports.ModuleMap = ModuleMap; +const CHANGE_INTERVAL = 30; +const MAX_WAIT_TIME = 240000; +const NODE_MODULES = `${path().sep}node_modules${path().sep}`; +const PACKAGE_JSON = `${path().sep}package.json`; +const VCS_DIRECTORIES = ['.git', '.hg', '.sl'] + .map(vcs => + (0, _jestRegexUtil().escapePathForRegex)(path().sep + vcs + path().sep) + ) + .join('|'); + +/** + * HasteMap is a JavaScript implementation of Facebook's haste module system. + * + * This implementation is inspired by https://github.com/facebook/node-haste + * and was built with for high-performance in large code repositories with + * hundreds of thousands of files. This implementation is scalable and provides + * predictable performance. + * + * Because the haste map creation and synchronization is critical to startup + * performance and most tasks are blocked by I/O this class makes heavy use of + * synchronous operations. It uses worker processes for parallelizing file + * access and metadata extraction. + * + * The data structures created by `jest-haste-map` can be used directly from the + * cache without further processing. The metadata objects in the `files` and + * `map` objects contain cross-references: a metadata object from one can look + * up the corresponding metadata object in the other map. Note that in most + * projects, the number of files will be greater than the number of haste + * modules one module can refer to many files based on platform extensions. + * + * type HasteMap = { + * clocks: WatchmanClocks, + * files: {[filepath: string]: FileMetaData}, + * map: {[id: string]: ModuleMapItem}, + * mocks: {[id: string]: string}, + * } + * + * // Watchman clocks are used for query synchronization and file system deltas. + * type WatchmanClocks = {[filepath: string]: string}; + * + * type FileMetaData = { + * id: ?string, // used to look up module metadata objects in `map`. + * mtime: number, // check for outdated files. + * size: number, // size of the file in bytes. + * visited: boolean, // whether the file has been parsed or not. + * dependencies: Array, // all relative dependencies of this file. + * sha1: ?string, // SHA-1 of the file, if requested via options. + * }; + * + * // Modules can be targeted to a specific platform based on the file name. + * // Example: platform.ios.js and Platform.android.js will both map to the same + * // `Platform` module. The platform should be specified during resolution. + * type ModuleMapItem = {[platform: string]: ModuleMetaData}; + * + * // + * type ModuleMetaData = { + * path: string, // the path to look up the file object in `files`. + * type: string, // the module type (either `package` or `module`). + * }; + * + * Note that the data structures described above are conceptual only. The actual + * implementation uses arrays and constant keys for metadata storage. Instead of + * `{id: 'flatMap', mtime: 3421, size: 42, visited: true, dependencies: []}` the real + * representation is similar to `['flatMap', 3421, 42, 1, []]` to save storage space + * and reduce parse and write time of a big JSON blob. + * + * The HasteMap is created as follows: + * 1. read data from the cache or create an empty structure. + * + * 2. crawl the file system. + * * empty cache: crawl the entire file system. + * * cache available: + * * if watchman is available: get file system delta changes. + * * if watchman is unavailable: crawl the entire file system. + * * build metadata objects for every file. This builds the `files` part of + * the `HasteMap`. + * + * 3. parse and extract metadata from changed files. + * * this is done in parallel over worker processes to improve performance. + * * the worst case is to parse all files. + * * the best case is no file system access and retrieving all data from + * the cache. + * * the average case is a small number of changed files. + * + * 4. serialize the new `HasteMap` in a cache file. + * Worker processes can directly access the cache through `HasteMap.read()`. + * + */ +class HasteMap extends _events().EventEmitter { + _buildPromise = null; + _cachePath = ''; + _changeInterval; + _console; + _isWatchmanInstalledPromise = null; + _options; + _watchers = []; + _worker = null; + static getStatic(config) { + if (config.haste.hasteMapModulePath) { + return require(config.haste.hasteMapModulePath); + } + return HasteMap; + } + static async create(options) { + if (options.hasteMapModulePath) { + const CustomHasteMap = require(options.hasteMapModulePath); + return new CustomHasteMap(options); + } + const hasteMap = new HasteMap(options); + await hasteMap.setupCachePath(options); + return hasteMap; + } + constructor(options) { + super(); + this._options = { + cacheDirectory: options.cacheDirectory || (0, _os().tmpdir)(), + computeDependencies: options.computeDependencies ?? true, + computeSha1: options.computeSha1 || false, + dependencyExtractor: options.dependencyExtractor || null, + enableSymlinks: options.enableSymlinks || false, + extensions: options.extensions, + forceNodeFilesystemAPI: !!options.forceNodeFilesystemAPI, + hasteImplModulePath: options.hasteImplModulePath, + id: options.id, + maxWorkers: options.maxWorkers, + mocksPattern: options.mocksPattern + ? new RegExp(options.mocksPattern) + : null, + platforms: options.platforms, + resetCache: options.resetCache, + retainAllFiles: options.retainAllFiles, + rootDir: options.rootDir, + roots: Array.from(new Set(options.roots)), + skipPackageJson: !!options.skipPackageJson, + throwOnModuleCollision: !!options.throwOnModuleCollision, + useWatchman: options.useWatchman ?? true, + watch: !!options.watch, + workerThreads: options.workerThreads + }; + this._console = options.console || globalThis.console; + if (options.ignorePattern) { + if (options.ignorePattern instanceof RegExp) { + this._options.ignorePattern = new RegExp( + options.ignorePattern.source.concat(`|${VCS_DIRECTORIES}`), + options.ignorePattern.flags + ); + } else { + throw new Error( + 'jest-haste-map: the `ignorePattern` option must be a RegExp' + ); + } + } else { + this._options.ignorePattern = new RegExp(VCS_DIRECTORIES); + } + if (this._options.enableSymlinks && this._options.useWatchman) { + throw new Error( + 'jest-haste-map: enableSymlinks config option was set, but ' + + 'is incompatible with watchman.\n' + + 'Set either `enableSymlinks` to false or `useWatchman` to false.' + ); + } + } + async setupCachePath(options) { + const rootDirHash = (0, _crypto().createHash)('sha1') + .update(options.rootDir) + .digest('hex') + .substring(0, 32); + let hasteImplHash = ''; + let dependencyExtractorHash = ''; + if (options.hasteImplModulePath) { + const hasteImpl = require(options.hasteImplModulePath); + if (hasteImpl.getCacheKey) { + hasteImplHash = String(hasteImpl.getCacheKey()); + } + } + if (options.dependencyExtractor) { + const dependencyExtractor = await (0, _jestUtil().requireOrImportModule)( + options.dependencyExtractor, + false + ); + if (dependencyExtractor.getCacheKey) { + dependencyExtractorHash = String(dependencyExtractor.getCacheKey()); + } + } + this._cachePath = HasteMap.getCacheFilePath( + this._options.cacheDirectory, + `haste-map-${this._options.id}-${rootDirHash}`, + VERSION, + this._options.id, + this._options.roots + .map(root => fastPath.relative(options.rootDir, root)) + .join(':'), + this._options.extensions.join(':'), + this._options.platforms.join(':'), + this._options.computeSha1.toString(), + options.mocksPattern || '', + (options.ignorePattern || '').toString(), + hasteImplHash, + dependencyExtractorHash, + this._options.computeDependencies.toString() + ); + } + static getCacheFilePath(tmpdir, id, ...extra) { + const hash = (0, _crypto().createHash)('sha1').update(extra.join('')); + return path().join( + tmpdir, + `${id.replace(/\W/g, '-')}-${hash.digest('hex').substring(0, 32)}` + ); + } + static getModuleMapFromJSON(json) { + return _ModuleMap.default.fromJSON(json); + } + getCacheFilePath() { + return this._cachePath; + } + build() { + if (!this._buildPromise) { + this._buildPromise = (async () => { + const data = await this._buildFileMap(); + + // Persist when we don't know if files changed (changedFiles undefined) + // or when we know a file was changed or deleted. + let hasteMap; + if ( + data.changedFiles === undefined || + data.changedFiles.size > 0 || + data.removedFiles.size > 0 + ) { + hasteMap = await this._buildHasteMap(data); + this._persist(hasteMap); + } else { + hasteMap = data.hasteMap; + } + const rootDir = this._options.rootDir; + const hasteFS = new _HasteFS.default({ + files: hasteMap.files, + rootDir + }); + const moduleMap = new _ModuleMap.default({ + duplicates: hasteMap.duplicates, + map: hasteMap.map, + mocks: hasteMap.mocks, + rootDir + }); + const __hasteMapForTest = + (process.env.NODE_ENV === 'test' && hasteMap) || null; + await this._watch(hasteMap); + return { + __hasteMapForTest, + hasteFS, + moduleMap + }; + })(); + } + return this._buildPromise; + } + + /** + * 1. read data from the cache or create an empty structure. + */ + read() { + let hasteMap; + try { + hasteMap = (0, _v().deserialize)( + (0, _gracefulFs().readFileSync)(this._cachePath) + ); + } catch { + hasteMap = this._createEmptyMap(); + } + return hasteMap; + } + readModuleMap() { + const data = this.read(); + return new _ModuleMap.default({ + duplicates: data.duplicates, + map: data.map, + mocks: data.mocks, + rootDir: this._options.rootDir + }); + } + + /** + * 2. crawl the file system. + */ + async _buildFileMap() { + let hasteMap; + try { + const read = this._options.resetCache ? this._createEmptyMap : this.read; + hasteMap = read.call(this); + } catch { + hasteMap = this._createEmptyMap(); + } + return this._crawl(hasteMap); + } + + /** + * 3. parse and extract metadata from changed files. + */ + _processFile(hasteMap, map, mocks, filePath, workerOptions) { + const rootDir = this._options.rootDir; + const setModule = (id, module) => { + let moduleMap = map.get(id); + if (!moduleMap) { + moduleMap = Object.create(null); + map.set(id, moduleMap); + } + const platform = + (0, _getPlatformExtension.default)( + module[_constants.default.PATH], + this._options.platforms + ) || _constants.default.GENERIC_PLATFORM; + const existingModule = moduleMap[platform]; + if ( + existingModule && + existingModule[_constants.default.PATH] !== + module[_constants.default.PATH] + ) { + const method = this._options.throwOnModuleCollision ? 'error' : 'warn'; + this._console[method]( + [ + `jest-haste-map: Haste module naming collision: ${id}`, + ' The following files share their name; please adjust your hasteImpl:', + ` * ${path().sep}${ + existingModule[_constants.default.PATH] + }`, + ` * ${path().sep}${module[_constants.default.PATH]}`, + '' + ].join('\n') + ); + if (this._options.throwOnModuleCollision) { + throw new DuplicateError( + existingModule[_constants.default.PATH], + module[_constants.default.PATH] + ); + } + + // We do NOT want consumers to use a module that is ambiguous. + delete moduleMap[platform]; + if (Object.keys(moduleMap).length === 1) { + map.delete(id); + } + let dupsByPlatform = hasteMap.duplicates.get(id); + if (dupsByPlatform == null) { + dupsByPlatform = new Map(); + hasteMap.duplicates.set(id, dupsByPlatform); + } + const dups = new Map([ + [module[_constants.default.PATH], module[_constants.default.TYPE]], + [ + existingModule[_constants.default.PATH], + existingModule[_constants.default.TYPE] + ] + ]); + dupsByPlatform.set(platform, dups); + return; + } + const dupsByPlatform = hasteMap.duplicates.get(id); + if (dupsByPlatform != null) { + const dups = dupsByPlatform.get(platform); + if (dups != null) { + dups.set( + module[_constants.default.PATH], + module[_constants.default.TYPE] + ); + } + return; + } + moduleMap[platform] = module; + }; + const relativeFilePath = fastPath.relative(rootDir, filePath); + const fileMetadata = hasteMap.files.get(relativeFilePath); + if (!fileMetadata) { + throw new Error( + 'jest-haste-map: File to process was not found in the haste map.' + ); + } + const moduleMetadata = hasteMap.map.get( + fileMetadata[_constants.default.ID] + ); + const computeSha1 = + this._options.computeSha1 && !fileMetadata[_constants.default.SHA1]; + + // Callback called when the response from the worker is successful. + const workerReply = metadata => { + // `1` for truthy values instead of `true` to save cache space. + fileMetadata[_constants.default.VISITED] = 1; + const metadataId = metadata.id; + const metadataModule = metadata.module; + if (metadataId && metadataModule) { + fileMetadata[_constants.default.ID] = metadataId; + setModule(metadataId, metadataModule); + } + fileMetadata[_constants.default.DEPENDENCIES] = metadata.dependencies + ? metadata.dependencies.join(_constants.default.DEPENDENCY_DELIM) + : ''; + if (computeSha1) { + fileMetadata[_constants.default.SHA1] = metadata.sha1; + } + }; + + // Callback called when the response from the worker is an error. + const workerError = error => { + if (typeof error !== 'object' || !error.message || !error.stack) { + error = new Error(error); + error.stack = ''; // Remove stack for stack-less errors. + } + + if (!['ENOENT', 'EACCES'].includes(error.code)) { + throw error; + } + + // If a file cannot be read we remove it from the file list and + // ignore the failure silently. + hasteMap.files.delete(relativeFilePath); + }; + + // If we retain all files in the virtual HasteFS representation, we avoid + // reading them if they aren't important (node_modules). + if (this._options.retainAllFiles && filePath.includes(NODE_MODULES)) { + if (computeSha1) { + return this._getWorker(workerOptions) + .getSha1({ + computeDependencies: this._options.computeDependencies, + computeSha1, + dependencyExtractor: this._options.dependencyExtractor, + filePath, + hasteImplModulePath: this._options.hasteImplModulePath, + rootDir + }) + .then(workerReply, workerError); + } + return null; + } + if ( + this._options.mocksPattern && + this._options.mocksPattern.test(filePath) + ) { + const mockPath = (0, _getMockName.default)(filePath); + const existingMockPath = mocks.get(mockPath); + if (existingMockPath) { + const secondMockPath = fastPath.relative(rootDir, filePath); + if (existingMockPath !== secondMockPath) { + const method = this._options.throwOnModuleCollision + ? 'error' + : 'warn'; + this._console[method]( + [ + `jest-haste-map: duplicate manual mock found: ${mockPath}`, + ' The following files share their name; please delete one of them:', + ` * ${path().sep}${existingMockPath}`, + ` * ${path().sep}${secondMockPath}`, + '' + ].join('\n') + ); + if (this._options.throwOnModuleCollision) { + throw new DuplicateError(existingMockPath, secondMockPath); + } + } + } + mocks.set(mockPath, relativeFilePath); + } + if (fileMetadata[_constants.default.VISITED]) { + if (!fileMetadata[_constants.default.ID]) { + return null; + } + if (moduleMetadata != null) { + const platform = + (0, _getPlatformExtension.default)( + filePath, + this._options.platforms + ) || _constants.default.GENERIC_PLATFORM; + const module = moduleMetadata[platform]; + if (module == null) { + return null; + } + const moduleId = fileMetadata[_constants.default.ID]; + let modulesByPlatform = map.get(moduleId); + if (!modulesByPlatform) { + modulesByPlatform = Object.create(null); + map.set(moduleId, modulesByPlatform); + } + modulesByPlatform[platform] = module; + return null; + } + } + return this._getWorker(workerOptions) + .worker({ + computeDependencies: this._options.computeDependencies, + computeSha1, + dependencyExtractor: this._options.dependencyExtractor, + filePath, + hasteImplModulePath: this._options.hasteImplModulePath, + rootDir + }) + .then(workerReply, workerError); + } + _buildHasteMap(data) { + const {removedFiles, changedFiles, hasteMap} = data; + + // If any files were removed or we did not track what files changed, process + // every file looking for changes. Otherwise, process only changed files. + let map; + let mocks; + let filesToProcess; + if (changedFiles === undefined || removedFiles.size) { + map = new Map(); + mocks = new Map(); + filesToProcess = hasteMap.files; + } else { + map = hasteMap.map; + mocks = hasteMap.mocks; + filesToProcess = changedFiles; + } + for (const [relativeFilePath, fileMetadata] of removedFiles) { + this._recoverDuplicates( + hasteMap, + relativeFilePath, + fileMetadata[_constants.default.ID] + ); + } + const promises = []; + for (const relativeFilePath of filesToProcess.keys()) { + if ( + this._options.skipPackageJson && + relativeFilePath.endsWith(PACKAGE_JSON) + ) { + continue; + } + // SHA-1, if requested, should already be present thanks to the crawler. + const filePath = fastPath.resolve( + this._options.rootDir, + relativeFilePath + ); + const promise = this._processFile(hasteMap, map, mocks, filePath); + if (promise) { + promises.push(promise); + } + } + return Promise.all(promises).then( + () => { + this._cleanup(); + hasteMap.map = map; + hasteMap.mocks = mocks; + return hasteMap; + }, + error => { + this._cleanup(); + throw error; + } + ); + } + _cleanup() { + const worker = this._worker; + if (worker && 'end' in worker) { + worker.end(); + } + this._worker = null; + } + + /** + * 4. serialize the new `HasteMap` in a cache file. + */ + _persist(hasteMap) { + (0, _gracefulFs().writeFileSync)( + this._cachePath, + (0, _v().serialize)(hasteMap) + ); + } + + /** + * Creates workers or parses files and extracts metadata in-process. + */ + _getWorker( + options = { + forceInBand: false + } + ) { + if (!this._worker) { + if (options.forceInBand || this._options.maxWorkers <= 1) { + this._worker = { + getSha1: _worker.getSha1, + worker: _worker.worker + }; + } else { + this._worker = new (_jestWorker().Worker)(require.resolve('./worker'), { + enableWorkerThreads: this._options.workerThreads, + exposedMethods: ['getSha1', 'worker'], + forkOptions: { + serialization: 'json' + }, + maxRetries: 3, + numWorkers: this._options.maxWorkers + }); + } + } + return this._worker; + } + async _crawl(hasteMap) { + const options = this._options; + const ignore = this._ignore.bind(this); + const crawl = (await this._shouldUseWatchman()) + ? _watchman.watchmanCrawl + : _node.nodeCrawl; + const crawlerOptions = { + computeSha1: options.computeSha1, + data: hasteMap, + enableSymlinks: options.enableSymlinks, + extensions: options.extensions, + forceNodeFilesystemAPI: options.forceNodeFilesystemAPI, + ignore, + rootDir: options.rootDir, + roots: options.roots + }; + const retry = error => { + if (crawl === _watchman.watchmanCrawl) { + this._console.warn( + 'jest-haste-map: Watchman crawl failed. Retrying once with node ' + + 'crawler.\n' + + " Usually this happens when watchman isn't running. Create an " + + "empty `.watchmanconfig` file in your project's root folder or " + + 'initialize a git or hg repository in your project.\n' + + ` ${error}` + ); + return (0, _node.nodeCrawl)(crawlerOptions).catch(e => { + throw new Error( + 'Crawler retry failed:\n' + + ` Original error: ${error.message}\n` + + ` Retry error: ${e.message}\n` + ); + }); + } + throw error; + }; + try { + return await crawl(crawlerOptions); + } catch (error) { + return retry(error); + } + } + + /** + * Watch mode + */ + async _watch(hasteMap) { + if (!this._options.watch) { + return Promise.resolve(); + } + + // In watch mode, we'll only warn about module collisions and we'll retain + // all files, even changes to node_modules. + this._options.throwOnModuleCollision = false; + this._options.retainAllFiles = true; + + // WatchmanWatcher > FSEventsWatcher > sane.NodeWatcher + const Watcher = (await this._shouldUseWatchman()) + ? _WatchmanWatcher.default + : _FSEventsWatcher.FSEventsWatcher.isSupported() + ? _FSEventsWatcher.FSEventsWatcher + : _NodeWatcher.default; + const extensions = this._options.extensions; + const ignorePattern = this._options.ignorePattern; + const rootDir = this._options.rootDir; + let changeQueue = Promise.resolve(); + let eventsQueue = []; + // We only need to copy the entire haste map once on every "frame". + let mustCopy = true; + const createWatcher = root => { + const watcher = new Watcher(root, { + dot: true, + glob: extensions.map(extension => `**/*.${extension}`), + ignored: ignorePattern + }); + return new Promise((resolve, reject) => { + const rejectTimeout = setTimeout( + () => reject(new Error('Failed to start watch mode.')), + MAX_WAIT_TIME + ); + watcher.once('ready', () => { + clearTimeout(rejectTimeout); + watcher.on('all', onChange); + resolve(watcher); + }); + }); + }; + const emitChange = () => { + if (eventsQueue.length) { + mustCopy = true; + const changeEvent = { + eventsQueue, + hasteFS: new _HasteFS.default({ + files: hasteMap.files, + rootDir + }), + moduleMap: new _ModuleMap.default({ + duplicates: hasteMap.duplicates, + map: hasteMap.map, + mocks: hasteMap.mocks, + rootDir + }) + }; + this.emit('change', changeEvent); + eventsQueue = []; + } + }; + const onChange = (type, filePath, root, stat) => { + filePath = path().join(root, (0, _normalizePathSep.default)(filePath)); + if ( + (stat && stat.isDirectory()) || + this._ignore(filePath) || + !extensions.some(extension => filePath.endsWith(extension)) + ) { + return; + } + const relativeFilePath = fastPath.relative(rootDir, filePath); + const fileMetadata = hasteMap.files.get(relativeFilePath); + + // The file has been accessed, not modified + if ( + type === 'change' && + fileMetadata && + stat && + fileMetadata[_constants.default.MTIME] === stat.mtime.getTime() + ) { + return; + } + changeQueue = changeQueue + .then(() => { + // If we get duplicate events for the same file, ignore them. + if ( + eventsQueue.find( + event => + event.type === type && + event.filePath === filePath && + ((!event.stat && !stat) || + (!!event.stat && + !!stat && + event.stat.mtime.getTime() === stat.mtime.getTime())) + ) + ) { + return null; + } + if (mustCopy) { + mustCopy = false; + hasteMap = { + clocks: new Map(hasteMap.clocks), + duplicates: new Map(hasteMap.duplicates), + files: new Map(hasteMap.files), + map: new Map(hasteMap.map), + mocks: new Map(hasteMap.mocks) + }; + } + const add = () => { + eventsQueue.push({ + filePath, + stat, + type + }); + return null; + }; + const fileMetadata = hasteMap.files.get(relativeFilePath); + + // If it's not an addition, delete the file and all its metadata + if (fileMetadata != null) { + const moduleName = fileMetadata[_constants.default.ID]; + const platform = + (0, _getPlatformExtension.default)( + filePath, + this._options.platforms + ) || _constants.default.GENERIC_PLATFORM; + hasteMap.files.delete(relativeFilePath); + let moduleMap = hasteMap.map.get(moduleName); + if (moduleMap != null) { + // We are forced to copy the object because jest-haste-map exposes + // the map as an immutable entity. + moduleMap = copy(moduleMap); + delete moduleMap[platform]; + if (Object.keys(moduleMap).length === 0) { + hasteMap.map.delete(moduleName); + } else { + hasteMap.map.set(moduleName, moduleMap); + } + } + if ( + this._options.mocksPattern && + this._options.mocksPattern.test(filePath) + ) { + const mockName = (0, _getMockName.default)(filePath); + hasteMap.mocks.delete(mockName); + } + this._recoverDuplicates(hasteMap, relativeFilePath, moduleName); + } + + // If the file was added or changed, + // parse it and update the haste map. + if (type === 'add' || type === 'change') { + (0, _jestUtil().invariant)( + stat, + 'since the file exists or changed, it should have stats' + ); + const fileMetadata = [ + '', + stat.mtime.getTime(), + stat.size, + 0, + '', + null + ]; + hasteMap.files.set(relativeFilePath, fileMetadata); + const promise = this._processFile( + hasteMap, + hasteMap.map, + hasteMap.mocks, + filePath, + { + forceInBand: true + } + ); + // Cleanup + this._cleanup(); + if (promise) { + return promise.then(add); + } else { + // If a file in node_modules has changed, + // emit an event regardless. + add(); + } + } else { + add(); + } + return null; + }) + .catch(error => { + this._console.error( + `jest-haste-map: watch error:\n ${error.stack}\n` + ); + }); + }; + this._changeInterval = setInterval(emitChange, CHANGE_INTERVAL); + return Promise.all(this._options.roots.map(createWatcher)).then( + watchers => { + this._watchers = watchers; + } + ); + } + + /** + * This function should be called when the file under `filePath` is removed + * or changed. When that happens, we want to figure out if that file was + * part of a group of files that had the same ID. If it was, we want to + * remove it from the group. Furthermore, if there is only one file + * remaining in the group, then we want to restore that single file as the + * correct resolution for its ID, and cleanup the duplicates index. + */ + _recoverDuplicates(hasteMap, relativeFilePath, moduleName) { + let dupsByPlatform = hasteMap.duplicates.get(moduleName); + if (dupsByPlatform == null) { + return; + } + const platform = + (0, _getPlatformExtension.default)( + relativeFilePath, + this._options.platforms + ) || _constants.default.GENERIC_PLATFORM; + let dups = dupsByPlatform.get(platform); + if (dups == null) { + return; + } + dupsByPlatform = copyMap(dupsByPlatform); + hasteMap.duplicates.set(moduleName, dupsByPlatform); + dups = copyMap(dups); + dupsByPlatform.set(platform, dups); + dups.delete(relativeFilePath); + if (dups.size !== 1) { + return; + } + const uniqueModule = dups.entries().next().value; + if (!uniqueModule) { + return; + } + let dedupMap = hasteMap.map.get(moduleName); + if (!dedupMap) { + dedupMap = Object.create(null); + hasteMap.map.set(moduleName, dedupMap); + } + dedupMap[platform] = uniqueModule; + dupsByPlatform.delete(platform); + if (dupsByPlatform.size === 0) { + hasteMap.duplicates.delete(moduleName); + } + } + async end() { + if (this._changeInterval) { + clearInterval(this._changeInterval); + } + if (!this._watchers.length) { + return; + } + await Promise.all(this._watchers.map(watcher => watcher.close())); + this._watchers = []; + } + + /** + * Helpers + */ + _ignore(filePath) { + const ignorePattern = this._options.ignorePattern; + const ignoreMatched = + ignorePattern instanceof RegExp + ? ignorePattern.test(filePath) + : ignorePattern && ignorePattern(filePath); + return ( + ignoreMatched || + (!this._options.retainAllFiles && filePath.includes(NODE_MODULES)) + ); + } + async _shouldUseWatchman() { + if (!this._options.useWatchman) { + return false; + } + if (!this._isWatchmanInstalledPromise) { + this._isWatchmanInstalledPromise = (0, _isWatchmanInstalled.default)(); + } + return this._isWatchmanInstalledPromise; + } + _createEmptyMap() { + return { + clocks: new Map(), + duplicates: new Map(), + files: new Map(), + map: new Map(), + mocks: new Map() + }; + } + static H = _constants.default; +} +class DuplicateError extends Error { + mockPath1; + mockPath2; + constructor(mockPath1, mockPath2) { + super('Duplicated files or mocks. Please check the console for more info'); + this.mockPath1 = mockPath1; + this.mockPath2 = mockPath2; + } +} +exports.DuplicateError = DuplicateError; +function copy(object) { + return Object.assign(Object.create(null), object); +} +function copyMap(input) { + return new Map(input); +} + +// Export the smallest API surface required by Jest + +const JestHasteMap = HasteMap; +var _default = JestHasteMap; +exports.default = _default; diff --git a/node_modules/jest-haste-map/build/lib/dependencyExtractor.js b/node_modules/jest-haste-map/build/lib/dependencyExtractor.js new file mode 100644 index 00000000..9a2a14f8 --- /dev/null +++ b/node_modules/jest-haste-map/build/lib/dependencyExtractor.js @@ -0,0 +1,84 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.extractor = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const NOT_A_DOT = '(? `([\`'"])([^'"\`]*?)(?:\\${pos})`; +const WORD_SEPARATOR = '\\b'; +const LEFT_PARENTHESIS = '\\('; +const RIGHT_PARENTHESIS = '\\)'; +const WHITESPACE = '\\s*'; +const OPTIONAL_COMMA = '(:?,\\s*)?'; +function createRegExp(parts, flags) { + return new RegExp(parts.join(''), flags); +} +function alternatives(...parts) { + return `(?:${parts.join('|')})`; +} +function functionCallStart(...names) { + return [ + NOT_A_DOT, + WORD_SEPARATOR, + alternatives(...names), + WHITESPACE, + LEFT_PARENTHESIS, + WHITESPACE + ]; +} +const BLOCK_COMMENT_RE = /\/\*[^]*?\*\//g; +const LINE_COMMENT_RE = /\/\/.*/g; +const REQUIRE_OR_DYNAMIC_IMPORT_RE = createRegExp( + [ + ...functionCallStart('require', 'import'), + CAPTURE_STRING_LITERAL(1), + WHITESPACE, + OPTIONAL_COMMA, + RIGHT_PARENTHESIS + ], + 'g' +); +const IMPORT_OR_EXPORT_RE = createRegExp( + [ + '\\b(?:import|export)\\s+(?!type(?:of)?\\s+)(?:[^\'"]+\\s+from\\s+)?', + CAPTURE_STRING_LITERAL(1) + ], + 'g' +); +const JEST_EXTENSIONS_RE = createRegExp( + [ + ...functionCallStart( + 'jest\\s*\\.\\s*(?:requireActual|requireMock|genMockFromModule|createMockFromModule)' + ), + CAPTURE_STRING_LITERAL(1), + WHITESPACE, + OPTIONAL_COMMA, + RIGHT_PARENTHESIS + ], + 'g' +); +const extractor = { + extract(code) { + const dependencies = new Set(); + const addDependency = (match, _, dep) => { + dependencies.add(dep); + return match; + }; + code + .replace(BLOCK_COMMENT_RE, '') + .replace(LINE_COMMENT_RE, '') + .replace(IMPORT_OR_EXPORT_RE, addDependency) + .replace(REQUIRE_OR_DYNAMIC_IMPORT_RE, addDependency) + .replace(JEST_EXTENSIONS_RE, addDependency); + return dependencies; + } +}; +exports.extractor = extractor; diff --git a/node_modules/jest-haste-map/build/lib/fast_path.js b/node_modules/jest-haste-map/build/lib/fast_path.js new file mode 100644 index 00000000..f82787cc --- /dev/null +++ b/node_modules/jest-haste-map/build/lib/fast_path.js @@ -0,0 +1,76 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.relative = relative; +exports.resolve = resolve; +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// rootDir and filename must be absolute paths (resolved) +function relative(rootDir, filename) { + return filename.indexOf(rootDir + path().sep) === 0 + ? filename.substring(rootDir.length + 1) + : path().relative(rootDir, filename); +} +const INDIRECTION_FRAGMENT = `..${path().sep}`; + +// rootDir must be an absolute path and relativeFilename must be simple +// (e.g.: foo/bar or ../foo/bar, but never ./foo or foo/../bar) +function resolve(rootDir, relativeFilename) { + return relativeFilename.indexOf(INDIRECTION_FRAGMENT) === 0 + ? path().resolve(rootDir, relativeFilename) + : rootDir + path().sep + relativeFilename; +} diff --git a/node_modules/jest-haste-map/build/lib/getPlatformExtension.js b/node_modules/jest-haste-map/build/lib/getPlatformExtension.js new file mode 100644 index 00000000..2e1d2045 --- /dev/null +++ b/node_modules/jest-haste-map/build/lib/getPlatformExtension.js @@ -0,0 +1,30 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = getPlatformExtension; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const SUPPORTED_PLATFORM_EXTS = new Set(['android', 'ios', 'native', 'web']); + +// Extract platform extension: index.ios.js -> ios +function getPlatformExtension(file, platforms) { + const last = file.lastIndexOf('.'); + const secondToLast = file.lastIndexOf('.', last - 1); + if (secondToLast === -1) { + return null; + } + const platform = file.substring(secondToLast + 1, last); + // If an overriding platform array is passed, check that first + + if (platforms && platforms.indexOf(platform) !== -1) { + return platform; + } + return SUPPORTED_PLATFORM_EXTS.has(platform) ? platform : null; +} diff --git a/node_modules/jest-haste-map/build/lib/isWatchmanInstalled.js b/node_modules/jest-haste-map/build/lib/isWatchmanInstalled.js new file mode 100644 index 00000000..b04abb24 --- /dev/null +++ b/node_modules/jest-haste-map/build/lib/isWatchmanInstalled.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = isWatchmanInstalled; +function _child_process() { + const data = require('child_process'); + _child_process = function () { + return data; + }; + return data; +} +function _util() { + const data = require('util'); + _util = function () { + return data; + }; + return data; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +async function isWatchmanInstalled() { + try { + await (0, _util().promisify)(_child_process().execFile)('watchman', [ + '--version' + ]); + return true; + } catch { + return false; + } +} diff --git a/node_modules/jest-haste-map/build/lib/normalizePathSep.js b/node_modules/jest-haste-map/build/lib/normalizePathSep.js new file mode 100644 index 00000000..ad8cd1fe --- /dev/null +++ b/node_modules/jest-haste-map/build/lib/normalizePathSep.js @@ -0,0 +1,68 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +let normalizePathSep; +if (path().sep === '/') { + normalizePathSep = filePath => filePath; +} else { + normalizePathSep = filePath => filePath.replace(/\//g, path().sep); +} +var _default = normalizePathSep; +exports.default = _default; diff --git a/node_modules/jest-haste-map/build/types.js b/node_modules/jest-haste-map/build/types.js new file mode 100644 index 00000000..ad9a93a7 --- /dev/null +++ b/node_modules/jest-haste-map/build/types.js @@ -0,0 +1 @@ +'use strict'; diff --git a/node_modules/jest-haste-map/build/watchers/FSEventsWatcher.js b/node_modules/jest-haste-map/build/watchers/FSEventsWatcher.js new file mode 100644 index 00000000..a8b59d7f --- /dev/null +++ b/node_modules/jest-haste-map/build/watchers/FSEventsWatcher.js @@ -0,0 +1,244 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.FSEventsWatcher = void 0; +function _events() { + const data = require('events'); + _events = function () { + return data; + }; + return data; +} +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _anymatch() { + const data = _interopRequireDefault(require('anymatch')); + _anymatch = function () { + return data; + }; + return data; +} +function fs() { + const data = _interopRequireWildcard(require('graceful-fs')); + fs = function () { + return data; + }; + return data; +} +function _micromatch() { + const data = _interopRequireDefault(require('micromatch')); + _micromatch = function () { + return data; + }; + return data; +} +function _walker() { + const data = _interopRequireDefault(require('walker')); + _walker = function () { + return data; + }; + return data; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +// @ts-expect-error no types + +// eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error, @typescript-eslint/ban-ts-comment +// @ts-ignore: this is for CI which runs linux and might not have this +let fsevents = null; +try { + fsevents = require('fsevents'); +} catch { + // Optional dependency, only supported on Darwin. +} +const CHANGE_EVENT = 'change'; +const DELETE_EVENT = 'delete'; +const ADD_EVENT = 'add'; +const ALL_EVENT = 'all'; +/** + * Export `FSEventsWatcher` class. + * Watches `dir`. + */ +class FSEventsWatcher extends _events().EventEmitter { + root; + ignored; + glob; + dot; + hasIgnore; + doIgnore; + fsEventsWatchStopper; + _tracked; + static isSupported() { + return fsevents !== null; + } + static normalizeProxy(callback) { + return (filepath, stats) => callback(path().normalize(filepath), stats); + } + static recReaddir( + dir, + dirCallback, + fileCallback, + endCallback, + errorCallback, + ignored + ) { + (0, _walker().default)(dir) + .filterDir( + currentDir => !ignored || !(0, _anymatch().default)(ignored, currentDir) + ) + .on('dir', FSEventsWatcher.normalizeProxy(dirCallback)) + .on('file', FSEventsWatcher.normalizeProxy(fileCallback)) + .on('error', errorCallback) + .on('end', () => { + endCallback(); + }); + } + constructor(dir, opts) { + if (!fsevents) { + throw new Error( + '`fsevents` unavailable (this watcher can only be used on Darwin)' + ); + } + super(); + this.dot = opts.dot || false; + this.ignored = opts.ignored; + this.glob = Array.isArray(opts.glob) ? opts.glob : [opts.glob]; + this.hasIgnore = + Boolean(opts.ignored) && !(Array.isArray(opts) && opts.length > 0); + this.doIgnore = opts.ignored + ? (0, _anymatch().default)(opts.ignored) + : () => false; + this.root = path().resolve(dir); + this.fsEventsWatchStopper = fsevents.watch( + this.root, + this.handleEvent.bind(this) + ); + this._tracked = new Set(); + FSEventsWatcher.recReaddir( + this.root, + filepath => { + this._tracked.add(filepath); + }, + filepath => { + this._tracked.add(filepath); + }, + this.emit.bind(this, 'ready'), + this.emit.bind(this, 'error'), + this.ignored + ); + } + + /** + * End watching. + */ + async close(callback) { + await this.fsEventsWatchStopper(); + this.removeAllListeners(); + if (typeof callback === 'function') { + process.nextTick(() => callback()); + } + } + isFileIncluded(relativePath) { + if (this.doIgnore(relativePath)) { + return false; + } + return this.glob.length + ? (0, _micromatch().default)([relativePath], this.glob, { + dot: this.dot + }).length > 0 + : this.dot || + (0, _micromatch().default)([relativePath], '**/*').length > 0; + } + handleEvent(filepath) { + const relativePath = path().relative(this.root, filepath); + if (!this.isFileIncluded(relativePath)) { + return; + } + fs().lstat(filepath, (error, stat) => { + if (error && error.code !== 'ENOENT') { + this.emit('error', error); + return; + } + if (error) { + // Ignore files that aren't tracked and don't exist. + if (!this._tracked.has(filepath)) { + return; + } + this._emit(DELETE_EVENT, relativePath); + this._tracked.delete(filepath); + return; + } + if (this._tracked.has(filepath)) { + this._emit(CHANGE_EVENT, relativePath, stat); + } else { + this._tracked.add(filepath); + this._emit(ADD_EVENT, relativePath, stat); + } + }); + } + + /** + * Emit events. + */ + _emit(type, file, stat) { + this.emit(type, file, this.root, stat); + this.emit(ALL_EVENT, type, file, this.root, stat); + } +} +exports.FSEventsWatcher = FSEventsWatcher; diff --git a/node_modules/jest-haste-map/build/watchers/NodeWatcher.js b/node_modules/jest-haste-map/build/watchers/NodeWatcher.js new file mode 100644 index 00000000..62cface5 --- /dev/null +++ b/node_modules/jest-haste-map/build/watchers/NodeWatcher.js @@ -0,0 +1,369 @@ +// vendored from https://github.com/amasad/sane/blob/64ff3a870c42e84f744086884bf55a4f9c22d376/src/node_watcher.js + +'use strict'; + +const EventEmitter = require('events').EventEmitter; +const fs = require('fs'); +const platform = require('os').platform(); +const path = require('path'); +const common = require('./common'); + +/** + * Constants + */ + +const DEFAULT_DELAY = common.DEFAULT_DELAY; +const CHANGE_EVENT = common.CHANGE_EVENT; +const DELETE_EVENT = common.DELETE_EVENT; +const ADD_EVENT = common.ADD_EVENT; +const ALL_EVENT = common.ALL_EVENT; + +/** + * Export `NodeWatcher` class. + * Watches `dir`. + * + * @class NodeWatcher + * @param {String} dir + * @param {Object} opts + * @public + */ + +module.exports = class NodeWatcher extends EventEmitter { + constructor(dir, opts) { + super(); + common.assignOptions(this, opts); + this.watched = Object.create(null); + this.changeTimers = Object.create(null); + this.dirRegistery = Object.create(null); + this.root = path.resolve(dir); + this.watchdir = this.watchdir.bind(this); + this.register = this.register.bind(this); + this.checkedEmitError = this.checkedEmitError.bind(this); + this.watchdir(this.root); + common.recReaddir( + this.root, + this.watchdir, + this.register, + this.emit.bind(this, 'ready'), + this.checkedEmitError, + this.ignored + ); + } + + /** + * Register files that matches our globs to know what to type of event to + * emit in the future. + * + * Registery looks like the following: + * + * dirRegister => Map { + * dirpath => Map { + * filename => true + * } + * } + * + * @param {string} filepath + * @return {boolean} whether or not we have registered the file. + * @private + */ + + register(filepath) { + const relativePath = path.relative(this.root, filepath); + if ( + !common.isFileIncluded(this.globs, this.dot, this.doIgnore, relativePath) + ) { + return false; + } + const dir = path.dirname(filepath); + if (!this.dirRegistery[dir]) { + this.dirRegistery[dir] = Object.create(null); + } + const filename = path.basename(filepath); + this.dirRegistery[dir][filename] = true; + return true; + } + + /** + * Removes a file from the registery. + * + * @param {string} filepath + * @private + */ + + unregister(filepath) { + const dir = path.dirname(filepath); + if (this.dirRegistery[dir]) { + const filename = path.basename(filepath); + delete this.dirRegistery[dir][filename]; + } + } + + /** + * Removes a dir from the registery. + * + * @param {string} dirpath + * @private + */ + + unregisterDir(dirpath) { + if (this.dirRegistery[dirpath]) { + delete this.dirRegistery[dirpath]; + } + } + + /** + * Checks if a file or directory exists in the registery. + * + * @param {string} fullpath + * @return {boolean} + * @private + */ + + registered(fullpath) { + const dir = path.dirname(fullpath); + return ( + this.dirRegistery[fullpath] || + (this.dirRegistery[dir] && + this.dirRegistery[dir][path.basename(fullpath)]) + ); + } + + /** + * Emit "error" event if it's not an ignorable event + * + * @param error + * @private + */ + checkedEmitError(error) { + if (!isIgnorableFileError(error)) { + this.emit('error', error); + } + } + + /** + * Watch a directory. + * + * @param {string} dir + * @private + */ + + watchdir(dir) { + if (this.watched[dir]) { + return; + } + const watcher = fs.watch( + dir, + { + persistent: true + }, + this.normalizeChange.bind(this, dir) + ); + this.watched[dir] = watcher; + watcher.on('error', this.checkedEmitError); + if (this.root !== dir) { + this.register(dir); + } + } + + /** + * Stop watching a directory. + * + * @param {string} dir + * @private + */ + + stopWatching(dir) { + if (this.watched[dir]) { + this.watched[dir].close(); + delete this.watched[dir]; + } + } + + /** + * End watching. + * + * @public + */ + + close() { + Object.keys(this.watched).forEach(this.stopWatching, this); + this.removeAllListeners(); + return Promise.resolve(); + } + + /** + * On some platforms, as pointed out on the fs docs (most likely just win32) + * the file argument might be missing from the fs event. Try to detect what + * change by detecting if something was deleted or the most recent file change. + * + * @param {string} dir + * @param {string} event + * @param {string} file + * @public + */ + + detectChangedFile(dir, event, callback) { + if (!this.dirRegistery[dir]) { + return; + } + let found = false; + let closest = { + mtime: 0 + }; + let c = 0; + Object.keys(this.dirRegistery[dir]).forEach(function (file, i, arr) { + fs.lstat(path.join(dir, file), (error, stat) => { + if (found) { + return; + } + if (error) { + if (isIgnorableFileError(error)) { + found = true; + callback(file); + } else { + this.emit('error', error); + } + } else { + if (stat.mtime > closest.mtime) { + stat.file = file; + closest = stat; + } + if (arr.length === ++c) { + callback(closest.file); + } + } + }); + }, this); + } + + /** + * Normalize fs events and pass it on to be processed. + * + * @param {string} dir + * @param {string} event + * @param {string} file + * @public + */ + + normalizeChange(dir, event, file) { + if (!file) { + this.detectChangedFile(dir, event, actualFile => { + if (actualFile) { + this.processChange(dir, event, actualFile); + } + }); + } else { + this.processChange(dir, event, path.normalize(file)); + } + } + + /** + * Process changes. + * + * @param {string} dir + * @param {string} event + * @param {string} file + * @public + */ + + processChange(dir, event, file) { + const fullPath = path.join(dir, file); + const relativePath = path.join(path.relative(this.root, dir), file); + fs.lstat(fullPath, (error, stat) => { + if (error && error.code !== 'ENOENT') { + this.emit('error', error); + } else if (!error && stat.isDirectory()) { + // win32 emits usless change events on dirs. + if (event !== 'change') { + this.watchdir(fullPath); + if ( + common.isFileIncluded( + this.globs, + this.dot, + this.doIgnore, + relativePath + ) + ) { + this.emitEvent(ADD_EVENT, relativePath, stat); + } + } + } else { + const registered = this.registered(fullPath); + if (error && error.code === 'ENOENT') { + this.unregister(fullPath); + this.stopWatching(fullPath); + this.unregisterDir(fullPath); + if (registered) { + this.emitEvent(DELETE_EVENT, relativePath); + } + } else if (registered) { + this.emitEvent(CHANGE_EVENT, relativePath, stat); + } else { + if (this.register(fullPath)) { + this.emitEvent(ADD_EVENT, relativePath, stat); + } + } + } + }); + } + + /** + * Triggers a 'change' event after debounding it to take care of duplicate + * events on os x. + * + * @private + */ + + emitEvent(type, file, stat) { + const key = `${type}-${file}`; + const addKey = `${ADD_EVENT}-${file}`; + if (type === CHANGE_EVENT && this.changeTimers[addKey]) { + // Ignore the change event that is immediately fired after an add event. + // (This happens on Linux). + return; + } + clearTimeout(this.changeTimers[key]); + this.changeTimers[key] = setTimeout(() => { + delete this.changeTimers[key]; + if (type === ADD_EVENT && stat.isDirectory()) { + // Recursively emit add events and watch for sub-files/folders + common.recReaddir( + path.resolve(this.root, file), + function emitAddDir(dir, stats) { + this.watchdir(dir); + this.rawEmitEvent(ADD_EVENT, path.relative(this.root, dir), stats); + }.bind(this), + function emitAddFile(file, stats) { + this.register(file); + this.rawEmitEvent(ADD_EVENT, path.relative(this.root, file), stats); + }.bind(this), + function endCallback() {}, + this.checkedEmitError, + this.ignored + ); + } else { + this.rawEmitEvent(type, file, stat); + } + }, DEFAULT_DELAY); + } + + /** + * Actually emit the events + */ + rawEmitEvent(type, file, stat) { + this.emit(type, file, this.root, stat); + this.emit(ALL_EVENT, type, file, this.root, stat); + } +}; +/** + * Determine if a given FS error can be ignored + * + * @private + */ +function isIgnorableFileError(error) { + return ( + error.code === 'ENOENT' || + // Workaround Windows node issue #4337. + (error.code === 'EPERM' && platform === 'win32') + ); +} diff --git a/node_modules/jest-haste-map/build/watchers/RecrawlWarning.js b/node_modules/jest-haste-map/build/watchers/RecrawlWarning.js new file mode 100644 index 00000000..5b1b6d35 --- /dev/null +++ b/node_modules/jest-haste-map/build/watchers/RecrawlWarning.js @@ -0,0 +1,49 @@ +// vendored from https://github.com/amasad/sane/blob/64ff3a870c42e84f744086884bf55a4f9c22d376/src/utils/recrawl-warning-dedupe.js + +'use strict'; + +class RecrawlWarning { + constructor(root, count) { + this.root = root; + this.count = count; + } + static findByRoot(root) { + for (let i = 0; i < this.RECRAWL_WARNINGS.length; i++) { + const warning = this.RECRAWL_WARNINGS[i]; + if (warning.root === root) { + return warning; + } + } + return undefined; + } + static isRecrawlWarningDupe(warningMessage) { + if (typeof warningMessage !== 'string') { + return false; + } + const match = warningMessage.match(this.REGEXP); + if (!match) { + return false; + } + const count = Number(match[1]); + const root = match[2]; + const warning = this.findByRoot(root); + if (warning) { + // only keep the highest count, assume count to either stay the same or + // increase. + if (warning.count >= count) { + return true; + } else { + // update the existing warning to the latest (highest) count + warning.count = count; + return false; + } + } else { + this.RECRAWL_WARNINGS.push(new RecrawlWarning(root, count)); + return false; + } + } +} +RecrawlWarning.RECRAWL_WARNINGS = []; +RecrawlWarning.REGEXP = + /Recrawled this watch (\d+) times, most recently because:\n([^:]+)/; +module.exports = RecrawlWarning; diff --git a/node_modules/jest-haste-map/build/watchers/WatchmanWatcher.js b/node_modules/jest-haste-map/build/watchers/WatchmanWatcher.js new file mode 100644 index 00000000..7b341687 --- /dev/null +++ b/node_modules/jest-haste-map/build/watchers/WatchmanWatcher.js @@ -0,0 +1,383 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = WatchmanWatcher; +function _assert() { + const data = require('assert'); + _assert = function () { + return data; + }; + return data; +} +function _events() { + const data = require('events'); + _events = function () { + return data; + }; + return data; +} +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _fbWatchman() { + const data = _interopRequireDefault(require('fb-watchman')); + _fbWatchman = function () { + return data; + }; + return data; +} +function _gracefulFs() { + const data = _interopRequireDefault(require('graceful-fs')); + _gracefulFs = function () { + return data; + }; + return data; +} +var _RecrawlWarning = _interopRequireDefault(require('./RecrawlWarning')); +var _common = _interopRequireDefault(require('./common')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const CHANGE_EVENT = _common.default.CHANGE_EVENT; +const DELETE_EVENT = _common.default.DELETE_EVENT; +const ADD_EVENT = _common.default.ADD_EVENT; +const ALL_EVENT = _common.default.ALL_EVENT; +const SUB_NAME = 'sane-sub'; + +/** + * Watches `dir`. + * + * @class PollWatcher + * @param String dir + * @param {Object} opts + * @public + */ + +function WatchmanWatcher(dir, opts) { + _common.default.assignOptions(this, opts); + this.root = path().resolve(dir); + this.init(); +} +Object.setPrototypeOf( + WatchmanWatcher.prototype, + _events().EventEmitter.prototype +); + +/** + * Run the watchman `watch` command on the root and subscribe to changes. + * + * @private + */ + +WatchmanWatcher.prototype.init = function () { + if (this.client) { + this.client.removeAllListeners(); + } + const self = this; + this.client = new (_fbWatchman().default.Client)(); + this.client.on('error', error => { + self.emit('error', error); + }); + this.client.on('subscription', this.handleChangeEvent.bind(this)); + this.client.on('end', () => { + console.warn('[sane] Warning: Lost connection to watchman, reconnecting..'); + self.init(); + }); + this.watchProjectInfo = null; + function getWatchRoot() { + return self.watchProjectInfo ? self.watchProjectInfo.root : self.root; + } + function onCapability(error, resp) { + if (handleError(self, error)) { + // The Watchman watcher is unusable on this system, we cannot continue + return; + } + handleWarning(resp); + self.capabilities = resp.capabilities; + if (self.capabilities.relative_root) { + self.client.command(['watch-project', getWatchRoot()], onWatchProject); + } else { + self.client.command(['watch', getWatchRoot()], onWatch); + } + } + function onWatchProject(error, resp) { + if (handleError(self, error)) { + return; + } + handleWarning(resp); + self.watchProjectInfo = { + relativePath: resp.relative_path ? resp.relative_path : '', + root: resp.watch + }; + self.client.command(['clock', getWatchRoot()], onClock); + } + function onWatch(error, resp) { + if (handleError(self, error)) { + return; + } + handleWarning(resp); + self.client.command(['clock', getWatchRoot()], onClock); + } + function onClock(error, resp) { + if (handleError(self, error)) { + return; + } + handleWarning(resp); + const options = { + fields: ['name', 'exists', 'new'], + since: resp.clock + }; + + // If the server has the wildmatch capability available it supports + // the recursive **/*.foo style match and we can offload our globs + // to the watchman server. This saves both on data size to be + // communicated back to us and compute for evaluating the globs + // in our node process. + if (self.capabilities.wildmatch) { + if (self.globs.length === 0) { + if (!self.dot) { + // Make sure we honor the dot option if even we're not using globs. + options.expression = [ + 'match', + '**', + 'wholename', + { + includedotfiles: false + } + ]; + } + } else { + options.expression = ['anyof']; + for (const i in self.globs) { + options.expression.push([ + 'match', + self.globs[i], + 'wholename', + { + includedotfiles: self.dot + } + ]); + } + } + } + if (self.capabilities.relative_root) { + options.relative_root = self.watchProjectInfo.relativePath; + } + self.client.command( + ['subscribe', getWatchRoot(), SUB_NAME, options], + onSubscribe + ); + } + function onSubscribe(error, resp) { + if (handleError(self, error)) { + return; + } + handleWarning(resp); + self.emit('ready'); + } + self.client.capabilityCheck( + { + optional: ['wildmatch', 'relative_root'] + }, + onCapability + ); +}; + +/** + * Handles a change event coming from the subscription. + * + * @param {Object} resp + * @private + */ + +WatchmanWatcher.prototype.handleChangeEvent = function (resp) { + _assert().strict.equal( + resp.subscription, + SUB_NAME, + 'Invalid subscription event.' + ); + if (resp.is_fresh_instance) { + this.emit('fresh_instance'); + } + if (resp.is_fresh_instance) { + this.emit('fresh_instance'); + } + if (Array.isArray(resp.files)) { + resp.files.forEach(this.handleFileChange, this); + } +}; + +/** + * Handles a single change event record. + * + * @param {Object} changeDescriptor + * @private + */ + +WatchmanWatcher.prototype.handleFileChange = function (changeDescriptor) { + const self = this; + let absPath; + let relativePath; + if (this.capabilities.relative_root) { + relativePath = changeDescriptor.name; + absPath = path().join( + this.watchProjectInfo.root, + this.watchProjectInfo.relativePath, + relativePath + ); + } else { + absPath = path().join(this.root, changeDescriptor.name); + relativePath = changeDescriptor.name; + } + if ( + !(self.capabilities.wildmatch && !this.hasIgnore) && + !_common.default.isFileIncluded( + this.globs, + this.dot, + this.doIgnore, + relativePath + ) + ) { + return; + } + if (!changeDescriptor.exists) { + self.emitEvent(DELETE_EVENT, relativePath, self.root); + } else { + _gracefulFs().default.lstat(absPath, (error, stat) => { + // Files can be deleted between the event and the lstat call + // the most reliable thing to do here is to ignore the event. + if (error && error.code === 'ENOENT') { + return; + } + if (handleError(self, error)) { + return; + } + const eventType = changeDescriptor.new ? ADD_EVENT : CHANGE_EVENT; + + // Change event on dirs are mostly useless. + if (!(eventType === CHANGE_EVENT && stat.isDirectory())) { + self.emitEvent(eventType, relativePath, self.root, stat); + } + }); + } +}; + +/** + * Dispatches the event. + * + * @param {string} eventType + * @param {string} filepath + * @param {string} root + * @param {fs.Stat} stat + * @private + */ + +WatchmanWatcher.prototype.emitEvent = function ( + eventType, + filepath, + root, + stat +) { + this.emit(eventType, filepath, root, stat); + this.emit(ALL_EVENT, eventType, filepath, root, stat); +}; + +/** + * Closes the watcher. + * + */ + +WatchmanWatcher.prototype.close = function () { + this.client.removeAllListeners(); + this.client.end(); + return Promise.resolve(); +}; + +/** + * Handles an error and returns true if exists. + * + * @param {WatchmanWatcher} self + * @param {Error} error + * @private + */ + +function handleError(self, error) { + if (error != null) { + self.emit('error', error); + return true; + } else { + return false; + } +} + +/** + * Handles a warning in the watchman resp object. + * + * @param {object} resp + * @private + */ + +function handleWarning(resp) { + if ('warning' in resp) { + if (_RecrawlWarning.default.isRecrawlWarningDupe(resp.warning)) { + return true; + } + console.warn(resp.warning); + return true; + } else { + return false; + } +} diff --git a/node_modules/jest-haste-map/build/watchers/common.js b/node_modules/jest-haste-map/build/watchers/common.js new file mode 100644 index 00000000..b8fa0c30 --- /dev/null +++ b/node_modules/jest-haste-map/build/watchers/common.js @@ -0,0 +1,111 @@ +// vendored from https://github.com/amasad/sane/blob/64ff3a870c42e84f744086884bf55a4f9c22d376/src/common.js + +'use strict'; + +const platform = require('os').platform(); +const path = require('path'); +const anymatch = require('anymatch'); +const micromatch = require('micromatch'); +const walker = require('walker'); + +/** + * Constants + */ + +exports.DEFAULT_DELAY = 100; +exports.CHANGE_EVENT = 'change'; +exports.DELETE_EVENT = 'delete'; +exports.ADD_EVENT = 'add'; +exports.ALL_EVENT = 'all'; + +/** + * Assigns options to the watcher. + * + * @param {NodeWatcher|PollWatcher|WatchmanWatcher} watcher + * @param {?object} opts + * @return {boolean} + * @public + */ + +exports.assignOptions = function (watcher, opts) { + opts = opts || {}; + watcher.globs = opts.glob || []; + watcher.dot = opts.dot || false; + watcher.ignored = opts.ignored || false; + if (!Array.isArray(watcher.globs)) { + watcher.globs = [watcher.globs]; + } + watcher.hasIgnore = + Boolean(opts.ignored) && !(Array.isArray(opts) && opts.length > 0); + watcher.doIgnore = opts.ignored ? anymatch(opts.ignored) : () => false; + if (opts.watchman && opts.watchmanPath) { + watcher.watchmanPath = opts.watchmanPath; + } + return opts; +}; + +/** + * Checks a file relative path against the globs array. + * + * @param {array} globs + * @param {string} relativePath + * @return {boolean} + * @public + */ + +exports.isFileIncluded = function (globs, dot, doIgnore, relativePath) { + if (doIgnore(relativePath)) { + return false; + } + return globs.length + ? micromatch.some(relativePath, globs, { + dot + }) + : dot || micromatch.some(relativePath, '**/*'); +}; + +/** + * Traverse a directory recursively calling `callback` on every directory. + * + * @param {string} dir + * @param {function} dirCallback + * @param {function} fileCallback + * @param {function} endCallback + * @param {*} ignored + * @public + */ + +exports.recReaddir = function ( + dir, + dirCallback, + fileCallback, + endCallback, + errorCallback, + ignored +) { + walker(dir) + .filterDir(currentDir => !anymatch(ignored, currentDir)) + .on('dir', normalizeProxy(dirCallback)) + .on('file', normalizeProxy(fileCallback)) + .on('error', errorCallback) + .on('end', () => { + if (platform === 'win32') { + setTimeout(endCallback, 1000); + } else { + endCallback(); + } + }); +}; + +/** + * Returns a callback that when called will normalize a path and call the + * original callback + * + * @param {function} callback + * @return {function} + * @private + */ + +function normalizeProxy(callback) { + return (filepath, stats) => callback(path.normalize(filepath), stats); +} diff --git a/node_modules/jest-haste-map/build/worker.js b/node_modules/jest-haste-map/build/worker.js new file mode 100644 index 00000000..7f27df08 --- /dev/null +++ b/node_modules/jest-haste-map/build/worker.js @@ -0,0 +1,180 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.getSha1 = getSha1; +exports.worker = worker; +function _crypto() { + const data = require('crypto'); + _crypto = function () { + return data; + }; + return data; +} +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function fs() { + const data = _interopRequireWildcard(require('graceful-fs')); + fs = function () { + return data; + }; + return data; +} +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +var _blacklist = _interopRequireDefault(require('./blacklist')); +var _constants = _interopRequireDefault(require('./constants')); +var _dependencyExtractor = require('./lib/dependencyExtractor'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const PACKAGE_JSON = `${path().sep}package.json`; +let hasteImpl = null; +let hasteImplModulePath = null; +function sha1hex(content) { + return (0, _crypto().createHash)('sha1').update(content).digest('hex'); +} +async function worker(data) { + if ( + data.hasteImplModulePath && + data.hasteImplModulePath !== hasteImplModulePath + ) { + if (hasteImpl) { + throw new Error('jest-haste-map: hasteImplModulePath changed'); + } + hasteImplModulePath = data.hasteImplModulePath; + hasteImpl = require(hasteImplModulePath); + } + let content; + let dependencies; + let id; + let module; + let sha1; + const {computeDependencies, computeSha1, rootDir, filePath} = data; + const getContent = () => { + if (content === undefined) { + content = fs().readFileSync(filePath, 'utf8'); + } + return content; + }; + if (filePath.endsWith(PACKAGE_JSON)) { + // Process a package.json that is returned as a PACKAGE type with its name. + try { + const fileData = JSON.parse(getContent()); + if (fileData.name) { + const relativeFilePath = path().relative(rootDir, filePath); + id = fileData.name; + module = [relativeFilePath, _constants.default.PACKAGE]; + } + } catch (err) { + throw new Error(`Cannot parse ${filePath} as JSON: ${err.message}`); + } + } else if ( + !_blacklist.default.has(filePath.substring(filePath.lastIndexOf('.'))) + ) { + // Process a random file that is returned as a MODULE. + if (hasteImpl) { + id = hasteImpl.getHasteName(filePath); + } + if (computeDependencies) { + const content = getContent(); + const extractor = data.dependencyExtractor + ? await (0, _jestUtil().requireOrImportModule)( + data.dependencyExtractor, + false + ) + : _dependencyExtractor.extractor; + dependencies = Array.from( + extractor.extract( + content, + filePath, + _dependencyExtractor.extractor.extract + ) + ); + } + if (id) { + const relativeFilePath = path().relative(rootDir, filePath); + module = [relativeFilePath, _constants.default.MODULE]; + } + } + + // If a SHA-1 is requested on update, compute it. + if (computeSha1) { + sha1 = sha1hex(content || fs().readFileSync(filePath)); + } + return { + dependencies, + id, + module, + sha1 + }; +} +async function getSha1(data) { + const sha1 = data.computeSha1 + ? sha1hex(fs().readFileSync(data.filePath)) + : null; + return { + dependencies: undefined, + id: undefined, + module: undefined, + sha1 + }; +} diff --git a/node_modules/jest-haste-map/package.json b/node_modules/jest-haste-map/package.json new file mode 100644 index 00000000..ee459fdf --- /dev/null +++ b/node_modules/jest-haste-map/package.json @@ -0,0 +1,47 @@ +{ + "name": "jest-haste-map", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-haste-map" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "devDependencies": { + "@types/fb-watchman": "^2.0.0", + "@types/micromatch": "^4.0.1", + "slash": "^3.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-leak-detector/LICENSE b/node_modules/jest-leak-detector/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-leak-detector/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-leak-detector/README.md b/node_modules/jest-leak-detector/README.md new file mode 100644 index 00000000..5e650b73 --- /dev/null +++ b/node_modules/jest-leak-detector/README.md @@ -0,0 +1,27 @@ +# jest-leak-detector + +Module for verifying whether an object has been garbage collected or not. + +Internally creates a weak reference to the object, and forces garbage collection to happen. If the reference is gone, it meant no one else was pointing to the object. + +## Example + +```javascript +(async function () { + let reference = {}; + let isLeaking; + + const detector = new LeakDetector(reference); + + // Reference is held in memory. + isLeaking = await detector.isLeaking(); + console.log(isLeaking); // true + + // We destroy the only reference to the object. + reference = null; + + // Reference is gone. + isLeaking = await detector.isLeaking(); + console.log(isLeaking); // false +})(); +``` diff --git a/node_modules/jest-leak-detector/build/index.d.ts b/node_modules/jest-leak-detector/build/index.d.ts new file mode 100644 index 00000000..53555839 --- /dev/null +++ b/node_modules/jest-leak-detector/build/index.d.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/// + +/// +declare class LeakDetector { + private _isReferenceBeingHeld; + private readonly _finalizationRegistry?; + constructor(value: unknown); + isLeaking(): Promise; + private _runGarbageCollector; +} +export default LeakDetector; + +export {}; diff --git a/node_modules/jest-leak-detector/build/index.js b/node_modules/jest-leak-detector/build/index.js new file mode 100644 index 00000000..a8ccb1e3 --- /dev/null +++ b/node_modules/jest-leak-detector/build/index.js @@ -0,0 +1,99 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function _util() { + const data = require('util'); + _util = function () { + return data; + }; + return data; +} +function _v() { + const data = require('v8'); + _v = function () { + return data; + }; + return data; +} +function _vm() { + const data = require('vm'); + _vm = function () { + return data; + }; + return data; +} +function _jestGetType() { + const data = require('jest-get-type'); + _jestGetType = function () { + return data; + }; + return data; +} +function _prettyFormat() { + const data = require('pretty-format'); + _prettyFormat = function () { + return data; + }; + return data; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/// + +const tick = (0, _util().promisify)(setImmediate); +class LeakDetector { + _isReferenceBeingHeld; + _finalizationRegistry; + constructor(value) { + if ((0, _jestGetType().isPrimitive)(value)) { + throw new TypeError( + [ + 'Primitives cannot leak memory.', + `You passed a ${typeof value}: <${(0, _prettyFormat().format)( + value + )}>` + ].join(' ') + ); + } + + // When `_finalizationRegistry` is GCed the callback we set will no longer be called, + this._finalizationRegistry = new FinalizationRegistry(() => { + this._isReferenceBeingHeld = false; + }); + this._finalizationRegistry.register(value, undefined); + this._isReferenceBeingHeld = true; + + // Ensure value is not leaked by the closure created by the "weak" callback. + value = null; + } + async isLeaking() { + this._runGarbageCollector(); + + // wait some ticks to allow GC to run properly, see https://github.com/nodejs/node/issues/34636#issuecomment-669366235 + for (let i = 0; i < 10; i++) { + await tick(); + } + return this._isReferenceBeingHeld; + } + _runGarbageCollector() { + // @ts-expect-error: not a function on `globalThis` + const isGarbageCollectorHidden = globalThis.gc == null; + + // GC is usually hidden, so we have to expose it before running. + (0, _v().setFlagsFromString)('--expose-gc'); + (0, _vm().runInNewContext)('gc')(); + + // The GC was not initially exposed, so let's hide it again. + if (isGarbageCollectorHidden) { + (0, _v().setFlagsFromString)('--no-expose-gc'); + } + } +} +exports.default = LeakDetector; diff --git a/node_modules/jest-leak-detector/package.json b/node_modules/jest-leak-detector/package.json new file mode 100644 index 00000000..3cb14af6 --- /dev/null +++ b/node_modules/jest-leak-detector/package.json @@ -0,0 +1,33 @@ +{ + "name": "jest-leak-detector", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-leak-detector" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "devDependencies": { + "@types/node": "*" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-matcher-utils/LICENSE b/node_modules/jest-matcher-utils/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-matcher-utils/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-matcher-utils/README.md b/node_modules/jest-matcher-utils/README.md new file mode 100644 index 00000000..17e19c2b --- /dev/null +++ b/node_modules/jest-matcher-utils/README.md @@ -0,0 +1,24 @@ +# jest-matcher-utils + +This package's exports are most notably used by `expect`'s [`this.utils`](https://jestjs.io/docs/expect#thisutils). + +## Installation + +To add this package as a dependency of a project, run either of the following commands: + +- `npm install jest-matcher-utils` +- `yarn add jest-matcher-utils` + +## Exports ([src/index.ts](https://github.com/jestjs/jest/blob/HEAD/packages/jest-matcher-utils/src/index.ts)) + +### Functions + +`stringify` `highlightTrailingWhitespace` `printReceived` `printExpected` `printWithType` `ensureNoExpected` `ensureActualIsNumber` `ensureExpectedIsNumber` `ensureNumbers` `ensureExpectedIsNonNegativeInteger` `printDiffOrStringify` `diff` `pluralize` `getLabelPrinter` `matcherErrorMessage` `matcherHint` + +### Types + +`MatcherHintOptions` `DiffOptions` + +### Constants + +`EXPECTED_COLOR` `RECEIVED_COLOR` `INVERTED_COLOR` `BOLD_WEIGHT` `DIM_COLOR` `SUGGEST_TO_CONTAIN_EQUAL` diff --git a/node_modules/jest-matcher-utils/build/Replaceable.js b/node_modules/jest-matcher-utils/build/Replaceable.js new file mode 100644 index 00000000..f86596dc --- /dev/null +++ b/node_modules/jest-matcher-utils/build/Replaceable.js @@ -0,0 +1,64 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +var _jestGetType = require('jest-get-type'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const supportTypes = ['map', 'array', 'object']; +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +class Replaceable { + object; + type; + constructor(object) { + this.object = object; + this.type = (0, _jestGetType.getType)(object); + if (!supportTypes.includes(this.type)) { + throw new Error(`Type ${this.type} is not support in Replaceable!`); + } + } + static isReplaceable(obj1, obj2) { + const obj1Type = (0, _jestGetType.getType)(obj1); + const obj2Type = (0, _jestGetType.getType)(obj2); + return obj1Type === obj2Type && supportTypes.includes(obj1Type); + } + forEach(cb) { + if (this.type === 'object') { + const descriptors = Object.getOwnPropertyDescriptors(this.object); + [ + ...Object.keys(descriptors), + ...Object.getOwnPropertySymbols(descriptors) + ] + //@ts-expect-error because typescript do not support symbol key in object + //https://github.com/microsoft/TypeScript/issues/1863 + .filter(key => descriptors[key].enumerable) + .forEach(key => { + cb(this.object[key], key, this.object); + }); + } else { + this.object.forEach(cb); + } + } + get(key) { + if (this.type === 'map') { + return this.object.get(key); + } + return this.object[key]; + } + set(key, value) { + if (this.type === 'map') { + this.object.set(key, value); + } else { + this.object[key] = value; + } + } +} +/* eslint-enable */ +exports.default = Replaceable; diff --git a/node_modules/jest-matcher-utils/build/deepCyclicCopyReplaceable.js b/node_modules/jest-matcher-utils/build/deepCyclicCopyReplaceable.js new file mode 100644 index 00000000..2a16e578 --- /dev/null +++ b/node_modules/jest-matcher-utils/build/deepCyclicCopyReplaceable.js @@ -0,0 +1,111 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = deepCyclicCopyReplaceable; +var _prettyFormat = require('pretty-format'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const builtInObject = [ + Array, + Date, + Float32Array, + Float64Array, + Int16Array, + Int32Array, + Int8Array, + Map, + Set, + RegExp, + Uint16Array, + Uint32Array, + Uint8Array, + Uint8ClampedArray +]; +if (typeof Buffer !== 'undefined') { + builtInObject.push(Buffer); +} +const isBuiltInObject = object => builtInObject.includes(object.constructor); +const isMap = value => value.constructor === Map; +function deepCyclicCopyReplaceable(value, cycles = new WeakMap()) { + if (typeof value !== 'object' || value === null) { + return value; + } else if (cycles.has(value)) { + return cycles.get(value); + } else if (Array.isArray(value)) { + return deepCyclicCopyArray(value, cycles); + } else if (isMap(value)) { + return deepCyclicCopyMap(value, cycles); + } else if (isBuiltInObject(value)) { + return value; + } else if (_prettyFormat.plugins.DOMElement.test(value)) { + return value.cloneNode(true); + } else { + return deepCyclicCopyObject(value, cycles); + } +} +function deepCyclicCopyObject(object, cycles) { + const newObject = Object.create(Object.getPrototypeOf(object)); + let descriptors = {}; + let obj = object; + do { + descriptors = Object.assign( + {}, + Object.getOwnPropertyDescriptors(obj), + descriptors + ); + } while ( + (obj = Object.getPrototypeOf(obj)) && + obj !== Object.getPrototypeOf({}) + ); + cycles.set(object, newObject); + const newDescriptors = [ + ...Object.keys(descriptors), + ...Object.getOwnPropertySymbols(descriptors) + ].reduce( + //@ts-expect-error because typescript do not support symbol key in object + //https://github.com/microsoft/TypeScript/issues/1863 + (newDescriptors, key) => { + const enumerable = descriptors[key].enumerable; + newDescriptors[key] = { + configurable: true, + enumerable, + value: deepCyclicCopyReplaceable( + // this accesses the value or getter, depending. We just care about the value anyways, and this allows us to not mess with accessors + // it has the side effect of invoking the getter here though, rather than copying it over + object[key], + cycles + ), + writable: true + }; + return newDescriptors; + }, + {} + ); + //@ts-expect-error because typescript do not support symbol key in object + //https://github.com/microsoft/TypeScript/issues/1863 + return Object.defineProperties(newObject, newDescriptors); +} +function deepCyclicCopyArray(array, cycles) { + const newArray = new (Object.getPrototypeOf(array).constructor)(array.length); + const length = array.length; + cycles.set(array, newArray); + for (let i = 0; i < length; i++) { + newArray[i] = deepCyclicCopyReplaceable(array[i], cycles); + } + return newArray; +} +function deepCyclicCopyMap(map, cycles) { + const newMap = new Map(); + cycles.set(map, newMap); + map.forEach((value, key) => { + newMap.set(key, deepCyclicCopyReplaceable(value, cycles)); + }); + return newMap; +} diff --git a/node_modules/jest-matcher-utils/build/index.d.ts b/node_modules/jest-matcher-utils/build/index.d.ts new file mode 100644 index 00000000..a84b60b1 --- /dev/null +++ b/node_modules/jest-matcher-utils/build/index.d.ts @@ -0,0 +1,138 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import chalk = require('chalk'); +import {DiffOptions as DiffOptions_2} from 'jest-diff'; + +export declare const BOLD_WEIGHT: chalk.Chalk; + +export declare const diff: ( + a: unknown, + b: unknown, + options?: DiffOptions, +) => string | null; + +export declare type DiffOptions = DiffOptions_2; + +export declare const DIM_COLOR: chalk.Chalk; + +/** + * Ensures that `actual` is of type `number | bigint` + */ +export declare const ensureActualIsNumber: ( + actual: unknown, + matcherName: string, + options?: MatcherHintOptions, +) => void; + +export declare const ensureExpectedIsNonNegativeInteger: ( + expected: unknown, + matcherName: string, + options?: MatcherHintOptions, +) => void; + +/** + * Ensures that `expected` is of type `number | bigint` + */ +export declare const ensureExpectedIsNumber: ( + expected: unknown, + matcherName: string, + options?: MatcherHintOptions, +) => void; + +export declare const ensureNoExpected: ( + expected: unknown, + matcherName: string, + options?: MatcherHintOptions, +) => void; + +/** + * Ensures that `actual` & `expected` are of type `number | bigint` + */ +export declare const ensureNumbers: ( + actual: unknown, + expected: unknown, + matcherName: string, + options?: MatcherHintOptions, +) => void; + +export declare const EXPECTED_COLOR: chalk.Chalk; + +export declare const getLabelPrinter: (...strings: Array) => PrintLabel; + +export declare const highlightTrailingWhitespace: (text: string) => string; + +export declare const INVERTED_COLOR: chalk.Chalk; + +export declare const matcherErrorMessage: ( + hint: string, + generic: string, + specific?: string, +) => string; + +export declare const matcherHint: ( + matcherName: string, + received?: string, + expected?: string, + options?: MatcherHintOptions, +) => string; + +declare type MatcherHintColor = (arg: string) => string; + +export declare type MatcherHintOptions = { + comment?: string; + expectedColor?: MatcherHintColor; + isDirectExpectCall?: boolean; + isNot?: boolean; + promise?: string; + receivedColor?: MatcherHintColor; + secondArgument?: string; + secondArgumentColor?: MatcherHintColor; +}; + +export declare const pluralize: (word: string, count: number) => string; + +export declare const printDiffOrStringify: ( + expected: unknown, + received: unknown, + expectedLabel: string, + receivedLabel: string, + expand: boolean, +) => string; + +export declare const printExpected: (value: unknown) => string; + +declare type PrintLabel = (string: string) => string; + +export declare const printReceived: (object: unknown) => string; + +export declare function printWithType( + name: string, + value: T, + print: (value: T) => string, +): string; + +export declare const RECEIVED_COLOR: chalk.Chalk; + +export declare function replaceMatchedToAsymmetricMatcher( + replacedExpected: unknown, + replacedReceived: unknown, + expectedCycles: Array, + receivedCycles: Array, +): { + replacedExpected: unknown; + replacedReceived: unknown; +}; + +export declare const stringify: ( + object: unknown, + maxDepth?: number, + maxWidth?: number, +) => string; + +export declare const SUGGEST_TO_CONTAIN_EQUAL: string; + +export {}; diff --git a/node_modules/jest-matcher-utils/build/index.js b/node_modules/jest-matcher-utils/build/index.js new file mode 100644 index 00000000..fd64b63e --- /dev/null +++ b/node_modules/jest-matcher-utils/build/index.js @@ -0,0 +1,542 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.printReceived = + exports.printExpected = + exports.printDiffOrStringify = + exports.pluralize = + exports.matcherHint = + exports.matcherErrorMessage = + exports.highlightTrailingWhitespace = + exports.getLabelPrinter = + exports.ensureNumbers = + exports.ensureNoExpected = + exports.ensureExpectedIsNumber = + exports.ensureExpectedIsNonNegativeInteger = + exports.ensureActualIsNumber = + exports.diff = + exports.SUGGEST_TO_CONTAIN_EQUAL = + exports.RECEIVED_COLOR = + exports.INVERTED_COLOR = + exports.EXPECTED_COLOR = + exports.DIM_COLOR = + exports.BOLD_WEIGHT = + void 0; +exports.printWithType = printWithType; +exports.replaceMatchedToAsymmetricMatcher = replaceMatchedToAsymmetricMatcher; +exports.stringify = void 0; +var _chalk = _interopRequireDefault(require('chalk')); +var _jestDiff = require('jest-diff'); +var _jestGetType = require('jest-get-type'); +var _prettyFormat = require('pretty-format'); +var _Replaceable = _interopRequireDefault(require('./Replaceable')); +var _deepCyclicCopyReplaceable = _interopRequireDefault( + require('./deepCyclicCopyReplaceable') +); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable local/ban-types-eventually */ + +const { + AsymmetricMatcher, + DOMCollection, + DOMElement, + Immutable, + ReactElement, + ReactTestComponent +} = _prettyFormat.plugins; +const PLUGINS = [ + ReactTestComponent, + ReactElement, + DOMElement, + DOMCollection, + Immutable, + AsymmetricMatcher +]; + +// subset of Chalk type + +const EXPECTED_COLOR = _chalk.default.green; +exports.EXPECTED_COLOR = EXPECTED_COLOR; +const RECEIVED_COLOR = _chalk.default.red; +exports.RECEIVED_COLOR = RECEIVED_COLOR; +const INVERTED_COLOR = _chalk.default.inverse; +exports.INVERTED_COLOR = INVERTED_COLOR; +const BOLD_WEIGHT = _chalk.default.bold; +exports.BOLD_WEIGHT = BOLD_WEIGHT; +const DIM_COLOR = _chalk.default.dim; +exports.DIM_COLOR = DIM_COLOR; +const MULTILINE_REGEXP = /\n/; +const SPACE_SYMBOL = '\u{00B7}'; // middle dot + +const NUMBERS = [ + 'zero', + 'one', + 'two', + 'three', + 'four', + 'five', + 'six', + 'seven', + 'eight', + 'nine', + 'ten', + 'eleven', + 'twelve', + 'thirteen' +]; +const SUGGEST_TO_CONTAIN_EQUAL = _chalk.default.dim( + 'Looks like you wanted to test for object/array equality with the stricter `toContain` matcher. You probably need to use `toContainEqual` instead.' +); +exports.SUGGEST_TO_CONTAIN_EQUAL = SUGGEST_TO_CONTAIN_EQUAL; +const stringify = (object, maxDepth = 10, maxWidth = 10) => { + const MAX_LENGTH = 10000; + let result; + try { + result = (0, _prettyFormat.format)(object, { + maxDepth, + maxWidth, + min: true, + plugins: PLUGINS + }); + } catch { + result = (0, _prettyFormat.format)(object, { + callToJSON: false, + maxDepth, + maxWidth, + min: true, + plugins: PLUGINS + }); + } + if (result.length >= MAX_LENGTH && maxDepth > 1) { + return stringify(object, Math.floor(maxDepth / 2), maxWidth); + } else if (result.length >= MAX_LENGTH && maxWidth > 1) { + return stringify(object, maxDepth, Math.floor(maxWidth / 2)); + } else { + return result; + } +}; +exports.stringify = stringify; +const highlightTrailingWhitespace = text => + text.replace(/\s+$/gm, _chalk.default.inverse('$&')); + +// Instead of inverse highlight which now implies a change, +// replace common spaces with middle dot at the end of any line. +exports.highlightTrailingWhitespace = highlightTrailingWhitespace; +const replaceTrailingSpaces = text => + text.replace(/\s+$/gm, spaces => SPACE_SYMBOL.repeat(spaces.length)); +const printReceived = object => + RECEIVED_COLOR(replaceTrailingSpaces(stringify(object))); +exports.printReceived = printReceived; +const printExpected = value => + EXPECTED_COLOR(replaceTrailingSpaces(stringify(value))); +exports.printExpected = printExpected; +function printWithType(name, value, print) { + const type = (0, _jestGetType.getType)(value); + const hasType = + type !== 'null' && type !== 'undefined' + ? `${name} has type: ${type}\n` + : ''; + const hasValue = `${name} has value: ${print(value)}`; + return hasType + hasValue; +} +const ensureNoExpected = (expected, matcherName, options) => { + if (typeof expected !== 'undefined') { + // Prepend maybe not only for backward compatibility. + const matcherString = (options ? '' : '[.not]') + matcherName; + throw new Error( + matcherErrorMessage( + matcherHint(matcherString, undefined, '', options), + // Because expected is omitted in hint above, + // expected is black instead of green in message below. + 'this matcher must not have an expected argument', + printWithType('Expected', expected, printExpected) + ) + ); + } +}; + +/** + * Ensures that `actual` is of type `number | bigint` + */ +exports.ensureNoExpected = ensureNoExpected; +const ensureActualIsNumber = (actual, matcherName, options) => { + if (typeof actual !== 'number' && typeof actual !== 'bigint') { + // Prepend maybe not only for backward compatibility. + const matcherString = (options ? '' : '[.not]') + matcherName; + throw new Error( + matcherErrorMessage( + matcherHint(matcherString, undefined, undefined, options), + `${RECEIVED_COLOR('received')} value must be a number or bigint`, + printWithType('Received', actual, printReceived) + ) + ); + } +}; + +/** + * Ensures that `expected` is of type `number | bigint` + */ +exports.ensureActualIsNumber = ensureActualIsNumber; +const ensureExpectedIsNumber = (expected, matcherName, options) => { + if (typeof expected !== 'number' && typeof expected !== 'bigint') { + // Prepend maybe not only for backward compatibility. + const matcherString = (options ? '' : '[.not]') + matcherName; + throw new Error( + matcherErrorMessage( + matcherHint(matcherString, undefined, undefined, options), + `${EXPECTED_COLOR('expected')} value must be a number or bigint`, + printWithType('Expected', expected, printExpected) + ) + ); + } +}; + +/** + * Ensures that `actual` & `expected` are of type `number | bigint` + */ +exports.ensureExpectedIsNumber = ensureExpectedIsNumber; +const ensureNumbers = (actual, expected, matcherName, options) => { + ensureActualIsNumber(actual, matcherName, options); + ensureExpectedIsNumber(expected, matcherName, options); +}; +exports.ensureNumbers = ensureNumbers; +const ensureExpectedIsNonNegativeInteger = (expected, matcherName, options) => { + if ( + typeof expected !== 'number' || + !Number.isSafeInteger(expected) || + expected < 0 + ) { + // Prepend maybe not only for backward compatibility. + const matcherString = (options ? '' : '[.not]') + matcherName; + throw new Error( + matcherErrorMessage( + matcherHint(matcherString, undefined, undefined, options), + `${EXPECTED_COLOR('expected')} value must be a non-negative integer`, + printWithType('Expected', expected, printExpected) + ) + ); + } +}; + +// Given array of diffs, return concatenated string: +// * include common substrings +// * exclude change substrings which have opposite op +// * include change substrings which have argument op +// with inverse highlight only if there is a common substring +exports.ensureExpectedIsNonNegativeInteger = ensureExpectedIsNonNegativeInteger; +const getCommonAndChangedSubstrings = (diffs, op, hasCommonDiff) => + diffs.reduce( + (reduced, diff) => + reduced + + (diff[0] === _jestDiff.DIFF_EQUAL + ? diff[1] + : diff[0] !== op + ? '' + : hasCommonDiff + ? INVERTED_COLOR(diff[1]) + : diff[1]), + '' + ); +const isLineDiffable = (expected, received) => { + const expectedType = (0, _jestGetType.getType)(expected); + const receivedType = (0, _jestGetType.getType)(received); + if (expectedType !== receivedType) { + return false; + } + if ((0, _jestGetType.isPrimitive)(expected)) { + // Print generic line diff for strings only: + // * if neither string is empty + // * if either string has more than one line + return ( + typeof expected === 'string' && + typeof received === 'string' && + expected.length !== 0 && + received.length !== 0 && + (MULTILINE_REGEXP.test(expected) || MULTILINE_REGEXP.test(received)) + ); + } + if ( + expectedType === 'date' || + expectedType === 'function' || + expectedType === 'regexp' + ) { + return false; + } + if (expected instanceof Error && received instanceof Error) { + return false; + } + if ( + receivedType === 'object' && + typeof received.asymmetricMatch === 'function' + ) { + return false; + } + return true; +}; +const MAX_DIFF_STRING_LENGTH = 20000; +const printDiffOrStringify = ( + expected, + received, + expectedLabel, + receivedLabel, + expand // CLI options: true if `--expand` or false if `--no-expand` +) => { + if ( + typeof expected === 'string' && + typeof received === 'string' && + expected.length !== 0 && + received.length !== 0 && + expected.length <= MAX_DIFF_STRING_LENGTH && + received.length <= MAX_DIFF_STRING_LENGTH && + expected !== received + ) { + if (expected.includes('\n') || received.includes('\n')) { + return (0, _jestDiff.diffStringsUnified)(expected, received, { + aAnnotation: expectedLabel, + bAnnotation: receivedLabel, + changeLineTrailingSpaceColor: _chalk.default.bgYellow, + commonLineTrailingSpaceColor: _chalk.default.bgYellow, + emptyFirstOrLastLinePlaceholder: '↵', + // U+21B5 + expand, + includeChangeCounts: true + }); + } + const diffs = (0, _jestDiff.diffStringsRaw)(expected, received, true); + const hasCommonDiff = diffs.some(diff => diff[0] === _jestDiff.DIFF_EQUAL); + const printLabel = getLabelPrinter(expectedLabel, receivedLabel); + const expectedLine = + printLabel(expectedLabel) + + printExpected( + getCommonAndChangedSubstrings( + diffs, + _jestDiff.DIFF_DELETE, + hasCommonDiff + ) + ); + const receivedLine = + printLabel(receivedLabel) + + printReceived( + getCommonAndChangedSubstrings( + diffs, + _jestDiff.DIFF_INSERT, + hasCommonDiff + ) + ); + return `${expectedLine}\n${receivedLine}`; + } + if (isLineDiffable(expected, received)) { + const {replacedExpected, replacedReceived} = + replaceMatchedToAsymmetricMatcher(expected, received, [], []); + const difference = (0, _jestDiff.diff)(replacedExpected, replacedReceived, { + aAnnotation: expectedLabel, + bAnnotation: receivedLabel, + expand, + includeChangeCounts: true + }); + if ( + typeof difference === 'string' && + difference.includes(`- ${expectedLabel}`) && + difference.includes(`+ ${receivedLabel}`) + ) { + return difference; + } + } + const printLabel = getLabelPrinter(expectedLabel, receivedLabel); + const expectedLine = printLabel(expectedLabel) + printExpected(expected); + const receivedLine = + printLabel(receivedLabel) + + (stringify(expected) === stringify(received) + ? 'serializes to the same string' + : printReceived(received)); + return `${expectedLine}\n${receivedLine}`; +}; + +// Sometimes, e.g. when comparing two numbers, the output from jest-diff +// does not contain more information than the `Expected:` / `Received:` already gives. +// In those cases, we do not print a diff to make the output shorter and not redundant. +exports.printDiffOrStringify = printDiffOrStringify; +const shouldPrintDiff = (actual, expected) => { + if (typeof actual === 'number' && typeof expected === 'number') { + return false; + } + if (typeof actual === 'bigint' && typeof expected === 'bigint') { + return false; + } + if (typeof actual === 'boolean' && typeof expected === 'boolean') { + return false; + } + return true; +}; +function replaceMatchedToAsymmetricMatcher( + replacedExpected, + replacedReceived, + expectedCycles, + receivedCycles +) { + return _replaceMatchedToAsymmetricMatcher( + (0, _deepCyclicCopyReplaceable.default)(replacedExpected), + (0, _deepCyclicCopyReplaceable.default)(replacedReceived), + expectedCycles, + receivedCycles + ); +} +function _replaceMatchedToAsymmetricMatcher( + replacedExpected, + replacedReceived, + expectedCycles, + receivedCycles +) { + if (!_Replaceable.default.isReplaceable(replacedExpected, replacedReceived)) { + return { + replacedExpected, + replacedReceived + }; + } + if ( + expectedCycles.includes(replacedExpected) || + receivedCycles.includes(replacedReceived) + ) { + return { + replacedExpected, + replacedReceived + }; + } + expectedCycles.push(replacedExpected); + receivedCycles.push(replacedReceived); + const expectedReplaceable = new _Replaceable.default(replacedExpected); + const receivedReplaceable = new _Replaceable.default(replacedReceived); + expectedReplaceable.forEach((expectedValue, key) => { + const receivedValue = receivedReplaceable.get(key); + if (isAsymmetricMatcher(expectedValue)) { + if (expectedValue.asymmetricMatch(receivedValue)) { + receivedReplaceable.set(key, expectedValue); + } + } else if (isAsymmetricMatcher(receivedValue)) { + if (receivedValue.asymmetricMatch(expectedValue)) { + expectedReplaceable.set(key, receivedValue); + } + } else if ( + _Replaceable.default.isReplaceable(expectedValue, receivedValue) + ) { + const replaced = _replaceMatchedToAsymmetricMatcher( + expectedValue, + receivedValue, + expectedCycles, + receivedCycles + ); + expectedReplaceable.set(key, replaced.replacedExpected); + receivedReplaceable.set(key, replaced.replacedReceived); + } + }); + return { + replacedExpected: expectedReplaceable.object, + replacedReceived: receivedReplaceable.object + }; +} +function isAsymmetricMatcher(data) { + const type = (0, _jestGetType.getType)(data); + return type === 'object' && typeof data.asymmetricMatch === 'function'; +} +const diff = (a, b, options) => + shouldPrintDiff(a, b) ? (0, _jestDiff.diff)(a, b, options) : null; +exports.diff = diff; +const pluralize = (word, count) => + `${NUMBERS[count] || count} ${word}${count === 1 ? '' : 's'}`; + +// To display lines of labeled values as two columns with monospace alignment: +// given the strings which will describe the values, +// return function which given each string, returns the label: +// string, colon, space, and enough padding spaces to align the value. +exports.pluralize = pluralize; +const getLabelPrinter = (...strings) => { + const maxLength = strings.reduce( + (max, string) => (string.length > max ? string.length : max), + 0 + ); + return string => `${string}: ${' '.repeat(maxLength - string.length)}`; +}; +exports.getLabelPrinter = getLabelPrinter; +const matcherErrorMessage = ( + hint, + generic, + specific // incorrect value returned from call to printWithType +) => + `${hint}\n\n${_chalk.default.bold('Matcher error')}: ${generic}${ + typeof specific === 'string' ? `\n\n${specific}` : '' + }`; + +// Display assertion for the report when a test fails. +// New format: rejects/resolves, not, and matcher name have black color +// Old format: matcher name has dim color +exports.matcherErrorMessage = matcherErrorMessage; +const matcherHint = ( + matcherName, + received = 'received', + expected = 'expected', + options = {} +) => { + const { + comment = '', + expectedColor = EXPECTED_COLOR, + isDirectExpectCall = false, + // seems redundant with received === '' + isNot = false, + promise = '', + receivedColor = RECEIVED_COLOR, + secondArgument = '', + secondArgumentColor = EXPECTED_COLOR + } = options; + let hint = ''; + let dimString = 'expect'; // concatenate adjacent dim substrings + + if (!isDirectExpectCall && received !== '') { + hint += DIM_COLOR(`${dimString}(`) + receivedColor(received); + dimString = ')'; + } + if (promise !== '') { + hint += DIM_COLOR(`${dimString}.`) + promise; + dimString = ''; + } + if (isNot) { + hint += `${DIM_COLOR(`${dimString}.`)}not`; + dimString = ''; + } + if (matcherName.includes('.')) { + // Old format: for backward compatibility, + // especially without promise or isNot options + dimString += matcherName; + } else { + // New format: omit period from matcherName arg + hint += DIM_COLOR(`${dimString}.`) + matcherName; + dimString = ''; + } + if (expected === '') { + dimString += '()'; + } else { + hint += DIM_COLOR(`${dimString}(`) + expectedColor(expected); + if (secondArgument) { + hint += DIM_COLOR(', ') + secondArgumentColor(secondArgument); + } + dimString = ')'; + } + if (comment !== '') { + dimString += ` // ${comment}`; + } + if (dimString !== '') { + hint += DIM_COLOR(dimString); + } + return hint; +}; +exports.matcherHint = matcherHint; diff --git a/node_modules/jest-matcher-utils/package.json b/node_modules/jest-matcher-utils/package.json new file mode 100644 index 00000000..aa2a50ab --- /dev/null +++ b/node_modules/jest-matcher-utils/package.json @@ -0,0 +1,37 @@ +{ + "name": "jest-matcher-utils", + "description": "A set of utility functions for expect and related packages", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-matcher-utils" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "devDependencies": { + "@jest/test-utils": "^29.7.0", + "@types/node": "*" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-message-util/LICENSE b/node_modules/jest-message-util/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-message-util/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-message-util/build/index.d.ts b/node_modules/jest-message-util/build/index.d.ts new file mode 100644 index 00000000..05591794 --- /dev/null +++ b/node_modules/jest-message-util/build/index.d.ts @@ -0,0 +1,68 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import type {Config} from '@jest/types'; +import type {StackData} from 'stack-utils'; +import type {TestResult} from '@jest/types'; + +export declare const formatExecError: ( + error: Error | TestResult.SerializableError | string | number | undefined, + config: StackTraceConfig, + options: StackTraceOptions, + testPath?: string, + reuseMessage?: boolean, + noTitle?: boolean, +) => string; + +export declare const formatPath: ( + line: string, + config: StackTraceConfig, + relativeTestPath?: string | null, +) => string; + +export declare const formatResultsErrors: ( + testResults: Array, + config: StackTraceConfig, + options: StackTraceOptions, + testPath?: string, +) => string | null; + +export declare const formatStackTrace: ( + stack: string, + config: StackTraceConfig, + options: StackTraceOptions, + testPath?: string, +) => string; + +export declare interface Frame extends StackData { + file: string; +} + +export declare const getStackTraceLines: ( + stack: string, + options?: StackTraceOptions, +) => Array; + +export declare const getTopFrame: (lines: Array) => Frame | null; + +export declare const indentAllLines: (lines: string) => string; + +export declare const separateMessageFromStack: (content: string) => { + message: string; + stack: string; +}; + +export declare type StackTraceConfig = Pick< + Config.ProjectConfig, + 'rootDir' | 'testMatch' +>; + +export declare type StackTraceOptions = { + noStackTrace: boolean; + noCodeFrame?: boolean; +}; + +export {}; diff --git a/node_modules/jest-message-util/build/index.js b/node_modules/jest-message-util/build/index.js new file mode 100644 index 00000000..d1cff260 --- /dev/null +++ b/node_modules/jest-message-util/build/index.js @@ -0,0 +1,518 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.separateMessageFromStack = + exports.indentAllLines = + exports.getTopFrame = + exports.getStackTraceLines = + exports.formatStackTrace = + exports.formatResultsErrors = + exports.formatPath = + exports.formatExecError = + void 0; +var path = _interopRequireWildcard(require('path')); +var _url = require('url'); +var _util = require('util'); +var _codeFrame = require('@babel/code-frame'); +var _chalk = _interopRequireDefault(require('chalk')); +var fs = _interopRequireWildcard(require('graceful-fs')); +var _micromatch = _interopRequireDefault(require('micromatch')); +var _slash = _interopRequireDefault(require('slash')); +var _stackUtils = _interopRequireDefault(require('stack-utils')); +var _prettyFormat = require('pretty-format'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +var jestReadFile = + globalThis[Symbol.for('jest-native-read-file')] || fs.readFileSync; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +// stack utils tries to create pretty stack by making paths relative. +const stackUtils = new _stackUtils.default({ + cwd: 'something which does not exist' +}); +let nodeInternals = []; +try { + nodeInternals = _stackUtils.default.nodeInternals(); +} catch { + // `StackUtils.nodeInternals()` fails in browsers. We don't need to remove + // node internals in the browser though, so no issue. +} +const PATH_NODE_MODULES = `${path.sep}node_modules${path.sep}`; +const PATH_JEST_PACKAGES = `${path.sep}jest${path.sep}packages${path.sep}`; + +// filter for noisy stack trace lines +const JASMINE_IGNORE = + /^\s+at(?:(?:.jasmine-)|\s+jasmine\.buildExpectationResult)/; +const JEST_INTERNALS_IGNORE = + /^\s+at.*?jest(-.*?)?(\/|\\)(build|node_modules|packages)(\/|\\)/; +const ANONYMOUS_FN_IGNORE = /^\s+at .*$/; +const ANONYMOUS_PROMISE_IGNORE = /^\s+at (new )?Promise \(\).*$/; +const ANONYMOUS_GENERATOR_IGNORE = /^\s+at Generator.next \(\).*$/; +const NATIVE_NEXT_IGNORE = /^\s+at next \(native\).*$/; +const TITLE_INDENT = ' '; +const MESSAGE_INDENT = ' '; +const STACK_INDENT = ' '; +const ANCESTRY_SEPARATOR = ' \u203A '; +const TITLE_BULLET = _chalk.default.bold('\u25cf '); +const STACK_TRACE_COLOR = _chalk.default.dim; +const STACK_PATH_REGEXP = /\s*at.*\(?(:\d*:\d*|native)\)?/; +const EXEC_ERROR_MESSAGE = 'Test suite failed to run'; +const NOT_EMPTY_LINE_REGEXP = /^(?!$)/gm; +const indentAllLines = lines => + lines.replace(NOT_EMPTY_LINE_REGEXP, MESSAGE_INDENT); +exports.indentAllLines = indentAllLines; +const trim = string => (string || '').trim(); + +// Some errors contain not only line numbers in stack traces +// e.g. SyntaxErrors can contain snippets of code, and we don't +// want to trim those, because they may have pointers to the column/character +// which will get misaligned. +const trimPaths = string => + string.match(STACK_PATH_REGEXP) ? trim(string) : string; +const getRenderedCallsite = (fileContent, line, column) => { + let renderedCallsite = (0, _codeFrame.codeFrameColumns)( + fileContent, + { + start: { + column, + line + } + }, + { + highlightCode: true + } + ); + renderedCallsite = indentAllLines(renderedCallsite); + renderedCallsite = `\n${renderedCallsite}\n`; + return renderedCallsite; +}; +const blankStringRegexp = /^\s*$/; +function checkForCommonEnvironmentErrors(error) { + if ( + error.includes('ReferenceError: document is not defined') || + error.includes('ReferenceError: window is not defined') || + error.includes('ReferenceError: navigator is not defined') + ) { + return warnAboutWrongTestEnvironment(error, 'jsdom'); + } else if (error.includes('.unref is not a function')) { + return warnAboutWrongTestEnvironment(error, 'node'); + } + return error; +} +function warnAboutWrongTestEnvironment(error, env) { + return ( + _chalk.default.bold.red( + `The error below may be caused by using the wrong test environment, see ${_chalk.default.dim.underline( + 'https://jestjs.io/docs/configuration#testenvironment-string' + )}.\nConsider using the "${env}" test environment.\n\n` + ) + error + ); +} + +// ExecError is an error thrown outside of the test suite (not inside an `it` or +// `before/after each` hooks). If it's thrown, none of the tests in the file +// are executed. +const formatExecError = ( + error, + config, + options, + testPath, + reuseMessage, + noTitle +) => { + if (!error || typeof error === 'number') { + error = new Error(`Expected an Error, but "${String(error)}" was thrown`); + error.stack = ''; + } + let message, stack; + let cause = ''; + const subErrors = []; + if (typeof error === 'string' || !error) { + error || (error = 'EMPTY ERROR'); + message = ''; + stack = error; + } else { + message = error.message; + stack = + typeof error.stack === 'string' + ? error.stack + : `thrown: ${(0, _prettyFormat.format)(error, { + maxDepth: 3 + })}`; + if ('cause' in error) { + const prefix = '\n\nCause:\n'; + if (typeof error.cause === 'string' || typeof error.cause === 'number') { + cause += `${prefix}${error.cause}`; + } else if ( + _util.types.isNativeError(error.cause) || + error.cause instanceof Error + ) { + /* `isNativeError` is used, because the error might come from another realm. + `instanceof Error` is used because `isNativeError` does return `false` for some + things that are `instanceof Error` like the errors provided in + [verror](https://www.npmjs.com/package/verror) or [axios](https://axios-http.com). + */ + const formatted = formatExecError( + error.cause, + config, + options, + testPath, + reuseMessage, + true + ); + cause += `${prefix}${formatted}`; + } + } + if ('errors' in error && Array.isArray(error.errors)) { + for (const subError of error.errors) { + subErrors.push( + formatExecError( + subError, + config, + options, + testPath, + reuseMessage, + true + ) + ); + } + } + } + if (cause !== '') { + cause = indentAllLines(cause); + } + const separated = separateMessageFromStack(stack || ''); + stack = separated.stack; + if (separated.message.includes(trim(message))) { + // Often stack trace already contains the duplicate of the message + message = separated.message; + } + message = checkForCommonEnvironmentErrors(message); + message = indentAllLines(message); + stack = + stack && !options.noStackTrace + ? `\n${formatStackTrace(stack, config, options, testPath)}` + : ''; + if ( + typeof stack !== 'string' || + (blankStringRegexp.test(message) && blankStringRegexp.test(stack)) + ) { + // this can happen if an empty object is thrown. + message = `thrown: ${(0, _prettyFormat.format)(error, { + maxDepth: 3 + })}`; + } + let messageToUse; + if (reuseMessage || noTitle) { + messageToUse = ` ${message.trim()}`; + } else { + messageToUse = `${EXEC_ERROR_MESSAGE}\n\n${message}`; + } + const title = noTitle ? '' : `${TITLE_INDENT + TITLE_BULLET}`; + const subErrorStr = + subErrors.length > 0 + ? indentAllLines( + `\n\nErrors contained in AggregateError:\n${subErrors.join('\n')}` + ) + : ''; + return `${title + messageToUse + stack + cause + subErrorStr}\n`; +}; +exports.formatExecError = formatExecError; +const removeInternalStackEntries = (lines, options) => { + let pathCounter = 0; + return lines.filter(line => { + if (ANONYMOUS_FN_IGNORE.test(line)) { + return false; + } + if (ANONYMOUS_PROMISE_IGNORE.test(line)) { + return false; + } + if (ANONYMOUS_GENERATOR_IGNORE.test(line)) { + return false; + } + if (NATIVE_NEXT_IGNORE.test(line)) { + return false; + } + if (nodeInternals.some(internal => internal.test(line))) { + return false; + } + if (!STACK_PATH_REGEXP.test(line)) { + return true; + } + if (JASMINE_IGNORE.test(line)) { + return false; + } + if (++pathCounter === 1) { + return true; // always keep the first line even if it's from Jest + } + + if (options.noStackTrace) { + return false; + } + if (JEST_INTERNALS_IGNORE.test(line)) { + return false; + } + return true; + }); +}; +const formatPath = (line, config, relativeTestPath = null) => { + // Extract the file path from the trace line. + const match = line.match(/(^\s*at .*?\(?)([^()]+)(:[0-9]+:[0-9]+\)?.*$)/); + if (!match) { + return line; + } + let filePath = (0, _slash.default)(path.relative(config.rootDir, match[2])); + // highlight paths from the current test file + if ( + (config.testMatch && + config.testMatch.length && + (0, _micromatch.default)([filePath], config.testMatch).length > 0) || + filePath === relativeTestPath + ) { + filePath = _chalk.default.reset.cyan(filePath); + } + return STACK_TRACE_COLOR(match[1]) + filePath + STACK_TRACE_COLOR(match[3]); +}; +exports.formatPath = formatPath; +const getStackTraceLines = ( + stack, + options = { + noCodeFrame: false, + noStackTrace: false + } +) => removeInternalStackEntries(stack.split(/\n/), options); +exports.getStackTraceLines = getStackTraceLines; +const getTopFrame = lines => { + for (const line of lines) { + if (line.includes(PATH_NODE_MODULES) || line.includes(PATH_JEST_PACKAGES)) { + continue; + } + const parsedFrame = stackUtils.parseLine(line.trim()); + if (parsedFrame && parsedFrame.file) { + if (parsedFrame.file.startsWith('file://')) { + parsedFrame.file = (0, _slash.default)( + (0, _url.fileURLToPath)(parsedFrame.file) + ); + } + return parsedFrame; + } + } + return null; +}; +exports.getTopFrame = getTopFrame; +const formatStackTrace = (stack, config, options, testPath) => { + const lines = getStackTraceLines(stack, options); + let renderedCallsite = ''; + const relativeTestPath = testPath + ? (0, _slash.default)(path.relative(config.rootDir, testPath)) + : null; + if (!options.noStackTrace && !options.noCodeFrame) { + const topFrame = getTopFrame(lines); + if (topFrame) { + const {column, file: filename, line} = topFrame; + if (line && filename && path.isAbsolute(filename)) { + let fileContent; + try { + // TODO: check & read HasteFS instead of reading the filesystem: + // see: https://github.com/jestjs/jest/pull/5405#discussion_r164281696 + fileContent = jestReadFile(filename, 'utf8'); + renderedCallsite = getRenderedCallsite(fileContent, line, column); + } catch { + // the file does not exist or is inaccessible, we ignore + } + } + } + } + const stacktrace = lines + .filter(Boolean) + .map( + line => + STACK_INDENT + formatPath(trimPaths(line), config, relativeTestPath) + ) + .join('\n'); + return renderedCallsite + ? `${renderedCallsite}\n${stacktrace}` + : `\n${stacktrace}`; +}; +exports.formatStackTrace = formatStackTrace; +function isErrorOrStackWithCause(errorOrStack) { + return ( + typeof errorOrStack !== 'string' && + 'cause' in errorOrStack && + (typeof errorOrStack.cause === 'string' || + _util.types.isNativeError(errorOrStack.cause) || + errorOrStack.cause instanceof Error) + ); +} +function formatErrorStack(errorOrStack, config, options, testPath) { + // The stack of new Error('message') contains both the message and the stack, + // thus we need to sanitize and clean it for proper display using separateMessageFromStack. + const sourceStack = + typeof errorOrStack === 'string' ? errorOrStack : errorOrStack.stack || ''; + let {message, stack} = separateMessageFromStack(sourceStack); + stack = options.noStackTrace + ? '' + : `${STACK_TRACE_COLOR( + formatStackTrace(stack, config, options, testPath) + )}\n`; + message = checkForCommonEnvironmentErrors(message); + message = indentAllLines(message); + let cause = ''; + if (isErrorOrStackWithCause(errorOrStack)) { + const nestedCause = formatErrorStack( + errorOrStack.cause, + config, + options, + testPath + ); + cause = `\n${MESSAGE_INDENT}Cause:\n${nestedCause}`; + } + return `${message}\n${stack}${cause}`; +} +function failureDetailsToErrorOrStack(failureDetails, content) { + if (!failureDetails) { + return content; + } + if ( + _util.types.isNativeError(failureDetails) || + failureDetails instanceof Error + ) { + return failureDetails; // receiving raw errors for jest-circus + } + + if ( + typeof failureDetails === 'object' && + 'error' in failureDetails && + (_util.types.isNativeError(failureDetails.error) || + failureDetails.error instanceof Error) + ) { + return failureDetails.error; // receiving instances of FailedAssertion for jest-jasmine + } + + return content; +} +const formatResultsErrors = (testResults, config, options, testPath) => { + const failedResults = testResults.reduce((errors, result) => { + result.failureMessages.forEach((item, index) => { + errors.push({ + content: item, + failureDetails: result.failureDetails[index], + result + }); + }); + return errors; + }, []); + if (!failedResults.length) { + return null; + } + return failedResults + .map(({result, content, failureDetails}) => { + const rootErrorOrStack = failureDetailsToErrorOrStack( + failureDetails, + content + ); + const title = `${_chalk.default.bold.red( + TITLE_INDENT + + TITLE_BULLET + + result.ancestorTitles.join(ANCESTRY_SEPARATOR) + + (result.ancestorTitles.length ? ANCESTRY_SEPARATOR : '') + + result.title + )}\n`; + return `${title}\n${formatErrorStack( + rootErrorOrStack, + config, + options, + testPath + )}`; + }) + .join('\n'); +}; +exports.formatResultsErrors = formatResultsErrors; +const errorRegexp = /^Error:?\s*$/; +const removeBlankErrorLine = str => + str + .split('\n') + // Lines saying just `Error:` are useless + .filter(line => !errorRegexp.test(line)) + .join('\n') + .trimRight(); + +// jasmine and worker farm sometimes don't give us access to the actual +// Error object, so we have to regexp out the message from the stack string +// to format it. +const separateMessageFromStack = content => { + if (!content) { + return { + message: '', + stack: '' + }; + } + + // All lines up to what looks like a stack -- or if nothing looks like a stack + // (maybe it's a code frame instead), just the first non-empty line. + // If the error is a plain "Error:" instead of a SyntaxError or TypeError we + // remove the prefix from the message because it is generally not useful. + const messageMatch = content.match( + /^(?:Error: )?([\s\S]*?(?=\n\s*at\s.*:\d*:\d*)|\s*.*)([\s\S]*)$/ + ); + if (!messageMatch) { + // For typescript + throw new Error('If you hit this error, the regex above is buggy.'); + } + const message = removeBlankErrorLine(messageMatch[1]); + const stack = removeBlankErrorLine(messageMatch[2]); + return { + message, + stack + }; +}; +exports.separateMessageFromStack = separateMessageFromStack; diff --git a/node_modules/jest-message-util/build/types.js b/node_modules/jest-message-util/build/types.js new file mode 100644 index 00000000..ad9a93a7 --- /dev/null +++ b/node_modules/jest-message-util/build/types.js @@ -0,0 +1 @@ +'use strict'; diff --git a/node_modules/jest-message-util/package.json b/node_modules/jest-message-util/package.json new file mode 100644 index 00000000..8accd3f3 --- /dev/null +++ b/node_modules/jest-message-util/package.json @@ -0,0 +1,43 @@ +{ + "name": "jest-message-util", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-message-util" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "devDependencies": { + "@types/babel__code-frame": "^7.0.0", + "@types/graceful-fs": "^4.1.3", + "@types/micromatch": "^4.0.1", + "tempy": "^1.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-mock/LICENSE b/node_modules/jest-mock/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-mock/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-mock/README.md b/node_modules/jest-mock/README.md new file mode 100644 index 00000000..41588a07 --- /dev/null +++ b/node_modules/jest-mock/README.md @@ -0,0 +1,106 @@ +# jest-mock + +**Note:** More details on user side API can be found in [Jest documentation](https://jestjs.io/docs/mock-function-api). + +## API + +```js +import {ModuleMocker} from 'jest-mock'; +``` + +### `constructor(global)` + +Creates a new module mocker that generates mocks as if they were created in an environment with the given global object. + +### `generateFromMetadata(metadata)` + +Generates a mock based on the given metadata (Metadata for the mock in the schema returned by the `getMetadata()` method of this module). Mocks treat functions specially, and all mock functions have additional members, described in the documentation for `fn()` in this module. + +One important note: function prototypes are handled specially by this mocking framework. For functions with prototypes, when called as a constructor, the mock will install mocked function members on the instance. This allows different instances of the same constructor to have different values for its mocks member and its return values. + +### `getMetadata(component)` + +Inspects the argument and returns its schema in the following recursive format: + +``` +{ + type: ... + members: {} +} +``` + +Where type is one of `array`, `object`, `function`, or `ref`, and members is an optional dictionary where the keys are member names and the values are metadata objects. Function prototypes are defined by defining metadata for the `member.prototype` of the function. The type of a function prototype should always be `object`. For instance, a class might be defined like this: + +```js +const classDef = { + type: 'function', + members: { + staticMethod: {type: 'function'}, + prototype: { + type: 'object', + members: { + instanceMethod: {type: 'function'}, + }, + }, + }, +}; +``` + +Metadata may also contain references to other objects defined within the same metadata object. The metadata for the referent must be marked with `refID` key and an arbitrary value. The referrer must be marked with a `ref` key that has the same value as object with refID that it refers to. For instance, this metadata blob: + +```js +const refID = { + type: 'object', + refID: 1, + members: { + self: {ref: 1}, + }, +}; +``` + +Defines an object with a slot named `self` that refers back to the object. + +### `fn(implementation?)` + +Generates a stand-alone function with members that help drive unit tests or confirm expectations. Specifically, functions returned by this method have the following members: + +##### `.mock` + +An object with three members, `calls`, `instances` and `invocationCallOrder`, which are all lists. The items in the `calls` list are the arguments with which the function was called. The "instances" list stores the value of 'this' for each call to the function. This is useful for retrieving instances from a constructor. The `invocationCallOrder` lists the order in which the mock was called in relation to all mock calls, starting at 1. + +##### `.mockReturnValueOnce(value)` + +Pushes the given value onto a FIFO queue of return values for the function. + +##### `.mockReturnValue(value)` + +Sets the default return value for the function. + +##### `.mockImplementationOnce(function)` + +Pushes the given mock implementation onto a FIFO queue of mock implementations for the function. + +##### `.mockImplementation(function)` + +Sets the default mock implementation for the function. + +##### `.mockReturnThis()` + +Syntactic sugar for: + +```js +mockFn.mockImplementation(function () { + return this; +}); +``` + +In case both `.mockImplementationOnce()` / `.mockImplementation()` and `.mockReturnValueOnce()` / `.mockReturnValue()` are called. The priority of which to use is based on what is the last call: + +- if the last call is `.mockReturnValueOnce()` or `.mockReturnValue()`, use the specific return value or default return value. If specific return values are used up or no default return value is set, fall back to try `.mockImplementation()`; +- if the last call is `.mockImplementationOnce()` or `.mockImplementation()`, run the specific implementation and return the result or run default implementation and return the result. + +##### `.withImplementation(function, callback)` + +Temporarily overrides the default mock implementation within the callback, then restores it's previous implementation. + +If the callback is async or returns a `thenable`, `withImplementation` will return a promise. Awaiting the promise will await the callback and reset the implementation. diff --git a/node_modules/jest-mock/build/index.d.ts b/node_modules/jest-mock/build/index.d.ts new file mode 100644 index 00000000..2374fc6d --- /dev/null +++ b/node_modules/jest-mock/build/index.d.ts @@ -0,0 +1,406 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +export declare type ClassLike = { + new (...args: any): any; +}; + +export declare type ConstructorLikeKeys = keyof { + [K in keyof T as Required[K] extends ClassLike ? K : never]: T[K]; +}; + +export declare const fn: ( + implementation?: T | undefined, +) => Mock; + +export declare type FunctionLike = (...args: any) => any; + +export declare type MethodLikeKeys = keyof { + [K in keyof T as Required[K] extends FunctionLike ? K : never]: T[K]; +}; + +/** + * All what the internal typings need is to be sure that we have any-function. + * `FunctionLike` type ensures that and helps to constrain the type as well. + * The default of `UnknownFunction` makes sure that `any`s do not leak to the + * user side. For instance, calling `fn()` without implementation will return + * a mock of `(...args: Array) => unknown` type. If implementation + * is provided, its typings are inferred correctly. + */ +export declare interface Mock + extends Function, + MockInstance { + new (...args: Parameters): ReturnType; + (...args: Parameters): ReturnType; +} + +export declare type Mocked = T extends ClassLike + ? MockedClass + : T extends FunctionLike + ? MockedFunction + : T extends object + ? MockedObject + : T; + +export declare const mocked: { + ( + source: T, + options?: { + shallow: false; + }, + ): Mocked; + ( + source: T_1, + options: { + shallow: true; + }, + ): MockedShallow; +}; + +export declare type MockedClass = MockInstance< + (...args: ConstructorParameters) => Mocked> +> & + MockedObject; + +export declare type MockedFunction = MockInstance & + MockedObject; + +declare type MockedFunctionShallow = MockInstance & + T; + +export declare type MockedObject = { + [K in keyof T]: T[K] extends ClassLike + ? MockedClass + : T[K] extends FunctionLike + ? MockedFunction + : T[K] extends object + ? MockedObject + : T[K]; +} & T; + +declare type MockedObjectShallow = { + [K in keyof T]: T[K] extends ClassLike + ? MockedClass + : T[K] extends FunctionLike + ? MockedFunctionShallow + : T[K]; +} & T; + +export declare type MockedShallow = T extends ClassLike + ? MockedClass + : T extends FunctionLike + ? MockedFunctionShallow + : T extends object + ? MockedObjectShallow + : T; + +export declare type MockFunctionMetadata< + T = unknown, + MetadataType = MockMetadataType, +> = MockMetadata; + +export declare type MockFunctionMetadataType = MockMetadataType; + +declare type MockFunctionResult = + | MockFunctionResultIncomplete + | MockFunctionResultReturn + | MockFunctionResultThrow; + +declare type MockFunctionResultIncomplete = { + type: 'incomplete'; + /** + * Result of a single call to a mock function that has not yet completed. + * This occurs if you test the result from within the mock function itself, + * or from within a function that was called by the mock. + */ + value: undefined; +}; + +declare type MockFunctionResultReturn< + T extends FunctionLike = UnknownFunction, +> = { + type: 'return'; + /** + * Result of a single call to a mock function that returned. + */ + value: ReturnType; +}; + +declare type MockFunctionResultThrow = { + type: 'throw'; + /** + * Result of a single call to a mock function that threw. + */ + value: unknown; +}; + +declare type MockFunctionState = { + /** + * List of the call arguments of all calls that have been made to the mock. + */ + calls: Array>; + /** + * List of all the object instances that have been instantiated from the mock. + */ + instances: Array>; + /** + * List of all the function contexts that have been applied to calls to the mock. + */ + contexts: Array>; + /** + * List of the call order indexes of the mock. Jest is indexing the order of + * invocations of all mocks in a test file. The index is starting with `1`. + */ + invocationCallOrder: Array; + /** + * List of the call arguments of the last call that was made to the mock. + * If the function was not called, it will return `undefined`. + */ + lastCall?: Parameters; + /** + * List of the results of all calls that have been made to the mock. + */ + results: Array>; +}; + +export declare interface MockInstance< + T extends FunctionLike = UnknownFunction, +> { + _isMockFunction: true; + _protoImpl: Function; + getMockImplementation(): T | undefined; + getMockName(): string; + mock: MockFunctionState; + mockClear(): this; + mockReset(): this; + mockRestore(): void; + mockImplementation(fn: T): this; + mockImplementationOnce(fn: T): this; + withImplementation(fn: T, callback: () => Promise): Promise; + withImplementation(fn: T, callback: () => void): void; + mockName(name: string): this; + mockReturnThis(): this; + mockReturnValue(value: ReturnType): this; + mockReturnValueOnce(value: ReturnType): this; + mockResolvedValue(value: ResolveType): this; + mockResolvedValueOnce(value: ResolveType): this; + mockRejectedValue(value: RejectType): this; + mockRejectedValueOnce(value: RejectType): this; +} + +export declare type MockMetadata = { + ref?: number; + members?: Record>; + mockImpl?: T; + name?: string; + refID?: number; + type?: MetadataType; + value?: T; + length?: number; +}; + +export declare type MockMetadataType = + | 'object' + | 'array' + | 'regexp' + | 'function' + | 'constant' + | 'collection' + | 'null' + | 'undefined'; + +export declare class ModuleMocker { + private readonly _environmentGlobal; + private _mockState; + private _mockConfigRegistry; + private _spyState; + private _invocationCallCounter; + /** + * @see README.md + * @param global Global object of the test environment, used to create + * mocks + */ + constructor(global: typeof globalThis); + private _getSlots; + private _ensureMockConfig; + private _ensureMockState; + private _defaultMockConfig; + private _defaultMockState; + private _makeComponent; + private _createMockFunction; + private _generateMock; + /** + * Check whether the given property of an object has been already replaced. + */ + private _findReplacedProperty; + /** + * @see README.md + * @param metadata Metadata for the mock in the schema returned by the + * getMetadata method of this module. + */ + generateFromMetadata(metadata: MockMetadata): Mocked; + /** + * @see README.md + * @param component The component for which to retrieve metadata. + */ + getMetadata( + component: T, + _refs?: Map, + ): MockMetadata | null; + isMockFunction( + fn: MockInstance, + ): fn is MockInstance; + isMockFunction

, R>( + fn: (...args: P) => R, + ): fn is Mock<(...args: P) => R>; + isMockFunction(fn: unknown): fn is Mock; + fn(implementation?: T): Mock; + spyOn< + T extends object, + K extends PropertyLikeKeys, + V extends Required[K], + A extends 'get' | 'set', + >( + object: T, + methodKey: K, + accessType: A, + ): A extends 'get' + ? SpiedGetter + : A extends 'set' + ? SpiedSetter + : never; + spyOn< + T extends object, + K extends ConstructorLikeKeys | MethodLikeKeys, + V extends Required[K], + >( + object: T, + methodKey: K, + ): V extends ClassLike | FunctionLike ? Spied : never; + private _spyOnProperty; + replaceProperty( + object: T, + propertyKey: K, + value: T[K], + ): Replaced; + clearAllMocks(): void; + resetAllMocks(): void; + restoreAllMocks(): void; + private _typeOf; + mocked( + source: T, + options?: { + shallow: false; + }, + ): Mocked; + mocked( + source: T, + options: { + shallow: true; + }, + ): MockedShallow; +} + +export declare type PropertyLikeKeys = Exclude< + keyof T, + ConstructorLikeKeys | MethodLikeKeys +>; + +declare type RejectType = + ReturnType extends PromiseLike ? unknown : never; + +export declare interface Replaced { + /** + * Restore property to its original value known at the time of mocking. + */ + restore(): void; + /** + * Change the value of the property. + */ + replaceValue(value: T): this; +} + +export declare const replaceProperty: ( + object: T, + propertyKey: K, + value: T[K], +) => Replaced; + +declare type ResolveType = + ReturnType extends PromiseLike ? U : never; + +export declare type Spied = + T extends ClassLike + ? SpiedClass + : T extends FunctionLike + ? SpiedFunction + : never; + +export declare type SpiedClass = + MockInstance<(...args: ConstructorParameters) => InstanceType>; + +export declare type SpiedFunction = + MockInstance<(...args: Parameters) => ReturnType>; + +export declare type SpiedGetter = MockInstance<() => T>; + +export declare type SpiedSetter = MockInstance<(arg: T) => void>; + +export declare interface SpyInstance + extends MockInstance {} + +export declare const spyOn: { + < + T extends object, + K_2 extends Exclude< + keyof T, + | keyof { + [K in keyof T as Required[K] extends ClassLike ? K : never]: T[K]; + } + | keyof { + [K_1 in keyof T as Required[K_1] extends FunctionLike + ? K_1 + : never]: T[K_1]; + } + >, + V extends Required[K_2], + A extends 'set' | 'get', + >( + object: T, + methodKey: K_2, + accessType: A, + ): A extends 'get' + ? SpiedGetter + : A extends 'set' + ? SpiedSetter + : never; + < + T_1 extends object, + K_5 extends + | keyof { + [K_3 in keyof T_1 as Required[K_3] extends ClassLike + ? K_3 + : never]: T_1[K_3]; + } + | keyof { + [K_4 in keyof T_1 as Required[K_4] extends FunctionLike + ? K_4 + : never]: T_1[K_4]; + }, + V_1 extends Required[K_5], + >( + object: T_1, + methodKey: K_5, + ): V_1 extends ClassLike | FunctionLike ? Spied : never; +}; + +export declare type UnknownClass = { + new (...args: Array): unknown; +}; + +export declare type UnknownFunction = (...args: Array) => unknown; + +export {}; diff --git a/node_modules/jest-mock/build/index.js b/node_modules/jest-mock/build/index.js new file mode 100644 index 00000000..e070a509 --- /dev/null +++ b/node_modules/jest-mock/build/index.js @@ -0,0 +1,978 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.spyOn = + exports.replaceProperty = + exports.mocked = + exports.fn = + exports.ModuleMocker = + void 0; +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable local/ban-types-eventually, local/prefer-rest-params-eventually */ + +// TODO remove re-export in Jest 30 + +// TODO remove re-export in Jest 30 + +// TODO in Jest 30 remove `SpyInstance` in favour of `Spied` +// eslint-disable-next-line @typescript-eslint/no-empty-interface +/** + * All what the internal typings need is to be sure that we have any-function. + * `FunctionLike` type ensures that and helps to constrain the type as well. + * The default of `UnknownFunction` makes sure that `any`s do not leak to the + * user side. For instance, calling `fn()` without implementation will return + * a mock of `(...args: Array) => unknown` type. If implementation + * is provided, its typings are inferred correctly. + */ +const MOCK_CONSTRUCTOR_NAME = 'mockConstructor'; +const FUNCTION_NAME_RESERVED_PATTERN = /[\s!-/:-@[-`{-~]/; +const FUNCTION_NAME_RESERVED_REPLACE = new RegExp( + FUNCTION_NAME_RESERVED_PATTERN.source, + 'g' +); +const RESERVED_KEYWORDS = new Set([ + 'arguments', + 'await', + 'break', + 'case', + 'catch', + 'class', + 'const', + 'continue', + 'debugger', + 'default', + 'delete', + 'do', + 'else', + 'enum', + 'eval', + 'export', + 'extends', + 'false', + 'finally', + 'for', + 'function', + 'if', + 'implements', + 'import', + 'in', + 'instanceof', + 'interface', + 'let', + 'new', + 'null', + 'package', + 'private', + 'protected', + 'public', + 'return', + 'static', + 'super', + 'switch', + 'this', + 'throw', + 'true', + 'try', + 'typeof', + 'var', + 'void', + 'while', + 'with', + 'yield' +]); +function matchArity(fn, length) { + let mockConstructor; + switch (length) { + case 1: + mockConstructor = function (_a) { + return fn.apply(this, arguments); + }; + break; + case 2: + mockConstructor = function (_a, _b) { + return fn.apply(this, arguments); + }; + break; + case 3: + mockConstructor = function (_a, _b, _c) { + return fn.apply(this, arguments); + }; + break; + case 4: + mockConstructor = function (_a, _b, _c, _d) { + return fn.apply(this, arguments); + }; + break; + case 5: + mockConstructor = function (_a, _b, _c, _d, _e) { + return fn.apply(this, arguments); + }; + break; + case 6: + mockConstructor = function (_a, _b, _c, _d, _e, _f) { + return fn.apply(this, arguments); + }; + break; + case 7: + mockConstructor = function (_a, _b, _c, _d, _e, _f, _g) { + return fn.apply(this, arguments); + }; + break; + case 8: + mockConstructor = function (_a, _b, _c, _d, _e, _f, _g, _h) { + return fn.apply(this, arguments); + }; + break; + case 9: + mockConstructor = function (_a, _b, _c, _d, _e, _f, _g, _h, _i) { + return fn.apply(this, arguments); + }; + break; + default: + mockConstructor = function () { + return fn.apply(this, arguments); + }; + break; + } + return mockConstructor; +} +function getObjectType(value) { + return Object.prototype.toString.apply(value).slice(8, -1); +} +function getType(ref) { + const typeName = getObjectType(ref); + if ( + typeName === 'Function' || + typeName === 'AsyncFunction' || + typeName === 'GeneratorFunction' || + typeName === 'AsyncGeneratorFunction' + ) { + return 'function'; + } else if (Array.isArray(ref)) { + return 'array'; + } else if (typeName === 'Object' || typeName === 'Module') { + return 'object'; + } else if ( + typeName === 'Number' || + typeName === 'String' || + typeName === 'Boolean' || + typeName === 'Symbol' + ) { + return 'constant'; + } else if ( + typeName === 'Map' || + typeName === 'WeakMap' || + typeName === 'Set' + ) { + return 'collection'; + } else if (typeName === 'RegExp') { + return 'regexp'; + } else if (ref === undefined) { + return 'undefined'; + } else if (ref === null) { + return 'null'; + } else { + return null; + } +} +function isReadonlyProp(object, prop) { + if ( + prop === 'arguments' || + prop === 'caller' || + prop === 'callee' || + prop === 'name' || + prop === 'length' + ) { + const typeName = getObjectType(object); + return ( + typeName === 'Function' || + typeName === 'AsyncFunction' || + typeName === 'GeneratorFunction' || + typeName === 'AsyncGeneratorFunction' + ); + } + if ( + prop === 'source' || + prop === 'global' || + prop === 'ignoreCase' || + prop === 'multiline' + ) { + return getObjectType(object) === 'RegExp'; + } + return false; +} +class ModuleMocker { + _environmentGlobal; + _mockState; + _mockConfigRegistry; + _spyState; + _invocationCallCounter; + + /** + * @see README.md + * @param global Global object of the test environment, used to create + * mocks + */ + constructor(global) { + this._environmentGlobal = global; + this._mockState = new WeakMap(); + this._mockConfigRegistry = new WeakMap(); + this._spyState = new Set(); + this._invocationCallCounter = 1; + } + _getSlots(object) { + if (!object) { + return []; + } + const slots = new Set(); + const EnvObjectProto = this._environmentGlobal.Object.prototype; + const EnvFunctionProto = this._environmentGlobal.Function.prototype; + const EnvRegExpProto = this._environmentGlobal.RegExp.prototype; + + // Also check the builtins in the current context as they leak through + // core node modules. + const ObjectProto = Object.prototype; + const FunctionProto = Function.prototype; + const RegExpProto = RegExp.prototype; + + // Properties of Object.prototype, Function.prototype and RegExp.prototype + // are never reported as slots + while ( + object != null && + object !== EnvObjectProto && + object !== EnvFunctionProto && + object !== EnvRegExpProto && + object !== ObjectProto && + object !== FunctionProto && + object !== RegExpProto + ) { + const ownNames = Object.getOwnPropertyNames(object); + for (let i = 0; i < ownNames.length; i++) { + const prop = ownNames[i]; + if (!isReadonlyProp(object, prop)) { + const propDesc = Object.getOwnPropertyDescriptor(object, prop); + if ((propDesc !== undefined && !propDesc.get) || object.__esModule) { + slots.add(prop); + } + } + } + object = Object.getPrototypeOf(object); + } + return Array.from(slots); + } + _ensureMockConfig(f) { + let config = this._mockConfigRegistry.get(f); + if (!config) { + config = this._defaultMockConfig(); + this._mockConfigRegistry.set(f, config); + } + return config; + } + _ensureMockState(f) { + let state = this._mockState.get(f); + if (!state) { + state = this._defaultMockState(); + this._mockState.set(f, state); + } + if (state.calls.length > 0) { + state.lastCall = state.calls[state.calls.length - 1]; + } + return state; + } + _defaultMockConfig() { + return { + mockImpl: undefined, + mockName: 'jest.fn()', + specificMockImpls: [] + }; + } + _defaultMockState() { + return { + calls: [], + contexts: [], + instances: [], + invocationCallOrder: [], + results: [] + }; + } + _makeComponent(metadata, restore) { + if (metadata.type === 'object') { + return new this._environmentGlobal.Object(); + } else if (metadata.type === 'array') { + return new this._environmentGlobal.Array(); + } else if (metadata.type === 'regexp') { + return new this._environmentGlobal.RegExp(''); + } else if ( + metadata.type === 'constant' || + metadata.type === 'collection' || + metadata.type === 'null' || + metadata.type === 'undefined' + ) { + return metadata.value; + } else if (metadata.type === 'function') { + const prototype = + (metadata.members && + metadata.members.prototype && + metadata.members.prototype.members) || + {}; + const prototypeSlots = this._getSlots(prototype); + // eslint-disable-next-line @typescript-eslint/no-this-alias + const mocker = this; + const mockConstructor = matchArity(function (...args) { + const mockState = mocker._ensureMockState(f); + const mockConfig = mocker._ensureMockConfig(f); + mockState.instances.push(this); + mockState.contexts.push(this); + mockState.calls.push(args); + // Create and record an "incomplete" mock result immediately upon + // calling rather than waiting for the mock to return. This avoids + // issues caused by recursion where results can be recorded in the + // wrong order. + const mockResult = { + type: 'incomplete', + value: undefined + }; + mockState.results.push(mockResult); + mockState.invocationCallOrder.push(mocker._invocationCallCounter++); + + // Will be set to the return value of the mock if an error is not thrown + let finalReturnValue; + // Will be set to the error that is thrown by the mock (if it throws) + let thrownError; + // Will be set to true if the mock throws an error. The presence of a + // value in `thrownError` is not a 100% reliable indicator because a + // function could throw a value of undefined. + let callDidThrowError = false; + try { + // The bulk of the implementation is wrapped in an immediately + // executed arrow function so the return value of the mock function + // can be easily captured and recorded, despite the many separate + // return points within the logic. + finalReturnValue = (() => { + if (this instanceof f) { + // This is probably being called as a constructor + prototypeSlots.forEach(slot => { + // Copy prototype methods to the instance to make + // it easier to interact with mock instance call and + // return values + if (prototype[slot].type === 'function') { + // @ts-expect-error no index signature + const protoImpl = this[slot]; + // @ts-expect-error no index signature + this[slot] = mocker.generateFromMetadata(prototype[slot]); + // @ts-expect-error no index signature + this[slot]._protoImpl = protoImpl; + } + }); + + // Run the mock constructor implementation + const mockImpl = mockConfig.specificMockImpls.length + ? mockConfig.specificMockImpls.shift() + : mockConfig.mockImpl; + return mockImpl && mockImpl.apply(this, arguments); + } + + // If mockImplementationOnce()/mockImplementation() is last set, + // implementation use the mock + let specificMockImpl = mockConfig.specificMockImpls.shift(); + if (specificMockImpl === undefined) { + specificMockImpl = mockConfig.mockImpl; + } + if (specificMockImpl) { + return specificMockImpl.apply(this, arguments); + } + // Otherwise use prototype implementation + if (f._protoImpl) { + return f._protoImpl.apply(this, arguments); + } + return undefined; + })(); + } catch (error) { + // Store the thrown error so we can record it, then re-throw it. + thrownError = error; + callDidThrowError = true; + throw error; + } finally { + // Record the result of the function. + // NOTE: Intentionally NOT pushing/indexing into the array of mock + // results here to avoid corrupting results data if mockClear() + // is called during the execution of the mock. + // @ts-expect-error reassigning 'incomplete' + mockResult.type = callDidThrowError ? 'throw' : 'return'; + mockResult.value = callDidThrowError ? thrownError : finalReturnValue; + } + return finalReturnValue; + }, metadata.length || 0); + const f = this._createMockFunction(metadata, mockConstructor); + f._isMockFunction = true; + f.getMockImplementation = () => this._ensureMockConfig(f).mockImpl; + if (typeof restore === 'function') { + this._spyState.add(restore); + } + this._mockState.set(f, this._defaultMockState()); + this._mockConfigRegistry.set(f, this._defaultMockConfig()); + Object.defineProperty(f, 'mock', { + configurable: false, + enumerable: true, + get: () => this._ensureMockState(f), + set: val => this._mockState.set(f, val) + }); + f.mockClear = () => { + this._mockState.delete(f); + return f; + }; + f.mockReset = () => { + f.mockClear(); + this._mockConfigRegistry.delete(f); + return f; + }; + f.mockRestore = () => { + f.mockReset(); + return restore ? restore() : undefined; + }; + f.mockReturnValueOnce = value => + // next function call will return this value or default return value + f.mockImplementationOnce(() => value); + f.mockResolvedValueOnce = value => + f.mockImplementationOnce(() => + this._environmentGlobal.Promise.resolve(value) + ); + f.mockRejectedValueOnce = value => + f.mockImplementationOnce(() => + this._environmentGlobal.Promise.reject(value) + ); + f.mockReturnValue = value => + // next function call will return specified return value or this one + f.mockImplementation(() => value); + f.mockResolvedValue = value => + f.mockImplementation(() => + this._environmentGlobal.Promise.resolve(value) + ); + f.mockRejectedValue = value => + f.mockImplementation(() => + this._environmentGlobal.Promise.reject(value) + ); + f.mockImplementationOnce = fn => { + // next function call will use this mock implementation return value + // or default mock implementation return value + const mockConfig = this._ensureMockConfig(f); + mockConfig.specificMockImpls.push(fn); + return f; + }; + f.withImplementation = withImplementation.bind(this); + function withImplementation(fn, callback) { + // Remember previous mock implementation, then set new one + const mockConfig = this._ensureMockConfig(f); + const previousImplementation = mockConfig.mockImpl; + const previousSpecificImplementations = mockConfig.specificMockImpls; + mockConfig.mockImpl = fn; + mockConfig.specificMockImpls = []; + const returnedValue = callback(); + if ((0, _jestUtil().isPromise)(returnedValue)) { + return returnedValue.then(() => { + mockConfig.mockImpl = previousImplementation; + mockConfig.specificMockImpls = previousSpecificImplementations; + }); + } else { + mockConfig.mockImpl = previousImplementation; + mockConfig.specificMockImpls = previousSpecificImplementations; + } + } + f.mockImplementation = fn => { + // next function call will use mock implementation return value + const mockConfig = this._ensureMockConfig(f); + mockConfig.mockImpl = fn; + return f; + }; + f.mockReturnThis = () => + f.mockImplementation(function () { + return this; + }); + f.mockName = name => { + if (name) { + const mockConfig = this._ensureMockConfig(f); + mockConfig.mockName = name; + } + return f; + }; + f.getMockName = () => { + const mockConfig = this._ensureMockConfig(f); + return mockConfig.mockName || 'jest.fn()'; + }; + if (metadata.mockImpl) { + f.mockImplementation(metadata.mockImpl); + } + return f; + } else { + const unknownType = metadata.type || 'undefined type'; + throw new Error(`Unrecognized type ${unknownType}`); + } + } + _createMockFunction(metadata, mockConstructor) { + let name = metadata.name; + if (!name) { + return mockConstructor; + } + + // Preserve `name` property of mocked function. + const boundFunctionPrefix = 'bound '; + let bindCall = ''; + // if-do-while for perf reasons. The common case is for the if to fail. + if (name.startsWith(boundFunctionPrefix)) { + do { + name = name.substring(boundFunctionPrefix.length); + // Call bind() just to alter the function name. + bindCall = '.bind(null)'; + } while (name && name.startsWith(boundFunctionPrefix)); + } + + // Special case functions named `mockConstructor` to guard for infinite loops + if (name === MOCK_CONSTRUCTOR_NAME) { + return mockConstructor; + } + if ( + // It's a syntax error to define functions with a reserved keyword as name + RESERVED_KEYWORDS.has(name) || + // It's also a syntax error to define functions with a name that starts with a number + /^\d/.test(name) + ) { + name = `$${name}`; + } + + // It's also a syntax error to define a function with a reserved character + // as part of it's name. + if (FUNCTION_NAME_RESERVED_PATTERN.test(name)) { + name = name.replace(FUNCTION_NAME_RESERVED_REPLACE, '$'); + } + const body = + `return function ${name}() {` + + ` return ${MOCK_CONSTRUCTOR_NAME}.apply(this,arguments);` + + `}${bindCall}`; + const createConstructor = new this._environmentGlobal.Function( + MOCK_CONSTRUCTOR_NAME, + body + ); + return createConstructor(mockConstructor); + } + _generateMock(metadata, callbacks, refs) { + // metadata not compatible but it's the same type, maybe problem with + // overloading of _makeComponent and not _generateMock? + // @ts-expect-error - unsure why TSC complains here? + const mock = this._makeComponent(metadata); + if (metadata.refID != null) { + refs[metadata.refID] = mock; + } + this._getSlots(metadata.members).forEach(slot => { + const slotMetadata = (metadata.members && metadata.members[slot]) || {}; + if (slotMetadata.ref != null) { + callbacks.push( + (function (ref) { + return () => (mock[slot] = refs[ref]); + })(slotMetadata.ref) + ); + } else { + mock[slot] = this._generateMock(slotMetadata, callbacks, refs); + } + }); + if ( + metadata.type !== 'undefined' && + metadata.type !== 'null' && + mock.prototype && + typeof mock.prototype === 'object' + ) { + mock.prototype.constructor = mock; + } + return mock; + } + + /** + * Check whether the given property of an object has been already replaced. + */ + _findReplacedProperty(object, propertyKey) { + for (const spyState of this._spyState) { + if ( + 'object' in spyState && + 'property' in spyState && + spyState.object === object && + spyState.property === propertyKey + ) { + return spyState; + } + } + return; + } + + /** + * @see README.md + * @param metadata Metadata for the mock in the schema returned by the + * getMetadata method of this module. + */ + generateFromMetadata(metadata) { + const callbacks = []; + const refs = {}; + const mock = this._generateMock(metadata, callbacks, refs); + callbacks.forEach(setter => setter()); + return mock; + } + + /** + * @see README.md + * @param component The component for which to retrieve metadata. + */ + getMetadata(component, _refs) { + const refs = _refs || new Map(); + const ref = refs.get(component); + if (ref != null) { + return { + ref + }; + } + const type = getType(component); + if (!type) { + return null; + } + const metadata = { + type + }; + if ( + type === 'constant' || + type === 'collection' || + type === 'undefined' || + type === 'null' + ) { + metadata.value = component; + return metadata; + } else if (type === 'function') { + // @ts-expect-error component is a function so it has a name, but not + // necessarily a string: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#function_names_in_classes + const componentName = component.name; + if (typeof componentName === 'string') { + metadata.name = componentName; + } + if (this.isMockFunction(component)) { + metadata.mockImpl = component.getMockImplementation(); + } + } + metadata.refID = refs.size; + refs.set(component, metadata.refID); + let members = null; + // Leave arrays alone + if (type !== 'array') { + // @ts-expect-error component is object + this._getSlots(component).forEach(slot => { + if ( + type === 'function' && + this.isMockFunction(component) && + slot.match(/^mock/) + ) { + return; + } + // @ts-expect-error no index signature + const slotMetadata = this.getMetadata(component[slot], refs); + if (slotMetadata) { + if (!members) { + members = {}; + } + members[slot] = slotMetadata; + } + }); + } + if (members) { + metadata.members = members; + } + return metadata; + } + isMockFunction(fn) { + return fn != null && fn._isMockFunction === true; + } + fn(implementation) { + const length = implementation ? implementation.length : 0; + const fn = this._makeComponent({ + length, + type: 'function' + }); + if (implementation) { + fn.mockImplementation(implementation); + } + return fn; + } + spyOn(object, methodKey, accessType) { + if ( + object == null || + (typeof object !== 'object' && typeof object !== 'function') + ) { + throw new Error( + `Cannot use spyOn on a primitive value; ${this._typeOf(object)} given` + ); + } + if (methodKey == null) { + throw new Error('No property name supplied'); + } + if (accessType) { + return this._spyOnProperty(object, methodKey, accessType); + } + const original = object[methodKey]; + if (!original) { + throw new Error( + `Property \`${String( + methodKey + )}\` does not exist in the provided object` + ); + } + if (!this.isMockFunction(original)) { + if (typeof original !== 'function') { + throw new Error( + `Cannot spy on the \`${String( + methodKey + )}\` property because it is not a function; ${this._typeOf( + original + )} given instead.${ + typeof original !== 'object' + ? ` If you are trying to mock a property, use \`jest.replaceProperty(object, '${String( + methodKey + )}', value)\` instead.` + : '' + }` + ); + } + const isMethodOwner = Object.prototype.hasOwnProperty.call( + object, + methodKey + ); + let descriptor = Object.getOwnPropertyDescriptor(object, methodKey); + let proto = Object.getPrototypeOf(object); + while (!descriptor && proto !== null) { + descriptor = Object.getOwnPropertyDescriptor(proto, methodKey); + proto = Object.getPrototypeOf(proto); + } + let mock; + if (descriptor && descriptor.get) { + const originalGet = descriptor.get; + mock = this._makeComponent( + { + type: 'function' + }, + () => { + descriptor.get = originalGet; + Object.defineProperty(object, methodKey, descriptor); + } + ); + descriptor.get = () => mock; + Object.defineProperty(object, methodKey, descriptor); + } else { + mock = this._makeComponent( + { + type: 'function' + }, + () => { + if (isMethodOwner) { + object[methodKey] = original; + } else { + delete object[methodKey]; + } + } + ); + // @ts-expect-error overriding original method with a Mock + object[methodKey] = mock; + } + mock.mockImplementation(function () { + return original.apply(this, arguments); + }); + } + return object[methodKey]; + } + _spyOnProperty(object, propertyKey, accessType) { + let descriptor = Object.getOwnPropertyDescriptor(object, propertyKey); + let proto = Object.getPrototypeOf(object); + while (!descriptor && proto !== null) { + descriptor = Object.getOwnPropertyDescriptor(proto, propertyKey); + proto = Object.getPrototypeOf(proto); + } + if (!descriptor) { + throw new Error( + `Property \`${String( + propertyKey + )}\` does not exist in the provided object` + ); + } + if (!descriptor.configurable) { + throw new Error( + `Property \`${String(propertyKey)}\` is not declared configurable` + ); + } + if (!descriptor[accessType]) { + throw new Error( + `Property \`${String( + propertyKey + )}\` does not have access type ${accessType}` + ); + } + const original = descriptor[accessType]; + if (!this.isMockFunction(original)) { + if (typeof original !== 'function') { + throw new Error( + `Cannot spy on the ${String( + propertyKey + )} property because it is not a function; ${this._typeOf( + original + )} given instead.${ + typeof original !== 'object' + ? ` If you are trying to mock a property, use \`jest.replaceProperty(object, '${String( + propertyKey + )}', value)\` instead.` + : '' + }` + ); + } + descriptor[accessType] = this._makeComponent( + { + type: 'function' + }, + () => { + // @ts-expect-error: mock is assignable + descriptor[accessType] = original; + Object.defineProperty(object, propertyKey, descriptor); + } + ); + descriptor[accessType].mockImplementation(function () { + // @ts-expect-error - wrong context + return original.apply(this, arguments); + }); + } + Object.defineProperty(object, propertyKey, descriptor); + return descriptor[accessType]; + } + replaceProperty(object, propertyKey, value) { + if ( + object == null || + (typeof object !== 'object' && typeof object !== 'function') + ) { + throw new Error( + `Cannot use replaceProperty on a primitive value; ${this._typeOf( + object + )} given` + ); + } + if (propertyKey == null) { + throw new Error('No property name supplied'); + } + let descriptor = Object.getOwnPropertyDescriptor(object, propertyKey); + let proto = Object.getPrototypeOf(object); + while (!descriptor && proto !== null) { + descriptor = Object.getOwnPropertyDescriptor(proto, propertyKey); + proto = Object.getPrototypeOf(proto); + } + if (!descriptor) { + throw new Error( + `Property \`${String( + propertyKey + )}\` does not exist in the provided object` + ); + } + if (!descriptor.configurable) { + throw new Error( + `Property \`${String(propertyKey)}\` is not declared configurable` + ); + } + if (descriptor.get !== undefined) { + throw new Error( + `Cannot replace the \`${String( + propertyKey + )}\` property because it has a getter. Use \`jest.spyOn(object, '${String( + propertyKey + )}', 'get').mockReturnValue(value)\` instead.` + ); + } + if (descriptor.set !== undefined) { + throw new Error( + `Cannot replace the \`${String( + propertyKey + )}\` property because it has a setter. Use \`jest.spyOn(object, '${String( + propertyKey + )}', 'set').mockReturnValue(value)\` instead.` + ); + } + if (typeof descriptor.value === 'function') { + throw new Error( + `Cannot replace the \`${String( + propertyKey + )}\` property because it is a function. Use \`jest.spyOn(object, '${String( + propertyKey + )}')\` instead.` + ); + } + const existingRestore = this._findReplacedProperty(object, propertyKey); + if (existingRestore) { + return existingRestore.replaced.replaceValue(value); + } + const isPropertyOwner = Object.prototype.hasOwnProperty.call( + object, + propertyKey + ); + const originalValue = descriptor.value; + const restore = () => { + if (isPropertyOwner) { + object[propertyKey] = originalValue; + } else { + delete object[propertyKey]; + } + }; + const replaced = { + replaceValue: value => { + object[propertyKey] = value; + return replaced; + }, + restore: () => { + restore(); + this._spyState.delete(restore); + } + }; + restore.object = object; + restore.property = propertyKey; + restore.replaced = replaced; + this._spyState.add(restore); + return replaced.replaceValue(value); + } + clearAllMocks() { + this._mockState = new WeakMap(); + } + resetAllMocks() { + this._mockConfigRegistry = new WeakMap(); + this._mockState = new WeakMap(); + } + restoreAllMocks() { + this._spyState.forEach(restore => restore()); + this._spyState = new Set(); + } + _typeOf(value) { + return value == null ? `${value}` : typeof value; + } + mocked(source, _options) { + return source; + } +} +exports.ModuleMocker = ModuleMocker; +const JestMock = new ModuleMocker(globalThis); +const fn = JestMock.fn.bind(JestMock); +exports.fn = fn; +const spyOn = JestMock.spyOn.bind(JestMock); +exports.spyOn = spyOn; +const mocked = JestMock.mocked.bind(JestMock); +exports.mocked = mocked; +const replaceProperty = JestMock.replaceProperty.bind(JestMock); +exports.replaceProperty = replaceProperty; diff --git a/node_modules/jest-mock/package.json b/node_modules/jest-mock/package.json new file mode 100644 index 00000000..e47872ac --- /dev/null +++ b/node_modules/jest-mock/package.json @@ -0,0 +1,35 @@ +{ + "name": "jest-mock", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-mock" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "devDependencies": { + "@tsd/typescript": "^5.0.4", + "tsd-lite": "^0.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-pnp-resolver/README.md b/node_modules/jest-pnp-resolver/README.md new file mode 100644 index 00000000..20bf42a2 --- /dev/null +++ b/node_modules/jest-pnp-resolver/README.md @@ -0,0 +1,34 @@ +# [Plug'n'Play](https://github.com/yarnpkg/rfcs/pull/101) resolver for Jest + +[![npm version](https://img.shields.io/npm/v/jest-pnp-resolver.svg)](https://www.npmjs.com/package/jest-pnp-resolver) +[![node version](https://img.shields.io/node/v/jest-pnp-resolver.svg)](https://www.npmjs.com/package/jest-pnp-resolver) + +*This plugin is also available for Rollup ([rollup-plugin-pnp-resolve](https://github.com/arcanis/rollup-plugin-pnp-resolve)), TypeScript ([ts-pnp](https://github.com/arcanis/ts-pnp)), and Webpack ([pnp-webpack-plugin](https://github.com/arcanis/pnp-webpack-plugin))* + +## Installation + +``` +yarn add -D jest-pnp-resolver +``` + +## Usage + +As of `jest@^24.4.0` you don't need to manually add this package anymore. The default resolver will already use PnP. + +Simply add the resolver to your configuration. For example, a minimal `jest.config.js` would be as such: + +```js +module.exports = { + resolver: require.resolve(`jest-pnp-resolver`) +}; +``` + +## License (MIT) + +> **Copyright © 2016 Maël Nison** +> +> 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/jest-pnp-resolver/createRequire.js b/node_modules/jest-pnp-resolver/createRequire.js new file mode 100644 index 00000000..7da60d67 --- /dev/null +++ b/node_modules/jest-pnp-resolver/createRequire.js @@ -0,0 +1,25 @@ +const nativeModule = require(`module`); + +module.exports = (filename) => { + // Added in Node v12.2.0 + if (nativeModule.createRequire) { + return nativeModule.createRequire(filename); + } + + // Added in Node v10.12.0 and deprecated since Node v12.2.0 + if (nativeModule.createRequireFromPath) { + return nativeModule.createRequireFromPath(filename); + } + + // Polyfill + return _createRequire(filename); +}; + +// Polyfill +function _createRequire (filename) { + const mod = new nativeModule.Module(filename, null) + mod.filename = filename + mod.paths = nativeModule.Module._nodeModulePaths(path.dirname(filename)) + mod._compile(`module.exports = require;`, filename) + return mod.exports +} diff --git a/node_modules/jest-pnp-resolver/getDefaultResolver.js b/node_modules/jest-pnp-resolver/getDefaultResolver.js new file mode 100644 index 00000000..ab90dbc8 --- /dev/null +++ b/node_modules/jest-pnp-resolver/getDefaultResolver.js @@ -0,0 +1,13 @@ +let defaultResolver; + +module.exports = () => { + if (!defaultResolver) { + try { + defaultResolver = require(`jest-resolve/build/defaultResolver`).default; + } catch (error) { + defaultResolver = require(`jest-resolve/build/default_resolver`).default; + } + } + + return defaultResolver; +}; diff --git a/node_modules/jest-pnp-resolver/index.d.ts b/node_modules/jest-pnp-resolver/index.d.ts new file mode 100644 index 00000000..1acbbac8 --- /dev/null +++ b/node_modules/jest-pnp-resolver/index.d.ts @@ -0,0 +1,10 @@ +type JestResolverOptions = { + basedir: string; + defaultResolver: (request: string, opts: any) => string, + extensions?: Array, +}; + +export default function resolve( + request: string, + options: JestResolverOptions, +): string; diff --git a/node_modules/jest-pnp-resolver/index.js b/node_modules/jest-pnp-resolver/index.js new file mode 100644 index 00000000..2b74c083 --- /dev/null +++ b/node_modules/jest-pnp-resolver/index.js @@ -0,0 +1,50 @@ +let globalPnpApi; +try { + globalPnpApi = require(`pnpapi`); +} catch { + // Just ignore if we don't have a global PnP instance - perhaps + // we'll eventually find one at runtime due to multi-tree +} + +const createRequire = require(`./createRequire`); +const getDefaultResolver = require(`./getDefaultResolver`); + +module.exports = (request, options) => { + const { + basedir, + defaultResolver = getDefaultResolver(), + extensions, + } = options; + + if (process.versions.pnp) { + let pnpApi = globalPnpApi; + + // While technically it would be more correct to run this code + // everytime (since they file being run *may* belong to a + // different dependency tree than the one owning Jest), in + // practice this doesn't happen anywhere else than on the Jest + // repository itself (in the test env). So in order to preserve + // the performances, we can afford a slight incoherence here. + if (!pnpApi) { + try { + const baseReq = createRequire(`${basedir}/internal.js`); + pnpApi = baseReq(`pnpapi`); + } catch { + // The file isn't part of a PnP dependency tree, so we can + // just use the default Jest resolver. + } + } + + if (pnpApi) { + const resolution = pnpApi.resolveRequest(request, `${basedir}/`, {extensions}); + + // When the request is a native module, Jest expects to get the string back unmodified, but pnp returns null instead. + if (resolution === null) + return request; + + return resolution; + } + } + + return defaultResolver(request, {...options, allowPnp: false}); +}; diff --git a/node_modules/jest-pnp-resolver/package.json b/node_modules/jest-pnp-resolver/package.json new file mode 100644 index 00000000..01f8e151 --- /dev/null +++ b/node_modules/jest-pnp-resolver/package.json @@ -0,0 +1,31 @@ +{ + "name": "jest-pnp-resolver", + "version": "1.2.3", + "description": "plug'n'play resolver for Webpack", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "homepage": "https://github.com/arcanis/jest-pnp-resolver", + "bugs": { + "url": "https://github.com/arcanis/jest-pnp-resolver/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/arcanis/jest-pnp-resolver.git" + }, + "keywords": [ + "jest", + "yarn", + "plugnplay", + "pnp" + ], + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } +} diff --git a/node_modules/jest-regex-util/LICENSE b/node_modules/jest-regex-util/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-regex-util/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-regex-util/build/index.d.ts b/node_modules/jest-regex-util/build/index.d.ts new file mode 100644 index 00000000..8de70810 --- /dev/null +++ b/node_modules/jest-regex-util/build/index.d.ts @@ -0,0 +1,20 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ +export declare const escapePathForRegex: (dir: string) => string; + +export declare const escapeStrForRegex: (string: string) => string; + +export declare const replacePathSepForRegex: (string: string) => string; + +export {}; diff --git a/node_modules/jest-regex-util/build/index.js b/node_modules/jest-regex-util/build/index.js new file mode 100644 index 00000000..0bb27016 --- /dev/null +++ b/node_modules/jest-regex-util/build/index.js @@ -0,0 +1,40 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.replacePathSepForRegex = + exports.escapeStrForRegex = + exports.escapePathForRegex = + void 0; +var _path = require('path'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +const escapePathForRegex = dir => { + if (_path.sep === '\\') { + // Replace "\" with "/" so it's not escaped by escapeStrForRegex. + // replacePathSepForRegex will convert it back. + dir = dir.replace(/\\/g, '/'); + } + return replacePathSepForRegex(escapeStrForRegex(dir)); +}; +exports.escapePathForRegex = escapePathForRegex; +const escapeStrForRegex = string => + string.replace(/[[\]{}()*+?.\\^$|]/g, '\\$&'); +exports.escapeStrForRegex = escapeStrForRegex; +const replacePathSepForRegex = string => { + if (_path.sep === '\\') { + return string.replace( + /(\/|(.)?\\(?![[\]{}()*+?.^$|\\]))/g, + (_match, _, p2) => (p2 && p2 !== '\\' ? `${p2}\\\\` : '\\\\') + ); + } + return string; +}; +exports.replacePathSepForRegex = replacePathSepForRegex; diff --git a/node_modules/jest-regex-util/package.json b/node_modules/jest-regex-util/package.json new file mode 100644 index 00000000..ed8bc707 --- /dev/null +++ b/node_modules/jest-regex-util/package.json @@ -0,0 +1,29 @@ +{ + "name": "jest-regex-util", + "version": "29.6.3", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-regex-util" + }, + "devDependencies": { + "@types/node": "*" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "fb7d95c8af6e0d65a8b65348433d8a0ea0725b5b" +} diff --git a/node_modules/jest-resolve-dependencies/LICENSE b/node_modules/jest-resolve-dependencies/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-resolve-dependencies/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-resolve-dependencies/build/index.d.ts b/node_modules/jest-resolve-dependencies/build/index.d.ts new file mode 100644 index 00000000..267bfc61 --- /dev/null +++ b/node_modules/jest-resolve-dependencies/build/index.d.ts @@ -0,0 +1,43 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import type {default as default_2} from 'jest-resolve'; +import type {IHasteFS} from 'jest-haste-map'; +import type {ResolveModuleConfig} from 'jest-resolve'; +import {SnapshotResolver} from 'jest-snapshot'; + +/** + * DependencyResolver is used to resolve the direct dependencies of a module or + * to retrieve a list of all transitive inverse dependencies. + */ +export declare class DependencyResolver { + private readonly _hasteFS; + private readonly _resolver; + private readonly _snapshotResolver; + constructor( + resolver: default_2, + hasteFS: IHasteFS, + snapshotResolver: SnapshotResolver, + ); + resolve(file: string, options?: ResolveModuleConfig): Array; + resolveInverseModuleMap( + paths: Set, + filter: (file: string) => boolean, + options?: ResolveModuleConfig, + ): Array; + resolveInverse( + paths: Set, + filter: (file: string) => boolean, + options?: ResolveModuleConfig, + ): Array; +} + +export declare type ResolvedModule = { + file: string; + dependencies: Array; +}; + +export {}; diff --git a/node_modules/jest-resolve-dependencies/build/index.js b/node_modules/jest-resolve-dependencies/build/index.js new file mode 100644 index 00000000..9decff2c --- /dev/null +++ b/node_modules/jest-resolve-dependencies/build/index.js @@ -0,0 +1,197 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.DependencyResolver = void 0; +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _jestSnapshot() { + const data = require('jest-snapshot'); + _jestSnapshot = function () { + return data; + }; + return data; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * DependencyResolver is used to resolve the direct dependencies of a module or + * to retrieve a list of all transitive inverse dependencies. + */ +class DependencyResolver { + _hasteFS; + _resolver; + _snapshotResolver; + constructor(resolver, hasteFS, snapshotResolver) { + this._resolver = resolver; + this._hasteFS = hasteFS; + this._snapshotResolver = snapshotResolver; + } + resolve(file, options) { + const dependencies = this._hasteFS.getDependencies(file); + if (!dependencies) { + return []; + } + return dependencies.reduce((acc, dependency) => { + if (this._resolver.isCoreModule(dependency)) { + return acc; + } + let resolvedDependency; + let resolvedMockDependency; + try { + resolvedDependency = this._resolver.resolveModule( + file, + dependency, + options + ); + } catch { + try { + resolvedDependency = this._resolver.getMockModule(file, dependency); + } catch { + // leave resolvedDependency as undefined if nothing can be found + } + } + if (resolvedDependency == null) { + return acc; + } + acc.push(resolvedDependency); + + // If we resolve a dependency, then look for a mock dependency + // of the same name in that dependency's directory. + try { + resolvedMockDependency = this._resolver.getMockModule( + resolvedDependency, + path().basename(dependency) + ); + } catch { + // leave resolvedMockDependency as undefined if nothing can be found + } + if (resolvedMockDependency != null) { + const dependencyMockDir = path().resolve( + path().dirname(resolvedDependency), + '__mocks__' + ); + resolvedMockDependency = path().resolve(resolvedMockDependency); + + // make sure mock is in the correct directory + if (dependencyMockDir === path().dirname(resolvedMockDependency)) { + acc.push(resolvedMockDependency); + } + } + return acc; + }, []); + } + resolveInverseModuleMap(paths, filter, options) { + if (!paths.size) { + return []; + } + const collectModules = (related, moduleMap, changed) => { + const visitedModules = new Set(); + const result = []; + while (changed.size) { + changed = new Set( + moduleMap.reduce((acc, module) => { + if ( + visitedModules.has(module.file) || + !module.dependencies.some(dep => changed.has(dep)) + ) { + return acc; + } + const file = module.file; + if (filter(file)) { + result.push(module); + related.delete(file); + } + visitedModules.add(file); + acc.push(file); + return acc; + }, []) + ); + } + return result.concat( + Array.from(related).map(file => ({ + dependencies: [], + file + })) + ); + }; + const relatedPaths = new Set(); + const changed = new Set(); + for (const path of paths) { + if (this._hasteFS.exists(path)) { + const modulePath = (0, _jestSnapshot().isSnapshotPath)(path) + ? this._snapshotResolver.resolveTestPath(path) + : path; + changed.add(modulePath); + if (filter(modulePath)) { + relatedPaths.add(modulePath); + } + } + } + const modules = []; + for (const file of this._hasteFS.getAbsoluteFileIterator()) { + modules.push({ + dependencies: this.resolve(file, options), + file + }); + } + return collectModules(relatedPaths, modules, changed); + } + resolveInverse(paths, filter, options) { + return this.resolveInverseModuleMap(paths, filter, options).map( + module => module.file + ); + } +} +exports.DependencyResolver = DependencyResolver; diff --git a/node_modules/jest-resolve-dependencies/package.json b/node_modules/jest-resolve-dependencies/package.json new file mode 100644 index 00000000..bbeeb06c --- /dev/null +++ b/node_modules/jest-resolve-dependencies/package.json @@ -0,0 +1,37 @@ +{ + "name": "jest-resolve-dependencies", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-resolve-dependencies" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "devDependencies": { + "@jest/test-utils": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-haste-map": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-resolve/LICENSE b/node_modules/jest-resolve/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-resolve/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-resolve/build/ModuleNotFoundError.js b/node_modules/jest-resolve/build/ModuleNotFoundError.js new file mode 100644 index 00000000..9a877787 --- /dev/null +++ b/node_modules/jest-resolve/build/ModuleNotFoundError.js @@ -0,0 +1,108 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _slash() { + const data = _interopRequireDefault(require('slash')); + _slash = function () { + return data; + }; + return data; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +class ModuleNotFoundError extends Error { + code = 'MODULE_NOT_FOUND'; + hint; + requireStack; + siblingWithSimilarExtensionFound; + moduleName; + _originalMessage; + constructor(message, moduleName) { + super(message); + this._originalMessage = message; + this.moduleName = moduleName; + } + buildMessage(rootDir) { + if (!this._originalMessage) { + this._originalMessage = this.message || ''; + } + let message = this._originalMessage; + if (this.requireStack?.length && this.requireStack.length > 1) { + message += ` + +Require stack: + ${this.requireStack + .map(p => p.replace(`${rootDir}${path().sep}`, '')) + .map(_slash().default) + .join('\n ')} +`; + } + if (this.hint) { + message += this.hint; + } + this.message = message; + } + static duckType(error) { + error.buildMessage = ModuleNotFoundError.prototype.buildMessage; + return error; + } +} +exports.default = ModuleNotFoundError; diff --git a/node_modules/jest-resolve/build/defaultResolver.js b/node_modules/jest-resolve/build/defaultResolver.js new file mode 100644 index 00000000..ecfb3f20 --- /dev/null +++ b/node_modules/jest-resolve/build/defaultResolver.js @@ -0,0 +1,240 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function _path() { + const data = require('path'); + _path = function () { + return data; + }; + return data; +} +function _jestPnpResolver() { + const data = _interopRequireDefault(require('jest-pnp-resolver')); + _jestPnpResolver = function () { + return data; + }; + return data; +} +function _resolve() { + const data = require('resolve'); + _resolve = function () { + return data; + }; + return data; +} +var resolve = _interopRequireWildcard(require('resolve.exports')); +var _fileWalkers = require('./fileWalkers'); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * Allows transforming parsed `package.json` contents. + * + * @param pkg - Parsed `package.json` contents. + * @param file - Path to `package.json` file. + * @param dir - Directory that contains the `package.json`. + * + * @returns Transformed `package.json` contents. + */ + +/** + * Allows transforming a path within a package. + * + * @param pkg - Parsed `package.json` contents. + * @param path - Path being resolved. + * @param relativePath - Path relative from the `package.json` location. + * + * @returns Relative path that will be joined from the `package.json` location. + */ + +const defaultResolver = (path, options) => { + // Yarn 2 adds support to `resolve` automatically so the pnpResolver is only + // needed for Yarn 1 which implements version 1 of the pnp spec + if (process.versions.pnp === '1') { + return (0, _jestPnpResolver().default)(path, options); + } + const resolveOptions = { + ...options, + isDirectory: _fileWalkers.isDirectory, + isFile: _fileWalkers.isFile, + preserveSymlinks: false, + readPackageSync, + realpathSync: _fileWalkers.realpathSync + }; + const pathToResolve = getPathInModule(path, resolveOptions); + + // resolveSync dereferences symlinks to ensure we don't create a separate + // module instance depending on how it was referenced. + const result = (0, _resolve().sync)(pathToResolve, resolveOptions); + return result; +}; +var _default = defaultResolver; +/* + * helper functions + */ +exports.default = _default; +function readPackageSync(_, file) { + return (0, _fileWalkers.readPackageCached)(file); +} +function getPathInModule(path, options) { + if (shouldIgnoreRequestForExports(path)) { + return path; + } + if (path.startsWith('#')) { + const closestPackageJson = (0, _fileWalkers.findClosestPackageJson)( + options.basedir + ); + if (!closestPackageJson) { + throw new Error( + `Jest: unable to locate closest package.json from ${options.basedir} when resolving import "${path}"` + ); + } + const pkg = (0, _fileWalkers.readPackageCached)(closestPackageJson); + const resolved = resolve.imports( + pkg, + path, + createResolveOptions(options.conditions) + ); + if (resolved) { + const target = resolved[0]; + return target.startsWith('.') + ? // internal relative filepath + (0, _path().resolve)((0, _path().dirname)(closestPackageJson), target) + : // this is an external module, re-resolve it + defaultResolver(target, options); + } + if (pkg.imports) { + throw new Error( + '`imports` exists, but no results - this is a bug in Jest. Please report an issue' + ); + } + } + const segments = path.split('/'); + let moduleName = segments.shift(); + if (moduleName) { + if (moduleName.startsWith('@')) { + moduleName = `${moduleName}/${segments.shift()}`; + } + + // self-reference + const closestPackageJson = (0, _fileWalkers.findClosestPackageJson)( + options.basedir + ); + if (closestPackageJson) { + const pkg = (0, _fileWalkers.readPackageCached)(closestPackageJson); + if (pkg.name === moduleName) { + const resolved = resolve.exports( + pkg, + segments.join('/') || '.', + createResolveOptions(options.conditions) + ); + if (resolved) { + return (0, _path().resolve)( + (0, _path().dirname)(closestPackageJson), + resolved[0] + ); + } + if (pkg.exports) { + throw new Error( + '`exports` exists, but no results - this is a bug in Jest. Please report an issue' + ); + } + } + } + let packageJsonPath = ''; + try { + packageJsonPath = (0, _resolve().sync)( + `${moduleName}/package.json`, + options + ); + } catch { + // ignore if package.json cannot be found + } + if (packageJsonPath && (0, _fileWalkers.isFile)(packageJsonPath)) { + const pkg = (0, _fileWalkers.readPackageCached)(packageJsonPath); + const resolved = resolve.exports( + pkg, + segments.join('/') || '.', + createResolveOptions(options.conditions) + ); + if (resolved) { + return (0, _path().resolve)( + (0, _path().dirname)(packageJsonPath), + resolved[0] + ); + } + if (pkg.exports) { + throw new Error( + '`exports` exists, but no results - this is a bug in Jest. Please report an issue' + ); + } + } + } + return path; +} +function createResolveOptions(conditions) { + return conditions + ? { + conditions, + unsafe: true + } + : // no conditions were passed - let's assume this is Jest internal and it should be `require` + { + browser: false, + require: true + }; +} + +// if it's a relative import or an absolute path, imports/exports are ignored +const shouldIgnoreRequestForExports = path => + path.startsWith('.') || (0, _path().isAbsolute)(path); diff --git a/node_modules/jest-resolve/build/fileWalkers.js b/node_modules/jest-resolve/build/fileWalkers.js new file mode 100644 index 00000000..8779a51b --- /dev/null +++ b/node_modules/jest-resolve/build/fileWalkers.js @@ -0,0 +1,178 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.clearFsCache = clearFsCache; +exports.findClosestPackageJson = findClosestPackageJson; +exports.isDirectory = isDirectory; +exports.isFile = isFile; +exports.readPackageCached = readPackageCached; +exports.realpathSync = realpathSync; +function _path() { + const data = require('path'); + _path = function () { + return data; + }; + return data; +} +function fs() { + const data = _interopRequireWildcard(require('graceful-fs')); + fs = function () { + return data; + }; + return data; +} +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function clearFsCache() { + checkedPaths.clear(); + checkedRealpathPaths.clear(); + packageContents.clear(); +} +var IPathType = /*#__PURE__*/ (function (IPathType) { + IPathType[(IPathType['FILE'] = 1)] = 'FILE'; + IPathType[(IPathType['DIRECTORY'] = 2)] = 'DIRECTORY'; + IPathType[(IPathType['OTHER'] = 3)] = 'OTHER'; + return IPathType; +})(IPathType || {}); +const checkedPaths = new Map(); +function statSyncCached(path) { + const result = checkedPaths.get(path); + if (result != null) { + return result; + } + let stat; + try { + // @ts-expect-error TS2554 - throwIfNoEntry is only available in recent version of node, but inclusion of the option is a backward compatible no-op. + stat = fs().statSync(path, { + throwIfNoEntry: false + }); + } catch (e) { + if (!(e && (e.code === 'ENOENT' || e.code === 'ENOTDIR'))) { + throw e; + } + } + if (stat) { + if (stat.isFile() || stat.isFIFO()) { + checkedPaths.set(path, IPathType.FILE); + return IPathType.FILE; + } else if (stat.isDirectory()) { + checkedPaths.set(path, IPathType.DIRECTORY); + return IPathType.DIRECTORY; + } + } + checkedPaths.set(path, IPathType.OTHER); + return IPathType.OTHER; +} +const checkedRealpathPaths = new Map(); +function realpathCached(path) { + let result = checkedRealpathPaths.get(path); + if (result != null) { + return result; + } + result = (0, _jestUtil().tryRealpath)(path); + checkedRealpathPaths.set(path, result); + if (path !== result) { + // also cache the result in case it's ever referenced directly - no reason to `realpath` that as well + checkedRealpathPaths.set(result, result); + } + return result; +} +const packageContents = new Map(); +function readPackageCached(path) { + let result = packageContents.get(path); + if (result != null) { + return result; + } + result = JSON.parse(fs().readFileSync(path, 'utf8')); + packageContents.set(path, result); + return result; +} + +// adapted from +// https://github.com/lukeed/escalade/blob/2477005062cdbd8407afc90d3f48f4930354252b/src/sync.js +// to use cached `fs` calls +function findClosestPackageJson(start) { + let dir = (0, _path().resolve)('.', start); + if (!isDirectory(dir)) { + dir = (0, _path().dirname)(dir); + } + while (true) { + const pkgJsonFile = (0, _path().resolve)(dir, './package.json'); + const hasPackageJson = isFile(pkgJsonFile); + if (hasPackageJson) { + return pkgJsonFile; + } + const prevDir = dir; + dir = (0, _path().dirname)(dir); + if (prevDir === dir) { + return undefined; + } + } +} + +/* + * helper functions + */ +function isFile(file) { + return statSyncCached(file) === IPathType.FILE; +} +function isDirectory(dir) { + return statSyncCached(dir) === IPathType.DIRECTORY; +} +function realpathSync(file) { + return realpathCached(file); +} diff --git a/node_modules/jest-resolve/build/index.d.ts b/node_modules/jest-resolve/build/index.d.ts new file mode 100644 index 00000000..6ec1e443 --- /dev/null +++ b/node_modules/jest-resolve/build/index.d.ts @@ -0,0 +1,320 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import type {IModuleMap} from 'jest-haste-map'; + +export declare type AsyncResolver = ( + path: string, + options: ResolverOptions, +) => Promise; + +declare function cachedShouldLoadAsEsm( + path: string, + extensionsToTreatAsEsm: Array, +): boolean; + +declare const defaultResolver: SyncResolver; + +export declare type FindNodeModuleConfig = { + basedir: string; + conditions?: Array; + extensions?: Array; + moduleDirectory?: Array; + paths?: Array; + resolver?: string | null; + rootDir?: string; + throwIfNotFound?: boolean; +}; + +export declare type JestResolver = ResolverSyncObject | ResolverAsyncObject; + +declare interface JSONObject { + [key: string]: JSONValue; +} + +declare type JSONValue = + | string + | number + | boolean + | JSONObject + | Array; + +declare type ModuleNameMapperConfig = { + regex: RegExp; + moduleName: string | Array; +}; + +declare class ModuleNotFoundError extends Error { + code: string; + hint?: string; + requireStack?: Array; + siblingWithSimilarExtensionFound?: boolean; + moduleName?: string; + private _originalMessage?; + constructor(message: string, moduleName?: string); + buildMessage(rootDir: string): void; + static duckType(error: ModuleNotFoundError): ModuleNotFoundError; +} + +/** + * Allows transforming parsed `package.json` contents. + * + * @param pkg - Parsed `package.json` contents. + * @param file - Path to `package.json` file. + * @param dir - Directory that contains the `package.json`. + * + * @returns Transformed `package.json` contents. + */ +export declare type PackageFilter = ( + pkg: PackageJSON, + file: string, + dir: string, +) => PackageJSON; + +export declare type PackageJSON = JSONObject; + +/** + * Allows transforming a path within a package. + * + * @param pkg - Parsed `package.json` contents. + * @param path - Path being resolved. + * @param relativePath - Path relative from the `package.json` location. + * + * @returns Relative path that will be joined from the `package.json` location. + */ +export declare type PathFilter = ( + pkg: PackageJSON, + path: string, + relativePath: string, +) => string; + +export declare type ResolveModuleConfig = { + conditions?: Array; + skipNodeResolution?: boolean; + paths?: Array; +}; + +declare class Resolver { + private readonly _options; + private readonly _moduleMap; + private readonly _moduleIDCache; + private readonly _moduleNameCache; + private readonly _modulePathCache; + private readonly _supportsNativePlatform; + constructor(moduleMap: IModuleMap, options: ResolverConfig); + static ModuleNotFoundError: typeof ModuleNotFoundError; + static tryCastModuleNotFoundError(error: unknown): ModuleNotFoundError | null; + static clearDefaultResolverCache(): void; + static findNodeModule( + path: string, + options: FindNodeModuleConfig, + ): string | null; + static findNodeModuleAsync( + path: string, + options: FindNodeModuleConfig, + ): Promise; + static unstable_shouldLoadAsEsm: typeof cachedShouldLoadAsEsm; + resolveModuleFromDirIfExists( + dirname: string, + moduleName: string, + options?: ResolveModuleConfig, + ): string | null; + resolveModuleFromDirIfExistsAsync( + dirname: string, + moduleName: string, + options?: ResolveModuleConfig, + ): Promise; + resolveModule( + from: string, + moduleName: string, + options?: ResolveModuleConfig, + ): string; + resolveModuleAsync( + from: string, + moduleName: string, + options?: ResolveModuleConfig, + ): Promise; + /** + * _prepareForResolution is shared between the sync and async module resolution + * methods, to try to keep them as DRY as possible. + */ + private _prepareForResolution; + /** + * _getHasteModulePath attempts to return the path to a haste module. + */ + private _getHasteModulePath; + private _throwModNotFoundError; + private _getMapModuleName; + private _isAliasModule; + isCoreModule(moduleName: string): boolean; + getModule(name: string): string | null; + getModulePath(from: string, moduleName: string): string; + getPackage(name: string): string | null; + getMockModule(from: string, name: string): string | null; + getMockModuleAsync(from: string, name: string): Promise; + getModulePaths(from: string): Array; + getGlobalPaths(moduleName?: string): Array; + getModuleID( + virtualMocks: Map, + from: string, + moduleName?: string, + options?: ResolveModuleConfig, + ): string; + getModuleIDAsync( + virtualMocks: Map, + from: string, + moduleName?: string, + options?: ResolveModuleConfig, + ): Promise; + private _getModuleType; + private _getAbsolutePath; + private _getAbsolutePathAsync; + private _getMockPath; + private _getMockPathAsync; + private _getVirtualMockPath; + private _getVirtualMockPathAsync; + private _isModuleResolved; + private _isModuleResolvedAsync; + resolveStubModuleName(from: string, moduleName: string): string | null; + resolveStubModuleNameAsync( + from: string, + moduleName: string, + ): Promise; +} +export default Resolver; + +declare type ResolverAsyncObject = { + sync?: SyncResolver; + async: AsyncResolver; +}; + +declare type ResolverConfig = { + defaultPlatform?: string | null; + extensions: Array; + hasCoreModules: boolean; + moduleDirectories: Array; + moduleNameMapper?: Array | null; + modulePaths?: Array; + platforms?: Array; + resolver?: string | null; + rootDir: string; +}; + +export declare type ResolverOptions = { + /** Directory to begin resolving from. */ + basedir: string; + /** List of export conditions. */ + conditions?: Array; + /** Instance of default resolver. */ + defaultResolver: typeof defaultResolver; + /** List of file extensions to search in order. */ + extensions?: Array; + /** + * List of directory names to be looked up for modules recursively. + * + * @defaultValue + * The default is `['node_modules']`. + */ + moduleDirectory?: Array; + /** + * List of `require.paths` to use if nothing is found in `node_modules`. + * + * @defaultValue + * The default is `undefined`. + */ + paths?: Array; + /** Allows transforming parsed `package.json` contents. */ + packageFilter?: PackageFilter; + /** Allows transforms a path within a package. */ + pathFilter?: PathFilter; + /** Current root directory. */ + rootDir?: string; +}; + +declare type ResolverSyncObject = { + sync: SyncResolver; + async?: AsyncResolver; +}; + +/** + * Finds the runner to use: + * + * 1. looks for jest-runner- relative to project. + * 1. looks for jest-runner- relative to Jest. + * 1. looks for relative to project. + * 1. looks for relative to Jest. + */ +export declare const resolveRunner: ( + resolver: string | undefined | null, + { + filePath, + rootDir, + requireResolveFunction, + }: { + filePath: string; + rootDir: string; + requireResolveFunction: (moduleName: string) => string; + }, +) => string; + +export declare const resolveSequencer: ( + resolver: string | undefined | null, + { + filePath, + rootDir, + requireResolveFunction, + }: { + filePath: string; + rootDir: string; + requireResolveFunction: (moduleName: string) => string; + }, +) => string; + +/** + * Finds the test environment to use: + * + * 1. looks for jest-environment- relative to project. + * 1. looks for jest-environment- relative to Jest. + * 1. looks for relative to project. + * 1. looks for relative to Jest. + */ +export declare const resolveTestEnvironment: ({ + rootDir, + testEnvironment: filePath, + requireResolveFunction, +}: { + rootDir: string; + testEnvironment: string; + requireResolveFunction: (moduleName: string) => string; +}) => string; + +/** + * Finds the watch plugins to use: + * + * 1. looks for jest-watch- relative to project. + * 1. looks for jest-watch- relative to Jest. + * 1. looks for relative to project. + * 1. looks for relative to Jest. + */ +export declare const resolveWatchPlugin: ( + resolver: string | undefined | null, + { + filePath, + rootDir, + requireResolveFunction, + }: { + filePath: string; + rootDir: string; + requireResolveFunction: (moduleName: string) => string; + }, +) => string; + +export declare type SyncResolver = ( + path: string, + options: ResolverOptions, +) => string; + +export {}; diff --git a/node_modules/jest-resolve/build/index.js b/node_modules/jest-resolve/build/index.js new file mode 100644 index 00000000..9c0f7c85 --- /dev/null +++ b/node_modules/jest-resolve/build/index.js @@ -0,0 +1,31 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +var _exportNames = {}; +exports.default = void 0; +var _resolver = _interopRequireDefault(require('./resolver')); +var _utils = require('./utils'); +Object.keys(_utils).forEach(function (key) { + if (key === 'default' || key === '__esModule') return; + if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; + if (key in exports && exports[key] === _utils[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _utils[key]; + } + }); +}); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var _default = _resolver.default; +exports.default = _default; diff --git a/node_modules/jest-resolve/build/isBuiltinModule.js b/node_modules/jest-resolve/build/isBuiltinModule.js new file mode 100644 index 00000000..80001d11 --- /dev/null +++ b/node_modules/jest-resolve/build/isBuiltinModule.js @@ -0,0 +1,27 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = isBuiltinModule; +function _module() { + const data = _interopRequireDefault(require('module')); + _module = function () { + return data; + }; + return data; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const BUILTIN_MODULES = new Set(_module().default.builtinModules); +function isBuiltinModule(module) { + return BUILTIN_MODULES.has(module); +} diff --git a/node_modules/jest-resolve/build/nodeModulesPaths.js b/node_modules/jest-resolve/build/nodeModulesPaths.js new file mode 100644 index 00000000..7eb031ae --- /dev/null +++ b/node_modules/jest-resolve/build/nodeModulesPaths.js @@ -0,0 +1,131 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.GlobalPaths = void 0; +exports.default = nodeModulesPaths; +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * Adapted from: https://github.com/substack/node-resolve + */ + +function nodeModulesPaths(basedir, options) { + const modules = + options && options.moduleDirectory + ? Array.from(options.moduleDirectory) + : ['node_modules']; + + // ensure that `basedir` is an absolute path at this point, + // resolving against the process' current working directory + const basedirAbs = path().resolve(basedir); + let prefix = '/'; + if (/^([A-Za-z]:)/.test(basedirAbs)) { + prefix = ''; + } else if (/^\\\\/.test(basedirAbs)) { + prefix = '\\\\'; + } + + // The node resolution algorithm (as implemented by NodeJS and TypeScript) + // traverses parents of the physical path, not the symlinked path + let physicalBasedir; + try { + physicalBasedir = (0, _jestUtil().tryRealpath)(basedirAbs); + } catch { + // realpath can throw, e.g. on mapped drives + physicalBasedir = basedirAbs; + } + const paths = [physicalBasedir]; + let parsed = path().parse(physicalBasedir); + while (parsed.dir !== paths[paths.length - 1]) { + paths.push(parsed.dir); + parsed = path().parse(parsed.dir); + } + const dirs = paths.reduce((dirs, aPath) => { + for (const moduleDir of modules) { + if (path().isAbsolute(moduleDir)) { + if (aPath === basedirAbs && moduleDir) { + dirs.push(moduleDir); + } + } else { + dirs.push(path().join(prefix, aPath, moduleDir)); + } + } + return dirs; + }, []); + if (options.paths) { + dirs.push(...options.paths); + } + return dirs; +} +function findGlobalPaths() { + const {root} = path().parse(process.cwd()); + const globalPath = path().join(root, 'node_modules'); + const resolvePaths = require.resolve.paths('/'); + if (resolvePaths) { + // the global paths start one after the root node_modules + const rootIndex = resolvePaths.indexOf(globalPath); + return rootIndex > -1 ? resolvePaths.slice(rootIndex + 1) : []; + } + return []; +} +const GlobalPaths = findGlobalPaths(); +exports.GlobalPaths = GlobalPaths; diff --git a/node_modules/jest-resolve/build/resolver.js b/node_modules/jest-resolve/build/resolver.js new file mode 100644 index 00000000..4373e54e --- /dev/null +++ b/node_modules/jest-resolve/build/resolver.js @@ -0,0 +1,796 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +function _slash() { + const data = _interopRequireDefault(require('slash')); + _slash = function () { + return data; + }; + return data; +} +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +var _ModuleNotFoundError = _interopRequireDefault( + require('./ModuleNotFoundError') +); +var _defaultResolver = _interopRequireDefault(require('./defaultResolver')); +var _fileWalkers = require('./fileWalkers'); +var _isBuiltinModule = _interopRequireDefault(require('./isBuiltinModule')); +var _nodeModulesPaths = _interopRequireWildcard(require('./nodeModulesPaths')); +var _shouldLoadAsEsm = _interopRequireWildcard(require('./shouldLoadAsEsm')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable local/prefer-spread-eventually */ + +const NATIVE_PLATFORM = 'native'; + +// We might be inside a symlink. +const resolvedCwd = (0, _jestUtil().tryRealpath)(process.cwd()); +const {NODE_PATH} = process.env; +const nodePaths = NODE_PATH + ? NODE_PATH.split(path().delimiter) + .filter(Boolean) + // The resolver expects absolute paths. + .map(p => path().resolve(resolvedCwd, p)) + : undefined; +class Resolver { + _options; + _moduleMap; + _moduleIDCache; + _moduleNameCache; + _modulePathCache; + _supportsNativePlatform; + constructor(moduleMap, options) { + this._options = { + defaultPlatform: options.defaultPlatform, + extensions: options.extensions, + hasCoreModules: + options.hasCoreModules === undefined ? true : options.hasCoreModules, + moduleDirectories: options.moduleDirectories || ['node_modules'], + moduleNameMapper: options.moduleNameMapper, + modulePaths: options.modulePaths, + platforms: options.platforms, + resolver: options.resolver, + rootDir: options.rootDir + }; + this._supportsNativePlatform = options.platforms + ? options.platforms.includes(NATIVE_PLATFORM) + : false; + this._moduleMap = moduleMap; + this._moduleIDCache = new Map(); + this._moduleNameCache = new Map(); + this._modulePathCache = new Map(); + } + static ModuleNotFoundError = _ModuleNotFoundError.default; + static tryCastModuleNotFoundError(error) { + if (error instanceof _ModuleNotFoundError.default) { + return error; + } + const casted = error; + if (casted.code === 'MODULE_NOT_FOUND') { + return _ModuleNotFoundError.default.duckType(casted); + } + return null; + } + static clearDefaultResolverCache() { + (0, _fileWalkers.clearFsCache)(); + (0, _shouldLoadAsEsm.clearCachedLookups)(); + } + static findNodeModule(path, options) { + const resolverModule = loadResolver(options.resolver); + let resolver = _defaultResolver.default; + if (typeof resolverModule === 'function') { + resolver = resolverModule; + } else if (typeof resolverModule.sync === 'function') { + resolver = resolverModule.sync; + } + const paths = options.paths; + try { + return resolver(path, { + basedir: options.basedir, + conditions: options.conditions, + defaultResolver: _defaultResolver.default, + extensions: options.extensions, + moduleDirectory: options.moduleDirectory, + paths: paths ? (nodePaths || []).concat(paths) : nodePaths, + rootDir: options.rootDir + }); + } catch (e) { + // we always wanna throw if it's an internal import + if (options.throwIfNotFound || path.startsWith('#')) { + throw e; + } + } + return null; + } + static async findNodeModuleAsync(path, options) { + const resolverModule = loadResolver(options.resolver); + let resolver = _defaultResolver.default; + if (typeof resolverModule === 'function') { + resolver = resolverModule; + } else if ( + typeof resolverModule.async === 'function' || + typeof resolverModule.sync === 'function' + ) { + const asyncOrSync = resolverModule.async || resolverModule.sync; + if (asyncOrSync == null) { + throw new Error(`Unable to load resolver at ${options.resolver}`); + } + resolver = asyncOrSync; + } + const paths = options.paths; + try { + const result = await resolver(path, { + basedir: options.basedir, + conditions: options.conditions, + defaultResolver: _defaultResolver.default, + extensions: options.extensions, + moduleDirectory: options.moduleDirectory, + paths: paths ? (nodePaths || []).concat(paths) : nodePaths, + rootDir: options.rootDir + }); + return result; + } catch (e) { + // we always wanna throw if it's an internal import + if (options.throwIfNotFound || path.startsWith('#')) { + throw e; + } + } + return null; + } + + // unstable as it should be replaced by https://github.com/nodejs/modules/issues/393, and we don't want people to use it + static unstable_shouldLoadAsEsm = _shouldLoadAsEsm.default; + resolveModuleFromDirIfExists(dirname, moduleName, options) { + const {extensions, key, moduleDirectory, paths, skipResolution} = + this._prepareForResolution(dirname, moduleName, options); + let module; + + // 1. If we have already resolved this module for this directory name, + // return a value from the cache. + const cacheResult = this._moduleNameCache.get(key); + if (cacheResult) { + return cacheResult; + } + + // 2. Check if the module is a haste module. + module = this.getModule(moduleName); + if (module) { + this._moduleNameCache.set(key, module); + return module; + } + + // 3. Check if the module is a node module and resolve it based on + // the node module resolution algorithm. If skipNodeResolution is given we + // ignore all modules that look like node modules (ie. are not relative + // requires). This enables us to speed up resolution when we build a + // dependency graph because we don't have to look at modules that may not + // exist and aren't mocked. + const resolveNodeModule = (name, throwIfNotFound = false) => { + // Only skip default resolver + if (this.isCoreModule(name) && !this._options.resolver) { + return name; + } + return Resolver.findNodeModule(name, { + basedir: dirname, + conditions: options?.conditions, + extensions, + moduleDirectory, + paths, + resolver: this._options.resolver, + rootDir: this._options.rootDir, + throwIfNotFound + }); + }; + if (!skipResolution) { + module = resolveNodeModule(moduleName, Boolean(process.versions.pnp)); + if (module) { + this._moduleNameCache.set(key, module); + return module; + } + } + + // 4. Resolve "haste packages" which are `package.json` files outside of + // `node_modules` folders anywhere in the file system. + try { + const hasteModulePath = this._getHasteModulePath(moduleName); + if (hasteModulePath) { + // try resolving with custom resolver first to support extensions, + // then fallback to require.resolve + const resolvedModule = + resolveNodeModule(hasteModulePath) || + require.resolve(hasteModulePath); + this._moduleNameCache.set(key, resolvedModule); + return resolvedModule; + } + } catch {} + return null; + } + async resolveModuleFromDirIfExistsAsync(dirname, moduleName, options) { + const {extensions, key, moduleDirectory, paths, skipResolution} = + this._prepareForResolution(dirname, moduleName, options); + let module; + + // 1. If we have already resolved this module for this directory name, + // return a value from the cache. + const cacheResult = this._moduleNameCache.get(key); + if (cacheResult) { + return cacheResult; + } + + // 2. Check if the module is a haste module. + module = this.getModule(moduleName); + if (module) { + this._moduleNameCache.set(key, module); + return module; + } + + // 3. Check if the module is a node module and resolve it based on + // the node module resolution algorithm. If skipNodeResolution is given we + // ignore all modules that look like node modules (ie. are not relative + // requires). This enables us to speed up resolution when we build a + // dependency graph because we don't have to look at modules that may not + // exist and aren't mocked. + const resolveNodeModule = async (name, throwIfNotFound = false) => { + // Only skip default resolver + if (this.isCoreModule(name) && !this._options.resolver) { + return name; + } + return Resolver.findNodeModuleAsync(name, { + basedir: dirname, + conditions: options?.conditions, + extensions, + moduleDirectory, + paths, + resolver: this._options.resolver, + rootDir: this._options.rootDir, + throwIfNotFound + }); + }; + if (!skipResolution) { + module = await resolveNodeModule( + moduleName, + Boolean(process.versions.pnp) + ); + if (module) { + this._moduleNameCache.set(key, module); + return module; + } + } + + // 4. Resolve "haste packages" which are `package.json` files outside of + // `node_modules` folders anywhere in the file system. + try { + const hasteModulePath = this._getHasteModulePath(moduleName); + if (hasteModulePath) { + // try resolving with custom resolver first to support extensions, + // then fallback to require.resolve + const resolvedModule = + (await resolveNodeModule(hasteModulePath)) || + // QUESTION: should this be async? + require.resolve(hasteModulePath); + this._moduleNameCache.set(key, resolvedModule); + return resolvedModule; + } + } catch {} + return null; + } + resolveModule(from, moduleName, options) { + const dirname = path().dirname(from); + const module = + this.resolveStubModuleName(from, moduleName) || + this.resolveModuleFromDirIfExists(dirname, moduleName, options); + if (module) return module; + + // 5. Throw an error if the module could not be found. `resolve.sync` only + // produces an error based on the dirname but we have the actual current + // module name available. + this._throwModNotFoundError(from, moduleName); + } + async resolveModuleAsync(from, moduleName, options) { + const dirname = path().dirname(from); + const module = + (await this.resolveStubModuleNameAsync(from, moduleName)) || + (await this.resolveModuleFromDirIfExistsAsync( + dirname, + moduleName, + options + )); + if (module) return module; + + // 5. Throw an error if the module could not be found. `resolve` only + // produces an error based on the dirname but we have the actual current + // module name available. + this._throwModNotFoundError(from, moduleName); + } + + /** + * _prepareForResolution is shared between the sync and async module resolution + * methods, to try to keep them as DRY as possible. + */ + _prepareForResolution(dirname, moduleName, options) { + const paths = options?.paths || this._options.modulePaths; + const moduleDirectory = this._options.moduleDirectories; + const stringifiedOptions = options ? JSON.stringify(options) : ''; + const key = dirname + path().delimiter + moduleName + stringifiedOptions; + const defaultPlatform = this._options.defaultPlatform; + const extensions = this._options.extensions.slice(); + if (this._supportsNativePlatform) { + extensions.unshift( + ...this._options.extensions.map(ext => `.${NATIVE_PLATFORM}${ext}`) + ); + } + if (defaultPlatform) { + extensions.unshift( + ...this._options.extensions.map(ext => `.${defaultPlatform}${ext}`) + ); + } + const skipResolution = + options && options.skipNodeResolution && !moduleName.includes(path().sep); + return { + extensions, + key, + moduleDirectory, + paths, + skipResolution + }; + } + + /** + * _getHasteModulePath attempts to return the path to a haste module. + */ + _getHasteModulePath(moduleName) { + const parts = moduleName.split('/'); + const hastePackage = this.getPackage(parts.shift()); + if (hastePackage) { + return path().join.apply( + path(), + [path().dirname(hastePackage)].concat(parts) + ); + } + return null; + } + _throwModNotFoundError(from, moduleName) { + const relativePath = + (0, _slash().default)(path().relative(this._options.rootDir, from)) || + '.'; + throw new _ModuleNotFoundError.default( + `Cannot find module '${moduleName}' from '${relativePath}'`, + moduleName + ); + } + _getMapModuleName(matches) { + return matches + ? moduleName => + moduleName.replace( + /\$([0-9]+)/g, + (_, index) => matches[parseInt(index, 10)] || '' + ) + : moduleName => moduleName; + } + _isAliasModule(moduleName) { + const moduleNameMapper = this._options.moduleNameMapper; + if (!moduleNameMapper) { + return false; + } + return moduleNameMapper.some(({regex}) => regex.test(moduleName)); + } + isCoreModule(moduleName) { + return ( + this._options.hasCoreModules && + ((0, _isBuiltinModule.default)(moduleName) || + moduleName.startsWith('node:')) && + !this._isAliasModule(moduleName) + ); + } + getModule(name) { + return this._moduleMap.getModule( + name, + this._options.defaultPlatform, + this._supportsNativePlatform + ); + } + getModulePath(from, moduleName) { + if (moduleName[0] !== '.' || path().isAbsolute(moduleName)) { + return moduleName; + } + return path().normalize(`${path().dirname(from)}/${moduleName}`); + } + getPackage(name) { + return this._moduleMap.getPackage( + name, + this._options.defaultPlatform, + this._supportsNativePlatform + ); + } + getMockModule(from, name) { + const mock = this._moduleMap.getMockModule(name); + if (mock) { + return mock; + } else { + const moduleName = this.resolveStubModuleName(from, name); + if (moduleName) { + return this.getModule(moduleName) || moduleName; + } + } + return null; + } + async getMockModuleAsync(from, name) { + const mock = this._moduleMap.getMockModule(name); + if (mock) { + return mock; + } else { + const moduleName = await this.resolveStubModuleNameAsync(from, name); + if (moduleName) { + return this.getModule(moduleName) || moduleName; + } + } + return null; + } + getModulePaths(from) { + const cachedModule = this._modulePathCache.get(from); + if (cachedModule) { + return cachedModule; + } + const moduleDirectory = this._options.moduleDirectories; + const paths = (0, _nodeModulesPaths.default)(from, { + moduleDirectory + }); + if (paths[paths.length - 1] === undefined) { + // circumvent node-resolve bug that adds `undefined` as last item. + paths.pop(); + } + this._modulePathCache.set(from, paths); + return paths; + } + getGlobalPaths(moduleName) { + if (!moduleName || moduleName[0] === '.' || this.isCoreModule(moduleName)) { + return []; + } + return _nodeModulesPaths.GlobalPaths; + } + getModuleID(virtualMocks, from, moduleName = '', options) { + const stringifiedOptions = options ? JSON.stringify(options) : ''; + const key = from + path().delimiter + moduleName + stringifiedOptions; + const cachedModuleID = this._moduleIDCache.get(key); + if (cachedModuleID) { + return cachedModuleID; + } + const moduleType = this._getModuleType(moduleName); + const absolutePath = this._getAbsolutePath( + virtualMocks, + from, + moduleName, + options + ); + const mockPath = this._getMockPath(from, moduleName); + const sep = path().delimiter; + const id = + moduleType + + sep + + (absolutePath ? absolutePath + sep : '') + + (mockPath ? mockPath + sep : '') + + (stringifiedOptions ? stringifiedOptions + sep : ''); + this._moduleIDCache.set(key, id); + return id; + } + async getModuleIDAsync(virtualMocks, from, moduleName = '', options) { + const stringifiedOptions = options ? JSON.stringify(options) : ''; + const key = from + path().delimiter + moduleName + stringifiedOptions; + const cachedModuleID = this._moduleIDCache.get(key); + if (cachedModuleID) { + return cachedModuleID; + } + if (moduleName.startsWith('data:')) { + return moduleName; + } + const moduleType = this._getModuleType(moduleName); + const absolutePath = await this._getAbsolutePathAsync( + virtualMocks, + from, + moduleName, + options + ); + const mockPath = await this._getMockPathAsync(from, moduleName); + const sep = path().delimiter; + const id = + moduleType + + sep + + (absolutePath ? absolutePath + sep : '') + + (mockPath ? mockPath + sep : '') + + (stringifiedOptions ? stringifiedOptions + sep : ''); + this._moduleIDCache.set(key, id); + return id; + } + _getModuleType(moduleName) { + return this.isCoreModule(moduleName) ? 'node' : 'user'; + } + _getAbsolutePath(virtualMocks, from, moduleName, options) { + if (this.isCoreModule(moduleName)) { + return moduleName; + } + if (moduleName.startsWith('data:')) { + return moduleName; + } + return this._isModuleResolved(from, moduleName) + ? this.getModule(moduleName) + : this._getVirtualMockPath(virtualMocks, from, moduleName, options); + } + async _getAbsolutePathAsync(virtualMocks, from, moduleName, options) { + if (this.isCoreModule(moduleName)) { + return moduleName; + } + if (moduleName.startsWith('data:')) { + return moduleName; + } + const isModuleResolved = await this._isModuleResolvedAsync( + from, + moduleName + ); + return isModuleResolved + ? this.getModule(moduleName) + : this._getVirtualMockPathAsync(virtualMocks, from, moduleName, options); + } + _getMockPath(from, moduleName) { + return !this.isCoreModule(moduleName) + ? this.getMockModule(from, moduleName) + : null; + } + async _getMockPathAsync(from, moduleName) { + return !this.isCoreModule(moduleName) + ? this.getMockModuleAsync(from, moduleName) + : null; + } + _getVirtualMockPath(virtualMocks, from, moduleName, options) { + const virtualMockPath = this.getModulePath(from, moduleName); + return virtualMocks.get(virtualMockPath) + ? virtualMockPath + : moduleName + ? this.resolveModule(from, moduleName, options) + : from; + } + async _getVirtualMockPathAsync(virtualMocks, from, moduleName, options) { + const virtualMockPath = this.getModulePath(from, moduleName); + return virtualMocks.get(virtualMockPath) + ? virtualMockPath + : moduleName + ? this.resolveModuleAsync(from, moduleName, options) + : from; + } + _isModuleResolved(from, moduleName) { + return !!( + this.getModule(moduleName) || this.getMockModule(from, moduleName) + ); + } + async _isModuleResolvedAsync(from, moduleName) { + return !!( + this.getModule(moduleName) || + (await this.getMockModuleAsync(from, moduleName)) + ); + } + resolveStubModuleName(from, moduleName) { + const dirname = path().dirname(from); + const {extensions, moduleDirectory, paths} = this._prepareForResolution( + dirname, + moduleName + ); + const moduleNameMapper = this._options.moduleNameMapper; + const resolver = this._options.resolver; + if (moduleNameMapper) { + for (const {moduleName: mappedModuleName, regex} of moduleNameMapper) { + if (regex.test(moduleName)) { + // Note: once a moduleNameMapper matches the name, it must result + // in a module, or else an error is thrown. + const matches = moduleName.match(regex); + const mapModuleName = this._getMapModuleName(matches); + const possibleModuleNames = Array.isArray(mappedModuleName) + ? mappedModuleName + : [mappedModuleName]; + let module = null; + for (const possibleModuleName of possibleModuleNames) { + const updatedName = mapModuleName(possibleModuleName); + module = + this.getModule(updatedName) || + Resolver.findNodeModule(updatedName, { + basedir: dirname, + extensions, + moduleDirectory, + paths, + resolver, + rootDir: this._options.rootDir + }); + if (module) { + break; + } + } + if (!module) { + throw createNoMappedModuleFoundError( + moduleName, + mapModuleName, + mappedModuleName, + regex, + resolver + ); + } + return module; + } + } + } + return null; + } + async resolveStubModuleNameAsync(from, moduleName) { + const dirname = path().dirname(from); + const {extensions, moduleDirectory, paths} = this._prepareForResolution( + dirname, + moduleName + ); + const moduleNameMapper = this._options.moduleNameMapper; + const resolver = this._options.resolver; + if (moduleNameMapper) { + for (const {moduleName: mappedModuleName, regex} of moduleNameMapper) { + if (regex.test(moduleName)) { + // Note: once a moduleNameMapper matches the name, it must result + // in a module, or else an error is thrown. + const matches = moduleName.match(regex); + const mapModuleName = this._getMapModuleName(matches); + const possibleModuleNames = Array.isArray(mappedModuleName) + ? mappedModuleName + : [mappedModuleName]; + let module = null; + for (const possibleModuleName of possibleModuleNames) { + const updatedName = mapModuleName(possibleModuleName); + module = + this.getModule(updatedName) || + (await Resolver.findNodeModuleAsync(updatedName, { + basedir: dirname, + extensions, + moduleDirectory, + paths, + resolver, + rootDir: this._options.rootDir + })); + if (module) { + break; + } + } + if (!module) { + throw createNoMappedModuleFoundError( + moduleName, + mapModuleName, + mappedModuleName, + regex, + resolver + ); + } + return module; + } + } + } + return null; + } +} +exports.default = Resolver; +const createNoMappedModuleFoundError = ( + moduleName, + mapModuleName, + mappedModuleName, + regex, + resolver +) => { + const mappedAs = Array.isArray(mappedModuleName) + ? JSON.stringify(mappedModuleName.map(mapModuleName), null, 2) + : mappedModuleName; + const original = Array.isArray(mappedModuleName) + ? `${ + JSON.stringify(mappedModuleName, null, 6) // using 6 because of misalignment when nested below + .slice(0, -1) + ' '.repeat(4) + }]` /// align last bracket correctly as well + : mappedModuleName; + const error = new Error( + _chalk().default.red(`${_chalk().default.bold('Configuration error')}: + +Could not locate module ${_chalk().default.bold(moduleName)} mapped as: +${_chalk().default.bold(mappedAs)}. + +Please check your configuration for these entries: +{ + "moduleNameMapper": { + "${regex.toString()}": "${_chalk().default.bold(original)}" + }, + "resolver": ${_chalk().default.bold(String(resolver))} +}`) + ); + error.name = ''; + return error; +}; +function loadResolver(resolver) { + if (resolver == null) { + return _defaultResolver.default; + } + const loadedResolver = require(resolver); + if (loadedResolver == null) { + throw new Error(`Resolver located at ${resolver} does not export anything`); + } + if (typeof loadedResolver === 'function') { + return loadedResolver; + } + if ( + typeof loadedResolver === 'object' && + (loadedResolver.sync != null || loadedResolver.async != null) + ) { + return loadedResolver; + } + throw new Error( + `Resolver located at ${resolver} does not export a function or an object with "sync" and "async" props` + ); +} diff --git a/node_modules/jest-resolve/build/shouldLoadAsEsm.js b/node_modules/jest-resolve/build/shouldLoadAsEsm.js new file mode 100644 index 00000000..c6b14187 --- /dev/null +++ b/node_modules/jest-resolve/build/shouldLoadAsEsm.js @@ -0,0 +1,90 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.clearCachedLookups = clearCachedLookups; +exports.default = cachedShouldLoadAsEsm; +function _path() { + const data = require('path'); + _path = function () { + return data; + }; + return data; +} +function _vm() { + const data = require('vm'); + _vm = function () { + return data; + }; + return data; +} +var _fileWalkers = require('./fileWalkers'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// @ts-expect-error: experimental, not added to the types + +const runtimeSupportsVmModules = typeof _vm().SyntheticModule === 'function'; +const cachedFileLookups = new Map(); +const cachedDirLookups = new Map(); +const cachedChecks = new Map(); +function clearCachedLookups() { + cachedFileLookups.clear(); + cachedDirLookups.clear(); + cachedChecks.clear(); +} +function cachedShouldLoadAsEsm(path, extensionsToTreatAsEsm) { + if (!runtimeSupportsVmModules) { + return false; + } + let cachedLookup = cachedFileLookups.get(path); + if (cachedLookup === undefined) { + cachedLookup = shouldLoadAsEsm(path, extensionsToTreatAsEsm); + cachedFileLookups.set(path, cachedLookup); + } + return cachedLookup; +} + +// this is a bad version of what https://github.com/nodejs/modules/issues/393 would provide +function shouldLoadAsEsm(path, extensionsToTreatAsEsm) { + const extension = (0, _path().extname)(path); + if (extension === '.mjs') { + return true; + } + if (extension === '.cjs') { + return false; + } + if (extension !== '.js') { + return extensionsToTreatAsEsm.includes(extension); + } + const cwd = (0, _path().dirname)(path); + let cachedLookup = cachedDirLookups.get(cwd); + if (cachedLookup === undefined) { + cachedLookup = cachedPkgCheck(cwd); + cachedFileLookups.set(cwd, cachedLookup); + } + return cachedLookup; +} +function cachedPkgCheck(cwd) { + const pkgPath = (0, _fileWalkers.findClosestPackageJson)(cwd); + if (!pkgPath) { + return false; + } + let hasModuleField = cachedChecks.get(pkgPath); + if (hasModuleField != null) { + return hasModuleField; + } + try { + const pkg = (0, _fileWalkers.readPackageCached)(pkgPath); + hasModuleField = pkg.type === 'module'; + } catch { + hasModuleField = false; + } + cachedChecks.set(pkgPath, hasModuleField); + return hasModuleField; +} diff --git a/node_modules/jest-resolve/build/types.js b/node_modules/jest-resolve/build/types.js new file mode 100644 index 00000000..ad9a93a7 --- /dev/null +++ b/node_modules/jest-resolve/build/types.js @@ -0,0 +1 @@ +'use strict'; diff --git a/node_modules/jest-resolve/build/utils.js b/node_modules/jest-resolve/build/utils.js new file mode 100644 index 00000000..dce4e089 --- /dev/null +++ b/node_modules/jest-resolve/build/utils.js @@ -0,0 +1,233 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.resolveWatchPlugin = + exports.resolveTestEnvironment = + exports.resolveSequencer = + exports.resolveRunner = + void 0; +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +function _jestValidate() { + const data = require('jest-validate'); + _jestValidate = function () { + return data; + }; + return data; +} +var _resolver = _interopRequireDefault(require('./resolver')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const BULLET = _chalk().default.bold('\u25cf '); +const DOCUMENTATION_NOTE = ` ${_chalk().default.bold( + 'Configuration Documentation:' +)} + https://jestjs.io/docs/configuration +`; +const createValidationError = message => + new (_jestValidate().ValidationError)( + `${BULLET}Validation Error`, + message, + DOCUMENTATION_NOTE + ); +const replaceRootDirInPath = (rootDir, filePath) => { + if (!/^/.test(filePath)) { + return filePath; + } + return path().resolve( + rootDir, + path().normalize(`./${filePath.substr(''.length)}`) + ); +}; +const resolveWithPrefix = ( + resolver, + { + filePath, + humanOptionName, + optionName, + prefix, + requireResolveFunction, + rootDir + } +) => { + const fileName = replaceRootDirInPath(rootDir, filePath); + let module = _resolver.default.findNodeModule(`${prefix}${fileName}`, { + basedir: rootDir, + resolver: resolver || undefined + }); + if (module) { + return module; + } + try { + return requireResolveFunction(`${prefix}${fileName}`); + } catch {} + module = _resolver.default.findNodeModule(fileName, { + basedir: rootDir, + resolver: resolver || undefined + }); + if (module) { + return module; + } + try { + return requireResolveFunction(fileName); + } catch {} + throw createValidationError( + ` ${humanOptionName} ${_chalk().default.bold( + fileName + )} cannot be found. Make sure the ${_chalk().default.bold( + optionName + )} configuration option points to an existing node module.` + ); +}; + +/** + * Finds the test environment to use: + * + * 1. looks for jest-environment- relative to project. + * 1. looks for jest-environment- relative to Jest. + * 1. looks for relative to project. + * 1. looks for relative to Jest. + */ +const resolveTestEnvironment = ({ + rootDir, + testEnvironment: filePath, + requireResolveFunction +}) => { + // we don't want to resolve the actual `jsdom` module if `jest-environment-jsdom` is not installed, but `jsdom` package is + if (filePath === 'jsdom') { + filePath = 'jest-environment-jsdom'; + } + try { + return resolveWithPrefix(undefined, { + filePath, + humanOptionName: 'Test environment', + optionName: 'testEnvironment', + prefix: 'jest-environment-', + requireResolveFunction, + rootDir + }); + } catch (error) { + if (filePath === 'jest-environment-jsdom') { + error.message += + '\n\nAs of Jest 28 "jest-environment-jsdom" is no longer shipped by default, make sure to install it separately.'; + } + throw error; + } +}; + +/** + * Finds the watch plugins to use: + * + * 1. looks for jest-watch- relative to project. + * 1. looks for jest-watch- relative to Jest. + * 1. looks for relative to project. + * 1. looks for relative to Jest. + */ +exports.resolveTestEnvironment = resolveTestEnvironment; +const resolveWatchPlugin = ( + resolver, + {filePath, rootDir, requireResolveFunction} +) => + resolveWithPrefix(resolver, { + filePath, + humanOptionName: 'Watch plugin', + optionName: 'watchPlugins', + prefix: 'jest-watch-', + requireResolveFunction, + rootDir + }); + +/** + * Finds the runner to use: + * + * 1. looks for jest-runner- relative to project. + * 1. looks for jest-runner- relative to Jest. + * 1. looks for relative to project. + * 1. looks for relative to Jest. + */ +exports.resolveWatchPlugin = resolveWatchPlugin; +const resolveRunner = (resolver, {filePath, rootDir, requireResolveFunction}) => + resolveWithPrefix(resolver, { + filePath, + humanOptionName: 'Jest Runner', + optionName: 'runner', + prefix: 'jest-runner-', + requireResolveFunction, + rootDir + }); +exports.resolveRunner = resolveRunner; +const resolveSequencer = ( + resolver, + {filePath, rootDir, requireResolveFunction} +) => + resolveWithPrefix(resolver, { + filePath, + humanOptionName: 'Jest Sequencer', + optionName: 'testSequencer', + prefix: 'jest-sequencer-', + requireResolveFunction, + rootDir + }); +exports.resolveSequencer = resolveSequencer; diff --git a/node_modules/jest-resolve/package.json b/node_modules/jest-resolve/package.json new file mode 100644 index 00000000..198c9bef --- /dev/null +++ b/node_modules/jest-resolve/package.json @@ -0,0 +1,44 @@ +{ + "name": "jest-resolve", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-resolve" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "devDependencies": { + "@tsd/typescript": "^5.0.4", + "@types/graceful-fs": "^4.1.3", + "@types/pnpapi": "^0.0.2", + "@types/resolve": "^1.20.2", + "tsd-lite": "^0.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-runner/LICENSE b/node_modules/jest-runner/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-runner/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-runner/build/index.d.ts b/node_modules/jest-runner/build/index.d.ts new file mode 100644 index 00000000..2e46f458 --- /dev/null +++ b/node_modules/jest-runner/build/index.d.ts @@ -0,0 +1,127 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import {Config} from '@jest/types'; +import type {SerializableError} from '@jest/test-result'; +import {Test} from '@jest/test-result'; +import {TestEvents} from '@jest/test-result'; +import type {TestResult} from '@jest/test-result'; +import {TestWatcher} from 'jest-watcher'; + +declare abstract class BaseTestRunner { + protected readonly _globalConfig: Config.GlobalConfig; + protected readonly _context: TestRunnerContext; + readonly isSerial?: boolean; + abstract readonly supportsEventEmitters: boolean; + constructor(_globalConfig: Config.GlobalConfig, _context: TestRunnerContext); +} + +export declare abstract class CallbackTestRunner + extends BaseTestRunner + implements CallbackTestRunnerInterface +{ + readonly supportsEventEmitters = false; + abstract runTests( + tests: Array, + watcher: TestWatcher, + onStart: OnTestStart, + onResult: OnTestSuccess, + onFailure: OnTestFailure, + options: TestRunnerOptions, + ): Promise; +} + +export declare interface CallbackTestRunnerInterface { + readonly isSerial?: boolean; + readonly supportsEventEmitters?: boolean; + runTests( + tests: Array, + watcher: TestWatcher, + onStart: OnTestStart, + onResult: OnTestSuccess, + onFailure: OnTestFailure, + options: TestRunnerOptions, + ): Promise; +} + +export {Config}; + +export declare abstract class EmittingTestRunner + extends BaseTestRunner + implements EmittingTestRunnerInterface +{ + readonly supportsEventEmitters = true; + abstract runTests( + tests: Array, + watcher: TestWatcher, + options: TestRunnerOptions, + ): Promise; + abstract on( + eventName: Name, + listener: (eventData: TestEvents[Name]) => void | Promise, + ): UnsubscribeFn; +} + +export declare interface EmittingTestRunnerInterface { + readonly isSerial?: boolean; + readonly supportsEventEmitters: true; + runTests( + tests: Array, + watcher: TestWatcher, + options: TestRunnerOptions, + ): Promise; + on( + eventName: Name, + listener: (eventData: TestEvents[Name]) => void | Promise, + ): UnsubscribeFn; +} + +export declare type JestTestRunner = CallbackTestRunner | EmittingTestRunner; + +export declare type OnTestFailure = ( + test: Test, + serializableError: SerializableError, +) => Promise; + +export declare type OnTestStart = (test: Test) => Promise; + +export declare type OnTestSuccess = ( + test: Test, + testResult: TestResult, +) => Promise; + +export {Test}; + +export {TestEvents}; + +declare class TestRunner extends EmittingTestRunner { + #private; + runTests( + tests: Array, + watcher: TestWatcher, + options: TestRunnerOptions, + ): Promise; + on( + eventName: Name, + listener: (eventData: TestEvents[Name]) => void | Promise, + ): UnsubscribeFn; +} +export default TestRunner; + +export declare type TestRunnerContext = { + changedFiles?: Set; + sourcesRelatedToTestsInChangedFiles?: Set; +}; + +export declare type TestRunnerOptions = { + serial: boolean; +}; + +export {TestWatcher}; + +export declare type UnsubscribeFn = () => void; + +export {}; diff --git a/node_modules/jest-runner/build/index.js b/node_modules/jest-runner/build/index.js new file mode 100644 index 00000000..65c0ed18 --- /dev/null +++ b/node_modules/jest-runner/build/index.js @@ -0,0 +1,219 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +Object.defineProperty(exports, 'CallbackTestRunner', { + enumerable: true, + get: function () { + return _types.CallbackTestRunner; + } +}); +Object.defineProperty(exports, 'EmittingTestRunner', { + enumerable: true, + get: function () { + return _types.EmittingTestRunner; + } +}); +exports.default = void 0; +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +function _emittery() { + const data = _interopRequireDefault(require('emittery')); + _emittery = function () { + return data; + }; + return data; +} +function _pLimit() { + const data = _interopRequireDefault(require('p-limit')); + _pLimit = function () { + return data; + }; + return data; +} +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +function _jestWorker() { + const data = require('jest-worker'); + _jestWorker = function () { + return data; + }; + return data; +} +var _runTest = _interopRequireDefault(require('./runTest')); +var _types = require('./types'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +class TestRunner extends _types.EmittingTestRunner { + #eventEmitter = new (_emittery().default)(); + async runTests(tests, watcher, options) { + return options.serial + ? this.#createInBandTestRun(tests, watcher) + : this.#createParallelTestRun(tests, watcher); + } + async #createInBandTestRun(tests, watcher) { + process.env.JEST_WORKER_ID = '1'; + const mutex = (0, _pLimit().default)(1); + return tests.reduce( + (promise, test) => + mutex(() => + promise + .then(async () => { + if (watcher.isInterrupted()) { + throw new CancelRun(); + } + + // `deepCyclicCopy` used here to avoid mem-leak + const sendMessageToJest = (eventName, args) => + this.#eventEmitter.emit( + eventName, + (0, _jestUtil().deepCyclicCopy)(args, { + keepPrototype: false + }) + ); + await this.#eventEmitter.emit('test-file-start', [test]); + return (0, _runTest.default)( + test.path, + this._globalConfig, + test.context.config, + test.context.resolver, + this._context, + sendMessageToJest + ); + }) + .then( + result => + this.#eventEmitter.emit('test-file-success', [test, result]), + error => + this.#eventEmitter.emit('test-file-failure', [test, error]) + ) + ), + Promise.resolve() + ); + } + async #createParallelTestRun(tests, watcher) { + const resolvers = new Map(); + for (const test of tests) { + if (!resolvers.has(test.context.config.id)) { + resolvers.set(test.context.config.id, { + config: test.context.config, + serializableModuleMap: test.context.moduleMap.toJSON() + }); + } + } + const worker = new (_jestWorker().Worker)(require.resolve('./testWorker'), { + enableWorkerThreads: this._globalConfig.workerThreads, + exposedMethods: ['worker'], + forkOptions: { + serialization: 'json', + stdio: 'pipe' + }, + // The workerIdleMemoryLimit should've been converted to a number during + // the normalization phase. + idleMemoryLimit: + typeof this._globalConfig.workerIdleMemoryLimit === 'number' + ? this._globalConfig.workerIdleMemoryLimit + : undefined, + maxRetries: 3, + numWorkers: this._globalConfig.maxWorkers, + setupArgs: [ + { + serializableResolvers: Array.from(resolvers.values()) + } + ] + }); + if (worker.getStdout()) worker.getStdout().pipe(process.stdout); + if (worker.getStderr()) worker.getStderr().pipe(process.stderr); + const mutex = (0, _pLimit().default)(this._globalConfig.maxWorkers); + + // Send test suites to workers continuously instead of all at once to track + // the start time of individual tests. + const runTestInWorker = test => + mutex(async () => { + if (watcher.isInterrupted()) { + return Promise.reject(); + } + await this.#eventEmitter.emit('test-file-start', [test]); + const promise = worker.worker({ + config: test.context.config, + context: { + ...this._context, + changedFiles: + this._context.changedFiles && + Array.from(this._context.changedFiles), + sourcesRelatedToTestsInChangedFiles: + this._context.sourcesRelatedToTestsInChangedFiles && + Array.from(this._context.sourcesRelatedToTestsInChangedFiles) + }, + globalConfig: this._globalConfig, + path: test.path + }); + if (promise.UNSTABLE_onCustomMessage) { + // TODO: Get appropriate type for `onCustomMessage` + promise.UNSTABLE_onCustomMessage(([event, payload]) => + this.#eventEmitter.emit(event, payload) + ); + } + return promise; + }); + const onInterrupt = new Promise((_, reject) => { + watcher.on('change', state => { + if (state.interrupted) { + reject(new CancelRun()); + } + }); + }); + const runAllTests = Promise.all( + tests.map(test => + runTestInWorker(test).then( + result => + this.#eventEmitter.emit('test-file-success', [test, result]), + error => this.#eventEmitter.emit('test-file-failure', [test, error]) + ) + ) + ); + const cleanup = async () => { + const {forceExited} = await worker.end(); + if (forceExited) { + console.error( + _chalk().default.yellow( + 'A worker process has failed to exit gracefully and has been force exited. ' + + 'This is likely caused by tests leaking due to improper teardown. ' + + 'Try running with --detectOpenHandles to find leaks. ' + + 'Active timers can also cause this, ensure that .unref() was called on them.' + ) + ); + } + }; + return Promise.race([runAllTests, onInterrupt]).then(cleanup, cleanup); + } + on(eventName, listener) { + return this.#eventEmitter.on(eventName, listener); + } +} +exports.default = TestRunner; +class CancelRun extends Error { + constructor(message) { + super(message); + this.name = 'CancelRun'; + } +} diff --git a/node_modules/jest-runner/build/runTest.js b/node_modules/jest-runner/build/runTest.js new file mode 100644 index 00000000..e3367c85 --- /dev/null +++ b/node_modules/jest-runner/build/runTest.js @@ -0,0 +1,462 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = runTest; +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +function fs() { + const data = _interopRequireWildcard(require('graceful-fs')); + fs = function () { + return data; + }; + return data; +} +function _sourceMapSupport() { + const data = _interopRequireDefault(require('source-map-support')); + _sourceMapSupport = function () { + return data; + }; + return data; +} +function _console() { + const data = require('@jest/console'); + _console = function () { + return data; + }; + return data; +} +function _transform() { + const data = require('@jest/transform'); + _transform = function () { + return data; + }; + return data; +} +function docblock() { + const data = _interopRequireWildcard(require('jest-docblock')); + docblock = function () { + return data; + }; + return data; +} +function _jestLeakDetector() { + const data = _interopRequireDefault(require('jest-leak-detector')); + _jestLeakDetector = function () { + return data; + }; + return data; +} +function _jestMessageUtil() { + const data = require('jest-message-util'); + _jestMessageUtil = function () { + return data; + }; + return data; +} +function _jestResolve() { + const data = require('jest-resolve'); + _jestResolve = function () { + return data; + }; + return data; +} +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +function freezeConsole(testConsole, config) { + // @ts-expect-error: `_log` is `private` - we should figure out some proper API here + testConsole._log = function fakeConsolePush(_type, message) { + const error = new (_jestUtil().ErrorWithStack)( + `${_chalk().default.red( + `${_chalk().default.bold( + 'Cannot log after tests are done.' + )} Did you forget to wait for something async in your test?` + )}\nAttempted to log "${message}".`, + fakeConsolePush + ); + const formattedError = (0, _jestMessageUtil().formatExecError)( + error, + config, + { + noStackTrace: false + }, + undefined, + true + ); + process.stderr.write(`\n${formattedError}\n`); + process.exitCode = 1; + }; +} + +// Keeping the core of "runTest" as a separate function (as "runTestInternal") +// is key to be able to detect memory leaks. Since all variables are local to +// the function, when "runTestInternal" finishes its execution, they can all be +// freed, UNLESS something else is leaking them (and that's why we can detect +// the leak!). +// +// If we had all the code in a single function, we should manually nullify all +// references to verify if there is a leak, which is not maintainable and error +// prone. That's why "runTestInternal" CANNOT be inlined inside "runTest". +async function runTestInternal( + path, + globalConfig, + projectConfig, + resolver, + context, + sendMessageToJest +) { + const testSource = fs().readFileSync(path, 'utf8'); + const docblockPragmas = docblock().parse(docblock().extract(testSource)); + const customEnvironment = docblockPragmas['jest-environment']; + let testEnvironment = projectConfig.testEnvironment; + if (customEnvironment) { + if (Array.isArray(customEnvironment)) { + throw new Error( + `You can only define a single test environment through docblocks, got "${customEnvironment.join( + ', ' + )}"` + ); + } + testEnvironment = (0, _jestResolve().resolveTestEnvironment)({ + ...projectConfig, + requireResolveFunction: require.resolve, + testEnvironment: customEnvironment + }); + } + const cacheFS = new Map([[path, testSource]]); + const transformer = await (0, _transform().createScriptTransformer)( + projectConfig, + cacheFS + ); + const TestEnvironment = await transformer.requireAndTranspileModule( + testEnvironment + ); + const testFramework = await transformer.requireAndTranspileModule( + process.env.JEST_JASMINE === '1' + ? require.resolve('jest-jasmine2') + : projectConfig.testRunner + ); + const Runtime = (0, _jestUtil().interopRequireDefault)( + projectConfig.runtime + ? require(projectConfig.runtime) + : require('jest-runtime') + ).default; + const consoleOut = globalConfig.useStderr ? process.stderr : process.stdout; + const consoleFormatter = (type, message) => + (0, _console().getConsoleOutput)( + // 4 = the console call is buried 4 stack frames deep + _console().BufferedConsole.write([], type, message, 4), + projectConfig, + globalConfig + ); + let testConsole; + if (globalConfig.silent) { + testConsole = new (_console().NullConsole)( + consoleOut, + consoleOut, + consoleFormatter + ); + } else if (globalConfig.verbose) { + testConsole = new (_console().CustomConsole)( + consoleOut, + consoleOut, + consoleFormatter + ); + } else { + testConsole = new (_console().BufferedConsole)(); + } + let extraTestEnvironmentOptions; + const docblockEnvironmentOptions = + docblockPragmas['jest-environment-options']; + if (typeof docblockEnvironmentOptions === 'string') { + extraTestEnvironmentOptions = JSON.parse(docblockEnvironmentOptions); + } + const environment = new TestEnvironment( + { + globalConfig, + projectConfig: extraTestEnvironmentOptions + ? { + ...projectConfig, + testEnvironmentOptions: { + ...projectConfig.testEnvironmentOptions, + ...extraTestEnvironmentOptions + } + } + : projectConfig + }, + { + console: testConsole, + docblockPragmas, + testPath: path + } + ); + if (typeof environment.getVmContext !== 'function') { + console.error( + `Test environment found at "${testEnvironment}" does not export a "getVmContext" method, which is mandatory from Jest 27. This method is a replacement for "runScript".` + ); + process.exit(1); + } + const leakDetector = projectConfig.detectLeaks + ? new (_jestLeakDetector().default)(environment) + : null; + (0, _jestUtil().setGlobal)(environment.global, 'console', testConsole); + const runtime = new Runtime( + projectConfig, + environment, + resolver, + transformer, + cacheFS, + { + changedFiles: context.changedFiles, + collectCoverage: globalConfig.collectCoverage, + collectCoverageFrom: globalConfig.collectCoverageFrom, + coverageProvider: globalConfig.coverageProvider, + sourcesRelatedToTestsInChangedFiles: + context.sourcesRelatedToTestsInChangedFiles + }, + path, + globalConfig + ); + let isTornDown = false; + const tearDownEnv = async () => { + if (!isTornDown) { + runtime.teardown(); + await environment.teardown(); + isTornDown = true; + } + }; + const start = Date.now(); + for (const path of projectConfig.setupFiles) { + const esm = runtime.unstable_shouldLoadAsEsm(path); + if (esm) { + await runtime.unstable_importModule(path); + } else { + const setupFile = runtime.requireModule(path); + if (typeof setupFile === 'function') { + await setupFile(); + } + } + } + const sourcemapOptions = { + environment: 'node', + handleUncaughtExceptions: false, + retrieveSourceMap: source => { + const sourceMapSource = runtime.getSourceMaps()?.get(source); + if (sourceMapSource) { + try { + return { + map: JSON.parse(fs().readFileSync(sourceMapSource, 'utf8')), + url: source + }; + } catch {} + } + return null; + } + }; + + // For tests + runtime + .requireInternalModule(require.resolve('source-map-support')) + .install(sourcemapOptions); + + // For runtime errors + _sourceMapSupport().default.install(sourcemapOptions); + if ( + environment.global && + environment.global.process && + environment.global.process.exit + ) { + const realExit = environment.global.process.exit; + environment.global.process.exit = function exit(...args) { + const error = new (_jestUtil().ErrorWithStack)( + `process.exit called with "${args.join(', ')}"`, + exit + ); + const formattedError = (0, _jestMessageUtil().formatExecError)( + error, + projectConfig, + { + noStackTrace: false + }, + undefined, + true + ); + process.stderr.write(formattedError); + return realExit(...args); + }; + } + + // if we don't have `getVmContext` on the env skip coverage + const collectV8Coverage = + globalConfig.collectCoverage && + globalConfig.coverageProvider === 'v8' && + typeof environment.getVmContext === 'function'; + + // Node's error-message stack size is limited at 10, but it's pretty useful + // to see more than that when a test fails. + Error.stackTraceLimit = 100; + try { + await environment.setup(); + let result; + try { + if (collectV8Coverage) { + await runtime.collectV8Coverage(); + } + result = await testFramework( + globalConfig, + projectConfig, + environment, + runtime, + path, + sendMessageToJest + ); + } catch (err) { + // Access stack before uninstalling sourcemaps + err.stack; + throw err; + } finally { + if (collectV8Coverage) { + await runtime.stopCollectingV8Coverage(); + } + } + freezeConsole(testConsole, projectConfig); + const testCount = + result.numPassingTests + + result.numFailingTests + + result.numPendingTests + + result.numTodoTests; + const end = Date.now(); + const testRuntime = end - start; + result.perfStats = { + end, + runtime: testRuntime, + slow: testRuntime / 1000 > projectConfig.slowTestThreshold, + start + }; + result.testFilePath = path; + result.console = testConsole.getBuffer(); + result.skipped = testCount === result.numPendingTests; + result.displayName = projectConfig.displayName; + const coverage = runtime.getAllCoverageInfoCopy(); + if (coverage) { + const coverageKeys = Object.keys(coverage); + if (coverageKeys.length) { + result.coverage = coverage; + } + } + if (collectV8Coverage) { + const v8Coverage = runtime.getAllV8CoverageInfoCopy(); + if (v8Coverage && v8Coverage.length > 0) { + result.v8Coverage = v8Coverage; + } + } + if (globalConfig.logHeapUsage) { + // @ts-expect-error - doesn't exist on globalThis + globalThis.gc?.(); + result.memoryUsage = process.memoryUsage().heapUsed; + } + await tearDownEnv(); + + // Delay the resolution to allow log messages to be output. + return await new Promise(resolve => { + setImmediate(() => + resolve({ + leakDetector, + result + }) + ); + }); + } finally { + await tearDownEnv(); + _sourceMapSupport().default.resetRetrieveHandlers(); + } +} +async function runTest( + path, + globalConfig, + config, + resolver, + context, + sendMessageToJest +) { + const {leakDetector, result} = await runTestInternal( + path, + globalConfig, + config, + resolver, + context, + sendMessageToJest + ); + if (leakDetector) { + // We wanna allow a tiny but time to pass to allow last-minute cleanup + await new Promise(resolve => setTimeout(resolve, 100)); + + // Resolve leak detector, outside the "runTestInternal" closure. + result.leaks = await leakDetector.isLeaking(); + } else { + result.leaks = false; + } + return result; +} diff --git a/node_modules/jest-runner/build/testWorker.js b/node_modules/jest-runner/build/testWorker.js new file mode 100644 index 00000000..fe0363e9 --- /dev/null +++ b/node_modules/jest-runner/build/testWorker.js @@ -0,0 +1,123 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.setup = setup; +exports.worker = worker; +function _exit() { + const data = _interopRequireDefault(require('exit')); + _exit = function () { + return data; + }; + return data; +} +function _jestHasteMap() { + const data = _interopRequireDefault(require('jest-haste-map')); + _jestHasteMap = function () { + return data; + }; + return data; +} +function _jestMessageUtil() { + const data = require('jest-message-util'); + _jestMessageUtil = function () { + return data; + }; + return data; +} +function _jestRuntime() { + const data = _interopRequireDefault(require('jest-runtime')); + _jestRuntime = function () { + return data; + }; + return data; +} +function _jestWorker() { + const data = require('jest-worker'); + _jestWorker = function () { + return data; + }; + return data; +} +var _runTest = _interopRequireDefault(require('./runTest')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +// Make sure uncaught errors are logged before we exit. +process.on('uncaughtException', err => { + console.error(err.stack); + (0, _exit().default)(1); +}); +const formatError = error => { + if (typeof error === 'string') { + const {message, stack} = (0, _jestMessageUtil().separateMessageFromStack)( + error + ); + return { + message, + stack, + type: 'Error' + }; + } + return { + code: error.code || undefined, + message: error.message, + stack: error.stack, + type: 'Error' + }; +}; +const resolvers = new Map(); +const getResolver = config => { + const resolver = resolvers.get(config.id); + if (!resolver) { + throw new Error(`Cannot find resolver for: ${config.id}`); + } + return resolver; +}; +function setup(setupData) { + // Module maps that will be needed for the test runs are passed. + for (const { + config, + serializableModuleMap + } of setupData.serializableResolvers) { + const moduleMap = _jestHasteMap() + .default.getStatic(config) + .getModuleMapFromJSON(serializableModuleMap); + resolvers.set( + config.id, + _jestRuntime().default.createResolver(config, moduleMap) + ); + } +} +const sendMessageToJest = (eventName, args) => { + (0, _jestWorker().messageParent)([eventName, args]); +}; +async function worker({config, globalConfig, path, context}) { + try { + return await (0, _runTest.default)( + path, + globalConfig, + config, + getResolver(config), + { + ...context, + changedFiles: context.changedFiles && new Set(context.changedFiles), + sourcesRelatedToTestsInChangedFiles: + context.sourcesRelatedToTestsInChangedFiles && + new Set(context.sourcesRelatedToTestsInChangedFiles) + }, + sendMessageToJest + ); + } catch (error) { + throw formatError(error); + } +} diff --git a/node_modules/jest-runner/build/types.js b/node_modules/jest-runner/build/types.js new file mode 100644 index 00000000..8306d5ab --- /dev/null +++ b/node_modules/jest-runner/build/types.js @@ -0,0 +1,28 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.EmittingTestRunner = exports.CallbackTestRunner = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +class BaseTestRunner { + isSerial; + constructor(_globalConfig, _context) { + this._globalConfig = _globalConfig; + this._context = _context; + } +} +class CallbackTestRunner extends BaseTestRunner { + supportsEventEmitters = false; +} +exports.CallbackTestRunner = CallbackTestRunner; +class EmittingTestRunner extends BaseTestRunner { + supportsEventEmitters = true; +} +exports.EmittingTestRunner = EmittingTestRunner; diff --git a/node_modules/jest-runner/package.json b/node_modules/jest-runner/package.json new file mode 100644 index 00000000..6b46ae0f --- /dev/null +++ b/node_modules/jest-runner/package.json @@ -0,0 +1,58 @@ +{ + "name": "jest-runner", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-runner" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "devDependencies": { + "@jest/test-utils": "^29.7.0", + "@tsd/typescript": "^5.0.4", + "@types/exit": "^0.1.30", + "@types/graceful-fs": "^4.1.3", + "@types/source-map-support": "^0.5.0", + "jest-jasmine2": "^29.7.0", + "tsd-lite": "^0.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-runtime/LICENSE b/node_modules/jest-runtime/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-runtime/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-runtime/build/helpers.js b/node_modules/jest-runtime/build/helpers.js new file mode 100644 index 00000000..1048868f --- /dev/null +++ b/node_modules/jest-runtime/build/helpers.js @@ -0,0 +1,134 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.findSiblingsWithFileExtension = + exports.decodePossibleOutsideJestVmPath = + exports.createOutsideJestVmPath = + void 0; +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _glob() { + const data = _interopRequireDefault(require('glob')); + _glob = function () { + return data; + }; + return data; +} +function _slash() { + const data = _interopRequireDefault(require('slash')); + _slash = function () { + return data; + }; + return data; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const OUTSIDE_JEST_VM_PROTOCOL = 'jest-main:'; +// String manipulation is easier here, fileURLToPath is only in newer Nodes, +// plus setting non-standard protocols on URL objects is difficult. +const createOutsideJestVmPath = path => + `${OUTSIDE_JEST_VM_PROTOCOL}//${encodeURIComponent(path)}`; +exports.createOutsideJestVmPath = createOutsideJestVmPath; +const decodePossibleOutsideJestVmPath = outsideJestVmPath => { + if (outsideJestVmPath.startsWith(OUTSIDE_JEST_VM_PROTOCOL)) { + return decodeURIComponent( + outsideJestVmPath.replace( + new RegExp(`^${OUTSIDE_JEST_VM_PROTOCOL}//`), + '' + ) + ); + } + return undefined; +}; +exports.decodePossibleOutsideJestVmPath = decodePossibleOutsideJestVmPath; +const findSiblingsWithFileExtension = ( + moduleFileExtensions, + from, + moduleName +) => { + if (!path().isAbsolute(moduleName) && path().extname(moduleName) === '') { + const dirname = path().dirname(from); + const pathToModule = path().resolve(dirname, moduleName); + try { + const slashedDirname = (0, _slash().default)(dirname); + const matches = _glob() + .default.sync(`${pathToModule}.*`) + .map(match => (0, _slash().default)(match)) + .map(match => { + const relativePath = path().posix.relative(slashedDirname, match); + return path().posix.dirname(match) === slashedDirname + ? `./${relativePath}` + : relativePath; + }) + .map(match => `\t'${match}'`) + .join('\n'); + if (matches) { + const foundMessage = `\n\nHowever, Jest was able to find:\n${matches}`; + const mappedModuleFileExtensions = moduleFileExtensions + .map(ext => `'${ext}'`) + .join(', '); + return ( + `${foundMessage}\n\nYou might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ` + + `[${mappedModuleFileExtensions}].\n\nSee https://jestjs.io/docs/configuration#modulefileextensions-arraystring` + ); + } + } catch {} + } + return ''; +}; +exports.findSiblingsWithFileExtension = findSiblingsWithFileExtension; diff --git a/node_modules/jest-runtime/build/index.d.ts b/node_modules/jest-runtime/build/index.d.ts new file mode 100644 index 00000000..5bdf9fdf --- /dev/null +++ b/node_modules/jest-runtime/build/index.d.ts @@ -0,0 +1,193 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import {CallerTransformOptions} from '@jest/transform'; +import type {Config} from '@jest/types'; +import type {expect} from '@jest/globals'; +import type {Global} from '@jest/types'; +import {IHasteMap} from 'jest-haste-map'; +import {IModuleMap} from 'jest-haste-map'; +import type {JestEnvironment} from '@jest/environment'; +import Resolver from 'jest-resolve'; +import {ScriptTransformer} from '@jest/transform'; +import {shouldInstrument} from '@jest/transform'; +import {ShouldInstrumentOptions} from '@jest/transform'; +import type {SourceMapRegistry} from '@jest/source-map'; +import type {TestContext} from '@jest/test-result'; +import type {V8CoverageResult} from '@jest/test-result'; + +declare type HasteMapOptions = { + console?: Console; + maxWorkers: number; + resetCache: boolean; + watch?: boolean; + watchman: boolean; + workerThreads?: boolean; +}; + +declare interface InternalModuleOptions + extends Required { + isInternalModule: boolean; +} + +declare interface JestGlobals extends Global.TestFrameworkGlobals { + expect: typeof expect; +} + +declare class Runtime { + private readonly _cacheFS; + private readonly _cacheFSBuffer; + private readonly _config; + private readonly _globalConfig?; + private readonly _coverageOptions; + private _currentlyExecutingModulePath; + private readonly _environment; + private readonly _explicitShouldMock; + private readonly _explicitShouldMockModule; + private _fakeTimersImplementation; + private readonly _internalModuleRegistry; + private _isCurrentlyExecutingManualMock; + private _mainModule; + private readonly _mockFactories; + private readonly _mockMetaDataCache; + private _mockRegistry; + private _isolatedMockRegistry; + private readonly _moduleMockRegistry; + private readonly _moduleMockFactories; + private readonly _moduleMocker; + private _isolatedModuleRegistry; + private _moduleRegistry; + private readonly _esmoduleRegistry; + private readonly _cjsNamedExports; + private readonly _esmModuleLinkingMap; + private readonly _testPath; + private readonly _resolver; + private _shouldAutoMock; + private readonly _shouldMockModuleCache; + private readonly _shouldUnmockTransitiveDependenciesCache; + private readonly _sourceMapRegistry; + private readonly _scriptTransformer; + private readonly _fileTransforms; + private readonly _fileTransformsMutex; + private _v8CoverageInstrumenter; + private _v8CoverageResult; + private _v8CoverageSources; + private readonly _transitiveShouldMock; + private _unmockList; + private readonly _virtualMocks; + private readonly _virtualModuleMocks; + private _moduleImplementation?; + private readonly jestObjectCaches; + private jestGlobals?; + private readonly esmConditions; + private readonly cjsConditions; + private isTornDown; + constructor( + config: Config.ProjectConfig, + environment: JestEnvironment, + resolver: Resolver, + transformer: ScriptTransformer, + cacheFS: Map, + coverageOptions: ShouldInstrumentOptions, + testPath: string, + globalConfig?: Config.GlobalConfig, + ); + static shouldInstrument: typeof shouldInstrument; + static createContext( + config: Config.ProjectConfig, + options: { + console?: Console; + maxWorkers: number; + watch?: boolean; + watchman: boolean; + }, + ): Promise; + static createHasteMap( + config: Config.ProjectConfig, + options?: HasteMapOptions, + ): Promise; + static createResolver( + config: Config.ProjectConfig, + moduleMap: IModuleMap, + ): Resolver; + static runCLI(): Promise; + static getCLIOptions(): never; + unstable_shouldLoadAsEsm(modulePath: string): boolean; + private loadEsmModule; + private resolveModule; + private linkAndEvaluateModule; + unstable_importModule( + from: string, + moduleName?: string, + ): Promise; + private loadCjsAsEsm; + private importMock; + private getExportsOfCjs; + requireModule( + from: string, + moduleName?: string, + options?: InternalModuleOptions, + isRequireActual?: boolean, + ): T; + requireInternalModule(from: string, to?: string): T; + requireActual(from: string, moduleName: string): T; + requireMock(from: string, moduleName: string): T; + private _loadModule; + private _getFullTransformationOptions; + requireModuleOrMock(from: string, moduleName: string): T; + isolateModules(fn: () => void): void; + isolateModulesAsync(fn: () => Promise): Promise; + resetModules(): void; + collectV8Coverage(): Promise; + stopCollectingV8Coverage(): Promise; + getAllCoverageInfoCopy(): JestEnvironment['global']['__coverage__']; + getAllV8CoverageInfoCopy(): V8CoverageResult; + getSourceMaps(): SourceMapRegistry; + setMock( + from: string, + moduleName: string, + mockFactory: () => unknown, + options?: { + virtual?: boolean; + }, + ): void; + private setModuleMock; + restoreAllMocks(): void; + resetAllMocks(): void; + clearAllMocks(): void; + teardown(): void; + private _resolveCjsModule; + private _resolveModule; + private _requireResolve; + private _requireResolvePaths; + private _execModule; + private transformFile; + private transformFileAsync; + private createScriptFromCode; + private _requireCoreModule; + private _importCoreModule; + private _importWasmModule; + private _getMockedNativeModule; + private _generateMock; + private _shouldMockCjs; + private _shouldMockModule; + private _createRequireImplementation; + private _createJestObjectFor; + private _logFormattedReferenceError; + private wrapCodeInModuleWrapper; + private constructModuleWrapperStart; + private constructInjectedModuleParameters; + private handleExecutionError; + private getGlobalsForCjs; + private getGlobalsForEsm; + private getGlobalsFromEnvironment; + private readFileBuffer; + private readFile; + setGlobalsForRuntime(globals: JestGlobals): void; +} +export default Runtime; + +export {}; diff --git a/node_modules/jest-runtime/build/index.js b/node_modules/jest-runtime/build/index.js new file mode 100644 index 00000000..01cb4206 --- /dev/null +++ b/node_modules/jest-runtime/build/index.js @@ -0,0 +1,2316 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function _module() { + const data = _interopRequireDefault(require('module')); + _module = function () { + return data; + }; + return data; +} +function path() { + const data = _interopRequireWildcard(require('path')); + path = function () { + return data; + }; + return data; +} +function _url() { + const data = require('url'); + _url = function () { + return data; + }; + return data; +} +function _vm() { + const data = require('vm'); + _vm = function () { + return data; + }; + return data; +} +function _cjsModuleLexer() { + const data = require('cjs-module-lexer'); + _cjsModuleLexer = function () { + return data; + }; + return data; +} +function _collectV8Coverage() { + const data = require('collect-v8-coverage'); + _collectV8Coverage = function () { + return data; + }; + return data; +} +function fs() { + const data = _interopRequireWildcard(require('graceful-fs')); + fs = function () { + return data; + }; + return data; +} +function _slash() { + const data = _interopRequireDefault(require('slash')); + _slash = function () { + return data; + }; + return data; +} +function _stripBom() { + const data = _interopRequireDefault(require('strip-bom')); + _stripBom = function () { + return data; + }; + return data; +} +function _transform() { + const data = require('@jest/transform'); + _transform = function () { + return data; + }; + return data; +} +function _jestHasteMap() { + const data = _interopRequireDefault(require('jest-haste-map')); + _jestHasteMap = function () { + return data; + }; + return data; +} +function _jestMessageUtil() { + const data = require('jest-message-util'); + _jestMessageUtil = function () { + return data; + }; + return data; +} +function _jestRegexUtil() { + const data = require('jest-regex-util'); + _jestRegexUtil = function () { + return data; + }; + return data; +} +function _jestResolve() { + const data = _interopRequireDefault(require('jest-resolve')); + _jestResolve = function () { + return data; + }; + return data; +} +function _jestSnapshot() { + const data = require('jest-snapshot'); + _jestSnapshot = function () { + return data; + }; + return data; +} +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +var _helpers = require('./helpers'); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const esmIsAvailable = typeof _vm().SourceTextModule === 'function'; +const dataURIRegex = + /^data:(?text\/javascript|application\/json|application\/wasm)(?:;(?charset=utf-8|base64))?,(?.*)$/; +const defaultTransformOptions = { + isInternalModule: false, + supportsDynamicImport: esmIsAvailable, + supportsExportNamespaceFrom: false, + supportsStaticESM: false, + supportsTopLevelAwait: false +}; +// These are modules that we know +// * are safe to require from the outside (not stateful, not prone to errors passing in instances from different realms), and +// * take sufficiently long to require to warrant an optimization. +// When required from the outside, they use the worker's require cache and are thus +// only loaded once per worker, not once per test file. +// Use /benchmarks/test-file-overhead to measure the impact. +// Note that this only applies when they are required in an internal context; +// users who require one of these modules in their tests will still get the module from inside the VM. +// Prefer listing a module here only if it is impractical to use the jest-resolve-outside-vm-option where it is required, +// e.g. because there are many require sites spread across the dependency graph. +const INTERNAL_MODULE_REQUIRE_OUTSIDE_OPTIMIZED_MODULES = new Set(['chalk']); +const JEST_RESOLVE_OUTSIDE_VM_OPTION = Symbol.for( + 'jest-resolve-outside-vm-option' +); +const testTimeoutSymbol = Symbol.for('TEST_TIMEOUT_SYMBOL'); +const retryTimesSymbol = Symbol.for('RETRY_TIMES'); +const logErrorsBeforeRetrySymbol = Symbol.for('LOG_ERRORS_BEFORE_RETRY'); +const NODE_MODULES = `${path().sep}node_modules${path().sep}`; +const getModuleNameMapper = config => { + if ( + Array.isArray(config.moduleNameMapper) && + config.moduleNameMapper.length + ) { + return config.moduleNameMapper.map(([regex, moduleName]) => ({ + moduleName, + regex: new RegExp(regex) + })); + } + return null; +}; +const isWasm = modulePath => modulePath.endsWith('.wasm'); +const unmockRegExpCache = new WeakMap(); +const EVAL_RESULT_VARIABLE = 'Object.'; +const runtimeSupportsVmModules = typeof _vm().SyntheticModule === 'function'; +const supportsNodeColonModulePrefixInRequire = (() => { + try { + require('node:fs'); + return true; + } catch { + return false; + } +})(); +class Runtime { + _cacheFS; + _cacheFSBuffer = new Map(); + _config; + _globalConfig; + _coverageOptions; + _currentlyExecutingModulePath; + _environment; + _explicitShouldMock; + _explicitShouldMockModule; + _fakeTimersImplementation; + _internalModuleRegistry; + _isCurrentlyExecutingManualMock; + _mainModule; + _mockFactories; + _mockMetaDataCache; + _mockRegistry; + _isolatedMockRegistry; + _moduleMockRegistry; + _moduleMockFactories; + _moduleMocker; + _isolatedModuleRegistry; + _moduleRegistry; + _esmoduleRegistry; + _cjsNamedExports; + _esmModuleLinkingMap; + _testPath; + _resolver; + _shouldAutoMock; + _shouldMockModuleCache; + _shouldUnmockTransitiveDependenciesCache; + _sourceMapRegistry; + _scriptTransformer; + _fileTransforms; + _fileTransformsMutex; + _v8CoverageInstrumenter; + _v8CoverageResult; + _v8CoverageSources; + _transitiveShouldMock; + _unmockList; + _virtualMocks; + _virtualModuleMocks; + _moduleImplementation; + jestObjectCaches; + jestGlobals; + esmConditions; + cjsConditions; + isTornDown = false; + constructor( + config, + environment, + resolver, + transformer, + cacheFS, + coverageOptions, + testPath, + // TODO: make mandatory in Jest 30 + globalConfig + ) { + this._cacheFS = cacheFS; + this._config = config; + this._coverageOptions = coverageOptions; + this._currentlyExecutingModulePath = ''; + this._environment = environment; + this._globalConfig = globalConfig; + this._explicitShouldMock = new Map(); + this._explicitShouldMockModule = new Map(); + this._internalModuleRegistry = new Map(); + this._isCurrentlyExecutingManualMock = null; + this._mainModule = null; + this._mockFactories = new Map(); + this._mockRegistry = new Map(); + this._moduleMockRegistry = new Map(); + this._moduleMockFactories = new Map(); + (0, _jestUtil().invariant)( + this._environment.moduleMocker, + '`moduleMocker` must be set on an environment when created' + ); + this._moduleMocker = this._environment.moduleMocker; + this._isolatedModuleRegistry = null; + this._isolatedMockRegistry = null; + this._moduleRegistry = new Map(); + this._esmoduleRegistry = new Map(); + this._cjsNamedExports = new Map(); + this._esmModuleLinkingMap = new WeakMap(); + this._testPath = testPath; + this._resolver = resolver; + this._scriptTransformer = transformer; + this._shouldAutoMock = config.automock; + this._sourceMapRegistry = new Map(); + this._fileTransforms = new Map(); + this._fileTransformsMutex = new Map(); + this._virtualMocks = new Map(); + this._virtualModuleMocks = new Map(); + this.jestObjectCaches = new Map(); + this._mockMetaDataCache = new Map(); + this._shouldMockModuleCache = new Map(); + this._shouldUnmockTransitiveDependenciesCache = new Map(); + this._transitiveShouldMock = new Map(); + this._fakeTimersImplementation = config.fakeTimers.legacyFakeTimers + ? this._environment.fakeTimers + : this._environment.fakeTimersModern; + this._unmockList = unmockRegExpCache.get(config); + if (!this._unmockList && config.unmockedModulePathPatterns) { + this._unmockList = new RegExp( + config.unmockedModulePathPatterns.join('|') + ); + unmockRegExpCache.set(config, this._unmockList); + } + const envExportConditions = this._environment.exportConditions?.() ?? []; + this.esmConditions = Array.from( + new Set(['import', 'default', ...envExportConditions]) + ); + this.cjsConditions = Array.from( + new Set(['require', 'default', ...envExportConditions]) + ); + if (config.automock) { + config.setupFiles.forEach(filePath => { + if (filePath.includes(NODE_MODULES)) { + const moduleID = this._resolver.getModuleID( + this._virtualMocks, + filePath, + undefined, + // shouldn't really matter, but in theory this will make sure the caching is correct + { + conditions: this.unstable_shouldLoadAsEsm(filePath) + ? this.esmConditions + : this.cjsConditions + } + ); + this._transitiveShouldMock.set(moduleID, false); + } + }); + } + this.resetModules(); + } + static shouldInstrument = _transform().shouldInstrument; + static async createContext(config, options) { + (0, _jestUtil().createDirectory)(config.cacheDirectory); + const instance = await Runtime.createHasteMap(config, { + console: options.console, + maxWorkers: options.maxWorkers, + resetCache: !config.cache, + watch: options.watch, + watchman: options.watchman + }); + const hasteMap = await instance.build(); + return { + config, + hasteFS: hasteMap.hasteFS, + moduleMap: hasteMap.moduleMap, + resolver: Runtime.createResolver(config, hasteMap.moduleMap) + }; + } + static createHasteMap(config, options) { + const ignorePatternParts = [ + ...config.modulePathIgnorePatterns, + ...(options && options.watch ? config.watchPathIgnorePatterns : []), + config.cacheDirectory.startsWith(config.rootDir + path().sep) && + config.cacheDirectory + ].filter(Boolean); + const ignorePattern = + ignorePatternParts.length > 0 + ? new RegExp(ignorePatternParts.join('|')) + : undefined; + return _jestHasteMap().default.create({ + cacheDirectory: config.cacheDirectory, + computeSha1: config.haste.computeSha1, + console: options?.console, + dependencyExtractor: config.dependencyExtractor, + enableSymlinks: config.haste.enableSymlinks, + extensions: [_jestSnapshot().EXTENSION].concat( + config.moduleFileExtensions + ), + forceNodeFilesystemAPI: config.haste.forceNodeFilesystemAPI, + hasteImplModulePath: config.haste.hasteImplModulePath, + hasteMapModulePath: config.haste.hasteMapModulePath, + id: config.id, + ignorePattern, + maxWorkers: options?.maxWorkers || 1, + mocksPattern: (0, _jestRegexUtil().escapePathForRegex)( + `${path().sep}__mocks__${path().sep}` + ), + platforms: config.haste.platforms || ['ios', 'android'], + resetCache: options?.resetCache, + retainAllFiles: config.haste.retainAllFiles || false, + rootDir: config.rootDir, + roots: config.roots, + throwOnModuleCollision: config.haste.throwOnModuleCollision, + useWatchman: options?.watchman, + watch: options?.watch, + workerThreads: options?.workerThreads + }); + } + static createResolver(config, moduleMap) { + return new (_jestResolve().default)(moduleMap, { + defaultPlatform: config.haste.defaultPlatform, + extensions: config.moduleFileExtensions.map(extension => `.${extension}`), + hasCoreModules: true, + moduleDirectories: config.moduleDirectories, + moduleNameMapper: getModuleNameMapper(config), + modulePaths: config.modulePaths, + platforms: config.haste.platforms, + resolver: config.resolver, + rootDir: config.rootDir + }); + } + static async runCLI() { + throw new Error('The jest-runtime CLI has been moved into jest-repl'); + } + static getCLIOptions() { + throw new Error('The jest-runtime CLI has been moved into jest-repl'); + } + + // unstable as it should be replaced by https://github.com/nodejs/modules/issues/393, and we don't want people to use it + unstable_shouldLoadAsEsm(modulePath) { + return ( + isWasm(modulePath) || + _jestResolve().default.unstable_shouldLoadAsEsm( + modulePath, + this._config.extensionsToTreatAsEsm + ) + ); + } + async loadEsmModule(modulePath, query = '') { + const cacheKey = modulePath + query; + const registry = this._isolatedModuleRegistry + ? this._isolatedModuleRegistry + : this._esmoduleRegistry; + if (this._fileTransformsMutex.has(cacheKey)) { + await this._fileTransformsMutex.get(cacheKey); + } + if (!registry.has(cacheKey)) { + (0, _jestUtil().invariant)( + typeof this._environment.getVmContext === 'function', + 'ES Modules are only supported if your test environment has the `getVmContext` function' + ); + const context = this._environment.getVmContext(); + (0, _jestUtil().invariant)( + context, + 'Test environment has been torn down' + ); + let transformResolve; + let transformReject; + this._fileTransformsMutex.set( + cacheKey, + new Promise((resolve, reject) => { + transformResolve = resolve; + transformReject = reject; + }) + ); + (0, _jestUtil().invariant)( + transformResolve && transformReject, + 'Promise initialization should be sync - please report this bug to Jest!' + ); + if (isWasm(modulePath)) { + const wasm = this._importWasmModule( + this.readFileBuffer(modulePath), + modulePath, + context + ); + registry.set(cacheKey, wasm); + transformResolve(); + return wasm; + } + if (this._resolver.isCoreModule(modulePath)) { + const core = this._importCoreModule(modulePath, context); + registry.set(cacheKey, core); + transformResolve(); + return core; + } + const transformedCode = await this.transformFileAsync(modulePath, { + isInternalModule: false, + supportsDynamicImport: true, + supportsExportNamespaceFrom: true, + supportsStaticESM: true, + supportsTopLevelAwait: true + }); + try { + let module; + if (modulePath.endsWith('.json')) { + module = new (_vm().SyntheticModule)( + ['default'], + function () { + const obj = JSON.parse(transformedCode); + // @ts-expect-error: TS doesn't know what `this` is + this.setExport('default', obj); + }, + { + context, + identifier: modulePath + } + ); + } else { + module = new (_vm().SourceTextModule)(transformedCode, { + context, + identifier: modulePath, + importModuleDynamically: async (specifier, referencingModule) => { + (0, _jestUtil().invariant)( + runtimeSupportsVmModules, + 'You need to run with a version of node that supports ES Modules in the VM API. See https://jestjs.io/docs/ecmascript-modules' + ); + const module = await this.resolveModule( + specifier, + referencingModule.identifier, + referencingModule.context + ); + return this.linkAndEvaluateModule(module); + }, + initializeImportMeta: meta => { + meta.url = (0, _url().pathToFileURL)(modulePath).href; + let jest = this.jestObjectCaches.get(modulePath); + if (!jest) { + jest = this._createJestObjectFor(modulePath); + this.jestObjectCaches.set(modulePath, jest); + } + meta.jest = jest; + } + }); + } + (0, _jestUtil().invariant)( + !registry.has(cacheKey), + `Module cache already has entry ${cacheKey}. This is a bug in Jest, please report it!` + ); + registry.set(cacheKey, module); + transformResolve(); + } catch (error) { + transformReject(error); + throw error; + } + } + const module = registry.get(cacheKey); + (0, _jestUtil().invariant)( + module, + 'Module cache does not contain module. This is a bug in Jest, please open up an issue' + ); + return module; + } + async resolveModule(specifier, referencingIdentifier, context) { + if (this.isTornDown) { + this._logFormattedReferenceError( + 'You are trying to `import` a file after the Jest environment has been torn down.' + ); + process.exitCode = 1; + // @ts-expect-error - exiting + return; + } + const registry = this._isolatedModuleRegistry + ? this._isolatedModuleRegistry + : this._esmoduleRegistry; + if (specifier === '@jest/globals') { + const fromCache = registry.get('@jest/globals'); + if (fromCache) { + return fromCache; + } + const globals = this.getGlobalsForEsm(referencingIdentifier, context); + registry.set('@jest/globals', globals); + return globals; + } + if (specifier.startsWith('data:')) { + if ( + await this._shouldMockModule( + referencingIdentifier, + specifier, + this._explicitShouldMockModule + ) + ) { + return this.importMock(referencingIdentifier, specifier, context); + } + const fromCache = registry.get(specifier); + if (fromCache) { + return fromCache; + } + const match = specifier.match(dataURIRegex); + if (!match || !match.groups) { + throw new Error('Invalid data URI'); + } + const mime = match.groups.mime; + const encoding = match.groups.encoding; + let module; + if (mime === 'application/wasm') { + if (!encoding) { + throw new Error('Missing data URI encoding'); + } + if (encoding !== 'base64') { + throw new Error(`Invalid data URI encoding: ${encoding}`); + } + module = await this._importWasmModule( + Buffer.from(match.groups.code, 'base64'), + specifier, + context + ); + } else { + let code = match.groups.code; + if (!encoding || encoding === 'charset=utf-8') { + code = decodeURIComponent(code); + } else if (encoding === 'base64') { + code = Buffer.from(code, 'base64').toString(); + } else { + throw new Error(`Invalid data URI encoding: ${encoding}`); + } + if (mime === 'application/json') { + module = new (_vm().SyntheticModule)( + ['default'], + function () { + const obj = JSON.parse(code); + // @ts-expect-error: TS doesn't know what `this` is + this.setExport('default', obj); + }, + { + context, + identifier: specifier + } + ); + } else { + module = new (_vm().SourceTextModule)(code, { + context, + identifier: specifier, + importModuleDynamically: async (specifier, referencingModule) => { + (0, _jestUtil().invariant)( + runtimeSupportsVmModules, + 'You need to run with a version of node that supports ES Modules in the VM API. See https://jestjs.io/docs/ecmascript-modules' + ); + const module = await this.resolveModule( + specifier, + referencingModule.identifier, + referencingModule.context + ); + return this.linkAndEvaluateModule(module); + }, + initializeImportMeta(meta) { + // no `jest` here as it's not loaded in a file + meta.url = specifier; + } + }); + } + } + registry.set(specifier, module); + return module; + } + if (specifier.startsWith('file://')) { + specifier = (0, _url().fileURLToPath)(specifier); + } + const [path, query] = specifier.split('?'); + if ( + await this._shouldMockModule( + referencingIdentifier, + path, + this._explicitShouldMockModule + ) + ) { + return this.importMock(referencingIdentifier, path, context); + } + const resolved = await this._resolveModule(referencingIdentifier, path); + if ( + // json files are modules when imported in modules + resolved.endsWith('.json') || + this._resolver.isCoreModule(resolved) || + this.unstable_shouldLoadAsEsm(resolved) + ) { + return this.loadEsmModule(resolved, query); + } + return this.loadCjsAsEsm(referencingIdentifier, resolved, context); + } + async linkAndEvaluateModule(module) { + if (this.isTornDown) { + this._logFormattedReferenceError( + 'You are trying to `import` a file after the Jest environment has been torn down.' + ); + process.exitCode = 1; + return; + } + if (module.status === 'unlinked') { + // since we might attempt to link the same module in parallel, stick the promise in a weak map so every call to + // this method can await it + this._esmModuleLinkingMap.set( + module, + module.link((specifier, referencingModule) => + this.resolveModule( + specifier, + referencingModule.identifier, + referencingModule.context + ) + ) + ); + } + await this._esmModuleLinkingMap.get(module); + if (module.status === 'linked') { + await module.evaluate(); + } + return module; + } + async unstable_importModule(from, moduleName) { + (0, _jestUtil().invariant)( + runtimeSupportsVmModules, + 'You need to run with a version of node that supports ES Modules in the VM API. See https://jestjs.io/docs/ecmascript-modules' + ); + const [path, query] = (moduleName ?? '').split('?'); + const modulePath = await this._resolveModule(from, path); + const module = await this.loadEsmModule(modulePath, query); + return this.linkAndEvaluateModule(module); + } + loadCjsAsEsm(from, modulePath, context) { + // CJS loaded via `import` should share cache with other CJS: https://github.com/nodejs/modules/issues/503 + const cjs = this.requireModuleOrMock(from, modulePath); + const parsedExports = this.getExportsOfCjs(modulePath); + const cjsExports = [...parsedExports].filter(exportName => { + // we don't wanna respect any exports _named_ default as a named export + if (exportName === 'default') { + return false; + } + return Object.hasOwnProperty.call(cjs, exportName); + }); + const module = new (_vm().SyntheticModule)( + [...cjsExports, 'default'], + function () { + cjsExports.forEach(exportName => { + // @ts-expect-error: TS doesn't know what `this` is + this.setExport(exportName, cjs[exportName]); + }); + // @ts-expect-error: TS doesn't know what `this` is + this.setExport('default', cjs); + }, + { + context, + identifier: modulePath + } + ); + return evaluateSyntheticModule(module); + } + async importMock(from, moduleName, context) { + const moduleID = await this._resolver.getModuleIDAsync( + this._virtualModuleMocks, + from, + moduleName, + { + conditions: this.esmConditions + } + ); + if (this._moduleMockRegistry.has(moduleID)) { + return this._moduleMockRegistry.get(moduleID); + } + if (this._moduleMockFactories.has(moduleID)) { + const invokedFactory = await this._moduleMockFactories.get( + moduleID + // has check above makes this ok + )(); + + const module = new (_vm().SyntheticModule)( + Object.keys(invokedFactory), + function () { + Object.entries(invokedFactory).forEach(([key, value]) => { + // @ts-expect-error: TS doesn't know what `this` is + this.setExport(key, value); + }); + }, + { + context, + identifier: moduleName + } + ); + this._moduleMockRegistry.set(moduleID, module); + return evaluateSyntheticModule(module); + } + throw new Error('Attempting to import a mock without a factory'); + } + getExportsOfCjs(modulePath) { + const cachedNamedExports = this._cjsNamedExports.get(modulePath); + if (cachedNamedExports) { + return cachedNamedExports; + } + const transformedCode = + this._fileTransforms.get(modulePath)?.code ?? this.readFile(modulePath); + const {exports, reexports} = (0, _cjsModuleLexer().parse)(transformedCode); + const namedExports = new Set(exports); + reexports.forEach(reexport => { + if (this._resolver.isCoreModule(reexport)) { + const exports = this.requireModule(modulePath, reexport); + if (exports !== null && typeof exports === 'object') { + Object.keys(exports).forEach(namedExports.add, namedExports); + } + } else { + const resolved = this._resolveCjsModule(modulePath, reexport); + const exports = this.getExportsOfCjs(resolved); + exports.forEach(namedExports.add, namedExports); + } + }); + this._cjsNamedExports.set(modulePath, namedExports); + return namedExports; + } + requireModule(from, moduleName, options, isRequireActual = false) { + const isInternal = options?.isInternalModule ?? false; + const moduleID = this._resolver.getModuleID( + this._virtualMocks, + from, + moduleName, + { + conditions: this.cjsConditions + } + ); + let modulePath; + + // Some old tests rely on this mocking behavior. Ideally we'll change this + // to be more explicit. + const moduleResource = moduleName && this._resolver.getModule(moduleName); + const manualMock = + moduleName && this._resolver.getMockModule(from, moduleName); + if ( + !options?.isInternalModule && + !isRequireActual && + !moduleResource && + manualMock && + manualMock !== this._isCurrentlyExecutingManualMock && + this._explicitShouldMock.get(moduleID) !== false + ) { + modulePath = manualMock; + } + if (moduleName && this._resolver.isCoreModule(moduleName)) { + return this._requireCoreModule( + moduleName, + supportsNodeColonModulePrefixInRequire + ); + } + if (!modulePath) { + modulePath = this._resolveCjsModule(from, moduleName); + } + if (this.unstable_shouldLoadAsEsm(modulePath)) { + // Node includes more info in the message + const error = new Error( + `Must use import to load ES Module: ${modulePath}` + ); + error.code = 'ERR_REQUIRE_ESM'; + throw error; + } + let moduleRegistry; + if (isInternal) { + moduleRegistry = this._internalModuleRegistry; + } else if (this._isolatedModuleRegistry) { + moduleRegistry = this._isolatedModuleRegistry; + } else { + moduleRegistry = this._moduleRegistry; + } + const module = moduleRegistry.get(modulePath); + if (module) { + return module.exports; + } + + // We must register the pre-allocated module object first so that any + // circular dependencies that may arise while evaluating the module can + // be satisfied. + const localModule = { + children: [], + exports: {}, + filename: modulePath, + id: modulePath, + loaded: false, + path: path().dirname(modulePath) + }; + moduleRegistry.set(modulePath, localModule); + try { + this._loadModule( + localModule, + from, + moduleName, + modulePath, + options, + moduleRegistry + ); + } catch (error) { + moduleRegistry.delete(modulePath); + throw error; + } + return localModule.exports; + } + requireInternalModule(from, to) { + if (to) { + const require = ( + _module().default.createRequire ?? + _module().default.createRequireFromPath + )(from); + if (INTERNAL_MODULE_REQUIRE_OUTSIDE_OPTIMIZED_MODULES.has(to)) { + return require(to); + } + const outsideJestVmPath = (0, _helpers.decodePossibleOutsideJestVmPath)( + to + ); + if (outsideJestVmPath) { + return require(outsideJestVmPath); + } + } + return this.requireModule(from, to, { + isInternalModule: true, + supportsDynamicImport: esmIsAvailable, + supportsExportNamespaceFrom: false, + supportsStaticESM: false, + supportsTopLevelAwait: false + }); + } + requireActual(from, moduleName) { + return this.requireModule(from, moduleName, undefined, true); + } + requireMock(from, moduleName) { + const moduleID = this._resolver.getModuleID( + this._virtualMocks, + from, + moduleName, + { + conditions: this.cjsConditions + } + ); + if (this._isolatedMockRegistry?.has(moduleID)) { + return this._isolatedMockRegistry.get(moduleID); + } else if (this._mockRegistry.has(moduleID)) { + return this._mockRegistry.get(moduleID); + } + const mockRegistry = this._isolatedMockRegistry || this._mockRegistry; + if (this._mockFactories.has(moduleID)) { + // has check above makes this ok + const module = this._mockFactories.get(moduleID)(); + mockRegistry.set(moduleID, module); + return module; + } + const manualMockOrStub = this._resolver.getMockModule(from, moduleName); + let modulePath = + this._resolver.getMockModule(from, moduleName) || + this._resolveCjsModule(from, moduleName); + let isManualMock = + manualMockOrStub && + !this._resolver.resolveStubModuleName(from, moduleName); + if (!isManualMock) { + // If the actual module file has a __mocks__ dir sitting immediately next + // to it, look to see if there is a manual mock for this file. + // + // subDir1/my_module.js + // subDir1/__mocks__/my_module.js + // subDir2/my_module.js + // subDir2/__mocks__/my_module.js + // + // Where some other module does a relative require into each of the + // respective subDir{1,2} directories and expects a manual mock + // corresponding to that particular my_module.js file. + + const moduleDir = path().dirname(modulePath); + const moduleFileName = path().basename(modulePath); + const potentialManualMock = path().join( + moduleDir, + '__mocks__', + moduleFileName + ); + if (fs().existsSync(potentialManualMock)) { + isManualMock = true; + modulePath = potentialManualMock; + } + } + if (isManualMock) { + const localModule = { + children: [], + exports: {}, + filename: modulePath, + id: modulePath, + loaded: false, + path: path().dirname(modulePath) + }; + this._loadModule( + localModule, + from, + moduleName, + modulePath, + undefined, + mockRegistry + ); + mockRegistry.set(moduleID, localModule.exports); + } else { + // Look for a real module to generate an automock from + mockRegistry.set(moduleID, this._generateMock(from, moduleName)); + } + return mockRegistry.get(moduleID); + } + _loadModule( + localModule, + from, + moduleName, + modulePath, + options, + moduleRegistry + ) { + if (path().extname(modulePath) === '.json') { + const text = (0, _stripBom().default)(this.readFile(modulePath)); + const transformedFile = this._scriptTransformer.transformJson( + modulePath, + this._getFullTransformationOptions(options), + text + ); + localModule.exports = + this._environment.global.JSON.parse(transformedFile); + } else if (path().extname(modulePath) === '.node') { + localModule.exports = require(modulePath); + } else { + // Only include the fromPath if a moduleName is given. Else treat as root. + const fromPath = moduleName ? from : null; + this._execModule( + localModule, + options, + moduleRegistry, + fromPath, + moduleName + ); + } + localModule.loaded = true; + } + _getFullTransformationOptions(options = defaultTransformOptions) { + return { + ...options, + ...this._coverageOptions + }; + } + requireModuleOrMock(from, moduleName) { + // this module is unmockable + if (moduleName === '@jest/globals') { + // @ts-expect-error: we don't care that it's not assignable to T + return this.getGlobalsForCjs(from); + } + try { + if (this._shouldMockCjs(from, moduleName, this._explicitShouldMock)) { + return this.requireMock(from, moduleName); + } else { + return this.requireModule(from, moduleName); + } + } catch (e) { + const moduleNotFound = + _jestResolve().default.tryCastModuleNotFoundError(e); + if (moduleNotFound) { + if ( + moduleNotFound.siblingWithSimilarExtensionFound === null || + moduleNotFound.siblingWithSimilarExtensionFound === undefined + ) { + moduleNotFound.hint = (0, _helpers.findSiblingsWithFileExtension)( + this._config.moduleFileExtensions, + from, + moduleNotFound.moduleName || moduleName + ); + moduleNotFound.siblingWithSimilarExtensionFound = Boolean( + moduleNotFound.hint + ); + } + moduleNotFound.buildMessage(this._config.rootDir); + throw moduleNotFound; + } + throw e; + } + } + isolateModules(fn) { + if (this._isolatedModuleRegistry || this._isolatedMockRegistry) { + throw new Error( + 'isolateModules cannot be nested inside another isolateModules or isolateModulesAsync.' + ); + } + this._isolatedModuleRegistry = new Map(); + this._isolatedMockRegistry = new Map(); + try { + fn(); + } finally { + // might be cleared within the callback + this._isolatedModuleRegistry?.clear(); + this._isolatedMockRegistry?.clear(); + this._isolatedModuleRegistry = null; + this._isolatedMockRegistry = null; + } + } + async isolateModulesAsync(fn) { + if (this._isolatedModuleRegistry || this._isolatedMockRegistry) { + throw new Error( + 'isolateModulesAsync cannot be nested inside another isolateModulesAsync or isolateModules.' + ); + } + this._isolatedModuleRegistry = new Map(); + this._isolatedMockRegistry = new Map(); + try { + await fn(); + } finally { + // might be cleared within the callback + this._isolatedModuleRegistry?.clear(); + this._isolatedMockRegistry?.clear(); + this._isolatedModuleRegistry = null; + this._isolatedMockRegistry = null; + } + } + resetModules() { + this._isolatedModuleRegistry?.clear(); + this._isolatedMockRegistry?.clear(); + this._isolatedModuleRegistry = null; + this._isolatedMockRegistry = null; + this._mockRegistry.clear(); + this._moduleRegistry.clear(); + this._esmoduleRegistry.clear(); + this._fileTransformsMutex.clear(); + this._cjsNamedExports.clear(); + this._moduleMockRegistry.clear(); + this._cacheFS.clear(); + this._cacheFSBuffer.clear(); + if ( + this._coverageOptions.collectCoverage && + this._coverageOptions.coverageProvider === 'v8' && + this._v8CoverageSources + ) { + this._v8CoverageSources = new Map([ + ...this._v8CoverageSources, + ...this._fileTransforms + ]); + } + this._fileTransforms.clear(); + if (this._environment) { + if (this._environment.global) { + const envGlobal = this._environment.global; + Object.keys(envGlobal).forEach(key => { + const globalMock = envGlobal[key]; + if ( + ((typeof globalMock === 'object' && globalMock !== null) || + typeof globalMock === 'function') && + '_isMockFunction' in globalMock && + globalMock._isMockFunction === true + ) { + globalMock.mockClear(); + } + }); + } + if (this._environment.fakeTimers) { + this._environment.fakeTimers.clearAllTimers(); + } + } + } + async collectV8Coverage() { + this._v8CoverageInstrumenter = + new (_collectV8Coverage().CoverageInstrumenter)(); + this._v8CoverageSources = new Map(); + await this._v8CoverageInstrumenter.startInstrumenting(); + } + async stopCollectingV8Coverage() { + if (!this._v8CoverageInstrumenter || !this._v8CoverageSources) { + throw new Error('You need to call `collectV8Coverage` first.'); + } + this._v8CoverageResult = + await this._v8CoverageInstrumenter.stopInstrumenting(); + this._v8CoverageSources = new Map([ + ...this._v8CoverageSources, + ...this._fileTransforms + ]); + } + getAllCoverageInfoCopy() { + return (0, _jestUtil().deepCyclicCopy)( + this._environment.global.__coverage__ + ); + } + getAllV8CoverageInfoCopy() { + if (!this._v8CoverageResult || !this._v8CoverageSources) { + throw new Error('You need to call `stopCollectingV8Coverage` first.'); + } + return this._v8CoverageResult + .filter(res => res.url.startsWith('file://')) + .map(res => ({ + ...res, + url: (0, _url().fileURLToPath)(res.url) + })) + .filter( + res => + // TODO: will this work on windows? It might be better if `shouldInstrument` deals with it anyways + res.url.startsWith(this._config.rootDir) && + (0, _transform().shouldInstrument)( + res.url, + this._coverageOptions, + this._config, + /* loadedFilenames */ Array.from(this._v8CoverageSources.keys()) + ) + ) + .map(result => { + const transformedFile = this._v8CoverageSources.get(result.url); + return { + codeTransformResult: transformedFile, + result + }; + }); + } + getSourceMaps() { + return this._sourceMapRegistry; + } + setMock(from, moduleName, mockFactory, options) { + if (options?.virtual) { + const mockPath = this._resolver.getModulePath(from, moduleName); + this._virtualMocks.set(mockPath, true); + } + const moduleID = this._resolver.getModuleID( + this._virtualMocks, + from, + moduleName, + { + conditions: this.cjsConditions + } + ); + this._explicitShouldMock.set(moduleID, true); + this._mockFactories.set(moduleID, mockFactory); + } + setModuleMock(from, moduleName, mockFactory, options) { + if (options?.virtual) { + const mockPath = this._resolver.getModulePath(from, moduleName); + this._virtualModuleMocks.set(mockPath, true); + } + const moduleID = this._resolver.getModuleID( + this._virtualModuleMocks, + from, + moduleName, + { + conditions: this.esmConditions + } + ); + this._explicitShouldMockModule.set(moduleID, true); + this._moduleMockFactories.set(moduleID, mockFactory); + } + restoreAllMocks() { + this._moduleMocker.restoreAllMocks(); + } + resetAllMocks() { + this._moduleMocker.resetAllMocks(); + } + clearAllMocks() { + this._moduleMocker.clearAllMocks(); + } + teardown() { + this.restoreAllMocks(); + this.resetModules(); + this._internalModuleRegistry.clear(); + this._mainModule = null; + this._mockFactories.clear(); + this._moduleMockFactories.clear(); + this._mockMetaDataCache.clear(); + this._shouldMockModuleCache.clear(); + this._shouldUnmockTransitiveDependenciesCache.clear(); + this._explicitShouldMock.clear(); + this._explicitShouldMockModule.clear(); + this._transitiveShouldMock.clear(); + this._virtualMocks.clear(); + this._virtualModuleMocks.clear(); + this._cacheFS.clear(); + this._unmockList = undefined; + this._sourceMapRegistry.clear(); + this._fileTransforms.clear(); + this.jestObjectCaches.clear(); + this._v8CoverageSources?.clear(); + this._v8CoverageResult = []; + this._v8CoverageInstrumenter = undefined; + this._moduleImplementation = undefined; + this.isTornDown = true; + } + _resolveCjsModule(from, to) { + return to + ? this._resolver.resolveModule(from, to, { + conditions: this.cjsConditions + }) + : from; + } + _resolveModule(from, to) { + return to + ? this._resolver.resolveModuleAsync(from, to, { + conditions: this.esmConditions + }) + : from; + } + _requireResolve(from, moduleName, options = {}) { + if (moduleName == null) { + throw new Error( + 'The first argument to require.resolve must be a string. Received null or undefined.' + ); + } + if (path().isAbsolute(moduleName)) { + const module = this._resolver.resolveModuleFromDirIfExists( + moduleName, + moduleName, + { + conditions: this.cjsConditions, + paths: [] + } + ); + if (module) { + return module; + } + } else { + const {paths} = options; + if (paths) { + for (const p of paths) { + const absolutePath = path().resolve(from, '..', p); + const module = this._resolver.resolveModuleFromDirIfExists( + absolutePath, + moduleName, + // required to also resolve files without leading './' directly in the path + { + conditions: this.cjsConditions, + paths: [absolutePath] + } + ); + if (module) { + return module; + } + } + throw new (_jestResolve().default.ModuleNotFoundError)( + `Cannot resolve module '${moduleName}' from paths ['${paths.join( + "', '" + )}'] from ${from}` + ); + } + } + try { + return this._resolveCjsModule(from, moduleName); + } catch (err) { + const module = this._resolver.getMockModule(from, moduleName); + if (module) { + return module; + } else { + throw err; + } + } + } + _requireResolvePaths(from, moduleName) { + const fromDir = path().resolve(from, '..'); + if (moduleName == null) { + throw new Error( + 'The first argument to require.resolve.paths must be a string. Received null or undefined.' + ); + } + if (!moduleName.length) { + throw new Error( + 'The first argument to require.resolve.paths must not be the empty string.' + ); + } + if (moduleName[0] === '.') { + return [fromDir]; + } + if (this._resolver.isCoreModule(moduleName)) { + return null; + } + const modulePaths = this._resolver.getModulePaths(fromDir); + const globalPaths = this._resolver.getGlobalPaths(moduleName); + return [...modulePaths, ...globalPaths]; + } + _execModule(localModule, options, moduleRegistry, from, moduleName) { + if (this.isTornDown) { + this._logFormattedReferenceError( + 'You are trying to `import` a file after the Jest environment has been torn down.' + ); + process.exitCode = 1; + return; + } + + // If the environment was disposed, prevent this module from being executed. + if (!this._environment.global) { + return; + } + const module = localModule; + const filename = module.filename; + const lastExecutingModulePath = this._currentlyExecutingModulePath; + this._currentlyExecutingModulePath = filename; + const origCurrExecutingManualMock = this._isCurrentlyExecutingManualMock; + this._isCurrentlyExecutingManualMock = filename; + module.children = []; + Object.defineProperty(module, 'parent', { + enumerable: true, + get() { + const key = from || ''; + return moduleRegistry.get(key) || null; + } + }); + const modulePaths = this._resolver.getModulePaths(module.path); + const globalPaths = this._resolver.getGlobalPaths(moduleName); + module.paths = [...modulePaths, ...globalPaths]; + Object.defineProperty(module, 'require', { + value: this._createRequireImplementation(module, options) + }); + const transformedCode = this.transformFile(filename, options); + let compiledFunction = null; + const script = this.createScriptFromCode(transformedCode, filename); + let runScript = null; + const vmContext = this._environment.getVmContext(); + if (vmContext) { + runScript = script.runInContext(vmContext, { + filename + }); + } + if (runScript !== null) { + compiledFunction = runScript[EVAL_RESULT_VARIABLE]; + } + if (compiledFunction === null) { + this._logFormattedReferenceError( + 'You are trying to `import` a file after the Jest environment has been torn down.' + ); + process.exitCode = 1; + return; + } + const jestObject = this._createJestObjectFor(filename); + this.jestObjectCaches.set(filename, jestObject); + const lastArgs = [ + this._config.injectGlobals ? jestObject : undefined, + // jest object + ...this._config.sandboxInjectedGlobals.map(globalVariable => { + if (this._environment.global[globalVariable]) { + return this._environment.global[globalVariable]; + } + throw new Error( + `You have requested '${globalVariable}' as a global variable, but it was not present. Please check your config or your global environment.` + ); + }) + ]; + if (!this._mainModule && filename === this._testPath) { + this._mainModule = module; + } + Object.defineProperty(module, 'main', { + enumerable: true, + value: this._mainModule + }); + try { + compiledFunction.call( + module.exports, + module, + // module object + module.exports, + // module exports + module.require, + // require implementation + module.path, + // __dirname + module.filename, + // __filename + lastArgs[0], + ...lastArgs.slice(1).filter(_jestUtil().isNonNullable) + ); + } catch (error) { + this.handleExecutionError(error, module); + } + this._isCurrentlyExecutingManualMock = origCurrExecutingManualMock; + this._currentlyExecutingModulePath = lastExecutingModulePath; + } + transformFile(filename, options) { + const source = this.readFile(filename); + if (options?.isInternalModule) { + return source; + } + const transformedFile = this._scriptTransformer.transform( + filename, + this._getFullTransformationOptions(options), + source + ); + this._fileTransforms.set(filename, { + ...transformedFile, + wrapperLength: this.constructModuleWrapperStart().length + }); + if (transformedFile.sourceMapPath) { + this._sourceMapRegistry.set(filename, transformedFile.sourceMapPath); + } + return transformedFile.code; + } + async transformFileAsync(filename, options) { + const source = this.readFile(filename); + if (options?.isInternalModule) { + return source; + } + const transformedFile = await this._scriptTransformer.transformAsync( + filename, + this._getFullTransformationOptions(options), + source + ); + if (this._fileTransforms.get(filename)?.code !== transformedFile.code) { + this._fileTransforms.set(filename, { + ...transformedFile, + wrapperLength: 0 + }); + } + if (transformedFile.sourceMapPath) { + this._sourceMapRegistry.set(filename, transformedFile.sourceMapPath); + } + return transformedFile.code; + } + createScriptFromCode(scriptSource, filename) { + try { + const scriptFilename = this._resolver.isCoreModule(filename) + ? `jest-nodejs-core-${filename}` + : filename; + return new (_vm().Script)(this.wrapCodeInModuleWrapper(scriptSource), { + columnOffset: this._fileTransforms.get(filename)?.wrapperLength, + displayErrors: true, + filename: scriptFilename, + // @ts-expect-error: Experimental ESM API + importModuleDynamically: async specifier => { + (0, _jestUtil().invariant)( + runtimeSupportsVmModules, + 'You need to run with a version of node that supports ES Modules in the VM API. See https://jestjs.io/docs/ecmascript-modules' + ); + const context = this._environment.getVmContext?.(); + (0, _jestUtil().invariant)( + context, + 'Test environment has been torn down' + ); + const module = await this.resolveModule( + specifier, + scriptFilename, + context + ); + return this.linkAndEvaluateModule(module); + } + }); + } catch (e) { + throw (0, _transform().handlePotentialSyntaxError)(e); + } + } + _requireCoreModule(moduleName, supportPrefix) { + const moduleWithoutNodePrefix = + supportPrefix && moduleName.startsWith('node:') + ? moduleName.slice('node:'.length) + : moduleName; + if (moduleWithoutNodePrefix === 'process') { + return this._environment.global.process; + } + if (moduleWithoutNodePrefix === 'module') { + return this._getMockedNativeModule(); + } + return require(moduleName); + } + _importCoreModule(moduleName, context) { + const required = this._requireCoreModule(moduleName, true); + const module = new (_vm().SyntheticModule)( + ['default', ...Object.keys(required)], + function () { + // @ts-expect-error: TS doesn't know what `this` is + this.setExport('default', required); + Object.entries(required).forEach(([key, value]) => { + // @ts-expect-error: TS doesn't know what `this` is + this.setExport(key, value); + }); + }, + // should identifier be `node://${moduleName}`? + { + context, + identifier: moduleName + } + ); + return evaluateSyntheticModule(module); + } + async _importWasmModule(source, identifier, context) { + const wasmModule = await WebAssembly.compile(source); + const exports = WebAssembly.Module.exports(wasmModule); + const imports = WebAssembly.Module.imports(wasmModule); + const moduleLookup = {}; + for (const {module} of imports) { + if (moduleLookup[module] === undefined) { + const resolvedModule = await this.resolveModule( + module, + identifier, + context + ); + moduleLookup[module] = await this.linkAndEvaluateModule(resolvedModule); + } + } + const syntheticModule = new (_vm().SyntheticModule)( + exports.map(({name}) => name), + function () { + const importsObject = {}; + for (const {module, name} of imports) { + if (!importsObject[module]) { + importsObject[module] = {}; + } + importsObject[module][name] = moduleLookup[module].namespace[name]; + } + const wasmInstance = new WebAssembly.Instance( + wasmModule, + importsObject + ); + for (const {name} of exports) { + // @ts-expect-error: TS doesn't know what `this` is + this.setExport(name, wasmInstance.exports[name]); + } + }, + { + context, + identifier + } + ); + return syntheticModule; + } + _getMockedNativeModule() { + if (this._moduleImplementation) { + return this._moduleImplementation; + } + const createRequire = modulePath => { + const filename = + typeof modulePath === 'string' + ? modulePath.startsWith('file:///') + ? (0, _url().fileURLToPath)(new (_url().URL)(modulePath)) + : modulePath + : (0, _url().fileURLToPath)(modulePath); + if (!path().isAbsolute(filename)) { + const error = new TypeError( + `The argument 'filename' must be a file URL object, file URL string, or absolute path string. Received '${filename}'` + ); + error.code = 'ERR_INVALID_ARG_TYPE'; + throw error; + } + return this._createRequireImplementation({ + children: [], + exports: {}, + filename, + id: filename, + loaded: false, + path: path().dirname(filename) + }); + }; + + // should we implement the class ourselves? + class Module extends _module().default.Module {} + Object.entries(_module().default.Module).forEach(([key, value]) => { + // @ts-expect-error: no index signature + Module[key] = value; + }); + Module.Module = Module; + if ('createRequire' in _module().default) { + Module.createRequire = createRequire; + } + if ('createRequireFromPath' in _module().default) { + Module.createRequireFromPath = function createRequireFromPath(filename) { + if (typeof filename !== 'string') { + const error = new TypeError( + `The argument 'filename' must be string. Received '${filename}'.${ + filename instanceof _url().URL + ? ' Use createRequire for URL filename.' + : '' + }` + ); + error.code = 'ERR_INVALID_ARG_TYPE'; + throw error; + } + return createRequire(filename); + }; + } + if ('syncBuiltinESMExports' in _module().default) { + // cast since TS seems very confused about whether it exists or not + Module.syncBuiltinESMExports = + // eslint-disable-next-line @typescript-eslint/no-empty-function + function syncBuiltinESMExports() {}; + } + this._moduleImplementation = Module; + return Module; + } + _generateMock(from, moduleName) { + const modulePath = + this._resolver.resolveStubModuleName(from, moduleName) || + this._resolveCjsModule(from, moduleName); + if (!this._mockMetaDataCache.has(modulePath)) { + // This allows us to handle circular dependencies while generating an + // automock + + this._mockMetaDataCache.set( + modulePath, + this._moduleMocker.getMetadata({}) || {} + ); + + // In order to avoid it being possible for automocking to potentially + // cause side-effects within the module environment, we need to execute + // the module in isolation. This could cause issues if the module being + // mocked has calls into side-effectful APIs on another module. + const origMockRegistry = this._mockRegistry; + const origModuleRegistry = this._moduleRegistry; + this._mockRegistry = new Map(); + this._moduleRegistry = new Map(); + const moduleExports = this.requireModule(from, moduleName); + + // Restore the "real" module/mock registries + this._mockRegistry = origMockRegistry; + this._moduleRegistry = origModuleRegistry; + const mockMetadata = this._moduleMocker.getMetadata(moduleExports); + if (mockMetadata == null) { + throw new Error( + `Failed to get mock metadata: ${modulePath}\n\n` + + 'See: https://jestjs.io/docs/manual-mocks#content' + ); + } + this._mockMetaDataCache.set(modulePath, mockMetadata); + } + return this._moduleMocker.generateFromMetadata( + // added above if missing + this._mockMetaDataCache.get(modulePath) + ); + } + _shouldMockCjs(from, moduleName, explicitShouldMock) { + const options = { + conditions: this.cjsConditions + }; + const moduleID = this._resolver.getModuleID( + this._virtualMocks, + from, + moduleName, + options + ); + const key = from + path().delimiter + moduleID; + if (explicitShouldMock.has(moduleID)) { + // guaranteed by `has` above + return explicitShouldMock.get(moduleID); + } + if ( + !this._shouldAutoMock || + this._resolver.isCoreModule(moduleName) || + this._shouldUnmockTransitiveDependenciesCache.get(key) + ) { + return false; + } + if (this._shouldMockModuleCache.has(moduleID)) { + // guaranteed by `has` above + return this._shouldMockModuleCache.get(moduleID); + } + let modulePath; + try { + modulePath = this._resolveCjsModule(from, moduleName); + } catch (e) { + const manualMock = this._resolver.getMockModule(from, moduleName); + if (manualMock) { + this._shouldMockModuleCache.set(moduleID, true); + return true; + } + throw e; + } + if (this._unmockList && this._unmockList.test(modulePath)) { + this._shouldMockModuleCache.set(moduleID, false); + return false; + } + + // transitive unmocking for package managers that store flat packages (npm3) + const currentModuleID = this._resolver.getModuleID( + this._virtualMocks, + from, + undefined, + options + ); + if ( + this._transitiveShouldMock.get(currentModuleID) === false || + (from.includes(NODE_MODULES) && + modulePath.includes(NODE_MODULES) && + ((this._unmockList && this._unmockList.test(from)) || + explicitShouldMock.get(currentModuleID) === false)) + ) { + this._transitiveShouldMock.set(moduleID, false); + this._shouldUnmockTransitiveDependenciesCache.set(key, true); + return false; + } + this._shouldMockModuleCache.set(moduleID, true); + return true; + } + async _shouldMockModule(from, moduleName, explicitShouldMock) { + const options = { + conditions: this.esmConditions + }; + const moduleID = await this._resolver.getModuleIDAsync( + this._virtualMocks, + from, + moduleName, + options + ); + const key = from + path().delimiter + moduleID; + if (explicitShouldMock.has(moduleID)) { + // guaranteed by `has` above + return explicitShouldMock.get(moduleID); + } + if ( + !this._shouldAutoMock || + this._resolver.isCoreModule(moduleName) || + this._shouldUnmockTransitiveDependenciesCache.get(key) + ) { + return false; + } + if (this._shouldMockModuleCache.has(moduleID)) { + // guaranteed by `has` above + return this._shouldMockModuleCache.get(moduleID); + } + let modulePath; + try { + modulePath = await this._resolveModule(from, moduleName); + } catch (e) { + const manualMock = await this._resolver.getMockModuleAsync( + from, + moduleName + ); + if (manualMock) { + this._shouldMockModuleCache.set(moduleID, true); + return true; + } + throw e; + } + if (this._unmockList && this._unmockList.test(modulePath)) { + this._shouldMockModuleCache.set(moduleID, false); + return false; + } + + // transitive unmocking for package managers that store flat packages (npm3) + const currentModuleID = await this._resolver.getModuleIDAsync( + this._virtualMocks, + from, + undefined, + options + ); + if ( + this._transitiveShouldMock.get(currentModuleID) === false || + (from.includes(NODE_MODULES) && + modulePath.includes(NODE_MODULES) && + ((this._unmockList && this._unmockList.test(from)) || + explicitShouldMock.get(currentModuleID) === false)) + ) { + this._transitiveShouldMock.set(moduleID, false); + this._shouldUnmockTransitiveDependenciesCache.set(key, true); + return false; + } + this._shouldMockModuleCache.set(moduleID, true); + return true; + } + _createRequireImplementation(from, options) { + const resolve = (moduleName, resolveOptions) => { + const resolved = this._requireResolve( + from.filename, + moduleName, + resolveOptions + ); + if ( + resolveOptions?.[JEST_RESOLVE_OUTSIDE_VM_OPTION] && + options?.isInternalModule + ) { + return (0, _helpers.createOutsideJestVmPath)(resolved); + } + return resolved; + }; + resolve.paths = moduleName => + this._requireResolvePaths(from.filename, moduleName); + const moduleRequire = options?.isInternalModule + ? moduleName => this.requireInternalModule(from.filename, moduleName) + : this.requireModuleOrMock.bind(this, from.filename); + moduleRequire.extensions = Object.create(null); + moduleRequire.resolve = resolve; + moduleRequire.cache = (() => { + // TODO: consider warning somehow that this does nothing. We should support deletions, anyways + const notPermittedMethod = () => true; + return new Proxy(Object.create(null), { + defineProperty: notPermittedMethod, + deleteProperty: notPermittedMethod, + get: (_target, key) => + typeof key === 'string' ? this._moduleRegistry.get(key) : undefined, + getOwnPropertyDescriptor() { + return { + configurable: true, + enumerable: true + }; + }, + has: (_target, key) => + typeof key === 'string' && this._moduleRegistry.has(key), + ownKeys: () => Array.from(this._moduleRegistry.keys()), + set: notPermittedMethod + }); + })(); + Object.defineProperty(moduleRequire, 'main', { + enumerable: true, + value: this._mainModule + }); + return moduleRequire; + } + _createJestObjectFor(from) { + const disableAutomock = () => { + this._shouldAutoMock = false; + return jestObject; + }; + const enableAutomock = () => { + this._shouldAutoMock = true; + return jestObject; + }; + const unmock = moduleName => { + const moduleID = this._resolver.getModuleID( + this._virtualMocks, + from, + moduleName, + { + conditions: this.cjsConditions + } + ); + this._explicitShouldMock.set(moduleID, false); + return jestObject; + }; + const deepUnmock = moduleName => { + const moduleID = this._resolver.getModuleID( + this._virtualMocks, + from, + moduleName, + { + conditions: this.cjsConditions + } + ); + this._explicitShouldMock.set(moduleID, false); + this._transitiveShouldMock.set(moduleID, false); + return jestObject; + }; + const mock = (moduleName, mockFactory, options) => { + if (mockFactory !== undefined) { + return setMockFactory(moduleName, mockFactory, options); + } + const moduleID = this._resolver.getModuleID( + this._virtualMocks, + from, + moduleName, + { + conditions: this.cjsConditions + } + ); + this._explicitShouldMock.set(moduleID, true); + return jestObject; + }; + const setMockFactory = (moduleName, mockFactory, options) => { + this.setMock(from, moduleName, mockFactory, options); + return jestObject; + }; + const mockModule = (moduleName, mockFactory, options) => { + if (typeof mockFactory !== 'function') { + throw new Error('`unstable_mockModule` must be passed a mock factory'); + } + this.setModuleMock(from, moduleName, mockFactory, options); + return jestObject; + }; + const clearAllMocks = () => { + this.clearAllMocks(); + return jestObject; + }; + const resetAllMocks = () => { + this.resetAllMocks(); + return jestObject; + }; + const restoreAllMocks = () => { + this.restoreAllMocks(); + return jestObject; + }; + const _getFakeTimers = () => { + if ( + this.isTornDown || + !(this._environment.fakeTimers || this._environment.fakeTimersModern) + ) { + this._logFormattedReferenceError( + 'You are trying to access a property or method of the Jest environment after it has been torn down.' + ); + process.exitCode = 1; + } + return this._fakeTimersImplementation; + }; + const useFakeTimers = fakeTimersConfig => { + fakeTimersConfig = { + ...this._config.fakeTimers, + ...fakeTimersConfig + }; + if (fakeTimersConfig?.legacyFakeTimers) { + this._fakeTimersImplementation = this._environment.fakeTimers; + } else { + this._fakeTimersImplementation = this._environment.fakeTimersModern; + } + this._fakeTimersImplementation.useFakeTimers(fakeTimersConfig); + return jestObject; + }; + const useRealTimers = () => { + _getFakeTimers().useRealTimers(); + return jestObject; + }; + const resetModules = () => { + this.resetModules(); + return jestObject; + }; + const isolateModules = fn => { + this.isolateModules(fn); + return jestObject; + }; + const isolateModulesAsync = fn => { + return this.isolateModulesAsync(fn); + }; + const fn = this._moduleMocker.fn.bind(this._moduleMocker); + const spyOn = this._moduleMocker.spyOn.bind(this._moduleMocker); + const mocked = + this._moduleMocker.mocked?.bind(this._moduleMocker) ?? + (() => { + throw new Error( + 'Your test environment does not support `mocked`, please update it.' + ); + }); + const replaceProperty = + typeof this._moduleMocker.replaceProperty === 'function' + ? this._moduleMocker.replaceProperty.bind(this._moduleMocker) + : () => { + throw new Error( + 'Your test environment does not support `jest.replaceProperty` - please ensure its Jest dependencies are updated to version 29.4 or later' + ); + }; + const setTimeout = timeout => { + this._environment.global[testTimeoutSymbol] = timeout; + return jestObject; + }; + const retryTimes = (numTestRetries, options) => { + this._environment.global[retryTimesSymbol] = numTestRetries; + this._environment.global[logErrorsBeforeRetrySymbol] = + options?.logErrorsBeforeRetry; + return jestObject; + }; + const jestObject = { + advanceTimersByTime: msToRun => + _getFakeTimers().advanceTimersByTime(msToRun), + advanceTimersByTimeAsync: async msToRun => { + const fakeTimers = _getFakeTimers(); + if (fakeTimers === this._environment.fakeTimersModern) { + // TODO: remove this check in Jest 30 + if (typeof fakeTimers.advanceTimersByTimeAsync !== 'function') { + throw new TypeError( + 'Your test environment does not support async fake timers - please ensure its Jest dependencies are updated to version 29.5 or later' + ); + } + await fakeTimers.advanceTimersByTimeAsync(msToRun); + } else { + throw new TypeError( + '`jest.advanceTimersByTimeAsync()` is not available when using legacy fake timers.' + ); + } + }, + advanceTimersToNextTimer: steps => + _getFakeTimers().advanceTimersToNextTimer(steps), + advanceTimersToNextTimerAsync: async steps => { + const fakeTimers = _getFakeTimers(); + if (fakeTimers === this._environment.fakeTimersModern) { + // TODO: remove this check in Jest 30 + if (typeof fakeTimers.advanceTimersToNextTimerAsync !== 'function') { + throw new TypeError( + 'Your test environment does not support async fake timers - please ensure its Jest dependencies are updated to version 29.5 or later' + ); + } + await fakeTimers.advanceTimersToNextTimerAsync(steps); + } else { + throw new TypeError( + '`jest.advanceTimersToNextTimerAsync()` is not available when using legacy fake timers.' + ); + } + }, + autoMockOff: disableAutomock, + autoMockOn: enableAutomock, + clearAllMocks, + clearAllTimers: () => _getFakeTimers().clearAllTimers(), + createMockFromModule: moduleName => this._generateMock(from, moduleName), + deepUnmock, + disableAutomock, + doMock: mock, + dontMock: unmock, + enableAutomock, + fn, + genMockFromModule: moduleName => this._generateMock(from, moduleName), + getRealSystemTime: () => { + const fakeTimers = _getFakeTimers(); + if (fakeTimers === this._environment.fakeTimersModern) { + return fakeTimers.getRealSystemTime(); + } else { + throw new TypeError( + '`jest.getRealSystemTime()` is not available when using legacy fake timers.' + ); + } + }, + getSeed: () => { + // TODO: remove this check in Jest 30 + if (this._globalConfig?.seed === undefined) { + throw new Error( + 'The seed value is not available. Likely you are using older versions of the jest dependencies.' + ); + } + return this._globalConfig.seed; + }, + getTimerCount: () => _getFakeTimers().getTimerCount(), + isEnvironmentTornDown: () => this.isTornDown, + isMockFunction: this._moduleMocker.isMockFunction, + isolateModules, + isolateModulesAsync, + mock, + mocked, + now: () => _getFakeTimers().now(), + replaceProperty, + requireActual: moduleName => this.requireActual(from, moduleName), + requireMock: moduleName => this.requireMock(from, moduleName), + resetAllMocks, + resetModules, + restoreAllMocks, + retryTimes, + runAllImmediates: () => { + const fakeTimers = _getFakeTimers(); + if (fakeTimers === this._environment.fakeTimers) { + fakeTimers.runAllImmediates(); + } else { + throw new TypeError( + '`jest.runAllImmediates()` is only available when using legacy fake timers.' + ); + } + }, + runAllTicks: () => _getFakeTimers().runAllTicks(), + runAllTimers: () => _getFakeTimers().runAllTimers(), + runAllTimersAsync: async () => { + const fakeTimers = _getFakeTimers(); + if (fakeTimers === this._environment.fakeTimersModern) { + // TODO: remove this check in Jest 30 + if (typeof fakeTimers.runAllTimersAsync !== 'function') { + throw new TypeError( + 'Your test environment does not support async fake timers - please ensure its Jest dependencies are updated to version 29.5 or later' + ); + } + await fakeTimers.runAllTimersAsync(); + } else { + throw new TypeError( + '`jest.runAllTimersAsync()` is not available when using legacy fake timers.' + ); + } + }, + runOnlyPendingTimers: () => _getFakeTimers().runOnlyPendingTimers(), + runOnlyPendingTimersAsync: async () => { + const fakeTimers = _getFakeTimers(); + if (fakeTimers === this._environment.fakeTimersModern) { + // TODO: remove this check in Jest 30 + if (typeof fakeTimers.runOnlyPendingTimersAsync !== 'function') { + throw new TypeError( + 'Your test environment does not support async fake timers - please ensure its Jest dependencies are updated to version 29.5 or later' + ); + } + await fakeTimers.runOnlyPendingTimersAsync(); + } else { + throw new TypeError( + '`jest.runOnlyPendingTimersAsync()` is not available when using legacy fake timers.' + ); + } + }, + setMock: (moduleName, mock) => setMockFactory(moduleName, () => mock), + setSystemTime: now => { + const fakeTimers = _getFakeTimers(); + if (fakeTimers === this._environment.fakeTimersModern) { + fakeTimers.setSystemTime(now); + } else { + throw new TypeError( + '`jest.setSystemTime()` is not available when using legacy fake timers.' + ); + } + }, + setTimeout, + spyOn, + unmock, + unstable_mockModule: mockModule, + useFakeTimers, + useRealTimers + }; + return jestObject; + } + _logFormattedReferenceError(errorMessage) { + const testPath = this._testPath + ? ` From ${(0, _slash().default)( + path().relative(this._config.rootDir, this._testPath) + )}.` + : ''; + const originalStack = new ReferenceError(`${errorMessage}${testPath}`).stack + .split('\n') + // Remove this file from the stack (jest-message-utils will keep one line) + .filter(line => line.indexOf(__filename) === -1) + .join('\n'); + const {message, stack} = (0, _jestMessageUtil().separateMessageFromStack)( + originalStack + ); + console.error( + `\n${message}\n${(0, _jestMessageUtil().formatStackTrace)( + stack, + this._config, + { + noStackTrace: false + } + )}` + ); + } + wrapCodeInModuleWrapper(content) { + return `${this.constructModuleWrapperStart() + content}\n}});`; + } + constructModuleWrapperStart() { + const args = this.constructInjectedModuleParameters(); + return `({"${EVAL_RESULT_VARIABLE}":function(${args.join(',')}){`; + } + constructInjectedModuleParameters() { + return [ + 'module', + 'exports', + 'require', + '__dirname', + '__filename', + this._config.injectGlobals ? 'jest' : undefined, + ...this._config.sandboxInjectedGlobals + ].filter(_jestUtil().isNonNullable); + } + handleExecutionError(e, module) { + const moduleNotFoundError = + _jestResolve().default.tryCastModuleNotFoundError(e); + if (moduleNotFoundError) { + if (!moduleNotFoundError.requireStack) { + moduleNotFoundError.requireStack = [module.filename || module.id]; + for (let cursor = module.parent; cursor; cursor = cursor.parent) { + moduleNotFoundError.requireStack.push(cursor.filename || cursor.id); + } + moduleNotFoundError.buildMessage(this._config.rootDir); + } + throw moduleNotFoundError; + } + throw e; + } + getGlobalsForCjs(from) { + const jest = this.jestObjectCaches.get(from); + (0, _jestUtil().invariant)( + jest, + 'There should always be a Jest object already' + ); + return { + ...this.getGlobalsFromEnvironment(), + jest + }; + } + getGlobalsForEsm(from, context) { + let jest = this.jestObjectCaches.get(from); + if (!jest) { + jest = this._createJestObjectFor(from); + this.jestObjectCaches.set(from, jest); + } + const globals = { + ...this.getGlobalsFromEnvironment(), + jest + }; + const module = new (_vm().SyntheticModule)( + Object.keys(globals), + function () { + Object.entries(globals).forEach(([key, value]) => { + // @ts-expect-error: TS doesn't know what `this` is + this.setExport(key, value); + }); + }, + { + context, + identifier: '@jest/globals' + } + ); + return evaluateSyntheticModule(module); + } + getGlobalsFromEnvironment() { + if (this.jestGlobals) { + return { + ...this.jestGlobals + }; + } + return { + afterAll: this._environment.global.afterAll, + afterEach: this._environment.global.afterEach, + beforeAll: this._environment.global.beforeAll, + beforeEach: this._environment.global.beforeEach, + describe: this._environment.global.describe, + expect: this._environment.global.expect, + fdescribe: this._environment.global.fdescribe, + fit: this._environment.global.fit, + it: this._environment.global.it, + test: this._environment.global.test, + xdescribe: this._environment.global.xdescribe, + xit: this._environment.global.xit, + xtest: this._environment.global.xtest + }; + } + readFileBuffer(filename) { + let source = this._cacheFSBuffer.get(filename); + if (!source) { + source = fs().readFileSync(filename); + this._cacheFSBuffer.set(filename, source); + } + return source; + } + readFile(filename) { + let source = this._cacheFS.get(filename); + if (!source) { + const buffer = this.readFileBuffer(filename); + source = buffer.toString('utf8'); + this._cacheFS.set(filename, source); + } + return source; + } + setGlobalsForRuntime(globals) { + this.jestGlobals = globals; + } +} +exports.default = Runtime; +async function evaluateSyntheticModule(module) { + await module.link(() => { + throw new Error('This should never happen'); + }); + await module.evaluate(); + return module; +} diff --git a/node_modules/jest-runtime/package.json b/node_modules/jest-runtime/package.json new file mode 100644 index 00000000..096ae19a --- /dev/null +++ b/node_modules/jest-runtime/package.json @@ -0,0 +1,56 @@ +{ + "name": "jest-runtime", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-runtime" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "devDependencies": { + "@jest/test-utils": "^29.7.0", + "@types/glob": "^7.1.1", + "@types/graceful-fs": "^4.1.3", + "jest-environment-node": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-snapshot/LICENSE b/node_modules/jest-snapshot/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-snapshot/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-snapshot/build/InlineSnapshots.js b/node_modules/jest-snapshot/build/InlineSnapshots.js new file mode 100644 index 00000000..3481ad99 --- /dev/null +++ b/node_modules/jest-snapshot/build/InlineSnapshots.js @@ -0,0 +1,421 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.saveInlineSnapshots = saveInlineSnapshots; +var path = _interopRequireWildcard(require('path')); +var _util = require('util'); +var fs = _interopRequireWildcard(require('graceful-fs')); +var _semver = _interopRequireDefault(require('semver')); +var _utils = require('./utils'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +var jestWriteFile = + globalThis[Symbol.for('jest-native-write-file')] || fs.writeFileSync; +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +var jestReadFile = + globalThis[Symbol.for('jest-native-read-file')] || fs.readFileSync; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +// prettier-ignore +const generate = // @ts-expect-error requireOutside Babel transform +require(require.resolve('@babel/generator', { + [(globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol).for('jest-resolve-outside-vm-option')]: true +})).default; +const { + isAwaitExpression, + templateElement, + templateLiteral, + traverse, + traverseFast +} = require(require.resolve('@babel/types', { // @ts-expect-error requireOutside Babel transform + [(globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol).for( + 'jest-resolve-outside-vm-option' + )]: true +})); +// @ts-expect-error requireOutside Babel transform +const {parseSync} = require(require.resolve('@babel/core', { + [(globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol).for( + 'jest-resolve-outside-vm-option' + )]: true +})); +function saveInlineSnapshots(snapshots, rootDir, prettierPath) { + let prettier = null; + if (prettierPath) { + try { + // @ts-expect-error requireOutside Babel transform + prettier = require(require.resolve(prettierPath, { + [(globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol).for( + 'jest-resolve-outside-vm-option' + )]: true + })); + if (_semver.default.gte(prettier.version, '3.0.0')) { + throw new Error( + 'Jest: Inline Snapshots are not supported when using Prettier 3.0.0 or above.\nSee https://jestjs.io/docs/configuration/#prettierpath-string for alternatives.' + ); + } + } catch (error) { + if (!_util.types.isNativeError(error)) { + throw error; + } + if (error.code !== 'MODULE_NOT_FOUND') { + throw error; + } + } + } + const snapshotsByFile = groupSnapshotsByFile(snapshots); + for (const sourceFilePath of Object.keys(snapshotsByFile)) { + saveSnapshotsForFile( + snapshotsByFile[sourceFilePath], + sourceFilePath, + rootDir, + prettier && _semver.default.gte(prettier.version, '1.5.0') + ? prettier + : undefined + ); + } +} +const saveSnapshotsForFile = (snapshots, sourceFilePath, rootDir, prettier) => { + const sourceFile = jestReadFile(sourceFilePath, 'utf8'); + + // TypeScript projects may not have a babel config; make sure they can be parsed anyway. + const presets = [require.resolve('babel-preset-current-node-syntax')]; + const plugins = []; + if (/\.([cm]?ts|tsx)$/.test(sourceFilePath)) { + plugins.push([ + require.resolve('@babel/plugin-syntax-typescript'), + { + isTSX: sourceFilePath.endsWith('x') + }, + // unique name to make sure Babel does not complain about a possible duplicate plugin. + 'TypeScript syntax plugin added by Jest snapshot' + ]); + } + + // Record the matcher names seen during traversal and pass them down one + // by one to formatting parser. + const snapshotMatcherNames = []; + let ast = null; + try { + ast = parseSync(sourceFile, { + filename: sourceFilePath, + plugins, + presets, + root: rootDir + }); + } catch (error) { + // attempt to recover from missing jsx plugin + if (error.message.includes('@babel/plugin-syntax-jsx')) { + try { + const jsxSyntaxPlugin = [ + require.resolve('@babel/plugin-syntax-jsx'), + {}, + // unique name to make sure Babel does not complain about a possible duplicate plugin. + 'JSX syntax plugin added by Jest snapshot' + ]; + ast = parseSync(sourceFile, { + filename: sourceFilePath, + plugins: [...plugins, jsxSyntaxPlugin], + presets, + root: rootDir + }); + } catch { + throw error; + } + } else { + throw error; + } + } + if (!ast) { + throw new Error(`jest-snapshot: Failed to parse ${sourceFilePath}`); + } + traverseAst(snapshots, ast, snapshotMatcherNames); + + // substitute in the snapshots in reverse order, so slice calculations aren't thrown off. + const sourceFileWithSnapshots = snapshots.reduceRight( + (sourceSoFar, nextSnapshot) => { + const {node} = nextSnapshot; + if ( + !node || + typeof node.start !== 'number' || + typeof node.end !== 'number' + ) { + throw new Error('Jest: no snapshot insert location found'); + } + + // A hack to prevent unexpected line breaks in the generated code + node.loc.end.line = node.loc.start.line; + return ( + sourceSoFar.slice(0, node.start) + + generate(node, { + retainLines: true + }).code.trim() + + sourceSoFar.slice(node.end) + ); + }, + sourceFile + ); + const newSourceFile = prettier + ? runPrettier( + prettier, + sourceFilePath, + sourceFileWithSnapshots, + snapshotMatcherNames + ) + : sourceFileWithSnapshots; + if (newSourceFile !== sourceFile) { + jestWriteFile(sourceFilePath, newSourceFile); + } +}; +const groupSnapshotsBy = createKey => snapshots => + snapshots.reduce((object, inlineSnapshot) => { + const key = createKey(inlineSnapshot); + return { + ...object, + [key]: (object[key] || []).concat(inlineSnapshot) + }; + }, {}); +const groupSnapshotsByFrame = groupSnapshotsBy(({frame: {line, column}}) => + typeof line === 'number' && typeof column === 'number' + ? `${line}:${column - 1}` + : '' +); +const groupSnapshotsByFile = groupSnapshotsBy(({frame: {file}}) => file); +const indent = (snapshot, numIndents, indentation) => { + const lines = snapshot.split('\n'); + // Prevent re-indentation of inline snapshots. + if ( + lines.length >= 2 && + lines[1].startsWith(indentation.repeat(numIndents + 1)) + ) { + return snapshot; + } + return lines + .map((line, index) => { + if (index === 0) { + // First line is either a 1-line snapshot or a blank line. + return line; + } else if (index !== lines.length - 1) { + // Do not indent empty lines. + if (line === '') { + return line; + } + + // Not last line, indent one level deeper than expect call. + return indentation.repeat(numIndents + 1) + line; + } else { + // The last line should be placed on the same level as the expect call. + return indentation.repeat(numIndents) + line; + } + }) + .join('\n'); +}; +const traverseAst = (snapshots, ast, snapshotMatcherNames) => { + const groupedSnapshots = groupSnapshotsByFrame(snapshots); + const remainingSnapshots = new Set(snapshots.map(({snapshot}) => snapshot)); + traverseFast(ast, node => { + if (node.type !== 'CallExpression') return; + const {arguments: args, callee} = node; + if ( + callee.type !== 'MemberExpression' || + callee.property.type !== 'Identifier' || + callee.property.loc == null + ) { + return; + } + const {line, column} = callee.property.loc.start; + const snapshotsForFrame = groupedSnapshots[`${line}:${column}`]; + if (!snapshotsForFrame) { + return; + } + if (snapshotsForFrame.length > 1) { + throw new Error( + 'Jest: Multiple inline snapshots for the same call are not supported.' + ); + } + const inlineSnapshot = snapshotsForFrame[0]; + inlineSnapshot.node = node; + snapshotMatcherNames.push(callee.property.name); + const snapshotIndex = args.findIndex( + ({type}) => type === 'TemplateLiteral' || type === 'StringLiteral' + ); + const {snapshot} = inlineSnapshot; + remainingSnapshots.delete(snapshot); + const replacementNode = templateLiteral( + [ + templateElement({ + raw: (0, _utils.escapeBacktickString)(snapshot) + }) + ], + [] + ); + if (snapshotIndex > -1) { + args[snapshotIndex] = replacementNode; + } else { + args.push(replacementNode); + } + }); + if (remainingSnapshots.size) { + throw new Error("Jest: Couldn't locate all inline snapshots."); + } +}; +const runPrettier = ( + prettier, + sourceFilePath, + sourceFileWithSnapshots, + snapshotMatcherNames +) => { + // Resolve project configuration. + // For older versions of Prettier, do not load configuration. + const config = prettier.resolveConfig + ? prettier.resolveConfig.sync(sourceFilePath, { + editorconfig: true + }) + : null; + + // Prioritize parser found in the project config. + // If not found detect the parser for the test file. + // For older versions of Prettier, fallback to a simple parser detection. + // @ts-expect-error - `inferredParser` is `string` + const inferredParser = + (config && typeof config.parser === 'string' && config.parser) || + (prettier.getFileInfo + ? prettier.getFileInfo.sync(sourceFilePath).inferredParser + : simpleDetectParser(sourceFilePath)); + if (!inferredParser) { + throw new Error( + `Could not infer Prettier parser for file ${sourceFilePath}` + ); + } + + // Snapshots have now been inserted. Run prettier to make sure that the code is + // formatted, except snapshot indentation. Snapshots cannot be formatted until + // after the initial format because we don't know where the call expression + // will be placed (specifically its indentation), so we have to do two + // prettier.format calls back-to-back. + return prettier.format( + prettier.format(sourceFileWithSnapshots, { + ...config, + filepath: sourceFilePath + }), + { + ...config, + filepath: sourceFilePath, + parser: createFormattingParser(snapshotMatcherNames, inferredParser) + } + ); +}; + +// This parser formats snapshots to the correct indentation. +const createFormattingParser = + (snapshotMatcherNames, inferredParser) => (text, parsers, options) => { + // Workaround for https://github.com/prettier/prettier/issues/3150 + options.parser = inferredParser; + const ast = parsers[inferredParser](text, options); + traverse(ast, (node, ancestors) => { + if (node.type !== 'CallExpression') return; + const {arguments: args, callee} = node; + if ( + callee.type !== 'MemberExpression' || + callee.property.type !== 'Identifier' || + !snapshotMatcherNames.includes(callee.property.name) || + !callee.loc || + callee.computed + ) { + return; + } + let snapshotIndex; + let snapshot; + for (let i = 0; i < args.length; i++) { + const node = args[i]; + if (node.type === 'TemplateLiteral') { + snapshotIndex = i; + snapshot = node.quasis[0].value.raw; + } + } + if (snapshot === undefined) { + return; + } + const parent = ancestors[ancestors.length - 1].node; + const startColumn = + isAwaitExpression(parent) && parent.loc + ? parent.loc.start.column + : callee.loc.start.column; + const useSpaces = !options.useTabs; + snapshot = indent( + snapshot, + Math.ceil( + useSpaces + ? startColumn / (options.tabWidth ?? 1) + : // Each tab is 2 characters. + startColumn / 2 + ), + useSpaces ? ' '.repeat(options.tabWidth ?? 1) : '\t' + ); + const replacementNode = templateLiteral( + [ + templateElement({ + raw: snapshot + }) + ], + [] + ); + args[snapshotIndex] = replacementNode; + }); + return ast; + }; +const simpleDetectParser = filePath => { + const extname = path.extname(filePath); + if (/\.tsx?$/.test(extname)) { + return 'typescript'; + } + return 'babel'; +}; diff --git a/node_modules/jest-snapshot/build/SnapshotResolver.js b/node_modules/jest-snapshot/build/SnapshotResolver.js new file mode 100644 index 00000000..351f7eab --- /dev/null +++ b/node_modules/jest-snapshot/build/SnapshotResolver.js @@ -0,0 +1,153 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.isSnapshotPath = + exports.buildSnapshotResolver = + exports.EXTENSION = + exports.DOT_EXTENSION = + void 0; +var path = _interopRequireWildcard(require('path')); +var _chalk = _interopRequireDefault(require('chalk')); +var _transform = require('@jest/transform'); +var _jestUtil = require('jest-util'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const EXTENSION = 'snap'; +exports.EXTENSION = EXTENSION; +const DOT_EXTENSION = `.${EXTENSION}`; +exports.DOT_EXTENSION = DOT_EXTENSION; +const isSnapshotPath = path => path.endsWith(DOT_EXTENSION); +exports.isSnapshotPath = isSnapshotPath; +const cache = new Map(); +const buildSnapshotResolver = async ( + config, + localRequire = (0, _transform.createTranspilingRequire)(config) +) => { + const key = config.rootDir; + const resolver = + cache.get(key) ?? + (await createSnapshotResolver(await localRequire, config.snapshotResolver)); + cache.set(key, resolver); + return resolver; +}; +exports.buildSnapshotResolver = buildSnapshotResolver; +async function createSnapshotResolver(localRequire, snapshotResolverPath) { + return typeof snapshotResolverPath === 'string' + ? createCustomSnapshotResolver(snapshotResolverPath, localRequire) + : createDefaultSnapshotResolver(); +} +function createDefaultSnapshotResolver() { + return { + resolveSnapshotPath: testPath => + path.join( + path.join(path.dirname(testPath), '__snapshots__'), + path.basename(testPath) + DOT_EXTENSION + ), + resolveTestPath: snapshotPath => + path.resolve( + path.dirname(snapshotPath), + '..', + path.basename(snapshotPath, DOT_EXTENSION) + ), + testPathForConsistencyCheck: path.posix.join( + 'consistency_check', + '__tests__', + 'example.test.js' + ) + }; +} +async function createCustomSnapshotResolver( + snapshotResolverPath, + localRequire +) { + const custom = (0, _jestUtil.interopRequireDefault)( + await localRequire(snapshotResolverPath) + ).default; + const keys = [ + ['resolveSnapshotPath', 'function'], + ['resolveTestPath', 'function'], + ['testPathForConsistencyCheck', 'string'] + ]; + keys.forEach(([propName, requiredType]) => { + if (typeof custom[propName] !== requiredType) { + throw new TypeError(mustImplement(propName, requiredType)); + } + }); + const customResolver = { + resolveSnapshotPath: testPath => + custom.resolveSnapshotPath(testPath, DOT_EXTENSION), + resolveTestPath: snapshotPath => + custom.resolveTestPath(snapshotPath, DOT_EXTENSION), + testPathForConsistencyCheck: custom.testPathForConsistencyCheck + }; + verifyConsistentTransformations(customResolver); + return customResolver; +} +function mustImplement(propName, requiredType) { + return `${_chalk.default.bold( + `Custom snapshot resolver must implement a \`${propName}\` as a ${requiredType}.` + )}\nDocumentation: https://jestjs.io/docs/configuration#snapshotresolver-string`; +} +function verifyConsistentTransformations(custom) { + const resolvedSnapshotPath = custom.resolveSnapshotPath( + custom.testPathForConsistencyCheck + ); + const resolvedTestPath = custom.resolveTestPath(resolvedSnapshotPath); + if (resolvedTestPath !== custom.testPathForConsistencyCheck) { + throw new Error( + _chalk.default.bold( + `Custom snapshot resolver functions must transform paths consistently, i.e. expects resolveTestPath(resolveSnapshotPath('${custom.testPathForConsistencyCheck}')) === ${resolvedTestPath}` + ) + ); + } +} diff --git a/node_modules/jest-snapshot/build/State.js b/node_modules/jest-snapshot/build/State.js new file mode 100644 index 00000000..262e3675 --- /dev/null +++ b/node_modules/jest-snapshot/build/State.js @@ -0,0 +1,288 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +var fs = _interopRequireWildcard(require('graceful-fs')); +var _jestMessageUtil = require('jest-message-util'); +var _InlineSnapshots = require('./InlineSnapshots'); +var _utils = require('./utils'); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +var jestExistsFile = + globalThis[Symbol.for('jest-native-exists-file')] || fs.existsSync; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +class SnapshotState { + _counters; + _dirty; + // @ts-expect-error - seemingly unused? + _index; + _updateSnapshot; + _snapshotData; + _initialData; + _snapshotPath; + _inlineSnapshots; + _uncheckedKeys; + _prettierPath; + _rootDir; + snapshotFormat; + added; + expand; + matched; + unmatched; + updated; + constructor(snapshotPath, options) { + this._snapshotPath = snapshotPath; + const {data, dirty} = (0, _utils.getSnapshotData)( + this._snapshotPath, + options.updateSnapshot + ); + this._initialData = data; + this._snapshotData = data; + this._dirty = dirty; + this._prettierPath = options.prettierPath ?? null; + this._inlineSnapshots = []; + this._uncheckedKeys = new Set(Object.keys(this._snapshotData)); + this._counters = new Map(); + this._index = 0; + this.expand = options.expand || false; + this.added = 0; + this.matched = 0; + this.unmatched = 0; + this._updateSnapshot = options.updateSnapshot; + this.updated = 0; + this.snapshotFormat = options.snapshotFormat; + this._rootDir = options.rootDir; + } + markSnapshotsAsCheckedForTest(testName) { + this._uncheckedKeys.forEach(uncheckedKey => { + if ((0, _utils.keyToTestName)(uncheckedKey) === testName) { + this._uncheckedKeys.delete(uncheckedKey); + } + }); + } + _addSnapshot(key, receivedSerialized, options) { + this._dirty = true; + if (options.isInline) { + const error = options.error || new Error(); + const lines = (0, _jestMessageUtil.getStackTraceLines)( + (0, _utils.removeLinesBeforeExternalMatcherTrap)(error.stack || '') + ); + const frame = (0, _jestMessageUtil.getTopFrame)(lines); + if (!frame) { + throw new Error( + "Jest: Couldn't infer stack frame for inline snapshot." + ); + } + this._inlineSnapshots.push({ + frame, + snapshot: receivedSerialized + }); + } else { + this._snapshotData[key] = receivedSerialized; + } + } + clear() { + this._snapshotData = this._initialData; + this._inlineSnapshots = []; + this._counters = new Map(); + this._index = 0; + this.added = 0; + this.matched = 0; + this.unmatched = 0; + this.updated = 0; + } + save() { + const hasExternalSnapshots = Object.keys(this._snapshotData).length; + const hasInlineSnapshots = this._inlineSnapshots.length; + const isEmpty = !hasExternalSnapshots && !hasInlineSnapshots; + const status = { + deleted: false, + saved: false + }; + if ((this._dirty || this._uncheckedKeys.size) && !isEmpty) { + if (hasExternalSnapshots) { + (0, _utils.saveSnapshotFile)(this._snapshotData, this._snapshotPath); + } + if (hasInlineSnapshots) { + (0, _InlineSnapshots.saveInlineSnapshots)( + this._inlineSnapshots, + this._rootDir, + this._prettierPath + ); + } + status.saved = true; + } else if (!hasExternalSnapshots && jestExistsFile(this._snapshotPath)) { + if (this._updateSnapshot === 'all') { + fs.unlinkSync(this._snapshotPath); + } + status.deleted = true; + } + return status; + } + getUncheckedCount() { + return this._uncheckedKeys.size || 0; + } + getUncheckedKeys() { + return Array.from(this._uncheckedKeys); + } + removeUncheckedKeys() { + if (this._updateSnapshot === 'all' && this._uncheckedKeys.size) { + this._dirty = true; + this._uncheckedKeys.forEach(key => delete this._snapshotData[key]); + this._uncheckedKeys.clear(); + } + } + match({testName, received, key, inlineSnapshot, isInline, error}) { + this._counters.set(testName, (this._counters.get(testName) || 0) + 1); + const count = Number(this._counters.get(testName)); + if (!key) { + key = (0, _utils.testNameToKey)(testName, count); + } + + // Do not mark the snapshot as "checked" if the snapshot is inline and + // there's an external snapshot. This way the external snapshot can be + // removed with `--updateSnapshot`. + if (!(isInline && this._snapshotData[key] !== undefined)) { + this._uncheckedKeys.delete(key); + } + const receivedSerialized = (0, _utils.addExtraLineBreaks)( + (0, _utils.serialize)(received, undefined, this.snapshotFormat) + ); + const expected = isInline ? inlineSnapshot : this._snapshotData[key]; + const pass = expected === receivedSerialized; + const hasSnapshot = expected !== undefined; + const snapshotIsPersisted = isInline || fs.existsSync(this._snapshotPath); + if (pass && !isInline) { + // Executing a snapshot file as JavaScript and writing the strings back + // when other snapshots have changed loses the proper escaping for some + // characters. Since we check every snapshot in every test, use the newly + // generated formatted string. + // Note that this is only relevant when a snapshot is added and the dirty + // flag is set. + this._snapshotData[key] = receivedSerialized; + } + + // These are the conditions on when to write snapshots: + // * There's no snapshot file in a non-CI environment. + // * There is a snapshot file and we decided to update the snapshot. + // * There is a snapshot file, but it doesn't have this snaphsot. + // These are the conditions on when not to write snapshots: + // * The update flag is set to 'none'. + // * There's no snapshot file or a file without this snapshot on a CI environment. + if ( + (hasSnapshot && this._updateSnapshot === 'all') || + ((!hasSnapshot || !snapshotIsPersisted) && + (this._updateSnapshot === 'new' || this._updateSnapshot === 'all')) + ) { + if (this._updateSnapshot === 'all') { + if (!pass) { + if (hasSnapshot) { + this.updated++; + } else { + this.added++; + } + this._addSnapshot(key, receivedSerialized, { + error, + isInline + }); + } else { + this.matched++; + } + } else { + this._addSnapshot(key, receivedSerialized, { + error, + isInline + }); + this.added++; + } + return { + actual: '', + count, + expected: '', + key, + pass: true + }; + } else { + if (!pass) { + this.unmatched++; + return { + actual: (0, _utils.removeExtraLineBreaks)(receivedSerialized), + count, + expected: + expected !== undefined + ? (0, _utils.removeExtraLineBreaks)(expected) + : undefined, + key, + pass: false + }; + } else { + this.matched++; + return { + actual: '', + count, + expected: '', + key, + pass: true + }; + } + } + } + fail(testName, _received, key) { + this._counters.set(testName, (this._counters.get(testName) || 0) + 1); + const count = Number(this._counters.get(testName)); + if (!key) { + key = (0, _utils.testNameToKey)(testName, count); + } + this._uncheckedKeys.delete(key); + this.unmatched++; + return key; + } +} +exports.default = SnapshotState; diff --git a/node_modules/jest-snapshot/build/colors.js b/node_modules/jest-snapshot/build/colors.js new file mode 100644 index 00000000..e729c37e --- /dev/null +++ b/node_modules/jest-snapshot/build/colors.js @@ -0,0 +1,39 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.bForeground3 = + exports.bForeground2 = + exports.bBackground3 = + exports.bBackground2 = + exports.aForeground3 = + exports.aForeground2 = + exports.aBackground3 = + exports.aBackground2 = + void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// https://jonasjacek.github.io/colors/ + +const aForeground2 = 90; +exports.aForeground2 = aForeground2; +const aBackground2 = 225; +exports.aBackground2 = aBackground2; +const bForeground2 = 23; +exports.bForeground2 = bForeground2; +const bBackground2 = 195; +exports.bBackground2 = bBackground2; +const aForeground3 = [0x80, 0, 0x80]; +exports.aForeground3 = aForeground3; +const aBackground3 = [0xff, 0xd7, 0xff]; +exports.aBackground3 = aBackground3; +const bForeground3 = [0, 0x5f, 0x5f]; +exports.bForeground3 = bForeground3; +const bBackground3 = [0xd7, 0xff, 0xff]; +exports.bBackground3 = bBackground3; diff --git a/node_modules/jest-snapshot/build/dedentLines.js b/node_modules/jest-snapshot/build/dedentLines.js new file mode 100644 index 00000000..81854381 --- /dev/null +++ b/node_modules/jest-snapshot/build/dedentLines.js @@ -0,0 +1,132 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.dedentLines = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const getIndentationLength = line => { + const result = /^( {2})+/.exec(line); + return result === null ? 0 : result[0].length; +}; +const dedentLine = line => line.slice(getIndentationLength(line)); + +// Return true if: +// "key": "value has multiple lines\n… +// "key has multiple lines\n… +const hasUnmatchedDoubleQuoteMarks = string => { + let n = 0; + let i = string.indexOf('"', 0); + while (i !== -1) { + if (i === 0 || string[i - 1] !== '\\') { + n += 1; + } + i = string.indexOf('"', i + 1); + } + return n % 2 !== 0; +}; +const isFirstLineOfTag = line => /^( {2})* { + let line = input[output.length]; + output.push(dedentLine(line)); + if (line.includes('>')) { + return true; + } + while (output.length < input.length) { + line = input[output.length]; + if (hasUnmatchedDoubleQuoteMarks(line)) { + return false; // because props include a multiline string + } else if (isFirstLineOfTag(line)) { + // Recursion only if props have markup. + if (!dedentMarkup(input, output)) { + return false; + } + } else { + output.push(dedentLine(line)); + if (line.includes('>')) { + return true; + } + } + } + return false; +}; + +// Push dedented lines of markup onto output and return true; +// otherwise return false because: +// * props include a multiline string +// * text has more than one adjacent line +// * markup does not close +const dedentMarkup = (input, output) => { + let line = input[output.length]; + if (!dedentStartTag(input, output)) { + return false; + } + if (input[output.length - 1].includes('/>')) { + return true; + } + let isText = false; + const stack = []; + stack.push(getIndentationLength(line)); + while (stack.length > 0 && output.length < input.length) { + line = input[output.length]; + if (isFirstLineOfTag(line)) { + if (line.includes('')) { + stack.push(getIndentationLength(line)); + } + } + isText = false; + } else { + if (isText) { + return false; // because text has more than one adjacent line + } + + const indentationLengthOfTag = stack[stack.length - 1]; + output.push(line.slice(indentationLengthOfTag + 2)); + isText = true; + } + } + return stack.length === 0; +}; + +// Return lines unindented by heuristic; +// otherwise return null because: +// * props include a multiline string +// * text has more than one adjacent line +// * markup does not close +const dedentLines = input => { + const output = []; + while (output.length < input.length) { + const line = input[output.length]; + if (hasUnmatchedDoubleQuoteMarks(line)) { + return null; + } else if (isFirstLineOfTag(line)) { + if (!dedentMarkup(input, output)) { + return null; + } + } else { + output.push(dedentLine(line)); + } + } + return output; +}; +exports.dedentLines = dedentLines; diff --git a/node_modules/jest-snapshot/build/index.d.ts b/node_modules/jest-snapshot/build/index.d.ts new file mode 100644 index 00000000..6a5cbcd5 --- /dev/null +++ b/node_modules/jest-snapshot/build/index.d.ts @@ -0,0 +1,186 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import type {Config} from '@jest/types'; +import type {MatcherContext} from 'expect'; +import type {MatcherFunctionWithContext} from 'expect'; +import {Plugin as Plugin_2} from 'pretty-format'; +import {Plugins} from 'pretty-format'; +import type {PrettyFormatOptions} from 'pretty-format'; + +export declare const addSerializer: (plugin: Plugin_2) => void; + +export declare const buildSnapshotResolver: ( + config: Config.ProjectConfig, + localRequire?: Promise | LocalRequire, +) => Promise; + +export declare const cleanup: ( + fileSystem: FileSystem_2, + update: Config.SnapshotUpdateState, + snapshotResolver: SnapshotResolver, + testPathIgnorePatterns?: Config.ProjectConfig['testPathIgnorePatterns'], +) => { + filesRemoved: number; + filesRemovedList: Array; +}; + +export declare interface Context extends MatcherContext { + snapshotState: SnapshotState; +} + +export declare const EXTENSION = 'snap'; + +declare interface FileSystem_2 { + exists(path: string): boolean; + matchFiles(pattern: RegExp | string): Array; +} + +export declare const getSerializers: () => Plugins; + +export declare const isSnapshotPath: (path: string) => boolean; + +declare type LocalRequire = (module: string) => unknown; + +declare type SaveStatus = { + deleted: boolean; + saved: boolean; +}; + +declare type SnapshotFormat = Omit; + +export declare interface SnapshotMatchers, T> { + /** + * This ensures that a value matches the most recent snapshot with property matchers. + * Check out [the Snapshot Testing guide](https://jestjs.io/docs/snapshot-testing) for more information. + */ + toMatchSnapshot(hint?: string): R; + /** + * This ensures that a value matches the most recent snapshot. + * Check out [the Snapshot Testing guide](https://jestjs.io/docs/snapshot-testing) for more information. + */ + toMatchSnapshot>( + propertyMatchers: Partial, + hint?: string, + ): R; + /** + * This ensures that a value matches the most recent snapshot with property matchers. + * Instead of writing the snapshot value to a .snap file, it will be written into the source code automatically. + * Check out [the Snapshot Testing guide](https://jestjs.io/docs/snapshot-testing) for more information. + */ + toMatchInlineSnapshot(snapshot?: string): R; + /** + * This ensures that a value matches the most recent snapshot with property matchers. + * Instead of writing the snapshot value to a .snap file, it will be written into the source code automatically. + * Check out [the Snapshot Testing guide](https://jestjs.io/docs/snapshot-testing) for more information. + */ + toMatchInlineSnapshot>( + propertyMatchers: Partial, + snapshot?: string, + ): R; + /** + * Used to test that a function throws a error matching the most recent snapshot when it is called. + */ + toThrowErrorMatchingSnapshot(hint?: string): R; + /** + * Used to test that a function throws a error matching the most recent snapshot when it is called. + * Instead of writing the snapshot value to a .snap file, it will be written into the source code automatically. + */ + toThrowErrorMatchingInlineSnapshot(snapshot?: string): R; +} + +declare type SnapshotMatchOptions = { + readonly testName: string; + readonly received: unknown; + readonly key?: string; + readonly inlineSnapshot?: string; + readonly isInline: boolean; + readonly error?: Error; +}; + +export declare type SnapshotResolver = { + /** Resolves from `testPath` to snapshot path. */ + resolveSnapshotPath(testPath: string, snapshotExtension?: string): string; + /** Resolves from `snapshotPath` to test path. */ + resolveTestPath(snapshotPath: string, snapshotExtension?: string): string; + /** Example test path, used for preflight consistency check of the implementation above. */ + testPathForConsistencyCheck: string; +}; + +declare type SnapshotReturnOptions = { + readonly actual: string; + readonly count: number; + readonly expected?: string; + readonly key: string; + readonly pass: boolean; +}; + +export declare class SnapshotState { + private _counters; + private _dirty; + private _index; + private readonly _updateSnapshot; + private _snapshotData; + private readonly _initialData; + private readonly _snapshotPath; + private _inlineSnapshots; + private readonly _uncheckedKeys; + private readonly _prettierPath; + private readonly _rootDir; + readonly snapshotFormat: SnapshotFormat; + added: number; + expand: boolean; + matched: number; + unmatched: number; + updated: number; + constructor(snapshotPath: string, options: SnapshotStateOptions); + markSnapshotsAsCheckedForTest(testName: string): void; + private _addSnapshot; + clear(): void; + save(): SaveStatus; + getUncheckedCount(): number; + getUncheckedKeys(): Array; + removeUncheckedKeys(): void; + match({ + testName, + received, + key, + inlineSnapshot, + isInline, + error, + }: SnapshotMatchOptions): SnapshotReturnOptions; + fail(testName: string, _received: unknown, key?: string): string; +} + +declare type SnapshotStateOptions = { + readonly updateSnapshot: Config.SnapshotUpdateState; + readonly prettierPath?: string | null; + readonly expand?: boolean; + readonly snapshotFormat: SnapshotFormat; + readonly rootDir: string; +}; + +export declare const toMatchInlineSnapshot: MatcherFunctionWithContext< + Context, + [propertiesOrSnapshot?: object | string, inlineSnapshot?: string] +>; + +export declare const toMatchSnapshot: MatcherFunctionWithContext< + Context, + [propertiesOrHint?: object | string, hint?: string] +>; + +export declare const toThrowErrorMatchingInlineSnapshot: MatcherFunctionWithContext< + Context, + [inlineSnapshot?: string, fromPromise?: boolean] +>; + +export declare const toThrowErrorMatchingSnapshot: MatcherFunctionWithContext< + Context, + [hint?: string, fromPromise?: boolean] +>; + +export {}; diff --git a/node_modules/jest-snapshot/build/index.js b/node_modules/jest-snapshot/build/index.js new file mode 100644 index 00000000..df9f897b --- /dev/null +++ b/node_modules/jest-snapshot/build/index.js @@ -0,0 +1,591 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +Object.defineProperty(exports, 'EXTENSION', { + enumerable: true, + get: function () { + return _SnapshotResolver.EXTENSION; + } +}); +Object.defineProperty(exports, 'SnapshotState', { + enumerable: true, + get: function () { + return _State.default; + } +}); +Object.defineProperty(exports, 'addSerializer', { + enumerable: true, + get: function () { + return _plugins.addSerializer; + } +}); +Object.defineProperty(exports, 'buildSnapshotResolver', { + enumerable: true, + get: function () { + return _SnapshotResolver.buildSnapshotResolver; + } +}); +exports.cleanup = void 0; +Object.defineProperty(exports, 'getSerializers', { + enumerable: true, + get: function () { + return _plugins.getSerializers; + } +}); +Object.defineProperty(exports, 'isSnapshotPath', { + enumerable: true, + get: function () { + return _SnapshotResolver.isSnapshotPath; + } +}); +exports.toThrowErrorMatchingSnapshot = + exports.toThrowErrorMatchingInlineSnapshot = + exports.toMatchSnapshot = + exports.toMatchInlineSnapshot = + void 0; +var fs = _interopRequireWildcard(require('graceful-fs')); +var _jestMatcherUtils = require('jest-matcher-utils'); +var _SnapshotResolver = require('./SnapshotResolver'); +var _printSnapshot = require('./printSnapshot'); +var _utils = require('./utils'); +var _plugins = require('./plugins'); +var _State = _interopRequireDefault(require('./State')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +var jestExistsFile = + globalThis[Symbol.for('jest-native-exists-file')] || fs.existsSync; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +const DID_NOT_THROW = 'Received function did not throw'; // same as toThrow +const NOT_SNAPSHOT_MATCHERS = `Snapshot matchers cannot be used with ${(0, +_jestMatcherUtils.BOLD_WEIGHT)('not')}`; +const INDENTATION_REGEX = /^([^\S\n]*)\S/m; + +// Display name in report when matcher fails same as in snapshot file, +// but with optional hint argument in bold weight. +const printSnapshotName = (concatenatedBlockNames = '', hint = '', count) => { + const hasNames = concatenatedBlockNames.length !== 0; + const hasHint = hint.length !== 0; + return `Snapshot name: \`${ + hasNames ? (0, _utils.escapeBacktickString)(concatenatedBlockNames) : '' + }${hasNames && hasHint ? ': ' : ''}${ + hasHint + ? (0, _jestMatcherUtils.BOLD_WEIGHT)( + (0, _utils.escapeBacktickString)(hint) + ) + : '' + } ${count}\``; +}; +function stripAddedIndentation(inlineSnapshot) { + // Find indentation if exists. + const match = inlineSnapshot.match(INDENTATION_REGEX); + if (!match || !match[1]) { + // No indentation. + return inlineSnapshot; + } + const indentation = match[1]; + const lines = inlineSnapshot.split('\n'); + if (lines.length <= 2) { + // Must be at least 3 lines. + return inlineSnapshot; + } + if (lines[0].trim() !== '' || lines[lines.length - 1].trim() !== '') { + // If not blank first and last lines, abort. + return inlineSnapshot; + } + for (let i = 1; i < lines.length - 1; i++) { + if (lines[i] !== '') { + if (lines[i].indexOf(indentation) !== 0) { + // All lines except first and last should either be blank or have the same + // indent as the first line (or more). If this isn't the case we don't + // want to touch the snapshot at all. + return inlineSnapshot; + } + lines[i] = lines[i].substring(indentation.length); + } + } + + // Last line is a special case because it won't have the same indent as others + // but may still have been given some indent to line up. + lines[lines.length - 1] = ''; + + // Return inline snapshot, now at indent 0. + inlineSnapshot = lines.join('\n'); + return inlineSnapshot; +} +const fileExists = (filePath, fileSystem) => + fileSystem.exists(filePath) || jestExistsFile(filePath); +const cleanup = ( + fileSystem, + update, + snapshotResolver, + testPathIgnorePatterns +) => { + const pattern = `\\.${_SnapshotResolver.EXTENSION}$`; + const files = fileSystem.matchFiles(pattern); + let testIgnorePatternsRegex = null; + if (testPathIgnorePatterns && testPathIgnorePatterns.length > 0) { + testIgnorePatternsRegex = new RegExp(testPathIgnorePatterns.join('|')); + } + const list = files.filter(snapshotFile => { + const testPath = snapshotResolver.resolveTestPath(snapshotFile); + + // ignore snapshots of ignored tests + if (testIgnorePatternsRegex && testIgnorePatternsRegex.test(testPath)) { + return false; + } + if (!fileExists(testPath, fileSystem)) { + if (update === 'all') { + fs.unlinkSync(snapshotFile); + } + return true; + } + return false; + }); + return { + filesRemoved: list.length, + filesRemovedList: list + }; +}; +exports.cleanup = cleanup; +const toMatchSnapshot = function (received, propertiesOrHint, hint) { + const matcherName = 'toMatchSnapshot'; + let properties; + const length = arguments.length; + if (length === 2 && typeof propertiesOrHint === 'string') { + hint = propertiesOrHint; + } else if (length >= 2) { + if (typeof propertiesOrHint !== 'object' || propertiesOrHint === null) { + const options = { + isNot: this.isNot, + promise: this.promise + }; + let printedWithType = (0, _jestMatcherUtils.printWithType)( + 'Expected properties', + propertiesOrHint, + _printSnapshot.printExpected + ); + if (length === 3) { + options.secondArgument = 'hint'; + options.secondArgumentColor = _jestMatcherUtils.BOLD_WEIGHT; + if (propertiesOrHint == null) { + printedWithType += + "\n\nTo provide a hint without properties: toMatchSnapshot('hint')"; + } + } + throw new Error( + (0, _jestMatcherUtils.matcherErrorMessage)( + (0, _jestMatcherUtils.matcherHint)( + matcherName, + undefined, + _printSnapshot.PROPERTIES_ARG, + options + ), + `Expected ${(0, _jestMatcherUtils.EXPECTED_COLOR)( + 'properties' + )} must be an object`, + printedWithType + ) + ); + } + + // Future breaking change: Snapshot hint must be a string + // if (arguments.length === 3 && typeof hint !== 'string') {} + + properties = propertiesOrHint; + } + return _toMatchSnapshot({ + context: this, + hint, + isInline: false, + matcherName, + properties, + received + }); +}; +exports.toMatchSnapshot = toMatchSnapshot; +const toMatchInlineSnapshot = function ( + received, + propertiesOrSnapshot, + inlineSnapshot +) { + const matcherName = 'toMatchInlineSnapshot'; + let properties; + const length = arguments.length; + if (length === 2 && typeof propertiesOrSnapshot === 'string') { + inlineSnapshot = propertiesOrSnapshot; + } else if (length >= 2) { + const options = { + isNot: this.isNot, + promise: this.promise + }; + if (length === 3) { + options.secondArgument = _printSnapshot.SNAPSHOT_ARG; + options.secondArgumentColor = _printSnapshot.noColor; + } + if ( + typeof propertiesOrSnapshot !== 'object' || + propertiesOrSnapshot === null + ) { + throw new Error( + (0, _jestMatcherUtils.matcherErrorMessage)( + (0, _jestMatcherUtils.matcherHint)( + matcherName, + undefined, + _printSnapshot.PROPERTIES_ARG, + options + ), + `Expected ${(0, _jestMatcherUtils.EXPECTED_COLOR)( + 'properties' + )} must be an object`, + (0, _jestMatcherUtils.printWithType)( + 'Expected properties', + propertiesOrSnapshot, + _printSnapshot.printExpected + ) + ) + ); + } + if (length === 3 && typeof inlineSnapshot !== 'string') { + throw new Error( + (0, _jestMatcherUtils.matcherErrorMessage)( + (0, _jestMatcherUtils.matcherHint)( + matcherName, + undefined, + _printSnapshot.PROPERTIES_ARG, + options + ), + 'Inline snapshot must be a string', + (0, _jestMatcherUtils.printWithType)( + 'Inline snapshot', + inlineSnapshot, + _utils.serialize + ) + ) + ); + } + properties = propertiesOrSnapshot; + } + return _toMatchSnapshot({ + context: this, + inlineSnapshot: + inlineSnapshot !== undefined + ? stripAddedIndentation(inlineSnapshot) + : undefined, + isInline: true, + matcherName, + properties, + received + }); +}; +exports.toMatchInlineSnapshot = toMatchInlineSnapshot; +const _toMatchSnapshot = config => { + const {context, hint, inlineSnapshot, isInline, matcherName, properties} = + config; + let {received} = config; + context.dontThrow && context.dontThrow(); + const {currentConcurrentTestName, isNot, snapshotState} = context; + const currentTestName = + currentConcurrentTestName?.() ?? context.currentTestName; + if (isNot) { + throw new Error( + (0, _jestMatcherUtils.matcherErrorMessage)( + (0, _printSnapshot.matcherHintFromConfig)(config, false), + NOT_SNAPSHOT_MATCHERS + ) + ); + } + if (snapshotState == null) { + // Because the state is the problem, this is not a matcher error. + // Call generic stringify from jest-matcher-utils package + // because uninitialized snapshot state does not need snapshot serializers. + throw new Error( + `${(0, _printSnapshot.matcherHintFromConfig)(config, false)}\n\n` + + 'Snapshot state must be initialized' + + `\n\n${(0, _jestMatcherUtils.printWithType)( + 'Snapshot state', + snapshotState, + _jestMatcherUtils.stringify + )}` + ); + } + const fullTestName = + currentTestName && hint + ? `${currentTestName}: ${hint}` + : currentTestName || ''; // future BREAKING change: || hint + + if (typeof properties === 'object') { + if (typeof received !== 'object' || received === null) { + throw new Error( + (0, _jestMatcherUtils.matcherErrorMessage)( + (0, _printSnapshot.matcherHintFromConfig)(config, false), + `${(0, _jestMatcherUtils.RECEIVED_COLOR)( + 'received' + )} value must be an object when the matcher has ${(0, + _jestMatcherUtils.EXPECTED_COLOR)('properties')}`, + (0, _jestMatcherUtils.printWithType)( + 'Received', + received, + _printSnapshot.printReceived + ) + ) + ); + } + const propertyPass = context.equals(received, properties, [ + context.utils.iterableEquality, + context.utils.subsetEquality + ]); + if (!propertyPass) { + const key = snapshotState.fail(fullTestName, received); + const matched = /(\d+)$/.exec(key); + const count = matched === null ? 1 : Number(matched[1]); + const message = () => + `${(0, _printSnapshot.matcherHintFromConfig)( + config, + false + )}\n\n${printSnapshotName(currentTestName, hint, count)}\n\n${(0, + _printSnapshot.printPropertiesAndReceived)( + properties, + received, + snapshotState.expand + )}`; + return { + message, + name: matcherName, + pass: false + }; + } else { + received = (0, _utils.deepMerge)(received, properties); + } + } + const result = snapshotState.match({ + error: context.error, + inlineSnapshot, + isInline, + received, + testName: fullTestName + }); + const {actual, count, expected, pass} = result; + if (pass) { + return { + message: () => '', + pass: true + }; + } + const message = + expected === undefined + ? () => + `${(0, _printSnapshot.matcherHintFromConfig)( + config, + true + )}\n\n${printSnapshotName(currentTestName, hint, count)}\n\n` + + `New snapshot was ${(0, _jestMatcherUtils.BOLD_WEIGHT)( + 'not written' + )}. The update flag ` + + 'must be explicitly passed to write a new snapshot.\n\n' + + 'This is likely because this test is run in a continuous integration ' + + '(CI) environment in which snapshots are not written by default.\n\n' + + `Received:${actual.includes('\n') ? '\n' : ' '}${(0, + _printSnapshot.bReceivedColor)(actual)}` + : () => + `${(0, _printSnapshot.matcherHintFromConfig)( + config, + true + )}\n\n${printSnapshotName(currentTestName, hint, count)}\n\n${(0, + _printSnapshot.printSnapshotAndReceived)( + expected, + actual, + received, + snapshotState.expand, + snapshotState.snapshotFormat + )}`; + + // Passing the actual and expected objects so that a custom reporter + // could access them, for example in order to display a custom visual diff, + // or create a different error message + return { + actual, + expected, + message, + name: matcherName, + pass: false + }; +}; +const toThrowErrorMatchingSnapshot = function (received, hint, fromPromise) { + const matcherName = 'toThrowErrorMatchingSnapshot'; + + // Future breaking change: Snapshot hint must be a string + // if (hint !== undefined && typeof hint !== string) {} + + return _toThrowErrorMatchingSnapshot( + { + context: this, + hint, + isInline: false, + matcherName, + received + }, + fromPromise + ); +}; +exports.toThrowErrorMatchingSnapshot = toThrowErrorMatchingSnapshot; +const toThrowErrorMatchingInlineSnapshot = function ( + received, + inlineSnapshot, + fromPromise +) { + const matcherName = 'toThrowErrorMatchingInlineSnapshot'; + if (inlineSnapshot !== undefined && typeof inlineSnapshot !== 'string') { + const options = { + expectedColor: _printSnapshot.noColor, + isNot: this.isNot, + promise: this.promise + }; + throw new Error( + (0, _jestMatcherUtils.matcherErrorMessage)( + (0, _jestMatcherUtils.matcherHint)( + matcherName, + undefined, + _printSnapshot.SNAPSHOT_ARG, + options + ), + 'Inline snapshot must be a string', + (0, _jestMatcherUtils.printWithType)( + 'Inline snapshot', + inlineSnapshot, + _utils.serialize + ) + ) + ); + } + return _toThrowErrorMatchingSnapshot( + { + context: this, + inlineSnapshot: + inlineSnapshot !== undefined + ? stripAddedIndentation(inlineSnapshot) + : undefined, + isInline: true, + matcherName, + received + }, + fromPromise + ); +}; +exports.toThrowErrorMatchingInlineSnapshot = toThrowErrorMatchingInlineSnapshot; +const _toThrowErrorMatchingSnapshot = (config, fromPromise) => { + const {context, hint, inlineSnapshot, isInline, matcherName, received} = + config; + context.dontThrow && context.dontThrow(); + const {isNot, promise} = context; + if (!fromPromise) { + if (typeof received !== 'function') { + const options = { + isNot, + promise + }; + throw new Error( + (0, _jestMatcherUtils.matcherErrorMessage)( + (0, _jestMatcherUtils.matcherHint)( + matcherName, + undefined, + '', + options + ), + `${(0, _jestMatcherUtils.RECEIVED_COLOR)( + 'received' + )} value must be a function`, + (0, _jestMatcherUtils.printWithType)( + 'Received', + received, + _printSnapshot.printReceived + ) + ) + ); + } + } + if (isNot) { + throw new Error( + (0, _jestMatcherUtils.matcherErrorMessage)( + (0, _printSnapshot.matcherHintFromConfig)(config, false), + NOT_SNAPSHOT_MATCHERS + ) + ); + } + let error; + if (fromPromise) { + error = received; + } else { + try { + received(); + } catch (e) { + error = e; + } + } + if (error === undefined) { + // Because the received value is a function, this is not a matcher error. + throw new Error( + `${(0, _printSnapshot.matcherHintFromConfig)( + config, + false + )}\n\n${DID_NOT_THROW}` + ); + } + return _toMatchSnapshot({ + context, + hint, + inlineSnapshot, + isInline, + matcherName, + received: error.message + }); +}; diff --git a/node_modules/jest-snapshot/build/mockSerializer.js b/node_modules/jest-snapshot/build/mockSerializer.js new file mode 100644 index 00000000..dd10f778 --- /dev/null +++ b/node_modules/jest-snapshot/build/mockSerializer.js @@ -0,0 +1,47 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.test = exports.serialize = exports.default = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const serialize = (val, config, indentation, depth, refs, printer) => { + // Serialize a non-default name, even if config.printFunctionName is false. + const name = val.getMockName(); + const nameString = name === 'jest.fn()' ? '' : ` ${name}`; + let callsString = ''; + if (val.mock.calls.length !== 0) { + const indentationNext = indentation + config.indent; + callsString = ` {${config.spacingOuter}${indentationNext}"calls": ${printer( + val.mock.calls, + config, + indentationNext, + depth, + refs + )}${config.min ? ', ' : ','}${ + config.spacingOuter + }${indentationNext}"results": ${printer( + val.mock.results, + config, + indentationNext, + depth, + refs + )}${config.min ? '' : ','}${config.spacingOuter}${indentation}}`; + } + return `[MockFunction${nameString}]${callsString}`; +}; +exports.serialize = serialize; +const test = val => val && !!val._isMockFunction; +exports.test = test; +const plugin = { + serialize, + test +}; +var _default = plugin; +exports.default = _default; diff --git a/node_modules/jest-snapshot/build/plugins.js b/node_modules/jest-snapshot/build/plugins.js new file mode 100644 index 00000000..3d4484d1 --- /dev/null +++ b/node_modules/jest-snapshot/build/plugins.js @@ -0,0 +1,43 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.getSerializers = exports.addSerializer = void 0; +var _prettyFormat = require('pretty-format'); +var _mockSerializer = _interopRequireDefault(require('./mockSerializer')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const { + DOMCollection, + DOMElement, + Immutable, + ReactElement, + ReactTestComponent, + AsymmetricMatcher +} = _prettyFormat.plugins; +let PLUGINS = [ + ReactTestComponent, + ReactElement, + DOMElement, + DOMCollection, + Immutable, + _mockSerializer.default, + AsymmetricMatcher +]; + +// Prepend to list so the last added is the first tested. +const addSerializer = plugin => { + PLUGINS = [plugin].concat(PLUGINS); +}; +exports.addSerializer = addSerializer; +const getSerializers = () => PLUGINS; +exports.getSerializers = getSerializers; diff --git a/node_modules/jest-snapshot/build/printSnapshot.js b/node_modules/jest-snapshot/build/printSnapshot.js new file mode 100644 index 00000000..13f28f42 --- /dev/null +++ b/node_modules/jest-snapshot/build/printSnapshot.js @@ -0,0 +1,340 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.printSnapshotAndReceived = + exports.printReceived = + exports.printPropertiesAndReceived = + exports.printExpected = + exports.noColor = + exports.matcherHintFromConfig = + exports.getSnapshotColorForChalkInstance = + exports.getReceivedColorForChalkInstance = + exports.bReceivedColor = + exports.aSnapshotColor = + exports.SNAPSHOT_ARG = + exports.PROPERTIES_ARG = + exports.HINT_ARG = + void 0; +var _chalk = _interopRequireDefault(require('chalk')); +var _expectUtils = require('@jest/expect-utils'); +var _jestDiff = require('jest-diff'); +var _jestGetType = require('jest-get-type'); +var _jestMatcherUtils = require('jest-matcher-utils'); +var _prettyFormat = require('pretty-format'); +var _colors = require('./colors'); +var _dedentLines = require('./dedentLines'); +var _utils = require('./utils'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const getSnapshotColorForChalkInstance = chalkInstance => { + const level = chalkInstance.level; + if (level === 3) { + return chalkInstance + .rgb( + _colors.aForeground3[0], + _colors.aForeground3[1], + _colors.aForeground3[2] + ) + .bgRgb( + _colors.aBackground3[0], + _colors.aBackground3[1], + _colors.aBackground3[2] + ); + } + if (level === 2) { + return chalkInstance + .ansi256(_colors.aForeground2) + .bgAnsi256(_colors.aBackground2); + } + return chalkInstance.magenta.bgYellowBright; +}; +exports.getSnapshotColorForChalkInstance = getSnapshotColorForChalkInstance; +const getReceivedColorForChalkInstance = chalkInstance => { + const level = chalkInstance.level; + if (level === 3) { + return chalkInstance + .rgb( + _colors.bForeground3[0], + _colors.bForeground3[1], + _colors.bForeground3[2] + ) + .bgRgb( + _colors.bBackground3[0], + _colors.bBackground3[1], + _colors.bBackground3[2] + ); + } + if (level === 2) { + return chalkInstance + .ansi256(_colors.bForeground2) + .bgAnsi256(_colors.bBackground2); + } + return chalkInstance.cyan.bgWhiteBright; // also known as teal +}; +exports.getReceivedColorForChalkInstance = getReceivedColorForChalkInstance; +const aSnapshotColor = getSnapshotColorForChalkInstance(_chalk.default); +exports.aSnapshotColor = aSnapshotColor; +const bReceivedColor = getReceivedColorForChalkInstance(_chalk.default); +exports.bReceivedColor = bReceivedColor; +const noColor = string => string; +exports.noColor = noColor; +const HINT_ARG = 'hint'; +exports.HINT_ARG = HINT_ARG; +const SNAPSHOT_ARG = 'snapshot'; +exports.SNAPSHOT_ARG = SNAPSHOT_ARG; +const PROPERTIES_ARG = 'properties'; +exports.PROPERTIES_ARG = PROPERTIES_ARG; +const matcherHintFromConfig = ( + {context: {isNot, promise}, hint, inlineSnapshot, matcherName, properties}, + isUpdatable +) => { + const options = { + isNot, + promise + }; + if (isUpdatable) { + options.receivedColor = bReceivedColor; + } + let expectedArgument = ''; + if (typeof properties === 'object') { + expectedArgument = PROPERTIES_ARG; + if (isUpdatable) { + options.expectedColor = noColor; + } + if (typeof hint === 'string' && hint.length !== 0) { + options.secondArgument = HINT_ARG; + options.secondArgumentColor = _jestMatcherUtils.BOLD_WEIGHT; + } else if (typeof inlineSnapshot === 'string') { + options.secondArgument = SNAPSHOT_ARG; + if (isUpdatable) { + options.secondArgumentColor = aSnapshotColor; + } else { + options.secondArgumentColor = noColor; + } + } + } else { + if (typeof hint === 'string' && hint.length !== 0) { + expectedArgument = HINT_ARG; + options.expectedColor = _jestMatcherUtils.BOLD_WEIGHT; + } else if (typeof inlineSnapshot === 'string') { + expectedArgument = SNAPSHOT_ARG; + if (isUpdatable) { + options.expectedColor = aSnapshotColor; + } + } + } + return (0, _jestMatcherUtils.matcherHint)( + matcherName, + undefined, + expectedArgument, + options + ); +}; + +// Given array of diffs, return string: +// * include common substrings +// * exclude change substrings which have opposite op +// * include change substrings which have argument op +// with change color only if there is a common substring +exports.matcherHintFromConfig = matcherHintFromConfig; +const joinDiffs = (diffs, op, hasCommon) => + diffs.reduce( + (reduced, diff) => + reduced + + (diff[0] === _jestDiff.DIFF_EQUAL + ? diff[1] + : diff[0] !== op + ? '' + : hasCommon + ? (0, _jestMatcherUtils.INVERTED_COLOR)(diff[1]) + : diff[1]), + '' + ); +const isLineDiffable = received => { + const receivedType = (0, _jestGetType.getType)(received); + if ((0, _jestGetType.isPrimitive)(received)) { + return typeof received === 'string'; + } + if ( + receivedType === 'date' || + receivedType === 'function' || + receivedType === 'regexp' + ) { + return false; + } + if (received instanceof Error) { + return false; + } + if ( + receivedType === 'object' && + typeof received.asymmetricMatch === 'function' + ) { + return false; + } + return true; +}; +const printExpected = val => + (0, _jestMatcherUtils.EXPECTED_COLOR)((0, _utils.minify)(val)); +exports.printExpected = printExpected; +const printReceived = val => + (0, _jestMatcherUtils.RECEIVED_COLOR)((0, _utils.minify)(val)); +exports.printReceived = printReceived; +const printPropertiesAndReceived = ( + properties, + received, + expand // CLI options: true if `--expand` or false if `--no-expand` +) => { + const aAnnotation = 'Expected properties'; + const bAnnotation = 'Received value'; + if (isLineDiffable(properties) && isLineDiffable(received)) { + const {replacedExpected, replacedReceived} = (0, + _jestMatcherUtils.replaceMatchedToAsymmetricMatcher)( + properties, + received, + [], + [] + ); + return (0, _jestDiff.diffLinesUnified)( + (0, _utils.serialize)(replacedExpected).split('\n'), + (0, _utils.serialize)( + (0, _expectUtils.getObjectSubset)(replacedReceived, replacedExpected) + ).split('\n'), + { + aAnnotation, + aColor: _jestMatcherUtils.EXPECTED_COLOR, + bAnnotation, + bColor: _jestMatcherUtils.RECEIVED_COLOR, + changeLineTrailingSpaceColor: _chalk.default.bgYellow, + commonLineTrailingSpaceColor: _chalk.default.bgYellow, + emptyFirstOrLastLinePlaceholder: '↵', + // U+21B5 + expand, + includeChangeCounts: true + } + ); + } + const printLabel = (0, _jestMatcherUtils.getLabelPrinter)( + aAnnotation, + bAnnotation + ); + return `${printLabel(aAnnotation) + printExpected(properties)}\n${printLabel( + bAnnotation + )}${printReceived(received)}`; +}; +exports.printPropertiesAndReceived = printPropertiesAndReceived; +const MAX_DIFF_STRING_LENGTH = 20000; +const printSnapshotAndReceived = (a, b, received, expand, snapshotFormat) => { + const aAnnotation = 'Snapshot'; + const bAnnotation = 'Received'; + const aColor = aSnapshotColor; + const bColor = bReceivedColor; + const options = { + aAnnotation, + aColor, + bAnnotation, + bColor, + changeLineTrailingSpaceColor: noColor, + commonLineTrailingSpaceColor: _chalk.default.bgYellow, + emptyFirstOrLastLinePlaceholder: '↵', + // U+21B5 + expand, + includeChangeCounts: true + }; + if (typeof received === 'string') { + if ( + a.length >= 2 && + a.startsWith('"') && + a.endsWith('"') && + b === (0, _prettyFormat.format)(received) + ) { + // If snapshot looks like default serialization of a string + // and received is string which has default serialization. + + if (!a.includes('\n') && !b.includes('\n')) { + // If neither string is multiline, + // display as labels and quoted strings. + let aQuoted = a; + let bQuoted = b; + if ( + a.length - 2 <= MAX_DIFF_STRING_LENGTH && + b.length - 2 <= MAX_DIFF_STRING_LENGTH + ) { + const diffs = (0, _jestDiff.diffStringsRaw)( + a.slice(1, -1), + b.slice(1, -1), + true + ); + const hasCommon = diffs.some( + diff => diff[0] === _jestDiff.DIFF_EQUAL + ); + aQuoted = `"${joinDiffs(diffs, _jestDiff.DIFF_DELETE, hasCommon)}"`; + bQuoted = `"${joinDiffs(diffs, _jestDiff.DIFF_INSERT, hasCommon)}"`; + } + const printLabel = (0, _jestMatcherUtils.getLabelPrinter)( + aAnnotation, + bAnnotation + ); + return `${printLabel(aAnnotation) + aColor(aQuoted)}\n${printLabel( + bAnnotation + )}${bColor(bQuoted)}`; + } + + // Else either string is multiline, so display as unquoted strings. + a = (0, _utils.deserializeString)(a); // hypothetical expected string + b = received; // not serialized + } + // Else expected had custom serialization or was not a string + // or received has custom serialization. + + return a.length <= MAX_DIFF_STRING_LENGTH && + b.length <= MAX_DIFF_STRING_LENGTH + ? (0, _jestDiff.diffStringsUnified)(a, b, options) + : (0, _jestDiff.diffLinesUnified)(a.split('\n'), b.split('\n'), options); + } + if (isLineDiffable(received)) { + const aLines2 = a.split('\n'); + const bLines2 = b.split('\n'); + + // Fall through to fix a regression for custom serializers + // like jest-snapshot-serializer-raw that ignore the indent option. + const b0 = (0, _utils.serialize)(received, 0, snapshotFormat); + if (b0 !== b) { + const aLines0 = (0, _dedentLines.dedentLines)(aLines2); + if (aLines0 !== null) { + // Compare lines without indentation. + const bLines0 = b0.split('\n'); + return (0, _jestDiff.diffLinesUnified2)( + aLines2, + bLines2, + aLines0, + bLines0, + options + ); + } + } + + // Fall back because: + // * props include a multiline string + // * text has more than one adjacent line + // * markup does not close + return (0, _jestDiff.diffLinesUnified)(aLines2, bLines2, options); + } + const printLabel = (0, _jestMatcherUtils.getLabelPrinter)( + aAnnotation, + bAnnotation + ); + return `${printLabel(aAnnotation) + aColor(a)}\n${printLabel( + bAnnotation + )}${bColor(b)}`; +}; +exports.printSnapshotAndReceived = printSnapshotAndReceived; diff --git a/node_modules/jest-snapshot/build/types.js b/node_modules/jest-snapshot/build/types.js new file mode 100644 index 00000000..ad9a93a7 --- /dev/null +++ b/node_modules/jest-snapshot/build/types.js @@ -0,0 +1 @@ +'use strict'; diff --git a/node_modules/jest-snapshot/build/utils.js b/node_modules/jest-snapshot/build/utils.js new file mode 100644 index 00000000..7c494706 --- /dev/null +++ b/node_modules/jest-snapshot/build/utils.js @@ -0,0 +1,320 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.testNameToKey = + exports.serialize = + exports.saveSnapshotFile = + exports.removeLinesBeforeExternalMatcherTrap = + exports.removeExtraLineBreaks = + exports.minify = + exports.keyToTestName = + exports.getSnapshotData = + exports.escapeBacktickString = + exports.ensureDirectoryExists = + exports.deserializeString = + exports.deepMerge = + exports.addExtraLineBreaks = + exports.SNAPSHOT_VERSION_WARNING = + exports.SNAPSHOT_VERSION = + exports.SNAPSHOT_GUIDE_LINK = + void 0; +var path = _interopRequireWildcard(require('path')); +var _chalk = _interopRequireDefault(require('chalk')); +var fs = _interopRequireWildcard(require('graceful-fs')); +var _naturalCompare = _interopRequireDefault(require('natural-compare')); +var _prettyFormat = require('pretty-format'); +var _plugins = require('./plugins'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +var jestWriteFile = + globalThis[Symbol.for('jest-native-write-file')] || fs.writeFileSync; +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +var jestReadFile = + globalThis[Symbol.for('jest-native-read-file')] || fs.readFileSync; +var Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol; +var jestExistsFile = + globalThis[Symbol.for('jest-native-exists-file')] || fs.existsSync; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +const SNAPSHOT_VERSION = '1'; +exports.SNAPSHOT_VERSION = SNAPSHOT_VERSION; +const SNAPSHOT_VERSION_REGEXP = /^\/\/ Jest Snapshot v(.+),/; +const SNAPSHOT_GUIDE_LINK = 'https://goo.gl/fbAQLP'; +exports.SNAPSHOT_GUIDE_LINK = SNAPSHOT_GUIDE_LINK; +const SNAPSHOT_VERSION_WARNING = _chalk.default.yellow( + `${_chalk.default.bold('Warning')}: Before you upgrade snapshots, ` + + 'we recommend that you revert any local changes to tests or other code, ' + + 'to ensure that you do not store invalid state.' +); +exports.SNAPSHOT_VERSION_WARNING = SNAPSHOT_VERSION_WARNING; +const writeSnapshotVersion = () => + `// Jest Snapshot v${SNAPSHOT_VERSION}, ${SNAPSHOT_GUIDE_LINK}`; +const validateSnapshotVersion = snapshotContents => { + const versionTest = SNAPSHOT_VERSION_REGEXP.exec(snapshotContents); + const version = versionTest && versionTest[1]; + if (!version) { + return new Error( + _chalk.default.red( + `${_chalk.default.bold( + 'Outdated snapshot' + )}: No snapshot header found. ` + + 'Jest 19 introduced versioned snapshots to ensure all developers ' + + 'on a project are using the same version of Jest. ' + + 'Please update all snapshots during this upgrade of Jest.\n\n' + ) + SNAPSHOT_VERSION_WARNING + ); + } + if (version < SNAPSHOT_VERSION) { + return new Error( + // eslint-disable-next-line prefer-template + _chalk.default.red( + `${_chalk.default.red.bold( + 'Outdated snapshot' + )}: The version of the snapshot ` + + 'file associated with this test is outdated. The snapshot file ' + + 'version ensures that all developers on a project are using ' + + 'the same version of Jest. ' + + 'Please update all snapshots during this upgrade of Jest.' + ) + + '\n\n' + + `Expected: v${SNAPSHOT_VERSION}\n` + + `Received: v${version}\n\n` + + SNAPSHOT_VERSION_WARNING + ); + } + if (version > SNAPSHOT_VERSION) { + return new Error( + // eslint-disable-next-line prefer-template + _chalk.default.red( + `${_chalk.default.red.bold( + 'Outdated Jest version' + )}: The version of this ` + + 'snapshot file indicates that this project is meant to be used ' + + 'with a newer version of Jest. The snapshot file version ensures ' + + 'that all developers on a project are using the same version of ' + + 'Jest. Please update your version of Jest and re-run the tests.' + ) + + '\n\n' + + `Expected: v${SNAPSHOT_VERSION}\n` + + `Received: v${version}` + ); + } + return null; +}; +function isObject(item) { + return item != null && typeof item === 'object' && !Array.isArray(item); +} +const testNameToKey = (testName, count) => `${testName} ${count}`; +exports.testNameToKey = testNameToKey; +const keyToTestName = key => { + if (!/ \d+$/.test(key)) { + throw new Error('Snapshot keys must end with a number.'); + } + return key.replace(/ \d+$/, ''); +}; +exports.keyToTestName = keyToTestName; +const getSnapshotData = (snapshotPath, update) => { + const data = Object.create(null); + let snapshotContents = ''; + let dirty = false; + if (jestExistsFile(snapshotPath)) { + try { + snapshotContents = jestReadFile(snapshotPath, 'utf8'); + // eslint-disable-next-line no-new-func + const populate = new Function('exports', snapshotContents); + populate(data); + } catch {} + } + const validationResult = validateSnapshotVersion(snapshotContents); + const isInvalid = snapshotContents && validationResult; + if (update === 'none' && isInvalid) { + throw validationResult; + } + if ((update === 'all' || update === 'new') && isInvalid) { + dirty = true; + } + return { + data, + dirty + }; +}; + +// Add extra line breaks at beginning and end of multiline snapshot +// to make the content easier to read. +exports.getSnapshotData = getSnapshotData; +const addExtraLineBreaks = string => + string.includes('\n') ? `\n${string}\n` : string; + +// Remove extra line breaks at beginning and end of multiline snapshot. +// Instead of trim, which can remove additional newlines or spaces +// at beginning or end of the content from a custom serializer. +exports.addExtraLineBreaks = addExtraLineBreaks; +const removeExtraLineBreaks = string => + string.length > 2 && string.startsWith('\n') && string.endsWith('\n') + ? string.slice(1, -1) + : string; +exports.removeExtraLineBreaks = removeExtraLineBreaks; +const removeLinesBeforeExternalMatcherTrap = stack => { + const lines = stack.split('\n'); + for (let i = 0; i < lines.length; i += 1) { + // It's a function name specified in `packages/expect/src/index.ts` + // for external custom matchers. + if (lines[i].includes('__EXTERNAL_MATCHER_TRAP__')) { + return lines.slice(i + 1).join('\n'); + } + } + return stack; +}; +exports.removeLinesBeforeExternalMatcherTrap = + removeLinesBeforeExternalMatcherTrap; +const escapeRegex = true; +const printFunctionName = false; +const serialize = (val, indent = 2, formatOverrides = {}) => + normalizeNewlines( + (0, _prettyFormat.format)(val, { + escapeRegex, + indent, + plugins: (0, _plugins.getSerializers)(), + printFunctionName, + ...formatOverrides + }) + ); +exports.serialize = serialize; +const minify = val => + (0, _prettyFormat.format)(val, { + escapeRegex, + min: true, + plugins: (0, _plugins.getSerializers)(), + printFunctionName + }); + +// Remove double quote marks and unescape double quotes and backslashes. +exports.minify = minify; +const deserializeString = stringified => + stringified.slice(1, -1).replace(/\\("|\\)/g, '$1'); +exports.deserializeString = deserializeString; +const escapeBacktickString = str => str.replace(/`|\\|\${/g, '\\$&'); +exports.escapeBacktickString = escapeBacktickString; +const printBacktickString = str => `\`${escapeBacktickString(str)}\``; +const ensureDirectoryExists = filePath => { + try { + fs.mkdirSync(path.dirname(filePath), { + recursive: true + }); + } catch {} +}; +exports.ensureDirectoryExists = ensureDirectoryExists; +const normalizeNewlines = string => string.replace(/\r\n|\r/g, '\n'); +const saveSnapshotFile = (snapshotData, snapshotPath) => { + const snapshots = Object.keys(snapshotData) + .sort(_naturalCompare.default) + .map( + key => + `exports[${printBacktickString(key)}] = ${printBacktickString( + normalizeNewlines(snapshotData[key]) + )};` + ); + ensureDirectoryExists(snapshotPath); + jestWriteFile( + snapshotPath, + `${writeSnapshotVersion()}\n\n${snapshots.join('\n\n')}\n` + ); +}; +exports.saveSnapshotFile = saveSnapshotFile; +const isAnyOrAnything = input => + '$$typeof' in input && + input.$$typeof === Symbol.for('jest.asymmetricMatcher') && + ['Any', 'Anything'].includes(input.constructor.name); +const deepMergeArray = (target, source) => { + const mergedOutput = Array.from(target); + source.forEach((sourceElement, index) => { + const targetElement = mergedOutput[index]; + if (Array.isArray(target[index]) && Array.isArray(sourceElement)) { + mergedOutput[index] = deepMergeArray(target[index], sourceElement); + } else if (isObject(targetElement) && !isAnyOrAnything(sourceElement)) { + mergedOutput[index] = deepMerge(target[index], sourceElement); + } else { + // Source does not exist in target or target is primitive and cannot be deep merged + mergedOutput[index] = sourceElement; + } + }); + return mergedOutput; +}; + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +const deepMerge = (target, source) => { + if (isObject(target) && isObject(source)) { + const mergedOutput = { + ...target + }; + Object.keys(source).forEach(key => { + if (isObject(source[key]) && !source[key].$$typeof) { + if (!(key in target)) + Object.assign(mergedOutput, { + [key]: source[key] + }); + else mergedOutput[key] = deepMerge(target[key], source[key]); + } else if (Array.isArray(source[key])) { + mergedOutput[key] = deepMergeArray(target[key], source[key]); + } else { + Object.assign(mergedOutput, { + [key]: source[key] + }); + } + }); + return mergedOutput; + } else if (Array.isArray(target) && Array.isArray(source)) { + return deepMergeArray(target, source); + } + return target; +}; +exports.deepMerge = deepMerge; diff --git a/node_modules/jest-snapshot/node_modules/.bin/semver b/node_modules/jest-snapshot/node_modules/.bin/semver new file mode 120000 index 00000000..5aaadf42 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/.bin/semver @@ -0,0 +1 @@ +../semver/bin/semver.js \ No newline at end of file diff --git a/node_modules/jest-snapshot/node_modules/semver/LICENSE b/node_modules/jest-snapshot/node_modules/semver/LICENSE new file mode 100644 index 00000000..19129e31 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/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/jest-snapshot/node_modules/semver/README.md b/node_modules/jest-snapshot/node_modules/semver/README.md new file mode 100644 index 00000000..e9522153 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/README.md @@ -0,0 +1,664 @@ +semver(1) -- The semantic versioner for npm +=========================================== + +## Install + +```bash +npm install semver +```` + +## Usage + +As a node module: + +```js +const semver = require('semver') + +semver.valid('1.2.3') // '1.2.3' +semver.valid('a.b.c') // null +semver.clean(' =v1.2.3 ') // '1.2.3' +semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true +semver.gt('1.2.3', '9.8.7') // false +semver.lt('1.2.3', '9.8.7') // true +semver.minVersion('>=1.0.0') // '1.0.0' +semver.valid(semver.coerce('v2')) // '2.0.0' +semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7' +``` + +You can also just load the module for the function that you care about if +you'd like to minimize your footprint. + +```js +// load the whole API at once in a single object +const semver = require('semver') + +// or just load the bits you need +// all of them listed here, just pick and choose what you want + +// classes +const SemVer = require('semver/classes/semver') +const Comparator = require('semver/classes/comparator') +const Range = require('semver/classes/range') + +// functions for working with versions +const semverParse = require('semver/functions/parse') +const semverValid = require('semver/functions/valid') +const semverClean = require('semver/functions/clean') +const semverInc = require('semver/functions/inc') +const semverDiff = require('semver/functions/diff') +const semverMajor = require('semver/functions/major') +const semverMinor = require('semver/functions/minor') +const semverPatch = require('semver/functions/patch') +const semverPrerelease = require('semver/functions/prerelease') +const semverCompare = require('semver/functions/compare') +const semverRcompare = require('semver/functions/rcompare') +const semverCompareLoose = require('semver/functions/compare-loose') +const semverCompareBuild = require('semver/functions/compare-build') +const semverSort = require('semver/functions/sort') +const semverRsort = require('semver/functions/rsort') + +// low-level comparators between versions +const semverGt = require('semver/functions/gt') +const semverLt = require('semver/functions/lt') +const semverEq = require('semver/functions/eq') +const semverNeq = require('semver/functions/neq') +const semverGte = require('semver/functions/gte') +const semverLte = require('semver/functions/lte') +const semverCmp = require('semver/functions/cmp') +const semverCoerce = require('semver/functions/coerce') + +// working with ranges +const semverSatisfies = require('semver/functions/satisfies') +const semverMaxSatisfying = require('semver/ranges/max-satisfying') +const semverMinSatisfying = require('semver/ranges/min-satisfying') +const semverToComparators = require('semver/ranges/to-comparators') +const semverMinVersion = require('semver/ranges/min-version') +const semverValidRange = require('semver/ranges/valid') +const semverOutside = require('semver/ranges/outside') +const semverGtr = require('semver/ranges/gtr') +const semverLtr = require('semver/ranges/ltr') +const semverIntersects = require('semver/ranges/intersects') +const semverSimplifyRange = require('semver/ranges/simplify') +const semverRangeSubset = require('semver/ranges/subset') +``` + +As a command-line utility: + +``` +$ semver -h + +A JavaScript implementation of the https://semver.org/ specification +Copyright Isaac Z. Schlueter + +Usage: semver [options] [ [...]] +Prints valid versions sorted by SemVer precedence + +Options: +-r --range + Print versions that match the specified range. + +-i --increment [] + Increment a version by the specified level. Level can + be one of: major, minor, patch, premajor, preminor, + prepatch, prerelease, or release. Default level is 'patch'. + Only one version may be specified. + +--preid + Identifier to be used to prefix premajor, preminor, + prepatch or prerelease version increments. + +-l --loose + Interpret versions and ranges loosely + +-n <0|1> + This is the base to be used for the prerelease identifier. + +-p --include-prerelease + Always include prerelease versions in range matching + +-c --coerce + Coerce a string into SemVer if possible + (does not imply --loose) + +--rtl + Coerce version strings right to left + +--ltr + Coerce version strings left to right (default) + +Program exits successfully if any valid version satisfies +all supplied ranges, and prints all satisfying versions. + +If no satisfying versions are found, then exits failure. + +Versions are printed in ascending order, so supplying +multiple versions to the utility will just sort them. +``` + +## Versions + +A "version" is described by the `v2.0.0` specification found at +. + +A leading `"="` or `"v"` character is stripped off and ignored. +Support for stripping a leading "v" is kept for compatibility with `v1.0.0` of the SemVer +specification but should not be used anymore. + +## Ranges + +A `version range` is a set of `comparators` that specify versions +that satisfy the range. + +A `comparator` is composed of an `operator` and a `version`. The set +of primitive `operators` is: + +* `<` Less than +* `<=` Less than or equal to +* `>` Greater than +* `>=` Greater than or equal to +* `=` Equal. If no operator is specified, then equality is assumed, + so this operator is optional but MAY be included. + +For example, the comparator `>=1.2.7` would match the versions +`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6` +or `1.1.0`. The comparator `>1` is equivalent to `>=2.0.0` and +would match the versions `2.0.0` and `3.1.0`, but not the versions +`1.0.1` or `1.1.0`. + +Comparators can be joined by whitespace to form a `comparator set`, +which is satisfied by the **intersection** of all of the comparators +it includes. + +A range is composed of one or more comparator sets, joined by `||`. A +version matches a range if and only if every comparator in at least +one of the `||`-separated comparator sets is satisfied by the version. + +For example, the range `>=1.2.7 <1.3.0` would match the versions +`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`, +or `1.1.0`. + +The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`, +`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`. + +### Prerelease Tags + +If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then +it will only be allowed to satisfy comparator sets if at least one +comparator with the same `[major, minor, patch]` tuple also has a +prerelease tag. + +For example, the range `>1.2.3-alpha.3` would be allowed to match the +version `1.2.3-alpha.7`, but it would *not* be satisfied by +`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater +than" `1.2.3-alpha.3` according to the SemVer sort rules. The version +range only accepts prerelease tags on the `1.2.3` version. +Version `3.4.5` *would* satisfy the range because it does not have a +prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`. + +The purpose of this behavior is twofold. First, prerelease versions +frequently are updated very quickly, and contain many breaking changes +that are (by the author's design) not yet fit for public consumption. +Therefore, by default, they are excluded from range-matching +semantics. + +Second, a user who has opted into using a prerelease version has +indicated the intent to use *that specific* set of +alpha/beta/rc versions. By including a prerelease tag in the range, +the user is indicating that they are aware of the risk. However, it +is still not appropriate to assume that they have opted into taking a +similar risk on the *next* set of prerelease versions. + +Note that this behavior can be suppressed (treating all prerelease +versions as if they were normal versions, for range-matching) +by setting the `includePrerelease` flag on the options +object to any +[functions](https://github.com/npm/node-semver#functions) that do +range matching. + +#### Prerelease Identifiers + +The method `.inc` takes an additional `identifier` string argument that +will append the value of the string as a prerelease identifier: + +```javascript +semver.inc('1.2.3', 'prerelease', 'beta') +// '1.2.4-beta.0' +``` + +command-line example: + +```bash +$ semver 1.2.3 -i prerelease --preid beta +1.2.4-beta.0 +``` + +Which then can be used to increment further: + +```bash +$ semver 1.2.4-beta.0 -i prerelease +1.2.4-beta.1 +``` + +To get out of the prerelease phase, use the `release` option: + +```bash +$ semver 1.2.4-beta.1 -i release +1.2.4 +``` + +#### Prerelease Identifier Base + +The method `.inc` takes an optional parameter 'identifierBase' string +that will let you let your prerelease number as zero-based or one-based. +Set to `false` to omit the prerelease number altogether. +If you do not specify this parameter, it will default to zero-based. + +```javascript +semver.inc('1.2.3', 'prerelease', 'beta', '1') +// '1.2.4-beta.1' +``` + +```javascript +semver.inc('1.2.3', 'prerelease', 'beta', false) +// '1.2.4-beta' +``` + +command-line example: + +```bash +$ semver 1.2.3 -i prerelease --preid beta -n 1 +1.2.4-beta.1 +``` + +```bash +$ semver 1.2.3 -i prerelease --preid beta -n false +1.2.4-beta +``` + +### Advanced Range Syntax + +Advanced range syntax desugars to primitive comparators in +deterministic ways. + +Advanced ranges may be combined in the same way as primitive +comparators using white space or `||`. + +#### Hyphen Ranges `X.Y.Z - A.B.C` + +Specifies an inclusive set. + +* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` + +If a partial version is provided as the first version in the inclusive +range, then the missing pieces are replaced with zeroes. + +* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4` + +If a partial version is provided as the second version in the +inclusive range, then all versions that start with the supplied parts +of the tuple are accepted, but nothing that would be greater than the +provided tuple parts. + +* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0-0` +* `1.2.3 - 2` := `>=1.2.3 <3.0.0-0` + +#### X-Ranges `1.2.x` `1.X` `1.2.*` `*` + +Any of `X`, `x`, or `*` may be used to "stand in" for one of the +numeric values in the `[major, minor, patch]` tuple. + +* `*` := `>=0.0.0` (Any non-prerelease version satisfies, unless + `includePrerelease` is specified, in which case any version at all + satisfies) +* `1.x` := `>=1.0.0 <2.0.0-0` (Matching major version) +* `1.2.x` := `>=1.2.0 <1.3.0-0` (Matching major and minor versions) + +A partial version range is treated as an X-Range, so the special +character is in fact optional. + +* `""` (empty string) := `*` := `>=0.0.0` +* `1` := `1.x.x` := `>=1.0.0 <2.0.0-0` +* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0-0` + +#### Tilde Ranges `~1.2.3` `~1.2` `~1` + +Allows patch-level changes if a minor version is specified on the +comparator. Allows minor-level changes if not. + +* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0-0` +* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0-0` (Same as `1.2.x`) +* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0-0` (Same as `1.x`) +* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0-0` +* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0-0` (Same as `0.2.x`) +* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0-0` (Same as `0.x`) +* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0-0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. + +#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4` + +Allows changes that do not modify the left-most non-zero element in the +`[major, minor, patch]` tuple. In other words, this allows patch and +minor updates for versions `1.0.0` and above, patch updates for +versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`. + +Many authors treat a `0.x` version as if the `x` were the major +"breaking-change" indicator. + +Caret ranges are ideal when an author may make breaking changes +between `0.2.4` and `0.3.0` releases, which is a common practice. +However, it presumes that there will *not* be breaking changes between +`0.2.4` and `0.2.5`. It allows for changes that are presumed to be +additive (but non-breaking), according to commonly observed practices. + +* `^1.2.3` := `>=1.2.3 <2.0.0-0` +* `^0.2.3` := `>=0.2.3 <0.3.0-0` +* `^0.0.3` := `>=0.0.3 <0.0.4-0` +* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0-0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. +* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4-0` Note that prereleases in the + `0.0.3` version *only* will be allowed, if they are greater than or + equal to `beta`. So, `0.0.3-pr.2` would be allowed. + +When parsing caret ranges, a missing `patch` value desugars to the +number `0`, but will allow flexibility within that value, even if the +major and minor versions are both `0`. + +* `^1.2.x` := `>=1.2.0 <2.0.0-0` +* `^0.0.x` := `>=0.0.0 <0.1.0-0` +* `^0.0` := `>=0.0.0 <0.1.0-0` + +A missing `minor` and `patch` values will desugar to zero, but also +allow flexibility within those values, even if the major version is +zero. + +* `^1.x` := `>=1.0.0 <2.0.0-0` +* `^0.x` := `>=0.0.0 <1.0.0-0` + +### Range Grammar + +Putting all this together, here is a Backus-Naur grammar for ranges, +for the benefit of parser authors: + +```bnf +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ +``` + +## Functions + +All methods and classes take a final `options` object argument. All +options in this object are `false` by default. The options supported +are: + +- `loose`: Be more forgiving about not-quite-valid semver strings. + (Any resulting output will always be 100% strict compliant, of + course.) For backwards compatibility reasons, if the `options` + argument is a boolean value instead of an object, it is interpreted + to be the `loose` param. +- `includePrerelease`: Set to suppress the [default + behavior](https://github.com/npm/node-semver#prerelease-tags) of + excluding prerelease tagged versions from ranges unless they are + explicitly opted into. + +Strict-mode Comparators and Ranges will be strict about the SemVer +strings that they parse. + +* `valid(v)`: Return the parsed version, or null if it's not valid. +* `inc(v, releaseType, options, identifier, identifierBase)`: + Return the version incremented by the release + type (`major`, `premajor`, `minor`, `preminor`, `patch`, + `prepatch`, `prerelease`, or `release`), or null if it's not valid + * `premajor` in one call will bump the version up to the next major + version and down to a prerelease of that major version. + `preminor`, and `prepatch` work the same way. + * If called from a non-prerelease version, `prerelease` will work the + same as `prepatch`. It increments the patch version and then makes a + prerelease. If the input version is already a prerelease it simply + increments it. + * `release` will remove any prerelease part of the version. + * `identifier` can be used to prefix `premajor`, `preminor`, + `prepatch`, or `prerelease` version increments. `identifierBase` + is the base to be used for the `prerelease` identifier. +* `prerelease(v)`: Returns an array of prerelease components, or null + if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]` +* `major(v)`: Return the major version number. +* `minor(v)`: Return the minor version number. +* `patch(v)`: Return the patch version number. +* `intersects(r1, r2, loose)`: Return true if the two supplied ranges + or comparators intersect. +* `parse(v)`: Attempt to parse a string as a semantic version, returning either + a `SemVer` object or `null`. + +### Comparison + +* `gt(v1, v2)`: `v1 > v2` +* `gte(v1, v2)`: `v1 >= v2` +* `lt(v1, v2)`: `v1 < v2` +* `lte(v1, v2)`: `v1 <= v2` +* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent, + even if they're not the same string. You already know how to + compare strings. +* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`. +* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call + the corresponding function above. `"==="` and `"!=="` do simple + string comparison, but are included for completeness. Throws if an + invalid comparison string is provided. +* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if + `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. +* `rcompare(v1, v2)`: The reverse of `compare`. Sorts an array of versions + in descending order when passed to `Array.sort()`. +* `compareBuild(v1, v2)`: The same as `compare` but considers `build` when two versions + are equal. Sorts in ascending order if passed to `Array.sort()`. +* `compareLoose(v1, v2)`: Short for `compare(v1, v2, { loose: true })`. +* `diff(v1, v2)`: Returns the difference between two versions by the release type + (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), + or null if the versions are the same. + +### Sorting + +* `sort(versions)`: Returns a sorted array of versions based on the `compareBuild` + function. +* `rsort(versions)`: The reverse of `sort`. Returns an array of versions based on + the `compareBuild` function in descending order. + +### Comparators + +* `intersects(comparator)`: Return true if the comparators intersect + +### Ranges + +* `validRange(range)`: Return the valid range or null if it's not valid. +* `satisfies(version, range)`: Return true if the version satisfies the + range. +* `maxSatisfying(versions, range)`: Return the highest version in the list + that satisfies the range, or `null` if none of them do. +* `minSatisfying(versions, range)`: Return the lowest version in the list + that satisfies the range, or `null` if none of them do. +* `minVersion(range)`: Return the lowest version that can match + the given range. +* `gtr(version, range)`: Return `true` if the version is greater than all the + versions possible in the range. +* `ltr(version, range)`: Return `true` if the version is less than all the + versions possible in the range. +* `outside(version, range, hilo)`: Return true if the version is outside + the bounds of the range in either the high or low direction. The + `hilo` argument must be either the string `'>'` or `'<'`. (This is + the function called by `gtr` and `ltr`.) +* `intersects(range)`: Return true if any of the range comparators intersect. +* `simplifyRange(versions, range)`: Return a "simplified" range that + matches the same items in the `versions` list as the range specified. Note + that it does *not* guarantee that it would match the same versions in all + cases, only for the set of versions provided. This is useful when + generating ranges by joining together multiple versions with `||` + programmatically, to provide the user with something a bit more + ergonomic. If the provided range is shorter in string-length than the + generated range, then that is returned. +* `subset(subRange, superRange)`: Return `true` if the `subRange` range is + entirely contained by the `superRange` range. + +Note that, since ranges may be non-contiguous, a version might not be +greater than a range, less than a range, *or* satisfy a range! For +example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9` +until `2.0.0`, so version `1.2.10` would not be greater than the +range (because `2.0.1` satisfies, which is higher), nor less than the +range (since `1.2.8` satisfies, which is lower), and it also does not +satisfy the range. + +If you want to know if a version satisfies or does not satisfy a +range, use the `satisfies(version, range)` function. + +### Coercion + +* `coerce(version, options)`: Coerces a string to semver if possible + +This aims to provide a very forgiving translation of a non-semver string to +semver. It looks for the first digit in a string and consumes all +remaining characters which satisfy at least a partial semver (e.g., `1`, +`1.2`, `1.2.3`) up to the max permitted length (256 characters). Longer +versions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`). All +surrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes +`3.4.0`). Only text which lacks digits will fail coercion (`version one` +is not valid). The maximum length for any semver component considered for +coercion is 16 characters; longer components will be ignored +(`10000000000000000.4.7.4` becomes `4.7.4`). The maximum value for any +semver component is `Number.MAX_SAFE_INTEGER || (2**53 - 1)`; higher value +components are invalid (`9999999999999999.4.7.4` is likely invalid). + +If the `options.rtl` flag is set, then `coerce` will return the right-most +coercible tuple that does not share an ending index with a longer coercible +tuple. For example, `1.2.3.4` will return `2.3.4` in rtl mode, not +`4.0.0`. `1.2.3/4` will return `4.0.0`, because the `4` is not a part of +any other overlapping SemVer tuple. + +If the `options.includePrerelease` flag is set, then the `coerce` result will contain +prerelease and build parts of a version. For example, `1.2.3.4-rc.1+rev.2` +will preserve prerelease `rc.1` and build `rev.2` in the result. + +### Clean + +* `clean(version)`: Clean a string to be a valid semver if possible + +This will return a cleaned and trimmed semver version. If the provided +version is not valid a null will be returned. This does not work for +ranges. + +ex. +* `s.clean(' = v 2.1.5foo')`: `null` +* `s.clean(' = v 2.1.5foo', { loose: true })`: `'2.1.5-foo'` +* `s.clean(' = v 2.1.5-foo')`: `null` +* `s.clean(' = v 2.1.5-foo', { loose: true })`: `'2.1.5-foo'` +* `s.clean('=v2.1.5')`: `'2.1.5'` +* `s.clean(' =v2.1.5')`: `'2.1.5'` +* `s.clean(' 2.1.5 ')`: `'2.1.5'` +* `s.clean('~1.0.0')`: `null` + +## Constants + +As a convenience, helper constants are exported to provide information about what `node-semver` supports: + +### `RELEASE_TYPES` + +- major +- premajor +- minor +- preminor +- patch +- prepatch +- prerelease + +``` +const semver = require('semver'); + +if (semver.RELEASE_TYPES.includes(arbitraryUserInput)) { + console.log('This is a valid release type!'); +} else { + console.warn('This is NOT a valid release type!'); +} +``` + +### `SEMVER_SPEC_VERSION` + +2.0.0 + +``` +const semver = require('semver'); + +console.log('We are currently using the semver specification version:', semver.SEMVER_SPEC_VERSION); +``` + +## Exported Modules + + + +You may pull in just the part of this semver utility that you need if you +are sensitive to packing and tree-shaking concerns. The main +`require('semver')` export uses getter functions to lazily load the parts +of the API that are used. + +The following modules are available: + +* `require('semver')` +* `require('semver/classes')` +* `require('semver/classes/comparator')` +* `require('semver/classes/range')` +* `require('semver/classes/semver')` +* `require('semver/functions/clean')` +* `require('semver/functions/cmp')` +* `require('semver/functions/coerce')` +* `require('semver/functions/compare')` +* `require('semver/functions/compare-build')` +* `require('semver/functions/compare-loose')` +* `require('semver/functions/diff')` +* `require('semver/functions/eq')` +* `require('semver/functions/gt')` +* `require('semver/functions/gte')` +* `require('semver/functions/inc')` +* `require('semver/functions/lt')` +* `require('semver/functions/lte')` +* `require('semver/functions/major')` +* `require('semver/functions/minor')` +* `require('semver/functions/neq')` +* `require('semver/functions/parse')` +* `require('semver/functions/patch')` +* `require('semver/functions/prerelease')` +* `require('semver/functions/rcompare')` +* `require('semver/functions/rsort')` +* `require('semver/functions/satisfies')` +* `require('semver/functions/sort')` +* `require('semver/functions/valid')` +* `require('semver/ranges/gtr')` +* `require('semver/ranges/intersects')` +* `require('semver/ranges/ltr')` +* `require('semver/ranges/max-satisfying')` +* `require('semver/ranges/min-satisfying')` +* `require('semver/ranges/min-version')` +* `require('semver/ranges/outside')` +* `require('semver/ranges/simplify')` +* `require('semver/ranges/subset')` +* `require('semver/ranges/to-comparators')` +* `require('semver/ranges/valid')` + diff --git a/node_modules/jest-snapshot/node_modules/semver/bin/semver.js b/node_modules/jest-snapshot/node_modules/semver/bin/semver.js new file mode 100755 index 00000000..dbb1bf53 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/bin/semver.js @@ -0,0 +1,191 @@ +#!/usr/bin/env node +// Standalone semver comparison program. +// Exits successfully and prints matching version(s) if +// any supplied version is valid and passes all tests. + +'use strict' + +const argv = process.argv.slice(2) + +let versions = [] + +const range = [] + +let inc = null + +const version = require('../package.json').version + +let loose = false + +let includePrerelease = false + +let coerce = false + +let rtl = false + +let identifier + +let identifierBase + +const semver = require('../') +const parseOptions = require('../internal/parse-options') + +let reverse = false + +let options = {} + +const main = () => { + if (!argv.length) { + return help() + } + while (argv.length) { + let a = argv.shift() + const indexOfEqualSign = a.indexOf('=') + if (indexOfEqualSign !== -1) { + const value = a.slice(indexOfEqualSign + 1) + a = a.slice(0, indexOfEqualSign) + argv.unshift(value) + } + switch (a) { + case '-rv': case '-rev': case '--rev': case '--reverse': + reverse = true + break + case '-l': case '--loose': + loose = true + break + case '-p': case '--include-prerelease': + includePrerelease = true + break + case '-v': case '--version': + versions.push(argv.shift()) + break + case '-i': case '--inc': case '--increment': + switch (argv[0]) { + case 'major': case 'minor': case 'patch': case 'prerelease': + case 'premajor': case 'preminor': case 'prepatch': + case 'release': + inc = argv.shift() + break + default: + inc = 'patch' + break + } + break + case '--preid': + identifier = argv.shift() + break + case '-r': case '--range': + range.push(argv.shift()) + break + case '-n': + identifierBase = argv.shift() + if (identifierBase === 'false') { + identifierBase = false + } + break + case '-c': case '--coerce': + coerce = true + break + case '--rtl': + rtl = true + break + case '--ltr': + rtl = false + break + case '-h': case '--help': case '-?': + return help() + default: + versions.push(a) + break + } + } + + options = parseOptions({ loose, includePrerelease, rtl }) + + versions = versions.map((v) => { + return coerce ? (semver.coerce(v, options) || { version: v }).version : v + }).filter((v) => { + return semver.valid(v) + }) + if (!versions.length) { + return fail() + } + if (inc && (versions.length !== 1 || range.length)) { + return failInc() + } + + for (let i = 0, l = range.length; i < l; i++) { + versions = versions.filter((v) => { + return semver.satisfies(v, range[i], options) + }) + if (!versions.length) { + return fail() + } + } + versions + .sort((a, b) => semver[reverse ? 'rcompare' : 'compare'](a, b, options)) + .map(v => semver.clean(v, options)) + .map(v => inc ? semver.inc(v, inc, options, identifier, identifierBase) : v) + .forEach(v => console.log(v)) +} + +const failInc = () => { + console.error('--inc can only be used on a single version with no range') + fail() +} + +const fail = () => process.exit(1) + +const help = () => console.log( +`SemVer ${version} + +A JavaScript implementation of the https://semver.org/ specification +Copyright Isaac Z. Schlueter + +Usage: semver [options] [ [...]] +Prints valid versions sorted by SemVer precedence + +Options: +-r --range + Print versions that match the specified range. + +-i --increment [] + Increment a version by the specified level. Level can + be one of: major, minor, patch, premajor, preminor, + prepatch, prerelease, or release. Default level is 'patch'. + Only one version may be specified. + +--preid + Identifier to be used to prefix premajor, preminor, + prepatch or prerelease version increments. + +-l --loose + Interpret versions and ranges loosely + +-p --include-prerelease + Always include prerelease versions in range matching + +-c --coerce + Coerce a string into SemVer if possible + (does not imply --loose) + +--rtl + Coerce version strings right to left + +--ltr + Coerce version strings left to right (default) + +-n + Base number to be used for the prerelease identifier. + Can be either 0 or 1, or false to omit the number altogether. + Defaults to 0. + +Program exits successfully if any valid version satisfies +all supplied ranges, and prints all satisfying versions. + +If no satisfying versions are found, then exits failure. + +Versions are printed in ascending order, so supplying +multiple versions to the utility will just sort them.`) + +main() diff --git a/node_modules/jest-snapshot/node_modules/semver/classes/comparator.js b/node_modules/jest-snapshot/node_modules/semver/classes/comparator.js new file mode 100644 index 00000000..647c1f09 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/classes/comparator.js @@ -0,0 +1,143 @@ +'use strict' + +const ANY = Symbol('SemVer ANY') +// hoisted class for cyclic dependency +class Comparator { + static get ANY () { + return ANY + } + + constructor (comp, options) { + options = parseOptions(options) + + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp + } else { + comp = comp.value + } + } + + comp = comp.trim().split(/\s+/).join(' ') + debug('comparator', comp, options) + this.options = options + this.loose = !!options.loose + this.parse(comp) + + if (this.semver === ANY) { + this.value = '' + } else { + this.value = this.operator + this.semver.version + } + + debug('comp', this) + } + + parse (comp) { + const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + const m = comp.match(r) + + if (!m) { + throw new TypeError(`Invalid comparator: ${comp}`) + } + + this.operator = m[1] !== undefined ? m[1] : '' + if (this.operator === '=') { + this.operator = '' + } + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY + } else { + this.semver = new SemVer(m[2], this.options.loose) + } + } + + toString () { + return this.value + } + + test (version) { + debug('Comparator.test', version, this.options.loose) + + if (this.semver === ANY || version === ANY) { + return true + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + return cmp(version, this.operator, this.semver, this.options) + } + + intersects (comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required') + } + + if (this.operator === '') { + if (this.value === '') { + return true + } + return new Range(comp.value, options).test(this.value) + } else if (comp.operator === '') { + if (comp.value === '') { + return true + } + return new Range(this.value, options).test(comp.semver) + } + + options = parseOptions(options) + + // Special cases where nothing can possibly be lower + if (options.includePrerelease && + (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) { + return false + } + if (!options.includePrerelease && + (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) { + return false + } + + // Same direction increasing (> or >=) + if (this.operator.startsWith('>') && comp.operator.startsWith('>')) { + return true + } + // Same direction decreasing (< or <=) + if (this.operator.startsWith('<') && comp.operator.startsWith('<')) { + return true + } + // same SemVer and both sides are inclusive (<= or >=) + if ( + (this.semver.version === comp.semver.version) && + this.operator.includes('=') && comp.operator.includes('=')) { + return true + } + // opposite directions less than + if (cmp(this.semver, '<', comp.semver, options) && + this.operator.startsWith('>') && comp.operator.startsWith('<')) { + return true + } + // opposite directions greater than + if (cmp(this.semver, '>', comp.semver, options) && + this.operator.startsWith('<') && comp.operator.startsWith('>')) { + return true + } + return false + } +} + +module.exports = Comparator + +const parseOptions = require('../internal/parse-options') +const { safeRe: re, t } = require('../internal/re') +const cmp = require('../functions/cmp') +const debug = require('../internal/debug') +const SemVer = require('./semver') +const Range = require('./range') diff --git a/node_modules/jest-snapshot/node_modules/semver/classes/index.js b/node_modules/jest-snapshot/node_modules/semver/classes/index.js new file mode 100644 index 00000000..91c24ec4 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/classes/index.js @@ -0,0 +1,7 @@ +'use strict' + +module.exports = { + SemVer: require('./semver.js'), + Range: require('./range.js'), + Comparator: require('./comparator.js'), +} diff --git a/node_modules/jest-snapshot/node_modules/semver/classes/range.js b/node_modules/jest-snapshot/node_modules/semver/classes/range.js new file mode 100644 index 00000000..f80c2359 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/classes/range.js @@ -0,0 +1,556 @@ +'use strict' + +const SPACE_CHARACTERS = /\s+/g + +// hoisted class for cyclic dependency +class Range { + constructor (range, options) { + options = parseOptions(options) + + if (range instanceof Range) { + if ( + range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease + ) { + return range + } else { + return new Range(range.raw, options) + } + } + + if (range instanceof Comparator) { + // just put it in the set and return + this.raw = range.value + this.set = [[range]] + this.formatted = undefined + return this + } + + this.options = options + this.loose = !!options.loose + this.includePrerelease = !!options.includePrerelease + + // First reduce all whitespace as much as possible so we do not have to rely + // on potentially slow regexes like \s*. This is then stored and used for + // future error messages as well. + this.raw = range.trim().replace(SPACE_CHARACTERS, ' ') + + // First, split on || + this.set = this.raw + .split('||') + // map the range to a 2d array of comparators + .map(r => this.parseRange(r.trim())) + // throw out any comparator lists that are empty + // this generally means that it was not a valid range, which is allowed + // in loose mode, but will still throw if the WHOLE range is invalid. + .filter(c => c.length) + + if (!this.set.length) { + throw new TypeError(`Invalid SemVer Range: ${this.raw}`) + } + + // if we have any that are not the null set, throw out null sets. + if (this.set.length > 1) { + // keep the first one, in case they're all null sets + const first = this.set[0] + this.set = this.set.filter(c => !isNullSet(c[0])) + if (this.set.length === 0) { + this.set = [first] + } else if (this.set.length > 1) { + // if we have any that are *, then the range is just * + for (const c of this.set) { + if (c.length === 1 && isAny(c[0])) { + this.set = [c] + break + } + } + } + } + + this.formatted = undefined + } + + get range () { + if (this.formatted === undefined) { + this.formatted = '' + for (let i = 0; i < this.set.length; i++) { + if (i > 0) { + this.formatted += '||' + } + const comps = this.set[i] + for (let k = 0; k < comps.length; k++) { + if (k > 0) { + this.formatted += ' ' + } + this.formatted += comps[k].toString().trim() + } + } + } + return this.formatted + } + + format () { + return this.range + } + + toString () { + return this.range + } + + parseRange (range) { + // memoize range parsing for performance. + // this is a very hot path, and fully deterministic. + const memoOpts = + (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | + (this.options.loose && FLAG_LOOSE) + const memoKey = memoOpts + ':' + range + const cached = cache.get(memoKey) + if (cached) { + return cached + } + + const loose = this.options.loose + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] + range = range.replace(hr, hyphenReplace(this.options.includePrerelease)) + debug('hyphen replace', range) + + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) + debug('comparator trim', range) + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[t.TILDETRIM], tildeTrimReplace) + debug('tilde trim', range) + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[t.CARETTRIM], caretTrimReplace) + debug('caret trim', range) + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + let rangeList = range + .split(' ') + .map(comp => parseComparator(comp, this.options)) + .join(' ') + .split(/\s+/) + // >=0.0.0 is equivalent to * + .map(comp => replaceGTE0(comp, this.options)) + + if (loose) { + // in loose mode, throw out any that are not valid comparators + rangeList = rangeList.filter(comp => { + debug('loose invalid filter', comp, this.options) + return !!comp.match(re[t.COMPARATORLOOSE]) + }) + } + debug('range list', rangeList) + + // if any comparators are the null set, then replace with JUST null set + // if more than one comparator, remove any * comparators + // also, don't include the same comparator more than once + const rangeMap = new Map() + const comparators = rangeList.map(comp => new Comparator(comp, this.options)) + for (const comp of comparators) { + if (isNullSet(comp)) { + return [comp] + } + rangeMap.set(comp.value, comp) + } + if (rangeMap.size > 1 && rangeMap.has('')) { + rangeMap.delete('') + } + + const result = [...rangeMap.values()] + cache.set(memoKey, result) + return result + } + + intersects (range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required') + } + + return this.set.some((thisComparators) => { + return ( + isSatisfiable(thisComparators, options) && + range.set.some((rangeComparators) => { + return ( + isSatisfiable(rangeComparators, options) && + thisComparators.every((thisComparator) => { + return rangeComparators.every((rangeComparator) => { + return thisComparator.intersects(rangeComparator, options) + }) + }) + ) + }) + ) + }) + } + + // if ANY of the sets match ALL of its comparators, then pass + test (version) { + if (!version) { + return false + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + for (let i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false + } +} + +module.exports = Range + +const LRU = require('../internal/lrucache') +const cache = new LRU() + +const parseOptions = require('../internal/parse-options') +const Comparator = require('./comparator') +const debug = require('../internal/debug') +const SemVer = require('./semver') +const { + safeRe: re, + t, + comparatorTrimReplace, + tildeTrimReplace, + caretTrimReplace, +} = require('../internal/re') +const { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants') + +const isNullSet = c => c.value === '<0.0.0-0' +const isAny = c => c.value === '' + +// take a set of comparators and determine whether there +// exists a version which can satisfy it +const isSatisfiable = (comparators, options) => { + let result = true + const remainingComparators = comparators.slice() + let testComparator = remainingComparators.pop() + + while (result && remainingComparators.length) { + result = remainingComparators.every((otherComparator) => { + return testComparator.intersects(otherComparator, options) + }) + + testComparator = remainingComparators.pop() + } + + return result +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +const parseComparator = (comp, options) => { + debug('comp', comp, options) + comp = replaceCarets(comp, options) + debug('caret', comp) + comp = replaceTildes(comp, options) + debug('tildes', comp) + comp = replaceXRanges(comp, options) + debug('xrange', comp) + comp = replaceStars(comp, options) + debug('stars', comp) + return comp +} + +const isX = id => !id || id.toLowerCase() === 'x' || id === '*' + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0 +// ~0.0.1 --> >=0.0.1 <0.1.0-0 +const replaceTildes = (comp, options) => { + return comp + .trim() + .split(/\s+/) + .map((c) => replaceTilde(c, options)) + .join(' ') +} + +const replaceTilde = (comp, options) => { + const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] + return comp.replace(r, (_, M, m, p, pr) => { + debug('tilde', comp, _, M, m, p, pr) + let ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = `>=${M}.0.0 <${+M + 1}.0.0-0` + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0-0 + ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0` + } else if (pr) { + debug('replaceTilde pr', pr) + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${+m + 1}.0-0` + } else { + // ~1.2.3 == >=1.2.3 <1.3.0-0 + ret = `>=${M}.${m}.${p + } <${M}.${+m + 1}.0-0` + } + + debug('tilde return', ret) + return ret + }) +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0 +// ^1.2.3 --> >=1.2.3 <2.0.0-0 +// ^1.2.0 --> >=1.2.0 <2.0.0-0 +// ^0.0.1 --> >=0.0.1 <0.0.2-0 +// ^0.1.0 --> >=0.1.0 <0.2.0-0 +const replaceCarets = (comp, options) => { + return comp + .trim() + .split(/\s+/) + .map((c) => replaceCaret(c, options)) + .join(' ') +} + +const replaceCaret = (comp, options) => { + debug('caret', comp, options) + const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] + const z = options.includePrerelease ? '-0' : '' + return comp.replace(r, (_, M, m, p, pr) => { + debug('caret', comp, _, M, m, p, pr) + let ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0` + } else if (isX(p)) { + if (M === '0') { + ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0` + } else { + ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0` + } + } else if (pr) { + debug('replaceCaret pr', pr) + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${m}.${+p + 1}-0` + } else { + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${+m + 1}.0-0` + } + } else { + ret = `>=${M}.${m}.${p}-${pr + } <${+M + 1}.0.0-0` + } + } else { + debug('no pr') + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p + }${z} <${M}.${m}.${+p + 1}-0` + } else { + ret = `>=${M}.${m}.${p + }${z} <${M}.${+m + 1}.0-0` + } + } else { + ret = `>=${M}.${m}.${p + } <${+M + 1}.0.0-0` + } + } + + debug('caret return', ret) + return ret + }) +} + +const replaceXRanges = (comp, options) => { + debug('replaceXRanges', comp, options) + return comp + .split(/\s+/) + .map((c) => replaceXRange(c, options)) + .join(' ') +} + +const replaceXRange = (comp, options) => { + comp = comp.trim() + const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] + return comp.replace(r, (ret, gtlt, M, m, p, pr) => { + debug('xRange', comp, ret, gtlt, M, m, p, pr) + const xM = isX(M) + const xm = xM || isX(m) + const xp = xm || isX(p) + const anyX = xp + + if (gtlt === '=' && anyX) { + gtlt = '' + } + + // if we're including prereleases in the match, then we need + // to fix this to -0, the lowest possible prerelease value + pr = options.includePrerelease ? '-0' : '' + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0-0' + } else { + // nothing is forbidden + ret = '*' + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0 + } + p = 0 + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + gtlt = '>=' + if (xm) { + M = +M + 1 + m = 0 + p = 0 + } else { + m = +m + 1 + p = 0 + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) { + M = +M + 1 + } else { + m = +m + 1 + } + } + + if (gtlt === '<') { + pr = '-0' + } + + ret = `${gtlt + M}.${m}.${p}${pr}` + } else if (xm) { + ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0` + } else if (xp) { + ret = `>=${M}.${m}.0${pr + } <${M}.${+m + 1}.0-0` + } + + debug('xRange return', ret) + + return ret + }) +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +const replaceStars = (comp, options) => { + debug('replaceStars', comp, options) + // Looseness is ignored here. star is always as loose as it gets! + return comp + .trim() + .replace(re[t.STAR], '') +} + +const replaceGTE0 = (comp, options) => { + debug('replaceGTE0', comp, options) + return comp + .trim() + .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '') +} + +// This function is passed to string.replace(re[t.HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0-0 +// TODO build? +const hyphenReplace = incPr => ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr) => { + if (isX(fM)) { + from = '' + } else if (isX(fm)) { + from = `>=${fM}.0.0${incPr ? '-0' : ''}` + } else if (isX(fp)) { + from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}` + } else if (fpr) { + from = `>=${from}` + } else { + from = `>=${from}${incPr ? '-0' : ''}` + } + + if (isX(tM)) { + to = '' + } else if (isX(tm)) { + to = `<${+tM + 1}.0.0-0` + } else if (isX(tp)) { + to = `<${tM}.${+tm + 1}.0-0` + } else if (tpr) { + to = `<=${tM}.${tm}.${tp}-${tpr}` + } else if (incPr) { + to = `<${tM}.${tm}.${+tp + 1}-0` + } else { + to = `<=${to}` + } + + return `${from} ${to}`.trim() +} + +const testSet = (set, version, options) => { + for (let i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false + } + } + + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (let i = 0; i < set.length; i++) { + debug(set[i].semver) + if (set[i].semver === Comparator.ANY) { + continue + } + + if (set[i].semver.prerelease.length > 0) { + const allowed = set[i].semver + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true + } + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false + } + + return true +} diff --git a/node_modules/jest-snapshot/node_modules/semver/classes/semver.js b/node_modules/jest-snapshot/node_modules/semver/classes/semver.js new file mode 100644 index 00000000..2efba0f4 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/classes/semver.js @@ -0,0 +1,319 @@ +'use strict' + +const debug = require('../internal/debug') +const { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants') +const { safeRe: re, t } = require('../internal/re') + +const parseOptions = require('../internal/parse-options') +const { compareIdentifiers } = require('../internal/identifiers') +class SemVer { + constructor (version, options) { + options = parseOptions(options) + + if (version instanceof SemVer) { + if (version.loose === !!options.loose && + version.includePrerelease === !!options.includePrerelease) { + return version + } else { + version = version.version + } + } else if (typeof version !== 'string') { + throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`) + } + + if (version.length > MAX_LENGTH) { + throw new TypeError( + `version is longer than ${MAX_LENGTH} characters` + ) + } + + debug('SemVer', version, options) + this.options = options + this.loose = !!options.loose + // this isn't actually relevant for versions, but keep it so that we + // don't run into trouble passing this.options around. + this.includePrerelease = !!options.includePrerelease + + const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) + + if (!m) { + throw new TypeError(`Invalid Version: ${version}`) + } + + this.raw = version + + // these are actually numbers + this.major = +m[1] + this.minor = +m[2] + this.patch = +m[3] + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') + } + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = [] + } else { + this.prerelease = m[4].split('.').map((id) => { + if (/^[0-9]+$/.test(id)) { + const num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } + } + return id + }) + } + + this.build = m[5] ? m[5].split('.') : [] + this.format() + } + + format () { + this.version = `${this.major}.${this.minor}.${this.patch}` + if (this.prerelease.length) { + this.version += `-${this.prerelease.join('.')}` + } + return this.version + } + + toString () { + return this.version + } + + compare (other) { + debug('SemVer.compare', this.version, this.options, other) + if (!(other instanceof SemVer)) { + if (typeof other === 'string' && other === this.version) { + return 0 + } + other = new SemVer(other, this.options) + } + + if (other.version === this.version) { + return 0 + } + + return this.compareMain(other) || this.comparePre(other) + } + + compareMain (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return ( + compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) + ) + } + + comparePre (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } + + let i = 0 + do { + const a = this.prerelease[i] + const b = other.prerelease[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) + } + + compareBuild (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + let i = 0 + do { + const a = this.build[i] + const b = other.build[i] + debug('build compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) + } + + // preminor will bump the version up to the next minor release, and immediately + // down to pre-release. premajor and prepatch work the same way. + inc (release, identifier, identifierBase) { + if (release.startsWith('pre')) { + if (!identifier && identifierBase === false) { + throw new Error('invalid increment argument: identifier is empty') + } + // Avoid an invalid semver results + if (identifier) { + const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE]) + if (!match || match[1] !== identifier) { + throw new Error(`invalid identifier: ${identifier}`) + } + } + } + + switch (release) { + case 'premajor': + this.prerelease.length = 0 + this.patch = 0 + this.minor = 0 + this.major++ + this.inc('pre', identifier, identifierBase) + break + case 'preminor': + this.prerelease.length = 0 + this.patch = 0 + this.minor++ + this.inc('pre', identifier, identifierBase) + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch', identifier, identifierBase) + this.inc('pre', identifier, identifierBase) + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier, identifierBase) + } + this.inc('pre', identifier, identifierBase) + break + case 'release': + if (this.prerelease.length === 0) { + throw new Error(`version ${this.raw} is not a prerelease`) + } + this.prerelease.length = 0 + break + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if ( + this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0 + ) { + this.major++ + } + this.minor = 0 + this.patch = 0 + this.prerelease = [] + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++ + } + this.patch = 0 + this.prerelease = [] + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++ + } + this.prerelease = [] + break + // This probably shouldn't be used publicly. + // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. + case 'pre': { + const base = Number(identifierBase) ? 1 : 0 + + if (this.prerelease.length === 0) { + this.prerelease = [base] + } else { + let i = this.prerelease.length + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++ + i = -2 + } + } + if (i === -1) { + // didn't increment anything + if (identifier === this.prerelease.join('.') && identifierBase === false) { + throw new Error('invalid increment argument: identifier already exists') + } + this.prerelease.push(base) + } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + let prerelease = [identifier, base] + if (identifierBase === false) { + prerelease = [identifier] + } + if (compareIdentifiers(this.prerelease[0], identifier) === 0) { + if (isNaN(this.prerelease[1])) { + this.prerelease = prerelease + } + } else { + this.prerelease = prerelease + } + } + break + } + default: + throw new Error(`invalid increment argument: ${release}`) + } + this.raw = this.format() + if (this.build.length) { + this.raw += `+${this.build.join('.')}` + } + return this + } +} + +module.exports = SemVer diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/clean.js b/node_modules/jest-snapshot/node_modules/semver/functions/clean.js new file mode 100644 index 00000000..79703d63 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/clean.js @@ -0,0 +1,8 @@ +'use strict' + +const parse = require('./parse') +const clean = (version, options) => { + const s = parse(version.trim().replace(/^[=v]+/, ''), options) + return s ? s.version : null +} +module.exports = clean diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/cmp.js b/node_modules/jest-snapshot/node_modules/semver/functions/cmp.js new file mode 100644 index 00000000..77487dca --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/cmp.js @@ -0,0 +1,54 @@ +'use strict' + +const eq = require('./eq') +const neq = require('./neq') +const gt = require('./gt') +const gte = require('./gte') +const lt = require('./lt') +const lte = require('./lte') + +const cmp = (a, op, b, loose) => { + switch (op) { + case '===': + if (typeof a === 'object') { + a = a.version + } + if (typeof b === 'object') { + b = b.version + } + return a === b + + case '!==': + if (typeof a === 'object') { + a = a.version + } + if (typeof b === 'object') { + b = b.version + } + return a !== b + + case '': + case '=': + case '==': + return eq(a, b, loose) + + case '!=': + return neq(a, b, loose) + + case '>': + return gt(a, b, loose) + + case '>=': + return gte(a, b, loose) + + case '<': + return lt(a, b, loose) + + case '<=': + return lte(a, b, loose) + + default: + throw new TypeError(`Invalid operator: ${op}`) + } +} +module.exports = cmp diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/coerce.js b/node_modules/jest-snapshot/node_modules/semver/functions/coerce.js new file mode 100644 index 00000000..cfe02759 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/coerce.js @@ -0,0 +1,62 @@ +'use strict' + +const SemVer = require('../classes/semver') +const parse = require('./parse') +const { safeRe: re, t } = require('../internal/re') + +const coerce = (version, options) => { + if (version instanceof SemVer) { + return version + } + + if (typeof version === 'number') { + version = String(version) + } + + if (typeof version !== 'string') { + return null + } + + options = options || {} + + let match = null + if (!options.rtl) { + match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE]) + } else { + // Find the right-most coercible string that does not share + // a terminus with a more left-ward coercible string. + // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' + // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4' + // + // Walk through the string checking with a /g regexp + // Manually set the index so as to pick up overlapping matches. + // Stop when we get a match that ends at the string end, since no + // coercible string can be more right-ward without the same terminus. + const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL] + let next + while ((next = coerceRtlRegex.exec(version)) && + (!match || match.index + match[0].length !== version.length) + ) { + if (!match || + next.index + next[0].length !== match.index + match[0].length) { + match = next + } + coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length + } + // leave it in a clean state + coerceRtlRegex.lastIndex = -1 + } + + if (match === null) { + return null + } + + const major = match[2] + const minor = match[3] || '0' + const patch = match[4] || '0' + const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : '' + const build = options.includePrerelease && match[6] ? `+${match[6]}` : '' + + return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options) +} +module.exports = coerce diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/compare-build.js b/node_modules/jest-snapshot/node_modules/semver/functions/compare-build.js new file mode 100644 index 00000000..99157cf3 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/compare-build.js @@ -0,0 +1,9 @@ +'use strict' + +const SemVer = require('../classes/semver') +const compareBuild = (a, b, loose) => { + const versionA = new SemVer(a, loose) + const versionB = new SemVer(b, loose) + return versionA.compare(versionB) || versionA.compareBuild(versionB) +} +module.exports = compareBuild diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/compare-loose.js b/node_modules/jest-snapshot/node_modules/semver/functions/compare-loose.js new file mode 100644 index 00000000..75316346 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/compare-loose.js @@ -0,0 +1,5 @@ +'use strict' + +const compare = require('./compare') +const compareLoose = (a, b) => compare(a, b, true) +module.exports = compareLoose diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/compare.js b/node_modules/jest-snapshot/node_modules/semver/functions/compare.js new file mode 100644 index 00000000..63d8090c --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/compare.js @@ -0,0 +1,7 @@ +'use strict' + +const SemVer = require('../classes/semver') +const compare = (a, b, loose) => + new SemVer(a, loose).compare(new SemVer(b, loose)) + +module.exports = compare diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/diff.js b/node_modules/jest-snapshot/node_modules/semver/functions/diff.js new file mode 100644 index 00000000..04e064e9 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/diff.js @@ -0,0 +1,60 @@ +'use strict' + +const parse = require('./parse.js') + +const diff = (version1, version2) => { + const v1 = parse(version1, null, true) + const v2 = parse(version2, null, true) + const comparison = v1.compare(v2) + + if (comparison === 0) { + return null + } + + const v1Higher = comparison > 0 + const highVersion = v1Higher ? v1 : v2 + const lowVersion = v1Higher ? v2 : v1 + const highHasPre = !!highVersion.prerelease.length + const lowHasPre = !!lowVersion.prerelease.length + + if (lowHasPre && !highHasPre) { + // Going from prerelease -> no prerelease requires some special casing + + // If the low version has only a major, then it will always be a major + // Some examples: + // 1.0.0-1 -> 1.0.0 + // 1.0.0-1 -> 1.1.1 + // 1.0.0-1 -> 2.0.0 + if (!lowVersion.patch && !lowVersion.minor) { + return 'major' + } + + // If the main part has no difference + if (lowVersion.compareMain(highVersion) === 0) { + if (lowVersion.minor && !lowVersion.patch) { + return 'minor' + } + return 'patch' + } + } + + // add the `pre` prefix if we are going to a prerelease version + const prefix = highHasPre ? 'pre' : '' + + if (v1.major !== v2.major) { + return prefix + 'major' + } + + if (v1.minor !== v2.minor) { + return prefix + 'minor' + } + + if (v1.patch !== v2.patch) { + return prefix + 'patch' + } + + // high and low are preleases + return 'prerelease' +} + +module.exports = diff diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/eq.js b/node_modules/jest-snapshot/node_modules/semver/functions/eq.js new file mode 100644 index 00000000..5f0eead1 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/eq.js @@ -0,0 +1,5 @@ +'use strict' + +const compare = require('./compare') +const eq = (a, b, loose) => compare(a, b, loose) === 0 +module.exports = eq diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/gt.js b/node_modules/jest-snapshot/node_modules/semver/functions/gt.js new file mode 100644 index 00000000..84a57ddf --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/gt.js @@ -0,0 +1,5 @@ +'use strict' + +const compare = require('./compare') +const gt = (a, b, loose) => compare(a, b, loose) > 0 +module.exports = gt diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/gte.js b/node_modules/jest-snapshot/node_modules/semver/functions/gte.js new file mode 100644 index 00000000..7c52bdf2 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/gte.js @@ -0,0 +1,5 @@ +'use strict' + +const compare = require('./compare') +const gte = (a, b, loose) => compare(a, b, loose) >= 0 +module.exports = gte diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/inc.js b/node_modules/jest-snapshot/node_modules/semver/functions/inc.js new file mode 100644 index 00000000..ff999e9d --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/inc.js @@ -0,0 +1,21 @@ +'use strict' + +const SemVer = require('../classes/semver') + +const inc = (version, release, options, identifier, identifierBase) => { + if (typeof (options) === 'string') { + identifierBase = identifier + identifier = options + options = undefined + } + + try { + return new SemVer( + version instanceof SemVer ? version.version : version, + options + ).inc(release, identifier, identifierBase).version + } catch (er) { + return null + } +} +module.exports = inc diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/lt.js b/node_modules/jest-snapshot/node_modules/semver/functions/lt.js new file mode 100644 index 00000000..2fb32a0e --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/lt.js @@ -0,0 +1,5 @@ +'use strict' + +const compare = require('./compare') +const lt = (a, b, loose) => compare(a, b, loose) < 0 +module.exports = lt diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/lte.js b/node_modules/jest-snapshot/node_modules/semver/functions/lte.js new file mode 100644 index 00000000..da9ee8f4 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/lte.js @@ -0,0 +1,5 @@ +'use strict' + +const compare = require('./compare') +const lte = (a, b, loose) => compare(a, b, loose) <= 0 +module.exports = lte diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/major.js b/node_modules/jest-snapshot/node_modules/semver/functions/major.js new file mode 100644 index 00000000..e6d08dc2 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/major.js @@ -0,0 +1,5 @@ +'use strict' + +const SemVer = require('../classes/semver') +const major = (a, loose) => new SemVer(a, loose).major +module.exports = major diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/minor.js b/node_modules/jest-snapshot/node_modules/semver/functions/minor.js new file mode 100644 index 00000000..9e70ffda --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/minor.js @@ -0,0 +1,5 @@ +'use strict' + +const SemVer = require('../classes/semver') +const minor = (a, loose) => new SemVer(a, loose).minor +module.exports = minor diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/neq.js b/node_modules/jest-snapshot/node_modules/semver/functions/neq.js new file mode 100644 index 00000000..84326b77 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/neq.js @@ -0,0 +1,5 @@ +'use strict' + +const compare = require('./compare') +const neq = (a, b, loose) => compare(a, b, loose) !== 0 +module.exports = neq diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/parse.js b/node_modules/jest-snapshot/node_modules/semver/functions/parse.js new file mode 100644 index 00000000..d544d33a --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/parse.js @@ -0,0 +1,18 @@ +'use strict' + +const SemVer = require('../classes/semver') +const parse = (version, options, throwErrors = false) => { + if (version instanceof SemVer) { + return version + } + try { + return new SemVer(version, options) + } catch (er) { + if (!throwErrors) { + return null + } + throw er + } +} + +module.exports = parse diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/patch.js b/node_modules/jest-snapshot/node_modules/semver/functions/patch.js new file mode 100644 index 00000000..7675162f --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/patch.js @@ -0,0 +1,5 @@ +'use strict' + +const SemVer = require('../classes/semver') +const patch = (a, loose) => new SemVer(a, loose).patch +module.exports = patch diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/prerelease.js b/node_modules/jest-snapshot/node_modules/semver/functions/prerelease.js new file mode 100644 index 00000000..b8fe1db5 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/prerelease.js @@ -0,0 +1,8 @@ +'use strict' + +const parse = require('./parse') +const prerelease = (version, options) => { + const parsed = parse(version, options) + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null +} +module.exports = prerelease diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/rcompare.js b/node_modules/jest-snapshot/node_modules/semver/functions/rcompare.js new file mode 100644 index 00000000..8e1c222b --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/rcompare.js @@ -0,0 +1,5 @@ +'use strict' + +const compare = require('./compare') +const rcompare = (a, b, loose) => compare(b, a, loose) +module.exports = rcompare diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/rsort.js b/node_modules/jest-snapshot/node_modules/semver/functions/rsort.js new file mode 100644 index 00000000..5d3d2009 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/rsort.js @@ -0,0 +1,5 @@ +'use strict' + +const compareBuild = require('./compare-build') +const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose)) +module.exports = rsort diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/satisfies.js b/node_modules/jest-snapshot/node_modules/semver/functions/satisfies.js new file mode 100644 index 00000000..a0264a22 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/satisfies.js @@ -0,0 +1,12 @@ +'use strict' + +const Range = require('../classes/range') +const satisfies = (version, range, options) => { + try { + range = new Range(range, options) + } catch (er) { + return false + } + return range.test(version) +} +module.exports = satisfies diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/sort.js b/node_modules/jest-snapshot/node_modules/semver/functions/sort.js new file mode 100644 index 00000000..edb24b1d --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/sort.js @@ -0,0 +1,5 @@ +'use strict' + +const compareBuild = require('./compare-build') +const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose)) +module.exports = sort diff --git a/node_modules/jest-snapshot/node_modules/semver/functions/valid.js b/node_modules/jest-snapshot/node_modules/semver/functions/valid.js new file mode 100644 index 00000000..0db67edc --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/functions/valid.js @@ -0,0 +1,8 @@ +'use strict' + +const parse = require('./parse') +const valid = (version, options) => { + const v = parse(version, options) + return v ? v.version : null +} +module.exports = valid diff --git a/node_modules/jest-snapshot/node_modules/semver/index.js b/node_modules/jest-snapshot/node_modules/semver/index.js new file mode 100644 index 00000000..285662ac --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/index.js @@ -0,0 +1,91 @@ +'use strict' + +// just pre-load all the stuff that index.js lazily exports +const internalRe = require('./internal/re') +const constants = require('./internal/constants') +const SemVer = require('./classes/semver') +const identifiers = require('./internal/identifiers') +const parse = require('./functions/parse') +const valid = require('./functions/valid') +const clean = require('./functions/clean') +const inc = require('./functions/inc') +const diff = require('./functions/diff') +const major = require('./functions/major') +const minor = require('./functions/minor') +const patch = require('./functions/patch') +const prerelease = require('./functions/prerelease') +const compare = require('./functions/compare') +const rcompare = require('./functions/rcompare') +const compareLoose = require('./functions/compare-loose') +const compareBuild = require('./functions/compare-build') +const sort = require('./functions/sort') +const rsort = require('./functions/rsort') +const gt = require('./functions/gt') +const lt = require('./functions/lt') +const eq = require('./functions/eq') +const neq = require('./functions/neq') +const gte = require('./functions/gte') +const lte = require('./functions/lte') +const cmp = require('./functions/cmp') +const coerce = require('./functions/coerce') +const Comparator = require('./classes/comparator') +const Range = require('./classes/range') +const satisfies = require('./functions/satisfies') +const toComparators = require('./ranges/to-comparators') +const maxSatisfying = require('./ranges/max-satisfying') +const minSatisfying = require('./ranges/min-satisfying') +const minVersion = require('./ranges/min-version') +const validRange = require('./ranges/valid') +const outside = require('./ranges/outside') +const gtr = require('./ranges/gtr') +const ltr = require('./ranges/ltr') +const intersects = require('./ranges/intersects') +const simplifyRange = require('./ranges/simplify') +const subset = require('./ranges/subset') +module.exports = { + parse, + valid, + clean, + inc, + diff, + major, + minor, + patch, + prerelease, + compare, + rcompare, + compareLoose, + compareBuild, + sort, + rsort, + gt, + lt, + eq, + neq, + gte, + lte, + cmp, + coerce, + Comparator, + Range, + satisfies, + toComparators, + maxSatisfying, + minSatisfying, + minVersion, + validRange, + outside, + gtr, + ltr, + intersects, + simplifyRange, + subset, + SemVer, + re: internalRe.re, + src: internalRe.src, + tokens: internalRe.t, + SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION, + RELEASE_TYPES: constants.RELEASE_TYPES, + compareIdentifiers: identifiers.compareIdentifiers, + rcompareIdentifiers: identifiers.rcompareIdentifiers, +} diff --git a/node_modules/jest-snapshot/node_modules/semver/internal/constants.js b/node_modules/jest-snapshot/node_modules/semver/internal/constants.js new file mode 100644 index 00000000..6d1db915 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/internal/constants.js @@ -0,0 +1,37 @@ +'use strict' + +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +const SEMVER_SPEC_VERSION = '2.0.0' + +const MAX_LENGTH = 256 +const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || +/* istanbul ignore next */ 9007199254740991 + +// Max safe segment length for coercion. +const MAX_SAFE_COMPONENT_LENGTH = 16 + +// Max safe length for a build identifier. The max length minus 6 characters for +// the shortest version with a build 0.0.0+BUILD. +const MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6 + +const RELEASE_TYPES = [ + 'major', + 'premajor', + 'minor', + 'preminor', + 'patch', + 'prepatch', + 'prerelease', +] + +module.exports = { + MAX_LENGTH, + MAX_SAFE_COMPONENT_LENGTH, + MAX_SAFE_BUILD_LENGTH, + MAX_SAFE_INTEGER, + RELEASE_TYPES, + SEMVER_SPEC_VERSION, + FLAG_INCLUDE_PRERELEASE: 0b001, + FLAG_LOOSE: 0b010, +} diff --git a/node_modules/jest-snapshot/node_modules/semver/internal/debug.js b/node_modules/jest-snapshot/node_modules/semver/internal/debug.js new file mode 100644 index 00000000..20d1e9dc --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/internal/debug.js @@ -0,0 +1,11 @@ +'use strict' + +const debug = ( + typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG) +) ? (...args) => console.error('SEMVER', ...args) + : () => {} + +module.exports = debug diff --git a/node_modules/jest-snapshot/node_modules/semver/internal/identifiers.js b/node_modules/jest-snapshot/node_modules/semver/internal/identifiers.js new file mode 100644 index 00000000..a4613dee --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/internal/identifiers.js @@ -0,0 +1,25 @@ +'use strict' + +const numeric = /^[0-9]+$/ +const compareIdentifiers = (a, b) => { + const anum = numeric.test(a) + const bnum = numeric.test(b) + + if (anum && bnum) { + a = +a + b = +b + } + + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +} + +const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a) + +module.exports = { + compareIdentifiers, + rcompareIdentifiers, +} diff --git a/node_modules/jest-snapshot/node_modules/semver/internal/lrucache.js b/node_modules/jest-snapshot/node_modules/semver/internal/lrucache.js new file mode 100644 index 00000000..b8bf5262 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/internal/lrucache.js @@ -0,0 +1,42 @@ +'use strict' + +class LRUCache { + constructor () { + this.max = 1000 + this.map = new Map() + } + + get (key) { + const value = this.map.get(key) + if (value === undefined) { + return undefined + } else { + // Remove the key from the map and add it to the end + this.map.delete(key) + this.map.set(key, value) + return value + } + } + + delete (key) { + return this.map.delete(key) + } + + set (key, value) { + const deleted = this.delete(key) + + if (!deleted && value !== undefined) { + // If cache is full, delete the least recently used item + if (this.map.size >= this.max) { + const firstKey = this.map.keys().next().value + this.delete(firstKey) + } + + this.map.set(key, value) + } + + return this + } +} + +module.exports = LRUCache diff --git a/node_modules/jest-snapshot/node_modules/semver/internal/parse-options.js b/node_modules/jest-snapshot/node_modules/semver/internal/parse-options.js new file mode 100644 index 00000000..52954541 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/internal/parse-options.js @@ -0,0 +1,17 @@ +'use strict' + +// parse out just the options we care about +const looseOption = Object.freeze({ loose: true }) +const emptyOpts = Object.freeze({ }) +const parseOptions = options => { + if (!options) { + return emptyOpts + } + + if (typeof options !== 'object') { + return looseOption + } + + return options +} +module.exports = parseOptions diff --git a/node_modules/jest-snapshot/node_modules/semver/internal/re.js b/node_modules/jest-snapshot/node_modules/semver/internal/re.js new file mode 100644 index 00000000..4758c58d --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/internal/re.js @@ -0,0 +1,223 @@ +'use strict' + +const { + MAX_SAFE_COMPONENT_LENGTH, + MAX_SAFE_BUILD_LENGTH, + MAX_LENGTH, +} = require('./constants') +const debug = require('./debug') +exports = module.exports = {} + +// The actual regexps go on exports.re +const re = exports.re = [] +const safeRe = exports.safeRe = [] +const src = exports.src = [] +const safeSrc = exports.safeSrc = [] +const t = exports.t = {} +let R = 0 + +const LETTERDASHNUMBER = '[a-zA-Z0-9-]' + +// Replace some greedy regex tokens to prevent regex dos issues. These regex are +// used internally via the safeRe object since all inputs in this library get +// normalized first to trim and collapse all extra whitespace. The original +// regexes are exported for userland consumption and lower level usage. A +// future breaking change could export the safer regex only with a note that +// all input should have extra whitespace removed. +const safeRegexReplacements = [ + ['\\s', 1], + ['\\d', MAX_LENGTH], + [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH], +] + +const makeSafeRegex = (value) => { + for (const [token, max] of safeRegexReplacements) { + value = value + .split(`${token}*`).join(`${token}{0,${max}}`) + .split(`${token}+`).join(`${token}{1,${max}}`) + } + return value +} + +const createToken = (name, value, isGlobal) => { + const safe = makeSafeRegex(value) + const index = R++ + debug(name, index, value) + t[name] = index + src[index] = value + safeSrc[index] = safe + re[index] = new RegExp(value, isGlobal ? 'g' : undefined) + safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined) +} + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*') +createToken('NUMERICIDENTIFIERLOOSE', '\\d+') + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +createToken('NONNUMERICIDENTIFIER', `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`) + +// ## Main Version +// Three dot-separated numeric identifiers. + +createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})`) + +createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})`) + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. +// Non-numberic identifiers include numberic identifiers but can be longer. +// Therefore non-numberic identifiers must go first. + +createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER] +}|${src[t.NUMERICIDENTIFIER]})`) + +createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER] +}|${src[t.NUMERICIDENTIFIERLOOSE]})`) + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] +}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`) + +createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] +}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`) + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +createToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`) + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] +}(?:\\.${src[t.BUILDIDENTIFIER]})*))`) + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +createToken('FULLPLAIN', `v?${src[t.MAINVERSION] +}${src[t.PRERELEASE]}?${ + src[t.BUILD]}?`) + +createToken('FULL', `^${src[t.FULLPLAIN]}$`) + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] +}${src[t.PRERELEASELOOSE]}?${ + src[t.BUILD]}?`) + +createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`) + +createToken('GTLT', '((?:<|>)?=?)') + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`) +createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`) + +createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:${src[t.PRERELEASE]})?${ + src[t.BUILD]}?` + + `)?)?`) + +createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:${src[t.PRERELEASELOOSE]})?${ + src[t.BUILD]}?` + + `)?)?`) + +createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`) +createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`) + +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +createToken('COERCEPLAIN', `${'(^|[^\\d])' + + '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`) +createToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\d])`) +createToken('COERCEFULL', src[t.COERCEPLAIN] + + `(?:${src[t.PRERELEASE]})?` + + `(?:${src[t.BUILD]})?` + + `(?:$|[^\\d])`) +createToken('COERCERTL', src[t.COERCE], true) +createToken('COERCERTLFULL', src[t.COERCEFULL], true) + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +createToken('LONETILDE', '(?:~>?)') + +createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true) +exports.tildeTrimReplace = '$1~' + +createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`) +createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`) + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +createToken('LONECARET', '(?:\\^)') + +createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true) +exports.caretTrimReplace = '$1^' + +createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`) +createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`) + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`) +createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`) + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] +}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true) +exports.comparatorTrimReplace = '$1$2$3' + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAIN]})` + + `\\s*$`) + +createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAINLOOSE]})` + + `\\s*$`) + +// Star ranges basically just allow anything at all. +createToken('STAR', '(<|>)?=?\\s*\\*') +// >=0.0.0 is like a star +createToken('GTE0', '^\\s*>=\\s*0\\.0\\.0\\s*$') +createToken('GTE0PRE', '^\\s*>=\\s*0\\.0\\.0-0\\s*$') diff --git a/node_modules/jest-snapshot/node_modules/semver/package.json b/node_modules/jest-snapshot/node_modules/semver/package.json new file mode 100644 index 00000000..1fbef5a9 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/package.json @@ -0,0 +1,78 @@ +{ + "name": "semver", + "version": "7.7.2", + "description": "The semantic version parser used by npm.", + "main": "index.js", + "scripts": { + "test": "tap", + "snap": "tap", + "lint": "npm run eslint", + "postlint": "template-oss-check", + "lintfix": "npm run eslint -- --fix", + "posttest": "npm run lint", + "template-oss-apply": "template-oss-apply --force", + "eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"" + }, + "devDependencies": { + "@npmcli/eslint-config": "^5.0.0", + "@npmcli/template-oss": "4.24.3", + "benchmark": "^2.1.4", + "tap": "^16.0.0" + }, + "license": "ISC", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/node-semver.git" + }, + "bin": { + "semver": "bin/semver.js" + }, + "files": [ + "bin/", + "lib/", + "classes/", + "functions/", + "internal/", + "ranges/", + "index.js", + "preload.js", + "range.bnf" + ], + "tap": { + "timeout": 30, + "coverage-map": "map.js", + "nyc-arg": [ + "--exclude", + "tap-snapshots/**" + ] + }, + "engines": { + "node": ">=10" + }, + "author": "GitHub Inc.", + "templateOSS": { + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", + "version": "4.24.3", + "engines": ">=10", + "distPaths": [ + "classes/", + "functions/", + "internal/", + "ranges/", + "index.js", + "preload.js", + "range.bnf" + ], + "allowPaths": [ + "/classes/", + "/functions/", + "/internal/", + "/ranges/", + "/index.js", + "/preload.js", + "/range.bnf", + "/benchmarks" + ], + "publish": "true" + } +} diff --git a/node_modules/jest-snapshot/node_modules/semver/preload.js b/node_modules/jest-snapshot/node_modules/semver/preload.js new file mode 100644 index 00000000..e6c47b9b --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/preload.js @@ -0,0 +1,4 @@ +'use strict' + +// XXX remove in v8 or beyond +module.exports = require('./index.js') diff --git a/node_modules/jest-snapshot/node_modules/semver/range.bnf b/node_modules/jest-snapshot/node_modules/semver/range.bnf new file mode 100644 index 00000000..d4c6ae0d --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/range.bnf @@ -0,0 +1,16 @@ +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | [1-9] ( [0-9] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/gtr.js b/node_modules/jest-snapshot/node_modules/semver/ranges/gtr.js new file mode 100644 index 00000000..0e7601f6 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/ranges/gtr.js @@ -0,0 +1,6 @@ +'use strict' + +// Determine if version is greater than all the versions possible in the range. +const outside = require('./outside') +const gtr = (version, range, options) => outside(version, range, '>', options) +module.exports = gtr diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/intersects.js b/node_modules/jest-snapshot/node_modules/semver/ranges/intersects.js new file mode 100644 index 00000000..917be7e4 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/ranges/intersects.js @@ -0,0 +1,9 @@ +'use strict' + +const Range = require('../classes/range') +const intersects = (r1, r2, options) => { + r1 = new Range(r1, options) + r2 = new Range(r2, options) + return r1.intersects(r2, options) +} +module.exports = intersects diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/ltr.js b/node_modules/jest-snapshot/node_modules/semver/ranges/ltr.js new file mode 100644 index 00000000..aa5e568e --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/ranges/ltr.js @@ -0,0 +1,6 @@ +'use strict' + +const outside = require('./outside') +// Determine if version is less than all the versions possible in the range +const ltr = (version, range, options) => outside(version, range, '<', options) +module.exports = ltr diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/max-satisfying.js b/node_modules/jest-snapshot/node_modules/semver/ranges/max-satisfying.js new file mode 100644 index 00000000..01fe5ae3 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/ranges/max-satisfying.js @@ -0,0 +1,27 @@ +'use strict' + +const SemVer = require('../classes/semver') +const Range = require('../classes/range') + +const maxSatisfying = (versions, range, options) => { + let max = null + let maxSV = null + let rangeObj = null + try { + rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach((v) => { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { + // compare(max, v, true) + max = v + maxSV = new SemVer(max, options) + } + } + }) + return max +} +module.exports = maxSatisfying diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/min-satisfying.js b/node_modules/jest-snapshot/node_modules/semver/ranges/min-satisfying.js new file mode 100644 index 00000000..af89c8ef --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/ranges/min-satisfying.js @@ -0,0 +1,26 @@ +'use strict' + +const SemVer = require('../classes/semver') +const Range = require('../classes/range') +const minSatisfying = (versions, range, options) => { + let min = null + let minSV = null + let rangeObj = null + try { + rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach((v) => { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { + // compare(min, v, true) + min = v + minSV = new SemVer(min, options) + } + } + }) + return min +} +module.exports = minSatisfying diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/min-version.js b/node_modules/jest-snapshot/node_modules/semver/ranges/min-version.js new file mode 100644 index 00000000..09a65aa3 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/ranges/min-version.js @@ -0,0 +1,63 @@ +'use strict' + +const SemVer = require('../classes/semver') +const Range = require('../classes/range') +const gt = require('../functions/gt') + +const minVersion = (range, loose) => { + range = new Range(range, loose) + + let minver = new SemVer('0.0.0') + if (range.test(minver)) { + return minver + } + + minver = new SemVer('0.0.0-0') + if (range.test(minver)) { + return minver + } + + minver = null + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i] + + let setMin = null + comparators.forEach((comparator) => { + // Clone to avoid manipulating the comparator's semver object. + const compver = new SemVer(comparator.semver.version) + switch (comparator.operator) { + case '>': + if (compver.prerelease.length === 0) { + compver.patch++ + } else { + compver.prerelease.push(0) + } + compver.raw = compver.format() + /* fallthrough */ + case '': + case '>=': + if (!setMin || gt(compver, setMin)) { + setMin = compver + } + break + case '<': + case '<=': + /* Ignore maximum versions */ + break + /* istanbul ignore next */ + default: + throw new Error(`Unexpected operation: ${comparator.operator}`) + } + }) + if (setMin && (!minver || gt(minver, setMin))) { + minver = setMin + } + } + + if (minver && range.test(minver)) { + return minver + } + + return null +} +module.exports = minVersion diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/outside.js b/node_modules/jest-snapshot/node_modules/semver/ranges/outside.js new file mode 100644 index 00000000..ca744212 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/ranges/outside.js @@ -0,0 +1,82 @@ +'use strict' + +const SemVer = require('../classes/semver') +const Comparator = require('../classes/comparator') +const { ANY } = Comparator +const Range = require('../classes/range') +const satisfies = require('../functions/satisfies') +const gt = require('../functions/gt') +const lt = require('../functions/lt') +const lte = require('../functions/lte') +const gte = require('../functions/gte') + +const outside = (version, range, hilo, options) => { + version = new SemVer(version, options) + range = new Range(range, options) + + let gtfn, ltefn, ltfn, comp, ecomp + switch (hilo) { + case '>': + gtfn = gt + ltefn = lte + ltfn = lt + comp = '>' + ecomp = '>=' + break + case '<': + gtfn = lt + ltefn = gte + ltfn = gt + comp = '<' + ecomp = '<=' + break + default: + throw new TypeError('Must provide a hilo val of "<" or ">"') + } + + // If it satisfies the range it is not outside + if (satisfies(version, range, options)) { + return false + } + + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i] + + let high = null + let low = null + + comparators.forEach((comparator) => { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator + low = low || comparator + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator + } + }) + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false + } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false + } + } + return true +} + +module.exports = outside diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/simplify.js b/node_modules/jest-snapshot/node_modules/semver/ranges/simplify.js new file mode 100644 index 00000000..262732e6 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/ranges/simplify.js @@ -0,0 +1,49 @@ +'use strict' + +// given a set of versions and a range, create a "simplified" range +// that includes the same versions that the original range does +// If the original range is shorter than the simplified one, return that. +const satisfies = require('../functions/satisfies.js') +const compare = require('../functions/compare.js') +module.exports = (versions, range, options) => { + const set = [] + let first = null + let prev = null + const v = versions.sort((a, b) => compare(a, b, options)) + for (const version of v) { + const included = satisfies(version, range, options) + if (included) { + prev = version + if (!first) { + first = version + } + } else { + if (prev) { + set.push([first, prev]) + } + prev = null + first = null + } + } + if (first) { + set.push([first, null]) + } + + const ranges = [] + for (const [min, max] of set) { + if (min === max) { + ranges.push(min) + } else if (!max && min === v[0]) { + ranges.push('*') + } else if (!max) { + ranges.push(`>=${min}`) + } else if (min === v[0]) { + ranges.push(`<=${max}`) + } else { + ranges.push(`${min} - ${max}`) + } + } + const simplified = ranges.join(' || ') + const original = typeof range.raw === 'string' ? range.raw : String(range) + return simplified.length < original.length ? simplified : range +} diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/subset.js b/node_modules/jest-snapshot/node_modules/semver/ranges/subset.js new file mode 100644 index 00000000..2c49aef1 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/ranges/subset.js @@ -0,0 +1,249 @@ +'use strict' + +const Range = require('../classes/range.js') +const Comparator = require('../classes/comparator.js') +const { ANY } = Comparator +const satisfies = require('../functions/satisfies.js') +const compare = require('../functions/compare.js') + +// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff: +// - Every simple range `r1, r2, ...` is a null set, OR +// - Every simple range `r1, r2, ...` which is not a null set is a subset of +// some `R1, R2, ...` +// +// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff: +// - If c is only the ANY comparator +// - If C is only the ANY comparator, return true +// - Else if in prerelease mode, return false +// - else replace c with `[>=0.0.0]` +// - If C is only the ANY comparator +// - if in prerelease mode, return true +// - else replace C with `[>=0.0.0]` +// - Let EQ be the set of = comparators in c +// - If EQ is more than one, return true (null set) +// - Let GT be the highest > or >= comparator in c +// - Let LT be the lowest < or <= comparator in c +// - If GT and LT, and GT.semver > LT.semver, return true (null set) +// - If any C is a = range, and GT or LT are set, return false +// - If EQ +// - If GT, and EQ does not satisfy GT, return true (null set) +// - If LT, and EQ does not satisfy LT, return true (null set) +// - If EQ satisfies every C, return true +// - Else return false +// - If GT +// - If GT.semver is lower than any > or >= comp in C, return false +// - If GT is >=, and GT.semver does not satisfy every C, return false +// - If GT.semver has a prerelease, and not in prerelease mode +// - If no C has a prerelease and the GT.semver tuple, return false +// - If LT +// - If LT.semver is greater than any < or <= comp in C, return false +// - If LT is <=, and LT.semver does not satisfy every C, return false +// - If GT.semver has a prerelease, and not in prerelease mode +// - If no C has a prerelease and the LT.semver tuple, return false +// - Else return true + +const subset = (sub, dom, options = {}) => { + if (sub === dom) { + return true + } + + sub = new Range(sub, options) + dom = new Range(dom, options) + let sawNonNull = false + + OUTER: for (const simpleSub of sub.set) { + for (const simpleDom of dom.set) { + const isSub = simpleSubset(simpleSub, simpleDom, options) + sawNonNull = sawNonNull || isSub !== null + if (isSub) { + continue OUTER + } + } + // the null set is a subset of everything, but null simple ranges in + // a complex range should be ignored. so if we saw a non-null range, + // then we know this isn't a subset, but if EVERY simple range was null, + // then it is a subset. + if (sawNonNull) { + return false + } + } + return true +} + +const minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')] +const minimumVersion = [new Comparator('>=0.0.0')] + +const simpleSubset = (sub, dom, options) => { + if (sub === dom) { + return true + } + + if (sub.length === 1 && sub[0].semver === ANY) { + if (dom.length === 1 && dom[0].semver === ANY) { + return true + } else if (options.includePrerelease) { + sub = minimumVersionWithPreRelease + } else { + sub = minimumVersion + } + } + + if (dom.length === 1 && dom[0].semver === ANY) { + if (options.includePrerelease) { + return true + } else { + dom = minimumVersion + } + } + + const eqSet = new Set() + let gt, lt + for (const c of sub) { + if (c.operator === '>' || c.operator === '>=') { + gt = higherGT(gt, c, options) + } else if (c.operator === '<' || c.operator === '<=') { + lt = lowerLT(lt, c, options) + } else { + eqSet.add(c.semver) + } + } + + if (eqSet.size > 1) { + return null + } + + let gtltComp + if (gt && lt) { + gtltComp = compare(gt.semver, lt.semver, options) + if (gtltComp > 0) { + return null + } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) { + return null + } + } + + // will iterate one or zero times + for (const eq of eqSet) { + if (gt && !satisfies(eq, String(gt), options)) { + return null + } + + if (lt && !satisfies(eq, String(lt), options)) { + return null + } + + for (const c of dom) { + if (!satisfies(eq, String(c), options)) { + return false + } + } + + return true + } + + let higher, lower + let hasDomLT, hasDomGT + // if the subset has a prerelease, we need a comparator in the superset + // with the same tuple and a prerelease, or it's not a subset + let needDomLTPre = lt && + !options.includePrerelease && + lt.semver.prerelease.length ? lt.semver : false + let needDomGTPre = gt && + !options.includePrerelease && + gt.semver.prerelease.length ? gt.semver : false + // exception: <1.2.3-0 is the same as <1.2.3 + if (needDomLTPre && needDomLTPre.prerelease.length === 1 && + lt.operator === '<' && needDomLTPre.prerelease[0] === 0) { + needDomLTPre = false + } + + for (const c of dom) { + hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>=' + hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<=' + if (gt) { + if (needDomGTPre) { + if (c.semver.prerelease && c.semver.prerelease.length && + c.semver.major === needDomGTPre.major && + c.semver.minor === needDomGTPre.minor && + c.semver.patch === needDomGTPre.patch) { + needDomGTPre = false + } + } + if (c.operator === '>' || c.operator === '>=') { + higher = higherGT(gt, c, options) + if (higher === c && higher !== gt) { + return false + } + } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) { + return false + } + } + if (lt) { + if (needDomLTPre) { + if (c.semver.prerelease && c.semver.prerelease.length && + c.semver.major === needDomLTPre.major && + c.semver.minor === needDomLTPre.minor && + c.semver.patch === needDomLTPre.patch) { + needDomLTPre = false + } + } + if (c.operator === '<' || c.operator === '<=') { + lower = lowerLT(lt, c, options) + if (lower === c && lower !== lt) { + return false + } + } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) { + return false + } + } + if (!c.operator && (lt || gt) && gtltComp !== 0) { + return false + } + } + + // if there was a < or >, and nothing in the dom, then must be false + // UNLESS it was limited by another range in the other direction. + // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0 + if (gt && hasDomLT && !lt && gtltComp !== 0) { + return false + } + + if (lt && hasDomGT && !gt && gtltComp !== 0) { + return false + } + + // we needed a prerelease range in a specific tuple, but didn't get one + // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0, + // because it includes prereleases in the 1.2.3 tuple + if (needDomGTPre || needDomLTPre) { + return false + } + + return true +} + +// >=1.2.3 is lower than >1.2.3 +const higherGT = (a, b, options) => { + if (!a) { + return b + } + const comp = compare(a.semver, b.semver, options) + return comp > 0 ? a + : comp < 0 ? b + : b.operator === '>' && a.operator === '>=' ? b + : a +} + +// <=1.2.3 is higher than <1.2.3 +const lowerLT = (a, b, options) => { + if (!a) { + return b + } + const comp = compare(a.semver, b.semver, options) + return comp < 0 ? a + : comp > 0 ? b + : b.operator === '<' && a.operator === '<=' ? b + : a +} + +module.exports = subset diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/to-comparators.js b/node_modules/jest-snapshot/node_modules/semver/ranges/to-comparators.js new file mode 100644 index 00000000..5be25196 --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/ranges/to-comparators.js @@ -0,0 +1,10 @@ +'use strict' + +const Range = require('../classes/range') + +// Mostly just for testing and legacy API reasons +const toComparators = (range, options) => + new Range(range, options).set + .map(comp => comp.map(c => c.value).join(' ').trim().split(' ')) + +module.exports = toComparators diff --git a/node_modules/jest-snapshot/node_modules/semver/ranges/valid.js b/node_modules/jest-snapshot/node_modules/semver/ranges/valid.js new file mode 100644 index 00000000..cc6b0e9f --- /dev/null +++ b/node_modules/jest-snapshot/node_modules/semver/ranges/valid.js @@ -0,0 +1,13 @@ +'use strict' + +const Range = require('../classes/range') +const validRange = (range, options) => { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, options).range || '*' + } catch (er) { + return null + } +} +module.exports = validRange diff --git a/node_modules/jest-snapshot/package.json b/node_modules/jest-snapshot/package.json new file mode 100644 index 00000000..167dd938 --- /dev/null +++ b/node_modules/jest-snapshot/package.json @@ -0,0 +1,63 @@ +{ + "name": "jest-snapshot", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-snapshot" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "devDependencies": { + "@babel/preset-flow": "^7.7.2", + "@babel/preset-react": "^7.12.1", + "@jest/test-utils": "^29.7.0", + "@tsd/typescript": "^5.0.4", + "@types/babel__core": "^7.1.14", + "@types/graceful-fs": "^4.1.3", + "@types/natural-compare": "^1.4.0", + "@types/prettier": "^2.1.5", + "@types/semver": "^7.1.0", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "prettier": "^2.1.1", + "tsd-lite": "^0.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-util/LICENSE b/node_modules/jest-util/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-util/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-util/Readme.md b/node_modules/jest-util/Readme.md new file mode 100644 index 00000000..15f6daa4 --- /dev/null +++ b/node_modules/jest-util/Readme.md @@ -0,0 +1,87 @@ +# `@jest/utils` + +This packages is a collection of utilities and helper functions + +## `ErrorWithStack` + +This custom error class can be useful when you need to capture the stack trace of an error and provide additional context to the error message. By default, JavaScript errors only capture the stack trace when they are thrown, but this class allows you to capture the stack trace at any point in your code by calling its constructor. + +## `clearLine` + +It ensures that the clearing operation is only performed when running in a terminal environment, and not when the output is redirected to a file or another non-terminal destination. + +## `convertDescriptorToString` + +It defines a function named `convertDescriptorToString` that takes a descriptor as input and converts it to a string based on its type. It handles various types such as functions, numbers, strings, and undefined values. If the input doesn't match any of these types, it throws an error with a descriptive message. + +## `createDirectory` + +It creates new directory and also allows creation of nested directories. + +## `deepCyclicCopy` + +The `deepCyclicCopy` function provides deep copying of JavaScript objects and arrays, including handling circular references. It offers optional customization through a `DeepCyclicCopyOptions` parameter, allowing users to blacklist properties and preserve object prototypes. The function returns a completely independent deep copy of the input data structure. + +## `formatTime` + +This function is useful for formatting time values with appropriate SI unit prefixes for readability. It expresses time in various units (e.g., milliseconds, microseconds, nanoseconds) while ensuring the formatting is consistent and human-readable. + +## `globsToMatcher` + +The code efficiently converts a list of glob patterns into a reusable function for matching paths against those patterns, considering negated patterns and optimizing for performance. + +## `installCommonGlobals` + +Sets up various global variables and functions needed by the Jest testing framework. It ensures that these globals are properly set up for testing scenarios while maintaining compatibility with the environment's global object. + +## `interopRequireDefault` + +Provides a way to ensure compatibility between ES modules and CommonJS modules by handling the default export behavior appropriately. + +## `invariant` + +It is a utility used for asserting that a given condition is true. It's often used as a debugging aid during development to catch situations where an expected condition is not met. + +## `isInteractive` + +Checks whether the current environment is suitable for interactive terminal interactions. + +## `isNonNullable` + +Used to narrow down the type of a variable within a TypeScript code block, ensuring that it is safe to assume that the value is non-nullable. This can help avoid runtime errors related to null or undefined values. + +## `isPromise` + +It helps in order to determine whether a given value conforms to the structure of a Promise-like object, which typically has a `then` method. This can be useful when working with asynchronous code to ensure dealing with promises correctly. + +## `pluralize` + +This function is used to easily generate grammatically correct phrases in text output that depend on the count of items. It ensures that the word is correctly pluralized when needed. + +## `preRunMessage` + +These functions are intended for use in interactive command-line tools or scripts which provide informative messages to the user while ensuring a clean and responsive interface. + +## `replacePathSepForGlob` + +The function takes a string `path` as input and replaces backslashes ('\\') with forward slashes ('/') in the path. Used to normalize file paths to be compatible with glob patterns, ensuring consistency in path representation for different operating systems. + +## `requireOrImportModule` + +This function provides a unified way to load modules regardless of whether they use CommonJS or ESM syntax. It ensures that the default export is applied consistently when needed, allowing users to work with modules that might use different module systems. + +## `setGlobal` + +Used to set properties with specified values within a global object. It is designed to work in both browser-like and Node.js environments by accepting different types of global objects as input. + +## `specialChars` + +It defines constants and conditional values for handling platform-specific behaviors in a terminal environment. It determines if the current platform is Windows ('win32') and sets up constants for various symbols and terminal screen clearing escape sequences accordingly, ensuring proper display and behavior on both Windows and non-Windows operating systems. + +## `testPathPatternToRegExp` + +This function is used for consistency when serializing/deserializing global configurations and ensures that consistent regular expressions are produced for matching test paths. + +## `tryRealpath` + +Used to resolve the real path of a given path, but if the path doesn't exist or is a directory, it doesn't throw an error and returns the original path string. This can be useful for gracefully handling path resolution in scenarios where some paths might not exist or might be directories. diff --git a/node_modules/jest-util/build/ErrorWithStack.js b/node_modules/jest-util/build/ErrorWithStack.js new file mode 100644 index 00000000..43aa026b --- /dev/null +++ b/node_modules/jest-util/build/ErrorWithStack.js @@ -0,0 +1,28 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +class ErrorWithStack extends Error { + constructor(message, callsite, stackLimit) { + // Ensure we have a large stack length so we get full details. + const originalStackLimit = Error.stackTraceLimit; + if (stackLimit) { + Error.stackTraceLimit = Math.max(stackLimit, originalStackLimit || 10); + } + super(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, callsite); + } + Error.stackTraceLimit = originalStackLimit; + } +} +exports.default = ErrorWithStack; diff --git a/node_modules/jest-util/build/clearLine.js b/node_modules/jest-util/build/clearLine.js new file mode 100644 index 00000000..3db59014 --- /dev/null +++ b/node_modules/jest-util/build/clearLine.js @@ -0,0 +1,18 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = clearLine; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function clearLine(stream) { + if (stream.isTTY) { + stream.write('\x1b[999D\x1b[K'); + } +} diff --git a/node_modules/jest-util/build/convertDescriptorToString.js b/node_modules/jest-util/build/convertDescriptorToString.js new file mode 100644 index 00000000..e4b8e58b --- /dev/null +++ b/node_modules/jest-util/build/convertDescriptorToString.js @@ -0,0 +1,30 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = convertDescriptorToString; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function convertDescriptorToString(descriptor) { + switch (typeof descriptor) { + case 'function': + if (descriptor.name) { + return descriptor.name; + } + break; + case 'number': + case 'undefined': + return `${descriptor}`; + case 'string': + return descriptor; + } + throw new Error( + `Invalid first argument, ${descriptor}. It must be a named class, named function, number, or string.` + ); +} diff --git a/node_modules/jest-util/build/createDirectory.js b/node_modules/jest-util/build/createDirectory.js new file mode 100644 index 00000000..693b93b6 --- /dev/null +++ b/node_modules/jest-util/build/createDirectory.js @@ -0,0 +1,71 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = createDirectory; +function fs() { + const data = _interopRequireWildcard(require('graceful-fs')); + fs = function () { + return data; + }; + return data; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function createDirectory(path) { + try { + fs().mkdirSync(path, { + recursive: true + }); + } catch (e) { + if (e.code !== 'EEXIST') { + throw e; + } + } +} diff --git a/node_modules/jest-util/build/createProcessObject.js b/node_modules/jest-util/build/createProcessObject.js new file mode 100644 index 00000000..3111418a --- /dev/null +++ b/node_modules/jest-util/build/createProcessObject.js @@ -0,0 +1,109 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = createProcessObject; +var _deepCyclicCopy = _interopRequireDefault(require('./deepCyclicCopy')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const BLACKLIST = new Set(['env', 'mainModule', '_events']); +const isWin32 = process.platform === 'win32'; +const proto = Object.getPrototypeOf(process.env); + +// The "process.env" object has a bunch of particularities: first, it does not +// directly extend from Object; second, it converts any assigned value to a +// string; and third, it is case-insensitive in Windows. We use a proxy here to +// mimic it (see https://nodejs.org/api/process.html#process_process_env). + +function createProcessEnv() { + const real = Object.create(proto); + const lookup = {}; + function deletePropertyWin32(_target, key) { + for (const name in real) { + if (Object.prototype.hasOwnProperty.call(real, name)) { + if (typeof key === 'string') { + if (name.toLowerCase() === key.toLowerCase()) { + delete real[name]; + delete lookup[name.toLowerCase()]; + } + } else { + if (key === name) { + delete real[name]; + delete lookup[name]; + } + } + } + } + return true; + } + function deleteProperty(_target, key) { + delete real[key]; + delete lookup[key]; + return true; + } + function getProperty(_target, key) { + return real[key]; + } + function getPropertyWin32(_target, key) { + if (typeof key === 'string') { + return lookup[key in proto ? key : key.toLowerCase()]; + } else { + return real[key]; + } + } + const proxy = new Proxy(real, { + deleteProperty: isWin32 ? deletePropertyWin32 : deleteProperty, + get: isWin32 ? getPropertyWin32 : getProperty, + set(_target, key, value) { + const strValue = `${value}`; + if (typeof key === 'string') { + lookup[key.toLowerCase()] = strValue; + } + real[key] = strValue; + return true; + } + }); + return Object.assign(proxy, process.env); +} +function createProcessObject() { + const process = require('process'); + const newProcess = (0, _deepCyclicCopy.default)(process, { + blacklist: BLACKLIST, + keepPrototype: true + }); + try { + // This fails on Node 12, but it's already set to 'process' + newProcess[Symbol.toStringTag] = 'process'; + } catch (e) { + // Make sure it's actually set instead of potentially ignoring errors + if (newProcess[Symbol.toStringTag] !== 'process') { + e.message = `Unable to set toStringTag on process. Please open up an issue at https://github.com/jestjs/jest\n\n${e.message}`; + throw e; + } + } + + // Sequentially execute all constructors over the object. + let proto = process; + while ((proto = Object.getPrototypeOf(proto))) { + if (typeof proto.constructor === 'function') { + proto.constructor.call(newProcess); + } + } + newProcess.env = createProcessEnv(); + newProcess.send = () => true; + Object.defineProperty(newProcess, 'domain', { + get() { + return process.domain; + } + }); + return newProcess; +} diff --git a/node_modules/jest-util/build/deepCyclicCopy.js b/node_modules/jest-util/build/deepCyclicCopy.js new file mode 100644 index 00000000..e847a785 --- /dev/null +++ b/node_modules/jest-util/build/deepCyclicCopy.js @@ -0,0 +1,76 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = deepCyclicCopy; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const EMPTY = new Set(); +function deepCyclicCopy( + value, + options = { + blacklist: EMPTY, + keepPrototype: false + }, + cycles = new WeakMap() +) { + if (typeof value !== 'object' || value === null || Buffer.isBuffer(value)) { + return value; + } else if (cycles.has(value)) { + return cycles.get(value); + } else if (Array.isArray(value)) { + return deepCyclicCopyArray(value, options, cycles); + } else { + return deepCyclicCopyObject(value, options, cycles); + } +} +function deepCyclicCopyObject(object, options, cycles) { + const newObject = options.keepPrototype + ? Object.create(Object.getPrototypeOf(object)) + : {}; + const descriptors = Object.getOwnPropertyDescriptors(object); + cycles.set(object, newObject); + Object.keys(descriptors).forEach(key => { + if (options.blacklist && options.blacklist.has(key)) { + delete descriptors[key]; + return; + } + const descriptor = descriptors[key]; + if (typeof descriptor.value !== 'undefined') { + descriptor.value = deepCyclicCopy( + descriptor.value, + { + blacklist: EMPTY, + keepPrototype: options.keepPrototype + }, + cycles + ); + } + descriptor.configurable = true; + }); + return Object.defineProperties(newObject, descriptors); +} +function deepCyclicCopyArray(array, options, cycles) { + const newArray = options.keepPrototype + ? new (Object.getPrototypeOf(array).constructor)(array.length) + : []; + const length = array.length; + cycles.set(array, newArray); + for (let i = 0; i < length; i++) { + newArray[i] = deepCyclicCopy( + array[i], + { + blacklist: EMPTY, + keepPrototype: options.keepPrototype + }, + cycles + ); + } + return newArray; +} diff --git a/node_modules/jest-util/build/formatTime.js b/node_modules/jest-util/build/formatTime.js new file mode 100644 index 00000000..deac8d27 --- /dev/null +++ b/node_modules/jest-util/build/formatTime.js @@ -0,0 +1,24 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = formatTime; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function formatTime(time, prefixPower = -3, padLeftLength = 0) { + const prefixes = ['n', 'μ', 'm', '']; + const prefixIndex = Math.max( + 0, + Math.min( + Math.trunc(prefixPower / 3) + prefixes.length - 1, + prefixes.length - 1 + ) + ); + return `${String(time).padStart(padLeftLength)} ${prefixes[prefixIndex]}s`; +} diff --git a/node_modules/jest-util/build/globsToMatcher.js b/node_modules/jest-util/build/globsToMatcher.js new file mode 100644 index 00000000..7a609119 --- /dev/null +++ b/node_modules/jest-util/build/globsToMatcher.js @@ -0,0 +1,98 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = globsToMatcher; +function _picomatch() { + const data = _interopRequireDefault(require('picomatch')); + _picomatch = function () { + return data; + }; + return data; +} +var _replacePathSepForGlob = _interopRequireDefault( + require('./replacePathSepForGlob') +); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const globsToMatchersMap = new Map(); +const picomatchOptions = { + dot: true +}; + +/** + * Converts a list of globs into a function that matches a path against the + * globs. + * + * Every time picomatch is called, it will parse the glob strings and turn + * them into regexp instances. Instead of calling picomatch repeatedly with + * the same globs, we can use this function which will build the picomatch + * matchers ahead of time and then have an optimized path for determining + * whether an individual path matches. + * + * This function is intended to match the behavior of `micromatch()`. + * + * @example + * const isMatch = globsToMatcher(['*.js', '!*.test.js']); + * isMatch('pizza.js'); // true + * isMatch('pizza.test.js'); // false + */ +function globsToMatcher(globs) { + if (globs.length === 0) { + // Since there were no globs given, we can simply have a fast path here and + // return with a very simple function. + return () => false; + } + const matchers = globs.map(glob => { + if (!globsToMatchersMap.has(glob)) { + const isMatch = (0, _picomatch().default)(glob, picomatchOptions, true); + const matcher = { + isMatch, + // Matchers that are negated have different behavior than matchers that + // are not negated, so we need to store this information ahead of time. + negated: isMatch.state.negated || !!isMatch.state.negatedExtglob + }; + globsToMatchersMap.set(glob, matcher); + } + return globsToMatchersMap.get(glob); + }); + return path => { + const replacedPath = (0, _replacePathSepForGlob.default)(path); + let kept = undefined; + let negatives = 0; + for (let i = 0; i < matchers.length; i++) { + const {isMatch, negated} = matchers[i]; + if (negated) { + negatives++; + } + const matched = isMatch(replacedPath); + if (!matched && negated) { + // The path was not matched, and the matcher is a negated matcher, so we + // want to omit the path. This means that the negative matcher is + // filtering the path out. + kept = false; + } else if (matched && !negated) { + // The path was matched, and the matcher is not a negated matcher, so we + // want to keep the path. + kept = true; + } + } + + // If all of the globs were negative globs, then we want to include the path + // as long as it was not explicitly not kept. Otherwise only include + // the path if it was kept. This allows sets of globs that are all negated + // to allow some paths to be matched, while sets of globs that are mixed + // negated and non-negated to cause the negated matchers to only omit paths + // and not keep them. + return negatives === matchers.length ? kept !== false : !!kept; + }; +} diff --git a/node_modules/jest-util/build/index.d.ts b/node_modules/jest-util/build/index.d.ts new file mode 100644 index 00000000..50e92211 --- /dev/null +++ b/node_modules/jest-util/build/index.d.ts @@ -0,0 +1,136 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/// + +import type {Config} from '@jest/types'; +import type {Global} from '@jest/types'; + +declare const ARROW = ' \u203A '; + +declare const CLEAR: string; + +export declare function clearLine(stream: NodeJS.WriteStream): void; + +export declare function convertDescriptorToString( + descriptor: Global.BlockNameLike | undefined, +): string; + +export declare function createDirectory(path: string): void; + +export declare function deepCyclicCopy( + value: T, + options?: DeepCyclicCopyOptions, + cycles?: WeakMap, +): T; + +declare type DeepCyclicCopyOptions = { + blacklist?: Set; + keepPrototype?: boolean; +}; + +export declare class ErrorWithStack extends Error { + constructor( + message: string | undefined, + callsite: (...args: Array) => unknown, + stackLimit?: number, + ); +} + +export declare function formatTime( + time: number, + prefixPower?: number, + padLeftLength?: number, +): string; + +/** + * Converts a list of globs into a function that matches a path against the + * globs. + * + * Every time picomatch is called, it will parse the glob strings and turn + * them into regexp instances. Instead of calling picomatch repeatedly with + * the same globs, we can use this function which will build the picomatch + * matchers ahead of time and then have an optimized path for determining + * whether an individual path matches. + * + * This function is intended to match the behavior of `micromatch()`. + * + * @example + * const isMatch = globsToMatcher(['*.js', '!*.test.js']); + * isMatch('pizza.js'); // true + * isMatch('pizza.test.js'); // false + */ +export declare function globsToMatcher(globs: Array): Matcher; + +declare const ICONS: { + failed: string; + pending: string; + success: string; + todo: string; +}; + +export declare function installCommonGlobals( + globalObject: typeof globalThis, + globals: Config.ConfigGlobals, +): typeof globalThis & Config.ConfigGlobals; + +export declare function interopRequireDefault(obj: any): any; + +export declare function invariant( + condition: unknown, + message?: string, +): asserts condition; + +export declare const isInteractive: boolean; + +export declare function isNonNullable(value: T): value is NonNullable; + +export declare function isPromise( + candidate: unknown, +): candidate is PromiseLike; + +declare type Matcher = (str: string) => boolean; + +export declare function pluralize( + word: string, + count: number, + ending?: string, +): string; + +declare namespace preRunMessage { + export {print_2 as print, remove}; +} +export {preRunMessage}; + +declare function print_2(stream: NodeJS.WriteStream): void; + +declare function remove(stream: NodeJS.WriteStream): void; + +export declare function replacePathSepForGlob(path: string): string; + +export declare function requireOrImportModule( + filePath: string, + applyInteropRequireDefault?: boolean, +): Promise; + +export declare function setGlobal( + globalToMutate: typeof globalThis | Global.Global, + key: string, + value: unknown, +): void; + +declare namespace specialChars { + export {ARROW, ICONS, CLEAR}; +} +export {specialChars}; + +export declare function testPathPatternToRegExp( + testPathPattern: Config.GlobalConfig['testPathPattern'], +): RegExp; + +export declare function tryRealpath(path: string): string; + +export {}; diff --git a/node_modules/jest-util/build/index.js b/node_modules/jest-util/build/index.js new file mode 100644 index 00000000..c235000b --- /dev/null +++ b/node_modules/jest-util/build/index.js @@ -0,0 +1,199 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +Object.defineProperty(exports, 'ErrorWithStack', { + enumerable: true, + get: function () { + return _ErrorWithStack.default; + } +}); +Object.defineProperty(exports, 'clearLine', { + enumerable: true, + get: function () { + return _clearLine.default; + } +}); +Object.defineProperty(exports, 'convertDescriptorToString', { + enumerable: true, + get: function () { + return _convertDescriptorToString.default; + } +}); +Object.defineProperty(exports, 'createDirectory', { + enumerable: true, + get: function () { + return _createDirectory.default; + } +}); +Object.defineProperty(exports, 'deepCyclicCopy', { + enumerable: true, + get: function () { + return _deepCyclicCopy.default; + } +}); +Object.defineProperty(exports, 'formatTime', { + enumerable: true, + get: function () { + return _formatTime.default; + } +}); +Object.defineProperty(exports, 'globsToMatcher', { + enumerable: true, + get: function () { + return _globsToMatcher.default; + } +}); +Object.defineProperty(exports, 'installCommonGlobals', { + enumerable: true, + get: function () { + return _installCommonGlobals.default; + } +}); +Object.defineProperty(exports, 'interopRequireDefault', { + enumerable: true, + get: function () { + return _interopRequireDefault.default; + } +}); +Object.defineProperty(exports, 'invariant', { + enumerable: true, + get: function () { + return _invariant.default; + } +}); +Object.defineProperty(exports, 'isInteractive', { + enumerable: true, + get: function () { + return _isInteractive.default; + } +}); +Object.defineProperty(exports, 'isNonNullable', { + enumerable: true, + get: function () { + return _isNonNullable.default; + } +}); +Object.defineProperty(exports, 'isPromise', { + enumerable: true, + get: function () { + return _isPromise.default; + } +}); +Object.defineProperty(exports, 'pluralize', { + enumerable: true, + get: function () { + return _pluralize.default; + } +}); +exports.preRunMessage = void 0; +Object.defineProperty(exports, 'replacePathSepForGlob', { + enumerable: true, + get: function () { + return _replacePathSepForGlob.default; + } +}); +Object.defineProperty(exports, 'requireOrImportModule', { + enumerable: true, + get: function () { + return _requireOrImportModule.default; + } +}); +Object.defineProperty(exports, 'setGlobal', { + enumerable: true, + get: function () { + return _setGlobal.default; + } +}); +exports.specialChars = void 0; +Object.defineProperty(exports, 'testPathPatternToRegExp', { + enumerable: true, + get: function () { + return _testPathPatternToRegExp.default; + } +}); +Object.defineProperty(exports, 'tryRealpath', { + enumerable: true, + get: function () { + return _tryRealpath.default; + } +}); +var preRunMessage = _interopRequireWildcard(require('./preRunMessage')); +exports.preRunMessage = preRunMessage; +var specialChars = _interopRequireWildcard(require('./specialChars')); +exports.specialChars = specialChars; +var _clearLine = _interopRequireDefault2(require('./clearLine')); +var _createDirectory = _interopRequireDefault2(require('./createDirectory')); +var _ErrorWithStack = _interopRequireDefault2(require('./ErrorWithStack')); +var _installCommonGlobals = _interopRequireDefault2( + require('./installCommonGlobals') +); +var _interopRequireDefault = _interopRequireDefault2( + require('./interopRequireDefault') +); +var _isInteractive = _interopRequireDefault2(require('./isInteractive')); +var _isPromise = _interopRequireDefault2(require('./isPromise')); +var _setGlobal = _interopRequireDefault2(require('./setGlobal')); +var _deepCyclicCopy = _interopRequireDefault2(require('./deepCyclicCopy')); +var _convertDescriptorToString = _interopRequireDefault2( + require('./convertDescriptorToString') +); +var _replacePathSepForGlob = _interopRequireDefault2( + require('./replacePathSepForGlob') +); +var _testPathPatternToRegExp = _interopRequireDefault2( + require('./testPathPatternToRegExp') +); +var _globsToMatcher = _interopRequireDefault2(require('./globsToMatcher')); +var _pluralize = _interopRequireDefault2(require('./pluralize')); +var _formatTime = _interopRequireDefault2(require('./formatTime')); +var _tryRealpath = _interopRequireDefault2(require('./tryRealpath')); +var _requireOrImportModule = _interopRequireDefault2( + require('./requireOrImportModule') +); +var _invariant = _interopRequireDefault2(require('./invariant')); +var _isNonNullable = _interopRequireDefault2(require('./isNonNullable')); +function _interopRequireDefault2(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} diff --git a/node_modules/jest-util/build/installCommonGlobals.js b/node_modules/jest-util/build/installCommonGlobals.js new file mode 100644 index 00000000..9c72bc5f --- /dev/null +++ b/node_modules/jest-util/build/installCommonGlobals.js @@ -0,0 +1,115 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = installCommonGlobals; +function fs() { + const data = _interopRequireWildcard(require('graceful-fs')); + fs = function () { + return data; + }; + return data; +} +var _createProcessObject = _interopRequireDefault( + require('./createProcessObject') +); +var _deepCyclicCopy = _interopRequireDefault(require('./deepCyclicCopy')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== 'function') return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function (nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interopRequireWildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { + return {default: obj}; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = {}; + var hasPropertyDescriptor = + Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) { + if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const DTRACE = Object.keys(globalThis).filter(key => key.startsWith('DTRACE')); +function installCommonGlobals(globalObject, globals) { + globalObject.process = (0, _createProcessObject.default)(); + const symbol = globalObject.Symbol; + // Keep a reference to some globals that Jest needs + Object.defineProperties(globalObject, { + [symbol.for('jest-native-promise')]: { + enumerable: false, + value: Promise, + writable: false + }, + [symbol.for('jest-native-now')]: { + enumerable: false, + value: globalObject.Date.now.bind(globalObject.Date), + writable: false + }, + [symbol.for('jest-native-read-file')]: { + enumerable: false, + value: fs().readFileSync.bind(fs()), + writable: false + }, + [symbol.for('jest-native-write-file')]: { + enumerable: false, + value: fs().writeFileSync.bind(fs()), + writable: false + }, + [symbol.for('jest-native-exists-file')]: { + enumerable: false, + value: fs().existsSync.bind(fs()), + writable: false + }, + 'jest-symbol-do-not-touch': { + enumerable: false, + value: symbol, + writable: false + } + }); + + // Forward some APIs. + DTRACE.forEach(dtrace => { + // @ts-expect-error: no index + globalObject[dtrace] = function (...args) { + // @ts-expect-error: no index + return globalThis[dtrace].apply(this, args); + }; + }); + return Object.assign(globalObject, (0, _deepCyclicCopy.default)(globals)); +} diff --git a/node_modules/jest-util/build/interopRequireDefault.js b/node_modules/jest-util/build/interopRequireDefault.js new file mode 100644 index 00000000..851074af --- /dev/null +++ b/node_modules/jest-util/build/interopRequireDefault.js @@ -0,0 +1,22 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = interopRequireDefault; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// copied from https://github.com/babel/babel/blob/56044c7851d583d498f919e9546caddf8f80a72f/packages/babel-helpers/src/helpers.js#L558-L562 +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +function interopRequireDefault(obj) { + return obj && obj.__esModule + ? obj + : { + default: obj + }; +} diff --git a/node_modules/jest-util/build/invariant.js b/node_modules/jest-util/build/invariant.js new file mode 100644 index 00000000..62fe5d9b --- /dev/null +++ b/node_modules/jest-util/build/invariant.js @@ -0,0 +1,18 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = invariant; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function invariant(condition, message = '') { + if (!condition) { + throw new Error(message); + } +} diff --git a/node_modules/jest-util/build/isInteractive.js b/node_modules/jest-util/build/isInteractive.js new file mode 100644 index 00000000..b4588ba0 --- /dev/null +++ b/node_modules/jest-util/build/isInteractive.js @@ -0,0 +1,22 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function _ciInfo() { + const data = require('ci-info'); + _ciInfo = function () { + return data; + }; + return data; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var _default = + !!process.stdout.isTTY && process.env.TERM !== 'dumb' && !_ciInfo().isCI; +exports.default = _default; diff --git a/node_modules/jest-util/build/isNonNullable.js b/node_modules/jest-util/build/isNonNullable.js new file mode 100644 index 00000000..d7602b01 --- /dev/null +++ b/node_modules/jest-util/build/isNonNullable.js @@ -0,0 +1,16 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = isNonNullable; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function isNonNullable(value) { + return value != null; +} diff --git a/node_modules/jest-util/build/isPromise.js b/node_modules/jest-util/build/isPromise.js new file mode 100644 index 00000000..53dd5df4 --- /dev/null +++ b/node_modules/jest-util/build/isPromise.js @@ -0,0 +1,20 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = isPromise; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function isPromise(candidate) { + return ( + candidate != null && + (typeof candidate === 'object' || typeof candidate === 'function') && + typeof candidate.then === 'function' + ); +} diff --git a/node_modules/jest-util/build/pluralize.js b/node_modules/jest-util/build/pluralize.js new file mode 100644 index 00000000..b2889ed1 --- /dev/null +++ b/node_modules/jest-util/build/pluralize.js @@ -0,0 +1,16 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = pluralize; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function pluralize(word, count, ending = 's') { + return `${count} ${word}${count === 1 ? '' : ending}`; +} diff --git a/node_modules/jest-util/build/preRunMessage.js b/node_modules/jest-util/build/preRunMessage.js new file mode 100644 index 00000000..3f614b40 --- /dev/null +++ b/node_modules/jest-util/build/preRunMessage.js @@ -0,0 +1,38 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.print = print; +exports.remove = remove; +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +var _clearLine = _interopRequireDefault(require('./clearLine')); +var _isInteractive = _interopRequireDefault(require('./isInteractive')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function print(stream) { + if (_isInteractive.default) { + stream.write( + _chalk().default.bold.dim('Determining test suites to run...') + ); + } +} +function remove(stream) { + if (_isInteractive.default) { + (0, _clearLine.default)(stream); + } +} diff --git a/node_modules/jest-util/build/replacePathSepForGlob.js b/node_modules/jest-util/build/replacePathSepForGlob.js new file mode 100644 index 00000000..ff806639 --- /dev/null +++ b/node_modules/jest-util/build/replacePathSepForGlob.js @@ -0,0 +1,16 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = replacePathSepForGlob; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function replacePathSepForGlob(path) { + return path.replace(/\\(?![{}()+?.^$])/g, '/'); +} diff --git a/node_modules/jest-util/build/requireOrImportModule.js b/node_modules/jest-util/build/requireOrImportModule.js new file mode 100644 index 00000000..10c6e1ad --- /dev/null +++ b/node_modules/jest-util/build/requireOrImportModule.js @@ -0,0 +1,77 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = requireOrImportModule; +function _path() { + const data = require('path'); + _path = function () { + return data; + }; + return data; +} +function _url() { + const data = require('url'); + _url = function () { + return data; + }; + return data; +} +var _interopRequireDefault = _interopRequireDefault2( + require('./interopRequireDefault') +); +function _interopRequireDefault2(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +async function requireOrImportModule( + filePath, + applyInteropRequireDefault = true +) { + if (!(0, _path().isAbsolute)(filePath) && filePath[0] === '.') { + throw new Error( + `Jest: requireOrImportModule path must be absolute, was "${filePath}"` + ); + } + try { + const requiredModule = require(filePath); + if (!applyInteropRequireDefault) { + return requiredModule; + } + return (0, _interopRequireDefault.default)(requiredModule).default; + } catch (error) { + if (error.code === 'ERR_REQUIRE_ESM') { + try { + const moduleUrl = (0, _url().pathToFileURL)(filePath); + + // node `import()` supports URL, but TypeScript doesn't know that + const importedModule = await import(moduleUrl.href); + if (!applyInteropRequireDefault) { + return importedModule; + } + if (!importedModule.default) { + throw new Error( + `Jest: Failed to load ESM at ${filePath} - did you use a default export?` + ); + } + return importedModule.default; + } catch (innerError) { + if (innerError.message === 'Not supported') { + throw new Error( + `Jest: Your version of Node does not support dynamic import - please enable it or use a .cjs file extension for file ${filePath}` + ); + } + throw innerError; + } + } else { + throw error; + } + } +} diff --git a/node_modules/jest-util/build/setGlobal.js b/node_modules/jest-util/build/setGlobal.js new file mode 100644 index 00000000..d4b2eb04 --- /dev/null +++ b/node_modules/jest-util/build/setGlobal.js @@ -0,0 +1,17 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = setGlobal; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function setGlobal(globalToMutate, key, value) { + // @ts-expect-error: no index + globalToMutate[key] = value; +} diff --git a/node_modules/jest-util/build/specialChars.js b/node_modules/jest-util/build/specialChars.js new file mode 100644 index 00000000..ce5de433 --- /dev/null +++ b/node_modules/jest-util/build/specialChars.js @@ -0,0 +1,25 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.ICONS = exports.CLEAR = exports.ARROW = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const isWindows = process.platform === 'win32'; +const ARROW = ' \u203A '; +exports.ARROW = ARROW; +const ICONS = { + failed: isWindows ? '\u00D7' : '\u2715', + pending: '\u25CB', + success: isWindows ? '\u221A' : '\u2713', + todo: '\u270E' +}; +exports.ICONS = ICONS; +const CLEAR = isWindows ? '\x1B[2J\x1B[0f' : '\x1B[2J\x1B[3J\x1B[H'; +exports.CLEAR = CLEAR; diff --git a/node_modules/jest-util/build/testPathPatternToRegExp.js b/node_modules/jest-util/build/testPathPatternToRegExp.js new file mode 100644 index 00000000..3db3b616 --- /dev/null +++ b/node_modules/jest-util/build/testPathPatternToRegExp.js @@ -0,0 +1,19 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = testPathPatternToRegExp; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// Because we serialize/deserialize globalConfig when we spawn workers, +// we can't pass regular expression. Using this shared function on both sides +// will ensure that we produce consistent regexp for testPathPattern. +function testPathPatternToRegExp(testPathPattern) { + return new RegExp(testPathPattern, 'i'); +} diff --git a/node_modules/jest-util/build/tryRealpath.js b/node_modules/jest-util/build/tryRealpath.js new file mode 100644 index 00000000..cdd47e05 --- /dev/null +++ b/node_modules/jest-util/build/tryRealpath.js @@ -0,0 +1,30 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = tryRealpath; +function _gracefulFs() { + const data = require('graceful-fs'); + _gracefulFs = function () { + return data; + }; + return data; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function tryRealpath(path) { + try { + path = _gracefulFs().realpathSync.native(path); + } catch (error) { + if (error.code !== 'ENOENT' && error.code !== 'EISDIR') { + throw error; + } + } + return path; +} diff --git a/node_modules/jest-util/node_modules/picomatch/CHANGELOG.md b/node_modules/jest-util/node_modules/picomatch/CHANGELOG.md new file mode 100644 index 00000000..8ccc6c1b --- /dev/null +++ b/node_modules/jest-util/node_modules/picomatch/CHANGELOG.md @@ -0,0 +1,136 @@ +# Release history + +**All notable changes to this project will be documented in this file.** + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +

+ Guiding Principles + +- Changelogs are for humans, not machines. +- There should be an entry for every single version. +- The same types of changes should be grouped. +- Versions and sections should be linkable. +- The latest version comes first. +- The release date of each versions is displayed. +- Mention whether you follow Semantic Versioning. + +
+ +
+ Types of changes + +Changelog entries are classified using the following labels _(from [keep-a-changelog](http://keepachangelog.com/)_): + +- `Added` for new features. +- `Changed` for changes in existing functionality. +- `Deprecated` for soon-to-be removed features. +- `Removed` for now removed features. +- `Fixed` for any bug fixes. +- `Security` in case of vulnerabilities. + +
+ +## 2.3.1 (2022-01-02) + +### Fixed + +* Fixes bug when a pattern containing an expression after the closing parenthesis (`/!(*.d).{ts,tsx}`) was incorrectly converted to regexp ([9f241ef](https://github.com/micromatch/picomatch/commit/9f241ef)). + +### Changed + +* Some documentation improvements ([f81d236](https://github.com/micromatch/picomatch/commit/f81d236), [421e0e7](https://github.com/micromatch/picomatch/commit/421e0e7)). + +## 2.3.0 (2021-05-21) + +### Fixed + +* Fixes bug where file names with two dots were not being matched consistently with negation extglobs containing a star ([56083ef](https://github.com/micromatch/picomatch/commit/56083ef)) + +## 2.2.3 (2021-04-10) + +### Fixed + +* Do not skip pattern seperator for square brackets ([fb08a30](https://github.com/micromatch/picomatch/commit/fb08a30)). +* Set negatedExtGlob also if it does not span the whole pattern ([032e3f5](https://github.com/micromatch/picomatch/commit/032e3f5)). + +## 2.2.2 (2020-03-21) + +### Fixed + +* Correctly handle parts of the pattern after parentheses in the `scan` method ([e15b920](https://github.com/micromatch/picomatch/commit/e15b920)). + +## 2.2.1 (2020-01-04) + +* Fixes [#49](https://github.com/micromatch/picomatch/issues/49), so that braces with no sets or ranges are now propertly treated as literals. + +## 2.2.0 (2020-01-04) + +* Disable fastpaths mode for the parse method ([5b8d33f](https://github.com/micromatch/picomatch/commit/5b8d33f)) +* Add `tokens`, `slashes`, and `parts` to the object returned by `picomatch.scan()`. + +## 2.1.0 (2019-10-31) + +* add benchmarks for scan ([4793b92](https://github.com/micromatch/picomatch/commit/4793b92)) +* Add eslint object-curly-spacing rule ([707c650](https://github.com/micromatch/picomatch/commit/707c650)) +* Add prefer-const eslint rule ([5c7501c](https://github.com/micromatch/picomatch/commit/5c7501c)) +* Add support for nonegate in scan API ([275c9b9](https://github.com/micromatch/picomatch/commit/275c9b9)) +* Change lets to consts. Move root import up. ([4840625](https://github.com/micromatch/picomatch/commit/4840625)) +* closes https://github.com/micromatch/picomatch/issues/21 ([766bcb0](https://github.com/micromatch/picomatch/commit/766bcb0)) +* Fix "Extglobs" table in readme ([eb19da8](https://github.com/micromatch/picomatch/commit/eb19da8)) +* fixes https://github.com/micromatch/picomatch/issues/20 ([9caca07](https://github.com/micromatch/picomatch/commit/9caca07)) +* fixes https://github.com/micromatch/picomatch/issues/26 ([fa58f45](https://github.com/micromatch/picomatch/commit/fa58f45)) +* Lint test ([d433a34](https://github.com/micromatch/picomatch/commit/d433a34)) +* lint unit tests ([0159b55](https://github.com/micromatch/picomatch/commit/0159b55)) +* Make scan work with noext ([6c02e03](https://github.com/micromatch/picomatch/commit/6c02e03)) +* minor linting ([c2a2b87](https://github.com/micromatch/picomatch/commit/c2a2b87)) +* minor parser improvements ([197671d](https://github.com/micromatch/picomatch/commit/197671d)) +* remove eslint since it... ([07876fa](https://github.com/micromatch/picomatch/commit/07876fa)) +* remove funding file ([8ebe96d](https://github.com/micromatch/picomatch/commit/8ebe96d)) +* Remove unused funks ([cbc6d54](https://github.com/micromatch/picomatch/commit/cbc6d54)) +* Run eslint during pretest, fix existing eslint findings ([0682367](https://github.com/micromatch/picomatch/commit/0682367)) +* support `noparen` in scan ([3d37569](https://github.com/micromatch/picomatch/commit/3d37569)) +* update changelog ([7b34e77](https://github.com/micromatch/picomatch/commit/7b34e77)) +* update travis ([777f038](https://github.com/micromatch/picomatch/commit/777f038)) +* Use eslint-disable-next-line instead of eslint-disable ([4e7c1fd](https://github.com/micromatch/picomatch/commit/4e7c1fd)) + +## 2.0.7 (2019-05-14) + +* 2.0.7 ([9eb9a71](https://github.com/micromatch/picomatch/commit/9eb9a71)) +* supports lookbehinds ([1f63f7e](https://github.com/micromatch/picomatch/commit/1f63f7e)) +* update .verb.md file with typo change ([2741279](https://github.com/micromatch/picomatch/commit/2741279)) +* fix: typo in README ([0753e44](https://github.com/micromatch/picomatch/commit/0753e44)) + +## 2.0.4 (2019-04-10) + +### Fixed + +- Readme link [fixed](https://github.com/micromatch/picomatch/pull/13/commits/a96ab3aa2b11b6861c23289964613d85563b05df) by @danez. +- `options.capture` now works as expected when fastpaths are enabled. See https://github.com/micromatch/picomatch/pull/12/commits/26aefd71f1cfaf95c37f1c1fcab68a693b037304. Thanks to @DrPizza. + +## 2.0.0 (2019-04-10) + +### Added + +- Adds support for `options.onIgnore`. See the readme for details +- Adds support for `options.onResult`. See the readme for details + +### Breaking changes + +- The unixify option was renamed to `windows` +- caching and all related options and methods have been removed + +## 1.0.0 (2018-11-05) + +- adds `.onMatch` option +- improvements to `.scan` method +- numerous improvements and optimizations for matching and parsing +- better windows path handling + +## 0.1.0 - 2017-04-13 + +First release. + + +[keep-a-changelog]: https://github.com/olivierlacan/keep-a-changelog diff --git a/node_modules/jest-util/node_modules/picomatch/LICENSE b/node_modules/jest-util/node_modules/picomatch/LICENSE new file mode 100644 index 00000000..3608dca2 --- /dev/null +++ b/node_modules/jest-util/node_modules/picomatch/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017-present, Jon Schlinkert. + +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/jest-util/node_modules/picomatch/README.md b/node_modules/jest-util/node_modules/picomatch/README.md new file mode 100644 index 00000000..b0526e28 --- /dev/null +++ b/node_modules/jest-util/node_modules/picomatch/README.md @@ -0,0 +1,708 @@ +

Picomatch

+ +

+ +version + + +test status + + +coverage status + + +downloads + +

+ +
+
+ +

+Blazing fast and accurate glob matcher written in JavaScript.
+No dependencies and full support for standard and extended Bash glob features, including braces, extglobs, POSIX brackets, and regular expressions. +

+ +
+
+ +## Why picomatch? + +* **Lightweight** - No dependencies +* **Minimal** - Tiny API surface. Main export is a function that takes a glob pattern and returns a matcher function. +* **Fast** - Loads in about 2ms (that's several times faster than a [single frame of a HD movie](http://www.endmemo.com/sconvert/framespersecondframespermillisecond.php) at 60fps) +* **Performant** - Use the returned matcher function to speed up repeat matching (like when watching files) +* **Accurate matching** - Using wildcards (`*` and `?`), globstars (`**`) for nested directories, [advanced globbing](#advanced-globbing) with extglobs, braces, and POSIX brackets, and support for escaping special characters with `\` or quotes. +* **Well tested** - Thousands of unit tests + +See the [library comparison](#library-comparisons) to other libraries. + +
+
+ +## Table of Contents + +
Click to expand + +- [Install](#install) +- [Usage](#usage) +- [API](#api) + * [picomatch](#picomatch) + * [.test](#test) + * [.matchBase](#matchbase) + * [.isMatch](#ismatch) + * [.parse](#parse) + * [.scan](#scan) + * [.compileRe](#compilere) + * [.makeRe](#makere) + * [.toRegex](#toregex) +- [Options](#options) + * [Picomatch options](#picomatch-options) + * [Scan Options](#scan-options) + * [Options Examples](#options-examples) +- [Globbing features](#globbing-features) + * [Basic globbing](#basic-globbing) + * [Advanced globbing](#advanced-globbing) + * [Braces](#braces) + * [Matching special characters as literals](#matching-special-characters-as-literals) +- [Library Comparisons](#library-comparisons) +- [Benchmarks](#benchmarks) +- [Philosophies](#philosophies) +- [About](#about) + * [Author](#author) + * [License](#license) + +_(TOC generated by [verb](https://github.com/verbose/verb) using [markdown-toc](https://github.com/jonschlinkert/markdown-toc))_ + +
+ +
+
+ +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +npm install --save picomatch +``` + +
+ +## Usage + +The main export is a function that takes a glob pattern and an options object and returns a function for matching strings. + +```js +const pm = require('picomatch'); +const isMatch = pm('*.js'); + +console.log(isMatch('abcd')); //=> false +console.log(isMatch('a.js')); //=> true +console.log(isMatch('a.md')); //=> false +console.log(isMatch('a/b.js')); //=> false +``` + +
+ +## API + +### [picomatch](lib/picomatch.js#L32) + +Creates a matcher function from one or more glob patterns. The returned function takes a string to match as its first argument, and returns true if the string is a match. The returned matcher function also takes a boolean as the second argument that, when true, returns an object with additional information. + +**Params** + +* `globs` **{String|Array}**: One or more glob patterns. +* `options` **{Object=}** +* `returns` **{Function=}**: Returns a matcher function. + +**Example** + +```js +const picomatch = require('picomatch'); +// picomatch(glob[, options]); + +const isMatch = picomatch('*.!(*a)'); +console.log(isMatch('a.a')); //=> false +console.log(isMatch('a.b')); //=> true +``` + +### [.test](lib/picomatch.js#L117) + +Test `input` with the given `regex`. This is used by the main `picomatch()` function to test the input string. + +**Params** + +* `input` **{String}**: String to test. +* `regex` **{RegExp}** +* `returns` **{Object}**: Returns an object with matching info. + +**Example** + +```js +const picomatch = require('picomatch'); +// picomatch.test(input, regex[, options]); + +console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/)); +// { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' } +``` + +### [.matchBase](lib/picomatch.js#L161) + +Match the basename of a filepath. + +**Params** + +* `input` **{String}**: String to test. +* `glob` **{RegExp|String}**: Glob pattern or regex created by [.makeRe](#makeRe). +* `returns` **{Boolean}** + +**Example** + +```js +const picomatch = require('picomatch'); +// picomatch.matchBase(input, glob[, options]); +console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true +``` + +### [.isMatch](lib/picomatch.js#L183) + +Returns true if **any** of the given glob `patterns` match the specified `string`. + +**Params** + +* **{String|Array}**: str The string to test. +* **{String|Array}**: patterns One or more glob patterns to use for matching. +* **{Object}**: See available [options](#options). +* `returns` **{Boolean}**: Returns true if any patterns match `str` + +**Example** + +```js +const picomatch = require('picomatch'); +// picomatch.isMatch(string, patterns[, options]); + +console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true +console.log(picomatch.isMatch('a.a', 'b.*')); //=> false +``` + +### [.parse](lib/picomatch.js#L199) + +Parse a glob pattern to create the source string for a regular expression. + +**Params** + +* `pattern` **{String}** +* `options` **{Object}** +* `returns` **{Object}**: Returns an object with useful properties and output to be used as a regex source string. + +**Example** + +```js +const picomatch = require('picomatch'); +const result = picomatch.parse(pattern[, options]); +``` + +### [.scan](lib/picomatch.js#L231) + +Scan a glob pattern to separate the pattern into segments. + +**Params** + +* `input` **{String}**: Glob pattern to scan. +* `options` **{Object}** +* `returns` **{Object}**: Returns an object with + +**Example** + +```js +const picomatch = require('picomatch'); +// picomatch.scan(input[, options]); + +const result = picomatch.scan('!./foo/*.js'); +console.log(result); +{ prefix: '!./', + input: '!./foo/*.js', + start: 3, + base: 'foo', + glob: '*.js', + isBrace: false, + isBracket: false, + isGlob: true, + isExtglob: false, + isGlobstar: false, + negated: true } +``` + +### [.compileRe](lib/picomatch.js#L245) + +Compile a regular expression from the `state` object returned by the +[parse()](#parse) method. + +**Params** + +* `state` **{Object}** +* `options` **{Object}** +* `returnOutput` **{Boolean}**: Intended for implementors, this argument allows you to return the raw output from the parser. +* `returnState` **{Boolean}**: Adds the state to a `state` property on the returned regex. Useful for implementors and debugging. +* `returns` **{RegExp}** + +### [.makeRe](lib/picomatch.js#L286) + +Create a regular expression from a parsed glob pattern. + +**Params** + +* `state` **{String}**: The object returned from the `.parse` method. +* `options` **{Object}** +* `returnOutput` **{Boolean}**: Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result. +* `returnState` **{Boolean}**: Implementors may use this argument to return the state from the parsed glob with the returned regular expression. +* `returns` **{RegExp}**: Returns a regex created from the given pattern. + +**Example** + +```js +const picomatch = require('picomatch'); +const state = picomatch.parse('*.js'); +// picomatch.compileRe(state[, options]); + +console.log(picomatch.compileRe(state)); +//=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ +``` + +### [.toRegex](lib/picomatch.js#L321) + +Create a regular expression from the given regex source string. + +**Params** + +* `source` **{String}**: Regular expression source string. +* `options` **{Object}** +* `returns` **{RegExp}** + +**Example** + +```js +const picomatch = require('picomatch'); +// picomatch.toRegex(source[, options]); + +const { output } = picomatch.parse('*.js'); +console.log(picomatch.toRegex(output)); +//=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ +``` + +
+ +## Options + +### Picomatch options + +The following options may be used with the main `picomatch()` function or any of the methods on the picomatch API. + +| **Option** | **Type** | **Default value** | **Description** | +| --- | --- | --- | --- | +| `basename` | `boolean` | `false` | 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`. | +| `bash` | `boolean` | `false` | Follow bash matching rules more strictly - disallows backslashes as escape characters, and treats single stars as globstars (`**`). | +| `capture` | `boolean` | `undefined` | Return regex matches in supporting methods. | +| `contains` | `boolean` | `undefined` | Allows glob to match any part of the given string(s). | +| `cwd` | `string` | `process.cwd()` | Current working directory. Used by `picomatch.split()` | +| `debug` | `boolean` | `undefined` | Debug regular expressions when an error is thrown. | +| `dot` | `boolean` | `false` | Enable dotfile matching. By default, dotfiles are ignored unless a `.` is explicitly defined in the pattern, or `options.dot` is true | +| `expandRange` | `function` | `undefined` | Custom function for expanding ranges in brace patterns, such as `{a..z}`. The function receives the range values as two arguments, and it must return a string to be used in the generated regex. It's recommended that returned strings be wrapped in parentheses. | +| `failglob` | `boolean` | `false` | Throws an error if no matches are found. Based on the bash option of the same name. | +| `fastpaths` | `boolean` | `true` | To speed up processing, full parsing is skipped for a handful common glob patterns. Disable this behavior by setting this option to `false`. | +| `flags` | `string` | `undefined` | Regex flags to use in the generated regex. If defined, the `nocase` option will be overridden. | +| [format](#optionsformat) | `function` | `undefined` | Custom function for formatting the returned string. This is useful for removing leading slashes, converting Windows paths to Posix paths, etc. | +| `ignore` | `array\|string` | `undefined` | One or more glob patterns for excluding strings that should not be matched from the result. | +| `keepQuotes` | `boolean` | `false` | Retain quotes in the generated regex, since quotes may also be used as an alternative to backslashes. | +| `literalBrackets` | `boolean` | `undefined` | When `true`, brackets in the glob pattern will be escaped so that only literal brackets will be matched. | +| `matchBase` | `boolean` | `false` | Alias for `basename` | +| `maxLength` | `boolean` | `65536` | Limit the max length of the input string. An error is thrown if the input string is longer than this value. | +| `nobrace` | `boolean` | `false` | Disable brace matching, so that `{a,b}` and `{1..3}` would be treated as literal characters. | +| `nobracket` | `boolean` | `undefined` | Disable matching with regex brackets. | +| `nocase` | `boolean` | `false` | Make matching case-insensitive. Equivalent to the regex `i` flag. Note that this option is overridden by the `flags` option. | +| `nodupes` | `boolean` | `true` | Deprecated, use `nounique` instead. This option will be removed in a future major release. By default duplicates are removed. Disable uniquification by setting this option to false. | +| `noext` | `boolean` | `false` | Alias for `noextglob` | +| `noextglob` | `boolean` | `false` | Disable support for matching with extglobs (like `+(a\|b)`) | +| `noglobstar` | `boolean` | `false` | Disable support for matching nested directories with globstars (`**`) | +| `nonegate` | `boolean` | `false` | Disable support for negating with leading `!` | +| `noquantifiers` | `boolean` | `false` | Disable support for regex quantifiers (like `a{1,2}`) and treat them as brace patterns to be expanded. | +| [onIgnore](#optionsonIgnore) | `function` | `undefined` | Function to be called on ignored items. | +| [onMatch](#optionsonMatch) | `function` | `undefined` | Function to be called on matched items. | +| [onResult](#optionsonResult) | `function` | `undefined` | Function to be called on all items, regardless of whether or not they are matched or ignored. | +| `posix` | `boolean` | `false` | Support POSIX character classes ("posix brackets"). | +| `posixSlashes` | `boolean` | `undefined` | Convert all slashes in file paths to forward slashes. This does not convert slashes in the glob pattern itself | +| `prepend` | `boolean` | `undefined` | String to prepend to the generated regex used for matching. | +| `regex` | `boolean` | `false` | Use regular expression rules for `+` (instead of matching literal `+`), and for stars that follow closing parentheses or brackets (as in `)*` and `]*`). | +| `strictBrackets` | `boolean` | `undefined` | Throw an error if brackets, braces, or parens are imbalanced. | +| `strictSlashes` | `boolean` | `undefined` | When true, picomatch won't match trailing slashes with single stars. | +| `unescape` | `boolean` | `undefined` | Remove backslashes preceding escaped characters in the glob pattern. By default, backslashes are retained. | +| `unixify` | `boolean` | `undefined` | Alias for `posixSlashes`, for backwards compatibility. | + +picomatch has automatic detection for regex positive and negative lookbehinds. If the pattern contains a negative lookbehind, you must be using Node.js >= 8.10 or else picomatch will throw an error. + +### Scan Options + +In addition to the main [picomatch options](#picomatch-options), the following options may also be used with the [.scan](#scan) method. + +| **Option** | **Type** | **Default value** | **Description** | +| --- | --- | --- | --- | +| `tokens` | `boolean` | `false` | When `true`, the returned object will include an array of tokens (objects), representing each path "segment" in the scanned glob pattern | +| `parts` | `boolean` | `false` | When `true`, the returned object will include an array of strings representing each path "segment" in the scanned glob pattern. This is automatically enabled when `options.tokens` is true | + +**Example** + +```js +const picomatch = require('picomatch'); +const result = picomatch.scan('!./foo/*.js', { tokens: true }); +console.log(result); +// { +// prefix: '!./', +// input: '!./foo/*.js', +// start: 3, +// base: 'foo', +// glob: '*.js', +// isBrace: false, +// isBracket: false, +// isGlob: true, +// isExtglob: false, +// isGlobstar: false, +// negated: true, +// maxDepth: 2, +// tokens: [ +// { value: '!./', depth: 0, isGlob: false, negated: true, isPrefix: true }, +// { value: 'foo', depth: 1, isGlob: false }, +// { value: '*.js', depth: 1, isGlob: true } +// ], +// slashes: [ 2, 6 ], +// parts: [ 'foo', '*.js' ] +// } +``` + +
+ +### Options Examples + +#### options.expandRange + +**Type**: `function` + +**Default**: `undefined` + +Custom function for expanding ranges in brace patterns. The [fill-range](https://github.com/jonschlinkert/fill-range) library is ideal for this purpose, or you can use custom code to do whatever you need. + +**Example** + +The following example shows how to create a glob that matches a folder + +```js +const fill = require('fill-range'); +const regex = pm.makeRe('foo/{01..25}/bar', { + expandRange(a, b) { + return `(${fill(a, b, { toRegex: true })})`; + } +}); + +console.log(regex); +//=> /^(?:foo\/((?:0[1-9]|1[0-9]|2[0-5]))\/bar)$/ + +console.log(regex.test('foo/00/bar')) // false +console.log(regex.test('foo/01/bar')) // true +console.log(regex.test('foo/10/bar')) // true +console.log(regex.test('foo/22/bar')) // true +console.log(regex.test('foo/25/bar')) // true +console.log(regex.test('foo/26/bar')) // false +``` + +#### options.format + +**Type**: `function` + +**Default**: `undefined` + +Custom function for formatting strings before they're matched. + +**Example** + +```js +// strip leading './' from strings +const format = str => str.replace(/^\.\//, ''); +const isMatch = picomatch('foo/*.js', { format }); +console.log(isMatch('./foo/bar.js')); //=> true +``` + +#### options.onMatch + +```js +const onMatch = ({ glob, regex, input, output }) => { + console.log({ glob, regex, input, output }); +}; + +const isMatch = picomatch('*', { onMatch }); +isMatch('foo'); +isMatch('bar'); +isMatch('baz'); +``` + +#### options.onIgnore + +```js +const onIgnore = ({ glob, regex, input, output }) => { + console.log({ glob, regex, input, output }); +}; + +const isMatch = picomatch('*', { onIgnore, ignore: 'f*' }); +isMatch('foo'); +isMatch('bar'); +isMatch('baz'); +``` + +#### options.onResult + +```js +const onResult = ({ glob, regex, input, output }) => { + console.log({ glob, regex, input, output }); +}; + +const isMatch = picomatch('*', { onResult, ignore: 'f*' }); +isMatch('foo'); +isMatch('bar'); +isMatch('baz'); +``` + +
+
+ +## Globbing features + +* [Basic globbing](#basic-globbing) (Wildcard matching) +* [Advanced globbing](#advanced-globbing) (extglobs, posix brackets, brace matching) + +### Basic globbing + +| **Character** | **Description** | +| --- | --- | +| `*` | Matches any character zero or more times, excluding path separators. Does _not match_ path separators or hidden files or directories ("dotfiles"), unless explicitly enabled by setting the `dot` option to `true`. | +| `**` | Matches any character zero or more times, including path separators. Note that `**` will only match path separators (`/`, and `\\` on Windows) when they are the only characters in a path segment. Thus, `foo**/bar` is equivalent to `foo*/bar`, and `foo/a**b/bar` is equivalent to `foo/a*b/bar`, and _more than two_ consecutive stars in a glob path segment are regarded as _a single star_. Thus, `foo/***/bar` is equivalent to `foo/*/bar`. | +| `?` | Matches any character excluding path separators one time. Does _not match_ path separators or leading dots. | +| `[abc]` | Matches any characters inside the brackets. For example, `[abc]` would match the characters `a`, `b` or `c`, and nothing else. | + +#### Matching behavior vs. Bash + +Picomatch's matching features and expected results in unit tests are based on Bash's unit tests and the Bash 4.3 specification, with the following exceptions: + +* Bash will match `foo/bar/baz` with `*`. Picomatch only matches nested directories with `**`. +* Bash greedily matches with negated extglobs. For example, Bash 4.3 says that `!(foo)*` should match `foo` and `foobar`, since the trailing `*` bracktracks to match the preceding pattern. This is very memory-inefficient, and IMHO, also incorrect. Picomatch would return `false` for both `foo` and `foobar`. + +
+ +### Advanced globbing + +* [extglobs](#extglobs) +* [POSIX brackets](#posix-brackets) +* [Braces](#brace-expansion) + +#### Extglobs + +| **Pattern** | **Description** | +| --- | --- | +| `@(pattern)` | Match _only one_ consecutive occurrence of `pattern` | +| `*(pattern)` | Match _zero or more_ consecutive occurrences of `pattern` | +| `+(pattern)` | Match _one or more_ consecutive occurrences of `pattern` | +| `?(pattern)` | Match _zero or **one**_ consecutive occurrences of `pattern` | +| `!(pattern)` | Match _anything but_ `pattern` | + +**Examples** + +```js +const pm = require('picomatch'); + +// *(pattern) matches ZERO or more of "pattern" +console.log(pm.isMatch('a', 'a*(z)')); // true +console.log(pm.isMatch('az', 'a*(z)')); // true +console.log(pm.isMatch('azzz', 'a*(z)')); // true + +// +(pattern) matches ONE or more of "pattern" +console.log(pm.isMatch('a', 'a*(z)')); // true +console.log(pm.isMatch('az', 'a*(z)')); // true +console.log(pm.isMatch('azzz', 'a*(z)')); // true + +// supports multiple extglobs +console.log(pm.isMatch('foo.bar', '!(foo).!(bar)')); // false + +// supports nested extglobs +console.log(pm.isMatch('foo.bar', '!(!(foo)).!(!(bar))')); // true +``` + +#### POSIX brackets + +POSIX classes are disabled by default. Enable this feature by setting the `posix` option to true. + +**Enable POSIX bracket support** + +```js +console.log(pm.makeRe('[[:word:]]+', { posix: true })); +//=> /^(?:(?=.)[A-Za-z0-9_]+\/?)$/ +``` + +**Supported POSIX classes** + +The following named POSIX bracket expressions are supported: + +* `[:alnum:]` - Alphanumeric characters, equ `[a-zA-Z0-9]` +* `[:alpha:]` - Alphabetical characters, equivalent to `[a-zA-Z]`. +* `[:ascii:]` - ASCII characters, equivalent to `[\\x00-\\x7F]`. +* `[:blank:]` - Space and tab characters, equivalent to `[ \\t]`. +* `[:cntrl:]` - Control characters, equivalent to `[\\x00-\\x1F\\x7F]`. +* `[:digit:]` - Numerical digits, equivalent to `[0-9]`. +* `[:graph:]` - Graph characters, equivalent to `[\\x21-\\x7E]`. +* `[:lower:]` - Lowercase letters, equivalent to `[a-z]`. +* `[:print:]` - Print characters, equivalent to `[\\x20-\\x7E ]`. +* `[:punct:]` - Punctuation and symbols, equivalent to `[\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~]`. +* `[:space:]` - Extended space characters, equivalent to `[ \\t\\r\\n\\v\\f]`. +* `[:upper:]` - Uppercase letters, equivalent to `[A-Z]`. +* `[:word:]` - Word characters (letters, numbers and underscores), equivalent to `[A-Za-z0-9_]`. +* `[:xdigit:]` - Hexadecimal digits, equivalent to `[A-Fa-f0-9]`. + +See the [Bash Reference Manual](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html) for more information. + +### Braces + +Picomatch does not do brace expansion. For [brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html) and advanced matching with braces, use [micromatch](https://github.com/micromatch/micromatch) instead. Picomatch has very basic support for braces. + +### Matching special characters as literals + +If you wish to match the following special characters in a filepath, and you want to use these characters in your glob pattern, they must be escaped with backslashes or quotes: + +**Special Characters** + +Some characters that are used for matching in regular expressions are also regarded as valid file path characters on some platforms. + +To match any of the following characters as literals: `$^*+?()[] + +Examples: + +```js +console.log(pm.makeRe('foo/bar \\(1\\)')); +console.log(pm.makeRe('foo/bar \\(1\\)')); +``` + +
+
+ +## Library Comparisons + +The following table shows which features are supported by [minimatch](https://github.com/isaacs/minimatch), [micromatch](https://github.com/micromatch/micromatch), [picomatch](https://github.com/micromatch/picomatch), [nanomatch](https://github.com/micromatch/nanomatch), [extglob](https://github.com/micromatch/extglob), [braces](https://github.com/micromatch/braces), and [expand-brackets](https://github.com/micromatch/expand-brackets). + +| **Feature** | `minimatch` | `micromatch` | `picomatch` | `nanomatch` | `extglob` | `braces` | `expand-brackets` | +| --- | --- | --- | --- | --- | --- | --- | --- | +| Wildcard matching (`*?+`) | ✔ | ✔ | ✔ | ✔ | - | - | - | +| Advancing globbing | ✔ | ✔ | ✔ | - | - | - | - | +| Brace _matching_ | ✔ | ✔ | ✔ | - | - | ✔ | - | +| Brace _expansion_ | ✔ | ✔ | - | - | - | ✔ | - | +| Extglobs | partial | ✔ | ✔ | - | ✔ | - | - | +| Posix brackets | - | ✔ | ✔ | - | - | - | ✔ | +| Regular expression syntax | - | ✔ | ✔ | ✔ | ✔ | - | ✔ | +| File system operations | - | - | - | - | - | - | - | + +
+
+ +## Benchmarks + +Performance comparison of picomatch and minimatch. + +``` +# .makeRe star + picomatch x 1,993,050 ops/sec ±0.51% (91 runs sampled) + minimatch x 627,206 ops/sec ±1.96% (87 runs sampled)) + +# .makeRe star; dot=true + picomatch x 1,436,640 ops/sec ±0.62% (91 runs sampled) + minimatch x 525,876 ops/sec ±0.60% (88 runs sampled) + +# .makeRe globstar + picomatch x 1,592,742 ops/sec ±0.42% (90 runs sampled) + minimatch x 962,043 ops/sec ±1.76% (91 runs sampled)d) + +# .makeRe globstars + picomatch x 1,615,199 ops/sec ±0.35% (94 runs sampled) + minimatch x 477,179 ops/sec ±1.33% (91 runs sampled) + +# .makeRe with leading star + picomatch x 1,220,856 ops/sec ±0.40% (92 runs sampled) + minimatch x 453,564 ops/sec ±1.43% (94 runs sampled) + +# .makeRe - basic braces + picomatch x 392,067 ops/sec ±0.70% (90 runs sampled) + minimatch x 99,532 ops/sec ±2.03% (87 runs sampled)) +``` + +
+
+ +## Philosophies + +The goal of this library is to be blazing fast, without compromising on accuracy. + +**Accuracy** + +The number one of goal of this library is accuracy. However, it's not unusual for different glob implementations to have different rules for matching behavior, even with simple wildcard matching. It gets increasingly more complicated when combinations of different features are combined, like when extglobs are combined with globstars, braces, slashes, and so on: `!(**/{a,b,*/c})`. + +Thus, given that there is no canonical glob specification to use as a single source of truth when differences of opinion arise regarding behavior, sometimes we have to implement our best judgement and rely on feedback from users to make improvements. + +**Performance** + +Although this library performs well in benchmarks, and in most cases it's faster than other popular libraries we benchmarked against, we will always choose accuracy over performance. It's not helpful to anyone if our library is faster at returning the wrong answer. + +
+
+ +## About + +
+Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +Please read the [contributing guide](.github/contributing.md) for advice on opening issues, pull requests, and coding standards. + +
+ +
+Running Tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +npm install && npm test +``` + +
+ +
+Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +
+ +### Author + +**Jon Schlinkert** + +* [GitHub Profile](https://github.com/jonschlinkert) +* [Twitter Profile](https://twitter.com/jonschlinkert) +* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert) + +### License + +Copyright © 2017-present, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). diff --git a/node_modules/jest-util/node_modules/picomatch/index.js b/node_modules/jest-util/node_modules/picomatch/index.js new file mode 100644 index 00000000..d2f2bc59 --- /dev/null +++ b/node_modules/jest-util/node_modules/picomatch/index.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./lib/picomatch'); diff --git a/node_modules/jest-util/node_modules/picomatch/lib/constants.js b/node_modules/jest-util/node_modules/picomatch/lib/constants.js new file mode 100644 index 00000000..a62ef387 --- /dev/null +++ b/node_modules/jest-util/node_modules/picomatch/lib/constants.js @@ -0,0 +1,179 @@ +'use strict'; + +const path = require('path'); +const WIN_SLASH = '\\\\/'; +const WIN_NO_SLASH = `[^${WIN_SLASH}]`; + +/** + * Posix glob regex + */ + +const DOT_LITERAL = '\\.'; +const PLUS_LITERAL = '\\+'; +const QMARK_LITERAL = '\\?'; +const SLASH_LITERAL = '\\/'; +const ONE_CHAR = '(?=.)'; +const QMARK = '[^/]'; +const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`; +const START_ANCHOR = `(?:^|${SLASH_LITERAL})`; +const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`; +const NO_DOT = `(?!${DOT_LITERAL})`; +const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`; +const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`; +const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`; +const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`; +const STAR = `${QMARK}*?`; + +const POSIX_CHARS = { + DOT_LITERAL, + PLUS_LITERAL, + QMARK_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + QMARK, + END_ANCHOR, + DOTS_SLASH, + NO_DOT, + NO_DOTS, + NO_DOT_SLASH, + NO_DOTS_SLASH, + QMARK_NO_DOT, + STAR, + START_ANCHOR +}; + +/** + * Windows glob regex + */ + +const WINDOWS_CHARS = { + ...POSIX_CHARS, + + SLASH_LITERAL: `[${WIN_SLASH}]`, + QMARK: WIN_NO_SLASH, + STAR: `${WIN_NO_SLASH}*?`, + DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`, + NO_DOT: `(?!${DOT_LITERAL})`, + NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, + NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`, + NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, + QMARK_NO_DOT: `[^.${WIN_SLASH}]`, + START_ANCHOR: `(?:^|[${WIN_SLASH}])`, + END_ANCHOR: `(?:[${WIN_SLASH}]|$)` +}; + +/** + * POSIX Bracket Regex + */ + +const POSIX_REGEX_SOURCE = { + alnum: 'a-zA-Z0-9', + alpha: 'a-zA-Z', + ascii: '\\x00-\\x7F', + blank: ' \\t', + cntrl: '\\x00-\\x1F\\x7F', + digit: '0-9', + graph: '\\x21-\\x7E', + lower: 'a-z', + print: '\\x20-\\x7E ', + punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~', + space: ' \\t\\r\\n\\v\\f', + upper: 'A-Z', + word: 'A-Za-z0-9_', + xdigit: 'A-Fa-f0-9' +}; + +module.exports = { + MAX_LENGTH: 1024 * 64, + POSIX_REGEX_SOURCE, + + // regular expressions + REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g, + REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/, + REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/, + REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g, + REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g, + REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g, + + // Replace globs with equivalent patterns to reduce parsing time. + REPLACEMENTS: { + '***': '*', + '**/**': '**', + '**/**/**': '**' + }, + + // Digits + CHAR_0: 48, /* 0 */ + CHAR_9: 57, /* 9 */ + + // Alphabet chars. + CHAR_UPPERCASE_A: 65, /* A */ + CHAR_LOWERCASE_A: 97, /* a */ + CHAR_UPPERCASE_Z: 90, /* Z */ + CHAR_LOWERCASE_Z: 122, /* z */ + + CHAR_LEFT_PARENTHESES: 40, /* ( */ + CHAR_RIGHT_PARENTHESES: 41, /* ) */ + + CHAR_ASTERISK: 42, /* * */ + + // Non-alphabetic chars. + CHAR_AMPERSAND: 38, /* & */ + CHAR_AT: 64, /* @ */ + CHAR_BACKWARD_SLASH: 92, /* \ */ + CHAR_CARRIAGE_RETURN: 13, /* \r */ + CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */ + CHAR_COLON: 58, /* : */ + CHAR_COMMA: 44, /* , */ + CHAR_DOT: 46, /* . */ + CHAR_DOUBLE_QUOTE: 34, /* " */ + CHAR_EQUAL: 61, /* = */ + CHAR_EXCLAMATION_MARK: 33, /* ! */ + CHAR_FORM_FEED: 12, /* \f */ + CHAR_FORWARD_SLASH: 47, /* / */ + CHAR_GRAVE_ACCENT: 96, /* ` */ + CHAR_HASH: 35, /* # */ + CHAR_HYPHEN_MINUS: 45, /* - */ + CHAR_LEFT_ANGLE_BRACKET: 60, /* < */ + CHAR_LEFT_CURLY_BRACE: 123, /* { */ + CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */ + CHAR_LINE_FEED: 10, /* \n */ + CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */ + CHAR_PERCENT: 37, /* % */ + CHAR_PLUS: 43, /* + */ + CHAR_QUESTION_MARK: 63, /* ? */ + CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */ + CHAR_RIGHT_CURLY_BRACE: 125, /* } */ + CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */ + CHAR_SEMICOLON: 59, /* ; */ + CHAR_SINGLE_QUOTE: 39, /* ' */ + CHAR_SPACE: 32, /* */ + CHAR_TAB: 9, /* \t */ + CHAR_UNDERSCORE: 95, /* _ */ + CHAR_VERTICAL_LINE: 124, /* | */ + CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */ + + SEP: path.sep, + + /** + * Create EXTGLOB_CHARS + */ + + extglobChars(chars) { + return { + '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` }, + '?': { type: 'qmark', open: '(?:', close: ')?' }, + '+': { type: 'plus', open: '(?:', close: ')+' }, + '*': { type: 'star', open: '(?:', close: ')*' }, + '@': { type: 'at', open: '(?:', close: ')' } + }; + }, + + /** + * Create GLOB_CHARS + */ + + globChars(win32) { + return win32 === true ? WINDOWS_CHARS : POSIX_CHARS; + } +}; diff --git a/node_modules/jest-util/node_modules/picomatch/lib/parse.js b/node_modules/jest-util/node_modules/picomatch/lib/parse.js new file mode 100644 index 00000000..58269d01 --- /dev/null +++ b/node_modules/jest-util/node_modules/picomatch/lib/parse.js @@ -0,0 +1,1091 @@ +'use strict'; + +const constants = require('./constants'); +const utils = require('./utils'); + +/** + * Constants + */ + +const { + MAX_LENGTH, + POSIX_REGEX_SOURCE, + REGEX_NON_SPECIAL_CHARS, + REGEX_SPECIAL_CHARS_BACKREF, + REPLACEMENTS +} = constants; + +/** + * Helpers + */ + +const expandRange = (args, options) => { + if (typeof options.expandRange === 'function') { + return options.expandRange(...args, options); + } + + args.sort(); + const value = `[${args.join('-')}]`; + + try { + /* eslint-disable-next-line no-new */ + new RegExp(value); + } catch (ex) { + return args.map(v => utils.escapeRegex(v)).join('..'); + } + + return value; +}; + +/** + * Create the message for a syntax error + */ + +const syntaxError = (type, char) => { + return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`; +}; + +/** + * Parse the given input string. + * @param {String} input + * @param {Object} options + * @return {Object} + */ + +const parse = (input, options) => { + if (typeof input !== 'string') { + throw new TypeError('Expected a string'); + } + + input = REPLACEMENTS[input] || input; + + const opts = { ...options }; + const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + + let len = input.length; + if (len > max) { + throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); + } + + const bos = { type: 'bos', value: '', output: opts.prepend || '' }; + const tokens = [bos]; + + const capture = opts.capture ? '' : '?:'; + const win32 = utils.isWindows(options); + + // create constants based on platform, for windows or posix + const PLATFORM_CHARS = constants.globChars(win32); + const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS); + + const { + DOT_LITERAL, + PLUS_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + DOTS_SLASH, + NO_DOT, + NO_DOT_SLASH, + NO_DOTS_SLASH, + QMARK, + QMARK_NO_DOT, + STAR, + START_ANCHOR + } = PLATFORM_CHARS; + + const globstar = opts => { + return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; + }; + + const nodot = opts.dot ? '' : NO_DOT; + const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT; + let star = opts.bash === true ? globstar(opts) : STAR; + + if (opts.capture) { + star = `(${star})`; + } + + // minimatch options support + if (typeof opts.noext === 'boolean') { + opts.noextglob = opts.noext; + } + + const state = { + input, + index: -1, + start: 0, + dot: opts.dot === true, + consumed: '', + output: '', + prefix: '', + backtrack: false, + negated: false, + brackets: 0, + braces: 0, + parens: 0, + quotes: 0, + globstar: false, + tokens + }; + + input = utils.removePrefix(input, state); + len = input.length; + + const extglobs = []; + const braces = []; + const stack = []; + let prev = bos; + let value; + + /** + * Tokenizing helpers + */ + + const eos = () => state.index === len - 1; + const peek = state.peek = (n = 1) => input[state.index + n]; + const advance = state.advance = () => input[++state.index] || ''; + const remaining = () => input.slice(state.index + 1); + const consume = (value = '', num = 0) => { + state.consumed += value; + state.index += num; + }; + + const append = token => { + state.output += token.output != null ? token.output : token.value; + consume(token.value); + }; + + const negate = () => { + let count = 1; + + while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) { + advance(); + state.start++; + count++; + } + + if (count % 2 === 0) { + return false; + } + + state.negated = true; + state.start++; + return true; + }; + + const increment = type => { + state[type]++; + stack.push(type); + }; + + const decrement = type => { + state[type]--; + stack.pop(); + }; + + /** + * Push tokens onto the tokens array. This helper speeds up + * tokenizing by 1) helping us avoid backtracking as much as possible, + * and 2) helping us avoid creating extra tokens when consecutive + * characters are plain text. This improves performance and simplifies + * lookbehinds. + */ + + const push = tok => { + if (prev.type === 'globstar') { + const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace'); + const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren')); + + if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) { + state.output = state.output.slice(0, -prev.output.length); + prev.type = 'star'; + prev.value = '*'; + prev.output = star; + state.output += prev.output; + } + } + + if (extglobs.length && tok.type !== 'paren') { + extglobs[extglobs.length - 1].inner += tok.value; + } + + if (tok.value || tok.output) append(tok); + if (prev && prev.type === 'text' && tok.type === 'text') { + prev.value += tok.value; + prev.output = (prev.output || '') + tok.value; + return; + } + + tok.prev = prev; + tokens.push(tok); + prev = tok; + }; + + const extglobOpen = (type, value) => { + const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' }; + + token.prev = prev; + token.parens = state.parens; + token.output = state.output; + const output = (opts.capture ? '(' : '') + token.open; + + increment('parens'); + push({ type, value, output: state.output ? '' : ONE_CHAR }); + push({ type: 'paren', extglob: true, value: advance(), output }); + extglobs.push(token); + }; + + const extglobClose = token => { + let output = token.close + (opts.capture ? ')' : ''); + let rest; + + if (token.type === 'negate') { + let extglobStar = star; + + if (token.inner && token.inner.length > 1 && token.inner.includes('/')) { + extglobStar = globstar(opts); + } + + if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) { + output = token.close = `)$))${extglobStar}`; + } + + if (token.inner.includes('*') && (rest = remaining()) && /^\.[^\\/.]+$/.test(rest)) { + // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis. + // In this case, we need to parse the string and use it in the output of the original pattern. + // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`. + // + // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`. + const expression = parse(rest, { ...options, fastpaths: false }).output; + + output = token.close = `)${expression})${extglobStar})`; + } + + if (token.prev.type === 'bos') { + state.negatedExtglob = true; + } + } + + push({ type: 'paren', extglob: true, value, output }); + decrement('parens'); + }; + + /** + * Fast paths + */ + + if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) { + let backslashes = false; + + let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => { + if (first === '\\') { + backslashes = true; + return m; + } + + if (first === '?') { + if (esc) { + return esc + first + (rest ? QMARK.repeat(rest.length) : ''); + } + if (index === 0) { + return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : ''); + } + return QMARK.repeat(chars.length); + } + + if (first === '.') { + return DOT_LITERAL.repeat(chars.length); + } + + if (first === '*') { + if (esc) { + return esc + first + (rest ? star : ''); + } + return star; + } + return esc ? m : `\\${m}`; + }); + + if (backslashes === true) { + if (opts.unescape === true) { + output = output.replace(/\\/g, ''); + } else { + output = output.replace(/\\+/g, m => { + return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : ''); + }); + } + } + + if (output === input && opts.contains === true) { + state.output = input; + return state; + } + + state.output = utils.wrapOutput(output, state, options); + return state; + } + + /** + * Tokenize input until we reach end-of-string + */ + + while (!eos()) { + value = advance(); + + if (value === '\u0000') { + continue; + } + + /** + * Escaped characters + */ + + if (value === '\\') { + const next = peek(); + + if (next === '/' && opts.bash !== true) { + continue; + } + + if (next === '.' || next === ';') { + continue; + } + + if (!next) { + value += '\\'; + push({ type: 'text', value }); + continue; + } + + // collapse slashes to reduce potential for exploits + const match = /^\\+/.exec(remaining()); + let slashes = 0; + + if (match && match[0].length > 2) { + slashes = match[0].length; + state.index += slashes; + if (slashes % 2 !== 0) { + value += '\\'; + } + } + + if (opts.unescape === true) { + value = advance(); + } else { + value += advance(); + } + + if (state.brackets === 0) { + push({ type: 'text', value }); + continue; + } + } + + /** + * If we're inside a regex character class, continue + * until we reach the closing bracket. + */ + + if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) { + if (opts.posix !== false && value === ':') { + const inner = prev.value.slice(1); + if (inner.includes('[')) { + prev.posix = true; + + if (inner.includes(':')) { + const idx = prev.value.lastIndexOf('['); + const pre = prev.value.slice(0, idx); + const rest = prev.value.slice(idx + 2); + const posix = POSIX_REGEX_SOURCE[rest]; + if (posix) { + prev.value = pre + posix; + state.backtrack = true; + advance(); + + if (!bos.output && tokens.indexOf(prev) === 1) { + bos.output = ONE_CHAR; + } + continue; + } + } + } + } + + if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) { + value = `\\${value}`; + } + + if (value === ']' && (prev.value === '[' || prev.value === '[^')) { + value = `\\${value}`; + } + + if (opts.posix === true && value === '!' && prev.value === '[') { + value = '^'; + } + + prev.value += value; + append({ value }); + continue; + } + + /** + * If we're inside a quoted string, continue + * until we reach the closing double quote. + */ + + if (state.quotes === 1 && value !== '"') { + value = utils.escapeRegex(value); + prev.value += value; + append({ value }); + continue; + } + + /** + * Double quotes + */ + + if (value === '"') { + state.quotes = state.quotes === 1 ? 0 : 1; + if (opts.keepQuotes === true) { + push({ type: 'text', value }); + } + continue; + } + + /** + * Parentheses + */ + + if (value === '(') { + increment('parens'); + push({ type: 'paren', value }); + continue; + } + + if (value === ')') { + if (state.parens === 0 && opts.strictBrackets === true) { + throw new SyntaxError(syntaxError('opening', '(')); + } + + const extglob = extglobs[extglobs.length - 1]; + if (extglob && state.parens === extglob.parens + 1) { + extglobClose(extglobs.pop()); + continue; + } + + push({ type: 'paren', value, output: state.parens ? ')' : '\\)' }); + decrement('parens'); + continue; + } + + /** + * Square brackets + */ + + if (value === '[') { + if (opts.nobracket === true || !remaining().includes(']')) { + if (opts.nobracket !== true && opts.strictBrackets === true) { + throw new SyntaxError(syntaxError('closing', ']')); + } + + value = `\\${value}`; + } else { + increment('brackets'); + } + + push({ type: 'bracket', value }); + continue; + } + + if (value === ']') { + if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) { + push({ type: 'text', value, output: `\\${value}` }); + continue; + } + + if (state.brackets === 0) { + if (opts.strictBrackets === true) { + throw new SyntaxError(syntaxError('opening', '[')); + } + + push({ type: 'text', value, output: `\\${value}` }); + continue; + } + + decrement('brackets'); + + const prevValue = prev.value.slice(1); + if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) { + value = `/${value}`; + } + + prev.value += value; + append({ value }); + + // when literal brackets are explicitly disabled + // assume we should match with a regex character class + if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) { + continue; + } + + const escaped = utils.escapeRegex(prev.value); + state.output = state.output.slice(0, -prev.value.length); + + // when literal brackets are explicitly enabled + // assume we should escape the brackets to match literal characters + if (opts.literalBrackets === true) { + state.output += escaped; + prev.value = escaped; + continue; + } + + // when the user specifies nothing, try to match both + prev.value = `(${capture}${escaped}|${prev.value})`; + state.output += prev.value; + continue; + } + + /** + * Braces + */ + + if (value === '{' && opts.nobrace !== true) { + increment('braces'); + + const open = { + type: 'brace', + value, + output: '(', + outputIndex: state.output.length, + tokensIndex: state.tokens.length + }; + + braces.push(open); + push(open); + continue; + } + + if (value === '}') { + const brace = braces[braces.length - 1]; + + if (opts.nobrace === true || !brace) { + push({ type: 'text', value, output: value }); + continue; + } + + let output = ')'; + + if (brace.dots === true) { + const arr = tokens.slice(); + const range = []; + + for (let i = arr.length - 1; i >= 0; i--) { + tokens.pop(); + if (arr[i].type === 'brace') { + break; + } + if (arr[i].type !== 'dots') { + range.unshift(arr[i].value); + } + } + + output = expandRange(range, opts); + state.backtrack = true; + } + + if (brace.comma !== true && brace.dots !== true) { + const out = state.output.slice(0, brace.outputIndex); + const toks = state.tokens.slice(brace.tokensIndex); + brace.value = brace.output = '\\{'; + value = output = '\\}'; + state.output = out; + for (const t of toks) { + state.output += (t.output || t.value); + } + } + + push({ type: 'brace', value, output }); + decrement('braces'); + braces.pop(); + continue; + } + + /** + * Pipes + */ + + if (value === '|') { + if (extglobs.length > 0) { + extglobs[extglobs.length - 1].conditions++; + } + push({ type: 'text', value }); + continue; + } + + /** + * Commas + */ + + if (value === ',') { + let output = value; + + const brace = braces[braces.length - 1]; + if (brace && stack[stack.length - 1] === 'braces') { + brace.comma = true; + output = '|'; + } + + push({ type: 'comma', value, output }); + continue; + } + + /** + * Slashes + */ + + if (value === '/') { + // if the beginning of the glob is "./", advance the start + // to the current index, and don't add the "./" characters + // to the state. This greatly simplifies lookbehinds when + // checking for BOS characters like "!" and "." (not "./") + if (prev.type === 'dot' && state.index === state.start + 1) { + state.start = state.index + 1; + state.consumed = ''; + state.output = ''; + tokens.pop(); + prev = bos; // reset "prev" to the first token + continue; + } + + push({ type: 'slash', value, output: SLASH_LITERAL }); + continue; + } + + /** + * Dots + */ + + if (value === '.') { + if (state.braces > 0 && prev.type === 'dot') { + if (prev.value === '.') prev.output = DOT_LITERAL; + const brace = braces[braces.length - 1]; + prev.type = 'dots'; + prev.output += value; + prev.value += value; + brace.dots = true; + continue; + } + + if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') { + push({ type: 'text', value, output: DOT_LITERAL }); + continue; + } + + push({ type: 'dot', value, output: DOT_LITERAL }); + continue; + } + + /** + * Question marks + */ + + if (value === '?') { + const isGroup = prev && prev.value === '('; + if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { + extglobOpen('qmark', value); + continue; + } + + if (prev && prev.type === 'paren') { + const next = peek(); + let output = value; + + if (next === '<' && !utils.supportsLookbehinds()) { + throw new Error('Node.js v10 or higher is required for regex lookbehinds'); + } + + if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) { + output = `\\${value}`; + } + + push({ type: 'text', value, output }); + continue; + } + + if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) { + push({ type: 'qmark', value, output: QMARK_NO_DOT }); + continue; + } + + push({ type: 'qmark', value, output: QMARK }); + continue; + } + + /** + * Exclamation + */ + + if (value === '!') { + if (opts.noextglob !== true && peek() === '(') { + if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) { + extglobOpen('negate', value); + continue; + } + } + + if (opts.nonegate !== true && state.index === 0) { + negate(); + continue; + } + } + + /** + * Plus + */ + + if (value === '+') { + if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { + extglobOpen('plus', value); + continue; + } + + if ((prev && prev.value === '(') || opts.regex === false) { + push({ type: 'plus', value, output: PLUS_LITERAL }); + continue; + } + + if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) { + push({ type: 'plus', value }); + continue; + } + + push({ type: 'plus', value: PLUS_LITERAL }); + continue; + } + + /** + * Plain text + */ + + if (value === '@') { + if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { + push({ type: 'at', extglob: true, value, output: '' }); + continue; + } + + push({ type: 'text', value }); + continue; + } + + /** + * Plain text + */ + + if (value !== '*') { + if (value === '$' || value === '^') { + value = `\\${value}`; + } + + const match = REGEX_NON_SPECIAL_CHARS.exec(remaining()); + if (match) { + value += match[0]; + state.index += match[0].length; + } + + push({ type: 'text', value }); + continue; + } + + /** + * Stars + */ + + if (prev && (prev.type === 'globstar' || prev.star === true)) { + prev.type = 'star'; + prev.star = true; + prev.value += value; + prev.output = star; + state.backtrack = true; + state.globstar = true; + consume(value); + continue; + } + + let rest = remaining(); + if (opts.noextglob !== true && /^\([^?]/.test(rest)) { + extglobOpen('star', value); + continue; + } + + if (prev.type === 'star') { + if (opts.noglobstar === true) { + consume(value); + continue; + } + + const prior = prev.prev; + const before = prior.prev; + const isStart = prior.type === 'slash' || prior.type === 'bos'; + const afterStar = before && (before.type === 'star' || before.type === 'globstar'); + + if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) { + push({ type: 'star', value, output: '' }); + continue; + } + + const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace'); + const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren'); + if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) { + push({ type: 'star', value, output: '' }); + continue; + } + + // strip consecutive `/**/` + while (rest.slice(0, 3) === '/**') { + const after = input[state.index + 4]; + if (after && after !== '/') { + break; + } + rest = rest.slice(3); + consume('/**', 3); + } + + if (prior.type === 'bos' && eos()) { + prev.type = 'globstar'; + prev.value += value; + prev.output = globstar(opts); + state.output = prev.output; + state.globstar = true; + consume(value); + continue; + } + + if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) { + state.output = state.output.slice(0, -(prior.output + prev.output).length); + prior.output = `(?:${prior.output}`; + + prev.type = 'globstar'; + prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)'); + prev.value += value; + state.globstar = true; + state.output += prior.output + prev.output; + consume(value); + continue; + } + + if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') { + const end = rest[1] !== void 0 ? '|$' : ''; + + state.output = state.output.slice(0, -(prior.output + prev.output).length); + prior.output = `(?:${prior.output}`; + + prev.type = 'globstar'; + prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`; + prev.value += value; + + state.output += prior.output + prev.output; + state.globstar = true; + + consume(value + advance()); + + push({ type: 'slash', value: '/', output: '' }); + continue; + } + + if (prior.type === 'bos' && rest[0] === '/') { + prev.type = 'globstar'; + prev.value += value; + prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`; + state.output = prev.output; + state.globstar = true; + consume(value + advance()); + push({ type: 'slash', value: '/', output: '' }); + continue; + } + + // remove single star from output + state.output = state.output.slice(0, -prev.output.length); + + // reset previous token to globstar + prev.type = 'globstar'; + prev.output = globstar(opts); + prev.value += value; + + // reset output with globstar + state.output += prev.output; + state.globstar = true; + consume(value); + continue; + } + + const token = { type: 'star', value, output: star }; + + if (opts.bash === true) { + token.output = '.*?'; + if (prev.type === 'bos' || prev.type === 'slash') { + token.output = nodot + token.output; + } + push(token); + continue; + } + + if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) { + token.output = value; + push(token); + continue; + } + + if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') { + if (prev.type === 'dot') { + state.output += NO_DOT_SLASH; + prev.output += NO_DOT_SLASH; + + } else if (opts.dot === true) { + state.output += NO_DOTS_SLASH; + prev.output += NO_DOTS_SLASH; + + } else { + state.output += nodot; + prev.output += nodot; + } + + if (peek() !== '*') { + state.output += ONE_CHAR; + prev.output += ONE_CHAR; + } + } + + push(token); + } + + while (state.brackets > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']')); + state.output = utils.escapeLast(state.output, '['); + decrement('brackets'); + } + + while (state.parens > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')')); + state.output = utils.escapeLast(state.output, '('); + decrement('parens'); + } + + while (state.braces > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}')); + state.output = utils.escapeLast(state.output, '{'); + decrement('braces'); + } + + if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) { + push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` }); + } + + // rebuild the output if we had to backtrack at any point + if (state.backtrack === true) { + state.output = ''; + + for (const token of state.tokens) { + state.output += token.output != null ? token.output : token.value; + + if (token.suffix) { + state.output += token.suffix; + } + } + } + + return state; +}; + +/** + * Fast paths for creating regular expressions for common glob patterns. + * This can significantly speed up processing and has very little downside + * impact when none of the fast paths match. + */ + +parse.fastpaths = (input, options) => { + const opts = { ...options }; + const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + const len = input.length; + if (len > max) { + throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); + } + + input = REPLACEMENTS[input] || input; + const win32 = utils.isWindows(options); + + // create constants based on platform, for windows or posix + const { + DOT_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + DOTS_SLASH, + NO_DOT, + NO_DOTS, + NO_DOTS_SLASH, + STAR, + START_ANCHOR + } = constants.globChars(win32); + + const nodot = opts.dot ? NO_DOTS : NO_DOT; + const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT; + const capture = opts.capture ? '' : '?:'; + const state = { negated: false, prefix: '' }; + let star = opts.bash === true ? '.*?' : STAR; + + if (opts.capture) { + star = `(${star})`; + } + + const globstar = opts => { + if (opts.noglobstar === true) return star; + return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; + }; + + const create = str => { + switch (str) { + case '*': + return `${nodot}${ONE_CHAR}${star}`; + + case '.*': + return `${DOT_LITERAL}${ONE_CHAR}${star}`; + + case '*.*': + return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; + + case '*/*': + return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`; + + case '**': + return nodot + globstar(opts); + + case '**/*': + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`; + + case '**/*.*': + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; + + case '**/.*': + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`; + + default: { + const match = /^(.*?)\.(\w+)$/.exec(str); + if (!match) return; + + const source = create(match[1]); + if (!source) return; + + return source + DOT_LITERAL + match[2]; + } + } + }; + + const output = utils.removePrefix(input, state); + let source = create(output); + + if (source && opts.strictSlashes !== true) { + source += `${SLASH_LITERAL}?`; + } + + return source; +}; + +module.exports = parse; diff --git a/node_modules/jest-util/node_modules/picomatch/lib/picomatch.js b/node_modules/jest-util/node_modules/picomatch/lib/picomatch.js new file mode 100644 index 00000000..782d8094 --- /dev/null +++ b/node_modules/jest-util/node_modules/picomatch/lib/picomatch.js @@ -0,0 +1,342 @@ +'use strict'; + +const path = require('path'); +const scan = require('./scan'); +const parse = require('./parse'); +const utils = require('./utils'); +const constants = require('./constants'); +const isObject = val => val && typeof val === 'object' && !Array.isArray(val); + +/** + * Creates a matcher function from one or more glob patterns. The + * returned function takes a string to match as its first argument, + * and returns true if the string is a match. The returned matcher + * function also takes a boolean as the second argument that, when true, + * returns an object with additional information. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch(glob[, options]); + * + * const isMatch = picomatch('*.!(*a)'); + * console.log(isMatch('a.a')); //=> false + * console.log(isMatch('a.b')); //=> true + * ``` + * @name picomatch + * @param {String|Array} `globs` One or more glob patterns. + * @param {Object=} `options` + * @return {Function=} Returns a matcher function. + * @api public + */ + +const picomatch = (glob, options, returnState = false) => { + if (Array.isArray(glob)) { + const fns = glob.map(input => picomatch(input, options, returnState)); + const arrayMatcher = str => { + for (const isMatch of fns) { + const state = isMatch(str); + if (state) return state; + } + return false; + }; + return arrayMatcher; + } + + const isState = isObject(glob) && glob.tokens && glob.input; + + if (glob === '' || (typeof glob !== 'string' && !isState)) { + throw new TypeError('Expected pattern to be a non-empty string'); + } + + const opts = options || {}; + const posix = utils.isWindows(options); + const regex = isState + ? picomatch.compileRe(glob, options) + : picomatch.makeRe(glob, options, false, true); + + const state = regex.state; + delete regex.state; + + let isIgnored = () => false; + if (opts.ignore) { + const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null }; + isIgnored = picomatch(opts.ignore, ignoreOpts, returnState); + } + + const matcher = (input, returnObject = false) => { + const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix }); + const result = { glob, state, regex, posix, input, output, match, isMatch }; + + if (typeof opts.onResult === 'function') { + opts.onResult(result); + } + + if (isMatch === false) { + result.isMatch = false; + return returnObject ? result : false; + } + + if (isIgnored(input)) { + if (typeof opts.onIgnore === 'function') { + opts.onIgnore(result); + } + result.isMatch = false; + return returnObject ? result : false; + } + + if (typeof opts.onMatch === 'function') { + opts.onMatch(result); + } + return returnObject ? result : true; + }; + + if (returnState) { + matcher.state = state; + } + + return matcher; +}; + +/** + * Test `input` with the given `regex`. This is used by the main + * `picomatch()` function to test the input string. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.test(input, regex[, options]); + * + * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/)); + * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' } + * ``` + * @param {String} `input` String to test. + * @param {RegExp} `regex` + * @return {Object} Returns an object with matching info. + * @api public + */ + +picomatch.test = (input, regex, options, { glob, posix } = {}) => { + if (typeof input !== 'string') { + throw new TypeError('Expected input to be a string'); + } + + if (input === '') { + return { isMatch: false, output: '' }; + } + + const opts = options || {}; + const format = opts.format || (posix ? utils.toPosixSlashes : null); + let match = input === glob; + let output = (match && format) ? format(input) : input; + + if (match === false) { + output = format ? format(input) : input; + match = output === glob; + } + + if (match === false || opts.capture === true) { + if (opts.matchBase === true || opts.basename === true) { + match = picomatch.matchBase(input, regex, options, posix); + } else { + match = regex.exec(output); + } + } + + return { isMatch: Boolean(match), match, output }; +}; + +/** + * Match the basename of a filepath. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.matchBase(input, glob[, options]); + * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true + * ``` + * @param {String} `input` String to test. + * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe). + * @return {Boolean} + * @api public + */ + +picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => { + const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options); + return regex.test(path.basename(input)); +}; + +/** + * Returns true if **any** of the given glob `patterns` match the specified `string`. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.isMatch(string, patterns[, options]); + * + * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true + * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false + * ``` + * @param {String|Array} str The string to test. + * @param {String|Array} patterns One or more glob patterns to use for matching. + * @param {Object} [options] See available [options](#options). + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ + +picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str); + +/** + * Parse a glob pattern to create the source string for a regular + * expression. + * + * ```js + * const picomatch = require('picomatch'); + * const result = picomatch.parse(pattern[, options]); + * ``` + * @param {String} `pattern` + * @param {Object} `options` + * @return {Object} Returns an object with useful properties and output to be used as a regex source string. + * @api public + */ + +picomatch.parse = (pattern, options) => { + if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options)); + return parse(pattern, { ...options, fastpaths: false }); +}; + +/** + * Scan a glob pattern to separate the pattern into segments. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.scan(input[, options]); + * + * const result = picomatch.scan('!./foo/*.js'); + * console.log(result); + * { prefix: '!./', + * input: '!./foo/*.js', + * start: 3, + * base: 'foo', + * glob: '*.js', + * isBrace: false, + * isBracket: false, + * isGlob: true, + * isExtglob: false, + * isGlobstar: false, + * negated: true } + * ``` + * @param {String} `input` Glob pattern to scan. + * @param {Object} `options` + * @return {Object} Returns an object with + * @api public + */ + +picomatch.scan = (input, options) => scan(input, options); + +/** + * Compile a regular expression from the `state` object returned by the + * [parse()](#parse) method. + * + * @param {Object} `state` + * @param {Object} `options` + * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser. + * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging. + * @return {RegExp} + * @api public + */ + +picomatch.compileRe = (state, options, returnOutput = false, returnState = false) => { + if (returnOutput === true) { + return state.output; + } + + const opts = options || {}; + const prepend = opts.contains ? '' : '^'; + const append = opts.contains ? '' : '$'; + + let source = `${prepend}(?:${state.output})${append}`; + if (state && state.negated === true) { + source = `^(?!${source}).*$`; + } + + const regex = picomatch.toRegex(source, options); + if (returnState === true) { + regex.state = state; + } + + return regex; +}; + +/** + * Create a regular expression from a parsed glob pattern. + * + * ```js + * const picomatch = require('picomatch'); + * const state = picomatch.parse('*.js'); + * // picomatch.compileRe(state[, options]); + * + * console.log(picomatch.compileRe(state)); + * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ + * ``` + * @param {String} `state` The object returned from the `.parse` method. + * @param {Object} `options` + * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result. + * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression. + * @return {RegExp} Returns a regex created from the given pattern. + * @api public + */ + +picomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => { + if (!input || typeof input !== 'string') { + throw new TypeError('Expected a non-empty string'); + } + + let parsed = { negated: false, fastpaths: true }; + + if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) { + parsed.output = parse.fastpaths(input, options); + } + + if (!parsed.output) { + parsed = parse(input, options); + } + + return picomatch.compileRe(parsed, options, returnOutput, returnState); +}; + +/** + * Create a regular expression from the given regex source string. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.toRegex(source[, options]); + * + * const { output } = picomatch.parse('*.js'); + * console.log(picomatch.toRegex(output)); + * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ + * ``` + * @param {String} `source` Regular expression source string. + * @param {Object} `options` + * @return {RegExp} + * @api public + */ + +picomatch.toRegex = (source, options) => { + try { + const opts = options || {}; + return new RegExp(source, opts.flags || (opts.nocase ? 'i' : '')); + } catch (err) { + if (options && options.debug === true) throw err; + return /$^/; + } +}; + +/** + * Picomatch constants. + * @return {Object} + */ + +picomatch.constants = constants; + +/** + * Expose "picomatch" + */ + +module.exports = picomatch; diff --git a/node_modules/jest-util/node_modules/picomatch/lib/scan.js b/node_modules/jest-util/node_modules/picomatch/lib/scan.js new file mode 100644 index 00000000..e59cd7a1 --- /dev/null +++ b/node_modules/jest-util/node_modules/picomatch/lib/scan.js @@ -0,0 +1,391 @@ +'use strict'; + +const utils = require('./utils'); +const { + CHAR_ASTERISK, /* * */ + CHAR_AT, /* @ */ + CHAR_BACKWARD_SLASH, /* \ */ + CHAR_COMMA, /* , */ + CHAR_DOT, /* . */ + CHAR_EXCLAMATION_MARK, /* ! */ + CHAR_FORWARD_SLASH, /* / */ + CHAR_LEFT_CURLY_BRACE, /* { */ + CHAR_LEFT_PARENTHESES, /* ( */ + CHAR_LEFT_SQUARE_BRACKET, /* [ */ + CHAR_PLUS, /* + */ + CHAR_QUESTION_MARK, /* ? */ + CHAR_RIGHT_CURLY_BRACE, /* } */ + CHAR_RIGHT_PARENTHESES, /* ) */ + CHAR_RIGHT_SQUARE_BRACKET /* ] */ +} = require('./constants'); + +const isPathSeparator = code => { + return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH; +}; + +const depth = token => { + if (token.isPrefix !== true) { + token.depth = token.isGlobstar ? Infinity : 1; + } +}; + +/** + * Quickly scans a glob pattern and returns an object with a handful of + * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists), + * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not + * with `!(`) and `negatedExtglob` (true if the path starts with `!(`). + * + * ```js + * const pm = require('picomatch'); + * console.log(pm.scan('foo/bar/*.js')); + * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' } + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {Object} Returns an object with tokens and regex source string. + * @api public + */ + +const scan = (input, options) => { + const opts = options || {}; + + const length = input.length - 1; + const scanToEnd = opts.parts === true || opts.scanToEnd === true; + const slashes = []; + const tokens = []; + const parts = []; + + let str = input; + let index = -1; + let start = 0; + let lastIndex = 0; + let isBrace = false; + let isBracket = false; + let isGlob = false; + let isExtglob = false; + let isGlobstar = false; + let braceEscaped = false; + let backslashes = false; + let negated = false; + let negatedExtglob = false; + let finished = false; + let braces = 0; + let prev; + let code; + let token = { value: '', depth: 0, isGlob: false }; + + const eos = () => index >= length; + const peek = () => str.charCodeAt(index + 1); + const advance = () => { + prev = code; + return str.charCodeAt(++index); + }; + + while (index < length) { + code = advance(); + let next; + + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + code = advance(); + + if (code === CHAR_LEFT_CURLY_BRACE) { + braceEscaped = true; + } + continue; + } + + if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) { + braces++; + + while (eos() !== true && (code = advance())) { + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + advance(); + continue; + } + + if (code === CHAR_LEFT_CURLY_BRACE) { + braces++; + continue; + } + + if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) { + isBrace = token.isBrace = true; + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (braceEscaped !== true && code === CHAR_COMMA) { + isBrace = token.isBrace = true; + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (code === CHAR_RIGHT_CURLY_BRACE) { + braces--; + + if (braces === 0) { + braceEscaped = false; + isBrace = token.isBrace = true; + finished = true; + break; + } + } + } + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (code === CHAR_FORWARD_SLASH) { + slashes.push(index); + tokens.push(token); + token = { value: '', depth: 0, isGlob: false }; + + if (finished === true) continue; + if (prev === CHAR_DOT && index === (start + 1)) { + start += 2; + continue; + } + + lastIndex = index + 1; + continue; + } + + if (opts.noext !== true) { + const isExtglobChar = code === CHAR_PLUS + || code === CHAR_AT + || code === CHAR_ASTERISK + || code === CHAR_QUESTION_MARK + || code === CHAR_EXCLAMATION_MARK; + + if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) { + isGlob = token.isGlob = true; + isExtglob = token.isExtglob = true; + finished = true; + if (code === CHAR_EXCLAMATION_MARK && index === start) { + negatedExtglob = true; + } + + if (scanToEnd === true) { + while (eos() !== true && (code = advance())) { + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + code = advance(); + continue; + } + + if (code === CHAR_RIGHT_PARENTHESES) { + isGlob = token.isGlob = true; + finished = true; + break; + } + } + continue; + } + break; + } + } + + if (code === CHAR_ASTERISK) { + if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true; + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + break; + } + + if (code === CHAR_QUESTION_MARK) { + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + break; + } + + if (code === CHAR_LEFT_SQUARE_BRACKET) { + while (eos() !== true && (next = advance())) { + if (next === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + advance(); + continue; + } + + if (next === CHAR_RIGHT_SQUARE_BRACKET) { + isBracket = token.isBracket = true; + isGlob = token.isGlob = true; + finished = true; + break; + } + } + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) { + negated = token.negated = true; + start++; + continue; + } + + if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) { + isGlob = token.isGlob = true; + + if (scanToEnd === true) { + while (eos() !== true && (code = advance())) { + if (code === CHAR_LEFT_PARENTHESES) { + backslashes = token.backslashes = true; + code = advance(); + continue; + } + + if (code === CHAR_RIGHT_PARENTHESES) { + finished = true; + break; + } + } + continue; + } + break; + } + + if (isGlob === true) { + finished = true; + + if (scanToEnd === true) { + continue; + } + + break; + } + } + + if (opts.noext === true) { + isExtglob = false; + isGlob = false; + } + + let base = str; + let prefix = ''; + let glob = ''; + + if (start > 0) { + prefix = str.slice(0, start); + str = str.slice(start); + lastIndex -= start; + } + + if (base && isGlob === true && lastIndex > 0) { + base = str.slice(0, lastIndex); + glob = str.slice(lastIndex); + } else if (isGlob === true) { + base = ''; + glob = str; + } else { + base = str; + } + + if (base && base !== '' && base !== '/' && base !== str) { + if (isPathSeparator(base.charCodeAt(base.length - 1))) { + base = base.slice(0, -1); + } + } + + if (opts.unescape === true) { + if (glob) glob = utils.removeBackslashes(glob); + + if (base && backslashes === true) { + base = utils.removeBackslashes(base); + } + } + + const state = { + prefix, + input, + start, + base, + glob, + isBrace, + isBracket, + isGlob, + isExtglob, + isGlobstar, + negated, + negatedExtglob + }; + + if (opts.tokens === true) { + state.maxDepth = 0; + if (!isPathSeparator(code)) { + tokens.push(token); + } + state.tokens = tokens; + } + + if (opts.parts === true || opts.tokens === true) { + let prevIndex; + + for (let idx = 0; idx < slashes.length; idx++) { + const n = prevIndex ? prevIndex + 1 : start; + const i = slashes[idx]; + const value = input.slice(n, i); + if (opts.tokens) { + if (idx === 0 && start !== 0) { + tokens[idx].isPrefix = true; + tokens[idx].value = prefix; + } else { + tokens[idx].value = value; + } + depth(tokens[idx]); + state.maxDepth += tokens[idx].depth; + } + if (idx !== 0 || value !== '') { + parts.push(value); + } + prevIndex = i; + } + + if (prevIndex && prevIndex + 1 < input.length) { + const value = input.slice(prevIndex + 1); + parts.push(value); + + if (opts.tokens) { + tokens[tokens.length - 1].value = value; + depth(tokens[tokens.length - 1]); + state.maxDepth += tokens[tokens.length - 1].depth; + } + } + + state.slashes = slashes; + state.parts = parts; + } + + return state; +}; + +module.exports = scan; diff --git a/node_modules/jest-util/node_modules/picomatch/lib/utils.js b/node_modules/jest-util/node_modules/picomatch/lib/utils.js new file mode 100644 index 00000000..c3ca766a --- /dev/null +++ b/node_modules/jest-util/node_modules/picomatch/lib/utils.js @@ -0,0 +1,64 @@ +'use strict'; + +const path = require('path'); +const win32 = process.platform === 'win32'; +const { + REGEX_BACKSLASH, + REGEX_REMOVE_BACKSLASH, + REGEX_SPECIAL_CHARS, + REGEX_SPECIAL_CHARS_GLOBAL +} = require('./constants'); + +exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val); +exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str); +exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str); +exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1'); +exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/'); + +exports.removeBackslashes = str => { + return str.replace(REGEX_REMOVE_BACKSLASH, match => { + return match === '\\' ? '' : match; + }); +}; + +exports.supportsLookbehinds = () => { + const segs = process.version.slice(1).split('.').map(Number); + if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) { + return true; + } + return false; +}; + +exports.isWindows = options => { + if (options && typeof options.windows === 'boolean') { + return options.windows; + } + return win32 === true || path.sep === '\\'; +}; + +exports.escapeLast = (input, char, lastIdx) => { + const idx = input.lastIndexOf(char, lastIdx); + if (idx === -1) return input; + if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1); + return `${input.slice(0, idx)}\\${input.slice(idx)}`; +}; + +exports.removePrefix = (input, state = {}) => { + let output = input; + if (output.startsWith('./')) { + output = output.slice(2); + state.prefix = './'; + } + return output; +}; + +exports.wrapOutput = (input, state = {}, options = {}) => { + const prepend = options.contains ? '' : '^'; + const append = options.contains ? '' : '$'; + + let output = `${prepend}(?:${input})${append}`; + if (state.negated === true) { + output = `(?:^(?!${output}).*$)`; + } + return output; +}; diff --git a/node_modules/jest-util/node_modules/picomatch/package.json b/node_modules/jest-util/node_modules/picomatch/package.json new file mode 100644 index 00000000..3db22d40 --- /dev/null +++ b/node_modules/jest-util/node_modules/picomatch/package.json @@ -0,0 +1,81 @@ +{ + "name": "picomatch", + "description": "Blazing fast and accurate glob matcher written in JavaScript, with no dependencies and full support for standard and extended Bash glob features, including braces, extglobs, POSIX brackets, and regular expressions.", + "version": "2.3.1", + "homepage": "https://github.com/micromatch/picomatch", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "funding": "https://github.com/sponsors/jonschlinkert", + "repository": "micromatch/picomatch", + "bugs": { + "url": "https://github.com/micromatch/picomatch/issues" + }, + "license": "MIT", + "files": [ + "index.js", + "lib" + ], + "main": "index.js", + "engines": { + "node": ">=8.6" + }, + "scripts": { + "lint": "eslint --cache --cache-location node_modules/.cache/.eslintcache --report-unused-disable-directives --ignore-path .gitignore .", + "mocha": "mocha --reporter dot", + "test": "npm run lint && npm run mocha", + "test:ci": "npm run test:cover", + "test:cover": "nyc npm run mocha" + }, + "devDependencies": { + "eslint": "^6.8.0", + "fill-range": "^7.0.1", + "gulp-format-md": "^2.0.0", + "mocha": "^6.2.2", + "nyc": "^15.0.0", + "time-require": "github:jonschlinkert/time-require" + }, + "keywords": [ + "glob", + "match", + "picomatch" + ], + "nyc": { + "reporter": [ + "html", + "lcov", + "text-summary" + ] + }, + "verb": { + "toc": { + "render": true, + "method": "preWrite", + "maxdepth": 3 + }, + "layout": "empty", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + }, + "related": { + "list": [ + "braces", + "micromatch" + ] + }, + "reflinks": [ + "braces", + "expand-brackets", + "extglob", + "fill-range", + "micromatch", + "minimatch", + "nanomatch", + "picomatch" + ] + } +} diff --git a/node_modules/jest-util/package.json b/node_modules/jest-util/package.json new file mode 100644 index 00000000..33b7b931 --- /dev/null +++ b/node_modules/jest-util/package.json @@ -0,0 +1,38 @@ +{ + "name": "jest-util", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-util" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "devDependencies": { + "@types/graceful-fs": "^4.1.3", + "@types/picomatch": "^2.2.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-validate/LICENSE b/node_modules/jest-validate/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-validate/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-validate/README.md b/node_modules/jest-validate/README.md new file mode 100644 index 00000000..41b275ce --- /dev/null +++ b/node_modules/jest-validate/README.md @@ -0,0 +1,216 @@ +# jest-validate + +Generic configuration validation tool that helps you with warnings, errors and deprecation messages as well as showing users examples of correct configuration. + +```bash +npm install --save jest-validate +``` + +## Usage + +```js +import {validate} from 'jest-validate'; + +validate(config, validationOptions); // => {hasDeprecationWarnings: boolean, isValid: boolean} +``` + +Where `ValidationOptions` are: + +```ts +type ValidationOptions = { + comment?: string; + condition?: (option: unknown, validOption: unknown) => boolean; + deprecate?: ( + config: Record, + option: string, + deprecatedOptions: DeprecatedOptions, + options: ValidationOptions, + ) => boolean; + deprecatedConfig?: DeprecatedOptions; + error?: ( + option: string, + received: unknown, + defaultValue: unknown, + options: ValidationOptions, + path?: Array, + ) => void; + exampleConfig: Record; + recursive?: boolean; + recursiveBlacklist?: Array; + recursiveDenylist?: Array; + title?: Title; + unknown?: ( + config: Record, + exampleConfig: Record, + option: string, + options: ValidationOptions, + path?: Array, + ) => void; +}; + +type Title = { + deprecation?: string; + error?: string; + warning?: string; +}; +``` + +`exampleConfig` is the only option required. + +## API + +By default `jest-validate` will print generic warning and error messages. You can however customize this behavior by providing `options: ValidationOptions` object as a second argument: + +Almost anything can be overwritten to suite your needs. + +### Options + +- `recursiveDenylist` – optional array of string keyPaths that should be excluded from deep (recursive) validation. +- `comment` – optional string to be rendered below error/warning message. +- `condition` – an optional function with validation condition. +- `deprecate`, `error`, `unknown` – optional functions responsible for displaying warning and error messages. +- `deprecatedConfig` – optional object with deprecated config keys. +- `exampleConfig` – the only **required** option with configuration against which you'd like to test. +- `recursive` - optional boolean determining whether recursively compare `exampleConfig` to `config` (default: `true`). +- `title` – optional object of titles for errors and messages. + +You will find examples of `condition`, `deprecate`, `error`, `unknown`, and `deprecatedConfig` inside source of this repository, named respectively. + +## exampleConfig syntax + +`exampleConfig` should be an object with key/value pairs that contain an example of a valid value for each key. A configuration value is considered valid when: + +- it matches the JavaScript type of the example value, e.g. `string`, `number`, `array`, `boolean`, `function`, or `object` +- it is `null` or `undefined` +- it matches the Javascript type of any of arguments passed to `MultipleValidOptions(...)` + +The last condition is a special syntax that allows validating where more than one type is permissible; see example below. It's acceptable to have multiple values of the same type in the example, so you can also use this syntax to provide more than one example. When a validation failure occurs, the error message will show all other values in the array as examples. + +## Examples + +Minimal example: + +```js +validate(config, {exampleConfig}); +``` + +Example with slight modifications: + +```js +validate(config, { + comment: ' Documentation: http://custom-docs.com', + deprecatedConfig, + exampleConfig, + title: { + deprecation: 'Custom Deprecation', + // leaving 'error' and 'warning' as default + }, +}); +``` + +This will output: + +#### Warning: + +```bash +● Validation Warning: + + Unknown option transformx with value "/node_modules/babel-jest" was found. + This is either a typing error or a user mistake. Fixing it will remove this message. + + Documentation: http://custom-docs.com +``` + +#### Error: + +```bash +● Validation Error: + + Option transform must be of type: + object + but instead received: + string + + Example: + { + "transform": { + "\\.js$": "/preprocessor.js" + } + } + + Documentation: http://custom-docs.com +``` + +## Example validating multiple types + +```js +import {multipleValidOptions} from 'jest-validate'; + +validate(config, { + // `bar` will accept either a string or a number + bar: multipleValidOptions('string is ok', 2), +}); +``` + +#### Error: + +```bash +● Validation Error: + + Option foo must be of type: + string or number + but instead received: + array + + Example: + { + "bar": "string is ok" + } + + or + + { + "bar": 2 + } + + Documentation: http://custom-docs.com +``` + +#### Deprecation + +Based on `deprecatedConfig` object with proper deprecation messages. Note custom title: + +```bash +Custom Deprecation: + + Option scriptPreprocessor was replaced by transform, which support multiple preprocessors. + + Jest now treats your current configuration as: + { + "transform": {".*": "xxx"} + } + + Please update your configuration. + + Documentation: http://custom-docs.com +``` + +## Example validating CLI arguments + +```js +import {validate} from 'jest-validate'; + +validateCLIOptions(argv, {...allowedOptions, deprecatedOptions}); +``` + +If `argv` contains a deprecated option that is not specifid in `allowedOptions`, `validateCLIOptions` will throw an error with the message specified in the `deprecatedOptions` config: + +```bash +● collectCoverageOnlyFrom: + + Option "collectCoverageOnlyFrom" was replaced by "collectCoverageFrom" + + CLI Options Documentation: https://jestjs.io/docs/en/cli.html +``` + +If the deprecation option is still listed in the `allowedOptions` config, then `validateCLIOptions` will print the warning wihout throwing an error. diff --git a/node_modules/jest-validate/build/condition.js b/node_modules/jest-validate/build/condition.js new file mode 100644 index 00000000..4b19031d --- /dev/null +++ b/node_modules/jest-validate/build/condition.js @@ -0,0 +1,44 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.getValues = getValues; +exports.multipleValidOptions = multipleValidOptions; +exports.validationCondition = validationCondition; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const toString = Object.prototype.toString; +const MULTIPLE_VALID_OPTIONS_SYMBOL = Symbol('JEST_MULTIPLE_VALID_OPTIONS'); +function validationConditionSingle(option, validOption) { + return ( + option === null || + option === undefined || + (typeof option === 'function' && typeof validOption === 'function') || + toString.call(option) === toString.call(validOption) + ); +} +function getValues(validOption) { + if ( + Array.isArray(validOption) && + // @ts-expect-error: no index signature + validOption[MULTIPLE_VALID_OPTIONS_SYMBOL] + ) { + return validOption; + } + return [validOption]; +} +function validationCondition(option, validOption) { + return getValues(validOption).some(e => validationConditionSingle(option, e)); +} +function multipleValidOptions(...args) { + const options = [...args]; + // @ts-expect-error: no index signature + options[MULTIPLE_VALID_OPTIONS_SYMBOL] = true; + return options; +} diff --git a/node_modules/jest-validate/build/defaultConfig.js b/node_modules/jest-validate/build/defaultConfig.js new file mode 100644 index 00000000..c43f2c03 --- /dev/null +++ b/node_modules/jest-validate/build/defaultConfig.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +var _condition = require('./condition'); +var _deprecated = require('./deprecated'); +var _errors = require('./errors'); +var _utils = require('./utils'); +var _warnings = require('./warnings'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const validationOptions = { + comment: '', + condition: _condition.validationCondition, + deprecate: _deprecated.deprecationWarning, + deprecatedConfig: {}, + error: _errors.errorMessage, + exampleConfig: {}, + recursive: true, + // Allow NPM-sanctioned comments in package.json. Use a "//" key. + recursiveDenylist: ['//'], + title: { + deprecation: _utils.DEPRECATION, + error: _utils.ERROR, + warning: _utils.WARNING + }, + unknown: _warnings.unknownOptionWarning +}; +var _default = validationOptions; +exports.default = _default; diff --git a/node_modules/jest-validate/build/deprecated.js b/node_modules/jest-validate/build/deprecated.js new file mode 100644 index 00000000..e5e80707 --- /dev/null +++ b/node_modules/jest-validate/build/deprecated.js @@ -0,0 +1,28 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.deprecationWarning = void 0; +var _utils = require('./utils'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const deprecationMessage = (message, options) => { + const comment = options.comment; + const name = + (options.title && options.title.deprecation) || _utils.DEPRECATION; + (0, _utils.logValidationWarning)(name, message, comment); +}; +const deprecationWarning = (config, option, deprecatedOptions, options) => { + if (option in deprecatedOptions) { + deprecationMessage(deprecatedOptions[option](config), options); + return true; + } + return false; +}; +exports.deprecationWarning = deprecationWarning; diff --git a/node_modules/jest-validate/build/errors.js b/node_modules/jest-validate/build/errors.js new file mode 100644 index 00000000..4a288027 --- /dev/null +++ b/node_modules/jest-validate/build/errors.js @@ -0,0 +1,64 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.errorMessage = void 0; +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +function _jestGetType() { + const data = require('jest-get-type'); + _jestGetType = function () { + return data; + }; + return data; +} +var _condition = require('./condition'); +var _utils = require('./utils'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const errorMessage = (option, received, defaultValue, options, path) => { + const conditions = (0, _condition.getValues)(defaultValue); + const validTypes = Array.from( + new Set(conditions.map(_jestGetType().getType)) + ); + const message = ` Option ${_chalk().default.bold( + `"${path && path.length > 0 ? `${path.join('.')}.` : ''}${option}"` + )} must be of type: + ${validTypes.map(e => _chalk().default.bold.green(e)).join(' or ')} + but instead received: + ${_chalk().default.bold.red((0, _jestGetType().getType)(received))} + + Example: +${formatExamples(option, conditions)}`; + const comment = options.comment; + const name = (options.title && options.title.error) || _utils.ERROR; + throw new _utils.ValidationError(name, message, comment); +}; +exports.errorMessage = errorMessage; +function formatExamples(option, examples) { + return examples.map( + e => ` { + ${_chalk().default.bold(`"${option}"`)}: ${_chalk().default.bold( + (0, _utils.formatPrettyObject)(e) + )} + }` + ).join(` + + or + +`); +} diff --git a/node_modules/jest-validate/build/exampleConfig.js b/node_modules/jest-validate/build/exampleConfig.js new file mode 100644 index 00000000..92f2d6cc --- /dev/null +++ b/node_modules/jest-validate/build/exampleConfig.js @@ -0,0 +1,38 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const config = { + comment: ' A comment', + condition: () => true, + deprecate: () => false, + deprecatedConfig: { + key: () => 'Deprecation message' + }, + // eslint-disable-next-line @typescript-eslint/no-empty-function + error: () => {}, + exampleConfig: { + key: 'value', + test: 'case' + }, + recursive: true, + recursiveDenylist: [], + title: { + deprecation: 'Deprecation Warning', + error: 'Validation Error', + warning: 'Validation Warning' + }, + // eslint-disable-next-line @typescript-eslint/no-empty-function + unknown: () => {} +}; +var _default = config; +exports.default = _default; diff --git a/node_modules/jest-validate/build/index.d.ts b/node_modules/jest-validate/build/index.d.ts new file mode 100644 index 00000000..64bd1de0 --- /dev/null +++ b/node_modules/jest-validate/build/index.d.ts @@ -0,0 +1,89 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import type {Config} from '@jest/types'; +import type {Options} from 'yargs'; + +export declare const createDidYouMeanMessage: ( + unrecognized: string, + allowedOptions: Array, +) => string; + +declare type DeprecatedOptionFunc = (arg: Record) => string; + +export declare type DeprecatedOptions = Record; + +export declare const format: (value: unknown) => string; + +export declare const logValidationWarning: ( + name: string, + message: string, + comment?: string | null, +) => void; + +export declare function multipleValidOptions>( + ...args: T +): T[number]; + +declare type Title = { + deprecation?: string; + error?: string; + warning?: string; +}; + +export declare const validate: ( + config: Record, + options: ValidationOptions, +) => { + hasDeprecationWarnings: boolean; + isValid: boolean; +}; + +export declare function validateCLIOptions( + argv: Config.Argv, + options?: Record & { + deprecationEntries?: DeprecatedOptions; + }, + rawArgv?: Array, +): boolean; + +export declare class ValidationError extends Error { + name: string; + message: string; + constructor(name: string, message: string, comment?: string | null); +} + +declare type ValidationOptions = { + comment?: string; + condition?: (option: unknown, validOption: unknown) => boolean; + deprecate?: ( + config: Record, + option: string, + deprecatedOptions: DeprecatedOptions, + options: ValidationOptions, + ) => boolean; + deprecatedConfig?: DeprecatedOptions; + error?: ( + option: string, + received: unknown, + defaultValue: unknown, + options: ValidationOptions, + path?: Array, + ) => void; + exampleConfig: Record; + recursive?: boolean; + recursiveDenylist?: Array; + title?: Title; + unknown?: ( + config: Record, + exampleConfig: Record, + option: string, + options: ValidationOptions, + path?: Array, + ) => void; +}; + +export {}; diff --git a/node_modules/jest-validate/build/index.js b/node_modules/jest-validate/build/index.js new file mode 100644 index 00000000..d0e6b1d7 --- /dev/null +++ b/node_modules/jest-validate/build/index.js @@ -0,0 +1,56 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +Object.defineProperty(exports, 'ValidationError', { + enumerable: true, + get: function () { + return _utils.ValidationError; + } +}); +Object.defineProperty(exports, 'createDidYouMeanMessage', { + enumerable: true, + get: function () { + return _utils.createDidYouMeanMessage; + } +}); +Object.defineProperty(exports, 'format', { + enumerable: true, + get: function () { + return _utils.format; + } +}); +Object.defineProperty(exports, 'logValidationWarning', { + enumerable: true, + get: function () { + return _utils.logValidationWarning; + } +}); +Object.defineProperty(exports, 'multipleValidOptions', { + enumerable: true, + get: function () { + return _condition.multipleValidOptions; + } +}); +Object.defineProperty(exports, 'validate', { + enumerable: true, + get: function () { + return _validate.default; + } +}); +Object.defineProperty(exports, 'validateCLIOptions', { + enumerable: true, + get: function () { + return _validateCLIOptions.default; + } +}); +var _utils = require('./utils'); +var _validate = _interopRequireDefault(require('./validate')); +var _validateCLIOptions = _interopRequireDefault( + require('./validateCLIOptions') +); +var _condition = require('./condition'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} diff --git a/node_modules/jest-validate/build/types.js b/node_modules/jest-validate/build/types.js new file mode 100644 index 00000000..ad9a93a7 --- /dev/null +++ b/node_modules/jest-validate/build/types.js @@ -0,0 +1 @@ +'use strict'; diff --git a/node_modules/jest-validate/build/utils.js b/node_modules/jest-validate/build/utils.js new file mode 100644 index 00000000..d1034968 --- /dev/null +++ b/node_modules/jest-validate/build/utils.js @@ -0,0 +1,100 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.logValidationWarning = + exports.formatPrettyObject = + exports.format = + exports.createDidYouMeanMessage = + exports.WARNING = + exports.ValidationError = + exports.ERROR = + exports.DEPRECATION = + void 0; +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +function _leven() { + const data = _interopRequireDefault(require('leven')); + _leven = function () { + return data; + }; + return data; +} +function _prettyFormat() { + const data = require('pretty-format'); + _prettyFormat = function () { + return data; + }; + return data; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const BULLET = _chalk().default.bold('\u25cf'); +const DEPRECATION = `${BULLET} Deprecation Warning`; +exports.DEPRECATION = DEPRECATION; +const ERROR = `${BULLET} Validation Error`; +exports.ERROR = ERROR; +const WARNING = `${BULLET} Validation Warning`; +exports.WARNING = WARNING; +const format = value => + typeof value === 'function' + ? value.toString() + : (0, _prettyFormat().format)(value, { + min: true + }); +exports.format = format; +const formatPrettyObject = value => + typeof value === 'function' + ? value.toString() + : typeof value === 'undefined' + ? 'undefined' + : JSON.stringify(value, null, 2).split('\n').join('\n '); +exports.formatPrettyObject = formatPrettyObject; +class ValidationError extends Error { + name; + message; + constructor(name, message, comment) { + super(); + comment = comment ? `\n\n${comment}` : '\n'; + this.name = ''; + this.message = _chalk().default.red( + `${_chalk().default.bold(name)}:\n\n${message}${comment}` + ); + // eslint-disable-next-line @typescript-eslint/no-empty-function + Error.captureStackTrace(this, () => {}); + } +} +exports.ValidationError = ValidationError; +const logValidationWarning = (name, message, comment) => { + comment = comment ? `\n\n${comment}` : '\n'; + console.warn( + _chalk().default.yellow( + `${_chalk().default.bold(name)}:\n\n${message}${comment}` + ) + ); +}; +exports.logValidationWarning = logValidationWarning; +const createDidYouMeanMessage = (unrecognized, allowedOptions) => { + const suggestion = allowedOptions.find(option => { + const steps = (0, _leven().default)(option, unrecognized); + return steps < 3; + }); + return suggestion + ? `Did you mean ${_chalk().default.bold(format(suggestion))}?` + : ''; +}; +exports.createDidYouMeanMessage = createDidYouMeanMessage; diff --git a/node_modules/jest-validate/build/validate.js b/node_modules/jest-validate/build/validate.js new file mode 100644 index 00000000..f40ffdf7 --- /dev/null +++ b/node_modules/jest-validate/build/validate.js @@ -0,0 +1,117 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +var _defaultConfig = _interopRequireDefault(require('./defaultConfig')); +var _utils = require('./utils'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +let hasDeprecationWarnings = false; +const shouldSkipValidationForPath = (path, key, denylist) => + denylist ? denylist.includes([...path, key].join('.')) : false; +const _validate = (config, exampleConfig, options, path = []) => { + if ( + typeof config !== 'object' || + config == null || + typeof exampleConfig !== 'object' || + exampleConfig == null + ) { + return { + hasDeprecationWarnings + }; + } + for (const key in config) { + if ( + options.deprecatedConfig && + key in options.deprecatedConfig && + typeof options.deprecate === 'function' + ) { + const isDeprecatedKey = options.deprecate( + config, + key, + options.deprecatedConfig, + options + ); + hasDeprecationWarnings = hasDeprecationWarnings || isDeprecatedKey; + } else if (allowsMultipleTypes(key)) { + const value = config[key]; + if ( + typeof options.condition === 'function' && + typeof options.error === 'function' + ) { + if (key === 'maxWorkers' && !isOfTypeStringOrNumber(value)) { + throw new _utils.ValidationError( + 'Validation Error', + `${key} has to be of type string or number`, + 'maxWorkers=50% or\nmaxWorkers=3' + ); + } + } + } else if (Object.hasOwnProperty.call(exampleConfig, key)) { + if ( + typeof options.condition === 'function' && + typeof options.error === 'function' && + !options.condition(config[key], exampleConfig[key]) + ) { + options.error(key, config[key], exampleConfig[key], options, path); + } + } else if ( + shouldSkipValidationForPath(path, key, options.recursiveDenylist) + ) { + // skip validating unknown options inside blacklisted paths + } else { + options.unknown && + options.unknown(config, exampleConfig, key, options, path); + } + if ( + options.recursive && + !Array.isArray(exampleConfig[key]) && + options.recursiveDenylist && + !shouldSkipValidationForPath(path, key, options.recursiveDenylist) + ) { + _validate(config[key], exampleConfig[key], options, [...path, key]); + } + } + return { + hasDeprecationWarnings + }; +}; +const allowsMultipleTypes = key => key === 'maxWorkers'; +const isOfTypeStringOrNumber = value => + typeof value === 'number' || typeof value === 'string'; +const validate = (config, options) => { + hasDeprecationWarnings = false; + + // Preserve default denylist entries even with user-supplied denylist + const combinedDenylist = [ + ...(_defaultConfig.default.recursiveDenylist || []), + ...(options.recursiveDenylist || []) + ]; + const defaultedOptions = Object.assign({ + ..._defaultConfig.default, + ...options, + recursiveDenylist: combinedDenylist, + title: options.title || _defaultConfig.default.title + }); + const {hasDeprecationWarnings: hdw} = _validate( + config, + options.exampleConfig, + defaultedOptions + ); + return { + hasDeprecationWarnings: hdw, + isValid: true + }; +}; +var _default = validate; +exports.default = _default; diff --git a/node_modules/jest-validate/build/validateCLIOptions.js b/node_modules/jest-validate/build/validateCLIOptions.js new file mode 100644 index 00000000..909d0562 --- /dev/null +++ b/node_modules/jest-validate/build/validateCLIOptions.js @@ -0,0 +1,127 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.DOCUMENTATION_NOTE = void 0; +exports.default = validateCLIOptions; +function _camelcase() { + const data = _interopRequireDefault(require('camelcase')); + _camelcase = function () { + return data; + }; + return data; +} +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +var _utils = require('./utils'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const BULLET = _chalk().default.bold('\u25cf'); +const DOCUMENTATION_NOTE = ` ${_chalk().default.bold( + 'CLI Options Documentation:' +)} + https://jestjs.io/docs/cli +`; +exports.DOCUMENTATION_NOTE = DOCUMENTATION_NOTE; +const createCLIValidationError = (unrecognizedOptions, allowedOptions) => { + let title = `${BULLET} Unrecognized CLI Parameter`; + let message; + const comment = + ` ${_chalk().default.bold('CLI Options Documentation')}:\n` + + ' https://jestjs.io/docs/cli\n'; + if (unrecognizedOptions.length === 1) { + const unrecognized = unrecognizedOptions[0]; + const didYouMeanMessage = + unrecognized.length > 1 + ? (0, _utils.createDidYouMeanMessage)( + unrecognized, + Array.from(allowedOptions) + ) + : ''; + message = ` Unrecognized option ${_chalk().default.bold( + (0, _utils.format)(unrecognized) + )}.${didYouMeanMessage ? ` ${didYouMeanMessage}` : ''}`; + } else { + title += 's'; + message = + ' Following options were not recognized:\n' + + ` ${_chalk().default.bold((0, _utils.format)(unrecognizedOptions))}`; + } + return new _utils.ValidationError(title, message, comment); +}; +const validateDeprecatedOptions = ( + deprecatedOptions, + deprecationEntries, + argv +) => { + deprecatedOptions.forEach(opt => { + const name = opt.name; + const message = deprecationEntries[name](argv); + const comment = DOCUMENTATION_NOTE; + if (opt.fatal) { + throw new _utils.ValidationError(name, message, comment); + } else { + (0, _utils.logValidationWarning)(name, message, comment); + } + }); +}; +function validateCLIOptions(argv, options = {}, rawArgv = []) { + const yargsSpecialOptions = ['$0', '_', 'help', 'h']; + const allowedOptions = Object.keys(options).reduce( + (acc, option) => acc.add(option).add(options[option].alias || option), + new Set(yargsSpecialOptions) + ); + const deprecationEntries = options.deprecationEntries ?? {}; + const CLIDeprecations = Object.keys(deprecationEntries).reduce( + (acc, entry) => { + acc[entry] = deprecationEntries[entry]; + if (options[entry]) { + const alias = options[entry].alias; + if (alias) { + acc[alias] = deprecationEntries[entry]; + } + } + return acc; + }, + {} + ); + const deprecations = new Set(Object.keys(CLIDeprecations)); + const deprecatedOptions = Object.keys(argv) + .filter(arg => deprecations.has(arg) && argv[arg] != null) + .map(arg => ({ + fatal: !allowedOptions.has(arg), + name: arg + })); + if (deprecatedOptions.length) { + validateDeprecatedOptions(deprecatedOptions, CLIDeprecations, argv); + } + const unrecognizedOptions = Object.keys(argv).filter( + arg => + !allowedOptions.has( + (0, _camelcase().default)(arg, { + locale: 'en-US' + }) + ) && + !allowedOptions.has(arg) && + (!rawArgv.length || rawArgv.includes(arg)), + [] + ); + if (unrecognizedOptions.length) { + throw createCLIValidationError(unrecognizedOptions, allowedOptions); + } + return true; +} diff --git a/node_modules/jest-validate/build/warnings.js b/node_modules/jest-validate/build/warnings.js new file mode 100644 index 00000000..1860d5ae --- /dev/null +++ b/node_modules/jest-validate/build/warnings.js @@ -0,0 +1,41 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.unknownOptionWarning = void 0; +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +var _utils = require('./utils'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const unknownOptionWarning = (config, exampleConfig, option, options, path) => { + const didYouMean = (0, _utils.createDidYouMeanMessage)( + option, + Object.keys(exampleConfig) + ); + const message = ` Unknown option ${_chalk().default.bold( + `"${path && path.length > 0 ? `${path.join('.')}.` : ''}${option}"` + )} with value ${_chalk().default.bold( + (0, _utils.format)(config[option]) + )} was found.${ + didYouMean && ` ${didYouMean}` + }\n This is probably a typing mistake. Fixing it will remove this message.`; + const comment = options.comment; + const name = (options.title && options.title.warning) || _utils.WARNING; + (0, _utils.logValidationWarning)(name, message, comment); +}; +exports.unknownOptionWarning = unknownOptionWarning; diff --git a/node_modules/jest-validate/node_modules/camelcase/index.d.ts b/node_modules/jest-validate/node_modules/camelcase/index.d.ts new file mode 100644 index 00000000..9db94e53 --- /dev/null +++ b/node_modules/jest-validate/node_modules/camelcase/index.d.ts @@ -0,0 +1,103 @@ +declare namespace camelcase { + interface Options { + /** + Uppercase the first character: `foo-bar` → `FooBar`. + + @default false + */ + readonly pascalCase?: boolean; + + /** + Preserve the consecutive uppercase characters: `foo-BAR` → `FooBAR`. + + @default false + */ + readonly preserveConsecutiveUppercase?: boolean; + + /** + The locale parameter indicates the locale to be used to convert to upper/lower case according to any locale-specific case mappings. If multiple locales are given in an array, the best available locale is used. + + Setting `locale: false` ignores the platform locale and uses the [Unicode Default Case Conversion](https://unicode-org.github.io/icu/userguide/transforms/casemappings.html#simple-single-character-case-mapping) algorithm. + + Default: The host environment’s current locale. + + @example + ``` + import camelCase = require('camelcase'); + + camelCase('lorem-ipsum', {locale: 'en-US'}); + //=> 'loremIpsum' + camelCase('lorem-ipsum', {locale: 'tr-TR'}); + //=> 'loremİpsum' + camelCase('lorem-ipsum', {locale: ['en-US', 'en-GB']}); + //=> 'loremIpsum' + camelCase('lorem-ipsum', {locale: ['tr', 'TR', 'tr-TR']}); + //=> 'loremİpsum' + ``` + */ + readonly locale?: false | string | readonly string[]; + } +} + +/** +Convert a dash/dot/underscore/space separated string to camelCase or PascalCase: `foo-bar` → `fooBar`. + +Correctly handles Unicode strings. + +@param input - String to convert to camel case. + +@example +``` +import camelCase = require('camelcase'); + +camelCase('foo-bar'); +//=> 'fooBar' + +camelCase('foo_bar'); +//=> 'fooBar' + +camelCase('Foo-Bar'); +//=> 'fooBar' + +camelCase('розовый_пушистый_единорог'); +//=> 'розовыйПушистыйЕдинорог' + +camelCase('Foo-Bar', {pascalCase: true}); +//=> 'FooBar' + +camelCase('--foo.bar', {pascalCase: false}); +//=> 'fooBar' + +camelCase('Foo-BAR', {preserveConsecutiveUppercase: true}); +//=> 'fooBAR' + +camelCase('fooBAR', {pascalCase: true, preserveConsecutiveUppercase: true})); +//=> 'FooBAR' + +camelCase('foo bar'); +//=> 'fooBar' + +console.log(process.argv[3]); +//=> '--foo-bar' +camelCase(process.argv[3]); +//=> 'fooBar' + +camelCase(['foo', 'bar']); +//=> 'fooBar' + +camelCase(['__foo__', '--bar'], {pascalCase: true}); +//=> 'FooBar' + +camelCase(['foo', 'BAR'], {pascalCase: true, preserveConsecutiveUppercase: true}) +//=> 'FooBAR' + +camelCase('lorem-ipsum', {locale: 'en-US'}); +//=> 'loremIpsum' +``` +*/ +declare function camelcase( + input: string | readonly string[], + options?: camelcase.Options +): string; + +export = camelcase; diff --git a/node_modules/jest-validate/node_modules/camelcase/index.js b/node_modules/jest-validate/node_modules/camelcase/index.js new file mode 100644 index 00000000..6ff4ee85 --- /dev/null +++ b/node_modules/jest-validate/node_modules/camelcase/index.js @@ -0,0 +1,113 @@ +'use strict'; + +const UPPERCASE = /[\p{Lu}]/u; +const LOWERCASE = /[\p{Ll}]/u; +const LEADING_CAPITAL = /^[\p{Lu}](?![\p{Lu}])/gu; +const IDENTIFIER = /([\p{Alpha}\p{N}_]|$)/u; +const SEPARATORS = /[_.\- ]+/; + +const LEADING_SEPARATORS = new RegExp('^' + SEPARATORS.source); +const SEPARATORS_AND_IDENTIFIER = new RegExp(SEPARATORS.source + IDENTIFIER.source, 'gu'); +const NUMBERS_AND_IDENTIFIER = new RegExp('\\d+' + IDENTIFIER.source, 'gu'); + +const preserveCamelCase = (string, toLowerCase, toUpperCase) => { + let isLastCharLower = false; + let isLastCharUpper = false; + let isLastLastCharUpper = false; + + for (let i = 0; i < string.length; i++) { + const character = string[i]; + + if (isLastCharLower && UPPERCASE.test(character)) { + string = string.slice(0, i) + '-' + string.slice(i); + isLastCharLower = false; + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = true; + i++; + } else if (isLastCharUpper && isLastLastCharUpper && LOWERCASE.test(character)) { + string = string.slice(0, i - 1) + '-' + string.slice(i - 1); + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = false; + isLastCharLower = true; + } else { + isLastCharLower = toLowerCase(character) === character && toUpperCase(character) !== character; + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = toUpperCase(character) === character && toLowerCase(character) !== character; + } + } + + return string; +}; + +const preserveConsecutiveUppercase = (input, toLowerCase) => { + LEADING_CAPITAL.lastIndex = 0; + + return input.replace(LEADING_CAPITAL, m1 => toLowerCase(m1)); +}; + +const postProcess = (input, toUpperCase) => { + SEPARATORS_AND_IDENTIFIER.lastIndex = 0; + NUMBERS_AND_IDENTIFIER.lastIndex = 0; + + return input.replace(SEPARATORS_AND_IDENTIFIER, (_, identifier) => toUpperCase(identifier)) + .replace(NUMBERS_AND_IDENTIFIER, m => toUpperCase(m)); +}; + +const camelCase = (input, options) => { + if (!(typeof input === 'string' || Array.isArray(input))) { + throw new TypeError('Expected the input to be `string | string[]`'); + } + + options = { + pascalCase: false, + preserveConsecutiveUppercase: false, + ...options + }; + + if (Array.isArray(input)) { + input = input.map(x => x.trim()) + .filter(x => x.length) + .join('-'); + } else { + input = input.trim(); + } + + if (input.length === 0) { + return ''; + } + + const toLowerCase = options.locale === false ? + string => string.toLowerCase() : + string => string.toLocaleLowerCase(options.locale); + const toUpperCase = options.locale === false ? + string => string.toUpperCase() : + string => string.toLocaleUpperCase(options.locale); + + if (input.length === 1) { + return options.pascalCase ? toUpperCase(input) : toLowerCase(input); + } + + const hasUpperCase = input !== toLowerCase(input); + + if (hasUpperCase) { + input = preserveCamelCase(input, toLowerCase, toUpperCase); + } + + input = input.replace(LEADING_SEPARATORS, ''); + + if (options.preserveConsecutiveUppercase) { + input = preserveConsecutiveUppercase(input, toLowerCase); + } else { + input = toLowerCase(input); + } + + if (options.pascalCase) { + input = toUpperCase(input.charAt(0)) + input.slice(1); + } + + return postProcess(input, toUpperCase); +}; + +module.exports = camelCase; +// TODO: Remove this for the next major release +module.exports.default = camelCase; diff --git a/node_modules/jest-validate/node_modules/camelcase/license b/node_modules/jest-validate/node_modules/camelcase/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/node_modules/jest-validate/node_modules/camelcase/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +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/jest-validate/node_modules/camelcase/package.json b/node_modules/jest-validate/node_modules/camelcase/package.json new file mode 100644 index 00000000..c4335792 --- /dev/null +++ b/node_modules/jest-validate/node_modules/camelcase/package.json @@ -0,0 +1,44 @@ +{ + "name": "camelcase", + "version": "6.3.0", + "description": "Convert a dash/dot/underscore/space separated string to camelCase or PascalCase: `foo-bar` → `fooBar`", + "license": "MIT", + "repository": "sindresorhus/camelcase", + "funding": "https://github.com/sponsors/sindresorhus", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "engines": { + "node": ">=10" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "camelcase", + "camel-case", + "camel", + "case", + "dash", + "hyphen", + "dot", + "underscore", + "separator", + "string", + "text", + "convert", + "pascalcase", + "pascal-case" + ], + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.11.0", + "xo": "^0.28.3" + } +} diff --git a/node_modules/jest-validate/node_modules/camelcase/readme.md b/node_modules/jest-validate/node_modules/camelcase/readme.md new file mode 100644 index 00000000..0ff8f9e1 --- /dev/null +++ b/node_modules/jest-validate/node_modules/camelcase/readme.md @@ -0,0 +1,144 @@ +# camelcase + +> Convert a dash/dot/underscore/space separated string to camelCase or PascalCase: `foo-bar` → `fooBar` + +Correctly handles Unicode strings. + +If you use this on untrusted user input, don't forget to limit the length to something reasonable. + +## Install + +``` +$ npm install camelcase +``` + +*If you need to support Firefox < 78, stay on version 5 as version 6 uses regex features not available in Firefox < 78.* + +## Usage + +```js +const camelCase = require('camelcase'); + +camelCase('foo-bar'); +//=> 'fooBar' + +camelCase('foo_bar'); +//=> 'fooBar' + +camelCase('Foo-Bar'); +//=> 'fooBar' + +camelCase('розовый_пушистый_единорог'); +//=> 'розовыйПушистыйЕдинорог' + +camelCase('Foo-Bar', {pascalCase: true}); +//=> 'FooBar' + +camelCase('--foo.bar', {pascalCase: false}); +//=> 'fooBar' + +camelCase('Foo-BAR', {preserveConsecutiveUppercase: true}); +//=> 'fooBAR' + +camelCase('fooBAR', {pascalCase: true, preserveConsecutiveUppercase: true})); +//=> 'FooBAR' + +camelCase('foo bar'); +//=> 'fooBar' + +console.log(process.argv[3]); +//=> '--foo-bar' +camelCase(process.argv[3]); +//=> 'fooBar' + +camelCase(['foo', 'bar']); +//=> 'fooBar' + +camelCase(['__foo__', '--bar'], {pascalCase: true}); +//=> 'FooBar' + +camelCase(['foo', 'BAR'], {pascalCase: true, preserveConsecutiveUppercase: true}) +//=> 'FooBAR' + +camelCase('lorem-ipsum', {locale: 'en-US'}); +//=> 'loremIpsum' +``` + +## API + +### camelCase(input, options?) + +#### input + +Type: `string | string[]` + +String to convert to camel case. + +#### options + +Type: `object` + +##### pascalCase + +Type: `boolean`\ +Default: `false` + +Uppercase the first character: `foo-bar` → `FooBar` + +##### preserveConsecutiveUppercase + +Type: `boolean`\ +Default: `false` + +Preserve the consecutive uppercase characters: `foo-BAR` → `FooBAR`. + +##### locale + +Type: `false | string | string[]`\ +Default: The host environment’s current locale. + +The locale parameter indicates the locale to be used to convert to upper/lower case according to any locale-specific case mappings. If multiple locales are given in an array, the best available locale is used. + +```js +const camelCase = require('camelcase'); + +camelCase('lorem-ipsum', {locale: 'en-US'}); +//=> 'loremIpsum' + +camelCase('lorem-ipsum', {locale: 'tr-TR'}); +//=> 'loremİpsum' + +camelCase('lorem-ipsum', {locale: ['en-US', 'en-GB']}); +//=> 'loremIpsum' + +camelCase('lorem-ipsum', {locale: ['tr', 'TR', 'tr-TR']}); +//=> 'loremİpsum' +``` + +Setting `locale: false` ignores the platform locale and uses the [Unicode Default Case Conversion](https://unicode-org.github.io/icu/userguide/transforms/casemappings.html#simple-single-character-case-mapping) algorithm: + +```js +const camelCase = require('camelcase'); + +// On a platform with 'tr-TR' + +camelCase('lorem-ipsum'); +//=> 'loremİpsum' + +camelCase('lorem-ipsum', {locale: false}); +//=> 'loremIpsum' +``` + +## camelcase for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of camelcase and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-camelcase?utm_source=npm-camelcase&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + +## Related + +- [decamelize](https://github.com/sindresorhus/decamelize) - The inverse of this module +- [uppercamelcase](https://github.com/SamVerschueren/uppercamelcase) - Like this module, but to PascalCase instead of camelCase +- [titleize](https://github.com/sindresorhus/titleize) - Capitalize every word in string +- [humanize-string](https://github.com/sindresorhus/humanize-string) - Convert a camelized/dasherized/underscored string into a humanized one +- [camelcase-keys](https://github.com/sindresorhus/camelcase-keys) - Convert object keys to camel case diff --git a/node_modules/jest-validate/package.json b/node_modules/jest-validate/package.json new file mode 100644 index 00000000..bfe79fc7 --- /dev/null +++ b/node_modules/jest-validate/package.json @@ -0,0 +1,37 @@ +{ + "name": "jest-validate", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-validate" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "devDependencies": { + "@types/yargs": "^17.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-watcher/LICENSE b/node_modules/jest-watcher/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-watcher/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-watcher/build/BaseWatchPlugin.js b/node_modules/jest-watcher/build/BaseWatchPlugin.js new file mode 100644 index 00000000..90ea785a --- /dev/null +++ b/node_modules/jest-watcher/build/BaseWatchPlugin.js @@ -0,0 +1,35 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +class BaseWatchPlugin { + _stdin; + _stdout; + constructor({stdin, stdout}) { + this._stdin = stdin; + this._stdout = stdout; + } + + // eslint-disable-next-line @typescript-eslint/no-empty-function + apply(_hooks) {} + getUsageInfo(_globalConfig) { + return null; + } + + // eslint-disable-next-line @typescript-eslint/no-empty-function + onKey(_key) {} + run(_globalConfig, _updateConfigAndRun) { + return Promise.resolve(); + } +} +var _default = BaseWatchPlugin; +exports.default = _default; diff --git a/node_modules/jest-watcher/build/JestHooks.js b/node_modules/jest-watcher/build/JestHooks.js new file mode 100644 index 00000000..ddc2731a --- /dev/null +++ b/node_modules/jest-watcher/build/JestHooks.js @@ -0,0 +1,63 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +class JestHooks { + _listeners; + _subscriber; + _emitter; + constructor() { + this._listeners = { + onFileChange: [], + onTestRunComplete: [], + shouldRunTestSuite: [] + }; + this._subscriber = { + onFileChange: fn => { + this._listeners.onFileChange.push(fn); + }, + onTestRunComplete: fn => { + this._listeners.onTestRunComplete.push(fn); + }, + shouldRunTestSuite: fn => { + this._listeners.shouldRunTestSuite.push(fn); + } + }; + this._emitter = { + onFileChange: fs => + this._listeners.onFileChange.forEach(listener => listener(fs)), + onTestRunComplete: results => + this._listeners.onTestRunComplete.forEach(listener => + listener(results) + ), + shouldRunTestSuite: async testSuiteInfo => { + const result = await Promise.all( + this._listeners.shouldRunTestSuite.map(listener => + listener(testSuiteInfo) + ) + ); + return result.every(Boolean); + } + }; + } + isUsed(hook) { + return this._listeners[hook]?.length > 0; + } + getSubscriber() { + return this._subscriber; + } + getEmitter() { + return this._emitter; + } +} +var _default = JestHooks; +exports.default = _default; diff --git a/node_modules/jest-watcher/build/PatternPrompt.js b/node_modules/jest-watcher/build/PatternPrompt.js new file mode 100644 index 00000000..55878863 --- /dev/null +++ b/node_modules/jest-watcher/build/PatternPrompt.js @@ -0,0 +1,74 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function _ansiEscapes() { + const data = _interopRequireDefault(require('ansi-escapes')); + _ansiEscapes = function () { + return data; + }; + return data; +} +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const {CLEAR} = _jestUtil().specialChars; +const usage = entity => + `\n${_chalk().default.bold('Pattern Mode Usage')}\n` + + ` ${_chalk().default.dim('\u203A Press')} Esc ${_chalk().default.dim( + 'to exit pattern mode.' + )}\n` + + ` ${_chalk().default.dim('\u203A Press')} Enter ` + + `${_chalk().default.dim(`to filter by a ${entity} regex pattern.`)}\n` + + '\n'; +const usageRows = usage('').split('\n').length; +class PatternPrompt { + _currentUsageRows; + constructor(_pipe, _prompt, _entityName = '') { + this._pipe = _pipe; + this._prompt = _prompt; + this._entityName = _entityName; + this._currentUsageRows = usageRows; + } + run(onSuccess, onCancel, options) { + this._pipe.write(_ansiEscapes().default.cursorHide); + this._pipe.write(CLEAR); + if (options && options.header) { + this._pipe.write(`${options.header}\n`); + this._currentUsageRows = usageRows + options.header.split('\n').length; + } else { + this._currentUsageRows = usageRows; + } + this._pipe.write(usage(this._entityName)); + this._pipe.write(_ansiEscapes().default.cursorShow); + this._prompt.enter(this._onChange.bind(this), onSuccess, onCancel); + } + _onChange(_pattern, _options) { + this._pipe.write(_ansiEscapes().default.eraseLine); + this._pipe.write(_ansiEscapes().default.cursorLeft); + } +} +exports.default = PatternPrompt; diff --git a/node_modules/jest-watcher/build/TestWatcher.js b/node_modules/jest-watcher/build/TestWatcher.js new file mode 100644 index 00000000..75578dbb --- /dev/null +++ b/node_modules/jest-watcher/build/TestWatcher.js @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function _emittery() { + const data = _interopRequireDefault(require('emittery')); + _emittery = function () { + return data; + }; + return data; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +class TestWatcher extends _emittery().default { + state; + _isWatchMode; + constructor({isWatchMode}) { + super(); + this.state = { + interrupted: false + }; + this._isWatchMode = isWatchMode; + } + async setState(state) { + Object.assign(this.state, state); + await this.emit('change', this.state); + } + isInterrupted() { + return this.state.interrupted; + } + isWatchMode() { + return this._isWatchMode; + } +} +exports.default = TestWatcher; diff --git a/node_modules/jest-watcher/build/constants.js b/node_modules/jest-watcher/build/constants.js new file mode 100644 index 00000000..54706dec --- /dev/null +++ b/node_modules/jest-watcher/build/constants.js @@ -0,0 +1,27 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.KEYS = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const isWindows = process.platform === 'win32'; +const KEYS = { + ARROW_DOWN: '\u001b[B', + ARROW_LEFT: '\u001b[D', + ARROW_RIGHT: '\u001b[C', + ARROW_UP: '\u001b[A', + BACKSPACE: Buffer.from(isWindows ? '08' : '7f', 'hex').toString(), + CONTROL_C: '\u0003', + CONTROL_D: '\u0004', + CONTROL_U: '\u0015', + ENTER: '\r', + ESCAPE: '\u001b' +}; +exports.KEYS = KEYS; diff --git a/node_modules/jest-watcher/build/index.d.ts b/node_modules/jest-watcher/build/index.d.ts new file mode 100644 index 00000000..7d2c1a10 --- /dev/null +++ b/node_modules/jest-watcher/build/index.d.ts @@ -0,0 +1,222 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/// + +import type {AggregatedResult} from '@jest/test-result'; +import type {Config} from '@jest/types'; +import Emittery = require('emittery'); + +export declare type AllowedConfigOptions = Partial< + Pick< + Config.GlobalConfig, + | 'bail' + | 'changedSince' + | 'collectCoverage' + | 'collectCoverageFrom' + | 'coverageDirectory' + | 'coverageReporters' + | 'findRelatedTests' + | 'nonFlagArgs' + | 'notify' + | 'notifyMode' + | 'onlyFailures' + | 'reporters' + | 'testNamePattern' + | 'testPathPattern' + | 'updateSnapshot' + | 'verbose' + > & { + mode: 'watch' | 'watchAll'; + } +>; + +declare type AvailableHooks = + | 'onFileChange' + | 'onTestRunComplete' + | 'shouldRunTestSuite'; + +export declare abstract class BaseWatchPlugin implements WatchPlugin { + protected _stdin: NodeJS.ReadStream; + protected _stdout: NodeJS.WriteStream; + constructor({ + stdin, + stdout, + }: { + stdin: NodeJS.ReadStream; + stdout: NodeJS.WriteStream; + }); + apply(_hooks: JestHookSubscriber): void; + getUsageInfo(_globalConfig: Config.GlobalConfig): UsageData | null; + onKey(_key: string): void; + run( + _globalConfig: Config.GlobalConfig, + _updateConfigAndRun: UpdateConfigCallback, + ): Promise; +} + +declare type FileChange = (fs: JestHookExposedFS) => void; + +export declare class JestHook { + private readonly _listeners; + private readonly _subscriber; + private readonly _emitter; + constructor(); + isUsed(hook: AvailableHooks): boolean; + getSubscriber(): Readonly; + getEmitter(): Readonly; +} + +export declare type JestHookEmitter = { + onFileChange: (fs: JestHookExposedFS) => void; + onTestRunComplete: (results: AggregatedResult) => void; + shouldRunTestSuite: ( + testSuiteInfo: TestSuiteInfo, + ) => Promise | boolean; +}; + +declare type JestHookExposedFS = { + projects: Array<{ + config: Config.ProjectConfig; + testPaths: Array; + }>; +}; + +export declare type JestHookSubscriber = { + onFileChange: (fn: FileChange) => void; + onTestRunComplete: (fn: TestRunComplete) => void; + shouldRunTestSuite: (fn: ShouldRunTestSuite) => void; +}; + +export declare const KEYS: { + ARROW_DOWN: string; + ARROW_LEFT: string; + ARROW_RIGHT: string; + ARROW_UP: string; + BACKSPACE: string; + CONTROL_C: string; + CONTROL_D: string; + CONTROL_U: string; + ENTER: string; + ESCAPE: string; +}; + +export declare abstract class PatternPrompt { + protected _pipe: NodeJS.WritableStream; + protected _prompt: Prompt; + protected _entityName: string; + protected _currentUsageRows: number; + constructor( + _pipe: NodeJS.WritableStream, + _prompt: Prompt, + _entityName?: string, + ); + run( + onSuccess: (value: string) => void, + onCancel: () => void, + options?: { + header: string; + }, + ): void; + protected _onChange(_pattern: string, _options: ScrollOptions_2): void; +} + +export declare function printPatternCaret( + pattern: string, + pipe: NodeJS.WritableStream, +): void; + +export declare function printRestoredPatternCaret( + pattern: string, + currentUsageRows: number, + pipe: NodeJS.WritableStream, +): void; + +export declare class Prompt { + private _entering; + private _value; + private _onChange; + private _onSuccess; + private _onCancel; + private _offset; + private _promptLength; + private _selection; + constructor(); + private readonly _onResize; + enter( + onChange: (pattern: string, options: ScrollOptions_2) => void, + onSuccess: (pattern: string) => void, + onCancel: () => void, + ): void; + setPromptLength(length: number): void; + setPromptSelection(selected: string): void; + put(key: string): void; + abort(): void; + isEntering(): boolean; +} + +declare type ScrollOptions_2 = { + offset: number; + max: number; +}; +export {ScrollOptions_2 as ScrollOptions}; + +declare type ShouldRunTestSuite = ( + testSuiteInfo: TestSuiteInfo, +) => Promise; + +declare type State = { + interrupted: boolean; +}; + +declare type TestRunComplete = (results: AggregatedResult) => void; + +declare type TestSuiteInfo = { + config: Config.ProjectConfig; + duration?: number; + testPath: string; +}; + +export declare class TestWatcher extends Emittery<{ + change: State; +}> { + state: State; + private readonly _isWatchMode; + constructor({isWatchMode}: {isWatchMode: boolean}); + setState(state: State): Promise; + isInterrupted(): boolean; + isWatchMode(): boolean; +} + +export declare type UpdateConfigCallback = ( + config?: AllowedConfigOptions, +) => void; + +export declare type UsageData = { + key: string; + prompt: string; +}; + +export declare interface WatchPlugin { + isInternal?: boolean; + apply?: (hooks: JestHookSubscriber) => void; + getUsageInfo?: (globalConfig: Config.GlobalConfig) => UsageData | null; + onKey?: (value: string) => void; + run?: ( + globalConfig: Config.GlobalConfig, + updateConfigAndRun: UpdateConfigCallback, + ) => Promise; +} + +export declare interface WatchPluginClass { + new (options: { + config: Record; + stdin: NodeJS.ReadStream; + stdout: NodeJS.WriteStream; + }): WatchPlugin; +} + +export {}; diff --git a/node_modules/jest-watcher/build/index.js b/node_modules/jest-watcher/build/index.js new file mode 100644 index 00000000..a1015f4c --- /dev/null +++ b/node_modules/jest-watcher/build/index.js @@ -0,0 +1,74 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +var _exportNames = { + BaseWatchPlugin: true, + JestHook: true, + PatternPrompt: true, + TestWatcher: true, + Prompt: true +}; +Object.defineProperty(exports, 'BaseWatchPlugin', { + enumerable: true, + get: function () { + return _BaseWatchPlugin.default; + } +}); +Object.defineProperty(exports, 'JestHook', { + enumerable: true, + get: function () { + return _JestHooks.default; + } +}); +Object.defineProperty(exports, 'PatternPrompt', { + enumerable: true, + get: function () { + return _PatternPrompt.default; + } +}); +Object.defineProperty(exports, 'Prompt', { + enumerable: true, + get: function () { + return _Prompt.default; + } +}); +Object.defineProperty(exports, 'TestWatcher', { + enumerable: true, + get: function () { + return _TestWatcher.default; + } +}); +var _BaseWatchPlugin = _interopRequireDefault(require('./BaseWatchPlugin')); +var _JestHooks = _interopRequireDefault(require('./JestHooks')); +var _PatternPrompt = _interopRequireDefault(require('./PatternPrompt')); +var _TestWatcher = _interopRequireDefault(require('./TestWatcher')); +var _constants = require('./constants'); +Object.keys(_constants).forEach(function (key) { + if (key === 'default' || key === '__esModule') return; + if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; + if (key in exports && exports[key] === _constants[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _constants[key]; + } + }); +}); +var _Prompt = _interopRequireDefault(require('./lib/Prompt')); +var _patternModeHelpers = require('./lib/patternModeHelpers'); +Object.keys(_patternModeHelpers).forEach(function (key) { + if (key === 'default' || key === '__esModule') return; + if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; + if (key in exports && exports[key] === _patternModeHelpers[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _patternModeHelpers[key]; + } + }); +}); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} diff --git a/node_modules/jest-watcher/build/lib/Prompt.js b/node_modules/jest-watcher/build/lib/Prompt.js new file mode 100644 index 00000000..c6c5f5f0 --- /dev/null +++ b/node_modules/jest-watcher/build/lib/Prompt.js @@ -0,0 +1,113 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +var _constants = require('../constants'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +class Prompt { + _entering; + _value; + _onChange; + _onSuccess; + _onCancel; + _offset; + _promptLength; + _selection; + constructor() { + // Copied from `enter` to satisfy TS + this._entering = true; + this._value = ''; + this._selection = null; + this._offset = -1; + this._promptLength = 0; + + /* eslint-disable @typescript-eslint/no-empty-function */ + this._onChange = () => {}; + this._onSuccess = () => {}; + this._onCancel = () => {}; + /* eslint-enable */ + } + + _onResize = () => { + this._onChange(); + }; + enter(onChange, onSuccess, onCancel) { + this._entering = true; + this._value = ''; + this._onSuccess = onSuccess; + this._onCancel = onCancel; + this._selection = null; + this._offset = -1; + this._promptLength = 0; + this._onChange = () => + onChange(this._value, { + max: 10, + offset: this._offset + }); + this._onChange(); + process.stdout.on('resize', this._onResize); + } + setPromptLength(length) { + this._promptLength = length; + } + setPromptSelection(selected) { + this._selection = selected; + } + put(key) { + switch (key) { + case _constants.KEYS.ENTER: + this._entering = false; + this._onSuccess(this._selection ?? this._value); + this.abort(); + break; + case _constants.KEYS.ESCAPE: + this._entering = false; + this._onCancel(this._value); + this.abort(); + break; + case _constants.KEYS.ARROW_DOWN: + this._offset = Math.min(this._offset + 1, this._promptLength - 1); + this._onChange(); + break; + case _constants.KEYS.ARROW_UP: + this._offset = Math.max(this._offset - 1, -1); + this._onChange(); + break; + case _constants.KEYS.ARROW_LEFT: + case _constants.KEYS.ARROW_RIGHT: + break; + case _constants.KEYS.CONTROL_U: + this._value = ''; + this._offset = -1; + this._selection = null; + this._onChange(); + break; + default: + this._value = + key === _constants.KEYS.BACKSPACE + ? this._value.slice(0, -1) + : this._value + key; + this._offset = -1; + this._selection = null; + this._onChange(); + break; + } + } + abort() { + this._entering = false; + this._value = ''; + process.stdout.removeListener('resize', this._onResize); + } + isEntering() { + return this._entering; + } +} +exports.default = Prompt; diff --git a/node_modules/jest-watcher/build/lib/colorize.js b/node_modules/jest-watcher/build/lib/colorize.js new file mode 100644 index 00000000..b339cc5c --- /dev/null +++ b/node_modules/jest-watcher/build/lib/colorize.js @@ -0,0 +1,30 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = colorize; +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function colorize(str, start, end) { + return ( + _chalk().default.dim(str.slice(0, start)) + + _chalk().default.reset(str.slice(start, end)) + + _chalk().default.dim(str.slice(end)) + ); +} diff --git a/node_modules/jest-watcher/build/lib/formatTestNameByPattern.js b/node_modules/jest-watcher/build/lib/formatTestNameByPattern.js new file mode 100644 index 00000000..9fdc3a4e --- /dev/null +++ b/node_modules/jest-watcher/build/lib/formatTestNameByPattern.js @@ -0,0 +1,67 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = formatTestNameByPattern; +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +var _colorize = _interopRequireDefault(require('./colorize')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const DOTS = '...'; +const ENTER = '⏎'; +function formatTestNameByPattern(testName, pattern, width) { + const inlineTestName = testName.replace(/(\r\n|\n|\r)/gm, ENTER); + let regexp; + try { + regexp = new RegExp(pattern, 'i'); + } catch { + return _chalk().default.dim(inlineTestName); + } + const match = inlineTestName.match(regexp); + if (!match) { + return _chalk().default.dim(inlineTestName); + } + const startPatternIndex = Math.max(match.index ?? 0, 0); + const endPatternIndex = startPatternIndex + match[0].length; + if (inlineTestName.length <= width) { + return (0, _colorize.default)( + inlineTestName, + startPatternIndex, + endPatternIndex + ); + } + const slicedTestName = inlineTestName.slice(0, width - DOTS.length); + if (startPatternIndex < slicedTestName.length) { + if (endPatternIndex > slicedTestName.length) { + return (0, _colorize.default)( + slicedTestName + DOTS, + startPatternIndex, + slicedTestName.length + DOTS.length + ); + } else { + return (0, _colorize.default)( + slicedTestName + DOTS, + Math.min(startPatternIndex, slicedTestName.length), + endPatternIndex + ); + } + } + return `${_chalk().default.dim(slicedTestName)}${_chalk().default.reset( + DOTS + )}`; +} diff --git a/node_modules/jest-watcher/build/lib/patternModeHelpers.js b/node_modules/jest-watcher/build/lib/patternModeHelpers.js new file mode 100644 index 00000000..873a6e2e --- /dev/null +++ b/node_modules/jest-watcher/build/lib/patternModeHelpers.js @@ -0,0 +1,54 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.printPatternCaret = printPatternCaret; +exports.printRestoredPatternCaret = printRestoredPatternCaret; +function _ansiEscapes() { + const data = _interopRequireDefault(require('ansi-escapes')); + _ansiEscapes = function () { + return data; + }; + return data; +} +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + _chalk = function () { + return data; + }; + return data; +} +function _stringLength() { + const data = _interopRequireDefault(require('string-length')); + _stringLength = function () { + return data; + }; + return data; +} +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function printPatternCaret(pattern, pipe) { + const inputText = `${_chalk().default.dim(' pattern \u203A')} ${pattern}`; + pipe.write(_ansiEscapes().default.eraseDown); + pipe.write(inputText); + pipe.write(_ansiEscapes().default.cursorSavePosition); +} +function printRestoredPatternCaret(pattern, currentUsageRows, pipe) { + const inputText = `${_chalk().default.dim(' pattern \u203A')} ${pattern}`; + pipe.write( + _ansiEscapes().default.cursorTo( + (0, _stringLength().default)(inputText), + currentUsageRows - 1 + ) + ); + pipe.write(_ansiEscapes().default.cursorRestorePosition); +} diff --git a/node_modules/jest-watcher/build/lib/scroll.js b/node_modules/jest-watcher/build/lib/scroll.js new file mode 100644 index 00000000..b9e45939 --- /dev/null +++ b/node_modules/jest-watcher/build/lib/scroll.js @@ -0,0 +1,31 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = scroll; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function scroll(size, {offset, max}) { + let start = 0; + let index = Math.min(offset, size); + const halfScreen = max / 2; + if (index <= halfScreen) { + start = 0; + } else { + if (size >= max) { + start = Math.min(index - halfScreen - 1, size - max); + } + index = Math.min(index - start, size); + } + return { + end: Math.min(size, start + max), + index, + start + }; +} diff --git a/node_modules/jest-watcher/build/types.js b/node_modules/jest-watcher/build/types.js new file mode 100644 index 00000000..ad9a93a7 --- /dev/null +++ b/node_modules/jest-watcher/build/types.js @@ -0,0 +1 @@ +'use strict'; diff --git a/node_modules/jest-watcher/package.json b/node_modules/jest-watcher/package.json new file mode 100644 index 00000000..9c18a292 --- /dev/null +++ b/node_modules/jest-watcher/package.json @@ -0,0 +1,41 @@ +{ + "name": "jest-watcher", + "description": "Delightful JavaScript Testing.", + "version": "29.7.0", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-watcher" + }, + "bugs": { + "url": "https://github.com/jestjs/jest/issues" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "homepage": "https://jestjs.io/", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest-worker/LICENSE b/node_modules/jest-worker/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest-worker/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest-worker/README.md b/node_modules/jest-worker/README.md new file mode 100644 index 00000000..f9e1131c --- /dev/null +++ b/node_modules/jest-worker/README.md @@ -0,0 +1,272 @@ +# jest-worker + +Module for executing heavy tasks under forked processes in parallel, by providing a `Promise` based interface, minimum overhead, and bound workers. + +The module works by providing an absolute path of the module to be loaded in all forked processes. All methods are exposed on the parent process as promises, so they can be `await`'ed. Child (worker) methods can either be synchronous or asynchronous. + +The module also implements support for bound workers. Binding a worker means that, based on certain parameters, the same task will always be executed by the same worker. The way bound workers work is by using the returned string of the `computeWorkerKey` method. If the string was used before for a task, the call will be queued to the related worker that processed the task earlier; if not, it will be executed by the first available worker, then sticked to the worker that executed it; so the next time it will be processed by the same worker. If you have no preference on the worker executing the task, but you have defined a `computeWorkerKey` method because you want _some_ of the tasks to be sticked, you can return `null` from it. + +The list of exposed methods can be explicitly provided via the `exposedMethods` option. If it is not provided, it will be obtained by requiring the child module into the main process, and analyzed via reflection. Check the "minimal example" section for a valid one. + +## Install + +```sh +yarn add jest-worker +``` + +## Example + +This example covers the minimal usage: + +### File `parent.js` + +```js +import {Worker as JestWorker} from 'jest-worker'; + +async function main() { + const worker = new JestWorker(require.resolve('./worker')); + const result = await worker.hello('Alice'); // "Hello, Alice" +} + +main(); +``` + +### File `worker.js` + +```js +export function hello(param) { + return `Hello, ${param}`; +} +``` + +## Experimental worker + +Node shipped with [`worker_threads`](https://nodejs.org/api/worker_threads.html), a "threading API" that uses `SharedArrayBuffers` to communicate between the main process and its child threads. This feature can significantly improve the communication time between parent and child processes in `jest-worker`. + +To use `worker_threads` instead of default `child_process` you have to pass `enableWorkerThreads: true` when instantiating the worker. + +## API + +The `Worker` export is a constructor that is initialized by passing the worker path, plus an options object. + +### `workerPath: string | URL` (required) + +Node module name or absolute path or file URL of the file to be loaded in the child processes. You can use `require.resolve` to transform a relative path into an absolute one. + +### `options: Object` (optional) + +#### `computeWorkerKey: (method: string, ...args: Array) => string | null` (optional) + +Every time a method exposed via the API is called, `computeWorkerKey` is also called in order to bound the call to a worker. This is useful for workers that are able to cache the result or part of it. You bound calls to a worker by making `computeWorkerKey` return the same identifier for all different calls. If you do not want to bind the call to any worker, return `null`. + +The callback you provide is called with the method name, plus all the rest of the arguments of the call. Thus, you have full control to decide what to return. Check a practical example on bound workers under the "bound worker usage" section. + +By default, no process is bound to any worker. + +#### `enableWorkerThreads: boolean` (optional) + +By default, `jest-worker` will use `child_process` threads to spawn new Node.js processes. If you prefer [`worker_threads`](https://nodejs.org/api/worker_threads.html) instead, pass `enableWorkerThreads: true`. + +#### `exposedMethods: ReadonlyArray` (optional) + +List of method names that can be called on the child processes from the parent process. You cannot expose any method named like a public `Worker` method, or starting with `_`. If you use method auto-discovery, then these methods will not be exposed, even if they exist. + +#### `forkOptions: ForkOptions` (optional) + +Allow customizing all options passed to `child_process.fork`. By default, some values are set (`cwd`, `env`, `execArgv` and `serialization`), but you can override them and customize the rest. For a list of valid values, check [the Node documentation](https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options). + +#### `idleMemoryLimit: number` (optional) + +Specifies the memory limit for workers before they are recycled and is primarily a work-around for [this issue](https://github.com/jestjs/jest/issues/11956); + +After the worker has executed a task the memory usage of it is checked. If it exceeds the value specified the worker is killed and restarted. If no limit is set this process does not occur. The limit can be specified in 2 ways: + +- `<= 1` - The value is assumed to be a percentage of system memory. So 0.5 sets the memory limit of the worker to half of the total system memory +- `\> 1` - Assumed to be a fixed byte value. Because of the previous rule if you wanted a value of 1 byte (I don't know why) you could use `1.1`. + +#### `maxRetries: number` (optional) + +Maximum amount of times that a dead child can be re-spawned, per call. Defaults to `3`, pass `Infinity` to allow endless retries. + +#### `numWorkers: number` (optional) + +Amount of workers to spawn. Defaults to the number of CPUs minus 1. + +#### `resourceLimits: ResourceLimits` (optional) + +The `resourceLimits` option which will be passed to `worker_threads` workers. + +#### `silent: Boolean` (optional) + +Set to false for `stdout` and `stderr` to be logged to console. + +By default this is true. + +#### `setupArgs: Array` (optional) + +The arguments that will be passed to the `setup` method during initialization. + +#### `taskQueue: TaskQueue` (optional) + +The task queue defines in which order tasks (method calls) are processed by the workers. `jest-worker` ships with a `FifoQueue` and `PriorityQueue`: + +- `FifoQueue` (default): Processes the method calls (tasks) in the call order. +- `PriorityQueue`: Processes the method calls by a computed priority in natural ordering (lower priorities first). Tasks with the same priority are processed in any order (FIFO not guaranteed). The constructor accepts a single argument, the function that is passed the name of the called function and the arguments and returns a numerical value for the priority: `new require('jest-worker').PriorityQueue((method, filename) => filename.length)`. + +#### `WorkerPool: new (workerPath: string, options?: WorkerPoolOptions) => WorkerPoolInterface` (optional) + +Provide a custom WorkerPool class to be used for spawning child processes. + +#### `workerSchedulingPolicy: 'round-robin' | 'in-order'` (optional) + +Specifies the policy how tasks are assigned to workers if multiple workers are _idle_: + +- `round-robin` (default): The task will be sequentially distributed onto the workers. The first task is assigned to the worker 1, the second to the worker 2, to ensure that the work is distributed across workers. +- `in-order`: The task will be assigned to the first free worker starting with worker 1 and only assign the work to worker 2 if the worker 1 is busy. + +Tasks are always assigned to the first free worker as soon as tasks start to queue up. The scheduling policy does not define the task scheduling which is always first-in, first-out. + +## JestWorker + +### Methods + +The returned `JestWorker` instance has all the exposed methods, plus some additional ones to interact with the workers itself: + +#### `getStdout(): Readable` + +Returns a `ReadableStream` where the standard output of all workers is piped. Note that the `silent` option of the child workers must be set to `true` to make it work. This is the default set by `jest-worker`, but keep it in mind when overriding options through `forkOptions`. + +#### `getStderr(): Readable` + +Returns a `ReadableStream` where the standard error of all workers is piped. Note that the `silent` option of the child workers must be set to `true` to make it work. This is the default set by `jest-worker`, but keep it in mind when overriding options through `forkOptions`. + +#### `start()` + +Starts up every worker and calls their `setup` function, if it exists. Returns a `Promise` which resolves when all workers are running and have completed their `setup`. + +This is useful if you want to start up all your workers eagerly before they are used to call any other functions. + +#### `end()` + +Finishes the workers by killing all workers. No further calls can be done to the `Worker` instance. + +Returns a `Promise` that resolves with `{ forceExited: boolean }` once all workers are dead. If `forceExited` is `true`, at least one of the workers did not exit gracefully, which likely happened because it executed a leaky task that left handles open. This should be avoided, force exiting workers is a last resort to prevent creating lots of orphans. + +**Note:** + +`await`ing the `end()` Promise immediately after the workers are no longer needed before proceeding to do other useful things in your program may not be a good idea. If workers have to be force exited, `jest-worker` may go through multiple stages of force exiting (e.g. SIGTERM, later SIGKILL) and give the worker overall around 1 second time to exit on its own. During this time, your program will wait, even though it may not be necessary that all workers are dead before continuing execution. + +Consider deliberately leaving this Promise floating (unhandled resolution). After your program has done the rest of its work and is about to exit, the Node process will wait for the Promise to resolve after all workers are dead as the last event loop task. That way you parallelized computation time of your program and waiting time and you didn't delay the outputs of your program unnecessarily. + +### Worker IDs + +Each worker has a unique id (index that starts with `'1'`), which is available inside the worker as `process.env.JEST_WORKER_ID`. + +## Setting up and tearing down the child process + +The child process can define two special methods (both of them can be asynchronous): + +- `setup()`: If defined, it's executed before the first call to any method in the child. +- `teardown()`: If defined, it's executed when the farm ends. + +# More examples + +## Standard usage + +This example covers the standard usage: + +### File `parent.js` + +```js +import {Worker as JestWorker} from 'jest-worker'; + +async function main() { + const myWorker = new JestWorker(require.resolve('./worker'), { + exposedMethods: ['foo', 'bar', 'getWorkerId'], + numWorkers: 4, + }); + + console.log(await myWorker.foo('Alice')); // "Hello from foo: Alice" + console.log(await myWorker.bar('Bob')); // "Hello from bar: Bob" + console.log(await myWorker.getWorkerId()); // "3" -> this message has sent from the 3rd worker + + const {forceExited} = await myWorker.end(); + if (forceExited) { + console.error('Workers failed to exit gracefully'); + } +} + +main(); +``` + +### File `worker.js` + +```js +export function foo(param) { + return `Hello from foo: ${param}`; +} + +export function bar(param) { + return `Hello from bar: ${param}`; +} + +export function getWorkerId() { + return process.env.JEST_WORKER_ID; +} +``` + +## Bound worker usage: + +This example covers the usage with a `computeWorkerKey` method: + +### File `parent.js` + +```js +import {Worker as JestWorker} from 'jest-worker'; + +async function main() { + const myWorker = new JestWorker(require.resolve('./worker'), { + computeWorkerKey: (method, filename) => filename, + }); + + // Transform the given file, within the first available worker. + console.log(await myWorker.transform('/tmp/foo.js')); + + // Wait a bit. + await sleep(10000); + + // Transform the same file again. Will immediately return because the + // transformed file is cached in the worker, and `computeWorkerKey` ensures + // the same worker that processed the file the first time will process it now. + console.log(await myWorker.transform('/tmp/foo.js')); + + const {forceExited} = await myWorker.end(); + if (forceExited) { + console.error('Workers failed to exit gracefully'); + } +} + +main(); +``` + +### File `worker.js` + +```js +import babel from '@babel/core'; + +const cache = Object.create(null); + +export function transform(filename) { + if (cache[filename]) { + return cache[filename]; + } + + // jest-worker can handle both immediate results and thenables. If a + // thenable is returned, it will be await'ed until it resolves. + return babel.transformFileAsync(filename).then(result => { + cache[filename] = result; + + return result; + }); +} +``` diff --git a/node_modules/jest-worker/build/Farm.js b/node_modules/jest-worker/build/Farm.js new file mode 100644 index 00000000..bb9accf6 --- /dev/null +++ b/node_modules/jest-worker/build/Farm.js @@ -0,0 +1,152 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +var _FifoQueue = _interopRequireDefault(require('./FifoQueue')); +var _types = require('./types'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +class Farm { + _computeWorkerKey; + _workerSchedulingPolicy; + _cacheKeys = Object.create(null); + _locks = []; + _offset = 0; + _taskQueue; + constructor(_numOfWorkers, _callback, options = {}) { + this._numOfWorkers = _numOfWorkers; + this._callback = _callback; + this._computeWorkerKey = options.computeWorkerKey; + this._workerSchedulingPolicy = + options.workerSchedulingPolicy ?? 'round-robin'; + this._taskQueue = options.taskQueue ?? new _FifoQueue.default(); + } + doWork(method, ...args) { + const customMessageListeners = new Set(); + const addCustomMessageListener = listener => { + customMessageListeners.add(listener); + return () => { + customMessageListeners.delete(listener); + }; + }; + const onCustomMessage = message => { + customMessageListeners.forEach(listener => listener(message)); + }; + const promise = new Promise( + // Bind args to this function so it won't reference to the parent scope. + // This prevents a memory leak in v8, because otherwise the function will + // retain args for the closure. + ((args, resolve, reject) => { + const computeWorkerKey = this._computeWorkerKey; + const request = [_types.CHILD_MESSAGE_CALL, false, method, args]; + let worker = null; + let hash = null; + if (computeWorkerKey) { + hash = computeWorkerKey.call(this, method, ...args); + worker = hash == null ? null : this._cacheKeys[hash]; + } + const onStart = worker => { + if (hash != null) { + this._cacheKeys[hash] = worker; + } + }; + const onEnd = (error, result) => { + customMessageListeners.clear(); + if (error) { + reject(error); + } else { + resolve(result); + } + }; + const task = { + onCustomMessage, + onEnd, + onStart, + request + }; + if (worker) { + this._taskQueue.enqueue(task, worker.getWorkerId()); + this._process(worker.getWorkerId()); + } else { + this._push(task); + } + }).bind(null, args) + ); + promise.UNSTABLE_onCustomMessage = addCustomMessageListener; + return promise; + } + _process(workerId) { + if (this._isLocked(workerId)) { + return this; + } + const task = this._taskQueue.dequeue(workerId); + if (!task) { + return this; + } + if (task.request[1]) { + throw new Error('Queue implementation returned processed task'); + } + + // Reference the task object outside so it won't be retained by onEnd, + // and other properties of the task object, such as task.request can be + // garbage collected. + let taskOnEnd = task.onEnd; + const onEnd = (error, result) => { + if (taskOnEnd) { + taskOnEnd(error, result); + } + taskOnEnd = null; + this._unlock(workerId); + this._process(workerId); + }; + task.request[1] = true; + this._lock(workerId); + this._callback( + workerId, + task.request, + task.onStart, + onEnd, + task.onCustomMessage + ); + return this; + } + _push(task) { + this._taskQueue.enqueue(task); + const offset = this._getNextWorkerOffset(); + for (let i = 0; i < this._numOfWorkers; i++) { + this._process((offset + i) % this._numOfWorkers); + if (task.request[1]) { + break; + } + } + return this; + } + _getNextWorkerOffset() { + switch (this._workerSchedulingPolicy) { + case 'in-order': + return 0; + case 'round-robin': + return this._offset++; + } + } + _lock(workerId) { + this._locks[workerId] = true; + } + _unlock(workerId) { + this._locks[workerId] = false; + } + _isLocked(workerId) { + return this._locks[workerId]; + } +} +exports.default = Farm; diff --git a/node_modules/jest-worker/build/FifoQueue.js b/node_modules/jest-worker/build/FifoQueue.js new file mode 100644 index 00000000..1831e024 --- /dev/null +++ b/node_modules/jest-worker/build/FifoQueue.js @@ -0,0 +1,89 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * First-in, First-out task queue that manages a dedicated pool + * for each worker as well as a shared queue. The FIFO ordering is guaranteed + * across the worker specific and shared queue. + */ +class FifoQueue { + _workerQueues = []; + _sharedQueue = new InternalQueue(); + enqueue(task, workerId) { + if (workerId == null) { + this._sharedQueue.enqueue(task); + return; + } + let workerQueue = this._workerQueues[workerId]; + if (workerQueue == null) { + workerQueue = this._workerQueues[workerId] = new InternalQueue(); + } + const sharedTop = this._sharedQueue.peekLast(); + const item = { + previousSharedTask: sharedTop, + task + }; + workerQueue.enqueue(item); + } + dequeue(workerId) { + const workerTop = this._workerQueues[workerId]?.peek(); + const sharedTaskIsProcessed = + workerTop?.previousSharedTask?.request[1] ?? true; + + // Process the top task from the shared queue if + // - there's no task in the worker specific queue or + // - if the non-worker-specific task after which this worker specific task + // has been queued wasn't processed yet + if (workerTop != null && sharedTaskIsProcessed) { + return this._workerQueues[workerId]?.dequeue()?.task ?? null; + } + return this._sharedQueue.dequeue(); + } +} +exports.default = FifoQueue; +/** + * FIFO queue for a single worker / shared queue. + */ +class InternalQueue { + _head = null; + _last = null; + enqueue(value) { + const item = { + next: null, + value + }; + if (this._last == null) { + this._head = item; + } else { + this._last.next = item; + } + this._last = item; + } + dequeue() { + if (this._head == null) { + return null; + } + const item = this._head; + this._head = item.next; + if (this._head == null) { + this._last = null; + } + return item.value; + } + peek() { + return this._head?.value ?? null; + } + peekLast() { + return this._last?.value ?? null; + } +} diff --git a/node_modules/jest-worker/build/PriorityQueue.js b/node_modules/jest-worker/build/PriorityQueue.js new file mode 100644 index 00000000..6218a8ea --- /dev/null +++ b/node_modules/jest-worker/build/PriorityQueue.js @@ -0,0 +1,137 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * Priority queue that processes tasks in natural ordering (lower priority first) + * according to the priority computed by the function passed in the constructor. + * + * FIFO ordering isn't guaranteed for tasks with the same priority. + * + * Worker specific tasks with the same priority as a non-worker specific task + * are always processed first. + */ +class PriorityQueue { + _queue = []; + _sharedQueue = new MinHeap(); + constructor(_computePriority) { + this._computePriority = _computePriority; + } + enqueue(task, workerId) { + if (workerId == null) { + this._enqueue(task, this._sharedQueue); + } else { + const queue = this._getWorkerQueue(workerId); + this._enqueue(task, queue); + } + } + _enqueue(task, queue) { + const item = { + priority: this._computePriority(task.request[2], ...task.request[3]), + task + }; + queue.add(item); + } + dequeue(workerId) { + const workerQueue = this._getWorkerQueue(workerId); + const workerTop = workerQueue.peek(); + const sharedTop = this._sharedQueue.peek(); + + // use the task from the worker queue if there's no task in the shared queue + // or if the priority of the worker queue is smaller or equal to the + // priority of the top task in the shared queue. The tasks of the + // worker specific queue are preferred because no other worker can pick this + // specific task up. + if ( + sharedTop == null || + (workerTop != null && workerTop.priority <= sharedTop.priority) + ) { + return workerQueue.poll()?.task ?? null; + } + return this._sharedQueue.poll().task; + } + _getWorkerQueue(workerId) { + let queue = this._queue[workerId]; + if (queue == null) { + queue = this._queue[workerId] = new MinHeap(); + } + return queue; + } +} +exports.default = PriorityQueue; +class MinHeap { + _heap = []; + peek() { + return this._heap[0] ?? null; + } + add(item) { + const nodes = this._heap; + nodes.push(item); + if (nodes.length === 1) { + return; + } + let currentIndex = nodes.length - 1; + + // Bubble up the added node as long as the parent is bigger + while (currentIndex > 0) { + const parentIndex = Math.floor((currentIndex + 1) / 2) - 1; + const parent = nodes[parentIndex]; + if (parent.priority <= item.priority) { + break; + } + nodes[currentIndex] = parent; + nodes[parentIndex] = item; + currentIndex = parentIndex; + } + } + poll() { + const nodes = this._heap; + const result = nodes[0]; + const lastElement = nodes.pop(); + + // heap was empty or removed the last element + if (result == null || nodes.length === 0) { + return result ?? null; + } + let index = 0; + nodes[0] = lastElement ?? null; + const element = nodes[0]; + while (true) { + let swapIndex = null; + const rightChildIndex = (index + 1) * 2; + const leftChildIndex = rightChildIndex - 1; + const rightChild = nodes[rightChildIndex]; + const leftChild = nodes[leftChildIndex]; + + // if the left child is smaller, swap with the left + if (leftChild != null && leftChild.priority < element.priority) { + swapIndex = leftChildIndex; + } + + // If the right child is smaller or the right child is smaller than the left + // then swap with the right child + if ( + rightChild != null && + rightChild.priority < (swapIndex == null ? element : leftChild).priority + ) { + swapIndex = rightChildIndex; + } + if (swapIndex == null) { + break; + } + nodes[index] = nodes[swapIndex]; + nodes[swapIndex] = element; + index = swapIndex; + } + return result; + } +} diff --git a/node_modules/jest-worker/build/WorkerPool.js b/node_modules/jest-worker/build/WorkerPool.js new file mode 100644 index 00000000..b1e439d2 --- /dev/null +++ b/node_modules/jest-worker/build/WorkerPool.js @@ -0,0 +1,34 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +var _BaseWorkerPool = _interopRequireDefault(require('./base/BaseWorkerPool')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +class WorkerPool extends _BaseWorkerPool.default { + send(workerId, request, onStart, onEnd, onCustomMessage) { + this.restartWorkerIfShutDown(workerId); + this.getWorkerById(workerId).send(request, onStart, onEnd, onCustomMessage); + } + createWorker(workerOptions) { + let Worker; + if (this._options.enableWorkerThreads) { + Worker = require('./workers/NodeThreadsWorker').default; + } else { + Worker = require('./workers/ChildProcessWorker').default; + } + return new Worker(workerOptions); + } +} +var _default = WorkerPool; +exports.default = _default; diff --git a/node_modules/jest-worker/build/base/BaseWorkerPool.js b/node_modules/jest-worker/build/base/BaseWorkerPool.js new file mode 100644 index 00000000..b49d061d --- /dev/null +++ b/node_modules/jest-worker/build/base/BaseWorkerPool.js @@ -0,0 +1,156 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function _mergeStream() { + const data = _interopRequireDefault(require('merge-stream')); + _mergeStream = function () { + return data; + }; + return data; +} +var _types = require('../types'); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// How long to wait for the child process to terminate +// after CHILD_MESSAGE_END before sending force exiting. +const FORCE_EXIT_DELAY = 500; + +/* istanbul ignore next */ +// eslint-disable-next-line @typescript-eslint/no-empty-function +const emptyMethod = () => {}; +class BaseWorkerPool { + _stderr; + _stdout; + _options; + _workers; + _workerPath; + constructor(workerPath, options) { + this._options = options; + this._workerPath = workerPath; + this._workers = new Array(options.numWorkers); + const stdout = (0, _mergeStream().default)(); + const stderr = (0, _mergeStream().default)(); + const {forkOptions, maxRetries, resourceLimits, setupArgs} = options; + for (let i = 0; i < options.numWorkers; i++) { + const workerOptions = { + forkOptions, + idleMemoryLimit: this._options.idleMemoryLimit, + maxRetries, + resourceLimits, + setupArgs, + workerId: i, + workerPath + }; + const worker = this.createWorker(workerOptions); + const workerStdout = worker.getStdout(); + const workerStderr = worker.getStderr(); + if (workerStdout) { + stdout.add(workerStdout); + } + if (workerStderr) { + stderr.add(workerStderr); + } + this._workers[i] = worker; + } + this._stdout = stdout; + this._stderr = stderr; + } + getStderr() { + return this._stderr; + } + getStdout() { + return this._stdout; + } + getWorkers() { + return this._workers; + } + getWorkerById(workerId) { + return this._workers[workerId]; + } + restartWorkerIfShutDown(workerId) { + if (this._workers[workerId].state === _types.WorkerStates.SHUT_DOWN) { + const {forkOptions, maxRetries, resourceLimits, setupArgs} = + this._options; + const workerOptions = { + forkOptions, + idleMemoryLimit: this._options.idleMemoryLimit, + maxRetries, + resourceLimits, + setupArgs, + workerId, + workerPath: this._workerPath + }; + const worker = this.createWorker(workerOptions); + this._workers[workerId] = worker; + } + } + createWorker(_workerOptions) { + throw Error('Missing method createWorker in WorkerPool'); + } + async start() { + await Promise.all( + this._workers.map(async worker => { + await worker.waitForWorkerReady(); + await new Promise((resolve, reject) => { + worker.send( + [_types.CHILD_MESSAGE_CALL_SETUP], + emptyMethod, + error => { + if (error) { + reject(error); + } else { + resolve(); + } + }, + emptyMethod + ); + }); + }) + ); + } + async end() { + // We do not cache the request object here. If so, it would only be only + // processed by one of the workers, and we want them all to close. + const workerExitPromises = this._workers.map(async worker => { + worker.send( + [_types.CHILD_MESSAGE_END, false], + emptyMethod, + emptyMethod, + emptyMethod + ); + + // Schedule a force exit in case worker fails to exit gracefully so + // await worker.waitForExit() never takes longer than FORCE_EXIT_DELAY + let forceExited = false; + const forceExitTimeout = setTimeout(() => { + worker.forceExit(); + forceExited = true; + }, FORCE_EXIT_DELAY); + await worker.waitForExit(); + // Worker ideally exited gracefully, don't send force exit then + clearTimeout(forceExitTimeout); + return forceExited; + }); + const workerExits = await Promise.all(workerExitPromises); + return workerExits.reduce( + (result, forceExited) => ({ + forceExited: result.forceExited || forceExited + }), + { + forceExited: false + } + ); + } +} +exports.default = BaseWorkerPool; diff --git a/node_modules/jest-worker/build/index.d.ts b/node_modules/jest-worker/build/index.d.ts new file mode 100644 index 00000000..8f253768 --- /dev/null +++ b/node_modules/jest-worker/build/index.d.ts @@ -0,0 +1,355 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/// + +import type {ForkOptions} from 'child_process'; +import type {ResourceLimits} from 'worker_threads'; + +declare const CHILD_MESSAGE_CALL = 1; + +declare const CHILD_MESSAGE_CALL_SETUP = 4; + +declare const CHILD_MESSAGE_END = 2; + +declare const CHILD_MESSAGE_INITIALIZE = 0; + +declare const CHILD_MESSAGE_MEM_USAGE = 3; + +declare type ChildMessage = + | ChildMessageInitialize + | ChildMessageCall + | ChildMessageEnd + | ChildMessageMemUsage + | ChildMessageCallSetup; + +declare type ChildMessageCall = [ + type: typeof CHILD_MESSAGE_CALL, + isProcessed: boolean, + methodName: string, + args: Array, +]; + +declare type ChildMessageCallSetup = [type: typeof CHILD_MESSAGE_CALL_SETUP]; + +declare type ChildMessageEnd = [ + type: typeof CHILD_MESSAGE_END, + isProcessed: boolean, +]; + +declare type ChildMessageInitialize = [ + type: typeof CHILD_MESSAGE_INITIALIZE, + isProcessed: boolean, + fileName: string, + setupArgs: Array, + workerId: string | undefined, +]; + +declare type ChildMessageMemUsage = [type: typeof CHILD_MESSAGE_MEM_USAGE]; + +declare type ComputeTaskPriorityCallback = ( + method: string, + ...args: Array +) => number; + +declare type ExcludeReservedKeys = Exclude; + +/** + * First-in, First-out task queue that manages a dedicated pool + * for each worker as well as a shared queue. The FIFO ordering is guaranteed + * across the worker specific and shared queue. + */ +export declare class FifoQueue implements TaskQueue { + private _workerQueues; + private readonly _sharedQueue; + enqueue(task: QueueChildMessage, workerId?: number): void; + dequeue(workerId: number): QueueChildMessage | null; +} + +declare type FunctionLike = (...args: any) => unknown; + +declare type HeapItem = { + priority: number; +}; + +export declare type JestWorkerFarm> = + Worker_2 & WorkerModule; + +export declare function messageParent( + message: unknown, + parentProcess?: NodeJS.Process, +): void; + +declare type MethodLikeKeys = { + [K in keyof T]: T[K] extends FunctionLike ? K : never; +}[keyof T]; + +declare class MinHeap { + private readonly _heap; + peek(): TItem | null; + add(item: TItem): void; + poll(): TItem | null; +} + +declare type OnCustomMessage = (message: Array | unknown) => void; + +declare type OnEnd = (err: Error | null, result: unknown) => void; + +declare type OnStart = (worker: WorkerInterface) => void; + +declare type OnStateChangeHandler = ( + state: WorkerStates, + oldState: WorkerStates, +) => void; + +declare type PoolExitResult = { + forceExited: boolean; +}; + +/** + * Priority queue that processes tasks in natural ordering (lower priority first) + * according to the priority computed by the function passed in the constructor. + * + * FIFO ordering isn't guaranteed for tasks with the same priority. + * + * Worker specific tasks with the same priority as a non-worker specific task + * are always processed first. + */ +export declare class PriorityQueue implements TaskQueue { + private readonly _computePriority; + private _queue; + private readonly _sharedQueue; + constructor(_computePriority: ComputeTaskPriorityCallback); + enqueue(task: QueueChildMessage, workerId?: number): void; + _enqueue(task: QueueChildMessage, queue: MinHeap): void; + dequeue(workerId: number): QueueChildMessage | null; + _getWorkerQueue(workerId: number): MinHeap; +} + +export declare interface PromiseWithCustomMessage extends Promise { + UNSTABLE_onCustomMessage?: (listener: OnCustomMessage) => () => void; +} + +declare type Promisify = ReturnType extends Promise< + infer R +> + ? (...args: Parameters) => Promise + : (...args: Parameters) => Promise>; + +declare type QueueChildMessage = { + request: ChildMessageCall; + onStart: OnStart; + onEnd: OnEnd; + onCustomMessage: OnCustomMessage; +}; + +declare type QueueItem = { + task: QueueChildMessage; + priority: number; +}; + +declare type ReservedKeys = + | 'end' + | 'getStderr' + | 'getStdout' + | 'setup' + | 'teardown'; + +export declare interface TaskQueue { + /** + * Enqueues the task in the queue for the specified worker or adds it to the + * queue shared by all workers + * @param task the task to queue + * @param workerId the id of the worker that should process this task or undefined + * if there's no preference. + */ + enqueue(task: QueueChildMessage, workerId?: number): void; + /** + * Dequeues the next item from the queue for the specified worker + * @param workerId the id of the worker for which the next task should be retrieved + */ + dequeue(workerId: number): QueueChildMessage | null; +} + +/** + * The Jest farm (publicly called "Worker") is a class that allows you to queue + * methods across multiple child processes, in order to parallelize work. This + * is done by providing an absolute path to a module that will be loaded on each + * of the child processes, and bridged to the main process. + * + * Bridged methods are specified by using the "exposedMethods" property of the + * "options" object. This is an array of strings, where each of them corresponds + * to the exported name in the loaded module. + * + * You can also control the amount of workers by using the "numWorkers" property + * of the "options" object, and the settings passed to fork the process through + * the "forkOptions" property. The amount of workers defaults to the amount of + * CPUS minus one. + * + * Queueing calls can be done in two ways: + * - Standard method: calls will be redirected to the first available worker, + * so they will get executed as soon as they can. + * + * - Sticky method: if a "computeWorkerKey" method is provided within the + * config, the resulting string of this method will be used as a key. + * Every time this key is returned, it is guaranteed that your job will be + * processed by the same worker. This is specially useful if your workers + * are caching results. + */ +declare class Worker_2 { + private _ending; + private readonly _farm; + private readonly _options; + private readonly _workerPool; + constructor(workerPath: string | URL, options?: WorkerFarmOptions); + private _bindExposedWorkerMethods; + private _callFunctionWithArgs; + getStderr(): NodeJS.ReadableStream; + getStdout(): NodeJS.ReadableStream; + start(): Promise; + end(): Promise; +} +export {Worker_2 as Worker}; + +declare type WorkerCallback = ( + workerId: number, + request: ChildMessage, + onStart: OnStart, + onEnd: OnEnd, + onCustomMessage: OnCustomMessage, +) => void; + +declare enum WorkerEvents { + STATE_CHANGE = 'state-change', +} + +export declare type WorkerFarmOptions = { + computeWorkerKey?: (method: string, ...args: Array) => string | null; + enableWorkerThreads?: boolean; + exposedMethods?: ReadonlyArray; + forkOptions?: ForkOptions; + maxRetries?: number; + numWorkers?: number; + resourceLimits?: ResourceLimits; + setupArgs?: Array; + taskQueue?: TaskQueue; + WorkerPool?: new ( + workerPath: string, + options?: WorkerPoolOptions, + ) => WorkerPoolInterface; + workerSchedulingPolicy?: WorkerSchedulingPolicy; + idleMemoryLimit?: number; +}; + +declare interface WorkerInterface { + get state(): WorkerStates; + send( + request: ChildMessage, + onProcessStart: OnStart, + onProcessEnd: OnEnd, + onCustomMessage: OnCustomMessage, + ): void; + waitForExit(): Promise; + forceExit(): void; + getWorkerId(): number; + getStderr(): NodeJS.ReadableStream | null; + getStdout(): NodeJS.ReadableStream | null; + /** + * Some system level identifier for the worker. IE, process id, thread id, etc. + */ + getWorkerSystemId(): number; + getMemoryUsage(): Promise; + /** + * Checks to see if the child worker is actually running. + */ + isWorkerRunning(): boolean; + /** + * When the worker child is started and ready to start handling requests. + * + * @remarks + * This mostly exists to help with testing so that you don't check the status + * of things like isWorkerRunning before it actually is. + */ + waitForWorkerReady(): Promise; +} + +declare type WorkerModule = { + [K in keyof T as Extract< + ExcludeReservedKeys, + MethodLikeKeys + >]: T[K] extends FunctionLike ? Promisify : never; +}; + +declare type WorkerOptions_2 = { + forkOptions: ForkOptions; + resourceLimits: ResourceLimits; + setupArgs: Array; + maxRetries: number; + workerId: number; + workerData?: unknown; + workerPath: string; + /** + * After a job has executed the memory usage it should return to. + * + * @remarks + * Note this is different from ResourceLimits in that it checks at idle, after + * a job is complete. So you could have a resource limit of 500MB but an idle + * limit of 50MB. The latter will only trigger if after a job has completed the + * memory usage hasn't returned back down under 50MB. + */ + idleMemoryLimit?: number; + /** + * This mainly exists so the path can be changed during testing. + * https://github.com/jestjs/jest/issues/9543 + */ + childWorkerPath?: string; + /** + * This is useful for debugging individual tests allowing you to see + * the raw output of the worker. + */ + silent?: boolean; + /** + * Used to immediately bind event handlers. + */ + on?: { + [WorkerEvents.STATE_CHANGE]: + | OnStateChangeHandler + | ReadonlyArray; + }; +}; + +export declare interface WorkerPoolInterface { + getStderr(): NodeJS.ReadableStream; + getStdout(): NodeJS.ReadableStream; + getWorkers(): Array; + createWorker(options: WorkerOptions_2): WorkerInterface; + send: WorkerCallback; + start(): Promise; + end(): Promise; +} + +export declare type WorkerPoolOptions = { + setupArgs: Array; + forkOptions: ForkOptions; + resourceLimits: ResourceLimits; + maxRetries: number; + numWorkers: number; + enableWorkerThreads: boolean; + idleMemoryLimit?: number; +}; + +declare type WorkerSchedulingPolicy = 'round-robin' | 'in-order'; + +declare enum WorkerStates { + STARTING = 'starting', + OK = 'ok', + OUT_OF_MEMORY = 'oom', + RESTARTING = 'restarting', + SHUTTING_DOWN = 'shutting-down', + SHUT_DOWN = 'shut-down', +} + +export {}; diff --git a/node_modules/jest-worker/build/index.js b/node_modules/jest-worker/build/index.js new file mode 100644 index 00000000..6e840cc2 --- /dev/null +++ b/node_modules/jest-worker/build/index.js @@ -0,0 +1,192 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +Object.defineProperty(exports, 'FifoQueue', { + enumerable: true, + get: function () { + return _FifoQueue.default; + } +}); +Object.defineProperty(exports, 'PriorityQueue', { + enumerable: true, + get: function () { + return _PriorityQueue.default; + } +}); +exports.Worker = void 0; +Object.defineProperty(exports, 'messageParent', { + enumerable: true, + get: function () { + return _messageParent.default; + } +}); +function _os() { + const data = require('os'); + _os = function () { + return data; + }; + return data; +} +function _path() { + const data = require('path'); + _path = function () { + return data; + }; + return data; +} +function _url() { + const data = require('url'); + _url = function () { + return data; + }; + return data; +} +var _Farm = _interopRequireDefault(require('./Farm')); +var _WorkerPool = _interopRequireDefault(require('./WorkerPool')); +var _PriorityQueue = _interopRequireDefault(require('./PriorityQueue')); +var _FifoQueue = _interopRequireDefault(require('./FifoQueue')); +var _messageParent = _interopRequireDefault(require('./workers/messageParent')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function getExposedMethods(workerPath, options) { + let exposedMethods = options.exposedMethods; + + // If no methods list is given, try getting it by auto-requiring the module. + if (!exposedMethods) { + const module = require(workerPath); + exposedMethods = Object.keys(module).filter( + name => typeof module[name] === 'function' + ); + if (typeof module === 'function') { + exposedMethods = [...exposedMethods, 'default']; + } + } + return exposedMethods; +} +function getNumberOfCpus() { + return typeof _os().availableParallelism === 'function' + ? (0, _os().availableParallelism)() + : (0, _os().cpus)().length; +} + +/** + * The Jest farm (publicly called "Worker") is a class that allows you to queue + * methods across multiple child processes, in order to parallelize work. This + * is done by providing an absolute path to a module that will be loaded on each + * of the child processes, and bridged to the main process. + * + * Bridged methods are specified by using the "exposedMethods" property of the + * "options" object. This is an array of strings, where each of them corresponds + * to the exported name in the loaded module. + * + * You can also control the amount of workers by using the "numWorkers" property + * of the "options" object, and the settings passed to fork the process through + * the "forkOptions" property. The amount of workers defaults to the amount of + * CPUS minus one. + * + * Queueing calls can be done in two ways: + * - Standard method: calls will be redirected to the first available worker, + * so they will get executed as soon as they can. + * + * - Sticky method: if a "computeWorkerKey" method is provided within the + * config, the resulting string of this method will be used as a key. + * Every time this key is returned, it is guaranteed that your job will be + * processed by the same worker. This is specially useful if your workers + * are caching results. + */ +class Worker { + _ending; + _farm; + _options; + _workerPool; + constructor(workerPath, options) { + this._options = { + ...options + }; + this._ending = false; + if (typeof workerPath !== 'string') { + workerPath = workerPath.href; + } + if (workerPath.startsWith('file:')) { + workerPath = (0, _url().fileURLToPath)(workerPath); + } else if (!(0, _path().isAbsolute)(workerPath)) { + throw new Error(`'workerPath' must be absolute, got '${workerPath}'`); + } + const workerPoolOptions = { + enableWorkerThreads: this._options.enableWorkerThreads ?? false, + forkOptions: this._options.forkOptions ?? {}, + idleMemoryLimit: this._options.idleMemoryLimit, + maxRetries: this._options.maxRetries ?? 3, + numWorkers: + this._options.numWorkers ?? Math.max(getNumberOfCpus() - 1, 1), + resourceLimits: this._options.resourceLimits ?? {}, + setupArgs: this._options.setupArgs ?? [] + }; + if (this._options.WorkerPool) { + this._workerPool = new this._options.WorkerPool( + workerPath, + workerPoolOptions + ); + } else { + this._workerPool = new _WorkerPool.default(workerPath, workerPoolOptions); + } + this._farm = new _Farm.default( + workerPoolOptions.numWorkers, + this._workerPool.send.bind(this._workerPool), + { + computeWorkerKey: this._options.computeWorkerKey, + taskQueue: this._options.taskQueue, + workerSchedulingPolicy: this._options.workerSchedulingPolicy + } + ); + this._bindExposedWorkerMethods(workerPath, this._options); + } + _bindExposedWorkerMethods(workerPath, options) { + getExposedMethods(workerPath, options).forEach(name => { + if (name.startsWith('_')) { + return; + } + + // eslint-disable-next-line no-prototype-builtins + if (this.constructor.prototype.hasOwnProperty(name)) { + throw new TypeError(`Cannot define a method called ${name}`); + } + + // @ts-expect-error: dynamic extension of the class instance is expected. + this[name] = this._callFunctionWithArgs.bind(this, name); + }); + } + _callFunctionWithArgs(method, ...args) { + if (this._ending) { + throw new Error('Farm is ended, no more calls can be done to it'); + } + return this._farm.doWork(method, ...args); + } + getStderr() { + return this._workerPool.getStderr(); + } + getStdout() { + return this._workerPool.getStdout(); + } + async start() { + await this._workerPool.start(); + } + async end() { + if (this._ending) { + throw new Error('Farm is ended, no more calls can be done to it'); + } + this._ending = true; + return this._workerPool.end(); + } +} +exports.Worker = Worker; diff --git a/node_modules/jest-worker/build/types.js b/node_modules/jest-worker/build/types.js new file mode 100644 index 00000000..feedb0b7 --- /dev/null +++ b/node_modules/jest-worker/build/types.js @@ -0,0 +1,72 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.WorkerStates = + exports.WorkerEvents = + exports.PARENT_MESSAGE_SETUP_ERROR = + exports.PARENT_MESSAGE_OK = + exports.PARENT_MESSAGE_MEM_USAGE = + exports.PARENT_MESSAGE_CUSTOM = + exports.PARENT_MESSAGE_CLIENT_ERROR = + exports.CHILD_MESSAGE_MEM_USAGE = + exports.CHILD_MESSAGE_INITIALIZE = + exports.CHILD_MESSAGE_END = + exports.CHILD_MESSAGE_CALL_SETUP = + exports.CHILD_MESSAGE_CALL = + void 0; +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// Because of the dynamic nature of a worker communication process, all messages +// coming from any of the other processes cannot be typed. Thus, many types +// include "unknown" as a TS type, which is (unfortunately) correct here. + +const CHILD_MESSAGE_INITIALIZE = 0; +exports.CHILD_MESSAGE_INITIALIZE = CHILD_MESSAGE_INITIALIZE; +const CHILD_MESSAGE_CALL = 1; +exports.CHILD_MESSAGE_CALL = CHILD_MESSAGE_CALL; +const CHILD_MESSAGE_END = 2; +exports.CHILD_MESSAGE_END = CHILD_MESSAGE_END; +const CHILD_MESSAGE_MEM_USAGE = 3; +exports.CHILD_MESSAGE_MEM_USAGE = CHILD_MESSAGE_MEM_USAGE; +const CHILD_MESSAGE_CALL_SETUP = 4; +exports.CHILD_MESSAGE_CALL_SETUP = CHILD_MESSAGE_CALL_SETUP; +const PARENT_MESSAGE_OK = 0; +exports.PARENT_MESSAGE_OK = PARENT_MESSAGE_OK; +const PARENT_MESSAGE_CLIENT_ERROR = 1; +exports.PARENT_MESSAGE_CLIENT_ERROR = PARENT_MESSAGE_CLIENT_ERROR; +const PARENT_MESSAGE_SETUP_ERROR = 2; +exports.PARENT_MESSAGE_SETUP_ERROR = PARENT_MESSAGE_SETUP_ERROR; +const PARENT_MESSAGE_CUSTOM = 3; +exports.PARENT_MESSAGE_CUSTOM = PARENT_MESSAGE_CUSTOM; +const PARENT_MESSAGE_MEM_USAGE = 4; + +// Option objects. + +// Messages passed from the parent to the children. + +// Messages passed from the children to the parent. + +// Queue types. +exports.PARENT_MESSAGE_MEM_USAGE = PARENT_MESSAGE_MEM_USAGE; +let WorkerStates = /*#__PURE__*/ (function (WorkerStates) { + WorkerStates['STARTING'] = 'starting'; + WorkerStates['OK'] = 'ok'; + WorkerStates['OUT_OF_MEMORY'] = 'oom'; + WorkerStates['RESTARTING'] = 'restarting'; + WorkerStates['SHUTTING_DOWN'] = 'shutting-down'; + WorkerStates['SHUT_DOWN'] = 'shut-down'; + return WorkerStates; +})({}); +exports.WorkerStates = WorkerStates; +let WorkerEvents = /*#__PURE__*/ (function (WorkerEvents) { + WorkerEvents['STATE_CHANGE'] = 'state-change'; + return WorkerEvents; +})({}); +exports.WorkerEvents = WorkerEvents; diff --git a/node_modules/jest-worker/build/workers/ChildProcessWorker.js b/node_modules/jest-worker/build/workers/ChildProcessWorker.js new file mode 100644 index 00000000..6a9d1f36 --- /dev/null +++ b/node_modules/jest-worker/build/workers/ChildProcessWorker.js @@ -0,0 +1,490 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = exports.SIGKILL_DELAY = void 0; +function _child_process() { + const data = require('child_process'); + _child_process = function () { + return data; + }; + return data; +} +function _os() { + const data = require('os'); + _os = function () { + return data; + }; + return data; +} +function _mergeStream() { + const data = _interopRequireDefault(require('merge-stream')); + _mergeStream = function () { + return data; + }; + return data; +} +function _supportsColor() { + const data = require('supports-color'); + _supportsColor = function () { + return data; + }; + return data; +} +var _types = require('../types'); +var _WorkerAbstract = _interopRequireDefault(require('./WorkerAbstract')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const SIGNAL_BASE_EXIT_CODE = 128; +const SIGKILL_EXIT_CODE = SIGNAL_BASE_EXIT_CODE + 9; +const SIGTERM_EXIT_CODE = SIGNAL_BASE_EXIT_CODE + 15; + +// How long to wait after SIGTERM before sending SIGKILL +const SIGKILL_DELAY = 500; + +/** + * This class wraps the child process and provides a nice interface to + * communicate with. It takes care of: + * + * - Re-spawning the process if it dies. + * - Queues calls while the worker is busy. + * - Re-sends the requests if the worker blew up. + * + * The reason for queueing them here (since childProcess.send also has an + * internal queue) is because the worker could be doing asynchronous work, and + * this would lead to the child process to read its receiving buffer and start a + * second call. By queueing calls here, we don't send the next call to the + * children until we receive the result of the previous one. + * + * As soon as a request starts to be processed by a worker, its "processed" + * field is changed to "true", so that other workers which might encounter the + * same call skip it. + */ +exports.SIGKILL_DELAY = SIGKILL_DELAY; +class ChildProcessWorker extends _WorkerAbstract.default { + _child; + _options; + _request; + _retries; + _onProcessEnd; + _onCustomMessage; + _stdout; + _stderr; + _stderrBuffer = []; + _memoryUsagePromise; + _resolveMemoryUsage; + _childIdleMemoryUsage; + _childIdleMemoryUsageLimit; + _memoryUsageCheck = false; + _childWorkerPath; + constructor(options) { + super(options); + this._options = options; + this._request = null; + this._stdout = null; + this._stderr = null; + this._childIdleMemoryUsage = null; + this._childIdleMemoryUsageLimit = options.idleMemoryLimit || null; + this._childWorkerPath = + options.childWorkerPath || require.resolve('./processChild'); + this.state = _types.WorkerStates.STARTING; + this.initialize(); + } + initialize() { + if ( + this.state === _types.WorkerStates.OUT_OF_MEMORY || + this.state === _types.WorkerStates.SHUTTING_DOWN || + this.state === _types.WorkerStates.SHUT_DOWN + ) { + return; + } + if (this._child && this._child.connected) { + this._child.kill('SIGKILL'); + } + this.state = _types.WorkerStates.STARTING; + const forceColor = _supportsColor().stdout + ? { + FORCE_COLOR: '1' + } + : {}; + const silent = this._options.silent ?? true; + if (!silent) { + // NOTE: Detecting an out of memory crash is independent of idle memory usage monitoring. We want to + // monitor for a crash occurring so that it can be handled as required and so we can tell the difference + // between an OOM crash and another kind of crash. We need to do this because if a worker crashes due to + // an OOM event sometimes it isn't seen by the worker pool and it just sits there waiting for the worker + // to respond and it never will. + console.warn('Unable to detect out of memory event if silent === false'); + } + this._stderrBuffer = []; + const options = { + cwd: process.cwd(), + env: { + ...process.env, + JEST_WORKER_ID: String(this._options.workerId + 1), + // 0-indexed workerId, 1-indexed JEST_WORKER_ID + ...forceColor + }, + // Suppress --debug / --inspect flags while preserving others (like --harmony). + execArgv: process.execArgv.filter(v => !/^--(debug|inspect)/.test(v)), + // default to advanced serialization in order to match worker threads + serialization: 'advanced', + silent, + ...this._options.forkOptions + }; + this._child = (0, _child_process().fork)( + this._childWorkerPath, + [], + options + ); + if (this._child.stdout) { + if (!this._stdout) { + // We need to add a permanent stream to the merged stream to prevent it + // from ending when the subprocess stream ends + this._stdout = (0, _mergeStream().default)(this._getFakeStream()); + } + this._stdout.add(this._child.stdout); + } + if (this._child.stderr) { + if (!this._stderr) { + // We need to add a permanent stream to the merged stream to prevent it + // from ending when the subprocess stream ends + this._stderr = (0, _mergeStream().default)(this._getFakeStream()); + } + this._stderr.add(this._child.stderr); + this._child.stderr.on('data', this.stderrDataHandler.bind(this)); + } + this._child.on('message', this._onMessage.bind(this)); + this._child.on('exit', this._onExit.bind(this)); + this._child.on('disconnect', this._onDisconnect.bind(this)); + this._child.send([ + _types.CHILD_MESSAGE_INITIALIZE, + false, + this._options.workerPath, + this._options.setupArgs + ]); + this._retries++; + + // If we exceeded the amount of retries, we will emulate an error reply + // coming from the child. This avoids code duplication related with cleaning + // the queue, and scheduling the next call. + if (this._retries > this._options.maxRetries) { + const error = new Error( + `Jest worker encountered ${this._retries} child process exceptions, exceeding retry limit` + ); + this._onMessage([ + _types.PARENT_MESSAGE_CLIENT_ERROR, + error.name, + error.message, + error.stack, + { + type: 'WorkerError' + } + ]); + + // Clear the request so we don't keep executing it. + this._request = null; + } + this.state = _types.WorkerStates.OK; + if (this._resolveWorkerReady) { + this._resolveWorkerReady(); + } + } + stderrDataHandler(chunk) { + if (chunk) { + this._stderrBuffer.push(Buffer.from(chunk)); + } + this._detectOutOfMemoryCrash(); + if (this.state === _types.WorkerStates.OUT_OF_MEMORY) { + this._workerReadyPromise = undefined; + this._resolveWorkerReady = undefined; + this.killChild(); + this._shutdown(); + } + } + _detectOutOfMemoryCrash() { + try { + const bufferStr = Buffer.concat(this._stderrBuffer).toString('utf8'); + if ( + bufferStr.includes('heap out of memory') || + bufferStr.includes('allocation failure;') || + bufferStr.includes('Last few GCs') + ) { + if ( + this.state === _types.WorkerStates.OK || + this.state === _types.WorkerStates.STARTING + ) { + this.state = _types.WorkerStates.OUT_OF_MEMORY; + } + } + } catch (err) { + console.error('Error looking for out of memory crash', err); + } + } + _onDisconnect() { + this._workerReadyPromise = undefined; + this._resolveWorkerReady = undefined; + this._detectOutOfMemoryCrash(); + if (this.state === _types.WorkerStates.OUT_OF_MEMORY) { + this.killChild(); + this._shutdown(); + } + } + _onMessage(response) { + // Ignore messages not intended for us + if (!Array.isArray(response)) return; + + // TODO: Add appropriate type check + let error; + switch (response[0]) { + case _types.PARENT_MESSAGE_OK: + this._onProcessEnd(null, response[1]); + break; + case _types.PARENT_MESSAGE_CLIENT_ERROR: + error = response[4]; + if (error != null && typeof error === 'object') { + const extra = error; + // @ts-expect-error: no index + const NativeCtor = globalThis[response[1]]; + const Ctor = typeof NativeCtor === 'function' ? NativeCtor : Error; + error = new Ctor(response[2]); + error.type = response[1]; + error.stack = response[3]; + for (const key in extra) { + error[key] = extra[key]; + } + } + this._onProcessEnd(error, null); + break; + case _types.PARENT_MESSAGE_SETUP_ERROR: + error = new Error(`Error when calling setup: ${response[2]}`); + error.type = response[1]; + error.stack = response[3]; + this._onProcessEnd(error, null); + break; + case _types.PARENT_MESSAGE_CUSTOM: + this._onCustomMessage(response[1]); + break; + case _types.PARENT_MESSAGE_MEM_USAGE: + this._childIdleMemoryUsage = response[1]; + if (this._resolveMemoryUsage) { + this._resolveMemoryUsage(response[1]); + this._resolveMemoryUsage = undefined; + this._memoryUsagePromise = undefined; + } + this._performRestartIfRequired(); + break; + default: + // Ignore messages not intended for us + break; + } + } + _performRestartIfRequired() { + if (this._memoryUsageCheck) { + this._memoryUsageCheck = false; + let limit = this._childIdleMemoryUsageLimit; + + // TODO: At some point it would make sense to make use of + // stringToBytes found in jest-config, however as this + // package does not have any dependencies on an other jest + // packages that can wait until some other time. + if (limit && limit > 0 && limit <= 1) { + limit = Math.floor((0, _os().totalmem)() * limit); + } else if (limit) { + limit = Math.floor(limit); + } + if ( + limit && + this._childIdleMemoryUsage && + this._childIdleMemoryUsage > limit + ) { + this.state = _types.WorkerStates.RESTARTING; + this.killChild(); + } + } + } + _onExit(exitCode, signal) { + this._workerReadyPromise = undefined; + this._resolveWorkerReady = undefined; + this._detectOutOfMemoryCrash(); + if (exitCode !== 0 && this.state === _types.WorkerStates.OUT_OF_MEMORY) { + this._onProcessEnd( + new Error('Jest worker ran out of memory and crashed'), + null + ); + this._shutdown(); + } else if ( + (exitCode !== 0 && + exitCode !== null && + exitCode !== SIGTERM_EXIT_CODE && + exitCode !== SIGKILL_EXIT_CODE && + this.state !== _types.WorkerStates.SHUTTING_DOWN) || + this.state === _types.WorkerStates.RESTARTING + ) { + this.state = _types.WorkerStates.RESTARTING; + this.initialize(); + if (this._request) { + this._child.send(this._request); + } + } else { + // At this point, it's not clear why the child process exited. There could + // be several reasons: + // + // 1. The child process exited successfully after finishing its work. + // This is the most likely case. + // 2. The child process crashed in a manner that wasn't caught through + // any of the heuristic-based checks above. + // 3. The child process was killed by another process or daemon unrelated + // to Jest. For example, oom-killer on Linux may have picked the child + // process to kill because overall system memory is constrained. + // + // If there's a pending request to the child process in any of those + // situations, the request still needs to be handled in some manner before + // entering the shutdown phase. Otherwise the caller expecting a response + // from the worker will never receive indication that something unexpected + // happened and hang forever. + // + // In normal operation, the request is handled and cleared before the + // child process exits. If it's still present, it's not clear what + // happened and probably best to throw an error. In practice, this usually + // happens when the child process is killed externally. + // + // There's a reasonable argument that the child process should be retried + // with request re-sent in this scenario. However, if the problem was due + // to situations such as oom-killer attempting to free up system + // resources, retrying would exacerbate the problem. + const isRequestStillPending = !!this._request; + if (isRequestStillPending) { + // If a signal is present, we can be reasonably confident the process + // was killed externally. Log this fact so it's more clear to users that + // something went wrong externally, rather than a bug in Jest itself. + const error = new Error( + signal != null + ? `A jest worker process (pid=${this._child.pid}) was terminated by another process: signal=${signal}, exitCode=${exitCode}. Operating system logs may contain more information on why this occurred.` + : `A jest worker process (pid=${this._child.pid}) crashed for an unknown reason: exitCode=${exitCode}` + ); + this._onProcessEnd(error, null); + } + this._shutdown(); + } + } + send(request, onProcessStart, onProcessEnd, onCustomMessage) { + this._stderrBuffer = []; + onProcessStart(this); + this._onProcessEnd = (...args) => { + const hasRequest = !!this._request; + + // Clean the request to avoid sending past requests to workers that fail + // while waiting for a new request (timers, unhandled rejections...) + this._request = null; + if ( + this._childIdleMemoryUsageLimit && + this._child.connected && + hasRequest + ) { + this.checkMemoryUsage(); + } + return onProcessEnd(...args); + }; + this._onCustomMessage = (...arg) => onCustomMessage(...arg); + this._request = request; + this._retries = 0; + // eslint-disable-next-line @typescript-eslint/no-empty-function + this._child.send(request, () => {}); + } + waitForExit() { + return this._exitPromise; + } + killChild() { + // We store a reference so that there's no way we can accidentally + // kill a new worker that has been spawned. + const childToKill = this._child; + childToKill.kill('SIGTERM'); + return setTimeout(() => childToKill.kill('SIGKILL'), SIGKILL_DELAY); + } + forceExit() { + this.state = _types.WorkerStates.SHUTTING_DOWN; + const sigkillTimeout = this.killChild(); + this._exitPromise.then(() => clearTimeout(sigkillTimeout)); + } + getWorkerId() { + return this._options.workerId; + } + + /** + * Gets the process id of the worker. + * + * @returns Process id. + */ + getWorkerSystemId() { + return this._child.pid; + } + getStdout() { + return this._stdout; + } + getStderr() { + return this._stderr; + } + + /** + * Gets the last reported memory usage. + * + * @returns Memory usage in bytes. + */ + getMemoryUsage() { + if (!this._memoryUsagePromise) { + let rejectCallback; + const promise = new Promise((resolve, reject) => { + this._resolveMemoryUsage = resolve; + rejectCallback = reject; + }); + this._memoryUsagePromise = promise; + if (!this._child.connected && rejectCallback) { + rejectCallback(new Error('Child process is not running.')); + this._memoryUsagePromise = undefined; + this._resolveMemoryUsage = undefined; + return promise; + } + this._child.send([_types.CHILD_MESSAGE_MEM_USAGE], err => { + if (err && rejectCallback) { + this._memoryUsagePromise = undefined; + this._resolveMemoryUsage = undefined; + rejectCallback(err); + } + }); + return promise; + } + return this._memoryUsagePromise; + } + + /** + * Gets updated memory usage and restarts if required + */ + checkMemoryUsage() { + if (this._childIdleMemoryUsageLimit) { + this._memoryUsageCheck = true; + this._child.send([_types.CHILD_MESSAGE_MEM_USAGE], err => { + if (err) { + console.error('Unable to check memory usage', err); + } + }); + } else { + console.warn( + 'Memory usage of workers can only be checked if a limit is set' + ); + } + } + isWorkerRunning() { + return this._child.connected && !this._child.killed; + } +} +exports.default = ChildProcessWorker; diff --git a/node_modules/jest-worker/build/workers/NodeThreadsWorker.js b/node_modules/jest-worker/build/workers/NodeThreadsWorker.js new file mode 100644 index 00000000..e25247a6 --- /dev/null +++ b/node_modules/jest-worker/build/workers/NodeThreadsWorker.js @@ -0,0 +1,359 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function _os() { + const data = require('os'); + _os = function () { + return data; + }; + return data; +} +function _worker_threads() { + const data = require('worker_threads'); + _worker_threads = function () { + return data; + }; + return data; +} +function _mergeStream() { + const data = _interopRequireDefault(require('merge-stream')); + _mergeStream = function () { + return data; + }; + return data; +} +var _types = require('../types'); +var _WorkerAbstract = _interopRequireDefault(require('./WorkerAbstract')); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +class ExperimentalWorker extends _WorkerAbstract.default { + _worker; + _options; + _request; + _retries; + _onProcessEnd; + _onCustomMessage; + _stdout; + _stderr; + _memoryUsagePromise; + _resolveMemoryUsage; + _childWorkerPath; + _childIdleMemoryUsage; + _childIdleMemoryUsageLimit; + _memoryUsageCheck = false; + constructor(options) { + super(options); + this._options = options; + this._request = null; + this._stdout = null; + this._stderr = null; + this._childWorkerPath = + options.childWorkerPath || require.resolve('./threadChild'); + this._childIdleMemoryUsage = null; + this._childIdleMemoryUsageLimit = options.idleMemoryLimit || null; + this.initialize(); + } + initialize() { + if ( + this.state === _types.WorkerStates.OUT_OF_MEMORY || + this.state === _types.WorkerStates.SHUTTING_DOWN || + this.state === _types.WorkerStates.SHUT_DOWN + ) { + return; + } + if (this._worker) { + this._worker.terminate(); + } + this.state = _types.WorkerStates.STARTING; + this._worker = new (_worker_threads().Worker)(this._childWorkerPath, { + eval: false, + resourceLimits: this._options.resourceLimits, + stderr: true, + stdout: true, + workerData: this._options.workerData, + ...this._options.forkOptions + }); + if (this._worker.stdout) { + if (!this._stdout) { + // We need to add a permanent stream to the merged stream to prevent it + // from ending when the subprocess stream ends + this._stdout = (0, _mergeStream().default)(this._getFakeStream()); + } + this._stdout.add(this._worker.stdout); + } + if (this._worker.stderr) { + if (!this._stderr) { + // We need to add a permanent stream to the merged stream to prevent it + // from ending when the subprocess stream ends + this._stderr = (0, _mergeStream().default)(this._getFakeStream()); + } + this._stderr.add(this._worker.stderr); + } + + // This can be useful for debugging. + if (!(this._options.silent ?? true)) { + this._worker.stdout.setEncoding('utf8'); + // eslint-disable-next-line no-console + this._worker.stdout.on('data', console.log); + this._worker.stderr.setEncoding('utf8'); + this._worker.stderr.on('data', console.error); + } + this._worker.on('message', this._onMessage.bind(this)); + this._worker.on('exit', this._onExit.bind(this)); + this._worker.on('error', this._onError.bind(this)); + this._worker.postMessage([ + _types.CHILD_MESSAGE_INITIALIZE, + false, + this._options.workerPath, + this._options.setupArgs, + String(this._options.workerId + 1) // 0-indexed workerId, 1-indexed JEST_WORKER_ID + ]); + + this._retries++; + + // If we exceeded the amount of retries, we will emulate an error reply + // coming from the child. This avoids code duplication related with cleaning + // the queue, and scheduling the next call. + if (this._retries > this._options.maxRetries) { + const error = new Error('Call retries were exceeded'); + this._onMessage([ + _types.PARENT_MESSAGE_CLIENT_ERROR, + error.name, + error.message, + error.stack, + { + type: 'WorkerError' + } + ]); + } + this.state = _types.WorkerStates.OK; + if (this._resolveWorkerReady) { + this._resolveWorkerReady(); + } + } + _onError(error) { + if (error.message.includes('heap out of memory')) { + this.state = _types.WorkerStates.OUT_OF_MEMORY; + + // Threads don't behave like processes, they don't crash when they run out of + // memory. But for consistency we want them to behave like processes so we call + // terminate to simulate a crash happening that was not planned + this._worker.terminate(); + } + } + _onMessage(response) { + // Ignore messages not intended for us + if (!Array.isArray(response)) return; + let error; + switch (response[0]) { + case _types.PARENT_MESSAGE_OK: + this._onProcessEnd(null, response[1]); + break; + case _types.PARENT_MESSAGE_CLIENT_ERROR: + error = response[4]; + if (error != null && typeof error === 'object') { + const extra = error; + // @ts-expect-error: no index + const NativeCtor = globalThis[response[1]]; + const Ctor = typeof NativeCtor === 'function' ? NativeCtor : Error; + error = new Ctor(response[2]); + error.type = response[1]; + error.stack = response[3]; + for (const key in extra) { + // @ts-expect-error: no index + error[key] = extra[key]; + } + } + this._onProcessEnd(error, null); + break; + case _types.PARENT_MESSAGE_SETUP_ERROR: + error = new Error(`Error when calling setup: ${response[2]}`); + + // @ts-expect-error: adding custom properties to errors. + error.type = response[1]; + error.stack = response[3]; + this._onProcessEnd(error, null); + break; + case _types.PARENT_MESSAGE_CUSTOM: + this._onCustomMessage(response[1]); + break; + case _types.PARENT_MESSAGE_MEM_USAGE: + this._childIdleMemoryUsage = response[1]; + if (this._resolveMemoryUsage) { + this._resolveMemoryUsage(response[1]); + this._resolveMemoryUsage = undefined; + this._memoryUsagePromise = undefined; + } + this._performRestartIfRequired(); + break; + default: + // Ignore messages not intended for us + break; + } + } + _onExit(exitCode) { + this._workerReadyPromise = undefined; + this._resolveWorkerReady = undefined; + if (exitCode !== 0 && this.state === _types.WorkerStates.OUT_OF_MEMORY) { + this._onProcessEnd( + new Error('Jest worker ran out of memory and crashed'), + null + ); + this._shutdown(); + } else if ( + (exitCode !== 0 && + this.state !== _types.WorkerStates.SHUTTING_DOWN && + this.state !== _types.WorkerStates.SHUT_DOWN) || + this.state === _types.WorkerStates.RESTARTING + ) { + this.initialize(); + if (this._request) { + this._worker.postMessage(this._request); + } + } else { + // If the worker thread exits while a request is still pending, throw an + // error. This is unexpected and tests may not have run to completion. + const isRequestStillPending = !!this._request; + if (isRequestStillPending) { + this._onProcessEnd( + new Error( + 'A Jest worker thread exited unexpectedly before finishing tests for an unknown reason. One of the ways this can happen is if process.exit() was called in testing code.' + ), + null + ); + } + this._shutdown(); + } + } + waitForExit() { + return this._exitPromise; + } + forceExit() { + this.state = _types.WorkerStates.SHUTTING_DOWN; + this._worker.terminate(); + } + send(request, onProcessStart, onProcessEnd, onCustomMessage) { + onProcessStart(this); + this._onProcessEnd = (...args) => { + const hasRequest = !!this._request; + + // Clean the request to avoid sending past requests to workers that fail + // while waiting for a new request (timers, unhandled rejections...) + this._request = null; + if (this._childIdleMemoryUsageLimit && hasRequest) { + this.checkMemoryUsage(); + } + const res = onProcessEnd?.(...args); + + // Clean up the reference so related closures can be garbage collected. + onProcessEnd = null; + return res; + }; + this._onCustomMessage = (...arg) => onCustomMessage(...arg); + this._request = request; + this._retries = 0; + this._worker.postMessage(request); + } + getWorkerId() { + return this._options.workerId; + } + getStdout() { + return this._stdout; + } + getStderr() { + return this._stderr; + } + _performRestartIfRequired() { + if (this._memoryUsageCheck) { + this._memoryUsageCheck = false; + let limit = this._childIdleMemoryUsageLimit; + + // TODO: At some point it would make sense to make use of + // stringToBytes found in jest-config, however as this + // package does not have any dependencies on an other jest + // packages that can wait until some other time. + if (limit && limit > 0 && limit <= 1) { + limit = Math.floor((0, _os().totalmem)() * limit); + } else if (limit) { + limit = Math.floor(limit); + } + if ( + limit && + this._childIdleMemoryUsage && + this._childIdleMemoryUsage > limit + ) { + this.state = _types.WorkerStates.RESTARTING; + this._worker.terminate(); + } + } + } + + /** + * Gets the last reported memory usage. + * + * @returns Memory usage in bytes. + */ + getMemoryUsage() { + if (!this._memoryUsagePromise) { + let rejectCallback; + const promise = new Promise((resolve, reject) => { + this._resolveMemoryUsage = resolve; + rejectCallback = reject; + }); + this._memoryUsagePromise = promise; + if (!this._worker.threadId) { + rejectCallback(new Error('Child process is not running.')); + this._memoryUsagePromise = undefined; + this._resolveMemoryUsage = undefined; + return promise; + } + try { + this._worker.postMessage([_types.CHILD_MESSAGE_MEM_USAGE]); + } catch (err) { + this._memoryUsagePromise = undefined; + this._resolveMemoryUsage = undefined; + rejectCallback(err); + } + return promise; + } + return this._memoryUsagePromise; + } + + /** + * Gets updated memory usage and restarts if required + */ + checkMemoryUsage() { + if (this._childIdleMemoryUsageLimit) { + this._memoryUsageCheck = true; + this._worker.postMessage([_types.CHILD_MESSAGE_MEM_USAGE]); + } else { + console.warn( + 'Memory usage of workers can only be checked if a limit is set' + ); + } + } + + /** + * Gets the thread id of the worker. + * + * @returns Thread id. + */ + getWorkerSystemId() { + return this._worker.threadId; + } + isWorkerRunning() { + return this._worker.threadId >= 0; + } +} +exports.default = ExperimentalWorker; diff --git a/node_modules/jest-worker/build/workers/WorkerAbstract.js b/node_modules/jest-worker/build/workers/WorkerAbstract.js new file mode 100644 index 00000000..1bd32f52 --- /dev/null +++ b/node_modules/jest-worker/build/workers/WorkerAbstract.js @@ -0,0 +1,135 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = void 0; +function _stream() { + const data = require('stream'); + _stream = function () { + return data; + }; + return data; +} +var _types = require('../types'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +class WorkerAbstract extends _stream().EventEmitter { + /** + * DO NOT WRITE TO THIS DIRECTLY. + * Use this.state getter/setters so events are emitted correctly. + */ + #state = _types.WorkerStates.STARTING; + _fakeStream = null; + _exitPromise; + _resolveExitPromise; + _workerReadyPromise; + _resolveWorkerReady; + get state() { + return this.#state; + } + set state(value) { + if (this.#state !== value) { + const oldState = this.#state; + this.#state = value; + this.emit(_types.WorkerEvents.STATE_CHANGE, value, oldState); + } + } + constructor(options) { + super(); + if (typeof options.on === 'object') { + for (const [event, handlers] of Object.entries(options.on)) { + // Can't do Array.isArray on a ReadonlyArray. + // https://github.com/microsoft/TypeScript/issues/17002 + if (typeof handlers === 'function') { + super.on(event, handlers); + } else { + for (const handler of handlers) { + super.on(event, handler); + } + } + } + } + this._exitPromise = new Promise(resolve => { + this._resolveExitPromise = resolve; + }); + this._exitPromise.then(() => { + this.state = _types.WorkerStates.SHUT_DOWN; + }); + } + + /** + * Wait for the worker child process to be ready to handle requests. + * + * @returns Promise which resolves when ready. + */ + waitForWorkerReady() { + if (!this._workerReadyPromise) { + this._workerReadyPromise = new Promise((resolve, reject) => { + let settled = false; + let to; + switch (this.state) { + case _types.WorkerStates.OUT_OF_MEMORY: + case _types.WorkerStates.SHUTTING_DOWN: + case _types.WorkerStates.SHUT_DOWN: + settled = true; + reject( + new Error( + `Worker state means it will never be ready: ${this.state}` + ) + ); + break; + case _types.WorkerStates.STARTING: + case _types.WorkerStates.RESTARTING: + this._resolveWorkerReady = () => { + settled = true; + resolve(); + if (to) { + clearTimeout(to); + } + }; + break; + case _types.WorkerStates.OK: + settled = true; + resolve(); + break; + } + if (!settled) { + to = setTimeout(() => { + if (!settled) { + reject(new Error('Timeout starting worker')); + } + }, 500); + } + }); + } + return this._workerReadyPromise; + } + + /** + * Used to shut down the current working instance once the children have been + * killed off. + */ + _shutdown() { + this.state === _types.WorkerStates.SHUT_DOWN; + + // End the permanent stream so the merged stream end too + if (this._fakeStream) { + this._fakeStream.end(); + this._fakeStream = null; + } + this._resolveExitPromise(); + } + _getFakeStream() { + if (!this._fakeStream) { + this._fakeStream = new (_stream().PassThrough)(); + } + return this._fakeStream; + } +} +exports.default = WorkerAbstract; diff --git a/node_modules/jest-worker/build/workers/messageParent.js b/node_modules/jest-worker/build/workers/messageParent.js new file mode 100644 index 00000000..62e2ccec --- /dev/null +++ b/node_modules/jest-worker/build/workers/messageParent.js @@ -0,0 +1,33 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = messageParent; +function _worker_threads() { + const data = require('worker_threads'); + _worker_threads = function () { + return data; + }; + return data; +} +var _types = require('../types'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +function messageParent(message, parentProcess = process) { + if (!_worker_threads().isMainThread && _worker_threads().parentPort != null) { + _worker_threads().parentPort.postMessage([ + _types.PARENT_MESSAGE_CUSTOM, + message + ]); + } else if (typeof parentProcess.send === 'function') { + parentProcess.send([_types.PARENT_MESSAGE_CUSTOM, message]); + } else { + throw new Error('"messageParent" can only be used inside a worker'); + } +} diff --git a/node_modules/jest-worker/build/workers/processChild.js b/node_modules/jest-worker/build/workers/processChild.js new file mode 100644 index 00000000..1a47f23c --- /dev/null +++ b/node_modules/jest-worker/build/workers/processChild.js @@ -0,0 +1,159 @@ +'use strict'; + +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +var _types = require('../types'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +let file = null; +let setupArgs = []; +let initialized = false; + +/** + * This file is a small bootstrapper for workers. It sets up the communication + * between the worker and the parent process, interpreting parent messages and + * sending results back. + * + * The file loaded will be lazily initialized the first time any of the workers + * is called. This is done for optimal performance: if the farm is initialized, + * but no call is made to it, child Node processes will be consuming the least + * possible amount of memory. + * + * If an invalid message is detected, the child will exit (by throwing) with a + * non-zero exit code. + */ +const messageListener = request => { + switch (request[0]) { + case _types.CHILD_MESSAGE_INITIALIZE: + const init = request; + file = init[2]; + setupArgs = init[3]; + break; + case _types.CHILD_MESSAGE_CALL: + const call = request; + execMethod(call[2], call[3]); + break; + case _types.CHILD_MESSAGE_END: + end(); + break; + case _types.CHILD_MESSAGE_MEM_USAGE: + reportMemoryUsage(); + break; + case _types.CHILD_MESSAGE_CALL_SETUP: + if (initialized) { + reportSuccess(void 0); + } else { + const main = require(file); + initialized = true; + if (main.setup) { + execFunction( + main.setup, + main, + setupArgs, + reportSuccess, + reportInitializeError + ); + } else { + reportSuccess(void 0); + } + } + break; + default: + throw new TypeError( + `Unexpected request from parent process: ${request[0]}` + ); + } +}; +process.on('message', messageListener); +function reportSuccess(result) { + if (!process || !process.send) { + throw new Error('Child can only be used on a forked process'); + } + process.send([_types.PARENT_MESSAGE_OK, result]); +} +function reportClientError(error) { + return reportError(error, _types.PARENT_MESSAGE_CLIENT_ERROR); +} +function reportInitializeError(error) { + return reportError(error, _types.PARENT_MESSAGE_SETUP_ERROR); +} +function reportMemoryUsage() { + if (!process || !process.send) { + throw new Error('Child can only be used on a forked process'); + } + const msg = [_types.PARENT_MESSAGE_MEM_USAGE, process.memoryUsage().heapUsed]; + process.send(msg); +} +function reportError(error, type) { + if (!process || !process.send) { + throw new Error('Child can only be used on a forked process'); + } + if (error == null) { + error = new Error('"null" or "undefined" thrown'); + } + process.send([ + type, + error.constructor && error.constructor.name, + error.message, + error.stack, + typeof error === 'object' + ? { + ...error + } + : error + ]); +} +function end() { + const main = require(file); + if (!main.teardown) { + exitProcess(); + return; + } + execFunction(main.teardown, main, [], exitProcess, exitProcess); +} +function exitProcess() { + // Clean up open handles so the process ideally exits gracefully + process.removeListener('message', messageListener); +} +function execMethod(method, args) { + const main = require(file); + let fn; + if (method === 'default') { + fn = main.__esModule ? main.default : main; + } else { + fn = main[method]; + } + function execHelper() { + execFunction(fn, main, args, reportSuccess, reportClientError); + } + if (initialized || !main.setup) { + execHelper(); + return; + } + initialized = true; + execFunction(main.setup, main, setupArgs, execHelper, reportInitializeError); +} +function execFunction(fn, ctx, args, onResult, onError) { + let result; + try { + result = fn.apply(ctx, args); + } catch (err) { + onError(err); + return; + } + if ((0, _jestUtil().isPromise)(result)) { + result.then(onResult, onError); + } else { + onResult(result); + } +} diff --git a/node_modules/jest-worker/build/workers/threadChild.js b/node_modules/jest-worker/build/workers/threadChild.js new file mode 100644 index 00000000..16aca004 --- /dev/null +++ b/node_modules/jest-worker/build/workers/threadChild.js @@ -0,0 +1,177 @@ +'use strict'; + +function _worker_threads() { + const data = require('worker_threads'); + _worker_threads = function () { + return data; + }; + return data; +} +function _jestUtil() { + const data = require('jest-util'); + _jestUtil = function () { + return data; + }; + return data; +} +var _types = require('../types'); +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +let file = null; +let setupArgs = []; +let initialized = false; + +/** + * This file is a small bootstrapper for workers. It sets up the communication + * between the worker and the parent process, interpreting parent messages and + * sending results back. + * + * The file loaded will be lazily initialized the first time any of the workers + * is called. This is done for optimal performance: if the farm is initialized, + * but no call is made to it, child Node processes will be consuming the least + * possible amount of memory. + * + * If an invalid message is detected, the child will exit (by throwing) with a + * non-zero exit code. + */ +const messageListener = request => { + switch (request[0]) { + case _types.CHILD_MESSAGE_INITIALIZE: + const init = request; + file = init[2]; + setupArgs = init[3]; + process.env.JEST_WORKER_ID = init[4]; + break; + case _types.CHILD_MESSAGE_CALL: + const call = request; + execMethod(call[2], call[3]); + break; + case _types.CHILD_MESSAGE_END: + end(); + break; + case _types.CHILD_MESSAGE_MEM_USAGE: + reportMemoryUsage(); + break; + case _types.CHILD_MESSAGE_CALL_SETUP: + if (initialized) { + reportSuccess(void 0); + } else { + const main = require(file); + initialized = true; + if (main.setup) { + execFunction( + main.setup, + main, + setupArgs, + reportSuccess, + reportInitializeError + ); + } else { + reportSuccess(void 0); + } + } + break; + default: + throw new TypeError( + `Unexpected request from parent process: ${request[0]}` + ); + } +}; +_worker_threads().parentPort.on('message', messageListener); +function reportMemoryUsage() { + if (_worker_threads().isMainThread) { + throw new Error('Child can only be used on a forked process'); + } + const msg = [_types.PARENT_MESSAGE_MEM_USAGE, process.memoryUsage().heapUsed]; + _worker_threads().parentPort.postMessage(msg); +} +function reportSuccess(result) { + if (_worker_threads().isMainThread) { + throw new Error('Child can only be used on a forked process'); + } + try { + _worker_threads().parentPort.postMessage([ + _types.PARENT_MESSAGE_OK, + result + ]); + } catch (err) { + // Handling it here to avoid unhandled `DataCloneError` rejection + // which is hard to distinguish on the parent side + // (such error doesn't have any message or stack trace) + reportClientError(err); + } +} +function reportClientError(error) { + return reportError(error, _types.PARENT_MESSAGE_CLIENT_ERROR); +} +function reportInitializeError(error) { + return reportError(error, _types.PARENT_MESSAGE_SETUP_ERROR); +} +function reportError(error, type) { + if (_worker_threads().isMainThread) { + throw new Error('Child can only be used on a forked process'); + } + if (error == null) { + error = new Error('"null" or "undefined" thrown'); + } + _worker_threads().parentPort.postMessage([ + type, + error.constructor && error.constructor.name, + error.message, + error.stack, + typeof error === 'object' + ? { + ...error + } + : error + ]); +} +function end() { + const main = require(file); + if (!main.teardown) { + exitProcess(); + return; + } + execFunction(main.teardown, main, [], exitProcess, exitProcess); +} +function exitProcess() { + // Clean up open handles so the worker ideally exits gracefully + _worker_threads().parentPort.removeListener('message', messageListener); +} +function execMethod(method, args) { + const main = require(file); + let fn; + if (method === 'default') { + fn = main.__esModule ? main.default : main; + } else { + fn = main[method]; + } + function execHelper() { + execFunction(fn, main, args, reportSuccess, reportClientError); + } + if (initialized || !main.setup) { + execHelper(); + return; + } + initialized = true; + execFunction(main.setup, main, setupArgs, execHelper, reportInitializeError); +} +function execFunction(fn, ctx, args, onResult, onError) { + let result; + try { + result = fn.apply(ctx, args); + } catch (err) { + onError(err); + return; + } + if ((0, _jestUtil().isPromise)(result)) { + result.then(onResult, onError); + } else { + onResult(result); + } +} diff --git a/node_modules/jest-worker/node_modules/supports-color/browser.js b/node_modules/jest-worker/node_modules/supports-color/browser.js new file mode 100644 index 00000000..f097aecd --- /dev/null +++ b/node_modules/jest-worker/node_modules/supports-color/browser.js @@ -0,0 +1,24 @@ +/* eslint-env browser */ +'use strict'; + +function getChromeVersion() { + const matches = /(Chrome|Chromium)\/(?\d+)\./.exec(navigator.userAgent); + + if (!matches) { + return; + } + + return Number.parseInt(matches.groups.chromeVersion, 10); +} + +const colorSupport = getChromeVersion() >= 69 ? { + level: 1, + hasBasic: true, + has256: false, + has16m: false +} : false; + +module.exports = { + stdout: colorSupport, + stderr: colorSupport +}; diff --git a/node_modules/jest-worker/node_modules/supports-color/index.js b/node_modules/jest-worker/node_modules/supports-color/index.js new file mode 100644 index 00000000..2dd2fcb0 --- /dev/null +++ b/node_modules/jest-worker/node_modules/supports-color/index.js @@ -0,0 +1,152 @@ +'use strict'; +const os = require('os'); +const tty = require('tty'); +const hasFlag = require('has-flag'); + +const {env} = process; + +let flagForceColor; +if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false') || + hasFlag('color=never')) { + flagForceColor = 0; +} else if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + flagForceColor = 1; +} + +function envForceColor() { + if ('FORCE_COLOR' in env) { + if (env.FORCE_COLOR === 'true') { + return 1; + } + + if (env.FORCE_COLOR === 'false') { + return 0; + } + + return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3); + } +} + +function translateLevel(level) { + if (level === 0) { + return false; + } + + return { + level, + hasBasic: true, + has256: level >= 2, + has16m: level >= 3 + }; +} + +function supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) { + const noFlagForceColor = envForceColor(); + if (noFlagForceColor !== undefined) { + flagForceColor = noFlagForceColor; + } + + const forceColor = sniffFlags ? flagForceColor : noFlagForceColor; + + if (forceColor === 0) { + return 0; + } + + if (sniffFlags) { + if (hasFlag('color=16m') || + hasFlag('color=full') || + hasFlag('color=truecolor')) { + return 3; + } + + if (hasFlag('color=256')) { + return 2; + } + } + + if (haveStream && !streamIsTTY && forceColor === undefined) { + return 0; + } + + const min = forceColor || 0; + + if (env.TERM === 'dumb') { + return min; + } + + if (process.platform === 'win32') { + // Windows 10 build 10586 is the first Windows release that supports 256 colors. + // Windows 10 build 14931 is the first release that supports 16m/TrueColor. + const osRelease = os.release().split('.'); + if ( + Number(osRelease[0]) >= 10 && + Number(osRelease[2]) >= 10586 + ) { + return Number(osRelease[2]) >= 14931 ? 3 : 2; + } + + return 1; + } + + if ('CI' in env) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') { + return 1; + } + + return min; + } + + if ('TEAMCITY_VERSION' in env) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; + } + + if (env.COLORTERM === 'truecolor') { + return 3; + } + + if ('TERM_PROGRAM' in env) { + const version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); + + switch (env.TERM_PROGRAM) { + case 'iTerm.app': + return version >= 3 ? 3 : 2; + case 'Apple_Terminal': + return 2; + // No default + } + } + + if (/-256(color)?$/i.test(env.TERM)) { + return 2; + } + + if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { + return 1; + } + + if ('COLORTERM' in env) { + return 1; + } + + return min; +} + +function getSupportLevel(stream, options = {}) { + const level = supportsColor(stream, { + streamIsTTY: stream && stream.isTTY, + ...options + }); + + return translateLevel(level); +} + +module.exports = { + supportsColor: getSupportLevel, + stdout: getSupportLevel({isTTY: tty.isatty(1)}), + stderr: getSupportLevel({isTTY: tty.isatty(2)}) +}; diff --git a/node_modules/jest-worker/node_modules/supports-color/license b/node_modules/jest-worker/node_modules/supports-color/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/node_modules/jest-worker/node_modules/supports-color/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +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/jest-worker/node_modules/supports-color/package.json b/node_modules/jest-worker/node_modules/supports-color/package.json new file mode 100644 index 00000000..a97bf2a1 --- /dev/null +++ b/node_modules/jest-worker/node_modules/supports-color/package.json @@ -0,0 +1,58 @@ +{ + "name": "supports-color", + "version": "8.1.1", + "description": "Detect whether a terminal supports color", + "license": "MIT", + "repository": "chalk/supports-color", + "funding": "https://github.com/chalk/supports-color?sponsor=1", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "engines": { + "node": ">=10" + }, + "scripts": { + "test": "xo && ava" + }, + "files": [ + "index.js", + "browser.js" + ], + "exports": { + "node": "./index.js", + "default": "./browser.js" + }, + "keywords": [ + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "ansi", + "styles", + "tty", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "support", + "supports", + "capability", + "detect", + "truecolor", + "16m" + ], + "dependencies": { + "has-flag": "^4.0.0" + }, + "devDependencies": { + "ava": "^2.4.0", + "import-fresh": "^3.2.2", + "xo": "^0.35.0" + }, + "browser": "browser.js" +} diff --git a/node_modules/jest-worker/node_modules/supports-color/readme.md b/node_modules/jest-worker/node_modules/supports-color/readme.md new file mode 100644 index 00000000..3eedd1ca --- /dev/null +++ b/node_modules/jest-worker/node_modules/supports-color/readme.md @@ -0,0 +1,77 @@ +# supports-color + +> Detect whether a terminal supports color + +## Install + +``` +$ npm install supports-color +``` + +## Usage + +```js +const supportsColor = require('supports-color'); + +if (supportsColor.stdout) { + console.log('Terminal stdout supports color'); +} + +if (supportsColor.stdout.has256) { + console.log('Terminal stdout supports 256 colors'); +} + +if (supportsColor.stderr.has16m) { + console.log('Terminal stderr supports 16 million colors (truecolor)'); +} +``` + +## API + +Returns an `Object` with a `stdout` and `stderr` property for testing either streams. Each property is an `Object`, or `false` if color is not supported. + +The `stdout`/`stderr` objects specifies a level of support for color through a `.level` property and a corresponding flag: + +- `.level = 1` and `.hasBasic = true`: Basic color support (16 colors) +- `.level = 2` and `.has256 = true`: 256 color support +- `.level = 3` and `.has16m = true`: Truecolor support (16 million colors) + +### `require('supports-color').supportsColor(stream, options?)` + +Additionally, `supports-color` exposes the `.supportsColor()` function that takes an arbitrary write stream (e.g. `process.stdout`) and an optional options object to (re-)evaluate color support for an arbitrary stream. + +For example, `require('supports-color').stdout` is the equivalent of `require('supports-color').supportsColor(process.stdout)`. + +The options object supports a single boolean property `sniffFlags`. By default it is `true`, which instructs `supportsColor()` to sniff `process.argv` for the multitude of `--color` flags (see _Info_ below). If `false`, then `process.argv` is not considered when determining color support. + +## Info + +It obeys the `--color` and `--no-color` CLI flags. + +For situations where using `--color` is not possible, use the environment variable `FORCE_COLOR=1` (level 1), `FORCE_COLOR=2` (level 2), or `FORCE_COLOR=3` (level 3) to forcefully enable color, or `FORCE_COLOR=0` to forcefully disable. The use of `FORCE_COLOR` overrides all other color support checks. + +Explicit 256/Truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively. + +## Related + +- [supports-color-cli](https://github.com/chalk/supports-color-cli) - CLI for this module +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
+ +--- diff --git a/node_modules/jest-worker/package.json b/node_modules/jest-worker/package.json new file mode 100644 index 00000000..6975f972 --- /dev/null +++ b/node_modules/jest-worker/package.json @@ -0,0 +1,42 @@ +{ + "name": "jest-worker", + "version": "29.7.0", + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest-worker" + }, + "license": "MIT", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "devDependencies": { + "@babel/core": "^7.11.6", + "@tsd/typescript": "^5.0.4", + "@types/merge-stream": "^1.1.2", + "@types/supports-color": "^8.1.0", + "get-stream": "^6.0.0", + "jest-leak-detector": "^29.7.0", + "tsd-lite": "^0.7.0", + "worker-farm": "^1.6.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/jest/LICENSE b/node_modules/jest/LICENSE new file mode 100644 index 00000000..b93be905 --- /dev/null +++ b/node_modules/jest/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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/jest/README.md b/node_modules/jest/README.md new file mode 100644 index 00000000..9c3d31ef --- /dev/null +++ b/node_modules/jest/README.md @@ -0,0 +1,11 @@ +# Jest + +🃏 Delightful JavaScript Testing + +- **👩🏻‍💻 Developer Ready**: Complete and ready to set-up JavaScript testing solution. Works out of the box for any React project. + +- **🏃🏽 Instant Feedback**: Failed tests run first. Fast interactive mode can switch between running all tests or only test files related to changed files. + +- **📸 Snapshot Testing**: Jest can [capture snapshots](https://jestjs.io/docs/snapshot-testing) of React trees or other serializable values to simplify UI testing. + +Read More: https://jestjs.io/ diff --git a/node_modules/jest/bin/jest.js b/node_modules/jest/bin/jest.js new file mode 100755 index 00000000..f3be8f9d --- /dev/null +++ b/node_modules/jest/bin/jest.js @@ -0,0 +1,13 @@ +#!/usr/bin/env node +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const importLocal = require('import-local'); + +if (!importLocal(__filename)) { + require('jest-cli/bin/jest'); +} diff --git a/node_modules/jest/build/index.d.ts b/node_modules/jest/build/index.d.ts new file mode 100644 index 00000000..05e21ab8 --- /dev/null +++ b/node_modules/jest/build/index.d.ts @@ -0,0 +1,26 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import type {Config as Config_2} from '@jest/types'; +import {createTestScheduler} from '@jest/core'; +import {getVersion} from '@jest/core'; +import {run} from 'jest-cli'; +import {runCLI} from '@jest/core'; +import {SearchSource} from '@jest/core'; + +export declare type Config = Config_2.InitialOptions; + +export {createTestScheduler}; + +export {getVersion}; + +export {run}; + +export {runCLI}; + +export {SearchSource}; + +export {}; diff --git a/node_modules/jest/build/index.js b/node_modules/jest/build/index.js new file mode 100644 index 00000000..7d529504 --- /dev/null +++ b/node_modules/jest/build/index.js @@ -0,0 +1,49 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +Object.defineProperty(exports, 'SearchSource', { + enumerable: true, + get: function () { + return _core().SearchSource; + } +}); +Object.defineProperty(exports, 'createTestScheduler', { + enumerable: true, + get: function () { + return _core().createTestScheduler; + } +}); +Object.defineProperty(exports, 'getVersion', { + enumerable: true, + get: function () { + return _core().getVersion; + } +}); +Object.defineProperty(exports, 'run', { + enumerable: true, + get: function () { + return _jestCli().run; + } +}); +Object.defineProperty(exports, 'runCLI', { + enumerable: true, + get: function () { + return _core().runCLI; + } +}); +function _core() { + const data = require('@jest/core'); + _core = function () { + return data; + }; + return data; +} +function _jestCli() { + const data = require('jest-cli'); + _jestCli = function () { + return data; + }; + return data; +} diff --git a/node_modules/jest/package.json b/node_modules/jest/package.json new file mode 100644 index 00000000..41e01c8d --- /dev/null +++ b/node_modules/jest/package.json @@ -0,0 +1,74 @@ +{ + "name": "jest", + "description": "Delightful JavaScript Testing.", + "version": "29.7.0", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "exports": { + ".": { + "types": "./build/index.d.ts", + "default": "./build/index.js" + }, + "./package.json": "./package.json", + "./bin/jest": "./bin/jest.js" + }, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "devDependencies": { + "@tsd/typescript": "^5.0.4", + "tsd-lite": "^0.7.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + }, + "bin": "./bin/jest.js", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "repository": { + "type": "git", + "url": "https://github.com/jestjs/jest.git", + "directory": "packages/jest" + }, + "homepage": "https://jestjs.io/", + "license": "MIT", + "keywords": [ + "ava", + "babel", + "coverage", + "easy", + "expect", + "facebook", + "immersive", + "instant", + "jasmine", + "jest", + "jsdom", + "mocha", + "mocking", + "painless", + "qunit", + "runner", + "sandboxed", + "snapshot", + "tap", + "tape", + "test", + "testing", + "typescript", + "watch" + ], + "publishConfig": { + "access": "public" + }, + "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630" +} diff --git a/node_modules/js-tokens/CHANGELOG.md b/node_modules/js-tokens/CHANGELOG.md new file mode 100644 index 00000000..755e6f6e --- /dev/null +++ b/node_modules/js-tokens/CHANGELOG.md @@ -0,0 +1,151 @@ +### Version 4.0.0 (2018-01-28) ### + +- Added: Support for ES2018. The only change needed was recognizing the `s` + regex flag. +- Changed: _All_ tokens returned by the `matchToToken` function now have a + `closed` property. It is set to `undefined` for the tokens where “closed” + doesn’t make sense. This means that all tokens objects have the same shape, + which might improve performance. + +These are the breaking changes: + +- `'/a/s'.match(jsTokens)` no longer returns `['/', 'a', '/', 's']`, but + `['/a/s']`. (There are of course other variations of this.) +- Code that rely on some token objects not having the `closed` property could + now behave differently. + + +### Version 3.0.2 (2017-06-28) ### + +- No code changes. Just updates to the readme. + + +### Version 3.0.1 (2017-01-30) ### + +- Fixed: ES2015 unicode escapes with more than 6 hex digits are now matched + correctly. + + +### Version 3.0.0 (2017-01-11) ### + +This release contains one breaking change, that should [improve performance in +V8][v8-perf]: + +> So how can you, as a JavaScript developer, ensure that your RegExps are fast? +> If you are not interested in hooking into RegExp internals, make sure that +> neither the RegExp instance, nor its prototype is modified in order to get the +> best performance: +> +> ```js +> var re = /./g; +> re.exec(''); // Fast path. +> re.new_property = 'slow'; +> ``` + +This module used to export a single regex, with `.matchToToken` bolted +on, just like in the above example. This release changes the exports of +the module to avoid this issue. + +Before: + +```js +import jsTokens from "js-tokens" +// or: +var jsTokens = require("js-tokens") +var matchToToken = jsTokens.matchToToken +``` + +After: + +```js +import jsTokens, {matchToToken} from "js-tokens" +// or: +var jsTokens = require("js-tokens").default +var matchToToken = require("js-tokens").matchToToken +``` + +[v8-perf]: http://v8project.blogspot.se/2017/01/speeding-up-v8-regular-expressions.html + + +### Version 2.0.0 (2016-06-19) ### + +- Added: Support for ES2016. In other words, support for the `**` exponentiation + operator. + +These are the breaking changes: + +- `'**'.match(jsTokens)` no longer returns `['*', '*']`, but `['**']`. +- `'**='.match(jsTokens)` no longer returns `['*', '*=']`, but `['**=']`. + + +### Version 1.0.3 (2016-03-27) ### + +- Improved: Made the regex ever so slightly smaller. +- Updated: The readme. + + +### Version 1.0.2 (2015-10-18) ### + +- Improved: Limited npm package contents for a smaller download. Thanks to + @zertosh! + + +### Version 1.0.1 (2015-06-20) ### + +- Fixed: Declared an undeclared variable. + + +### Version 1.0.0 (2015-02-26) ### + +- Changed: Merged the 'operator' and 'punctuation' types into 'punctuator'. That + type is now equivalent to the Punctuator token in the ECMAScript + specification. (Backwards-incompatible change.) +- Fixed: A `-` followed by a number is now correctly matched as a punctuator + followed by a number. It used to be matched as just a number, but there is no + such thing as negative number literals. (Possibly backwards-incompatible + change.) + + +### Version 0.4.1 (2015-02-21) ### + +- Added: Support for the regex `u` flag. + + +### Version 0.4.0 (2015-02-21) ### + +- Improved: `jsTokens.matchToToken` performance. +- Added: Support for octal and binary number literals. +- Added: Support for template strings. + + +### Version 0.3.1 (2015-01-06) ### + +- Fixed: Support for unicode spaces. They used to be allowed in names (which is + very confusing), and some unicode newlines were wrongly allowed in strings and + regexes. + + +### Version 0.3.0 (2014-12-19) ### + +- Changed: The `jsTokens.names` array has been replaced with the + `jsTokens.matchToToken` function. The capturing groups of `jsTokens` are no + longer part of the public API; instead use said function. See this [gist] for + an example. (Backwards-incompatible change.) +- Changed: The empty string is now considered an “invalid” token, instead an + “empty” token (its own group). (Backwards-incompatible change.) +- Removed: component support. (Backwards-incompatible change.) + +[gist]: https://gist.github.com/lydell/be49dbf80c382c473004 + + +### Version 0.2.0 (2014-06-19) ### + +- Changed: Match ES6 function arrows (`=>`) as an operator, instead of its own + category (“functionArrow”), for simplicity. (Backwards-incompatible change.) +- Added: ES6 splats (`...`) are now matched as an operator (instead of three + punctuations). (Backwards-incompatible change.) + + +### Version 0.1.0 (2014-03-08) ### + +- Initial release. diff --git a/node_modules/js-tokens/LICENSE b/node_modules/js-tokens/LICENSE new file mode 100644 index 00000000..54aef52f --- /dev/null +++ b/node_modules/js-tokens/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014, 2015, 2016, 2017, 2018 Simon Lydell + +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/js-tokens/README.md b/node_modules/js-tokens/README.md new file mode 100644 index 00000000..00cdf163 --- /dev/null +++ b/node_modules/js-tokens/README.md @@ -0,0 +1,240 @@ +Overview [![Build Status](https://travis-ci.org/lydell/js-tokens.svg?branch=master)](https://travis-ci.org/lydell/js-tokens) +======== + +A regex that tokenizes JavaScript. + +```js +var jsTokens = require("js-tokens").default + +var jsString = "var foo=opts.foo;\n..." + +jsString.match(jsTokens) +// ["var", " ", "foo", "=", "opts", ".", "foo", ";", "\n", ...] +``` + + +Installation +============ + +`npm install js-tokens` + +```js +import jsTokens from "js-tokens" +// or: +var jsTokens = require("js-tokens").default +``` + + +Usage +===== + +### `jsTokens` ### + +A regex with the `g` flag that matches JavaScript tokens. + +The regex _always_ matches, even invalid JavaScript and the empty string. + +The next match is always directly after the previous. + +### `var token = matchToToken(match)` ### + +```js +import {matchToToken} from "js-tokens" +// or: +var matchToToken = require("js-tokens").matchToToken +``` + +Takes a `match` returned by `jsTokens.exec(string)`, and returns a `{type: +String, value: String}` object. The following types are available: + +- string +- comment +- regex +- number +- name +- punctuator +- whitespace +- invalid + +Multi-line comments and strings also have a `closed` property indicating if the +token was closed or not (see below). + +Comments and strings both come in several flavors. To distinguish them, check if +the token starts with `//`, `/*`, `'`, `"` or `` ` ``. + +Names are ECMAScript IdentifierNames, that is, including both identifiers and +keywords. You may use [is-keyword-js] to tell them apart. + +Whitespace includes both line terminators and other whitespace. + +[is-keyword-js]: https://github.com/crissdev/is-keyword-js + + +ECMAScript support +================== + +The intention is to always support the latest ECMAScript version whose feature +set has been finalized. + +If adding support for a newer version requires changes, a new version with a +major verion bump will be released. + +Currently, ECMAScript 2018 is supported. + + +Invalid code handling +===================== + +Unterminated strings are still matched as strings. JavaScript strings cannot +contain (unescaped) newlines, so unterminated strings simply end at the end of +the line. Unterminated template strings can contain unescaped newlines, though, +so they go on to the end of input. + +Unterminated multi-line comments are also still matched as comments. They +simply go on to the end of the input. + +Unterminated regex literals are likely matched as division and whatever is +inside the regex. + +Invalid ASCII characters have their own capturing group. + +Invalid non-ASCII characters are treated as names, to simplify the matching of +names (except unicode spaces which are treated as whitespace). Note: See also +the [ES2018](#es2018) section. + +Regex literals may contain invalid regex syntax. They are still matched as +regex literals. They may also contain repeated regex flags, to keep the regex +simple. + +Strings may contain invalid escape sequences. + + +Limitations +=========== + +Tokenizing JavaScript using regexes—in fact, _one single regex_—won’t be +perfect. But that’s not the point either. + +You may compare jsTokens with [esprima] by using `esprima-compare.js`. +See `npm run esprima-compare`! + +[esprima]: http://esprima.org/ + +### Template string interpolation ### + +Template strings are matched as single tokens, from the starting `` ` `` to the +ending `` ` ``, including interpolations (whose tokens are not matched +individually). + +Matching template string interpolations requires recursive balancing of `{` and +`}`—something that JavaScript regexes cannot do. Only one level of nesting is +supported. + +### Division and regex literals collision ### + +Consider this example: + +```js +var g = 9.82 +var number = bar / 2/g + +var regex = / 2/g +``` + +A human can easily understand that in the `number` line we’re dealing with +division, and in the `regex` line we’re dealing with a regex literal. How come? +Because humans can look at the whole code to put the `/` characters in context. +A JavaScript regex cannot. It only sees forwards. (Well, ES2018 regexes can also +look backwards. See the [ES2018](#es2018) section). + +When the `jsTokens` regex scans throught the above, it will see the following +at the end of both the `number` and `regex` rows: + +```js +/ 2/g +``` + +It is then impossible to know if that is a regex literal, or part of an +expression dealing with division. + +Here is a similar case: + +```js +foo /= 2/g +foo(/= 2/g) +``` + +The first line divides the `foo` variable with `2/g`. The second line calls the +`foo` function with the regex literal `/= 2/g`. Again, since `jsTokens` only +sees forwards, it cannot tell the two cases apart. + +There are some cases where we _can_ tell division and regex literals apart, +though. + +First off, we have the simple cases where there’s only one slash in the line: + +```js +var foo = 2/g +foo /= 2 +``` + +Regex literals cannot contain newlines, so the above cases are correctly +identified as division. Things are only problematic when there are more than +one non-comment slash in a single line. + +Secondly, not every character is a valid regex flag. + +```js +var number = bar / 2/e +``` + +The above example is also correctly identified as division, because `e` is not a +valid regex flag. I initially wanted to future-proof by allowing `[a-zA-Z]*` +(any letter) as flags, but it is not worth it since it increases the amount of +ambigous cases. So only the standard `g`, `m`, `i`, `y` and `u` flags are +allowed. This means that the above example will be identified as division as +long as you don’t rename the `e` variable to some permutation of `gmiyus` 1 to 6 +characters long. + +Lastly, we can look _forward_ for information. + +- If the token following what looks like a regex literal is not valid after a + regex literal, but is valid in a division expression, then the regex literal + is treated as division instead. For example, a flagless regex cannot be + followed by a string, number or name, but all of those three can be the + denominator of a division. +- Generally, if what looks like a regex literal is followed by an operator, the + regex literal is treated as division instead. This is because regexes are + seldomly used with operators (such as `+`, `*`, `&&` and `==`), but division + could likely be part of such an expression. + +Please consult the regex source and the test cases for precise information on +when regex or division is matched (should you need to know). In short, you +could sum it up as: + +If the end of a statement looks like a regex literal (even if it isn’t), it +will be treated as one. Otherwise it should work as expected (if you write sane +code). + +### ES2018 ### + +ES2018 added some nice regex improvements to the language. + +- [Unicode property escapes] should allow telling names and invalid non-ASCII + characters apart without blowing up the regex size. +- [Lookbehind assertions] should allow matching telling division and regex + literals apart in more cases. +- [Named capture groups] might simplify some things. + +These things would be nice to do, but are not critical. They probably have to +wait until the oldest maintained Node.js LTS release supports those features. + +[Unicode property escapes]: http://2ality.com/2017/07/regexp-unicode-property-escapes.html +[Lookbehind assertions]: http://2ality.com/2017/05/regexp-lookbehind-assertions.html +[Named capture groups]: http://2ality.com/2017/05/regexp-named-capture-groups.html + + +License +======= + +[MIT](LICENSE). diff --git a/node_modules/js-tokens/index.js b/node_modules/js-tokens/index.js new file mode 100644 index 00000000..b23a4a0e --- /dev/null +++ b/node_modules/js-tokens/index.js @@ -0,0 +1,23 @@ +// Copyright 2014, 2015, 2016, 2017, 2018 Simon Lydell +// License: MIT. (See LICENSE.) + +Object.defineProperty(exports, "__esModule", { + value: true +}) + +// This regex comes from regex.coffee, and is inserted here by generate-index.js +// (run `npm run build`). +exports.default = /((['"])(?:(?!\2|\\).|\\(?:\r\n|[\s\S]))*(\2)?|`(?:[^`\\$]|\\[\s\S]|\$(?!\{)|\$\{(?:[^{}]|\{[^}]*\}?)*\}?)*(`)?)|(\/\/.*)|(\/\*(?:[^*]|\*(?!\/))*(\*\/)?)|(\/(?!\*)(?:\[(?:(?![\]\\]).|\\.)*\]|(?![\/\]\\]).|\\.)+\/(?:(?!\s*(?:\b|[\u0080-\uFFFF$\\'"~({]|[+\-!](?!=)|\.?\d))|[gmiyus]{1,6}\b(?![\u0080-\uFFFF$\\]|\s*(?:[+\-*%&|^<>!=?({]|\/(?![\/*])))))|(0[xX][\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?)|((?!\d)(?:(?!\s)[$\w\u0080-\uFFFF]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+)|(--|\+\+|&&|\|\||=>|\.{3}|(?:[+\-\/%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\](){}])|(\s+)|(^$|[\s\S])/g + +exports.matchToToken = function(match) { + var token = {type: "invalid", value: match[0], closed: undefined} + if (match[ 1]) token.type = "string" , token.closed = !!(match[3] || match[4]) + else if (match[ 5]) token.type = "comment" + else if (match[ 6]) token.type = "comment", token.closed = !!match[7] + else if (match[ 8]) token.type = "regex" + else if (match[ 9]) token.type = "number" + else if (match[10]) token.type = "name" + else if (match[11]) token.type = "punctuator" + else if (match[12]) token.type = "whitespace" + return token +} diff --git a/node_modules/js-tokens/package.json b/node_modules/js-tokens/package.json new file mode 100644 index 00000000..66752fab --- /dev/null +++ b/node_modules/js-tokens/package.json @@ -0,0 +1,30 @@ +{ + "name": "js-tokens", + "version": "4.0.0", + "author": "Simon Lydell", + "license": "MIT", + "description": "A regex that tokenizes JavaScript.", + "keywords": [ + "JavaScript", + "js", + "token", + "tokenize", + "regex" + ], + "files": [ + "index.js" + ], + "repository": "lydell/js-tokens", + "scripts": { + "test": "mocha --ui tdd", + "esprima-compare": "node esprima-compare ./index.js everything.js/es5.js", + "build": "node generate-index.js", + "dev": "npm run build && npm test" + }, + "devDependencies": { + "coffeescript": "2.1.1", + "esprima": "4.0.0", + "everything.js": "1.0.3", + "mocha": "5.0.0" + } +} diff --git a/node_modules/js-yaml/CHANGELOG.md b/node_modules/js-yaml/CHANGELOG.md new file mode 100644 index 00000000..b4baa4ea --- /dev/null +++ b/node_modules/js-yaml/CHANGELOG.md @@ -0,0 +1,557 @@ +# 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). + + +## [3.14.1] - 2020-12-07 +### Security +- Fix possible code execution in (already unsafe) `.load()` (in &anchor). + + +## [3.14.0] - 2020-05-22 +### Changed +- Support `safe/loadAll(input, options)` variant of call. +- CI: drop outdated nodejs versions. +- Dev deps bump. + +### Fixed +- Quote `=` in plain scalars #519. +- Check the node type for `!` tag in case user manually specifies it. +- Verify that there are no null-bytes in input. +- Fix wrong quote position when writing condensed flow, #526. + + +## [3.13.1] - 2019-04-05 +### Security +- Fix possible code execution in (already unsafe) `.load()`, #480. + + +## [3.13.0] - 2019-03-20 +### Security +- Security fix: `safeLoad()` can hang when arrays with nested refs + used as key. Now throws exception for nested arrays. #475. + + +## [3.12.2] - 2019-02-26 +### Fixed +- Fix `noArrayIndent` option for root level, #468. + + +## [3.12.1] - 2019-01-05 +### Added +- Added `noArrayIndent` option, #432. + + +## [3.12.0] - 2018-06-02 +### Changed +- Support arrow functions without a block statement, #421. + + +## [3.11.0] - 2018-03-05 +### Added +- Add arrow functions suport for `!!js/function`. + +### Fixed +- Fix dump in bin/octal/hex formats for negative integers, #399. + + +## [3.10.0] - 2017-09-10 +### Fixed +- Fix `condenseFlow` output (quote keys for sure, instead of spaces), #371, #370. +- Dump astrals as codepoints instead of surrogate pair, #368. + + +## [3.9.1] - 2017-07-08 +### Fixed +- Ensure stack is present for custom errors in node 7.+, #351. + + +## [3.9.0] - 2017-07-08 +### Added +- Add `condenseFlow` option (to create pretty URL query params), #346. + +### Fixed +- Support array return from safeLoadAll/loadAll, #350. + + +## [3.8.4] - 2017-05-08 +### Fixed +- Dumper: prevent space after dash for arrays that wrap, #343. + + +## [3.8.3] - 2017-04-05 +### Fixed +- Should not allow numbers to begin and end with underscore, #335. + + +## [3.8.2] - 2017-03-02 +### Fixed +- Fix `!!float 123` (integers) parse, #333. +- Don't allow leading zeros in floats (except 0, 0.xxx). +- Allow positive exponent without sign in floats. + + +## [3.8.1] - 2017-02-07 +### Changed +- Maintenance: update browserified build. + + +## [3.8.0] - 2017-02-07 +### Fixed +- Fix reported position for `duplicated mapping key` errors. + Now points to block start instead of block end. + (#243, thanks to @shockey). + + +## [3.7.0] - 2016-11-12 +### Added +- Support polymorphism for tags (#300, thanks to @monken). + +### Fixed +- Fix parsing of quotes followed by newlines (#304, thanks to @dplepage). + + +## [3.6.1] - 2016-05-11 +### Fixed +- Fix output cut on a pipe, #286. + + +## [3.6.0] - 2016-04-16 +### Fixed +- Dumper rewrite, fix multiple bugs with trailing `\n`. + Big thanks to @aepsilon! +- Loader: fix leading/trailing newlines in block scalars, @aepsilon. + + +## [3.5.5] - 2016-03-17 +### Fixed +- Date parse fix: don't allow dates with on digit in month and day, #268. + + +## [3.5.4] - 2016-03-09 +### Added +- `noCompatMode` for dumper, to disable quoting YAML 1.1 values. + + +## [3.5.3] - 2016-02-11 +### Changed +- Maintenance release. + + +## [3.5.2] - 2016-01-11 +### Changed +- Maintenance: missed comma in bower config. + + +## [3.5.1] - 2016-01-11 +### Changed +- Removed `inherit` dependency, #239. +- Better browserify workaround for esprima load. +- Demo rewrite. + + +## [3.5.0] - 2016-01-10 +### Fixed +- Dumper. Fold strings only, #217. +- Dumper. `norefs` option, to clone linked objects, #229. +- Loader. Throw a warning for duplicate keys, #166. +- Improved browserify support (mark `esprima` & `Buffer` excluded). + + +## [3.4.6] - 2015-11-26 +### Changed +- Use standalone `inherit` to keep browserified files clear. + + +## [3.4.5] - 2015-11-23 +### Added +- Added `lineWidth` option to dumper. + + +## [3.4.4] - 2015-11-21 +### Fixed +- Fixed floats dump (missed dot for scientific format), #220. +- Allow non-printable characters inside quoted scalars, #192. + + +## [3.4.3] - 2015-10-10 +### Changed +- Maintenance release - deps bump (esprima, argparse). + + +## [3.4.2] - 2015-09-09 +### Fixed +- Fixed serialization of duplicated entries in sequences, #205. + Thanks to @vogelsgesang. + + +## [3.4.1] - 2015-09-05 +### Fixed +- Fixed stacktrace handling in generated errors, for browsers (FF/IE). + + +## [3.4.0] - 2015-08-23 +### Changed +- Don't throw on warnings anymore. Use `onWarning` option to catch. +- Throw error on unknown tags (was warning before). +- Reworked internals of error class. + +### Fixed +- Fixed multiline keys dump, #197. Thanks to @tcr. +- Fixed heading line breaks in some scalars (regression). + + +## [3.3.1] - 2015-05-13 +### Added +- Added `.sortKeys` dumper option, thanks to @rjmunro. + +### Fixed +- Fixed astral characters support, #191. + + +## [3.3.0] - 2015-04-26 +### Changed +- Significantly improved long strings formatting in dumper, thanks to @isaacs. +- Strip BOM if exists. + + +## [3.2.7] - 2015-02-19 +### Changed +- Maintenance release. +- Updated dependencies. +- HISTORY.md -> CHANGELOG.md + + +## [3.2.6] - 2015-02-07 +### Fixed +- Fixed encoding of UTF-16 surrogate pairs. (e.g. "\U0001F431" CAT FACE). +- Fixed demo dates dump (#113, thanks to @Hypercubed). + + +## [3.2.5] - 2014-12-28 +### Fixed +- Fixed resolving of all built-in types on empty nodes. +- Fixed invalid warning on empty lines within quoted scalars and flow collections. +- Fixed bug: Tag on an empty node didn't resolve in some cases. + + +## [3.2.4] - 2014-12-19 +### Fixed +- Fixed resolving of !!null tag on an empty node. + + +## [3.2.3] - 2014-11-08 +### Fixed +- Implemented dumping of objects with circular and cross references. +- Partially fixed aliasing of constructed objects. (see issue #141 for details) + + +## [3.2.2] - 2014-09-07 +### Fixed +- Fixed infinite loop on unindented block scalars. +- Rewritten base64 encode/decode in binary type, to keep code licence clear. + + +## [3.2.1] - 2014-08-24 +### Fixed +- Nothig new. Just fix npm publish error. + + +## [3.2.0] - 2014-08-24 +### Added +- Added input piping support to CLI. + +### Fixed +- Fixed typo, that could cause hand on initial indent (#139). + + +## [3.1.0] - 2014-07-07 +### Changed +- 1.5x-2x speed boost. +- Removed deprecated `require('xxx.yml')` support. +- Significant code cleanup and refactoring. +- Internal API changed. If you used custom types - see updated examples. + Others are not affected. +- Even if the input string has no trailing line break character, + it will be parsed as if it has one. +- Added benchmark scripts. +- Moved bower files to /dist folder +- Bugfixes. + + +## [3.0.2] - 2014-02-27 +### Fixed +- Fixed bug: "constructor" string parsed as `null`. + + +## [3.0.1] - 2013-12-22 +### Fixed +- Fixed parsing of literal scalars. (issue #108) +- Prevented adding unnecessary spaces in object dumps. (issue #68) +- Fixed dumping of objects with very long (> 1024 in length) keys. + + +## [3.0.0] - 2013-12-16 +### Changed +- Refactored code. Changed API for custom types. +- Removed output colors in CLI, dump json by default. +- Removed big dependencies from browser version (esprima, buffer). Load `esprima` manually, if `!!js/function` needed. `!!bin` now returns Array in browser +- AMD support. +- Don't quote dumped strings because of `-` & `?` (if not first char). +- __Deprecated__ loading yaml files via `require()`, as not recommended + behaviour for node. + + +## [2.1.3] - 2013-10-16 +### Fixed +- Fix wrong loading of empty block scalars. + + +## [2.1.2] - 2013-10-07 +### Fixed +- Fix unwanted line breaks in folded scalars. + + +## [2.1.1] - 2013-10-02 +### Fixed +- Dumper now respects deprecated booleans syntax from YAML 1.0/1.1 +- Fixed reader bug in JSON-like sequences/mappings. + + +## [2.1.0] - 2013-06-05 +### Added +- Add standard YAML schemas: Failsafe (`FAILSAFE_SCHEMA`), + JSON (`JSON_SCHEMA`) and Core (`CORE_SCHEMA`). +- Add `skipInvalid` dumper option. + +### Changed +- Rename `DEFAULT_SCHEMA` to `DEFAULT_FULL_SCHEMA` + and `SAFE_SCHEMA` to `DEFAULT_SAFE_SCHEMA`. +- Use `safeLoad` for `require` extension. + +### Fixed +- Bug fix: export `NIL` constant from the public interface. + + +## [2.0.5] - 2013-04-26 +### Security +- Close security issue in !!js/function constructor. + Big thanks to @nealpoole for security audit. + + +## [2.0.4] - 2013-04-08 +### Changed +- Updated .npmignore to reduce package size + + +## [2.0.3] - 2013-02-26 +### Fixed +- Fixed dumping of empty arrays ans objects. ([] and {} instead of null) + + +## [2.0.2] - 2013-02-15 +### Fixed +- Fixed input validation: tabs are printable characters. + + +## [2.0.1] - 2013-02-09 +### Fixed +- Fixed error, when options not passed to function cass + + +## [2.0.0] - 2013-02-09 +### Changed +- Full rewrite. New architecture. Fast one-stage parsing. +- Changed custom types API. +- Added YAML dumper. + + +## [1.0.3] - 2012-11-05 +### Fixed +- Fixed utf-8 files loading. + + +## [1.0.2] - 2012-08-02 +### Fixed +- Pull out hand-written shims. Use ES5-Shims for old browsers support. See #44. +- Fix timstamps incorectly parsed in local time when no time part specified. + + +## [1.0.1] - 2012-07-07 +### Fixed +- Fixes `TypeError: 'undefined' is not an object` under Safari. Thanks Phuong. +- Fix timestamps incorrectly parsed in local time. Thanks @caolan. Closes #46. + + +## [1.0.0] - 2012-07-01 +### Changed +- `y`, `yes`, `n`, `no`, `on`, `off` are not converted to Booleans anymore. + Fixes #42. +- `require(filename)` now returns a single document and throws an Error if + file contains more than one document. +- CLI was merged back from js-yaml.bin + + +## [0.3.7] - 2012-02-28 +### Fixed +- Fix export of `addConstructor()`. Closes #39. + + +## [0.3.6] - 2012-02-22 +### Changed +- Removed AMD parts - too buggy to use. Need help to rewrite from scratch + +### Fixed +- Removed YUI compressor warning (renamed `double` variable). Closes #40. + + +## [0.3.5] - 2012-01-10 +### Fixed +- Workagound for .npmignore fuckup under windows. Thanks to airportyh. + + +## [0.3.4] - 2011-12-24 +### Fixed +- Fixes str[] for oldIEs support. +- Adds better has change support for browserified demo. +- improves compact output of Error. Closes #33. + + +## [0.3.3] - 2011-12-20 +### Added +- adds `compact` stringification of Errors. + +### Changed +- jsyaml executable moved to separate module. + + +## [0.3.2] - 2011-12-16 +### Added +- Added jsyaml executable. +- Added !!js/function support. Closes #12. + +### Fixed +- Fixes ug with block style scalars. Closes #26. +- All sources are passing JSLint now. +- Fixes bug in Safari. Closes #28. +- Fixes bug in Opers. Closes #29. +- Improves browser support. Closes #20. + + +## [0.3.1] - 2011-11-18 +### Added +- Added AMD support for browserified version. +- Added permalinks for online demo YAML snippets. Now we have YPaste service, lol. +- Added !!js/regexp and !!js/undefined types. Partially solves #12. + +### Changed +- Wrapped browserified js-yaml into closure. + +### Fixed +- Fixed the resolvement of non-specific tags. Closes #17. +- Fixed !!set mapping. +- Fixed month parse in dates. Closes #19. + + +## [0.3.0] - 2011-11-09 +### Added +- Added browserified version. Closes #13. +- Added live demo of browserified version. +- Ported some of the PyYAML tests. See #14. + +### Fixed +- Removed JS.Class dependency. Closes #3. +- Fixed timestamp bug when fraction was given. + + +## [0.2.2] - 2011-11-06 +### Fixed +- Fixed crash on docs without ---. Closes #8. +- Fixed multiline string parse +- Fixed tests/comments for using array as key + + +## [0.2.1] - 2011-11-02 +### Fixed +- Fixed short file read (<4k). Closes #9. + + +## [0.2.0] - 2011-11-02 +### Changed +- First public release + + +[3.14.1]: https://github.com/nodeca/js-yaml/compare/3.14.0...3.14.1 +[3.14.0]: https://github.com/nodeca/js-yaml/compare/3.13.1...3.14.0 +[3.13.1]: https://github.com/nodeca/js-yaml/compare/3.13.0...3.13.1 +[3.13.0]: https://github.com/nodeca/js-yaml/compare/3.12.2...3.13.0 +[3.12.2]: https://github.com/nodeca/js-yaml/compare/3.12.1...3.12.2 +[3.12.1]: https://github.com/nodeca/js-yaml/compare/3.12.0...3.12.1 +[3.12.0]: https://github.com/nodeca/js-yaml/compare/3.11.0...3.12.0 +[3.11.0]: https://github.com/nodeca/js-yaml/compare/3.10.0...3.11.0 +[3.10.0]: https://github.com/nodeca/js-yaml/compare/3.9.1...3.10.0 +[3.9.1]: https://github.com/nodeca/js-yaml/compare/3.9.0...3.9.1 +[3.9.0]: https://github.com/nodeca/js-yaml/compare/3.8.4...3.9.0 +[3.8.4]: https://github.com/nodeca/js-yaml/compare/3.8.3...3.8.4 +[3.8.3]: https://github.com/nodeca/js-yaml/compare/3.8.2...3.8.3 +[3.8.2]: https://github.com/nodeca/js-yaml/compare/3.8.1...3.8.2 +[3.8.1]: https://github.com/nodeca/js-yaml/compare/3.8.0...3.8.1 +[3.8.0]: https://github.com/nodeca/js-yaml/compare/3.7.0...3.8.0 +[3.7.0]: https://github.com/nodeca/js-yaml/compare/3.6.1...3.7.0 +[3.6.1]: https://github.com/nodeca/js-yaml/compare/3.6.0...3.6.1 +[3.6.0]: https://github.com/nodeca/js-yaml/compare/3.5.5...3.6.0 +[3.5.5]: https://github.com/nodeca/js-yaml/compare/3.5.4...3.5.5 +[3.5.4]: https://github.com/nodeca/js-yaml/compare/3.5.3...3.5.4 +[3.5.3]: https://github.com/nodeca/js-yaml/compare/3.5.2...3.5.3 +[3.5.2]: https://github.com/nodeca/js-yaml/compare/3.5.1...3.5.2 +[3.5.1]: https://github.com/nodeca/js-yaml/compare/3.5.0...3.5.1 +[3.5.0]: https://github.com/nodeca/js-yaml/compare/3.4.6...3.5.0 +[3.4.6]: https://github.com/nodeca/js-yaml/compare/3.4.5...3.4.6 +[3.4.5]: https://github.com/nodeca/js-yaml/compare/3.4.4...3.4.5 +[3.4.4]: https://github.com/nodeca/js-yaml/compare/3.4.3...3.4.4 +[3.4.3]: https://github.com/nodeca/js-yaml/compare/3.4.2...3.4.3 +[3.4.2]: https://github.com/nodeca/js-yaml/compare/3.4.1...3.4.2 +[3.4.1]: https://github.com/nodeca/js-yaml/compare/3.4.0...3.4.1 +[3.4.0]: https://github.com/nodeca/js-yaml/compare/3.3.1...3.4.0 +[3.3.1]: https://github.com/nodeca/js-yaml/compare/3.3.0...3.3.1 +[3.3.0]: https://github.com/nodeca/js-yaml/compare/3.2.7...3.3.0 +[3.2.7]: https://github.com/nodeca/js-yaml/compare/3.2.6...3.2.7 +[3.2.6]: https://github.com/nodeca/js-yaml/compare/3.2.5...3.2.6 +[3.2.5]: https://github.com/nodeca/js-yaml/compare/3.2.4...3.2.5 +[3.2.4]: https://github.com/nodeca/js-yaml/compare/3.2.3...3.2.4 +[3.2.3]: https://github.com/nodeca/js-yaml/compare/3.2.2...3.2.3 +[3.2.2]: https://github.com/nodeca/js-yaml/compare/3.2.1...3.2.2 +[3.2.1]: https://github.com/nodeca/js-yaml/compare/3.2.0...3.2.1 +[3.2.0]: https://github.com/nodeca/js-yaml/compare/3.1.0...3.2.0 +[3.1.0]: https://github.com/nodeca/js-yaml/compare/3.0.2...3.1.0 +[3.0.2]: https://github.com/nodeca/js-yaml/compare/3.0.1...3.0.2 +[3.0.1]: https://github.com/nodeca/js-yaml/compare/3.0.0...3.0.1 +[3.0.0]: https://github.com/nodeca/js-yaml/compare/2.1.3...3.0.0 +[2.1.3]: https://github.com/nodeca/js-yaml/compare/2.1.2...2.1.3 +[2.1.2]: https://github.com/nodeca/js-yaml/compare/2.1.1...2.1.2 +[2.1.1]: https://github.com/nodeca/js-yaml/compare/2.1.0...2.1.1 +[2.1.0]: https://github.com/nodeca/js-yaml/compare/2.0.5...2.1.0 +[2.0.5]: https://github.com/nodeca/js-yaml/compare/2.0.4...2.0.5 +[2.0.4]: https://github.com/nodeca/js-yaml/compare/2.0.3...2.0.4 +[2.0.3]: https://github.com/nodeca/js-yaml/compare/2.0.2...2.0.3 +[2.0.2]: https://github.com/nodeca/js-yaml/compare/2.0.1...2.0.2 +[2.0.1]: https://github.com/nodeca/js-yaml/compare/2.0.0...2.0.1 +[2.0.0]: https://github.com/nodeca/js-yaml/compare/1.0.3...2.0.0 +[1.0.3]: https://github.com/nodeca/js-yaml/compare/1.0.2...1.0.3 +[1.0.2]: https://github.com/nodeca/js-yaml/compare/1.0.1...1.0.2 +[1.0.1]: https://github.com/nodeca/js-yaml/compare/1.0.0...1.0.1 +[1.0.0]: https://github.com/nodeca/js-yaml/compare/0.3.7...1.0.0 +[0.3.7]: https://github.com/nodeca/js-yaml/compare/0.3.6...0.3.7 +[0.3.6]: https://github.com/nodeca/js-yaml/compare/0.3.5...0.3.6 +[0.3.5]: https://github.com/nodeca/js-yaml/compare/0.3.4...0.3.5 +[0.3.4]: https://github.com/nodeca/js-yaml/compare/0.3.3...0.3.4 +[0.3.3]: https://github.com/nodeca/js-yaml/compare/0.3.2...0.3.3 +[0.3.2]: https://github.com/nodeca/js-yaml/compare/0.3.1...0.3.2 +[0.3.1]: https://github.com/nodeca/js-yaml/compare/0.3.0...0.3.1 +[0.3.0]: https://github.com/nodeca/js-yaml/compare/0.2.2...0.3.0 +[0.2.2]: https://github.com/nodeca/js-yaml/compare/0.2.1...0.2.2 +[0.2.1]: https://github.com/nodeca/js-yaml/compare/0.2.0...0.2.1 +[0.2.0]: https://github.com/nodeca/js-yaml/releases/tag/0.2.0 diff --git a/node_modules/js-yaml/LICENSE b/node_modules/js-yaml/LICENSE new file mode 100644 index 00000000..09d3a29e --- /dev/null +++ b/node_modules/js-yaml/LICENSE @@ -0,0 +1,21 @@ +(The MIT License) + +Copyright (C) 2011-2015 by Vitaly Puzrin + +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/js-yaml/README.md b/node_modules/js-yaml/README.md new file mode 100644 index 00000000..246e5635 --- /dev/null +++ b/node_modules/js-yaml/README.md @@ -0,0 +1,299 @@ +JS-YAML - YAML 1.2 parser / writer for JavaScript +================================================= + +[![Build Status](https://travis-ci.org/nodeca/js-yaml.svg?branch=master)](https://travis-ci.org/nodeca/js-yaml) +[![NPM version](https://img.shields.io/npm/v/js-yaml.svg)](https://www.npmjs.org/package/js-yaml) + +__[Online Demo](http://nodeca.github.com/js-yaml/)__ + + +This is an implementation of [YAML](http://yaml.org/), a human-friendly data +serialization language. Started as [PyYAML](http://pyyaml.org/) port, it was +completely rewritten from scratch. Now it's very fast, and supports 1.2 spec. + + +Installation +------------ + +### YAML module for node.js + +``` +npm install js-yaml +``` + + +### CLI executable + +If you want to inspect your YAML files from CLI, install js-yaml globally: + +``` +npm install -g js-yaml +``` + +#### Usage + +``` +usage: js-yaml [-h] [-v] [-c] [-t] file + +Positional arguments: + file File with YAML document(s) + +Optional arguments: + -h, --help Show this help message and exit. + -v, --version Show program's version number and exit. + -c, --compact Display errors in compact mode + -t, --trace Show stack trace on error +``` + + +### Bundled YAML library for browsers + +``` html + + + + +``` + +Browser support was done mostly for the online demo. If you find any errors - feel +free to send pull requests with fixes. Also note, that IE and other old browsers +needs [es5-shims](https://github.com/kriskowal/es5-shim) to operate. + +Notes: + +1. We have no resources to support browserified version. Don't expect it to be + well tested. Don't expect fast fixes if something goes wrong there. +2. `!!js/function` in browser bundle will not work by default. If you really need + it - load `esprima` parser first (via amd or directly). +3. `!!bin` in browser will return `Array`, because browsers do not support + node.js `Buffer` and adding Buffer shims is completely useless on practice. + + +API +--- + +Here we cover the most 'useful' methods. If you need advanced details (creating +your own tags), see [wiki](https://github.com/nodeca/js-yaml/wiki) and +[examples](https://github.com/nodeca/js-yaml/tree/master/examples) for more +info. + +``` javascript +const yaml = require('js-yaml'); +const fs = require('fs'); + +// Get document, or throw exception on error +try { + const doc = yaml.safeLoad(fs.readFileSync('/home/ixti/example.yml', 'utf8')); + console.log(doc); +} catch (e) { + console.log(e); +} +``` + + +### safeLoad (string [ , options ]) + +**Recommended loading way.** Parses `string` as single YAML document. Returns either a +plain object, a string or `undefined`, or throws `YAMLException` on error. By default, does +not support regexps, functions and undefined. This method is safe for untrusted data. + +options: + +- `filename` _(default: null)_ - string to be used as a file path in + error/warning messages. +- `onWarning` _(default: null)_ - function to call on warning messages. + Loader will call this function with an instance of `YAMLException` for each warning. +- `schema` _(default: `DEFAULT_SAFE_SCHEMA`)_ - specifies a schema to use. + - `FAILSAFE_SCHEMA` - only strings, arrays and plain objects: + http://www.yaml.org/spec/1.2/spec.html#id2802346 + - `JSON_SCHEMA` - all JSON-supported types: + http://www.yaml.org/spec/1.2/spec.html#id2803231 + - `CORE_SCHEMA` - same as `JSON_SCHEMA`: + http://www.yaml.org/spec/1.2/spec.html#id2804923 + - `DEFAULT_SAFE_SCHEMA` - all supported YAML types, without unsafe ones + (`!!js/undefined`, `!!js/regexp` and `!!js/function`): + http://yaml.org/type/ + - `DEFAULT_FULL_SCHEMA` - all supported YAML types. +- `json` _(default: false)_ - compatibility with JSON.parse behaviour. If true, then duplicate keys in a mapping will override values rather than throwing an error. + +NOTE: This function **does not** understand multi-document sources, it throws +exception on those. + +NOTE: JS-YAML **does not** support schema-specific tag resolution restrictions. +So, the JSON schema is not as strictly defined in the YAML specification. +It allows numbers in any notation, use `Null` and `NULL` as `null`, etc. +The core schema also has no such restrictions. It allows binary notation for integers. + + +### load (string [ , options ]) + +**Use with care with untrusted sources**. The same as `safeLoad()` but uses +`DEFAULT_FULL_SCHEMA` by default - adds some JavaScript-specific types: +`!!js/function`, `!!js/regexp` and `!!js/undefined`. For untrusted sources, you +must additionally validate object structure to avoid injections: + +``` javascript +const untrusted_code = '"toString": ! "function (){very_evil_thing();}"'; + +// I'm just converting that string, what could possibly go wrong? +require('js-yaml').load(untrusted_code) + '' +``` + + +### safeLoadAll (string [, iterator] [, options ]) + +Same as `safeLoad()`, but understands multi-document sources. Applies +`iterator` to each document if specified, or returns array of documents. + +``` javascript +const yaml = require('js-yaml'); + +yaml.safeLoadAll(data, function (doc) { + console.log(doc); +}); +``` + + +### loadAll (string [, iterator] [ , options ]) + +Same as `safeLoadAll()` but uses `DEFAULT_FULL_SCHEMA` by default. + + +### safeDump (object [ , options ]) + +Serializes `object` as a YAML document. Uses `DEFAULT_SAFE_SCHEMA`, so it will +throw an exception if you try to dump regexps or functions. However, you can +disable exceptions by setting the `skipInvalid` option to `true`. + +options: + +- `indent` _(default: 2)_ - indentation width to use (in spaces). +- `noArrayIndent` _(default: false)_ - when true, will not add an indentation level to array elements +- `skipInvalid` _(default: false)_ - do not throw on invalid types (like function + in the safe schema) and skip pairs and single values with such types. +- `flowLevel` (default: -1) - specifies level of nesting, when to switch from + block to flow style for collections. -1 means block style everwhere +- `styles` - "tag" => "style" map. Each tag may have own set of styles. +- `schema` _(default: `DEFAULT_SAFE_SCHEMA`)_ specifies a schema to use. +- `sortKeys` _(default: `false`)_ - if `true`, sort keys when dumping YAML. If a + function, use the function to sort the keys. +- `lineWidth` _(default: `80`)_ - set max line width. +- `noRefs` _(default: `false`)_ - if `true`, don't convert duplicate objects into references +- `noCompatMode` _(default: `false`)_ - if `true` don't try to be compatible with older + yaml versions. Currently: don't quote "yes", "no" and so on, as required for YAML 1.1 +- `condenseFlow` _(default: `false`)_ - if `true` flow sequences will be condensed, omitting the space between `a, b`. Eg. `'[a,b]'`, and omitting the space between `key: value` and quoting the key. Eg. `'{"a":b}'` Can be useful when using yaml for pretty URL query params as spaces are %-encoded. + +The following table show availlable styles (e.g. "canonical", +"binary"...) available for each tag (.e.g. !!null, !!int ...). Yaml +output is shown on the right side after `=>` (default setting) or `->`: + +``` none +!!null + "canonical" -> "~" + "lowercase" => "null" + "uppercase" -> "NULL" + "camelcase" -> "Null" + +!!int + "binary" -> "0b1", "0b101010", "0b1110001111010" + "octal" -> "01", "052", "016172" + "decimal" => "1", "42", "7290" + "hexadecimal" -> "0x1", "0x2A", "0x1C7A" + +!!bool + "lowercase" => "true", "false" + "uppercase" -> "TRUE", "FALSE" + "camelcase" -> "True", "False" + +!!float + "lowercase" => ".nan", '.inf' + "uppercase" -> ".NAN", '.INF' + "camelcase" -> ".NaN", '.Inf' +``` + +Example: + +``` javascript +safeDump (object, { + 'styles': { + '!!null': 'canonical' // dump null as ~ + }, + 'sortKeys': true // sort object keys +}); +``` + +### dump (object [ , options ]) + +Same as `safeDump()` but without limits (uses `DEFAULT_FULL_SCHEMA` by default). + + +Supported YAML types +-------------------- + +The list of standard YAML tags and corresponding JavaScipt types. See also +[YAML tag discussion](http://pyyaml.org/wiki/YAMLTagDiscussion) and +[YAML types repository](http://yaml.org/type/). + +``` +!!null '' # null +!!bool 'yes' # bool +!!int '3...' # number +!!float '3.14...' # number +!!binary '...base64...' # buffer +!!timestamp 'YYYY-...' # date +!!omap [ ... ] # array of key-value pairs +!!pairs [ ... ] # array or array pairs +!!set { ... } # array of objects with given keys and null values +!!str '...' # string +!!seq [ ... ] # array +!!map { ... } # object +``` + +**JavaScript-specific tags** + +``` +!!js/regexp /pattern/gim # RegExp +!!js/undefined '' # Undefined +!!js/function 'function () {...}' # Function +``` + +Caveats +------- + +Note, that you use arrays or objects as key in JS-YAML. JS does not allow objects +or arrays as keys, and stringifies (by calling `toString()` method) them at the +moment of adding them. + +``` yaml +--- +? [ foo, bar ] +: - baz +? { foo: bar } +: - baz + - baz +``` + +``` javascript +{ "foo,bar": ["baz"], "[object Object]": ["baz", "baz"] } +``` + +Also, reading of properties on implicit block mapping keys is not supported yet. +So, the following YAML document cannot be loaded. + +``` yaml +&anchor foo: + foo: bar + *anchor: duplicate key + baz: bat + *anchor: duplicate key +``` + + +js-yaml for enterprise +---------------------- + +Available as part of the Tidelift Subscription + +The maintainers of js-yaml and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-js-yaml?utm_source=npm-js-yaml&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/js-yaml/bin/js-yaml.js b/node_modules/js-yaml/bin/js-yaml.js new file mode 100755 index 00000000..e79186be --- /dev/null +++ b/node_modules/js-yaml/bin/js-yaml.js @@ -0,0 +1,132 @@ +#!/usr/bin/env node + + +'use strict'; + +/*eslint-disable no-console*/ + + +// stdlib +var fs = require('fs'); + + +// 3rd-party +var argparse = require('argparse'); + + +// internal +var yaml = require('..'); + + +//////////////////////////////////////////////////////////////////////////////// + + +var cli = new argparse.ArgumentParser({ + prog: 'js-yaml', + version: require('../package.json').version, + addHelp: true +}); + + +cli.addArgument([ '-c', '--compact' ], { + help: 'Display errors in compact mode', + action: 'storeTrue' +}); + + +// deprecated (not needed after we removed output colors) +// option suppressed, but not completely removed for compatibility +cli.addArgument([ '-j', '--to-json' ], { + help: argparse.Const.SUPPRESS, + dest: 'json', + action: 'storeTrue' +}); + + +cli.addArgument([ '-t', '--trace' ], { + help: 'Show stack trace on error', + action: 'storeTrue' +}); + +cli.addArgument([ 'file' ], { + help: 'File to read, utf-8 encoded without BOM', + nargs: '?', + defaultValue: '-' +}); + + +//////////////////////////////////////////////////////////////////////////////// + + +var options = cli.parseArgs(); + + +//////////////////////////////////////////////////////////////////////////////// + +function readFile(filename, encoding, callback) { + if (options.file === '-') { + // read from stdin + + var chunks = []; + + process.stdin.on('data', function (chunk) { + chunks.push(chunk); + }); + + process.stdin.on('end', function () { + return callback(null, Buffer.concat(chunks).toString(encoding)); + }); + } else { + fs.readFile(filename, encoding, callback); + } +} + +readFile(options.file, 'utf8', function (error, input) { + var output, isYaml; + + if (error) { + if (error.code === 'ENOENT') { + console.error('File not found: ' + options.file); + process.exit(2); + } + + console.error( + options.trace && error.stack || + error.message || + String(error)); + + process.exit(1); + } + + try { + output = JSON.parse(input); + isYaml = false; + } catch (err) { + if (err instanceof SyntaxError) { + try { + output = []; + yaml.loadAll(input, function (doc) { output.push(doc); }, {}); + isYaml = true; + + if (output.length === 0) output = null; + else if (output.length === 1) output = output[0]; + + } catch (e) { + if (options.trace && err.stack) console.error(e.stack); + else console.error(e.toString(options.compact)); + + process.exit(1); + } + } else { + console.error( + options.trace && err.stack || + err.message || + String(err)); + + process.exit(1); + } + } + + if (isYaml) console.log(JSON.stringify(output, null, ' ')); + else console.log(yaml.dump(output)); +}); diff --git a/node_modules/js-yaml/dist/js-yaml.js b/node_modules/js-yaml/dist/js-yaml.js new file mode 100644 index 00000000..78783207 --- /dev/null +++ b/node_modules/js-yaml/dist/js-yaml.js @@ -0,0 +1,3989 @@ +/*! js-yaml 3.14.1 https://github.com/nodeca/js-yaml */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.jsyaml = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i */ +var CHAR_QUESTION = 0x3F; /* ? */ +var CHAR_COMMERCIAL_AT = 0x40; /* @ */ +var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ +var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ +var CHAR_GRAVE_ACCENT = 0x60; /* ` */ +var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ +var CHAR_VERTICAL_LINE = 0x7C; /* | */ +var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ + +var ESCAPE_SEQUENCES = {}; + +ESCAPE_SEQUENCES[0x00] = '\\0'; +ESCAPE_SEQUENCES[0x07] = '\\a'; +ESCAPE_SEQUENCES[0x08] = '\\b'; +ESCAPE_SEQUENCES[0x09] = '\\t'; +ESCAPE_SEQUENCES[0x0A] = '\\n'; +ESCAPE_SEQUENCES[0x0B] = '\\v'; +ESCAPE_SEQUENCES[0x0C] = '\\f'; +ESCAPE_SEQUENCES[0x0D] = '\\r'; +ESCAPE_SEQUENCES[0x1B] = '\\e'; +ESCAPE_SEQUENCES[0x22] = '\\"'; +ESCAPE_SEQUENCES[0x5C] = '\\\\'; +ESCAPE_SEQUENCES[0x85] = '\\N'; +ESCAPE_SEQUENCES[0xA0] = '\\_'; +ESCAPE_SEQUENCES[0x2028] = '\\L'; +ESCAPE_SEQUENCES[0x2029] = '\\P'; + +var DEPRECATED_BOOLEANS_SYNTAX = [ + 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', + 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' +]; + +function compileStyleMap(schema, map) { + var result, keys, index, length, tag, style, type; + + if (map === null) return {}; + + result = {}; + keys = Object.keys(map); + + for (index = 0, length = keys.length; index < length; index += 1) { + tag = keys[index]; + style = String(map[tag]); + + if (tag.slice(0, 2) === '!!') { + tag = 'tag:yaml.org,2002:' + tag.slice(2); + } + type = schema.compiledTypeMap['fallback'][tag]; + + if (type && _hasOwnProperty.call(type.styleAliases, style)) { + style = type.styleAliases[style]; + } + + result[tag] = style; + } + + return result; +} + +function encodeHex(character) { + var string, handle, length; + + string = character.toString(16).toUpperCase(); + + if (character <= 0xFF) { + handle = 'x'; + length = 2; + } else if (character <= 0xFFFF) { + handle = 'u'; + length = 4; + } else if (character <= 0xFFFFFFFF) { + handle = 'U'; + length = 8; + } else { + throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF'); + } + + return '\\' + handle + common.repeat('0', length - string.length) + string; +} + +function State(options) { + this.schema = options['schema'] || DEFAULT_FULL_SCHEMA; + this.indent = Math.max(1, (options['indent'] || 2)); + this.noArrayIndent = options['noArrayIndent'] || false; + this.skipInvalid = options['skipInvalid'] || false; + this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); + this.styleMap = compileStyleMap(this.schema, options['styles'] || null); + this.sortKeys = options['sortKeys'] || false; + this.lineWidth = options['lineWidth'] || 80; + this.noRefs = options['noRefs'] || false; + this.noCompatMode = options['noCompatMode'] || false; + this.condenseFlow = options['condenseFlow'] || false; + + this.implicitTypes = this.schema.compiledImplicit; + this.explicitTypes = this.schema.compiledExplicit; + + this.tag = null; + this.result = ''; + + this.duplicates = []; + this.usedDuplicates = null; +} + +// Indents every line in a string. Empty lines (\n only) are not indented. +function indentString(string, spaces) { + var ind = common.repeat(' ', spaces), + position = 0, + next = -1, + result = '', + line, + length = string.length; + + while (position < length) { + next = string.indexOf('\n', position); + if (next === -1) { + line = string.slice(position); + position = length; + } else { + line = string.slice(position, next + 1); + position = next + 1; + } + + if (line.length && line !== '\n') result += ind; + + result += line; + } + + return result; +} + +function generateNextLine(state, level) { + return '\n' + common.repeat(' ', state.indent * level); +} + +function testImplicitResolving(state, str) { + var index, length, type; + + for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { + type = state.implicitTypes[index]; + + if (type.resolve(str)) { + return true; + } + } + + return false; +} + +// [33] s-white ::= s-space | s-tab +function isWhitespace(c) { + return c === CHAR_SPACE || c === CHAR_TAB; +} + +// Returns true if the character can be printed without escaping. +// From YAML 1.2: "any allowed characters known to be non-printable +// should also be escaped. [However,] This isn’t mandatory" +// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. +function isPrintable(c) { + return (0x00020 <= c && c <= 0x00007E) + || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) + || ((0x0E000 <= c && c <= 0x00FFFD) && c !== 0xFEFF /* BOM */) + || (0x10000 <= c && c <= 0x10FFFF); +} + +// [34] ns-char ::= nb-char - s-white +// [27] nb-char ::= c-printable - b-char - c-byte-order-mark +// [26] b-char ::= b-line-feed | b-carriage-return +// [24] b-line-feed ::= #xA /* LF */ +// [25] b-carriage-return ::= #xD /* CR */ +// [3] c-byte-order-mark ::= #xFEFF +function isNsChar(c) { + return isPrintable(c) && !isWhitespace(c) + // byte-order-mark + && c !== 0xFEFF + // b-char + && c !== CHAR_CARRIAGE_RETURN + && c !== CHAR_LINE_FEED; +} + +// Simplified test for values allowed after the first character in plain style. +function isPlainSafe(c, prev) { + // Uses a subset of nb-char - c-flow-indicator - ":" - "#" + // where nb-char ::= c-printable - b-char - c-byte-order-mark. + return isPrintable(c) && c !== 0xFEFF + // - c-flow-indicator + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + // - ":" - "#" + // /* An ns-char preceding */ "#" + && c !== CHAR_COLON + && ((c !== CHAR_SHARP) || (prev && isNsChar(prev))); +} + +// Simplified test for values allowed as the first character in plain style. +function isPlainSafeFirst(c) { + // Uses a subset of ns-char - c-indicator + // where ns-char = nb-char - s-white. + return isPrintable(c) && c !== 0xFEFF + && !isWhitespace(c) // - s-white + // - (c-indicator ::= + // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” + && c !== CHAR_MINUS + && c !== CHAR_QUESTION + && c !== CHAR_COLON + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” + && c !== CHAR_SHARP + && c !== CHAR_AMPERSAND + && c !== CHAR_ASTERISK + && c !== CHAR_EXCLAMATION + && c !== CHAR_VERTICAL_LINE + && c !== CHAR_EQUALS + && c !== CHAR_GREATER_THAN + && c !== CHAR_SINGLE_QUOTE + && c !== CHAR_DOUBLE_QUOTE + // | “%” | “@” | “`”) + && c !== CHAR_PERCENT + && c !== CHAR_COMMERCIAL_AT + && c !== CHAR_GRAVE_ACCENT; +} + +// Determines whether block indentation indicator is required. +function needIndentIndicator(string) { + var leadingSpaceRe = /^\n* /; + return leadingSpaceRe.test(string); +} + +var STYLE_PLAIN = 1, + STYLE_SINGLE = 2, + STYLE_LITERAL = 3, + STYLE_FOLDED = 4, + STYLE_DOUBLE = 5; + +// Determines which scalar styles are possible and returns the preferred style. +// lineWidth = -1 => no limit. +// Pre-conditions: str.length > 0. +// Post-conditions: +// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. +// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). +// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). +function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) { + var i; + var char, prev_char; + var hasLineBreak = false; + var hasFoldableLine = false; // only checked if shouldTrackWidth + var shouldTrackWidth = lineWidth !== -1; + var previousLineBreak = -1; // count the first line correctly + var plain = isPlainSafeFirst(string.charCodeAt(0)) + && !isWhitespace(string.charCodeAt(string.length - 1)); + + if (singleLineOnly) { + // Case: no block styles. + // Check for disallowed characters to rule out plain and single. + for (i = 0; i < string.length; i++) { + char = string.charCodeAt(i); + if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + prev_char = i > 0 ? string.charCodeAt(i - 1) : null; + plain = plain && isPlainSafe(char, prev_char); + } + } else { + // Case: block styles permitted. + for (i = 0; i < string.length; i++) { + char = string.charCodeAt(i); + if (char === CHAR_LINE_FEED) { + hasLineBreak = true; + // Check if any line can be folded. + if (shouldTrackWidth) { + hasFoldableLine = hasFoldableLine || + // Foldable line = too long, and not more-indented. + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' '); + previousLineBreak = i; + } + } else if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + prev_char = i > 0 ? string.charCodeAt(i - 1) : null; + plain = plain && isPlainSafe(char, prev_char); + } + // in case the end is missing a \n + hasFoldableLine = hasFoldableLine || (shouldTrackWidth && + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' ')); + } + // Although every style can represent \n without escaping, prefer block styles + // for multiline, since they're more readable and they don't add empty lines. + // Also prefer folding a super-long line. + if (!hasLineBreak && !hasFoldableLine) { + // Strings interpretable as another type have to be quoted; + // e.g. the string 'true' vs. the boolean true. + return plain && !testAmbiguousType(string) + ? STYLE_PLAIN : STYLE_SINGLE; + } + // Edge case: block indentation indicator can only have one digit. + if (indentPerLevel > 9 && needIndentIndicator(string)) { + return STYLE_DOUBLE; + } + // At this point we know block styles are valid. + // Prefer literal style unless we want to fold. + return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; +} + +// Note: line breaking/folding is implemented for only the folded style. +// NB. We drop the last trailing newline (if any) of a returned block scalar +// since the dumper adds its own newline. This always works: +// • No ending newline => unaffected; already using strip "-" chomping. +// • Ending newline => removed then restored. +// Importantly, this keeps the "+" chomp indicator from gaining an extra line. +function writeScalar(state, string, level, iskey) { + state.dump = (function () { + if (string.length === 0) { + return "''"; + } + if (!state.noCompatMode && + DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1) { + return "'" + string + "'"; + } + + var indent = state.indent * Math.max(1, level); // no 0-indent scalars + // As indentation gets deeper, let the width decrease monotonically + // to the lower bound min(state.lineWidth, 40). + // Note that this implies + // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. + // state.lineWidth > 40 + state.indent: width decreases until the lower bound. + // This behaves better than a constant minimum width which disallows narrower options, + // or an indent threshold which causes the width to suddenly increase. + var lineWidth = state.lineWidth === -1 + ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); + + // Without knowing if keys are implicit/explicit, assume implicit for safety. + var singleLineOnly = iskey + // No block styles in flow mode. + || (state.flowLevel > -1 && level >= state.flowLevel); + function testAmbiguity(string) { + return testImplicitResolving(state, string); + } + + switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity)) { + case STYLE_PLAIN: + return string; + case STYLE_SINGLE: + return "'" + string.replace(/'/g, "''") + "'"; + case STYLE_LITERAL: + return '|' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(string, indent)); + case STYLE_FOLDED: + return '>' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); + case STYLE_DOUBLE: + return '"' + escapeString(string, lineWidth) + '"'; + default: + throw new YAMLException('impossible error: invalid scalar style'); + } + }()); +} + +// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. +function blockHeader(string, indentPerLevel) { + var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; + + // note the special case: the string '\n' counts as a "trailing" empty line. + var clip = string[string.length - 1] === '\n'; + var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); + var chomp = keep ? '+' : (clip ? '' : '-'); + + return indentIndicator + chomp + '\n'; +} + +// (See the note for writeScalar.) +function dropEndingNewline(string) { + return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; +} + +// Note: a long line without a suitable break point will exceed the width limit. +// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. +function foldString(string, width) { + // In folded style, $k$ consecutive newlines output as $k+1$ newlines— + // unless they're before or after a more-indented line, or at the very + // beginning or end, in which case $k$ maps to $k$. + // Therefore, parse each chunk as newline(s) followed by a content line. + var lineRe = /(\n+)([^\n]*)/g; + + // first line (possibly an empty line) + var result = (function () { + var nextLF = string.indexOf('\n'); + nextLF = nextLF !== -1 ? nextLF : string.length; + lineRe.lastIndex = nextLF; + return foldLine(string.slice(0, nextLF), width); + }()); + // If we haven't reached the first content line yet, don't add an extra \n. + var prevMoreIndented = string[0] === '\n' || string[0] === ' '; + var moreIndented; + + // rest of the lines + var match; + while ((match = lineRe.exec(string))) { + var prefix = match[1], line = match[2]; + moreIndented = (line[0] === ' '); + result += prefix + + (!prevMoreIndented && !moreIndented && line !== '' + ? '\n' : '') + + foldLine(line, width); + prevMoreIndented = moreIndented; + } + + return result; +} + +// Greedy line breaking. +// Picks the longest line under the limit each time, +// otherwise settles for the shortest line over the limit. +// NB. More-indented lines *cannot* be folded, as that would add an extra \n. +function foldLine(line, width) { + if (line === '' || line[0] === ' ') return line; + + // Since a more-indented line adds a \n, breaks can't be followed by a space. + var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. + var match; + // start is an inclusive index. end, curr, and next are exclusive. + var start = 0, end, curr = 0, next = 0; + var result = ''; + + // Invariants: 0 <= start <= length-1. + // 0 <= curr <= next <= max(0, length-2). curr - start <= width. + // Inside the loop: + // A match implies length >= 2, so curr and next are <= length-2. + while ((match = breakRe.exec(line))) { + next = match.index; + // maintain invariant: curr - start <= width + if (next - start > width) { + end = (curr > start) ? curr : next; // derive end <= length-2 + result += '\n' + line.slice(start, end); + // skip the space that was output as \n + start = end + 1; // derive start <= length-1 + } + curr = next; + } + + // By the invariants, start <= length-1, so there is something left over. + // It is either the whole string or a part starting from non-whitespace. + result += '\n'; + // Insert a break if the remainder is too long and there is a break available. + if (line.length - start > width && curr > start) { + result += line.slice(start, curr) + '\n' + line.slice(curr + 1); + } else { + result += line.slice(start); + } + + return result.slice(1); // drop extra \n joiner +} + +// Escapes a double-quoted string. +function escapeString(string) { + var result = ''; + var char, nextChar; + var escapeSeq; + + for (var i = 0; i < string.length; i++) { + char = string.charCodeAt(i); + // Check for surrogate pairs (reference Unicode 3.0 section "3.7 Surrogates"). + if (char >= 0xD800 && char <= 0xDBFF/* high surrogate */) { + nextChar = string.charCodeAt(i + 1); + if (nextChar >= 0xDC00 && nextChar <= 0xDFFF/* low surrogate */) { + // Combine the surrogate pair and store it escaped. + result += encodeHex((char - 0xD800) * 0x400 + nextChar - 0xDC00 + 0x10000); + // Advance index one extra since we already used that char here. + i++; continue; + } + } + escapeSeq = ESCAPE_SEQUENCES[char]; + result += !escapeSeq && isPrintable(char) + ? string[i] + : escapeSeq || encodeHex(char); + } + + return result; +} + +function writeFlowSequence(state, level, object) { + var _result = '', + _tag = state.tag, + index, + length; + + for (index = 0, length = object.length; index < length; index += 1) { + // Write only valid elements. + if (writeNode(state, level, object[index], false, false)) { + if (index !== 0) _result += ',' + (!state.condenseFlow ? ' ' : ''); + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = '[' + _result + ']'; +} + +function writeBlockSequence(state, level, object, compact) { + var _result = '', + _tag = state.tag, + index, + length; + + for (index = 0, length = object.length; index < length; index += 1) { + // Write only valid elements. + if (writeNode(state, level + 1, object[index], true, true)) { + if (!compact || index !== 0) { + _result += generateNextLine(state, level); + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + _result += '-'; + } else { + _result += '- '; + } + + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = _result || '[]'; // Empty sequence if no valid values. +} + +function writeFlowMapping(state, level, object) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + pairBuffer; + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + + pairBuffer = ''; + if (index !== 0) pairBuffer += ', '; + + if (state.condenseFlow) pairBuffer += '"'; + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (!writeNode(state, level, objectKey, false, false)) { + continue; // Skip this pair because of invalid key; + } + + if (state.dump.length > 1024) pairBuffer += '? '; + + pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); + + if (!writeNode(state, level, objectValue, false, false)) { + continue; // Skip this pair because of invalid value. + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = '{' + _result + '}'; +} + +function writeBlockMapping(state, level, object, compact) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + explicitPair, + pairBuffer; + + // Allow sorting keys so that the output file is deterministic + if (state.sortKeys === true) { + // Default sorting + objectKeyList.sort(); + } else if (typeof state.sortKeys === 'function') { + // Custom sort function + objectKeyList.sort(state.sortKeys); + } else if (state.sortKeys) { + // Something is wrong + throw new YAMLException('sortKeys must be a boolean or a function'); + } + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ''; + + if (!compact || index !== 0) { + pairBuffer += generateNextLine(state, level); + } + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (!writeNode(state, level + 1, objectKey, true, true, true)) { + continue; // Skip this pair because of invalid key. + } + + explicitPair = (state.tag !== null && state.tag !== '?') || + (state.dump && state.dump.length > 1024); + + if (explicitPair) { + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += '?'; + } else { + pairBuffer += '? '; + } + } + + pairBuffer += state.dump; + + if (explicitPair) { + pairBuffer += generateNextLine(state, level); + } + + if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { + continue; // Skip this pair because of invalid value. + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += ':'; + } else { + pairBuffer += ': '; + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = _result || '{}'; // Empty mapping if no valid pairs. +} + +function detectType(state, object, explicit) { + var _result, typeList, index, length, type, style; + + typeList = explicit ? state.explicitTypes : state.implicitTypes; + + for (index = 0, length = typeList.length; index < length; index += 1) { + type = typeList[index]; + + if ((type.instanceOf || type.predicate) && + (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && + (!type.predicate || type.predicate(object))) { + + state.tag = explicit ? type.tag : '?'; + + if (type.represent) { + style = state.styleMap[type.tag] || type.defaultStyle; + + if (_toString.call(type.represent) === '[object Function]') { + _result = type.represent(object, style); + } else if (_hasOwnProperty.call(type.represent, style)) { + _result = type.represent[style](object, style); + } else { + throw new YAMLException('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); + } + + state.dump = _result; + } + + return true; + } + } + + return false; +} + +// Serializes `object` and writes it to global `result`. +// Returns true on success, or false on invalid object. +// +function writeNode(state, level, object, block, compact, iskey) { + state.tag = null; + state.dump = object; + + if (!detectType(state, object, false)) { + detectType(state, object, true); + } + + var type = _toString.call(state.dump); + + if (block) { + block = (state.flowLevel < 0 || state.flowLevel > level); + } + + var objectOrArray = type === '[object Object]' || type === '[object Array]', + duplicateIndex, + duplicate; + + if (objectOrArray) { + duplicateIndex = state.duplicates.indexOf(object); + duplicate = duplicateIndex !== -1; + } + + if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { + compact = false; + } + + if (duplicate && state.usedDuplicates[duplicateIndex]) { + state.dump = '*ref_' + duplicateIndex; + } else { + if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { + state.usedDuplicates[duplicateIndex] = true; + } + if (type === '[object Object]') { + if (block && (Object.keys(state.dump).length !== 0)) { + writeBlockMapping(state, level, state.dump, compact); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowMapping(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object Array]') { + var arrayLevel = (state.noArrayIndent && (level > 0)) ? level - 1 : level; + if (block && (state.dump.length !== 0)) { + writeBlockSequence(state, arrayLevel, state.dump, compact); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowSequence(state, arrayLevel, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object String]') { + if (state.tag !== '?') { + writeScalar(state, state.dump, level, iskey); + } + } else { + if (state.skipInvalid) return false; + throw new YAMLException('unacceptable kind of an object to dump ' + type); + } + + if (state.tag !== null && state.tag !== '?') { + state.dump = '!<' + state.tag + '> ' + state.dump; + } + } + + return true; +} + +function getDuplicateReferences(object, state) { + var objects = [], + duplicatesIndexes = [], + index, + length; + + inspectNode(object, objects, duplicatesIndexes); + + for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { + state.duplicates.push(objects[duplicatesIndexes[index]]); + } + state.usedDuplicates = new Array(length); +} + +function inspectNode(object, objects, duplicatesIndexes) { + var objectKeyList, + index, + length; + + if (object !== null && typeof object === 'object') { + index = objects.indexOf(object); + if (index !== -1) { + if (duplicatesIndexes.indexOf(index) === -1) { + duplicatesIndexes.push(index); + } + } else { + objects.push(object); + + if (Array.isArray(object)) { + for (index = 0, length = object.length; index < length; index += 1) { + inspectNode(object[index], objects, duplicatesIndexes); + } + } else { + objectKeyList = Object.keys(object); + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); + } + } + } + } +} + +function dump(input, options) { + options = options || {}; + + var state = new State(options); + + if (!state.noRefs) getDuplicateReferences(input, state); + + if (writeNode(state, 0, input, true, true)) return state.dump + '\n'; + + return ''; +} + +function safeDump(input, options) { + return dump(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + +module.exports.dump = dump; +module.exports.safeDump = safeDump; + +},{"./common":2,"./exception":4,"./schema/default_full":9,"./schema/default_safe":10}],4:[function(require,module,exports){ +// YAML error class. http://stackoverflow.com/questions/8458984 +// +'use strict'; + +function YAMLException(reason, mark) { + // Super constructor + Error.call(this); + + this.name = 'YAMLException'; + this.reason = reason; + this.mark = mark; + this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : ''); + + // Include stack trace in error object + if (Error.captureStackTrace) { + // Chrome and NodeJS + Error.captureStackTrace(this, this.constructor); + } else { + // FF, IE 10+ and Safari 6+. Fallback for others + this.stack = (new Error()).stack || ''; + } +} + + +// Inherit from Error +YAMLException.prototype = Object.create(Error.prototype); +YAMLException.prototype.constructor = YAMLException; + + +YAMLException.prototype.toString = function toString(compact) { + var result = this.name + ': '; + + result += this.reason || '(unknown reason)'; + + if (!compact && this.mark) { + result += ' ' + this.mark.toString(); + } + + return result; +}; + + +module.exports = YAMLException; + +},{}],5:[function(require,module,exports){ +'use strict'; + +/*eslint-disable max-len,no-use-before-define*/ + +var common = require('./common'); +var YAMLException = require('./exception'); +var Mark = require('./mark'); +var DEFAULT_SAFE_SCHEMA = require('./schema/default_safe'); +var DEFAULT_FULL_SCHEMA = require('./schema/default_full'); + + +var _hasOwnProperty = Object.prototype.hasOwnProperty; + + +var CONTEXT_FLOW_IN = 1; +var CONTEXT_FLOW_OUT = 2; +var CONTEXT_BLOCK_IN = 3; +var CONTEXT_BLOCK_OUT = 4; + + +var CHOMPING_CLIP = 1; +var CHOMPING_STRIP = 2; +var CHOMPING_KEEP = 3; + + +var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; +var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; +var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; +var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; + + +function _class(obj) { return Object.prototype.toString.call(obj); } + +function is_EOL(c) { + return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); +} + +function is_WHITE_SPACE(c) { + return (c === 0x09/* Tab */) || (c === 0x20/* Space */); +} + +function is_WS_OR_EOL(c) { + return (c === 0x09/* Tab */) || + (c === 0x20/* Space */) || + (c === 0x0A/* LF */) || + (c === 0x0D/* CR */); +} + +function is_FLOW_INDICATOR(c) { + return c === 0x2C/* , */ || + c === 0x5B/* [ */ || + c === 0x5D/* ] */ || + c === 0x7B/* { */ || + c === 0x7D/* } */; +} + +function fromHexCode(c) { + var lc; + + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; + } + + /*eslint-disable no-bitwise*/ + lc = c | 0x20; + + if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) { + return lc - 0x61 + 10; + } + + return -1; +} + +function escapedHexLen(c) { + if (c === 0x78/* x */) { return 2; } + if (c === 0x75/* u */) { return 4; } + if (c === 0x55/* U */) { return 8; } + return 0; +} + +function fromDecimalCode(c) { + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; + } + + return -1; +} + +function simpleEscapeSequence(c) { + /* eslint-disable indent */ + return (c === 0x30/* 0 */) ? '\x00' : + (c === 0x61/* a */) ? '\x07' : + (c === 0x62/* b */) ? '\x08' : + (c === 0x74/* t */) ? '\x09' : + (c === 0x09/* Tab */) ? '\x09' : + (c === 0x6E/* n */) ? '\x0A' : + (c === 0x76/* v */) ? '\x0B' : + (c === 0x66/* f */) ? '\x0C' : + (c === 0x72/* r */) ? '\x0D' : + (c === 0x65/* e */) ? '\x1B' : + (c === 0x20/* Space */) ? ' ' : + (c === 0x22/* " */) ? '\x22' : + (c === 0x2F/* / */) ? '/' : + (c === 0x5C/* \ */) ? '\x5C' : + (c === 0x4E/* N */) ? '\x85' : + (c === 0x5F/* _ */) ? '\xA0' : + (c === 0x4C/* L */) ? '\u2028' : + (c === 0x50/* P */) ? '\u2029' : ''; +} + +function charFromCodepoint(c) { + if (c <= 0xFFFF) { + return String.fromCharCode(c); + } + // Encode UTF-16 surrogate pair + // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF + return String.fromCharCode( + ((c - 0x010000) >> 10) + 0xD800, + ((c - 0x010000) & 0x03FF) + 0xDC00 + ); +} + +var simpleEscapeCheck = new Array(256); // integer, for fast access +var simpleEscapeMap = new Array(256); +for (var i = 0; i < 256; i++) { + simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; + simpleEscapeMap[i] = simpleEscapeSequence(i); +} + + +function State(input, options) { + this.input = input; + + this.filename = options['filename'] || null; + this.schema = options['schema'] || DEFAULT_FULL_SCHEMA; + this.onWarning = options['onWarning'] || null; + this.legacy = options['legacy'] || false; + this.json = options['json'] || false; + this.listener = options['listener'] || null; + + this.implicitTypes = this.schema.compiledImplicit; + this.typeMap = this.schema.compiledTypeMap; + + this.length = input.length; + this.position = 0; + this.line = 0; + this.lineStart = 0; + this.lineIndent = 0; + + this.documents = []; + + /* + this.version; + this.checkLineBreaks; + this.tagMap; + this.anchorMap; + this.tag; + this.anchor; + this.kind; + this.result;*/ + +} + + +function generateError(state, message) { + return new YAMLException( + message, + new Mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart))); +} + +function throwError(state, message) { + throw generateError(state, message); +} + +function throwWarning(state, message) { + if (state.onWarning) { + state.onWarning.call(null, generateError(state, message)); + } +} + + +var directiveHandlers = { + + YAML: function handleYamlDirective(state, name, args) { + + var match, major, minor; + + if (state.version !== null) { + throwError(state, 'duplication of %YAML directive'); + } + + if (args.length !== 1) { + throwError(state, 'YAML directive accepts exactly one argument'); + } + + match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); + + if (match === null) { + throwError(state, 'ill-formed argument of the YAML directive'); + } + + major = parseInt(match[1], 10); + minor = parseInt(match[2], 10); + + if (major !== 1) { + throwError(state, 'unacceptable YAML version of the document'); + } + + state.version = args[0]; + state.checkLineBreaks = (minor < 2); + + if (minor !== 1 && minor !== 2) { + throwWarning(state, 'unsupported YAML version of the document'); + } + }, + + TAG: function handleTagDirective(state, name, args) { + + var handle, prefix; + + if (args.length !== 2) { + throwError(state, 'TAG directive accepts exactly two arguments'); + } + + handle = args[0]; + prefix = args[1]; + + if (!PATTERN_TAG_HANDLE.test(handle)) { + throwError(state, 'ill-formed tag handle (first argument) of the TAG directive'); + } + + if (_hasOwnProperty.call(state.tagMap, handle)) { + throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); + } + + if (!PATTERN_TAG_URI.test(prefix)) { + throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive'); + } + + state.tagMap[handle] = prefix; + } +}; + + +function captureSegment(state, start, end, checkJson) { + var _position, _length, _character, _result; + + if (start < end) { + _result = state.input.slice(start, end); + + if (checkJson) { + for (_position = 0, _length = _result.length; _position < _length; _position += 1) { + _character = _result.charCodeAt(_position); + if (!(_character === 0x09 || + (0x20 <= _character && _character <= 0x10FFFF))) { + throwError(state, 'expected valid JSON character'); + } + } + } else if (PATTERN_NON_PRINTABLE.test(_result)) { + throwError(state, 'the stream contains non-printable characters'); + } + + state.result += _result; + } +} + +function mergeMappings(state, destination, source, overridableKeys) { + var sourceKeys, key, index, quantity; + + if (!common.isObject(source)) { + throwError(state, 'cannot merge mappings; the provided source object is unacceptable'); + } + + sourceKeys = Object.keys(source); + + for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { + key = sourceKeys[index]; + + if (!_hasOwnProperty.call(destination, key)) { + destination[key] = source[key]; + overridableKeys[key] = true; + } + } +} + +function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startPos) { + var index, quantity; + + // The output is a plain object here, so keys can only be strings. + // We need to convert keyNode to a string, but doing so can hang the process + // (deeply nested arrays that explode exponentially using aliases). + if (Array.isArray(keyNode)) { + keyNode = Array.prototype.slice.call(keyNode); + + for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { + if (Array.isArray(keyNode[index])) { + throwError(state, 'nested arrays are not supported inside keys'); + } + + if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') { + keyNode[index] = '[object Object]'; + } + } + } + + // Avoid code execution in load() via toString property + // (still use its own toString for arrays, timestamps, + // and whatever user schema extensions happen to have @@toStringTag) + if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') { + keyNode = '[object Object]'; + } + + + keyNode = String(keyNode); + + if (_result === null) { + _result = {}; + } + + if (keyTag === 'tag:yaml.org,2002:merge') { + if (Array.isArray(valueNode)) { + for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { + mergeMappings(state, _result, valueNode[index], overridableKeys); + } + } else { + mergeMappings(state, _result, valueNode, overridableKeys); + } + } else { + if (!state.json && + !_hasOwnProperty.call(overridableKeys, keyNode) && + _hasOwnProperty.call(_result, keyNode)) { + state.line = startLine || state.line; + state.position = startPos || state.position; + throwError(state, 'duplicated mapping key'); + } + _result[keyNode] = valueNode; + delete overridableKeys[keyNode]; + } + + return _result; +} + +function readLineBreak(state) { + var ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x0A/* LF */) { + state.position++; + } else if (ch === 0x0D/* CR */) { + state.position++; + if (state.input.charCodeAt(state.position) === 0x0A/* LF */) { + state.position++; + } + } else { + throwError(state, 'a line break is expected'); + } + + state.line += 1; + state.lineStart = state.position; +} + +function skipSeparationSpace(state, allowComments, checkIndent) { + var lineBreaks = 0, + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (allowComments && ch === 0x23/* # */) { + do { + ch = state.input.charCodeAt(++state.position); + } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0); + } + + if (is_EOL(ch)) { + readLineBreak(state); + + ch = state.input.charCodeAt(state.position); + lineBreaks++; + state.lineIndent = 0; + + while (ch === 0x20/* Space */) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + } else { + break; + } + } + + if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { + throwWarning(state, 'deficient indentation'); + } + + return lineBreaks; +} + +function testDocumentSeparator(state) { + var _position = state.position, + ch; + + ch = state.input.charCodeAt(_position); + + // Condition state.position === state.lineStart is tested + // in parent on each call, for efficiency. No needs to test here again. + if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) && + ch === state.input.charCodeAt(_position + 1) && + ch === state.input.charCodeAt(_position + 2)) { + + _position += 3; + + ch = state.input.charCodeAt(_position); + + if (ch === 0 || is_WS_OR_EOL(ch)) { + return true; + } + } + + return false; +} + +function writeFoldedLines(state, count) { + if (count === 1) { + state.result += ' '; + } else if (count > 1) { + state.result += common.repeat('\n', count - 1); + } +} + + +function readPlainScalar(state, nodeIndent, withinFlowCollection) { + var preceding, + following, + captureStart, + captureEnd, + hasPendingContent, + _line, + _lineStart, + _lineIndent, + _kind = state.kind, + _result = state.result, + ch; + + ch = state.input.charCodeAt(state.position); + + if (is_WS_OR_EOL(ch) || + is_FLOW_INDICATOR(ch) || + ch === 0x23/* # */ || + ch === 0x26/* & */ || + ch === 0x2A/* * */ || + ch === 0x21/* ! */ || + ch === 0x7C/* | */ || + ch === 0x3E/* > */ || + ch === 0x27/* ' */ || + ch === 0x22/* " */ || + ch === 0x25/* % */ || + ch === 0x40/* @ */ || + ch === 0x60/* ` */) { + return false; + } + + if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + return false; + } + } + + state.kind = 'scalar'; + state.result = ''; + captureStart = captureEnd = state.position; + hasPendingContent = false; + + while (ch !== 0) { + if (ch === 0x3A/* : */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + break; + } + + } else if (ch === 0x23/* # */) { + preceding = state.input.charCodeAt(state.position - 1); + + if (is_WS_OR_EOL(preceding)) { + break; + } + + } else if ((state.position === state.lineStart && testDocumentSeparator(state)) || + withinFlowCollection && is_FLOW_INDICATOR(ch)) { + break; + + } else if (is_EOL(ch)) { + _line = state.line; + _lineStart = state.lineStart; + _lineIndent = state.lineIndent; + skipSeparationSpace(state, false, -1); + + if (state.lineIndent >= nodeIndent) { + hasPendingContent = true; + ch = state.input.charCodeAt(state.position); + continue; + } else { + state.position = captureEnd; + state.line = _line; + state.lineStart = _lineStart; + state.lineIndent = _lineIndent; + break; + } + } + + if (hasPendingContent) { + captureSegment(state, captureStart, captureEnd, false); + writeFoldedLines(state, state.line - _line); + captureStart = captureEnd = state.position; + hasPendingContent = false; + } + + if (!is_WHITE_SPACE(ch)) { + captureEnd = state.position + 1; + } + + ch = state.input.charCodeAt(++state.position); + } + + captureSegment(state, captureStart, captureEnd, false); + + if (state.result) { + return true; + } + + state.kind = _kind; + state.result = _result; + return false; +} + +function readSingleQuotedScalar(state, nodeIndent) { + var ch, + captureStart, captureEnd; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x27/* ' */) { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + if (ch === 0x27/* ' */) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x27/* ' */) { + captureStart = state.position; + state.position++; + captureEnd = state.position; + } else { + return true; + } + + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a single quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError(state, 'unexpected end of the stream within a single quoted scalar'); +} + +function readDoubleQuotedScalar(state, nodeIndent) { + var captureStart, + captureEnd, + hexLength, + hexResult, + tmp, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x22/* " */) { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + if (ch === 0x22/* " */) { + captureSegment(state, captureStart, state.position, true); + state.position++; + return true; + + } else if (ch === 0x5C/* \ */) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (is_EOL(ch)) { + skipSeparationSpace(state, false, nodeIndent); + + // TODO: rework to inline fn with no type cast? + } else if (ch < 256 && simpleEscapeCheck[ch]) { + state.result += simpleEscapeMap[ch]; + state.position++; + + } else if ((tmp = escapedHexLen(ch)) > 0) { + hexLength = tmp; + hexResult = 0; + + for (; hexLength > 0; hexLength--) { + ch = state.input.charCodeAt(++state.position); + + if ((tmp = fromHexCode(ch)) >= 0) { + hexResult = (hexResult << 4) + tmp; + + } else { + throwError(state, 'expected hexadecimal character'); + } + } + + state.result += charFromCodepoint(hexResult); + + state.position++; + + } else { + throwError(state, 'unknown escape sequence'); + } + + captureStart = captureEnd = state.position; + + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a double quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError(state, 'unexpected end of the stream within a double quoted scalar'); +} + +function readFlowCollection(state, nodeIndent) { + var readNext = true, + _line, + _tag = state.tag, + _result, + _anchor = state.anchor, + following, + terminator, + isPair, + isExplicitPair, + isMapping, + overridableKeys = {}, + keyNode, + keyTag, + valueNode, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x5B/* [ */) { + terminator = 0x5D;/* ] */ + isMapping = false; + _result = []; + } else if (ch === 0x7B/* { */) { + terminator = 0x7D;/* } */ + isMapping = true; + _result = {}; + } else { + return false; + } + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(++state.position); + + while (ch !== 0) { + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if (ch === terminator) { + state.position++; + state.tag = _tag; + state.anchor = _anchor; + state.kind = isMapping ? 'mapping' : 'sequence'; + state.result = _result; + return true; + } else if (!readNext) { + throwError(state, 'missed comma between flow collection entries'); + } + + keyTag = keyNode = valueNode = null; + isPair = isExplicitPair = false; + + if (ch === 0x3F/* ? */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following)) { + isPair = isExplicitPair = true; + state.position++; + skipSeparationSpace(state, true, nodeIndent); + } + } + + _line = state.line; + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + keyTag = state.tag; + keyNode = state.result; + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) { + isPair = true; + ch = state.input.charCodeAt(++state.position); + skipSeparationSpace(state, true, nodeIndent); + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + valueNode = state.result; + } + + if (isMapping) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode); + } else if (isPair) { + _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode)); + } else { + _result.push(keyNode); + } + + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x2C/* , */) { + readNext = true; + ch = state.input.charCodeAt(++state.position); + } else { + readNext = false; + } + } + + throwError(state, 'unexpected end of the stream within a flow collection'); +} + +function readBlockScalar(state, nodeIndent) { + var captureStart, + folding, + chomping = CHOMPING_CLIP, + didReadContent = false, + detectedIndent = false, + textIndent = nodeIndent, + emptyLines = 0, + atMoreIndented = false, + tmp, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x7C/* | */) { + folding = false; + } else if (ch === 0x3E/* > */) { + folding = true; + } else { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + + while (ch !== 0) { + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x2B/* + */ || ch === 0x2D/* - */) { + if (CHOMPING_CLIP === chomping) { + chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP; + } else { + throwError(state, 'repeat of a chomping mode identifier'); + } + + } else if ((tmp = fromDecimalCode(ch)) >= 0) { + if (tmp === 0) { + throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); + } else if (!detectedIndent) { + textIndent = nodeIndent + tmp - 1; + detectedIndent = true; + } else { + throwError(state, 'repeat of an indentation width identifier'); + } + + } else { + break; + } + } + + if (is_WHITE_SPACE(ch)) { + do { ch = state.input.charCodeAt(++state.position); } + while (is_WHITE_SPACE(ch)); + + if (ch === 0x23/* # */) { + do { ch = state.input.charCodeAt(++state.position); } + while (!is_EOL(ch) && (ch !== 0)); + } + } + + while (ch !== 0) { + readLineBreak(state); + state.lineIndent = 0; + + ch = state.input.charCodeAt(state.position); + + while ((!detectedIndent || state.lineIndent < textIndent) && + (ch === 0x20/* Space */)) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + + if (!detectedIndent && state.lineIndent > textIndent) { + textIndent = state.lineIndent; + } + + if (is_EOL(ch)) { + emptyLines++; + continue; + } + + // End of the scalar. + if (state.lineIndent < textIndent) { + + // Perform the chomping. + if (chomping === CHOMPING_KEEP) { + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + } else if (chomping === CHOMPING_CLIP) { + if (didReadContent) { // i.e. only if the scalar is not empty. + state.result += '\n'; + } + } + + // Break this `while` cycle and go to the funciton's epilogue. + break; + } + + // Folded style: use fancy rules to handle line breaks. + if (folding) { + + // Lines starting with white space characters (more-indented lines) are not folded. + if (is_WHITE_SPACE(ch)) { + atMoreIndented = true; + // except for the first content line (cf. Example 8.1) + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + + // End of more-indented block. + } else if (atMoreIndented) { + atMoreIndented = false; + state.result += common.repeat('\n', emptyLines + 1); + + // Just one line break - perceive as the same line. + } else if (emptyLines === 0) { + if (didReadContent) { // i.e. only if we have already read some scalar content. + state.result += ' '; + } + + // Several line breaks - perceive as different lines. + } else { + state.result += common.repeat('\n', emptyLines); + } + + // Literal style: just add exact number of line breaks between content lines. + } else { + // Keep all line breaks except the header line break. + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + } + + didReadContent = true; + detectedIndent = true; + emptyLines = 0; + captureStart = state.position; + + while (!is_EOL(ch) && (ch !== 0)) { + ch = state.input.charCodeAt(++state.position); + } + + captureSegment(state, captureStart, state.position, false); + } + + return true; +} + +function readBlockSequence(state, nodeIndent) { + var _line, + _tag = state.tag, + _anchor = state.anchor, + _result = [], + following, + detected = false, + ch; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + + if (ch !== 0x2D/* - */) { + break; + } + + following = state.input.charCodeAt(state.position + 1); + + if (!is_WS_OR_EOL(following)) { + break; + } + + detected = true; + state.position++; + + if (skipSeparationSpace(state, true, -1)) { + if (state.lineIndent <= nodeIndent) { + _result.push(null); + ch = state.input.charCodeAt(state.position); + continue; + } + } + + _line = state.line; + composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); + _result.push(state.result); + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { + throwError(state, 'bad indentation of a sequence entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'sequence'; + state.result = _result; + return true; + } + return false; +} + +function readBlockMapping(state, nodeIndent, flowIndent) { + var following, + allowCompact, + _line, + _pos, + _tag = state.tag, + _anchor = state.anchor, + _result = {}, + overridableKeys = {}, + keyTag = null, + keyNode = null, + valueNode = null, + atExplicitKey = false, + detected = false, + ch; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + following = state.input.charCodeAt(state.position + 1); + _line = state.line; // Save the current line. + _pos = state.position; + + // + // Explicit notation case. There are two separate blocks: + // first for the key (denoted by "?") and second for the value (denoted by ":") + // + if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { + + if (ch === 0x3F/* ? */) { + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = true; + allowCompact = true; + + } else if (atExplicitKey) { + // i.e. 0x3A/* : */ === character after the explicit key. + atExplicitKey = false; + allowCompact = true; + + } else { + throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); + } + + state.position += 1; + ch = following; + + // + // Implicit notation case. Flow-style node as the key first, then ":", and the value. + // + } else if (composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { + + if (state.line === _line) { + ch = state.input.charCodeAt(state.position); + + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (ch === 0x3A/* : */) { + ch = state.input.charCodeAt(++state.position); + + if (!is_WS_OR_EOL(ch)) { + throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping'); + } + + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = false; + allowCompact = false; + keyTag = state.tag; + keyNode = state.result; + + } else if (detected) { + throwError(state, 'can not read an implicit mapping pair; a colon is missed'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + + } else if (detected) { + throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + + } else { + break; // Reading is done. Go to the epilogue. + } + + // + // Common reading code for both explicit and implicit notations. + // + if (state.line === _line || state.lineIndent > nodeIndent) { + if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { + if (atExplicitKey) { + keyNode = state.result; + } else { + valueNode = state.result; + } + } + + if (!atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _pos); + keyTag = keyNode = valueNode = null; + } + + skipSeparationSpace(state, true, -1); + ch = state.input.charCodeAt(state.position); + } + + if (state.lineIndent > nodeIndent && (ch !== 0)) { + throwError(state, 'bad indentation of a mapping entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + // + // Epilogue. + // + + // Special case: last mapping's node contains only the key in explicit notation. + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); + } + + // Expose the resulting mapping. + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'mapping'; + state.result = _result; + } + + return detected; +} + +function readTagProperty(state) { + var _position, + isVerbatim = false, + isNamed = false, + tagHandle, + tagName, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x21/* ! */) return false; + + if (state.tag !== null) { + throwError(state, 'duplication of a tag property'); + } + + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x3C/* < */) { + isVerbatim = true; + ch = state.input.charCodeAt(++state.position); + + } else if (ch === 0x21/* ! */) { + isNamed = true; + tagHandle = '!!'; + ch = state.input.charCodeAt(++state.position); + + } else { + tagHandle = '!'; + } + + _position = state.position; + + if (isVerbatim) { + do { ch = state.input.charCodeAt(++state.position); } + while (ch !== 0 && ch !== 0x3E/* > */); + + if (state.position < state.length) { + tagName = state.input.slice(_position, state.position); + ch = state.input.charCodeAt(++state.position); + } else { + throwError(state, 'unexpected end of the stream within a verbatim tag'); + } + } else { + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + + if (ch === 0x21/* ! */) { + if (!isNamed) { + tagHandle = state.input.slice(_position - 1, state.position + 1); + + if (!PATTERN_TAG_HANDLE.test(tagHandle)) { + throwError(state, 'named tag handle cannot contain such characters'); + } + + isNamed = true; + _position = state.position + 1; + } else { + throwError(state, 'tag suffix cannot contain exclamation marks'); + } + } + + ch = state.input.charCodeAt(++state.position); + } + + tagName = state.input.slice(_position, state.position); + + if (PATTERN_FLOW_INDICATORS.test(tagName)) { + throwError(state, 'tag suffix cannot contain flow indicator characters'); + } + } + + if (tagName && !PATTERN_TAG_URI.test(tagName)) { + throwError(state, 'tag name cannot contain such characters: ' + tagName); + } + + if (isVerbatim) { + state.tag = tagName; + + } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) { + state.tag = state.tagMap[tagHandle] + tagName; + + } else if (tagHandle === '!') { + state.tag = '!' + tagName; + + } else if (tagHandle === '!!') { + state.tag = 'tag:yaml.org,2002:' + tagName; + + } else { + throwError(state, 'undeclared tag handle "' + tagHandle + '"'); + } + + return true; +} + +function readAnchorProperty(state) { + var _position, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x26/* & */) return false; + + if (state.anchor !== null) { + throwError(state, 'duplication of an anchor property'); + } + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an anchor node must contain at least one character'); + } + + state.anchor = state.input.slice(_position, state.position); + return true; +} + +function readAlias(state) { + var _position, alias, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x2A/* * */) return false; + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an alias node must contain at least one character'); + } + + alias = state.input.slice(_position, state.position); + + if (!_hasOwnProperty.call(state.anchorMap, alias)) { + throwError(state, 'unidentified alias "' + alias + '"'); + } + + state.result = state.anchorMap[alias]; + skipSeparationSpace(state, true, -1); + return true; +} + +function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { + var allowBlockStyles, + allowBlockScalars, + allowBlockCollections, + indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } + } + + if (indentStatus === 1) { + while (readTagProperty(state) || readAnchorProperty(state)) { + if (skipSeparationSpace(state, true, -1)) { + atNewLine = true; + allowBlockCollections = allowBlockStyles; + + if (state.lineIndent > parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } else { + allowBlockCollections = false; + } + } + } + + if (allowBlockCollections) { + allowBlockCollections = atNewLine || allowCompact; + } + + if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { + if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { + flowIndent = parentIndent; + } else { + flowIndent = parentIndent + 1; + } + + blockIndent = state.position - state.lineStart; + + if (indentStatus === 1) { + if (allowBlockCollections && + (readBlockSequence(state, blockIndent) || + readBlockMapping(state, blockIndent, flowIndent)) || + readFlowCollection(state, flowIndent)) { + hasContent = true; + } else { + if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || + readSingleQuotedScalar(state, flowIndent) || + readDoubleQuotedScalar(state, flowIndent)) { + hasContent = true; + + } else if (readAlias(state)) { + hasContent = true; + + if (state.tag !== null || state.anchor !== null) { + throwError(state, 'alias node should not have any properties'); + } + + } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { + hasContent = true; + + if (state.tag === null) { + state.tag = '?'; + } + } + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } else if (indentStatus === 0) { + // Special case: block sequences are allowed to have same indentation level as the parent. + // http://www.yaml.org/spec/1.2/spec.html#id2799784 + hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); + } + } + + if (state.tag !== null && state.tag !== '!') { + if (state.tag === '?') { + // Implicit resolving is not allowed for non-scalar types, and '?' + // non-specific tag is only automatically assigned to plain scalars. + // + // We only need to check kind conformity in case user explicitly assigns '?' + // tag, for example like this: "! [0]" + // + if (state.result !== null && state.kind !== 'scalar') { + throwError(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); + } + + for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { + type = state.implicitTypes[typeIndex]; + + if (type.resolve(state.result)) { // `state.result` updated in resolver if matched + state.result = type.construct(state.result); + state.tag = type.tag; + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + break; + } + } + } else if (_hasOwnProperty.call(state.typeMap[state.kind || 'fallback'], state.tag)) { + type = state.typeMap[state.kind || 'fallback'][state.tag]; + + if (state.result !== null && type.kind !== state.kind) { + throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); + } + + if (!type.resolve(state.result)) { // `state.result` updated in resolver if matched + throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); + } else { + state.result = type.construct(state.result); + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } else { + throwError(state, 'unknown tag !<' + state.tag + '>'); + } + } + + if (state.listener !== null) { + state.listener('close', state); + } + return state.tag !== null || state.anchor !== null || hasContent; +} + +function readDocument(state) { + var documentStart = state.position, + _position, + directiveName, + directiveArgs, + hasDirectives = false, + ch; + + state.version = null; + state.checkLineBreaks = state.legacy; + state.tagMap = {}; + state.anchorMap = {}; + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if (state.lineIndent > 0 || ch !== 0x25/* % */) { + break; + } + + hasDirectives = true; + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + directiveName = state.input.slice(_position, state.position); + directiveArgs = []; + + if (directiveName.length < 1) { + throwError(state, 'directive name must not be less than one character in length'); + } + + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (ch === 0x23/* # */) { + do { ch = state.input.charCodeAt(++state.position); } + while (ch !== 0 && !is_EOL(ch)); + break; + } + + if (is_EOL(ch)) break; + + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + directiveArgs.push(state.input.slice(_position, state.position)); + } + + if (ch !== 0) readLineBreak(state); + + if (_hasOwnProperty.call(directiveHandlers, directiveName)) { + directiveHandlers[directiveName](state, directiveName, directiveArgs); + } else { + throwWarning(state, 'unknown document directive "' + directiveName + '"'); + } + } + + skipSeparationSpace(state, true, -1); + + if (state.lineIndent === 0 && + state.input.charCodeAt(state.position) === 0x2D/* - */ && + state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && + state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { + state.position += 3; + skipSeparationSpace(state, true, -1); + + } else if (hasDirectives) { + throwError(state, 'directives end mark is expected'); + } + + composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); + skipSeparationSpace(state, true, -1); + + if (state.checkLineBreaks && + PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { + throwWarning(state, 'non-ASCII line breaks are interpreted as content'); + } + + state.documents.push(state.result); + + if (state.position === state.lineStart && testDocumentSeparator(state)) { + + if (state.input.charCodeAt(state.position) === 0x2E/* . */) { + state.position += 3; + skipSeparationSpace(state, true, -1); + } + return; + } + + if (state.position < (state.length - 1)) { + throwError(state, 'end of the stream or a document separator is expected'); + } else { + return; + } +} + + +function loadDocuments(input, options) { + input = String(input); + options = options || {}; + + if (input.length !== 0) { + + // Add tailing `\n` if not exists + if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && + input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { + input += '\n'; + } + + // Strip BOM + if (input.charCodeAt(0) === 0xFEFF) { + input = input.slice(1); + } + } + + var state = new State(input, options); + + var nullpos = input.indexOf('\0'); + + if (nullpos !== -1) { + state.position = nullpos; + throwError(state, 'null byte is not allowed in input'); + } + + // Use 0 as string terminator. That significantly simplifies bounds check. + state.input += '\0'; + + while (state.input.charCodeAt(state.position) === 0x20/* Space */) { + state.lineIndent += 1; + state.position += 1; + } + + while (state.position < (state.length - 1)) { + readDocument(state); + } + + return state.documents; +} + + +function loadAll(input, iterator, options) { + if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') { + options = iterator; + iterator = null; + } + + var documents = loadDocuments(input, options); + + if (typeof iterator !== 'function') { + return documents; + } + + for (var index = 0, length = documents.length; index < length; index += 1) { + iterator(documents[index]); + } +} + + +function load(input, options) { + var documents = loadDocuments(input, options); + + if (documents.length === 0) { + /*eslint-disable no-undefined*/ + return undefined; + } else if (documents.length === 1) { + return documents[0]; + } + throw new YAMLException('expected a single document in the stream, but found more'); +} + + +function safeLoadAll(input, iterator, options) { + if (typeof iterator === 'object' && iterator !== null && typeof options === 'undefined') { + options = iterator; + iterator = null; + } + + return loadAll(input, iterator, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + + +function safeLoad(input, options) { + return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + + +module.exports.loadAll = loadAll; +module.exports.load = load; +module.exports.safeLoadAll = safeLoadAll; +module.exports.safeLoad = safeLoad; + +},{"./common":2,"./exception":4,"./mark":6,"./schema/default_full":9,"./schema/default_safe":10}],6:[function(require,module,exports){ +'use strict'; + + +var common = require('./common'); + + +function Mark(name, buffer, position, line, column) { + this.name = name; + this.buffer = buffer; + this.position = position; + this.line = line; + this.column = column; +} + + +Mark.prototype.getSnippet = function getSnippet(indent, maxLength) { + var head, start, tail, end, snippet; + + if (!this.buffer) return null; + + indent = indent || 4; + maxLength = maxLength || 75; + + head = ''; + start = this.position; + + while (start > 0 && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(start - 1)) === -1) { + start -= 1; + if (this.position - start > (maxLength / 2 - 1)) { + head = ' ... '; + start += 5; + break; + } + } + + tail = ''; + end = this.position; + + while (end < this.buffer.length && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(end)) === -1) { + end += 1; + if (end - this.position > (maxLength / 2 - 1)) { + tail = ' ... '; + end -= 5; + break; + } + } + + snippet = this.buffer.slice(start, end); + + return common.repeat(' ', indent) + head + snippet + tail + '\n' + + common.repeat(' ', indent + this.position - start + head.length) + '^'; +}; + + +Mark.prototype.toString = function toString(compact) { + var snippet, where = ''; + + if (this.name) { + where += 'in "' + this.name + '" '; + } + + where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1); + + if (!compact) { + snippet = this.getSnippet(); + + if (snippet) { + where += ':\n' + snippet; + } + } + + return where; +}; + + +module.exports = Mark; + +},{"./common":2}],7:[function(require,module,exports){ +'use strict'; + +/*eslint-disable max-len*/ + +var common = require('./common'); +var YAMLException = require('./exception'); +var Type = require('./type'); + + +function compileList(schema, name, result) { + var exclude = []; + + schema.include.forEach(function (includedSchema) { + result = compileList(includedSchema, name, result); + }); + + schema[name].forEach(function (currentType) { + result.forEach(function (previousType, previousIndex) { + if (previousType.tag === currentType.tag && previousType.kind === currentType.kind) { + exclude.push(previousIndex); + } + }); + + result.push(currentType); + }); + + return result.filter(function (type, index) { + return exclude.indexOf(index) === -1; + }); +} + + +function compileMap(/* lists... */) { + var result = { + scalar: {}, + sequence: {}, + mapping: {}, + fallback: {} + }, index, length; + + function collectType(type) { + result[type.kind][type.tag] = result['fallback'][type.tag] = type; + } + + for (index = 0, length = arguments.length; index < length; index += 1) { + arguments[index].forEach(collectType); + } + return result; +} + + +function Schema(definition) { + this.include = definition.include || []; + this.implicit = definition.implicit || []; + this.explicit = definition.explicit || []; + + this.implicit.forEach(function (type) { + if (type.loadKind && type.loadKind !== 'scalar') { + throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); + } + }); + + this.compiledImplicit = compileList(this, 'implicit', []); + this.compiledExplicit = compileList(this, 'explicit', []); + this.compiledTypeMap = compileMap(this.compiledImplicit, this.compiledExplicit); +} + + +Schema.DEFAULT = null; + + +Schema.create = function createSchema() { + var schemas, types; + + switch (arguments.length) { + case 1: + schemas = Schema.DEFAULT; + types = arguments[0]; + break; + + case 2: + schemas = arguments[0]; + types = arguments[1]; + break; + + default: + throw new YAMLException('Wrong number of arguments for Schema.create function'); + } + + schemas = common.toArray(schemas); + types = common.toArray(types); + + if (!schemas.every(function (schema) { return schema instanceof Schema; })) { + throw new YAMLException('Specified list of super schemas (or a single Schema object) contains a non-Schema object.'); + } + + if (!types.every(function (type) { return type instanceof Type; })) { + throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + + return new Schema({ + include: schemas, + explicit: types + }); +}; + + +module.exports = Schema; + +},{"./common":2,"./exception":4,"./type":13}],8:[function(require,module,exports){ +// Standard YAML's Core schema. +// http://www.yaml.org/spec/1.2/spec.html#id2804923 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, Core schema has no distinctions from JSON schema is JS-YAML. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + include: [ + require('./json') + ] +}); + +},{"../schema":7,"./json":12}],9:[function(require,module,exports){ +// JS-YAML's default schema for `load` function. +// It is not described in the YAML specification. +// +// This schema is based on JS-YAML's default safe schema and includes +// JavaScript-specific types: !!js/undefined, !!js/regexp and !!js/function. +// +// Also this schema is used as default base schema at `Schema.create` function. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = Schema.DEFAULT = new Schema({ + include: [ + require('./default_safe') + ], + explicit: [ + require('../type/js/undefined'), + require('../type/js/regexp'), + require('../type/js/function') + ] +}); + +},{"../schema":7,"../type/js/function":18,"../type/js/regexp":19,"../type/js/undefined":20,"./default_safe":10}],10:[function(require,module,exports){ +// JS-YAML's default schema for `safeLoad` function. +// It is not described in the YAML specification. +// +// This schema is based on standard YAML's Core schema and includes most of +// extra types described at YAML tag repository. (http://yaml.org/type/) + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + include: [ + require('./core') + ], + implicit: [ + require('../type/timestamp'), + require('../type/merge') + ], + explicit: [ + require('../type/binary'), + require('../type/omap'), + require('../type/pairs'), + require('../type/set') + ] +}); + +},{"../schema":7,"../type/binary":14,"../type/merge":22,"../type/omap":24,"../type/pairs":25,"../type/set":27,"../type/timestamp":29,"./core":8}],11:[function(require,module,exports){ +// Standard YAML's Failsafe schema. +// http://www.yaml.org/spec/1.2/spec.html#id2802346 + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + explicit: [ + require('../type/str'), + require('../type/seq'), + require('../type/map') + ] +}); + +},{"../schema":7,"../type/map":21,"../type/seq":26,"../type/str":28}],12:[function(require,module,exports){ +// Standard YAML's JSON schema. +// http://www.yaml.org/spec/1.2/spec.html#id2803231 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, this schema is not such strict as defined in the YAML specification. +// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + include: [ + require('./failsafe') + ], + implicit: [ + require('../type/null'), + require('../type/bool'), + require('../type/int'), + require('../type/float') + ] +}); + +},{"../schema":7,"../type/bool":15,"../type/float":16,"../type/int":17,"../type/null":23,"./failsafe":11}],13:[function(require,module,exports){ +'use strict'; + +var YAMLException = require('./exception'); + +var TYPE_CONSTRUCTOR_OPTIONS = [ + 'kind', + 'resolve', + 'construct', + 'instanceOf', + 'predicate', + 'represent', + 'defaultStyle', + 'styleAliases' +]; + +var YAML_NODE_KINDS = [ + 'scalar', + 'sequence', + 'mapping' +]; + +function compileStyleAliases(map) { + var result = {}; + + if (map !== null) { + Object.keys(map).forEach(function (style) { + map[style].forEach(function (alias) { + result[String(alias)] = style; + }); + }); + } + + return result; +} + +function Type(tag, options) { + options = options || {}; + + Object.keys(options).forEach(function (name) { + if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { + throw new YAMLException('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); + } + }); + + // TODO: Add tag format check. + this.tag = tag; + this.kind = options['kind'] || null; + this.resolve = options['resolve'] || function () { return true; }; + this.construct = options['construct'] || function (data) { return data; }; + this.instanceOf = options['instanceOf'] || null; + this.predicate = options['predicate'] || null; + this.represent = options['represent'] || null; + this.defaultStyle = options['defaultStyle'] || null; + this.styleAliases = compileStyleAliases(options['styleAliases'] || null); + + if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { + throw new YAMLException('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + } +} + +module.exports = Type; + +},{"./exception":4}],14:[function(require,module,exports){ +'use strict'; + +/*eslint-disable no-bitwise*/ + +var NodeBuffer; + +try { + // A trick for browserified version, to not include `Buffer` shim + var _require = require; + NodeBuffer = _require('buffer').Buffer; +} catch (__) {} + +var Type = require('../type'); + + +// [ 64, 65, 66 ] -> [ padding, CR, LF ] +var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; + + +function resolveYamlBinary(data) { + if (data === null) return false; + + var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP; + + // Convert one by one. + for (idx = 0; idx < max; idx++) { + code = map.indexOf(data.charAt(idx)); + + // Skip CR/LF + if (code > 64) continue; + + // Fail on illegal characters + if (code < 0) return false; + + bitlen += 6; + } + + // If there are any bits left, source was corrupted + return (bitlen % 8) === 0; +} + +function constructYamlBinary(data) { + var idx, tailbits, + input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan + max = input.length, + map = BASE64_MAP, + bits = 0, + result = []; + + // Collect by 6*4 bits (3 bytes) + + for (idx = 0; idx < max; idx++) { + if ((idx % 4 === 0) && idx) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } + + bits = (bits << 6) | map.indexOf(input.charAt(idx)); + } + + // Dump tail + + tailbits = (max % 4) * 6; + + if (tailbits === 0) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } else if (tailbits === 18) { + result.push((bits >> 10) & 0xFF); + result.push((bits >> 2) & 0xFF); + } else if (tailbits === 12) { + result.push((bits >> 4) & 0xFF); + } + + // Wrap into Buffer for NodeJS and leave Array for browser + if (NodeBuffer) { + // Support node 6.+ Buffer API when available + return NodeBuffer.from ? NodeBuffer.from(result) : new NodeBuffer(result); + } + + return result; +} + +function representYamlBinary(object /*, style*/) { + var result = '', bits = 0, idx, tail, + max = object.length, + map = BASE64_MAP; + + // Convert every three bytes to 4 ASCII characters. + + for (idx = 0; idx < max; idx++) { + if ((idx % 3 === 0) && idx) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } + + bits = (bits << 8) + object[idx]; + } + + // Dump tail + + tail = max % 3; + + if (tail === 0) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } else if (tail === 2) { + result += map[(bits >> 10) & 0x3F]; + result += map[(bits >> 4) & 0x3F]; + result += map[(bits << 2) & 0x3F]; + result += map[64]; + } else if (tail === 1) { + result += map[(bits >> 2) & 0x3F]; + result += map[(bits << 4) & 0x3F]; + result += map[64]; + result += map[64]; + } + + return result; +} + +function isBinary(object) { + return NodeBuffer && NodeBuffer.isBuffer(object); +} + +module.exports = new Type('tag:yaml.org,2002:binary', { + kind: 'scalar', + resolve: resolveYamlBinary, + construct: constructYamlBinary, + predicate: isBinary, + represent: representYamlBinary +}); + +},{"../type":13}],15:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +function resolveYamlBoolean(data) { + if (data === null) return false; + + var max = data.length; + + return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) || + (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); +} + +function constructYamlBoolean(data) { + return data === 'true' || + data === 'True' || + data === 'TRUE'; +} + +function isBoolean(object) { + return Object.prototype.toString.call(object) === '[object Boolean]'; +} + +module.exports = new Type('tag:yaml.org,2002:bool', { + kind: 'scalar', + resolve: resolveYamlBoolean, + construct: constructYamlBoolean, + predicate: isBoolean, + represent: { + lowercase: function (object) { return object ? 'true' : 'false'; }, + uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, + camelcase: function (object) { return object ? 'True' : 'False'; } + }, + defaultStyle: 'lowercase' +}); + +},{"../type":13}],16:[function(require,module,exports){ +'use strict'; + +var common = require('../common'); +var Type = require('../type'); + +var YAML_FLOAT_PATTERN = new RegExp( + // 2.5e4, 2.5 and integers + '^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + + // .2e4, .2 + // special case, seems not from spec + '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + + // 20:59 + '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*' + + // .inf + '|[-+]?\\.(?:inf|Inf|INF)' + + // .nan + '|\\.(?:nan|NaN|NAN))$'); + +function resolveYamlFloat(data) { + if (data === null) return false; + + if (!YAML_FLOAT_PATTERN.test(data) || + // Quick hack to not allow integers end with `_` + // Probably should update regexp & check speed + data[data.length - 1] === '_') { + return false; + } + + return true; +} + +function constructYamlFloat(data) { + var value, sign, base, digits; + + value = data.replace(/_/g, '').toLowerCase(); + sign = value[0] === '-' ? -1 : 1; + digits = []; + + if ('+-'.indexOf(value[0]) >= 0) { + value = value.slice(1); + } + + if (value === '.inf') { + return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; + + } else if (value === '.nan') { + return NaN; + + } else if (value.indexOf(':') >= 0) { + value.split(':').forEach(function (v) { + digits.unshift(parseFloat(v, 10)); + }); + + value = 0.0; + base = 1; + + digits.forEach(function (d) { + value += d * base; + base *= 60; + }); + + return sign * value; + + } + return sign * parseFloat(value, 10); +} + + +var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; + +function representYamlFloat(object, style) { + var res; + + if (isNaN(object)) { + switch (style) { + case 'lowercase': return '.nan'; + case 'uppercase': return '.NAN'; + case 'camelcase': return '.NaN'; + } + } else if (Number.POSITIVE_INFINITY === object) { + switch (style) { + case 'lowercase': return '.inf'; + case 'uppercase': return '.INF'; + case 'camelcase': return '.Inf'; + } + } else if (Number.NEGATIVE_INFINITY === object) { + switch (style) { + case 'lowercase': return '-.inf'; + case 'uppercase': return '-.INF'; + case 'camelcase': return '-.Inf'; + } + } else if (common.isNegativeZero(object)) { + return '-0.0'; + } + + res = object.toString(10); + + // JS stringifier can build scientific format without dots: 5e-100, + // while YAML requres dot: 5.e-100. Fix it with simple hack + + return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res; +} + +function isFloat(object) { + return (Object.prototype.toString.call(object) === '[object Number]') && + (object % 1 !== 0 || common.isNegativeZero(object)); +} + +module.exports = new Type('tag:yaml.org,2002:float', { + kind: 'scalar', + resolve: resolveYamlFloat, + construct: constructYamlFloat, + predicate: isFloat, + represent: representYamlFloat, + defaultStyle: 'lowercase' +}); + +},{"../common":2,"../type":13}],17:[function(require,module,exports){ +'use strict'; + +var common = require('../common'); +var Type = require('../type'); + +function isHexCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || + ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || + ((0x61/* a */ <= c) && (c <= 0x66/* f */)); +} + +function isOctCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); +} + +function isDecCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); +} + +function resolveYamlInteger(data) { + if (data === null) return false; + + var max = data.length, + index = 0, + hasDigits = false, + ch; + + if (!max) return false; + + ch = data[index]; + + // sign + if (ch === '-' || ch === '+') { + ch = data[++index]; + } + + if (ch === '0') { + // 0 + if (index + 1 === max) return true; + ch = data[++index]; + + // base 2, base 8, base 16 + + if (ch === 'b') { + // base 2 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (ch !== '0' && ch !== '1') return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + + if (ch === 'x') { + // base 16 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isHexCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + // base 8 + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isOctCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + // base 10 (except 0) or base 60 + + // value should not start with `_`; + if (ch === '_') return false; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (ch === ':') break; + if (!isDecCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + + // Should have digits and should not end with `_` + if (!hasDigits || ch === '_') return false; + + // if !base60 - done; + if (ch !== ':') return true; + + // base60 almost not used, no needs to optimize + return /^(:[0-5]?[0-9])+$/.test(data.slice(index)); +} + +function constructYamlInteger(data) { + var value = data, sign = 1, ch, base, digits = []; + + if (value.indexOf('_') !== -1) { + value = value.replace(/_/g, ''); + } + + ch = value[0]; + + if (ch === '-' || ch === '+') { + if (ch === '-') sign = -1; + value = value.slice(1); + ch = value[0]; + } + + if (value === '0') return 0; + + if (ch === '0') { + if (value[1] === 'b') return sign * parseInt(value.slice(2), 2); + if (value[1] === 'x') return sign * parseInt(value, 16); + return sign * parseInt(value, 8); + } + + if (value.indexOf(':') !== -1) { + value.split(':').forEach(function (v) { + digits.unshift(parseInt(v, 10)); + }); + + value = 0; + base = 1; + + digits.forEach(function (d) { + value += (d * base); + base *= 60; + }); + + return sign * value; + + } + + return sign * parseInt(value, 10); +} + +function isInteger(object) { + return (Object.prototype.toString.call(object)) === '[object Number]' && + (object % 1 === 0 && !common.isNegativeZero(object)); +} + +module.exports = new Type('tag:yaml.org,2002:int', { + kind: 'scalar', + resolve: resolveYamlInteger, + construct: constructYamlInteger, + predicate: isInteger, + represent: { + binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); }, + octal: function (obj) { return obj >= 0 ? '0' + obj.toString(8) : '-0' + obj.toString(8).slice(1); }, + decimal: function (obj) { return obj.toString(10); }, + /* eslint-disable max-len */ + hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); } + }, + defaultStyle: 'decimal', + styleAliases: { + binary: [ 2, 'bin' ], + octal: [ 8, 'oct' ], + decimal: [ 10, 'dec' ], + hexadecimal: [ 16, 'hex' ] + } +}); + +},{"../common":2,"../type":13}],18:[function(require,module,exports){ +'use strict'; + +var esprima; + +// Browserified version does not have esprima +// +// 1. For node.js just require module as deps +// 2. For browser try to require mudule via external AMD system. +// If not found - try to fallback to window.esprima. If not +// found too - then fail to parse. +// +try { + // workaround to exclude package from browserify list. + var _require = require; + esprima = _require('esprima'); +} catch (_) { + /* eslint-disable no-redeclare */ + /* global window */ + if (typeof window !== 'undefined') esprima = window.esprima; +} + +var Type = require('../../type'); + +function resolveJavascriptFunction(data) { + if (data === null) return false; + + try { + var source = '(' + data + ')', + ast = esprima.parse(source, { range: true }); + + if (ast.type !== 'Program' || + ast.body.length !== 1 || + ast.body[0].type !== 'ExpressionStatement' || + (ast.body[0].expression.type !== 'ArrowFunctionExpression' && + ast.body[0].expression.type !== 'FunctionExpression')) { + return false; + } + + return true; + } catch (err) { + return false; + } +} + +function constructJavascriptFunction(data) { + /*jslint evil:true*/ + + var source = '(' + data + ')', + ast = esprima.parse(source, { range: true }), + params = [], + body; + + if (ast.type !== 'Program' || + ast.body.length !== 1 || + ast.body[0].type !== 'ExpressionStatement' || + (ast.body[0].expression.type !== 'ArrowFunctionExpression' && + ast.body[0].expression.type !== 'FunctionExpression')) { + throw new Error('Failed to resolve function'); + } + + ast.body[0].expression.params.forEach(function (param) { + params.push(param.name); + }); + + body = ast.body[0].expression.body.range; + + // Esprima's ranges include the first '{' and the last '}' characters on + // function expressions. So cut them out. + if (ast.body[0].expression.body.type === 'BlockStatement') { + /*eslint-disable no-new-func*/ + return new Function(params, source.slice(body[0] + 1, body[1] - 1)); + } + // ES6 arrow functions can omit the BlockStatement. In that case, just return + // the body. + /*eslint-disable no-new-func*/ + return new Function(params, 'return ' + source.slice(body[0], body[1])); +} + +function representJavascriptFunction(object /*, style*/) { + return object.toString(); +} + +function isFunction(object) { + return Object.prototype.toString.call(object) === '[object Function]'; +} + +module.exports = new Type('tag:yaml.org,2002:js/function', { + kind: 'scalar', + resolve: resolveJavascriptFunction, + construct: constructJavascriptFunction, + predicate: isFunction, + represent: representJavascriptFunction +}); + +},{"../../type":13}],19:[function(require,module,exports){ +'use strict'; + +var Type = require('../../type'); + +function resolveJavascriptRegExp(data) { + if (data === null) return false; + if (data.length === 0) return false; + + var regexp = data, + tail = /\/([gim]*)$/.exec(data), + modifiers = ''; + + // if regexp starts with '/' it can have modifiers and must be properly closed + // `/foo/gim` - modifiers tail can be maximum 3 chars + if (regexp[0] === '/') { + if (tail) modifiers = tail[1]; + + if (modifiers.length > 3) return false; + // if expression starts with /, is should be properly terminated + if (regexp[regexp.length - modifiers.length - 1] !== '/') return false; + } + + return true; +} + +function constructJavascriptRegExp(data) { + var regexp = data, + tail = /\/([gim]*)$/.exec(data), + modifiers = ''; + + // `/foo/gim` - tail can be maximum 4 chars + if (regexp[0] === '/') { + if (tail) modifiers = tail[1]; + regexp = regexp.slice(1, regexp.length - modifiers.length - 1); + } + + return new RegExp(regexp, modifiers); +} + +function representJavascriptRegExp(object /*, style*/) { + var result = '/' + object.source + '/'; + + if (object.global) result += 'g'; + if (object.multiline) result += 'm'; + if (object.ignoreCase) result += 'i'; + + return result; +} + +function isRegExp(object) { + return Object.prototype.toString.call(object) === '[object RegExp]'; +} + +module.exports = new Type('tag:yaml.org,2002:js/regexp', { + kind: 'scalar', + resolve: resolveJavascriptRegExp, + construct: constructJavascriptRegExp, + predicate: isRegExp, + represent: representJavascriptRegExp +}); + +},{"../../type":13}],20:[function(require,module,exports){ +'use strict'; + +var Type = require('../../type'); + +function resolveJavascriptUndefined() { + return true; +} + +function constructJavascriptUndefined() { + /*eslint-disable no-undefined*/ + return undefined; +} + +function representJavascriptUndefined() { + return ''; +} + +function isUndefined(object) { + return typeof object === 'undefined'; +} + +module.exports = new Type('tag:yaml.org,2002:js/undefined', { + kind: 'scalar', + resolve: resolveJavascriptUndefined, + construct: constructJavascriptUndefined, + predicate: isUndefined, + represent: representJavascriptUndefined +}); + +},{"../../type":13}],21:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:map', { + kind: 'mapping', + construct: function (data) { return data !== null ? data : {}; } +}); + +},{"../type":13}],22:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +function resolveYamlMerge(data) { + return data === '<<' || data === null; +} + +module.exports = new Type('tag:yaml.org,2002:merge', { + kind: 'scalar', + resolve: resolveYamlMerge +}); + +},{"../type":13}],23:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +function resolveYamlNull(data) { + if (data === null) return true; + + var max = data.length; + + return (max === 1 && data === '~') || + (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); +} + +function constructYamlNull() { + return null; +} + +function isNull(object) { + return object === null; +} + +module.exports = new Type('tag:yaml.org,2002:null', { + kind: 'scalar', + resolve: resolveYamlNull, + construct: constructYamlNull, + predicate: isNull, + represent: { + canonical: function () { return '~'; }, + lowercase: function () { return 'null'; }, + uppercase: function () { return 'NULL'; }, + camelcase: function () { return 'Null'; } + }, + defaultStyle: 'lowercase' +}); + +},{"../type":13}],24:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +var _hasOwnProperty = Object.prototype.hasOwnProperty; +var _toString = Object.prototype.toString; + +function resolveYamlOmap(data) { + if (data === null) return true; + + var objectKeys = [], index, length, pair, pairKey, pairHasKey, + object = data; + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + pairHasKey = false; + + if (_toString.call(pair) !== '[object Object]') return false; + + for (pairKey in pair) { + if (_hasOwnProperty.call(pair, pairKey)) { + if (!pairHasKey) pairHasKey = true; + else return false; + } + } + + if (!pairHasKey) return false; + + if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); + else return false; + } + + return true; +} + +function constructYamlOmap(data) { + return data !== null ? data : []; +} + +module.exports = new Type('tag:yaml.org,2002:omap', { + kind: 'sequence', + resolve: resolveYamlOmap, + construct: constructYamlOmap +}); + +},{"../type":13}],25:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +var _toString = Object.prototype.toString; + +function resolveYamlPairs(data) { + if (data === null) return true; + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + if (_toString.call(pair) !== '[object Object]') return false; + + keys = Object.keys(pair); + + if (keys.length !== 1) return false; + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return true; +} + +function constructYamlPairs(data) { + if (data === null) return []; + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + keys = Object.keys(pair); + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return result; +} + +module.exports = new Type('tag:yaml.org,2002:pairs', { + kind: 'sequence', + resolve: resolveYamlPairs, + construct: constructYamlPairs +}); + +},{"../type":13}],26:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:seq', { + kind: 'sequence', + construct: function (data) { return data !== null ? data : []; } +}); + +},{"../type":13}],27:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +function resolveYamlSet(data) { + if (data === null) return true; + + var key, object = data; + + for (key in object) { + if (_hasOwnProperty.call(object, key)) { + if (object[key] !== null) return false; + } + } + + return true; +} + +function constructYamlSet(data) { + return data !== null ? data : {}; +} + +module.exports = new Type('tag:yaml.org,2002:set', { + kind: 'mapping', + resolve: resolveYamlSet, + construct: constructYamlSet +}); + +},{"../type":13}],28:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:str', { + kind: 'scalar', + construct: function (data) { return data !== null ? data : ''; } +}); + +},{"../type":13}],29:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +var YAML_DATE_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9])' + // [2] month + '-([0-9][0-9])$'); // [3] day + +var YAML_TIMESTAMP_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9]?)' + // [2] month + '-([0-9][0-9]?)' + // [3] day + '(?:[Tt]|[ \\t]+)' + // ... + '([0-9][0-9]?)' + // [4] hour + ':([0-9][0-9])' + // [5] minute + ':([0-9][0-9])' + // [6] second + '(?:\\.([0-9]*))?' + // [7] fraction + '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour + '(?::([0-9][0-9]))?))?$'); // [11] tz_minute + +function resolveYamlTimestamp(data) { + if (data === null) return false; + if (YAML_DATE_REGEXP.exec(data) !== null) return true; + if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; + return false; +} + +function constructYamlTimestamp(data) { + var match, year, month, day, hour, minute, second, fraction = 0, + delta = null, tz_hour, tz_minute, date; + + match = YAML_DATE_REGEXP.exec(data); + if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); + + if (match === null) throw new Error('Date resolve error'); + + // match: [1] year [2] month [3] day + + year = +(match[1]); + month = +(match[2]) - 1; // JS month starts with 0 + day = +(match[3]); + + if (!match[4]) { // no hour + return new Date(Date.UTC(year, month, day)); + } + + // match: [4] hour [5] minute [6] second [7] fraction + + hour = +(match[4]); + minute = +(match[5]); + second = +(match[6]); + + if (match[7]) { + fraction = match[7].slice(0, 3); + while (fraction.length < 3) { // milli-seconds + fraction += '0'; + } + fraction = +fraction; + } + + // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute + + if (match[9]) { + tz_hour = +(match[10]); + tz_minute = +(match[11] || 0); + delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds + if (match[9] === '-') delta = -delta; + } + + date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); + + if (delta) date.setTime(date.getTime() - delta); + + return date; +} + +function representYamlTimestamp(object /*, style*/) { + return object.toISOString(); +} + +module.exports = new Type('tag:yaml.org,2002:timestamp', { + kind: 'scalar', + resolve: resolveYamlTimestamp, + construct: constructYamlTimestamp, + instanceOf: Date, + represent: representYamlTimestamp +}); + +},{"../type":13}],"/":[function(require,module,exports){ +'use strict'; + + +var yaml = require('./lib/js-yaml.js'); + + +module.exports = yaml; + +},{"./lib/js-yaml.js":1}]},{},[])("/") +}); diff --git a/node_modules/js-yaml/dist/js-yaml.min.js b/node_modules/js-yaml/dist/js-yaml.min.js new file mode 100644 index 00000000..1b6ecc16 --- /dev/null +++ b/node_modules/js-yaml/dist/js-yaml.min.js @@ -0,0 +1 @@ +/*! js-yaml 3.14.1 https://github.com/nodeca/js-yaml */!function(e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).jsyaml=e()}(function(){return function i(r,o,a){function s(t,e){if(!o[t]){if(!r[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(c)return c(t,!0);throw(n=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",n}n=o[t]={exports:{}},r[t][0].call(n.exports,function(e){return s(r[t][1][e]||e)},n,n.exports,i,r,o,a)}return o[t].exports}for(var c="function"==typeof require&&require,e=0;e=i.flowLevel;switch(V(r,n,i.indent,t,function(e){return function(e,t){for(var n=0,i=e.implicitTypes.length;n"+z(r,i.indent)+J(U(function(t,n){var e,i=/(\n+)([^\n]*)/g,r=function(){var e=-1!==(e=t.indexOf("\n"))?e:t.length;return i.lastIndex=e,Q(t.slice(0,e),n)}(),o="\n"===t[0]||" "===t[0];for(;e=i.exec(t);){var a=e[1],s=e[2];e=" "===s[0],r+=a+(o||e||""===s?"":"\n")+Q(s,n),o=e}return r}(r,t),e));case G:return'"'+function(e){for(var t,n,i,r="",o=0;ot&&o tag resolver accepts not "'+o+'" style');i=r.represent[o](t,o)}e.dump=i}return 1}}function ee(e,t,n,i,r,o){e.tag=null,e.dump=n,X(e,n,!1)||X(e,n,!0);var a=l.call(e.dump);i=i&&(e.flowLevel<0||e.flowLevel>t);var s,c,u="[object Object]"===a||"[object Array]"===a;if(u&&(c=-1!==(s=e.duplicates.indexOf(n))),(null!==e.tag&&"?"!==e.tag||c||2!==e.indent&&0 "+e.dump)}return 1}function te(e,t){var n,i,r=[],o=[];for(!function e(t,n,i){var r,o,a;if(null!==t&&"object"==typeof t)if(-1!==(o=n.indexOf(t)))-1===i.indexOf(o)&&i.push(o);else if(n.push(t),Array.isArray(t))for(o=0,a=t.length;o>10),56320+(c-65536&1023)),e.position++}else N(e,"unknown escape sequence");n=i=e.position}else S(u)?(L(e,n,i,!0),B(e,Y(e,!1,t)),n=i=e.position):e.position===e.lineStart&&R(e)?N(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}N(e,"unexpected end of the stream within a double quoted scalar")}}function K(e,t){var n,i,r=e.tag,o=e.anchor,a=[],s=!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=a),i=e.input.charCodeAt(e.position);0!==i&&45===i&&O(e.input.charCodeAt(e.position+1));)if(s=!0,e.position++,Y(e,!0,-1)&&e.lineIndent<=t)a.push(null),i=e.input.charCodeAt(e.position);else if(n=e.line,P(e,t,x,!1,!0),a.push(e.result),Y(e,!0,-1),i=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==i)N(e,"bad indentation of a sequence entry");else if(e.lineIndentt?p=1:e.lineIndent===t?p=0:e.lineIndentt?p=1:e.lineIndent===t?p=0:e.lineIndentt)&&(P(e,t,A,!0,r)&&(m?d=e.result:h=e.result),m||(U(e,l,p,f,d,h,o,a),f=d=h=null),Y(e,!0,-1),s=e.input.charCodeAt(e.position)),e.lineIndent>t&&0!==s)N(e,"bad indentation of a mapping entry");else if(e.lineIndentc&&(c=e.lineIndent),S(p))u++;else{if(e.lineIndent=t){a=!0,f=e.input.charCodeAt(e.position);continue}e.position=o,e.line=s,e.lineStart=c,e.lineIndent=u;break}}a&&(L(e,r,o,!1),B(e,e.line-s),r=o=e.position,a=!1),I(f)||(o=e.position+1),f=e.input.charCodeAt(++e.position)}if(L(e,r,o,!1),e.result)return 1;e.kind=l,e.result=p}}(e,i,g===n)&&(d=!0,null===e.tag&&(e.tag="?")):(d=!0,null===e.tag&&null===e.anchor||N(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===p&&(d=s&&K(e,r))),null!==e.tag&&"!"!==e.tag)if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&N(e,'unacceptable node kind for ! tag; it should be "scalar", not "'+e.kind+'"'),c=0,u=e.implicitTypes.length;c tag; it should be "'+l.kind+'", not "'+e.kind+'"'),l.resolve(e.result)?(e.result=l.construct(e.result),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):N(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")):N(e,"unknown tag !<"+e.tag+">");return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||d}function $(e,t){t=t||{},0!==(e=String(e)).length&&(10!==e.charCodeAt(e.length-1)&&13!==e.charCodeAt(e.length-1)&&(e+="\n"),65279===e.charCodeAt(0)&&(e=e.slice(1)));var n=new F(e,t),e=e.indexOf("\0");for(-1!==e&&(n.position=e,N(n,"null byte is not allowed in input")),n.input+="\0";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.positiont/2-1){n=" ... ",i+=5;break}for(r="",o=this.position;ot/2-1){r=" ... ",o-=5;break}return a=this.buffer.slice(i,o),s.repeat(" ",e)+n+a+r+"\n"+s.repeat(" ",e+this.position-i+n.length)+"^"},i.prototype.toString=function(e){var t="";return this.name&&(t+='in "'+this.name+'" '),t+="at line "+(this.line+1)+", column "+(this.column+1),e||(e=this.getSnippet())&&(t+=":\n"+e),t},t.exports=i},{"./common":2}],7:[function(e,t,n){"use strict";var r=e("./common"),o=e("./exception"),a=e("./type");function s(e,t,i){var r=[];return e.include.forEach(function(e){i=s(e,t,i)}),e[t].forEach(function(n){i.forEach(function(e,t){e.tag===n.tag&&e.kind===n.kind&&r.push(t)}),i.push(n)}),i.filter(function(e,t){return-1===r.indexOf(t)})}function c(e){this.include=e.include||[],this.implicit=e.implicit||[],this.explicit=e.explicit||[],this.implicit.forEach(function(e){if(e.loadKind&&"scalar"!==e.loadKind)throw new o("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.")}),this.compiledImplicit=s(this,"implicit",[]),this.compiledExplicit=s(this,"explicit",[]),this.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{}};function i(e){n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e>16&255),o.push(r>>8&255),o.push(255&r)),r=r<<6|i.indexOf(t.charAt(a));return 0==(e=n%4*6)?(o.push(r>>16&255),o.push(r>>8&255),o.push(255&r)):18==e?(o.push(r>>10&255),o.push(r>>2&255)):12==e&&o.push(r>>4&255),s?s.from?s.from(o):new s(o):o},predicate:function(e){return s&&s.isBuffer(e)},represent:function(e){for(var t,n="",i=0,r=e.length,o=c,a=0;a>18&63],n+=o[i>>12&63],n+=o[i>>6&63],n+=o[63&i]),i=(i<<8)+e[a];return 0==(t=r%3)?(n+=o[i>>18&63],n+=o[i>>12&63],n+=o[i>>6&63],n+=o[63&i]):2==t?(n+=o[i>>10&63],n+=o[i>>4&63],n+=o[i<<2&63],n+=o[64]):1==t&&(n+=o[i>>2&63],n+=o[i<<4&63],n+=o[64],n+=o[64]),n}})},{"../type":13}],15:[function(e,t,n){"use strict";e=e("../type");t.exports=new e("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t=e.length;return 4===t&&("true"===e||"True"===e||"TRUE"===e)||5===t&&("false"===e||"False"===e||"FALSE"===e)},construct:function(e){return"true"===e||"True"===e||"TRUE"===e},predicate:function(e){return"[object Boolean]"===Object.prototype.toString.call(e)},represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"})},{"../type":13}],16:[function(e,t,n){"use strict";var i=e("../common"),e=e("../type"),r=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var o=/^[-+]?[0-9]+e/;t.exports=new e("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!r.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n=e.replace(/_/g,"").toLowerCase(),e="-"===n[0]?-1:1,i=[];return 0<="+-".indexOf(n[0])&&(n=n.slice(1)),".inf"===n?1==e?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===n?NaN:0<=n.indexOf(":")?(n.split(":").forEach(function(e){i.unshift(parseFloat(e,10))}),n=0,t=1,i.forEach(function(e){n+=e*t,t*=60}),e*n):e*parseFloat(n,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||i.isNegativeZero(e))},represent:function(e,t){if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(i.isNegativeZero(e))return"-0.0";return e=e.toString(10),o.test(e)?e.replace("e",".e"):e},defaultStyle:"lowercase"})},{"../common":2,"../type":13}],17:[function(e,t,n){"use strict";var i=e("../common"),e=e("../type");t.exports=new e("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,i,r,o=e.length,a=0,s=!1;if(!o)return!1;if("-"!==(t=e[a])&&"+"!==t||(t=e[++a]),"0"===t){if(a+1===o)return!0;if("b"===(t=e[++a])){for(a++;a */ +var CHAR_QUESTION = 0x3F; /* ? */ +var CHAR_COMMERCIAL_AT = 0x40; /* @ */ +var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ +var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ +var CHAR_GRAVE_ACCENT = 0x60; /* ` */ +var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ +var CHAR_VERTICAL_LINE = 0x7C; /* | */ +var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ + +var ESCAPE_SEQUENCES = {}; + +ESCAPE_SEQUENCES[0x00] = '\\0'; +ESCAPE_SEQUENCES[0x07] = '\\a'; +ESCAPE_SEQUENCES[0x08] = '\\b'; +ESCAPE_SEQUENCES[0x09] = '\\t'; +ESCAPE_SEQUENCES[0x0A] = '\\n'; +ESCAPE_SEQUENCES[0x0B] = '\\v'; +ESCAPE_SEQUENCES[0x0C] = '\\f'; +ESCAPE_SEQUENCES[0x0D] = '\\r'; +ESCAPE_SEQUENCES[0x1B] = '\\e'; +ESCAPE_SEQUENCES[0x22] = '\\"'; +ESCAPE_SEQUENCES[0x5C] = '\\\\'; +ESCAPE_SEQUENCES[0x85] = '\\N'; +ESCAPE_SEQUENCES[0xA0] = '\\_'; +ESCAPE_SEQUENCES[0x2028] = '\\L'; +ESCAPE_SEQUENCES[0x2029] = '\\P'; + +var DEPRECATED_BOOLEANS_SYNTAX = [ + 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', + 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' +]; + +function compileStyleMap(schema, map) { + var result, keys, index, length, tag, style, type; + + if (map === null) return {}; + + result = {}; + keys = Object.keys(map); + + for (index = 0, length = keys.length; index < length; index += 1) { + tag = keys[index]; + style = String(map[tag]); + + if (tag.slice(0, 2) === '!!') { + tag = 'tag:yaml.org,2002:' + tag.slice(2); + } + type = schema.compiledTypeMap['fallback'][tag]; + + if (type && _hasOwnProperty.call(type.styleAliases, style)) { + style = type.styleAliases[style]; + } + + result[tag] = style; + } + + return result; +} + +function encodeHex(character) { + var string, handle, length; + + string = character.toString(16).toUpperCase(); + + if (character <= 0xFF) { + handle = 'x'; + length = 2; + } else if (character <= 0xFFFF) { + handle = 'u'; + length = 4; + } else if (character <= 0xFFFFFFFF) { + handle = 'U'; + length = 8; + } else { + throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF'); + } + + return '\\' + handle + common.repeat('0', length - string.length) + string; +} + +function State(options) { + this.schema = options['schema'] || DEFAULT_FULL_SCHEMA; + this.indent = Math.max(1, (options['indent'] || 2)); + this.noArrayIndent = options['noArrayIndent'] || false; + this.skipInvalid = options['skipInvalid'] || false; + this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); + this.styleMap = compileStyleMap(this.schema, options['styles'] || null); + this.sortKeys = options['sortKeys'] || false; + this.lineWidth = options['lineWidth'] || 80; + this.noRefs = options['noRefs'] || false; + this.noCompatMode = options['noCompatMode'] || false; + this.condenseFlow = options['condenseFlow'] || false; + + this.implicitTypes = this.schema.compiledImplicit; + this.explicitTypes = this.schema.compiledExplicit; + + this.tag = null; + this.result = ''; + + this.duplicates = []; + this.usedDuplicates = null; +} + +// Indents every line in a string. Empty lines (\n only) are not indented. +function indentString(string, spaces) { + var ind = common.repeat(' ', spaces), + position = 0, + next = -1, + result = '', + line, + length = string.length; + + while (position < length) { + next = string.indexOf('\n', position); + if (next === -1) { + line = string.slice(position); + position = length; + } else { + line = string.slice(position, next + 1); + position = next + 1; + } + + if (line.length && line !== '\n') result += ind; + + result += line; + } + + return result; +} + +function generateNextLine(state, level) { + return '\n' + common.repeat(' ', state.indent * level); +} + +function testImplicitResolving(state, str) { + var index, length, type; + + for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { + type = state.implicitTypes[index]; + + if (type.resolve(str)) { + return true; + } + } + + return false; +} + +// [33] s-white ::= s-space | s-tab +function isWhitespace(c) { + return c === CHAR_SPACE || c === CHAR_TAB; +} + +// Returns true if the character can be printed without escaping. +// From YAML 1.2: "any allowed characters known to be non-printable +// should also be escaped. [However,] This isn’t mandatory" +// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. +function isPrintable(c) { + return (0x00020 <= c && c <= 0x00007E) + || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) + || ((0x0E000 <= c && c <= 0x00FFFD) && c !== 0xFEFF /* BOM */) + || (0x10000 <= c && c <= 0x10FFFF); +} + +// [34] ns-char ::= nb-char - s-white +// [27] nb-char ::= c-printable - b-char - c-byte-order-mark +// [26] b-char ::= b-line-feed | b-carriage-return +// [24] b-line-feed ::= #xA /* LF */ +// [25] b-carriage-return ::= #xD /* CR */ +// [3] c-byte-order-mark ::= #xFEFF +function isNsChar(c) { + return isPrintable(c) && !isWhitespace(c) + // byte-order-mark + && c !== 0xFEFF + // b-char + && c !== CHAR_CARRIAGE_RETURN + && c !== CHAR_LINE_FEED; +} + +// Simplified test for values allowed after the first character in plain style. +function isPlainSafe(c, prev) { + // Uses a subset of nb-char - c-flow-indicator - ":" - "#" + // where nb-char ::= c-printable - b-char - c-byte-order-mark. + return isPrintable(c) && c !== 0xFEFF + // - c-flow-indicator + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + // - ":" - "#" + // /* An ns-char preceding */ "#" + && c !== CHAR_COLON + && ((c !== CHAR_SHARP) || (prev && isNsChar(prev))); +} + +// Simplified test for values allowed as the first character in plain style. +function isPlainSafeFirst(c) { + // Uses a subset of ns-char - c-indicator + // where ns-char = nb-char - s-white. + return isPrintable(c) && c !== 0xFEFF + && !isWhitespace(c) // - s-white + // - (c-indicator ::= + // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” + && c !== CHAR_MINUS + && c !== CHAR_QUESTION + && c !== CHAR_COLON + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” + && c !== CHAR_SHARP + && c !== CHAR_AMPERSAND + && c !== CHAR_ASTERISK + && c !== CHAR_EXCLAMATION + && c !== CHAR_VERTICAL_LINE + && c !== CHAR_EQUALS + && c !== CHAR_GREATER_THAN + && c !== CHAR_SINGLE_QUOTE + && c !== CHAR_DOUBLE_QUOTE + // | “%” | “@” | “`”) + && c !== CHAR_PERCENT + && c !== CHAR_COMMERCIAL_AT + && c !== CHAR_GRAVE_ACCENT; +} + +// Determines whether block indentation indicator is required. +function needIndentIndicator(string) { + var leadingSpaceRe = /^\n* /; + return leadingSpaceRe.test(string); +} + +var STYLE_PLAIN = 1, + STYLE_SINGLE = 2, + STYLE_LITERAL = 3, + STYLE_FOLDED = 4, + STYLE_DOUBLE = 5; + +// Determines which scalar styles are possible and returns the preferred style. +// lineWidth = -1 => no limit. +// Pre-conditions: str.length > 0. +// Post-conditions: +// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. +// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). +// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). +function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) { + var i; + var char, prev_char; + var hasLineBreak = false; + var hasFoldableLine = false; // only checked if shouldTrackWidth + var shouldTrackWidth = lineWidth !== -1; + var previousLineBreak = -1; // count the first line correctly + var plain = isPlainSafeFirst(string.charCodeAt(0)) + && !isWhitespace(string.charCodeAt(string.length - 1)); + + if (singleLineOnly) { + // Case: no block styles. + // Check for disallowed characters to rule out plain and single. + for (i = 0; i < string.length; i++) { + char = string.charCodeAt(i); + if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + prev_char = i > 0 ? string.charCodeAt(i - 1) : null; + plain = plain && isPlainSafe(char, prev_char); + } + } else { + // Case: block styles permitted. + for (i = 0; i < string.length; i++) { + char = string.charCodeAt(i); + if (char === CHAR_LINE_FEED) { + hasLineBreak = true; + // Check if any line can be folded. + if (shouldTrackWidth) { + hasFoldableLine = hasFoldableLine || + // Foldable line = too long, and not more-indented. + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' '); + previousLineBreak = i; + } + } else if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + prev_char = i > 0 ? string.charCodeAt(i - 1) : null; + plain = plain && isPlainSafe(char, prev_char); + } + // in case the end is missing a \n + hasFoldableLine = hasFoldableLine || (shouldTrackWidth && + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' ')); + } + // Although every style can represent \n without escaping, prefer block styles + // for multiline, since they're more readable and they don't add empty lines. + // Also prefer folding a super-long line. + if (!hasLineBreak && !hasFoldableLine) { + // Strings interpretable as another type have to be quoted; + // e.g. the string 'true' vs. the boolean true. + return plain && !testAmbiguousType(string) + ? STYLE_PLAIN : STYLE_SINGLE; + } + // Edge case: block indentation indicator can only have one digit. + if (indentPerLevel > 9 && needIndentIndicator(string)) { + return STYLE_DOUBLE; + } + // At this point we know block styles are valid. + // Prefer literal style unless we want to fold. + return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; +} + +// Note: line breaking/folding is implemented for only the folded style. +// NB. We drop the last trailing newline (if any) of a returned block scalar +// since the dumper adds its own newline. This always works: +// • No ending newline => unaffected; already using strip "-" chomping. +// • Ending newline => removed then restored. +// Importantly, this keeps the "+" chomp indicator from gaining an extra line. +function writeScalar(state, string, level, iskey) { + state.dump = (function () { + if (string.length === 0) { + return "''"; + } + if (!state.noCompatMode && + DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1) { + return "'" + string + "'"; + } + + var indent = state.indent * Math.max(1, level); // no 0-indent scalars + // As indentation gets deeper, let the width decrease monotonically + // to the lower bound min(state.lineWidth, 40). + // Note that this implies + // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. + // state.lineWidth > 40 + state.indent: width decreases until the lower bound. + // This behaves better than a constant minimum width which disallows narrower options, + // or an indent threshold which causes the width to suddenly increase. + var lineWidth = state.lineWidth === -1 + ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); + + // Without knowing if keys are implicit/explicit, assume implicit for safety. + var singleLineOnly = iskey + // No block styles in flow mode. + || (state.flowLevel > -1 && level >= state.flowLevel); + function testAmbiguity(string) { + return testImplicitResolving(state, string); + } + + switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity)) { + case STYLE_PLAIN: + return string; + case STYLE_SINGLE: + return "'" + string.replace(/'/g, "''") + "'"; + case STYLE_LITERAL: + return '|' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(string, indent)); + case STYLE_FOLDED: + return '>' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); + case STYLE_DOUBLE: + return '"' + escapeString(string, lineWidth) + '"'; + default: + throw new YAMLException('impossible error: invalid scalar style'); + } + }()); +} + +// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. +function blockHeader(string, indentPerLevel) { + var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; + + // note the special case: the string '\n' counts as a "trailing" empty line. + var clip = string[string.length - 1] === '\n'; + var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); + var chomp = keep ? '+' : (clip ? '' : '-'); + + return indentIndicator + chomp + '\n'; +} + +// (See the note for writeScalar.) +function dropEndingNewline(string) { + return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; +} + +// Note: a long line without a suitable break point will exceed the width limit. +// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. +function foldString(string, width) { + // In folded style, $k$ consecutive newlines output as $k+1$ newlines— + // unless they're before or after a more-indented line, or at the very + // beginning or end, in which case $k$ maps to $k$. + // Therefore, parse each chunk as newline(s) followed by a content line. + var lineRe = /(\n+)([^\n]*)/g; + + // first line (possibly an empty line) + var result = (function () { + var nextLF = string.indexOf('\n'); + nextLF = nextLF !== -1 ? nextLF : string.length; + lineRe.lastIndex = nextLF; + return foldLine(string.slice(0, nextLF), width); + }()); + // If we haven't reached the first content line yet, don't add an extra \n. + var prevMoreIndented = string[0] === '\n' || string[0] === ' '; + var moreIndented; + + // rest of the lines + var match; + while ((match = lineRe.exec(string))) { + var prefix = match[1], line = match[2]; + moreIndented = (line[0] === ' '); + result += prefix + + (!prevMoreIndented && !moreIndented && line !== '' + ? '\n' : '') + + foldLine(line, width); + prevMoreIndented = moreIndented; + } + + return result; +} + +// Greedy line breaking. +// Picks the longest line under the limit each time, +// otherwise settles for the shortest line over the limit. +// NB. More-indented lines *cannot* be folded, as that would add an extra \n. +function foldLine(line, width) { + if (line === '' || line[0] === ' ') return line; + + // Since a more-indented line adds a \n, breaks can't be followed by a space. + var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. + var match; + // start is an inclusive index. end, curr, and next are exclusive. + var start = 0, end, curr = 0, next = 0; + var result = ''; + + // Invariants: 0 <= start <= length-1. + // 0 <= curr <= next <= max(0, length-2). curr - start <= width. + // Inside the loop: + // A match implies length >= 2, so curr and next are <= length-2. + while ((match = breakRe.exec(line))) { + next = match.index; + // maintain invariant: curr - start <= width + if (next - start > width) { + end = (curr > start) ? curr : next; // derive end <= length-2 + result += '\n' + line.slice(start, end); + // skip the space that was output as \n + start = end + 1; // derive start <= length-1 + } + curr = next; + } + + // By the invariants, start <= length-1, so there is something left over. + // It is either the whole string or a part starting from non-whitespace. + result += '\n'; + // Insert a break if the remainder is too long and there is a break available. + if (line.length - start > width && curr > start) { + result += line.slice(start, curr) + '\n' + line.slice(curr + 1); + } else { + result += line.slice(start); + } + + return result.slice(1); // drop extra \n joiner +} + +// Escapes a double-quoted string. +function escapeString(string) { + var result = ''; + var char, nextChar; + var escapeSeq; + + for (var i = 0; i < string.length; i++) { + char = string.charCodeAt(i); + // Check for surrogate pairs (reference Unicode 3.0 section "3.7 Surrogates"). + if (char >= 0xD800 && char <= 0xDBFF/* high surrogate */) { + nextChar = string.charCodeAt(i + 1); + if (nextChar >= 0xDC00 && nextChar <= 0xDFFF/* low surrogate */) { + // Combine the surrogate pair and store it escaped. + result += encodeHex((char - 0xD800) * 0x400 + nextChar - 0xDC00 + 0x10000); + // Advance index one extra since we already used that char here. + i++; continue; + } + } + escapeSeq = ESCAPE_SEQUENCES[char]; + result += !escapeSeq && isPrintable(char) + ? string[i] + : escapeSeq || encodeHex(char); + } + + return result; +} + +function writeFlowSequence(state, level, object) { + var _result = '', + _tag = state.tag, + index, + length; + + for (index = 0, length = object.length; index < length; index += 1) { + // Write only valid elements. + if (writeNode(state, level, object[index], false, false)) { + if (index !== 0) _result += ',' + (!state.condenseFlow ? ' ' : ''); + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = '[' + _result + ']'; +} + +function writeBlockSequence(state, level, object, compact) { + var _result = '', + _tag = state.tag, + index, + length; + + for (index = 0, length = object.length; index < length; index += 1) { + // Write only valid elements. + if (writeNode(state, level + 1, object[index], true, true)) { + if (!compact || index !== 0) { + _result += generateNextLine(state, level); + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + _result += '-'; + } else { + _result += '- '; + } + + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = _result || '[]'; // Empty sequence if no valid values. +} + +function writeFlowMapping(state, level, object) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + pairBuffer; + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + + pairBuffer = ''; + if (index !== 0) pairBuffer += ', '; + + if (state.condenseFlow) pairBuffer += '"'; + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (!writeNode(state, level, objectKey, false, false)) { + continue; // Skip this pair because of invalid key; + } + + if (state.dump.length > 1024) pairBuffer += '? '; + + pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); + + if (!writeNode(state, level, objectValue, false, false)) { + continue; // Skip this pair because of invalid value. + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = '{' + _result + '}'; +} + +function writeBlockMapping(state, level, object, compact) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + explicitPair, + pairBuffer; + + // Allow sorting keys so that the output file is deterministic + if (state.sortKeys === true) { + // Default sorting + objectKeyList.sort(); + } else if (typeof state.sortKeys === 'function') { + // Custom sort function + objectKeyList.sort(state.sortKeys); + } else if (state.sortKeys) { + // Something is wrong + throw new YAMLException('sortKeys must be a boolean or a function'); + } + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ''; + + if (!compact || index !== 0) { + pairBuffer += generateNextLine(state, level); + } + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (!writeNode(state, level + 1, objectKey, true, true, true)) { + continue; // Skip this pair because of invalid key. + } + + explicitPair = (state.tag !== null && state.tag !== '?') || + (state.dump && state.dump.length > 1024); + + if (explicitPair) { + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += '?'; + } else { + pairBuffer += '? '; + } + } + + pairBuffer += state.dump; + + if (explicitPair) { + pairBuffer += generateNextLine(state, level); + } + + if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { + continue; // Skip this pair because of invalid value. + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += ':'; + } else { + pairBuffer += ': '; + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = _result || '{}'; // Empty mapping if no valid pairs. +} + +function detectType(state, object, explicit) { + var _result, typeList, index, length, type, style; + + typeList = explicit ? state.explicitTypes : state.implicitTypes; + + for (index = 0, length = typeList.length; index < length; index += 1) { + type = typeList[index]; + + if ((type.instanceOf || type.predicate) && + (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && + (!type.predicate || type.predicate(object))) { + + state.tag = explicit ? type.tag : '?'; + + if (type.represent) { + style = state.styleMap[type.tag] || type.defaultStyle; + + if (_toString.call(type.represent) === '[object Function]') { + _result = type.represent(object, style); + } else if (_hasOwnProperty.call(type.represent, style)) { + _result = type.represent[style](object, style); + } else { + throw new YAMLException('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); + } + + state.dump = _result; + } + + return true; + } + } + + return false; +} + +// Serializes `object` and writes it to global `result`. +// Returns true on success, or false on invalid object. +// +function writeNode(state, level, object, block, compact, iskey) { + state.tag = null; + state.dump = object; + + if (!detectType(state, object, false)) { + detectType(state, object, true); + } + + var type = _toString.call(state.dump); + + if (block) { + block = (state.flowLevel < 0 || state.flowLevel > level); + } + + var objectOrArray = type === '[object Object]' || type === '[object Array]', + duplicateIndex, + duplicate; + + if (objectOrArray) { + duplicateIndex = state.duplicates.indexOf(object); + duplicate = duplicateIndex !== -1; + } + + if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { + compact = false; + } + + if (duplicate && state.usedDuplicates[duplicateIndex]) { + state.dump = '*ref_' + duplicateIndex; + } else { + if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { + state.usedDuplicates[duplicateIndex] = true; + } + if (type === '[object Object]') { + if (block && (Object.keys(state.dump).length !== 0)) { + writeBlockMapping(state, level, state.dump, compact); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowMapping(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object Array]') { + var arrayLevel = (state.noArrayIndent && (level > 0)) ? level - 1 : level; + if (block && (state.dump.length !== 0)) { + writeBlockSequence(state, arrayLevel, state.dump, compact); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowSequence(state, arrayLevel, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object String]') { + if (state.tag !== '?') { + writeScalar(state, state.dump, level, iskey); + } + } else { + if (state.skipInvalid) return false; + throw new YAMLException('unacceptable kind of an object to dump ' + type); + } + + if (state.tag !== null && state.tag !== '?') { + state.dump = '!<' + state.tag + '> ' + state.dump; + } + } + + return true; +} + +function getDuplicateReferences(object, state) { + var objects = [], + duplicatesIndexes = [], + index, + length; + + inspectNode(object, objects, duplicatesIndexes); + + for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { + state.duplicates.push(objects[duplicatesIndexes[index]]); + } + state.usedDuplicates = new Array(length); +} + +function inspectNode(object, objects, duplicatesIndexes) { + var objectKeyList, + index, + length; + + if (object !== null && typeof object === 'object') { + index = objects.indexOf(object); + if (index !== -1) { + if (duplicatesIndexes.indexOf(index) === -1) { + duplicatesIndexes.push(index); + } + } else { + objects.push(object); + + if (Array.isArray(object)) { + for (index = 0, length = object.length; index < length; index += 1) { + inspectNode(object[index], objects, duplicatesIndexes); + } + } else { + objectKeyList = Object.keys(object); + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); + } + } + } + } +} + +function dump(input, options) { + options = options || {}; + + var state = new State(options); + + if (!state.noRefs) getDuplicateReferences(input, state); + + if (writeNode(state, 0, input, true, true)) return state.dump + '\n'; + + return ''; +} + +function safeDump(input, options) { + return dump(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + +module.exports.dump = dump; +module.exports.safeDump = safeDump; diff --git a/node_modules/js-yaml/lib/js-yaml/exception.js b/node_modules/js-yaml/lib/js-yaml/exception.js new file mode 100644 index 00000000..b744a1ee --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/exception.js @@ -0,0 +1,43 @@ +// YAML error class. http://stackoverflow.com/questions/8458984 +// +'use strict'; + +function YAMLException(reason, mark) { + // Super constructor + Error.call(this); + + this.name = 'YAMLException'; + this.reason = reason; + this.mark = mark; + this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : ''); + + // Include stack trace in error object + if (Error.captureStackTrace) { + // Chrome and NodeJS + Error.captureStackTrace(this, this.constructor); + } else { + // FF, IE 10+ and Safari 6+. Fallback for others + this.stack = (new Error()).stack || ''; + } +} + + +// Inherit from Error +YAMLException.prototype = Object.create(Error.prototype); +YAMLException.prototype.constructor = YAMLException; + + +YAMLException.prototype.toString = function toString(compact) { + var result = this.name + ': '; + + result += this.reason || '(unknown reason)'; + + if (!compact && this.mark) { + result += ' ' + this.mark.toString(); + } + + return result; +}; + + +module.exports = YAMLException; diff --git a/node_modules/js-yaml/lib/js-yaml/loader.js b/node_modules/js-yaml/lib/js-yaml/loader.js new file mode 100644 index 00000000..d7484a59 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/loader.js @@ -0,0 +1,1644 @@ +'use strict'; + +/*eslint-disable max-len,no-use-before-define*/ + +var common = require('./common'); +var YAMLException = require('./exception'); +var Mark = require('./mark'); +var DEFAULT_SAFE_SCHEMA = require('./schema/default_safe'); +var DEFAULT_FULL_SCHEMA = require('./schema/default_full'); + + +var _hasOwnProperty = Object.prototype.hasOwnProperty; + + +var CONTEXT_FLOW_IN = 1; +var CONTEXT_FLOW_OUT = 2; +var CONTEXT_BLOCK_IN = 3; +var CONTEXT_BLOCK_OUT = 4; + + +var CHOMPING_CLIP = 1; +var CHOMPING_STRIP = 2; +var CHOMPING_KEEP = 3; + + +var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; +var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; +var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; +var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; + + +function _class(obj) { return Object.prototype.toString.call(obj); } + +function is_EOL(c) { + return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); +} + +function is_WHITE_SPACE(c) { + return (c === 0x09/* Tab */) || (c === 0x20/* Space */); +} + +function is_WS_OR_EOL(c) { + return (c === 0x09/* Tab */) || + (c === 0x20/* Space */) || + (c === 0x0A/* LF */) || + (c === 0x0D/* CR */); +} + +function is_FLOW_INDICATOR(c) { + return c === 0x2C/* , */ || + c === 0x5B/* [ */ || + c === 0x5D/* ] */ || + c === 0x7B/* { */ || + c === 0x7D/* } */; +} + +function fromHexCode(c) { + var lc; + + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; + } + + /*eslint-disable no-bitwise*/ + lc = c | 0x20; + + if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) { + return lc - 0x61 + 10; + } + + return -1; +} + +function escapedHexLen(c) { + if (c === 0x78/* x */) { return 2; } + if (c === 0x75/* u */) { return 4; } + if (c === 0x55/* U */) { return 8; } + return 0; +} + +function fromDecimalCode(c) { + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; + } + + return -1; +} + +function simpleEscapeSequence(c) { + /* eslint-disable indent */ + return (c === 0x30/* 0 */) ? '\x00' : + (c === 0x61/* a */) ? '\x07' : + (c === 0x62/* b */) ? '\x08' : + (c === 0x74/* t */) ? '\x09' : + (c === 0x09/* Tab */) ? '\x09' : + (c === 0x6E/* n */) ? '\x0A' : + (c === 0x76/* v */) ? '\x0B' : + (c === 0x66/* f */) ? '\x0C' : + (c === 0x72/* r */) ? '\x0D' : + (c === 0x65/* e */) ? '\x1B' : + (c === 0x20/* Space */) ? ' ' : + (c === 0x22/* " */) ? '\x22' : + (c === 0x2F/* / */) ? '/' : + (c === 0x5C/* \ */) ? '\x5C' : + (c === 0x4E/* N */) ? '\x85' : + (c === 0x5F/* _ */) ? '\xA0' : + (c === 0x4C/* L */) ? '\u2028' : + (c === 0x50/* P */) ? '\u2029' : ''; +} + +function charFromCodepoint(c) { + if (c <= 0xFFFF) { + return String.fromCharCode(c); + } + // Encode UTF-16 surrogate pair + // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF + return String.fromCharCode( + ((c - 0x010000) >> 10) + 0xD800, + ((c - 0x010000) & 0x03FF) + 0xDC00 + ); +} + +var simpleEscapeCheck = new Array(256); // integer, for fast access +var simpleEscapeMap = new Array(256); +for (var i = 0; i < 256; i++) { + simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; + simpleEscapeMap[i] = simpleEscapeSequence(i); +} + + +function State(input, options) { + this.input = input; + + this.filename = options['filename'] || null; + this.schema = options['schema'] || DEFAULT_FULL_SCHEMA; + this.onWarning = options['onWarning'] || null; + this.legacy = options['legacy'] || false; + this.json = options['json'] || false; + this.listener = options['listener'] || null; + + this.implicitTypes = this.schema.compiledImplicit; + this.typeMap = this.schema.compiledTypeMap; + + this.length = input.length; + this.position = 0; + this.line = 0; + this.lineStart = 0; + this.lineIndent = 0; + + this.documents = []; + + /* + this.version; + this.checkLineBreaks; + this.tagMap; + this.anchorMap; + this.tag; + this.anchor; + this.kind; + this.result;*/ + +} + + +function generateError(state, message) { + return new YAMLException( + message, + new Mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart))); +} + +function throwError(state, message) { + throw generateError(state, message); +} + +function throwWarning(state, message) { + if (state.onWarning) { + state.onWarning.call(null, generateError(state, message)); + } +} + + +var directiveHandlers = { + + YAML: function handleYamlDirective(state, name, args) { + + var match, major, minor; + + if (state.version !== null) { + throwError(state, 'duplication of %YAML directive'); + } + + if (args.length !== 1) { + throwError(state, 'YAML directive accepts exactly one argument'); + } + + match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); + + if (match === null) { + throwError(state, 'ill-formed argument of the YAML directive'); + } + + major = parseInt(match[1], 10); + minor = parseInt(match[2], 10); + + if (major !== 1) { + throwError(state, 'unacceptable YAML version of the document'); + } + + state.version = args[0]; + state.checkLineBreaks = (minor < 2); + + if (minor !== 1 && minor !== 2) { + throwWarning(state, 'unsupported YAML version of the document'); + } + }, + + TAG: function handleTagDirective(state, name, args) { + + var handle, prefix; + + if (args.length !== 2) { + throwError(state, 'TAG directive accepts exactly two arguments'); + } + + handle = args[0]; + prefix = args[1]; + + if (!PATTERN_TAG_HANDLE.test(handle)) { + throwError(state, 'ill-formed tag handle (first argument) of the TAG directive'); + } + + if (_hasOwnProperty.call(state.tagMap, handle)) { + throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); + } + + if (!PATTERN_TAG_URI.test(prefix)) { + throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive'); + } + + state.tagMap[handle] = prefix; + } +}; + + +function captureSegment(state, start, end, checkJson) { + var _position, _length, _character, _result; + + if (start < end) { + _result = state.input.slice(start, end); + + if (checkJson) { + for (_position = 0, _length = _result.length; _position < _length; _position += 1) { + _character = _result.charCodeAt(_position); + if (!(_character === 0x09 || + (0x20 <= _character && _character <= 0x10FFFF))) { + throwError(state, 'expected valid JSON character'); + } + } + } else if (PATTERN_NON_PRINTABLE.test(_result)) { + throwError(state, 'the stream contains non-printable characters'); + } + + state.result += _result; + } +} + +function mergeMappings(state, destination, source, overridableKeys) { + var sourceKeys, key, index, quantity; + + if (!common.isObject(source)) { + throwError(state, 'cannot merge mappings; the provided source object is unacceptable'); + } + + sourceKeys = Object.keys(source); + + for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { + key = sourceKeys[index]; + + if (!_hasOwnProperty.call(destination, key)) { + destination[key] = source[key]; + overridableKeys[key] = true; + } + } +} + +function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startPos) { + var index, quantity; + + // The output is a plain object here, so keys can only be strings. + // We need to convert keyNode to a string, but doing so can hang the process + // (deeply nested arrays that explode exponentially using aliases). + if (Array.isArray(keyNode)) { + keyNode = Array.prototype.slice.call(keyNode); + + for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { + if (Array.isArray(keyNode[index])) { + throwError(state, 'nested arrays are not supported inside keys'); + } + + if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') { + keyNode[index] = '[object Object]'; + } + } + } + + // Avoid code execution in load() via toString property + // (still use its own toString for arrays, timestamps, + // and whatever user schema extensions happen to have @@toStringTag) + if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') { + keyNode = '[object Object]'; + } + + + keyNode = String(keyNode); + + if (_result === null) { + _result = {}; + } + + if (keyTag === 'tag:yaml.org,2002:merge') { + if (Array.isArray(valueNode)) { + for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { + mergeMappings(state, _result, valueNode[index], overridableKeys); + } + } else { + mergeMappings(state, _result, valueNode, overridableKeys); + } + } else { + if (!state.json && + !_hasOwnProperty.call(overridableKeys, keyNode) && + _hasOwnProperty.call(_result, keyNode)) { + state.line = startLine || state.line; + state.position = startPos || state.position; + throwError(state, 'duplicated mapping key'); + } + _result[keyNode] = valueNode; + delete overridableKeys[keyNode]; + } + + return _result; +} + +function readLineBreak(state) { + var ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x0A/* LF */) { + state.position++; + } else if (ch === 0x0D/* CR */) { + state.position++; + if (state.input.charCodeAt(state.position) === 0x0A/* LF */) { + state.position++; + } + } else { + throwError(state, 'a line break is expected'); + } + + state.line += 1; + state.lineStart = state.position; +} + +function skipSeparationSpace(state, allowComments, checkIndent) { + var lineBreaks = 0, + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (allowComments && ch === 0x23/* # */) { + do { + ch = state.input.charCodeAt(++state.position); + } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0); + } + + if (is_EOL(ch)) { + readLineBreak(state); + + ch = state.input.charCodeAt(state.position); + lineBreaks++; + state.lineIndent = 0; + + while (ch === 0x20/* Space */) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + } else { + break; + } + } + + if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { + throwWarning(state, 'deficient indentation'); + } + + return lineBreaks; +} + +function testDocumentSeparator(state) { + var _position = state.position, + ch; + + ch = state.input.charCodeAt(_position); + + // Condition state.position === state.lineStart is tested + // in parent on each call, for efficiency. No needs to test here again. + if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) && + ch === state.input.charCodeAt(_position + 1) && + ch === state.input.charCodeAt(_position + 2)) { + + _position += 3; + + ch = state.input.charCodeAt(_position); + + if (ch === 0 || is_WS_OR_EOL(ch)) { + return true; + } + } + + return false; +} + +function writeFoldedLines(state, count) { + if (count === 1) { + state.result += ' '; + } else if (count > 1) { + state.result += common.repeat('\n', count - 1); + } +} + + +function readPlainScalar(state, nodeIndent, withinFlowCollection) { + var preceding, + following, + captureStart, + captureEnd, + hasPendingContent, + _line, + _lineStart, + _lineIndent, + _kind = state.kind, + _result = state.result, + ch; + + ch = state.input.charCodeAt(state.position); + + if (is_WS_OR_EOL(ch) || + is_FLOW_INDICATOR(ch) || + ch === 0x23/* # */ || + ch === 0x26/* & */ || + ch === 0x2A/* * */ || + ch === 0x21/* ! */ || + ch === 0x7C/* | */ || + ch === 0x3E/* > */ || + ch === 0x27/* ' */ || + ch === 0x22/* " */ || + ch === 0x25/* % */ || + ch === 0x40/* @ */ || + ch === 0x60/* ` */) { + return false; + } + + if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + return false; + } + } + + state.kind = 'scalar'; + state.result = ''; + captureStart = captureEnd = state.position; + hasPendingContent = false; + + while (ch !== 0) { + if (ch === 0x3A/* : */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + break; + } + + } else if (ch === 0x23/* # */) { + preceding = state.input.charCodeAt(state.position - 1); + + if (is_WS_OR_EOL(preceding)) { + break; + } + + } else if ((state.position === state.lineStart && testDocumentSeparator(state)) || + withinFlowCollection && is_FLOW_INDICATOR(ch)) { + break; + + } else if (is_EOL(ch)) { + _line = state.line; + _lineStart = state.lineStart; + _lineIndent = state.lineIndent; + skipSeparationSpace(state, false, -1); + + if (state.lineIndent >= nodeIndent) { + hasPendingContent = true; + ch = state.input.charCodeAt(state.position); + continue; + } else { + state.position = captureEnd; + state.line = _line; + state.lineStart = _lineStart; + state.lineIndent = _lineIndent; + break; + } + } + + if (hasPendingContent) { + captureSegment(state, captureStart, captureEnd, false); + writeFoldedLines(state, state.line - _line); + captureStart = captureEnd = state.position; + hasPendingContent = false; + } + + if (!is_WHITE_SPACE(ch)) { + captureEnd = state.position + 1; + } + + ch = state.input.charCodeAt(++state.position); + } + + captureSegment(state, captureStart, captureEnd, false); + + if (state.result) { + return true; + } + + state.kind = _kind; + state.result = _result; + return false; +} + +function readSingleQuotedScalar(state, nodeIndent) { + var ch, + captureStart, captureEnd; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x27/* ' */) { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + if (ch === 0x27/* ' */) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x27/* ' */) { + captureStart = state.position; + state.position++; + captureEnd = state.position; + } else { + return true; + } + + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a single quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError(state, 'unexpected end of the stream within a single quoted scalar'); +} + +function readDoubleQuotedScalar(state, nodeIndent) { + var captureStart, + captureEnd, + hexLength, + hexResult, + tmp, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x22/* " */) { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + if (ch === 0x22/* " */) { + captureSegment(state, captureStart, state.position, true); + state.position++; + return true; + + } else if (ch === 0x5C/* \ */) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (is_EOL(ch)) { + skipSeparationSpace(state, false, nodeIndent); + + // TODO: rework to inline fn with no type cast? + } else if (ch < 256 && simpleEscapeCheck[ch]) { + state.result += simpleEscapeMap[ch]; + state.position++; + + } else if ((tmp = escapedHexLen(ch)) > 0) { + hexLength = tmp; + hexResult = 0; + + for (; hexLength > 0; hexLength--) { + ch = state.input.charCodeAt(++state.position); + + if ((tmp = fromHexCode(ch)) >= 0) { + hexResult = (hexResult << 4) + tmp; + + } else { + throwError(state, 'expected hexadecimal character'); + } + } + + state.result += charFromCodepoint(hexResult); + + state.position++; + + } else { + throwError(state, 'unknown escape sequence'); + } + + captureStart = captureEnd = state.position; + + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a double quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError(state, 'unexpected end of the stream within a double quoted scalar'); +} + +function readFlowCollection(state, nodeIndent) { + var readNext = true, + _line, + _tag = state.tag, + _result, + _anchor = state.anchor, + following, + terminator, + isPair, + isExplicitPair, + isMapping, + overridableKeys = {}, + keyNode, + keyTag, + valueNode, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x5B/* [ */) { + terminator = 0x5D;/* ] */ + isMapping = false; + _result = []; + } else if (ch === 0x7B/* { */) { + terminator = 0x7D;/* } */ + isMapping = true; + _result = {}; + } else { + return false; + } + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(++state.position); + + while (ch !== 0) { + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if (ch === terminator) { + state.position++; + state.tag = _tag; + state.anchor = _anchor; + state.kind = isMapping ? 'mapping' : 'sequence'; + state.result = _result; + return true; + } else if (!readNext) { + throwError(state, 'missed comma between flow collection entries'); + } + + keyTag = keyNode = valueNode = null; + isPair = isExplicitPair = false; + + if (ch === 0x3F/* ? */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following)) { + isPair = isExplicitPair = true; + state.position++; + skipSeparationSpace(state, true, nodeIndent); + } + } + + _line = state.line; + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + keyTag = state.tag; + keyNode = state.result; + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) { + isPair = true; + ch = state.input.charCodeAt(++state.position); + skipSeparationSpace(state, true, nodeIndent); + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + valueNode = state.result; + } + + if (isMapping) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode); + } else if (isPair) { + _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode)); + } else { + _result.push(keyNode); + } + + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x2C/* , */) { + readNext = true; + ch = state.input.charCodeAt(++state.position); + } else { + readNext = false; + } + } + + throwError(state, 'unexpected end of the stream within a flow collection'); +} + +function readBlockScalar(state, nodeIndent) { + var captureStart, + folding, + chomping = CHOMPING_CLIP, + didReadContent = false, + detectedIndent = false, + textIndent = nodeIndent, + emptyLines = 0, + atMoreIndented = false, + tmp, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x7C/* | */) { + folding = false; + } else if (ch === 0x3E/* > */) { + folding = true; + } else { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + + while (ch !== 0) { + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x2B/* + */ || ch === 0x2D/* - */) { + if (CHOMPING_CLIP === chomping) { + chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP; + } else { + throwError(state, 'repeat of a chomping mode identifier'); + } + + } else if ((tmp = fromDecimalCode(ch)) >= 0) { + if (tmp === 0) { + throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); + } else if (!detectedIndent) { + textIndent = nodeIndent + tmp - 1; + detectedIndent = true; + } else { + throwError(state, 'repeat of an indentation width identifier'); + } + + } else { + break; + } + } + + if (is_WHITE_SPACE(ch)) { + do { ch = state.input.charCodeAt(++state.position); } + while (is_WHITE_SPACE(ch)); + + if (ch === 0x23/* # */) { + do { ch = state.input.charCodeAt(++state.position); } + while (!is_EOL(ch) && (ch !== 0)); + } + } + + while (ch !== 0) { + readLineBreak(state); + state.lineIndent = 0; + + ch = state.input.charCodeAt(state.position); + + while ((!detectedIndent || state.lineIndent < textIndent) && + (ch === 0x20/* Space */)) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + + if (!detectedIndent && state.lineIndent > textIndent) { + textIndent = state.lineIndent; + } + + if (is_EOL(ch)) { + emptyLines++; + continue; + } + + // End of the scalar. + if (state.lineIndent < textIndent) { + + // Perform the chomping. + if (chomping === CHOMPING_KEEP) { + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + } else if (chomping === CHOMPING_CLIP) { + if (didReadContent) { // i.e. only if the scalar is not empty. + state.result += '\n'; + } + } + + // Break this `while` cycle and go to the funciton's epilogue. + break; + } + + // Folded style: use fancy rules to handle line breaks. + if (folding) { + + // Lines starting with white space characters (more-indented lines) are not folded. + if (is_WHITE_SPACE(ch)) { + atMoreIndented = true; + // except for the first content line (cf. Example 8.1) + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + + // End of more-indented block. + } else if (atMoreIndented) { + atMoreIndented = false; + state.result += common.repeat('\n', emptyLines + 1); + + // Just one line break - perceive as the same line. + } else if (emptyLines === 0) { + if (didReadContent) { // i.e. only if we have already read some scalar content. + state.result += ' '; + } + + // Several line breaks - perceive as different lines. + } else { + state.result += common.repeat('\n', emptyLines); + } + + // Literal style: just add exact number of line breaks between content lines. + } else { + // Keep all line breaks except the header line break. + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + } + + didReadContent = true; + detectedIndent = true; + emptyLines = 0; + captureStart = state.position; + + while (!is_EOL(ch) && (ch !== 0)) { + ch = state.input.charCodeAt(++state.position); + } + + captureSegment(state, captureStart, state.position, false); + } + + return true; +} + +function readBlockSequence(state, nodeIndent) { + var _line, + _tag = state.tag, + _anchor = state.anchor, + _result = [], + following, + detected = false, + ch; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + + if (ch !== 0x2D/* - */) { + break; + } + + following = state.input.charCodeAt(state.position + 1); + + if (!is_WS_OR_EOL(following)) { + break; + } + + detected = true; + state.position++; + + if (skipSeparationSpace(state, true, -1)) { + if (state.lineIndent <= nodeIndent) { + _result.push(null); + ch = state.input.charCodeAt(state.position); + continue; + } + } + + _line = state.line; + composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); + _result.push(state.result); + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { + throwError(state, 'bad indentation of a sequence entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'sequence'; + state.result = _result; + return true; + } + return false; +} + +function readBlockMapping(state, nodeIndent, flowIndent) { + var following, + allowCompact, + _line, + _pos, + _tag = state.tag, + _anchor = state.anchor, + _result = {}, + overridableKeys = {}, + keyTag = null, + keyNode = null, + valueNode = null, + atExplicitKey = false, + detected = false, + ch; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + following = state.input.charCodeAt(state.position + 1); + _line = state.line; // Save the current line. + _pos = state.position; + + // + // Explicit notation case. There are two separate blocks: + // first for the key (denoted by "?") and second for the value (denoted by ":") + // + if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { + + if (ch === 0x3F/* ? */) { + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = true; + allowCompact = true; + + } else if (atExplicitKey) { + // i.e. 0x3A/* : */ === character after the explicit key. + atExplicitKey = false; + allowCompact = true; + + } else { + throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); + } + + state.position += 1; + ch = following; + + // + // Implicit notation case. Flow-style node as the key first, then ":", and the value. + // + } else if (composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { + + if (state.line === _line) { + ch = state.input.charCodeAt(state.position); + + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (ch === 0x3A/* : */) { + ch = state.input.charCodeAt(++state.position); + + if (!is_WS_OR_EOL(ch)) { + throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping'); + } + + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = false; + allowCompact = false; + keyTag = state.tag; + keyNode = state.result; + + } else if (detected) { + throwError(state, 'can not read an implicit mapping pair; a colon is missed'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + + } else if (detected) { + throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + + } else { + break; // Reading is done. Go to the epilogue. + } + + // + // Common reading code for both explicit and implicit notations. + // + if (state.line === _line || state.lineIndent > nodeIndent) { + if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { + if (atExplicitKey) { + keyNode = state.result; + } else { + valueNode = state.result; + } + } + + if (!atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _pos); + keyTag = keyNode = valueNode = null; + } + + skipSeparationSpace(state, true, -1); + ch = state.input.charCodeAt(state.position); + } + + if (state.lineIndent > nodeIndent && (ch !== 0)) { + throwError(state, 'bad indentation of a mapping entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + // + // Epilogue. + // + + // Special case: last mapping's node contains only the key in explicit notation. + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); + } + + // Expose the resulting mapping. + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'mapping'; + state.result = _result; + } + + return detected; +} + +function readTagProperty(state) { + var _position, + isVerbatim = false, + isNamed = false, + tagHandle, + tagName, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x21/* ! */) return false; + + if (state.tag !== null) { + throwError(state, 'duplication of a tag property'); + } + + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x3C/* < */) { + isVerbatim = true; + ch = state.input.charCodeAt(++state.position); + + } else if (ch === 0x21/* ! */) { + isNamed = true; + tagHandle = '!!'; + ch = state.input.charCodeAt(++state.position); + + } else { + tagHandle = '!'; + } + + _position = state.position; + + if (isVerbatim) { + do { ch = state.input.charCodeAt(++state.position); } + while (ch !== 0 && ch !== 0x3E/* > */); + + if (state.position < state.length) { + tagName = state.input.slice(_position, state.position); + ch = state.input.charCodeAt(++state.position); + } else { + throwError(state, 'unexpected end of the stream within a verbatim tag'); + } + } else { + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + + if (ch === 0x21/* ! */) { + if (!isNamed) { + tagHandle = state.input.slice(_position - 1, state.position + 1); + + if (!PATTERN_TAG_HANDLE.test(tagHandle)) { + throwError(state, 'named tag handle cannot contain such characters'); + } + + isNamed = true; + _position = state.position + 1; + } else { + throwError(state, 'tag suffix cannot contain exclamation marks'); + } + } + + ch = state.input.charCodeAt(++state.position); + } + + tagName = state.input.slice(_position, state.position); + + if (PATTERN_FLOW_INDICATORS.test(tagName)) { + throwError(state, 'tag suffix cannot contain flow indicator characters'); + } + } + + if (tagName && !PATTERN_TAG_URI.test(tagName)) { + throwError(state, 'tag name cannot contain such characters: ' + tagName); + } + + if (isVerbatim) { + state.tag = tagName; + + } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) { + state.tag = state.tagMap[tagHandle] + tagName; + + } else if (tagHandle === '!') { + state.tag = '!' + tagName; + + } else if (tagHandle === '!!') { + state.tag = 'tag:yaml.org,2002:' + tagName; + + } else { + throwError(state, 'undeclared tag handle "' + tagHandle + '"'); + } + + return true; +} + +function readAnchorProperty(state) { + var _position, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x26/* & */) return false; + + if (state.anchor !== null) { + throwError(state, 'duplication of an anchor property'); + } + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an anchor node must contain at least one character'); + } + + state.anchor = state.input.slice(_position, state.position); + return true; +} + +function readAlias(state) { + var _position, alias, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x2A/* * */) return false; + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an alias node must contain at least one character'); + } + + alias = state.input.slice(_position, state.position); + + if (!_hasOwnProperty.call(state.anchorMap, alias)) { + throwError(state, 'unidentified alias "' + alias + '"'); + } + + state.result = state.anchorMap[alias]; + skipSeparationSpace(state, true, -1); + return true; +} + +function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { + var allowBlockStyles, + allowBlockScalars, + allowBlockCollections, + indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } + } + + if (indentStatus === 1) { + while (readTagProperty(state) || readAnchorProperty(state)) { + if (skipSeparationSpace(state, true, -1)) { + atNewLine = true; + allowBlockCollections = allowBlockStyles; + + if (state.lineIndent > parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } else { + allowBlockCollections = false; + } + } + } + + if (allowBlockCollections) { + allowBlockCollections = atNewLine || allowCompact; + } + + if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { + if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { + flowIndent = parentIndent; + } else { + flowIndent = parentIndent + 1; + } + + blockIndent = state.position - state.lineStart; + + if (indentStatus === 1) { + if (allowBlockCollections && + (readBlockSequence(state, blockIndent) || + readBlockMapping(state, blockIndent, flowIndent)) || + readFlowCollection(state, flowIndent)) { + hasContent = true; + } else { + if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || + readSingleQuotedScalar(state, flowIndent) || + readDoubleQuotedScalar(state, flowIndent)) { + hasContent = true; + + } else if (readAlias(state)) { + hasContent = true; + + if (state.tag !== null || state.anchor !== null) { + throwError(state, 'alias node should not have any properties'); + } + + } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { + hasContent = true; + + if (state.tag === null) { + state.tag = '?'; + } + } + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } else if (indentStatus === 0) { + // Special case: block sequences are allowed to have same indentation level as the parent. + // http://www.yaml.org/spec/1.2/spec.html#id2799784 + hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); + } + } + + if (state.tag !== null && state.tag !== '!') { + if (state.tag === '?') { + // Implicit resolving is not allowed for non-scalar types, and '?' + // non-specific tag is only automatically assigned to plain scalars. + // + // We only need to check kind conformity in case user explicitly assigns '?' + // tag, for example like this: "! [0]" + // + if (state.result !== null && state.kind !== 'scalar') { + throwError(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); + } + + for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { + type = state.implicitTypes[typeIndex]; + + if (type.resolve(state.result)) { // `state.result` updated in resolver if matched + state.result = type.construct(state.result); + state.tag = type.tag; + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + break; + } + } + } else if (_hasOwnProperty.call(state.typeMap[state.kind || 'fallback'], state.tag)) { + type = state.typeMap[state.kind || 'fallback'][state.tag]; + + if (state.result !== null && type.kind !== state.kind) { + throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); + } + + if (!type.resolve(state.result)) { // `state.result` updated in resolver if matched + throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); + } else { + state.result = type.construct(state.result); + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } else { + throwError(state, 'unknown tag !<' + state.tag + '>'); + } + } + + if (state.listener !== null) { + state.listener('close', state); + } + return state.tag !== null || state.anchor !== null || hasContent; +} + +function readDocument(state) { + var documentStart = state.position, + _position, + directiveName, + directiveArgs, + hasDirectives = false, + ch; + + state.version = null; + state.checkLineBreaks = state.legacy; + state.tagMap = {}; + state.anchorMap = {}; + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if (state.lineIndent > 0 || ch !== 0x25/* % */) { + break; + } + + hasDirectives = true; + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + directiveName = state.input.slice(_position, state.position); + directiveArgs = []; + + if (directiveName.length < 1) { + throwError(state, 'directive name must not be less than one character in length'); + } + + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (ch === 0x23/* # */) { + do { ch = state.input.charCodeAt(++state.position); } + while (ch !== 0 && !is_EOL(ch)); + break; + } + + if (is_EOL(ch)) break; + + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + directiveArgs.push(state.input.slice(_position, state.position)); + } + + if (ch !== 0) readLineBreak(state); + + if (_hasOwnProperty.call(directiveHandlers, directiveName)) { + directiveHandlers[directiveName](state, directiveName, directiveArgs); + } else { + throwWarning(state, 'unknown document directive "' + directiveName + '"'); + } + } + + skipSeparationSpace(state, true, -1); + + if (state.lineIndent === 0 && + state.input.charCodeAt(state.position) === 0x2D/* - */ && + state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && + state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { + state.position += 3; + skipSeparationSpace(state, true, -1); + + } else if (hasDirectives) { + throwError(state, 'directives end mark is expected'); + } + + composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); + skipSeparationSpace(state, true, -1); + + if (state.checkLineBreaks && + PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { + throwWarning(state, 'non-ASCII line breaks are interpreted as content'); + } + + state.documents.push(state.result); + + if (state.position === state.lineStart && testDocumentSeparator(state)) { + + if (state.input.charCodeAt(state.position) === 0x2E/* . */) { + state.position += 3; + skipSeparationSpace(state, true, -1); + } + return; + } + + if (state.position < (state.length - 1)) { + throwError(state, 'end of the stream or a document separator is expected'); + } else { + return; + } +} + + +function loadDocuments(input, options) { + input = String(input); + options = options || {}; + + if (input.length !== 0) { + + // Add tailing `\n` if not exists + if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && + input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { + input += '\n'; + } + + // Strip BOM + if (input.charCodeAt(0) === 0xFEFF) { + input = input.slice(1); + } + } + + var state = new State(input, options); + + var nullpos = input.indexOf('\0'); + + if (nullpos !== -1) { + state.position = nullpos; + throwError(state, 'null byte is not allowed in input'); + } + + // Use 0 as string terminator. That significantly simplifies bounds check. + state.input += '\0'; + + while (state.input.charCodeAt(state.position) === 0x20/* Space */) { + state.lineIndent += 1; + state.position += 1; + } + + while (state.position < (state.length - 1)) { + readDocument(state); + } + + return state.documents; +} + + +function loadAll(input, iterator, options) { + if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') { + options = iterator; + iterator = null; + } + + var documents = loadDocuments(input, options); + + if (typeof iterator !== 'function') { + return documents; + } + + for (var index = 0, length = documents.length; index < length; index += 1) { + iterator(documents[index]); + } +} + + +function load(input, options) { + var documents = loadDocuments(input, options); + + if (documents.length === 0) { + /*eslint-disable no-undefined*/ + return undefined; + } else if (documents.length === 1) { + return documents[0]; + } + throw new YAMLException('expected a single document in the stream, but found more'); +} + + +function safeLoadAll(input, iterator, options) { + if (typeof iterator === 'object' && iterator !== null && typeof options === 'undefined') { + options = iterator; + iterator = null; + } + + return loadAll(input, iterator, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + + +function safeLoad(input, options) { + return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + + +module.exports.loadAll = loadAll; +module.exports.load = load; +module.exports.safeLoadAll = safeLoadAll; +module.exports.safeLoad = safeLoad; diff --git a/node_modules/js-yaml/lib/js-yaml/mark.js b/node_modules/js-yaml/lib/js-yaml/mark.js new file mode 100644 index 00000000..47b265c2 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/mark.js @@ -0,0 +1,76 @@ +'use strict'; + + +var common = require('./common'); + + +function Mark(name, buffer, position, line, column) { + this.name = name; + this.buffer = buffer; + this.position = position; + this.line = line; + this.column = column; +} + + +Mark.prototype.getSnippet = function getSnippet(indent, maxLength) { + var head, start, tail, end, snippet; + + if (!this.buffer) return null; + + indent = indent || 4; + maxLength = maxLength || 75; + + head = ''; + start = this.position; + + while (start > 0 && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(start - 1)) === -1) { + start -= 1; + if (this.position - start > (maxLength / 2 - 1)) { + head = ' ... '; + start += 5; + break; + } + } + + tail = ''; + end = this.position; + + while (end < this.buffer.length && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(end)) === -1) { + end += 1; + if (end - this.position > (maxLength / 2 - 1)) { + tail = ' ... '; + end -= 5; + break; + } + } + + snippet = this.buffer.slice(start, end); + + return common.repeat(' ', indent) + head + snippet + tail + '\n' + + common.repeat(' ', indent + this.position - start + head.length) + '^'; +}; + + +Mark.prototype.toString = function toString(compact) { + var snippet, where = ''; + + if (this.name) { + where += 'in "' + this.name + '" '; + } + + where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1); + + if (!compact) { + snippet = this.getSnippet(); + + if (snippet) { + where += ':\n' + snippet; + } + } + + return where; +}; + + +module.exports = Mark; diff --git a/node_modules/js-yaml/lib/js-yaml/schema.js b/node_modules/js-yaml/lib/js-yaml/schema.js new file mode 100644 index 00000000..ca7cf47e --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/schema.js @@ -0,0 +1,108 @@ +'use strict'; + +/*eslint-disable max-len*/ + +var common = require('./common'); +var YAMLException = require('./exception'); +var Type = require('./type'); + + +function compileList(schema, name, result) { + var exclude = []; + + schema.include.forEach(function (includedSchema) { + result = compileList(includedSchema, name, result); + }); + + schema[name].forEach(function (currentType) { + result.forEach(function (previousType, previousIndex) { + if (previousType.tag === currentType.tag && previousType.kind === currentType.kind) { + exclude.push(previousIndex); + } + }); + + result.push(currentType); + }); + + return result.filter(function (type, index) { + return exclude.indexOf(index) === -1; + }); +} + + +function compileMap(/* lists... */) { + var result = { + scalar: {}, + sequence: {}, + mapping: {}, + fallback: {} + }, index, length; + + function collectType(type) { + result[type.kind][type.tag] = result['fallback'][type.tag] = type; + } + + for (index = 0, length = arguments.length; index < length; index += 1) { + arguments[index].forEach(collectType); + } + return result; +} + + +function Schema(definition) { + this.include = definition.include || []; + this.implicit = definition.implicit || []; + this.explicit = definition.explicit || []; + + this.implicit.forEach(function (type) { + if (type.loadKind && type.loadKind !== 'scalar') { + throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); + } + }); + + this.compiledImplicit = compileList(this, 'implicit', []); + this.compiledExplicit = compileList(this, 'explicit', []); + this.compiledTypeMap = compileMap(this.compiledImplicit, this.compiledExplicit); +} + + +Schema.DEFAULT = null; + + +Schema.create = function createSchema() { + var schemas, types; + + switch (arguments.length) { + case 1: + schemas = Schema.DEFAULT; + types = arguments[0]; + break; + + case 2: + schemas = arguments[0]; + types = arguments[1]; + break; + + default: + throw new YAMLException('Wrong number of arguments for Schema.create function'); + } + + schemas = common.toArray(schemas); + types = common.toArray(types); + + if (!schemas.every(function (schema) { return schema instanceof Schema; })) { + throw new YAMLException('Specified list of super schemas (or a single Schema object) contains a non-Schema object.'); + } + + if (!types.every(function (type) { return type instanceof Type; })) { + throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + + return new Schema({ + include: schemas, + explicit: types + }); +}; + + +module.exports = Schema; diff --git a/node_modules/js-yaml/lib/js-yaml/schema/core.js b/node_modules/js-yaml/lib/js-yaml/schema/core.js new file mode 100644 index 00000000..206daab5 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/schema/core.js @@ -0,0 +1,18 @@ +// Standard YAML's Core schema. +// http://www.yaml.org/spec/1.2/spec.html#id2804923 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, Core schema has no distinctions from JSON schema is JS-YAML. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + include: [ + require('./json') + ] +}); diff --git a/node_modules/js-yaml/lib/js-yaml/schema/default_full.js b/node_modules/js-yaml/lib/js-yaml/schema/default_full.js new file mode 100644 index 00000000..a55ef42a --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/schema/default_full.js @@ -0,0 +1,25 @@ +// JS-YAML's default schema for `load` function. +// It is not described in the YAML specification. +// +// This schema is based on JS-YAML's default safe schema and includes +// JavaScript-specific types: !!js/undefined, !!js/regexp and !!js/function. +// +// Also this schema is used as default base schema at `Schema.create` function. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = Schema.DEFAULT = new Schema({ + include: [ + require('./default_safe') + ], + explicit: [ + require('../type/js/undefined'), + require('../type/js/regexp'), + require('../type/js/function') + ] +}); diff --git a/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js b/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js new file mode 100644 index 00000000..11d89bbf --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js @@ -0,0 +1,28 @@ +// JS-YAML's default schema for `safeLoad` function. +// It is not described in the YAML specification. +// +// This schema is based on standard YAML's Core schema and includes most of +// extra types described at YAML tag repository. (http://yaml.org/type/) + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + include: [ + require('./core') + ], + implicit: [ + require('../type/timestamp'), + require('../type/merge') + ], + explicit: [ + require('../type/binary'), + require('../type/omap'), + require('../type/pairs'), + require('../type/set') + ] +}); diff --git a/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js b/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js new file mode 100644 index 00000000..b7a33eb7 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js @@ -0,0 +1,17 @@ +// Standard YAML's Failsafe schema. +// http://www.yaml.org/spec/1.2/spec.html#id2802346 + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + explicit: [ + require('../type/str'), + require('../type/seq'), + require('../type/map') + ] +}); diff --git a/node_modules/js-yaml/lib/js-yaml/schema/json.js b/node_modules/js-yaml/lib/js-yaml/schema/json.js new file mode 100644 index 00000000..5be3dbf8 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/schema/json.js @@ -0,0 +1,25 @@ +// Standard YAML's JSON schema. +// http://www.yaml.org/spec/1.2/spec.html#id2803231 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, this schema is not such strict as defined in the YAML specification. +// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + include: [ + require('./failsafe') + ], + implicit: [ + require('../type/null'), + require('../type/bool'), + require('../type/int'), + require('../type/float') + ] +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type.js b/node_modules/js-yaml/lib/js-yaml/type.js new file mode 100644 index 00000000..90b702ac --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type.js @@ -0,0 +1,61 @@ +'use strict'; + +var YAMLException = require('./exception'); + +var TYPE_CONSTRUCTOR_OPTIONS = [ + 'kind', + 'resolve', + 'construct', + 'instanceOf', + 'predicate', + 'represent', + 'defaultStyle', + 'styleAliases' +]; + +var YAML_NODE_KINDS = [ + 'scalar', + 'sequence', + 'mapping' +]; + +function compileStyleAliases(map) { + var result = {}; + + if (map !== null) { + Object.keys(map).forEach(function (style) { + map[style].forEach(function (alias) { + result[String(alias)] = style; + }); + }); + } + + return result; +} + +function Type(tag, options) { + options = options || {}; + + Object.keys(options).forEach(function (name) { + if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { + throw new YAMLException('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); + } + }); + + // TODO: Add tag format check. + this.tag = tag; + this.kind = options['kind'] || null; + this.resolve = options['resolve'] || function () { return true; }; + this.construct = options['construct'] || function (data) { return data; }; + this.instanceOf = options['instanceOf'] || null; + this.predicate = options['predicate'] || null; + this.represent = options['represent'] || null; + this.defaultStyle = options['defaultStyle'] || null; + this.styleAliases = compileStyleAliases(options['styleAliases'] || null); + + if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { + throw new YAMLException('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + } +} + +module.exports = Type; diff --git a/node_modules/js-yaml/lib/js-yaml/type/binary.js b/node_modules/js-yaml/lib/js-yaml/type/binary.js new file mode 100644 index 00000000..10b18755 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/binary.js @@ -0,0 +1,138 @@ +'use strict'; + +/*eslint-disable no-bitwise*/ + +var NodeBuffer; + +try { + // A trick for browserified version, to not include `Buffer` shim + var _require = require; + NodeBuffer = _require('buffer').Buffer; +} catch (__) {} + +var Type = require('../type'); + + +// [ 64, 65, 66 ] -> [ padding, CR, LF ] +var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; + + +function resolveYamlBinary(data) { + if (data === null) return false; + + var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP; + + // Convert one by one. + for (idx = 0; idx < max; idx++) { + code = map.indexOf(data.charAt(idx)); + + // Skip CR/LF + if (code > 64) continue; + + // Fail on illegal characters + if (code < 0) return false; + + bitlen += 6; + } + + // If there are any bits left, source was corrupted + return (bitlen % 8) === 0; +} + +function constructYamlBinary(data) { + var idx, tailbits, + input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan + max = input.length, + map = BASE64_MAP, + bits = 0, + result = []; + + // Collect by 6*4 bits (3 bytes) + + for (idx = 0; idx < max; idx++) { + if ((idx % 4 === 0) && idx) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } + + bits = (bits << 6) | map.indexOf(input.charAt(idx)); + } + + // Dump tail + + tailbits = (max % 4) * 6; + + if (tailbits === 0) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } else if (tailbits === 18) { + result.push((bits >> 10) & 0xFF); + result.push((bits >> 2) & 0xFF); + } else if (tailbits === 12) { + result.push((bits >> 4) & 0xFF); + } + + // Wrap into Buffer for NodeJS and leave Array for browser + if (NodeBuffer) { + // Support node 6.+ Buffer API when available + return NodeBuffer.from ? NodeBuffer.from(result) : new NodeBuffer(result); + } + + return result; +} + +function representYamlBinary(object /*, style*/) { + var result = '', bits = 0, idx, tail, + max = object.length, + map = BASE64_MAP; + + // Convert every three bytes to 4 ASCII characters. + + for (idx = 0; idx < max; idx++) { + if ((idx % 3 === 0) && idx) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } + + bits = (bits << 8) + object[idx]; + } + + // Dump tail + + tail = max % 3; + + if (tail === 0) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } else if (tail === 2) { + result += map[(bits >> 10) & 0x3F]; + result += map[(bits >> 4) & 0x3F]; + result += map[(bits << 2) & 0x3F]; + result += map[64]; + } else if (tail === 1) { + result += map[(bits >> 2) & 0x3F]; + result += map[(bits << 4) & 0x3F]; + result += map[64]; + result += map[64]; + } + + return result; +} + +function isBinary(object) { + return NodeBuffer && NodeBuffer.isBuffer(object); +} + +module.exports = new Type('tag:yaml.org,2002:binary', { + kind: 'scalar', + resolve: resolveYamlBinary, + construct: constructYamlBinary, + predicate: isBinary, + represent: representYamlBinary +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/bool.js b/node_modules/js-yaml/lib/js-yaml/type/bool.js new file mode 100644 index 00000000..cb774593 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/bool.js @@ -0,0 +1,35 @@ +'use strict'; + +var Type = require('../type'); + +function resolveYamlBoolean(data) { + if (data === null) return false; + + var max = data.length; + + return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) || + (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); +} + +function constructYamlBoolean(data) { + return data === 'true' || + data === 'True' || + data === 'TRUE'; +} + +function isBoolean(object) { + return Object.prototype.toString.call(object) === '[object Boolean]'; +} + +module.exports = new Type('tag:yaml.org,2002:bool', { + kind: 'scalar', + resolve: resolveYamlBoolean, + construct: constructYamlBoolean, + predicate: isBoolean, + represent: { + lowercase: function (object) { return object ? 'true' : 'false'; }, + uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, + camelcase: function (object) { return object ? 'True' : 'False'; } + }, + defaultStyle: 'lowercase' +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/float.js b/node_modules/js-yaml/lib/js-yaml/type/float.js new file mode 100644 index 00000000..127671b2 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/float.js @@ -0,0 +1,116 @@ +'use strict'; + +var common = require('../common'); +var Type = require('../type'); + +var YAML_FLOAT_PATTERN = new RegExp( + // 2.5e4, 2.5 and integers + '^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + + // .2e4, .2 + // special case, seems not from spec + '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + + // 20:59 + '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*' + + // .inf + '|[-+]?\\.(?:inf|Inf|INF)' + + // .nan + '|\\.(?:nan|NaN|NAN))$'); + +function resolveYamlFloat(data) { + if (data === null) return false; + + if (!YAML_FLOAT_PATTERN.test(data) || + // Quick hack to not allow integers end with `_` + // Probably should update regexp & check speed + data[data.length - 1] === '_') { + return false; + } + + return true; +} + +function constructYamlFloat(data) { + var value, sign, base, digits; + + value = data.replace(/_/g, '').toLowerCase(); + sign = value[0] === '-' ? -1 : 1; + digits = []; + + if ('+-'.indexOf(value[0]) >= 0) { + value = value.slice(1); + } + + if (value === '.inf') { + return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; + + } else if (value === '.nan') { + return NaN; + + } else if (value.indexOf(':') >= 0) { + value.split(':').forEach(function (v) { + digits.unshift(parseFloat(v, 10)); + }); + + value = 0.0; + base = 1; + + digits.forEach(function (d) { + value += d * base; + base *= 60; + }); + + return sign * value; + + } + return sign * parseFloat(value, 10); +} + + +var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; + +function representYamlFloat(object, style) { + var res; + + if (isNaN(object)) { + switch (style) { + case 'lowercase': return '.nan'; + case 'uppercase': return '.NAN'; + case 'camelcase': return '.NaN'; + } + } else if (Number.POSITIVE_INFINITY === object) { + switch (style) { + case 'lowercase': return '.inf'; + case 'uppercase': return '.INF'; + case 'camelcase': return '.Inf'; + } + } else if (Number.NEGATIVE_INFINITY === object) { + switch (style) { + case 'lowercase': return '-.inf'; + case 'uppercase': return '-.INF'; + case 'camelcase': return '-.Inf'; + } + } else if (common.isNegativeZero(object)) { + return '-0.0'; + } + + res = object.toString(10); + + // JS stringifier can build scientific format without dots: 5e-100, + // while YAML requres dot: 5.e-100. Fix it with simple hack + + return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res; +} + +function isFloat(object) { + return (Object.prototype.toString.call(object) === '[object Number]') && + (object % 1 !== 0 || common.isNegativeZero(object)); +} + +module.exports = new Type('tag:yaml.org,2002:float', { + kind: 'scalar', + resolve: resolveYamlFloat, + construct: constructYamlFloat, + predicate: isFloat, + represent: representYamlFloat, + defaultStyle: 'lowercase' +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/int.js b/node_modules/js-yaml/lib/js-yaml/type/int.js new file mode 100644 index 00000000..ba61c5f9 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/int.js @@ -0,0 +1,173 @@ +'use strict'; + +var common = require('../common'); +var Type = require('../type'); + +function isHexCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || + ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || + ((0x61/* a */ <= c) && (c <= 0x66/* f */)); +} + +function isOctCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); +} + +function isDecCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); +} + +function resolveYamlInteger(data) { + if (data === null) return false; + + var max = data.length, + index = 0, + hasDigits = false, + ch; + + if (!max) return false; + + ch = data[index]; + + // sign + if (ch === '-' || ch === '+') { + ch = data[++index]; + } + + if (ch === '0') { + // 0 + if (index + 1 === max) return true; + ch = data[++index]; + + // base 2, base 8, base 16 + + if (ch === 'b') { + // base 2 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (ch !== '0' && ch !== '1') return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + + if (ch === 'x') { + // base 16 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isHexCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + // base 8 + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isOctCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + // base 10 (except 0) or base 60 + + // value should not start with `_`; + if (ch === '_') return false; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (ch === ':') break; + if (!isDecCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + + // Should have digits and should not end with `_` + if (!hasDigits || ch === '_') return false; + + // if !base60 - done; + if (ch !== ':') return true; + + // base60 almost not used, no needs to optimize + return /^(:[0-5]?[0-9])+$/.test(data.slice(index)); +} + +function constructYamlInteger(data) { + var value = data, sign = 1, ch, base, digits = []; + + if (value.indexOf('_') !== -1) { + value = value.replace(/_/g, ''); + } + + ch = value[0]; + + if (ch === '-' || ch === '+') { + if (ch === '-') sign = -1; + value = value.slice(1); + ch = value[0]; + } + + if (value === '0') return 0; + + if (ch === '0') { + if (value[1] === 'b') return sign * parseInt(value.slice(2), 2); + if (value[1] === 'x') return sign * parseInt(value, 16); + return sign * parseInt(value, 8); + } + + if (value.indexOf(':') !== -1) { + value.split(':').forEach(function (v) { + digits.unshift(parseInt(v, 10)); + }); + + value = 0; + base = 1; + + digits.forEach(function (d) { + value += (d * base); + base *= 60; + }); + + return sign * value; + + } + + return sign * parseInt(value, 10); +} + +function isInteger(object) { + return (Object.prototype.toString.call(object)) === '[object Number]' && + (object % 1 === 0 && !common.isNegativeZero(object)); +} + +module.exports = new Type('tag:yaml.org,2002:int', { + kind: 'scalar', + resolve: resolveYamlInteger, + construct: constructYamlInteger, + predicate: isInteger, + represent: { + binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); }, + octal: function (obj) { return obj >= 0 ? '0' + obj.toString(8) : '-0' + obj.toString(8).slice(1); }, + decimal: function (obj) { return obj.toString(10); }, + /* eslint-disable max-len */ + hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); } + }, + defaultStyle: 'decimal', + styleAliases: { + binary: [ 2, 'bin' ], + octal: [ 8, 'oct' ], + decimal: [ 10, 'dec' ], + hexadecimal: [ 16, 'hex' ] + } +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/js/function.js b/node_modules/js-yaml/lib/js-yaml/type/js/function.js new file mode 100644 index 00000000..8fab8c43 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/js/function.js @@ -0,0 +1,93 @@ +'use strict'; + +var esprima; + +// Browserified version does not have esprima +// +// 1. For node.js just require module as deps +// 2. For browser try to require mudule via external AMD system. +// If not found - try to fallback to window.esprima. If not +// found too - then fail to parse. +// +try { + // workaround to exclude package from browserify list. + var _require = require; + esprima = _require('esprima'); +} catch (_) { + /* eslint-disable no-redeclare */ + /* global window */ + if (typeof window !== 'undefined') esprima = window.esprima; +} + +var Type = require('../../type'); + +function resolveJavascriptFunction(data) { + if (data === null) return false; + + try { + var source = '(' + data + ')', + ast = esprima.parse(source, { range: true }); + + if (ast.type !== 'Program' || + ast.body.length !== 1 || + ast.body[0].type !== 'ExpressionStatement' || + (ast.body[0].expression.type !== 'ArrowFunctionExpression' && + ast.body[0].expression.type !== 'FunctionExpression')) { + return false; + } + + return true; + } catch (err) { + return false; + } +} + +function constructJavascriptFunction(data) { + /*jslint evil:true*/ + + var source = '(' + data + ')', + ast = esprima.parse(source, { range: true }), + params = [], + body; + + if (ast.type !== 'Program' || + ast.body.length !== 1 || + ast.body[0].type !== 'ExpressionStatement' || + (ast.body[0].expression.type !== 'ArrowFunctionExpression' && + ast.body[0].expression.type !== 'FunctionExpression')) { + throw new Error('Failed to resolve function'); + } + + ast.body[0].expression.params.forEach(function (param) { + params.push(param.name); + }); + + body = ast.body[0].expression.body.range; + + // Esprima's ranges include the first '{' and the last '}' characters on + // function expressions. So cut them out. + if (ast.body[0].expression.body.type === 'BlockStatement') { + /*eslint-disable no-new-func*/ + return new Function(params, source.slice(body[0] + 1, body[1] - 1)); + } + // ES6 arrow functions can omit the BlockStatement. In that case, just return + // the body. + /*eslint-disable no-new-func*/ + return new Function(params, 'return ' + source.slice(body[0], body[1])); +} + +function representJavascriptFunction(object /*, style*/) { + return object.toString(); +} + +function isFunction(object) { + return Object.prototype.toString.call(object) === '[object Function]'; +} + +module.exports = new Type('tag:yaml.org,2002:js/function', { + kind: 'scalar', + resolve: resolveJavascriptFunction, + construct: constructJavascriptFunction, + predicate: isFunction, + represent: representJavascriptFunction +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js b/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js new file mode 100644 index 00000000..43fa4701 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js @@ -0,0 +1,60 @@ +'use strict'; + +var Type = require('../../type'); + +function resolveJavascriptRegExp(data) { + if (data === null) return false; + if (data.length === 0) return false; + + var regexp = data, + tail = /\/([gim]*)$/.exec(data), + modifiers = ''; + + // if regexp starts with '/' it can have modifiers and must be properly closed + // `/foo/gim` - modifiers tail can be maximum 3 chars + if (regexp[0] === '/') { + if (tail) modifiers = tail[1]; + + if (modifiers.length > 3) return false; + // if expression starts with /, is should be properly terminated + if (regexp[regexp.length - modifiers.length - 1] !== '/') return false; + } + + return true; +} + +function constructJavascriptRegExp(data) { + var regexp = data, + tail = /\/([gim]*)$/.exec(data), + modifiers = ''; + + // `/foo/gim` - tail can be maximum 4 chars + if (regexp[0] === '/') { + if (tail) modifiers = tail[1]; + regexp = regexp.slice(1, regexp.length - modifiers.length - 1); + } + + return new RegExp(regexp, modifiers); +} + +function representJavascriptRegExp(object /*, style*/) { + var result = '/' + object.source + '/'; + + if (object.global) result += 'g'; + if (object.multiline) result += 'm'; + if (object.ignoreCase) result += 'i'; + + return result; +} + +function isRegExp(object) { + return Object.prototype.toString.call(object) === '[object RegExp]'; +} + +module.exports = new Type('tag:yaml.org,2002:js/regexp', { + kind: 'scalar', + resolve: resolveJavascriptRegExp, + construct: constructJavascriptRegExp, + predicate: isRegExp, + represent: representJavascriptRegExp +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js b/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js new file mode 100644 index 00000000..95b5569f --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js @@ -0,0 +1,28 @@ +'use strict'; + +var Type = require('../../type'); + +function resolveJavascriptUndefined() { + return true; +} + +function constructJavascriptUndefined() { + /*eslint-disable no-undefined*/ + return undefined; +} + +function representJavascriptUndefined() { + return ''; +} + +function isUndefined(object) { + return typeof object === 'undefined'; +} + +module.exports = new Type('tag:yaml.org,2002:js/undefined', { + kind: 'scalar', + resolve: resolveJavascriptUndefined, + construct: constructJavascriptUndefined, + predicate: isUndefined, + represent: representJavascriptUndefined +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/map.js b/node_modules/js-yaml/lib/js-yaml/type/map.js new file mode 100644 index 00000000..f327beeb --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/map.js @@ -0,0 +1,8 @@ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:map', { + kind: 'mapping', + construct: function (data) { return data !== null ? data : {}; } +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/merge.js b/node_modules/js-yaml/lib/js-yaml/type/merge.js new file mode 100644 index 00000000..ae08a864 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/merge.js @@ -0,0 +1,12 @@ +'use strict'; + +var Type = require('../type'); + +function resolveYamlMerge(data) { + return data === '<<' || data === null; +} + +module.exports = new Type('tag:yaml.org,2002:merge', { + kind: 'scalar', + resolve: resolveYamlMerge +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/null.js b/node_modules/js-yaml/lib/js-yaml/type/null.js new file mode 100644 index 00000000..6874daa6 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/null.js @@ -0,0 +1,34 @@ +'use strict'; + +var Type = require('../type'); + +function resolveYamlNull(data) { + if (data === null) return true; + + var max = data.length; + + return (max === 1 && data === '~') || + (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); +} + +function constructYamlNull() { + return null; +} + +function isNull(object) { + return object === null; +} + +module.exports = new Type('tag:yaml.org,2002:null', { + kind: 'scalar', + resolve: resolveYamlNull, + construct: constructYamlNull, + predicate: isNull, + represent: { + canonical: function () { return '~'; }, + lowercase: function () { return 'null'; }, + uppercase: function () { return 'NULL'; }, + camelcase: function () { return 'Null'; } + }, + defaultStyle: 'lowercase' +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/omap.js b/node_modules/js-yaml/lib/js-yaml/type/omap.js new file mode 100644 index 00000000..b2b5323b --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/omap.js @@ -0,0 +1,44 @@ +'use strict'; + +var Type = require('../type'); + +var _hasOwnProperty = Object.prototype.hasOwnProperty; +var _toString = Object.prototype.toString; + +function resolveYamlOmap(data) { + if (data === null) return true; + + var objectKeys = [], index, length, pair, pairKey, pairHasKey, + object = data; + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + pairHasKey = false; + + if (_toString.call(pair) !== '[object Object]') return false; + + for (pairKey in pair) { + if (_hasOwnProperty.call(pair, pairKey)) { + if (!pairHasKey) pairHasKey = true; + else return false; + } + } + + if (!pairHasKey) return false; + + if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); + else return false; + } + + return true; +} + +function constructYamlOmap(data) { + return data !== null ? data : []; +} + +module.exports = new Type('tag:yaml.org,2002:omap', { + kind: 'sequence', + resolve: resolveYamlOmap, + construct: constructYamlOmap +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/pairs.js b/node_modules/js-yaml/lib/js-yaml/type/pairs.js new file mode 100644 index 00000000..74b52403 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/pairs.js @@ -0,0 +1,53 @@ +'use strict'; + +var Type = require('../type'); + +var _toString = Object.prototype.toString; + +function resolveYamlPairs(data) { + if (data === null) return true; + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + if (_toString.call(pair) !== '[object Object]') return false; + + keys = Object.keys(pair); + + if (keys.length !== 1) return false; + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return true; +} + +function constructYamlPairs(data) { + if (data === null) return []; + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + keys = Object.keys(pair); + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return result; +} + +module.exports = new Type('tag:yaml.org,2002:pairs', { + kind: 'sequence', + resolve: resolveYamlPairs, + construct: constructYamlPairs +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/seq.js b/node_modules/js-yaml/lib/js-yaml/type/seq.js new file mode 100644 index 00000000..be8f77f2 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/seq.js @@ -0,0 +1,8 @@ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:seq', { + kind: 'sequence', + construct: function (data) { return data !== null ? data : []; } +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/set.js b/node_modules/js-yaml/lib/js-yaml/type/set.js new file mode 100644 index 00000000..f885a329 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/set.js @@ -0,0 +1,29 @@ +'use strict'; + +var Type = require('../type'); + +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +function resolveYamlSet(data) { + if (data === null) return true; + + var key, object = data; + + for (key in object) { + if (_hasOwnProperty.call(object, key)) { + if (object[key] !== null) return false; + } + } + + return true; +} + +function constructYamlSet(data) { + return data !== null ? data : {}; +} + +module.exports = new Type('tag:yaml.org,2002:set', { + kind: 'mapping', + resolve: resolveYamlSet, + construct: constructYamlSet +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/str.js b/node_modules/js-yaml/lib/js-yaml/type/str.js new file mode 100644 index 00000000..27acc106 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/str.js @@ -0,0 +1,8 @@ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:str', { + kind: 'scalar', + construct: function (data) { return data !== null ? data : ''; } +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/timestamp.js b/node_modules/js-yaml/lib/js-yaml/type/timestamp.js new file mode 100644 index 00000000..8fa9c586 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/timestamp.js @@ -0,0 +1,88 @@ +'use strict'; + +var Type = require('../type'); + +var YAML_DATE_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9])' + // [2] month + '-([0-9][0-9])$'); // [3] day + +var YAML_TIMESTAMP_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9]?)' + // [2] month + '-([0-9][0-9]?)' + // [3] day + '(?:[Tt]|[ \\t]+)' + // ... + '([0-9][0-9]?)' + // [4] hour + ':([0-9][0-9])' + // [5] minute + ':([0-9][0-9])' + // [6] second + '(?:\\.([0-9]*))?' + // [7] fraction + '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour + '(?::([0-9][0-9]))?))?$'); // [11] tz_minute + +function resolveYamlTimestamp(data) { + if (data === null) return false; + if (YAML_DATE_REGEXP.exec(data) !== null) return true; + if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; + return false; +} + +function constructYamlTimestamp(data) { + var match, year, month, day, hour, minute, second, fraction = 0, + delta = null, tz_hour, tz_minute, date; + + match = YAML_DATE_REGEXP.exec(data); + if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); + + if (match === null) throw new Error('Date resolve error'); + + // match: [1] year [2] month [3] day + + year = +(match[1]); + month = +(match[2]) - 1; // JS month starts with 0 + day = +(match[3]); + + if (!match[4]) { // no hour + return new Date(Date.UTC(year, month, day)); + } + + // match: [4] hour [5] minute [6] second [7] fraction + + hour = +(match[4]); + minute = +(match[5]); + second = +(match[6]); + + if (match[7]) { + fraction = match[7].slice(0, 3); + while (fraction.length < 3) { // milli-seconds + fraction += '0'; + } + fraction = +fraction; + } + + // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute + + if (match[9]) { + tz_hour = +(match[10]); + tz_minute = +(match[11] || 0); + delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds + if (match[9] === '-') delta = -delta; + } + + date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); + + if (delta) date.setTime(date.getTime() - delta); + + return date; +} + +function representYamlTimestamp(object /*, style*/) { + return object.toISOString(); +} + +module.exports = new Type('tag:yaml.org,2002:timestamp', { + kind: 'scalar', + resolve: resolveYamlTimestamp, + construct: constructYamlTimestamp, + instanceOf: Date, + represent: representYamlTimestamp +}); diff --git a/node_modules/js-yaml/package.json b/node_modules/js-yaml/package.json new file mode 100644 index 00000000..0d236676 --- /dev/null +++ b/node_modules/js-yaml/package.json @@ -0,0 +1,49 @@ +{ + "name": "js-yaml", + "version": "3.14.1", + "description": "YAML 1.2 parser and serializer", + "keywords": [ + "yaml", + "parser", + "serializer", + "pyyaml" + ], + "homepage": "https://github.com/nodeca/js-yaml", + "author": "Vladimir Zapparov ", + "contributors": [ + "Aleksey V Zapparov (http://www.ixti.net/)", + "Vitaly Puzrin (https://github.com/puzrin)", + "Martin Grenfell (http://got-ravings.blogspot.com)" + ], + "license": "MIT", + "repository": "nodeca/js-yaml", + "files": [ + "index.js", + "lib/", + "bin/", + "dist/" + ], + "bin": { + "js-yaml": "bin/js-yaml.js" + }, + "unpkg": "dist/js-yaml.min.js", + "jsdelivr": "dist/js-yaml.min.js", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "devDependencies": { + "ansi": "^0.3.1", + "benchmark": "^2.1.4", + "browserify": "^16.2.2", + "codemirror": "^5.13.4", + "eslint": "^7.0.0", + "fast-check": "^1.24.2", + "istanbul": "^0.4.5", + "mocha": "^7.1.2", + "uglify-js": "^3.0.1" + }, + "scripts": { + "test": "make test" + } +} diff --git a/node_modules/jsesc/LICENSE-MIT.txt b/node_modules/jsesc/LICENSE-MIT.txt new file mode 100644 index 00000000..a41e0a7e --- /dev/null +++ b/node_modules/jsesc/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +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/jsesc/README.md b/node_modules/jsesc/README.md new file mode 100644 index 00000000..840d2c85 --- /dev/null +++ b/node_modules/jsesc/README.md @@ -0,0 +1,422 @@ +# jsesc + +Given some data, _jsesc_ returns a stringified representation of that data. jsesc is similar to `JSON.stringify()` except: + +1. it outputs JavaScript instead of JSON [by default](#json), enabling support for data structures like ES6 maps and sets; +2. it offers [many options](#api) to customize the output; +3. its output is ASCII-safe [by default](#minimal), thanks to its use of [escape sequences](https://mathiasbynens.be/notes/javascript-escapes) where needed. + +For any input, jsesc generates the shortest possible valid printable-ASCII-only output. [Here’s an online demo.](https://mothereff.in/js-escapes) + +jsesc’s output can be used instead of `JSON.stringify`’s to avoid [mojibake](https://en.wikipedia.org/wiki/Mojibake) and other encoding issues, or even to [avoid errors](https://twitter.com/annevk/status/380000829643571200) when passing JSON-formatted data (which may contain U+2028 LINE SEPARATOR, U+2029 PARAGRAPH SEPARATOR, or [lone surrogates](https://esdiscuss.org/topic/code-points-vs-unicode-scalar-values#content-14)) to a JavaScript parser or an UTF-8 encoder. + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install jsesc +``` + +In [Node.js](https://nodejs.org/): + +```js +const jsesc = require('jsesc'); +``` + +## API + +### `jsesc(value, options)` + +This function takes a value and returns an escaped version of the value where any characters that are not printable ASCII symbols are escaped using the shortest possible (but valid) [escape sequences for use in JavaScript strings](https://mathiasbynens.be/notes/javascript-escapes). The first supported value type is strings: + +```js +jsesc('Ich ♥ Bücher'); +// → 'Ich \\u2665 B\\xFCcher' + +jsesc('foo 𝌆 bar'); +// → 'foo \\uD834\\uDF06 bar' +``` + +Instead of a string, the `value` can also be an array, an object, a map, a set, or a buffer. In such cases, `jsesc` returns a stringified version of the value where any characters that are not printable ASCII symbols are escaped in the same way. + +```js +// Escaping an array +jsesc([ + 'Ich ♥ Bücher', 'foo 𝌆 bar' +]); +// → '[\'Ich \\u2665 B\\xFCcher\',\'foo \\uD834\\uDF06 bar\']' + +// Escaping an object +jsesc({ + 'Ich ♥ Bücher': 'foo 𝌆 bar' +}); +// → '{\'Ich \\u2665 B\\xFCcher\':\'foo \\uD834\\uDF06 bar\'}' +``` + +The optional `options` argument accepts an object with the following options: + +#### `quotes` + +The default value for the `quotes` option is `'single'`. This means that any occurrences of `'` in the input string are escaped as `\'`, so that the output can be used in a string literal wrapped in single quotes. + +```js +jsesc('`Lorem` ipsum "dolor" sit \'amet\' etc.'); +// → 'Lorem ipsum "dolor" sit \\\'amet\\\' etc.' + +jsesc('`Lorem` ipsum "dolor" sit \'amet\' etc.', { + 'quotes': 'single' +}); +// → '`Lorem` ipsum "dolor" sit \\\'amet\\\' etc.' +// → "`Lorem` ipsum \"dolor\" sit \\'amet\\' etc." +``` + +If you want to use the output as part of a string literal wrapped in double quotes, set the `quotes` option to `'double'`. + +```js +jsesc('`Lorem` ipsum "dolor" sit \'amet\' etc.', { + 'quotes': 'double' +}); +// → '`Lorem` ipsum \\"dolor\\" sit \'amet\' etc.' +// → "`Lorem` ipsum \\\"dolor\\\" sit 'amet' etc." +``` + +If you want to use the output as part of a template literal (i.e. wrapped in backticks), set the `quotes` option to `'backtick'`. + +```js +jsesc('`Lorem` ipsum "dolor" sit \'amet\' etc.', { + 'quotes': 'backtick' +}); +// → '\\`Lorem\\` ipsum "dolor" sit \'amet\' etc.' +// → "\\`Lorem\\` ipsum \"dolor\" sit 'amet' etc." +// → `\\\`Lorem\\\` ipsum "dolor" sit 'amet' etc.` +``` + +This setting also affects the output for arrays and objects: + +```js +jsesc({ 'Ich ♥ Bücher': 'foo 𝌆 bar' }, { + 'quotes': 'double' +}); +// → '{"Ich \\u2665 B\\xFCcher":"foo \\uD834\\uDF06 bar"}' + +jsesc([ 'Ich ♥ Bücher', 'foo 𝌆 bar' ], { + 'quotes': 'double' +}); +// → '["Ich \\u2665 B\\xFCcher","foo \\uD834\\uDF06 bar"]' +``` + +#### `numbers` + +The default value for the `numbers` option is `'decimal'`. This means that any numeric values are represented using decimal integer literals. Other valid options are `binary`, `octal`, and `hexadecimal`, which result in binary integer literals, octal integer literals, and hexadecimal integer literals, respectively. + +```js +jsesc(42, { + 'numbers': 'binary' +}); +// → '0b101010' + +jsesc(42, { + 'numbers': 'octal' +}); +// → '0o52' + +jsesc(42, { + 'numbers': 'decimal' +}); +// → '42' + +jsesc(42, { + 'numbers': 'hexadecimal' +}); +// → '0x2A' +``` + +#### `wrap` + +The `wrap` option takes a boolean value (`true` or `false`), and defaults to `false` (disabled). When enabled, the output is a valid JavaScript string literal wrapped in quotes. The type of quotes can be specified through the `quotes` setting. + +```js +jsesc('Lorem ipsum "dolor" sit \'amet\' etc.', { + 'quotes': 'single', + 'wrap': true +}); +// → '\'Lorem ipsum "dolor" sit \\\'amet\\\' etc.\'' +// → "\'Lorem ipsum \"dolor\" sit \\\'amet\\\' etc.\'" + +jsesc('Lorem ipsum "dolor" sit \'amet\' etc.', { + 'quotes': 'double', + 'wrap': true +}); +// → '"Lorem ipsum \\"dolor\\" sit \'amet\' etc."' +// → "\"Lorem ipsum \\\"dolor\\\" sit \'amet\' etc.\"" +``` + +#### `es6` + +The `es6` option takes a boolean value (`true` or `false`), and defaults to `false` (disabled). When enabled, any astral Unicode symbols in the input are escaped using [ECMAScript 6 Unicode code point escape sequences](https://mathiasbynens.be/notes/javascript-escapes#unicode-code-point) instead of using separate escape sequences for each surrogate half. If backwards compatibility with ES5 environments is a concern, don’t enable this setting. If the `json` setting is enabled, the value for the `es6` setting is ignored (as if it was `false`). + +```js +// By default, the `es6` option is disabled: +jsesc('foo 𝌆 bar 💩 baz'); +// → 'foo \\uD834\\uDF06 bar \\uD83D\\uDCA9 baz' + +// To explicitly disable it: +jsesc('foo 𝌆 bar 💩 baz', { + 'es6': false +}); +// → 'foo \\uD834\\uDF06 bar \\uD83D\\uDCA9 baz' + +// To enable it: +jsesc('foo 𝌆 bar 💩 baz', { + 'es6': true +}); +// → 'foo \\u{1D306} bar \\u{1F4A9} baz' +``` + +#### `escapeEverything` + +The `escapeEverything` option takes a boolean value (`true` or `false`), and defaults to `false` (disabled). When enabled, all the symbols in the output are escaped — even printable ASCII symbols. + +```js +jsesc('lolwat"foo\'bar', { + 'escapeEverything': true +}); +// → '\\x6C\\x6F\\x6C\\x77\\x61\\x74\\"\\x66\\x6F\\x6F\\\'\\x62\\x61\\x72' +// → "\\x6C\\x6F\\x6C\\x77\\x61\\x74\\\"\\x66\\x6F\\x6F\\'\\x62\\x61\\x72" +``` + +This setting also affects the output for string literals within arrays and objects. + +#### `minimal` + +The `minimal` option takes a boolean value (`true` or `false`), and defaults to `false` (disabled). When enabled, only a limited set of symbols in the output are escaped: + +* U+0000 `\0` +* U+0008 `\b` +* U+0009 `\t` +* U+000A `\n` +* U+000C `\f` +* U+000D `\r` +* U+005C `\\` +* U+2028 `\u2028` +* U+2029 `\u2029` +* whatever symbol is being used for wrapping string literals (based on [the `quotes` option](#quotes)) +* [lone surrogates](https://esdiscuss.org/topic/code-points-vs-unicode-scalar-values#content-14) + +Note: with this option enabled, jsesc output is no longer guaranteed to be ASCII-safe. + +```js +jsesc('foo\u2029bar\nbaz©qux𝌆flops', { + 'minimal': false +}); +// → 'foo\\u2029bar\\nbaz©qux𝌆flops' +``` + +#### `isScriptContext` + +The `isScriptContext` option takes a boolean value (`true` or `false`), and defaults to `false` (disabled). When enabled, occurrences of [`` or `

sRmeA!2Jr-`B*X{&?pQ>kkg~ zD<3nm;=L+x8ke#}AU2kF2Wt9|2+22n>7&+zFJczq`+AW0$v{H_O>CX_1c_+{7E-Q2 z1fEXFRpUL4KN{FX0lvo%Tvai&M{ME0$!<}8_hu(E{kkh`B$*pjak*cDwMEVDs(e@A zSTx>k6pgpF|8!*#>`4w8V~SU~Alxzo`WU|1O0 z%!D*P9Ajd%P1m_%t^Kdy!B|HZI(D&s87iz#06{vs&)a>}c3snuC23Qe>enYyyP5cZ z8)PFBN{XSJmZuy*vx<71g_5%UrYW~6w&?!syr(JeV$#&D?IcAhU)xEF%Ds^mz zPhX}iLwyJuAII@o6}>rtuhaE)7XhGOaDT%0!>l-tAbZDt{8(sPkqEyL|wQJl+^y zCLR>((TRu7`gprusXAIbo$n9A^*p4X^68qM?`O3+NoCU0f|N7;2T0P||4%CQNZ1># z{jX8V8v&fdf>Qeh4+X))fZ(A|@X*tLFvwNF@#VHx7Kc2aK{)T`)jo;;<&!b}_Y6Hj zXMhSJrMyq=VTTavYE?c=>@Q|lsPg2ZVtv`?W089l*P)A_DVdjg~?~eX7rg4tV0rL*in&5NU zzx*<080cqZN^th_d=2rMFG8vR$ou^z%KMGtHOu-Js+RBdw=OI89#)?;!n)oOLgS|y zG_X82k!cC=V)gr@qf3befeqe;0|fMgmUq3Le(vac(64_=kw||J0kX%Sioc&VJDm;O zV0P-2@Mov4H|S{By4LmmHx`(6>9zuY2I_ZkOX`UVO|MBkWU>TlN`n)GDbl)gcf=h^R?$z(^6LM9U_H4OZ@ zte@BQ^g?S%{owUmzGQaZ3c=V86btoMTQj12FQ z;X;b?QTg6e5G1K{ctC5Iiq=rW;=z=WXORZ9a?xv%xyC6Y(Jo%!rh837G#)xGS}K^K z&biNVXN0zw^r7O$dHLSrJsDoBtn0+SWk>-RKb-hF>h$T~d<#Q-X6<)guMP20luv7u z!@KQa2RviXm2Han<9_)^@DFR{v)WH-*M1&aj`z;+VQ6*N|AXGfpc(%6@!`mh@VR@Y z;C&$bOW3t5DMD+Cyd|^-L0|1nL24j~GoIP%h=O@z4{48cI6P4?w0mr!j+u;UoDUODj*CEzoEqV`wf`-7 zMr2Rx$n*kovCkI-)SYUXaR0b~Ok+}WI9fA3PaHm&!=JY9Ni^=#<&{42uM@0yKHJLy zekoY)5V-nCmOFAcx543ygYK6_x9F>X*VbHiHN*|T-{IbsbweI=nu}+-fOu(_q1(B zrb17uQu=KXR;O-Zi7OmDFHKtdY5sWLN=C!m{AoG2Jr4;t|o+(WCj1CH$vXnwN5&ow*f=sMdTE|mCC zCqhqUWn&4mKXT4bH+U?JH*EV(>k_t@U+eNZm_H z=2bzejpuJ5HLE>7KTU?8@V~gP+Vh_DKlBcn&j5Xn1KryHbRHxL_P&djJ&gJzev0%@ zW$FN5n>faKw|075A@)~UQy=>u`e_O6p?@}bWz3|R_PG9$#O+9ZOK;Ob_qgUf&nGn} zq_O5l^tZ_-ZO8r6Z;z=f@Lg;F>nWi|oOLIS*n$EU7Pa|4(w>Yy=Gt+ftgxseU%r^l zZ@xWt*4Jtf3@3fd6jJo9jP^E2)uO#&Q7c3_0)w{tQQY*SrY}U5U_O^MGn+A62fg02 z18QJkM^{*-Pfp+Pb^rM>5y13=3@XkqgudbCA$11Zt5{6t9MEPPM1{Ylm#A&OTdh58@Fb3ZhsFMQM~SXKl|Uw z&eBXY{AyX0A=;dOfj+SnqfW-HW9=9HaA#?usAI#QuKl7H+X;o~YaWZR;?{h_6tgvQ95AM{2=iF zmx!X*>U9YccXsudab_c8uQm~))+G%Cza_mzY_0`N^t|p*Z{a}NWG4%I&&dFVKEmC1zD?+-~CB=n^1xQhrPBqQX0_0%9DCh@UHLt~In1jF3%3PX z!f_Mr&m5=DXq-|d{pjkU?Yw?$qC)9*mg=kj*nx%l z4>t=tX9KT4!H_YQ`BGa*%S0Hqvo?1Dn@5aFvxqy!Svg%Xcem47%i* zj6T4Az%ID2bFAki|p?NNgO=|@8v``v{O(V;Ge1Pzxn2YOt?533Gnu0D>{2*uZjHcfs-)AGYXsV`;iy@Z zVClsgL5P{(0xQ_TL$tV(MpcSgB&rjMOg_RY5Y|(G&=xiW3h;v5&(jnS)z%n=Y zW@nU8(ZNcrTOC&|Ic!g*r!c0xkI;s!m;ks}-yp{}%JGj#j#&LmdV`3q{Xfi6=hBAz{=iacrOQSVM&6C+LK(P)%IsLd8>ltOBTLJu zOxd^bzLtJXAI^xD{h)P#CWl<_Z5{7mmhfKFgWn0y^PIlbZ$Dky+W#Tt7s2Xo@)1+v z9oQ?NjBQ_TqkRK;!}q?B;_?}P9Hy)==Tq7gz>K{~`d?{a%f4qfsgs|#yze~{EtQ~D zs6Uzh?QGu*g8Wf^WM^S0RC@=gzOocNruh)fI==Z^@GyPc?9&yEr=S6TCUgbKkZd zi|;D$6=_N@@kay-@xh)q&DjILWmOi~-!k%Rh=W+Uaq9NGwdtfdQ;0pu5 z(e;bj%P(ijQ5{vn`Tadz9q)P-6o}a84m8%3bkW+nbx_kc12QW0UwM`ucM-LP$|Cgm z?)8lf$~!;ac73x+w7>GB$oeL*CubHF<*M&H*Ech@zS*@Rl=m4^bWc~dDx;FU@|ton z%0Bwqpib16krCT+WW8teN$+4jIn~$ovh2&Z3yQ!kb>PfYeR2h6YT3~b$D+r&dySTM zyRD(=+58`#x9KOOvetJ|aaI;oGSpRqqs4Pe+>|GP;dlz{>6{^Y&RdK zN9(XDNR6Fw~%20_$Uc&@XuZkZe$iWevP7@q?Ey{6+9U*y>++Q zTCm;t`F0Bc)&=@%%&rJt^{A5_^%P(oLRP|DX zTg&<0_yCt$Acy0b1wP}s#K(u(5cB&cz@yb46^>NbYy*pJzneCnJT|{WLQ4K zj~57mx_MP>m4HW;m-ZOOsd*E<_$T&I?fn#kF$23uljzZ4soMIgwm;s=pFi*?Q(t7f zX@5%w#HSW^L9LRFdb+O^b;KXl;*YWD0mdJ01In8B+7|;T?rzVW5m>4Zidd>oXo8Ca zc^ufQ%X%B6)@*xqjc+r&7??C7o6lMY%^*2D4dnvk>F3^mP~clGuotF{QREBk8BzP> zf}Pa8>?cO;lRLY*kpF@X1z)`mqW%09N!is)GV;3G`uFDQ&++#cE8YGSC7u1i-=8WHz3-kBrFTchsFSI^4N0)Ag_UOT zFB1Nz0?+0f*MHR6+J9#t(2?F-*Mjl+sAged##=w-*N z#_REngIv1;eUwgd`X>x~UWdJUr_3jg3S>TQyjBaf^L6-edmTRPE*gIE8#7R|*&<7Z z$|-fcRjMK3KCu5q?Pjgl=XW?QBIX+i@`3HXgbYf{4bnh)FlowPFCoIW53Z)MwdiI( zy(01d zw=aZ9UnWT|>l?yj8$N_Atnq{W*6nW`)!&yN(W+nj%&Knf{~`|}?X|y!r2C=w8APVR z2lx=kzs!7N^Tm;q+s`+b3SJ5Y@N_T}yb8hlm(;XZ+GtPEJJMg@El*5-FP>^t)P6Ve zt0Q^ROSQM9SV!`tTJq#b;I)+}Pk-u$(XW34#(TEG_=n>=Q}S>AQQwE}$<+3P@U{7M zf8e#ncV{2px2^);^KWb;zkV=%O@A6&{C)V|`N4SW~#%jjSv?oWYieL6E95wgsWXeI6R(JwanP20pnA~n>z z29;FRF8?(>P$oU=DE^@0Fdj4aQ&PM6rt9m{5Uz39_y@kjbgk{M#z93vmWa8!k~%_Z z-4)+1CC~P(&13e1$Issp&5UW?o)SO|M|-|9c84 z+Z3{SU!gYn`!mk=Z)Tm7Gw8TQ^UvIRmt^GgcLAXA+B-$aF`&>FHrM{>+*x$K0F|hw_Q1>4?VMW9e z6ge>Db}pD{lSkN=^&3}o(0v;k(FnlT=ra4ZV2HSl4z0bscL%xY|6%r|gk^uQ^lnEP zQ+G8E`sZK$+B2N>x%bKCqIX2T8Ar{*dhQmY2U~o2nPZ7!@>v)kehs@A&30d|cWK=b z1wCp$(8!q(r~ltFBBK^_L}B%Z8Z2gR*5N7J#kpMAH4aM{HtlzD+~vA(BgemNXV##` zVSS>dv;!oo(tb2T-z$cE#5E%Io2$KCwfm-y+YtelIfu-wtcz(&M&H!C=J?gFEt}Mq z2FyB~k32_u;3WQpxjUklufNmi_WJw$J=Gnyp3b25rw`f_=6q0uFbCY%v5eRXVVuHXsdg4VKB?xvBYa!Ee>T$ebEFzh;?Gvv@9P@@ zzvz4<_L@QGfKOP0(|6F6^AG>>)j^$)G;__?&qp@22%`?qNB*2oS@sLbZ=H|K6WRxi zmiW#-A32l~>eMc3($%O^A#Uog2>(~=>f?HyJ{+U-0^z!>BYTPVcc1e%{=?tj)m_Mr z)TxKx@1QA9MAz5CzoKzQvGD&r;3|Z_!1Xjq`bz+4K$l$x`mdl;MbXdF|G1z1irHR1 zPwn4W{&n4!Jy&81;1=JLiKN|j>UPa3wr$y9akz=2+||ElUD~y|Q&+O4C+>|JoSjYz zXR`ULYv-f5Q9UXWQs@-Y0~lOdFU@Q2w3qVdW%A2)8xet5oR-f$>|74iM5BdOdk{x) zmWs%apu$_tT8g8S*u6Wv=PtaFy+wu0Nu4s-yQvF-Xywe?MU;zs1Q|iBKb|W;4AppA z7-b$A;<~9_B##Wdo?KAHhiG6ZUVF&@<|b;=4Y0WUI!r#C7a8F7uU7ElvAvxiF~zni zO8+LVrOg6)BOA_vny4$P>o)kUxS-HlAwpfU95{lY_R#!Mz6+`+oy(=+P4Z9Mh2!59 zjdP%k^HIAm?}m|g^n}$E7Jmq~<3%@Djbp9uI2%3si@GTu!kiXWV-agKa<+ z7YVHcs0tOw{?8?XpPJgYB)>U_!=gFqC-@7Ea*YthMhJOXS;{x>rUwybsX2uespIj@ z>Uz{0{D_3Tb3UjoOBliT2L}=3`l8d0`jU_{J+)VEdN^xbCbxU$cc7HRWqjwVJ*PVW z!9%_tig}2~dY9(jZhVxcM&XlTTyDfsQ86E3f#U}{mq^L6jFgdi z$&vXD#|>=m-bdxv4{F=h|KbQrw5tz&*C&26S+lzOD|Q3}n*X<5Jwvs{!Nl+C=6C$s zx{3VGvu+tKN_~dT^!!I0otI-kak+e~;|B#IYlP{cNc@l|!gbWWv?C|Ip}=oA(Xu2c zQZsNMc3Mf@H=SekhwYq`gK;{x=zJc^Q&S3{ZDDzA#hk&!QYP})6X{8OaAeOCGdFP# zCQ7?6-u7FQqP8sBJ<5jTkEUIwK>@GkHB5wE*+u(~22Md2JAy8X)xL z9sxpeH}LldA+h_9MoMFMDH!O86334B(vEsYp2NQRrcRUh$*}w{Zu=J9@MNDWZES1s3P$#jZtm1wKu!b*JO+U6x*s1o`C$qRNEIp? z)Gr~6e05MDCq0A^2T*=4z?o7)e>61r+nyBjQzUW+YaVAeMQZ)odrp_wL8=D$j1l7iL&6X**uJb82GOp(90HvIp zO=r(G{T1h%tRwPVzpv;PYg2kkQ2GlPC`%&k2Y??v_=UNN*o;JK&SAXaJ`V7PiBlmE zuL`NUkV7z0`S|Laep}9Mi_P!ZF#gflNE9_dRQ5-?Z%Z)ZIy%6+?;y2wP5J^}3?=qB z7v!;Nei4I0(#UA#JT5!8mDpQ2~0rf9V zK>X+y7(D}8im;OKB@I(|YR>5?vK~k+8uq;qa_G<#F!U#hw>rF6bLXA(y|=JvD~&$= z3yR4PlSWACob$|MM>9yHhFkC7r2nF8F@I18RTJ2 z-o7I_#Nm^#`z>t*8gBIhqDah1656@A(|~i}hX=l1G30|-{m*zY`H^Tmq|k}-mx{PB zf+I9q$W6ks{ZK@+$Rb+oCtay>KhdIWKbE|Y7gr2zYU^fX4S8{&=Kn9exVwmOHRduX7&YuMS#!bEj_CIYeJkHg0?sIX z-39$+cwVeGE3&@B3!6KmdF7-l$q~>KWf_I8G&L@cYP{TZyK#A#IOOPGx_J;rXbfdA z_{vH)ki#^O&JD>?^LL;4XOKr$JPbC{5~VdiS)*0&Y~;Le*}4CGr$Lub3}^B3nf@%U zo3-Udv4!RpgSXizjCp=EwyHiz2GZ6~y zBMxRFl9Ud`0IRnpQxF$mXADS?>qE|-JUSD+eC{cK$;egGz{P6f(36SEL|TC_PXv~j z($pzaqm-OKyA35joJ&I8MO8V;>#aTbg6M`eew?+6Ff_BP+#vib`+>m-_`#OD^ebKI zz|=+Y)G0+?7XwNBDfOe)vS&m<{_y!)F;~PFLI21)JNFLR^nOn7(68^I7<%uu7(wWj za+^K1i1WK*qjv(A(D8LD!<5pq3{y;^zGVu%D!o*9&kfoBR)rY`oQ2Q{96DS~#Zm@u zT`Xm8Lz;T&L3H(vJi)U?VSi}NOn>+UEr5lEfl>_vRDWMH_JJBA>c|`+kD7>BtGAE< ztS!oG8eCaD&*r(7Ox(4oHX5uJ8gIRyO@mbeqsEA2x8CusRjgF)dULa~H=}9xdeAA3xpJ`r_tq z;E$|l=)}Y2LdB5soY@n-D#t~P0%tVx?qPp27zIC0qYZBqwTv~EaI+Bn5Vt;&nCp$0 z^ED_YI`M-D#yyd<lcUC~gq>b`^*+>Ap7nSg3J@enA|IpqvB$I!fB1NIlYJnGa483kWUkPsJTL=CJo>Hm0h@w)H~8J9~pz@^N*u3pclvZ+~t)l^^QWNIff~%@!wV~uXRtmPUhH>Ya(GF@iDe}X=ae^h zMytiqvG1!YO`n3%15No@fJ5H zE?H7YcN8^DC^%$!7aaVX;xaH!xJU)ntTZ@ihV(QIC)UmJnCEW%oW&rNB zd{{HyyZJ5AXiYF#ISNNPwa*kc)Wru1Ws|F4Hd8l&xMLt*#D%<2ry^#)BOwrv?7#QE z%Ei>`eOW=iiW5)Sz&OcUZ*kjR9?QF@-$eg6Qp`0{xVW%c`|cYArS7BJVBdWJC4ABPtv7HntzH2+(|t+y_Iul? z6xup3do$#uAE_c}=1L?dGWW>V>BNt=x-l>Zb5RLX7@`B8jEE6*SV*d|E|QB(Qhqco zFXgu~`L=>GRV2F$mQv`4k-1}%)APq9=f}&FlM73er{YUstceAiGkq>BK?!hM91RI} zE~Pf5PoYAwx#Py@+^@>LNhh{lB{iZ_WL8Nd|1C0U&d6RR-MHS!XVldyX@AyhHgOrx zxT(t?OWJade{!QEqw$#Jo@#P6-H1dVnM=U#TTEJ|zeb&9mD*LicW%IX2g7|x;C{g6URJWTw3$J%E#tLt7ak=+COS7p~B21}hcxrE+ zAO3ppI}2)ouDQ-lPA(ug3?!@B^lGtJ34bPQVm&p^pW`&UZZD=%j*(TyUh0y$0ZR&@ zGx%jFxRJ!#jeZ z8`^DP4DA?(_S>N>Y6|$pR!k@u9J{}!U_Xtf12me7Dz%gx!?_#174r};Wi45etmswR za7;h?;TQc&8!p(fw7C<0r`i99faqHhQTZ9krfb5^U1_;B0d8DNdh$+_s0=OTVmz8$ zg^iiD>kGanO(>AwO9P95jCuTOv8g$%tl>^0W%_(xkeEIz-GbQ8v?v(LG-5EdXf&J0 z*D(7amZj;-Ne`3G*cQ4T5qTfq+A4?=CIx}i*9$?y>kBkoT7Dkpu0dJoF!v!Us?h>6 zWgxRk1rI?=66tSLUduiqh%5XiWK~G1LntKxWl%tr;#D+)J~@y;^V3pZp|jeVy2?-^ zOr{&5PUw}9N#i|1A?uCHjJCwM6lsCmPmnm3XA~xrn3XcCD8rlXfciEF_zAJl?O{$R zMQywNSNTiWeaY%IpNG8EOr%@c%yku$H?v7 z_55cXEFdh;d)`k-#;!IjxX?KyUt%d6-h`bVZ2MIR*?&pFg%iQwh|6>3D$&( zN{B~bj8cLh8Lm(;4kJOK!fpA_CheJza{H}+_&z@R&iV5ZZQc*o`#{SdXt`c1Oa1h2 z2&3%eW$5PVT$0nTA+EhM&f)0oDg4RgGTrl_CphczG=e9@;e|)2qgy7M7{+_%&m1P7 z80NX7gFHLxyyw*jR&Vp!5d17^O`pb}u+(fyrJKc(B0zfY;3=aC|NTxtB!V)T7Cx-x z1J#P_f$R$J6BLHAWb9qRlI5X@$f0|!NC#e7YS6ULZP8Qzv_W|7E zH3^0}N_g&JD8R)HgGnzu%zOICNQL;nR+gVQR5Y;d$qFw~X6H@O%5%R=RUYJnqtmBH z%8I)F7m%NzvMl?2aDi=Vm;Yh89jt;%UIbsc015%_B7g_md-{*l|ZdF~#*zROo{;8eJ1NB;PgL!6}#WwFar>i2&6TMAqj z)S{E$CoTsGF6JBrwRK4ReOY9K+V4{Bor5~*(ANH=1$9@eC6jH>KSIZ0-ZfJqOl;hF z!=ET$7?f9jOa5mQ$zPJ}O$v%ob!-2P4+49R-vZv>+&pLsh1+mVCksB)=V$%H$q?D#`1j z$=1~035b?}-i4FfQfGm_wTcXnmFE9nm;wd~xI-?BqXzm`5N zc`e(w^diV*ZcF!;t}UH)bvPKNJCHq*(ujZKq-gEmt_;%G1nC(b`2)u@({G6sr2)p8 zoi=+(^ayi{?-d3g6sr#V(?e!j^CrGX1}O`MK<3+Awf+cwyDa#o%9g5%Nf@46=6Wxm z#UT10{drD*p46Y!`tykXtmKb@Y}wv^OsEW16WIMST_xb}?w12@Z?8e6>hx!RP_$jv zmS4khMw+G*$#^Uo!z&nmJTLQ~x$uKpFs(>_#yu()!kFpz*7|Hkx884L>ndk+X2-5Q z^rpe4s}RUf;v&!6|9PjZRIwOw%1WNBDd>P&uCXRA;Y0g#`>bllqy`f^;lrBlrEGf6 z-bLy;7RfO}+^z^N-~>sJ1s8ZHKk=C#wmMJvRfFFzUeCtwsTDqcu08A$0^i}cn0uU3 z4~5^T5(<4Iu5w(nUDj1Fo(tpsi5x&Y)}U$>ef`Z z!~H~140eeaz9J=n~dt8bMef_8_HpEna*;(+Z~+!iEe6jaoES|?}5kw zACuZkCkMI~{NkvJx;55o6QxTJmBTXW&H7g>mYyg+D5+%V5W<;(H&Z)wm^2tqHdU&Z zv@Ro8k)owz1nRb*YOexe9&vN1l<8_i|ZvW95|F&ROwp-5&dP1Km3 zsw(Hk@~$tC)aP5<;pB&JBt9|U?f%VW+d6euWYnz1@$YYca7XQLFu#Mhq~Z^JuVQ-a>C@=M^zxg$O0cPgAsB5;|(qa{Y>e zaIAQ{1n#Bh=W)1XJfr_i%n9cfVZs@kTi$@fndGio8Br!90)mxMF^S$$$7RWYB3^@K zL0sQ=BO$ge9Eyh8+J7u$Z|TCDCJrIwRkAthr*MMbyXz)i2U&Jx$ZqPT&*!aqVrC*YqR#@8%U=QkMkjVzZ+&$_k@GUq^YF+9vr8Na>Ben`@~;s`NNSk9Mw&9 z{cmLb6dkcy$qA!JtAXlwb8lBu%>{P6hUrAi@eoRYYN-~NRR#6^2-)q#Hn6zCi;uvC zYt(M_m2MwL|NboyMkUl8j3CL8z9YV$y2X&i zQCA3fd-EDncOp%WQ1_`DjkyGL{yi^t?$G-J#Ys=eP^(wMLq(bUO#&{yBTiYMZ&X2evx?I_G zt@}9edL4%0M-v)j#5 z+rI5IyC3nOQcRxfwGdrVI5*-0yk^bA>Aiv&AA@ zi`(F;pz(EUCZa?{#m|lr#1cMYc_1c#5OuAcXA#)L+!Eq2?9&8DcTL%<+E2y*H)Vo` z<@)8H&2x0{?op7n!g>riD9NkA~`N^;%e`-zh!e{848B=m*2iAFJ!mx(La4>`$`t+ zsLPLQ-wfIkv~MZoQ~Rcl3ELOwr|9RR_&+$B^k^O;$d|eMIgDcUvYiK1HwAV~>PYh6 zs{GYq{%>w~EjUkg(l4;~x8Abfg>&M_%$)dxwOOXZK%sSgn5B#hSuaV8B9q~TY9LAq z-pLTgx2p{rKudX$q?lSMnlxM5Wq#TO(#-#u{MB<@0{#ChZ(Kt*)1D?sK3@k!J=y@^ z|IYyA7{A0}nz5YN2$`mkl;b$3H&(}ZeP-zgqs01-gI~tw+11SB^Wm9&ABghI5=pKq zT%Of!=|1NmZb}yH8o4R?X>10oi9FabH8QRxI9gFJ9F@-6lDiULN;T%ma*N8uY#ZgYUZMoNi)d-NeEWdB?)#2AyiF4f`Y<;a>=9n zCCBF{n%<8m#}9O8WKbz26;E-`yv<94?W zjC2hyyp4v4RJQ2zj)vS4vS{?VwhB$3Y6}%2o@uFRCmXbt55gKYi3Aa&io9{uE%}v@ zgq|2eNOdV~R@3ccSAFa!@g0|@)s;VE`|;grS#)!?ss6{S(%o)OolpBM*u*3mFfD9zp-JK({iq+yyhNky@{mE zc&DxoON-Ji6#+#eU~~0>V-=26kq;Q!b6R%n;De~c=z?}#=}qQ&h!0E9x18S89w$R! zR9Ep`a$J7$cm~g$c%@E6nwKKs)jH@Gw}n&GB%UQY_e+>KO?5Ha?w(ECS-nl94Ds`J zA}e?8uuc34yi_+JoFoAULd9InD5}_z*ZHk{ccG zA0t_3+IKbL^IJ?}dykT;GD>@!G#UePdEW6{VQJaL8-flJd|s3J9QO)uFtP2`QrzoD zrcfg^`b(y=5SBd(ozOeG9A{madQd1vF%V3e&?`C2_7G#?xR3nXh^YHW zhmZI8>z!%MI`5nE07dUF>;oz3eUiNSs2$PuZ548m!G!#jeW-VjL~2)gbPK|990xl1 zD_U@_?|SHE0DXTrj;bKLNbHB>m`3d(IimVJMA4+jQHHI=KZ zIdFT{J{||bA~W$go_^A;30ypm%Mc4$p3=@W_QF{3$sb^XARfo7jC2u?6`qT~5sk;u z#j4GY$8jH}1y}r^AAtP5ON3)1@i;DZ_0aZpp2g$14+)p><8f5+?9ClRJdUH4+Mz%H zrw~s*Iu?(khMbiydSNCW#~@cpt}3y39OL{-ya52GnYnfZ*22)zz;6|#yN_&p(9p4O)VZrocFEA z-`J6gIWj1>u3=31pOi%6Z(JMp$u@$&OoaHs@i%%*Z5Myzv-{=j!o?TsApXX!TZzB% z96Qh6ll;kaxwg9khpf@~8&^(IopKJeMJwNW>f<-s-{w=yckuZ5?@eMNaiei52Hj1v zje@Pj-#GGdNBgY!8yC1jZQ^fyI*(ZZxBGG#y?~e$avbZ+;g~_NR=k#3I*#K4V*lU=SC87#tsdtBJFt7#x!Z z%PA+TRJht~6TTzti>ThFn;PMf6}^1+#0ab3S}Nw66=y}b?d+rcurtet;dq$c^L5@o zx4}fr4D9#LUV>_|TV4E)pKjR>Sz_@!Cby5@p?MIU6)+13i(&Se6-Q|ranZuhQDWWd zxH3#f;Yv?p6ngtrxEwxMDS7Ei8=hGaJZ`vwX4SbM2Y;?2f=8hWZ!%3KJ3hxOa$5hM z!$bOJi7OC@a=>!UzeujXwcgKAJa z=t0FZQ~Zu^O|ue1QKo@1fxScaHvId!_#KZ1`J>eZy91bCr-iegx#`+)J@Xr$rMI7wRb1;^f4>$+GjHVW{N3JhLNLVvdfXbhph+kal; z(7*9;TaH;xkC8@+sJ~l6mVm|Q-W;-d+m_k-%cl?Mn8x?@X8}4ah9J@}4T>{e1}2`V zer-j7iS%DoK_`%;I`PfZzM~T(%OQ)$**NH)AbX@kpBWPEP{mI~F=t(BXB^BzfO>tH zcOMk@_c})8Hjj`Mj1E2ci4px+x729)Sg6Hy_WI?c!z1gLH+=W^Umj-b7t8LiUV6L$ z@!_DOz{OAcY!|nB8BCJ5YPeP}wW`zMr-g$8z>cMtyq!SJH~(Pv$df&21ePX*mey2; z8%m0gnaH*7=B??hv!QJ{HrTcZl6qY=}Ae?PK<9(!4#vEL`5e&!Qd!m}O13 zFIHl!ltTZAsD=Fc4Gbf9n2$&vCz}!rn{s%X96Nv2wmcgW$tS#nJ>Ef|GWNcQ-nW-jckg}mt`ptarl0(l@H%tbF)> zrj^Ie;+G$9<-_+8Rz7?`*vg0Rdsz7%neu)0J~n*sqW8t&`={^m?yl)rd*9ak_PLqz zFX?@3_`X{2i^KPOt$g@?vz2G{8MNQZhwpV(K75~L<-_+gtvn{op#4@pd>>)u!}o)& zeE7bHmB$d~m+x!k!}l&$K79Z5U77nBOj!HaLb7cnXT^!1wA$F(t38N;#{nG%)S>?t z;C0?bhcYO7qdf-mJCj4V{HrA?w{)J}mzTc0WcD_8J%Qsr!?ygE@7V22Rx`>{-9F}( z9PhNe;VmX`MRa(Tm9-y+abK1D7>$b zN^SaMy#y8gvAoIX_o~aG{`j^{xChrCPbz=VAFJELTjs;7cJOWr;oaRKyd_b1srK+@ z`tb4`yt6}ir*;T$Viex^_V9{*c&k=fdk+lZZQmihcog1%_V99icrzWmFRse)^CLHQ z#4jEhGW2`f<&N_6llo47#2vh*5Z?3-;VqBCyQ4k4B|f~hk6L?^A-r8Xgf}+|Z&rJF z6McBK4&E^#yytJ|sJ$gocthL6i~I139K4-Ec=J1imm7uGr9C|FN=Lu-k63&E&8sh8 z_U{nhTICP;`5Bix+8@h(cuO3-+e3J7Uf)rBuZhCDvOT=HKD-hK?-wDw#T~+{j>0>s zJ-iYh-lm7Gy+cBHM|KFWFbZ#v_V99jcuO6;P9eOFzw4;In|>XkUkfj7ZUZD@K+QHjBgm-s`@baSYwrvk@(-n?>c@AEhSD&9x?GWB8${+CaOD=bmpC9ny zt$NVf`{xke_8r1o8in_}_V8+bcrzWm3qp90T-y=-rbgkN*&bfPhZlG7N<(mhw#=bf56YLyWCNJUgg8v^nkT@WeD%c4&g0} z!n?UWyapfMQU`Bg2ybJ%coS;x%qYBb+rz8!;Z-?!6(PJEJA_vpg?Dg!c=z}B5ut;mk*}FY(;Q6PYXNHp1EL&#} z@HQPzcK>tDzX1~44j_LzfYioeuMX^IdpJj8DQWDs-%)f?4c>^DUg<9CnE6pV7YltoGNOcR{r3O+(tYUseBUf7kv2uKmMY`?ISaN!4xIU#Ir( z_1*0+tvPS@Br$mhls9KY7CTtNt0^Q~xnFQ_q_*N1PGX z-%=bQg6iK!_20Um5#jH+yJI8ok4G303bX4kjn;qPuhjlMzpwpM&z{w`{cY>NbQ`tb z)jz@2zn80j89&kXlP7Gy>YwpF^`Aa#&e=6*PR(xrPusR%_1`+!wSOnq{-Lh@+4YyI zeh7BOq<%S%U}(rmkK1Q+*7C6|$LvSq&#M*!^@Ty-L!arhr%h`^pQGF2cTP_rb#wR~ z;_&O?@N3{FLZ6$+Bm86!|yv~zJIjmR@-;Te6X7FlkcJbnbS_6g#e1uzvbXI?b}A}yHztu_3fd^;z*t+}XQ(-i*C_DRRTNcb^W4 z&EEaCL=^V!x^!(|>|R2WjN7&L$v0|qE#DcnxwaoMYCmOp%m{lbw@1C6wtH#sWA!et zcD_;bNWCY+_x<($RQSHDl@E>L+gthY{oA!FAHHwY`%~fjo4jw`D7q9xy>oZT7)9gH z3bA$G)Hp`bujzgE2Soqn=w2E6-@!{8`Y+LU=wEcV(Ld>Oi2n00YfFE@n;V5Ut3AAl zKD_mJ8N6dcc>8wJF6o2icQ%ZP1aLwMIj;a%At-drEvQU~uBA-s*3cGTYLD7=%} z!z=OORXKP=LU=cJ2(K^-Z;$rya(#F?4qm4a-q;S|Z9@0U(65D;HvG3%-!=a4F#0{^ za@hD!wrwv$?}d|**KAbahMFzls5u;chVRSt-SnN)I{bcYruZS+?OpS@#c~u_61ql_;Q6!EGJij2e(;vx{}>ySoh}`xi^LHn;E%V zALqistJ^6v&WoRP^)w@;#LX6U_|mp1fXrtjkaKN-Dmaydlr#SKwl z!Fqa06ke)5yqP|{O}87ovqN}Cwu49iyxA}4zejg#*MEUN&~*;8%uxdXn7v-i(pO3+ zoqu{;ee}V>lnEA%(pO&lcIO;#wr0M@VYh5=^W~f(n=iNU6Pd4iGdoA(mom{5Yuh)~ z?SWr9dd3#9M+Iev-ADqb4(07h@q4EZplen>e)}2wzklJOA17k>Jeg=}+PN}y=oIpC z9;IUU7ZOeBAwU{S!sOWWrpdADRiDIWuHt3pldNB-Zo$1Nr{r^)quBoXba-q=*J7Tz z4=_1a(=@p(_VW62VmKBp`Ls0l(3;9lTPk)%c8vzpat7Z=`Z7eHj zom{s2`qJc@*)L9x&2TWf^}Rt+m|tGS%KE5^P9Iqis=CMX#_axiB4riNpyD(E*jkr& zYS|51{b8QtlBfSDf)4u=uQ{hZ^5-=8wQgH*`MjJ%mE3<$B+Co+P{ji`in!*_L%g}19%5$dwX5^J zr;8YScP%h?fkXtrvxII{=6Q=SfN8*U2Zvi5s!;(=f676e=-uPXXVGMx;OGH31+Phd zWO(T^;P^{*C9}Sumg=|-Q(ofGWA~gJX!tkQRmYipXcxgo9`SYjnEINpraqnM@NdKI z7S#9FE<%rBIT=dar=zB{awe@TYFkzBW4U!ThF$w|g1k`&8 z^;IG2XPxJhY7-DS74-jDyAtpyil$9CBZnK5XheY(0|rD40t$+fKmr>`APOpSnNQ?U z5Kx1PC`6M;))+(u?*kPTk5BPJ@dV}eL;>*x51@xd0TF@+?Ek*i-Lo^B1ds3MdDzVK zbXQk*S65e8cU94Ra^`FJE;dJe(_S3m7#E(~Va>k;T|nc#_m4uu-atnFD>4?;C8@mU zh>qHfKXmiZH!W~u!^Xtr0qHzMu+HiJ@N5(bluM5x|?Z^QmJRJ5_jQo&*60Dzg z<->3Y?j75gt}qDi0Uh%i6A6w!O|OGdo@ZdS86ieDeqiHG%LR4kcJ!LYL!4H^vpTM? zqx!FLM(nM=i>cglD>$yw;J;6rsdax#|-c`xU zV^0j1`r#4Qz&$$!^9+4k%bAZrHM+T&XWD@vTg(pMj)Pfmi+fotZbBJvhaZL(hcMPD zoD{Jc^|w1-!UhO6y_~A>mo%Kx>8r(}Z=#7_ly}{1YBxJnN$o8&O19#>>3Q zQ@lI~*Yoh54rNjazJTPr_ec$t+>MW3DiM~)JE#9a)i2<@)!T80*?Naaz2YDzL+p`Z zVP`wc8e7K`YMik(yjy?8ImFp#SlLz;I+8crm!;)I5$;1cYKgdJ)@%mDO1kP7&N^#X zFWB*&wOJ^=7p$Pq+TSlc{47TKOv~*~$0?;PuwFQe(Qh0C7+z-A1*MRQIM+c4cPWKD zD#ncWwqWHh854b+|)M% z_4!$GyWiY7b4XS!{x#4IL0XXJhR5R)<9Kjkv>h%Y(pJ`?`okFoU+P{;u>9g#98&t) zZ}G{J@Ix_n^*(IjJdOWHv&Qg?4A$jo`#lp(+vlJzKfgG6zuWeI$}hMXa|(~L&4oGK zqO4RzS`C!GQV(A~!H<_{KytO5Y-G=YZ6yqV>V5e=qy@Nr4Z<>vAO04-1%P zK$+W*9T%ms@)Y`;V3X?vX7xw-3^cG1?syUZ5yynyQGW3< zGs^!#E=)hqssJ-Yy(&O{h+h>j!7iX7unolka)wlq4d=c$z~*s8iZBPJz{Bt5Y1w5{ zI%I+cU~p?W*EF+(?_V32%<|KEip6XQ3V2tFO+~)m`!}>cn00w*{n<-RFDyn~ep=7u zO>)o>M6Q2I>yVY;njrdD> z&z0yl%ge1ImLl+#1i@kf8w865@SH?nXQj3$HIls#wASqnyj-e`t|C!`i+ zl@+Fr&MLb;^%4=>C<#ex3UaV9W)eMP^@J#=*QKs>);-JdNg5vxyL$%oHPX9y7f~2Y- zx8-@^Yp_gCl4X($XWt<9=V>`%*^=`d%sGb}?TTyiDOM06b>VB0kjB~8H$&7J<L z)NxA#^aH)3Af}4~0Cegu{2^Hu2w7^cgd8DhA3UCCu$}ODp3lFC=~9OL^!{-z-E@p& zP7Vtv7Pb?&rf!xO?0*SUV1ok`@MSi>gu*4_2A1#lnD;UQPMecjg!e$ZIjNK79j+Jo zB3Pk63RsdTuye-oWeBsiGx$OL5_~m{qb_`mZTkx^&8c{m)w5S-E|7ZA#hK*~FT}In z+)l2~o^huLR7fGvIhsU|CjkEmbE0l&j!LAFL<*1WMLb@D#~qRdUx_AL&CXduG|?}g z2)fh@NKawzYlKY$(EfbpK+q00S@*5(W!vQsNRN?gOqLwR>muHZ%sa*&IO^6D%~gDd z)S2-*8!zUSIR&)4dq4)mhSXr7j?Kt`8Sgr!)DHdGAtbz#RD#Y6k4~g~2CYRc=W{H; zvTmrGuVZtC2T9}7;a&*NyxP@GE$>Y%Y5_YK9Cs7zy@qr}8<_PiN`pm>&kZcr4VG*OlHXZIH+~x>B?l`YfY68tJQx z(LO;im_--{iA91M`UGtSjPjYbYC4T=cBQraWJs# z^iGUzZvF!Rq4NGIRs4o=Cy)@BmC5fIxQ!TRj{Ro*WmF52x-9DAe?m)vK@JT^xQ30? z-b9uaDq4h4Bxb1XMrs1ItEcNm#5PSotCtVLvev|e<-Ajm)$+!KWlJ%DDtZRvj#O?!`0Plswn>)+&GW>TN1l1=7I1K>UFe))qytLaI zO+o`Eq;{YtCQ(TClRCgMkGJ7s&fwxmHqgx<8*qpWws8uVPggJE`kmD!shfZ*Esxgg^T)jE32D|n#XpRbhqoX%dsewU*z4)O@~B-5|cWZ8FNtWIukx3&@8CHt5Mi6 z><#HICp;3XjTun{^Fb)7iO>O0>;USs%%Bf^-lB`j`gF@K8`IsHh^7mX(IZlM|3puG zrTq}V0*eMA@WQP=Vgd%FrLsA~GI1h+1dj8J(lSXm<(Lc)As^bLB@;C z)#`;@i+H=E${K+2yc9y_WvFxszax~=M21pY#+NiecGoQLa%I@^9K)6$(CZ$94>D%b zWcuWl+L{heol156RA}qF2h#WnYWsjkt6qjUoSN^4v->fs5i1@O&K?jra&&%H*_0t! zWj9=yRW^F4(;1}ck0TpIRvSk)Lwz09B*RqAkld4vb|o57GCPuT2C@iSVqbD4!RSjI zS%D~VWV2EcwP-|v=o`ACX7ym9mnUMiCJfu-1;U+l;vqQfPLyGwGNaa@uzA<|gHaL$ z=+;aD8p0a^g&Epx^v;A5iSXu*30Ft1VVgk@WE}ZiJUNjmb70Px^%5`R*j|0aAx_4d z<^>IbLvF<YXMj|JCs#+d9IK&1pfTo@aQ27I7N<7mR%qY z^*epV`JJRT;F1?sA~TcrsWJV53|4loshBf@BGzF0mf@$<0(-VoT{JUJHC71}(AW{! zcZ>#~zX4N_B3gFP#WoGtLN5b8P?nv}#swX^jWgmYw}-;VCV-D&kcXq~)GB=moYbpV zYF46Gz7ieU#*XrJo#QA>kS8bL1G?p9$&Z9SNzUB>CqW!d*iwrBDkQxV3tLJeV%XAo zs20r7?X~oNv0ekS!?5Z;`h7^$28I8p_|i5nqBy?2FFPBy89 z2V&)-(siG1G!tW_?c>BN0n)2A7MAHntLZsuYWT3Ul6lIG5 zla!q=0IfWn4c32N22SK;SPOVA$?=7Vo1I3tx3<1+JY{IfKCc>!OR+~ci|>H{XOh$T7?d7e3lrg^G3L`}e(!oJk`xw=YnarFfRH@E%|3eb|C-Wo1L z4Uyg!5sT;G{~%wE07udi!a1iBezFJplFlB7T>WiX+(P=MzxYK_k7J#1c#$<$lUi!N zh57Bj_@+@uzik@?6xzA38~J*&e%+*oGW&F7SM8#E^x&4`$VByG`iWSvB%>sq!lY(M za{3{EUU;k1i{*A7+!Iwh@WY&ue$YEP?UC-Z;m39S_%VOhm>llF?E*zbj%A@@tqN&S z*u?!fh&9`;ISP*PoG;l)rG!*uAc^0WhHMRvA~n6HGt=j+eP?X&qRCs%#V{{0DbB;@ zL5Oq>Ki!8EX9~&^j>NN3$69nr$&VvbWTaF=Qo4&}W_c?pVagrelq;EXzncOe1x%Um zrU1?WrdYJxrkB;zO_zPtG`^tsgJe|?p~sv%4VvO9sWBnkXkntiq|jZ+;*7WXkSg6$ z#MJZfqk0}NBW*v8=BG3GDK-96KYqH`Q-i?j!qmf9V9%d%u;@E1GM#-T<8#?L=(;|U zW9hpqk{mfwe?WJf!wRC zxx-}@c7pBVm(Iajj2B@6ZTW?c@bi8F)bIYl&)59<96zzkd#-X*jFVl{O2K+ zWtjFD(nx5<@E?oikp5$T!(weem$;u1@9TIO7?pwIY8^7gNWgRdH9xof#N6=aQ02zS zBhZt@GtwFq9+p!vBTWqfcqj)DBWh9-?`(uO#Q@|WTvTDx+=>~DvY=XaCuK$>4vw4( zk9LX4UL1|K`6&;rHr+6SAwWi02U+hez-rS~bp?7LI`{sH_;1Upm;`rea8m~T2Q=!D z?F4_A5at5_$PT|`C)&0jVnYnIm_J&HuNB@yKj=vzc=Mlh##YE%UPK9BA30$r0UK%>b^@xZ2qQC_v6LcBaT)Gt%FCrqV^%TR4=XW3iotg*Q}= z0Kq5;l@4IZ`J#l50F3j4_!%HdEqEr%4gZ3U9pVnQ4Ku`UQX7A=BE873tMRHA5=3Azw&kxl{BMg1U<&I4P zcYcDNKU5Fd{6cUD@!TUdntUO;hH*SMsY$;>jI=92Y|?f^220c(@JyooH6lbkoAa|1 z=BLnePk@*CsV45#G%w$q+V8FGcTMlQ`Y&?~y|2XsLEj6|>SO>Qz5D1DJ6aIy#C91) z2Wn3_Ew}t?ITcG%eYYO~+hM?LjA0UX;T+T;uR-x44G$?Rdbg`B4mP1ys;?Dwi~6KN z*U<#iP`}3CWWg-Kjea_HzDlk-=HsFkBZfB)_YP*2jY4g} zudFvVpyS(t_QqAAJ))t8qrU=;)Vt?%D+GFrMw4$2VMrO=j{SMq$C~|TZb!eahaeN9 zj(C6BoG;}b-@kQ0L z*4XFV0XY}W5gCFeP})Zdxz3b(NA^aY7EFWt&!TCmwF?pVei}M@Wt}PQ0i0pUr0)_{ z3bIyle|*BWy@obD9)X>oPS7=ydOPth;C3vvE(-67MB}2cWIIr}4{59zM@1<)QTk@| z-EY_aoL7U*I@H!P-|QV;xFERcb62T-go2-G@^G8bq#8 z#F%$BPoyi(6nJOMIQ$5l5?!t!c&lYt8pVI}=LoHYhJ7?ej*_rkb*n|sqS(b=0bpoD zH__`YAeQK~KVQU7=2Y%&=(8IM5xSF}&-PV|@Yjnm)lBz^vW)xFyo#|Hx|0_+IRdiQ zgw*|zl2vCQL}__FltzhyPvmOUp)X3eH?>b^Wv8PufW$0_s>_ie6uc~3kcAp%lUfCN z&uQw()z{{F$dl_)=89lBBzl%C&pMtx5Bd$1EFu8-41XV4g#J1*V-3t|BZf?bl0@C}_ujw^q3l98nGrwM7=JAvx=$t--@S1i z^6lFFH4u7X_h^&?L|0%1KOljUcSWX4K%3hepoHW3>+$MgHL?D7&x|`J1 zNOVroMP1rG=V?r7aT%*U1HYi51bJB5AaG+gMX`z*iK;tpYB@bUM3QE!m|;rfL9#oZ zl^^~*7HE&t^O4NJ4m?jIBjmLDbijKQ@PM7LgpIg>?A-22SjhzL-fc@4Awl3Y@xW<{ zd!Eiv7Aua4%sVorEAm~Gra_hBMd^KJAWHAz0VInsXID)I$p%^#fzv=fKdAQ`!ka%r zVPuZb-+O@;%g4e0GfEb{@ho!J50rd?KcR{@ittCZf`-aj#RT+uuj7H<8+ZW#mHmJK ziYDi3{NkL&uV}#=>oI5XZ7q^51WChF2TPAg+y>amV?uR(DA8=~YVh-powKZ!&Dl$_ zzyn8v-8j36CtYPbSYslG$>VdplSCFy{CPDxp5~)%$}@zlg5)D}mJs^frHM-erLRh} z-L>%LA5aA~Mx@IsOzGDrGU3ui!ea4z(~f#TLh>3C#z zeb6@wAtnu4*@2mTt0{MEoFm`@-rxXE>no@L0joF+T-n)xB~;$ZalOewhz|YM0+&Xd z*X`TGe0$cu-Oe{gxR7#naD%~_ZQs_D{oG{VR`RXTzAfh47`%z{+*N*&tY%#;Y&S)f zE=QiW;Oc5Hq%dl8_<553Jcgee@N-vuj$}r9+AO&`OQPzGug;I)#OeqSgp>Ih-L$1S zzOLZcUmdME5S_ScBE_Ky%G#`}b?zZENBy#RKcJZxmY>0AgLzf(Rd9p2&*JIFVB7kZ(IkL#3E}&S!Yj zM-$S^cYC0obSzL})KRs4s|VvkPnJYxxtCd1nk>#uc;iqTS@C+j0Ka4t_%E(qV)Z`UC`Hye_B>JZ4N7M)1fKAj+ zH3_^ZFMI&{pmOYEJ)-*}x(mYnH&xLQeeo@*P&H=t4czLXzrG!rWp@%-USMR5%&NU-E-x-ToC?*ao$# zAb*anss2DoA246G7me7aUVp;2*ZI+_?}B~>#{Dy(RJkfi%`KvA6+`koR0@euLSUbc zr7TE$c`V@Hz+}O2I~RdioeJ`I-@1i zgp)9flcyGGIO7PXCE}M8@9VKRqFwdSF1&&@BPSVjRjp4il!n$Px8mfD(WW}{dda*V znWM=kNG+8r@`Y%6yq%edPhd(ZDu822XDO%^aIE}h^q<{GFFRXvs6_ucEgc*m>Np|u zX!3Hn7IJ2j&QpI7_^$rT#?J+SZR%|7lui6xPy10;w;vCY3)J`D3k2i`|3i{*JgL7T z{flgV%3Ut~dWNz)%Ah&vDv7787#Fn-vk)oc6y1_YZzM~dmFk;~pwuf+p_+gn6Mq8n zdh>HJj1;p9JM**z+S{Qfq*eqVFd&5o*~exmxJ?utuEfiWZU*J%hI>F(+NS>eq8iDp z!3GFP7(szNq)JJQRn0U<;XGaCrCc-r;gH^ zs~PC(@F|S|inw)OFCw1~r|}-kF?Ens$}jn=0oIH+6pnqgw zqeC_gb7BJ02yTwiKy<)2wFJVEp-<}9_ccf;JT8O-4;KE43#FYMP_Umwp!f#KT0%cC z%m!T4A19+Ta-&Ct{oaVMm#&lcNJgzjRaZ}_Em%CaK~Ek|s873S%I&mt#a@!0&RM*%3XzIq>0e@7SnO)j?_#^aD!XIP&c1vf1nkG@S&dI^K z63sDAL1DmL#;y1z0y86~Pa4#p01=>U19OA`@JBDxn?rzPdgXX<$1A48E=02JtZ|aJ zQl+mqi~+?4>tbqnTd=IRG|Q51Ia4x6)hNif5`{_K@vSL_HMa%6`uGVDE0lOVvi1%b zq}L)Je|AnasBXpsP>m*kE-97j;dLO!&K5k_)!X<$@G*L@{7Ocq=X{r6#k%$uLS+D< z|DY)X{#pY*gW%VFgP)J_gCn*q-1%dC9GTmgvQhPuW2SZ%%GjwF0!3iXfY5nx*`Dyt z3~MRRo7C3N%&bFCHbh!Z@d}x=58*BpP*5xIT@6L0I$o$gk3&2jsdK8W^OH`*e3%@0 zkjAK>v#OcFzmdjB4?2EaR*r|hpkIumuTp~Yoy=W@6cB*W$XKZeTkD6Qm5TINOTIQE ziZ1VuZ`JfSngjU=XY5tvo94PI=zs7)*7C)tXzb+x=|8`q{K4btkfHX@xfPd3Gv9$c zNi&nkk$OBp+*sLHLWvu_s%d6%kJJW*J7hkM!tv<$vdTgm#Pi>D=`8N^*-@QY^TXIh zKrfuOpWGZr$#G#d^?@sv6SKCM16bMORGjrorKc3j^8P>*w1wYuy6=R;TnbFO_BO1& z_`M(pcQFNgX5PFO-3a{AmY94g?fJ0qJ>3?OoyJ{^wro}XDBoq{CzjiL9%1_{7yX3; zFf_;~|DdxiWnZL){oW;R1;~a zz5~(;kVs{}eJsqQ1ca;kN2bhYySg0CS<6N~vIUbX9ju7za13GWd_5-rrf~d3e+SZP zVoFAnSDZ|wy$9d1xBrU;XNt6CQ#gBXp+`ULa;MpxN^_yN6WX|HwPQp8FQ?mxbN;A>z}XjoGZ@ z(_ZkH@6-)*oyQ1)8z13(r(W4T%fkNRAe8I>6-K~4!bht8xq6OlfyA1khC@%lZswk# zDf?_Z_KNr$O+L4S%o}|`^AuJ)Qd1t!)J_02Z+zM#rCNV{+GZ$i2i}cO8^vZ^@IyUy zY(3kNNHrqC|4gkJjc9>eQjfZU(gLajHg4FD>zz!k_6X`;C>^}Pkd{ zllZh3nM%|&0Oukj=Pd6^OGKgxlynd{?uzsMFHJr1Y1j3tvfemOj3 zZ*bnZpXZ%fnds}9zQHdG3JToT{{Y=v5HyxJdju})XsSO+Z% zdP&63l~v`9r#Gb~gR^I5w zo4pGI?FWL*nAUwa#he$pB(z!!F)aG$NF*A;r4~=!#$ryXcZ`@LDx5&+F`x-&fJ`=D zwAoXD2MP=8>dm{y?OFIHDr41#kpw_PvZT2CS^+cQP__Jr6sMeuamV=_sSC~5@=n<*0EcO~w{LyCf znS2kE|I42R{CNyN(xIY~KZDbl5ZYM0cC6HW%K=q8k3okXg*<8^L_xQ@{cWV%gc;w; z-Q^ziuj-F1o@lc#v8-IFKGj?HO_t>;*dP?-Dxv!E!3@ILg!VW&h92{1@~zCzRu8g> zv9R1lF>2>Ca0kV?f*7o(6t)aM8dC`W15mo^e#?zFJ0qL&1>?=m@|H?LshB+Ci8njY z<`;3$TpHY-3JkgH`;HGpb-@bY(ZfI#?eGeGGW!AQXLBlO*R@kcvnXDE6WLBevT>nt z+bEhm*TNc3Si2zMuuWe16avyV)v}+FPdT~tsq!!>iS6PM$H{~h;@*IMMZDPsl$0Jb zz+(8s;>~`9T^M!CKK^x>hM2CF94iomoY5s5H8%E*<$yVmfcsg%{{1cV*SCrOd;*Qf zpwG?Kb!<_`pnzYWVHr2C5^<+Um2LY7)@^tHVfD51lRf+!>tWn}@w^i_7Sq5)N2Nhh zjg@!xwUZ%fs*aNgMV~jvbiFAk3%Fn2$M{$#MNq(2_e6INmEwjVm2 z57cwex7zl{^wlXWVpU`@l}iGW?T&lz@n9|am~@f=#mSFIpgiK&m$ZbGCG_Owl#7v7 zx1T@|9krGUd?*|CD)ikE8}usr;HkF!WR_nChNeFLAhzKjid4^dc=f@pa7s{RzuzAD zMU=h*=NXZ!Rk4O;DDBTrJ-i!xsNEW<{+0a9SvHO|H zXt8={Lacm@+@50j3LL2H`V8}{eA*Co0VHlb6sU>K@IX~{DR2`ebG@k}i*;;#A3vYr zC)Qq%e(^taEo6rgn$AoV#c&Cjt_IA3rQX8mfA4$@ON3=2{>0~I0vu>1696Lecv10n zfU2D;!&0~x6a5qEQ<1mTIl@DqDWc!An`n^!D}VzbhdyHpN7`BM)em(MfHD10D(=J| zLS7q9c($!Ek{!Tgzjnk@aA#dYop}V-sarur@&Ri`b9{*PC-nh5Pmmq(z@F96&-Rv5 zHTXXsIQ&m7!Kj?I#!w{Y#wvWU>xnx*Kv0NBj0*{d-)dD1y5>H@qrUG7U`BWs65dac zd6dFW3^iBZ$MXm%gN@SYvfUK%&f2r(5L;cnz5T>y@oaB*yyLCHb6ybA)KKMW$(c*5 z*(>yUYcFpV#&)IacNqeDvjtlx*9HrlW5m=O_@YP7o&(&=EcRHy9(Xi6k8)lt-gYxA zDY1ClV^D-$)e+d+0X|p2_~LDEf^f-f4UkRU4>1bui;K72!9|Dq{b-xU8X1qWKbpM% zI9=P4w|(muw60?H(ljtrj{hr~ynm;60~kk#<Tcq+MDI$9SS)l6MawDYNblGdjmmT0K!fbnMh^VGg;XFU;WC9{J z!i1VvK1M5a#9ks$vVd}-*noVXnm5pE#1>@6Q30H>oGM%YN;Mm>o!_BZ0QxdNX4uL$ z94qK!7hS2oq)uQRb5%%1Xwx=zp5(-AdscFyc3l4EhaN5Ut|L(L0m>o8c|cc?lvh3x zYZml|yx{A~1H2C(D9ICi^%?4A^@USJwz%Cj?vq##fBmWHkIouJ>0#R2IGsEVS!8oH z@ie3Jnx8gZx-pn)SKoOV+#^P=6h4RXu zn8%T!`Z9~9VIP#5YiPY=T}|td*QWE1aY&=!h~x3%w+RfX4Pwxoy%1k;5g0gYXGZRL zobYBfe6ize9FOTDKgKri-S%plXDeo)75Ai&zo6l_;lZWiUnEzotyk)gK~PPa8Z95E zrvST4DV3E^56V?dpymR&eGe`lpQ-V66R&4tTb;hNFvJvH%Y(^I4I zfb2pymu{!f)Z&+KW$zqs4rtE?szqgDb*M~T#93IWZU>w265H;hWEt=`Guq}$B+GeP zR9!ScYu#UE2ets`P;DW$nUB5jk;9-aJseBf75WHHb&%Aas@XRn?+VOAwFe@aDH6~{ zhN#n6J>xY6uYL8$>XdIop^rN?}Ha*dyxvptv&#Mbu)5IW|X@Cr1i%bYhOXbq-XU zqTYQkR_#7KI|1a7;%G%Z6eo?ng*0a$dP5EO0N-|Gtok=tR5oR2xWLm?@=5@&n4Yd0 z^PzZ!h#|9?^(g>DErLQ%4+>ZDBjs}S3&bq-6Mqzce!ve3#O=?z5xYqT59s|_j?1f` z1cV&T`J>4_fhT4%=pPRpl!Gq=;2j#E)rXk#KLCV&1pv+d6YBvzaBfm-P(}!5_YoS% zVgkw2KxW(hp5U|TfQwIzZ@-RWXloCw9vqh_#8OC-v-ps9lW+)?%JPMP^ ztnG9EY^n)i*-O=(hZoIgS9?kZPAJ?n{|P(`ZxO>khqjt(#h>Wc;$^r&_hDf_o+KYu zxRw1qa^C@*B=dyBFCA@oxte9>yM^3jpei(N3PjRKec52b7{|5DHq5?FA7Jh0({jRx zf^UXIe=H+g0OF2hshi&9CSqlzleBzU1{E+ddDET`XAs|mwb650U*;aAf0?9v=+PH3 zc&7nYtgwH7ofAIDQ84G>=z8CIcs}|@%@X_TZM+W%0;|r_2&L_TS z1D>I0z|$kz-r)Po3&8j0H{$RWdJF%d=A@eomQArYHJ17yx1R#GdQEP{=mw(~{S==# zH1`2+3?ECsAiJdy5xu1Q2ntyJ#9UK&gs-r#|3WwJxE2GJ6W)idX<$*G;T54jihgT` z6V}(U%)r`lZD7$Fm^eOnv*)lC*3Ese;{l<=4l{8@@8R{FfXV24|1 z8eC8DBGK9+G2#e~MEPmjbagd$CjSEldDvi>*e_Wy&Mt#r=*$&asl$(SzQ=7K!3%B& zp`1qin>dtiYi#;u4RW$yEJ~;SZz$!4-%Ra>u}785aB;=k3&+_iOQp(XkdBQ7@4Fy3 z+YJ~5I})^Q7c1i`Lor-Tdx+=H;jv`##zZ zhdedIx0fLSc*Ux|-fAQMkQUM0^{4ood$O(cQy3MAYhi0c{Ta3{te^ny?sT1asJ6;@ zXN9?8oa>GPTZM`bQ75$Hx!yrcmLz8cVH!_Pak%pf?pknDS)bn6H*!F3ypqkV zz$Mx8J`m*KinDw={A(K4k-_W7OI@qoBm zm`qm-+VUM}XV+o_NP^i(&cnhBzL7bXWO)GtPrZ$+Fy0M+wI=Ky7IkGzE=(*LPP zbkk5}|F|k2OEgsmrAp7l%kk9tuO}YDLx{6s!-=w!GRsD!WUj~_-pm<>`y+8QX$Ih; z9gx5DCK5KdI41<&cj98pJ3$Pd;oXr22Ja652Fnj2=}=R4Xb!5QVS+#}82+IVe~26z z_(5CM5^CsMW$$Sg=Yoz5!v9rbdb|H!toHUc^bFU29=%kU#3R#qHCXE)a$msMH zy>i0O5Z&Ur`snW81WGPJ4q}kiDnqEMxJRo7Q<}h+;yl2>H#jWHsp!(mCF};niQ0r# z-GEzf;N~U0`|F$j+(Kh&9l8X2v7g1hky@93#goJ{1+?Jo>56obZH}`wbb@ZHbfTP;U22=(f;wOsRv# z$vFpGc3y=K*TK}U?^ME;Fy~Fw!GA?mbamPcW9qt#DQbiQy;iaN&hLgWGq)k|f{8Gr zBg^zj)4=iQREg(k4fSLi6~eEpX|(_4*;^pe#5fbF!zunQv{ zshwkxi&oymYZY+0&(7q+)PSQO1j|g~101LH#oXvSyrI(*cnfV=-Z=*sTfD=yqplgQ z6WKz~5`8DMjQs@ituIeH7_e!iE*@BVtmoxDxWYY zeNntGLgx((ax4PQOBhLC7bN0tj(02y>X@;(U&cHpE;Ya=@BeKqnmFwN-Yh%&)H7fo zgbk;n@X$_riW5rXB7k8!q&NypL0y58E_a0i1i5Qh+>`Ng*NWPvNkgSce(tKdG~Em> zn&&cD?N{DTadactEIi_3D&QHMwmvGtqACM252>6FpU>h#I}zt0;G5@R=Bo8D2?PJWaWL69BMmRZU7eb0ZHM;sUQdl^rCGyuIk&d zG36umRk-iSP21fnjvLELG;`&`j@~#Cw`$&jU}o2v840F0t{_XsS_22Xn3yHnzyG3o zmAH7~C5VAG|GAQXS*X0TmMHf@)n^Ife^^r6($^|?y>Ook=}K0(MY;*)jUn{wMmhD6 z13e&7NZyq71+!-4IXpBH(dIJtz@mEHgK_|k1LkxXiV|c zhcSr{l;|8lk1{HYp<00uUk+3Yud{>F15Nt}LD_J}!y&H&&pe4vdz^fsJl7P`RS4dB zEWO2L1+gbOe}Km$J9>md2)ZgSF*BS80pxOUk0Y~F^1@SsnPu5<zwrK16Q1Aua=C z{^Rp(`~}J2;M1(pJctODYY*r)1`G>?!U@ER`57jL!$U1R!oj4h$Q<6-nXFNs zPMlyzJqW!4xL{8C`Dv~cuogD?#6%i{by+%*C1mxD^=?*bH?Gw4_yrrOG!pz~yvUkG ziDj30fds7=J$^~&OD!~>FWvZ($ez$rSV?Mf?b-9P8@uxU z`zIU;q%}*8oTztDx)er(jZt;a1qZ-aNK|fqj0L*|^qkJ#-;7E~WK!9pInpC={JfiW zzxrnCUi^g*tdi79JmexD#f@BeO=hR(h6e@t%s$6+TG^na@KsI6gr_BEmGy>(4UrvIdZkQ!UIqQ)VQZM*GCtRrUa=q}M&9xx<99Pvab_OGZhVyAQS&IbRTmbBJOi1;K?t#+{$#pfW17!T->@ zLAW{NZQV0}nAUL}kRABQ6w^A{pitrAXri1A; zfa`1O*{b*|W1G~%hpeAGd3^-0;2{^;#0{L;@VS{g(J^)HxcYj8hBCRMi|Pi5v<|>c}Tzr!)`! z-n>?1m>jy`-q38mU52+vh(853{aU8Og)GjVaAI(oeUokBaQg;zFYdqcEhssoD&ZIK zYpa{6i>k$(K?7Ak;(oXLaT~_l`B>;#*HPaGb^mXGdOQl^8f2hEoD!S0LcN7`L{7^r zb{{Y=eCujBZ}Y9QeOt)4p7Mq>$w&FdhGqm7?d54sCc7v{W8tE9>wMUf&^fUBYQFTF z7KpmC-WE(=W|NH$fZ8Lc4!=BYzR=%tS5^iFCId3B7QWU21kok@}Iku2V^Lz$1Xd+F;9(IllVVJ3AnZ<{>HU6AJxY8+@j3a3$q=W&bUuQ=#2>d zVFJDnKOXy~{6n8d!1m}v^&D=wfUpj69`SW08X@OT_7)ybT4MTt_dG(**G2+f{CUKE zfWYCu_+H?+?@{mJ0rdZ3-zD~GH|{7xW3|Uq`h0{!49f|hpg`;sjKwyhr>mUuf$+q( z8vAa~zDbd@5gHEC)Hc=oivy6} zxZa`F>CDOg3)+^J9))uYNWBKF(o5x4U_%QAc^bm^5J<~dNwQMMQRHB?6t%k<>8*DN z!ZsEZD3ix0Vi73<((WSi9_Evcg%HFCHTIqu^OS`1k-(4v??ukSj~uubq5U#xd8{-D zYMK}m9Bn@pU60|y5frw2L3PnQSf=1kYM` z^67-!-uZwll?X-V9xJUCT@RdS7X5ZaU}h=!r#9w$ae{lkgc_pX8JChF%yS%-!Ip0n zuC3v+k*<&Tjc{KLA9Kx}qoK|9og>(5Y11=xPist7oTLRxR%#%L&TCS@*jKHRRK$bk zcK1Dgp*ch4)``{F+|Vl_T{duJvA8B4vcT#GtB4DOnaC-#+C{J`46 zNiqqWp%_E0!=SHF8-|D^wMopF5Qt0361ZIk_%Zet~j`v)z!_`wv*C_m@ao27f zrcDD5_Ojf~cj1cKw`>;rTzU^S0`7gVK*@Bp3*&<`*bh|0;N}khw zos@5$PRpb9*cf{io;<^NW(djwA-Mz_yF2#jhgfSo23w~x7jN0M)7gV~Q3q&k z*WYX2(@1}XZYf$A16CRbY|AbK>}x(4M;i-iY{wc_A`#={Ul*fo7V1JOG{Ru^74eUJ zEOTts^!?Gu8hw>wT8j5N)l?}4$!{_q;>di;J(k2DyVFBaH|6O2pwHa~y1x>voK&-R zxMnlkL}*U87$j>8!Xl%VAQglfK6VPbx{&(*_zj zcrxo{WsUViimF4P-*WCzQ->_Sz#paaArjOTrXaz6{T;y3_oNzTQe~lf94V|Wn*7yI zLhJBbcp4^#i^gE zV~e^_myEj~q~ifVyoG-e*uYfrU-0@4U?KJ$KXS{3@#Ko;jKbtn4FFNqHemI7$?Aq=~_R0B*`K@Bjd#uDHW1h|Ou&I|ZK-&uIL)-3JOKHg7)Asunts%}9xkNkuC zHPr0ognvc!2#D3-}L*J}Czs*t78;a7eYQt28ikmy{+zQD60Af zGZE^Uo!bCPMhX2_9}ft<$!;y{+ldc#@o;Kh_!{VV$0kAQ<`BA4w+(SnfJC+T)|kXC z2|pqM>WY5*Ni8cye{eWPAW{c!v@dNzQ94n5`78KfQ^|ofXa{;pa&SeNG?^k+R6SV^ zsylNowr=7dNc@e3YOo*r<5tf)W$hN~hebdEjcWm94C(~i1TRj;fi1QyTuZgRkke1T znKx`Ug?VoY3TFp^!-bi(A<}3FnK7U=Hc(U(q?1YQy#*MD=fvCd=v$K7n^n4a*{W!B z-$K7V>ZJWNcPpu7#F=&UJq@lgWlN2B_Fhwt96wt{8d z%?bANfklC(-_^mn`TNl$!4~T#;Ktsn&&VNr;HKgE!BF{tv=CO+U)%4+o-LzRK4$7C zxbNfL7pHBNnOa!;!uLFiz+`mDnAyxfkNL-e=8b-NKfLRLuf+26o7zIuB>!aQ=aew{ zSH2{BiO5`AwbY=HHClJYJP^xA^=?%-_b% zzmWN_jloZh&(CjaZ<%dx5%Z_T@^Abxu7CJVEqC+hGk-=b|AP4Z{HEr*`Gd@#AIpDj ze13jYqa{CiMMil8j81#HOX`QqI8e_Igev2LG+gC?rUFMuP%}Vru`(+)5u40fk<&pAqrLLnf%i#o&JpX1~TJnzEw?F8Xw_{XEs7XRlj39R`icFwsJ}M7EU(Okv zG0YI04DkG!Mq{D*ByM5KHu}DsF)=&Nrph4;i(~ciu~rZFY+vJJVWnYwhX`P+Is>Z|rgAiSH#!SdVNFDQEOs#> zt!Qkh!$PX%ajc=ud+b^$aw^(fsPRB#EaWlqv8I$_F_Q0ue7EG?q%K0LD1VSvj5P2- ziI4Rv8jtu`UqF1bpD%Gg2bE%fVL1w-xOy3xVjRaS-@sqfU&cqt8RjZ?qTgX(htnY) zA7%bqkb@5uALWFbvDNx}@lp1dR z!41ml%}_$V)CL3oM9M|lZ301H}qPkfZK;Txp-_$VbhyHx!*;-l0X3;7QXpee~;#7DVB z{AEQWRpO(3bAgX1Td~vIA#YEBTDe+6AH441KZuWVi?1r~%eyqh=++n?n%#t#z z8z1FeBmxm!9H=2aN+)>NF}e{Hg#U95rAmC1#f(EzZG4oAObP1hBtFW|Iewkr*~~!L zT{SX7PEX;k$G?q_^3&J4ciE`#IArnhQ9eKhbVa_4(y%y`o?!-}^r(P3bbOTOP#Brx z;-id1$!g=HL`QkzqtreD=)EB;Gu*JlmQ`x)pz({-l|F%(L0%O~eT(FQucW=2r+VU} zY{9KcoIXr{%;T?0d%gA$C|oR7A0MT1IuGG1dO zckvDpA7u`!n8ntEE=5HSTMlezwXAkEzE;uU-*_FFVAc32Imlc?e3XvW!RhXSgIh>$ ze3S%acK2O2K1yR|_D$=W;-l1VEb5~q<)mO>aTiM~^u|Lrip57ca5UcB_$V`&^I4no z3ck7VQGPfIZ*F{)SHS6G@ll@STcIs?FW=w^r<(XE6PpU#O;Mu@kVoR9bP*X&$441x zKlkBhiI0*@!Os&PrGw6rs6K-!m5z_{O9{n14WS7?gBZ3Php!SJWgWg!a@0QJe!^Lm zxTQ*+rVG^+AEnC|U|tna1#8GS#BYrhin8r-P+o0(lmy9unYw=?%KGA?+&s@i_tsC_ zBiCsZyc6jy6qR}RGGWvdALVX-tS&yvbX$B1bFAfzLBp%WN4XmUu#S(isMvJFU&Kdg zLwL^`c!J=OOyOCK)bMxXqkQu@_=9oG_5!hJjUAdww^&pkA7udx;ebKScpoH<`KiX> zV6ocxC^s-GRrRSNioi3{Ngs37&~agQQt#=DkCLbJC#e!#13@-feXiw|5MO+hwi<&Z zHDVJgp2&lS>u++YE}C4Q-$8ZQQCh+1Q;J>vB~YX-}S^txu_TGkB^UX z4B#R@%CuN%pZ%{cU%(+7h~>D7Kd~>@3GVsog;m0!3slP22dl zSEGgX*vwk|`D2D|tN%Pg+S>=rm*)}bRQ%ls&#Ah-t5L%07ix@8aVCfxEA_hjJsj&0 z@hOI1Q_ada_9`q=5I<{ZM9wY#3DD%F+9Qk}o> zf9GF)UA;K}>b*s&IE-?F>tFp8Vpnn2s{7a%|J1+w9o|ybzxsa*^`OQ3S6}|A@PQ!N zMGl!NT_+YHGp=p?rGNEAwq>i@egpb&3w~ni46R=`{=e9=lZ+EE& z`4w&6vDw{WiK?%z@>Uq9KY(aq9->6Wi2}+p6s6 zs`$GO!rO(ucl7W4U3bgzZkYet-*qjrk?Q#=va_noZ2>%m)%{tD+s%i(_-@qL}?U`K{9YVvn|GL{mRh98#%YVvoz zXD;i662^@GmMY`#y=l?rBM^1GLLu7ba3ssDsKMX$Lwj`J`~1az@u3uo+fojC+P|fI ziMhD%eHst!=NkN7muqNo_iyUOK^twM4cE}({9SLwb!${c$vnKNntdr}{k!yy!TUjz zDS{rt-}UODoPlyzFW%qvM9v^g*{cD|>bh_zV&w*8ms!et-V}RdI*2l$K#H+ ztP?{fTB#?h8Z)tqzw3{$(K(<#!A+4G{ayD29##k*Gy_7R_`ANt6!z{@l8G@#r!gL? z^>@AJeUoE59%}S={UJU|8|GY&ZCVw7*Uz!6$KUnYcY4Oj?xQY5QRge~-sBnTw)>HGC=l;o7ad(*b3B{@ zwe?vH@N@kOUAKzeKFlY`j)9Fd1lj0q)r))9=bb%})9<{P520_3E#wjUwq7cCK)n4g zdyTgfz$4@Q9c^C;d<;jzl1a6qdIIIu8IT-RSD*M8^S25ndBuZ#Tbn`6JJ)V~SInG;w55J}W3}ket!PilO z2fw{5G=6XSiW~e6dEcecW!1A% z6392ZDBsR`)g#~F$VdFadxAb@0U&SYA3A<#$AyHV_3PSb&`dUy#R5Q3F^7aPCxSzMaIc0Bu5lI9`fcix23vU@%`#b)-#?;ItyRH~E4$dGzF zGlWkdf)q7yBi5*;SP=oo+`sqvt2^a+va0Ihch&<49l!IENdn)yUWk7&TzK53rb8Yy z_B^rpovYuo?Z*S+ced6LkUyIIUnFtCa>vuGKRSNrq}Hx}#WR#sQ3lOPSNUiT1hE2j z;v0CVm^M!Rti3l!lh2bnD^-ippxhTAKdEQ&s^YRZHq0ATm@>oC> z(mGc_AS?xCtk*&Gn0hH(oPPVp40k$nR2ToUj9aG?6cMWxMau5-l83**peHWg#Fixl zb*T840@G{%u#o_L_BdXqF^2%jG|KUy`8_(^+SEnc6e8Jn);P(F_?H*QxcOjRObvet zQ~oV9gsg)z?o7#yu#`|JnE00vx#TN!sx9!6&br#B4_tV{AX^lB!JYBXYd^5vZ$}{3$7MNLw0ceOcTHte*eOoD$N3Fnj zH58Rr7yt5J+z*za`{Zq6J`56`jEZ!q{~(irK%#J}9&p|7g(s7eXS7eMbSq{yfN z#j#Qm_6ZNIfTj@fFGYOQ+h#EEZG0zf%soK68(JuvJ&y}^E*pP-uO5TOZ@kdwLDbvoQIyQ zJQS<6D=Wp38*JYW6(8qtTsSuE_bkBs-vFY%_&6I4#eb{6{O$NS10sT@Ki>Jh1VYv~ zTSKckK2D&xn)@rpzHHB@1YIM4?P4oA2@mLr>f__gl3U&J^5Fj0W%T{Ksc4(;kZfn< zdOZ8$<19l0$J5VG4}Mt+-SyoPpG;{8x0`QHi%1#}67Jzetbgkhxr~Mp;~nxIS9>QTX>oQJ20E|J}yN zS-n`g3-T`>NZ@6|K;Xw|Ft+?;v{*figAOZy#^U3ISzhAf$Q~T=aZZ212z~?pD}rCT z8V%fJZ5VFqNM#+bQ5bp&Ke6_D=aaTbV8vV48v<^@;-cI0$G3UBi0nFx@_>nNbHXzo z`l=G&X8mix`B3p~1`9wB|Nq1@U#sE&glG4nF)3goljWAaO*8wyX!0OkLJfNc0>G^v z0pJXLi1mkEe`P(G1ev7DdeBeY_o5X3e$u^k6g z^ef;!T4D1#a?5&tJ1`@>sf5=A@Kj=)w1@t-@*=jsqS@)O&cA$2AT;R#Yo`GFPoxoW z5P*%o0JqAAAUI1!llkeMGYTEPxo?oy!r{HBFRpdtUO9D3$HD0r3FC$%QC&rgC#H*D zQep{2KjQ^*-tNW)^6W30`>wV>_zKX0$x`Wlh*#PeAs;za8BlRfqUNu>FWRB2OLVWX z^MXB~Res@zHqb(&QKJXi8HDx?PlT$4hC9N9_Ea3S1Pcu(&t7Odh5*`a8X9aZ#2bLQ zbnm-s-$a8wHxBI6FPkRU^MjpBu-%X*xAX0VecVnWZcXBVjJ80QV2*oQnol5mkmdt& zf(Ei`qrba?7RWR|kVXU|7SrW@57j{UvmfyM06TEjwO=$%zB=hz3&#Z(mudp+M7&jCkV-__*#CXgUNo9QhtAiXq(BKuu?C zDWo@spnCEC00m{cX)^hI_5#`GiGZ$e@1-HWkMl8*QY#@kL6+CaO_|J70=3Ya{QJj9 zeuT;QdXs-(@-0lh$(#HElCkJb^rpSWw2ReHZ`ypO4N!f&X|tJjhC0=oc0JSDs+Qig zaZEcxHT0$pMj9Bt8a^0&an}fUKObAa7;iead@OW^@JsR?5D)P_BecnIeE_S*` zP8BLo8xxq64SoFQ8!JD{t(cM&IV#5gD|$zd-xz+6%fN&&rC&{HFWa-&_c57)N%dJY zRJ^?Y)ZK!+iQwIvcjY83gIWJh+T0`-HV>6|54Bqfp6acArPvv;$~_lQ8=Q9S>~Zdp=t^y*Y<awv%f`i$M(3Odyl^8P; zR%TjgWhR#`E_c8Qs)bKbcZdh5iRyehlqf$_yvo3@I@Z;J_}^e*0_sU0hWS~q@x2&N zp38AD1=oY0L@d3DcnDmugzF-_-FB_KhncpiN=$-Kc_R_2uKnW=D_r}>&G(_%@%E3q zf0g~9n}6C$H~+QwSIxi7TSTEqMq=alD*U#R=$nZ86CXRxeK|q{=|iU ze+>RT)xf{R!1wW^A=(>LNMf2H-Uy}!rvy!Ib?lVqHeeuMTmIC=9k*ZCb$4#y`CU0n zS763B!afud=&sOG1s7YOh%teQOU48Wmi!W!yab$U@~T>$KFtYlgM-0PI5#zAOkhSX zJw(Def8Oz1_w))(s@n-^@Ov~SP`DKAN|pXpcpCRxU{cF-6L#euzZtcJ$gV0khAO&% z5LfIc_xNDo-e}2^DdQ@#qhpR&;pJ04Vnn&jw@8v;n}Aq&9N;ZM&815+19O)H;1UB6 zh$f-Fde^SSHWYbEmym@4xk*H>9LP<{$Vu2ht{EzRH_6Gx)XpvMk}9!HuBDw5oM~R4 z3V$m=!c`kzWWuP`&IO-5mn=M~s7FGrYa0V@0;?eg7_?A1ND-4_QM2yF-zS9H4Fc1> zU{~mbK_KeF)WnRkF5NTA3Y#W{qPOShrno6xo0_hSmmifax5wdzZ~{DbDAJMv@& zjWl374tLo{_nb;9*`z+fH+2alix_+G-UqvJ$0~H1CV_JB-+Gs{k!xQILJ3Q?D{OeB zF7F$}tf$$a^a35~)(_081rM=s4A3_fegWW`(=2M+>w+7=)xbh>g+=wgz-1J#8EmJg zLH2YHFuWeCHSVy)pYA-A$Sd!_m=uq(Q~}yMgd}w@PT@!f z89CuTVvh>vTeN{qf;B9hdYvD{&j7mjs!zYv6a>+ONoe{4+=cPl-PW>I?8Qa|9cG%o zRjqsnzR4i8<7sNP$+rsAcIWLsB>ZYsMTY(-qe8N#@QMG9gA@cokpy^Ezt zj4;CY{(lh$h+C+_ITcvL5u131?+bStn90^p-ydfmjKY2Ar1ZS<8EH5vgdrbz5t{fV zZlQRac&f#hH+n%ZLS43nC!)YpEZ}Kif-P{C6o?J~f_otP(l(|Bl&(D^9wlDcK@EN5 zP06 zJTL}&YV93F#eUVl<4aKPZA{^3CWMK^EP) zxe4JX#XYN=Qh~UeksLJ;BAx2TpKShQ;Kx?}{(OMMCMgDmyYNV|Iu@B+_n)ZyQDo#Q zds!dv0_#1$D2MdEzuq;4km=gA^r*3*98FX|5b9;}cr6qek&EQ90`n>|SRP*#>0=sQ z(!s-0`H9re9S&B9+XpMh`)?nh3ji|nZ5giXP%ctGQ}Wgee)ffU*r7b`aYg5s&zjzvlsSs(6-iW-%yI1ejF@o-|$Kn zhCOG1)`?cMx!Tt5-ZZLIcOc9EpMArx>kujLd(XA7QICRr;;w}m`v!F>`{JM4H@xUA zW$hb2>`lt9n;LK5u;mfdZZ3i4a3bFkm6-M{KUk|zp`&Q+>2vw zn6j;Blw&XEs@tY8ftgJ&Z-riY7W$RY-?MLczPSjxw?MZ*FA@LDzG3JJeFmoO z8+M#flYPTY^JIW|6YO8uH)NqSl@65WUHgVpbfTR7xb_Xrbv>eOuim~PvHv0M8`_}> ze`VkB%EQu_YU~@H>GwD78;%%@U6*U$P}h6^OP`-qv2V!u@PD&!Xm*U3>Hf8SLy&Bw zI{Stb&;AGY4Y#bc^zpCl8}81mhRHp87O@)!Z5in4LU3Ml0snV8_FRBW#g0gpSy6+1!`lcN z2&n%1!M{Bqh2rcRuA1t%Z}^P4c#6FS5A5d}>>HlZ&?xGA{EN1UgH~#xU9X|V**Da` zq{?dNZRcjr`tNa;FUQ1_ar$;B`v#|7jrI+*ID@e4-9<-a#+L`|8@53~gl-I4`-aNB zjj9w6wf?FB zkO{@U;YCx}dq&=s7;|(w;GtUkh9hl`hRm@Z^F!7>=r;o;pYaWy7)}03tLjqK%RL~? zRk3gQ2%o+74I?l1jFYu*n2Ms#S6no)unJOlvlve<{Pqn+Oy*|duk9Povv?f`;L>y8 z{i@Y0oCS-0!$T0K-0ISp+1NLHK*M?-xT$H#;<0b|p#o*azTskT*&Wp5QvSRX1@Vxi zZsCI&gz1Flvu}8l`6(O}pJ@Dr1x+)0x`%LjriUg!AN(&oI$|XS-}4Lda$>? z4f-0|ALnxqv3-fIV~ff`ftWrxAHtJ31UrO%!^E{Nf7SN`un)TLZg$l$u1l_=uCZ@u zb(#D% z5g)B5`Ri~x&pFFiO@B`{m$RBMs{s~_b=n|s<9kp@=2eVM%&C|WRL5}_36RU+o`ZRu z-S|pg2yE!*Ui-J-A>zY~blmPyzl#kE{40?=2ptAWKSLqs9G2wl?{*X9$>n%s+lr?J zYhOvPpJ{5LC_cr{ePL&|7MqC_Y*$l8P~0d%mr~Vf?&I7!lcZ$sd+GZ)n&E3koi$gM zsBWTByO4FEGd_knivu^$XvuheYT8*uooT3PCB5lCH{4t>bML3y`3bEL~C=LAaHvLL$b0o;gl_OPKAt@|dDi-^lH`m54q*WZby>K87PY_a%{ z$LKp>NnhjWvtmYy`p>bo#nC&WUEqS^a>KuH`VuJluh7rf0&r`!y@9rYiuvc7&uX9p zIovCbbLlzdco5R{w$`;}K$X5c1cy-&YuRPiIsK_TW&lBPm{$&U$M< z9<+c*;!QF_*c1m@AHrbOD;KpOB+5n2G)UPRmd!**%GDGOW^)ZgzI=q!YG)^?!3*Py z+j-S`Y(Dh!g(nb)aZ*W-)LMm5u;7kDG{uv)JX@b$@d3eI;#BD5^UmnXp z1ATWLb8(2S(Amk-3U4tAy|Z=#xr(m)F5sFMGbeJ!#*}~ls2Br;pKJax8LUFC3UZ!E zFS@MdJbbF+AgkaMv06*ft5sbOq_)T&$*v0K@an)E;{yY~n&@7Q(56#kwFXKb!xwXh zWNSxYihw%gY-El>^(&+h=SHMB4}%z-`|txLK8O0t72IaP`e`kfzPecK)I11b=IfjG z>r4E)6$^v9311__&G!fN_e6Ch3Tls27u(XXcfwcJaXv#;(dUH9X5m&S>?fY(vxML! zoRu3wA%n0fX+9}mE7hcQ!OJ-xkOTxSQyiHCu`!xlf-Dhu1Yg1FE5m;!Qk?lDY!eQl zCrK=tJd`;*o5Vl~LNOSgoXG+y5eLtR@t^UY4?t_Z;7>|O9{s7CN_-H_l>^Y;afHpp8c|`ixzs zW0`c{Qyf1{CDNSU#B~}G>RF@;)kZU!&a@{@ot$bis7VI5-rK)K78VmuK2d~*k!%kk zK&k%1rn(ZW^MhClgR_agjmgf~af~fwY${?^3V&+x=UkJB=w34DhHG@#gu}@J#PPuA z@?X#|_T|GjrS~4gVklx8|3_CyJtSie>kO`RnEQ*@mA8dr<1bLQgU8czNH9 ziLzFn#v!3bN$Zec%=kjSjKCByIGq!5)Zo)(xHhuHrNLI z(i=itq6lgZAVaYh!@s_-;3)($i!P=d!B_AwKMDsq>bw0Lfy=rHaZ+GitH2-Nx*?P- z(dSsvOI?o+R+Yo4YYPm$Za=_kXv><*aiHh<3kUkPUAjh`zZB13E5@@!ah`{R@0FH) z4IjNhXXXGWFpy#Q<@5eu9IJN4@j^xlr#n0@L)S{M-cXsIyui7i*z~;IPlUhI?w7vK z-5trWRVRK@^f?HGCThpEx#GUnC^uiz(7WBqb=^lolTt7pq1uO+BC z-x1VQM)r)NDT%>F*kROruv3*U+=qydQ@V~78Sx%f8ZICG`Y<&-AKgpYVp;$sq~0tES_zqUbkQt-^i;4Fvi8lo|p?O)D)xWr>^izC2U- zhXxhM7e~Wll?NeGsHbX)46L&gJ%Z6!tJ+b~H!(U@l{3*KYQBdBt@tCC8U#gClGJBK zTp`fZPAEGE4>>NUhCNxwp zjbr7dwD|%+J0`QVDkx1=G>wspJqfrY&qaH>28M9KP+z~y^>a7ZPw#5$F5==)3~-P( zB+@0|qR=1mltyJfrBRjdIt1_7iz&ze{ST~g{CQy6#G^G(~eiw6J1c7`|a~ftn)>7MEchm@XzxO&QW4d&ZrLA%$ zV#waJ*P0;Adi+^e_CZK2<-MI&F>h`Fy|uVR9!F8`YF-!@2MDj z{eDn0*#!eFZ})@cvG|=4^}+BQRNsv;>m4pIS3+rbeeO;fWi7KWU|B`?q>zV#oCK9~ z+i&D05TC49eZP`jNbW1K!RovjtZ?2vJ@jKrJ=ASMuqZ|M+{zuT1J6-L0H^sqNB*MU z`-MXg5M(63d15NtP5y@g?AJteha*?J%95*Pbur@8$o68xJg9m;WwqCnuZfHYQ|ED~ zkRn|O>~rt#pj#fvUpV!pPX_hNO0WGeK*dA#T#X}SF>Qb^GL9yb!QR~Fcof21uYn|v zeA%^U#01=aU%8ucu<~sRbWd5xnY83{X zw`rW_4(P<$0C*6kzTmNmu8B+?uQzeLobf~u&iJ6R+#z-gP1d3hP9^D zr&#@Z5$HNs=f+|b#UEy~`~zQj`CWSZX>ugJ1$T4ThuQA5T*KczH5!4u6=_`N-$E@p zi^j6Fa%AsH;>Rt|vHwKMmuR8k2-n~_U^L2cX7ONziKQv9c%6m*xANE77MZ`9l|R+w z-(NdAzj?0*OQ0zB6ss*;$>FzstfRSBIRBI-|8YBKM9Dh+CeF%O*#24CM)Jn1(DNgs6 zMHY7Nh6@c{qNG3Wkzr1UY>WnWNtNle2EXd1zr}fnJ44%4x5CKb$9rQ)@U)HZu~>W)489jNzR@1O(+@=B(_*c>^ZB*AK`U|DW0^&Iwf zCr!>av}SR*CLRmJ9)xhdkETAAZfS-N43yc7KmI_k`o7OPb5S{rG-4kG2Da@WmOr~z zO!;_U&y;`B!aBo8X+kkYr`SdR3MB1W^p-kOba`F$wlpcaPh`>KP_*V}*q{B$s5s-( z8y`{Q(?K|z)2hdtz+6v{S7j)-%l>6mrLiE;p7Gl?0ndG{ng*Us7&G*bh_k#UmFIbp zXQgocpLf}Dy`Sm&X@27;kQS%!OErO|WdwU?-;e9_dffZ*wS4vi(xgE0^gr;>+Q5pA zW~IIW!$PO(w=Izn`To{pl8HRKJX86~`8d4Z#W=8!a$`!TDf(KYF_2rYe@sBqn9Gg4 zb3rE28e_pe)q#+zY1ohC{jHvfIs*K$uOKP13Ms6@9-M4gFcs+V5)tYi#lM_}5aJ6k z4ViN1wLx74tzC{e-h=P$9Ol>K)X#RPuJv#d+pb%cbnIFRFvj9y0t8^4xPx=3pB?vE zqV;#4_5H2d<2ZC@dVlN1w%+?&y-O)+j8DRVKs2oEsfU?sLFZiTN7o|0=@SO1VAdvMYi<)%rfk9%Lc;uV>1@!#JX zZ%UuS!d}!Pf(Ze)Mu?Dov%apZh*R*MdO~oLm8y%A>U54YNm6~zRK3jT@`9fDK5cEb zQD1&3l!>Td3nXzAHVpkiDFeqqO{XW%i$i>6t8?MP?Q!I|`Z%uK+|iNp{?_*_19X8i zQ3~hd3%ulJ-`|9aM!mmP7mu|&I(v}fH`h(k?{D2g`U28RFTv=vATjcwh4yq6gxKv% zTP>IOw{B;bnlZc>se&0+#Qm5i!B&W%%n3FNz8T{6Hc%=3Am?-G>HZRH@fwi(l&ej= zca?zpVO(0s#^r6{GVE{FBCv2?+;k}l`~f6A`j?)4A}YRx=vD`1gDS% zfB-L8_^=A;8)?{oAQB~u-t`ZN3?45f_2d1f(AKXI-)a_3ud|~y7UzAe`J5QgX&@au z$^3ja!)afEQ_9sQ6VGg-0nny#iHO_#T1-GrvZ}6+5Zkfiz&8x_aYno)3%JFKsLzPb zy2jGjYEFskM(Z9WeLY0FNMSa7jJ^mT)$qYu(;`%s$33#)xaZ@Hywjo&kcIQ;2DJfg z!q#Taqk5US3;3nN0~m<8KEJ+YWc%7U$uHOS(ob1YA;T!>?xki^pyh|H$lssYWw@4! z_zEsSPU}&pOE7b_ehkU-z$IuRujKSRfMohSE`5PY1NPbTfLCN6f&~noAhM#~qLY1= z$E?;=Lm?08;nh2uy`szoG-f;d$j22W_A#q_k@yUcSq+GXXM}}Eq@iXRYk|bB;Kz}M zwrApqCG1R(S+#r#2X`|ghO;Mjo7QoPtcBM-8R4l}GQu(&^01ug>)=n2lwyoW`Wmq z;4c#1j_@oSeqyA_KaKF(gm(u#R5z63;`p9vsC2Q7icNo^c-6$l@iE|X)hZ^4!RcQ8 zRAcB1OV&E@bR3+3^+6q~;Z{$bg^v0&Kq_rl1wUC0K384ivnCN#AXUh}MxYV$Fo$#K+Ee|SPPA#6F%4!ZQt`w7vxx(C$QXgTu4x^ zaPsC-q#poiL68Q%gxR^Tb#hxCQeA9%b0~auxap!*$<%w3Os^DS2* z%~0X$!2TD0bo z_!p+9<{HzdkvF@&4lBX*HId$uPyUMAW{{0O%tOBU$S_a7S%5GXmaY{dB@|k|S$ID*9Q%=r;52w%aba%({=&_uIYR;Z6m97uT`8-;T1c z+BH-rf_2C89b(*1vA^WGlO6U6Io~5 z-}9BYjF%aBV1Pj6D!G%jlG*sp{j{uSr$3ikMy_XbiG=IfiyGUR?~^ZTq*rTee|6=5 zAL0}w1j_sK*!$#;P9bd&;4+M!zT?t7_R89haRb%kMy#-FNa1vTwjiL>M{+OQ6Ig&%Y2;; zj@Vn@9e>Y1^^@)jCx3$gr@_-DK zAFPitg}`8*chB`jt*idL(6kuR438jjPq9fc=yZLNt=N@-M#?-d;{?428WY7Ngaz- zC1m#|1NLu^K6oDm68SgpnSQxB;#TUv`TIEk1HA@ne;;q-^b7JxBo9}GbK-6>qrsB$ z=pE=yeUtxx@b}RRxrvu3U4I|#bz~AFU4I{qbvbDJb`{^>M~!l4_4g61L~5$V{PS?o z3FhOZYGkP|h(Z7wv#Pf=M()ib-!uKB?7#H)QMaDnzqR~*<%`mbw){QD-^U@m`ocNj z%m2T80u zkKS|}=q>ujC!E?2(K0K};O}F~Jl*$Pk6bZQd7UYZQ?vn@95Lhj6M}zRzV`dAW)<9m z0Q>n2{ysioI`dMHhwZf}Y)?4Y9@N;P{C%98V#y58@Sf?NI08!rv$52l&ELm~UBw^_ zTsGpKDN}AN(7CA2&d~TtrF_ocO~CcEajv zMjGq-Y#2&ue;?tJM(A{Qe;-+>2Qtgjl}Bl=`1|(#`unKoq&S}` z&gAdo@0&Te5R0um{zn{tAHM)>`}-JG+ZrcFwp)m-qUPrc@8&QYw$>vA$tdOL(&<{yvJ3#Pav?9hA?tzmG9? z-cvUrFR!-pkP(3-HHiT;2&0HC!r#YNOwSH`tk_hHnJFJf9=ThbNm;qPXIh>-Txqv7 zoUa~2Zn6*FmQ8-x_4o1hyJSb`?_)!P(>~<76}fDA0?wCORyf;9Z?k=kSwpgtb)2fI zW8g9FH5f&jSeErL_E46;kM6)1-`~ggy-c&8C$2Pu3;aeTKVKPQVc~x`xiq);oaBV} zgZp@&Zu+%BSuj*Rlp^!@w1h`t2XN&)L`VWY2v_C=7$%8b+ zc@OZ`t>$>^W10W>9$@QZN6z#fU~Pb0$IejREX(6iqd%|_yZV>Tqh!BtVWIYWfREe= zmK~%i?*UeysShogM>zWWJ-}=v;8?bD;;_EmfjAa22-BCa3jkB^{msTs!y;nwyFI|{ zIxQX|g(Lfg%r1LD)cZFzx#L4V!Sgl*DA3;qI`_P7+2?2~{{9BifA5BL;?mcVVnn=u zCI~yY`}vV4&$^!%5MS&Od=#UjB~8?^!uvNmhdPJr*n?=f9B@E9R{;>Yo?v~@wwzOO zooeKR-g&r!Mg;jk0_@r^{y>-ZIrWEoWKuo6^~OCf;eZT#(@H#G%lQTfb=NFLYHYU+ z)o3Lnt|k&+CE!zu`0=VH{q3DkI9@ovrl<_OLO1Q6%u$^4};7CZGTTDD-!Dj)OsIznUloQSKoHfCdq%HuigX?1H@>bT(SQM zY1BLA7T~T+$m{K{90RDdfxgb?f_1lh3+Cvn7cz;vUdqseO(-A*l1bP4>PK+@<>{;6 zj4W(>ZPZ?82q#}7Xd>P>UW!aiR(t?GSOm_=lP91$!d7mJx>q}uDU}iFJ20chc>fA< zMDrfdSo77$*UkIhNXhYW);RunWW<=fAJ$1dz7+nA)IWzbz>xh2j%UU}|=%nG~fe3IAn#3uO_oEfe zid97xF^w#o+Vsqrs~Ut`_Sp^i*W)Ylyiui$JnxL-`}TEC)Ba(6MP61L_@c-6E@0qd zaXIP&Q6aIPOev%{v^9F<w8}a z^*uMbzRrEPGylH&R`?i~6z+A)_uhLOCK&PlEinG;@qxS__F~`vQ+q4A<^99>$bSD2 z@I{Z$I=^o3qkGZb24Kfx=U@EyNx%IDOIjMq^^E(?XCf4BYx8GFIxWNBNL%{z8(U3lWM(#If^vC@i?}`E~2l=d%u$EYeSzfe1 z?tOdXY#+tD!7+pTJF`FTqf<0{+*DL-i&ZM?xCo3D+Z;&UUD=fGE=2`oVyH*#Qtv zdI_p2SULj-4?Z7o=lm+?H+?=2Lx?EndAn*eH7@9XFhKih)nyMxcPrQ)gAo_Yg8-EM z75+GJ9==!GXZI~h{`(Z}7p$&pEqK6yAEH5^AUw7k2xpRyD!`97L2dfb=OsMKV(fXF zX9h-w)9IcVMH~rLGwsP+iJQ(f@G1}x{3i2gsXjqRA5 zVM2-~UUbfX>KM(G?5$ujxpP0P%Ce<#{C|!@ePsQ%>QjOBFskfs(UJlq^qfZa2(xc6Er+$T)f1g>uV!}17Q3MS*`W1Zu;)3Fi zpV3FiN@BHr2hI9!ZO2WJgM<3#?`X}821~dJaU?X>5SK5MnZSSejR32d(;#5 zmm{qQRX#$IBAG?{woFe6u6bqZ37tM?H1?mxjOT-0g};Q8x3yz^VPVC0?_dDI!V;ni zyVYdw#Aj#z+e4at%>ytjQdL6*orhL>Frp+Pd~yjaCUV(p!C=%^kAiK|M;WyN>ot6C zOfxZ(>N=!i4{!VxJv;;ukGOb#IGg?DMZbF&V!7D9@eIm#)p)yzzpN9Kx^ld}+|5D} zHg?FHcs}v$qpy@l!=Uks2hOzl)RN!gNZ8i=!g6~j(P@Qkr0_5j#~3L*%f#04663U8 zy*7?Df|}tDSt!{4M-c^PEJ>BuH?(RwVCp7tbzYSt&&SiIUQ#mmJclj#&AHfJ1QG~Q z7AB4p>AlxA20QR;9Pa1D&#ZN==*E1Gv@wlY&$L!!C<{}Yb4%bg95cjU;)Bg8B`wpk zvWrn83PLWE>)K+qXFFPUPaOWJs9aoo&08tX7kkZ0iz9BvJ$ua@oLnO9HS0+x*Ix6_ z9k?U?i`ve(AUM0d=2|3;5ixwX4K0tp@e8g`rI_2Y*IWZhIwQnh^Fb9l50&!lHDA38MV#GUvks7Dn41Y}MxioND^wl8jlPqD(L`@~$rve)d7`ndAPYN!x4zWDZ<ws(>-Yu~$b$z;d#PM|&2Cnz` z&SI~5J(i0Y;=6eZ=VFY#WLH~fd0TYsM~=7 zIYOR4=g(LZ*u>4Z)h*)MhR#c7_2NyGUdzH^dRC@sF&&%b^KDb{%lribuKC>(e4wbx z5k>J9GY2*i!508UYg1SRs;I(_4P#k0E@pCOSNA%8laq97D;X!(fV4G-hB^v31oulY z$31VyfSmp~DdEUu_DURkQa;x}(!%)%n1khX6{ULpoic|4f?|ZnyWWYsQCCEym{%Y& z_?4y;m-ZhS%+B=m9O`H+jy>sb;27XdGEvp!wfr`Gu_f#l1uw_=8%{oWrIefEQpW)> zm^O86U;?IGg@7{?=6;6Cv`1x}CFN=03tnnP%wPl+A)OM(IVDcE@VpNlz+f@zg+|ah zG^sC~+#4y3_Lwgp;w%jJC)4mpRjr5QYZ-xw^F2RkILP++K~+-Ai&)(l3)1o@BO7(% z3e%`V2%rsm!R#f~Z9{xDP%(`5=+j9=%WMC_?QxVe91GI(*>Z0e+WQlBA?V?9%Sco> z)Fp&?(UYjYgrH28(!ztq0MFqi35584hU73YYUeSGZXF z(W{a84ECdS;^Dc(!eg^$M>Z4x*c7;FImh*;7v6-(h^_KW_M@GuN`ECm%@hOs1NKL5 zxN06$(}HWAuMSiZS?qj$&abzfuaEdebv4P?02)a_ytkphj&p6e&-vQRuN>!V8^4C& zE7p*4zzAU&YpBG&rD14@?L}P-rb~|Nppt7GaIg=+C$OTcM1XBW#*1{4M0GAQ2Y+Ca zU0}@|3<(5-m=#}HSxD#_Ks`go9e1+=IM|=}gU%G3Df@;oWc*UEEZAEvZh@6WmPU#a zc*CBI7;=g0Au8jdrXY3Ak4~51%sCZ2+K05VDMrGWo;*r z>;x*>g?xxysG@Apww={!;QKwVNU|9(k*r@C2^hv5QXbs6^->6Nx>uV=F)l6!Tq)PpQ zf@zefZv5FLNt|y9N3Zwd%oAtS%?+5bqqHlq9x4~rM(z5mw-F=$sim=dO)pAgA0aB! zLr;KkgWm(Hc5ZV@BmaveNUM&mm+nYY7qUCvVY($IUGPbKg}Mv%awlqIVSV^QV4cd; z54l*8q=uDb1e4ssBzHRqJK>Ay4ByC|40Q-LGtt3RCqUN#ss*yC%lOlnKdAYv-Ez@L%0X5~-UmboAv2U!4qbd&(*zNbIEz^jU_KL$z>Iiuc-#>!>L>h-- zs$x=YU*+w{UtH$y$k69DyK#OkcH;JM@>_t)A~oh)RH!U#Rl<~G+ULuE6zePNgF^PG z^Q92h=cg?Z_dR}nIWISgM>ms*JwCP*N`aId?qc`nT!~#Tg;F-`(d&;TMas(@dzzd+ z996@QC1F(P&)0HVeB{!9W&iiQ&_=ZVAM&COV&~G{vYL_hM%w>9EVYQV7n#WHB;{<4 zC&K>kdCWVs>*!Ig(yTsGY7PV&soc02DRS!N$St=cP1ib!BkcdA6xjcLt))X&XC7~g zArt#Q`mtXQY62ctAIrA?dye!F*ZvPEjQ!tFg5NzaIQ9V$_`&`UOp3Wr^Zaj5L|)x~ z1Ze-aSuh|y?Eer2@{E{ILZ4dxxy7ST&)%dF@}N1e|Dz*QvH!!`h8WoY@c>6EEhA-O zKimNN9DoAV9r!WwFWyUGar>6ujfE$pY%84l?IqH|l7AJ#+)o3@?^TZZ&Heis@6WzO z6)>Rnk67F8S?iby^mP;Tz(4BGo!D?j{kdNNiqW47t`n}%_%C$y=Xy$^w*K4= zDBabc+XQ#Q9HfeN7NkCiKtbAe;O zxi!jub8BO+XZ z442+;!z?M#cRL!PhQ?wM?!D#M3prHFVTbVumiu1UP{o;D{Z6TDKL97OnLwN@PbIjRzV(mj(>WWzk67^Uu+Q6ZT=Se|0a@YP2_aWD-?2TTRpKQPpb??`l{zh}c zs{Qmh{k;wuWE7Vpz(yCYMPn}nO4iq&fBL@k|8~FJYZ$m(`+m76i!JIMalbqjQx|gK z&HK5U$EpIJ{eJmnJC}36{OKCalSbb!f1ird&86uxJaqCHItz*a&HeHNL(!Jq>aTCm zPe<|N^>)PlD)_yBx?g@_oKOMzFH8V^zkC&|7S%CBP(^gi(tZD_WAy#qPp_x?*|)F=9W`OW%XSB=66k%Tk^`PEU>mRt3CM@3g8^}URcYAXD4NO`g+pTO*uJ`r=_{%0Of4WL$hS2w~^)!9YMI087 ze5{54e1CUpb(|f(9E&ujkDeQ}h^xGn$mdqo@i+GM=TcSIvoWj%;IH|1NIg3A{~*8)UbF&q+7*0N)Ou$0A3Qw)!X5p9p`ssf8vH$W z(X;3qKFHD{_Ubd}zsh-Go_AjG^k1c#(0^q$UytU09R6GL#;*SBO(0z?2=i3@1wm`A znQB@3uTFAnDR}O4dx)*~lKz9e@r?gP+^YUJd*e5AbsuYc;|C%5AwiL`inKSbn}VJ; zlP;fc*>Q$+g(M(Yk8&$*jM|pp^x0^v8=K-Av>8s`c@c=g5NZu4@@pL_XD`>@crhYT zj>wnd+Z!kH(zG|FPI0e#z5w{2?2T{Ig~YKpeoMq*#@LjSO~Xz2@-IP&hHK?z%?G<7 z8i2nL%}?|i1favOYJMWd-gw#+R{8&KZ@lk0`vUBr?Twc$_twA&d*d~qLcYJ-GzS-Q zkYA9o(esb@aW`{>0z-T7K5pFvX&LT5;D@Gc|G=aCGL$L&? zhrw?dk!}sV*IW}c80^MX4`N=c9^v!R)kZX4Z38lkz447EvpqWBBc+VaR|v$lH~!E` z@g`H8$=)~spzzMUmc+9+9>u)%IAc&ztXZdjwZ_T0oT-Vd!L67(l87X8C9^F=OmL+g zox;Udq)4 zyp0ii<61~!*&7dJ-YsZ~Drx6^ka>Cg`8&=o2qdX3446UKfN-R}@f}XZ>Nyo-=5d_y z<|^SXgtfi#GvL0|oZ^G zq_>xf#Yipu^7{<%Tr^=Z>QT{P6zTqx0O|8LR%q`%tL<1W;@cY!c5q!nT+6`fuub;) zL-?Z?MiK$!4J2x9j@U$ULL5-_3z@L8FE>cU39N^jK$dB&LFU!Rvp4Prd?LTFZ=QZS zkL`jybs01V(d#K>BsM`tAdM|r1e_NU@%awo$o`JDH*SnZ>-&cwSSkCw9N$0IU%z1A zcF*V7zYk&ERcd6cP!i?KF)|?hWF;w-koDnUJsDe)FFBW4(#`jPkMiP9e1r!05&I zk2UXQul=5XER`%29m%Fc{*7oyqOuC%2>)0gA%gr!q&)0&mZ7JJ_9LloKaq%ktnJI> z*cnUT&iUHTpW)>1!2FxApsCq9KL{h7+!(Q5e>w6T;aRsYXLaO0%OjP)s-v~M{dfs? zu<(!7)2YieV2<>UHT5OtckVwN|5%HNfMUJ(5a0o7!hFnziW*IZ@voJQ7OUAdFdu34VHET_6}{xS|JU!?(4(>GY>dzQkN;BxTHgBENv{(qfN*qA}S5ET(yPVUPpAdW8XeD-I^~k_U%Wja+aLM zzCA|}c5wN}2zhs`Jn}W-bK2@ynuSvzVs!NBSIa2J>Kv-cJnWkflJY3L1U=slfH%Gl zJ&OckHiV)v^xRk@!u>A-?9`C;U58|9e7tX`_ zBfamKlwaXv%j8i@TL~=-xnqQilbAbNrM{rETqolF)5>~CK6+1v1jVS~fU&z?GEwNk zA8=R@(*4vVF91x{1h2;a^Xwa@#+n3deLqf%cE1y4Pyd?Seqzk-Kmk~oJbU^gKq4F8 znn|J?^bxdLG!v)o>2q*4^6cr$nrd%&*Q^RC>5oc86Jbx^UUW~3)f^;KZNTWo+S8wk zx}uO9}30Ell%zJT0_0_kJgq!UTHHb)=6))u^q=Z4J?yx@I1E%+N)Wf`Zo;&gv zT~S&pJ_k{%%|f;xi(8ooz+t%Wo#o*p>bZaSEb2kBi2I_9 z!ejozlNn3u=8helGB#&S=G}W+Wk5@&OsJ|igU~&#AR$@XY#CKw#-``BtC~BqE1nom z&ud>TcVK$n)Wn3`J2LX7rX=LxE#x&R9yvphQUId}?a(9WGjxe(F z6>Q}A(ybdhr52WNGuHayWsdW?n3EXiQ5?N~mhS94#N(A%lXZtjCSKO9s5!D`FsnWH z$8wrSE1*t!^GNu;5~x2JpcTw=l~q~?mR3C)QR8@sS^^O+*A1djX}+PX$z5G_ji#e9 zZ@YB#BVG-1opr9m2WP{LfUDin{0`}>1DG0@zS`g;ioQ|^M^`4a5&EjBQ;@#;;vouq zI68o{ZM$c0)r8M*NXA2Bm`*kr{E=R-rtg~tcwD{_-th&rj9T~wzj6oyU2v#8iCYx4 zK?W1E)*s*xMSOm|Q~2>oEKwcnBh?-CQy9XGE>m}HP1L$${WL#J;~h(i2D<=(&>Z~wzL-;(q_{1`&&0(r9nCfOi5wxy!imV3Rnj9c?x+cH77 zrINJe`TEmPmcQtu`Va6gs@I7`mUnOc34CxGTU+4@y#JiYVczVYPG8XQFQe}z$TF!P zprpv;P|Ab-IogTG+Y48teYurFjYx+YRc)jVC)WfX65OwIH9?AnbjN0z3co_6>JP@t z(T6enS2p)&Ux8@Nnmrn3;TTrvNy2CpW7Pw_bKpZg(zkM?`!jYJVq2}&y_3SxZ0L-1 z2Q)%Pxzi_sf;|8+gm&>w*PB}W=OY_a+a zRKeSj+W3%utXWR_F;q!L+`JrG0dqH7_o-?q&t8aIuF36m$HEWIC4x2ts$M~K7Xlsh zKgtrd>4;OwVCB3iCi^AU!&ZK1O$922@~jJi)twub;PqeU z#MK?rN`&x8H$(kPgrJJVQ2i32syfuF1Zp91x0diFmGvccLu)&y_zSzF_~v(R_&}G2 zMV%WJc4_2W(7EZ5!Y)k_dD#P9F7s9Cp5&{7r@&XX;%diR&_J1OEA`kUa%|wHh2*z` z15(3x%Q9b;j-c^C%QZ~IVNqS*0%bUEhH+0Lg!J?rH1rZMc3AIie!Zw%CLHsjo%QT? z;>@OP5@2t1HHc@A+Kee0bG`8Us~Ao3mxgntb7Bhq3~r}u(G}R>TFEVii{tTlIA#L} zl2Sb5%ZFX0JelOahCL0{m-|Xzeh0uZ1NzSLsv&F@-e*KPsDN5G0}Di1BrxBL`F#vo z@tqOCMtiI*?l`s~fjUTc2&afErj1AD#A##r6-Kthh}dl`kHf5PqvjUfHog}R$0xwS z{a)JG5M@UwoSOF0ipFW*?SsAcA!Ae-neocF1!b@++843I+ChCEk8`1*DX?1lvJ`|a zHTY>=Ud%_NoSxo6fa&0tA40j6LuR@Dw4f9Am1>8T4C&1Ma0QKVqRx|oJPnzL|J?J9 zn;&;uU#SCq-277@*w5#}2qf@n--6YeE(7domR{sk>s$oTb`b(y2g6-|;KEndiD*6i z9f=OBY{Zy^cR*JulHlrLwTU6xOJ6<`PM; z73^l=mB9I~h;MfFPTWq2-n{zm9a&nK_+V?e2SRVE&L4u%e)V$wAb@si!$!ovkHJv? z^KvZ$kSJe*rN1m1$Xvp!;S;b~lvjwpjL54u+=)cd`f(GHUWg|f0hF7h)?n5L zzeU~DYBEX7@dI2UUx>svB_6&;4!#r#6sv^`aQ3-ZP10zh=*!6Gda%DAhD=rDa~XLc zubdk-Y5kM{z0=OBjg{S^PuqWfzkr(`>I#OupG9`Gs)o7&U4n55CqIA~ZX!KiM&ov3 zg;m?}qtD;=dRlmL+SEoRb35QJ)zy(3LEj`7TII_!eLwF3@>X_W?_5XE9_4d(i#!0_ zPG~o8jAcv3%F;qs;G1P38kce?BV3t}ke4OB44BRR6h$GNi@iQnRzx0nq?lT`)`}HQ zU5$sLBjdzl7&2acB{xv9=v4hlBOO&qG!6oSP&53nl9BV`{Gz&(O20 zpYkR!u)bqnM19Lf*H`4B@L#sG0P}+qrAYr}Bi-U-Jfqzxc;WvKc)j{q^3~fk5@E7g>=6OiCq9n3~>q7IHi z@Le6u8sp2~Wnu^W@^Nj3=k90nj>Mej572N#5*oo%}AuNpc6!oQYBLYyyUl&K>Lk_%=KNYY0dm zI%a?a7>7NafP(@UFfi8v z7u15F%mE|s^l}Xvpoy&mK_lXVG6muAp(DLq1918viQWp3oX}d9d9*6_5AdX0!pWZ< zt(ibC2m=TWw5(%+UNNAN8dT8&Jzzi+HK_Oz58+4yD$tu(YaaJ7EeidKz7zx zU;gztD^G7f>dvv*zWjiM2M!*EG+#@2?BIb2SApv0^!5X@vM2iTdrCNK%%CB@{3j$l za=<`re(NMWHaGinUw+sLH}~bYsLH(A1I7&SW_)?@x1=HO+HrWk0GP7(A>THW8m;H1JNhRg8G`lIcQib{c*c|^wS?1S%loL zKkgLBJNjdid~DJm!zI~CeCSD4B3+!u$)pY8cQp8uXe4`unghtD6QrWPyG&pxZTQyaifgKtnXBzXf{RfW~N0h6Q@WfTn2B z=!a#6_^ShVMJ3NBhO&=!7&dMF-#13NY%Zwc{U^LlF zNt?ykEsVw9nd8I`W^C1ph#fh6AQ^2h?RAU=8#COAmD28G?3if0iy51adGDkhNW8lw zcFb_MW`l>W zt5!yAFMszNowVJUHjS}kCq>n)8)C`e4geC_?B{nw*GmJ3GQ$8g(2JMG9}W@!dxb9vYSYTE-8Et>=x59~xWF0gN9MThDC9=fu`? zD&y~tt>;6G9~)cG|1mx*ww`Y@J~w-;H7>*0pPwLJZ+07JcnsgYA-(>rBs9=+i3J*9 zK;LN4>lUc90d3QuSr({?0l_qe2q#&fBm;tJJ3)gi(9ylR8VTTG0P1FewipmSBLURP z0xdP58X9z!1$xzh>T6Ja3sh)8X&Q9C1sY{QS8Gsd3)Itq{2FxNey) zG9WxQK+vBBUeAAKKy+^d&>t4)6$2{P#P*v7dO$#nhLAzOv^4Iu7nEx`U?lIiyO+#6 zoIQlIWt@qh2sw$4A0_dNOnk1JeuTsyH1VUdob)*opIS!ar>H^WnJDqSP5c-a|4@m4 z#KiNctJCZFH734OFDKqF=?|Is!8uO+Fo~~O7T;)BCpUh8#9w3LZ*=RECGmHg_+B`r z>T+`>o_-OCr-z$I;;)U0-|eIy>)_GpOP14kyn5>T)Hd;BTs*oyS0Nr7BqTqT zrytHirP6V0Su*bsYPHsv-vdw$%0@l|LO}oxcR>TALHD_!Y}76y*K;0dxCFxpx-rUfCZ{-K&LclvjzGSa!elOlM@Bu_ZDcg0bQy= zpIV?#4XBF-y=H-4HlY3*6tF-u3}~VTf9bdv?T!hlw4P+JRB z%Yc5?pw1R3L4!nzVBxw{wA}cQ3{H_$O|AuqzJ-o4RP=7&jWX z2?>jCVrt()rY^drRI|@1Xoah^ghhh|(7a125(Z7suwO=F*v@EfmyzYsss+3K;30?} zGIrufsm7v~br73?P0H7Cxl>ucY~}-y#^1VJPHzD_u!XPk0?la^M9|*HOZLar_D2Kz z;|bjRxd_B7nuG0iJK4qd2ein&Jnig{*X)nkHtP3n$cy&JTlUBEcAhtE$ZIxafem@t z{`koL_@ABUZ5#5j4OwDC=GY$}+aE93dET)hOKr%fHe{~-fuZyI?L|A!JR7pghJ0p2 z-n2hHu|JmBdET=jOYM($?T^px5AojW4E;AYWSRZ(f&H<{{t&0D4uV5AWV!wEq5ZMi z{#a%=;VJuLg`I4^{jtveI0y9alJZM7f;D!sMfS%A`=gvsok!Vup0x8kVt+KU^91cY z&)CTxvp*W!dG^_PKCqKLZhthf^X#|t%(s(0ZGT*C=Q(WWS!5@p%TRZ)?z8j!Vdp8C zVkLXU&XZ^7A;02cD`n@IYv(y?C#z^Dd*4o0Y$vO0C;QM&cHB<(ww>%FJJ|_4*#&j1 ziY~O1{beVcWhYx~C;Qt@_K2Nqg`JGb9&U#`YA5@`PBy?!_L!Y)qn+$I`{QvtSv9-a zpV-O1v6EG|lhG}NTeolRWHsz$QD*&m5^vf4JJwf*6 zQN=E&g$;J!L~)vp+tzlU1l^4gD%RSt>KiR9j007gd3Z z7HlcKM_0N`rfy@DI@pa9p^{E@qV@^7pS!soJ+EFwLj5Ii$ub0A)Onh64|JZY7Kk!i zegglw_E2Z8PotRnEVwsLeLkOXw)(7uF0)skAMnNc9GHaq+?O9!pLFp@m$wfl2e2p| zif7z*=5&MG7}y@IO38#KdSa-GV?W3!XrAU=+O=r%4$%nRFYmihNiIpMIi6Z{zT6)& zp#F>^YoVHxVpyH_I zh7y1l-U}NH*c>&?gkGUPGcX8!(cIR@^%v1pBT%t-X5l4keMy}Xp)O-lDAb*|xS1bcx_zWJjXrWbX-1ls1M@V60c2{QP83zMG?=akI| zcT3C}nLh3BlDXqD3V$Ji`YFX}_y>_dKX??Bmsgd_JqI1$DZ%#;k4f-Zi1CB-gN$%l zU;YxrWEP_OzG^Tuc>s1MM3Tb(T~QeX0#k_^{x&cr@f9?uhGQ3WWjOix4>c25YR*hw zL)6n(rBgyt>H0;P^-C3YtzOuvikPuR$UuGlt2qYiR#1Y+VnsaKPv$}RY}WC069DZh}dtQg}&jxGn&4snJx6KqUbvf zD}bx=?9g|c+_Td6+uxsozU$%X>?r!Kp(>+=k@P(R`AOd`#-l-Nr^V2>wyn(jt3*zN zjKXjH1si?&>p{5F+BM0Rr5$FJygvTpn6fPUnAV}8VH^1x$CGw6p$r+I@=4*M! zo90#w^+TdW-wd9Dnr+NGQDNM;^hF>D*mQ+zMd+vc-d*0Y#Abi^^NiNt2solisz>1E&nFH^%r9oNa<^J>A5=#mrp;O zuo;RR%M%g~hNquMNIV$!-NyrYVVBZt%Hc0Jr=;F1IyL)(ZMrRev2K&4Pv5om+MET& zzoz?Ut+)n_sf@O;Dd(XjXb9So?z?7V;diaq`SPwn<_}7C%HQfMXo_G)czKD$8v&WNu|#ky zCrY4g+fh}~CCRTpS~KCZ+U%4|*eM%>O8^#qZ;p2g#j{wMYWSh*56c%=leH`!Sv6rX zsXyF9%*+xo*^^dx#B~sW*QekDK2W9ytT@Ds#UIG5Ut@7;;@?*8NZ2<&vwo6qJ`xvx zer#jnx?`W0$f=OHwmuC5Q+mUw2aD#h4lPROp6f4~fC4+Pz!Ke2U`e0|!HCk0ZSetO zL4T}Ye&_D zgzE#PFZG9)WrSD3n6nkMbW7yil3vv1I6`H{H_I4UIzO|-4wx$-d6gto?rVnDFtm!H z{Z$b9grUc(A@qJ`AT%qA}T z*y>;ls2b$J0o$XD3rtR&Ho1PuoEDiyleJk>W8tM}F(^q-j) zt9`IXcOXQGT);Ph;Db3V!Kp&4$SS-7yg?u0Sg;>`!EWw56IWcYTb5kn?AbTH5Id@$ zPLf9717ICp>7-+w5=;2<7ZR2iQHd{87_|zOI2Z*Py`&h1|C1B*Ca0A2V^dAxgJpx^ zuxpQMfZ7W2eEKz3wxYq{Hf3;f8g~WrPy^;Q9iP(vd*Rn}qa`tZZ_)7$i3mnqGNSLdIvIRzVr$!>j` zz#j-K(k}e?Ny{I|aS(+X2t@eH3ay0yjtzVdU~(dygG&s{QM1U0FoosUzi8MH?35B{Q-jo|Ib#cO-z+9rPxI7FB(~ceoXph z6dsVpK}Z~{!xGXs8nW*R(D*?e&B;#51dCX#{Xb2<9IuUe0@haYXBEskIBQE_wnpnn%^2wfh zHf3La#cJHsBb>ZkhlassCL0bJwf&BMA8jr+icIr9+EoPz^L@1Vv+SP3=dkiF#Wpe& zTk3J+uh95=`cQl^#L%np`qdJ30hWfChiQ&;NOYfY)|mG+sm=@x#YqPKA@eY;Y46C} z$o&A&usi=J3BVqDCjv#CaBMkV-Zw)Ys|i%P@;b{N1O$?#UMr7&Uqq}$lT+9*4p@>@ z5q&@BOY~99dQ#_JNiIouIS+u{%cO=vzTseIYowBDsgvqvq>@fTDQ`NF={hU6f7s(9 zGT2gQbyvq}^ghT*Z8|AQV{slt8;L0;52CHDg>r}D3q?q|U7R9*StsSD&;VFGfwgUd zRGiBz0b#uz-{p>fe0m!7Kgyv4-Qb_&Z}bT2f?kIYKg`Qme?hr|?w%CT5^Nw>d-Ge< z({sQCdXn+0a39By^kj(n8K4frtk0$H2N*%qP^UfPrEt``vZ*z@>_#72U6R@C=hpUp zQPX>FZ6}KLn+IOr?D!zQVtt+|*)|jsYOYn6_<5qA@Q;&jV`SKcqbM!vjipYD@d!<-SSzB{Bb>~`Cf|MT0MYfF+%$|VY8VQzR z>=FsiWbl0nPG#_Q2_6}X;BylEVmyMgB={MF1rq!a!Qgmu9UaKy2;GHo3BfvzzZ|fO zvB{~`;Gy1>i)2=KxF_Oyp<2rA&a8JW(ATZt?|xWP-I;a{$ToF7Uv1-v6r%@%HM8V@yO{+>xh)yof3a!{= z#>!2QH0g7xO1IA#_kUdG%_vE^ie!mxJnj&~0!Mz^bNOzdN1O z!CRe>zuP_Mw`6je2aB}2ZpCQ0pPkHguFX*p6@%hqko6u`@031H|DNK@zGsHC&D zQnk)O){|gqy-{iCmXf6Qo$Dm6p>`k~{3asl->bZaOm7S@uO(EE(H_->lYe3wG<3i? zz#9XNB4m<1g86i6F$GNJB!* z!W=<2r?K?k(Pr^ftv+zl22XnAi$Q5-VJ<*jg1Z1#`A%vny^@t?0MjgIn*L6jAUAI5 zNN;KwwlE!#;A1X$8uK+oK2?uDwfR#MKcTK>9N=f|MYvJOZ2f0$J)7I=K@`GmbwEfT zOxEZ8%mYbc$((~^iY83QDzQtg%X0e!$a)f4qg@%xcb3j9H3&R*c$MRC@x_b)PAbef z1w)uoxGfY^0WUK;^ju^%{0Zz=@xIr1S#Q3sPJ3neKeZ){dshg#)lem{It8D`{7@Z$ zOto<^Vl=S-A(i-_HvUX;966|_0-x*8l$$P!evatS-V_jeD|O+8=*6zYxo;G3?!k}O zU)e}X|ERDRhlq~txl|CMJ@$OaAVx?>Nfmv@p^m(vQqL3LQxW)5G(KN`YaCZxoLj2t zKEnHFPHIa&!t(k4SqkZI_N3yl@vkQvToG3(+2B@vj`almOoFQKA~E*qrv5+x`(PlD z@sLe3=N2FhWvas?O{+y7X1%xO!&Gw0^WIy#4P}`ZP`&roj=(G*vk&jz0jk&h5`)kK zPXM=?g&*raAiWpf6e^_iMBE6hfhR4;5l8pIaX9(g2XIpr2Y5}459*6~>yb$Z+~n&=UIWNT`~_f3L(#1h6w-6&_oKmhk0r_HiUiW0i?`Po)%W zIO%4aTm~MVfe(K8yTG0bS9cFQ5Z~3^+22#S(az<(r!w+R4mIT5tqU&076D!uFmS_kYWQkL zTky-#%^$#q(#1tM`HiKR$KpYuBHWc>Whhpwu!%ESA0$(U?;?5TW8m!j3Wr3E{XQ^h z|Mq{E0PBqh32DFo0t8#=fe8PUSD`d(AjKy=wR=IZOYe_QuxA)Z-oyk_XF8cIvV6V2 z5UtGDi1%MmAF=;;h8C@V^Rt+tr9C%$p&!twKf#)*1Nf2kLhi@B!Rmu9kv<#*EY5pO z3*loA*~ME?IQ2T>XHSES+DUl3DhtF;?>9yqx*h9hu{uy$cl+*sD033ZjD4>{9JQ74 z&1jB^1W|PkRO9^vOHcQgSW71;_dtZOLa!R~q_APU&&3+y-V8WGt~!03g~OLmy-l-t z>;?S=%gHye;aLFE-D}`lw0lDBWHk3v8N`NixTj)*$@~s8uaj?PzMH}kSV%I0v!5>w zVD_I1B|G$_=gVrD|D)~sPfq(cx{77-$3%XG!TNiNOFX{(`@C{_lnmYEBwyns-=LF& z@7u2G;+eEi8&ICG-qrcl)NaztIxU;TXGnxDe_=OpiWCqir;dpC1x7I%vPw@#sGTCR z&cA_2X1R@lBlsh#s^$&_zag&Y^d1^$xgpOYc<~p{!+`2zpAz8zRcc1a20+aIi%K2( zgr(~zY(J`q4#-iRQG}P^Yn>p4)p!Lp2=!E{P6E5>b9B0fOouHkA=E_uJ;Wf&Xni2J zft`4gmAD%c>&>hMY9@=|d6Dv5XFdGXS`QmS42SjbSrnn3z)!sOkd8+6K*&me6AHpg z|H6IoSNfQRPdhlxa+14CLs%8vVHX%Xzu;8wj)4EpyuoR12 zgaPHhY5wNt`14Mb=Cj=iet6u50Iig7#u2GjrTeb5R#oYohzF;91q*=Cx^I}@+Y@Z~ z3Z5mfs1(QR(_3&0FcaT07Vaw~9>r_=@ZN)2uNLDLNz=!Fe-Fki_ZOo&G0Xkss0x}w z2FjOTj8>a5lJ{U9Vif}e^?NX{>iRnCH*RhN{U|3(fk_-lTg34zMMzF}_CgeVpEm>C z8>C9l6Ey@))7Y`P2~SamogGU#2P=TO_TtA7K+Zr%JlCB4MadhAojWDMKeT=isH2o0 zG5)fr8?}q?=Yy!DDK(t>8KWcDYZfHl$n|{n^ZnmU&Q*A7RtK={aV#R;BBa)#D=Ep>n`Q@{QJ#Vk5!$;>#s)g0^Xkh`3dI90-+;^M3yk@=~N~a<&}gz_X6~KFdYkT~h8k+Vf&xIPh-PZKyC;;U>I00!_kO%I zDT$s~p13@>pOtDEQf06`8Ej9d477(*wJ*9O^OeNSueW|73j~V2<~`_Tq{szUxpu{2 zcmRfc2fK6)weZ(d?)e(oQkbnY9^a5`=O9~f6u6zpHCg*XXUa)?K#SGHopq?9C?}$@ z@89L2QhO8s32h7Y7teABRVGq1*W*X9H>Id^dxOrZ;3w2vCqO^99`E)u{E~xg>&r$A z!hrrmLg-xe>+N#7_DUOy(r}SI$iI9?X%cagD4hHb4Gu@&WNMmvRJu4!eUoBU<_47e z4DeX~@TULl-0VQD1^)1=unp$Pi82T?-})Xl_m1%!=jC68F!Kju@|*YH z{e>qz%C?_jsc$Iza#>;f(0#ssx-Mrh=j~V9(2rdh`UC9~{tDsFs7k1rVFOy@Lsp>< zs032rOuRJ*H@|Yiy!TH7tVf`5ETYuI6HTg*ae0w)x5jet+%qJC_>{dVh4f8hn<<8lm^flznnS@)c+k%L)Us=tQn zxulNZ%B#rFKrs^&2%gQI=#jsWm(d980HJf+=qs3r1;Q}p4Ko4Ic)aHXn(x%@yt|w3 z6z)I|zpeZ67Q{L7S@YgIhEPsSUu}u3=N-u6;C6iotAw1& z5<)+PlRtlxy?1r}aPmTgNYc|-M0FJ59mitj0dPW|8JLQFq0;{vMUZyyB-g*aId;9* z)g!oE=S}2KGPp@lnBmJW!?~pAeLh}k32ww7cGZupR~MNfggUjPn&z0cNk&-~ik{5y zl6(&|V!1u4G86?Yy{zqX*+h92N$<+0u=9{NG|YL`6UsdD)@M#LYUOEOfQr(IAs_ue zuY#0fCGKlP9zQuj=vO08H&Zh>2ThH5T>3}ExFShTNUua-A^)8Pb{GDtp~q?7H}hut zvl?AE`4I#-O>WCTz4zb9B{1s!lha(S&)~mTWL*!T08HJpyf1wTON(AW*4Xv6`RR7R z7wx}y@9V5)Sbg9}H9Mo4US{$K&i>BF3PqGyfio@8w&y64D6T_(6cUAkuDj2McWCip znv=v5A7-KyuYlO`yTg%SVD}%($8m6MZM$bA6^y2VpfTNtKz_1Ex9XGKH zI<68JGLEmsPyGtAMMB*%;K!yTy|bm|N?zRmA+OgRPJatMV|Od^`SX^af|#wGEoQ^z zg_izR>P_|Uh|3Fe-S9fb*_Jt%WpQ}ZjCx(QjY9M_s2-M@qW{O*dw^G6EdT%XqUebw zij}BD0~Ugaf}#`=6Ag;jh8-(*5ff37W`Y`H6utJ|>$Ti#MZE~p5m2waf{L)mBZ7?} zDChrr&wkoT4&M9yJ%69a@Hty%XJ>b3XJ=<-&(}Cg5ky~%A)Me%4hQQXo?J{uf5oRq zA1g*&@7L7#T&Ynt^BoP?s`#BC?Id9T`AF^{q!-D~jIEhm_kLLFT$Kvn?fxX@@DHV7 zVmg3R!!9u%3~TiAHB1t!c`U9mLN(;0OpWN~MUhaFq*(iKQ&Q|hMMyE8y)!Q<%xESi zMJ~S*J)U8rg!K4KcX37!bPI5zB0#$D-V;sOgRiva;~nS^u3!^v_au*<>Bho=y3-kU z-<;b7yI!^{K0@P(fognzki-81-28iYA^+nhHg~OjOiGf5$AV;%hOekbaF^UA*tvdL zW?1$yEaROkT5{RN(Wkk9)$hJZ*dflORQND`KOMe&cc5m zKS%1%VZJc(3;Wv<;r^C_1=#-P_DJS;5A#>hC!fD@GC$fM-wE@Rtoe!u3>V}dKD0mf z9smLh4sEhOmet~U!QK7e%y*=rykSw`GSc(o;Y^OY&Yi_C&Ex_8u*_}3Ll^RIfC;T| zXFv!3g`uH|=~kAVioniYTA2j)s(ImN6^Yym)K9%-t`Dl$%qH#t(9tF)#lzhDHKwhW zL$+pR&0Setht6g7eWsO}M@ZlgGOEn|2V&73?+Dd0!mYQR&H{UmQoSFK zPId!26K?_NFIEfxN0tQm^FBPMHh(`r%>6AH#$4>P#U(K=3Ve3}cmf92MiqED0K`{>A!8J3SgU2!ua2@~@Rv8Fnmi?1y9v8Xe1bI1vPH4q( znU!1Q`jHXImn`(-ZK1ET`t|$Ywhew^8@p{#5Gh3qtv3(z%_*-R`!0T9*HkoLon7oY zpg+hgisz`iTMDIxkv`NttpZcR<>9Th67sRYO5QV!`=Yotc~3L!q5VO7?|kyvkgv}J@0n-ww^NU@r6gu!iay?`6)?-Tq(`Yk&Fpyv9$P4WcL zDs@d21VpDYfl#5*2>?Foz4>leW}wA8p--$-NlhH19DlWbS}(5FAqT6O!u<4H7a6D(?bU1#3t$!I`&e;-AL>dU@qOOr|37Eau(dlZ-vb z_~QSB&T5(ab-I>JU|&%X=qIGJ)u9WIp-KQ64N6Do*=-^%oZb(WRs4RO>8tKDnbP!C zqf33=UfIH4hRo^1G|vWC48HQ69mwy-Dl)4Dfxw|EgRJ$ z`BK+QXx5J&=1zgD@^Q91OS4}j8ADl-PNgm<+`aM$+dIa==z;!8r8&`Q*F9t3y+~qq|73b>Mo?K^g5s+{K-wTMXE-2 zf>h>ap2wCICeuBNDL~pnv%O9i^xt?{6YGIKBqo*y%HZ)z_WG-ZT33PoYG2@MjSwin zLaU@|j<%ErR|-1m8o=xQN#WNi#P8*s3_lYh)^P2YKG`q=KkQwKXc5epxs`7UGIQ!0 zD-Ie&bm{(iu6*7*gTpoGaKgNMaQ$90xb$T;&%gz9xm++;xTg#X=g|H@@f{jVhh`(< z4pe`#%`3OAKp|b8eaGpZn>v|vB>$S|d6$2vuo(a{H|SkR0@dJ9BkT3D>b2;vwljLj zX6tR&)nH&>X~T0RgbjzM$S^?+cx6&NJZrI~Fl)q+NNc79gLsoKWkmW=rFzo}PcC+5 z1b^nY=&guN_~7zOfop<$peK4DnP{y`waXM>{+2|_qm$CL0ZQiEk+jktLA@qsd!xJQ z{m@Gdi^GM*3t}q4fF2g&`rVE3fOb)-dP)Vj4$8r`S1zu9?5Q?=D5=!MZO9B>7i>wp z=?#5V+ls#VH(>X+#xJ#m_mohaz-B553`w@|Si{CY-+8wg>XA6WqsYX-9OYk@+Th0U zZ~AK^Rr~^DM@p9WKDopm=`3-RrDE)T-y}+TpVjiZDPo=Fb@x5MKg@#!zteoE>{-Fu z&|KKwH!l7%R<85=1;4Ax>J+_z8$zB+wX|iKQ_HKTsEuZoM+FUJ3valA8F!F7c9BMV ztf`;vO7^2Sf}UPL0ditnz&FC2BQ57r_(FrbUG{v9=Rvl(RL~I!2Fl>A!Tob4ozVv8 zmUWA)uCnefl9@<00iI=f3iCNIe z5NN}C210{Kq^$xc|8?3j#<+vpdWwXY2HC=GDd~yu%^ookvW2Y#A)vw&>hZ<=amOMD z#;q*AJ}x681mI^xuDFrW ziAFl9jAI43g<%d*7TInQU^DW>0Arv2Yf z%~Z`&C|mC5f3|Q%o$bci!lit8s{LbkK=%W5MeP|l9r_V~`Ofe~-HE7-yaV1g>un!< zIMYHdb6-(Ti%1`GCiGk3I$8VQiGFeWuU!YN z*sK)xi^wNZgnntxnd9jk+++bp1NEnrxB)#hF&1T(N4%m6*;mW63{>>hF z;Wt}i(Odk9_OI}K%@N@yIt4&4&2X6RPF*h zjd8#<+s`)=Q9pY{W23+p>i1y1?#=i%D{>>kq2V(jU zDXU#uJ+8#7C`#N;^B`mJP_Uiq8v=PK@Sn5u&&l-6|-CiJq#2k%Jj=a1ME5ICoIF{U9Kos*itqa{)wP&OG821NxnIR)O9>YCdQm2!?$pKVVBSX zFhQe*WEy{&8I-E0RD4o7NBw*0Y^#P8wU{4A;LYFtaD3S13BeD10Iv>M|^*}~)a7!2LCi0)-tql;L|`;z=L z^91aqR(g(Ygp${09(>MN4?gFEj{wVF-0p}gWJa7VTvE-1=~q#=OK!KeTMw9G!1NzK zuDm6CZeS+tjRf{fqE>tZP^BP&5St-lrk`hp1ixGITZnAP`Pb{-<{_{JnM+?2cCsBl z&kUYdY0!sRX4cImQ-j}MR$dZZ-K4N)*8L;MQ~;9neagHf$gJBhGY|;5L|=YYK=dVi zm`)3ndLe#g_ILaGioToe!K28X3_y_13~<{;O=dPSsBy%oI{{TjYukCfqm~n^UaN8( zIhmFe2Yv2;t!?gqJ16%0m_Lf&H+>KOGMVZ(c@O?l4D`gGq|G=+SHi)2@MDXhTb}pe z2NlPsw&*?hBX(dBM$SKGMeMH?(vR;PaF={L$Ws&OZnZalitm%fQi^bv3jn$^0FmkC zmLlb_n+R9GKSuhOewrlPQ>yWPatQD>Q8wKPp7Aa;nhauc{oBP|n0%l71%CU(RZ4IC;g-R~SbV|z8VLVF~-fTR_Fc&Tf z?!exACO`q4znmOy$dNj9e$=Gy(JW zBB~EHvThN$H>rP}ug`FeSN+b~i54LnMaY~(vSy(mEdSVqi%WI5VCMFjHn_`g(rZWd z3tBHaUvzZeu!F!y{P_am;esCPF~ z!03~+T+Z?Jhq%S>N?kl=sN3a3`xxfF`p7;?U9mQLVcjRhx}~tbUBc4M{9!P?{1x+q zAu=r0f;dVd(_o9QXa+RGVB4@f)-ih^PnvbiY%fo08o3#0#+a8(`6ZQ~YhLd3w4axS zuU!cfpVNfnX_MppugooMLm1bOU>}Stj4kVqUZ9S&lAWB{(8$rH`E>4PHMqIw4f97E z4fkK<`ZB~7wQDoqi<@q`J$-!)`O7`XpAi20F)^Qm`4 zB|kR{)V?P{;!PS}x~*ni=-IYS=-IZSBc6KpU&PPk<`${?pEGqdtNfVDB?9~9Td%|1 ztzk|dax9EqlQ}R$<(@&pG>LI9?r1Yxhh{--sFmp${#t!m%y2u%PlzzboaDSgTO<4e z`m_T2351cuT+^JgT=O@O3Ascou5s zC6%`e+lX_&yE&BPtzlFPN&i*T_ik zV)cMU$(6@&#Lv+W>}2|Z$nUfgdirA^^jy%Y2|c^n)P}H{OYFzOT$gri@m(E8=P(;1h3iOPnjb=J3d{&7-w!|Psxofuo`5TK& z1mHd}-Vb#jo77hl9KpoQR1K{(JE;3AWY!z{5M8+_hkhuaicrrKWZxg$dugg>JY}Ic z0-4mAeNbo4s;Jv-nnr&UI;BxTk$JGLVk;L){4KIk#I+9DBU{Q0kDSSz)u3S=&6bl;Eu8+|A8@Cw(>;{|I|(FR$(iB^fv`ulnu)%=DiIjFW@gqmaRTOM=e7`4id)%HA*t zZg%g3qB*>ZsuAt?o2&OeaM_BHA`am}B&hit zvhxwZRqPRpxn3X=R6$*#nBhDgVMg;e1eN%7^1dBYDE)k+0?l@`xQ! zyuor;Ac$f7ycrl@yz5i~%Q4yh))KBN3&j{^Z z`Rq3~0D|cApG`sYECj8%a^w95#`3334(pG=MVHqNY@LiU#Pc2V?LC@u^w)41LL^JgEp}31@d)lJGp4A?p4Tp4^PAB;rF%tm`}v-LZnYO0 z-B^0rO6X?s`)9Hoq1(oLi*D=!A>9}&|FA-LbP9+gyZ_KL*Z!GPl#%ZigH9+5_CpS3 z_PzplQmKjG(3SL3c&+cTe>dVb+^;xuqfhmbgjQW(C>4QHszxELEENADw+Co3P@`y+ zb?<%Ryt+9-&+K9%Z?IFX#u4v&G4=Y5Zd;yQ5|G+;{&ih8Jzu&0m4!n=EAuyg6d4X| zJR=QA*Lv1PWshJ@bf831{)pDc3)p=%S|3oa1cQ_I zELBL8+w*Mkj-XLiYf3Qp*uzYMl_F1&a4QMAQmY@+%U%8^>;2_K=4HwZ0_^_4HtIt( z?`LAykAgr?&ghZsNqS3$Gsrn4H^*j#>PUpU;XF=j`-#JODBD}vaK2~y5$z?wFk5(< z$|lgt77igLLqvGudRw=Me@O~}3474bZTh^(u*~U^o^*ZG#+Wj92Zu#^I>fC&$tyM@ z2B}ca>9fLOz)UQMW#@)qi`?tfNgqHtw=a^V;T=GD?*no=E2k*P5&HEsxC;$(XdB|j znpPQut=T1RM>Y6cNGE@~U^dELA^k4N?lTEHAL`G${83Ai59ME75!n0Qk1&D@LFRj# z?!<#^mR4*v_kfj$cdJr*|DX*qlEQ82N^(BISStr8)(>0IGPm$G9bk!1sOyGvCnou_r+68kva*o=dB)E))J$P@-DNI_6X=dCBF`J4{37><<|oA zt#C36Wq=vSV?fkdie!Rb&(VNLvwF$~Ap48NqaXDrtv^fn6Qi5Q-ZhMOEdMxm&EoI7 z!6BmlasKrD|2C19?Nk0zY@ZfC4Egx>vC5CV3NBrZUAMvnX z)o_INH(uO)of;ad>h^SI%bd=vU;fjHdGCX|FOlkXd!}dHo|kbkr89u z8ubU&i+8CQF*sMQ&1o;k{`{-=HA>tMNd=Ry6Bp2WlTOS^&?m&7<-su*aE8CYdGvQP z^c&o-Z9)IqO>)uCIS&sp{cs#lyL2!Hb&7wyd%pR#*DX!vm+2IdAF%Ow`ApEpe0}`r zy;@XlmfL~!R*#G8CZ}8aERM>d_U#Jl#x%~EZ{3J86WF_RY3iFgR80lyQu)(r?zL5C z?=IlaZTyLWHJ0bmAK^ko2r-3Mz4%;o*a!y}Q#jgxuitGw`)`lG2L#{&7s;m!s+J`E zr(Zn7(1HWA8zpa}(u&thsFZer9^ex60IMqTaTv%QTKzC6zJEvB4E2T4en0)@pglca zW)j^JS;U0FQU?0==uzYLwnnLE$9d2HDVH-J6<>d_UMe&GkGQVz$>}8M^yx8$7ogF~ z9On9_pzXf=i2+Zi6!g`2#rwlpgU5c7B+Z>3o=D@ilb9jK=#Fd+$YmSz=NtY+`tr#C zQJ3A@wy4@MaHk(=sx>(Op@J3!UB3S&usc{+5xJKfquS&V*sf|JC6vXr=VWHlWe$JB zmSeVX)oB1VN*YtNU|HWNEtt06Z&BXm?u5IH?YoDW)tSRxG03BgV%_|$t0W?9GNR}n z4emn1u7&EWn}Mfe^6@^6qTK&l8$K-K0Lj|q?@PX0xRH*}|I>Q?tV_Q2S~Dq_KJk8# zSg&n-yTR;9Yy{~q5-W4@sZc=tGUERmH(igft5C2W?>7zDGB>IvUD%K=xHkOxi}h$K z0R{WwH2tyGN&QBbe4RKtaCKdvXJ7q2k)3bhr$p*TXsW0m&Y@s|`)u}F=*IaBbp}W2 z23LC{a@pnV&bhUN`wFXXK{D$79niUuWta)_h<)QlMruI^k1K;sCTs3 z`Nvh-H?oC;hasxe4btg7RntyXKrI+>ma_{uBPK64u?v}0QMZ#8`b(xAMMd8M06HS- z!bVq}>SN79@zJ`|S8E$VX}Qb|0=3LLLKF;2;sbA>5Z|(8o(}Jr{l&a~c^b;tGXCGo zS7p;H`2nE7v*BpViaZ+@vL<71fnH<=-U1)4`^7(Dg^npYr4Bj8jN{R_2d{CZXu!y_ zH#v}{)X4Iagv7rh%g%}YG@#F|f%!w>4=3lL&$9+GL7$!LMV};YFH#R$6@iYs?1uoY z`$-JYsyz8GQQ9fw{{cR&Lwrtbiccjx(c@zA)$Y0;T;9)}Je+$QSvPJjI7nN=nc?l+ z7VXjBANOCTb@%3ZM!CSDW8JIBK-ag(Og zS^)1B;Asf96@t&V0qWEIIcrjN-}Y7QIc2p=U&Vc7`rhBOx%-XD6VZFvb)CkK?$V;F z4+{t}Y)R$$k{w`^@fKw#jeP*c!2$ER`IY7UX`<3;;`Rf0W|^eMm?H)%qSo-MCf8mC zYkooRfTOnVZ!(+(W5d*m#~Zy_wed^v+2V^xl`uhDzuu(Xkh=S+?&0p=h)ba)QARP* zxZsbUlqO6g`6=|5=qDhH)@kmUzi8a_2EOTRVe17S#D_ z$4;<0@g$S+53VtO*C?LkUet^54X*~W#oH-4=j>q-I{kHZGqn{iUWG$2eT$tBeLRG2 zXvWriU;5TiK-+!Qt9*&v06FS+>+xcnYm2UM%w+hZpC+~ zH}hW89!<$6^L1DQ^R@24B7}k#m4lEHxUijCiM6|?fxoCt-vdab=qOZWIRAkc#zu`o zRTc-44v@Z2K>})8t}W#W*$Xq5kHDFxHs?ll37fqo7^Jle-fNu z(OIuTLq?gKCYk_E{HJ3Xj~rKsct9fiB=d(jY=)|Y_DPr*Y2QkS!`b35j%hN1%-VrN z?=)q>l8)oL2lL=X{?cXEDNX?%X|Wf8Zp zvdW&%XFn$g{?C3VVLz=9k&_VV7ELAf}Gv&OuhRTqzq^y3g z=4JSo5=ZH+vRW0XJE}QiQ=?5{U5;`cgT9i4-{xMD7u%n^Oephxb zt?Zm=PZmWh+#}Vw%_-iYj?}ivg=)A?0Eh|F{C2f3JIeE>K?jks`RuYTZ_D8`(x*xP z$b06ahPtbMw&|q%X>Re|!>bsceVSv{%rlR zf_}?$ORw`hVtZN-cfkPxW*d+ekAUr81g-#+2@`TL*@OyV<<>#v1-~XM=d8COFj<8$ zXnFC@7MaY#yexCO0u`1){NKO%b*qOi&Fuiez=pfMm4J2+s022W(sqXL1G9#DmTaBW z_Y6n2Smr($Z(tRljl~Ps$c^85vG0iY&FE@ksRsh5ap(I&8DZ9KD2=Arj>zNu{C z1U^LO@}KDJm&i_${Aq$@_SQi3gZ^_M-YBSv{{N816j(xvXMdU9gm}!~67kMc;eBXw zKY7Z-$`(GzhtNOg2hjf$DJAA_CZD{Ao*J?TGEuhpV&5c5`2PlVcc*Sl{2ckj>{&5V zL3p9fgh-5S9?qb+_l;{8zB~r}%^+7` z;vEka1g_jpbNMCQak2KEjeKJuzzF*nnhLDFTjyANH|Cevdk@ph6F&;{7hxaF-<&BU zfAeNSUHU&aE6o%=p2obqf&X@6ekmDqM9TQ(Y9Y8e8gTyg{1SuZ_3+Dk4_*(yw6lWb zv4~#|5Dp(9_^fBXgVHW#vQ5)}<14y<-Q>B&QNx%8r_WBz0x1SVHXit{W?tn*mq1oH zr3#L5T%JOEbJ{U?<0C1`ad?s2OGWok#r*FRj4MU*afdNqjK8e!e!qT@%@)o!p^l2J zd{(Bj{&eEcB$J=8Pe6&9b()Wj?)NJIprPH|L9Hi{oRZYyzA%(et&4R*JXQ#15b@w6bPxX{uPc1a)6t{%;!&1|+kkx8H%{t^v`%toN6x znor1WmS~SFqrFl6eWU zU*;aUgz?za#^_efRi#ZL%}xQk(1|n~Is<($<278HftC>?*+f4R><`wZfbF+t9(cEIoYGsmG6P#zpQoq41`a}CK{zqnA)O;yZ z;#SE)llT+x<9Pgrl-0@~&;-M?M%p~({o?}}Zgxz}AnZuFn;n(vdrsU?#|P$<>=6)< zR=6HkCD8AffQS8qx60sz@Dgw=G$;niwz;)3D}-Qk3+H;axL)M~xhirF_wF4dg$kY8 z_q*U^0oapOoYi;RuZ;G-tPkUZWu%7tvE)OGFGRoauVcPhe4zwtTU(Pkz9P4Ccdw@2 zSpu<6mz;Jof4saH#K)o0{ueXIiT(M#0VWdI{ydX!L8u2pas?*kXNAp{98^A!MF6}9 zwQdr3022hGZuAfh{$L)svjNx@fsYLXqwxBk%{K7%(JZonz2ExtkYM^Jfz%e`Pky=q10asuk*^`MzUgl%H~1-tV4L34tAAFHw< zBHPZp>vb{hw2F8&xb{1?@or_=sir2KWnvaIv5>~(WB5F1PSr~st=`q7o_wK39*xtG zeh?GRc_BJOou!y7a)r~lnr?tCz6e0$GeX~4br_(TR@g1G9 z!3f^sqtVa%n$R&0PShF~0wt*h|IOv!)I z;`(3z;PWG9)%x`cb2{y)7QMGxd$i$wl$+V0+&sA4Lb>ps}=LI_yj2Xo2>Dphs z?PQ8Pt<#UcjQCxsAJNSc_aKuj-X#X-qk17}xb5#X(9#zqbs>p(xq&?5-wRlAkJvNs zLy6cUX~eZbjBG-m{)!Kkx4kJ({GZypk>XK%E!5s^$Ur&m<*XmctQ9!_mety;wdTv7 zDaqyEGU{FCCfdma_V>lUENbqfxgExAw1VeO&`RosLw_S}47%ev%%t~15(Q$7REb`x zbtfPyx@5|EW^i!xA4TQFei72oM)FO3@S^_g`33!%g)p?<{&4YmaCz;jGUPfQ-jm+S zdW3FnR&(wIH!*oprg@m9=>5H|t4FVFQMnxL2ol{gck0<9wp4bRPa7d0qW)EHQ1AU) z)utNI2S4Y0=(S@DDt}}Jwy69`vuQ39GqcQXBUC57$`;Tpai2Ep;LV!{X(nG)Ad%x9 zTi#`ARm<*Eu~XVI^>T+6HFGaJsD8pHiwL^Ey2Z%B6MoOGQ9Z(e3#f0C#;dg4{c>W&Led@q{2NpEH_|k!?mj@QK=s#iglO$KR=i>=J zs!q0ENh>kE{)h%cu6j-D)K$A1pz)-quIj{h?VM?@UG?ftsT*YxB-;pG*jKOKA~ms@ zFS-RqZ+R;S?z_5G>M94n>R&sj`s+@#UD2X>|LU*%_8-4`(WO0wON$o$r+wX~fA!+N z2eqF=PgjoYqSThvU$>q1^``x&Ep9{B!1hzy f3ei~4e9@u_v`T_gw(7*khfn?mw zuj9O$}i|sYM5k-QZJ)RDLi|pO?iTO^MXu)|2;JL{qFa+X|H+0>gD(BT#1#%_}@28U2^~fmU?+Ey}R)hV^=+7=e1uQ!p{LR+U)n}A}KcHefb;aI}Ws~`iy|knI0Y!~= zEHPON<;yliHv7awdrJ^!bJ9zlPohxJS{Y1kdMBU-0qgeH@6D`Pvq;tqvf5`*+jc@0 zUdJ%;aGwaT$hwwc;=aBeQ$YWyA(^4mH>M(eTBRl`B&}gHS46T9(D)$C?)BF*-mf2Qod zz~4`P&{UtDR%l!GSuYN#i_LBgck^=vm)-maE72pV2KuRq8Yp#5dl8se>n|lm5&uwf z;;G=&L=iq=Xw&bL_p9VSj11xZs2HjzDup4M{h`;*zaf}AT?1>k;Ls0Ab z`Qc*{9*>-nE(P&`#)s&45x>We-n>O6);aq%u_k-v<2-`cTki|I;33!J;xSr-T$_GE zgu(8I@C^QKc1>YnB%N8F-vaO0-`S4V~HW#=XuJyFf@juwgS1Q#KjiVcJ^?;3Ee2V;KPe5zke$R*K z94vvm*V6L}85wz3*|$}W+vr?qFR=$Ep*x?c4r_YzR-cHCAbf7tI971m6O!o zhmtgxE!=~T^zB->!X`1gg<**fDlt1zB2_a}zaTO3uS+%bbm-;(VCcJ5W=ngeP_PX8 zyJV*oIn+|>dk$Nj7)5EqRdqB~)1R}lqH1@lnzqgKjAZgvO1?wM1bbxJ zjWL3=^J2^|?zWnkmt3`Ioz{X)=PejDY}FmIjQf^9B1w#o>AQNdhqx(Nxdr;n_)X1n z53$shdWc0@ATu;98i}><0P{uxzAgluJa5onA}6s04X!`G^ANRh7d%sKeCLj%Le6=K zs298^-VE}s=FA0PUY>)~y)xdO9a<2Y}BYkFXo$nKh*LJ>kwlKS!8f|d17n%+r z(MeuY1PkQ5duDKneFy+d^SqD>IxfZ%Z=`=V{p7|dX>Gicyys49g=IX64+6ouIg8gJ zAvCxlH0zdp%%4U4@#7zz$D{Y9x0cSMe*a&7`3uom=e7Fccf%qHaruV@NpU%0pE!Qp z<}IoY4RzGtNr1^CiR}JP9!aFv+i-QGerQ_w@~-Mxr^Z&nD;8>lxTI)hS$4z7DtOI2 z?FotJE2CZG;9%GIL?yI>PXVk5wF{ll7&Zp=90ir%Hq778ePOJfx;q7RGxMSExQ`pvgPHUA=Qk$nH@Md*<_`O?(R~Q$8RxoQD=|T|H@X;dsQ2Rc0-hjE#2W#mTzWN) z7dC%>9&&v=NAt!Xoo<=RtV-QFt=+ULOhzN4_*x29=>uAc^_|I!R{+d7Nt|VJ*rt3vnebvs+7QRqooz50M#fQ#(3B-2@P1U~A%4s}{ z)3Xihh=h&v=aMg6b^sTP|K1O+ZEQR@c_u1kPN8yMwp804R; ze0Gqx=F-)~d3p#7x~^sYkUy%|>^vFMkY=2tvvaF|-zjy?WC{HBg^xUuI7UlsNZ(C{ z=DAiyYU0iMRqIh(!U{;g+lBx_Do1@w`U@K zKqRmAI43b5V|guA^8mQ{j!xYPBHhGKX;CNsT}0LVkUq)Y3yTKoaZbG!0s$m(en{15 zrlChqO*~hX>iW83N~BK(J}2G69^{K6GMU#GjWi`u@8vQw<4|bVA1P! zP)WDD39v=P5o+7>%L*d9a_vQ!y3cdRZuyQH7-Y32`hZ+2H0MbODGji7?=yc#WjSLr zK*xUxHPAR+vTG=L|C+k}$G_=s*(=NI-yBZ~w`WIW{`&<}*xB54FSa!)`meC)IVzfAOK^8k zG;?`AxD$QhcCG^;(^FLVybx~FM@o*Rv}R#ne9Y1}sqg`U+)0pg_}G+A8tY~0Xm!^T3#USl~%d0F43B>V%cGVpuyk-5a(jtmE;=?{F-^!(u8 z*MjK=p;I-AkKn;(w*%}qJ}>=1Q1*`C-%0*o2reeb`FuE5ypHU4FI6X^@N-xmAWezQb$Gz@546IJ)<^yxvMzm`fzIR&GACHc7XFq zrF=(sy0TmQ@*2qlJ1{^Br{*3CiVKtd=YomCI=Sn8s*28e&jx*nd*?+y>c?s zg{gp8*1^_-{uFDfiIscf9Bd(Z2ti))7x_;_Rq5c9_^pJ z;pg|ypJ7HckS#11exgc0K1Atu{|38zX7T5C{y?*Yeg=EXRL$XrpSQtz`hDTI0{qUU zaL##0!J#k?(0kVtXGp||o#sE>nx^u+cYV?~Ucip*q1dEXYJYB3u8lm9uemQWf4+p1 zLk$4``+L{Vn$e&4*N9&|DKlh757WkK%uqJ#=Dyw!K_utBx6y`$;x)uK9qmlYVADMR3Gbs6?-2hG)Sp@R+|_=p!uPJt3EtkjJ_rzL`82ynW*GeNJQd9^)1RJv zMKr$>{Wr|ie?BtDy3;%aMvM2qJ2tXE6g>G4nz(oWOh31UPwYN3nL2c*)IC6VSVF^K z!^Y&!c0VpQc?YBMQxiaQr{YIHPlM=qy z>1T*O=)(Y{YA#jD9DQfH&r0K$?OYFiphF4o;<~e;VpwX&!p9dS`cSpe^3}Ojko#8ToNdIBgIzh$r|TI zn%;t!NX!{8p7Qp`A6^FWBJ})M6SHR9Kw$j%ML|P3GX=&iMsU`0(VK*4NN6Nze$Su; z_3jVqWebZ9UEV)^*>j%&wbaCoG=%>8@?uJBP0kI==xX$b&HX}s(Id9M@=xt zHkTe@DwE3X397inDdd6zQG+#W0@AA z^J%tlcz{H=0JGpOtzVkXAMXC;VX*>HLN9V%mD=0glbgD^Qg?D!2knB~rXa(69hE^j zNlU4z{vu-bOE9Dp!lHN@E!`}1QRbIH@P2(f17M_ z(FGCzj<@zTn+D>UQL%nN=*D?n%~6T!W?!nTQ0Xk3l^&Y=|C_rXv9n)^0dx*0Yl zF2d`3o|CK>UVGQP;BPU@d;eIqeG-AYHvvtBl3}VYLfp)ZP#3W)>ogt;BCn{w3o7UP zzMAYb^hk;=b@Sd}9A@%I?Iy?5;!T!{DmR>_0sS>M-ei|Vix<$MU5hUH7r-tP#7p=S z&p#h8f}Iz8amLpBoMT+As2tp;8237PdXP}HqM~*$)3g`D1~Rg?kk&pu+i946&e|8m z&@Po7#Ku)`qJYcpTjsZVCoO%N9>av|1I^-JiN~_jBbV)*t>$$miZu zrn^aH#J~B7O)cUlQT){E{nhngzYOEGg0){3t<|114ACQG(R>W#XVkF^+>iGPh{Xqz zz~}4E-B>evG;S%JU##y>~s1Nl*a zP7Gy(Y9xg+c{HX^2zNntlRGF9uHT5?+gbH1^nOkDlXEC;^ccp6e;@J9R|6s6>_y^u zN@LlNg7af6-**Y?7peZ|%sMyD*SC}K2BgOGCBg>*AA5_*0Y0`~{BVEPfeuOoG2tyt z0WNhtLR|cM3;hLb|2p~303YTD^crQ|xDxq%rEA>L>G8KL&a-W}JE z=G$>XATi<Vle{P*;jB5)OdB6RJmeY^iwc+hD2IetCx0uAwz|6@Q}klJ~LW$L-dl zYD;DuxD$rg^rLL!=?#(a*egc+V5iBK5VnU)H4%xrJS}OhNl37tpH*@rk?_x_j1l^) zZB3L2TJJ!H`DWr%pZ}o4Hz78K^DWum zQ1_nfQ3Y5=ID~gj#|lf%PL1suI_2w9*T!9n5XXL{rG}(kfcP+wOLjSI&ONE-kjFX& zz1T;+cpKRU{?C1L>g9uXYxQTJmZ_KLn5}tgz_gmFmDo2=)xtv>slp`lAd4mM>eD}}aKSAqIX#mjAnl!|5&DZSt=EqIXv4_FpqL<T z`=b-$n~nPOWgu*uJ_S@% zx2(3~^Ua}%MJH4E54_HH{kbE%*FfBI6?+Zt)=VEAvAt}TI(BMm6FnJF-?LDqh;Y!( zZN_THEGH5L!Zy}E9<`xWSMgMG!%N!F6ZhbC^^W_}vfgth@5M)|Vh#rE)ziM6@cZ5R zdChZD0Mr*|YLgf7-goU5W$|iw`ahJEACb{v;uw-cQDq1VH+`%UqU@6s+1-`hD<`{e zB70M1Zl*s;tNuOQ=odkSv-2ohWxqpMl@Oa2B@0jGNXKotGYCrLFFL=FNgK35p zZ1-kZaeP~rxWtBW*r(RW!-Z}YCF>OLLy@o#Rk+_VTfH!LAxJbCfy*DW+YKskiNxHP zc#g0PYV;A>2L@>SY#rdj?Cq4@IVXG9MD{x7db)K^c85gvB4sbl8IR@q6|_B7*_z&Y z`|=REP5Sc8qmBA6tS#r)N&hoRT>ya{_S~lEx{)id;Yq zM5+Q;vle;xu*_bWJu{`mVaQYTp|I$2D!P-ad!9peD;=xzm97*jaGm*&>3lJrgZa(# z!-F}q(noQ3&ypL<3X*5BifQeTAW+rmrGvWG-}2*$mQ`)Aaceeq`{Q60`_EB+?K(HC zC(#1yT2J#OmSnzgQ<}UdA$ZRx;XU0H-lPCtfrnQc!@DpqJS!jKSJxEYhydQyy$nCe zTl7HqZJ!rjiOPrYc4`W*T>x){hu1uYx3JLz6rO&UnLrcJ?-G7AqTf*EL%$*q?+9N) z_>IjAuU``0eof&O1@PYOVg21IhPOu(cs^EZ{r;Ob+p3v6{1KZRWp(3ASUQlPdDYfs z)vuTGqZ!s{uO4ygs8i3urxa#XaKdyrSJgJQZHHwlzhE|ee@(|`ZX#@+?-y_11b)5I zHIqAH-qE_YSP~2!L(}Ho!??`?qAN_0GfprTxp#IrIE8a@#)?u_34ZbJc!p z-~L{{{kFdSYxyV9{)3c>+TUF5AKtY6!Vq>+hmC39~D|rn@Vy2FP_! zTGuDvW?jGjRqOgjxlQk^UC_s0NW{wxPu<9CQ3T9;Y?U|SD~~_GV$LJ4U8F_cSOmR7 zg%d`Cv&9A`_7WTBnaPK2*Os(1k|dMLo;;z0xpOc*A~21kHR*@bzE#;11L^UZ7KRt@c62eU`o z>F`=}b~*R_pkJ`Z+IL{*4i|4zrx^eCWL(YEs@)THGdtq3*m;Z8%SUzIvaHKngraR# zRz0hOl|8m2a_##jdYO}vM6a0GHa}v0oKUQ5o7X<^TBI_G5A}ups}qtDM;fz4(?Gw- z1z-AR#1JfQ4u^D$&8tN9aSldhW?aresz!UGowWDa0QQYi4M#i)q zNq?y?VI*pi9M>ITDBYk7j1Yx)F|$nAxIX_NC_GM@8jgJu8=cqXpEy@ShUpv^x_K}A zGduBcPvG{00H&!4bFunRKio4rppmZjmnIfVI#ttCzj8c&(z{^UrVE~?_@5*zvieKf znU!N9swZUXWo|ep4F1g)KKm!Do5c#YryIudgV;q^(~1~aIx~eL_X4K~x=VJ|p#=2| z@d9U}Yrx;EtPa820&Q{d2H2?pqYu68^5`XD3DHh`38LB4TLBd_f0FP|^)D~NCkAG3 zkw2U~aHS9CEyV|Bq_{H){1c7@A?XJ`L?h|_-!eS%dxCf0+$U&#tQzA%PK}6ZlrJEG z>69&e@ef1RH1bdIOiFtDM5%+rQa2<@U8Pd1v4BZV%fZtii#IKpE&%vEenOGZU^bY4 z$pdU19H7bMyX|iA3d|&P$FCeySRN)w*D~>_4hHao*F=w4**F+5&6gBb zT&Po|CNyO4tO;i47V1fm#jWTgVbRR*ej?dR9ke0Q+|^WyP0$op5AGbS zl|V1s-9sq~ZhXICq1&PJI9~lrf59*HL`}Tl1J$$e_6ayjbvYgr@T-5yUP^ z)qJYlAWGB7BRVuo&rt#k?Ym;?NdIA3gvEFwL5JNJ`zH}P}u z@3~s+ztQr@7GKz4WG)g@iTx*16JN1zM|<<_YT^dnQz_yS~+%B?JCR;jcSj`{}E~U)SkZW%%n# z{W^8qh%lAY_P~pFJl|%v>W3YUwui@{!1cVJ zh9}Z651~gBj`yFG&&*n?)gs3kcV>{S)CV3nw1>FIucLNJNHZC!MlH;jf;S*cGqo?B zr|T3o!rXh3A|UO$-)P`U-B5vB4LH|uZ!pGR^DA?B1ohGc)TcH9>O7U68SH0mNddNj@OT|Rsg}MnNKTIkKZf(+E~1({SAWjbpJ4$MyC3`hCwiz`DZLWR ze!0x`s?e<%x9rLJJ)L5P*lQ}UsC)l>jBe^tVpkBsgB*8}A0Ohl?@HAW$rF1~@ALin zp#rY=u|B)U6URKX&!Cp{ZRVdnxPA;f{t9=BL{PooTh{2Pu(xo)FwiZ(798q@!}UOO z*90J~W1CQDlKDS>48M!)W#{!5Q1gEdN+<18g7$}FZh(EylPbE5_LDpIrbfr`}n=t9%crka3KUl{57+g z*Z+8Xkl9V`UpOtx{>9(m^H|A&D@0cdhay)(i!#(r*r9)YS+r;xWynY7$}SH37ewl^ zRan3O&B-S>Aw!|(VLmrmaQOe0Cp8lri7YJ>@srxtA+P_h z@sl9hWC@ss{UvE)`uyChYJ zroj5*C;jqIwTV(D82@ff#^2ae5aFlzdnR?$^VP;A+p1Vk{G`MDDL&Vp?$fkYYUK7e z{h8cTf-?$vKx&4tN2L( z*`Y|o%sw&nI=`u?Y6m3-8%Z;1IfhHne&_FjD3pkh6w2obJo zoRroIg|SAb10U%}1Bo_S;+JJXiSPMHf0!tds(D|(?4-4TOzXofwVc$NL`Zs8brTVi z4tOpxPT^teII5aiRwVw8QngpvMsp)14O8+RN`6Lvp3t9%`J;NCuk9=0N8Rcf;`PV1 z0p;NRZqZn1A_bHii|`dS*G`4K7S8oy?WKQ_Ond@G5)qOfR^88(F(6rY{!;2no6%B> zR%i4z(tQRek{|g_KT0J-QRbBQsJsUK^bj#sUaHE$DdIC>aIqTtR6^AU{PCC~JD*H# zsrzFILH1%%yrlclY5I6c_a$qUP%E^5QhDs3y{vsvSU$-r)_ezsLiHzo2-R1w0gs9R zqDkW)krl{iydS?w7%!<4@bbq?dNhP}zF;*AV8Op4d$(Sab-&tI0I(<5r1s`^=UGjn zC;aU;I}qBwd<^rNcuB7!V7V6pku1h1j+b-;@XVetdDh&@Lo9X8Jj5cc=vF|q&c1y$ zFi#QS<3qr?^d?@?jp*-nUKk>r&xJ?&^FkLY#P?A{5S}F82Jb^4fSP!Se83o9jrzNHiGS~E$1J8K*UK1P3= z5FVfJzXhLwBVCAFq`1^$)OY(LIl7)X;-j}u)42hXo+`UU+jC?Toh^P4K>iXE|0lks zk2wiI@ni;{T>4qOsXO0XmraCXdX1&Qo<)3%^~9U{^eF_RaK1T$ zPk6p$41+_|_rKWOt9~;7+_R&GpJ~IwB8i!HC2hn5oVXwV-{MXEyC#q1HfOv)o`(0_ z+2TQ8t7lE(O^u^=D1b)srmj=%uxfaoy|trwG)(W0#ePU;TxCO|d3-r}BG*5IBq;dU ze!*#eK~Vfw@?4key**?w|Nq%2G}42Vjplz)?)m}v!6Qo88X!9HKA*4EUIUR?P`e>1-(tQ(* zO4ia_q*0@wnZ4F)7klyp7Uf1!%xzdlSIvG^^oim};qx4=B$&jN2E`kzhQvBMXsr}5 z=0A`x-qL}-P_}SiLCCo;sEXXuF1#wwgt&aHO$ae5O$QD6)##^%_>}Rv!_(ORC-M(I z^V(bn@zPfiD35>e{*U<^vq&F+{Jv7V$dV2s)%yK|&j8?m_Yb~-6CQ(M@;dhB68?MP z|76JgFaE&?gz|opf26w~LMao*5Bcs{O^sGH7wRNNsB;1LaJ%p4!0Hsr-W zxK~&>=^tEetu(kp$N7aP-AZtHIh!m*tB!8mUC3b5kobTT`e!8lQEog$?9bje$J{XB?LU^4^PXg;`TR-p2ke`} z*LzlfVWXZc>`N^SC1o;OB;&OF?+Kp+vsll2!iSO7#HRGP(Mg6GK5ANRjV9j{p7uH9 zfs0Pp${ENdfmYI$Vme1(bGnn8uvCo-~yY-xIDN&n-p<3&vOLJ@-9f+Kpxx z4C7D%w zmv1I~o{PyeDtP|E`!_-5F*%hR$v5GPg}Ltu1J$P1NCS~|haj1z6|h4>59`piw-V59 zh)M*Zm6PuYfAXMI1AczPUmW0EO*;eY^+WRI$$d|_wSn?cjE@NID7sNuZpexpR%0;x z#r82fbrQh!%2O|X8Z4Tp`H03V<_5Qr91`nVD@**#(eZ9l>8rWjs#x;>)FxUC)4TgPj1e7%$1ME_Q)e2wf7LY|MqQW3mZQ1L;vO#OvWQa@HGAv z8M*S8_=ncJjm$f@M(aK1UQbbnRbJvw9ljB!T*ewe`jDj{rzq@>v1(bjffjrDe) z221-4>V!*gsDdU%4}2UV_`wQ0z`hr`HbAyCW=U7l!uNzvChCw@;L^)!^a>iy`<^gy z(~RG*{8*TuzzN2`SuG!+(DbA7e$6q>2d{tHd^=Uj(LW{+m5&Nk&Xb~lC&k7T6tA&{ zI0xTQjkJ5HTkIt*8}IYTYjoZfy-kt(97@lCzsB_5*Ef|d?9PW4_3xL_*?K?r7b`!oQy!E9qy9r&oT`|U9!tEq*3zxwJ zAStb!wCMa|@_3HF=f)ZZ&5h<@@?YLJ9ebb+W#I1_zi+yQA)S2QxfLmXIR4^&({6xk z;_o@{LmS#`;WR#kf9)vfy&bZe=$$;z=}6&cl1wKxlL$cHv+KQxL`~$O575U)^QoW- zzdBltn!o1y-nYeAYrZ?+jHv&k;|;i@5DkpR?2h4;53N|XaNP%%W3HPAC0sXS{Br#_ zH{RQ@%)JSnEFhAXp7+q!@4wmY9xn|h=67^noxYVoub00b6*h7x9}@F0+3Od?tK{N@ zh!X1mSHt4|$MRrDRcU&9ZBBByB7b`yd1(kIZA-vsa|sC=&s=`G#~yk3>12xf{tJlA zo?OZcb?kq+^47w=^2l44hxJFO{s-`W_YPu^VFC|6p47y61pL?Ta8l#*@Pn?DH|g;` z?t<~xtoE=P$&bdrpF1U*-*VTyP;|xr@jpf`aKy!@iELDcCHD2rLLGuAln^9jCx_Usw zKjcHhmmUdKC76YCyB!&!ycErECd4wgu3iAqM~3<^R`qA^iZtx!H=XU(D0d3p?!a>; zjif#39mqk?DTmHe@;w? zNd(JGyB&Uk*Lry`*5CXe`~{CaI&puCW1Zeo`yc!Ti!R|BZ~gv)&6T}=f5C4?lD&R^ z!Rg9gkH28UZFY_DzxfMxeJ7ZD;~3@q{(@~O61l7;{RIyIi6-Zv@(UaJ*d_f1I|%Ld z`wK3=nC$iY3ocal`uzo;Q}$9j3WWZf%k?Ypv74mq*@^5N-^Y>UHtEZl3mWz1-UPgU z)L5UtU}xp!@fYl%^gRB8zm6as0kW~b;1^2I<1aXa^d{K8bABjF1^$AEX38@MXAa67 z=&cOx2f!a;{JX6Mte`qfGRJ;) zx;bTo3WLCV9c8s&x%aK};p2zM5u3hke8GKoe*XQH{$Ex$@jw1m+iOM#W;m@Qm6Ta)}sk||zV##@NZ zdExN4vMw{rs;}(akLSk5(i#ecl?qdQs9!JDf3{3r{k+oas`&qCd{Soq(Z8;3ZQHUg zAEvIl&1%dnD68LgOKzQ7aRbyUTX;1s2@W$0P*ty$cVT%Dr&bM@RMd`O88G=$P`G-= zWzjk~N$*#(@$wYopDix!n`rRQ{=`sdaqYn^`lnuLdzLjlvJ*CDoJTruNkc7Zwq>?3 zr4Ck4mx4C)GCu!@*J;WO>|7>tl_iOeUzm6MKe!`a|NBtR?I;%U|MB)E@KF@Y{|N*M zmy;-whzhGN8Wb@oO2Q!tBrwqpMBynaNK{08qM&9Kp8~<`0_(D#sCa;Qf{My}BA_57 zf*kr(^m*V3UNFPTCCZ`V{=eVqnc3N77vp=s&!5kS?96m`b$4}jb#--Bbt~eWiGnCl z@?PWIYlX28MbMQaro!#s+*nRvouWqH-`&)R_R||s#}!Jzdvo)>tM}l#NN2O;)(7$e zSVR~aP!_o?t2{iZ;laU;*OH^w^DUeRfFj#qL^l~PL&;wj8r_R+r>|&{J4&XtfA%J=}7Q}Um}4HiuC3ZhC3F& z_k|3-&gi2BcLHH$D|P`Q{!K2649F}iT&qpnh|jpGliKI2_3-S4D2=J|6iir(mlMS+ z_(x>NeQyDo^qzSJpAZMX>WpsdqdAKHLT%USu{!KM_m>sETXi&{wFT3DXYZR${oex9 zO(uV7ocuA^Zpe%_UrLai05iNB@T7+V-i=bp0`F%0h9ita9DYDuwljMJUO;bhy*uu{ zLk7&T3QWHuJ<>n@HJF8^>HEIXsxtuP)VFH8Vw6dD-cljdMVn6zWFMYdq z$9MRSt2VW1pW^}jTn57zT&2rKU^|v$_wYRy53Mav->O5hhpOh8b!dezeAbZFWEJQJ zmW*vQwLn~jeH(CVa}!MBqO$bged*9SXI!dB+6LJ&WJE44E4YzeLYu*3E26Ct%K`__ zH*eF@x_#lp&~fJKp~t*S@vC(Xcx(Ba6%h3B{T`-=1A-o+YcAe_z4`o^>0N*yUwC#A z5fy$w$4||~v~;qfBL7+7`XKUh>|1IPNht*J-3u4eGxDd)+D~r z7y8;YoEZ9lcIYugD_$^)r&t`y3S+nxI;O|g>NPRX%~$#&8E2Gt-i%vUJvUxh9NLeIOgk38=0V|dt#qBQ z^ZVtI3?QrZ8D%wfS$g`frQJU4uVrPl#UEeWto{hHlD!LmTW6Qmyy@{3e(L|GJhVDd zKU-e-qZarlAcEuf_Ci5YG`;sxdhAWTaD)Fl^b-x%L)m&{ftuJBHls(_`ze$tnch7e zd;yTC5wJ#X${&JE50OijpoeEzG{3D>TMReo!d?DV(GK@;{|0<3+;O8UTq-MYDXI(&dq>;4Hh`EAA~oGYRf>PBUS3V{5_wR=_MRjRwUns`6}tzxcw^B^zVXOq}^%%~JEY!r8 zBEIC}g$sBd+s5uOrGP1$@q*`L@#tZuJTt#G&HsXajD_P=50Kq#l z<|4^Zk8SbjMXE2f$ZHTM$j$KPgu6>s=|z?_mD__yhH58fg?|83#F&MtZ7ZtV=x2A;{CG2Zxn+Ph!MJmyWqcRjSg%Uc04nlC4N*+dX*DI%AZOV+@{)S27qA)~%LR*A=fM(IG%_6;u(g4HMx)-$m_3}ZvX($5NJ1pb(j1&Wwt z(><#oMNdcFA`y>$1G{=)A-{O~RQ88$$tw#@Wrx^D1HUr7D4^xd@XnRrnX-;)d5?K( z@s17DoQ;w{`@wbU_pYVtcj|onmWNibUV>p`2!@SBvAfs<{7xM&>A+O6cH~r|t$6xN zME2<7&>W%@tz%2{DXS?1xg=Dh)d*~W`^ui^52Nellnr+pXY=DJ6!Y6->u~UC**bK4 z3=#l5ebS7JMq$(13Y#}Q^oh|1WgusU5NXC*3dVGSbzG702t+Xi|HQu6N{F_1=eiG< z8bwbws*sC$z>114!V&_>HqSU4ghX&;GseSwfpqxKkr3@lDc=?0Pcr$AG+l-$U%UcK zttsJ`E70xGjw$b@WdYQCCjpz0XJv4zR}eu>{JqP$k9`O~-*t#rVOEjNf# z2(`Fpb6liEGFmfL5P=pFFQ8r0Px2~Z$pWN6*S*)MVRhhY4o0#BBfT(h8;5}-_B9Rz z0q=4k);}nDi?rbDAZP~(+pkZB1azC-?A-+B!zclyaJt^$A5a=zK^o!a;qf_bD7ROg z0hLOquBPtwngboRX}3e}dp*56?GEj!x3!w<@un@_UxIi*3(rqW3qZI-c%c5#?%5=9G>s727+eSktP+*Dp{F> zuv1|FHp?~*JitY;iqLat~W6rTSNLR z4lh{43BtNIvyOOkZ=H)#j5oKZ)m((<1G%cUf?uPItD%gRhvYofM9h1(FU#05{-;=B zG_*q-xJT<3^`Vv6?ceUrXPXNsGECs|1ofEJQDEA`2u4}pq5ZZ|!@t%>Hbg1(5MA|O zkZKGclO`<}+;I#&V`U79c4rKU*TgY=naQHtvS|8IEx4f>zNMJg1M;}gdO(o_a;5cU zYX{_VEhSrn+Gu~K77WoIJY0n+DVP<79e#?LlL)b~Q@h8W)I@wfwhpSf<|%&#=663e zfEl0C!P9<^#V`fqQ!jWw5tW>?pW(2J6>vmK%GvEv(*l!064A0ocfEJRX4+gm&>f&` z_8Vs}N8oFmy-?7z*vt9l!d`+0(G!kC`Xj=fa2p^#R2NLvg5OywTOV!%@mqw1mRLL> z;I9a=uIhd1#h$e#A)_R7zZP7ra(CN{o%ML5KcI_#^iv66)94Ofy1T(R*c}Z16OrzU z!z(z+^rfhc|EfuCP^WQH{9&B7RVD>F0+|i}L5wg)d)P%BZXJ9TN3OR5OhkXJ`oIO+ z)Lr0t(Aipj2=wO0(_Vs#YTBfggcgV{z!&;X@sP2cj)?E0XpG92A*BIWYC9tuJQ0gt zd04RJTJy_lVlA~G`L{zIbH_N;5yD+}m>v-Jo0_j8Pg!WEc{SjOI$3eu;_w_YBr=IC zs$igqbNI;F#~qAex66gB@IRpq+Q9#4{Z_g8#|*_Np;+($U3pMQbP+}a;v^y=B^RtI z@s4c=Ma&tnr&(EvkD_mi<=pv-rEEHg_LPO*qC`=tWfxWOp#l#@B4cQIfUV^X_2z4N z!@WgX_ON^{yTYSo>(pCXjR*Muz-nb>Rvi4PHh9MN1V4jnW_;m0p>^!Qz<0_+rx%9? zW)_DAw}uAI90~-)5&ba{m2?VfqAqa|-2+ZWNvEMX3LtD!n2H!3=1lxaMynVgOT@wu ziG=m99ZeuPPjX3EcFX+ULlf!r?;*J6AvYz2N0akWe;ZE8IYn)Vlc;$67MHexiL70T z2yrt-h(pe9dyNmvh`&!EUuc1KaNsE3`&Lu`Ns3%Z(Z=}~QbFoxr1tVOKQ0?B1u^Y3 zF1cV&OcsyOzR(V%^|2(e%{YdEEN@_#T(W#Jyd)JqAKIR34*wZyuKNzCsr(bvv?OY3 z`nE}np3SGuCE!l4rnBS0jc_D6H1b=a1}>YjqM6Mx-?_(YDU;qf{C2RwNT0voEgO>g z4`M@-2OJn{E<&?BD>F&9mHaSaC_ZTF1BuzV8XvS)=EHaf*Gr^}XbwIR)tU(kdjnZ$ zCnaAF_Q2`?3;06jf^Xu>AHC2@9eggty9mL*G@Pwoty)PrD0-{$i2Y6R2csBj&gd0% zQj-c3rT=J$s9i_BgnX+pa9e7PBg5m3et;WohuX;8ju5uFW+6;pn_F!J&arg2Hoig7 z6&exTdI7dfZBQuD9_lanSD)F-bv`d{8GpgQy5+4c*$m6S`pf=k6iySV_fGV$Zh}5o zo&s8+IYa~Q`N}c==7~-5qMUF0@cl@cMenD*x*F{V=Sl{i}~g7yit@`Yct6oN6TcSDy#qG-{-aK)?g}+p=!a0$sph*##@O z)qOX^ILq;`UUao!QQ6O`cvcPktMd`Ti6 z6!oU*h}#WuucEo~aS6dBfhlVsbS~>xZ0HQsD=p}+%i6-?c zL`8Ex5W_%odz&(}8D9{@i>ILhs<3f4ES7NW^nH;r_}{6ypVmv&#Gvh8?HvtV(>(64 z`B%St4w%I{{BcO&IBA(Oa5~L3{P$O}P6#T>zID-64aQ#%zbqGpw-$h?anxPoj^Y&S z^b$U+F}N0Ez)NAoe(-YOz5td>#`S)Mdk_V0YgZnRx2i(*{HxDw)(V3cztvy}b5UeF zmsO|suRc{ltLI<+Lq;OBW;V3nUr@8tn&0IR1!1E(^(M;%B7QMf1OMtLKWQlq)BIzwIgkSNVK63uAnfPEUvx*V|IxWP4$ zJQWPXzjxz#^&PPHK8Ioyd=nk8H}Nx9*OU&}uW>e!Diak*ncy#<$%5H41m9pSw5!>G0-V{A9RQ2#Z0JkmpzYV=|g=73gRKlxRno<1NL=< zMpeInpCGKhsCbfa`2B9>%k|3v9?3hKh_KPHi}M{c1kWzv1!>7h?qV z2dNmpVG8rwCeuxIi;>N4!rPZZgyFu%XhCop7B~yaSg(grN-Ou;hK4Xy)`CkhbIh?U z^wAI-QLtIL3~=kwFYI3(|L<|qmVMD}#vFI4Jd}!`XSw{p``Y>4tnAl$Xge{rn-8Rq zrDbTh&w{A@zmcT;71#~O|9fW@SU~8j=r%>AJnhxPz*8*e85`DE!b-DXfxjl&179|t z022Mbr6kNPn{lT>L)Bl^2)hqbJ(T%q!?*Dx_;5GFBRuJ=zg=Y#x4+niFAWCQ7 z(E)QL0bgPR2F4we3-nhDWV!vnd!o~p|2GOa_FZstlwi9zIQIJ8K!$%}uRmuhnVI})*MlOXF!vd0d$r?ZJ$khK+b7HV_FmBH4-J6YAv2h%gp#s6);mR> z;Y4wNqw!kQi$C^wf?mt4`#&cG9CrTEZ3Nc>;K2U?fSqW|PRy@x8_$Tn2ghRw4@Vd?bxvB<;dq1BXYt5brwqW6N7RpKQ%F?se|%c_w6SP_!cW}3HX$BUr=Ph_ z_PJ~<*=xf{Qz_yxoo;7$IZU62isIx}FCJ5h_|{XYE|mDzSDl`)Q-}vgUGzsw#C#+p zgzPKvtNd>9jbAF@ew;fzt3(Nu1=pTi6 z)*G&I$w^JoAjnC{<5`zlwco|cuEvW9t=P3q#0Oc=zkfm+EAyuSKHFxoE7wJKt`)9a zM=;khDi>6ODn{?SzjKQOSr?a*a({w7(r@@ZL_F(dB}w)cYl>uVAq3XGErwhoVp@@` z*K>oxkl^k}){F2_hVU3Pv0fzW32%W-#v@rDm@8e)myOG*l(aA|tKY%6SfMAd?#GNP z1t27yw^eq*%pg{MGK*N$--jQLvOmy=`8+602=Jy4)n?Ila;^awV7-DHbKIJOc&ez; zEe~G73>2*{mI|GS)b;r<<5Rc8ME6uVoAqF5%vqa15x}S%2?8?G0ANb`_4pug@?CHO+mVZ^GR(esaOuO5!wN24 zb(3xdmVT}i7Wu14qo;#bqn9QLtZ`Ctl2xEvAAC$;v@l5kPrf)8P*lk04vZ>cg?v5% z&1^sbu}-(m2AWAe7l3@CAIjrCKCYF=v6$`AXBi_P23mUtV*-+aP-8QO)y!vVU!>C2 zU2O%2NpT3ucb}sQnN5(1siM)ifD=TbWjziH4zoXBktWkmlA@gEWI1!|RVJoeZ8dQmDY?vT_QN;!!$$kz zefwdJ^&ljC9pIpeG8LZiqKW@Rs!l`L~tz>@Pd4kkm zVSJ*(c~=^zorrwz+j#lHdJs@|5R}!`(QL>Xq#7TWs;&yPj6@a^;zg=o`Nkx`HRmwj zi&j2!8s1!yguA$)R0ewZA@jKQm!wSK(c^|Rtkw6$(A(NW+PAc0uU3rLlX<&8bjpu^azbgLfG z$8taU1msJ$2bF9!wym<;^I89Ryk9V3D<0G9TfvPYefEqz#8v})7^qD**jZfLiysT! z+Y37$6Fo^+F62Olmn_8(JA1-53Mk8{skJqen;v3c!W)d2%Axp!o9iez@ zHN9r@E=ik9Q!@+HZs{=5L}G_O1t(~ zwtptF-Rnd~Qt`@m<9Lhpa1?*QGeNuv5b@H`U&Q?zD#Vp*?<$xbEdff(!!PBb5jaK6 z(qF^)^50~dWly8QNLkIqJjlRz5qCV7o5yc!OS71(Ec}v(7^#_<1x*l7%ycWIJbaa> zJUlTEmh$k<@#pECcliqU(|c!P?rS`JD;9?ZdXBAr0F#MX>b5l1oBBQHM%o@k2H;~K zEQ4b?-Djdh=@au%DHeHrkCj40U77`Z#R{oBVNZ@TzgKRCPfJ%WaFITD^ZCs_@_a3y z7vmW=h!zZ56a;!;knqmu33#^kPx1Zpz|2NmX!#PEaU^HJ@vdzx98`gr!2L{u|FcQk zYB&~Jmp9&y&$dJ4gc4e~VpK6tE&CDTn$)m>P zEeXT1oo`n1uCtN6)|H&lmk*KJpf6vYQLitvUGV0jg!rdgO_}0K3owoTsgf4I&vGok z(?3;xKi_WKP=2R>s`~ESXW5(I>7S~;JNH?7@x4K7Pe*HA1Gg%g%s=&%w>iZp=Nca@ zOX8o}+D?6isYe+fV`e4zr$*O{*le8GovS4;sx&XQbows;)MiLk`Y*&!0;L&4fg79i z@){_Kb{6NY))#XkM$^T8wRjGLo&aQl&z}h{dJZQ%*K^^Ypky9gc&t+_$W@ufE47D% zg)tl)MgJ`0DZE3olB-WyR*SZ9tZwAtnI6lTey?J#G*HyT%gFqUk~$O*FCz;z3h?X; zzmkt;nEDJ1^7UN#>XIIo7GY zstx-;JjBaX{oBS0`X4<~7MOVJe^`m;aQp6qWEMTbIH$L)K~WDgYs_r5dj`90wYyq9 zv)x9CdS(NSVeAhuS$PI9`ExJ#ilXB23>^aHYY!YvweYug(^FYw&>vV_n{$b_kB^&a z)26c5kv8{saP7cBv2w$&f2B>~H-asgeUQ~jdfHC9h)ERaoFumsd?8XBkb24K_QaHl zf#YYeJ{w+h!ut?yObXA$ENKAm=dShOWw_uiK?(B?fj1e|t!+xi@w@DBba4mQxQmk8P zd!RCN2y?3HjH6@=?yff0=}Ewi`l9DXb<5oTc(`$u!BT_`G)AFS(F-JHpV3@W;KKeA z&dsB}t*^V^62_5b%;MLRxc?NF_RsL0Vor8G$mto#cj|jACm%I3VgKo_^;h`89vxaH z+478qJ(qiS{2s|oOBzb;%xY1p&C@mc|qxE9)R-OIDB(U zPv9T=l$G<*^(pwT-4TPfY=|Bnn6F!Fq`)njL2%bXqBnSBULSzQxyiLfx>y0k;lVXooj(@hKf$7b>&X|@E zDJ9No()(MU;k}Y*?P+K&XXeMJqMg^AB~un6#e?VDA_X$3z!%29kj36F*8B)>6DR)U zFaZJrTN%P6{L}c8W*3N5M>Cim1x!B_VGJn1^K|1qBsEwXKFbp(qr%m$vV-7#_r0_n zglWgIEk^AQQ(RrEI{5o3aenAQ26o!8zoE&k@r?*rlp*}Y_&3swN|BzbL2x49B*dS* z7WERhN`#7adS^N(Rf_nNf1H|xX|_=P5eZDOEaND&maQ0s+HEd&BLMSTPkf8>3)g=2 zo9_}^Qj7w2;j^s52Rpk9W54PupAB7!yC>?Y+_21r) z^mMP5X$kiuohW@s3@bm5aql91=9hD}H$1gY5muhe9i?t`m$L6iikz(YbN%~~o(ZDU zmSNOun?bkakd?>`qpd%^A8BJx^ks|jHszbQ@FzYSlHDhDsCfH3%B=NK3|>@x`<854 zy?FZTMrqwHu?xAhZa1Gqf?4afcY$QE)wm4psUL6uAAvZk?%E`zZk&zs z#@i5QjJFa*C_A3^Uy5gW&B@@u&><<4jz>|2n+yC_L-JJdEc+s-bJ%akvpn}iVaLM0 zXc|os&-mLiHgum6=@e&R{{$p{yA|J@_1Yzm*+O`D96~;9ugb@9EgaoDwLcF6mrLFn zXHeWK>BNy!_MU4cT-^_1rIF02q<~$pBz`9hKh4QwImaQ12c`~uuJ@R)*O+(eVZM7f?NUeP^6cMz;p}e^1zfkpp5(PQxc185 z9}l#Z(Sp=QMiHMzNd)7Z?=%6I2;|t`a1Vmr7ouR;_2&HRH!uiHM8_;<6{ndUOV&2D zd9S1Fk}aTq2%Jv-`;kA|FA>J%WH9bbgyFulc5t%%mmt5>&{fd_b)5y~{N+om{b=TM z*pHrSoB{#SVh024r0sC~k7gNKJn2*+Liq5*xiUnJfmID*{fptIo zna5iUA%1_i&D0@OoHZF_A!fhV!t9rZ*Y)>H9`2XkJKJsVTg7|L6B$RWQxv+U#Ba1v z6K1l3NoxOMoh2RKp9Bi~MORav7Xa#jaYZ+TAnk9YQONuaG7caKxyOlC_A_NT3-WMQ zbw&HE^&!6hxEKJ5!Q(xE@@j&BW~~R%_u=-`1h(!)AvHL$oLmdQ=8lKjAAi^(VSoJH zM8RmT+@^iQ;S3GV77oXDCECliFRkC7g#GCXoVB5p6)(4q1qAWE2%KBgiK-T{Rxfcw zwf9en@pmsf-wh8M!O1uZFSLQ>;{hu>4SAgX?(P5P%6`_XCCRr}DMTI_@vYG-`5Wmp z!7l8q@cWFJ9Tf4C(JBqVzivnE-1M4|vZ6guRGs%>zsvEJ{q9S{t@Yo%U%eFt1sUTB zfssa=!#y}!YOJTcq$tK&zZ`lIc!MgE!0T+o^AKLmDri?W8QqnPZhUzhh-f?j8`t8G zEl+f0mTtoH;yayhK!T`V*zU)8CJoL;@i_7R>3pU_rDy;8^I7yMS03k@&$d3rLFQGg z?~wC(Jm>S_6D@jh@7Fu4vSL{!E>H765vdCC-BgN%dmiAXws@Bk>21fLB=olaAJ%x) z@*%8LHN)*7`aMbHbWK3l`}RZE<)1TtPQ2$KXS({I3AW<@-c1yv>`E?Gl_1{pwMB}v z5ugLlX)j~^8*?n*FX}H4&^Q@?YXx}8_!}nUu3MpYq1vBhPw8nBKGbV}BLCYlz~X=I zray;LLeFyvkB3V}48oL52&nGe^Wm=YB=mcYUA~g#zW`MlD^+=E)VcT?@4wR?(cj$l zP(yy)9{FWnrsFUg@t|+A+foh4@%BLAfP6l|k9 zKjT?`(m&$m9sSY6D39@|P$wf5#;xCQKZLN*9yCbwN%MZe7i*#}!$;P3CTm+uDd$c6 zaq8oK9R9n1GP6pst7O1Uit1YhO!15vx_}5%!eh_73OlnynpWg)m8%bj?Px%_ddcxocV6=C)%DaJx{ft=!E*v7H0zy>vW{FMv2|c@odXS zYCoj*4;@9EskeXl+%KSFIUnGGhcuDTgl>tv z?!+e_($2*X8^kC78yj(`_~ak;uBZPw&B71F#kCFhTg_Cb)L7Y+5$m+0$|hI)n-c!O z9RI^4tdfvy6XTP=j)eG-lAauW(EG(?NA>hUcPc=!oGEzV1SmTS`1}g8nay^`Ai1 z@W;ylum1e{2OyBF`mx!cK&*1N*fl?}-#!mp242C1yANQzvRd(j-{m}o{wKKqVIW7{ z_NTFYHIHT!6Xrs5d~v1*M>t+3poo3|;uWrGk>yS9mx}MF-@Z}6;rM6mYdCAGuiHq5U!jjVfL9;C?WLJ9m7)cvfF_u=%0Kc8EFbBTf#%Q>G9bgwho z!PmlgAr29uT6ZL>{f6bNDD?2h;{@n-Rs`x=2pnuP^3iYwa7{J8z{TKIrsh2?D=2WC($%Xc= zq`PZZ^4wV%FnfJ*_9LrKvIZ=!UvUfdA6+M08s{H)XmDTZmUWi&XR+L8naLJ~?4>l; z>27|m&&<{|xG!~#Djmxii3cL%WK9-F*L|sePB(PY7>m2HqUYKxXIB)E4U5B1ob^+* z7w6z)LG(55t{oU_b!`_Ocwg$6z0IZCg@%X70^Lqm zaX;M)0z{;4TMP!zQ2O;vnoHWYZ7R04Y9MXzdrGb3r=tP31UW=nxz9KT-{K@K=VhYr z1U2w>7_pYY5i8h)I%2&Rbv8IKz8Q5=EOVlQD1APd+K<-~2d?`=dqLB$`e&cJu4fio zlWECEMhTjXO%8$@sQW{|{~6=ru^ay&if|w=Yhy_{sOb&?lW>3N%P7QbJ&?_K2VzlN zKLIu`_A3isx0}NQiCCxJsxhv^Ros7R)wZj(eSat?O0H2v9a;F8q~% zh3R|WO!xl{=3?poi}WynRNsz*RTX>tchB&ji^<}_TAYVy^?|Z%1V97iSVeBAZee<0 zy}v`Wvue};oD&r>q`k4&YFKP@XoEK$h6MM=ZSY-=1Y;b`2B9RHFdAm z9O!pTZs$p~MKO)+a&$JNq zA68VmqiJXtk`wezK&Kx1xLCrEh99R9bLeX;?C3?f9;q}K(*pEJw*y4^2bD)w%tAI; zYSRL}EFOOpN)*H*`x==!XEGQIu;4rZzCI3 z_+!W{*82UsSR44GFH{ghwB0cb6^2c3^v2`?s|MPUywJrm#!5AwWF)WalSJ~;f``FO z@6Z9IUZ2I8VFi>zhj16i+6|mEn;Ar_X0`4}-Xm7ILQOr@O+rn@N`%<^`0P+qmx320 zM3!pP5|VZ+hGR--q7_ssW}E^vL^F*UkdZ`+U;_q7190DbCZ_0(NO9IbTYoWhaUx&& z9$2-x*G4>ZWagrDeE+0R`7skCLcSY$nRHdXl2IR;_{aIe;_{%cts$K;z%7H_`8^~q zaDcCkB}WT!)Kue z4#LUxM!V`1WJJhox@er9 z_L6?I#We(lSgOG%@QMgm8G85ycEi;h*s!(q_tGQkVh46;ORfZzy9Y&7lU009wi%(+ zG90M>!Dc(u*0_#dKDP<5du_a<381vVyWpGi)3xAR_^niBYkM1hif=2 zdZ^|e{4h**E!r1;MKFVaU0@bzX_>^$$?qxLbcDkRFDC#;#dVQLk+@zhkje}2e z1IzY>;Z8TBw4G%OwmeQJwO|-Yhd>?fi;1J|g?1@X*I0@uc>GX^s+z2j)6#!)Qp6Ae zC&59hEcCIE1O4$BB~O;yuYSSB=VUH^ps>22g%)Ixl9X`1hS{cMe-%Ig&>V-~ZtFo# z57dPN?{FMS!cV_L3N0zzTpIeJMC)giXahGBBeV-8G2Qyk?id!mT*RQmU!r<0QzF(c z-q*={v$S)$A|e{RdaaA7IJvIKvIsF-ghVMUg}{&V8F;n;Ex=c67_g*zj2qkk6l37> z=}3_&$SAY3n2m)bq&ZWvQJ5)9trVT1Ha#Vwoh1mszv6!0--Hb+;zAOybAGnacQfj% zE+p~geJgj$HS-VzjPC0Yqo)X&-LpG9W0i%%RSJdQC={AN;Wus+p8d9J?knkk!!HLXN0{SU44&xwB>@}qUn*hFhJ)P6VPT&og$Ou(KpVIY z^tqqGhao#rBm*VnacBqdybqGb(du+W5{pryQ!X%m7@KD3_g#XkC51fAp}<61JwSGX{7EivXmEpL_~ zgE6}mmPv2)EIYYI&8M`gQ}nR9#U+-Lg-%A>TRFH%@3;&h;af-`L>p$Vaf%7aeN?nS zRzDZ_jaI!vSAS&Qc8yE7c7x@wvPOjK<&#=T`)XBd*>x}mwufcr5dWA+T;wp#W~;rtA*i=eu=vWPiEYC#SIB``-T z!0Yzo5!dVdj-Tcbm~W^~4B)%|QYA14X#?zvVY(=`D`t*^duyW+weq2ch>DLuU=sG5 z3RP)USH!;uZvojPrw=Wt2}uc!+^aRD5f>DOm*V(dgkKZ#mwO-#|IAoS$$&+B-$EwY zT!8Vd!*G-dD~n$pR8#kd4nNhJQ(7Snx0KOQ^-@SnF2Wn70}2E}zR0l-&qM|`@hU;Zd#95G!o3H2K?dg52g2u8<9V-ad=4v+ zjZaBmd*gEjIFGp*1shF{`G~Yvf8NFkCh$IlJVlPz`zhQSo<69Vmv2=UT&4xSW&7je z{~Ej|CsO|?ivjIw-Hn_>zoOA>4F$k#HY#u1u}}&phi5SgMFXVFew}xyah&SIPDbMmg9P z!KDUVFpELP5ovrlm|}KOCIXD-BG7mqWQziFN-)VH3NIC)@nOYl1`KcBt=9YiG@E*! z(CeAQgQ+zaqiAHdvd5XTgo{;tk_7uAvpE!h8cn95`x*{df|R>JWH2olNJ&EelPvPN zuBF|y2J5I_kB(||n|?t+krYH!)j>^~w*H)yBIsywt*9#teIn}}6mm+^=Y>Z+^S zYl{QIWF_bn`A*ILW8oQ(2R9X7aTuE0+nZL^#fRkq+HECv7^l1ui%Elhp`RcwQzmnX z%TBfZG? zr|Pttop^KdPhSox{bNL8Z!|fMzB?s3Y60FtWRWDoMc@UZ>lny6A(*--aV8U}i{*TC zfyFa;D~=eDW9yqidn{R-GPw`VlDCNHow%e;XJSMYPJFGF*Z#5zr*cP+^!IRGn_y`t zLq9}2CZ4x&&y_hi)O{o-PSa&z5FvEal?ahY8_hK~|bEEXdG| zjo^7kB~Hq?`m%|X9Xnf_T3p0ejZfiXOPEdx|$NZoTKj|GW}`1&ucDnk{eFI z9SpwELAJKiYGKtdd!7$YInO5@K}>!klF=4`;`}B^UoWp$3pT@I!`r;ZY-y8b?t$J$Ipq+JP!vmD+?_5`ESTbt77qszJ+oOtdKVHl%3(JZf|x zr7XI=rFBCwt{sGccsIVwmU`LwFw(o7x$Ft~+;`UWcn&S7E`Ww^E*}1LR^6zIRo$#D z#wmq0xyxUR#c+Y$F|qt{C6h6us#(qcCjPE2=7FVt z)dwxp(Ddg1JRwo41uDgf1-sIHM4w&d=Sxx1AXLO|M=*8Frl`xcPnfZ17mgee7UiC9 z2!+z>0N!x0(dX}co4p@zUGY}Jx4ZdfU6a5$X`IiZ)-?&0{7{4sRA$p+J(e>L?J$p% zA;gu+g6FPyle8g7!>NXA7`nQP zZJC4p_=Se?Yhqts-iXgVj1Ta+elHkT#J`I)St!GgkwMw( z+`JP)m#vHKl3#73Zf=vKr1j~-({Pjo^AFB@=vr`>UE^&Hjw4S1{G8Ucz@MDyQQbZFRf@ujN&TJ|&tt ziS{u4GZ&^uA!0DDK`duHM+W zz^2{aSf?S#O++F7%aN8ZgFF7q4$MADCn8Ulyog7)eHW0dkb5M)fsvqbS;oFasO>o8 zntk!)pU<`0R95#&>Bs-&Qc-c_t)CN<+s@XbiC=SoKi#l?woiotNq5$Fx za6O{XGX}qM#Pt=VwB)VSg13qUhil*2(!*3sE39j&z#5v`w-55D4Et{0OjRC!meNha z!Se4oSpJUnVzLRSWe^m>15$xn3{d7u{2|=FfR?I#w2OCujy^QdeavfjJO#kOv8b$Z z$X^$zk9_kt)X=!XVJSRXPW9A9oNi1mK_g76m>LJ{oCYm%0SmOiOtVhuuh)W5^`y9? zPj(L!YsaL(P4IgNa}Kf({C21j47`ECvucIT;bp!hy%{h?U4dzk7#r97qMG{S;O_mk zgrn}%I>J8^dxTNG5H9R{mdBqst5T*C`Z$%*dD@5Yg(co$1m&Ud%y#jpFONHpxrBz40=ZSMB(xPr zG#}j}<^|}qI(iTG!axJTsf)_7DH6WpBZ|FJWSPUCdW#XhBel+V}WEm6>`d&-{h$u~~vcu7UGGG}h3S zhLLP0h9`%MGZC<<6KUf9KNotqdN_dTf4Bn|@B0^jY&F5yckm}o%e;Zz#WKUfb(c`In}HVh}I zSqN*%Nc-SO4+W7G;w!wYv*u94kBFP0MU!KnLL>& z4vQQRUM_M#;epV8ZD5_&?*OdhMx|99;Uc2Y2YTr9D1w~&a59^fE?gmWK(E{E(OW=9 ztt-K8PIWtR)W4rQ$T2ht8PAi73BFKQb>(9=^rN8*p)DEY2~Eli4Zxj}lk&~auy{0% zM#fDfjU=p%7Eh=;(;<+~$q9sboBV!jqJ#DWKhNXfyLmMS-z-O4Tt-)2TVr}g`rO%3 z&K}mCWS>23*~)FH9(pUWHPL32F}YVYzJDwo!QRP4xMu`UHI6tBUw#HHFd8umx=B6y zw`k7>&?Gb@zM3mps6C$0b}l%xo(H-73m=WOKSHcMs^MPXsP8DbBL7z7QZ{5FGUGiu z0e^HHeUp8sRsCJZsB<$Ly(HoLB~*R$yKJm~Euvt((|Ge+ff?G|AG; z`TIpLYg~i6)^Cul+p~1|M;$_ke+CZaFv}Bk_}_q^QpZPW!%<{TPu-s`PJceyeTe>) znb^L>4@?e;<4ds-QOXbt$96m9o(83|JW30m1%QwOU=ZAF%H@fA;Lm!4z-hxZ0eNga zFjNs3Yjl{R599zPJH-{joE|PkFeen0zoH19tDZe9n`hbv1DzB$o>!J!677c~cl)G1| zd|!Y?j9cZ~w3juiyb8in`BpP8Zz2XnS|1hh0ro~Tm4ML^z7MA{Qi9P@w_0^>vJPck zt2lkFx|T)Y785ybLQ}d@QT@jeyb=acTaB4Nw;)Q3V;|E)3|UW z9Bq`Z(MRJ46Nc~WdP>k<_#jG9&YpZ@{heU{Z=o(@-4>TdlRW{8!5W0?V?|HNS!vw1 z8o3{0%PgB%$wh_H?k}Zug8`3TA>~=sIVc<*VpQ7ofSX5q(uKsa;1_=*M8E;x++@U> zQ{332_&<7iqV)1Ll%Uda3hFa*6e!^X25y&-l&hKY+Yi)V#qEbHlK4{r+nriAspn4x zeD5^8dx&o<9+JX$N}s_zG|1K+)r*JJMtWDjfAFWu{<8I^P@>RZ*sfZ$fov4(NzDrscPr(u~qvi z$!d4{`WiBtf8dW|iT7#2-FQjS-{xE{Q;gI6cz>7TS`e)DiGyvfYgb1 zs(VlSkryEmsa7G-waf4rM323W$M|D=gFP)y0y|S- z0R%xID(u@jv$HLa$@XO75X)om2K{O|n779)_ycU%k_%k0sX&@F@ZHR0!|*6FG?MIU z$EO~K;w9-e#RQP8al)-XK3HQ6xSj|`0*hQe|6hQT6))U)3opNn0R)$UMI1Q|^ef7DpssReK2ELB!w ziQLXVG5O5*cd+{T=9VP=j21MqlS8ks*GXr}Yk@(qi7H;w#A)L>cuy&~op*q{v_vug zT_9V@XoW^7stw!-uLMS^^+2M|gLqli!>wKa7 z(3s57u+}BhCuFTD8h#`~XocQ0$25LKufDEcXRQILx?J_~LI1F%W1t0FViS{m9B}6d z)VJ1Hoc%+Ru`pLKLnP;N>uk^?CZb@EJR8h_r5t7ZyuFxU=~bEKp+C%fVOmMCXx%Y! zSr`GCsAAF{DDigS&S|dFI?XziY|l>sek%i67)t(xM3jztPKlz{0yc8Ab=_~(2Qaql#Z^}8|27`s zqx$^{F#Idq-leDiRO^D6m9*{{=!K*AO8S)p**VIj(lI0tYdJE#zpyZ}9RzAn3@32+B2Igf$B= zm1RDy9&)37yR9$lb@&Y}@HNl8OMUg2LG@4|#yu<$ZKv`b#(dG1`0I&g;BP^L35vOy zhq>8>Q?eDNt_BAUF*+fbw7&OmQNuhi(79`ST+KMCKr{@Xr`(4GxfUfJbH^L)!xu0qp}ic!J#R} z3d8+>0jiLrry_!>7>!TE(D)MXCH!-HHqbeDa3VVQpJH*i-qPYa7zdYx#%Gp`8TYLu=uJ42Wgbh`~jTZETQ?%Mo4QH z9FZWc9eLq@E3K{n_Wwd!J94;4YaHPH%PoVoTJCe`rMCnR$>{~zk6w!G2yOu_`(5|I zM*q&n?lR`Wwar4GgBhW zSnMEd#N9yH#mL;q89rhZXSmDR+2NCIS+(r*FkakvrmX&&c=cc3h3Y@Y3em{wzrHe6 z^$!4uQ~h+jq^y41t4{AnvieJr*_MpVb6hV=xdcYr+G)PXQ(Oj@Qk4+y(zH07;pOT1 z4xFCvvQE$EVpfxR4Fnm2Idp8MNAUL$8`t*^Pavtgap}Z=M^dGmcy|6*_o^j`2C&0; zco+#uJUl18CWQ279-i|SIVe0fLJv=M!edN^`zBu~DH=E81&1@DZ&WHxs-s*gP1i!R zemzu>mSJWk3oqpdw_)Zye9&4&FO2%-A`*!t;3C85P55HoiVFD4SkL(7$_{7Xq=;D`3y~n4(KXNi16Y=VXewKXMXG}r{iO9)ND#)|X7|Sme zs$RYi=X+87-N*NQyqnuqJ<)bj(h@l+vQU~4^JiN+x3Jlb&ZN&GQO@4X7gc##A&s;A zNTaIF=>7rpfT!b6bRYn$)OJi=#?+&bAfFW`j6Mk0Vm_fDvB$?PI2beUWzHY5*30!s zU8H?35jT2Vw7Ua(c@;FYR~jpryF=6`dE@Ptfxq=7WGRZ~CrAQR0Pk9ZrUp>bfp$Hi zd=0DSEe0XE2XrMv{g7Q4a3_8o)C<17(}tEcAlGh(zIH%v3lzgV zU_CerIg%0yXs!USH22ikHbwa~(*w-a#0F3Z!XXHcPOzuTlD@%mHas8~j&d-7J3s`7 z2YBW;^^e}A$I>QO8n@x%jL5+IdUv_$c!aSi3%zd?k~{ExYoLffkkfsk1Mr=W7SzOi zRmauDF7>z3L+{|U#&~JoL7XRR7u9OnP0h!!Zd>2C;5&In=rgiI==veR>Y;b_x*sz1 zbd236rQNpsFic2+uT}J@I7uKRFM|GOl@;!&LR9Py2+xVy5k_tGPqDJXkNlgJpn%rI za&~vj#r^93cV9^t3v@qrs90>2i}X->bX<5vE{7W?!18ah9;@Z*qS`f6e&HCj?gA`p9dOR2Wr@n$ zCWmm4WEqDVRJ57S>r0Iqn9jf}!y!s7yVPSfyQ*XL8>GPq-4t=24&4K-LExqcPu4Gx zQ2hp3JG%ECeoDe`kRLj|`NzdLaGT9fayRRz=r7Lz*>^gr;&xW2H}rb#04lJ(USB|7 zI`wCeoPtL%1>(2(w{ovmNf65QRUQBBC|g_4`!%Z!BkJ~k)eDUV-miLSo6**TMbPE_ zsz=(AVS^yW`xRmO?&yFBH0k4#c)$8Wzmz}~lTq_dI$Wh?LPj3*Zba)KU4Da~CgQw^ z2ic+W7lXEezi=*@k6(uf&a%mi`sgB~!+$^tYPO20t2NXigc??mdpGe9j-F2oxrG4Z z3^W!Myjn$SSy8Ad2V|J>*d-k1D(^6x`S75#G7hdPV}5$o$uf9GC<;B0jx?9r7g7d11EmHXs`p1r;c#bP;KkHbz0B(--c zOmb?rf)W=A5lb=>a6c4sgkP;-C0qU|Y4HbhXHJKh!EIq#;V)WEJEWD7F`${Aeh`9S zBPb0n0(avOrkVXfVaiBeyT2}@4w0JguMN~`!5n-yN8yj%HY4%^cvqxPi{EiWMI>in zQ`-RNs@1R@saccTZ9S}YbglF~vLx6aVt+^uRfJQAe|<)w2&)91uW!PBS)+w9Cc8y5 zWxOl!%zrFg#7y*OCL!o{rpQ_6u)NJ^E?$MYBYmEawM#Q5u9fF!|G@L{SPNmM6X{dU zw^!c68?L|Za|z#`!5a*QA~}K0?J(XujpyIQQcAy*LKvVoMDsJpu)&**@|AS;NaO-s zy3fLQ6fC2&H%)_J`cSC$=JR^J~deVnD&86 z(=nAYjqU>&LuZq*93PDe07@3`K{RbEE#C7hXcI@c;g?A)B;ZP#WB!hcOT#bmTd{cF zQ`#c`AuF`_4>%?NsoSAX#iC{NpU03F>tGjQKRzbd?1wtRYSyDJi9Uxb-P%&&Oyy|5 zrwoR5pu}bIc?fwT+&CxnU1>S8KVHc z)}obLk31lffhX|}hu1VDBT^LQaqvsF9igHSHG+-C^w`B;4yTc|oGQfCdgwoU1KwBg83GN| zq=X@*5N!%?J`7F$4y%B2=ONYA>AH6tb~+9UD*rSyh(EoXP&c4jF~j?_v}UIFcm8T6 zAB5YNX{Bq!X@wg@UupdeoK>&}a0a5a?;Wxa)P{1d!-~2DauuFLAyol3@qQY&f3$Os zG`k;{TClrB7RPEBeo==!kH<6rv2X=5Ra%*#Z&R7nP%e_vM!^TlkQ&iDEO=y%b~!4- z3OF1rOjfBgWddI!GX+3sC-$&4=h7i)RU9FdKe>)I#H}qfTf}tDzf)98>(2+f6II7q9cbx462WYhBN-Xsd3S)99$vh6b$ZnqeD8&K z{KEgM9oGoXi=~sHDEvYXZNv&qmgricIR`N;%T;$sl-A0-D2E%Wea7u5Tl0e~yzH^0 z;(ILTeq<;PFDB!}%G+WGGv8f}wmigEygC{yCw7@!n2z3$1!pD}i0A;CvbM3SGb+E4 z#dP`4vY7t*Tf4LsdBCob`-Zh}t=)%`zk*3eL0EWV0KlIR@H%vSy3$Kq@xf%DO=^m{XcwT`_=Fr zm`L-qnDN09EOl1_LVP#lwoih6smxf$H+0+c`1>V4VDyVDxfDGmjy_r^l4LDjEt?)? z2*CrcXsKms`Xy2usfim3{BnaoS{n!6vPYYo828XIHdUu{No|e9%Fu3K_d~U>XCoW6 za&Uu2Ir_;nc-*^KY=rvAR@#?bL&%t{WYl}KasAP|$>f}C`>Sm<7IyH1*F0o|5I>7) zB9mrL!Fxo%ulhh2t%lM?&Hfv-U>=zT2*bC}+6&>Q;X&>} z$C8tx7VL&JSG$eUHL1x_l(6xWBP)DYQWBcvhPfM?ZgiEMYe3>Q83ci)l#Sd$DK3s& zW9}gUn!h1)BgrzaJT+O42M<+x>uaE10nFmXnJ}3$A3eI!;Me<7fv*~?K)3f_=^imV zD5)0QiV9N=S)d*^?pvK2z2?1=*`i;4qc~W5YW6qR0w3Z?5qb=-%otFgOs&a~MKKUq zcS)x330=-%fq6nLe&NQfO7qN4?U)q;Jc(DQrkDS!^;n(RI+NpPHR8Jx ze8qE`J%8$eQB0`g)3v}6Gz@VK^es2b+-U+Lb|GrT#dWi;ST)E3Y1a_2tX=bbEk2PPx8n{UI| z&A~$YSiFejN@e1mzoOkBB;n3rlXxPlI>LNV$~Y|1c%+QQY%{+)ecxx=l*@$96?vJZ zgank`JGZsXh<)LwX0iVvIpSer6%s{>$!(>0?bp^EXrk2=2v#i`8~HH^9cR=v2SMm2 zj%&%DlM?y@Md*Pd>e_G8!7>;aepO&^qo1`WR)*;;ai%bQ~ z9A2)7pQKK;WHm_7*fT?63!4jdE-rJ;gObX85=KB0a#w1Zmc=^R3&JpZybM*QxR?@g zWRaA2=kmAnF1>KWO(&9K_+6Hp;-vtB^1m8iBgDFswW*4&1dW+51aa}#SkB;95Hi!% z(E~KLdYF}6a(0t6>~GLq`Da$4EpCF`h9wINSqAFJ;C@3bWcR>jjg8}EFDve9i^1%*jH zfy`d?0>HR^IGR-Q&;nD?fKV4NH=g4;xcJBC33vummFH^vyTxG?LkbVRS)oB* zZUL#ClmF>>HDOjWrxFVL#!HB6%r#BE`h8NGo%_FF5Dg32QNx( z;O>%ehPR{;-jSvYa3{;Sq&)@7&#lE!ZpNY@LY82uP&=5slK zzATsD;`uT4z%+2^f^&w-o??Mu{`@oNrV=MbFDkXx0)~<+IbS_w)~!tw#zgT&yZ&+> zEwBG2o>#9~-!yt!S=|l~`5)y4dv+PKpr=mA*rYu43k)Lbn~)ac9wn?B92y4Gw2FjsmGJIMr?QgJZ8)PI_~TTEB(N zj9C9Z*!=iHW8gts$!(HTN0A4(szwJwIt)|0hg*9?dO>JdZ|4CVEoWTxi-H^e)%_$Ut_yeD4oE#(6U~zW1tZgwU8-H*)3A;_4kg;ySFBegA zJ6|v8u<#4f5E^eboNvatz4yjUxvm&rSdJtAx4+{TtWLcvA*wkzCt=khkIA^&jikiR zMX4wekw+2VAk_-`VLfWhUU~>>+=R^TJ&qNcJ-k37vlp7hp`GA-;EyId&gFyMoHJHg zfB_FUNU@kdI5$U>@A8XxA__X%j!}>fUMtn>=B`xPk|E+)fJ_$44bF7%D}|*Hl3ji# zHijcuE{%JaQBA9G>;$+c5fdi$4@wjht|TGu=UQnvVFCk&`#a8xzwGW9@6_tcqPulh`IvgG0yI)GE}hB zbi0Paupct0r36+#=2#eMCW^14wNG#mh62gu*E8=x-4G8BA-`&YFCnJ5>9J$wN%3OKSonAxrR*eA~3;5PMV*4rDEKi5yA?4cec*L1XZAb5pnWrQ3U&r0i zV-)UiLVsx7&1Ia^IPNY#<$uE65lj9La5o~~!Ck+51$TeOey*M2;B50K#eRgHg8ht< z!P#WwUaYvwFudFB=X;!LJ8SI{TpmgOG@co>Ko#zm&><8~z-uh$b>uWJ=O?VA&=!1c zEXCL)8NmaTVG{ZL|~6Sc(w*S6%dKI(B2#e8xYB=;mPQ zlUfyAT^{x@k42p>-+J=@+U1jPS6zM&ylr7RAXE9kuCm`H+G5;&8paAc26s-5&kE~D zbCVD*Iu za}>^>uTTgIu0}(!AVSVXORCyI?;&~-9HLqHHBRk>lXSeWsj-}|aEKPiD0Xj6|Cx@R zCBbytPOOhE)2?5w+#E)0lin=+AoPh4H)83ao#LtW6P1(L`rw2L)^o$K#ZkK&wa>V8 z0rnX`Ley*ILUkUL3(55ksTZp0XfBD;mNt95bcluO0c2JS)g4;!bG#HUZpDR40s>+k zCKI4oIsv~TG!4UpQhVWnqoMeUy>DNq@7t(V7vUl<^YmS=7|#uinf4y#2ym*LiHbZTyn>AW6oy}O>gx%zIA)I-_$#z`cXiir5nwygy&!#vt z5p?6`WV23jIN3xnB^M`qRyHd*Q=gr3vw~G~)>Ma+wHXOcHXfN9Nj+`4r$TF0TZN5) zzg6+#ro@C$4XXR>PPNdqsV=z7pIN;4FeFB==kmQWo^m%+nloi6Q=W;Z+|QJBrXU2; zCLncB?S;>@+h)vMGwYmAX&;}SP7pNXDfH1IyuqY3dNV+q>MV@Xp+^YF06+-Z5g5gP>(hI?( z37QQLX1lj!I`kY=AvA-+;x||l$qcu2YeV*elW?_a4S6=H8zv?bT5^ahk|0)517KD+ zo?9GuMuYKASefe`g#3ZXr>;Yss+OW$H*paQ^o}^onVx~uP=!PlEHQ$U95D2;-tMB3 zEUrG-R10jz-Vo@`2jiFR6;aLgr554Bu2Y1_NY%I9Rh&q8)b{$`q-xi|JqJDT4BV@^}5M$S+7UrJhhYnr0PLDdCE z_{&PdPgQ{S7*%phY*VZ+bNuHrNJRKub{iWYA=3k!$Xi027~^XZlP#8P%!7fY`8*PF z1J+(dsINLB{0iM(3U`FIX#+pe`v2nMC2i)TOR~C9D$K_*{E-INm)>|?f#9lgmsCS^S ze}iSA4%#ojGv&@1*#O9)oE*=M!J?20qCmL`oFAFml7RO(H?O$EFi@q!bn$(T5A z!p_D$aoX>(CeBv0AFh2=^U;QcBMW!FEOd}P3+bMc>0`V+^rBEUI;3~vnHPIDT|fCy zEiFP6Bpnu772IV?GxcH64Wf}VtVZf12uj+hkHieb^!3q6f%h%YMkK)iNQU?0;TX|w zqV}N>_iQ!DCDP}F55zL3a-(gTGwI=73I3lC!vFIPbjIbX(}CZp%6ENh$!}bz)i)2G zjJ*%w+Y~&Zp4T@>Jw;3GdX7Rp(W^x??K4{?Uh5$K;wMOHMR<+n^!N!|kb_`S zcG&?eOQFi_XO(3e^7-`>E1MqX!1OsrDH)~$j#MFEPsZ0*C_IaBhzd;x&r!g48rR%_ zW#S7l(c~u_^!c0PowsR<3H5Wk+cBLATBe(b4K5ErzZm23qazi+l5W1l3VPYiLLbRX zpf!ZaMw(gW`cAq=-$w{MsECSCk;wFBp;ZMj#Cd^Sr|=UnL~a<%$zfKW|4Ph4+OSsR zJ6nQXf=OE$xk8Hx>@yQy!KKF*w5r47klxt^vOogMCzqhjqno4!cwMz6@ar|O%)-U! z6W~`AL1_w)97fS%-A-`f-d>~seY8|ogDhQeS9+nlQY`?No;2)#v;eGLrIT!oaRcf# zOZdeCL%|f7*o_}>UEKc%DCT$aMiRsQe+bza&5-P1#YC^s`l*A$m)SsL@T-``BvO@y z1kH2>%3!z^bn z0VUU?s%eDqpGPc2sD&at3<-Ns!n}p~*)^`f##86u`-Lpy zZXbNT(0I~VuJlJ7w>f5g2BoD{|R$GyuT%OSle zD`+&Xag88Rmw04R(Op<%78gZDC5lQs5XFP&j1oaz+!{;p~sR zt+LI}*n{XfdEU4}K3`?s89MuFx%z+ldn0a190?K?>Xk`UcqECoZxTVhqqkwW9)9$7scY<}Z$$Rk zZKCxQsyAit*7>}V#)IIz8yAmA-EobiBFCg4DFPuGHLd@HAUviW2oLEfRR2c5lAnP! zgekrc3XUK#ZQ-=EPJB-|QW0P)HP+ZGH@bJ;YIY<91dK4@X9NUr?oWqdJh&~4;XwrC zBgc&9LkaTaQBxS!B2exhLYcXx0F>E$$DD3mTh{U6o`I&N6=HLM-Uyg}8iu;moV-lj zLq4+BrLUclABABTM1pClt53dPIGJ@Uk1`HYPi%hlHniJetS_!o2MVPtu1o$$b{+xb z#JdXN^lUz~d)VCA$%T>MPJ(NEo6GToom8%+g-|Pk%a#pq?1J#A37jK*W^2A)ldmCp z{cN>)gp;UdT(;5zK2QU~7ErKZ@FK#69v~BZ%SAi54dyz_cm)-qmLa(l@TIv$(F{he z*S@{!t4^^-BP?}vLN+j?+R#l{iNrn4jPe2b5^6~EqA*30UqG!N?@5aTPM6yg| z$Poz3%%&FGu#P}@*O;`(BQ5@yINC<;pgZ>?cP8oABoW_do;JhtDQ_~JOIls1kJ*xDw9WYkJ4uK447l`_PdfCWA$8v*U9u7G5z=Bgi8ZPqXI*;urs5P3 zR`?|!c_XQ=qr*SAvd!>k`RSY`{;-$TIyXLBTlQkKf|#8LX`?eNH2x3mmEK~nRG1Wk z;l>AT?pYuVy$xx)h?XX_Gcm$!QF?l}Qdvh~P3*1{AaYZr2blbC9R+Zu+)r?mLtn7T zUDLq1^vONNHI@JW$2R}}W##U^NAw{2@Cf!NdX%a7Wy13KR3gH@8V} z^L;3r9np6?imaChgW)80f+mVFf<+qm9I{@0V^Om9o}p~}Ct_Vq)7~C9^|oK^6bqq( zWal>;$(Q~Ad;QD`tEuQM-&FXx0j={5DU%;U!j+LYx9nPMDS=OleZ_x+^ybeT0z4Dk ziJq2SB8T!2OOj2WFtVv${)v}H(|b0hu}c=7Qci-S9!+J>UD&I{JB6~GkXXr)hlUIB zn{|GU_0)WLY}H;9xp@dWa2AcN+8dSK!-ghiRn6y$3RN>XD~WNAHmE2zZujd`Bu~S6 z2hA}Id}<(hP7!jvWfTckhg{v`uk|S$k{CB;KfSF_ZXufg#K@-^6Pz=6qkH)^auRt4 zP0>#C%S)c3UnTBDp0yGuf^|+#(w4rhvoTn&$3AC8r<)i{Z_wtB59q#VZVHQJ(KG#F z+#&XJKR~%Yxz6fqHEMe{h?q9HJts^V!KVW~ORW3EhbRjq2dEiVvoQ&j_5!jt%uCFCK7fw<&v^h)I*-zLB@>Bqf{x$hS#A=1x=)iI_r>Ri<&-*cOc9c!O zgG!|cIy-bA$GXYkfgESniv=I*4g1pI8Qi-IM*{!fQIZPpmrOCUCVEj*&E(j5h3AaQ z9c9Zo@k_u=Q%!d#aUMSkmk*XL_nO{ivPhISZ{COUn#8H;RsB7Wwp&l*JXs~2B_EEk z^2uZ|b`x3LMn1XtnLPRAfUs;h>rVY3O8jp#! z{3wh&;d=k`!r{AP7~J_$N_Pxj4>8(k`kn5@@ilB|9=%dpi#$xr2h?|>)hz@b!;_td4QNM2!xHh`aN3nN@WMmtZ|;-n^ZYSPm6S(7l@%N~l^MA^hChJ```Qy^n@)SKEc? z51MMa#dazV`WNT>T~&QeHHdXeW}s*naUhtQHk5U#`{W%T)Kcefrjqv=walWf-Eajm z4jjJC^Yk|nqGa>L>I_rGiDj0lZpe#C&H#Sa8Tq0NIRe!gU_r;h_86Ut*9~vu%1C!o zIodCR)xz+-Iru7j2Xh{79xWEyXJma){nc(a$XIk~e7_3M<9in8(dFbW|0lZK_1E8j zpCNzK^LvEUcr45mY)1Ek5@YS0g7mA2Ar-DW9Hxu9UHc=&4N1i(C|CqoH^g zsf)*%igj3~yw|uhoYP%@HZ8UcoxI4Hlm7H%U`|?oC0bjluG|-Gi3VF@@36$3l*l<} zX&C`{RP-ZTY(iM3!0BQL@#;v(l%V&)2#$O0ahvZCexY$ErFdR5b6A z%+|R_*P`tHsrNsC?A^j2+pxEzEtJ0jOV_9OG@0)xWJDYp9Ru;+?Q$L+{$E=~K1ALO zo~EahfzDRH)?GpLu`GW}b9Yw1`KQ0Lx{e>|alFmf;iO0KC|zrw=c?4C_uhLd#88t) zAP&Zl;|k6A4OL}Igd+qjJiVI%SmLDn`I%p4(g&nF8L0A`QkAb?<`aw|2Ndk4x^-{B zuz0(Ox9+GJoS&RMuY`O6cG3QvtT&A~>$F-N6XI1{cW{{(gD#ltK=Ju_VA$*n@@js(!DY-~?erc_q3CRN_j^@o|> z+-mz!Kxv~dT1iACbFk`~H&ShucdeNNRTYBW81tbP)d{}V2K|kmS(ObN+p4aHkA}WN z*8otFl;E6zr*`R`b8VsF^6Q8lX%abhaIog|)?iIG79=xRel5{4cBtmYMi%y5_46ZC zI_1O3GiXp}vm>bA<)jHLi|uCg9HQGTH9Ga~N)0Ddyu|wn0&Wf)KH?U`hUYFc{QON! z_fHL=n7fJjr2~lYYRG|5jLcFQ7XwzZj?uw zRFg6lzk5|Pf0O$Q9_7y`ySXVepJGFb%q258s0H6~FJ?0i3Z{f}X_E2tsjv5wYrIa+ zIyg9+dKI2YA@K(X+B8vT5y18k)fm9uj28qf_oRpRruBJ6fRUQ+MbV26Y{Ua7E8n=n7`loW&Nnlci%c0s^homOUG-vfg5+j{*GY zRaNADq|NA$G-3N|!cKXhOZrlG!uz;~E^4eAZ(cWj)g`ulLvp*iWk-(h>Menuk)p@> z`Vspj2YV5fHJ0>B9PEX=(Y&hp8uUJMjFQ;tV;yx(0}eWrQ*(7Fr-wQeG<7p)83jtn zKy7xcB6u_w4r%6v%8##Ru&o#$`kd)q9$$Cjckw7ayo2O836Z7BOF9vy|lZP8j@=pF|2dbDT*0?a-PXTw2GY}TWqxiC}Wc5Sb z`lRQKT!F6Mm1aUa14Q#9IYteX$xm^rLqY~E7)r<>jSa6)tL4v$)%-cSQl-mBB==*5 z=_0no@}eo3IlO)+sz0%V4ubbOhYW$BN z|J?nz=C3ghoRcW9+Dr;p8@o&iB^v3_Ot3<5Ooy zKXsrsBO9?6P$aPqP`K^5j7|3tImPH95e|be1m8 zBtIku7JjXo6m2jDs&5d_i#!TS^v@`QaSOYPKd;>ml-ypLf;9tvA@jhp(D< zIf)NPD{V;wi4Pl;)o|d3#vvP&Z}p1)kCsti-6Q&oqoRAq^YqwHeAv)ARynGruMA8O ztWA8__ql#0qf2Ai#D@(ef`1r4B4U8LG8rGy z70)?6C*XzNWqQQSAuG(R0q&Dm80zLEkt11nbj;m$a{p9yq*jfj;Vm`=fDVhG+J(HZ zW#K>kro2#H>(+M_HS^1!>QE2+59^8cz{_d{rMHisO07qQaJGWWNqiv;P~Wba_XFJB zEp%13#rmpUX^yH)XPvlI>VCz&okSyd+l+|)blQw*>cQ!45D~Pr@H!`c54M5ysE#7z zXI)w&Be$;8sH-M!^PS9D>>bN(M=O4(bFqp!2M*s zcUgmKrEqT+o)Ycj-G^S+OP6&vtYm=uyL}nf8P8~O$dPnd_$J&% z!o{~(PD~czLv(k6?vzEiukKFg4)5t*(*3oPrFReyHu{SOF=C#=V$pQua=kDM@BnuY zwTtBU)kKsREmNp!_g3d+yKM4VuNsoyMp}$QHl?1%tqfeRhM=9$Cnoy3h0M-gZ_<~s}R=ystUwoMTJV@o>_YIjD?%fMF56y1(H zr6&hc**IOUf#RI53rW5+l9tPxc&mTe68OD8d^9i zfFJ$&QK=tgbx-J9CGR*~Js09?s(dROq{K)U!^%9&XR#lCj(N$ATpoUIzccIvOUx7Rqo;6 zm4e(uO-fOrgpbR}oF23syQWAd8ge@^kWK_J6{YN;%ILYCR4WsM^Psm4-s?$YTmasn z^`H?aaeMIr7#fsD<*5mIUet`iIMe@dLJGl}kmDzsf8m+M+XnAD-?R^J{`4G?T41Ip z-4HbROI*l>SubFa4V7Xn7xAxb-hx-a`Bi=M5{AD**CjJ6PQ;g)d7^(L9eggLGYhU` zY6W8RZM-mI^EG-Hh|S6uem52P`NF61F31>7oWhX;wnR{|32;y|SMPO+#YgAD?biLPrPFGo1dppqi>DR2|JKq5l5QtXP!y3;uO zmmbuZ!v-)S;tcA=!GWKzovIdchs&ullE-i66R(E41A3KjMOZhW44|D|$v()?coX=8 znsKGCaQBO0Ke8)N?{>(tTRZKQfxZ{-*La98phkuNbcM5X03Uz&ul1 zul2+|Z?A8eC3o0Nd?_-9^PY^NCe#67lrY05X6`hE+-WaKSmqs7XK^2CnN@W*SLfl< ziL4OS&Z4?b#M=F|uIXDS@fx`eNgiEUYcP%E9q7 z)|~vYeElLzrfOVhGjf6<*HS~)+4`M$Z@lPzJX6=D5E(r&xSo}d>$pL3-H?})E9#t) z%l&SHdttlY8U9t>gPbi>1jzWa21q-#woWJSZxop?Ff`wa%)L8Q6GPENv*_4z=A6t> z-G3}=Dn5ksAGbb)X5KdMDYu(I)^ZHJ7FnH824y9f)P)^bVoCFEwk*4wC9vb`=aw%E z^7mjJiq_5M=X@w+*Vw^@g%>II-Qy8FW#)e#GU2p<^e$O_iQcc!`{ZjBiPl>21Zp>2 z$|f(@Pj^p(mKsQtgxmZE?(3Sr#pV5av9G;*<*v7c$W#aLIf--tn-HES( z%)K@29XcdDG?FqGr`xseZJ6LkCl9L%W{`X8akiIFo&mf6l{6$9pE0vV?P|6NL>Vb2nCrZ%DO|Bi zjDJQ3im}hgLecn)9FDp?<0lYQ!&yEZJEkyqiJg?oqt_Ay4o4`wC(c$DjZO^sDLb$; z_&HITR z;sZL{%>enk^;-kdNt{5vMF2fK7t>dq(;-ZAco`LXdv%m&g|L3IZtJjeY(&O;9-bJ; z>01{jeru{NC``1Lh7zCQ-dj|NNgRsLZ@#2;-b7GhJRRDXwDP&THV1M83b}luD|b0k ztr2JESvgjr)~B!{O4HNC{E(udS_j3|@L(nnxIc`a5e5I+$pkn?m6zy0NMdyGbAx$I4N zNBxlZ>yz)+J0stBhP`0qF+PkW#~AP++6zjD9W+;=@zDM`6q zVQ+W%j|`OlyrtJdi#o2|;1vDPZ!v8Zr`!ad>D{ED9Dv+ys^ah!p1BW@*G>zT9?Di( zt>Jpae9f5XX1*!Th`_aXR8e)r=~LHPxh>yObW^qa&AZlU>2KsD-82D-lh{BTV!ds5 z0N=8BPZM-`8`W3OB$1Xc{fj#mg-?dx?2wS! zzyI8?B=ef&-1+@78MPoiM_uy=rNQAoI$7+s?Abo`-Pfq}U-~nXLCgdV?rNd9oH3JG zofV9xoPl$!LonjnV!a+{xAxif#ECzS6Rh`hrGxfW23u!EJwFnMV+GZU=r0@o_B|Nu zV0fZYpF7NrofmKhA+*xal--PpLQPe;AOoNX5xLSxp#j0_H8P9g9_GC{u#@7(o$f%KIF`oqudLCf-R9QUd-=T>KwLf0pqsU&2F99E);pPY2Y|$+h0^C=%+I<9?v=yq8R<;z~R3H~YtoRZHLY?+WI-on_tB zdou?a!b)|WdvoPp+XUPaP9edvM)(nXyX(r1&3f}Sp9M(Fo%M$BP!9+>?&BnN)Ku2P z>ma_0ES1qEsTD_TS0G?y2F$}=Xylv)wc6+rMre7?mu|*34L!*X;m-ooZ z0dW)&f&yJ{;!ZyE6#69B?pL5B5#vg8T~M`}YhCKMHvt(UZtfPKF8SNpdYUxRHGx~W zzAfjmHtPMkj!t|M9W|<@myru2Exn!_{OaJ1>3%u#YwaS^n*1#i8S;d)FtHA`p8QV)do?CcDl4BBA=MxMCbv#c309= z@hE=3_(n&_N#AvZmM%Ku)69^!lkYeqzjTJZy>+UJ8~B}&u$cco)#cI_diuNGYDHKa ze#@X03DtKJ@Tff6y5>}ci~gr5d3l&-3}IJx*mThO!&0y~C}4q_6}g+!=tO^GIyW{x z*oL+;+oT$iZ&P(4uOmNrFaaBu+k>Ek8|dx$J(MQG=)OmNS?d*`%eo@;B;AfsO;pn-l6(LiS)fKntTR8 ztSQjqXJ#_8g~?QGz7s-xk9+S;zmSa=$RRKT_WY3nECt0U?_F?jng|4zW5yw#Vbmyb zw?G@_70htwx3}QJr{?78lJ4rsvB&~kaEEBJKUvVN76f5@dp_| zll)+R0N;|y-DM{M2tEzAIJg{Pu$O$1nJ#_{%8kM5+y>8uJJQdF`2Vx{OnIW zYtpywKHp`$eN>wnKf7u&gop7+1QrpYB_Xi=`PPio#u2n}wu%?ARC#Yvv8gT?tK&Zp z;9jX$0o=1r1ny;m;!xn$7Y*{o@aFQ!B(buMTv3u9n?B3_Zexxnxm9&~KlkgS0qP7} z2J67pj86I_-3EeyyXqD2I^O*U1&dX6xL$fdB3yCX3ckH!!^ex$p<)jA)aL?_A=6bFk0~! zR4ldN1+%|$Z7P`6&PZ2Xnj*Tnyv#a$x04E{o3gJW%}Clo2ww4gyRP0sq~ztw2;Kn$ zXq|6Fqo|1*B<060Ax9FG5W03Z`Bm6(BAWr`)mJ1vJrjC&FQn#3 z>fTo4WfQ=R)w^I~JPN(gPX5FQt2vjV-Xr|+F@~u(7iA%uj_+pBG=X}J4gr^Z{UQQ| zy`br1*VTzUG~M>x_eawSCl>IC-xi#qtiJ7KBW{L09YH4x6S$N3FdQW)V&<_05a!|D z-9Zl0|4oVdIgw312+^^YuII*%Dm-Ji9(&~^%xaM$&y42xm7V4NJ~5cr5?a3bc#E|L z-*5|y(~M`tQ*&hYj&Yw8SGJm)0TSbj$mZbp0<8%*-?t|*(oOiic!bkhyi=(wCv>dK zIY#!JaJi8^Z=Df{k53F^QQJGG;9Eo=Bc%S!7L0`je?vh(#w>@&r2FCJD8K%k(Mb>D ziBQ+HiK%cc_%ipoU)86NNH_Y?X=~kaluHk`A7v``A%<96n$Ly;S$|b-Lw=duCdRV| z?{ylq2@{y$9=aC`b{8|L*G!3qAj1v?mD6$F8-dd#<+N366|=v<*XNkFo*pU| zia^BHx-63XTV&I}r&OX3GHb<0$#u@i&zxZ&$t93YHwjTD_fK9z-p->a+ZjAnYF?dI zclxP*XtCd-hV#Qiud1$Wj(K)hUw*BBAiqN5Dr#s#wB7-23)v7PuWxGP+XlUT<)zq1$G zdh!M!rF79o@@jkiCk9?VJlD^s#-=5oD;Y&|U)64%WVUzaEZr7_I0=(i zF+j>~qY5C!#Oikx`u*F1K6YW2vjvdy6a9qrhO?X?--%6$Exau{vfOlAkZ5{yb= zK07a$&t7&0TD(*hM<=6I9G&4(hOSL>P`JDIpv^CT82G8GcjpvH11&C>Z4CqYujB6OhjdFfArtsl8b)P|2C4lXqq`VS_u&`>Zh zFW+ql>K5kd;6pq_Gm{hvfZ7bZzmk+|M`nU046g%KvxU+uNSB^8XlNY8;qn^UfxR ztND1ou1W1Bc&c3tcV;}sxF?OmE|Avx`?)hLZ3bf?lV7_f27^zuTjB%-GeGR6^o;Be z7%>t1?^$ZZekQ2GOkfdvpyw%;n(j&2>+E#6ft_^g#Wh=rPA2rCtUz1C*`TjOoOKe8 zwt}+-Q}b|k!4uyXXM2)z@_Xa#(!aIB*#Yg~?6oY;POEQ=Gw&09f4$!UbcbsG_<7Z= z1T;P$4SSS8EsBrQU78v>8D1Nj<^HfGmusvX)`n|%J2D6XkkUzNFtlD?%&JqkQmf@L zZ0Opy6$W*wj{T?uv9lwH+rCZrLX{qAYL(vYIcmIdNnI+igfFm`a5q;|gY!S&i$T7) z(af$D+;-LM(hqSYGt1h{wysCV?Ce^sVl7>rM>V@395_yy;W+%L33*GZ1$2AvB3&4i$v=sJ;-w_Az+~K-wAG8j~GQCEPv+ldvTzM+^q% zekuikm2QHyd!IaT+d=5{%K}(iA(WHQ9_sAfs)2bZ5R_pnEk(y(C*xkk+i<=X5gC5+ zdAR&t*Ma5l&$9e6e|?eR!iT=^@>fNoz3;vJUG{jZ6?voM!*68*Bv-|0gOEPsQ= zd0AfyO6ZysU;V&ek8WoYH`Rc4vsx4@|CD^0+z$pyb)Yn{(Yh=-R7#XnhG`B3&$uOT z`l`SGOht+nOYd>(8B)&AGpQ_p*3P2)rc!`r z2lM6!zUN>bOESrAUv$^w-SS6Vra8`4gD|VV8O*IFv3zjHa1aN6oXc^|ev&<_6Q6^e zr%mVY-q19|{9ApE9A>O+pI0KHL+RF1`a}VAh(HB4AfmfwJnkx2{`;>~B=7aMBI)G*+UlnYeYIx|S0vI#yE`o7` zig!wH&pVOScIxq|<|gBQ#TiE4%l3ox3F+ZH4v`nF$s+E7W(*5RnnF^h;t#sp8!ri4 zW7XqZ&@QcV$M3};9;GVi-78e;?jk>61luugHU7itbNzSo^=^xvoRl8L$yfc-6;|u! zcT-wzhsyF*aeDeymD~qRKkn=PT_)YnZQ2jpz%>3CY{?!{L&_t8^PutSrPch3Vu``@3>!((il+t`|$G&)>qU#(9rZdkImvZ4F(AdA{+ z(yif+2M1qm6Jz!5G=dFgUGh@W3!PY*X1Qo>o^Rd1$@Fi%d+ZafdPlgmfAsB*i&Jx& zrA%W0Nx}aw$VQS0)~}r&=u|iJ=mA(qYH|dQ5HB7_D8M`~C`n_$Xw-q#WaCA}CSOJ} zii(`>`B5%CaLk*GTf5s?42Y$%$u&Qq_#Y> zm)pp?km_YNvSpFPbJ2_C-#pXcFmQ6forin(yGoq^_cdDQe{ega=F*GKJ z8v9j|eg#IWLw;JIU-f8KmJRRQ**jd)a=7yfw=#unR!bgjzmE?Zl{4~{2ooRb&zzC3 z$cOroDB$vsbPkKn?mzjiB!eB+h;5BmGDqvdpp-+JZ?)R-pS9+j42e&sP?a|HllUz! zA)|e4@ROiS8QpRv6g<6ZT!0LlNFz6Xu_1M9D+NxZ`I{aw96P30O_x~pgTbJOI79#p ztW(pCbt<5n9_?-)AK|-oS5Uwx0(oGkJ(I*$z~VRV+aia|?kId;Je&_-9=&Ey-kS$niqO|V zAqrRSPaX#rm2vIjajf?X1~8f43WN&Hn5;@AP^u*{tJ0jv2Wtl&AfF4I$=_r>iW>qK1f;Kp#>%3wYG4K1)(I9E3$rw)(+ zT?^#3{b5Yygd6p>QvicEY<1bKu+?fR^26PJc)4M#PW(}x8NECE3z#zp#RT!*auHxc z)Up*A+bN5TzHBSJJNc6{-I8?7%r#b|`s91={P&OuIFx;fh5)@<*|OTc>?W9TZbfed zkAvFz_AI{DXBYt*^=%zc0R>^dZGBv<>w>!Fj@iw+EiTLoEc|!5{h}%IAO^E1Ej{wy(pj-pZo!m(y_b==68<#L;i2WalVPPT&pdk&|cp3w6SW$Vnq%p-&6Rkl*I72 zpO^_cKnN@MgW-5ls;p$808nZD^Ri`pDFt%iAZ8Z%3B%kASbauwacown1>41+tt^GrF<{LS=P&NMe=zQzVk}vZ$qBv zJS<(-s9NO-g8~I0ivH2hbZ1eMHY8EIEhQR$-`YiIe1|wSyCi==%0RzX3G5ElCShH z(vq?ZGg0{V)=&-`0f^)%gx5wE!IsIDHu=ZkPa3h;PEFTHzO(S`=*0JvG3ap(1F`Wp zqUS0CPh;{+**vtY*inCFf$v+m% zS|uRU`oprGai3f$8R%!`Twu8R2)bbT!JS2bGyK31`(FkW1}@#WjW7&p4MVQHqj?{J z;rXec6Hg=GNkpoQkX%9I8mkaHFv8`+GMijMLri$U$Biwq(#GV2#+VZlc5HMJN9z+p zw6EN|aL>XzqL+vMa^aAFt_7U;sPN-{CnT~H6B_V7`sM9hpA>%!j@zI zQv~{-hS2Y_HRzqhNMKE$u#KSIa9{hN5n(NbR;r*|eHOfF9QE5S$KY%->e*)SKL7L9 zz&njek|@nRmzCYUc+xYkq^9+a@A>!`_l zn?Kuxz>D5ATKoCHO(uobXv=0m*X#vv8&0xl)coc4fw}FX(R@@4jb{(|KcMlE+w##U zd87zC{AD=p{;=m(PwYHbfzjShN^Lvr@S4#+rrVn?Mlc@8&A4LPR`e|`geDPgky zHRXcctbK~7#7Nu7Z1w{9(aEzdAJiVnPM&5hlgfY;>u zy3Feh&CixKWL}DWD5a_fvm|Pc%yp>;u%T*3)8_d;|>rT04%^&dq z3Ab6xy9AIMxGl^ZVp;L-rOLuY9oB<*_rB`w=ni1?-6Bfs3eOfW=gc2+JyKC9(8$J> z8?3`b(KN(_g&L-H%+9AaW=F$k`|UH#)qG(FpM7c#`_;qPqV74HEovn%{4MIV$^I5~ zIou8AX;xlmK%t?|bneYjmr0zd67(agzP=#_-F(@}<*LvPM}O#;fDbc%CC61L8TaSU@Qj0uv9$5WJQgdxn>sM=k?Nk|vQeU$itW!ux4uD@ ztl^I>ix5-kBEXb*-|@^nzArttuQYJqEak<50M>MkLAl>{F32#Z;G>+!Qhk-V=k$KPVOIkUZDhk(Q3h2RK@v1$M$DOlSwDBiSZ%`X#|HC~7wCUSFQ1_xJnsgyHCJ z3pvrfAM3?V>HV|ycwf^Y!+A~daK{j=l-`TH_h02~?mR>L>WIXaN;k8C736k`x<8~V zraUOiRQ&OrenCE7C>>{zmNT(lta6_|P?O;O^hcKTo%k%iHP*ryUszln+8qtl%RBhh zu|#Gn#+mBkl!e1)UW)b^-EsxQwBEgl`bHhGiAs#EX{MrzZ?ODb6IK*#@}}X3 zEFoR1qs(xd{_5JV-jeO~jFK)Xf(G(Qm11#x~N=J zzq+wynx_7!{d(sZWk#nivh#oUVE#8WFSql*q51HVXg`|AI7Nul__|X~@J?p0NfSXv z-ZQMj<>(=2iawQ1~6)auN6-jQIfJV}1G~Q+0Q$&Q$z>FQkBfzZ?CztWWFyL{e8) zVt_&`SKA-kQ`b@DC66JSm1I`ic<8#5>P}Q=$zN*v+pRHmRe9sU&5dLal zQU?CtnTprWL{=$Xg$}cP@Ztb^f{~VDB|$IkGqz0)$uCF;#TV`lXNz^N8J)VaJiRE~ z4;y`>2_c)YrHKzO8Q7S*q`dLa17hS#Se5+JeQVyAY*iwu;bp^S9$4LwAyV#=at{_z z!fvPwmy+a$8Cy!q`1FTM-0gZTp2_3drZq>@HoeqTJ2P6CGHNrHUvd`1x0he+b;LJZgo!yBC<3!rltvN zoKAD`K%_N;HTG*b#e9~jxaka?J;OOP(?ZmlD6SmL(Ra|MgKXY96SPrV`jNKwKC!%p zUto zKj3KNeyLI>C@e5S%`6PHlVBIc3W&WykRP*?fqa|~IYb;n?!=FvBvv#*FV4k2Sbx}s z-=raH={k(;?Abkg*E3tJL^Vmf?kS?_Jk21xQ}Z1)P1TDg3YbEIMNu7-@V`>R7%4j` zWDFr=a;!{p*(Gau*8AzfWyWs!X>yZEy!WZ%M5?8_s>zD;k>(ZEs;yj`_;UA%-+UKrjlZj+(j-Ck z7iAo^oJFuPYjV|4+c?3t1aScRx!B*?Fkv4B!5mG^RweO`W1tF1JpsgdQeOFP!y zD$?^6Yi|iUu=dZLf8f_f5*EEgXdNnB?tWrmVoi%rKoCh%M<|q)yYu%kqSd!Ujr4X1 zZU9dW;5&ERcGhTQmw-`xiEq=6Os9O<6ztpj(ay38@m#6R(v5j$u{7v8 z<2~jsEoFT;iMNH;I~zZ1nab}CQ+dZ{DIc#OZAdUHj~w0d)J+U-VOQ1I=^{B;9`TPz zYRrUQbxGVB_|c^y*)6CgI!yr@PY7c^bBSG4nA$`>=QB&`4U8q-P-sxqLKu_VtwABV z-EY>YD#Sswmd92SG)=f36{EiEL)U!zY0inQWsjHtwd`!m?I-Un*C!eG(h`u_1F6qH z@6+IqdH;?3@tHkK;)|m@ju^bLF}Z*sa?`v6;p>)dM~J(L1(4AYYh`~a10$l(YT7_b zV3(`ATHT4GR3l@huNM_B3-@y~RI=r94Reug-R^>x)%qRxWlrd&#lFEX_hOjS#D9n8 zzUm+yhseNBdxEwUQ{P!M5bPJ&Ne{0K0Ej;;FIZzJ!SVhPZVD@L5I3iM)RRfKDw160 ze)uCL0h#GW>~ym^`5uOWdS?_PMIGTlzGND6+>7eeqlQKb*#-@Jr{$V59Ge z@2D#65`gxntL_TAX+WJNI72<%#PaH^NXDIP=+cSrye~a{n(pdfla@&lUKux9XlsNb zo*DAvS&q9)B*)#QHgI>T=0~Mgze>sT6OhpOJw81pUp@w7rs9@fb0bUM?IJz6vMfUS zWwj<=MmJ>2UTCg!OuAX+l~-y;5@nY`7Guj$H8qx@%;|#UPRQjv17px?z_?;(79K?> z(ajA06K1G1k`Hg+?nwIVG^pQ+%h>0iZ{iO@XD9BlHU#b-__}p(-i%fA3b0NKgI{(3 zdH~o&6D+)tgryU9uGGA$N!)n}b!~UMp9&sI_od|E8i-1PD@yb4`}_Az{(YH$uLMgf zU+&+V)R){3;J*1o@=U(i#rq*`<=eAhIewBt0~+?lTHn5CDcaf>&zG#T-aQrW*N{Bb zWNNj=8E%wn0nS4lCEjOp7sh{Vm`Vk+=+Iub~aB_#-N8`K-HDs%|haa=h<+S7E)$_$5{<|J;jMCfk#A7q2v<3OKeR?9ju zlU)&Kc9u7^9Fs8z8m)(xIpK2v`WnTa$fF|BOA#i^NBF0JK2g=AkD9N-)hw}E#g~sX zuSTcNu53u1${C;|IRo@EodFsdvQlS&UX^x4-dPa2csz!y-3-8pnG;maV630OU{_>&n1y-BsoJ$K#~xfrlObX(3lch<#@n3 zOAgzCbPHuKq|azWgOFHdNhaR%B&p)Qq}%57aTp-LN43Dwz(jE72PFx0IRVlTaVZuzS2UBOJ-5%_;NUL}o~9E;u)-%QqZ;q#e1B6EC_tO2T!icQL8-WWy=!D;PMLxxdvZ<3yK zZx}WAi~aZI8hP$l`1fMey4PA~0M(Uyr6X4Q`hGL*VhI}=&(C-LVwJe6sF-W+{l)Om zd1f)^XwJ=6!B$P>Zp)fpCEir?#8S8%tIHeMug)^32l+>3sJ1DlaVU{%Ir1K2zgzF>Jh1@#;EYd<%liPBx@N|a)JmfCnrm*f0)`sRlKph z=Z`8Z-t(@Wg}mpEs@Z(41J}fS{>i%rq-4W=sIpQb2qty0AY^K#g$S6?ZVi&#b50@_ z7uw}GaUm5lYzU)$4jes%gJbRt`TngDHwbpj4W5n>NC-TTt1 z_cV>;_ks}Q+!3>?dhyz+f3T{A>yVd{FFV7wI7fck&@$2ynF`=LPW20cUTD?;q+RX>a(ri1j`+N7}Ylu(bq~fFd zgvPv8gKpi{nhB7_nP>h~a^nA_CYmp&o0mIgAz|e+ofg9o3WXG*DneezfRIicj%`Zk zuL)a$h-uGT`)qp^#m!xeO!G9`DiQdikfJnuw%)ex)ntwzZWnn*+}#Fh`Y5TLrzNdc z)RY~wa75xiqCY-@*pK$*t|)?9;N|MDyyb&c!5$T0ByZ-ZUMsvdTs4fotg2E^9yCjk z`fujyjt{b&QjdcBCUYjdY_C%~m_w;@M_=o%$sySePC3Axo3bDr?P= zE7h;nqOM@v9cTy=(JY*$O7ugk847Ftfm}A5;$46HQ|nz&q5>^lPr6jPaG!)BTP+y8 zG0RL7zx7Y`nXf4qkhg?PQ;ubElAsV3x?hoQQR=8kniYoQrKCjXyZNdIQZ`N*bnb55 z8&`Y(#E?Fv$@Mz8#YQ2!M@(~iIf_+~5g>~VTYJ7nfBIxoG6 zMiph#g-tc3v2%-4rCMrO@THUZzzBciW&N7xuReaMM~_jdr79Kw=Z^gLmnXOB zcH9dV@EycrMGnY8%UT|z+jb)951r$eyPe6fT$o7i+&7O%CjRojNhD=kP~!hr7~avB z86pwJj8L%ON;5uA{8Cg8CRM}*{3t$7C=Qr?@<*(HO}g^+(v?4YFKpl-zS{;4_fXR| zakzgmh*=Kz9CsaoasI0zj1_|M*L?RqSXFmmEiNwnf5xhASg=)AwfmqvDqMZxf0GKY zCYj!UhYD9jTd}IgA*$l6YPd+Qm0Xy^s&3}sVb=WOyCLs5Dkx4btz_G|htnGM8G#qk zNwSL63-RLx2D?EcoFMez*Dzj@mddS|c+QD`i6~E;PXEZ{=V~IQZ;E2$O-Jjkf{|QXpzpKOigE{Wgd-VX9q?vjUu&l{{lIF$^n$&zX@fRtKE^0m( z_Vd@N<$~6)g{4qZO)*IBRg-?lfh60Md*|ov!ITTh3PIxM;7vRi+bO*px~Lie%6W=0 z=qrpttob?-%!yBBZ4VP=1&Qq*w2AFD;9p`6OG3eMrqF8;@9+QJPo|iu9cXn)v5xMq zSoajdR=9i1K5MsozQM~$97PS@2zJ1cR7dPBqBZh#}00#>z-pW5@6#t z9t7^6UY84nQh7P?qgnPFlOKAU1OYocaXkIQDZ;Og=)^l!dFuL`%%#;Sb=S|dPYjA+xou4EO^eLF9oIui+AqHn&W;d5;DYRg?gvGI67z1Ru+S}^0J0`E0uc@W2nk1_-7FTm$CX1bX7DSvPI9B5ga7?5DabxME8LsJ78w zzHDZXF;x9o-$j2}H0szj*fRp%iDp>xR`w#Y5EW@4N4V*Ipgx`D3!~Pk*f``XCtk|u ziVE*9Q=^qgF$5SIM?z)98qmft6C|`~Mrfqf_R#134WC{#)pU0fN{WftCRBH)gtTn> z?GC?ObA2rPZ}IsT=$%&230{oy!5AIZNvQ7cBwl5Jic!M{e2_y8?nfWBM+4av*bDo( zjidhai?=rF25JV|gq}O`hv{#2=#2;Ke`)A1Hlm4Dn+g5b6YNAbGZspbi~h-fZi0U3 z^(yT>4DWT~;$cFYnaFqj+6uiISp&TL`VlIcX0eM#8d6u3jZR&G@4@of7?4V%eIhLv z)ih*Yc2DbJq6X6*&JujtGW6~5wl9fx(+72#f8j90-z>&OOA?ahNOK1*nh1iP2lumf z=PZxB{9R_E#8SAL`^}MvV3YKuLn2r>H~&gs+MkIbZg7 zuUTfMZL|g*O~-awcPt5aSv%iMWzwL#zaI+7DRU0A-)pt%&A_@rXJraV;brX~-wO`U z7Y>JQ2n=%m=9i*TiZ*gJULcE}sA}?oH+$9cVSTjNn6)l-TxBFVrz!*1+3Di9V8Wqz#}0^L2?=-NB`ib$&u4H`;{P&a?quS_}Ac1G^Y0buo?&4%p02I_uRaN zQ_mL|+N#6tEjWKNuy2qbQiW5C#!!9pnl1I+*Xgsr&fSs$Z~c?6EOE;uv*a%1M$iGG zg@7VhEsX|2`@T5E`^EnI0qT?A=TzN3d@++Z&ck*41wxi;U+I^Y{|2L#9VUxy=8USL zV1ObCS2M>}_4CFdMEV0Ow!mQ9LS~e`>J7@T@wUjSh8m>#spSg$Lbx>UVOjq$%g-8H zE*m3$wr)!q1Gy>fDS)e*ZwQApDuS~I;{Xx5U8V6|w7#NZX{L=Kn`3+E;RH39B)&RX zL(HTcZgaf+wbTj{fjfXsYvruwDt=PKwa9`^wR&q7YV$Q`9P>;y;Am?=F+c0d(y4G; z-S%v2ExQsQ|8$cPA17hsFj^+W3{4;Sh`9or@#|^nTHVizkH)>HrR%3BcT9XVUsFpV z@e!s>OTM9P_Sy}tj~EYA7VoSCMeY0_g;IlL$IQg2U8Pa+Z>wrJWuP9L9whakf(HsE**;)a?s1!0FgC zzp+j6S2vmV_p`;%4~t(%@$|X*Ro`XHcCuw_!?LHT>`)^Z=YJ5hAN-?->6{aOu&+Mo zMMu8fuv3ZqG?>wO%>;;qXc>fCkoO5#=3#ng^Ttk(fNy6i$_82eq$aSN{uwLkhh6yd zko`y-=QY<78$j3x)oLB?cQCJi$7@fEir<>~`qYQYN<3*lOy*zj*S3m6a*`({o&Tw( zm3sq74#(hXEztT*4<`rFKMkHF3nk61C-FWZ^)J|^5*-C>nk%{w#zY5qo7s9dg@ zijDgajiu$$@AGy7Vy(R|*tJ0d@F@zI7EIL;0`;oTk<@gBAm64+Z?~1e6HsS8{Tpa+ z7e>lm#}rE+=1Dp?9c;U&wNcv#T7b~deE#Y7friHW7p?n{j!ysx>V12^-a9tA~FX$)b z$-A&Y=R|WVbO7mJkT<;Ds3u+I{nhqcl3gL{`*S;JdCUJ4Ur3J*n%e1{nQh0!>A+(= zOp{uen6OsiEDD4E&-3e%RSaS80YK>ya`H}Bo4#PH_+$WMwn;S%bVtD`ZP84{8$37M zB7K?(wpaCnKwC|f0RltPx6B3tJv1EFlzLg)w^I?B*1Ny|77I`EZN+D^eT(+czAaPn zE9y2|vnl*gO`;0-cs6Y5DekjkXvZ2b3OH$}578S&N!^F~zT~gOu$y$1sbx1)_geSE z=hkQ3Us0DERfUZ{%!bi;xaoWM@r52f!d3s8B15cv;-^Pf2fG5+e`@I43<|h|RNIgF z!)JvYtqp;wJCaY_JAMjI8{Lhsn({gFUh>@o60Mgp{C($G2`i8!yh{wN^ z*q(O+4}pE7d;dxUUU>js8Q_^5`l{ujc4`qT3u`&IKrLB~7M^$%9{g63m{gNk&H(eH ztyCjFC2ux=vT|s<=)3)N37|I2G#`EHoeVVIu#VR@mf8vrh7_vbAu#w7E%7(&byra1 zRhVF$_(F^Y9qiT%r?m%&jwtZ~*&%k~h}2ygDbnp`Z9b3B%Cq^*Ldr3DXtHOE0w992ZHBBau2Tm|#qT+u*nS7GQXXQhi8`fn~GMkzK6FqPX2sW-rza>ZwOR z!LG@$O7>!wW%@RVmacbnw|g-$Ry6x(kJes{@s@s1yKSTBtL4gD|07=Kr{p6`ic<3J zOd3ErT9kz;`TDCW@}t$;Bi2nmz9v=0WAYG~e0*z>7cM$pv8T__U8~tl)YEdYnEnq9 zEdIuI6jBehhQ44>~5yI=-{mh z*3L4?*jZlDq!d-i%!G$gBp?m5<&oiFCMEPwjAfF3Xmv1t%f+Wp%&b~w>YUHXzy>xN z$(ujnY>z8vefpdZ&YF+M74Eq|bz-~Y_)JrD#e$wojiZ!;!#RhiBLqKW+VeO5l z(1^$|gp$EpuV*qhvh(F5sP1`v2gxiK>! z;30pR`DW!i&9@ibbsvWMMi?dQ$H~kc3T7(4*cHLQkvrcOfi6cfjjua5N^{u~(AWam zFr2wW&3%RuL%s-6vQzTn%H$}MjvdSlgH@hf?bWHaFbH2vC^-MTO-hPOQ2@1)6#||g z-%Rvez^^#nS$753cA@dgKlKzs-)1%F!T!G4aNJXRRU3f#cB|ePT7Vs|B znp(z2XQzCbNhw(V{e-q4lwa%a4oG}{0JqBTFr_4VP9!y*)Z8a$pAh;zUeO5f<5zaE zlKV}zhV&tL%1|&b{#o)r`p*M4S=&39I2bldDPlT;&w?D0oQLK(M#>fE=V z<KyKclx?;f0SJ=4zbmd|I-KWtH-ITg{t!Nl|^QJ{0OtDKKZOK zuVVt352EbhFbyU#2DeQC;U#`=UcT)oj4I4`?IEqK{~O)+&>6uQ`uoY2%1O4=m`n$3 zC^ptRpXD+;AFT1hpAv0T{hT#6m=S(K?LTtrbK<+HI?HW14#we54xAH2Rf~aKAYF8< z0?==j47zb?CzStUg-(3AUZ?J;az%`QtT^;7CJwy{7emE)DiHlPN{J;UcGE++vmfxu zA>MpP#HfNn9r+~sfugFaQhZSh_Gow(N!3QcGGYn`Z5-lW@`Fgr6}i!%jmeMPUi~FD zP=sL6NatAPsFuE;@Hu_iBz>}~%2Zso6NFcK0fFfVpXM#PhX(0anqMeIheDbaCiH@; zaa^%p{(=jE=^!I^wE9V+b%2bUt70+jk-bvlXx7!rKCqY@w~|wZ=>xHqCMi#?f-HmT zoVY`;xtl;`b8#^68^I2w+Ud0-5MoEjJ!K`8N!B%16Iab3C{_vry$P(eeln<;+&9Wh zX>tzAkfz=g2m49Y2iQcy`e2{?yia%*YzQw0?8Iuyd-7QjWYtt{Aj6gs;kW528Atf3 zuS7cn(OrWYO%5xjC&-Va{;*CyAvzMDveQXXoSGY2Mq=Gne-YiwlUv+}M@nvA7LcNQ z?UkD8my~(hif#)Wr)?FExRPlputwvOT++PcvF5LKcdnK0^088L@XPZ~^PAi`i#97g z>-o5ykv<^tDvyFu43Q01a!0c@&BV-cL|MddSkV^o=@Hw~zbl!V?czDQud`^L>05xz zrf<5%hPnq`!IB{gPuI3Y9&P&SIOm!lAbkXd+zQ@fU~EhtiU2LPmm@&Co2PHdG<}0H zSTp2JG3t$Xu`o*f*i6x;8u-b2eiUD4mr=fzQ>A~R6%@1()QbD`d5=ob&FLO~@(q6j z_(Z#U?CyKTH}u1@I3aF@iZXR-u^ox{@J1iwEShDG-*g_HQ}s5_CgR02#aT3`Y85w_ zXD@F03KhT|+#sEd;pG5rd1}oe(9Xk@)d%2_l9VR)eM=2lgtqH@)5m(*L!C%dGzW^ zzlB3^U5Xu4xCP1$-dGQ-EWL*@*C73dv56#)FZ1TX^ji%>d&j~0d!e0y2btYLX6LUa zF0qI?A}!nfyS}35bY-^bO4oCST1%{Yq)DMsV%nMCtGVi5q$N-T_<8Alc4x}vvDxm= zTYW&SOp1&3DNJ{antO#CUn}5S>p@zRO7PM!(v~^q3wxILnBhh}AVeN?hflx>v?eC- zXL?a3kjkI%`%qAPo){wUXiB%j!ImKRM+LEJ}>-&bNlRyZ%z;Fg>%(`wbg$e5n1+!w?temXRxn zQN;dK$sD$f)4hMP)`7F6FWKZ?tu{r@+5kb;k5- zKEIjSU@^hjSd~PT5Lr^IZKnPSm5aF=RDxbnuAYg~^h|(s--Txa!^*QjBsl8I;11S5fInbrq+E*k7vey;QwuEeR)Jk8~>hf#%Zf$ z(P>^t7MBqaC9=@+!+xT_`{NtGH9MSgcfq;rPbT4IrnpG>a;-+-;hoF~L=hMp<-JzN zm-tB_o4L~|AFLYg{r!+-2JvxrlRBS4%-y8=7=k5J&oB-pvv_d&kXGyD{&t%RQ_*TM zbJzfWNhF>*Y@qjg?pCqf?W;(_mZ4M9W~+GLXFK`1DF6Ofc2&SO^f&7;u=ifX-5~BR z(B1rpxZ91pk-EDT1rY4LkS}i14<9^wNi>&rk23 z9zkhs)GnRGqtntqPoHESFoV)#>?yK#+csQio|>uHZ+pyi2m2q@@sal^E&KO_Rmsk2 z4xGag4*}Ax1Oo3S3ZzxUj@0zu1S8c+@LiD}?orJ3|VzHc!0(B1iEH_mooj9o>$!QrY$klF2vdwi6E=lLL>yH7uinaJ6_ zz9ip1WY^QrN%fn5wx^SrL9dD&rNaTIlAcM=Sk0b~rH4pwUvk!ojeefR*s%0fg%UNY zq@So!@-mqkA3IVq+%%(SH8~Xh8lp$oER9`a2N%uIxbF7O>_7iyxX&pJJEr_H@>F*6 z&c$Y!x>p-F6E9NI#0af&uL36ld?O2Y&q-+WA9isxAuh$b=)~n<#!(dWX{IHzr1`5( zm+Y)&ZffcjK$U3Zowo~e#!&fAI0@Oo3wI|q9JP;@9sk%9YysJ0PpYlP_zo)4*;zH- z7pkp5BFwh;YSNcb*WcdnS%UPd+fK1TatfTu&tQbXGg-Wm z&3TrU&AnSL-U0)+LQlAbG*TG-s@%wWU+Tm+sK=OAi2MeXZo@CXQ8-ui4phZLdG$|N zD97;IUnu|G%`TLQy;vwMJJMVC*?VzYlH+T~hT%2BR`XJYhW(H3WeL4&Y}bO6v9Q$p z5Qu#c-4HpLB=#!*3Y}meb;Z-!Kb-hXm6k7 z+zC-(jv)%vsK4f8^O1;D+U5vA`C|++tKDBdZ5K~ODpkO=sq_ijACEqK6Jg1it?#I1 zoS`!-i#}6h7EFJ3I*B8wJd(P1k}k`eb&=))hhV}d-w)fRr}sWqfVRSFHdEA7z_4ab zf1Q9+S&wF=Du>{kS7668M6W=Oq>il7Zei(#T7#hvoqAAPk04erBH5b?A(B(^&B-N_ zhr0UG6ly0aC?!NpL5^ZJ^O1vO#V>YOPB}uN(`OuvZj59t6a%0FQg+|JXiElxY36pK zaO0EJF}j*or)YG0W_KR@9OEasjg2fwRb;^58o!DCLe{Aov9u3~_hH#F%vCza8-HPR zkC}>Z)$!KTaA~MBu6BFAVg!M6-Zz54ogW2)z*449x+bUKdx`^Y8G5)aI6W+QvkLlh zfSGuWcUx`qvb=7m#~Y2wbO>=XCKONdtGgVLA$N=A%ClCMNIt^6ffmXAVKJiuGHoxYq`H6IYQkzqSI$M@z9BEbk> zr+R4r7dX>2Bwu3Pt$T7c<)79cpIQF76GzNEr}cOac?}P1VZAD8bVj&N{Lf`-!5*t3 zKWYtxb`oOX`WKnJbX;TU2Aw5UPCL44WzrO^*4k6ajpixjh$d1uiMNz-dVmu@AI2;T za@pXw8e8`5@q%m(8`Av^e$?B_NODEw&_+(ij!S75X_<;SZ9q;YzacL=@dNb69PCI< zOx9Wq=^zTPf87v)&%UU9%mAl+T#eJ`=ghQYnZFIp-_m*}$+(8*EuEcfry+J=8Toup z?~+kx_WDbt^dFgb`MQ#?tDS+?nOqyrYT#c;N=DWrGKSYaR62OEcMnLIIJ;PB>7YvL z9xf%2_5nWRFipNnPtTSwAA>$%j?IYHs-;I*r1b6JPyA2Qb>Vp#VSDX;548GTOuw9; zB{W_4AW-;wg8{Zf&H%rI11uO?ZB|e^m(`KwQEN!dWB}DKchFo6#w-ek9zaMLgisT1 zJ4mejimE7|Q?;6_T%tFaE2oNrg-(pa*iH;YV<$$UOD8|OvS>;=;fT2Yn9+$$v;qpy-;PVc9;AW{;_~t z$c&f+PV{AU5J?+4rCy`;u8DBC$r877D&*W;uzQO$Qd))$f{M^@GODN$b9Z|G-~a`7Da9>4$SwF91JZT1U zEQz&QLt-Rl&VlD6PF9I1z5PD;#EcfpFj_$N7p&u?w+*X{4zos+(%2B+jz}Gr^IRhi zp~2JuXsqVz>L=XNXfs>95m0g{%e$lp z)Wddougx1?ld*lVnh<5UFFwHPu5SwubZ~n1QU3X6*G{1mR{wkLOnzFrxVDL(W`r}5 z=H>m}2+m`plb3}9Jd*Lv_*F%ZZF*Y!nYppZvTKdkP$cD_)_twUDv}y$#0Gjll9&b~ z3Xbd_*ko$$HsuBJQq4d2&zv?R)XZ0p<=CSAwEi`5TspHAzf}|96WS}ub?p1ML^3b9 zS1t?f?f!vWQG!yjfhNA&Nn(e{E-U@B1vfHhF#Jy#>M)WYhu^rrAc#&XDSP6$Ju79o z`c#*CaJeDC@T?SpJXO7glvV<*hFZfUm7rJ}r1jG$5omb5TDPoYF4vRvJ6O<~BF&4D zCoT0Tl5a6@-T&-s=plfjG5HlaF?eCsdM%HtM~$i5ENRThlE$|^Vh4&iH4!Y+kgtOK z=lew;jfOsC8xI(PiZSBph*Lhp(u9R0H6u$FGeWX>Inwg0{_bF+L`Emifh=rUroJfS zE8`W>^r#_*=z&d-TJjjQY=%!BGXyiariDsQ4~isTb`MTUmxcaenS1Xq+M@sl3|XXJ zUKdeu>Wxv3H_~m(RM<80&FIuQ$OLQM=q<*x*0Ag4uxp)niARSy>9Rai5&H&uK-d}Q z{@^~uB+HC(Sx{v~IPwim0Y`S?7mLX=&EU#|sL4Bndk%JYU%Cb1E_-@itvmEtBc%Rr zrIBX;wJMNiznpJ%Q>SZ6G9oluBRrH+Bj01g5EvMqBMxL zANk^fUv!i~xoItT9-~WB@z(6ylZ0d|JtJGG(0VFBct?kC6)s}RNtmss4eU;`c}CcM z*KnJu==C+|*)1sM?HK&BYnu}%n<}LZCg1&vqMrqTig-nE?#(}@NjG>55SfaHDe0e2 zV9sab5JXhm88_3fI~27F|A(BRzK+6nsH?F>dU4gc>JDV$fAhxzpUVckGlQnua0fFX zCktSS$?ma9to?{_mkp}tWR;ffho)FO&g?QHQo16udPF=E#9&Xan&6&&Ax+D4Y9YCc z)I=soq=}IQXY0Y7-b`@EqmVEjDI?+^IPrgl&p)UF3t}aBJzGVRU;YxxOBQl_2HnZ? z4}mMnpW{mF&#^@Q99yivyVh5lzMj8^MV_%4JTVew?tq)Y&J%wqgdHTHOhpYPv;HD4 z%l~}5Yz%ANEB_zX&ICTnBKi9XXF%ZzN-*AW4H^{{JcEKJkdPTo02N)lQ3L@IP%`2P z!AX>HjLW*Z;(DRtu^y|dtctn{hHKUJT<-&PJ)Xxw4i7*S=l%Y=pJ$F_K;8Gx=R>BS z=jo%my1Kf$s=B(D2H-=TuQbX_MFik{6ZwsF#Lcm0&fO==8sl52vDm4JdBua^aR&-T z28g?F28hD}!aayTDfv_P!<`U{t}0>Q5^(0GtJH_!j+nF%HvY5jUl5WOcyNDc_x-6!CU%Q9y9N8o19=hK`T=`2*)%82v z>Y;o1?1MLCj`&ALg>oFabIzLN>`YHqe^9#~s)+uI^9K;vm+sGO>sp^b=t>QmoNwI3SdP83 z)%k;*<9W?5j%T0Lcz$sImdCTY-y8iFCMN%?F&z#2${GTnDC(c-_l6zSE@q{Ulw{tU z6u%)VNr1t$v5o$%2sgp7BCWI<(pUbR-TjIT{W@FdA8X@>hnt7~6pH@P`6+FML(ZT@ zh)5lst7jPA(d~z;GKip7m;A-gD>lxDzP?`POPt2@$X(lft{LMA|FmQLIoTPcq}ye< zuZx-ToyL~iVVgTHpk8*MkB0IWB|ovGnQ=v=cP~~UiWjT+i^Kfl{Zu@DDwk1y;4~f! zTda*AsSKA4Mq{x*+0hgv-CKg}?QHg9lU>)R`q_^mdu{Wf(Py*`PgW-1rg?i+RR#pf zm2EoP2!0SCOn=vr3i^BLvq67#KW2P%i3qdEK*7>+`L|Fb-q9iOrVGtuU$&Mfg})vK zf0N6(P1N1j)VC(V{kfpZ%-RgVydxQ>Q1mi++W|iJUz!FkE7LA=x4QV=YW>_nri*i* zRu{jdi+)Grr}j12=&r#PzO36e5T)c>`ENUoQh3)k&tN=Xc3(6yZc^~1TfGN^85qiH zbzP-tb>A(uI)_R#TQ&T{wx|7H(B3IQd*SHOrjuatFxy<;%uZfun|o$Kn@*O~$@={> zo67EAeM!*P>LnVxq}GotmJ^Dm{STjB2idhAhGg%%bG`N+-jzPK&g|_C^KAR}lL>m; zp%h|V|5SD-ygzA#%(wmD555tN0djrI`&atgbFIH^=9^?PYKS^lLgw<$|OW|r%fh0jl8 zzxAf;vv-TFA&b87_dKqyd79x2lNU=q*pT?jea_E1TmGQ^xbM|`A7;LD->Z9j=6B=^ z`~AS+d**m`wQwYh@|B1WD0P?rk(J=IG%%U)nEQL{nj^Hg#(m@|!SlV&FQ!QEnKjhX zd|6-jjbj)tSehHgy~>;bbqlD|Z68!@={YzbM}=RyXHcP8pEBppcw1wc+hA+#>u$IV z4mQ+XAUSA0e}wjwyy>5}Gxc@PRo{+5eSL%a?xQ}_^H*k5>kH{DuvSuht(>8$XzW?)rh6`U4MqLS$_H)#0fdvu9Ou zW%jcU7UFxo=^uU}e6LsFdo3F61>CYyaGoR!pWT7S$0rli!n2d$@u~NKFmO=*?LW}v z36ki>@FzX{GtW!nFDxk^J+dr&sB=FPe~SGWg196fj^yprv(3BJ$)f)xdgU!0TrOkJ zLf+}0HsLGD6dE{_rwh@y;iaf&6ibo`6D)MsmU7a|ukmWRI%&JR^KWPRk9M)AYc$>IzCkf%e!PMo=nGw}z#O zwrZQr<%WR?tnptI;*>>a?sto9m)Oz&?7z{qZv&mCST{L#&$DW?*h8fY>0eHXH_&wO z-Do|ej4klf8}*WZAbW}i1=WYql{NcV2vjG7VT8VCRrBBy?bwQ$b}E4O2K{!Zc_J$R zoP%RmP7#7?HWy*2)A1XORwh0O4QzmVdkx$}MtvjRa{?hR>S7Th6_^qytQq!AM zm%GWx{=)b;VZ7pYgYhZpMx^T_9>-k*X7>jE8lwHpuszv(Yp}`OnHUz-9{}?>D@0sQ zZ>b(zV1h0+a&xxuD_1a2c);|=r%yaYGN52b<>d^p=;pO&+dYMbN{=67Ig+{3yi+^9P z+j@ZRqg-+t>m=Rrp&}Ih8K>9P)Ih3z{l)yngYFBSE90FOjGjDcYQN>ok)a);>*~8K za++S|3&D9UAnO|qPs@+YtcpKA8(Oc5KWMfM%>#G&0@tPAUt`#7DBe(}2ILzz1pzs_ z5z$Yo7_UbmwjQ&dRXR_0I&^ZxOwpn3Xl!hkMUk^SJ@W6wX|)pvWkTF zWA_|IU;2!qo!Sorl-Ah(afv(xxjlz&z6 zXR^n&N_EXJbuG=r@FhVHBI-eZ>f(N2T8ut#kmxiO@k-`}@_v&e^;xK`Poq};$wKYW zp`cdm!(Gg}ny%zE=+{)T$M{KTm@~#FMuZZ}mu z=c8K7V>o`5Kj-SZGRF1A-jTrSMzS&vYJelP3@m%ytNvO*@odlNN$CUTTdB#9u?Y=H=+=H*McHgx;2nQwM^A@w*aFMQF z;HXey?Yo7(u!JReHeX~3o~z$1yDw*>AU7wNYjuv z4P~*&-EyQ~3IpSB`~?iupW$_F{zE4@a>{!4kg^fHWS!gk7&Q@{ zHkmm2e*&@pFMzl^Ri_NrFKJnbr=9OI4c2xpe(Y`x8Rxt0xrw~0bbATAvYmvQ{a>Cn zrO?vNSO#O@vCKYJY=bh;EVo)OcxO1%aDGi;Q;5$MVwWNF*$9L1jK1!7H(BR9F2T}z z4Yn>;Rcuf!-?3MAWoTRN{ z)#s}xD`fC{x*FbCN#@_OH~I&Du~xg9-W#>r$TS`PEi@SHes181T$aRmZHpP1`7M%X z`e#^jg)nd|R%e~@u;Ge-f&V9Ow>I3ldPK;)pWhxzr&m}?Hs}q^Qorslg$7kAS^5A3 zt1bD!E)l8&dA+KHgId%Wr`?vBOrNmL9*d;b=fUi`4%C$Op9od7wbi2U1qEX|G(rqdZKpRKX+U)5dTyQ(BvG#a4V zbPR)K{4x$-4B=y_d48r2ihc}#Pa52fwXtt-Epfp~hHHsBRlzH9))Mg(F<{9Y!}Stk z`F0{4P(qy!1vHdzZ-a2ejov99zm;76aL1xzRI#}D6p9OoJg@)jvDciMMb4nt(Uyr( zQNPaBsL=*~Q;mu;)u@q#p6K`vUNFy>@Xq(XJdh3;7%pQ%z|h6~8~E%5!jpA4#^o?T zan_)(WTEpu*J`&gm}fUGjQfoBA!Y>Ksqs=%zW}1cM@#F|_FCoaLS-X2`zOvj?7cv+y zHnkA`{U~|9K)-m;x%2vUF?Z=SozCvk8!dm6=7G)`Y$_jU;2eQYSo7jP=gY68+kJn4 z5Su%e%@&o8DDC^)5Ou9`CK(?!8H=iK>6OAmj5ALcv@a|O@dnUI0k#gIJt?Y;|7h)tre__Joal`J|zIlttU zDZ0TOeGn~dZ|iZFcE{vE7=Qr03X<+8{PA8$m*__c?;gE0#+mc31oN^ZnOLZvXFJz= z!BT`pK+Rso5{D+bdLvcT2C`iCy!Q3(+9YqPc%5ix0-Q)I^K3uf4dk5<_CtE!-#(`h zc{r9XZyR26u{8KUD{-bLle^c%AGxmsfDG3@Gr+$=CDp!r#bjfkb30ya20-sMsoW*h znCR+Wt?CR?K!0ENj?-|KzuR`SjZklzq%D8N*#2m0xYVsy4O8?wXtJx{ryi2VRkNj2U2;yC8R4scyGz28D_r|wGg?=xdoMd}(G*!B9LXduYD&p?M zpH$9fKWCA0{*|03%3-1MSHyQT_L|)Q2)ol({3}-d2e`70o$6vn|1#}OuiWq3TTHx2 z8{hE(YLJcP!ixa06CkDwXT^8?HU1!zsDJD54){&*?v?}IO>bIwUx)zjNzDH&cnx|- zoFHIp<43DsmlE}tU;LjbSQo#jSYCho*2Ry~$8LK{b+YS_TV%6JCKc2#6ni&7D1J6+ zBbRl$X~Du(Y;zmi7RE8zx!gm5hU1W?p^-EcjxH_Me42QGQK+~*1?~NCxJ+oPkj~_f z#aR7SAFI8w5@MG<#N?` zt6$$aL479~Tt<)XT#q}(2DeWW;SS>$Fcl;rd0kfqdt>lk`f3V#gNJ2wQ+W&m3RLDro&SvkF?j%~ZjTDyUVmHhxiI<@%*+ zAe`*vT=%_sH@)C~^!d_jbLeN{w}_hM6!1mO#T>OZqNX(WCK@oFkMgqKPdix2Tw#<9 zeYN8*)bY0x9e*PnVh;?FcZGiFOMChgEhy&lu?4jE(>K|o?TDbgGfaC+ z6(6Z^X!C%tDUT#n8*@2yF)(sc=qYq*`Zpuof7!GeOgLEjW)Z71jMb+A{}!iFVYg}F zFSNj!2h$(JCf5C%CJXq8yvD6Nb+J|IVADnBwA4jadr}MPT$Qm z5rgQKweL(N%(hU*F2_Cn!!=2J#FmELY=0I zwulY;jKRCce33iR8F)Bw>`s}s^)tB>`6^y`2yM8_k!sS+!rI%6zo|U)rh%Dh4A2I5 z-0mEWlSh(uc-Ti^#*Z!I7T0?882-D8y%9@90gehVWV~yM|(C7I@FvyoY&@+C)3=KAY(5-EI@Ty&ILts%Ey{ z*lPAR)kJLGT5r6~3w54U5{iAI#Wwb8*hU@P|LV1hd04|ayKPI&ybui+hGRoCONNvI zR9`~!6?l8w+A6%AZK8*_olT7Oy4XZ}Pocsnu#>le`9h-3V<8uq*-cAnIff-8)sj=# zL2bjZqb>bRYYS`z+k55|W3=U5Z=QW~rgw`?4EL_LiJiTeP3-11*u;6>G@BUYA$AqZx>bh^alM?VbQYnUt2ZK)nJrh6!_Z2&O|Hry zSF~la$+DMT%xn>N_I9x8KP$bB($SU!y>>RSm-hoJD{ms+S|zgDPM9}Ci!&D2clAo( z#D*19zih>(y(jd3W{VUD-hE0(TMqVaw~2D^M*H;veT~_d)4T@z@;be&x9NwJ9%s`! z1?HV*Gk5h)urIIC%NqN#+B?c55)Iy=N&vb)qxu_=_O#i?c{?aEv*i($-NwGG^xE0P zc<%?+dA`Q<^=q4cLg`OzTHYYuTS`Y;j`Uu(iRoU85?RQ4PH*gtzSOjTw_eO_`I{=Z z!KVMN^emgcQ|ZfX`YxsIwM9di&CK{^%y{=YzG}L2V=J%YHD&ykY3d2}Pf^Cqz9Y#6 zB(~{2Ow(n&l1Rl7CCyS|4#KFmw{1PBwmK*sZ5inOC=F?}I+H#2j zXtm_CXv^i^r$$iAowT4G?^w)2KD?!X`njhzSG(4>Ey|ADE8rH$JT_9RGda5I)9#;aNQrZ(=LM zb^->~$@Gy;7y>=M#HiHF4OY}W$`hl_hE+r4!+MrrO-v-?{)y52ElZrvUj?R$wscP% z$KPTCQwc2Fw?j?-0lfcx;$Z%ENbJwwg2dkZJs`0Me|sf%=I<_vBIk)Ag|iGh+`$y$ zpixUvIJO&tb6+c$y3=1XyM8HEi_@l(@)xXJo_Efgq}lHyk5<5>+2llU+_L)tWD1V| z{d*x0>LK1 zX4V$yV5{({upp-!cSiu8eKebqY95_!(7qtTCyVMAnLZ?o&Lbg(!@;Ai8c@oE-}~=& z=UuD)K*oN5=Bkikm_LS}rLX!&EMsX&@fSXx9|9f6uadckjV)riPWKJ{VRN!N{x`kE z_Ju>?E0mILWfpIU-b-ZQ+R~&64g8{EMpq~@uoeKbwOp)s%c@OaU>Uy})Cyyx$iPqV zEsUYxj~ZNEBBMRm`(6QIlF)Xx%)|xWICa-Bz+?vo-sFD!JpDJBhzuNVkC~6qz?;=8 z6B?Mq<;kKmpJU&c&tXk~DAT8~VvH#oSsDeE(SPSxVTXDY*oa=64_j#$8OkN#wP;^A z@=|~=S9h_==$B0go#4Fkp~4Y&snvt1j#G_wxTigzTvfWQ4kw>n8{5;Xr$P{>nmh?G zvRS>xgX}lM^$q(GkHNv_m82=FsxNkDY|>`^oYIS>+g4_ob{eQ805sIxSo)nxIMvJI zWszZ9g4Jm<>?aNHi5JRkWfhpt0y(HRQs7-owdCMU9t|s^u|bUtn(B+}N^ALz5YHAf zQ_vfIo&|vVJc@F1<+!+uUhqLZum|Wbprky-M)JlxP}Kn%T6<7QXreOZ12jlNH)>4T zF|>dz`p2zH%Ol&#^R>*=SPQ}Slq%PEsg!Ck7u6+;&VE)CWrMr#UR)$Pv9y4zM`aRK zw)9nY1Id)Wdeq)L+JA4w*rIvOVP-S24iwgCxYOfQe8^5Hae5q!T-M&xTK`){^Y0tC zFq#(42E9%b2l5m*S?D+BSJNv3j_`~2>5A2w^@QsI19V>fdm3;Ji#QI;mYueT_eRw? zbFrp-hVmn26;oaA30E5n+9Q847PPPL3@m8dz(W#cSjFDB4SQGJ7@i1bGVmcit$-z& z+XJuC)9Z#oCHlcC6U2ohG+%4%u6Wu)RN~%q6lzfJ5@Y&No%Gf@sM>rnu>yOTEU>*R z7$2i_u^l_3)T($7I|J>gCK3?i#sIQCQcpH@qjoIwo9(p1RyI~lUN<|pTX z+;IGkar#-7icdjk1~aLjHO}|a^&L2wS#4eUD`TiCNWVr6;aI02z5#9@d!s!;#=m+B zwP_kG1iO`SKRm^df^ggqPthsdJfqlsXuZmxX{=Qyr-Bd!wKYKmaOaRPB^a*2jW%QN&3V3&RUj z;rQveH*-D4(xBtCEBNzN~hZaA%r4G&fcYYy*`j8o`U|jpH@Arn=@RIyv z7b`NVKipLW9KPmvx)AEKdM*e1$U7fiTiZOZbR6R>FV_qB)rBedfK4&na-Ox2>DMk~ zgxoQ=rBrD8in`tY6U|x{sx)!{e7GVULk3LM7CAL>uJ~Ss+VBaUnIT^87qP5fr39#} zO6PwoqMdIZw3>OFuvf&GPqqfqDYL5^xB+JjT|dVF8j zy~S}8SZ57^bvBy7I$G|7t_&?Po{Gg3L#EK8)Ii;;)BMuGQ8;Y8OTc2$>^Rc5e%g(+ zh0m<`vVDsG|6RTK-8dvY!%E{JMqar|(*0kY4Ijt~d!hj0v zOS!(ddZ3G{pemNcGb!$h<1Ya(8cT+95#VfTD4nJdU&Sj87-l#pOvp8yCe%KQx~Wu* zO%x*tMi~f*5@ddTlGuv~ILf4#nsCeYG0ioSi^Mn@ACgAqJR(~0l~`w<+TkHWn6Uo+&XRTAUvNGPGR1v6hPn6!f znu#(J5lODIOa}IhSyQItW4CCQqDkia| z`X#oGQlx+l?>Y@Ds7^kG<3dkC&idC7?!S~d#CvgrDPoqI7i}kx4KWvDQa#Fd0h2jb zed+g{zuRqMpPhf^u+KS|Bcq=g`B!;;`4=CBfn=+UKPg!u`o+&xUB1xPvV0e$EJ#Ol zR%Z}lQVR_v^ZgqNCYFw>wuM-LW_~f_=j72dUuiH|lI|v2)XaH`XK_AFN3$<6-{+OC z_d|Y{D^zv@FK(68~{N{!i z0QNay&%Nla4n|ICe4O41eb|nN6O1b**F+a_UJ{1_?1^8v1=u3waU;l#Q4HV6o{u4_ z64D?PpIYd?)73Ya`8UpO087S7zgmg-t=5ZEVI=NlxT+Aw5knBhzjXJ{M;LEDbnGR; zd3=fyKf$|%d;td#YX5)c>LrjPv2SF}g{v-Zi5$A6Ih4vie_-|;E$xLCi}hrrJ7F8HHi><$uxR5#OgUy!(k(j9 z2E!U<#v8&febkP3E#nH6@o@)f>e4&8VN`#-J&33wZGXl~PS} zc~#-1%ul9_53-Si;wW5{nZr`dXB({FaFrhIYGV_MW5<+K#V&-6oC2mM z^j$WnoXk`;XaF(ee6HyB=_~%H2^vdET0V`j@Ca`p_tdr5v5P(LB=)ol*#DxQHlN6o z0`||-(;7V~VE>=>^ogE)-%sJry?eOz4}jfxxHi%&F`l617dnfJ`ZsSk73e`xxLz`; zXAOIFC+Pu?fy0ilpUd2rI{}}p3vOa0d)zPhW2%Lz^oX=#Dsi$I%CQY+kmwK%rZj^C zNhJ2l%#_XccC{JZdo(xzyHPEd0ac=(JAt+{O7c|<(|ua~0_F=di+s;ZFf2s7KNQi0 z3ck8!0rYnF{+f>wjiEc$uVz0odfTZkVGmueMWU6V(+kxN5746kn>VS<$Iz*}^!JQO z2|8m_3e{p+UVZOS9B0mCQ6-0^6UB)hi2?R2Gj%97(?mzV2{DU-K#@2uVUA)JNNr5{ zL4Nssl}A4fSeoVAsq9{&U(P(R~c2 zi7k9SK5=ZKd)R1B4zWMBw}NRp5_h6sV&4>0fd4xm{6WB!DDnX^m$6%0uV|FvGZsKu zru^2|B(AWv_~Wd}a$rxeGtoVZDPq30QCz600{8w}D0M)PDRHF9n~Fd3isHGQi-#W9 zG)z}~lrQD)nr5ee(a4Hc|L6~~p|bkzpfXeYF{=Gz=AQc=f26-R?ySbTF(Va%DDbxl z&QI9bLqlnhhO_ziKDNP>W-Qrz2i~AnGx1C8eS$VVjAP&>eoQ93U;WjG_Y)FQ!2R`D zU>gW*x#FYDK$AVApw7lfQ9P31K6T@7`?o7n{;LFx;lBGB1>ApV>V>Krl<;K|p>H^@ z6M^3ipU)B?@l#9uKq@Ad)x+##U=?3XG5)1n3{GWzjZUjPU7_7hmzxo8rhg9#r2?sJ zaQ}UbBx;WTXyt4iM4^ZnWJRX)Bv0R8Ov5mHrDE%yH zA@LjR?#H}1B+kp-nz1t#bT-EC@TDN*o7<$ zXuIJ4`Zq&De^<2FO- zx?106C{@={_c4<)ZZphKbfIrd7X9rWFqDttjE1$upgksa%bQ&nAG=Y4b=8?>rf`X^zCv}xN6la&C*JE% z%338v4DLakdFc0njBPU)i*Qo&{d9AQj9@oC_BTui&$F}n$8J9-eN%z5_$v^q=Ud(?GVo+Q&Ev_p=C#I$;^*sBfm?VW!*>n% zaMvJN@G`NZzBJD_h)zQ?>ux)bR^scOIM*o5!TB<~IOrDG#L@aQm_NpIu^g&O@kjsu zRhG03?yw8RkInt7X@1;QG$?+YuY^J6m)n}v-FO zuB)Z_?rIV28dz{Rx|q;?|5p5Uu#68THQu8kwBhvX&j^U0Xjqp){L3KzLrbYz>k09J zE&bz2$6%W3mgS&-OA^_9J=yyxy^dyurW3Ch1bf;N?qwYRHu2NV2mD;S@*&NC{rh^) zg| z>$648HL5R8z_h;und%FxzK@tc?z{X+gO){qpKX=`FHL_{)DqBNxer(#75TAPzm0c> zX>w2ued0Z$s_3!~qCY$*ae0k%bx8A}pU0iNrxCF7lEYCQpH^BhOEkHxLn*KF*no4h zNpsOI3%b(#FU3iU-5DRsm10|TcE6ryRN>1g9thTMZeL1b5$=hlx zZ?Er~ml$XQtF{8NWOcW^r`b$ywRp|VY?cEc-~S*R$okNu`RiZEuP;bL`9pqWpl-=1 zAlz?{y!yk|4?d(rghTf!)ST4-(3)|eCbsC&{KkJp7A2gFj;e4*{{1rY2hI5Lf#4s} zWIO!A4Vj)noY`+N`?x)S${x@9x#{s7M_Po@cTnc}CgQP`frylRP{+_AB&PS{zO}4_ zxoogP2hbHi0A#;HQ04@CbO<8`73j=(X zfKl!sd_a(o(ED<=Dw#}xH&J{nKd3Eony1K~5&^VsO9bd^MS$h1J+mPDeZ5j>IPJ6k z@t!0B?h%nBpfZvKMg{dcjhcfzt)vX$+T`>aLa@kF6*fBF4pJR7nD^IO4}+#RB2HpT z2nQ4#|6T|+y-`29;qtD@u94FOh$+hJ*eiYo^m4vmfnO0Nx`&c4hGM;1wMEuz{jA73 zdB6a#=oCsWr#leGY@m`w)oEPFHwjfD7b9C5dRfIf6G)WudNTy`xn8nP`Mxk&6l1?x zHyI;N*0GQNH8it^_?cUynKL;>E1FTmMx4|((1;0Xs)@PX@(LMk6g9#&qgBywy_wr? z;Uls);>h~8d5tk@H+Hm&p~`CTt@patY2|nC`zE*$PG5fXrtw7=+muzt4~%Z^6*;jI zZ@S9(us;2l$6j;>aTa`eW$gE5m9b%c*clO(l@Q_8w2r=u)ALubT^a+Ji)}nf#gjDw zXNjw*Gx3+Q2yrlkc(SzZ)9%;~Ym)&nNxk}->B_aG|1rNelzymRSqw3CTIvot)r+tk zt|e-v?1pQlG%k@wIwa!6HiwIcHIpKRoOhXxF)>^{W)6+yml_%6CH-Bn)ASX{ z&FmPjV8{4-#u-^7Su|7w9-G!z$Okpg`jAnnFXh(VY!+*`h;0{J3SZC_+$Mur$M+#m z{PE#HjY*)(YTmhfbwEgvitB%v`cJeKBqLUsxkJyu_Ztl24U}=%Ki>-W zrh~m5DaLY=EGi_S-j1WU1`|nP%TV~|==BLJpqQjH7i*cx+D#0+_fkasJy?#6=S+j1 z9$U;JB?3ljxc-)S|Bf=9cd`PmdoMkaZ}Phm6**`DS3# zLw3Ks!dN!XVBMy?X?m@Lr^XbiL*-Ch>yA9_H^p7L?ZP*}9X`U|2g)Z>0}} zRvqun0HUcrpq@F!W1wSv;1%D1GVdX>xqBdYDOXCr65{+bQ`miEqNXzEpIJK7)Et}R zQ*#3eQL~1i%srd>P|$7LtNs)%{@;F0K&0XBlEKJ@3;Cl463|75(p=}Q&oug{qiN6F zw_r|p`oq7IX^!FVLBfvq1_XZ_|F%E1pRFcN=TEkN2YDk)AF-c7`j2US1VZD-?zXQ< z#4s_`tOw;XFd|N%G0LTnI8N`4BGPG;SG`$114tdzu@3-*IWl7J03(3%mZA~^CxV4EJnRxA|G4ZA!Zu)1?9h`ng{WKoo$Jr^-CSm8WWwrj@pMn|qGyo>LnM^{- zgKSJhuhGMyq8*s{nH!kQc>2)O$V~ZF+K0CKt!MxJ8}(ax)EUrIrhaREra&T@x35Og zimr>%r2m*KggiQ?`EVRZ#1(oEVQGDYyo-i=6mN+AXK) z-=b&e)7NmFT+>#=B^M-HA=jsx2Cg+CF6ST*bFRj@H!t*b{-|rg>l?Wqa#rZ8dxFd1dZmWaK z=x>ua#}-wCCOWW>xDswMhQVa12GbQqh9@Td7QpUeShfaOeaZd#kzG{(qoBGu^m@Y& z-JI(eb@+BbSLgbL1~)GMa9OY)Y|-Y&G7oWN59%s{z&C^>VzOZ+3E3 z&J$KM8IC5$5F??PJ0Z<|6Hl4@CMuh277RFkS`QpGlkSmaKPMY8o316~O=Uy!lt^!p zTA};jdPEiW4ZWNv@Z{WXTK5I{`5p3{yB9fEE-}$@lZ>2G&%2t*zE+Oad+?nnO=Vf7pFm_owq4@~#wNUU@FHcK|-;Diez59c%0C za3L&i2FsaIP=0&?Pd)S`_V<*Y+VkXW<403zqoUkT3dP*o$W7Qr#h8!B3ZA%xe0r$X z!`bfM1KLLBqLGake zkL1ta_+#`#S@wf0{lFNMF5<6&4=tELaFGpRaEt`0r4N%6n4YNze_rb zYPwXV1Xq`aLtMucfzwZ{AE~Ukij1Gm= z(_~TfT6O8n42NJzCDnz22E>e}dwS2*3ev;8K`=de1GBwWOPmIr7a?BMHsf@}0E^#f z10ttcsUfzsX^R}7(y#`pPC8dw)k)Sx@#&f($0bhR!p6y#u*wqMF0V>Qx>ql^tT9_# zlCIFW$*u%SY|unV_1$FcHYvxZS8lRPteb2)oM#I7eZOa_JkjyIN8yXlt4{OB_*Er~ z{uyVEH7%@lsy8}~S0a&AF71q=%ik+&ADr4NYvZiVu{M*cMwi-_`|m3JcflsvMj?Cj zpU`b=X|N4+n!ei#!U^KfSK-I*lHKc%wmaki>4yk^>ALPGx2G!ub8Ul%Tw_;>?%!?J z*^q5p?}K4J$)Y{T)Ow}ZmA$43PxYI|^U0;T#xsDmetc^Cd*+t5zrym!K;I_(kJH9j zXqE9}WN^a9C?ZU($Ipc~0%fPug=8cV}snc1E`9)Tr8UYS^m!C{U2 z=3w7`fx&GtS6K%33*RN~GmvAr@COE!=xkTGeL;?Sw@e>RqYr8XaNB0Y`LQ-4FAI-SvDe;)TuooX@4mn%j{K``*WbIqxi z9VQ2-S`O`NgnJpp+HANLqbtYj3lbAE7rm5@#Lz~^S*H8$>D#l(eF0pXeZxUvwIqMMFmu-35-R>sJ|L*Wbs&jy28i_-uGxP z)8}tkK>fovezCAUe}mr4oWJSQLi?P*8S6|Y>$jE8436KV;cL84wb?6TWj*If2TK&R zj&)Icb{)!^#c!p5eJu6Q;V~Su*T=#DwSUk*F+=%NX=PK|a7EJL<{DH3sJ}tc6pCsl z&ob}LNg+Kp*lZ?H*SUibhzW+sTT!w_pN2x`)9Cw7lrQEJEaH+3g zC3W_wDW6IcV_MlWrH2!6{#_)TCbru1xb7nH$HiVna*mvvzjR+(BxLMTY7s0}Rq(Ad zLpZ&Y`hi`W&@E5^eh6u(AM3vrs1sv;Jz&P`dV_nA0c^Kca3yxhoNn~%&H0r> zaA5h?hM?v*!}`ecxnK>D>@*&^ou;xq{Weg_FRrcUPLJru4o;)uCqy?M?KFPHq8Hs* z;WYJ-V48at#%noP60gK|g{0yX<|}A;Axg5;Ma~4(*x1QwT1bQ6I@8HC)_L3aMu%dV zp6LF;n5M0erGHA#<(JncEdfLSL;=d!|nw) zqh!(8nG%ja6t5Bh;r^>4MJYHJJe`Jf@Y1T@dB5|o7f@CX4vJKm^`g)IOJXff%}35) zH{;spjtYn(%*v-WwmSB{Y;c9{gi;sL+$mQ`DHWe zEm$x@O%=i2n>+rkMoScq9%hwcgzVUuQ*ftjvrZfCroKJkZtMldY4Mq&UBShYTXrtf zH7_>5A}``pfMMj&D-rk*hlI!gVSLbOfUow}fGkeu?LuCWwkxQp=_!6=Hex&{6&9-o z@VZ=I8DOzd)6w{?W`NhXv==}lou)ELXZQ`UNnojT+cEH*E+`>R**2U%)WktMx=b>j<2`U^@ALB9KymJq9H!&oLE}`ZTY?|YPHVW2p@pk;3 zq9}8v&XdP<9LvQZq8sOlV>-{ewp8mEYjERL-Iyk|P@azK@h)}@D`Kq#^RCVlHruRY z9Op?}cx>#LZo$Bi8KgX92y0ej>B~H(F>>k_F%mgAg^fQSloK04EnH}!knxh=elw5W z=IO2S=%!~tX6_O5gXIhJ>-%jTzEiyURP&o*n~Z-(+qEv}wbOLw7GZOmPF8~fHJy|j zKJT*s1*-R85LZbte1Gm>d5$jc5Z&0>Y5W7tutWRRQlc-6-9tdCwm1vNZ<+&^#)h0pFN}4jEUc1z zZsh8*mCMYT_|63USI_v@K)6D4rIT5Pa8b}A^!0z&B>R2sBT-O^J!{2OsbHo$h3&MJ zo~^--Ze%Lg(LWXkv*He~1#cvR{~hE2M$ZTN>bvG`o zj?Y^rVyTSZx=iyo)NE@K#mu1@WSZ^HWHsV(u6;asp3da4pi30eup61FFTbX+Da7Xz zeHJyCeoiq}%T4>Uz66r&|6%O?N~h*O9Mbww@&Kc5*+VE+N$??-GN(r++b;-ACC555 zd}M&522}+(3#nRi+{Y@b+2a0nB`b8smiXp%4D@H;ph*4Iv)mus=Q(7u)v=w9aU#HZ z?lF#VG%G#6w_{}g^Y)=cE zri-XS8ykG3lkT7oh|l~lMqm3EttM#_cUlK(Ds!n{?mr1hq6RtYX!Zn#^hJz~6@Q_D<7}0Eseg4$qbG zJ8spFkB&;a&8UpsVVEVXYozdD2xJ!d^iXWB%C!S(>8atvP06bM-&V!eI)hrOoSJV% zTms8%??drxt>12pJrU(Abat^yyG_wS1=;Z54yRVzG}Q$ZSZy$Ow1B4nt88sKKr*cle?LL_NQults`5Ts=J<&o~obR_Pyi$JDC!T;Y3_Z3Vb9i;D&N=1u3CNM&Uf~^uujmR0d?=eQ_HB5uM(ka$2pae zu=Kq|uY7#DwIhCjKddsxW^%J;%S(QC2LWATv=LhOgnMEoczl?#61;b4U?p&hnPL~v zz9h!s{3Z?)kRgCf>|+{F9J}>KKDx`GK;UVLx*wgVBYXBi_X))95nJ^C*xb!^QhQ0M z%LY^`f)zb;UL@rfu1h`zG+^peIZctwa0Zb9q^m7I<4CaHJn(~|reAlS81(D#9q5{FJ`qSC@<;il z1AFIQ-+!@t5A=nCGvR;x(mnP?q`8|_EUG`!<=NdbDz-m1v76Nr~nMf7-y-!bU5#d5CjHvqmv@EBQQaTy0-<8Isee_>`fz zxe)1ceU}%hzO!T0T^dU4QmTv2Sun6KaM8Jk)*>&lUkbk|f^ZriHkAcL(MR=3g_Fu^ z4nLXJAqB|?t`vV9d!C?~z+FR$)6G}xcjNNvPxRsX?0kqT6cjUZ^P*utBz0cgj+q2_ zf5y)xl`MLU62eHin)n1bUJ14SDINn(dvSwSUHc#b7fe-5OP+sAl zga-}3KvHPJoF;qEpJ)KHkDT_?AvE{Ed6+eKFxqfj-~LDz0eCV1>RtS@GFOAAch$Ue z--C^1!dn}kQQQW=TbvvK-iyvya1G^l0&@y)dmn27ctyFun|-(Gg*!{ziDLH@nipId z$4)=SEG_Wv?FLS*ensaYIU#`w;YWAavH%Ub%^}(Q5wd5FjvW4O@v9h36_%-J))ED7vXr{S5xHS(k6bf^)`N^xUzpLb3PU%^gKwNG~BKP8r^f1jdp>WjIz-5MI_*Kqw!~DMB+=-LVKDfYnvZBMGXH6uu*7EwYx_Bo>H)ylE z-@n}TJ!y94V)Z9u<*LN*!8Z!(OI}T4{?KP#O_pG*OK2mk%HO*6Th<-32h&gL(V=ON~1p@R_hy`El|D|!{n{Sm2H5P zwj@uMu&=U)-dJ^kK+=X;Etz1n?q~CaNLx-f!4S|!){fq7? z__2+PM2nqt&SW9)r5%2XU;Xnt>c9>{ajig#gX+xuRG-xIjNy{DX(8{;{Wi>0IBjPgL7YbUhtxHXEyNMz?|r-Jy!FJ=wOT{|+cm@g zgOg_Xf0$L!M;vrm7e7pmI!%wzIqxd|=nCyw27FX!{5oYg{Ua-zvov$`qDK(Mc@2HucZ~E@)LziD@yYd zU6)pr=O;QWtr(dvz=b3ME}V#p?ze?YjJGT4%2_pKyw+_49IW5Rd9tw-HCf(R9`;ur zw5Q5*AoMm&H|um}qWi-U$)thnn4@iI;O0*2lGTm4X-wdX`3z#HKhP(H`w!6B<3`$m zHUfHhlUp~S3v&Q}v84xbLWjUT)WT_j*3&!Ldm(tW0j)<-lUv_~_4G(|3K#bV-wa5m zZp&BN@wTrC0c4Z_hn}IFh6R1LjqkuC(OT$p?;7UQunFY3&mri9c9YGfrQmV0X$?wrHYK+>m;aHUIE9*^_r&q0Mn81Vn>DQVI&7~t z$5L71Nb|r}W%-!2Kdbz4&enNnwA5d^iYH~xJGx3y!)u8wU-$J~3VCv6;Sy}pz|@8KAC z)BMb-i=L@q;2q%!9K*G7zc(z&t3Z&cSsy)>-1(8C;^t=8^p&n54S@bNgrfhtToZM; zbn&boD`IcQUT{z0JRB<2p7sz74Hd^$&wNFds=qIDo&j};;fT`Jz!5u3IiE*5)C^x0 zt1R{(I8xGRq5#x3->sFxzr~daUlQ_F}Dk zso16^;aG>#;5OLC$4#YT*4S^q$|%_Hjk?%I_rMDXGslD|QE)L<&&>r+=x0QZ!nTN$sJ!kdLk zl7&mf3Wu?R*|o;m=UT&B!5J8~+GLcqHTAO^jYUZ52{r`7n#JPK#(jhM1pa#Q zcn6<9DBgkP58>$1@P`68BO?ue5V@t7|77pEXERRVQ4Xg3utLg)1>JMtFZ zI^5mXW_;=|v3RX@n&wlbX8enTt!ijQL;1zd6Hy6(kzq0@?FgaN#&dPqY5FrbO?7+D z_PM(4Js`Z>3ON@9KgeCxy@Eq)iU^}FXH@}lnY*s3QVb!waDH^-F3#1XK?>eE?Fx02 zBYGlFbc&0L-#nLA_^Hl{&TYBSP^BgswUp z*6>cUXwI49*c%lWbmn_B6^ec3jrsMsKbh@pF5Ej!m0Khtr)ejMAcck@+vUXQ0p#%+ zSuOpLv;u8Fv*JImFBo-rm#nq6jvm#c^f1>{*rOUb&Q^k$RBdEA z-k=7TEH}j|yS22zW;`7}+vCI%{?tjLsy3@nx$pKkoCP&mw3ap>&995C3C9l5q_2yO zEtGILocx?`pEX1>+iO&ZCR%fenDP5m#)kGWTwwzPt9>+F8-0xYjYomnU7(V2loE-M zoLI%jDafhy`I?{()Dofdui|aL8%&hLGi-}y})RcU!BHV${+QH4z2U1FhPnm6@@ zcBzVuE0O%^JW)$!q2915h7^1af%<&adi)`4B+=c}4nP`h(65~KAEVgGMS78nEzLgb zk?+sGS81;;TlPwT!m^FaoF+YB0%7T2;qJZ%G~2W=a;ywt!zFQRAsuPS7?aa*_u&(N zLK7j;5|N|KZUCV)4T>JjGP+XbjFWss`y{&UD?6 z?-R(woJRv(vkdrwex5y*p+XW`?S8r#WkBmiu;o`GI)c6^7owfUJ!sHpQL#nQMLG@U zTrDV4C&HrNsKd?27WZ2py{xzkkq_26Pi%BwaPjZbuIJBUSO{p6tc55Uf>iChZFjI5;6J9pSK+h$DHH=z4a%nBIO9hk1H_}kJg*QFuOtA zq$K#DK4ly;hHv!=8a^3U7_2fQ6ev}$)F_QB8aK9Q;aGPw@61HjyWdgvQAJrEzV+;W}=i`Te^~G;Z*!k7ut2wG|7d&rVrWv zdF?Q$Y_%UtFySPQS91@3Wg#mCvYaqQh;gyP{m0?;Qm^Hox(xIMpuB(AHuktPUHL5nl<@SyC!!Ssd>xMuy-$j zwSMKj^`rbBl#$#QTa|!BcX4x82gA~d`AH6~_zj>>2hj}T?RMX1=#8aP)rsVXyCp|6 zdzN)#0n78oZ%X=?KV8hD8``uwnc#@oz==C^@MVX5uvcQY(o^(#AAQaYMO(}ZXB)3Y zRXxX_L>*B>!yXO|%ujPw?{N35qxd*a#b>vJs$kveZzq1B-SC(0Z6E!Z^rW13Cz8iK zmp_RMbV>z%?PbM;8a*df-DCfy?_-EAYUy(ZfQQ|AfP$^JHbe|&pT zt?U7YHT!J2w;+hEfNBce@bk1V(7lYx-HU=2fHI#vv$N|P8q}w)O??+?NEW@1jY~R! zyEd#&x`$DIOZ)BUs&Un^mqW3aVsDvCYJRSTl***gg&NA-K^ut66@B3+6uKRqt6lNi z=5G5C-Yazt_ssG!lOpFk#(imKdHp3*#^AwDzUs!$oW?g<*tckBW%(J5yL8&!q(d|1 z^1Oqfz0iWQ&YoI-;aQ{WL;X>XP7W$O56+UiLSL)g7f;XFS1~Ufd)HqicK^M0NM<&% z7q)Bc4Z!u3_D0_Aq!ye%`J9NaE}l3>>SCv9vv!)nX(4Pn$cm}sLMtc}j$f^9P}WU7 z8`;>Kdk#R|F7h~S>}*7dQmr0^ez2TfaQgC^sUfsr{G|FZ7mht^bcnW}AToUPn=zp- zFV>F@EtquH`D3O|@xN5?Wi4NT>Rg~Qh`nQrc<`j4G~X{sT!w;O-N z`4KdNo1P%^)JZc-bKtUpA%p77QL{zYl4e+>tv4IvzOSGatVFYrht(CL_4_& zX-fk|#Fg|wO~>~}gwSRdbW^=KKsOZQ!!4RIfENIGU2O6eU?wnC;N*n1q=F}U(CD&0 zdidyX8A~~vx-Fg)N8-yVl5PA@Gsiy`l$LSD8qzYZf{{t8eTa2Iv>|;Ov=dv+y-DTE z2YRF}_Fa+{2jP7l6 z1TUTz=TjJwghPn;?Grtak2GTwJxRz^!9}DP(A)AJKJCgUwftBkV$V+g!##S~&J>a? zGUOsHT3^>slPJF9M|?ZqJ$2)131&vv`l8mDB&t9yV%(sV77t(MLcS4p3U`mcX(1w_Qe zvni13@AxF!UWprG>prgV3#zJ$KclLQqff@>u4F6P>36P5Z|?8{99-h7A$X|Hi7=4}^)-t!}E?T%fKcTRZ(u z)v@WtDAsmCogxy*U|MO6zoeaU{GpdrouC%L?op57T3J=v85d~&s{JWSO;PG%ER(PF zMK|s5-+25(z4fTfFjS&=s-Q`#R0)dpl`g8BMocSs$zXtYhvdsUe+{=UIyD>c&R=6d z_jjE1#uU`Mky3+{tB2$Cj$_*#M8o=iN$0P8)@2P8 zW>)C^8qd5pGtZUFZem}tKtqfN{~co8*&Xw(&4TyWNdHFZQOTk&IG?Ht{ze6v?5QFz z(?2QgPj%H>)}QL|w3mkOPqpeRE$^+oG&X!eIMd6B0^F4~*>{=pFHA_i@D76H!q)u! z<#b?e&w~naRaVsAtx!k~ary$FbZ`9z^zELPj)ycH52c0~`?Qm;b}G6Z8-RbJ!bR+w z?vuP-xZiqj0w+cnS13BuF_qB)rCsX3kh=2w)zI1!#>eU|f z$}|PyBCO=NV9J$h2M|fG@Q@1bqe%9?YKRd>GTz}bW-RSLU4a%g+5+!b;f|tzi7NMn zbsC~&iGKVMkXh%E1o3v^=81~z^ribV0j2O3PRAR^UcM7;2}_@T36?IRu5{s7!?6`Cxy>^Q z+$Vbry~_-Gxv1^vF7>V;%KJUo{nEs$kFmW1*Dye zKd_0VbXCk{DP6@^~pFL6}oTkO&@R6hu?i|_>)2D!+0Sj=vhSf`|u z{%eX6u+`LS<(1)WKbd`J|{n;EPo*GR~kdF*SKdENu2)NpWl9b+aqX_T9QTm zNQjRuSoWi~8t%GJnek1l_|w22|2$*{eOv!i#rx5X+CG(k;hxexMdjeR@}Htr9Dkk0 zzG$&@Fi4gR258&5X5uaIHSG@B^hZ90F*sUQ(U{@hxw)$q&8Nu0^T}@wuejJ=x^0X) zol><#h8Y(-xJ9Em8Y8I+b`dyh>c;Ix-&vC@w-ti5{4&iquAGqCUJL{KV5++MQA&zs z6cDEzM?}L&REJ;>BMeHA+#=AC6kgg{pb<=mnC*nDCf@Zzj^z(uxD_0h6}chv%AfOs zt_ojK?BP0LWau)vPtN5*l!#-HHCsy@m5>W$nl|mcj{xU4bpFUo+jbs-eOsMQ3S4Gy zTv!>O->8}BJn_2L$@Oe4eGYY)nXw}fjxxB-VK9|6w>exNZ7hp{AH!{QJraEQ0D|PB z+Zx2vHvl}u*!&mLhr0MA>CuK1YUrkrb4Yjq2XGHI#R}o(PT|nL;rP%BKAjYrH39*d z?E;k~)fse(zaK^u9FVPxPM$n2GK*ey+Z0^kp(E zu}8Q36I-}%QpeDd`aDHgpG$e!!WQaxdy9RI!fc*{+gKG7;!&Q%afFzS`H?|Jh*?%3 zuF~1P=_SOy18d_4wmIRmd8Nd?h_pF%c@cu$S5xI0x6?-oWzHOJ9;mn)4;j~2i*E=~ z6H1(|Sd_$uMQpMDo=x(q+qSCz=Bn66XV4PP!)+Gf&;{kh2cW?etCbntb|UaNbvR&t zKOdE|uZ*!395u(>2m`Hx37;d!*>N0~8&Ntzn;VId5Jt!FD3Cjfw2$07kF;F$1cV^9 zJj!^@l7JysRJ3BJPGPHqa-dy$))}fvO-v-OzP^+j7-{-HharwJ4qUkmjri~LhI+b8Y+LUq) zxm9g(tqrg)>8wQwNrpM0N$50=hnr~D&NZ1V!7DS1l3uw7-?fR|$RVYo(*kE7-$!VE zK78>X`6lxHuL1I-`kX)#&;x~g;5mlU@Jt)d%9t>=x{*c#(MFn{`1@!!TLtx8sraQk zb19bd=7F1gnQ3t3ZoxD-89MjTa0bzXzyeHYdmVIaI#y;2p~O3dq1JL!VCSXZ-=}!X zH2h2!J*Gd4FHw{Nhbi&G2EO}|nWz^UYurdmI-frMBif!Ra;oPkU!A(cMMiXn)>xA71h; zwY+ce*p`d^y?tUAX~)p_*tiTSV$<63_jd6=Y0d3#k2vUHgW=zt3uxeT>dXolAI`Xp zkOD5RYSuZWCzCqGtO%@RzISh#-+)A6v2+eITW=25%FryFI$_|mPRVBAD-ZQoN1Pz3 z?gg!Y;@vpNArsr956nGQOqNabQabs-dXYZt3=ik5a|dbVK?vgZ$L@!>D>6nvGB+-a zU)v)2DL%i&bafr~t<(@*ciQQGSi>|$7tgPoHWb~N+c?%|uxoC`x?iC%PYcJF% zY`vUYRU5L(UpRi!)bYkDZ*1?QjqUwYzIqSyXJ+}N$i#_GmpPMdj zUk+F>^%7g0<7|^B%0D48GO^c!$fWZoak6gG!w<}CXv(l3@JOgOP_ls|=%{(2hF;A<~TEhRN9{p?Z6*W?jXp1v|sGV&1Bgcm0w~Ld9 zm!&i}q3DmeSB&SS$fiVO)B6jvlD9fHk*>>WY$7{q7;U6RM2@OlY8q)5j$buLmB+3U z7f4azRqC&(P~35(Zp~`a`LS^9Wp8vREi#wmj>vhqcP;D)DUGEoNf+>6Y1e;md=0fZ zAXtP6J{Z!601T(;XV$-Tn3Pup0|(1qF|6pd*xOFcYtEpocy-#aXOGk^H^Y6JjbciZ zWGxxO&9^sDQ(g0<;&Ahj61`q%n>Bk!r%6WMaQts=(5mAom-u)vXno}~X!%P)m7)6@ zzBS#~M2IpRJA)+<>{;DcYCxSPU2OiVk>>|nXSa}vyu{I_0;#Y@!9ar{4zU7-LhSA} zBnIPJ(^m4JINur%x$s{}`?=`}ufBkm-uv$_&{ETpRO7w!ThMaid0RnCqdDo0!JWxt zM=)^fjt}M#snJKGJ-0fsZK%m`E^iL{3>2!~v;2Ar?V^WA>~HoESR=&Z$Me0ijwYJ~ zjN`e8L3`n-V7pr^2Jce;JBE%|XEJAp)Erhf>`2RT>s6Zj)%Ivx zl{tu3C=%Y_4!#M)La<7n^g6;}dX?06N&gzS*&%|aZ389U?I;jVqCZ5%l-_}%^~M_} zP9wF=(~85%SKWR0mris8_tnAcm{K+vFZx-&%N#yt94kMO^3P} zWwDtP4^Sv^p870mbARjxchRW`chlR3QJ5+0en*Jcejg;NO+Fhm#vP8NEi2dJ#Q!7j zUBIKNu7~do;gYey3DzhoYSf^_D_B$_AQ_mz8J#H93s|wzYSmU>#gGWz1CuDnagifk~-|sK&9e>HaUSr5s5dsd-+dL9cGKJZSa3F;-oGy$@@6UZ(=|16~m{5-Ya6c!j?BrQ4mS z?mchiD~mK=MS;AqjRE4CY;&SN!dKz61O)O=zRLzL@xMRBr~I>1%HYXKfJNJ9lT=ly zHamG8=6@&aHGZJ?wV6Fl`s0*t^1xXFVfdsMvL`I;(l10*~t*WB`kBxd$2T`~g&p_p(5v zz@9DJk<^Y#ysJf>QLdTzgKuBPzY+09O!- zrGeN>P5foJ49LCojvX0s%)z@(6x9#KIBdrA-9K!$RrrU^S2Q3eSfkYQb=1{j@*6KE zzbT@lp4vgbA^nLGyc)2u!C?{PGF8^q7-`*O?hCPH-jeY(p8{_f0oGUq22LM~6I5yU zqH=0-VO-m^lX%!LRjy^kK!v$827d*S*bava7>q}}XxFkE5&j%fZF6*PO)9%8^>FO-26Vq|&+@i}|={hpfSATiB~;ReRL=mo?7C#jM?K`=~q~{#URB z4F?HCWHH?M-$Y+xXrJ&ia|KLEW8@5&mNT4-2e+T*TrqgtY0iMbvCPY2C3=X8IVvVe ze`PN>oZ0ohYnYzhbI+{W4Kd0iiE_}H^V^>C+=#b_gPZgX zgWIH1>4Qcb*H{vhQfTL14M$`LH)c13OJBWxj|cL`%D<~lQ^>P?d^uhaKG~utH=sHU5l>fB>=Rtt5r>6arO-kVQ-Szm&#jF+dAv{;r=$)9^EsTxIBtr40K zXmMebx-z9!8W2u>lI)J<(i$a~iC<%N)Y%N<^~?lOvn~wwuGRc7m1>hucUYcS0%O$J z?DG8f&8~4LXr^I`=6n&x@!jiH@XnM~m&2YL>-ruYnx*FpNE^C5H0#gxciR08@veCf zJ6VHaL7`A%j_3RfN2*OUR8j!K8DI-_n%WE`fRe$8NhLYAS=&J-c|aL1$O)`mmc9}F zW8@QL%h%l356;RbhF%3;T{VYr){Rd|PqyE>-L!o$Hk!V7C$D$#`6R)=!!n)k#VabN?c+0Ei_>8?S7_DTc~ zR;V)#2kbCRW!_ZxzNM;Omx`d_7)}H4e7D&=6g;bTALI>hoO`u-ru>ci&yg2N<(Uf) z691Y_$Vbd;4udbMKZ1E@%2pjDJ~kQmS1-b4pAa4b}^}L_v3ZEINCgb)y8;wlz`blp8M_HDWkZELo zfj=h#EBBibB%=PD`SXj(03}~TwKNS{&X)IYaPM2Jf|0P(xfRH^hgyEKdsEtP&n8m7 zsQzqiW;-FcB3QLO&-$I?HxkIB+4qH)b5A|6gMTTbc!t;USj7g2e-|htOs{FKkfPO%sPnfI6%Sa zE_jaNp1UZ2xWb=KjGP-eM?6F&4kP1EzDAKfQ?`)TBp>AYfoJhxK{dQnxpVNuu^W2( z{7Y@}(rp5{i{I3lL^7lgT3o`Y8a`5-^RF9hkk*{FSz4AEco9#sKYf(Rl+~JgZUf3W zZ?yY|mvzbMAX9b%Mc_C1gTCWZC`86RbF=6>Hp_m_<;mR3G(r3?Uu3bCKFh=}pe2ES zPF^TJ)Z|WpJy}}tRM>XZES^d0!F-CxI% zDVxd{(rj|dtaV?yjLp&6C%Bd>tgj4v<#^pbCGNYw6RM^Z7E*Pzww7_fct)vVcKvlf z9ZdhZ_4oVV-rw)PoiAXr_FwTEL)0Fl8Mm4YZG1OC%wyb z<9?48bNK1Ehg7!=ubLOD*+9Njci4V{V6F8>Sf#~Q>FMxOXO&x}=XW$v8`|=H-=j$0 zcRhO0NCE-mpZ=s?JMPB$%whV%{Jv$q6~E6uYkb!E+4;bzZQQ+Q3Ix6!vQ?!)cVnff zY!)L6@{sf8i$*C1w>JdTP27vk+EDzK7H8Zmq}w98?d*S<_y@;gCixf976qDW_W|DP zn*R`lzG*HxY0>@Q#30doS4!=zw@#piQma|+1Pb^itNCs~@o$5S%@w!YDYnZ!VwrMZ zLw#dOv;qaBIBy%_vLT)pk7cy>mER{1$|1Hvw6hc$XtEP1E!lq5Ob z%W687Z&kajal0bJUu@*N)l5vY2xxl8M*vZYkrG{OFcm)U)Y@p2HB}p#PI3Z-)4L+E z>)Z7QCwA@KFx+aXuPEnR{SOkm_N$+m*!7);Bdc2~ydRr_MV};g9X_2)*hb#=xERle zK5d6~Wj0l}oaBv*%vN1jZ02GeFYI(V4#^-hY8#XjqRKX2$lf{CE#L9>t8O{b+q=5u z2(M3d%TTYRx@DkOT-|aqn%MzWJ0i|DTmctYqxq&zUp3CHntFe>nW^cE#IN<}=Qq3Y zwUU6n9Um6ZbXb<4Ua*jnUbeNY$V09eIh`-=T`!nj^HRauNzfn~XF;}*M4|LG3TWZ5 zJ|8VRYqRULfZ_+WcBG%=x1E8)1g?i99MBXEBI05mQ5a&;9hOZ;sDgp>PR!Zr-^q>E zHY=Y$7XKPA^2cS5;B3kAfvFHlF4y9TvgGrT{^Z}y7;mgw+t>pr^9R9^J|s2KB=uM2 z&3q|XTvIAlh4-E-?GUYJT0dUvMbx;RqLi5D1K{s z7g@9S-8jk3wMyHjV!L=+`Dv+rKB8Yb{!-+CQuu>@kk`;fgXnyamSo0Yj6jw^OVmHY z_2W^r3F{b*cx(*AXLkt0!Pfc|m1EBPcItr&y=jg)Z<8^jsFhD6;^J04T42>EQ%F5! zbQ+Tuv752q@XQ&5pn*b6ik)I_ioLkFL`DZYT<*%#v?vcmt}Eh)xXH;w-ssPV|8gl` zd0DyICt0DrtfA)dU!=R9J2!|qqAcr88SPW6y{R^DFG$Or_%rb<}a{@JjFb}zV9TIR1c zI2bZzuTZJutS>);JJY8fzPP2ZTYW<3l<7A`c?M>nW*p)-Juqz+q{O}Gk4@%_0 zaCyM~7`fqdejUp%IqF`v!7A?}zDTUW%Yq7p!y3x4j1YuEv&g$%ExBENsx+$WGv zlH+p4Fmu$MM|BogD7o0~h7} z$o(FB$uGG^N&wskKc(b!w_5g`gxqU4Culc6qZ{u?cc2s<#Bu-u9Ta~MuqI6s|c1|%2Q4m2NOaF!L@?9^2pgiiwlD>JbIF=$JZ`C+q z=?Wt9vJKT=?mM*X*YJa`omsjbD5;2;lOS-Z4EEs{b+G;Y!NM>UXFWTbMb(}D4S%v6 zVUzFd^_X$?awE=X5=)N0Ux>HhwlsQNy&|J4zR@d%jx+#|)fB zaR036R#BdoMwQ39afCS8EY8hbIOf_;u4ZTna5dY9GJ&5i_C+srUhKd#rdh5p)RTVC zmV0wer{(sWsxS8!J1GX3FWvV)QMSE4+&Bz^aX2Sou%N_2P9;rW;|&!RT$sxuTTNdJ zps+dh7Y-QasA9+(n;Un{Vm)W{+PKRIq4M?E_@n)kU((ZG|FlaWBfOmCf-)g#|5OP0 z&JUq`AV=z8mFH}?dz|j3le|(r?Suu-i!z<)PxAhT+O9D=mK=+bl34)Hu^Jc8^zM|FhDB0m(LSUwo{K18UhLS^v)+omIa0 z5*lll8+Fnqp@N&mG*}}6W-hQwy!!{kd=HJzzPMt1_3SGuCI}|Vn8fA`W)8EH)yk~f zh~y{ZNb{mip)Zo(*-J%otEs-1QU9`#NY3NbYX=|lZ0Hq^~9GlYPCa-|Yb)rAYelrKUg zTji7A`k5uDJ+2gTz|TjtxX1BB{tXSyQQt1f=*H(i%T#%CIm8#%XivE3&IA=QEI6yw zbhdQKmNe897W0IYm6Xct_q#`DZ#7+yJz6tn*70Tc&^q~NA~fSCv&enya#ATqshvG} z9w<0@vXEN%zp{`@?g6Bt|0sY|5ANoW(RX>;d;_HBKleX`RLMzMNPY5iA5s%YPo$8t z`LcUR^|>nxsaZb(QV0Co+IO1P>yNiuaHknnKf$D0x^nmJ|M{n+2|cV!$JA0iHc?*1 zPSoM2e}(lsIDOoquV|*UQVo-WgutWX$CXu$%Zh6h~AHCh*22bfWsLBs# zS#XS5B9joNRM2f6f8<}I31^YzlcU^ydT17)5B!%8&?0(PfPRU+c=r>2ZcY}ULw*cE zmr|P}b02X9!Y_y;M=<^}P-PNye6qy*PZ8ggFLc*JZtSED{WgwQ>PKX-N47z!8B6`- z#$lm`iFl83cnHyqB!6x$Z!|vr5#!7sael6(0A0yL%u(cW-PRHc{vAeDwMFh}Tp%Xz zxs-E>OZqrmB|FfS0HB7hRHY4{M(Uq*cIP-C4i;_;nU}vpK9tIIqBcEB#e_-m61sz7 zTj4LrZuU&8)B;XjQkUlWyJOOJPg4wsw&sNF+O|R_L_-~1g4k6^guvb9er=zeTp%$> z99|DGICuP=Ff8tudD(GF-3MNw&D6+kAE=r3q)kB>(%FAN&Zsm7URz%7`CA_Jr|N5_ z>c*FYs+CkFV(C!tERS?IFNtU7jH3F(Y!|kz|lka9H&R z_VgVLtRI-659PM9-`&hPo8fK$osZ5(g8Yo%Uf(p=n-qCf>09N4pm=TbWhsBd)HegL znp*jp8$^PbUX20r-}srl@k^?>EB_>Nn7YrFx{vWBE$6TMta)7P2D(DZVlk9I%as58F*k(^f$6(~q^m!?XDcmWs zn7;hJ_%~e`l~(==W>DnVQAG_4#PpqOVLDEq#?s)vdXkY;_hH1cm|s1_VCMW$2Gc0B zkk_r|O}En}O{7QiW=@%ceJ`H8rCq8e@7TsiELDwrp+2dxT1sk~md@Bep1PwHxJHw= z$VWu2Au2jXon?s)hww_b+$)npk;KMPk;d(7uNg;4ajs;1w@BN@o{_|cQ8nTBsL)<_ z92IcY4SK6CPHgDawqfr`+XkwwquTOlc!AfKpV9DpUeC4-y`$lkU5#eujz-2_cW~qx z_?n`bJH&~#u9VNB5aUI)RuoCRS5y;PUgLzGEVZlJ>JMxjHnL$~JJafSAIY>v9i88k zhs~ZCTGXouXK`sX&mM?;UIG9lPzKHV*Uc;Iae=`rHrXg}5lS=V60SD7L=}+gT4yI` z8ra?|u(hjJTTL|wK`C2?RX4G;S0EG3{yim$%yCxptrk@>t?B)xF=^LM&Ngq~W8QwZ z{_2kXSuItxG$V{EvphWr=SOE-V%;HD%hjR8rcu?6nYGp}BI8>v6S}o+>Ivw>TX@=T z&HAE;JiWR&v94F!y1jug^~0;ei?vHNXEfw24xow1RUg>a|OVF*&z{1YCNnUcKdIKtYFf;IVsz+KUi zZ5vvZcN$AAM~jK<=vRc0-XAbX3s=fIO+~3v^>?f39$Z8s&g))9p1(loH3hQsh%`>B z!&ue(R?}5d(Q3h5)3V%I(X{ef+gXuVe+Z9ms0bxCk80ep_L{+Lm}o_}w#|yXk?^(= z!1-+&(OSic^}X8GGxc>nsUHn5_KJZ*cza^|g;ujD*d@gx$zVQiYQ1*Ah;?-hBihxn z_#WGKL2=&r?5g(|xGw5mO-rwx8gZ6J7z!{R&DL8tN_HMUu4A_aU9s1!S$8oKtL3y} zDzgad_hy`l^`pYuqv549w+oOO271vL+)FolX!wmcOjfBT+!l3~7U(+@ZOgGOP2WF~ zI%8#Gdt~}3oQcN&7o1UW)ti8Csz4d8Tw;c4lFU+ToiE&(_Ger}A9r>tD80T$-)YdT zeu*w^+<8=RUh^Z7HPg8g$O|A2Yly+W@ zy7Q${cU|AOsYDaeiY(m$VCz_$*6;#DQLI^?N(#=C!0qsk;1P+`IV#%LLyX#F^_oUA zMsK`Qr|f$zR1$-ePmHWtnCLTxAk7zglz6u&4JFP1WZHSd*>1pU-6EoFS}a;-QLH9W zf26KmPOdF0;qtu}c!qo^{6gj_(Y<6Coe^g4{nL-|1EMUoy7|zU<3l4}0fMX_1+XSa zaR98K7~C}*Qz-9}5$$!~ky-(?wASvR<rtZ(WjU1#S9U%@-nW#U-mjEIA7j4u5*rK77R4)>ER+>y@jVbma=kMOnEe zo*Igy_y`;>W(jeQg<50IGcw^?XO@!9#13ov3DGKcHRRS7K|uaBT1{^dqRRQ#IASns z_cKZ+mvTKv%W<5jOU zL^z~N<5i2VS%N=QC3E>)$DOzTM>mcrVZi_5h>K;~YKd3-M8?KD)-4x^X|w7btNC$C zJ4`semS>RV@B$=;ay@)<1QXREk^YbxpFWC9sDMe(nj-+cx>uCYPoD<^M;Vf8t%~AZSm2*Pq&I+N9f0nhSN^xRSueMEl z`=`n>NaLoS;Z=!Ukj77_Qk%LF%D4l{xHrgqiBLuydJJWpqx8^WtX7NA!zs?|oKgkU zu(}IsID=+|8u}gkv@ra+PYMt4PKl+?QA+rTcRZtsax{Lf^vb7y2So72R|0q{1aRD) z|Aqjf0Gy&!&}|%p=f2fa1M{8L|3_xxO4+ZdeyLCY<_q#>>E9g%^zTNr?R-Wg-T;tO{;SAP|3b*H|UVouzLkp;04|#NG z+os;(*JWLrE|cG9LG;2~0>ZeVBh6dUndZH~BWdKz9L4)9Ev1+62arS|6^8q0;zGBg z)ES&L(7iCi*w9)-@M4a#O_2ZEfZm-$p&@s5!v?tc}71i};-)b1wI|XpIbE^`@ly9JY zrA%J(10Z}^U;O$GYaDiL!;yAsDgwcKk(Q91Syq2|HAA)zS&5R& z>%%wkFyU)Ao}_RjpRfK2LeJgG2e@4rJ^yTa7cI;nIdli-oS|b?Z&*$LAhyS9X_bqt zPHtOYYCU~+#fjl%xJV4K+cpfc+cuWi;WzE@LLqBd;{G9bw@8TRYMBx~sSW$blZV$f zb5X|AJc(J)zr`I8qf}1e!1uO2Q!N!GPQXo>&Bxa3Xh?2h=>5luV_NuLVukK~X)CE6~$(L z9pYe}W?vGsu6*kf>xX4Om4xfoZWtV#SouT6YS`qwmVtv~t_Yfzte z%B1GRCCDyum^YG_9^xG?J)C<;AC}BiZFt)kZ5VA&^A-POJ!a~~hRY)pe8BxL?Pauw zYltA6D30dvnLBP`Rf`+?#ho9O;1W|L{6YE;rPM>gK3D2Hzcm@rKt@3sL7i6lRNmhg zsj6lQ5?f8b<8R}zE3IZx%?k<&flU5NHdAJyqo46)i!c$%$7OqP@TR&SjI=8|A|CqO zm;Y=>#b3o-Nl@5wSbK(zHi-0g^B9`6N{k$d>LO2dvzu31O~2v9YdrN>tNHKjLt-D< zBrEL9Qmg4DemCAEyQF3X|JzBvl%B^klrZIkt>*r`2c(x?Vjb5;!X+ke-F6Rul_`xT zRqBYOYBE(wlZ5MI8+g@S zgC5MHIwlWgqs3kMWCv6e%;P*Im@kEeu-p8 z35O0PaZ@5&xT!y^9XVH zRoff3kZwtcizsiu-A|y#kR|JtS)6RytuZ_Ts0W>FLvjR@AviwvuGlEl&3K7qblMEB z3rYQc#8IoI)DdxSl!|*+%ZxzStF&6CX3y8g9n4nrs8sOfJULT0j|zVoNO?=k6Wh7W zXB=(XDVu`~ECuHTo=q!fkV8riw$v;^+vHvHSGoGMH0rE^q2VPX`q+*VaTuIxBkm!2 zj;EA`5HvBRj3ZzCli`VGjA|@K?g*ugU@_nnU;(y;7peWsFg)pXjE-H5IF~7F08)I1 zI&85fLnn^w^YDRviW=hAoo1(u=U1SZW!rEEc9Sq}xg8H@$pwFkb%=xhsl`F%{_+&^ zi3rFB*6(E_LU=E%pUGV<8>7MWfEg zx&fxR4X`KXKxpa%jD=hej)8#q3wIX>N8VfOwo@rx;un`R&YQ%Lx;31vw7qfO5BXJ8 zUzr1j-D9S{7@%?9wm28tWnRTZYgrE4^Qv7)HKTKs`%Ik+O4GL?yP`GaFk*xy$+-d* zWtC@cZ=^G8)?5F`WDIY*U9j4kwU7rQ_T>1}^jscsZYgi4z))t+{lQ(IXHZ(A^#l*| zMu#10DoRzWDJ4?0Kt^bR;r3wG$b}9s{nGO?eXGWm#lzJMp)yl;vs=c>_gMZd+ziSo z_T3ByZDv))&*MBA)D6v|9}QixD;LJ#XX#?9c$*8_OErc!FQ9s~DemoEJ}RkSRr4;iMsnu;KJA_sPDY3;g zeQj`PjiZcnf}$6WV?H zd7BRTzU+`kHZs7v{T0zhD)sCGjmx1}=uKz;i1U7J)$3MMl;b~w^H)D%jNofAZ%*Pi zr+Ks>{~80WM1SXf%$l;^HO@}r=_Af3-hep~Um+1S8e1d-^eDb+*Jx~)M4UI!44lSC z1VIs8^p&<~N{{0gnlh1;QI78rrNm0sRO_HB-HfVqv#Q5A%-`|4^Q&hhj7*S0HPM@G zA48!C>nB>G-0 zcOi^dEjc9uo$b@Iuap)F(;!I}66;ad)@N1QS|N+1Ak}y&4Yako^Se-OpCFYCsC=42 z6QbJAnH`J*qs{B1h6i-Ds=_wsLS3Kd+CjV@eD(s-a-p| zs4ccr1HM^XJT%Z2TTS9NDZ438|7!Hb6%=Ik#S&-~PmKxm#dhUdtN9^jM`on|NNue2 z;y=?DPtECzfAnuzWYh#~=R=McA4K7fUzPFYDVVeV^{QX4ALr|qKlkUL>g5xSdRZHY zJ73iILuga+Z2v$!%Ol!CP&|BYg_WY`A1VJSSzSbmw&4}$FajxAGaOmX`~)4Y2bL_f zQAha_o1WAw)`{}QaDDbVpX+l!5RQZATtHQmWlO!udMYKKl;g-YCWPc|Mma{(!^$@* zUq?AM*sk1VhZft#YB=zEMM7%#b{ zvp>zG2h*8s<;vNCU(CpRf2}WFYhF6w&+^jU3eXphl=oKO%6r0MV7}c)J19Gmx~9=r zq|r4L8efufdEuFvJX_2+Nh&P4N9b!gAH09I>8p?FYtdt-FDZNhQ#RKKOJBG1OkV?Ol%M%{VxKJKo{)aw}1fLvg~=FuE8n+fy-NqGo$>Z7q@Q-xLhIINrIgS%ql{Q#SH3F;&0ssU znqW?A`q6gP$6Q-ar6F4lz5Tn4F0jwtNI}+qVyDLUvJ)G&*_8_#&azWiw+~qU@j8|*4O^r`seXHIJi_nE_Oe6E4U2@SvNAnntM5;u@AvWNvPE;6 z*!V7l$l~vjqEHW9t7#SdghJ{y`694+;=*CQkyoHBs3hg#(N~E4!kUU;JS<-6+Ewnf zfoeI5%mYHY9gt%_g*|nD|DKOBQn_64p;`oiL3S}K9uIv+olIH3ciBS-X4SC}_clnQ z{3(|=KnQ>Bzx$m@rvh_;y`xZO@$L{e#w^F%WdK@f04zfdQRqgoT zYBp5}Lnx)fSJ0@2;DH>IgwP89<`G(t=V;yODwpeV#Ct+4*1Fwq@cpmO74It;+MSUW zQPpC{IQ7_u%AAU}zN}C^yVdJGWTjUU*fNNj)d){_S^}#@5+PGl%Zpv2Wa?2MY?xW} zcBb`q&I$|umeL2T)>hpuRt<9ES*6vpukSzmbbwZDCtm7*e&qWLb1qjwytz%PfJ5xW zt`MmOk|&cmz|tIaX!}>G;bIX}Cn7fevaDn>`ehdejF_`L_T}n$s`tOBg8^e}4HG#~ z(KXj!EVMw*`9vG`j7Vxy2JftR>ikgT#cJNEt$e4piltbMIfGm-m@~>aO&h)yui9A$ zsT6-Uv1e>LBYClfJ>y-mXZ)i!yh+N{p7HJ($;lS>jE!Q?Sflog*TtT(6?+DNeMUO5 zQApX9t0Xsq7&EY~v}4Ser$xe#B^Dy|mG&6Zt51E#pYBWxS3pqtDA< zOG1gseO}YgK`XFjtiYDR|MM1jCG!5CdLq;$OdOv?;`{qeu%VpX6@v4`^4DF)<-;5rL%+}+s5IWD~pxm4*r~=nkNY-+laQ4|wo&n$P74$!*1S{2j z1>=+a4b{XWVpmh(e}AEl&Lp?_>{?NkOe=4*q7y(ZEB$u761P>MK5(U%I1a z6sBj03ht|yi#_}o!q8YvPsrbvZV23LOhl)wsUK}CAuDx8+qwxio<$!(d(I>)|C zi+6gD$$BPVRQ_~cIYZ=MV{S37XK)$p5`RxWO!0T{w>#tS z-^2e+{0&X$3V(+_^$qxI;#r+9w%$5kF>rJ|`QjkH#S%A{7B$$U(9*E`TD)azhfnX{ z5Y`*YkGSkxBr_aWPQJbNSca>Qr<00kTyRrn^2KsmKzL9@Pse})oa%cI<>#&I;ip01JFd#t5G8IdVdpK9BBGDe!i?eFTq54h zCV4`hEAv)|e+XOt}`k@;?zBklNkcKI8&Bcq09qo-Jc15BuJIKxjgsA zzz?Vp459&NdZ-lYQ#}*hy%|IH`j{XS&_P#=!Wfg*biFavYMw)*c`vg2V`{0nQmPYv%U!LS+{@?KsbMQ3JFML|Q}1*yMr=ThH^z&2c!VsJEp%-!yz4=9x11;!Z>V>qH;~wX zL;ce8gVJtNy02To7B}LhU*Qxg$ab&0TCQzc2u8+JBTxKA@1jWN9h&E_l%7p#VZJFg z>5Q1OBc4*-d^Guj9uG-1633Ijm*dY)orkvhSM7Yo^;@-wINQxQI~w}hd0eW;t2SCq zvhW;>M|10uHTyTzjm-S|$Z}q}Q?C5LyWqEpZ3C=ZujU5_-?y)nt?p+Rh&*3H{qz-R zYt)sT4!gyigJ~_M&Qw_T*IBc;=~ae8$cU6g@;#}H>3_90eO`Ae@TPA