diff --git a/.babelrc.js b/.babelrc.js index 13e7b0a37c25..b00deb2d4c20 100644 --- a/.babelrc.js +++ b/.babelrc.js @@ -6,7 +6,7 @@ const withTests = { ], ], plugins: [ - 'babel-plugin-require-context-hook', + '@storybook/babel-plugin-require-context-hook', 'babel-plugin-dynamic-import-node', '@babel/plugin-transform-runtime', ], @@ -24,6 +24,7 @@ module.exports = { ignore: [ './lib/codemod/src/transforms/__testfixtures__', './lib/postinstall/src/__testfixtures__', + '**/typings.d.ts', ], presets: [ [ @@ -49,11 +50,12 @@ module.exports = { ], ['@babel/plugin-proposal-class-properties', { loose: true }], ['@babel/plugin-proposal-private-methods', { loose: true }], + ['@babel/plugin-proposal-private-property-in-object', { loose: true }], '@babel/plugin-proposal-export-default-from', '@babel/plugin-syntax-dynamic-import', ['@babel/plugin-proposal-object-rest-spread', { loose: true, useBuiltIns: true }], 'babel-plugin-macros', - ['emotion', { sourceMap: true, autoLabel: true }], + ['@emotion', { sourceMap: true, autoLabel: 'always' }], ], env: { test: withTests, @@ -85,9 +87,10 @@ module.exports = { ['@babel/plugin-proposal-object-rest-spread', { loose: true, useBuiltIns: true }], '@babel/plugin-proposal-export-default-from', '@babel/plugin-syntax-dynamic-import', + ['@babel/plugin-proposal-private-property-in-object', { loose: true }], ['@babel/plugin-proposal-class-properties', { loose: true }], 'babel-plugin-macros', - ['emotion', { sourceMap: true, autoLabel: true }], + ['@emotion', { sourceMap: true, autoLabel: 'always' }], 'babel-plugin-add-react-displayname', ], env: { @@ -122,12 +125,13 @@ module.exports = { ], ], plugins: [ - 'emotion', + '@emotion', 'babel-plugin-macros', '@babel/plugin-transform-arrow-functions', '@babel/plugin-transform-shorthand-properties', '@babel/plugin-transform-block-scoping', '@babel/plugin-transform-destructuring', + ['@babel/plugin-proposal-private-property-in-object', { loose: true }], ['@babel/plugin-proposal-class-properties', { loose: true }], '@babel/plugin-proposal-object-rest-spread', '@babel/plugin-proposal-export-default-from', diff --git a/.circleci/config.yml b/.circleci/config.yml index 300d261be027..6dcb72899d0d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,44 +1,44 @@ version: 2.1 executors: - sb_node_12_classic: + sb_node_14_classic: parameters: class: description: The Resource class type: enum - enum: ['small', 'medium', 'large', 'xlarge'] + enum: ['small', 'medium', 'medium+', 'large', 'xlarge'] default: 'medium' working_directory: /tmp/storybook docker: - - image: circleci/node:12 + - image: circleci/node:14 environment: NODE_OPTIONS: --max_old_space_size=3076 resource_class: <> - sb_node_12_browsers: + sb_node_14_browsers: parameters: class: description: The Resource class type: enum - enum: ['small', 'medium', 'large', 'xlarge'] + enum: ['small', 'medium', 'medium+', 'large', 'xlarge'] default: 'medium' working_directory: /tmp/storybook docker: - - image: circleci/node:12-browsers + - image: circleci/node:14-browsers environment: NODE_OPTIONS: --max_old_space_size=3076 resource_class: <> - sb_cypress_6_node_12: + sb_cypress_8_node_14: parameters: class: description: The Resource class type: enum - enum: ['small', 'medium', 'large', 'xlarge'] + enum: ['small', 'medium', 'medium+', 'large', 'xlarge'] default: 'medium' working_directory: /tmp/storybook docker: # ⚠️ The Cypress docker image is based on Node.js one so be careful when updating it because it can also - # cause an upgrade of the Node. - - image: cypress/included:6.8.0 + # cause an upgrade of Node.js version too. Cypress 8.5 image is based on Node.js 14 + - image: cypress/included:8.7.0 environment: NODE_OPTIONS: --max_old_space_size=3076 resource_class: <> @@ -79,23 +79,23 @@ jobs: build: executor: class: xlarge - name: sb_node_12_classic + name: sb_node_14_classic steps: - git-shallow-clone/checkout_advanced: clone_options: '--depth 1 --verbose' - restore_cache: name: Restore Yarn cache keys: - - build-yarn-2-cache-v1--{{ checksum "yarn.lock" }} + - build-yarn-2-cache-v3--{{ checksum "yarn.lock" }} - run: name: Install dependencies command: yarn install --immutable - run: name: Bootstrap - command: yarn bootstrap --core + command: yarn bootstrap --build --manager - save_cache: name: Save Yarn cache - key: build-yarn-2-cache-v1--{{ checksum "yarn.lock" }} + key: build-yarn-2-cache-v3--{{ checksum "yarn.lock" }} paths: - ~/.yarn/berry/cache - persist_to_workspace: @@ -107,7 +107,7 @@ jobs: - app - lib chromatic: - executor: sb_node_12_browsers + executor: sb_node_14_browsers parallelism: 4 steps: # Keep using default checkout because Chromatic needs some git history to work properly @@ -118,25 +118,11 @@ jobs: name: examples command: | yarn run-chromatics - packtracker: - executor: - class: medium - name: sb_node_12_browsers - steps: - - git-shallow-clone/checkout_advanced: - clone_options: '--depth 1 --verbose' - - attach_workspace: - at: . - - run: - name: Report webpack stats for manager of official storybook - command: | - cd examples/official-storybook - yarn packtracker examples: executor: - class: medium - name: sb_node_12_browsers - parallelism: 4 + class: medium+ + name: sb_node_14_browsers + parallelism: 17 steps: - git-shallow-clone/checkout_advanced: clone_options: '--depth 1 --verbose' @@ -145,7 +131,7 @@ jobs: - run: name: examples command: | - yarn build-storybooks + yarn build-storybooks --all - persist_to_workspace: root: . paths: @@ -153,7 +139,7 @@ jobs: publish: executor: class: medium - name: sb_node_12_classic + name: sb_node_14_classic steps: - git-shallow-clone/checkout_advanced: clone_options: '--depth 1 --verbose' @@ -169,7 +155,7 @@ jobs: e2e-tests-extended: executor: class: medium - name: sb_cypress_6_node_12 + name: sb_cypress_8_node_14 parallelism: 4 steps: - when: @@ -194,8 +180,8 @@ jobs: name: Wait for registry command: yarn wait-on http://localhost:6000 - run: - name: Run E2E tests - command: yarn test:e2e-framework --clean --all --skip angular11 --skip angular --skip vue3 --skip web_components_typescript --skip cra + name: Run E2E (extended) tests + command: yarn test:e2e-framework --clean --all --skip angular11 --skip angular --skip angular12 --skip vue3 --skip web_components_typescript --skip cra --skip react no_output_timeout: 5m - store_artifacts: path: /tmp/cypress-record @@ -203,8 +189,8 @@ jobs: e2e-tests-core: executor: class: large - name: sb_cypress_6_node_12 - parallelism: 2 + name: sb_cypress_8_node_14 + parallelism: 8 steps: - git-shallow-clone/checkout_advanced: clone_options: '--depth 1 --verbose' @@ -218,18 +204,39 @@ jobs: name: Wait for registry command: yarn wait-on http://localhost:6000 - run: - name: Run E2E tests + name: Run E2E (core) tests # Do not test CRA here because it's done in PnP part # TODO: Remove `web_components_typescript` as soon as Lit 2 stable is released - command: yarn test:e2e-framework vue3 angular angular11 web_components_typescript web_components_lit2 + command: yarn test:e2e-framework vue3 angular130 angular13 angular12 angular11 web_components_typescript web_components_lit2 react react_legacy_root_api vite_react no_output_timeout: 5m - store_artifacts: path: /tmp/cypress-record destination: cypress + e2e-tests-sb-docs: + executor: + class: large + name: sb_cypress_8_node_14 + parallelism: 2 + steps: + - git-shallow-clone/checkout_advanced: + clone_options: '--depth 1 --verbose' + - attach_workspace: + at: . + - run: + name: Running local registry + command: yarn local-registry --port 6000 --open + background: true + - run: + name: Wait for registry + command: yarn wait-on http://localhost:6000 + - run: + name: Run smoke tests + command: yarn test:e2e-framework angular_modern_inline_rendering --test-runner --docs-mode + no_output_timeout: 5m cra-bench: executor: class: medium - name: sb_cypress_6_node_12 + name: sb_cypress_8_node_14 working_directory: /tmp/storybook steps: - git-shallow-clone/checkout_advanced: @@ -249,11 +256,11 @@ jobs: cd .. npx create-react-app cra-bench cd cra-bench - npx @storybook/bench 'npx sb init' --label cra --extra-flags "--modern" + npx @storybook/bench@latest 'npx sb init' --label cra --extra-flags "--modern" e2e-tests-pnp: executor: class: medium - name: sb_cypress_6_node_12 + name: sb_cypress_8_node_14 working_directory: /tmp/storybook steps: - git-shallow-clone/checkout_advanced: @@ -268,15 +275,25 @@ jobs: name: Wait for registry command: yarn wait-on http://localhost:6000 - run: - name: run e2e tests - command: yarn test:e2e-framework --pnp sfcVue cra + name: run e2e tests cra + command: yarn test:e2e-framework --pnp cra + # - run: + # name: run e2e tests vue + # command: yarn test:e2e-framework --pnp sfcVue + - run: + name: prep artifacts + when: always + command: zip -r /tmp/storybook-e2e-testing-out.zip /tmp/storybook-e2e-testing - store_artifacts: path: /tmp/cypress-record destination: cypress + - store_artifacts: + path: /tmp/storybook-e2e-testing-out.zip + destination: e2e e2e-tests-examples: executor: class: small - name: sb_cypress_6_node_12 + name: sb_cypress_8_node_14 steps: - git-shallow-clone/checkout_advanced: clone_options: '--depth 1 --verbose' @@ -298,7 +315,7 @@ jobs: smoke-tests: executor: class: medium - name: sb_node_12_browsers + name: sb_node_14_browsers environment: # Disable ESLint when running smoke tests to improve perf + As of CRA 4.0.3, CRA kitchen sinks are throwing # because of some ESLint warnings, related to: https://github.com/facebook/create-react-app/pull/10590 @@ -353,21 +370,10 @@ jobs: command: | cd examples/cra-react15 yarn storybook --smoke-test --quiet - frontpage: - executor: sb_node_12_browsers - steps: - - git-shallow-clone/checkout_advanced: - clone_options: '--depth 1 --verbose' - - run: - name: Install dependencies - command: yarn install --immutable - - run: - name: Trigger build - command: ./scripts/build-frontpage.js lint: executor: class: small - name: sb_node_12_classic + name: sb_node_14_classic steps: - git-shallow-clone/checkout_advanced: clone_options: '--depth 1 --verbose' @@ -377,7 +383,7 @@ jobs: name: Lint command: yarn lint unit-tests: - executor: sb_node_12_browsers + executor: sb_node_14_browsers steps: - git-shallow-clone/checkout_advanced: clone_options: '--depth 1 --verbose' @@ -386,6 +392,8 @@ jobs: - run: name: Test command: yarn test --coverage --runInBand --ci + - store_test_results: + path: junit.xml - persist_to_workspace: root: . paths: @@ -393,7 +401,7 @@ jobs: coverage: executor: class: small - name: sb_node_12_browsers + name: sb_node_14_browsers steps: - git-shallow-clone/checkout_advanced: clone_options: '--depth 1 --verbose' @@ -419,9 +427,6 @@ workflows: - smoke-tests: requires: - build - - packtracker: - requires: - - build - unit-tests: requires: - build @@ -440,12 +445,12 @@ workflows: - e2e-tests-core: requires: - publish + - e2e-tests-sb-docs: + requires: + - publish - e2e-tests-pnp: requires: - publish - cra-bench: requires: - publish - deploy: - jobs: - - frontpage diff --git a/.eslintignore b/.eslintignore index 7ba4c1389c28..262232534b26 100644 --- a/.eslintignore +++ b/.eslintignore @@ -11,7 +11,6 @@ lib/manager-webpack4/prebuilt lib/manager-webpack5/prebuilt lib/core-server/prebuilt lib/codemod/src/transforms/__testfixtures__ -lib/components/src/controls/react-editable-json-tree scripts/storage scripts/repros-generator *.bundle.js diff --git a/.eslintrc.js b/.eslintrc.js index 6c1acdeef112..5ee707ce6e5d 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,10 +1,33 @@ module.exports = { root: true, - extends: ['@storybook/eslint-config-storybook'], + extends: ['@storybook/eslint-config-storybook', 'plugin:storybook/recommended'], rules: { '@typescript-eslint/ban-ts-comment': 'warn', + 'jest/no-standalone-expect': [ + 'error', + { additionalTestBlockFunctions: ['it.skipWindows', 'it.onWindows'] }, + ], }, overrides: [ + { + // this package depends on a lot of peerDependencies we don't want to specify, because npm would install them + files: ['**/addons/docs/**/*'], + rules: { + 'import/no-extraneous-dependencies': 'off', + }, + }, + { + // this package uses pre-bundling, dependencies will be bundled, and will be in devDepenencies + files: [ + '**/lib/theming/**/*', + '**/lib/router/**/*', + '**/lib/ui/**/*', + '**/lib/components/**/*', + ], + rules: { + 'import/no-extraneous-dependencies': ['error', { bundledDependencies: false }], + }, + }, { files: [ '**/__tests__/**', @@ -42,6 +65,16 @@ module.exports = { 'react/prop-types': 'off', // we should use types 'react/forbid-prop-types': 'off', // we should use types 'no-dupe-class-members': 'off', // this is called overloads in typescript + 'react/no-unused-prop-types': 'off', // we should use types + 'react/default-props-match-prop-types': 'off', // we should use types + 'import/no-named-as-default': 'warn', + 'import/no-named-as-default-member': 'warn', + 'react/destructuring-assignment': 'warn', + + // This warns about importing interfaces and types in a normal import, it's arguably better to import with the `type` prefix separate from the runtime imports, + // I leave this as a warning right now because we haven't really decided yet, and the codebase is riddled with errors if I set to 'error'. + // It IS set to 'error' for JS files. + 'import/named': 'warn', }, }, { diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 406ac232541e..82d2d3cbf468 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -12,7 +12,7 @@ If your answer is yes to any of these, please make sure to include it in your PR <"+e+">");var n=(0,Vt.timer)(r),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent time: "+s+"ms"),this.traceInitIndent--,o}else return r()},t.SKIPPED="This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.",t.NA=/NOT_APPLICABLE/,t}();Rl.Lexer=lIe});var nA=E(Ci=>{"use strict";Object.defineProperty(Ci,"__esModule",{value:!0});Ci.tokenMatcher=Ci.createTokenInstance=Ci.EOF=Ci.createToken=Ci.hasTokenLabel=Ci.tokenName=Ci.tokenLabel=void 0;var Ds=Dt(),cIe=Gh(),Xv=yu();function uIe(t){return IG(t)?t.LABEL:t.name}Ci.tokenLabel=uIe;function gIe(t){return t.name}Ci.tokenName=gIe;function IG(t){return(0,Ds.isString)(t.LABEL)&&t.LABEL!==""}Ci.hasTokenLabel=IG;var fIe="parent",yG="categories",wG="label",BG="group",QG="push_mode",bG="pop_mode",vG="longer_alt",SG="line_breaks",xG="start_chars_hint";function kG(t){return hIe(t)}Ci.createToken=kG;function hIe(t){var e=t.pattern,r={};if(r.name=t.name,(0,Ds.isUndefined)(e)||(r.PATTERN=e),(0,Ds.has)(t,fIe))throw`The parent property is no longer supported. +See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,Ds.has)(t,yG)&&(r.CATEGORIES=t[yG]),(0,Xv.augmentTokenTypes)([r]),(0,Ds.has)(t,wG)&&(r.LABEL=t[wG]),(0,Ds.has)(t,BG)&&(r.GROUP=t[BG]),(0,Ds.has)(t,bG)&&(r.POP_MODE=t[bG]),(0,Ds.has)(t,QG)&&(r.PUSH_MODE=t[QG]),(0,Ds.has)(t,vG)&&(r.LONGER_ALT=t[vG]),(0,Ds.has)(t,SG)&&(r.LINE_BREAKS=t[SG]),(0,Ds.has)(t,xG)&&(r.START_CHARS_HINT=t[xG]),r}Ci.EOF=kG({name:"EOF",pattern:cIe.Lexer.NA});(0,Xv.augmentTokenTypes)([Ci.EOF]);function pIe(t,e,r,i,n,s,o,a){return{image:e,startOffset:r,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:t.tokenTypeIdx,tokenType:t}}Ci.createTokenInstance=pIe;function dIe(t,e){return(0,Xv.tokenStructuredMatcher)(t,e)}Ci.tokenMatcher=dIe});var hn=E(Tt=>{"use strict";var oa=Tt&&Tt.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function i(){this.constructor=e}e.prototype=r===null?Object.create(r):(i.prototype=r.prototype,new i)}}();Object.defineProperty(Tt,"__esModule",{value:!0});Tt.serializeProduction=Tt.serializeGrammar=Tt.Terminal=Tt.Alternation=Tt.RepetitionWithSeparator=Tt.Repetition=Tt.RepetitionMandatoryWithSeparator=Tt.RepetitionMandatory=Tt.Option=Tt.Alternative=Tt.Rule=Tt.NonTerminal=Tt.AbstractProduction=void 0;var $t=Dt(),CIe=nA(),Ao=function(){function t(e){this._definition=e}return Object.defineProperty(t.prototype,"definition",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),t.prototype.accept=function(e){e.visit(this),(0,$t.forEach)(this.definition,function(r){r.accept(e)})},t}();Tt.AbstractProduction=Ao;var PG=function(t){oa(e,t);function e(r){var i=t.call(this,[])||this;return i.idx=1,(0,$t.assign)(i,(0,$t.pick)(r,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,"definition",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(r){},enumerable:!1,configurable:!0}),e.prototype.accept=function(r){r.visit(this)},e}(Ao);Tt.NonTerminal=PG;var DG=function(t){oa(e,t);function e(r){var i=t.call(this,r.definition)||this;return i.orgText="",(0,$t.assign)(i,(0,$t.pick)(r,function(n){return n!==void 0})),i}return e}(Ao);Tt.Rule=DG;var RG=function(t){oa(e,t);function e(r){var i=t.call(this,r.definition)||this;return i.ignoreAmbiguities=!1,(0,$t.assign)(i,(0,$t.pick)(r,function(n){return n!==void 0})),i}return e}(Ao);Tt.Alternative=RG;var FG=function(t){oa(e,t);function e(r){var i=t.call(this,r.definition)||this;return i.idx=1,(0,$t.assign)(i,(0,$t.pick)(r,function(n){return n!==void 0})),i}return e}(Ao);Tt.Option=FG;var NG=function(t){oa(e,t);function e(r){var i=t.call(this,r.definition)||this;return i.idx=1,(0,$t.assign)(i,(0,$t.pick)(r,function(n){return n!==void 0})),i}return e}(Ao);Tt.RepetitionMandatory=NG;var LG=function(t){oa(e,t);function e(r){var i=t.call(this,r.definition)||this;return i.idx=1,(0,$t.assign)(i,(0,$t.pick)(r,function(n){return n!==void 0})),i}return e}(Ao);Tt.RepetitionMandatoryWithSeparator=LG;var TG=function(t){oa(e,t);function e(r){var i=t.call(this,r.definition)||this;return i.idx=1,(0,$t.assign)(i,(0,$t.pick)(r,function(n){return n!==void 0})),i}return e}(Ao);Tt.Repetition=TG;var MG=function(t){oa(e,t);function e(r){var i=t.call(this,r.definition)||this;return i.idx=1,(0,$t.assign)(i,(0,$t.pick)(r,function(n){return n!==void 0})),i}return e}(Ao);Tt.RepetitionWithSeparator=MG;var OG=function(t){oa(e,t);function e(r){var i=t.call(this,r.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,$t.assign)(i,(0,$t.pick)(r,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,"definition",{get:function(){return this._definition},set:function(r){this._definition=r},enumerable:!1,configurable:!0}),e}(Ao);Tt.Alternation=OG;var CI=function(){function t(e){this.idx=1,(0,$t.assign)(this,(0,$t.pick)(e,function(r){return r!==void 0}))}return t.prototype.accept=function(e){e.visit(this)},t}();Tt.Terminal=CI;function mIe(t){return(0,$t.map)(t,Yh)}Tt.serializeGrammar=mIe;function Yh(t){function e(s){return(0,$t.map)(s,Yh)}if(t instanceof PG){var r={type:"NonTerminal",name:t.nonTerminalName,idx:t.idx};return(0,$t.isString)(t.label)&&(r.label=t.label),r}else{if(t instanceof RG)return{type:"Alternative",definition:e(t.definition)};if(t instanceof FG)return{type:"Option",idx:t.idx,definition:e(t.definition)};if(t instanceof NG)return{type:"RepetitionMandatory",idx:t.idx,definition:e(t.definition)};if(t instanceof LG)return{type:"RepetitionMandatoryWithSeparator",idx:t.idx,separator:Yh(new CI({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof MG)return{type:"RepetitionWithSeparator",idx:t.idx,separator:Yh(new CI({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof TG)return{type:"Repetition",idx:t.idx,definition:e(t.definition)};if(t instanceof OG)return{type:"Alternation",idx:t.idx,definition:e(t.definition)};if(t instanceof CI){var i={type:"Terminal",name:t.terminalType.name,label:(0,CIe.tokenLabel)(t.terminalType),idx:t.idx};(0,$t.isString)(t.label)&&(i.terminalLabel=t.label);var n=t.terminalType.PATTERN;return t.terminalType.PATTERN&&(i.pattern=(0,$t.isRegExp)(n)?n.source:n),i}else{if(t instanceof DG)return{type:"Rule",name:t.name,orgText:t.orgText,definition:e(t.definition)};throw Error("non exhaustive match")}}}Tt.serializeProduction=Yh});var EI=E(mI=>{"use strict";Object.defineProperty(mI,"__esModule",{value:!0});mI.RestWalker=void 0;var Zv=Dt(),pn=hn(),EIe=function(){function t(){}return t.prototype.walk=function(e,r){var i=this;r===void 0&&(r=[]),(0,Zv.forEach)(e.definition,function(n,s){var o=(0,Zv.drop)(e.definition,s+1);if(n instanceof pn.NonTerminal)i.walkProdRef(n,o,r);else if(n instanceof pn.Terminal)i.walkTerminal(n,o,r);else if(n instanceof pn.Alternative)i.walkFlat(n,o,r);else if(n instanceof pn.Option)i.walkOption(n,o,r);else if(n instanceof pn.RepetitionMandatory)i.walkAtLeastOne(n,o,r);else if(n instanceof pn.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,r);else if(n instanceof pn.RepetitionWithSeparator)i.walkManySep(n,o,r);else if(n instanceof pn.Repetition)i.walkMany(n,o,r);else if(n instanceof pn.Alternation)i.walkOr(n,o,r);else throw Error("non exhaustive match")})},t.prototype.walkTerminal=function(e,r,i){},t.prototype.walkProdRef=function(e,r,i){},t.prototype.walkFlat=function(e,r,i){var n=r.concat(i);this.walk(e,n)},t.prototype.walkOption=function(e,r,i){var n=r.concat(i);this.walk(e,n)},t.prototype.walkAtLeastOne=function(e,r,i){var n=[new pn.Option({definition:e.definition})].concat(r,i);this.walk(e,n)},t.prototype.walkAtLeastOneSep=function(e,r,i){var n=KG(e,r,i);this.walk(e,n)},t.prototype.walkMany=function(e,r,i){var n=[new pn.Option({definition:e.definition})].concat(r,i);this.walk(e,n)},t.prototype.walkManySep=function(e,r,i){var n=KG(e,r,i);this.walk(e,n)},t.prototype.walkOr=function(e,r,i){var n=this,s=r.concat(i);(0,Zv.forEach)(e.definition,function(o){var a=new pn.Alternative({definition:[o]});n.walk(a,s)})},t}();mI.RestWalker=EIe;function KG(t,e,r){var i=[new pn.Option({definition:[new pn.Terminal({terminalType:t.separator})].concat(t.definition)})],n=i.concat(e,r);return n}});var wu=E(II=>{"use strict";Object.defineProperty(II,"__esModule",{value:!0});II.GAstVisitor=void 0;var lo=hn(),IIe=function(){function t(){}return t.prototype.visit=function(e){var r=e;switch(r.constructor){case lo.NonTerminal:return this.visitNonTerminal(r);case lo.Alternative:return this.visitAlternative(r);case lo.Option:return this.visitOption(r);case lo.RepetitionMandatory:return this.visitRepetitionMandatory(r);case lo.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(r);case lo.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(r);case lo.Repetition:return this.visitRepetition(r);case lo.Alternation:return this.visitAlternation(r);case lo.Terminal:return this.visitTerminal(r);case lo.Rule:return this.visitRule(r);default:throw Error("non exhaustive match")}},t.prototype.visitNonTerminal=function(e){},t.prototype.visitAlternative=function(e){},t.prototype.visitOption=function(e){},t.prototype.visitRepetition=function(e){},t.prototype.visitRepetitionMandatory=function(e){},t.prototype.visitRepetitionMandatoryWithSeparator=function(e){},t.prototype.visitRepetitionWithSeparator=function(e){},t.prototype.visitAlternation=function(e){},t.prototype.visitTerminal=function(e){},t.prototype.visitRule=function(e){},t}();II.GAstVisitor=IIe});var Jh=E(Si=>{"use strict";var yIe=Si&&Si.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function i(){this.constructor=e}e.prototype=r===null?Object.create(r):(i.prototype=r.prototype,new i)}}();Object.defineProperty(Si,"__esModule",{value:!0});Si.collectMethods=Si.DslMethodsCollectorVisitor=Si.getProductionDslName=Si.isBranchingProd=Si.isOptionalProd=Si.isSequenceProd=void 0;var qh=Dt(),dr=hn(),wIe=wu();function BIe(t){return t instanceof dr.Alternative||t instanceof dr.Option||t instanceof dr.Repetition||t instanceof dr.RepetitionMandatory||t instanceof dr.RepetitionMandatoryWithSeparator||t instanceof dr.RepetitionWithSeparator||t instanceof dr.Terminal||t instanceof dr.Rule}Si.isSequenceProd=BIe;function $v(t,e){e===void 0&&(e=[]);var r=t instanceof dr.Option||t instanceof dr.Repetition||t instanceof dr.RepetitionWithSeparator;return r?!0:t instanceof dr.Alternation?(0,qh.some)(t.definition,function(i){return $v(i,e)}):t instanceof dr.NonTerminal&&(0,qh.contains)(e,t)?!1:t instanceof dr.AbstractProduction?(t instanceof dr.NonTerminal&&e.push(t),(0,qh.every)(t.definition,function(i){return $v(i,e)})):!1}Si.isOptionalProd=$v;function QIe(t){return t instanceof dr.Alternation}Si.isBranchingProd=QIe;function bIe(t){if(t instanceof dr.NonTerminal)return"SUBRULE";if(t instanceof dr.Option)return"OPTION";if(t instanceof dr.Alternation)return"OR";if(t instanceof dr.RepetitionMandatory)return"AT_LEAST_ONE";if(t instanceof dr.RepetitionMandatoryWithSeparator)return"AT_LEAST_ONE_SEP";if(t instanceof dr.RepetitionWithSeparator)return"MANY_SEP";if(t instanceof dr.Repetition)return"MANY";if(t instanceof dr.Terminal)return"CONSUME";throw Error("non exhaustive match")}Si.getProductionDslName=bIe;var UG=function(t){yIe(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.separator="-",r.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},r}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(r){var i=r.terminalType.name+this.separator+"Terminal";(0,qh.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(r)},e.prototype.visitNonTerminal=function(r){var i=r.nonTerminalName+this.separator+"Terminal";(0,qh.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(r)},e.prototype.visitOption=function(r){this.dslMethods.option.push(r)},e.prototype.visitRepetitionWithSeparator=function(r){this.dslMethods.repetitionWithSeparator.push(r)},e.prototype.visitRepetitionMandatory=function(r){this.dslMethods.repetitionMandatory.push(r)},e.prototype.visitRepetitionMandatoryWithSeparator=function(r){this.dslMethods.repetitionMandatoryWithSeparator.push(r)},e.prototype.visitRepetition=function(r){this.dslMethods.repetition.push(r)},e.prototype.visitAlternation=function(r){this.dslMethods.alternation.push(r)},e}(wIe.GAstVisitor);Si.DslMethodsCollectorVisitor=UG;var yI=new UG;function vIe(t){yI.reset(),t.accept(yI);var e=yI.dslMethods;return yI.reset(),e}Si.collectMethods=vIe});var tS=E(co=>{"use strict";Object.defineProperty(co,"__esModule",{value:!0});co.firstForTerminal=co.firstForBranching=co.firstForSequence=co.first=void 0;var wI=Dt(),HG=hn(),eS=Jh();function BI(t){if(t instanceof HG.NonTerminal)return BI(t.referencedRule);if(t instanceof HG.Terminal)return YG(t);if((0,eS.isSequenceProd)(t))return GG(t);if((0,eS.isBranchingProd)(t))return jG(t);throw Error("non exhaustive match")}co.first=BI;function GG(t){for(var e=[],r=t.definition,i=0,n=r.length>i,s,o=!0;n&&o;)s=r[i],o=(0,eS.isOptionalProd)(s),e=e.concat(BI(s)),i=i+1,n=r.length>i;return(0,wI.uniq)(e)}co.firstForSequence=GG;function jG(t){var e=(0,wI.map)(t.definition,function(r){return BI(r)});return(0,wI.uniq)((0,wI.flatten)(e))}co.firstForBranching=jG;function YG(t){return[t.terminalType]}co.firstForTerminal=YG});var rS=E(QI=>{"use strict";Object.defineProperty(QI,"__esModule",{value:!0});QI.IN=void 0;QI.IN="_~IN~_"});var VG=E(es=>{"use strict";var SIe=es&&es.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function i(){this.constructor=e}e.prototype=r===null?Object.create(r):(i.prototype=r.prototype,new i)}}();Object.defineProperty(es,"__esModule",{value:!0});es.buildInProdFollowPrefix=es.buildBetweenProdsFollowPrefix=es.computeAllProdsFollows=es.ResyncFollowsWalker=void 0;var xIe=EI(),kIe=tS(),qG=Dt(),JG=rS(),PIe=hn(),zG=function(t){SIe(e,t);function e(r){var i=t.call(this)||this;return i.topProd=r,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(r,i,n){},e.prototype.walkProdRef=function(r,i,n){var s=WG(r.referencedRule,r.idx)+this.topProd.name,o=i.concat(n),a=new PIe.Alternative({definition:o}),l=(0,kIe.first)(a);this.follows[s]=l},e}(xIe.RestWalker);es.ResyncFollowsWalker=zG;function DIe(t){var e={};return(0,qG.forEach)(t,function(r){var i=new zG(r).startWalking();(0,qG.assign)(e,i)}),e}es.computeAllProdsFollows=DIe;function WG(t,e){return t.name+e+JG.IN}es.buildBetweenProdsFollowPrefix=WG;function RIe(t){var e=t.terminalType.name;return e+t.idx+JG.IN}es.buildInProdFollowPrefix=RIe});var Wh=E(aa=>{"use strict";Object.defineProperty(aa,"__esModule",{value:!0});aa.defaultGrammarValidatorErrorProvider=aa.defaultGrammarResolverErrorProvider=aa.defaultParserErrorProvider=void 0;var Bu=nA(),FIe=Dt(),Rs=Dt(),iS=hn(),_G=Jh();aa.defaultParserErrorProvider={buildMismatchTokenMessage:function(t){var e=t.expected,r=t.actual,i=t.previous,n=t.ruleName,s=(0,Bu.hasTokenLabel)(e),o=s?"--> "+(0,Bu.tokenLabel)(e)+" <--":"token of type --> "+e.name+" <--",a="Expecting "+o+" but found --> '"+r.image+"' <--";return a},buildNotAllInputParsedMessage:function(t){var e=t.firstRedundant,r=t.ruleName;return"Redundant input, expecting EOF but found: "+e.image},buildNoViableAltMessage:function(t){var e=t.expectedPathsPerAlt,r=t.actual,i=t.previous,n=t.customUserDescription,s=t.ruleName,o="Expecting: ",a=(0,Rs.first)(r).image,l=` +but found: '`+a+"'";if(n)return o+n+l;var c=(0,Rs.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,Rs.map)(c,function(h){return"["+(0,Rs.map)(h,function(p){return(0,Bu.tokenLabel)(p)}).join(", ")+"]"}),g=(0,Rs.map)(u,function(h,p){return" "+(p+1)+". "+h}),f=`one of these possible Token sequences: +`+g.join(` +`);return o+f+l},buildEarlyExitMessage:function(t){var e=t.expectedIterationPaths,r=t.actual,i=t.customUserDescription,n=t.ruleName,s="Expecting: ",o=(0,Rs.first)(r).image,a=` +but found: '`+o+"'";if(i)return s+i+a;var l=(0,Rs.map)(e,function(u){return"["+(0,Rs.map)(u,function(g){return(0,Bu.tokenLabel)(g)}).join(",")+"]"}),c=`expecting at least one iteration which starts with one of these possible Token sequences:: + `+("<"+l.join(" ,")+">");return s+c+a}};Object.freeze(aa.defaultParserErrorProvider);aa.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(t,e){var r="Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- +inside top level rule: ->`+t.name+"<-";return r}};aa.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(t,e){function r(u){return u instanceof iS.Terminal?u.terminalType.name:u instanceof iS.NonTerminal?u.nonTerminalName:""}var i=t.name,n=(0,Rs.first)(e),s=n.idx,o=(0,_G.getProductionDslName)(n),a=r(n),l=s>0,c="->"+o+(l?s:"")+"<- "+(a?"with argument: ->"+a+"<-":"")+` + appears more than once (`+e.length+" times) in the top level rule: ->"+i+`<-. + For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES + `;return c=c.replace(/[ \t]+/g," "),c=c.replace(/\s\s+/g,` +`),c},buildNamespaceConflictError:function(t){var e=`Namespace conflict found in grammar. +`+("The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <"+t.name+`>. +`)+`To resolve this make sure each Terminal and Non-Terminal names are unique +This is easy to accomplish by using the convention that Terminal names start with an uppercase letter +and Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(t){var e=(0,Rs.map)(t.prefixPath,function(n){return(0,Bu.tokenLabel)(n)}).join(", "),r=t.alternation.idx===0?"":t.alternation.idx,i="Ambiguous alternatives: <"+t.ambiguityIndices.join(" ,")+`> due to common lookahead prefix +`+("in inside <"+t.topLevelRule.name+`> Rule, +`)+("<"+e+`> may appears as a prefix path in all these alternatives. +`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX +For Further details.`;return i},buildAlternationAmbiguityError:function(t){var e=(0,Rs.map)(t.prefixPath,function(n){return(0,Bu.tokenLabel)(n)}).join(", "),r=t.alternation.idx===0?"":t.alternation.idx,i="Ambiguous Alternatives Detected: <"+t.ambiguityIndices.join(" ,")+"> in "+(" inside <"+t.topLevelRule.name+`> Rule, +`)+("<"+e+`> may appears as a prefix path in all these alternatives. +`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`,i},buildEmptyRepetitionError:function(t){var e=(0,_G.getProductionDslName)(t.repetition);t.repetition.idx!==0&&(e+=t.repetition.idx);var r="The repetition <"+e+"> within Rule <"+t.topLevelRule.name+`> can never consume any tokens. +This could lead to an infinite loop.`;return r},buildTokenNameError:function(t){return"deprecated"},buildEmptyAlternationError:function(t){var e="Ambiguous empty alternative: <"+(t.emptyChoiceIdx+1)+">"+(" in inside <"+t.topLevelRule.name+`> Rule. +`)+"Only the last alternative may be an empty alternative.";return e},buildTooManyAlternativesError:function(t){var e=`An Alternation cannot have more than 256 alternatives: +`+(" inside <"+t.topLevelRule.name+`> Rule. + has `+(t.alternation.definition.length+1)+" alternatives.");return e},buildLeftRecursionError:function(t){var e=t.topLevelRule.name,r=FIe.map(t.leftRecursionPath,function(s){return s.name}),i=e+" --> "+r.concat([e]).join(" --> "),n=`Left Recursion found in grammar. +`+("rule: <"+e+`> can be invoked from itself (directly or indirectly) +`)+(`without consuming any Tokens. The grammar path that causes this is: + `+i+` +`)+` To fix this refactor your grammar to remove the left recursion. +see: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(t){return"deprecated"},buildDuplicateRuleNameError:function(t){var e;t.topLevelRule instanceof iS.Rule?e=t.topLevelRule.name:e=t.topLevelRule;var r="Duplicate definition, rule: ->"+e+"<- is already defined in the grammar: ->"+t.grammarName+"<-";return r}}});var $G=E(sA=>{"use strict";var NIe=sA&&sA.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function i(){this.constructor=e}e.prototype=r===null?Object.create(r):(i.prototype=r.prototype,new i)}}();Object.defineProperty(sA,"__esModule",{value:!0});sA.GastRefResolverVisitor=sA.resolveGrammar=void 0;var LIe=Tn(),XG=Dt(),TIe=wu();function MIe(t,e){var r=new ZG(t,e);return r.resolveRefs(),r.errors}sA.resolveGrammar=MIe;var ZG=function(t){NIe(e,t);function e(r,i){var n=t.call(this)||this;return n.nameToTopRule=r,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var r=this;(0,XG.forEach)((0,XG.values)(this.nameToTopRule),function(i){r.currTopLevel=i,i.accept(r)})},e.prototype.visitNonTerminal=function(r){var i=this.nameToTopRule[r.nonTerminalName];if(i)r.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,r);this.errors.push({message:n,type:LIe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:r.nonTerminalName})}},e}(TIe.GAstVisitor);sA.GastRefResolverVisitor=ZG});var Vh=E(Br=>{"use strict";var Fl=Br&&Br.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function i(){this.constructor=e}e.prototype=r===null?Object.create(r):(i.prototype=r.prototype,new i)}}();Object.defineProperty(Br,"__esModule",{value:!0});Br.nextPossibleTokensAfter=Br.possiblePathsFrom=Br.NextTerminalAfterAtLeastOneSepWalker=Br.NextTerminalAfterAtLeastOneWalker=Br.NextTerminalAfterManySepWalker=Br.NextTerminalAfterManyWalker=Br.AbstractNextTerminalAfterProductionWalker=Br.NextAfterTokenWalker=Br.AbstractNextPossibleTokensWalker=void 0;var ej=EI(),xt=Dt(),OIe=tS(),It=hn(),tj=function(t){Fl(e,t);function e(r,i){var n=t.call(this)||this;return n.topProd=r,n.path=i,n.possibleTokTypes=[],n.nextProductionName="",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=(0,xt.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,xt.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(r,i){i===void 0&&(i=[]),this.found||t.prototype.walk.call(this,r,i)},e.prototype.walkProdRef=function(r,i,n){if(r.referencedRule.name===this.nextProductionName&&r.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(r.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,xt.isEmpty)(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(ej.RestWalker);Br.AbstractNextPossibleTokensWalker=tj;var KIe=function(t){Fl(e,t);function e(r,i){var n=t.call(this,r,i)||this;return n.path=i,n.nextTerminalName="",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(r,i,n){if(this.isAtEndOfPath&&r.terminalType.name===this.nextTerminalName&&r.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new It.Alternative({definition:s});this.possibleTokTypes=(0,OIe.first)(o),this.found=!0}},e}(tj);Br.NextAfterTokenWalker=KIe;var zh=function(t){Fl(e,t);function e(r,i){var n=t.call(this)||this;return n.topRule=r,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(ej.RestWalker);Br.AbstractNextTerminalAfterProductionWalker=zh;var UIe=function(t){Fl(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.walkMany=function(r,i,n){if(r.idx===this.occurrence){var s=(0,xt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof It.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else t.prototype.walkMany.call(this,r,i,n)},e}(zh);Br.NextTerminalAfterManyWalker=UIe;var HIe=function(t){Fl(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.walkManySep=function(r,i,n){if(r.idx===this.occurrence){var s=(0,xt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof It.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else t.prototype.walkManySep.call(this,r,i,n)},e}(zh);Br.NextTerminalAfterManySepWalker=HIe;var GIe=function(t){Fl(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(r,i,n){if(r.idx===this.occurrence){var s=(0,xt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof It.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else t.prototype.walkAtLeastOne.call(this,r,i,n)},e}(zh);Br.NextTerminalAfterAtLeastOneWalker=GIe;var jIe=function(t){Fl(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(r,i,n){if(r.idx===this.occurrence){var s=(0,xt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof It.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else t.prototype.walkAtLeastOneSep.call(this,r,i,n)},e}(zh);Br.NextTerminalAfterAtLeastOneSepWalker=jIe;function rj(t,e,r){r===void 0&&(r=[]),r=(0,xt.cloneArr)(r);var i=[],n=0;function s(c){return c.concat((0,xt.drop)(t,n+1))}function o(c){var u=rj(s(c),e,r);return i.concat(u)}for(;r.length=0;W--){var X=I.definition[W],F={idx:p,def:X.definition.concat((0,xt.drop)(h)),ruleStack:d,occurrenceStack:m};g.push(F),g.push(o)}else if(I instanceof It.Alternative)g.push({idx:p,def:I.definition.concat((0,xt.drop)(h)),ruleStack:d,occurrenceStack:m});else if(I instanceof It.Rule)g.push(YIe(I,p,d,m));else throw Error("non exhaustive match")}}return u}Br.nextPossibleTokensAfter=qIe;function YIe(t,e,r,i){var n=(0,xt.cloneArr)(r);n.push(t.name);var s=(0,xt.cloneArr)(i);return s.push(1),{idx:e,def:t.definition,ruleStack:n,occurrenceStack:s}}});var _h=E(Gt=>{"use strict";var ij=Gt&&Gt.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function i(){this.constructor=e}e.prototype=r===null?Object.create(r):(i.prototype=r.prototype,new i)}}();Object.defineProperty(Gt,"__esModule",{value:!0});Gt.areTokenCategoriesNotUsed=Gt.isStrictPrefixOfPath=Gt.containsPath=Gt.getLookaheadPathsForOptionalProd=Gt.getLookaheadPathsForOr=Gt.lookAheadSequenceFromAlternatives=Gt.buildSingleAlternativeLookaheadFunction=Gt.buildAlternativesLookAheadFunc=Gt.buildLookaheadFuncForOptionalProd=Gt.buildLookaheadFuncForOr=Gt.getProdType=Gt.PROD_TYPE=void 0;var _t=Dt(),nj=Vh(),JIe=EI(),bI=yu(),oA=hn(),WIe=wu(),zr;(function(t){t[t.OPTION=0]="OPTION",t[t.REPETITION=1]="REPETITION",t[t.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",t[t.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",t[t.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",t[t.ALTERNATION=5]="ALTERNATION"})(zr=Gt.PROD_TYPE||(Gt.PROD_TYPE={}));function zIe(t){if(t instanceof oA.Option)return zr.OPTION;if(t instanceof oA.Repetition)return zr.REPETITION;if(t instanceof oA.RepetitionMandatory)return zr.REPETITION_MANDATORY;if(t instanceof oA.RepetitionMandatoryWithSeparator)return zr.REPETITION_MANDATORY_WITH_SEPARATOR;if(t instanceof oA.RepetitionWithSeparator)return zr.REPETITION_WITH_SEPARATOR;if(t instanceof oA.Alternation)return zr.ALTERNATION;throw Error("non exhaustive match")}Gt.getProdType=zIe;function VIe(t,e,r,i,n,s){var o=sj(t,e,r),a=nS(o)?bI.tokenStructuredMatcherNoCategories:bI.tokenStructuredMatcher;return s(o,i,a,n)}Gt.buildLookaheadFuncForOr=VIe;function _Ie(t,e,r,i,n,s){var o=oj(t,e,n,r),a=nS(o)?bI.tokenStructuredMatcherNoCategories:bI.tokenStructuredMatcher;return s(o[0],a,i)}Gt.buildLookaheadFuncForOptionalProd=_Ie;function XIe(t,e,r,i){var n=t.length,s=(0,_t.every)(t,function(l){return(0,_t.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,_t.map)(l,function(b){return b.GATE}),u=0;u{"use strict";var aS=Mt&&Mt.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function i(){this.constructor=e}e.prototype=r===null?Object.create(r):(i.prototype=r.prototype,new i)}}();Object.defineProperty(Mt,"__esModule",{value:!0});Mt.checkPrefixAlternativesAmbiguities=Mt.validateSomeNonEmptyLookaheadPath=Mt.validateTooManyAlts=Mt.RepetionCollector=Mt.validateAmbiguousAlternationAlternatives=Mt.validateEmptyOrAlternative=Mt.getFirstNoneTerminal=Mt.validateNoLeftRecursion=Mt.validateRuleIsOverridden=Mt.validateRuleDoesNotAlreadyExist=Mt.OccurrenceValidationCollector=Mt.identifyProductionForDuplicates=Mt.validateGrammar=void 0;var jt=Dt(),Cr=Dt(),uo=Tn(),AS=Jh(),Qu=_h(),rye=Vh(),Fs=hn(),lS=wu();function sye(t,e,r,i,n){var s=jt.map(t,function(h){return iye(h,i)}),o=jt.map(t,function(h){return cS(h,h,i)}),a=[],l=[],c=[];(0,Cr.every)(o,Cr.isEmpty)&&(a=(0,Cr.map)(t,function(h){return uj(h,i)}),l=(0,Cr.map)(t,function(h){return gj(h,e,i)}),c=hj(t,e,i));var u=nye(t,r,i),g=(0,Cr.map)(t,function(h){return fj(h,i)}),f=(0,Cr.map)(t,function(h){return cj(h,t,n,i)});return jt.flatten(s.concat(c,o,a,l,u,g,f))}Mt.validateGrammar=sye;function iye(t,e){var r=new Cj;t.accept(r);var i=r.allProductions,n=jt.groupBy(i,pj),s=jt.pick(n,function(a){return a.length>1}),o=jt.map(jt.values(s),function(a){var l=jt.first(a),c=e.buildDuplicateFoundError(t,a),u=(0,AS.getProductionDslName)(l),g={message:c,type:uo.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:t.name,dslName:u,occurrence:l.idx},f=dj(l);return f&&(g.parameter=f),g});return o}function pj(t){return(0,AS.getProductionDslName)(t)+"_#_"+t.idx+"_#_"+dj(t)}Mt.identifyProductionForDuplicates=pj;function dj(t){return t instanceof Fs.Terminal?t.terminalType.name:t instanceof Fs.NonTerminal?t.nonTerminalName:""}var Cj=function(t){aS(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.allProductions=[],r}return e.prototype.visitNonTerminal=function(r){this.allProductions.push(r)},e.prototype.visitOption=function(r){this.allProductions.push(r)},e.prototype.visitRepetitionWithSeparator=function(r){this.allProductions.push(r)},e.prototype.visitRepetitionMandatory=function(r){this.allProductions.push(r)},e.prototype.visitRepetitionMandatoryWithSeparator=function(r){this.allProductions.push(r)},e.prototype.visitRepetition=function(r){this.allProductions.push(r)},e.prototype.visitAlternation=function(r){this.allProductions.push(r)},e.prototype.visitTerminal=function(r){this.allProductions.push(r)},e}(lS.GAstVisitor);Mt.OccurrenceValidationCollector=Cj;function cj(t,e,r,i){var n=[],s=(0,Cr.reduce)(e,function(a,l){return l.name===t.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:t,grammarName:r});n.push({message:o,type:uo.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:t.name})}return n}Mt.validateRuleDoesNotAlreadyExist=cj;function oye(t,e,r){var i=[],n;return jt.contains(e,t)||(n="Invalid rule override, rule: ->"+t+"<- cannot be overridden in the grammar: ->"+r+"<-as it is not defined in any of the super grammars ",i.push({message:n,type:uo.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:t})),i}Mt.validateRuleIsOverridden=oye;function cS(t,e,r,i){i===void 0&&(i=[]);var n=[],s=Xh(e.definition);if(jt.isEmpty(s))return[];var o=t.name,a=jt.contains(s,t);a&&n.push({message:r.buildLeftRecursionError({topLevelRule:t,leftRecursionPath:i}),type:uo.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=jt.difference(s,i.concat([t])),c=jt.map(l,function(u){var g=jt.cloneArr(i);return g.push(u),cS(t,u,r,g)});return n.concat(jt.flatten(c))}Mt.validateNoLeftRecursion=cS;function Xh(t){var e=[];if(jt.isEmpty(t))return e;var r=jt.first(t);if(r instanceof Fs.NonTerminal)e.push(r.referencedRule);else if(r instanceof Fs.Alternative||r instanceof Fs.Option||r instanceof Fs.RepetitionMandatory||r instanceof Fs.RepetitionMandatoryWithSeparator||r instanceof Fs.RepetitionWithSeparator||r instanceof Fs.Repetition)e=e.concat(Xh(r.definition));else if(r instanceof Fs.Alternation)e=jt.flatten(jt.map(r.definition,function(o){return Xh(o.definition)}));else if(!(r instanceof Fs.Terminal))throw Error("non exhaustive match");var i=(0,AS.isOptionalProd)(r),n=t.length>1;if(i&&n){var s=jt.drop(t);return e.concat(Xh(s))}else return e}Mt.getFirstNoneTerminal=Xh;var uS=function(t){aS(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.alternations=[],r}return e.prototype.visitAlternation=function(r){this.alternations.push(r)},e}(lS.GAstVisitor);function uj(t,e){var r=new uS;t.accept(r);var i=r.alternations,n=jt.reduce(i,function(s,o){var a=jt.dropRight(o.definition),l=jt.map(a,function(c,u){var g=(0,rye.nextPossibleTokensAfter)([c],[],null,1);return jt.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:t,alternation:o,emptyChoiceIdx:u}),type:uo.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:t.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(jt.compact(l))},[]);return n}Mt.validateEmptyOrAlternative=uj;function gj(t,e,r){var i=new uS;t.accept(i);var n=i.alternations;n=(0,Cr.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=jt.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,Qu.getLookaheadPathsForOr)(l,t,c,a),g=aye(u,a,t,r),f=mj(u,a,t,r);return o.concat(g,f)},[]);return s}Mt.validateAmbiguousAlternationAlternatives=gj;var Ej=function(t){aS(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.allProductions=[],r}return e.prototype.visitRepetitionWithSeparator=function(r){this.allProductions.push(r)},e.prototype.visitRepetitionMandatory=function(r){this.allProductions.push(r)},e.prototype.visitRepetitionMandatoryWithSeparator=function(r){this.allProductions.push(r)},e.prototype.visitRepetition=function(r){this.allProductions.push(r)},e}(lS.GAstVisitor);Mt.RepetionCollector=Ej;function fj(t,e){var r=new uS;t.accept(r);var i=r.alternations,n=jt.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:t,alternation:o}),type:uo.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:t.name,occurrence:o.idx}),s},[]);return n}Mt.validateTooManyAlts=fj;function hj(t,e,r){var i=[];return(0,Cr.forEach)(t,function(n){var s=new Ej;n.accept(s);var o=s.allProductions;(0,Cr.forEach)(o,function(a){var l=(0,Qu.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,Qu.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,Cr.isEmpty)((0,Cr.flatten)(f))){var h=r.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:uo.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}Mt.validateSomeNonEmptyLookaheadPath=hj;function aye(t,e,r,i){var n=[],s=(0,Cr.reduce)(t,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,Cr.forEach)(l,function(u){var g=[c];(0,Cr.forEach)(t,function(f,h){c!==h&&(0,Qu.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,Qu.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=jt.map(s,function(a){var l=(0,Cr.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:uo.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:r.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function mj(t,e,r,i){var n=[],s=(0,Cr.reduce)(t,function(o,a,l){var c=(0,Cr.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,Cr.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,Cr.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx{"use strict";Object.defineProperty(bu,"__esModule",{value:!0});bu.validateGrammar=bu.resolveGrammar=void 0;var fS=Dt(),Aye=$G(),lye=gS(),Ij=Wh();function cye(t){t=(0,fS.defaults)(t,{errMsgProvider:Ij.defaultGrammarResolverErrorProvider});var e={};return(0,fS.forEach)(t.rules,function(r){e[r.name]=r}),(0,Aye.resolveGrammar)(e,t.errMsgProvider)}bu.resolveGrammar=cye;function uye(t){return t=(0,fS.defaults)(t,{errMsgProvider:Ij.defaultGrammarValidatorErrorProvider}),(0,lye.validateGrammar)(t.rules,t.maxLookahead,t.tokenTypes,t.errMsgProvider,t.grammarName)}bu.validateGrammar=uye});var vu=E(dn=>{"use strict";var Zh=dn&&dn.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function i(){this.constructor=e}e.prototype=r===null?Object.create(r):(i.prototype=r.prototype,new i)}}();Object.defineProperty(dn,"__esModule",{value:!0});dn.EarlyExitException=dn.NotAllInputParsedException=dn.NoViableAltException=dn.MismatchedTokenException=dn.isRecognitionException=void 0;var gye=Dt(),wj="MismatchedTokenException",Bj="NoViableAltException",Qj="EarlyExitException",bj="NotAllInputParsedException",vj=[wj,Bj,Qj,bj];Object.freeze(vj);function fye(t){return(0,gye.contains)(vj,t.name)}dn.isRecognitionException=fye;var vI=function(t){Zh(e,t);function e(r,i){var n=this.constructor,s=t.call(this,r)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),hye=function(t){Zh(e,t);function e(r,i,n){var s=t.call(this,r,i)||this;return s.previousToken=n,s.name=wj,s}return e}(vI);dn.MismatchedTokenException=hye;var pye=function(t){Zh(e,t);function e(r,i,n){var s=t.call(this,r,i)||this;return s.previousToken=n,s.name=Bj,s}return e}(vI);dn.NoViableAltException=pye;var dye=function(t){Zh(e,t);function e(r,i){var n=t.call(this,r,i)||this;return n.name=bj,n}return e}(vI);dn.NotAllInputParsedException=dye;var Cye=function(t){Zh(e,t);function e(r,i,n){var s=t.call(this,r,i)||this;return s.previousToken=n,s.name=Qj,s}return e}(vI);dn.EarlyExitException=Cye});var pS=E(xi=>{"use strict";Object.defineProperty(xi,"__esModule",{value:!0});xi.attemptInRepetitionRecovery=xi.Recoverable=xi.InRuleRecoveryException=xi.IN_RULE_RECOVERY_EXCEPTION=xi.EOF_FOLLOW_KEY=void 0;var SI=nA(),ts=Dt(),mye=vu(),Eye=rS(),Iye=Tn();xi.EOF_FOLLOW_KEY={};xi.IN_RULE_RECOVERY_EXCEPTION="InRuleRecoveryException";function hS(t){this.name=xi.IN_RULE_RECOVERY_EXCEPTION,this.message=t}xi.InRuleRecoveryException=hS;hS.prototype=Error.prototype;var yye=function(){function t(){}return t.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,ts.has)(e,"recoveryEnabled")?e.recoveryEnabled:Iye.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=Sj)},t.prototype.getTokenToInsert=function(e){var r=(0,SI.createTokenInstance)(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return r.isInsertedInRecovery=!0,r},t.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},t.prototype.tryInRepetitionRecovery=function(e,r,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),d=new mye.MismatchedTokenException(p,u,s.LA(0));d.resyncedTokens=(0,ts.dropRight)(l),s.SAVE_ERROR(d)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,r);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},t.prototype.shouldInRepetitionRecoveryBeTried=function(e,r,i){return!(i===!1||e===void 0||r===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,r)))},t.prototype.getFollowsForInRuleRecovery=function(e,r){var i=this.getCurrentGrammarPath(e,r),n=this.getNextPossibleTokenTypes(i);return n},t.prototype.tryInRuleRecovery=function(e,r){if(this.canRecoverWithSingleTokenInsertion(e,r)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new hS("sad sad panda")},t.prototype.canPerformInRuleRecovery=function(e,r){return this.canRecoverWithSingleTokenInsertion(e,r)||this.canRecoverWithSingleTokenDeletion(e)},t.prototype.canRecoverWithSingleTokenInsertion=function(e,r){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,ts.isEmpty)(r))return!1;var n=this.LA(1),s=(0,ts.find)(r,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},t.prototype.canRecoverWithSingleTokenDeletion=function(e){var r=this.tokenMatcher(this.LA(2),e);return r},t.prototype.isInCurrentRuleReSyncSet=function(e){var r=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(r);return(0,ts.contains)(i,e)},t.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),r=this.LA(1),i=2;;){var n=r.tokenType;if((0,ts.contains)(e,n))return n;r=this.LA(i),i++}},t.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return xi.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),r=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:r,inRule:this.shortRuleNameToFullName(i)}},t.prototype.buildFullFollowKeyStack=function(){var e=this,r=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,ts.map)(r,function(n,s){return s===0?xi.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(r[s-1])}})},t.prototype.flattenFollowSet=function(){var e=this,r=(0,ts.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,ts.flatten)(r)},t.prototype.getFollowSetFromFollowKey=function(e){if(e===xi.EOF_FOLLOW_KEY)return[SI.EOF];var r=e.ruleName+e.idxInCallingRule+Eye.IN+e.inRule;return this.resyncFollows[r]},t.prototype.addToResyncTokens=function(e,r){return this.tokenMatcher(e,SI.EOF)||r.push(e),r},t.prototype.reSyncTo=function(e){for(var r=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,r);return(0,ts.dropRight)(r)},t.prototype.attemptInRepetitionRecovery=function(e,r,i,n,s,o,a){},t.prototype.getCurrentGrammarPath=function(e,r){var i=this.getHumanReadableRuleStack(),n=(0,ts.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:r};return s},t.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,ts.map)(this.RULE_STACK,function(r){return e.shortRuleNameToFullName(r)})},t}();xi.Recoverable=yye;function Sj(t,e,r,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=SI.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(t,e,r,f)}xi.attemptInRepetitionRecovery=Sj});var xI=E(Nt=>{"use strict";Object.defineProperty(Nt,"__esModule",{value:!0});Nt.getKeyForAutomaticLookahead=Nt.AT_LEAST_ONE_SEP_IDX=Nt.MANY_SEP_IDX=Nt.AT_LEAST_ONE_IDX=Nt.MANY_IDX=Nt.OPTION_IDX=Nt.OR_IDX=Nt.BITS_FOR_ALT_IDX=Nt.BITS_FOR_RULE_IDX=Nt.BITS_FOR_OCCURRENCE_IDX=Nt.BITS_FOR_METHOD_TYPE=void 0;Nt.BITS_FOR_METHOD_TYPE=4;Nt.BITS_FOR_OCCURRENCE_IDX=8;Nt.BITS_FOR_RULE_IDX=12;Nt.BITS_FOR_ALT_IDX=8;Nt.OR_IDX=1<{"use strict";Object.defineProperty(kI,"__esModule",{value:!0});kI.LooksAhead=void 0;var Aa=_h(),Ns=Dt(),xj=Tn(),la=xI(),Nl=Jh(),Bye=function(){function t(){}return t.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,Ns.has)(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:xj.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,Ns.has)(e,"maxLookahead")?e.maxLookahead:xj.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,Ns.isES2015MapSupported)()?new Map:[],(0,Ns.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},t.prototype.preComputeLookaheadFunctions=function(e){var r=this;(0,Ns.forEach)(e,function(i){r.TRACE_INIT(i.name+" Rule Lookahead",function(){var n=(0,Nl.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,Ns.forEach)(s,function(g){var f=g.idx===0?"":g.idx;r.TRACE_INIT(""+(0,Nl.getProductionDslName)(g)+f,function(){var h=(0,Aa.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||r.maxLookahead,g.hasPredicates,r.dynamicTokensEnabled,r.lookAheadBuilderForAlternatives),p=(0,la.getKeyForAutomaticLookahead)(r.fullRuleNameToShort[i.name],la.OR_IDX,g.idx);r.setLaFuncCache(p,h)})}),(0,Ns.forEach)(o,function(g){r.computeLookaheadFunc(i,g.idx,la.MANY_IDX,Aa.PROD_TYPE.REPETITION,g.maxLookahead,(0,Nl.getProductionDslName)(g))}),(0,Ns.forEach)(a,function(g){r.computeLookaheadFunc(i,g.idx,la.OPTION_IDX,Aa.PROD_TYPE.OPTION,g.maxLookahead,(0,Nl.getProductionDslName)(g))}),(0,Ns.forEach)(l,function(g){r.computeLookaheadFunc(i,g.idx,la.AT_LEAST_ONE_IDX,Aa.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,Nl.getProductionDslName)(g))}),(0,Ns.forEach)(c,function(g){r.computeLookaheadFunc(i,g.idx,la.AT_LEAST_ONE_SEP_IDX,Aa.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,Nl.getProductionDslName)(g))}),(0,Ns.forEach)(u,function(g){r.computeLookaheadFunc(i,g.idx,la.MANY_SEP_IDX,Aa.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,Nl.getProductionDslName)(g))})})})},t.prototype.computeLookaheadFunc=function(e,r,i,n,s,o){var a=this;this.TRACE_INIT(""+o+(r===0?"":r),function(){var l=(0,Aa.buildLookaheadFuncForOptionalProd)(r,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,la.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,r);a.setLaFuncCache(c,l)})},t.prototype.lookAheadBuilderForOptional=function(e,r,i){return(0,Aa.buildSingleAlternativeLookaheadFunction)(e,r,i)},t.prototype.lookAheadBuilderForAlternatives=function(e,r,i,n){return(0,Aa.buildAlternativesLookAheadFunc)(e,r,i,n)},t.prototype.getKeyForAutomaticLookahead=function(e,r){var i=this.getLastExplicitRuleShortName();return(0,la.getKeyForAutomaticLookahead)(i,e,r)},t.prototype.getLaFuncFromCache=function(e){},t.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},t.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},t.prototype.setLaFuncCache=function(e,r){},t.prototype.setLaFuncCacheUsingMap=function(e,r){this.lookAheadFuncsCache.set(e,r)},t.prototype.setLaFuncUsingObj=function(e,r){this.lookAheadFuncsCache[e]=r},t}();kI.LooksAhead=Bye});var Pj=E(go=>{"use strict";Object.defineProperty(go,"__esModule",{value:!0});go.addNoneTerminalToCst=go.addTerminalToCst=go.setNodeLocationFull=go.setNodeLocationOnlyOffset=void 0;function Qye(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.endOffset=e.endOffset):t.endOffset{"use strict";Object.defineProperty(aA,"__esModule",{value:!0});aA.defineNameProp=aA.functionName=aA.classNameFromInstance=void 0;var xye=Dt();function kye(t){return Dj(t.constructor)}aA.classNameFromInstance=kye;var Rj="name";function Dj(t){var e=t.name;return e||"anonymous"}aA.functionName=Dj;function Pye(t,e){var r=Object.getOwnPropertyDescriptor(t,Rj);return(0,xye.isUndefined)(r)||r.configurable?(Object.defineProperty(t,Rj,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}aA.defineNameProp=Pye});var Mj=E(mi=>{"use strict";Object.defineProperty(mi,"__esModule",{value:!0});mi.validateRedundantMethods=mi.validateMissingCstMethods=mi.validateVisitor=mi.CstVisitorDefinitionError=mi.createBaseVisitorConstructorWithDefaults=mi.createBaseSemanticVisitorConstructor=mi.defaultVisit=void 0;var rs=Dt(),$h=dS();function Fj(t,e){for(var r=(0,rs.keys)(t),i=r.length,n=0;n: + `+(""+s.join(` + +`).replace(/\n/g,` + `)))}}};return r.prototype=i,r.prototype.constructor=r,r._RULE_NAMES=e,r}mi.createBaseSemanticVisitorConstructor=Dye;function Rye(t,e,r){var i=function(){};(0,$h.defineNameProp)(i,t+"BaseSemanticsWithDefaults");var n=Object.create(r.prototype);return(0,rs.forEach)(e,function(s){n[s]=Fj}),i.prototype=n,i.prototype.constructor=i,i}mi.createBaseVisitorConstructorWithDefaults=Rye;var CS;(function(t){t[t.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",t[t.MISSING_METHOD=1]="MISSING_METHOD"})(CS=mi.CstVisitorDefinitionError||(mi.CstVisitorDefinitionError={}));function Nj(t,e){var r=Lj(t,e),i=Tj(t,e);return r.concat(i)}mi.validateVisitor=Nj;function Lj(t,e){var r=(0,rs.map)(e,function(i){if(!(0,rs.isFunction)(t[i]))return{msg:"Missing visitor method: <"+i+"> on "+(0,$h.functionName)(t.constructor)+" CST Visitor.",type:CS.MISSING_METHOD,methodName:i}});return(0,rs.compact)(r)}mi.validateMissingCstMethods=Lj;var Fye=["constructor","visit","validateVisitor"];function Tj(t,e){var r=[];for(var i in t)(0,rs.isFunction)(t[i])&&!(0,rs.contains)(Fye,i)&&!(0,rs.contains)(e,i)&&r.push({msg:"Redundant visitor method: <"+i+"> on "+(0,$h.functionName)(t.constructor)+` CST Visitor +There is no Grammar Rule corresponding to this method's name. +`,type:CS.REDUNDANT_METHOD,methodName:i});return r}mi.validateRedundantMethods=Tj});var Kj=E(PI=>{"use strict";Object.defineProperty(PI,"__esModule",{value:!0});PI.TreeBuilder=void 0;var Su=Pj(),Ur=Dt(),Oj=Mj(),Nye=Tn(),Lye=function(){function t(){}return t.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,Ur.has)(e,"nodeLocationTracking")?e.nodeLocationTracking:Nye.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=Ur.NOOP,this.cstFinallyStateUpdate=Ur.NOOP,this.cstPostTerminal=Ur.NOOP,this.cstPostNonTerminal=Ur.NOOP,this.cstPostRule=Ur.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=Su.setNodeLocationFull,this.setNodeLocationFromNode=Su.setNodeLocationFull,this.cstPostRule=Ur.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=Ur.NOOP,this.setNodeLocationFromNode=Ur.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=Su.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=Su.setNodeLocationOnlyOffset,this.cstPostRule=Ur.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=Ur.NOOP,this.setNodeLocationFromNode=Ur.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=Ur.NOOP,this.setNodeLocationFromNode=Ur.NOOP,this.cstPostRule=Ur.NOOP,this.setInitialNodeLocation=Ur.NOOP;else throw Error('Invalid config option: "'+e.nodeLocationTracking+'"')},t.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},t.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},t.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},t.prototype.setInitialNodeLocationFullRegular=function(e){var r=this.LA(1);e.location={startOffset:r.startOffset,startLine:r.startLine,startColumn:r.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},t.prototype.cstInvocationStateUpdate=function(e,r){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},t.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},t.prototype.cstPostRuleFull=function(e){var r=this.LA(0),i=e.location;i.startOffset<=r.startOffset?(i.endOffset=r.endOffset,i.endLine=r.endLine,i.endColumn=r.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},t.prototype.cstPostRuleOnlyOffset=function(e){var r=this.LA(0),i=e.location;i.startOffset<=r.startOffset?i.endOffset=r.endOffset:i.startOffset=NaN},t.prototype.cstPostTerminal=function(e,r){var i=this.CST_STACK[this.CST_STACK.length-1];(0,Su.addTerminalToCst)(i,r,e),this.setNodeLocationFromToken(i.location,r)},t.prototype.cstPostNonTerminal=function(e,r){var i=this.CST_STACK[this.CST_STACK.length-1];(0,Su.addNoneTerminalToCst)(i,r,e),this.setNodeLocationFromNode(i.location,e.location)},t.prototype.getBaseCstVisitorConstructor=function(){if((0,Ur.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,Oj.createBaseSemanticVisitorConstructor)(this.className,(0,Ur.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},t.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,Ur.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,Oj.createBaseVisitorConstructorWithDefaults)(this.className,(0,Ur.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},t.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},t.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},t.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},t}();PI.TreeBuilder=Lye});var Hj=E(DI=>{"use strict";Object.defineProperty(DI,"__esModule",{value:!0});DI.LexerAdapter=void 0;var Uj=Tn(),Tye=function(){function t(){}return t.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(t.prototype,"input",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),t.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):Uj.END_OF_FILE},t.prototype.LA=function(e){var r=this.currIdx+e;return r<0||this.tokVectorLength<=r?Uj.END_OF_FILE:this.tokVector[r]},t.prototype.consumeToken=function(){this.currIdx++},t.prototype.exportLexerState=function(){return this.currIdx},t.prototype.importLexerState=function(e){this.currIdx=e},t.prototype.resetLexerState=function(){this.currIdx=-1},t.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},t.prototype.getLexerPosition=function(){return this.exportLexerState()},t}();DI.LexerAdapter=Tye});var jj=E(RI=>{"use strict";Object.defineProperty(RI,"__esModule",{value:!0});RI.RecognizerApi=void 0;var Gj=Dt(),Mye=vu(),mS=Tn(),Oye=Wh(),Kye=gS(),Uye=hn(),Hye=function(){function t(){}return t.prototype.ACTION=function(e){return e.call(this)},t.prototype.consume=function(e,r,i){return this.consumeInternal(r,e,i)},t.prototype.subrule=function(e,r,i){return this.subruleInternal(r,e,i)},t.prototype.option=function(e,r){return this.optionInternal(r,e)},t.prototype.or=function(e,r){return this.orInternal(r,e)},t.prototype.many=function(e,r){return this.manyInternal(e,r)},t.prototype.atLeastOne=function(e,r){return this.atLeastOneInternal(e,r)},t.prototype.CONSUME=function(e,r){return this.consumeInternal(e,0,r)},t.prototype.CONSUME1=function(e,r){return this.consumeInternal(e,1,r)},t.prototype.CONSUME2=function(e,r){return this.consumeInternal(e,2,r)},t.prototype.CONSUME3=function(e,r){return this.consumeInternal(e,3,r)},t.prototype.CONSUME4=function(e,r){return this.consumeInternal(e,4,r)},t.prototype.CONSUME5=function(e,r){return this.consumeInternal(e,5,r)},t.prototype.CONSUME6=function(e,r){return this.consumeInternal(e,6,r)},t.prototype.CONSUME7=function(e,r){return this.consumeInternal(e,7,r)},t.prototype.CONSUME8=function(e,r){return this.consumeInternal(e,8,r)},t.prototype.CONSUME9=function(e,r){return this.consumeInternal(e,9,r)},t.prototype.SUBRULE=function(e,r){return this.subruleInternal(e,0,r)},t.prototype.SUBRULE1=function(e,r){return this.subruleInternal(e,1,r)},t.prototype.SUBRULE2=function(e,r){return this.subruleInternal(e,2,r)},t.prototype.SUBRULE3=function(e,r){return this.subruleInternal(e,3,r)},t.prototype.SUBRULE4=function(e,r){return this.subruleInternal(e,4,r)},t.prototype.SUBRULE5=function(e,r){return this.subruleInternal(e,5,r)},t.prototype.SUBRULE6=function(e,r){return this.subruleInternal(e,6,r)},t.prototype.SUBRULE7=function(e,r){return this.subruleInternal(e,7,r)},t.prototype.SUBRULE8=function(e,r){return this.subruleInternal(e,8,r)},t.prototype.SUBRULE9=function(e,r){return this.subruleInternal(e,9,r)},t.prototype.OPTION=function(e){return this.optionInternal(e,0)},t.prototype.OPTION1=function(e){return this.optionInternal(e,1)},t.prototype.OPTION2=function(e){return this.optionInternal(e,2)},t.prototype.OPTION3=function(e){return this.optionInternal(e,3)},t.prototype.OPTION4=function(e){return this.optionInternal(e,4)},t.prototype.OPTION5=function(e){return this.optionInternal(e,5)},t.prototype.OPTION6=function(e){return this.optionInternal(e,6)},t.prototype.OPTION7=function(e){return this.optionInternal(e,7)},t.prototype.OPTION8=function(e){return this.optionInternal(e,8)},t.prototype.OPTION9=function(e){return this.optionInternal(e,9)},t.prototype.OR=function(e){return this.orInternal(e,0)},t.prototype.OR1=function(e){return this.orInternal(e,1)},t.prototype.OR2=function(e){return this.orInternal(e,2)},t.prototype.OR3=function(e){return this.orInternal(e,3)},t.prototype.OR4=function(e){return this.orInternal(e,4)},t.prototype.OR5=function(e){return this.orInternal(e,5)},t.prototype.OR6=function(e){return this.orInternal(e,6)},t.prototype.OR7=function(e){return this.orInternal(e,7)},t.prototype.OR8=function(e){return this.orInternal(e,8)},t.prototype.OR9=function(e){return this.orInternal(e,9)},t.prototype.MANY=function(e){this.manyInternal(0,e)},t.prototype.MANY1=function(e){this.manyInternal(1,e)},t.prototype.MANY2=function(e){this.manyInternal(2,e)},t.prototype.MANY3=function(e){this.manyInternal(3,e)},t.prototype.MANY4=function(e){this.manyInternal(4,e)},t.prototype.MANY5=function(e){this.manyInternal(5,e)},t.prototype.MANY6=function(e){this.manyInternal(6,e)},t.prototype.MANY7=function(e){this.manyInternal(7,e)},t.prototype.MANY8=function(e){this.manyInternal(8,e)},t.prototype.MANY9=function(e){this.manyInternal(9,e)},t.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},t.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},t.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},t.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},t.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},t.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},t.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},t.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},t.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},t.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},t.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},t.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},t.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},t.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},t.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},t.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},t.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},t.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},t.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},t.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},t.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},t.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},t.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},t.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},t.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},t.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},t.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},t.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},t.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},t.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},t.prototype.RULE=function(e,r,i){if(i===void 0&&(i=mS.DEFAULT_RULE_CONFIG),(0,Gj.contains)(this.definedRulesNames,e)){var n=Oye.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:mS.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,r,i);return this[e]=o,o},t.prototype.OVERRIDE_RULE=function(e,r,i){i===void 0&&(i=mS.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,Kye.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,r,i);return this[e]=s,s},t.prototype.BACKTRACK=function(e,r){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,r),!0}catch(n){if((0,Mye.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},t.prototype.getGAstProductions=function(){return this.gastProductionsCache},t.prototype.getSerializedGastProductions=function(){return(0,Uye.serializeGrammar)((0,Gj.values)(this.gastProductionsCache))},t}();RI.RecognizerApi=Hye});var Wj=E(FI=>{"use strict";Object.defineProperty(FI,"__esModule",{value:!0});FI.RecognizerEngine=void 0;var Er=Dt(),Mn=xI(),NI=vu(),Yj=_h(),xu=Vh(),qj=Tn(),Gye=pS(),Jj=nA(),ep=yu(),jye=dS(),Yye=function(){function t(){}return t.prototype.initRecognizerEngine=function(e,r){if(this.className=(0,jye.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=ep.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,Er.has)(r,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 + For Further details.`);if((0,Er.isArray)(e)){if((0,Er.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty. + Note that the first argument for the parser constructor + is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 + For Further details.`)}if((0,Er.isArray)(e))this.tokensMap=(0,Er.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,Er.has)(e,"modes")&&(0,Er.every)((0,Er.flatten)((0,Er.values)(e.modes)),ep.isTokenType)){var i=(0,Er.flatten)((0,Er.values)(e.modes)),n=(0,Er.uniq)(i);this.tokensMap=(0,Er.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,Er.isObject)(e))this.tokensMap=(0,Er.cloneObj)(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=Jj.EOF;var s=(0,Er.every)((0,Er.values)(e),function(o){return(0,Er.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?ep.tokenStructuredMatcherNoCategories:ep.tokenStructuredMatcher,(0,ep.augmentTokenTypes)((0,Er.values)(this.tokensMap))},t.prototype.defineRule=function(e,r,i){if(this.selfAnalysisDone)throw Error("Grammar rule <"+e+`> may not be defined after the 'performSelfAnalysis' method has been called' +Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,Er.has)(i,"resyncEnabled")?i.resyncEnabled:qj.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,Er.has)(i,"recoveryValueFunc")?i.recoveryValueFunc:qj.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<r},t.prototype.orInternal=function(e,r){var i=this.getKeyForAutomaticLookahead(Mn.OR_IDX,r),n=(0,Er.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(r,e.ERR_MSG)},t.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),r=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new NI.NotAllInputParsedException(r,e))}},t.prototype.subruleInternal=function(e,r,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,r,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},t.prototype.subruleInternalError=function(e,r,i){throw(0,NI.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,r!==void 0&&r.LABEL!==void 0?r.LABEL:i),delete e.partialCstResult),e},t.prototype.consumeInternal=function(e,r,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,r,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},t.prototype.consumeInternalError=function(e,r,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:r,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new NI.MismatchedTokenException(n,r,s))},t.prototype.consumeInternalRecovery=function(e,r,i){if(this.recoveryEnabled&&i.name==="MismatchedTokenException"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,r);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===Gye.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},t.prototype.saveRecogState=function(){var e=this.errors,r=(0,Er.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:r,CST_STACK:this.CST_STACK}},t.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},t.prototype.ruleInvocationStateUpdate=function(e,r,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(r,e)},t.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},t.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},t.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},t.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),Jj.EOF)},t.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},t}();FI.RecognizerEngine=Yye});var Vj=E(LI=>{"use strict";Object.defineProperty(LI,"__esModule",{value:!0});LI.ErrorHandler=void 0;var ES=vu(),IS=Dt(),zj=_h(),qye=Tn(),Jye=function(){function t(){}return t.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,IS.has)(e,"errorMessageProvider")?e.errorMessageProvider:qye.DEFAULT_PARSER_CONFIG.errorMessageProvider},t.prototype.SAVE_ERROR=function(e){if((0,ES.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,IS.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")},Object.defineProperty(t.prototype,"errors",{get:function(){return(0,IS.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),t.prototype.raiseEarlyExitException=function(e,r,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,zj.getLookaheadPathsForOptionalProd)(e,s,r,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new ES.EarlyExitException(u,this.LA(1),this.LA(0)))},t.prototype.raiseNoAltException=function(e,r){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,zj.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:r,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new ES.NoViableAltException(c,this.LA(1),l))},t}();LI.ErrorHandler=Jye});var Zj=E(TI=>{"use strict";Object.defineProperty(TI,"__esModule",{value:!0});TI.ContentAssist=void 0;var _j=Vh(),Xj=Dt(),Wye=function(){function t(){}return t.prototype.initContentAssist=function(){},t.prototype.computeContentAssist=function(e,r){var i=this.gastProductionsCache[e];if((0,Xj.isUndefined)(i))throw Error("Rule ->"+e+"<- does not exist in this grammar.");return(0,_j.nextPossibleTokensAfter)([i],r,this.tokenMatcher,this.maxLookahead)},t.prototype.getNextPossibleTokenTypes=function(e){var r=(0,Xj.first)(e.ruleStack),i=this.getGAstProductions(),n=i[r],s=new _j.NextAfterTokenWalker(n,e).startWalking();return s},t}();TI.ContentAssist=Wye});var oY=E(MI=>{"use strict";Object.defineProperty(MI,"__esModule",{value:!0});MI.GastRecorder=void 0;var Cn=Dt(),fo=hn(),zye=Gh(),$j=yu(),eY=nA(),Vye=Tn(),_ye=xI(),OI={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(OI);var tY=!0,rY=Math.pow(2,_ye.BITS_FOR_OCCURRENCE_IDX)-1,iY=(0,eY.createToken)({name:"RECORDING_PHASE_TOKEN",pattern:zye.Lexer.NA});(0,$j.augmentTokenTypes)([iY]);var nY=(0,eY.createTokenInstance)(iY,`This IToken indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(nY);var Xye={name:`This CSTNode indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},$ye=function(){function t(){}return t.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},t.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",function(){for(var r=function(n){var s=n>0?n:"";e["CONSUME"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e["SUBRULE"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e["OPTION"+s]=function(o){return this.optionInternalRecord(o,n)},e["OR"+s]=function(o){return this.orInternalRecord(o,n)},e["MANY"+s]=function(o){this.manyInternalRecord(n,o)},e["MANY_SEP"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e["AT_LEAST_ONE"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e["AT_LEAST_ONE_SEP"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)r(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},t.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",function(){for(var r=0;r<10;r++){var i=r>0?r:"";delete e["CONSUME"+i],delete e["SUBRULE"+i],delete e["OPTION"+i],delete e["OR"+i],delete e["MANY"+i],delete e["MANY_SEP"+i],delete e["AT_LEAST_ONE"+i],delete e["AT_LEAST_ONE_SEP"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},t.prototype.ACTION_RECORD=function(e){},t.prototype.BACKTRACK_RECORD=function(e,r){return function(){return!0}},t.prototype.LA_RECORD=function(e){return Vye.END_OF_FILE},t.prototype.topLevelRuleRecord=function(e,r){try{var i=new fo.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),r.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+` + This error was thrown during the "grammar recording phase" For more info see: + https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch(s){throw n}throw n}},t.prototype.optionInternalRecord=function(e,r){return tp.call(this,fo.Option,e,r)},t.prototype.atLeastOneInternalRecord=function(e,r){tp.call(this,fo.RepetitionMandatory,r,e)},t.prototype.atLeastOneSepFirstInternalRecord=function(e,r){tp.call(this,fo.RepetitionMandatoryWithSeparator,r,e,tY)},t.prototype.manyInternalRecord=function(e,r){tp.call(this,fo.Repetition,r,e)},t.prototype.manySepFirstInternalRecord=function(e,r){tp.call(this,fo.RepetitionWithSeparator,r,e,tY)},t.prototype.orInternalRecord=function(e,r){return Zye.call(this,e,r)},t.prototype.subruleInternalRecord=function(e,r,i){if(KI(r),!e||(0,Cn.has)(e,"ruleName")===!1){var n=new Error(" argument is invalid"+(" expecting a Parser method reference but got: <"+JSON.stringify(e)+">")+(` + inside top level rule: <`+this.recordingProdStack[0].name+">"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,Cn.peek)(this.recordingProdStack),o=e.ruleName,a=new fo.NonTerminal({idx:r,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?Xye:OI},t.prototype.consumeInternalRecord=function(e,r,i){if(KI(r),!(0,$j.hasShortKeyProperty)(e)){var n=new Error(" argument is invalid"+(" expecting a TokenType reference but got: <"+JSON.stringify(e)+">")+(` + inside top level rule: <`+this.recordingProdStack[0].name+">"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,Cn.peek)(this.recordingProdStack),o=new fo.Terminal({idx:r,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),nY},t}();MI.GastRecorder=$ye;function tp(t,e,r,i){i===void 0&&(i=!1),KI(r);var n=(0,Cn.peek)(this.recordingProdStack),s=(0,Cn.isFunction)(e)?e:e.DEF,o=new t({definition:[],idx:r});return i&&(o.separator=e.SEP),(0,Cn.has)(e,"MAX_LOOKAHEAD")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),OI}function Zye(t,e){var r=this;KI(e);var i=(0,Cn.peek)(this.recordingProdStack),n=(0,Cn.isArray)(t)===!1,s=n===!1?t:t.DEF,o=new fo.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&t.IGNORE_AMBIGUITIES===!0});(0,Cn.has)(t,"MAX_LOOKAHEAD")&&(o.maxLookahead=t.MAX_LOOKAHEAD);var a=(0,Cn.some)(s,function(l){return(0,Cn.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,Cn.forEach)(s,function(l){var c=new fo.Alternative({definition:[]});o.definition.push(c),(0,Cn.has)(l,"IGNORE_AMBIGUITIES")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,Cn.has)(l,"GATE")&&(c.ignoreAmbiguities=!0),r.recordingProdStack.push(c),l.ALT.call(r),r.recordingProdStack.pop()}),OI}function sY(t){return t===0?"":""+t}function KI(t){if(t<0||t>rY){var e=new Error("Invalid DSL Method idx value: <"+t+`> + `+("Idx value must be a none negative value smaller than "+(rY+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var AY=E(UI=>{"use strict";Object.defineProperty(UI,"__esModule",{value:!0});UI.PerformanceTracer=void 0;var aY=Dt(),ewe=Tn(),twe=function(){function t(){}return t.prototype.initPerformanceTracer=function(e){if((0,aY.has)(e,"traceInitPerf")){var r=e.traceInitPerf,i=typeof r=="number";this.traceInitMaxIdent=i?r:Infinity,this.traceInitPerf=i?r>0:r}else this.traceInitMaxIdent=0,this.traceInitPerf=ewe.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},t.prototype.TRACE_INIT=function(e,r){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <"+e+">");var n=(0,aY.timer)(r),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent time: "+s+"ms"),this.traceInitIndent--,o}else return r()},t}();UI.PerformanceTracer=twe});var lY=E(HI=>{"use strict";Object.defineProperty(HI,"__esModule",{value:!0});HI.applyMixins=void 0;function rwe(t,e){e.forEach(function(r){var i=r.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!=="constructor"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(t.prototype,n,s):t.prototype[n]=r.prototype[n]}})})}HI.applyMixins=rwe});var Tn=E(or=>{"use strict";var cY=or&&or.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function i(){this.constructor=e}e.prototype=r===null?Object.create(r):(i.prototype=r.prototype,new i)}}();Object.defineProperty(or,"__esModule",{value:!0});or.EmbeddedActionsParser=or.CstParser=or.Parser=or.EMPTY_ALT=or.ParserDefinitionErrorType=or.DEFAULT_RULE_CONFIG=or.DEFAULT_PARSER_CONFIG=or.END_OF_FILE=void 0;var Wi=Dt(),iwe=VG(),uY=nA(),gY=Wh(),fY=yj(),nwe=pS(),swe=kj(),owe=Kj(),awe=Hj(),Awe=jj(),lwe=Wj(),cwe=Vj(),uwe=Zj(),gwe=oY(),fwe=AY(),hwe=lY();or.END_OF_FILE=(0,uY.createTokenInstance)(uY.EOF,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(or.END_OF_FILE);or.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:gY.defaultParserErrorProvider,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1});or.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var pwe;(function(t){t[t.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",t[t.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",t[t.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",t[t.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",t[t.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",t[t.LEFT_RECURSION=5]="LEFT_RECURSION",t[t.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",t[t.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",t[t.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",t[t.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",t[t.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",t[t.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",t[t.TOO_MANY_ALTS=12]="TOO_MANY_ALTS"})(pwe=or.ParserDefinitionErrorType||(or.ParserDefinitionErrorType={}));function dwe(t){return t===void 0&&(t=void 0),function(){return t}}or.EMPTY_ALT=dwe;var GI=function(){function t(e,r){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(r),i.initLexerAdapter(),i.initLooksAhead(r),i.initRecognizerEngine(e,r),i.initRecoverable(r),i.initTreeBuilder(r),i.initContentAssist(),i.initGastRecorder(r),i.initPerformanceTracer(r),(0,Wi.has)(r,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. + Please use the flag on the relevant DSL method instead. + See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES + For further details.`);this.skipValidations=(0,Wi.has)(r,"skipValidations")?r.skipValidations:or.DEFAULT_PARSER_CONFIG.skipValidations}return t.performSelfAnalysis=function(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")},t.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT("performSelfAnalysis",function(){var r;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT("toFastProps",function(){(0,Wi.toFastProperties)(e)}),e.TRACE_INIT("Grammar Recording",function(){try{e.enableRecording(),(0,Wi.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+" Rule",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT("Grammar Resolving",function(){n=(0,fY.resolveGrammar)({rules:(0,Wi.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT("Grammar Validations",function(){if((0,Wi.isEmpty)(n)&&e.skipValidations===!1){var s=(0,fY.validateGrammar)({rules:(0,Wi.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,Wi.values)(e.tokensMap),errMsgProvider:gY.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,Wi.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT("computeAllProdsFollows",function(){var s=(0,iwe.computeAllProdsFollows)((0,Wi.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT("ComputeLookaheadFunctions",function(){e.preComputeLookaheadFunctions((0,Wi.values)(e.gastProductionsCache))})),!t.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,Wi.isEmpty)(e.definitionErrors))throw r=(0,Wi.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected: + `+r.join(` +------------------------------- +`))})},t.DEFER_DEFINITION_ERRORS_HANDLING=!1,t}();or.Parser=GI;(0,hwe.applyMixins)(GI,[nwe.Recoverable,swe.LooksAhead,owe.TreeBuilder,awe.LexerAdapter,lwe.RecognizerEngine,Awe.RecognizerApi,cwe.ErrorHandler,uwe.ContentAssist,gwe.GastRecorder,fwe.PerformanceTracer]);var Cwe=function(t){cY(e,t);function e(r,i){i===void 0&&(i=or.DEFAULT_PARSER_CONFIG);var n=this,s=(0,Wi.cloneObj)(i);return s.outputCst=!0,n=t.call(this,r,s)||this,n}return e}(GI);or.CstParser=Cwe;var mwe=function(t){cY(e,t);function e(r,i){i===void 0&&(i=or.DEFAULT_PARSER_CONFIG);var n=this,s=(0,Wi.cloneObj)(i);return s.outputCst=!1,n=t.call(this,r,s)||this,n}return e}(GI);or.EmbeddedActionsParser=mwe});var pY=E(jI=>{"use strict";Object.defineProperty(jI,"__esModule",{value:!0});jI.createSyntaxDiagramsCode=void 0;var hY=Uv();function Ewe(t,e){var r=e===void 0?{}:e,i=r.resourceBase,n=i===void 0?"https://unpkg.com/chevrotain@"+hY.VERSION+"/diagrams/":i,s=r.css,o=s===void 0?"https://unpkg.com/chevrotain@"+hY.VERSION+"/diagrams/diagrams.css":s,a=` + + + + + +`,l=` + +`,c=` + + + + +`,u=` +
+`,g=` + +`,f=` + +`;return a+l+c+u+g+f}jI.createSyntaxDiagramsCode=Ewe});var mY=E(He=>{"use strict";Object.defineProperty(He,"__esModule",{value:!0});He.Parser=He.createSyntaxDiagramsCode=He.clearCache=He.GAstVisitor=He.serializeProduction=He.serializeGrammar=He.Terminal=He.Rule=He.RepetitionWithSeparator=He.RepetitionMandatoryWithSeparator=He.RepetitionMandatory=He.Repetition=He.Option=He.NonTerminal=He.Alternative=He.Alternation=He.defaultLexerErrorProvider=He.NoViableAltException=He.NotAllInputParsedException=He.MismatchedTokenException=He.isRecognitionException=He.EarlyExitException=He.defaultParserErrorProvider=He.tokenName=He.tokenMatcher=He.tokenLabel=He.EOF=He.createTokenInstance=He.createToken=He.LexerDefinitionErrorType=He.Lexer=He.EMPTY_ALT=He.ParserDefinitionErrorType=He.EmbeddedActionsParser=He.CstParser=He.VERSION=void 0;var Iwe=Uv();Object.defineProperty(He,"VERSION",{enumerable:!0,get:function(){return Iwe.VERSION}});var YI=Tn();Object.defineProperty(He,"CstParser",{enumerable:!0,get:function(){return YI.CstParser}});Object.defineProperty(He,"EmbeddedActionsParser",{enumerable:!0,get:function(){return YI.EmbeddedActionsParser}});Object.defineProperty(He,"ParserDefinitionErrorType",{enumerable:!0,get:function(){return YI.ParserDefinitionErrorType}});Object.defineProperty(He,"EMPTY_ALT",{enumerable:!0,get:function(){return YI.EMPTY_ALT}});var dY=Gh();Object.defineProperty(He,"Lexer",{enumerable:!0,get:function(){return dY.Lexer}});Object.defineProperty(He,"LexerDefinitionErrorType",{enumerable:!0,get:function(){return dY.LexerDefinitionErrorType}});var ku=nA();Object.defineProperty(He,"createToken",{enumerable:!0,get:function(){return ku.createToken}});Object.defineProperty(He,"createTokenInstance",{enumerable:!0,get:function(){return ku.createTokenInstance}});Object.defineProperty(He,"EOF",{enumerable:!0,get:function(){return ku.EOF}});Object.defineProperty(He,"tokenLabel",{enumerable:!0,get:function(){return ku.tokenLabel}});Object.defineProperty(He,"tokenMatcher",{enumerable:!0,get:function(){return ku.tokenMatcher}});Object.defineProperty(He,"tokenName",{enumerable:!0,get:function(){return ku.tokenName}});var ywe=Wh();Object.defineProperty(He,"defaultParserErrorProvider",{enumerable:!0,get:function(){return ywe.defaultParserErrorProvider}});var rp=vu();Object.defineProperty(He,"EarlyExitException",{enumerable:!0,get:function(){return rp.EarlyExitException}});Object.defineProperty(He,"isRecognitionException",{enumerable:!0,get:function(){return rp.isRecognitionException}});Object.defineProperty(He,"MismatchedTokenException",{enumerable:!0,get:function(){return rp.MismatchedTokenException}});Object.defineProperty(He,"NotAllInputParsedException",{enumerable:!0,get:function(){return rp.NotAllInputParsedException}});Object.defineProperty(He,"NoViableAltException",{enumerable:!0,get:function(){return rp.NoViableAltException}});var wwe=_v();Object.defineProperty(He,"defaultLexerErrorProvider",{enumerable:!0,get:function(){return wwe.defaultLexerErrorProvider}});var ho=hn();Object.defineProperty(He,"Alternation",{enumerable:!0,get:function(){return ho.Alternation}});Object.defineProperty(He,"Alternative",{enumerable:!0,get:function(){return ho.Alternative}});Object.defineProperty(He,"NonTerminal",{enumerable:!0,get:function(){return ho.NonTerminal}});Object.defineProperty(He,"Option",{enumerable:!0,get:function(){return ho.Option}});Object.defineProperty(He,"Repetition",{enumerable:!0,get:function(){return ho.Repetition}});Object.defineProperty(He,"RepetitionMandatory",{enumerable:!0,get:function(){return ho.RepetitionMandatory}});Object.defineProperty(He,"RepetitionMandatoryWithSeparator",{enumerable:!0,get:function(){return ho.RepetitionMandatoryWithSeparator}});Object.defineProperty(He,"RepetitionWithSeparator",{enumerable:!0,get:function(){return ho.RepetitionWithSeparator}});Object.defineProperty(He,"Rule",{enumerable:!0,get:function(){return ho.Rule}});Object.defineProperty(He,"Terminal",{enumerable:!0,get:function(){return ho.Terminal}});var CY=hn();Object.defineProperty(He,"serializeGrammar",{enumerable:!0,get:function(){return CY.serializeGrammar}});Object.defineProperty(He,"serializeProduction",{enumerable:!0,get:function(){return CY.serializeProduction}});var Bwe=wu();Object.defineProperty(He,"GAstVisitor",{enumerable:!0,get:function(){return Bwe.GAstVisitor}});function Qwe(){console.warn(`The clearCache function was 'soft' removed from the Chevrotain API. + It performs no action other than printing this message. + Please avoid using it as it will be completely removed in the future`)}He.clearCache=Qwe;var bwe=pY();Object.defineProperty(He,"createSyntaxDiagramsCode",{enumerable:!0,get:function(){return bwe.createSyntaxDiagramsCode}});var vwe=function(){function t(){throw new Error(`The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead. +See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0`)}return t}();He.Parser=vwe});var yY=E((Trt,EY)=>{var qI=mY(),ca=qI.createToken,IY=qI.tokenMatcher,yS=qI.Lexer,Swe=qI.EmbeddedActionsParser;EY.exports=t=>{let e=ca({name:"LogicalOperator",pattern:yS.NA}),r=ca({name:"Or",pattern:/\|/,categories:e}),i=ca({name:"Xor",pattern:/\^/,categories:e}),n=ca({name:"And",pattern:/&/,categories:e}),s=ca({name:"Not",pattern:/!/}),o=ca({name:"LParen",pattern:/\(/}),a=ca({name:"RParen",pattern:/\)/}),l=ca({name:"Query",pattern:t}),u=[ca({name:"WhiteSpace",pattern:/\s+/,group:yS.SKIPPED}),r,i,n,o,a,s,e,l],g=new yS(u);class f extends Swe{constructor(p){super(u);this.RULE("expression",()=>this.SUBRULE(this.logicalExpression)),this.RULE("logicalExpression",()=>{let m=this.SUBRULE(this.atomicExpression);return this.MANY(()=>{let I=m,B=this.CONSUME(e),b=this.SUBRULE2(this.atomicExpression);IY(B,r)?m=R=>I(R)||b(R):IY(B,i)?m=R=>!!(I(R)^b(R)):m=R=>I(R)&&b(R)}),m}),this.RULE("atomicExpression",()=>this.OR([{ALT:()=>this.SUBRULE(this.parenthesisExpression)},{ALT:()=>{let{image:d}=this.CONSUME(l);return m=>m(d)}},{ALT:()=>{this.CONSUME(s);let d=this.SUBRULE(this.atomicExpression);return m=>!d(m)}}])),this.RULE("parenthesisExpression",()=>{let d;return this.CONSUME(o),d=this.SUBRULE(this.expression),this.CONSUME(a),d}),this.performSelfAnalysis()}}return{TinylogicLexer:g,TinylogicParser:f}}});var wY=E(JI=>{var xwe=yY();JI.makeParser=(t=/[a-z]+/)=>{let{TinylogicLexer:e,TinylogicParser:r}=xwe(t),i=new r;return(n,s)=>{let o=e.tokenize(n);return i.input=o.tokens,i.expression()(s)}};JI.parse=JI.makeParser()});var QY=E((Ort,BY)=>{"use strict";BY.exports=(...t)=>[...new Set([].concat(...t))]});var wS=E((Krt,bY)=>{"use strict";var kwe=require("stream"),vY=kwe.PassThrough,Pwe=Array.prototype.slice;bY.exports=Dwe;function Dwe(){let t=[],e=!1,r=Pwe.call(arguments),i=r[r.length-1];i&&!Array.isArray(i)&&i.pipe==null?r.pop():i={};let n=i.end!==!1;i.objectMode==null&&(i.objectMode=!0),i.highWaterMark==null&&(i.highWaterMark=64*1024);let s=vY(i);function o(){for(let c=0,u=arguments.length;c0||(e=!1,a())}function f(h){function p(){h.removeListener("merge2UnpipeEnd",p),h.removeListener("end",p),g()}if(h._readableState.endEmitted)return g();h.on("merge2UnpipeEnd",p),h.on("end",p),h.pipe(s,{end:!1}),h.resume()}for(let h=0;h{"use strict";Object.defineProperty(WI,"__esModule",{value:!0});function Rwe(t){return t.reduce((e,r)=>[].concat(e,r),[])}WI.flatten=Rwe;function Fwe(t,e){let r=[[]],i=0;for(let n of t)e(n)?(i++,r[i]=[]):r[i].push(n);return r}WI.splitWhen=Fwe});var kY=E(BS=>{"use strict";Object.defineProperty(BS,"__esModule",{value:!0});function Nwe(t){return t.code==="ENOENT"}BS.isEnoentCodeError=Nwe});var DY=E(QS=>{"use strict";Object.defineProperty(QS,"__esModule",{value:!0});var PY=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function Lwe(t,e){return new PY(t,e)}QS.createDirentFromStats=Lwe});var RY=E(Pu=>{"use strict";Object.defineProperty(Pu,"__esModule",{value:!0});var Twe=require("path"),Mwe=2,Owe=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;function Kwe(t){return t.replace(/\\/g,"/")}Pu.unixify=Kwe;function Uwe(t,e){return Twe.resolve(t,e)}Pu.makeAbsolute=Uwe;function Hwe(t){return t.replace(Owe,"\\$2")}Pu.escape=Hwe;function Gwe(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(Mwe)}return t}Pu.removeLeadingDotSegment=Gwe});var NY=E((Yrt,FY)=>{FY.exports=function(e){if(typeof e!="string"||e==="")return!1;for(var r;r=/(\\).|([@?!+*]\(.*\))/g.exec(e);){if(r[2])return!0;e=e.slice(r.index+r[0].length)}return!1}});var TY=E((qrt,LY)=>{var jwe=NY(),Ywe={"{":"}","(":")","[":"]"},qwe=/\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/,Jwe=/\\(.)|(^!|[*?{}()[\]]|\(\?)/;LY.exports=function(e,r){if(typeof e!="string"||e==="")return!1;if(jwe(e))return!0;var i=qwe,n;for(r&&r.strict===!1&&(i=Jwe);n=i.exec(e);){if(n[2])return!0;var s=n.index+n[0].length,o=n[1],a=o?Ywe[o]:null;if(o&&a){var l=e.indexOf(a,s);l!==-1&&(s=l+1)}e=e.slice(s)}return!1}});var OY=E((Jrt,MY)=>{"use strict";var Wwe=TY(),zwe=require("path").posix.dirname,Vwe=require("os").platform()==="win32",bS="/",_we=/\\/g,Xwe=/[\{\[].*[\}\]]$/,Zwe=/(^|[^\\])([\{\[]|\([^\)]+$)/,$we=/\\([\!\*\?\|\[\]\(\)\{\}])/g;MY.exports=function(e,r){var i=Object.assign({flipBackslashes:!0},r);i.flipBackslashes&&Vwe&&e.indexOf(bS)<0&&(e=e.replace(_we,bS)),Xwe.test(e)&&(e+=bS),e+="a";do e=zwe(e);while(Wwe(e)||Zwe.test(e));return e.replace($we,"$1")}});var WY=E(Hr=>{"use strict";Object.defineProperty(Hr,"__esModule",{value:!0});var eBe=require("path"),tBe=OY(),KY=Nn(),rBe=iv(),UY="**",iBe="\\",nBe=/[*?]|^!/,sBe=/\[.*]/,oBe=/(?:^|[^!*+?@])\(.*\|.*\)/,aBe=/[!*+?@]\(.*\)/,ABe=/{.*(?:,|\.\.).*}/;function GY(t,e={}){return!HY(t,e)}Hr.isStaticPattern=GY;function HY(t,e={}){return!!(e.caseSensitiveMatch===!1||t.includes(iBe)||nBe.test(t)||sBe.test(t)||oBe.test(t)||e.extglob!==!1&&aBe.test(t)||e.braceExpansion!==!1&&ABe.test(t))}Hr.isDynamicPattern=HY;function lBe(t){return zI(t)?t.slice(1):t}Hr.convertToPositivePattern=lBe;function cBe(t){return"!"+t}Hr.convertToNegativePattern=cBe;function zI(t){return t.startsWith("!")&&t[1]!=="("}Hr.isNegativePattern=zI;function jY(t){return!zI(t)}Hr.isPositivePattern=jY;function uBe(t){return t.filter(zI)}Hr.getNegativePatterns=uBe;function gBe(t){return t.filter(jY)}Hr.getPositivePatterns=gBe;function fBe(t){return tBe(t,{flipBackslashes:!1})}Hr.getBaseDirectory=fBe;function hBe(t){return t.includes(UY)}Hr.hasGlobStar=hBe;function YY(t){return t.endsWith("/"+UY)}Hr.endsWithSlashGlobStar=YY;function pBe(t){let e=eBe.basename(t);return YY(t)||GY(e)}Hr.isAffectDepthOfReadingPattern=pBe;function dBe(t){return t.reduce((e,r)=>e.concat(qY(r)),[])}Hr.expandPatternsWithBraceExpansion=dBe;function qY(t){return KY.braces(t,{expand:!0,nodupes:!0})}Hr.expandBraceExpansion=qY;function CBe(t,e){let r=rBe.scan(t,Object.assign(Object.assign({},e),{parts:!0}));return r.parts.length===0?[t]:r.parts}Hr.getPatternParts=CBe;function JY(t,e){return KY.makeRe(t,e)}Hr.makeRe=JY;function mBe(t,e){return t.map(r=>JY(r,e))}Hr.convertPatternsToRe=mBe;function EBe(t,e){return e.some(r=>r.test(t))}Hr.matchAny=EBe});var VY=E(vS=>{"use strict";Object.defineProperty(vS,"__esModule",{value:!0});var IBe=wS();function yBe(t){let e=IBe(t);return t.forEach(r=>{r.once("error",i=>e.emit("error",i))}),e.once("close",()=>zY(t)),e.once("end",()=>zY(t)),e}vS.merge=yBe;function zY(t){t.forEach(e=>e.emit("close"))}});var _Y=E(VI=>{"use strict";Object.defineProperty(VI,"__esModule",{value:!0});function wBe(t){return typeof t=="string"}VI.isString=wBe;function BBe(t){return t===""}VI.isEmpty=BBe});var ga=E(ua=>{"use strict";Object.defineProperty(ua,"__esModule",{value:!0});var QBe=xY();ua.array=QBe;var bBe=kY();ua.errno=bBe;var vBe=DY();ua.fs=vBe;var SBe=RY();ua.path=SBe;var xBe=WY();ua.pattern=xBe;var kBe=VY();ua.stream=kBe;var PBe=_Y();ua.string=PBe});var tq=E(fa=>{"use strict";Object.defineProperty(fa,"__esModule",{value:!0});var Ll=ga();function DBe(t,e){let r=XY(t),i=ZY(t,e.ignore),n=r.filter(l=>Ll.pattern.isStaticPattern(l,e)),s=r.filter(l=>Ll.pattern.isDynamicPattern(l,e)),o=SS(n,i,!1),a=SS(s,i,!0);return o.concat(a)}fa.generate=DBe;function SS(t,e,r){let i=$Y(t);return"."in i?[xS(".",t,e,r)]:eq(i,e,r)}fa.convertPatternsToTasks=SS;function XY(t){return Ll.pattern.getPositivePatterns(t)}fa.getPositivePatterns=XY;function ZY(t,e){return Ll.pattern.getNegativePatterns(t).concat(e).map(Ll.pattern.convertToPositivePattern)}fa.getNegativePatternsAsPositive=ZY;function $Y(t){let e={};return t.reduce((r,i)=>{let n=Ll.pattern.getBaseDirectory(i);return n in r?r[n].push(i):r[n]=[i],r},e)}fa.groupPatternsByBaseDirectory=$Y;function eq(t,e,r){return Object.keys(t).map(i=>xS(i,t[i],e,r))}fa.convertPatternGroupsToTasks=eq;function xS(t,e,r,i){return{dynamic:i,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Ll.pattern.convertToNegativePattern))}}fa.convertPatternGroupToTask=xS});var iq=E(_I=>{"use strict";Object.defineProperty(_I,"__esModule",{value:!0});_I.read=void 0;function RBe(t,e,r){e.fs.lstat(t,(i,n)=>{if(i!==null){rq(r,i);return}if(!n.isSymbolicLink()||!e.followSymbolicLink){kS(r,n);return}e.fs.stat(t,(s,o)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){rq(r,s);return}kS(r,n);return}e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),kS(r,o)})})}_I.read=RBe;function rq(t,e){t(e)}function kS(t,e){t(null,e)}});var nq=E(XI=>{"use strict";Object.defineProperty(XI,"__esModule",{value:!0});XI.read=void 0;function FBe(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.followSymbolicLink)return r;try{let i=e.fs.statSync(t);return e.markSymbolicLink&&(i.isSymbolicLink=()=>!0),i}catch(i){if(!e.throwErrorOnBrokenSymbolicLink)return r;throw i}}XI.read=FBe});var sq=E(AA=>{"use strict";Object.defineProperty(AA,"__esModule",{value:!0});AA.createFileSystemAdapter=AA.FILE_SYSTEM_ADAPTER=void 0;var ZI=require("fs");AA.FILE_SYSTEM_ADAPTER={lstat:ZI.lstat,stat:ZI.stat,lstatSync:ZI.lstatSync,statSync:ZI.statSync};function NBe(t){return t===void 0?AA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},AA.FILE_SYSTEM_ADAPTER),t)}AA.createFileSystemAdapter=NBe});var aq=E(PS=>{"use strict";Object.defineProperty(PS,"__esModule",{value:!0});var LBe=sq(),oq=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=LBe.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,r){return e!=null?e:r}};PS.default=oq});var Tl=E(lA=>{"use strict";Object.defineProperty(lA,"__esModule",{value:!0});lA.statSync=lA.stat=lA.Settings=void 0;var Aq=iq(),TBe=nq(),DS=aq();lA.Settings=DS.default;function MBe(t,e,r){if(typeof e=="function"){Aq.read(t,RS(),e);return}Aq.read(t,RS(e),r)}lA.stat=MBe;function OBe(t,e){let r=RS(e);return TBe.read(t,r)}lA.statSync=OBe;function RS(t={}){return t instanceof DS.default?t:new DS.default(t)}});var cq=E((iit,lq)=>{lq.exports=KBe;function KBe(t,e){var r,i,n,s=!0;Array.isArray(t)?(r=[],i=t.length):(n=Object.keys(t),r={},i=n.length);function o(l){function c(){e&&e(l,r),e=null}s?process.nextTick(c):c()}function a(l,c,u){r[l]=u,(--i==0||c)&&o(c)}i?n?n.forEach(function(l){t[l](function(c,u){a(l,c,u)})}):t.forEach(function(l,c){l(function(u,g){a(c,u,g)})}):o(null),s=!1}});var FS=E($I=>{"use strict";Object.defineProperty($I,"__esModule",{value:!0});$I.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var ey=process.versions.node.split(".");if(ey[0]===void 0||ey[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var uq=Number.parseInt(ey[0],10),UBe=Number.parseInt(ey[1],10),gq=10,HBe=10,GBe=uq>gq,jBe=uq===gq&&UBe>=HBe;$I.IS_SUPPORT_READDIR_WITH_FILE_TYPES=GBe||jBe});var hq=E(ty=>{"use strict";Object.defineProperty(ty,"__esModule",{value:!0});ty.createDirentFromStats=void 0;var fq=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function YBe(t,e){return new fq(t,e)}ty.createDirentFromStats=YBe});var NS=E(ry=>{"use strict";Object.defineProperty(ry,"__esModule",{value:!0});ry.fs=void 0;var qBe=hq();ry.fs=qBe});var LS=E(iy=>{"use strict";Object.defineProperty(iy,"__esModule",{value:!0});iy.joinPathSegments=void 0;function JBe(t,e,r){return t.endsWith(r)?t+e:t+r+e}iy.joinPathSegments=JBe});var Iq=E(cA=>{"use strict";Object.defineProperty(cA,"__esModule",{value:!0});cA.readdir=cA.readdirWithFileTypes=cA.read=void 0;var WBe=Tl(),pq=cq(),zBe=FS(),dq=NS(),Cq=LS();function VBe(t,e,r){if(!e.stats&&zBe.IS_SUPPORT_READDIR_WITH_FILE_TYPES){mq(t,e,r);return}Eq(t,e,r)}cA.read=VBe;function mq(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(i,n)=>{if(i!==null){ny(r,i);return}let s=n.map(a=>({dirent:a,name:a.name,path:Cq.joinPathSegments(t,a.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){TS(r,s);return}let o=s.map(a=>_Be(a,e));pq(o,(a,l)=>{if(a!==null){ny(r,a);return}TS(r,l)})})}cA.readdirWithFileTypes=mq;function _Be(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);return}e.fs.stat(t.path,(i,n)=>{if(i!==null){if(e.throwErrorOnBrokenSymbolicLink){r(i);return}r(null,t);return}t.dirent=dq.fs.createDirentFromStats(t.name,n),r(null,t)})}}function Eq(t,e,r){e.fs.readdir(t,(i,n)=>{if(i!==null){ny(r,i);return}let s=n.map(o=>{let a=Cq.joinPathSegments(t,o,e.pathSegmentSeparator);return l=>{WBe.stat(a,e.fsStatSettings,(c,u)=>{if(c!==null){l(c);return}let g={name:o,path:a,dirent:dq.fs.createDirentFromStats(o,u)};e.stats&&(g.stats=u),l(null,g)})}});pq(s,(o,a)=>{if(o!==null){ny(r,o);return}TS(r,a)})})}cA.readdir=Eq;function ny(t,e){t(e)}function TS(t,e){t(null,e)}});var bq=E(uA=>{"use strict";Object.defineProperty(uA,"__esModule",{value:!0});uA.readdir=uA.readdirWithFileTypes=uA.read=void 0;var XBe=Tl(),ZBe=FS(),yq=NS(),wq=LS();function $Be(t,e){return!e.stats&&ZBe.IS_SUPPORT_READDIR_WITH_FILE_TYPES?Bq(t,e):Qq(t,e)}uA.read=$Be;function Bq(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(i=>{let n={dirent:i,name:i.name,path:wq.joinPathSegments(t,i.name,e.pathSegmentSeparator)};if(n.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let s=e.fs.statSync(n.path);n.dirent=yq.fs.createDirentFromStats(n.name,s)}catch(s){if(e.throwErrorOnBrokenSymbolicLink)throw s}return n})}uA.readdirWithFileTypes=Bq;function Qq(t,e){return e.fs.readdirSync(t).map(i=>{let n=wq.joinPathSegments(t,i,e.pathSegmentSeparator),s=XBe.statSync(n,e.fsStatSettings),o={name:i,path:n,dirent:yq.fs.createDirentFromStats(i,s)};return e.stats&&(o.stats=s),o})}uA.readdir=Qq});var vq=E(gA=>{"use strict";Object.defineProperty(gA,"__esModule",{value:!0});gA.createFileSystemAdapter=gA.FILE_SYSTEM_ADAPTER=void 0;var Du=require("fs");gA.FILE_SYSTEM_ADAPTER={lstat:Du.lstat,stat:Du.stat,lstatSync:Du.lstatSync,statSync:Du.statSync,readdir:Du.readdir,readdirSync:Du.readdirSync};function e0e(t){return t===void 0?gA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},gA.FILE_SYSTEM_ADAPTER),t)}gA.createFileSystemAdapter=e0e});var xq=E(MS=>{"use strict";Object.defineProperty(MS,"__esModule",{value:!0});var t0e=require("path"),r0e=Tl(),i0e=vq(),Sq=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=i0e.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,t0e.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new r0e.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e!=null?e:r}};MS.default=Sq});var sy=E(fA=>{"use strict";Object.defineProperty(fA,"__esModule",{value:!0});fA.Settings=fA.scandirSync=fA.scandir=void 0;var kq=Iq(),n0e=bq(),OS=xq();fA.Settings=OS.default;function s0e(t,e,r){if(typeof e=="function"){kq.read(t,KS(),e);return}kq.read(t,KS(e),r)}fA.scandir=s0e;function o0e(t,e){let r=KS(e);return n0e.read(t,r)}fA.scandirSync=o0e;function KS(t={}){return t instanceof OS.default?t:new OS.default(t)}});var Dq=E((fit,Pq)=>{"use strict";function a0e(t){var e=new t,r=e;function i(){var s=e;return s.next?e=s.next:(e=new t,r=e),s.next=null,s}function n(s){r.next=s,r=s}return{get:i,release:n}}Pq.exports=a0e});var Fq=E((hit,US)=>{"use strict";var A0e=Dq();function Rq(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),r<1)throw new Error("fastqueue concurrency must be greater than 1");var i=A0e(l0e),n=null,s=null,o=0,a=null,l={push:d,drain:po,saturated:po,pause:u,paused:!1,concurrency:r,running:c,resume:h,idle:p,length:g,getQueue:f,unshift:m,empty:po,kill:B,killAndDrain:b,error:R};return l;function c(){return o}function u(){l.paused=!0}function g(){for(var H=n,L=0;H;)H=H.next,L++;return L}function f(){for(var H=n,L=[];H;)L.push(H.value),H=H.next;return L}function h(){if(!!l.paused){l.paused=!1;for(var H=0;H{"use strict";Object.defineProperty(Co,"__esModule",{value:!0});Co.joinPathSegments=Co.replacePathSegmentSeparator=Co.isAppliedFilter=Co.isFatalError=void 0;function u0e(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}Co.isFatalError=u0e;function g0e(t,e){return t===null||t(e)}Co.isAppliedFilter=g0e;function f0e(t,e){return t.split(/[/\\]/).join(e)}Co.replacePathSegmentSeparator=f0e;function h0e(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}Co.joinPathSegments=h0e});var GS=E(HS=>{"use strict";Object.defineProperty(HS,"__esModule",{value:!0});var p0e=oy(),Nq=class{constructor(e,r){this._root=e,this._settings=r,this._root=p0e.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};HS.default=Nq});var YS=E(jS=>{"use strict";Object.defineProperty(jS,"__esModule",{value:!0});var d0e=require("events"),C0e=sy(),m0e=Fq(),ay=oy(),E0e=GS(),Lq=class extends E0e.default{constructor(e,r){super(e,r);this._settings=r,this._scandir=C0e.scandir,this._emitter=new d0e.EventEmitter,this._queue=m0e(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on("entry",e)}onError(e){this._emitter.once("error",e)}onEnd(e){this._emitter.once("end",e)}_pushToQueue(e,r){let i={directory:e,base:r};this._queue.push(i,n=>{n!==null&&this._handleError(n)})}_worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,(i,n)=>{if(i!==null){r(i,void 0);return}for(let s of n)this._handleEntry(s,e.base);r(null,void 0)})}_handleError(e){this._isDestroyed||!ay.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",e))}_handleEntry(e,r){if(this._isDestroyed||this._isFatalError)return;let i=e.path;r!==void 0&&(e.path=ay.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),ay.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&ay.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};jS.default=Lq});var Mq=E(qS=>{"use strict";Object.defineProperty(qS,"__esModule",{value:!0});var I0e=YS(),Tq=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new I0e.default(this._root,this._settings),this._storage=new Set}read(e){this._reader.onError(r=>{y0e(e,r)}),this._reader.onEntry(r=>{this._storage.add(r)}),this._reader.onEnd(()=>{w0e(e,[...this._storage])}),this._reader.read()}};qS.default=Tq;function y0e(t,e){t(e)}function w0e(t,e){t(null,e)}});var Kq=E(JS=>{"use strict";Object.defineProperty(JS,"__esModule",{value:!0});var B0e=require("stream"),Q0e=YS(),Oq=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Q0e.default(this._root,this._settings),this._stream=new B0e.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit("error",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};JS.default=Oq});var Hq=E(WS=>{"use strict";Object.defineProperty(WS,"__esModule",{value:!0});var b0e=sy(),Ay=oy(),v0e=GS(),Uq=class extends v0e.default{constructor(){super(...arguments);this._scandir=b0e.scandirSync,this._storage=new Set,this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),[...this._storage]}_pushToQueue(e,r){this._queue.add({directory:e,base:r})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,r){try{let i=this._scandir(e,this._settings.fsScandirSettings);for(let n of i)this._handleEntry(n,r)}catch(i){this._handleError(i)}}_handleError(e){if(!!Ay.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let i=e.path;r!==void 0&&(e.path=Ay.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),Ay.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&Ay.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_pushToStorage(e){this._storage.add(e)}};WS.default=Uq});var jq=E(zS=>{"use strict";Object.defineProperty(zS,"__esModule",{value:!0});var S0e=Hq(),Gq=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new S0e.default(this._root,this._settings)}read(){return this._reader.read()}};zS.default=Gq});var qq=E(VS=>{"use strict";Object.defineProperty(VS,"__esModule",{value:!0});var x0e=require("path"),k0e=sy(),Yq=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,x0e.sep),this.fsScandirSettings=new k0e.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e!=null?e:r}};VS.default=Yq});var XS=E(mo=>{"use strict";Object.defineProperty(mo,"__esModule",{value:!0});mo.Settings=mo.walkStream=mo.walkSync=mo.walk=void 0;var Jq=Mq(),P0e=Kq(),D0e=jq(),_S=qq();mo.Settings=_S.default;function R0e(t,e,r){if(typeof e=="function"){new Jq.default(t,ly()).read(e);return}new Jq.default(t,ly(e)).read(r)}mo.walk=R0e;function F0e(t,e){let r=ly(e);return new D0e.default(t,r).read()}mo.walkSync=F0e;function N0e(t,e){let r=ly(e);return new P0e.default(t,r).read()}mo.walkStream=N0e;function ly(t={}){return t instanceof _S.default?t:new _S.default(t)}});var $S=E(ZS=>{"use strict";Object.defineProperty(ZS,"__esModule",{value:!0});var L0e=require("path"),T0e=Tl(),Wq=ga(),zq=class{constructor(e){this._settings=e,this._fsStatSettings=new T0e.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return L0e.resolve(this._settings.cwd,e)}_makeEntry(e,r){let i={name:r,path:r,dirent:Wq.fs.createDirentFromStats(r,e)};return this._settings.stats&&(i.stats=e),i}_isFatalError(e){return!Wq.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};ZS.default=zq});var tx=E(ex=>{"use strict";Object.defineProperty(ex,"__esModule",{value:!0});var M0e=require("stream"),O0e=Tl(),K0e=XS(),U0e=$S(),Vq=class extends U0e.default{constructor(){super(...arguments);this._walkStream=K0e.walkStream,this._stat=O0e.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let i=e.map(this._getFullEntryPath,this),n=new M0e.PassThrough({objectMode:!0});n._write=(s,o,a)=>this._getEntry(i[s],e[s],r).then(l=>{l!==null&&r.entryFilter(l)&&n.push(l),s===i.length-1&&n.end(),a()}).catch(a);for(let s=0;sthis._makeEntry(n,r)).catch(n=>{if(i.errorFilter(n))return null;throw n})}_getStat(e){return new Promise((r,i)=>{this._stat(e,this._fsStatSettings,(n,s)=>n===null?r(s):i(n))})}};ex.default=Vq});var Xq=E(rx=>{"use strict";Object.defineProperty(rx,"__esModule",{value:!0});var Ru=ga(),_q=class{constructor(e,r,i){this._patterns=e,this._settings=r,this._micromatchOptions=i,this._storage=[],this._fillStorage()}_fillStorage(){let e=Ru.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let r of e){let i=this._getPatternSegments(r),n=this._splitSegmentsIntoSections(i);this._storage.push({complete:n.length<=1,pattern:r,segments:i,sections:n})}}_getPatternSegments(e){return Ru.pattern.getPatternParts(e,this._micromatchOptions).map(i=>Ru.pattern.isDynamicPattern(i,this._settings)?{dynamic:!0,pattern:i,patternRe:Ru.pattern.makeRe(i,this._micromatchOptions)}:{dynamic:!1,pattern:i})}_splitSegmentsIntoSections(e){return Ru.array.splitWhen(e,r=>r.dynamic&&Ru.pattern.hasGlobStar(r.pattern))}};rx.default=_q});var $q=E(ix=>{"use strict";Object.defineProperty(ix,"__esModule",{value:!0});var H0e=Xq(),Zq=class extends H0e.default{match(e){let r=e.split("/"),i=r.length,n=this._storage.filter(s=>!s.complete||s.segments.length>i);for(let s of n){let o=s.sections[0];if(!s.complete&&i>o.length||r.every((l,c)=>{let u=s.segments[c];return!!(u.dynamic&&u.patternRe.test(l)||!u.dynamic&&u.pattern===l)}))return!0}return!1}};ix.default=Zq});var tJ=E(nx=>{"use strict";Object.defineProperty(nx,"__esModule",{value:!0});var cy=ga(),G0e=$q(),eJ=class{constructor(e,r){this._settings=e,this._micromatchOptions=r}getFilter(e,r,i){let n=this._getMatcher(r),s=this._getNegativePatternsRe(i);return o=>this._filter(e,o,n,s)}_getMatcher(e){return new G0e.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(cy.pattern.isAffectDepthOfReadingPattern);return cy.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,i,n){let s=this._getEntryLevel(e,r.path);if(this._isSkippedByDeep(s)||this._isSkippedSymbolicLink(r))return!1;let o=cy.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(o,i)?!1:this._isSkippedByNegativePatterns(o,n)}_isSkippedByDeep(e){return e>=this._settings.deep}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_getEntryLevel(e,r){let i=e.split("/").length;return r.split("/").length-(e===""?0:i)}_isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!r.match(e)}_isSkippedByNegativePatterns(e,r){return!cy.pattern.matchAny(e,r)}};nx.default=eJ});var iJ=E(sx=>{"use strict";Object.defineProperty(sx,"__esModule",{value:!0});var ip=ga(),rJ=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let i=ip.pattern.convertPatternsToRe(e,this._micromatchOptions),n=ip.pattern.convertPatternsToRe(r,this._micromatchOptions);return s=>this._filter(s,i,n)}_filter(e,r,i){if(this._settings.unique){if(this._isDuplicateEntry(e))return!1;this._createIndexRecord(e)}if(this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e,i))return!1;let n=this._settings.baseNameMatch?e.name:e.path;return this._isMatchToPatterns(n,r)&&!this._isMatchToPatterns(e.path,i)}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,r){if(!this._settings.absolute)return!1;let i=ip.path.makeAbsolute(this._settings.cwd,e.path);return this._isMatchToPatterns(i,r)}_isMatchToPatterns(e,r){let i=ip.path.removeLeadingDotSegment(e);return ip.pattern.matchAny(i,r)}};sx.default=rJ});var sJ=E(ox=>{"use strict";Object.defineProperty(ox,"__esModule",{value:!0});var j0e=ga(),nJ=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return j0e.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};ox.default=nJ});var AJ=E(ax=>{"use strict";Object.defineProperty(ax,"__esModule",{value:!0});var oJ=ga(),aJ=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=oJ.path.makeAbsolute(this._settings.cwd,r),r=oJ.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};ax.default=aJ});var uy=E(Ax=>{"use strict";Object.defineProperty(Ax,"__esModule",{value:!0});var Y0e=require("path"),q0e=tJ(),J0e=iJ(),W0e=sJ(),z0e=AJ(),lJ=class{constructor(e){this._settings=e,this.errorFilter=new W0e.default(this._settings),this.entryFilter=new J0e.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new q0e.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new z0e.default(this._settings)}_getRootDirectory(e){return Y0e.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let r=e.base==="."?"":e.base;return{basePath:r,pathSegmentSeparator:"/",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(r,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};Ax.default=lJ});var uJ=E(lx=>{"use strict";Object.defineProperty(lx,"__esModule",{value:!0});var V0e=tx(),_0e=uy(),cJ=class extends _0e.default{constructor(){super(...arguments);this._reader=new V0e.default(this._settings)}read(e){let r=this._getRootDirectory(e),i=this._getReaderOptions(e),n=[];return new Promise((s,o)=>{let a=this.api(r,e,i);a.once("error",o),a.on("data",l=>n.push(i.transform(l))),a.once("end",()=>s(n))})}api(e,r,i){return r.dynamic?this._reader.dynamic(e,i):this._reader.static(r.patterns,i)}};lx.default=cJ});var fJ=E(cx=>{"use strict";Object.defineProperty(cx,"__esModule",{value:!0});var X0e=require("stream"),Z0e=tx(),$0e=uy(),gJ=class extends $0e.default{constructor(){super(...arguments);this._reader=new Z0e.default(this._settings)}read(e){let r=this._getRootDirectory(e),i=this._getReaderOptions(e),n=this.api(r,e,i),s=new X0e.Readable({objectMode:!0,read:()=>{}});return n.once("error",o=>s.emit("error",o)).on("data",o=>s.emit("data",i.transform(o))).once("end",()=>s.emit("end")),s.once("close",()=>n.destroy()),s}api(e,r,i){return r.dynamic?this._reader.dynamic(e,i):this._reader.static(r.patterns,i)}};cx.default=gJ});var pJ=E(ux=>{"use strict";Object.defineProperty(ux,"__esModule",{value:!0});var eQe=Tl(),tQe=XS(),rQe=$S(),hJ=class extends rQe.default{constructor(){super(...arguments);this._walkSync=tQe.walkSync,this._statSync=eQe.statSync}dynamic(e,r){return this._walkSync(e,r)}static(e,r){let i=[];for(let n of e){let s=this._getFullEntryPath(n),o=this._getEntry(s,n,r);o===null||!r.entryFilter(o)||i.push(o)}return i}_getEntry(e,r,i){try{let n=this._getStat(e);return this._makeEntry(n,r)}catch(n){if(i.errorFilter(n))return null;throw n}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};ux.default=hJ});var CJ=E(gx=>{"use strict";Object.defineProperty(gx,"__esModule",{value:!0});var iQe=pJ(),nQe=uy(),dJ=class extends nQe.default{constructor(){super(...arguments);this._reader=new iQe.default(this._settings)}read(e){let r=this._getRootDirectory(e),i=this._getReaderOptions(e);return this.api(r,e,i).map(i.transform)}api(e,r,i){return r.dynamic?this._reader.dynamic(e,i):this._reader.static(r.patterns,i)}};gx.default=dJ});var EJ=E(np=>{"use strict";Object.defineProperty(np,"__esModule",{value:!0});var Fu=require("fs"),sQe=require("os"),oQe=sQe.cpus().length;np.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:Fu.lstat,lstatSync:Fu.lstatSync,stat:Fu.stat,statSync:Fu.statSync,readdir:Fu.readdir,readdirSync:Fu.readdirSync};var mJ=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,oQe),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,Infinity),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,r){return e===void 0?r:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},np.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};np.default=mJ});var gy=E((Oit,IJ)=>{"use strict";var yJ=tq(),aQe=uJ(),AQe=fJ(),lQe=CJ(),fx=EJ(),Ml=ga();async function px(t,e){Nu(t);let r=hx(t,aQe.default,e),i=await Promise.all(r);return Ml.array.flatten(i)}(function(t){function e(o,a){Nu(o);let l=hx(o,lQe.default,a);return Ml.array.flatten(l)}t.sync=e;function r(o,a){Nu(o);let l=hx(o,AQe.default,a);return Ml.stream.merge(l)}t.stream=r;function i(o,a){Nu(o);let l=[].concat(o),c=new fx.default(a);return yJ.generate(l,c)}t.generateTasks=i;function n(o,a){Nu(o);let l=new fx.default(a);return Ml.pattern.isDynamicPattern(o,l)}t.isDynamicPattern=n;function s(o){return Nu(o),Ml.path.escape(o)}t.escapePath=s})(px||(px={}));function hx(t,e,r){let i=[].concat(t),n=new fx.default(r),s=yJ.generate(i,n),o=new e(n);return s.map(o.read,o)}function Nu(t){if(![].concat(t).every(i=>Ml.string.isString(i)&&!Ml.string.isEmpty(i)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}IJ.exports=px});var BJ=E(Ol=>{"use strict";var{promisify:cQe}=require("util"),wJ=require("fs");async function dx(t,e,r){if(typeof r!="string")throw new TypeError(`Expected a string, got ${typeof r}`);try{return(await cQe(wJ[t])(r))[e]()}catch(i){if(i.code==="ENOENT")return!1;throw i}}function Cx(t,e,r){if(typeof r!="string")throw new TypeError(`Expected a string, got ${typeof r}`);try{return wJ[t](r)[e]()}catch(i){if(i.code==="ENOENT")return!1;throw i}}Ol.isFile=dx.bind(null,"stat","isFile");Ol.isDirectory=dx.bind(null,"stat","isDirectory");Ol.isSymlink=dx.bind(null,"lstat","isSymbolicLink");Ol.isFileSync=Cx.bind(null,"statSync","isFile");Ol.isDirectorySync=Cx.bind(null,"statSync","isDirectory");Ol.isSymlinkSync=Cx.bind(null,"lstatSync","isSymbolicLink")});var xJ=E((Uit,mx)=>{"use strict";var Kl=require("path"),QJ=BJ(),bJ=t=>t.length>1?`{${t.join(",")}}`:t[0],vJ=(t,e)=>{let r=t[0]==="!"?t.slice(1):t;return Kl.isAbsolute(r)?r:Kl.join(e,r)},uQe=(t,e)=>Kl.extname(t)?`**/${t}`:`**/${t}.${bJ(e)}`,SJ=(t,e)=>{if(e.files&&!Array.isArray(e.files))throw new TypeError(`Expected \`files\` to be of type \`Array\` but received type \`${typeof e.files}\``);if(e.extensions&&!Array.isArray(e.extensions))throw new TypeError(`Expected \`extensions\` to be of type \`Array\` but received type \`${typeof e.extensions}\``);return e.files&&e.extensions?e.files.map(r=>Kl.posix.join(t,uQe(r,e.extensions))):e.files?e.files.map(r=>Kl.posix.join(t,`**/${r}`)):e.extensions?[Kl.posix.join(t,`**/*.${bJ(e.extensions)}`)]:[Kl.posix.join(t,"**")]};mx.exports=async(t,e)=>{if(e=P({cwd:process.cwd()},e),typeof e.cwd!="string")throw new TypeError(`Expected \`cwd\` to be of type \`string\` but received type \`${typeof e.cwd}\``);let r=await Promise.all([].concat(t).map(async i=>await QJ.isDirectory(vJ(i,e.cwd))?SJ(i,e):i));return[].concat.apply([],r)};mx.exports.sync=(t,e)=>{if(e=P({cwd:process.cwd()},e),typeof e.cwd!="string")throw new TypeError(`Expected \`cwd\` to be of type \`string\` but received type \`${typeof e.cwd}\``);let r=[].concat(t).map(i=>QJ.isDirectorySync(vJ(i,e.cwd))?SJ(i,e):i);return[].concat.apply([],r)}});var TJ=E((Hit,kJ)=>{function PJ(t){return Array.isArray(t)?t:[t]}var gQe=/^\s+$/,fQe=/^\\!/,hQe=/^\\#/,pQe=/\r?\n/g,dQe=/^\.*\/|^\.+$/,Ex="/",DJ=typeof Symbol!="undefined"?Symbol.for("node-ignore"):"node-ignore",CQe=(t,e,r)=>Object.defineProperty(t,e,{value:r}),mQe=/([0-z])-([0-z])/g,EQe=t=>t.replace(mQe,(e,r,i)=>r.charCodeAt(0)<=i.charCodeAt(0)?e:""),IQe=[[/\\?\s+$/,t=>t.indexOf("\\")===0?" ":""],[/\\\s/g,()=>" "],[/[\\^$.|*+(){]/g,t=>`\\${t}`],[/\[([^\]/]*)($|\])/g,(t,e,r)=>r==="]"?`[${EQe(e)}]`:`\\${t}`],[/(?!\\)\?/g,()=>"[^/]"],[/^\//,()=>"^"],[/\//g,()=>"\\/"],[/^\^*\\\*\\\*\\\//,()=>"^(?:.*\\/)?"],[/(?:[^*])$/,t=>/\/$/.test(t)?`${t}$`:`${t}(?=$|\\/$)`],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?"^":"(?:^|\\/)"}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(t,e,r)=>e+6`${e}[^\\/]*`],[/(\^|\\\/)?\\\*$/,(t,e)=>`${e?`${e}[^/]+`:"[^/]*"}(?=$|\\/$)`],[/\\\\\\/g,()=>"\\"]],RJ=Object.create(null),yQe=(t,e,r)=>{let i=RJ[t];if(i)return i;let n=IQe.reduce((s,o)=>s.replace(o[0],o[1].bind(t)),t);return RJ[t]=r?new RegExp(n,"i"):new RegExp(n)},Ix=t=>typeof t=="string",wQe=t=>t&&Ix(t)&&!gQe.test(t)&&t.indexOf("#")!==0,BQe=t=>t.split(pQe),FJ=class{constructor(e,r,i,n){this.origin=e,this.pattern=r,this.negative=i,this.regex=n}},QQe=(t,e)=>{let r=t,i=!1;t.indexOf("!")===0&&(i=!0,t=t.substr(1)),t=t.replace(fQe,"!").replace(hQe,"#");let n=yQe(t,i,e);return new FJ(r,t,i,n)},bQe=(t,e)=>{throw new e(t)},ha=(t,e,r)=>Ix(t)?t?ha.isNotRelative(t)?r(`path should be a \`path.relative()\`d string, but got "${e}"`,RangeError):!0:r("path must not be empty",TypeError):r(`path must be a string, but got \`${e}\``,TypeError),NJ=t=>dQe.test(t);ha.isNotRelative=NJ;ha.convert=t=>t;var LJ=class{constructor({ignorecase:e=!0}={}){this._rules=[],this._ignorecase=e,CQe(this,DJ,!0),this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}_addPattern(e){if(e&&e[DJ]){this._rules=this._rules.concat(e._rules),this._added=!0;return}if(wQe(e)){let r=QQe(e,this._ignorecase);this._added=!0,this._rules.push(r)}}add(e){return this._added=!1,PJ(Ix(e)?BQe(e):e).forEach(this._addPattern,this),this._added&&this._initCache(),this}addPattern(e){return this.add(e)}_testOne(e,r){let i=!1,n=!1;return this._rules.forEach(s=>{let{negative:o}=s;if(n===o&&i!==n||o&&!i&&!n&&!r)return;s.regex.test(e)&&(i=!o,n=o)}),{ignored:i,unignored:n}}_test(e,r,i,n){let s=e&&ha.convert(e);return ha(s,e,bQe),this._t(s,r,i,n)}_t(e,r,i,n){if(e in r)return r[e];if(n||(n=e.split(Ex)),n.pop(),!n.length)return r[e]=this._testOne(e,i);let s=this._t(n.join(Ex)+Ex,r,i,n);return r[e]=s.ignored?s:this._testOne(e,i)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return PJ(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},fy=t=>new LJ(t),vQe=()=>!1,SQe=t=>ha(t&&ha.convert(t),t,vQe);fy.isPathValid=SQe;fy.default=fy;kJ.exports=fy;if(typeof process!="undefined"&&(process.env&&process.env.IGNORE_TEST_WIN32||process.platform==="win32")){let t=r=>/^\\\\\?\\/.test(r)||/["<>|\u0000-\u001F]+/u.test(r)?r:r.replace(/\\/g,"/");ha.convert=t;let e=/^[a-z]:\//i;ha.isNotRelative=r=>e.test(r)||NJ(r)}});var OJ=E((Git,MJ)=>{"use strict";MJ.exports=t=>{let e=/^\\\\\?\\/.test(t),r=/[^\u0000-\u0080]+/.test(t);return e||r?t:t.replace(/\\/g,"/")}});var qJ=E((jit,yx)=>{"use strict";var{promisify:xQe}=require("util"),KJ=require("fs"),pa=require("path"),UJ=gy(),kQe=TJ(),sp=OJ(),HJ=["**/node_modules/**","**/flow-typed/**","**/coverage/**","**/.git"],PQe=xQe(KJ.readFile),DQe=t=>e=>e.startsWith("!")?"!"+pa.posix.join(t,e.slice(1)):pa.posix.join(t,e),RQe=(t,e)=>{let r=sp(pa.relative(e.cwd,pa.dirname(e.fileName)));return t.split(/\r?\n/).filter(Boolean).filter(i=>!i.startsWith("#")).map(DQe(r))},GJ=t=>{let e=kQe();for(let r of t)e.add(RQe(r.content,{cwd:r.cwd,fileName:r.filePath}));return e},FQe=(t,e)=>{if(t=sp(t),pa.isAbsolute(e)){if(sp(e).startsWith(t))return e;throw new Error(`Path ${e} is not in cwd ${t}`)}return pa.join(t,e)},jJ=(t,e)=>r=>t.ignores(sp(pa.relative(e,FQe(e,r.path||r)))),NQe=async(t,e)=>{let r=pa.join(e,t),i=await PQe(r,"utf8");return{cwd:e,filePath:r,content:i}},LQe=(t,e)=>{let r=pa.join(e,t),i=KJ.readFileSync(r,"utf8");return{cwd:e,filePath:r,content:i}},YJ=({ignore:t=[],cwd:e=sp(process.cwd())}={})=>({ignore:t,cwd:e});yx.exports=async t=>{t=YJ(t);let e=await UJ("**/.gitignore",{ignore:HJ.concat(t.ignore),cwd:t.cwd}),r=await Promise.all(e.map(n=>NQe(n,t.cwd))),i=GJ(r);return jJ(i,t.cwd)};yx.exports.sync=t=>{t=YJ(t);let r=UJ.sync("**/.gitignore",{ignore:HJ.concat(t.ignore),cwd:t.cwd}).map(n=>LQe(n,t.cwd)),i=GJ(r);return jJ(i,t.cwd)}});var VJ=E((Yit,JJ)=>{"use strict";var{Transform:TQe}=require("stream"),wx=class extends TQe{constructor(){super({objectMode:!0})}},WJ=class extends wx{constructor(e){super();this._filter=e}_transform(e,r,i){this._filter(e)&&this.push(e),i()}},zJ=class extends wx{constructor(){super();this._pushed=new Set}_transform(e,r,i){this._pushed.has(e)||(this.push(e),this._pushed.add(e)),i()}};JJ.exports={FilterStream:WJ,UniqueStream:zJ}});var vx=E((qit,Ul)=>{"use strict";var _J=require("fs"),hy=QY(),MQe=wS(),py=gy(),dy=xJ(),Bx=qJ(),{FilterStream:OQe,UniqueStream:KQe}=VJ(),XJ=()=>!1,ZJ=t=>t[0]==="!",UQe=t=>{if(!t.every(e=>typeof e=="string"))throw new TypeError("Patterns must be a string or an array of strings")},HQe=(t={})=>{if(!t.cwd)return;let e;try{e=_J.statSync(t.cwd)}catch{return}if(!e.isDirectory())throw new Error("The `cwd` option must be a path to a directory")},GQe=t=>t.stats instanceof _J.Stats?t.path:t,Cy=(t,e)=>{t=hy([].concat(t)),UQe(t),HQe(e);let r=[];e=P({ignore:[],expandDirectories:!0},e);for(let[i,n]of t.entries()){if(ZJ(n))continue;let s=t.slice(i).filter(a=>ZJ(a)).map(a=>a.slice(1)),o=_(P({},e),{ignore:e.ignore.concat(s)});r.push({pattern:n,options:o})}return r},jQe=(t,e)=>{let r={};return t.options.cwd&&(r.cwd=t.options.cwd),Array.isArray(t.options.expandDirectories)?r=_(P({},r),{files:t.options.expandDirectories}):typeof t.options.expandDirectories=="object"&&(r=P(P({},r),t.options.expandDirectories)),e(t.pattern,r)},Qx=(t,e)=>t.options.expandDirectories?jQe(t,e):[t.pattern],$J=t=>t&&t.gitignore?Bx.sync({cwd:t.cwd,ignore:t.ignore}):XJ,bx=t=>e=>{let{options:r}=t;return r.ignore&&Array.isArray(r.ignore)&&r.expandDirectories&&(r.ignore=dy.sync(r.ignore)),{pattern:e,options:r}};Ul.exports=async(t,e)=>{let r=Cy(t,e),i=async()=>e&&e.gitignore?Bx({cwd:e.cwd,ignore:e.ignore}):XJ,n=async()=>{let l=await Promise.all(r.map(async c=>{let u=await Qx(c,dy);return Promise.all(u.map(bx(c)))}));return hy(...l)},[s,o]=await Promise.all([i(),n()]),a=await Promise.all(o.map(l=>py(l.pattern,l.options)));return hy(...a).filter(l=>!s(GQe(l)))};Ul.exports.sync=(t,e)=>{let r=Cy(t,e),i=[];for(let o of r){let a=Qx(o,dy.sync).map(bx(o));i.push(...a)}let n=$J(e),s=[];for(let o of i)s=hy(s,py.sync(o.pattern,o.options));return s.filter(o=>!n(o))};Ul.exports.stream=(t,e)=>{let r=Cy(t,e),i=[];for(let a of r){let l=Qx(a,dy.sync).map(bx(a));i.push(...l)}let n=$J(e),s=new OQe(a=>!n(a)),o=new KQe;return MQe(i.map(a=>py.stream(a.pattern,a.options))).pipe(s).pipe(o)};Ul.exports.generateGlobTasks=Cy;Ul.exports.hasMagic=(t,e)=>[].concat(t).some(r=>py.isDynamicPattern(r,e));Ul.exports.gitignore=Bx});var Ca=E((da,Dy)=>{"use strict";Object.defineProperty(da,"__esModule",{value:!0});var A3=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function ibe(t){return A3.includes(t)}var nbe=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","FormData","URLSearchParams","HTMLElement",...A3];function sbe(t){return nbe.includes(t)}var obe=["null","undefined","string","number","bigint","boolean","symbol"];function abe(t){return obe.includes(t)}function Hu(t){return e=>typeof e===t}var{toString:l3}=Object.prototype,mp=t=>{let e=l3.call(t).slice(8,-1);if(/HTML\w+Element/.test(e)&&j.domElement(t))return"HTMLElement";if(sbe(e))return e},er=t=>e=>mp(e)===t;function j(t){if(t===null)return"null";switch(typeof t){case"undefined":return"undefined";case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"function":return"Function";case"bigint":return"bigint";case"symbol":return"symbol";default:}if(j.observable(t))return"Observable";if(j.array(t))return"Array";if(j.buffer(t))return"Buffer";let e=mp(t);if(e)return e;if(t instanceof String||t instanceof Boolean||t instanceof Number)throw new TypeError("Please don't use object wrappers for primitive types");return"Object"}j.undefined=Hu("undefined");j.string=Hu("string");var Abe=Hu("number");j.number=t=>Abe(t)&&!j.nan(t);j.bigint=Hu("bigint");j.function_=Hu("function");j.null_=t=>t===null;j.class_=t=>j.function_(t)&&t.toString().startsWith("class ");j.boolean=t=>t===!0||t===!1;j.symbol=Hu("symbol");j.numericString=t=>j.string(t)&&!j.emptyStringOrWhitespace(t)&&!Number.isNaN(Number(t));j.array=(t,e)=>Array.isArray(t)?j.function_(e)?t.every(e):!0:!1;j.buffer=t=>{var e,r,i,n;return(n=(i=(r=(e=t)===null||e===void 0?void 0:e.constructor)===null||r===void 0?void 0:r.isBuffer)===null||i===void 0?void 0:i.call(r,t))!==null&&n!==void 0?n:!1};j.nullOrUndefined=t=>j.null_(t)||j.undefined(t);j.object=t=>!j.null_(t)&&(typeof t=="object"||j.function_(t));j.iterable=t=>{var e;return j.function_((e=t)===null||e===void 0?void 0:e[Symbol.iterator])};j.asyncIterable=t=>{var e;return j.function_((e=t)===null||e===void 0?void 0:e[Symbol.asyncIterator])};j.generator=t=>j.iterable(t)&&j.function_(t.next)&&j.function_(t.throw);j.asyncGenerator=t=>j.asyncIterable(t)&&j.function_(t.next)&&j.function_(t.throw);j.nativePromise=t=>er("Promise")(t);var lbe=t=>{var e,r;return j.function_((e=t)===null||e===void 0?void 0:e.then)&&j.function_((r=t)===null||r===void 0?void 0:r.catch)};j.promise=t=>j.nativePromise(t)||lbe(t);j.generatorFunction=er("GeneratorFunction");j.asyncGeneratorFunction=t=>mp(t)==="AsyncGeneratorFunction";j.asyncFunction=t=>mp(t)==="AsyncFunction";j.boundFunction=t=>j.function_(t)&&!t.hasOwnProperty("prototype");j.regExp=er("RegExp");j.date=er("Date");j.error=er("Error");j.map=t=>er("Map")(t);j.set=t=>er("Set")(t);j.weakMap=t=>er("WeakMap")(t);j.weakSet=t=>er("WeakSet")(t);j.int8Array=er("Int8Array");j.uint8Array=er("Uint8Array");j.uint8ClampedArray=er("Uint8ClampedArray");j.int16Array=er("Int16Array");j.uint16Array=er("Uint16Array");j.int32Array=er("Int32Array");j.uint32Array=er("Uint32Array");j.float32Array=er("Float32Array");j.float64Array=er("Float64Array");j.bigInt64Array=er("BigInt64Array");j.bigUint64Array=er("BigUint64Array");j.arrayBuffer=er("ArrayBuffer");j.sharedArrayBuffer=er("SharedArrayBuffer");j.dataView=er("DataView");j.directInstanceOf=(t,e)=>Object.getPrototypeOf(t)===e.prototype;j.urlInstance=t=>er("URL")(t);j.urlString=t=>{if(!j.string(t))return!1;try{return new URL(t),!0}catch(e){return!1}};j.truthy=t=>Boolean(t);j.falsy=t=>!t;j.nan=t=>Number.isNaN(t);j.primitive=t=>j.null_(t)||abe(typeof t);j.integer=t=>Number.isInteger(t);j.safeInteger=t=>Number.isSafeInteger(t);j.plainObject=t=>{if(l3.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);return e===null||e===Object.getPrototypeOf({})};j.typedArray=t=>ibe(mp(t));var cbe=t=>j.safeInteger(t)&&t>=0;j.arrayLike=t=>!j.nullOrUndefined(t)&&!j.function_(t)&&cbe(t.length);j.inRange=(t,e)=>{if(j.number(e))return t>=Math.min(0,e)&&t<=Math.max(e,0);if(j.array(e)&&e.length===2)return t>=Math.min(...e)&&t<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var ube=1,gbe=["innerHTML","ownerDocument","style","attributes","nodeValue"];j.domElement=t=>j.object(t)&&t.nodeType===ube&&j.string(t.nodeName)&&!j.plainObject(t)&&gbe.every(e=>e in t);j.observable=t=>{var e,r,i,n;return t?t===((r=(e=t)[Symbol.observable])===null||r===void 0?void 0:r.call(e))||t===((n=(i=t)["@@observable"])===null||n===void 0?void 0:n.call(i)):!1};j.nodeStream=t=>j.object(t)&&j.function_(t.pipe)&&!j.observable(t);j.infinite=t=>t===Infinity||t===-Infinity;var c3=t=>e=>j.integer(e)&&Math.abs(e%2)===t;j.evenInteger=c3(0);j.oddInteger=c3(1);j.emptyArray=t=>j.array(t)&&t.length===0;j.nonEmptyArray=t=>j.array(t)&&t.length>0;j.emptyString=t=>j.string(t)&&t.length===0;j.nonEmptyString=t=>j.string(t)&&t.length>0;var fbe=t=>j.string(t)&&!/\S/.test(t);j.emptyStringOrWhitespace=t=>j.emptyString(t)||fbe(t);j.emptyObject=t=>j.object(t)&&!j.map(t)&&!j.set(t)&&Object.keys(t).length===0;j.nonEmptyObject=t=>j.object(t)&&!j.map(t)&&!j.set(t)&&Object.keys(t).length>0;j.emptySet=t=>j.set(t)&&t.size===0;j.nonEmptySet=t=>j.set(t)&&t.size>0;j.emptyMap=t=>j.map(t)&&t.size===0;j.nonEmptyMap=t=>j.map(t)&&t.size>0;j.propertyKey=t=>j.any([j.string,j.number,j.symbol],t);j.formData=t=>er("FormData")(t);j.urlSearchParams=t=>er("URLSearchParams")(t);var u3=(t,e,r)=>{if(!j.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(r.length===0)throw new TypeError("Invalid number of values");return t.call(r,e)};j.any=(t,...e)=>(j.array(t)?t:[t]).some(i=>u3(Array.prototype.some,i,e));j.all=(t,...e)=>u3(Array.prototype.every,t,e);var Te=(t,e,r,i={})=>{if(!t){let{multipleValues:n}=i,s=n?`received values of types ${[...new Set(r.map(o=>`\`${j(o)}\``))].join(", ")}`:`received value of type \`${j(r)}\``;throw new TypeError(`Expected value which is \`${e}\`, ${s}.`)}};da.assert={undefined:t=>Te(j.undefined(t),"undefined",t),string:t=>Te(j.string(t),"string",t),number:t=>Te(j.number(t),"number",t),bigint:t=>Te(j.bigint(t),"bigint",t),function_:t=>Te(j.function_(t),"Function",t),null_:t=>Te(j.null_(t),"null",t),class_:t=>Te(j.class_(t),"Class",t),boolean:t=>Te(j.boolean(t),"boolean",t),symbol:t=>Te(j.symbol(t),"symbol",t),numericString:t=>Te(j.numericString(t),"string with a number",t),array:(t,e)=>{Te(j.array(t),"Array",t),e&&t.forEach(e)},buffer:t=>Te(j.buffer(t),"Buffer",t),nullOrUndefined:t=>Te(j.nullOrUndefined(t),"null or undefined",t),object:t=>Te(j.object(t),"Object",t),iterable:t=>Te(j.iterable(t),"Iterable",t),asyncIterable:t=>Te(j.asyncIterable(t),"AsyncIterable",t),generator:t=>Te(j.generator(t),"Generator",t),asyncGenerator:t=>Te(j.asyncGenerator(t),"AsyncGenerator",t),nativePromise:t=>Te(j.nativePromise(t),"native Promise",t),promise:t=>Te(j.promise(t),"Promise",t),generatorFunction:t=>Te(j.generatorFunction(t),"GeneratorFunction",t),asyncGeneratorFunction:t=>Te(j.asyncGeneratorFunction(t),"AsyncGeneratorFunction",t),asyncFunction:t=>Te(j.asyncFunction(t),"AsyncFunction",t),boundFunction:t=>Te(j.boundFunction(t),"Function",t),regExp:t=>Te(j.regExp(t),"RegExp",t),date:t=>Te(j.date(t),"Date",t),error:t=>Te(j.error(t),"Error",t),map:t=>Te(j.map(t),"Map",t),set:t=>Te(j.set(t),"Set",t),weakMap:t=>Te(j.weakMap(t),"WeakMap",t),weakSet:t=>Te(j.weakSet(t),"WeakSet",t),int8Array:t=>Te(j.int8Array(t),"Int8Array",t),uint8Array:t=>Te(j.uint8Array(t),"Uint8Array",t),uint8ClampedArray:t=>Te(j.uint8ClampedArray(t),"Uint8ClampedArray",t),int16Array:t=>Te(j.int16Array(t),"Int16Array",t),uint16Array:t=>Te(j.uint16Array(t),"Uint16Array",t),int32Array:t=>Te(j.int32Array(t),"Int32Array",t),uint32Array:t=>Te(j.uint32Array(t),"Uint32Array",t),float32Array:t=>Te(j.float32Array(t),"Float32Array",t),float64Array:t=>Te(j.float64Array(t),"Float64Array",t),bigInt64Array:t=>Te(j.bigInt64Array(t),"BigInt64Array",t),bigUint64Array:t=>Te(j.bigUint64Array(t),"BigUint64Array",t),arrayBuffer:t=>Te(j.arrayBuffer(t),"ArrayBuffer",t),sharedArrayBuffer:t=>Te(j.sharedArrayBuffer(t),"SharedArrayBuffer",t),dataView:t=>Te(j.dataView(t),"DataView",t),urlInstance:t=>Te(j.urlInstance(t),"URL",t),urlString:t=>Te(j.urlString(t),"string with a URL",t),truthy:t=>Te(j.truthy(t),"truthy",t),falsy:t=>Te(j.falsy(t),"falsy",t),nan:t=>Te(j.nan(t),"NaN",t),primitive:t=>Te(j.primitive(t),"primitive",t),integer:t=>Te(j.integer(t),"integer",t),safeInteger:t=>Te(j.safeInteger(t),"integer",t),plainObject:t=>Te(j.plainObject(t),"plain object",t),typedArray:t=>Te(j.typedArray(t),"TypedArray",t),arrayLike:t=>Te(j.arrayLike(t),"array-like",t),domElement:t=>Te(j.domElement(t),"HTMLElement",t),observable:t=>Te(j.observable(t),"Observable",t),nodeStream:t=>Te(j.nodeStream(t),"Node.js Stream",t),infinite:t=>Te(j.infinite(t),"infinite number",t),emptyArray:t=>Te(j.emptyArray(t),"empty array",t),nonEmptyArray:t=>Te(j.nonEmptyArray(t),"non-empty array",t),emptyString:t=>Te(j.emptyString(t),"empty string",t),nonEmptyString:t=>Te(j.nonEmptyString(t),"non-empty string",t),emptyStringOrWhitespace:t=>Te(j.emptyStringOrWhitespace(t),"empty string or whitespace",t),emptyObject:t=>Te(j.emptyObject(t),"empty object",t),nonEmptyObject:t=>Te(j.nonEmptyObject(t),"non-empty object",t),emptySet:t=>Te(j.emptySet(t),"empty set",t),nonEmptySet:t=>Te(j.nonEmptySet(t),"non-empty set",t),emptyMap:t=>Te(j.emptyMap(t),"empty map",t),nonEmptyMap:t=>Te(j.nonEmptyMap(t),"non-empty map",t),propertyKey:t=>Te(j.propertyKey(t),"PropertyKey",t),formData:t=>Te(j.formData(t),"FormData",t),urlSearchParams:t=>Te(j.urlSearchParams(t),"URLSearchParams",t),evenInteger:t=>Te(j.evenInteger(t),"even integer",t),oddInteger:t=>Te(j.oddInteger(t),"odd integer",t),directInstanceOf:(t,e)=>Te(j.directInstanceOf(t,e),"T",t),inRange:(t,e)=>Te(j.inRange(t,e),"in range",t),any:(t,...e)=>Te(j.any(t,...e),"predicate returns truthy for any value",e,{multipleValues:!0}),all:(t,...e)=>Te(j.all(t,...e),"predicate returns truthy for all values",e,{multipleValues:!0})};Object.defineProperties(j,{class:{value:j.class_},function:{value:j.function_},null:{value:j.null_}});Object.defineProperties(da.assert,{class:{value:da.assert.class_},function:{value:da.assert.function_},null:{value:da.assert.null_}});da.default=j;Dy.exports=j;Dy.exports.default=j;Dy.exports.assert=da.assert});var g3=E((gnt,Ux)=>{"use strict";var Hx=class extends Error{constructor(e){super(e||"Promise was canceled");this.name="CancelError"}get isCanceled(){return!0}},Ep=class{static fn(e){return(...r)=>new Ep((i,n,s)=>{r.push(s),e(...r).then(i,n)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((r,i)=>{this._reject=i;let n=a=>{this._isPending=!1,r(a)},s=a=>{this._isPending=!1,i(a)},o=a=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(a)};return Object.defineProperties(o,{shouldReject:{get:()=>this._rejectOnCancel,set:a=>{this._rejectOnCancel=a}}}),e(n,s,o)})}then(e,r){return this._promise.then(e,r)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let r of this._cancelHandlers)r()}catch(r){this._reject(r)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new Hx(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(Ep.prototype,Promise.prototype);Ux.exports=Ep;Ux.exports.CancelError=Hx});var f3=E((Gx,jx)=>{"use strict";Object.defineProperty(Gx,"__esModule",{value:!0});var hbe=require("tls"),Yx=(t,e)=>{let r;typeof e=="function"?r={connect:e}:r=e;let i=typeof r.connect=="function",n=typeof r.secureConnect=="function",s=typeof r.close=="function",o=()=>{i&&r.connect(),t instanceof hbe.TLSSocket&&n&&(t.authorized?r.secureConnect():t.authorizationError||t.once("secureConnect",r.secureConnect)),s&&t.once("close",r.close)};t.writable&&!t.connecting?o():t.connecting?t.once("connect",o):t.destroyed&&s&&r.close(t._hadError)};Gx.default=Yx;jx.exports=Yx;jx.exports.default=Yx});var h3=E((qx,Jx)=>{"use strict";Object.defineProperty(qx,"__esModule",{value:!0});var pbe=f3(),dbe=Number(process.versions.node.split(".")[0]),Wx=t=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};t.timings=e;let r=o=>{let a=o.emit.bind(o);o.emit=(l,...c)=>(l==="error"&&(e.error=Date.now(),e.phases.total=e.error-e.start,o.emit=a),a(l,...c))};r(t),t.prependOnceListener("abort",()=>{e.abort=Date.now(),(!e.response||dbe>=13)&&(e.phases.total=Date.now()-e.start)});let i=o=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let a=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};o.prependOnceListener("lookup",a),pbe.default(o,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(o.removeListener("lookup",a),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};t.socket?i(t.socket):t.prependOnceListener("socket",i);let n=()=>{var o;e.upload=Date.now(),e.phases.request=e.upload-(o=e.secureConnect,o!=null?o:e.connect)};return(()=>typeof t.writableFinished=="boolean"?t.writableFinished:t.finished&&t.outputSize===0&&(!t.socket||t.socket.writableLength===0))()?n():t.prependOnceListener("finish",n),t.prependOnceListener("response",o=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,o.timings=e,r(o),o.prependOnceListener("end",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};qx.default=Wx;Jx.exports=Wx;Jx.exports.default=Wx});var y3=E((fnt,zx)=>{"use strict";var{V4MAPPED:Cbe,ADDRCONFIG:mbe,ALL:p3,promises:{Resolver:d3},lookup:Ebe}=require("dns"),{promisify:Vx}=require("util"),Ibe=require("os"),Gu=Symbol("cacheableLookupCreateConnection"),_x=Symbol("cacheableLookupInstance"),C3=Symbol("expires"),ybe=typeof p3=="number",m3=t=>{if(!(t&&typeof t.createConnection=="function"))throw new Error("Expected an Agent instance as the first argument")},wbe=t=>{for(let e of t)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},E3=()=>{let t=!1,e=!1;for(let r of Object.values(Ibe.networkInterfaces()))for(let i of r)if(!i.internal&&(i.family==="IPv6"?e=!0:t=!0,t&&e))return{has4:t,has6:e};return{has4:t,has6:e}},Bbe=t=>Symbol.iterator in t,I3={ttl:!0},Qbe={all:!0},Xx=class{constructor({cache:e=new Map,maxTtl:r=Infinity,fallbackDuration:i=3600,errorTtl:n=.15,resolver:s=new d3,lookup:o=Ebe}={}){if(this.maxTtl=r,this.errorTtl=n,this._cache=e,this._resolver=s,this._dnsLookup=Vx(o),this._resolver instanceof d3?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=Vx(this._resolver.resolve4.bind(this._resolver)),this._resolve6=Vx(this._resolver.resolve6.bind(this._resolver))),this._iface=E3(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,i<1)this._fallback=!1;else{this._fallback=!0;let a=setInterval(()=>{this._hostnamesToFallback.clear()},i*1e3);a.unref&&a.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,r,i){if(typeof r=="function"?(i=r,r={}):typeof r=="number"&&(r={family:r}),!i)throw new Error("Callback must be a function.");this.lookupAsync(e,r).then(n=>{r.all?i(null,n):i(null,n.address,n.family,n.expires,n.ttl)},i)}async lookupAsync(e,r={}){typeof r=="number"&&(r={family:r});let i=await this.query(e);if(r.family===6){let n=i.filter(s=>s.family===6);r.hints&Cbe&&(ybe&&r.hints&p3||n.length===0)?wbe(i):i=n}else r.family===4&&(i=i.filter(n=>n.family===4));if(r.hints&mbe){let{_iface:n}=this;i=i.filter(s=>s.family===6?n.has6:n.has4)}if(i.length===0){let n=new Error(`cacheableLookup ENOTFOUND ${e}`);throw n.code="ENOTFOUND",n.hostname=e,n}return r.all?i:i[0]}async query(e){let r=await this._cache.get(e);if(!r){let i=this._pending[e];if(i)r=await i;else{let n=this.queryAndCache(e);this._pending[e]=n,r=await n}}return r=r.map(i=>P({},i)),r}async _resolve(e){let r=async c=>{try{return await c}catch(u){if(u.code==="ENODATA"||u.code==="ENOTFOUND")return[];throw u}},[i,n]=await Promise.all([this._resolve4(e,I3),this._resolve6(e,I3)].map(c=>r(c))),s=0,o=0,a=0,l=Date.now();for(let c of i)c.family=4,c.expires=l+c.ttl*1e3,s=Math.max(s,c.ttl);for(let c of n)c.family=6,c.expires=l+c.ttl*1e3,o=Math.max(o,c.ttl);return i.length>0?n.length>0?a=Math.min(s,o):a=s:a=o,{entries:[...i,...n],cacheTtl:a}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch(r){return{entries:[],cacheTtl:0}}}async _set(e,r,i){if(this.maxTtl>0&&i>0){i=Math.min(i,this.maxTtl)*1e3,r[C3]=Date.now()+i;try{await this._cache.set(e,r,i)}catch(n){this.lookupAsync=async()=>{let s=new Error("Cache Error. Please recreate the CacheableLookup instance.");throw s.cause=n,s}}Bbe(this._cache)&&this._tick(i)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,Qbe);try{let r=await this._resolve(e);r.entries.length===0&&this._fallback&&(r=await this._lookup(e),r.entries.length!==0&&this._hostnamesToFallback.add(e));let i=r.entries.length===0?this.errorTtl:r.cacheTtl;return await this._set(e,r.entries,i),delete this._pending[e],r.entries}catch(r){throw delete this._pending[e],r}}_tick(e){let r=this._nextRemovalTime;(!r||e{this._nextRemovalTime=!1;let i=Infinity,n=Date.now();for(let[s,o]of this._cache){let a=o[C3];n>=a?this._cache.delete(s):a("lookup"in r||(r.lookup=this.lookup),e[Gu](r,i))}uninstall(e){if(m3(e),e[Gu]){if(e[_x]!==this)throw new Error("The agent is not owned by this CacheableLookup instance");e.createConnection=e[Gu],delete e[Gu],delete e[_x]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=E3(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};zx.exports=Xx;zx.exports.default=Xx});var Q3=E((hnt,Zx)=>{"use strict";var bbe=typeof URL=="undefined"?require("url").URL:URL,vbe="text/plain",Sbe="us-ascii",w3=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),xbe=(t,{stripHash:e})=>{let r=t.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!r)throw new Error(`Invalid URL: ${t}`);let i=r[1].split(";"),n=r[2],s=e?"":r[3],o=!1;i[i.length-1]==="base64"&&(i.pop(),o=!0);let a=(i.shift()||"").toLowerCase(),c=[...i.map(u=>{let[g,f=""]=u.split("=").map(h=>h.trim());return g==="charset"&&(f=f.toLowerCase(),f===Sbe)?"":`${g}${f?`=${f}`:""}`}).filter(Boolean)];return o&&c.push("base64"),(c.length!==0||a&&a!==vbe)&&c.unshift(a),`data:${c.join(";")},${o?n.trim():n}${s?`#${s}`:""}`},B3=(t,e)=>{if(e=P({defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0},e),Reflect.has(e,"normalizeHttps"))throw new Error("options.normalizeHttps is renamed to options.forceHttp");if(Reflect.has(e,"normalizeHttp"))throw new Error("options.normalizeHttp is renamed to options.forceHttps");if(Reflect.has(e,"stripFragment"))throw new Error("options.stripFragment is renamed to options.stripHash");if(t=t.trim(),/^data:/i.test(t))return xbe(t,e);let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let n=new bbe(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&n.protocol==="https:"&&(n.protocol="http:"),e.forceHttps&&n.protocol==="http:"&&(n.protocol="https:"),e.stripAuthentication&&(n.username="",n.password=""),e.stripHash&&(n.hash=""),n.pathname&&(n.pathname=n.pathname.replace(/((?!:).|^)\/{2,}/g,(s,o)=>/^(?!\/)/g.test(o)?`${o}/`:"/")),n.pathname&&(n.pathname=decodeURI(n.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let s=n.pathname.split("/"),o=s[s.length-1];w3(o,e.removeDirectoryIndex)&&(s=s.slice(0,s.length-1),n.pathname=s.slice(1).join("/")+"/")}if(n.hostname&&(n.hostname=n.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let s of[...n.searchParams.keys()])w3(s,e.removeQueryParameters)&&n.searchParams.delete(s);return e.sortQueryParameters&&n.searchParams.sort(),e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\/$/,"")),t=n.toString(),(e.removeTrailingSlash||n.pathname==="/")&&n.hash===""&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t};Zx.exports=B3;Zx.exports.default=B3});var S3=E((pnt,b3)=>{b3.exports=v3;function v3(t,e){if(t&&e)return v3(t)(e);if(typeof t!="function")throw new TypeError("need wrapper function");return Object.keys(t).forEach(function(i){r[i]=t[i]}),r;function r(){for(var i=new Array(arguments.length),n=0;n{var x3=S3();$x.exports=x3(Ry);$x.exports.strict=x3(k3);Ry.proto=Ry(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return Ry(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return k3(this)},configurable:!0})});function Ry(t){var e=function(){return e.called?e.value:(e.called=!0,e.value=t.apply(this,arguments))};return e.called=!1,e}function k3(t){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=t.apply(this,arguments)},r=t.name||"Function wrapped with `once`";return e.onceError=r+" shouldn't be called more than once",e.called=!1,e}});var tk=E((Cnt,P3)=>{var kbe=ek(),Pbe=function(){},Dbe=function(t){return t.setHeader&&typeof t.abort=="function"},Rbe=function(t){return t.stdio&&Array.isArray(t.stdio)&&t.stdio.length===3},D3=function(t,e,r){if(typeof e=="function")return D3(t,null,e);e||(e={}),r=kbe(r||Pbe);var i=t._writableState,n=t._readableState,s=e.readable||e.readable!==!1&&t.readable,o=e.writable||e.writable!==!1&&t.writable,a=function(){t.writable||l()},l=function(){o=!1,s||r.call(t)},c=function(){s=!1,o||r.call(t)},u=function(p){r.call(t,p?new Error("exited with error code: "+p):null)},g=function(p){r.call(t,p)},f=function(){if(s&&!(n&&n.ended))return r.call(t,new Error("premature close"));if(o&&!(i&&i.ended))return r.call(t,new Error("premature close"))},h=function(){t.req.on("finish",l)};return Dbe(t)?(t.on("complete",l),t.on("abort",f),t.req?h():t.on("request",h)):o&&!i&&(t.on("end",a),t.on("close",a)),Rbe(t)&&t.on("exit",u),t.on("end",c),t.on("finish",l),e.error!==!1&&t.on("error",g),t.on("close",f),function(){t.removeListener("complete",l),t.removeListener("abort",f),t.removeListener("request",h),t.req&&t.req.removeListener("finish",l),t.removeListener("end",a),t.removeListener("close",a),t.removeListener("finish",l),t.removeListener("exit",u),t.removeListener("end",c),t.removeListener("error",g),t.removeListener("close",f)}};P3.exports=D3});var N3=E((mnt,R3)=>{var Fbe=ek(),Nbe=tk(),rk=require("fs"),Ip=function(){},Lbe=/^v?\.0/.test(process.version),Fy=function(t){return typeof t=="function"},Tbe=function(t){return!Lbe||!rk?!1:(t instanceof(rk.ReadStream||Ip)||t instanceof(rk.WriteStream||Ip))&&Fy(t.close)},Mbe=function(t){return t.setHeader&&Fy(t.abort)},Obe=function(t,e,r,i){i=Fbe(i);var n=!1;t.on("close",function(){n=!0}),Nbe(t,{readable:e,writable:r},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,Tbe(t))return t.close(Ip);if(Mbe(t))return t.abort();if(Fy(t.destroy))return t.destroy();i(o||new Error("stream was destroyed"))}}},F3=function(t){t()},Kbe=function(t,e){return t.pipe(e)},Ube=function(){var t=Array.prototype.slice.call(arguments),e=Fy(t[t.length-1]||Ip)&&t.pop()||Ip;if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new Error("pump requires two streams per minimum");var r,i=t.map(function(n,s){var o=s0;return Obe(n,o,a,function(l){r||(r=l),l&&i.forEach(F3),!o&&(i.forEach(F3),e(r))})});return t.reduce(Kbe)};R3.exports=Ube});var T3=E((Ent,L3)=>{"use strict";var{PassThrough:Hbe}=require("stream");L3.exports=t=>{t=P({},t);let{array:e}=t,{encoding:r}=t,i=r==="buffer",n=!1;e?n=!(r||i):r=r||"utf8",i&&(r=null);let s=new Hbe({objectMode:n});r&&s.setEncoding(r);let o=0,a=[];return s.on("data",l=>{a.push(l),n?o=a.length:o+=l.length}),s.getBufferedValue=()=>e?a:i?Buffer.concat(a,o):a.join(""),s.getBufferedLength=()=>o,s}});var M3=E((Int,ju)=>{"use strict";var Gbe=N3(),jbe=T3(),ik=class extends Error{constructor(){super("maxBuffer exceeded");this.name="MaxBufferError"}};async function Ny(t,e){if(!t)return Promise.reject(new Error("Expected a stream"));e=P({maxBuffer:Infinity},e);let{maxBuffer:r}=e,i;return await new Promise((n,s)=>{let o=a=>{a&&(a.bufferedData=i.getBufferedValue()),s(a)};i=Gbe(t,jbe(e),a=>{if(a){o(a);return}n()}),i.on("data",()=>{i.getBufferedLength()>r&&o(new ik)})}),i.getBufferedValue()}ju.exports=Ny;ju.exports.default=Ny;ju.exports.buffer=(t,e)=>Ny(t,_(P({},e),{encoding:"buffer"}));ju.exports.array=(t,e)=>Ny(t,_(P({},e),{array:!0}));ju.exports.MaxBufferError=ik});var K3=E((wnt,O3)=>{"use strict";var Ybe=[200,203,204,206,300,301,404,405,410,414,501],qbe=[200,203,204,300,301,302,303,307,308,404,405,410,414,501],Jbe={date:!0,connection:!0,"keep-alive":!0,"proxy-authenticate":!0,"proxy-authorization":!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0},Wbe={"content-length":!0,"content-encoding":!0,"transfer-encoding":!0,"content-range":!0};function nk(t){let e={};if(!t)return e;let r=t.trim().split(/\s*,\s*/);for(let i of r){let[n,s]=i.split(/\s*=\s*/,2);e[n]=s===void 0?!0:s.replace(/^"|"$/g,"")}return e}function zbe(t){let e=[];for(let r in t){let i=t[r];e.push(i===!0?r:r+"="+i)}if(!!e.length)return e.join(", ")}O3.exports=class{constructor(e,r,{shared:i,cacheHeuristic:n,immutableMinTimeToLive:s,ignoreCargoCult:o,trustServerDate:a,_fromObject:l}={}){if(l){this._fromObject(l);return}if(!r||!r.headers)throw Error("Response headers missing");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=i!==!1,this._trustServerDate=a!==void 0?a:!0,this._cacheHeuristic=n!==void 0?n:.1,this._immutableMinTtl=s!==void 0?s:24*3600*1e3,this._status="status"in r?r.status:200,this._resHeaders=r.headers,this._rescc=nk(r.headers["cache-control"]),this._method="method"in e?e.method:"GET",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=r.headers.vary?e.headers:null,this._reqcc=nk(e.headers["cache-control"]),o&&"pre-check"in this._rescc&&"post-check"in this._rescc&&(delete this._rescc["pre-check"],delete this._rescc["post-check"],delete this._rescc["no-cache"],delete this._rescc["no-store"],delete this._rescc["must-revalidate"],this._resHeaders=Object.assign({},this._resHeaders,{"cache-control":zbe(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),!r.headers["cache-control"]&&/no-cache/.test(r.headers.pragma)&&(this._rescc["no-cache"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc["no-store"]&&(this._method==="GET"||this._method==="HEAD"||this._method==="POST"&&this._hasExplicitExpiration())&&qbe.indexOf(this._status)!==-1&&!this._rescc["no-store"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc.public||this._rescc["max-age"]||this._rescc["s-maxage"]||Ybe.indexOf(this._status)!==-1))}_hasExplicitExpiration(){return this._isShared&&this._rescc["s-maxage"]||this._rescc["max-age"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error("Request headers missing")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let r=nk(e.headers["cache-control"]);return r["no-cache"]||/no-cache/.test(e.headers.pragma)||r["max-age"]&&this.age()>r["max-age"]||r["min-fresh"]&&this.timeToLive()<1e3*r["min-fresh"]||this.stale()&&!(r["max-stale"]&&!this._rescc["must-revalidate"]&&(r["max-stale"]===!0||r["max-stale"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,r){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||r&&e.method==="HEAD")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc["must-revalidate"]||this._rescc.public||this._rescc["s-maxage"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary==="*")return!1;let r=this._resHeaders.vary.trim().toLowerCase().split(/\s*,\s*/);for(let i of r)if(e.headers[i]!==this._reqHeaders[i])return!1;return!0}_copyWithoutHopByHopHeaders(e){let r={};for(let i in e)Jbe[i]||(r[i]=e[i]);if(e.connection){let i=e.connection.trim().split(/\s*,\s*/);for(let n of i)delete r[n]}if(r.warning){let i=r.warning.split(/,/).filter(n=>!/^\s*1[0-9][0-9]/.test(n));i.length?r.warning=i.join(",").trim():delete r.warning}return r}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),r=this.age();return r>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:"")+'113 - "rfc7234 5.5.4"'),e.age=`${Math.round(r)}`,e.date=new Date(this.now()).toUTCString(),e}date(){return this._trustServerDate?this._serverDate():this._responseTime}_serverDate(){let e=Date.parse(this._resHeaders.date);if(isFinite(e)){let r=8*3600*1e3;if(Math.abs(this._responseTime-e)e&&(e=i)}let r=(this.now()-this._responseTime)/1e3;return e+r}_ageValue(){let e=parseInt(this._resHeaders.age);return isFinite(e)?e:0}maxAge(){if(!this.storable()||this._rescc["no-cache"]||this._isShared&&this._resHeaders["set-cookie"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary==="*")return 0;if(this._isShared){if(this._rescc["proxy-revalidate"])return 0;if(this._rescc["s-maxage"])return parseInt(this._rescc["s-maxage"],10)}if(this._rescc["max-age"])return parseInt(this._rescc["max-age"],10);let e=this._rescc.immutable?this._immutableMinTtl:0,r=this._serverDate();if(this._resHeaders.expires){let i=Date.parse(this._resHeaders.expires);return Number.isNaN(i)||ii)return Math.max(e,(r-i)/1e3*this._cacheHeuristic)}return e}timeToLive(){return Math.max(0,this.maxAge()-this.age())*1e3}stale(){return this.maxAge()<=this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error("Reinitialized");if(!e||e.v!==1)throw Error("Invalid serialization");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let r=this._copyWithoutHopByHopHeaders(e.headers);if(delete r["if-range"],!this._requestMatches(e,!0)||!this.storable())return delete r["if-none-match"],delete r["if-modified-since"],r;if(this._resHeaders.etag&&(r["if-none-match"]=r["if-none-match"]?`${r["if-none-match"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),r["accept-ranges"]||r["if-match"]||r["if-unmodified-since"]||this._method&&this._method!="GET"){if(delete r["if-modified-since"],r["if-none-match"]){let n=r["if-none-match"].split(/,/).filter(s=>!/^\s*W\//.test(s));n.length?r["if-none-match"]=n.join(",").trim():delete r["if-none-match"]}}else this._resHeaders["last-modified"]&&!r["if-modified-since"]&&(r["if-modified-since"]=this._resHeaders["last-modified"]);return r}revalidatedPolicy(e,r){if(this._assertRequestHasHeaders(e),!r||!r.headers)throw Error("Response headers missing");let i=!1;if(r.status!==void 0&&r.status!=304?i=!1:r.headers.etag&&!/^\s*W\//.test(r.headers.etag)?i=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag:this._resHeaders.etag&&r.headers.etag?i=this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag.replace(/^\s*W\//,""):this._resHeaders["last-modified"]?i=this._resHeaders["last-modified"]===r.headers["last-modified"]:!this._resHeaders.etag&&!this._resHeaders["last-modified"]&&!r.headers.etag&&!r.headers["last-modified"]&&(i=!0),!i)return{policy:new this.constructor(e,r),modified:r.status!=304,matches:!1};let n={};for(let o in this._resHeaders)n[o]=o in r.headers&&!Wbe[o]?r.headers[o]:this._resHeaders[o];let s=Object.assign({},r,{status:this._status,method:this._method,headers:n});return{policy:new this.constructor(e,s,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl,trustServerDate:this._trustServerDate}),modified:!1,matches:!0}}}});var Ly=E((Bnt,U3)=>{"use strict";U3.exports=t=>{let e={};for(let[r,i]of Object.entries(t))e[r.toLowerCase()]=i;return e}});var j3=E((Qnt,H3)=>{"use strict";var Vbe=require("stream").Readable,_be=Ly(),G3=class extends Vbe{constructor(e,r,i,n){if(typeof e!="number")throw new TypeError("Argument `statusCode` should be a number");if(typeof r!="object")throw new TypeError("Argument `headers` should be an object");if(!(i instanceof Buffer))throw new TypeError("Argument `body` should be a buffer");if(typeof n!="string")throw new TypeError("Argument `url` should be a string");super();this.statusCode=e,this.headers=_be(r),this.body=i,this.url=n}_read(){this.push(this.body),this.push(null)}};H3.exports=G3});var q3=E((bnt,Y3)=>{"use strict";var Xbe=["destroy","setTimeout","socket","headers","trailers","rawHeaders","statusCode","httpVersion","httpVersionMinor","httpVersionMajor","rawTrailers","statusMessage"];Y3.exports=(t,e)=>{let r=new Set(Object.keys(t).concat(Xbe));for(let i of r)i in e||(e[i]=typeof t[i]=="function"?t[i].bind(t):t[i])}});var W3=E((vnt,J3)=>{"use strict";var Zbe=require("stream").PassThrough,$be=q3(),eve=t=>{if(!(t&&t.pipe))throw new TypeError("Parameter `response` must be a response stream.");let e=new Zbe;return $be(t,e),t.pipe(e)};J3.exports=eve});var z3=E(sk=>{sk.stringify=function t(e){if(typeof e=="undefined")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(":base64:"+e.toString("base64"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e=="object"){var r="",i=Array.isArray(e);r=i?"[":"{";var n=!0;for(var s in e){var o=typeof e[s]=="function"||!i&&typeof e[s]=="undefined";Object.hasOwnProperty.call(e,s)&&!o&&(n||(r+=","),n=!1,i?e[s]==null?r+="null":r+=t(e[s]):e[s]!==void 0&&(r+=t(s)+":"+t(e[s])))}return r+=i?"]":"}",r}else return typeof e=="string"?JSON.stringify(/^:/.test(e)?":"+e:e):typeof e=="undefined"?"null":JSON.stringify(e)};sk.parse=function(t){return JSON.parse(t,function(e,r){return typeof r=="string"?/^:base64:/.test(r)?Buffer.from(r.substring(8),"base64"):/^:/.test(r)?r.substring(1):r:r})}});var Z3=E((xnt,V3)=>{"use strict";var tve=require("events"),_3=z3(),rve=t=>{let e={redis:"@keyv/redis",mongodb:"@keyv/mongo",mongo:"@keyv/mongo",sqlite:"@keyv/sqlite",postgresql:"@keyv/postgres",postgres:"@keyv/postgres",mysql:"@keyv/mysql"};if(t.adapter||t.uri){let r=t.adapter||/^[^:]*/.exec(t.uri)[0];return new(require(e[r]))(t)}return new Map},X3=class extends tve{constructor(e,r){super();if(this.opts=Object.assign({namespace:"keyv",serialize:_3.stringify,deserialize:_3.parse},typeof e=="string"?{uri:e}:e,r),!this.opts.store){let i=Object.assign({},this.opts);this.opts.store=rve(i)}typeof this.opts.store.on=="function"&&this.opts.store.on("error",i=>this.emit("error",i)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,r){e=this._getKeyPrefix(e);let{store:i}=this.opts;return Promise.resolve().then(()=>i.get(e)).then(n=>typeof n=="string"?this.opts.deserialize(n):n).then(n=>{if(n!==void 0){if(typeof n.expires=="number"&&Date.now()>n.expires){this.delete(e);return}return r&&r.raw?n:n.value}})}set(e,r,i){e=this._getKeyPrefix(e),typeof i=="undefined"&&(i=this.opts.ttl),i===0&&(i=void 0);let{store:n}=this.opts;return Promise.resolve().then(()=>{let s=typeof i=="number"?Date.now()+i:null;return r={value:r,expires:s},this.opts.serialize(r)}).then(s=>n.set(e,s,i)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:r}=this.opts;return Promise.resolve().then(()=>r.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};V3.exports=X3});var tW=E((knt,$3)=>{"use strict";var ive=require("events"),Ty=require("url"),nve=Q3(),sve=M3(),ok=K3(),eW=j3(),ove=Ly(),ave=W3(),Ave=Z3(),yo=class{constructor(e,r){if(typeof e!="function")throw new TypeError("Parameter `request` must be a function");return this.cache=new Ave({uri:typeof r=="string"&&r,store:typeof r!="string"&&r,namespace:"cacheable-request"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(r,i)=>{let n;if(typeof r=="string")n=ak(Ty.parse(r)),r={};else if(r instanceof Ty.URL)n=ak(Ty.parse(r.toString())),r={};else{let[g,...f]=(r.path||"").split("?"),h=f.length>0?`?${f.join("?")}`:"";n=ak(_(P({},r),{pathname:g,search:h}))}r=P(P({headers:{},method:"GET",cache:!0,strictTtl:!1,automaticFailover:!1},r),lve(n)),r.headers=ove(r.headers);let s=new ive,o=nve(Ty.format(n),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),a=`${r.method}:${o}`,l=!1,c=!1,u=g=>{c=!0;let f=!1,h,p=new Promise(m=>{h=()=>{f||(f=!0,m())}}),d=m=>{if(l&&!g.forceRefresh){m.status=m.statusCode;let B=ok.fromObject(l.cachePolicy).revalidatedPolicy(g,m);if(!B.modified){let b=B.policy.responseHeaders();m=new eW(l.statusCode,b,l.body,l.url),m.cachePolicy=B.policy,m.fromCache=!0}}m.fromCache||(m.cachePolicy=new ok(g,m,g),m.fromCache=!1);let I;g.cache&&m.cachePolicy.storable()?(I=ave(m),(async()=>{try{let B=sve.buffer(m);if(await Promise.race([p,new Promise(L=>m.once("end",L))]),f)return;let b=await B,R={cachePolicy:m.cachePolicy.toObject(),url:m.url,statusCode:m.fromCache?l.statusCode:m.statusCode,body:b},H=g.strictTtl?m.cachePolicy.timeToLive():void 0;g.maxTtl&&(H=H?Math.min(H,g.maxTtl):g.maxTtl),await this.cache.set(a,R,H)}catch(B){s.emit("error",new yo.CacheError(B))}})()):g.cache&&l&&(async()=>{try{await this.cache.delete(a)}catch(B){s.emit("error",new yo.CacheError(B))}})(),s.emit("response",I||m),typeof i=="function"&&i(I||m)};try{let m=e(g,d);m.once("error",h),m.once("abort",h),s.emit("request",m)}catch(m){s.emit("error",new yo.RequestError(m))}};return(async()=>{let g=async h=>{await Promise.resolve();let p=h.cache?await this.cache.get(a):void 0;if(typeof p=="undefined")return u(h);let d=ok.fromObject(p.cachePolicy);if(d.satisfiesWithoutRevalidation(h)&&!h.forceRefresh){let m=d.responseHeaders(),I=new eW(p.statusCode,m,p.body,p.url);I.cachePolicy=d,I.fromCache=!0,s.emit("response",I),typeof i=="function"&&i(I)}else l=p,h.headers=d.revalidationHeaders(h),u(h)},f=h=>s.emit("error",new yo.CacheError(h));this.cache.once("error",f),s.on("response",()=>this.cache.removeListener("error",f));try{await g(r)}catch(h){r.automaticFailover&&!c&&u(r),s.emit("error",new yo.CacheError(h))}})(),s}}};function lve(t){let e=P({},t);return e.path=`${t.pathname||"/"}${t.search||""}`,delete e.pathname,delete e.search,e}function ak(t){return{protocol:t.protocol,auth:t.auth,hostname:t.hostname||t.host||"localhost",port:t.port,pathname:t.pathname,search:t.search}}yo.RequestError=class extends Error{constructor(t){super(t.message);this.name="RequestError",Object.assign(this,t)}};yo.CacheError=class extends Error{constructor(t){super(t.message);this.name="CacheError",Object.assign(this,t)}};$3.exports=yo});var iW=E((Pnt,rW)=>{"use strict";var cve=["aborted","complete","headers","httpVersion","httpVersionMinor","httpVersionMajor","method","rawHeaders","rawTrailers","setTimeout","socket","statusCode","statusMessage","trailers","url"];rW.exports=(t,e)=>{if(e._readableState.autoDestroy)throw new Error("The second stream must have the `autoDestroy` option set to `false`");let r=new Set(Object.keys(t).concat(cve)),i={};for(let n of r)n in e||(i[n]={get(){let s=t[n];return typeof s=="function"?s.bind(t):s},set(s){t[n]=s},enumerable:!0,configurable:!1});return Object.defineProperties(e,i),t.once("aborted",()=>{e.destroy(),e.emit("aborted")}),t.once("close",()=>{t.complete&&e.readable?e.once("end",()=>{e.emit("close")}):e.emit("close")}),e}});var sW=E((Dnt,nW)=>{"use strict";var{Transform:uve,PassThrough:gve}=require("stream"),Ak=require("zlib"),fve=iW();nW.exports=t=>{let e=(t.headers["content-encoding"]||"").toLowerCase();if(!["gzip","deflate","br"].includes(e))return t;let r=e==="br";if(r&&typeof Ak.createBrotliDecompress!="function")return t.destroy(new Error("Brotli is not supported on Node.js < 12")),t;let i=!0,n=new uve({transform(a,l,c){i=!1,c(null,a)},flush(a){a()}}),s=new gve({autoDestroy:!1,destroy(a,l){t.destroy(),l(a)}}),o=r?Ak.createBrotliDecompress():Ak.createUnzip();return o.once("error",a=>{if(i&&!t.readable){s.end();return}s.destroy(a)}),fve(t,s),t.pipe(n).pipe(o).pipe(s),s}});var lk=E((Rnt,oW)=>{"use strict";var aW=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,r){if(this.cache.set(e,r),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction=="function")for(let[i,n]of this.oldCache.entries())this.onEviction(i,n);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let r=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,r),r}}set(e,r){return this.cache.has(e)?this.cache.set(e,r):this._set(e,r),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let r=this.cache.delete(e);return r&&this._size--,this.oldCache.delete(e)||r}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[r]=e;this.cache.has(r)||(yield e)}}get size(){let e=0;for(let r of this.oldCache.keys())this.cache.has(r)||e++;return Math.min(this._size+e,this.maxSize)}};oW.exports=aW});var uk=E((Fnt,AW)=>{"use strict";var hve=require("events"),pve=require("tls"),dve=require("http2"),Cve=lk(),_i=Symbol("currentStreamsCount"),lW=Symbol("request"),ns=Symbol("cachedOriginSet"),Yu=Symbol("gracefullyClosing"),mve=["maxDeflateDynamicTableSize","maxSessionMemory","maxHeaderListPairs","maxOutstandingPings","maxReservedRemoteStreams","maxSendHeaderBlockLength","paddingStrategy","localAddress","path","rejectUnauthorized","minDHSize","ca","cert","clientCertEngine","ciphers","key","pfx","servername","minVersion","maxVersion","secureProtocol","crl","honorCipherOrder","ecdhCurve","dhparam","secureOptions","sessionIdContext"],Eve=(t,e,r)=>{let i=0,n=t.length;for(;i>>1;r(t[s],e)?i=s+1:n=s}return i},Ive=(t,e)=>t.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,ck=(t,e)=>{for(let r of t)r[ns].lengthe[ns].includes(i))&&r[_i]+e[_i]<=e.remoteSettings.maxConcurrentStreams&&cW(r)},yve=(t,e)=>{for(let r of t)e[ns].lengthr[ns].includes(i))&&e[_i]+r[_i]<=r.remoteSettings.maxConcurrentStreams&&cW(e)},uW=({agent:t,isFree:e})=>{let r={};for(let i in t.sessions){let s=t.sessions[i].filter(o=>{let a=o[ma.kCurrentStreamsCount]{t[Yu]=!0,t[_i]===0&&t.close()},ma=class extends hve{constructor({timeout:e=6e4,maxSessions:r=Infinity,maxFreeSessions:i=10,maxCachedTlsSessions:n=100}={}){super();this.sessions={},this.queue={},this.timeout=e,this.maxSessions=r,this.maxFreeSessions=i,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new Cve({maxSize:n})}static normalizeOrigin(e,r){return typeof e=="string"&&(e=new URL(e)),r&&e.hostname!==r&&(e.hostname=r),e.origin}normalizeOptions(e){let r="";if(e)for(let i of mve)e[i]&&(r+=`:${e[i]}`);return r}_tryToCreateNewSession(e,r){if(!(e in this.queue)||!(r in this.queue[e]))return;let i=this.queue[e][r];this._sessionsCount{Array.isArray(i)?(i=[...i],n()):i=[{resolve:n,reject:s}];let o=this.normalizeOptions(r),a=ma.normalizeOrigin(e,r&&r.servername);if(a===void 0){for(let{reject:u}of i)u(new TypeError("The `origin` argument needs to be a string or an URL object"));return}if(o in this.sessions){let u=this.sessions[o],g=-1,f=-1,h;for(let p of u){let d=p.remoteSettings.maxConcurrentStreams;if(d=d||p[Yu]||p.destroyed)continue;h||(g=d),m>f&&(h=p,f=m)}}if(h){if(i.length!==1){for(let{reject:p}of i){let d=new Error(`Expected the length of listeners to be 1, got ${i.length}. +Please report this to https://github.com/szmarczak/http2-wrapper/`);p(d)}return}i[0].resolve(h);return}}if(o in this.queue){if(a in this.queue[o]){this.queue[o][a].listeners.push(...i),this._tryToCreateNewSession(o,a);return}}else this.queue[o]={};let l=()=>{o in this.queue&&this.queue[o][a]===c&&(delete this.queue[o][a],Object.keys(this.queue[o]).length===0&&delete this.queue[o])},c=()=>{let u=`${a}:${o}`,g=!1;try{let f=dve.connect(e,P({createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(u)},r));f[_i]=0,f[Yu]=!1;let h=()=>f[_i]{this.tlsSessionCache.set(u,m)}),f.once("error",m=>{for(let{reject:I}of i)I(m);this.tlsSessionCache.delete(u)}),f.setTimeout(this.timeout,()=>{f.destroy()}),f.once("close",()=>{if(g){p&&this._freeSessionsCount--,this._sessionsCount--;let m=this.sessions[o];m.splice(m.indexOf(f),1),m.length===0&&delete this.sessions[o]}else{let m=new Error("Session closed without receiving a SETTINGS frame");m.code="HTTP2WRAPPER_NOSETTINGS";for(let{reject:I}of i)I(m);l()}this._tryToCreateNewSession(o,a)});let d=()=>{if(!(!(o in this.queue)||!h())){for(let m of f[ns])if(m in this.queue[o]){let{listeners:I}=this.queue[o][m];for(;I.length!==0&&h();)I.shift().resolve(f);let B=this.queue[o];if(B[m].listeners.length===0&&(delete B[m],Object.keys(B).length===0)){delete this.queue[o];break}if(!h())break}}};f.on("origin",()=>{f[ns]=f.originSet,!!h()&&(d(),ck(this.sessions[o],f))}),f.once("remoteSettings",()=>{if(f.ref(),f.unref(),this._sessionsCount++,c.destroyed){let m=new Error("Agent has been destroyed");for(let I of i)I.reject(m);f.destroy();return}f[ns]=f.originSet;{let m=this.sessions;if(o in m){let I=m[o];I.splice(Eve(I,f,Ive),0,f)}else m[o]=[f]}this._freeSessionsCount+=1,g=!0,this.emit("session",f),d(),l(),f[_i]===0&&this._freeSessionsCount>this.maxFreeSessions&&f.close(),i.length!==0&&(this.getSession(a,r,i),i.length=0),f.on("remoteSettings",()=>{d(),ck(this.sessions[o],f)})}),f[lW]=f.request,f.request=(m,I)=>{if(f[Yu])throw new Error("The session is gracefully closing. No new streams are allowed.");let B=f[lW](m,I);return f.ref(),++f[_i],f[_i]===f.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,B.once("close",()=>{if(p=h(),--f[_i],!f.destroyed&&!f.closed&&(yve(this.sessions[o],f),h()&&!f.closed)){p||(this._freeSessionsCount++,p=!0);let b=f[_i]===0;b&&f.unref(),b&&(this._freeSessionsCount>this.maxFreeSessions||f[Yu])?f.close():(ck(this.sessions[o],f),d())}}),B}}catch(f){for(let h of i)h.reject(f);l()}};c.listeners=i,c.completed=!1,c.destroyed=!1,this.queue[o][a]=c,this._tryToCreateNewSession(o,a)})}request(e,r,i,n){return new Promise((s,o)=>{this.getSession(e,r,[{reject:o,resolve:a=>{try{s(a.request(i,n))}catch(l){o(l)}}}])})}createConnection(e,r){return ma.connect(e,r)}static connect(e,r){r.ALPNProtocols=["h2"];let i=e.port||443,n=e.hostname||e.host;return typeof r.servername=="undefined"&&(r.servername=n),pve.connect(i,n,r)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let r of e)r[_i]===0&&r.close()}destroy(e){for(let r of Object.values(this.sessions))for(let i of r)i.destroy(e);for(let r of Object.values(this.queue))for(let i of Object.values(r))i.destroyed=!0;this.queue={}}get freeSessions(){return uW({agent:this,isFree:!0})}get busySessions(){return uW({agent:this,isFree:!1})}};ma.kCurrentStreamsCount=_i;ma.kGracefullyClosing=Yu;AW.exports={Agent:ma,globalAgent:new ma}});var gk=E((Nnt,gW)=>{"use strict";var{Readable:wve}=require("stream"),fW=class extends wve{constructor(e,r){super({highWaterMark:r,autoDestroy:!1});this.statusCode=null,this.statusMessage="",this.httpVersion="2.0",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,r){return this.req.setTimeout(e,r),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners("data"),this.resume())}_read(){this.req&&this.req._request.resume()}};gW.exports=fW});var fk=E((Lnt,hW)=>{"use strict";hW.exports=t=>{let e={protocol:t.protocol,hostname:typeof t.hostname=="string"&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return typeof t.port=="string"&&t.port.length!==0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var dW=E((Tnt,pW)=>{"use strict";pW.exports=(t,e,r)=>{for(let i of r)t.on(i,(...n)=>e.emit(i,...n))}});var mW=E((Mnt,CW)=>{"use strict";CW.exports=t=>{switch(t){case":method":case":scheme":case":authority":case":path":return!0;default:return!1}}});var IW=E((Knt,EW)=>{"use strict";var qu=(t,e,r)=>{EW.exports[e]=class extends t{constructor(...n){super(typeof r=="string"?r:r(n));this.name=`${super.name} [${e}]`,this.code=e}}};qu(TypeError,"ERR_INVALID_ARG_TYPE",t=>{let e=t[0].includes(".")?"property":"argument",r=t[1],i=Array.isArray(r);return i&&(r=`${r.slice(0,-1).join(", ")} or ${r.slice(-1)}`),`The "${t[0]}" ${e} must be ${i?"one of":"of"} type ${r}. Received ${typeof t[2]}`});qu(TypeError,"ERR_INVALID_PROTOCOL",t=>`Protocol "${t[0]}" not supported. Expected "${t[1]}"`);qu(Error,"ERR_HTTP_HEADERS_SENT",t=>`Cannot ${t[0]} headers after they are sent to the client`);qu(TypeError,"ERR_INVALID_HTTP_TOKEN",t=>`${t[0]} must be a valid HTTP token [${t[1]}]`);qu(TypeError,"ERR_HTTP_INVALID_HEADER_VALUE",t=>`Invalid value "${t[0]} for header "${t[1]}"`);qu(TypeError,"ERR_INVALID_CHAR",t=>`Invalid character in ${t[0]} [${t[1]}]`)});var Ck=E((Unt,yW)=>{"use strict";var Bve=require("http2"),{Writable:Qve}=require("stream"),{Agent:wW,globalAgent:bve}=uk(),vve=gk(),Sve=fk(),xve=dW(),kve=mW(),{ERR_INVALID_ARG_TYPE:hk,ERR_INVALID_PROTOCOL:Pve,ERR_HTTP_HEADERS_SENT:BW,ERR_INVALID_HTTP_TOKEN:Dve,ERR_HTTP_INVALID_HEADER_VALUE:Rve,ERR_INVALID_CHAR:Fve}=IW(),{HTTP2_HEADER_STATUS:QW,HTTP2_HEADER_METHOD:bW,HTTP2_HEADER_PATH:vW,HTTP2_METHOD_CONNECT:Nve}=Bve.constants,Pi=Symbol("headers"),pk=Symbol("origin"),dk=Symbol("session"),SW=Symbol("options"),My=Symbol("flushedHeaders"),yp=Symbol("jobs"),Lve=/^[\^`\-\w!#$%&*+.|~]+$/,Tve=/[^\t\u0020-\u007E\u0080-\u00FF]/,xW=class extends Qve{constructor(e,r,i){super({autoDestroy:!1});let n=typeof e=="string"||e instanceof URL;if(n&&(e=Sve(e instanceof URL?e:new URL(e))),typeof r=="function"||r===void 0?(i=r,r=n?e:P({},e)):r=P(P({},e),r),r.h2session)this[dk]=r.h2session;else if(r.agent===!1)this.agent=new wW({maxFreeSessions:0});else if(typeof r.agent=="undefined"||r.agent===null)typeof r.createConnection=="function"?(this.agent=new wW({maxFreeSessions:0}),this.agent.createConnection=r.createConnection):this.agent=bve;else if(typeof r.agent.request=="function")this.agent=r.agent;else throw new hk("options.agent",["Agent-like Object","undefined","false"],r.agent);if(r.protocol&&r.protocol!=="https:")throw new Pve(r.protocol,"https:");let s=r.port||r.defaultPort||this.agent&&this.agent.defaultPort||443,o=r.hostname||r.host||"localhost";delete r.hostname,delete r.host,delete r.port;let{timeout:a}=r;if(r.timeout=void 0,this[Pi]=Object.create(null),this[yp]=[],this.socket=null,this.connection=null,this.method=r.method||"GET",this.path=r.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,r.headers)for(let[l,c]of Object.entries(r.headers))this.setHeader(l,c);r.auth&&!("authorization"in this[Pi])&&(this[Pi].authorization="Basic "+Buffer.from(r.auth).toString("base64")),r.session=r.tlsSession,r.path=r.socketPath,this[SW]=r,s===443?(this[pk]=`https://${o}`,":authority"in this[Pi]||(this[Pi][":authority"]=o)):(this[pk]=`https://${o}:${s}`,":authority"in this[Pi]||(this[Pi][":authority"]=`${o}:${s}`)),a&&this.setTimeout(a),i&&this.once("response",i),this[My]=!1}get method(){return this[Pi][bW]}set method(e){e&&(this[Pi][bW]=e.toUpperCase())}get path(){return this[Pi][vW]}set path(e){e&&(this[Pi][vW]=e)}get _mustNotHaveABody(){return this.method==="GET"||this.method==="HEAD"||this.method==="DELETE"}_write(e,r,i){if(this._mustNotHaveABody){i(new Error("The GET, HEAD and DELETE methods must NOT have a body"));return}this.flushHeaders();let n=()=>this._request.write(e,r,i);this._request?n():this[yp].push(n)}_final(e){if(this.destroyed)return;this.flushHeaders();let r=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?r():this[yp].push(r)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit("abort")),this.aborted=!0,this.destroy())}_destroy(e,r){this.res&&this.res._dump(),this._request&&this._request.destroy(),r(e)}async flushHeaders(){if(this[My]||this.destroyed)return;this[My]=!0;let e=this.method===Nve,r=i=>{if(this._request=i,this.destroyed){i.destroy();return}e||xve(i,this,["timeout","continue","close","error"]);let n=o=>(...a)=>{!this.writable&&!this.destroyed?o(...a):this.once("finish",()=>{o(...a)})};i.once("response",n((o,a,l)=>{let c=new vve(this.socket,i.readableHighWaterMark);this.res=c,c.req=this,c.statusCode=o[QW],c.headers=o,c.rawHeaders=l,c.once("end",()=>{this.aborted?(c.aborted=!0,c.emit("aborted")):(c.complete=!0,c.socket=null,c.connection=null)}),e?(c.upgrade=!0,this.emit("connect",c,i,Buffer.alloc(0))?this.emit("close"):i.destroy()):(i.on("data",u=>{!c._dumped&&!c.push(u)&&i.pause()}),i.once("end",()=>{c.push(null)}),this.emit("response",c)||c._dump())})),i.once("headers",n(o=>this.emit("information",{statusCode:o[QW]}))),i.once("trailers",n((o,a,l)=>{let{res:c}=this;c.trailers=o,c.rawTrailers=l}));let{socket:s}=i.session;this.socket=s,this.connection=s;for(let o of this[yp])o();this.emit("socket",this.socket)};if(this[dk])try{r(this[dk].request(this[Pi]))}catch(i){this.emit("error",i)}else{this.reusedSocket=!0;try{r(await this.agent.request(this[pk],this[SW],this[Pi]))}catch(i){this.emit("error",i)}}}getHeader(e){if(typeof e!="string")throw new hk("name","string",e);return this[Pi][e.toLowerCase()]}get headersSent(){return this[My]}removeHeader(e){if(typeof e!="string")throw new hk("name","string",e);if(this.headersSent)throw new BW("remove");delete this[Pi][e.toLowerCase()]}setHeader(e,r){if(this.headersSent)throw new BW("set");if(typeof e!="string"||!Lve.test(e)&&!kve(e))throw new Dve("Header name",e);if(typeof r=="undefined")throw new Rve(r,e);if(Tve.test(r))throw new Fve("header content",e);this[Pi][e.toLowerCase()]=r}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,r){let i=()=>this._request.setTimeout(e,r);return this._request?i():this[yp].push(i),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};yW.exports=xW});var PW=E((Hnt,kW)=>{"use strict";var Mve=require("tls");kW.exports=(t={})=>new Promise((e,r)=>{let i=Mve.connect(t,()=>{t.resolveSocket?(i.off("error",r),e({alpnProtocol:i.alpnProtocol,socket:i})):(i.destroy(),e({alpnProtocol:i.alpnProtocol}))});i.on("error",r)})});var RW=E((Gnt,DW)=>{"use strict";var Ove=require("net");DW.exports=t=>{let e=t.host,r=t.headers&&t.headers.host;return r&&(r.startsWith("[")?r.indexOf("]")===-1?e=r:e=r.slice(1,-1):e=r.split(":",1)[0]),Ove.isIP(e)?"":e}});var LW=E((jnt,mk)=>{"use strict";var FW=require("http"),Ek=require("https"),Kve=PW(),Uve=lk(),Hve=Ck(),Gve=RW(),jve=fk(),Oy=new Uve({maxSize:100}),wp=new Map,NW=(t,e,r)=>{e._httpMessage={shouldKeepAlive:!0};let i=()=>{t.emit("free",e,r)};e.on("free",i);let n=()=>{t.removeSocket(e,r)};e.on("close",n);let s=()=>{t.removeSocket(e,r),e.off("close",n),e.off("free",i),e.off("agentRemove",s)};e.on("agentRemove",s),t.emit("free",e,r)},Yve=async t=>{let e=`${t.host}:${t.port}:${t.ALPNProtocols.sort()}`;if(!Oy.has(e)){if(wp.has(e))return(await wp.get(e)).alpnProtocol;let{path:r,agent:i}=t;t.path=t.socketPath;let n=Kve(t);wp.set(e,n);try{let{socket:s,alpnProtocol:o}=await n;if(Oy.set(e,o),t.path=r,o==="h2")s.destroy();else{let{globalAgent:a}=Ek,l=Ek.Agent.prototype.createConnection;i?i.createConnection===l?NW(i,s,t):s.destroy():a.createConnection===l?NW(a,s,t):s.destroy()}return wp.delete(e),o}catch(s){throw wp.delete(e),s}}return Oy.get(e)};mk.exports=async(t,e,r)=>{if((typeof t=="string"||t instanceof URL)&&(t=jve(new URL(t))),typeof e=="function"&&(r=e,e=void 0),e=_(P(P({ALPNProtocols:["h2","http/1.1"]},t),e),{resolveSocket:!0}),!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error("The `ALPNProtocols` option must be an Array with at least one entry");e.protocol=e.protocol||"https:";let i=e.protocol==="https:";e.host=e.hostname||e.host||"localhost",e.session=e.tlsSession,e.servername=e.servername||Gve(e),e.port=e.port||(i?443:80),e._defaultAgent=i?Ek.globalAgent:FW.globalAgent;let n=e.agent;if(n){if(n.addRequest)throw new Error("The `options.agent` object can contain only `http`, `https` or `http2` properties");e.agent=n[i?"https":"http"]}return i&&await Yve(e)==="h2"?(n&&(e.agent=n.http2),new Hve(e,r)):FW.request(e,r)};mk.exports.protocolCache=Oy});var MW=E((Ynt,TW)=>{"use strict";var qve=require("http2"),Jve=uk(),Ik=Ck(),Wve=gk(),zve=LW(),Vve=(t,e,r)=>new Ik(t,e,r),_ve=(t,e,r)=>{let i=new Ik(t,e,r);return i.end(),i};TW.exports=_(P(_(P({},qve),{ClientRequest:Ik,IncomingMessage:Wve}),Jve),{request:Vve,get:_ve,auto:zve})});var wk=E(yk=>{"use strict";Object.defineProperty(yk,"__esModule",{value:!0});var OW=Ca();yk.default=t=>OW.default.nodeStream(t)&&OW.default.function_(t.getBoundary)});var GW=E(Bk=>{"use strict";Object.defineProperty(Bk,"__esModule",{value:!0});var KW=require("fs"),UW=require("util"),HW=Ca(),Xve=wk(),Zve=UW.promisify(KW.stat);Bk.default=async(t,e)=>{if(e&&"content-length"in e)return Number(e["content-length"]);if(!t)return 0;if(HW.default.string(t))return Buffer.byteLength(t);if(HW.default.buffer(t))return t.length;if(Xve.default(t))return UW.promisify(t.getLength.bind(t))();if(t instanceof KW.ReadStream){let{size:r}=await Zve(t.path);return r===0?void 0:r}}});var bk=E(Qk=>{"use strict";Object.defineProperty(Qk,"__esModule",{value:!0});function $ve(t,e,r){let i={};for(let n of r)i[n]=(...s)=>{e.emit(n,...s)},t.on(n,i[n]);return()=>{for(let n of r)t.off(n,i[n])}}Qk.default=$ve});var jW=E(vk=>{"use strict";Object.defineProperty(vk,"__esModule",{value:!0});vk.default=()=>{let t=[];return{once(e,r,i){e.once(r,i),t.push({origin:e,event:r,fn:i})},unhandleAll(){for(let e of t){let{origin:r,event:i,fn:n}=e;r.removeListener(i,n)}t.length=0}}}});var qW=E(Bp=>{"use strict";Object.defineProperty(Bp,"__esModule",{value:!0});Bp.TimeoutError=void 0;var eSe=require("net"),tSe=jW(),YW=Symbol("reentry"),rSe=()=>{},Sk=class extends Error{constructor(e,r){super(`Timeout awaiting '${r}' for ${e}ms`);this.event=r,this.name="TimeoutError",this.code="ETIMEDOUT"}};Bp.TimeoutError=Sk;Bp.default=(t,e,r)=>{if(YW in t)return rSe;t[YW]=!0;let i=[],{once:n,unhandleAll:s}=tSe.default(),o=(g,f,h)=>{var p;let d=setTimeout(f,g,g,h);(p=d.unref)===null||p===void 0||p.call(d);let m=()=>{clearTimeout(d)};return i.push(m),m},{host:a,hostname:l}=r,c=(g,f)=>{t.destroy(new Sk(g,f))},u=()=>{for(let g of i)g();s()};if(t.once("error",g=>{if(u(),t.listenerCount("error")===0)throw g}),t.once("close",u),n(t,"response",g=>{n(g,"end",u)}),typeof e.request!="undefined"&&o(e.request,c,"request"),typeof e.socket!="undefined"){let g=()=>{c(e.socket,"socket")};t.setTimeout(e.socket,g),i.push(()=>{t.removeListener("timeout",g)})}return n(t,"socket",g=>{var f;let{socketPath:h}=t;if(g.connecting){let p=Boolean(h!=null?h:eSe.isIP((f=l!=null?l:a)!==null&&f!==void 0?f:"")!==0);if(typeof e.lookup!="undefined"&&!p&&typeof g.address().address=="undefined"){let d=o(e.lookup,c,"lookup");n(g,"lookup",d)}if(typeof e.connect!="undefined"){let d=()=>o(e.connect,c,"connect");p?n(g,"connect",d()):n(g,"lookup",m=>{m===null&&n(g,"connect",d())})}typeof e.secureConnect!="undefined"&&r.protocol==="https:"&&n(g,"connect",()=>{let d=o(e.secureConnect,c,"secureConnect");n(g,"secureConnect",d)})}if(typeof e.send!="undefined"){let p=()=>o(e.send,c,"send");g.connecting?n(g,"connect",()=>{n(t,"upload-complete",p())}):n(t,"upload-complete",p())}}),typeof e.response!="undefined"&&n(t,"upload-complete",()=>{let g=o(e.response,c,"response");n(t,"response",g)}),u}});var WW=E(xk=>{"use strict";Object.defineProperty(xk,"__esModule",{value:!0});var JW=Ca();xk.default=t=>{t=t;let e={protocol:t.protocol,hostname:JW.default.string(t.hostname)&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return JW.default.string(t.port)&&t.port.length>0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var zW=E(kk=>{"use strict";Object.defineProperty(kk,"__esModule",{value:!0});var iSe=require("url"),nSe=["protocol","host","hostname","port","pathname","search"];kk.default=(t,e)=>{var r,i;if(e.path){if(e.pathname)throw new TypeError("Parameters `path` and `pathname` are mutually exclusive.");if(e.search)throw new TypeError("Parameters `path` and `search` are mutually exclusive.");if(e.searchParams)throw new TypeError("Parameters `path` and `searchParams` are mutually exclusive.")}if(e.search&&e.searchParams)throw new TypeError("Parameters `search` and `searchParams` are mutually exclusive.");if(!t){if(!e.protocol)throw new TypeError("No URL protocol specified");t=`${e.protocol}//${(i=(r=e.hostname)!==null&&r!==void 0?r:e.host)!==null&&i!==void 0?i:""}`}let n=new iSe.URL(t);if(e.path){let s=e.path.indexOf("?");s===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,s),e.search=e.path.slice(s+1)),delete e.path}for(let s of nSe)e[s]&&(n[s]=e[s].toString());return n}});var _W=E(Pk=>{"use strict";Object.defineProperty(Pk,"__esModule",{value:!0});var VW=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,r){typeof e=="object"?this.weakMap.set(e,r):this.map.set(e,r)}get(e){return typeof e=="object"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e=="object"?this.weakMap.has(e):this.map.has(e)}};Pk.default=VW});var Rk=E(Dk=>{"use strict";Object.defineProperty(Dk,"__esModule",{value:!0});var sSe=async t=>{let e=[],r=0;for await(let i of t)e.push(i),r+=Buffer.byteLength(i);return Buffer.isBuffer(e[0])?Buffer.concat(e,r):Buffer.from(e.join(""))};Dk.default=sSe});var ZW=E(ql=>{"use strict";Object.defineProperty(ql,"__esModule",{value:!0});ql.dnsLookupIpVersionToFamily=ql.isDnsLookupIpVersion=void 0;var XW={auto:0,ipv4:4,ipv6:6};ql.isDnsLookupIpVersion=t=>t in XW;ql.dnsLookupIpVersionToFamily=t=>{if(ql.isDnsLookupIpVersion(t))return XW[t];throw new Error("Invalid DNS lookup IP version")}});var Fk=E(Ky=>{"use strict";Object.defineProperty(Ky,"__esModule",{value:!0});Ky.isResponseOk=void 0;Ky.isResponseOk=t=>{let{statusCode:e}=t,r=t.request.options.followRedirect?299:399;return e>=200&&e<=r||e===304}});var e8=E(Nk=>{"use strict";Object.defineProperty(Nk,"__esModule",{value:!0});var $W=new Set;Nk.default=t=>{$W.has(t)||($W.add(t),process.emitWarning(`Got: ${t}`,{type:"DeprecationWarning"}))}});var t8=E(Lk=>{"use strict";Object.defineProperty(Lk,"__esModule",{value:!0});var ar=Ca(),oSe=(t,e)=>{if(ar.default.null_(t.encoding))throw new TypeError("To get a Buffer, set `options.responseType` to `buffer` instead");ar.assert.any([ar.default.string,ar.default.undefined],t.encoding),ar.assert.any([ar.default.boolean,ar.default.undefined],t.resolveBodyOnly),ar.assert.any([ar.default.boolean,ar.default.undefined],t.methodRewriting),ar.assert.any([ar.default.boolean,ar.default.undefined],t.isStream),ar.assert.any([ar.default.string,ar.default.undefined],t.responseType),t.responseType===void 0&&(t.responseType="text");let{retry:r}=t;if(e?t.retry=P({},e.retry):t.retry={calculateDelay:i=>i.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},ar.default.object(r)?(t.retry=P(P({},t.retry),r),t.retry.methods=[...new Set(t.retry.methods.map(i=>i.toUpperCase()))],t.retry.statusCodes=[...new Set(t.retry.statusCodes)],t.retry.errorCodes=[...new Set(t.retry.errorCodes)]):ar.default.number(r)&&(t.retry.limit=r),ar.default.undefined(t.retry.maxRetryAfter)&&(t.retry.maxRetryAfter=Math.min(...[t.timeout.request,t.timeout.connect].filter(ar.default.number))),ar.default.object(t.pagination)){e&&(t.pagination=P(P({},e.pagination),t.pagination));let{pagination:i}=t;if(!ar.default.function_(i.transform))throw new Error("`options.pagination.transform` must be implemented");if(!ar.default.function_(i.shouldContinue))throw new Error("`options.pagination.shouldContinue` must be implemented");if(!ar.default.function_(i.filter))throw new TypeError("`options.pagination.filter` must be implemented");if(!ar.default.function_(i.paginate))throw new Error("`options.pagination.paginate` must be implemented")}return t.responseType==="json"&&t.headers.accept===void 0&&(t.headers.accept="application/json"),t};Lk.default=oSe});var r8=E(Qp=>{"use strict";Object.defineProperty(Qp,"__esModule",{value:!0});Qp.retryAfterStatusCodes=void 0;Qp.retryAfterStatusCodes=new Set([413,429,503]);var aSe=({attemptCount:t,retryOptions:e,error:r,retryAfter:i})=>{if(t>e.limit)return 0;let n=e.methods.includes(r.options.method),s=e.errorCodes.includes(r.code),o=r.response&&e.statusCodes.includes(r.response.statusCode);if(!n||!s&&!o)return 0;if(r.response){if(i)return e.maxRetryAfter===void 0||i>e.maxRetryAfter?0:i;if(r.response.statusCode===413)return 0}let a=Math.random()*100;return 2**(t-1)*1e3+a};Qp.default=aSe});var vp=E(Rt=>{"use strict";Object.defineProperty(Rt,"__esModule",{value:!0});Rt.UnsupportedProtocolError=Rt.ReadError=Rt.TimeoutError=Rt.UploadError=Rt.CacheError=Rt.HTTPError=Rt.MaxRedirectsError=Rt.RequestError=Rt.setNonEnumerableProperties=Rt.knownHookEvents=Rt.withoutBody=Rt.kIsNormalizedAlready=void 0;var i8=require("util"),n8=require("stream"),ASe=require("fs"),dA=require("url"),s8=require("http"),Tk=require("http"),lSe=require("https"),cSe=h3(),uSe=y3(),o8=tW(),gSe=sW(),fSe=MW(),hSe=Ly(),ce=Ca(),pSe=GW(),a8=wk(),dSe=bk(),A8=qW(),CSe=WW(),l8=zW(),mSe=_W(),ESe=Rk(),c8=ZW(),ISe=Fk(),CA=e8(),ySe=t8(),wSe=r8(),Mk,Ei=Symbol("request"),Uy=Symbol("response"),Ju=Symbol("responseSize"),Wu=Symbol("downloadedSize"),zu=Symbol("bodySize"),Vu=Symbol("uploadedSize"),Hy=Symbol("serverResponsesPiped"),u8=Symbol("unproxyEvents"),g8=Symbol("isFromCache"),Ok=Symbol("cancelTimeouts"),f8=Symbol("startedReading"),_u=Symbol("stopReading"),Gy=Symbol("triggerRead"),mA=Symbol("body"),bp=Symbol("jobs"),h8=Symbol("originalResponse"),p8=Symbol("retryTimeout");Rt.kIsNormalizedAlready=Symbol("isNormalizedAlready");var BSe=ce.default.string(process.versions.brotli);Rt.withoutBody=new Set(["GET","HEAD"]);Rt.knownHookEvents=["init","beforeRequest","beforeRedirect","beforeError","beforeRetry","afterResponse"];function QSe(t){for(let e in t){let r=t[e];if(!ce.default.string(r)&&!ce.default.number(r)&&!ce.default.boolean(r)&&!ce.default.null_(r)&&!ce.default.undefined(r))throw new TypeError(`The \`searchParams\` value '${String(r)}' must be a string, number, boolean or null`)}}function bSe(t){return ce.default.object(t)&&!("statusCode"in t)}var Kk=new mSe.default,vSe=async t=>new Promise((e,r)=>{let i=n=>{r(n)};t.pending||e(),t.once("error",i),t.once("ready",()=>{t.off("error",i),e()})}),SSe=new Set([300,301,302,303,304,307,308]),xSe=["context","body","json","form"];Rt.setNonEnumerableProperties=(t,e)=>{let r={};for(let i of t)if(!!i)for(let n of xSe)n in i&&(r[n]={writable:!0,configurable:!0,enumerable:!1,value:i[n]});Object.defineProperties(e,r)};var _r=class extends Error{constructor(e,r,i){var n;super(e);if(Error.captureStackTrace(this,this.constructor),this.name="RequestError",this.code=r.code,i instanceof Uk?(Object.defineProperty(this,"request",{enumerable:!1,value:i}),Object.defineProperty(this,"response",{enumerable:!1,value:i[Uy]}),Object.defineProperty(this,"options",{enumerable:!1,value:i.options})):Object.defineProperty(this,"options",{enumerable:!1,value:i}),this.timings=(n=this.request)===null||n===void 0?void 0:n.timings,ce.default.string(r.stack)&&ce.default.string(this.stack)){let s=this.stack.indexOf(this.message)+this.message.length,o=this.stack.slice(s).split(` +`).reverse(),a=r.stack.slice(r.stack.indexOf(r.message)+r.message.length).split(` +`).reverse();for(;a.length!==0&&a[0]===o[0];)o.shift();this.stack=`${this.stack.slice(0,s)}${o.reverse().join(` +`)}${a.reverse().join(` +`)}`}}};Rt.RequestError=_r;var Hk=class extends _r{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e);this.name="MaxRedirectsError"}};Rt.MaxRedirectsError=Hk;var Gk=class extends _r{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request);this.name="HTTPError"}};Rt.HTTPError=Gk;var jk=class extends _r{constructor(e,r){super(e.message,e,r);this.name="CacheError"}};Rt.CacheError=jk;var Yk=class extends _r{constructor(e,r){super(e.message,e,r);this.name="UploadError"}};Rt.UploadError=Yk;var qk=class extends _r{constructor(e,r,i){super(e.message,e,i);this.name="TimeoutError",this.event=e.event,this.timings=r}};Rt.TimeoutError=qk;var jy=class extends _r{constructor(e,r){super(e.message,e,r);this.name="ReadError"}};Rt.ReadError=jy;var Jk=class extends _r{constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e);this.name="UnsupportedProtocolError"}};Rt.UnsupportedProtocolError=Jk;var kSe=["socket","connect","continue","information","upgrade","timeout"],Uk=class extends n8.Duplex{constructor(e,r={},i){super({autoDestroy:!1,highWaterMark:0});this[Wu]=0,this[Vu]=0,this.requestInitialized=!1,this[Hy]=new Set,this.redirects=[],this[_u]=!1,this[Gy]=!1,this[bp]=[],this.retryCount=0,this._progressCallbacks=[];let n=()=>this._unlockWrite(),s=()=>this._lockWrite();this.on("pipe",c=>{c.prependListener("data",n),c.on("data",s),c.prependListener("end",n),c.on("end",s)}),this.on("unpipe",c=>{c.off("data",n),c.off("data",s),c.off("end",n),c.off("end",s)}),this.on("pipe",c=>{c instanceof Tk.IncomingMessage&&(this.options.headers=P(P({},c.headers),this.options.headers))});let{json:o,body:a,form:l}=r;if((o||a||l)&&this._lockWrite(),Rt.kIsNormalizedAlready in r)this.options=r;else try{this.options=this.constructor.normalizeArguments(e,r,i)}catch(c){ce.default.nodeStream(r.body)&&r.body.destroy(),this.destroy(c);return}(async()=>{var c;try{this.options.body instanceof ASe.ReadStream&&await vSe(this.options.body);let{url:u}=this.options;if(!u)throw new TypeError("Missing `url` property");if(this.requestUrl=u.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(c=this[Ei])===null||c===void 0||c.destroy();return}for(let g of this[bp])g();this[bp].length=0,this.requestInitialized=!0}catch(u){if(u instanceof _r){this._beforeError(u);return}this.destroyed||this.destroy(u)}})()}static normalizeArguments(e,r,i){var n,s,o,a,l;let c=r;if(ce.default.object(e)&&!ce.default.urlInstance(e))r=P(P(P({},i),e),r);else{if(e&&r&&r.url!==void 0)throw new TypeError("The `url` option is mutually exclusive with the `input` argument");r=P(P({},i),r),e!==void 0&&(r.url=e),ce.default.urlInstance(r.url)&&(r.url=new dA.URL(r.url.toString()))}if(r.cache===!1&&(r.cache=void 0),r.dnsCache===!1&&(r.dnsCache=void 0),ce.assert.any([ce.default.string,ce.default.undefined],r.method),ce.assert.any([ce.default.object,ce.default.undefined],r.headers),ce.assert.any([ce.default.string,ce.default.urlInstance,ce.default.undefined],r.prefixUrl),ce.assert.any([ce.default.object,ce.default.undefined],r.cookieJar),ce.assert.any([ce.default.object,ce.default.string,ce.default.undefined],r.searchParams),ce.assert.any([ce.default.object,ce.default.string,ce.default.undefined],r.cache),ce.assert.any([ce.default.object,ce.default.number,ce.default.undefined],r.timeout),ce.assert.any([ce.default.object,ce.default.undefined],r.context),ce.assert.any([ce.default.object,ce.default.undefined],r.hooks),ce.assert.any([ce.default.boolean,ce.default.undefined],r.decompress),ce.assert.any([ce.default.boolean,ce.default.undefined],r.ignoreInvalidCookies),ce.assert.any([ce.default.boolean,ce.default.undefined],r.followRedirect),ce.assert.any([ce.default.number,ce.default.undefined],r.maxRedirects),ce.assert.any([ce.default.boolean,ce.default.undefined],r.throwHttpErrors),ce.assert.any([ce.default.boolean,ce.default.undefined],r.http2),ce.assert.any([ce.default.boolean,ce.default.undefined],r.allowGetBody),ce.assert.any([ce.default.string,ce.default.undefined],r.localAddress),ce.assert.any([c8.isDnsLookupIpVersion,ce.default.undefined],r.dnsLookupIpVersion),ce.assert.any([ce.default.object,ce.default.undefined],r.https),ce.assert.any([ce.default.boolean,ce.default.undefined],r.rejectUnauthorized),r.https&&(ce.assert.any([ce.default.boolean,ce.default.undefined],r.https.rejectUnauthorized),ce.assert.any([ce.default.function_,ce.default.undefined],r.https.checkServerIdentity),ce.assert.any([ce.default.string,ce.default.object,ce.default.array,ce.default.undefined],r.https.certificateAuthority),ce.assert.any([ce.default.string,ce.default.object,ce.default.array,ce.default.undefined],r.https.key),ce.assert.any([ce.default.string,ce.default.object,ce.default.array,ce.default.undefined],r.https.certificate),ce.assert.any([ce.default.string,ce.default.undefined],r.https.passphrase),ce.assert.any([ce.default.string,ce.default.buffer,ce.default.array,ce.default.undefined],r.https.pfx)),ce.assert.any([ce.default.object,ce.default.undefined],r.cacheOptions),ce.default.string(r.method)?r.method=r.method.toUpperCase():r.method="GET",r.headers===(i==null?void 0:i.headers)?r.headers=P({},r.headers):r.headers=hSe(P(P({},i==null?void 0:i.headers),r.headers)),"slashes"in r)throw new TypeError("The legacy `url.Url` has been deprecated. Use `URL` instead.");if("auth"in r)throw new TypeError("Parameter `auth` is deprecated. Use `username` / `password` instead.");if("searchParams"in r&&r.searchParams&&r.searchParams!==(i==null?void 0:i.searchParams)){let h;if(ce.default.string(r.searchParams)||r.searchParams instanceof dA.URLSearchParams)h=new dA.URLSearchParams(r.searchParams);else{QSe(r.searchParams),h=new dA.URLSearchParams;for(let p in r.searchParams){let d=r.searchParams[p];d===null?h.append(p,""):d!==void 0&&h.append(p,d)}}(n=i==null?void 0:i.searchParams)===null||n===void 0||n.forEach((p,d)=>{h.has(d)||h.append(d,p)}),r.searchParams=h}if(r.username=(s=r.username)!==null&&s!==void 0?s:"",r.password=(o=r.password)!==null&&o!==void 0?o:"",ce.default.undefined(r.prefixUrl)?r.prefixUrl=(a=i==null?void 0:i.prefixUrl)!==null&&a!==void 0?a:"":(r.prefixUrl=r.prefixUrl.toString(),r.prefixUrl!==""&&!r.prefixUrl.endsWith("/")&&(r.prefixUrl+="/")),ce.default.string(r.url)){if(r.url.startsWith("/"))throw new Error("`input` must not start with a slash when using `prefixUrl`");r.url=l8.default(r.prefixUrl+r.url,r)}else(ce.default.undefined(r.url)&&r.prefixUrl!==""||r.protocol)&&(r.url=l8.default(r.prefixUrl,r));if(r.url){"port"in r&&delete r.port;let{prefixUrl:h}=r;Object.defineProperty(r,"prefixUrl",{set:d=>{let m=r.url;if(!m.href.startsWith(d))throw new Error(`Cannot change \`prefixUrl\` from ${h} to ${d}: ${m.href}`);r.url=new dA.URL(d+m.href.slice(h.length)),h=d},get:()=>h});let{protocol:p}=r.url;if(p==="unix:"&&(p="http:",r.url=new dA.URL(`http://unix${r.url.pathname}${r.url.search}`)),r.searchParams&&(r.url.search=r.searchParams.toString()),p!=="http:"&&p!=="https:")throw new Jk(r);r.username===""?r.username=r.url.username:r.url.username=r.username,r.password===""?r.password=r.url.password:r.url.password=r.password}let{cookieJar:u}=r;if(u){let{setCookie:h,getCookieString:p}=u;ce.assert.function_(h),ce.assert.function_(p),h.length===4&&p.length===0&&(h=i8.promisify(h.bind(r.cookieJar)),p=i8.promisify(p.bind(r.cookieJar)),r.cookieJar={setCookie:h,getCookieString:p})}let{cache:g}=r;if(g&&(Kk.has(g)||Kk.set(g,new o8((h,p)=>{let d=h[Ei](h,p);return ce.default.promise(d)&&(d.once=(m,I)=>{if(m==="error")d.catch(I);else if(m==="abort")(async()=>{try{(await d).once("abort",I)}catch(B){}})();else throw new Error(`Unknown HTTP2 promise event: ${m}`);return d}),d},g))),r.cacheOptions=P({},r.cacheOptions),r.dnsCache===!0)Mk||(Mk=new uSe.default),r.dnsCache=Mk;else if(!ce.default.undefined(r.dnsCache)&&!r.dnsCache.lookup)throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${ce.default(r.dnsCache)}`);ce.default.number(r.timeout)?r.timeout={request:r.timeout}:i&&r.timeout!==i.timeout?r.timeout=P(P({},i.timeout),r.timeout):r.timeout=P({},r.timeout),r.context||(r.context={});let f=r.hooks===(i==null?void 0:i.hooks);r.hooks=P({},r.hooks);for(let h of Rt.knownHookEvents)if(h in r.hooks)if(ce.default.array(r.hooks[h]))r.hooks[h]=[...r.hooks[h]];else throw new TypeError(`Parameter \`${h}\` must be an Array, got ${ce.default(r.hooks[h])}`);else r.hooks[h]=[];if(i&&!f)for(let h of Rt.knownHookEvents)i.hooks[h].length>0&&(r.hooks[h]=[...i.hooks[h],...r.hooks[h]]);if("family"in r&&CA.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"'),(i==null?void 0:i.https)&&(r.https=P(P({},i.https),r.https)),"rejectUnauthorized"in r&&CA.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"'),"checkServerIdentity"in r&&CA.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"'),"ca"in r&&CA.default('"options.ca" was never documented, please use "options.https.certificateAuthority"'),"key"in r&&CA.default('"options.key" was never documented, please use "options.https.key"'),"cert"in r&&CA.default('"options.cert" was never documented, please use "options.https.certificate"'),"passphrase"in r&&CA.default('"options.passphrase" was never documented, please use "options.https.passphrase"'),"pfx"in r&&CA.default('"options.pfx" was never documented, please use "options.https.pfx"'),"followRedirects"in r)throw new TypeError("The `followRedirects` option does not exist. Use `followRedirect` instead.");if(r.agent){for(let h in r.agent)if(h!=="http"&&h!=="https"&&h!=="http2")throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${h}\``)}return r.maxRedirects=(l=r.maxRedirects)!==null&&l!==void 0?l:0,Rt.setNonEnumerableProperties([i,c],r),ySe.default(r,i)}_lockWrite(){let e=()=>{throw new TypeError("The payload has been already provided")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:r}=e,i=!ce.default.undefined(e.form),n=!ce.default.undefined(e.json),s=!ce.default.undefined(e.body),o=i||n||s,a=Rt.withoutBody.has(e.method)&&!(e.method==="GET"&&e.allowGetBody);if(this._cannotHaveBody=a,o){if(a)throw new TypeError(`The \`${e.method}\` method cannot be used with a body`);if([s,i,n].filter(l=>l).length>1)throw new TypeError("The `body`, `json` and `form` options are mutually exclusive");if(s&&!(e.body instanceof n8.Readable)&&!ce.default.string(e.body)&&!ce.default.buffer(e.body)&&!a8.default(e.body))throw new TypeError("The `body` option must be a stream.Readable, string or Buffer");if(i&&!ce.default.object(e.form))throw new TypeError("The `form` option must be an Object");{let l=!ce.default.string(r["content-type"]);s?(a8.default(e.body)&&l&&(r["content-type"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[mA]=e.body):i?(l&&(r["content-type"]="application/x-www-form-urlencoded"),this[mA]=new dA.URLSearchParams(e.form).toString()):(l&&(r["content-type"]="application/json"),this[mA]=e.stringifyJson(e.json));let c=await pSe.default(this[mA],e.headers);ce.default.undefined(r["content-length"])&&ce.default.undefined(r["transfer-encoding"])&&!a&&!ce.default.undefined(c)&&(r["content-length"]=String(c))}}else a?this._lockWrite():this._unlockWrite();this[zu]=Number(r["content-length"])||void 0}async _onResponseBase(e){let{options:r}=this,{url:i}=r;this[h8]=e,r.decompress&&(e=gSe(e));let n=e.statusCode,s=e;s.statusMessage=s.statusMessage?s.statusMessage:s8.STATUS_CODES[n],s.url=r.url.toString(),s.requestUrl=this.requestUrl,s.redirectUrls=this.redirects,s.request=this,s.isFromCache=e.fromCache||!1,s.ip=this.ip,s.retryCount=this.retryCount,this[g8]=s.isFromCache,this[Ju]=Number(e.headers["content-length"])||void 0,this[Uy]=e,e.once("end",()=>{this[Ju]=this[Wu],this.emit("downloadProgress",this.downloadProgress)}),e.once("error",a=>{e.destroy(),this._beforeError(new jy(a,this))}),e.once("aborted",()=>{this._beforeError(new jy({name:"Error",message:"The server aborted pending request",code:"ECONNRESET"},this))}),this.emit("downloadProgress",this.downloadProgress);let o=e.headers["set-cookie"];if(ce.default.object(r.cookieJar)&&o){let a=o.map(async l=>r.cookieJar.setCookie(l,i.toString()));r.ignoreInvalidCookies&&(a=a.map(async l=>l.catch(()=>{})));try{await Promise.all(a)}catch(l){this._beforeError(l);return}}if(r.followRedirect&&e.headers.location&&SSe.has(n)){if(e.resume(),this[Ei]&&(this[Ok](),delete this[Ei],this[u8]()),(n===303&&r.method!=="GET"&&r.method!=="HEAD"||!r.methodRewriting)&&(r.method="GET","body"in r&&delete r.body,"json"in r&&delete r.json,"form"in r&&delete r.form,this[mA]=void 0,delete r.headers["content-length"]),this.redirects.length>=r.maxRedirects){this._beforeError(new Hk(this));return}try{let l=Buffer.from(e.headers.location,"binary").toString(),c=new dA.URL(l,i),u=c.toString();decodeURI(u),c.hostname!==i.hostname||c.port!==i.port?("host"in r.headers&&delete r.headers.host,"cookie"in r.headers&&delete r.headers.cookie,"authorization"in r.headers&&delete r.headers.authorization,(r.username||r.password)&&(r.username="",r.password="")):(c.username=r.username,c.password=r.password),this.redirects.push(u),r.url=c;for(let g of r.hooks.beforeRedirect)await g(r,s);this.emit("redirect",s,r),await this._makeRequest()}catch(l){this._beforeError(l);return}return}if(r.isStream&&r.throwHttpErrors&&!ISe.isResponseOk(s)){this._beforeError(new Gk(s));return}e.on("readable",()=>{this[Gy]&&this._read()}),this.on("resume",()=>{e.resume()}),this.on("pause",()=>{e.pause()}),e.once("end",()=>{this.push(null)}),this.emit("response",e);for(let a of this[Hy])if(!a.headersSent){for(let l in e.headers){let c=r.decompress?l!=="content-encoding":!0,u=e.headers[l];c&&a.setHeader(l,u)}a.statusCode=n}}async _onResponse(e){try{await this._onResponseBase(e)}catch(r){this._beforeError(r)}}_onRequest(e){let{options:r}=this,{timeout:i,url:n}=r;cSe.default(e),this[Ok]=A8.default(e,i,n);let s=r.cache?"cacheableResponse":"response";e.once(s,l=>{this._onResponse(l)}),e.once("error",l=>{var c;e.destroy(),(c=e.res)===null||c===void 0||c.removeAllListeners("end"),l=l instanceof A8.TimeoutError?new qk(l,this.timings,this):new _r(l.message,l,this),this._beforeError(l)}),this[u8]=dSe.default(e,this,kSe),this[Ei]=e,this.emit("uploadProgress",this.uploadProgress);let o=this[mA],a=this.redirects.length===0?this:e;ce.default.nodeStream(o)?(o.pipe(a),o.once("error",l=>{this._beforeError(new Yk(l,this))})):(this._unlockWrite(),ce.default.undefined(o)?(this._cannotHaveBody||this._noPipe)&&(a.end(),this._lockWrite()):(this._writeRequest(o,void 0,()=>{}),a.end(),this._lockWrite())),this.emit("request",e)}async _createCacheableRequest(e,r){return new Promise((i,n)=>{Object.assign(r,CSe.default(e)),delete r.url;let s,o=Kk.get(r.cache)(r,async a=>{a._readableState.autoDestroy=!1,s&&(await s).emit("cacheableResponse",a),i(a)});r.url=e,o.once("error",n),o.once("request",async a=>{s=a,i(s)})})}async _makeRequest(){var e,r,i,n,s;let{options:o}=this,{headers:a}=o;for(let I in a)if(ce.default.undefined(a[I]))delete a[I];else if(ce.default.null_(a[I]))throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${I}\` header`);if(o.decompress&&ce.default.undefined(a["accept-encoding"])&&(a["accept-encoding"]=BSe?"gzip, deflate, br":"gzip, deflate"),o.cookieJar){let I=await o.cookieJar.getCookieString(o.url.toString());ce.default.nonEmptyString(I)&&(o.headers.cookie=I)}for(let I of o.hooks.beforeRequest){let B=await I(o);if(!ce.default.undefined(B)){o.request=()=>B;break}}o.body&&this[mA]!==o.body&&(this[mA]=o.body);let{agent:l,request:c,timeout:u,url:g}=o;if(o.dnsCache&&!("lookup"in o)&&(o.lookup=o.dnsCache.lookup),g.hostname==="unix"){let I=/(?.+?):(?.+)/.exec(`${g.pathname}${g.search}`);if(I==null?void 0:I.groups){let{socketPath:B,path:b}=I.groups;Object.assign(o,{socketPath:B,path:b,host:""})}}let f=g.protocol==="https:",h;o.http2?h=fSe.auto:h=f?lSe.request:s8.request;let p=(e=o.request)!==null&&e!==void 0?e:h,d=o.cache?this._createCacheableRequest:p;l&&!o.http2&&(o.agent=l[f?"https":"http"]),o[Ei]=p,delete o.request,delete o.timeout;let m=o;if(m.shared=(r=o.cacheOptions)===null||r===void 0?void 0:r.shared,m.cacheHeuristic=(i=o.cacheOptions)===null||i===void 0?void 0:i.cacheHeuristic,m.immutableMinTimeToLive=(n=o.cacheOptions)===null||n===void 0?void 0:n.immutableMinTimeToLive,m.ignoreCargoCult=(s=o.cacheOptions)===null||s===void 0?void 0:s.ignoreCargoCult,o.dnsLookupIpVersion!==void 0)try{m.family=c8.dnsLookupIpVersionToFamily(o.dnsLookupIpVersion)}catch(I){throw new Error("Invalid `dnsLookupIpVersion` option value")}o.https&&("rejectUnauthorized"in o.https&&(m.rejectUnauthorized=o.https.rejectUnauthorized),o.https.checkServerIdentity&&(m.checkServerIdentity=o.https.checkServerIdentity),o.https.certificateAuthority&&(m.ca=o.https.certificateAuthority),o.https.certificate&&(m.cert=o.https.certificate),o.https.key&&(m.key=o.https.key),o.https.passphrase&&(m.passphrase=o.https.passphrase),o.https.pfx&&(m.pfx=o.https.pfx));try{let I=await d(g,m);ce.default.undefined(I)&&(I=h(g,m)),o.request=c,o.timeout=u,o.agent=l,o.https&&("rejectUnauthorized"in o.https&&delete m.rejectUnauthorized,o.https.checkServerIdentity&&delete m.checkServerIdentity,o.https.certificateAuthority&&delete m.ca,o.https.certificate&&delete m.cert,o.https.key&&delete m.key,o.https.passphrase&&delete m.passphrase,o.https.pfx&&delete m.pfx),bSe(I)?this._onRequest(I):this.writable?(this.once("finish",()=>{this._onResponse(I)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(I)}catch(I){throw I instanceof o8.CacheError?new jk(I,this):new _r(I.message,I,this)}}async _error(e){try{for(let r of this.options.hooks.beforeError)e=await r(e)}catch(r){e=new _r(r.message,r,this)}this.destroy(e)}_beforeError(e){if(this[_u])return;let{options:r}=this,i=this.retryCount+1;this[_u]=!0,e instanceof _r||(e=new _r(e.message,e,this));let n=e,{response:s}=n;(async()=>{if(s&&!s.body){s.setEncoding(this._readableState.encoding);try{s.rawBody=await ESe.default(s),s.body=s.rawBody.toString()}catch(o){}}if(this.listenerCount("retry")!==0){let o;try{let a;s&&"retry-after"in s.headers&&(a=Number(s.headers["retry-after"]),Number.isNaN(a)?(a=Date.parse(s.headers["retry-after"])-Date.now(),a<=0&&(a=1)):a*=1e3),o=await r.retry.calculateDelay({attemptCount:i,retryOptions:r.retry,error:n,retryAfter:a,computedValue:wSe.default({attemptCount:i,retryOptions:r.retry,error:n,retryAfter:a,computedValue:0})})}catch(a){this._error(new _r(a.message,a,this));return}if(o){let a=async()=>{try{for(let l of this.options.hooks.beforeRetry)await l(this.options,n,i)}catch(l){this._error(new _r(l.message,e,this));return}this.destroyed||(this.destroy(),this.emit("retry",i,e))};this[p8]=setTimeout(a,o);return}}this._error(n)})()}_read(){this[Gy]=!0;let e=this[Uy];if(e&&!this[_u]){e.readableLength&&(this[Gy]=!1);let r;for(;(r=e.read())!==null;){this[Wu]+=r.length,this[f8]=!0;let i=this.downloadProgress;i.percent<1&&this.emit("downloadProgress",i),this.push(r)}}}_write(e,r,i){let n=()=>{this._writeRequest(e,r,i)};this.requestInitialized?n():this[bp].push(n)}_writeRequest(e,r,i){this[Ei].destroyed||(this._progressCallbacks.push(()=>{this[Vu]+=Buffer.byteLength(e,r);let n=this.uploadProgress;n.percent<1&&this.emit("uploadProgress",n)}),this[Ei].write(e,r,n=>{!n&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),i(n)}))}_final(e){let r=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Ei in this)){e();return}if(this[Ei].destroyed){e();return}this[Ei].end(i=>{i||(this[zu]=this[Vu],this.emit("uploadProgress",this.uploadProgress),this[Ei].emit("upload-complete")),e(i)})};this.requestInitialized?r():this[bp].push(r)}_destroy(e,r){var i;this[_u]=!0,clearTimeout(this[p8]),Ei in this&&(this[Ok](),((i=this[Uy])===null||i===void 0?void 0:i.complete)||this[Ei].destroy()),e!==null&&!ce.default.undefined(e)&&!(e instanceof _r)&&(e=new _r(e.message,e,this)),r(e)}get _isAboutToError(){return this[_u]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,r,i;return((r=(e=this[Ei])===null||e===void 0?void 0:e.destroyed)!==null&&r!==void 0?r:this.destroyed)&&!((i=this[h8])===null||i===void 0?void 0:i.complete)}get socket(){var e,r;return(r=(e=this[Ei])===null||e===void 0?void 0:e.socket)!==null&&r!==void 0?r:void 0}get downloadProgress(){let e;return this[Ju]?e=this[Wu]/this[Ju]:this[Ju]===this[Wu]?e=1:e=0,{percent:e,transferred:this[Wu],total:this[Ju]}}get uploadProgress(){let e;return this[zu]?e=this[Vu]/this[zu]:this[zu]===this[Vu]?e=1:e=0,{percent:e,transferred:this[Vu],total:this[zu]}}get timings(){var e;return(e=this[Ei])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[g8]}pipe(e,r){if(this[f8])throw new Error("Failed to pipe. The response has been emitted already.");return e instanceof Tk.ServerResponse&&this[Hy].add(e),super.pipe(e,r)}unpipe(e){return e instanceof Tk.ServerResponse&&this[Hy].delete(e),super.unpipe(e),this}};Rt.default=Uk});var Sp=E(Ms=>{"use strict";var PSe=Ms&&Ms.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r),Object.defineProperty(t,i,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]}),DSe=Ms&&Ms.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&PSe(e,t,r)};Object.defineProperty(Ms,"__esModule",{value:!0});Ms.CancelError=Ms.ParseError=void 0;var d8=vp(),C8=class extends d8.RequestError{constructor(e,r){let{options:i}=r.request;super(`${e.message} in "${i.url.toString()}"`,e,r.request);this.name="ParseError"}};Ms.ParseError=C8;var m8=class extends d8.RequestError{constructor(e){super("Promise was canceled",{},e);this.name="CancelError"}get isCanceled(){return!0}};Ms.CancelError=m8;DSe(vp(),Ms)});var I8=E(Wk=>{"use strict";Object.defineProperty(Wk,"__esModule",{value:!0});var E8=Sp(),RSe=(t,e,r,i)=>{let{rawBody:n}=t;try{if(e==="text")return n.toString(i);if(e==="json")return n.length===0?"":r(n.toString());if(e==="buffer")return n;throw new E8.ParseError({message:`Unknown body type '${e}'`,name:"Error"},t)}catch(s){throw new E8.ParseError(s,t)}};Wk.default=RSe});var zk=E(EA=>{"use strict";var FSe=EA&&EA.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r),Object.defineProperty(t,i,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]}),NSe=EA&&EA.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&FSe(e,t,r)};Object.defineProperty(EA,"__esModule",{value:!0});var LSe=require("events"),TSe=Ca(),MSe=g3(),Yy=Sp(),y8=I8(),w8=vp(),OSe=bk(),KSe=Rk(),B8=Fk(),USe=["request","response","redirect","uploadProgress","downloadProgress"];function Q8(t){let e,r,i=new LSe.EventEmitter,n=new MSe((o,a,l)=>{let c=u=>{let g=new w8.default(void 0,t);g.retryCount=u,g._noPipe=!0,l(()=>g.destroy()),l.shouldReject=!1,l(()=>a(new Yy.CancelError(g))),e=g,g.once("response",async p=>{var d;if(p.retryCount=u,p.request.aborted)return;let m;try{m=await KSe.default(g),p.rawBody=m}catch(R){return}if(g._isAboutToError)return;let I=((d=p.headers["content-encoding"])!==null&&d!==void 0?d:"").toLowerCase(),B=["gzip","deflate","br"].includes(I),{options:b}=g;if(B&&!b.decompress)p.body=m;else try{p.body=y8.default(p,b.responseType,b.parseJson,b.encoding)}catch(R){if(p.body=m.toString(),B8.isResponseOk(p)){g._beforeError(R);return}}try{for(let[R,H]of b.hooks.afterResponse.entries())p=await H(p,async L=>{let K=w8.default.normalizeArguments(void 0,_(P({},L),{retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1}),b);K.hooks.afterResponse=K.hooks.afterResponse.slice(0,R);for(let ne of K.hooks.beforeRetry)await ne(K);let J=Q8(K);return l(()=>{J.catch(()=>{}),J.cancel()}),J})}catch(R){g._beforeError(new Yy.RequestError(R.message,R,g));return}if(!B8.isResponseOk(p)){g._beforeError(new Yy.HTTPError(p));return}r=p,o(g.options.resolveBodyOnly?p.body:p)});let f=p=>{if(n.isCanceled)return;let{options:d}=g;if(p instanceof Yy.HTTPError&&!d.throwHttpErrors){let{response:m}=p;o(g.options.resolveBodyOnly?m.body:m);return}a(p)};g.once("error",f);let h=g.options.body;g.once("retry",(p,d)=>{var m,I;if(h===((m=d.request)===null||m===void 0?void 0:m.options.body)&&TSe.default.nodeStream((I=d.request)===null||I===void 0?void 0:I.options.body)){f(d);return}c(p)}),OSe.default(g,i,USe)};c(0)});n.on=(o,a)=>(i.on(o,a),n);let s=o=>{let a=(async()=>{await n;let{options:l}=r.request;return y8.default(r,o,l.parseJson,l.encoding)})();return Object.defineProperties(a,Object.getOwnPropertyDescriptors(n)),a};return n.json=()=>{let{headers:o}=e.options;return!e.writableFinished&&o.accept===void 0&&(o.accept="application/json"),s("json")},n.buffer=()=>s("buffer"),n.text=()=>s("text"),n}EA.default=Q8;NSe(Sp(),EA)});var b8=E(Vk=>{"use strict";Object.defineProperty(Vk,"__esModule",{value:!0});var HSe=Sp();function GSe(t,...e){let r=(async()=>{if(t instanceof HSe.RequestError)try{for(let n of e)if(n)for(let s of n)t=await s(t)}catch(n){t=n}throw t})(),i=()=>r;return r.json=i,r.text=i,r.buffer=i,r.on=i,r}Vk.default=GSe});var x8=E(_k=>{"use strict";Object.defineProperty(_k,"__esModule",{value:!0});var v8=Ca();function S8(t){for(let e of Object.values(t))(v8.default.plainObject(e)||v8.default.array(e))&&S8(e);return Object.freeze(t)}_k.default=S8});var P8=E(k8=>{"use strict";Object.defineProperty(k8,"__esModule",{value:!0})});var Xk=E(ss=>{"use strict";var jSe=ss&&ss.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r),Object.defineProperty(t,i,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]}),YSe=ss&&ss.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&jSe(e,t,r)};Object.defineProperty(ss,"__esModule",{value:!0});ss.defaultHandler=void 0;var D8=Ca(),os=zk(),qSe=b8(),qy=vp(),JSe=x8(),WSe={RequestError:os.RequestError,CacheError:os.CacheError,ReadError:os.ReadError,HTTPError:os.HTTPError,MaxRedirectsError:os.MaxRedirectsError,TimeoutError:os.TimeoutError,ParseError:os.ParseError,CancelError:os.CancelError,UnsupportedProtocolError:os.UnsupportedProtocolError,UploadError:os.UploadError},zSe=async t=>new Promise(e=>{setTimeout(e,t)}),{normalizeArguments:Jy}=qy.default,R8=(...t)=>{let e;for(let r of t)e=Jy(void 0,r,e);return e},VSe=t=>t.isStream?new qy.default(void 0,t):os.default(t),_Se=t=>"defaults"in t&&"options"in t.defaults,XSe=["get","post","put","patch","head","delete"];ss.defaultHandler=(t,e)=>e(t);var F8=(t,e)=>{if(t)for(let r of t)r(e)},N8=t=>{t._rawHandlers=t.handlers,t.handlers=t.handlers.map(i=>(n,s)=>{let o,a=i(n,l=>(o=s(l),o));if(a!==o&&!n.isStream&&o){let l=a,{then:c,catch:u,finally:g}=l;Object.setPrototypeOf(l,Object.getPrototypeOf(o)),Object.defineProperties(l,Object.getOwnPropertyDescriptors(o)),l.then=c,l.catch=u,l.finally=g}return a});let e=(i,n={},s)=>{var o,a;let l=0,c=u=>t.handlers[l++](u,l===t.handlers.length?VSe:c);if(D8.default.plainObject(i)){let u=P(P({},i),n);qy.setNonEnumerableProperties([i,n],u),n=u,i=void 0}try{let u;try{F8(t.options.hooks.init,n),F8((o=n.hooks)===null||o===void 0?void 0:o.init,n)}catch(f){u=f}let g=Jy(i,n,s!=null?s:t.options);if(g[qy.kIsNormalizedAlready]=!0,u)throw new os.RequestError(u.message,u,g);return c(g)}catch(u){if(n.isStream)throw u;return qSe.default(u,t.options.hooks.beforeError,(a=n.hooks)===null||a===void 0?void 0:a.beforeError)}};e.extend=(...i)=>{let n=[t.options],s=[...t._rawHandlers],o;for(let a of i)_Se(a)?(n.push(a.defaults.options),s.push(...a.defaults._rawHandlers),o=a.defaults.mutableDefaults):(n.push(a),"handlers"in a&&s.push(...a.handlers),o=a.mutableDefaults);return s=s.filter(a=>a!==ss.defaultHandler),s.length===0&&s.push(ss.defaultHandler),N8({options:R8(...n),handlers:s,mutableDefaults:Boolean(o)})};let r=async function*(i,n){let s=Jy(i,n,t.options);s.resolveBodyOnly=!1;let o=s.pagination;if(!D8.default.object(o))throw new TypeError("`options.pagination` must be implemented");let a=[],{countLimit:l}=o,c=0;for(;c{let s=[];for await(let o of r(i,n))s.push(o);return s},e.paginate.each=r,e.stream=(i,n)=>e(i,_(P({},n),{isStream:!0}));for(let i of XSe)e[i]=(n,s)=>e(n,_(P({},s),{method:i})),e.stream[i]=(n,s)=>e(n,_(P({},s),{method:i,isStream:!0}));return Object.assign(e,WSe),Object.defineProperty(e,"defaults",{value:t.mutableDefaults?t:JSe.default(t),writable:t.mutableDefaults,configurable:t.mutableDefaults,enumerable:!0}),e.mergeOptions=R8,e};ss.default=N8;YSe(P8(),ss)});var zy=E((Ea,Wy)=>{"use strict";var ZSe=Ea&&Ea.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r),Object.defineProperty(t,i,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]}),L8=Ea&&Ea.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&ZSe(e,t,r)};Object.defineProperty(Ea,"__esModule",{value:!0});var $Se=require("url"),T8=Xk(),exe={options:{method:"GET",retry:{limit:2,methods:["GET","PUT","HEAD","DELETE","OPTIONS","TRACE"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"],maxRetryAfter:void 0,calculateDelay:({computedValue:t})=>t},timeout:{},headers:{"user-agent":"got (https://github.com/sindresorhus/got)"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:"text",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:"",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:t=>t.request.options.responseType==="json"?t.body:JSON.parse(t.body),paginate:t=>{if(!Reflect.has(t.headers,"link"))return!1;let e=t.headers.link.split(","),r;for(let i of e){let n=i.split(";");if(n[1].includes("next")){r=n[0].trimStart().trim(),r=r.slice(1,-1);break}}return r?{url:new $Se.URL(r)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:Infinity,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:t=>JSON.parse(t),stringifyJson:t=>JSON.stringify(t),cacheOptions:{}},handlers:[T8.defaultHandler],mutableDefaults:!1},Zk=T8.default(exe);Ea.default=Zk;Wy.exports=Zk;Wy.exports.default=Zk;Wy.exports.__esModule=!0;L8(Xk(),Ea);L8(zk(),Ea)});var U8=E(Xu=>{"use strict";var fst=require("net"),txe=require("tls"),$k=require("http"),M8=require("https"),rxe=require("events"),hst=require("assert"),ixe=require("util");Xu.httpOverHttp=nxe;Xu.httpsOverHttp=sxe;Xu.httpOverHttps=oxe;Xu.httpsOverHttps=axe;function nxe(t){var e=new Ia(t);return e.request=$k.request,e}function sxe(t){var e=new Ia(t);return e.request=$k.request,e.createSocket=O8,e.defaultPort=443,e}function oxe(t){var e=new Ia(t);return e.request=M8.request,e}function axe(t){var e=new Ia(t);return e.request=M8.request,e.createSocket=O8,e.defaultPort=443,e}function Ia(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||$k.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(i,n,s,o){for(var a=K8(n,s,o),l=0,c=e.requests.length;l=this.maxSockets){s.requests.push(o);return}s.createSocket(o,function(a){a.on("free",l),a.on("close",c),a.on("agentRemove",c),e.onSocket(a);function l(){s.emit("free",a,o)}function c(u){s.removeSocket(a),a.removeListener("free",l),a.removeListener("close",c),a.removeListener("agentRemove",c)}})};Ia.prototype.createSocket=function(e,r){var i=this,n={};i.sockets.push(n);var s=eP({},i.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(s.localAddress=e.localAddress),s.proxyAuth&&(s.headers=s.headers||{},s.headers["Proxy-Authorization"]="Basic "+new Buffer(s.proxyAuth).toString("base64")),IA("making CONNECT request");var o=i.request(s);o.useChunkedEncodingByDefault=!1,o.once("response",a),o.once("upgrade",l),o.once("connect",c),o.once("error",u),o.end();function a(g){g.upgrade=!0}function l(g,f,h){process.nextTick(function(){c(g,f,h)})}function c(g,f,h){if(o.removeAllListeners(),f.removeAllListeners(),g.statusCode!==200){IA("tunneling socket could not be established, statusCode=%d",g.statusCode),f.destroy();var p=new Error("tunneling socket could not be established, statusCode="+g.statusCode);p.code="ECONNRESET",e.request.emit("error",p),i.removeSocket(n);return}if(h.length>0){IA("got illegal response body from proxy"),f.destroy();var p=new Error("got illegal response body from proxy");p.code="ECONNRESET",e.request.emit("error",p),i.removeSocket(n);return}return IA("tunneling connection has established"),i.sockets[i.sockets.indexOf(n)]=f,r(f)}function u(g){o.removeAllListeners(),IA(`tunneling socket could not be established, cause=%s +`,g.message,g.stack);var f=new Error("tunneling socket could not be established, cause="+g.message);f.code="ECONNRESET",e.request.emit("error",f),i.removeSocket(n)}};Ia.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var i=this.requests.shift();i&&this.createSocket(i,function(n){i.request.onSocket(n)})}};function O8(t,e){var r=this;Ia.prototype.createSocket.call(r,t,function(i){var n=t.request.getHeader("host"),s=eP({},r.options,{socket:i,servername:n?n.replace(/:.*$/,""):t.host}),o=txe.connect(0,s);r.sockets[r.sockets.indexOf(i)]=o,e(o)})}function K8(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function eP(t){for(var e=1,r=arguments.length;e{H8.exports=U8()});var b4=E((xot,sP)=>{var e4=Object.assign({},require("fs")),oe=typeof oe!="undefined"?oe:{},kp={},wA;for(wA in oe)oe.hasOwnProperty(wA)&&(kp[wA]=oe[wA]);var oP=[],t4="./this.program",r4=function(t,e){throw e},i4=!1,Wl=!0,Pp="";function dxe(t){return oe.locateFile?oe.locateFile(t,Pp):Pp+t}var Xy,aP,Zy,AP;Wl&&(i4?Pp=require("path").dirname(Pp)+"/":Pp=__dirname+"/",Xy=function(e,r){var i=s4(e);return i?r?i:i.toString():(Zy||(Zy=e4),AP||(AP=require("path")),e=AP.normalize(e),Zy.readFileSync(e,r?null:"utf8"))},aP=function(e){var r=Xy(e,!0);return r.buffer||(r=new Uint8Array(r)),n4(r.buffer),r},process.argv.length>1&&(t4=process.argv[1].replace(/\\/g,"/")),oP=process.argv.slice(2),typeof sP!="undefined"&&(sP.exports=oe),r4=function(t){process.exit(t)},oe.inspect=function(){return"[Emscripten Module object]"});var $y=oe.print||console.log.bind(console),Di=oe.printErr||console.warn.bind(console);for(wA in kp)kp.hasOwnProperty(wA)&&(oe[wA]=kp[wA]);kp=null;oe.arguments&&(oP=oe.arguments);oe.thisProgram&&(t4=oe.thisProgram);oe.quit&&(r4=oe.quit);var Cxe=16;function mxe(t,e){return e||(e=Cxe),Math.ceil(t/e)*e}var Exe=0,Ixe=function(t){Exe=t},lP;oe.wasmBinary&&(lP=oe.wasmBinary);var Pst=oe.noExitRuntime||!0;typeof WebAssembly!="object"&&Gr("no native wasm support detected");function yxe(t,e,r){switch(e=e||"i8",e.charAt(e.length-1)==="*"&&(e="i32"),e){case"i1":return Zi[t>>0];case"i8":return Zi[t>>0];case"i16":return cP[t>>1];case"i32":return _e[t>>2];case"i64":return _e[t>>2];case"float":return o4[t>>2];case"double":return a4[t>>3];default:Gr("invalid type for getValue: "+e)}return null}var ew,A4=!1,wxe;function n4(t,e){t||Gr("Assertion failed: "+e)}function l4(t){var e=oe["_"+t];return n4(e,"Cannot call unknown function "+t+", make sure it is exported"),e}function vxe(t,e,r,i,n){var s={string:function(h){var p=0;if(h!=null&&h!==0){var d=(h.length<<2)+1;p=g4(d),u4(h,p,d)}return p},array:function(h){var p=g4(h.length);return Bxe(h,p),p}};function o(h){return e==="string"?c4(h):e==="boolean"?Boolean(h):h}var a=l4(t),l=[],c=0;if(i)for(var u=0;u=i);)++n;if(n-e>16&&t.subarray&&f4)return f4.decode(t.subarray(e,n));for(var s="";e>10,56320|c&1023)}}return s}function c4(t,e){return t?Zu($u,t,e):""}function tw(t,e,r,i){if(!(i>0))return 0;for(var n=r,s=r+i-1,o=0;o=55296&&a<=57343){var l=t.charCodeAt(++o);a=65536+((a&1023)<<10)|l&1023}if(a<=127){if(r>=s)break;e[r++]=a}else if(a<=2047){if(r+1>=s)break;e[r++]=192|a>>6,e[r++]=128|a&63}else if(a<=65535){if(r+2>=s)break;e[r++]=224|a>>12,e[r++]=128|a>>6&63,e[r++]=128|a&63}else{if(r+3>=s)break;e[r++]=240|a>>18,e[r++]=128|a>>12&63,e[r++]=128|a>>6&63,e[r++]=128|a&63}}return e[r]=0,r-n}function u4(t,e,r){return tw(t,$u,e,r)}function rw(t){for(var e=0,r=0;r=55296&&i<=57343&&(i=65536+((i&1023)<<10)|t.charCodeAt(++r)&1023),i<=127?++e:i<=2047?e+=2:i<=65535?e+=3:e+=4}return e}function uP(t){var e=rw(t)+1,r=h4(e);return r&&tw(t,Zi,r,e),r}function Bxe(t,e){Zi.set(t,e)}function xxe(t,e){return t%e>0&&(t+=e-t%e),t}var gP,Zi,$u,cP,kxe,_e,Pxe,o4,a4;function p4(t){gP=t,oe.HEAP8=Zi=new Int8Array(t),oe.HEAP16=cP=new Int16Array(t),oe.HEAP32=_e=new Int32Array(t),oe.HEAPU8=$u=new Uint8Array(t),oe.HEAPU16=kxe=new Uint16Array(t),oe.HEAPU32=Pxe=new Uint32Array(t),oe.HEAPF32=o4=new Float32Array(t),oe.HEAPF64=a4=new Float64Array(t)}var Dst=oe.INITIAL_MEMORY||16777216,fP,d4=[],C4=[],m4=[],Dxe=!1;function Fxe(){if(oe.preRun)for(typeof oe.preRun=="function"&&(oe.preRun=[oe.preRun]);oe.preRun.length;)Rxe(oe.preRun.shift());hP(d4)}function Nxe(){Dxe=!0,!oe.noFSInit&&!y.init.initialized&&y.init(),BA.init(),hP(C4)}function Txe(){if(oe.postRun)for(typeof oe.postRun=="function"&&(oe.postRun=[oe.postRun]);oe.postRun.length;)Lxe(oe.postRun.shift());hP(m4)}function Rxe(t){d4.unshift(t)}function Mxe(t){C4.unshift(t)}function Lxe(t){m4.unshift(t)}var zl=0,pP=null,Dp=null;function Oxe(t){return t}function E4(t){zl++,oe.monitorRunDependencies&&oe.monitorRunDependencies(zl)}function dP(t){if(zl--,oe.monitorRunDependencies&&oe.monitorRunDependencies(zl),zl==0&&(pP!==null&&(clearInterval(pP),pP=null),Dp)){var e=Dp;Dp=null,e()}}oe.preloadedImages={};oe.preloadedAudios={};function Gr(t){oe.onAbort&&oe.onAbort(t),t+="",Di(t),A4=!0,wxe=1,t="abort("+t+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(t);throw e}var I4="data:application/octet-stream;base64,";function y4(t){return t.startsWith(I4)}var Rp="data:application/octet-stream;base64,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AkEEaiEBIAIoAgAiA0F/cyADQYGChAhrcUGAgYKEeHFFDQALIANB/wFxRQRAIAIgAGsPCwNAIAItAAEhAyACQQFqIgEhAiADDQALCyABIABrC2EBAX8jAEEQayICIAA2AgggAiABNwMAAkAgAikDACACKAIIKQMIVgRAIAIoAghBADoAACACQX82AgwMAQsgAigCCEEBOgAAIAIoAgggAikDADcDECACQQA2AgwLIAIoAgwL7wEBAX8jAEEgayICJAAgAiAANgIYIAIgATcDECACIAIoAhhCCBAeNgIMAkAgAigCDEUEQCACQX82AhwMAQsgAigCDCACKQMQQv8BgzwAACACKAIMIAIpAxBCCIhC/wGDPAABIAIoAgwgAikDEEIQiEL/AYM8AAIgAigCDCACKQMQQhiIQv8BgzwAAyACKAIMIAIpAxBCIIhC/wGDPAAEIAIoAgwgAikDEEIoiEL/AYM8AAUgAigCDCACKQMQQjCIQv8BgzwABiACKAIMIAIpAxBCOIhC/wGDPAAHIAJBADYCHAsgAigCHBogAkEgaiQAC4cDAQF/IwBBMGsiAyQAIAMgADYCJCADIAE2AiAgAyACNwMYAkAgAygCJC0AKEEBcQRAIANCfzcDKAwBCwJAAkAgAygCJCgCIEUNACADKQMYQv///////////wBWDQAgAykDGFANASADKAIgDQELIAMoAiRBDGpBEkEAEBQgA0J/NwMoDAELIAMoAiQtADVBAXEEQCADQn83AygMAQsCfyMAQRBrIgAgAygCJDYCDCAAKAIMLQA0QQFxCwRAIANCADcDKAwBCyADKQMYUARAIANCADcDKAwBCyADQgA3AxADQCADKQMQIAMpAxhUBEAgAyADKAIkIAMoAiAgAykDEKdqIAMpAxggAykDEH1BARAhIgI3AwggAkIAUwRAIAMoAiRBAToANSADKQMQUARAIANCfzcDKAwECyADIAMpAxA3AygMAwsgAykDCFAEQCADKAIkQQE6ADQFIAMgAykDCCADKQMQfDcDEAwCCwsLIAMgAykDEDcDKAsgAykDKCECIANBMGokACACCzYBAX8jAEEQayIBIAA2AgwCfiABKAIMLQAAQQFxBEAgASgCDCkDCCABKAIMKQMQfQwBC0IACwuyAQIBfwF+IwBBEGsiASQAIAEgADYCBCABIAEoAgRC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AkEBNgIQIAJBADYCCANAAkAgAigCCCACKAIYLwEETw0AAkAgAigCDCACKAIIai0AAEEfSwRAIAIoAgwgAigCCGotAABBgAFJDQELIAIoAgwgAigCCGotAABBDUYNACACKAIMIAIoAghqLQAAQQpGDQAgAigCDCACKAIIai0AAEEJRgRADAELIAJBAzYCEAJAIAIoAgwgAigCCGotAABB4AFxQcABRgRAIAJBATYCAAwBCwJAIAIoAgwgAigCCGotAABB8AFxQeABRgRAIAJBAjYCAAwBCwJAIAIoAgwgAigCCGotAABB+AFxQfABRgRAIAJBAzYCAAwBCyACQQQ2AhAMBAsLCyACKAIYLwEEIAIoAgggAigCAGpNBEAgAkEENgIQDAILIAJBATYCBANAIAIoAgQgAigCAE0EQCACKAIMIAIoAgggAigCBGpqLQAAQcABcUGAAUcEQCACQQQ2AhAMBgUgAiACKAIEQQFqNgIEDAILAAsLIAIgAigCACACKAIIajYCCAsgAiACKAIIQQFqNgIIDAELCwsgAigCGCACKAIQNgIIIAIoAhQEQAJAIAIoAhRBAkcNACACKAIQQQNHDQAgAkECNgIQIAIoAhhBAjYCCAsCQCACKAIUIAIoAhBGDQAgAigCEEEBRg0AIAJBBTYCHAwCCwsgAiACKAIQNgIcCyACKAIcC2oBAX8jAEEQayIBIAA2AgwgASgCDEIANwMAIAEoAgxBADYCCCABKAIMQn83AxAgASgCDEEANgIsIAEoAgxBfzYCKCABKAIMQgA3AxggASgCDEIANwMgIAEoAgxBADsBMCABKAIMQQA7ATILUgECf0GQlwEoAgAiASAAQQNqQXxxIgJqIQACQCACQQAgACABTRsNACAAPwBBEHRLBEAgABATRQ0BC0GQlwEgADYCACABDwtBtJsBQTA2AgBBfwuNBQEDfyMAQRBrIgEkACABIAA2AgwgASgCDARAIAEoAgwoAgAEQCABKAIMKAIAEDEaIAEoAgwoAgAQGwsgASgCDCgCHBAVIAEoAgwoAiAQJSABKAIMKAIkECUgASgCDCgCUCECIwBBEGsiACQAIAAgAjYCDCAAKAIMBEAgACgCDCgCEARAIABBADYCCANAIAAoAgggACgCDCgCAEkEQCAAKAIMKAIQIAAoAghBAnRqKAIABEAgACgCDCgC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A3EQHwsgAygCpAEoAhQgA0GeAWogA0GcAWoQgQEgAygCTCADLwGeARAfIAMoAkwgAy8BnAEQHwJAAkAgAy0AhQFBAXFFDQAgAygCpAEpAyhCFFoNACADKAJMQQAQIAwBCyADKAJMIAMoAqQBKAIYECALAkACQCADKAKgAUGAAnFBgAJHDQAgAygCpAEpAyBC/////w9UBEAgAygCpAEpAyhC/////w9UDQELIAMoAkxBfxAgIAMoAkxBfxAgDAELAkAgAygCpAEpAyBC/////w9UBEAgAygCTCADKAKkASkDIKcQIAwBCyADKAJMQX8QIAsCQCADKAKkASkDKEL/////D1QEQCADKAJMIAMoAqQBKQMopxAgDAELIAMoAkxBfxAgCwsgAygCTCADKAKkASgCMBBTQf//A3EQHyADIAMoAqQBKAI0IAMoAqABEIYBQf//A3EgAygCkAFBgAYQhgFB//8DcWo2AogBIAMoAkwgAygCiAFB//8DcRAfIAMoAqABQYACcUUEQCADKAJMIAMoAqQBKAI4EFNB//8DcRAfIAMoAkwgAygCpAEoAjxB//8DcRAfIAMoAkwgAygCpAEvAUAQHyADKAJMIAMoAqQBKAJEECACQCADKAKkASkDSEL/////D1QEQCADKAJMIAMoAqQBKQNIpxAgDAELIAMoAkxBfxAgCwsCfyMAQRBrIgAgAygCTDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAJMEBYgAygCkAEQIyADQX82AqwBDAELIAMoAqgBIANB0ABqAn4jAEEQayIAIAMoAkw2AgwCfiAAKAIMLQAAQQFxBEAgACgCDCkDEAwBC0IACwsQNUEASARAIAMoAkwQFiADKAKQARAjIANBfzYCrAEMAQsgAygCTBAWIAMoAqQBKAIwBEAgAygCqAEgAygCpAEoAjAQigFBAEgEQCADKAKQARAjIANBfzYCrAEMAgsLIAMoApABBEAgAygCqAEgAygCkAFBgAYQhQFBAEgEQCADKAKQARAjIANBfzYCrAEMAgsLIAMoApABECMgAygCpAEoAjQEQCADKAKoASADKAKkASgCNCADKAKgARCFAUEASARAIANBfzYCrAEMAgsLIAMoAqABQYACcUUEQCADKAKkASgCOARAIAMoAqgBIAMoAqQBKAI4EIoB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HCAAIAAoAhRBAWo2AhQMAQsLIAAoAggQR0EBcUUEQCAAKAIgQRRBABAUIAAoAggQFiAAQX82AiwMAQsgACgCCBAWIAAgACgCHDYCLAsgACgCLCECIABBMGokACADIAIiADYCBCAAQQBIBEAgA0IANwMoDAELIAMpAwggAygCBK18Qv///////////wBWBEAgAygCFEEEQRYQFCADQgA3AygMAQsgAyADKQMIIAMoAgStfDcDKAsgAykDKCEBIANBMGokACABC20BAX8jAEEgayIEJAAgBCAANgIYIAQgATYCFCAEIAI2AhAgBCADNgIMAkAgBCgCGEUEQCAEQQA2AhwMAQsgBCAEKAIUIAQoAhAgBCgCDCAEKAIYQQhqEJIBNgIcCyAEKAIcIQAgBEEgaiQAIAALVQEBfyMAQRBrIgEkACABIAA2AgwCQAJAIAEoAgwoAiRBAUYNACABKAIMKAIkQQJGDQAMAQsgASgCDEEAQgBBChAhGiABKAIMQQA2AiQLIAFBEGokAAumAQEBfyMAQRBrIgIkACACIAA2AgggAiABNgIEAkAgAigCCC0AKEEBcQRAIAJBfzYCDAwBCyACKAIIKAIABEAgAigCCCgCACACKAIEEGhBAEgEQCACKAIIQQxqIAIoAggoAgAQFyACQX82AgwMAgsLIAIoAgggAkEEakIEQRMQIUIAUwRAIAJBfzYCDAwBCyACQQA2AgwLIAIoAgwhACACQRBqJAAgAAuNCAIBfwF+IwBBkAFrIgMkACADIAA2AoQBIAMgATYCgAEgAyACNgJ8IAMQTwJAIAMoAoABKQMIQgBSBEAgAyADKAKAASgCACgCACkDSDcDYCADIAMoAoABKAIAKAIAKQNINwNoDAELIANCADcDYCADQgA3A2gLIANCADcDcAJAA0AgAykDcCADKAKAASkDCFQEQCADKAKAASgCACADKQNwp0EEdGooAgApA0ggAykDaFQEQCADIAMoAoABKAIAIAMpA3CnQQR0aigCACkDSDcDaAsgAykDaCADKAKAASkDIFYEQCADKAJ8QRNBABAUIANCfzcDiAEMAwsgAyADKAKAASgCACADKQNwp0EEdGooAgApA0ggAygCgAEoAgAgAykDcKdBBHRqKAIAKQMgfCADKAKAASgCACADKQNwp0EEdGooAgAoAjAQU0H//wNxrXxC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DEECdGooAgBBAnRqLwEASA0AAkAgAygCGCADKAIQQQJ0ai8BACADKAIYIAMoAhxB3BZqIAMoAgxBAnRqKAIAQQJ0ai8BAEcNACADKAIQIAMoAhxB2Chqai0AACADKAIcQdwWaiADKAIMQQJ0aigCACADKAIcQdgoamotAABKDQAMAQsgAygCHEHcFmogAygCFEECdGogAygCHEHcFmogAygCDEECdGooAgA2AgAgAyADKAIMNgIUIAMgAygCDEEBdDYCDAwBCwsgAygCHEHcFmogAygCFEECdGogAygCEDYCAAvXEwEDfyMAQTBrIgIkACACIAA2AiwgAiABNgIoIAIgAigCKCgCADYCJCACIAIoAigoAggoAgA2AiAgAiACKAIoKAIIKAIMNgIcIAJBfzYCECACKAIsQQA2AtAoIAIoAixBvQQ2AtQoIAJBADYCGANAIAIoAhggAigCHEgEQAJAIAIoAiQgAigCGEECdGovAQAEQCACIAIoAhgiATYCECACKAIsQdwWaiEDIAIoAiwiBCgC0ChBAWohACAEIAA2AtAoIABBAnQgA2ogATYCACACKAIYIAIoAixB2ChqakEAOgAADAELIAIoAiQgAigCGEECdGpBADsBAgsgAiACKAIYQQFqNgIYDAELCwNAIAIoAiwoAtAoQQJIBEACQCACKAIQQQJIBEAgAiACKAIQQQFqIgA2AhAMAQtBACEACyACKAIsQdwWaiEDIAIoAiwiBCgC0ChBAWohASAEIAE2AtAoIAFBAnQgA2ogADYCACACIAA2AgwgAigCJCACKAIMQQJ0akEBOwEAIAIoAgwgAigCLEHYKGpqQQA6AAAgAigCLCIAIAAoAqgtQQFrNgKoLSACKAIgBEAgAigCLCIAIAAoAqwtIAIoAiAgAigCDEECdGovAQJrNgKsLQsMAQsLIAIoAiggAigCEDYCBCACIAIoAiwoAtAoQQJtNgIYA0AgAigCGEEBTgRAIAIoAiwgAigCJCACKAIYEHogAiACKAIYQQFrNgIYDAELCyACIAIoAhw2AgwDQCACIAIoAiwoAuAWNgIYIAIoAixB3BZqIQEgAigCLCIDKALQKCEAIAMgAEEBazYC0CggAigCLCAAQQJ0IAFqKAIANgLgFiACKAIsIAIoAiRBARB6IAIgAigCLCgC4BY2AhQgAigCGCEBIAIoAixB3BZqIQMgAigCLCIEKALUKEEBayEAIAQgADYC1CggAEECdCADaiABNgIAIAIoAhQhASACKAIsQdwWaiEDIAIoAiwiBCgC1ChBAWshACAEIAA2AtQoIABBAnQgA2ogATYCACACKAIkIAIoAgxBAnRqIAIoAiQgAigCGEECdGovAQAgAigCJCACKAIUQQJ0ai8BAGo7AQAgAigCDCACKAIsQdgoamoCfyACKAIYIAIoAixB2Chqai0AACACKAIUIAIoAixB2Chqai0AAE4EQCACKAIYIAIoAixB2Chqai0AAAwBCyACKAIUIAIoAixB2Chqai0AAAtBAWo6AAAgAigCJCACKAIUQQJ0aiACKAIMIgA7AQIgAigCJCACKAIYQQJ0aiAAOwECIAIgAigCDCIAQQFqNgIMIAIoAiwgADYC4BYgAigCLCACKAIkQQEQeiACKAIsKALQKEECTg0ACyACKAIsKALgFiEBIAIoAixB3BZqIQMgAigCLCIEKALUKEEBayEAIAQgADYC1CggAEECdCADaiABNgIAIAIoAighASMAQUBqIgAgAigCLDYCPCAAIAE2AjggACAAKAI4KAIANgI0IAAgACgCOCgCBDYCMCAAIAAoAjgoAggoAgA2AiwgACAAKAI4KAIIKAIENgIoIAAgACgCOCgCCCgCCDYCJCAAIAAoAjgoAggoAhA2AiAgAEEANgIEIABBADYCEANAIAAoAhBBD0wEQCAAKAI8QbwWaiAAKAIQQQF0akEAOwEAIAAgACgCEEEBajYCEAwBCwsgACgCNCAAKAI8QdwWaiAAKAI8KALUKEECdGooAgBBAnRqQQA7AQIgACAAKAI8KALUKEEBajYCHANAIAAoAhxBvQRIBEAgACAAKAI8QdwWaiAAKAIcQQJ0aigCADYCGCAAIAAoAjQgACgCNCAAKAIYQQJ0ai8BAkECdGovAQJBAWo2AhAgACgCECAAKAIgSgRAIAAgACgCIDYCECAAIAAoAgRBAWo2AgQLIAAoAjQgACgCGEECdGogACgCEDsBAiAAKAIYIAAoAjBMBEAgACgCPCAAKAIQQQF0akG8FmoiASABLwEAQQFqOwEAIABBADYCDCAAKAIYIAAoAiROBEAgACAAKAIoIAAoAhggACgCJGtBAnRqKAIANgIMCyAAIAAoAjQgACgCGEECdGovAQA7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EANAIAMpAxAgAykDCFpFBEAgAygCKCgCACADKQMQp0EEdGoQkAEgAyADKQMQQgF8NwMQDAELCyADKAIoIAMpAwgiATcDECADKAIoIAE3AwggA0EBOgAvCyADLQAvQQFxIQAgA0EwaiQAIAALzAEBAX8jAEEgayICJAAgAiAANwMQIAIgATYCDCACQTAQGCIBNgIIAkAgAUUEQCACKAIMQQ5BABAUIAJBADYCHAwBCyACKAIIQQA2AgAgAigCCEIANwMQIAIoAghCADcDCCACKAIIQgA3AyAgAigCCEIANwMYIAIoAghBADYCKCACKAIIQQA6ACwgAigCCCACKQMQIAIoAgwQgwFBAXFFBEAgAigCCBAkIAJBADYCHAwBCyACIAIoAgg2AhwLIAIoAhwhASACQSBqJAAgAQvWAgEBfyMAQSBrIgMkACADIAA2AhggAyABNgIUIAMgAjYCECADIANBDGpCBBApNgIIAkAgAygCCEUEQCADQX82AhwMAQsDQCADKAIUBEAgAygCFCgCBCADKAIQcUGABnEEQCADKAIIQgAQLBogAygCCCADKAIULwEIEB8gAygCCCADKAIULwEKEB8CfyMAQRBrIgAgAygCCDYCDCAAKAIMLQAAQQFxRQsEQCADKAIYQQhqQRRBABAUIAMoAggQFiADQX82AhwMBAsgAygCGCADQQxqQgQQNUEASARAIAMoAggQFiADQX82AhwMBAsgAygCFC8BCgRAIAMoAhggAygCFCgCDCADKAIULwEKrRA1QQBIBEAgAygCCBAWIANBfzYCHAwFCwsLIAMgAygCFCgCADYCFAwBCwsgAygCCBAWIANBADYCHAsgAygCHCEAIANBIGokACAAC2gBAX8jAEEQayICIAA2AgwgAiABNgIIIAJBADsBBgNAIAIoAgwEQCACKAIMKAIEIAIoAghxQYAGcQRAIAIgAigCDC8BCiACLwEGQQRqajsBBgsgAiACKAIMKAIANgIMDAELCyACLwEGC/ABAQF/IwBBEGsiASQAIAEgADYCDCABIAEoAgw2AgggAUEANgIEA0AgASgCDARAAkACQCABKAIMLwEIQfXGAUYNACABKAIMLwEIQfXgAUYNACABKAIMLwEIQYGyAkYNACABKAIMLwEIQQFHDQELIAEgASgCDCgCADYCACABKAIIIAEoAgxGBEAg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IAEpA4ABIAEpAzB8IAEpA5gBIAEpAzh8VgRAIAEoApABQRVBABAUIAFBADYCrAEMAQsCQCABKAKUAUEEcUUNACABKQOAASABKQMwfCABKQOYASABKQM4fFENACABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEpAyggASkDMEIugFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEgASkDKCABKAKQARCEASIFNgKMASAFRQRAIAFBADYCrAEMAQsgASgCjAFBAToALCABKAKMASABKQMwNwMYIAEoAowBIAEpA4ABNwMgIAEgASgCjAE2AqwBCyABKAKsASEFIAFBsAFqJAAgACAFNgJQDAELIAAoAmQgACkDMBAsGiAAKAJkIQUgACkDWCEJIAAoAmgoAhQhBiAAKAJUIQcjAEHQAGsiASQAIAEgBTYCSCABIAk3A0AgASAGNgI8IAEgBzYCOAJAIAEoAkgQL0IWVARAIAEoAjhBFUEAEBQgAUEANgJMDAELIwBBEGsiBSABKAJINgIMIAECfiAFKAIMLQAAQQFxBEAgBSgCDCkDEAwBC0IACzcDCCABKAJIQgQQHhogASgCSBAqBEAgASgCOEEBQQAQFCABQQA2AkwMAQsgASABKAJIEB1B//8Dca03AyggASABKAJIEB1B//8Dca03AyAgASkDICABKQMoUgRAIAEoAjhBE0EAEBQgAUEANgJMDAELIAEgASgCSBAqrTcDGCABIAEoAkgQKq03AxAgASkDECABKQMQIAEpAxh8VgRAIAEoAjhBBEEWEBQgAUEANgJMDAELIAEpAxAgASkDGHwgASkDQCABKQMIfFYEQCABKAI4QRVBABAUIAFBADYCTAwBCwJAIAEoAjxBBHFFDQAgASkDECABKQMYfCABKQNAIAEpAwh8UQ0AIAEoAjhBFUEAEBQgAUEANgJMDAELIAEgASkDICABKAI4EIQBIgU2AjQgBUUEQCABQQA2AkwMAQsgASgCNEEAOgAsIAEoAjQgASkDGDcDGCABKAI0IAEpAxA3AyAgASABKAI0NgJMCyABKAJMIQUgAUHQAGokACAAIAU2AlALIAAoAlBFBEAgAEEANgJsDAELIAAoAmQgACkDMEIUfBAsGiAAIAAoAmQQHTsBTiAAKAJQKQMgIAAoAlApAxh8IAApA1ggACkDMHxWBEAg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IAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEGCAms2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEEBayIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C5IQAQF/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQgAgJ/IAIoAigoAiwgAigCKCgCDEEFa0kEQCACKAIoKAIsDAELIAIoAigoAgxBBWsLNgIgIAJBADYCECACIAIoAigoAgAoAgQ2AgwDQAJAIAJB//8DNgIcIAIgAigCKCgCvC1BKmpBA3U2AhQgAigCKCgCACgCECACKAIUSQ0AIAIgAigCKCgCACgCECACKAIUazYCFCACIAIoAigoAmwgAigCKCgCXGs2AhggAigCHCACKAIYIAIoAigoAgAoAgRqSwRAIAIgAigCGCACKAIoKAIAKAIEajYCHAsgAigCHCACKAIUSwRAIAIgAigCFDYCHAsCQCACKAIcIAIoAiBPDQACQCACKAIcRQRAIAIoAiRBBEcNAQsgAigCJEUNACACKAIcIAIoAhggAigCKCgCACgCBGpGDQELDAELQQAhACACIAIoAiRBBEYEfyACKAIcIAIoAhggAigCKCgCACgCBGpGBUEAC0EBcTYCECACKAIoQQBBACACKAIQEFwgAigCKCgCCCACKAIoKAIUQQRraiACKAIcOgAAIAIoAigoAgggAigCKCgCFEEDa2ogAigCHEEIdjoAACACKAIoKAIIIAIoAigoAhRBAmtqIAIoAhxBf3M6AAAgAigCKCgCCCACKAIoKAIUQQFraiACKAIcQX9zQQh2OgAAIAIoAigoAgAQHCACKAIYBEAgAigCGCACKAIcSwRAIAIgAigCHDYCGAsgAigCKCgCACgCDCACKAIoKAI4IAIoAigoAlxqIAIoAhgQGRogAigCKCgCACIAIAIoAhggACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCGGs2AhAgAigCKCgCACIAIAIoAhggACgCFGo2AhQgAigCKCIAIAIoAhggACgCXGo2AlwgAiACKAIcIAIoAhhrNgIcCyACKAIcBEAgAigCKCgCACACKAIoKAIAKAIMIAIoAhwQeBogAigCKCgCACIAIAIoAhwgACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCHGs2AhAgAigCKCgCACIAIAIoAhwgACgCFGo2AhQLIAIoAhBFDQELCyACIAIoAgwgAigCKCgCACgCBGs2AgwgAigCDARAAkAgAigCDCACKAIoKAIsTwRAIAIoAihBAjYCsC0gAigCKCgCOCACKAIoKAIAKAIAIAIoAigoAixrIAIoAigoAiwQGRogAigCKCACKAIoKAIsNgJsDAELIAIoAgwgAigCKCgCPCACKAIoKAJsa08EQCACKAIoIgAgACgCbCACKAIoKAIsazYCbCACKAIoKAI4IAIoAigoAjggAigCKCgCLGogAigCKCgCbBAZGiACKAIoKAKwLUECSQRAIAIoAigiACAAKAKwLUEBajYCsC0LCyACKAIoKAI4IAIoAigoAmxqIAIoAigoAgAoAgAgAigCDGsgAigCDBAZGiACKAIoIgAgAigCDCAAKAJsajYCbAsgAigCKCACKAIoKAJsNgJcIAIoAigiAQJ/IAIoAgwgAigCKCgCLCACKAIoKAK0LWtLBEAgAigCKCgCLCACKAIoKAK0LWsMAQsgAigCDAsgASgCtC1qNgK0LQsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCwJAIAIoAhAEQCACQQM2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mwFCADcDAEGYmwFCADcDAEGQmwFCADcDAEGImwFCADcDAEGAmwFCADcDAEH4mgFCADcDAEHwmgFCADcDAEHwmgEL1QQBBX8jAEGwAWsiASQAIAEgADYCqAEgASgCqAEQNwJAAkAgASgCqAEoAgBBAE4EQCABKAKoASgCAEGAFCgCAEgNAQsgASABKAKoASgCADYCECABQSBqQY8SIAFBEGoQcCABQQA2AqQBIAEgAUEgajYCoAEMAQsgASABKAKoASgCAEECdEGAE2ooAgA2AqQBAkACQAJAAkAgASgCqAEoAgBBAnRBkBRqKAIAQQFrDgIAAQILIAEoAqgBKAIEIQJBkJkBKAIAIQRBACEAAkACQANAIAIgAEGgiAFqLQAARwRAQdcAIQMgAEEBaiIAQdcARw0BDAILCyAAIgMNAEGAiQEhAgwBC0GAiQEhAANAIAAtAAAhBSAAQQFqIgIhACAFDQAgAiEAIANBAWsiAw0ACwsgBCgCFBogASACNgKgAQwCCyMAQRBrIgAgASgCqAEoAgQ2AgwgAUEAIAAoAgxrQQJ0QajZAGooAgA2AqABDAELIAFBADYCoAELCwJAIAEoAqABRQRAIAEgASgCpAE2AqwBDAELIAEgASgCoAEQKwJ/IAEoAqQBBEAgASgCpAEQK0ECagwBC0EAC2pBAWoQGCIANgIcIABFBEAgAUG4EygCADYCrAEMAQsgASgCHCEAAn8gASgCpAEEQCABKAKkAQwBC0H6EgshA0HfEkH6EiABKAKkARshAiABIAEoAqABNgIIIAEgAjYCBCABIAM2AgAgAEG+CiABEHAgASgCqAEgASgCHDYCCCABIAEoAhw2AqwBCyABKAKsASEAIAFBsAFqJAAgAAszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQGRogACAAKAIUIAFqNgIUIAILjwUCBn4BfyABIAEoAgBBD2pBcHEiAUEQajYCACAAAnwgASkDACEDIAEpAwghBiMAQSBrIggkAAJAIAZC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBkIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAiFQgBSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBkIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIAQZH3AEkNACADIQIgBkL///////8/g0KAgICAgIDAAIQiBSEHAkAgAEGB9wBrIgFBwABxBEAgAiABQUBqrYYhB0IAIQIMAQsgAUUNACAHIAGtIgSGIAJBwAAgAWutiIQhByACIASGIQILIAggAjcDECAIIAc3AxgCQEGB+AAgAGsiAEHAAHEEQCAFIABBQGqtiCEDQgAhBQwBCyAARQ0AIAVBwAAgAGuthiADIACtIgKIhCEDIAUgAoghBQsgCCADNwMAIAggBTcDCCAIKQMIQgSGIAgpAwAiA0I8iIQhAiAIKQMQIAgpAxiEQgBSrSADQv//////////D4OEIgNCgYCAgICAgIAIWgRAIAJCAXwhAgwBCyADQoCAgICAgICACIVCAFINACACQgGDIAJ8IQILIAhBIGokACACIAZCgICAgICAgICAf4OEvws5AwALrRcDEn8CfgF8IwBBsARrIgkkACAJQQA2AiwCQCABvSIYQn9XBEBBASESQa4IIRMgAZoiAb0hGAwBCyAEQYAQcQRAQQEhEkGxCCETDAELQbQIQa8IIARBAXEiEhshEyASRSEXCwJAIBhCgICAgICAgPj/AINCgICAgICAgPj/AFEEQCAAQSAgAiASQQNqIg0gBEH//3txECYgACATIBIQIiAAQeQLQbUSIAVBIHEiAxtBjw1BuRIgAxsgASABYhtBAxAiDAELIAlBEGohEAJAAn8CQCABIAlBLGoQqQEiASABoCIBRAAAAAAAAAAAYgRAIAkgCSgCLCIGQQFrNgIsIAVBIHIiFEHhAEcNAQwDCyAFQSByIhRB4QBGDQIgCSgCLCELQQYgAyADQQBIGwwBCyAJIAZBHWsiCzYCLCABRAAAAAAAALBBoiEBQQYgAyADQQBIGwshCiAJQTBqIAlB0AJqIAtBAEgbIg4hBwNAIAcCfyABRAAAAAAAAPBBYyABRAAAAAAAAAAAZnEEQCABqwwBC0EACyIDNgIAIAdBBGohByABIAO4oUQA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HCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCGCABKAIUSQtBAXENAAsgASgCKEGCAiABKAIUIAEoAhhrazYCYCABKAIoKAJgIAEoAigoAnRLBEAgASgCKCABKAIoKAJ0NgJgCwsLAkAgASgCKCgCYEEDTwRAIAEgASgCKCgCYEEDazoAEyABQQE7ARAgASgCKCICKAKkLSACKAKgLUEBdGogAS8BEDsBACABLQATIQMgASgCKCICKAKYLSEEIAIgAigCoC0iAkEBajYCoC0gAiAEaiADOgAAIAEgAS8BEEEBazsBECABKAIoIAEtABNB0N0Aai0AAEECdGpBmAlqIgIgAi8BAEEBajsBACABKAIoQYgTagJ/IAEvARBBgAJJBEAgAS8BEC0A0FkMAQsgAS8BEEEHdkGAAmotANBZC0ECdGoiAiACLwEAQQFqOwEAIAEgASgCKCgCoC0gASgCKCgCnC1BAWtGNgIgIAEoAigiAiACKAJ0IAEoAigoAmBrNgJ0IAEoAigiAiABKAIoKAJgIAIoAmxqNgJsIAEoAihBADYCYAwBCyABIAEoAigiAigCOCACKAJsai0AADoADyABKAIoIgIoAqQtIAIoAqAtQQF0akEAOwEAIAEtAA8hAyABKAIoIgIoApgtIQQgAiACKAKgLSICQQFqNgKgLSACIARqIAM6AAAgASgCKCABLQAPQQJ0aiICIAIvAZQBQQFqOwGUASABIAEoAigoAqAtIAEoAigoApwtQQFrRjYCICABKAIoIgIgAigCdEEBazYCdCABKAIoIgIgAigCbEEBajYCbAsgASgCIARAIAEoAigCfyABKAIoKAJcQQBOBEAgASgCKCgCOCABKAIoKAJcagwBC0EACyABKAIoKAJsIAEoAigoAlxrQQAQKCABKAIoIAEoAigoAmw2AlwgASgCKCgCABAcIAEoAigo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QCABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiQgASgCLCABKAIccUECdGooAQA2ARACQAJAA0AgASABLQARNgIMIAEgASgCLCABKAIMdjYCLCABIAEoAiggASgCDGs2AiggASABLQAQNgIMIAEoAgxFBEAgAS8BEiECIAEgASgCSCIDQQFqNgJIIAMgAjoAAAwCCyABKAIMQRBxBEAgASABLwESNgIIIAEgASgCDEEPcTYCDCABKAIMBEAgASgCKCABKAIMSQRAIAEgASgCUCICQQFqNgJQIAEgASgCLCACLQAAIAEoAih0ajYCLCABIAEoAihBCGo2AigLIAEgASgCCCABKAIsQQEgASgCDHRBAWtxajYCCCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoCyABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiAgASgCLCABKAIYcUECdGooAQA2ARACQANAIAEgAS0AETYCDCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgAS0AEDYCDCABKAIMQRBxBEAgASABLwESNgIEIAEgASgCDEEPcTYCDCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKAsLIAEgASgCBCABKAIsQQEgASgCDHRBAWtxajYCBCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgASgCSCABKAJEazYCDAJAIAEoAgQgASgCDEsEQCABIAEoAgQgASgCDGs2AgwgASgCDCABKAI4SwRAIAEoAlQoAsQ3BEAgASgCXEHdDDYCGCABKAJUQdH+ADYCBAwKCwsgASABKAIwNgIAAkAgASgCNEUEQCABIAEoAgAgASgCPCABKAIMa2o2AgAgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAkggASgCBGs2AgALDAELAkAgASgCNCABKAIMSQRAIAEgASgCACABKAI8IAEoAjRqIAEoAgxrajYCACABIAEoAgwgASgCNGs2AgwgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAjA2AgAgASgCNCABKAIISQRAIAEgASgCNDYCDCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsMAQsgASABKAIAIAEoAjQgASgCDGtqNgIAIAEoAgwgASgCCEkEQCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsLA0AgASgCCEECSwRAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCCEEDazYCCAwBCwsMAQsgASABKAJIIAEoAgRrNgIAA0AgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgi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ZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AbmFuAC9kZXYvdXJhbmRvbQBpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2sAaW5jb3JyZWN0IGhlYWRlciBjaGVjawBpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrAGluY29ycmVjdCBkYXRhIGNoZWNrAGludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrAGhlYWRlciBjcmMgbWlzbWF0Y2gAaW5mAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRlZABPcGVyYXRpb24gbm90IHN1cHBvcnRlZABFbmNyeXB0aW9uIG1ldGhvZCBub3Qgc3VwcG9ydGVkAENvbXByZXNzaW9uIG1ldGhvZCBub3Qgc3VwcG9ydGVkAEVudHJ5IGhhcyBiZWVuIGRlbGV0ZWQAQ29udGFpbmluZyB6aXAgYXJjaGl2ZSB3YXMgY2xvc2VkAENsb3NpbmcgemlwIGFyY2hpdmUgZmFpbGVkAFJlbmFtaW5nIHRlbXBvcmFyeSBmaWxlIGZhaWxlZABFbnRyeSBoYXMgYmVlbiBjaGFuZ2VkAE5vIHBhc3N3b3JkIHByb3ZpZGVkAFdyb25nIHBhc3N3b3JkIHByb3ZpZGVkAFVua25vd24gZXJyb3IgJWQAcmIAcitiAHJ3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CADcAAgAPAAIALwACAB8AAgA/AAIAAIACACCAAgAQgAIAMIACAAiAAgAogAIAGIACADiAAgAEgAIAJIACABSAAgA0gAIADIACACyAAgAcgAIAPIACAAKAAgAigAIAEoACADKAAgAKgAIAKoACABqAAgA6gAIABoACACaAAgAWgAIANoACAA6AAgAugAIAHoACAD6AAgABgAIAIYACABGAAgAxgAIACYACACmAAgAZgAIAOYACAAWAAgAlgAIAFYACADWAAgANgAIALYACAB2AAgA9gAIAA4ACACOAAgATgAIAM4ACAAuAAgArgAIAG4ACADuAAgAHgAIAJ4ACABeAAgA3gAIAD4ACAC+AAgAfgAIAP4ACAABAAgAgQAIAEEACADBAAgAIQAIAKEACABhAAgA4QAIABEACACRAAgAUQAIANEACAAxAAgAsQAIAHEACADxAAgACQAIAIkACABJAAgAyQAIACkACACpAAgAaQAIAOkACAAZAAgAmQAIAFkACADZAAgAOQAIALkACAB5AAgA+QAIAAUACACFAAgARQAIAMUACAAlAAgApQAIAGUACADlAAgAFQAIAJUACABVAAgA1QAIADUACAC1AAgAdQAIAPUACAANAAgAjQAIAE0ACADNAAgALQAIAK0ACABtAAgA7QAIAB0ACACdAAgAXQAIAN0ACAA9AAgAvQAIAH0ACAD9AAgAEwAJABMBCQCTAAkAkwEJAFMACQBTAQkA0wAJANMBCQAzAAkAMwEJALMACQCzAQkAcwAJAHMBCQDzAAkA8wEJAAsACQALAQkAiwAJAIsBCQBLAAkASwEJAMsACQDLAQkAKwAJACsBCQCrAAkAqwEJAGsACQBrAQkA6wAJAOsBCQAbAAkAGwEJAJsACQCbAQkAWwAJAFsBCQDbAAkA2wEJADsACQA7AQkAuwAJALsBCQB7AAkAewEJAPsACQD7AQkABwAJAAcBCQCHAAkAhwEJAEcACQBHAQkAxwAJAMcBCQAnAAkAJwEJAKcACQCnAQkAZwAJAGcBCQDnAAkA5wEJABcACQAXAQkAlwAJAJcBCQBXAAkAVwEJANcACQDXAQkANwAJADcBCQC3AAkAtwEJAHcACQB3AQkA9wAJAPcBCQAPAAkADwEJAI8ACQCPAQkATwAJAE8BCQDPAAkAzwEJAC8ACQAvAQkArwAJAK8BCQBvAAkAbwEJAO8ACQDvAQkAHwAJAB8BCQCfAAkAnwEJAF8ACQBfAQkA3wAJAN8BCQA/AAkAPwEJAL8ACQC/AQkAfwAJAH8BCQD/AAkA/wEJAAAABwBAAAcAIAAHAGAABwAQAAcAUAAHADAABwBwAAcACAAHAEgABwAoAAcAaAAHABgABwBYAAcAOAAHAHgABwAEAAcARAAHACQABwBkAAcAFAAHAFQABwA0AAcAdAAHAAMACACDAAgAQwAIAMMACAAjAAgAowAIAGMACADjAAgAAAAFABAABQAIAAUAGAAFAAQABQAUAAUADAAFABwABQACAAUAEgAFAAoABQAaAAUABgAFABYABQAOAAUAHgAFAAEABQARAAUACQAFABkABQAFAAUAFQAFAA0ABQAdAAUAAwAFABMABQALAAUAGwAFAAcABQAXAAUAQbDqAAtNAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAUAAAAFAAAABQAAAAUAQaDrAAtlAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAIAAAACAAAAAkAAAAJAAAACgAAAAoAAAALAAAACwAAAAwAAAAMAAAADQAAAA0AQdDsAAsjAgAAAAMAAAAHAAAAAAAAABAREgAIBwkGCgULBAwDDQIOAQ8AQYTtAAtpAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAEGE7gALegEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAMS4yLjExAEGI7wALbQcAAAAEAAQACAAEAAgAAAAEAAUAEAAIAAgAAAAEAAYAIAAgAAgAAAAEAAQAEAAQAAkAAAAIABAAIAAgAAkAAAAIABAAgACAAAkAAAAIACAAgAAAAQkAAAAgAIAAAgEABAkAAAAgAAIBAgEAEAkAQYDwAAulAgMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAATQDKAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEGw8gALwRFgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnAABAHCgAACGAAAAggAAAJoAAACAAAAAiAAAAIQAAACeAAEAcGAAAIWAAACBgAAAmQABMHOwAACHgAAAg4AAAJ0AARBxEAAAhoAAAIKAAACbAAAAgIAAAIiAAACEgAAAnwABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACcgAEQcNAAAIZAAACCQAAAmoAAAIBAAACIQAAAhEAAAJ6AAQBwgAAAhcAAAIHAAACZgAFAdTAAAIfAAACDwAAAnYABIHFwAACGwAAAgsAAAJuAAACAwAAAiMAAAITAAACfgAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxAARBwsAAAhiAAAIIgAACaQAAAgCAAAIggAACEIAAAnkABAHBwAACFoAAAgaAAAJlAAUB0MAAAh6AAAIOgAACdQAEgcTAAAIagAACCoAAAm0AAAICgAACIoAAAhKAAAJ9AAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnMABEHDwAACGYAAAgmAAAJrAAACAYAAAiGAAAIRgAACewAEAcJAAAIXgAACB4AAAmcABQHYwAACH4AAAg+AAAJ3AASBxsAAAhuAAAILgAACbwAAAgOAAAIjgAACE4AAAn8AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcIAEAcKAAAIYQAACCEAAAmiAAAIAQAACIEAAAhBAAAJ4gAQBwYAAAhZAAAIGQAACZIAEwc7AAAIeQAACDkAAAnSABEHEQAACGkAAAgpAAAJsgAACAkAAAiJAAAISQAACfIAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJygARBw0AAAhlAAAIJQAACaoAAAgFAAAIhQAACEUAAAnqABAHCAAACF0AAAgdAAAJmgAUB1MAAAh9AAAIPQAACdoAEgcXAAAIbQAACC0AAAm6AAAIDQAACI0AAAhNAAAJ+gAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnGABEHCwAACGMAAAgjAAAJpgAACAMAAAiDAAAIQwAACeYAEAcHAAAIWwAACBsAAAmWABQHQwAACHsAAAg7AAAJ1gASBxMAAAhrAAAIKwAACbYAAAgLAAAIiwAACEsAAAn2ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc4AEQcPAAAIZwAACCcAAAmuAAAIBwAACIcAAAhHAAAJ7gAQBwkAAAhfAAAIHwAACZ4AFAdjAAAIfwAACD8AAAneABIHGwAACG8AAAgvAAAJvgAACA8AAAiPAAAITwAACf4AYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwQAQBwoAAAhgAAAIIAAACaEAAAgAAAAIgAAACEAAAAnhABAHBgAACFgAAAgYAAAJkQATBzsAAAh4AAAIOAAACdEAEQcRAAAIaAAACCgAAAmxAAAICAAACIgAAAhIAAAJ8QAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnJABEHDQAACGQAAAgkAAAJqQAACAQAAAiEAAAIRAAACekAEAcIAAAIXAAACBwAAAmZABQHUwAACHwAAAg8AAAJ2QASBxcAAAhsAAAILAAACbkAAAgMAAAIjAAACEwAAAn5ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcUAEQcLAAAIYgAACCIAAAmlAAAIAgAACIIAAAhCAAAJ5QAQBwcAAAhaAAAIGgAACZUAFAdDAAAIegAACDoAAAnVABIHEwAACGoAAAgqAAAJtQAACAoAAAiKAAAISgAACfUAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzQARBw8AAAhmAAAIJgAACa0AAAgGAAAIhgAACEYAAAntABAHCQAACF4AAAgeAAAJnQAUB2MAAAh+AAAIPgAACd0AEgcbAAAIbgAACC4AAAm9AAAIDgAACI4AAAhOAAAJ/QBgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnDABAHCgAACGEAAAghAAAJowAACAEAAAiBAAAIQQAACeMAEAcGAAAIWQAACBkAAAmTABMHOwAACHkAAAg5AAAJ0wARBxEAAAhpAAAIKQAACbMAAAgJAAAIiQAACEkAAAnzABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcsAEQcNAAAIZQAACCUAAAmrAAAIBQAACIUAAAhFAAAJ6wAQBwgAAAhdAAAIHQAACZsAFAdTAAAIfQAACD0AAAnbABIHFwAACG0AAAgtAAAJuwAACA0AAAiNAAAITQAACfsAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxwARBwsAAAhjAAAIIwAACacAAAgDAAAIgwAACEMAAAnnABAHBwAACFsAAAgbAAAJlwAUB0MAAAh7AAAIOwAACdcAEgcTAAAIawAACCsAAAm3AAAICwAACIsAAAhLAAAJ9wAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnPABEHDwAACGcAAAgnAAAJrwAACAcAAAiHAAAIRwAACe8AEAcJAAAIXwAACB8AAAmfABQHYwAACH8AAAg/AAAJ3wASBxsAAAhvAAAILwAACb8AAAgPAAAIjwAACE8AAAn/ABAFAQAXBQEBEwURABsFARARBQUAGQUBBBUFQQAdBQFAEAUDABgFAQIUBSEAHAUBIBIFCQAaBQEIFgWBAEAFAAAQBQIAFwWBARMFGQAbBQEYEQUHABkFAQYVBWEAHQUBYBAFBAAYBQEDFAUxABwFATASBQ0AGgUBDBYFwQBABQAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAEACQsLAAAJBgsAAAsABhEAAAAREREAQYGEAQshCwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAEG7hAELAQwAQceEAQsVDAAAAAAMAAAAAAkMAAAAAAAMAAAMAEH1hAELAQ4AQYGFAQsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEGvhQELARAAQbuFAQseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEHyhQELDhIAAAASEhIAAAAAAAAJAEGjhgELAQsAQa+GAQsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHdhgELAQwAQemGAQsnDAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGAEG0hwELARkAQduHAQsF//////8AQaCIAQtXGRJEOwI/LEcUPTMwChsGRktFNw9JDo4XA0AdPGkrNh9KLRwBICUpIQgMFRYiLhA4Pgs0MRhkdHV2L0EJfzkRI0MyQomKiwUEJignDSoeNYwHGkiTE5SVAEGAiQELig5JbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgBBkJcBC1JQUFAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAAAEAAAAIAAAAlEsAALRLAEGQmQELAgxQAEHImQELCR8AAADkTAAAAwBB5JkBC4wBLfRRWM+MscBG9rXLKTEDxwRbcDC0Xf0geH+LmthZKVBoSImrp1YDbP+3zYg/1He0K6WjcPG65Kj8QYP92W/hinovLXSWBx8NCV4Ddixw90ClLKdvV0GoqnTfoFhkA0rHxDxTrq9fGAQVseNtKIarDKS/Q/DpUIE5VxZSN/////////////////////8=";y4(Rp)||(Rp=dxe(Rp));function Kxe(t){try{if(t==Rp&&lP)return new Uint8Array(lP);var e=s4(t);if(e)return e;if(aP)return aP(t);throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"}catch(r){Gr(r)}}function Uxe(t,e){var r,i,n;try{n=Kxe(t),i=new WebAssembly.Module(n),r=new WebAssembly.Instance(i,e)}catch(o){var s=o.toString();throw Di("failed to compile wasm module: "+s),(s.includes("imported Memory")||s.includes("memory import"))&&Di("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."),o}return[r,i]}function Gxe(){var t={a:Hxe};function e(n,s){var o=n.exports;oe.asm=o,ew=oe.asm.u,p4(ew.buffer),fP=oe.asm.za,Mxe(oe.asm.v),dP("wasm-instantiate")}if(E4("wasm-instantiate"),oe.instantiateWasm)try{var r=oe.instantiateWasm(t,e);return r}catch(n){return Di("Module.instantiateWasm callback failed with error: "+n),!1}var i=Uxe(Rp,t);return e(i[0]),oe.asm}var ai,ya;function hP(t){for(;t.length>0;){var e=t.shift();if(typeof e=="function"){e(oe);continue}var r=e.func;typeof r=="number"?e.arg===void 0?fP.get(r)():fP.get(r)(e.arg):r(e.arg===void 0?null:e.arg)}}function iw(t,e){var r=new Date(_e[t>>2]*1e3);_e[e>>2]=r.getUTCSeconds(),_e[e+4>>2]=r.getUTCMinutes(),_e[e+8>>2]=r.getUTCHours(),_e[e+12>>2]=r.getUTCDate(),_e[e+16>>2]=r.getUTCMonth(),_e[e+20>>2]=r.getUTCFullYear()-1900,_e[e+24>>2]=r.getUTCDay(),_e[e+36>>2]=0,_e[e+32>>2]=0;var i=Date.UTC(r.getUTCFullYear(),0,1,0,0,0,0),n=(r.getTime()-i)/(1e3*60*60*24)|0;return _e[e+28>>2]=n,iw.GMTString||(iw.GMTString=uP("GMT")),_e[e+40>>2]=iw.GMTString,e}function jxe(t,e){return iw(t,e)}var yt={splitPath:function(t){var e=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return e.exec(t).slice(1)},normalizeArray:function(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];n==="."?t.splice(i,1):n===".."?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r;r--)t.unshift("..");return t},normalize:function(t){var e=t.charAt(0)==="/",r=t.substr(-1)==="/";return t=yt.normalizeArray(t.split("/").filter(function(i){return!!i}),!e).join("/"),!t&&!e&&(t="."),t&&r&&(t+="/"),(e?"/":"")+t},dirname:function(t){var e=yt.splitPath(t),r=e[0],i=e[1];return!r&&!i?".":(i&&(i=i.substr(0,i.length-1)),r+i)},basename:function(t){if(t==="/")return"/";t=yt.normalize(t),t=t.replace(/\/$/,"");var e=t.lastIndexOf("/");return e===-1?t:t.substr(e+1)},extname:function(t){return yt.splitPath(t)[3]},join:function(){var t=Array.prototype.slice.call(arguments,0);return yt.normalize(t.join("/"))},join2:function(t,e){return yt.normalize(t+"/"+e)}};function Yxe(){if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function"){var t=new Uint8Array(1);return function(){return crypto.getRandomValues(t),t[0]}}else if(Wl)try{var e=require("crypto");return function(){return e.randomBytes(1)[0]}}catch(r){}return function(){Gr("randomDevice")}}var wa={resolve:function(){for(var t="",e=!1,r=arguments.length-1;r>=-1&&!e;r--){var i=r>=0?arguments[r]:y.cwd();if(typeof i!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!i)return"";t=i+"/"+t,e=i.charAt(0)==="/"}return t=yt.normalizeArray(t.split("/").filter(function(n){return!!n}),!e).join("/"),(e?"/":"")+t||"."},relative:function(t,e){t=wa.resolve(t).substr(1),e=wa.resolve(e).substr(1);function r(c){for(var u=0;u=0&&c[g]==="";g--);return u>g?[]:c.slice(u,g-u+1)}for(var i=r(t.split("/")),n=r(e.split("/")),s=Math.min(i.length,n.length),o=s,a=0;a0?e=i.slice(0,n).toString("utf-8"):e=null}else typeof window!="undefined"&&typeof window.prompt=="function"?(e=window.prompt("Input: "),e!==null&&(e+=` +`)):typeof readline=="function"&&(e=readline(),e!==null&&(e+=` +`));if(!e)return null;t.input=CP(e,!0)}return t.input.shift()},put_char:function(t,e){e===null||e===10?($y(Zu(t.output,0)),t.output=[]):e!=0&&t.output.push(e)},flush:function(t){t.output&&t.output.length>0&&($y(Zu(t.output,0)),t.output=[])}},default_tty1_ops:{put_char:function(t,e){e===null||e===10?(Di(Zu(t.output,0)),t.output=[]):e!=0&&t.output.push(e)},flush:function(t){t.output&&t.output.length>0&&(Di(Zu(t.output,0)),t.output=[])}}};function mP(t){for(var e=mxe(t,65536),r=h4(e);t=e)){var i=1024*1024;e=Math.max(e,r*(r>>0),r!=0&&(e=Math.max(e,256));var n=t.contents;t.contents=new Uint8Array(e),t.usedBytes>0&&t.contents.set(n.subarray(0,t.usedBytes),0)}},resizeFileStorage:function(t,e){if(t.usedBytes!=e)if(e==0)t.contents=null,t.usedBytes=0;else{var r=t.contents;t.contents=new Uint8Array(e),r&&t.contents.set(r.subarray(0,Math.min(e,t.usedBytes))),t.usedBytes=e}},node_ops:{getattr:function(t){var e={};return e.dev=y.isChrdev(t.mode)?t.id:1,e.ino=t.id,e.mode=t.mode,e.nlink=1,e.uid=0,e.gid=0,e.rdev=t.rdev,y.isDir(t.mode)?e.size=4096:y.isFile(t.mode)?e.size=t.usedBytes:y.isLink(t.mode)?e.size=t.link.length:e.size=0,e.atime=new Date(t.timestamp),e.mtime=new Date(t.timestamp),e.ctime=new Date(t.timestamp),e.blksize=4096,e.blocks=Math.ceil(e.size/e.blksize),e},setattr:function(t,e){e.mode!==void 0&&(t.mode=e.mode),e.timestamp!==void 0&&(t.timestamp=e.timestamp),e.size!==void 0&&pt.resizeFileStorage(t,e.size)},lookup:function(t,e){throw y.genericErrors[44]},mknod:function(t,e,r,i){return pt.createNode(t,e,r,i)},rename:function(t,e,r){if(y.isDir(t.mode)){var i;try{i=y.lookupNode(e,r)}catch(s){}if(i)for(var n in i.contents)throw new y.ErrnoError(55)}delete t.parent.contents[t.name],t.parent.timestamp=Date.now(),t.name=r,e.contents[r]=t,e.timestamp=t.parent.timestamp,t.parent=e},unlink:function(t,e){delete t.contents[e],t.timestamp=Date.now()},rmdir:function(t,e){var r=y.lookupNode(t,e);for(var i in r.contents)throw new y.ErrnoError(55);delete t.contents[e],t.timestamp=Date.now()},readdir:function(t){var e=[".",".."];for(var r in t.contents)!t.contents.hasOwnProperty(r)||e.push(r);return e},symlink:function(t,e,r){var i=pt.createNode(t,e,511|40960,0);return i.link=r,i},readlink:function(t){if(!y.isLink(t.mode))throw new y.ErrnoError(28);return t.link}},stream_ops:{read:function(t,e,r,i,n){var s=t.node.contents;if(n>=t.node.usedBytes)return 0;var o=Math.min(t.node.usedBytes-n,i);if(o>8&&s.subarray)e.set(s.subarray(n,n+o),r);else for(var a=0;a0||i+r>2)}catch(r){throw r.code?new y.ErrnoError(tt.convertNodeCode(r)):r}return e.mode},realPath:function(t){for(var e=[];t.parent!==t;)e.push(t.name),t=t.parent;return e.push(t.mount.opts.root),e.reverse(),yt.join.apply(null,e)},flagsForNode:function(t){t&=~2097152,t&=~2048,t&=~32768,t&=~524288;var e=0;for(var r in tt.flagsForNodeMap)t&r&&(e|=tt.flagsForNodeMap[r],t^=r);if(t)throw new y.ErrnoError(28);return e},node_ops:{getattr:function(t){var e=tt.realPath(t),r;try{r=ft.lstatSync(e)}catch(i){throw i.code?new y.ErrnoError(tt.convertNodeCode(i)):i}return tt.isWindows&&!r.blksize&&(r.blksize=4096),tt.isWindows&&!r.blocks&&(r.blocks=(r.size+r.blksize-1)/r.blksize|0),{dev:r.dev,ino:r.ino,mode:r.mode,nlink:r.nlink,uid:r.uid,gid:r.gid,rdev:r.rdev,size:r.size,atime:r.atime,mtime:r.mtime,ctime:r.ctime,blksize:r.blksize,blocks:r.blocks}},setattr:function(t,e){var r=tt.realPath(t);try{if(e.mode!==void 0&&(ft.chmodSync(r,e.mode),t.mode=e.mode),e.timestamp!==void 0){var i=new Date(e.timestamp);ft.utimesSync(r,i,i)}e.size!==void 0&&ft.truncateSync(r,e.size)}catch(n){throw n.code?new y.ErrnoError(tt.convertNodeCode(n)):n}},lookup:function(t,e){var r=yt.join2(tt.realPath(t),e),i=tt.getMode(r);return tt.createNode(t,e,i)},mknod:function(t,e,r,i){var n=tt.createNode(t,e,r,i),s=tt.realPath(n);try{y.isDir(n.mode)?ft.mkdirSync(s,n.mode):ft.writeFileSync(s,"",{mode:n.mode})}catch(o){throw o.code?new y.ErrnoError(tt.convertNodeCode(o)):o}return n},rename:function(t,e,r){var i=tt.realPath(t),n=yt.join2(tt.realPath(e),r);try{ft.renameSync(i,n)}catch(s){throw s.code?new y.ErrnoError(tt.convertNodeCode(s)):s}t.name=r},unlink:function(t,e){var r=yt.join2(tt.realPath(t),e);try{ft.unlinkSync(r)}catch(i){throw i.code?new y.ErrnoError(tt.convertNodeCode(i)):i}},rmdir:function(t,e){var r=yt.join2(tt.realPath(t),e);try{ft.rmdirSync(r)}catch(i){throw i.code?new y.ErrnoError(tt.convertNodeCode(i)):i}},readdir:function(t){var e=tt.realPath(t);try{return ft.readdirSync(e)}catch(r){throw r.code?new y.ErrnoError(tt.convertNodeCode(r)):r}},symlink:function(t,e,r){var i=yt.join2(tt.realPath(t),e);try{ft.symlinkSync(r,i)}catch(n){throw n.code?new y.ErrnoError(tt.convertNodeCode(n)):n}},readlink:function(t){var e=tt.realPath(t);try{return e=ft.readlinkSync(e),e=EP.relative(EP.resolve(t.mount.opts.root),e),e}catch(r){throw r.code?new y.ErrnoError(tt.convertNodeCode(r)):r}}},stream_ops:{open:function(t){var e=tt.realPath(t.node);try{y.isFile(t.node.mode)&&(t.nfd=ft.openSync(e,tt.flagsForNode(t.flags)))}catch(r){throw r.code?new y.ErrnoError(tt.convertNodeCode(r)):r}},close:function(t){try{y.isFile(t.node.mode)&&t.nfd&&ft.closeSync(t.nfd)}catch(e){throw e.code?new y.ErrnoError(tt.convertNodeCode(e)):e}},read:function(t,e,r,i,n){if(i===0)return 0;try{return ft.readSync(t.nfd,tt.bufferFrom(e.buffer),r,i,n)}catch(s){throw new y.ErrnoError(tt.convertNodeCode(s))}},write:function(t,e,r,i,n){try{return ft.writeSync(t.nfd,tt.bufferFrom(e.buffer),r,i,n)}catch(s){throw new y.ErrnoError(tt.convertNodeCode(s))}},llseek:function(t,e,r){var i=e;if(r===1)i+=t.position;else if(r===2&&y.isFile(t.node.mode))try{var n=ft.fstatSync(t.nfd);i+=n.size}catch(s){throw new y.ErrnoError(tt.convertNodeCode(s))}if(i<0)throw new y.ErrnoError(28);return i},mmap:function(t,e,r,i,n,s){if(e!==0)throw new y.ErrnoError(28);if(!y.isFile(t.node.mode))throw new y.ErrnoError(43);var o=mP(r);return tt.stream_ops.read(t,Zi,o,r,i),{ptr:o,allocated:!0}},msync:function(t,e,r,i,n){if(!y.isFile(t.node.mode))throw new y.ErrnoError(43);if(n&2)return 0;var s=tt.stream_ops.write(t,e,0,i,r,!1);return 0}}},w4={lookupPath:function(t){return{path:t,node:{mode:tt.getMode(t)}}},createStandardStreams:function(){y.streams[0]={fd:0,nfd:0,position:0,path:"",flags:0,tty:!0,seekable:!1};for(var t=1;t<3;t++)y.streams[t]={fd:t,nfd:t,position:0,path:"",flags:577,tty:!0,seekable:!1}},cwd:function(){return process.cwd()},chdir:function(){process.chdir.apply(void 0,arguments)},mknod:function(t,e){y.isDir(t)?ft.mkdirSync(t,e):ft.writeFileSync(t,"",{mode:e})},mkdir:function(){ft.mkdirSync.apply(void 0,arguments)},symlink:function(){ft.symlinkSync.apply(void 0,arguments)},rename:function(){ft.renameSync.apply(void 0,arguments)},rmdir:function(){ft.rmdirSync.apply(void 0,arguments)},readdir:function(){ft.readdirSync.apply(void 0,arguments)},unlink:function(){ft.unlinkSync.apply(void 0,arguments)},readlink:function(){return ft.readlinkSync.apply(void 0,arguments)},stat:function(){return ft.statSync.apply(void 0,arguments)},lstat:function(){return ft.lstatSync.apply(void 0,arguments)},chmod:function(){ft.chmodSync.apply(void 0,arguments)},fchmod:function(){ft.fchmodSync.apply(void 0,arguments)},chown:function(){ft.chownSync.apply(void 0,arguments)},fchown:function(){ft.fchownSync.apply(void 0,arguments)},truncate:function(){ft.truncateSync.apply(void 0,arguments)},ftruncate:function(t,e){if(e<0)throw new y.ErrnoError(28);ft.ftruncateSync.apply(void 0,arguments)},utime:function(){ft.utimesSync.apply(void 0,arguments)},open:function(t,e,r,i){typeof e=="string"&&(e=Vl.modeStringToFlags(e));var n=ft.openSync(t,tt.flagsForNode(e),r),s=i!=null?i:y.nextfd(n),o={fd:s,nfd:n,position:0,path:t,flags:e,seekable:!0};return y.streams[s]=o,o},close:function(t){t.stream_ops||ft.closeSync(t.nfd),y.closeStream(t.fd)},llseek:function(t,e,r){if(t.stream_ops)return Vl.llseek(t,e,r);var i=e;if(r===1)i+=t.position;else if(r===2)i+=ft.fstatSync(t.nfd).size;else if(r!==0)throw new y.ErrnoError(eg.EINVAL);if(i<0)throw new y.ErrnoError(eg.EINVAL);return t.position=i,i},read:function(t,e,r,i,n){if(t.stream_ops)return Vl.read(t,e,r,i,n);var s=typeof n!="undefined";!s&&t.seekable&&(n=t.position);var o=ft.readSync(t.nfd,tt.bufferFrom(e.buffer),r,i,n);return s||(t.position+=o),o},write:function(t,e,r,i,n){if(t.stream_ops)return Vl.write(t,e,r,i,n);t.flags&+"1024"&&y.llseek(t,0,+"2");var s=typeof n!="undefined";!s&&t.seekable&&(n=t.position);var o=ft.writeSync(t.nfd,tt.bufferFrom(e.buffer),r,i,n);return s||(t.position+=o),o},allocate:function(){throw new y.ErrnoError(eg.EOPNOTSUPP)},mmap:function(t,e,r,i,n,s){if(t.stream_ops)return Vl.mmap(t,e,r,i,n,s);if(e!==0)throw new y.ErrnoError(28);var o=mP(r);return y.read(t,Zi,o,r,i),{ptr:o,allocated:!0}},msync:function(t,e,r,i,n){return t.stream_ops?Vl.msync(t,e,r,i,n):(n&2||y.write(t,e,0,i,r),0)},munmap:function(){return 0},ioctl:function(){throw new y.ErrnoError(eg.ENOTTY)}},y={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(t,e){if(t=wa.resolve(y.cwd(),t),e=e||{},!t)return{path:"",node:null};var r={follow_mount:!0,recurse_count:0};for(var i in r)e[i]===void 0&&(e[i]=r[i]);if(e.recurse_count>8)throw new y.ErrnoError(32);for(var n=yt.normalizeArray(t.split("/").filter(function(f){return!!f}),!1),s=y.root,o="/",a=0;a40)throw new y.ErrnoError(32)}}return{path:o,node:s}},getPath:function(t){for(var e;;){if(y.isRoot(t)){var r=t.mount.mountpoint;return e?r[r.length-1]!=="/"?r+"/"+e:r+e:r}e=e?t.name+"/"+e:t.name,t=t.parent}},hashName:function(t,e){for(var r=0,i=0;i>>0)%y.nameTable.length},hashAddNode:function(t){var e=y.hashName(t.parent.id,t.name);t.name_next=y.nameTable[e],y.nameTable[e]=t},hashRemoveNode:function(t){var e=y.hashName(t.parent.id,t.name);if(y.nameTable[e]===t)y.nameTable[e]=t.name_next;else for(var r=y.nameTable[e];r;){if(r.name_next===t){r.name_next=t.name_next;break}r=r.name_next}},lookupNode:function(t,e){var r=y.mayLookup(t);if(r)throw new y.ErrnoError(r,t);for(var i=y.hashName(t.id,e),n=y.nameTable[i];n;n=n.name_next){var s=n.name;if(n.parent.id===t.id&&s===e)return n}return y.lookup(t,e)},createNode:function(t,e,r,i){var n=new y.FSNode(t,e,r,i);return y.hashAddNode(n),n},destroyNode:function(t){y.hashRemoveNode(t)},isRoot:function(t){return t===t.parent},isMountpoint:function(t){return!!t.mounted},isFile:function(t){return(t&61440)==32768},isDir:function(t){return(t&61440)==16384},isLink:function(t){return(t&61440)==40960},isChrdev:function(t){return(t&61440)==8192},isBlkdev:function(t){return(t&61440)==24576},isFIFO:function(t){return(t&61440)==4096},isSocket:function(t){return(t&49152)==49152},flagModes:{r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},modeStringToFlags:function(t){var e=y.flagModes[t];if(typeof e=="undefined")throw new Error("Unknown file open mode: "+t);return e},flagsToPermissionString:function(t){var e=["r","w","rw"][t&3];return t&512&&(e+="w"),e},nodePermissions:function(t,e){return y.ignorePermissions?0:e.includes("r")&&!(t.mode&292)||e.includes("w")&&!(t.mode&146)||e.includes("x")&&!(t.mode&73)?2:0},mayLookup:function(t){var e=y.nodePermissions(t,"x");return e||(t.node_ops.lookup?0:2)},mayCreate:function(t,e){try{var r=y.lookupNode(t,e);return 20}catch(i){}return y.nodePermissions(t,"wx")},mayDelete:function(t,e,r){var i;try{i=y.lookupNode(t,e)}catch(s){return s.errno}var n=y.nodePermissions(t,"wx");if(n)return n;if(r){if(!y.isDir(i.mode))return 54;if(y.isRoot(i)||y.getPath(i)===y.cwd())return 10}else if(y.isDir(i.mode))return 31;return 0},mayOpen:function(t,e){return t?y.isLink(t.mode)?32:y.isDir(t.mode)&&(y.flagsToPermissionString(e)!=="r"||e&512)?31:y.nodePermissions(t,y.flagsToPermissionString(e)):44},MAX_OPEN_FDS:4096,nextfd:function(t,e){t=t||0,e=e||y.MAX_OPEN_FDS;for(var r=t;r<=e;r++)if(!y.streams[r])return r;throw new y.ErrnoError(33)},getStream:function(t){return y.streams[t]},createStream:function(t,e,r){y.FSStream||(y.FSStream=function(){},y.FSStream.prototype={object:{get:function(){return this.node},set:function(o){this.node=o}},isRead:{get:function(){return(this.flags&2097155)!=1}},isWrite:{get:function(){return(this.flags&2097155)!=0}},isAppend:{get:function(){return this.flags&1024}}});var i=new y.FSStream;for(var n in t)i[n]=t[n];t=i;var s=y.nextfd(e,r);return t.fd=s,y.streams[s]=t,t},closeStream:function(t){y.streams[t]=null},chrdev_stream_ops:{open:function(t){var e=y.getDevice(t.node.rdev);t.stream_ops=e.stream_ops,t.stream_ops.open&&t.stream_ops.open(t)},llseek:function(){throw new y.ErrnoError(70)}},major:function(t){return t>>8},minor:function(t){return t&255},makedev:function(t,e){return t<<8|e},registerDevice:function(t,e){y.devices[t]={stream_ops:e}},getDevice:function(t){return y.devices[t]},getMounts:function(t){for(var e=[],r=[t];r.length;){var i=r.pop();e.push(i),r.push.apply(r,i.mounts)}return e},syncfs:function(t,e){typeof t=="function"&&(e=t,t=!1),y.syncFSRequests++,y.syncFSRequests>1&&Di("warning: "+y.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work");var r=y.getMounts(y.root.mount),i=0;function n(o){return y.syncFSRequests--,e(o)}function s(o){if(o)return s.errored?void 0:(s.errored=!0,n(o));++i>=r.length&&n(null)}r.forEach(function(o){if(!o.type.syncfs)return s(null);o.type.syncfs(o,t,s)})},mount:function(t,e,r){var i=r==="/",n=!r,s;if(i&&y.root)throw new y.ErrnoError(10);if(!i&&!n){var o=y.lookupPath(r,{follow_mount:!1});if(r=o.path,s=o.node,y.isMountpoint(s))throw new y.ErrnoError(10);if(!y.isDir(s.mode))throw new y.ErrnoError(54)}var a={type:t,opts:e,mountpoint:r,mounts:[]},l=t.mount(a);return l.mount=a,a.root=l,i?y.root=l:s&&(s.mounted=a,s.mount&&s.mount.mounts.push(a)),l},unmount:function(t){var e=y.lookupPath(t,{follow_mount:!1});if(!y.isMountpoint(e.node))throw new y.ErrnoError(28);var r=e.node,i=r.mounted,n=y.getMounts(i);Object.keys(y.nameTable).forEach(function(o){for(var a=y.nameTable[o];a;){var l=a.name_next;n.includes(a.mount)&&y.destroyNode(a),a=l}}),r.mounted=null;var s=r.mount.mounts.indexOf(i);r.mount.mounts.splice(s,1)},lookup:function(t,e){return t.node_ops.lookup(t,e)},mknod:function(t,e,r){var i=y.lookupPath(t,{parent:!0}),n=i.node,s=yt.basename(t);if(!s||s==="."||s==="..")throw new y.ErrnoError(28);var o=y.mayCreate(n,s);if(o)throw new y.ErrnoError(o);if(!n.node_ops.mknod)throw new y.ErrnoError(63);return n.node_ops.mknod(n,s,e,r)},create:function(t,e){return e=e!==void 0?e:438,e&=4095,e|=32768,y.mknod(t,e,0)},mkdir:function(t,e){return e=e!==void 0?e:511,e&=511|512,e|=16384,y.mknod(t,e,0)},mkdirTree:function(t,e){for(var r=t.split("/"),i="",n=0;nthis.length-1||f<0)){var h=f%this.chunkSize,p=f/this.chunkSize|0;return this.getter(p)[h]}},s.prototype.setDataGetter=function(f){this.getter=f},s.prototype.cacheLength=function(){var f=new XMLHttpRequest;if(f.open("HEAD",r,!1),f.send(null),!(f.status>=200&&f.status<300||f.status===304))throw new Error("Couldn't load "+r+". Status: "+f.status);var h=Number(f.getResponseHeader("Content-length")),p,d=(p=f.getResponseHeader("Accept-Ranges"))&&p==="bytes",m=(p=f.getResponseHeader("Content-Encoding"))&&p==="gzip",I=1024*1024;d||(I=h);var B=function(R,H){if(R>H)throw new Error("invalid range ("+R+", "+H+") or no bytes requested!");if(H>h-1)throw new Error("only "+h+" bytes available! programmer error!");var L=new XMLHttpRequest;if(L.open("GET",r,!1),h!==I&&L.setRequestHeader("Range","bytes="+R+"-"+H),typeof Uint8Array!="undefined"&&(L.responseType="arraybuffer"),L.overrideMimeType&&L.overrideMimeType("text/plain; charset=x-user-defined"),L.send(null),!(L.status>=200&&L.status<300||L.status===304))throw new Error("Couldn't load "+r+". Status: "+L.status);return L.response!==void 0?new Uint8Array(L.response||[]):CP(L.responseText||"",!0)},b=this;b.setDataGetter(function(R){var H=R*I,L=(R+1)*I-1;if(L=Math.min(L,h-1),typeof b.chunks[R]=="undefined"&&(b.chunks[R]=B(H,L)),typeof b.chunks[R]=="undefined")throw new Error("doXHR failed!");return b.chunks[R]}),(m||!h)&&(I=h=1,h=this.getter(0).length,I=h,$y("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=h,this._chunkSize=I,this.lengthKnown=!0},typeof XMLHttpRequest!="undefined"){if(!i4)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var o=new s;Object.defineProperties(o,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var a={isDevice:!1,contents:o}}else var a={isDevice:!1,url:r};var l=y.createFile(t,e,a,i,n);a.contents?l.contents=a.contents:a.url&&(l.contents=null,l.url=a.url),Object.defineProperties(l,{usedBytes:{get:function(){return this.contents.length}}});var c={},u=Object.keys(l.stream_ops);return u.forEach(function(g){var f=l.stream_ops[g];c[g]=function(){return y.forceLoadFile(l),f.apply(null,arguments)}}),c.read=function(f,h,p,d,m){y.forceLoadFile(l);var I=f.node.contents;if(m>=I.length)return 0;var B=Math.min(I.length-m,d);if(I.slice)for(var b=0;b>2]=i.dev,_e[r+4>>2]=0,_e[r+8>>2]=i.ino,_e[r+12>>2]=i.mode,_e[r+16>>2]=i.nlink,_e[r+20>>2]=i.uid,_e[r+24>>2]=i.gid,_e[r+28>>2]=i.rdev,_e[r+32>>2]=0,ya=[i.size>>>0,(ai=i.size,+Math.abs(ai)>=1?ai>0?(Math.min(+Math.floor(ai/4294967296),4294967295)|0)>>>0:~~+Math.ceil((ai-+(~~ai>>>0))/4294967296)>>>0:0)],_e[r+40>>2]=ya[0],_e[r+44>>2]=ya[1],_e[r+48>>2]=4096,_e[r+52>>2]=i.blocks,_e[r+56>>2]=i.atime.getTime()/1e3|0,_e[r+60>>2]=0,_e[r+64>>2]=i.mtime.getTime()/1e3|0,_e[r+68>>2]=0,_e[r+72>>2]=i.ctime.getTime()/1e3|0,_e[r+76>>2]=0,ya=[i.ino>>>0,(ai=i.ino,+Math.abs(ai)>=1?ai>0?(Math.min(+Math.floor(ai/4294967296),4294967295)|0)>>>0:~~+Math.ceil((ai-+(~~ai>>>0))/4294967296)>>>0:0)],_e[r+80>>2]=ya[0],_e[r+84>>2]=ya[1],0},doMsync:function(t,e,r,i,n){var s=$u.slice(t,t+r);y.msync(e,s,n,r,i)},doMkdir:function(t,e){return t=yt.normalize(t),t[t.length-1]==="/"&&(t=t.substr(0,t.length-1)),y.mkdir(t,e,0),0},doMknod:function(t,e,r){switch(e&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return y.mknod(t,e,r),0},doReadlink:function(t,e,r){if(r<=0)return-28;var i=y.readlink(t),n=Math.min(r,rw(i)),s=Zi[e+n];return u4(i,e,r+1),Zi[e+n]=s,n},doAccess:function(t,e){if(e&~7)return-28;var r,i=y.lookupPath(t,{follow:!0});if(r=i.node,!r)return-44;var n="";return e&4&&(n+="r"),e&2&&(n+="w"),e&1&&(n+="x"),n&&y.nodePermissions(r,n)?-2:0},doDup:function(t,e,r){var i=y.getStream(r);return i&&y.close(i),y.open(t,e,0,r,r).fd},doReadv:function(t,e,r,i){for(var n=0,s=0;s>2],a=_e[e+(s*8+4)>>2],l=y.read(t,Zi,o,a,i);if(l<0)return-1;if(n+=l,l>2],a=_e[e+(s*8+4)>>2],l=y.write(t,Zi,o,a,i);if(l<0)return-1;n+=l}return n},varargs:void 0,get:function(){Ot.varargs+=4;var t=_e[Ot.varargs-4>>2];return t},getStr:function(t){var e=c4(t);return e},getStreamFromFD:function(t){var e=y.getStream(t);if(!e)throw new y.ErrnoError(8);return e},get64:function(t,e){return t}};function qxe(t,e){try{return t=Ot.getStr(t),y.chmod(t,e),0}catch(r){return(typeof y=="undefined"||!(r instanceof y.ErrnoError))&&Gr(r),-r.errno}}function Wxe(t){return _e[Jxe()>>2]=t,t}function zxe(t,e,r){Ot.varargs=r;try{var i=Ot.getStreamFromFD(t);switch(e){case 0:{var n=Ot.get();if(n<0)return-28;var s;return s=y.open(i.path,i.flags,0,n),s.fd}case 1:case 2:return 0;case 3:return i.flags;case 4:{var n=Ot.get();return i.flags|=n,0}case 12:{var n=Ot.get(),o=0;return cP[n+o>>1]=2,0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:return Wxe(28),-1;default:return-28}}catch(a){return(typeof y=="undefined"||!(a instanceof y.ErrnoError))&&Gr(a),-a.errno}}function Vxe(t,e){try{var r=Ot.getStreamFromFD(t);return Ot.doStat(y.stat,r.path,e)}catch(i){return(typeof y=="undefined"||!(i instanceof y.ErrnoError))&&Gr(i),-i.errno}}function _xe(t,e,r){Ot.varargs=r;try{var i=Ot.getStreamFromFD(t);switch(e){case 21509:case 21505:return i.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return i.tty?0:-59;case 21519:{if(!i.tty)return-59;var n=Ot.get();return _e[n>>2]=0,0}case 21520:return i.tty?-28:-59;case 21531:{var n=Ot.get();return y.ioctl(i,e,n)}case 21523:return i.tty?0:-59;case 21524:return i.tty?0:-59;default:Gr("bad ioctl syscall "+e)}}catch(s){return(typeof y=="undefined"||!(s instanceof y.ErrnoError))&&Gr(s),-s.errno}}function Xxe(t,e,r){Ot.varargs=r;try{var i=Ot.getStr(t),n=r?Ot.get():0,s=y.open(i,e,n);return s.fd}catch(o){return(typeof y=="undefined"||!(o instanceof y.ErrnoError))&&Gr(o),-o.errno}}function Zxe(t,e){try{return t=Ot.getStr(t),e=Ot.getStr(e),y.rename(t,e),0}catch(r){return(typeof y=="undefined"||!(r instanceof y.ErrnoError))&&Gr(r),-r.errno}}function $xe(t){try{return t=Ot.getStr(t),y.rmdir(t),0}catch(e){return(typeof y=="undefined"||!(e instanceof y.ErrnoError))&&Gr(e),-e.errno}}function eke(t,e){try{return t=Ot.getStr(t),Ot.doStat(y.stat,t,e)}catch(r){return(typeof y=="undefined"||!(r instanceof y.ErrnoError))&&Gr(r),-r.errno}}function tke(t){try{return t=Ot.getStr(t),y.unlink(t),0}catch(e){return(typeof y=="undefined"||!(e instanceof y.ErrnoError))&&Gr(e),-e.errno}}function rke(t,e,r){$u.copyWithin(t,e,e+r)}function ike(t){try{return ew.grow(t-gP.byteLength+65535>>>16),p4(ew.buffer),1}catch(e){}}function nke(t){var e=$u.length;t=t>>>0;var r=2147483648;if(t>r)return!1;for(var i=1;i<=4;i*=2){var n=e*(1+.2/i);n=Math.min(n,t+100663296);var s=Math.min(r,xxe(Math.max(t,n),65536)),o=ike(s);if(o)return!0}return!1}function ske(t){try{var e=Ot.getStreamFromFD(t);return y.close(e),0}catch(r){return(typeof y=="undefined"||!(r instanceof y.ErrnoError))&&Gr(r),r.errno}}function oke(t,e){try{var r=Ot.getStreamFromFD(t),i=r.tty?2:y.isDir(r.mode)?3:y.isLink(r.mode)?7:4;return Zi[e>>0]=i,0}catch(n){return(typeof y=="undefined"||!(n instanceof y.ErrnoError))&&Gr(n),n.errno}}function ake(t,e,r,i){try{var n=Ot.getStreamFromFD(t),s=Ot.doReadv(n,e,r);return _e[i>>2]=s,0}catch(o){return(typeof y=="undefined"||!(o instanceof y.ErrnoError))&&Gr(o),o.errno}}function Ake(t,e,r,i,n){try{var s=Ot.getStreamFromFD(t),o=4294967296,a=r*o+(e>>>0),l=9007199254740992;return a<=-l||a>=l?-61:(y.llseek(s,a,i),ya=[s.position>>>0,(ai=s.position,+Math.abs(ai)>=1?ai>0?(Math.min(+Math.floor(ai/4294967296),4294967295)|0)>>>0:~~+Math.ceil((ai-+(~~ai>>>0))/4294967296)>>>0:0)],_e[n>>2]=ya[0],_e[n+4>>2]=ya[1],s.getdents&&a===0&&i===0&&(s.getdents=null),0)}catch(c){return(typeof y=="undefined"||!(c instanceof y.ErrnoError))&&Gr(c),c.errno}}function lke(t,e,r,i){try{var n=Ot.getStreamFromFD(t),s=Ot.doWritev(n,e,r);return _e[i>>2]=s,0}catch(o){return(typeof y=="undefined"||!(o instanceof y.ErrnoError))&&Gr(o),o.errno}}function cke(t){Ixe(t)}function uke(t){var e=Date.now()/1e3|0;return t&&(_e[t>>2]=e),e}function IP(){if(IP.called)return;IP.called=!0;var t=new Date().getFullYear(),e=new Date(t,0,1),r=new Date(t,6,1),i=e.getTimezoneOffset(),n=r.getTimezoneOffset(),s=Math.max(i,n);_e[fke()>>2]=s*60,_e[gke()>>2]=Number(i!=n);function o(g){var f=g.toTimeString().match(/\(([A-Za-z ]+)\)$/);return f?f[1]:"GMT"}var a=o(e),l=o(r),c=uP(a),u=uP(l);n>2]=c,_e[nw()+4>>2]=u):(_e[nw()>>2]=u,_e[nw()+4>>2]=c)}function hke(t){IP();var e=Date.UTC(_e[t+20>>2]+1900,_e[t+16>>2],_e[t+12>>2],_e[t+8>>2],_e[t+4>>2],_e[t>>2],0),r=new Date(e);_e[t+24>>2]=r.getUTCDay();var i=Date.UTC(r.getUTCFullYear(),0,1,0,0,0,0),n=(r.getTime()-i)/(1e3*60*60*24)|0;return _e[t+28>>2]=n,r.getTime()/1e3|0}var B4=function(t,e,r,i){t||(t=this),this.parent=t,this.mount=t.mount,this.mounted=null,this.id=y.nextInode++,this.name=e,this.mode=r,this.node_ops={},this.stream_ops={},this.rdev=i},sw=292|73,ow=146;Object.defineProperties(B4.prototype,{read:{get:function(){return(this.mode&sw)===sw},set:function(t){t?this.mode|=sw:this.mode&=~sw}},write:{get:function(){return(this.mode&ow)===ow},set:function(t){t?this.mode|=ow:this.mode&=~ow}},isFolder:{get:function(){return y.isDir(this.mode)}},isDevice:{get:function(){return y.isChrdev(this.mode)}}});y.FSNode=B4;y.staticInit();Wl&&(ft=e4,EP=require("path"),tt.staticInit());var ft,EP;if(Wl){Q4=function(t){return function(){try{return t.apply(this,arguments)}catch(e){throw e.code?new y.ErrnoError(eg[e.code]):e}}},Vl=Object.assign({},y);for(yP in w4)y[yP]=Q4(w4[yP])}else throw new Error("NODERAWFS is currently only supported on Node.js environment.");var Q4,Vl,yP;function CP(t,e,r){var i=r>0?r:rw(t)+1,n=new Array(i),s=tw(t,n,0,n.length);return e&&(n.length=s),n}var pke=typeof atob=="function"?atob:function(t){var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r="",i,n,s,o,a,l,c,u=0;t=t.replace(/[^A-Za-z0-9\+\/\=]/g,"");do o=e.indexOf(t.charAt(u++)),a=e.indexOf(t.charAt(u++)),l=e.indexOf(t.charAt(u++)),c=e.indexOf(t.charAt(u++)),i=o<<2|a>>4,n=(a&15)<<4|l>>2,s=(l&3)<<6|c,r=r+String.fromCharCode(i),l!==64&&(r=r+String.fromCharCode(n)),c!==64&&(r=r+String.fromCharCode(s));while(u0||(Fxe(),zl>0))return;function e(){aw||(aw=!0,oe.calledRun=!0,!A4&&(Nxe(),oe.onRuntimeInitialized&&oe.onRuntimeInitialized(),Txe()))}oe.setStatus?(oe.setStatus("Running..."),setTimeout(function(){setTimeout(function(){oe.setStatus("")},1),e()},1)):e()}oe.run=wP;if(oe.preInit)for(typeof oe.preInit=="function"&&(oe.preInit=[oe.preInit]);oe.preInit.length>0;)oe.preInit.pop()();wP()});var x4=E((Dot,S4)=>{"use strict";function Cke(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function _l(t,e,r,i){this.message=t,this.expected=e,this.found=r,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,_l)}Cke(_l,Error);_l.buildMessage=function(t,e){var r={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g>",ee=At(">>",!1),Ue=">&",Oe=At(">&",!1),vt=">",dt=At(">",!1),ri="<<<",ii=At("<<<",!1),an="<&",yr=At("<&",!1),Ki="<",Qi=At("<",!1),Go=function(C){return{type:"argument",segments:[].concat(...C)}},wr=function(C){return C},Ui="'",ws=At("'",!1),Tf=function(C){return[{type:"text",text:C}]},Mf='"',Rm=At('"',!1),Fm=function(C){return C},Nm=function(C){return{type:"arithmetic",arithmetic:C,quoted:!0}},DQ=function(C){return{type:"shell",shell:C,quoted:!0}},RQ=function(C){return _(P({type:"variable"},C),{quoted:!0})},Of=function(C){return{type:"text",text:C}},FQ=function(C){return{type:"arithmetic",arithmetic:C,quoted:!1}},NQ=function(C){return{type:"shell",shell:C,quoted:!1}},Lm=function(C){return _(P({type:"variable"},C),{quoted:!1})},LQ=function(C){return{type:"glob",pattern:C}},Va="\\",jo=At("\\",!1),Tm=/^[\\']/,Mm=Qs(["\\","'"],!1,!1),te=function(C){return C},Om=/^[^']/,Km=Qs(["'"],!0,!1),il=function(C){return C.join("")},Um=/^[\\$"]/,Hm=Qs(["\\","$",'"'],!1,!1),Kf=/^[^$"]/,Gm=Qs(["$",'"'],!0,!1),jm="\\0",TQ=At("\\0",!1),MQ=function(){return"\0"},Ym="\\a",qm=At("\\a",!1),Jm=function(){return"a"},Wm="\\b",zm=At("\\b",!1),Vm=function(){return"\b"},Uf="\\e",OQ=At("\\e",!1),KQ=function(){return""},_m="\\f",UQ=At("\\f",!1),HQ=function(){return"\f"},O="\\n",ht=At("\\n",!1),Vc=function(){return` +`},xn="\\r",Hf=At("\\r",!1),Ye=function(){return"\r"},nl="\\t",Xm=At("\\t",!1),MM=function(){return" "},GQ="\\v",OM=At("\\v",!1),fr=function(){return"\v"},Bs="\\x",jQ=At("\\x",!1),Zm=function(C){return String.fromCharCode(parseInt(C,16))},Yo="\\u",$m=At("\\u",!1),_a="\\U",et=At("\\U",!1),YQ=function(C){return String.fromCodePoint(parseInt(C,16))},eE=/^[0-9a-fA-f]/,tE=Qs([["0","9"],["a","f"],["A","f"]],!1,!1),Xa=Cfe(),sl="-",ol=At("-",!1),al="+",qo=At("+",!1),Al=".",qQ=At(".",!1),rE=function(C,Q,k){return{type:"number",value:(C==="-"?-1:1)*parseFloat(Q.join("")+"."+k.join(""))}},iE=function(C,Q){return{type:"number",value:(C==="-"?-1:1)*parseInt(Q.join(""))}},JQ=function(C){return P({type:"variable"},C)},ll=function(C){return{type:"variable",name:C}},WQ=function(C){return C},nE="*",Gf=At("*",!1),_c="/",jf=At("/",!1),sE=function(C,Q,k){return{type:Q==="*"?"multiplication":"division",right:k}},cl=function(C,Q){return Q.reduce((k,N)=>P({left:k},N),C)},oE=function(C,Q,k){return{type:Q==="+"?"addition":"subtraction",right:k}},Yf="$((",Xc=At("$((",!1),xr="))",KM=At("))",!1),Jo=function(C){return C},Zs="$(",aE=At("$(",!1),Zc=function(C){return C},x="${",U=At("${",!1),le=":-",xe=At(":-",!1),Qe=function(C,Q){return{name:C,defaultValue:Q}},Ge=":-}",ct=At(":-}",!1),sr=function(C){return{name:C,defaultValue:[]}},Wo=function(C){return{name:C}},Afe="$",lfe=At("$",!1),cfe=function(C){return e.isGlobPattern(C)},ufe=function(C){return C},UM=/^[a-zA-Z0-9_]/,HM=Qs([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),GM=function(){return dfe()},jM=/^[$@*?#a-zA-Z0-9_\-]/,YM=Qs(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),gfe=/^[(){}<>$|&; \t"']/,ffe=Qs(["(",")","{","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),hfe=/^[<>&; \t"']/,pfe=Qs(["<",">","&",";"," "," ",'"',"'"],!1,!1),qM=/^[ \t]/,JM=Qs([" "," "],!1,!1),w=0,Re=0,AE=[{line:1,column:1}],$s=0,zQ=[],we=0,lE;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function dfe(){return t.substring(Re,w)}function P_e(){return qf(Re,w)}function D_e(C,Q){throw Q=Q!==void 0?Q:qf(Re,w),zM([Efe(C)],t.substring(Re,w),Q)}function R_e(C,Q){throw Q=Q!==void 0?Q:qf(Re,w),Ife(C,Q)}function At(C,Q){return{type:"literal",text:C,ignoreCase:Q}}function Qs(C,Q,k){return{type:"class",parts:C,inverted:Q,ignoreCase:k}}function Cfe(){return{type:"any"}}function mfe(){return{type:"end"}}function Efe(C){return{type:"other",description:C}}function WM(C){var Q=AE[C],k;if(Q)return Q;for(k=C-1;!AE[k];)k--;for(Q=AE[k],Q={line:Q.line,column:Q.column};k$s&&($s=w,zQ=[]),zQ.push(C))}function Ife(C,Q){return new _l(C,null,null,Q)}function zM(C,Q,k){return new _l(_l.buildMessage(C,Q),C,Q,k)}function VM(){var C,Q;return C=w,Q=Jf(),Q===r&&(Q=null),Q!==r&&(Re=C,Q=s(Q)),C=Q,C}function Jf(){var C,Q,k,N,Z;if(C=w,Q=VQ(),Q!==r){for(k=[],N=ke();N!==r;)k.push(N),N=ke();k!==r?(N=_M(),N!==r?(Z=yfe(),Z===r&&(Z=null),Z!==r?(Re=C,Q=o(Q,N,Z),C=Q):(w=C,C=r)):(w=C,C=r)):(w=C,C=r)}else w=C,C=r;if(C===r)if(C=w,Q=VQ(),Q!==r){for(k=[],N=ke();N!==r;)k.push(N),N=ke();k!==r?(N=_M(),N===r&&(N=null),N!==r?(Re=C,Q=a(Q,N),C=Q):(w=C,C=r)):(w=C,C=r)}else w=C,C=r;return C}function yfe(){var C,Q,k,N,Z;for(C=w,Q=[],k=ke();k!==r;)Q.push(k),k=ke();if(Q!==r)if(k=Jf(),k!==r){for(N=[],Z=ke();Z!==r;)N.push(Z),Z=ke();N!==r?(Re=C,Q=l(k),C=Q):(w=C,C=r)}else w=C,C=r;else w=C,C=r;return C}function _M(){var C;return t.charCodeAt(w)===59?(C=c,w++):(C=r,we===0&&ve(u)),C===r&&(t.charCodeAt(w)===38?(C=g,w++):(C=r,we===0&&ve(f))),C}function VQ(){var C,Q,k;return C=w,Q=XM(),Q!==r?(k=wfe(),k===r&&(k=null),k!==r?(Re=C,Q=h(Q,k),C=Q):(w=C,C=r)):(w=C,C=r),C}function wfe(){var C,Q,k,N,Z,Ee,ot;for(C=w,Q=[],k=ke();k!==r;)Q.push(k),k=ke();if(Q!==r)if(k=Bfe(),k!==r){for(N=[],Z=ke();Z!==r;)N.push(Z),Z=ke();if(N!==r)if(Z=VQ(),Z!==r){for(Ee=[],ot=ke();ot!==r;)Ee.push(ot),ot=ke();Ee!==r?(Re=C,Q=p(k,Z),C=Q):(w=C,C=r)}else w=C,C=r;else w=C,C=r}else w=C,C=r;else w=C,C=r;return C}function Bfe(){var C;return t.substr(w,2)===d?(C=d,w+=2):(C=r,we===0&&ve(m)),C===r&&(t.substr(w,2)===I?(C=I,w+=2):(C=r,we===0&&ve(B))),C}function XM(){var C,Q,k;return C=w,Q=vfe(),Q!==r?(k=Qfe(),k===r&&(k=null),k!==r?(Re=C,Q=b(Q,k),C=Q):(w=C,C=r)):(w=C,C=r),C}function Qfe(){var C,Q,k,N,Z,Ee,ot;for(C=w,Q=[],k=ke();k!==r;)Q.push(k),k=ke();if(Q!==r)if(k=bfe(),k!==r){for(N=[],Z=ke();Z!==r;)N.push(Z),Z=ke();if(N!==r)if(Z=XM(),Z!==r){for(Ee=[],ot=ke();ot!==r;)Ee.push(ot),ot=ke();Ee!==r?(Re=C,Q=R(k,Z),C=Q):(w=C,C=r)}else w=C,C=r;else w=C,C=r}else w=C,C=r;else w=C,C=r;return C}function bfe(){var C;return t.substr(w,2)===H?(C=H,w+=2):(C=r,we===0&&ve(L)),C===r&&(t.charCodeAt(w)===124?(C=K,w++):(C=r,we===0&&ve(J))),C}function cE(){var C,Q,k,N,Z,Ee;if(C=w,Q=oO(),Q!==r)if(t.charCodeAt(w)===61?(k=ne,w++):(k=r,we===0&&ve(q)),k!==r)if(N=$M(),N!==r){for(Z=[],Ee=ke();Ee!==r;)Z.push(Ee),Ee=ke();Z!==r?(Re=C,Q=A(Q,N),C=Q):(w=C,C=r)}else w=C,C=r;else w=C,C=r;else w=C,C=r;if(C===r)if(C=w,Q=oO(),Q!==r)if(t.charCodeAt(w)===61?(k=ne,w++):(k=r,we===0&&ve(q)),k!==r){for(N=[],Z=ke();Z!==r;)N.push(Z),Z=ke();N!==r?(Re=C,Q=V(Q),C=Q):(w=C,C=r)}else w=C,C=r;else w=C,C=r;return C}function vfe(){var C,Q,k,N,Z,Ee,ot,ut,Tr,ni,Yn;for(C=w,Q=[],k=ke();k!==r;)Q.push(k),k=ke();if(Q!==r)if(t.charCodeAt(w)===40?(k=W,w++):(k=r,we===0&&ve(X)),k!==r){for(N=[],Z=ke();Z!==r;)N.push(Z),Z=ke();if(N!==r)if(Z=Jf(),Z!==r){for(Ee=[],ot=ke();ot!==r;)Ee.push(ot),ot=ke();if(Ee!==r)if(t.charCodeAt(w)===41?(ot=F,w++):(ot=r,we===0&&ve(D)),ot!==r){for(ut=[],Tr=ke();Tr!==r;)ut.push(Tr),Tr=ke();if(ut!==r){for(Tr=[],ni=Wf();ni!==r;)Tr.push(ni),ni=Wf();if(Tr!==r){for(ni=[],Yn=ke();Yn!==r;)ni.push(Yn),Yn=ke();ni!==r?(Re=C,Q=he(Z,Tr),C=Q):(w=C,C=r)}else w=C,C=r}else w=C,C=r}else w=C,C=r;else w=C,C=r}else w=C,C=r;else w=C,C=r}else w=C,C=r;else w=C,C=r;if(C===r){for(C=w,Q=[],k=ke();k!==r;)Q.push(k),k=ke();if(Q!==r)if(t.charCodeAt(w)===123?(k=pe,w++):(k=r,we===0&&ve(Ne)),k!==r){for(N=[],Z=ke();Z!==r;)N.push(Z),Z=ke();if(N!==r)if(Z=Jf(),Z!==r){for(Ee=[],ot=ke();ot!==r;)Ee.push(ot),ot=ke();if(Ee!==r)if(t.charCodeAt(w)===125?(ot=Pe,w++):(ot=r,we===0&&ve(qe)),ot!==r){for(ut=[],Tr=ke();Tr!==r;)ut.push(Tr),Tr=ke();if(ut!==r){for(Tr=[],ni=Wf();ni!==r;)Tr.push(ni),ni=Wf();if(Tr!==r){for(ni=[],Yn=ke();Yn!==r;)ni.push(Yn),Yn=ke();ni!==r?(Re=C,Q=re(Z,Tr),C=Q):(w=C,C=r)}else w=C,C=r}else w=C,C=r}else w=C,C=r;else w=C,C=r}else w=C,C=r;else w=C,C=r}else w=C,C=r;else w=C,C=r;if(C===r){for(C=w,Q=[],k=ke();k!==r;)Q.push(k),k=ke();if(Q!==r){for(k=[],N=cE();N!==r;)k.push(N),N=cE();if(k!==r){for(N=[],Z=ke();Z!==r;)N.push(Z),Z=ke();if(N!==r){if(Z=[],Ee=ZM(),Ee!==r)for(;Ee!==r;)Z.push(Ee),Ee=ZM();else Z=r;if(Z!==r){for(Ee=[],ot=ke();ot!==r;)Ee.push(ot),ot=ke();Ee!==r?(Re=C,Q=se(k,Z),C=Q):(w=C,C=r)}else w=C,C=r}else w=C,C=r}else w=C,C=r}else w=C,C=r;if(C===r){for(C=w,Q=[],k=ke();k!==r;)Q.push(k),k=ke();if(Q!==r){if(k=[],N=cE(),N!==r)for(;N!==r;)k.push(N),N=cE();else k=r;if(k!==r){for(N=[],Z=ke();Z!==r;)N.push(Z),Z=ke();N!==r?(Re=C,Q=be(k),C=Q):(w=C,C=r)}else w=C,C=r}else w=C,C=r}}}return C}function Sfe(){var C,Q,k,N,Z;for(C=w,Q=[],k=ke();k!==r;)Q.push(k),k=ke();if(Q!==r){if(k=[],N=uE(),N!==r)for(;N!==r;)k.push(N),N=uE();else k=r;if(k!==r){for(N=[],Z=ke();Z!==r;)N.push(Z),Z=ke();N!==r?(Re=C,Q=ae(k),C=Q):(w=C,C=r)}else w=C,C=r}else w=C,C=r;return C}function ZM(){var C,Q,k;for(C=w,Q=[],k=ke();k!==r;)Q.push(k),k=ke();if(Q!==r?(k=Wf(),k!==r?(Re=C,Q=Ae(k),C=Q):(w=C,C=r)):(w=C,C=r),C===r){for(C=w,Q=[],k=ke();k!==r;)Q.push(k),k=ke();Q!==r?(k=uE(),k!==r?(Re=C,Q=Ae(k),C=Q):(w=C,C=r)):(w=C,C=r)}return C}function Wf(){var C,Q,k,N,Z;for(C=w,Q=[],k=ke();k!==r;)Q.push(k),k=ke();return Q!==r?(De.test(t.charAt(w))?(k=t.charAt(w),w++):(k=r,we===0&&ve($)),k===r&&(k=null),k!==r?(N=xfe(),N!==r?(Z=uE(),Z!==r?(Re=C,Q=G(k,N,Z),C=Q):(w=C,C=r)):(w=C,C=r)):(w=C,C=r)):(w=C,C=r),C}function xfe(){var C;return t.substr(w,2)===Ce?(C=Ce,w+=2):(C=r,we===0&&ve(ee)),C===r&&(t.substr(w,2)===Ue?(C=Ue,w+=2):(C=r,we===0&&ve(Oe)),C===r&&(t.charCodeAt(w)===62?(C=vt,w++):(C=r,we===0&&ve(dt)),C===r&&(t.substr(w,3)===ri?(C=ri,w+=3):(C=r,we===0&&ve(ii)),C===r&&(t.substr(w,2)===an?(C=an,w+=2):(C=r,we===0&&ve(yr)),C===r&&(t.charCodeAt(w)===60?(C=Ki,w++):(C=r,we===0&&ve(Qi))))))),C}function uE(){var C,Q,k;for(C=w,Q=[],k=ke();k!==r;)Q.push(k),k=ke();return Q!==r?(k=$M(),k!==r?(Re=C,Q=Ae(k),C=Q):(w=C,C=r)):(w=C,C=r),C}function $M(){var C,Q,k;if(C=w,Q=[],k=eO(),k!==r)for(;k!==r;)Q.push(k),k=eO();else Q=r;return Q!==r&&(Re=C,Q=Go(Q)),C=Q,C}function eO(){var C,Q;return C=w,Q=kfe(),Q!==r&&(Re=C,Q=wr(Q)),C=Q,C===r&&(C=w,Q=Pfe(),Q!==r&&(Re=C,Q=wr(Q)),C=Q,C===r&&(C=w,Q=Dfe(),Q!==r&&(Re=C,Q=wr(Q)),C=Q)),C}function kfe(){var C,Q,k,N;return C=w,t.charCodeAt(w)===39?(Q=Ui,w++):(Q=r,we===0&&ve(ws)),Q!==r?(k=Rfe(),k!==r?(t.charCodeAt(w)===39?(N=Ui,w++):(N=r,we===0&&ve(ws)),N!==r?(Re=C,Q=Tf(k),C=Q):(w=C,C=r)):(w=C,C=r)):(w=C,C=r),C}function Pfe(){var C,Q,k,N;if(C=w,t.charCodeAt(w)===34?(Q=Mf,w++):(Q=r,we===0&&ve(Rm)),Q!==r){for(k=[],N=tO();N!==r;)k.push(N),N=tO();k!==r?(t.charCodeAt(w)===34?(N=Mf,w++):(N=r,we===0&&ve(Rm)),N!==r?(Re=C,Q=Fm(k),C=Q):(w=C,C=r)):(w=C,C=r)}else w=C,C=r;return C}function Dfe(){var C,Q,k;if(C=w,Q=[],k=rO(),k!==r)for(;k!==r;)Q.push(k),k=rO();else Q=r;return Q!==r&&(Re=C,Q=Fm(Q)),C=Q,C}function tO(){var C,Q;return C=w,Q=nO(),Q!==r&&(Re=C,Q=Nm(Q)),C=Q,C===r&&(C=w,Q=sO(),Q!==r&&(Re=C,Q=DQ(Q)),C=Q,C===r&&(C=w,Q=ZQ(),Q!==r&&(Re=C,Q=RQ(Q)),C=Q,C===r&&(C=w,Q=Ffe(),Q!==r&&(Re=C,Q=Of(Q)),C=Q))),C}function rO(){var C,Q;return C=w,Q=nO(),Q!==r&&(Re=C,Q=FQ(Q)),C=Q,C===r&&(C=w,Q=sO(),Q!==r&&(Re=C,Q=NQ(Q)),C=Q,C===r&&(C=w,Q=ZQ(),Q!==r&&(Re=C,Q=Lm(Q)),C=Q,C===r&&(C=w,Q=Lfe(),Q!==r&&(Re=C,Q=LQ(Q)),C=Q,C===r&&(C=w,Q=Nfe(),Q!==r&&(Re=C,Q=Of(Q)),C=Q)))),C}function Rfe(){var C,Q,k,N,Z;for(C=w,Q=[],k=gE(),k===r&&(k=fE(),k===r&&(k=w,t.charCodeAt(w)===92?(N=Va,w++):(N=r,we===0&&ve(jo)),N!==r?(Tm.test(t.charAt(w))?(Z=t.charAt(w),w++):(Z=r,we===0&&ve(Mm)),Z!==r?(Re=k,N=te(Z),k=N):(w=k,k=r)):(w=k,k=r),k===r&&(Om.test(t.charAt(w))?(k=t.charAt(w),w++):(k=r,we===0&&ve(Km)))));k!==r;)Q.push(k),k=gE(),k===r&&(k=fE(),k===r&&(k=w,t.charCodeAt(w)===92?(N=Va,w++):(N=r,we===0&&ve(jo)),N!==r?(Tm.test(t.charAt(w))?(Z=t.charAt(w),w++):(Z=r,we===0&&ve(Mm)),Z!==r?(Re=k,N=te(Z),k=N):(w=k,k=r)):(w=k,k=r),k===r&&(Om.test(t.charAt(w))?(k=t.charAt(w),w++):(k=r,we===0&&ve(Km)))));return Q!==r&&(Re=C,Q=il(Q)),C=Q,C}function Ffe(){var C,Q,k,N,Z;if(C=w,Q=[],k=gE(),k===r&&(k=fE(),k===r&&(k=w,t.charCodeAt(w)===92?(N=Va,w++):(N=r,we===0&&ve(jo)),N!==r?(Um.test(t.charAt(w))?(Z=t.charAt(w),w++):(Z=r,we===0&&ve(Hm)),Z!==r?(Re=k,N=te(Z),k=N):(w=k,k=r)):(w=k,k=r),k===r&&(Kf.test(t.charAt(w))?(k=t.charAt(w),w++):(k=r,we===0&&ve(Gm))))),k!==r)for(;k!==r;)Q.push(k),k=gE(),k===r&&(k=fE(),k===r&&(k=w,t.charCodeAt(w)===92?(N=Va,w++):(N=r,we===0&&ve(jo)),N!==r?(Um.test(t.charAt(w))?(Z=t.charAt(w),w++):(Z=r,we===0&&ve(Hm)),Z!==r?(Re=k,N=te(Z),k=N):(w=k,k=r)):(w=k,k=r),k===r&&(Kf.test(t.charAt(w))?(k=t.charAt(w),w++):(k=r,we===0&&ve(Gm)))));else Q=r;return Q!==r&&(Re=C,Q=il(Q)),C=Q,C}function gE(){var C,Q;return C=w,t.substr(w,2)===jm?(Q=jm,w+=2):(Q=r,we===0&&ve(TQ)),Q!==r&&(Re=C,Q=MQ()),C=Q,C===r&&(C=w,t.substr(w,2)===Ym?(Q=Ym,w+=2):(Q=r,we===0&&ve(qm)),Q!==r&&(Re=C,Q=Jm()),C=Q,C===r&&(C=w,t.substr(w,2)===Wm?(Q=Wm,w+=2):(Q=r,we===0&&ve(zm)),Q!==r&&(Re=C,Q=Vm()),C=Q,C===r&&(C=w,t.substr(w,2)===Uf?(Q=Uf,w+=2):(Q=r,we===0&&ve(OQ)),Q!==r&&(Re=C,Q=KQ()),C=Q,C===r&&(C=w,t.substr(w,2)===_m?(Q=_m,w+=2):(Q=r,we===0&&ve(UQ)),Q!==r&&(Re=C,Q=HQ()),C=Q,C===r&&(C=w,t.substr(w,2)===O?(Q=O,w+=2):(Q=r,we===0&&ve(ht)),Q!==r&&(Re=C,Q=Vc()),C=Q,C===r&&(C=w,t.substr(w,2)===xn?(Q=xn,w+=2):(Q=r,we===0&&ve(Hf)),Q!==r&&(Re=C,Q=Ye()),C=Q,C===r&&(C=w,t.substr(w,2)===nl?(Q=nl,w+=2):(Q=r,we===0&&ve(Xm)),Q!==r&&(Re=C,Q=MM()),C=Q,C===r&&(C=w,t.substr(w,2)===GQ?(Q=GQ,w+=2):(Q=r,we===0&&ve(OM)),Q!==r&&(Re=C,Q=fr()),C=Q)))))))),C}function fE(){var C,Q,k,N,Z,Ee,ot,ut,Tr,ni,Yn,$Q;return C=w,t.substr(w,2)===Bs?(Q=Bs,w+=2):(Q=r,we===0&&ve(jQ)),Q!==r?(k=w,N=w,Z=An(),Z!==r?(Ee=An(),Ee!==r?(Z=[Z,Ee],N=Z):(w=N,N=r)):(w=N,N=r),N!==r?k=t.substring(k,w):k=N,k!==r?(Re=C,Q=Zm(k),C=Q):(w=C,C=r)):(w=C,C=r),C===r&&(C=w,t.substr(w,2)===Yo?(Q=Yo,w+=2):(Q=r,we===0&&ve($m)),Q!==r?(k=w,N=w,Z=An(),Z!==r?(Ee=An(),Ee!==r?(ot=An(),ot!==r?(ut=An(),ut!==r?(Z=[Z,Ee,ot,ut],N=Z):(w=N,N=r)):(w=N,N=r)):(w=N,N=r)):(w=N,N=r),N!==r?k=t.substring(k,w):k=N,k!==r?(Re=C,Q=Zm(k),C=Q):(w=C,C=r)):(w=C,C=r),C===r&&(C=w,t.substr(w,2)===_a?(Q=_a,w+=2):(Q=r,we===0&&ve(et)),Q!==r?(k=w,N=w,Z=An(),Z!==r?(Ee=An(),Ee!==r?(ot=An(),ot!==r?(ut=An(),ut!==r?(Tr=An(),Tr!==r?(ni=An(),ni!==r?(Yn=An(),Yn!==r?($Q=An(),$Q!==r?(Z=[Z,Ee,ot,ut,Tr,ni,Yn,$Q],N=Z):(w=N,N=r)):(w=N,N=r)):(w=N,N=r)):(w=N,N=r)):(w=N,N=r)):(w=N,N=r)):(w=N,N=r)):(w=N,N=r),N!==r?k=t.substring(k,w):k=N,k!==r?(Re=C,Q=YQ(k),C=Q):(w=C,C=r)):(w=C,C=r))),C}function An(){var C;return eE.test(t.charAt(w))?(C=t.charAt(w),w++):(C=r,we===0&&ve(tE)),C}function Nfe(){var C,Q,k,N,Z;if(C=w,Q=[],k=w,t.charCodeAt(w)===92?(N=Va,w++):(N=r,we===0&&ve(jo)),N!==r?(t.length>w?(Z=t.charAt(w),w++):(Z=r,we===0&&ve(Xa)),Z!==r?(Re=k,N=te(Z),k=N):(w=k,k=r)):(w=k,k=r),k===r&&(k=w,N=w,we++,Z=aO(),we--,Z===r?N=void 0:(w=N,N=r),N!==r?(t.length>w?(Z=t.charAt(w),w++):(Z=r,we===0&&ve(Xa)),Z!==r?(Re=k,N=te(Z),k=N):(w=k,k=r)):(w=k,k=r)),k!==r)for(;k!==r;)Q.push(k),k=w,t.charCodeAt(w)===92?(N=Va,w++):(N=r,we===0&&ve(jo)),N!==r?(t.length>w?(Z=t.charAt(w),w++):(Z=r,we===0&&ve(Xa)),Z!==r?(Re=k,N=te(Z),k=N):(w=k,k=r)):(w=k,k=r),k===r&&(k=w,N=w,we++,Z=aO(),we--,Z===r?N=void 0:(w=N,N=r),N!==r?(t.length>w?(Z=t.charAt(w),w++):(Z=r,we===0&&ve(Xa)),Z!==r?(Re=k,N=te(Z),k=N):(w=k,k=r)):(w=k,k=r));else Q=r;return Q!==r&&(Re=C,Q=il(Q)),C=Q,C}function _Q(){var C,Q,k,N,Z,Ee;if(C=w,t.charCodeAt(w)===45?(Q=sl,w++):(Q=r,we===0&&ve(ol)),Q===r&&(t.charCodeAt(w)===43?(Q=al,w++):(Q=r,we===0&&ve(qo))),Q===r&&(Q=null),Q!==r){if(k=[],De.test(t.charAt(w))?(N=t.charAt(w),w++):(N=r,we===0&&ve($)),N!==r)for(;N!==r;)k.push(N),De.test(t.charAt(w))?(N=t.charAt(w),w++):(N=r,we===0&&ve($));else k=r;if(k!==r)if(t.charCodeAt(w)===46?(N=Al,w++):(N=r,we===0&&ve(qQ)),N!==r){if(Z=[],De.test(t.charAt(w))?(Ee=t.charAt(w),w++):(Ee=r,we===0&&ve($)),Ee!==r)for(;Ee!==r;)Z.push(Ee),De.test(t.charAt(w))?(Ee=t.charAt(w),w++):(Ee=r,we===0&&ve($));else Z=r;Z!==r?(Re=C,Q=rE(Q,k,Z),C=Q):(w=C,C=r)}else w=C,C=r;else w=C,C=r}else w=C,C=r;if(C===r){if(C=w,t.charCodeAt(w)===45?(Q=sl,w++):(Q=r,we===0&&ve(ol)),Q===r&&(t.charCodeAt(w)===43?(Q=al,w++):(Q=r,we===0&&ve(qo))),Q===r&&(Q=null),Q!==r){if(k=[],De.test(t.charAt(w))?(N=t.charAt(w),w++):(N=r,we===0&&ve($)),N!==r)for(;N!==r;)k.push(N),De.test(t.charAt(w))?(N=t.charAt(w),w++):(N=r,we===0&&ve($));else k=r;k!==r?(Re=C,Q=iE(Q,k),C=Q):(w=C,C=r)}else w=C,C=r;if(C===r&&(C=w,Q=ZQ(),Q!==r&&(Re=C,Q=JQ(Q)),C=Q,C===r&&(C=w,Q=zf(),Q!==r&&(Re=C,Q=ll(Q)),C=Q,C===r)))if(C=w,t.charCodeAt(w)===40?(Q=W,w++):(Q=r,we===0&&ve(X)),Q!==r){for(k=[],N=ke();N!==r;)k.push(N),N=ke();if(k!==r)if(N=iO(),N!==r){for(Z=[],Ee=ke();Ee!==r;)Z.push(Ee),Ee=ke();Z!==r?(t.charCodeAt(w)===41?(Ee=F,w++):(Ee=r,we===0&&ve(D)),Ee!==r?(Re=C,Q=WQ(N),C=Q):(w=C,C=r)):(w=C,C=r)}else w=C,C=r;else w=C,C=r}else w=C,C=r}return C}function XQ(){var C,Q,k,N,Z,Ee,ot,ut;if(C=w,Q=_Q(),Q!==r){for(k=[],N=w,Z=[],Ee=ke();Ee!==r;)Z.push(Ee),Ee=ke();if(Z!==r)if(t.charCodeAt(w)===42?(Ee=nE,w++):(Ee=r,we===0&&ve(Gf)),Ee===r&&(t.charCodeAt(w)===47?(Ee=_c,w++):(Ee=r,we===0&&ve(jf))),Ee!==r){for(ot=[],ut=ke();ut!==r;)ot.push(ut),ut=ke();ot!==r?(ut=_Q(),ut!==r?(Re=N,Z=sE(Q,Ee,ut),N=Z):(w=N,N=r)):(w=N,N=r)}else w=N,N=r;else w=N,N=r;for(;N!==r;){for(k.push(N),N=w,Z=[],Ee=ke();Ee!==r;)Z.push(Ee),Ee=ke();if(Z!==r)if(t.charCodeAt(w)===42?(Ee=nE,w++):(Ee=r,we===0&&ve(Gf)),Ee===r&&(t.charCodeAt(w)===47?(Ee=_c,w++):(Ee=r,we===0&&ve(jf))),Ee!==r){for(ot=[],ut=ke();ut!==r;)ot.push(ut),ut=ke();ot!==r?(ut=_Q(),ut!==r?(Re=N,Z=sE(Q,Ee,ut),N=Z):(w=N,N=r)):(w=N,N=r)}else w=N,N=r;else w=N,N=r}k!==r?(Re=C,Q=cl(Q,k),C=Q):(w=C,C=r)}else w=C,C=r;return C}function iO(){var C,Q,k,N,Z,Ee,ot,ut;if(C=w,Q=XQ(),Q!==r){for(k=[],N=w,Z=[],Ee=ke();Ee!==r;)Z.push(Ee),Ee=ke();if(Z!==r)if(t.charCodeAt(w)===43?(Ee=al,w++):(Ee=r,we===0&&ve(qo)),Ee===r&&(t.charCodeAt(w)===45?(Ee=sl,w++):(Ee=r,we===0&&ve(ol))),Ee!==r){for(ot=[],ut=ke();ut!==r;)ot.push(ut),ut=ke();ot!==r?(ut=XQ(),ut!==r?(Re=N,Z=oE(Q,Ee,ut),N=Z):(w=N,N=r)):(w=N,N=r)}else w=N,N=r;else w=N,N=r;for(;N!==r;){for(k.push(N),N=w,Z=[],Ee=ke();Ee!==r;)Z.push(Ee),Ee=ke();if(Z!==r)if(t.charCodeAt(w)===43?(Ee=al,w++):(Ee=r,we===0&&ve(qo)),Ee===r&&(t.charCodeAt(w)===45?(Ee=sl,w++):(Ee=r,we===0&&ve(ol))),Ee!==r){for(ot=[],ut=ke();ut!==r;)ot.push(ut),ut=ke();ot!==r?(ut=XQ(),ut!==r?(Re=N,Z=oE(Q,Ee,ut),N=Z):(w=N,N=r)):(w=N,N=r)}else w=N,N=r;else w=N,N=r}k!==r?(Re=C,Q=cl(Q,k),C=Q):(w=C,C=r)}else w=C,C=r;return C}function nO(){var C,Q,k,N,Z,Ee;if(C=w,t.substr(w,3)===Yf?(Q=Yf,w+=3):(Q=r,we===0&&ve(Xc)),Q!==r){for(k=[],N=ke();N!==r;)k.push(N),N=ke();if(k!==r)if(N=iO(),N!==r){for(Z=[],Ee=ke();Ee!==r;)Z.push(Ee),Ee=ke();Z!==r?(t.substr(w,2)===xr?(Ee=xr,w+=2):(Ee=r,we===0&&ve(KM)),Ee!==r?(Re=C,Q=Jo(N),C=Q):(w=C,C=r)):(w=C,C=r)}else w=C,C=r;else w=C,C=r}else w=C,C=r;return C}function sO(){var C,Q,k,N;return C=w,t.substr(w,2)===Zs?(Q=Zs,w+=2):(Q=r,we===0&&ve(aE)),Q!==r?(k=Jf(),k!==r?(t.charCodeAt(w)===41?(N=F,w++):(N=r,we===0&&ve(D)),N!==r?(Re=C,Q=Zc(k),C=Q):(w=C,C=r)):(w=C,C=r)):(w=C,C=r),C}function ZQ(){var C,Q,k,N,Z,Ee;return C=w,t.substr(w,2)===x?(Q=x,w+=2):(Q=r,we===0&&ve(U)),Q!==r?(k=zf(),k!==r?(t.substr(w,2)===le?(N=le,w+=2):(N=r,we===0&&ve(xe)),N!==r?(Z=Sfe(),Z!==r?(t.charCodeAt(w)===125?(Ee=Pe,w++):(Ee=r,we===0&&ve(qe)),Ee!==r?(Re=C,Q=Qe(k,Z),C=Q):(w=C,C=r)):(w=C,C=r)):(w=C,C=r)):(w=C,C=r)):(w=C,C=r),C===r&&(C=w,t.substr(w,2)===x?(Q=x,w+=2):(Q=r,we===0&&ve(U)),Q!==r?(k=zf(),k!==r?(t.substr(w,3)===Ge?(N=Ge,w+=3):(N=r,we===0&&ve(ct)),N!==r?(Re=C,Q=sr(k),C=Q):(w=C,C=r)):(w=C,C=r)):(w=C,C=r),C===r&&(C=w,t.substr(w,2)===x?(Q=x,w+=2):(Q=r,we===0&&ve(U)),Q!==r?(k=zf(),k!==r?(t.charCodeAt(w)===125?(N=Pe,w++):(N=r,we===0&&ve(qe)),N!==r?(Re=C,Q=Wo(k),C=Q):(w=C,C=r)):(w=C,C=r)):(w=C,C=r),C===r&&(C=w,t.charCodeAt(w)===36?(Q=Afe,w++):(Q=r,we===0&&ve(lfe)),Q!==r?(k=zf(),k!==r?(Re=C,Q=Wo(k),C=Q):(w=C,C=r)):(w=C,C=r)))),C}function Lfe(){var C,Q,k;return C=w,Q=Tfe(),Q!==r?(Re=w,k=cfe(Q),k?k=void 0:k=r,k!==r?(Re=C,Q=ufe(Q),C=Q):(w=C,C=r)):(w=C,C=r),C}function Tfe(){var C,Q,k,N,Z;if(C=w,Q=[],k=w,N=w,we++,Z=AO(),we--,Z===r?N=void 0:(w=N,N=r),N!==r?(t.length>w?(Z=t.charAt(w),w++):(Z=r,we===0&&ve(Xa)),Z!==r?(Re=k,N=te(Z),k=N):(w=k,k=r)):(w=k,k=r),k!==r)for(;k!==r;)Q.push(k),k=w,N=w,we++,Z=AO(),we--,Z===r?N=void 0:(w=N,N=r),N!==r?(t.length>w?(Z=t.charAt(w),w++):(Z=r,we===0&&ve(Xa)),Z!==r?(Re=k,N=te(Z),k=N):(w=k,k=r)):(w=k,k=r);else Q=r;return Q!==r&&(Re=C,Q=il(Q)),C=Q,C}function oO(){var C,Q,k;if(C=w,Q=[],UM.test(t.charAt(w))?(k=t.charAt(w),w++):(k=r,we===0&&ve(HM)),k!==r)for(;k!==r;)Q.push(k),UM.test(t.charAt(w))?(k=t.charAt(w),w++):(k=r,we===0&&ve(HM));else Q=r;return Q!==r&&(Re=C,Q=GM()),C=Q,C}function zf(){var C,Q,k;if(C=w,Q=[],jM.test(t.charAt(w))?(k=t.charAt(w),w++):(k=r,we===0&&ve(YM)),k!==r)for(;k!==r;)Q.push(k),jM.test(t.charAt(w))?(k=t.charAt(w),w++):(k=r,we===0&&ve(YM));else Q=r;return Q!==r&&(Re=C,Q=GM()),C=Q,C}function aO(){var C;return gfe.test(t.charAt(w))?(C=t.charAt(w),w++):(C=r,we===0&&ve(ffe)),C}function AO(){var C;return hfe.test(t.charAt(w))?(C=t.charAt(w),w++):(C=r,we===0&&ve(pfe)),C}function ke(){var C,Q;if(C=[],qM.test(t.charAt(w))?(Q=t.charAt(w),w++):(Q=r,we===0&&ve(JM)),Q!==r)for(;Q!==r;)C.push(Q),qM.test(t.charAt(w))?(Q=t.charAt(w),w++):(Q=r,we===0&&ve(JM));else C=r;return C}if(lE=n(),lE!==r&&w===t.length)return lE;throw lE!==r&&w{"use strict";function Eke(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Xl(t,e,r,i){this.message=t,this.expected=e,this.found=r,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Xl)}Eke(Xl,Error);Xl.buildMessage=function(t,e){var r={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;gH&&(H=B,L=[]),L.push($))}function qe($,G){return new Xl($,null,null,G)}function re($,G,Ce){return new Xl(Xl.buildMessage($,G),$,G,Ce)}function se(){var $,G,Ce,ee;return $=B,G=be(),G!==r?(t.charCodeAt(B)===47?(Ce=s,B++):(Ce=r,K===0&&Pe(o)),Ce!==r?(ee=be(),ee!==r?(b=$,G=a(G,ee),$=G):(B=$,$=r)):(B=$,$=r)):(B=$,$=r),$===r&&($=B,G=be(),G!==r&&(b=$,G=l(G)),$=G),$}function be(){var $,G,Ce,ee;return $=B,G=ae(),G!==r?(t.charCodeAt(B)===64?(Ce=c,B++):(Ce=r,K===0&&Pe(u)),Ce!==r?(ee=De(),ee!==r?(b=$,G=g(G,ee),$=G):(B=$,$=r)):(B=$,$=r)):(B=$,$=r),$===r&&($=B,G=ae(),G!==r&&(b=$,G=f(G)),$=G),$}function ae(){var $,G,Ce,ee,Ue;return $=B,t.charCodeAt(B)===64?(G=c,B++):(G=r,K===0&&Pe(u)),G!==r?(Ce=Ae(),Ce!==r?(t.charCodeAt(B)===47?(ee=s,B++):(ee=r,K===0&&Pe(o)),ee!==r?(Ue=Ae(),Ue!==r?(b=$,G=h(),$=G):(B=$,$=r)):(B=$,$=r)):(B=$,$=r)):(B=$,$=r),$===r&&($=B,G=Ae(),G!==r&&(b=$,G=h()),$=G),$}function Ae(){var $,G,Ce;if($=B,G=[],p.test(t.charAt(B))?(Ce=t.charAt(B),B++):(Ce=r,K===0&&Pe(d)),Ce!==r)for(;Ce!==r;)G.push(Ce),p.test(t.charAt(B))?(Ce=t.charAt(B),B++):(Ce=r,K===0&&Pe(d));else G=r;return G!==r&&(b=$,G=h()),$=G,$}function De(){var $,G,Ce;if($=B,G=[],m.test(t.charAt(B))?(Ce=t.charAt(B),B++):(Ce=r,K===0&&Pe(I)),Ce!==r)for(;Ce!==r;)G.push(Ce),m.test(t.charAt(B))?(Ce=t.charAt(B),B++):(Ce=r,K===0&&Pe(I));else G=r;return G!==r&&(b=$,G=h()),$=G,$}if(J=n(),J!==r&&B===t.length)return J;throw J!==r&&B{"use strict";function F4(t){return typeof t=="undefined"||t===null}function yke(t){return typeof t=="object"&&t!==null}function wke(t){return Array.isArray(t)?t:F4(t)?[]:[t]}function Bke(t,e){var r,i,n,s;if(e)for(s=Object.keys(e),r=0,i=s.length;r{"use strict";function Lp(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}Lp.prototype=Object.create(Error.prototype);Lp.prototype.constructor=Lp;Lp.prototype.toString=function(e){var r=this.name+": ";return r+=this.reason||"(unknown reason)",!e&&this.mark&&(r+=" "+this.mark.toString()),r};N4.exports=Lp});var M4=E((Vot,L4)=>{"use strict";var T4=$l();function kP(t,e,r,i,n){this.name=t,this.buffer=e,this.position=r,this.line=i,this.column=n}kP.prototype.getSnippet=function(e,r){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,r=r||75,i="",n=this.position;n>0&&`\0\r +\x85\u2028\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>r/2-1){i=" ... ",n+=5;break}for(s="",o=this.position;or/2-1){s=" ... ",o-=5;break}return a=this.buffer.slice(n,o),T4.repeat(" ",e)+i+a+s+` +`+T4.repeat(" ",e+this.position-n+i.length)+"^"};kP.prototype.toString=function(e){var r,i="";return this.name&&(i+='in "'+this.name+'" '),i+="at line "+(this.line+1)+", column "+(this.column+1),e||(r=this.getSnippet(),r&&(i+=`: +`+r)),i};L4.exports=kP});var Xr=E((_ot,O4)=>{"use strict";var K4=ng(),vke=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],Ske=["scalar","sequence","mapping"];function xke(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(i){e[String(i)]=r})}),e}function kke(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(vke.indexOf(r)===-1)throw new K4('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=xke(e.styleAliases||null),Ske.indexOf(this.kind)===-1)throw new K4('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}O4.exports=kke});var ec=E((Xot,U4)=>{"use strict";var H4=$l(),hw=ng(),Pke=Xr();function PP(t,e,r){var i=[];return t.include.forEach(function(n){r=PP(n,e,r)}),t[e].forEach(function(n){r.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),r.push(n)}),r.filter(function(n,s){return i.indexOf(s)===-1})}function Dke(){var t={scalar:{},sequence:{},mapping:{},fallback:{}},e,r;function i(n){t[n.kind][n.tag]=t.fallback[n.tag]=n}for(e=0,r=arguments.length;e{"use strict";var Rke=Xr();G4.exports=new Rke("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}})});var q4=E(($ot,Y4)=>{"use strict";var Fke=Xr();Y4.exports=new Fke("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}})});var W4=E((eat,J4)=>{"use strict";var Nke=Xr();J4.exports=new Nke("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}})});var pw=E((tat,z4)=>{"use strict";var Lke=ec();z4.exports=new Lke({explicit:[j4(),q4(),W4()]})});var _4=E((rat,V4)=>{"use strict";var Tke=Xr();function Mke(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function Oke(){return null}function Kke(t){return t===null}V4.exports=new Tke("tag:yaml.org,2002:null",{kind:"scalar",resolve:Mke,construct:Oke,predicate:Kke,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var Z4=E((iat,X4)=>{"use strict";var Uke=Xr();function Hke(t){if(t===null)return!1;var e=t.length;return e===4&&(t==="true"||t==="True"||t==="TRUE")||e===5&&(t==="false"||t==="False"||t==="FALSE")}function Gke(t){return t==="true"||t==="True"||t==="TRUE"}function jke(t){return Object.prototype.toString.call(t)==="[object Boolean]"}X4.exports=new Uke("tag:yaml.org,2002:bool",{kind:"scalar",resolve:Hke,construct:Gke,predicate:jke,represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"})});var ez=E((nat,$4)=>{"use strict";var Yke=$l(),qke=Xr();function Jke(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function Wke(t){return 48<=t&&t<=55}function zke(t){return 48<=t&&t<=57}function Vke(t){if(t===null)return!1;var e=t.length,r=0,i=!1,n;if(!e)return!1;if(n=t[r],(n==="-"||n==="+")&&(n=t[++r]),n==="0"){if(r+1===e)return!0;if(n=t[++r],n==="b"){for(r++;r=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0"+t.toString(8):"-0"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var iz=E((sat,tz)=>{"use strict";var rz=$l(),Zke=Xr(),$ke=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))$");function ePe(t){return!(t===null||!$ke.test(t)||t[t.length-1]==="_")}function tPe(t){var e,r,i,n;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,n=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),r*e):r*parseFloat(e,10)}var rPe=/^[-+]?[0-9]+e/;function iPe(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(rz.isNegativeZero(t))return"-0.0";return r=t.toString(10),rPe.test(r)?r.replace("e",".e"):r}function nPe(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!=0||rz.isNegativeZero(t))}tz.exports=new Zke("tag:yaml.org,2002:float",{kind:"scalar",resolve:ePe,construct:tPe,predicate:nPe,represent:iPe,defaultStyle:"lowercase"})});var DP=E((oat,nz)=>{"use strict";var sPe=ec();nz.exports=new sPe({include:[pw()],implicit:[_4(),Z4(),ez(),iz()]})});var RP=E((aat,sz)=>{"use strict";var oPe=ec();sz.exports=new oPe({include:[DP()]})});var lz=E((Aat,oz)=>{"use strict";var aPe=Xr(),az=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Az=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function APe(t){return t===null?!1:az.exec(t)!==null||Az.exec(t)!==null}function lPe(t){var e,r,i,n,s,o,a,l=0,c=null,u,g,f;if(e=az.exec(t),e===null&&(e=Az.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(r,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+="0";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]==="-"&&(c=-c)),f=new Date(Date.UTC(r,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function cPe(t){return t.toISOString()}oz.exports=new aPe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:APe,construct:lPe,instanceOf:Date,represent:cPe})});var uz=E((lat,cz)=>{"use strict";var uPe=Xr();function gPe(t){return t==="<<"||t===null}cz.exports=new uPe("tag:yaml.org,2002:merge",{kind:"scalar",resolve:gPe})});var hz=E((cat,gz)=>{"use strict";var tc;try{fz=require,tc=fz("buffer").Buffer}catch(t){}var fz,fPe=Xr(),FP=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function hPe(t){if(t===null)return!1;var e,r,i=0,n=t.length,s=FP;for(r=0;r64)){if(e<0)return!1;i+=6}return i%8==0}function pPe(t){var e,r,i=t.replace(/[\r\n=]/g,""),n=i.length,s=FP,o=0,a=[];for(e=0;e>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return r=n%4*6,r===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):r===18?(a.push(o>>10&255),a.push(o>>2&255)):r===12&&a.push(o>>4&255),tc?tc.from?tc.from(a):new tc(a):a}function dPe(t){var e="",r=0,i,n,s=t.length,o=FP;for(i=0;i>18&63],e+=o[r>>12&63],e+=o[r>>6&63],e+=o[r&63]),r=(r<<8)+t[i];return n=s%3,n===0?(e+=o[r>>18&63],e+=o[r>>12&63],e+=o[r>>6&63],e+=o[r&63]):n===2?(e+=o[r>>10&63],e+=o[r>>4&63],e+=o[r<<2&63],e+=o[64]):n===1&&(e+=o[r>>2&63],e+=o[r<<4&63],e+=o[64],e+=o[64]),e}function CPe(t){return tc&&tc.isBuffer(t)}gz.exports=new fPe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:hPe,construct:pPe,predicate:CPe,represent:dPe})});var dz=E((uat,pz)=>{"use strict";var mPe=Xr(),EPe=Object.prototype.hasOwnProperty,IPe=Object.prototype.toString;function yPe(t){if(t===null)return!0;var e=[],r,i,n,s,o,a=t;for(r=0,i=a.length;r{"use strict";var BPe=Xr(),QPe=Object.prototype.toString;function bPe(t){if(t===null)return!0;var e,r,i,n,s,o=t;for(s=new Array(o.length),e=0,r=o.length;e{"use strict";var SPe=Xr(),xPe=Object.prototype.hasOwnProperty;function kPe(t){if(t===null)return!0;var e,r=t;for(e in r)if(xPe.call(r,e)&&r[e]!==null)return!1;return!0}function PPe(t){return t!==null?t:{}}Ez.exports=new SPe("tag:yaml.org,2002:set",{kind:"mapping",resolve:kPe,construct:PPe})});var og=E((hat,yz)=>{"use strict";var DPe=ec();yz.exports=new DPe({include:[RP()],implicit:[lz(),uz()],explicit:[hz(),dz(),mz(),Iz()]})});var Bz=E((pat,wz)=>{"use strict";var RPe=Xr();function FPe(){return!0}function NPe(){}function LPe(){return""}function TPe(t){return typeof t=="undefined"}wz.exports=new RPe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:FPe,construct:NPe,predicate:TPe,represent:LPe})});var bz=E((dat,Qz)=>{"use strict";var MPe=Xr();function OPe(t){if(t===null||t.length===0)return!1;var e=t,r=/\/([gim]*)$/.exec(t),i="";return!(e[0]==="/"&&(r&&(i=r[1]),i.length>3||e[e.length-i.length-1]!=="/"))}function KPe(t){var e=t,r=/\/([gim]*)$/.exec(t),i="";return e[0]==="/"&&(r&&(i=r[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function UPe(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function HPe(t){return Object.prototype.toString.call(t)==="[object RegExp]"}Qz.exports=new MPe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:OPe,construct:KPe,predicate:HPe,represent:UPe})});var xz=E((Cat,vz)=>{"use strict";var dw;try{Sz=require,dw=Sz("esprima")}catch(t){typeof window!="undefined"&&(dw=window.esprima)}var Sz,GPe=Xr();function jPe(t){if(t===null)return!1;try{var e="("+t+")",r=dw.parse(e,{range:!0});return!(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")}catch(i){return!1}}function YPe(t){var e="("+t+")",r=dw.parse(e,{range:!0}),i=[],n;if(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=r.body[0].expression.body.range,r.body[0].expression.body.type==="BlockStatement"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,"return "+e.slice(n[0],n[1]))}function qPe(t){return t.toString()}function JPe(t){return Object.prototype.toString.call(t)==="[object Function]"}vz.exports=new GPe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:jPe,construct:YPe,predicate:JPe,represent:qPe})});var Tp=E((mat,kz)=>{"use strict";var Pz=ec();kz.exports=Pz.DEFAULT=new Pz({include:[og()],explicit:[Bz(),bz(),xz()]})});var Vz=E((Eat,Mp)=>{"use strict";var Ba=$l(),Dz=ng(),WPe=M4(),Rz=og(),zPe=Tp(),QA=Object.prototype.hasOwnProperty,Cw=1,Fz=2,Nz=3,mw=4,NP=1,VPe=2,Lz=3,_Pe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,XPe=/[\x85\u2028\u2029]/,ZPe=/[,\[\]\{\}]/,Tz=/^(?:!|!!|![a-z\-]+!)$/i,Mz=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function Oz(t){return Object.prototype.toString.call(t)}function wo(t){return t===10||t===13}function rc(t){return t===9||t===32}function yn(t){return t===9||t===32||t===10||t===13}function ag(t){return t===44||t===91||t===93||t===123||t===125}function $Pe(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function eDe(t){return t===120?2:t===117?4:t===85?8:0}function tDe(t){return 48<=t&&t<=57?t-48:-1}function Kz(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?` +`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"\x85":t===95?"\xA0":t===76?"\u2028":t===80?"\u2029":""}function rDe(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}var Uz=new Array(256),Hz=new Array(256);for(var Ag=0;Ag<256;Ag++)Uz[Ag]=Kz(Ag)?1:0,Hz[Ag]=Kz(Ag);function iDe(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||zPe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function Gz(t,e){return new Dz(e,new WPe(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function st(t,e){throw Gz(t,e)}function Ew(t,e){t.onWarning&&t.onWarning.call(null,Gz(t,e))}var jz={YAML:function(e,r,i){var n,s,o;e.version!==null&&st(e,"duplication of %YAML directive"),i.length!==1&&st(e,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(i[0]),n===null&&st(e,"ill-formed argument of the YAML directive"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&&st(e,"unacceptable YAML version of the document"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&Ew(e,"unsupported YAML version of the document")},TAG:function(e,r,i){var n,s;i.length!==2&&st(e,"TAG directive accepts exactly two arguments"),n=i[0],s=i[1],Tz.test(n)||st(e,"ill-formed tag handle (first argument) of the TAG directive"),QA.call(e.tagMap,n)&&st(e,'there is a previously declared suffix for "'+n+'" tag handle'),Mz.test(s)||st(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[n]=s}};function bA(t,e,r,i){var n,s,o,a;if(e1&&(t.result+=Ba.repeat(` +`,e-1))}function nDe(t,e,r){var i,n,s,o,a,l,c,u,g=t.kind,f=t.result,h;if(h=t.input.charCodeAt(t.position),yn(h)||ag(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=t.input.charCodeAt(t.position+1),yn(n)||r&&ag(n)))return!1;for(t.kind="scalar",t.result="",s=o=t.position,a=!1;h!==0;){if(h===58){if(n=t.input.charCodeAt(t.position+1),yn(n)||r&&ag(n))break}else if(h===35){if(i=t.input.charCodeAt(t.position-1),yn(i))break}else{if(t.position===t.lineStart&&Iw(t)||r&&ag(h))break;if(wo(h))if(l=t.line,c=t.lineStart,u=t.lineIndent,jr(t,!1,-1),t.lineIndent>=e){a=!0,h=t.input.charCodeAt(t.position);continue}else{t.position=o,t.line=l,t.lineStart=c,t.lineIndent=u;break}}a&&(bA(t,s,o,!1),TP(t,t.line-l),s=o=t.position,a=!1),rc(h)||(o=t.position+1),h=t.input.charCodeAt(++t.position)}return bA(t,s,o,!1),t.result?!0:(t.kind=g,t.result=f,!1)}function sDe(t,e){var r,i,n;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,i=n=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(bA(t,i,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)i=t.position,t.position++,n=t.position;else return!0;else wo(r)?(bA(t,i,n,!0),TP(t,jr(t,!1,e)),i=n=t.position):t.position===t.lineStart&&Iw(t)?st(t,"unexpected end of the document within a single quoted scalar"):(t.position++,n=t.position);st(t,"unexpected end of the stream within a single quoted scalar")}function oDe(t,e){var r,i,n,s,o,a;if(a=t.input.charCodeAt(t.position),a!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=i=t.position;(a=t.input.charCodeAt(t.position))!==0;){if(a===34)return bA(t,r,t.position,!0),t.position++,!0;if(a===92){if(bA(t,r,t.position,!0),a=t.input.charCodeAt(++t.position),wo(a))jr(t,!1,e);else if(a<256&&Uz[a])t.result+=Hz[a],t.position++;else if((o=eDe(a))>0){for(n=o,s=0;n>0;n--)a=t.input.charCodeAt(++t.position),(o=$Pe(a))>=0?s=(s<<4)+o:st(t,"expected hexadecimal character");t.result+=rDe(s),t.position++}else st(t,"unknown escape sequence");r=i=t.position}else wo(a)?(bA(t,r,i,!0),TP(t,jr(t,!1,e)),r=i=t.position):t.position===t.lineStart&&Iw(t)?st(t,"unexpected end of the document within a double quoted scalar"):(t.position++,i=t.position)}st(t,"unexpected end of the stream within a double quoted scalar")}function aDe(t,e){var r=!0,i,n=t.tag,s,o=t.anchor,a,l,c,u,g,f={},h,p,d,m;if(m=t.input.charCodeAt(t.position),m===91)l=93,g=!1,s=[];else if(m===123)l=125,g=!0,s={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=s),m=t.input.charCodeAt(++t.position);m!==0;){if(jr(t,!0,e),m=t.input.charCodeAt(t.position),m===l)return t.position++,t.tag=n,t.anchor=o,t.kind=g?"mapping":"sequence",t.result=s,!0;r||st(t,"missed comma between flow collection entries"),p=h=d=null,c=u=!1,m===63&&(a=t.input.charCodeAt(t.position+1),yn(a)&&(c=u=!0,t.position++,jr(t,!0,e))),i=t.line,cg(t,e,Cw,!1,!0),p=t.tag,h=t.result,jr(t,!0,e),m=t.input.charCodeAt(t.position),(u||t.line===i)&&m===58&&(c=!0,m=t.input.charCodeAt(++t.position),jr(t,!0,e),cg(t,e,Cw,!1,!0),d=t.result),g?lg(t,s,f,p,h,d):c?s.push(lg(t,null,f,p,h,d)):s.push(h),jr(t,!0,e),m=t.input.charCodeAt(t.position),m===44?(r=!0,m=t.input.charCodeAt(++t.position)):r=!1}st(t,"unexpected end of the stream within a flow collection")}function ADe(t,e){var r,i,n=NP,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=t.input.charCodeAt(t.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(t.kind="scalar",t.result="";g!==0;)if(g=t.input.charCodeAt(++t.position),g===43||g===45)NP===n?n=g===43?Lz:VPe:st(t,"repeat of a chomping mode identifier");else if((u=tDe(g))>=0)u===0?st(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):o?st(t,"repeat of an indentation width identifier"):(a=e+u-1,o=!0);else break;if(rc(g)){do g=t.input.charCodeAt(++t.position);while(rc(g));if(g===35)do g=t.input.charCodeAt(++t.position);while(!wo(g)&&g!==0)}for(;g!==0;){for(LP(t),t.lineIndent=0,g=t.input.charCodeAt(t.position);(!o||t.lineIndenta&&(a=t.lineIndent),wo(g)){l++;continue}if(t.lineIndente)&&l!==0)st(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(cg(t,e,mw,!0,n)&&(p?f=t.result:h=t.result),p||(lg(t,c,u,g,f,h,s,o),g=f=h=null),jr(t,!0,-1),m=t.input.charCodeAt(t.position)),t.lineIndent>e&&m!==0)st(t,"bad indentation of a mapping entry");else if(t.lineIndente?l=1:t.lineIndent===e?l=0:t.lineIndente?l=1:t.lineIndent===e?l=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),g=0,f=t.implicitTypes.length;g tag; it should be "'+h.kind+'", not "'+t.kind+'"'),h.resolve(t.result)?(t.result=h.construct(t.result),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):st(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):st(t,"unknown tag !<"+t.tag+">");return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||u}function fDe(t){var e=t.position,r,i,n,s=!1,o;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};(o=t.input.charCodeAt(t.position))!==0&&(jr(t,!0,-1),o=t.input.charCodeAt(t.position),!(t.lineIndent>0||o!==37));){for(s=!0,o=t.input.charCodeAt(++t.position),r=t.position;o!==0&&!yn(o);)o=t.input.charCodeAt(++t.position);for(i=t.input.slice(r,t.position),n=[],i.length<1&&st(t,"directive name must not be less than one character in length");o!==0;){for(;rc(o);)o=t.input.charCodeAt(++t.position);if(o===35){do o=t.input.charCodeAt(++t.position);while(o!==0&&!wo(o));break}if(wo(o))break;for(r=t.position;o!==0&&!yn(o);)o=t.input.charCodeAt(++t.position);n.push(t.input.slice(r,t.position))}o!==0&&LP(t),QA.call(jz,i)?jz[i](t,i,n):Ew(t,'unknown document directive "'+i+'"')}if(jr(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,jr(t,!0,-1)):s&&st(t,"directives end mark is expected"),cg(t,t.lineIndent-1,mw,!1,!0),jr(t,!0,-1),t.checkLineBreaks&&XPe.test(t.input.slice(e,t.position))&&Ew(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&Iw(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,jr(t,!0,-1));return}if(t.position{"use strict";var Op=$l(),Kp=ng(),dDe=Tp(),CDe=og(),_z=Object.prototype.toString,Xz=Object.prototype.hasOwnProperty,mDe=9,Up=10,EDe=13,IDe=32,yDe=33,wDe=34,Zz=35,BDe=37,QDe=38,bDe=39,vDe=42,$z=44,SDe=45,e5=58,xDe=61,kDe=62,PDe=63,DDe=64,t5=91,r5=93,RDe=96,i5=123,FDe=124,n5=125,Ri={};Ri[0]="\\0";Ri[7]="\\a";Ri[8]="\\b";Ri[9]="\\t";Ri[10]="\\n";Ri[11]="\\v";Ri[12]="\\f";Ri[13]="\\r";Ri[27]="\\e";Ri[34]='\\"';Ri[92]="\\\\";Ri[133]="\\N";Ri[160]="\\_";Ri[8232]="\\L";Ri[8233]="\\P";var NDe=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function LDe(t,e){var r,i,n,s,o,a,l;if(e===null)return{};for(r={},i=Object.keys(e),n=0,s=i.length;n0?t.charCodeAt(s-1):null,f=f&&a5(o,a)}else{for(s=0;si&&t[g+1]!==" ",g=s);else if(!ug(o))return yw;a=s>0?t.charCodeAt(s-1):null,f=f&&a5(o,a)}c=c||u&&s-g-1>i&&t[g+1]!==" "}return!l&&!c?f&&!n(t)?l5:c5:r>9&&A5(t)?yw:c?g5:u5}function jDe(t,e,r,i){t.dump=function(){if(e.length===0)return"''";if(!t.noCompatMode&&NDe.indexOf(e)!==-1)return"'"+e+"'";var n=t.indent*Math.max(1,r),s=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-n),o=i||t.flowLevel>-1&&r>=t.flowLevel;function a(l){return MDe(t,l)}switch(UDe(e,o,t.indent,s,a)){case l5:return e;case c5:return"'"+e.replace(/'/g,"''")+"'";case u5:return"|"+f5(e,t.indent)+h5(o5(e,n));case g5:return">"+f5(e,t.indent)+h5(o5(HDe(e,s),n));case yw:return'"'+GDe(e,s)+'"';default:throw new Kp("impossible error: invalid scalar style")}}()}function f5(t,e){var r=A5(t)?String(e):"",i=t[t.length-1]===` +`,n=i&&(t[t.length-2]===` +`||t===` +`),s=n?"+":i?"":"-";return r+s+` +`}function h5(t){return t[t.length-1]===` +`?t.slice(0,-1):t}function HDe(t,e){for(var r=/(\n+)([^\n]*)/g,i=function(){var c=t.indexOf(` +`);return c=c!==-1?c:t.length,r.lastIndex=c,p5(t.slice(0,c),e)}(),n=t[0]===` +`||t[0]===" ",s,o;o=r.exec(t);){var a=o[1],l=o[2];s=l[0]===" ",i+=a+(!n&&!s&&l!==""?` +`:"")+p5(l,e),n=s}return i}function p5(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,i,n=0,s,o=0,a=0,l="";i=r.exec(t);)a=i.index,a-n>e&&(s=o>n?o:a,l+=` +`+t.slice(n,s),n=s+1),o=a;return l+=` +`,t.length-n>e&&o>n?l+=t.slice(n,o)+` +`+t.slice(o+1):l+=t.slice(n),l.slice(1)}function GDe(t){for(var e="",r,i,n,s=0;s=55296&&r<=56319&&(i=t.charCodeAt(s+1),i>=56320&&i<=57343)){e+=s5((r-55296)*1024+i-56320+65536),s++;continue}n=Ri[r],e+=!n&&ug(r)?t[s]:n||s5(r)}return e}function YDe(t,e,r){var i="",n=t.tag,s,o;for(s=0,o=r.length;s1024&&(u+="? "),u+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),!!ic(t,e,c,!1,!1)&&(u+=t.dump,i+=u));t.tag=n,t.dump="{"+i+"}"}function WDe(t,e,r,i){var n="",s=t.tag,o=Object.keys(r),a,l,c,u,g,f;if(t.sortKeys===!0)o.sort();else if(typeof t.sortKeys=="function")o.sort(t.sortKeys);else if(t.sortKeys)throw new Kp("sortKeys must be a boolean or a function");for(a=0,l=o.length;a1024,g&&(t.dump&&Up===t.dump.charCodeAt(0)?f+="?":f+="? "),f+=t.dump,g&&(f+=OP(t,e)),!!ic(t,e+1,u,!0,g)&&(t.dump&&Up===t.dump.charCodeAt(0)?f+=":":f+=": ",f+=t.dump,n+=f));t.tag=s,t.dump=n||"{}"}function d5(t,e,r){var i,n,s,o,a,l;for(n=r?t.explicitTypes:t.implicitTypes,s=0,o=n.length;s tag resolver accepts not "'+l+'" style');t.dump=i}return!0}return!1}function ic(t,e,r,i,n,s){t.tag=null,t.dump=r,d5(t,r,!1)||d5(t,r,!0);var o=_z.call(t.dump);i&&(i=t.flowLevel<0||t.flowLevel>e);var a=o==="[object Object]"||o==="[object Array]",l,c;if(a&&(l=t.duplicates.indexOf(r),c=l!==-1),(t.tag!==null&&t.tag!=="?"||c||t.indent!==2&&e>0)&&(n=!1),c&&t.usedDuplicates[l])t.dump="*ref_"+l;else{if(a&&c&&!t.usedDuplicates[l]&&(t.usedDuplicates[l]=!0),o==="[object Object]")i&&Object.keys(t.dump).length!==0?(WDe(t,e,t.dump,n),c&&(t.dump="&ref_"+l+t.dump)):(JDe(t,e,t.dump),c&&(t.dump="&ref_"+l+" "+t.dump));else if(o==="[object Array]"){var u=t.noArrayIndent&&e>0?e-1:e;i&&t.dump.length!==0?(qDe(t,u,t.dump,n),c&&(t.dump="&ref_"+l+t.dump)):(YDe(t,u,t.dump),c&&(t.dump="&ref_"+l+" "+t.dump))}else if(o==="[object String]")t.tag!=="?"&&jDe(t,t.dump,e,s);else{if(t.skipInvalid)return!1;throw new Kp("unacceptable kind of an object to dump "+o)}t.tag!==null&&t.tag!=="?"&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function zDe(t,e){var r=[],i=[],n,s;for(UP(t,r,i),n=0,s=i.length;n{"use strict";var ww=Vz(),E5=m5();function Bw(t){return function(){throw new Error("Function "+t+" is deprecated and cannot be used.")}}Qr.exports.Type=Xr();Qr.exports.Schema=ec();Qr.exports.FAILSAFE_SCHEMA=pw();Qr.exports.JSON_SCHEMA=DP();Qr.exports.CORE_SCHEMA=RP();Qr.exports.DEFAULT_SAFE_SCHEMA=og();Qr.exports.DEFAULT_FULL_SCHEMA=Tp();Qr.exports.load=ww.load;Qr.exports.loadAll=ww.loadAll;Qr.exports.safeLoad=ww.safeLoad;Qr.exports.safeLoadAll=ww.safeLoadAll;Qr.exports.dump=E5.dump;Qr.exports.safeDump=E5.safeDump;Qr.exports.YAMLException=ng();Qr.exports.MINIMAL_SCHEMA=pw();Qr.exports.SAFE_SCHEMA=og();Qr.exports.DEFAULT_SCHEMA=Tp();Qr.exports.scan=Bw("scan");Qr.exports.parse=Bw("parse");Qr.exports.compose=Bw("compose");Qr.exports.addConstructor=Bw("addConstructor")});var w5=E((wat,y5)=>{"use strict";var _De=I5();y5.exports=_De});var Q5=E((Bat,B5)=>{"use strict";function XDe(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function nc(t,e,r,i){this.message=t,this.expected=e,this.found=r,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,nc)}XDe(nc,Error);nc.buildMessage=function(t,e){var r={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g({[xe]:le})))},H=function(x){return x},L=function(x){return x},K=Yo("correct indentation"),J=" ",ne=fr(" ",!1),q=function(x){return x.length===Zc*aE},A=function(x){return x.length===(Zc+1)*aE},V=function(){return Zc++,!0},W=function(){return Zc--,!0},X=function(){return Xm()},F=Yo("pseudostring"),D=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,he=Bs(["\r",` +`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),pe=/^[^\r\n\t ,\][{}:#"']/,Ne=Bs(["\r",` +`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),Pe=function(){return Xm().replace(/^ *| *$/g,"")},qe="--",re=fr("--",!1),se=/^[a-zA-Z\/0-9]/,be=Bs([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),ae=/^[^\r\n\t :,]/,Ae=Bs(["\r",` +`," "," ",":",","],!0,!1),De="null",$=fr("null",!1),G=function(){return null},Ce="true",ee=fr("true",!1),Ue=function(){return!0},Oe="false",vt=fr("false",!1),dt=function(){return!1},ri=Yo("string"),ii='"',an=fr('"',!1),yr=function(){return""},Ki=function(x){return x},Qi=function(x){return x.join("")},Go=/^[^"\\\0-\x1F\x7F]/,wr=Bs(['"',"\\",["\0",""],"\x7F"],!0,!1),Ui='\\"',ws=fr('\\"',!1),Tf=function(){return'"'},Mf="\\\\",Rm=fr("\\\\",!1),Fm=function(){return"\\"},Nm="\\/",DQ=fr("\\/",!1),RQ=function(){return"/"},Of="\\b",FQ=fr("\\b",!1),NQ=function(){return"\b"},Lm="\\f",LQ=fr("\\f",!1),Va=function(){return"\f"},jo="\\n",Tm=fr("\\n",!1),Mm=function(){return` +`},te="\\r",Om=fr("\\r",!1),Km=function(){return"\r"},il="\\t",Um=fr("\\t",!1),Hm=function(){return" "},Kf="\\u",Gm=fr("\\u",!1),jm=function(x,U,le,xe){return String.fromCharCode(parseInt(`0x${x}${U}${le}${xe}`))},TQ=/^[0-9a-fA-F]/,MQ=Bs([["0","9"],["a","f"],["A","F"]],!1,!1),Ym=Yo("blank space"),qm=/^[ \t]/,Jm=Bs([" "," "],!1,!1),Wm=Yo("white space"),zm=/^[ \t\n\r]/,Vm=Bs([" "," ",` +`,"\r"],!1,!1),Uf=`\r +`,OQ=fr(`\r +`,!1),KQ=` +`,_m=fr(` +`,!1),UQ="\r",HQ=fr("\r",!1),O=0,ht=0,Vc=[{line:1,column:1}],xn=0,Hf=[],Ye=0,nl;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function Xm(){return t.substring(ht,O)}function MM(){return _a(ht,O)}function GQ(x,U){throw U=U!==void 0?U:_a(ht,O),eE([Yo(x)],t.substring(ht,O),U)}function OM(x,U){throw U=U!==void 0?U:_a(ht,O),YQ(x,U)}function fr(x,U){return{type:"literal",text:x,ignoreCase:U}}function Bs(x,U,le){return{type:"class",parts:x,inverted:U,ignoreCase:le}}function jQ(){return{type:"any"}}function Zm(){return{type:"end"}}function Yo(x){return{type:"other",description:x}}function $m(x){var U=Vc[x],le;if(U)return U;for(le=x-1;!Vc[le];)le--;for(U=Vc[le],U={line:U.line,column:U.column};lexn&&(xn=O,Hf=[]),Hf.push(x))}function YQ(x,U){return new nc(x,null,null,U)}function eE(x,U,le){return new nc(nc.buildMessage(x,U),x,U,le)}function tE(){var x;return x=ol(),x}function Xa(){var x,U,le;for(x=O,U=[],le=sl();le!==r;)U.push(le),le=sl();return U!==r&&(ht=x,U=s(U)),x=U,x}function sl(){var x,U,le,xe,Qe;return x=O,U=Al(),U!==r?(t.charCodeAt(O)===45?(le=o,O++):(le=r,Ye===0&&et(a)),le!==r?(xe=xr(),xe!==r?(Qe=qo(),Qe!==r?(ht=x,U=l(Qe),x=U):(O=x,x=r)):(O=x,x=r)):(O=x,x=r)):(O=x,x=r),x}function ol(){var x,U,le;for(x=O,U=[],le=al();le!==r;)U.push(le),le=al();return U!==r&&(ht=x,U=c(U)),x=U,x}function al(){var x,U,le,xe,Qe,Ge,ct,sr,Wo;if(x=O,U=xr(),U===r&&(U=null),U!==r){if(le=O,t.charCodeAt(O)===35?(xe=u,O++):(xe=r,Ye===0&&et(g)),xe!==r){if(Qe=[],Ge=O,ct=O,Ye++,sr=Zs(),Ye--,sr===r?ct=void 0:(O=ct,ct=r),ct!==r?(t.length>O?(sr=t.charAt(O),O++):(sr=r,Ye===0&&et(f)),sr!==r?(ct=[ct,sr],Ge=ct):(O=Ge,Ge=r)):(O=Ge,Ge=r),Ge!==r)for(;Ge!==r;)Qe.push(Ge),Ge=O,ct=O,Ye++,sr=Zs(),Ye--,sr===r?ct=void 0:(O=ct,ct=r),ct!==r?(t.length>O?(sr=t.charAt(O),O++):(sr=r,Ye===0&&et(f)),sr!==r?(ct=[ct,sr],Ge=ct):(O=Ge,Ge=r)):(O=Ge,Ge=r);else Qe=r;Qe!==r?(xe=[xe,Qe],le=xe):(O=le,le=r)}else O=le,le=r;if(le===r&&(le=null),le!==r){if(xe=[],Qe=Jo(),Qe!==r)for(;Qe!==r;)xe.push(Qe),Qe=Jo();else xe=r;xe!==r?(ht=x,U=h(),x=U):(O=x,x=r)}else O=x,x=r}else O=x,x=r;if(x===r&&(x=O,U=Al(),U!==r?(le=JQ(),le!==r?(xe=xr(),xe===r&&(xe=null),xe!==r?(t.charCodeAt(O)===58?(Qe=p,O++):(Qe=r,Ye===0&&et(d)),Qe!==r?(Ge=xr(),Ge===r&&(Ge=null),Ge!==r?(ct=qo(),ct!==r?(ht=x,U=m(le,ct),x=U):(O=x,x=r)):(O=x,x=r)):(O=x,x=r)):(O=x,x=r)):(O=x,x=r)):(O=x,x=r),x===r&&(x=O,U=Al(),U!==r?(le=ll(),le!==r?(xe=xr(),xe===r&&(xe=null),xe!==r?(t.charCodeAt(O)===58?(Qe=p,O++):(Qe=r,Ye===0&&et(d)),Qe!==r?(Ge=xr(),Ge===r&&(Ge=null),Ge!==r?(ct=qo(),ct!==r?(ht=x,U=m(le,ct),x=U):(O=x,x=r)):(O=x,x=r)):(O=x,x=r)):(O=x,x=r)):(O=x,x=r)):(O=x,x=r),x===r))){if(x=O,U=Al(),U!==r)if(le=ll(),le!==r)if(xe=xr(),xe!==r)if(Qe=nE(),Qe!==r){if(Ge=[],ct=Jo(),ct!==r)for(;ct!==r;)Ge.push(ct),ct=Jo();else Ge=r;Ge!==r?(ht=x,U=m(le,Qe),x=U):(O=x,x=r)}else O=x,x=r;else O=x,x=r;else O=x,x=r;else O=x,x=r;if(x===r)if(x=O,U=Al(),U!==r)if(le=ll(),le!==r){if(xe=[],Qe=O,Ge=xr(),Ge===r&&(Ge=null),Ge!==r?(t.charCodeAt(O)===44?(ct=I,O++):(ct=r,Ye===0&&et(B)),ct!==r?(sr=xr(),sr===r&&(sr=null),sr!==r?(Wo=ll(),Wo!==r?(ht=Qe,Ge=b(le,Wo),Qe=Ge):(O=Qe,Qe=r)):(O=Qe,Qe=r)):(O=Qe,Qe=r)):(O=Qe,Qe=r),Qe!==r)for(;Qe!==r;)xe.push(Qe),Qe=O,Ge=xr(),Ge===r&&(Ge=null),Ge!==r?(t.charCodeAt(O)===44?(ct=I,O++):(ct=r,Ye===0&&et(B)),ct!==r?(sr=xr(),sr===r&&(sr=null),sr!==r?(Wo=ll(),Wo!==r?(ht=Qe,Ge=b(le,Wo),Qe=Ge):(O=Qe,Qe=r)):(O=Qe,Qe=r)):(O=Qe,Qe=r)):(O=Qe,Qe=r);else xe=r;xe!==r?(Qe=xr(),Qe===r&&(Qe=null),Qe!==r?(t.charCodeAt(O)===58?(Ge=p,O++):(Ge=r,Ye===0&&et(d)),Ge!==r?(ct=xr(),ct===r&&(ct=null),ct!==r?(sr=qo(),sr!==r?(ht=x,U=R(le,xe,sr),x=U):(O=x,x=r)):(O=x,x=r)):(O=x,x=r)):(O=x,x=r)):(O=x,x=r)}else O=x,x=r;else O=x,x=r}return x}function qo(){var x,U,le,xe,Qe,Ge,ct;if(x=O,U=O,Ye++,le=O,xe=Zs(),xe!==r?(Qe=qQ(),Qe!==r?(t.charCodeAt(O)===45?(Ge=o,O++):(Ge=r,Ye===0&&et(a)),Ge!==r?(ct=xr(),ct!==r?(xe=[xe,Qe,Ge,ct],le=xe):(O=le,le=r)):(O=le,le=r)):(O=le,le=r)):(O=le,le=r),Ye--,le!==r?(O=U,U=void 0):U=r,U!==r?(le=Jo(),le!==r?(xe=rE(),xe!==r?(Qe=Xa(),Qe!==r?(Ge=iE(),Ge!==r?(ht=x,U=H(Qe),x=U):(O=x,x=r)):(O=x,x=r)):(O=x,x=r)):(O=x,x=r)):(O=x,x=r),x===r&&(x=O,U=Zs(),U!==r?(le=rE(),le!==r?(xe=ol(),xe!==r?(Qe=iE(),Qe!==r?(ht=x,U=H(xe),x=U):(O=x,x=r)):(O=x,x=r)):(O=x,x=r)):(O=x,x=r),x===r))if(x=O,U=WQ(),U!==r){if(le=[],xe=Jo(),xe!==r)for(;xe!==r;)le.push(xe),xe=Jo();else le=r;le!==r?(ht=x,U=L(U),x=U):(O=x,x=r)}else O=x,x=r;return x}function Al(){var x,U,le;for(Ye++,x=O,U=[],t.charCodeAt(O)===32?(le=J,O++):(le=r,Ye===0&&et(ne));le!==r;)U.push(le),t.charCodeAt(O)===32?(le=J,O++):(le=r,Ye===0&&et(ne));return U!==r?(ht=O,le=q(U),le?le=void 0:le=r,le!==r?(U=[U,le],x=U):(O=x,x=r)):(O=x,x=r),Ye--,x===r&&(U=r,Ye===0&&et(K)),x}function qQ(){var x,U,le;for(x=O,U=[],t.charCodeAt(O)===32?(le=J,O++):(le=r,Ye===0&&et(ne));le!==r;)U.push(le),t.charCodeAt(O)===32?(le=J,O++):(le=r,Ye===0&&et(ne));return U!==r?(ht=O,le=A(U),le?le=void 0:le=r,le!==r?(U=[U,le],x=U):(O=x,x=r)):(O=x,x=r),x}function rE(){var x;return ht=O,x=V(),x?x=void 0:x=r,x}function iE(){var x;return ht=O,x=W(),x?x=void 0:x=r,x}function JQ(){var x;return x=cl(),x===r&&(x=Gf()),x}function ll(){var x,U,le;if(x=cl(),x===r){if(x=O,U=[],le=_c(),le!==r)for(;le!==r;)U.push(le),le=_c();else U=r;U!==r&&(ht=x,U=X()),x=U}return x}function WQ(){var x;return x=jf(),x===r&&(x=sE(),x===r&&(x=cl(),x===r&&(x=Gf()))),x}function nE(){var x;return x=jf(),x===r&&(x=cl(),x===r&&(x=_c())),x}function Gf(){var x,U,le,xe,Qe,Ge;if(Ye++,x=O,D.test(t.charAt(O))?(U=t.charAt(O),O++):(U=r,Ye===0&&et(he)),U!==r){for(le=[],xe=O,Qe=xr(),Qe===r&&(Qe=null),Qe!==r?(pe.test(t.charAt(O))?(Ge=t.charAt(O),O++):(Ge=r,Ye===0&&et(Ne)),Ge!==r?(Qe=[Qe,Ge],xe=Qe):(O=xe,xe=r)):(O=xe,xe=r);xe!==r;)le.push(xe),xe=O,Qe=xr(),Qe===r&&(Qe=null),Qe!==r?(pe.test(t.charAt(O))?(Ge=t.charAt(O),O++):(Ge=r,Ye===0&&et(Ne)),Ge!==r?(Qe=[Qe,Ge],xe=Qe):(O=xe,xe=r)):(O=xe,xe=r);le!==r?(ht=x,U=Pe(),x=U):(O=x,x=r)}else O=x,x=r;return Ye--,x===r&&(U=r,Ye===0&&et(F)),x}function _c(){var x,U,le,xe,Qe;if(x=O,t.substr(O,2)===qe?(U=qe,O+=2):(U=r,Ye===0&&et(re)),U===r&&(U=null),U!==r)if(se.test(t.charAt(O))?(le=t.charAt(O),O++):(le=r,Ye===0&&et(be)),le!==r){for(xe=[],ae.test(t.charAt(O))?(Qe=t.charAt(O),O++):(Qe=r,Ye===0&&et(Ae));Qe!==r;)xe.push(Qe),ae.test(t.charAt(O))?(Qe=t.charAt(O),O++):(Qe=r,Ye===0&&et(Ae));xe!==r?(ht=x,U=Pe(),x=U):(O=x,x=r)}else O=x,x=r;else O=x,x=r;return x}function jf(){var x,U;return x=O,t.substr(O,4)===De?(U=De,O+=4):(U=r,Ye===0&&et($)),U!==r&&(ht=x,U=G()),x=U,x}function sE(){var x,U;return x=O,t.substr(O,4)===Ce?(U=Ce,O+=4):(U=r,Ye===0&&et(ee)),U!==r&&(ht=x,U=Ue()),x=U,x===r&&(x=O,t.substr(O,5)===Oe?(U=Oe,O+=5):(U=r,Ye===0&&et(vt)),U!==r&&(ht=x,U=dt()),x=U),x}function cl(){var x,U,le,xe;return Ye++,x=O,t.charCodeAt(O)===34?(U=ii,O++):(U=r,Ye===0&&et(an)),U!==r?(t.charCodeAt(O)===34?(le=ii,O++):(le=r,Ye===0&&et(an)),le!==r?(ht=x,U=yr(),x=U):(O=x,x=r)):(O=x,x=r),x===r&&(x=O,t.charCodeAt(O)===34?(U=ii,O++):(U=r,Ye===0&&et(an)),U!==r?(le=oE(),le!==r?(t.charCodeAt(O)===34?(xe=ii,O++):(xe=r,Ye===0&&et(an)),xe!==r?(ht=x,U=Ki(le),x=U):(O=x,x=r)):(O=x,x=r)):(O=x,x=r)),Ye--,x===r&&(U=r,Ye===0&&et(ri)),x}function oE(){var x,U,le;if(x=O,U=[],le=Yf(),le!==r)for(;le!==r;)U.push(le),le=Yf();else U=r;return U!==r&&(ht=x,U=Qi(U)),x=U,x}function Yf(){var x,U,le,xe,Qe,Ge;return Go.test(t.charAt(O))?(x=t.charAt(O),O++):(x=r,Ye===0&&et(wr)),x===r&&(x=O,t.substr(O,2)===Ui?(U=Ui,O+=2):(U=r,Ye===0&&et(ws)),U!==r&&(ht=x,U=Tf()),x=U,x===r&&(x=O,t.substr(O,2)===Mf?(U=Mf,O+=2):(U=r,Ye===0&&et(Rm)),U!==r&&(ht=x,U=Fm()),x=U,x===r&&(x=O,t.substr(O,2)===Nm?(U=Nm,O+=2):(U=r,Ye===0&&et(DQ)),U!==r&&(ht=x,U=RQ()),x=U,x===r&&(x=O,t.substr(O,2)===Of?(U=Of,O+=2):(U=r,Ye===0&&et(FQ)),U!==r&&(ht=x,U=NQ()),x=U,x===r&&(x=O,t.substr(O,2)===Lm?(U=Lm,O+=2):(U=r,Ye===0&&et(LQ)),U!==r&&(ht=x,U=Va()),x=U,x===r&&(x=O,t.substr(O,2)===jo?(U=jo,O+=2):(U=r,Ye===0&&et(Tm)),U!==r&&(ht=x,U=Mm()),x=U,x===r&&(x=O,t.substr(O,2)===te?(U=te,O+=2):(U=r,Ye===0&&et(Om)),U!==r&&(ht=x,U=Km()),x=U,x===r&&(x=O,t.substr(O,2)===il?(U=il,O+=2):(U=r,Ye===0&&et(Um)),U!==r&&(ht=x,U=Hm()),x=U,x===r&&(x=O,t.substr(O,2)===Kf?(U=Kf,O+=2):(U=r,Ye===0&&et(Gm)),U!==r?(le=Xc(),le!==r?(xe=Xc(),xe!==r?(Qe=Xc(),Qe!==r?(Ge=Xc(),Ge!==r?(ht=x,U=jm(le,xe,Qe,Ge),x=U):(O=x,x=r)):(O=x,x=r)):(O=x,x=r)):(O=x,x=r)):(O=x,x=r)))))))))),x}function Xc(){var x;return TQ.test(t.charAt(O))?(x=t.charAt(O),O++):(x=r,Ye===0&&et(MQ)),x}function xr(){var x,U;if(Ye++,x=[],qm.test(t.charAt(O))?(U=t.charAt(O),O++):(U=r,Ye===0&&et(Jm)),U!==r)for(;U!==r;)x.push(U),qm.test(t.charAt(O))?(U=t.charAt(O),O++):(U=r,Ye===0&&et(Jm));else x=r;return Ye--,x===r&&(U=r,Ye===0&&et(Ym)),x}function KM(){var x,U;if(Ye++,x=[],zm.test(t.charAt(O))?(U=t.charAt(O),O++):(U=r,Ye===0&&et(Vm)),U!==r)for(;U!==r;)x.push(U),zm.test(t.charAt(O))?(U=t.charAt(O),O++):(U=r,Ye===0&&et(Vm));else x=r;return Ye--,x===r&&(U=r,Ye===0&&et(Wm)),x}function Jo(){var x,U,le,xe,Qe,Ge;if(x=O,U=Zs(),U!==r){for(le=[],xe=O,Qe=xr(),Qe===r&&(Qe=null),Qe!==r?(Ge=Zs(),Ge!==r?(Qe=[Qe,Ge],xe=Qe):(O=xe,xe=r)):(O=xe,xe=r);xe!==r;)le.push(xe),xe=O,Qe=xr(),Qe===r&&(Qe=null),Qe!==r?(Ge=Zs(),Ge!==r?(Qe=[Qe,Ge],xe=Qe):(O=xe,xe=r)):(O=xe,xe=r);le!==r?(U=[U,le],x=U):(O=x,x=r)}else O=x,x=r;return x}function Zs(){var x;return t.substr(O,2)===Uf?(x=Uf,O+=2):(x=r,Ye===0&&et(OQ)),x===r&&(t.charCodeAt(O)===10?(x=KQ,O++):(x=r,Ye===0&&et(_m)),x===r&&(t.charCodeAt(O)===13?(x=UQ,O++):(x=r,Ye===0&&et(HQ)))),x}let aE=2,Zc=0;if(nl=n(),nl!==r&&O===t.length)return nl;throw nl!==r&&O{var fRe=typeof global=="object"&&global&&global.Object===Object&&global;V5.exports=fRe});var Ks=E((Zat,_5)=>{var hRe=WP(),pRe=typeof self=="object"&&self&&self.Object===Object&&self,dRe=hRe||pRe||Function("return this")();_5.exports=dRe});var ac=E(($at,X5)=>{var CRe=Ks(),mRe=CRe.Symbol;X5.exports=mRe});var $5=E((eAt,Z5)=>{function ERe(t,e){for(var r=-1,i=t==null?0:t.length,n=Array(i);++r{var IRe=Array.isArray;e6.exports=IRe});var n6=E((rAt,t6)=>{var r6=ac(),i6=Object.prototype,yRe=i6.hasOwnProperty,wRe=i6.toString,Jp=r6?r6.toStringTag:void 0;function BRe(t){var e=yRe.call(t,Jp),r=t[Jp];try{t[Jp]=void 0;var i=!0}catch(s){}var n=wRe.call(t);return i&&(e?t[Jp]=r:delete t[Jp]),n}t6.exports=BRe});var o6=E((iAt,s6)=>{var QRe=Object.prototype,bRe=QRe.toString;function vRe(t){return bRe.call(t)}s6.exports=vRe});var Ac=E((nAt,a6)=>{var A6=ac(),SRe=n6(),xRe=o6(),kRe="[object Null]",PRe="[object Undefined]",l6=A6?A6.toStringTag:void 0;function DRe(t){return t==null?t===void 0?PRe:kRe:l6&&l6 in Object(t)?SRe(t):xRe(t)}a6.exports=DRe});var Qo=E((sAt,c6)=>{function RRe(t){return t!=null&&typeof t=="object"}c6.exports=RRe});var Nw=E((oAt,u6)=>{var FRe=Ac(),NRe=Qo(),LRe="[object Symbol]";function TRe(t){return typeof t=="symbol"||NRe(t)&&FRe(t)==LRe}u6.exports=TRe});var C6=E((aAt,g6)=>{var f6=ac(),MRe=$5(),ORe=As(),KRe=Nw(),URe=1/0,h6=f6?f6.prototype:void 0,p6=h6?h6.toString:void 0;function d6(t){if(typeof t=="string")return t;if(ORe(t))return MRe(t,d6)+"";if(KRe(t))return p6?p6.call(t):"";var e=t+"";return e=="0"&&1/t==-URe?"-0":e}g6.exports=d6});var gg=E((AAt,m6)=>{var HRe=C6();function GRe(t){return t==null?"":HRe(t)}m6.exports=GRe});var zP=E((lAt,E6)=>{function jRe(t,e,r){var i=-1,n=t.length;e<0&&(e=-e>n?0:n+e),r=r>n?n:r,r<0&&(r+=n),n=e>r?0:r-e>>>0,e>>>=0;for(var s=Array(n);++i{var YRe=zP();function qRe(t,e,r){var i=t.length;return r=r===void 0?i:r,!e&&r>=i?t:YRe(t,e,r)}I6.exports=qRe});var VP=E((uAt,w6)=>{var JRe="\\ud800-\\udfff",WRe="\\u0300-\\u036f",zRe="\\ufe20-\\ufe2f",VRe="\\u20d0-\\u20ff",_Re=WRe+zRe+VRe,XRe="\\ufe0e\\ufe0f",ZRe="\\u200d",$Re=RegExp("["+ZRe+JRe+_Re+XRe+"]");function eFe(t){return $Re.test(t)}w6.exports=eFe});var Q6=E((gAt,B6)=>{function tFe(t){return t.split("")}B6.exports=tFe});var R6=E((fAt,b6)=>{var v6="\\ud800-\\udfff",rFe="\\u0300-\\u036f",iFe="\\ufe20-\\ufe2f",nFe="\\u20d0-\\u20ff",sFe=rFe+iFe+nFe,oFe="\\ufe0e\\ufe0f",aFe="["+v6+"]",_P="["+sFe+"]",XP="\\ud83c[\\udffb-\\udfff]",AFe="(?:"+_P+"|"+XP+")",S6="[^"+v6+"]",x6="(?:\\ud83c[\\udde6-\\uddff]){2}",k6="[\\ud800-\\udbff][\\udc00-\\udfff]",lFe="\\u200d",P6=AFe+"?",D6="["+oFe+"]?",cFe="(?:"+lFe+"(?:"+[S6,x6,k6].join("|")+")"+D6+P6+")*",uFe=D6+P6+cFe,gFe="(?:"+[S6+_P+"?",_P,x6,k6,aFe].join("|")+")",fFe=RegExp(XP+"(?="+XP+")|"+gFe+uFe,"g");function hFe(t){return t.match(fFe)||[]}b6.exports=hFe});var N6=E((hAt,F6)=>{var pFe=Q6(),dFe=VP(),CFe=R6();function mFe(t){return dFe(t)?CFe(t):pFe(t)}F6.exports=mFe});var T6=E((pAt,L6)=>{var EFe=y6(),IFe=VP(),yFe=N6(),wFe=gg();function BFe(t){return function(e){e=wFe(e);var r=IFe(e)?yFe(e):void 0,i=r?r[0]:e.charAt(0),n=r?EFe(r,1).join(""):e.slice(1);return i[t]()+n}}L6.exports=BFe});var O6=E((dAt,M6)=>{var QFe=T6(),bFe=QFe("toUpperCase");M6.exports=bFe});var ZP=E((CAt,K6)=>{var vFe=gg(),SFe=O6();function xFe(t){return SFe(vFe(t).toLowerCase())}K6.exports=xFe});var H6=E((mAt,U6)=>{"use strict";U6.exports=(t,...e)=>new Promise(r=>{r(t(...e))})});var Wp=E((EAt,$P)=>{"use strict";var kFe=H6(),G6=t=>{if(t<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],r=0,i=()=>{r--,e.length>0&&e.shift()()},n=(a,l,...c)=>{r++;let u=kFe(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{rnew Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>r},pendingCount:{get:()=>e.length}}),o};$P.exports=G6;$P.exports.default=G6});var X6=E((FAt,Mw)=>{function PFe(){var t=0,e=1,r=2,i=3,n=4,s=5,o=6,a=7,l=8,c=9,u=10,g=11,f=12,h=13,p=14,d=15,m=16,I=17,B=0,b=1,R=2,H=3,L=4;function K(A,V){return 55296<=A.charCodeAt(V)&&A.charCodeAt(V)<=56319&&56320<=A.charCodeAt(V+1)&&A.charCodeAt(V+1)<=57343}function J(A,V){V===void 0&&(V=0);var W=A.charCodeAt(V);if(55296<=W&&W<=56319&&V=1){var X=A.charCodeAt(V-1),F=W;return 55296<=X&&X<=56319?(X-55296)*1024+(F-56320)+65536:F}return W}function ne(A,V,W){var X=[A].concat(V).concat([W]),F=X[X.length-2],D=W,he=X.lastIndexOf(p);if(he>1&&X.slice(1,he).every(function(Pe){return Pe==i})&&[i,h,I].indexOf(A)==-1)return R;var pe=X.lastIndexOf(n);if(pe>0&&X.slice(1,pe).every(function(Pe){return Pe==n})&&[f,n].indexOf(F)==-1)return X.filter(function(Pe){return Pe==n}).length%2==1?H:L;if(F==t&&D==e)return B;if(F==r||F==t||F==e)return D==p&&V.every(function(Pe){return Pe==i})?R:b;if(D==r||D==t||D==e)return b;if(F==o&&(D==o||D==a||D==c||D==u))return B;if((F==c||F==a)&&(D==a||D==l))return B;if((F==u||F==l)&&D==l)return B;if(D==i||D==d)return B;if(D==s)return B;if(F==f)return B;var Ne=X.indexOf(i)!=-1?X.lastIndexOf(i)-1:X.length-2;return[h,I].indexOf(X[Ne])!=-1&&X.slice(Ne+1,-1).every(function(Pe){return Pe==i})&&D==p||F==d&&[m,I].indexOf(D)!=-1?B:V.indexOf(n)!=-1?R:F==n&&D==n?B:b}this.nextBreak=function(A,V){if(V===void 0&&(V=0),V<0)return 0;if(V>=A.length-1)return A.length;for(var W=q(J(A,V)),X=[],F=V+1;F{var DFe=X6(),RFe=/^(.*?)(\x1b\[[^m]+m|\x1b\]8;;.*?(\x1b\\|\u0007))/,FFe=new DFe;Z6.exports=(t,e=0,r=t.length)=>{if(e<0||r<0)throw new RangeError("Negative indices aren't supported by this implementation");let i=r-e,n="",s=0,o=0;for(;t.length>0;){let a=t.match(RFe)||[t,t,void 0],l=FFe.splitGraphemes(a[1]),c=Math.min(e-s,l.length);l=l.slice(c);let u=Math.min(i-o,l.length);n+=l.slice(0,u).join(""),s+=c,o+=u,typeof a[2]!="undefined"&&(n+=a[2]),t=t.slice(a[0].length)}return n}});var fg=E((alt,f9)=>{"use strict";var h9=new Map([["C","cwd"],["f","file"],["z","gzip"],["P","preservePaths"],["U","unlink"],["strip-components","strip"],["stripComponents","strip"],["keep-newer","newer"],["keepNewer","newer"],["keep-newer-files","newer"],["keepNewerFiles","newer"],["k","keep"],["keep-existing","keep"],["keepExisting","keep"],["m","noMtime"],["no-mtime","noMtime"],["p","preserveOwner"],["L","follow"],["h","follow"]]),olt=f9.exports=t=>t?Object.keys(t).map(e=>[h9.has(e)?h9.get(e):e,t[e]]).reduce((e,r)=>(e[r[0]]=r[1],e),Object.create(null)):{}});var hg=E((Alt,p9)=>{"use strict";var JFe=require("events"),d9=require("stream"),_p=Rh(),C9=require("string_decoder").StringDecoder,va=Symbol("EOF"),Xp=Symbol("maybeEmitEnd"),xA=Symbol("emittedEnd"),Gw=Symbol("emittingEnd"),jw=Symbol("closed"),m9=Symbol("read"),iD=Symbol("flush"),E9=Symbol("flushChunk"),Bn=Symbol("encoding"),Sa=Symbol("decoder"),Yw=Symbol("flowing"),Zp=Symbol("paused"),$p=Symbol("resume"),rn=Symbol("bufferLength"),I9=Symbol("bufferPush"),nD=Symbol("bufferShift"),Ni=Symbol("objectMode"),Li=Symbol("destroyed"),y9=global._MP_NO_ITERATOR_SYMBOLS_!=="1",WFe=y9&&Symbol.asyncIterator||Symbol("asyncIterator not implemented"),zFe=y9&&Symbol.iterator||Symbol("iterator not implemented"),w9=t=>t==="end"||t==="finish"||t==="prefinish",VFe=t=>t instanceof ArrayBuffer||typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,_Fe=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t);p9.exports=class B9 extends d9{constructor(e){super();this[Yw]=!1,this[Zp]=!1,this.pipes=new _p,this.buffer=new _p,this[Ni]=e&&e.objectMode||!1,this[Ni]?this[Bn]=null:this[Bn]=e&&e.encoding||null,this[Bn]==="buffer"&&(this[Bn]=null),this[Sa]=this[Bn]?new C9(this[Bn]):null,this[va]=!1,this[xA]=!1,this[Gw]=!1,this[jw]=!1,this.writable=!0,this.readable=!0,this[rn]=0,this[Li]=!1}get bufferLength(){return this[rn]}get encoding(){return this[Bn]}set encoding(e){if(this[Ni])throw new Error("cannot set encoding in objectMode");if(this[Bn]&&e!==this[Bn]&&(this[Sa]&&this[Sa].lastNeed||this[rn]))throw new Error("cannot change encoding");this[Bn]!==e&&(this[Sa]=e?new C9(e):null,this.buffer.length&&(this.buffer=this.buffer.map(r=>this[Sa].write(r)))),this[Bn]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Ni]}set objectMode(e){this[Ni]=this[Ni]||!!e}write(e,r,i){if(this[va])throw new Error("write after end");return this[Li]?(this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0):(typeof r=="function"&&(i=r,r="utf8"),r||(r="utf8"),!this[Ni]&&!Buffer.isBuffer(e)&&(_Fe(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):VFe(e)?e=Buffer.from(e):typeof e!="string"&&(this.objectMode=!0)),!this.objectMode&&!e.length?(this[rn]!==0&&this.emit("readable"),i&&i(),this.flowing):(typeof e=="string"&&!this[Ni]&&!(r===this[Bn]&&!this[Sa].lastNeed)&&(e=Buffer.from(e,r)),Buffer.isBuffer(e)&&this[Bn]&&(e=this[Sa].write(e)),this.flowing?(this[rn]!==0&&this[iD](!0),this.emit("data",e)):this[I9](e),this[rn]!==0&&this.emit("readable"),i&&i(),this.flowing))}read(e){if(this[Li])return null;try{return this[rn]===0||e===0||e>this[rn]?null:(this[Ni]&&(e=null),this.buffer.length>1&&!this[Ni]&&(this.encoding?this.buffer=new _p([Array.from(this.buffer).join("")]):this.buffer=new _p([Buffer.concat(Array.from(this.buffer),this[rn])])),this[m9](e||null,this.buffer.head.value))}finally{this[Xp]()}}[m9](e,r){return e===r.length||e===null?this[nD]():(this.buffer.head.value=r.slice(e),r=r.slice(0,e),this[rn]-=e),this.emit("data",r),!this.buffer.length&&!this[va]&&this.emit("drain"),r}end(e,r,i){return typeof e=="function"&&(i=e,e=null),typeof r=="function"&&(i=r,r="utf8"),e&&this.write(e,r),i&&this.once("end",i),this[va]=!0,this.writable=!1,(this.flowing||!this[Zp])&&this[Xp](),this}[$p](){this[Li]||(this[Zp]=!1,this[Yw]=!0,this.emit("resume"),this.buffer.length?this[iD]():this[va]?this[Xp]():this.emit("drain"))}resume(){return this[$p]()}pause(){this[Yw]=!1,this[Zp]=!0}get destroyed(){return this[Li]}get flowing(){return this[Yw]}get paused(){return this[Zp]}[I9](e){return this[Ni]?this[rn]+=1:this[rn]+=e.length,this.buffer.push(e)}[nD](){return this.buffer.length&&(this[Ni]?this[rn]-=1:this[rn]-=this.buffer.head.value.length),this.buffer.shift()}[iD](e){do;while(this[E9](this[nD]()));!e&&!this.buffer.length&&!this[va]&&this.emit("drain")}[E9](e){return e?(this.emit("data",e),this.flowing):!1}pipe(e,r){if(this[Li])return;let i=this[xA];r=r||{},e===process.stdout||e===process.stderr?r.end=!1:r.end=r.end!==!1;let n={dest:e,opts:r,ondrain:s=>this[$p]()};return this.pipes.push(n),e.on("drain",n.ondrain),this[$p](),i&&n.opts.end&&n.dest.end(),e}addListener(e,r){return this.on(e,r)}on(e,r){try{return super.on(e,r)}finally{e==="data"&&!this.pipes.length&&!this.flowing?this[$p]():w9(e)&&this[xA]&&(super.emit(e),this.removeAllListeners(e))}}get emittedEnd(){return this[xA]}[Xp](){!this[Gw]&&!this[xA]&&!this[Li]&&this.buffer.length===0&&this[va]&&(this[Gw]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[jw]&&this.emit("close"),this[Gw]=!1)}emit(e,r){if(e!=="error"&&e!=="close"&&e!==Li&&this[Li])return;if(e==="data"){if(!r)return;this.pipes.length&&this.pipes.forEach(n=>n.dest.write(r)===!1&&this.pause())}else if(e==="end"){if(this[xA]===!0)return;this[xA]=!0,this.readable=!1,this[Sa]&&(r=this[Sa].end(),r&&(this.pipes.forEach(n=>n.dest.write(r)),super.emit("data",r))),this.pipes.forEach(n=>{n.dest.removeListener("drain",n.ondrain),n.opts.end&&n.dest.end()})}else if(e==="close"&&(this[jw]=!0,!this[xA]&&!this[Li]))return;let i=new Array(arguments.length);if(i[0]=e,i[1]=r,arguments.length>2)for(let n=2;n{e.push(i),this[Ni]||(e.dataLength+=i.length)}),r.then(()=>e)}concat(){return this[Ni]?Promise.reject(new Error("cannot concat in objectMode")):this.collect().then(e=>this[Ni]?Promise.reject(new Error("cannot concat in objectMode")):this[Bn]?e.join(""):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,r)=>{this.on(Li,()=>r(new Error("stream destroyed"))),this.on("end",()=>e()),this.on("error",i=>r(i))})}[WFe](){return{next:()=>{let r=this.read();if(r!==null)return Promise.resolve({done:!1,value:r});if(this[va])return Promise.resolve({done:!0});let i=null,n=null,s=c=>{this.removeListener("data",o),this.removeListener("end",a),n(c)},o=c=>{this.removeListener("error",s),this.removeListener("end",a),this.pause(),i({value:c,done:!!this[va]})},a=()=>{this.removeListener("error",s),this.removeListener("data",o),i({done:!0})},l=()=>s(new Error("stream destroyed"));return new Promise((c,u)=>{n=u,i=c,this.once(Li,l),this.once("error",s),this.once("end",a),this.once("data",o)})}}}[zFe](){return{next:()=>{let r=this.read();return{value:r,done:r===null}}}}destroy(e){return this[Li]?(e?this.emit("error",e):this.emit(Li),this):(this[Li]=!0,this.buffer=new _p,this[rn]=0,typeof this.close=="function"&&!this[jw]&&this.close(),e?this.emit("error",e):this.emit(Li),this)}static isStream(e){return!!e&&(e instanceof B9||e instanceof d9||e instanceof JFe&&(typeof e.pipe=="function"||typeof e.write=="function"&&typeof e.end=="function"))}}});var b9=E((llt,Q9)=>{var XFe=require("zlib").constants||{ZLIB_VERNUM:4736};Q9.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:Infinity,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},XFe))});var fD=E(Un=>{"use strict";var sD=require("assert"),kA=require("buffer").Buffer,v9=require("zlib"),uc=Un.constants=b9(),ZFe=hg(),S9=kA.concat,gc=Symbol("_superWrite"),ed=class extends Error{constructor(e){super("zlib: "+e.message);this.code=e.code,this.errno=e.errno,this.code||(this.code="ZLIB_ERROR"),this.message="zlib: "+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return"ZlibError"}},$Fe=Symbol("opts"),td=Symbol("flushFlag"),x9=Symbol("finishFlushFlag"),oD=Symbol("fullFlushFlag"),tr=Symbol("handle"),qw=Symbol("onError"),pg=Symbol("sawError"),aD=Symbol("level"),AD=Symbol("strategy"),lD=Symbol("ended"),clt=Symbol("_defaultFullFlush"),cD=class extends ZFe{constructor(e,r){if(!e||typeof e!="object")throw new TypeError("invalid options for ZlibBase constructor");super(e);this[pg]=!1,this[lD]=!1,this[$Fe]=e,this[td]=e.flush,this[x9]=e.finishFlush;try{this[tr]=new v9[r](e)}catch(i){throw new ed(i)}this[qw]=i=>{this[pg]||(this[pg]=!0,this.close(),this.emit("error",i))},this[tr].on("error",i=>this[qw](new ed(i))),this.once("end",()=>this.close)}close(){this[tr]&&(this[tr].close(),this[tr]=null,this.emit("close"))}reset(){if(!this[pg])return sD(this[tr],"zlib binding closed"),this[tr].reset()}flush(e){this.ended||(typeof e!="number"&&(e=this[oD]),this.write(Object.assign(kA.alloc(0),{[td]:e})))}end(e,r,i){return e&&this.write(e,r),this.flush(this[x9]),this[lD]=!0,super.end(null,null,i)}get ended(){return this[lD]}write(e,r,i){if(typeof r=="function"&&(i=r,r="utf8"),typeof e=="string"&&(e=kA.from(e,r)),this[pg])return;sD(this[tr],"zlib binding closed");let n=this[tr]._handle,s=n.close;n.close=()=>{};let o=this[tr].close;this[tr].close=()=>{},kA.concat=c=>c;let a;try{let c=typeof e[td]=="number"?e[td]:this[td];a=this[tr]._processChunk(e,c),kA.concat=S9}catch(c){kA.concat=S9,this[qw](new ed(c))}finally{this[tr]&&(this[tr]._handle=n,n.close=s,this[tr].close=o,this[tr].removeAllListeners("error"))}this[tr]&&this[tr].on("error",c=>this[qw](new ed(c)));let l;if(a)if(Array.isArray(a)&&a.length>0){l=this[gc](kA.from(a[0]));for(let c=1;c{this.flush(n),s()};try{this[tr].params(e,r)}finally{this[tr].flush=i}this[tr]&&(this[aD]=e,this[AD]=r)}}}},k9=class extends PA{constructor(e){super(e,"Deflate")}},P9=class extends PA{constructor(e){super(e,"Inflate")}},uD=Symbol("_portable"),D9=class extends PA{constructor(e){super(e,"Gzip");this[uD]=e&&!!e.portable}[gc](e){return this[uD]?(this[uD]=!1,e[9]=255,super[gc](e)):super[gc](e)}},R9=class extends PA{constructor(e){super(e,"Gunzip")}},F9=class extends PA{constructor(e){super(e,"DeflateRaw")}},N9=class extends PA{constructor(e){super(e,"InflateRaw")}},L9=class extends PA{constructor(e){super(e,"Unzip")}},gD=class extends cD{constructor(e,r){e=e||{},e.flush=e.flush||uc.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||uc.BROTLI_OPERATION_FINISH,super(e,r),this[oD]=uc.BROTLI_OPERATION_FLUSH}},T9=class extends gD{constructor(e){super(e,"BrotliCompress")}},M9=class extends gD{constructor(e){super(e,"BrotliDecompress")}};Un.Deflate=k9;Un.Inflate=P9;Un.Gzip=D9;Un.Gunzip=R9;Un.DeflateRaw=F9;Un.InflateRaw=N9;Un.Unzip=L9;typeof v9.BrotliCompress=="function"?(Un.BrotliCompress=T9,Un.BrotliDecompress=M9):Un.BrotliCompress=Un.BrotliDecompress=class{constructor(){throw new Error("Brotli is not supported in this version of Node.js")}}});var rd=E(Jw=>{"use strict";Jw.name=new Map([["0","File"],["","OldFile"],["1","Link"],["2","SymbolicLink"],["3","CharacterDevice"],["4","BlockDevice"],["5","Directory"],["6","FIFO"],["7","ContiguousFile"],["g","GlobalExtendedHeader"],["x","ExtendedHeader"],["A","SolarisACL"],["D","GNUDumpDir"],["I","Inode"],["K","NextFileHasLongLinkpath"],["L","NextFileHasLongPath"],["M","ContinuationFile"],["N","OldGnuLongPath"],["S","SparseFile"],["V","TapeVolumeHeader"],["X","OldExtendedHeader"]]);Jw.code=new Map(Array.from(Jw.name).map(t=>[t[1],t[0]]))});var id=E((plt,O9)=>{"use strict";var flt=rd(),eNe=hg(),hD=Symbol("slurp");O9.exports=class extends eNe{constructor(e,r,i){super();switch(this.pause(),this.extended=r,this.globalExtended=i,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case"File":case"OldFile":case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":case"ContiguousFile":case"GNUDumpDir":break;case"NextFileHasLongLinkpath":case"NextFileHasLongPath":case"OldGnuLongPath":case"GlobalExtendedHeader":case"ExtendedHeader":case"OldExtendedHeader":this.meta=!0;break;default:this.ignore=!0}this.path=e.path,this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=e.linkpath,this.uname=e.uname,this.gname=e.gname,r&&this[hD](r),i&&this[hD](i,!0)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");let i=this.remain,n=this.blockRemain;return this.remain=Math.max(0,i-r),this.blockRemain=Math.max(0,n-r),this.ignore?!0:i>=r?super.write(e):super.write(e.slice(0,i))}[hD](e,r){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(r&&i==="path")&&(this[i]=e[i])}}});var H9=E(pD=>{"use strict";var dlt=pD.encode=(t,e)=>{if(Number.isSafeInteger(t))t<0?rNe(t,e):tNe(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},tNe=(t,e)=>{e[0]=128;for(var r=e.length;r>1;r--)e[r-1]=t&255,t=Math.floor(t/256)},rNe=(t,e)=>{e[0]=255;var r=!1;t=t*-1;for(var i=e.length;i>1;i--){var n=t&255;t=Math.floor(t/256),r?e[i-1]=K9(n):n===0?e[i-1]=0:(r=!0,e[i-1]=U9(n))}},Clt=pD.parse=t=>{var e=t[t.length-1],r=t[0],i;if(r===128)i=nNe(t.slice(1,t.length));else if(r===255)i=iNe(t);else throw Error("invalid base256 encoding");if(!Number.isSafeInteger(i))throw Error("parsed number outside of javascript safe integer range");return i},iNe=t=>{for(var e=t.length,r=0,i=!1,n=e-1;n>-1;n--){var s=t[n],o;i?o=K9(s):s===0?o=s:(i=!0,o=U9(s)),o!==0&&(r-=o*Math.pow(256,e-n-1))}return r},nNe=t=>{for(var e=t.length,r=0,i=e-1;i>-1;i--){var n=t[i];n!==0&&(r+=n*Math.pow(256,e-i-1))}return r},K9=t=>(255^t)&255,U9=t=>(255^t)+1&255});var Cg=E((Elt,G9)=>{"use strict";var dD=rd(),dg=require("path").posix,j9=H9(),CD=Symbol("slurp"),Hn=Symbol("type"),Y9=class{constructor(e,r,i,n){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[Hn]="0",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,r||0,i,n):e&&this.set(e)}decode(e,r,i,n){if(r||(r=0),!e||!(e.length>=r+512))throw new Error("need 512 bytes for header");if(this.path=fc(e,r,100),this.mode=DA(e,r+100,8),this.uid=DA(e,r+108,8),this.gid=DA(e,r+116,8),this.size=DA(e,r+124,12),this.mtime=mD(e,r+136,12),this.cksum=DA(e,r+148,12),this[CD](i),this[CD](n,!0),this[Hn]=fc(e,r+156,1),this[Hn]===""&&(this[Hn]="0"),this[Hn]==="0"&&this.path.substr(-1)==="/"&&(this[Hn]="5"),this[Hn]==="5"&&(this.size=0),this.linkpath=fc(e,r+157,100),e.slice(r+257,r+265).toString()==="ustar\x0000")if(this.uname=fc(e,r+265,32),this.gname=fc(e,r+297,32),this.devmaj=DA(e,r+329,8),this.devmin=DA(e,r+337,8),e[r+475]!==0){let o=fc(e,r+345,155);this.path=o+"/"+this.path}else{let o=fc(e,r+345,130);o&&(this.path=o+"/"+this.path),this.atime=mD(e,r+476,12),this.ctime=mD(e,r+488,12)}let s=8*32;for(let o=r;o=r+512))throw new Error("need 512 bytes for header");let i=this.ctime||this.atime?130:155,n=sNe(this.path||"",i),s=n[0],o=n[1];this.needPax=n[2],this.needPax=hc(e,r,100,s)||this.needPax,this.needPax=RA(e,r+100,8,this.mode)||this.needPax,this.needPax=RA(e,r+108,8,this.uid)||this.needPax,this.needPax=RA(e,r+116,8,this.gid)||this.needPax,this.needPax=RA(e,r+124,12,this.size)||this.needPax,this.needPax=ED(e,r+136,12,this.mtime)||this.needPax,e[r+156]=this[Hn].charCodeAt(0),this.needPax=hc(e,r+157,100,this.linkpath)||this.needPax,e.write("ustar\x0000",r+257,8),this.needPax=hc(e,r+265,32,this.uname)||this.needPax,this.needPax=hc(e,r+297,32,this.gname)||this.needPax,this.needPax=RA(e,r+329,8,this.devmaj)||this.needPax,this.needPax=RA(e,r+337,8,this.devmin)||this.needPax,this.needPax=hc(e,r+345,i,o)||this.needPax,e[r+475]!==0?this.needPax=hc(e,r+345,155,o)||this.needPax:(this.needPax=hc(e,r+345,130,o)||this.needPax,this.needPax=ED(e,r+476,12,this.atime)||this.needPax,this.needPax=ED(e,r+488,12,this.ctime)||this.needPax);let a=8*32;for(let l=r;l{let r=100,i=t,n="",s,o=dg.parse(t).root||".";if(Buffer.byteLength(i)r&&Buffer.byteLength(n)<=e?s=[i.substr(0,r-1),n,!0]:(i=dg.join(dg.basename(n),i),n=dg.dirname(n));while(n!==o&&!s);s||(s=[t.substr(0,r-1),"",!0])}return s},fc=(t,e,r)=>t.slice(e,e+r).toString("utf8").replace(/\0.*/,""),mD=(t,e,r)=>oNe(DA(t,e,r)),oNe=t=>t===null?null:new Date(t*1e3),DA=(t,e,r)=>t[e]&128?j9.parse(t.slice(e,e+r)):aNe(t,e,r),ANe=t=>isNaN(t)?null:t,aNe=(t,e,r)=>ANe(parseInt(t.slice(e,e+r).toString("utf8").replace(/\0.*$/,"").trim(),8)),lNe={12:8589934591,8:2097151},RA=(t,e,r,i)=>i===null?!1:i>lNe[r]||i<0?(j9.encode(i,t.slice(e,e+r)),!0):(cNe(t,e,r,i),!1),cNe=(t,e,r,i)=>t.write(uNe(i,r),e,r,"ascii"),uNe=(t,e)=>gNe(Math.floor(t).toString(8),e),gNe=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",ED=(t,e,r,i)=>i===null?!1:RA(t,e,r,i.getTime()/1e3),fNe=new Array(156).join("\0"),hc=(t,e,r,i)=>i===null?!1:(t.write(i+fNe,e,r,"utf8"),i.length!==Buffer.byteLength(i)||i.length>r);G9.exports=Y9});var zw=E((Ilt,q9)=>{"use strict";var hNe=Cg(),pNe=require("path"),Ww=class{constructor(e,r){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=r||!1}encode(){let e=this.encodeBody();if(e==="")return null;let r=Buffer.byteLength(e),i=512*Math.ceil(1+r/512),n=Buffer.allocUnsafe(i);for(let s=0;s<512;s++)n[s]=0;new hNe({path:("PaxHeader/"+pNe.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:r,mtime:this.mtime||null,type:this.global?"GlobalExtendedHeader":"ExtendedHeader",linkpath:"",uname:this.uname||"",gname:this.gname||"",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(n),n.write(e,512,r,"utf8");for(let s=r+512;s=Math.pow(10,s)&&(s+=1),s+n+i}};Ww.parse=(t,e,r)=>new Ww(dNe(CNe(t),e),r);var dNe=(t,e)=>e?Object.keys(t).reduce((r,i)=>(r[i]=t[i],r),e):t,CNe=t=>t.replace(/\n$/,"").split(` +`).reduce(mNe,Object.create(null)),mNe=(t,e)=>{let r=parseInt(e,10);if(r!==Buffer.byteLength(e)+1)return t;e=e.substr((r+" ").length);let i=e.split("="),n=i.shift().replace(/^SCHILY\.(dev|ino|nlink)/,"$1");if(!n)return t;let s=i.join("=");return t[n]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(n)?new Date(s*1e3):/^[0-9]+$/.test(s)?+s:s,t};q9.exports=Ww});var Vw=E((ylt,J9)=>{"use strict";J9.exports=t=>class extends t{warn(e,r,i={}){this.file&&(i.file=this.file),this.cwd&&(i.cwd=this.cwd),i.code=r instanceof Error&&r.code||e,i.tarCode=e,!this.strict&&i.recoverable!==!1?(r instanceof Error&&(i=Object.assign(r,i),r=r.message),this.emit("warn",i.tarCode,r,i)):r instanceof Error?this.emit("error",Object.assign(r,i)):this.emit("error",Object.assign(new Error(`${e}: ${r}`),i))}}});var yD=E((wlt,W9)=>{"use strict";var _w=["|","<",">","?",":"],ID=_w.map(t=>String.fromCharCode(61440+t.charCodeAt(0))),ENe=new Map(_w.map((t,e)=>[t,ID[e]])),INe=new Map(ID.map((t,e)=>[t,_w[e]]));W9.exports={encode:t=>_w.reduce((e,r)=>e.split(r).join(ENe.get(r)),t),decode:t=>ID.reduce((e,r)=>e.split(r).join(INe.get(r)),t)}});var V9=E((Blt,z9)=>{"use strict";z9.exports=(t,e,r)=>(t&=4095,r&&(t=(t|384)&~18),e&&(t&256&&(t|=64),t&32&&(t|=8),t&4&&(t|=1)),t)});var xD=E((xlt,_9)=>{"use strict";var X9=hg(),Z9=zw(),$9=Cg(),Qlt=id(),bo=require("fs"),mg=require("path"),blt=rd(),yNe=16*1024*1024,eV=Symbol("process"),tV=Symbol("file"),rV=Symbol("directory"),wD=Symbol("symlink"),iV=Symbol("hardlink"),nd=Symbol("header"),Xw=Symbol("read"),BD=Symbol("lstat"),Zw=Symbol("onlstat"),QD=Symbol("onread"),bD=Symbol("onreadlink"),vD=Symbol("openfile"),SD=Symbol("onopenfile"),pc=Symbol("close"),$w=Symbol("mode"),nV=Vw(),wNe=yD(),sV=V9(),eB=nV(class extends X9{constructor(e,r){if(r=r||{},super(r),typeof e!="string")throw new TypeError("path is required");this.path=e,this.portable=!!r.portable,this.myuid=process.getuid&&process.getuid(),this.myuser=process.env.USER||"",this.maxReadSize=r.maxReadSize||yNe,this.linkCache=r.linkCache||new Map,this.statCache=r.statCache||new Map,this.preservePaths=!!r.preservePaths,this.cwd=r.cwd||process.cwd(),this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.mtime=r.mtime||null,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let i=!1;if(!this.preservePaths&&mg.win32.isAbsolute(e)){let n=mg.win32.parse(e);this.path=e.substr(n.root.length),i=n.root}this.win32=!!r.win32||process.platform==="win32",this.win32&&(this.path=wNe.decode(this.path.replace(/\\/g,"/")),e=e.replace(/\\/g,"/")),this.absolute=r.absolute||mg.resolve(this.cwd,e),this.path===""&&(this.path="./"),i&&this.warn("TAR_ENTRY_INFO",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.statCache.has(this.absolute)?this[Zw](this.statCache.get(this.absolute)):this[BD]()}[BD](){bo.lstat(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[Zw](r)})}[Zw](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=BNe(e),this.emit("stat",e),this[eV]()}[eV](){switch(this.type){case"File":return this[tV]();case"Directory":return this[rV]();case"SymbolicLink":return this[wD]();default:return this.end()}}[$w](e){return sV(e,this.type==="Directory",this.portable)}[nd](){this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.header=new $9({path:this.path,linkpath:this.linkpath,mode:this[$w](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:"",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&this.write(new Z9({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this.path,linkpath:this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),this.write(this.header.block)}[rV](){this.path.substr(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[nd](),this.end()}[wD](){bo.readlink(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[bD](r)})}[bD](e){this.linkpath=e.replace(/\\/g,"/"),this[nd](),this.end()}[iV](e){this.type="Link",this.linkpath=mg.relative(this.cwd,e).replace(/\\/g,"/"),this.stat.size=0,this[nd](),this.end()}[tV](){if(this.stat.nlink>1){let e=this.stat.dev+":"+this.stat.ino;if(this.linkCache.has(e)){let r=this.linkCache.get(e);if(r.indexOf(this.cwd)===0)return this[iV](r)}this.linkCache.set(e,this.absolute)}if(this[nd](),this.stat.size===0)return this.end();this[vD]()}[vD](){bo.open(this.absolute,"r",(e,r)=>{if(e)return this.emit("error",e);this[SD](r)})}[SD](e){let r=512*Math.ceil(this.stat.size/512),i=Math.min(r,this.maxReadSize),n=Buffer.allocUnsafe(i);this[Xw](e,n,0,n.length,0,this.stat.size,r)}[Xw](e,r,i,n,s,o,a){bo.read(e,r,i,n,s,(l,c)=>{if(l)return this[pc](e,()=>this.emit("error",l));this[QD](e,r,i,n,s,o,a,c)})}[pc](e,r){bo.close(e,r)}[QD](e,r,i,n,s,o,a,l){if(l<=0&&o>0){let u=new Error("encountered unexpected EOF");return u.path=this.absolute,u.syscall="read",u.code="EOF",this[pc](e,()=>this.emit("error",u))}if(l>o){let u=new Error("did not encounter expected EOF");return u.path=this.absolute,u.syscall="read",u.code="EOF",this[pc](e,()=>this.emit("error",u))}if(l===o)for(let u=l;uu?this.emit("error",u):this.end());i>=n&&(r=Buffer.allocUnsafe(n),i=0),n=r.length-i,this[Xw](e,r,i,n,s,o,a)}}),oV=class extends eB{constructor(e,r){super(e,r)}[BD](){this[Zw](bo.lstatSync(this.absolute))}[wD](){this[bD](bo.readlinkSync(this.absolute))}[vD](){this[SD](bo.openSync(this.absolute,"r"))}[Xw](e,r,i,n,s,o,a){let l=!0;try{let c=bo.readSync(e,r,i,n,s);this[QD](e,r,i,n,s,o,a,c),l=!1}finally{if(l)try{this[pc](e,()=>{})}catch(c){}}}[pc](e,r){bo.closeSync(e),r()}},QNe=nV(class extends X9{constructor(e,r){r=r||{},super(r),this.preservePaths=!!r.preservePaths,this.portable=!!r.portable,this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.readEntry=e,this.type=e.type,this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.path=e.path,this.mode=this[$w](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:r.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=e.linkpath,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let i=!1;if(mg.isAbsolute(this.path)&&!this.preservePaths){let n=mg.parse(this.path);i=n.root,this.path=this.path.substr(n.root.length)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new $9({path:this.path,linkpath:this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),i&&this.warn("TAR_ENTRY_INFO",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.header.encode()&&!this.noPax&&super.write(new Z9({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this.path,linkpath:this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[$w](e){return sV(e,this.type==="Directory",this.portable)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");return this.blockRemain-=r,super.write(e)}end(){return this.blockRemain&&this.write(Buffer.alloc(this.blockRemain)),super.end()}});eB.Sync=oV;eB.Tar=QNe;var BNe=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported";_9.exports=eB});var AB=E((Plt,aV)=>{"use strict";var kD=class{constructor(e,r){this.path=e||"./",this.absolute=r,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},bNe=hg(),vNe=fD(),SNe=id(),PD=xD(),xNe=PD.Sync,kNe=PD.Tar,PNe=Rh(),AV=Buffer.alloc(1024),tB=Symbol("onStat"),rB=Symbol("ended"),vo=Symbol("queue"),Eg=Symbol("current"),dc=Symbol("process"),iB=Symbol("processing"),lV=Symbol("processJob"),So=Symbol("jobs"),DD=Symbol("jobDone"),nB=Symbol("addFSEntry"),cV=Symbol("addTarEntry"),RD=Symbol("stat"),FD=Symbol("readdir"),sB=Symbol("onreaddir"),oB=Symbol("pipe"),uV=Symbol("entry"),ND=Symbol("entryOpt"),LD=Symbol("writeEntryClass"),gV=Symbol("write"),TD=Symbol("ondrain"),aB=require("fs"),fV=require("path"),DNe=Vw(),MD=DNe(class extends bNe{constructor(e){super(e);e=e||Object.create(null),this.opt=e,this.file=e.file||"",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=(e.prefix||"").replace(/(\\|\/)+$/,""),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[LD]=PD,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!="object"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new vNe.Gzip(e.gzip),this.zip.on("data",r=>super.write(r)),this.zip.on("end",r=>super.end()),this.zip.on("drain",r=>this[TD]()),this.on("resume",r=>this.zip.resume())):this.on("drain",this[TD]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter=="function"?e.filter:r=>!0,this[vo]=new PNe,this[So]=0,this.jobs=+e.jobs||4,this[iB]=!1,this[rB]=!1}[gV](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[rB]=!0,this[dc](),this}write(e){if(this[rB])throw new Error("write after end");return e instanceof SNe?this[cV](e):this[nB](e),this.flowing}[cV](e){let r=fV.resolve(this.cwd,e.path);if(this.prefix&&(e.path=this.prefix+"/"+e.path.replace(/^\.(\/+|$)/,"")),!this.filter(e.path,e))e.resume();else{let i=new kD(e.path,r,!1);i.entry=new kNe(e,this[ND](i)),i.entry.on("end",n=>this[DD](i)),this[So]+=1,this[vo].push(i)}this[dc]()}[nB](e){let r=fV.resolve(this.cwd,e);this.prefix&&(e=this.prefix+"/"+e.replace(/^\.(\/+|$)/,"")),this[vo].push(new kD(e,r)),this[dc]()}[RD](e){e.pending=!0,this[So]+=1;let r=this.follow?"stat":"lstat";aB[r](e.absolute,(i,n)=>{e.pending=!1,this[So]-=1,i?this.emit("error",i):this[tB](e,n)})}[tB](e,r){this.statCache.set(e.absolute,r),e.stat=r,this.filter(e.path,r)||(e.ignore=!0),this[dc]()}[FD](e){e.pending=!0,this[So]+=1,aB.readdir(e.absolute,(r,i)=>{if(e.pending=!1,this[So]-=1,r)return this.emit("error",r);this[sB](e,i)})}[sB](e,r){this.readdirCache.set(e.absolute,r),e.readdir=r,this[dc]()}[dc](){if(!this[iB]){this[iB]=!0;for(let e=this[vo].head;e!==null&&this[So]this.warn(r,i,n),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime}}[uV](e){this[So]+=1;try{return new this[LD](e.path,this[ND](e)).on("end",()=>this[DD](e)).on("error",r=>this.emit("error",r))}catch(r){this.emit("error",r)}}[TD](){this[Eg]&&this[Eg].entry&&this[Eg].entry.resume()}[oB](e){e.piped=!0,e.readdir&&e.readdir.forEach(n=>{let s=this.prefix?e.path.slice(this.prefix.length+1)||"./":e.path,o=s==="./"?"":s.replace(/\/*$/,"/");this[nB](o+n)});let r=e.entry,i=this.zip;i?r.on("data",n=>{i.write(n)||r.pause()}):r.on("data",n=>{super.write(n)||r.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),hV=class extends MD{constructor(e){super(e);this[LD]=xNe}pause(){}resume(){}[RD](e){let r=this.follow?"statSync":"lstatSync";this[tB](e,aB[r](e.absolute))}[FD](e,r){this[sB](e,aB.readdirSync(e.absolute))}[oB](e){let r=e.entry,i=this.zip;e.readdir&&e.readdir.forEach(n=>{let s=this.prefix?e.path.slice(this.prefix.length+1)||"./":e.path,o=s==="./"?"":s.replace(/\/*$/,"/");this[nB](o+n)}),i?r.on("data",n=>{i.write(n)}):r.on("data",n=>{super[gV](n)})}};MD.Sync=hV;aV.exports=MD});var bg=E(sd=>{"use strict";var RNe=hg(),FNe=require("events").EventEmitter,ls=require("fs"),lB=process.binding("fs"),Dlt=lB.writeBuffers,NNe=lB.FSReqWrap||lB.FSReqCallback,Ig=Symbol("_autoClose"),xo=Symbol("_close"),od=Symbol("_ended"),Jt=Symbol("_fd"),pV=Symbol("_finished"),Cc=Symbol("_flags"),OD=Symbol("_flush"),KD=Symbol("_handleChunk"),UD=Symbol("_makeBuf"),HD=Symbol("_mode"),cB=Symbol("_needDrain"),yg=Symbol("_onerror"),wg=Symbol("_onopen"),GD=Symbol("_onread"),mc=Symbol("_onwrite"),FA=Symbol("_open"),NA=Symbol("_path"),Ec=Symbol("_pos"),ko=Symbol("_queue"),Bg=Symbol("_read"),dV=Symbol("_readSize"),LA=Symbol("_reading"),uB=Symbol("_remain"),CV=Symbol("_size"),gB=Symbol("_write"),Qg=Symbol("_writing"),fB=Symbol("_defaultFlag"),jD=class extends RNe{constructor(e,r){if(r=r||{},super(r),this.writable=!1,typeof e!="string")throw new TypeError("path must be a string");this[Jt]=typeof r.fd=="number"?r.fd:null,this[NA]=e,this[dV]=r.readSize||16*1024*1024,this[LA]=!1,this[CV]=typeof r.size=="number"?r.size:Infinity,this[uB]=this[CV],this[Ig]=typeof r.autoClose=="boolean"?r.autoClose:!0,typeof this[Jt]=="number"?this[Bg]():this[FA]()}get fd(){return this[Jt]}get path(){return this[NA]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[FA](){ls.open(this[NA],"r",(e,r)=>this[wg](e,r))}[wg](e,r){e?this[yg](e):(this[Jt]=r,this.emit("open",r),this[Bg]())}[UD](){return Buffer.allocUnsafe(Math.min(this[dV],this[uB]))}[Bg](){if(!this[LA]){this[LA]=!0;let e=this[UD]();if(e.length===0)return process.nextTick(()=>this[GD](null,0,e));ls.read(this[Jt],e,0,e.length,null,(r,i,n)=>this[GD](r,i,n))}}[GD](e,r,i){this[LA]=!1,e?this[yg](e):this[KD](r,i)&&this[Bg]()}[xo](){this[Ig]&&typeof this[Jt]=="number"&&(ls.close(this[Jt],e=>this.emit("close")),this[Jt]=null)}[yg](e){this[LA]=!0,this[xo](),this.emit("error",e)}[KD](e,r){let i=!1;return this[uB]-=e,e>0&&(i=super.write(ethis[wg](e,r))}[wg](e,r){this[fB]&&this[Cc]==="r+"&&e&&e.code==="ENOENT"?(this[Cc]="w",this[FA]()):e?this[yg](e):(this[Jt]=r,this.emit("open",r),this[OD]())}end(e,r){e&&this.write(e,r),this[od]=!0,!this[Qg]&&!this[ko].length&&typeof this[Jt]=="number"&&this[mc](null,0)}write(e,r){return typeof e=="string"&&(e=new Buffer(e,r)),this[od]?(this.emit("error",new Error("write() after end()")),!1):this[Jt]===null||this[Qg]||this[ko].length?(this[ko].push(e),this[cB]=!0,!1):(this[Qg]=!0,this[gB](e),!0)}[gB](e){ls.write(this[Jt],e,0,e.length,this[Ec],(r,i)=>this[mc](r,i))}[mc](e,r){e?this[yg](e):(this[Ec]!==null&&(this[Ec]+=r),this[ko].length?this[OD]():(this[Qg]=!1,this[od]&&!this[pV]?(this[pV]=!0,this[xo](),this.emit("finish")):this[cB]&&(this[cB]=!1,this.emit("drain"))))}[OD](){if(this[ko].length===0)this[od]&&this[mc](null,0);else if(this[ko].length===1)this[gB](this[ko].pop());else{let e=this[ko];this[ko]=[],LNe(this[Jt],e,this[Ec],(r,i)=>this[mc](r,i))}}[xo](){this[Ig]&&typeof this[Jt]=="number"&&(ls.close(this[Jt],e=>this.emit("close")),this[Jt]=null)}},EV=class extends YD{[FA](){let e;try{e=ls.openSync(this[NA],this[Cc],this[HD])}catch(r){if(this[fB]&&this[Cc]==="r+"&&r&&r.code==="ENOENT")return this[Cc]="w",this[FA]();throw r}this[wg](null,e)}[xo](){if(this[Ig]&&typeof this[Jt]=="number"){try{ls.closeSync(this[Jt])}catch(e){}this[Jt]=null,this.emit("close")}}[gB](e){try{this[mc](null,ls.writeSync(this[Jt],e,0,e.length,this[Ec]))}catch(r){this[mc](r,0)}}},LNe=(t,e,r,i)=>{let n=(o,a)=>i(o,a,e),s=new NNe;s.oncomplete=n,lB.writeBuffers(t,e,r,s)};sd.ReadStream=jD;sd.ReadStreamSync=mV;sd.WriteStream=YD;sd.WriteStreamSync=EV});var ld=E((Llt,IV)=>{"use strict";var TNe=Vw(),Flt=require("path"),MNe=Cg(),ONe=require("events"),KNe=Rh(),UNe=1024*1024,HNe=id(),yV=zw(),GNe=fD(),qD=Buffer.from([31,139]),cs=Symbol("state"),Ic=Symbol("writeEntry"),xa=Symbol("readEntry"),JD=Symbol("nextEntry"),wV=Symbol("processEntry"),us=Symbol("extendedHeader"),ad=Symbol("globalExtendedHeader"),TA=Symbol("meta"),BV=Symbol("emitMeta"),Ar=Symbol("buffer"),ka=Symbol("queue"),yc=Symbol("ended"),QV=Symbol("emittedEnd"),wc=Symbol("emit"),Qn=Symbol("unzip"),hB=Symbol("consumeChunk"),pB=Symbol("consumeChunkSub"),WD=Symbol("consumeBody"),bV=Symbol("consumeMeta"),vV=Symbol("consumeHeader"),dB=Symbol("consuming"),zD=Symbol("bufferConcat"),VD=Symbol("maybeEnd"),Ad=Symbol("writing"),MA=Symbol("aborted"),CB=Symbol("onDone"),Bc=Symbol("sawValidEntry"),mB=Symbol("sawNullBlock"),EB=Symbol("sawEOF"),jNe=t=>!0;IV.exports=TNe(class extends ONe{constructor(e){e=e||{},super(e),this.file=e.file||"",this[Bc]=null,this.on(CB,r=>{(this[cs]==="begin"||this[Bc]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),e.ondone?this.on(CB,e.ondone):this.on(CB,r=>{this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||UNe,this.filter=typeof e.filter=="function"?e.filter:jNe,this.writable=!0,this.readable=!1,this[ka]=new KNe,this[Ar]=null,this[xa]=null,this[Ic]=null,this[cs]="begin",this[TA]="",this[us]=null,this[ad]=null,this[yc]=!1,this[Qn]=null,this[MA]=!1,this[mB]=!1,this[EB]=!1,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),typeof e.onentry=="function"&&this.on("entry",e.onentry)}[vV](e,r){this[Bc]===null&&(this[Bc]=!1);let i;try{i=new MNe(e,r,this[us],this[ad])}catch(n){return this.warn("TAR_ENTRY_INVALID",n)}if(i.nullBlock)this[mB]?(this[EB]=!0,this[cs]==="begin"&&(this[cs]="header"),this[wc]("eof")):(this[mB]=!0,this[wc]("nullBlock"));else if(this[mB]=!1,!i.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:i});else if(!i.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:i});else{let n=i.type;if(/^(Symbolic)?Link$/.test(n)&&!i.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:i});else if(!/^(Symbolic)?Link$/.test(n)&&i.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:i});else{let s=this[Ic]=new HNe(i,this[us],this[ad]);if(!this[Bc])if(s.remain){let o=()=>{s.invalid||(this[Bc]=!0)};s.on("end",o)}else this[Bc]=!0;s.meta?s.size>this.maxMetaEntrySize?(s.ignore=!0,this[wc]("ignoredEntry",s),this[cs]="ignore",s.resume()):s.size>0&&(this[TA]="",s.on("data",o=>this[TA]+=o),this[cs]="meta"):(this[us]=null,s.ignore=s.ignore||!this.filter(s.path,s),s.ignore?(this[wc]("ignoredEntry",s),this[cs]=s.remain?"ignore":"header",s.resume()):(s.remain?this[cs]="body":(this[cs]="header",s.end()),this[xa]?this[ka].push(s):(this[ka].push(s),this[JD]())))}}}[wV](e){let r=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[xa]=e,this.emit("entry",e),e.emittedEnd||(e.on("end",i=>this[JD]()),r=!1)):(this[xa]=null,r=!1),r}[JD](){do;while(this[wV](this[ka].shift()));if(!this[ka].length){let e=this[xa];!e||e.flowing||e.size===e.remain?this[Ad]||this.emit("drain"):e.once("drain",i=>this.emit("drain"))}}[WD](e,r){let i=this[Ic],n=i.blockRemain,s=n>=e.length&&r===0?e:e.slice(r,r+n);return i.write(s),i.blockRemain||(this[cs]="header",this[Ic]=null,i.end()),s.length}[bV](e,r){let i=this[Ic],n=this[WD](e,r);return this[Ic]||this[BV](i),n}[wc](e,r,i){!this[ka].length&&!this[xa]?this.emit(e,r,i):this[ka].push([e,r,i])}[BV](e){switch(this[wc]("meta",this[TA]),e.type){case"ExtendedHeader":case"OldExtendedHeader":this[us]=yV.parse(this[TA],this[us],!1);break;case"GlobalExtendedHeader":this[ad]=yV.parse(this[TA],this[ad],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":this[us]=this[us]||Object.create(null),this[us].path=this[TA].replace(/\0.*/,"");break;case"NextFileHasLongLinkpath":this[us]=this[us]||Object.create(null),this[us].linkpath=this[TA].replace(/\0.*/,"");break;default:throw new Error("unknown meta: "+e.type)}}abort(e){this[MA]=!0,this.emit("abort",e),this.warn("TAR_ABORT",e,{recoverable:!1})}write(e){if(this[MA])return;if(this[Qn]===null&&e){if(this[Ar]&&(e=Buffer.concat([this[Ar],e]),this[Ar]=null),e.lengththis[hB](s)),this[Qn].on("error",s=>this.abort(s)),this[Qn].on("end",s=>{this[yc]=!0,this[hB]()}),this[Ad]=!0;let n=this[Qn][i?"end":"write"](e);return this[Ad]=!1,n}}this[Ad]=!0,this[Qn]?this[Qn].write(e):this[hB](e),this[Ad]=!1;let r=this[ka].length?!1:this[xa]?this[xa].flowing:!0;return!r&&!this[ka].length&&this[xa].once("drain",i=>this.emit("drain")),r}[zD](e){e&&!this[MA]&&(this[Ar]=this[Ar]?Buffer.concat([this[Ar],e]):e)}[VD](){if(this[yc]&&!this[QV]&&!this[MA]&&!this[dB]){this[QV]=!0;let e=this[Ic];if(e&&e.blockRemain){let r=this[Ar]?this[Ar].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${e.blockRemain} more bytes, only ${r} available)`,{entry:e}),this[Ar]&&e.write(this[Ar]),e.end()}this[wc](CB)}}[hB](e){if(this[dB])this[zD](e);else if(!e&&!this[Ar])this[VD]();else{if(this[dB]=!0,this[Ar]){this[zD](e);let r=this[Ar];this[Ar]=null,this[pB](r)}else this[pB](e);for(;this[Ar]&&this[Ar].length>=512&&!this[MA]&&!this[EB];){let r=this[Ar];this[Ar]=null,this[pB](r)}this[dB]=!1}(!this[Ar]||this[yc])&&this[VD]()}[pB](e){let r=0,i=e.length;for(;r+512<=i&&!this[MA]&&!this[EB];)switch(this[cs]){case"begin":case"header":this[vV](e,r),r+=512;break;case"ignore":case"body":r+=this[WD](e,r);break;case"meta":r+=this[bV](e,r);break;default:throw new Error("invalid state: "+this[cs])}r{"use strict";var YNe=fg(),xV=ld(),vg=require("fs"),qNe=bg(),kV=require("path"),Tlt=SV.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let i=YNe(t);if(i.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!i.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&WNe(i,e),i.noResume||JNe(i),i.file&&i.sync?zNe(i):i.file?VNe(i,r):PV(i)},JNe=t=>{let e=t.onentry;t.onentry=e?r=>{e(r),r.resume()}:r=>r.resume()},WNe=(t,e)=>{let r=new Map(e.map(s=>[s.replace(/\/+$/,""),!0])),i=t.filter,n=(s,o)=>{let a=o||kV.parse(s).root||".",l=s===a?!1:r.has(s)?r.get(s):n(kV.dirname(s),a);return r.set(s,l),l};t.filter=i?(s,o)=>i(s,o)&&n(s.replace(/\/+$/,"")):s=>n(s.replace(/\/+$/,""))},zNe=t=>{let e=PV(t),r=t.file,i=!0,n;try{let s=vg.statSync(r),o=t.maxReadSize||16*1024*1024;if(s.size{let r=new xV(t),i=t.maxReadSize||16*1024*1024,n=t.file,s=new Promise((o,a)=>{r.on("error",a),r.on("end",o),vg.stat(n,(l,c)=>{if(l)a(l);else{let u=new qNe.ReadStream(n,{readSize:i,size:c.size});u.on("error",a),u.pipe(r)}})});return e?s.then(e,e):s},PV=t=>new xV(t)});var TV=E((Ult,DV)=>{"use strict";var _Ne=fg(),yB=AB(),Olt=require("fs"),RV=bg(),FV=IB(),NV=require("path"),Klt=DV.exports=(t,e,r)=>{if(typeof e=="function"&&(r=e),Array.isArray(t)&&(e=t,t={}),!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");e=Array.from(e);let i=_Ne(t);if(i.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!i.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return i.file&&i.sync?XNe(i,e):i.file?ZNe(i,e,r):i.sync?$Ne(i,e):eLe(i,e)},XNe=(t,e)=>{let r=new yB.Sync(t),i=new RV.WriteStreamSync(t.file,{mode:t.mode||438});r.pipe(i),LV(r,e)},ZNe=(t,e,r)=>{let i=new yB(t),n=new RV.WriteStream(t.file,{mode:t.mode||438});i.pipe(n);let s=new Promise((o,a)=>{n.on("error",a),n.on("close",o),i.on("error",a)});return _D(i,e),r?s.then(r,r):s},LV=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?FV({file:NV.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:i=>t.add(i)}):t.add(r)}),t.end()},_D=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return FV({file:NV.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:i=>t.add(i)}).then(i=>_D(t,e));t.add(r)}t.end()},$Ne=(t,e)=>{let r=new yB.Sync(t);return LV(r,e),r},eLe=(t,e)=>{let r=new yB(t);return _D(r,e),r}});var XD=E((jlt,MV)=>{"use strict";var tLe=fg(),OV=AB(),Hlt=ld(),gs=require("fs"),KV=bg(),UV=IB(),HV=require("path"),GV=Cg(),Glt=MV.exports=(t,e,r)=>{let i=tLe(t);if(!i.file)throw new TypeError("file is required");if(i.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),i.sync?rLe(i,e):iLe(i,e,r)},rLe=(t,e)=>{let r=new OV.Sync(t),i=!0,n,s;try{try{n=gs.openSync(t.file,"r+")}catch(l){if(l.code==="ENOENT")n=gs.openSync(t.file,"w+");else throw l}let o=gs.fstatSync(n),a=Buffer.alloc(512);e:for(s=0;so.size)break;s+=c,t.mtimeCache&&t.mtimeCache.set(l.path,l.mtime)}i=!1,nLe(t,r,s,n,e)}finally{if(i)try{gs.closeSync(n)}catch(o){}}},nLe=(t,e,r,i,n)=>{let s=new KV.WriteStreamSync(t.file,{fd:i,start:r});e.pipe(s),sLe(e,n)},iLe=(t,e,r)=>{e=Array.from(e);let i=new OV(t),n=(o,a,l)=>{let c=(p,d)=>{p?gs.close(o,m=>l(p)):l(null,d)},u=0;if(a===0)return c(null,0);let g=0,f=Buffer.alloc(512),h=(p,d)=>{if(p)return c(p);if(g+=d,g<512&&d)return gs.read(o,f,g,f.length-g,u+g,h);if(u===0&&f[0]===31&&f[1]===139)return c(new Error("cannot append to compressed archives"));if(g<512)return c(null,u);let m=new GV(f);if(!m.cksumValid)return c(null,u);let I=512*Math.ceil(m.size/512);if(u+I+512>a||(u+=I+512,u>=a))return c(null,u);t.mtimeCache&&t.mtimeCache.set(m.path,m.mtime),g=0,gs.read(o,f,0,512,u,h)};gs.read(o,f,0,512,u,h)},s=new Promise((o,a)=>{i.on("error",a);let l="r+",c=(u,g)=>{if(u&&u.code==="ENOENT"&&l==="r+")return l="w+",gs.open(t.file,l,c);if(u)return a(u);gs.fstat(g,(f,h)=>{if(f)return a(f);n(g,h.size,(p,d)=>{if(p)return a(p);let m=new KV.WriteStream(t.file,{fd:g,start:d});i.pipe(m),m.on("error",a),m.on("close",o),jV(i,e)})})};gs.open(t.file,l,c)});return r?s.then(r,r):s},sLe=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?UV({file:HV.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:i=>t.add(i)}):t.add(r)}),t.end()},jV=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return UV({file:HV.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:i=>t.add(i)}).then(i=>jV(t,e));t.add(r)}t.end()}});var qV=E((qlt,YV)=>{"use strict";var oLe=fg(),aLe=XD(),Ylt=YV.exports=(t,e,r)=>{let i=oLe(t);if(!i.file)throw new TypeError("file is required");if(i.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),ALe(i),aLe(i,e,r)},ALe=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(r,i)=>e(r,i)&&!(t.mtimeCache.get(r)>i.mtime):(r,i)=>!(t.mtimeCache.get(r)>i.mtime)}});var zV=E((Jlt,JV)=>{var{promisify:WV}=require("util"),OA=require("fs"),lLe=t=>{if(!t)t={mode:511,fs:OA};else if(typeof t=="object")t=P({mode:511,fs:OA},t);else if(typeof t=="number")t={mode:t,fs:OA};else if(typeof t=="string")t={mode:parseInt(t,8),fs:OA};else throw new TypeError("invalid options argument");return t.mkdir=t.mkdir||t.fs.mkdir||OA.mkdir,t.mkdirAsync=WV(t.mkdir),t.stat=t.stat||t.fs.stat||OA.stat,t.statAsync=WV(t.stat),t.statSync=t.statSync||t.fs.statSync||OA.statSync,t.mkdirSync=t.mkdirSync||t.fs.mkdirSync||OA.mkdirSync,t};JV.exports=lLe});var _V=E((Wlt,VV)=>{var cLe=process.env.__TESTING_MKDIRP_PLATFORM__||process.platform,{resolve:uLe,parse:gLe}=require("path"),fLe=t=>{if(/\0/.test(t))throw Object.assign(new TypeError("path must be a string without null bytes"),{path:t,code:"ERR_INVALID_ARG_VALUE"});if(t=uLe(t),cLe==="win32"){let e=/[*|"<>?:]/,{root:r}=gLe(t);if(e.test(t.substr(r.length)))throw Object.assign(new Error("Illegal characters in path."),{path:t,code:"EINVAL"})}return t};VV.exports=fLe});var t7=E((zlt,XV)=>{var{dirname:ZV}=require("path"),$V=(t,e,r=void 0)=>r===e?Promise.resolve():t.statAsync(e).then(i=>i.isDirectory()?r:void 0,i=>i.code==="ENOENT"?$V(t,ZV(e),e):void 0),e7=(t,e,r=void 0)=>{if(r!==e)try{return t.statSync(e).isDirectory()?r:void 0}catch(i){return i.code==="ENOENT"?e7(t,ZV(e),e):void 0}};XV.exports={findMade:$V,findMadeSync:e7}});var eR=E((Vlt,r7)=>{var{dirname:i7}=require("path"),ZD=(t,e,r)=>{e.recursive=!1;let i=i7(t);return i===t?e.mkdirAsync(t,e).catch(n=>{if(n.code!=="EISDIR")throw n}):e.mkdirAsync(t,e).then(()=>r||t,n=>{if(n.code==="ENOENT")return ZD(i,e).then(s=>ZD(t,e,s));if(n.code!=="EEXIST"&&n.code!=="EROFS")throw n;return e.statAsync(t).then(s=>{if(s.isDirectory())return r;throw n},()=>{throw n})})},$D=(t,e,r)=>{let i=i7(t);if(e.recursive=!1,i===t)try{return e.mkdirSync(t,e)}catch(n){if(n.code!=="EISDIR")throw n;return}try{return e.mkdirSync(t,e),r||t}catch(n){if(n.code==="ENOENT")return $D(t,e,$D(i,e,r));if(n.code!=="EEXIST"&&n.code!=="EROFS")throw n;try{if(!e.statSync(t).isDirectory())throw n}catch(s){throw n}}};r7.exports={mkdirpManual:ZD,mkdirpManualSync:$D}});var o7=E((_lt,n7)=>{var{dirname:s7}=require("path"),{findMade:hLe,findMadeSync:pLe}=t7(),{mkdirpManual:dLe,mkdirpManualSync:CLe}=eR(),mLe=(t,e)=>(e.recursive=!0,s7(t)===t?e.mkdirAsync(t,e):hLe(e,t).then(i=>e.mkdirAsync(t,e).then(()=>i).catch(n=>{if(n.code==="ENOENT")return dLe(t,e);throw n}))),ELe=(t,e)=>{if(e.recursive=!0,s7(t)===t)return e.mkdirSync(t,e);let i=pLe(e,t);try{return e.mkdirSync(t,e),i}catch(n){if(n.code==="ENOENT")return CLe(t,e);throw n}};n7.exports={mkdirpNative:mLe,mkdirpNativeSync:ELe}});var c7=E((Xlt,a7)=>{var A7=require("fs"),ILe=process.env.__TESTING_MKDIRP_NODE_VERSION__||process.version,tR=ILe.replace(/^v/,"").split("."),l7=+tR[0]>10||+tR[0]==10&&+tR[1]>=12,yLe=l7?t=>t.mkdir===A7.mkdir:()=>!1,wLe=l7?t=>t.mkdirSync===A7.mkdirSync:()=>!1;a7.exports={useNative:yLe,useNativeSync:wLe}});var d7=E((Zlt,u7)=>{var Sg=zV(),xg=_V(),{mkdirpNative:g7,mkdirpNativeSync:f7}=o7(),{mkdirpManual:h7,mkdirpManualSync:p7}=eR(),{useNative:BLe,useNativeSync:QLe}=c7(),kg=(t,e)=>(t=xg(t),e=Sg(e),BLe(e)?g7(t,e):h7(t,e)),bLe=(t,e)=>(t=xg(t),e=Sg(e),QLe(e)?f7(t,e):p7(t,e));kg.sync=bLe;kg.native=(t,e)=>g7(xg(t),Sg(e));kg.manual=(t,e)=>h7(xg(t),Sg(e));kg.nativeSync=(t,e)=>f7(xg(t),Sg(e));kg.manualSync=(t,e)=>p7(xg(t),Sg(e));u7.exports=kg});var B7=E(($lt,C7)=>{"use strict";var fs=require("fs"),Qc=require("path"),vLe=fs.lchown?"lchown":"chown",SLe=fs.lchownSync?"lchownSync":"chownSync",m7=fs.lchown&&!process.version.match(/v1[1-9]+\./)&&!process.version.match(/v10\.[6-9]/),E7=(t,e,r)=>{try{return fs[SLe](t,e,r)}catch(i){if(i.code!=="ENOENT")throw i}},xLe=(t,e,r)=>{try{return fs.chownSync(t,e,r)}catch(i){if(i.code!=="ENOENT")throw i}},kLe=m7?(t,e,r,i)=>n=>{!n||n.code!=="EISDIR"?i(n):fs.chown(t,e,r,i)}:(t,e,r,i)=>i,rR=m7?(t,e,r)=>{try{return E7(t,e,r)}catch(i){if(i.code!=="EISDIR")throw i;xLe(t,e,r)}}:(t,e,r)=>E7(t,e,r),PLe=process.version,I7=(t,e,r)=>fs.readdir(t,e,r),DLe=(t,e)=>fs.readdirSync(t,e);/^v4\./.test(PLe)&&(I7=(t,e,r)=>fs.readdir(t,r));var wB=(t,e,r,i)=>{fs[vLe](t,e,r,kLe(t,e,r,n=>{i(n&&n.code!=="ENOENT"?n:null)}))},y7=(t,e,r,i,n)=>{if(typeof e=="string")return fs.lstat(Qc.resolve(t,e),(s,o)=>{if(s)return n(s.code!=="ENOENT"?s:null);o.name=e,y7(t,o,r,i,n)});if(e.isDirectory())iR(Qc.resolve(t,e.name),r,i,s=>{if(s)return n(s);let o=Qc.resolve(t,e.name);wB(o,r,i,n)});else{let s=Qc.resolve(t,e.name);wB(s,r,i,n)}},iR=(t,e,r,i)=>{I7(t,{withFileTypes:!0},(n,s)=>{if(n){if(n.code==="ENOENT")return i();if(n.code!=="ENOTDIR"&&n.code!=="ENOTSUP")return i(n)}if(n||!s.length)return wB(t,e,r,i);let o=s.length,a=null,l=c=>{if(!a){if(c)return i(a=c);if(--o==0)return wB(t,e,r,i)}};s.forEach(c=>y7(t,c,e,r,l))})},RLe=(t,e,r,i)=>{if(typeof e=="string")try{let n=fs.lstatSync(Qc.resolve(t,e));n.name=e,e=n}catch(n){if(n.code==="ENOENT")return;throw n}e.isDirectory()&&w7(Qc.resolve(t,e.name),r,i),rR(Qc.resolve(t,e.name),r,i)},w7=(t,e,r)=>{let i;try{i=DLe(t,{withFileTypes:!0})}catch(n){if(n.code==="ENOENT")return;if(n.code==="ENOTDIR"||n.code==="ENOTSUP")return rR(t,e,r);throw n}return i&&i.length&&i.forEach(n=>RLe(t,n,e,r)),rR(t,e,r)};C7.exports=iR;iR.sync=w7});var S7=E((rct,nR)=>{"use strict";var Q7=d7(),hs=require("fs"),BB=require("path"),b7=B7(),sR=class extends Error{constructor(e,r){super("Cannot extract through symbolic link");this.path=r,this.symlink=e}get name(){return"SylinkError"}},cd=class extends Error{constructor(e,r){super(r+": Cannot cd into '"+e+"'");this.path=e,this.code=r}get name(){return"CwdError"}},ect=nR.exports=(t,e,r)=>{let i=e.umask,n=e.mode|448,s=(n&i)!=0,o=e.uid,a=e.gid,l=typeof o=="number"&&typeof a=="number"&&(o!==e.processUid||a!==e.processGid),c=e.preserve,u=e.unlink,g=e.cache,f=e.cwd,h=(m,I)=>{m?r(m):(g.set(t,!0),I&&l?b7(I,o,a,B=>h(B)):s?hs.chmod(t,n,r):r())};if(g&&g.get(t)===!0)return h();if(t===f)return hs.stat(t,(m,I)=>{(m||!I.isDirectory())&&(m=new cd(t,m&&m.code||"ENOTDIR")),h(m)});if(c)return Q7(t,{mode:n}).then(m=>h(null,m),h);let d=BB.relative(f,t).split(/\/|\\/);QB(f,d,n,g,u,f,null,h)},QB=(t,e,r,i,n,s,o,a)=>{if(!e.length)return a(null,o);let l=e.shift(),c=t+"/"+l;if(i.get(c))return QB(c,e,r,i,n,s,o,a);hs.mkdir(c,r,v7(c,e,r,i,n,s,o,a))},v7=(t,e,r,i,n,s,o,a)=>l=>{if(l){if(l.path&&BB.dirname(l.path)===s&&(l.code==="ENOTDIR"||l.code==="ENOENT"))return a(new cd(s,l.code));hs.lstat(t,(c,u)=>{if(c)a(c);else if(u.isDirectory())QB(t,e,r,i,n,s,o,a);else if(n)hs.unlink(t,g=>{if(g)return a(g);hs.mkdir(t,r,v7(t,e,r,i,n,s,o,a))});else{if(u.isSymbolicLink())return a(new sR(t,t+"/"+e.join("/")));a(l)}})}else o=o||t,QB(t,e,r,i,n,s,o,a)},tct=nR.exports.sync=(t,e)=>{let r=e.umask,i=e.mode|448,n=(i&r)!=0,s=e.uid,o=e.gid,a=typeof s=="number"&&typeof o=="number"&&(s!==e.processUid||o!==e.processGid),l=e.preserve,c=e.unlink,u=e.cache,g=e.cwd,f=m=>{u.set(t,!0),m&&a&&b7.sync(m,s,o),n&&hs.chmodSync(t,i)};if(u&&u.get(t)===!0)return f();if(t===g){let m=!1,I="ENOTDIR";try{m=hs.statSync(t).isDirectory()}catch(B){I=B.code}finally{if(!m)throw new cd(t,I)}f();return}if(l)return f(Q7.sync(t,i));let p=BB.relative(g,t).split(/\/|\\/),d=null;for(let m=p.shift(),I=g;m&&(I+="/"+m);m=p.shift())if(!u.get(I))try{hs.mkdirSync(I,i),d=d||I,u.set(I,!0)}catch(B){if(B.path&&BB.dirname(B.path)===g&&(B.code==="ENOTDIR"||B.code==="ENOENT"))return new cd(g,B.code);let b=hs.lstatSync(I);if(b.isDirectory()){u.set(I,!0);continue}else if(c){hs.unlinkSync(I),hs.mkdirSync(I,i),d=d||I,u.set(I,!0);continue}else if(b.isSymbolicLink())return new sR(I,I+"/"+p.join("/"))}return f(d)}});var P7=E((ict,x7)=>{var k7=require("assert");x7.exports=()=>{let t=new Map,e=new Map,{join:r}=require("path"),i=u=>r(u).split(/[\\\/]/).slice(0,-1).reduce((g,f)=>g.length?g.concat(r(g[g.length-1],f)):[f],[]),n=new Set,s=u=>{let g=e.get(u);if(!g)throw new Error("function does not have any path reservations");return{paths:g.paths.map(f=>t.get(f)),dirs:[...g.dirs].map(f=>t.get(f))}},o=u=>{let{paths:g,dirs:f}=s(u);return g.every(h=>h[0]===u)&&f.every(h=>h[0]instanceof Set&&h[0].has(u))},a=u=>n.has(u)||!o(u)?!1:(n.add(u),u(()=>l(u)),!0),l=u=>{if(!n.has(u))return!1;let{paths:g,dirs:f}=e.get(u),h=new Set;return g.forEach(p=>{let d=t.get(p);k7.equal(d[0],u),d.length===1?t.delete(p):(d.shift(),typeof d[0]=="function"?h.add(d[0]):d[0].forEach(m=>h.add(m)))}),f.forEach(p=>{let d=t.get(p);k7(d[0]instanceof Set),d[0].size===1&&d.length===1?t.delete(p):d[0].size===1?(d.shift(),h.add(d[0])):d[0].delete(u)}),n.delete(u),h.forEach(p=>a(p)),!0};return{check:o,reserve:(u,g)=>{let f=new Set(u.map(h=>i(h)).reduce((h,p)=>h.concat(p)));return e.set(g,{dirs:f,paths:u}),u.forEach(h=>{let p=t.get(h);p?p.push(g):t.set(h,[g])}),f.forEach(h=>{let p=t.get(h);p?p[p.length-1]instanceof Set?p[p.length-1].add(g):p.push(new Set([g])):t.set(h,[new Set([g])])}),a(g)}}}});var F7=E((nct,D7)=>{var FLe=process.env.__FAKE_PLATFORM__||process.platform,NLe=FLe==="win32",LLe=global.__FAKE_TESTING_FS__||require("fs"),{O_CREAT:TLe,O_TRUNC:MLe,O_WRONLY:OLe,UV_FS_O_FILEMAP:R7=0}=LLe.constants,KLe=NLe&&!!R7,ULe=512*1024,HLe=R7|MLe|TLe|OLe;D7.exports=KLe?t=>t"w"});var hR=E((Act,N7)=>{"use strict";var GLe=require("assert"),sct=require("events").EventEmitter,jLe=ld(),Ut=require("fs"),YLe=bg(),Pa=require("path"),oR=S7(),oct=oR.sync,L7=yD(),qLe=P7(),T7=Symbol("onEntry"),aR=Symbol("checkFs"),M7=Symbol("checkFs2"),AR=Symbol("isReusable"),Da=Symbol("makeFs"),lR=Symbol("file"),cR=Symbol("directory"),bB=Symbol("link"),O7=Symbol("symlink"),K7=Symbol("hardlink"),U7=Symbol("unsupported"),act=Symbol("unknown"),H7=Symbol("checkPath"),Pg=Symbol("mkdir"),nn=Symbol("onError"),vB=Symbol("pending"),G7=Symbol("pend"),Dg=Symbol("unpend"),uR=Symbol("ended"),gR=Symbol("maybeClose"),fR=Symbol("skip"),ud=Symbol("doChown"),gd=Symbol("uid"),fd=Symbol("gid"),j7=require("crypto"),Y7=F7(),SB=()=>{throw new Error("sync function called cb somehow?!?")},JLe=(t,e)=>{if(process.platform!=="win32")return Ut.unlink(t,e);let r=t+".DELETE."+j7.randomBytes(16).toString("hex");Ut.rename(t,r,i=>{if(i)return e(i);Ut.unlink(r,e)})},WLe=t=>{if(process.platform!=="win32")return Ut.unlinkSync(t);let e=t+".DELETE."+j7.randomBytes(16).toString("hex");Ut.renameSync(t,e),Ut.unlinkSync(e)},q7=(t,e,r)=>t===t>>>0?t:e===e>>>0?e:r,xB=class extends jLe{constructor(e){if(e||(e={}),e.ondone=r=>{this[uR]=!0,this[gR]()},super(e),this.reservations=qLe(),this.transform=typeof e.transform=="function"?e.transform:null,this.writable=!0,this.readable=!1,this[vB]=0,this[uR]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid=="number"||typeof e.gid=="number"){if(typeof e.uid!="number"||typeof e.gid!="number")throw new TypeError("cannot set owner without number uid and gid");if(e.preserveOwner)throw new TypeError("cannot preserve owner in archive and also set owner explicitly");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!="number"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||process.platform==="win32",this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=Pa.resolve(e.cwd||process.cwd()),this.strip=+e.strip||0,this.processUmask=process.umask(),this.umask=typeof e.umask=="number"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on("entry",r=>this[T7](r))}warn(e,r,i={}){return(e==="TAR_BAD_ARCHIVE"||e==="TAR_ABORT")&&(i.recoverable=!1),super.warn(e,r,i)}[gR](){this[uR]&&this[vB]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close"))}[H7](e){if(this.strip){let r=e.path.split(/\/|\\/);if(r.length=this.strip&&(e.linkpath=i.slice(this.strip).join("/"))}}if(!this.preservePaths){let r=e.path;if(r.match(/(^|\/|\\)\.\.(\\|\/|$)/))return this.warn("TAR_ENTRY_ERROR","path contains '..'",{entry:e,path:r}),!1;if(Pa.win32.isAbsolute(r)){let i=Pa.win32.parse(r);e.path=r.substr(i.root.length);let n=i.root;this.warn("TAR_ENTRY_INFO",`stripping ${n} from absolute path`,{entry:e,path:r})}}if(this.win32){let r=Pa.win32.parse(e.path);e.path=r.root===""?L7.encode(e.path):r.root+L7.encode(e.path.substr(r.root.length))}return Pa.isAbsolute(e.path)?e.absolute=e.path:e.absolute=Pa.resolve(this.cwd,e.path),!0}[T7](e){if(!this[H7](e))return e.resume();switch(GLe.equal(typeof e.absolute,"string"),e.type){case"Directory":case"GNUDumpDir":e.mode&&(e.mode=e.mode|448);case"File":case"OldFile":case"ContiguousFile":case"Link":case"SymbolicLink":return this[aR](e);case"CharacterDevice":case"BlockDevice":case"FIFO":return this[U7](e)}}[nn](e,r){e.name==="CwdError"?this.emit("error",e):(this.warn("TAR_ENTRY_ERROR",e,{entry:r}),this[Dg](),r.resume())}[Pg](e,r,i){oR(e,{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r},i)}[ud](e){return this.forceChown||this.preserveOwner&&(typeof e.uid=="number"&&e.uid!==this.processUid||typeof e.gid=="number"&&e.gid!==this.processGid)||typeof this.uid=="number"&&this.uid!==this.processUid||typeof this.gid=="number"&&this.gid!==this.processGid}[gd](e){return q7(this.uid,e.uid,this.processUid)}[fd](e){return q7(this.gid,e.gid,this.processGid)}[lR](e,r){let i=e.mode&4095||this.fmode,n=new YLe.WriteStream(e.absolute,{flags:Y7(e.size),mode:i,autoClose:!1});n.on("error",l=>this[nn](l,e));let s=1,o=l=>{if(l)return this[nn](l,e);--s==0&&Ut.close(n.fd,c=>{r(),c?this[nn](c,e):this[Dg]()})};n.on("finish",l=>{let c=e.absolute,u=n.fd;if(e.mtime&&!this.noMtime){s++;let g=e.atime||new Date,f=e.mtime;Ut.futimes(u,g,f,h=>h?Ut.utimes(c,g,f,p=>o(p&&h)):o())}if(this[ud](e)){s++;let g=this[gd](e),f=this[fd](e);Ut.fchown(u,g,f,h=>h?Ut.chown(c,g,f,p=>o(p&&h)):o())}o()});let a=this.transform&&this.transform(e)||e;a!==e&&(a.on("error",l=>this[nn](l,e)),e.pipe(a)),a.pipe(n)}[cR](e,r){let i=e.mode&4095||this.dmode;this[Pg](e.absolute,i,n=>{if(n)return r(),this[nn](n,e);let s=1,o=a=>{--s==0&&(r(),this[Dg](),e.resume())};e.mtime&&!this.noMtime&&(s++,Ut.utimes(e.absolute,e.atime||new Date,e.mtime,o)),this[ud](e)&&(s++,Ut.chown(e.absolute,this[gd](e),this[fd](e),o)),o()})}[U7](e){e.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[O7](e,r){this[bB](e,e.linkpath,"symlink",r)}[K7](e,r){this[bB](e,Pa.resolve(this.cwd,e.linkpath),"link",r)}[G7](){this[vB]++}[Dg](){this[vB]--,this[gR]()}[fR](e){this[Dg](),e.resume()}[AR](e,r){return e.type==="File"&&!this.unlink&&r.isFile()&&r.nlink<=1&&process.platform!=="win32"}[aR](e){this[G7]();let r=[e.path];e.linkpath&&r.push(e.linkpath),this.reservations.reserve(r,i=>this[M7](e,i))}[M7](e,r){this[Pg](Pa.dirname(e.absolute),this.dmode,i=>{if(i)return r(),this[nn](i,e);Ut.lstat(e.absolute,(n,s)=>{s&&(this.keep||this.newer&&s.mtime>e.mtime)?(this[fR](e),r()):n||this[AR](e,s)?this[Da](null,e,r):s.isDirectory()?e.type==="Directory"?!e.mode||(s.mode&4095)===e.mode?this[Da](null,e,r):Ut.chmod(e.absolute,e.mode,o=>this[Da](o,e,r)):Ut.rmdir(e.absolute,o=>this[Da](o,e,r)):JLe(e.absolute,o=>this[Da](o,e,r))})})}[Da](e,r,i){if(e)return this[nn](e,r);switch(r.type){case"File":case"OldFile":case"ContiguousFile":return this[lR](r,i);case"Link":return this[K7](r,i);case"SymbolicLink":return this[O7](r,i);case"Directory":case"GNUDumpDir":return this[cR](r,i)}}[bB](e,r,i,n){Ut[i](r,e.absolute,s=>{if(s)return this[nn](s,e);n(),this[Dg](),e.resume()})}},J7=class extends xB{constructor(e){super(e)}[aR](e){let r=this[Pg](Pa.dirname(e.absolute),this.dmode,SB);if(r)return this[nn](r,e);try{let i=Ut.lstatSync(e.absolute);if(this.keep||this.newer&&i.mtime>e.mtime)return this[fR](e);if(this[AR](e,i))return this[Da](null,e,SB);try{return i.isDirectory()?e.type==="Directory"?e.mode&&(i.mode&4095)!==e.mode&&Ut.chmodSync(e.absolute,e.mode):Ut.rmdirSync(e.absolute):WLe(e.absolute),this[Da](null,e,SB)}catch(n){return this[nn](n,e)}}catch(i){return this[Da](null,e,SB)}}[lR](e,r){let i=e.mode&4095||this.fmode,n=l=>{let c;try{Ut.closeSync(o)}catch(u){c=u}(l||c)&&this[nn](l||c,e)},s,o;try{o=Ut.openSync(e.absolute,Y7(e.size),i)}catch(l){return n(l)}let a=this.transform&&this.transform(e)||e;a!==e&&(a.on("error",l=>this[nn](l,e)),e.pipe(a)),a.on("data",l=>{try{Ut.writeSync(o,l,0,l.length)}catch(c){n(c)}}),a.on("end",l=>{let c=null;if(e.mtime&&!this.noMtime){let u=e.atime||new Date,g=e.mtime;try{Ut.futimesSync(o,u,g)}catch(f){try{Ut.utimesSync(e.absolute,u,g)}catch(h){c=f}}}if(this[ud](e)){let u=this[gd](e),g=this[fd](e);try{Ut.fchownSync(o,u,g)}catch(f){try{Ut.chownSync(e.absolute,u,g)}catch(h){c=c||f}}}n(c)})}[cR](e,r){let i=e.mode&4095||this.dmode,n=this[Pg](e.absolute,i);if(n)return this[nn](n,e);if(e.mtime&&!this.noMtime)try{Ut.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch(s){}if(this[ud](e))try{Ut.chownSync(e.absolute,this[gd](e),this[fd](e))}catch(s){}e.resume()}[Pg](e,r){try{return oR.sync(e,{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r})}catch(i){return i}}[bB](e,r,i,n){try{Ut[i+"Sync"](r,e.absolute),e.resume()}catch(s){return this[nn](s,e)}}};xB.Sync=J7;N7.exports=xB});var X7=E((cct,W7)=>{"use strict";var zLe=fg(),kB=hR(),z7=require("fs"),V7=bg(),_7=require("path"),lct=W7.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let i=zLe(t);if(i.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!i.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&VLe(i,e),i.file&&i.sync?_Le(i):i.file?XLe(i,r):i.sync?ZLe(i):$Le(i)},VLe=(t,e)=>{let r=new Map(e.map(s=>[s.replace(/\/+$/,""),!0])),i=t.filter,n=(s,o)=>{let a=o||_7.parse(s).root||".",l=s===a?!1:r.has(s)?r.get(s):n(_7.dirname(s),a);return r.set(s,l),l};t.filter=i?(s,o)=>i(s,o)&&n(s.replace(/\/+$/,"")):s=>n(s.replace(/\/+$/,""))},_Le=t=>{let e=new kB.Sync(t),r=t.file,i=!0,n,s=z7.statSync(r),o=t.maxReadSize||16*1024*1024;new V7.ReadStreamSync(r,{readSize:o,size:s.size}).pipe(e)},XLe=(t,e)=>{let r=new kB(t),i=t.maxReadSize||16*1024*1024,n=t.file,s=new Promise((o,a)=>{r.on("error",a),r.on("close",o),z7.stat(n,(l,c)=>{if(l)a(l);else{let u=new V7.ReadStream(n,{readSize:i,size:c.size});u.on("error",a),u.pipe(r)}})});return e?s.then(e,e):s},ZLe=t=>new kB.Sync(t),$Le=t=>new kB(t)});var Z7=E($r=>{"use strict";$r.c=$r.create=TV();$r.r=$r.replace=XD();$r.t=$r.list=IB();$r.u=$r.update=qV();$r.x=$r.extract=X7();$r.Pack=AB();$r.Unpack=hR();$r.Parse=ld();$r.ReadEntry=id();$r.WriteEntry=xD();$r.Header=Cg();$r.Pax=zw();$r.types=rd()});var e_=E((gct,pR)=>{"use strict";var eTe=Object.prototype.hasOwnProperty,sn="~";function hd(){}Object.create&&(hd.prototype=Object.create(null),new hd().__proto__||(sn=!1));function tTe(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function $7(t,e,r,i,n){if(typeof r!="function")throw new TypeError("The listener must be a function");var s=new tTe(r,i||t,n),o=sn?sn+e:e;return t._events[o]?t._events[o].fn?t._events[o]=[t._events[o],s]:t._events[o].push(s):(t._events[o]=s,t._eventsCount++),t}function PB(t,e){--t._eventsCount==0?t._events=new hd:delete t._events[e]}function Ti(){this._events=new hd,this._eventsCount=0}Ti.prototype.eventNames=function(){var e=[],r,i;if(this._eventsCount===0)return e;for(i in r=this._events)eTe.call(r,i)&&e.push(sn?i.slice(1):i);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(r)):e};Ti.prototype.listeners=function(e){var r=sn?sn+e:e,i=this._events[r];if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,o=new Array(s);n{"use strict";t_.exports=(t,e)=>(e=e||(()=>{}),t.then(r=>new Promise(i=>{i(e())}).then(()=>r),r=>new Promise(i=>{i(e())}).then(()=>{throw r})))});var n_=E((hct,DB)=>{"use strict";var rTe=r_(),dR=class extends Error{constructor(e){super(e);this.name="TimeoutError"}},i_=(t,e,r)=>new Promise((i,n)=>{if(typeof e!="number"||e<0)throw new TypeError("Expected `milliseconds` to be a positive number");if(e===Infinity){i(t);return}let s=setTimeout(()=>{if(typeof r=="function"){try{i(r())}catch(l){n(l)}return}let o=typeof r=="string"?r:`Promise timed out after ${e} milliseconds`,a=r instanceof Error?r:new dR(o);typeof t.cancel=="function"&&t.cancel(),n(a)},e);rTe(t.then(i,n),()=>{clearTimeout(s)})});DB.exports=i_;DB.exports.default=i_;DB.exports.TimeoutError=dR});var s_=E(CR=>{"use strict";Object.defineProperty(CR,"__esModule",{value:!0});function iTe(t,e,r){let i=0,n=t.length;for(;n>0;){let s=n/2|0,o=i+s;r(t[o],e)<=0?(i=++o,n-=s+1):n=s}return i}CR.default=iTe});var a_=E(mR=>{"use strict";Object.defineProperty(mR,"__esModule",{value:!0});var nTe=s_(),o_=class{constructor(){this._queue=[]}enqueue(e,r){r=Object.assign({priority:0},r);let i={priority:r.priority,run:e};if(this.size&&this._queue[this.size-1].priority>=r.priority){this._queue.push(i);return}let n=nTe.default(this._queue,i,(s,o)=>o.priority-s.priority);this._queue.splice(n,0,i)}dequeue(){let e=this._queue.shift();return e==null?void 0:e.run}filter(e){return this._queue.filter(r=>r.priority===e.priority).map(r=>r.run)}get size(){return this._queue.length}};mR.default=o_});var c_=E(ER=>{"use strict";Object.defineProperty(ER,"__esModule",{value:!0});var sTe=e_(),A_=n_(),oTe=a_(),RB=()=>{},aTe=new A_.TimeoutError,l_=class extends sTe{constructor(e){var r,i,n,s;super();if(this._intervalCount=0,this._intervalEnd=0,this._pendingCount=0,this._resolveEmpty=RB,this._resolveIdle=RB,e=Object.assign({carryoverConcurrencyCount:!1,intervalCap:Infinity,interval:0,concurrency:Infinity,autoStart:!0,queueClass:oTe.default},e),!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${(i=(r=e.intervalCap)===null||r===void 0?void 0:r.toString())!==null&&i!==void 0?i:""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${(s=(n=e.interval)===null||n===void 0?void 0:n.toString())!==null&&s!==void 0?s:""}\` (${typeof e.interval})`);this._carryoverConcurrencyCount=e.carryoverConcurrencyCount,this._isIntervalIgnored=e.intervalCap===Infinity||e.interval===0,this._intervalCap=e.intervalCap,this._interval=e.interval,this._queue=new e.queueClass,this._queueClass=e.queueClass,this.concurrency=e.concurrency,this._timeout=e.timeout,this._throwOnTimeout=e.throwOnTimeout===!0,this._isPaused=e.autoStart===!1}get _doesIntervalAllowAnother(){return this._isIntervalIgnored||this._intervalCount{this._onResumeInterval()},r)),!0}return!1}_tryToStartAnother(){if(this._queue.size===0)return this._intervalId&&clearInterval(this._intervalId),this._intervalId=void 0,this._resolvePromises(),!1;if(!this._isPaused){let e=!this._isIntervalPaused();if(this._doesIntervalAllowAnother&&this._doesConcurrentAllowAnother){let r=this._queue.dequeue();return r?(this.emit("active"),r(),e&&this._initializeIntervalIfNeeded(),!0):!1}}return!1}_initializeIntervalIfNeeded(){this._isIntervalIgnored||this._intervalId!==void 0||(this._intervalId=setInterval(()=>{this._onInterval()},this._interval),this._intervalEnd=Date.now()+this._interval)}_onInterval(){this._intervalCount===0&&this._pendingCount===0&&this._intervalId&&(clearInterval(this._intervalId),this._intervalId=void 0),this._intervalCount=this._carryoverConcurrencyCount?this._pendingCount:0,this._processQueue()}_processQueue(){for(;this._tryToStartAnother(););}get concurrency(){return this._concurrency}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this._concurrency=e,this._processQueue()}async add(e,r={}){return new Promise((i,n)=>{let s=async()=>{this._pendingCount++,this._intervalCount++;try{let o=this._timeout===void 0&&r.timeout===void 0?e():A_.default(Promise.resolve(e()),r.timeout===void 0?this._timeout:r.timeout,()=>{(r.throwOnTimeout===void 0?this._throwOnTimeout:r.throwOnTimeout)&&n(aTe)});i(await o)}catch(o){n(o)}this._next()};this._queue.enqueue(s,r),this._tryToStartAnother(),this.emit("add")})}async addAll(e,r){return Promise.all(e.map(async i=>this.add(i,r)))}start(){return this._isPaused?(this._isPaused=!1,this._processQueue(),this):this}pause(){this._isPaused=!0}clear(){this._queue=new this._queueClass}async onEmpty(){if(this._queue.size!==0)return new Promise(e=>{let r=this._resolveEmpty;this._resolveEmpty=()=>{r(),e()}})}async onIdle(){if(!(this._pendingCount===0&&this._queue.size===0))return new Promise(e=>{let r=this._resolveIdle;this._resolveIdle=()=>{r(),e()}})}get size(){return this._queue.size}sizeBy(e){return this._queue.filter(e).length}get pending(){return this._pendingCount}get isPaused(){return this._isPaused}get timeout(){return this._timeout}set timeout(e){this._timeout=e}};ER.default=l_});var p_=E((Ect,h_)=>{var yR;h_.exports.getContent=()=>(typeof yR=="undefined"&&(yR=require("zlib").brotliDecompressSync(Buffer.from("W4IvekBxw2bzwtWbVf5fyX2AzAPMISJEY/fbMcKtepRTQlBXjG63eijJbQN4ALzvTBt+EVRVTTsqQ1wCS1oAYPuvqgWZIinRemQXGoWk4C5BOebq1CAsym3ILBoVZ6LpLswKQ4VNE6OQ3IoPxtM31ikJr/0aapiJOVzKMZJvVs7xyhEPb7LomEWn5rAew20WdiSC78J8645T+pzTZd2xBeNUftH3D/KCqIvf9WM4TH9KLFd/FFfbC9KDCMMr8adqt8u9KMdA74EW1Fz9lq72Fjds/1MKj113I0V5rYqPiha9B2QgN/UDYBFRw5RY5xhbddceetpc4haPeL+qeP+HTa1/Pq/ByyJE0UgpHdi9UprGorlUjHtupQT+VS2rl031EBiQOP5mroPRuipsZVWUW16j8M/7N+4KHWj7S2plWoCBPv+/38++//x8bZ2sRVXnUHS884T7MhrTmVHjqPfJZSGBA9aVWAxVdDc9Xf/vTf3++/NlPBnDmKNYctqelsOFLOtk2d/mNhagxTxLQhWSlVZ2r6Xa/z4vkq5xSelcxWaxOaNFx4IjJdnZ+Erp8j+b5umKtUkoCoPelwSsxzIp9VzqNhmsiVywXNlJmPWlWr9O1wIvqPm8JC82ja2IDr1iR/Fe8z/fZv0/P1+3V3CNoJcd5i006W2GbMubVIrYElLcSMfKvdfYoV4apEfBp/E11b/nciLpskmBtKqU1gftJEwEDG/ZtYz+9//7pf3nx7wFo/SUT5iokUamoOLyl2UKjdeEU1d8r9Zn1W/R7eZWhxGyeSNAH9CMnYsUVXwp3/n8cvE+dWlKucsjjWYs/4LsTBKzAwNjYyCAAy5NETCxge3maAgT8APsh/XO/peL90kHuBm2p0rV3fIPykIDzo74hlK1bAwxM20ZHt9U63ily5vo+kHRMSdKgaYfOwhz5Sn2hqLhvy9fteViPqI/k9DL+xoFskEQUkGCbXnH0EfVtM4EEiG74fjy7dV+uXg/8mlfsjxHVxeEgUS4uHF2DpkKxpM4LZ4hrh81tj8eOkhmfTq+2R1gENABqeimmItRoeJvJQub2vPpdo2nSCEiTvrJ3v1pZnEV7gg7+7bWHw9/T2fj2NRHgBmZD0gTueleIeisWP3ve1NzaagBiQ4pLZZ5N4QEOcfVAv/cc94VfugWOqDJboCoAcO4FCukye+935B/g2QZAKUpkJMoTaLkkNJqZmXnnXc7l7cb+//v+6WVmwJgtkaxRwjhjeEBiQSrmq21P8vHP+JuIv7/8ZsZGRnNlFNAElxFoAprKLv12efc974EEPEzi5UCNUWCZAuWw+oRylPKm/H8nrGE4Y3nRYI1a3G1VWss5Vjjjd+396ukveuZPAOC3hGow6czI949qilzduyanpH3yOaNG5FZ5le1k3dYAlQAg/erZHpX8khigvo/nVn7RzOS7603SEV3TaEB/xB2h01p0OjvbgwHYahSHZHHkmPJIYCiT5WibQ7Q5f3/ptrb3jczIEFxpU9wE/Wjdp1TO6D2O6UqxNK9K7x337zVvPcGR8CA/AIGoA8whM6SIHWWAMgNoBYAfwDwE7VRcqQc6Uw5bugEUCH+xB/1HVKqfoidQypzaAofF6XLzp3b3m2XqsZFaf/73tT6n55z04FGEFVPpo3z40SSVUWZZ5yP+Wvds/dZobzn3BsFpIkiMhPRZAKMEAEyukiQbSjVOTcT1LlJlCoBUdUJUNUNUKr3KHVVBKWu/u3+9zLPSd/5mRtMfsydGVk/mqm/1TfGgDpnFwZZVYV1P89TV//q/HPhVV/6WdbylQI4FYpghN+zaesKrSABi8VSH1Nx2kmj0XQsFUaHkK5/KcdyY0sswnPfvPCw6crGIMn8huUTkuWHrVKmTlHf3ABu+/6mxDupC4NeFbEgR25IDpQB4ogctIDx4v+eB7f1bx5MDkR+GMAGLIiNEQsiJSUNwgKLUEklUrj4vxfQGoroZy0UMgi9QYq78h+Wnfr7F+lh0AFzmEPAAXMIGCRIwBwiFuxiD8NuYXPo4e3383TBv//uCTN3WSoqEBWICkQFooItZEEgEAhEk3Xb1q0Pvpvd+6uX3GeSQyAqEAhEBQKBQCAQiApERXOpqKhArP/bnn8+zr2hfHjhBGEMOxhkMBgMMhgMBsMJMpwBg2EHww47LAbD3TYqqpm5T717dy0QiAgEAoFAIBARiAgEAoFAIBBUHSIiAohKp9p/A3DA5pMBLw4ATR+lx+ldZfjflmXc9VqyBAuwAKu3c1Vfv68x5vlt/h8sdkFuJKUjDCJNEAvxbubEJrZ+8fOz+QTu28Bv8/+fM3h36Lx1jmIgYYLOYGJg4uyFKBbqpK3Fex9/CCemR7f6iQJ6QOTu/q6mASmUbiAgoQhJoAeQLk2kiAJi393bfzczsyUv2TLwbvv/O8pzGcgLYwmLgiFuYFAGYTVSJqAIvY0bv2veuxPoVg0uEBdEvrkbQguhhdoFAkhIqCnUJq1ldxXvvssKEhYpfyGy6RbAv2zkGaunLESfoON74WHk+D2YOHbOwKOPCESrJ9S5BC7ZgBmPDoObI8dX5FkU4JQzYIGh+6zg9rbnz2QgZohZ3pEbHQ6sjViSgPTQij7Dxutes69hv+5XpysLHkb2cPjYxDOuImDZiaoy4Ysya3+5FPzE5FKHw06eJGnB0LQq0xyqR/1KeqUM8LspwsGd9PmHhrBBt+Rui33l3rZi+li7ZMcC8qelNCM+/KAvzkzPSyerciwLTg0KtrZmCWSr3aqAsSz8V6qB4mYiE6ag9wGCYqPgDqI267Rlxkb01wEJabYuUGhDWCL3ZOJtkhcF6ks3DJeL59x/rmExNtaU8Q8Kziwegm+LLjYrJXAPICERn8O4BPB6BSh8Kg9in4VbjjsaYtsAnLv7evkj3Q78A5v85T70kFfT6zcx7GaA6IVcN8jz9+3M4HzI8ZP8HklBF2bRuyuOnq3B17cPjzClHQgFwSXCmOgEQSY3xoTZFE0mJ8aEa1BiKTImOil6KrkwJtwAKSuBxkRrULrZU2U1nsOiC3k25pUg4NLu9emwkx81TFYucs3wxqTHHS3F/IzT4iFZ9UNDSGyevtDZ8c+SsOKnnc4/yzSjPj319W1EB9Q3YVDtn1sc3+yR1d9LNvyrOh/Ux4FZwNng+ukRPmqhNgH8bAzaGyCyAQ27E8Mlhdberrd1cTapgYerB6kFZOZnVd3F00FZ2X+2/enV06tbrcXkHkFqQu1kt6fF9Hzt6dosWOgP8DTHLX1Pq2E8SEttHRIqej5AnU3SSPSxhYloDWtmwUwe39LycG2LNyIhuSGGgBh5PTww6r6pfYVEbz6R+Gn1uPeUHhB+P6snLuKVEevjYfw9Esz+XTnYXlitNg/mdW3rquMQ9nxowHwWoK84fhOekXLSB2LNjiLJPLsEj8hbsJV5rHYhr9XAtadrtZwHu1m59oNrP3gtB3WA518JFHRCGRQeIXmwkXzYXJkRbA0+d2MmoCwYzfOvNJxCz3Fmdh8uRz78yjyYApcrP4aVuZ8RGJIz/crsNXQ8SbNuQWVDjLKYNHr1vSXqYljW4iaK8giYyU5vzdrBbM2HJpe7D88wqq37wv1n7yBPKjjqDwmUhLIvUUkGahBADYS20ow/S0Sdh3IZX+q49d89tUZiaKr67GoxsI5YDu13YaOg4ZBdFPpIRew7I/qMqqWwO94DJC4pG9BEcosloEHhmPMutLeOpja8dj73sJp7xz8GR2a4L2McYRSJ5bBWxxrwyoSDQ8YgwaKyLfb0aP9iWsq++f1HK/m7OSH6Kqev2H6VLT8yhUeNEKkW4KHkfkYxu+vvMPNPWENrXc4L4fQOkHN994aFLAUEMAYo8JCHhAaQXfvdLAR/JPqN3U7fXLVU3s5S2OoA5r/dSfv94iDXgDTwxTVMA9JAVKY7lMhTGqJ61AMqPJYhswoAhPBRgOblvaPB/TQCL/8B+HUaQAUPB9wUHPzYBzT2lkdoKoEhaffyQTk9csTGEuuJdPDBwo4OZ9ybYXNc4A71bdBm8ofUSrt0z0FhqIc9PdCQ+weKl/D9fisBR7BOudFyHbNB4yWVI3EvCyJKllFC0Wp9T5gsjT6YI2Zz4QQf9dvS1e93LndKH3HIakf4I69vKPEfxsYbhF7kXhaEwtU3zLI6lxudczrc3EVbB7fNqNfA28oCwfqobwYRw6U2D8RYtUNX1YNrorqYMJrqJU6mPT7t1I07laNu31cOST9Ok7DVL4b/orKbf93o+J7A556CD6hTR//2c6J1KJcFuJvVcwooEyW+AE5p0XllGdyFPsvNxzLspyC6nVqm5zsY+ntzzYtDRDZQlX5Dwqs+9YojNnoZ9dOFjMdrGP+UztqB5Vk/qaKlff+NW0cPd4uo++bXvznQOx4BRurVOAfYObmXxvxbbXO5rS6R2YK9nIDgQHJ4N6kRhj1hlt+Ey7+epBAgXI2cdypHEwJm4woBdjttQ6Q4Xywp8KLJxck0CiS5gpT1EoKepra4m9Qex1GfJIZlzuC2EmBRUnnGPiSsdYPShT6lfynnwanlJwJAe/lnNKGux1+W4yv+OCO+YPCP6xWngmCLVhdCEuvb+R5CCW/80/LtRpHoonAuHlG++hUSI+ve8XsDWMmSyAS/8uIh9GNbJfG7x2fhG/1KQk2y7m2pqGHbF3h4ww7lzlNIi/ngyCUaudEaRWXwsguWRYT1pLu0rJyNdmIuxAUJlnG8HfMt5BT7o8jIiviDqYCJq9dg12ifg84sB3UBD8KAhC8T4rRkY73q+kCBWHqCuU5IYnIdltwE/8UNJL1DlJ/DrkEDfy6Ck4xpqW+G4BVpn0ZXCVrcSCGYR44KDDd1/FymdTShe0OdNrpjZVcx2GgPccNtWxmYKnlrKGyROZJQzllGqNzTS2Z/5G06anFD79lXZxB9/25mjU1q922hHaq1kS+vubGXo4v5fFSdmsajepSTGYjMkyOL3Fiw+e7u9KRyUVBVu8gNVC/VGYziP87jv2vKOKDmjRXF+y0hxJvtummPy11OqHRX3cScswDP1jOVdAyg1WCK3nSdF0BVDdfcR4h36sh6wwcwGR6+nm1xZgxx8riXlXIPJL2Yh9sShtbC2jSNPN1QPr78CKMGYiIMB1H71ThPEUUoDELCv29I60pzh6SLt5OMdHGxWN+SYbgs8VmLaNoz0h7DnV6dvpn8tOFUzhtvp0somkWMTq9p7lom++gnyMDywdA4gOTPBMEwE4SoUv3ecxpbkQpWKdlXKXzI5C71nInrLMDxh7yQdp+SzjPoMvlqLCPAqghJC69oUUMIvkklZJFAwLMBFGCGWnP6pmkdlUvjlwSiAL9pWRvLRpIImrQBHgOirgNND5ZeehVPkEi/AcKuwgVFcA5zdmSqlfs+NFLu2yyEA9JsdzVfpiwEOEmn1uWPVbQ7O3yPsmXs6WpI5jJjMo2ZKm4j05By1ttSIw5bk2iiC22ECCroJ5mdO+hGCenkC+lE+ySJqqfqIkJ+9sZpV6/Rr2h8/+HPj4P+Rd9Xpgw9Rm4tcdVCPvnowzH3dheRNkB+GVHWBEXCQZOvDuRkpw2h7DeM4thaBLy+rHUV5T2DzNKu1KoiC0GcqZ+Epj8NyxIaRcmmXjLEtGGDsq2bKGSQ9VGGGKXsFuXP0unthiGWClGYWYWVuW99znc+iYTVi9jUZ38Us6r887Yt8pskyjWp7hDiMejui7KPyhrRH5cC5E91bXQNoFohtkBJuTINLPlEAAzjLTQxBTPPrww3pssM8CKSjsNVBBSPKerxFRJyoF4dE9CuZ1Bxgs0EUkqCDcOvzC3WtyCngt+sBavayVEScdnclhcakhs8fL0W9+MpyR/01tZriT8Y3qB+s9IUFmS4m9xbLTHUixxh2Loepl++OSFehJNMn0QNvVqrYdV17kKDySfzFHUtaWbGkJovdKPGupUY2nVKqWashiAdpxzIGRLn1qXW4/tamTKjhGPH2Nsic1aBxHwBhuU2RKMSLydB2obLQp/+BMuWptwGzwIOpk6XTmOKMugnJB8955oMMAmoeCNfDPAo2d/WsLsdsVBbdvOVhNm+2cqiM9iQsS5w7JocWUr51gb5KYqHTUkNEJ8Te98u869DGa8WbS6socqKGCSkkJF9VCe5jQlHARI5LdFIw3OouobAvaKi/Vdl/FYMYmm0ynq1SICNOdJMhX4eeFklpGWCMn615qWkUVR5h0UBUZQqZr7hd8Tc0LIAXPRWTW9srtKUFO4ra7PkrvEbZlVbC1vP4Ek1GKcp1TBHGrfz7HAgYqWyxnOxYjHvL1GLJ/6rEbZ3ezhjL0HttDpdVv3CBt7tIXtdYKi4IGcnlon8Om3jUBhF8EBJx94lIK3+rBfqhlPXY4+1mc5dSbeZ1WfvWVUV8i0ozU81l3uUgtLwAj19PjYuGPmtrTFsV2/5GFx/XELQHwOAjMKmq8kl92+E4fc+c09jIRvh4whvz4BkI1KyXi0EY+kum36fuCxAaCSQyMtH2QkF1wOjABebibpZeCrxsjmoPzNT+9aS4ygZEPXEG72kBA20mGMXH9bB1XR4JkBmPG3YS21XaAWHvoVy4fHDQa7h43ipZJ4yr2x/H2eTQt0uvoSm6sFf59aVwqRqEmy1WXNwIcQMXIydmNVH5UY4p/lB6g/B49KEXQL0B2A0x/IIYUniRTF9IhNjnclAcDNp0L46SMZnL4rrN4MRMJvpD7Zh58WWSW7qeJHpxa2fSLY+mRWItg9foXC91igcpgmHSQaz/OzWh8fMjpHDAPQHwLil5am4cMWi1k/EbQRgILCDQJkuNQOSWm5l8biwMzcfxupgcPh3h2ALdiyKc2yrTn9Ty+Z+YfPvz8D7BBbm2vO8Onv9p2Be7Pc0GHB72yOXNd0VtnvI2qIkyFmRz7l5U33RGa6W/OXd7BhJL0VQXIUyxjYmda/pNLgKrwTrmBwJdE6+1TIy1KG7VzRyuZlbLEUT9dpgmAShbfCopN5FMnkTYNJPTGh0NIUa3Y4DEL5hiT1RhGr/FPVqHs2f/T33S6IijqG4k8HzsZtWjKoVjaf6n3qvAcNnzTy7hjOCadOZ7bPdJFw1/is/1MKTt4MZi8hToV/F1Qf94c2j1rFCbSqgmeeLxHIbWRRVGi0l+2TbyA46UAjGHhzmoUTEXQtHpqGYtAlcq5hEdOGPORFwmO7eK3cMjwWIMwo2KPMkScsYUklaCMQmCEQ6imeZIe0PYcYOR40HCfRH1V7cWUsJOeEtGRsE63kxZ+POnnlfFwUFHd9Uksn8QF9daRYOm4auFWbvoCxGNlGWpQaheddqwOWMI9S3MykEH4P2xwAar7XaZpHQbvipit0fZppZC6XToDVKLzT6tVfgkZZeWc/ZoZCBXTJPlbebD86p2vxOUYJKlk54oqHaGxLl8xVT4hixfBbq/3JEhpWhB6IVhyuPJS8SaWJdt5cRXgLHxxm6XFKvcTB9OklRnrkNhGKWtfpro0Kr+xJJ873D2OOW9xQQluxVDBywBqEQ+uJlzK4zs11Z6K3pg+QiyZqXsPHMhVJ5SDtdfMJY+UnNsLKfkBYWVAWb6kqA0w23DoXtw2Gn6lM9oUKXV/y5Ev2ewl79JDn+6Jr7kT1coamngUnOGtiFsQJYNUBT4Sk23GhgzRNwVdEWfEG6qPtzmxXiWW4qHPLaqnphlVZeHH9p2vNHC1wwoS8J4mhxudZO775R2VFp8dcR4l16C+vQdCZ1X3J7s9c72BOPaNwzXLeGFKsAlFNNaW8eRMg1H7YIzxNOa1zF+fL8hAYH7QDmE0Dg+EMzAphRsrtRVadiWLIiwEvnv9Xt3gEvtGXXOCfptJ2qmNmgKEzqtKIsZcSIMiGWBIbjE9YJS/Wanu0e4gYBlXfg8DjZGAUPeMokpvhFsELuQxcagL7AvEFGCCcxfNglIViNatlBF0N2VQygBi84vtricEfs6i9uDDdDeEOI10Wu+ikyFfKN7fMG/w4eDKI+lcbHOsgdn6sZWR7UpoS9K5auqJD7yPtkNfVtbR3KWceADDKgmOTBLEC1HNnIuit1EbN8hQJmNH201yg7yDArSAYcEU+ZmmWpDMi7BGjBchzqTaZg4t6jY+/PRIoTNXvzoR5Cpo5MjOSDeTjtoKHpPrKHS4miUdbKPKtKCvxVAmconEDwye+M+RIhHd1JGRyQz0leRDZUUgOd/WwuP+uhWuTpWnXf5mwY2OqROiE9b2ge5c/S7sOnRgDgPlezoNItdGqJUqOFmTU6I9NwEIVEWUIR5oZVzMrt8YVRdxqYFGBIsLsw8DEGtazt+Cif84u6wTU2gwl5WgLormxO30wbrKMWlzrqml8OuVEHK0StdwcPD3TK+ocEIp5i4vDcv8ip4CKmlhjDkK8WB/K8lfYoA8RMnTXamvew+mYhLHBhrLCBEEYFFFLqyAeFnqedPF9c8K2V2AT1vAS839sDkDNJSXMiVPRl5/xBCEeZniL3pLda2ZXXwTbi+vPhT0Kzt/d9/VX1jB7uYxl+fbnE8qtqOotZIBpfSHGDn55gFqrM0rjHSEmU3LYLHdIDmYc0Ur4uUuf0wcj6ZLZbcxEYaSRpXwkYLXgXUW6KDYEtB2cYZOFwD6TKR8MXzXA35j/RXAwy7XluDeBxIwlB87YrCHuYhm6T57v/i8xzUiH3epdM0TIkaiAHOjlQZo5+ri+GbSNub9nteGyQIL+1ccU/UPLvWnzU+p9f8bGYkL1YKM08DKcgwd5YMnaw022W74fsHh6hzZ/GSI5fockxxCh1QnksQZ7vOceC5DInoGadmpJd5lFIG4S655ypy+J0lpQczRdCNIqXFUYtqPs/H+r4IET5opH6BLpxjpPSCIccVMDKrD2HCSTT22f/ZGthaWKy3LR5y0cLFTlewWIcsTtftPHa36C65UVE/EHg1U7dNBA8UarmQk4gnSAmC042oG3QZK3ptkUQP8UZuGpQZVQgwbjlY+LesqoHbmuwHYChlr9tFPAZ3nWJLn8elh8X6Q7c9QJb4T/OwhMxk7gj89jLkI8Udcd3r+WSSSVvpI9bsur6n/z3ZLTo+k2HlfJqDMlpgjC+x/EJgFoyh7ns5PNuflOQIyETrHM6CmsmT7PE5xfywmMa/FPRKUGIZ6LHwfxS4PuNz/snkYla7ybDM5jR4TFOLTTJdqG3Cq7ayzYZofOZWffGRZHIpYi3PsNAEaCveXWIrAWbLAYyT3Z9/0Q/dA1c8ZEz2zFlL6kVWbtx/DPyLqJemzd+bk9voKE+O+hAY9XqJEr2NwIdzMI+p/ZPaz+KP9mm5eUbvIbE3WMowbxYESPXgEgPZBspc4h1iSsVCl0Uh0WRT5ynDpKJzQstJhNufx+nTqBSfVnu9S1cv5v6M3g3Wj+5Z/sDL+lF3COqCGcvs7RTq2v3StgQb11a2XZS7m5DaGezTaRWdkZS3lD2A07+9HxOG7U30OAClU5VM5yHF+GlD43dNcGjKxq6WR+iA/+2CSCsLzHN8DwHkYMhvWfZAwyQjA7uYbuxUF8RBKG77PsDLvuegLCL8PCJmbHONKUSADEpnUonQgt9dxxvxAdn6HE9l4nUNFOwgc/7K+G5BG1YJAawZwZJ8qB1mxdVbN+RT++SUx8RXnwTzxVPhFj7w+iDjJNhx/craHf7j+5sMz46+PU6WGpI7B5R32IYc/h2E9vaCwX/KS3Ok65TEcZVp0o9RbtDcR0HR5VY5H6EAEeka0qMpQCtJVosILm5dR6PN6ibt20D0/a0KarGYiEkYIzemrFJCGi95HKKY02Obn3s7pOL2SLJq1iWFVm1N6pjhmOSAUh/GZDsVpqroj9kiTyP1fkG8/OVnmQeiV2SgkYw3AucrWgRwfox/T/SB2GtGwSVw6pJrSVzstFveXPthgLDeTInls12z0nFglaDyUjZotY7VROkvbXhY+NMcPR8x0kiJOdi8eViiV+mYmYg6UxcVxFzoq2EQdiEnCSAGZEPEdMIGBPoVCKkEZLexbhIfCzNHXoi8wpBO2NZV0c+ScioFpZQMJGwx207RXkf/8JccsHqbVib/0+TmKkfOJHhPSae6ra0c5CNW7D22trw8ObHNOV9xWHi4iVzK/DJGHsppNAqGc4x3zFD5GHaKcfiZyB69rMVju2yiU9A+HaJ/cG2hvz/ERCoUqUxpdjZWBnYOKNnjMfm98+OZekXYEH+U8ODnCL3mB4YA/kLjGqIish0mMZUDle2NJuHNrJTS76ObhdFnWO2GpI1f1DKZaLdWVfO2aXbbMyaP/NLO242TkwRdYHmLGkK+ClgPlQdDv00FWptnPiq4qHj6LbZdQjMwANrMTb4BhRb+6QVfNs+OlF2NJjbUGUyvJFS7K0yOK2vVULELGzEnJGA1b4LyeMxg4q8DeXKSSQLNWovZYUTSle9v1WDlxw0UBp6aZNrhJj/KONBCNzRlkcahhXw8uG9xoXvg/Em23NcNwxpu8MMBWI7XTZLTVWH/6xDN9INEm521aoxYknHqiaN8VqmGBEjFV5FIkL3326eWwhuyLdGwd5bJ3Xnuoob3XkkRMURHXeAVuENV8gLMehK+CRDMwC7TxGdAZBen/BMZl0sn9dmUDzPxsjqMaoR6YT77Cry7mdRNL+q0fz0WvOrFc1PI5q3cVgo0/6HQC6/dXzJGyM+H8Cw30QomC6AlmiLdUSfM13H5Umni/E/JJdzdpxZGxiY7+z43AbYWSfAyzRGoguGg/3ALla7lwGvyO7KcGZsnYbHIeO50zZfpINulwyluBrAV9EeZkq9bOPpkfls143cusV2wn1nIOVwhrKuzii6uKfHhTNkjhkCiKMEiOujFSUTfRTv9JiChTG0HZnFVmptzA0a4qu1hqbaxK4/socwXhkxgXCuK7Pnk19lM2xIEzKp9sZ3YVEWUKmvVUNgDerD5MiVB0MmRgh3fgPie7wBqfviBiwuvAHi2TcYXbertj3DlLTPr8oMS62zBcEmAfEAI9eJsZEw++CTEc0CzMZ8kbF+j44UU4jAU6iMOCmGWmgmUNAc/GUAfQ+hE4LAalQVRhL6orqPdex7q+u1+ElQmiHODfIJ1kc8K3qPK2LYUdtifGO4/tOWkvlSay7zHVcx7+FR8R+OPcYBEVwkznCWzau0HtHBHOz4lra36DjG0heJUAi6ypqOSFQwAHYc7VOdhiMA4Nwj0EnVYgxszQeoMt72crevZ/5sxQwq9vfUj2o5H1FmHQhWsh+JPZqz3r6Yxpt12djbieCdbMblbNDq7J+KfcTXSEUOdqN6fpzQAgZ5LkThApzdhS1KKjHJYjue+D3RgtKvrtUzNyIyP/FohoYQy67CqDMCMZSJqErOXVY6ciHk5qu9J6HGdNtTR+7x5LTmX78zZB9Gt766Ak1zHa8nI/66eJwO91Cswpy8cCwSsM4wwDtX1Ny8XYt1gx+n0D0+5zqhrOMY9VWczQUA4OWBqIptifsnUBZaivcRZTsR/UYuCXQK5he9TgqACElEGwJX6APOfnzLRggHPkrYDCyHxdGRreexKi6AzsH3/ADrwQbAdeHqkrnKxxlj7iN8z2jGVFRNYMs/MfI3p6ChVB1HJE8ziSYdNMcOIpp8Mzdy8sH4Yr+hPIxE1QLFFHnHhWJo2dqfeEwJ82nbUPNae5MwFrgtaGKjB9l0m8egiL/hW+xZbwAsK29nHLocshjlFV0MYjbec1tgUEdapGefcyO8YQFpT5bZWEHpdftM6ebbbYhApPplTFXD66EOYmjoUggPnu2LkVu9iCzbGxijyfYlCQ6Nb7Kdhdqnpvq9PSapY74xSOlaCbNhV1fV4vv17KZD4aVv86qJF31b2rELMN9kPpKYb8tKcA95TDqWY4BnpVgQ2a33dX3VFYTJrqLH+xFyNDJEBptb2JHVbaQoi6nsQl/x/LdIFvFSojTmIjTjR7IBCPkGvRbMWWJJjQmzTqbuhPOC1Jko8cf2gIwaloRsHNXsNBgQybhZ1mkfrJNW2TFTnzYnicf0YVrMPS4HSfstMZl7EE23w4uW0KFY8KVY5YaOmltAcOLdHEZ4U4Epe5yWEf5qbDvFTjEHKuTAWpyldvYz3zlXtB3sr0OW3EUeP24/bE96RH/qALHGXqxq28/tjPxaGoWJx+yltI2grmRLWcFg7ei7MHP6pNyQ7IGNyG0guFiWnKx16QWoINyZj7opcK6afGqfK4zlkXkN+5JekfxdsHvfpFr07OVpu5zH+qICOBabW6RQPSz3SlcFy0LUoOwoKxZdoxjYLEghIVHtG8Ku00oGkAa6aumr6X95KMbTA16Hg99NcgvczS872jF+r8TyMfPYLaBsE6v8N4jiKjHbLnfT2fbD+J8V7GefIaxBQktW7LCbsspPkMhtPkrgdxdg/xaVkT0h8bAwWyTa80SBE8gdUN9zVeSOfZjHrfdue4+nGK6hoHVlB2xA48nuQhnAQ6Pa7ZAU2h+LZ+41tUeWuFucYpciSeMTYxMjM9kuDFaR98T41SLdgsKJ+8DVjknm4l5F6QumtsJ95YDpwFO5vWD9WjR2P8GJPyko04MWORbf2Vr5GbzyusZwxa+VflilV3NGc2ZSSkX6eu1dW/dzkKKx7ZO66hYNGjPM2ovCYaR6FQgNK99WhlP7tnRgVBQqPS2AwR0QHBFoI5Dtz286QA0E5JefpDXJbF3CYVL5PlS1hd2AlUjqmLR2GntSIQhlWdTMBGbPF7mE4dFbGnlBwt+ax+73uZifu1jn6kqfowlZ/mjvS7XrUpOk86HImVx2gIn98yRYOLa2GemxHZrXu9p2Pw1W2HcoEPTuS7S55JDw/zo8ywPkNM/gBmL73l6ZRdDeL4GH9M8Rg3rA0RPy0qLtm3QinoIUSgy6cThM9+DFDBznG4//mYSQH0TU3DVm7RDv9vUMxGSPdWvmWKwLmFySfqrbvOavXV1QQxMxm67K0aKEg1pKxhvBLKevvq6/fYQdpM46sQ0usycSWIPuu/vS+BSjJbNjWXkPISdqth9BHKQ5fojtqbxTbNEc3l6rt8Sjw8lpGfE9tGNAEuVPsXEfpezIxueqn3EY4lnvUJ1PfTb+2m7sdaWEB9DKuHl2vS39OA991MuEHszmhezvh3IaoJLj2Kx+SFZng65550Mg2dnhqbb9t3I/Ifomiv6JF3h96fasYerqrz259s+3df9EfWvdP/zv1iT+/l98/1sFstmK1tfxnzfZmFTC4boS21u3xu0BjOQqOkj9uP1d3atY/7H2LCssGKa+ANuCDesSb1zt4Ns2XkeDHr5833Kl11ncoNtWvva75j2UWX7ZhWJ9bD30PwYFEKh7zee8qUB2ZEWCEbYkiwe2cDeH7NYWSN15Sx+g+SIYiDo2trE4sPnJXg/ShIjh4A4gQLBb7pO6yJ2NWiYgGDJZQSjvjuQjAeXDveXKY85vF7SMJCbu0izwgnLWbhqGpWylhbUcVYHHZPBnDiCr2Kv233xOVt4CvDFp2egXmxfs13eprh+z5A2VNgG4urKnPEyWet9bnHaJEhZDvmHL0IN/fCP/zMc3j25/JqeCU5/O5kBJg5jqJnY92XeE7igrecVzYI+XcQHf5BtR0r2UnOHAJDdPqp7eXcQpqgd3aFL+oEL5HCesNt9FwUAyD4yAvG2pI23ku5iuHl1wDi+UTI2FQk97AFpAeLDhZyQiwptvuIucsdGYrKKeKq+rhyzN/kyBSCNNjngqJ071+bs40O1A/ZWwTHhyFAo5RCZItLChAzseh8G5NuQwBETcOMhxtdnXHEwTkhtjnFHPzER0emkddH0Dmo0Q0QfbnB4bGxC7zytPa6RebC+EF9oIXZxXPTyrQYdVxuwGYvP2d8R5fhzaOwd0qmttfB0bvycLTJYcEsj0iETbkPVdCXX0TSgJe4eVXW4iuilE/z+SszWU2Lz6VhkXt9e9e5+TswNIiA9SQQqo04zavT/LhFmMmDsQdDPV/3ivYSl85P0sG0oe6siK8P7EP8rZAp0m8z4XV1m0ua/QrBRUurpFTDdIWwjLiU1pbM+VqEXMF6YKjlY+dyHJP4WVnaqtz6YfX1BLE8n+4ZCFTxFhOC5D1kKLoVpRB3bhVwYxyA6JAdc3/q632VcX0jqQ88lSc4K7h2ilxP0O6yz/feveNdSUY4yS9iExw5mHRZPzhqgCwXpNCuSa7jlo0d2WAXryYWtdlhHtXMLW2w4R6b5ktZbg9c5bH9xaYfuuVgSBnJPUfqH1uZqTLktK4I326YPfB3OExX43qLfS307HPW5K5lGR9kfAT9pnDTZQfOWYGxF1xS2/CC1TwSmBYNgSeChdqJRashU0FCxbvYyBZVADHKZ42DaMrj+GcL25bYR/If//P3oKsBBASzPytZ8FooIm5yDqjWWD9InF0f+LE+TfPGfXrSsVWbKBuwUGc90rqLiKb29eaOcysiyaWtGg2r5KWC27EyAsiUksu1WQQojnzWp9OI3wjDPUfaiMcIFHidguJ9ivUchJsQkhROnizsT5Q3+Cacr5d1iiv5ybc9Gde0DNtTbTyAAka9DXVic6VnMAyQBly7m4/5mrDly38bHWOHkc8eMTsNjmu4iad6Y3+7CI+ndPnvy1mThRWcvZo1A2dtik12MVdRINeBziTHN6Uny/wNytRPKrR3VX5wPLZ+5yyDrPnCRCmenE5avXSphmGxdC3TXMUgSDLqP2xiAbOjkMzYrJQBGipA6FSuADCSMGyhPDDTwKsWpTxZEqXQDVeJq6KKwbHdx0+/Fb1ULQbuTs9y+GDwFhaTEWTkNZNhnrrGoWSpDhtUcKrUNjEdb4B2/d0N/SXspmDsZaz8oJw1dWQOb5jVnAa42zu3e9IKI1MaONm4Z3aaILxLtEojlyKiSD2OTi8WK3rzaUA8fII2Q5auytGRRdZfC/ezuAaiN8T6Z9breHDomKPsnNH9C2xQxa8kH2oniwphwwTBe7TqX2p9RPUjxbp3tO3r/1rYzPGCWPBoDYTmExK9gdWb8t9KZ97EIJgeHhWWYuSCPolOODJZj8oEu806R0H0887yZLoUfAj2AQieJoS/MBY++GCEuaz3/8RfwBZ9BaDO7+QG1QMF/Cr9dm4H0aoRD/RhWKl3Hut3ehD9/t21r1xeOWy487TYEIWLSKRape8kLHonCYiJIdFclKGcMAnaYcdK2mhI9IXa9tZ4Ra4bVr+Y6ns7hjssndY9DYYQnGhhH+0URuJfQHV7EH2BECVoTKMDoOz7975yjzsG2tB+q4kMBTcuOIfa9hoNcdAK7SdOCV6xZMhHYsWUsf+GB8y0ALVFp5gTmnVzsgd0cTWRDxEYGlFRjOh/kFaJyd5xPODmVBViqlG0JldObfQlDtDdFY/oQ6EvzcnBga3Sab9HKGL4TXNyn3T4sVuD2r3HnHOW3xjAoQExzwz2jj3N8xR6aahE/gSbw+G3dEZi0EvoyRhd4pH1+gbxGCjGmNQffRfqmut9TEWMgIi4892u5XjpoMiH31zdoWrGyUgqM1KuyO2EvmEKz1WvXVOvNryWqeaYGziuww1Bof9dzAT87ssuMamvpG39bno19i2gEXezaAWu76Gj3nr5Dv5l8hkyW3jNKFqDpqRW8Ci/0dtCUDToVYr8pUq1noMSeGv8j97eowwCI6yaoK5GZfYqAI8A/QJX6/01K2cJ5BoO9vIB4K45NbwkMkaJRGzx7qIdS56DDsBgQoGq3GNCKL5IIlmO0DbgzkGHT2nrgijuVp3jwms67M1OfUbpz+OOyMPxASEE3buoYPk8N8InerulVHtIhEQUcAXXoqXm5bD5mAE6FOJspp3TmZBM5riURTDF5Fn2Qx9QiTKvvye4StR7Jkmrzej8EXqw9ltyV6k+CSq+Nxev9Kv0tc5Dcjcwy2kHiq87xh6xH+cicfvpQqgyZ0l36DIWjHdddb6HYq949HscEUqVDPfAtP729FezPotxArrNCsCZsQbJ/PNRIFyIDnM7cCMkCsc5PdPmffz4pgIGg4vj90B91B/zJOpOfOJua7KLL6YdEsPK5stODY5Duuv+w/Fu9mZf5qWAGCfXBi0ZMh8i24ib7l3Z2C6SqonMOkY0iieMRQ4K4+Rw2kn6wljFY1SpqOivg5zy8iQa9dEDT26U6YJMBV8wth0NAg5pCeuEcieAfxc+mFiCq8VehTPol69Yv0eTfyA8s6jiQ6nEHJIhYuGLoLYexgE4Bss3n0kQTtFeU4Eu+4iFtnkPdhrvIzg7YzDFaY06BwlwffaK62t8GuWr761k8bnhd8efI4lG/a6voA6dEZNHW3YD8RcIE3Z2WSvqyCj1IwGsIpXv8K1cDHtjG9MC5HKEKwerVkeplsKYiNmTXCt1Yc1AviQ1at0s6dRVxZdkzDRbUmB0sUibYAG2jpJwLzTDw3kt4WbLe4t3vrxgC+pxQEsNuH5tYLpa/GKWFsTXOemwfGzWaNwH40khfBRHhlNrEVlB6GY7tkSkHRua+SZrocOSDM5Uy8mOVrge/GBPwKy3u4yEC2RPb94Ciz3L8wwxyl2537Kdxbt8nQy0XFnF/8/kt57kvUO/qM3aYktw/bM3z0n7ER4njEqNi/S1vDva8P3H3mG/2AXVFTWW7BJQae2NECYoaUZvqH4/nnr9QN0GtIW/0unN7382JDHcmP1xUcYIvETfXWEm0QlU3dcsbeiSJu4wk9tGOwA4shK6yyutsoDO60YHRgyWggTMiQtduN+1s1mKAOY73cxFjaXGwGsw9OY1sUrg/KeUnGg4ioEN9MGWzSaoJbF9X5EcKzwyMBdbQomkpiIQ4s9nKrRZxxSqhHSM5Tzn5AjYw0RwqxwHYRalzXn7TYLaib1maCjKMXIwCJDpHI5OqpHl05e+4FYagBNFIidQKa4ObBKaMNfSiPpXx1vIsdiFqkfaCnaPfaPq8SvvqIVXqrXjLwwfBFR/2MlwagB5A2zYSzlN4pDB/BvDfBleRqvUApoNYRAsj9MWMF0ESW7D/5IGrQZAYFBmRScfBKNHkuVoVgRDMcY9KjEz7GcmmBE4OVzyii4ZCWlkJKh8wALKWTjB09I62FRWSTkmIoNNOgFyTsbNj6mdbxB+DtI+z0943CUiNcyCOGs3WRAVWoseHLOih4ATg60CJbNis5pSYqFPtkC+iQGR29U6rnzy1sDBE8p2zmiql9fFWbkDQqPtDnu1e+BnQaZCsOFQ1pJX/XPj8d7PMSOD8zz4iCoqKFLJJ+TYwpXcFOIlk+53Yb6RZ/GOoFYJPL+qy0DXwcZOuIeIbaKgvo+qEVy1wL/QWvb+D++dw0KjXFChOr/CbFcMfRVTniApLgYkALNDfFqC/7BNILZ1BszTQWgeCSunMPL5MxtK6vHrv1jElRcKiCeGsS2igii8qY6AbZ5UPamASQ1I1ViHxhmEOnEPpxiNEQjXItezWXg5i5t77ulxfsFVsctoat5i5KhZSieRcpZ74KDMoYxer2YfHSal9uyRqdKcRID8x6Q8Mv0o70FuAQu9tab5joGmsNfqELEpeQftw8rryAdafj0mGUDEsLbvHnqrW9+zxDI6xheX4G8JuwlNKbtfzgesFM2RmwfsSCC4stlTqnHsn40cqGpEE89vxln3R/CB34pZ+bVseGHvInm6D9ETPQzwUauXHzXRhJVF/IKL//P1k3clN+JFdKnwna6P91rrfaRafknnfl+Q1egr35nYzAeYngSH9ChpcBlXjoRe/DIt5b0uZX/7wkUd/666ZWMUD1MHGWeRSMVNzpI5DlT5YSBzf0c17JT7QgNQPYead3/jV6l514lU5oxnd/ZZ+/LA/VQOCYNyeFrnJb4oelRRv4nhKwLGthQPN5sDYjBaW1lP95AxjXzkLVtF2dpmDRCzckxq6nMzOjZDWP7W5mwYtXZGb+LJ+ZefxKbuELCFykeq5hZytrl8Jx6gopme4r3u8aFomMSkUiDpj1lRrxB3xBkPgSa/hs6D/IJ+h2wekNBrWlX36WRm1Pb7qTosxV0EaO/GqBgVqFu/ANIEUlpAYJ8oTdUoKqYu2j8ZASyiFmsqk0xCCcnqbM12JTQRpL9SvddJx/gJ5ob+rwl9vNzsRpVh1ZYOtw22UioSMwYUAkoMdAvQ8KxOaPxs3Ptffk5TWd9l6shs98OXzNsnYKXrCEPelu6uj7sdpU2lp/CR/IBBUPnm4NksP8ORP4fSOSalyHI9sE03V4PQwxq+KeD9n6/8y/hSheYM0+BpER10cOqu1JaO604/qOg0Cl3sUPAO15AVDfq0/UmdZLxE0b0m+3qYaD9v5kiWjTsGFuGMecwanb3DBVVWnmQZNolmA17GR3z1VBziHZzv4wZl6HZ6/zwAG4lPHWkMAGE+l33p6BjjAxKjFx74m7xA24JlZmLRE/UDeX33z/AUF+v2MK9ORPBV5MMapc2NP6gjP7AhlPrnBiLl05nHKv7QxEsnlSzASoqtYSLVfmajKBCSfnZ3Jj+klXxRZAlMmMLl8t+4kMkxw5EJshVUl7VcwuYYwNaTvFDdAi089BxPxxaH8r1Ji+3Dy806CRzoORgG0v49MAvDJztFRquRfmwuYAhZaX5+5ZavEYfz5UbCbtoQOs/SThf0Nc3/rFdRRKLOWSdA5j2W2fCFkMJwpKgdZozabLgnJMitHGYNLcLh9MCmNqHv5xA2Fr5w/U4ejlo5934UKbOBFfuLUNzr4XTj9MnYT92pwwjrQ4LdGZ46hisempe7lC/WeLqW3ktTXJIVvims/5JTmaesejR6CXBTnJGcc+9NIHT0h+vr39G6P5Az3UtwMpMG/FLf7UapON2ZvVe8oG4l1Q2A5csOZ3MIIFKGbX5y52MZd33lLW4rgGB8QtuXlj8/xlqwg6nSNa7krrYZPhUuntQZiqos6tSkZKxbtauO2a+vPRuAWb3WzKu8HEgl5LKsy5i2wmvs2Zletv3sqoaZAu0pJZTLB+W1fviTnuRrQ9ULzT9lRugoO2U46oxA1RC22sUaAu7HN7OwwYlV4cMWPCLKEqHKjBpALX946mzzenj3A2K+UZrPkOuNY70ozV40k/Udabk5oWI01D/AF4pbFqv2v9OrmrtOqx0ybGu6FdAjA0ABQqn2jvsKu7Wqtz7LbR/Eq05ldmZUbfxFTBaRBErp7dHKy6JISJBex++m6u3pAMJwyLs9tT8f0s7h91JaekMsmx/PLCJ+yrHot4M13j6mPxOPon6odoc8IHreffZo+nQ9XWXpy9u5zJUeylJXleTxCPT9p3Gp9PKLFSwKys1UnNtwOVrF5WLZUlO7sU2/VCUWxgTt4tHN5uUqcJgwmglA7qSfZ1d30t89AFOBMpZlaigxkAR7Mwe5IbITIc/SJAi9OXwnFUNRhQkr8RU1KTKd0TPztp5/dw4uHR1VHbA7Gw1bynwXJ6hi/okf6SdTykdPOyYmd5hj+1V7v6Qe7AKXoL7/NqroCADvqGxm+qB7STzOtDzRV2PTdRCTnC5rAbhGZu1ZGDvr55UsJXr6Z0NTSPK7e3WhaDOyvdLx0W4mjLwDlZ4Od0/AAgydEhqy163HZbtPYOo4PxsZKG10AjITQasF/IexfKxxmrCz/aqoty+6yaw8OAB2TnkZZOQmnv3oR5lDviO2Z+aDEsjiwjr+mxr+7sW6a12/9KOPs24Md4l5XEEO9xtT4hgULLbngsbU3fqyEyfareD5+rDL/+V1kV2yuB/PEBoGY+AOzTjm541U0bVs5EfILtFku4yZ2/XS5veXaqb+Oy5HzhdljFm5QUd2yoCxj6u85OEEQK2b+oSS6fJKstmkEv91W4isocfZIFgXhmQdtCcUzGV8HGvabM0VwVEThC2Y7k0cv8TIsI5/Zbj/t1xCjDpTWE/WsXmJHpw3PrurkQ3LXujTD7fiNvCjcWAwz3OeFcaoCjDyX5EImzXFLtKUHyukzwnz6spTz4V253X9oKb3jBHNjBXfg6A/zasb8O8Euy8GG+YIU1xoC9eKWJXPJKa4AYqBxtu8Xr4u2dzvy2xrEvH8hWP5ieQ/7BOUd2mUO81aFBlcxoS2n3cKA1d8xOhGL+/F9gHITE+pXF3XiuZwjXytEx06GmkqH09VnjH/9px8XVe5pT5cd3j62eIk8mov8EpPaGIdCkcLXAS6tg3aLFLPEdjKVzC0h9dzODn1JNdcLVLBzHH8nvMTfMwEpV6sGluJYvABhxH0T/xwPw40HANQa+mcAeKbX4WLWxVEhd8W63kxMsm0AgwD9zFs2OsZqaln1V/18nD0W9CaVZ7nE6blw7N16ZSqvUEUvs2dmhducprvPCmg8H6yqFBnpFXFG3n3g81wWtrpj6vqx56s+VENthhUKTcbpA/IqATcJ1tM+GVCxAIyZkqTp2zWBOe5qd8baq1RW2HBmKGI4qS2RN7yWVC1BAG+X02ycfhIIH31VVAxjyY5piNJBIMnPmWF1dtcz1AqIwjgZE0bZCdrqUfgpOB/mj3pgfikrbJbCAVDLxr8YZgB/O5bnP/fMTjyO9znakvhJIZowg8ZZsP3cek6YZdH5IL3gYblDwjvPAgTOJSfVoeaGpdSO6aDwpHMdOyt6dD36bONTdJco2zaSCMdYMjMPtnLsYy/GQKLvXx4jCPTrxlEjXYKbKewf90qHz7SxtTSy1Bpb6R74VMfMy9wTvzWdH4EvpgN/KPelMnv0JKSu5+TjNZoLigShn4E6H2ierDCHUI0rOsFrEq0imZEDRTyvCHe0Lp8fO4zU2dg0MOLuzHYhfGadffohAfY7Y2u4ZjDUhcnLQoMEqW0qhMrsZr4Vp340O4+klLYxP0TZNFs8dHjli0lpwyMjTlDKb8EXxVU7rwonn6ibEmzlE6U4OUvcT0nl/33M204WY4Gc4JZ5RgmrT+82ftTGbhuBkuEbkNxMtRh2PnQBYEfXvL9+phSNvpoeCP13rIW+JZZJ6R1CFK0jHGfla4YhNGd6lP19UU2zPbI8r8k3HDYtq/C92GTwR0sCrGXGeJ9SexhwxHZiZt2FzKaS+C+ZPVD4FpHx099dKaDr35szXATIQiV5O7vJcj0VVIatzl2VTJhNpUTaSKk/ONpJeQxbGHXBdp9Jos+JZ55eQejTtY6HD4R+2+pYI+c5ByNfBDyn1C490HfpRK8mFo2vdvSEn53jItsu/8JT3yfzFkgeUMP4xWBS+EBa+bYpFPJc34AkXh3BGLEbCp15TTPkemGSfSbev1ggmaDbec52EcGqzT/HTnoasdfic24uHx76YY7YovwuYOGqVOUozYoySXQF3hbC3PcLAy0Y1k9RupiNCboXdlsDMGtu7A7Mgregl5hFZGtnK1ibauSG46hjlZpabA5XIj7TTJPTkyYvCcIpn2PFE3xYMDcan4qNm/fUCXDomWOG4ytdd7aUwjp1VM4ZSsRs3jK/QhF/F9dDYn42jSH9eguHq4IxnHX1+5s4xV4Qi6jm2p/Vphl7O5P5SZmuhJqbFD2UPacSiCkEUCsdrXSTlHPH46PQMO9lzfy0MhdpF9lPVVfuAlKEIno708xinPCRXpBAdKwTU/7Cm6XQtAPP3unATuYS5fuPN4bWEadnnj2zuadJ0pV1ysxWyPFC0Sl3a1a4vQeDHOow+OzN8+7uveMRjGmeBi1yy6pIX3/LB7am//QyYDpa90LPYy86NKG/8O/5ZWkYZ0cIJnEVwMmNhfeQX/G2FI9DW82x7SpQqZ7+AL78KDBHaNf0sIEEGRFFdm3g49UNB0bMBUUJnSppf7qYvciJn3EfRhnso36OUYMeWbHQKcRD7d77mebL1MgWeevkzvPunC0rIVHsOxdLenWSZcBWBosiKabQelZY+3RYpT6qyRVTtQxfT/pHhl2Tt2/Jy/eJX9o06IXDheLlr6Yqwp5w4QCOaX7FORmDa8KnokryAMeTHiXef33NK+bD28/DoF2hRxfEuS1TP7jNMoNPAzZ3E8uW71MMHF3U3YnXqs8oE3iR+J/NGRr004zvuNsScglU5FVjcEPAA3xcWgy3mXyZOEo8j5f6+PIJXCQEQ79Hy/Siq6Kr7rpNkmXow15+hSYum7fNr26JfZMZ3vKB7H3Tx/FYvImh9slHbgQQTxmbwzRdtcQiwIm9ULnDstCXPxDpv3sSLqDRWaJqTckrwRwCtNAlNLUdz/REpxxid3zD4MLz9XIKMOkCxSny165NVSo+zddRbmduOqq5Ma+VwH3jbzm664zuDXMQ/ue4W8Ziy6rz67LYF1XWO56Y3y2Z0qB2CUdu2KN4Niw5TeIDIPiyofeHTpd6S1hf4hNYiCxzaSrgVmlKEy/xtzu3oqmkuihhw1c3RsgZnxRG6G454dg0uP1GEclPGK0drpwcI7Yr6xpid8iKZuMhKvLFoS7HUeX20rUGC6MSf3qSnPfUXAO+NTb675yp846vsZB8SFEUaP+TJUzqNhtCzdd4FskpmOJmGhoPnJkkB0/wY00wf6qdaRaXhKdAcM2QiicVy3SdmBUZA1SWSzJM3Qe7ZBJqlhj8qVlVYEkZJ/zuW/n6jFvJySqU6d3HbZ5RUbjXgkaFmRAWsjhiiOgSfafkSce2FSMJ2jqIKBcVBxbIqaqMe9UWep/tkihUnk1b3wVgoEZDoKoW8OOtDyDdWCqjvRg1UpTbI4HkpRcaQEaV8gcLIiwu3vHvHW8J7leXdMmt3BeEFoiqAmd+XycTtBlW7FjvFBLZ6yJ2+RHIZV96lQM9Um+7nL8bLGrX0ppnpeUPe5vvtbTXVnQFytxm8tRqYERC9+9QzoKNr+ed+yuKx/HEUwqPx/nvx3BO9d6KDz8J1t1KtEVjG9flj08PoQdiRRxBj9yX//vlHOnDm6SmbF+EzyfHVth8r0H59EcxPSldYTBq3ukmPhdFhdruj3pr+Z5NBTMDJpNl4L7JtjgvaPu9IeR0BP8xv9PPKOYGWXqT2K9LqQRemsS5mB12Ysa6LzMCZyw/dvIsj+bxT6kECfL+/M+mCXToeU/pl82wSpIInduO4tzf26LNFHPk44tE/pEUGY36Xkwzxetnc4tUyDZZKgxzQ/HUc6LDKAwktqQ/6WEsFI15Mx0Vo3nHVC3aec//+AZfSmb/yxD/R7zudzmJyxgp+Jlld9nfqwaOIDpH5zau/v/v3mmdPzUcf4jCo4Scdnzmbu7X2qZohxF1i1y951hFD7rHfBpB+G1ywwV1tg/dumwEcfPxkQtplG0tCGyhEiXpbtT1mcV9AkiSEHQnRb0cE4QK9JXkt297MWHKBtjuMcsT7TOTI1c7TnVWOHyIdrzGJjtU9QtGGGC0ZJtu5GmUU/9LoG/ZgQXIGAZsqzqLfxaYdD2fWtuI874BhzeMhW0i0jo1MW+1pcjLUgb1BPSRZsz3rZB+QIJZetq9A+yfuMOt6SIVv/cllPiWIG39lJl9FvSgxIMxMP/ccAXm3hBTEidsT8M40DA1w7+rl80GZDFoAmUEvGa5xM0rjlx4bDnoF/H95LF4ngpR9RLov4zvfmE6eNv35CEx6thtVOlCXXJT5Bjoh29Wdfg9/2D5QCDdL04+//oY27VrHGh5jJ95Scc9HrqFVk72OkN860e68rzfrUzFZ9vWrySpre2PQ/l6TS4j+dsoAQF+QnwbRjONz4OHTzVMXzfY/OcAcHkId5tuvocHLTNeTcucANpGj5Plf7SZqV3JG6O3gu8diPOp/9eAeflghyQEM+W/YJsK90Gk+RumnPcpEgD2ofxXvEc3a0uL0GM8UaAvlS5fYdaKG4xDZIWJ8Ew9dFI+88Lb5rwNw9O3RGXXw53b6Nlw/0iHPp1+kj1Kp0agDZAtHA/Bp5NAbDXwZDN8G9E8NBgP61NbnErlERrgagP9GDb8Ga7/o2x4mA5E/omsr+L+9JhcbIEZBOOAsCGwIvqI3xrQ2shYAin3G2gKjBMIfWMtYDQgFfQxEtdEhACsIYQgdyIHA8A3OCVPLWIeeXURwFyPaHdwJHKAfKAYOXIyAUXHRrTFSwccdPAc1t1jREyCy7gFnlL54yXNBAhrj22CxAivGFC0R4gBlIc0Jawv6sUIYY/6wNT6MvR5FewDYAAYqSnJDT8qJ3H6gUrbknOAMwGpyIOAWcH40ChL1NWsPAMm4E+HiAIDQgPWo8AHSBYCjkkYe2/BAbYk9xBmE3JFva6ZgaQmxVP+G3eOpFiDPYSCeWtTV6INwg0aPaEPC08DVhao2g0cG7SAYWlxcWCIJPIrQtsSwxzGMSi9bRI6wW4PhiB/KrFxyNMrwoMSw4lGjAg8ghlv8y8W08ek/8EjxKMSO8S8fUx3pDRpt0C0IO8WNMl/UttDoFQ8tYdfixiu9Im3R6B1dT+wGbqB88+kFzkc8nARvuWDhibe6YNMQ3rqCTU289QUbJbztCgLL+7fiq1d+nzNKX5++qF3B09NeKcXbx4RNTng7T9gI8fY5YXDy67ugUJbdm+IrVHbXigIqbSn4ApX2u2A24/ZN8S+wtNeKe6+8LwX3Tnn/XfDFK+/fFF+c8v5a8UVZPu4FJerHRrHD+8cERa3KcOUmGVdWLAucBvnEMsOvPR11KTh9lxKbHidlt24Yp8QOqxkOt5ypHGJ3ucIPp9BXM34P/OeqL/xu5PN1bxqIQnm4tPCSLmatITTGGiSBXiMi0MCFMzG0A7aqGqQlrBW0AxbXCBhaSDBIS5h2zkT8P22AVoe1hoGRVQRE7dAtCEgUjycYnJwX7Tbi4NrjCENWtt7BkAk3UWSVAw1hCYNF/mPW0VSfuYRhqwEJEHgeChhJ28sLkhPoqGpAPdxxoyUM7YDFDIdUi7lET7gpaZGOfK371wwLtJBghKXr4bv5BblcfK96wkiHGfJ6o9cIrLEuAYcKZ2uBBqY9G6zCE8ISthdvjBokQTtg64w8qhqkJcwszPDUGGtAgV0jooWPogZJy/JsZicMLihg6IjLweEmENGkRBCmhTYoEPA0CvxI1uHgxksYLHwDAbWks6kEkhMR0aRoBK9EagywBOuwgacwtA4tZDQiqmmgH/6K58HJTqB7dgM16DUCBg1Id5cX5DKkFMevEquqluroJiJIZXf+CbtYHjrEEkgoC2c7WtGCgvWgWmKBtIMpmjo4RddbelOTs4jubKLAQOwf06ypHSSVvoC38gsJ6JzBMARyvmvLnSGDJCDhSa4RbmCkrQOdMyS/BBr6jS/QAazkDqjFhPdVxAjmSmm8wgMxKUhHRrRzBOlWn6ntVsg6AQ5uWNDeKsr2z1ZpGzoUCd7WzGpGq3y3CneZYEd/4lNJEZJC6mCjg1wBrQqGYfD1OSmonwELZ6lmqAt2gyzsK5o17WcT1yLQj/gLz6dyOMKkyFrcs7Mu+Uz/ce/lbwvHcf/Z+w3DGoH49wwmJ4PhEiXNhADtfB6JUa1nI6LtTOurdjwYFNpP/le8e8OAHLCf98vkMXmO82dmsA37kQdpJlGOM3TijfmChgiJljKB+vbIu5fITUEv79mAawRWAtLMJxtiBEQqG60aClDPNF8Z0Xtw4EWPvOgmKRcb6r/bei1YyROwgZlMygIErns2BqJhzRpogJ0j7TXcZVqGHZygDreYYJBqNgMp2Q/7SCZpSLpYY+/WyIlSvZNJeEY75DDtdpVB8D4hDL3RIEXx/pMiY0n2oXFIkHaGjG/LjKzcC2DIFL2erl2j23jU/WFWNhMCJ1h3XJX3Og5n78+mLIoaOJJ+uTBv9d9C9hKrdsjqLNWckVGxAAB16+MWS/6gk6D6LKgJT+8XQ01J0OxeRUSgJwwFWsCgs7ATYkOUeldI81rfmg4JohoF4hJkULW8HWYbtaQzalo3mshmJ1dZRBkOxGCBrJEdMjUkZ4ESWgMdAjHeMTiQh4iBbKN7N++pmh8ufB9nSJ4J8NKZQfxZ4NFMPInLcUZSGDRoKNVSSwzNw2ACxAbZUnjjeoK5RjrWK4Sdmcxwihpo1EdSzioENMEVK0aDQTukVQuDmzCOgd8w1dtPuTAIauJyqMDf3piuAbn1CBG+RGDdVhnADx43zTpNZC1REW22lWmD67UeJovRU6xvJKJKcRxl357/xCwa6nM5I270SK6GZc2f8qVNrOxhGDyguMrNHjiNGnO+E3QPrkVlKSlLxxOECjBl6M1osgcQ+rQpA4+scgasHU+I3srQX9ybjQYkUHXUcJXAuzuiMPAyziBBHbTbCFcEhuuna3Qxg0G03R9V222U/Wyk+jJX7T7NYHg3QwJqJCVlmk2g9NionJgIK3QqEl399E544pkRdoG304yO014i/MNpoZckO41CMDZn3BCY2YTszShuA7PBCWh7bjOA8ZS4s4vawRUGdyIkQckEhiglCqZAFoaPJagVak5JDTZidOQAnnEdg+RVE1a83wWzUpADiXzpFf8ApSawGn0ObRBjmZBQCVznIEHHzLij6koLBkxERMyUEorMlch+tCwbnwmCcrvL2p+JAdfbtZd0EztDb9Y+kSG89PvSNfIm0X7TOOrcWpmb7q/MCevp4yghwzihgcQlKWoY7ESBI4O6gSxhgwV7q9wIAMnNcPNXB7p+RoGiqeiOpJQLYbep7JNhcJnnRgOz1peYpIGslZl54KBRO3gQbSoHA/NII9iXtB0USwKf0PJD6vCDOSrmO5QmNhihIwoqgAsxiRNGEn1QQCaMqhB6B8af+XbRaCD93txnVg3leiRu7j5NO8f5f+VIWwE7dA3GS7/fV87vDaTSAGWvb4aJ375eZxYaO3AwiNrrbDCQ3OPdbDuo7o8atddSu/EBP4gM80bDI+EavKo87o1y78nA6XAx+O+eiIDobnvW/w2MJt/efkqzPvyQLqk7YIU5WviVEIZh8nBkN7Rz+S3k8rhKCDXewRjowgICEVfHZiFgt00Cm4A18QQBl7hLw/hhCVlfx1I0o1xk/8uA4GWZwOCoqPNAKyB+CTB0xP8gItgFEvzPI3DYWcgLz8jQ4QKrXsMH8d7TUxrQ1kMgDJmAXgOStJ1ikEpVxdLbv4HjSYMAQd4RQUJjWs58zft7+EoCG0A91dNsYaKjc6mSDNdH7scYFrVhR31hlYPsZDCcBe7IsQC8UGUglQC35CI+Ah0amEg4TW325fcK40KJdqTVRZqdZTLsF5Pg/tZapyDrS0j/FUw4wuDEQzfSktbEJG/fzGfJ36aI1olbAmzZdINoS2hqa6zkIMm91oTwU6i7boBJW5kPza4EnYn4azNraDtaVmTro9wR4pNgne7noyoV7Bh3oSZ/6TKljokq1fijGd93NR9cNJ1pag7wZ6FHWEc2dyxu3/fy4feYKuulj9swwhi0DdBXSC2Jttua53EYm/P5+ydfQsHYqb5PK96bn9PFD4UTNBL502xHEHDbbWy3UQRTF/TE+3Qh0ayLO8sPldHABt66kaArrFG8orr1RWOCJPgJ/QJIlHBH6hjDgdtCySIsQBcqJNNMc8O61O8cxYPBwul1eTTzd1ETMDT5GTnPyqYoNeJmOhwz1fGgahjyjfI7ibcNxM6ug26un4dZezOhn+w2JxbvTvpl6qv5XSXo4R/+x9qQjF2VoQsKGujXZ1bbJmLw9c/LnxOr3BoswYRy2zG225j18H8XnK18kbuKPGpMT59KPYaJIfGySIdir2DMfLMNdoVVou/6nmijmiTk7fZjwQ07nZlUp2oAw2rAFnf69pw4SQqZxLUIMEG9ccAw7C4a/CFhaASgDE+VhWcAr9WaMDaqAErRJXgfq9LoYfubvP74CdPi5FC/Pr///wCfexOUAwX34hGBuBNHLJnkbLldiwmQM0lZFbmMTxXZLJLMLC4YnwffvTf+VCBH1a+2gCL8djjoNbI4pCqtU3TnyKZbGKTnJRGItNh/FYOb8hoQrImSQGpZqUKsET7huG/4uI2l0offj9HqfmFmq++9qQ7IigyKmJGXmGyfOgQcVZdRp3tzjCAnSgPKVpSM4AIbz1pdY0cfEdwGrdpBYMhk4hPpgV/M+GcAyWHgbhGyrSYpVvVUFN9vT03abVEEpgZwgMRqUX2hdezGOBS8doGkK2ohEOSHIKHSNxe8uZIeIoKgUu1+uu4/y2Y4uNm8uz3MDRZcLCbg0KOnzXD8cj89uWtET/fpSN2Klo5EhXgCriAvqnrF5aaw7CfLejBCb/Zk1CdzbgVNW/jNQ0EW1pgJaBStavfZa0AmYHFoVCLBISs6GebwUoRixhdiAds81w1rekr1S2bIa291mG0hmJS4tOY7QX2h/dPrikDVeKg6tv3XT7PBhFFv3YZtVxYMwa5h50q/VzVOe4ZW/LZmuu1sGrUGn04HX6KENijvvxw+TlYOl+vQRnhTXPbQ9qN8HGXiXCMIisCLETJ90wD8ve5qRV9OgRaEvSEGitjh6slhiETswUg8C6A/iVjbYm7W0MkJxwyK4lc7WzNZJiuMZXWFN9duYP2E/TGJfkEdmvmWBTUnLJeDRniXaoNZTBSPDpkQew0QwmHs7Gx4yrCaEwYoeN5qRL+U7Je47t7RS6LIwDBWYBfH8wFGVUC3nI9rTEELpAwyzNXT8VyMpU16iu7Q2xgZIDr3Dd4MhQkieDVZZ4Vp4vwCpa2OOYPBtCaCsVnjEW8myRg3AiIvpkUY8BQLTgBz/1Q67O15qEoc8A/bY0sotupPnQFy+6kzAC/ApLBBkglTQCYlAQwm3lBWQ+dNBeTlflRisdER2Inj+ICa+09DRyJ1hEMExPuTaEQgDdHCMxBoSnZgacAoWXva3uEqvWGsPabUIEg4MC7R09eLBTc9Cc/xtDrX2EkwZAewyQfRwM2JS5vlqrZnx6B+poPlFH039FJmX/9QPBVPzxcbYAG8YbsdZ1T9NZStyYGVLkb3N92lWDZ64z30DoYeO1z+UPljzD1pHxSYj+NBVSGJ/lILuksNB0Q1Ds5rUI60QzjjQidZwLeI0WATb8aZegZRzkZSEqDSUBhHl08zyf/MDeUIzMWNDCph7N52wqKJDkwM5QpxEPFwl15zZeXJ5iZGFc8XsH8/at4nk9uiQ+MxkAdy3BwPQpuVBAyokUukli0NE9DqKYlWi8LLPpBSb8t29kdfztsKQhCPPm0gieqd5b2Lvr7OSnvxpN12IshESXQ2S+yBBlAnjKkJDAir3UxvXMUYUe9eq0yr9FqZTpSq2DWFLWCwvk4yuoxnQKsCM6/D1Q0NHBk7zkbTGDCRooCKYS8YpmxG20eGvwccJ6Z2gVqeINalcc+2me5CdklX+GbFBKxiA9dHViFqoHpuXMcsVokRRiFhu8S7ZJJFRD2zjXUK37QjVh3y7V1G2e8iis3hmHzFxBjCE8Ra4pCGecFAgjP0XZe5Jmnps331GCmKBKRyO4YGGGJzE8NcC4GKfdaRFan7fM6NWSeQD2L6VRtKU62selWXkx58l4ziA99F4sbtmimafawlBqXUcgQiRFnqtv5Sdyf6dVhCbNpxGxJAFBJLBQn7tAQRzGNBuPaJsq4gWg24dv8Ms0bA2hOU6yNSI1l487xDQwZZaMGLrI4R+yvR8Fxk8BWEL2EsQB5mkBF27p/jyGH9UV37NNAERduyTh97Y5ujMc1pnLy4FuS8NWhYSAxJtMV4f5cYdm8Iwn1+F0MNNpUhYDyASFDWfvJlsjTchPrM3K8MA7LIGV7MBDU5bNcSbRCY83SKyom5Z2XCXMPqZVH+ZYizd1qLSWUDJtMPVSMBSxYJNlX3p6Q+BUAaCMBoT2NVyTcGZwLKclR8vmT/KGy3Ub0FthpAz0TJOLj1lS9CQ7M9YoSntL6PS09LyB89WteInOKdnL07RpM4neFoZXlLmo3VmY1Fpuifwd3cY7iSSeOx9ril5sUsnQtKSOTIXQEv5hMg5aHSkFDQp6EOhbWC+KhqEmc6oI1oeXlo/WpFxP8QZ0C/AnqfTCGrAPfI7+d/wTKKvWYCQzqDpHAAtwW5NSioqaILTih9KtsSf+9LaM2xzCsYWn3sIefdIcmzeOE7thUYFocCp0CjMpSQi8eHKBwUriGjBiepvl+4E6g9LT+TSBkRUbLke8NsdWIUm2pgCqBs/AZGAihmDhgAmCukw02YBggqqtLAJOypIe7Mo/c7CtHwxDvS/2LBT3Ev0VEVw69YpoCh/vO3O7aDyF4HjbIpGwHJ2es7wm4DvThSZEpgykyobjAQmAWvSCYSb03URPEQgzCtOhPVVeZi/Ivd749Y1Pvz1Te8RerZ0PP7GcgClrxk3+Ad5zSJJE5S7a6nmmmO15Hqv4yAS+3YJNDdvnsvPRHfMX5zts6qRFMHdBiuquACA0qOF7/7mCV1J0JtlukkcoJJ3h/zr69TFX/jbx3d0hPFo/YSCkfcEOGOnv7NMpKGwCiOqGUEhczbs1YspZ5tcqCOocRIcZqfGpJkw4M9QE2zMP54PiTHxSuNvcPD447OyrydPgNL/M+Ji2tXHLzPJ56035enOQL5ehQIe/QzyvQMMjAi6JhV0ajmeKFHmB3yxcFIima0UkBjKwCBtAXRcpXFf7BS+aV/TrzJfDc2QsnpEqe/5fve7ehubYHSNi5pM3bmcKsqXEg9vZeONx2pPcGIxDCVo+1DNM0SgNgiQZd261d1czIi4yt5/Re81X/Ys8bh956jQJZZRPp/p+Wvw694ot+15tNIqV+BEpXja6dYV5cw4LpvtLxIHbUcFo0o3ND6a+PksMYYLJxr1NJRx6uG5h+MeL/7E6K+7UYpUPtncDylzPLQ4aiyYQlbzyp8hdTEgXA9jdVp5ZgJgOGoZ2XhzHobfF0OT85nOnBwyGEu2wZpo3GywipmilNATCVtT7EcbJoxkouKMBeZmApfWqta4eT3C6ZxWD+1KePmdbWVDxwg1/6piVX25QmEOKmaQ0QAj0uN2QwOF7esVGxjiSFCrHVesMb4hdbZPwk1uNYu/UDoGOAo9FmAxv5B/qyr3yBQHmIU0SyrufQJRITlNFb4P00NbCGQEOktkzTUoHDFhFiK+GwUX89ZN+VlEwtHoi1sz4QPFDKCBi7AxYM4bZqGPPAEiOwfuwN4d4bj8U3Sa/cOn59BMeI08FyVZywHhifskDmIpzWG4lJmE+ZCVsIGMTI3ZEIaGZzp8+H8F4CLp7FL2mt5uoMvMoH+A10IwCrrgH8+oGexyarIFPOtvtcPXFCQbBWM3BvKeoPPys2x9TAA9IzMmM5rrsZNwWcycJ+kun0P2s/3icXKu4nWIu9fXXGkzO9Vw2iXhEcH9smd0PTpWj0EbtsOpYGR9HqGex8mAT1OVdYZDEGhJCjACadlVDVhvmC7k50Z4WrVoXBoWdQAEQuyrjrTFg9X5Fb2D7R5ginPSeZ1cEDxIUCAXUhqmZOiAdPQk2UR0qnQcNOkwSVKnA03mjvX5HPPxzliimE3VvM3Y40tRCuTHVA5vsWeTII+rExcqZKWbgZRZ8k/Yzgwi9R8aP16OBhGtzCp1yZq75nVstiYBu6sTgqvPW40b9SdII7ql/PYXUGb9Kbx6r69EcRg6M3h95iWae+ID7gS8QgPYNaklaBPQ6tj6Df41jrcYq0kmiHNAzLwilGguKyVLt642MI4IeINUpsYy+AgZsOw9sARs2pZtXcFIPfpyfb7DTBhkFHMXFVleLCVaD1afGLPCmVGcxdT/xmH4Naaa4SlyYx9/IQ5bnCJ5rO6xQRHfCOPeVueIHUqXTB3MRbewoBWcojz2U+tWE47Vxyd1NVTbxChjLJ4s+B91WOezi1NZ3Ye+vn+QFubDZ1vUaZM98kKVmgu3/vBMpDOpfUDs7y7lsG20DMU0KDGQ9onGK9At6HuBDdfaO14Zo39CV3+teaAILLGs+f8d4PD4mI2VD5qenIttKC+1QKdhyyzDbNG7c04o5Y4i18BUlXC+IZmyJHtrjbsyCG6dOh8jQalrvITDvymmEsswVwCb6cj8E8P37LRWmmvBVrBt3Z2lwm+21Isn8FdtqlO+hbOMS+v5YIkeTJHaO4Yf3Lb+jCjaxRb5ZxKqQ4E4PYjqeyka2XVQdCe0DYcBBqYOQnisTJj60M1jUKq2mxMAMUg01PUqdnpc0su6rips7XwrcG6yGrIqBjO0qoDWIJ4Kj3LyVb8yWj776nNnJRCWhKLYq4yLmHLaKwfYb9azBdiI9FskWY/4VYHvOydxuw3AP/5mLKFfdILNLfcmqJn+vOHlZ2V9341tDXpiZ/+sINuNJIQcDW3WSJN1rCKTaj/SNNboZXfXYGxGL/YRwlchilLgQ4yEw+KqyEBmMMUOmvvSj6kYN6VQUCLb+0+JlXOEQGZR2LuGkOkU0Hfw/qG4FKrV73o5mzj2MPmKr/Vw7boz5poVGZ5fIXPd9PsjvfOFJRUQ9m2Y/pN90X8Fasmac4OUv8ZX6Tq9eJzDw6+fZn1geJIKUeiMRTrLiKLAeM3HupUo5Va95fLlF5R6QjA1GG8Mkn28ZHJarYcpm6FpVqM3kbnk2T+nLLFWfmHIuMna9QhEmOwYpRyO6umppgxEP7HPuvb3OnVrZCJq9QMP+calDeY66LBeKY+8JkMCBZP/OCDAK/2FuS2Pg8bUifOKQ62dal4bNShb1jFtGBkdqKnszOIg+2v+2puqqWELmaSP6qFbZRwPRhImNzSWIpd97I0VH636SvIekduZoSGst1X+rk5/1j0GbPGWKj/qACtPZH9+YBseV7c/JAtRHjKYEVDN8AVkzQdOGo5l2h5XDGgGfMNeKvOtczWxtMAeDdgmTH7MRsu9ktG5k857aY/3MUbgW8oUYalKQTk/d+UmU1dOVnnC/KEEF5exoRuwLveyumW5t6SbYUwWJgASGHfn8lvrEOCPjnsv1n9aseN2zCzwlg89S69DTObE5fwdQOO/dpsRLb1y/rE9WvIKzh4LFrgaoHaTA91/kx8vGFS1Or5Fi+vp1ViH1Y8v7mJv96SuXT9/sCkE7Cl+fyzRRKur0M6XPV6rbK6TDmEVLpNjiW8/CTf96oVwqBYafq2EzSZWlUVtkB51lZGy7atXfYuRSCm8ZDUI4u3LlSGn4zugKokHzOtpybTqLxalrFOsKxc79MIZ63eSiC8LMqnezx0auEEMOwEk10RxF8pb+Dj5QPKP4rvj8QDQm7MicB+BQyITKq1g5ymZyzB23wswVkMgIlgLwiTXCvqEeBHoJEDZWhGehyS23+jBQgJfBJtnZc7FRaKbYLcLSQGz+bTQdFjlhpqZRViP433tAG2FqCZ9Cobdu3WRWorQ/dxkLsg2URKEE67pJQ9LTGZ/V+v78iKZL8IXKEitt3SJe0Syl0kUAZJstjJypLUrnO5EGg7g+YnE2R6Ug7tMAPT6LYXL6IzRfwS0mxsgJdf6B6hjNXrsQWuGxcThT4vb+wC+zI0WLbRRiIr/9w0Y6TYn6IcuuY8bOP51ysTsNndvINicxJ7x1Zz55hRb7dET2+5qb3uC1BMDgH7aJG8AxWj05qn+bzSkTceaPSiF3KS6f4EwWplGJ3dEQJf9KmhxsHd2rS8pg0jHFF4jJwS2Bvtn0hCPG67G4euwPxTFLmYw8xbWURoq0D9MmKmQcUX8apc3SOxnSSTTVe7i8axthHCVKH5dpt4FBC4DldJGMJr06uRuxC/RchVKG1k8sdCtV1n2CzqGfwXOlxWCqOOAIkD6IwpB2DNXX4DgqlitddGXNuw6X8exy1/i5ni+oDHYKy0hf6D4T5teIInxftDfogUcRvls9oYC9X1N1QKblc1ZJLynCpz1WKejKSIWWUIzjdFvo/x9lXRJVyABpX0u1JkVfCucfbWGAozJVUMs1+tFx+veztrPUGb2HSU63kakB5Lfjj6yCoqQSMMvmIlMYx3YMrUlzFi03s1197WIdkCfR26pAsj25oFWIgks+mEDU3v3Sh6No/sLISZiWcEJSbezIQECSG5Qf2nr/9T2b+UmPCQd0veEUOqG61LJM/Q363cP5VJpt7Ju4iNjOmHT90aIDRi958HUTum1QxtHgIFr3SXDG/wXSeNpO7UIN7/mR6DjnWrNN8hNkIppWzz5ybKo1aqRVpybOdP3Er7/mgq0JYVJqDke8buJjE0dQKXNFtLlyvW/d78xm8siS1rz02IEDpVigjJOuqPynwmR9fNinY8jWhv0jPhJaa+j5/tB76j9d4R2lCB6dzI/LTO2A2nJuQHqNHiAvKDzpIaVd/fpUzEUDMizgul3L92VHwH5PdCizFbDrG6hlY+uwa7gU01dGwNuq6tCFbMTa/LQA1HEDMoTKg1TiNB3eTY9JQPQpLXv1JmIrCxNMyChnJRfno2f4+471hNj5ykgaaIT7uxycbfs6/iIOPN+LOjQofa/k8OSFIW8cZ9moBkYT1pauKCJViHj8/K/DLFTbl8SQjX8neFDuIA2m7SUm7C4bPyBbqrTzEcEoC4uD6K93iGEE2X1H7Fowb//N+Yo+Bj9nNpyaSGRchRiquyJ8c70x7l6copkogXZzSSyEVba3HGxS9yFWaBORFGym4aTaKNqWXzXzcSwFH1tlo2RRL7qpIqFLXkq2KZ+bLV8LI4iWvSqcMYYTwEtZBq4aiVqE/6AgLd1LYHF4WnYYJV953LCr3lMb6tL34tSn04INv4nu2YyGUU9d3xHPuL7YtqUrjqcS8Tx9nJQ+LIf9jU85BwzOThJmaDicc4Vfm3a4fNJT+FOHUMu4nRPW0qS7YJVMgScWhnXGwvpZ+yKjdvu993+qWORNCr8TEtyeW/mZQv6gw+UHbJMR1/iShI8FXDcknatQ035Yqk08kKy+iw2tv981XqfyHGpNe8tOTErlPWU2VO6DjlQlnEqrU/g9ePIrEF6SwBAdSiKAHeyyqWcVTUJhDLlLpJmc1yOiE6tXguOhs0x9vG5L6iw9zKIEUxjpq79BsEvQXuYO7Li1BdFd1qA+E9iALWy67qMEGSXeLFX2TDtGPtJAKzy+VHSEreD3viy54mhqUqbyTVeH50ozf93ypmjMJRVSoNMdSPgqVI2JERevTFcQwjHfHxVyX9sPqjf37AAVXLhEihROXgFEY6Vl+muZiONKIguBQeIBLeecwyRrvI6rRLp0m441XP31C/hEKoDTrZlvdJzRBptSqmvy458E7xLaVWEiXLaBR1qTzstOqcr0YlhW1U7M8VBp2lDYfrY+8xSa0SMkp62uK6SdUoeys7Cpvzhowtcf8KzVWdPcPlfNdpX0o9r1Cw/Erx4LymtOEssvYF4GuAVT/fsXBZMAMzHF36WHGNfAWOqG96biuAo7SKGwYviiOTJs9sqmAEMrHjcPKLdlpGbJQ5F3XjmqfufHRHiVWt48/MstYNK0T7siPUCm7/561xA2+h/M0P10lHjCp78vVl4xICujEFouN+Y31JqARM1QnegEEDzP59beZNdn7TKrtP1FsPQDyh1zQV8mbxcAVEjj619xHNNVv3hUMxC+bVJuNk4OjRE0XpcHmEjDhi6Ccs8DcfoLbq6lvzbfg3CusfPoyn6K7+Uf4DM4mSNmRRoOlxN0A43WU1hcWahVbYfUKDUHKDtAtqGiiI6J1poQOedeLgdNwkEr+YnQM0OyloqzuIdOlX1MRCwS6cdcBVKj0rLsbcxZEwn9e93FSLxOrciKkjCo3aNK8Uu0XrD0WE6q6DBdEmKGWOYveEX3ZIF7ObsLyodEIZ7BS3Se2FO/4iOXvuqe2ny+eIoxDwuvTwqPo9FX/YSVUn48Nmp1+3Nu+eANPi7Mfbmq17z6ol3F2qG8fNuPYizk/1y4Rd4UHQvhEu477Mv+lsNjezv8JD/flEys4vQCSnfPbrrjuK49sqGoWzX3JJADk/G9c9G+1gASfTTw1lNlKbQDZctKBtcTfAo8bepETvGN8HUy/Q8nx3dpVneq3sqiq4rMdLGLc3LxBaq0xUpIWp+FgwMNgg84xNsAJQS4zES/EGdjpbR7rU81uUd8Yw2I9VkJDksHDPen/+jPZrKvyHD7S3ULIna4yYXaKoaZ3/hUE9Jr3Z5I0fAVFqP8YcZNXLVkz79FpfTFFX9h5HBeUmdK1lMVnWqQfLhE3/7N2rhdbo93zWj9KZC2nO/6iRT2SefPmiKx9T30hUPYY4JxqYuGDv9CNC2/a74oRFaUTd+NiiYXQEQWfgZ2Cq2rcBflV+u/HifHRdr4f9DxyW60cNYHLhds+qV0BH5MtXXT1tm+3WsgWumwclL6cS3bnDeFiE9JQTLPNRNGz3baGgIdWbGU4ZSuBmMtvHSl/tEaV87qz7S6nEmN8Kecedqis7ITv9YWRDNKbzpCHRvJZm7rStT8GZrHJROqi1qzRaMdQ9dcTvoVgpeG51PfJuaRcNr152ZBA9Yo83ISrevOz4iFjhrcvOVYhbpKuLWGzDVEw2LuJcR5aKI6zcitRyDXfbfex0GB/S6Rtt0dkTHiMSni47fCMKYsQ7IuaICa9CLBEXPIPYHMcNGtJUDRfnSuTXrFlXq8TjSNvkGcOvRdvwvu1wDqjaS+2QFP82nubAYiMITUhDHUUuRlrR4cXS9xexfSDUn3JK321j1frSm17Kb4Is9cZO84hqW4qtiP9JY0a6WbuM6bnW6p33v3ht/D+rdPSko0VlvzLspvi4txosgUcyL66aFH2LFjn8bxw6Z92lzP0lXFNiOiZOtqnoGgMxBbrRHqTEGzpR2QvgBFHXIQG+HhEOgrb+iNtEPxqFlcrDYtUun3bSlEc/s9QomfKGdQR1uZG4iGxcquWEHPVwHSbvOgfF8RJbSTFwFBqTnlUXWSXD8AGdN4dOXSQLysBThfVeI2HLzVlR+0ZVLTu2H8k4COcEK2tMGGgNfwKWPlVjPKRPos7rjMuMJEKxwuzXbT8LEZW/HwnR0iX16l7+dbj8UJ3IJUCC4r/beW0PYpLUMRSqGtw4/GTLC59tb8sJfKT9o/j+eKGzcrc7g9+r2qKaTBR1hyMMySHzr6Z+HRWumhRFcjJtwtTsoYnI50K50UT8QZ+o3SxH3P3CVbfNPklHAN6KxMIQyMzcuzr0l0XJnjZCPMcLW8DiAtKdSdxd0gpAD7LzOXX5FfwVjmyOirAJBPDH8cFvkcBmf2P9ZUGDKISwysV4o0SioMRM1bVfxOfnDEtr4xHkp6rGpoJmkxyuUQejnfdOEnQ+MkORHMYAB53h8bQiRP+ithrnCTNSy1DkkLdQ19CKQKIVhMkSySlu5ATxgIHDUGtACpnkm4IJRa1SjBFp00qmtegWQSApPZGzNFVLHZ3IvHbKsCIU+3/gsycdfUUbyASfoQniLISlrox1DtVqa7AsMLn+ylDtk/TMkvoh4tYHggcNgSL8rLmUFK0RnBc15rUM6Zi5un9t1bnlhxdZZFW2xlqWE9bOBqGXNLnncxTTc5nHQxFcLj2EJwuhjbY9Mpg5r3M6KsVx5sTVX3t8UDQpzyLvB/1qzCCpRUcg9NdJb5tAU91RaGgNLJcQYcxnzIX9lW/naQSOg+qB/47Y5nn1HtT+mEEHUhV0DHvtgMQ2k7JxPqVT5YFCqZR4U/r5RuuHlhz9xFP6GVd/tNWQjyzjaEBO7Ppu/2xjO40+OiqTX2b85xQ5qiP5CjOBtNZKLYDBd2JEjbJI2VYO11e9gt8/eqzIEAHWro0CZAS2O4g10nQcHZB6GhVMT5+wjFDqY2Pjh1dMkXEPHGubN6aBj5MeVXe8eDmmssK/SiKpuDp2+cC8mwVqpuWSBDMmw2MsMtbUPSv9rhl2vVmPq2zRm+qbeMyUp+5/p2vjux86I5Gtx2VKzFrUNL4hzYgp7KNq1aWFVvovbYqkeQfMzwPG2cS7thCVdxLXxpri5mL/ow5v6gakN6nGEzHRXdA2mYkqyiD0tWHbc2illmOXxVM3Xp3cUi34MCa9KIgdVXgyWHVzTB2rtV6Q54qZc4BrfZLt30ZPmjcDJnrBs3DkpNeO7OnGLXjLnkM7khdGhxK1ZYFsUkKnzQ5Kxw6ciHkqg/FLhisbQ6VB2iQKgWRCMu5TFDuLqe1htHuqgMGEcqEgCxbgdhaNHjirNoM3jwRmVsUonE2WVW/EhkumLQzGbyEjTjW9NcaJrlHVnDQs195U+VmaRt5qa8zmg3quvq+7fflyl8yOBCBiMOgW4h2MX8GFjH/zauo3oygG38XkVCpy7kMYvy8K+xzoTDG7OTpFEeJloXPUJRZcaManDAb+LbkJODBPi0+QwnDKiulb5DwNJ5mbGFV4CCc/SUNY/dhamzSo2fIbS+/gCVp/iG+KQu09Qvts3G3wa2/YwpsaERdgb7ZPzoaPwIQTrAh2RxJ5bCn2yhVk4uGFJ4jJXSRGMRY3A8CAmx4iYFpeKsx2hMeCNSjo4+iT0Uzzu2EW3/gZH4FQnWS/vzDuVCe0Huy2EnCmxKfNZ49lre4dRmbGdwDsQewwZJC7q+OJ9C8rrbCtsSQ1vBcNFtIofvWxKQ08OivUluzUGfS9TMlABMKRgc8zjeZjZ3dpAdYUqgvKcTe2ie8IUHDkYUlrlB9apKmkWA1ZFdCFbIXBnTu/a7YvxBlJz1Lhp0NisXLZwnjJYZAbjaJ4qB2V4MwXz9EtriroUHNRAYXJ3u9Cqx9HIwcokFX132ehRYBvosOQtzsIolVsLriOpOglnu61aZJ+GcQhuHGsCBzJN8qMmrfOc+u4tk8I4VfBcfwR0qIIkFyubU5xOiLPY4lrN5KtyrKChNZMsqjLeT8GS+pVt8aPzy1Z+Y01Hqqr2r/qWS7XrA0ErkJKAqnB5r4axbEqziHdaqWYoZkTlwu7xmhm+CHMBX8KCi/IU5yeNNGWt6sjiLGokFvc5bnsHFg2qmETS4Ipn8QK9RSlBShqNPV6FkjNpCpEUbBX5DpDsAHhH9kU6yixrGAjpd8LirbRkBcbpbADzCZkL0QmjmyHwJot1alrKMhFyx0jmA55dZWoVoRPqlTITLlsCIAw3jBA33KplJ/Mw3P4BZ3WK1oxFaey5+SxGV4UZmZk4y8rQQJzMaXAdRIo1EwqdF2F9k6NPqA+pq8GuRl2+77h7EiSkq3EWnrlqTI9VNOlwc/IyxJT1CrBp8y+O4dGVe4DyPyfBlRFIghgTSR1ajY/ppXEZ7FV0d+jPhUcfzOKcEz+jnK5z0MDRNs6jc830SoxXP1VH/9gLviqcrXakrmrODpHCiRXMxFIl+F71DeFU0w/NAYFhy+4K6xZvzQ+/1gC0jA9PYy9KdOzrIzAo1qbjtODYN2zV0E5Iv0Kguf5PMqfkTNj9jCT+KLCO7TQVR8eD0tg5UeJG7a8Oe0v+WYJegeKQLgc3KGHpaCjUCdqWTWNufjghZ6M8tNJPb85/14uG0SVGPuYNXgEQwiKCnXh00lhQsm5cjuvrG08K9f3uHarTn5pvSmHNW+ph6+JVBqzkWG53pbE2KEJIs2qNs7yFw8LGpGZJZUBVx+AV9ugHH+AZQ09nx+pBI4T3aVDbFh1VCpcpwFVyTWmz4rJ91nntVfeq2yLnRph6pzCd10hjTsYzFDFSIZf/J3C8xEd+fNmTISfqNF0O9uajS5B//rOEPtH4ciXaN+M/7Cd6MnxsXqPsvTjD6H1ldgT1UImMGofTpRqxtz9UOW8v3xyXsRWcRsqh87zVplvO21yU7q3P4moUruD9oZpp9fTPlYvJ77GnJc0rU4FmuBS014FMec1i2S7uGC9AbeuhXSKny9rY5jX32hiqVQQP1Qt4jEVecMND8OrKjPaMtTcmWJgbzLkErojI0ZC6+Hh8cWFTmGYL4SlGO5Bv2/K8+0Nj5s5qcknh5v2OV7m1Y0oKJjS8Z11SLKTTjAwWc52hPPdl6tE1gnu6QmtbVoB73qnJ6PapJSXRDhUTBLNZJZzo7yP4m5PHXgDZK9isfSZFlKpY3XSdqSpdW/VI7DnC05NBZbdH4vafGSMmrSpV3GLe6vMGYPRffJZJ2ieyV5KdONDi7hvkS8/7/qRg1HWq4sII2+vj/+ORR4X/LFQ8v2dLG4UjCHEht5mxGNVH1k+LNncxBPVRizPUmKn9a7hE9aMqeEVRmA+Y/V9T1xi2L8GDaCzT3tfVoLGdbUAa1n+UdZVV2NKzyUPwS+9uO0yExEEMDitWqsux6XHjZ01OZdCGZwxmzTkJh+1cn+P/FmZ1pX1dZh0Kx1L4hjIC7ZmCidpLVMTOQrpIr/IpqKJr0rFN7OEab804Cd6ott98DxsZdvWNNLNXedTHme2eCx9dqsfgLyV0fBdo2gUr/DR8ATO9XNWhQlyDntmnKz+zCrk20kG+Dc/EYvJqfXQ44q9YuYvAjM83I3WXi3bAuv6Frqc/6NGteKPKnL7J4eXa7+0Lsmv41JNtGmAiyvLZrmnPUWwVlSHel20bYuP9pmTqTrSJeom+nNH52ZuNec35os4oFiC21qDb/iLDEuqPlKwj+/UuydSSP6gT9gpFiLcPdpouu4gnHMqj8uYQzD4DA1Ll3cKpjuv1QSNUeaOQEfwrMWbWtChp5iMi4oWT6InHzhUjoeTawnWIQuljg30aK2MOA58kJZ+gHOBaM/z5M8O5i2QOW5vUZebTY6tiYBhBDy/iYBNbbHc/Gau6EmorL/IFZyGKKoJ18prR4yLjGUw0usERIze0F/+h3b4qtVqu2o0NzIQMXJ1ElvZY+sJRDIQGCeG3f2LVN5en2eLW/onhIrtKHY9d9kvW3fYtozD40jSpVgqNMNCNS+tcIfY5DiWZ4TcrGfMODS0SkLFJEwkGToHeEkxW1fGIwkIEjGwdBe0i3Tbzre9LtQA+zlY83unXJ+cxiQjXHP1ucrDVJPVY54zutzg/r4D83NFQ7dsIB40MB+WT3SJYqsyRrdDiKhjuHiyRO6ISQm88GhGTAEnRrUVNw1LxmshNWjxnRzeCQZ/KRZiQXAuSM5STA9OGhYUQUZ29bYatomvaul69LmIQFY5GIJwnRRNCmbDsUwYOX7/QHEnUd2zvSIVrnHxoBiDjc2S7fp3pkr+UTWm0eNV8QtVg8d6r96Ck2JUtJ0q+Xua3DK8weJLB+8cBs8JeSajtOgzVrkIzOxhLOIMZP45w9gffoOlNEUrtR1b2d69wA7YNPmEuva423O7j+W1jIWJcRY8WpcmYNsex3w+jDM/hFzlPOzkkpv3eXYEoNgrFS7bOISeqT6X+VgkEgeFHbhqcWP4UsWv/xlNoitzBG+VnynvCOO1pscEXvqjlfiDurGDPPoHF9awq/3PZBXbd40fTUvhtW/TpRGxf84GZUuhqrQksePPC6Jl5+9WVVs4NqWRfxPL4TR/zaGVWuI3a7yVJBkwFpU/sV65XMojHQ1rQcsAMOOSC66LtA1AVGSZba+ZgBZr0x0nSN35lq+vr9aqzI813fGetiCxrppKhQrKNe5eplYOTWg3vM/deRxXo1oOau1l4eiykebDoQoQbed08I6OFjiFoOfDd5/DULVhzsIZemYOuf7+miTTZWC09QRkIjDQaqD4CAm87obD4DBzyZedO5l0UppuB7XmG3xWqnTfaibKeU9vscozjAYhdzaZ2cLk++dr5kcCK7ySNpUo/0WYa69OoLaZKnlC+vWM+YBCxTh3l3kGGTQOA1qtVZkfa7jTp2Qz9wlNiteQeqI48e3H1BFwLdmo5yBYNza6FFZhKijk6pqxoUQvF+HSJsXl441SJ0e+TQLk/JqoMqT6S3yDuZjVAASoHrFr11RO1l+l+vMJH1K9JdH4BUyPoV+shRFlFMq5kGJvcqnXF0np14RVMKhGOZOCQm/WTgB5y5yoBzKV0n3JJRRyMA1GG5E0tV3zRIFYDLLCDF98V2MMFJSZg4dMUAvzaum0kH2nCKRUdZoSmrWWnB/BVRBt3R2kS6RdJ34+jQik2C0pIuw9wDuN2UX6GjYmIM0EvojefcI+3rmg9Om79j+FECNLJGQ/lTd/pz7T9l+7fNwvvp7t8an7HC0gQ2LWl35hFeSiHJpG81gPffX/nBar6LzB0pcx1vv3FCxBZ7RKvDWw7LODLOXSQ0R2RMPf1JpJ501rgOic2ZCf3mn/uDz9LW2TYrG2LOsjLhssMOQVpJLFzq7oktYHniOi+fl3fKwECdKmkA0eSvBGhR0edbvCkKO1C+CU7LQgCpAN2u4yeEpEG1uUaRecpiazQMYAj2ZnLkX3E19TDxg9HofYFWfhRIe0IRmKE9FMyZTbfTGQaMvlKWS0i9SS5r/0zmWKL7Ysz26TbMj2ErRIZ0x4nZqBxLGrQg8Za5V06BfOQKYlF3bOE5HYZC8SjxYb+6rj0mfeW3QmJQ7oS/cZQmunWQ3bgwYBPjqvHQ4oglN/JaO5NDBv9lNwwJs5xHh5e/VKi3nFswCEzRZkjcsyFtk0fhj1pzgNQA+Ff8f3u/qFYP3YaKlvJw3G7tqQMgpPxlSaCUiOXDhj0/bMsTxbuDGPbBZXAcu8v8mAPfCBIx/Yejd9qZcF1MK91sB/i5ArK3bTSuzbVf380ENYsoYXgnqghReoYDblZVC/HxIUM6nBOKO8lz+5nilCD6xWg5hNG4keq9vCr1fxSxm3qKPYkVOkANry6HdH85aWOTT0RItkfDOSR5vv5QW7DHzmnH4+wbHrHEjBc+aPn+Wu2Lz2svSyhgvmNgM4uY7GhJIljjxB9zzd7PfN7XI8i4y8+2ZmWSYc0PCYifNMAPBA4utlc/5gmRlSMed5evzrFhlRw2psastjialyHQq8FDWNSie2tYIKIt9QFAaTlp/l4plD1tewMLi8Wtj4jYggqvzkkbroCkrCLGSG9f00ZhsYYObMV+lbWbvqqTVko0FSf00Zb/jAbOpAg2ooraTLOBjMS2xJmy6E0na74QrnX71H+H4YTBUpM7Xxh/GoXK8KBi8vhZra7dR4sEL1mjEzeQpXeG5zCks5JL/gz2sRgAbVIEHbPMcgG+kGmcTQyZUaVVn36+Xu8HlPfBM5lSSTWmsKCtaKXK4zhVj1zy1BUtENukEakHL1IBecQRQV63J1rl2VQxna/64rhaKsbXi/fyH2n97jbEajyo01SQOuec4SG9uzavaPdPhwpP0Kqm7N7Y1syY4MX48ryK2DRZpUIqRXic+3DH9QWR14UtnuE+HWK5kCt9aEZwbunLAAlQqN9FRioZR+21ylrdYFHNYZVoN97OBi5iTT+Kv2hA8LEr3Uooq/cyyhR/og24tIXHmTFaIOv6MMvPJvV5zTs6fR8C0FUFKCy/ithyoiknVLJB9Vlr4b/K3faA+4wKj1rxsMrjFZHsLsIJNYtUgmelYx1aJKnLFWogeWr3NWNPDpi5o6r+wvtCMIxQpH7Te0lHC9rav3CLZq7UPu13cvl2q0F2fsZ0dmNL1IpQ+3CcSbRfjjHEm5I8GemiwFcLImu5xJ7Dg5BdQMdHuLvT4eql3dfsJsdx+Vrhqr/rg6Ffy668w4CVsZI2FccvCsZYpHs35XUcKGM1+okdVTYVcj9GhxCQKbLr1neY28i92csizFs33EjLBENj7h4ocTVSecBLNiMj5qDKx0IvD3TosKOZWrant/Go9K4fNkNZ4ho4sPtCLTolAaxetj6vxo694SmfsCMuGSJDWoaiZHIRyhxeKIpoerM/Jhr5tX9JVgFu2qnVIdaaiAxiBjliEUU68m3IUTdb9TIHyaHnyB994l4ShorboqixEufLo8ZDh5m4l1tyqnSV554YzUob8h0ecjuuqEBL2u+LN+WqSR9kb+EBPuZqHekApaBMiSOOGjrwOk1XPY35Utqm0IFi7judDQ5wI8mijuN1BXz69DEArIG0PPG3NFGC+RVUaEAJVUkQYyI43548ZMsgjeak+43PWM6PIuejo36g62E0JUNLHVNWqpBRTpJSXfN1snAJJKFTIFgyabS0jTZZW28OD1u/pZHJUQbZLa8REI7chHyFRzZkEdMtHLCKbJyCUtlMkXkobUAXKrfGYT5CNUin+3puSQKB7HIkwUaj50SNpc9BsS59Y+c1rkuc4o3oH2LmTDfj8WSu63kWDslzTFoZUJG2yvnGElUiJcZARW41KbqPDDWgjp/SUGWwHaGHi5JA/NNGjLBGU8BLB4ebBFzcggkNFGPN31RuLXqYhnWQQoJcQ1babwRC4G1kiHIkePvP/USilx57Fl5cj+WjLRsbRhKzt1HJXCZIO6GFIPX1xEDzaERyytn4tAeEWCac5HqPfvL8Pcg8qlpBsI2h5qhOF0NJEj/qFrPOLAcB/5ac8oXgtk+AMaA5EH7RYBB4TAqB2XLmLTak7anpTTWvfO3VvuLlehLQGsNcoKHCd+Nv0Y3rpkEdMmsfHzkkFkv2fYAhFJ8nJDw34XRtxiJiPTKG5k1Ry+/pxPsbIK3e9iA+pkiNZVuJPwdnGVxWfCW6ijSvny5G2pw7v5Y0Ya8MLBN6yVIWQr20JdrtgYSYzRr5raQZT9ZWh5v51WtPH3QKxsrFoq7mD35ydTUT19LmTmGwWaJhVlfTRjW0GSgp7Dk7PIDEH9HVOgEi9j7rz9UMDtxHNCac0uZDjWE5ZwrbH6YCwL0+75qf9cLA1bMi58NMKfKdXktmaxcvbziQ0r+/T05+3gpKRo7jtkFK/urjJq3cgk4uQfX8QoCsRjnZGTPeJEvZuYw35F44dTrzGIUYO7FxEwg8+uam1nSGm9vmEmw02PZZ8q/EBf4IMuHnMbRSaM7e63aZB7t5wBbvJD6pv1IvSyGAC2iPUnxBq25WzLkVJruZwrjX4Bpebu6VGMrK2FjTe5fv2b8p/6gZ+FzSHOph9TB2LCXO4j2w8ijdnHL/GLFmIKSwMmuPNeYdxoNsh1NiF9ueFNIogQ5Cf532j58M7y9tkHmsHWbWRjX0T3o9LdmbT64kmYuMm7PscTgRXEP0Aqb8sKmbVjFus5G1wSnBNIUTFi+JkpFLXFwf9tV4uLnBZJ+TCFOV4XVvrSZ3n4pdwdLWYXyPOQ5sPXfKBNvWWxAIW003GAzGnApKr/C2fKatqJZQQ1p76uIcCQlPFIAqZ1bFPl5XCrb1Xtn0JUnWar/yqwgu3I6K1rGaTTsSNkO4U7RdplpCwsQ4c3Pg7Lc/0/QXMDvvv1+N3M/pAyg9PTwsUWu3t75Uxxi67aSr172pGJpfcOTtndnt3D59XX4Fd31ejYhO1Ks0nHmjotZwALUBm8bUqomAWpzZ1UXlg2m2ahXwtrCx62T4lRjNa/thirVpLXAE4b1oupJ2yVF1yCDhBRB1JMkZMiMizgCIZWFErqiDWNcJH6kLqUZzgJUKAQqQtyIYk9atY6e3hg+R0cbvE7WOvgwRfo6cfYUctnwebIXz4NIC5DcFXuah2S+DVpPe7jKswer2xpyG2vXmVFMtHmqAWymI++W16oMmUx+jZQxnk0j+f5zNfUlq6ghi40z4q2tvM9FAhrzhj/svLj6qilvBezqm8CGlSaiNPsas4pilBGEtqmTU+cZxvG5rspAbqBYOO8MzON1nWY7TLQhnnpoE9jr2Ai+LqkIEEAxTDDgJfXcpgMTJ6tNtdFvDmAHQHLQW5h3GAzeiSTB2nfosiVMDXtvzIxnWl72IrsLM0kPlZN4QDm/7q3VZbjm8hp6XIwaOTpQXRyByx66mju5SHXITgpo69Wu1lCL/qYR3HfaW18/w0+lKsjgTZmzu50C49RKJ+dsVL7zNUuiAkOuzCFAqbXnfF0LEI2IvQU3V/d7QGrt5s1pyHQ8KoKBqpVJPpNFV2Jfw6YddgL4nQAS8WaKQDntFv2gmZDtT31HTy3sPFdxRmMXt/MiR2nRt6Ua+hPP9+/mO2dIYAKKi0cJGerCZfYrTmH70HTAywbgfcyuoW2VeGV8/VxIR86r+QwwlOktBVtI+E63QMHh6QLTafOmqg8seLbLQOHQKxCAy5VyWBUB9GX55sX6z7Wim6e43/0GmFbdHZCf5bT2L8eGDKvI2/9TKUKCg8RweJynwZOnsXWdoJm5ipVLa7yOUUpgxqO+VtvqwHKI3AlAkucV+UAjRBBUchZzAKfOy4OJQciscEVjUQUwMQ/3zcKBphJfh9D1onmA5vv6czz5QRgso0eRC+PJHl+4beIS2OCsopzBp7IZqlu9j9tmwPg1lf15Ec2WaZzolTAD+O5TxZcXRaykGnKsoLCRTfqqIX0PJR0enzbn4xU4nzJJTQMIpWccTwDmMV6oAiiM1ve7Hlp+FymVZ4prcc7S1f1xqoBMwW1ekms9wB9hlsb1ziuQfcOGHaiZ8Cm5ERzjlT10Lsrvr50xm1XEkDdAIYxsMUcG8hqUIrWf4aHE3VdgEx5fCX3dx0uoEwhWpWJ1dwheWDQ9XDRR1WeNIGqxTnBM7+DrFs8P2LGG3Si40f/B7MRHwMoxBhFVlPClokCQQZtXA4vzNKYaxuxmjN6wnYw8W5MSjf2vpfFaeKAmZQA2PS0BJahDYTejIBVoploWESZXYTqXTJ3UkcNAIvPieb22ou5cvDdXWq5CLTcHfy+h5cTlSwXChviuyFrfIvi5aORU4YOz/Bx+tYQExJKcZ/g95JEf/YmmtZD68sJMvFtCP0Cakr3W8AMWK4m6M++B22DbgpnsBxu1IU8MGxUgSk/UTd7dX3yXVk1EFdMmhXmg2EJYH2a0wkwNF/EOtPJmK/NYKNvz0urEUGw2XZdCiZaC4yzcpL56F8edNZlyxgfhEZHx5JZ58axBdHUU8Cn7HzmvVk8lcSo0ZVr3XLX02NQ9Je2VGq3hZ0clfcCPdQK+H4lf+4ZIQgpoAt3SFvvbl23nqhBTM1wJXJHE8AkdHDYcXqG4mF585VSmSQhd6/ySbydMCG1cpqEXe+TqxzloB+rAgSO96KYaF1x32kVWY2lTqMVobzyYVjQRCtt6VcezBuXmCnYO636Y1d+8K+FcOsFIFKqRhfXrg6KRvBMXDQFZoZSg1hwT9BbdgM13BPe+08f6VxCCsgbjRfA7zAQGXTXV0qNxVB1WuOBKjNv3AD5UxIo1WNTZF44jSQDzbFMiLYuVajOY+e051XszxOrwvzKD9iUGlTcDXLnQfBky2mNu0RuOx77Pp/p7YH3GlNZvz5axPEEEsqLWaY5eEmeRCdL/3LaB4270rrbB439/gMnxBB4sgVoJvwmxgUyeadLsvFBYtm2rx1YArnaQPeFUd/zhH6pBawv6QRrCd/z48WjtKkz4uX4QQAiWsl+GKJzHlR2GtkoNQxzAEvGUrlLjKLO4XqUlNaTRkZG2r49zuIJQMuRYmP1atzT7Hh+OsNfZF5eTHtHjcSxqIeAvCPCoIEW0PYLx9QnNTIMOpgezNefBDbkj0If22HAtObPRgHDl+nBAGNp7H3TJcbgbhutV5cwdwxeH6HDBQMBUtZ3/eLvdEL5afpMmNPKos2WQcJ/6qnXUkuYK3Ksflzvp58oB6FdbObDdZyLSFwpIw2301dCElzw+sush8zbu1LROIkGxcmwcz5cjaoGWR0sj8HxENqkrGw1bqOVtYRWrCHidJuKqeEH7wkVm9gvGmyfjfDScGUmDN2JBt2FXjSBPYMjanAo2L1EA7hiKjHY25bdEpIwDFIKr6PMaUgOzoWWtR3XItR9bCP0xeyVENS8GRlDjW7a/SmeNBpuOzqEaB7HwBYNsXBBDHA9VuGAsd8HhuGDEJQszfUxL0vGaihTsgtjJje9Ix27PC41vXiXp+hdl/Bw/qUGg8VrDsqiBlm1PBtG/wx16RhbIw9JEWxYCPJlOxcwTKR4KMKoBRq8GRx56eBebgzBauG2IB0LPOVkSAWHfPlniLV1SBWTKFkDuEgabfKhH/hCNOTlzRIRLsWZ9SulvlubQb81z0BtLFDlmh5ZihopbGQEkHwhGIZf6BDiLATot+oT9z2yU7wnVY/AjeoEDfwm3kbyNFjYDLszI3EkTzc2Ezujf6iqbbcHwzEk4WFL45yGwYWxEURIPb2YqQmj+ylkPAoWjzPwDQIJZngmZ9DxE0cDKTdoBV8IxJsBwYYHFclAtBlDf7eCPVY9InGzlT1ecfpDI+hnAo9UMRH1TGABD9gec1CNLoZuejAufUYKbKOrSK7j8G/Pa56xd2B0q2RX5suEW2xY2L4EU9NeK6uiYfu0+HHM9kYyi+3JFnf2l0wqlCXgDMyU5pshpyhiSkWgtBwgeKdGiUmCr1w9JdhaYOF+43q+45ZR5PI5O9SgniGEjpOOOkBQA6EY64wb/R2vxioTRAIneArpQFYteDjR9O02SdVYpFuIfOhyQB2hrb4lyEzbJ5K5rKZfWTbd9rTDCuFfHw7tDk//DLjz492Rqz12TZ4eQ05z3f0eE2L5tl4YdDfSwlicqYfx95HYsGio5WqqDpUcV6UeVBzBB5KTpWRrwezkKH5ssLPKSwY0AYkc35aBpZxy07tGaVgCM8M35PzFO3UhIIHxcENX3fNY9G7ZCvwE4wQVCIEtBBM4QiLVLGKgl0YgklYzpyOID1jTtZ5MwgdCLM22SIzRzrXDlXY84kFR3bCRV36FhDmh7VQC8mkmTCiOhOUdiRFGQAY4ydPM0534KAR8KyQ/KjY+rnRXGfOYEF67TKIoUphxpcewTptgvgBbvuf68x+oEZ4aVO7FUPFrjBFV2U7Zsoy+NzBxkGCBeoB1QWoHYZuyc5tjTBdbnC0msp1lGXJBfxqzfXU8UQu/U+hVzKVD7vS7l9cfs4XTxViAwEtqCFoPUPZ59P8yncS82b9IM2a6K1uRDMtLoy75cO3rCYQHfzWae2LN6lF6zQCS/n5NtcA3RsxPWEq5t1Gxmt5oWL/WqUG4QhHlupJhzwat6MB68iRrUXCq0tXm3mmyNO/FuE4t5vsVl52akBFJnrIofZ1Zt1vcLIUhYN+C4glSF4lfLMosKvWducPAKq/NDY9xD40iZ0teBjNGSSg5Z/9kRz22vUvhl0ap1eFsdoJHTP57EdIQZSGsLzAls5hsyi/GlYw4o2U2Y63CTLgUxQf9X9INPBsEVb7E9yGkrfYW87BKE62g0Q9os8eAN90Hr26Cawh1DVuSnLh8rcKhHio96T15NykuMGAi/XuCTCHUY8lNqHhE1jHhiM9EXnXhVFng6qlK5UiwDgRf67TEV0yqLmqN4MVXp8OqyqkCzZt6HnAvFoEgJE0S9Kb3Tf0EH4QwdlAkteMnuFGCddapRFVFr0/oQTKT3qfc4jTvhlE0h9XBhUHjRr1aHYWpZOuNPnBnejb41A506OmTcNSHMwjwe5dX2lqnP1V07iJtnnE6qIPieXkk5bD9v4q8I4ybLqiQrSeGeKITZbUkIqmYoAfgVVyoHbZ5crUPdc9AGBj5Jw/oIgHCgOUPpylM51sdi53Rj6+ipqI2cYAve8Jh3QvavqLNxxvmnmplK+5OYMZ/ozoBOD56VaC6EE5qPSma8U7bqwnZy4B8DJqqV+2P2JilFxqvI3HUpC3AvnsTrzzX1EnxuWYaxRVdPthYU78sC2pn0ntJUF3PKLzfIztt6P3KK8hoPkc3L063mWdNbddowOhB7p3v1y7pMUM1XCsasu5GHRxTM16EejYjOz8MZld/VrcOrScMM118FX0HST3kIxNpdHUTrl2AS7wb49jwqEl8UD2L5cpLbluqmJqP2RnxwsP0Q/shHRRWwNwUbQ632fxq1mACDC3dpSr4Nl7zHe0t59D5AEHjDNFBA+TDwNG3zSaS1G/r9jhOFIjvoYfNnJeNoOeocwt25GkO8LnzQ7YDmQjH/rEvBzj3YXR/b9oNcDtTe9LLPMX6x1gWgZMWgIt86aSDynkxTqNbicapLqKsnaMipcVom750MiY+cFhXS8VhO90R7MdVFFTXOtlJk5367TcEPadeNUNOcq/zVcb2Y+rd+boZ0Hnr404gTtjW64Qt7VCC4GzNyQ7g5uiNuO0vof5gkj1ZC5l2YJ3x+KbYs5kv91B5Gl/o72mcTHAlkNcCzWhA+IB7bUhdWjT9EtpY8kUl8LD+ATKZ16VGtfHO4HX1ZDl1md6b8Y1Vv/J1+guTagIpo7+8RtW5dmu6mWxxcDt787WjHZ4yXBIokLM8pNt39tLKRALUp85hGW7zYUocBN0xaH8sUY2uxAVpxshjg1oi/J+ryp7cW7cfregEU9B4jLQBntAQ9Zwa39VNRQs1hy3PFcO1zaCjETC8PiZkJLnI5OdSHvDU08ahu/SaJVAcCaM1PDoYlU898k9zd8Eo0gM6kueoLXmCmp5uOtuWCGJDMx86uDZK0lBHBpN+YaRl/3jGa/v469nma+eUTU/7RZBIr31mcB3ovvMqSOOfxz7Yie/4vFWL1N4svOXqyUYCV91lUXuvWPVL7+dXNpIJX6UUx6enbmNOjvUSQ13yyeaHjpC0fqcsdbf6LDNEqP/n/IHnQx7usznRj/t9ZU/H5H3+/0kr4iTFWeTroC7UfWpf2HMKrnLeLF158tHO24pP7yJ1SpaYHgsonjFWd5XicP5FHznDndr2ZdZXOdGVDlll5ZCZgyKPydjZESVmQMHyy4yNFMFWzGqbNi1Fk/wyZT9uSV9Nl9aqPI50aU94x0uCsusXAb6+ymqB0Ea5zLCspSeWwZauS1+eGnDJKaOc+g5TMatZ071sssQcTJbn15w5/Shf9eWWwtmHScbqG7OOPEjeQ0uu3yC02fNsmrnwlEq1dFI4IYx00ere+EAUuWJprNvg7muM6SFcN+t+ab3n5jJve9skb6IR6rP2gEzNuf8atVSI1QfW3hoUGanknCusL5anglGqSJ2Xwb9anFidTp+bloT2nQZs1WlYmUP3qO18hpJIniTvmySRVn3LTKHM1ddMIctLb7SZ0ZYskytIPrr0qsVj/Ku0cSNev9ihnvOhjtolndpiqpndSzzzD88tevMQdJSLJW7UPTdhcesHyYVbADdk/VQM+9ROtRH8qpnQ0lOXZLVpo2bO2KR9DFOOai5lqS7VYJlxzs37ElMtpNuoVh1Ox2xL6Wc4duCUXM4YwXH651WQxZH8YbV6V3Z2GT511Hn9wngyMDdEHM04AJr7MSCLOGuB9vqZ4XTWJNa9cLlXWzHl6tacEcwRmrcYGp5UGYHE3Gf7aAAtgKHwxh2MHPjfg2un2ltuztYP1HQmYGq9gKuygRK6WS5Z5/vLjhJZ7irrjXjWIPxIKZxAlhXjE1NYVAQQJXpEUCBCm9e1gY11+cp3UykxwQi+a3oXJ7izkfxDoNreXmH0Z7/tVnXIEYZnSb7YP6Yd3xEphUHJm8XFC54r6zuQzQPHEjAXolghOcXuUOdWUBmnvEpD5whI9FalU4RYaXjzAufG7qr9nl1ki0Y+tWEAwFmftxgKJ4PBShFfl48WRUZlXXoF+YTB9fboZ6RfoVR0jP1lfZ0MidLiQxbWiRXu4gSdXnoPhTSvmVrjyk2k+szzdOwrsiwJ40PzeOWGEabUAK6rQOVKkSBqtCrEh5AcR1fV4H+i1HfqTTTTmTd9WYKdeGl29ixCe46+LJB+TDc4BjUXuJ9l7J7Z2OXjdjWyviZajbFbdHdInQl23jQTkj0rZz395qvW+7RRg2reSh7Fdvk+x6V3dK0WudgY8KX0QgmphX7Y75NNho8R60BAgml3Ot5R5UnULMqA2Y24/CJFwld73Lqk9F4gKK3iJ6WOUEduGJ6DWVrGkd+FiqOp2A6JMye61k5V1kLEBq9CPaQVLhsMtO6CpcEnKclvbyY1EN9rIaF7OQogrGrSVhLc+LDY4ct1rAPFrfEw5/OdI+Kcvnsz06ZdI384XqKMxjiI0XWyXZ5HR1JyvL9dNi7cgg6g/GHmdfo2RBqPzzDY3Xfnxsn91xphFB8vTLRYVbV2SaFgpIerHmva9QNB0dTGcAtfWW3Cj+qsWla1ctXcTNnoYkKkUpYZg5UXtFdeTfFdlbf386W3ZAixIYcZl7SJe2f/ohWEjD3hM29JS/aclHAsxhsYqFjKlQCaIqYOHH6tS2Bt7JFa659+Y76cT06fKXLdlJzSyzo9+Pdm7InmL0KL27eYi5XK8CkvA5wfXtWAqSxv9eVN4+PkDRoXndAgxvn+RUA5PtwoMyFmG3KZwWPcKB3GV/1ijY+EfPmJORbQE1/nP3OnevQSqgTYnPpEkdW4w2rTYY1WJXG8+Dt9ox09zLUSM5QnU64ZCiR+vpxwA0+az4I5hikYqpck8PXcnhklFID3AANiBgBacFDZ2fLDugpZ2pBKQYsWbYLB/uSau2E9Jp6rCfXzA/7lb/nDTjaxJDfEzwVQr6Z5O/3CT9eHoQFyw8JdsETWEgbiOaB89o66Do0byyD1V8+lAaT6c/GwWyK4JVx767/YonLIrbXEjfLFiv9g5gLaA44VgIThqQCVkZb69kRYmEg1hx6gZ940Tp1v+si616YP03Y7pzugS2p63cCEHaC38vyOw6/9cp6ONGjK5lwdeZb8nm5Xe41/SCux89IKEczgYe3UVzcEZ0LepZez1jVFGoU5tVKaGw8U76rf/t0YPx+VJRU5P/+EUU9K9lOcL/cik6NFCoB231lFYB88JUKRUsnwfS065moy45j8aln9DJlbBltP35mPW/clbyzlMzjYgTq1Zw0y0mdst9Q/u5+BdC9EqeSmiK0G3AGyIsSDSBdm3NQwwMzalnX1Q9KwthfX4RZ0sEzAGAENRolfRrUybanPwS7yE5Q/0VFAgYz9CmRNiex7SxF6pKuoUZM4BZjL1NtLBnvCYC9TxYEj8mvrRojt/LmWx73u71css27cxiSVYpRpmQHvaD/yr8QFqcOaEof+rgle5MXvWKVXCXb5EPrA+5+mCr9YPdWWRabwvoQ5I0VttLesjyTww/r7Zeu2HbYwH7FxiWCKuQn7knnWERhGytS0e6Vl+jEAIzqkGQ3D/MuMlbcoFAbkMr/T2+XBweT7oxMF8ncIpzNPVze5lXTs+CVvQhnLdxalQ5f/4GXETwUfK93grGtbQydAIYwpXnzbOIXn5rHNow8HNeUOo8i5eOoB5DaSbnjgLb7GKY743tHZ8nw6AencYFAAfyOKvXQzg5qUj9hRW5DsYTOY0VPfy1u0w9egZEOgYSJDdt7T0siLwL2KJVGG1d0Z7mwABj8qMUr7AhX3Xhfzc1IRJDo7D8WxV0cg5Fwdg86G+Itj1ZkyRP2SukfcyfjtRjVH+uxJPV09p8v9Zia9dFAsgUOVCp/f8CQeIykUYuoqGoi8HtKGHPXECQ4tQ7xuFmQ5uJujqQ++oWQzyh/fNaNKzEVLkwyR8UQrLYWP6+RrgZDmGhAOuuS2fjP2Jac3a/mZ4gy/uFrPk47BS/q1d32a1M+a3ZfKBhze2aRtbAkQEzSpGQLRioe9THFgNrmXTGwXuIbDf8HUt4K27LeKml1etJr5DPHVEnnICpusaH57fl2qvucofYiyvOfkJWpCBwLhqSGkS9V4tCxxsEKLHU6GMS5OtvKlPAPKnYL1A64tXCw101N3N0luYVXjweh8BoXlYE30EygK+X7mqhN9V7tiPGSni5/H1ldfCplJJbkQOA/pMVXHfVjp3Nv4TBAjYHmY7DLp0hd62nsV85wwjE9XTApAB9hr4bsPNoqjrL63P+QM/sKMCEkh3maBer6hTOoTcSAK547/HIC3CCv7HfwZqlNgG/vWwaPuNxHnWwCQMR39miUqay9nIFe/YtKfd3W1UGsrn48XLScMBCB5O5CtLArswv0dAuUg1wbr9PZK68mfBzMzWnBVEceAs+LLaHjerbNPVVWmal6vMyUC4RZv7p2tLGbR/Q5FaLgPTZGYYD09r2ZE+LaC+gniitBYsHKehjmRcTgqUYWGNQcYnT17+IJIUMFEGJnMfakjqqSwwZmHFw6L1VjnX8z56Yra73gJho+UfXmA/sa9knZL52k11czrloQWDx5JjmvloUtw5d0fSfzcwhgFTXq9MuCX1hA3SnHne8SY9ZrfyMXyoD+uX9k2pTk+6cP+2MtoGa9bkipC114MB3aUM6dLmpbBnP6NRC0aeTFFmxxNBWTFb6HOHRmRU9Q5vUp2vb7BVQCsBlJklmNv1pVzk9QgApj4QtwDiUn2ClS7VXUS4d5cEnxvStpVYLoVEbU6+sVAmJsWniyvXbc8oe1B3lE3VrUMv8whmQ1WYimOIM9jmn79G43RABLJtLQOUALSJ8cyhXvu7IWVbm3Dm4yjqAOQKz8nqgY59oZ1K+n6zz9ef8em4S/iKfxGg5XI6pK5CaLHXJClwK1JUkU8zWUhxhZI3fQ7bROnWia4+0Q9OuI4qKLHXw0FBJVB+N3Uuu6zH9h4lnY+212IG+paaqR5N0wp2VCqBq2R9YdidGCqE3sI7Dz0pOsDbpKfajiN7jfyNW9J0DdqsZ46OKU1yqVK5zmZo6d0L5sG/SldpFuYnkCX/uTQ01PKp1M7ymXheWMEaWNNRlW0gi7kdlSNmfr6jyekBPrCwMtPFp37xZO4mvNbKQVekmOZS2aV7nwtiUSWuBOcGV80EfD97DrGS4eV0cWNc9r11iCWUHSLL09T68T4Kmkp7nCN0uBTWxbTg/5oTy76M5+iKJ9Eo+MebfV72n56k5bZgIZMd++P1VQiFTpTokCx2P/jLqcvwud3JWOHAdyIqVpZZD/vv4hyE74UUNsvlYgYUMKAKV7pi/nh3O1H6dMiicNBd8fR0YtydHJ24BTxDKzvtrgPGOB1y2oW3dXMwuYmXVJT/3n4q4iwy6DlluU31NGQ1JwKV9ISRVnqHcP7dUA0ewC7fqgvgmPYs9PRQ0eArIJL6vm9E5igsyKTe81kc3ErpFYi/1MmnYRpumAKe7F5c85rLmL4/G4nJ/Zbq6gSdlEpL2HD0BoK8DQ5ySf6RvmNNsggYrkpiTgLhQseEFoNjAZn9+oG5FMPsJpDEWDzW6UbMONSnOXD9kpDxls1U50vifC7Ql4cSDSGOXUHS9qr2CuTdNkqGzGPvNRjAlhyWZM3onMgGPBoVLWeX/J/gtpFPWkaRZHwdqyOWVZx0Me4fbuDohGsy+yJFWR9BhpV+Vn10JgAey0q1hT75Lu7JOwSDKd8oj55xOL/o12XP8ASsnQWgfJED63SvV/eGFzknx/3jFKTGRDKBxR3v8QZnHeUhHa4REy8JdPnsPWuDsi7lzimb4gLC+88/7rUt9Qjv+jxlF8SGMY0g9z3OPuTp25rhRyB9W16dmAmlxUf5FxCS/Qwe+awY6/Ps5gB7+MSSgsx/QOPFCmAu6BeKGNRVdThHAemNtZdzZU/K43rqKS9xbCSVapqPnje3G0w2sH+k3WeEuzeez9T1arJjsnnT8rCjMFm+1gBxMes0sDES7N8yYOQOmoYaga9F6UwhP0zOMwjjTunDOWox5d3K1z5g87azJ6Q9TOQb12M440fdcO0/ftIuOLt0v2YhR57HdikK0dDpHTs6yU4aoJnBmJk4D46rs+K4qWpcVysrse7+rTn4Cn7fbMNEm0QEJPvOJXKDpdqAcGwlpqeSFi7HAdg0wxP5SGBveLV/+KIxKxvzEPqgI/y087nyMeE7pk+a51I8Ee4WS/8qWYRYkxF+bKpJEOHQDMwkv519TWKOsCDLxaeMKV718pMcnfXxcmjxPBtJtUR2rEEISUtrVvl+3aMbE4vghzp+qlm2YTaeESOB7TEbBEX0yIQTy3YY7cceqf1ekvlWKj1zIp7326SLVaTNW8LP+XFQQ7t8PJq3JRbvuWizm/4/gnkdLjza07aYz2nJuJ/hwsexHnTjy3R4VYBWmi3+XgCz7xJOoEQ3bpSnXZW0RnGaadkvochYTajXzmVSKyFxl1kD1/VnVXCM+Q+OAgAzhqp1DgXY0Ewoe7bsdpcnywuMqXE6UKKIT8LxunaXAE7QMhwJtmEriejN50Ghw2obAV6jmJAoi+MkJOBZ0yVMPOEH9WVEduV0h2Y+ya9Oz9yoAq0o2bZ7GTgvuNOPWNbQ5nZUyeFQwvXyueNyy/rFVuehu0x0yaK/Eg8ovGSWrWH5S3cE5r7ArrR/MltXBy+CwzDsRGG4t2pUG4lwAckklJ0H62IDUUZNEBLBEOIf/6pjAlFfK/Jp2Bhz84E5IADJEgmhT+5ajBSaoyfpmfdr32PcR1LJ+aAvWe9zJCDujl2T3YvnRTsgh47iPPc2Zr97NZpzuE+Xil7Nkico+RQiVmgtYYZpOHHprgF36XAqXx7QZjrHSsJKNk5YdzYLY8eykMxXi5vHfvLCw+el96wz9Whg5sPJrrOJvgaPobjtlY5Vcg6FefkOEzYOpws5hctmInVmWJPWo/U8knZbb+KVaGFQe+mumQ7/NZGfN8T1x4s0JHtUMvNo28gVc6KxFhl3SDWLo3E+qoQxZfA6N98FFnC6Em7+G9xz+N1xbd5mr6Zv/1ydEg17AMcHbWu+hI+e2h1DiPtE2KL40XY/QexIcn39Uz2Oi6XdxFcPgRitX2X+EAmWnSDlJrDz6aVtECyfKNWHSr8AywfEglw3VJByQRdNP3CJVwM/sjQJ0UktmsTmGyi85y1paUZtsaHRIpn+IN/JYu6DDxLm89zA5xzU2PdEoP0LuMK9G42DWP0dn2wH5awD+b2dozf55Ork9v9t0o7FmvFRj+X9e0kfRmhCh4nriloYmWeQKGpmEh8W5msVN3nZk9MUZu/JlQF6S7MijOt0diHHniQ0mFScEoMnti747No+jDkpog59uq7WJZxvZUsNlGCx8qGuek0j5W5I2ITLuM34ISRBe3YqKWSawMENHNs7jpfj0joBQW51sfULwXhDwE42uMwgCtGk4sKn5jp295xkvTm3uwlHNukJ6RdVw3tuLnuf4r+wTBkYm2K9P7xVN1WX9pdYiQ7ujWMto5x7uwp3DGZZLM0hU34RGcodcxnX2KSRqPfkkWsGaShqq/ZCiDWpSuAuUlrO/vhqUlvfL/dIeN7gmveapB/j7+GI6KChm2GiwOHWm4anhHrSUnn8wyl1435Az+helcVqt23yLaYw+aqPBluGj9Ne2oo9MrvMucZ2dHxXmkoVOBp/js3dU8LheORcSfAVXVyL4zmZu+4FPodDjFj5NwWeoURMz97hq4eLmPj72NPYq9pNdetqPdoRWnjsU0itaO2mwhsyDnXtTrmhUHePO9mLhsbx4vtFk34MsdC2A5eRQC1TJjDms2K3sRI5CCWktXUQKoCR8r1tiZPWHbpEpNXpQ4LNB/OWs4PeHUKFlj/SekIXz52/738tt6RrxJ7+WiL5yBM1ZA82mPH1HPrufD5jj24de3LqdSGfSzTOyX7cDy6+9xzO+t7tQ1WCG5AOaoAtGspurBz8HYLw4kuIKa6xIKqNGSBzM4uOd4h2716Uxu4ZwrPf16M/ak1cI5WhCdxlqNZcNgt5Fa3faEmH3Ld/PVp1zaHVkGDnTdhpeOZAMpOFCfThhRHv57P8zeEr0EQLPa6UWswhV6RonSrtDl3XQq67cda2J4qauNvkYYNpOAerHGPrLcnEnC86CuSOlWIZ/rveDkAsH06fD+M5CS92aK9cfwPtUDrGHIxJyxnbaDnD4aL8Fzx0reoA+f4G6WvlKTdQwkhoeFc/h36iH/lL6nCdBPEJFL6doe8qUwaxpN502sOvpeTOreko7u0Gz1b3Htq0ooeGXpUiuZqLIVepIlbc2XkrKgvz5YUddykh0MlQ3q6ebqnJZvmGwnzSGAN6XzBCKekYwZdI0h1EbNXr8uuJW1zn/ZFeEH4cMGY6qpAD+etg21JCGgDlvQNoCL9gd5BnXwqKY9rjQYCAi+FZj7KcGhF8AH7jPjA4uJXtkSSpptMr72PiAFSWuy91Pa1/qM7GpBcv16e67h+HaPxhpyhfUtQpznAPcV1KrieYbltmxoFWDhZzhg3N+BAfksOu/rXtZDcRk3fykzPym8iBfjAKs9F7sTUZA3hPO/QGyI83E9QNGX3JJShX7hyHWhp+bNsoX+PIUuuPZ5oUZKb+7LBiVWC77x2eKZ9+lzgpu7A1USS0bv2aH6VRGaPQiEq2hO5pR2RgOu1HX7x3dck1XeshVEe5n2Q/Fj/OHALmOu9lSCLbTfxchRyfQTjeDEehyc9Md6JNG2L995B//qqq66+oA44J/g15gL0+PDw3Hb72XXQb7lN5UXNXjycnQel5Z/elf7nZfHUSoNB9Kr+AmvWTxtRWFDSMra5NYxOvLKYju5RHRVP5BVHkDQvgYnpnhpqbiFD4HlaIeFrnhdIZlTTHuc5Ds50mtpTqKtT1m54PPTQvLYzJreT72c2XQ3dtTW8CvLhDt3UVAYsyA4lfsvhGNKUG+CG/WOpU+coQZwZvsqljvDe6ENbEaoP+53T4XnROoXejw4ZHprJmeGDFXw8ybqQXEvXhy2ZEqIryvPmA3/hZUm0bntpP6f87ojlkL6BbJgLnu5Apn5X3XQn3WxT9tYlhyI/k2l6oy/zfd5lO1lQI9pvNUPP1CY3vkoTwcjD33OpYVTlmU7TcjIBaLOyjJ8CTFjKJOpaFhCx9Uzb7eEMCGTP+z1YZY2PXaAQyWlm1/ymzlIISke0OtBa3wM0m9y+LOzyniArzJoB0/S1HGrTU2RjeIDKLFrRItsfdEOOfqokazi0ZLwd9Zkq3YUv8uXbbsRatmOlggULvRKVb7cfn4n7FnO3tEpJN5nTPrVvtCjTMuBZdaung+7YgQXLQwc03RvtdTmzGG2rMTjdaEjOD+5MAiROLb3w/PCq7rdYNKp5D6LqpLlXJZ6KWZHieCyKGM4byD/S9K30u25jSkgJ3WLV+JzY7QlHZNNpiUzREs+0usKnsgNf5mIjhwAlnp8fgKxNg8UEqnl2YJgqQQEZzGVMvyxyQMU/ximUYPl/SfXlDeXZ0CGC9uKKaH3RAGX55J41anJbu0j0GgODX9j8czlvwOTLSYY/mf5NnxWRK2Y3xxGhvu7EMTtRG4G0Y+66kKIk0EO2FAmRezp5tfNxzxVdIBujI0plO98PsKPb3CHK38kN6ifxG7LzANbD3eWpdpV8uCIcmtmeKMieEp0Mfqa86Og/0QRcgO1K022cQBqCUUIezUvcgj+OXM4Q0U8yMkClaJhtfedt6JIDuYRWn2e+O74YofnOaJ6HUNvN0TiCuWCofV89tHL5I1J8d33keKCxoxKZJUAVnKqCFLJ3dKkdwka2HXd9jUdoqVp26Th/JAZN5DDRvl7RG+PPjznIh7YTG8/Y0MdJmsCKILZaQSg82RUxCiDLjOHIU7FkcJ+rHWEeNcN5lCE9TSRUT9WWcruGx7ONYtnBVsMQ9hTb0YleeEJ7U0VytWZqtFxt30yiI7E2TUogLe1AfgmXeoAlh75ymficS3Ci6xdZP4D7BBP1DN7qR470Ih15iMwV4FPBfTTfaNby7TwT/BN+XbnUjeAEY7eydoeoCtoDo2XqiGk/JhbRrv8CJk7Hsw3DfQWgM4WLKHagxQWBYGmtUqoaD1KKa83IeoE+sVWsXSnNenz5SzCoeLa0Wp0M/9h02dx9/lG51L8eHhtmA7bup8cDr/KgE6u55JnNdu71wRyXOAsJH/BD7u4XAIT3vPbS+zLVXcQCxNTmzYgDUmY8pLPjG20MUqYFzkpCvM1HHpkyN6V7RSIHX4au9uu3BTYT8X35cn7+QT4lnefc9Zfz1TA21GfysGJYwnVikxYbPUHGQr1lKYGVnk8SZpWpfZv1s1NVbfc5P8iZJ8hjD8KcxabexgUZEOFVRktqdwckh/FSf6sMgm0dkS7IrIXgRSdq7Sc8LIo2NFfV8uTNmdqYA9GbYlCWrvzo1B+4qg6mCZrvzBEsi1dy2cood2TS7VNqAtUmXiVoSrIC3Qhti8Pt63KYQMitfXvl26McdnfBtP+zfobBfKbF6lDyiDfgTosXoN46ZePAn2P7Z9Q7kMRHIDYsqQu0Qp6OsfXpDaBetv1R9X3LikTqf3HvfUelJEQDhnO/SOaD3HMwHucttaE8JLpp/h8+jJWJJBbcsai530/lIEVMFTzVEChtpJ1kZRgte+VLrNQ77Pl4pQfz7ZbDqNdtP+Hg6RFYwmrl/TI/rvusoKOAyW9pT0zsktEyJQz7AukSnszy44NqPW06EzR/iyJwz8hPXX8VzDjiVx3FDD2sHH7MoQyAlEKlCqrIYdMf8A7pu+uE3AXbyAQG7L0rBEWL7wxPy1uaWGIV1U40vC6FHTLazlkWZ0gBkLxDhnzjFjpG0OBUYWREcQPprusrO8pvxVln/3mDwbbMiUcTOfopm2E1DvTxD2QJ6g7Mgcdym08l1ndXtyrDmEUGJ+eA6XhT6hYkbM6zXHhQiy4tV0nv9UDLYRGHgHtGZTwcl6sQfGvTqssuFC5OegOPU8vMV6p6Kvo4wObIxCP7yPdK2tzRG7tfrRa8YyGSed2KXnBUmIIdBTztGImceq7zlsPvQwBFmV2xFclh5zyDTBOIiciI1YW6/oDr6r0hN8+bGbhuTBVfmId/z/zt8UiFXdgPa3moN6moCT6fcEuPQbolbMlltZdzchCTjtaUvwAmuCMcaNeJQY3yr7nAaupDQXgMhiGP5TIhLp8BlPwX4tgvj88ozfAib76GTI+GUuw+olMvo6/hHsE21Ugsd4jSQyKHrgUzNk8JqnNe/lKUbv5OsoVoahm+t7dLRXyd6zWB9KTrKf5/efq6itzAkj+GMaFG/QXO005LkLXBv/lg5zNWEOMbF3u/H71mLoOGfH/15N9x2RS8yLhKEL0r0KVUzfeTkdiCJUlERwv2EPanHXWxFyeTy0ZZegp7F2dAMiLa11sbjjfA7ASS9MCIXWzO93Y092C5lCQInCQq8fp3Lei2f0xv9X/LQP89ETs/FoArW/6Vodi2jwdAGKt7cufMOkzSIhkYaC8RuPocedJfi7Y5Sd0TyVX0pIadhxfZN/QXKXR9qrnl1xIQfGOCyLHUc8rP3LEp2L/dLM3+FgWr4EKXs8vDvX54smbrtmt7Sry83jUkIMY/lqgr3t2ICXmcnn2ZE1tzIgnnKgUtM3mjDqJaoufuV0PQCGzdY/8Hbx8HAaan7/CjO7+kSKDzuGgTQB3wCPoe2lkVKY2vZ7Fy0G8Xli4/H2cCHu3W7C/J7U3zhMRj00HoJ09DMYGYhvgxXj3xJ8FUasJCXlvYrIWU/gm3JCJ3hCtvb+1VnuZsUl5o2MA9Yf+ssHjOE9aF8+WkjQHFWiqr/9toafespnb9xjKd+6HE+cqMTJpYOx8haLX0+8q+95mwj6TcKIbLuDJ3ubyAVf9YGwozA8fbZY89pyv+Eo9CU/tLEjkVw9x8JvoNSK8EoI3t6KZREw0LPXhCTuA2fduB3Kx6l8Qha9Ar4NrfWVr0pK3eFKdRpqWlz6VsaeLcYEfRTZLgAO09C6GKlJo0nv9QmLd6E/A5OUg44IjOZK3nbRfNJyqEcrVA85NdME20Dl6yCe+3OAJLshTUUBQFwGW5co0ZOuCe1CZW0ysoWJMFcjJAgHcCfTqc2Kxj8IopRhbNR1jD8Z4DwQxbeMsgB36qNsSCpQxlHeESXsjY4KW5MCCNIQblVwMXtMz8QQSPiFYRayDwvggzhgcuDbnT5xgsOUybjxnjMYpE3AyC7aNFXxYhrrK8TcBQwwK1bLxF1W0oeMLuHCaNWUxZCgHAqoEgdD4uQfqbGb5qgWCJS82xLD8ctd/GyYiEufokaz3W4OC2NsHwZgTASL6c0IbxHFGegFGgMcLjXGGwqptjTp2JKzCkg2K4D3PEBqAPeBF5dxx9efi+KOxxUVGIMnsyHue+ADZerMkuVGfvL01S7gPRlfaaoE7H0fZZ2WlI9txC2Ryt7R/Csb/3Wc83wR4SUmk7oHN/ytVlPBGMozcwlnmaEwT5ApJNTMq2NUntMwcGf9W/KZ+MBwmW8gTkyDOwsmACrCwaztTx8hkCa71CMIiyMgHwyQFzvrqiFTtZcvNoCOQCKzByUy8Gb5ZqmeSmccFRIISpDAC8sPGqB8JtJqMwkitjcToI+vAD7P9H8x5Kaj28K5YLbaOMh6vZbg+R512SKNwONLKcgUZ9nlyRMPQowEQYu+yCJCnC6AKF3AGXACQoHTFcmcNO4oErDYjRGBYCQMywls17oPHUrsvXzEml12X+2r/zLdIgvrYicICw/T/CN113yPBzvqC/uAyZ4Qonah1vKy3e7pYT6jj2GyMRB2a39MsFLa8CBB/TVKn2men4OV2daIG4X71VwGne+0nPzzKaZ0ZX3ClommxUt41d0pO00p53hq2cgZhx7brkxby+awjvtRylUxiVn8qjH0p5EX+GgvgWF7w1f/t08wSdbXzOu08/aQatXdG0TxFkryoqPUVJU/GeEt/k3LVKw7yY/E6HWFsQ1La/U1GOZK3HHskMDXukoVwz+cvOJpy4ivgCNxgnuyhPJTXfBDI1WdHS3tvSMchXDNU2cr9M9TYpt9N0e5kk1ycz4J1f1V66UqKTd2hbwUfEQ4FirG/6SILWa+J1xZhGsM4JJeywvmmUbyVjFik55uCWHA2FaIrZeYJhzpEwCz39TLt1alMrP6mTnHpp6SPYUZyuWMeR20F3paCcnA9oA8gzeG03ZpRMX04vkVmhEOWA2bUESGGdB1uAT67uzQMKmUFXqBQJMjHeqoBOMbmUoZT76UFvjGgtVac+ulhebFCORLv48eX4bItmVsRazAVyPEoHUWEhi6DtqCQnx8tFc5u99snEkztLTqpLSJcR5hYtR3oLrjxhYImlk7ZBi53B1N3ASRVjLxrBCgOkWrXjqYkeamDeh6VU/88CPk46ZvyU9P6iRoHfZLjKQdaR4vmMZzd4NKdZPHSKNlzn0vmZ1UcaowDjbm72YWe8x7+NZNRyrep8PquaGqZL5b6WoMVdclSGqBatrgRRu5Kju9wEJT1p5xad3VFFXAmc/bMg9hDb3dcnxOIM3YRbErzluE05pAoKuG5G+1jeWNXcUhAHVU9FR4exLJRD4uz3y42OhIgxmbNsl4qYqWFRCAp5Hq+ls1RucVKFp9ahOuU5IHmQe6Khrqan3AWmZAzeYtcMIjomdbb7mIojJarSmd1zoN+mSfpSnsEBIkHsB0QQGkDFw682qKLYT6262HUuVAa4NdshuxCZ10+b+0w3UAGIxRx4awplvnnaOBt0ttEGK1um5bGEgq6Doxs7wl03TpLcF+Eg60IXNEXSZTVKZ01oKDZ61xa4MA/JgmArU18a0TffGNDiz5V0GDM+e2PYDKBWPm8dIFv4cRPvCijO3d25+S+QlZ/JR48UAiBGp3t5WPASR3bH6QyN3XQAawS9auQ/EnPWZ1HW9HSF0pQKSdZ/MOIjVpKbhduuKMzFN4m67JFa5Xpouwbz6aqVyF9p5zAzBN9Qud1EubgZLwyx+r74uDnbmwrUytvjTm3UunrN9YGh/ZsJRyqU6Pa8F16+JuwEaIte+w0vIQSgxQgXUZYvHwiV1X0EsiFni5TLCXrE3exnZQux9HwWbeRBMULBMOHaBfong9gYanyPb+UQOwVqeUN8eRWqAfi2yWv0ko/GvIw+UXu0luuO7PQQzDsLuaA5fYOezI2UT+Vojfmd9boC24wbeqhl0u8QL1ZnF5nm4ivVgNUW14yq48w28SBdLLKq4WeDfcN0f39UL8/M8Gy9LX5/+YyDcMKFQbZ/NPvrxMlu1/NJehuONpfiEayT3gkGzksuxtJLwdczeoNi2o7c0PMUnmsWW5w90h3A9sg9T9TxzgL+v14X3ObWYOZTQ/KnVbTqITIrWxDDgcVGDA9k5ISyFWpV34Wuvm1dWGY+z4m+pSwkoekTomukw5n32nyUTnOzgVHt/yuhCpGIC2kfpkawPPAByf2AD7+J9xfjlb5qjO5DGkq72EqHWhOUjKhXOe7SFkTNSbgx/a96L/yQBCyqwWrh2N1GXs1iacv7rkuwjCkLTwef6NcFEOvH0rnTGWPGIbTGyoZYkqAr/KzrAMwB1OBnTkZhVMg0CVosZwpJQvI8yULRBk6Xgw2s5mkQR7D6BuhDRpsx6xR1wAHSGr9Eb6DSj9h9Wq5YIq1laSF5Ah8bF0TI1gT0tmLsPkiPmwmUlIvDABq+dYttPqeYhFcggrF2UkOIJhH6jIajr34RzITp3cGta11lz74HI8mtZv8TdsmhUK6erV03IRmPWFFfcCWJoVjS6jJ0HAyAmy+VspLuU4Uok2kEyTjcU9oXcNfwkDYpmg5YQkKVa8kN3vyKSEM9hCdRFePO3I5BKxGWTFUKGARq4LXKjz88mFohS0LMRQIrbTW2CiM/GVVj74F72AS+p1cpzKmM+HB6zKbPFnlVa6ymg5EivCkfphW/De3fOz2ANQjrJ9gqeh2tnFozF1k4B7w2Zg4lxUqbG4FcWXVp0/L7RfjFPGITS2pIthGnd7SRlMxcH8ExUHKcR2uVRUolx68ZJdXYKQjBU+hKoW9obxP93iGgfkrDAy7XMADtqOszlkUXl6EEhXxzWICct7lqP9KYB/WV9/z4mxRHfwmObA89tJzfKfaxWTYzvGfvcnKnA7cG4nMcr/QsbrudY1pmUZhHh5gp4UwZ6c/DptmWX5zHD8cnAB+1iJD+d+ne++mgie4hRnqF4TL5i9KPJ3Cu2YbePqw+GQETdiMechFRfLMEe1KZ2x406ZHzPGN0PPJcvWR3lCvg0A6Jk59XU9tftvqDhPnw66nlC6qpDIS8725Z5uWwOMJYYpvTrZSveFhHEHTRypgy4oRt2AA1Nb1eK8tJz3XB+jXPZ3ZtuVSMp7CtN71iCu+IsVluustOMBVhqoovcyeTyvbNpe+jcFV+iGySqUXb4CrKHDfqpzk1xTG24vGv65pm47IBAtrTCsmPJyqywde+ms5iqlXrZdC/XvvpaGM6PozYWDJnbDuZgRCuqU7dWYu4NU3aZHhQLWuMQq52FDDvHtU3qSjBAXEKZycC03Zi2lytZki0Vvt3u7NUyn7O6kRed4yNY+34pbrcw0+bY+fcUgq+udF40yVnhW0uA0+VhOL5c+0fvtzSNDkqNplIss+sCYFMzlDSo0bLa0TOQk4snn1kJY3O81TxakKtSIckoNMnZs980RAwJ9M7eoRjALzkHXpx0kMPKJvx8+Bmii/FbZtap46jO0TSsoAu5PWQ/SteOhBbuPvcXLNIUEI66/ohQykm972gPk3s8l7gthOR9m6xfeV1E/Lqjjrx0FLtq8JxSaSL79cb+hp1fLcvsaa80xDjNyklsEeICsDNlsCmy4FGJ13YlL32hcZNpLI+wuDPGp8daqIveX/uw00XW3F2yHcoInWMfQXLpJMRi8JrC2IBlvsn5calFi3su7h9HYfXm00VPPkqFoASO0vzdb+vqy0BlcftTv4bT6Md89zIgiXfJU+HSbYs7xk6xfHfrt6sYaCJfRP4bmymQk4zqe6qL51uFiwI3ti8Z36hqXBwfJvWkCQ3a6o6xwJI99uUH28GaVEtMaiwkPYmOpbwwf5+nhbQX+sXPIcymsGPkUApgACzTs5NxuWtZ4+OzrlScX8wt2oOhmatmKdjbqKpJx0kvNmDGYEsiQ/gSfx0SrCRNegkfW17jU8Tjr16CI7qk5nuHpxwkcHHRTR08ZW6Q+qKd6ckIOMrWLTynWHzkyqxwLYMi5IpykuGL4fNubwI+BKtYctehjBwjRut5wplQlzkNgJ7kvNGKr8sj6pWaF5Ghge0sOnV+8pgWgpCFiRzWPLZyfe04E4HUTp5taVLYht3cbR0EzVS88ALyeBdz2m63sXx0mXEPDb0RfXIqVyDemAqX/bmX14EfEnX8Iq9TA/6jN3R1oWCq7mlyojkTbRIJNyvsWT7y/26+5/oXNSDgisNzJeuKn40efYHd/1Z5rqW2lCQx1hlXddsUZVIOSWZyziF633lz0ixe+5olpEN8PKDfkKonlFViwui1qrXqHl2eU/aGhmDT3M6Zmloz0eTZk9dDO1hIgNcP+gJp1jqPfQF5CajQTGJB3j4oPf/uvyjL052vHA0UdY03hMTHuDyQTckX7LoPbQmSW1eZWIGOH/QFcchXdX29GnTDtWY4kkOi1B6iY5HlRe73RK72hzlXiHaxlgOu1io0N1VCVmca11KQU8P2T5U06iVfvZTtrW1NlVPQbpapBeL7KnaYEjTZnZSThhkTiheq3ZPiv52drNAVYceidMrncEkq6GggbFC563FUe5yV1qW44pF50roH8tVKd3HCVfW34gzwA7ZwaT4tOdsCLkXz9M09HEraEWDbMz4mCdiReclm2YBUl4pCpxapQrDuaVMdBZdSbcV4//zv9qfj0fGgVxQ9xdFpq/O6eceksO/DufpVwb+zkLZ72Gt77fuYPavYqJrWQaZbCF2T5V1QanlBaaaFuaKVuTE25qD16uadJCt1lUrOYddnd5c68wnXytFgdN0/FxP+Wh2DM+gn/uITJNoNxdKaIuXlw8O9QbUfmutl8fKJLs+08g+bjUxzhtdRXVaI7FU5lKpq7oqV5xcU6UdUj2KXU3R5aXn6lqXuGEVrykDo1ZAuVi7KNqvmICsDUZ7juWjIzkvsET1RV+7gIE7Gol/gOsHPWEUycGSbWcCC3JdYcERT/Dq7+y82C2NN7NrSeWujFPdbVe9qsOTNYyt5/oN1GDcdlAe6tN998jUqe1qlnvYKT26ymqc9g5pl8l/epsqW370Y525KtK4Cmp1Sc5JcN1l5pUDxd+oR0Ub8y03q1nv6G+hrTUktPpG8u3Gku+fd8DLfGVD72ZvNIbXvalyCmEJRl+4jKKVMhMe4PJBNwQvGG1UxjiidQ1zSR9+qrRGe/IEBeQwTsWfqB5oTK3ZqXfG+Uaz1U6d/46nAF0RXA61Trcz3kUId2myfr8SSSW+tfK7+cnRUOkXiMwejgbRDnB80FEqUZDdlrqSXn/9+RnJ5KAV9fZxhCdRPKdzefFajTOrTh0U/VqIqxgFdaRPW8z0Q5OyKBk0I6NuLAJbwsiYIz71OtB1zABi6yQocJ14HEGieIgMbKasHyrug27dNU9jdxnWfw/lhbIzHDx5D05Oj+lpdM7Vmyh4ilI+3cz8JoyWn6bMt69k7cbbY0Gkr+B3i4mFDVQhYxfRqr0v0v5RQHDYZGTp9DISccyXFy5lGbW5+ED/7dm4h4W732aHOgFT6dC6i6w9v/O9FmPCOdKda2/9gvhK3xlydcZ9pca9y5OLATBAuhYzSvt9jkAWCyQnFidH2msoyRvlfWeuxFtkAwvhXHuYIh2PK+CpI81gFchSFE/2MgbNi5tOM5aleChxqwNBLyeAeprn8NpiHCcX3hE0bFFbjFj7uYAgZ8z4bjYxWMdS/L69eoiXZ62KI65aTQRTrCTxkkVgI4ntlqYSO9LgVYCkUuvLQYmdvCmnwCImnpwOEYEaZTducHrGlswMBbNJrfsVEYI/ZXuEIV8wvq4oPz6ttz78fQcZKqK49iXyFC/Y/ssUk9yeTRBeFtZTdHsT3sCpu4cDyBH4PsLP2aLrXs9yqg1dHdUFKy7kEBcnXIyFRXYOz/5z+bpF0pR/0B/Tw4+cQE9fmjBK+OvdhIzJBZuPJ6AFy0TBQSX8HAJRIQkqDlkKBPO4HMG55OgbOhAtk32lBBGMxpBhRz8zM5Ca48XzJBkiPy6kmMdKSEwIIxRmn7W5kEC+f4RROobGLrfuS9iHII9jF2Hu889zkSZgxVn/VbTbwQsGCzxG6Y6mZPBW9l/DNPTpLUGX0XxaUTvdP6GjjRv4ls476MQsUU+vEqwBP1gsN4XBruJUeevdF7XYgIiQ9jlfeH+wkvHfLi0fXzPqX9I7OX4SiA7Lb2Wzgkz8i2befqu9pOAl1vY9g1iJgkyK/rrbpzfjPv9OxdzD7bPaK+TJEbzb3etmVT+RsYfUpTXhmuxvI3u8K7CjE/a8SY5+3+nBGpgqrH4SkYNQAom1ZHW1rQgWb93IBTFpDZnWqda5A1+nwypWt4+jl6c6/uoPu26t7qrh67s5I7bujLlw/VjBa/mojNkVXZq7GRG9nMiqhZxWj9UrqarOv89oCK8uem8LwUHxIBqXQ3DsnX65DPgBRNHiA7UdaCKZxQttzf9jKEh+s7q/MN+972Bmtwa03nM67qoSj8NVKaMlQ7fJXMGG/boiMLmC09RoEQzzihHKuMS5SyF9gFtzvTU9+hgGBSYczTA+bKYtd8/MYAgg3elPusVd+uVQ2bC5Hr9Invu4YJMIZQlWlkrPXFIBg6ZIbQslNaMMOMyGLhn1oE9j7lXpJn57V6Mt5TfnUBmL3z/bYztNDkO2r+QPBl/5vSpv/6hd32eRVOqTb+h4oDz1qLMlrX9Wwf6EGunPjzD1iNN3CfPyfbpL66ryvCmaCN/cP/DN2vVeQpItPTHfmKL2XoX69y/NXYeZM4O8rMqH7bywpA19jo5kzf8R1/Js7rc39WlOyMn529nM3dTjSl7Ibd3nEPmf5uGCh9Hhd3aQnybbWOLEqIJSqWLp0j23ih2bB22UwIT99V5lbwzjBT5gcs+fM7mUFltUSe61L4qppvIJXtwLGJGvbde2MxOHwk+jrnugMSsqT4IyxYxj1yx9XYRZuBKO4t4NlXwRrUtice3siGoxSzmY+t3GCe3ij3X4814s7wWuQvKaJmeqjuZQTnjzhO+vviFTIAcPNiZ/OjhA1x5PipvIOeCV94RIW7p0sSmKWPxqnPVuCd/Wyssv+oXelETpqoV5xhBFvtvW88PKe5TWlEg9OhGvhkr6OL706NbIGEunLTum6fxAcv1FtQdrAyl5epenQREPKUwLWoYRvLfcPjL5dnvLSkJmv/NugLD0oHoRnCay26dXYvcp0jDb7vzcpvrR35JnRkJDZu9k65oqzs7REPQZfeL7ot39b3B6qtjiYWWJUTuszI2ibghjmgc4dqxOQe8cK65wlm5O+eAkpt7+JApuYP6IQJKz2ba3lhh1gydt6znbho9F+xKytmZtYk8D9EFum6k+3TZmOvnKEmLXJ2O21fKPj1DjD8TNAjF3FC8RDEbZAok6CpQheI0JCzQp44hW0TFTkvfnTsf3GgXNTbsJReEQJbKwRZroOD68Z7MQ74jOkd2L8qXEcxzRHEx6Pg7ZgX3a+D1CzoR7nXsDRA5NL/51FPG49Y9S3aSTCYGzoMKhGVmKkkltoQLddsS5lFFMZIbrhkj+iViKPzQ9xIDI/tJE/PKi9FdmbRBUUdLMbLgkQSMZ4O7+7hC+oCS0AxmgyI9lwvAy4o2bV6hQmVnsQZBU0x8lBezDDyw5ivnqS5MyA35sQI5ZDStwF4bewe+xmDVx4sGZIOveI2tyHIDkdLQ2L57wYb9bLWs/tL/tpS09vZLvy46AiQu3qWFerYZv9ZOJXOS/MM3q9UiweFpEeeKYKl2KLeYQI5zq/oLN+LwhlS2FNj0DiHh/QMelxJoSg+Tu9WbDFqqyovrDyFeHRxKQZYA1P99uW+xrXW2mSQ4/kszyDvZBzlc8RCF1euVvkpZHSBiW2j5oAwn+nDsyvZutDIgQpea8yWi7/OsrLHtc1FNcz1W61p99hu/Yz1XEKrvnUdc8CaqHFN0TNX99/cCV5uTEL4f6eKWa4v+Y5yc6g0EM+UtvxXIGekKaFsbND3824XRkt3Dx73HXK9YD1/qKgn4oxgHy94ylrmFExpp2zPSzTtjbaw5u04WhNmDhdhI4DnCInYbbXs0b5/cqes52/MXvQkSjiee7E4B5zm2oq15lHthLQgge6EZUr+S3pu0JEjdlAgxkOBGPm/wp5q6SSkYA0n5PV/fzK6VFZXM84j11zP5QA+wDrzG1NHcWP/4FfJuWWKFXSh6TOwJUUTR5MQ/+vhEyI3a+xjMvVcZ/3CnBsmMORc7W7a37UWnKHqE29lL/lGrNQ+w6y3nPQ4NS9O0xrgoy9ZcCURRadROReeFpzHVyZElnOlt9kwwkbv2m/1puPPNVg7+DgWopU/cp6varAQ+p7yNOePXlH0aV49W1EY4Z62IZC+zPMOIf+Ro7GeS2cfTY5Ctr5IQiNS9rBS3Ki440UZP7EtN1OpEbw+UlIA8SEbOKr3Ves7HPvVB4fq+xVDVH43nLdomxxcuQjkGNYtf8VwiIKYh/6YVEaEYRHJLTV49jZdBnCDbqd6B62Swgig3PbultovbymN76KiuyWSQi/kr5yTxWzpzlt74wjDR6/RgBGBCnYV4BK0kv/NGb605LfZnyzf8RlXgNwee7JHqbImonoplZj4TjIiBaSmpZdDobkHj93kvCYNDlHnyZYiqzJi68p79bwt9JBgnKa8b27FMMnfCZbSTOqXw8r9c2ROqcfH48gbni4uXQnXmzAfz2+dGleD1cM0of9BCxoHGpQqvQkzMmsNpSLHWdYrOhAnnhSlrdw5wrLnvSAEgGddn6kWtkMtLQgF3ZtAivADjH78JLiofmoK1y2iCvg+CqOE8IJI6RQVycZcjj1jzJ13nayCmEZ6E+E9Nq12U3Cc80b9RlsLYJn1swh4aBkcbZUuyo+NjZKq1tK4+OXCWnxQTPDslEuodpk8OP6jFd360zB19H2Q1Jvo1CNY4K+9Og0STqfNXyFRbdlWKV8/yob/xsB8Od6s//Bb53xZPtXHK86zLXPzKM8+2wnLsiet9ki6cQ8UsQH0ADnjykwhBciuW3rFPHOdxGAtFdAKl78FxaK4MoYfhhBxYh4mnHuUbSUB0/Ov0Fiu37psfauk5vSHUkandvI7B0a5HErxcaRfhlHbbytWF4r0N8MhDIYJ6C5KFwiIbJwlAfcPBk+u5R/AzRwKCamnh5DIwGT2wHZI6VmckVwouL7PoqWpSeyxW59SC/yyjUKndyTJbbwWDY72v9RK/HqG918eUVnerbHcSFTEbVb01IzgaKSTDEm9cmcyWh9366m6r35bs96eTnssrHqkg9ZGReWekxEVmLANdJPLxmqSrgYxwn7JSi5lJpG9egQErA8odUaRpFl99PlXkqVnZfLPk3EMkWm+KxXp4hhEokXCJW7cUvffXuZSBvhAz7tU6teR/bLN6m/r9U8+g9wnJ+nMagn/gocMZN5LheTtahLvyqoCxI2wh/CQNRLtlXqYMsKTZLs4+zOd2+pAnRuaiudzNGnu/GzYd8YHfdFyI+xEVDemWBg/FwJFKKDrqa8nxypfPYBls/UOERl/e+gLCo530e5/AEZ742sdinATgdVq3V9QElfMxYiGYCc11c7ibKgvOc5ZlFeJk1GCHme2j8ECY0y4HVy5ELq9n075yIpxMibjTNZbU0g8ZivuO0wTeMWTuDpKXGz0JTl+XtOeo+eHgrs8A4fOdJoLmwhOUviGH4SiVoSx0JB+8QCXa3tHNup7n1IS41CFKmUM5pk0Tb40T0JlKXyqt34ZJAOIClafVPD3dN/ScbKuywwVGOTNpL2J/tAEpf+eABVmf/AVL/POPiojoOEG3xNQfOhwdPtPNc858bQcRpY/BD3k2KXkKcUfFLaa5cOIVjZsY7oKFeQukCQnZfxhq8JG5gggM3ViXYw5G7hxD9Zetl3Gv83SZ/I6mteZwWA/eK7T7tVjwcOk3KN43kEtoOJm8y0ZYJhAp5JjytKL9nTyJnRhtu7f0r6/CAPlcTTI0f1AjT4LYySwnq4htoL2Q4letsYx169Y9gDV9FtcUTL9JekHzyPDrt901gZeHxGnX+PW5AV4zhqmEvu0R/uypyGKxg79CVlQtDLBgTFBHtlnN5uKoq8XmxnCKqfofk+fR15AxoJYTb9kwB47LAoqOfNoiudlvA/qw+rxVNqemwRFLeEXS1w8CT8uCB/WJJagIy/+ItRw5f5uWQDA9G6M7j6Y9eEfnRkjBBYfEeGu1BxsvW7Z1aEaA23Ddf1GmdkrRfSF5XmBUqtyczHu2cECPt/t4sNhs9RPtdl8AY8NDg8XruGIzBq+AJr8YLSpgVmWg/RIfVkUySAMMg0MhCiY+LbZ/GqCUPCxZX1gKJiEUg5Vm2esdN+Bg6+NTNLfoxQRInvIbwLeJkjxLHMRhUT2SyDgGpzE3GOcR+hFwrMryPcWnaneZOltabNRBvfczyHRHGI7eIj786UsZSrtXERB8F2HRPgfW2AeE/4bO6t7V5tDLlu/26Asm4Uha034ua+8/JWijIonD3ZPUSg6ZNvVPVTr7VeFHoPoOQYbkROoMdtlSIfgSmMCdAjbGjUOynFauoHkDzh9+fwilkubbVMa9Yt9zYJcftstm6r3iskPQi+DnaA6CGWN7Qvglkj+MGsCLbi02PDo1a6k9ZaImYB522Bf4cSsI+WWHUxMp/1sHhCjn2HWrG44UsDopHZhZny36i98cDuFqg/LV6SlRn2t+zTqiwpedcsSTkfpRcUk0HWSHoRhGnBa7I0hAHiz4toBrL36uHcbP1OQEtUmY/nMIoso+cRMVgX+qJHD/i5mVklj3TglUNS0Ge9J2GQps+s0bQV8DIU6yyBCRYrF9jbV4M9ST/Flite69lF0AKou1oz7pGXWhVr4EldTTXHcABXFJu2T0daAEZ1wIdVBIA4IjpNLtaCXizeYLKr7NtEwuE9yORh8kIgYA1mKPTI7jEPwpzblmfJSZUb5hnCUfPUdJytvf4OYPWNbjgSBZyaYUAwArRx04fLKXS4uk+Wk6qwPhUfrCs96OfkxKLvErnSDBIsu2jnxTZbx3I0C4jpmmt05R9Zq662xd9yxbobE5CXyjTTXCaxQIhM4T3pkuGl6oj9ATeUnqJIhAneHVBkFQvDye/fO5OjP7zXIXjh/gD44KN2SHQEOjqM4l9Kz0v+yMcPAxN6yqFu5D3gZSeBwp/DfEBWELo/pJlfYHll/12mRmeUNlpXYmXdUby/95Wv3x8eo6nbos9WMByteb/TTUXkbvtyWUlnm71NDtIJCe/xB9tZVzxZSVETVtavcCHxDfZ1viIdgVOzEszQceY3TIq6HcKvUfZhVCTsEjwpi9ug0MXmdkYEb45BtBwL0ILU75r9E/j2ESuzc6IEMx/Dw/d3CihWsB+f0J4jk5JI2pMnGLOlfo9GNPkkShacgI1oyvm+HcabWpTKUFicUpPKj0C0kd8K+exdGCYf4unM0NmtE4qdshz4No5R9zrXruk8LO+tHydHTQfX3zp/ZFRdA+mjMJQ+QXm9TRW6BZEfmYmjgeSLcBjT2B0blC1vNqtlTu3kT/7NVj2hcfQon1sEFNNM400IPE2CRl+tvd3Qht+n2qyBwuXKE2bRkBTSaMGfIIk37Gdor5jwhNBljRxuHm6O9MTapklnrD3hY1jT/OBbn0yCXMxBEJjmk01r5lURtwIoTN2CAd0K+SWh4gaV5ifQauM4FrYzMoO0jPPuqFJxAsK6/DUe1ZlCoakytmRKUwtNHR6FPn1LB8hZ7JQ5FJENek9nnWVaN1FoJuihirMHZ1qg6v1H6VqJ5D5TxqXffelWM3IidQr2M3bnXEEEC2iMyJ3t8b3GegrqfcW6toswf1rGKIGSQsoi1+UaBUG3YrYqvkQR9AWp7zDw4CWJDb/uo8gdbQUIqnDFeYnZ47oWaNuOSeDexs6YBFT6GQOZ7TfzRNku9VgYjiMT0bl29NTyjqNhvGSS4LMyzUkjVrtqmJhL96ojteja5tDyUFI/uut7V+2bymb2epuzSoxeThA3bOUYEXYOgyTa3psuqwe9ty7Wv9jEwdwIp1JzZVLK8dD8rmqH7PzYqGNPhVvS6qR5817X/yhRuxvoiNCDTH8k30zIB0d1j+SWg5T8uvM17Hqt3WrcyPXt5TSuj+bmb2dG6kSvdLQeq+Q+eNeb2JEt9cXF89Nqlhk0OtJ59Ir7VUTkpR1Uz+3sOZnFzFcEBbogqr5H4m7HhY54wpf9IQNrWbBkKMu6zRQ/60qBGWXRANzUqDXHvsAqt6GTGBKQop6oz6+936zOAEFznAKaGx+FwHdh4VN2rFb4LaeneXjipFrdBOmwpuPQamm9v0AONGrHKACXQdDb+R7CGtgSo/kc6Hqye/gfVwvsUjYHz2NrTyMbGL1MDGwUZwEs+zv267dGvssmWd1IVeNldoCG5KJSdzX2GvD65oVb5GgFubgoZQugQYf7LbH4ikLFSV8C9L+oVi6biZnT3NI7JEtOaOZRVO9sz+iFTCxm6lRGFWgmo72MjylFTrT/BOqvfcYjeWIEkxkSVc028OVIj3751E2OFXrAuxSLcJqPl5cMLEloSv4mjBwa7Oz7xhVoAGzz+MbzXxrYs1MoRoyaT5m8SjjEYctaHz4hO9DkJm8ZMVG2c+0og5bu/Es0W8vGl3d+sgOKL5elqZNq4o1VI20lVvGwWyU64+6yXPyZFc/7fxBBt7dJRCynM4f2ECC+3cJm9P4PMAaHh296Noj+W5lGxCbwylJrHfwRyA7g8PGDxw2H9PH2DHZO9LDnjJw8Hjj03xr9lunzwZuN/OxggxJlaLGgvv+kiqBYHMv1ANWFgA0fqrwel+ffMYTHeJ1BaErDLQ7Uk9YDAzdoMqq+E3A+af7em3ejVzExOS4RuvP6b8QjH/aVU/ZxI/zqsO5i+ysW1foh/4U6GbGxhWVxx+Osou/m/NLViNj43LopnSU0IwrAL4oyfE7KWe5EqH/z02eL7Mqa/DQdJeOWL3QLw4RJBqD5B2j11wJmlYWWVo5/juGIhlUYdp4bNhP8hOXSJSNJ9vSKKUzcB62t6FKGTVGd8DhaJIiH+fbfwhnwLVYror6PyrRMq8SU0ZBcVJSnLz0lLRAZzR7tpP6v+tSFXlarrqo3/Jf0b9AVYe/QleK1uzI+Fgf79df/1+RNn2fIIIjgbynocPgJMLYrQ9NeZH73+KoPes1/Zf1FMWDot3vz5+ShMRLQ3oa9Y6nIyurVXV8ErdeuoOfF6gR9XvWcv4YhdTjZJGUEOVwnra8TyeR6OHu4jJwN7oHsk2s9rRJDT1oFUTuoeu/RXz6tK2FOtw53gn5fF5dWgjVhD7qK3Sfh731o5OmNDjDz8PaelN73444fKrxIYESCHZP0hGwnbvzjARmGlMkZ1HIYI/IV/Bj3q4k9s5R6U4K3TJ4SV3Q2Xq0rczQFPn5b+vpnDI8ZBNfIMDHL8w1xcKKUW6g2eEGLD8/+3pCkP2UIKlSQQTMljMjwMiZd9zIOhPuUtWNNJWERZHKbfRAWXVGj2/tOACjdpKMHOq5LMow4r4Kl/WmakiJiU7Bq7NsE/A2C0jpZYE44w+hQeFViSOjuDOUhxIeYLDsE7yfur/1KrvXbPx0a/lhhRu6Mo3GHH2fyItNNl2B5V8wNdUjBh9coVdf7rNhdACcOGbuKxxrQ15jeUUmZejdwsujOrcyVUchno1EqNkmQbjhiY+ifHAX8MEcdml+92pI0QtmgCVv9xnmV261MrpNrcsb+XhX5rOItZGtm1QJw9KwI9yeUVglkcmQ1j43IQhELGth8nXQMNNkhWLglZyc6lV637B0J/Iw20IZsU4ezqBHzkFlfFskwYDfoLFhvHHxILt0LnbtzIp5U39iXGCe4OCE8ADwzk3DfCy6/NJ9805fE8MTt+WKJ73EpcPRQb5A13f444TXLeb3ElGN2cF4GXBWYiCRTmil8QLJGmvvAJolt0EClH+sKHP6x2l//PQ/LoqH2+3digIv+B850T+j2JnUNPMDwn+3raEUPYJoIxqYoxd6Q/+kU9oEuqzCy3MYJestIPK9eSI71L+uzX+smsh9Qxfj4PaHlbNR+LuBMKh6Nk5scR7AORsdMYANFVb8hxxBqEtvs2pTOiIi3A+BkOjipP4efKEPvV8kZlSEW/wjIue1aU6O517d+D/Rd9bJOzDhdXiEXMxVrXlr1BjE190n9P8ZBd0P7YLMmx8YfGSK58xCHetj/4A/uHQ59pyRUyiRW1PUCe49xYIYRTHYNLp1azzlCqo9FQEdBPJ4MRSOr8Y1SoGXlS/w71eKtrpcMRsuusrtIGFJQF2UCDDoG9YNXdfcNPg9hQE1rbOfzwVMHItTJiPDHtWivrHu9+SXmtGzS50yFU+NzXH3cNQ3Fd51ffAD1PEozTV6waGCbm2N1niJqhANmCwtGGP7M7NexfGsCaevjCX7qF9mVo/8Kid4Nktp5JyUgUF2qfzM4/HzGidSaPcVcVECPiamPwmp9TDRht/IeeuHDco6eiH3RR5+8JIPlk54CwePErrMLmz37F8dnDOCKYHjTvqZhHMviV8gf4xsB8OXtlmxkjvWipvyFun7DYz7pHUFUT1V08Ik0P7T2pBRfBZtrjRjISg+aA4geBk7kJOlMQGP0UXLL/ewEwVtszsZxzBh40JJE5YrGwUF9IJEZ+PrKwuCW3aWCJKbOrBgGf/InBwIQtJXVlyi1aFFOr7+BWnQLRZLOCZhxLjktUnMrc+xOhzBp9/vLjRRk72irEzIX6ayzs5WPGzUnaLVyk5fpyVMeAL6mDnz0uxCf3WIeGOC8HHw3rrGRvzC/jpAIRYrlB5HwzzVm4cP5ZS840hKxvDLAdMg8vi+gq06kuEvLsJ33LGuK2CH7ElXWp3TYAl44DEpcVwyvM1XIwNqPTSx7jFIbbozwCZDdTt3Yf4fQuaOp0y5oIWlD2IGlu4W98eA9OJupj9Xng4e/z15QkOaQsJEb2IVhwYjE+7IvUylNBlkl5/WsUGJkf7wAHQ+lHHlpNQF2N+NE9DjxhqSAW9avqeokq09wpzezXqhnXjq9qQbSndHgse5+DD5n6AfkQl6G+9q9KlmZGHoH7hRm8P99FtK+v7Geq8xH89HbzSTOt+ARod2EI/XwBUTT51d2Ve8Vv/2QbTsfpodnY+Z9K0ribE6O2Yj/7CATYrjLICB7CfY4S3vkFW5EXdBYT7u/j8xl9TwHf8o7k0vZIKAhxx7c0geuDfR7XA6y9UJWdtxK/q0COmae0xESytE0Z8bOyCCTwSZZKeKPgB/I5Pp7/jD7eissnJxs5uVoBAGgmeEH5NgrcwOgE9psf2NAK6nv80yme/PXxB73wYkUy/E6BzMBcabtm5geDEwxx3nj44ZZvIk31gGvDMpuhhXfMqsYBSsZc756+0Dr1X7+VM8FNl5Y43M1mkpTSNdmVfI+4rQjggWctKmXJ+/qYVwDm7auczW9Fr4mR9Z6/L0MiU2v+1LqvpbvyrGOplAPDSgR20G6tYcTruTH6pq0XQ2ciCihvPalIM20Lb6EunKBvk60Q2CzKH7NSVFJtIw/ABOcbXdYtCIZKOm4JfN17VIDIBC3hoDHxOK8HkCdMMoSGCv7YC6z6t0MyFsXfiLUOvdpV9kP5Mq7OnDgfBiqyL+y45p0D0smefOa1vq8qN5/S+07KGlwrVi5BVTne5IG8DC+T2MVTUj5W2Z+S6WS3rzrh5h1GOk7V7Mebb8F13u36AtbjfkRgnwyLhbYj06+7vOEPcgP0Q8i165B+As3+UDlZwpmiSd2FkiowEKpmz8raJOfTfiLv2OySS/UuCdkmCfBbLsTfKwpim/82hrFhnoZeL2CftlLZQYdUe3uzWr/K/viZvyet9ethHqrVMazOLEr6gq5JNrcS0tC+NsPdMJKn3ucEp8PZiKRDxcVCCz2mOX8OTxRAPcYR/YoljwNyQYEF0MlFPaz/s663Etj5T+5pjKhiNykM7xMpt/R0hg2tenQ0SvYz0D+G+soyecCVVoGRyFCYIHnDZ4StCr9jWYN2ebSXujv9CmkwTbmR55LJGdMOzpZdekvl+E4kHpmAeY0NL+2GFl5v8lU3MHmUnOT7/T4QL4yq6fAUDWoKXfIqo9rhl0twtUQRlHmMrlEpV6sBKMx+7e48p5AzL02yW2c55V4kia6iqirZKzf3cKlYCWdIv8CwWh4Co8S0Gz28pEte3s7hIC5+b5FXSRs6CTOryrvGxFMCNXh2DF7vkPbN18/e/c1Ct7ej53hrej0UGi6DHGR2cwPBO+D85T3g8zIbOnuv4cgn5hwFdU8ubTkrfE/7YY6d/79DxFf/Zf74HhxCcq/j93UdcOukRp7LvjAoy4ho5+dRxc5L1DB7cQzbJhCpFIppJJHmgR2qN6mimfo+Z+2Pmy7BYg9i/dzxrs+P40TbJKh/2hUUsWS/eAfbOo2CXfO/DxeLXLFgm+AkV4BhqgUT0NXld6cMDr4X1Kxk/Yj3i1BQFnb90vnahIXA3dfk9V/j/DCC8JMg+P/vJcln60/STRwTX9G+oS47YIEF0ToXbs4tuiIJgniHhN/hxU7WSh/5W7I4qZNosBhdKYQaPXLares5dwi2+henwvIT3GVGVpudoV74UAnMr17S65CvcabdftdfjUIqUb7Faf2qbQ9k1yG0B3DpvKxTZDH2G/kYhGNjOIz1JDsZ3B9kweKAw+9o2lELp+ZH417gLX7J6mCrdO9BIfjTyseE1d9/g6G0ZPL0dtDZUVXjUtea9OeoF0NGt1FvGFh9Bun+NAMGWN9Fz/7FpL/b4wj7vmidYeZu1bgIeojSvXBreNBW3fBNcwERlyteCuilgEprAzftWqaq6yUfv6EKHy0xMDfcHqEba75+OTfqTiZq8Y2DYrxFT9apjFu42cOPFZrrWr/kTJXKuSOZi2LW6qB6Ti1T9SJLUpGtxVS1N/Jy2Vl1IwH9Lk64ZJqCKdGIn56MhA46tODZkdaDEMKch7YIycRk9/1jEZKuriai4omemVOfU7Zocgn0DNvKNrYKeND9x29+fm9E+4ZoyZe8qw2LkzUmHFuJOpss7W2xJEwHydlakFWsFhwlSOh+TdNPwRSa083hVbv0JODqNJahjT6cj3uczc5Xk0J9WC7a2QBWMwgZLL66rbMmOLZ7oiWINJ+tttSKi2rqMAgeexiaHi6Pqe46fM+j4aoN5T6WpNPUp6U+4hdeDfD9LR8kAW2dtpGPAet9KyONHN+pjL8vAWO4ofSkoe6mYvcsOxgR644RYO//2qJKSm4GbB0O3dDMW+sbuYqSLGAI2AZeGdgrrYM4Ohbbs49RN+Wxv6HRtu9k/lpbbq5zv5TVi35dfTPIXT9+RbnddtXsP2XD7W6hMp3wunRlhYz3iJyhW6X64Pte9XMjXeDajoIwyKUk0yViSrdz2MtFy/kq0M9g0jJaHcIPPBfHnbBFLtHubjQ0AAB4l3XfdgjQrAwIKEyYPiyHRUasZs2dvgc4rnqHMpS36ap5Mmt8fDlOp1h1FE4jMLjlPW4jXGzpXzh9nuQ4M/3caiL4GAwSKCLu812jjZ/fioGUlj1aThjaMnuPOiPdd3a585LAjBNNRn56Z7ZyD1vDhSM7IT5/52TsaEpIa/G8D+ug20DtvNDdg86oU8/jonX/K6HmSuaO5CxKwNsDW6XctRsfIpndpL2cduX2yTyh0XqQmGzgknfWX6CPcfcU4t93WgaupTX2yCdngfQ9kNsoj72zipR0wt8EqRfTVJklhErFKrcS64++iOYK2qXDYZ4/hnFDTrrVzTLnpBzO96i5Jfab1NTm9JfyuZc7Cdx8rM2jY37FKU2uxu5SAOB0/3G0ibB9aNkRwwU6VeLh8Xg6FJPWoxqTBdlwBDq+2TR639Xhc2aUalK1AeIagUyjUV5w3T8r4kdloIlQPMRe8JCTjvp7NcW6dSVkSBbFNkkY4e9kgxfq5opOB1vSbGHyHClp1Udvkkmiqrz7D1l4KLKPr5iOab5KbHLu3ScC0IPXtR2agxd4okwxMxwwtdo9gfRV81aX47zKk6+9LtdcYOq9EYrPo9x0G8vWHFamGKvfG8AT8wtgKiYeqcOx6HPRvDpXIqt9u9erKtvYrljEngdtY14wh+jcpMuZvs93mpKwZZOL/nhe//fHC+s2TkMyuO+H2L42liVhFvEYw7ShiznByZelUZ6Ogeg+JiMqTVe3o+zTvN0bISUFOkJKDeC1CD9tW5KOdYNQw3yvQ9JkJQxvNnCaNewqAldUH1RjKKoZzOG6ZfGD4Xh3FiygHPHd87oYwnI8EYPC4zWy5EW0MD5fGKfu2Hk4llbzPjMefER8PINPLwrVmrk+azhluk96E+VoimwftTPCqH7V6HVDsHHpY/hk0EVgVKLy+IA6ESpFWPdNE7F2I5/RMOb8b6jNKfM7R0O0Myhc2tXuulDl9dLb6jgX89Xd2rEh2hFKU6/cnJySfEC//Vdx/V5MmLhhhjczZOoMGCc4y8j2d4DFAnrEb/bK/Ou+Tk40zWkO3OA9ISWWDkCr0efsMI6J45XvnnKZS2tIkVWdpoQdOwvJJSP35eURKEQWeVs1Up3SxV9Ha97+H7EdFzDq66x3Jijvbu0W6gJWaVCbaSg5uj46TKQQNm0yTgFyCxSVUaeqjVKMgnEqS1sZWmzqAXPHMIHn0ohNKBubg9PaOMjfVneMyyw6uBotFC69CSzleVlie75BDEDDwl5AvLgGUbfIMh89PBLnlvuzeaywVfQnSHV0bDTKbpD2g9NxX+rskTxzKhSw5aqx88G6/ejhMcCuIfPef91JhPlvLOdBBX0ZEHD1tn17JqE1fBL8HSbx5yE/pAarhxzWRw5eWKuryYqUAuWF1asuJvyJrPdWD6ueWBRnnt2fmJt9rP6vXaA965Eikm73Nz4CuCEJRz2Cx/W6U9imwQxggLiHS5N/Tm/m8QY338ZpnqviYjWE2mGUE/L1ZEVP+LIV+vvljQ4R4kI5q2BTVcuYJCcXl04EPwnNLdLoHu04Mf4HTfhQOOuCvDQURes5PU9+KM+XI3WJxYu/PQX3MQl8NWZJTF7n6V6/8gXsRmX+G/1hR6kEP5YQVAkDKwcwXcocAR/5T4cTH4e/IAPXYQJHEJVsIGCnTI63cH5kdJXOEIg5T07PnHLJMHCcr3J615/rXfdewEEYJz3XhZsZN/GGw7CGryQOD5/3U27djAgm0sLo0glB7AYBzwGaJc0h0AANC8t4xgbdufz7NIUodC9TofRoCOMFCiSwVyNdsIAekyQ+BkE3UMYSR0fOeEXGU8N4rNHvc5p5O7JQ03SjVlL7NyP+myRZrVDeSxlVp07PaMy4cxjiq1wZNPjcbAuiFmMJSdAVq5K/KEgjqMpnOan/R4htm+4O2D/rMuX7Biden3Sf48gOnI3N/YiK1x1PXkgF3f7d9t3OvP/RMxCVve6nZv1ucOPwfHr2Li6P9l9gbe+hauPGktL8L8zUIb3Xn07WCGnvDEcyrLpA2prPjJ+BrGLqdk6tHddbQGV9X/Uyp9OzArfmdHHj0/sXef+k0oSz90pbshsXWlDL6cOa1X/D/HwKU1G5ruTHzCyyb/UpHyFPI4a8AKrOb002VunzTESDaY3CeVO4ZwojNSvqbV2UMg80FbUXVzGBwGt7PS00IptiqUKDe6QUDLkHDKBywEz5S8jrMsfJt8fGsaosGVCBPLJE4vSXRApUN9thfFO/pidjtx7mAY5e1Chceu5l4B8PzTMJnz2lbBZKGrRl/pjIyVh9vhg9ofq73pdJudrJuqZcZFL39mtL00DYJxovNgugP7kqdoXIkp11HyXs7fS3l23c80O9ZDt0Ew1UERaRl0ZTZY75IalIL9PQJW7hpXjn4uGXsdYv767JNJvBXf3ot/tUJhlOpsy583xIhy1C5gebemCcple2ZJIDCrjjPygiVpxayYWY+q5OTIicUE5XG54SbzYIq6fFAy2OrCXUmq/txWXey2Ugk6LUNVzdp+0AOXpfqG7LusBVy/CEHadgR929sw6TOOMDpx63t4E/jaI9/n4s90uOB5r/2s9bpVxYSGaN4mfaX6jmO127Z5ow5shdHNcD+a5gmMuY3GM6tXJTs4JCqAG7vdeIrEs2I9Y1XpCFsMto0TcJwESzw+ucXogDp5E9mZnWisX8zGSBkGtD+D4PWXa3ovuEJFpoVPHhEletdc46/8qBI8GCZ7UfVrIe8LB+6neqqDEj0CmaNCj+I7hOCzCY9Ev81OJFmgAZIqwzAm8j3aHS7I/vEd2yNLVUra7+cZDYPgi4ey69evU5L+2eFaw6vbVvXrbPZJvLtJ1vVwVBlnLHTvvHWsVEnK+YkmdDG9J3NMAUeYJrSqX8vhYmvV/SaM8VnxJGqYm6rTWLRmCkunFMXPSC/kwM3iODLSrjzPqWMKrojiwaVhKLtzDkoMAABwa59v9rs39l+WcnRWZXc2yFRDO4rmEudymLAS3GfxpK8z/tUKpS2Bry84eoerr/1QPllFaCsA1XM/FzCeD7YdDD+HAh0jJfSC+4vZXGEnCYffAjYawFA4NKxmEJhCff10uUG3fuJl12JYAVY3ctVgtvPdojlcCYoIT1AlfXz2aKts/+LZy9wz0ez/rBLqdS4I6rxhqMpxoi0Vl4pFcn1EHlVNkOS+crA160p69ByPYnpXG7fyKF9P4kgdLuJOcEj5qaczVkdGfbtu9tuY4gnD1nWpb890mBHiCf3WtRf0ZBKex7mAv7UTrYZh7eDJme1ErfqQgubNDzTf5C2OXbSwdXx/aFTSDYS1fM6tT6tclepq82AmrEqFdZTK+d+KUcWKd7SrJnTihGmv/II6vxQESZWW8WRB0IIvT+kAfnn6R8HJ0DBuHYN12RGGvqKSZVdmCO6Haa60NBOWgvvJlRLpcaCV+eq3ja22e/Su/5ZyTlD5KPnBtF7d14vdD8/MzWC4XZ2N4KWRchuUG/RAgWBV2nYbpsRZZdQDqdAMwAOsvX8LBm6vBD17UqArbGmkHNxtPUictHVst8tHNZyQoD1IIDd/AGcj6JuwS4NPXvYDqaWIQ/Q1dKHqE/lNJuZ/SYQwHi6tO2FiQ4GQUAsEFavnJRhCtsp1Sat0QTk1JYm2eqbcDsAMjfNmhj3udsg6qpAukBEJI5U2v8KbBfyvITx80wASMMwbp3noMAPf75Mqu8xEw/kxKIdUpQoFBaBqfHsstKTzdk6qyYwXhrjIB7nCRvXLhhv8Ll+ndjQWjHOVdGGBi0VuMt3gaSloC7y3oqLeBnE9I41iYLF/Ma1TIYvhFSTNTQ6NHLvPcrlQLJ7THLA+GHaCtqPrVpVgqoiD0cebz2FwZ/1b90zoMc/gEL37DccHoWuky9JB4vciLrUMlDln2dDLarwoy2mJetkjiatevXTZB9+K09MqfnlusNEy3eSCt4GInODCl4vyA+2L52TMN6B6x6ouAk+dCOtB7aDgeOr98/GyTJLXd74jE4wdVFtBdzF7bkAL+TuZYiqtg/H0vbZlOebtEB91InMCICcRiHc+ZJTbTOfpVJ8KQMIZnqPCEN14DmKysTHm5Hga32nalfxVlr+dYcJC9fls2mTClPBuJXl/6mj7ba7HvlQ7H2oD7WCrxwY/sIQUxrrle0O/3QOp8T0M5Rlg6EQYxcKsNybBd2WRjtyKkL0GyuvXHBuws0XUssh1aznzSFT1OPaLAI9jJdP5i7ytsLyjTGE0hor0duoaisqOkFUR3DIbYzcZ/EiZE0G3ywgblzdvnQ6DpeFKvJ3yYjj7P2L4/NlePx5smXFTpb9nG8Ft21CdfUcsazzZdexXNPRCPADX3Jx+uVK2750YiUXCxMfrtymxgv4uSS49H/ak8PLv/FW3NORIizQk4/fw/eUHdCyhVf2+6ioGCvu8y7Nc4uy8L9QOdv44wmPBIPsd0litHu8g0Dud5KGdZ/VQVJW2UUHODc4ukNpQDtYbaHRnWdGBp3A46Roc0Ss9I5Wsb8vaKg5BD++244FWiTzf67BARUsfDv3xhUJD892YV+G9NlYoualsoJG0XSvCQaBO+ITYf1NmRGOcAQPJO118e6qH+djc4Ij87O9xNk9LKUkr5cGHonYVUqSZzVLKtY2j7ud4UJikwN+iJ2TrPIR0FNI2s/bd5jy5517ji8H9WN2vd0KlADzVNvJIynXxw9QYVSbL6hvkgXavFGzgswPQx+66g2oQCJUMtz1uUnrG++ODCfmrT/nQd3eDs1X2a7PpADWFbPxiS4UzocUzrrkMOWQKfdd2rCneIU4Crz3omicn+F63/cb8pXektvp8rUJYtlmmxYcw3+FSRqfQnKNS7UUohnQRWXeDP+gNhMz2jd6Wy6gxjhV1fG/VMzT+TBfeJg4Kb9WnwEufepymf+3H51u7TYRE/pIwwY7jJjI/P0tdQquMM2TXvKy8Zg1F8ja4jHhsXWO/Is7tLX3HJwYROZ4FHR0QU9IeBprwGIOONeqGM7uU9hgsmS/t2fuexuXUU8lQ1vgFtkPkvfBPTqXz9ORp2/DEcA+91WYL7XAfq49Yqb0TpBrZ6QMrm/kn3pGaM8KnU7es1errt2TCiRb6acU9MQRSGheVZv1RxOnkDEplhxnYVgtkTEXwYotC2/il9cly4fIWr7QJ9wYTrFs+FKWOq3Pms0Syj3gXVUQr+u5HV8C5crWxQlJxHd1BO0W/k04gbhxZV0fQbpM/2G6QrC6YeCMLzaGkjwbiZEUbVOMyy6kKjQonmJtes7VP2iRFKRJImZeYReoouDYJQ+h8sYGvuD2hD74jQCn+pjr7YRarjyQoq7qElH1aAeKqZu2HAX7Gah3s0/+jtZ0BJo60+e+H9SETUmRrVhIKBSWxGAPqYmJTF+1kIwAYuliPTarGoobYAU/j3qyc0/12j8y2hyplWod5xziVxMALWo5VWurEVM3npkbvoAlpwpYZrxX9CnO3SQQgJzDTZJzcIV9AkIY+q2Tg7Hq/qLMG1+rALzoON4knQn2F32aiWtzPa7Y1ZJxZTcIFDLxTxOAIMXIo2MbxvICWGZYn0EB/DRMnX+Yj5+w2oKhef4sVhuVZeBI0OBIUcci/GS/cm/UocFSJ4PAAF4WocLHZ3g9wEzGEcWLof3FqI5J99OE4U14l0sV9ZRkP5n5Ytm9sOJlmpyzssSbAiE7XPboVCfz7kFZM/ct51736aQQIn9mO8/JCFwPb9xCOrsiVuOwkDlpZ33Xic+VmyvS6Y2JgkTuRszfuh+ghXir3H5QKO3BVwckXkfK9INb9+kZyJvzQQIO7w12yRKSrnA5AYhUaR98jaogt4rCwPP/26L1lZtGAH5wDLhOjLxH3+8Wqlr1/+3nZ8zOASXo4d3C3z0pRkkXVOYX1WtSxCOHzC93mst/T3TRutYkecIoe+N7heIOQZV6llaKR+grIJK+19ig/2DaqjPAKDl5306gqhyrO/AbCHZY/2TlySUxyAZsg/nqEERcCtR2dqFs+MElKKzmgT+WSy3iRPAo/rZgYg92GZyupXxSTmHO+MbjbtRDwEqnFJtvHq2NypxLwjQsodB3gp5pwhnWp1UZSrT4UIuMoaqId9MXFi1AWHPjLguG1RFKLC//8F5uFcKOGvjuw4GXU0/DekbU3vPAa2oukopd77WWB8uKATHCKX8aChHN//P0ZYAExpL5IkQQBYENpJpY6DojsjP9zm6LK/Cr++5hEkKNdfNsJCCoLxfBk9C7VkmCJ6pfdfRv/GojaKufUlLUt0WPDiGbZV+6i3t+XzVApwd35pEzBQTUuOee0Nrt5SmCUABeO4Cbu2kochn0BW0LQEHLWgWWYgaBfIzr8AOuCW8FwuCZ92ec/bpiTbsy4vW8msMdZiw4+Ox4OLxeeG+fMD2sPcGgpmDeIwo35HrQ3KfR+Sbru7VrzVx9LMrXgepr49O10di5wTBzrVRLC945TzmJW5X9G320cmpGsRe586+kevvvnGxg8uGdvYygvLRwpkcEg6jeVexsXhKs4UeyxDD40WviMEBNeb6QnzB93yKK6C2aLpd+SwXuCXrx2gW7PwlazeKqkpP/E+4/++vkTZqKf8Zs3/BaOYCGmTIN3THYsT/pobOUPyifFJSLZivnO41QxhkYOmusT9/1NVpNmP9oNg+GiKWyNq3JsCps7dfxRnMHPpVyy6IEYEeEJc2xvYp9m9NvXDjXJ32yGlEI/FgX8xIsS1XJED3gb3mhKux/lj0P89opHgyjVeZk+VC162eHHuIAfaLGQiOtIype+CO4//lBQHlks/1BdeIZklHKCKzglLik2hHrj0vtA6lU3L7zQIJ98w/MyZTlllvMbT+3gxshX9ZiVfIzg5EY10KV9pJpGwUNJc5mzzBBLPptls8gv+faagvinmtP11VsSs5kzjdSqeVVuWfzrIkAuyq+sWOhiqfopC0J1bfxhLM9loogko18Y8wHhCH4my+69XzTJPyZT9/y4MaZaJM1kaiLayOIilBkAe/+7uEvfKXxw1gT2E7R5/eCMbn9uPYsmPAHlCysUNr9t3DYb0UpgSrO0KDfisWHyGo5h0XdhyxYNCa4jicvmhmfROHTDRFhMU3S20BF5BOKjtMawsEYMonTS2218rxrQrI4zJijZeUB1WpCmwGHzcOvArtmjknXvcM10K3DFx3jbUjq9NAx3RBoKu3PKvyNgFzdjmZ5XqeRM1WiRRpqfu66ldhL/orzxEZZz3385j+LhCAWIb9jX1ilieckPFuR2bzp5LlR2tpbjDpY2K6VFXCdLTzYUcj7r/B3q0o29CL8NJjfDO8bmCZhY59WP3bqi4b6jh27KYQ5uCYMdgdT7RExFDu/tEKEN+42a1wsaqRCLZeTBKwCq9nNZ1T/vhQ2wlOvD8SfxpxxpjeBkpnVRhbTYBQDyuxAnvEuB+rEepdXzj2qKBbsBBfhw6sb149t6Ix+UyS1AHnxP0IfgMZy5Ce6Ls70BHuDTGp3kC1enqIr1a2HrY9t6Cg65ONnvkz1GFSxuHQ9ZeDvrv6F9Oejz8OlVt0BEz3mvSAW2dWS5ntsH2V1W25gj4KHPgtEmlqHWXRR7Hw7iLnvwuu2fk6IRYCOzqqF3QF4XdRpARx82P90HcyYxyRgnqGmEWhbNCu737F+2Zz+awghoxPDAKgqyGtbc62cIqSusY9g5rkrC4jGT84rsm47l4imeqDW0OYG2HHKTBat4yQri+/onX9lwzNXtLDTJpKvXGQSiCRIfJLNkWf3ZfNXAXXfcKPmOcbLs1nxFax2uv6oJ3zZ8yET54pvkKM/lJSPWR/C6bR2ZpcckKrE22niuHSAFe0dU2o4bwSBsh4n0OUFfNTQx8o76JEtPWLDsIy2VYrLXKOjHxcDvTHr87cc4/j68LtimtoxyfMJj83BL3GdbfmBKjnhCoM+CEMrV6R9k4ePj1ccRKivT/+9K11uAjxqqYMibnB+oU+eGAyHcwURaWNT2TuYdykmbo6TkZNJWVYe6C3pEToprf8BF14iwdGhX/qikcwy1GNLK3FgQhnUC1Tluz3iGJjWuPWTPX1biZJAxOIdbo2Ji0INjKU7uZ2lddFsm+T9e6D7MWSethHhRTmZjitg4peSoGN+FGK59SRzYQyFRVlYxbb6Rte9denw6/Yg038/2b73vZYGnW6fBbRfVWNJw+OERlV1AP7Pnv0oUb6jDA7HT6yyCjlURhoxcd82rdEGTxdBlOKtK4pibgc/iGZ1XmtWexR1j6RvWt7cZKfvgD619UXhuKfqEqyqNJzw+FIpfL1PsxPKvaDIGIl49xewCNUMtZfxnuLGuBpEZ8t1KEBK9uqKgYAjYpiTtqpUXDk2IiwlKe4LkD1a+2CrgkJtz0T33agYrnWueg0OPyNCwDcqS1TkSmjqqaUuOFLlToHFRS9wMDiE2DzW03lJohymylmUlKu4TOUj495IzuCpYWY9KqPVke51wCeLdJrCgPfN3+Uv4QqSzwxIAvZ9KUZ3fRXS+lR/cFj8q2tJlfFjx5W0Pqs5Je1N0F5wY5m1FI9a84amuPNmpdmrspVMDX1A2drQKz0+4sNOCgymb8xUSfmdRzPyADeNovdZEb525PuFx8zG+Ci0CuJVOiIKaPguhUAHjvg1UReIiLmW3Q6ok338BPmpUBQM8+XJm9Ww4mASA6L0Re7He/Zl+SnVZxWYeWY9HHHFXWNRYmJJLS22k+vKwlR3g9HcQU+jxGe/9PY1l+BGqHcM4SNjp7jxAuWeJlnnFE3R3pUBfh758cee02cIV195tMptFzZ7fRXIpJ4OvU9M+z0XOhRU+AUMf1IRKyeUXb2LgCrkIIDwDHp7gUc8Qd9VwVBEV0qB4EfAlqWHPXuKP1OcluEk8sGWiF+z/cpdNOVRPAIq/D6t36CGR2ARfmzz1t4Yq6nbWnIy4/su7/vw6t/XDs6tv7ACHss67FMSCOEtZSJEV+zxgq1GiODGQuZS5viR1BQ1Ll9qs1mVgGtnyts2043Ct/Wg1XqZlgemAan5sVDx06JP8aETtc1vFZYOrgl7TfGSKW5VvdWST9r4yOhk+GSMWEU5gBwUq7YS8xjQtLQ2a3+e+j+WWzetin+um7aNrnu/nuoOV2/9+MDtUHIPfH3H8frcigW+8POrGu8wtd0R8m6Jax5u4Lyhr4277C0jIFsP03Xe5czW3NHrGpDyl8NjqmPqVABlvHXlDQvl6xLTBszhUs8JhCMjHelacsjYiDAsf1Q2Vg6lBUi+I7W7u+jPWrGnb/E/HBktwGmEoK4y9NJNKMbsAKVWRUV7X1gJZ55+iwEIljE3A9MnvLExK3ld/9IMRD+fT8XacRf7D0iQG84F9HZzbOreyi6g+RLf4FrrlvG8XT+kbFtSs5tZF/m7DVVeYLjLuqx2rDNfU0duKg+CGFeH1d0by3elqjbmuWnqUqTbGozV4tYIDJzoYGzmduLOH9St/v3ttfeBlwSmxROoM6arxsQMiYZXUmQ5siAOA2Rh5x4k2dQPuu44WSloiXl1E6SqR9+2+dtYSNnOvgcdOAfe8yZL9I4IU8bCiIPklUH2T6PfTovf/f5kicssXg5eLXkYCJmxXJS9nh1gjIUjvup3ONQDwBOsWQbXKuXckoye3twD0Q2qW3MOkzvdtyqrDIUKCAOK+6FmuN1H6kCyrJ+JwZGPTOOzH2+8Nw5VY46wkoeGa886dJQcwF54vMfq9WXhbTmzv0mREEoj/ld41Bhn5YOIDX4ymIEpOEkvyhsQcgUJP/GyfTlJw8E/ApWroA5NItpunWGDakAq6tIvScjC5gSY0xoQM42mPk/bVHzMhg0TeCe1VT2HsAssx2ufGpvHQv/76OBbKhpD5Ln3cFb8ySzzlPRhKRzKo9UICwQYjqutiNdx8351cuIxwY5zYZVsKkFy+P4JDmhN5N1OwyXNSou5kjyeTrKdr5EGn6r7wMGYm/ntaLj5AKI9NOGgy0siOxgAwuYHFcwkfuZeiNZCiAYYRB4Hic6SLvYSDzrJoZa548b+ASfHcKpbSKP8Y4VAdPxwz7P9ihMiJyi2k+b/wOfug6VFJYSLjbMYcqn/7WGRGrS7txe7iisrh03Y+o8MTr8lnPxFWkROWzK0ZKxhiDKikKNdJEcAfZaX1NAL0UY/Rzz7xqYsM52Kn4u3lir+iLekvP2OXCyCEE0fQkRhBUGzw0WodFsvXnqtrK9wjtaenRpz2KpJ+E/vYIDCRMB/9H4VTvjnDeJ+JTXz+bbYxw14WmwC2GxU1bJ9Kjrg8wLljVCPM0hU3S742zWvnsQON2galrWLHWJnRkBVHvz5znhUwUMbhcFxj4IwMZS6u+LEVjMqSvHddObYfSb48atDoIUTWylP6FSUHidlwVJCwyeL94FL3PjE5apepW9JDULjzw5lcxK7Txwc7+17uzNw8elqrDcCxQhvVBjPnEw9QA3IyVf8n0AC5/dw8shNyT5/05P9EFIDKGsgH8vRBVkblIrv2hXcZDWKrdPy7z/819qanUhqb/hBpX7/eUXPxnBOxK+Y1dutVJp1Rvog7jQWxt6IUiQjVjtdhhWsUpCmtTjX2Hidyp21enqvgA3p7ciXMVGLuw7vqr09yXX91M/c8LklN+jNt3KsxjLw7nOrNQcVgqw0QJZ53oh2A9KJ75CBASXKbafM1W48hwo/gmvP1HUeiui+iq2vT99iWWlzdQQY4ksN5+7VPv87YIXpoL3Wo8rfHUU3wDdx/AWrCjDMAkCdKv5Pgi9zszHetF9K2Xtya5GssHSxVt0r7YF1WFuoPZzn4bSt7ZtwjivmuN8urENL4HV9Es7eWsfzkRuZLwtlV07akxH2sX+WZM7T8gG7msqLRA5tBE8d3PHiK6wis4WspJfmAHDS0e/fr93iCSNCRL8v2Ahsf5OiD+8Oorea9S6NlBgrnN7tNS/KOZAFMyR2rvt6XG8358q5Qus19PNkdVjwCYFSDXaZLYFmVAjYpMPQLtACrowUjpvLK+jPVn8oZVi6dNUIktvrVXKz93ymsgdy3u9mxjo3Jo13/gR4/OiHL+UN7jZpuDQIju/k9cgwlO6eM+uXziq7n9wSKNCrrU2MpxS6lLRX9vdVQqfdVx6K8bzR/C/LnVB2ZC6ROcRi1Lii84M5B09l8TLx/QOXDsS3Sw5WPvbzGwXHrFafBXbzEGJsDb+zEcPm9fdTu7+gi4K/hr6hgsqsbxLEjWWrhqsrztA+ztkdRTz7l6Mwsegmy7TfcmPdy4boqc9qP9tw9WO2JuIDqr/r5vZ7Zn21s500BWt3f/FifS4yaXF1qN54KjEhS2Kd25fVhFW6JkL3ydjRJGdKr16VpUXOmW+qyOgXiKREn8n3dF62FkrkpA1Bi0liG5JgQQBBODEXRoXNHXYqPKkYKeoJPrjMcOPdFSv8fprrmwP4OUXiL1A/o9AGAnIwgxcEZpkRkKWh7gCeSryNjgJMsLYvIvhztdWntyRdqOCdqIiP1GF6w5KHuD/bbKN468DzcgXDxQiwfzOoDADvJITxOmu7B0PEhiJPuG7vaRb73hvRfKuaDGiexFRsiYLwxlfZk72CJ2cOMxlN432lt5x8KDbYlmIg4S7wp5Ih+f84zv9vS9zqJZGU17gvr516Z32fiSLO/+cO0uh9XXAu/JEjf885XioeYo3U6g2VmaJFyKOcDwhBudlM8Al3OR/aBQrrLb4t+bZAGOP+t+bhk2JrhzAqTi2jk8yQJHLEm42DM+UakifdCX/Xtjwr0Oui99eMB3I7yVB6ju7Hq2orVoHHsTnfNMfK1Rv3zQNbx7+2ZVY1aEPzA/aZAz4/RLsh8AYLWkVU8cz7wKzb8a6eDXzMfoL6KiJ5bYLIgkrfHIUz6MnWZO1RU20VQcXQXRqLXa9F6MOmqVVAPJzNj0r5tt7gheE0Wi+JcDRczdSPcuFdWtl4MxhEYsedHBLqAI1MsQF4tOEtbsJw7cPqktlhxmPakSZvRfZJk3IG3jwlKs/GO9vCk9oxdDhKdAMKNEbt6ngkQWuHalspRGfMPU2uoxjny6JNTmcerSd/8E5ymEEaH3zz+9KkrbF83mSRqsu241gO06j2e3fPmJEku3jEkMm48snY6EkxToVpnu3W81syqIVmyuF2CP+Atyagblttctw+8x2z5HVYbo1ls7Kc782WYCIVE7vljNT3Z00QoOh1/4qJfvK6QmrFNW2zi4EDsNZL/qErJAk7S2ybgfoBEcUNCACRy48V9CgLw+yDA952Fe3dlu5ScjxRpeNRxj+tctbceGp29Yw1yiWaSnJkN+TD2Bmf/lZ/VI+f7HkJSfR0ejsYX1udNRQ0cROApH+q+PmvKrqDZTNmkLlZmjS5Ar2YRvjP7q1ZwreDBPYHx9r7jqRanImKGS7TGC0+jsGGg4tBVfLp0NHp/nL5NhSHwX+2+uxMRnKwpNiJ8gG66TQ+dg5MUqMRM875CmGEPD56RXbxFoLb2ir5n48dwq7i8tIq86ATba0AIHNL+f7X7CPv79paz9ZzGmwE9IhG2t1KUz3UACU9TeXiNeEb8/g8PmevnPGSrjR77i28tmO0njss/R25h8VMXF6iKQiSVSjwaB55Mmt3GQDq5yWiilow5D7GIQ5bWRLQ99L6+rl1S6sfEHvbJUMhUxkUjYwpZ6YVrBCnytTumJCxZcwKzCKDxBNsf/72BtTj0Ln1RtX+H5NIe0yS+MxObuTDD+D7GM0MwUIspLe4uKSrKHitX4hOlTkczUCDe5/ktn9RRSq4zBAeaogMqmwp8X963Psoo1StiuIpeFzsK5Pauul5P7d0D+x5R+NcHchm+Vq7e792f2xEmbVmMwMdG7J5A4lMLlz4Fkj9HkHVBSKsAt32KG4D0qofaXaPCS9v2aj4Rp7ruvcSH5OvQSyjN+68h/u+rBh92QWMeOqhuHo/IM/wqqWsoXtDhQLi6H/piO/g9d4Z6eC/EJ8/JvcXem/3/c1+wBrgdqhZNCSRGC/xfiNvPScOj6Kvt+IrljLnHKH+2pmboG3UM+ahJpJw/87u5fx1Sr02qqClPJLEckzvbqXyIJeTogm7EdyiKn4FjifPNlwYweHMIvOWqzA7TCBJf/Shx3BShf0c6inkrjbFfcVUfUPsZPZT0c3i8rsqy3qHPbXfhlRpedMVAR7JD13olzXxGBIfjj2NXlvohxPzeCZZZ3etlnca2BeZnidPEgRSyDH1A+w9QwZsUDGym4xqc+hGS2fcV6atH5Ckufepei4vzWHwv6KLk0vaZIonKSNWvisb/celr4k06GGt+Mm5w3wTsNBoJxocV0EqDlnJVZeH+zx05kIMLRPbBwmIMlDNvUFysXR3Sb1m9z9M3GjzKWHT9UcxibCbWKkvo0/CR+zQCqBT3GIet3+Hvb0GrwX4zyTTarcTRrJEKmIUVutPxOJwHfays3c6MtgMNP1Sq3jgKq5wArU0jHNb5MQXkF8mGaebNAV9vWj8kA2saN07bttEgIY7NbQj2agKaqy66n+NCKDc1s83CLKT+KUwbhzu766jnpMFGgdOUN1ZW1VBYE12pF/gFcbA1Gk7fB7rAm9+8THuV0zWnaXXne6gDgzgN5laPOQxZvmR9M64f80xZHo8OgBqZY8NJf9f8BDLTXlL5bdNd4+3ZdAMNMw8sVvJYfy7G+YcVNbKj8T4V5jNONkVNf/z8Cf9j+ji1uJov3xSD6dFOsZ/yXA6Andh3lHWAfSpyyvm22t5MCSbUQ3k1/h9vDPnfZ5o+jstCmm7+5hdfX4j8nMwZwVbUeRUSH4Dv2VsgrjBJ0/pyKGrey8FlKqfblLJgLa3IfejvXN+TJE+UCVlxrUTwqBeRdL1t2LE9v8zLKceEAtmNXWvkShQlmP27CJ0lxuSw/osFAK3CumJ/LttusrCqH7Vb0KXRiTmPlWS6WQR9/G8JCW3TD2QHdFaJ6VTHStkHq421bLP2WdrJ5L2E8T4x9Bhxv9rY8d99s53uVRCBueQXZDCQHYVRb69fYJ83wi6oTh05qm4Q0HMzX4oyF6yxtbKrzWYvoJ3ZaRFwF328ZtHz2S7X28JkMY02MnISeZUE+mM8v2WDdoUewvUV29Ll1sLrSGVLmiLJ3EtdY5c1Vu+dETDV1/P3ltbVvFBFR6fzyyt4PoVFR173wTFuEHT5l8p8fcNLxMgeNcvxfkReurdHxVURXQZ3rL62XEexHDXSKG1DioZMJM8smCHbnxqFQ2OWW3Y5E6WpUhdHGDetU//jHSws+lkpbPxF++BAdMuwtniAoyY/e9nTgzQJTTuWWDg9cogFoXk70j4xE09oZJ/0h5PVLpuiz7CtUNMuPELq2og+d4UtsSBp4ytQ1gYGnvHHgUcSgGUX2gOsScL393K2ZsmDD/7iiN7cu5Jeh2fy+f7RXoi7HCzXQRRazyVAWhk8xdWqiyG4F8nC3FPm2rndp6dI3Mrk+/+UL7dnoO3VLxCfn2EMUUc8kaocEOwH5grgJBUQj3J8bxevIrF06stc2zsCBalst8oj5chn3Q6zyUPfkvsqogqhD49Jni/pF68hVoof0LuVS3iGZg68+bdgXWZwj48dp4ysDUvdPhngjofvzMzlHFzzyGDLRu+oFxHU+0oCr1FgP5986wRKIrBUjEpwzuDWJE961+fRdxD/VtIoUolFv2VQX8r2nisQ6t0BnglCkHB1DIojMwzi/az888LVp6oatVwjah+CnNjfVP0R8lKIkJtonfO6C4jjZOwQq/Dr7lYRFYBVZ8L8YCv9mlPx6Ubcipc2Tb6OYrbxL95uxNo52lREhYmqXjQBR6aUKzNb0/dB2riqdeG617xD0uWiuKG1OFysjQ+5YC4Jzhkfa8nfEPgupQgxfVOv+nU4ryIamihdZpMYas+ieAgd5nyer08izpMIv0c6B8deppAoAvnzRQG2TruQ0mJZgcOlaP6AmHNVvZwp41pcIYwUWb7fNqxDfTjALO8Xn8ksqRJzsZCRQ4qDCCjIOkR8bP2+VDIHJ2qHG/ffMo7E7sdmudCjhTbcVGrtGeZEeU0tFf9HmhwgguAnM0JHh0bT0Z7qNxmDEpFGmxgjOlQHrvDHLALNSvHkOphiG8GldUcnGLX+moVkndyz9P2yeel3zD/fH68/704mGQVEKlE0geplZDoq7+LEaPURATxlIkLLdTyAMdOVK2k4bagWw8PF1ilp3jCZB9ohqXANm37Z9i9EVm1Q/93PJriawMZFtyuPfgtbHOt1E5PE4xqFLg+r/IA9eM9LiFpU62vRYV3GJapPpVR6XJAziZsrD55Ecz8p25kwrATPw1wxbTfPz790ytT2pzMAYLO7NEhGV7cszBt88veed38EtOOvw5QTZ+bQdl/i4dgqVVRvxC8RS2GW5FZZ7qtWXwCr9MlJRX4u1DhEnX65/3N1NoQ07iDqVtZ4reOTVJ3P6sf7x/7eRT3Ymp+lQ61G6aieyfniQ+WGD0uPpVG9mwpG7xDEzbARD3Oq916DUV2t+bYH18bcIyzRlFt743vsSFFZa21SDN28xXWGUFs2ytQzJ1Bo/XVqZk4Yvz7Wd8U7o5fdFu/t70SPZXD7DQRvOl5u45vS7f37tSR9Vj3iQAw7uquKXtgxzz39ud7fZbyzwlrJtY14KjTAR71EqC+qdB/Hhi3xmGrOQepa0pepAzxjpzlCvBdrAkhk94T8LeeogoPff3TCHkgOmRp4IsT5WjcdSciPuiTrRZ/l6bx3MwThLTWsFfXxCUJOeoLoS8coJ31bm0FEgMsRBR2i26y51QMOGzSuKAWPa3bUY50cQxla0mQbgnFBf6p+kwn7S1OysKFcOEa9xxYq8dTn7PwYzj73C9EIGN/Iveve9eW8b9QfKb+2xN/xVTSG4NAjNd+wP6E7B+NSUKmdyyXaT2NuCnNeEmpPENXYowF19OUNah5B0daTIsNExro29ld5TLujY47Agj5UAy+5SjJNy4pZ6EKaXtlFoHqOdlPW8Z9zP/caVxod1PNC/k04XFMrEEzoMi9mE02lUo7xthuloKE1UDC99RPL37iPAY+puop/JiYScFwWUsjpTxXiF0lDMzV1+t62ABWQfdazNBZYiV3v1gxajHhGPAXjdHWdhtzEchBS6pC50Q0o113QWwqcgGSRab9NqBTgBmIAy3iEE6nxRtenlfmpuGh+sobRuDCegEO+HCofCyJx4ahk5AM/c0UfFuO1iPrgwTjSQ6yMKrchrw7jp0BQpQ3phZhxMwJB4y0OtYz5qFF2rW+ggsly4Q/kS0+tPlQNcUf3jnDva1c4Mn8OXxJIxuOlNvcV1Fm82AXMXmk7i75IiTjaSi7FUo32gEI5rGl5b8wGr4ZhC+iyGtSdwn71zoSfCQNN0AHwA9BpFZjamvG+hbbWThUiKd0KrWUqr5zxwFY136VjeHK3gDBx8Wgc/cQw/uFJqH03qIak/QI2uS1CoADE/9bl0Zq/ma/wxMX7om2fkbEVQe+BXl1GTQp7OD7v9pJZ6W3Fo3FwDXNFcjMO+urCn8IOujzMIpt5T2pCSlpa9tJg42rZEbvuJ06rHiR/un2xYBsgtW5x4NYYeeBa4bcar+oJLfFjJiuWT/7Fu4t1/OSHHxfEoiH3TEZm8YLLAbS9WFPuo7EIbEtZxZkmQ/HieOa+uWcYrkCk8u1uXCc5nwD0eMdWfJRAGr+a8whX7FztUMVF21+gh2/k1hcvWH3Vq10+Y0BH4DX54i9vg0lYHQXFEKTg4wbvMfnKPiw2nf9ggxBt2mnitxfrzQou8f8KM6CgIxTejqzXPrpoDEQPhdNj/CY1IWPniisyAkzBwNXbXYJ3jR7/hzWk2AOUjypWrKBY66oSi1ESUzBMd7hli4we183i+kqJ91C3E3IKxRn99QVISS02OfEVO4dq7IW1JA/smzbwkYn2Vc0bc8kbcJ06abMIlgJAxKyz7wMc8bqVGMMjviUFp8B3AbZdfR22YLGpirQlYelFZ7dgOn9Nu3Qu8lmdDFKFZslIii9csKqHgGwi8VBsWQk0wg1CJLcV2ntsakQHxrc6biVNaM6Ym5CCb8x6sDxV85NxHTfUMjfQBX4SXVAXFHX8vvPw0YKvIh5XoOH/vfLRKRGPJFvwws4tpvMSrh2JMuQurmoSjQFZulQ5dxSzIfZ/zYVIxJFEuTjsAi1z6OSt0oUQXjaSRZWxmZVwAhWuifdKMQoyBvNvkUuJ5VvPqqA3B4SfC/pbtDO7oOy7S/1eDAwuv7QA/Be/3lEVVP/eCap8CmgjmWnnUn/h9v00aFBCcLtlTz1WivMXEfJI7JV485CUf1f8SJFbQUf3miSqB3XqwYra04KnE6w/VN0Vhs0LHNagfSfGq7nLqbP0PXbXwmYNXsORNhFRgWxsxIaQAq63uNkjUkAk6aDw4h8lwy4SdAr8jIw/+fSTel+TUFeC/88sfdP7C3DXTLUX7rx2wo2R7Nem5T0fftYZz+rzRsWvnaClnf8LxcUnCOC+kF8eKe5z5+EnAfWDPNeII3X6OFoSrUXustRny9MzM5YuuG2s1ud5fvgh9wB3vBP6F/t96C+mES8HEUGWJIAthSF96Z6u35PqTI1ZmOq3xtprYyG++qRm/G+o0t+T/0MXA0erajvttg7mnfSb73r5ghHrsyQXhFNyx+rM2puMkqYUNJeJsbGnho6zLhKha9XIu7soEVeUzAX9R+NCSoNnZzvF5Np5knniRmnqha1zXVmzKDTfnorfm0U4MbrU5whcpP4FGSuPDRyf7Bp3jD2EVbdzPO5TQrN0oFB0OEypOaqZ69OEqT8EGmjIkNL5pCJ2LMSggDXikXQk0io8Oplp1EW0Y14MdKXDdIBYLwXeUdZTlXXDfSWcg48DUb2sTKCw3hU8un7y7Q2uNOhDk/O0qWrV1VDlEpJPX1HDic4Jc1G0G8y77lGSuUPhyJVPXO3O6M+2SgcsK126j9bWzKz+ahYqx9dPTEjvSP47/ugZj7GIvJbLi3HdxCgv1ZfSS0BcOndZINW60+AGWrqLBJHkMeWpPYyScEvWz5vfTOTDeffMF9chlGLQfrJY83P3/O0UqxOz0Lmsv8vfB+u7cVRP/TD0nZjwcZ2EOA9482iRuS182+yV0IhFYA8vb79hMn/HfwrQnn+bRwbQ/hA3fXlYbq2rHpJnrRHxdD8VnW1uSvl7XLvOA/m8JsTSeoIpuWJssiRLtpTJUmT4XsqKbqovPJja40YkbqMH7ITwq1tS7afQhSllPgZXf09vYiExZ5Ztx5awWWNn6tt/43qukd9ro0+uzJpk+8n9vqnnc8zWBJvOnAtM1lz8s9h1guNBdGMIxSTLPpmZuEZ26h6UY6w5N4WVyCzbSwAlT0BfqfUO6QWAlYXfPji+gVy2QyLjrMQTEcjj5ezb4De7OqA1S1TwJxu9WS2dHuloPkrsFPJALevd9wcz4xdZkHM+xAmxrUouHUN6eP3oOobnWTuiRNXJRNclS25f9IUow3B7y56ssZ1il0ly3NKBWAI7QXkRJi4xuH8Zknj5+NzCmUkxaA+je0HnTiPJiIqnRZQZuhCK7Ll6ctfMYMcVkpHBegeXxDCCY4sSnA8u8YWtOS6E0zgiQ+uIO7o7Jk7hxvkMmlvX4ixh/7tgyEXISaR0vDUtnjIkYq1r/Wx9RGCLmAd5mSrcxxnzTGr1apRVAz1FLXn7gqxMRxBq++nz/CtTRidacCrMZnvGF0xplssIAA4D2Lp5ybKtQAJVM9i1O9KcLzMVYgLDwL5j+vHhrS/xy5k5yeSVH4voeOfDvlkgErWGHNwkcsuDfbLF1JNv9zM7jdw3zkkkmsnymtY4u6X3swO+UcwPN2UeOLxHwu625jwaWQ+2PHEBEEeFwV4lMu1PHxQta7QItpNFlmvp4D3nfGhNuPhj4aM+v4w7m0Yw5KS8hLfbZ9zk+UaeokN+RjGehinq3Gwr1e5Nftjh0DOMGIiSU/zkJHHXkaLv8XrBArctn0fIxxbBFakckZlAYReDkr2pbCCunr8zRXdcwooTLgsbIKzH6WMFZEVaWxSZh3atKp9ea1YhRTsXh5D/CPweRYyPO+I69HSZz3mqf0wqNe+qHbuRoVn1tbL6V+2jNl5ookISNh9mjChz/alJVaptTSIpmbgtWJpiScdF7e/8oLugRDkwCkXUXklt68oM66niOfCodfm3wu29KsCSsG8jJWkEKsdNlV+oWsKlcJNzAn1hdQ2GjcUwz3WWSW5MBeu2q/kQ1HamK1uyU4Qy7URb7ejuFuOfQSCh0w9OzLKsIoX1OGHd75IbguGmLIwz1+Xy09ef11svHCzakY8CGWohh1tGd29YcwZ4BOsSGQ1v9rkCa+GKhMeftgtkRyYOZoUsMSrEql74+LIvvtplvC28wjqhA/DXCLlCCrMevgy5+CsBHfn3xXr4pSEKqbc3cuW+NJOOI1FMFagk2MiUz46Z9HFtPsNbwUZ7FsYyVgFsF6g8iGXCNjHqth/Soq68pVFYZlNADADnniH4cPkmWLt8CgTFGtYv22MyYJLmdBHNgKaDfdk29Kaknm2pJchANL33QC75O6YaP/vlry07PzoZ6/l6fVizveEQmltiPsecab8kIIO0x+aW+X3/QleSbEgStHF/N2rS5ujpqqF2GHulecADhg7uMNGC6QSn6oi0vzwWOUUGm7fO0w6HPQAb0PfLz2vdOL+PpR8fM6UgclifXPy8HtZj+U8HvQiktB6rA9hPMBy7FCdlaZRgs6UhrzWNTWWn5+iSd6zNT8ZVJWs/9nK5TwSJyN3Pjcgl7rBxaKnlOUoHPkC3hKIjwM+W/GyW+HXXHUHDNg+JVxMmZTx0KXRbTT8iVwY/6LBruIVLznffGR1/8lzAZHN/NcWiVBmQn9V8vhjxpiLpfXZ/giYh1nhWTnqVzKhej515MQTdm1JC/IbSWSD0LXBnDnFexsNyo35STpCLOwdqjfB2W+aaBqGBXiWb03uVZB+CFcYe83YPcPvDpxyNstBy8LnAmBULsjm9zO7HUm+HzrHdKLkpSyN6/V7CeeT3dLLPjP5WS07bZ1DVEH3Qnpp4JzjvfqNygdj6IxoEjsU3D9h29XZuxqDbHgdN11fRC1Ael51wD5NRHdbOqN1v6ob00cHdZnwTaJM7rzhvfpo0QVKeVf1LlY7+k2YDCHoR5USvQ553wLG8ACJ3bdMvx2Sr0i4mhYXW36i473jaoCV4+NkAdF0sB2j1CWgnetj5h9RwryyQT21asgIGPEXyjzjhBVp+cywGMR+sDopX93+csGe/Uf3JHPYiylbXlsf/b9hXd5YBg7SaEHLUOfrSNadIDkvUrhbq2qAfaSITfxKu0RbVEI7qggy93mdp4gVWh622KIcC+TQ2jQ5TDdtzNxjtsf5Q0igHmpYrvlualOAkWIGueRlLFYbzVgpYhWxHbbOh7yqWNpb6XC0+CMGjSE+PtA56GG459gcpEhWOp4125nAh+dkHLSjy6/TP0OhHdDhEvibrmVcOVpZ5rw03cmgLpI0wm7a1Vv6p7SBtWXjN3LgQLfr8QPVRSiQ13mjDHgAFLtdzBJwNoqVAcWFWAI1w1HLPQrGSUAYx11nZmgaVQJC7Jy0bPRr1l+VlW0V8iHNrRPgj0jDumtyA1wVPIuATLhzrQS37vA3xRWGsUf+7YXJty9gIojhLOh+CZHTMnWMzjDQ0eiUlNyPfOxELBL2K2JsX1LNlBfapXW0iBmVeUQUlj7QeXd0ZpQ6qUptR/QsWSpMbgWveAEZqBMVjdSMhsss+XtD/MnkO0PQz8v3O5woguNAZqhGCakK3bHxqV9fkq7OkYYCiuXTW7vPg7HNmaUSICe+jysN0Ttfb7/oSAt7VBX/HOr/uTM2S3toct/VnsDkPRVJgvG/rxAonxu36x1caw1trSlSSbtOT/3xZxPQclh6QLwQ9aigGde/ubNwJo//AtcT0WB2BmseYPGnlmxgRZaRNZdwS8mzwqf8Q1K4Gij4BzGgA9OoAkQgwPSnwqTWQ1xFAvwZAgRZY9QygJw/At8AybAHbkQMm7wDbCkBEHnh1CmR9DNAfKaCqQNQmADUGQOQdsGxjwB4NgOfqgHW4B2xGDtiiBnJOADhw3EQYSygAMAAQAOy31p2vje8LyMiHA/7/vArHEulIUKI37WlkAx2ArMhgSlSXBIvcV5dLh/SVILkH3a3gozEBpn6MvMpY+pzfPAyVh4oo46YzZ2/8TuNsJrrWRYD9EAzHhfLG2UHQi5LquCcb2veq7crJCaEu/Uy67gGNYPcsfejFYr+BsyRnbWaTzqG6xw6sfjVNVjtmhACJHilBDJoHd5h3OvPj2MuCMScL/sGJ+LCYxXk55YH5XxlmXB1MAhOaLpjbYmLTAzhXu885c/WiTwbIvwND/sSYwwKFYpsv8yLyUXcjngfxEoIxcbcR5fhj0xbSAZjWnVahvD9cp/A6KHvNEWzeG05jOoUNgQ9xfkm1Bv1ISir/KNeX2mR74fbxoTPdM8cpX4Sd5ZzJnwZam00w47tLordwAfhsshHXgdqgPYzQdJVFGwhwGLvfGnVsu4S/JJKPVlD34ZNTyyNVBTaW7IkWxT1D1DZn/8SQItFv2I66kJCdXnJ1hPypHaUZa4EHYwnJ2TGwJlS4NuxeTqrTZwp90TIZhhNp4782LSMN/gCA2/YYUCvIA6JkOGoBlOeiXXYtaQ3G48SOUAHKfJI2cz+7xtUB/zTvXamTqhPS2waZjZMV/FF2jD+GHm07RoovIapwQmcbBE59GYcjCUlhflXNwyUkLTH/GBWWMnwG3PZvSBwdieQrh1VZe+fQvQWmitjOzbRxEEjvz+LOqzPXd0ZRLIzMs//GFwPbE346tbfkRxmutruktVL08pxVjAiVDY9D7L7lz2Hk8S13kCWaVoKjKAtXUZBLjXlvGO1IMbkOPJ8HeW95OjmzFVa+SY6dxjJEdPRDyrGRBSRn55mdzqts7wC8mB3Cxqw6F+cX9jJFwPqqZ5wkCcshCVSkI+uQ+GWh86hebXcpfA7hW486aZuKKhKKyvjW8pLdA9D7s88zl50vW0N6tpseFt6cWIIVZJ5E+Dos6XmzACvvRfyeRqnXzfZ7Nz7dvwaaqNG81CVYQ5Q3Ht59LvJyE07pqIkNI8Aid1FjLvpY1ezkDiHbzWIFwebpZRvSI30+h0POyCoieS5Vj4ma7GPWzK10Nj93tJVtpsL+E4vAwplFFT98GLEZNnB0XeKytEsjRdJiL4RXLwtaFfM+4/EEwFvNyTXy3AF0WpJz6QFVdz8atVdDL/XvZkATHtNV521JsncJVahkpRmntE/WgKDvDykdH51xZXCeIjvL8A4wbTBDRPFHnqiyFG2xSI8vy6B5XOvZDd6KhCklalSceMcPytUrTzTvcS07pQsV9wiJEh2F+MeiGzQgCGorouqicfAnVZmoAdhg/+/OEe3Zd81QrT8gsv7kHNE8OWJ48vj3xhgdPTClh16f1+kgWy0pHE5C2nLkzlvrK4AjvbZvfl6iKTFa0JvpIIZhGMbxhVxK1M7sdT74oJ01wiMVYqhEEWmF1+jFU9Z/Og0pWvWidLe7+hs47pS2DMMno8OPietMsLPBSVtWOzlwdc5rmR4Jbb+wXWwY5DsJ43jvsADfAxQmo0RWM6F5wnRiL07SBmaib0LPuez7szUOYRRv3yO3wdqG5GBu8OzPlKFV415MAUMRsm9FRHTLiQmr+hen+Z/gPB49zPE44mzb8DKurtodnOWXzjur4afc8N3w5zvqlkZnBplDIExm9d8c8vpoyvKdxaCwoCeNbogGje0ic87IVHhwP9XUGHmwL2p+K6JPHKsqiVX1+/vof7Cqzf8e+iWbofwNBEo78YQNaJwSXCC5JlkPQO5t3wB5JE1MXeZ6CLMBmn499NTSKfPNGMy3PVJJgHlsdmtcIJ9zeCMWmheGIj251+sb7baE3fIilzDXuB7uAbNTC2tcRWcy60rIZuOldQKrPv8Ddzg2y65o0amK7uoMXWbGXDsKG49vk1R5AxuZGUxVT1b5kTkD4REf96nmAvWDy8EyWWshCJeptLprm/bXij+xEUrbwFbV0AviAUhPDG9Gvo9Lsl0VepVoQx/iRqm+z6VE4o6eB1AnS0XlU0h6htL0Fo+1NSqArr8PWq8w8bHy5bueeIAC8vmmdBqcPxcyA3oxbgPoM60hD3lIVyzUv9eKonkTrqT5D21Lm+6rN5hLen1vWTuu6Jqffsg9IBCJEIM/VMh51Yx6lN6pdraQfrYRRBQR6thcCwnvEOvNA2ZNPEEin6wbxDcizyxT+6WE7BSJ3kweqFMMacBsvkJ3jxl1H8ZuFWbSR99IrGaQtKujRf9Mleit/TIE/ftVvfm5wHA8Z4TIH3nfOlPWyx3tpUK7qK2tYDyjtsOTeT9/zxLgsM295NY88WlharFGzIAQnS6tTROvrY/ZfG5zz3lInEfduFrLu+utfHymSdo6/h+eb5owACojJgYMt2/yMXUmVdBSvP3gnEK3hZD9g8/tlqpAi5cl/bYQehiSTtdcTKmaqy+OTAsGd50H8hY6Pvi3J7M168ZrtWh/jr7Pc6XQuLILJLIV0lJ5DDnnm+zlqdBIAovvWm4S6JkhxqA+eKIKI/ZDVEOmAqwJSUjBu3J9iB9Vk3BrDya0wswIQGqK1A6mW78qsNgHRDWcSSJQgxNG70A23k7ANlMPNXLsPZfQjxoyp4a9/r8eifOZQjlfRSXngCZA48VsFWJzClVB1kBlmj31KReXp3ncQuVW6EnCpUH9Nu2uOOoDtbYv+T05Sfrh7Bs/JxrLnwA0uZn3Ab7rUuBYBfDyfKewm/BDBtK9Uq6aazoiwz0tfyiaSdF8Rp+cE8yzq3dvJoxSKW/xbcPG1g/0PJ9hGIbhy+1pxAtWHD7KcYk5v4Vz6v05DumYP5NVgsh/IixwDav/b5enM3F80JaEAyO1h4wLLR9hGk1PMc0OyoJDuV5tX/mrnFKeq07+hjJhiYP7qHxC5FM69Hp7e/iMhvSzFVi4gYR+rUndBXcI3l9g3cxmg96wsaBaCEwc0KFq68YdIAz+PttKCO/zLxxgDsK2cMF+LqHtcc86GCoNGc4Omzju07tOH9Q87Mx0pFXiPeGGi/ego9Cw1h369ZJxhX+wwl3VKnvzYsCoqPkLj1MdXjPpTFIlmE5Z50lh41/lhOWUm02mCUKD0gbkxpfrsYVm31cvTOT4vuyzg2vPFFSnOHOaeRSH23cfh6rAhx+VlUJNTVSDaLec9VdEXXGiQ7gyP7UeAMRDqYhjYFqJdLvWXKiRJ18eVOzbGKG6Ue2dr0ff36OFXCAvScKSwHWw1ytXMjiD76NEFi7oxcX0+z9zWnBHFFCM4D7djj0JZZaI+AAm0hEj4SHVF16ZMjOr2Fkx7thjq1YMRkuGTb2KI9e73x4dQJ1zX2vYy8zX4nISkGQ6XGkHGckFU8sRYlZVVMHlddOJzYSHmA0fRk5OPt2B2YUK3ZnpzdDeXzh85uiEM+OxW/8iFiK4lKAW+bDecZfg5y46aV8RL4mM0vRIqiHiPZeAIR74xiIawjueoHsPAUb64/ZEZRSzSPuo9HSN7T7WDQqf7hS8ii8l+5F1YALnW029KFux/CtciY6UZCix0AHrwAXC+pNIFmQDLjqW5o3SGx8sag+qvypXa2Bz0hD8Hke6l7w6e9I5vAqIoyu2W4Vw+L/GbI7qErq1GTeE8ncUBJXWjP0DY2JMUPSvaZue2LIyx9gk94RfZgrp594+L4qO5arDgR+llZYu0dH76wJh3h0G6GkrMwSxwKDJlRN2vCE5mf/feDeb+QmCoUw1FQccSVHFveKVsQ05UtVhe/kX0/i5D2osrK45bXasGvfRutsvrvpNQO2db/WzBZejRoiFfMNBEOl3d/8xqPNydMtRs3uIaypPmcvpLk/y+nXAH2Bdsz2UvJi6lm4sIgZTfewlv/onYGBeE99Sv7aqt1KVAHhiDbHER+36pbwu5X/qGbhLIDmGLiO+BLOfJv3HwGNOOA0BS67DVJVVJlihMqWTvKwhKStS9OlgCQYq96IJfWPA3H4dJdFqm7h94A9OsgaytHUkl2YzMCHddjzfvL2W+30fDk/LKG+XgFMtsnNnO5bKipv4rakcQ3gVBPAkYkGru4aCDGLJdrrWrHIkiQ6SbeGsipTdPWCFOKQrEO58/vzPFfJwgD9paPUIw7Ej2UU5KzKGmvBqciQgm3dWJfxU9upW7EbW0SweN5D0veRuGIZh2DElP6yjGnW7iPt01XhENNu4+cqk3zr7Itwyq5L8OuhNVpuT4QHT4ZtJChYmOxAe9hKR9s9A6xoTEyeBuzp8RwfouZFgvVqw1xfQXu4zWBIlkPlFSp6TVVidQOuPWXBPg1BihRMgq8HGSUdSipkwqMxZ6H/ZnubdedVFF8XeqG8Rb6VvOzj9Dw1iOPmYBizgKCMGvhi72bRNqhj3UbfF0vG0GAINV7unKFDjTbRt+YG4TDQSFROxYCbTaRfQZEwDeWHGS0XrmS4a6Hi+dCSHRnB4evhFkdkxg+Sx39M/udr0LlTBUFFSs3qRqU19RxnMV0oRBG5YQEiw68XTGjpivTzigUUhM0f2ZZ8mJDU7aERkgOXb/pZFAcBKPM+e6rOIBCq+/xTl3Urzfy0Gn4hTuospLJA52P2h5+7JNb80lPlR5XLExvo+butrHIbUUZJDngPSNlWP7ES2B4qMqamSg6UJjHge+X1oXt8xTyHtfN7EYJz+k1uZyk6z9DU8Nqr25zSoG9/x1D1UcDJ8Y5AIHmQ4NcabwOK7BPGD0kSagAcuE6YP6SziZ8DMzEzqp0LJcqVDv2ooPI7A8exGVrHw9A4UFQ+95WIe4sdjK/79ZYlruIOFLwPCrqWm/ULPltIRWET+RQQIHMeq0GzvzyADQ+vEbThlYIwpt3aIz2+RaUqGpIuH0VOPrAy78wEiT2shiuoudYYDw/cpmtXPfDBf0HLUozuIdIQrCmGEDdE8k70C6WW8lPIkiZlnCXFmfuvoKNvej6h/oypCq0Vn4F92yje2UtXNHaDhTYmkReNRM1RxxOUZPMPUqLdGKZu1bzXeJW55qz3iWR3X+qsAgShFp5nIZEwnpJtc9X6eeB0smPr09XrGe+o27HJzEgVZy4tinR1OxpPUc6Q0XpWtG73ukIwYAnv/6XVqsM85TTgN+CfX1PpvgdvOF1passxTaCqo2nJvz+a2QmpxJrImLJweeSIwIpHYxPWjWv7Ftqbc0hBCVSRZwGplKP2LmOs6+eXHad/VstV7qYBaLQtIrlt5IG6yhO+U26uOFgiv+04UOX5gX+s6Z8ffTMoio7HkuDv9f252lWCmkzeOPKB3RHqFzgSa5DK36hsnLypeAvR3GLJlp9q1ooj3FK8oEn+hmYtZhk+Pbw6G8+qlDRDWQssu6uFKAgBru9VRub35JWAJIgiP0PQgxN/FKQVfpPZKYCSHg3ZkcouzWEBhIr4Jd5wVh380OLrBX/vsA/7OGNvYxDpbUSp6jm5uDJKPQtFvRZQuOVeUC6Cb+K0LEw7h/tM4jjpWGXbEp8pnRqXvQu7xpOd8cJrfN0+f97qu4hy4wHoYL/E3LzRKEp7egsSWGMMwDFM+xTNemJV4X8qFEsEiqCDF7EYr4JoQATxPXrg8ZN7xKo7q3YCZ8SqvtYckjXoOz17vInVXFaY7lXO/iCvnhZNK26PY+n/FotLqOIu2ewbL8IlW/k6bHhwktt8WhZ+rbZRK1/LYcAfEm5YW8yEyYuEjhpSbM8H/cN87jUn756UYrZG5bAVHLItr6lzECsUAvus9fuDSitnWyMjt4W7m0QIM2jdJf35Rc7TrP+7wepJbpojCL4yaifkTt2uHw4T43BGUGGMdfRwkHAhJQqTkPnSG2f9ytn2tUXrpyMh/DXepeM0mjfI2f3rsgk54zp2jnxxJrSEUYitnF5J2EF2eLzswcl44WQJ1HEXSgaPN0tsmg3TuQT2T4LBWHQbzJsZSU8c/PG6qibopZMuvTVIji3k97Wl7iJtKX4xPZsFE5x7UTpFLYtdGwYPYascI+MGu8Sk90lhhikIbMsxTbpzmfPq2GkqEnH7v/Qbqk1JLeimXVIh0sNqbJkWBd+BLoXlMYmLtoftvFsXIfnD9fOedwOj4aDKW1QAV7gnROQRA5kpEC5SfM7VHleKea3OZrMBy8G88Rolni+aLYMnHvxow4WtzBedkG8C9jPM5T9OO5XJ6QZNj0X9FecAVeIurdIXeg6WVszrpvDNxugwTHRTlBi1+BMQnEnqHD/no67FXCNZ8XHaTFsKQecfL3gut+wYHBT6XKro/fq624Y+yGY8hhi6s7mBhjplHC1BNa7ZZjvU/l8/VQMk13KWikDzv8sPjptA+XQ+1GEtN7coeOkAjahwn7JhSR5rz6ZtPh4SDZCChmQp9dyOYKxFNdekdP36V9N3v5A24FXoPZnMoZAifWU9osjugGIYYuuDT4BecEpmC0nSL5WyTgYQG3WcOd8J7d7Y/S+7zCe/dKcvKa4Mi/P0Q7YzCwZsv5O1OE1AVZ3tgH5UuRqZGoLeI6oL1ucHLVXg9p8x8CifuY8h6yf3mC3nvGs19zX6Kmxfr5sYaegwSFQwZ1KubU9XBd7W3SJ4a2kNK9qfO4bbgD5enhjYzg7RVh2X29Mcilcg6bCzgEegtenfJS1CRwr43HyL9nQctRI6XEcDHf0GShY7QVNuetgfbcoAN6oLmNibTG58vEiAeKHJ5aZ6TLIq5HeqilcKJ+wQ+9FZIiWRRi8s4Z9EjUQWCttunsc1AsBSn33YzRsPmPuZL/fIbjw/5gT8obU6/tIUkJqKhcXUhCMjnOt9PcfPOOYrOl0GfczLphqS0idpHu7pwUnRJ3a5/DgaBgb5rpfj2netG6x9+Zjg1a7pOBmELNGZXM0DHYlXocb5Jc6o6UkiCDYujJme69dZwD+JIDH2ez1rCRUTf42QuwGQYhmHYITcC4TMnjdM+2H8Q93gdly5BVwzHbW4Hmh2PWkGSRYEKjfTq/SaUvafNWd/10Ob16KoHpGo+xGrxpvihnRNG0Uc8w6ls94EQ+XZS5drPMjTJeBLZLznLQmwwL2raK4nSg9nc7tHrPd/8XJ+uFI1DFMylp4AFAUQpOONXImw5r+tVKsSI6nM7DtjisqWqvl2v/oesmkcXY0CO6EtDuNy3VXBXcM+R29Dk9AGjATei61K4NSOfQ+a8x5P59kShBKGotGRJ/SxE96WlczT0Y6PAqjMKDenczy1TRl54J57Jn+QXz7y6aEXngTouCitAEweRffF0nH3dk45MbLNtFvefeE1mXHgG6mzpM5CNLBCThe0dgnS0pCcUC7TMmbM0XuQ9iaSFRxu3yhYwJPrH32CYUYR/UcnvtevQug2ojbhgOFgI9hCTzrTpzB0bIkbPKgmM2thc+cDq3aPrXR9QtYPhd6+qpHRED0bH0W5VKuJbNeHfoJc8ByvMhVYgKU9reF/Rf4quNP6eYfRPBksZyd03I+lWsDOI2lC8jQIj7lQt6T550CFXyms+ROJy9fiCZtho1hernayHZMWmEM04CqzqBFGFDpWdIS8Zx9P6UA/I/wuGzjzQcURntqkv6sWB/Advkn52MIRUkfqNq7ETSzPvLRucijzyN6i0bk79gWzwVlfWbuWaCQaOwdmPS4kBuvShHMoZ/ER80CwNxeptMxMGe3M8g3ui93nKFnUSLjbPUu47dGK3gDmLiJIwTygCSZOmNrvgky+BLommP0Xc4PRfzDBnvFbf45x5jJFNBJ8YxlsU4w2w60pWzjtD20VrXxQP/6bF+n62KqDPKYIzTL6tCZUVZJl5ucqwYCO/XcvQ+YRQVtnttpQQsHW75UpPDMFiUGQJNiBEt/drc1Qa7aOAIN8KbTAUz02/qV64fHgzAgNLogbK/P/53SZsmGy0cb/V6Ytu5JufAdgwB6u/p1B1Bmbf+JW7VTKa4i1RUyksCQqi26HjVWr+tI9zFf3APfZPvcUbEP/12MDMSugzIBKGDek9Q58z9vkUj3SSgVdgWJL69mB/IbQpZ+EbQkwhIHFmPNgcM6zqnfElXW8SAXtdIFFAtzoeYp6zJRzPfwwZJgcF6o3OskvW2apCO/Eq0RZhnqjHlIQ/JEyOp4A5xOxaAxr305PJexmcrEFKtqpv+3CRmNujVxkiHA4I5rZaBSE4Q2WJQVFFdxN8etTwbK4qz76FblxVIU93RNO6+vvIvyFozlwKnkYnPcUvqhf1v70dZIbsZ+oWA7Rx6atn3lH1cf3eGHOuVLLgmy7RvUijC35jPKMt3Of8GvX4FrmY6ToywZtBTrOp5x8+ny4ahmEYhn2mBWUwP8gbVbrHQeayvmCPmyMez6x1RfTfTORb070Y0LUwyhyxOOLF+MacIQMiR0FU0+dW7OSas3B/qFA385ErX3VfoCtfrEpYaJU+St/Z/UzSI9lokJOiCaZdBaaOxqfxHhRyYVpb9vdVIbTFJRBt7FHeDOvnJa4u17QEWML4ydbNgvxSzbKaG7t8WiD7B2gXR7cNhgh6iAukAInbMjHxl87/OHv+BJK0gTXCCmx5LoRz44OQezNegUU9d8dTZtwSYFYB6gW75IyooU8G2FA2Zq4+fpo8pVVtI9TmDtK4i0BbagUlVtJ4TCs8+JVt5zjQnNfvWJk6Cl02+JkWlCnCfqZRo4oy/EN5Ky1xY5Tl1PW/ExJB8SvLKHdjQkXlFvTI1K4dSBHn3046EW9kb6gEpRrQRViMlXyPnc715zokGHCV8rbsvcrvzSGiC26ndyuBN8940WOm+bf4sNtRSkkQKLQRYd+QtCEK0U2zPIYld7grc1Iai0gBdu2DPv4+VhUzIfZgo/aHzS3j0UYnm/LbR/2gNztx1ZxMZHQPL5uEQqI0WnQEEnEVZXgC2TQGl+Hh9neGedIGS+9ZOKCi1gl9g0vhEr55PDrpRA3AnulFhdj206lZvwtyHIDDvbOqNldEu46i/GzHbmhJsSRwAYq5mWRg/HbDtd49+sT8IG8sHi3yujsK8MJQa0SqhDrgfwbPccfzdjYul+Cd+FaHBSMvp+GBr5vH/ExstyU4sMOt+exMe9/+TCOmsbhryL9snoJKXQbX8phvOmS3mZBa5gDolpDAqXoFHYs1HKYefvVsnWtQ8Gl5aKKCNBZqR3VSH/6+q6cxJATu1AYpNK1EuEH0BQ3pneocMrcvA0dnGb5N4J+xu6Q92UP5UsfLcufNPtqi/IYtMDnP4DwW2Uk2R4Ay3jJoeyqk3VPZtXxDEhAMrxi5WkK6FXjflvEKNQ6Pnx/9n3xKi1sOxiXUWPczYPkWUJypXq2oXOVe+f0FRy4NRMoD235MI/sbDddT6R4HzsnrFx26k9NXe9XYKVp7ohgRN9jwoCNuLcAUXpzJXwZUHNgLoLBYK5rrFV/SDs4/Ly2fwJ9+ifTW/YdixOz84OmFs2YxzMRCwv6xc+0WriSVk6PpS2WFieuMpD8TK0uVjosYAmxY4sEXuUBOSRioN2hDaUqwIpb4TYJjxdwq3Vm0prnWaksb39oI9wIycq/k79ZcVd8j4BC273y7aKYSIVl7e9cJFw7jbDx/ml3sZn01gXBAq69tZFt2Ip7zWChoDmLbeT4Hbr73ivuT6fvLwzge4LVIUeUR7emQMLzoosv0JfREAAvARLpSqTDyv+p2j5Ytjr/htUJ2IjEtiGEYhrn0d06zRf2Uwzsz8OoRLQ7/uqJ4ZcxgsJjLAruKCNIsmuYEQMtJtEnNgm0fUYN3AKOmPUErvi5/M0leNgrYMZ6BbjTsnRBUKnC2HytKmnyMdn6J6ixjRXEo1Mq/LNxj+tFdIRF9YDjBS5ZMrpIOcFEJ9e8h7Xk77uDkVf4y5tt/LOmPNuf6cz5zTWZM5g74dh2Bt+aVMKUshcbTSk6TTIZKiMB03+4hOit/Y7GBfRCU1IvkuncsNOHr1r2R/tHArvXUqn7FpTO4vZvH0q6h8aaPGuZUO3S0ks7rn5H4qIYEwlTIYp/xJHm9YqsJjgCDImUGoalZHupxbfGsHp1eN7E9a7Hh5pVTDukyGYVeF/mR7fi2xr5nSsacnE8Ut1pk3sPbJz5Bb73E0RBLioIKfW6jEWgslvw+ynrQUsmow+QJ9T+iXk4cX9bKCVuEV8jxHgZNGxwsfApkPEL6Iuf3YfbzRHS4bjgsUJKZT1kwOT/YBU/pEtRoFRtS85JBh1Tvgm/wzUlX4baxZh3g/jwFtwmZH2N/ofKzvl5v2b5uwkOBV9L3Tg3VI06BZy4Y9aWEjvyC50bPG294tnerMsx+oJlNi3/BmTWnJq6SxS4utzSps8BC7vJHH3TsfJm46Oqw9hf7+hYbj3PsjrK7qlSqoVbVMawEScfM6jbg7/kuOD37M8RLsXJhFjhs8JDKsLM+8UCWUuKK5iOq8ukXgtMspIJV1gVyicPFtLbG5rW2yuYSozYQcuKTnOX0gFgnhHYsaWDrT3rcUtU84KYDXDM6FaGwrRLSLNFIHFPUOpXjHvqCm/E07IJuiH2klU23GB1HrPC/Ba9CpB7XelRA+fOjI2XrOK4nfk5OyYppAiEoRe1HlTirAc0YVkJKjlLyT0F/eTMkM+o/PQIiKctWTGBJZLpzin3K7jwlDBGdRg1e+PPXbfy7GTzRSxIcUMZizxPM2dS2D9j4JhWCjFnjpEeMdCojlmBc9vsJEvhmW53gaqA8/ZbUVAYzCN+CwI2PF/ErTPpvSU3oV1AXeAAEeQE8Gg8CyZd711d3OSPwPbpJG3+vQXczyZBqxko20cicgppgCWi5AkHwzJv84NJv3FFHD59SckHvz4hjwTMtISqJAdEPzO2GaWd+cHLzi288vsdUEYngHxGgeY1q9A19IskVRVJKB0gCX+ooYqv7av3pFHT89nq+tKzlTD0oXyPPNJXL9MYy6eVuI5AvV9/kiRWoc4WJE+V3DX82sWBiUrLSbwUXZhDTeTQ3BuEwrAgiQkrbbLbP9X2690a7L4DIUeUcj6V0CcPXqOeDkZRI4ZIH27OHnszH4STKG3lgcR6y3Di0oS6Z36qmDE9Sv2Kd/GUYhlD7Y0q9dFInY0q4pFPMZvy+OFUDZXK4dFOnY7K5jFALZxy94OIwZw1O3ozp1nV9FW/kXbre8EFO2o3HQ9hVgCiOMDlS4AumQeoxwPRYOlxgPDLFf5iQHLjBCnKPAFujcHjAOqwUT9gRa+AZu2DtCWCGOrJgRakUg1tUoBQ8oPKUgwM2jtaIgFqpQpTjBfSCqMGLpwZRj1dHO0Qeb0ofiEIaUIdY0HjqEdd4d/SD2GGrdEY8Yge6Il6w8+SRMFpHf0gUe6U5SYsP0CPJgA9PIUnAwcFIeMYMd8JK8Ih1WNV4rPaM1Ygn7C9WC/5hGXmNSe038gbP2DlrwV3de2Qdch+2xVIwePOFZet6l3RYBYTVPrFmBG7OyAb8eqg8VfyqCVkyzr/Q3j06HsM28ILLDGqnbc0ZhBA8r3P43+mGa5TmTl/rmsKjq1BdrClzFeXlmiSEfe1fyTvtam5BnJa8XlMXw7lmCdrojmuT2ikseD2mVWh7LtcUHMe8XVPvmPJruTzbh2o2CLGDX1v8m3DD6huPYc+6Crgtjje3umfqj321vCGuj+9GnEz8+exJ5ALE1fIBGo6Pk5mwxNcAoqHoYaamJgBX1wLJkALmnRR49TWQDREAEIBSayAPW4CekhIF33uYf48KFUvQiLSJyTUJ+TY5d/71q0KJ+8tkyvpdD0vjYg/FfH5fWPj890VhNfj/1+LWOuf/X2vrQ+dpAMr/JtxvccvriPREWb/EHx0wD93at3gRRvCbKfv33xfDNnS/LW7jDp9te//wv68y+O4U9KvfjTs4F/14QJVzR+8qEzSrW3IAGzAt1mQ2lnV5QJ8HdOaitfqALQLdHr9KDoZ/YLzmANjWAJgAfEAB6wGkCIDRQpF4gBbMr/GVhDkPsMd8i7+4BQTiYUA54PBX/LsLUzPaWRWtH1GstawUmg1IjRnq5MXRII7F0lIlYGsmrXWxdBw8xFpals6eUM3Wq6J48l8Si4Y0pdiNqfn2blW8+hLFKmSlueeBRc3KRl78dxHHSqSlDw9szZ2DdUHD6WCOJZalzgLVlGpFcTNKYpdRo5d2Ur1Tt6r33m/VX7CSlR7dLdSIWqraV0+qviCSll7cszX39tZF4XNwECuzLF39QzV7b4ri2a8k9ufZIwXlZNRsgB695xRRDqO0gfYIqiuKP7ms5k8riRUOjEXmOGQsZSp5rCVTc3EWly6erIqdWFqz8yqKNWeLf/7LSv98WMeigbYm0Q1uS4mbvPiRWtb8eBfHekTFmy9p6c2LIlbB1jy4SkoPnq2LNTskrFnbDA5j/THFr4tl6dfOKlaCag5+RKWDB0Uxs5bVzBwksWaXV+qTLrqbvEsQ20LVbMkzg10x2KJSYyUpWLmMWr2okQrs3yL/NZvzxZiX55OXn+154CNCSbf6TKFqtuSZwa4YbFGpsZIUrBxGS71IVAT2A76Uy8RF6+2h7uz5B66Fl+MhxJxcLE+3lmM7/nZNPR8lJOj+ga291L7Q3ejm85prNpRi3HS9XjOml9Y4g+x7xrtxsf8ZoHs7AuOnzLfJTf7fS3YQ8n1sXJ0RvLUqK2iINpsrcD3N29fjuKmW5ixjb1q4e5Nzj+OtbmkvnpKOZAo6hiFSj9Wt+V8g+3DznPTRF0dcio8SzNpjf9E1Zid5tfidffINHMu/imyn7ZBzCpOtXbFb2w5BNSGB1FR+AOQFVLvZPsPBwDBPAaDS9XbBMQiMQ4gw25hj98L/L7gctGLQ0JM8iv6fjQ4ZEGA9SlCOyGMHChGPC2yOlSeLKEfj6Q+SY/DWYpUDjgEAABQEcLarzbsM/niU64A85rHBw90keKEnPTXzwEbtQYaz6cizm4VbNA/xX58dLEOVOgjDKwgNE1QInhnakAHnKEEx2GEDUkQOAGS5pJDjUvAqm/co9KCGuPQO6t+bjIHGMY9W+vckuH0aBmZtanezzDUwFzkY2fqGnI3PXdT31/ia60rmy8idXCOdurLX/MiaJAe79gBAWgDGAsAPQEiMA0wMAM4BSId1bhxjonA/xpxq4yR5lebEPPitXpqsPGASRtwimgbZkm5+Qrq6YWvLuevuSirHxU6GH4RGep67L2RRsaFpbE6geLF1YG0L78Po/Lbo0u/Vscz29FjJO63keJ/Itd/gUOu35pEkkW/sj7G5+X8+eLlND45t7V4QRHr8jBCTW/3oOMR1q0ydI+l5w7Fl+3pcU3D0ZLX2qtNmbZ0xCGqcwTLPaq/vI0d6H7Nv/9beodnyO5xYje9cNOJRun54ad6eWQB8t3c0aSzcbQ93Krr5L+vOW+XT4jpEXAAf5cGwnG9O6LZy5RAZy9Uo2LFQjLoIjffGesh8+NcP1avKqnfq6PTSVSkE90VfqsFwBmWWavednMBXUzWI2qnauQYC+/Htcu+5azV4mzsEnmIFitzJbV5kjxeT5z7berl4GuQ+5wk5u9SjkfTVG71Gjf71PuQuXXqNrEdvnPOTgWrfv4GvQO839Md8uBjwFlnz2vzntZL+C30OvEU+eaGPxEK//XXCrPnrBZoANrxD99fcTAB+eZUxTAfgACAdx2lWr/NhnAvgYGYJcLkBRxo6Tf0ZeDGrg2FeAJqUUn3PSsOgjwDvPTUv7Ny1GUGfHPhbjyCeqOZwM7iYORnuqJkZHMkXR5g+ujZb7qhh++EMXsIG517VMJdw6kTcdQO9Bii5xrx/Ksw3J0jMaXKlFj7Gj2aeO06QHWeRZ87C6tPM9TCQ8k3FixGKdxan43GI7nKq3230eTzVnKg8KdXv/tTbyxMIHOee7kaqzoWqE51q9nQ3UsFuJ8iVF6Sgu5G/yl/7tPL8nXw+eW0sL9/9GLM7+fzjdy1vzANvTHaqeXuV57W7tTY/vDYJvwt54e4gzOxU88sLs+aFBPTf7RkIERRvpEzs6xI0RihRktaItSaiOlLFnjQCo7YgF0GlpoqRoCYhiYxiS8oSuVcCIwKgpILIvxLKPIoVO1JuWOsE1EfQ5oVeGYnW1BAiAhpSthHqG8hH2KAiDYhdTZaayCuBFGDFEsQlK55RaUCZYiPj4Z+uEggPXHIJP+QAw+iYAUjJjQBGUMcAUHLJ0CZm6NgZvzvsetR0ZAlmd5+Z2QU4/lfAGdRD24+o/2LLpqj8Pd1vDVRycHLfhsX1TRwZuluLyApWUaz2xr+dRkvs2v0f/3B+N9YR1bohlYvLSRGcTCBpfzy5uKY43+TSFBx/dg4LxvHtXbnLODZ6CHuApyX7zsU+vuPb/vPaAT7fyF9h6/nw5x61Tm3JLzE4DoofB31s/z/3ouzvf6l0awR6fYvLlFdeZr219XqTe9ONcdlfo8I/p3ZYvCFgv477S9E9L7PSk5j6JOryqGyOWYfFnRuDvOz6ffIy7wNLD399KcFx0uF7efQ1p0f3Y6vho2l8EvfHHT/ev4BjHJWzoys03vNrdU0dPI4+cGxVawh6M/azwH+qUnIRhi6dSJNzBT1ayo1oVv0tg3kPqfmoFftTu7s0DNlT7+LC04d35HXAvm17UJa0DEugpim5C+BsDlcVPkWpUb1tmk+kKGnmMBFu01t9w5tx+UqrNYAAmpyq7KPIWi7Tw+OHcfIQtpRuE2/5hSGZdzhXmCnAErMCWc5wMIf4h6RzkFDfgHxKWh+CBMYpFl0jso8047f4bVLiTOU+jn4yt89l9uVEARp8CG9nkqcCMmJbDum52yNW/85OehZZ3FVmctpKyo/y2RbihLNbm+yM/xApdjh0qyltuWrKpEPWL7OXffdGSqQ1ciqFrCRNo3LqFOOeqPnA43WMuypj4uaodHCiLTsxUMmY8fp7Ug7s+6+EjMyBUjoK8U+0pEVKfsyhY8Qe5t5ZsXljpIkyN8b3N+XkESn9BrVU1qqn+hsjXhDwH8cVlc/6O4Kefc4cqaVFQd6ToZfJRSCH5bIjfYizUpL5pNeMy6BlIlLUaS0lXqLn28PSTgj1sqJF+a1tZV/VNXbIE6qHxnDTfPK38g+5jug/ay4h+mxkYjviHU1FUkpc0kvmtW5sDNNlqcUYec66NuIHgPTZ1qifZZC6lKiV8M753cBPYfzbp6RXjmRIS57UTNNka+VEAUfQ5U2zi6kds3rhOD8IOMOt6tdfAUH4KIgwyXShKcVXbk2VYVYsAmHnhK6tpRGuuQkJxJHPK8KfWrHqOn5fgtP5GsfI9ydO+DooJX6oS0szoiDNeVCKnrdKyc8skBFKYrjnwySnVfhpzYWZykYOAsVYGz4q65lX5t4weveBTJCdfX7KQlJkbVkWcky6oKu0U9ZBErq5ICF/yQa4n0nLUPiezECJUd08mSRN8S4TvJSGdsXeY0bBFCOp5OXyOTlPtBrPd6aSQ9KUW9WLtQfLXTrWMPi8z5OkWRql1pGJEaOVQslpKVFLsnL+ptKBDu/ZMw+jlmSR0eUCiJEPZEUaGXR1A3tFDiLv2pdANhE0crGCnKsgLRTNGqpfGLX+tKz1Tkie2jAkCdXlZYD/tDrxxSjZANbl1nA9kPCKhg0wWW/LIE62RaYW6JoJU7cUMK8iu9bMkbKO4m6CCVnqptYiu3QoTd22b7XYbU6Fg4Od2yPd2bHvpsHVfRHGYoEl1qUqlbrmuDeiHMJfG5NbjIb9guBk2TZv9KN0KDoYjPmX9vhgCMVZRaVI5U+etaL3ICb1ukmYLxT+PsG4G1QyP7Yao96LReCSjK9PXkBqnBkf1VqdlYfHmQzL6paEO9SJAFqbfZnUY1OkV5sPSh2he5YVztui++WdXmsLhaWU9dNMxcW9St3I7ebaPDPVTBb5XqBW18z5JMBEyXodySGAikH9P68Eo6uUd9KzWtb01KxmqGPljP+agJLkPqBoUh2BqMUDYn8RXgxqWSW/Tuo1Xr6aJixmzD7bq7iUmcIwHe+/wYdF/IpnDB6W8KzO9P93AZyDa2X/rhiz598Kkjv237cVOvhf1xJx3Zcu6suXr8+6zn8dhUjkNH/5KOPj1tdrzhyafw1Nk/3o0+XYPWv2+sqH0+Vfe7y+//iwy2Egp7/Dj7fZg//p7ffz459sP8l49n/ReP5+kaJm2z/xW0f39/V1StAdTJ/v2f+tXsdxsd+nx63NTk/X++v3+zH5qqzUY1N+PueX0+y5+N9fNfm/xjhs2oj/XwnqePEjMHnsmGD8rRWkb5w5KdpD960FXZVtRNtj5BHvEP3NrczC1Yp56bY2108CnraQo2wLX7wm2VboSzI86DGhZwvelC0Qm3wBXh3jNXcipAWmJ9fQ0CTYYnNt+iZSY7Tm11PLs0ZD/o20fgLHjZy17zjM5ZbBKlrDVK4jbgk/yEiO8QLtSBwjTWWp8kwWeNnEREGm1AJj5gQnV1tTKrLTCePhHf4/VTfNb4VwdvcMdY7I0xb4dJytGrUGqSdHFPVhi9pAnY+rnFjyDFqZ+u2HogdaMke0rUixlmhzjWthZA4jxzsb5YU/a907x0cEt8HrshbFdbWi6bB3CnnLI8y9YER110w387y9mSvEDiQ119wvE+cm0Pwqdn4l4XHSx+BB20aBg5MaZfV0+Ipg0AwCy+9Yi9xWh4zP10Tno5xWTB0SDOSHTbKSc6wwtIoGbHRUrk3uZUy7YZPu3Os3nqIf3ISSo66EqjN2vcsoVI03QROWRF1vDUIgaTZSiw8HtUotpJ7XRNjJVNWJP9VwXBGDeUIMxrYI8vMWxCHJM6F7n9k4Kw+cBHkTfTtdGzCuHpxief6wO3HOfyHwyEnFcTCQablt6mOOgkvJ7KYG0HAyQu1ulfIGdjtoMP6ANck9AMXXPz/Xkkn1YtwvmEvQggk89RVOjncoRuzoZQqf24KbLXGR55OKmit4GbB3cbqZXroqWPuDo4rqV4YOamduNJ2VIhuSeiKfEzD0zOqmSSEAJc8OtAGnpgiZDth+nV+vrH4gD59sus0W4zB95RloOm+kolfcPneaw/ROiIvQCGNzMatcf0ZIYI1FvsP2PbtyOPSBLyMRqQpKelDsI4UpPDJY+9AxEPfkcY0M60XeLIjB6MmBqky9cKmI0kd373LQdrvk5j6BRjuNJKNfLjEf8vQWSt3ybHUAKySJeleAAbicqXkv8bp+aznt2/zuqj/FQCyLHhuOjio9Bsq9Y/ZSVO0+W8UgHJWo6dR9BXdo8N5PZ9PDIbZF+oNS+KhBRxtsq4YH/WLnIkVr6ZaRFq2B7VcPGnZUU7Re/ZBzgH4VcdxS/DlTAoga0HUD9PT6D4W3ObhuKLyOOqYYi6Z3WnTX3/XYUFFbRa/rpj81zn6GYtGRGSc2jTqwBYrT2CKYorL09z3nZAuNP1dw43TT4Wl55cyPOu+4Kllq4zwFAK/DLeP11/uZd1Kr0XjCtOvlZJR0yvKz7OtFvXlyDXluTbM4nj8qo2h5EarasaNBcNIODFBXG+/J6Gr/McLC8app//3Al4LXsHj8hFXr+f+qDT8cruXNh83bIwI3I1/iuJfvg9GrWrTsxLbwUeMYW38coe4oGJowHTehR81hhWlnmQQ3e8N5tcjf5kabM+ly+mUhcGm6YsxzPraxJBSvsuNQp8rXCojT4dCyZKpAkBN1V83RDeyhwdh53cmI5t6stlegyF3Ure7uTH+Ahqzxi8Iwt8dsjauHcit5VSXG8o4dWINWtwWh9k75lm5OO/iEnts0oogLIW40YNZzLGYs59HAUCDie2k0hw5yVovJ6nlf5KpITwXmZ5xVRZm+Zt6IMaSKdL/Ip0GRt7pJ2OFh2l+nI4QO8l5EIAW9MYBG4Q7fMiSSfm/clljZF/9gJG107rFL65x2QZeEtJQqhiHJeQE14z0jMJe2P6QfBxVKH81UA21ZTsFHvlIOIo7j2OMCVbssEvqURrhsEVIyJ/J66/CpcEz4BS2iYv4eUElE4Ht9hXARHeHJtF74PSS7TDdLyCMxT4sU5uN0wbxDCR1PL4IksaBIaN8twCLNHB69aOo0hTn3I3HvWgdm61S4f1ztTzII4hOlk6jK3kiHXsjjHzb5W374wHlQ4Us+gqhae8UOuXUPZnVWvLspJVKX4dubgg6S+xQacnvj7xKNNUMj9dnRVt3zxp49OppHpa8z/8k1M2o4ppY9dL6fwKhTSTCIQvat4zriVIR+jgA2TQprwkn2CZCvPH8SMguH1ftdt71YIZLVK3sQkdpfD4jCir8kuq/X5xTGu1VNf1Gu9sf4FFvbx1eJ7siONUPLBNo43RVHt34cLtVZHkDp6rP5ydQIhKUMn7HTXQlGQLEzOQrUjJlqLzYsPuGYHnnhciu6ffk5mHOiubiHAUhaM5w7t0u6Sbv78meE+OFNNncl34gRpF/BvhSeG5vTHRCWxCoJ9oynm4iNiLKYwdAlUb+CyKDtA6810Ny5Q4DCMncKFGy1YYAeeNCziHMDbmzd8unTYWML83CbUHAcyt7nW0+q0lwuGJhzHuYsu/fkEqzLYTXDQB/FZz5sy7G9dLFTHKgfdZGGQ1Ekr7iYpjkC1u6wNvfAOx+41NQhRzuFLCBRkEGk72GUcRATdvADTFgjD4QFqOP73mxqFG9tQTQjB1Ron2axWtO3R9J2sx29XVn0hSNmadxdnG0t+Qgnl0DgEqAECbj0Z8kmqozXb3kkLh+u9XrH9iGONIUbKeKIahylPv5y5x9SNxVV+Kh21gMiaWSY6WV0DQWcWrM6UHSKpkQnRs8N+EyEEnvC6g47bK+7J0bm1bqcL9gYphRsZKCjZnsvuVvIZi6NOeStzOaKN9LQuqRpGvlz23bQynRXfgdYenw567iFJ6kKJTwox463UrbMfDFaP0eJ/rMCBrSGY36RG67HdAHNtWfQPzjzeS4SaWIfbjOZg6dEOguhNYrJA6UCaGPY2M/OUpWASHTS1EuhVH0y3Lia5fCpyuYM4G7UvgSwnogp7Wn4TxjYEXg9PR89lI3KXd1STUaztqRb4FqX2pX/XFzKD8r5HXCVWeemiQwn08GWUjtGVp03AzVfqge3w28okU/3oM0IrDRjTUG8x+0kWRDsgXsaU8Sz3KIOqvFL1F5GVJtHBP5VhIIhGT8srENdgmbacj/6lsIVVC98T3WIvjO7FN4DBXvzzUC5iEIr1S6OYJwUHwXpP8FwSSgVyHC7O7f3v9tyRn8cLbG9XHvG6bqVuohTpMzkoaWycy3o5T8d2oXVu9X3mN+RuzSuD22Axu7GDE+TvuabYl/Y6+khpcKXQzxD6dZxcYdaw79ozD2cW8KegQH4LOSHc2HMc6iLi4IP5nunvXrmWoOiowgXOf8CdFj3dZIqDUUzFvrLinsyHbYC+1OnBsJLfz+J/w35Fb9Ft+4uvwNqVUPdP/unRJKs1exBv+ymk7g0ODAzV5hyUBNF8+obIQ7LoROcKINZVWs20VHC1x4m0xLSVX9xn7r9qDD5iHtvNgDK3Hr4wCB+zaYJcaIVg8YYMSUZOhOGV4d2N49ij43wFgFfVPHJ8s4v09RX4MR2vIw/PDqNslWIzdmuW+oBrcXGqHdigG75Tprc4N8C567ZffPa/L54jnoM/xP5kecSzV7+Zf618HtlX+Q51EnxfwSDFOkddgfMlOZY1XV8s7ar37NOfTQlMiC7MTF9iYNfr4CMXEf1/r4/7kB+Ks7at5n3b6EuPTDZ5uy0AhSPK1EnxvbQyuRrczPo9G8iJ22JatOf34ykCg2C1BJn7NuCfLRmrBIsvzU0WKA/kXD7o8vRimjL7421dCAk9B+HwqVM4GcPrt69xdpiOP+1eiEiQWvG6bHD701teAbM/xKPb0C+UKgD0y0KMqrnSmydpK/FvppIvq3cP+SCCSV3n39by/md8vGdo9w+vzYhvnfkk+eXdk2XDqTu/E754p2/XJaPLkaPwEV2funXuAPKOhaacv51saHtLK+ZGZ4ihuD6S8wkEOE5soBhSjH1ISoW+k+KAqILLJDygkrEMAJcqk8Nlz/pCFqRC15GKuHoJSxEEajb0QznuQGKmk+NF8hwuFbyetmuWX2CGOjkhQm5kjdasZxMN6+l3CcJXFn6rhAbMiOR7EwXkNmYIARQZi/Asct/J7Xir80uhxQ9iJMQ4u8fhvaGIcepEUQWD9jxYbFBI8FgUMJvtcJux9QnCIVEWMiUyJ/6tXARax8JAAMAJXfTRYcbHXFzHQ8BFSAw5kFrF6KAG3YQ2H5FKxykBi+zNoiIS6iirOoilMXZeVf11xJa7ii6Pped2o3OS06Kc6JSYOPYXd7XtCqUZSY43bkpu5pMluCJsXo1HXwkHENxSxaO8sHjk2wm9YFh2yISKIee3Iu8JWoaR/fYIH9tsaOezhoDpnhWtGq5PnAw1v4Ycf6bxMYyCR5nUptWmZhBOc2+NvLImhLyR8TbQBJtmoq3C6/6v6iB+ZiKriL1+ErRISOt4gYLJ66vuAv4tovVQrtXAfvEOEVIC6UDx5ljE3lKwOLYHHjq74C0XLEYgDrEuBaH1V7N5QlElpgFKDj+Ornqa/vc7dCLRfjwhhgOYgnaUrEcyDBeM2An2cvL2yWJ/D61FpwRr/9aMayX0ASocHzQmpDE3/ApUDwyJ3Zcc5qNuF67/kRMPG4nOjZjegp0GR3n9yJhIXIyUv7Vwoy5x8ElMgOmSmAnVu/RodEZ1fOYgQyzVgP1ckoxHPApAYUMAOmgsggLkc7y5EyRXFE3yKYbjfwzZp9WdZe6B26VOC+CkuszZql/nsC8jbvd9oKpIU3W0WCqVXKEQD90U8al0HlKGXqo6NdzpoROXQ3qpK7A52v5yO0aAL3azYi1lHorKnUpHZ/Te21Cc+/ZVHFvBrhbRnFt9a6l9VFC+XHNBrAMv4v8KiUnbdq+g2K5jQAN7pUYJYWaYPftfqOAOU3TrkpUcNR39F3vjrSSAKc7nicW3OA3CKkhB5K/QXu9Q8PfWmTchN7SyTtQReYXb9LiQ3YzmeUJgQZbxnUbuBAUXzaAWkZOAnQK1yP+TQBTmB+5/fp7Dmow1R1rrL+ewAU2D7shWG5pllzcS0qNqseghhvTj5mvA6yF9k9g6O0qf2s6GZi7gzbfSPy9rfkw+1Av/co3d3oxy5Z3qXKXcjHdy01Yde1DOik0Qeu6VesfsbON0nHhH5x2hHpYZXoWhQ/kOoyHA3GN8umYl7glWcDmbSY0ahi6Lqc+wwMmdqpahOCO1P5vS/HPOtAFk5qOywRP10sKTvAmG8SlmBmmvq6Yt9FrBIxVQs3wBIHYTZYiTrncEnw5Dsy3G6gpvFb0hiUnhWJBT+1sXOBIdFWBdUiOMrI8cl3BTxhOwIugdpiHVbPE4CXI/ndggJduMOimtxART+yI0VGihp0Z+zAKSL3DROg0C/RttibHHuhuYwXoVDKnI57sHfZsWqWOMtNSvXxOeTgUdY6Gzgy3XtnSzQ7VFqGmC6uUqscaAzSyYQyXx0Ngno+P0dzbiaNOl5K9amg/HqcdoqMbzDU6Mi03sM6YAblabJwsBXfQVBpIf45yaITxvQaB1A7qocCIVmq2tCLeRGTMDi2XbQhbiP3PCvaa0xdJbSinVbHreDFqTKNg4TKUCfzCaTWcpA1Sui+fZ+ssjhTThj4BkjrsbAbufr+EHOFspNFGS9Cxby+CUMr+bsb10jksgazLumqSgj2kwlF0IZG/d5SrMVTuTqUIvYDadxayfjF+/WMM7bWW8W9FQIBR/A1Gc/4CuGQWuJjEzIQz8zkLo0lEMXsAH+mnOQKgAtMvzY4Pu2tt49jiLwgZ86sxJ1SRdU5Q7ZtB+geqp8FAYcn8sS6r//ZnKWTQOKWTraga46ltHDIxkI1LgAlMrBEeJni4qixO3jKp90ipH4beGNQVkmLhBzECQ0abAou088Xqq258PrsfKvHyfbAUD7Ru2s/0eNoUSi4gI2TmCA1IJXoOt3/dLlXgrlZxsZ57td0zXuTShGkZT718qSF//MJwvGA0ZYI1/TrNA0Zmp/QGRgMTP57n0xPWh25CNH3igD5kASzC1CdyUlMs1tPnmgDZuVzPkj49xUC2h4QEkNE+QKRgGTzjZBJHh4OJPOYrI8hmdzw/0jQ7/f20KKZpYkybbdLZsNQUje5YZ1deJ2mOlGfwoTfM1qw7dPCkIiRU8mPSmB7MB8wu5p0Hd6NJOWoto5o9FAtNU+6IxYvAxITbCD+6xL2T9WUSIRXf13aTRopFFvQsJq9X4RyJ0+wU9/bPKDsl5noqxP3O88fb8SgyES/+9OpMcZ0Po++HVVr1mV3cCpk8eREEkcXgay3W0DRPgVIn6F3ndHls4suLxHFJ0bP3DTfp3jRgT4tOV2ZBzaskVVNfWClMyfDDjnWG5dIxTMWdhMpGesFpUrFDQhHlc8niqZd37NKJe1qpxrqvYut18uzDM+KJVjqWsWdHmVnob1Gtw1BKgKNqRTSR93kSZN1y9JnO8sV9/WWrsciKXHbTJgYhSwfHy7ncyl9lEXo5xqWX1R7H6+RdPscHIFYOdeyAvscwHqhDMi5wDynOCEkZJLF4wlBB5QIJxvIsCFHbvWt9TVsSSmusqYKKA6gDs2bXUDv5nSiX7hjOqTpFG4m+kzr2yNKcgWIl0dPxUI/yGWSrCdfWf/peaSpDWyYYkmfHtbPbpzwlfNERKgUudfezurPumC5cysCXbJeK1UXKXVXCoGpYaMgamq5svNhtL3Wa2L8s/BkojxtVQu2w0uh9IayGDu+nvSbHyTDS66FTf6HIsyTO4D8bEMcrDmMduhGy5eySQcbgn1JLeAPPhs1TJ6nXhhzl4tpHG/D+c92QGe8ioI/TiDqvClgCHx+GITD62gWzgEZhTv68VPYfFljJswIK2vk44xkR0PDxUxNlHNJrj4MizRtfcXTGTQ3hsKyp0+gfH5NNUdWoZ7VP2JfEfDHGuuNY5Xk/GaqWCPqo/wXRHo+Wrvt8L3YDeoMxmyHgGRK5uAUZosTZlgmdKCSHKxfwUmbVd6b49dDxoSl2ydl0UL+2zQNQitF9lhFxadizlXkr/uw+crg83oEIgd4/ZtUK1iLt37ry3Td0JoQfh2CX4jTO3wdPw+coBn4HNcx8wA4CFAl+YlppavrxnO0WxJ9wbYyAE1go3Za+gW6QG3+8emrNg4s4ncPDWnFL22Ji+bMlU3q24Iw+l0/ZTPh1004TTxi0xmz4IUHGhCh+MsmlsTYs7r7gF/n5+fh3vJyA4I+mkQfX6Hik0/AHRdxiarihv9lQNxfKbqaS/Y88Y275t5AcoiNwy8uNa1gBEAGOcLASGLqcH9+n2dlkXquuH2CADEGqhDgBkDoY1DXd+9K2/uSot+5ym+D2TEcorwQUPZQk/nJ/jJKsrJLeaC/PucTKqH5hExrWLPVSwQ+CDmk3FzsbFA8dLRNxB7hHneIsGqv2ALHWws8Nwf1adNAuW0TEZIqcHZ8aKR9cu2FFmhC9YpQOopUs5H86sNUz0+QJIfRWoxuN0APh5BMkroX5JZp8Er+O0CnetoS3l3XhEQo0gd/RSq0sQlLWVvFIiA675aJjPOIOhDWrtbWloqRHGQ1VjmOiBj39znhxDAyVdIQ6R7Xkszl4mFlmkCNe+AV5m0kbqcvF9oDAoWDZa2uwApcGAuyxSerURXj4z2Uy9njlDa/C/fZSCN587ui0snVevr0l8+sFgT9muN4EQ3XykI/RkSfgAA/aV2iY4uSAkqSdD2kRKsN5COfu1NsbapcuTlH+XHNe6PQcLnMWMgrGTxFsoZiC7ZdY+Bh3nfS25TpWtSlEP0YIG0cQvw9a35jO9Zus9y3uS/VQSwev1FFsoZXqPoxIFYMyAc4E9cvRI0YuEER/vcUc4cbMvhQbv7VwTpREZw8VELAh6OhHoXooqe5MuP6+aHbXtJzVmcySvXYjiCbNsMti0l2chM73YAWHX6av+7Gu7Vo6oJ0hJO8GAChaiF0cV+soKgB67zKWkHpA+XPLo2ny/L/mLXy+zZwtM5e3Gdw/cvOuyYwdPmGydrudqVv1FzKbafWrddLVcLHs070xAbFagf+uq6h8Z/fpJHRNmgj3yXyN/XqPqH66APcSpD1+V84/8CRjPDPhPtJH3u/3o9sP72Y6HmdcBlyoewnOhx6vtx6n4UDCnlxBNaePz47NId48jGh49q92TYwJ5Ek9g/74a37dc0R1Y+DRmbpNZvuFbfg9UulccblmyWpLA2WYq+L+mMzUn3A6sQaxpTtoTqy8cE7oDGT3TT2t9+mnlyx6YLAIRqleWaLag+kN+xuR5/ihUlTd/5frcm1QPOC8hnpF9yD8IAqW5baDPONG5oe8HgakHNjOKj3qcmmT9dwx+fI+zLxg856O3nbRk7Ccp+21nG9U5WDO+y96FF54oIQwQp97hlupP5TMpcu7Ow57dOKQE+0D99DZ1MWjN9ZeNOeB8xZJhj2xXivvDNRBi0iFY/DDlTqGAF25/ggzCpONT9t8Iu+LkfhFLp0bP9vz4k+nGcuov1Rwigc9rsr7PFiOj3mAH/QA8atENAjwPZ0JSlCCtFmPlnl2U+WDlo7iMSkYXG1X2kBQuBH78ae5pyn6B4CpWCvtPRMLsWibEomNS29OgpHYFayuSZ4/MhlE1QozHzUIC3PN1tHrCLYeJWSEM6DDejU7bh3AZosGHL0MwLWnASOcxKOiLWbekypok5Y880YygfHt2uwdxWzf3VIAjr3qdA+ts0Y4hb/vjOmuDZoBgKkCZsHbkVcC2bBniKioP+NCfA/DchBzyWrOcy7rRA7bXqFMYRexnMf6C9thjrd5HnebX7a6fzry3XNR/6syJ/wB3x3NmM5OT5p/n/m4f0vo2TVr68VpwulvcE9BhTGpVIHA/v7aL5zZu7oSNyqgZmM3zzTGi8oFTzDCyYQhgIJ5whsuZO3HVIIQauk0Y4CTw9owxrGiQ6enZyyV7vAIPfDmaQ4nadazLpKZcyDbjWEsqhR2JDv/6qxdVVfRxSiTz714rZX48epWcI0rQU/He2GQH+K1dXEUyB9pGJH0M667lsyeTa4qLeZJiYWM48YNGgblAGHDu1EbruNo3khr1LVF9VDMpTSF7JTbx2nw1MYPuW7YkcwL7t7OwR73fJBj3TYfvsGZ8f8e7ILNfEIs67+T2XWGgXkpal7Lp+MFkcTQC7/wqt3pW2nUOyfsNkKPs3DabHK5bPHPjBbVKT89Vx8OljloDd20CbOqy11LXPOp3hKeFSMKrDJxBhePa+bMkHm8QIuCekEGU3oKRFhIvx26sa5tDnyDNaMu0mfgVvqjVEeIHxypX5LDTRcvqzo0hrv184xcBd/XIfGZxhE3qoj1boKpKpyxtRWId0zJzK9HZqJ5YGeagvE4fmzJyKFdIHEerLhjZI9iBOHYD4cU2m9f2WWN/g+v94FSgVgWBenxRIOguWLDSjW7uXpnPZx9kF5PXxYWxkzclUrdpp2ZeevRYmTalUOdHCMgtWIVmLrzyVEhf+H7Adc2ZJLszczuTvMi99x2Uxdyh1etv7nAlIqfA97N0sStHaQwu+zHDyE3cJqfagU+ElhXRIoisIHt30tS+U2Oc3fkA3C8Ebczve0XkjqWB5zllUJqRecBuTsGbbMadiYnhxAM2zrJRKSVwcIAnpDI+l49xk56LoPRg/muEjLADchsvq6HICtEmHg92JT4G92LT7nNcrneMic1JMsmMTjQZPfm3/ivqg/oVczZFYlTrKloVSuv2NGC7UIkHhmksBcYXVmhd8XyLRcicq/I+7x9EV9YRB1GOlW8uYpBo7fTHi1bRkeeJ03bj6Lh1pZFhovHiSCpcKCDYvyhdxxzVLsymA30z8Xir1krmmRckogga37X3aAtY9j8VF+rPGB6OVqHIUvL1ovbKHS1SLXE4qr7hHCPhhGwDDVLYwhsw9WaPyimaMJAv75WtcXUHzKKHOUzTUzeYbtbihF+B26D85z/AWfIecuDsEintdtg6i4JjbpYt62Cor5tuKbJP792xqEnub8ZR8PXhQL29iRVCqTeAMflRqzo4Hl1xbioJYmyfDR3gsdlGeP0CuJGIdp9OFXUybYZwvdgNUYzZEjVwTVW73+LYP6QmGSzuOPn6Q+v0GWKeD9lp53TXfDhqp65zhXUXfQ/7ECgkHCeYvMUkcpkl49gAAwUUfRsbkRXXdSfwnW05Mpt1HlrwsMamcPHB+WRBg69HDxrYNzZlxUwiBObNGNvLcrS04D21zy3i/0skjDB5XIcQZYWMb6V0QXwCSRRtN6fUfczeLRyyYy963314IzUctpcFwNjJyLU/ch+rD53bS+HcXrqYQHAD1YBL1DaI69GxgR408LDAUIaGlZYeWgunja+A0JbRxMxvcpWgxzRi2vX10+GgS3MjvQRflqXYgepxoSNxoI3FCSZ1rBpfSU31nOwllbHb/OH7nKJ6Bk2Usl54zMIh7aytzfA9vWqxZW+87eyL2/sJinIqFudZYddJkdsybBi5UlGDPF3ohIr5eqpVoRVdwnQkmv50mF5NVewyBWpESBFjpXgj5eKd8lTu2Xn6icq8atuWiYgdMlUiKST2eUsx+Jkyjxmj55EsXvM9vfz4HWSNJHzl/qD4c/vHjbTfphLl9ORzKQHOKVlWszxyZmDXm2wwGvJbnea4Mm26Fr4bCVOPi3UNyUHNIo1aiK/0R8RA6KxknKKHPMaDSpq8FU//SEH41U/P2JlNz1TiN6jk/ejdeIRQFYsZo0PJXnFSCAhyqGSK2QkPZR2q7yXOh3TRXeY2Gj4AgHgfm0QQIM7ELIzzoUDV18ezQYnyBfuY4ftYwwvRYDHK6drUJpq8rlIrk/WozCPNBq9tw1OJFZ5uIbFzKIq9O/dhf2M5mipfhmGmmd/1vYg0o76BGkZ1UtAlxWPGCHFL0kZUuvWX1axaCxuS3Qsljl9WpHCAw/LQnK5VRmYSQ/R0yv4ahZ7/r9+OEIHhUAHPxqlqqrnBTQsSaGe/advTCu2AGV00sMFgbJVMywANc+PRTM5TUIjvAU7BfPd4fi67hEtqPzLKh0RkD2HnHYB8UHy/eEMmdzuveMNgjfWVNT8rC70c7IuGbhOtjqG8yUbKSXkZM8ZKTYsUZW5S/d4QwxM4S76K01bBzYacVjIOmad6v5jZok/cmtjDEd5ZRqhna0PJ2asOCcBPAGjXbtqfANHjGOq1yyMTfo0cbamZoqTZt4M3y9SodZw4hyBr1VM5+bHZmyQbqDdFHEO1Q19wq6y4QXXN4alnAK1emvpXkIgvJEGATf3oaix6g6hs/V8WK9XsB+29FXebixRuK6nttdxyJwebqB5e+Qtrc7PPSbz+PXL9qTn4ckk8rN8OseY2bp49LbCkspRHQbJH2GP28DZqf0VBOt/L/w2ct/csUpaRVrdpdow/E4K0uhOuYNPw4ZftX8QjK2A61tMO3+hHqMIXMkpiOoLFoFZrFjCKYti5ZCwzL9g/HXaUg+LGPT1ALUUSCxdQDme+1MDcC0OhU5E56mbxfUD86TCoFeyNXbzNQkuEQ/lxkOKPxc+Vj8PyPZM5PLp2SAN9AX9tTq9sGTkbKwu06f8Fsq8vZf+PIGJ6F74ZhdAQifAGwxO3fEBfO4fJi8kHPvUrfmyTR/kCIRH06Aeqy2s67r9ju+KRT+HaWYWa7usZg5brwNoscDxoHRaLiRKVKK5mAufKTcqC8wTNB5VrVC/iM6LwiyeWvIs4vyKODNchgtJzxLcC46tfk3CKElQmHlA2sS7zwkyU70AMutM5rwAhC+foU7Ru1w8njfqFxovKGqc4iYbjzoyGKrlsqEjJ2zhUOqCl6V82OuFW8W+H0BnCZ6QmifIUGy7ueJZwdhM7R/mRokt+YUTo38c8w0w/6YwceuMX5k4A/R6z+lo51L0Kj2wD7oEenHj4y0aIfB2L74HUjfRmh1jIWFRHWHjLc3ZSgbL5fZa8IJ508MzLsCACYLh2H+KZtnOSH/XUR1WaaOajzGBZravHuLVH58qapUAo0HBRBGcK+ZC2KSqUAdVwVYa3QIKWrjglHhiIThwMLCm+keL1PncTqnE229pfSvq2JKZFQzC5Q6MuSQFzDWDc/XhpaEBPRaomRnyZuJTVxa9WQUHfiwk3xnPRTv3C8BewF4eMKnMG5tAYTBqXNQDGQMWoKt5Z0dBVMZLCtamqZnnyCtt+HEvoD+KcLic6o3uM+BVd6gsRpR9C5hypxnFoLeAIdtwaKPw9VEWH4zwCtBYsK6KK8lrG+Xa2UM1BmpKGurGOIb2o8Vmvq/j+LWKp48xMc8FtyyhgOLiPSmttDjGPMcPSr1G3qugkifJ+nd+u0TOTLTrjdFAiBqhU7WFnL6Y31x1+8q4kMyvWp5iJA7R99j2vTwif28tYochC4eXSMUC9ai2j3aMXIioYJOcsNpsQ21chyybXnsdgq+w2By06CSCo50WwO2LVcHN5jOPWMtAsjyYGDdEdzdUJpwvwMgbno9KEBGFvhiUfETetjnFa6ZA9S0cm3/B5omjmqCcrvmHjw0A5S0nrVt0gGnNNhF6lzriHKfCpx56aC//kqJ5WGl1nYzZXm6LphPYQkm27SS6t8peHfGOvV6Siz2MPamqHeVIH1cBtv4NdRoN2gSUkdP+PRANNw1lKjyiu5oOUYQ5t4yo3X7eqi0rV+kcBamKjELR4Aaqu2zDSEfhJOZqhiehX1TQI95WNhEgdIe/PrVeydA6RHWG9mNOD1DzyLe8B42H4sHRVmkFvAfAQwDNoma4hRxPAvvByeRRVZoo0M6ys6Obz9NOjC3WH8w+x4VeO0EVwpF7eZDL3iGpb3kpp4mTaaQ6VGy8CCsG3LtoXUHEQLkrTYrELWwvYMr+OeS+PJ4z4ZHNpt5oTlBLCJsyQBWbDOOQqATTpsdAhOdYZ3y/P+AtrGlBpXibDV4N1PNa8+jRhJBj4Y7DX3HNPim2G5uOw6tT/n8VXvaSSFnhUw6k98vE3x/0GgyEtzjbxP9nYhLEonfbicytR/yuhREe968+8KtHjsqiXPGLiiM6nkyZBQa7KbdCPNbWVniJBZuZyKkP+VnTu+CqwWr3bLr+Zza9SyvfariPmeNRv9hJtb/gaYBG8I5H3T1v13fAs9jq9JbLCqvsYQTuWc+uEAM8a1omTZew4qgJUGZd9fYB6Sh7mIKrOoR95B2U5axp/pjih63GiccGyPg4h9Xh7Y18PtXI8XBJgd9Dp5UzPst+QaPsP/CAVioPVnBJB8B1tiHNtWzN/9zpQ6ASp36cOdGADjHkto7C8j1qaERJENFDHSaVirqatx8w3Kr9n9xdXJogm/fYmEtpoIovNLlk8lMiD3ubm9ocFKvoWqgeECNRIS9V8AN0MaDg4jP5f/lmbdEdBhd2VTBci6FSQl8TotH6vgLHbHvifL6rL8E9drSD6uQpyNmy4afDaDxLUChsdGD7wMZ1lz3UGDAs9mtr5/Mu4GRFny0KrPKHKUIjaZpFSqLt4BTTil4nR0vKRbZhYqMezuVTlzVmsDzliclayCiwYDSghw3u/TMbUs42kCSVH3NBLBdbvPcK2uhwz1TN/M6vPN7PkyJUSpBn3UqS5HawP1Y2HPHWG6cdEmzm8lHX1bpY7X3XLWD6MBG7dT5ophZP879lkpqr3Wrp3WimfHUn7W+WYF7rissdMZF3NRWH53e4Da3GnbKxKLb+5+SQO/8oI3f8LaYYBqEc4PZvw2tlpq3v6PKXqP3bKtA7JdME5DxGwmokdF4h/B0KNgsjhCM7QZFo8et36Al27lACVPklMEFqhUmzcfEKq4WOXVAMF1bKF4XY3BtF/KOA1qcefHkQ1EVGk2u33I4saQu2vPCFrHomXz7pwQtFkbl/OwZ53xw/v6f7BjSdCkAmei3fyk1vb+9rSdExq+3V3HY7STTDT3n5KDmtlXzvjLHS35y9Fe34vSJqK2sfivfYV3UHZNUP0Laz4NIawP1rBjRGHUM5LK5NV1ZrJFpwv+/KnsK6C67oOu15O+zNJs+ZGPuWoQ7fMN/yPt9D8+QZoHCsWOCwfud5DzhEFeI7ScNfZKeCzXPWXqffQaCGzS8nvk2uLVrcfsf015se3GhOGxid0AIjm8RWZ2aDwInjWIyp6jTsfk+UrF5ii8VEv/pFlwQswVpuOQvmRNfxy4bo4mlS76ymLpfN1+OBVr7BnTvo6SNdd/ypQK1OFR0Fwg4CUWVlO9AzQ7TPwKi9xPM3GOQPJAEIqPAt7Y2qmvpcYkB4FjBT58neHuh16FAB+qCR+ITxM9/GvgrdJH6WxeH7Lwd3SE9GWq+ISEv5wBdHs3Vp2N8cFuX+DifBRebomHPTuSf1arL+BfbOEQNGgbhZONEhaN+KZxYF12vmUAf35NX/6CY4rZFp1S8JygjmvP+0vODsovd6o/kcJP7T6TQ/F8OeA1ppWCRM5WCcz+nUGPWBOplCn9sEVqnSyQ+3/MsRUyPghvE9PvMLAlzl8IhxyeoBxr+BiGb+KoL6YUL1023uqgWxKDe2hqOy1m/3zo7yKqjBzVnSWX2TlTm9qt4XwJxJ3JkHvjeVUCckWKPNaBi66DKdF8ZfoiQNS3lsvK8x3K2puFrOTS16jKo1+qm5vx/NUshy5jWoJyik0NbTO18blVYN5Uin6IcCCZ9p+0onqyNKlXDHVgS/ibqBXZCE1G9TY0m9SVoXEoFDIC/zq+bfArMqHJnJy4KvRJqxd/COwwuGkebo5tNIGm0eFPg6FTsfxmYyEnhUNuLHsRgc/5/nUfyUjjUkr+uZYJv+dMqBEo4tHJGBhZXKT/zj8zDgnbWKz0ToVhEnKFjX2SOJmcNXTGodjoovNbJYCvk6VQygC3uEzFLfrGejuGKO+PmlqqZ2ZZkts7yKbPKxaGw+1svmS3ZCXCUIMaho2XDvCE4F+eJH/mMzcneb0+V7K0u9I4jACPJPeh/ESi8eImbRzUm2gWccY+GsGmgyYPjY5LPA7V5QAEXiluKZ+BdZHcJhKehW1A6zIKbxaPN+9KfOdIMvOyBoopq84P5xadf1g5nigik4kuPzCDEoRBzjz+0NFzShOCG5fNlrTjJaZFK1WJKIG+JImDmlZ+m1FDHkTfwci1zfER2h5Ocso8P55VcDq/x3MWO7E+KiHYcQMRlgyz+sUSKZxMr3BBZ5zUXlk5qd58PwpC75PfrqU19jOp8L7AZv03oQ/bhrXBLfl4e+f8xdDtC9X9AXhAbOPhlvCKJXL+f3zorcyTNuAyF9ETfcO6+U9PG3i1yMa/4OukjEqo0FsvhEq4Phm5wY8SA0O52dVcX789GxjfZBokEQY7u1qR+nUcn5Lki0jPhOc+vYtNHAHUSBPGId9LHIhT9cSlyrnvptRVj/xS/h+YGEufA5ZMeV3VanwURsg48cB1iWX3zAoUOUA9e1ATZd3wa/QycOYMewNUsftrpApywCUc6f/l/q+vk7YQ4bfjphi4sxlp9bVdOwkFlNM0uUKdz0+oL3jyjwQRUYtqfxIxiiAPKhOqXMItgWFXnEo6zwigj92EPM/fe2CB52n6DKhk1AC8UxxBLNx1A1R0ngL9606nTYZnp+E5Tjk+qYusE/eObeYWFjlKPZFvdOx0U2vDYQpfHSlEGDetsAIj6SvWe/fxCh8fcwF7OI8sOHOARZGScamcnNujlMj8X1UxPBlZyl+GIUhnbLW0Mj6pEsMOpajd1wrhdBnbOs5nR9FqtxmqqjKsOk9SA+P+yewuK3MEcLjMMZIvkEmUIK5Vqbg/lny9j5bZ0oTsAQ7Z6OwzC9ScdsBm2UELpNKejZ72/k9vYfa9gTTcoZqMQyMzfQz/uEaARJe2y9OHljkfGR3jVOj9FW42kOXI9QGCbqApdHn5HmxySA3PX0g3r1l6uifW0iWwS3wsIEYRXnkHxM2+hJ0KhlqiELiMjMNvHBwUAB/xX4W5l7ywzsMSjIr/uneHafs//L+dWdNxDIxchHPw+SDD+TQRgx1kHZjbdOjgIfL1ZKH4TGhV5N2xhXITSkDBbbA7qtM1LnhNSO/ii/t1rgh9LtRou5MuIEYH038sThHYRYwClZdKNTlYUE9gzcAxouObogr/wQG5ii3PqN0pX9tYW3er653gGL0aK4229AyvTL3uBeVGwtmdywGuaz8BLQVqp7kHjUyg8rRb6PJM3JFvirc4XXVQyD9/qO+5BUxqVH3lC3ydYr1PIw9GfdO4R6W0uMkTpSF0AYteEZB/nXP8aJgJbTAsPlF+ToV8m+RoIDBudIKlhrGFjP9iACJT3eV4BwJXkQTx+Mgoag05e/r1s3aWLoFoBhjMmCOCFZXzMssuADwFBnHdfl6JWm5Zd6DTbq5TpEg4PgCHx5q84GxevizR0o/7jJibLlSzVDlHfDJtQwAC/+LxmgzgRdRwumxNkqeeJ8hAJQp2GriLh1T86G4qEcdSSi5ABJpYeFEq25ePj9/tElmTwN6JIHG0tYuSj/632s6lojObkwFPEA49nYPzC0yAtffIhjhnCPoESvm6+KLBCYl7/plOEJL02drWKT5Tiu86gAfInifuArBctIYvi2WQ+tMSLebcbkRgPRCaJsJ1/z8KzDH4k50S1iOGLD7nrjO9hAqTmATs7jWfg21we4Cn8KC6e8+ksPGpMpvVXxYZDEuchVY35pOc4a+/bEI+u1g3uCwyTo3vrPG9BWCbT/nwH4zMRdifbIdddInr2746zod5L3/MrrXat97DuAKuB5Mrz7sH3jp/CJ/cj3X/EwpMIFAMha93Xv+sO0J3+SkP4CdwYEYJX5cPGZ2hO/th3AIqAOAFgCaEADdYABDcwEGNDAet7iXKbTFQz1RlENvPNV3urcN8LPy93O9jqHxLJkn2oA5cU4Zof9SzfZenxX/floWI7fUbVUmJJ6bbPpzPUGSJO3b+qZdipueejyIrF7Eh8M+qb+F5er3ehiNgqTYIelqwBz1JFVZL8osTiFCjPTXAzchYzbKWpiJQB0oE5p5G7Pakmd/s99/UYK0nF6ZReacvHJ3RTmY2Gh8ZVpKks4qMEq+4cGYsvTl2EEb5d8BKss6Xqy6EZNd94TLbfGOBAEabZNxAAPy5Y7IfzhTW7caFtJpDWXBWEGJVwiNMkhIdM8G9Pe7L50/4gdtzcrIKI7P7al4ucWLZ3UQVrgdE/obHkkIZGMSawfMGPs1yPMG/mz3CgpuQw3HT1l8cO4XuTcE0S8IkNFz6uVchSlKr45ZYopkFz9b9IwGVPCv7vN6ddVZhj7fmU+xGS8RSN3Wh7xaOn2PtJ/QeTCbPqDdK8MOdZMCJLt0cNA09YMF0ddaJG1LOsNRbwN4qHB8Xt7R5TlbpTuWQgrqrkDkLOw8DLHpTHuFqLqg9HfSgeuLNtrKe5eY+cwMdRFjgP4/qPjCDg+RHDqsM77mYrrbAzqT1yjMVfwTJTvZURM0usoXAT5S6h0PuqweSlQlwWMsKTRwGGWRHXoOzmVdKsVVgozhORicsAWc0BiINwXYUibrHIh3K/gc1jALdJQE1PTLkjC8y+1E5anrTI7T01YfjLaIq9vtjr7vCi1TBDY93Nmu33HJbRiuaf74vftq8dJGTVwOFU3nPgDEWjPGm5otMypK5TEBFIwVZQnhq1PWAk+rnwFOEYT3mM3WXEhtp1JSVGFtnhiUAzD1ZgGXBdfH5XQ37qnn8DJgtjTcMQlHpq7zvxYmc/8z/oBGUDSongiu2A/+daBvEg0Z9wKkOZNCU9N1tp3aTwLfeDNl0yhBDoLdLGUi0Du2Mb19dZBQcYufzdMOZkE3BBz3d5XopBcqNZRvnrElL2LbCfC/oQNv/jG/vQgzKGY6SUsqBelG61sn/m3zvxbZ/4lr4BPlliSdjkNhu7JVTMtM9hYvfMZANXynC/Z57fZu1ce1qYXflV//FA0zNFuZNB0rp9DR8jkNIzWCTixI/WZkkca+lMxhasKVssICOuL6YRPIxqbA8BUMifXTVSR1EUnbpmfqx2mAuyS/XzNgX5CVtLGhRoh2S8zUf35WMVwBS6hnAs5ppsvrgT5IgJVnlwNFSSMjOk763BvNozGF4ALYV2gh57FcItut3bW+c4tBxSjdq3aXAbGkfPLG5eNoebX963ZEGMzGpSoiELABJ6vcHOhgEGCc7au7wzYmMEv8w633R4dJe63fqK8DdPKomN98a95+uaqRqQx6j64zAtfNkXGu0bdPi0p/LSZ3iJRTNQFabOZdp/Al72hZlfjApMtvjZ/OG3JsYfNLF8S0Xi1VWHfhVi4Ke6cu3eFTanMGMjF+EjzABfrjSOoQRK53U9AtKwnZdzqo1ltPciLOlA+FahH1pZ3WtaaPfuu83EECgb9cDn7rJiTFcy8LZxNOpcLzUGW/RKK2cACUzS6g8MTr1bqbBr13AUM9KJalL1r2QSLeNy7OPWyxLKeOki8gHgpH7Fbmf5kLHnWt1m+GHHCtxmxITO9RXSbHeMHUkzBFpijh+seGc9dXFSDVhSfqxX9c8HtmjLWwJliof1Fs0RTYz8ymxmnJum29cGaUR0ujsF4/q1T1je3LeMZ5UuuCSxoFQ7pWzm2fkANeT2mQW4e4TWMaeO3pwyDBxf5VZ9raPUDIFYGKnCIko9SPyQr7m1AbRQ3LknG5P2yJ00Lsh0QhOptVtB3uWl7ieJtMLRaqzmsejDoy0ZK+pAz02dU/k8RQ9VmeRoQU+k6l2LUgixXJ/YVKbPABwoy14gXmHzurB718O4XpLqgfDYz9oOyPPMhHl640/diHAmZNiht61EvQsK1+UsDPvJVKrm80HJLgHpxyvg8VG9xq1YaOEJNrxKK9l6dJIPsyuK0Cw42ZC1UFOUHEExOHE8f6OvQAb43dsu77866fUABrjRgHOW7Je+ef/+327G6aH0msJh8KDePlhM7jtYp0FeNH2txpH/GMhekIf1rkgiJuLsyYHk0TYMxY57oTKdjU/Inmsx3LkNoqnc/Z4/OEHFosy2PXVBHOgaskQBnycGpxEmJXV9Xg6GyRqbb+TY2eqHLW3RK21m73VkBcvZIbRI8vWXNq7beM2vYOLhQPLklDPF/RzUY8lIYYa4viK60KNrVcpcD7kCb66J4StJMn2g/2QD4c436RPYy36521SmOuAxCDmjbsi39btciulIBDCRhUCIRhZbplOsAj0eIveKPyLdZdAyaNtAnaTLLOsIlBj8v1aQeeWW2aeIlnRi2Tl2BhLfFpBuO8rSdnl2M7AQ7T4NQKUxVwpcj2qQ7kOINfITv11lzvMnoQA0mqNq8z6W0cLmdzpYGtHuyBNCrIFK4smn+gbPb3Q1ops8K8KkOGRyrp1pElB91yOGzkPji/HhxtuR8mJdsXQdaiYuxZvjnmaVt9Uf/Y7DTeD7KO6TPUo9/olB0BowMIpNQPXqfHykrzs+e89cFZqXi73hDoNcAUl2XyPk7Rbg7Q9+Lxbyae2/jeEgKPrTe6u2QNW0jLdQO/TsScf7K9d/RhoD/JAcwlO3bzx3ZVjf/WMrd1UUbzTX046pol7cv1oYW08J9Z0iFXEZTIu+H5dJlz1yHfHgDQnVVlbtm4VSnraZfnJGdovhrM3nJGt/2otGT4MbNeLryzvYAyk3DiAjLGyzQrnuAMD6IYFwl8A7v/AFigRK9v8ZSaQ/80Ew2iFHIcljnQ/XDMWQit4SP9430Z/PJkDWeUvn0x47yjmHp49b6oz/0qqZUBnwVlW2KhY+koO4TR/qAUsjYht6IbS3GrLgpH1Ujd27vUFAr3r1F9trEw+wiNyUYrMq+bWL1UzVmIllh7YH6/S3SHLxKaEVcgZ+F8MzWu8BVeA3hKrUDS2WvVL9rl1AG87ns0XGejfC4tWJeEYoppO71bhv8Sfjj5cLiHBSd6t+O0UREpvNB3SySB+er3FFixGj/C4pIabMjtWNq7dSHpjybQv6QMfX0dKdgDiL4b+QRT/gAYST2TGcFun7VsC9T/sHOamm2/yJiXJ0Pw+65ojBA2AznJa1xspcl5lVia2nGdIV1Fa2XStTIm5jbR+N07fVZKv1M2Z9fFXkYR3BvEDF+JAm+1voa6rq31adV3u95VpaunVN9jNZueWe1XnvH71h5TREs3Jg1djlF+avN895/DZ/FAHrGjXHuH1zS8G+24RJH/hxfNA7nPMU4wKP69TIyWedcZX9mteyHj9YKxuaNxx3M5qzOfpC3doaRjRJR0AY6TF4RUuy1AQi7d5DBqsMZ/DdQeWDAeIxqqWw56fIK5zH6r5usimIcwboW327CcScN+H549dlYqtN1PpuN6S/79gNVUvn6JapFW3CBn50fcULGDzF0LOq0ki0LHZPm1G5ieJH0xBzD0/mNYu7daOf2dKi+Iz2v4Fhu9TcTl9QD51hfSIdQLynymI0xpCpO1X41B2a87RDtVejVhlfByx8VTqq7RY+dPKTjStbkq7L/R9nL+YefPDUgpJFDpXdAIWZIhgc3yvdu3ctFEh/5cpxWxe8k3tPCh6N328f32m77Zvuvzyqv7kQhHukfyLxTQvODdPprXsV92u+29zxll/LGAEU8xZ0mfimfvTCzzgnEpSHzAcHW0R2nUprPjkm8soq3RCShidWKlBSKRcnb27XErLIeaT9C7Am8VX5ewf50Fs+9XXBjrZmbYNQvkeFhzHxMAkYmDVIPEsljPpZHKlKLZcWdjhf7U79Tc/PKtrukrxkslwF+6ur+h+K+tD4wUPfbB/FO/53Amxt3pAhXsrroiYb7YKT9y4+1s82HLgDVxvJFIHadb58SCBdsOdF0tbofQm0P9n6gl5q1hfHNhBWHaljUm6D7XQuHWRxW845lWBOg1pnfha18dQp73Lyw3b7PcxqHK0cj6YdcsLLC4OebwQjy/c9xq6tr/867LnzLwLOvsc7z9KFBh4pgiwIFIlluROHCle3TTF9d0u4X5641NjUc0vZJYoVeC6zOewjMx+ULDCBQDxjxqeAxWYsTJ/p9YCFA1U6hEAXJ3oBLdF+f5UegX1VyojjqB6fkCbr+fVGxviURrd6iD0RZwxON5SzQmuWqE3JzjiFJ+hI+EBJt3dL35wP69yBumerrGwournFwcOJHRWVVhNsmZFgRxsrfE3zJg2OEdJw4gAfIyzjwIQQw7Z71XHzBAwdY8Pw9JTPHvvZihnf1OSot97ng+xKJI3sCZu75rtTWXpMFP27fvYsaM3uq4AxzdbmqfnbE1fPHtlLx4bQHpdtunR9VsuLhaeVIif3dpaiPLcztN5iMlTrcHvK3jawICK3dZNJ+XG2n/tpRMqvvaUEpmm+9wkEab+E4W0t6pwMW87T4hCm1i7v45ZRU7cXO7ito7t2q8djUZDFpr+7+AZDzLYxebvEF6U+WkwIG/FYNAJJl3HAq+Tqie0GywnVvvHvpE+cT6VoGkjzsH42Pf9cGap9sSffLKFzYjJf64VdOn1TnTWhztIy9DnqfWOBiqc/6/pvyLVPZjflCQXQUufbnYkn6j8W9Hky+6QRtaWiKePLnI/CYfHce2R0d2K/nLK8Zg/L9IGfWNLKAr6srZyHXP7o3wA2mnOvszw9lLkAypiZR7J/edDOFZrlbKTzJ4lMZ80PqME5OQUDDYWwCCBKOQZu90RRKjP469B9YZsz/AhImy4Klyd6MEsXuNgDueGz6oM26fA36Jra10he1osALGS8ksywi8fmn+BgERfL/C7MoiQaPxBUyCoKe6SUV1Fbl0KtGSl7P9GUgwi4h84BQU9JRIgtjEOYwXBlmssWIeFgs8GBgGh1Xy64md7tw8UFjJJU2rFQO84H3G2fFey7k1kh9eTexRWelz3MZVfkgg+su5Bfai5Y251veLTyiS8BY+5uuZLfs68hYRLRDiSqLfafgxWpN1X7OQyuuS0Jc/qTKbJi7dq5vmYeyf5npfrbPMb2erXzGsy6by4hv2rWokP2kysx/7Mj1xh72fSnfuNskXQFtqBJ6gTt9QVuypEWzVs/kH++OVdO0Bjh4OEminUFGSLqzQjLs7BM52jK+/WWZXHv9//bXQEq3OpPo1u2b6E+AnIacAUe8MCdfUcN8phT/sIm9Vi2n6p/r9zeh4qg/YrxEhdxXggXWo/DMhdZU9ShRZBQBctx64wKxzYNGkfLJdHhbo+3zUDl67fePCuB/3p56ZOr21PdzeGFkGSqJOmAEqGNcaj1pKUL0IJ2bqfehdriyLHgQ4tu3llXFwwZh7tM1Nb3RDI1Xv7mfh6Pf2E6qXLZ4glKrHd9spxFhRnqm+mrE/BP1Ob1d+Qw++OSnbWztT0WjuxjiBsEMBHxjP7AnVYikuClKzDrxUnqoy5UXdzp3ZEMjbsVLXt51Tup2hYdJbQBAz5Mkjiydl4eRFdw9wRz8btzX4TtMeuS4+rOvq33YlF4Ka13/vz4M9cfR1Wr8pfi+8pMveEQ4xXsSSnvrccQsCLbnz7jvfB5zJJ5B8h6rY5kHQKD/1KMUVZIdoAs+ZezggSrMOe+s87zn8sx2+Hdsr0UKsMA7JgT47MPxZvUk9wsAWuMCiDeAvNR6PLwJpYR7hYJMFiuk3u4uxXxPqQK+d1qK/i4gr0V3+eJ71Y+O4hd3pQJRdJhuoy4K+Cefar/J+JjWzfLbQorarPsm4/CZ+/HgW4u+jGD2r71XOcCimxsLPZ7c+mwjoJPJOcA7r2c3hNnZnvxxhxp73wFKHF4cgItAt14IF9198TKzYm/d+Ft60micbljhy3QGqedQBtqX6Lq6NrMdgE8yezdni36OTl0t1GpXq+Li+UzDsB4aPBgypajJUSr5oL+ypdhM7S3s80XGi4ebMPaWGCGA2LgkEDQrELAZ2Lr6HyOCxyRgt7FggK7+hgM0JLk6IkoRbGLhsLU1ioIvl2oJDYtiuDYZ9kSHitrvGGLIE8VqzmsxV768PMcie4n6xsUbidkTV6AOWqgKWCZClQp9hu4ca9yDFgnJqG6/MTvgLV2f/Ycjw794dE5U8Fh5vrQ4iVAEQzO4ewfXqCK2k0w9FJiOQc8Q6u5y7S2E2dh92e25C7afh3o8Rbtdh/NreF+7mb0H4SzY6Pk93n3+uudMDMCCzCXh+sPwgapxViDuTlxPir7JGwRwGRaTZxJMYu0FxCGe9TxqnyT/ZQ8Q/kiTF3/QlHdLIUiZyVA9OC5trRRbDwsIvJCDDmm3qQr2aolz8u52yipSv26a2UYsKFpAwHMg/zI3Xcb1mhTGWKVvmUMnRzJfX5ayBSF/DYyNj17b0VDNOyvuv6lFYu2aot9FmJ7trr0ILBiXmJq0Cnz5gmZtBlw2aNkl5kv/Q7sKMV7RYWFgF30Ymn1dlMHA78o5LBTso9hrzw8F+ZKrG8zEdKFGzYacvPQnPfYXpBeaptnW2XVj04jrrAKgzdazxfRehGBcfG3qCJq/bboe3so3vpvOAv7oAsHE7/30qizPwn9KXiK2eZkMR4SG/qkBIuadT8o/AVfpBbxr7VYO/mvtdYj1Ieo1P+inYwJ4zTuJmeC95rkk1+i95q+PlbEMXMvCvsaO1Wvei+m28zfwIC/KBCnE3v274E9z6qTy/n54zNENYuWqPy17B4yr/zJ3PQj/q/z1t4rzwrG9+t9u/ZdD+KpLl5LM1flO/kl6Tq8Q++r7+xvup80HWCIAS9xdDhPzNJt64OpHm+o03OE4HiyjXU/i6no38yQv/IHONZy+JntNZ3lx2XKOK4I4YFzDRXokb7mMJhIxeLdd7dL0+LHD/2LczSm3B4bwXP0foW3vX0QWV18lW3v15+oTeWKWu3tCxNxbln5hsck62tYvrGyuCDgPb3wPuK/FzvIqIBC4Npfl1t3WmFnW38kDErWRwbUFAesv+K7pLtslu9VAUph2+w1ISRuAa9nUB8NuEVu0MhhivVriqnQzMOoT3uYmmmRrm7L4PB+XRcz20xxdqgH5x0U0NIEUNRC8ck+PGJlWQApUrsJ4xJ2GARnCVxE8VU8BeAPwKYXRXSQyQAkErrSk2xY5AqQYedkWup2RQoAKoSvd05Zr/HKYeLHEOz07nF75oCZ2UaF1XYBsutNRI22txckae/78PuNaW43AeM3/69AcLGyvsd4ZBEG9hhM79si0hO5iCUb60I34Q6cz1kY0UBq49U0MdAbhB5iEeHp9QpLqFJG8csAggKYekrGbAS+whcFF1SpXcmAjP+gIbEQDHXrl19AjwpD3BuA1+rDig54eHDkWmh/zEK4QD6tOQ18otbDXLqTHKQ6A72MaP21If+4D320GApbqURAlM3CCc945B01GyExKoXDOwSoAnBKsIvACyr0IMDRAZNuSjfXPH1LpR+FiOt4ccypVrZ0IDFHnKm2a35RL+kiKdVu6wTjgaw8v/z2nM7BPrSZ72WmYiLJrUvjbMu3vvToHKcgAokxw7xrXs9VKHU1dpfPYYBAWkfTgK4jEBwNcScKP0APw4NFD6R5vCSAikg480dGHDFBysPs0iTDuqAFEmaAtvqERQ0cknRBtsjsLheepL0idVnrwXYYgAUkP/aSs36FZWD3jXpMPDywgyav9H9eE4YoOqYZdL2cThGdhdfBioiIMkkQMwuu77mTjFzLAyau2UCIEURGtJI91B5JCR68OrB3/JSuLkMscsYTeG00jUIlD6iHa8PdZpQ7oAJ0Y/KH7YVlYfX/9Kfpub5UBvhTotc5HgpU7ZMku/CyI+CQJkUXUQXMYmYEicgi+pJSIcpmXoxaHTOOFDKIjWkFJc6KZCytzJJXOt166tT4USBEi4aR8vz9bp7Fs/Yace6Jxo5J+mCz5PYe7Bi/TLK7m7q7+ZagvbEc7+2OI2NTa+jRyHf+Gt7+z/fy/yYHkAJRg5rL3G6x+MW4/J19M2nuKsDBnm4l0KE0cRib3WzQsvfZunIAb3m/Dub+UnYP6HLMWdrdqvajFsJH0PRHBGo3udYvkRChPgfAJ4nkYecv+W0LQxKCN3qExqIO3FNpdhy+GBOeKhV6MmV2I+tGuEy8XQNa0uOZ1cvxnORV5T6MQ3salnN/uYmNGmtpLzCV/KG+kXHBzQPzkkv7ugOZazqFIxxyBiwMS16EvwZpiu47PDjK0deIgQXtQT5dMs4s/A9r61b8XXdH1Ca8Ucrl6SvQTb9j5jtmZOU16W7ffDoew4Ok7MuF/CBXn9Ie40nP8IW65WlybDeIQnQRRCO/DHO78HTZAhCkJOCTN82SfTQ9PMI+d6BpiYmEmO/dMgsK61zNBAyMMLtiIB6MBS2zIAa1lUjNqiJI8SHn9gQw74tlp2GMhqU1PlEoQjQLphLhZAFcAnl4/HpHe5UxhcwYeMlL3vfOZDjbWSCOpG2yZrH2yVYYaXipULGiwnLuaE56Sphi+vx/i1jgZOaguHh2yuC2KPFKgOcwFwas1bWsuDXHSQRbziYscwCqIl6leVjhh8ZyvJNn+OAvKSinwQE3ZopyWPODBr37YtwNl7U4Vk/yzu+k5Wm/l3dn4veL2t99nk1QqiprFFQkAY9b3v4q7fua2Rojx74qy5Vw2duJCINlYkypkfGm98SMzPq6Cuh5cVHdKlv7sOsnDcego04lvRdwWtPpUwYOft86qaMG0X1AgLHXOsBJCN4iuqDwhxgz2Ja75EwCd72meDTve7SDWulazQMNOAvI0GdXGFo6VfJJRJEtnGp/ZRdbTsEWwKufWTZsFGnZBUDoxK2De2RmrdFQqsFo96WMwky2FdTG09kEOpC79DEudA5qoRucWB/9hB78+v+ZI+gobhHF1mQX1RaYG25IHSS9anxWDrSSrEm/GMgu2xMC1MNp7FcO6oMlmdFWBf1NxFdcXxZJq/ehBSAWZ1G0O/kz2JNNfXiGJtnrpE7/V5HU9S3zJr8JQX1cXa5M1Oj6Pb8RsTrKdGj8O9F+NFv1Voh6Vwl6zgDXcmYhFnEYkFqzpKLZwjb3Zsq6P2EtO4WuGCE5RZy4w3eLTTHEDiFn78ee37vvKrDPk8zbkVyPL9STxrrab6lQPCnJn34psCtjRHTpLg8VjaBa5eZBpc8+jahjA3u4bm63OvSMtQxP2Pba+he2d84XggADxcyyHbn9yTMAU4wYXPhTLj4Til3bMXBMDy1tfCxEbAMMNCqUbWCEDBXZSBsE1VbZB38ijr0q8KpcVITyHx+VCG+JSzugzh92QwN6SfRAEz9IdwtB62knNOqlGqI22bvx9WQ7PoHiopDFVLdf4SBnMMqaLUrfXC1ubvzRQD5h1SXeYrl1uwmb0jUbJB7/j9d7T9G1L+WAvFXu7fXGYY9f4m64r27pUuy4nZZG3T7PLNakkLW22yW/05Vqc1kZvjAXXphIodTP/5B0O2diQpUOlxmsAG7hvmyZBGSSoWu0qlcP4knYiRO9qOnKpMtqm+mecdwCiF1rYCr23xICgJKM0tktDvmMgMoGbGh2x3jHUUFqAlLy7HzJRW0QirAiEGNpM1BZ+WinqeMwVCsIsC0Q2FmKylRjQj//2QTge+pCkY2cKzsBSYBolPiZe08oJEHc8Bj/RVAmDbeAhWOANqaK1SDHevPzv7oMIvgOQikJ/UR/+GA0nA8WWAiAvrG7eZbOPSmmKUVAJgJCCNTM21GrY8fa/oQRhoHZZC0uxFtuArSMtGT4LqlXPSaSxHJ8HPv5oAg1NTmBH0xEhe3OFa1jGCn9jAMdU6EPF2dnCi6GJ44BsVABBQO2ThNsAQKTxhJR9r9tCMiAtYi5HOkQUkAOA3a/CigCo9r7/MaSGgnWGOEvKPAjmUeJ2bmPV3GDPu2TBkpPpkKmELJaJEeOpaKuqwIAx2AHSy6fOvcYUeYwtMonZ+2g598Nyzirisi/AUwOWeY+nn8UyzxjPjoZCSV6w04A+epYAnL7GZknlCQe08gIS5A/nKKGFIrUXwFmsj/w+2Tmu+gCA2RlHsLwOJazf1VB0kC8GDMI2Ce265LnGUg5FpuIfEACCwKTvQecMR3R8Zfi2HC6gEUGhQOuhxZ5OH5Rr6T1wbimEyg7BZ/U3+b8tYW/HPEht/UXILZCwReX0lBL7ZsQ3Pykn8GfqQfMYPN+RjPrEsH7ysouUcY0N+VC6MhtbH9whFgyK1jUnT/1beBziPBKQ3pTdy8k118k2IPiLubQJoi9bvRXhXFkDGF41H3VV+9WS9S/rSSsplHb+qkSh3xeetXI0L0SeCs5BDrsCWxD9sziDM3wUEMw7hVrtePY5gJxN1LfyGV9kAwRje/H+2fTgh7VMn5dsiAQkif2HB1LRDiGkmjLknRpxWPi6tYda+KeVLU2JuG2omYbpR6JG8m2AO1RQyeJNuYg4dsqqFOWST3+CW2/FJ8F/03l1odXAevOdyn59HcxRk0Ss1ooq+PRvnQ3C2tJY41/oG9N8/IGH559F8OVKCKQ1xLIcIKAeD1QvgVdFK0I9AXpTvYCGqFTqrQQjMA5NLrCZb7GRYA7pFMHaqBWCiZS6p8AiEa+HEId1yBc2oVOMNpr4hrOfT11QIISQ3y/7bnXN1tehmXuLFHESHvYH61cESbenYBRPX5HCY3CPvEmzhTrtnFeaVHQ77gZv1XMMtdCtqnB6UGBJ8zDczdF+s7Xh5oTmyCHLnylx3VAsrprlI8+5/8EhJY34k2T15v6Fc/90LoG9FGlLng2+OSG7i0R17ZgT+bYMfbBu/zLatREul/3t9erWEtw2TJFXuh9BjXICyeCUohmTdVndSU8wDYIPm5BNVNvcMQo7uJg9U6JyQ22lhshTpTe7forJMhJ3DyBsRjhq3IFUMfFmvh1MO58AlpFtgMHoLYaOdkp0olZDzCadklV1RSDbQq/bmXVdKlHNyWZC7+kRrLsCBMFv6K0Bkm4WO8xa6dzfCETzctK6qlwDZyzSp+i7NG7jO9jfOeY2DthFtPCHrslDeROxKZKlMvIBe05f7D5Twuy5FVz+cGL0fTWfKHLO29Rj2qw6q5iaszmDEKIcQjcrOu8RprDK4NAj6bdFKHpP2bfggmCvEKaFHSLBW3Dh09LvYGSmdI896p3utQUOMAQPNoJ0D74pYwVUhu5rd5KnCgHuT0sS6BUyD6hEoF51IZUtBohT6mNOfTt+qUgRkYaUFFasHtKniqYXJ0c9slVnNwgA9V/aLdyjrtwSAgGggBeec0ay02/oKtdj7QGWG7SxByvKxa5oApoP/TiefeinBbmWJLj72SoDIluti7ZSmXzrO6nV54CYn0UHHAH02LaI7xGQdRlQ3j4mj1UwFH/iZWzN1NHR7yRM3SnMpW0Q3skX+D+2OH2Qsyr/+KCKKelv7+Zmn8sLxNZsNHBMgPkS0lM6G6sM+15xBp6ss12S5PbekpMDU7NTcpsejQgDkJ5HhqBcT93wOTwdF1xdVkl56cfEVeL8yeWhegcbggj4ycbs+vleYAgCesjo4HnsFkXB/f14ENviUHMuCpol/iB24BnubF+HwbTybV5vYB3ne/qpjkAg3fI93gcW5liOCB2Yb2Odg/UXdBj/B82SzmoXVk6RFJveV7LWk2Vc1sOJeekl/bqTRO7bDvfTi1xWqRUnOaR5/VBBGNfgp753cHei4kNTMbjB1kSBA6iMtaqLnmKZfnUhSTFtJEqsXlA9HBZ27vq1Qzeg3fAIoxqg/uKS5RfjtuVPEgcoDVQQmnIVmyhWxqhS/mD4gGJjTf/djLMwbMfqa4y/6TQgyUx1iYUMPFCqyejyI4LuUYdEnd/8L1j+O6eoAmwdCrdNlVpsxJ8s08Qc8Qehs6gu9Qg7b7umC6eIb9TbN1t8qj6/JuLa6y6EKgyfKV6YRFdALsysax+SYO1puX1i83j+Ndg9bbZGXe3u7rAZ//evKQWdC7EGvAHzWwRY7LY5peBPlXDAMYgSCetTwAHzVEJt4PVPHkcIomnf1nPYA1uhmQNFE2FkRAl8otwn8rKfwDdx0mlaSUWLuOanJiz1YytKzEj2yXayntKUKglcahKeXjUY7getsFb6hnfXCLLwS6RmCWym+WuIr4DppYsYE5v+vRu77/m+s2LMGGqRX52p1bT0LrEp3y5NlleXKaApewJexgxfRsE16lpagPkK6sBFiQHHUZ2Tvmsq5LSR6fJp6RDI4CzmJMBZl6XJ7jxdvL43sdWDFf2rGJ/JP2GBPHIXS0WTP08YoA2AUYNGR+DkIwwYQT82zRtbKrGmIpLejwfEtU0MLL3eF18j3KpULciBn8UqJeDoRvZ4FzCwGKH3pf/WNlQtYph9YRtKMeTwaQioPguNGmKNdJ8+pgSQgSCAMfBblFAJzMkHMNu/7tJBIQkLDFmV7IG3SYk/NMQz0pOmojhrmgQMEdHJv0bZS/s9qKKfM6c7xSqaYcrAinUTrYCA+IwO09fTLXniUMkxrKQST6TI3v7/yExvfRefpSS/uhQW4svFzg3+W9zzCrKu6/3SKeZR2g6LMkeI4Rz54cu40/qf5RfcbKIhO1wSe4HrgOBmd1Aw3p7aapn4cu7wFETK7CoXt9GYXVeqhdJUIRQGwBD86Z5UkgNp2oWENF3Z/AlDVc1pDtaP8Nd9Cb3LTSWdSZ7p9yXxgAWdRz1F6610QthkKVgEVSEfeSbldcXllSu3lm0Av/z2kMeXb7i/jzsjAAVGNTQZoPDHSH7ISCORGQWrcRjLncecw6561mZ+VwbXvePQ0qgPBTqFrRQWW5QrsizEW/BGahNr/oBzB8I/QWuGyoH5eaLNFS/chePk4Rb/6v939Hesost2jokPPlmZesOXEwP7WIzqOPdBNNtV4Y2vjttc6LSyxYbhNoBWm7h7eCO+wOO9/p1x7Z0M4sLV6V29qjl4JT7ukaLldGuB9Zj0nF18TEJLjbf9Wm/HUNjlSPOIY6oZ54RSwT8vB4nAMl1RinLASrth9YwaJQCDkf3VlXTmp9F6weTOTkIhWMghO6ByBbJufY6kRRJKX8AdAkE8kJVvE0d7S/gojina3d9mtjQm4vPOnenSGgD0MMSaPQIJlKpXH4xWH4qYyi2oEcGmV0+w3LGbVB9mXQzwM8U8OHRs70xOpaoH5aDKQdV4QFPspbPRAucg+H8GnGg/WGgHOv40FHTSUl+AumC7WsqFamhHSi9/q0r81pKGU1mvSpvLjnPdtGWaLqF8YCVmQ6yrmTemQmvTOkffcH/VIgDMYIRhp3RuELIY09lRxSkepm395tY/vSG5BHpRSMf2C2yqs/XBoLrGfeBab+wqQ2PoVi1OGieYVlqBGdBYX9XWNgB8BkDDP8nTMyxwYVO27dKRnc++iah7/LKzzgD7a+5hrrJbC/O9XrsL/DXybRxpuGvx9di9IW1N38v1irnm6udAz1KUTC1JUeEJXsNUbrgcm2pxlDxyTB2aOTnoqzNho92GlqE/JuWPKj18KcigEv3dgoMqzkUqRgpO6y2g7tIxOf/NLY9oqccMqhtxCdx9AeB03Z5nxPN0IeE6PwWKABR6ZRELkQjbooXite1VT79oF6JqIxzkx7WCjBQqpHBQNElVrXmjQKXhPDcBFiDiqyF6UnGEyqtQ85OC25UVoO60XeczbFZKEFhoIuCIqKzqzAvA/DstHqjNX1qBk9749vWV/0FrORorqcaUUFyacp9srzRYzTpp17w5z9Rp7hESocvNlwqqNvGt0V8zJ812eYUtJAK7dgq3a+cUULe9aYZFEy/HPs4p6j8qtcBw2YAljW5d0BxkJtnM7ZHq7JPAOLFZXgMntqZpGDPt2yoCwSV04KDTQXmF44fIeIKSZviLzOZ/6SI8iyOqSJ2hr3VEakn9iF4fxYi2x3lQxPvgmfH7NR/xQkWSSt7ySc1KAdMHHwtwkLWbKQX5dA/ywbbJkgiyZ4k2afZkLwGb2ZS0EdR+kaUC9DG/jGtx/ax7nujkUQguyh/ha3iHElFYcLZtOaTy7BeICyp/AA1kwE8oQ8s8eCz0WZIM38jKtnHquGui8uqXkaJHrNSNP73R2jzYaSvmLnPvLX8y+uQe/z1RZQn82BRl1uPQ2Id/Y+4fi4VNFf91hUrEEm7E6C3TLshOZdddxszV7+Wbutr0cYjpq0R9hnlSuDsULt3hLFknQA1Oq8UC73YtWOw5V2ltOAncU+B9C5T2xpWAkiv8gBWgGNQuhiDjfm6VDUIOQRNyIHXSwL6hroEcw7otiVxV9vaAeVeypWicQ87pJFuBz91Uhy8XeO3y9n0x3jZZUOqlxpUHQs4xsV1rF55789iF40Wb3kiYig4MpMmLj8JbjUlaEBsM8VNc5qOOJWDDlcKIrM7mQpR5jTixA6kGDhYe5CoMH2jfRIWHAQQ1Oh86V6g/s2pt9BFHOBrWP4qzKNSM34U/45RPBXBCcclGY0hV1UdxuEZO9MshrhHr8JXbv2op/xJS5mpyFA9BhBBzAg/IpXEO5Jkr28y04DRGOIgEeVoMxAETs93M+vEiZwAx5DUg4+YhCON2SlMlT4XvXNw8FJZoYjugRborjrkJLxltahlDJfdRkNIMga9T+i4uVBSQoIvL4EhFmR/QzolTCU9syfgkpssn0+wP/4rjoA2BllQRlKjcrYnru5yG99wPmabRqIs7DmRRTBVFlfutM3F42gZMoiCJN9TnLF0rKVP7isZnej436RINtRjNxWeemCJbfcDbsfZrDmCmtNZiU8t/NBTuahdQUbGZ8WhaXTql09kn9uxjPTidblEuKXz5oHddE/rCnGcUk+sMXpiDQnmtAVy+NIfN6uuIuE9WQKJN7wdgZys3rKGS3QgH1GBxMLxUdwPaBvzs3IztN9mzV9D8hxOQ+MhP7Af5mnPH1SxIdHW9SWyKBqBdXS5F5nx211N/wjG07okji+YRqTiqYpE28GN2Usd6BiZG783Si175fRKQlIstgtxBD0fIgahnIHdw/9vFpFvvPd36QGqtSY0u+w4Id+AVkWX4hNFmGUdCPjN557LvyzEYuwZzuH8XP4CHk3+vpReDadyBbPyPB7htQgKJxEIjCYIKyy7fnAdPwWfpoLPJgqb9fbDWeF/HMp2tNRn5zmkkF4op0aqR11M+8orvAg8j4xQQJ6N+p6kjSeJ3f4n5ouCWeZpGnaCEBF3NE0DTH9CnsOXVtBZKfNGpo/oS2SWC1JOkSFOvp0v3MzZWu54OTN7IQsOvPqiA3oOWE7rIyRMZC3Ly9QveqwGlpjbq8ARapqJyxD0JHBwpWgYHG6UwBl3+5q1HpztQnb2JEQonwb7pl8+kbK5VnAdyqLMOZZ2a2JKBGHmXazGeUYClHjSJY5E3zJNIRRa08feoshzRcAZaTPqVOhYla6ij6fWmJ3TmMhLeMkM2PHrKhNPtX0/P8LN6pj/dY79L0qiUSViAFCnv5J5XrEuS9c+QUILPt0nCfnbCRp0YYC457JLIw5Jf/rkJlQ07KdUpoMbOmSwBVjAI5Iwj69CbASKPEy9j0yXdIWtJRDJtZ5Nl+gZkq9YBEvNcTaxswqFyKFI+DBXW0TDBxYGNCBNFsicVSmtr8devIVcUTgOVdWjjSeRw2Aj7/rHXaQ8nAMZgE8Oo7WRNKpECBmaAwwMMbvA+yNuVSdttinUFzklPj7NalfZ5lcHCuStO6p67AIAkx1Y2eLyf+NfqrWP+18gUSEzKkLZnQuydnDFJuoeZxMPPgFi84DCuaLHadhYtkx+S8GutDGDQYtP7kasjEKiEZzPRK6ULYBJDqt7Vc80RVRuYGqtjjCCZ5x+yGYdB7Srm/lsYpRh1IyAbBW02ai9fgkQ7keQ83dRwTRoWibevC8D1g4ojlDYUhYY7tfYenDOutv1AoxeOHX5sHZjfn725cHd1K4Yqx6wrH4FsWru2cbS7BvCSe5Uaj+Kp3ztVizBQ1VrXQrXgL/xt8O6RyCRzEEVgT+69DvH1/zN3e7cpwjD657nfwc5jWGotRH2YZdupvtEtAYojLzMeu23Rca4rqfRyN0nOupHCaoZN/TS3CGhrgvJpOFrT/bGntcagGSsfX6P+wXm1G6f2clODuPdJ+9FQ6e6l+4xptK336MaLzgBon2Muond0SDCv2TEhOHhtuodxzfVEQI61EuJOrCk3PAjf8aDIikXkGKndtW7TuBtRqPjbvSKm+y7XHkNA6zakzomzPonNnXu1UXcsaDdqedlvP9mTSabv9/Rq+icv6vN0q7FLBnOHT5zJIoReyHovn8/ccnK1Teo2l8L5XFLnxp6wrhQK4KeGTWL9QLhPigcxi+u0rX9TnwKf6Apj+Nr/LXQn9X+mQuZz6XCq4BPTehwF60wdKXsm4/1O0dRh96RvP0wInWMO3tRN/YSzUFRmsT0btpo9zV1XTWzTOhBKOE+UAESEdoSmfqVcuFciVGiUavdDdMRPji9xPAFYiZSphZl+9lrkEL8f3LcSId+OHierpvgk60y6//2VBp7VLXaWjGImFRbDUeoZU73VFGrBS+tEYqPVVyvrNBDOOV4cCXnL9jyDx0SKKCF7tMFXOgdsHBIZejLrl8WF+QYfia/EQMoAn37erC6O9SMdmWz1yDo68P8UXRY5+BYYjsvfcheZXEP9GnX9grkIovgGYUW/cS48zFphU/3WT5SYU+x4OB6GeG479Q9iORaX3hWIarQx3YGpvq3bQ9LKyfbQvGo1liweFoePgFfi1Ompun55Xnz6onsf5KBZyscxSagtziCoomvl04d3j1IrcnRDxh/QF55/mqLAvnhQvno4OQsQL2zIn42zYgHa3VDILSexofSsugurfixgFDUbKeU6bMht1/eKh6/v+/GaBHrXRNiwviGJgBQb+o1oIp5h2pDpt0vGsL7vPyzs/diQB+DFhu4hRRzgg1LLFeph/6G0Nq+wz72AGxuZZMFoMPGSSm4jsRF5PJ2owCDbDBvQJPkB2oCnArD8Dj9c0fuxgVQqxSeRiJAZB354Bn3chw3kHI8I3oJnTdXAluSMCmiIvSI3GmvMRZ91CoQ5Hnz5iXbt7JfU7mh1kFDqmjqhHOoqnKQR52SC5nUk+Xpx+Sb33cvu809Uy25R2xBpPJNKjAaYS0kgzA6rdMBSjfRgTKn2Amcx/JapTnJ/kKoWMNe2Zo6aPo+U6P5H2y96t62nTNenr9cu63CFG8aWRDSpNvvqUhY4BdORC/p5F/C+pwn2coywX5zbctdZtCxHC9+qwhjlAeZ0Eyz/pDlXLBq4lAeOs1XPtci1NC+3BrTzJnVUspuVqP3/AMifewqVDyrrYBkJGh4pM7UepCCD2hh1xjaQAEz4H+uh1hMNCqnT36JPgdc4EtOTGI4jZQndrnnD23oytaMN4ER7Nm5i28o6UAsGz8yxNQAvM9sjg0ZCQ4hWjjaIrmhylGh66h6d3jHI5N9W/TjSk0QViuUKUMOIkA+DBaQnBYoZVzZOByNmhskt/kqw048124fQplrwCAviIJ2Vs2u3J1x30EGHD6N3fI4AFxviJrU2I4zLAfkWITWqMF1kX8vtERGpraFPFQoxAp9lhI4H25giLW9pFROvJROBDdKk6awRlqiWt4aCKuRxKvCTJ09/DTF9TYEHh6apJTbSEm80kA2fvw9vaj2O7T1zaO4UQHb2JjttIZnHNISVOJX3RrT0IkYrCrwvx31zVBmsIl1te+Ir3dm9pYD6ebPnDS1WoWUNn+LA158yr3SOrWNbMMObUT1Juprx1B8kAK6GsUEclIikDQt0BXh4KD/CE8pLGd39F67HZTVOCMWIgCzsN9ZYwsgD7vIDFP0Z8ic9XlxxAW85YurZMrRARj9799BYvtnf04V1rDHHpePie427zBpJQGYqyV2tP4Zl/yjpZMFUr73u2Lc+MXtBcpH86hQVSsVkBe4RAzXLTe1WvIBiqehe5EJrUzbhLm2dT5RRlbTMryHXW/1wTzbsMvQ6x7GnFIJAHd9BiFbsQ5iTKR2j5w+z78uZildJplJ6qYldEtPA2W08s7sW3FSr0IiMumKxE7h9wXOPQxby8pG/CAsRr0r6x8tO+By48MMHJ+dY2N1ELQznIDs2ls6XLJ4ufKxbBxGB3CSN/Ry1mJHBxrfb5WvpyfdLfc7crpf8csnZQetSR2BbhLIJ/lsrj00ei+iuzn9WCDMh4e/wd9u+17amWyauoDaYqgXLGBR4YbDDVu9Kc4D9RSZGLEweRq7mRFU5Nm6IR989mQ7QTKCqdkb93wQlaOhEzHHiIER8V2clnveqR5qV0q2MjfyaznQW3VPmW/izlyQIMuxWgyHvkMZEwOOpwoBIY/FJaSKR9aLUhbyw7QfCzUxO9CLDvZXHC6filr5A7ZKkKdA2LtzKVqp5Sa9b1bKNd1fu3oyGmAqW1fX6XO5L9CeO/fF3ZNRZkQwMtrHpYksKaiuXgaE38P3qkpmpf9r8L/aJh8bkY9iZm+MG731B1rnUF8Oze2UYBO7gJOCSM1l03LWICd+6ReuixgVNonQtTYBJdiHGnDu9O6H7HyxcHGXBAH3pk0Zc1ZJ6NiLymPvFNdvnSSw829S3LBiUuVQqiJy7PeZSlO0wcy+nAWIEaD3OGCpirruqHaFNMcI0/McVXWUNX4r3tFXyHidvpaU9JzEF7VJntaqrzKNa1zY9SpfDqRxg755znsovju7cl5QdaNYAHzUUFTTp/tZcX1CnRDcsvWoP6ajyxqaTT0Ge/v0VfM9nNPF5yNyKTjy0Y+mNvBE+UD6ZmKfLwA91HvP/F1ebVhVdSQRl03XN5080HCtkcFVCkHctPq7t8R2b8B4g4265Wp0URWoc635r4ALEcuigPH1Tyznxs6+i+mp6yQuREdZHwz3hDl/wgx55f/wg4ZB4r16siHTR3WZkE67yyivddDWXt0LG9iS0JaEpZxhUT78GntUXuCVG7IRvAv4woMgCnDbFZB0zBUkfRGRmO2Xys/utrHftAehidFIsh1lbHlqI1ByxYYKlmVEPMzUoOSVqN7XhwzisUs61ZgidQfPH+oKL7htt1oWsfmLlD+jQQiIqUlJcxstEkV8gF0GlQbo71tY0SnM9C02j2Beq4L5XOoVaAlqU6WyjOHtSC9cjSTmJ2ZDTs8IXtiGR0Dg231t6Awni1NlyLFIZ3j00S6sTQVO1e46qKux14qj5ystBP6fozxf0ljnAfBWlH5tdSD2mUNFWGvT8JG604z41YlpWZRaY83WHEXIFdLL4xTnaEbM4oTJ3OUvjDn4322WSyzNiv7YxqYOBCGDhXacDKyIc7q28VhInipsOI4xZEYLeJFflmdfnp2VL/QWauMC/dfrCF9hs6cjt3c8sXueYnqXmWIr8wl19dOWl548Ilb22jNsB6GmFHiwBptUXk7jGptZl0rQyYLQAJ/RwHly4tQzPCyM78rMF91qeoEPep17R0DAB9RXZnFvCiW0+kZVpeqHOM2S51HCtoOqcxKQ51zjEJgtabblRA5iKKZ3796SU5q9w56aex3F/9/B4+JAd3EMjvrx+fY3kH/LGwFPiBPZLdfEDcWbUktT1hQYdPLxyGvmlOUH3ByhWlqU6FvaSwL2rWjXjrytzt8yV/kN75aKSy0P1/2HHX62tlhO7hsGOXGms6aMcuUR9x2DcOkLb2sEQsYY1VpQlTHti7pd2j9ZhUC7gNj7F08Jk8vcWM8zf8uujQwHyt0Ejf49IN37gwN4JcEhv5qq/SxYQwMLQ/Nyp2auuN/8Oze2dkzCS+KjX5OIeyW1mKWItgcB+wMAAjJpnp4vdDhjPCLUsSXS+ECKHpSxaV8wxvcZXdxOlWrkuN3IT1qQjrP7gZXCVNuWw1yhDcXqP1izTmoKk7IeAbYnxNp4I8G5+e0a914PVdowmEaqgTyCZCXt7L+8DkWGUb/Td9TaMyrf7yZczvNPXa3Kz4TeXz72LYwPQGmbK6tJZSuu+SpIpzq7Kyf9cADxoVJXdDt3L/jR/9N5lAEPRPd177ypJMcLrfXDN2S1D7yM8vCBrqk+Ooz/8zWFoWgnHvRp9PlRZYxn2eMesoOROqw/Ywf1en8F08qYhLqccAqGlAZYlIXDGmPXm/8ThUyxYy3wRGHFtTtUnVlJWQdlCLVeu8TTFYaPd2/uTnrDYH6lbylcHJbWgBoV47T7p/bKdgLhNTdXGxpxcQeTY1Kt+xs7e31tbgYCX8pisjYZ3YD1HdxGKD7Zc2lFzDw/2o26EoYbssIdZdUPYHKT0D/FpyNSrU8h41JmmBL0LAGEqlZiuR2/s+ur7/VeZZKB7a/J07pPwXBlZeob+CdYunrk5Sfe676ZqT69tMnHbTEf4RpXf/BxKalb9e0y6gTt9eOAS++LBd8k5eEI55NiqUF/5/ac9ydnfOEvTL/2zScByuzq8AcCWWuhzT9FI+3CbIrsE18TQlbeoKY1Rv8Z0HNhyoq525Y0FBHKdUvfu3o/Kef8QWNlXdxEX3vVbAMxh1ZSbLcBRmnV0W1EU4zVBODj6cq73N0HEd7LAGmS52uCg+DaOj+zffYEUBAM9r4UhCRCo1wUHYrt9trV8OMHYrfiBub1PUBMeahUrly+ASA9fCkeCXZh66UQm5EmM5jAfARaYYanBFsAKFTCbHSaMsLBgZJa40e7Pr9zYS4lNpq5FI1uBoNPIuqRiGyEsHNP4zCMY5KKDP+kgVzDrJ5v+bj4MWsztd0tP1TFVF5ynOgC9poJEvSUXMATglKpy61S1OSoFeiwY5+onqVb9qKKchOtbwQBsW3Be6PuZSpUEcqURXaCIG1MK9HQ2Xwh/+rSKztxva6eTdyPmK8Irw0FbMgC24xG+SrhakJygFg3QZJMw2fFo2lBiX628ir2ancfUDwtQlhpYnBkpnrRW6wXiwY4SYm5zgy8YeNYSPLoK7VeoVRji5uWrZoNrwN8sJHb/7cQkmQtg8VreJVoRP2ot8TW5wO6FhiQ9a4AI4Eb/VPkDa+6V+00RhLYodEoKG7Ue5wcyXvUCv64M5GtFHczM1NuTh0rGScHJdF/6C7dlWGlm3UIi+A0Qy8vTe32zfyI35JzW9jilCpVgBiXSGTRhqfI77vd0kg0k58r5BSoVXq3CCjW6Gs2vaIueNev+du7T9Y91HwAlbI/JF5LFykXmuBD7KDotdbJl/YTqDKhnH7Gq6O0z0WSPRrac2u30ZUcE/gXBf8SkoV+bau+0EU0OZrmuHDitQ/a682TfDI8/NcdBRqd8TKTfeAVN9RCH9ht3fwrfIew6DxsrUMfFRJ32yPcavKuyYbHpYeZDCOx3A8ttb9Iu1kGJeHp3JGvJWVdmoTPrSKMPgFmW55mBzbqkXZp+Cu6JAKCd5LqodU93SZ+vlUgJLE6rwcfO3t2B+QEbQ9jMk0Ikmh9FKEOe1eS48olJGyZRR7hANnumnLGN2/01CHYYrSAr8cRNZRi5W358fyDBm06Sg6VWe8K9+FCEgiCp5W4FSHP4m8JjGOQu+sd2Zs0UqOi6P/Sv8+mDao90enj2caNDlnjdixbNzLI3HVhayA6Eg+ntJwTHZpquKG0Lb4Pj7qLMlJN5ersxriMHQVaUGrYa04g3ruFZMYR15Il1ixvH8Q0OQOendeO48odh20fBKc668F/Hc4ZFss8YfpY/9Y12o4f9PM3iyh957KQn3nrc6LVfwKiLzx9srW5j5yzZY8/H7CVcS2MZD0QVoyLuEM9TXZnJ0nQldPHZBZpAnaE82Vz27kpfpvng6uwCGoI2NKs41JdO4ElesU3Z9HaQkTX6/6rsTpDHiowDGyHZ2kGEQTwrH3ytW3bkg4NFEGfUshwL4s3jQ+8JUysBR28QzhCjIWXm9hP9YxQiKvPZKqeaH/vsJxk9MIUKEZ4qOd8Vp/Ytx2hFOBj3BRwUJL3I9smm1xEbprdT5LTTmGU9O+/tuceg0ucTYM1VUn2hqnRZrS3djDb03IHU1C9+hNk7ZP5+MqpS1/HE1Ts79J87K03uR1b9Mrc+dXuL4npqKSPiCxN/gAqXPJvUyVgZHFumq0ej1PTj9E1rXSg6F/2V+e7xtQW1zHfWdkg/58Z5qxS4UKBK+VlbggJuVs/BtK5O9QeE2jzQyFwYrx5QA+d91L3ZhODn0EEa1lIgPxO/v1PDhn2uVxdY1xC+wXH7VvzONaL5s2nsUgaD9vtWMrWGHTeb2A1fQ5LQzTshVWQi3Jhlb+fUkHAhbw5oblmmMC+8J6wzFTt2yqwBPewJRoN0lQtXsTqlrbJ9tXtJnmJFhZJdIWxp8UKQJjvxuT96XIBRFgxJ0ayavAHIHlb5YxYa6plEO4mvVtcafoNEkaQ7TL9OibZqpHS3L0/yyOaXLCgD9Dn3G1nlXfdC7vsoO25sT60G6hWNUHqvd0f1O768WBMI339VIz0PFZiN/g/rx7eot+PxCRyFHNsIlT5HKxI6mAiJm5bg92/cxQonMAigQpFo3+7ELaDXLanP9IX9z3x6CApBAP5hdv16D+qIAQ1rBfAe61qo1PuCi9VEyn+BqEeJCzcuaERCmIiAzEBWVwmyE48f7Eu4nseVLa/9I/os6QWmQyuqvl4DQuESgJM01uy93qkfXX4aMFmUtlr1kIloZjEqBVSO7V1Rw+d3RWp/BQcweLGjou7JsK9Ahgplzi/GZrApAOOB/eGmzIynnWecsBiPKOtOjWzXGHod1tas/u8redu2VADwANPtVaSb130xuaZjihQmaJGHdPLYheTaaGxsmY1L5MfOhCvyAPPWwblb6vYfZ/En3FmEiqnCM6B/d5GSAlKrn8JLnUX+VucuPyG1t9R7v2MaL1kGDs1S5NsqvWUun4AS1NL0Aa+uYz+3QQnpwfze8AzsLIrRnuvEXRHwE5J+H+56LmEauQOebU/AMYvPSsrIfthoCnPDyHgKHNdrXMaoi46XVBKFa7WHBfPoYUw88vrRX1aPLBLHDBa+pkaYGozCiK6oQeOHL5K2eLqQ1kYeFYnBUF0WFpuS3SIqS3QUqrHd2E8i9JdmUV1GHZc6zH9ENWCpgUTudM6gTJnuYJIbIby8Afr5Y/nU3R6jDHveyq6cS/hwhXA+SmU5ns8HjbC4PqZSii5LqcpRnZn/tZ8ccKyZe2RAWnByrWCkNtzo7YSJH4F8CVnjENBFKvUPX6Iq7q+ECKF1EjskNPtk9JVVnl8e40uFqv7SjD9F4icroPK/smSOUciXDQM34wKiNHmbNCSsnKOhKkTP8PSSKH3SW/ExC8pKnRa/1JjJO43+Jdq99k9d/llZctI4rO0sG7UYH416n8y0tqpXS9v7LJa/azRq2YSESDtROdFffnPDUC+gAjbAZZKzhrsD8wBo+Ln126i8VC6N+k+tuoYig/2Er2hZOctwM16Gjw0CDWR3rqyhQkXjE4h98X55MMwkDep9C6DyypV7rn1VBzgEZ5WYS94JAWOmIQdQvswoSDbsVNduH0SupQQcT0k/9W8+/FFZf9HaJIR0rQk2HlbWkG/YdYsDCN3DAoWM2EUhUZFSJJtIr8pal7Pg8kqokuB1Wy6gAKVUWyDh/Ub5GAcY/tDwztA/8rvQ8e5ao+52WASmlItmqikFnaf0CiK+SYRRwn1mXPL1Oy66wPirpoRK5sQSUD4NbuG9jnuRuSFujhCnGtKxRqS6XT4NvMyu2RgNzppAINSCCXd+h7wvqhr2QSadYHSzYPGdPqnEF7bN50YjRC2g3oiDRx1VYOmoAuENnVOEg6CxEIhOcOgu2J2n9eMldPEZKsElOUJoRTTBiMSRLhIijBwkkud6wVWnCLtZfNttDsv491M5kaTSn6JAIau3Y50ATklyO3wqgo/tqCPC+D59VEUgn6qs9d9P/5s1KQJyHmPKHO7VneAgcss1h7qIQQuKmEP9Yu5Nk5Zb1Dy/MfzQnGYzoa36f/bYm/Jqin7CIP/WBNLn7jvXnI7O39NOLRCCPIh9lIpIwrWqMwH/YW3Y2btgq5Y4XAFVONzjSVTl72RMxm+tN6PMXDp2hpnF3jQOd3k0rzqUUXcL2IYi3lnwZ61scTA0A/uGDTpwbsCpObQQKmz7kcHZ9oQ3JNZnvl5+lW0cpPUK67323/Up1v4gP3ILpipYhyG4IMs1a3+5s66IRM9ablZ8g00qfrHFUj8d9O17PQ9Kxp9kasvpfw4kHlDVF91zM9SkscptgZ986eUVhjsXHju4pic3/nKLDF9T3ZM/AEko1uQyG6nu894kY+dtSzgflTD0CIjnDSEpgc7gCKA6osaFR7nZcD5icj8UF1Lq+vyOdMRxsriLb3ZwL0SrYsCY+4mALTDLEqAjzkwtEUOOQ2sRmPsc8NRo7mtqNb5DtuMzKbHf1rEj7f5zii1NwFOc/A78h7wT3nVOZs9F2f2qx+pEFVJmepjvxh8i6wRREdaKKt118JZ178uUoAsf7+ZWf9+4K6+HLbDjLjxOWwJ45DmuxF88rfr7tKXxzj4SYxZoA2fdkuIRwsQQOINUkMLuT4ft3Q54RSRIxIQGh+m7CJJMn8SnlLZV2cR9I9mVbTdVc+IjhXGN0+VLjPiQC8z86Kmm+rNlmfsCJrqfwD0Cwo6/IlSH/f0KdkCSvQxAFRT9cHWLJjO3Iu9V5ptDwdBP5BA6l9wWjheW1eTFa0mRcg9ViS43yrHKuGiD+erty9urt2jN8T15r4Du1jAG2SvMusMb37cTVXg3sF3wd7BuxbQlnqdqWBevd1iblSe/2j3rRoPQS15sLooZ21UfRZoR3HjNo8qi0JbhaF2H3HrkKqTQ3J7cwd5cTK8BvI/BPUQQ6GSXE67/hHGdsxHzOBLhJDzlgH7+uppdv20VP/VTbq+kl2+8KpF1UmAzxEWHize3pJcvRJK6F1ZFffDOX21bG0e/EM9bvgBWmNos4sVyG4kgb3zYRRrAwPbJr73qdnczI6f2i14hw28v/IQE7khPZedYuOYDAievMM3kia89FUkHvRwDGdP09k8fSfy7Q+10MSM285XmagH/hzo8eTTz9M1A4iSj8hNu7vj82kVOE9wPNjmwkW0SbGIAR3IJdwo5RsR+efMqwVqWbTUvIPxUjdUiqK9arpYEr7B+A3mXBD66O2vL16EbkqoPVxijtEQmUvJS2gdFGSzEeSZBlr1ELcOEXrnB5w5Pt3AciLKigw1XdOvbROTZj1oUdWW+OiiBhd3ipo2VH7rj1vDTr2FM+i++p/x+cVh5/eLQhx7k8C2hLg6HjLC45eZSBCI9L266mdbra60Z/Jq2eG8EIsHzcy0a2nL2hqhTuK0l2W/Z0w3yH+T/Can4Fs1Wvl+S6HmZ3NfwEBOl/cXDAhoOzg0GzrxriQ+hiDF+Mg2jFKZD5HjPPUznPnRjKReFtWgcUMDf5f7V5kJlpcsBGtJCFYDB8VBFzG1BKxgZpwoP161UqAdYUXZpfA+yU+8Lhs5XrZSPYpGq/HcQDaE4/etQTcbOMMxX7YhLMrIIIkt+Sicb2bGr0UEEFlHnOHNgDqLPjPynwBP5Y6KN9t8DFpY338vaCu1GEc2JCo4cwj77dt5wMRla7vd+WfXXFHmdVsN6YTJ5o0g8V2zJDY8IJ39/1JUSKqXe66J25ICopdp87pG2uvaxtAqSjoNBthRcFr+gts8oh+QVf0EPSQPOghu3+zSdgXh8e+xIkUKQZ+QEgMlvgZ1vuV8iq2RbTeDSzPZpICa8+arauGLqvdyraFIYW1aGmnzrBl3W6e4/eIGLFFO0P356oSb6NYnhuYoq1Fv2y8H4dQ7/l17oT9aPvUjNE1Z51UZ6Ve+Q6lmjW8HfQ3vtJOlaGpL7dCG8s96zK1af+FdBtwcKC9vViuKoNsJjeDN+beNPfNUw//946xB1Z27VnfWEH730sru1ulFrAb0BAvISNJUqDv8NKwm+h3oNm10bsTt/VeO5pSxSxs8j4NGVq8d+gBbY/sWgtq73mRktTxf7SqO8NHFO6An9kc2UeNun9eJqkBLOIZ3EeNPLG/Va/I1W0mx6wnSbJ/bl72BzGeChqefYvoA288DYZokHswaEVJvEZEewndhUtnESRmHCKLOu7ZWP4lKJo5vQZyBcs4liA/8bU9zsP48XjpjcTQ/peMe63lb9QPWw9tcdxxq3gp7alM/U/QnxrW02UvHGgRxvCDbuzIdek3j1oXa2ngkowCLeeOs/5YDolZ3yIWIX6zTrimYTbuH+CsDhtgTC4gn2U1RB6n8+Uv3S0Y89A/V3TmqeWr77HgDd6X448SqA9HjIbfcadLt8Pwi+MvP3tW/Xvl/74R3xGvQcuuzPMVDSRnvHBRcQrSCRIF9V3NeZEU2x2L+39aUwT1Rwy/R4pBJbFsrehXdGqd9zcj/+BF0RWQhCIARJYgwFxPDPx2CkXZzyL2A3yT9XTeMlcdO2nVpQZioQBU3WeiDeiC5cPCyEU0ogF3JVKRPbJX2BwslXy1IcZmz1vJFzsQwyfWNLRLlVsyKNFi/g5Y3VkSHf/qWYcOsXVCPUAq9j+1UU8D7hTx+DYzEvSMO9MSkmRJj2CQ5AqP48I0hcVAO1sK0vTksq+n1DYi0M+vVpJO3grrtPoDNHnhMlXmei331+YTMUg1cbWhzp+QfpQSi+nZt2qAOxvaJ2Drx4zOdN3uRPbzW9Oqt4jcuU2WmFNAZP4Fpvkhzo8oDFo7lLBQsWznnqe+DjRzgOfxqakdosdbWu0mW9vYIaTKaRKm+WbmDIkzGy56/t1nzpVp6DzW8lErc2/6QPYEXiDEf4zT/DdgCMG4Hw6Ln73P+w2Z98Npg//tIkq5f1X2SmPWDWZO/Dgnn7+H2GP/OGssn6cfgFaO89EuxvcAAHmxFwNErQUqIMkkcElzAnW3czAwb1cm8DDrCt/lQXdNnG7SUFCbL8ya3o7M9tyT1UwWai7AXkoYvvOdB0xCWHTdd0PLtt8VZ31+rNFXff3dQ6lSIwLrt1nuSBhnFQcvXtQ4K7ZOhTypt2rbfWQRiZYg5zm0UcOjikwPVrmw+5vYIof2WR3vLBsuJnHYDQlxy03XLldOJLLLO598MzpBQogrBvEui9vwBkHhdm/V+xxkd1TpBaNckq5xASrIgi1uNRdolI1Oaok8FJMXcpQLU1NWO/C+In60SEM5pbd5nbHJL3xAX+DG2AENVlZ+7HI/7PwUfodfZ+NPpONQH7ybJP7LNmlyZvsXG9Qfaq7zSIW4WivBxI0A2IJHlPfyGbboh+y4S1kor6ug0U/F9J43BBZRJ5t5DhmeyqV9dvgboDZ1wlDSa2EqDdldVvq4W7lohtyQC2ufeFe1ZiW4FE9YAQYGBiqSbAMEjKyOvYxewfcEARGq3l8+yZ8+AHex8pL2pS2ItwGdNkVVAEm9njXnbFdeXATVW3hUxjDSGRUyitFMHxM+aJFcfF0sVtrOWqpTsDIQ2cIvyM7sniNL8dK2Q0Gucztkgi/+8X8ZlJAphTJx5d3Nmpr22t+uaepTXzg/4QoAaihPyvmjUbm2/Tf+ePxpCm9TU7W/z9S3NO5sN8ibPJaF8vN2xkOr+vQO0Z/uv0woIAjoIelS4VQypVk8xNVdc2ripyCrB1y7fuVd8EuSO46oJHXPA58Gfo3QNZxFxV3MtZ0eFvajTmbIkmpXSDIGGycDErrLTrT04xABRqrczBN9iDPMzxAjTEzTgLxvLQcpHf1KWu2VzZOuRq0KgXlM0sKGebGeUTLGreFi09ZlYj3Nnso8zctmCYbWjZtide/ucCeOPWD8EpExkh4I6JWhucsmp9tbHYmq7kcTmclt64yqGY2zjv84fogLQoepVRJQJ2WINk+EWvYEvMT32V7Y3o81LzlydtLyO09AXogZlrYWdv41GgLxYF6m8Lr6+MqqMyv4RvZ8nCD/ubi0v5YB8GlRqc/pv0vP+GxOUAI2HKyaLvH/GUUYf8BJKGUY0NkGNFz37lb0g9DrAkKqpur8tqNEYNoF9/IFvWSo9/ECWZSxa5Kvg/8mwbFODaPAQV1mrVb+HtuzX6w8GnAmcJHn4AUlcseGioGfDYvAKGDNfpeOgB+JhcAjw8E4EKYPDpcDpq1WAfWDJgv/7/EjSUxtNqGMtQWO2huoTEudlveh+DaFPFQ0lKhVoh5YuFWq6CYOcIFC/6pKc60IoU1ASRr8GPocQcKGu1zprSgsR2HqpcaDF6PcCpsuIFWwv0Hqx8DKcfqxsVI3IwdMrVvkCB7Qvg1yNKuxse3xkL1Xq4WZ7K8lOFy2dFMqXsQI/CSNpPVaYPboB0eh20Z2UP0WxIy6+AO6GO4YwrJVEUuQgmaGAAShY2aQzaxxAO7pIKsix4lWI76IouPPLUy2QDXXBy3aqOHnAG0cm+LcqkkXZrCqUKO5AGpnFpM03T913cnzzHf01kwRh8/fBJOK9DCHLFjqU5aj3MNg3H2rJp/TJrnfpmagYcc4gugisCSU6z/Id4yfG0XIgABpYYwwX68nXPz+hXwwktRz8w9+53xKO+Uj+MMCRzIlm9qd3AQX+TJ9h2GI5pPlLHTTjtXm1jfU8rpUoP5LHSK3BUX9bLXPFeMes0c9BxfroDJ0dsy9CiBesIqfgU6TpJrBobI+uIi3kKdx9aHP98TBN1Fp5uEwybTz889CTdgXQDfKPSzqgEy1JcIHrXQlTfykFzPtvuyfBx87SOLxYyEdufJ+YkWC9UwMR2h8QJ1y0h2s1QsWEuQj8o5E0pLyMC/h6IPYx8fqprFUya/TE/bO5Fn7f2KJM9S0iuIMsLVkrpxHA+jho2CfLlm0h4iyGQIis3rQaAA09NDg80wo2Hku0oAoL7CuOpPqZfsXu6/3xs25iCn4Yc8mnKQDv+aNKy5AAobgxejiGcopYtMbp4oYbQl0HTkkezL28vgr3OwaopTBg2pX2seHcPq5jN7kdhyMh6CkbKFHE1cHswmyd/Z5qcVWC4htmvW+p+y4E8D9RyRj5+WuB3yrhIa4Jlwg+Ob+8rhAlU+0KCF/4WjL8GqAw1XDCl04zxRp1gwKfyg7o0VikcKj2TxKkmErPkKnQLSNZXRBJTvnaJ7+m5o5bqGZ0QBkkTYM0JefSaS/aXHTmDvVAdKp4Xv5qsWy8Epuo2sGQCvpDIDNu9qtflzKE8DVhDhPGHg8sn6ve4Lh5cAORTR/AiNoFwmKoXhzZOEwiZvzkgv1Fj54IBg5N0VcJHzFshILQX7nEJpLFcTlwfEke8BcCaLXwjNzWbCCziULiqW2qMq9qlvrW6J6VlDiFSXs3BDtaCAKfUR1dPrVRVV0eU1mGHUPAem7BKijNIa1LAxOCJRG2DtyyzBEhaGERVXxUS1ij4lARNWBjDHm9pJkOvF8GxbtSHzLwmWqYpfMx5y5d64XLivOXiBcqRzU2ad5zKc+SlxvtaGKc+N4pBxCpw8pLoVH7ozHnQ3fE8Z851Tl3gnLu0iQ5vJo8TeObOc8KTXegcBqV5zxUMrd5ShmuQuxSYud8OeAV7CaaCQObhyQmH6OxzYnFOk645OyLyIX6EufF/V2WoERRvztS7viWkdlzZ1LRLoGuh0IS2F94Kzeu1eftaas32DHLM6PMYEkHB5ONbVkTNwExKMiJPaRf/ao/9oFuUmz11BDunDY56vUyp3a9RnZrvgInPZyU6Z4/4yYXN60/J/Kdbw5lWcMuIpUE7V6iM40lnbR+Nca2GrlL6YoBds9pV3dXiNSmJu7hiOkArztA1hZmZzPUyLxbk5yJuTp88Ljveb20xjF9JTHFX7LG9cAAFZNTxPqnoHy86MZkujO76obaAb/fvTy1jmS2hl5LXXxj2L6dwdKPRi8+2Brhuim4Kcls2qd+SsmfHTatKUfkjypsh+FD+7Yq6ZhUGbi4/zrTe75I3y63qB0OzKNse++J5YL+fVKj/WPGFxGfwPngMfiBY0zSLFls7uqZ4tN3Qx+OtCTsDqjwm85aY0wkN5Mmo2OMmbwe0duDrRSFo/+bhTD/B+5h7SzfXHad0pqYQ+9m/MipwjpY2CTpodQpxk6w3OfzGYOcKfz/pin6PdNhNDDKB/B/DZvCPsauCvz5uhx9HvkO3UUVcRuk7sH1U+QsrfNYGpeBpm+1FkHnP4SREZ6+nWSm/ykkd/ReKojSXPPHCa7tKGA33KeoaczLop67Wm6+nVyez6/5yqdInTQavDpH2wMQFGYJUIdn0b7clpBBiu1gxPkncUlD3DGogSw+UvIJlR5S9avQHEkNl9sHMMjD7Bt2WRu3t09+7aWTm4vIZhxhNWLjnD83Gsa7T56aaEOLnnD/m62Abz0/PK48SpAUgCikEm9JIvc6Y98cooTCNyOp9+k55DX9i9I3A1i/yrYHXC6hdQJL/CNJswkI9IKnSJUP7hN0slnXWPQH1VDlttAab30WuGhvkrLTBylZmSwQgiTvUWlJiEvN7xzhbeCss2GIeVDtsg9ptNMgC6826sv9/Fbwn3v9x7SAMEBiFA+MCD5TZt+emNx8Srz2OPzifkMMh/QykXF8nWsakn6dZhg19ExdRKBnzJu7wItnzxB1Q6+SY2HvLx04tPavj82xMscpmi+Edm4mrQl5cI9pekMahrlT01WspRP6vfsuAxaZa49pWiGvsGt0bOFQDCrOQTmNvm9h0oAFKwDLg+oKRCJoygp42YiCroGrQtkfZoI2cPDqhGDBeD0DQzjkR5Cn0NnT0cr5z8PD0+4cNCfF27HwuwBiTZkuRhKswL0l0lBaJ/6CNvcntX3HCj5rx8vAizIvkyfjVh1bu7r+uYqQXvxpSuGL2ErQEhRWdXBsuhByLPpFrWcTPc81vkfCyxNrgOMlNIk4eMFJZnqzYlpsECzFXy3iCyPNryBF/SMjpCjZDIkvtaPa/4HPuhp2u4A1NhG0unVxQgAWGqQKgPuWrgItuSCim3AUzpMSuSeX8waHUAB/UjZPNyxiepZeCJW9zxtNndTaRueXKFs3utFDU2QtUlB0i0cqiMP3tYTdmMhIArNrE4j7mPpRjBbHEJKKEVPRl86kZEHa8BDm+tDs4tBx3KfGpgJcvHb8le3MGkcF8dZCAe7FKDhdu9R4pEEAaGUwud0D0hpyCjUyEUblUy1QNvJfrf17sGRth1x38L9Y+TXNF/rPCs2+s+img310nNtnkqye4nnciw+3octoSZYrxcKET9E+swgeYAYPmgCOpftHKtD+H2UFKodwuoILGskzkFj+cSitNhHDcZGgB5v6X0QF4qudVgqQKMgVb9yYc5wvW3HYWwWawEwePDlnmf01XpPOctLAmdFRty3jeHy0QnKAjfCtik64Fi4JAadoAQPdZuJgGthqxX3kCN6lOU0ySNatNK3sVJmUgfSMwCGwqqvFW1RcDa9WL/yBsiV5labYf0i27kG19ybU60SRkOv1LROWirbBZZEUFkXsBksrKDV3mMGmd4JOGI3skac2pF9uhf2WEflK2x6v7RisEYAZkyVTK0ulJOwnN9ZJ9kJHokRiHJSEswn6VTSjRHzOa1EKHjbwCom950jMZRWwRD2V6PDV9TIL1ItC5sJWTK2vS7/Q7B7Vf5xg5eAdrAX92Ks12MdNLHR7LaQojA9bvoox2Z1RVl2//2CCdipbVP4BGoIi6FN83Kb64GLzgSlv2m2P0TVHgEYH9kW5rMrDezqKcv9S0VBCvZQkyxmXeoF6RfywVg+Qb0rmmXp9Afz4CbgRKXpEb47jCIP5IurCCDAV4NxYz17Oq1CmvGdalN9kTPyQYN1xbAS5wN60cesWktXjJAYn4i1QAVqqwWYTAOjgdA207ecYFX/S4gTnuQs/SqMpJJ1sEjFfkRliLGHCTx5b7OiSyv0+MBItcnMqFKf9WWNtz29ChumY9qcYziol5/Z3l+yAIiSuVlJXajaxcdOaQ1XMNSzp3uovLk5KE4e38qClmvQf0QfkZ13ANXyNL6o1K12QuhNA0p7y6TLRYoZYBovTaOwMZr+auTpDyBjAxGpoVZ6/ipy8r/qfHu2x7W3x/+2lp2SM27NZ4XbFhhjNWhDJjruAh7JWQgyNRXXYqivvM0qhJpyH5e6G2MBhO+05udUX+Y2pn8AH2p9xdW6VW4z9+P+ImaONjpixFWl7Cg1jqZTCVAXimxLG9NFFDUtAGx5c9kxUauHwUULDqPH5PUkotAd84gDpwttUOy58OP+pCoo7SNEq6H1nY2FCaz1nXuas5d0f/e3Vu/RLBY40mcCTFsKn9N+eEXfDIlim/c9FZjEASoxNuaokMoffBXAyKBOuTw/2T8KQzTA84ZJEB8tFiCOmT1cQ928t3PDNb8BFsEVYkvrXGJmaI0DGI6IxdJMlJMsrkNXs68WgHSLzTmquxm8lkixJHs6OwDRFKEfJ9hpTvyOQYZMoczgwidsgsJwn7rEW35ljToVsRMoQIpUHKDLNdHYhMwElseQaE0THYuCFFl6PEo017lzfsXc05C0MkSPzlGAS5eMme2oew4qapAjjsDV4qGhOCR7F0v9iA8jP+MOZi0v4bvwU0aK3J+0I2IGAtPNUERgJsCa/pRPlSIPnfaAS/rNwMysGyzLeil2ikov6ZGHjSKXv9NUFk3haMFAZe2GVfpOq8J3B0hggglTO3gWcecG3fMxndlNixJz/NY5IiP304F2ZL/uYBsC8SwtHD4/xvCG9rBI7OdwQSVxkMZfdLblDQwm8dtNByGg2uXbQWNH9fMly39ihDIcFm1Z174AyAgwbnhARwYqEnq1ZqaYVgrWrhOWo9LAtb0lHsrrrukoHPTImGBwuKfjXAAvpLyuLiBsWCMAdLU1OvtB3R0iGr6AoWYzb8kit0m8Ca/Qv0p+Ut8WsQmL49eFIkE8GtaD30a3NPSaTaQE5q60EjLMH/OvqBMu1tqKVZ1IdWtszosLI0UMHL4O88JIOjRkhQrIjIej0GC9aRDyY2MjOLGFniaAywbqzm8AYNmAQe6oxkqzYCj4xFOkQuDdcB3a8v7ALSre+e0ccghJHsxAsErrsvMwOBGKr+7aN6L68YNLy0jfnStMxqfNbfanwzgl2nSM8R6HU+7E32Fkzr0C2YcBVGYFc3EnT4lSUo7FV4XlUdacJiv73KTeVz39MClQ04HdfEvx7f4LZzTr/eFBMqxsmA63jChpZz2a3XdR5sTsuxLLKTkf1FUOo8wIUjDXTCOM9TxYGDs+ApirvBw5GUg4B0Rpwt/ukz3JbD8FM/wDMeGZpmRXWdlIAC/kHUZDjsCPlSJoYMNDMYF8Gc8JiByT2H4ktoPh9hYQ7dmZDDOXfB4xziHw5HwweOAXJ4eNFHTZ0eDV9nGOJ/bBeH+1/wMyg49u7PABzR8r9jbmUOLJNatl7mI7DG+4484fLzmVLCg7wkjtoH+BOQt7vdvwWmgFHcYzGJ9UORSgEK6fktFB5HuAwW8SefMBirlVvrJ1TEIYDayT0fGeVMwYi2pxN29jZudisczvQnrRg1ap7slD4SkwYKLSYrmOvSZCsMeSREOBYbljvvedt+MhEJVP3ouPf1fllunpXdek0R32vvz0d+tvJG3tUImMv8SwIRKbC9nVpN37mTL2CkwilcBMHKy9GG5rkpZRtTOhGDYaGZMO+Lksqpem1AqYf1JEnNHvl/mZ+v7swz271iGiLUs4yYz51eCddZlMUVKRhA+KAwjiCKRojAxBAN/jaLzuTUZxSc43l2w+r6ZDUUW35TvwABOR+0JCdMN82Iu6g8M+LAa0288Xl6JUHSiRDyQnBpyAhEQJfAraE+FiWscCdCRdq0+eTHxR5YMJjn6+1IN2UWeguJUVdaIT7HDGWjf5xsUiIdljb5A2+QC3grKGqOQOE4ymYCvLWxemXTUk8Grgtl6hChk85FQRIFb3pkLXYjyMMABqcIkCada5zg4MQ1Cp1kolo2L7kvJ9A5UefYnRdpYi5AqIW0xhAuTCdacHxe17MIMT9epNy5yJ7sQvVjttmy9aSFKc4RxI5NL2+jnSHlRw0OHh+5dExru/c0q06XiJgKAnl58UuyQCdo5xRFakedAEuvYzRPUNWBOlACkCZw7qrJAMTv82L4i6QUgWh66OTN9dMTaCdToJJjulrw6mntoR7xZKqARJCHtUXIkx5dy9YiJDtP1JbNbDFnEjj1OTbNQ0fEp7D5/D5bh3otmjGJ1lOq+c2Dm4IxApStaFJTCrqF5KJtpHx+ew7g25UEGglHpiI0G0JS4trie4ghjmKWQnycTesYscn1Vzbj12PTzwUJ7TbGN2IkGrkWo0DggFmY2pdWQDud8ICxctaAmlWnuuhcNcbCHgUFQb+Z/KgNRZjYx4jaD94PIqKhOAQinrNne/RL3XU0rEZg9emxYpmocujhPWdiYbnCRtOndqbt3/j/yGGiDPA1ejaoZhQaEzwQKL4URzM1xCUej8fxbfKTnezGAlsGdrWSAo91GdaLHSc28899SzW4g0sJU/eVLm95S5OCMXL8sEYEwxf8Z/6r8ts9eHLgyT85oVgadmk8ykB1bRxSDoL+jf9rSnit/S6aYcTgXENC3wKFIyga0P+f/2g0MMxg7V+Av9G7cRaAaxA25Q5gjx4DKf8FyhE2wXX+z+Y5ebGE+KoB+MDYom6+j4lRg+aBPKCFsDF16AYyvDd4f3XUm+IKDyMopOr/4j8HBEX6ueNF4pJqUMhbQ4vDOO15GxyQsMEkU4ocvQnUwxkCjt+DryUrENJ+koYBwEY2MRT1MuDyhlp4gUWtXNJtGNShonm3mJJhr76p5Z/q9PCdf640Pxp/2gTyrZyUG1GpHk4pGSUK6qIkE/0x7x60WfwSPB5NC9JEkklPn7W8DbxUJShavxBgRTa1WhlFfRTL+6wkB+2XKZBAur5RZKlmztG9rA+zSsh9oF3TAQ4GcAR+pgLgxomEKLZNokEsEz//1FLDbv61q98CgELxR6Ey+fr0Q66+yr/+/0IkfVzKVcIrmEdS8GxstELC3g8JhniLKiEKPjyJP2VqciBjG6cZlwfLPR6ET3lMgzlwz3f+ev9GFbo2aAoaWZ9xewz4D56Xl7J6+jRu3bboliYKcYAh3YSzzcQn6g+3c0JORE+B6NT5tEau4qjyQeainx4jeuwJ9dDnNGya6KSTZ3WEfdkbreJq2BBpfOAvx6bqFcusLb1qbSjtGoVmqTMInZvfpJaPW8FnF4fN1hvLFP/PUPGVa4UiPY2GEi4gyTMfDSUPFYD7gHePl/Z8g+ir2r5hQMrg1KbSsxaNXRy1JDCtjw8YRnRYibsogSru8CKXflaRCPN60M5nRWPoWy4kzs/sKOIyhuALvNcjxQz8earn5sHXlMYvnOksydvFFkrEOw53b2iRDsj9xYmx4oKT8TR+3W4QFlVi50Wk6p3cyMOfXW9wMXKxKNw2yC9bUdbeMHBHhvqBep+Hhkpgz+Ej81W5EzGVQkmQSe8/5NmQX4plECMwitGhz6b7QZ21DlR2OETvbVArV2t+66xy14/psJSnGHYoJNU+BIJ4quSCBCvEiJEQRkjJKFVEYA/7soW7/WuxZ0HK2nbNNlQIHF+VvASv1EosLQHkeerbsIZvGHyIWBVBrA8jo4rJjTagW8ebN1MmlFUNdK2Mnelmy3UtbrltBw2ZPF1FaskFRY6FgkU/7REUv3oSA7W41USntV7NfGH56DkzMw8vUFLd4REFTrGuVHsU5r9zXPlzUs0mkpJ0p80G8CQUaUN/Gtd8qYqCZlUX804l/TvJlXHjgyNzXXkA7Fojh0cmGREbNDjuoUIXvhRmpQy7D/L2t7BpGckcZzWlO8QgWcShcX1WZmVoYODBwYbn84wZyMvbWPJm1U7dAoAL3ZuZcIj363LfbQvmEqM2Kgg0y6ZtHm6tpsVQceqOA816DvhvZebXy9XAYF7VjNET1wKPGWYCPQBJRBdWUgEtEv9WYpLkN+R8fD9NmCoYgZ7PJAkMG59TBSDApbCp9hNLD/uf6V7ECQq9M6pZWu+xTrTLX3zbGGbppJnpZMU2u8qpNvo9cuAn6gZziYdNaig4ybwuRb1PnDwxcqyTgmAoxZpLOkXyN74lznj7bmtOLMGi0/392IbXhCqJyIH1oDRlymwKvdS8Tl2f+zIO0wI8NgmogbWr5tbcGFopz/3V+ubcYgIcO5S0ITYyKtiYp/h3ngXt9QX+9smtgxEGDVwl8PwyLEDDMuqhkKiXlRLh6acwqYSNeHiDeS0d5yhCEGY4gQwjN8FIi7FDC9u6ToBIWPqzlICDV6f2g3NDlSOoF0YdvRm7como8E7Oc1mrp9IPAIDOTE1X2CWXoCNHgWFNUYiKPedAolYED8k9Es4qUjaouDiFhiD24NBq2+umz6rzi8O9ik5gSPssZCpLLj5U8YPxVKBRk7fXo/PmXgtB6gkKVG1+bubmR20fEcJVOPbClRpCMFwg7y0cyU9b6VmlU1xyuHFV4mAoK7jHgcNQPCkxzi145lqo3tQr0YFTs1fdM19PZGhBG8vHYuFoKyl3DbCJfCtXlLSiQrZqagpt+ZngzOKB07IBn2YaRytwj081Dnz/3DqZW5Nhk1FqkoAGztMjU2d4vDTTKDPHpO0afaAXR5XsS6tZ8x1RwIDWKC+05q7xktKU7fGU8SkqcK9SgznbjoJvGdjdhhPP8ofoBn7cEENTHGkw8xfnBYIaw6n21omrE7mbPXeriScYyJGZgLBYrJHpo2/A2X0Zw/bv5WWVaqdDBSE9I+x93pQc8nUpbkzhkpI7poCeiQlX9co3Fn0mv2CBqbT3hvWbD35TR6LDzOQj0vDz8HN04bf9T89+Wh9M0NmRcW4cnXqjkXcVb0SvEGtdCYePlJ+vsam1JvVHH9Xilp9/TFhdMjXPRWeiSx2Gp3JPL07LngXJzPw6deYCZbKN8JLmQHJcmRtR0++ZhNikEazeMA1hR84VMJFpWe5VItT5J0l1WJgD1bLXZ8ok+2G9hNaVEUoxz24pb90Ddfg2UkF97tYfSmyG7vnN8le9yu6Ab7rHVGItMAYDHFEvwH/8Vb0uH2VQhcZGe3h7U3Q4Lp7Z0X7zwiRkG4dgYjBOsstakU2n1mBVqVD3elJYyhMVOrZbKycz49x+VolIX9qt/MqW6VjRyBSFpsO3k2E0n9PZ9HY/7Tql1NxChHX6RjA+5NaSK4YKdJxvV+AMjVHuwpszYjMAQC1T/hYt1O8SPaieSVFLdDorrfI/vkHOeFd5nSPOFdcGKKL63bBNxlYzCu/yoK0WJZ4DCNvCt0ES7/h131uDsWWJo9vPgEK9C4coYzPk3bVutdl4DKvr5x/l27na8p6f7sa5ROf3aVmPaNv+teP0I0GJDp6TWr9iApYmjroSM5qzy6xxkaWBWWdHwMxlo71jZmq/OZym0zj2J86WlCXRGt0qqiMYRgge9bDOfdR+avzaFiDZnJftac4bQ2hF0mPHUO2nZERO7uQacGEyJRrJrJzjopUH1FSFjVIGilKugblkuYW7m5UdIIKFiV4XSmbmnLMAY3gtHyAFs1J8h4VHKFL1kqvUYkyK6byPLLAYZSBlEsrfvh+ZwCt3gveY64eVWOxUIj2enQeUWPFh/lImmtJF3JRpzzFkeD6FmZxCx858GPdkl4uSeF2fmavPSAdfQXq0iIWx1NX5W/63mTC8MdHN+A8L+R/NzJz8dP2rewlkYbWpL1BbE7IpsUYmBULtyuMrh3FQDABANUISWWYNIOTiLKsBsrz0aUBKB9dmSnlHFsZQFZmUBhUScnzJk0GLxioLEjiEkCLC188dS1BCZOzPUQ23cMKUILhDCSyAZ81mPyrXthlBDQMWZJo7KJ1kImoHVof5mVgGF9T1JgIA0FgDN+fcpboCmqnjxLol/c9uHXHSHbwMbmo2jvQ8qYY9nXwfYO5bwKLtTQOmFR46q/RO7nX7A9c69oI4VnSZNmpnzhkFbtVZd2IPHD5gW8zsHZporhqyPAgUOxKKkBRYYxpB7nMAZkrBq0MGUTMiewxiANbyZlMsa3VFUSCAm2CVdKr6GDbjmCJWRWCYwYq/qcms0mx7bMxgttkgcxgtaLBxRicbzhtesieg9yhoYDPD2jnE8vrkxRVhnB7jXy4o9qdhJKso0JZs3LNScNZ7y6AuY0rY9YAcOY5LHocmsyb4C+BJRsVD+jW81JRzG6gcawv7yqANvel/4HL8+C+c532tOSfFiw3R8wsrLHD2jdJ1imb4e8Jh3Rs4Y+2zp2+7Tw0HnHlU/9Hp+S0YweHQX+R/LZYtgqP8ZZbNussdR7NmnJvz1pvYIaAI03HMnDSwdgBdlaViwkSAJ3qYx5YyVX1ig07E0HCKZCX631x8Ny1B0c7vGpxFziTfujjwC54xezVj5bAehUv6U7DZ3tihHgy3fUZx4dxWovqI3zZtV+26ptGWYonmMHIY58UXNcYOEQomMJfivJ3KsOsa6sQ+Js7JFr4Nn9S1MATeyne+MnHrJIJCHtkSTj2V8Q1/YM2Cw2bWD9VRhZns2DQ8lWcIaEvLbCoLly1asAqDnKuHEpi4jjNU3ZOQagdrL0RHhGTinyOYYobynr+4QKXYWdjIrvYWan+vn6fWtbayvuoJvepLQP5PWw/l3mZYkcych5B3PgHwNXEafpk4HiwO0iExdmaRTWPRxvu3cgZv9w79TefQvuBMkpHvfoAAgt19o7FQtl6376cptm4hRIqQt/BWVMDhlINUZU5TQQVm+4Fs5Ito/Ma+xxdzQOe8j3x7M6bJVHo7TUN1uChu/QNqLWgdqph6abiz+lYUXDO8y+ddNkNJtDJL600ZcB5r3I3e31WvZKziaFreS0BCbKSIwR3BRGs1GCgGAIGQx9fpHASkTapjPsHBoZhLQ/+A9Ge0fyPYF1y7QJrYFJ69g326ezl65ZFPQEkCxYiBy5cEaiYZOCgKzGQjvRqf8iR3wUc2h31h0fEXzHYSyv34vl4oH2Q6CdbzL3mleHUdkqr8ss9SFrJQIssTWZADlwyeZVq9eLVtPpogkQXJxbO6cizrnTMRY0YOud3xDPFyjB3nNPNxOYWrWEtolEc4bMd03VHUQuPQJVzXXMms2x/w238aR/JYUSNzmCkirAXcemUaWSE7/yN4r6tJzByVs+VqbGw/dca0NFGcCv5vmwaS46M32iYcPY2pQxpS3So0oXhihZIRJShFXG6XAgwn4TX8LKm4AGJfWzOzlp6bV9CCgK1J4+Or9Q8f437NSeHsN/P/lqVVcugn7T1yksQjV5rFZ7VRHeX0U2O6jDBwBkU0y0zYnzNuwsN6HDN/FAdhqGykn0Ph4FWzkQuznUlU8PoKCcaswyxmmIqPCpfV8D/meBTEanvCjvDM3puRbbhc2wVL4TewvJuDoZ1Jst0SuD7JlfeibOvgGKrRlffNRZAm2mbWPOU2qOAt7G+ihtTtZg8xbaEAECEfnv1ZC53gw/aTxoTaU4d/2iwDlzYx629VN/zzDoq7Ei/sSI99dyvVJ/KQ/z2Jjbs4reccZQWSvikFTRly7KYEBB67KQKoFoOs5eTf75lQMgUYk36wmyMcnDOXX74rW4jUMvSeiPy+PBBqIZLX0TFkP8aCC2+u9R9Hb+haeEAtRi7J8rhLEb+4UxntwtQUL+cWXsoXYK42YSgYZley0c5XWTTeZcq3z/22axmfPCKqbxsU3rS0w3EXMc7DL1RdYhWyMJqr3UdkC3wLPm+xozhex7BEh6bsgg+zRfEkFdbWyyXWaDnE4VkkJlZ6CRLRn21+ZEOzIKrh8QFu2LsX8j5a79dSGH3k/3kkkIQmIjWRPnbfJTbZBQGFx8+VLCmuD2LecM2oqgY7Z+SBXJHT0P5VBw3YWve1Ct6oKFzpd8dAq0Sr6hWu1IL1ILy4sulOq9WnqwAXfB9rvMllz3B7qdAx4cZZ9Wy+3GNlNc12LCinuRh8g/ItJfpDUG8C0hlAhlKIHIYFxiE5fE4GAQSL+wVosJNDQOPmSnl5KOaF7Lq0N7hDWuMjqE+pR7jSvJU3oyYk1MPIXC4tO4afUmMSDDmSDCji5s6OEQv3KcFGBY2NfOg/tJx0luW5s26kcC/TQxHcSnTQuMK3VEkbm7QdcMVcRv3SOOF76+r9CwCuzUBPcZ1zYn1iY2nTC2sUtn3IFfqZTci+WP6ULpshOCiRp3T6+aw39GwF2k1vjMWPkDyv1f3B3MwCtu1nTZ4vumQ0JSSVFOnAcou0t+oQ2xB+RJlFrPuSirVIv/ru+zPTbmIScu/kVMyorGwJ8mLZxrxCSikownl11j565vDFoUvxXWwUNHWao+BWzR4Y6ZO5r+mRocXzzq8vOwLzUJykCWM8nUgVJrvGwuN7PYhRg6w0vaHYS3gJi/xONe/OiJaTCdUthaCJuUNIm5y/dGHudOPeQEAtdT1Z7vFosgSHHDgHdLFIsCTcNVzHc5ym4XYwinVaw3r0/GHljGro8vHVGmL30KlvEUfsXlwXzNoifcBE5wT5Tp79N7yyqq8cBu875BkmYaCUC8/v79oOQ+dzGgTK9JkFxCwxDL/cD0+qhLCAS1XDOVk2tPTrT1JjTZkr7C99qE95ORyENa/W8wX+1LRbyxaaPghwGFUAg4ElMZ/BA0kCkJo0Kcv4SlJltPK/mgHtoZpUdbOvUlOu+8dx7Mhl0e//OMXKBtvXXv2E8e8vHOWglWDtgFG/Dax428p2PVUJafWvsrBJNSBCS1SqAQDdv5MqSsi4IVt/80XP7ZbEWyKHPrzOXc36jiGf/YvmMSo0cLq1ow2Z6Bheu5kjhDKT61ThVKdxkCFauavNh/Tj67UfsQPOwBVFEtJgiLvv2Tm/nX3uwXBFK9A55JGh7Ni3t/89JbJp0mzLEPvyHf6LYaJ3o+ObpytKpUi6LUVHVzWgR5flJLxUswQwTFwz91vwxc3+YAYz49pE+J25DLq+EfXPAA7iMymPWjooMuj1BHe7movQtSIgF9Ko3+eJY0SEH++uc8Z4axJMmShxNysdByEMMagGasIBmEVacq4OsQomQmqn+NoKpnsE1GucfgyRs43eb98t3p3xeFVKx3B/jdQL61Mj0hfR62w5+r9FkjjgXE0DqYfV7/k52C2qfRzXIEsqZD8C0nCKt7uL9caLGUabpY21/LMeiUlYldL3kPyhDWphCfnlQs0M7w4LZpdRztqt8gmLNBMvO5KuqGPhZniihKciwdo1Y+t+hNhOj8bY5H9ydfBA+uDCbChFXwf3i7D4ANi/65mO3ODbfH/st09w7wyNG/Uk87Bgre1GpPAI9P6f+v0Pz6lpThVWLkCFBPEdRW35xQ2lWKqKwMFtvgSPht4jgh5zoAEAFsP3m80P/DyeU5DFExJfhWoDxxHIU1/avmprGJ63BWl/RtXb6hNRzeMA8zw9PF1PopQAaM8gQJp8yTa0p9m+uxTeDgKLstRvLtDZ2Z5XzQvhW3yXzJWEFebAKTkNw4tWoe3FO7D87cNdsfoDLV0Bf2gkrsuhayDk8RvIqwG3xIMjecxQtgIF36DOabt6kA2j45abq9OwYhgL4eqlsBGzAYY9PTkOh8OrU49aFwmbYmp2nTHpNcOFSwITc1j0ZUNeJDWHyskBj1PW5/94McP1G2yaApCUJZsOPcueiTekuZBoryMZXjeBbIx4j/1GdDQDodk0CWGYoC7hmAAfpGkOLEPAoTp9VbUVLiH7ZroASO8yQPYxzJk0E/3KdcnQTT8cPqy+BGwlX0WoNGWwu5EgNquaMRShwPAUNJGFzrYyV4bSn8wL7ElM6ksBj/UM7t2nit40LkwrV9XOA+/5wPvLAMp9jBIyoo2eZL0nxcDA3xtx+mMFkro6hmw6yPL7az7BYgk8jVxLRQdiRx8T+Ok7jkF56j5+TEJ4IEWp34DzGH3ygbSkGd4+PYOlJ+QbfaCEoayJ3W3ZE+nYFKceBZe2xYwrsqvBFyBIG5P0UDCFNBTwvWS/ZljamTAjSyls4mP3PEcq0ZlWftQ2DrIB4BhgyHLAIcudGFpO+tWKsU5NRlF9Gu4/wXiX/YUsH5iIr3pizV6iwPPqLXmiDMuM8Rx6yXc+lIzzzk9cV/kLQAY5noB3AIAOBxBbNsv72ECei/Vhwg+q9JBNpoCpsueKD0e4muBn6EvmHKU1ejJ6bE5gGNOAngoNntVi36sEKEbcC3IgiO7MjyHAfKi/3yRYUVsCBg/OPNsJxyGGYQVZN5f5E28IEFWvIXyobf2VdWQjWDyurYJmmM3xheumQZjA0bWp4zeITEAW4YAD1SsM4n6C6In/i/i+ittNFl0AsmFzUGtawPI65UH5EEo3oKYxCzWdiOUOwnz7Ys0EsOvzSJtkYaQ/TzXNo8+dG6As3QHtQ9wCI+Qe25upkuDorsNE5xTWFa5MmcjqjXLfwvFPE2U1wGwfDoDaDp/IGTYu1b22gM3DAU7iNWLbkYk2bNCU/87d3JvHS1RxiH1ytw8gAR/SBmUN+EASy2SabAdZKE53S/2wWQxgsOMeVFy7yxfnx2IGkWFt/G2anIbaRtN481TpaAYZvi8SETf4M5LG6W2/cnv1zqxkb8eI3xGZ02qwrgGmBsZuZMwDCxavQHU+YTCzz4vrFoH7udyzDmEs8Hw3BROWNkpno9YzFaTbgjMobwJzZ1PJDmJshsyaOO3xjKJqz90PPcbjbAqiPJ3G3tK7MnnWTt20f4ciUknPoeE9ODfSeJcV/DAnrL3ELWapkmZoHdn1Xv7bHcP5w6P9vlwxEbVFvjpGlgnL3x2W3J2EEX3QCjSj+KLu9FXM7FiEzBoYv9Skz8ZZysGsyiW9JFubVeGHeGHDBrJmAkwIDjlRuM1sIubeTeeXKMJYrYc3XxThkSt/+6fCSqQEbg08dcCgdSskbAtSGTI2YAd4MkV/NqW3O3/WnC7Q+GtkhVa/LN/d5lpKRWV/g9nnhyj6M4HNjIlTs1x3FmcJ//ViSSgm99pPdCrRooT2Z5GQci/MolRkkTjyQf8fuUfCrdWz2q3Z+IT/vnWsEDn73z9+UM1E2GtVtnKzZuU1Z4Y9MDGMXaFX4BhjWCNsnugE/UShxjLAkwU8BKvoKvE3AbhHoo8SuKEILKM+KOIhAGce49mF6YKQWzKDl75x+VT0g8g9cAh3RR2wEeO/W2kY/V+CP6ZdUGzSMgi+ojJeQ2AQ9Eb855F0Tzn+eQ15C/9PsRpMRsWhwXvTcQ/mVfKnEn5g5KTLGf3wR3PLQEDlelW2Z8RXleDmkp13wtWqJ1af4m5MYw1QedEiU6xZu86qYJx4FkForxJMScF/HBy1LaYyVhiO1FlDTxyY7zBu/ChIqcYzYUOdTM+aYR+1vFWLqJDClImxunguU/Fahuw3RzbGTprH4sYBd7TyRSsfJ3abw/qT3EayGVjaY+ocAoZ06Wlnn3pHEK4fPwG3GqyUH14q/jyAQJGHCotcLVRy5Td0nQHk63oTy18wz0rw7Tep1CuAzm82AwAwpy/Tor86HQHAWCFxY5WsDY/IRkgRG83/B5OO8n20aYNVBPHIpuO+SuNiX09Kj165dlggk0gqQqnXhJVOfCj8MjiwvHGaz62lN65tFyn+WuqJJj8n3yPz7cFsYBKfTSJLTRSVeQ9FOXY6tgJwR9lo7BeGucFc5x9+NRpqb5JXddJ+zPvSEarZbwnTJo3vmkCNqfQ43P9MeFlZjDp02BVfGD7/gU3VcuyHf7IJDgVRrZJ8BHTYyOEbXDs2oTsgO9/YrB5Bf3E+lFNTPj/isG6kU3y/9UENm2CzbFOdJyN8edMEo9QFI0nqBFONwqdA8MoJYojHCEUfx+srS8k1Ax1oyIlK0QMGdsyvMRp+6fSZPHn09R26AbOpXGD32T6pJ2pfC/yRrTu1A4/VDhzk+s4Le4kX5488FUOZ1H/3/qxJ/0PJK4FoBZmVOsOvfxo3Jf3bkuu8+BSfyce7WLid21FQ7RsD2/XbwbC3akZ5pseCXh5lGwhIekeGzUac3TvVVUEViiN4RleDGF6s2TC6WZKCO9eRD0CC2uDyMyi1c95ggNqC4DGwBQIxZORqIMb5UNH+AHeTEnWO1MXiIHP7C2GDXEos3jL2uMT065LiI4MvwdskQ5aPr3K+vq+GF4aAjsTM8HMphGBEZg7OOOfzy2QPmOxq3AYxy/xHvpLUkcPnc+93+UylQ62BCPkwfOYItDG59swE87cPgtHVX42EjghNWLareMwggoKOFsQj1hGBMZLVrlRkM5z6CuhfLITxIkxnpTJThArFlurxeERGbrnDsHjDfcyIJvo0hGFWtTsxQoAVY1ukF05zrWM679HNtW6zwnEfO0CMbC37huMV1cgavn3AF+oAsWV0h7Vk7yYPZaymN1QNzCFzXrtooIQjrrrKEU2yw6YGxBhlzbVvf0w+XC8voqPpKeLYviRmWUEpN9cMDkvCbd9J+Bal/JT9JLDO5yMo41n2mtalpPxRhQwqXBNhIeKHH8CkjhlKWR/MWNJb3WcOwVmJFFbULPuyLM+33OfGlLeLIxRAfzW38JkVPPuLlP0gQA1yRa4SODn/OAy0KgMUH3XnXOUOqaseD3GbwTf5xR8ymHwQToZmyJOZSmqSyPeW2zkFpunv5/ZT0WZzHTbPgyp2qpI2zmzKparvznUahpb33BO/+dJ5z1maz1goQwU3WpOsCm2efKuPI4s46ILPjKTqh5kcmUaBVLxI5XUeL/nUQjcOwsmwexIVbwzqAzMIjrCihKoOWeekyLXMXex2KjZZqfpgBW9Z0TonBbb005J91XMTac6JMPerC1LHDxr9u8t15PC80egKvlXA8QnOtVZmnH2nR+ETknfKDWBShLWF8Gkeagx19eWRXkkccZ7w+Dabw0A+21PYPMr8ACsQ0m/yhSDUNAVW7ZcisQomTBRP3EJFpnm4u8p0XLI1IwtjEtWvTAnAR1xsAs5EezQl5U+YzlSvq/um0TnbfaemZlPx7JtUkAJROGuD4yLOsHHM7/xM9M4O0+xp487eblaNGOfm/Jn2waIs+/mO8UzN9O8fqef5kOXt1qQ2VeJomSZtHS5RzOHANKPAE3N7UXvunzy84QYIqo0+w/hVPU6nUllmELSU5M1EnlreaoUvHLlEqho+9mBm0PuNp1RJSR4Oo1B7iLYCkmY571qKrdoCuo9tY1+esrY1wfHh7XjPnRaotYpgpgPKpwFLfXM+voQXnsImIOikMHshOrYnHWYxeODp4jtXgue7lPsikZXKOcvjYutP/kz1/umQnpfT0p4VLgVHob9MtcgNUeHP5rlrnp2H/w0gbmrTh3l0Y0+3zu0eeZBL2fN2AB2kcxReOodH3HGhHOAaFkFTbiuMLmaikntzaJT//7yNNbSXD3ogcTaiNRu8WsHCuv5/ghVEcvh9ZQASUvcta6hfXDw8nvMJwp0JrkwCTMHkXtK+7Dlp8EojovRG9vpTgJ/DI6mdhPbfXnS6dX574mRiTsbAsdwQz/+YDeJA9FlniI8P0rklQZ1DLGbKjRnnYqMNxhOiijDsfgtmbqgRohW/yqlmr7pr5Q3NY6WrmDSvn0mzTEbx1b0pD2dsZrAicxOS14SRH66O5I+OXTTk1WbjlCPfkH3UhErA9NQfBYTzoatCoXxHm3i7Zu5UvNv+oz/dM1ha/Ku852skbhCVuOUoPISInl4hYsGyxWfFVOccq4pusMq8EKjg+Xk3MtWHgGVyHERjMTFUua2eVERnhUaXlWwpWxOuYz9XgyTkLksLdnD/4KnlROs3VHwRqfFFFCo8O4V/rMdYFudOr7riAbpTLNi7b1DUZehFVrH3isnh0dhiGh7wmdrwnSWrGgpihHPyi4zG8yS2jwIGpqbuBLVSgJ4ouH05wl+WW2Qgw/PRxpAlnuBInTZtIyn9S9S/v8gGv8pAG0QRedLyTpB+6szYZGg+oFRil0L1YpsTy6MUrGFDHuP7nc32iDSgwOVBrmlQJFGhRhJBDWPc9vgFVSqhsvaAbWli5LRv55EYAzfrLbRpf7wv8my4oaEuKw6q4dBV16Obq6Xr+8tGSbsxc8UH4dwp3HUMrT0bs3OiuV1dHEHka8NCRM4+5sd1XIgWc2kZCmLB0VST7iJaSxRPtqyWijrS+/l6YDG9WQIjmsgTrljfr5Xv3Hm7Gt/AM9jYQKFnm8s08KNH17V6B60UVgw7UMY33L+F8NCuHORXVZeiA9YpL/qTNYSWg38jvjILaPyMfqZt9VhoQWpVKVbn28zG48hHjtQ95RSDn0w5Hkbfr7bjoW8v282hHyrbm0OvSytfv8s0nPxPrU2jQMgO+Jm4hdaW7r5A5s9nFuBsXyqODPXqXRwqWsBY6+wYYzXoto8RyUk73Nr/pto66URtnXJ8t0/KUJt7doyriGA8kPzP4P7kDcsCZ//9KqdyIcnyUY9gkkbl5+p2a6/gb21JF+yzD3cxSocWmsDnau9dpKiiodfd+kkNkVgCk/yshiQ8F5RTPNbASi8++u4Xsh9KIG6yq9q44fK34vhuSZmquMib6dg35Zi3j46gnhOht0XKlwrp2uaeVftfTFcy/YIH41nZ8lw+ik8QxzKVtxWQPcoD0eQlFdhoHqJIyrfRKQsfY3h+c3te18u3RQ9G+o8eMwPIBsqsm+HltCMjmmrvX03AlkP5Si1/54oSlFVQi+qv0LJnKwEQauFdA9l2Ga4LKSXID5wuuAGgKCIIBU0k3GCwHzx5RV4gK2ri+GllLPUt0sQq7eYXVNq4QjSivgz9LpJf9y5UlsbQpEvWHpgTI5mC3Ahlc52puVffBci9xqZphIM6ef9C8CBECsYghMqouEvYerbZNbplFxO+7BXdWrF8oXetucmyBjY9SCGvJimlzFfM5KQOD6LYMc2qMT/9w6RgcjUErWI9Gbc/X16jFyg1Sduq2ZwU4DKyfiwiWOoTDVShO/KhOkragDAyEhZf0CX5F1wjYTULzOFrULSoO/6iRUsKI4lI6potFJ0E1t2mAKkfEwD4Ta6Zp2oMA3DK3XogNq2+otAbZSg1/4Jd2f06WgW0fLuVC/c/Po27I7lIwIB61SJZkZdKasLK+Wq5U8xQ5R6v3GWDl39McMlPxDc16f5ldjMy8kpJ4G+Tnj/lB6enCma0By/MJEkD0tpdGj2z+R/0ncndiHU3uGYgjcbr0fyd7UiuVGKqrIghFNjUigeR4eLdwACJZXmxRCw76zsaQ1nMWAqXR5edttbVnAbym5vK+YNyLuabvIpKtFmvSPYHKT1CLSY2mKzi89niN6jcpvjKLR8q8ZrQ9b6ohv+h3gH9JvV24+fQe5tQL+OSOz+zv59xIdLoxQJwRNSydcC8lhYgBrhX8CtAjwCN5R/+PIhozpl34PGV5xsAaWHD7A51iRv1hBoTbWLxqB4xbaHWtXPbtlZNm03LuyXz1dZx71ytE7HbElTReqp1XdGXteTU2uq9rI6TKIFexPcq0eyc+Z3v8Eq7eA/NzxD0Y436ZgOQdIbsGz2RMhu6Bhqf3N7Kr+6tC3hM+gf3jpz0lRrox4djLbWX455P4olRAJsqBJvUFEd0Tm9E3kXvtNa/YIj60x3zb1o4KBfSkOYsVu+osrb02lE1J2GD3up7x1OnRRFNeBu2A1gupzstWGVv2uL1VjLAVmi/CdihoXMqVuxguPFjogaZcWnxky6P589pQGeq4Sm0VydwuOIajvWY55e7tTV5r67Myz2ROoCYjiQSiVEfd/cBZnJ8VwgTzCHGOnxGCMVmWh2FbvT7kWd3RCdOTiUBrVDu2Tr2bZEEYthnKdWIJ1LrsfR98/QQmvMa91EJLjIQpJIkDcOwSMfcbq680Jt4eaG51FU7CnA0Y0VfGzdz6KG4P64sQPJYyaI7nNsV1S6LGMxTLUf2sVyWub9EfBYO7H/xUvXaS2OCuZY+AKsk/FWcwUAnhwVaVcqwUG5ic9NIcVFcj9Kbq8vArpJkBSPCaFAADy9u9u4RduZHGDGEFVfiYF458XyTzfCVFYxxVGEb9dj7cNOD4ZbwHpk3wH7Q5OcE1Lww8/mfSZ5VtItHYfWEOayvhhFfAVw8m3mqNEYpnmyVTWoiw8fqxy3ah0VVdN1c8X4lZzpE5oRHyUwY2sEuhZ4fCRzH9oLjIIni4CIz4AUoR3DKCfpCfNKhUSy93NCxvBae8s8cwQX+YFs6KySHbopiobEjyU4MY5OnVIMHfbNV5BJEPaqoo3xcsSswU0eaX6Iq/zF9rvU6zMIjk8wGoqmSXbOT2NcokTsmzvnEj0zWTj5zQHY3V/fABMhvslOWdD2e8zyGDrgocFqDHjfH0waiASybvnQk3JpqqanjARFK4n2cKOLFxzjqDsbPIdz0bzYpgUcEC6eQlIHYvBYFHEcz6nSHnpSiZ+54QtWL8k0gwIn/LfM/tqSqyUN9lKmZOFTccZr3xFBoy7ptoKfI7POZOnWw+ij0+mP/G5vpQqCrq40CJnlqfHDYUpfYuX6/i+GjjkLVKgalS25BbG260nu0w6DMi7raAOhxu8fBR5bUIv6FyWBVzsN2RHzhjlNe3mXDhKn9sWmx65jkOXaYqkvH5Sp24X7R5OSibEbwBrqsqzt1g6fhif2IPaW10Xg7NM6Vt/gpJnvjgA5PZr5Hun5nAFsBRheWKIJIvfI23lfBNCTR7sdRsLdWPpNVhwWw4rma/EpwbeRJulzyxFmCg2NpYIctjWrMMWbauptYpmX5MAIyik+Yk4wbxCaZFznZ2wic0JZjgtgNFtBqZzuBl+OzHywHXckbWGWpyGMYcnowzUGEFKxYjzHtSnH0+jOS6rHG6ort1+SmB55bxBEbOd5dwnSTMHu73gMReRPKbCh1i6cklyWlv1k3+C/bsFqElifMXLswzTaZAwZ3rRoPkQxcrh9+P4Vso6NBF/wntKihsrGXOIgXFGg5qx9E/gjfuekI/JBtnoQwH0K17fE2MChICix+5dZH7Yhg1RYu76/cBKwgaH15hCFdoKv1yrNNzV4ukl365mr4Vu47gbFbi54jxhU45fVzlA8ksv5EN5TisVZkBq9JgwduHieHtuhorUOgPZhR5utX94al1/tT7h1s4/qGZpWtOZblxUS9mr6PaaPjFMMDyWhoopyg6nJiqqEtlHFlF2O5kas+vexJL46qy7l00iy6x8zCb8TSWfAaPV+3YVqi3TmDF/xdsTDWZpPr59fls1TR6uinZbnGfavcssZ/bA+tHWrBrtEt4n22p2J0QSuoC+QYyhVlj7h1FZm4g/+sGKW+VVs9UecFlAaDYOkGoL628PLAzfeYEhaAUjNYKqF1uBLBu8bbSSUCxpOv3gYK+IXfJluEMSrQcSMpAvbXfNF/pW7tCZD7h5pqRsuw9TFLgzv65GyNVyUJ5cUz/67DI/agIM28+RvesB7XyIsfRLKliJJNB0YG6b04rz6J356ubuM0FGU0vWpWAgiBdiZ5oH54y7J91q5bu5muds0Yw5YM3yGEsq0OeDOPjAPT6lcTaeo8U6nPBJxt4DaqL7hb4K1ls1n2033Tzte+1pI2jtDBhhKZSOZZLLHxpAu0KGL4k32jMabRr10/ZlkH4TqZjiv+H60P5lblDlrurbVUqWKbPM691CaOkMlRTFBj0ovwqfalCK6UIGXYs8XGbusjBfPKEBZQsvDQhdZlz6grC6zOmgWbzVq04lF+z2Lt9PxLNlhapJcuG87MMBF2msS6LDX0svxlXw9jogUh/uZrjEhDxWdKqJbGObTVUI0JyMe2+4A6A5ukFqeFhDc99HFg0smCstUSSD8+5QPcjzOdUXF8zhb7RU3DTz3aKMcrdOmVNz264vR7J2/zzMaIphp74/si+RyeorNv1jgkB5BSDsUHtSU7yf+yAFC/ns3LT+4GYJXUVzqTwzVhPowGt/wUpT8WpybOsc5mYRiYdkg0dkgqBDM5B1+LdaG5kUWdH4yaY6Ly1ZOGZoTvmt2pPUv/2Pi4lHSOMBXXThv65nhet4NCOz+jhZ+QeuIGK9vd0rH0GpdiBbTekNhxu+FhcfRcZaMRCN7YrfQ3bGndMAwayn3bWeDX8beTCy/zk57gtlIl7w35GCmUD4djA+/hQMT2OntZifyjBZ62eo0tOu5wLmy62bDtmGnjzXhRorQrNRzVS6YXyW1Nws3MsR7AStrZIQSDfT4VZrIaHWORhSLo2qTWGrJW7EG/schUfRsHiCTd9TqjF3zKHCm6IqEJA601uGi9722eTWQdVmwjgWCslUGAhWEmCroU6EBpjT+bUha8qbuodS/MFGzPRoftH/3fqrrFDOD41lNlfRgzMW4R5Ndxl9PegcMLcZJ7s1AmPjyN/hCqp7Px+4cTyizZvUAhO2ZKK6SOzOmtq3MjkMc+4dM18WTbUmx621KJJKdaW503Jt9QoPgV+KWh1nmorbCZ/DQlDvqHoWS96jJYKJ4F/HqNaqj7sMenbJ01pksp62M7LCv/GNwvcRokormuZuaItGy+PWMWsuCK1+WS0P7INmNe3fiUcGzlvk6vm3zuxuFcjyBq1l+Pv9WamvXVJtdjj5ADTHijVa+kD3A2h6xeFYMcl9J0fvWU3tNk1i+segkIsy1jsQeBF/s84fGLSfaUwHsb/iAcg4t7nR7j3WvSh7HVbHvNDcZH4XUle41S1tk1JNsgqtQGgQ+CxyDmSAx5imDgQ2LdSQZL3fN+i2XG0dw4N+VbRpVGop+NT3U4YEk4nEM2w5TwtZQ9k/RMfhoJZHHpfADAyP8GJ8FXEtX7Ws1miIzfAqAOpMMH6yDTsRS8ZQGqB8usRxG5/juNfL5JD/EVNE9lWTFzTcd3IOa/3fINXMA/BQARwevLf8wfBUXo2VGC2vB5CqM6eHrsNXwDf0I3rJWr84+jRa46CqN1VsJDDwR6Dtz9StF1QZ67QvUQxBeJAtPyPRI+oLpvyUcWrisH1YK5460o4bl4URukNyO0Sbs70M+NV16TgrGEVS2V9TJznj+nauxrr/vDJCrrfsuM4FP1MiT4VvzxDY98ydWzd7H+dTqxjoLaLAxIPiZcgUkzRyF+NmN5fU3UXB/C2MdcRiW9x1SuEUHnWMRoxAD4ylcMcxuqVb+Rj/uNvtZoWQb5IaeI73zV0ZpcdD0hiH2uHoXm16zk9zHB/roYN+pmRxCbXcNSNLVmm+vGbNkl6NDgP9TATQMpoA7UgTpQB/JAHtCAAiyu1nJBv3UpMx1uWHpfnpLQGk7oC2NI0hTSeX5tl3osx643dGYA9ovKHpqkyayXIkB97ElvT7Viwd//duNlCzX5tRR4SM9vigbKpFRpHWrrUB3iH+FsUMZCdF561tWffWGHua7n11Yyfy0yeDH6f28sHAsU/SKbl1vob8G+cxbbho3vxhmS8YymZP2O+aVcyD6RwZ4UlCu+0zsqHlnH+VtKmbTGEjj2L2wMH+7itZVY8YPXSnLTMSDTW2mJJffCJlpuHmaMC0g5T9wuWBFZFgIP1Y27POXjpl0QqaMEWGoElHpf7FcwAc2wsL2/9WAQT0Uuba7MwnmqbkIdVuvQUBQ4ppbB2vsrpLGXc+jGuR1i2CvKn04TGXl5i4Hd2oEA9/IeHAyXA9aamotEQkDiY8YqDKWlGfZzixc7GPah+3hjaEHr9pOpkIb+ZIEx7CDDbPg597REwrQHV3o9bcGC9ffu/yN7O7Af17IEmra4WMVljenKWwNDmMRyasaVGbWTpsTKnwCPQPh8Wlk9sWE2qRazEnJ60L21RPjF6MI7CQRQBx5z5Dyfu6asnERWkCkH3ugtQORTA62JHn7QH2ZAFYDCjUU1Pr49vnHdl7x2tnHt/z1IKZASPfGJM0AkhZJW6U+qgyZ6ImGIX8jlHn4olvOt1PsM9BKvH58RXzBDtwngsGG/58xU4oR/XjqikdeYxPEXWSPSmtnb+Bux1nhEV5tSSGabYrPNwObTXv71pCpA6HfUfYhZZUxl5pf30+4Hk2SvORyvtpQQq0Dhz0rDRJ9NL1GlsnQ+/wa5m3Ps+TX+kUBG998goM0qhWgZESPNhScbYrvzI0zW5i2FxAc6FpbbcXVPbqQQAscgNnoZ7CbxDVNOv+Kcwi6FzsCUS0hR7jAMpGZSM5ipbITcRgNd0VDTk3yvZUy/DViXmMGPxXcnDDWtVhWN4ihMDhUXcLIYlDHCwxipVMtgFUzCaR44JFSZThNfiFalO4HJ5cxFQ9Orsr3BKiZYAvt+oH1VAoptPGfeBX+6rQDqbjsGQao19bQ3XozbL3wPLILruDG53zmGRZDCS4FcMUIfO9nX89htBUhqTCLYFFlGww7E52lm2tvpp0HNRp/omCVrna4Wy74QSLLhe6WM2fasUfiiohKXHGs4NdjGKptPh3jI/nQV0BdwbnaqNd0uEfdgnv1xTmcXKykPtyNorgPwN/h6qasEpuNDlMXUnTQyzrgBV7KP9bd3vBPL7diUIeF/r9tOsHFV4KrP68b2sD5WFb+6HJyECRTZwS/1hP88oWBofkrY9GeRJXqnGL8+HWvjW+Nn+j68pHpovQcz6/IcNAzc73gr9f382VzQyoEAIaDDZSDPxeWjUA6XkZ8rjKQEoCv8BQDYjJVQ/R4wKTIhbYC+excGh6Wx/lrEnE44+s1h8bhY257srz4fChNAlzLGT/1yuwREjw7RdJNi+lT9ny2IY4u1z6DHcvHulfS07QgPzVEONyC5C8mu0x6J2yVXmj4gYiJ/b6m7IIDRlbbCOw2BhaSNgm7rncPGLsXyhf5SiCbXj1aZtr7bPr30SL4oEabsuJFCKicDAMILDMsB0ED1BTfKYXNVOLRCcoZjNMwSpWr23g7ka5Rk+1M4dbSCROPDjHlchWLX3mGO/xgt1lEYVK7ryN6UkwKVQav4TMKd7TpYP6UWjxbLCRSYtF2H68hEg9GYleD9INx8koPwOrAPw7aN5MPtw0FgpmMAe0caHNTKggWHI3zCUM1uCkvgWagoVb7xrS6seApM1E+hvKcW3saZQeo9ingdUgzzrD6P76cXRbq+qjsXVHyNlLp+xjd6OSfT7ejyV1DGB+ddgEdNdQDfVA6ub2Gn1VeGubBThQtmB96xi8pRrSxZ/dJeH0aCTGF8XB5Nrclaaf3yjPJ/JPUGf/HfB8QEPymKk4ge8zPL9w+aaPhVVta9fmMwYY9JTvh7v9/svt90329O328m2udD7ggJbLjyyVwdvbAa/xtHF78U9Wd3AWrF3eduUWzTkNTgOFayTltEo9Fj98PPLaTNm+rhs2kShZViEaJrDAbBh8opwF6cEfl/j47iwvj2tTp+0LD77bSEfxRjkLDtyXjD5gbqovngmbOgBVUBJW8McX+4ojKPY1unya6wdCGV2fdiAkf/m5Co4DWkv6tKV5eKyhwOSteekOVtTTXcuJspQ/DXf+LtWrwrusdoeA6vDBplwnxyVlL7oCWzfLlVxF8kBSEHS8Vg4/PwbLOkHx8QBTj7tN0S/6lgGkUsBk8ZHW9wN5EnX6/dgKdQEk4ffBjcGMn+T1H8MbMIaEUMlq6VPz7P874mIhPYyvarsS7hFk2atDQHcWZuVPBD/gaa7nO4TXqaC9B1W3Lf1y34bqMDfzYmen0OCCAnqnLjHyEPaWSJbJ/Fi4I+oUzEar/LJKi5doZM6Zq4ixBJvO1c4hktNu/xvice06dCpVg7toyAUN6CLmiMxvbbWcgWEamq46k+FryoADnnnAZUU9D5zEgRwf2fFJwqnvgzbMRUXb/K+7PjljHpLkD83pOrtrzrC0P02wgeNG7f7rPOMRFQ1NgWPb0kNDPsV3zrGjMRfS5oDJH9OhPn54ImON7xSM0+1U0fZFHmsXCgzIWd12Ssg0I11uUJp1OPH/S3cFExlNkfbDod3sQcdJL9K3mhGjXvuqF17lkX6TYhcXegQZjISYS/04Kek+pwwBd5Nqp7PjT2Lrh9Pi45DR3e819DKDmANqEfbYm7FFiJRhZsP9KcABNN6Jy1CqKFQDoHnF3Pneg08jEWKeNg1y1IORmARNvvO2IJHfc/K3o/Odna0snUXo9NtVchy3v/b6w9m5AK+14OEg7nZts3lAJBRbBFGPsdzjxlhNtHJeFoEKx/9ruc8Xd0TAimS8joEPuXjnBIx/yPutWk/T8qDtPJkh7pji81T6SJaV6z1bNOxkiKvqQFrSGL5IQ5qaf5M+okFCnNsnBnVoeZHtWJyLOVf7h3pyfW/30pkrRnZ2Zq6wLEYob2HSRe0OqAh7QJJOmlrnrMRSfLf231Ssx9sfEkzXku633ATsjjpPuD72UTsla0G/H/doYnjn7V6m4QWdwaN/2s+VRw3CXu8MEpBbvLJ8E7N6l9o1QEBTc864BCkFCnkFyErbGL0zDgmiVtgxC3vf91Eej5b1Eg7Cwo9RS8BuTJvuPOADna9Sz11A45bbEcBZTf0owc21U3052sDbJsKHv2Z1kBFt2+g1y+qCdZm1xiXUW2DV5zokd0K7UsyOK/m3K88ry2Hsjpuo/q5x3c9dPJyoPhJcnjviroj9TlZPqXzuKRWcyAN7ZxVwVOe9WDSJ1S61bDV+VTC8rQ4Q1DOh7suq5ZV4N8Jlhth16t5vZr4o7ag7WbjUChRIPSQF2LZzDYXpW2Vbemrktr5+d2PQ/lxIKOvPPSgWjTnkx/usFXM9T2F18MXFa6PHHvf7gqwM6lVy57N0ipxNv1xLDvShfUyHn2BRM7pSZBXpkKiZO7sx54ILvHQ7OIQU43wc/DxuZtTP+UX+xz+x5nP6ZEheW/9ReMAx6lhv3fqb65wjABWg4epIZkzrZBMeALTbLjqGIZtlQ8qRF0t0PUHyPnSVCqWB30QVTC4o261TawPutkgm7g4o8xAzvRdNH/8GyZMFkENiBxU/RfXH0Gi8PUtAuqLBDYfuIK6XLg9AWqdgR656qHE9/FghYiOEOEGmoR/Uv4jSXGf14qyy7uZTQTH3JbpWTM/eWB98ViF6XR07hhRZhw/THlpJWJacmb6XnLe7yrfC9ZR32J+VvvrDwVppv+Lj3TR2bVcLP9BvBRmphVFgxIeG6xRikoyvmfzigzW3U1UVsV9jsP6iWkrKH16Fy8/dvmgVjKylgVdLx5+AcbIupUoU/IJWFSrTzy2icp5KBtbJOug2qve/T1t+jh4UW/N+Nz+r5svOYykU7tB9Huzt2hc1mWVnUZWHJkw7AEjPcdkl26TdMGpkrqwn1qKsg33QdkXbK1LKjYmGzUCX+uZaoG5a6CAZ5B3omoCVwP/lic9YWQDuN/e2UH8jYj/t+xz9avDTSO3dsRJt42iDNQL0U0p8kjI3bIdR01VIyc3/TiY68nc84vgE8F6K2iEe3jNmPz2mxXK/6DOovc5IAEGO9MyDXx/EqrgY/7WGq3w0G12oJzpUQSozNPxWZwMxqpOAN1DDqCbRtF0PtAkCSV+P8tP3tq9c253/67zYeb1Ifub6aCoRDVWzaW6cFsc7+7Nq9RarwnekaWJKxn8pPDJkGnqsxbPTn/gxglxq3IL5ZlStkyYFvv0iUhDJIXVtGxybJQjfmiZ6afyfGZBMNtI+LKf97B3b9C9PfE1XPCaa9fi10fiWtQu7EcE/FlL0lGbWCW46dv04Y+iShZ1A/bYn96TLBtqT+Hm9JPsMbcO39CzHF47WL4wUmjnULvIRA8FmIkQMO57MNOcNHHNsLeVdf5h9Dci8D1NhLAvXQ1d2cGvZFargRiasSfkrvKkbS4/tYRv8LlEgeK9kd83HQ5s/HFfRBLtzQgZ4aUP0PkNSXWUMwNC+4/Z/MUQbzFU7KMV8HMQt+G5dMPZwi9wNPhY4kT0Blj+v+I50McPMkXxL2+G6MaYWrqX5x/lCvDK7/4EDmWXJ7cQ9OIVu3ECFdoT7357i6BcFRKQU2LUZ0ecN/mqr0KquaooWbDq8jyWj3YDv1cFJ2zyyjKUTiKmFnpCbJaI72y6Y0ycDHcuNi8P+hltk4yH/0kIf/ep184e4muj74VJKjRgfaA0ikBl+1/KPj8dsMupCFzz8eZP4ZCXIeErzPBU8k7L1DT4mq7UTo7nVrXZIk2EcWjPqJX8GsT4bPi16lGe6Vkr67JdY7fPymWK1TtxTV0TmPZONaI6vbydYvmOr5PFgzJkU00W9TTTxVmRS04E/dadg0hZ0o711L+SlP50lrlh2sFI1sVxWMyewNjVhzQV+C4sAXrYoGU5ksSwtoKAKoXZCiC4L/FPPmWtgbr0tNbiJ5ByKJKZdCxoTxM6NWDcud0WxFnEx+EbU6IbZ7Jsxfgn4XgsTG1Dhb1jcxt30yvLprsboh9tQZSioV6zqYSGkb3Co7ojUHkH6WmiYXUymYwbNyZEV0K2tXK6k23+uRZieRMxchWS/zakn4zdSNSSpZugN2rxjfpauuUUTnVkgJrLRj5H0ufbhLtf1y4qbA1XU3nUMbCdlapDlYxgjefcsipxX8hCYvHT5f7nhVctv48lxv/STSex70BHGNM+6ccR1S0+Pz4XbkPK1NnN32X7KU8YThmFu/R3h4rjAHxcNptm9hkj/AifoVU8NUGzJIxe/rrXzuAKkMcongdvvLl/5//byjiTr8F/cgTvKU8DwqI/wyaE7eu3Jslis8XqvLkPnB5ZToNqF3WfO985zvn4KXDaKgGcyfVNHn+cdYRPeXw+LQezmxOISQe+BV5nrTf2aFko8JpDhgJsbsXcfrhSbWWHHReD6sJ9Gw2QgTwkms+GGuIsVZIaKwEKLHz9UW8dm+x900mjKt19PGjH15o+PmAsP/O/ae0/GLLYbb1HoyQYfgGgL8GfQcOF4cmfgaaXE/51Gp+YzowbUtWsfGuYsX0YIh6jPNdWF+ygvH8SOoMOT7hGNLeWHrq+QqE7IP1Abn9e/ydpyVsSA2IINKnxT8JOIepHAg1QJ3sPtgb5Uxi9/fOotL+EdFfFu+p7x0bKZSyVQMDPHBCWSMe/OV7ArNyerKoCLElDYPISOw3WR5HqqK7iNV8L+bf30lGDXQCut8FHFg35MArv2AjA7BqOACcJQDEQ4HDo09n4C/LU7RJ0fJeSJK74fiFB6fHY774Kit6MHVyEk7NpzzVndBtTfJWb/nijLLHjAG4keNlpV0GrhSCkJi9jF/cpCJNlNaQjQLk1Nt5al0lmbHGu83VJKiuuQj5a7fjnALzzwwF5WeTdbmoCGBw245Gq+3XsLHFA2LkBdL2Gw6Ov/xyuByVAuk0dsEtAlCe5ZC1DV14Ett533xQuJHZQUwmoG4aDMJH0Pmk+buAXmWi5ZblRu/CMdbgALVA0KlwWpbQ1OrHhSyYGEd06s2NSdQ9yH/ZBTMy/tlOkCtJx6m+3/7DCz1wSL+hpVgHd1lQuZvAKa8KFljHRezGhl0ohrzGVOnIfE3qYGk862dB8uX6DZX9iuyWaPKMEUtuo41pbORzqd8A+8rC6/P261viHCuU6ossN/0Rfknw9XDbTdc1wm3XqiNd5CFNxkTOXvZCm+VknyIeQmxSLX30srurRUoVIxjfaHlxRK4/C7DAA5RcHF0oizs0YsiB+01q353NCJ8d2pXrZ0zocKL4jyRh2BnEGl5iFIGzyOfDMlAUYhQzTqcP2Dqu0+lyk8HiXVhIsMYIsOXTp657fvMN67It1MHO01t8pKXd5kLJ8SrM36tzx+OOFS7hs+cNSFQfwW1+bfegobfrmat1GzXbNPRKMx0Kiu1oEhjD9t58lwCtHX7wemxzs+k6vTs/dyWEjScB8QzJ35YQKL2f0i/WTfa3KeIjbXQtehf7gi4Mlhx7r+qS2uqxhMgYmGPYHmN9pmKfSOxOw03w/QcCs5uxQPk/sOFUw+dK2mvaY4odoBnOF+Aquog6utW38opfGSxeXoByzOzzVUSky8JvixU0kB/HSd0mNOsbcjZ2T0U/qnyIorNDcG+Dm/Es7sgx5dDld5HIcHdNsFJz0AKI8N/3SVs8Fu8AEc90O8wq1eBfSFyMzb1rz6K94we3Nmc0BiDBYWuA2XDs4uRbUcDaOrNnka/OkbLOT7jIfrhpPsM+/dSACEncbZE08Y6QHh5SkNeOkc8+FtbOQRMN2pwQn9RH7VTixGqudE/Pz2nwTpPRgxsXlKjwjhVEuPEv4lBUobAf5Lb3V8ugZQ3M+KAsktA/lRH+3aM9pqKwcgLToTn6dZ52uA99HdTg3scYHdnpNIISX1zlay0DmPCjh9pD1+so4F4S1rqvV1zqawsDLl4hjBH6wwSjngj/L4KPQmF8ihm4h3RzkMdA+wAqfhcKvxMChNIDwM9YgIFnAOLWEvGO9uNxd5F24yvpVatvBba9364nvxkYvBYPpYidsII4reX70HAuZNhkixIscEnb4sgbSVhCb6SAT7TOxPgWKNxmzuiO74+wwPc3UA7Yh1i3WFpggl07Exq8edORvyUunIVNQrdJF5Wx9WrTkrxlsmVCVtcyRIebPg6/JHj4sbsubTfznnrWoGHjGxRnqZxwWA9VLig3i1uaYJTNaa0ralB3wiPXdUSkHw2GIE9v5srQ2SHh9MPImxvGuNAcZk5VLKkXIcjg00bBoIvtUv483ZrMZY5II6/Zw+yXOCPvAojtNVt7CQFoYE5756DcT+T0RlxjeuX05Ur2HsNBXjSYu8tiAs9NdlkMj6cK93Y7KE4chOSnCr9zAiKWA3YwWznrQNPngm1YDyczJao4xmT3bSsQWn8xDhwn6PmWWt8dX+AbVJF/dwE7LRlFVsiWTTpHjdA0T/IJAeDM+GkEKGjt8sDERQ1iChXiregxIe5atfzHQPOdLao3ahu0nr5Uhpk3EMmrRK9N7RbI17ThehDxOfoysimNOubr/6k0nkc3qzn0nKiHhyCc+juDj0H/qkfAsYVa10TeB7r5ZE7dHU9nuzwtzGbUI6/VnIpb9M8scMkbi+pUHUwOKi8bdqHWdMK6ugn+A8vXyeF7GiWIlaEiJplNfhhJOzd1i+mNnj0pJYIun2mVUMaGCrAfnhf2cO6rKdza0DnpJBGmblArzxNwLijVHQA+tZWtkgE9Qac0Fq1WWxCjEOVBjZB/XBJNPsuygS75zA6ycHjk27eKpDEvQt74HsogXLONSGuwzljB6mUxOEwTjkpCh1ZzOZ4Sqaguot1XlGjegLj50wblfdiBujtvQ21MjkmPD9yzhSmnk7YKZRqnqAlwyIIXUiijExtZVeghsJ69ZVH2T6mZYTJkNQ2PthObDiyoWhIDEx/2Ls+J3jhIMdGGb4XccxaFS93dfgYFPK83Wdrqk7PhSUlZcpF6Kst+J4XfOeF3mfDZhVeqaUkNrAm4yb5UPvVBQiTKk+AfL8/9AUnzR6is9aSROgemqpoTlNPAFAQleIGt9EyuRCt9yQzsyOqNAD40SckUN/vKyOxHxw0YZdyxb2e1Fvdmm/SahS2KhJRlSqpofa53PuDM4p3Ffl1llRIGIf2CZgn78pL01NWzUF6eg1BRvsNGw8STCvYDg3ROghCuHqouFuuG5/GLCoF5K9t2k+Cn6DJc9PrZbPmUBniebeG5GEUavwLXS6Q1HPv+5c+CLC3K5lHl259Si0SKdD3aWyH4D/ZuqvYLHMtKnIh1PQGqtfhQ2xtIbNMupJjuq+7w3aGQntNCiOwf+9ql4GdPGT6nE7kgjNCavkYQweRZyK0gJwtAXTXN14e4JLJeyTFfV9R+v+wx4NI7XAkPsgE3uV+Ur5TrNiFlxdVqXFUYrOoDzTFZ1XVWaT38li9vAwOgGnATtw+gnv5VNw0vyisSOgxA5wKz3bWVVpXcaX4+UmUNZ8aowhf6x5YBlqzNlG6Hmi4ILBp4H/0WHu0GBTC0hVH6RrW8XUjYBGDvd6xPyYRZrntOBQBdy2JDyXql5+u7ePHX1xidnX6su7WdL/pr8EaYAHYIe09alKBHbdjGFzDVG1MQLcphi0Zc2fV6RDOac4fxw4+eb5UVJI02owQwld2yKEH5fdvDTSX0L1pPHOtjNNn1sNYJyWAoaoCl3SPkJtRyPwYSHpbemx9QsE4r8phzjtJ72c30Xqb91o/+vbivWbE+81xBVJqomUdpFKLVlkpuTezAwKvUr5y9tYLs2P6wTVWw+2W2DjY1VL3uQhz1XOY/v4PB2JSf/kzEcmPjsI7QVAIF1s1NpbBd0Sf+4pfxQnzQ81kFO3dxjNg92lSCwoG1yT+tj9WDR2iLqyb4B//86xPX35zhdgVCRKQIIQFIVHoAKnWl70HRAapRw61HVGXaoPpdI7wk/BbBAAeUviMAatQAPaKAaQOAIDEwEUdvMYenKXNi+HgS4ClvQm2RkFncHvbNOTia118ckKJMOtDK9lebJAoH00TxYImgWVQnU3fbOFhAOMwS0kIW4QZN7gbmvrP72XMC/96YsFd5gCXBm7CPFLxh0mvc0E0UByPNj+iLqkkL1G96s3PvH1VInBw3AVeJ6EwWMIuM04pebNYDsLGcE9TI3SASy8nSfCM/X3lKs5oCLOapleNdZigCLopQcfyqU2gI1St59fftjj1uLM80eYPlGZYfPtwF7hfhYprpu9O7fMJ0/h7JUOnJDMiyNn5FL2EKaeI62C11ppaAx0SzV4XueNd29hCZ/3lEJsyrIlc4LZPDTQ58+9J7/2T35sZ3r+QbBfDIeZJtacCu/GUjB3YuLLs6f7WCqhGG1h3FlqcU1dEmVxygECJhXZTyeyjnw+X8i7QgmYPWuFyv6lxdptdVdoD0Vjtwjvwh5xl/WteZNuzVvZbaqqriwJl6TpDqquLUWuWmMpNpAE5fO9pj9Kxty6gxRxF28OiiXtmlcGt/sKc+Kapl+lAybEY3A76xog3gsTPIyOfU4tXMu/Ax0jzyvkL1+NmrEn5m7nKwIB3DKRDUGKoSCRU28gLHwB8LNv0WYqRbIix+yQWBRxe8qmg2bW0uIGpu/6Ir+ZarZNtul71JUQWpGGzS5fcltr4PuxApJJwQRt24mi0NH28yXpMPouFmRCb0hKu6O5XR5tnPBttIW/qSqdT+h1+PcK+IJurU5xDPRRsnfYSXhw1/FLvmP09FXt2TjoC1Qq5C8LQDteJUTQ/jfajiNbwhlGl3ADIXU44+qfA0yt0sHMwpFyfFzfTo0Prt/74+uOAt1N4KQNQ5JS0PXPo9rckWrP1iq5hAlQ2ZcF93aEJOBio1oZvSiZxP4xDP4/qlCXgNqCC9XvXjWHU1M61ncFj0nLvujORUqbQin2l4RI/6kj8kA88TZw9KGB+FFkQsMFuHaL9j2FPsTUOl6YfHXOoDqcpvbGEyOQvzbJmaMC3hMd+8yWbxM6dKRlzDv4tL9vcUJDZtT1ne4ZAw8p23aMXMgNqT8zC6nVOoGT7NtUrSKbzjMhoqpUOc45Dhd6/e2733EO+oDp29LSI6MibuuycOS4kJE2hrY4WJuIQOUlDEhWtgj/Nn7Dx6ex7c2iPKuS0iuNUhvHVttelKanT9UxPNr0V78XHfG1mRZhNnLA4LP3Vkf6T7EupoSDxb3lTRSkkkYtLY6FL4JPjyQh6m1x568aFeMCbFHbCCZEf2OqsW2w9dQ8kCOm2syEHbvgG+Gkfp4n/BLTKIYzxMbJ3ZR5YpthJ48EWKK1DDV6nFIlIb/gsezHfSsFYPWLvBXFBwnfWyxUD9zYZRiT7WYgWDJCdQISFjLpMBAjyBSWAf6MtGrkGQ+gTJzi4TOH/vNq/Rg03UxM48jlD667T1chM2Pk8rZIrLRX9buSwfEPPBnXiFSgNjlGmMJrJF09Dw41OnixUsyhopYqwktuSpj1jq3BPUm9BW81qTe38rmGKFPCZLRPx3lVTEdS7c3lZwa5NYETz5Zdr108kiRy+QgGDrDJlYA7OvJ5ilLR6H9E4xhspBgk9ApwZjS1s4thFY2zx/bh3pcU8njf9hs7gAInibhjskFQ/AMiQ+i5TPY+3e8nlsET1ykixVlgZxsYUCtsr0OhHzFS2Hjf2zMwugpu0NE7LBU0SOOao66J5CninYgVHXpPA+keQh7JmkXNL7Q1oG8aFMRnh/5HLJXLOo1gDp8ICW5lPSYJdDP06Ke0xCynPVe6YWrRsgPgMmw9EVt7m5/QnfM4p7101gmDbYbbmZ8G6KT5lJH8mbMC3+7SNR0Pi261bT65vVr2eSTtPMgrwbiV3+XLOfF8+opnJSxvIuHIdsqRaJdOtZV0bBOUNu5s17WuabULx3t97k8WzlgE9PnAXBm3LTVB8DZAqfFiuy68S+Btvs3TSgyBBy74zOoXMlTzoQ8PNdB+Tw8gAgBGC5xCrhYK+Z+YVEcQPST9cBviHVWLAEtWLatfiMA/kUTmf1bFmnTjrHHpwMsO3zemKfkJO9XK/HerazzkOwFYWILGwqZCfaNdDcJbwaFo5LjgQgiv56ouNOJ3zOuiiRc2Kn2IwDpMaZTOP891Pl1PmgepxxqVV+TCUD9RA4EVfkLGbHBPTe5RpGAuLCR9A1qF/gr4A7ULCZinA042wITN4czaXZmdXCeb+Ydcxf+TPRUX/2JNyIaLjcTqcAZZyexmwrz/Gej5wuXQYIu0Demvx51TyNCT8Fkd4syx1vWRVcFEK0fTys6M//gG2cQLCEb/LfrRgDB2H9+xvq4PfaMLdgMBglXn66TEP4WUAXLMJ9u563f4Kcfzc377oGBvp7X6PB4Ftm5di1yzfzzhzrbYJu78XWpH01KzMCpiK5qmYpvz63oD5IMkILo+Jec2jehWaDtNAx2a4lurJgTJDpZ4xd51NsI1GZac6tkJ4pjBFK9jTOzfRvdGV4r6Y2Gk10oC10korVB+RuRFg0x6FeK8XYhSuFOc6w0vpNRAZhgR4RESDkx6pgXvvzruZ9zeOGrRhUf4EwTYjbpzAvSS5gEEtesFspn2HGU29h0ECtkBKs/EhpnTikzmS/rKOwBUG2yxaUntC0UIA07Ik+hzfHr8aCw/fZcb3BYU4IqoUzQE6E6txo+m3wqtc0DCeJHX+1E2ilTdUwXDE8TjU89k04pD/TS3Yud4pVVlQm5FlK/i2V1PJxiH1mdz35+/VhFkiIiYLPo+UxrLnwpOi7pfirvXSs+Du9tFaACEze64vLK+h0PkTuzlyLWENlOuZFMJBOmYmVdirFUZJhw9UmRaQCoJ2ehYvoiAaG8mjLLEfo4ICeMiE5DpSuBik22l3SMRrEg5AGP3N0xj7yGtVqVtR2RZw5bLWn3uviAFZQIETemIoNku+qT7BsYe4F7hiwpsBN80Ti8zpRFP3EUJnl8zc4mgMOZ/6IqJ7AKBkG8J/BHIOikzSuV3Au80GAKtfBff0H7MCdyzkAtT2vCOTsP7pq+ySKYk37F+kDbXT9vvqTKHJns8rprJN9aJJxnxC239i6A7EkV+mHgnAlIYVdHHD9XZaImDy/H+9hi9bNJIZVAeENGjIRWvLvBhPygoM1DfSQRq6U48iGgQ2Zf3HubkbKjOFRAORKcNelvd3UTya/fDFsQPRCax9ziVEYLcz76QGbf/CvP3dtbVnjuuUlSBR0KT71yLvdUuBLNsSxrx/F77typypW+MQy7QOrUeBLggthkHpDM2rkN4x5AY201RfvniWyV24OCmOcQJkHNeT2JQsmPevPfzHv4dixzgg4t2v2YQ0l0kLJdYBHh+JgUaw3kHPrXMCkSwdAVJe7G8Lknaqb4JuqEef7Hr0ZtvLH7iS7BoeBZm76BIZpxKLyM9Qvqmnx6ZpjHaYdx2E0jrgWateVP78y3WYHQSpQ1jz+KW0/6Hc++r69bSUHDhp9S2tA1FDGPbM4USITUfiBjYhib+QGRF1RNJljZgxpB+dOxc495kp5si7QK8ngOhkSGwPnJNfGq1XO6uVr28LWca1ymlF6qE+tQujl/NY7AIsFNPikiOoRwXozxS6xpc+ltrJ5FKGonWqVHBBT6rAgRzO3HcULxoASMIT8GB+A9tP7nRu3ubffKXwwbr07FSH07imabxRt3plbUCsa1TDmDUAjB4UWe6Rs1a21MrWZG9v5aImWdIZhdNl6tSMsJPCo4SN46VvkiRecKCW0OFr2xrKA/o4FPBNDXbJT8RmfPuFNZY+KdK0epDfKohy1is2LLZYsg9s1bX7TIIc3c9oaNFbW6tOujwENWM0ZgTAX9BT6iGAuae/fC18ARBwfKqKYt2O+WWv3WvEm3MSa77UXAsz6FwfAKs6lGJIFBNP4+LvrId3M4K9Ec9nm2H5Q+j/UfpO1M+iiMk0W1E5r2aXgQC7003xl+k7CCCuWnG2dCo1VXzKF8wRWfzJx8gEcvGtljpkDMF65c27cyE9YD1+9lVHb7vRYD3IoRVAelQR3QBftprVxk7gAjyMace2Aw9z/6pgOg01KwkDYwMY5c6MhqZqRHCjcqRSHxff5/FkmU+88XZH6uyRGwSg2a9y5jQnXjZU/gMIuD+yzRYtibOGb4rRFRLxFyVMPc/oeR3ITb861j6MiE5WtGY2V2Nn3pru14MR/xCmbn0QYk9OAGQVx1DFnZ3C1OGJCZVUtYwT5ecPX6ctHpqoDlVnT9ps40FnFt0eAJ8QvYi/ipRvPZph2jyXs13iu+e4s0usJ53sdcEWdSbdkCC0kGrI58N8ZEgEsuPw4x52XRnNXu8z09FILByavk7nA9WtfUnIDnJ5hN/s+kmGLhX5zygtv5oTLb8PtjldVXeD01VNk2yvMZ8jYS5oMwEuXCgA/uTvr/tI2sQq5ovu7BY+rgLFc0Rgk+EHQi1NWH73xxXlDhaHM39IkS+3qFOWlVlUMUqj9ewZ79i8oK8hkOVOa2NVTFwHVxZSEi0xATT0WC4IVKmtWklNsQsyMdQh6+QvzIW9bpwS5x8vrXfqIqYtwXKzkvJDlCskXstwbR//mGY3A68g75M+rmI8dFv0YwM2M1FVaqNvdsJXnkoWLwv6ednkO7ixj6yaLKA4MmIibF8gtWmK8e6GYvzbdbchW1fq48UQQT3JE02zhrAxqCH/FY/EGub4/c/kb+XPtxv1TziNOzpBDTlBgi/daOFjom2UyEHCsxHSrPFBc6Ypbw7DNN5HlwKBNrqB5V3jZKi9jwoKh5z3qu7evFDxE0h87YT3NfZlkwqQJ91oPz2C8A8dsb5JWpRK43OiqbBjSzP6sMJauZZq68W1xivOZX3I0JB9UBOSGr1Hz5H9GqJZal1XLmILz8iqOaLse71LlRNSEAGetYjxsZ4zZRuYUtlNZplKgxE63CruJ9SsqXKRYg8Og4GJ2fdQUrG+L3EbI160fJjG6FfIW1SKBlGdbrI7Smo1jPPkSHmbwm8BR3DOQHHgJovfGe/0A48uhq8/uMFk24MKpc/eHGNSEQrObdZERMafvT22WMEpSOFwYf/f5jaC2i5fTGSILAlEG8kGXnuLUl4VxkkU56mz0jIdKAm/ru009oGTZU7HWMZSo7VCdO1UjKA4CIi/CbR48WYtTwCR45Ur4fIvvYC7b7MMAkfScuTbaJqDhMWx42lQ4/T1BdVG2yuL6nE0Tg/HkpS14ES9Q6GLL3LFVsijhsWnmqfa41B1pCE9tI4QHupiYnAG4wrtdgwnCkbAV4B8KwIhvS2+YqnWn5uGTwHRWbmX7tU2I76wl8hJAWGXKOYkDshrAh0+M6HiPtHya9YGIkGAJN31Xz+Uc5khIPKy2kaz/oNS6wLZbLCi9HgAJonB+jmj48W0S0YsBhEgtzpEHW5hKi+RNXYQmPud7MiAMKRescNrsqi/U3WeFMUYsBlxVIdTXHfcDRstO1fQqMepXmad0At/7aQKD6olByRVRfD2dYTwHOraumrF23+bYlAd2U5Ni4/eTkDzcTJOX/+bvhN85QZozBaIwkrVQFeQV21Ea2LrE3cs4fm27o/xBMYxjBxCGcCRao8W78IMUjshGgd0aiIqDQAOQIvmH5iFvqVApDZgEB7Ejxybu94rCXp+bqZfbq9insB34ndUceurw7N7slW3JJTkqFCGDj5JZmTkS7flyvqKs68Tqb46QyzhwOZ7o28ShLlRfTMtJD3xwWyrH/ZuSxyQaIUJnpmnzq066eOfMx/566rZaIt4zGL+6CrBXLaXq7YFvf+zD1F+5Z+MfFYVoBsjtA+fLaw8fTwcKE5Wl+qT39EBjB4/jteUluFrnxMAy9tX7dQxYVdssv/x0f7AtYiFvECXsVjsZoL52AwmDbd5mIcFD0o7BHFTgAwB2f0uCLr5dfnsfb8nNpTf9dTecpibb3mSr850iEcn1bwc6i7CcXp2r+ANmjQQAQxdQZ56cPg1MXVCmmQDQt8I4r/wqbya/JwEHsqnAZSRJcNlzCrxO3+JPB8mSQhzersE9aOrYCht7oirMHoyWSef94fEbhzoAvW6E1lcph8eJaVw1XXPkcg+QgGWZx5weuh5Wh9s2ih/knL9+NcPPG7OJFQhpS+Z0v1XL3xuLw9ss3hiefiGBTS4DhqoTBFV8y4neeOkDrOlX9TmnR4YzFkq3xsgStn56LRNQ/fnMiZvSWeqwpN66DgNVDyIqwX/3/UUB4nvWd6EXyKOtk1+lvDR+qn9l/abC+OsurRa82Mli3xTeRCkmQiw03chasjovJ8NepCWkFxMdWUhNm8n6yXeEtqnNrveQigbvBlK8VTEmWSmYYzU1dedb1MXTMxx+/P7ClTktpuJcMxzfw1n9E4zum+5hophO1WJ1vJBjxWr3peqHT1nqCgewl2VzAKS8ieiXFPA+MAiuOXP4PmgEoMPVrdlfu1bQdha+rH8m8Pbnh2rWaevgcsrVL4l7oMjLWieDqdHhDIfGY9F2C1Jt9+LGklSYSp0A8stTA2Ow5L4bD3t6xoS9PJP/cA4yMg5xr+5reBgVaOHNfMpM2CtUCJ2IH5JB0qnbzwH9hAT4+FRLRc8PjsuGM6p/aFscsRz0GDzFUSbJj75OiuAMhXyIyNZ9ThQu6c3NPnIf5UD66qPbxzRjXlAitc9VvXLnPyP/6ilYwRHa0eNV9AkCmjMscQ2lllgB1GOM78HkLqH46vKZiNh3c7oXeXWRzqJab3AOgYxXexpytTXnrwOLhRVOBEW0ldQqXd4WsV6PwD5H3vdyqp1kupSh5/eg6KBiZUG2qcBAdzAMdxwMDyroUF25hLLuNEmo9r5xnCh2ODrD35wEPmTU+AdLu70WrT97fahXpeUOXoiwDJfeKqh8iaJ1hvN3SQAHwXCgLGAKetzAjbBdBl6HAw/52mMzgT88/mbROZJO0P2H7+yyThSumdpF03VkTyoiMttc9qKU/Z6MB8ce3Ub7Hc5GS6QlrdF6bT8zSqSz4A2nMnmE3+4QSMbkPgaaE3lEaXs+4ox+oDUbK1vou0ZdabR99ZhjMpWRlFZmjUuh9qycQdES3FickOYP8kQ0mrF+SDBzB7mLqtKq+mYmH4eODv2v9cxzksppqO7PkAWZEXJ5ZLCwfMW0Q32FeczmGdB+XyylMn6jGNtUrKt94fpadH0V2sAZuulcvzmnviJfvumnfpP1sAFqcGO+flXMLYh3/lvOF43xUX7fkbJYgmclkv/t2+eo3pBQhlCwRevUAlqtCjKM8ucQ3Xgz608Qm3z37VCti0Lp+/2YoRl74f1gAivftOSo9e3lC+2eOaHjT67xjtVAMB/EnYXKmn16PvWafUbybioguI/b/Q9cEcI6tegUSPie1Ry7V2HvZHir0LFNiAZE8OqzAFuSa3S41u+K0Hyv6Ujr7MD4ZxV+BwVNzwgwHXBDVe8Cu+UYUKCrfNYm6M2g39jBmMrTVLDmkyNvCnry07wddTg2RA6SCamVw1sAxR4UEX1S5TXeA2/xhvPKsFnJj3Kam9aoN0KUUn5ADnmgpSgNISkDlYaeTHU+GrdD8exBz3kyKnBwt+CQsjBQWBfilv+wmDJOnZ227BNjr/kLHE9PlOZl8bUJJ3zGAeE0Bdv4NQU1Sw6D7/wMP1ZhPmUUUiVYfZ+tFjDrO5wZiu9uPiy9zpuNH7+rKMFHRSOq6gsYpX3d2KjWQ+NUarMSH8gYTyvjApG5NXUF14lVSaEPTxLdwKJJ+QO8swmDcFpTvRl5+SUHIAMpmNSm+H45wY59inKOdfjDN9RkSlUjkINarBkksNTdmoKsYTElvjYnj0Acz39S3nEIaHtLRWIhAtsa+XFGTlmrmFM1Vvam0MPuLI4mO2oXw9LwSonufky57ZzOgI1tcFNIZBekM82Xdv1N7OmO1S4jA1zTcPBdmvzk9OUmnIaCSk+EaOGmojzJkHTZFwaWDYCoHDClFzKrBXe5j8Q8QmCQxvhmYHbN8CPRqsRLnavl/mwjpcaELwzw76iSyqVf0oyXxM24hi/Fi3M3QraM4noERTgxCWBw8Hv2GVNKONUj4J7ZKuBiFX4EGAO537+mWHE1EDJL4Cgha7S7QrTgGvsLA9dSX9RudD5msfb1KyvWhs350Ub2USYVq/F6FB3BRolhVkVIf/RJEGgXBZruwAMT/Z6hwCbJf5agXm1Mq2Kvwn5wQ6O9G93u9H5Cr+XNTpZc7n2OKhnKJbiR00DqmmIpZ0K3Pi+EzFFyKQ5ekQLKVYPDptnhdvKRtErfhM29u0eNlyYLsQ7eklroWwktHtm4GM+I81Ny8nvTogo/9eVPh4eHFvGyWrKjOZx10Npjc36iUZwdPHMnK0cnVosehI49h4+7hvHxw+qfBiEB2pelUkv8S3NIbNMtmxXZRoCHkqS+JpSvs86KAFI7atZRhTk/vIFyffFifpjToPUj6Rab1hxtxzmKFqdWoERR2VARZyjnm3zcoWBrYZ59WUMD6whAO8tBmCAQ8McHKAqLEdLJFissSli0sIyECcIiBOzyDgNeLUfxGL+mckiCjQtOBIr8YnnKamCETx2PU2pDkL622nT5BVmvOR/2touQWlckN0ue8Rv17/8IHkzn9MBl/rRanB2UCbO+OYlWgSqGY2jLP/9wFaPYwljd/TUloPMQi8lWi9iPA8s4vOVoDzggZ3FAlhWmPSCis9JoEHmmRqPq7ZiISU7GCN2+OATRRRc4cN5Xmx7euwlWW3tQOMzNXWGBBLWl5fZSwn1TdDxk1ds+kZRoeBCNvSrUbb9BoPJ2a0wZCK2dxW3YlK8P5VeEsgOnV/UA2sZ/RGoKx5J552euCFcr4SIJM7on+1U4m7hqWKNGY5PZX1Ywi9zgtB0NSkeKFMC18u1Z0wj2MZMWPj0hSUZSa/s4mnR5AXdODis42ztKmdmP4SmTYPxuYty/QRX6BH9Wg8XOcA9u6BXb6/y+1aB9Lt8oqOTi7tyr6pj8fiFtvN4amPmrQA9w553hCDtdHnn2YD7K6U/X+i4+M9r6zOO7rBQNR/vLITm7HX5xgszvr8xTfSVF4t+KzKoMD9Id4jFNhEoCKLUUtEeAgOwx3qywl0mTNpdBppZrPTzIlBTUzONIDbvwV8l1hS7X5Rqu4d2/eJgEPGCCQaBLQ7VCxzkJLlA3xnzg3/fFTVBViy7eIDeHq8YQJx49APlJH88He89c6wtO2EMk/kWdOLxDiCyKygf02S36NbkP9yswzlM/FV+IDZ9c+4Tw5hfEA9a2AWx9taBeL7tYQAKK/DEf5F30g2rbHrTdL9zJBudm9t5i+L2sPb0twblpgt0LNBdzn33fipicPbpD7Ldntw6rGzVX6a8LGBAusaQkf0pW4WASfMhOlUVcWr1TYaaQ2qmEe2olPQFO/bM6lbp3VImo/FZ8y3jF6L8IuJYdrXW3E8nwidU0WTnTsKE0Vric67T4orseDTsC95v3qVcgf7ZCBUByJ7xpdVWJzXVRJAJEPAKnXieerzSVOBHHyeUoXURciiQm+mtn7SEOIbCQWThx/1ZDkczSxKuoJTEZms9qTsWPWWkYxHXBFXuTb80KWYVtWbOQg2y8jyNYuzIZmMGWPuNOMmxQlxmyMmEYbQM2eLHfsXcEAsNY+/7lwyv2rs5fLC4XZiOuMlrp4S9TJZo6H7OpL5Rk5SR7+lr/K2uUja5XDeIs6nJR6DIVjprKpSrGtB6aAofK9Sb92q6MpfdI025v3F0U7WStiJzrtPFkDRkmfSs95p0t1z23PH0jojPsYzOQiGjwTluoGsiakW1jqVdfH2/wYzXqKgWjny4QD06nWUhduKj6EQFCUimuzvGpT1CGDu5+jw6gYAMwXjw1RCz5vkXKNyWVXlx2lRrjc/L05yCEy1lf8mIt1xL9m7M0nGkKy0kHiwRQsGdinhoWAH5iDYu4dzKjDcGbJfpMg9ZlYZskxaLf2eGo1Xz5kq88q7+UuaGSTRJdqn6/7B0rjepdxT9wLfiBgsytUV16/m3Rl/sGPkEAxlFzjU4uzzeiRVq5BIyP7yGmYoLl0Mp5MnDSVan1kA26QfVQ4hUIwcywwcqmY03a9wVGvWvW2nnVOeXxLQopvIbjTYp3leumTY2Yv34/1AmsQPGfgkfxbzAvf7rl6xjxNOA1PI20BeP3uB24Y+uE34r7hAeNcD9eWVFmlAry6ejDMoTsu4knbG32Idm2X7atwNROzqj6QZ8fwEntcImXj00hzi8KuwOrlTAzdq0nvH49G47ZmYALilI8b62ScjgwfTHFY3EvmONYnx2c9EH9az2p7cFk18prOfkPu6Hi7InSvHebW6MS6w+NnSdZUXFTlEzMTSIBYUWa+Zsu3js/UPorCBxD2GoyYHjxBsXrA658BWdCxUb5cuvm/fD3k2u7bLsnuNkfQPr0qrlO85RDlZo09LeUYwqPFNMt9XXQKwaz2QVpEy72V8NubChkl92A8FpvXuuNIMKp1y7dHxEn4Tt3ojmKAHB4xQqLiMJE8mDxqG0nUQMe94OsQDRZ7mZyQo0YmOxMK8YQF5o4ixPHEPrux1emk30MKCGY+d3anNuY7r5GfggMfD5idEOYHghcvnmBY/8TB3htNwhtCIV+CvTk/QuAnH55kjiN/M3yPL/V50oMGcBmHICcLjLENKsEEcOQ9WhrT7b9wXXjK4//5A99KRmSzp95mvSF01wNQgm1958b+/Sek5BEwAnQsqC6BVZ8ybKKgwvCmdn/9wZAOze2zhK84oqKzKqz+LNpYI7mQYWoh/ek7bE00B6IMFMxm5ZTSUP8pCJToMHo2F3CVL8zsq6KFIf5G/bVBkuVox0P8Xw6D6jc7WrEHVkvUF0zgfr2ELEiQb5uXRrqXwfulhNQ3FNpwcGlM7yPFdJhIu84YqLouARz9SSdJ0gAzJCIuRVQ3UPNOfrOR8AUbCfjtkUZKK6An+F7UX8oGoC48TXUgcyU4W6pmWB6xbxxCG5dattz4Pgi4xaMgNlZ3twkJ0T9ZlOfT8uAi/p/7h7rI5VVE956er9r66pJOuDC2rxX5y/jF1tL/z+3Hq6pMHijh84W8GFb8cf+qdBojbvoWwxYd7d1iytTVs5t5Yu+A+jTgGqKU3mqmMaRqnIByLDFW5giuJDhsbp4oifQbxXdibleQDldazNxfcb6AnpfmWf7dsZDdLOZmUHQsXAmKqUp1GDVGipjuZfe02Xr/WmSQE0Z8F578dpXHM4t+3PAd7us29TKeive69cj41aQ35a4x5xo+zJk6ZR/tkNPPL2/u+oEngVURSVvW2YP1BmI8uysVg/Sx+ISVYaWK7LSR8Z/4viRQWQ8RrHaqirrk556jTq887nbZuAR2/SoJq2M1L0BrGjjkuA/YeXmjTY/JcK/Kht1/kDupfvYHvViz6E8DiAWSTil4wUhyBqQhOXxXi9SLBSgh102la1nrO4wjyB3ouAIUtrByftqgvZl6yvr4ak4xX1JdKRgkC8fee7N6g+7Gc/Pnr+Fwfh0L9lu+jqR/PYEA2oA91vlQPW8L6DZi+tHf8fNkslsUw7Lmum6ZHtWW+jvxy+i4zwli+Vu3k5QQWaesiOijpwC45RBoYti7HMEfMbXn/H1a1l/xtf90ZkBS9uG5MZgocEjbNlRUX6miiIurYCf5GIFMUILWDeKdEfcgTyMAtgl1Hchhkw9itiFVuIyF2UdvBUF7HxML/+8/xaG27C6WO7tr5h0STm6bbS81vFKuU7VT9RgAGkXhLa1ezFayPcIgC+i0WAF8nNI9ZX1j7RKdGHQEb68eOHptU+dm17o2cCFl+D6QyUcMVpex863vc++d3NqP/39wrq8PP9bFY04tNmxwjcMQCfRL6qpMNMQ/HBVtmoJUC0we24ZnPIkiFHErVmSX8zfvEW7Z1We1oa6XewjtcdgC+uL/LOopmBFj315eiGzULLtWvZgCSXhcaaTN95Vekq8om+iM7LfzSQA5eJIFT1q3L/zJOQqTp1+9X05CT91cXLemNONdwqgqp4BHXlSw+uK74483nhxPJXwRKr4bc1n/55QYKfjOLrXwU31pSqx08/Er9T0bSyPP3mKVWrEq9ZqbuH3cti5oV5n9uOMSJeeymvH6DrGh//4Q4wcAR2j+ZR6+c1Z7q9O3eIKOpSgpEu/JUCJd7oEEHBWo4z36PCFSr6OVaRW2b6Jf8s6jgnzghKWdQlgwHky3O/GqMshOz3AurJeXmjkfi9Ci9PDgMagNovxDu3EPLSu+jXbSlqCRv5U09lcIdtKMcf3x9P7p64Y/1KjaLI8ZXmT5Zq6M30X/1KTu7HmkqcagnCerSvGrf+lOiBG5StyAUF8hHD6j+gV46NswH+Ia0K8A3/1vzyegBHfOMfcoEYOoJ0YYInCXe9r9kV9tZc9H3bvJgrjPQWJR7gPxyzFUdFYfLGIU4+Zhp+VfZMRbanS+a/eiRX2xhZwvWp+24lnWuZydXjioYSAqZCIhEaWqpxy3sepE+mtMSoZY3Nnbh/xvE6M2QQlPBFNg+dV+xLz2/pp0nnVMzUayfAPekkDBNDkWm6Nt5++Rt4+EHsfQILw3dW390qyy5FpgXIYNTOneHE+d9J+YLYnRRuCYIH0L5PP3sXJsl7MPu7w94vsQy6epbrTgidaJpnvj2OxTw6ZsVoIe8J3/qbNoW/Fkz2lotiT+baR5OHmluvH3YwPqiOKbGq94phkEdoyBtRAJoA/1Wp9534Ox56vqb7QnWmknxbFOrNRIcV7/HqAJQUpzyFH6LO6dKu6KSHwE0m8YfXwidZxgKp5rD6Mb66Lh1PXz0xZ47NzftBqKg0/Dcb7AJvu2f/AV7CkWPPAWX14rPiYP5Bh1/ryqVKN07xqFXGVJIuEDtMGz9DtMU5BgNahpB5TD5Z9M/vPCYW1vGN2b/cBMKrGVf+gp/u9nk9Y4hRxMF18iZpG05oz4TsHX4psYDy2rjSZR857hzFrR2VNTa6+wq6SzulSjHa3noQGQne9xHMlpmKhEQcBdIUsRAcmGC8vSEpM1ZjEXYmnp3jWBG4/Ghe4VJjYuxH6344nnFnT9midsCN8xgxESC1x2yB6Mi/Lw+IWUmDTQvK4PCY280BUBYREFXgydMTEUsAeW1UWzMLSutQo7EuuKokYIijcgEk+w322B11QPNdsI6GbKueCneic77NY/HwxlWbj7/nnYiYKjKUTKBmtBi7ws3hAuRIZ18/L4oVsbZnczZ9FcbOkiNolgHGNC44Ojgp+bhP/YXuKA5As6KZ9yRpviXZzr3XbsxR6uAxXh7jDZaBbpii0NNetxTbhNK2xx5JGgQkWXMeAlXa0Xf9PRIYtsaTyh5F4Iy7Hn2n6CDfbg19UDne3DdytglcmFKS/vKOpWLMYfqbKyMRfszSBnCgIpJoRqtAngSE1jV3MTCsAcz3hQs3cozb+YPpcST0sgh7zj8O+SxT7j9/oI4ezNJWw3eEn2GALDw3DyCsy3lS3Jzy8lkLvqYsxEn2niP0z9HK+bsvETqtmlzBYjvst/ayEPzFMCY6Cbd8jzMKAZafHiI6sh8tbBQcpz83TvHzx2rHU5ICEAcBDXctnJHArUy/oZ9+eLW5jPtVMuKB33QQ=","base64")).toString()),yR)});var y_=E((wR,I_)=>{(function(t,e){typeof wR=="object"?I_.exports=e():typeof define=="function"&&define.amd?define(e):t.treeify=e()})(wR,function(){function t(n,s){var o=s?"\u2514":"\u251C";return n?o+="\u2500 ":o+="\u2500\u2500\u2510",o}function e(n,s){var o=[];for(var a in n)!n.hasOwnProperty(a)||s&&typeof n[a]=="function"||o.push(a);return o}function r(n,s,o,a,l,c,u){var g="",f=0,h,p,d=a.slice(0);if(d.push([s,o])&&a.length>0&&(a.forEach(function(I,B){B>0&&(g+=(I[1]?" ":"\u2502")+" "),!p&&I[0]===s&&(p=!0)}),g+=t(n,o)+n,l&&(typeof s!="object"||s instanceof Date)&&(g+=": "+s),p&&(g+=" (circular ref.)"),u(g)),!p&&typeof s=="object"){var m=e(s,c);m.forEach(function(I){h=++f===m.length,r(I,s[I],h,d,l,c,u)})}}var i={};return i.asLines=function(n,s,o,a){var l=typeof o!="function"?o:!1;r(".",n,!1,[],s,l,a||o)},i.asTree=function(n,s,o){var a="";return r(".",n,!1,[],s,o,function(l){a+=l+` +`}),a},i})});var x_=E((Uct,bR)=>{"use strict";var pTe=t=>{let e=!1,r=!1,i=!1;for(let n=0;n{if(!(typeof t=="string"||Array.isArray(t)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let r=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(t)?t=t.map(n=>n.trim()).filter(n=>n.length).join("-"):t=t.trim(),t.length===0?"":t.length===1?e.pascalCase?t.toUpperCase():t.toLowerCase():(t!==t.toLowerCase()&&(t=pTe(t)),t=t.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\d+(\w|$)/g,n=>n.toUpperCase()),r(t))};bR.exports=S_;bR.exports.default=S_});var Na=E(TR=>{"use strict";Object.defineProperty(TR,"__esModule",{value:!0});TR.default=L_;function L_(){}L_.prototype={diff:function(e,r){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=i.callback;typeof i=="function"&&(n=i,i={}),this.options=i;var s=this;function o(d){return n?(setTimeout(function(){n(void 0,d)},0),!0):d}e=this.castInput(e),r=this.castInput(r),e=this.removeEmpty(this.tokenize(e)),r=this.removeEmpty(this.tokenize(r));var a=r.length,l=e.length,c=1,u=a+l,g=[{newPos:-1,components:[]}],f=this.extractCommon(g[0],r,e,0);if(g[0].newPos+1>=a&&f+1>=l)return o([{value:this.join(r),count:r.length}]);function h(){for(var d=-1*c;d<=c;d+=2){var m=void 0,I=g[d-1],B=g[d+1],b=(B?B.newPos:0)-d;I&&(g[d-1]=void 0);var R=I&&I.newPos+1=a&&b+1>=l)return o(yTe(s,m.components,r,e,s.useLongestToken));g[d]=m}c++}if(n)(function d(){setTimeout(function(){if(c>u)return n();h()||d()},0)})();else for(;c<=u;){var p=h();if(p)return p}},pushComponent:function(e,r,i){var n=e[e.length-1];n&&n.added===r&&n.removed===i?e[e.length-1]={count:n.count+1,added:r,removed:i}:e.push({count:1,added:r,removed:i})},extractCommon:function(e,r,i,n){for(var s=r.length,o=i.length,a=e.newPos,l=a-n,c=0;a+1h.length?d:h}),c.value=t.join(u)}else c.value=t.join(r.slice(a,a+c.count));a+=c.count,c.added||(l+=c.count)}}var f=e[o-1];return o>1&&typeof f.value=="string"&&(f.added||f.removed)&&t.equals("",f.value)&&(e[o-2].value+=f.value,e.pop()),e}function wTe(t){return{newPos:t.newPos,components:t.components.slice(0)}}});var M_=E(Cd=>{"use strict";Object.defineProperty(Cd,"__esModule",{value:!0});Cd.diffChars=BTe;Cd.characterDiff=void 0;var bTe=QTe(Na());function QTe(t){return t&&t.__esModule?t:{default:t}}var T_=new bTe.default;Cd.characterDiff=T_;function BTe(t,e,r){return T_.diff(t,e,r)}});var OR=E(MR=>{"use strict";Object.defineProperty(MR,"__esModule",{value:!0});MR.generateOptions=vTe;function vTe(t,e){if(typeof t=="function")e.callback=t;else if(t)for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}});var U_=E(Ng=>{"use strict";Object.defineProperty(Ng,"__esModule",{value:!0});Ng.diffWords=STe;Ng.diffWordsWithSpace=xTe;Ng.wordDiff=void 0;var PTe=kTe(Na()),DTe=OR();function kTe(t){return t&&t.__esModule?t:{default:t}}var O_=/^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/,K_=/\S/,md=new PTe.default;Ng.wordDiff=md;md.equals=function(t,e){return this.options.ignoreCase&&(t=t.toLowerCase(),e=e.toLowerCase()),t===e||this.options.ignoreWhitespace&&!K_.test(t)&&!K_.test(e)};md.tokenize=function(t){for(var e=t.split(/(\s+|[()[\]{}'"]|\b)/),r=0;r{"use strict";Object.defineProperty(Lg,"__esModule",{value:!0});Lg.diffLines=RTe;Lg.diffTrimmedLines=FTe;Lg.lineDiff=void 0;var LTe=NTe(Na()),TTe=OR();function NTe(t){return t&&t.__esModule?t:{default:t}}var OB=new LTe.default;Lg.lineDiff=OB;OB.tokenize=function(t){var e=[],r=t.split(/(\n|\r\n)/);r[r.length-1]||r.pop();for(var i=0;i{"use strict";Object.defineProperty(Ed,"__esModule",{value:!0});Ed.diffSentences=MTe;Ed.sentenceDiff=void 0;var KTe=OTe(Na());function OTe(t){return t&&t.__esModule?t:{default:t}}var KR=new KTe.default;Ed.sentenceDiff=KR;KR.tokenize=function(t){return t.split(/(\S.+?[.!?])(?=\s+|$)/)};function MTe(t,e,r){return KR.diff(t,e,r)}});var G_=E(Id=>{"use strict";Object.defineProperty(Id,"__esModule",{value:!0});Id.diffCss=UTe;Id.cssDiff=void 0;var GTe=HTe(Na());function HTe(t){return t&&t.__esModule?t:{default:t}}var UR=new GTe.default;Id.cssDiff=UR;UR.tokenize=function(t){return t.split(/([{}:;,]|\s+)/)};function UTe(t,e,r){return UR.diff(t,e,r)}});var Y_=E(Tg=>{"use strict";Object.defineProperty(Tg,"__esModule",{value:!0});Tg.diffJson=jTe;Tg.canonicalize=UB;Tg.jsonDiff=void 0;var j_=YTe(Na()),qTe=KB();function YTe(t){return t&&t.__esModule?t:{default:t}}function HB(t){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?HB=function(r){return typeof r}:HB=function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},HB(t)}var JTe=Object.prototype.toString,bc=new j_.default;Tg.jsonDiff=bc;bc.useLongestToken=!0;bc.tokenize=qTe.lineDiff.tokenize;bc.castInput=function(t){var e=this.options,r=e.undefinedReplacement,i=e.stringifyReplacer,n=i===void 0?function(s,o){return typeof o=="undefined"?r:o}:i;return typeof t=="string"?t:JSON.stringify(UB(t,null,null,n),n," ")};bc.equals=function(t,e){return j_.default.prototype.equals.call(bc,t.replace(/,([\r\n])/g,"$1"),e.replace(/,([\r\n])/g,"$1"))};function jTe(t,e,r){return bc.diff(t,e,r)}function UB(t,e,r,i,n){e=e||[],r=r||[],i&&(t=i(n,t));var s;for(s=0;s{"use strict";Object.defineProperty(yd,"__esModule",{value:!0});yd.diffArrays=WTe;yd.arrayDiff=void 0;var VTe=zTe(Na());function zTe(t){return t&&t.__esModule?t:{default:t}}var wd=new VTe.default;yd.arrayDiff=wd;wd.tokenize=function(t){return t.slice()};wd.join=wd.removeEmpty=function(t){return t};function WTe(t,e,r){return wd.diff(t,e,r)}});var GB=E(HR=>{"use strict";Object.defineProperty(HR,"__esModule",{value:!0});HR.parsePatch=_Te;function _Te(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=t.split(/\r\n|[\n\v\f\r\x85]/),i=t.match(/\r\n|[\n\v\f\r\x85]/g)||[],n=[],s=0;function o(){var c={};for(n.push(c);s{"use strict";Object.defineProperty(GR,"__esModule",{value:!0});GR.default=XTe;function XTe(t,e,r){var i=!0,n=!1,s=!1,o=1;return function a(){if(i&&!s){if(n?o++:i=!1,t+o<=r)return o;s=!0}if(!n)return s||(i=!0),e<=t-o?-o++:(n=!0,a())}}});var V_=E(jB=>{"use strict";Object.defineProperty(jB,"__esModule",{value:!0});jB.applyPatch=W_;jB.applyPatches=ZTe;var z_=GB(),eMe=$Te(J_());function $Te(t){return t&&t.__esModule?t:{default:t}}function W_(t,e){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(typeof e=="string"&&(e=(0,z_.parsePatch)(e)),Array.isArray(e)){if(e.length>1)throw new Error("applyPatch only works with a single input.");e=e[0]}var i=t.split(/\r\n|[\n\v\f\r\x85]/),n=t.match(/\r\n|[\n\v\f\r\x85]/g)||[],s=e.hunks,o=r.compareLine||function(F,D,he,pe){return D===pe},a=0,l=r.fuzzFactor||0,c=0,u=0,g,f;function h(F,D){for(var he=0;he0?pe[0]:" ",Pe=pe.length>0?pe.substr(1):pe;if(Ne===" "||Ne==="-"){if(!o(D+1,i[D],Ne,Pe)&&(a++,a>l))return!1;D++}}return!0}for(var p=0;p0?ne[0]:" ",A=ne.length>0?ne.substr(1):ne,V=L.linedelimiters[J];if(q===" ")K++;else if(q==="-")i.splice(K,1),n.splice(K,1);else if(q==="+")i.splice(K,0,A),n.splice(K,0,V),K++;else if(q==="\\"){var W=L.lines[J-1]?L.lines[J-1][0]:null;W==="+"?g=!0:W==="-"&&(f=!0)}}}if(g)for(;!i[i.length-1];)i.pop(),n.pop();else f&&(i.push(""),n.push(` +`));for(var X=0;X{"use strict";Object.defineProperty(Bd,"__esModule",{value:!0});Bd.structuredPatch=__;Bd.createTwoFilesPatch=X_;Bd.createPatch=tMe;var rMe=KB();function jR(t){return sMe(t)||nMe(t)||iMe()}function iMe(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function nMe(t){if(Symbol.iterator in Object(t)||Object.prototype.toString.call(t)==="[object Arguments]")return Array.from(t)}function sMe(t){if(Array.isArray(t)){for(var e=0,r=new Array(t.length);e0?l(L.lines.slice(-o.context)):[],u-=f.length,g-=f.length)}(H=f).push.apply(H,jR(R.map(function(X){return(b.added?"+":"-")+X}))),b.added?p+=R.length:h+=R.length}else{if(u)if(R.length<=o.context*2&&B=a.length-2&&R.length<=o.context){var A=/\n$/.test(r),V=/\n$/.test(i),W=R.length==0&&f.length>q.oldLines;!A&&W&&f.splice(q.oldLines,0,"\\ No newline at end of file"),(!A&&!W||!V)&&f.push("\\ No newline at end of file")}c.push(q),u=0,g=0,f=[]}h+=R.length,p+=R.length}},m=0;m{"use strict";Object.defineProperty(YB,"__esModule",{value:!0});YB.arrayEqual=oMe;YB.arrayStartsWith=Z_;function oMe(t,e){return t.length!==e.length?!1:Z_(t,e)}function Z_(t,e){if(e.length>t.length)return!1;for(var r=0;r{"use strict";Object.defineProperty(qB,"__esModule",{value:!0});qB.calcLineCount=eX;qB.merge=aMe;var AMe=YR(),lMe=GB(),qR=$_();function Mg(t){return gMe(t)||uMe(t)||cMe()}function cMe(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function uMe(t){if(Symbol.iterator in Object(t)||Object.prototype.toString.call(t)==="[object Arguments]")return Array.from(t)}function gMe(t){if(Array.isArray(t)){for(var e=0,r=new Array(t.length);e{"use strict";Object.defineProperty(zR,"__esModule",{value:!0});zR.convertChangesToDMP=dMe;function dMe(t){for(var e=[],r,i,n=0;n{"use strict";Object.defineProperty(VR,"__esModule",{value:!0});VR.convertChangesToXML=CMe;function CMe(t){for(var e=[],r=0;r"):i.removed&&e.push(""),e.push(mMe(i.value)),i.added?e.push(""):i.removed&&e.push("")}return e.join("")}function mMe(t){var e=t;return e=e.replace(/&/g,"&"),e=e.replace(//g,">"),e=e.replace(/"/g,"""),e}});var CX=E(br=>{"use strict";Object.defineProperty(br,"__esModule",{value:!0});Object.defineProperty(br,"Diff",{enumerable:!0,get:function(){return EMe.default}});Object.defineProperty(br,"diffChars",{enumerable:!0,get:function(){return IMe.diffChars}});Object.defineProperty(br,"diffWords",{enumerable:!0,get:function(){return fX.diffWords}});Object.defineProperty(br,"diffWordsWithSpace",{enumerable:!0,get:function(){return fX.diffWordsWithSpace}});Object.defineProperty(br,"diffLines",{enumerable:!0,get:function(){return hX.diffLines}});Object.defineProperty(br,"diffTrimmedLines",{enumerable:!0,get:function(){return hX.diffTrimmedLines}});Object.defineProperty(br,"diffSentences",{enumerable:!0,get:function(){return yMe.diffSentences}});Object.defineProperty(br,"diffCss",{enumerable:!0,get:function(){return wMe.diffCss}});Object.defineProperty(br,"diffJson",{enumerable:!0,get:function(){return pX.diffJson}});Object.defineProperty(br,"canonicalize",{enumerable:!0,get:function(){return pX.canonicalize}});Object.defineProperty(br,"diffArrays",{enumerable:!0,get:function(){return BMe.diffArrays}});Object.defineProperty(br,"applyPatch",{enumerable:!0,get:function(){return dX.applyPatch}});Object.defineProperty(br,"applyPatches",{enumerable:!0,get:function(){return dX.applyPatches}});Object.defineProperty(br,"parsePatch",{enumerable:!0,get:function(){return QMe.parsePatch}});Object.defineProperty(br,"merge",{enumerable:!0,get:function(){return bMe.merge}});Object.defineProperty(br,"structuredPatch",{enumerable:!0,get:function(){return _R.structuredPatch}});Object.defineProperty(br,"createTwoFilesPatch",{enumerable:!0,get:function(){return _R.createTwoFilesPatch}});Object.defineProperty(br,"createPatch",{enumerable:!0,get:function(){return _R.createPatch}});Object.defineProperty(br,"convertChangesToDMP",{enumerable:!0,get:function(){return vMe.convertChangesToDMP}});Object.defineProperty(br,"convertChangesToXML",{enumerable:!0,get:function(){return SMe.convertChangesToXML}});var EMe=xMe(Na()),IMe=M_(),fX=U_(),hX=KB(),yMe=H_(),wMe=G_(),pX=Y_(),BMe=q_(),dX=V_(),QMe=GB(),bMe=cX(),_R=YR(),vMe=uX(),SMe=gX();function xMe(t){return t&&t.__esModule?t:{default:t}}});var WB=E((agt,mX)=>{var kMe=As(),PMe=Nw(),DMe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,RMe=/^\w*$/;function FMe(t,e){if(kMe(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||PMe(t)?!0:RMe.test(t)||!DMe.test(t)||e!=null&&t in Object(e)}mX.exports=FMe});var Gs=E((Agt,EX)=>{function NMe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}EX.exports=NMe});var zB=E((lgt,IX)=>{var LMe=Ac(),TMe=Gs(),MMe="[object AsyncFunction]",OMe="[object Function]",KMe="[object GeneratorFunction]",UMe="[object Proxy]";function HMe(t){if(!TMe(t))return!1;var e=LMe(t);return e==OMe||e==KMe||e==MMe||e==UMe}IX.exports=HMe});var wX=E((cgt,yX)=>{var GMe=Ks(),jMe=GMe["__core-js_shared__"];yX.exports=jMe});var bX=E((ugt,BX)=>{var XR=wX(),QX=function(){var t=/[^.]+$/.exec(XR&&XR.keys&&XR.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function YMe(t){return!!QX&&QX in t}BX.exports=YMe});var ZR=E((ggt,vX)=>{var qMe=Function.prototype,JMe=qMe.toString;function WMe(t){if(t!=null){try{return JMe.call(t)}catch(e){}try{return t+""}catch(e){}}return""}vX.exports=WMe});var xX=E((fgt,SX)=>{var zMe=zB(),VMe=bX(),_Me=Gs(),XMe=ZR(),ZMe=/[\\^$.*+?()[\]{}|]/g,$Me=/^\[object .+?Constructor\]$/,eOe=Function.prototype,tOe=Object.prototype,rOe=eOe.toString,iOe=tOe.hasOwnProperty,nOe=RegExp("^"+rOe.call(iOe).replace(ZMe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function sOe(t){if(!_Me(t)||VMe(t))return!1;var e=zMe(t)?nOe:$Me;return e.test(XMe(t))}SX.exports=sOe});var PX=E((hgt,kX)=>{function oOe(t,e){return t==null?void 0:t[e]}kX.exports=oOe});var UA=E((pgt,DX)=>{var aOe=xX(),AOe=PX();function lOe(t,e){var r=AOe(t,e);return aOe(r)?r:void 0}DX.exports=lOe});var Qd=E((dgt,RX)=>{var cOe=UA(),uOe=cOe(Object,"create");RX.exports=uOe});var LX=E((Cgt,FX)=>{var NX=Qd();function gOe(){this.__data__=NX?NX(null):{},this.size=0}FX.exports=gOe});var MX=E((mgt,TX)=>{function fOe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}TX.exports=fOe});var KX=E((Egt,OX)=>{var hOe=Qd(),pOe="__lodash_hash_undefined__",dOe=Object.prototype,COe=dOe.hasOwnProperty;function mOe(t){var e=this.__data__;if(hOe){var r=e[t];return r===pOe?void 0:r}return COe.call(e,t)?e[t]:void 0}OX.exports=mOe});var HX=E((Igt,UX)=>{var EOe=Qd(),IOe=Object.prototype,yOe=IOe.hasOwnProperty;function wOe(t){var e=this.__data__;return EOe?e[t]!==void 0:yOe.call(e,t)}UX.exports=wOe});var jX=E((ygt,GX)=>{var BOe=Qd(),QOe="__lodash_hash_undefined__";function bOe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=BOe&&e===void 0?QOe:e,this}GX.exports=bOe});var qX=E((wgt,YX)=>{var vOe=LX(),SOe=MX(),xOe=KX(),kOe=HX(),POe=jX();function Og(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{function DOe(){this.__data__=[],this.size=0}JX.exports=DOe});var Kg=E((Qgt,zX)=>{function ROe(t,e){return t===e||t!==t&&e!==e}zX.exports=ROe});var bd=E((bgt,VX)=>{var FOe=Kg();function NOe(t,e){for(var r=t.length;r--;)if(FOe(t[r][0],e))return r;return-1}VX.exports=NOe});var XX=E((vgt,_X)=>{var LOe=bd(),TOe=Array.prototype,MOe=TOe.splice;function OOe(t){var e=this.__data__,r=LOe(e,t);if(r<0)return!1;var i=e.length-1;return r==i?e.pop():MOe.call(e,r,1),--this.size,!0}_X.exports=OOe});var $X=E((Sgt,ZX)=>{var KOe=bd();function UOe(t){var e=this.__data__,r=KOe(e,t);return r<0?void 0:e[r][1]}ZX.exports=UOe});var tZ=E((xgt,eZ)=>{var HOe=bd();function GOe(t){return HOe(this.__data__,t)>-1}eZ.exports=GOe});var iZ=E((kgt,rZ)=>{var jOe=bd();function YOe(t,e){var r=this.__data__,i=jOe(r,t);return i<0?(++this.size,r.push([t,e])):r[i][1]=e,this}rZ.exports=YOe});var vd=E((Pgt,nZ)=>{var qOe=WX(),JOe=XX(),WOe=$X(),zOe=tZ(),VOe=iZ();function Ug(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var _Oe=UA(),XOe=Ks(),ZOe=_Oe(XOe,"Map");sZ.exports=ZOe});var AZ=E((Rgt,oZ)=>{var aZ=qX(),$Oe=vd(),eKe=VB();function tKe(){this.size=0,this.__data__={hash:new aZ,map:new(eKe||$Oe),string:new aZ}}oZ.exports=tKe});var cZ=E((Fgt,lZ)=>{function rKe(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}lZ.exports=rKe});var Sd=E((Ngt,uZ)=>{var iKe=cZ();function nKe(t,e){var r=t.__data__;return iKe(e)?r[typeof e=="string"?"string":"hash"]:r.map}uZ.exports=nKe});var fZ=E((Lgt,gZ)=>{var sKe=Sd();function oKe(t){var e=sKe(this,t).delete(t);return this.size-=e?1:0,e}gZ.exports=oKe});var pZ=E((Tgt,hZ)=>{var aKe=Sd();function AKe(t){return aKe(this,t).get(t)}hZ.exports=AKe});var CZ=E((Mgt,dZ)=>{var lKe=Sd();function cKe(t){return lKe(this,t).has(t)}dZ.exports=cKe});var EZ=E((Ogt,mZ)=>{var uKe=Sd();function gKe(t,e){var r=uKe(this,t),i=r.size;return r.set(t,e),this.size+=r.size==i?0:1,this}mZ.exports=gKe});var _B=E((Kgt,IZ)=>{var fKe=AZ(),hKe=fZ(),pKe=pZ(),dKe=CZ(),CKe=EZ();function Hg(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var wZ=_B(),mKe="Expected a function";function $R(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(mKe);var r=function(){var i=arguments,n=e?e.apply(this,i):i[0],s=r.cache;if(s.has(n))return s.get(n);var o=t.apply(this,i);return r.cache=s.set(n,o)||s,o};return r.cache=new($R.Cache||wZ),r}$R.Cache=wZ;yZ.exports=$R});var bZ=E((Hgt,QZ)=>{var EKe=BZ(),IKe=500;function yKe(t){var e=EKe(t,function(i){return r.size===IKe&&r.clear(),i}),r=e.cache;return e}QZ.exports=yKe});var SZ=E((Ggt,vZ)=>{var wKe=bZ(),BKe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,QKe=/\\(\\)?/g,bKe=wKe(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(BKe,function(r,i,n,s){e.push(n?s.replace(QKe,"$1"):i||r)}),e});vZ.exports=bKe});var Gg=E((jgt,xZ)=>{var vKe=As(),SKe=WB(),xKe=SZ(),kKe=gg();function PKe(t,e){return vKe(t)?t:SKe(t,e)?[t]:xKe(kKe(t))}xZ.exports=PKe});var Sc=E((Ygt,kZ)=>{var DKe=Nw(),RKe=1/0;function FKe(t){if(typeof t=="string"||DKe(t))return t;var e=t+"";return e=="0"&&1/t==-RKe?"-0":e}kZ.exports=FKe});var xd=E((qgt,PZ)=>{var NKe=Gg(),LKe=Sc();function TKe(t,e){e=NKe(e,t);for(var r=0,i=e.length;t!=null&&r{var MKe=UA(),OKe=function(){try{var t=MKe(Object,"defineProperty");return t({},"",{}),t}catch(e){}}();DZ.exports=OKe});var jg=E((Wgt,RZ)=>{var FZ=eF();function KKe(t,e,r){e=="__proto__"&&FZ?FZ(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}RZ.exports=KKe});var XB=E((zgt,NZ)=>{var UKe=jg(),HKe=Kg(),GKe=Object.prototype,jKe=GKe.hasOwnProperty;function YKe(t,e,r){var i=t[e];(!(jKe.call(t,e)&&HKe(i,r))||r===void 0&&!(e in t))&&UKe(t,e,r)}NZ.exports=YKe});var kd=E((Vgt,LZ)=>{var qKe=9007199254740991,JKe=/^(?:0|[1-9]\d*)$/;function WKe(t,e){var r=typeof t;return e=e==null?qKe:e,!!e&&(r=="number"||r!="symbol"&&JKe.test(t))&&t>-1&&t%1==0&&t{var zKe=XB(),VKe=Gg(),_Ke=kd(),MZ=Gs(),XKe=Sc();function ZKe(t,e,r,i){if(!MZ(t))return t;e=VKe(e,t);for(var n=-1,s=e.length,o=s-1,a=t;a!=null&&++n{var $Ke=xd(),e1e=tF(),t1e=Gg();function r1e(t,e,r){for(var i=-1,n=e.length,s={};++i{function i1e(t,e){return t!=null&&e in Object(t)}UZ.exports=i1e});var jZ=E(($gt,GZ)=>{var n1e=Ac(),s1e=Qo(),o1e="[object Arguments]";function a1e(t){return s1e(t)&&n1e(t)==o1e}GZ.exports=a1e});var Pd=E((eft,YZ)=>{var qZ=jZ(),A1e=Qo(),JZ=Object.prototype,l1e=JZ.hasOwnProperty,c1e=JZ.propertyIsEnumerable,u1e=qZ(function(){return arguments}())?qZ:function(t){return A1e(t)&&l1e.call(t,"callee")&&!c1e.call(t,"callee")};YZ.exports=u1e});var ZB=E((tft,WZ)=>{var g1e=9007199254740991;function f1e(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=g1e}WZ.exports=f1e});var rF=E((rft,zZ)=>{var h1e=Gg(),p1e=Pd(),d1e=As(),C1e=kd(),m1e=ZB(),E1e=Sc();function I1e(t,e,r){e=h1e(e,t);for(var i=-1,n=e.length,s=!1;++i{var y1e=HZ(),w1e=rF();function B1e(t,e){return t!=null&&w1e(t,e,y1e)}VZ.exports=B1e});var XZ=E((nft,_Z)=>{var Q1e=KZ(),b1e=iF();function v1e(t,e){return Q1e(t,e,function(r,i){return b1e(t,i)})}_Z.exports=v1e});var $B=E((sft,ZZ)=>{function S1e(t,e){for(var r=-1,i=e.length,n=t.length;++r{var e$=ac(),x1e=Pd(),k1e=As(),t$=e$?e$.isConcatSpreadable:void 0;function P1e(t){return k1e(t)||x1e(t)||!!(t$&&t&&t[t$])}$Z.exports=P1e});var s$=E((aft,i$)=>{var D1e=$B(),R1e=r$();function n$(t,e,r,i,n){var s=-1,o=t.length;for(r||(r=R1e),n||(n=[]);++s0&&r(a)?e>1?n$(a,e-1,r,i,n):D1e(n,a):i||(n[n.length]=a)}return n}i$.exports=n$});var a$=E((Aft,o$)=>{var F1e=s$();function N1e(t){var e=t==null?0:t.length;return e?F1e(t,1):[]}o$.exports=N1e});var l$=E((lft,A$)=>{function L1e(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}A$.exports=L1e});var nF=E((cft,c$)=>{var T1e=l$(),u$=Math.max;function M1e(t,e,r){return e=u$(e===void 0?t.length-1:e,0),function(){for(var i=arguments,n=-1,s=u$(i.length-e,0),o=Array(s);++n{function O1e(t){return function(){return t}}g$.exports=O1e});var e0=E((gft,h$)=>{function K1e(t){return t}h$.exports=K1e});var C$=E((fft,p$)=>{var U1e=f$(),d$=eF(),H1e=e0(),G1e=d$?function(t,e){return d$(t,"toString",{configurable:!0,enumerable:!1,value:U1e(e),writable:!0})}:H1e;p$.exports=G1e});var E$=E((hft,m$)=>{var j1e=800,Y1e=16,q1e=Date.now;function J1e(t){var e=0,r=0;return function(){var i=q1e(),n=Y1e-(i-r);if(r=i,n>0){if(++e>=j1e)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}m$.exports=J1e});var sF=E((pft,I$)=>{var W1e=C$(),z1e=E$(),V1e=z1e(W1e);I$.exports=V1e});var w$=E((dft,y$)=>{var _1e=a$(),X1e=nF(),Z1e=sF();function $1e(t){return Z1e(X1e(t,void 0,_1e),t+"")}y$.exports=$1e});var Q$=E((Cft,B$)=>{var eUe=XZ(),tUe=w$(),rUe=tUe(function(t,e){return t==null?{}:eUe(t,e)});B$.exports=rUe});var M$=E((lpt,N$)=>{"use strict";var pF;try{pF=Map}catch(t){}var dF;try{dF=Set}catch(t){}function L$(t,e,r){if(!t||typeof t!="object"||typeof t=="function")return t;if(t.nodeType&&"cloneNode"in t)return t.cloneNode(!0);if(t instanceof Date)return new Date(t.getTime());if(t instanceof RegExp)return new RegExp(t);if(Array.isArray(t))return t.map(T$);if(pF&&t instanceof pF)return new Map(Array.from(t.entries()));if(dF&&t instanceof dF)return new Set(Array.from(t.values()));if(t instanceof Object){e.push(t);var i=Object.create(t);r.push(i);for(var n in t){var s=e.findIndex(function(o){return o===t[n]});i[n]=s>-1?r[s]:L$(t[n],e,r)}return i}return t}function T$(t){return L$(t,[],[])}N$.exports=T$});var Nd=E(CF=>{"use strict";Object.defineProperty(CF,"__esModule",{value:!0});CF.default=uUe;var gUe=Object.prototype.toString,fUe=Error.prototype.toString,hUe=RegExp.prototype.toString,pUe=typeof Symbol!="undefined"?Symbol.prototype.toString:()=>"",dUe=/^Symbol\((.*)\)(.*)$/;function CUe(t){return t!=+t?"NaN":t===0&&1/t<0?"-0":""+t}function O$(t,e=!1){if(t==null||t===!0||t===!1)return""+t;let r=typeof t;if(r==="number")return CUe(t);if(r==="string")return e?`"${t}"`:t;if(r==="function")return"[Function "+(t.name||"anonymous")+"]";if(r==="symbol")return pUe.call(t).replace(dUe,"Symbol($1)");let i=gUe.call(t).slice(8,-1);return i==="Date"?isNaN(t.getTime())?""+t:t.toISOString(t):i==="Error"||t instanceof Error?"["+fUe.call(t)+"]":i==="RegExp"?hUe.call(t):null}function uUe(t,e){let r=O$(t,e);return r!==null?r:JSON.stringify(t,function(i,n){let s=O$(this[i],e);return s!==null?s:n},2)}});var La=E(ci=>{"use strict";Object.defineProperty(ci,"__esModule",{value:!0});ci.default=ci.array=ci.object=ci.boolean=ci.date=ci.number=ci.string=ci.mixed=void 0;var K$=mUe(Nd());function mUe(t){return t&&t.__esModule?t:{default:t}}var U$={default:"${path} is invalid",required:"${path} is a required field",oneOf:"${path} must be one of the following values: ${values}",notOneOf:"${path} must not be one of the following values: ${values}",notType:({path:t,type:e,value:r,originalValue:i})=>{let n=i!=null&&i!==r,s=`${t} must be a \`${e}\` type, but the final value was: \`${(0,K$.default)(r,!0)}\``+(n?` (cast from the value \`${(0,K$.default)(i,!0)}\`).`:".");return r===null&&(s+='\n If "null" is intended as an empty value be sure to mark the schema as `.nullable()`'),s},defined:"${path} must be defined"};ci.mixed=U$;var H$={length:"${path} must be exactly ${length} characters",min:"${path} must be at least ${min} characters",max:"${path} must be at most ${max} characters",matches:'${path} must match the following: "${regex}"',email:"${path} must be a valid email",url:"${path} must be a valid URL",uuid:"${path} must be a valid UUID",trim:"${path} must be a trimmed string",lowercase:"${path} must be a lowercase string",uppercase:"${path} must be a upper case string"};ci.string=H$;var G$={min:"${path} must be greater than or equal to ${min}",max:"${path} must be less than or equal to ${max}",lessThan:"${path} must be less than ${less}",moreThan:"${path} must be greater than ${more}",positive:"${path} must be a positive number",negative:"${path} must be a negative number",integer:"${path} must be an integer"};ci.number=G$;var j$={min:"${path} field must be later than ${min}",max:"${path} field must be at earlier than ${max}"};ci.date=j$;var Y$={isValue:"${path} field must be ${value}"};ci.boolean=Y$;var q$={noUnknown:"${path} field has unspecified keys: ${unknown}"};ci.object=q$;var J$={min:"${path} field must have at least ${min} items",max:"${path} field must have less than or equal to ${max} items",length:"${path} must be have ${length} items"};ci.array=J$;var EUe=Object.assign(Object.create(null),{mixed:U$,string:H$,number:G$,date:j$,object:q$,array:J$,boolean:Y$});ci.default=EUe});var z$=E((gpt,W$)=>{var IUe=Object.prototype,yUe=IUe.hasOwnProperty;function wUe(t,e){return t!=null&&yUe.call(t,e)}W$.exports=wUe});var Ld=E((fpt,V$)=>{var BUe=z$(),QUe=rF();function bUe(t,e){return t!=null&&QUe(t,e,BUe)}V$.exports=bUe});var qg=E(n0=>{"use strict";Object.defineProperty(n0,"__esModule",{value:!0});n0.default=void 0;var vUe=t=>t&&t.__isYupSchema__;n0.default=vUe});var Z$=E(s0=>{"use strict";Object.defineProperty(s0,"__esModule",{value:!0});s0.default=void 0;var SUe=_$(Ld()),xUe=_$(qg());function _$(t){return t&&t.__esModule?t:{default:t}}var X$=class{constructor(e,r){if(this.refs=e,this.refs=e,typeof r=="function"){this.fn=r;return}if(!(0,SUe.default)(r,"is"))throw new TypeError("`is:` is required for `when()` conditions");if(!r.then&&!r.otherwise)throw new TypeError("either `then:` or `otherwise:` is required for `when()` conditions");let{is:i,then:n,otherwise:s}=r,o=typeof i=="function"?i:(...a)=>a.every(l=>l===i);this.fn=function(...a){let l=a.pop(),c=a.pop(),u=o(...a)?n:s;if(!!u)return typeof u=="function"?u(c):c.concat(u.resolve(l))}}resolve(e,r){let i=this.refs.map(s=>s.getValue(r==null?void 0:r.value,r==null?void 0:r.parent,r==null?void 0:r.context)),n=this.fn.apply(e,i.concat(e,r));if(n===void 0||n===e)return e;if(!(0,xUe.default)(n))throw new TypeError("conditions must return a schema object");return n.resolve(r)}},kUe=X$;s0.default=kUe});var EF=E(mF=>{"use strict";Object.defineProperty(mF,"__esModule",{value:!0});mF.default=PUe;function PUe(t){return t==null?[]:[].concat(t)}});var xc=E(o0=>{"use strict";Object.defineProperty(o0,"__esModule",{value:!0});o0.default=void 0;var DUe=$$(Nd()),RUe=$$(EF());function $$(t){return t&&t.__esModule?t:{default:t}}function IF(){return IF=Object.assign||function(t){for(var e=1;e(0,DUe.default)(r[s])):typeof e=="function"?e(r):e}static isError(e){return e&&e.name==="ValidationError"}constructor(e,r,i,n){super();this.name="ValidationError",this.value=r,this.path=i,this.type=n,this.errors=[],this.inner=[],(0,RUe.default)(e).forEach(s=>{Td.isError(s)?(this.errors.push(...s.errors),this.inner=this.inner.concat(s.inner.length?s.inner:s)):this.errors.push(s)}),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0],Error.captureStackTrace&&Error.captureStackTrace(this,Td)}};o0.default=Td});var a0=E(yF=>{"use strict";Object.defineProperty(yF,"__esModule",{value:!0});yF.default=NUe;var wF=LUe(xc());function LUe(t){return t&&t.__esModule?t:{default:t}}var TUe=t=>{let e=!1;return(...r)=>{e||(e=!0,t(...r))}};function NUe(t,e){let{endEarly:r,tests:i,args:n,value:s,errors:o,sort:a,path:l}=t,c=TUe(e),u=i.length,g=[];if(o=o||[],!u)return o.length?c(new wF.default(o,s,l)):c(null,s);for(let f=0;f{function MUe(t){return function(e,r,i){for(var n=-1,s=Object(e),o=i(e),a=o.length;a--;){var l=o[t?a:++n];if(r(s[l],l,s)===!1)break}return e}}eee.exports=MUe});var BF=E((Ipt,ree)=>{var OUe=tee(),KUe=OUe();ree.exports=KUe});var nee=E((ypt,iee)=>{function UUe(t,e){for(var r=-1,i=Array(t);++r{function HUe(){return!1}see.exports=HUe});var Od=E((Md,Jg)=>{var GUe=Ks(),jUe=oee(),aee=typeof Md=="object"&&Md&&!Md.nodeType&&Md,Aee=aee&&typeof Jg=="object"&&Jg&&!Jg.nodeType&&Jg,YUe=Aee&&Aee.exports===aee,lee=YUe?GUe.Buffer:void 0,qUe=lee?lee.isBuffer:void 0,JUe=qUe||jUe;Jg.exports=JUe});var uee=E((Bpt,cee)=>{var WUe=Ac(),zUe=ZB(),VUe=Qo(),_Ue="[object Arguments]",XUe="[object Array]",ZUe="[object Boolean]",$Ue="[object Date]",e2e="[object Error]",t2e="[object Function]",r2e="[object Map]",i2e="[object Number]",n2e="[object Object]",s2e="[object RegExp]",o2e="[object Set]",a2e="[object String]",A2e="[object WeakMap]",l2e="[object ArrayBuffer]",c2e="[object DataView]",u2e="[object Float32Array]",g2e="[object Float64Array]",f2e="[object Int8Array]",h2e="[object Int16Array]",p2e="[object Int32Array]",d2e="[object Uint8Array]",C2e="[object Uint8ClampedArray]",m2e="[object Uint16Array]",E2e="[object Uint32Array]",lr={};lr[u2e]=lr[g2e]=lr[f2e]=lr[h2e]=lr[p2e]=lr[d2e]=lr[C2e]=lr[m2e]=lr[E2e]=!0;lr[_Ue]=lr[XUe]=lr[l2e]=lr[ZUe]=lr[c2e]=lr[$Ue]=lr[e2e]=lr[t2e]=lr[r2e]=lr[i2e]=lr[n2e]=lr[s2e]=lr[o2e]=lr[a2e]=lr[A2e]=!1;function I2e(t){return VUe(t)&&zUe(t.length)&&!!lr[WUe(t)]}cee.exports=I2e});var A0=E((Qpt,gee)=>{function y2e(t){return function(e){return t(e)}}gee.exports=y2e});var l0=E((Kd,Wg)=>{var w2e=WP(),fee=typeof Kd=="object"&&Kd&&!Kd.nodeType&&Kd,Ud=fee&&typeof Wg=="object"&&Wg&&!Wg.nodeType&&Wg,B2e=Ud&&Ud.exports===fee,QF=B2e&&w2e.process,Q2e=function(){try{var t=Ud&&Ud.require&&Ud.require("util").types;return t||QF&&QF.binding&&QF.binding("util")}catch(e){}}();Wg.exports=Q2e});var c0=E((bpt,hee)=>{var b2e=uee(),v2e=A0(),pee=l0(),dee=pee&&pee.isTypedArray,S2e=dee?v2e(dee):b2e;hee.exports=S2e});var bF=E((vpt,Cee)=>{var x2e=nee(),k2e=Pd(),P2e=As(),D2e=Od(),R2e=kd(),F2e=c0(),N2e=Object.prototype,L2e=N2e.hasOwnProperty;function T2e(t,e){var r=P2e(t),i=!r&&k2e(t),n=!r&&!i&&D2e(t),s=!r&&!i&&!n&&F2e(t),o=r||i||n||s,a=o?x2e(t.length,String):[],l=a.length;for(var c in t)(e||L2e.call(t,c))&&!(o&&(c=="length"||n&&(c=="offset"||c=="parent")||s&&(c=="buffer"||c=="byteLength"||c=="byteOffset")||R2e(c,l)))&&a.push(c);return a}Cee.exports=T2e});var u0=E((Spt,mee)=>{var M2e=Object.prototype;function O2e(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||M2e;return t===r}mee.exports=O2e});var vF=E((xpt,Eee)=>{function K2e(t,e){return function(r){return t(e(r))}}Eee.exports=K2e});var yee=E((kpt,Iee)=>{var U2e=vF(),H2e=U2e(Object.keys,Object);Iee.exports=H2e});var Bee=E((Ppt,wee)=>{var G2e=u0(),j2e=yee(),Y2e=Object.prototype,q2e=Y2e.hasOwnProperty;function J2e(t){if(!G2e(t))return j2e(t);var e=[];for(var r in Object(t))q2e.call(t,r)&&r!="constructor"&&e.push(r);return e}wee.exports=J2e});var Hd=E((Dpt,Qee)=>{var W2e=zB(),z2e=ZB();function V2e(t){return t!=null&&z2e(t.length)&&!W2e(t)}Qee.exports=V2e});var zg=E((Rpt,bee)=>{var _2e=bF(),X2e=Bee(),Z2e=Hd();function $2e(t){return Z2e(t)?_2e(t):X2e(t)}bee.exports=$2e});var SF=E((Fpt,vee)=>{var eHe=BF(),tHe=zg();function rHe(t,e){return t&&eHe(t,e,tHe)}vee.exports=rHe});var xee=E((Npt,See)=>{var iHe=vd();function nHe(){this.__data__=new iHe,this.size=0}See.exports=nHe});var Pee=E((Lpt,kee)=>{function sHe(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}kee.exports=sHe});var Ree=E((Tpt,Dee)=>{function oHe(t){return this.__data__.get(t)}Dee.exports=oHe});var Nee=E((Mpt,Fee)=>{function aHe(t){return this.__data__.has(t)}Fee.exports=aHe});var Tee=E((Opt,Lee)=>{var AHe=vd(),lHe=VB(),cHe=_B(),uHe=200;function gHe(t,e){var r=this.__data__;if(r instanceof AHe){var i=r.__data__;if(!lHe||i.length{var fHe=vd(),hHe=xee(),pHe=Pee(),dHe=Ree(),CHe=Nee(),mHe=Tee();function Vg(t){var e=this.__data__=new fHe(t);this.size=e.size}Vg.prototype.clear=hHe;Vg.prototype.delete=pHe;Vg.prototype.get=dHe;Vg.prototype.has=CHe;Vg.prototype.set=mHe;Mee.exports=Vg});var Kee=E((Upt,Oee)=>{var EHe="__lodash_hash_undefined__";function IHe(t){return this.__data__.set(t,EHe),this}Oee.exports=IHe});var Hee=E((Hpt,Uee)=>{function yHe(t){return this.__data__.has(t)}Uee.exports=yHe});var jee=E((Gpt,Gee)=>{var wHe=_B(),BHe=Kee(),QHe=Hee();function g0(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new wHe;++e{function bHe(t,e){for(var r=-1,i=t==null?0:t.length;++r{function vHe(t,e){return t.has(e)}Jee.exports=vHe});var xF=E((qpt,zee)=>{var SHe=jee(),xHe=qee(),kHe=Wee(),PHe=1,DHe=2;function RHe(t,e,r,i,n,s){var o=r&PHe,a=t.length,l=e.length;if(a!=l&&!(o&&l>a))return!1;var c=s.get(t),u=s.get(e);if(c&&u)return c==e&&u==t;var g=-1,f=!0,h=r&DHe?new SHe:void 0;for(s.set(t,e),s.set(e,t);++g{var FHe=Ks(),NHe=FHe.Uint8Array;Vee.exports=NHe});var Xee=E((Wpt,_ee)=>{function LHe(t){var e=-1,r=Array(t.size);return t.forEach(function(i,n){r[++e]=[n,i]}),r}_ee.exports=LHe});var $ee=E((zpt,Zee)=>{function THe(t){var e=-1,r=Array(t.size);return t.forEach(function(i){r[++e]=i}),r}Zee.exports=THe});var nte=E((Vpt,ete)=>{var tte=ac(),rte=kF(),MHe=Kg(),OHe=xF(),KHe=Xee(),UHe=$ee(),HHe=1,GHe=2,jHe="[object Boolean]",YHe="[object Date]",qHe="[object Error]",JHe="[object Map]",WHe="[object Number]",zHe="[object RegExp]",VHe="[object Set]",_He="[object String]",XHe="[object Symbol]",ZHe="[object ArrayBuffer]",$He="[object DataView]",ite=tte?tte.prototype:void 0,PF=ite?ite.valueOf:void 0;function eGe(t,e,r,i,n,s,o){switch(r){case $He:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case ZHe:return!(t.byteLength!=e.byteLength||!s(new rte(t),new rte(e)));case jHe:case YHe:case WHe:return MHe(+t,+e);case qHe:return t.name==e.name&&t.message==e.message;case zHe:case _He:return t==e+"";case JHe:var a=KHe;case VHe:var l=i&HHe;if(a||(a=UHe),t.size!=e.size&&!l)return!1;var c=o.get(t);if(c)return c==e;i|=GHe,o.set(t,e);var u=OHe(a(t),a(e),i,n,s,o);return o.delete(t),u;case XHe:if(PF)return PF.call(t)==PF.call(e)}return!1}ete.exports=eGe});var DF=E((_pt,ste)=>{var tGe=$B(),rGe=As();function iGe(t,e,r){var i=e(t);return rGe(t)?i:tGe(i,r(t))}ste.exports=iGe});var ate=E((Xpt,ote)=>{function nGe(t,e){for(var r=-1,i=t==null?0:t.length,n=0,s=[];++r{function sGe(){return[]}Ate.exports=sGe});var f0=E(($pt,lte)=>{var oGe=ate(),aGe=RF(),AGe=Object.prototype,lGe=AGe.propertyIsEnumerable,cte=Object.getOwnPropertySymbols,cGe=cte?function(t){return t==null?[]:(t=Object(t),oGe(cte(t),function(e){return lGe.call(t,e)}))}:aGe;lte.exports=cGe});var FF=E((edt,ute)=>{var uGe=DF(),gGe=f0(),fGe=zg();function hGe(t){return uGe(t,fGe,gGe)}ute.exports=hGe});var hte=E((tdt,gte)=>{var fte=FF(),pGe=1,dGe=Object.prototype,CGe=dGe.hasOwnProperty;function mGe(t,e,r,i,n,s){var o=r&pGe,a=fte(t),l=a.length,c=fte(e),u=c.length;if(l!=u&&!o)return!1;for(var g=l;g--;){var f=a[g];if(!(o?f in e:CGe.call(e,f)))return!1}var h=s.get(t),p=s.get(e);if(h&&p)return h==e&&p==t;var d=!0;s.set(t,e),s.set(e,t);for(var m=o;++g{var EGe=UA(),IGe=Ks(),yGe=EGe(IGe,"DataView");pte.exports=yGe});var mte=E((idt,Cte)=>{var wGe=UA(),BGe=Ks(),QGe=wGe(BGe,"Promise");Cte.exports=QGe});var Ite=E((ndt,Ete)=>{var bGe=UA(),vGe=Ks(),SGe=bGe(vGe,"Set");Ete.exports=SGe});var wte=E((sdt,yte)=>{var xGe=UA(),kGe=Ks(),PGe=xGe(kGe,"WeakMap");yte.exports=PGe});var jd=E((odt,Bte)=>{var NF=dte(),LF=VB(),TF=mte(),MF=Ite(),OF=wte(),Qte=Ac(),_g=ZR(),bte="[object Map]",DGe="[object Object]",vte="[object Promise]",Ste="[object Set]",xte="[object WeakMap]",kte="[object DataView]",RGe=_g(NF),FGe=_g(LF),NGe=_g(TF),LGe=_g(MF),TGe=_g(OF),kc=Qte;(NF&&kc(new NF(new ArrayBuffer(1)))!=kte||LF&&kc(new LF)!=bte||TF&&kc(TF.resolve())!=vte||MF&&kc(new MF)!=Ste||OF&&kc(new OF)!=xte)&&(kc=function(t){var e=Qte(t),r=e==DGe?t.constructor:void 0,i=r?_g(r):"";if(i)switch(i){case RGe:return kte;case FGe:return bte;case NGe:return vte;case LGe:return Ste;case TGe:return xte}return e});Bte.exports=kc});var Mte=E((adt,Pte)=>{var KF=Gd(),MGe=xF(),OGe=nte(),KGe=hte(),Dte=jd(),Rte=As(),Fte=Od(),UGe=c0(),HGe=1,Nte="[object Arguments]",Lte="[object Array]",h0="[object Object]",GGe=Object.prototype,Tte=GGe.hasOwnProperty;function jGe(t,e,r,i,n,s){var o=Rte(t),a=Rte(e),l=o?Lte:Dte(t),c=a?Lte:Dte(e);l=l==Nte?h0:l,c=c==Nte?h0:c;var u=l==h0,g=c==h0,f=l==c;if(f&&Fte(t)){if(!Fte(e))return!1;o=!0,u=!1}if(f&&!u)return s||(s=new KF),o||UGe(t)?MGe(t,e,r,i,n,s):OGe(t,e,l,r,i,n,s);if(!(r&HGe)){var h=u&&Tte.call(t,"__wrapped__"),p=g&&Tte.call(e,"__wrapped__");if(h||p){var d=h?t.value():t,m=p?e.value():e;return s||(s=new KF),n(d,m,r,i,s)}}return f?(s||(s=new KF),KGe(t,e,r,i,n,s)):!1}Pte.exports=jGe});var UF=E((Adt,Ote)=>{var YGe=Mte(),Kte=Qo();function Ute(t,e,r,i,n){return t===e?!0:t==null||e==null||!Kte(t)&&!Kte(e)?t!==t&&e!==e:YGe(t,e,r,i,Ute,n)}Ote.exports=Ute});var Gte=E((ldt,Hte)=>{var qGe=Gd(),JGe=UF(),WGe=1,zGe=2;function VGe(t,e,r,i){var n=r.length,s=n,o=!i;if(t==null)return!s;for(t=Object(t);n--;){var a=r[n];if(o&&a[2]?a[1]!==t[a[0]]:!(a[0]in t))return!1}for(;++n{var _Ge=Gs();function XGe(t){return t===t&&!_Ge(t)}jte.exports=XGe});var qte=E((udt,Yte)=>{var ZGe=HF(),$Ge=zg();function eje(t){for(var e=$Ge(t),r=e.length;r--;){var i=e[r],n=t[i];e[r]=[i,n,ZGe(n)]}return e}Yte.exports=eje});var GF=E((gdt,Jte)=>{function tje(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==void 0||t in Object(r))}}Jte.exports=tje});var zte=E((fdt,Wte)=>{var rje=Gte(),ije=qte(),nje=GF();function sje(t){var e=ije(t);return e.length==1&&e[0][2]?nje(e[0][0],e[0][1]):function(r){return r===t||rje(r,t,e)}}Wte.exports=sje});var p0=E((hdt,Vte)=>{var oje=xd();function aje(t,e,r){var i=t==null?void 0:oje(t,e);return i===void 0?r:i}Vte.exports=aje});var Xte=E((pdt,_te)=>{var Aje=UF(),lje=p0(),cje=iF(),uje=WB(),gje=HF(),fje=GF(),hje=Sc(),pje=1,dje=2;function Cje(t,e){return uje(t)&&gje(e)?fje(hje(t),e):function(r){var i=lje(r,t);return i===void 0&&i===e?cje(r,t):Aje(e,i,pje|dje)}}_te.exports=Cje});var $te=E((ddt,Zte)=>{function mje(t){return function(e){return e==null?void 0:e[t]}}Zte.exports=mje});var tre=E((Cdt,ere)=>{var Eje=xd();function Ije(t){return function(e){return Eje(e,t)}}ere.exports=Ije});var ire=E((mdt,rre)=>{var yje=$te(),wje=tre(),Bje=WB(),Qje=Sc();function bje(t){return Bje(t)?yje(Qje(t)):wje(t)}rre.exports=bje});var jF=E((Edt,nre)=>{var vje=zte(),Sje=Xte(),xje=e0(),kje=As(),Pje=ire();function Dje(t){return typeof t=="function"?t:t==null?xje:typeof t=="object"?kje(t)?Sje(t[0],t[1]):vje(t):Pje(t)}nre.exports=Dje});var YF=E((Idt,sre)=>{var Rje=jg(),Fje=SF(),Nje=jF();function Lje(t,e){var r={};return e=Nje(e,3),Fje(t,function(i,n,s){Rje(r,n,e(i,n,s))}),r}sre.exports=Lje});var Yd=E((ydt,ore)=>{"use strict";function Pc(t){this._maxSize=t,this.clear()}Pc.prototype.clear=function(){this._size=0,this._values=Object.create(null)};Pc.prototype.get=function(t){return this._values[t]};Pc.prototype.set=function(t,e){return this._size>=this._maxSize&&this.clear(),t in this._values||this._size++,this._values[t]=e};var Tje=/[^.^\]^[]+|(?=\[\]|\.\.)/g,are=/^\d+$/,Mje=/^\d/,Oje=/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g,Kje=/^\s*(['"]?)(.*?)(\1)\s*$/,qF=512,Are=new Pc(qF),lre=new Pc(qF),cre=new Pc(qF);ore.exports={Cache:Pc,split:WF,normalizePath:JF,setter:function(t){var e=JF(t);return lre.get(t)||lre.set(t,function(i,n){for(var s=0,o=e.length,a=i;s{"use strict";Object.defineProperty(qd,"__esModule",{value:!0});qd.create=Yje;qd.default=void 0;var qje=Yd(),d0={context:"$",value:"."};function Yje(t,e){return new C0(t,e)}var C0=class{constructor(e,r={}){if(typeof e!="string")throw new TypeError("ref must be a string, got: "+e);if(this.key=e.trim(),e==="")throw new TypeError("ref must be a non-empty string");this.isContext=this.key[0]===d0.context,this.isValue=this.key[0]===d0.value,this.isSibling=!this.isContext&&!this.isValue;let i=this.isContext?d0.context:this.isValue?d0.value:"";this.path=this.key.slice(i.length),this.getter=this.path&&(0,qje.getter)(this.path,!0),this.map=r.map}getValue(e,r,i){let n=this.isContext?i:this.isValue?e:r;return this.getter&&(n=this.getter(n||{})),this.map&&(n=this.map(n)),n}cast(e,r){return this.getValue(e,r==null?void 0:r.parent,r==null?void 0:r.context)}resolve(){return this}describe(){return{type:"ref",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(e){return e&&e.__isYupRef}};qd.default=C0;C0.prototype.__isYupRef=!0});var ure=E(VF=>{"use strict";Object.defineProperty(VF,"__esModule",{value:!0});VF.default=Jje;var Wje=_F(YF()),m0=_F(xc()),zje=_F(Dc());function _F(t){return t&&t.__esModule?t:{default:t}}function E0(){return E0=Object.assign||function(t){for(var e=1;e=0)&&(r[n]=t[n]);return r}function Jje(t){function e(r,i){let{value:n,path:s="",label:o,options:a,originalValue:l,sync:c}=r,u=Vje(r,["value","path","label","options","originalValue","sync"]),{name:g,test:f,params:h,message:p}=t,{parent:d,context:m}=a;function I(L){return zje.default.isRef(L)?L.getValue(n,d,m):L}function B(L={}){let K=(0,Wje.default)(E0({value:n,originalValue:l,label:o,path:L.path||s},h,L.params),I),J=new m0.default(m0.default.formatError(L.message||p,K),n,K.path,L.type||g);return J.params=K,J}let b=E0({path:s,parent:d,type:g,createError:B,resolve:I,options:a,originalValue:l},u);if(!c){try{Promise.resolve(f.call(b,n,b)).then(L=>{m0.default.isError(L)?i(L):L?i(null,L):i(B())})}catch(L){i(L)}return}let R;try{var H;if(R=f.call(b,n,b),typeof((H=R)==null?void 0:H.then)=="function")throw new Error(`Validation test of type: "${b.type}" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`)}catch(L){i(L);return}m0.default.isError(R)?i(R):R?i(null,R):i(B())}return e.OPTIONS=t,e}});var XF=E(Jd=>{"use strict";Object.defineProperty(Jd,"__esModule",{value:!0});Jd.getIn=gre;Jd.default=void 0;var _je=Yd(),Xje=t=>t.substr(0,t.length-1).substr(1);function gre(t,e,r,i=r){let n,s,o;return e?((0,_je.forEach)(e,(a,l,c)=>{let u=l?Xje(a):a;if(t=t.resolve({context:i,parent:n,value:r}),t.innerType){let g=c?parseInt(u,10):0;if(r&&g>=r.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${a}, in the path: ${e}. because there is no value at that index. `);n=r,r=r&&r[g],t=t.innerType}if(!c){if(!t.fields||!t.fields[u])throw new Error(`The schema does not contain the path: ${e}. (failed at: ${o} which is a type: "${t._type}")`);n=r,r=r&&r[u],t=t.fields[u]}s=u,o=l?"["+a+"]":"."+a}),{schema:t,parent:n,parentPath:s}):{parent:n,parentPath:e,schema:t}}var Zje=(t,e,r,i)=>gre(t,e,r,i).schema,$je=Zje;Jd.default=$je});var hre=E(I0=>{"use strict";Object.defineProperty(I0,"__esModule",{value:!0});I0.default=void 0;var fre=eYe(Dc());function eYe(t){return t&&t.__esModule?t:{default:t}}var y0=class{constructor(){this.list=new Set,this.refs=new Map}get size(){return this.list.size+this.refs.size}describe(){let e=[];for(let r of this.list)e.push(r);for(let[,r]of this.refs)e.push(r.describe());return e}toArray(){return Array.from(this.list).concat(Array.from(this.refs.values()))}add(e){fre.default.isRef(e)?this.refs.set(e.key,e):this.list.add(e)}delete(e){fre.default.isRef(e)?this.refs.delete(e.key):this.list.delete(e)}has(e,r){if(this.list.has(e))return!0;let i,n=this.refs.values();for(;i=n.next(),!i.done;)if(r(i.value)===e)return!0;return!1}clone(){let e=new y0;return e.list=new Set(this.list),e.refs=new Map(this.refs),e}merge(e,r){let i=this.clone();return e.list.forEach(n=>i.add(n)),e.refs.forEach(n=>i.add(n)),r.list.forEach(n=>i.delete(n)),r.refs.forEach(n=>i.delete(n)),i}};I0.default=y0});var Ma=E(w0=>{"use strict";Object.defineProperty(w0,"__esModule",{value:!0});w0.default=void 0;var pre=Ta(M$()),Xg=La(),tYe=Ta(Z$()),dre=Ta(a0()),B0=Ta(ure()),Cre=Ta(Nd()),rYe=Ta(Dc()),iYe=XF(),nYe=Ta(EF()),mre=Ta(xc()),Ere=Ta(hre());function Ta(t){return t&&t.__esModule?t:{default:t}}function ds(){return ds=Object.assign||function(t){for(var e=1;e{this.typeError(Xg.mixed.notType)}),this.type=(e==null?void 0:e.type)||"mixed",this.spec=ds({strip:!1,strict:!1,abortEarly:!0,recursive:!0,nullable:!1,presence:"optional"},e==null?void 0:e.spec)}get _type(){return this.type}_typeCheck(e){return!0}clone(e){if(this._mutate)return e&&Object.assign(this.spec,e),this;let r=Object.create(Object.getPrototypeOf(this));return r.type=this.type,r._typeError=this._typeError,r._whitelistError=this._whitelistError,r._blacklistError=this._blacklistError,r._whitelist=this._whitelist.clone(),r._blacklist=this._blacklist.clone(),r.exclusiveTests=ds({},this.exclusiveTests),r.deps=[...this.deps],r.conditions=[...this.conditions],r.tests=[...this.tests],r.transforms=[...this.transforms],r.spec=(0,pre.default)(ds({},this.spec,e)),r}label(e){var r=this.clone();return r.spec.label=e,r}meta(...e){if(e.length===0)return this.spec.meta;let r=this.clone();return r.spec.meta=Object.assign(r.spec.meta||{},e[0]),r}withMutation(e){let r=this._mutate;this._mutate=!0;let i=e(this);return this._mutate=r,i}concat(e){if(!e||e===this)return this;if(e.type!==this.type&&this.type!=="mixed")throw new TypeError(`You cannot \`concat()\` schema's of different types: ${this.type} and ${e.type}`);let r=this,i=e.clone(),n=ds({},r.spec,i.spec);return i.spec=n,i._typeError||(i._typeError=r._typeError),i._whitelistError||(i._whitelistError=r._whitelistError),i._blacklistError||(i._blacklistError=r._blacklistError),i._whitelist=r._whitelist.merge(e._whitelist,e._blacklist),i._blacklist=r._blacklist.merge(e._blacklist,e._whitelist),i.tests=r.tests,i.exclusiveTests=r.exclusiveTests,i.withMutation(s=>{e.tests.forEach(o=>{s.test(o.OPTIONS)})}),i}isType(e){return this.spec.nullable&&e===null?!0:this._typeCheck(e)}resolve(e){let r=this;if(r.conditions.length){let i=r.conditions;r=r.clone(),r.conditions=[],r=i.reduce((n,s)=>s.resolve(n,e),r),r=r.resolve(e)}return r}cast(e,r={}){let i=this.resolve(ds({value:e},r)),n=i._cast(e,r);if(e!==void 0&&r.assert!==!1&&i.isType(n)!==!0){let s=(0,Cre.default)(e),o=(0,Cre.default)(n);throw new TypeError(`The value of ${r.path||"field"} could not be cast to a value that satisfies the schema type: "${i._type}". + +attempted value: ${s} +`+(o!==s?`result of cast: ${o}`:""))}return n}_cast(e,r){let i=e===void 0?e:this.transforms.reduce((n,s)=>s.call(this,n,e,this),e);return i===void 0&&(i=this.getDefault()),i}_validate(e,r={},i){let{sync:n,path:s,from:o=[],originalValue:a=e,strict:l=this.spec.strict,abortEarly:c=this.spec.abortEarly}=r,u=e;l||(u=this._cast(u,ds({assert:!1},r)));let g={value:u,path:s,options:r,originalValue:a,schema:this,label:this.spec.label,sync:n,from:o},f=[];this._typeError&&f.push(this._typeError),this._whitelistError&&f.push(this._whitelistError),this._blacklistError&&f.push(this._blacklistError),(0,dre.default)({args:g,value:u,path:s,sync:n,tests:f,endEarly:c},h=>{if(h)return void i(h,u);(0,dre.default)({tests:this.tests,args:g,path:s,sync:n,value:u,endEarly:c},i)})}validate(e,r,i){let n=this.resolve(ds({},r,{value:e}));return typeof i=="function"?n._validate(e,r,i):new Promise((s,o)=>n._validate(e,r,(a,l)=>{a?o(a):s(l)}))}validateSync(e,r){let i=this.resolve(ds({},r,{value:e})),n;return i._validate(e,ds({},r,{sync:!0}),(s,o)=>{if(s)throw s;n=o}),n}isValid(e,r){return this.validate(e,r).then(()=>!0,i=>{if(mre.default.isError(i))return!1;throw i})}isValidSync(e,r){try{return this.validateSync(e,r),!0}catch(i){if(mre.default.isError(i))return!1;throw i}}_getDefault(){let e=this.spec.default;return e==null?e:typeof e=="function"?e.call(this):(0,pre.default)(e)}getDefault(e){return this.resolve(e||{})._getDefault()}default(e){return arguments.length===0?this._getDefault():this.clone({default:e})}strict(e=!0){var r=this.clone();return r.spec.strict=e,r}_isPresent(e){return e!=null}defined(e=Xg.mixed.defined){return this.test({message:e,name:"defined",exclusive:!0,test(r){return r!==void 0}})}required(e=Xg.mixed.required){return this.clone({presence:"required"}).withMutation(r=>r.test({message:e,name:"required",exclusive:!0,test(i){return this.schema._isPresent(i)}}))}notRequired(){var e=this.clone({presence:"optional"});return e.tests=e.tests.filter(r=>r.OPTIONS.name!=="required"),e}nullable(e=!0){var r=this.clone({nullable:e!==!1});return r}transform(e){var r=this.clone();return r.transforms.push(e),r}test(...e){let r;if(e.length===1?typeof e[0]=="function"?r={test:e[0]}:r=e[0]:e.length===2?r={name:e[0],test:e[1]}:r={name:e[0],message:e[1],test:e[2]},r.message===void 0&&(r.message=Xg.mixed.default),typeof r.test!="function")throw new TypeError("`test` is a required parameters");let i=this.clone(),n=(0,B0.default)(r),s=r.exclusive||r.name&&i.exclusiveTests[r.name]===!0;if(r.exclusive&&!r.name)throw new TypeError("Exclusive tests must provide a unique `name` identifying the test");return r.name&&(i.exclusiveTests[r.name]=!!r.exclusive),i.tests=i.tests.filter(o=>!(o.OPTIONS.name===r.name&&(s||o.OPTIONS.test===n.OPTIONS.test))),i.tests.push(n),i}when(e,r){!Array.isArray(e)&&typeof e!="string"&&(r=e,e=".");let i=this.clone(),n=(0,nYe.default)(e).map(s=>new rYe.default(s));return n.forEach(s=>{s.isSibling&&i.deps.push(s.key)}),i.conditions.push(new tYe.default(n,r)),i}typeError(e){var r=this.clone();return r._typeError=(0,B0.default)({message:e,name:"typeError",test(i){return i!==void 0&&!this.schema.isType(i)?this.createError({params:{type:this.schema._type}}):!0}}),r}oneOf(e,r=Xg.mixed.oneOf){var i=this.clone();return e.forEach(n=>{i._whitelist.add(n),i._blacklist.delete(n)}),i._whitelistError=(0,B0.default)({message:r,name:"oneOf",test(n){if(n===void 0)return!0;let s=this.schema._whitelist;return s.has(n,this.resolve)?!0:this.createError({params:{values:s.toArray().join(", ")}})}}),i}notOneOf(e,r=Xg.mixed.notOneOf){var i=this.clone();return e.forEach(n=>{i._blacklist.add(n),i._whitelist.delete(n)}),i._blacklistError=(0,B0.default)({message:r,name:"notOneOf",test(n){let s=this.schema._blacklist;return s.has(n,this.resolve)?this.createError({params:{values:s.toArray().join(", ")}}):!0}}),i}strip(e=!0){let r=this.clone();return r.spec.strip=e,r}describe(){let e=this.clone(),{label:r,meta:i}=e.spec;return{meta:i,label:r,type:e.type,oneOf:e._whitelist.describe(),notOneOf:e._blacklist.describe(),tests:e.tests.map(s=>({name:s.OPTIONS.name,params:s.OPTIONS.params})).filter((s,o,a)=>a.findIndex(l=>l.name===s.name)===o)}}};w0.default=Do;Do.prototype.__isYupSchema__=!0;for(let t of["validate","validateSync"])Do.prototype[`${t}At`]=function(e,r,i={}){let{parent:n,parentPath:s,schema:o}=(0,iYe.getIn)(this,e,r,i.context);return o[t](n&&n[s],ds({},i,{parent:n,path:e}))};for(let t of["equals","is"])Do.prototype[t]=Do.prototype.oneOf;for(let t of["not","nope"])Do.prototype[t]=Do.prototype.notOneOf;Do.prototype.optional=Do.prototype.notRequired});var yre=E(Wd=>{"use strict";Object.defineProperty(Wd,"__esModule",{value:!0});Wd.create=Ire;Wd.default=void 0;var oYe=sYe(Ma());function sYe(t){return t&&t.__esModule?t:{default:t}}var ZF=oYe.default,aYe=ZF;Wd.default=aYe;function Ire(){return new ZF}Ire.prototype=ZF.prototype});var Zg=E(Q0=>{"use strict";Object.defineProperty(Q0,"__esModule",{value:!0});Q0.default=void 0;var AYe=t=>t==null;Q0.default=AYe});var vre=E(zd=>{"use strict";Object.defineProperty(zd,"__esModule",{value:!0});zd.create=wre;zd.default=void 0;var lYe=Bre(Ma()),Qre=La(),bre=Bre(Zg());function Bre(t){return t&&t.__esModule?t:{default:t}}function wre(){return new b0}var b0=class extends lYe.default{constructor(){super({type:"boolean"});this.withMutation(()=>{this.transform(function(e){if(!this.isType(e)){if(/^(true|1)$/i.test(String(e)))return!0;if(/^(false|0)$/i.test(String(e)))return!1}return e})})}_typeCheck(e){return e instanceof Boolean&&(e=e.valueOf()),typeof e=="boolean"}isTrue(e=Qre.boolean.isValue){return this.test({message:e,name:"is-value",exclusive:!0,params:{value:"true"},test(r){return(0,bre.default)(r)||r===!0}})}isFalse(e=Qre.boolean.isValue){return this.test({message:e,name:"is-value",exclusive:!0,params:{value:"false"},test(r){return(0,bre.default)(r)||r===!1}})}};zd.default=b0;wre.prototype=b0.prototype});var kre=E(Vd=>{"use strict";Object.defineProperty(Vd,"__esModule",{value:!0});Vd.create=Sre;Vd.default=void 0;var Ro=La(),Oa=xre(Zg()),cYe=xre(Ma());function xre(t){return t&&t.__esModule?t:{default:t}}var uYe=/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i,gYe=/^((https?|ftp):)?\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,fYe=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,hYe=t=>(0,Oa.default)(t)||t===t.trim(),pYe={}.toString();function Sre(){return new v0}var v0=class extends cYe.default{constructor(){super({type:"string"});this.withMutation(()=>{this.transform(function(e){if(this.isType(e)||Array.isArray(e))return e;let r=e!=null&&e.toString?e.toString():e;return r===pYe?e:r})})}_typeCheck(e){return e instanceof String&&(e=e.valueOf()),typeof e=="string"}_isPresent(e){return super._isPresent(e)&&!!e.length}length(e,r=Ro.string.length){return this.test({message:r,name:"length",exclusive:!0,params:{length:e},test(i){return(0,Oa.default)(i)||i.length===this.resolve(e)}})}min(e,r=Ro.string.min){return this.test({message:r,name:"min",exclusive:!0,params:{min:e},test(i){return(0,Oa.default)(i)||i.length>=this.resolve(e)}})}max(e,r=Ro.string.max){return this.test({name:"max",exclusive:!0,message:r,params:{max:e},test(i){return(0,Oa.default)(i)||i.length<=this.resolve(e)}})}matches(e,r){let i=!1,n,s;return r&&(typeof r=="object"?{excludeEmptyString:i=!1,message:n,name:s}=r:n=r),this.test({name:s||"matches",message:n||Ro.string.matches,params:{regex:e},test:o=>(0,Oa.default)(o)||o===""&&i||o.search(e)!==-1})}email(e=Ro.string.email){return this.matches(uYe,{name:"email",message:e,excludeEmptyString:!0})}url(e=Ro.string.url){return this.matches(gYe,{name:"url",message:e,excludeEmptyString:!0})}uuid(e=Ro.string.uuid){return this.matches(fYe,{name:"uuid",message:e,excludeEmptyString:!1})}ensure(){return this.default("").transform(e=>e===null?"":e)}trim(e=Ro.string.trim){return this.transform(r=>r!=null?r.trim():r).test({message:e,name:"trim",test:hYe})}lowercase(e=Ro.string.lowercase){return this.transform(r=>(0,Oa.default)(r)?r:r.toLowerCase()).test({message:e,name:"string_case",exclusive:!0,test:r=>(0,Oa.default)(r)||r===r.toLowerCase()})}uppercase(e=Ro.string.uppercase){return this.transform(r=>(0,Oa.default)(r)?r:r.toUpperCase()).test({message:e,name:"string_case",exclusive:!0,test:r=>(0,Oa.default)(r)||r===r.toUpperCase()})}};Vd.default=v0;Sre.prototype=v0.prototype});var Rre=E(_d=>{"use strict";Object.defineProperty(_d,"__esModule",{value:!0});_d.create=Pre;_d.default=void 0;var Rc=La(),Fc=Dre(Zg()),dYe=Dre(Ma());function Dre(t){return t&&t.__esModule?t:{default:t}}var CYe=t=>t!=+t;function Pre(){return new S0}var S0=class extends dYe.default{constructor(){super({type:"number"});this.withMutation(()=>{this.transform(function(e){let r=e;if(typeof r=="string"){if(r=r.replace(/\s/g,""),r==="")return NaN;r=+r}return this.isType(r)?r:parseFloat(r)})})}_typeCheck(e){return e instanceof Number&&(e=e.valueOf()),typeof e=="number"&&!CYe(e)}min(e,r=Rc.number.min){return this.test({message:r,name:"min",exclusive:!0,params:{min:e},test(i){return(0,Fc.default)(i)||i>=this.resolve(e)}})}max(e,r=Rc.number.max){return this.test({message:r,name:"max",exclusive:!0,params:{max:e},test(i){return(0,Fc.default)(i)||i<=this.resolve(e)}})}lessThan(e,r=Rc.number.lessThan){return this.test({message:r,name:"max",exclusive:!0,params:{less:e},test(i){return(0,Fc.default)(i)||ithis.resolve(e)}})}positive(e=Rc.number.positive){return this.moreThan(0,e)}negative(e=Rc.number.negative){return this.lessThan(0,e)}integer(e=Rc.number.integer){return this.test({name:"integer",message:e,test:r=>(0,Fc.default)(r)||Number.isInteger(r)})}truncate(){return this.transform(e=>(0,Fc.default)(e)?e:e|0)}round(e){var r,i=["ceil","floor","round","trunc"];if(e=((r=e)==null?void 0:r.toLowerCase())||"round",e==="trunc")return this.truncate();if(i.indexOf(e.toLowerCase())===-1)throw new TypeError("Only valid options for round() are: "+i.join(", "));return this.transform(n=>(0,Fc.default)(n)?n:Math[e](n))}};_d.default=S0;Pre.prototype=S0.prototype});var Fre=E($F=>{"use strict";Object.defineProperty($F,"__esModule",{value:!0});$F.default=mYe;var EYe=/^(\d{4}|[+\-]\d{6})(?:-?(\d{2})(?:-?(\d{2}))?)?(?:[ T]?(\d{2}):?(\d{2})(?::?(\d{2})(?:[,\.](\d{1,}))?)?(?:(Z)|([+\-])(\d{2})(?::?(\d{2}))?)?)?$/;function mYe(t){var e=[1,4,5,6,7,10,11],r=0,i,n;if(n=EYe.exec(t)){for(var s=0,o;o=e[s];++s)n[o]=+n[o]||0;n[2]=(+n[2]||1)-1,n[3]=+n[3]||1,n[7]=n[7]?String(n[7]).substr(0,3):0,(n[8]===void 0||n[8]==="")&&(n[9]===void 0||n[9]==="")?i=+new Date(n[1],n[2],n[3],n[4],n[5],n[6],n[7]):(n[8]!=="Z"&&n[9]!==void 0&&(r=n[10]*60+n[11],n[9]==="+"&&(r=0-r)),i=Date.UTC(n[1],n[2],n[3],n[4],n[5]+r,n[6],n[7]))}else i=Date.parse?Date.parse(t):NaN;return i}});var Tre=E(Xd=>{"use strict";Object.defineProperty(Xd,"__esModule",{value:!0});Xd.create=eN;Xd.default=void 0;var IYe=x0(Fre()),Nre=La(),Lre=x0(Zg()),yYe=x0(Dc()),wYe=x0(Ma());function x0(t){return t&&t.__esModule?t:{default:t}}var tN=new Date(""),BYe=t=>Object.prototype.toString.call(t)==="[object Date]";function eN(){return new Zd}var Zd=class extends wYe.default{constructor(){super({type:"date"});this.withMutation(()=>{this.transform(function(e){return this.isType(e)?e:(e=(0,IYe.default)(e),isNaN(e)?tN:new Date(e))})})}_typeCheck(e){return BYe(e)&&!isNaN(e.getTime())}prepareParam(e,r){let i;if(yYe.default.isRef(e))i=e;else{let n=this.cast(e);if(!this._typeCheck(n))throw new TypeError(`\`${r}\` must be a Date or a value that can be \`cast()\` to a Date`);i=n}return i}min(e,r=Nre.date.min){let i=this.prepareParam(e,"min");return this.test({message:r,name:"min",exclusive:!0,params:{min:e},test(n){return(0,Lre.default)(n)||n>=this.resolve(i)}})}max(e,r=Nre.date.max){var i=this.prepareParam(e,"max");return this.test({message:r,name:"max",exclusive:!0,params:{max:e},test(n){return(0,Lre.default)(n)||n<=this.resolve(i)}})}};Xd.default=Zd;Zd.INVALID_DATE=tN;eN.prototype=Zd.prototype;eN.INVALID_DATE=tN});var Ore=E((Ndt,Mre)=>{function QYe(t,e,r,i){var n=-1,s=t==null?0:t.length;for(i&&s&&(r=t[++n]);++n{function bYe(t){return function(e){return t==null?void 0:t[e]}}Kre.exports=bYe});var Gre=E((Tdt,Hre)=>{var vYe=Ure(),SYe={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},xYe=vYe(SYe);Hre.exports=xYe});var Yre=E((Mdt,jre)=>{var kYe=Gre(),PYe=gg(),DYe=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,RYe="\\u0300-\\u036f",FYe="\\ufe20-\\ufe2f",NYe="\\u20d0-\\u20ff",LYe=RYe+FYe+NYe,TYe="["+LYe+"]",MYe=RegExp(TYe,"g");function OYe(t){return t=PYe(t),t&&t.replace(DYe,kYe).replace(MYe,"")}jre.exports=OYe});var Jre=E((Odt,qre)=>{var KYe=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;function UYe(t){return t.match(KYe)||[]}qre.exports=UYe});var zre=E((Kdt,Wre)=>{var HYe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;function GYe(t){return HYe.test(t)}Wre.exports=GYe});var fie=E((Udt,Vre)=>{var _re="\\ud800-\\udfff",jYe="\\u0300-\\u036f",YYe="\\ufe20-\\ufe2f",qYe="\\u20d0-\\u20ff",JYe=jYe+YYe+qYe,Xre="\\u2700-\\u27bf",Zre="a-z\\xdf-\\xf6\\xf8-\\xff",WYe="\\xac\\xb1\\xd7\\xf7",zYe="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",VYe="\\u2000-\\u206f",_Ye=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",$re="A-Z\\xc0-\\xd6\\xd8-\\xde",XYe="\\ufe0e\\ufe0f",eie=WYe+zYe+VYe+_Ye,tie="['\u2019]",rie="["+eie+"]",ZYe="["+JYe+"]",iie="\\d+",$Ye="["+Xre+"]",nie="["+Zre+"]",sie="[^"+_re+eie+iie+Xre+Zre+$re+"]",eqe="\\ud83c[\\udffb-\\udfff]",tqe="(?:"+ZYe+"|"+eqe+")",rqe="[^"+_re+"]",oie="(?:\\ud83c[\\udde6-\\uddff]){2}",aie="[\\ud800-\\udbff][\\udc00-\\udfff]",$g="["+$re+"]",iqe="\\u200d",Aie="(?:"+nie+"|"+sie+")",nqe="(?:"+$g+"|"+sie+")",lie="(?:"+tie+"(?:d|ll|m|re|s|t|ve))?",cie="(?:"+tie+"(?:D|LL|M|RE|S|T|VE))?",uie=tqe+"?",gie="["+XYe+"]?",sqe="(?:"+iqe+"(?:"+[rqe,oie,aie].join("|")+")"+gie+uie+")*",oqe="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",aqe="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Aqe=gie+uie+sqe,lqe="(?:"+[$Ye,oie,aie].join("|")+")"+Aqe,cqe=RegExp([$g+"?"+nie+"+"+lie+"(?="+[rie,$g,"$"].join("|")+")",nqe+"+"+cie+"(?="+[rie,$g+Aie,"$"].join("|")+")",$g+"?"+Aie+"+"+lie,$g+"+"+cie,aqe,oqe,iie,lqe].join("|"),"g");function uqe(t){return t.match(cqe)||[]}Vre.exports=uqe});var pie=E((Hdt,hie)=>{var gqe=Jre(),fqe=zre(),hqe=gg(),pqe=fie();function dqe(t,e,r){return t=hqe(t),e=r?void 0:e,e===void 0?fqe(t)?pqe(t):gqe(t):t.match(e)||[]}hie.exports=dqe});var rN=E((Gdt,die)=>{var Cqe=Ore(),mqe=Yre(),Eqe=pie(),Iqe="['\u2019]",yqe=RegExp(Iqe,"g");function wqe(t){return function(e){return Cqe(Eqe(mqe(e).replace(yqe,"")),t,"")}}die.exports=wqe});var mie=E((jdt,Cie)=>{var Bqe=rN(),Qqe=Bqe(function(t,e,r){return t+(r?"_":"")+e.toLowerCase()});Cie.exports=Qqe});var Iie=E((Ydt,Eie)=>{var bqe=ZP(),vqe=rN(),Sqe=vqe(function(t,e,r){return e=e.toLowerCase(),t+(r?bqe(e):e)});Eie.exports=Sqe});var wie=E((qdt,yie)=>{var xqe=jg(),kqe=SF(),Pqe=jF();function Dqe(t,e){var r={};return e=Pqe(e,3),kqe(t,function(i,n,s){xqe(r,e(i,n,s),i)}),r}yie.exports=Dqe});var Qie=E((Jdt,iN)=>{iN.exports=function(t){return Bie(Rqe(t),t)};iN.exports.array=Bie;function Bie(t,e){var r=t.length,i=new Array(r),n={},s=r,o=Fqe(e),a=Nqe(t);for(e.forEach(function(c){if(!a.has(c[0])||!a.has(c[1]))throw new Error("Unknown node. There is an unknown node in the supplied edges.")});s--;)n[s]||l(t[s],s,new Set);return i;function l(c,u,g){if(g.has(c)){var f;try{f=", node was:"+JSON.stringify(c)}catch(d){f=""}throw new Error("Cyclic dependency"+f)}if(!a.has(c))throw new Error("Found unknown node. Make sure to provided all involved nodes. Unknown node: "+JSON.stringify(c));if(!n[u]){n[u]=!0;var h=o.get(c)||new Set;if(h=Array.from(h),u=h.length){g.add(c);do{var p=h[--u];l(p,a.get(p),g)}while(u);g.delete(c)}i[--r]=c}}}function Rqe(t){for(var e=new Set,r=0,i=t.length;r{"use strict";Object.defineProperty(nN,"__esModule",{value:!0});nN.default=Lqe;var Tqe=k0(Ld()),Mqe=k0(Qie()),Oqe=Yd(),Kqe=k0(Dc()),Uqe=k0(qg());function k0(t){return t&&t.__esModule?t:{default:t}}function Lqe(t,e=[]){let r=[],i=[];function n(s,o){var a=(0,Oqe.split)(s)[0];~i.indexOf(a)||i.push(a),~e.indexOf(`${o}-${a}`)||r.push([o,a])}for(let s in t)if((0,Tqe.default)(t,s)){let o=t[s];~i.indexOf(s)||i.push(s),Kqe.default.isRef(o)&&o.isSibling?n(o.path,s):(0,Uqe.default)(o)&&"deps"in o&&o.deps.forEach(a=>n(a,s))}return Mqe.default.array(i,r).reverse()}});var Sie=E(sN=>{"use strict";Object.defineProperty(sN,"__esModule",{value:!0});sN.default=Hqe;function vie(t,e){let r=Infinity;return t.some((i,n)=>{var s;if(((s=e.path)==null?void 0:s.indexOf(i))!==-1)return r=n,!0}),r}function Hqe(t){return(e,r)=>vie(t,e)-vie(t,r)}});var Nie=E($d=>{"use strict";Object.defineProperty($d,"__esModule",{value:!0});$d.create=xie;$d.default=void 0;var kie=Fo(Ld()),Pie=Fo(mie()),Gqe=Fo(Iie()),jqe=Fo(wie()),Yqe=Fo(YF()),qqe=Yd(),Die=La(),Jqe=Fo(bie()),Rie=Fo(Sie()),Wqe=Fo(a0()),zqe=Fo(xc()),oN=Fo(Ma());function Fo(t){return t&&t.__esModule?t:{default:t}}function ef(){return ef=Object.assign||function(t){for(var e=1;eObject.prototype.toString.call(t)==="[object Object]";function Vqe(t,e){let r=Object.keys(t.fields);return Object.keys(e).filter(i=>r.indexOf(i)===-1)}var _qe=(0,Rie.default)([]),P0=class extends oN.default{constructor(e){super({type:"object"});this.fields=Object.create(null),this._sortErrors=_qe,this._nodes=[],this._excludedEdges=[],this.withMutation(()=>{this.transform(function(i){if(typeof i=="string")try{i=JSON.parse(i)}catch(n){i=null}return this.isType(i)?i:null}),e&&this.shape(e)})}_typeCheck(e){return Fie(e)||typeof e=="function"}_cast(e,r={}){var i;let n=super._cast(e,r);if(n===void 0)return this.getDefault();if(!this._typeCheck(n))return n;let s=this.fields,o=(i=r.stripUnknown)!=null?i:this.spec.noUnknown,a=this._nodes.concat(Object.keys(n).filter(g=>this._nodes.indexOf(g)===-1)),l={},c=ef({},r,{parent:l,__validating:r.__validating||!1}),u=!1;for(let g of a){let f=s[g],h=(0,kie.default)(n,g);if(f){let p,d=n[g];c.path=(r.path?`${r.path}.`:"")+g,f=f.resolve({value:d,context:r.context,parent:l});let m="spec"in f?f.spec:void 0,I=m==null?void 0:m.strict;if(m==null?void 0:m.strip){u=u||g in n;continue}p=!r.__validating||!I?f.cast(n[g],c):n[g],p!==void 0&&(l[g]=p)}else h&&!o&&(l[g]=n[g]);l[g]!==n[g]&&(u=!0)}return u?l:n}_validate(e,r={},i){let n=[],{sync:s,from:o=[],originalValue:a=e,abortEarly:l=this.spec.abortEarly,recursive:c=this.spec.recursive}=r;o=[{schema:this,value:a},...o],r.__validating=!0,r.originalValue=a,r.from=o,super._validate(e,r,(u,g)=>{if(u){if(!zqe.default.isError(u)||l)return void i(u,g);n.push(u)}if(!c||!Fie(g)){i(n[0]||null,g);return}a=a||g;let f=this._nodes.map(h=>(p,d)=>{let m=h.indexOf(".")===-1?(r.path?`${r.path}.`:"")+h:`${r.path||""}["${h}"]`,I=this.fields[h];if(I&&"validate"in I){I.validate(g[h],ef({},r,{path:m,from:o,strict:!0,parent:g,originalValue:a[h]}),d);return}d(null)});(0,Wqe.default)({sync:s,tests:f,value:g,errors:n,endEarly:l,sort:this._sortErrors,path:r.path},i)})}clone(e){let r=super.clone(e);return r.fields=ef({},this.fields),r._nodes=this._nodes,r._excludedEdges=this._excludedEdges,r._sortErrors=this._sortErrors,r}concat(e){let r=super.concat(e),i=r.fields;for(let[n,s]of Object.entries(this.fields)){let o=i[n];o===void 0?i[n]=s:o instanceof oN.default&&s instanceof oN.default&&(i[n]=s.concat(o))}return r.withMutation(()=>r.shape(i))}getDefaultFromShape(){let e={};return this._nodes.forEach(r=>{let i=this.fields[r];e[r]="default"in i?i.getDefault():void 0}),e}_getDefault(){if("default"in this.spec)return super._getDefault();if(!!this._nodes.length)return this.getDefaultFromShape()}shape(e,r=[]){let i=this.clone(),n=Object.assign(i.fields,e);if(i.fields=n,i._sortErrors=(0,Rie.default)(Object.keys(n)),r.length){Array.isArray(r[0])||(r=[r]);let s=r.map(([o,a])=>`${o}-${a}`);i._excludedEdges=i._excludedEdges.concat(s)}return i._nodes=(0,Jqe.default)(n,i._excludedEdges),i}pick(e){let r={};for(let i of e)this.fields[i]&&(r[i]=this.fields[i]);return this.clone().withMutation(i=>(i.fields={},i.shape(r)))}omit(e){let r=this.clone(),i=r.fields;r.fields={};for(let n of e)delete i[n];return r.withMutation(()=>r.shape(i))}from(e,r,i){let n=(0,qqe.getter)(e,!0);return this.transform(s=>{if(s==null)return s;let o=s;return(0,kie.default)(s,e)&&(o=ef({},s),i||delete o[e],o[r]=n(s)),o})}noUnknown(e=!0,r=Die.object.noUnknown){typeof e=="string"&&(r=e,e=!0);let i=this.test({name:"noUnknown",exclusive:!0,message:r,test(n){if(n==null)return!0;let s=Vqe(this.schema,n);return!e||s.length===0||this.createError({params:{unknown:s.join(", ")}})}});return i.spec.noUnknown=e,i}unknown(e=!0,r=Die.object.noUnknown){return this.noUnknown(!e,r)}transformKeys(e){return this.transform(r=>r&&(0,jqe.default)(r,(i,n)=>e(n)))}camelCase(){return this.transformKeys(Gqe.default)}snakeCase(){return this.transformKeys(Pie.default)}constantCase(){return this.transformKeys(e=>(0,Pie.default)(e).toUpperCase())}describe(){let e=super.describe();return e.fields=(0,Yqe.default)(this.fields,r=>r.describe()),e}};$d.default=P0;function xie(t){return new P0(t)}xie.prototype=P0.prototype});var Tie=E(eC=>{"use strict";Object.defineProperty(eC,"__esModule",{value:!0});eC.create=Lie;eC.default=void 0;var aN=tf(Zg()),Xqe=tf(qg()),Zqe=tf(Nd()),AN=La(),$qe=tf(a0()),eJe=tf(xc()),tJe=tf(Ma());function tf(t){return t&&t.__esModule?t:{default:t}}function D0(){return D0=Object.assign||function(t){for(var e=1;e{this.transform(function(r){if(typeof r=="string")try{r=JSON.parse(r)}catch(i){r=null}return this.isType(r)?r:null})})}_typeCheck(e){return Array.isArray(e)}get _subType(){return this.innerType}_cast(e,r){let i=super._cast(e,r);if(!this._typeCheck(i)||!this.innerType)return i;let n=!1,s=i.map((o,a)=>{let l=this.innerType.cast(o,D0({},r,{path:`${r.path||""}[${a}]`}));return l!==o&&(n=!0),l});return n?s:i}_validate(e,r={},i){var n,s;let o=[],a=r.sync,l=r.path,c=this.innerType,u=(n=r.abortEarly)!=null?n:this.spec.abortEarly,g=(s=r.recursive)!=null?s:this.spec.recursive,f=r.originalValue!=null?r.originalValue:e;super._validate(e,r,(h,p)=>{if(h){if(!eJe.default.isError(h)||u)return void i(h,p);o.push(h)}if(!g||!c||!this._typeCheck(p)){i(o[0]||null,p);return}f=f||p;let d=new Array(p.length);for(let m=0;mc.validate(I,b,H)}(0,$qe.default)({sync:a,path:l,value:p,errors:o,endEarly:u,tests:d},i)})}clone(e){let r=super.clone(e);return r.innerType=this.innerType,r}concat(e){let r=super.concat(e);return r.innerType=this.innerType,e.innerType&&(r.innerType=r.innerType?r.innerType.concat(e.innerType):e.innerType),r}of(e){let r=this.clone();if(!(0,Xqe.default)(e))throw new TypeError("`array.of()` sub-schema must be a valid yup schema not: "+(0,Zqe.default)(e));return r.innerType=e,r}length(e,r=AN.array.length){return this.test({message:r,name:"length",exclusive:!0,params:{length:e},test(i){return(0,aN.default)(i)||i.length===this.resolve(e)}})}min(e,r){return r=r||AN.array.min,this.test({message:r,name:"min",exclusive:!0,params:{min:e},test(i){return(0,aN.default)(i)||i.length>=this.resolve(e)}})}max(e,r){return r=r||AN.array.max,this.test({message:r,name:"max",exclusive:!0,params:{max:e},test(i){return(0,aN.default)(i)||i.length<=this.resolve(e)}})}ensure(){return this.default(()=>[]).transform((e,r)=>this._typeCheck(e)?e:r==null?[]:[].concat(r))}compact(e){let r=e?(i,n,s)=>!e(i,n,s):i=>!!i;return this.transform(i=>i!=null?i.filter(r):i)}describe(){let e=super.describe();return this.innerType&&(e.innerType=this.innerType.describe()),e}nullable(e=!0){return super.nullable(e)}defined(){return super.defined()}required(e){return super.required(e)}};eC.default=R0;Lie.prototype=R0.prototype});var Mie=E(tC=>{"use strict";Object.defineProperty(tC,"__esModule",{value:!0});tC.create=rJe;tC.default=void 0;var nJe=iJe(qg());function iJe(t){return t&&t.__esModule?t:{default:t}}function rJe(t){return new lN(t)}var lN=class{constructor(e){this.type="lazy",this.__isYupSchema__=!0,this._resolve=(r,i={})=>{let n=this.builder(r,i);if(!(0,nJe.default)(n))throw new TypeError("lazy() functions must return a valid schema");return n.resolve(i)},this.builder=e}resolve(e){return this._resolve(e.value,e)}cast(e,r){return this._resolve(e,r).cast(e,r)}validate(e,r,i){return this._resolve(e,r).validate(e,r,i)}validateSync(e,r){return this._resolve(e,r).validateSync(e,r)}validateAt(e,r,i){return this._resolve(r,i).validateAt(e,r,i)}validateSyncAt(e,r,i){return this._resolve(r,i).validateSyncAt(e,r,i)}describe(){return null}isValid(e,r){return this._resolve(e,r).isValid(e,r)}isValidSync(e,r){return this._resolve(e,r).isValidSync(e,r)}},sJe=lN;tC.default=sJe});var Oie=E(cN=>{"use strict";Object.defineProperty(cN,"__esModule",{value:!0});cN.default=oJe;var AJe=aJe(La());function aJe(t){return t&&t.__esModule?t:{default:t}}function oJe(t){Object.keys(t).forEach(e=>{Object.keys(t[e]).forEach(r=>{AJe.default[e][r]=t[e][r]})})}});var gN=E(cr=>{"use strict";Object.defineProperty(cr,"__esModule",{value:!0});cr.addMethod=lJe;Object.defineProperty(cr,"MixedSchema",{enumerable:!0,get:function(){return Kie.default}});Object.defineProperty(cr,"mixed",{enumerable:!0,get:function(){return Kie.create}});Object.defineProperty(cr,"BooleanSchema",{enumerable:!0,get:function(){return uN.default}});Object.defineProperty(cr,"bool",{enumerable:!0,get:function(){return uN.create}});Object.defineProperty(cr,"boolean",{enumerable:!0,get:function(){return uN.create}});Object.defineProperty(cr,"StringSchema",{enumerable:!0,get:function(){return Uie.default}});Object.defineProperty(cr,"string",{enumerable:!0,get:function(){return Uie.create}});Object.defineProperty(cr,"NumberSchema",{enumerable:!0,get:function(){return Hie.default}});Object.defineProperty(cr,"number",{enumerable:!0,get:function(){return Hie.create}});Object.defineProperty(cr,"DateSchema",{enumerable:!0,get:function(){return Gie.default}});Object.defineProperty(cr,"date",{enumerable:!0,get:function(){return Gie.create}});Object.defineProperty(cr,"ObjectSchema",{enumerable:!0,get:function(){return jie.default}});Object.defineProperty(cr,"object",{enumerable:!0,get:function(){return jie.create}});Object.defineProperty(cr,"ArraySchema",{enumerable:!0,get:function(){return Yie.default}});Object.defineProperty(cr,"array",{enumerable:!0,get:function(){return Yie.create}});Object.defineProperty(cr,"ref",{enumerable:!0,get:function(){return cJe.create}});Object.defineProperty(cr,"lazy",{enumerable:!0,get:function(){return uJe.create}});Object.defineProperty(cr,"ValidationError",{enumerable:!0,get:function(){return gJe.default}});Object.defineProperty(cr,"reach",{enumerable:!0,get:function(){return fJe.default}});Object.defineProperty(cr,"isSchema",{enumerable:!0,get:function(){return qie.default}});Object.defineProperty(cr,"setLocale",{enumerable:!0,get:function(){return hJe.default}});Object.defineProperty(cr,"BaseSchema",{enumerable:!0,get:function(){return pJe.default}});var Kie=Nc(yre()),uN=Nc(vre()),Uie=Nc(kre()),Hie=Nc(Rre()),Gie=Nc(Tre()),jie=Nc(Nie()),Yie=Nc(Tie()),cJe=Dc(),uJe=Mie(),gJe=rC(xc()),fJe=rC(XF()),qie=rC(qg()),hJe=rC(Oie()),pJe=rC(Ma());function rC(t){return t&&t.__esModule?t:{default:t}}function Jie(){if(typeof WeakMap!="function")return null;var t=new WeakMap;return Jie=function(){return t},t}function Nc(t){if(t&&t.__esModule)return t;if(t===null||typeof t!="object"&&typeof t!="function")return{default:t};var e=Jie();if(e&&e.has(t))return e.get(t);var r={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)){var s=i?Object.getOwnPropertyDescriptor(t,n):null;s&&(s.get||s.set)?Object.defineProperty(r,n,s):r[n]=t[n]}return r.default=t,e&&e.set(t,r),r}function lJe(t,e,r){if(!t||!(0,qie.default)(t.prototype))throw new TypeError("You must provide a yup schema constructor function");if(typeof e!="string")throw new TypeError("A Method name must be provided");if(typeof r!="function")throw new TypeError("Method function must be provided");t.prototype[e]=r}});var Xie=E((gCt,nC)=>{"use strict";var mJe=process.env.TERM_PROGRAM==="Hyper",EJe=process.platform==="win32",zie=process.platform==="linux",fN={ballotDisabled:"\u2612",ballotOff:"\u2610",ballotOn:"\u2611",bullet:"\u2022",bulletWhite:"\u25E6",fullBlock:"\u2588",heart:"\u2764",identicalTo:"\u2261",line:"\u2500",mark:"\u203B",middot:"\xB7",minus:"\uFF0D",multiplication:"\xD7",obelus:"\xF7",pencilDownRight:"\u270E",pencilRight:"\u270F",pencilUpRight:"\u2710",percent:"%",pilcrow2:"\u2761",pilcrow:"\xB6",plusMinus:"\xB1",section:"\xA7",starsOff:"\u2606",starsOn:"\u2605",upDownArrow:"\u2195"},Vie=Object.assign({},fN,{check:"\u221A",cross:"\xD7",ellipsisLarge:"...",ellipsis:"...",info:"i",question:"?",questionSmall:"?",pointer:">",pointerSmall:"\xBB",radioOff:"( )",radioOn:"(*)",warning:"\u203C"}),_ie=Object.assign({},fN,{ballotCross:"\u2718",check:"\u2714",cross:"\u2716",ellipsisLarge:"\u22EF",ellipsis:"\u2026",info:"\u2139",question:"?",questionFull:"\uFF1F",questionSmall:"\uFE56",pointer:zie?"\u25B8":"\u276F",pointerSmall:zie?"\u2023":"\u203A",radioOff:"\u25EF",radioOn:"\u25C9",warning:"\u26A0"});nC.exports=EJe&&!mJe?Vie:_ie;Reflect.defineProperty(nC.exports,"common",{enumerable:!1,value:fN});Reflect.defineProperty(nC.exports,"windows",{enumerable:!1,value:Vie});Reflect.defineProperty(nC.exports,"other",{enumerable:!1,value:_ie})});var js=E((fCt,hN)=>{"use strict";var IJe=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),yJe=/[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,Zie=()=>{let t={enabled:!0,visible:!0,styles:{},keys:{}};"FORCE_COLOR"in process.env&&(t.enabled=process.env.FORCE_COLOR!=="0");let e=s=>{let o=s.open=`[${s.codes[0]}m`,a=s.close=`[${s.codes[1]}m`,l=s.regex=new RegExp(`\\u001b\\[${s.codes[1]}m`,"g");return s.wrap=(c,u)=>{c.includes(a)&&(c=c.replace(l,a+o));let g=o+c+a;return u?g.replace(/\r*\n/g,`${a}$&${o}`):g},s},r=(s,o,a)=>typeof s=="function"?s(o):s.wrap(o,a),i=(s,o)=>{if(s===""||s==null)return"";if(t.enabled===!1)return s;if(t.visible===!1)return"";let a=""+s,l=a.includes(` +`),c=o.length;for(c>0&&o.includes("unstyle")&&(o=[...new Set(["unstyle",...o])].reverse());c-- >0;)a=r(t.styles[o[c]],a,l);return a},n=(s,o,a)=>{t.styles[s]=e({name:s,codes:o}),(t.keys[a]||(t.keys[a]=[])).push(s),Reflect.defineProperty(t,s,{configurable:!0,enumerable:!0,set(c){t.alias(s,c)},get(){let c=u=>i(u,c.stack);return Reflect.setPrototypeOf(c,t),c.stack=this.stack?this.stack.concat(s):[s],c}})};return n("reset",[0,0],"modifier"),n("bold",[1,22],"modifier"),n("dim",[2,22],"modifier"),n("italic",[3,23],"modifier"),n("underline",[4,24],"modifier"),n("inverse",[7,27],"modifier"),n("hidden",[8,28],"modifier"),n("strikethrough",[9,29],"modifier"),n("black",[30,39],"color"),n("red",[31,39],"color"),n("green",[32,39],"color"),n("yellow",[33,39],"color"),n("blue",[34,39],"color"),n("magenta",[35,39],"color"),n("cyan",[36,39],"color"),n("white",[37,39],"color"),n("gray",[90,39],"color"),n("grey",[90,39],"color"),n("bgBlack",[40,49],"bg"),n("bgRed",[41,49],"bg"),n("bgGreen",[42,49],"bg"),n("bgYellow",[43,49],"bg"),n("bgBlue",[44,49],"bg"),n("bgMagenta",[45,49],"bg"),n("bgCyan",[46,49],"bg"),n("bgWhite",[47,49],"bg"),n("blackBright",[90,39],"bright"),n("redBright",[91,39],"bright"),n("greenBright",[92,39],"bright"),n("yellowBright",[93,39],"bright"),n("blueBright",[94,39],"bright"),n("magentaBright",[95,39],"bright"),n("cyanBright",[96,39],"bright"),n("whiteBright",[97,39],"bright"),n("bgBlackBright",[100,49],"bgBright"),n("bgRedBright",[101,49],"bgBright"),n("bgGreenBright",[102,49],"bgBright"),n("bgYellowBright",[103,49],"bgBright"),n("bgBlueBright",[104,49],"bgBright"),n("bgMagentaBright",[105,49],"bgBright"),n("bgCyanBright",[106,49],"bgBright"),n("bgWhiteBright",[107,49],"bgBright"),t.ansiRegex=yJe,t.hasColor=t.hasAnsi=s=>(t.ansiRegex.lastIndex=0,typeof s=="string"&&s!==""&&t.ansiRegex.test(s)),t.alias=(s,o)=>{let a=typeof o=="string"?t[o]:o;if(typeof a!="function")throw new TypeError("Expected alias to be the name of an existing color (string) or a function");a.stack||(Reflect.defineProperty(a,"name",{value:s}),t.styles[s]=a,a.stack=[s]),Reflect.defineProperty(t,s,{configurable:!0,enumerable:!0,set(l){t.alias(s,l)},get(){let l=c=>i(c,l.stack);return Reflect.setPrototypeOf(l,t),l.stack=this.stack?this.stack.concat(a.stack):a.stack,l}})},t.theme=s=>{if(!IJe(s))throw new TypeError("Expected theme to be an object");for(let o of Object.keys(s))t.alias(o,s[o]);return t},t.alias("unstyle",s=>typeof s=="string"&&s!==""?(t.ansiRegex.lastIndex=0,s.replace(t.ansiRegex,"")):""),t.alias("noop",s=>s),t.none=t.clear=t.noop,t.stripColor=t.unstyle,t.symbols=Xie(),t.define=n,t};hN.exports=Zie();hN.exports.create=Zie});var Mi=E(bt=>{"use strict";var wJe=Object.prototype.toString,Cs=js(),$ie=!1,pN=[],ene={yellow:"blue",cyan:"red",green:"magenta",black:"white",blue:"yellow",red:"cyan",magenta:"green",white:"black"};bt.longest=(t,e)=>t.reduce((r,i)=>Math.max(r,e?i[e].length:i.length),0);bt.hasColor=t=>!!t&&Cs.hasColor(t);var N0=bt.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);bt.nativeType=t=>wJe.call(t).slice(8,-1).toLowerCase().replace(/\s/g,"");bt.isAsyncFn=t=>bt.nativeType(t)==="asyncfunction";bt.isPrimitive=t=>t!=null&&typeof t!="object"&&typeof t!="function";bt.resolve=(t,e,...r)=>typeof e=="function"?e.call(t,...r):e;bt.scrollDown=(t=[])=>[...t.slice(1),t[0]];bt.scrollUp=(t=[])=>[t.pop(),...t];bt.reorder=(t=[])=>{let e=t.slice();return e.sort((r,i)=>r.index>i.index?1:r.index{let i=t.length,n=r===i?0:r<0?i-1:r,s=t[e];t[e]=t[n],t[n]=s};bt.width=(t,e=80)=>{let r=t&&t.columns?t.columns:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[0]),process.platform==="win32"?r-1:r};bt.height=(t,e=20)=>{let r=t&&t.rows?t.rows:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[1]),r};bt.wordWrap=(t,e={})=>{if(!t)return t;typeof e=="number"&&(e={width:e});let{indent:r="",newline:i=` +`+r,width:n=80}=e;n-=((i+r).match(/[^\S\n]/g)||[]).length;let o=`.{1,${n}}([\\s\\u200B]+|$)|[^\\s\\u200B]+?([\\s\\u200B]+|$)`,a=t.trim(),l=new RegExp(o,"g"),c=a.match(l)||[];return c=c.map(u=>u.replace(/\n$/,"")),e.padEnd&&(c=c.map(u=>u.padEnd(n," "))),e.padStart&&(c=c.map(u=>u.padStart(n," "))),r+c.join(i)};bt.unmute=t=>{let e=t.stack.find(i=>Cs.keys.color.includes(i));return e?Cs[e]:t.stack.find(i=>i.slice(2)==="bg")?Cs[e.slice(2)]:i=>i};bt.pascal=t=>t?t[0].toUpperCase()+t.slice(1):"";bt.inverse=t=>{if(!t||!t.stack)return t;let e=t.stack.find(i=>Cs.keys.color.includes(i));if(e){let i=Cs["bg"+bt.pascal(e)];return i?i.black:t}let r=t.stack.find(i=>i.slice(0,2)==="bg");return r?Cs[r.slice(2).toLowerCase()]||t:Cs.none};bt.complement=t=>{if(!t||!t.stack)return t;let e=t.stack.find(i=>Cs.keys.color.includes(i)),r=t.stack.find(i=>i.slice(0,2)==="bg");if(e&&!r)return Cs[ene[e]||e];if(r){let i=r.slice(2).toLowerCase(),n=ene[i];return n&&Cs["bg"+bt.pascal(n)]||t}return Cs.none};bt.meridiem=t=>{let e=t.getHours(),r=t.getMinutes(),i=e>=12?"pm":"am";e=e%12;let n=e===0?12:e,s=r<10?"0"+r:r;return n+":"+s+" "+i};bt.set=(t={},e="",r)=>e.split(".").reduce((i,n,s,o)=>{let a=o.length-1>s?i[n]||{}:r;return!bt.isObject(a)&&s{let i=t[e]==null?e.split(".").reduce((n,s)=>n&&n[s],t):t[e];return i==null?r:i};bt.mixin=(t,e)=>{if(!N0(t))return e;if(!N0(e))return t;for(let r of Object.keys(e)){let i=Object.getOwnPropertyDescriptor(e,r);if(i.hasOwnProperty("value"))if(t.hasOwnProperty(r)&&N0(i.value)){let n=Object.getOwnPropertyDescriptor(t,r);N0(n.value)?t[r]=bt.merge({},t[r],e[r]):Reflect.defineProperty(t,r,i)}else Reflect.defineProperty(t,r,i);else Reflect.defineProperty(t,r,i)}return t};bt.merge=(...t)=>{let e={};for(let r of t)bt.mixin(e,r);return e};bt.mixinEmitter=(t,e)=>{let r=e.constructor.prototype;for(let i of Object.keys(r)){let n=r[i];typeof n=="function"?bt.define(t,i,n.bind(e)):bt.define(t,i,n)}};bt.onExit=t=>{let e=(r,i)=>{$ie||($ie=!0,pN.forEach(n=>n()),r===!0&&process.exit(128+i))};pN.length===0&&(process.once("SIGTERM",e.bind(null,!0,15)),process.once("SIGINT",e.bind(null,!0,2)),process.once("exit",e)),pN.push(t)};bt.define=(t,e,r)=>{Reflect.defineProperty(t,e,{value:r})};bt.defineExport=(t,e,r)=>{let i;Reflect.defineProperty(t,e,{enumerable:!0,configurable:!0,set(n){i=n},get(){return i?i():r()}})}});var tne=E(nf=>{"use strict";nf.ctrl={a:"first",b:"backward",c:"cancel",d:"deleteForward",e:"last",f:"forward",g:"reset",i:"tab",k:"cutForward",l:"reset",n:"newItem",m:"cancel",j:"submit",p:"search",r:"remove",s:"save",u:"undo",w:"cutLeft",x:"toggleCursor",v:"paste"};nf.shift={up:"shiftUp",down:"shiftDown",left:"shiftLeft",right:"shiftRight",tab:"prev"};nf.fn={up:"pageUp",down:"pageDown",left:"pageLeft",right:"pageRight",delete:"deleteForward"};nf.option={b:"backward",f:"forward",d:"cutRight",left:"cutLeft",up:"altUp",down:"altDown"};nf.keys={pageup:"pageUp",pagedown:"pageDown",home:"home",end:"end",cancel:"cancel",delete:"deleteForward",backspace:"delete",down:"down",enter:"submit",escape:"cancel",left:"left",space:"space",number:"number",return:"submit",right:"right",tab:"next",up:"up"}});var nne=E((dCt,rne)=>{"use strict";var ine=require("readline"),BJe=tne(),QJe=/^(?:\x1b)([a-zA-Z0-9])$/,bJe=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,vJe={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"};function SJe(t){return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(t)}function xJe(t){return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(t)}var L0=(t="",e={})=>{let r,i=P({name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:t,raw:t},e);if(Buffer.isBuffer(t)?t[0]>127&&t[1]===void 0?(t[0]-=128,t=""+String(t)):t=String(t):t!==void 0&&typeof t!="string"?t=String(t):t||(t=i.sequence||""),i.sequence=i.sequence||t||i.name,t==="\r")i.raw=void 0,i.name="return";else if(t===` +`)i.name="enter";else if(t===" ")i.name="tab";else if(t==="\b"||t==="\x7F"||t==="\x7F"||t==="\b")i.name="backspace",i.meta=t.charAt(0)==="";else if(t===""||t==="")i.name="escape",i.meta=t.length===2;else if(t===" "||t===" ")i.name="space",i.meta=t.length===2;else if(t<="")i.name=String.fromCharCode(t.charCodeAt(0)+"a".charCodeAt(0)-1),i.ctrl=!0;else if(t.length===1&&t>="0"&&t<="9")i.name="number";else if(t.length===1&&t>="a"&&t<="z")i.name=t;else if(t.length===1&&t>="A"&&t<="Z")i.name=t.toLowerCase(),i.shift=!0;else if(r=QJe.exec(t))i.meta=!0,i.shift=/^[A-Z]$/.test(r[1]);else if(r=bJe.exec(t)){let n=[...t];n[0]===""&&n[1]===""&&(i.option=!0);let s=[r[1],r[2],r[4],r[6]].filter(Boolean).join(""),o=(r[3]||r[5]||1)-1;i.ctrl=!!(o&4),i.meta=!!(o&10),i.shift=!!(o&1),i.code=s,i.name=vJe[s],i.shift=SJe(s)||i.shift,i.ctrl=xJe(s)||i.ctrl}return i};L0.listen=(t={},e)=>{let{stdin:r}=t;if(!r||r!==process.stdin&&!r.isTTY)throw new Error("Invalid stream passed");let i=ine.createInterface({terminal:!0,input:r});ine.emitKeypressEvents(r,i);let n=(a,l)=>e(a,L0(a,l),i),s=r.isRaw;return r.isTTY&&r.setRawMode(!0),r.on("keypress",n),i.resume(),()=>{r.isTTY&&r.setRawMode(s),r.removeListener("keypress",n),i.pause(),i.close()}};L0.action=(t,e,r)=>{let i=P(P({},BJe),r);return e.ctrl?(e.action=i.ctrl[e.name],e):e.option&&i.option?(e.action=i.option[e.name],e):e.shift?(e.action=i.shift[e.name],e):(e.action=i.keys[e.name],e)};rne.exports=L0});var one=E((CCt,sne)=>{"use strict";sne.exports=t=>{t.timers=t.timers||{};let e=t.options.timers;if(!!e)for(let r of Object.keys(e)){let i=e[r];typeof i=="number"&&(i={interval:i}),kJe(t,r,i)}};function kJe(t,e,r={}){let i=t.timers[e]={name:e,start:Date.now(),ms:0,tick:0},n=r.interval||120;i.frames=r.frames||[],i.loading=!0;let s=setInterval(()=>{i.ms=Date.now()-i.start,i.tick++,t.render()},n);return i.stop=()=>{i.loading=!1,clearInterval(s)},Reflect.defineProperty(i,"interval",{value:s}),t.once("close",()=>i.stop()),i.stop}});var lne=E((mCt,ane)=>{"use strict";var{define:PJe,width:DJe}=Mi(),Ane=class{constructor(e){let r=e.options;PJe(this,"_prompt",e),this.type=e.type,this.name=e.name,this.message="",this.header="",this.footer="",this.error="",this.hint="",this.input="",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt="",this.buffer="",this.width=DJe(r.stdout||process.stdout),Object.assign(this,r),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e=P({},this);return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let r=this._color||e[this.status];return typeof r=="function"?r:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading=="boolean"?this._loading:this.loadingChoices?"choices":!1}get status(){return this.cancelled?"cancelled":this.submitted?"submitted":"pending"}};ane.exports=Ane});var une=E((ECt,cne)=>{"use strict";var dN=Mi(),yi=js(),CN={default:yi.noop,noop:yi.noop,set inverse(t){this._inverse=t},get inverse(){return this._inverse||dN.inverse(this.primary)},set complement(t){this._complement=t},get complement(){return this._complement||dN.complement(this.primary)},primary:yi.cyan,success:yi.green,danger:yi.magenta,strong:yi.bold,warning:yi.yellow,muted:yi.dim,disabled:yi.gray,dark:yi.dim.gray,underline:yi.underline,set info(t){this._info=t},get info(){return this._info||this.primary},set em(t){this._em=t},get em(){return this._em||this.primary.underline},set heading(t){this._heading=t},get heading(){return this._heading||this.muted.underline},set pending(t){this._pending=t},get pending(){return this._pending||this.primary},set submitted(t){this._submitted=t},get submitted(){return this._submitted||this.success},set cancelled(t){this._cancelled=t},get cancelled(){return this._cancelled||this.danger},set typing(t){this._typing=t},get typing(){return this._typing||this.dim},set placeholder(t){this._placeholder=t},get placeholder(){return this._placeholder||this.primary.dim},set highlight(t){this._highlight=t},get highlight(){return this._highlight||this.inverse}};CN.merge=(t={})=>{t.styles&&typeof t.styles.enabled=="boolean"&&(yi.enabled=t.styles.enabled),t.styles&&typeof t.styles.visible=="boolean"&&(yi.visible=t.styles.visible);let e=dN.merge({},CN,t.styles);delete e.merge;for(let r of Object.keys(yi))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>yi[r]});for(let r of Object.keys(yi.styles))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>yi[r]});return e};cne.exports=CN});var fne=E((ICt,gne)=>{"use strict";var mN=process.platform==="win32",Ka=js(),RJe=Mi(),EN=_(P({},Ka.symbols),{upDownDoubleArrow:"\u21D5",upDownDoubleArrow2:"\u2B0D",upDownArrow:"\u2195",asterisk:"*",asterism:"\u2042",bulletWhite:"\u25E6",electricArrow:"\u2301",ellipsisLarge:"\u22EF",ellipsisSmall:"\u2026",fullBlock:"\u2588",identicalTo:"\u2261",indicator:Ka.symbols.check,leftAngle:"\u2039",mark:"\u203B",minus:"\u2212",multiplication:"\xD7",obelus:"\xF7",percent:"%",pilcrow:"\xB6",pilcrow2:"\u2761",pencilUpRight:"\u2710",pencilDownRight:"\u270E",pencilRight:"\u270F",plus:"+",plusMinus:"\xB1",pointRight:"\u261E",rightAngle:"\u203A",section:"\xA7",hexagon:{off:"\u2B21",on:"\u2B22",disabled:"\u2B22"},ballot:{on:"\u2611",off:"\u2610",disabled:"\u2612"},stars:{on:"\u2605",off:"\u2606",disabled:"\u2606"},folder:{on:"\u25BC",off:"\u25B6",disabled:"\u25B6"},prefix:{pending:Ka.symbols.question,submitted:Ka.symbols.check,cancelled:Ka.symbols.cross},separator:{pending:Ka.symbols.pointerSmall,submitted:Ka.symbols.middot,cancelled:Ka.symbols.middot},radio:{off:mN?"( )":"\u25EF",on:mN?"(*)":"\u25C9",disabled:mN?"(|)":"\u24BE"},numbers:["\u24EA","\u2460","\u2461","\u2462","\u2463","\u2464","\u2465","\u2466","\u2467","\u2468","\u2469","\u246A","\u246B","\u246C","\u246D","\u246E","\u246F","\u2470","\u2471","\u2472","\u2473","\u3251","\u3252","\u3253","\u3254","\u3255","\u3256","\u3257","\u3258","\u3259","\u325A","\u325B","\u325C","\u325D","\u325E","\u325F","\u32B1","\u32B2","\u32B3","\u32B4","\u32B5","\u32B6","\u32B7","\u32B8","\u32B9","\u32BA","\u32BB","\u32BC","\u32BD","\u32BE","\u32BF"]});EN.merge=t=>{let e=RJe.merge({},Ka.symbols,EN,t.symbols);return delete e.merge,e};gne.exports=EN});var pne=E((yCt,hne)=>{"use strict";var FJe=une(),NJe=fne(),LJe=Mi();hne.exports=t=>{t.options=LJe.merge({},t.options.theme,t.options),t.symbols=NJe.merge(t.options),t.styles=FJe.merge(t.options)}});var Ine=E((dne,Cne)=>{"use strict";var mne=process.env.TERM_PROGRAM==="Apple_Terminal",TJe=js(),IN=Mi(),Ys=Cne.exports=dne,Ir="[",Ene="\x07",yN=!1,HA=Ys.code={bell:Ene,beep:Ene,beginning:`${Ir}G`,down:`${Ir}J`,esc:Ir,getPosition:`${Ir}6n`,hide:`${Ir}?25l`,line:`${Ir}2K`,lineEnd:`${Ir}K`,lineStart:`${Ir}1K`,restorePosition:Ir+(mne?"8":"u"),savePosition:Ir+(mne?"7":"s"),screen:`${Ir}2J`,show:`${Ir}?25h`,up:`${Ir}1J`},Lc=Ys.cursor={get hidden(){return yN},hide(){return yN=!0,HA.hide},show(){return yN=!1,HA.show},forward:(t=1)=>`${Ir}${t}C`,backward:(t=1)=>`${Ir}${t}D`,nextLine:(t=1)=>`${Ir}E`.repeat(t),prevLine:(t=1)=>`${Ir}F`.repeat(t),up:(t=1)=>t?`${Ir}${t}A`:"",down:(t=1)=>t?`${Ir}${t}B`:"",right:(t=1)=>t?`${Ir}${t}C`:"",left:(t=1)=>t?`${Ir}${t}D`:"",to(t,e){return e?`${Ir}${e+1};${t+1}H`:`${Ir}${t+1}G`},move(t=0,e=0){let r="";return r+=t<0?Lc.left(-t):t>0?Lc.right(t):"",r+=e<0?Lc.up(-e):e>0?Lc.down(e):"",r},restore(t={}){let{after:e,cursor:r,initial:i,input:n,prompt:s,size:o,value:a}=t;if(i=IN.isPrimitive(i)?String(i):"",n=IN.isPrimitive(n)?String(n):"",a=IN.isPrimitive(a)?String(a):"",o){let l=Ys.cursor.up(o)+Ys.cursor.to(s.length),c=n.length-r;return c>0&&(l+=Ys.cursor.left(c)),l}if(a||e){let l=!n&&!!i?-i.length:-n.length+r;return e&&(l-=e.length),n===""&&i&&!s.includes(i)&&(l+=i.length),Ys.cursor.move(l)}}},wN=Ys.erase={screen:HA.screen,up:HA.up,down:HA.down,line:HA.line,lineEnd:HA.lineEnd,lineStart:HA.lineStart,lines(t){let e="";for(let r=0;r{if(!e)return wN.line+Lc.to(0);let r=s=>[...TJe.unstyle(s)].length,i=t.split(/\r?\n/),n=0;for(let s of i)n+=1+Math.floor(Math.max(r(s)-1,0)/e);return(wN.line+Lc.prevLine()).repeat(n-1)+wN.line+Lc.to(0)}});var sf=E((wCt,yne)=>{"use strict";var MJe=require("events"),wne=js(),BN=nne(),OJe=one(),KJe=lne(),UJe=pne(),bn=Mi(),Tc=Ine(),T0=class extends MJe{constructor(e={}){super();this.name=e.name,this.type=e.type,this.options=e,UJe(this),OJe(this),this.state=new KJe(this),this.initial=[e.initial,e.default].find(r=>r!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=GJe(this.options.margin),this.setMaxListeners(0),HJe(this)}async keypress(e,r={}){this.keypressed=!0;let i=BN.action(e,BN(e,r),this.options.actions);this.state.keypress=i,this.emit("keypress",e,i),this.emit("state",this.state.clone());let n=this.options[i.action]||this[i.action]||this.dispatch;if(typeof n=="function")return await n.call(this,e,i);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit("alert"):this.stdout.write(Tc.code.beep)}cursorHide(){this.stdout.write(Tc.cursor.hide()),bn.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(Tc.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let r=this.state.buffer;this.state.buffer="",!(!r&&!e||this.options.show===!1)&&this.stdout.write(Tc.cursor.down(e)+Tc.clear(r,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:r,rest:i}=this.sections(),{cursor:n,initial:s="",input:o="",value:a=""}=this,l=this.state.size=i.length,c={after:r,cursor:n,initial:s,input:o,prompt:e,size:l,value:a},u=Tc.cursor.restore(c);u&&this.stdout.write(u)}sections(){let{buffer:e,input:r,prompt:i}=this.state;i=wne.unstyle(i);let n=wne.unstyle(e),s=n.indexOf(i),o=n.slice(0,s),l=n.slice(s).split(` +`),c=l[0],u=l[l.length-1],f=(i+(r?" "+r:"")).length,h=fe.call(this,this.value),this.result=()=>i.call(this,this.value),typeof r.initial=="function"&&(this.initial=await r.initial.call(this,this)),typeof r.onRun=="function"&&await r.onRun.call(this,this),typeof r.onSubmit=="function"){let n=r.onSubmit.bind(this),s=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await n(this.name,this.value,this),s())}await this.start(),await this.render()}render(){throw new Error("expected prompt to have a custom render method")}run(){return new Promise(async(e,r)=>{if(this.once("submit",e),this.once("cancel",r),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit("run")})}async element(e,r,i){let{options:n,state:s,symbols:o,timers:a}=this,l=a&&a[e];s.timer=l;let c=n[e]||s[e]||o[e],u=r&&r[e]!=null?r[e]:await c;if(u==="")return u;let g=await this.resolve(u,s,r,i);return!g&&r&&r[e]?this.resolve(c,s,r,i):g}async prefix(){let e=await this.element("prefix")||this.symbols,r=this.timers&&this.timers.prefix,i=this.state;return i.timer=r,bn.isObject(e)&&(e=e[i.status]||e.pending),bn.hasColor(e)?e:(this.styles[i.status]||this.styles.pending)(e)}async message(){let e=await this.element("message");return bn.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element("separator")||this.symbols,r=this.timers&&this.timers.separator,i=this.state;i.timer=r;let n=e[i.status]||e.pending||i.separator,s=await this.resolve(n,i);return bn.isObject(s)&&(s=s[i.status]||s.pending),bn.hasColor(s)?s:this.styles.muted(s)}async pointer(e,r){let i=await this.element("pointer",e,r);if(typeof i=="string"&&bn.hasColor(i))return i;if(i){let n=this.styles,s=this.index===r,o=s?n.primary:c=>c,a=await this.resolve(i[s?"on":"off"]||i,this.state),l=bn.hasColor(a)?a:o(a);return s?l:" ".repeat(a.length)}}async indicator(e,r){let i=await this.element("indicator",e,r);if(typeof i=="string"&&bn.hasColor(i))return i;if(i){let n=this.styles,s=e.enabled===!0,o=s?n.success:n.dark,a=i[s?"on":"off"]||i;return bn.hasColor(a)?a:o(a)}return""}body(){return null}footer(){if(this.state.status==="pending")return this.element("footer")}header(){if(this.state.status==="pending")return this.element("header")}async hint(){if(this.state.status==="pending"&&!this.isValue(this.state.input)){let e=await this.element("hint");return bn.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?"":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==""}resolve(e,...r){return bn.resolve(this,e,...r)}get base(){return T0.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||bn.height(this.stdout,25)}get width(){return this.options.columns||bn.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:r}=this.state,i=[r,e].find(this.isValue.bind(this));return this.isValue(i)?i:this.initial}static get prompt(){return e=>new this(e).run()}};function HJe(t){let e=n=>t[n]===void 0||typeof t[n]=="function",r=["actions","choices","initial","margin","roles","styles","symbols","theme","timers","value"],i=["body","footer","error","header","hint","indicator","message","prefix","separator","skip"];for(let n of Object.keys(t.options)){if(r.includes(n)||/^on[A-Z]/.test(n))continue;let s=t.options[n];typeof s=="function"&&e(n)?i.includes(n)||(t[n]=s.bind(t)):typeof t[n]!="function"&&(t[n]=s)}}function GJe(t){typeof t=="number"&&(t=[t,t,t,t]);let e=[].concat(t||[]),r=n=>n%2==0?` +`:" ",i=[];for(let n=0;n<4;n++){let s=r(n);e[n]?i.push(s.repeat(e[n])):i.push("")}return i}yne.exports=T0});var bne=E((BCt,Bne)=>{"use strict";var jJe=Mi(),Qne={default(t,e){return e},checkbox(t,e){throw new Error("checkbox role is not implemented yet")},editable(t,e){throw new Error("editable role is not implemented yet")},expandable(t,e){throw new Error("expandable role is not implemented yet")},heading(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||"",e},input(t,e){throw new Error("input role is not implemented yet")},option(t,e){return Qne.default(t,e)},radio(t,e){throw new Error("radio role is not implemented yet")},separator(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||t.symbols.line.repeat(5),e},spacer(t,e){return e}};Bne.exports=(t,e={})=>{let r=jJe.merge({},Qne,e.roles);return r[t]||r.default}});var sC=E((QCt,vne)=>{"use strict";var YJe=js(),qJe=sf(),JJe=bne(),M0=Mi(),{reorder:QN,scrollUp:WJe,scrollDown:zJe,isObject:Sne,swap:VJe}=M0,xne=class extends qJe{constructor(e){super(e);this.cursorHide(),this.maxSelected=e.maxSelected||Infinity,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=""}async initialize(){typeof this.options.initial=="function"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:r,autofocus:i,suggest:n}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(s=>s.enabled=!1),typeof n!="function"&&this.selectable.length===0)throw new Error("At least one choice must be selectable");Sne(r)&&(r=Object.keys(r)),Array.isArray(r)?(i!=null&&(this.index=this.findIndex(i)),r.forEach(s=>this.enable(this.find(s))),await this.render()):(i!=null&&(r=i),typeof r=="string"&&(r=this.findIndex(r)),typeof r=="number"&&r>-1&&(this.index=Math.max(0,Math.min(r,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,r){this.state.loadingChoices=!0;let i=[],n=0,s=async(o,a)=>{typeof o=="function"&&(o=await o.call(this)),o instanceof Promise&&(o=await o);for(let l=0;l(this.state.loadingChoices=!1,o))}async toChoice(e,r,i){if(typeof e=="function"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e=="string"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let n=e.value;if(e=JJe(e.role,this.options)(this,e),typeof e.disabled=="string"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint="(disabled)"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||"",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input="",e.index=r,e.cursor=0,M0.define(e,"parent",i),e.level=i?i.level+1:1,e.indent==null&&(e.indent=i?i.indent+" ":e.indent||""),e.path=i?i.path+"."+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,YJe.unstyle(e.message).length));let o=P({},e);return e.reset=(a=o.input,l=o.value)=>{for(let c of Object.keys(o))e[c]=o[c];e.input=a,e.value=l},n==null&&typeof e.initial=="function"&&(e.input=await e.initial.call(this,this.state,e,r)),e}async onChoice(e,r){this.emit("choice",e,r,this),typeof e.onChoice=="function"&&await e.onChoice.call(this,this.state,e,r)}async addChoice(e,r,i){let n=await this.toChoice(e,r,i);return this.choices.push(n),this.index=this.choices.length-1,this.limit=this.choices.length,n}async newItem(e,r,i){let n=P({name:"New choice name?",editable:!0,newChoice:!0},e),s=await this.addChoice(n,r,i);return s.updateChoice=()=>{delete s.newChoice,s.name=s.message=s.input,s.input="",s.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?" ".repeat(e.level-1):"":e.indent}dispatch(e,r){if(this.multiple&&this[r.name])return this[r.name]();this.alert()}focus(e,r){return typeof r!="boolean"&&(r=e.enabled),r&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=r&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelectedr.enabled);return this.choices.forEach(r=>r.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(r=>!!r.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,r){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof r!="boolean"&&(r=!e.enabled),e.enabled=r,e.choices&&e.choices.forEach(n=>this.toggle(n,r));let i=e.parent;for(;i;){let n=i.choices.filter(s=>this.isDisabled(s));i.enabled=n.every(s=>s.enabled===!0),i=i.parent}return kne(this,this.choices),this.emit("toggle",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let r=i=>{let n=Number(i);if(n>this.choices.length-1)return this.alert();let s=this.focused,o=this.choices.find(a=>n===a.index);if(!o.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(o)===-1){let a=QN(this.choices),l=a.indexOf(o);if(s.index>l){let c=a.slice(l,l+this.limit),u=a.filter(g=>!c.includes(g));this.choices=c.concat(u)}else{let c=l-this.limit+1;this.choices=a.slice(c).concat(a.slice(0,c))}}return this.index=this.choices.indexOf(o),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(i=>{let n=this.choices.length,s=this.num,o=(a=!1,l)=>{clearTimeout(this.numberTimeout),a&&(l=r(s)),this.num="",i(l)};if(s==="0"||s.length===1&&Number(s+"0")>n)return o(!0);if(Number(s)>n)return o(!1,this.alert());this.numberTimeout=setTimeout(()=>o(!0),this.delay)})}home(){return this.choices=QN(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,r=QN(this.choices);return this.choices=r.slice(e).concat(r.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,r=this.visible.length,i=this.index;return this.options.scroll===!1&&i===0?this.alert():e>r&&i===0?this.scrollUp():(this.index=(i-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,r=this.visible.length,i=this.index;return this.options.scroll===!1&&i===r-1?this.alert():e>r&&i===r-1?this.scrollDown():(this.index=(i+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=WJe(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=zJe(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){VJe(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&["disabled","collapsed","hidden","completing","readonly"].some(i=>e[i]===!0)?!0:e&&e.role==="heading"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(r=>this.isEnabled(r));if(e.choices){let r=e.choices.filter(i=>!this.isDisabled(i));return e.enabled&&r.every(i=>this.isEnabled(i))}return e.enabled&&!this.isDisabled(e)}isChoice(e,r){return e.name===r||e.index===Number(r)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(r=>this.isChoice(e,r)):this.isChoice(e,this.initial)}map(e=[],r="value"){return[].concat(e||[]).reduce((i,n)=>(i[n]=this.find(n,r),i),{})}filter(e,r){let i=(a,l)=>[a.name,l].includes(e),n=typeof e=="function"?e:i,o=(this.options.multiple?this.state._choices:this.choices).filter(n);return r?o.map(a=>a[r]):o}find(e,r){if(Sne(e))return r?e[r]:e;let i=(o,a)=>[o.name,a].includes(e),n=typeof e=="function"?e:i,s=this.choices.find(n);if(s)return r?s[r]:s}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(o=>o.newChoice))return this.alert();let{reorder:r,sort:i}=this.options,n=this.multiple===!0,s=this.selected;return s===void 0?this.alert():(Array.isArray(s)&&r!==!1&&i!==!0&&(s=M0.reorder(s)),this.value=n?s.map(o=>o.name):s.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let r of e)this.state._choices.some(i=>i.name===r.name)||this.state._choices.push(r);if(!this._initial&&this.options.initial){this._initial=!0;let r=this.initial;if(typeof r=="string"||typeof r=="number"){let i=this.find(r);i&&(this.initial=i.index,this.focus(i,!0))}}}get choices(){return kne(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:r,choices:i}=this,n=e.limit||this._limit||r.limit||i.length;return Math.min(n,this.height)}set value(e){super.value=e}get value(){return typeof super.value!="string"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function kne(t,e){if(e instanceof Promise)return e;if(typeof e=="function"){if(M0.isAsyncFn(e))return e;e=e.call(t,t)}for(let r of e){if(Array.isArray(r.choices)){let i=r.choices.filter(n=>!t.isDisabled(n));r.enabled=i.every(n=>n.enabled===!0)}t.isDisabled(r)===!0&&delete r.enabled}return e}vne.exports=xne});var GA=E((bCt,Pne)=>{"use strict";var _Je=sC(),bN=Mi(),Dne=class extends _Je{constructor(e){super(e);this.emptyError=this.options.emptyError||"No items were selected"}async dispatch(e,r){if(this.multiple)return this[r.name]?await this[r.name](e,r):await super.dispatch(e,r);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,r){return!this.multiple||this.options.pointer?super.pointer(e,r):""}indicator(e,r){return this.multiple?super.indicator(e,r):""}choiceMessage(e,r){let i=this.resolve(e.message,this.state,e,r);return e.role==="heading"&&!bN.hasColor(i)&&(i=this.styles.strong(i)),this.resolve(i,this.state,e,r)}choiceSeparator(){return":"}async renderChoice(e,r){await this.onChoice(e,r);let i=this.index===r,n=await this.pointer(e,r),s=await this.indicator(e,r)+(e.pad||""),o=await this.resolve(e.hint,this.state,e,r);o&&!bN.hasColor(o)&&(o=this.styles.muted(o));let a=this.indent(e),l=await this.choiceMessage(e,r),c=()=>[this.margin[3],a+n+s,l,this.margin[1],o].filter(Boolean).join(" ");return e.role==="heading"?c():e.disabled?(bN.hasColor(l)||(l=this.styles.disabled(l)),c()):(i&&(l=this.styles.em(l)),c())}async renderChoices(){if(this.state.loading==="choices")return this.styles.warning("Loading choices");if(this.state.submitted)return"";let e=this.visible.map(async(s,o)=>await this.renderChoice(s,o)),r=await Promise.all(e);r.length||r.push(this.styles.danger("No matching choices"));let i=this.margin[0]+r.join(` +`),n;return this.options.choicesHeader&&(n=await this.resolve(this.options.choicesHeader,this.state)),[n,i].filter(Boolean).join(` +`)}format(){return!this.state.submitted||this.state.cancelled?"":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(", "):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:r}=this.state,i="",n=await this.header(),s=await this.prefix(),o=await this.separator(),a=await this.message();this.options.promptLine!==!1&&(i=[s,a,o,""].join(" "),this.state.prompt=i);let l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();l&&(i+=l),c&&!i.includes(c)&&(i+=" "+c),e&&!l&&!u.trim()&&this.multiple&&this.emptyError!=null&&(i+=this.styles.danger(this.emptyError)),this.clear(r),this.write([n,i,u,g].filter(Boolean).join(` +`)),this.write(this.margin[2]),this.restore()}};Pne.exports=Dne});var Nne=E((vCt,Rne)=>{"use strict";var XJe=GA(),ZJe=(t,e)=>{let r=t.toLowerCase();return i=>{let s=i.toLowerCase().indexOf(r),o=e(i.slice(s,s+r.length));return s>=0?i.slice(0,s)+o+i.slice(s+r.length):i}},Fne=class extends XJe{constructor(e){super(e);this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:r,input:i}=this.state;return this.input=i.slice(0,r)+e+i.slice(r),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:r}=this.state;return r?(this.input=r.slice(0,e-1)+r.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:r}=this.state;return r[e]===void 0?this.alert():(this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,r=this.state._choices){if(typeof this.options.suggest=="function")return this.options.suggest.call(this,e,r);let i=e.toLowerCase();return r.filter(n=>n.message.toLowerCase().includes(i))}pointer(){return""}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(", ");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!=="pending")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,r=ZJe(this.input,e),i=this.choices;this.choices=i.map(n=>_(P({},n),{message:r(n.message)})),await super.render(),this.choices=i}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Rne.exports=Fne});var SN=E((SCt,Lne)=>{"use strict";var vN=Mi();Lne.exports=(t,e={})=>{t.cursorHide();let{input:r="",initial:i="",pos:n,showCursor:s=!0,color:o}=e,a=o||t.styles.placeholder,l=vN.inverse(t.styles.primary),c=d=>l(t.styles.black(d)),u=r,g=" ",f=c(g);if(t.blink&&t.blink.off===!0&&(c=d=>d,f=""),s&&n===0&&i===""&&r==="")return c(g);if(s&&n===0&&(r===i||r===""))return c(i[0])+a(i.slice(1));i=vN.isPrimitive(i)?`${i}`:"",r=vN.isPrimitive(r)?`${r}`:"";let h=i&&i.startsWith(r)&&i!==r,p=h?c(i[r.length]):f;if(n!==r.length&&s===!0&&(u=r.slice(0,n)+c(r[n])+r.slice(n+1),p=""),s===!1&&(p=""),h){let d=t.styles.unstyle(u+p);return u+p+a(i.slice(d.length))}return u+p}});var O0=E((xCt,Tne)=>{"use strict";var $Je=js(),e3e=GA(),t3e=SN(),Mne=class extends e3e{constructor(e){super(_(P({},e),{multiple:!0}));this.type="form",this.initial=this.options.initial,this.align=[this.options.align,"right"].find(r=>r!=null),this.emptyError="",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(r=>r.reset&&r.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let r=this.focused;if(!r)return this.alert();let{cursor:i,input:n}=r;return r.value=r.input=n.slice(0,i)+e+n.slice(i),r.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:r,input:i}=e;return e.value=e.input=i.slice(0,r-1)+i.slice(r),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:r,input:i}=e;if(i[r]===void 0)return this.alert();let n=`${i}`.slice(0,r)+`${i}`.slice(r+1);return e.value=e.input=n,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,r){return this.dispatch(e,r)}number(e,r){return this.dispatch(e,r)}next(){let e=this.focused;if(!e)return this.alert();let{initial:r,input:i}=e;return r&&r.startsWith(i)&&i!==r?(e.value=e.input=r,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input="",e.cursor=0,this.render()):this.alert()}separator(){return""}format(e){return this.state.submitted?"":super.format(e)}pointer(){return""}indicator(e){return e.input?"\u29BF":"\u2299"}async choiceSeparator(e,r){let i=await this.resolve(e.separator,this.state,e,r)||":";return i?" "+this.styles.disabled(i):""}async renderChoice(e,r){await this.onChoice(e,r);let{state:i,styles:n}=this,{cursor:s,initial:o="",name:a,hint:l,input:c=""}=e,{muted:u,submitted:g,primary:f,danger:h}=n,p=l,d=this.index===r,m=e.validate||(()=>!0),I=await this.choiceSeparator(e,r),B=e.message;this.align==="right"&&(B=B.padStart(this.longest+1," ")),this.align==="left"&&(B=B.padEnd(this.longest+1," "));let b=this.values[a]=c||o,R=c?"success":"dark";await m.call(e,b,this.state)!==!0&&(R="danger");let L=n[R](await this.indicator(e,r))+(e.pad||""),K=this.indent(e),J=()=>[K,L,B+I,c,p].filter(Boolean).join(" ");if(i.submitted)return B=$Je.unstyle(B),c=g(c),p="",J();if(e.format)c=await e.format.call(this,c,e,r);else{let ne=this.styles.muted;c=t3e(this,{input:c,initial:o,pos:s,showCursor:d,color:ne})}return this.isValue(c)||(c=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[a]=await e.result.call(this,b,e,r)),d&&(B=f(B)),e.error?c+=(c?" ":"")+h(e.error.trim()):e.hint&&(c+=(c?" ":"")+u(e.hint.trim())),J()}async submit(){return this.value=this.values,super.base.submit.call(this)}};Tne.exports=Mne});var xN=E((kCt,One)=>{"use strict";var r3e=O0(),i3e=()=>{throw new Error("expected prompt to have a custom authenticate method")},Kne=(t=i3e)=>{class e extends r3e{constructor(i){super(i)}async submit(){this.value=await t.call(this,this.values,this.state),super.base.submit.call(this)}static create(i){return Kne(i)}}return e};One.exports=Kne()});var Gne=E((PCt,Une)=>{"use strict";var n3e=xN();function s3e(t,e){return t.username===this.options.username&&t.password===this.options.password}var Hne=(t=s3e)=>{let e=[{name:"username",message:"username"},{name:"password",message:"password",format(i){return this.options.showPassword?i:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(i.length))}}];class r extends n3e.create(t){constructor(n){super(_(P({},n),{choices:e}))}static create(n){return Hne(n)}}return r};Une.exports=Hne()});var K0=E((DCt,jne)=>{"use strict";var o3e=sf(),{isPrimitive:a3e,hasColor:A3e}=Mi(),Yne=class extends o3e{constructor(e){super(e);this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:r,state:i}=this;return i.submitted?r.success(e):r.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return a3e(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status==="pending"){let e=await this.element("hint");return A3e(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:r}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=this.styles.muted(this.default),a=[i,s,o,n].filter(Boolean).join(" ");this.state.prompt=a;let l=await this.header(),c=this.value=this.cast(e),u=await this.format(c),g=await this.error()||await this.hint(),f=await this.footer();g&&!a.includes(g)&&(u+=" "+g),a+=" "+u,this.clear(r),this.write([l,a,f].filter(Boolean).join(` +`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};jne.exports=Yne});var Wne=E((RCt,qne)=>{"use strict";var l3e=K0(),Jne=class extends l3e{constructor(e){super(e);this.default=this.options.default||(this.initial?"(Y/n)":"(y/N)")}};qne.exports=Jne});var _ne=E((FCt,zne)=>{"use strict";var c3e=GA(),u3e=O0(),of=u3e.prototype,Vne=class extends c3e{constructor(e){super(_(P({},e),{multiple:!0}));this.align=[this.options.align,"left"].find(r=>r!=null),this.emptyError="",this.values={}}dispatch(e,r){let i=this.focused,n=i.parent||{};return!i.editable&&!n.editable&&(e==="a"||e==="i")?super[e]():of.dispatch.call(this,e,r)}append(e,r){return of.append.call(this,e,r)}delete(e,r){return of.delete.call(this,e,r)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?of.next.call(this):super.next()}prev(){return this.focused.editable?of.prev.call(this):super.prev()}async indicator(e,r){let i=e.indicator||"",n=e.editable?i:super.indicator(e,r);return await this.resolve(n,this.state,e,r)||""}indent(e){return e.role==="heading"?"":e.editable?" ":" "}async renderChoice(e,r){return e.indent="",e.editable?of.renderChoice.call(this,e,r):super.renderChoice(e,r)}error(){return""}footer(){return this.state.error}async validate(){let e=!0;for(let r of this.choices){if(typeof r.validate!="function"||r.role==="heading")continue;let i=r.parent?this.value[r.parent.name]:this.value;if(r.editable?i=r.value===r.name?r.initial||"":r.value:this.isDisabled(r)||(i=r.enabled===!0),e=await r.validate(i,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e=="string"?e:"Invalid Input"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let r=e.parent?this.value[e.parent.name]:this.value;if(e.role==="heading"){this.value[e.name]={};continue}e.editable?r[e.name]=e.value===e.name?e.initial||"":e.value:this.isDisabled(e)||(r[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};zne.exports=Vne});var Mc=E((NCt,Xne)=>{"use strict";var g3e=sf(),f3e=SN(),{isPrimitive:h3e}=Mi(),Zne=class extends g3e{constructor(e){super(e);this.initial=h3e(this.initial)?String(this.initial):"",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,r={}){let i=this.state.prevKeypress;return this.state.prevKeypress=r,this.options.multiline===!0&&r.name==="return"&&(!i||i.name!=="return")?this.append(` +`,r):super.keypress(e,r)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value="",this.cursor=0,this.render()}dispatch(e,r){if(!e||r.ctrl||r.code)return this.alert();this.append(e)}append(e){let{cursor:r,input:i}=this.state;this.input=`${i}`.slice(0,r)+e+`${i}`.slice(r),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:r}=this.state;if(e<=0)return this.alert();this.input=`${r}`.slice(0,e-1)+`${r}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:r}=this.state;if(r[e]===void 0)return this.alert();this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let r=this.input.slice(0,e),i=this.input.slice(e),n=r.split(" ");this.state.clipboard.push(n.pop()),this.input=n.join(" "),this.cursor=this.input.length,this.input+=i,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):"";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let r=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||r):f3e(this,{input:e,initial:r,pos:this.cursor})}async render(){let e=this.state.size,r=await this.prefix(),i=await this.separator(),n=await this.message(),s=[r,n,i].filter(Boolean).join(" ");this.state.prompt=s;let o=await this.header(),a=await this.format(),l=await this.error()||await this.hint(),c=await this.footer();l&&!a.includes(l)&&(a+=" "+l),s+=" "+a,this.clear(e),this.write([o,s,c].filter(Boolean).join(` +`)),this.restore()}};Xne.exports=Zne});var ese=E((LCt,$ne)=>{"use strict";var p3e=t=>t.filter((e,r)=>t.lastIndexOf(e)===r),U0=t=>p3e(t).filter(Boolean);$ne.exports=(t,e={},r="")=>{let{past:i=[],present:n=""}=e,s,o;switch(t){case"prev":case"undo":return s=i.slice(0,i.length-1),o=i[i.length-1]||"",{past:U0([r,...s]),present:o};case"next":case"redo":return s=i.slice(1),o=i[0]||"",{past:U0([...s,r]),present:o};case"save":return{past:U0([...i,r]),present:""};case"remove":return o=U0(i.filter(a=>a!==r)),n="",o.length&&(n=o.pop()),{past:o,present:n};default:throw new Error(`Invalid action: "${t}"`)}}});var kN=E((TCt,tse)=>{"use strict";var d3e=Mc(),rse=ese(),ise=class extends d3e{constructor(e){super(e);let r=this.options.history;if(r&&r.store){let i=r.values||this.initial;this.autosave=!!r.autosave,this.store=r.store,this.data=this.store.get("values")||{past:[],present:i},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=rse(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion("prev")}altDown(){return this.completion("next")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=rse("save",this.data,this.input),this.store.set("values",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};tse.exports=ise});var ose=E((MCt,nse)=>{"use strict";var C3e=Mc(),sse=class extends C3e{format(){return""}};nse.exports=sse});var lse=E((OCt,ase)=>{"use strict";var m3e=Mc(),Ase=class extends m3e{constructor(e={}){super(e);this.sep=this.options.separator||/, */,this.initial=e.initial||""}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:r=>r;return this.list.map(e).join(", ")}async submit(e){let r=this.state.error||await this.validate(this.list,this.state);return r!==!0?(this.state.error=r,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};ase.exports=Ase});var gse=E((KCt,cse)=>{"use strict";var E3e=GA(),use=class extends E3e{constructor(e){super(_(P({},e),{multiple:!0}))}};cse.exports=use});var PN=E((UCt,fse)=>{"use strict";var I3e=Mc(),hse=class extends I3e{constructor(e={}){super(P({style:"number"},e));this.min=this.isValue(e.min)?this.toNumber(e.min):-Infinity,this.max=this.isValue(e.max)?this.toNumber(e.max):Infinity,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:"",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e==="."&&this.input.includes(".")?this.alert("invalid number"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let r=e||this.minor,i=this.toNumber(this.input);return i>this.max+r?this.alert():(this.input=`${i+r}`,this.render())}down(e){let r=e||this.minor,i=this.toNumber(this.input);return ithis.isValue(r));return this.value=this.toNumber(e||0),super.submit()}};fse.exports=hse});var dse=E((HCt,pse)=>{pse.exports=PN()});var Ese=E((GCt,Cse)=>{"use strict";var y3e=Mc(),mse=class extends y3e{constructor(e){super(e);this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):""}};Cse.exports=mse});var Bse=E((jCt,Ise)=>{"use strict";var w3e=js(),B3e=sC(),yse=Mi(),wse=class extends B3e{constructor(e={}){super(e);this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||"left"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||` + `;let r=e.startNumber||1;typeof this.scale=="number"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((i,n)=>({name:n+r})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let r of this.choices){e=Math.max(e,r.message.length),r.scaleIndex=r.initial||2,r.scale=[];for(let i=0;i=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return""}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.index)).join(", "):""}pointer(){return""}renderScaleKey(){if(this.scaleKey===!1||this.state.submitted)return"";let e=this.scale.map(i=>` ${i.name} - ${i.message}`);return["",...e].map(i=>this.styles.muted(i)).join(` +`)}renderScaleHeading(e){let r=this.scale.map(l=>l.name);typeof this.options.renderScaleHeading=="function"&&(r=this.options.renderScaleHeading.call(this,e));let i=this.scaleLength-r.join("").length,n=Math.round(i/(r.length-1)),o=r.map(l=>this.styles.strong(l)).join(" ".repeat(n)),a=" ".repeat(this.widths[0]);return this.margin[3]+a+this.margin[1]+o}scaleIndicator(e,r,i){if(typeof this.options.scaleIndicator=="function")return this.options.scaleIndicator.call(this,e,r,i);let n=e.scaleIndex===r.index;return r.disabled?this.styles.hint(this.symbols.radio.disabled):n?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,r){let i=e.scale.map(s=>this.scaleIndicator(e,s,r)),n=this.term==="Hyper"?"":" ";return i.join(n+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,r){await this.onChoice(e,r);let i=this.index===r,n=await this.pointer(e,r),s=await e.hint;s&&!yse.hasColor(s)&&(s=this.styles.muted(s));let o=p=>this.margin[3]+p.replace(/\s+$/,"").padEnd(this.widths[0]," "),a=this.newline,l=this.indent(e),c=await this.resolve(e.message,this.state,e,r),u=await this.renderScale(e,r),g=this.margin[1]+this.margin[3];this.scaleLength=w3e.unstyle(u).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-g.length);let h=yse.wordWrap(c,{width:this.widths[0],newline:a}).split(` +`).map(p=>o(p)+this.margin[1]);return i&&(u=this.styles.info(u),h=h.map(p=>this.styles.info(p))),h[0]+=u,this.linebreak&&h.push(""),[l+n,h.join(` +`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return"";this.tableize();let e=this.visible.map(async(n,s)=>await this.renderChoice(n,s)),r=await Promise.all(e),i=await this.renderScaleHeading();return this.margin[0]+[i,...r.map(n=>n.join(" "))].join(` +`)}async render(){let{submitted:e,size:r}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o="";this.options.promptLine!==!1&&(o=[i,s,n,""].join(" "),this.state.prompt=o);let a=await this.header(),l=await this.format(),c=await this.renderScaleKey(),u=await this.error()||await this.hint(),g=await this.renderChoices(),f=await this.footer(),h=this.emptyError;l&&(o+=l),u&&!o.includes(u)&&(o+=" "+u),e&&!l&&!g.trim()&&this.multiple&&h!=null&&(o+=this.styles.danger(h)),this.clear(r),this.write([a,o,c,g,f].filter(Boolean).join(` +`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};Ise.exports=wse});var Sse=E((YCt,Qse)=>{"use strict";var bse=js(),Q3e=(t="")=>typeof t=="string"?t.replace(/^['"]|['"]$/g,""):"",vse=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=Q3e(e.initial||this.field.initial||""),this.message=e.message||this.name,this.cursor=0,this.input="",this.lines=[]}},b3e=async(t={},e={},r=i=>i)=>{let i=new Set,n=t.fields||[],s=t.template,o=[],a=[],l=[],c=1;typeof s=="function"&&(s=await s());let u=-1,g=()=>s[++u],f=()=>s[u+1],h=p=>{p.line=c,o.push(p)};for(h({type:"bos",value:""});uR.name===I.key);I.field=n.find(R=>R.name===I.key),b||(b=new vse(I),a.push(b)),b.lines.push(I.line-1);continue}let d=o[o.length-1];d.type==="text"&&d.line===c?d.value+=p:h({type:"text",value:p})}return h({type:"eos",value:""}),{input:s,tabstops:o,unique:i,keys:l,items:a}};Qse.exports=async t=>{let e=t.options,r=new Set(e.required===!0?[]:e.required||[]),i=P(P({},e.values),e.initial),{tabstops:n,items:s,keys:o}=await b3e(e,i),a=DN("result",t,e),l=DN("format",t,e),c=DN("validate",t,e,!0),u=t.isValue.bind(t);return async(g={},f=!1)=>{let h=0;g.required=r,g.items=s,g.keys=o,g.output="";let p=async(B,b,R,H)=>{let L=await c(B,b,R,H);return L===!1?"Invalid field "+R.name:L};for(let B of n){let b=B.value,R=B.key;if(B.type!=="template"){b&&(g.output+=b);continue}if(B.type==="template"){let H=s.find(q=>q.name===R);e.required===!0&&g.required.add(H.name);let L=[H.input,g.values[H.value],H.value,b].find(u),J=(H.field||{}).message||B.inner;if(f){let q=await p(g.values[R],g,H,h);if(q&&typeof q=="string"||q===!1){g.invalid.set(R,q);continue}g.invalid.delete(R);let A=await a(g.values[R],g,H,h);g.output+=bse.unstyle(A);continue}H.placeholder=!1;let ne=b;b=await l(b,g,H,h),L!==b?(g.values[R]=L,b=t.styles.typing(L),g.missing.delete(J)):(g.values[R]=void 0,L=`<${J}>`,b=t.styles.primary(L),H.placeholder=!0,g.required.has(R)&&g.missing.add(J)),g.missing.has(J)&&g.validating&&(b=t.styles.warning(L)),g.invalid.has(R)&&g.validating&&(b=t.styles.danger(L)),h===g.index&&(ne!==b?b=t.styles.underline(b):b=t.styles.heading(bse.unstyle(b))),h++}b&&(g.output+=b)}let d=g.output.split(` +`).map(B=>" "+B),m=s.length,I=0;for(let B of s)g.invalid.has(B.name)&&B.lines.forEach(b=>{d[b][0]===" "&&(d[b]=g.styles.danger(g.symbols.bullet)+d[b].slice(1))}),t.isValue(g.values[B.name])&&I++;return g.completed=(I/m*100).toFixed(0),g.output=d.join(` +`),g.output}};function DN(t,e,r,i){return(n,s,o,a)=>typeof o.field[t]=="function"?o.field[t].call(e,n,s,o,a):[i,n].find(l=>e.isValue(l))}});var Pse=E((qCt,xse)=>{"use strict";var v3e=js(),S3e=Sse(),x3e=sf(),kse=class extends x3e{constructor(e){super(e);this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await S3e(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let r=this.getItem();this.cursor+=e,r.cursor+=e}dispatch(e,r){if(!r.code&&!r.ctrl&&e!=null&&this.getItem()){this.append(e,r);return}this.alert()}append(e,r){let i=this.getItem(),n=i.input.slice(0,this.cursor),s=i.input.slice(this.cursor);this.input=i.input=`${n}${e}${s}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let r=e.input.slice(this.cursor),i=e.input.slice(0,this.cursor-1);this.input=e.input=`${i}${r}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let r=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(r=this.styles.danger),r(`${this.state.completed}% completed`)}async render(){let{index:e,keys:r=[],submitted:i,size:n}=this.state,s=[this.options.newline,` +`].find(B=>B!=null),o=await this.prefix(),a=await this.separator(),l=await this.message(),c=[o,l,a].filter(Boolean).join(" ");this.state.prompt=c;let u=await this.header(),g=await this.error()||"",f=await this.hint()||"",h=i?"":await this.interpolate(this.state),p=this.state.key=r[e]||"",d=await this.format(p),m=await this.footer();d&&(c+=" "+d),f&&!d&&this.state.completed===0&&(c+=" "+f),this.clear(n);let I=[u,c,h,m,g.trim()];this.write(I.filter(Boolean).join(s)),this.restore()}getItem(e){let{items:r,keys:i,index:n}=this.state,s=r.find(o=>o.name===i[n]);return s&&s.input!=null&&(this.input=s.input,this.cursor=s.cursor),s}async submit(){typeof this.interpolate!="function"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:r,output:i,values:n}=this.state;if(e.size){let a="";for(let[l,c]of e)a+=`Invalid ${l}: ${c} +`;return this.state.error=a,super.submit()}if(r.size)return this.state.error="Required: "+[...r.keys()].join(", "),super.submit();let o=v3e.unstyle(i).split(` +`).map(a=>a.slice(1)).join(` +`);return this.value={values:n,result:o},super.submit()}};xse.exports=kse});var Fse=E((JCt,Dse)=>{"use strict";var k3e="(Use + to sort)",P3e=GA(),Rse=class extends P3e{constructor(e){super(_(P({},e),{reorder:!1,sort:!0,multiple:!0}));this.state.hint=[this.options.hint,k3e].find(this.isValue.bind(this))}indicator(){return""}async renderChoice(e,r){let i=await super.renderChoice(e,r),n=this.symbols.identicalTo+" ",s=this.index===r&&this.sorting?this.styles.muted(n):" ";return this.options.drag===!1&&(s=""),this.options.numbered===!0?s+`${r+1} - `+i:s+i}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};Dse.exports=Rse});var Tse=E((WCt,Nse)=>{"use strict";var D3e=sC(),Lse=class extends D3e{constructor(e={}){super(e);if(this.emptyError=e.emptyError||"No items were selected",this.term=process.env.TERM_PROGRAM,!this.options.header){let r=["","4 - Strongly Agree","3 - Agree","2 - Neutral","1 - Disagree","0 - Strongly Disagree",""];r=r.map(i=>this.styles.muted(i)),this.state.header=r.join(` + `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let r=await super.toChoices(...e);for(let i of r)i.scale=R3e(5,this.options),i.scaleIdx=2;return r}dispatch(){this.alert()}space(){let e=this.focused,r=e.scale[e.scaleIdx],i=r.selected;return e.scale.forEach(n=>n.selected=!1),r.selected=!i,this.render()}indicator(){return""}pointer(){return""}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return" "}async renderChoice(e,r){await this.onChoice(e,r);let i=this.index===r,n=this.term==="Hyper",s=n?9:8,o=n?"":" ",a=this.symbols.line.repeat(s),l=" ".repeat(s+(n?0:1)),c=b=>(b?this.styles.success("\u25C9"):"\u25EF")+o,u=r+1+".",g=i?this.styles.heading:this.styles.noop,f=await this.resolve(e.message,this.state,e,r),h=this.indent(e),p=h+e.scale.map((b,R)=>c(R===e.scaleIdx)).join(a),d=b=>b===e.scaleIdx?g(b):b,m=h+e.scale.map((b,R)=>d(R)).join(l),I=()=>[u,f].filter(Boolean).join(" "),B=()=>[I(),p,m," "].filter(Boolean).join(` +`);return i&&(p=this.styles.cyan(p),m=this.styles.cyan(m)),B()}async renderChoices(){if(this.state.submitted)return"";let e=this.visible.map(async(i,n)=>await this.renderChoice(i,n)),r=await Promise.all(e);return r.length||r.push(this.styles.danger("No matching choices")),r.join(` +`)}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.scaleIdx)).join(", "):""}async render(){let{submitted:e,size:r}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=[i,s,n].filter(Boolean).join(" ");this.state.prompt=o;let a=await this.header(),l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();(l||!c)&&(o+=" "+l),c&&!o.includes(c)&&(o+=" "+c),e&&!l&&!u&&this.multiple&&this.type!=="form"&&(o+=this.styles.danger(this.emptyError)),this.clear(r),this.write([o,a,u,g].filter(Boolean).join(` +`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function R3e(t,e={}){if(Array.isArray(e.scale))return e.scale.map(i=>P({},i));let r=[];for(let i=1;i{Mse.exports=kN()});var Hse=E((VCt,Kse)=>{"use strict";var F3e=K0(),Use=class extends F3e{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||"no",this.enabled=this.options.enabled||"yes",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e="",r){switch(e.toLowerCase()){case" ":return this.toggle();case"1":case"y":case"t":return this.enable();case"0":case"n":case"f":return this.disable();default:return this.alert()}}format(){let e=i=>this.styles.primary.underline(i);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(" / "))}async render(){let{size:e}=this.state,r=await this.header(),i=await this.prefix(),n=await this.separator(),s=await this.message(),o=await this.format(),a=await this.error()||await this.hint(),l=await this.footer(),c=[i,s,n,o].join(" ");this.state.prompt=c,a&&!c.includes(a)&&(c+=" "+a),this.clear(e),this.write([r,c,l].filter(Boolean).join(` +`)),this.write(this.margin[2]),this.restore()}};Kse.exports=Use});var Yse=E((_Ct,Gse)=>{"use strict";var N3e=GA(),jse=class extends N3e{constructor(e){super(e);if(typeof this.options.correctChoice!="number"||this.options.correctChoice<0)throw new Error("Please specify the index of the correct answer from the list of choices")}async toChoices(e,r){let i=await super.toChoices(e,r);if(i.length<2)throw new Error("Please give at least two choices to the user");if(this.options.correctChoice>i.length)throw new Error("Please specify the index of the correct answer from the list of choices");return i}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};Gse.exports=jse});var Jse=E(RN=>{"use strict";var qse=Mi(),ti=(t,e)=>{qse.defineExport(RN,t,e),qse.defineExport(RN,t.toLowerCase(),e)};ti("AutoComplete",()=>Nne());ti("BasicAuth",()=>Gne());ti("Confirm",()=>Wne());ti("Editable",()=>_ne());ti("Form",()=>O0());ti("Input",()=>kN());ti("Invisible",()=>ose());ti("List",()=>lse());ti("MultiSelect",()=>gse());ti("Numeral",()=>dse());ti("Password",()=>Ese());ti("Scale",()=>Bse());ti("Select",()=>GA());ti("Snippet",()=>Pse());ti("Sort",()=>Fse());ti("Survey",()=>Tse());ti("Text",()=>Ose());ti("Toggle",()=>Hse());ti("Quiz",()=>Yse())});var zse=E((ZCt,Wse)=>{Wse.exports={ArrayPrompt:sC(),AuthPrompt:xN(),BooleanPrompt:K0(),NumberPrompt:PN(),StringPrompt:Mc()}});var aC=E(($Ct,Vse)=>{"use strict";var _se=require("assert"),FN=require("events"),jA=Mi(),No=class extends FN{constructor(e,r){super();this.options=jA.merge({},e),this.answers=P({},r)}register(e,r){if(jA.isObject(e)){for(let n of Object.keys(e))this.register(n,e[n]);return this}_se.equal(typeof r,"function","expected a function");let i=e.toLowerCase();return r.prototype instanceof this.Prompt?this.prompts[i]=r:this.prompts[i]=r(this.Prompt,this),this}async prompt(e=[]){for(let r of[].concat(e))try{typeof r=="function"&&(r=await r.call(this)),await this.ask(jA.merge({},this.options,r))}catch(i){return Promise.reject(i)}return this.answers}async ask(e){typeof e=="function"&&(e=await e.call(this));let r=jA.merge({},this.options,e),{type:i,name:n}=e,{set:s,get:o}=jA;if(typeof i=="function"&&(i=await i.call(this,e,this.answers)),!i)return this.answers[n];_se(this.prompts[i],`Prompt "${i}" is not registered`);let a=new this.prompts[i](r),l=o(this.answers,n);a.state.answers=this.answers,a.enquirer=this,n&&a.on("submit",u=>{this.emit("answer",n,u,a),s(this.answers,n,u)});let c=a.emit.bind(a);return a.emit=(...u)=>(this.emit.call(this,...u),c(...u)),this.emit("prompt",a,this),r.autofill&&l!=null?(a.value=a.input=l,r.autofill==="show"&&await a.submit()):l=a.value=await a.run(),l}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||sf()}static get prompts(){return Jse()}static get types(){return zse()}static get prompt(){let e=(r,...i)=>{let n=new this(...i),s=n.emit.bind(n);return n.emit=(...o)=>(e.emit(...o),s(...o)),n.prompt(r)};return jA.mixinEmitter(e,new FN),e}};jA.mixinEmitter(No,new FN);var NN=No.prompts;for(let t of Object.keys(NN)){let e=t.toLowerCase(),r=i=>new NN[t](i).run();No.prompt[e]=r,No[e]=r,No[t]||Reflect.defineProperty(No,t,{get:()=>NN[t]})}var oC=t=>{jA.defineExport(No,t,()=>No.types[t])};oC("ArrayPrompt");oC("AuthPrompt");oC("BooleanPrompt");oC("NumberPrompt");oC("StringPrompt");Vse.exports=No});var loe=E((Gmt,Aoe)=>{function K3e(t,e){for(var r=-1,i=t==null?0:t.length;++r{var U3e=XB(),H3e=jg();function G3e(t,e,r,i){var n=!r;r||(r={});for(var s=-1,o=e.length;++s{var j3e=Af(),Y3e=zg();function q3e(t,e){return t&&j3e(e,Y3e(e),t)}uoe.exports=q3e});var hoe=E((qmt,foe)=>{function J3e(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}foe.exports=J3e});var doe=E((Jmt,poe)=>{var W3e=Gs(),z3e=u0(),V3e=hoe(),_3e=Object.prototype,X3e=_3e.hasOwnProperty;function Z3e(t){if(!W3e(t))return V3e(t);var e=z3e(t),r=[];for(var i in t)i=="constructor"&&(e||!X3e.call(t,i))||r.push(i);return r}poe.exports=Z3e});var lf=E((Wmt,Coe)=>{var $3e=bF(),eWe=doe(),tWe=Hd();function rWe(t){return tWe(t)?$3e(t,!0):eWe(t)}Coe.exports=rWe});var Eoe=E((zmt,moe)=>{var iWe=Af(),nWe=lf();function sWe(t,e){return t&&iWe(e,nWe(e),t)}moe.exports=sWe});var UN=E((hC,cf)=>{var oWe=Ks(),Ioe=typeof hC=="object"&&hC&&!hC.nodeType&&hC,yoe=Ioe&&typeof cf=="object"&&cf&&!cf.nodeType&&cf,aWe=yoe&&yoe.exports===Ioe,woe=aWe?oWe.Buffer:void 0,Boe=woe?woe.allocUnsafe:void 0;function AWe(t,e){if(e)return t.slice();var r=t.length,i=Boe?Boe(r):new t.constructor(r);return t.copy(i),i}cf.exports=AWe});var HN=E((Vmt,Qoe)=>{function lWe(t,e){var r=-1,i=t.length;for(e||(e=Array(i));++r{var cWe=Af(),uWe=f0();function gWe(t,e){return cWe(t,uWe(t),e)}boe.exports=gWe});var H0=E((Xmt,Soe)=>{var fWe=vF(),hWe=fWe(Object.getPrototypeOf,Object);Soe.exports=hWe});var GN=E((Zmt,xoe)=>{var pWe=$B(),dWe=H0(),CWe=f0(),mWe=RF(),EWe=Object.getOwnPropertySymbols,IWe=EWe?function(t){for(var e=[];t;)pWe(e,CWe(t)),t=dWe(t);return e}:mWe;xoe.exports=IWe});var Poe=E(($mt,koe)=>{var yWe=Af(),wWe=GN();function BWe(t,e){return yWe(t,wWe(t),e)}koe.exports=BWe});var Roe=E((eEt,Doe)=>{var QWe=DF(),bWe=GN(),vWe=lf();function SWe(t){return QWe(t,vWe,bWe)}Doe.exports=SWe});var Noe=E((tEt,Foe)=>{var xWe=Object.prototype,kWe=xWe.hasOwnProperty;function PWe(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&kWe.call(t,"index")&&(r.index=t.index,r.input=t.input),r}Foe.exports=PWe});var G0=E((rEt,Loe)=>{var Toe=kF();function DWe(t){var e=new t.constructor(t.byteLength);return new Toe(e).set(new Toe(t)),e}Loe.exports=DWe});var Ooe=E((iEt,Moe)=>{var RWe=G0();function FWe(t,e){var r=e?RWe(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}Moe.exports=FWe});var Uoe=E((nEt,Koe)=>{var NWe=/\w*$/;function LWe(t){var e=new t.constructor(t.source,NWe.exec(t));return e.lastIndex=t.lastIndex,e}Koe.exports=LWe});var qoe=E((sEt,Hoe)=>{var Goe=ac(),joe=Goe?Goe.prototype:void 0,Yoe=joe?joe.valueOf:void 0;function TWe(t){return Yoe?Object(Yoe.call(t)):{}}Hoe.exports=TWe});var jN=E((oEt,Joe)=>{var MWe=G0();function OWe(t,e){var r=e?MWe(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}Joe.exports=OWe});var zoe=E((aEt,Woe)=>{var KWe=G0(),UWe=Ooe(),HWe=Uoe(),GWe=qoe(),jWe=jN(),YWe="[object Boolean]",qWe="[object Date]",JWe="[object Map]",WWe="[object Number]",zWe="[object RegExp]",VWe="[object Set]",_We="[object String]",XWe="[object Symbol]",ZWe="[object ArrayBuffer]",$We="[object DataView]",e8e="[object Float32Array]",t8e="[object Float64Array]",r8e="[object Int8Array]",i8e="[object Int16Array]",n8e="[object Int32Array]",s8e="[object Uint8Array]",o8e="[object Uint8ClampedArray]",a8e="[object Uint16Array]",A8e="[object Uint32Array]";function l8e(t,e,r){var i=t.constructor;switch(e){case ZWe:return KWe(t);case YWe:case qWe:return new i(+t);case $We:return UWe(t,r);case e8e:case t8e:case r8e:case i8e:case n8e:case s8e:case o8e:case a8e:case A8e:return jWe(t,r);case JWe:return new i;case WWe:case _We:return new i(t);case zWe:return HWe(t);case VWe:return new i;case XWe:return GWe(t)}}Woe.exports=l8e});var Xoe=E((AEt,Voe)=>{var c8e=Gs(),_oe=Object.create,u8e=function(){function t(){}return function(e){if(!c8e(e))return{};if(_oe)return _oe(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();Voe.exports=u8e});var YN=E((lEt,Zoe)=>{var g8e=Xoe(),f8e=H0(),h8e=u0();function p8e(t){return typeof t.constructor=="function"&&!h8e(t)?g8e(f8e(t)):{}}Zoe.exports=p8e});var eae=E((cEt,$oe)=>{var d8e=jd(),C8e=Qo(),m8e="[object Map]";function E8e(t){return C8e(t)&&d8e(t)==m8e}$oe.exports=E8e});var nae=E((uEt,tae)=>{var I8e=eae(),y8e=A0(),rae=l0(),iae=rae&&rae.isMap,w8e=iae?y8e(iae):I8e;tae.exports=w8e});var oae=E((gEt,sae)=>{var B8e=jd(),Q8e=Qo(),b8e="[object Set]";function v8e(t){return Q8e(t)&&B8e(t)==b8e}sae.exports=v8e});var cae=E((fEt,aae)=>{var S8e=oae(),x8e=A0(),Aae=l0(),lae=Aae&&Aae.isSet,k8e=lae?x8e(lae):S8e;aae.exports=k8e});var pae=E((hEt,uae)=>{var P8e=Gd(),D8e=loe(),R8e=XB(),F8e=goe(),N8e=Eoe(),L8e=UN(),T8e=HN(),M8e=voe(),O8e=Poe(),K8e=FF(),U8e=Roe(),H8e=jd(),G8e=Noe(),j8e=zoe(),Y8e=YN(),q8e=As(),J8e=Od(),W8e=nae(),z8e=Gs(),V8e=cae(),_8e=zg(),X8e=lf(),Z8e=1,$8e=2,e4e=4,gae="[object Arguments]",t4e="[object Array]",r4e="[object Boolean]",i4e="[object Date]",n4e="[object Error]",fae="[object Function]",s4e="[object GeneratorFunction]",o4e="[object Map]",a4e="[object Number]",hae="[object Object]",A4e="[object RegExp]",l4e="[object Set]",c4e="[object String]",u4e="[object Symbol]",g4e="[object WeakMap]",f4e="[object ArrayBuffer]",h4e="[object DataView]",p4e="[object Float32Array]",d4e="[object Float64Array]",C4e="[object Int8Array]",m4e="[object Int16Array]",E4e="[object Int32Array]",I4e="[object Uint8Array]",y4e="[object Uint8ClampedArray]",w4e="[object Uint16Array]",B4e="[object Uint32Array]",rr={};rr[gae]=rr[t4e]=rr[f4e]=rr[h4e]=rr[r4e]=rr[i4e]=rr[p4e]=rr[d4e]=rr[C4e]=rr[m4e]=rr[E4e]=rr[o4e]=rr[a4e]=rr[hae]=rr[A4e]=rr[l4e]=rr[c4e]=rr[u4e]=rr[I4e]=rr[y4e]=rr[w4e]=rr[B4e]=!0;rr[n4e]=rr[fae]=rr[g4e]=!1;function j0(t,e,r,i,n,s){var o,a=e&Z8e,l=e&$8e,c=e&e4e;if(r&&(o=n?r(t,i,n,s):r(t)),o!==void 0)return o;if(!z8e(t))return t;var u=q8e(t);if(u){if(o=G8e(t),!a)return T8e(t,o)}else{var g=H8e(t),f=g==fae||g==s4e;if(J8e(t))return L8e(t,a);if(g==hae||g==gae||f&&!n){if(o=l||f?{}:Y8e(t),!a)return l?O8e(t,N8e(o,t)):M8e(t,F8e(o,t))}else{if(!rr[g])return n?t:{};o=j8e(t,g,a)}}s||(s=new P8e);var h=s.get(t);if(h)return h;s.set(t,o),V8e(t)?t.forEach(function(m){o.add(j0(m,e,r,m,t,s))}):W8e(t)&&t.forEach(function(m,I){o.set(I,j0(m,e,r,I,t,s))});var p=c?l?U8e:K8e:l?X8e:_8e,d=u?void 0:p(t);return D8e(d||t,function(m,I){d&&(I=m,m=t[I]),R8e(o,I,j0(m,e,r,I,t,s))}),o}uae.exports=j0});var qN=E((pEt,dae)=>{var Q4e=pae(),b4e=1,v4e=4;function S4e(t){return Q4e(t,b4e|v4e)}dae.exports=S4e});var mae=E((dEt,Cae)=>{var x4e=tF();function k4e(t,e,r){return t==null?t:x4e(t,e,r)}Cae.exports=k4e});var Qae=E((wEt,Bae)=>{function P4e(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}Bae.exports=P4e});var vae=E((BEt,bae)=>{var D4e=xd(),R4e=zP();function F4e(t,e){return e.length<2?t:D4e(t,R4e(e,0,-1))}bae.exports=F4e});var xae=E((QEt,Sae)=>{var N4e=Gg(),L4e=Qae(),T4e=vae(),M4e=Sc();function O4e(t,e){return e=N4e(e,t),t=T4e(t,e),t==null||delete t[M4e(L4e(e))]}Sae.exports=O4e});var Pae=E((bEt,kae)=>{var K4e=xae();function U4e(t,e){return t==null?!0:K4e(t,e)}kae.exports=U4e});var Kae=E((tIt,Oae)=>{Oae.exports={name:"@yarnpkg/cli",version:"3.1.1",license:"BSD-2-Clause",main:"./sources/index.ts",dependencies:{"@yarnpkg/core":"workspace:^","@yarnpkg/fslib":"workspace:^","@yarnpkg/libzip":"workspace:^","@yarnpkg/parsers":"workspace:^","@yarnpkg/plugin-compat":"workspace:^","@yarnpkg/plugin-dlx":"workspace:^","@yarnpkg/plugin-essentials":"workspace:^","@yarnpkg/plugin-file":"workspace:^","@yarnpkg/plugin-git":"workspace:^","@yarnpkg/plugin-github":"workspace:^","@yarnpkg/plugin-http":"workspace:^","@yarnpkg/plugin-init":"workspace:^","@yarnpkg/plugin-link":"workspace:^","@yarnpkg/plugin-nm":"workspace:^","@yarnpkg/plugin-npm":"workspace:^","@yarnpkg/plugin-npm-cli":"workspace:^","@yarnpkg/plugin-pack":"workspace:^","@yarnpkg/plugin-patch":"workspace:^","@yarnpkg/plugin-pnp":"workspace:^","@yarnpkg/plugin-pnpm":"workspace:^","@yarnpkg/shell":"workspace:^",chalk:"^3.0.0","ci-info":"^3.2.0",clipanion:"^3.0.1",semver:"^7.1.2",tslib:"^1.13.0",typanion:"^3.3.0",yup:"^0.32.9"},devDependencies:{"@types/semver":"^7.1.0","@types/yup":"^0","@yarnpkg/builder":"workspace:^","@yarnpkg/monorepo":"workspace:^","@yarnpkg/pnpify":"workspace:^",micromatch:"^4.0.2",typescript:"^4.5.2"},peerDependencies:{"@yarnpkg/core":"workspace:^"},scripts:{postpack:"rm -rf lib",prepack:'run build:compile "$(pwd)"',"build:cli+hook":"run build:pnp:hook && builder build bundle","build:cli":"builder build bundle","run:cli":"builder run","update-local":"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/"},publishConfig:{main:"./lib/index.js",types:"./lib/index.d.ts",bin:null},files:["/lib/**/*","!/lib/pluginConfiguration.*","!/lib/cli.*"],"@yarnpkg/builder":{bundles:{standard:["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-dlx","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm"]}},repository:{type:"git",url:"ssh://git@github.com/yarnpkg/berry.git",directory:"packages/yarnpkg-cli"},engines:{node:">=12 <14 || 14.2 - 14.9 || >14.10.0"}}});var iL=E((SBt,QAe)=>{"use strict";QAe.exports=function(e,r){r===!0&&(r=0);var i=e.indexOf("://"),n=e.substring(0,i).split("+").filter(Boolean);return typeof r=="number"?n[r]:n}});var nL=E((xBt,bAe)=>{"use strict";var sze=iL();function vAe(t){if(Array.isArray(t))return t.indexOf("ssh")!==-1||t.indexOf("rsync")!==-1;if(typeof t!="string")return!1;var e=sze(t);return t=t.substring(t.indexOf("://")+3),vAe(e)?!0:t.indexOf("@"){"use strict";var oze=iL(),aze=nL(),Aze=require("querystring");function lze(t){t=(t||"").trim();var e={protocols:oze(t),protocol:null,port:null,resource:"",user:"",pathname:"",hash:"",search:"",href:t,query:Object.create(null)},r=t.indexOf("://"),i=-1,n=null,s=null;t.startsWith(".")&&(t.startsWith("./")&&(t=t.substring(2)),e.pathname=t,e.protocol="file");var o=t.charAt(1);return e.protocol||(e.protocol=e.protocols[0],e.protocol||(aze(t)?e.protocol="ssh":((o==="/"||o==="~")&&(t=t.substring(2)),e.protocol="file"))),r!==-1&&(t=t.substring(r+3)),s=t.split("/"),e.protocol!=="file"?e.resource=s.shift():e.resource="",n=e.resource.split("@"),n.length===2&&(e.user=n[0],e.resource=n[1]),n=e.resource.split(":"),n.length===2&&(e.resource=n[0],n[1]?(e.port=Number(n[1]),isNaN(e.port)&&(e.port=null,s.unshift(n[1]))):e.port=null),s=s.filter(Boolean),e.protocol==="file"?e.pathname=e.href:e.pathname=e.pathname||(e.protocol!=="file"||e.href[0]==="/"?"/":"")+s.join("/"),n=e.pathname.split("#"),n.length===2&&(e.pathname=n[0],e.hash=n[1]),n=e.pathname.split("?"),n.length===2&&(e.pathname=n[0],e.search=n[1]),e.query=Aze.parse(e.search),e.href=e.href.replace(/\/$/,""),e.pathname=e.pathname.replace(/\/$/,""),e}SAe.exports=lze});var DAe=E((PBt,kAe)=>{"use strict";var cze=typeof URL=="undefined"?require("url").URL:URL,PAe=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t);kAe.exports=(t,e)=>{e=Object.assign({defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripHash:!0,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0},e),Reflect.has(e,"normalizeHttps")&&(e.forceHttp=e.normalizeHttps),Reflect.has(e,"normalizeHttp")&&(e.forceHttps=e.normalizeHttp),Reflect.has(e,"stripFragment")&&(e.stripHash=e.stripFragment),t=t.trim();let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let n=new cze(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&n.protocol==="https:"&&(n.protocol="http:"),e.forceHttps&&n.protocol==="http:"&&(n.protocol="https:"),e.stripHash&&(n.hash=""),n.pathname&&(n.pathname=n.pathname.replace(/((?![https?:]).)\/{2,}/g,(s,o)=>/^(?!\/)/g.test(o)?`${o}/`:"/")),n.pathname&&(n.pathname=decodeURI(n.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let s=n.pathname.split("/"),o=s[s.length-1];PAe(o,e.removeDirectoryIndex)&&(s=s.slice(0,s.length-1),n.pathname=s.slice(1).join("/")+"/")}if(n.hostname&&(n.hostname=n.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z\.]{2,5})$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let s of[...n.searchParams.keys()])PAe(s,e.removeQueryParameters)&&n.searchParams.delete(s);return e.sortQueryParameters&&n.searchParams.sort(),t=n.toString(),(e.removeTrailingSlash||n.pathname==="/")&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),t}});var FAe=E((DBt,RAe)=>{"use strict";var uze=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},gze=xAe(),fze=DAe();function hze(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(typeof t!="string"||!t.trim())throw new Error("Invalid url.");e&&((typeof e=="undefined"?"undefined":uze(e))!=="object"&&(e={stripFragment:!1}),t=fze(t,e));var r=gze(t);return r}RAe.exports=hze});var TAe=E((RBt,NAe)=>{"use strict";var pze=FAe(),LAe=nL();function dze(t){var e=pze(t);e.token="";var r=e.user.split(":");return r.length===2&&(r[1]==="x-oauth-basic"?e.token=r[0]:r[0]==="x-token-auth"&&(e.token=r[1])),LAe(e.protocols)||LAe(t)?e.protocol="ssh":e.protocols.length?e.protocol=e.protocols[0]:e.protocol="file",e.href=e.href.replace(/\/$/,""),e}NAe.exports=dze});var OAe=E((FBt,MAe)=>{"use strict";var Cze=TAe();function sL(t){if(typeof t!="string")throw new Error("The url must be a string.");var e=Cze(t),r=e.resource.split("."),i=null;switch(e.toString=function(l){return sL.stringify(this,l)},e.source=r.length>2?r.slice(1-r.length).join("."):e.source=e.resource,e.git_suffix=/\.git$/.test(e.pathname),e.name=decodeURIComponent(e.pathname.replace(/^\//,"").replace(/\.git$/,"")),e.owner=decodeURIComponent(e.user),e.source){case"git.cloudforge.com":e.owner=e.user,e.organization=r[0],e.source="cloudforge.com";break;case"visualstudio.com":if(e.resource==="vs-ssh.visualstudio.com"){i=e.name.split("/"),i.length===4&&(e.organization=i[1],e.owner=i[2],e.name=i[3],e.full_name=i[2]+"/"+i[3]);break}else{i=e.name.split("/"),i.length===2?(e.owner=i[1],e.name=i[1],e.full_name="_git/"+e.name):i.length===3?(e.name=i[2],i[0]==="DefaultCollection"?(e.owner=i[2],e.organization=i[0],e.full_name=e.organization+"/_git/"+e.name):(e.owner=i[0],e.full_name=e.owner+"/_git/"+e.name)):i.length===4&&(e.organization=i[0],e.owner=i[1],e.name=i[3],e.full_name=e.organization+"/"+e.owner+"/_git/"+e.name);break}case"dev.azure.com":case"azure.com":if(e.resource==="ssh.dev.azure.com"){i=e.name.split("/"),i.length===4&&(e.organization=i[1],e.owner=i[2],e.name=i[3]);break}else{i=e.name.split("/"),i.length===5?(e.organization=i[0],e.owner=i[1],e.name=i[4],e.full_name="_git/"+e.name):i.length===3?(e.name=i[2],i[0]==="DefaultCollection"?(e.owner=i[2],e.organization=i[0],e.full_name=e.organization+"/_git/"+e.name):(e.owner=i[0],e.full_name=e.owner+"/_git/"+e.name)):i.length===4&&(e.organization=i[0],e.owner=i[1],e.name=i[3],e.full_name=e.organization+"/"+e.owner+"/_git/"+e.name);break}default:i=e.name.split("/");var n=i.length-1;if(i.length>=2){var s=i.indexOf("blob",2),o=i.indexOf("tree",2),a=i.indexOf("commit",2);n=s>0?s-1:o>0?o-1:a>0?a-1:n,e.owner=i.slice(0,n).join("/"),e.name=i[n],a&&(e.commit=i[n+2])}e.ref="",e.filepathtype="",e.filepath="",i.length>n+2&&["blob","tree"].indexOf(i[n+1])>=0&&(e.filepathtype=i[n+1],e.ref=i[n+2],i.length>n+3&&(e.filepath=i.slice(n+3).join("/"))),e.organization=e.owner;break}return e.full_name||(e.full_name=e.owner,e.name&&(e.full_name&&(e.full_name+="/"),e.full_name+=e.name)),e}sL.stringify=function(t,e){e=e||(t.protocols&&t.protocols.length?t.protocols.join("+"):t.protocol);var r=t.port?":"+t.port:"",i=t.user||"git",n=t.git_suffix?".git":"";switch(e){case"ssh":return r?"ssh://"+i+"@"+t.resource+r+"/"+t.full_name+n:i+"@"+t.resource+":"+t.full_name+n;case"git+ssh":case"ssh+git":case"ftp":case"ftps":return e+"://"+i+"@"+t.resource+r+"/"+t.full_name+n;case"http":case"https":var s=t.token?mze(t):t.user&&(t.protocols.includes("http")||t.protocols.includes("https"))?t.user+"@":"";return e+"://"+s+t.resource+r+"/"+t.full_name+n;default:return t.href}};function mze(t){switch(t.source){case"bitbucket.org":return"x-token-auth:"+t.token+"@";default:return t.token+"@"}}MAe.exports=sL});var NL=E((Obt,ole)=>{var Mze=jg(),Oze=Kg();function Kze(t,e,r){(r!==void 0&&!Oze(t[e],r)||r===void 0&&!(e in t))&&Mze(t,e,r)}ole.exports=Kze});var Ale=E((Kbt,ale)=>{var Uze=Hd(),Hze=Qo();function Gze(t){return Hze(t)&&Uze(t)}ale.exports=Gze});var ule=E((Ubt,lle)=>{var jze=Ac(),Yze=H0(),qze=Qo(),Jze="[object Object]",Wze=Function.prototype,zze=Object.prototype,cle=Wze.toString,Vze=zze.hasOwnProperty,_ze=cle.call(Object);function Xze(t){if(!qze(t)||jze(t)!=Jze)return!1;var e=Yze(t);if(e===null)return!0;var r=Vze.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&cle.call(r)==_ze}lle.exports=Xze});var LL=E((Hbt,gle)=>{function Zze(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}gle.exports=Zze});var hle=E((Gbt,fle)=>{var $ze=Af(),e5e=lf();function t5e(t){return $ze(t,e5e(t))}fle.exports=t5e});var Ile=E((jbt,ple)=>{var dle=NL(),r5e=UN(),i5e=jN(),n5e=HN(),s5e=YN(),Cle=Pd(),mle=As(),o5e=Ale(),a5e=Od(),A5e=zB(),l5e=Gs(),c5e=ule(),u5e=c0(),Ele=LL(),g5e=hle();function f5e(t,e,r,i,n,s,o){var a=Ele(t,r),l=Ele(e,r),c=o.get(l);if(c){dle(t,r,c);return}var u=s?s(a,l,r+"",t,e,o):void 0,g=u===void 0;if(g){var f=mle(l),h=!f&&a5e(l),p=!f&&!h&&u5e(l);u=l,f||h||p?mle(a)?u=a:o5e(a)?u=n5e(a):h?(g=!1,u=r5e(l,!0)):p?(g=!1,u=i5e(l,!0)):u=[]:c5e(l)||Cle(l)?(u=a,Cle(a)?u=g5e(a):(!l5e(a)||A5e(a))&&(u=s5e(l))):g=!1}g&&(o.set(l,u),n(u,l,i,s,o),o.delete(l)),dle(t,r,u)}ple.exports=f5e});var Ble=E((Ybt,yle)=>{var h5e=Gd(),p5e=NL(),d5e=BF(),C5e=Ile(),m5e=Gs(),E5e=lf(),I5e=LL();function wle(t,e,r,i,n){t!==e&&d5e(e,function(s,o){if(n||(n=new h5e),m5e(s))C5e(t,e,o,r,wle,i,n);else{var a=i?i(I5e(t,o),s,o+"",t,e,n):void 0;a===void 0&&(a=s),p5e(t,o,a)}},E5e)}yle.exports=wle});var ble=E((qbt,Qle)=>{var y5e=e0(),w5e=nF(),B5e=sF();function Q5e(t,e){return B5e(w5e(t,e,y5e),t+"")}Qle.exports=Q5e});var Sle=E((Jbt,vle)=>{var b5e=Kg(),v5e=Hd(),S5e=kd(),x5e=Gs();function k5e(t,e,r){if(!x5e(r))return!1;var i=typeof e;return(i=="number"?v5e(r)&&S5e(e,r.length):i=="string"&&e in r)?b5e(r[e],t):!1}vle.exports=k5e});var kle=E((Wbt,xle)=>{var P5e=ble(),D5e=Sle();function R5e(t){return P5e(function(e,r){var i=-1,n=r.length,s=n>1?r[n-1]:void 0,o=n>2?r[2]:void 0;for(s=t.length>3&&typeof s=="function"?(n--,s):void 0,o&&D5e(r[0],r[1],o)&&(s=n<3?void 0:s,n=1),e=Object(e);++i{var F5e=Ble(),N5e=kle(),L5e=N5e(function(t,e,r){F5e(t,e,r)});Ple.exports=L5e});var Wle=E(($vt,Jle)=>{var VL;Jle.exports=()=>(typeof VL=="undefined"&&(VL=require("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),VL)});var $le=E(XL=>{function pf(t,e){if(typeof t=="string")return t;if(t){let r,i;if(Array.isArray(t)){for(r=0;r0)return(f=pf(n[g],u))?f.replace("*",c.substring(g.length-1)):Gc(i,c,1)}return Gc(i,c)}}function l6e(t,e={}){let r=0,i,n=e.browser,s=e.fields||["module","main"];for(n&&!s.includes("browser")&&s.unshift("browser");r{var eT;nce.exports=()=>(typeof eT=="undefined"&&(eT=require("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),eT)});var gce=E((aT,AT)=>{(function(t){aT&&typeof aT=="object"&&typeof AT!="undefined"?AT.exports=t():typeof define=="function"&&define.amd?define([],t):typeof window!="undefined"?window.isWindows=t():typeof global!="undefined"?global.isWindows=t():typeof self!="undefined"?self.isWindows=t():this.isWindows=t()})(function(){"use strict";return function(){return process&&(process.platform==="win32"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var dce=E((Dxt,fce)=>{"use strict";lT.ifExists=E6e;var mf=require("util"),Es=require("path"),hce=gce(),I6e=/^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/,y6e={createPwshFile:!0,createCmdFile:hce(),fs:require("fs")},w6e=new Map([[".js","node"],[".cjs","node"],[".mjs","node"],[".cmd","cmd"],[".bat","cmd"],[".ps1","pwsh"],[".sh","sh"]]);function pce(t){let e=P(P({},y6e),t),r=e.fs;return e.fs_={chmod:r.chmod?mf.promisify(r.chmod):async()=>{},mkdir:mf.promisify(r.mkdir),readFile:mf.promisify(r.readFile),stat:mf.promisify(r.stat),unlink:mf.promisify(r.unlink),writeFile:mf.promisify(r.writeFile)},e}async function lT(t,e,r){let i=pce(r);await i.fs_.stat(t),await B6e(t,e,i)}function E6e(t,e,r){return lT(t,e,r).catch(()=>{})}function Q6e(t,e){return e.fs_.unlink(t).catch(()=>{})}async function B6e(t,e,r){let i=await S6e(t,r);return await b6e(e,r),v6e(t,e,i,r)}function b6e(t,e){return e.fs_.mkdir(Es.dirname(t),{recursive:!0})}function v6e(t,e,r,i){let n=pce(i),s=[{generator:P6e,extension:""}];return n.createCmdFile&&s.push({generator:k6e,extension:".cmd"}),n.createPwshFile&&s.push({generator:D6e,extension:".ps1"}),Promise.all(s.map(o=>x6e(t,e+o.extension,r,o.generator,n)))}function R6e(t,e){return Q6e(t,e)}function N6e(t,e){return F6e(t,e)}async function S6e(t,e){let n=(await e.fs_.readFile(t,"utf8")).trim().split(/\r*\n/)[0].match(I6e);if(!n){let s=Es.extname(t).toLowerCase();return{program:w6e.get(s)||null,additionalArgs:""}}return{program:n[1],additionalArgs:n[2]}}async function x6e(t,e,r,i,n){let s=n.preserveSymlinks?"--preserve-symlinks":"",o=[r.additionalArgs,s].filter(a=>a).join(" ");return n=Object.assign({},n,{prog:r.program,args:o}),await R6e(e,n),await n.fs_.writeFile(e,i(t,e,n),"utf8"),N6e(e,n)}function k6e(t,e,r){let n=Es.relative(Es.dirname(e),t).split("/").join("\\"),s=Es.isAbsolute(n)?`"${n}"`:`"%~dp0\\${n}"`,o,a=r.prog,l=r.args||"",c=cT(r.nodePath).win32;a?(o=`"%~dp0\\${a}.exe"`,n=s):(a=s,l="",n="");let u=r.progArgs?`${r.progArgs.join(" ")} `:"",g=c?`@SET NODE_PATH=${c}\r +`:"";return o?g+=`@IF EXIST ${o} (\r + ${o} ${l} ${n} ${u}%*\r +) ELSE (\r + @SETLOCAL\r + @SET PATHEXT=%PATHEXT:;.JS;=;%\r + ${a} ${l} ${n} ${u}%*\r +)\r +`:g+=`@${a} ${l} ${n} ${u}%*\r +`,g}function P6e(t,e,r){let i=Es.relative(Es.dirname(e),t),n=r.prog&&r.prog.split("\\").join("/"),s;i=i.split("\\").join("/");let o=Es.isAbsolute(i)?`"${i}"`:`"$basedir/${i}"`,a=r.args||"",l=cT(r.nodePath).posix;n?(s=`"$basedir/${r.prog}"`,i=o):(n=o,a="",i="");let c=r.progArgs?`${r.progArgs.join(" ")} `:"",u=`#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\\\,/,g')") + +case \`uname\` in + *CYGWIN*) basedir=\`cygpath -w "$basedir"\`;; +esac + +`,g=r.nodePath?`export NODE_PATH="${l}" +`:"";return s?u+=`${g}if [ -x ${s} ]; then + exec ${s} ${a} ${i} ${c}"$@" +else + exec ${n} ${a} ${i} ${c}"$@" +fi +`:u+=`${g}${n} ${a} ${i} ${c}"$@" +exit $? +`,u}function D6e(t,e,r){let i=Es.relative(Es.dirname(e),t),n=r.prog&&r.prog.split("\\").join("/"),s=n&&`"${n}$exe"`,o;i=i.split("\\").join("/");let a=Es.isAbsolute(i)?`"${i}"`:`"$basedir/${i}"`,l=r.args||"",c=cT(r.nodePath),u=c.win32,g=c.posix;s?(o=`"$basedir/${r.prog}$exe"`,i=a):(s=a,l="",i="");let f=r.progArgs?`${r.progArgs.join(" ")} `:"",h=`#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +${r.nodePath?`$env_node_path=$env:NODE_PATH +$env:NODE_PATH="${u}" +`:""}if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +}`;return r.nodePath&&(h+=` else { + $env:NODE_PATH="${g}" +}`),o?h+=` +$ret=0 +if (Test-Path ${o}) { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & ${o} ${l} ${i} ${f}$args + } else { + & ${o} ${l} ${i} ${f}$args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & ${s} ${l} ${i} ${f}$args + } else { + & ${s} ${l} ${i} ${f}$args + } + $ret=$LASTEXITCODE +} +${r.nodePath?`$env:NODE_PATH=$env_node_path +`:""}exit $ret +`:h+=` +# Support pipeline input +if ($MyInvocation.ExpectingInput) { + $input | & ${s} ${l} ${i} ${f}$args +} else { + & ${s} ${l} ${i} ${f}$args +} +${r.nodePath?`$env:NODE_PATH=$env_node_path +`:""}exit $LASTEXITCODE +`,h}function F6e(t,e){return e.fs_.chmod(t,493)}function cT(t){if(!t)return{win32:"",posix:""};let e=typeof t=="string"?t.split(Es.delimiter):Array.from(t),r={};for(let i=0;i`/mnt/${a.toLowerCase()}`):e[i];r.win32=r.win32?`${r.win32};${n}`:n,r.posix=r.posix?`${r.posix}:${s}`:s,r[i]={win32:n,posix:s}}return r}fce.exports=lT});var PT=E((fPt,Nce)=>{Nce.exports=require("stream")});var Oce=E((hPt,Lce)=>{"use strict";function Tce(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable})),r.push.apply(r,i)}return r}function e9e(t){for(var e=1;e0?this.tail.next=i:this.head=i,this.tail=i,++this.length}},{key:"unshift",value:function(r){var i={data:r,next:this.head};this.length===0&&(this.tail=i),this.head=i,++this.length}},{key:"shift",value:function(){if(this.length!==0){var r=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,r}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(r){if(this.length===0)return"";for(var i=this.head,n=""+i.data;i=i.next;)n+=r+i.data;return n}},{key:"concat",value:function(r){if(this.length===0)return iQ.alloc(0);for(var i=iQ.allocUnsafe(r>>>0),n=this.head,s=0;n;)o9e(n.data,i,s),s+=n.data.length,n=n.next;return i}},{key:"consume",value:function(r,i){var n;return ro.length?o.length:r;if(a===o.length?s+=o:s+=o.slice(0,r),r-=a,r===0){a===o.length?(++n,i.next?this.head=i.next:this.head=this.tail=null):(this.head=i,i.data=o.slice(a));break}++n}return this.length-=n,s}},{key:"_getBuffer",value:function(r){var i=iQ.allocUnsafe(r),n=this.head,s=1;for(n.data.copy(i),r-=n.data.length;n=n.next;){var o=n.data,a=r>o.length?o.length:r;if(o.copy(i,i.length-r,0,a),r-=a,r===0){a===o.length?(++s,n.next?this.head=n.next:this.head=this.tail=null):(this.head=n,n.data=o.slice(a));break}++s}return this.length-=s,i}},{key:s9e,value:function(r,i){return DT(this,e9e({},i,{depth:0,customInspect:!1}))}}]),t}()});var FT=E((pPt,Kce)=>{"use strict";function a9e(t,e){var r=this,i=this._readableState&&this._readableState.destroyed,n=this._writableState&&this._writableState.destroyed;return i||n?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(RT,this,t)):process.nextTick(RT,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(s){!e&&s?r._writableState?r._writableState.errorEmitted?process.nextTick(nQ,r):(r._writableState.errorEmitted=!0,process.nextTick(Uce,r,s)):process.nextTick(Uce,r,s):e?(process.nextTick(nQ,r),e(s)):process.nextTick(nQ,r)}),this)}function Uce(t,e){RT(t,e),nQ(t)}function nQ(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function A9e(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function RT(t,e){t.emit("error",e)}function l9e(t,e){var r=t._readableState,i=t._writableState;r&&r.autoDestroy||i&&i.autoDestroy?t.destroy(e):t.emit("error",e)}Kce.exports={destroy:a9e,undestroy:A9e,errorOrDestroy:l9e}});var VA=E((dPt,Hce)=>{"use strict";var Gce={};function Is(t,e,r){r||(r=Error);function i(s,o,a){return typeof e=="string"?e:e(s,o,a)}class n extends r{constructor(o,a,l){super(i(o,a,l))}}n.prototype.name=r.name,n.prototype.code=t,Gce[t]=n}function jce(t,e){if(Array.isArray(t)){let r=t.length;return t=t.map(i=>String(i)),r>2?`one of ${e} ${t.slice(0,r-1).join(", ")}, or `+t[r-1]:r===2?`one of ${e} ${t[0]} or ${t[1]}`:`of ${e} ${t[0]}`}else return`of ${e} ${String(t)}`}function c9e(t,e,r){return t.substr(!r||r<0?0:+r,e.length)===e}function u9e(t,e,r){return(r===void 0||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}function g9e(t,e,r){return typeof r!="number"&&(r=0),r+e.length>t.length?!1:t.indexOf(e,r)!==-1}Is("ERR_INVALID_OPT_VALUE",function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'},TypeError);Is("ERR_INVALID_ARG_TYPE",function(t,e,r){let i;typeof e=="string"&&c9e(e,"not ")?(i="must not be",e=e.replace(/^not /,"")):i="must be";let n;if(u9e(t," argument"))n=`The ${t} ${i} ${jce(e,"type")}`;else{let s=g9e(t,".")?"property":"argument";n=`The "${t}" ${s} ${i} ${jce(e,"type")}`}return n+=`. Received type ${typeof r}`,n},TypeError);Is("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");Is("ERR_METHOD_NOT_IMPLEMENTED",function(t){return"The "+t+" method is not implemented"});Is("ERR_STREAM_PREMATURE_CLOSE","Premature close");Is("ERR_STREAM_DESTROYED",function(t){return"Cannot call "+t+" after a stream was destroyed"});Is("ERR_MULTIPLE_CALLBACK","Callback called multiple times");Is("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");Is("ERR_STREAM_WRITE_AFTER_END","write after end");Is("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);Is("ERR_UNKNOWN_ENCODING",function(t){return"Unknown encoding: "+t},TypeError);Is("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");Hce.exports.codes=Gce});var NT=E((CPt,Yce)=>{"use strict";var f9e=VA().codes.ERR_INVALID_OPT_VALUE;function h9e(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function p9e(t,e,r,i){var n=h9e(e,i,r);if(n!=null){if(!(isFinite(n)&&Math.floor(n)===n)||n<0){var s=i?r:"highWaterMark";throw new f9e(s,n)}return Math.floor(n)}return t.objectMode?16:16*1024}Yce.exports={getHighWaterMark:p9e}});var qce=E((mPt,LT)=>{typeof Object.create=="function"?LT.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:LT.exports=function(e,r){if(r){e.super_=r;var i=function(){};i.prototype=r.prototype,e.prototype=new i,e.prototype.constructor=e}}});var _A=E((EPt,TT)=>{try{if(MT=require("util"),typeof MT.inherits!="function")throw"";TT.exports=MT.inherits}catch(t){TT.exports=qce()}var MT});var Wce=E((IPt,Jce)=>{Jce.exports=require("util").deprecate});var UT=E((yPt,zce)=>{"use strict";zce.exports=Sr;function Vce(t){var e=this;this.next=null,this.entry=null,this.finish=function(){d9e(e,t)}}var If;Sr.WritableState=em;var C9e={deprecate:Wce()},_ce=PT(),sQ=require("buffer").Buffer,m9e=global.Uint8Array||function(){};function E9e(t){return sQ.from(t)}function I9e(t){return sQ.isBuffer(t)||t instanceof m9e}var OT=FT(),y9e=NT(),w9e=y9e.getHighWaterMark,XA=VA().codes,B9e=XA.ERR_INVALID_ARG_TYPE,Q9e=XA.ERR_METHOD_NOT_IMPLEMENTED,b9e=XA.ERR_MULTIPLE_CALLBACK,v9e=XA.ERR_STREAM_CANNOT_PIPE,S9e=XA.ERR_STREAM_DESTROYED,x9e=XA.ERR_STREAM_NULL_VALUES,k9e=XA.ERR_STREAM_WRITE_AFTER_END,P9e=XA.ERR_UNKNOWN_ENCODING,yf=OT.errorOrDestroy;_A()(Sr,_ce);function D9e(){}function em(t,e,r){If=If||Yc(),t=t||{},typeof r!="boolean"&&(r=e instanceof If),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=w9e(this,t,"writableHighWaterMark",r),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var i=t.decodeStrings===!1;this.decodeStrings=!i,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(n){R9e(e,n)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new Vce(this)}em.prototype.getBuffer=function(){for(var e=this.bufferedRequest,r=[];e;)r.push(e),e=e.next;return r};(function(){try{Object.defineProperty(em.prototype,"buffer",{get:C9e.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(t){}})();var oQ;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(oQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Sr,Symbol.hasInstance,{value:function(e){return oQ.call(this,e)?!0:this!==Sr?!1:e&&e._writableState instanceof em}})):oQ=function(e){return e instanceof this};function Sr(t){If=If||Yc();var e=this instanceof If;if(!e&&!oQ.call(Sr,this))return new Sr(t);this._writableState=new em(t,this,e),this.writable=!0,t&&(typeof t.write=="function"&&(this._write=t.write),typeof t.writev=="function"&&(this._writev=t.writev),typeof t.destroy=="function"&&(this._destroy=t.destroy),typeof t.final=="function"&&(this._final=t.final)),_ce.call(this)}Sr.prototype.pipe=function(){yf(this,new v9e)};function F9e(t,e){var r=new k9e;yf(t,r),process.nextTick(e,r)}function N9e(t,e,r,i){var n;return r===null?n=new x9e:typeof r!="string"&&!e.objectMode&&(n=new B9e("chunk",["string","Buffer"],r)),n?(yf(t,n),process.nextTick(i,n),!1):!0}Sr.prototype.write=function(t,e,r){var i=this._writableState,n=!1,s=!i.objectMode&&I9e(t);return s&&!sQ.isBuffer(t)&&(t=E9e(t)),typeof e=="function"&&(r=e,e=null),s?e="buffer":e||(e=i.defaultEncoding),typeof r!="function"&&(r=D9e),i.ending?F9e(this,r):(s||N9e(this,i,t,r))&&(i.pendingcb++,n=L9e(this,i,s,t,e,r)),n};Sr.prototype.cork=function(){this._writableState.corked++};Sr.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,!t.writing&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&Xce(this,t))};Sr.prototype.setDefaultEncoding=function(e){if(typeof e=="string"&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new P9e(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Sr.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function T9e(t,e,r){return!t.objectMode&&t.decodeStrings!==!1&&typeof e=="string"&&(e=sQ.from(e,r)),e}Object.defineProperty(Sr.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function L9e(t,e,r,i,n,s){if(!r){var o=T9e(e,i,n);i!==o&&(r=!0,n="buffer",i=o)}var a=e.objectMode?1:i.length;e.length+=a;var l=e.length{"use strict";var j9e=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};eue.exports=Mo;var tue=HT(),GT=UT();_A()(Mo,tue);for(jT=j9e(GT.prototype),aQ=0;aQ{var lQ=require("buffer"),qa=lQ.Buffer;function iue(t,e){for(var r in t)e[r]=t[r]}qa.from&&qa.alloc&&qa.allocUnsafe&&qa.allocUnsafeSlow?rue.exports=lQ:(iue(lQ,YT),YT.Buffer=wf);function wf(t,e,r){return qa(t,e,r)}iue(qa,wf);wf.from=function(t,e,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return qa(t,e,r)};wf.alloc=function(t,e,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var i=qa(t);return e!==void 0?typeof r=="string"?i.fill(e,r):i.fill(e):i.fill(0),i};wf.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return qa(t)};wf.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return lQ.SlowBuffer(t)}});var WT=E(sue=>{"use strict";var qT=nue().Buffer,oue=qT.isEncoding||function(t){switch(t=""+t,t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function J9e(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}function W9e(t){var e=J9e(t);if(typeof e!="string"&&(qT.isEncoding===oue||!oue(t)))throw new Error("Unknown encoding: "+t);return e||t}sue.StringDecoder=rm;function rm(t){this.encoding=W9e(t);var e;switch(this.encoding){case"utf16le":this.text=V9e,this.end=_9e,e=4;break;case"utf8":this.fillLast=z9e,e=4;break;case"base64":this.text=X9e,this.end=Z9e,e=3;break;default:this.write=$9e,this.end=eVe;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=qT.allocUnsafe(e)}rm.prototype.write=function(t){if(t.length===0)return"";var e,r;if(this.lastNeed){if(e=this.fillLast(t),e===void 0)return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function iVe(t,e,r){var i=e.length-1;if(i=0?(n>0&&(t.lastNeed=n-1),n):--i=0?(n>0&&(t.lastNeed=n-2),n):--i=0?(n>0&&(n===2?n=0:t.lastNeed=n-3),n):0))}function nVe(t,e,r){if((e[0]&192)!=128)return t.lastNeed=0,"\uFFFD";if(t.lastNeed>1&&e.length>1){if((e[1]&192)!=128)return t.lastNeed=1,"\uFFFD";if(t.lastNeed>2&&e.length>2&&(e[2]&192)!=128)return t.lastNeed=2,"\uFFFD"}}function z9e(t){var e=this.lastTotal-this.lastNeed,r=nVe(this,t,e);if(r!==void 0)return r;if(this.lastNeed<=t.length)return t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,e,0,t.length),this.lastNeed-=t.length}function rVe(t,e){var r=iVe(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var i=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,i),t.toString("utf8",e,i)}function tVe(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"\uFFFD":e}function V9e(t,e){if((t.length-e)%2==0){var r=t.toString("utf16le",e);if(r){var i=r.charCodeAt(r.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function _9e(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function X9e(t,e){var r=(t.length-e)%3;return r===0?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,r===1?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function Z9e(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function $9e(t){return t.toString(this.encoding)}function eVe(t){return t&&t.length?this.write(t):""}});var cQ=E((QPt,aue)=>{"use strict";var Aue=VA().codes.ERR_STREAM_PREMATURE_CLOSE;function sVe(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,i=new Array(r),n=0;n{"use strict";var uQ;function ZA(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var AVe=cQ(),$A=Symbol("lastResolve"),qc=Symbol("lastReject"),im=Symbol("error"),gQ=Symbol("ended"),Jc=Symbol("lastPromise"),zT=Symbol("handlePromise"),Wc=Symbol("stream");function el(t,e){return{value:t,done:e}}function lVe(t){var e=t[$A];if(e!==null){var r=t[Wc].read();r!==null&&(t[Jc]=null,t[$A]=null,t[qc]=null,e(el(r,!1)))}}function cVe(t){process.nextTick(lVe,t)}function uVe(t,e){return function(r,i){t.then(function(){if(e[gQ]){r(el(void 0,!0));return}e[zT](r,i)},i)}}var gVe=Object.getPrototypeOf(function(){}),fVe=Object.setPrototypeOf((uQ={get stream(){return this[Wc]},next:function(){var e=this,r=this[im];if(r!==null)return Promise.reject(r);if(this[gQ])return Promise.resolve(el(void 0,!0));if(this[Wc].destroyed)return new Promise(function(o,a){process.nextTick(function(){e[im]?a(e[im]):o(el(void 0,!0))})});var i=this[Jc],n;if(i)n=new Promise(uVe(i,this));else{var s=this[Wc].read();if(s!==null)return Promise.resolve(el(s,!1));n=new Promise(this[zT])}return this[Jc]=n,n}},ZA(uQ,Symbol.asyncIterator,function(){return this}),ZA(uQ,"return",function(){var e=this;return new Promise(function(r,i){e[Wc].destroy(null,function(n){if(n){i(n);return}r(el(void 0,!0))})})}),uQ),gVe),hVe=function(e){var r,i=Object.create(fVe,(r={},ZA(r,Wc,{value:e,writable:!0}),ZA(r,$A,{value:null,writable:!0}),ZA(r,qc,{value:null,writable:!0}),ZA(r,im,{value:null,writable:!0}),ZA(r,gQ,{value:e._readableState.endEmitted,writable:!0}),ZA(r,zT,{value:function(s,o){var a=i[Wc].read();a?(i[Jc]=null,i[$A]=null,i[qc]=null,s(el(a,!1))):(i[$A]=s,i[qc]=o)},writable:!0}),r));return i[Jc]=null,AVe(e,function(n){if(n&&n.code!=="ERR_STREAM_PREMATURE_CLOSE"){var s=i[qc];s!==null&&(i[Jc]=null,i[$A]=null,i[qc]=null,s(n)),i[im]=n;return}var o=i[$A];o!==null&&(i[Jc]=null,i[$A]=null,i[qc]=null,o(el(void 0,!0))),i[gQ]=!0}),e.on("readable",cVe.bind(null,i)),i};cue.exports=hVe});var pue=E((vPt,gue)=>{"use strict";function fue(t,e,r,i,n,s,o){try{var a=t[s](o),l=a.value}catch(c){r(c);return}a.done?e(l):Promise.resolve(l).then(i,n)}function pVe(t){return function(){var e=this,r=arguments;return new Promise(function(i,n){var s=t.apply(e,r);function o(l){fue(s,i,n,o,a,"next",l)}function a(l){fue(s,i,n,o,a,"throw",l)}o(void 0)})}}function hue(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable})),r.push.apply(r,i)}return r}function CVe(t){for(var e=1;e{"use strict";due.exports=kt;var Bf;kt.ReadableState=Cue;var SPt=require("events").EventEmitter,mue=function(e,r){return e.listeners(r).length},nm=PT(),fQ=require("buffer").Buffer,IVe=global.Uint8Array||function(){};function yVe(t){return fQ.from(t)}function wVe(t){return fQ.isBuffer(t)||t instanceof IVe}var VT=require("util"),Et;VT&&VT.debuglog?Et=VT.debuglog("stream"):Et=function(){};var BVe=Oce(),_T=FT(),QVe=NT(),bVe=QVe.getHighWaterMark,hQ=VA().codes,vVe=hQ.ERR_INVALID_ARG_TYPE,SVe=hQ.ERR_STREAM_PUSH_AFTER_EOF,xVe=hQ.ERR_METHOD_NOT_IMPLEMENTED,kVe=hQ.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,Qf,XT,ZT;_A()(kt,nm);var sm=_T.errorOrDestroy,$T=["error","close","destroy","pause","resume"];function PVe(t,e,r){if(typeof t.prependListener=="function")return t.prependListener(e,r);!t._events||!t._events[e]?t.on(e,r):Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]}function Cue(t,e,r){Bf=Bf||Yc(),t=t||{},typeof r!="boolean"&&(r=e instanceof Bf),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=bVe(this,t,"readableHighWaterMark",r),this.buffer=new BVe,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(Qf||(Qf=WT().StringDecoder),this.decoder=new Qf(t.encoding),this.encoding=t.encoding)}function kt(t){if(Bf=Bf||Yc(),!(this instanceof kt))return new kt(t);var e=this instanceof Bf;this._readableState=new Cue(t,this,e),this.readable=!0,t&&(typeof t.read=="function"&&(this._read=t.read),typeof t.destroy=="function"&&(this._destroy=t.destroy)),nm.call(this)}Object.defineProperty(kt.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});kt.prototype.destroy=_T.destroy;kt.prototype._undestroy=_T.undestroy;kt.prototype._destroy=function(t,e){e(t)};kt.prototype.push=function(t,e){var r=this._readableState,i;return r.objectMode?i=!0:typeof t=="string"&&(e=e||r.defaultEncoding,e!==r.encoding&&(t=fQ.from(t,e),e=""),i=!0),Eue(this,t,e,!1,i)};kt.prototype.unshift=function(t){return Eue(this,t,null,!0,!1)};function Eue(t,e,r,i,n){Et("readableAddChunk",e);var s=t._readableState;if(e===null)s.reading=!1,RVe(t,s);else{var o;if(n||(o=DVe(s,e)),o)sm(t,o);else if(s.objectMode||e&&e.length>0)if(typeof e!="string"&&!s.objectMode&&Object.getPrototypeOf(e)!==fQ.prototype&&(e=yVe(e)),i)s.endEmitted?sm(t,new kVe):eM(t,s,e,!0);else if(s.ended)sm(t,new SVe);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!r?(e=s.decoder.write(e),s.objectMode||e.length!==0?eM(t,s,e,!1):tM(t,s)):eM(t,s,e,!1)}else i||(s.reading=!1,tM(t,s))}return!s.ended&&(s.length=Iue?t=Iue:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function yue(t,e){return t<=0||e.length===0&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=FVe(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}kt.prototype.read=function(t){Et("read",t),t=parseInt(t,10);var e=this._readableState,r=t;if(t!==0&&(e.emittedReadable=!1),t===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return Et("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?rM(this):pQ(this),null;if(t=yue(t,e),t===0&&e.ended)return e.length===0&&rM(this),null;var i=e.needReadable;Et("need readable",i),(e.length===0||e.length-t0?n=wue(t,e):n=null,n===null?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&rM(this)),n!==null&&this.emit("data",n),n};function RVe(t,e){if(Et("onEofChunk"),!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?pQ(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,Bue(t)))}}function pQ(t){var e=t._readableState;Et("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(Et("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(Bue,t))}function Bue(t){var e=t._readableState;Et("emitReadable_",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,iM(t)}function tM(t,e){e.readingMore||(e.readingMore=!0,process.nextTick(NVe,t,e))}function NVe(t,e){for(;!e.reading&&!e.ended&&(e.length1&&Que(i.pipes,t)!==-1)&&!c&&(Et("false write response, pause",i.awaitDrain),i.awaitDrain++),r.pause())}function f(m){Et("onerror",m),d(),t.removeListener("error",f),mue(t,"error")===0&&sm(t,m)}PVe(t,"error",f);function h(){t.removeListener("finish",p),d()}t.once("close",h);function p(){Et("onfinish"),t.removeListener("close",h),d()}t.once("finish",p);function d(){Et("unpipe"),r.unpipe(t)}return t.emit("pipe",r),i.flowing||(Et("pipe resume"),r.resume()),t};function LVe(t){return function(){var r=t._readableState;Et("pipeOnDrain",r.awaitDrain),r.awaitDrain&&r.awaitDrain--,r.awaitDrain===0&&mue(t,"data")&&(r.flowing=!0,iM(t))}}kt.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var i=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var s=0;s0,i.flowing!==!1&&this.resume()):t==="readable"&&!i.endEmitted&&!i.readableListening&&(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,Et("on readable",i.length,i.reading),i.length?pQ(this):i.reading||process.nextTick(TVe,this)),r};kt.prototype.addListener=kt.prototype.on;kt.prototype.removeListener=function(t,e){var r=nm.prototype.removeListener.call(this,t,e);return t==="readable"&&process.nextTick(bue,this),r};kt.prototype.removeAllListeners=function(t){var e=nm.prototype.removeAllListeners.apply(this,arguments);return(t==="readable"||t===void 0)&&process.nextTick(bue,this),e};function bue(t){var e=t._readableState;e.readableListening=t.listenerCount("readable")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount("data")>0&&t.resume()}function TVe(t){Et("readable nexttick read 0"),t.read(0)}kt.prototype.resume=function(){var t=this._readableState;return t.flowing||(Et("resume"),t.flowing=!t.readableListening,MVe(this,t)),t.paused=!1,this};function MVe(t,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(OVe,t,e))}function OVe(t,e){Et("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),iM(t),e.flowing&&!e.reading&&t.read(0)}kt.prototype.pause=function(){return Et("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(Et("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function iM(t){var e=t._readableState;for(Et("flow",e.flowing);e.flowing&&t.read()!==null;);}kt.prototype.wrap=function(t){var e=this,r=this._readableState,i=!1;t.on("end",function(){if(Et("wrapped end"),r.decoder&&!r.ended){var o=r.decoder.end();o&&o.length&&e.push(o)}e.push(null)}),t.on("data",function(o){if(Et("wrapped data"),r.decoder&&(o=r.decoder.write(o)),!(r.objectMode&&o==null)&&!(!r.objectMode&&(!o||!o.length))){var a=e.push(o);a||(i=!0,t.pause())}});for(var n in t)this[n]===void 0&&typeof t[n]=="function"&&(this[n]=function(a){return function(){return t[a].apply(t,arguments)}}(n));for(var s=0;s<$T.length;s++)t.on($T[s],this.emit.bind(this,$T[s]));return this._read=function(o){Et("wrapped _read",o),i&&(i=!1,t.resume())},this};typeof Symbol=="function"&&(kt.prototype[Symbol.asyncIterator]=function(){return XT===void 0&&(XT=uue()),XT(this)});Object.defineProperty(kt.prototype,"readableHighWaterMark",{enumerable:!1,get:function(){return this._readableState.highWaterMark}});Object.defineProperty(kt.prototype,"readableBuffer",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}});Object.defineProperty(kt.prototype,"readableFlowing",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(e){this._readableState&&(this._readableState.flowing=e)}});kt._fromList=wue;Object.defineProperty(kt.prototype,"readableLength",{enumerable:!1,get:function(){return this._readableState.length}});function wue(t,e){if(e.length===0)return null;var r;return e.objectMode?r=e.buffer.shift():!t||t>=e.length?(e.decoder?r=e.buffer.join(""):e.buffer.length===1?r=e.buffer.first():r=e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r}function rM(t){var e=t._readableState;Et("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(KVe,e,t))}function KVe(t,e){if(Et("endReadableNT",t.endEmitted,t.length),!t.endEmitted&&t.length===0&&(t.endEmitted=!0,e.readable=!1,e.emit("end"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}typeof Symbol=="function"&&(kt.from=function(t,e){return ZT===void 0&&(ZT=pue()),ZT(kt,t,e)});function Que(t,e){for(var r=0,i=t.length;r{"use strict";vue.exports=Ja;var dQ=VA().codes,UVe=dQ.ERR_METHOD_NOT_IMPLEMENTED,HVe=dQ.ERR_MULTIPLE_CALLBACK,GVe=dQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,jVe=dQ.ERR_TRANSFORM_WITH_LENGTH_0,CQ=Yc();_A()(Ja,CQ);function YVe(t,e){var r=this._transformState;r.transforming=!1;var i=r.writecb;if(i===null)return this.emit("error",new HVe);r.writechunk=null,r.writecb=null,e!=null&&this.push(e),i(t);var n=this._readableState;n.reading=!1,(n.needReadable||n.length{"use strict";xue.exports=om;var kue=nM();_A()(om,kue);function om(t){if(!(this instanceof om))return new om(t);kue.call(this,t)}om.prototype._transform=function(t,e,r){r(null,t)}});var Lue=E((DPt,Due)=>{"use strict";var sM;function JVe(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}var Rue=VA().codes,WVe=Rue.ERR_MISSING_ARGS,zVe=Rue.ERR_STREAM_DESTROYED;function Fue(t){if(t)throw t}function VVe(t){return t.setHeader&&typeof t.abort=="function"}function _Ve(t,e,r,i){i=JVe(i);var n=!1;t.on("close",function(){n=!0}),sM===void 0&&(sM=cQ()),sM(t,{readable:e,writable:r},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,VVe(t))return t.abort();if(typeof t.destroy=="function")return t.destroy();i(o||new zVe("pipe"))}}}function Nue(t){t()}function XVe(t,e){return t.pipe(e)}function ZVe(t){return!t.length||typeof t[t.length-1]!="function"?Fue:t.pop()}function $Ve(){for(var t=arguments.length,e=new Array(t),r=0;r0;return _Ve(o,l,c,function(u){n||(n=u),u&&s.forEach(Nue),!l&&(s.forEach(Nue),i(n))})});return e.reduce(XVe)}Due.exports=$Ve});var bf=E((ys,am)=>{var Am=require("stream");process.env.READABLE_STREAM==="disable"&&Am?(am.exports=Am.Readable,Object.assign(am.exports,Am),am.exports.Stream=Am):(ys=am.exports=HT(),ys.Stream=Am||ys,ys.Readable=ys,ys.Writable=UT(),ys.Duplex=Yc(),ys.Transform=nM(),ys.PassThrough=Pue(),ys.finished=cQ(),ys.pipeline=Lue())});var Oue=E((RPt,Tue)=>{"use strict";var{Buffer:_s}=require("buffer"),Mue=Symbol.for("BufferList");function nr(t){if(!(this instanceof nr))return new nr(t);nr._init.call(this,t)}nr._init=function(e){Object.defineProperty(this,Mue,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};nr.prototype._new=function(e){return new nr(e)};nr.prototype._offset=function(e){if(e===0)return[0,0];let r=0;for(let i=0;ithis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};nr.prototype.slice=function(e,r){return typeof e=="number"&&e<0&&(e+=this.length),typeof r=="number"&&r<0&&(r+=this.length),this.copy(null,0,e,r)};nr.prototype.copy=function(e,r,i,n){if((typeof i!="number"||i<0)&&(i=0),(typeof n!="number"||n>this.length)&&(n=this.length),i>=this.length||n<=0)return e||_s.alloc(0);let s=!!e,o=this._offset(i),a=n-i,l=a,c=s&&r||0,u=o[1];if(i===0&&n===this.length){if(!s)return this._bufs.length===1?this._bufs[0]:_s.concat(this._bufs,this.length);for(let g=0;gf)this._bufs[g].copy(e,c,u),c+=f;else{this._bufs[g].copy(e,c,u,u+l),c+=f;break}l-=f,u&&(u=0)}return e.length>c?e.slice(0,c):e};nr.prototype.shallowSlice=function(e,r){if(e=e||0,r=typeof r!="number"?this.length:r,e<0&&(e+=this.length),r<0&&(r+=this.length),e===r)return this._new();let i=this._offset(e),n=this._offset(r),s=this._bufs.slice(i[0],n[0]+1);return n[1]===0?s.pop():s[s.length-1]=s[s.length-1].slice(0,n[1]),i[1]!==0&&(s[0]=s[0].slice(i[1])),this._new(s)};nr.prototype.toString=function(e,r,i){return this.slice(r,i).toString(e)};nr.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};nr.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let i=this._offset(e),n=i[0],s=i[1];for(;n=t.length){let l=o.indexOf(t,s);if(l!==-1)return this._reverseOffset([n,l]);s=o.length-t.length+1}else{let l=this._reverseOffset([n,s]);if(this._match(l,t))return l;s++}s=0}return-1};nr.prototype._match=function(t,e){if(this.length-t{"use strict";var oM=bf().Duplex,e7e=_A(),lm=Oue();function Oi(t){if(!(this instanceof Oi))return new Oi(t);if(typeof t=="function"){this._callback=t;let e=function(i){this._callback&&(this._callback(i),this._callback=null)}.bind(this);this.on("pipe",function(i){i.on("error",e)}),this.on("unpipe",function(i){i.removeListener("error",e)}),t=null}lm._init.call(this,t),oM.call(this)}e7e(Oi,oM);Object.assign(Oi.prototype,lm.prototype);Oi.prototype._new=function(e){return new Oi(e)};Oi.prototype._write=function(e,r,i){this._appendBuffer(e),typeof i=="function"&&i()};Oi.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Oi.prototype.end=function(e){oM.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Oi.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e)};Oi.prototype._isBufferList=function(e){return e instanceof Oi||e instanceof lm||Oi.isBufferList(e)};Oi.isBufferList=lm.isBufferList;mQ.exports=Oi;mQ.exports.BufferListStream=Oi;mQ.exports.BufferList=lm});var lM=E(vf=>{var t7e=Buffer.alloc,r7e="0000000000000000000",i7e="7777777777777777777",Uue="0".charCodeAt(0),Hue=Buffer.from("ustar\0","binary"),n7e=Buffer.from("00","binary"),s7e=Buffer.from("ustar ","binary"),o7e=Buffer.from(" \0","binary"),a7e=parseInt("7777",8),cm=257,aM=263,A7e=function(t,e,r){return typeof t!="number"?r:(t=~~t,t>=e?e:t>=0||(t+=e,t>=0)?t:0)},l7e=function(t){switch(t){case 0:return"file";case 1:return"link";case 2:return"symlink";case 3:return"character-device";case 4:return"block-device";case 5:return"directory";case 6:return"fifo";case 7:return"contiguous-file";case 72:return"pax-header";case 55:return"pax-global-header";case 27:return"gnu-long-link-path";case 28:case 30:return"gnu-long-path"}return null},c7e=function(t){switch(t){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72}return 0},Gue=function(t,e,r,i){for(;re?i7e.slice(0,e)+" ":r7e.slice(0,e-t.length)+t+" "};function u7e(t){var e;if(t[0]===128)e=!0;else if(t[0]===255)e=!1;else return null;for(var r=[],i=t.length-1;i>0;i--){var n=t[i];e?r.push(n):r.push(255-n)}var s=0,o=r.length;for(i=0;i=Math.pow(10,r)&&r++,e+r+t};vf.decodeLongPath=function(t,e){return Sf(t,0,t.length,e)};vf.encodePax=function(t){var e="";t.name&&(e+=AM(" path="+t.name+` +`)),t.linkname&&(e+=AM(" linkpath="+t.linkname+` +`));var r=t.pax;if(r)for(var i in r)e+=AM(" "+i+"="+r[i]+` +`);return Buffer.from(e)};vf.decodePax=function(t){for(var e={};t.length;){for(var r=0;r100;){var n=r.indexOf("/");if(n===-1)return null;i+=i?"/"+r.slice(0,n):r.slice(0,n),r=r.slice(n+1)}return Buffer.byteLength(r)>100||Buffer.byteLength(i)>155||t.linkname&&Buffer.byteLength(t.linkname)>100?null:(e.write(r),e.write(tl(t.mode&a7e,6),100),e.write(tl(t.uid,6),108),e.write(tl(t.gid,6),116),e.write(tl(t.size,11),124),e.write(tl(t.mtime.getTime()/1e3|0,11),136),e[156]=Uue+c7e(t.type),t.linkname&&e.write(t.linkname,157),Hue.copy(e,cm),n7e.copy(e,aM),t.uname&&e.write(t.uname,265),t.gname&&e.write(t.gname,297),e.write(tl(t.devmajor||0,6),329),e.write(tl(t.devminor||0,6),337),i&&e.write(i,345),e.write(tl(jue(e),6),148),e)};vf.decode=function(t,e,r){var i=t[156]===0?0:t[156]-Uue,n=Sf(t,0,100,e),s=rl(t,100,8),o=rl(t,108,8),a=rl(t,116,8),l=rl(t,124,12),c=rl(t,136,12),u=l7e(i),g=t[157]===0?null:Sf(t,157,100,e),f=Sf(t,265,32),h=Sf(t,297,32),p=rl(t,329,8),d=rl(t,337,8),m=jue(t);if(m===8*32)return null;if(m!==rl(t,148,8))throw new Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(Hue.compare(t,cm,cm+6)===0)t[345]&&(n=Sf(t,345,155,e)+"/"+n);else if(!(s7e.compare(t,cm,cm+6)===0&&o7e.compare(t,aM,aM+2)===0)){if(!r)throw new Error("Invalid tar header: unknown format.")}return i===0&&n&&n[n.length-1]==="/"&&(i=5),{name:n,mode:s,uid:o,gid:a,size:l,mtime:new Date(1e3*c),type:u,linkname:g,uname:f,gname:h,devmajor:p,devminor:d}}});var _ue=E((LPt,Yue)=>{var que=require("util"),g7e=Kue(),um=lM(),Jue=bf().Writable,Wue=bf().PassThrough,zue=function(){},Vue=function(t){return t&=511,t&&512-t},f7e=function(t,e){var r=new EQ(t,e);return r.end(),r},h7e=function(t,e){return e.path&&(t.name=e.path),e.linkpath&&(t.linkname=e.linkpath),e.size&&(t.size=parseInt(e.size,10)),t.pax=e,t},EQ=function(t,e){this._parent=t,this.offset=e,Wue.call(this,{autoDestroy:!1})};que.inherits(EQ,Wue);EQ.prototype.destroy=function(t){this._parent.destroy(t)};var Wa=function(t){if(!(this instanceof Wa))return new Wa(t);Jue.call(this,t),t=t||{},this._offset=0,this._buffer=g7e(),this._missing=0,this._partial=!1,this._onparse=zue,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,r=e._buffer,i=function(){e._continue()},n=function(f){if(e._locked=!1,f)return e.destroy(f);e._stream||i()},s=function(){e._stream=null;var f=Vue(e._header.size);f?e._parse(f,o):e._parse(512,g),e._locked||i()},o=function(){e._buffer.consume(Vue(e._header.size)),e._parse(512,g),i()},a=function(){var f=e._header.size;e._paxGlobal=um.decodePax(r.slice(0,f)),r.consume(f),s()},l=function(){var f=e._header.size;e._pax=um.decodePax(r.slice(0,f)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),r.consume(f),s()},c=function(){var f=e._header.size;this._gnuLongPath=um.decodeLongPath(r.slice(0,f),t.filenameEncoding),r.consume(f),s()},u=function(){var f=e._header.size;this._gnuLongLinkPath=um.decodeLongPath(r.slice(0,f),t.filenameEncoding),r.consume(f),s()},g=function(){var f=e._offset,h;try{h=e._header=um.decode(r.slice(0,512),t.filenameEncoding,t.allowUnknownFormat)}catch(p){e.emit("error",p)}if(r.consume(512),!h){e._parse(512,g),i();return}if(h.type==="gnu-long-path"){e._parse(h.size,c),i();return}if(h.type==="gnu-long-link-path"){e._parse(h.size,u),i();return}if(h.type==="pax-global-header"){e._parse(h.size,a),i();return}if(h.type==="pax-header"){e._parse(h.size,l),i();return}if(e._gnuLongPath&&(h.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(h.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=h=h7e(h,e._pax),e._pax=null),e._locked=!0,!h.size||h.type==="directory"){e._parse(512,g),e.emit("entry",h,f7e(e,f),n);return}e._stream=new EQ(e,f),e.emit("entry",h,e._stream,n),e._parse(h.size,s),i()};this._onheader=g,this._parse(512,g)};que.inherits(Wa,Jue);Wa.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.emit("close"))};Wa.prototype._parse=function(t,e){this._destroyed||(this._offset+=t,this._missing=t,e===this._onheader&&(this._partial=!1),this._onparse=e)};Wa.prototype._continue=function(){if(!this._destroyed){var t=this._cb;this._cb=zue,this._overflow?this._write(this._overflow,void 0,t):t()}};Wa.prototype._write=function(t,e,r){if(!this._destroyed){var i=this._stream,n=this._buffer,s=this._missing;if(t.length&&(this._partial=!0),t.lengths&&(o=t.slice(s),t=t.slice(0,s)),i?i.end(t):n.append(t),this._overflow=o,this._onparse()}};Wa.prototype._final=function(t){if(this._partial)return this.destroy(new Error("Unexpected end of data"));t()};Yue.exports=Wa});var Zue=E((TPt,Xue)=>{Xue.exports=require("fs").constants||require("constants")});var ige=E((MPt,$ue)=>{var xf=Zue(),ege=tk(),IQ=_A(),p7e=Buffer.alloc,tge=bf().Readable,kf=bf().Writable,d7e=require("string_decoder").StringDecoder,yQ=lM(),C7e=parseInt("755",8),m7e=parseInt("644",8),rge=p7e(1024),cM=function(){},uM=function(t,e){e&=511,e&&t.push(rge.slice(0,512-e))};function E7e(t){switch(t&xf.S_IFMT){case xf.S_IFBLK:return"block-device";case xf.S_IFCHR:return"character-device";case xf.S_IFDIR:return"directory";case xf.S_IFIFO:return"fifo";case xf.S_IFLNK:return"symlink"}return"file"}var wQ=function(t){kf.call(this),this.written=0,this._to=t,this._destroyed=!1};IQ(wQ,kf);wQ.prototype._write=function(t,e,r){if(this.written+=t.length,this._to.push(t))return r();this._to._drain=r};wQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var BQ=function(){kf.call(this),this.linkname="",this._decoder=new d7e("utf-8"),this._destroyed=!1};IQ(BQ,kf);BQ.prototype._write=function(t,e,r){this.linkname+=this._decoder.write(t),r()};BQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var gm=function(){kf.call(this),this._destroyed=!1};IQ(gm,kf);gm.prototype._write=function(t,e,r){r(new Error("No body allowed for this entry"))};gm.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var Oo=function(t){if(!(this instanceof Oo))return new Oo(t);tge.call(this,t),this._drain=cM,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};IQ(Oo,tge);Oo.prototype.entry=function(t,e,r){if(this._stream)throw new Error("already piping an entry");if(!(this._finalized||this._destroyed)){typeof e=="function"&&(r=e,e=null),r||(r=cM);var i=this;if((!t.size||t.type==="symlink")&&(t.size=0),t.type||(t.type=E7e(t.mode)),t.mode||(t.mode=t.type==="directory"?C7e:m7e),t.uid||(t.uid=0),t.gid||(t.gid=0),t.mtime||(t.mtime=new Date),typeof e=="string"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){t.size=e.length,this._encode(t);var n=this.push(e);return uM(i,t.size),n?process.nextTick(r):this._drain=r,new gm}if(t.type==="symlink"&&!t.linkname){var s=new BQ;return ege(s,function(a){if(a)return i.destroy(),r(a);t.linkname=s.linkname,i._encode(t),r()}),s}if(this._encode(t),t.type!=="file"&&t.type!=="contiguous-file")return process.nextTick(r),new gm;var o=new wQ(this);return this._stream=o,ege(o,function(a){if(i._stream=null,a)return i.destroy(),r(a);if(o.written!==t.size)return i.destroy(),r(new Error("size mismatch"));uM(i,t.size),i._finalizing&&i.finalize(),r()}),o}};Oo.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(rge),this.push(null))};Oo.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.destroy&&this._stream.destroy())};Oo.prototype._encode=function(t){if(!t.pax){var e=yQ.encode(t);if(e){this.push(e);return}}this._encodePax(t)};Oo.prototype._encodePax=function(t){var e=yQ.encodePax({name:t.name,linkname:t.linkname,pax:t.pax}),r={name:"PaxHeader",mode:t.mode,uid:t.uid,gid:t.gid,size:e.length,mtime:t.mtime,type:"pax-header",linkname:t.linkname&&"PaxHeader",uname:t.uname,gname:t.gname,devmajor:t.devmajor,devminor:t.devminor};this.push(yQ.encode(r)),this.push(e),uM(this,e.length),r.size=t.size,r.type=t.type,this.push(yQ.encode(r))};Oo.prototype._read=function(t){var e=this._drain;this._drain=cM,e()};$ue.exports=Oo});var nge=E(gM=>{gM.extract=_ue();gM.pack=ige()});var Cge=E((oDt,fge)=>{"use strict";var Pf=class{constructor(e,r,i){this.__specs=e||{},Object.keys(this.__specs).forEach(n=>{if(typeof this.__specs[n]=="string"){let s=this.__specs[n],o=this.__specs[s];if(o){let a=o.aliases||[];a.push(n,s),o.aliases=[...new Set(a)],this.__specs[n]=o}else throw new Error(`Alias refers to invalid key: ${s} -> ${n}`)}}),this.__opts=r||{},this.__providers=pge(i.filter(n=>n!=null&&typeof n=="object")),this.__isFiggyPudding=!0}get(e){return mM(this,e,!0)}get[Symbol.toStringTag](){return"FiggyPudding"}forEach(e,r=this){for(let[i,n]of this.entries())e.call(r,n,i,this)}toJSON(){let e={};return this.forEach((r,i)=>{e[i]=r}),e}*entries(e){for(let i of Object.keys(this.__specs))yield[i,this.get(i)];let r=e||this.__opts.other;if(r){let i=new Set;for(let n of this.__providers){let s=n.entries?n.entries(r):R7e(n);for(let[o,a]of s)r(o)&&!i.has(o)&&(i.add(o),yield[o,a])}}}*[Symbol.iterator](){for(let[e,r]of this.entries())yield[e,r]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Pf(this.__specs,this.__opts,pge(this.__providers).concat(e)),hge)}};try{let t=require("util");Pf.prototype[t.inspect.custom]=function(e,r){return this[Symbol.toStringTag]+" "+t.inspect(this.toJSON(),r)}}catch(t){}function F7e(t){throw Object.assign(new Error(`invalid config key requested: ${t}`),{code:"EBADKEY"})}function mM(t,e,r){let i=t.__specs[e];if(r&&!i&&(!t.__opts.other||!t.__opts.other(e)))F7e(e);else{i||(i={});let n;for(let s of t.__providers){if(n=dge(e,s),n===void 0&&i.aliases&&i.aliases.length){for(let o of i.aliases)if(o!==e&&(n=dge(o,s),n!==void 0))break}if(n!==void 0)break}return n===void 0&&i.default!==void 0?typeof i.default=="function"?i.default(t):i.default:n}}function dge(t,e){let r;return e.__isFiggyPudding?r=mM(e,t,!1):typeof e.get=="function"?r=e.get(t):r=e[t],r}var hge={has(t,e){return e in t.__specs&&mM(t,e,!1)!==void 0},ownKeys(t){return Object.keys(t.__specs)},get(t,e){return typeof e=="symbol"||e.slice(0,2)==="__"||e in Pf.prototype?t[e]:t.get(e)},set(t,e,r){if(typeof e=="symbol"||e.slice(0,2)==="__")return t[e]=r,!0;throw new Error("figgyPudding options cannot be modified. Use .concat() instead.")},deleteProperty(){throw new Error("figgyPudding options cannot be deleted. Use .concat() and shadow them instead.")}};fge.exports=N7e;function N7e(t,e){function r(...i){return new Proxy(new Pf(t,e,i),hge)}return r}function pge(t){let e=[];return t.forEach(r=>e.unshift(r)),e}function R7e(t){return Object.keys(t).map(e=>[e,t[e]])}});var Ige=E((aDt,Ko)=>{"use strict";var hm=require("crypto"),L7e=Cge(),T7e=require("stream").Transform,mge=["sha256","sha384","sha512"],M7e=/^[a-z0-9+/]+(?:=?=?)$/i,O7e=/^([^-]+)-([^?]+)([?\S*]*)$/,K7e=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/,U7e=/^[\x21-\x7E]+$/,on=L7e({algorithms:{default:["sha512"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>H7e},Promise:{default:()=>Promise},sep:{default:" "},single:{default:!1},size:{},strict:{default:!1}}),zc=class{get isHash(){return!0}constructor(e,r){r=on(r);let i=!!r.strict;this.source=e.trim();let n=this.source.match(i?K7e:O7e);if(!n||i&&!mge.some(o=>o===n[1]))return;this.algorithm=n[1],this.digest=n[2];let s=n[3];this.options=s?s.slice(1).split("?"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,"base64").toString("hex")}toJSON(){return this.toString()}toString(e){if(e=on(e),e.strict&&!(mge.some(i=>i===this.algorithm)&&this.digest.match(M7e)&&(this.options||[]).every(i=>i.match(U7e))))return"";let r=this.options&&this.options.length?`?${this.options.join("?")}`:"";return`${this.algorithm}-${this.digest}${r}`}},Df=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=on(e);let r=e.sep||" ";return e.strict&&(r=r.replace(/\S+/g," ")),Object.keys(this).map(i=>this[i].map(n=>zc.prototype.toString.call(n,e)).filter(n=>n.length).join(r)).filter(i=>i.length).join(r)}concat(e,r){r=on(r);let i=typeof e=="string"?e:pm(e,r);return Uo(`${this.toString(r)} ${i}`,r)}hexDigest(){return Uo(this,{single:!0}).hexDigest()}match(e,r){r=on(r);let i=Uo(e,r),n=i.pickAlgorithm(r);return this[n]&&i[n]&&this[n].find(s=>i[n].find(o=>s.digest===o.digest))||!1}pickAlgorithm(e){e=on(e);let r=e.pickAlgorithm,i=Object.keys(this);if(!i.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return i.reduce((n,s)=>r(n,s)||n)}};Ko.exports.parse=Uo;function Uo(t,e){if(e=on(e),typeof t=="string")return EM(t,e);if(t.algorithm&&t.digest){let r=new Df;return r[t.algorithm]=[t],EM(pm(r,e),e)}else return EM(pm(t,e),e)}function EM(t,e){return e.single?new zc(t,e):t.trim().split(/\s+/).reduce((r,i)=>{let n=new zc(i,e);if(n.algorithm&&n.digest){let s=n.algorithm;r[s]||(r[s]=[]),r[s].push(n)}return r},new Df)}Ko.exports.stringify=pm;function pm(t,e){return e=on(e),t.algorithm&&t.digest?zc.prototype.toString.call(t,e):typeof t=="string"?pm(Uo(t,e),e):Df.prototype.toString.call(t,e)}Ko.exports.fromHex=G7e;function G7e(t,e,r){r=on(r);let i=r.options&&r.options.length?`?${r.options.join("?")}`:"";return Uo(`${e}-${Buffer.from(t,"hex").toString("base64")}${i}`,r)}Ko.exports.fromData=j7e;function j7e(t,e){e=on(e);let r=e.algorithms,i=e.options&&e.options.length?`?${e.options.join("?")}`:"";return r.reduce((n,s)=>{let o=hm.createHash(s).update(t).digest("base64"),a=new zc(`${s}-${o}${i}`,e);if(a.algorithm&&a.digest){let l=a.algorithm;n[l]||(n[l]=[]),n[l].push(a)}return n},new Df)}Ko.exports.fromStream=Y7e;function Y7e(t,e){e=on(e);let r=e.Promise||Promise,i=IM(e);return new r((n,s)=>{t.pipe(i),t.on("error",s),i.on("error",s);let o;i.on("integrity",a=>{o=a}),i.on("end",()=>n(o)),i.on("data",()=>{})})}Ko.exports.checkData=q7e;function q7e(t,e,r){if(r=on(r),e=Uo(e,r),!Object.keys(e).length){if(r.error)throw Object.assign(new Error("No valid integrity hashes to check against"),{code:"EINTEGRITY"});return!1}let i=e.pickAlgorithm(r),n=hm.createHash(i).update(t).digest("base64"),s=Uo({algorithm:i,digest:n}),o=s.match(e,r);if(o||!r.error)return o;if(typeof r.size=="number"&&t.length!==r.size){let a=new Error(`data size mismatch when checking ${e}. + Wanted: ${r.size} + Found: ${t.length}`);throw a.code="EBADSIZE",a.found=t.length,a.expected=r.size,a.sri=e,a}else{let a=new Error(`Integrity checksum failed when using ${i}: Wanted ${e}, but got ${s}. (${t.length} bytes)`);throw a.code="EINTEGRITY",a.found=s,a.expected=e,a.algorithm=i,a.sri=e,a}}Ko.exports.checkStream=J7e;function J7e(t,e,r){r=on(r);let i=r.Promise||Promise,n=IM(r.concat({integrity:e}));return new i((s,o)=>{t.pipe(n),t.on("error",o),n.on("error",o);let a;n.on("verified",l=>{a=l}),n.on("end",()=>s(a)),n.on("data",()=>{})})}Ko.exports.integrityStream=IM;function IM(t){t=on(t);let e=t.integrity&&Uo(t.integrity,t),r=e&&Object.keys(e).length,i=r&&e.pickAlgorithm(t),n=r&&e[i],s=Array.from(new Set(t.algorithms.concat(i?[i]:[]))),o=s.map(hm.createHash),a=0,l=new T7e({transform(c,u,g){a+=c.length,o.forEach(f=>f.update(c,u)),g(null,c,u)}}).on("end",()=>{let c=t.options&&t.options.length?`?${t.options.join("?")}`:"",u=Uo(o.map((f,h)=>`${s[h]}-${f.digest("base64")}${c}`).join(" "),t),g=r&&u.match(e,t);if(typeof t.size=="number"&&a!==t.size){let f=new Error(`stream size mismatch when checking ${e}. + Wanted: ${t.size} + Found: ${a}`);f.code="EBADSIZE",f.found=a,f.expected=t.size,f.sri=e,l.emit("error",f)}else if(t.integrity&&!g){let f=new Error(`${e} integrity checksum failed when using ${i}: wanted ${n} but got ${u}. (${a} bytes)`);f.code="EINTEGRITY",f.found=u,f.expected=n,f.algorithm=i,f.sri=e,l.emit("error",f)}else l.emit("size",a),l.emit("integrity",u),g&&l.emit("verified",g)});return l}Ko.exports.create=W7e;function W7e(t){t=on(t);let e=t.algorithms,r=t.options.length?`?${t.options.join("?")}`:"",i=e.map(hm.createHash);return{update:function(n,s){return i.forEach(o=>o.update(n,s)),this},digest:function(n){return e.reduce((o,a)=>{let l=i.shift().digest("base64"),c=new zc(`${a}-${l}${r}`,t);if(c.algorithm&&c.digest){let u=c.algorithm;o[u]||(o[u]=[]),o[u].push(c)}return o},new Df)}}}var z7e=new Set(hm.getHashes()),Ege=["md5","whirlpool","sha1","sha224","sha256","sha384","sha512","sha3","sha3-256","sha3-384","sha3-512","sha3_256","sha3_384","sha3_512"].filter(t=>z7e.has(t));function H7e(t,e){return Ege.indexOf(t.toLowerCase())>=Ege.indexOf(e.toLowerCase())?t:e}});var Fd={};it(Fd,{BuildType:()=>Gn,Cache:()=>Qt,Configuration:()=>fe,DEFAULT_LOCK_FILENAME:()=>DR,DEFAULT_RC_FILENAME:()=>PR,FormatType:()=>ps,InstallMode:()=>li,LightReport:()=>Fa,LinkType:()=>gt,Manifest:()=>Ze,MessageName:()=>z,PackageExtensionStatus:()=>ki,PackageExtensionType:()=>oi,Project:()=>Ke,ProjectLookup:()=>KA,Report:()=>Xi,ReportError:()=>nt,SettingsType:()=>ge,StreamReport:()=>Fe,TAG_REGEXP:()=>Rg,TelemetryManager:()=>Rd,ThrowReport:()=>ei,VirtualFetcher:()=>dd,Workspace:()=>Dd,WorkspaceResolver:()=>Yr,YarnVersion:()=>Zr,execUtils:()=>hr,folderUtils:()=>Pb,formatUtils:()=>ue,hashUtils:()=>mn,httpUtils:()=>Zt,miscUtils:()=>de,scriptUtils:()=>Kt,semverUtils:()=>qt,structUtils:()=>S,tgzUtils:()=>Ai,treeUtils:()=>Hs});var hr={};it(hr,{EndStrategy:()=>Pn,execvp:()=>Nhe,pipevp:()=>to});var ch={};it(ch,{AliasFS:()=>Xo,CwdFS:()=>Ft,DEFAULT_COMPRESSION_LEVEL:()=>pl,FakeFS:()=>eA,Filename:()=>wt,JailFS:()=>Zo,LazyFS:()=>oh,LinkStrategy:()=>eh,NoFS:()=>bE,NodeFS:()=>Wt,PortablePath:()=>Se,PosixFS:()=>ah,ProxiedFS:()=>fi,VirtualFS:()=>Pr,ZipFS:()=>Jr,ZipOpenFS:()=>Jn,constants:()=>mr,extendFs:()=>SE,normalizeLineEndings:()=>ul,npath:()=>M,opendir:()=>wE,patchFs:()=>pb,ppath:()=>v,statUtils:()=>rb,toFilename:()=>kr,xfs:()=>T});var mr={};it(mr,{SAFE_TIME:()=>tb,S_IFDIR:()=>zo,S_IFLNK:()=>_o,S_IFMT:()=>kn,S_IFREG:()=>Vo});var kn=61440,zo=16384,Vo=32768,_o=40960,tb=456789e3;var rb={};it(rb,{BigIntStatsEntry:()=>Xf,DEFAULT_MODE:()=>_f,DirEntry:()=>uO,StatEntry:()=>Za,areStatsEqual:()=>nb,clearStats:()=>pE,convertToBigIntStats:()=>dE,makeDefaultStats:()=>Zf,makeEmptyStats:()=>Jfe});var ib=ie(require("util"));var _f=Vo|420,uO=class{constructor(){this.name="";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&kn)===zo}isFIFO(){return!1}isFile(){return(this.mode&kn)===Vo}isSocket(){return!1}isSymbolicLink(){return(this.mode&kn)===_o}},Za=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=_f;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&kn)===zo}isFIFO(){return!1}isFile(){return(this.mode&kn)===Vo}isSocket(){return!1}isSymbolicLink(){return(this.mode&kn)===_o}},Xf=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(_f);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(kn))===BigInt(zo)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(kn))===BigInt(Vo)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(kn))===BigInt(_o)}};function Zf(){return new Za}function Jfe(){return pE(Zf())}function pE(t){for(let e in t)if(Object.prototype.hasOwnProperty.call(t,e)){let r=t[e];typeof r=="number"?t[e]=0:typeof r=="bigint"?t[e]=BigInt(0):ib.types.isDate(r)&&(t[e]=new Date(0))}return t}function dE(t){let e=new Xf;for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let i=t[r];typeof i=="number"?e[r]=BigInt(i):ib.types.isDate(i)&&(e[r]=new Date(i))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function nb(t,e){if(t.atimeMs!==e.atimeMs||t.birthtimeMs!==e.birthtimeMs||t.blksize!==e.blksize||t.blocks!==e.blocks||t.ctimeMs!==e.ctimeMs||t.dev!==e.dev||t.gid!==e.gid||t.ino!==e.ino||t.isBlockDevice()!==e.isBlockDevice()||t.isCharacterDevice()!==e.isCharacterDevice()||t.isDirectory()!==e.isDirectory()||t.isFIFO()!==e.isFIFO()||t.isFile()!==e.isFile()||t.isSocket()!==e.isSocket()||t.isSymbolicLink()!==e.isSymbolicLink()||t.mode!==e.mode||t.mtimeMs!==e.mtimeMs||t.nlink!==e.nlink||t.rdev!==e.rdev||t.size!==e.size||t.uid!==e.uid)return!1;let r=t,i=e;return!(r.atimeNs!==i.atimeNs||r.mtimeNs!==i.mtimeNs||r.ctimeNs!==i.ctimeNs||r.birthtimeNs!==i.birthtimeNs)}var mE=ie(require("fs"));var $f=ie(require("path")),gO;(function(i){i[i.File=0]="File",i[i.Portable=1]="Portable",i[i.Native=2]="Native"})(gO||(gO={}));var Se={root:"/",dot:"."},wt={nodeModules:"node_modules",manifest:"package.json",lockfile:"yarn.lock",virtual:"__virtual__",pnpJs:".pnp.js",pnpCjs:".pnp.cjs",rc:".yarnrc.yml"},M=Object.create($f.default),v=Object.create($f.default.posix);M.cwd=()=>process.cwd();v.cwd=()=>sb(process.cwd());v.resolve=(...t)=>t.length>0&&v.isAbsolute(t[0])?$f.default.posix.resolve(...t):$f.default.posix.resolve(v.cwd(),...t);var fO=function(t,e,r){return e=t.normalize(e),r=t.normalize(r),e===r?".":(e.endsWith(t.sep)||(e=e+t.sep),r.startsWith(e)?r.slice(e.length):null)};M.fromPortablePath=hO;M.toPortablePath=sb;M.contains=(t,e)=>fO(M,t,e);v.contains=(t,e)=>fO(v,t,e);var Wfe=/^([a-zA-Z]:.*)$/,zfe=/^\\\\(\.\\)?(.*)$/,Vfe=/^\/([a-zA-Z]:.*)$/,_fe=/^\/unc\/(\.dot\/)?(.*)$/;function hO(t){if(process.platform!=="win32")return t;let e,r;if(e=t.match(Vfe))t=e[1];else if(r=t.match(_fe))t=`\\\\${r[1]?".\\":""}${r[2]}`;else return t;return t.replace(/\//g,"\\")}function sb(t){if(process.platform!=="win32")return t;let e,r;return(e=t.match(Wfe))?t=`/${e[1]}`:(r=t.match(zfe))&&(t=`/unc/${r[1]?".dot/":""}${r[2]}`),t.replace(/\\/g,"/")}function CE(t,e){return t===M?hO(e):sb(e)}function kr(t){if(M.parse(t).dir!==""||v.parse(t).dir!=="")throw new Error(`Invalid filename: "${t}"`);return t}var EE=new Date(tb*1e3),eh;(function(r){r.Allow="allow",r.ReadOnly="readOnly"})(eh||(eh={}));async function pO(t,e,r,i,n){let s=t.pathUtils.normalize(e),o=r.pathUtils.normalize(i),a=[],l=[],c=n.stableTime?{mtime:EE,atime:EE}:await r.lstatPromise(o);await t.mkdirpPromise(t.pathUtils.dirname(e),{utimes:[c.atime,c.mtime]});let u=typeof t.lutimesPromise=="function"?t.lutimesPromise.bind(t):t.utimesPromise.bind(t);await ob(a,l,u,t,s,r,o,n);for(let g of a)await g();await Promise.all(l.map(g=>g()))}async function ob(t,e,r,i,n,s,o,a){var f,h;let l=await Xfe(i,n),c=await s.lstatPromise(o),u=a.stableTime?{mtime:EE,atime:EE}:c,g;switch(!0){case c.isDirectory():g=await Zfe(t,e,r,i,n,l,s,o,c,a);break;case c.isFile():g=await $fe(t,e,r,i,n,l,s,o,c,a);break;case c.isSymbolicLink():g=await ehe(t,e,r,i,n,l,s,o,c,a);break;default:throw new Error(`Unsupported file type (${c.mode})`)}return(g||((f=l==null?void 0:l.mtime)==null?void 0:f.getTime())!==u.mtime.getTime()||((h=l==null?void 0:l.atime)==null?void 0:h.getTime())!==u.atime.getTime())&&(e.push(()=>r(n,u.atime,u.mtime)),g=!0),(l===null||(l.mode&511)!=(c.mode&511))&&(e.push(()=>i.chmodPromise(n,c.mode&511)),g=!0),g}async function Xfe(t,e){try{return await t.lstatPromise(e)}catch(r){return null}}async function Zfe(t,e,r,i,n,s,o,a,l,c){if(s!==null&&!s.isDirectory())if(c.overwrite)t.push(async()=>i.removePromise(n)),s=null;else return!1;let u=!1;s===null&&(t.push(async()=>{try{await i.mkdirPromise(n,{mode:l.mode})}catch(f){if(f.code!=="EEXIST")throw f}}),u=!0);let g=await o.readdirPromise(a);if(c.stableSort)for(let f of g.sort())await ob(t,e,r,i,i.pathUtils.join(n,f),o,o.pathUtils.join(a,f),c)&&(u=!0);else(await Promise.all(g.map(async h=>{await ob(t,e,r,i,i.pathUtils.join(n,h),o,o.pathUtils.join(a,h),c)}))).some(h=>h)&&(u=!0);return u}var ab=new WeakMap;function Ab(t,e,r,i,n){return async()=>{await t.linkPromise(r,e),n===eh.ReadOnly&&(i.mode&=~146,await t.chmodPromise(e,i.mode))}}function the(t,e,r,i,n){let s=ab.get(t);return typeof s=="undefined"?async()=>{try{await t.copyFilePromise(r,e,mE.default.constants.COPYFILE_FICLONE_FORCE),ab.set(t,!0)}catch(o){if(o.code==="ENOSYS"||o.code==="ENOTSUP")ab.set(t,!1),await Ab(t,e,r,i,n)();else throw o}}:s?async()=>t.copyFilePromise(r,e,mE.default.constants.COPYFILE_FICLONE_FORCE):Ab(t,e,r,i,n)}async function $fe(t,e,r,i,n,s,o,a,l,c){var f;if(s!==null)if(c.overwrite)t.push(async()=>i.removePromise(n)),s=null;else return!1;let u=(f=c.linkStrategy)!=null?f:null,g=i===o?u!==null?the(i,n,a,l,u):async()=>i.copyFilePromise(a,n,mE.default.constants.COPYFILE_FICLONE):u!==null?Ab(i,n,a,l,u):async()=>i.writeFilePromise(n,await o.readFilePromise(a));return t.push(async()=>g()),!0}async function ehe(t,e,r,i,n,s,o,a,l,c){if(s!==null)if(c.overwrite)t.push(async()=>i.removePromise(n)),s=null;else return!1;return t.push(async()=>{await i.symlinkPromise(CE(i.pathUtils,await o.readlinkPromise(a)),n)}),!0}function qn(t,e){return Object.assign(new Error(`${t}: ${e}`),{code:t})}function IE(t){return qn("EBUSY",t)}function th(t,e){return qn("ENOSYS",`${t}, ${e}`)}function $a(t){return qn("EINVAL",`invalid argument, ${t}`)}function Hi(t){return qn("EBADF",`bad file descriptor, ${t}`)}function bs(t){return qn("ENOENT",`no such file or directory, ${t}`)}function eo(t){return qn("ENOTDIR",`not a directory, ${t}`)}function rh(t){return qn("EISDIR",`illegal operation on a directory, ${t}`)}function yE(t){return qn("EEXIST",`file already exists, ${t}`)}function ln(t){return qn("EROFS",`read-only filesystem, ${t}`)}function dO(t){return qn("ENOTEMPTY",`directory not empty, ${t}`)}function CO(t){return qn("EOPNOTSUPP",`operation not supported, ${t}`)}function mO(){return qn("ERR_DIR_CLOSED","Directory handle was closed")}var lb=class extends Error{constructor(e,r){super(e);this.name="Libzip Error",this.code=r}};var EO=class{constructor(e,r,i={}){this.path=e;this.nextDirent=r;this.opts=i;this.closed=!1}throwIfClosed(){if(this.closed)throw mO()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let r=this.readSync();return typeof e!="undefined"?e(null,r):Promise.resolve(r)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e!="undefined"?e(null):Promise.resolve()}closeSync(){var e,r;this.throwIfClosed(),(r=(e=this.opts).onClose)==null||r.call(e),this.closed=!0}};function wE(t,e,r,i){let n=()=>{let s=r.shift();return typeof s=="undefined"?null:Object.assign(t.statSync(t.pathUtils.join(e,s)),{name:s})};return new EO(e,n,i)}var IO=ie(require("os"));var eA=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:r=!1}={}){let i=[e];for(;i.length>0;){let n=i.shift();if((await this.lstatPromise(n)).isDirectory()){let o=await this.readdirPromise(n);if(r)for(let a of o.sort())i.push(this.pathUtils.join(n,a));else throw new Error("Not supported")}else yield n}}async removePromise(e,{recursive:r=!0,maxRetries:i=5}={}){let n;try{n=await this.lstatPromise(e)}catch(s){if(s.code==="ENOENT")return;throw s}if(n.isDirectory()){if(r){let o=await this.readdirPromise(e);await Promise.all(o.map(a=>this.removePromise(this.pathUtils.resolve(e,a))))}let s=0;do try{await this.rmdirPromise(e);break}catch(o){if(o.code==="EBUSY"||o.code==="ENOTEMPTY"){if(i===0)break;await new Promise(a=>setTimeout(a,s*100));continue}else throw o}while(s++{let l;try{[l]=await this.readJsonPromise(i)}catch(c){return Date.now()-s<500}try{return process.kill(l,0),!0}catch(c){return!1}};for(;o===null;)try{o=await this.openPromise(i,"wx")}catch(l){if(l.code==="EEXIST"){if(!await a())try{await this.unlinkPromise(i);continue}catch(c){}if(Date.now()-s<60*1e3)await new Promise(c=>setTimeout(c,n));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${i})`)}else throw l}await this.writePromise(o,JSON.stringify([process.pid]));try{return await r()}finally{try{await this.closePromise(o),await this.unlinkPromise(i)}catch(l){}}}async readJsonPromise(e){let r=await this.readFilePromise(e,"utf8");try{return JSON.parse(r)}catch(i){throw i.message+=` (in ${e})`,i}}readJsonSync(e){let r=this.readFileSync(e,"utf8");try{return JSON.parse(r)}catch(i){throw i.message+=` (in ${e})`,i}}async writeJsonPromise(e,r){return await this.writeFilePromise(e,`${JSON.stringify(r,null,2)} +`)}writeJsonSync(e,r){return this.writeFileSync(e,`${JSON.stringify(r,null,2)} +`)}async preserveTimePromise(e,r){let i=await this.lstatPromise(e),n=await r();typeof n!="undefined"&&(e=n),this.lutimesPromise?await this.lutimesPromise(e,i.atime,i.mtime):i.isSymbolicLink()||await this.utimesPromise(e,i.atime,i.mtime)}async preserveTimeSync(e,r){let i=this.lstatSync(e),n=r();typeof n!="undefined"&&(e=n),this.lutimesSync?this.lutimesSync(e,i.atime,i.mtime):i.isSymbolicLink()||this.utimesSync(e,i.atime,i.mtime)}},gl=class extends eA{constructor(){super(v)}};function rhe(t){let e=t.match(/\r?\n/g);if(e===null)return IO.EOL;let r=e.filter(n=>n===`\r +`).length,i=e.length-r;return r>i?`\r +`:` +`}function ul(t,e){return e.replace(/\r?\n/g,rhe(t))}var $c=ie(require("fs")),cb=ie(require("stream")),QO=ie(require("util")),ub=ie(require("zlib"));var yO=ie(require("fs"));var Wt=class extends gl{constructor(e=yO.default){super();this.realFs=e,typeof this.realFs.lutimes!="undefined"&&(this.lutimesPromise=this.lutimesPromiseImpl,this.lutimesSync=this.lutimesSyncImpl)}getExtractHint(){return!1}getRealPath(){return Se.root}resolve(e){return v.resolve(e)}async openPromise(e,r,i){return await new Promise((n,s)=>{this.realFs.open(M.fromPortablePath(e),r,i,this.makeCallback(n,s))})}openSync(e,r,i){return this.realFs.openSync(M.fromPortablePath(e),r,i)}async opendirPromise(e,r){return await new Promise((i,n)=>{typeof r!="undefined"?this.realFs.opendir(M.fromPortablePath(e),r,this.makeCallback(i,n)):this.realFs.opendir(M.fromPortablePath(e),this.makeCallback(i,n))}).then(i=>Object.defineProperty(i,"path",{value:e,configurable:!0,writable:!0}))}opendirSync(e,r){let i=typeof r!="undefined"?this.realFs.opendirSync(M.fromPortablePath(e),r):this.realFs.opendirSync(M.fromPortablePath(e));return Object.defineProperty(i,"path",{value:e,configurable:!0,writable:!0})}async readPromise(e,r,i=0,n=0,s=-1){return await new Promise((o,a)=>{this.realFs.read(e,r,i,n,s,(l,c)=>{l?a(l):o(c)})})}readSync(e,r,i,n,s){return this.realFs.readSync(e,r,i,n,s)}async writePromise(e,r,i,n,s){return await new Promise((o,a)=>typeof r=="string"?this.realFs.write(e,r,i,this.makeCallback(o,a)):this.realFs.write(e,r,i,n,s,this.makeCallback(o,a)))}writeSync(e,r,i,n,s){return typeof r=="string"?this.realFs.writeSync(e,r,i):this.realFs.writeSync(e,r,i,n,s)}async closePromise(e){await new Promise((r,i)=>{this.realFs.close(e,this.makeCallback(r,i))})}closeSync(e){this.realFs.closeSync(e)}createReadStream(e,r){let i=e!==null?M.fromPortablePath(e):e;return this.realFs.createReadStream(i,r)}createWriteStream(e,r){let i=e!==null?M.fromPortablePath(e):e;return this.realFs.createWriteStream(i,r)}async realpathPromise(e){return await new Promise((r,i)=>{this.realFs.realpath(M.fromPortablePath(e),{},this.makeCallback(r,i))}).then(r=>M.toPortablePath(r))}realpathSync(e){return M.toPortablePath(this.realFs.realpathSync(M.fromPortablePath(e),{}))}async existsPromise(e){return await new Promise(r=>{this.realFs.exists(M.fromPortablePath(e),r)})}accessSync(e,r){return this.realFs.accessSync(M.fromPortablePath(e),r)}async accessPromise(e,r){return await new Promise((i,n)=>{this.realFs.access(M.fromPortablePath(e),r,this.makeCallback(i,n))})}existsSync(e){return this.realFs.existsSync(M.fromPortablePath(e))}async statPromise(e,r){return await new Promise((i,n)=>{r?this.realFs.stat(M.fromPortablePath(e),r,this.makeCallback(i,n)):this.realFs.stat(M.fromPortablePath(e),this.makeCallback(i,n))})}statSync(e,r){return r?this.realFs.statSync(M.fromPortablePath(e),r):this.realFs.statSync(M.fromPortablePath(e))}async fstatPromise(e,r){return await new Promise((i,n)=>{r?this.realFs.fstat(e,r,this.makeCallback(i,n)):this.realFs.fstat(e,this.makeCallback(i,n))})}fstatSync(e,r){return r?this.realFs.fstatSync(e,r):this.realFs.fstatSync(e)}async lstatPromise(e,r){return await new Promise((i,n)=>{r?this.realFs.lstat(M.fromPortablePath(e),r,this.makeCallback(i,n)):this.realFs.lstat(M.fromPortablePath(e),this.makeCallback(i,n))})}lstatSync(e,r){return r?this.realFs.lstatSync(M.fromPortablePath(e),r):this.realFs.lstatSync(M.fromPortablePath(e))}async chmodPromise(e,r){return await new Promise((i,n)=>{this.realFs.chmod(M.fromPortablePath(e),r,this.makeCallback(i,n))})}chmodSync(e,r){return this.realFs.chmodSync(M.fromPortablePath(e),r)}async chownPromise(e,r,i){return await new Promise((n,s)=>{this.realFs.chown(M.fromPortablePath(e),r,i,this.makeCallback(n,s))})}chownSync(e,r,i){return this.realFs.chownSync(M.fromPortablePath(e),r,i)}async renamePromise(e,r){return await new Promise((i,n)=>{this.realFs.rename(M.fromPortablePath(e),M.fromPortablePath(r),this.makeCallback(i,n))})}renameSync(e,r){return this.realFs.renameSync(M.fromPortablePath(e),M.fromPortablePath(r))}async copyFilePromise(e,r,i=0){return await new Promise((n,s)=>{this.realFs.copyFile(M.fromPortablePath(e),M.fromPortablePath(r),i,this.makeCallback(n,s))})}copyFileSync(e,r,i=0){return this.realFs.copyFileSync(M.fromPortablePath(e),M.fromPortablePath(r),i)}async appendFilePromise(e,r,i){return await new Promise((n,s)=>{let o=typeof e=="string"?M.fromPortablePath(e):e;i?this.realFs.appendFile(o,r,i,this.makeCallback(n,s)):this.realFs.appendFile(o,r,this.makeCallback(n,s))})}appendFileSync(e,r,i){let n=typeof e=="string"?M.fromPortablePath(e):e;i?this.realFs.appendFileSync(n,r,i):this.realFs.appendFileSync(n,r)}async writeFilePromise(e,r,i){return await new Promise((n,s)=>{let o=typeof e=="string"?M.fromPortablePath(e):e;i?this.realFs.writeFile(o,r,i,this.makeCallback(n,s)):this.realFs.writeFile(o,r,this.makeCallback(n,s))})}writeFileSync(e,r,i){let n=typeof e=="string"?M.fromPortablePath(e):e;i?this.realFs.writeFileSync(n,r,i):this.realFs.writeFileSync(n,r)}async unlinkPromise(e){return await new Promise((r,i)=>{this.realFs.unlink(M.fromPortablePath(e),this.makeCallback(r,i))})}unlinkSync(e){return this.realFs.unlinkSync(M.fromPortablePath(e))}async utimesPromise(e,r,i){return await new Promise((n,s)=>{this.realFs.utimes(M.fromPortablePath(e),r,i,this.makeCallback(n,s))})}utimesSync(e,r,i){this.realFs.utimesSync(M.fromPortablePath(e),r,i)}async lutimesPromiseImpl(e,r,i){let n=this.realFs.lutimes;if(typeof n=="undefined")throw th("unavailable Node binding",`lutimes '${e}'`);return await new Promise((s,o)=>{n.call(this.realFs,M.fromPortablePath(e),r,i,this.makeCallback(s,o))})}lutimesSyncImpl(e,r,i){let n=this.realFs.lutimesSync;if(typeof n=="undefined")throw th("unavailable Node binding",`lutimes '${e}'`);n.call(this.realFs,M.fromPortablePath(e),r,i)}async mkdirPromise(e,r){return await new Promise((i,n)=>{this.realFs.mkdir(M.fromPortablePath(e),r,this.makeCallback(i,n))})}mkdirSync(e,r){return this.realFs.mkdirSync(M.fromPortablePath(e),r)}async rmdirPromise(e,r){return await new Promise((i,n)=>{r?this.realFs.rmdir(M.fromPortablePath(e),r,this.makeCallback(i,n)):this.realFs.rmdir(M.fromPortablePath(e),this.makeCallback(i,n))})}rmdirSync(e,r){return this.realFs.rmdirSync(M.fromPortablePath(e),r)}async linkPromise(e,r){return await new Promise((i,n)=>{this.realFs.link(M.fromPortablePath(e),M.fromPortablePath(r),this.makeCallback(i,n))})}linkSync(e,r){return this.realFs.linkSync(M.fromPortablePath(e),M.fromPortablePath(r))}async symlinkPromise(e,r,i){return await new Promise((n,s)=>{this.realFs.symlink(M.fromPortablePath(e.replace(/\/+$/,"")),M.fromPortablePath(r),i,this.makeCallback(n,s))})}symlinkSync(e,r,i){return this.realFs.symlinkSync(M.fromPortablePath(e.replace(/\/+$/,"")),M.fromPortablePath(r),i)}async readFilePromise(e,r){return await new Promise((i,n)=>{let s=typeof e=="string"?M.fromPortablePath(e):e;this.realFs.readFile(s,r,this.makeCallback(i,n))})}readFileSync(e,r){let i=typeof e=="string"?M.fromPortablePath(e):e;return this.realFs.readFileSync(i,r)}async readdirPromise(e,r){return await new Promise((i,n)=>{(r==null?void 0:r.withFileTypes)?this.realFs.readdir(M.fromPortablePath(e),{withFileTypes:!0},this.makeCallback(i,n)):this.realFs.readdir(M.fromPortablePath(e),this.makeCallback(s=>i(s),n))})}readdirSync(e,r){return(r==null?void 0:r.withFileTypes)?this.realFs.readdirSync(M.fromPortablePath(e),{withFileTypes:!0}):this.realFs.readdirSync(M.fromPortablePath(e))}async readlinkPromise(e){return await new Promise((r,i)=>{this.realFs.readlink(M.fromPortablePath(e),this.makeCallback(r,i))}).then(r=>M.toPortablePath(r))}readlinkSync(e){return M.toPortablePath(this.realFs.readlinkSync(M.fromPortablePath(e)))}async truncatePromise(e,r){return await new Promise((i,n)=>{this.realFs.truncate(M.fromPortablePath(e),r,this.makeCallback(i,n))})}truncateSync(e,r){return this.realFs.truncateSync(M.fromPortablePath(e),r)}watch(e,r,i){return this.realFs.watch(M.fromPortablePath(e),r,i)}watchFile(e,r,i){return this.realFs.watchFile(M.fromPortablePath(e),r,i)}unwatchFile(e,r){return this.realFs.unwatchFile(M.fromPortablePath(e),r)}makeCallback(e,r){return(i,n)=>{i?r(i):e(n)}}};var wO=ie(require("events"));var fl;(function(r){r.Change="change",r.Stop="stop"})(fl||(fl={}));var hl;(function(i){i.Ready="ready",i.Running="running",i.Stopped="stopped"})(hl||(hl={}));function BO(t,e){if(t!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${t}'`)}var ih=class extends wO.EventEmitter{constructor(e,r,{bigint:i=!1}={}){super();this.status=hl.Ready;this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=e,this.path=r,this.bigint=i,this.lastStats=this.stat()}static create(e,r,i){let n=new ih(e,r,i);return n.start(),n}start(){BO(this.status,hl.Ready),this.status=hl.Running,this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit(fl.Change,this.lastStats,this.lastStats)},3)}stop(){BO(this.status,hl.Running),this.status=hl.Stopped,this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit(fl.Stop)}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch(e){let r=this.bigint?new Xf:new Za;return pE(r)}}makeInterval(e){let r=setInterval(()=>{let i=this.stat(),n=this.lastStats;nb(i,n)||(this.lastStats=i,this.emit(fl.Change,i,n))},e.interval);return e.persistent?r:r.unref()}registerChangeListener(e,r){this.addListener(fl.Change,e),this.changeListeners.set(e,this.makeInterval(r))}unregisterChangeListener(e){this.removeListener(fl.Change,e);let r=this.changeListeners.get(e);typeof r!="undefined"&&clearInterval(r),this.changeListeners.delete(e)}unregisterAllChangeListeners(){for(let e of this.changeListeners.keys())this.unregisterChangeListener(e)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let e of this.changeListeners.values())e.ref();return this}unref(){for(let e of this.changeListeners.values())e.unref();return this}};var BE=new WeakMap;function QE(t,e,r,i){let n,s,o,a;switch(typeof r){case"function":n=!1,s=!0,o=5007,a=r;break;default:({bigint:n=!1,persistent:s=!0,interval:o=5007}=r),a=i;break}let l=BE.get(t);typeof l=="undefined"&&BE.set(t,l=new Map);let c=l.get(e);return typeof c=="undefined"&&(c=ih.create(t,e,{bigint:n}),l.set(e,c)),c.registerChangeListener(a,{persistent:s,interval:o}),c}function nh(t,e,r){let i=BE.get(t);if(typeof i=="undefined")return;let n=i.get(e);typeof n!="undefined"&&(typeof r=="undefined"?n.unregisterAllChangeListeners():n.unregisterChangeListener(r),n.hasChangeListeners()||(n.stop(),i.delete(e)))}function sh(t){let e=BE.get(t);if(typeof e!="undefined")for(let r of e.keys())nh(t,r)}var pl="mixed";function ihe(t){if(typeof t=="string"&&String(+t)===t)return+t;if(Number.isFinite(t))return t<0?Date.now()/1e3:t;if((0,QO.isDate)(t))return t.getTime()/1e3;throw new Error("Invalid time")}function bO(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var Jr=class extends gl{constructor(e,r){super();this.lzSource=null;this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;this.libzip=r.libzip;let i=r;if(this.level=typeof i.level!="undefined"?i.level:pl,e!=null||(e=bO()),typeof e=="string"){let{baseFs:o=new Wt}=i;this.baseFs=o,this.path=e}else this.path=null,this.baseFs=null;if(r.stats)this.stats=r.stats;else if(typeof e=="string")try{this.stats=this.baseFs.statSync(e)}catch(o){if(o.code==="ENOENT"&&i.create)this.stats=Zf();else throw o}else this.stats=Zf();let n=this.libzip.malloc(4);try{let o=0;if(typeof e=="string"&&i.create&&(o|=this.libzip.ZIP_CREATE|this.libzip.ZIP_TRUNCATE),r.readOnly&&(o|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof e=="string")this.zip=this.libzip.open(M.fromPortablePath(e),o,n);else{let a=this.allocateUnattachedSource(e);try{this.zip=this.libzip.openFromSource(a,o,n),this.lzSource=a}catch(l){throw this.libzip.source.free(a),l}}if(this.zip===0){let a=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(a,this.libzip.getValue(n,"i32")),this.makeLibzipError(a)}}finally{this.libzip.free(n)}this.listings.set(Se.root,new Set);let s=this.libzip.getNumEntries(this.zip,0);for(let o=0;oe)throw new Error("Overread");let n=this.libzip.HEAPU8.subarray(r,r+e);return Buffer.from(n)}finally{this.libzip.free(r)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}prepareClose(){if(!this.ready)throw IE("archive closed, close");sh(this)}saveAndClose(){if(!this.path||!this.baseFs)throw new Error("ZipFS cannot be saved and must be discarded when loaded from a buffer");if(this.prepareClose(),this.readOnly){this.discardAndClose();return}let e=this.baseFs.existsSync(this.path)||this.stats.mode===_f?void 0:this.stats.mode;if(this.entries.size===0)this.discardAndClose(),this.baseFs.writeFileSync(this.path,bO(),{mode:e});else{if(this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));typeof e!="undefined"&&this.baseFs.chmodSync(this.path,e)}this.ready=!1}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}resolve(e){return v.resolve(Se.root,e)}async openPromise(e,r,i){return this.openSync(e,r,i)}openSync(e,r,i){let n=this.nextFd++;return this.fds.set(n,{cursor:0,p:e}),n}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(e,r){return this.opendirSync(e,r)}opendirSync(e,r={}){let i=this.resolveFilename(`opendir '${e}'`,e);if(!this.entries.has(i)&&!this.listings.has(i))throw bs(`opendir '${e}'`);let n=this.listings.get(i);if(!n)throw eo(`opendir '${e}'`);let s=[...n],o=this.openSync(i,"r");return wE(this,i,s,{onClose:()=>{this.closeSync(o)}})}async readPromise(e,r,i,n,s){return this.readSync(e,r,i,n,s)}readSync(e,r,i=0,n=r.byteLength,s=-1){let o=this.fds.get(e);if(typeof o=="undefined")throw Hi("read");let a;s===-1||s===null?a=o.cursor:a=s;let l=this.readFileSync(o.p);l.copy(r,i,a,a+n);let c=Math.max(0,Math.min(l.length-a,n));return(s===-1||s===null)&&(o.cursor+=c),c}async writePromise(e,r,i,n,s){return typeof r=="string"?this.writeSync(e,r,s):this.writeSync(e,r,i,n,s)}writeSync(e,r,i,n,s){throw typeof this.fds.get(e)=="undefined"?Hi("read"):new Error("Unimplemented")}async closePromise(e){return this.closeSync(e)}closeSync(e){if(typeof this.fds.get(e)=="undefined")throw Hi("read");this.fds.delete(e)}createReadStream(e,{encoding:r}={}){if(e===null)throw new Error("Unimplemented");let i=this.openSync(e,"r"),n=Object.assign(new cb.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(o,a)=>{clearImmediate(s),this.closeSync(i),a(o)}}),{close(){n.destroy()},bytesRead:0,path:e}),s=setImmediate(async()=>{try{let o=await this.readFilePromise(e,r);n.bytesRead=o.length,n.end(o)}catch(o){n.destroy(o)}});return n}createWriteStream(e,{encoding:r}={}){if(this.readOnly)throw ln(`open '${e}'`);if(e===null)throw new Error("Unimplemented");let i=[],n=this.openSync(e,"w"),s=Object.assign(new cb.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(o,a)=>{try{o?a(o):(this.writeFileSync(e,Buffer.concat(i),r),a(null))}catch(l){a(l)}finally{this.closeSync(n)}}}),{bytesWritten:0,path:e,close(){s.destroy()}});return s.on("data",o=>{let a=Buffer.from(o);s.bytesWritten+=a.length,i.push(a)}),s}async realpathPromise(e){return this.realpathSync(e)}realpathSync(e){let r=this.resolveFilename(`lstat '${e}'`,e);if(!this.entries.has(r)&&!this.listings.has(r))throw bs(`lstat '${e}'`);return r}async existsPromise(e){return this.existsSync(e)}existsSync(e){if(!this.ready)throw IE(`archive closed, existsSync '${e}'`);if(this.symlinkCount===0){let i=v.resolve(Se.root,e);return this.entries.has(i)||this.listings.has(i)}let r;try{r=this.resolveFilename(`stat '${e}'`,e)}catch(i){return!1}return this.entries.has(r)||this.listings.has(r)}async accessPromise(e,r){return this.accessSync(e,r)}accessSync(e,r=$c.constants.F_OK){let i=this.resolveFilename(`access '${e}'`,e);if(!this.entries.has(i)&&!this.listings.has(i))throw bs(`access '${e}'`);if(this.readOnly&&r&$c.constants.W_OK)throw ln(`access '${e}'`)}async statPromise(e,r){return this.statSync(e,r)}statSync(e,r){let i=this.resolveFilename(`stat '${e}'`,e);if(!this.entries.has(i)&&!this.listings.has(i))throw bs(`stat '${e}'`);if(e[e.length-1]==="/"&&!this.listings.has(i))throw eo(`stat '${e}'`);return this.statImpl(`stat '${e}'`,i,r)}async fstatPromise(e,r){return this.fstatSync(e,r)}fstatSync(e,r){let i=this.fds.get(e);if(typeof i=="undefined")throw Hi("fstatSync");let{p:n}=i,s=this.resolveFilename(`stat '${n}'`,n);if(!this.entries.has(s)&&!this.listings.has(s))throw bs(`stat '${n}'`);if(n[n.length-1]==="/"&&!this.listings.has(s))throw eo(`stat '${n}'`);return this.statImpl(`fstat '${n}'`,s,r)}async lstatPromise(e,r){return this.lstatSync(e,r)}lstatSync(e,r){let i=this.resolveFilename(`lstat '${e}'`,e,!1);if(!this.entries.has(i)&&!this.listings.has(i))throw bs(`lstat '${e}'`);if(e[e.length-1]==="/"&&!this.listings.has(i))throw eo(`lstat '${e}'`);return this.statImpl(`lstat '${e}'`,i,r)}statImpl(e,r,i={}){let n=this.entries.get(r);if(typeof n!="undefined"){let s=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,n,0,0,s)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let a=this.stats.uid,l=this.stats.gid,c=this.libzip.struct.statSize(s)>>>0,u=512,g=Math.ceil(c/u),f=(this.libzip.struct.statMtime(s)>>>0)*1e3,h=f,p=f,d=f,m=new Date(h),I=new Date(p),B=new Date(d),b=new Date(f),R=this.listings.has(r)?zo:this.isSymbolicLink(n)?_o:Vo,H=R===zo?493:420,L=R|this.getUnixMode(n,H)&511,K=this.libzip.struct.statCrc(s),J=Object.assign(new Za,{uid:a,gid:l,size:c,blksize:u,blocks:g,atime:m,birthtime:I,ctime:B,mtime:b,atimeMs:h,birthtimeMs:p,ctimeMs:d,mtimeMs:f,mode:L,crc:K});return i.bigint===!0?dE(J):J}if(this.listings.has(r)){let s=this.stats.uid,o=this.stats.gid,a=0,l=512,c=0,u=this.stats.mtimeMs,g=this.stats.mtimeMs,f=this.stats.mtimeMs,h=this.stats.mtimeMs,p=new Date(u),d=new Date(g),m=new Date(f),I=new Date(h),B=zo|493,b=0,R=Object.assign(new Za,{uid:s,gid:o,size:a,blksize:l,blocks:c,atime:p,birthtime:d,ctime:m,mtime:I,atimeMs:u,birthtimeMs:g,ctimeMs:f,mtimeMs:h,mode:B,crc:b});return i.bigint===!0?dE(R):R}throw new Error("Unreachable")}getUnixMode(e,r){if(this.libzip.file.getExternalAttributes(this.zip,e,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?r:this.libzip.getValue(this.libzip.uint32S,"i32")>>>16}registerListing(e){let r=this.listings.get(e);if(r)return r;let i=this.registerListing(v.dirname(e));return r=new Set,i.add(v.basename(e)),this.listings.set(e,r),r}registerEntry(e,r){this.registerListing(v.dirname(e)).add(v.basename(e)),this.entries.set(e,r)}unregisterListing(e){this.listings.delete(e);let r=this.listings.get(v.dirname(e));r==null||r.delete(v.basename(e))}unregisterEntry(e){this.unregisterListing(e);let r=this.entries.get(e);this.entries.delete(e),typeof r!="undefined"&&(this.fileSources.delete(r),this.isSymbolicLink(r)&&this.symlinkCount--)}deleteEntry(e,r){if(this.unregisterEntry(e),this.libzip.delete(this.zip,r)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(e,r,i=!0){if(!this.ready)throw IE(`archive closed, ${e}`);let n=v.resolve(Se.root,r);if(n==="/")return Se.root;let s=this.entries.get(n);if(i&&s!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(s)){let o=this.getFileSource(s).toString();return this.resolveFilename(e,v.resolve(v.dirname(n),o),!0)}else return n;for(;;){let o=this.resolveFilename(e,v.dirname(n),!0),a=this.listings.has(o),l=this.entries.has(o);if(!a&&!l)throw bs(e);if(!a)throw eo(e);if(n=v.resolve(o,v.basename(n)),!i||this.symlinkCount===0)break;let c=this.libzip.name.locate(this.zip,n.slice(1));if(c===-1)break;if(this.isSymbolicLink(c)){let u=this.getFileSource(c).toString();n=v.resolve(v.dirname(n),u)}else break}return n}allocateBuffer(e){Buffer.isBuffer(e)||(e=Buffer.from(e));let r=this.libzip.malloc(e.byteLength);if(!r)throw new Error("Couldn't allocate enough memory");return new Uint8Array(this.libzip.HEAPU8.buffer,r,e.byteLength).set(e),{buffer:r,byteLength:e.byteLength}}allocateUnattachedSource(e){let r=this.libzip.struct.errorS(),{buffer:i,byteLength:n}=this.allocateBuffer(e),s=this.libzip.source.fromUnattachedBuffer(i,n,0,!0,r);if(s===0)throw this.libzip.free(r),this.makeLibzipError(r);return s}allocateSource(e){let{buffer:r,byteLength:i}=this.allocateBuffer(e),n=this.libzip.source.fromBuffer(this.zip,r,i,0,!0);if(n===0)throw this.libzip.free(r),this.makeLibzipError(this.libzip.getError(this.zip));return n}setFileSource(e,r){let i=Buffer.isBuffer(r)?r:Buffer.from(r),n=v.relative(Se.root,e),s=this.allocateSource(r);try{let o=this.libzip.file.add(this.zip,n,s,this.libzip.ZIP_FL_OVERWRITE);if(o===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!=="mixed"){let a;if(this.level===0?a=this.libzip.ZIP_CM_STORE:a=this.libzip.ZIP_CM_DEFLATE,this.libzip.file.setCompression(this.zip,o,0,a,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(o,i),o}catch(o){throw this.libzip.source.free(s),o}}isSymbolicLink(e){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,e,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,"i32")>>>16&kn)===_o}getFileSource(e,r={asyncDecompress:!1}){let i=this.fileSources.get(e);if(typeof i!="undefined")return i;let n=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,e,0,0,n)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let o=this.libzip.struct.statCompSize(n),a=this.libzip.struct.statCompMethod(n),l=this.libzip.malloc(o);try{let c=this.libzip.fopenIndex(this.zip,e,0,this.libzip.ZIP_FL_COMPRESSED);if(c===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let u=this.libzip.fread(c,l,o,0);if(u===-1)throw this.makeLibzipError(this.libzip.file.getError(c));if(uo)throw new Error("Overread");let g=this.libzip.HEAPU8.subarray(l,l+o),f=Buffer.from(g);if(a===0)return this.fileSources.set(e,f),f;if(r.asyncDecompress)return new Promise((h,p)=>{ub.default.inflateRaw(f,(d,m)=>{d?p(d):(this.fileSources.set(e,m),h(m))})});{let h=ub.default.inflateRawSync(f);return this.fileSources.set(e,h),h}}finally{this.libzip.fclose(c)}}finally{this.libzip.free(l)}}async chmodPromise(e,r){return this.chmodSync(e,r)}chmodSync(e,r){if(this.readOnly)throw ln(`chmod '${e}'`);r&=493;let i=this.resolveFilename(`chmod '${e}'`,e,!1),n=this.entries.get(i);if(typeof n=="undefined")throw new Error(`Assertion failed: The entry should have been registered (${i})`);let o=this.getUnixMode(n,Vo|0)&~511|r;if(this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,o<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async chownPromise(e,r,i){return this.chownSync(e,r,i)}chownSync(e,r,i){throw new Error("Unimplemented")}async renamePromise(e,r){return this.renameSync(e,r)}renameSync(e,r){throw new Error("Unimplemented")}async copyFilePromise(e,r,i){let{indexSource:n,indexDest:s,resolvedDestP:o}=this.prepareCopyFile(e,r,i),a=await this.getFileSource(n,{asyncDecompress:!0}),l=this.setFileSource(o,a);l!==s&&this.registerEntry(o,l)}copyFileSync(e,r,i=0){let{indexSource:n,indexDest:s,resolvedDestP:o}=this.prepareCopyFile(e,r,i),a=this.getFileSource(n),l=this.setFileSource(o,a);l!==s&&this.registerEntry(o,l)}prepareCopyFile(e,r,i=0){if(this.readOnly)throw ln(`copyfile '${e} -> '${r}'`);if((i&$c.constants.COPYFILE_FICLONE_FORCE)!=0)throw th("unsupported clone operation",`copyfile '${e}' -> ${r}'`);let n=this.resolveFilename(`copyfile '${e} -> ${r}'`,e),s=this.entries.get(n);if(typeof s=="undefined")throw $a(`copyfile '${e}' -> '${r}'`);let o=this.resolveFilename(`copyfile '${e}' -> ${r}'`,r),a=this.entries.get(o);if((i&($c.constants.COPYFILE_EXCL|$c.constants.COPYFILE_FICLONE_FORCE))!=0&&typeof a!="undefined")throw yE(`copyfile '${e}' -> '${r}'`);return{indexSource:s,resolvedDestP:o,indexDest:a}}async appendFilePromise(e,r,i){if(this.readOnly)throw ln(`open '${e}'`);return typeof i=="undefined"?i={flag:"a"}:typeof i=="string"?i={flag:"a",encoding:i}:typeof i.flag=="undefined"&&(i=P({flag:"a"},i)),this.writeFilePromise(e,r,i)}appendFileSync(e,r,i={}){if(this.readOnly)throw ln(`open '${e}'`);return typeof i=="undefined"?i={flag:"a"}:typeof i=="string"?i={flag:"a",encoding:i}:typeof i.flag=="undefined"&&(i=P({flag:"a"},i)),this.writeFileSync(e,r,i)}fdToPath(e,r){var n;let i=(n=this.fds.get(e))==null?void 0:n.p;if(typeof i=="undefined")throw Hi(r);return i}async writeFilePromise(e,r,i){let{encoding:n,mode:s,index:o,resolvedP:a}=this.prepareWriteFile(e,i);o!==void 0&&typeof i=="object"&&i.flag&&i.flag.includes("a")&&(r=Buffer.concat([await this.getFileSource(o,{asyncDecompress:!0}),Buffer.from(r)])),n!==null&&(r=r.toString(n));let l=this.setFileSource(a,r);l!==o&&this.registerEntry(a,l),s!==null&&await this.chmodPromise(a,s)}writeFileSync(e,r,i){let{encoding:n,mode:s,index:o,resolvedP:a}=this.prepareWriteFile(e,i);o!==void 0&&typeof i=="object"&&i.flag&&i.flag.includes("a")&&(r=Buffer.concat([this.getFileSource(o),Buffer.from(r)])),n!==null&&(r=r.toString(n));let l=this.setFileSource(a,r);l!==o&&this.registerEntry(a,l),s!==null&&this.chmodSync(a,s)}prepareWriteFile(e,r){if(typeof e=="number"&&(e=this.fdToPath(e,"read")),this.readOnly)throw ln(`open '${e}'`);let i=this.resolveFilename(`open '${e}'`,e);if(this.listings.has(i))throw rh(`open '${e}'`);let n=null,s=null;typeof r=="string"?n=r:typeof r=="object"&&({encoding:n=null,mode:s=null}=r);let o=this.entries.get(i);return{encoding:n,mode:s,resolvedP:i,index:o}}async unlinkPromise(e){return this.unlinkSync(e)}unlinkSync(e){if(this.readOnly)throw ln(`unlink '${e}'`);let r=this.resolveFilename(`unlink '${e}'`,e);if(this.listings.has(r))throw rh(`unlink '${e}'`);let i=this.entries.get(r);if(typeof i=="undefined")throw $a(`unlink '${e}'`);this.deleteEntry(r,i)}async utimesPromise(e,r,i){return this.utimesSync(e,r,i)}utimesSync(e,r,i){if(this.readOnly)throw ln(`utimes '${e}'`);let n=this.resolveFilename(`utimes '${e}'`,e);this.utimesImpl(n,i)}async lutimesPromise(e,r,i){return this.lutimesSync(e,r,i)}lutimesSync(e,r,i){if(this.readOnly)throw ln(`lutimes '${e}'`);let n=this.resolveFilename(`utimes '${e}'`,e,!1);this.utimesImpl(n,i)}utimesImpl(e,r){this.listings.has(e)&&(this.entries.has(e)||this.hydrateDirectory(e));let i=this.entries.get(e);if(i===void 0)throw new Error("Unreachable");if(this.libzip.file.setMtime(this.zip,i,0,ihe(r),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(e,r){return this.mkdirSync(e,r)}mkdirSync(e,{mode:r=493,recursive:i=!1}={}){if(i){this.mkdirpSync(e,{chmod:r});return}if(this.readOnly)throw ln(`mkdir '${e}'`);let n=this.resolveFilename(`mkdir '${e}'`,e);if(this.entries.has(n)||this.listings.has(n))throw yE(`mkdir '${e}'`);this.hydrateDirectory(n),this.chmodSync(n,r)}async rmdirPromise(e,r){return this.rmdirSync(e,r)}rmdirSync(e,{recursive:r=!1}={}){if(this.readOnly)throw ln(`rmdir '${e}'`);if(r){this.removeSync(e);return}let i=this.resolveFilename(`rmdir '${e}'`,e),n=this.listings.get(i);if(!n)throw eo(`rmdir '${e}'`);if(n.size>0)throw dO(`rmdir '${e}'`);let s=this.entries.get(i);if(typeof s=="undefined")throw $a(`rmdir '${e}'`);this.deleteEntry(e,s)}hydrateDirectory(e){let r=this.libzip.dir.add(this.zip,v.relative(Se.root,e));if(r===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(e),this.registerEntry(e,r),r}async linkPromise(e,r){return this.linkSync(e,r)}linkSync(e,r){throw CO(`link '${e}' -> '${r}'`)}async symlinkPromise(e,r){return this.symlinkSync(e,r)}symlinkSync(e,r){if(this.readOnly)throw ln(`symlink '${e}' -> '${r}'`);let i=this.resolveFilename(`symlink '${e}' -> '${r}'`,r);if(this.listings.has(i))throw rh(`symlink '${e}' -> '${r}'`);if(this.entries.has(i))throw yE(`symlink '${e}' -> '${r}'`);let n=this.setFileSource(i,e);if(this.registerEntry(i,n),this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,(_o|511)<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(e,r){typeof r=="object"&&(r=r?r.encoding:void 0);let i=await this.readFileBuffer(e,{asyncDecompress:!0});return r?i.toString(r):i}readFileSync(e,r){typeof r=="object"&&(r=r?r.encoding:void 0);let i=this.readFileBuffer(e);return r?i.toString(r):i}readFileBuffer(e,r={asyncDecompress:!1}){typeof e=="number"&&(e=this.fdToPath(e,"read"));let i=this.resolveFilename(`open '${e}'`,e);if(!this.entries.has(i)&&!this.listings.has(i))throw bs(`open '${e}'`);if(e[e.length-1]==="/"&&!this.listings.has(i))throw eo(`open '${e}'`);if(this.listings.has(i))throw rh("read");let n=this.entries.get(i);if(n===void 0)throw new Error("Unreachable");return this.getFileSource(n,r)}async readdirPromise(e,r){return this.readdirSync(e,r)}readdirSync(e,r){let i=this.resolveFilename(`scandir '${e}'`,e);if(!this.entries.has(i)&&!this.listings.has(i))throw bs(`scandir '${e}'`);let n=this.listings.get(i);if(!n)throw eo(`scandir '${e}'`);let s=[...n];return(r==null?void 0:r.withFileTypes)?s.map(o=>Object.assign(this.statImpl("lstat",v.join(e,o)),{name:o})):s}async readlinkPromise(e){let r=this.prepareReadlink(e);return(await this.getFileSource(r,{asyncDecompress:!0})).toString()}readlinkSync(e){let r=this.prepareReadlink(e);return this.getFileSource(r).toString()}prepareReadlink(e){let r=this.resolveFilename(`readlink '${e}'`,e,!1);if(!this.entries.has(r)&&!this.listings.has(r))throw bs(`readlink '${e}'`);if(e[e.length-1]==="/"&&!this.listings.has(r))throw eo(`open '${e}'`);if(this.listings.has(r))throw $a(`readlink '${e}'`);let i=this.entries.get(r);if(i===void 0)throw new Error("Unreachable");if(!this.isSymbolicLink(i))throw $a(`readlink '${e}'`);return i}async truncatePromise(e,r=0){let i=this.resolveFilename(`open '${e}'`,e),n=this.entries.get(i);if(typeof n=="undefined")throw $a(`open '${e}'`);let s=await this.getFileSource(n,{asyncDecompress:!0}),o=Buffer.alloc(r,0);return s.copy(o),await this.writeFilePromise(e,o)}truncateSync(e,r=0){let i=this.resolveFilename(`open '${e}'`,e),n=this.entries.get(i);if(typeof n=="undefined")throw $a(`open '${e}'`);let s=this.getFileSource(n),o=Buffer.alloc(r,0);return s.copy(o),this.writeFileSync(e,o)}watch(e,r,i){let n;switch(typeof r){case"function":case"string":case"undefined":n=!0;break;default:({persistent:n=!0}=r);break}if(!n)return{on:()=>{},close:()=>{}};let s=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(s)}}}watchFile(e,r,i){let n=v.resolve(Se.root,e);return QE(this,n,r,i)}unwatchFile(e,r){let i=v.resolve(Se.root,e);return nh(this,i,r)}};var fi=class extends eA{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,r,i){return this.baseFs.openPromise(this.mapToBase(e),r,i)}openSync(e,r,i){return this.baseFs.openSync(this.mapToBase(e),r,i)}async opendirPromise(e,r){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),r),{path:e})}opendirSync(e,r){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),r),{path:e})}async readPromise(e,r,i,n,s){return await this.baseFs.readPromise(e,r,i,n,s)}readSync(e,r,i,n,s){return this.baseFs.readSync(e,r,i,n,s)}async writePromise(e,r,i,n,s){return typeof r=="string"?await this.baseFs.writePromise(e,r,i):await this.baseFs.writePromise(e,r,i,n,s)}writeSync(e,r,i,n,s){return typeof r=="string"?this.baseFs.writeSync(e,r,i):this.baseFs.writeSync(e,r,i,n,s)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,r){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,r)}createWriteStream(e,r){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,r)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,r){return this.baseFs.accessSync(this.mapToBase(e),r)}async accessPromise(e,r){return this.baseFs.accessPromise(this.mapToBase(e),r)}async statPromise(e,r){return this.baseFs.statPromise(this.mapToBase(e),r)}statSync(e,r){return this.baseFs.statSync(this.mapToBase(e),r)}async fstatPromise(e,r){return this.baseFs.fstatPromise(e,r)}fstatSync(e,r){return this.baseFs.fstatSync(e,r)}async lstatPromise(e,r){return this.baseFs.lstatPromise(this.mapToBase(e),r)}lstatSync(e,r){return this.baseFs.lstatSync(this.mapToBase(e),r)}async chmodPromise(e,r){return this.baseFs.chmodPromise(this.mapToBase(e),r)}chmodSync(e,r){return this.baseFs.chmodSync(this.mapToBase(e),r)}async chownPromise(e,r,i){return this.baseFs.chownPromise(this.mapToBase(e),r,i)}chownSync(e,r,i){return this.baseFs.chownSync(this.mapToBase(e),r,i)}async renamePromise(e,r){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(r))}renameSync(e,r){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(r))}async copyFilePromise(e,r,i=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(r),i)}copyFileSync(e,r,i=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(r),i)}async appendFilePromise(e,r,i){return this.baseFs.appendFilePromise(this.fsMapToBase(e),r,i)}appendFileSync(e,r,i){return this.baseFs.appendFileSync(this.fsMapToBase(e),r,i)}async writeFilePromise(e,r,i){return this.baseFs.writeFilePromise(this.fsMapToBase(e),r,i)}writeFileSync(e,r,i){return this.baseFs.writeFileSync(this.fsMapToBase(e),r,i)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,r,i){return this.baseFs.utimesPromise(this.mapToBase(e),r,i)}utimesSync(e,r,i){return this.baseFs.utimesSync(this.mapToBase(e),r,i)}async mkdirPromise(e,r){return this.baseFs.mkdirPromise(this.mapToBase(e),r)}mkdirSync(e,r){return this.baseFs.mkdirSync(this.mapToBase(e),r)}async rmdirPromise(e,r){return this.baseFs.rmdirPromise(this.mapToBase(e),r)}rmdirSync(e,r){return this.baseFs.rmdirSync(this.mapToBase(e),r)}async linkPromise(e,r){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(r))}linkSync(e,r){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(r))}async symlinkPromise(e,r,i){let n=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkPromise(o,n,i)}symlinkSync(e,r,i){let n=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkSync(o,n,i)}async readFilePromise(e,r){return r==="utf8"?this.baseFs.readFilePromise(this.fsMapToBase(e),r):this.baseFs.readFilePromise(this.fsMapToBase(e),r)}readFileSync(e,r){return r==="utf8"?this.baseFs.readFileSync(this.fsMapToBase(e),r):this.baseFs.readFileSync(this.fsMapToBase(e),r)}async readdirPromise(e,r){return this.baseFs.readdirPromise(this.mapToBase(e),r)}readdirSync(e,r){return this.baseFs.readdirSync(this.mapToBase(e),r)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,r){return this.baseFs.truncatePromise(this.mapToBase(e),r)}truncateSync(e,r){return this.baseFs.truncateSync(this.mapToBase(e),r)}watch(e,r,i){return this.baseFs.watch(this.mapToBase(e),r,i)}watchFile(e,r,i){return this.baseFs.watchFile(this.mapToBase(e),r,i)}unwatchFile(e,r){return this.baseFs.unwatchFile(this.mapToBase(e),r)}fsMapToBase(e){return typeof e=="number"?e:this.mapToBase(e)}};var Xo=class extends fi{constructor(e,{baseFs:r,pathUtils:i}){super(i);this.target=e,this.baseFs=r}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(e){return e}mapToBase(e){return e}};var Ft=class extends fi{constructor(e,{baseFs:r=new Wt}={}){super(v);this.target=this.pathUtils.normalize(e),this.baseFs=r}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(e){return this.pathUtils.isAbsolute(e)?v.normalize(e):this.baseFs.resolve(v.join(this.target,e))}mapFromBase(e){return e}mapToBase(e){return this.pathUtils.isAbsolute(e)?e:this.pathUtils.join(this.target,e)}};var vO=Se.root,Zo=class extends fi{constructor(e,{baseFs:r=new Wt}={}){super(v);this.target=this.pathUtils.resolve(Se.root,e),this.baseFs=r}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Se.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(e){let r=this.pathUtils.normalize(e);if(this.pathUtils.isAbsolute(e))return this.pathUtils.resolve(this.target,this.pathUtils.relative(vO,e));if(r.match(/^\.\.\/?/))throw new Error(`Resolving this path (${e}) would escape the jail`);return this.pathUtils.resolve(this.target,e)}mapFromBase(e){return this.pathUtils.resolve(vO,this.pathUtils.relative(this.target,e))}};var oh=class extends fi{constructor(e,r){super(r);this.instance=null;this.factory=e}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(e){this.instance=e}mapFromBase(e){return e}mapToBase(e){return e}};var ze=()=>Object.assign(new Error("ENOSYS: unsupported filesystem access"),{code:"ENOSYS"}),gb=class extends eA{constructor(){super(v)}getExtractHint(){throw ze()}getRealPath(){throw ze()}resolve(){throw ze()}async openPromise(){throw ze()}openSync(){throw ze()}async opendirPromise(){throw ze()}opendirSync(){throw ze()}async readPromise(){throw ze()}readSync(){throw ze()}async writePromise(){throw ze()}writeSync(){throw ze()}async closePromise(){throw ze()}closeSync(){throw ze()}createWriteStream(){throw ze()}createReadStream(){throw ze()}async realpathPromise(){throw ze()}realpathSync(){throw ze()}async readdirPromise(){throw ze()}readdirSync(){throw ze()}async existsPromise(e){throw ze()}existsSync(e){throw ze()}async accessPromise(){throw ze()}accessSync(){throw ze()}async statPromise(){throw ze()}statSync(){throw ze()}async fstatPromise(e){throw ze()}fstatSync(e){throw ze()}async lstatPromise(e){throw ze()}lstatSync(e){throw ze()}async chmodPromise(){throw ze()}chmodSync(){throw ze()}async chownPromise(){throw ze()}chownSync(){throw ze()}async mkdirPromise(){throw ze()}mkdirSync(){throw ze()}async rmdirPromise(){throw ze()}rmdirSync(){throw ze()}async linkPromise(){throw ze()}linkSync(){throw ze()}async symlinkPromise(){throw ze()}symlinkSync(){throw ze()}async renamePromise(){throw ze()}renameSync(){throw ze()}async copyFilePromise(){throw ze()}copyFileSync(){throw ze()}async appendFilePromise(){throw ze()}appendFileSync(){throw ze()}async writeFilePromise(){throw ze()}writeFileSync(){throw ze()}async unlinkPromise(){throw ze()}unlinkSync(){throw ze()}async utimesPromise(){throw ze()}utimesSync(){throw ze()}async readFilePromise(){throw ze()}readFileSync(){throw ze()}async readlinkPromise(){throw ze()}readlinkSync(){throw ze()}async truncatePromise(){throw ze()}truncateSync(){throw ze()}watch(){throw ze()}watchFile(){throw ze()}unwatchFile(){throw ze()}},bE=gb;bE.instance=new gb;var ah=class extends fi{constructor(e){super(M);this.baseFs=e}mapFromBase(e){return M.fromPortablePath(e)}mapToBase(e){return M.toPortablePath(e)}};var nhe=/^[0-9]+$/,fb=/^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/,she=/^([^/]+-)?[a-f0-9]+$/,Pr=class extends fi{static makeVirtualPath(e,r,i){if(v.basename(e)!=="__virtual__")throw new Error('Assertion failed: Virtual folders must be named "__virtual__"');if(!v.basename(r).match(she))throw new Error("Assertion failed: Virtual components must be ended by an hexadecimal hash");let s=v.relative(v.dirname(e),i).split("/"),o=0;for(;o{let r=t.indexOf(e);if(r<=0)return null;let i=r;for(;r>=0&&(i=r+e.length,t[i]!==v.sep);){if(t[r-1]===v.sep)return null;r=t.indexOf(e,i)}return t.length>i&&t[i]!==v.sep?null:t.slice(0,i)},Jn=class extends gl{constructor({libzip:e,baseFs:r=new Wt,filter:i=null,maxOpenFiles:n=Infinity,readOnlyArchives:s=!1,useCache:o=!0,maxAge:a=5e3,fileExtensions:l=null}){super();this.fdMap=new Map;this.nextFd=3;this.isZip=new Set;this.notZip=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.libzipFactory=typeof e!="function"?()=>e:e,this.baseFs=r,this.zipInstances=o?new Map:null,this.filter=i,this.maxOpenFiles=n,this.readOnlyArchives=s,this.maxAge=a,this.fileExtensions=l}static async openPromise(e,r){let i=new Jn(r);try{return await e(i)}finally{i.saveAndClose()}}get libzip(){return typeof this.libzipInstance=="undefined"&&(this.libzipInstance=this.libzipFactory()),this.libzipInstance}getExtractHint(e){return this.baseFs.getExtractHint(e)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(sh(this),this.zipInstances)for(let[e,{zipFs:r}]of this.zipInstances.entries())r.saveAndClose(),this.zipInstances.delete(e)}discardAndClose(){if(sh(this),this.zipInstances)for(let[e,{zipFs:r}]of this.zipInstances.entries())r.discardAndClose(),this.zipInstances.delete(e)}resolve(e){return this.baseFs.resolve(e)}remapFd(e,r){let i=this.nextFd++|$o;return this.fdMap.set(i,[e,r]),i}async openPromise(e,r,i){return await this.makeCallPromise(e,async()=>await this.baseFs.openPromise(e,r,i),async(n,{subPath:s})=>this.remapFd(n,await n.openPromise(s,r,i)))}openSync(e,r,i){return this.makeCallSync(e,()=>this.baseFs.openSync(e,r,i),(n,{subPath:s})=>this.remapFd(n,n.openSync(s,r,i)))}async opendirPromise(e,r){return await this.makeCallPromise(e,async()=>await this.baseFs.opendirPromise(e,r),async(i,{subPath:n})=>await i.opendirPromise(n,r),{requireSubpath:!1})}opendirSync(e,r){return this.makeCallSync(e,()=>this.baseFs.opendirSync(e,r),(i,{subPath:n})=>i.opendirSync(n,r),{requireSubpath:!1})}async readPromise(e,r,i,n,s){if((e&$o)==0)return await this.baseFs.readPromise(e,r,i,n,s);let o=this.fdMap.get(e);if(typeof o=="undefined")throw Hi("read");let[a,l]=o;return await a.readPromise(l,r,i,n,s)}readSync(e,r,i,n,s){if((e&$o)==0)return this.baseFs.readSync(e,r,i,n,s);let o=this.fdMap.get(e);if(typeof o=="undefined")throw Hi("readSync");let[a,l]=o;return a.readSync(l,r,i,n,s)}async writePromise(e,r,i,n,s){if((e&$o)==0)return typeof r=="string"?await this.baseFs.writePromise(e,r,i):await this.baseFs.writePromise(e,r,i,n,s);let o=this.fdMap.get(e);if(typeof o=="undefined")throw Hi("write");let[a,l]=o;return typeof r=="string"?await a.writePromise(l,r,i):await a.writePromise(l,r,i,n,s)}writeSync(e,r,i,n,s){if((e&$o)==0)return typeof r=="string"?this.baseFs.writeSync(e,r,i):this.baseFs.writeSync(e,r,i,n,s);let o=this.fdMap.get(e);if(typeof o=="undefined")throw Hi("writeSync");let[a,l]=o;return typeof r=="string"?a.writeSync(l,r,i):a.writeSync(l,r,i,n,s)}async closePromise(e){if((e&$o)==0)return await this.baseFs.closePromise(e);let r=this.fdMap.get(e);if(typeof r=="undefined")throw Hi("close");this.fdMap.delete(e);let[i,n]=r;return await i.closePromise(n)}closeSync(e){if((e&$o)==0)return this.baseFs.closeSync(e);let r=this.fdMap.get(e);if(typeof r=="undefined")throw Hi("closeSync");this.fdMap.delete(e);let[i,n]=r;return i.closeSync(n)}createReadStream(e,r){return e===null?this.baseFs.createReadStream(e,r):this.makeCallSync(e,()=>this.baseFs.createReadStream(e,r),(i,{subPath:n})=>i.createReadStream(n,r))}createWriteStream(e,r){return e===null?this.baseFs.createWriteStream(e,r):this.makeCallSync(e,()=>this.baseFs.createWriteStream(e,r),(i,{subPath:n})=>i.createWriteStream(n,r))}async realpathPromise(e){return await this.makeCallPromise(e,async()=>await this.baseFs.realpathPromise(e),async(r,{archivePath:i,subPath:n})=>{let s=this.realPaths.get(i);return typeof s=="undefined"&&(s=await this.baseFs.realpathPromise(i),this.realPaths.set(i,s)),this.pathUtils.join(s,this.pathUtils.relative(Se.root,await r.realpathPromise(n)))})}realpathSync(e){return this.makeCallSync(e,()=>this.baseFs.realpathSync(e),(r,{archivePath:i,subPath:n})=>{let s=this.realPaths.get(i);return typeof s=="undefined"&&(s=this.baseFs.realpathSync(i),this.realPaths.set(i,s)),this.pathUtils.join(s,this.pathUtils.relative(Se.root,r.realpathSync(n)))})}async existsPromise(e){return await this.makeCallPromise(e,async()=>await this.baseFs.existsPromise(e),async(r,{subPath:i})=>await r.existsPromise(i))}existsSync(e){return this.makeCallSync(e,()=>this.baseFs.existsSync(e),(r,{subPath:i})=>r.existsSync(i))}async accessPromise(e,r){return await this.makeCallPromise(e,async()=>await this.baseFs.accessPromise(e,r),async(i,{subPath:n})=>await i.accessPromise(n,r))}accessSync(e,r){return this.makeCallSync(e,()=>this.baseFs.accessSync(e,r),(i,{subPath:n})=>i.accessSync(n,r))}async statPromise(e,r){return await this.makeCallPromise(e,async()=>await this.baseFs.statPromise(e,r),async(i,{subPath:n})=>await i.statPromise(n,r))}statSync(e,r){return this.makeCallSync(e,()=>this.baseFs.statSync(e,r),(i,{subPath:n})=>i.statSync(n,r))}async fstatPromise(e,r){if((e&$o)==0)return this.baseFs.fstatPromise(e,r);let i=this.fdMap.get(e);if(typeof i=="undefined")throw Hi("fstat");let[n,s]=i;return n.fstatPromise(s,r)}fstatSync(e,r){if((e&$o)==0)return this.baseFs.fstatSync(e,r);let i=this.fdMap.get(e);if(typeof i=="undefined")throw Hi("fstatSync");let[n,s]=i;return n.fstatSync(s,r)}async lstatPromise(e,r){return await this.makeCallPromise(e,async()=>await this.baseFs.lstatPromise(e,r),async(i,{subPath:n})=>await i.lstatPromise(n,r))}lstatSync(e,r){return this.makeCallSync(e,()=>this.baseFs.lstatSync(e,r),(i,{subPath:n})=>i.lstatSync(n,r))}async chmodPromise(e,r){return await this.makeCallPromise(e,async()=>await this.baseFs.chmodPromise(e,r),async(i,{subPath:n})=>await i.chmodPromise(n,r))}chmodSync(e,r){return this.makeCallSync(e,()=>this.baseFs.chmodSync(e,r),(i,{subPath:n})=>i.chmodSync(n,r))}async chownPromise(e,r,i){return await this.makeCallPromise(e,async()=>await this.baseFs.chownPromise(e,r,i),async(n,{subPath:s})=>await n.chownPromise(s,r,i))}chownSync(e,r,i){return this.makeCallSync(e,()=>this.baseFs.chownSync(e,r,i),(n,{subPath:s})=>n.chownSync(s,r,i))}async renamePromise(e,r){return await this.makeCallPromise(e,async()=>await this.makeCallPromise(r,async()=>await this.baseFs.renamePromise(e,r),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),async(i,{subPath:n})=>await this.makeCallPromise(r,async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},async(s,{subPath:o})=>{if(i!==s)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return await i.renamePromise(n,o)}))}renameSync(e,r){return this.makeCallSync(e,()=>this.makeCallSync(r,()=>this.baseFs.renameSync(e,r),()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),(i,{subPath:n})=>this.makeCallSync(r,()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},(s,{subPath:o})=>{if(i!==s)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return i.renameSync(n,o)}))}async copyFilePromise(e,r,i=0){let n=async(s,o,a,l)=>{if((i&Ah.constants.COPYFILE_FICLONE_FORCE)!=0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${o}' -> ${l}'`),{code:"EXDEV"});if(i&Ah.constants.COPYFILE_EXCL&&await this.existsPromise(o))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${o}' -> '${l}'`),{code:"EEXIST"});let c;try{c=await s.readFilePromise(o)}catch(u){throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${o}' -> '${l}'`),{code:"EINVAL"})}await a.writeFilePromise(l,c)};return await this.makeCallPromise(e,async()=>await this.makeCallPromise(r,async()=>await this.baseFs.copyFilePromise(e,r,i),async(s,{subPath:o})=>await n(this.baseFs,e,s,o)),async(s,{subPath:o})=>await this.makeCallPromise(r,async()=>await n(s,o,this.baseFs,r),async(a,{subPath:l})=>s!==a?await n(s,o,a,l):await s.copyFilePromise(o,l,i)))}copyFileSync(e,r,i=0){let n=(s,o,a,l)=>{if((i&Ah.constants.COPYFILE_FICLONE_FORCE)!=0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${o}' -> ${l}'`),{code:"EXDEV"});if(i&Ah.constants.COPYFILE_EXCL&&this.existsSync(o))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${o}' -> '${l}'`),{code:"EEXIST"});let c;try{c=s.readFileSync(o)}catch(u){throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${o}' -> '${l}'`),{code:"EINVAL"})}a.writeFileSync(l,c)};return this.makeCallSync(e,()=>this.makeCallSync(r,()=>this.baseFs.copyFileSync(e,r,i),(s,{subPath:o})=>n(this.baseFs,e,s,o)),(s,{subPath:o})=>this.makeCallSync(r,()=>n(s,o,this.baseFs,r),(a,{subPath:l})=>s!==a?n(s,o,a,l):s.copyFileSync(o,l,i)))}async appendFilePromise(e,r,i){return await this.makeCallPromise(e,async()=>await this.baseFs.appendFilePromise(e,r,i),async(n,{subPath:s})=>await n.appendFilePromise(s,r,i))}appendFileSync(e,r,i){return this.makeCallSync(e,()=>this.baseFs.appendFileSync(e,r,i),(n,{subPath:s})=>n.appendFileSync(s,r,i))}async writeFilePromise(e,r,i){return await this.makeCallPromise(e,async()=>await this.baseFs.writeFilePromise(e,r,i),async(n,{subPath:s})=>await n.writeFilePromise(s,r,i))}writeFileSync(e,r,i){return this.makeCallSync(e,()=>this.baseFs.writeFileSync(e,r,i),(n,{subPath:s})=>n.writeFileSync(s,r,i))}async unlinkPromise(e){return await this.makeCallPromise(e,async()=>await this.baseFs.unlinkPromise(e),async(r,{subPath:i})=>await r.unlinkPromise(i))}unlinkSync(e){return this.makeCallSync(e,()=>this.baseFs.unlinkSync(e),(r,{subPath:i})=>r.unlinkSync(i))}async utimesPromise(e,r,i){return await this.makeCallPromise(e,async()=>await this.baseFs.utimesPromise(e,r,i),async(n,{subPath:s})=>await n.utimesPromise(s,r,i))}utimesSync(e,r,i){return this.makeCallSync(e,()=>this.baseFs.utimesSync(e,r,i),(n,{subPath:s})=>n.utimesSync(s,r,i))}async mkdirPromise(e,r){return await this.makeCallPromise(e,async()=>await this.baseFs.mkdirPromise(e,r),async(i,{subPath:n})=>await i.mkdirPromise(n,r))}mkdirSync(e,r){return this.makeCallSync(e,()=>this.baseFs.mkdirSync(e,r),(i,{subPath:n})=>i.mkdirSync(n,r))}async rmdirPromise(e,r){return await this.makeCallPromise(e,async()=>await this.baseFs.rmdirPromise(e,r),async(i,{subPath:n})=>await i.rmdirPromise(n,r))}rmdirSync(e,r){return this.makeCallSync(e,()=>this.baseFs.rmdirSync(e,r),(i,{subPath:n})=>i.rmdirSync(n,r))}async linkPromise(e,r){return await this.makeCallPromise(r,async()=>await this.baseFs.linkPromise(e,r),async(i,{subPath:n})=>await i.linkPromise(e,n))}linkSync(e,r){return this.makeCallSync(r,()=>this.baseFs.linkSync(e,r),(i,{subPath:n})=>i.linkSync(e,n))}async symlinkPromise(e,r,i){return await this.makeCallPromise(r,async()=>await this.baseFs.symlinkPromise(e,r,i),async(n,{subPath:s})=>await n.symlinkPromise(e,s))}symlinkSync(e,r,i){return this.makeCallSync(r,()=>this.baseFs.symlinkSync(e,r,i),(n,{subPath:s})=>n.symlinkSync(e,s))}async readFilePromise(e,r){return this.makeCallPromise(e,async()=>{switch(r){case"utf8":return await this.baseFs.readFilePromise(e,r);default:return await this.baseFs.readFilePromise(e,r)}},async(i,{subPath:n})=>await i.readFilePromise(n,r))}readFileSync(e,r){return this.makeCallSync(e,()=>{switch(r){case"utf8":return this.baseFs.readFileSync(e,r);default:return this.baseFs.readFileSync(e,r)}},(i,{subPath:n})=>i.readFileSync(n,r))}async readdirPromise(e,r){return await this.makeCallPromise(e,async()=>await this.baseFs.readdirPromise(e,r),async(i,{subPath:n})=>await i.readdirPromise(n,r),{requireSubpath:!1})}readdirSync(e,r){return this.makeCallSync(e,()=>this.baseFs.readdirSync(e,r),(i,{subPath:n})=>i.readdirSync(n,r),{requireSubpath:!1})}async readlinkPromise(e){return await this.makeCallPromise(e,async()=>await this.baseFs.readlinkPromise(e),async(r,{subPath:i})=>await r.readlinkPromise(i))}readlinkSync(e){return this.makeCallSync(e,()=>this.baseFs.readlinkSync(e),(r,{subPath:i})=>r.readlinkSync(i))}async truncatePromise(e,r){return await this.makeCallPromise(e,async()=>await this.baseFs.truncatePromise(e,r),async(i,{subPath:n})=>await i.truncatePromise(n,r))}truncateSync(e,r){return this.makeCallSync(e,()=>this.baseFs.truncateSync(e,r),(i,{subPath:n})=>i.truncateSync(n,r))}watch(e,r,i){return this.makeCallSync(e,()=>this.baseFs.watch(e,r,i),(n,{subPath:s})=>n.watch(s,r,i))}watchFile(e,r,i){return this.makeCallSync(e,()=>this.baseFs.watchFile(e,r,i),()=>QE(this,e,r,i))}unwatchFile(e,r){return this.makeCallSync(e,()=>this.baseFs.unwatchFile(e,r),()=>nh(this,e,r))}async makeCallPromise(e,r,i,{requireSubpath:n=!0}={}){if(typeof e!="string")return await r();let s=this.resolve(e),o=this.findZip(s);return o?n&&o.subPath==="/"?await r():await this.getZipPromise(o.archivePath,async a=>await i(a,o)):await r()}makeCallSync(e,r,i,{requireSubpath:n=!0}={}){if(typeof e!="string")return r();let s=this.resolve(e),o=this.findZip(s);return!o||n&&o.subPath==="/"?r():this.getZipSync(o.archivePath,a=>i(a,o))}findZip(e){if(this.filter&&!this.filter.test(e))return null;let r="";for(;;){let i=e.substr(r.length),n;if(!this.fileExtensions)n=SO(i,".zip");else for(let s of this.fileExtensions)if(n=SO(i,s),n)break;if(!n)return null;if(r=this.pathUtils.join(r,n),this.isZip.has(r)===!1){if(this.notZip.has(r))continue;try{if(!this.baseFs.lstatSync(r).isFile()){this.notZip.add(r);continue}}catch{return null}this.isZip.add(r)}return{archivePath:r,subPath:this.pathUtils.join(Se.root,e.substr(r.length))}}}limitOpenFiles(e){if(this.zipInstances===null)return;let r=Date.now(),i=r+this.maxAge,n=e===null?0:this.zipInstances.size-e;for(let[s,{zipFs:o,expiresAt:a,refCount:l}]of this.zipInstances.entries())if(!(l!==0||o.hasOpenFileHandles())){if(r>=a){o.saveAndClose(),this.zipInstances.delete(s),n-=1;continue}else if(e===null||n<=0){i=a;break}o.saveAndClose(),this.zipInstances.delete(s),n-=1}this.limitOpenFilesTimeout===null&&(e===null&&this.zipInstances.size>0||e!==null)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},i-r).unref())}async getZipPromise(e,r){let i=async()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:await this.baseFs.statPromise(e)});if(this.zipInstances){let n=this.zipInstances.get(e);if(!n){let s=await i();n=this.zipInstances.get(e),n||(n={zipFs:new Jr(e,s),expiresAt:0,refCount:0})}this.zipInstances.delete(e),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(e,n),n.expiresAt=Date.now()+this.maxAge,n.refCount+=1;try{return await r(n.zipFs)}finally{n.refCount-=1}}else{let n=new Jr(e,await i());try{return await r(n)}finally{n.saveAndClose()}}}getZipSync(e,r){let i=()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:this.baseFs.statSync(e)});if(this.zipInstances){let n=this.zipInstances.get(e);return n||(n={zipFs:new Jr(e,i()),expiresAt:0,refCount:0}),this.zipInstances.delete(e),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(e,n),n.expiresAt=Date.now()+this.maxAge,r(n.zipFs)}else{let n=new Jr(e,i());try{return r(n)}finally{n.saveAndClose()}}}};var lh=ie(require("util"));var vE=ie(require("url"));var hb=class extends fi{constructor(e){super(M);this.baseFs=e}mapFromBase(e){return e}mapToBase(e){return e instanceof vE.URL?(0,vE.fileURLToPath)(e):e}};var ohe=new Set(["accessSync","appendFileSync","createReadStream","createWriteStream","chmodSync","chownSync","closeSync","copyFileSync","linkSync","lstatSync","fstatSync","lutimesSync","mkdirSync","openSync","opendirSync","readSync","readlinkSync","readFileSync","readdirSync","readlinkSync","realpathSync","renameSync","rmdirSync","statSync","symlinkSync","truncateSync","unlinkSync","unwatchFile","utimesSync","watch","watchFile","writeFileSync","writeSync"]),xO=new Set(["accessPromise","appendFilePromise","chmodPromise","chownPromise","closePromise","copyFilePromise","linkPromise","fstatPromise","lstatPromise","lutimesPromise","mkdirPromise","openPromise","opendirPromise","readdirPromise","realpathPromise","readFilePromise","readdirPromise","readlinkPromise","renamePromise","rmdirPromise","statPromise","symlinkPromise","truncatePromise","unlinkPromise","utimesPromise","writeFilePromise","writeSync"]),ahe=new Set(["appendFilePromise","chmodPromise","chownPromise","closePromise","readPromise","readFilePromise","statPromise","truncatePromise","utimesPromise","writePromise","writeFilePromise"]);function pb(t,e){e=new hb(e);let r=(i,n,s)=>{let o=i[n];i[n]=s,typeof(o==null?void 0:o[lh.promisify.custom])!="undefined"&&(s[lh.promisify.custom]=o[lh.promisify.custom])};{r(t,"exists",(i,...n)=>{let o=typeof n[n.length-1]=="function"?n.pop():()=>{};process.nextTick(()=>{e.existsPromise(i).then(a=>{o(a)},()=>{o(!1)})})}),r(t,"read",(i,n,...s)=>{let a=typeof s[s.length-1]=="function"?s.pop():()=>{};process.nextTick(()=>{e.readPromise(i,n,...s).then(l=>{a(null,l,n)},l=>{a(l,0,n)})})});for(let i of xO){let n=i.replace(/Promise$/,"");if(typeof t[n]=="undefined")continue;let s=e[i];if(typeof s=="undefined")continue;r(t,n,(...a)=>{let c=typeof a[a.length-1]=="function"?a.pop():()=>{};process.nextTick(()=>{s.apply(e,a).then(u=>{c(null,u)},u=>{c(u)})})})}t.realpath.native=t.realpath}{r(t,"existsSync",i=>{try{return e.existsSync(i)}catch(n){return!1}});for(let i of ohe){let n=i;if(typeof t[n]=="undefined")continue;let s=e[i];typeof s!="undefined"&&r(t,n,s.bind(e))}t.realpathSync.native=t.realpathSync}{let i=process.emitWarning;process.emitWarning=()=>{};let n;try{n=t.promises}finally{process.emitWarning=i}if(typeof n!="undefined"){for(let o of xO){let a=o.replace(/Promise$/,"");if(typeof n[a]=="undefined")continue;let l=e[o];typeof l!="undefined"&&o!=="open"&&r(n,a,l.bind(e))}class s{constructor(a){this.fd=a}}for(let o of ahe){let a=o.replace(/Promise$/,""),l=e[o];typeof l!="undefined"&&r(s.prototype,a,function(...c){return l.call(e,this.fd,...c)})}r(n,"open",async(...o)=>{let a=await e.openPromise(...o);return new s(a)})}}t.read[lh.promisify.custom]=async(i,n,...s)=>({bytesRead:await e.readPromise(i,n,...s),buffer:n})}function SE(t,e){let r=Object.create(t);return pb(r,e),r}var kO=ie(require("os"));function PO(t){let e=M.toPortablePath(kO.default.tmpdir()),r=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,"0");return v.join(e,`${t}${r}`)}var vs=new Set,DO=!1;function RO(){DO||(DO=!0,process.once("exit",()=>{T.rmtempSync()}))}var T=Object.assign(new Wt,{detachTemp(t){vs.delete(t)},mktempSync(t){for(RO();;){let e=PO("xfs-");try{this.mkdirSync(e)}catch(i){if(i.code==="EEXIST")continue;throw i}let r=this.realpathSync(e);if(vs.add(r),typeof t!="undefined")try{return t(r)}finally{if(vs.has(r)){vs.delete(r);try{this.removeSync(r)}catch{}}}else return r}},async mktempPromise(t){for(RO();;){let e=PO("xfs-");try{await this.mkdirPromise(e)}catch(i){if(i.code==="EEXIST")continue;throw i}let r=await this.realpathPromise(e);if(vs.add(r),typeof t!="undefined")try{return await t(r)}finally{if(vs.has(r)){vs.delete(r);try{await this.removePromise(r)}catch{}}}else return r}},async rmtempPromise(){await Promise.all(Array.from(vs.values()).map(async t=>{try{await T.removePromise(t,{maxRetries:0}),vs.delete(t)}catch{}}))},rmtempSync(){for(let t of vs)try{T.removeSync(t),vs.delete(t)}catch{}}});var vb=ie(bb()),Pn;(function(i){i[i.Never=0]="Never",i[i.ErrorCode=1]="ErrorCode",i[i.Always=2]="Always"})(Pn||(Pn={}));function dl(t){return t!==null&&typeof t.fd=="number"}var Cl=new Set;function Sb(){}function xb(){for(let t of Cl)t.kill()}async function to(t,e,{cwd:r,env:i=process.env,strict:n=!1,stdin:s=null,stdout:o,stderr:a,end:l=2}){let c=["pipe","pipe","pipe"];s===null?c[0]="ignore":dl(s)&&(c[0]=s),dl(o)&&(c[1]=o),dl(a)&&(c[2]=a);let u=(0,vb.default)(t,e,{cwd:M.fromPortablePath(r),env:_(P({},i),{PWD:M.fromPortablePath(r)}),stdio:c});Cl.add(u),Cl.size===1&&(process.on("SIGINT",Sb),process.on("SIGTERM",xb)),!dl(s)&&s!==null&&s.pipe(u.stdin),dl(o)||u.stdout.pipe(o,{end:!1}),dl(a)||u.stderr.pipe(a,{end:!1});let g=()=>{for(let f of new Set([o,a]))dl(f)||f.end()};return new Promise((f,h)=>{u.on("error",p=>{Cl.delete(u),Cl.size===0&&(process.off("SIGINT",Sb),process.off("SIGTERM",xb)),(l===2||l===1)&&g(),h(p)}),u.on("close",(p,d)=>{Cl.delete(u),Cl.size===0&&(process.off("SIGINT",Sb),process.off("SIGTERM",xb)),(l===2||l===1&&p>0)&&g(),p===0||!n?f({code:kb(p,d)}):h(p!==null?new Error(`Child "${t}" exited with exit code ${p}`):new Error(`Child "${t}" exited with signal ${d}`))})})}async function Nhe(t,e,{cwd:r,env:i=process.env,encoding:n="utf8",strict:s=!1}){let o=["ignore","pipe","pipe"],a=[],l=[],c=M.fromPortablePath(r);typeof i.PWD!="undefined"&&(i=_(P({},i),{PWD:c}));let u=(0,vb.default)(t,e,{cwd:c,env:i,stdio:o});return u.stdout.on("data",g=>{a.push(g)}),u.stderr.on("data",g=>{l.push(g)}),await new Promise((g,f)=>{u.on("error",()=>{f()}),u.on("close",(h,p)=>{let d=n==="buffer"?Buffer.concat(a):Buffer.concat(a).toString(n),m=n==="buffer"?Buffer.concat(l):Buffer.concat(l).toString(n);h===0||!s?g({code:kb(h,p),stdout:d,stderr:m}):f(Object.assign(new Error(`Child "${t}" exited with exit code ${h} + +${m}`),{code:kb(h,p),stdout:d,stderr:m}))})})}var Lhe=new Map([["SIGINT",2],["SIGQUIT",3],["SIGKILL",9],["SIGTERM",15]]);function kb(t,e){let r=Lhe.get(e);return typeof r!="undefined"?128+r:t!=null?t:1}var Pb={};it(Pb,{getDefaultGlobalFolder:()=>Rb,getHomeFolder:()=>uh,isFolderInside:()=>Fb});var Db=ie(require("os"));function Rb(){if(process.platform==="win32"){let t=M.toPortablePath(process.env.LOCALAPPDATA||M.join((0,Db.homedir)(),"AppData","Local"));return v.resolve(t,"Yarn/Berry")}if(process.env.XDG_DATA_HOME){let t=M.toPortablePath(process.env.XDG_DATA_HOME);return v.resolve(t,"yarn/berry")}return v.resolve(uh(),".yarn/berry")}function uh(){return M.toPortablePath((0,Db.homedir)()||"/usr/local/share")}function Fb(t,e){let r=v.relative(e,t);return r&&!r.startsWith("..")&&!v.isAbsolute(r)}var ue={};it(ue,{LogLevel:()=>Ts,Style:()=>Gl,Type:()=>Le,addLogFilterSupport:()=>Cp,applyColor:()=>On,applyHyperlink:()=>Ku,applyStyle:()=>Py,json:()=>Uu,mark:()=>xx,pretty:()=>Ve,prettyField:()=>Yl,prettyList:()=>Kx,supportsColor:()=>xy,supportsHyperlinks:()=>Mx,tuple:()=>jl});var pp=ie(jb()),dp=ie(ml()),o3=ie(Nn()),a3=ie(gU());var z;(function(te){te[te.UNNAMED=0]="UNNAMED",te[te.EXCEPTION=1]="EXCEPTION",te[te.MISSING_PEER_DEPENDENCY=2]="MISSING_PEER_DEPENDENCY",te[te.CYCLIC_DEPENDENCIES=3]="CYCLIC_DEPENDENCIES",te[te.DISABLED_BUILD_SCRIPTS=4]="DISABLED_BUILD_SCRIPTS",te[te.BUILD_DISABLED=5]="BUILD_DISABLED",te[te.SOFT_LINK_BUILD=6]="SOFT_LINK_BUILD",te[te.MUST_BUILD=7]="MUST_BUILD",te[te.MUST_REBUILD=8]="MUST_REBUILD",te[te.BUILD_FAILED=9]="BUILD_FAILED",te[te.RESOLVER_NOT_FOUND=10]="RESOLVER_NOT_FOUND",te[te.FETCHER_NOT_FOUND=11]="FETCHER_NOT_FOUND",te[te.LINKER_NOT_FOUND=12]="LINKER_NOT_FOUND",te[te.FETCH_NOT_CACHED=13]="FETCH_NOT_CACHED",te[te.YARN_IMPORT_FAILED=14]="YARN_IMPORT_FAILED",te[te.REMOTE_INVALID=15]="REMOTE_INVALID",te[te.REMOTE_NOT_FOUND=16]="REMOTE_NOT_FOUND",te[te.RESOLUTION_PACK=17]="RESOLUTION_PACK",te[te.CACHE_CHECKSUM_MISMATCH=18]="CACHE_CHECKSUM_MISMATCH",te[te.UNUSED_CACHE_ENTRY=19]="UNUSED_CACHE_ENTRY",te[te.MISSING_LOCKFILE_ENTRY=20]="MISSING_LOCKFILE_ENTRY",te[te.WORKSPACE_NOT_FOUND=21]="WORKSPACE_NOT_FOUND",te[te.TOO_MANY_MATCHING_WORKSPACES=22]="TOO_MANY_MATCHING_WORKSPACES",te[te.CONSTRAINTS_MISSING_DEPENDENCY=23]="CONSTRAINTS_MISSING_DEPENDENCY",te[te.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]="CONSTRAINTS_INCOMPATIBLE_DEPENDENCY",te[te.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]="CONSTRAINTS_EXTRANEOUS_DEPENDENCY",te[te.CONSTRAINTS_INVALID_DEPENDENCY=26]="CONSTRAINTS_INVALID_DEPENDENCY",te[te.CANT_SUGGEST_RESOLUTIONS=27]="CANT_SUGGEST_RESOLUTIONS",te[te.FROZEN_LOCKFILE_EXCEPTION=28]="FROZEN_LOCKFILE_EXCEPTION",te[te.CROSS_DRIVE_VIRTUAL_LOCAL=29]="CROSS_DRIVE_VIRTUAL_LOCAL",te[te.FETCH_FAILED=30]="FETCH_FAILED",te[te.DANGEROUS_NODE_MODULES=31]="DANGEROUS_NODE_MODULES",te[te.NODE_GYP_INJECTED=32]="NODE_GYP_INJECTED",te[te.AUTHENTICATION_NOT_FOUND=33]="AUTHENTICATION_NOT_FOUND",te[te.INVALID_CONFIGURATION_KEY=34]="INVALID_CONFIGURATION_KEY",te[te.NETWORK_ERROR=35]="NETWORK_ERROR",te[te.LIFECYCLE_SCRIPT=36]="LIFECYCLE_SCRIPT",te[te.CONSTRAINTS_MISSING_FIELD=37]="CONSTRAINTS_MISSING_FIELD",te[te.CONSTRAINTS_INCOMPATIBLE_FIELD=38]="CONSTRAINTS_INCOMPATIBLE_FIELD",te[te.CONSTRAINTS_EXTRANEOUS_FIELD=39]="CONSTRAINTS_EXTRANEOUS_FIELD",te[te.CONSTRAINTS_INVALID_FIELD=40]="CONSTRAINTS_INVALID_FIELD",te[te.AUTHENTICATION_INVALID=41]="AUTHENTICATION_INVALID",te[te.PROLOG_UNKNOWN_ERROR=42]="PROLOG_UNKNOWN_ERROR",te[te.PROLOG_SYNTAX_ERROR=43]="PROLOG_SYNTAX_ERROR",te[te.PROLOG_EXISTENCE_ERROR=44]="PROLOG_EXISTENCE_ERROR",te[te.STACK_OVERFLOW_RESOLUTION=45]="STACK_OVERFLOW_RESOLUTION",te[te.AUTOMERGE_FAILED_TO_PARSE=46]="AUTOMERGE_FAILED_TO_PARSE",te[te.AUTOMERGE_IMMUTABLE=47]="AUTOMERGE_IMMUTABLE",te[te.AUTOMERGE_SUCCESS=48]="AUTOMERGE_SUCCESS",te[te.AUTOMERGE_REQUIRED=49]="AUTOMERGE_REQUIRED",te[te.DEPRECATED_CLI_SETTINGS=50]="DEPRECATED_CLI_SETTINGS",te[te.PLUGIN_NAME_NOT_FOUND=51]="PLUGIN_NAME_NOT_FOUND",te[te.INVALID_PLUGIN_REFERENCE=52]="INVALID_PLUGIN_REFERENCE",te[te.CONSTRAINTS_AMBIGUITY=53]="CONSTRAINTS_AMBIGUITY",te[te.CACHE_OUTSIDE_PROJECT=54]="CACHE_OUTSIDE_PROJECT",te[te.IMMUTABLE_INSTALL=55]="IMMUTABLE_INSTALL",te[te.IMMUTABLE_CACHE=56]="IMMUTABLE_CACHE",te[te.INVALID_MANIFEST=57]="INVALID_MANIFEST",te[te.PACKAGE_PREPARATION_FAILED=58]="PACKAGE_PREPARATION_FAILED",te[te.INVALID_RANGE_PEER_DEPENDENCY=59]="INVALID_RANGE_PEER_DEPENDENCY",te[te.INCOMPATIBLE_PEER_DEPENDENCY=60]="INCOMPATIBLE_PEER_DEPENDENCY",te[te.DEPRECATED_PACKAGE=61]="DEPRECATED_PACKAGE",te[te.INCOMPATIBLE_OS=62]="INCOMPATIBLE_OS",te[te.INCOMPATIBLE_CPU=63]="INCOMPATIBLE_CPU",te[te.FROZEN_ARTIFACT_EXCEPTION=64]="FROZEN_ARTIFACT_EXCEPTION",te[te.TELEMETRY_NOTICE=65]="TELEMETRY_NOTICE",te[te.PATCH_HUNK_FAILED=66]="PATCH_HUNK_FAILED",te[te.INVALID_CONFIGURATION_VALUE=67]="INVALID_CONFIGURATION_VALUE",te[te.UNUSED_PACKAGE_EXTENSION=68]="UNUSED_PACKAGE_EXTENSION",te[te.REDUNDANT_PACKAGE_EXTENSION=69]="REDUNDANT_PACKAGE_EXTENSION",te[te.AUTO_NM_SUCCESS=70]="AUTO_NM_SUCCESS",te[te.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]="NM_CANT_INSTALL_EXTERNAL_SOFT_LINK",te[te.NM_PRESERVE_SYMLINKS_REQUIRED=72]="NM_PRESERVE_SYMLINKS_REQUIRED",te[te.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]="UPDATE_LOCKFILE_ONLY_SKIP_LINK",te[te.NM_HARDLINKS_MODE_DOWNGRADED=74]="NM_HARDLINKS_MODE_DOWNGRADED",te[te.PROLOG_INSTANTIATION_ERROR=75]="PROLOG_INSTANTIATION_ERROR",te[te.INCOMPATIBLE_ARCHITECTURE=76]="INCOMPATIBLE_ARCHITECTURE",te[te.GHOST_ARCHITECTURE=77]="GHOST_ARCHITECTURE"})(z||(z={}));function KE(t){return`YN${t.toString(10).padStart(4,"0")}`}var de={};it(de,{BufferStream:()=>OH,CachingStrategy:()=>Dl,DefaultStream:()=>KH,assertNever:()=>Lv,bufferStream:()=>Cu,buildIgnorePattern:()=>DEe,convertMapsToIndexableObjects:()=>aI,dynamicRequire:()=>mu,escapeRegExp:()=>SEe,getArrayWithDefault:()=>hu,getFactoryWithDefault:()=>na,getMapWithDefault:()=>pu,getSetWithDefault:()=>Pl,isIndexableObject:()=>Tv,isPathLike:()=>REe,isTaggedYarnVersion:()=>vEe,mapAndFilter:()=>kl,mapAndFind:()=>MH,overrideType:()=>Nv,parseBoolean:()=>Hh,parseOptionalBoolean:()=>jH,prettifyAsyncErrors:()=>du,prettifySyncErrors:()=>Mv,releaseAfterUseAsync:()=>kEe,replaceEnvVariables:()=>Ov,sortMap:()=>gn,tryParseOptionalBoolean:()=>Kv,validateEnum:()=>xEe});var vh={};it(vh,{Builtins:()=>Iv,Cli:()=>oo,Command:()=>ye,Option:()=>Y,UsageError:()=>me});var yl=0,Eh=1,Gi=2,sv="",hi="\0",Au=-1,ov=/^(-h|--help)(?:=([0-9]+))?$/,UE=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,fU=/^-[a-zA-Z]{2,}$/,av=/^([^=]+)=([\s\S]*)$/,Av=process.env.DEBUG_CLI==="1";var me=class extends Error{constructor(e){super(e);this.clipanion={type:"usage"},this.name="UsageError"}},Ih=class extends Error{constructor(e,r){super();if(this.input=e,this.candidates=r,this.clipanion={type:"none"},this.name="UnknownSyntaxError",this.candidates.length===0)this.message="Command not found, but we're not sure what's the alternative.";else if(this.candidates.every(i=>i.reason!==null&&i.reason===r[0].reason)){let[{reason:i}]=this.candidates;this.message=`${i} + +${this.candidates.map(({usage:n})=>`$ ${n}`).join(` +`)}`}else if(this.candidates.length===1){let[{usage:i}]=this.candidates;this.message=`Command not found; did you mean: + +$ ${i} +${lv(e)}`}else this.message=`Command not found; did you mean one of: + +${this.candidates.map(({usage:i},n)=>`${`${n}.`.padStart(4)} ${i}`).join(` +`)} + +${lv(e)}`}},cv=class extends Error{constructor(e,r){super();this.input=e,this.usages=r,this.clipanion={type:"none"},this.name="AmbiguousSyntaxError",this.message=`Cannot find which to pick amongst the following alternatives: + +${this.usages.map((i,n)=>`${`${n}.`.padStart(4)} ${i}`).join(` +`)} + +${lv(e)}`}},lv=t=>`While running ${t.filter(e=>e!==hi).map(e=>{let r=JSON.stringify(e);return e.match(/\s/)||e.length===0||r!==`"${e}"`?r:e}).join(" ")}`;var yh=Symbol("clipanion/isOption");function ji(t){return _(P({},t),{[yh]:!0})}function so(t,e){return typeof t=="undefined"?[t,e]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[void 0,t]:[t,e]}function HE(t,e=!1){let r=t.replace(/^\.: /,"");return e&&(r=r[0].toLowerCase()+r.slice(1)),r}function wh(t,e){return e.length===1?new me(`${t}: ${HE(e[0],!0)}`):new me(`${t}: +${e.map(r=>` +- ${HE(r)}`).join("")}`)}function Bh(t,e,r){if(typeof r=="undefined")return e;let i=[],n=[],s=a=>{let l=e;return e=a,s.bind(null,l)};if(!r(e,{errors:i,coercions:n,coercion:s}))throw wh(`Invalid value for ${t}`,i);for(let[,a]of n)a();return e}var ye=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let r=this.constructor.schema;if(typeof r!="undefined"){let{isDict:n,isUnknown:s,applyCascade:o}=await Promise.resolve().then(()=>(Ss(),lu)),a=o(n(s()),r),l=[],c=[];if(!a(this,{errors:l,coercions:c}))throw wh("Invalid option schema",l);for(let[,g]of c)g()}let i=await this.execute();return typeof i!="undefined"?i:0}};ye.isOption=yh;ye.Default=[];function un(t){Av&&console.log(t)}var BU={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:Au};function QU(){return{nodes:[qi(),qi(),qi()]}}function nCe(t){let e=QU(),r=[],i=e.nodes.length;for(let n of t){r.push(i);for(let s=0;s{if(e.has(i))return;e.add(i);let n=t.nodes[i];for(let o of Object.values(n.statics))for(let{to:a}of o)r(a);for(let[,{to:o}]of n.dynamics)r(o);for(let{to:o}of n.shortcuts)r(o);let s=new Set(n.shortcuts.map(({to:o})=>o));for(;n.shortcuts.length>0;){let{to:o}=n.shortcuts.shift(),a=t.nodes[o];for(let[l,c]of Object.entries(a.statics)){let u=Object.prototype.hasOwnProperty.call(n.statics,l)?n.statics[l]:n.statics[l]=[];for(let g of c)u.some(({to:f})=>g.to===f)||u.push(g)}for(let[l,c]of a.dynamics)n.dynamics.some(([u,{to:g}])=>l===u&&c.to===g)||n.dynamics.push([l,c]);for(let l of a.shortcuts)s.has(l.to)||(n.shortcuts.push(l),s.add(l.to))}};r(yl)}function oCe(t,{prefix:e=""}={}){if(Av){un(`${e}Nodes are:`);for(let r=0;rl!==Gi).map(({state:l})=>({usage:l.candidateUsage,reason:null})));if(a.every(({node:l})=>l===Gi))throw new Ih(e,a.map(({state:l})=>({usage:l.candidateUsage,reason:l.errorMessage})));i=aCe(a)}if(i.length>0){un(" Results:");for(let s of i)un(` - ${s.node} -> ${JSON.stringify(s.state)}`)}else un(" No results");return i}function ACe(t,e){if(e.selectedIndex!==null)return!0;if(Object.prototype.hasOwnProperty.call(t.statics,hi)){for(let{to:r}of t.statics[hi])if(r===Eh)return!0}return!1}function cCe(t,e,r){let i=r&&e.length>0?[""]:[],n=vU(t,e,r),s=[],o=new Set,a=(l,c,u=!0)=>{let g=[c];for(;g.length>0;){let h=g;g=[];for(let p of h){let d=t.nodes[p],m=Object.keys(d.statics);for(let I of Object.keys(d.statics)){let B=m[0];for(let{to:b,reducer:R}of d.statics[B])R==="pushPath"&&(u||l.push(B),g.push(b))}}u=!1}let f=JSON.stringify(l);o.has(f)||(s.push(l),o.add(f))};for(let{node:l,state:c}of n){if(c.remainder!==null){a([c.remainder],l);continue}let u=t.nodes[l],g=ACe(u,c);for(let[f,h]of Object.entries(u.statics))(g&&f!==hi||!f.startsWith("-")&&h.some(({reducer:p})=>p==="pushPath"))&&a([...i,f],l);if(!!g)for(let[f,{to:h}]of u.dynamics){if(h===Gi)continue;let p=lCe(f,c);if(p!==null)for(let d of p)a([...i,d],l)}}return[...s].sort()}function gCe(t,e){let r=vU(t,[...e,hi]);return uCe(e,r.map(({state:i})=>i))}function aCe(t){let e=0;for(let{state:r}of t)r.path.length>e&&(e=r.path.length);return t.filter(({state:r})=>r.path.length===e)}function uCe(t,e){let r=e.filter(g=>g.selectedIndex!==null);if(r.length===0)throw new Error;let i=r.filter(g=>g.requiredOptions.every(f=>f.some(h=>g.options.find(p=>p.name===h))));if(i.length===0)throw new Ih(t,r.map(g=>({usage:g.candidateUsage,reason:null})));let n=0;for(let g of i)g.path.length>n&&(n=g.path.length);let s=i.filter(g=>g.path.length===n),o=g=>g.positionals.filter(({extra:f})=>!f).length+g.options.length,a=s.map(g=>({state:g,positionalCount:o(g)})),l=0;for(let{positionalCount:g}of a)g>l&&(l=g);let c=a.filter(({positionalCount:g})=>g===l).map(({state:g})=>g),u=fCe(c);if(u.length>1)throw new cv(t,u.map(g=>g.candidateUsage));return u[0]}function fCe(t){let e=[],r=[];for(let i of t)i.selectedIndex===Au?r.push(i):e.push(i);return r.length>0&&e.push(_(P({},BU),{path:SU(...r.map(i=>i.path)),options:r.reduce((i,n)=>i.concat(n.options),[])})),e}function SU(t,e,...r){return e===void 0?Array.from(t):SU(t.filter((i,n)=>i===e[n]),...r)}function qi(){return{dynamics:[],shortcuts:[],statics:{}}}function bU(t){return t===Eh||t===Gi}function Cv(t,e=0){return{to:bU(t.to)?t.to:t.to>2?t.to+e-2:t.to+e,reducer:t.reducer}}function iCe(t,e=0){let r=qi();for(let[i,n]of t.dynamics)r.dynamics.push([i,Cv(n,e)]);for(let i of t.shortcuts)r.shortcuts.push(Cv(i,e));for(let[i,n]of Object.entries(t.statics))r.statics[i]=n.map(s=>Cv(s,e));return r}function pi(t,e,r,i,n){t.nodes[e].dynamics.push([r,{to:i,reducer:n}])}function cu(t,e,r,i){t.nodes[e].shortcuts.push({to:r,reducer:i})}function ta(t,e,r,i,n){(Object.prototype.hasOwnProperty.call(t.nodes[e].statics,r)?t.nodes[e].statics[r]:t.nodes[e].statics[r]=[]).push({to:i,reducer:n})}function jE(t,e,r,i){if(Array.isArray(e)){let[n,...s]=e;return t[n](r,i,...s)}else return t[e](r,i)}function lCe(t,e){let r=Array.isArray(t)?YE[t[0]]:YE[t];if(typeof r.suggest=="undefined")return null;let i=Array.isArray(t)?t.slice(1):[];return r.suggest(e,...i)}var YE={always:()=>!0,isOptionLike:(t,e)=>!t.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(t,e)=>t.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(t,e,r,i)=>!t.ignoreOptions&&e===r,isBatchOption:(t,e,r)=>!t.ignoreOptions&&fU.test(e)&&[...e.slice(1)].every(i=>r.includes(`-${i}`)),isBoundOption:(t,e,r,i)=>{let n=e.match(av);return!t.ignoreOptions&&!!n&&UE.test(n[1])&&r.includes(n[1])&&i.filter(s=>s.names.includes(n[1])).every(s=>s.allowBinding)},isNegatedOption:(t,e,r)=>!t.ignoreOptions&&e===`--no-${r.slice(2)}`,isHelp:(t,e)=>!t.ignoreOptions&&ov.test(e),isUnsupportedOption:(t,e,r)=>!t.ignoreOptions&&e.startsWith("-")&&UE.test(e)&&!r.includes(e),isInvalidOption:(t,e)=>!t.ignoreOptions&&e.startsWith("-")&&!UE.test(e)};YE.isOption.suggest=(t,e,r=!0)=>r?null:[e];var dv={setCandidateState:(t,e,r)=>P(P({},t),r),setSelectedIndex:(t,e,r)=>_(P({},t),{selectedIndex:r}),pushBatch:(t,e)=>_(P({},t),{options:t.options.concat([...e.slice(1)].map(r=>({name:`-${r}`,value:!0})))}),pushBound:(t,e)=>{let[,r,i]=e.match(av);return _(P({},t),{options:t.options.concat({name:r,value:i})})},pushPath:(t,e)=>_(P({},t),{path:t.path.concat(e)}),pushPositional:(t,e)=>_(P({},t),{positionals:t.positionals.concat({value:e,extra:!1})}),pushExtra:(t,e)=>_(P({},t),{positionals:t.positionals.concat({value:e,extra:!0})}),pushExtraNoLimits:(t,e)=>_(P({},t),{positionals:t.positionals.concat({value:e,extra:Ln})}),pushTrue:(t,e,r=e)=>_(P({},t),{options:t.options.concat({name:e,value:!0})}),pushFalse:(t,e,r=e)=>_(P({},t),{options:t.options.concat({name:r,value:!1})}),pushUndefined:(t,e)=>_(P({},t),{options:t.options.concat({name:e,value:void 0})}),pushStringValue:(t,e)=>{var r;let i=_(P({},t),{options:[...t.options]}),n=t.options[t.options.length-1];return n.value=((r=n.value)!==null&&r!==void 0?r:[]).concat([e]),i},setStringValue:(t,e)=>{let r=_(P({},t),{options:[...t.options]}),i=t.options[t.options.length-1];return i.value=e,r},inhibateOptions:t=>_(P({},t),{ignoreOptions:!0}),useHelp:(t,e,r)=>{let[,,i]=e.match(ov);return typeof i!="undefined"?_(P({},t),{options:[{name:"-c",value:String(r)},{name:"-i",value:i}]}):_(P({},t),{options:[{name:"-c",value:String(r)}]})},setError:(t,e,r)=>e===hi?_(P({},t),{errorMessage:`${r}.`}):_(P({},t),{errorMessage:`${r} ("${e}").`}),setOptionArityError:(t,e)=>{let r=t.options[t.options.length-1];return _(P({},t),{errorMessage:`Not enough arguments to option ${r.name}.`})}},Ln=Symbol(),xU=class{constructor(e,r){this.allOptionNames=[],this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=r}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:r=this.arity.trailing,extra:i=this.arity.extra,proxy:n=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:r,extra:i,proxy:n})}addPositional({name:e="arg",required:r=!0}={}){if(!r&&this.arity.extra===Ln)throw new Error("Optional parameters cannot be declared when using .rest() or .proxy()");if(!r&&this.arity.trailing.length>0)throw new Error("Optional parameters cannot be declared after the required trailing positional arguments");!r&&this.arity.extra!==Ln?this.arity.extra.push(e):this.arity.extra!==Ln&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e="arg",required:r=0}={}){if(this.arity.extra===Ln)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let i=0;i1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(i))throw new Error(`The arity must be an integer, got ${i}`);if(i<0)throw new Error(`The arity must be positive, got ${i}`);this.allOptionNames.push(...e),this.options.push({names:e,description:r,arity:i,hidden:n,required:s,allowBinding:o})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:r=!0}={}){let i=[this.cliOpts.binaryName],n=[];if(this.paths.length>0&&i.push(...this.paths[0]),e){for(let{names:o,arity:a,hidden:l,description:c,required:u}of this.options){if(l)continue;let g=[];for(let h=0;h`:`[${f}]`)}i.push(...this.arity.leading.map(o=>`<${o}>`)),this.arity.extra===Ln?i.push("..."):i.push(...this.arity.extra.map(o=>`[${o}]`)),i.push(...this.arity.trailing.map(o=>`<${o}>`))}return{usage:i.join(" "),options:n}}compile(){if(typeof this.context=="undefined")throw new Error("Assertion failed: No context attached");let e=QU(),r=yl,i=this.usage().usage,n=this.options.filter(a=>a.required).map(a=>a.names);r=xs(e,qi()),ta(e,yl,sv,r,["setCandidateState",{candidateUsage:i,requiredOptions:n}]);let s=this.arity.proxy?"always":"isNotOptionLike",o=this.paths.length>0?this.paths:[[]];for(let a of o){let l=r;if(a.length>0){let f=xs(e,qi());cu(e,l,f),this.registerOptions(e,f),l=f}for(let f=0;f0||!this.arity.proxy){let f=xs(e,qi());pi(e,l,"isHelp",f,["useHelp",this.cliIndex]),ta(e,f,hi,Eh,["setSelectedIndex",Au]),this.registerOptions(e,l)}this.arity.leading.length>0&&ta(e,l,hi,Gi,["setError","Not enough positional arguments"]);let c=l;for(let f=0;f0||f+1!==this.arity.leading.length)&&ta(e,h,hi,Gi,["setError","Not enough positional arguments"]),pi(e,c,"isNotOptionLike",h,"pushPositional"),c=h}let u=c;if(this.arity.extra===Ln||this.arity.extra.length>0){let f=xs(e,qi());if(cu(e,c,f),this.arity.extra===Ln){let h=xs(e,qi());this.arity.proxy||this.registerOptions(e,h),pi(e,c,s,h,"pushExtraNoLimits"),pi(e,h,s,h,"pushExtraNoLimits"),cu(e,h,f)}else for(let h=0;h0&&ta(e,u,hi,Gi,["setError","Not enough positional arguments"]);let g=u;for(let f=0;fo.length>s.length?o:s,"");if(i.arity===0)for(let s of i.names)pi(e,r,["isOption",s,i.hidden||s!==n],r,"pushTrue"),s.startsWith("--")&&!s.startsWith("--no-")&&pi(e,r,["isNegatedOption",s],r,["pushFalse",s]);else{let s=xs(e,qi());for(let o of i.names)pi(e,r,["isOption",o,i.hidden||o!==n],s,"pushUndefined");for(let o=0;o=0&&egCe(i,n),suggest:(n,s)=>cCe(i,n,s)}}};var kU=80,mv=Array(kU).fill("\u2501");for(let t=0;t<=24;++t)mv[mv.length-t]=`[38;5;${232+t}m\u2501`;var Ev={header:t=>`\u2501\u2501\u2501 ${t}${t.length`${t}`,error:t=>`${t}`,code:t=>`${t}`},PU={header:t=>t,bold:t=>t,error:t=>t,code:t=>t};function hCe(t){let e=t.split(` +`),r=e.filter(n=>n.match(/\S/)),i=r.length>0?r.reduce((n,s)=>Math.min(n,s.length-s.trimStart().length),Number.MAX_VALUE):0;return e.map(n=>n.slice(i).trimRight()).join(` +`)}function Vn(t,{format:e,paragraphs:r}){return t=t.replace(/\r\n?/g,` +`),t=hCe(t),t=t.replace(/^\n+|\n+$/g,""),t=t.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 + +`),t=t.replace(/\n(\n)?\n*/g,"$1"),r&&(t=t.split(/\n/).map(i=>{let n=i.match(/^\s*[*-][\t ]+(.*)/);if(!n)return i.match(/(.{1,80})(?: |$)/g).join(` +`);let s=i.length-i.trimStart().length;return n[1].match(new RegExp(`(.{1,${78-s}})(?: |$)`,"g")).map((o,a)=>" ".repeat(s)+(a===0?"- ":" ")+o).join(` +`)}).join(` + +`)),t=t.replace(/(`+)((?:.|[\n])*?)\1/g,(i,n,s)=>e.code(n+s+n)),t=t.replace(/(\*\*)((?:.|[\n])*?)\1/g,(i,n,s)=>e.bold(n+s+n)),t?`${t} +`:""}var bh=class extends ye{constructor(e){super();this.contexts=e,this.commands=[]}static from(e,r){let i=new bh(r);i.path=e.path;for(let n of e.options)switch(n.name){case"-c":i.commands.push(Number(n.value));break;case"-i":i.index=Number(n.value);break}return i}async execute(){let e=this.commands;if(typeof this.index!="undefined"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: +`),this.context.stdout.write(` +`);let r=0;for(let i of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[i].commandClass,{prefix:`${r++}. `.padStart(5)}));this.context.stdout.write(` +`),this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands. +`)}}};var DU=Symbol("clipanion/errorCommand");function pCe(){return process.env.FORCE_COLOR==="0"?!1:!!(process.env.FORCE_COLOR==="1"||typeof process.stdout!="undefined"&&process.stdout.isTTY)}var oo=class{constructor({binaryLabel:e,binaryName:r="...",binaryVersion:i,enableColors:n=pCe()}={}){this.registrations=new Map,this.builder=new Qh({binaryName:r}),this.binaryLabel=e,this.binaryName=r,this.binaryVersion=i,this.enableColors=n}static from(e,r={}){let i=new oo(r);for(let n of e)i.register(n);return i}register(e){var r;let i=new Map,n=new e;for(let l in n){let c=n[l];typeof c=="object"&&c!==null&&c[ye.isOption]&&i.set(l,c)}let s=this.builder.command(),o=s.cliIndex,a=(r=e.paths)!==null&&r!==void 0?r:n.paths;if(typeof a!="undefined")for(let l of a)s.addPath(l);this.registrations.set(e,{specs:i,builder:s,index:o});for(let[l,{definition:c}]of i.entries())c(s,l);s.setContext({commandClass:e})}process(e){let{contexts:r,process:i}=this.builder.compile(),n=i(e);switch(n.selectedIndex){case Au:return bh.from(n,r);default:{let{commandClass:s}=r[n.selectedIndex],o=this.registrations.get(s);if(typeof o=="undefined")throw new Error("Assertion failed: Expected the command class to have been registered.");let a=new s;a.path=n.path;try{for(let[l,{transformer:c}]of o.specs.entries())a[l]=c(o.builder,l,n);return a}catch(l){throw l[DU]=a,l}}break}}async run(e,r){let i;if(!Array.isArray(e))i=e;else try{i=this.process(e)}catch(s){return r.stdout.write(this.error(s)),1}if(i.help)return r.stdout.write(this.usage(i,{detailed:!0})),0;i.context=r,i.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableColors:this.enableColors,definitions:()=>this.definitions(),error:(s,o)=>this.error(s,o),process:s=>this.process(s),run:(s,o)=>this.run(s,P(P({},r),o)),usage:(s,o)=>this.usage(s,o)};let n;try{n=await i.validateAndExecute().catch(s=>i.catch(s).then(()=>0))}catch(s){return r.stdout.write(this.error(s,{command:i})),1}return n}async runExit(e,r){process.exitCode=await this.run(e,r)}suggest(e,r){let{suggest:i}=this.builder.compile();return i(e,r)}definitions({colored:e=!1}={}){let r=[];for(let[i,{index:n}]of this.registrations){if(typeof i.usage=="undefined")continue;let{usage:s}=this.getUsageByIndex(n,{detailed:!1}),{usage:o,options:a}=this.getUsageByIndex(n,{detailed:!0,inlineOptions:!1}),l=typeof i.usage.category!="undefined"?Vn(i.usage.category,{format:this.format(e),paragraphs:!1}):void 0,c=typeof i.usage.description!="undefined"?Vn(i.usage.description,{format:this.format(e),paragraphs:!1}):void 0,u=typeof i.usage.details!="undefined"?Vn(i.usage.details,{format:this.format(e),paragraphs:!0}):void 0,g=typeof i.usage.examples!="undefined"?i.usage.examples.map(([f,h])=>[Vn(f,{format:this.format(e),paragraphs:!1}),h.replace(/\$0/g,this.binaryName)]):void 0;r.push({path:s,usage:o,category:l,description:c,details:u,examples:g,options:a})}return r}usage(e=null,{colored:r,detailed:i=!1,prefix:n="$ "}={}){var s;if(e===null){for(let l of this.registrations.keys()){let c=l.paths,u=typeof l.usage!="undefined";if(!c||c.length===0||c.length===1&&c[0].length===0||((s=c==null?void 0:c.some(h=>h.length===0))!==null&&s!==void 0?s:!1))if(e){e=null;break}else e=l;else if(u){e=null;continue}}e&&(i=!0)}let o=e!==null&&e instanceof ye?e.constructor:e,a="";if(o)if(i){let{description:l="",details:c="",examples:u=[]}=o.usage||{};l!==""&&(a+=Vn(l,{format:this.format(r),paragraphs:!1}).replace(/^./,h=>h.toUpperCase()),a+=` +`),(c!==""||u.length>0)&&(a+=`${this.format(r).header("Usage")} +`,a+=` +`);let{usage:g,options:f}=this.getUsageByRegistration(o,{inlineOptions:!1});if(a+=`${this.format(r).bold(n)}${g} +`,f.length>0){a+=` +`,a+=`${Ev.header("Options")} +`;let h=f.reduce((p,d)=>Math.max(p,d.definition.length),0);a+=` +`;for(let{definition:p,description:d}of f)a+=` ${this.format(r).bold(p.padEnd(h))} ${Vn(d,{format:this.format(r),paragraphs:!1})}`}if(c!==""&&(a+=` +`,a+=`${this.format(r).header("Details")} +`,a+=` +`,a+=Vn(c,{format:this.format(r),paragraphs:!0})),u.length>0){a+=` +`,a+=`${this.format(r).header("Examples")} +`;for(let[h,p]of u)a+=` +`,a+=Vn(h,{format:this.format(r),paragraphs:!1}),a+=`${p.replace(/^/m,` ${this.format(r).bold(n)}`).replace(/\$0/g,this.binaryName)} +`}}else{let{usage:l}=this.getUsageByRegistration(o);a+=`${this.format(r).bold(n)}${l} +`}else{let l=new Map;for(let[f,{index:h}]of this.registrations.entries()){if(typeof f.usage=="undefined")continue;let p=typeof f.usage.category!="undefined"?Vn(f.usage.category,{format:this.format(r),paragraphs:!1}):null,d=l.get(p);typeof d=="undefined"&&l.set(p,d=[]);let{usage:m}=this.getUsageByIndex(h);d.push({commandClass:f,usage:m})}let c=Array.from(l.keys()).sort((f,h)=>f===null?-1:h===null?1:f.localeCompare(h,"en",{usage:"sort",caseFirst:"upper"})),u=typeof this.binaryLabel!="undefined",g=typeof this.binaryVersion!="undefined";u||g?(u&&g?a+=`${this.format(r).header(`${this.binaryLabel} - ${this.binaryVersion}`)} + +`:u?a+=`${this.format(r).header(`${this.binaryLabel}`)} +`:a+=`${this.format(r).header(`${this.binaryVersion}`)} +`,a+=` ${this.format(r).bold(n)}${this.binaryName} +`):a+=`${this.format(r).bold(n)}${this.binaryName} +`;for(let f of c){let h=l.get(f).slice().sort((d,m)=>d.usage.localeCompare(m.usage,"en",{usage:"sort",caseFirst:"upper"})),p=f!==null?f.trim():"General commands";a+=` +`,a+=`${this.format(r).header(`${p}`)} +`;for(let{commandClass:d,usage:m}of h){let I=d.usage.description||"undocumented";a+=` +`,a+=` ${this.format(r).bold(m)} +`,a+=` ${Vn(I,{format:this.format(r),paragraphs:!1})}`}}a+=` +`,a+=Vn("You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.",{format:this.format(r),paragraphs:!0})}return a}error(e,r){var i,{colored:n,command:s=(i=e[DU])!==null&&i!==void 0?i:null}=r===void 0?{}:r;e instanceof Error||(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let o="",a=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");a==="Error"&&(a="Internal Error"),o+=`${this.format(n).error(a)}: ${e.message} +`;let l=e.clipanion;return typeof l!="undefined"?l.type==="usage"&&(o+=` +`,o+=this.usage(s)):e.stack&&(o+=`${e.stack.replace(/^.*\n/,"")} +`),o}getUsageByRegistration(e,r){let i=this.registrations.get(e);if(typeof i=="undefined")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(i.index,r)}getUsageByIndex(e,r){return this.builder.getBuilderByIndex(e).usage(r)}format(e=this.enableColors){return e?Ev:PU}};oo.defaultContext={stdin:process.stdin,stdout:process.stdout,stderr:process.stderr};var Iv={};it(Iv,{DefinitionsCommand:()=>qE,HelpCommand:()=>JE,VersionCommand:()=>WE});var qE=class extends ye{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} +`)}};qE.paths=[["--clipanion=definitions"]];var JE=class extends ye{async execute(){this.context.stdout.write(this.cli.usage())}};JE.paths=[["-h"],["--help"]];var WE=class extends ye{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} +`)}};WE.paths=[["-v"],["--version"]];var Y={};it(Y,{Array:()=>RU,Boolean:()=>FU,Counter:()=>NU,Proxy:()=>LU,Rest:()=>TU,String:()=>MU,applyValidator:()=>Bh,cleanValidationError:()=>HE,formatError:()=>wh,isOptionSymbol:()=>yh,makeCommandOption:()=>ji,rerouteArguments:()=>so});function RU(t,e,r){let[i,n]=so(e,r!=null?r:{}),{arity:s=1}=n,o=t.split(","),a=new Set(o);return ji({definition(l){l.addOption({names:o,arity:s,hidden:n==null?void 0:n.hidden,description:n==null?void 0:n.description,required:n.required})},transformer(l,c,u){let g=typeof i!="undefined"?[...i]:void 0;for(let{name:f,value:h}of u.options)!a.has(f)||(g=g!=null?g:[],g.push(h));return g}})}function FU(t,e,r){let[i,n]=so(e,r!=null?r:{}),s=t.split(","),o=new Set(s);return ji({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u=f);return u}})}function NU(t,e,r){let[i,n]=so(e,r!=null?r:{}),s=t.split(","),o=new Set(s);return ji({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u!=null||(u=0),f?u+=1:u=0);return u}})}function LU(t={}){return ji({definition(e,r){var i;e.addProxy({name:(i=t.name)!==null&&i!==void 0?i:r,required:t.required})},transformer(e,r,i){return i.positionals.map(({value:n})=>n)}})}function TU(t={}){return ji({definition(e,r){var i;e.addRest({name:(i=t.name)!==null&&i!==void 0?i:r,required:t.required})},transformer(e,r,i){let n=o=>{let a=i.positionals[o];return a.extra===Ln||a.extra===!1&&oo)}})}function dCe(t,e,r){let[i,n]=so(e,r!=null?r:{}),{arity:s=1}=n,o=t.split(","),a=new Set(o);return ji({definition(l){l.addOption({names:o,arity:n.tolerateBoolean?0:s,hidden:n.hidden,description:n.description,required:n.required})},transformer(l,c,u){let g,f=i;for(let{name:h,value:p}of u.options)!a.has(h)||(g=h,f=p);return typeof f=="string"?Bh(g!=null?g:c,f,n.validator):f}})}function CCe(t={}){let{required:e=!0}=t;return ji({definition(r,i){var n;r.addPositional({name:(n=t.name)!==null&&n!==void 0?n:i,required:t.required})},transformer(r,i,n){var s;for(let o=0;oJSON.stringify(i)).join(", ")})`);return e}function kl(t,e){let r=[];for(let i of t){let n=e(i);n!==LH&&r.push(n)}return r}var LH=Symbol();kl.skip=LH;function MH(t,e){for(let r of t){let i=e(r);if(i!==TH)return i}}var TH=Symbol();MH.skip=TH;function Tv(t){return typeof t=="object"&&t!==null}function aI(t){if(t instanceof Map&&(t=Object.fromEntries(t)),Tv(t))for(let e of Object.keys(t)){let r=t[e];Tv(r)&&(t[e]=aI(r))}return t}function na(t,e,r){let i=t.get(e);return typeof i=="undefined"&&t.set(e,i=r()),i}function hu(t,e){let r=t.get(e);return typeof r=="undefined"&&t.set(e,r=[]),r}function Pl(t,e){let r=t.get(e);return typeof r=="undefined"&&t.set(e,r=new Set),r}function pu(t,e){let r=t.get(e);return typeof r=="undefined"&&t.set(e,r=new Map),r}async function kEe(t,e){if(e==null)return await t();try{return await t()}finally{await e()}}async function du(t,e){try{return await t()}catch(r){throw r.message=e(r.message),r}}function Mv(t,e){try{return t()}catch(r){throw r.message=e(r.message),r}}async function Cu(t){return await new Promise((e,r)=>{let i=[];t.on("error",n=>{r(n)}),t.on("data",n=>{i.push(n)}),t.on("end",()=>{e(Buffer.concat(i))})})}var OH=class extends Fv.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(e,r,i){if(r!=="buffer"||!Buffer.isBuffer(e))throw new Error("Assertion failed: BufferStream only accept buffers");this.chunks.push(e),i(null,null)}_flush(e){e(null,Buffer.concat(this.chunks))}},KH=class extends Fv.Transform{constructor(e=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=e}_transform(e,r,i){if(r!=="buffer"||!Buffer.isBuffer(e))throw new Error("Assertion failed: DefaultStream only accept buffers");this.active=!1,i(null,e)}_flush(e){this.active&&this.ifEmpty.length>0?e(null,this.ifEmpty):e(null)}},Uh=eval("require");function UH(t){return Uh(M.fromPortablePath(t))}function HH(path){let physicalPath=M.fromPortablePath(path),currentCacheEntry=Uh.cache[physicalPath];delete Uh.cache[physicalPath];let result;try{result=UH(physicalPath);let freshCacheEntry=Uh.cache[physicalPath],dynamicModule=eval("module"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{Uh.cache[physicalPath]=currentCacheEntry}return result}var GH=new Map;function PEe(t){let e=GH.get(t),r=T.statSync(t);if((e==null?void 0:e.mtime)===r.mtimeMs)return e.instance;let i=HH(t);return GH.set(t,{mtime:r.mtimeMs,instance:i}),i}var Dl;(function(i){i[i.NoCache=0]="NoCache",i[i.FsTime=1]="FsTime",i[i.Node=2]="Node"})(Dl||(Dl={}));function mu(t,{cachingStrategy:e=2}={}){switch(e){case 0:return HH(t);case 1:return PEe(t);case 2:return UH(t);default:throw new Error("Unsupported caching strategy")}}function gn(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(r.map(o=>s(o)));let n=r.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>r[s])}function DEe(t){return t.length===0?null:t.map(e=>`(${FH.default.makeRe(e,{windows:!1,dot:!0}).source})`).join("|")}function Ov(t,{env:e}){let r=/\${(?[\d\w_]+)(?:)?(?:-(?[^}]*))?}/g;return t.replace(r,(...i)=>{let{variableName:n,colon:s,fallback:o}=i[i.length-1],a=Object.prototype.hasOwnProperty.call(e,n),l=e[n];if(l||a&&!s)return l;if(o!=null)return o;throw new me(`Environment variable not found (${n})`)})}function Hh(t){switch(t){case"true":case"1":case 1:case!0:return!0;case"false":case"0":case 0:case!1:return!1;default:throw new Error(`Couldn't parse "${t}" as a boolean`)}}function jH(t){return typeof t=="undefined"?t:Hh(t)}function Kv(t){try{return jH(t)}catch{return null}}function REe(t){return!!(M.isAbsolute(t)||t.match(/^(\.{1,2}|~)\//))}var S={};it(S,{areDescriptorsEqual:()=>i3,areIdentsEqual:()=>cp,areLocatorsEqual:()=>up,areVirtualPackagesEquivalent:()=>XQe,bindDescriptor:()=>VQe,bindLocator:()=>_Qe,convertDescriptorToLocator:()=>By,convertLocatorToDescriptor:()=>WQe,convertPackageToLocator:()=>zQe,convertToIdent:()=>JQe,convertToManifestRange:()=>ebe,copyPackage:()=>ap,devirtualizeDescriptor:()=>Ap,devirtualizeLocator:()=>lp,getIdentVendorPath:()=>Lx,isPackageCompatible:()=>Sy,isVirtualDescriptor:()=>hA,isVirtualLocator:()=>Io,makeDescriptor:()=>Yt,makeIdent:()=>Eo,makeLocator:()=>Vi,makeRange:()=>by,parseDescriptor:()=>pA,parseFileStyleRange:()=>ZQe,parseIdent:()=>En,parseLocator:()=>Hl,parseRange:()=>Tu,prettyDependent:()=>Nx,prettyDescriptor:()=>Xt,prettyIdent:()=>Vr,prettyLocator:()=>lt,prettyLocatorNoColors:()=>Rx,prettyRange:()=>yy,prettyReference:()=>fp,prettyResolution:()=>Fx,prettyWorkspace:()=>hp,renamePackage:()=>op,slugifyIdent:()=>Dx,slugifyLocator:()=>Mu,sortDescriptors:()=>Ou,stringifyDescriptor:()=>In,stringifyIdent:()=>St,stringifyLocator:()=>is,tryParseDescriptor:()=>gp,tryParseIdent:()=>n3,tryParseLocator:()=>Qy,virtualizeDescriptor:()=>kx,virtualizePackage:()=>Px});var Lu=ie(require("querystring")),e3=ie(Or()),t3=ie(wY());var mn={};it(mn,{checksumFile:()=>Ey,checksumPattern:()=>Iy,makeHash:()=>zi});var my=ie(require("crypto")),Sx=ie(vx());function zi(...t){let e=(0,my.createHash)("sha512"),r="";for(let i of t)typeof i=="string"?r+=i:i&&(r&&(e.update(r),r=""),e.update(i));return r&&e.update(r),e.digest("hex")}async function Ey(t,{baseFs:e,algorithm:r}={baseFs:T,algorithm:"sha512"}){let i=await e.openPromise(t,"r");try{let n=65536,s=Buffer.allocUnsafeSlow(n),o=(0,my.createHash)(r),a=0;for(;(a=await e.readPromise(i,s,0,n))!==0;)o.update(a===n?s:s.slice(0,a));return o.digest("hex")}finally{await e.closePromise(i)}}async function Iy(t,{cwd:e}){let i=(await(0,Sx.default)(t,{cwd:M.fromPortablePath(e),expandDirectories:!1,onlyDirectories:!0,unique:!0})).map(a=>`${a}/**/*`),n=await(0,Sx.default)([t,...i],{cwd:M.fromPortablePath(e),expandDirectories:!1,onlyFiles:!1,unique:!0});n.sort();let s=await Promise.all(n.map(async a=>{let l=[Buffer.from(a)],c=M.toPortablePath(a),u=await T.lstatPromise(c);return u.isSymbolicLink()?l.push(Buffer.from(await T.readlinkPromise(c))):u.isFile()&&l.push(await T.readFilePromise(c)),l.join("\0")})),o=(0,my.createHash)("sha512");for(let a of s)o.update(a);return o.digest("hex")}var wy="virtual:",YQe=5,r3=/(os|cpu)=([a-z0-9_-]+)/,qQe=(0,t3.makeParser)(r3);function Eo(t,e){if(t==null?void 0:t.startsWith("@"))throw new Error("Invalid scope: don't prefix it with '@'");return{identHash:zi(t,e),scope:t,name:e}}function Yt(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:zi(t.identHash,e),range:e}}function Vi(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:zi(t.identHash,e),reference:e}}function JQe(t){return{identHash:t.identHash,scope:t.scope,name:t.name}}function By(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.descriptorHash,reference:t.range}}function WQe(t){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:t.locatorHash,range:t.reference}}function zQe(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.locatorHash,reference:t.reference}}function op(t,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:t.version,languageName:t.languageName,linkType:t.linkType,conditions:t.conditions,dependencies:new Map(t.dependencies),peerDependencies:new Map(t.peerDependencies),dependenciesMeta:new Map(t.dependenciesMeta),peerDependenciesMeta:new Map(t.peerDependenciesMeta),bin:new Map(t.bin)}}function ap(t){return op(t,t)}function kx(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return Yt(t,`virtual:${e}#${t.range}`)}function Px(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return op(t,Vi(t,`virtual:${e}#${t.reference}`))}function hA(t){return t.range.startsWith(wy)}function Io(t){return t.reference.startsWith(wy)}function Ap(t){if(!hA(t))throw new Error("Not a virtual descriptor");return Yt(t,t.range.replace(/^[^#]*#/,""))}function lp(t){if(!Io(t))throw new Error("Not a virtual descriptor");return Vi(t,t.reference.replace(/^[^#]*#/,""))}function VQe(t,e){return t.range.includes("::")?t:Yt(t,`${t.range}::${Lu.default.stringify(e)}`)}function _Qe(t,e){return t.reference.includes("::")?t:Vi(t,`${t.reference}::${Lu.default.stringify(e)}`)}function cp(t,e){return t.identHash===e.identHash}function i3(t,e){return t.descriptorHash===e.descriptorHash}function up(t,e){return t.locatorHash===e.locatorHash}function XQe(t,e){if(!Io(t))throw new Error("Invalid package type");if(!Io(e))throw new Error("Invalid package type");if(!cp(t,e)||t.dependencies.size!==e.dependencies.size)return!1;for(let r of t.dependencies.values()){let i=e.dependencies.get(r.identHash);if(!i||!i3(r,i))return!1}return!0}function En(t){let e=n3(t);if(!e)throw new Error(`Invalid ident (${t})`);return e}function n3(t){let e=t.match(/^(?:@([^/]+?)\/)?([^/]+)$/);if(!e)return null;let[,r,i]=e,n=typeof r!="undefined"?r:null;return Eo(n,i)}function pA(t,e=!1){let r=gp(t,e);if(!r)throw new Error(`Invalid descriptor (${t})`);return r}function gp(t,e=!1){let r=e?t.match(/^(?:@([^/]+?)\/)?([^/]+?)(?:@(.+))$/):t.match(/^(?:@([^/]+?)\/)?([^/]+?)(?:@(.+))?$/);if(!r)return null;let[,i,n,s]=r;if(s==="unknown")throw new Error(`Invalid range (${t})`);let o=typeof i!="undefined"?i:null,a=typeof s!="undefined"?s:"unknown";return Yt(Eo(o,n),a)}function Hl(t,e=!1){let r=Qy(t,e);if(!r)throw new Error(`Invalid locator (${t})`);return r}function Qy(t,e=!1){let r=e?t.match(/^(?:@([^/]+?)\/)?([^/]+?)(?:@(.+))$/):t.match(/^(?:@([^/]+?)\/)?([^/]+?)(?:@(.+))?$/);if(!r)return null;let[,i,n,s]=r;if(s==="unknown")throw new Error(`Invalid reference (${t})`);let o=typeof i!="undefined"?i:null,a=typeof s!="undefined"?s:"unknown";return Vi(Eo(o,n),a)}function Tu(t,e){let r=t.match(/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/);if(r===null)throw new Error(`Invalid range (${t})`);let i=typeof r[1]!="undefined"?r[1]:null;if(typeof(e==null?void 0:e.requireProtocol)=="string"&&i!==e.requireProtocol)throw new Error(`Invalid protocol (${i})`);if((e==null?void 0:e.requireProtocol)&&i===null)throw new Error(`Missing protocol (${i})`);let n=typeof r[3]!="undefined"?decodeURIComponent(r[2]):null;if((e==null?void 0:e.requireSource)&&n===null)throw new Error(`Missing source (${t})`);let s=typeof r[3]!="undefined"?decodeURIComponent(r[3]):decodeURIComponent(r[2]),o=(e==null?void 0:e.parseSelector)?Lu.default.parse(s):s,a=typeof r[4]!="undefined"?Lu.default.parse(r[4]):null;return{protocol:i,source:n,selector:o,params:a}}function ZQe(t,{protocol:e}){let{selector:r,params:i}=Tu(t,{requireProtocol:e,requireBindings:!0});if(typeof i.locator!="string")throw new Error(`Assertion failed: Invalid bindings for ${t}`);return{parentLocator:Hl(i.locator,!0),path:r}}function s3(t){return t=t.replace(/%/g,"%25"),t=t.replace(/:/g,"%3A"),t=t.replace(/#/g,"%23"),t}function $Qe(t){return t===null?!1:Object.entries(t).length>0}function by({protocol:t,source:e,selector:r,params:i}){let n="";return t!==null&&(n+=`${t}`),e!==null&&(n+=`${s3(e)}#`),n+=s3(r),$Qe(i)&&(n+=`::${Lu.default.stringify(i)}`),n}function ebe(t){let{params:e,protocol:r,source:i,selector:n}=Tu(t);for(let s in e)s.startsWith("__")&&delete e[s];return by({protocol:r,source:i,params:e,selector:n})}function St(t){return t.scope?`@${t.scope}/${t.name}`:`${t.name}`}function In(t){return t.scope?`@${t.scope}/${t.name}@${t.range}`:`${t.name}@${t.range}`}function is(t){return t.scope?`@${t.scope}/${t.name}@${t.reference}`:`${t.name}@${t.reference}`}function Dx(t){return t.scope!==null?`@${t.scope}-${t.name}`:t.name}function Mu(t){let{protocol:e,selector:r}=Tu(t.reference),i=e!==null?e.replace(/:$/,""):"exotic",n=e3.default.valid(r),s=n!==null?`${i}-${n}`:`${i}`,o=10,a=t.scope?`${Dx(t)}-${s}-${t.locatorHash.slice(0,o)}`:`${Dx(t)}-${s}-${t.locatorHash.slice(0,o)}`;return kr(a)}function Vr(t,e){return e.scope?`${Ve(t,`@${e.scope}/`,Le.SCOPE)}${Ve(t,e.name,Le.NAME)}`:`${Ve(t,e.name,Le.NAME)}`}function vy(t){if(t.startsWith(wy)){let e=vy(t.substr(t.indexOf("#")+1)),r=t.substr(wy.length,YQe);return`${e} [${r}]`}else return t.replace(/\?.*/,"?[...]")}function yy(t,e){return`${Ve(t,vy(e),Le.RANGE)}`}function Xt(t,e){return`${Vr(t,e)}${Ve(t,"@",Le.RANGE)}${yy(t,e.range)}`}function fp(t,e){return`${Ve(t,vy(e),Le.REFERENCE)}`}function lt(t,e){return`${Vr(t,e)}${Ve(t,"@",Le.REFERENCE)}${fp(t,e.reference)}`}function Rx(t){return`${St(t)}@${vy(t.reference)}`}function Ou(t){return gn(t,[e=>St(e),e=>e.range])}function hp(t,e){return Vr(t,e.locator)}function Fx(t,e,r){let i=hA(e)?Ap(e):e;return r===null?`${Xt(t,i)} \u2192 ${xx(t).Cross}`:i.identHash===r.identHash?`${Xt(t,i)} \u2192 ${fp(t,r.reference)}`:`${Xt(t,i)} \u2192 ${lt(t,r)}`}function Nx(t,e,r){return r===null?`${lt(t,e)}`:`${lt(t,e)} (via ${yy(t,r.range)})`}function Lx(t){return`node_modules/${St(t)}`}function Sy(t,e){return t.conditions?qQe(t.conditions,r=>{let[,i,n]=r.match(r3),s=e[i];return s?s.includes(n):!0}):!0}var gt;(function(r){r.HARD="HARD",r.SOFT="SOFT"})(gt||(gt={}));var oi;(function(i){i.Dependency="Dependency",i.PeerDependency="PeerDependency",i.PeerDependencyMeta="PeerDependencyMeta"})(oi||(oi={}));var ki;(function(i){i.Inactive="inactive",i.Redundant="redundant",i.Active="active"})(ki||(ki={}));var Le={NO_HINT:"NO_HINT",NULL:"NULL",SCOPE:"SCOPE",NAME:"NAME",RANGE:"RANGE",REFERENCE:"REFERENCE",NUMBER:"NUMBER",PATH:"PATH",URL:"URL",ADDED:"ADDED",REMOVED:"REMOVED",CODE:"CODE",DURATION:"DURATION",SIZE:"SIZE",IDENT:"IDENT",DESCRIPTOR:"DESCRIPTOR",LOCATOR:"LOCATOR",RESOLUTION:"RESOLUTION",DEPENDENT:"DEPENDENT",PACKAGE_EXTENSION:"PACKAGE_EXTENSION",SETTING:"SETTING"},Gl;(function(e){e[e.BOLD=2]="BOLD"})(Gl||(Gl={}));var Tx=dp.default.GITHUB_ACTIONS?{level:2}:pp.default.supportsColor?{level:pp.default.supportsColor.level}:{level:0},xy=Tx.level!==0,Mx=xy&&!dp.default.GITHUB_ACTIONS&&!dp.default.CIRCLE&&!dp.default.GITLAB,Ox=new pp.default.Instance(Tx),tbe=new Map([[Le.NO_HINT,null],[Le.NULL,["#a853b5",129]],[Le.SCOPE,["#d75f00",166]],[Le.NAME,["#d7875f",173]],[Le.RANGE,["#00afaf",37]],[Le.REFERENCE,["#87afff",111]],[Le.NUMBER,["#ffd700",220]],[Le.PATH,["#d75fd7",170]],[Le.URL,["#d75fd7",170]],[Le.ADDED,["#5faf00",70]],[Le.REMOVED,["#d70000",160]],[Le.CODE,["#87afff",111]],[Le.SIZE,["#ffd700",220]]]),Ls=t=>t,ky={[Le.NUMBER]:Ls({pretty:(t,e)=>`${e}`,json:t=>t}),[Le.IDENT]:Ls({pretty:(t,e)=>Vr(t,e),json:t=>St(t)}),[Le.LOCATOR]:Ls({pretty:(t,e)=>lt(t,e),json:t=>is(t)}),[Le.DESCRIPTOR]:Ls({pretty:(t,e)=>Xt(t,e),json:t=>In(t)}),[Le.RESOLUTION]:Ls({pretty:(t,{descriptor:e,locator:r})=>Fx(t,e,r),json:({descriptor:t,locator:e})=>({descriptor:In(t),locator:e!==null?is(e):null})}),[Le.DEPENDENT]:Ls({pretty:(t,{locator:e,descriptor:r})=>Nx(t,e,r),json:({locator:t,descriptor:e})=>({locator:is(t),descriptor:In(e)})}),[Le.PACKAGE_EXTENSION]:Ls({pretty:(t,e)=>{switch(e.type){case oi.Dependency:return`${Vr(t,e.parentDescriptor)} \u27A4 ${On(t,"dependencies",Le.CODE)} \u27A4 ${Vr(t,e.descriptor)}`;case oi.PeerDependency:return`${Vr(t,e.parentDescriptor)} \u27A4 ${On(t,"peerDependencies",Le.CODE)} \u27A4 ${Vr(t,e.descriptor)}`;case oi.PeerDependencyMeta:return`${Vr(t,e.parentDescriptor)} \u27A4 ${On(t,"peerDependenciesMeta",Le.CODE)} \u27A4 ${Vr(t,En(e.selector))} \u27A4 ${On(t,e.key,Le.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:t=>{switch(t.type){case oi.Dependency:return`${St(t.parentDescriptor)} > ${St(t.descriptor)}`;case oi.PeerDependency:return`${St(t.parentDescriptor)} >> ${St(t.descriptor)}`;case oi.PeerDependencyMeta:return`${St(t.parentDescriptor)} >> ${t.selector} / ${t.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${t.type}`)}}}),[Le.SETTING]:Ls({pretty:(t,e)=>(t.get(e),Ku(t,On(t,e,Le.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:t=>t}),[Le.DURATION]:Ls({pretty:(t,e)=>{if(e>1e3*60){let r=Math.floor(e/1e3/60),i=Math.ceil((e-r*60*1e3)/1e3);return i===0?`${r}m`:`${r}m ${i}s`}else{let r=Math.floor(e/1e3),i=e-r*1e3;return i===0?`${r}s`:`${r}s ${i}ms`}},json:t=>t}),[Le.SIZE]:Ls({pretty:(t,e)=>{let r=["KB","MB","GB","TB"],i=r.length;for(;i>1&&e<1024**i;)i-=1;let n=1024**i,s=Math.floor(e*100/n)/100;return On(t,`${s} ${r[i-1]}`,Le.NUMBER)},json:t=>t}),[Le.PATH]:Ls({pretty:(t,e)=>On(t,M.fromPortablePath(e),Le.PATH),json:t=>M.fromPortablePath(t)})};function jl(t,e){return[e,t]}function Py(t,e,r){return t.get("enableColors")&&r&2&&(e=pp.default.bold(e)),e}function On(t,e,r){if(!t.get("enableColors"))return e;let i=tbe.get(r);if(i===null)return e;let n=typeof i=="undefined"?r:Tx.level>=3?i[0]:i[1],s=typeof n=="number"?Ox.ansi256(n):n.startsWith("#")?Ox.hex(n):Ox[n];if(typeof s!="function")throw new Error(`Invalid format type ${n}`);return s(e)}var rbe=!!process.env.KONSOLE_VERSION;function Ku(t,e,r){return t.get("enableHyperlinks")?rbe?`]8;;${r}\\${e}]8;;\\`:`]8;;${r}\x07${e}]8;;\x07`:e}function Ve(t,e,r){if(e===null)return On(t,"null",Le.NULL);if(Object.prototype.hasOwnProperty.call(ky,r))return ky[r].pretty(t,e);if(typeof e!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return On(t,e,r)}function Kx(t,e,r,{separator:i=", "}={}){return[...e].map(n=>Ve(t,n,r)).join(i)}function Uu(t,e){if(t===null)return null;if(Object.prototype.hasOwnProperty.call(ky,e))return Nv(e),ky[e].json(t);if(typeof t!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof t}`);return t}function xx(t){return{Check:On(t,"\u2713","green"),Cross:On(t,"\u2718","red"),Question:On(t,"?","cyan")}}function Yl(t,{label:e,value:[r,i]}){return`${Ve(t,e,Le.CODE)}: ${Ve(t,r,i)}`}var Ts;(function(n){n.Error="error",n.Warning="warning",n.Info="info",n.Discard="discard"})(Ts||(Ts={}));function Cp(t,{configuration:e}){let r=e.get("logFilters"),i=new Map,n=new Map,s=[];for(let g of r){let f=g.get("level");if(typeof f=="undefined")continue;let h=g.get("code");typeof h!="undefined"&&i.set(h,f);let p=g.get("text");typeof p!="undefined"&&n.set(p,f);let d=g.get("pattern");typeof d!="undefined"&&s.push([o3.default.matcher(d,{contains:!0}),f])}s.reverse();let o=(g,f,h)=>{if(g===null||g===z.UNNAMED)return h;let p=n.size>0||s.length>0?(0,a3.default)(f):f;if(n.size>0){let d=n.get(p);if(typeof d!="undefined")return d!=null?d:h}if(s.length>0){for(let[d,m]of s)if(d(p))return m!=null?m:h}if(i.size>0){let d=i.get(KE(g));if(typeof d!="undefined")return d!=null?d:h}return h},a=t.reportInfo,l=t.reportWarning,c=t.reportError,u=function(g,f,h,p){switch(o(f,h,p)){case Ts.Info:a.call(g,f,h);break;case Ts.Warning:l.call(g,f!=null?f:z.UNNAMED,h);break;case Ts.Error:c.call(g,f!=null?f:z.UNNAMED,h);break}};t.reportInfo=function(...g){return u(this,...g,Ts.Info)},t.reportWarning=function(...g){return u(this,...g,Ts.Warning)},t.reportError=function(...g){return u(this,...g,Ts.Error)}}var Zt={};it(Zt,{Method:()=>Jl,RequestError:()=>z8.RequestError,del:()=>pxe,get:()=>fxe,getNetworkSettings:()=>Z8,post:()=>iP,put:()=>hxe,request:()=>xp});var q8=ie(zy()),J8=ie(require("https")),W8=ie(require("http")),tP=ie(Nn()),rP=ie(G8()),Vy=ie(require("url"));var j8=ie(require("stream")),Y8=ie(require("string_decoder"));var nt=class extends Error{constructor(e,r,i){super(r);this.reportExtra=i;this.reportCode=e}};function Axe(t){return typeof t.reportCode!="undefined"}var Xi=class{constructor(){this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}static progressViaCounter(e){let r=0,i,n=new Promise(l=>{i=l}),s=l=>{let c=i;n=new Promise(u=>{i=u}),r=l,c()},o=(l=0)=>{s(r+1)},a=async function*(){for(;r{let o=i.write(s),a;do if(a=o.indexOf(` +`),a!==-1){let l=n+o.substr(0,a);o=o.substr(a+1),n="",e!==null?this.reportInfo(null,`${e} ${l}`):this.reportInfo(null,l)}while(a!==-1);n+=o}),r.on("end",()=>{let s=i.end();s!==""&&(e!==null?this.reportInfo(null,`${e} ${s}`):this.reportInfo(null,s))}),r}};var z8=ie(zy()),V8=new Map,_8=new Map,lxe=new W8.Agent({keepAlive:!0}),cxe=new J8.Agent({keepAlive:!0});function X8(t){let e=new Vy.URL(t),r={host:e.hostname,headers:{}};return e.port&&(r.port=Number(e.port)),{proxy:r}}async function uxe(t){return na(_8,t,()=>T.readFilePromise(t).then(e=>(_8.set(t,e),e)))}function gxe({statusCode:t,statusMessage:e},r){let i=Ve(r,t,Le.NUMBER),n=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${t}`;return Ku(r,`${i}${e?` (${e})`:""}`,n)}async function _y(t,{configuration:e,customErrorMessage:r}){var i,n;try{return await t}catch(s){if(s.name!=="HTTPError")throw s;let o=(n=r==null?void 0:r(s))!=null?n:(i=s.response.body)==null?void 0:i.error;o==null&&(s.message.startsWith("Response code")?o="The remote server failed to provide the requested resource":o=s.message),s instanceof q8.TimeoutError&&s.event==="socket"&&(o+=`(can be increased via ${Ve(e,"httpTimeout",Le.SETTING)})`);let a=new nt(z.NETWORK_ERROR,o,l=>{s.response&&l.reportError(z.NETWORK_ERROR,` ${Yl(e,{label:"Response Code",value:jl(Le.NO_HINT,gxe(s.response,e))})}`),s.request&&(l.reportError(z.NETWORK_ERROR,` ${Yl(e,{label:"Request Method",value:jl(Le.NO_HINT,s.request.options.method)})}`),l.reportError(z.NETWORK_ERROR,` ${Yl(e,{label:"Request URL",value:jl(Le.URL,s.request.requestUrl)})}`)),s.request.redirects.length>0&&l.reportError(z.NETWORK_ERROR,` ${Yl(e,{label:"Request Redirects",value:jl(Le.NO_HINT,Kx(e,s.request.redirects,Le.URL))})}`),s.request.retryCount===s.request.options.retry.limit&&l.reportError(z.NETWORK_ERROR,` ${Yl(e,{label:"Request Retry Count",value:jl(Le.NO_HINT,`${Ve(e,s.request.retryCount,Le.NUMBER)} (can be increased via ${Ve(e,"httpRetry",Le.SETTING)})`)})}`)});throw a.originalError=s,a}}function Z8(t,e){let r=[...e.configuration.get("networkSettings")].sort(([o],[a])=>a.length-o.length),i={enableNetwork:void 0,caFilePath:void 0,httpProxy:void 0,httpsProxy:void 0},n=Object.keys(i),s=typeof t=="string"?new Vy.URL(t):t;for(let[o,a]of r)if(tP.default.isMatch(s.hostname,o))for(let l of n){let c=a.get(l);c!==null&&typeof i[l]=="undefined"&&(i[l]=c)}for(let o of n)typeof i[o]=="undefined"&&(i[o]=e.configuration.get(o));return i}var Jl;(function(n){n.GET="GET",n.PUT="PUT",n.POST="POST",n.DELETE="DELETE"})(Jl||(Jl={}));async function xp(t,e,{configuration:r,headers:i,jsonRequest:n,jsonResponse:s,method:o=Jl.GET}){let a=typeof t=="string"?new Vy.URL(t):t,l=Z8(a,{configuration:r});if(l.enableNetwork===!1)throw new Error(`Request to '${a.href}' has been blocked because of your configuration settings`);if(a.protocol==="http:"&&!tP.default.isMatch(a.hostname,r.get("unsafeHttpWhitelist")))throw new Error(`Unsafe http requests must be explicitly whitelisted in your configuration (${a.hostname})`);let u={agent:{http:l.httpProxy?rP.default.httpOverHttp(X8(l.httpProxy)):lxe,https:l.httpsProxy?rP.default.httpsOverHttp(X8(l.httpsProxy)):cxe},headers:i,method:o};u.responseType=s?"json":"buffer",e!==null&&(Buffer.isBuffer(e)||!n&&typeof e=="string"?u.body=e:u.json=e);let g=r.get("httpTimeout"),f=r.get("httpRetry"),h=r.get("enableStrictSsl"),p=l.caFilePath,{default:d}=await Promise.resolve().then(()=>ie(zy())),m=p?await uxe(p):void 0,I=d.extend(P({timeout:{socket:g},retry:f,https:{rejectUnauthorized:h,certificateAuthority:m}},u));return r.getLimit("networkConcurrency")(()=>I(a))}async function fxe(t,n){var s=n,{configuration:e,jsonResponse:r}=s,i=qr(s,["configuration","jsonResponse"]);let o=na(V8,t,()=>_y(xp(t,null,P({configuration:e},i)),{configuration:e}).then(a=>(V8.set(t,a.body),a.body)));return Buffer.isBuffer(o)===!1&&(o=await o),r?JSON.parse(o.toString()):o}async function hxe(t,e,n){var s=n,{customErrorMessage:r}=s,i=qr(s,["customErrorMessage"]);return(await _y(xp(t,e,_(P({},i),{method:Jl.PUT})),i)).body}async function iP(t,e,n){var s=n,{customErrorMessage:r}=s,i=qr(s,["customErrorMessage"]);return(await _y(xp(t,e,_(P({},i),{method:Jl.POST})),i)).body}async function pxe(t,i){var n=i,{customErrorMessage:e}=n,r=qr(n,["customErrorMessage"]);return(await _y(xp(t,null,_(P({},r),{method:Jl.DELETE})),r)).body}var Kt={};it(Kt,{PackageManager:()=>tn,detectPackageManager:()=>a9,executePackageAccessibleBinary:()=>g9,executePackageScript:()=>Uw,executePackageShellcode:()=>rD,executeWorkspaceAccessibleBinary:()=>qFe,executeWorkspaceLifecycleScript:()=>u9,executeWorkspaceScript:()=>c9,getPackageAccessibleBinaries:()=>Hw,getWorkspaceAccessibleBinaries:()=>l9,hasPackageScript:()=>GFe,hasWorkspaceScript:()=>tD,makeScriptEnv:()=>Vp,maybeExecuteWorkspaceLifecycleScript:()=>YFe,prepareExternalProject:()=>HFe});var Fp={};it(Fp,{getLibzipPromise:()=>$i,getLibzipSync:()=>v4});var yA=["number","number"],nP;(function(D){D[D.ZIP_ER_OK=0]="ZIP_ER_OK",D[D.ZIP_ER_MULTIDISK=1]="ZIP_ER_MULTIDISK",D[D.ZIP_ER_RENAME=2]="ZIP_ER_RENAME",D[D.ZIP_ER_CLOSE=3]="ZIP_ER_CLOSE",D[D.ZIP_ER_SEEK=4]="ZIP_ER_SEEK",D[D.ZIP_ER_READ=5]="ZIP_ER_READ",D[D.ZIP_ER_WRITE=6]="ZIP_ER_WRITE",D[D.ZIP_ER_CRC=7]="ZIP_ER_CRC",D[D.ZIP_ER_ZIPCLOSED=8]="ZIP_ER_ZIPCLOSED",D[D.ZIP_ER_NOENT=9]="ZIP_ER_NOENT",D[D.ZIP_ER_EXISTS=10]="ZIP_ER_EXISTS",D[D.ZIP_ER_OPEN=11]="ZIP_ER_OPEN",D[D.ZIP_ER_TMPOPEN=12]="ZIP_ER_TMPOPEN",D[D.ZIP_ER_ZLIB=13]="ZIP_ER_ZLIB",D[D.ZIP_ER_MEMORY=14]="ZIP_ER_MEMORY",D[D.ZIP_ER_CHANGED=15]="ZIP_ER_CHANGED",D[D.ZIP_ER_COMPNOTSUPP=16]="ZIP_ER_COMPNOTSUPP",D[D.ZIP_ER_EOF=17]="ZIP_ER_EOF",D[D.ZIP_ER_INVAL=18]="ZIP_ER_INVAL",D[D.ZIP_ER_NOZIP=19]="ZIP_ER_NOZIP",D[D.ZIP_ER_INTERNAL=20]="ZIP_ER_INTERNAL",D[D.ZIP_ER_INCONS=21]="ZIP_ER_INCONS",D[D.ZIP_ER_REMOVE=22]="ZIP_ER_REMOVE",D[D.ZIP_ER_DELETED=23]="ZIP_ER_DELETED",D[D.ZIP_ER_ENCRNOTSUPP=24]="ZIP_ER_ENCRNOTSUPP",D[D.ZIP_ER_RDONLY=25]="ZIP_ER_RDONLY",D[D.ZIP_ER_NOPASSWD=26]="ZIP_ER_NOPASSWD",D[D.ZIP_ER_WRONGPASSWD=27]="ZIP_ER_WRONGPASSWD",D[D.ZIP_ER_OPNOTSUPP=28]="ZIP_ER_OPNOTSUPP",D[D.ZIP_ER_INUSE=29]="ZIP_ER_INUSE",D[D.ZIP_ER_TELL=30]="ZIP_ER_TELL",D[D.ZIP_ER_COMPRESSED_DATA=31]="ZIP_ER_COMPRESSED_DATA"})(nP||(nP={}));var $8=t=>({get HEAP8(){return t.HEAP8},get HEAPU8(){return t.HEAPU8},errors:nP,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_CREATE:1,ZIP_EXCL:2,ZIP_TRUNCATE:8,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:t._malloc(1),uint16S:t._malloc(2),uint32S:t._malloc(4),uint64S:t._malloc(8),malloc:t._malloc,free:t._free,getValue:t.getValue,open:t.cwrap("zip_open","number",["string","number","number"]),openFromSource:t.cwrap("zip_open_from_source","number",["number","number","number"]),close:t.cwrap("zip_close","number",["number"]),discard:t.cwrap("zip_discard",null,["number"]),getError:t.cwrap("zip_get_error","number",["number"]),getName:t.cwrap("zip_get_name","string",["number","number","number"]),getNumEntries:t.cwrap("zip_get_num_entries","number",["number","number"]),delete:t.cwrap("zip_delete","number",["number","number"]),stat:t.cwrap("zip_stat","number",["number","string","number","number"]),statIndex:t.cwrap("zip_stat_index","number",["number",...yA,"number","number"]),fopen:t.cwrap("zip_fopen","number",["number","string","number"]),fopenIndex:t.cwrap("zip_fopen_index","number",["number",...yA,"number"]),fread:t.cwrap("zip_fread","number",["number","number","number","number"]),fclose:t.cwrap("zip_fclose","number",["number"]),dir:{add:t.cwrap("zip_dir_add","number",["number","string"])},file:{add:t.cwrap("zip_file_add","number",["number","string","number","number"]),getError:t.cwrap("zip_file_get_error","number",["number"]),getExternalAttributes:t.cwrap("zip_file_get_external_attributes","number",["number",...yA,"number","number","number"]),setExternalAttributes:t.cwrap("zip_file_set_external_attributes","number",["number",...yA,"number","number","number"]),setMtime:t.cwrap("zip_file_set_mtime","number",["number",...yA,"number","number"]),setCompression:t.cwrap("zip_set_file_compression","number",["number",...yA,"number","number"])},ext:{countSymlinks:t.cwrap("zip_ext_count_symlinks","number",["number"])},error:{initWithCode:t.cwrap("zip_error_init_with_code",null,["number","number"]),strerror:t.cwrap("zip_error_strerror","string",["number"])},name:{locate:t.cwrap("zip_name_locate","number",["number","string","number"])},source:{fromUnattachedBuffer:t.cwrap("zip_source_buffer_create","number",["number","number","number","number"]),fromBuffer:t.cwrap("zip_source_buffer","number",["number","number",...yA,"number"]),free:t.cwrap("zip_source_free",null,["number"]),keep:t.cwrap("zip_source_keep",null,["number"]),open:t.cwrap("zip_source_open","number",["number"]),close:t.cwrap("zip_source_close","number",["number"]),seek:t.cwrap("zip_source_seek","number",["number",...yA,"number"]),tell:t.cwrap("zip_source_tell","number",["number"]),read:t.cwrap("zip_source_read","number",["number","number","number"]),error:t.cwrap("zip_source_error","number",["number"]),setMtime:t.cwrap("zip_source_set_mtime","number",["number","number"])},struct:{stat:t.cwrap("zipstruct_stat","number",[]),statS:t.cwrap("zipstruct_statS","number",[]),statName:t.cwrap("zipstruct_stat_name","string",["number"]),statIndex:t.cwrap("zipstruct_stat_index","number",["number"]),statSize:t.cwrap("zipstruct_stat_size","number",["number"]),statCompSize:t.cwrap("zipstruct_stat_comp_size","number",["number"]),statCompMethod:t.cwrap("zipstruct_stat_comp_method","number",["number"]),statMtime:t.cwrap("zipstruct_stat_mtime","number",["number"]),statCrc:t.cwrap("zipstruct_stat_crc","number",["number"]),error:t.cwrap("zipstruct_error","number",[]),errorS:t.cwrap("zipstruct_errorS","number",[]),errorCodeZip:t.cwrap("zipstruct_error_code_zip","number",["number"])}});var BP=null;function v4(){return BP===null&&(BP=$8(b4())),BP}async function $i(){return v4()}var jp={};it(jp,{ShellError:()=>as,execute:()=>Fw,globUtils:()=>bw});var Hp={};it(Hp,{parseResolution:()=>gw,parseShell:()=>Aw,parseSyml:()=>Ii,stringifyArgument:()=>SP,stringifyArgumentSegment:()=>xP,stringifyArithmeticExpression:()=>uw,stringifyCommand:()=>vP,stringifyCommandChain:()=>rg,stringifyCommandChainThen:()=>bP,stringifyCommandLine:()=>lw,stringifyCommandLineThen:()=>QP,stringifyEnvSegment:()=>cw,stringifyRedirectArgument:()=>Np,stringifyResolution:()=>fw,stringifyShell:()=>tg,stringifyShellLine:()=>tg,stringifySyml:()=>Qa,stringifyValueArgument:()=>ig});var k4=ie(x4());function Aw(t,e={isGlobPattern:()=>!1}){try{return(0,k4.parse)(t,e)}catch(r){throw r.location&&(r.message=r.message.replace(/(\.)?$/,` (line ${r.location.start.line}, column ${r.location.start.column})$1`)),r}}function tg(t,{endSemicolon:e=!1}={}){return t.map(({command:r,type:i},n)=>`${lw(r)}${i===";"?n!==t.length-1||e?";":"":" &"}`).join(" ")}function lw(t){return`${rg(t.chain)}${t.then?` ${QP(t.then)}`:""}`}function QP(t){return`${t.type} ${lw(t.line)}`}function rg(t){return`${vP(t)}${t.then?` ${bP(t.then)}`:""}`}function bP(t){return`${t.type} ${rg(t.chain)}`}function vP(t){switch(t.type){case"command":return`${t.envs.length>0?`${t.envs.map(e=>cw(e)).join(" ")} `:""}${t.args.map(e=>SP(e)).join(" ")}`;case"subshell":return`(${tg(t.subshell)})${t.args.length>0?` ${t.args.map(e=>Np(e)).join(" ")}`:""}`;case"group":return`{ ${tg(t.group,{endSemicolon:!0})} }${t.args.length>0?` ${t.args.map(e=>Np(e)).join(" ")}`:""}`;case"envs":return t.envs.map(e=>cw(e)).join(" ");default:throw new Error(`Unsupported command type: "${t.type}"`)}}function cw(t){return`${t.name}=${t.args[0]?ig(t.args[0]):""}`}function SP(t){switch(t.type){case"redirection":return Np(t);case"argument":return ig(t);default:throw new Error(`Unsupported argument type: "${t.type}"`)}}function Np(t){return`${t.subtype} ${t.args.map(e=>ig(e)).join(" ")}`}function ig(t){return t.segments.map(e=>xP(e)).join("")}function xP(t){let e=(i,n)=>n?`"${i}"`:i,r=i=>i===""?'""':i.match(/[(){}<>$|&; \t"']/)?`$'${i.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\f/g,"\\f").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t").replace(/\v/g,"\\v").replace(/\0/g,"\\0")}'`:i;switch(t.type){case"text":return r(t.text);case"glob":return t.pattern;case"shell":return e(`\${${tg(t.shell)}}`,t.quoted);case"variable":return e(typeof t.defaultValue=="undefined"?`\${${t.name}}`:t.defaultValue.length===0?`\${${t.name}:-}`:`\${${t.name}:-${t.defaultValue.map(i=>ig(i)).join(" ")}}`,t.quoted);case"arithmetic":return`$(( ${uw(t.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: "${t.type}"`)}}function uw(t){let e=n=>{switch(n){case"addition":return"+";case"subtraction":return"-";case"multiplication":return"*";case"division":return"/";default:throw new Error(`Can't extract operator from arithmetic expression of type "${n}"`)}},r=(n,s)=>s?`( ${n} )`:n,i=n=>r(uw(n),!["number","variable"].includes(n.type));switch(t.type){case"number":return String(t.value);case"variable":return t.name;default:return`${i(t.left)} ${e(t.type)} ${i(t.right)}`}}var R4=ie(D4());function gw(t){let e=t.match(/^\*{1,2}\/(.*)/);if(e)throw new Error(`The override for '${t}' includes a glob pattern. Glob patterns have been removed since their behaviours don't match what you'd expect. Set the override to '${e[1]}' instead.`);try{return(0,R4.parse)(t)}catch(r){throw r.location&&(r.message=r.message.replace(/(\.)?$/,` (line ${r.location.start.line}, column ${r.location.start.column})$1`)),r}}function fw(t){let e="";return t.from&&(e+=t.from.fullName,t.from.description&&(e+=`@${t.from.description}`),e+="/"),e+=t.descriptor.fullName,t.descriptor.description&&(e+=`@${t.descriptor.description}`),e}var Qw=ie(w5()),b5=ie(Q5()),$De=/^(?![-?:,\][{}#&*!|>'"%@` \t\r\n]).([ \t]*(?![,\][{}:# \t\r\n]).)*$/,v5=["__metadata","version","resolution","dependencies","peerDependencies","dependenciesMeta","peerDependenciesMeta","binaries"],HP=class{constructor(e){this.data=e}};function S5(t){return t.match($De)?t:JSON.stringify(t)}function x5(t){return typeof t=="undefined"?!0:typeof t=="object"&&t!==null?Object.keys(t).every(e=>x5(t[e])):!1}function GP(t,e,r){if(t===null)return`null +`;if(typeof t=="number"||typeof t=="boolean")return`${t.toString()} +`;if(typeof t=="string")return`${S5(t)} +`;if(Array.isArray(t)){if(t.length===0)return`[] +`;let i=" ".repeat(e);return` +${t.map(s=>`${i}- ${GP(s,e+1,!1)}`).join("")}`}if(typeof t=="object"&&t){let i,n;t instanceof HP?(i=t.data,n=!1):(i=t,n=!0);let s=" ".repeat(e),o=Object.keys(i);n&&o.sort((l,c)=>{let u=v5.indexOf(l),g=v5.indexOf(c);return u===-1&&g===-1?lc?1:0:u!==-1&&g===-1?-1:u===-1&&g!==-1?1:u-g});let a=o.filter(l=>!x5(i[l])).map((l,c)=>{let u=i[l],g=S5(l),f=GP(u,e+1,!0),h=c>0||r?s:"";return f.startsWith(` +`)?`${h}${g}:${f}`:`${h}${g}: ${f}`}).join(e===0?` +`:"")||` +`;return r?` +${a}`:`${a}`}throw new Error(`Unsupported value type (${t})`)}function Qa(t){try{let e=GP(t,0,!1);return e!==` +`?e:""}catch(e){throw e.location&&(e.message=e.message.replace(/(\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}Qa.PreserveOrdering=HP;function eRe(t){return t.endsWith(` +`)||(t+=` +`),(0,b5.parse)(t)}var tRe=/^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i;function rRe(t){if(tRe.test(t))return eRe(t);let e=(0,Qw.safeLoad)(t,{schema:Qw.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!="object")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error("Expected an indexed object, got an array instead. Does your file follow Yaml's rules?");return e}function Ii(t){return rRe(t)}var U5=ie(jb()),H5=ie(require("os")),Kn=ie(require("stream")),G5=ie(require("util"));var as=class extends Error{constructor(e){super(e);this.name="ShellError"}};var bw={};it(bw,{fastGlobOptions:()=>D5,isBraceExpansion:()=>R5,isGlobPattern:()=>iRe,match:()=>nRe,micromatchOptions:()=>Sw});var k5=ie(gy()),P5=ie(require("fs")),vw=ie(Nn()),Sw={strictBrackets:!0},D5={onlyDirectories:!1,onlyFiles:!1};function iRe(t){if(!vw.default.scan(t,Sw).isGlob)return!1;try{vw.default.parse(t,Sw)}catch{return!1}return!0}function nRe(t,{cwd:e,baseFs:r}){return(0,k5.default)(t,_(P({},D5),{cwd:M.fromPortablePath(e),fs:SE(P5.default,new ah(r))}))}function R5(t){return vw.default.scan(t,Sw).isBrace}var F5=ie(bb()),Bo=ie(require("stream")),N5=ie(require("string_decoder")),wn;(function(i){i[i.STDIN=0]="STDIN",i[i.STDOUT=1]="STDOUT",i[i.STDERR=2]="STDERR"})(wn||(wn={}));var sc=new Set;function jP(){}function YP(){for(let t of sc)t.kill()}function L5(t,e,r,i){return n=>{let s=n[0]instanceof Bo.Transform?"pipe":n[0],o=n[1]instanceof Bo.Transform?"pipe":n[1],a=n[2]instanceof Bo.Transform?"pipe":n[2],l=(0,F5.default)(t,e,_(P({},i),{stdio:[s,o,a]}));return sc.add(l),sc.size===1&&(process.on("SIGINT",jP),process.on("SIGTERM",YP)),n[0]instanceof Bo.Transform&&n[0].pipe(l.stdin),n[1]instanceof Bo.Transform&&l.stdout.pipe(n[1],{end:!1}),n[2]instanceof Bo.Transform&&l.stderr.pipe(n[2],{end:!1}),{stdin:l.stdin,promise:new Promise(c=>{l.on("error",u=>{switch(sc.delete(l),sc.size===0&&(process.off("SIGINT",jP),process.off("SIGTERM",YP)),u.code){case"ENOENT":n[2].write(`command not found: ${t} +`),c(127);break;case"EACCES":n[2].write(`permission denied: ${t} +`),c(128);break;default:n[2].write(`uncaught error: ${u.message} +`),c(1);break}}),l.on("exit",u=>{sc.delete(l),sc.size===0&&(process.off("SIGINT",jP),process.off("SIGTERM",YP)),c(u!==null?u:129)})})}}}function T5(t){return e=>{let r=e[0]==="pipe"?new Bo.PassThrough:e[0];return{stdin:r,promise:Promise.resolve().then(()=>t({stdin:r,stdout:e[1],stderr:e[2]}))}}}var Os=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},M5=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");return this.stream}},Gp=class{constructor(e,r){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=r}static start(e,{stdin:r,stdout:i,stderr:n}){let s=new Gp(null,e);return s.stdin=r,s.stdout=i,s.stderr=n,s}pipeTo(e,r=1){let i=new Gp(this,e),n=new M5;return i.pipe=n,i.stdout=this.stdout,i.stderr=this.stderr,(r&1)==1?this.stdout=n:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(r&2)==2?this.stderr=n:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),i}async exec(){let e=["ignore","ignore","ignore"];if(this.pipe)e[0]="pipe";else{if(this.stdin===null)throw new Error("Assertion failed: No input stream registered");e[0]=this.stdin.get()}let r;if(this.stdout===null)throw new Error("Assertion failed: No output stream registered");r=this.stdout,e[1]=r.get();let i;if(this.stderr===null)throw new Error("Assertion failed: No error stream registered");i=this.stderr,e[2]=i.get();let n=this.implementation(e);return this.pipe&&this.pipe.attach(n.stdin),await n.promise.then(s=>(r.close(),i.close(),s))}async run(){let e=[];for(let i=this;i;i=i.ancestor)e.push(i.exec());return(await Promise.all(e))[0]}};function xw(t,e){return Gp.start(t,e)}function O5(t,e=null){let r=new Bo.PassThrough,i=new N5.StringDecoder,n="";return r.on("data",s=>{let o=i.write(s),a;do if(a=o.indexOf(` +`),a!==-1){let l=n+o.substr(0,a);o=o.substr(a+1),n="",t(e!==null?`${e} ${l}`:l)}while(a!==-1);n+=o}),r.on("end",()=>{let s=i.end();s!==""&&t(e!==null?`${e} ${s}`:s)}),r}function K5(t,{prefix:e}){return{stdout:O5(r=>t.stdout.write(`${r} +`),t.stdout.isTTY?e:null),stderr:O5(r=>t.stderr.write(`${r} +`),t.stderr.isTTY?e:null)}}var sRe=(0,G5.promisify)(setTimeout);var Fi;(function(r){r[r.Readable=1]="Readable",r[r.Writable=2]="Writable"})(Fi||(Fi={}));function j5(t,e,r){let i=new Kn.PassThrough({autoDestroy:!0});switch(t){case wn.STDIN:(e&1)==1&&r.stdin.pipe(i,{end:!1}),(e&2)==2&&r.stdin instanceof Kn.Writable&&i.pipe(r.stdin,{end:!1});break;case wn.STDOUT:(e&1)==1&&r.stdout.pipe(i,{end:!1}),(e&2)==2&&i.pipe(r.stdout,{end:!1});break;case wn.STDERR:(e&1)==1&&r.stderr.pipe(i,{end:!1}),(e&2)==2&&i.pipe(r.stderr,{end:!1});break;default:throw new as(`Bad file descriptor: "${t}"`)}return i}function kw(t,e={}){let r=P(P({},t),e);return r.environment=P(P({},t.environment),e.environment),r.variables=P(P({},t.variables),e.variables),r}var oRe=new Map([["cd",async([t=(0,H5.homedir)(),...e],r,i)=>{let n=v.resolve(i.cwd,M.toPortablePath(t));if(!(await r.baseFs.statPromise(n).catch(o=>{throw o.code==="ENOENT"?new as(`cd: no such file or directory: ${t}`):o})).isDirectory())throw new as(`cd: not a directory: ${t}`);return i.cwd=n,0}],["pwd",async(t,e,r)=>(r.stdout.write(`${M.fromPortablePath(r.cwd)} +`),0)],[":",async(t,e,r)=>0],["true",async(t,e,r)=>0],["false",async(t,e,r)=>1],["exit",async([t,...e],r,i)=>i.exitCode=parseInt(t!=null?t:i.variables["?"],10)],["echo",async(t,e,r)=>(r.stdout.write(`${t.join(" ")} +`),0)],["sleep",async([t],e,r)=>{if(typeof t=="undefined")throw new as("sleep: missing operand");let i=Number(t);if(Number.isNaN(i))throw new as(`sleep: invalid time interval '${t}'`);return await sRe(1e3*i,0)}],["__ysh_run_procedure",async(t,e,r)=>{let i=r.procedures[t[0]];return await xw(i,{stdin:new Os(r.stdin),stdout:new Os(r.stdout),stderr:new Os(r.stderr)}).run()}],["__ysh_set_redirects",async(t,e,r)=>{let i=r.stdin,n=r.stdout,s=r.stderr,o=[],a=[],l=[],c=0;for(;t[c]!=="--";){let g=t[c++],{type:f,fd:h}=JSON.parse(g),p=B=>{switch(h){case null:case 0:o.push(B);break;default:throw new Error(`Unsupported file descriptor: "${h}"`)}},d=B=>{switch(h){case null:case 1:a.push(B);break;case 2:l.push(B);break;default:throw new Error(`Unsupported file descriptor: "${h}"`)}},m=Number(t[c++]),I=c+m;for(let B=c;Be.baseFs.createReadStream(v.resolve(r.cwd,M.toPortablePath(t[B]))));break;case"<<<":p(()=>{let b=new Kn.PassThrough;return process.nextTick(()=>{b.write(`${t[B]} +`),b.end()}),b});break;case"<&":p(()=>j5(Number(t[B]),1,r));break;case">":case">>":{let b=v.resolve(r.cwd,M.toPortablePath(t[B]));d(b==="/dev/null"?new Kn.Writable({autoDestroy:!0,emitClose:!0,write(R,H,L){setImmediate(L)}}):e.baseFs.createWriteStream(b,f===">>"?{flags:"a"}:void 0))}break;case">&":d(j5(Number(t[B]),2,r));break;default:throw new Error(`Assertion failed: Unsupported redirection type: "${f}"`)}}if(o.length>0){let g=new Kn.PassThrough;i=g;let f=h=>{if(h===o.length)g.end();else{let p=o[h]();p.pipe(g,{end:!1}),p.on("end",()=>{f(h+1)})}};f(0)}if(a.length>0){let g=new Kn.PassThrough;n=g;for(let f of a)g.pipe(f)}if(l.length>0){let g=new Kn.PassThrough;s=g;for(let f of l)g.pipe(f)}let u=await xw(Yp(t.slice(c+1),e,r),{stdin:new Os(i),stdout:new Os(n),stderr:new Os(s)}).run();return await Promise.all(a.map(g=>new Promise((f,h)=>{g.on("error",p=>{h(p)}),g.on("close",()=>{f()}),g.end()}))),await Promise.all(l.map(g=>new Promise((f,h)=>{g.on("error",p=>{h(p)}),g.on("close",()=>{f()}),g.end()}))),u}]]);async function aRe(t,e,r){let i=[],n=new Kn.PassThrough;return n.on("data",s=>i.push(s)),await Pw(t,e,kw(r,{stdout:n})),Buffer.concat(i).toString().replace(/[\r\n]+$/,"")}async function Y5(t,e,r){let i=t.map(async s=>{let o=await oc(s.args,e,r);return{name:s.name,value:o.join(" ")}});return(await Promise.all(i)).reduce((s,o)=>(s[o.name]=o.value,s),{})}function Dw(t){return t.match(/[^ \r\n\t]+/g)||[]}async function q5(t,e,r,i,n=i){switch(t.name){case"$":i(String(process.pid));break;case"#":i(String(e.args.length));break;case"@":if(t.quoted)for(let s of e.args)n(s);else for(let s of e.args){let o=Dw(s);for(let a=0;a=0&&st+e,subtraction:(t,e)=>t-e,multiplication:(t,e)=>t*e,division:(t,e)=>Math.trunc(t/e)};async function qp(t,e,r){if(t.type==="number"){if(Number.isInteger(t.value))return t.value;throw new Error(`Invalid number: "${t.value}", only integers are allowed`)}else if(t.type==="variable"){let i=[];await q5(_(P({},t),{quoted:!0}),e,r,s=>i.push(s));let n=Number(i.join(" "));return Number.isNaN(n)?qp({type:"variable",name:i.join(" ")},e,r):qp({type:"number",value:n},e,r)}else return ARe[t.type](await qp(t.left,e,r),await qp(t.right,e,r))}async function oc(t,e,r){let i=new Map,n=[],s=[],o=u=>{s.push(u)},a=()=>{s.length>0&&n.push(s.join("")),s=[]},l=u=>{o(u),a()},c=(u,g,f)=>{let h=JSON.stringify({type:u,fd:g}),p=i.get(h);typeof p=="undefined"&&i.set(h,p=[]),p.push(f)};for(let u of t){let g=!1;switch(u.type){case"redirection":{let f=await oc(u.args,e,r);for(let h of f)c(u.subtype,u.fd,h)}break;case"argument":for(let f of u.segments)switch(f.type){case"text":o(f.text);break;case"glob":o(f.pattern),g=!0;break;case"shell":{let h=await aRe(f.shell,e,r);if(f.quoted)o(h);else{let p=Dw(h);for(let d=0;d0){let u=[];for(let[g,f]of i.entries())u.splice(u.length,0,g,String(f.length),...f);n.splice(0,0,"__ysh_set_redirects",...u,"--")}return n}function Yp(t,e,r){e.builtins.has(t[0])||(t=["command",...t]);let i=M.fromPortablePath(r.cwd),n=r.environment;typeof n.PWD!="undefined"&&(n=_(P({},n),{PWD:i}));let[s,...o]=t;if(s==="command")return L5(o[0],o.slice(1),e,{cwd:i,env:n});let a=e.builtins.get(s);if(typeof a=="undefined")throw new Error(`Assertion failed: A builtin should exist for "${s}"`);return T5(async({stdin:l,stdout:c,stderr:u})=>{let{stdin:g,stdout:f,stderr:h}=r;r.stdin=l,r.stdout=c,r.stderr=u;try{return await a(o,e,r)}finally{r.stdin=g,r.stdout=f,r.stderr=h}})}function lRe(t,e,r){return i=>{let n=new Kn.PassThrough,s=Pw(t,e,kw(r,{stdin:n}));return{stdin:n,promise:s}}}function cRe(t,e,r){return i=>{let n=new Kn.PassThrough,s=Pw(t,e,r);return{stdin:n,promise:s}}}function J5(t,e,r,i){if(e.length===0)return t;{let n;do n=String(Math.random());while(Object.prototype.hasOwnProperty.call(i.procedures,n));return i.procedures=P({},i.procedures),i.procedures[n]=t,Yp([...e,"__ysh_run_procedure",n],r,i)}}async function W5(t,e,r){let i=t,n=null,s=null;for(;i;){let o=i.then?P({},r):r,a;switch(i.type){case"command":{let l=await oc(i.args,e,r),c=await Y5(i.envs,e,r);a=i.envs.length?Yp(l,e,kw(o,{environment:c})):Yp(l,e,o)}break;case"subshell":{let l=await oc(i.args,e,r),c=lRe(i.subshell,e,o);a=J5(c,l,e,o)}break;case"group":{let l=await oc(i.args,e,r),c=cRe(i.group,e,o);a=J5(c,l,e,o)}break;case"envs":{let l=await Y5(i.envs,e,r);o.environment=P(P({},o.environment),l),a=Yp(["true"],e,o)}break}if(typeof a=="undefined")throw new Error("Assertion failed: An action should have been generated");if(n===null)s=xw(a,{stdin:new Os(o.stdin),stdout:new Os(o.stdout),stderr:new Os(o.stderr)});else{if(s===null)throw new Error("Assertion failed: The execution pipeline should have been setup");switch(n){case"|":s=s.pipeTo(a,wn.STDOUT);break;case"|&":s=s.pipeTo(a,wn.STDOUT|wn.STDERR);break}}i.then?(n=i.then.type,i=i.then.chain):i=null}if(s===null)throw new Error("Assertion failed: The execution pipeline should have been setup");return await s.run()}async function uRe(t,e,r,{background:i=!1}={}){function n(s){let o=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],a=o[s%o.length];return U5.default.hex(a)}if(i){let s=r.nextBackgroundJobIndex++,o=n(s),a=`[${s}]`,l=o(a),{stdout:c,stderr:u}=K5(r,{prefix:l});return r.backgroundJobs.push(W5(t,e,kw(r,{stdout:c,stderr:u})).catch(g=>u.write(`${g.message} +`)).finally(()=>{r.stdout.isTTY&&r.stdout.write(`Job ${l}, '${o(rg(t))}' has ended +`)})),0}return await W5(t,e,r)}async function gRe(t,e,r,{background:i=!1}={}){let n,s=a=>{n=a,r.variables["?"]=String(a)},o=async a=>{try{return await uRe(a.chain,e,r,{background:i&&typeof a.then=="undefined"})}catch(l){if(!(l instanceof as))throw l;return r.stderr.write(`${l.message} +`),1}};for(s(await o(t));t.then;){if(r.exitCode!==null)return r.exitCode;switch(t.then.type){case"&&":n===0&&s(await o(t.then.line));break;case"||":n!==0&&s(await o(t.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: "${t.then.type}"`)}t=t.then.line}return n}async function Pw(t,e,r){let i=r.backgroundJobs;r.backgroundJobs=[];let n=0;for(let{command:s,type:o}of t){if(n=await gRe(s,e,r,{background:o==="&"}),r.exitCode!==null)return r.exitCode;r.variables["?"]=String(n)}return await Promise.all(r.backgroundJobs),r.backgroundJobs=i,n}function z5(t){switch(t.type){case"variable":return t.name==="@"||t.name==="#"||t.name==="*"||Number.isFinite(parseInt(t.name,10))||"defaultValue"in t&&!!t.defaultValue&&t.defaultValue.some(e=>Rw(e));case"arithmetic":return qP(t.arithmetic);case"shell":return JP(t.shell);default:return!1}}function Rw(t){switch(t.type){case"redirection":return t.args.some(e=>Rw(e));case"argument":return t.segments.some(e=>z5(e));default:throw new Error(`Assertion failed: Unsupported argument type: "${t.type}"`)}}function qP(t){switch(t.type){case"variable":return z5(t);case"number":return!1;default:return qP(t.left)||qP(t.right)}}function JP(t){return t.some(({command:e})=>{for(;e;){let r=e.chain;for(;r;){let i;switch(r.type){case"subshell":i=JP(r.subshell);break;case"command":i=r.envs.some(n=>n.args.some(s=>Rw(s)))||r.args.some(n=>Rw(n));break}if(i)return!0;if(!r.then)break;r=r.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function Fw(t,e=[],{baseFs:r=new Wt,builtins:i={},cwd:n=M.toPortablePath(process.cwd()),env:s=process.env,stdin:o=process.stdin,stdout:a=process.stdout,stderr:l=process.stderr,variables:c={},glob:u=bw}={}){let g={};for(let[p,d]of Object.entries(s))typeof d!="undefined"&&(g[p]=d);let f=new Map(oRe);for(let[p,d]of Object.entries(i))f.set(p,d);o===null&&(o=new Kn.PassThrough,o.end());let h=Aw(t,u);if(!JP(h)&&h.length>0&&e.length>0){let{command:p}=h[h.length-1];for(;p.then;)p=p.then.line;let d=p.chain;for(;d.then;)d=d.then.chain;d.type==="command"&&(d.args=d.args.concat(e.map(m=>({type:"argument",segments:[{type:"text",text:m}]}))))}return await Pw(h,{args:e,baseFs:r,builtins:f,initialStdin:o,initialStdout:a,initialStderr:l,glob:u},{cwd:n,environment:g,exitCode:null,procedures:{},stdin:o,stdout:a,stderr:l,variables:Object.assign({},c,{["?"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var s9=ie(ZP()),o9=ie(Wp()),cc=ie(require("stream"));var J6=ie(Or());var zp=class{supportsDescriptor(e,r){return!!(e.range.startsWith(zp.protocol)||r.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,r){return!!e.reference.startsWith(zp.protocol)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){return[i.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,r,i){return null}async resolve(e,r){let i=r.project.getWorkspaceByCwd(e.reference.slice(zp.protocol.length));return _(P({},e),{version:i.manifest.version||"0.0.0",languageName:"unknown",linkType:gt.SOFT,conditions:null,dependencies:new Map([...i.manifest.dependencies,...i.manifest.devDependencies]),peerDependencies:new Map([...i.manifest.peerDependencies]),dependenciesMeta:i.manifest.dependenciesMeta,peerDependenciesMeta:i.manifest.peerDependenciesMeta,bin:i.manifest.bin})}},Yr=zp;Yr.protocol="workspace:";var qt={};it(qt,{SemVer:()=>j6.SemVer,satisfiesWithPrereleases:()=>lc,validRange:()=>Us});var Lw=ie(Or()),j6=ie(Or()),Y6=new Map;function lc(t,e,r=!1){if(!t)return!1;let i=`${e}${r}`,n=Y6.get(i);if(typeof n=="undefined")try{n=new Lw.default.Range(e,{includePrerelease:!0,loose:r})}catch{return!1}finally{Y6.set(i,n||null)}else if(n===null)return!1;let s;try{s=new Lw.default.SemVer(t,n)}catch(o){return!1}return n.test(s)?!0:(s.prerelease&&(s.prerelease=[]),n.set.some(o=>{for(let a of o)a.semver.prerelease&&(a.semver.prerelease=[]);return o.every(a=>a.test(s))}))}var q6=new Map;function Us(t){if(t.indexOf(":")!==-1)return null;let e=q6.get(t);if(typeof e!="undefined")return e;try{e=new Lw.default.Range(t)}catch{e=null}return q6.set(t,e),e}var vA=class{constructor(){this.indent=" ";this.name=null;this.version=null;this.os=null;this.cpu=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:r=new Wt}={}){let i=v.join(e,"package.json");return await r.existsPromise(i)?await vA.fromFile(i,{baseFs:r}):null}static async find(e,{baseFs:r}={}){let i=await vA.tryFind(e,{baseFs:r});if(i===null)throw new Error("Manifest not found");return i}static async fromFile(e,{baseFs:r=new Wt}={}){let i=new vA;return await i.loadFile(e,{baseFs:r}),i}static fromText(e){let r=new vA;return r.loadFromText(e),r}static isManifestFieldCompatible(e,r){if(e===null)return!0;let i=!0,n=!1;for(let s of e)if(s[0]==="!"){if(n=!0,r===s.slice(1))return!1}else if(i=!1,s===r)return!0;return n&&i}loadFromText(e){let r;try{r=JSON.parse(z6(e)||"{}")}catch(i){throw i.message+=` (when parsing ${e})`,i}this.load(r),this.indent=W6(e)}async loadFile(e,{baseFs:r=new Wt}){let i=await r.readFilePromise(e,"utf8"),n;try{n=JSON.parse(z6(i)||"{}")}catch(s){throw s.message+=` (when parsing ${e})`,s}this.load(n),this.indent=W6(i)}load(e,{yamlCompatibilityMode:r=!1}={}){if(typeof e!="object"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let i=[];if(this.name=null,typeof e.name=="string")try{this.name=En(e.name)}catch(s){i.push(new Error("Parsing failed for the 'name' field"))}if(typeof e.version=="string"?this.version=e.version:this.version=null,Array.isArray(e.os)){let s=[];this.os=s;for(let o of e.os)typeof o!="string"?i.push(new Error("Parsing failed for the 'os' field")):s.push(o)}else this.os=null;if(Array.isArray(e.cpu)){let s=[];this.cpu=s;for(let o of e.cpu)typeof o!="string"?i.push(new Error("Parsing failed for the 'cpu' field")):s.push(o)}else this.cpu=null;if(typeof e.type=="string"?this.type=e.type:this.type=null,typeof e.packageManager=="string"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private=="boolean"?this.private=e.private:this.private=!1,typeof e.license=="string"?this.license=e.license:this.license=null,typeof e.languageName=="string"?this.languageName=e.languageName:this.languageName=null,typeof e.main=="string"?this.main=en(e.main):this.main=null,typeof e.module=="string"?this.module=en(e.module):this.module=null,e.browser!=null)if(typeof e.browser=="string")this.browser=en(e.browser);else{this.browser=new Map;for(let[s,o]of Object.entries(e.browser))this.browser.set(en(s),typeof o=="string"?en(o):o)}else this.browser=null;if(this.bin=new Map,typeof e.bin=="string")this.name!==null?this.bin.set(this.name.name,en(e.bin)):i.push(new Error("String bin field, but no attached package name"));else if(typeof e.bin=="object"&&e.bin!==null)for(let[s,o]of Object.entries(e.bin)){if(typeof o!="string"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}this.bin.set(s,en(o))}if(this.scripts=new Map,typeof e.scripts=="object"&&e.scripts!==null)for(let[s,o]of Object.entries(e.scripts)){if(typeof o!="string"){i.push(new Error(`Invalid script definition for '${s}'`));continue}this.scripts.set(s,o)}if(this.dependencies=new Map,typeof e.dependencies=="object"&&e.dependencies!==null)for(let[s,o]of Object.entries(e.dependencies)){if(typeof o!="string"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=En(s)}catch(c){i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=Yt(a,o);this.dependencies.set(l.identHash,l)}if(this.devDependencies=new Map,typeof e.devDependencies=="object"&&e.devDependencies!==null)for(let[s,o]of Object.entries(e.devDependencies)){if(typeof o!="string"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=En(s)}catch(c){i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=Yt(a,o);this.devDependencies.set(l.identHash,l)}if(this.peerDependencies=new Map,typeof e.peerDependencies=="object"&&e.peerDependencies!==null)for(let[s,o]of Object.entries(e.peerDependencies)){let a;try{a=En(s)}catch(c){i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}(typeof o!="string"||!o.startsWith(Yr.protocol)&&!Us(o))&&(i.push(new Error(`Invalid dependency range for '${s}'`)),o="*");let l=Yt(a,o);this.peerDependencies.set(l.identHash,l)}typeof e.workspaces=="object"&&e.workspaces.nohoist&&i.push(new Error("'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead"));let n=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces=="object"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let s of n){if(typeof s!="string"){i.push(new Error(`Invalid workspace definition for '${s}'`));continue}this.workspaceDefinitions.push({pattern:s})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta=="object"&&e.dependenciesMeta!==null)for(let[s,o]of Object.entries(e.dependenciesMeta)){if(typeof o!="object"||o===null){i.push(new Error(`Invalid meta field for '${s}`));continue}let a=pA(s),l=this.ensureDependencyMeta(a),c=Tw(o.built,{yamlCompatibilityMode:r});if(c===null){i.push(new Error(`Invalid built meta field for '${s}'`));continue}let u=Tw(o.optional,{yamlCompatibilityMode:r});if(u===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}let g=Tw(o.unplugged,{yamlCompatibilityMode:r});if(g===null){i.push(new Error(`Invalid unplugged meta field for '${s}'`));continue}Object.assign(l,{built:c,optional:u,unplugged:g})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta=="object"&&e.peerDependenciesMeta!==null)for(let[s,o]of Object.entries(e.peerDependenciesMeta)){if(typeof o!="object"||o===null){i.push(new Error(`Invalid meta field for '${s}'`));continue}let a=pA(s),l=this.ensurePeerDependencyMeta(a),c=Tw(o.optional,{yamlCompatibilityMode:r});if(c===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}Object.assign(l,{optional:c})}if(this.resolutions=[],typeof e.resolutions=="object"&&e.resolutions!==null)for(let[s,o]of Object.entries(e.resolutions)){if(typeof o!="string"){i.push(new Error(`Invalid resolution entry for '${s}'`));continue}try{this.resolutions.push({pattern:gw(s),reference:o})}catch(a){i.push(a);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let s of e.files){if(typeof s!="string"){i.push(new Error(`Invalid files entry for '${s}'`));continue}this.files.add(s)}}else this.files=null;if(typeof e.publishConfig=="object"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access=="string"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main=="string"&&(this.publishConfig.main=en(e.publishConfig.main)),typeof e.publishConfig.module=="string"&&(this.publishConfig.module=en(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser=="string")this.publishConfig.browser=en(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[s,o]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set(en(s),typeof o=="string"?en(o):o)}if(typeof e.publishConfig.registry=="string"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin=="string")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,en(e.publishConfig.bin)]]):i.push(new Error("String bin field, but no attached package name"));else if(typeof e.publishConfig.bin=="object"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[s,o]of Object.entries(e.publishConfig.bin)){if(typeof o!="string"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}this.publishConfig.bin.set(s,en(o))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let s of e.publishConfig.executableFiles){if(typeof s!="string"){i.push(new Error("Invalid executable file definition"));continue}this.publishConfig.executableFiles.add(en(s))}}}else this.publishConfig=null;if(typeof e.installConfig=="object"&&e.installConfig!==null){this.installConfig={};for(let s of Object.keys(e.installConfig))s==="hoistingLimits"?typeof e.installConfig.hoistingLimits=="string"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:i.push(new Error("Invalid hoisting limits definition")):s=="selfReferences"?typeof e.installConfig.selfReferences=="boolean"?this.installConfig.selfReferences=e.installConfig.selfReferences:i.push(new Error("Invalid selfReferences definition, must be a boolean value")):i.push(new Error(`Unrecognized installConfig key: ${s}`))}else this.installConfig=null;if(typeof e.optionalDependencies=="object"&&e.optionalDependencies!==null)for(let[s,o]of Object.entries(e.optionalDependencies)){if(typeof o!="string"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=En(s)}catch(g){i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=Yt(a,o);this.dependencies.set(l.identHash,l);let c=Yt(a,"unknown"),u=this.ensureDependencyMeta(c);Object.assign(u,{optional:!0})}typeof e.preferUnplugged=="boolean"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=i}getForScope(e){switch(e){case"dependencies":return this.dependencies;case"devDependencies":return this.devDependencies;case"peerDependencies":return this.peerDependencies;default:throw new Error(`Unsupported value ("${e}")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(V6("os",this.os)),this.cpu&&this.cpu.length>0&&e.push(V6("cpu",this.cpu)),e.length>0?e.join(" & "):null}isCompatibleWithOS(e){return vA.isManifestFieldCompatible(this.os,e)}isCompatibleWithCPU(e){return vA.isManifestFieldCompatible(this.cpu,e)}ensureDependencyMeta(e){if(e.range!=="unknown"&&!J6.default.valid(e.range))throw new Error(`Invalid meta field range for '${In(e)}'`);let r=St(e),i=e.range!=="unknown"?e.range:null,n=this.dependenciesMeta.get(r);n||this.dependenciesMeta.set(r,n=new Map);let s=n.get(i);return s||n.set(i,s={}),s}ensurePeerDependencyMeta(e){if(e.range!=="unknown")throw new Error(`Invalid meta field range for '${In(e)}'`);let r=St(e),i=this.peerDependenciesMeta.get(r);return i||this.peerDependenciesMeta.set(r,i={}),i}setRawField(e,r,{after:i=[]}={}){let n=new Set(i.filter(s=>Object.prototype.hasOwnProperty.call(this.raw,s)));if(n.size===0||Object.prototype.hasOwnProperty.call(this.raw,e))this.raw[e]=r;else{let s=this.raw,o=this.raw={},a=!1;for(let l of Object.keys(s))o[l]=s[l],a||(n.delete(l),n.size===0&&(o[e]=r,a=!0))}}exportTo(e,{compatibilityMode:r=!0}={}){var s;if(Object.assign(e,this.raw),this.name!==null?e.name=St(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let o=this.browser;typeof o=="string"?e.browser=o:o instanceof Map&&(e.browser=Object.assign({},...Array.from(o.keys()).sort().map(a=>({[a]:o.get(a)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(o=>({[o]:this.bin.get(o)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces=_(P({},this.raw.workspaces),{packages:this.workspaceDefinitions.map(({pattern:o})=>o)}):e.workspaces=this.workspaceDefinitions.map(({pattern:o})=>o):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let i=[],n=[];for(let o of this.dependencies.values()){let a=this.dependenciesMeta.get(St(o)),l=!1;if(r&&a){let c=a.get(null);c&&c.optional&&(l=!0)}l?n.push(o):i.push(o)}i.length>0?e.dependencies=Object.assign({},...Ou(i).map(o=>({[St(o)]:o.range}))):delete e.dependencies,n.length>0?e.optionalDependencies=Object.assign({},...Ou(n).map(o=>({[St(o)]:o.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...Ou(this.devDependencies.values()).map(o=>({[St(o)]:o.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...Ou(this.peerDependencies.values()).map(o=>({[St(o)]:o.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[o,a]of gn(this.dependenciesMeta.entries(),([l,c])=>l))for(let[l,c]of gn(a.entries(),([u,g])=>u!==null?`0${u}`:"1")){let u=l!==null?In(Yt(En(o),l)):o,g=P({},c);r&&l===null&&delete g.optional,Object.keys(g).length!==0&&(e.dependenciesMeta[u]=g)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...gn(this.peerDependenciesMeta.entries(),([o,a])=>o).map(([o,a])=>({[o]:a}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:o,reference:a})=>({[fw(o)]:a}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){(s=e.scripts)!=null||(e.scripts={});for(let o of Object.keys(e.scripts))this.scripts.has(o)||delete e.scripts[o];for(let[o,a]of this.scripts.entries())e.scripts[o]=a}else delete e.scripts;return e}},Ze=vA;Ze.fileName="package.json",Ze.allDependencies=["dependencies","devDependencies","peerDependencies"],Ze.hardDependencies=["dependencies","devDependencies"];function W6(t){let e=t.match(/^[ \t]+/m);return e?e[0]:" "}function z6(t){return t.charCodeAt(0)===65279?t.slice(1):t}function en(t){return t.replace(/\\/g,"/")}function Tw(t,{yamlCompatibilityMode:e}){return e?Kv(t):typeof t=="undefined"||typeof t=="boolean"?t:null}function _6(t,e){let r=e.search(/[^!]/);if(r===-1)return"invalid";let i=r%2==0?"":"!",n=e.slice(r);return`${i}${t}=${n}`}function V6(t,e){return e.length===1?_6(t,e[0]):`(${e.map(r=>_6(t,r)).join(" | ")})`}var e9=ie($6()),Ow=ie(ml());var t9=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],r9=80,NFe=new Set([z.FETCH_NOT_CACHED,z.UNUSED_CACHE_ENTRY]),LFe=5,SA=Ow.default.GITHUB_ACTIONS?{start:t=>`::group::${t} +`,end:t=>`::endgroup:: +`}:Ow.default.TRAVIS?{start:t=>`travis_fold:start:${t} +`,end:t=>`travis_fold:end:${t} +`}:Ow.default.GITLAB?{start:t=>`section_start:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}[collapsed=true]\r${t} +`,end:t=>`section_end:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}\r`}:null,i9=new Date,TFe=["iTerm.app","Apple_Terminal"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,MFe=t=>t,Kw=MFe({patrick:{date:[17,3],chars:["\u{1F340}","\u{1F331}"],size:40},simba:{date:[19,7],chars:["\u{1F981}","\u{1F334}"],size:40},jack:{date:[31,10],chars:["\u{1F383}","\u{1F987}"],size:40},hogsfather:{date:[31,12],chars:["\u{1F389}","\u{1F384}"],size:40},default:{chars:["=","-"],size:80}}),OFe=TFe&&Object.keys(Kw).find(t=>{let e=Kw[t];return!(e.date&&(e.date[0]!==i9.getDate()||e.date[1]!==i9.getMonth()+1))})||"default";function n9(t,{configuration:e,json:r}){if(!e.get("enableMessageNames"))return"";let n=KE(t===null?0:t);return!r&&t===null?Ve(e,n,"grey"):n}function eD(t,{configuration:e,json:r}){let i=n9(t,{configuration:e,json:r});if(!i||t===null||t===z.UNNAMED)return i;let n=z[t],s=`https://yarnpkg.com/advanced/error-codes#${i}---${n}`.toLowerCase();return Ku(e,i,s)}var Fe=class extends Xi{constructor({configuration:e,stdout:r,json:i=!1,includeFooter:n=!0,includeLogs:s=!i,includeInfos:o=s,includeWarnings:a=s,forgettableBufferSize:l=LFe,forgettableNames:c=new Set}){super();this.uncommitted=new Set;this.cacheHitCount=0;this.cacheMissCount=0;this.lastCacheMiss=null;this.warningCount=0;this.errorCount=0;this.startTime=Date.now();this.indent=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.forgettableLines=[];Cp(this,{configuration:e}),this.configuration=e,this.forgettableBufferSize=l,this.forgettableNames=new Set([...c,...NFe]),this.includeFooter=n,this.includeInfos=o,this.includeWarnings=a,this.json=i,this.stdout=r;let u=this.configuration.get("progressBarStyle")||OFe;if(!Object.prototype.hasOwnProperty.call(Kw,u))throw new Error("Assertion failed: Invalid progress bar style");this.progressStyle=Kw[u];let g="\u27A4 YN0000: \u250C ".length,f=Math.max(0,Math.min(process.stdout.columns-g,80));this.progressMaxScaledSize=Math.floor(this.progressStyle.size*f/80)}static async start(e,r){let i=new this(e),n=process.emitWarning;process.emitWarning=(s,o)=>{if(typeof s!="string"){let l=s;s=l.message,o=o!=null?o:l.name}let a=typeof o!="undefined"?`${o}: ${s}`:s;i.reportWarning(z.UNNAMED,a)};try{await r(i)}catch(s){i.reportExceptionOnce(s)}finally{await i.finalize(),process.emitWarning=n}return i}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(e){this.cacheHitCount+=1}reportCacheMiss(e,r){this.lastCacheMiss=e,this.cacheMissCount+=1,typeof r!="undefined"&&!this.configuration.get("preferAggregateCacheInfo")&&this.reportInfo(z.FETCH_NOT_CACHED,r)}startTimerSync(e,r,i){let n=typeof r=="function"?{}:r,s=typeof r=="function"?r:i,o={committed:!1,action:()=>{this.reportInfo(null,`\u250C ${e}`),this.indent+=1,SA!==null&&!this.json&&this.includeInfos&&this.stdout.write(SA.start(e))}};n.skipIfEmpty?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(this.indent-=1,SA!==null&&!this.json&&this.includeInfos&&this.stdout.write(SA.end(e)),this.configuration.get("enableTimers")&&l-a>200?this.reportInfo(null,`\u2514 Completed in ${Ve(this.configuration,l-a,Le.DURATION)}`):this.reportInfo(null,"\u2514 Completed"))}}async startTimerPromise(e,r,i){let n=typeof r=="function"?{}:r,s=typeof r=="function"?r:i,o={committed:!1,action:()=>{this.reportInfo(null,`\u250C ${e}`),this.indent+=1,SA!==null&&!this.json&&this.includeInfos&&this.stdout.write(SA.start(e))}};n.skipIfEmpty?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return await s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(this.indent-=1,SA!==null&&!this.json&&this.includeInfos&&this.stdout.write(SA.end(e)),this.configuration.get("enableTimers")&&l-a>200?this.reportInfo(null,`\u2514 Completed in ${Ve(this.configuration,l-a,Le.DURATION)}`):this.reportInfo(null,"\u2514 Completed"))}}async startCacheReport(e){let r=this.configuration.get("preferAggregateCacheInfo")?{cacheHitCount:this.cacheHitCount,cacheMissCount:this.cacheMissCount}:null;try{return await e()}catch(i){throw this.reportExceptionOnce(i),i}finally{r!==null&&this.reportCacheChanges(r)}}reportSeparator(){this.indent===0?this.writeLineWithForgettableReset(""):this.reportInfo(null,"")}reportInfo(e,r){if(!this.includeInfos)return;this.commit();let i=this.formatNameWithHyperlink(e),n=i?`${i}: `:"",s=`${Ve(this.configuration,"\u27A4","blueBright")} ${n}${this.formatIndent()}${r}`;if(this.json)this.reportJson({type:"info",name:e,displayName:this.formatName(e),indent:this.formatIndent(),data:r});else if(this.forgettableNames.has(e))if(this.forgettableLines.push(s),this.forgettableLines.length>this.forgettableBufferSize){for(;this.forgettableLines.length>this.forgettableBufferSize;)this.forgettableLines.shift();this.writeLines(this.forgettableLines,{truncate:!0})}else this.writeLine(s,{truncate:!0});else this.writeLineWithForgettableReset(s)}reportWarning(e,r){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let i=this.formatNameWithHyperlink(e),n=i?`${i}: `:"";this.json?this.reportJson({type:"warning",name:e,displayName:this.formatName(e),indent:this.formatIndent(),data:r}):this.writeLineWithForgettableReset(`${Ve(this.configuration,"\u27A4","yellowBright")} ${n}${this.formatIndent()}${r}`)}reportError(e,r){this.errorCount+=1,this.commit();let i=this.formatNameWithHyperlink(e),n=i?`${i}: `:"";this.json?this.reportJson({type:"error",name:e,displayName:this.formatName(e),indent:this.formatIndent(),data:r}):this.writeLineWithForgettableReset(`${Ve(this.configuration,"\u27A4","redBright")} ${n}${this.formatIndent()}${r}`,{truncate:!1})}reportProgress(e){let r=!1,i=Promise.resolve().then(async()=>{let s={progress:0,title:void 0};this.progress.set(e,{definition:s,lastScaledSize:-1}),this.refreshProgress(-1);for await(let{progress:o,title:a}of e)r||s.progress===o&&s.title===a||(s.progress=o,s.title=a,this.refreshProgress());n()}),n=()=>{r||(r=!0,this.progress.delete(e),this.refreshProgress(1))};return _(P({},i),{stop:n})}reportJson(e){this.json&&this.writeLineWithForgettableReset(`${JSON.stringify(e)}`)}async finalize(){if(!this.includeFooter)return;let e="";this.errorCount>0?e="Failed with errors":this.warningCount>0?e="Done with warnings":e="Done";let r=Ve(this.configuration,Date.now()-this.startTime,Le.DURATION),i=this.configuration.get("enableTimers")?`${e} in ${r}`:e;this.errorCount>0?this.reportError(z.UNNAMED,i):this.warningCount>0?this.reportWarning(z.UNNAMED,i):this.reportInfo(z.UNNAMED,i)}writeLine(e,{truncate:r}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(e,{truncate:r})} +`),this.writeProgress()}writeLineWithForgettableReset(e,{truncate:r}={}){this.forgettableLines=[],this.writeLine(e,{truncate:r})}writeLines(e,{truncate:r}={}){this.clearProgress({delta:e.length});for(let i of e)this.stdout.write(`${this.truncate(i,{truncate:r})} +`);this.writeProgress()}reportCacheChanges({cacheHitCount:e,cacheMissCount:r}){let i=this.cacheHitCount-e,n=this.cacheMissCount-r;if(i===0&&n===0)return;let s="";this.cacheHitCount>1?s+=`${this.cacheHitCount} packages were already cached`:this.cacheHitCount===1?s+=" - one package was already cached":s+="No packages were cached",this.cacheHitCount>0?this.cacheMissCount>1?s+=`, ${this.cacheMissCount} had to be fetched`:this.cacheMissCount===1&&(s+=`, one had to be fetched (${lt(this.configuration,this.lastCacheMiss)})`):this.cacheMissCount>1?s+=` - ${this.cacheMissCount} packages had to be fetched`:this.cacheMissCount===1&&(s+=` - one package had to be fetched (${lt(this.configuration,this.lastCacheMiss)})`),this.reportInfo(z.FETCH_NOT_CACHED,s)}commit(){let e=this.uncommitted;this.uncommitted=new Set;for(let r of e)r.committed=!0,r.action()}clearProgress({delta:e=0,clear:r=!1}){!this.configuration.get("enableProgressBars")||this.json||this.progress.size+e>0&&(this.stdout.write(`[${this.progress.size+e}A`),(e>0||r)&&this.stdout.write(""))}writeProgress(){if(!this.configuration.get("enableProgressBars")||this.json||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let e=Date.now();e-this.progressTime>r9&&(this.progressFrame=(this.progressFrame+1)%t9.length,this.progressTime=e);let r=t9[this.progressFrame];for(let i of this.progress.values()){let n=this.progressStyle.chars[0].repeat(i.lastScaledSize),s=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-i.lastScaledSize),o=this.formatName(null),a=o?`${o}: `:"";this.stdout.write(`${Ve(this.configuration,"\u27A4","blueBright")} ${a}${r} ${n}${s} +`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress()},r9)}refreshProgress(e=0){let r=!1;if(this.progress.size===0)r=!0;else for(let i of this.progress.values()){let n=Math.trunc(this.progressMaxScaledSize*i.definition.progress),s=i.lastScaledSize;if(i.lastScaledSize=n,n!==s){r=!0;break}}r&&(this.clearProgress({delta:e}),this.writeProgress())}truncate(e,{truncate:r}={}){return this.configuration.get("enableProgressBars")||(r=!1),typeof r=="undefined"&&(r=this.configuration.get("preferTruncatedLines")),r&&(e=(0,e9.default)(e,0,process.stdout.columns-1)),e}formatName(e){return n9(e,{configuration:this.configuration,json:this.json})}formatNameWithHyperlink(e){return eD(e,{configuration:this.configuration,json:this.json})}formatIndent(){return"\u2502 ".repeat(this.indent)}};var Zr="3.1.1";var tn;(function(n){n.Yarn1="Yarn Classic",n.Yarn2="Yarn",n.Npm="npm",n.Pnpm="pnpm"})(tn||(tn={}));async function ba(t,e,r,i=[]){if(process.platform==="win32"){let n=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @"${r}" ${i.map(s=>`"${s.replace('"','""')}"`).join(" ")} %*`;await T.writeFilePromise(v.format({dir:t,name:e,ext:".cmd"}),n)}await T.writeFilePromise(v.join(t,e),`#!/bin/sh +exec "${r}" ${i.map(n=>`'${n.replace(/'/g,`'"'"'`)}'`).join(" ")} "$@" +`,{mode:493})}async function a9(t){let e=await Ze.tryFind(t);if(e==null?void 0:e.packageManager){let i=Qy(e.packageManager);if(i==null?void 0:i.name){let n=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[s]=i.reference.split(".");switch(i.name){case"yarn":return{packageManager:Number(s)===1?tn.Yarn1:tn.Yarn2,reason:n};case"npm":return{packageManager:tn.Npm,reason:n};case"pnpm":return{packageManager:tn.Pnpm,reason:n}}}}let r;try{r=await T.readFilePromise(v.join(t,wt.lockfile),"utf8")}catch{}return r!==void 0?r.match(/^__metadata:$/m)?{packageManager:tn.Yarn2,reason:'"__metadata" key found in yarn.lock'}:{packageManager:tn.Yarn1,reason:'"__metadata" key not found in yarn.lock, must be a Yarn classic lockfile'}:T.existsSync(v.join(t,"package-lock.json"))?{packageManager:tn.Npm,reason:`found npm's "package-lock.json" lockfile`}:T.existsSync(v.join(t,"pnpm-lock.yaml"))?{packageManager:tn.Pnpm,reason:`found pnpm's "pnpm-lock.yaml" lockfile`}:null}async function Vp({project:t,locator:e,binFolder:r,lifecycleScript:i}){var l,c;let n={};for(let[u,g]of Object.entries(process.env))typeof g!="undefined"&&(n[u.toLowerCase()!=="path"?u:"PATH"]=g);let s=M.fromPortablePath(r);n.BERRY_BIN_FOLDER=M.fromPortablePath(s);let o=process.env.COREPACK_ROOT?M.join(process.env.COREPACK_ROOT,"dist/yarn.js"):process.argv[1];if(await Promise.all([ba(r,"node",process.execPath),...Zr!==null?[ba(r,"run",process.execPath,[o,"run"]),ba(r,"yarn",process.execPath,[o]),ba(r,"yarnpkg",process.execPath,[o]),ba(r,"node-gyp",process.execPath,[o,"run","--top-level","node-gyp"])]:[]]),t&&(n.INIT_CWD=M.fromPortablePath(t.configuration.startingCwd),n.PROJECT_CWD=M.fromPortablePath(t.cwd)),n.PATH=n.PATH?`${s}${M.delimiter}${n.PATH}`:`${s}`,n.npm_execpath=`${s}${M.sep}yarn`,n.npm_node_execpath=`${s}${M.sep}node`,e){if(!t)throw new Error("Assertion failed: Missing project");let u=t.tryWorkspaceByLocator(e),g=u?(l=u.manifest.version)!=null?l:"":(c=t.storedPackages.get(e.locatorHash).version)!=null?c:"";n.npm_package_name=St(e),n.npm_package_version=g}let a=Zr!==null?`yarn/${Zr}`:`yarn/${mu("@yarnpkg/core").version}-core`;return n.npm_config_user_agent=`${a} npm/? node/${process.versions.node} ${process.platform} ${process.arch}`,i&&(n.npm_lifecycle_event=i),t&&await t.configuration.triggerHook(u=>u.setupScriptEnvironment,t,n,async(u,g,f)=>await ba(r,kr(u),g,f)),n}var KFe=2,UFe=(0,o9.default)(KFe);async function HFe(t,e,{configuration:r,report:i,workspace:n=null,locator:s=null}){await UFe(async()=>{await T.mktempPromise(async o=>{let a=v.join(o,"pack.log"),l=null,{stdout:c,stderr:u}=r.getSubprocessStreams(a,{prefix:M.fromPortablePath(t),report:i}),g=s&&Io(s)?lp(s):s,f=g?is(g):"an external project";c.write(`Packing ${f} from sources +`);let h=await a9(t),p;h!==null?(c.write(`Using ${h.packageManager} for bootstrap. Reason: ${h.reason} + +`),p=h.packageManager):(c.write(`No package manager configuration detected; defaulting to Yarn + +`),p=tn.Yarn2),await T.mktempPromise(async d=>{let m=await Vp({binFolder:d}),B=new Map([[tn.Yarn1,async()=>{let R=n!==null?["workspace",n]:[],H=await to("yarn",["set","version","classic","--only-if-needed"],{cwd:t,env:m,stdin:l,stdout:c,stderr:u,end:Pn.ErrorCode});if(H.code!==0)return H.code;await T.appendFilePromise(v.join(t,".npmignore"),`/.yarn +`),c.write(` +`);let L=await to("yarn",["install"],{cwd:t,env:m,stdin:l,stdout:c,stderr:u,end:Pn.ErrorCode});if(L.code!==0)return L.code;c.write(` +`);let K=await to("yarn",[...R,"pack","--filename",M.fromPortablePath(e)],{cwd:t,env:m,stdin:l,stdout:c,stderr:u});return K.code!==0?K.code:0}],[tn.Yarn2,async()=>{let R=n!==null?["workspace",n]:[];m.YARN_ENABLE_INLINE_BUILDS="1";let H=v.join(t,wt.lockfile);await T.existsPromise(H)||await T.writeFilePromise(H,"");let L=await to("yarn",[...R,"pack","--install-if-needed","--filename",M.fromPortablePath(e)],{cwd:t,env:m,stdin:l,stdout:c,stderr:u});return L.code!==0?L.code:0}],[tn.Npm,async()=>{if(n!==null){let A=new cc.PassThrough,V=Cu(A);A.pipe(c,{end:!1});let W=await to("npm",["--version"],{cwd:t,env:m,stdin:l,stdout:A,stderr:u,end:Pn.Never});if(A.end(),W.code!==0)return c.end(),u.end(),W.code;let X=(await V).toString().trim();if(!lc(X,">=7.x")){let F=Eo(null,"npm"),D=Yt(F,X),he=Yt(F,">=7.x");throw new Error(`Workspaces aren't supported by ${Xt(r,D)}; please upgrade to ${Xt(r,he)} (npm has been detected as the primary package manager for ${Ve(r,t,Le.PATH)})`)}}let R=n!==null?["--workspace",n]:[];delete m.npm_config_user_agent;let H=await to("npm",["install"],{cwd:t,env:m,stdin:l,stdout:c,stderr:u,end:Pn.ErrorCode});if(H.code!==0)return H.code;let L=new cc.PassThrough,K=Cu(L);L.pipe(c);let J=await to("npm",["pack","--silent",...R],{cwd:t,env:m,stdin:l,stdout:L,stderr:u});if(J.code!==0)return J.code;let ne=(await K).toString().trim().replace(/^.*\n/s,""),q=v.resolve(t,M.toPortablePath(ne));return await T.renamePromise(q,e),0}]]).get(p);if(typeof B=="undefined")throw new Error("Assertion failed: Unsupported workflow");let b=await B();if(!(b===0||typeof b=="undefined"))throw T.detachTemp(o),new nt(z.PACKAGE_PREPARATION_FAILED,`Packing the package failed (exit code ${b}, logs can be found here: ${Ve(r,a,Le.PATH)})`)})})})}async function GFe(t,e,{project:r}){let i=r.tryWorkspaceByLocator(t);if(i!==null)return tD(i,e);let n=r.storedPackages.get(t.locatorHash);if(!n)throw new Error(`Package for ${lt(r.configuration,t)} not found in the project`);return await Jn.openPromise(async s=>{let o=r.configuration,a=r.configuration.getLinkers(),l={project:r,report:new Fe({stdout:new cc.PassThrough,configuration:o})},c=a.find(h=>h.supportsPackage(n,l));if(!c)throw new Error(`The package ${lt(r.configuration,n)} isn't supported by any of the available linkers`);let u=await c.findPackageLocation(n,l),g=new Ft(u,{baseFs:s});return(await Ze.find(Se.dot,{baseFs:g})).scripts.has(e)},{libzip:await $i()})}async function Uw(t,e,r,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await T.mktempPromise(async l=>{let{manifest:c,env:u,cwd:g}=await A9(t,{project:n,binFolder:l,cwd:i,lifecycleScript:e}),f=c.scripts.get(e);if(typeof f=="undefined")return 1;let h=async()=>await Fw(f,r,{cwd:g,env:u,stdin:s,stdout:o,stderr:a});return await(await n.configuration.reduceHook(d=>d.wrapScriptExecution,h,n,t,e,{script:f,args:r,cwd:g,env:u,stdin:s,stdout:o,stderr:a}))()})}async function rD(t,e,r,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await T.mktempPromise(async l=>{let{env:c,cwd:u}=await A9(t,{project:n,binFolder:l,cwd:i});return await Fw(e,r,{cwd:u,env:c,stdin:s,stdout:o,stderr:a})})}async function jFe(t,{binFolder:e,cwd:r,lifecycleScript:i}){let n=await Vp({project:t.project,locator:t.anchoredLocator,binFolder:e,lifecycleScript:i});return await Promise.all(Array.from(await l9(t),([s,[,o]])=>ba(e,kr(s),process.execPath,[o]))),typeof r=="undefined"&&(r=v.dirname(await T.realpathPromise(v.join(t.cwd,"package.json")))),{manifest:t.manifest,binFolder:e,env:n,cwd:r}}async function A9(t,{project:e,binFolder:r,cwd:i,lifecycleScript:n}){let s=e.tryWorkspaceByLocator(t);if(s!==null)return jFe(s,{binFolder:r,cwd:i,lifecycleScript:n});let o=e.storedPackages.get(t.locatorHash);if(!o)throw new Error(`Package for ${lt(e.configuration,t)} not found in the project`);return await Jn.openPromise(async a=>{let l=e.configuration,c=e.configuration.getLinkers(),u={project:e,report:new Fe({stdout:new cc.PassThrough,configuration:l})},g=c.find(m=>m.supportsPackage(o,u));if(!g)throw new Error(`The package ${lt(e.configuration,o)} isn't supported by any of the available linkers`);let f=await Vp({project:e,locator:t,binFolder:r,lifecycleScript:n});await Promise.all(Array.from(await Hw(t,{project:e}),([m,[,I]])=>ba(r,kr(m),process.execPath,[I])));let h=await g.findPackageLocation(o,u),p=new Ft(h,{baseFs:a}),d=await Ze.find(Se.dot,{baseFs:p});return typeof i=="undefined"&&(i=h),{manifest:d,binFolder:r,env:f,cwd:i}},{libzip:await $i()})}async function c9(t,e,r,{cwd:i,stdin:n,stdout:s,stderr:o}){return await Uw(t.anchoredLocator,e,r,{cwd:i,project:t.project,stdin:n,stdout:s,stderr:o})}function tD(t,e){return t.manifest.scripts.has(e)}async function u9(t,e,{cwd:r,report:i}){let{configuration:n}=t.project,s=null;await T.mktempPromise(async o=>{let a=v.join(o,`${e}.log`),l=`# This file contains the result of Yarn calling the "${e}" lifecycle script inside a workspace ("${M.fromPortablePath(t.cwd)}") +`,{stdout:c,stderr:u}=n.getSubprocessStreams(a,{report:i,prefix:lt(n,t.anchoredLocator),header:l});i.reportInfo(z.LIFECYCLE_SCRIPT,`Calling the "${e}" lifecycle script`);let g=await c9(t,e,[],{cwd:r,stdin:s,stdout:c,stderr:u});if(c.end(),u.end(),g!==0)throw T.detachTemp(o),new nt(z.LIFECYCLE_SCRIPT,`${(0,s9.default)(e)} script failed (exit code ${Ve(n,g,Le.NUMBER)}, logs can be found here: ${Ve(n,a,Le.PATH)}); run ${Ve(n,`yarn ${e}`,Le.CODE)} to investigate`)})}async function YFe(t,e,r){tD(t,e)&&await u9(t,e,r)}async function Hw(t,{project:e}){let r=e.configuration,i=new Map,n=e.storedPackages.get(t.locatorHash);if(!n)throw new Error(`Package for ${lt(r,t)} not found in the project`);let s=new cc.Writable,o=r.getLinkers(),a={project:e,report:new Fe({configuration:r,stdout:s})},l=new Set([t.locatorHash]);for(let u of n.dependencies.values()){let g=e.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(`Assertion failed: The resolution (${Xt(r,u)}) should have been registered`);l.add(g)}let c=await Promise.all(Array.from(l,async u=>{let g=e.storedPackages.get(u);if(!g)throw new Error(`Assertion failed: The package (${u}) should have been registered`);if(g.bin.size===0)return kl.skip;let f=o.find(p=>p.supportsPackage(g,a));if(!f)return kl.skip;let h=null;try{h=await f.findPackageLocation(g,a)}catch(p){if(p.code==="LOCATOR_NOT_INSTALLED")return kl.skip;throw p}return{dependency:g,packageLocation:h}}));for(let u of c){if(u===kl.skip)continue;let{dependency:g,packageLocation:f}=u;for(let[h,p]of g.bin)i.set(h,[g,M.fromPortablePath(v.resolve(f,p))])}return i}async function l9(t){return await Hw(t.anchoredLocator,{project:t.project})}async function g9(t,e,r,{cwd:i,project:n,stdin:s,stdout:o,stderr:a,nodeArgs:l=[],packageAccessibleBinaries:c}){c!=null||(c=await Hw(t,{project:n}));let u=c.get(e);if(!u)throw new Error(`Binary not found (${e}) for ${lt(n.configuration,t)}`);return await T.mktempPromise(async g=>{let[,f]=u,h=await Vp({project:n,locator:t,binFolder:g});await Promise.all(Array.from(c,([d,[,m]])=>ba(h.BERRY_BIN_FOLDER,kr(d),process.execPath,[m])));let p;try{p=await to(process.execPath,[...l,f,...r],{cwd:i,env:h,stdin:s,stdout:o,stderr:a})}finally{await T.removePromise(h.BERRY_BIN_FOLDER)}return p.code})}async function qFe(t,e,r,{cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a}){return await g9(t.anchoredLocator,e,r,{project:t.project,cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a})}var Ai={};it(Ai,{convertToZip:()=>lTe,extractArchiveTo:()=>uTe,makeArchiveFromDirectory:()=>ATe});var d_=ie(require("stream")),C_=ie(Z7());var u_=ie(require("os")),g_=ie(c_()),f_=ie(require("worker_threads")),IR=class{constructor(e){this.source=e;this.pool=[];this.queue=new g_.default({concurrency:Math.max(1,(0,u_.cpus)().length)});let r=setTimeout(()=>{if(!(this.queue.size!==0||this.queue.pending!==0)){for(let i of this.pool)i.terminate();this.pool=[]}},1e3).unref();this.queue.on("idle",()=>{r.refresh()})}run(e){return this.queue.add(()=>{var i;let r=(i=this.pool.pop())!=null?i:new f_.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,"--unhandled-rejections=strict"]});return r.ref(),new Promise((n,s)=>{let o=a=>{a!==0&&s(new Error(`Worker exited with code ${a}`))};r.once("message",a=>{this.pool.push(r),r.unref(),r.off("error",s),r.off("exit",o),n(a)}),r.once("error",s),r.once("exit",o),r.postMessage(e)})})}};var m_=ie(p_());async function ATe(t,{baseFs:e=new Wt,prefixPath:r=Se.root,compressionLevel:i,inMemory:n=!1}={}){let s=await $i(),o;if(n)o=new Jr(null,{libzip:s,level:i});else{let l=await T.mktempPromise(),c=v.join(l,"archive.zip");o=new Jr(c,{create:!0,libzip:s,level:i})}let a=v.resolve(Se.root,r);return await o.copyPromise(a,t,{baseFs:e,stableTime:!0,stableSort:!0}),o}var E_;async function lTe(t,e){let r=await T.mktempPromise(),i=v.join(r,"archive.zip");return E_||(E_=new IR((0,m_.getContent)())),await E_.run({tmpFile:i,tgz:t,opts:e}),new Jr(i,{libzip:await $i(),level:e.compressionLevel})}async function*cTe(t){let e=new C_.default.Parse,r=new d_.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on("entry",i=>{r.write(i)}),e.on("error",i=>{r.destroy(i)}),e.on("close",()=>{r.destroyed||r.end()}),e.end(t);for await(let i of r){let n=i;yield n,n.resume()}}async function uTe(t,e,{stripComponents:r=0,prefixPath:i=Se.dot}={}){var s,o;function n(a){if(a.path[0]==="/")return!0;let l=a.path.split(/\//g);return!!(l.some(c=>c==="..")||l.length<=r)}for await(let a of cTe(t)){if(n(a))continue;let l=v.normalize(M.toPortablePath(a.path)).replace(/\/$/,"").split(/\//g);if(l.length<=r)continue;let c=l.slice(r).join("/"),u=v.join(i,c),g=420;switch((a.type==="Directory"||(((s=a.mode)!=null?s:0)&73)!=0)&&(g|=73),a.type){case"Directory":e.mkdirpSync(v.dirname(u),{chmod:493,utimes:[mr.SAFE_TIME,mr.SAFE_TIME]}),e.mkdirSync(u,{mode:g}),e.utimesSync(u,mr.SAFE_TIME,mr.SAFE_TIME);break;case"OldFile":case"File":e.mkdirpSync(v.dirname(u),{chmod:493,utimes:[mr.SAFE_TIME,mr.SAFE_TIME]}),e.writeFileSync(u,await Cu(a),{mode:g}),e.utimesSync(u,mr.SAFE_TIME,mr.SAFE_TIME);break;case"SymbolicLink":e.mkdirpSync(v.dirname(u),{chmod:493,utimes:[mr.SAFE_TIME,mr.SAFE_TIME]}),e.symlinkSync(a.linkpath,u),(o=e.lutimesSync)==null||o.call(e,u,mr.SAFE_TIME,mr.SAFE_TIME);break}}return e}var Hs={};it(Hs,{emitList:()=>gTe,emitTree:()=>b_,treeNodeToJson:()=>Q_,treeNodeToTreeify:()=>B_});var w_=ie(y_());function B_(t,{configuration:e}){let r={},i=(n,s)=>{let o=Array.isArray(n)?n.entries():Object.entries(n);for(let[a,{label:l,value:c,children:u}]of o){let g=[];typeof l!="undefined"&&g.push(Py(e,l,Gl.BOLD)),typeof c!="undefined"&&g.push(Ve(e,c[0],c[1])),g.length===0&&g.push(Py(e,`${a}`,Gl.BOLD));let f=g.join(": "),h=s[f]={};typeof u!="undefined"&&i(u,h)}};if(typeof t.children=="undefined")throw new Error("The root node must only contain children");return i(t.children,r),r}function Q_(t){let e=r=>{var s;if(typeof r.children=="undefined"){if(typeof r.value=="undefined")throw new Error("Assertion failed: Expected a value to be set if the children are missing");return Uu(r.value[0],r.value[1])}let i=Array.isArray(r.children)?r.children.entries():Object.entries((s=r.children)!=null?s:{}),n=Array.isArray(r.children)?[]:{};for(let[o,a]of i)n[o]=e(a);return typeof r.value=="undefined"?n:{value:Uu(r.value[0],r.value[1]),children:n}};return e(t)}function gTe(t,{configuration:e,stdout:r,json:i}){let n=t.map(s=>({value:s}));b_({children:n},{configuration:e,stdout:r,json:i})}function b_(t,{configuration:e,stdout:r,json:i,separators:n=0}){var o;if(i){let a=Array.isArray(t.children)?t.children.values():Object.values((o=t.children)!=null?o:{});for(let l of a)r.write(`${JSON.stringify(Q_(l))} +`);return}let s=(0,w_.asTree)(B_(t,{configuration:e}),!1,!1);if(n>=1&&(s=s.replace(/^([├└]─)/gm,`\u2502 +$1`).replace(/^│\n/,"")),n>=2)for(let a=0;a<2;++a)s=s.replace(/^([│ ].{2}[├│ ].{2}[^\n]+\n)(([│ ]).{2}[├└].{2}[^\n]*\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3 \u2502 +$2`).replace(/^│\n/,"");if(n>=3)throw new Error("Only the first two levels are accepted by treeUtils.emitTree");r.write(s)}var v_=ie(require("crypto")),BR=ie(require("fs"));var fTe=8,Qt=class{constructor(e,{configuration:r,immutable:i=r.get("enableImmutableCache"),check:n=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,v_.randomBytes)(8).toString("hex")}.tmp`;this.configuration=r,this.cwd=e,this.immutable=i,this.check=n;let s=r.get("cacheKeyOverride");if(s!==null)this.cacheKey=`${s}`;else{let o=r.get("compressionLevel"),a=o!==pl?`c${o}`:"";this.cacheKey=[fTe,a].join("")}}static async find(e,{immutable:r,check:i}={}){let n=new Qt(e.get("cacheFolder"),{configuration:e,immutable:r,check:i});return await n.setup(),n}get mirrorCwd(){if(!this.configuration.get("enableMirror"))return null;let e=`${this.configuration.get("globalFolder")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${Mu(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,r){let n=hTe(r).slice(0,10);return`${Mu(e)}-${n}.zip`}getLocatorPath(e,r,i={}){var s;return this.mirrorCwd===null||((s=i.unstablePackages)==null?void 0:s.has(e.locatorHash))?v.resolve(this.cwd,this.getVersionFilename(e)):r===null||QR(r)!==this.cacheKey?null:v.resolve(this.cwd,this.getChecksumFilename(e,r))}getLocatorMirrorPath(e){let r=this.mirrorCwd;return r!==null?v.resolve(r,this.getVersionFilename(e)):null}async setup(){if(!this.configuration.get("enableGlobalCache"))if(this.immutable){if(!await T.existsPromise(this.cwd))throw new nt(z.IMMUTABLE_CACHE,"Cache path does not exist.")}else{await T.mkdirPromise(this.cwd,{recursive:!0});let e=v.resolve(this.cwd,".gitignore");await T.changeFilePromise(e,`/.gitignore +*.flock +*.tmp +`)}(this.mirrorCwd||!this.immutable)&&await T.mkdirPromise(this.mirrorCwd||this.cwd,{recursive:!0})}async fetchPackageFromCache(e,r,a){var l=a,{onHit:i,onMiss:n,loader:s}=l,o=qr(l,["onHit","onMiss","loader"]);var A;let c=this.getLocatorMirrorPath(e),u=new Wt,g=()=>{let V=new Jr(null,{libzip:H}),W=v.join(Se.root,Lx(e));return V.mkdirSync(W,{recursive:!0}),V.writeJsonSync(v.join(W,wt.manifest),{name:St(e),mocked:!0}),V},f=async(V,W=null)=>{let X=!o.skipIntegrityCheck||!r?`${this.cacheKey}/${await Ey(V)}`:r;if(W!==null){let F=!o.skipIntegrityCheck||!r?`${this.cacheKey}/${await Ey(W)}`:r;if(X!==F)throw new nt(z.CACHE_CHECKSUM_MISMATCH,"The remote archive doesn't match the local checksum - has the local cache been corrupted?")}if(r!==null&&X!==r){let F;switch(this.check?F="throw":QR(r)!==QR(X)?F="update":F=this.configuration.get("checksumBehavior"),F){case"ignore":return r;case"update":return X;default:case"throw":throw new nt(z.CACHE_CHECKSUM_MISMATCH,"The remote archive doesn't match the expected checksum")}}return X},h=async V=>{if(!s)throw new Error(`Cache check required but no loader configured for ${lt(this.configuration,e)}`);let W=await s(),X=W.getRealPath();return W.saveAndClose(),await T.chmodPromise(X,420),await f(V,X)},p=async()=>{if(c===null||!await T.existsPromise(c)){let V=await s(),W=V.getRealPath();return V.saveAndClose(),{source:"loader",path:W}}return{source:"mirror",path:c}},d=async()=>{if(!s)throw new Error(`Cache entry required but missing for ${lt(this.configuration,e)}`);if(this.immutable)throw new nt(z.IMMUTABLE_CACHE,`Cache entry required but missing for ${lt(this.configuration,e)}`);let{path:V,source:W}=await p(),X=await f(V),F=this.getLocatorPath(e,X,o);if(!F)throw new Error("Assertion failed: Expected the cache path to be available");let D=[];W!=="mirror"&&c!==null&&D.push(async()=>{let pe=`${c}${this.cacheId}`;await T.copyFilePromise(V,pe,BR.default.constants.COPYFILE_FICLONE),await T.chmodPromise(pe,420),await T.renamePromise(pe,c)}),(!o.mirrorWriteOnly||c===null)&&D.push(async()=>{let pe=`${F}${this.cacheId}`;await T.copyFilePromise(V,pe,BR.default.constants.COPYFILE_FICLONE),await T.chmodPromise(pe,420),await T.renamePromise(pe,F)});let he=o.mirrorWriteOnly&&c!=null?c:F;return await Promise.all(D.map(pe=>pe())),[!1,he,X]},m=async()=>{let W=(async()=>{var Ne;let X=this.getLocatorPath(e,r,o),F=X!==null?await u.existsPromise(X):!1,D=!!((Ne=o.mockedPackages)==null?void 0:Ne.has(e.locatorHash))&&(!this.check||!F),he=D||F,pe=he?i:n;if(pe&&pe(),he){let Pe=null,qe=X;return D||(Pe=this.check?await h(qe):await f(qe)),[D,qe,Pe]}else return d()})();this.mutexes.set(e.locatorHash,W);try{return await W}finally{this.mutexes.delete(e.locatorHash)}};for(let V;V=this.mutexes.get(e.locatorHash);)await V;let[I,B,b]=await m();this.markedFiles.add(B);let R,H=await $i(),L=I?()=>g():()=>new Jr(B,{baseFs:u,libzip:H,readOnly:!0}),K=new oh(()=>Mv(()=>R=L(),V=>`Failed to open the cache entry for ${lt(this.configuration,e)}: ${V}`),v),J=new Xo(B,{baseFs:K,pathUtils:v}),ne=()=>{R==null||R.discardAndClose()},q=((A=o.unstablePackages)==null?void 0:A.has(e.locatorHash))?null:b;return[J,ne,q]}};function QR(t){let e=t.indexOf("/");return e!==-1?t.slice(0,e):null}function hTe(t){let e=t.indexOf("/");return e!==-1?t.slice(e+1):t}var F_=ie(x_()),NB=ie(ml());var N_=ie(Wp()),kR=ie(require("stream"));var k_={hooks:{reduceDependency:(t,e,r,i,{resolver:n,resolveOptions:s})=>{for(let{pattern:o,reference:a}of e.topLevelWorkspace.manifest.resolutions){if(o.from&&o.from.fullName!==St(r)||o.from&&o.from.description&&o.from.description!==r.reference||o.descriptor.fullName!==St(t)||o.descriptor.description&&o.descriptor.description!==t.range)continue;return n.bindDescriptor(Yt(t,a),e.topLevelWorkspace.anchoredLocator,s)}return t},validateProject:async(t,e)=>{for(let r of t.workspaces){let i=hp(t.configuration,r);await t.configuration.triggerHook(n=>n.validateWorkspace,r,{reportWarning:(n,s)=>e.reportWarning(n,`${i}: ${s}`),reportError:(n,s)=>e.reportError(n,`${i}: ${s}`)})}},validateWorkspace:async(t,e)=>{let{manifest:r}=t;r.resolutions.length&&t.cwd!==t.project.cwd&&r.errors.push(new Error("Resolutions field will be ignored"));for(let i of r.errors)e.reportWarning(z.INVALID_MANIFEST,i.message)}}};var vR=class{constructor(e){this.fetchers=e}supports(e,r){return!!this.tryFetcher(e,r)}getLocalPath(e,r){return this.getFetcher(e,r).getLocalPath(e,r)}async fetch(e,r){return await this.getFetcher(e,r).fetch(e,r)}tryFetcher(e,r){let i=this.fetchers.find(n=>n.supports(e,r));return i||null}getFetcher(e,r){let i=this.fetchers.find(n=>n.supports(e,r));if(!i)throw new nt(z.FETCHER_NOT_FOUND,`${lt(r.project.configuration,e)} isn't supported by any available fetcher`);return i}};var pd=class{constructor(e){this.resolvers=e.filter(r=>r)}supportsDescriptor(e,r){return!!this.tryResolverByDescriptor(e,r)}supportsLocator(e,r){return!!this.tryResolverByLocator(e,r)}shouldPersistResolution(e,r){return this.getResolverByLocator(e,r).shouldPersistResolution(e,r)}bindDescriptor(e,r,i){return this.getResolverByDescriptor(e,i).bindDescriptor(e,r,i)}getResolutionDependencies(e,r){return this.getResolverByDescriptor(e,r).getResolutionDependencies(e,r)}async getCandidates(e,r,i){return await this.getResolverByDescriptor(e,i).getCandidates(e,r,i)}async getSatisfying(e,r,i){return this.getResolverByDescriptor(e,i).getSatisfying(e,r,i)}async resolve(e,r){return await this.getResolverByLocator(e,r).resolve(e,r)}tryResolverByDescriptor(e,r){let i=this.resolvers.find(n=>n.supportsDescriptor(e,r));return i||null}getResolverByDescriptor(e,r){let i=this.resolvers.find(n=>n.supportsDescriptor(e,r));if(!i)throw new Error(`${Xt(r.project.configuration,e)} isn't supported by any available resolver`);return i}tryResolverByLocator(e,r){let i=this.resolvers.find(n=>n.supportsLocator(e,r));return i||null}getResolverByLocator(e,r){let i=this.resolvers.find(n=>n.supportsLocator(e,r));if(!i)throw new Error(`${lt(r.project.configuration,e)} isn't supported by any available resolver`);return i}};var P_=ie(Or());var Rg=/^(?!v)[a-z0-9._-]+$/i,SR=class{supportsDescriptor(e,r){return!!(Us(e.range)||Rg.test(e.range))}supportsLocator(e,r){return!!(P_.default.valid(e.reference)||Rg.test(e.reference))}shouldPersistResolution(e,r){return r.resolver.shouldPersistResolution(this.forwardLocator(e,r),r)}bindDescriptor(e,r,i){return i.resolver.bindDescriptor(this.forwardDescriptor(e,i),r,i)}getResolutionDependencies(e,r){return r.resolver.getResolutionDependencies(this.forwardDescriptor(e,r),r)}async getCandidates(e,r,i){return await i.resolver.getCandidates(this.forwardDescriptor(e,i),r,i)}async getSatisfying(e,r,i){return await i.resolver.getSatisfying(this.forwardDescriptor(e,i),r,i)}async resolve(e,r){let i=await r.resolver.resolve(this.forwardLocator(e,r),r);return op(i,e)}forwardDescriptor(e,r){return Yt(e,`${r.project.configuration.get("defaultProtocol")}${e.range}`)}forwardLocator(e,r){return Vi(e,`${r.project.configuration.get("defaultProtocol")}${e.reference}`)}};var dd=class{supports(e){return!!e.reference.startsWith("virtual:")}getLocalPath(e,r){let i=e.reference.indexOf("#");if(i===-1)throw new Error("Invalid virtual package reference");let n=e.reference.slice(i+1),s=Vi(e,n);return r.fetcher.getLocalPath(s,r)}async fetch(e,r){let i=e.reference.indexOf("#");if(i===-1)throw new Error("Invalid virtual package reference");let n=e.reference.slice(i+1),s=Vi(e,n),o=await r.fetcher.fetch(s,r);return await this.ensureVirtualLink(e,o,r)}getLocatorFilename(e){return Mu(e)}async ensureVirtualLink(e,r,i){let n=r.packageFs.getRealPath(),s=i.project.configuration.get("virtualFolder"),o=this.getLocatorFilename(e),a=Pr.makeVirtualPath(s,o,n),l=new Xo(a,{baseFs:r.packageFs,pathUtils:v});return _(P({},r),{packageFs:l})}};var Fg=class{static isVirtualDescriptor(e){return!!e.range.startsWith(Fg.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(Fg.protocol)}supportsDescriptor(e,r){return Fg.isVirtualDescriptor(e)}supportsLocator(e,r){return Fg.isVirtualLocator(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,i){throw new Error('Assertion failed: calling "bindDescriptor" on a virtual descriptor is unsupported')}getResolutionDependencies(e,r){throw new Error('Assertion failed: calling "getResolutionDependencies" on a virtual descriptor is unsupported')}async getCandidates(e,r,i){throw new Error('Assertion failed: calling "getCandidates" on a virtual descriptor is unsupported')}async getSatisfying(e,r,i){throw new Error('Assertion failed: calling "getSatisfying" on a virtual descriptor is unsupported')}async resolve(e,r){throw new Error('Assertion failed: calling "resolve" on a virtual locator is unsupported')}},FB=Fg;FB.protocol="virtual:";var xR=class{supports(e){return!!e.reference.startsWith(Yr.protocol)}getLocalPath(e,r){return this.getWorkspace(e,r).cwd}async fetch(e,r){let i=this.getWorkspace(e,r).cwd;return{packageFs:new Ft(i),prefixPath:Se.dot,localPath:i}}getWorkspace(e,r){return r.project.getWorkspaceByCwd(e.reference.slice(Yr.protocol.length))}};var D_=ie(require("module"));function R_(){return new Set(D_.default.builtinModules||Object.keys(process.binding("natives")))}var dTe=new Set(["binFolder","version","flags","profile","gpg","ignoreNode","wrapOutput","home","confDir"]),LB="yarn_",PR=".yarnrc.yml",DR="yarn.lock",CTe="********",ge;(function(u){u.ANY="ANY",u.BOOLEAN="BOOLEAN",u.ABSOLUTE_PATH="ABSOLUTE_PATH",u.LOCATOR="LOCATOR",u.LOCATOR_LOOSE="LOCATOR_LOOSE",u.NUMBER="NUMBER",u.STRING="STRING",u.SECRET="SECRET",u.SHAPE="SHAPE",u.MAP="MAP"})(ge||(ge={}));var ps=Le,RR={lastUpdateCheck:{description:"Last timestamp we checked whether new Yarn versions were available",type:ge.STRING,default:null},yarnPath:{description:"Path to the local executable that must be used over the global one",type:ge.ABSOLUTE_PATH,default:null},ignorePath:{description:"If true, the local executable will be ignored when using the global one",type:ge.BOOLEAN,default:!1},ignoreCwd:{description:"If true, the `--cwd` flag will be ignored",type:ge.BOOLEAN,default:!1},cacheKeyOverride:{description:"A global cache key override; used only for test purposes",type:ge.STRING,default:null},globalFolder:{description:"Folder where are stored the system-wide settings",type:ge.ABSOLUTE_PATH,default:Rb()},cacheFolder:{description:"Folder where the cache files must be written",type:ge.ABSOLUTE_PATH,default:"./.yarn/cache"},compressionLevel:{description:"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)",type:ge.NUMBER,values:["mixed",0,1,2,3,4,5,6,7,8,9],default:pl},virtualFolder:{description:"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)",type:ge.ABSOLUTE_PATH,default:"./.yarn/__virtual__"},lockfileFilename:{description:"Name of the files where the Yarn dependency tree entries must be stored",type:ge.STRING,default:DR},installStatePath:{description:"Path of the file where the install state will be persisted",type:ge.ABSOLUTE_PATH,default:"./.yarn/install-state.gz"},immutablePatterns:{description:"Array of glob patterns; files matching them won't be allowed to change during immutable installs",type:ge.STRING,default:[],isArray:!0},rcFilename:{description:"Name of the files where the configuration can be found",type:ge.STRING,default:TB()},enableGlobalCache:{description:"If true, the system-wide cache folder will be used regardless of `cache-folder`",type:ge.BOOLEAN,default:!1},enableColors:{description:"If true, the CLI is allowed to use colors in its output",type:ge.BOOLEAN,default:xy,defaultText:""},enableHyperlinks:{description:"If true, the CLI is allowed to use hyperlinks in its output",type:ge.BOOLEAN,default:Mx,defaultText:""},enableInlineBuilds:{description:"If true, the CLI will print the build output on the command line",type:ge.BOOLEAN,default:NB.isCI,defaultText:""},enableMessageNames:{description:"If true, the CLI will prefix most messages with codes suitable for search engines",type:ge.BOOLEAN,default:!0},enableProgressBars:{description:"If true, the CLI is allowed to show a progress bar for long-running events",type:ge.BOOLEAN,default:!NB.isCI&&process.stdout.isTTY&&process.stdout.columns>22,defaultText:""},enableTimers:{description:"If true, the CLI is allowed to print the time spent executing commands",type:ge.BOOLEAN,default:!0},preferAggregateCacheInfo:{description:"If true, the CLI will only print a one-line report of any cache changes",type:ge.BOOLEAN,default:NB.isCI},preferInteractive:{description:"If true, the CLI will automatically use the interactive mode when called from a TTY",type:ge.BOOLEAN,default:!1},preferTruncatedLines:{description:"If true, the CLI will truncate lines that would go beyond the size of the terminal",type:ge.BOOLEAN,default:!1},progressBarStyle:{description:"Which style of progress bar should be used (only when progress bars are enabled)",type:ge.STRING,default:void 0,defaultText:""},defaultLanguageName:{description:"Default language mode that should be used when a package doesn't offer any insight",type:ge.STRING,default:"node"},defaultProtocol:{description:"Default resolution protocol used when resolving pure semver and tag ranges",type:ge.STRING,default:"npm:"},enableTransparentWorkspaces:{description:"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol",type:ge.BOOLEAN,default:!0},supportedArchitectures:{description:"Architectures that Yarn will fetch and inject into the resolver",type:ge.SHAPE,properties:{os:{description:"Array of supported process.platform strings, or null to target them all",type:ge.STRING,isArray:!0,isNullable:!0,default:["current"]},cpu:{description:"Array of supported process.arch strings, or null to target them all",type:ge.STRING,isArray:!0,isNullable:!0,default:["current"]}}},enableMirror:{description:"If true, the downloaded packages will be retrieved and stored in both the local and global folders",type:ge.BOOLEAN,default:!0},enableNetwork:{description:"If false, the package manager will refuse to use the network if required to",type:ge.BOOLEAN,default:!0},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:ge.STRING,default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:ge.STRING,default:null},unsafeHttpWhitelist:{description:"List of the hostnames for which http queries are allowed (glob patterns are supported)",type:ge.STRING,default:[],isArray:!0},httpTimeout:{description:"Timeout of each http request in milliseconds",type:ge.NUMBER,default:6e4},httpRetry:{description:"Retry times on http failure",type:ge.NUMBER,default:3},networkConcurrency:{description:"Maximal number of concurrent requests",type:ge.NUMBER,default:50},networkSettings:{description:"Network settings per hostname (glob patterns are supported)",type:ge.MAP,valueDefinition:{description:"",type:ge.SHAPE,properties:{caFilePath:{description:"Path to file containing one or multiple Certificate Authority signing certificates",type:ge.ABSOLUTE_PATH,default:null},enableNetwork:{description:"If false, the package manager will refuse to use the network if required to",type:ge.BOOLEAN,default:null},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:ge.STRING,default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:ge.STRING,default:null}}}},caFilePath:{description:"A path to a file containing one or multiple Certificate Authority signing certificates",type:ge.ABSOLUTE_PATH,default:null},enableStrictSsl:{description:"If false, SSL certificate errors will be ignored",type:ge.BOOLEAN,default:!0},logFilters:{description:"Overrides for log levels",type:ge.SHAPE,isArray:!0,concatenateValues:!0,properties:{code:{description:"Code of the messages covered by this override",type:ge.STRING,default:void 0},text:{description:"Code of the texts covered by this override",type:ge.STRING,default:void 0},pattern:{description:"Code of the patterns covered by this override",type:ge.STRING,default:void 0},level:{description:"Log level override, set to null to remove override",type:ge.STRING,values:Object.values(Ts),isNullable:!0,default:void 0}}},enableTelemetry:{description:"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry",type:ge.BOOLEAN,default:!0},telemetryInterval:{description:"Minimal amount of time between two telemetry uploads, in days",type:ge.NUMBER,default:7},telemetryUserId:{description:"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.",type:ge.STRING,default:null},enableScripts:{description:"If true, packages are allowed to have install scripts by default",type:ge.BOOLEAN,default:!0},enableStrictSettings:{description:"If true, unknown settings will cause Yarn to abort",type:ge.BOOLEAN,default:!0},enableImmutableCache:{description:"If true, the cache is reputed immutable and actions that would modify it will throw",type:ge.BOOLEAN,default:!1},checksumBehavior:{description:"Enumeration defining what to do when a checksum doesn't match expectations",type:ge.STRING,default:"throw"},packageExtensions:{description:"Map of package corrections to apply on the dependency tree",type:ge.MAP,valueDefinition:{description:"The extension that will be applied to any package whose version matches the specified range",type:ge.SHAPE,properties:{dependencies:{description:"The set of dependencies that must be made available to the current package in order for it to work properly",type:ge.MAP,valueDefinition:{description:"A range",type:ge.STRING}},peerDependencies:{description:"Inherited dependencies - the consumer of the package will be tasked to provide them",type:ge.MAP,valueDefinition:{description:"A semver range",type:ge.STRING}},peerDependenciesMeta:{description:"Extra information related to the dependencies listed in the peerDependencies field",type:ge.MAP,valueDefinition:{description:"The peerDependency meta",type:ge.SHAPE,properties:{optional:{description:"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error",type:ge.BOOLEAN,default:!1}}}}}}}};function NR(t,e,r,i,n){if(i.isArray||i.type===ge.ANY&&Array.isArray(r))return Array.isArray(r)?r.map((s,o)=>FR(t,`${e}[${o}]`,s,i,n)):String(r).split(/,/).map(s=>FR(t,e,s,i,n));if(Array.isArray(r))throw new Error(`Non-array configuration settings "${e}" cannot be an array`);return FR(t,e,r,i,n)}function FR(t,e,r,i,n){var a;switch(i.type){case ge.ANY:return r;case ge.SHAPE:return mTe(t,e,r,i,n);case ge.MAP:return ETe(t,e,r,i,n)}if(r===null&&!i.isNullable&&i.default!==null)throw new Error(`Non-nullable configuration settings "${e}" cannot be set to null`);if((a=i.values)==null?void 0:a.includes(r))return r;let o=(()=>{if(i.type===ge.BOOLEAN&&typeof r!="string")return Hh(r);if(typeof r!="string")throw new Error(`Expected value (${r}) to be a string`);let l=Ov(r,{env:process.env});switch(i.type){case ge.ABSOLUTE_PATH:return v.resolve(n,M.toPortablePath(l));case ge.LOCATOR_LOOSE:return Hl(l,!1);case ge.NUMBER:return parseInt(l);case ge.LOCATOR:return Hl(l);case ge.BOOLEAN:return Hh(l);default:return l}})();if(i.values&&!i.values.includes(o))throw new Error(`Invalid value, expected one of ${i.values.join(", ")}`);return o}function mTe(t,e,r,i,n){if(typeof r!="object"||Array.isArray(r))throw new me(`Object configuration settings "${e}" must be an object`);let s=LR(t,i,{ignoreArrays:!0});if(r===null)return s;for(let[o,a]of Object.entries(r)){let l=`${e}.${o}`;if(!i.properties[o])throw new me(`Unrecognized configuration settings found: ${e}.${o} - run "yarn config -v" to see the list of settings supported in Yarn`);s.set(o,NR(t,l,a,i.properties[o],n))}return s}function ETe(t,e,r,i,n){let s=new Map;if(typeof r!="object"||Array.isArray(r))throw new me(`Map configuration settings "${e}" must be an object`);if(r===null)return s;for(let[o,a]of Object.entries(r)){let l=i.normalizeKeys?i.normalizeKeys(o):o,c=`${e}['${l}']`,u=i.valueDefinition;s.set(l,NR(t,c,a,u,n))}return s}function LR(t,e,{ignoreArrays:r=!1}={}){switch(e.type){case ge.SHAPE:{if(e.isArray&&!r)return[];let i=new Map;for(let[n,s]of Object.entries(e.properties))i.set(n,LR(t,s));return i}break;case ge.MAP:return e.isArray&&!r?[]:new Map;case ge.ABSOLUTE_PATH:return e.default===null?null:t.projectCwd===null?v.isAbsolute(e.default)?v.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(i=>v.resolve(t.projectCwd,i)):v.resolve(t.projectCwd,e.default);default:return e.default}}function MB(t,e,r){if(e.type===ge.SECRET&&typeof t=="string"&&r.hideSecrets)return CTe;if(e.type===ge.ABSOLUTE_PATH&&typeof t=="string"&&r.getNativePaths)return M.fromPortablePath(t);if(e.isArray&&Array.isArray(t)){let i=[];for(let n of t)i.push(MB(n,e,r));return i}if(e.type===ge.MAP&&t instanceof Map){let i=new Map;for(let[n,s]of t.entries())i.set(n,MB(s,e.valueDefinition,r));return i}if(e.type===ge.SHAPE&&t instanceof Map){let i=new Map;for(let[n,s]of t.entries()){let o=e.properties[n];i.set(n,MB(s,o,r))}return i}return t}function ITe(){let t={};for(let[e,r]of Object.entries(process.env))e=e.toLowerCase(),!!e.startsWith(LB)&&(e=(0,F_.default)(e.slice(LB.length)),t[e]=r);return t}function TB(){let t=`${LB}rc_filename`;for(let[e,r]of Object.entries(process.env))if(e.toLowerCase()===t&&typeof r=="string")return r;return PR}var KA;(function(i){i[i.LOCKFILE=0]="LOCKFILE",i[i.MANIFEST=1]="MANIFEST",i[i.NONE=2]="NONE"})(KA||(KA={}));var Ra=class{constructor(e){this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.packageExtensions=new Map;this.limits=new Map;this.startingCwd=e}static create(e,r,i){let n=new Ra(e);typeof r!="undefined"&&!(r instanceof Map)&&(n.projectCwd=r),n.importSettings(RR);let s=typeof i!="undefined"?i:r instanceof Map?r:new Map;for(let[o,a]of s)n.activatePlugin(o,a);return n}static async find(e,r,{lookup:i=0,strict:n=!0,usePath:s=!1,useRc:o=!0}={}){let a=ITe();delete a.rcFilename;let l=await Ra.findRcFiles(e),c=await Ra.findHomeRcFile();if(c){let I=l.find(B=>B.path===c.path);I?I.strict=!1:l.push(_(P({},c),{strict:!1}))}let u=({ignoreCwd:I,yarnPath:B,ignorePath:b,lockfileFilename:R})=>({ignoreCwd:I,yarnPath:B,ignorePath:b,lockfileFilename:R}),g=L=>{var K=L,{ignoreCwd:I,yarnPath:B,ignorePath:b,lockfileFilename:R}=K,H=qr(K,["ignoreCwd","yarnPath","ignorePath","lockfileFilename"]);return H},f=new Ra(e);f.importSettings(u(RR)),f.useWithSource("",u(a),e,{strict:!1});for(let{path:I,cwd:B,data:b}of l)f.useWithSource(I,u(b),B,{strict:!1});if(s){let I=f.get("yarnPath"),B=f.get("ignorePath");if(I!==null&&!B)return f}let h=f.get("lockfileFilename"),p;switch(i){case 0:p=await Ra.findProjectCwd(e,h);break;case 1:p=await Ra.findProjectCwd(e,null);break;case 2:T.existsSync(v.join(e,"package.json"))?p=v.resolve(e):p=null;break}f.startingCwd=e,f.projectCwd=p,f.importSettings(g(RR));let d=new Map([["@@core",k_]]),m=I=>"default"in I?I.default:I;if(r!==null){for(let R of r.plugins.keys())d.set(R,m(r.modules.get(R)));let I=new Map;for(let R of R_())I.set(R,()=>mu(R));for(let[R,H]of r.modules)I.set(R,()=>H);let B=new Set,b=async(R,H)=>{let{factory:L,name:K}=mu(R);if(B.has(K))return;let J=new Map(I),ne=A=>{if(J.has(A))return J.get(A)();throw new me(`This plugin cannot access the package referenced via ${A} which is neither a builtin, nor an exposed entry`)},q=await du(async()=>m(await L(ne)),A=>`${A} (when initializing ${K}, defined in ${H})`);I.set(K,()=>q),B.add(K),d.set(K,q)};if(a.plugins)for(let R of a.plugins.split(";")){let H=v.resolve(e,M.toPortablePath(R));await b(H,"")}for(let{path:R,cwd:H,data:L}of l)if(!!o&&!!Array.isArray(L.plugins))for(let K of L.plugins){let J=typeof K!="string"?K.path:K,ne=v.resolve(H,M.toPortablePath(J));await b(ne,R)}}for(let[I,B]of d)f.activatePlugin(I,B);f.useWithSource("",g(a),e,{strict:n});for(let{path:I,cwd:B,data:b,strict:R}of l)f.useWithSource(I,g(b),B,{strict:R!=null?R:n});return f.get("enableGlobalCache")&&(f.values.set("cacheFolder",`${f.get("globalFolder")}/cache`),f.sources.set("cacheFolder","")),await f.refreshPackageExtensions(),f}static async findRcFiles(e){let r=TB(),i=[],n=e,s=null;for(;n!==s;){s=n;let o=v.join(s,r);if(T.existsSync(o)){let a=await T.readFilePromise(o,"utf8"),l;try{l=Ii(a)}catch(c){let u="";throw a.match(/^\s+(?!-)[^:]+\s+\S+/m)&&(u=" (in particular, make sure you list the colons after each key name)"),new me(`Parse error when loading ${o}; please check it's proper Yaml${u}`)}i.push({path:o,cwd:s,data:l})}n=v.dirname(s)}return i}static async findHomeRcFile(){let e=TB(),r=uh(),i=v.join(r,e);if(T.existsSync(i)){let n=await T.readFilePromise(i,"utf8"),s=Ii(n);return{path:i,cwd:r,data:s}}return null}static async findProjectCwd(e,r){let i=null,n=e,s=null;for(;n!==s;){if(s=n,T.existsSync(v.join(s,"package.json"))&&(i=s),r!==null){if(T.existsSync(v.join(s,r))){i=s;break}}else if(i!==null)break;n=v.dirname(s)}return i}static async updateConfiguration(e,r){let i=TB(),n=v.join(e,i),s=T.existsSync(n)?Ii(await T.readFilePromise(n,"utf8")):{},o=!1,a;if(typeof r=="function"){try{a=r(s)}catch{a=r({})}if(a===s)return}else{a=s;for(let l of Object.keys(r)){let c=s[l],u=r[l],g;if(typeof u=="function")try{g=u(c)}catch{g=u(void 0)}else g=u;c!==g&&(a[l]=g,o=!0)}if(!o)return}await T.changeFilePromise(n,Qa(a),{automaticNewlines:!0})}static async updateHomeConfiguration(e){let r=uh();return await Ra.updateConfiguration(r,e)}activatePlugin(e,r){this.plugins.set(e,r),typeof r.configuration!="undefined"&&this.importSettings(r.configuration)}importSettings(e){for(let[r,i]of Object.entries(e))if(i!=null){if(this.settings.has(r))throw new Error(`Cannot redefine settings "${r}"`);this.settings.set(r,i),this.values.set(r,LR(this,i))}}useWithSource(e,r,i,n){try{this.use(e,r,i,n)}catch(s){throw s.message+=` (in ${Ve(this,e,Le.PATH)})`,s}}use(e,r,i,{strict:n=!0,overwrite:s=!1}={}){n=n&&this.get("enableStrictSettings");for(let o of["enableStrictSettings",...Object.keys(r)]){if(typeof r[o]=="undefined"||o==="plugins"||e===""&&dTe.has(o))continue;if(o==="rcFilename")throw new me(`The rcFilename settings can only be set via ${`${LB}RC_FILENAME`.toUpperCase()}, not via a rc file`);let l=this.settings.get(o);if(!l){if(n)throw new me(`Unrecognized or legacy configuration settings found: ${o} - run "yarn config -v" to see the list of settings supported in Yarn`);this.invalid.set(o,e);continue}if(this.sources.has(o)&&!(s||l.type===ge.MAP||l.isArray&&l.concatenateValues))continue;let c;try{c=NR(this,o,r[o],l,i)}catch(u){throw u.message+=` in ${Ve(this,e,Le.PATH)}`,u}if(o==="enableStrictSettings"&&e!==""){n=c;continue}if(l.type===ge.MAP){let u=this.values.get(o);this.values.set(o,new Map(s?[...u,...c]:[...c,...u])),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else if(l.isArray&&l.concatenateValues){let u=this.values.get(o);this.values.set(o,s?[...u,...c]:[...c,...u]),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else this.values.set(o,c),this.sources.set(o,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key "${e}"`);return this.values.get(e)}getSpecial(e,{hideSecrets:r=!1,getNativePaths:i=!1}){let n=this.get(e),s=this.settings.get(e);if(typeof s=="undefined")throw new me(`Couldn't find a configuration settings named "${e}"`);return MB(n,s,{hideSecrets:r,getNativePaths:i})}getSubprocessStreams(e,{header:r,prefix:i,report:n}){let s,o,a=T.createWriteStream(e);if(this.get("enableInlineBuilds")){let l=n.createStreamReporter(`${i} ${Ve(this,"STDOUT","green")}`),c=n.createStreamReporter(`${i} ${Ve(this,"STDERR","red")}`);s=new kR.PassThrough,s.pipe(l),s.pipe(a),o=new kR.PassThrough,o.pipe(c),o.pipe(a)}else s=a,o=a,typeof r!="undefined"&&s.write(`${r} +`);return{stdout:s,stderr:o}}makeResolver(){let e=[];for(let r of this.plugins.values())for(let i of r.resolvers||[])e.push(new i);return new pd([new FB,new Yr,new SR,...e])}makeFetcher(){let e=[];for(let r of this.plugins.values())for(let i of r.fetchers||[])e.push(new i);return new vR([new dd,new xR,...e])}getLinkers(){let e=[];for(let r of this.plugins.values())for(let i of r.linkers||[])e.push(new i);return e}getSupportedArchitectures(){let e=this.get("supportedArchitectures"),r=e.get("os");r!==null&&(r=r.map(n=>n==="current"?process.platform:n));let i=e.get("cpu");return i!==null&&(i=i.map(n=>n==="current"?process.arch:n)),{os:r,cpu:i}}async refreshPackageExtensions(){this.packageExtensions=new Map;let e=this.packageExtensions,r=(i,n,{userProvided:s=!1}={})=>{if(!Us(i.range))throw new Error("Only semver ranges are allowed as keys for the packageExtensions setting");let o=new Ze;o.load(n,{yamlCompatibilityMode:!0});let a=hu(e,i.identHash),l=[];a.push([i.range,l]);let c={status:ki.Inactive,userProvided:s,parentDescriptor:i};for(let u of o.dependencies.values())l.push(_(P({},c),{type:oi.Dependency,descriptor:u}));for(let u of o.peerDependencies.values())l.push(_(P({},c),{type:oi.PeerDependency,descriptor:u}));for(let[u,g]of o.peerDependenciesMeta)for(let[f,h]of Object.entries(g))l.push(_(P({},c),{type:oi.PeerDependencyMeta,selector:u,key:f,value:h}))};await this.triggerHook(i=>i.registerPackageExtensions,this,r);for(let[i,n]of this.get("packageExtensions"))r(pA(i,!0),aI(n),{userProvided:!0})}normalizePackage(e){let r=ap(e);if(this.packageExtensions==null)throw new Error("refreshPackageExtensions has to be called before normalizing packages");let i=this.packageExtensions.get(e.identHash);if(typeof i!="undefined"){let s=e.version;if(s!==null){for(let[o,a]of i)if(!!lc(s,o))for(let l of a)switch(l.status===ki.Inactive&&(l.status=ki.Redundant),l.type){case oi.Dependency:typeof r.dependencies.get(l.descriptor.identHash)=="undefined"&&(l.status=ki.Active,r.dependencies.set(l.descriptor.identHash,l.descriptor));break;case oi.PeerDependency:typeof r.peerDependencies.get(l.descriptor.identHash)=="undefined"&&(l.status=ki.Active,r.peerDependencies.set(l.descriptor.identHash,l.descriptor));break;case oi.PeerDependencyMeta:{let c=r.peerDependenciesMeta.get(l.selector);(typeof c=="undefined"||!Object.prototype.hasOwnProperty.call(c,l.key)||c[l.key]!==l.value)&&(l.status=ki.Active,na(r.peerDependenciesMeta,l.selector,()=>({}))[l.key]=l.value)}break;default:Lv(l);break}}}let n=s=>s.scope?`${s.scope}__${s.name}`:`${s.name}`;for(let s of r.peerDependenciesMeta.keys()){let o=En(s);r.peerDependencies.has(o.identHash)||r.peerDependencies.set(o.identHash,Yt(o,"*"))}for(let s of r.peerDependencies.values()){if(s.scope==="types")continue;let o=n(s),a=Eo("types",o),l=St(a);r.peerDependencies.has(a.identHash)||r.peerDependenciesMeta.has(l)||(r.peerDependencies.set(a.identHash,Yt(a,"*")),r.peerDependenciesMeta.set(l,{optional:!0}))}return r.dependencies=new Map(gn(r.dependencies,([,s])=>In(s))),r.peerDependencies=new Map(gn(r.peerDependencies,([,s])=>In(s))),r}getLimit(e){return na(this.limits,e,()=>(0,N_.default)(this.get(e)))}async triggerHook(e,...r){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);!s||await s(...r)}}async triggerMultipleHooks(e,r){for(let i of r)await this.triggerHook(e,...i)}async reduceHook(e,r,...i){let n=r;for(let s of this.plugins.values()){let o=s.hooks;if(!o)continue;let a=e(o);!a||(n=await a(n,...i))}return n}async firstHook(e,...r){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);if(!s)continue;let o=await s(...r);if(typeof o!="undefined")return o}return null}},fe=Ra;fe.telemetry=null;var Gn;(function(r){r[r.SCRIPT=0]="SCRIPT",r[r.SHELLCODE=1]="SHELLCODE"})(Gn||(Gn={}));var Fa=class extends Xi{constructor({configuration:e,stdout:r,suggestInstall:i=!0}){super();this.errorCount=0;Cp(this,{configuration:e}),this.configuration=e,this.stdout=r,this.suggestInstall=i}static async start(e,r){let i=new this(e);try{await r(i)}catch(n){i.reportExceptionOnce(n)}finally{await i.finalize()}return i}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(e){}reportCacheMiss(e){}startTimerSync(e,r,i){return(typeof r=="function"?r:i)()}async startTimerPromise(e,r,i){return await(typeof r=="function"?r:i)()}async startCacheReport(e){return await e()}reportSeparator(){}reportInfo(e,r){}reportWarning(e,r){}reportError(e,r){this.errorCount+=1,this.stdout.write(`${Ve(this.configuration,"\u27A4","redBright")} ${this.formatNameWithHyperlink(e)}: ${r} +`)}reportProgress(e){let r=Promise.resolve().then(async()=>{for await(let{}of e);}),i=()=>{};return _(P({},r),{stop:i})}reportJson(e){}async finalize(){this.errorCount>0&&(this.stdout.write(` +`),this.stdout.write(`${Ve(this.configuration,"\u27A4","redBright")} Errors happened when preparing the environment required to run this command. +`),this.suggestInstall&&this.stdout.write(`${Ve(this.configuration,"\u27A4","redBright")} This might be caused by packages being missing from the lockfile, in which case running "yarn install" might help. +`))}formatNameWithHyperlink(e){return eD(e,{configuration:this.configuration,json:!1})}};var t0=ie(require("crypto")),v$=ie(CX()),r0=ie(Q$()),S$=ie(Wp()),x$=ie(Or()),lF=ie(require("util")),cF=ie(require("v8")),uF=ie(require("zlib"));var iUe=[[/^(git(?:\+(?:https|ssh))?:\/\/.*(?:\.git)?)#(.*)$/,(t,e,r,i)=>`${r}#commit=${i}`],[/^https:\/\/((?:[^/]+?)@)?codeload\.github\.com\/([^/]+\/[^/]+)\/tar\.gz\/([0-9a-f]+)$/,(t,e,r="",i,n)=>`https://${r}github.com/${i}.git#commit=${n}`],[/^https:\/\/((?:[^/]+?)@)?github\.com\/([^/]+\/[^/]+?)(?:\.git)?#([0-9a-f]+)$/,(t,e,r="",i,n)=>`https://${r}github.com/${i}.git#commit=${n}`],[/^https?:\/\/[^/]+\/(?:[^/]+\/)*(?:@.+(?:\/|(?:%2f)))?([^/]+)\/(?:-|download)\/\1-[^/]+\.tgz(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.pkg\.github\.com\/download\/(?:@[^/]+)\/(?:[^/]+)\/(?:[^/]+)\/(?:[0-9a-f]+)(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.fontawesome\.com\/(?:@[^/]+)\/([^/]+)\/-\/([^/]+)\/\1-\2.tgz(?:#|$)/,t=>`npm:${t}`],[/^https?:\/\/(?:[^\\.]+)\.jfrog\.io\/.*\/(@[^/]+)\/([^/]+)\/-\/\1\/\2-(?:[.\d\w-]+)\.tgz(?:#|$)/,(t,e)=>by({protocol:"npm:",source:null,selector:t,params:{__archiveUrl:e}})],[/^[^/]+\.tgz#[0-9a-f]+$/,t=>`npm:${t}`]],oF=class{constructor(){this.resolutions=null}async setup(e,{report:r}){let i=v.join(e.cwd,e.configuration.get("lockfileFilename"));if(!T.existsSync(i))return;let n=await T.readFilePromise(i,"utf8"),s=Ii(n);if(Object.prototype.hasOwnProperty.call(s,"__metadata"))return;let o=this.resolutions=new Map;for(let a of Object.keys(s)){let l=gp(a);if(!l){r.reportWarning(z.YARN_IMPORT_FAILED,`Failed to parse the string "${a}" into a proper descriptor`);continue}Us(l.range)&&(l=Yt(l,`npm:${l.range}`));let{version:c,resolved:u}=s[a];if(!u)continue;let g;for(let[h,p]of iUe){let d=u.match(h);if(d){g=p(c,...d);break}}if(!g){r.reportWarning(z.YARN_IMPORT_FAILED,`${Xt(e.configuration,l)}: Only some patterns can be imported from legacy lockfiles (not "${u}")`);continue}let f=l;try{let h=Tu(l.range),p=gp(h.selector,!0);p&&(f=p)}catch{}o.set(l.descriptorHash,Vi(f,g))}}supportsDescriptor(e,r){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){if(!this.resolutions)throw new Error("Assertion failed: The resolution store should have been setup");let n=this.resolutions.get(e.descriptorHash);if(!n)throw new Error("Assertion failed: The resolution should have been registered");return[n]}async getSatisfying(e,r,i){return null}async resolve(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}};var aF=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return!!(r.project.storedResolutions.get(e.descriptorHash)||r.project.originalPackages.has(By(e).locatorHash))}supportsLocator(e,r){return!!(r.project.originalPackages.has(e.locatorHash)&&!r.project.lockfileNeedsRefresh)}shouldPersistResolution(e,r){throw new Error("The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes")}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,i){let n=i.project.originalPackages.get(By(e).locatorHash);if(n)return[n];let s=i.project.storedResolutions.get(e.descriptorHash);if(!s)throw new Error("Expected the resolution to have been successful - resolution not found");if(n=i.project.originalPackages.get(s),!n)throw new Error("Expected the resolution to have been successful - package not found");return[n]}async getSatisfying(e,r,i){return null}async resolve(e,r){let i=r.project.originalPackages.get(e.locatorHash);if(!i)throw new Error("The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache");return i}};var AF=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return this.resolver.supportsDescriptor(e,r)}supportsLocator(e,r){return this.resolver.supportsLocator(e,r)}shouldPersistResolution(e,r){return this.resolver.shouldPersistResolution(e,r)}bindDescriptor(e,r,i){return this.resolver.bindDescriptor(e,r,i)}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,i){throw new nt(z.MISSING_LOCKFILE_ENTRY,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async getSatisfying(e,r,i){throw new nt(z.MISSING_LOCKFILE_ENTRY,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async resolve(e,r){throw new nt(z.MISSING_LOCKFILE_ENTRY,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}};var ei=class extends Xi{reportCacheHit(e){}reportCacheMiss(e){}startTimerSync(e,r,i){return(typeof r=="function"?r:i)()}async startTimerPromise(e,r,i){return await(typeof r=="function"?r:i)()}async startCacheReport(e){return await e()}reportSeparator(){}reportInfo(e,r){}reportWarning(e,r){}reportError(e,r){}reportProgress(e){let r=Promise.resolve().then(async()=>{for await(let{}of e);}),i=()=>{};return _(P({},r),{stop:i})}reportJson(e){}async finalize(){}};var b$=ie(vx());var Dd=class{constructor(e,{project:r}){this.workspacesCwds=new Set;this.dependencies=new Map;this.project=r,this.cwd=e}async setup(){this.manifest=T.existsSync(v.join(this.cwd,Ze.fileName))?await Ze.find(this.cwd):new Ze,this.relativeCwd=v.relative(this.project.cwd,this.cwd)||Se.dot;let e=this.manifest.name?this.manifest.name:Eo(null,`${this.computeCandidateName()}-${zi(this.relativeCwd).substr(0,6)}`),r=this.manifest.version?this.manifest.version:"0.0.0";this.locator=Vi(e,r),this.anchoredDescriptor=Yt(this.locator,`${Yr.protocol}${this.relativeCwd}`),this.anchoredLocator=Vi(this.locator,`${Yr.protocol}${this.relativeCwd}`);let i=this.manifest.workspaceDefinitions.map(({pattern:s})=>s),n=await(0,b$.default)(i,{cwd:M.fromPortablePath(this.cwd),expandDirectories:!1,onlyDirectories:!0,onlyFiles:!1,ignore:["**/node_modules","**/.git","**/.yarn"]});n.sort();for(let s of n){let o=v.resolve(this.cwd,M.toPortablePath(s));T.existsSync(v.join(o,"package.json"))&&this.workspacesCwds.add(o)}}accepts(e){var o;let r=e.indexOf(":"),i=r!==-1?e.slice(0,r+1):null,n=r!==-1?e.slice(r+1):e;if(i===Yr.protocol&&v.normalize(n)===this.relativeCwd||i===Yr.protocol&&(n==="*"||n==="^"||n==="~"))return!0;let s=Us(n);return s?i===Yr.protocol?s.test((o=this.manifest.version)!=null?o:"0.0.0"):this.project.configuration.get("enableTransparentWorkspaces")&&this.manifest.version!==null?s.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?"root-workspace":`${v.basename(this.cwd)}`||"unnamed-workspace"}getRecursiveWorkspaceDependencies({dependencies:e=Ze.hardDependencies}={}){let r=new Set,i=n=>{for(let s of e)for(let o of n.manifest[s].values()){let a=this.project.tryWorkspaceByDescriptor(o);a===null||r.has(a)||(r.add(a),i(a))}};return i(this),r}getRecursiveWorkspaceDependents({dependencies:e=Ze.hardDependencies}={}){let r=new Set,i=n=>{for(let s of this.project.workspaces)e.some(a=>[...s.manifest[a].values()].some(l=>{let c=this.project.tryWorkspaceByDescriptor(l);return c!==null&&up(c.anchoredLocator,n.anchoredLocator)}))&&!r.has(s)&&(r.add(s),i(s))};return i(this),r}getRecursiveWorkspaceChildren(){let e=[];for(let r of this.workspacesCwds){let i=this.project.workspacesByCwd.get(r);i&&e.push(i,...i.getRecursiveWorkspaceChildren())}return e}async persistManifest(){let e={};this.manifest.exportTo(e);let r=v.join(this.cwd,Ze.fileName),i=`${JSON.stringify(e,null,this.manifest.indent)} +`;await T.changeFilePromise(r,i,{automaticNewlines:!0}),this.manifest.raw=e}};var k$=5,nUe=1,sUe=/ *, */g,P$=/\/$/,oUe=32,aUe=(0,lF.promisify)(uF.default.gzip),AUe=(0,lF.promisify)(uF.default.gunzip),li;(function(r){r.UpdateLockfile="update-lockfile",r.SkipBuild="skip-build"})(li||(li={}));var gF={restoreInstallersCustomData:["installersCustomData"],restoreResolutions:["accessibleLocators","conditionalLocators","disabledLocators","optionalBuilds","storedDescriptors","storedResolutions","storedPackages","lockFileChecksum"],restoreBuildState:["storedBuildState"]},D$=t=>zi(`${nUe}`,t),Ke=class{constructor(e,{configuration:r}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.installersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=r,this.cwd=e}static async find(e,r){var c,u,g;if(!e.projectCwd)throw new me(`No project found in ${r}`);let i=e.projectCwd,n=r,s=null;for(;s!==e.projectCwd;){if(s=n,T.existsSync(v.join(s,wt.manifest))){i=s;break}n=v.dirname(s)}let o=new Ke(e.projectCwd,{configuration:e});(c=fe.telemetry)==null||c.reportProject(o.cwd),await o.setupResolutions(),await o.setupWorkspaces(),(u=fe.telemetry)==null||u.reportWorkspaceCount(o.workspaces.length),(g=fe.telemetry)==null||g.reportDependencyCount(o.workspaces.reduce((f,h)=>f+h.manifest.dependencies.size+h.manifest.devDependencies.size,0));let a=o.tryWorkspaceByCwd(i);if(a)return{project:o,workspace:a,locator:a.anchoredLocator};let l=await o.findLocatorForLocation(`${i}/`,{strict:!0});if(l)return{project:o,locator:l,workspace:null};throw new me(`The nearest package directory (${Ve(e,i,Le.PATH)}) doesn't seem to be part of the project declared in ${Ve(e,o.cwd,Le.PATH)}. + +- If the project directory is right, it might be that you forgot to list ${Ve(e,v.relative(o.cwd,i),Le.PATH)} as a workspace. +- If it isn't, it's likely because you have a yarn.lock or package.json file there, confusing the project root detection.`)}async setupResolutions(){var i;this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=v.join(this.cwd,this.configuration.get("lockfileFilename")),r=this.configuration.get("defaultLanguageName");if(T.existsSync(e)){let n=await T.readFilePromise(e,"utf8");this.lockFileChecksum=D$(n);let s=Ii(n);if(s.__metadata){let o=s.__metadata.version,a=s.__metadata.cacheKey;this.lockfileNeedsRefresh=o0;){let r=e;e=[];for(let i of r){if(this.workspacesByCwd.has(i))continue;let n=await this.addWorkspace(i),s=this.storedPackages.get(n.anchoredLocator.locatorHash);s&&(n.dependencies=s.dependencies);for(let o of n.workspacesCwds)e.push(o)}}}async addWorkspace(e){let r=new Dd(e,{project:this});await r.setup();let i=this.workspacesByIdent.get(r.locator.identHash);if(typeof i!="undefined")throw new Error(`Duplicate workspace name ${Vr(this.configuration,r.locator)}: ${M.fromPortablePath(e)} conflicts with ${M.fromPortablePath(i.cwd)}`);return this.workspaces.push(r),this.workspacesByCwd.set(e,r),this.workspacesByIdent.set(r.locator.identHash,r),r}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){v.isAbsolute(e)||(e=v.resolve(this.cwd,e)),e=v.normalize(e).replace(/\/+$/,"");let r=this.workspacesByCwd.get(e);return r||null}getWorkspaceByCwd(e){let r=this.tryWorkspaceByCwd(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByFilePath(e){let r=null;for(let i of this.workspaces)v.relative(i.cwd,e).startsWith("../")||r&&r.cwd.length>=i.cwd.length||(r=i);return r||null}getWorkspaceByFilePath(e){let r=this.tryWorkspaceByFilePath(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByIdent(e){let r=this.workspacesByIdent.get(e.identHash);return typeof r=="undefined"?null:r}getWorkspaceByIdent(e){let r=this.tryWorkspaceByIdent(e);if(!r)throw new Error(`Workspace not found (${Vr(this.configuration,e)})`);return r}tryWorkspaceByDescriptor(e){let r=this.tryWorkspaceByIdent(e);return r===null||(hA(e)&&(e=Ap(e)),!r.accepts(e.range))?null:r}getWorkspaceByDescriptor(e){let r=this.tryWorkspaceByDescriptor(e);if(r===null)throw new Error(`Workspace not found (${Xt(this.configuration,e)})`);return r}tryWorkspaceByLocator(e){let r=this.tryWorkspaceByIdent(e);return r===null||(Io(e)&&(e=lp(e)),r.locator.locatorHash!==e.locatorHash&&r.anchoredLocator.locatorHash!==e.locatorHash)?null:r}getWorkspaceByLocator(e){let r=this.tryWorkspaceByLocator(e);if(!r)throw new Error(`Workspace not found (${lt(this.configuration,e)})`);return r}refreshWorkspaceDependencies(){for(let e of this.workspaces){let r=this.storedPackages.get(e.anchoredLocator.locatorHash);if(!r)throw new Error(`Assertion failed: Expected workspace ${hp(this.configuration,e)} (${Ve(this.configuration,v.join(e.cwd,wt.manifest),Le.PATH)}) to have been resolved. Run "yarn install" to update the lockfile`);e.dependencies=new Map(r.dependencies)}}forgetResolution(e){let r=n=>{this.storedResolutions.delete(n),this.storedDescriptors.delete(n)},i=n=>{this.originalPackages.delete(n),this.storedPackages.delete(n),this.accessibleLocators.delete(n)};if("descriptorHash"in e){let n=this.storedResolutions.get(e.descriptorHash);r(e.descriptorHash);let s=new Set(this.storedResolutions.values());typeof n!="undefined"&&!s.has(n)&&i(n)}if("locatorHash"in e){i(e.locatorHash);for(let[n,s]of this.storedResolutions)s===e.locatorHash&&r(n)}}forgetTransientResolutions(){let e=this.configuration.makeResolver();for(let r of this.originalPackages.values()){let i;try{i=e.shouldPersistResolution(r,{project:this,resolver:e})}catch{i=!1}i||this.forgetResolution(r)}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[r,i]of e.dependencies)hA(i)&&e.dependencies.set(r,Ap(i))}getDependencyMeta(e,r){let i={},s=this.topLevelWorkspace.manifest.dependenciesMeta.get(St(e));if(!s)return i;let o=s.get(null);if(o&&Object.assign(i,o),r===null||!x$.default.valid(r))return i;for(let[a,l]of s)a!==null&&a===r&&Object.assign(i,l);return i}async findLocatorForLocation(e,{strict:r=!1}={}){let i=new ei,n=this.configuration.getLinkers(),s={project:this,report:i};for(let o of n){let a=await o.findPackageLocator(e,s);if(a){if(r&&(await o.findPackageLocation(a,s)).replace(P$,"")!==e.replace(P$,""))continue;return a}}return null}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error("Workspaces must have been setup before calling this function");this.forgetVirtualResolutions(),e.lockfileOnly||this.forgetTransientResolutions();let r=e.resolver||this.configuration.makeResolver(),i=new oF;await i.setup(this,{report:e.report});let n=e.lockfileOnly?[new AF(r)]:[i,r],s=new pd([new aF(r),...n]),o=this.configuration.makeFetcher(),a=e.lockfileOnly?{project:this,report:e.report,resolver:s}:{project:this,report:e.report,resolver:s,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:o,cacheOptions:{mirrorWriteOnly:!0}}},l=new Map,c=new Map,u=new Map,g=new Map,f=new Map,h=new Map,p=this.topLevelWorkspace.anchoredLocator,d=new Set,m=[],I=async W=>{let X=await du(async()=>await s.resolve(W,a),D=>`${lt(this.configuration,W)}: ${D}`);if(!up(W,X))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${lt(this.configuration,W)} to ${lt(this.configuration,X)})`);g.set(X.locatorHash,X);let F=this.configuration.normalizePackage(X);for(let[D,he]of F.dependencies){let pe=await this.configuration.reduceHook(Pe=>Pe.reduceDependency,he,this,F,he,{resolver:s,resolveOptions:a});if(!cp(he,pe))throw new Error("Assertion failed: The descriptor ident cannot be changed through aliases");let Ne=s.bindDescriptor(pe,W,a);F.dependencies.set(D,Ne)}return m.push(Promise.all([...F.dependencies.values()].map(D=>H(D)))),c.set(F.locatorHash,F),F},B=async W=>{let X=f.get(W.locatorHash);if(typeof X!="undefined")return X;let F=Promise.resolve().then(()=>I(W));return f.set(W.locatorHash,F),F},b=async(W,X)=>{let F=await H(X);return l.set(W.descriptorHash,W),u.set(W.descriptorHash,F.locatorHash),F},R=async W=>{let X=this.resolutionAliases.get(W.descriptorHash);if(typeof X!="undefined")return b(W,this.storedDescriptors.get(X));let F=s.getResolutionDependencies(W,a),D=new Map(await Promise.all(F.map(async Ne=>{let Pe=s.bindDescriptor(Ne,p,a),qe=await H(Pe);return d.add(qe.locatorHash),[Ne.descriptorHash,qe]}))),pe=(await du(async()=>await s.getCandidates(W,D,a),Ne=>`${Xt(this.configuration,W)}: ${Ne}`))[0];if(typeof pe=="undefined")throw new Error(`${Xt(this.configuration,W)}: No candidates found`);return l.set(W.descriptorHash,W),u.set(W.descriptorHash,pe.locatorHash),B(pe)},H=W=>{let X=h.get(W.descriptorHash);if(typeof X!="undefined")return X;l.set(W.descriptorHash,W);let F=Promise.resolve().then(()=>R(W));return h.set(W.descriptorHash,F),F};for(let W of this.workspaces){let X=W.anchoredDescriptor;m.push(H(X))}for(;m.length>0;){let W=[...m];m.length=0,await Promise.all(W)}let L=new Set(this.resolutionAliases.values()),K=new Set(c.keys()),J=new Set,ne=new Map;lUe({project:this,report:e.report,accessibleLocators:J,volatileDescriptors:L,optionalBuilds:K,peerRequirements:ne,allDescriptors:l,allResolutions:u,allPackages:c});for(let W of d)K.delete(W);for(let W of L)l.delete(W),u.delete(W);let q=this.configuration.getSupportedArchitectures(),A=new Set,V=new Set;for(let W of c.values())W.conditions!=null&&(!K.has(W.locatorHash)||(Sy(W,q)||(Sy(W,{os:[process.platform],cpu:[process.arch]})&&e.report.reportWarningOnce(z.GHOST_ARCHITECTURE,`${lt(this.configuration,W)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${Ve(this.configuration,"supportedArchitectures",ps.SETTING)} setting`),V.add(W.locatorHash)),A.add(W.locatorHash)));this.storedResolutions=u,this.storedDescriptors=l,this.storedPackages=c,this.accessibleLocators=J,this.conditionalLocators=A,this.disabledLocators=V,this.originalPackages=g,this.optionalBuilds=K,this.peerRequirements=ne,this.refreshWorkspaceDependencies()}async fetchEverything({cache:e,report:r,fetcher:i,mode:n}){let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:r,cacheOptions:s},l=Array.from(new Set(gn(this.storedResolutions.values(),[f=>{let h=this.storedPackages.get(f);if(!h)throw new Error("Assertion failed: The locator should have been registered");return is(h)}])));n===li.UpdateLockfile&&(l=l.filter(f=>!this.storedChecksums.has(f)));let c=!1,u=Xi.progressViaCounter(l.length);r.reportProgress(u);let g=(0,S$.default)(oUe);if(await r.startCacheReport(async()=>{await Promise.all(l.map(f=>g(async()=>{let h=this.storedPackages.get(f);if(!h)throw new Error("Assertion failed: The locator should have been registered");if(Io(h))return;let p;try{p=await o.fetch(h,a)}catch(d){d.message=`${lt(this.configuration,h)}: ${d.message}`,r.reportExceptionOnce(d),c=d;return}p.checksum!=null?this.storedChecksums.set(h.locatorHash,p.checksum):this.storedChecksums.delete(h.locatorHash),p.releaseFs&&p.releaseFs()}).finally(()=>{u.tick()})))}),c)throw c}async linkEverything({cache:e,report:r,fetcher:i,mode:n}){var A,V,W;let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:r,skipIntegrityCheck:!0,cacheOptions:s},l=this.configuration.getLinkers(),c={project:this,report:r},u=new Map(l.map(X=>{let F=X.makeInstaller(c),D=F.getCustomDataKey(),he=this.installersCustomData.get(D);return typeof he!="undefined"&&F.attachCustomData(he),[X,F]})),g=new Map,f=new Map,h=new Map,p=new Map(await Promise.all([...this.accessibleLocators].map(async X=>{let F=this.storedPackages.get(X);if(!F)throw new Error("Assertion failed: The locator should have been registered");return[X,await o.fetch(F,a)]}))),d=[];for(let X of this.accessibleLocators){let F=this.storedPackages.get(X);if(typeof F=="undefined")throw new Error("Assertion failed: The locator should have been registered");let D=p.get(F.locatorHash);if(typeof D=="undefined")throw new Error("Assertion failed: The fetch result should have been registered");let he=[],pe=Pe=>{he.push(Pe)},Ne=this.tryWorkspaceByLocator(F);if(Ne!==null){let Pe=[],{scripts:qe}=Ne.manifest;for(let se of["preinstall","install","postinstall"])qe.has(se)&&Pe.push([Gn.SCRIPT,se]);try{for(let[se,be]of u)if(se.supportsPackage(F,c)&&(await be.installPackage(F,D,{holdFetchResult:pe})).buildDirective!==null)throw new Error("Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core")}finally{he.length===0?(A=D.releaseFs)==null||A.call(D):d.push(Promise.all(he).catch(()=>{}).then(()=>{var se;(se=D.releaseFs)==null||se.call(D)}))}let re=v.join(D.packageFs.getRealPath(),D.prefixPath);f.set(F.locatorHash,re),!Io(F)&&Pe.length>0&&h.set(F.locatorHash,{directives:Pe,buildLocations:[re]})}else{let Pe=l.find(se=>se.supportsPackage(F,c));if(!Pe)throw new nt(z.LINKER_NOT_FOUND,`${lt(this.configuration,F)} isn't supported by any available linker`);let qe=u.get(Pe);if(!qe)throw new Error("Assertion failed: The installer should have been registered");let re;try{re=await qe.installPackage(F,D,{holdFetchResult:pe})}finally{he.length===0?(V=D.releaseFs)==null||V.call(D):d.push(Promise.all(he).then(()=>{}).then(()=>{var se;(se=D.releaseFs)==null||se.call(D)}))}g.set(F.locatorHash,Pe),f.set(F.locatorHash,re.packageLocation),re.buildDirective&&re.buildDirective.length>0&&re.packageLocation&&h.set(F.locatorHash,{directives:re.buildDirective,buildLocations:[re.packageLocation]})}}let m=new Map;for(let X of this.accessibleLocators){let F=this.storedPackages.get(X);if(!F)throw new Error("Assertion failed: The locator should have been registered");let D=this.tryWorkspaceByLocator(F)!==null,he=async(pe,Ne)=>{let Pe=f.get(F.locatorHash);if(typeof Pe=="undefined")throw new Error(`Assertion failed: The package (${lt(this.configuration,F)}) should have been registered`);let qe=[];for(let re of F.dependencies.values()){let se=this.storedResolutions.get(re.descriptorHash);if(typeof se=="undefined")throw new Error(`Assertion failed: The resolution (${Xt(this.configuration,re)}, from ${lt(this.configuration,F)})should have been registered`);let be=this.storedPackages.get(se);if(typeof be=="undefined")throw new Error(`Assertion failed: The package (${se}, resolved from ${Xt(this.configuration,re)}) should have been registered`);let ae=this.tryWorkspaceByLocator(be)===null?g.get(se):null;if(typeof ae=="undefined")throw new Error(`Assertion failed: The package (${se}, resolved from ${Xt(this.configuration,re)}) should have been registered`);ae===pe||ae===null?f.get(be.locatorHash)!==null&&qe.push([re,be]):!D&&Pe!==null&&hu(m,se).push(Pe)}Pe!==null&&await Ne.attachInternalDependencies(F,qe)};if(D)for(let[pe,Ne]of u)pe.supportsPackage(F,c)&&await he(pe,Ne);else{let pe=g.get(F.locatorHash);if(!pe)throw new Error("Assertion failed: The linker should have been found");let Ne=u.get(pe);if(!Ne)throw new Error("Assertion failed: The installer should have been registered");await he(pe,Ne)}}for(let[X,F]of m){let D=this.storedPackages.get(X);if(!D)throw new Error("Assertion failed: The package should have been registered");let he=g.get(D.locatorHash);if(!he)throw new Error("Assertion failed: The linker should have been found");let pe=u.get(he);if(!pe)throw new Error("Assertion failed: The installer should have been registered");await pe.attachExternalDependents(D,F)}let I=new Map;for(let X of u.values()){let F=await X.finalizeInstall();for(let D of(W=F==null?void 0:F.records)!=null?W:[])h.set(D.locatorHash,{directives:D.buildDirective,buildLocations:D.buildLocations});typeof(F==null?void 0:F.customData)!="undefined"&&I.set(X.getCustomDataKey(),F.customData)}if(this.installersCustomData=I,await Promise.all(d),n===li.SkipBuild)return;let B=new Set(this.storedPackages.keys()),b=new Set(h.keys());for(let X of b)B.delete(X);let R=(0,t0.createHash)("sha512");R.update(process.versions.node),await this.configuration.triggerHook(X=>X.globalHashGeneration,this,X=>{R.update("\0"),R.update(X)});let H=R.digest("hex"),L=new Map,K=X=>{let F=L.get(X.locatorHash);if(typeof F!="undefined")return F;let D=this.storedPackages.get(X.locatorHash);if(typeof D=="undefined")throw new Error("Assertion failed: The package should have been registered");let he=(0,t0.createHash)("sha512");he.update(X.locatorHash),L.set(X.locatorHash,"");for(let pe of D.dependencies.values()){let Ne=this.storedResolutions.get(pe.descriptorHash);if(typeof Ne=="undefined")throw new Error(`Assertion failed: The resolution (${Xt(this.configuration,pe)}) should have been registered`);let Pe=this.storedPackages.get(Ne);if(typeof Pe=="undefined")throw new Error("Assertion failed: The package should have been registered");he.update(K(Pe))}return F=he.digest("hex"),L.set(X.locatorHash,F),F},J=(X,F)=>{let D=(0,t0.createHash)("sha512");D.update(H),D.update(K(X));for(let he of F)D.update(he);return D.digest("hex")},ne=new Map,q=!1;for(;b.size>0;){let X=b.size,F=[];for(let D of b){let he=this.storedPackages.get(D);if(!he)throw new Error("Assertion failed: The package should have been registered");let pe=!0;for(let qe of he.dependencies.values()){let re=this.storedResolutions.get(qe.descriptorHash);if(!re)throw new Error(`Assertion failed: The resolution (${Xt(this.configuration,qe)}) should have been registered`);if(b.has(re)){pe=!1;break}}if(!pe)continue;b.delete(D);let Ne=h.get(he.locatorHash);if(!Ne)throw new Error("Assertion failed: The build directive should have been registered");let Pe=J(he,Ne.buildLocations);if(this.storedBuildState.get(he.locatorHash)===Pe){ne.set(he.locatorHash,Pe);continue}q||(await this.persistInstallStateFile(),q=!0),this.storedBuildState.has(he.locatorHash)?r.reportInfo(z.MUST_REBUILD,`${lt(this.configuration,he)} must be rebuilt because its dependency tree changed`):r.reportInfo(z.MUST_BUILD,`${lt(this.configuration,he)} must be built because it never has been before or the last one failed`);for(let qe of Ne.buildLocations){if(!v.isAbsolute(qe))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${qe})`);F.push((async()=>{for(let[re,se]of Ne.directives){let be=`# This file contains the result of Yarn building a package (${is(he)}) +`;switch(re){case Gn.SCRIPT:be+=`# Script name: ${se} +`;break;case Gn.SHELLCODE:be+=`# Script code: ${se} +`;break}let ae=null;if(!await T.mktempPromise(async De=>{let $=v.join(De,"build.log"),{stdout:G,stderr:Ce}=this.configuration.getSubprocessStreams($,{header:be,prefix:lt(this.configuration,he),report:r}),ee;try{switch(re){case Gn.SCRIPT:ee=await Uw(he,se,[],{cwd:qe,project:this,stdin:ae,stdout:G,stderr:Ce});break;case Gn.SHELLCODE:ee=await rD(he,se,[],{cwd:qe,project:this,stdin:ae,stdout:G,stderr:Ce});break}}catch(Oe){Ce.write(Oe.stack),ee=1}if(G.end(),Ce.end(),ee===0)return ne.set(he.locatorHash,Pe),!0;T.detachTemp(De);let Ue=`${lt(this.configuration,he)} couldn't be built successfully (exit code ${Ve(this.configuration,ee,Le.NUMBER)}, logs can be found here: ${Ve(this.configuration,$,Le.PATH)})`;return this.optionalBuilds.has(he.locatorHash)?(r.reportInfo(z.BUILD_FAILED,Ue),ne.set(he.locatorHash,Pe),!0):(r.reportError(z.BUILD_FAILED,Ue),!1)}))return}})())}}if(await Promise.all(F),X===b.size){let D=Array.from(b).map(he=>{let pe=this.storedPackages.get(he);if(!pe)throw new Error("Assertion failed: The package should have been registered");return lt(this.configuration,pe)}).join(", ");r.reportError(z.CYCLIC_DEPENDENCIES,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${D})`);break}}this.storedBuildState=ne}async install(e){var a,l;let r=this.configuration.get("nodeLinker");(a=fe.telemetry)==null||a.reportInstall(r),await e.report.startTimerPromise("Project validation",{skipIfEmpty:!0},async()=>{await this.configuration.triggerHook(c=>c.validateProject,this,{reportWarning:e.report.reportWarning.bind(e.report),reportError:e.report.reportError.bind(e.report)})});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.status=ki.Inactive;let i=v.join(this.cwd,this.configuration.get("lockfileFilename")),n=null;if(e.immutable)try{n=await T.readFilePromise(i,"utf8")}catch(c){throw c.code==="ENOENT"?new nt(z.FROZEN_LOCKFILE_EXCEPTION,"The lockfile would have been created by this install, which is explicitly forbidden."):c}await e.report.startTimerPromise("Resolution step",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise("Post-resolution validation",{skipIfEmpty:!0},async()=>{for(let[,c]of this.configuration.packageExtensions)for(let[,u]of c)for(let g of u)if(g.userProvided){let f=Ve(this.configuration,g,Le.PACKAGE_EXTENSION);switch(g.status){case ki.Inactive:e.report.reportWarning(z.UNUSED_PACKAGE_EXTENSION,`${f}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case ki.Redundant:e.report.reportWarning(z.REDUNDANT_PACKAGE_EXTENSION,`${f}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(n!==null){let c=ul(n,this.generateLockfile());if(c!==n){let u=(0,v$.structuredPatch)(i,i,n,c);e.report.reportSeparator();for(let g of u.hunks){e.report.reportInfo(null,`@@ -${g.oldStart},${g.oldLines} +${g.newStart},${g.newLines} @@`);for(let f of g.lines)f.startsWith("+")?e.report.reportError(z.FROZEN_LOCKFILE_EXCEPTION,Ve(this.configuration,f,Le.ADDED)):f.startsWith("-")?e.report.reportError(z.FROZEN_LOCKFILE_EXCEPTION,Ve(this.configuration,f,Le.REMOVED)):e.report.reportInfo(null,Ve(this.configuration,f,"grey"))}throw e.report.reportSeparator(),new nt(z.FROZEN_LOCKFILE_EXCEPTION,"The lockfile would have been modified by this install, which is explicitly forbidden.")}}});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.userProvided&&g.status===ki.Active&&((l=fe.telemetry)==null||l.reportPackageExtension(Uu(g,Le.PACKAGE_EXTENSION)));await e.report.startTimerPromise("Fetch step",async()=>{await this.fetchEverything(e),(typeof e.persistProject=="undefined"||e.persistProject)&&e.mode!==li.UpdateLockfile&&await this.cacheCleanup(e)});let s=e.immutable?[...new Set(this.configuration.get("immutablePatterns"))].sort():[],o=await Promise.all(s.map(async c=>Iy(c,{cwd:this.cwd})));(typeof e.persistProject=="undefined"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise("Link step",async()=>{if(e.mode===li.UpdateLockfile){e.report.reportWarning(z.UPDATE_LOCKFILE_ONLY_SKIP_LINK,`Skipped due to ${Ve(this.configuration,"mode=update-lockfile",Le.CODE)}`);return}await this.linkEverything(e);let c=await Promise.all(s.map(async u=>Iy(u,{cwd:this.cwd})));for(let u=0;uc.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,s]of this.storedResolutions.entries()){let o=e.get(s);o||e.set(s,o=new Set),o.add(n)}let r={};r.__metadata={version:k$,cacheKey:void 0};for(let[n,s]of e.entries()){let o=this.originalPackages.get(n);if(!o)continue;let a=[];for(let f of s){let h=this.storedDescriptors.get(f);if(!h)throw new Error("Assertion failed: The descriptor should have been registered");a.push(h)}let l=a.map(f=>In(f)).sort().join(", "),c=new Ze;c.version=o.linkType===gt.HARD?o.version:"0.0.0-use.local",c.languageName=o.languageName,c.dependencies=new Map(o.dependencies),c.peerDependencies=new Map(o.peerDependencies),c.dependenciesMeta=new Map(o.dependenciesMeta),c.peerDependenciesMeta=new Map(o.peerDependenciesMeta),c.bin=new Map(o.bin);let u,g=this.storedChecksums.get(o.locatorHash);if(typeof g!="undefined"){let f=g.indexOf("/");if(f===-1)throw new Error("Assertion failed: Expected the checksum to reference its cache key");let h=g.slice(0,f),p=g.slice(f+1);typeof r.__metadata.cacheKey=="undefined"&&(r.__metadata.cacheKey=h),h===r.__metadata.cacheKey?u=p:u=g}r[l]=_(P({},c.exportTo({},{compatibilityMode:!1})),{linkType:o.linkType.toLowerCase(),resolution:is(o),checksum:u,conditions:o.conditions||void 0})}return`${[`# This file is generated by running "yarn install" inside your project. +`,`# Manual changes might be lost - proceed with caution! +`].join("")} +`+Qa(r)}async persistLockfile(){let e=v.join(this.cwd,this.configuration.get("lockfileFilename")),r="";try{r=await T.readFilePromise(e,"utf8")}catch(s){}let i=this.generateLockfile(),n=ul(r,i);n!==r&&(await T.writeFilePromise(e,n),this.lockFileChecksum=D$(n),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let o of Object.values(gF))e.push(...o);let r=(0,r0.default)(this,e),i=cF.default.serialize(r),n=zi(i);if(this.installStateChecksum===n)return;let s=this.configuration.get("installStatePath");await T.mkdirPromise(v.dirname(s),{recursive:!0}),await T.writeFilePromise(s,await aUe(i)),this.installStateChecksum=n}async restoreInstallState({restoreInstallersCustomData:e=!0,restoreResolutions:r=!0,restoreBuildState:i=!0}={}){let n=this.configuration.get("installStatePath");if(!T.existsSync(n)){r&&await this.applyLightResolution();return}let s=await AUe(await T.readFilePromise(n));this.installStateChecksum=zi(s);let o=cF.default.deserialize(s);e&&typeof o.installersCustomData!="undefined"&&(this.installersCustomData=o.installersCustomData),i&&Object.assign(this,(0,r0.default)(o,gF.restoreBuildState)),r&&(o.lockFileChecksum===this.lockFileChecksum?(Object.assign(this,(0,r0.default)(o,gF.restoreResolutions)),this.refreshWorkspaceDependencies()):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new ei}),await this.persistInstallStateFile()}async persist(){await this.persistLockfile();for(let e of this.workspacesByCwd.values())await e.persistManifest()}async cacheCleanup({cache:e,report:r}){let i=new Set([".gitignore"]);if(!Fb(e.cwd,this.cwd)||!await T.existsPromise(e.cwd))return;let n=this.configuration.get("preferAggregateCacheInfo"),s=0,o=null;for(let a of await T.readdirPromise(e.cwd)){if(i.has(a))continue;let l=v.resolve(e.cwd,a);e.markedFiles.has(l)||(o=a,e.immutable?r.reportError(z.IMMUTABLE_CACHE,`${Ve(this.configuration,v.basename(l),"magenta")} appears to be unused and would be marked for deletion, but the cache is immutable`):(n?s+=1:r.reportInfo(z.UNUSED_CACHE_ENTRY,`${Ve(this.configuration,v.basename(l),"magenta")} appears to be unused - removing`),await T.removePromise(l)))}n&&s!==0&&r.reportInfo(z.UNUSED_CACHE_ENTRY,s>1?`${s} packages appeared to be unused and were removed`:`${o} appeared to be unused and was removed`),e.markedFiles.clear()}};function lUe({project:t,allDescriptors:e,allResolutions:r,allPackages:i,accessibleLocators:n=new Set,optionalBuilds:s=new Set,volatileDescriptors:o=new Set,peerRequirements:a=new Map,report:l,tolerateMissingPackages:c=!1}){var ne;let u=new Map,g=[],f=new Map,h=new Map,p=new Map,d=new Map,m=new Map,I=new Map(t.workspaces.map(q=>{let A=q.anchoredLocator.locatorHash,V=i.get(A);if(typeof V=="undefined"){if(c)return[A,null];throw new Error("Assertion failed: The workspace should have an associated package")}return[A,ap(V)]})),B=()=>{let q=T.mktempSync(),A=v.join(q,"stacktrace.log"),V=String(g.length+1).length,W=g.map((X,F)=>`${`${F+1}.`.padStart(V," ")} ${is(X)} +`).join("");throw T.writeFileSync(A,W),T.detachTemp(q),new nt(z.STACK_OVERFLOW_RESOLUTION,`Encountered a stack overflow when resolving peer dependencies; cf ${M.fromPortablePath(A)}`)},b=q=>{let A=r.get(q.descriptorHash);if(typeof A=="undefined")throw new Error("Assertion failed: The resolution should have been registered");let V=i.get(A);if(!V)throw new Error("Assertion failed: The package could not be found");return V},R=(q,A,V,{top:W,optional:X})=>{g.length>1e3&&B(),g.push(A);let F=H(q,A,V,{top:W,optional:X});return g.pop(),F},H=(q,A,V,{top:W,optional:X})=>{if(n.has(A.locatorHash))return;n.add(A.locatorHash),X||s.delete(A.locatorHash);let F=i.get(A.locatorHash);if(!F){if(c)return;throw new Error(`Assertion failed: The package (${lt(t.configuration,A)}) should have been registered`)}let D=[],he=[],pe=[],Ne=[],Pe=[];for(let re of Array.from(F.dependencies.values())){if(F.peerDependencies.has(re.identHash)&&F.locatorHash!==W)continue;if(hA(re))throw new Error("Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch");o.delete(re.descriptorHash);let se=X;if(!se){let ee=F.dependenciesMeta.get(St(re));if(typeof ee!="undefined"){let Ue=ee.get(null);typeof Ue!="undefined"&&Ue.optional&&(se=!0)}}let be=r.get(re.descriptorHash);if(!be){if(c)continue;throw new Error(`Assertion failed: The resolution (${Xt(t.configuration,re)}) should have been registered`)}let ae=I.get(be)||i.get(be);if(!ae)throw new Error(`Assertion failed: The package (${be}, resolved from ${Xt(t.configuration,re)}) should have been registered`);if(ae.peerDependencies.size===0){R(re,ae,new Map,{top:W,optional:se});continue}let Ae=u.get(ae.locatorHash);typeof Ae=="number"&&Ae>=2&&B();let De,$,G=new Set,Ce;he.push(()=>{De=kx(re,A.locatorHash),$=Px(ae,A.locatorHash),F.dependencies.delete(re.identHash),F.dependencies.set(De.identHash,De),r.set(De.descriptorHash,$.locatorHash),e.set(De.descriptorHash,De),i.set($.locatorHash,$),D.push([ae,De,$])}),pe.push(()=>{var ee;Ce=new Map;for(let Ue of $.peerDependencies.values()){let Oe=F.dependencies.get(Ue.identHash);if(!Oe&&cp(A,Ue)&&(Oe=q),(!Oe||Oe.range==="missing:")&&$.dependencies.has(Ue.identHash)){$.peerDependencies.delete(Ue.identHash);continue}Oe||(Oe=Yt(Ue,"missing:")),$.dependencies.set(Oe.identHash,Oe),hA(Oe)&&Pl(p,Oe.descriptorHash).add($.locatorHash),f.set(Oe.identHash,Oe),Oe.range==="missing:"&&G.add(Oe.identHash),Ce.set(Ue.identHash,(ee=V.get(Ue.identHash))!=null?ee:$.locatorHash)}$.dependencies=new Map(gn($.dependencies,([Ue,Oe])=>St(Oe)))}),Ne.push(()=>{if(!i.has($.locatorHash))return;let ee=u.get(ae.locatorHash),Ue=typeof ee!="undefined"?ee+1:1;u.set(ae.locatorHash,Ue),R(De,$,Ce,{top:W,optional:se}),u.set(ae.locatorHash,Ue-1)}),Pe.push(()=>{let ee=F.dependencies.get(re.identHash);if(typeof ee=="undefined")throw new Error("Assertion failed: Expected the peer dependency to have been turned into a dependency");let Ue=r.get(ee.descriptorHash);if(typeof Ue=="undefined")throw new Error("Assertion failed: Expected the descriptor to be registered");if(Pl(m,Ue).add(A.locatorHash),!!i.has($.locatorHash)){for(let Oe of $.peerDependencies.values()){let vt=Ce.get(Oe.identHash);if(typeof vt=="undefined")throw new Error("Assertion failed: Expected the peer dependency ident to be registered");hu(pu(d,vt),St(Oe)).push($.locatorHash)}for(let Oe of G)$.dependencies.delete(Oe)}})}for(let re of[...he,...pe])re();let qe;do{qe=!0;for(let[re,se,be]of D){if(!i.has(be.locatorHash))continue;let ae=pu(h,re.locatorHash),Ae=zi(...[...be.dependencies.values()].map(Ce=>{let ee=Ce.range!=="missing:"?r.get(Ce.descriptorHash):"missing:";if(typeof ee=="undefined")throw new Error(`Assertion failed: Expected the resolution for ${Xt(t.configuration,Ce)} to have been registered`);return ee===W?`${ee} (top)`:ee}),se.identHash),De=ae.get(Ae);if(typeof De=="undefined"){ae.set(Ae,se);continue}if(De===se)continue;qe=!1,i.delete(be.locatorHash),e.delete(se.descriptorHash),r.delete(se.descriptorHash),n.delete(be.locatorHash);let $=p.get(se.descriptorHash)||[],G=[F.locatorHash,...$];p.delete(se.descriptorHash);for(let Ce of G){let ee=i.get(Ce);typeof ee!="undefined"&&ee.dependencies.set(se.identHash,De)}}}while(!qe);for(let re of[...Ne,...Pe])re()};for(let q of t.workspaces){let A=q.anchoredLocator;o.delete(q.anchoredDescriptor.descriptorHash),R(q.anchoredDescriptor,A,new Map,{top:A.locatorHash,optional:!1})}var L;(function(V){V[V.NotProvided=0]="NotProvided",V[V.NotCompatible=1]="NotCompatible"})(L||(L={}));let K=[];for(let[q,A]of m){let V=i.get(q);if(typeof V=="undefined")throw new Error("Assertion failed: Expected the root to be registered");let W=d.get(q);if(typeof W!="undefined")for(let X of A){let F=i.get(X);if(typeof F!="undefined")for(let[D,he]of W){let pe=En(D);if(F.peerDependencies.has(pe.identHash))continue;let Ne=`p${zi(X,D,q).slice(0,5)}`;a.set(Ne,{subject:X,requested:pe,rootRequester:q,allRequesters:he});let Pe=V.dependencies.get(pe.identHash);if(typeof Pe!="undefined"){let qe=b(Pe),re=(ne=qe.version)!=null?ne:"0.0.0",se=new Set;for(let ae of he){let Ae=i.get(ae);if(typeof Ae=="undefined")throw new Error("Assertion failed: Expected the link to be registered");let De=Ae.peerDependencies.get(pe.identHash);if(typeof De=="undefined")throw new Error("Assertion failed: Expected the ident to be registered");se.add(De.range)}[...se].every(ae=>{if(ae.startsWith(Yr.protocol)){if(!t.tryWorkspaceByLocator(qe))return!1;ae=ae.slice(Yr.protocol.length),(ae==="^"||ae==="~")&&(ae="*")}return lc(re,ae)})||K.push({type:1,subject:F,requested:pe,requester:V,version:re,hash:Ne,requirementCount:he.length})}else{let qe=V.peerDependenciesMeta.get(D);(qe==null?void 0:qe.optional)||K.push({type:0,subject:F,requested:pe,requester:V,hash:Ne})}}}}let J=[q=>Rx(q.subject),q=>St(q.requested),q=>`${q.type}`];for(let q of gn(K,J))switch(q.type){case 0:l==null||l.reportWarning(z.MISSING_PEER_DEPENDENCY,`${lt(t.configuration,q.subject)} doesn't provide ${Vr(t.configuration,q.requested)} (${Ve(t.configuration,q.hash,Le.CODE)}), requested by ${Vr(t.configuration,q.requester)}`);break;case 1:{let A=q.requirementCount>1?"and some of its descendants request":"requests";l==null||l.reportWarning(z.INCOMPATIBLE_PEER_DEPENDENCY,`${lt(t.configuration,q.subject)} provides ${Vr(t.configuration,q.requested)} (${Ve(t.configuration,q.hash,Le.CODE)}) with version ${fp(t.configuration,q.version)}, which doesn't satisfy what ${Vr(t.configuration,q.requester)} ${A}`)}break}K.length>0&&(l==null||l.reportWarning(z.UNNAMED,`Some peer dependencies are incorrectly met; run ${Ve(t.configuration,"yarn explain peer-requirements ",Le.CODE)} for details, where ${Ve(t.configuration,"",Le.CODE)} is the six-letter p-prefixed code`))}var Po;(function(l){l.VERSION="version",l.COMMAND_NAME="commandName",l.PLUGIN_NAME="pluginName",l.INSTALL_COUNT="installCount",l.PROJECT_COUNT="projectCount",l.WORKSPACE_COUNT="workspaceCount",l.DEPENDENCY_COUNT="dependencyCount",l.EXTENSION="packageExtension"})(Po||(Po={}));var Rd=class{constructor(e,r){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.configuration=e;let i=this.getRegistryPath();this.isNew=!T.existsSync(i),this.sendReport(r),this.startBuffer()}reportVersion(e){this.reportValue(Po.VERSION,e.replace(/-git\..*/,"-git"))}reportCommandName(e){this.reportValue(Po.COMMAND_NAME,e||"")}reportPluginName(e){this.reportValue(Po.PLUGIN_NAME,e)}reportProject(e){this.reportEnumerator(Po.PROJECT_COUNT,e)}reportInstall(e){this.reportHit(Po.INSTALL_COUNT,e)}reportPackageExtension(e){this.reportValue(Po.EXTENSION,e)}reportWorkspaceCount(e){this.reportValue(Po.WORKSPACE_COUNT,String(e))}reportDependencyCount(e){this.reportValue(Po.DEPENDENCY_COUNT,String(e))}reportValue(e,r){Pl(this.values,e).add(r)}reportEnumerator(e,r){Pl(this.enumerators,e).add(zi(r))}reportHit(e,r="*"){let i=pu(this.hits,e),n=na(i,r,()=>0);i.set(r,n+1)}getRegistryPath(){let e=this.configuration.get("globalFolder");return v.join(e,"telemetry.json")}sendReport(e){var u,g,f;let r=this.getRegistryPath(),i;try{i=T.readJsonSync(r)}catch{i={}}let n=Date.now(),s=this.configuration.get("telemetryInterval")*24*60*60*1e3,a=((u=i.lastUpdate)!=null?u:n+s+Math.floor(s*Math.random()))+s;if(a>n&&i.lastUpdate!=null)return;try{T.mkdirSync(v.dirname(r),{recursive:!0}),T.writeJsonSync(r,{lastUpdate:n})}catch{return}if(a>n||!i.blocks)return;let l=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,c=h=>iP(l,h,{configuration:this.configuration}).catch(()=>{});for(let[h,p]of Object.entries((g=i.blocks)!=null?g:{})){if(Object.keys(p).length===0)continue;let d=p;d.userId=h,d.reportType="primary";for(let B of Object.keys((f=d.enumerators)!=null?f:{}))d.enumerators[B]=d.enumerators[B].length;c(d);let m=new Map,I=20;for(let[B,b]of Object.entries(d.values))b.length>0&&m.set(B,b.slice(0,I));for(;m.size>0;){let B={};B.userId=h,B.reportType="secondary",B.metrics={};for(let[b,R]of m)B.metrics[b]=R.shift(),R.length===0&&m.delete(b);c(B)}}}applyChanges(){var o,a,l,c,u,g,f,h,p;let e=this.getRegistryPath(),r;try{r=T.readJsonSync(e)}catch{r={}}let i=(o=this.configuration.get("telemetryUserId"))!=null?o:"*",n=r.blocks=(a=r.blocks)!=null?a:{},s=n[i]=(l=n[i])!=null?l:{};for(let d of this.hits.keys()){let m=s.hits=(c=s.hits)!=null?c:{},I=m[d]=(u=m[d])!=null?u:{};for(let[B,b]of this.hits.get(d))I[B]=((g=I[B])!=null?g:0)+b}for(let d of["values","enumerators"])for(let m of this[d].keys()){let I=s[d]=(f=s[d])!=null?f:{};I[m]=[...new Set([...(h=I[m])!=null?h:[],...(p=this[d].get(m))!=null?p:[]])]}T.mkdirSync(v.dirname(e),{recursive:!0}),T.writeJsonSync(e,r)}startBuffer(){process.on("exit",()=>{try{this.applyChanges()}catch{}})}};var fF=ie(require("child_process")),R$=ie(ml());var hF=ie(require("fs"));var Yg=new Map([["constraints",[["constraints","query"],["constraints","source"],["constraints"]]],["exec",[]],["interactive-tools",[["search"],["upgrade-interactive"]]],["stage",[["stage"]]],["typescript",[]],["version",[["version","apply"],["version","check"],["version"]]],["workspace-tools",[["workspaces","focus"],["workspaces","foreach"]]]]);function cUe(t){let e=M.fromPortablePath(t);process.on("SIGINT",()=>{}),e?(0,fF.execFileSync)(process.execPath,[e,...process.argv.slice(2)],{stdio:"inherit",env:_(P({},process.env),{YARN_IGNORE_PATH:"1",YARN_IGNORE_CWD:"1"})}):(0,fF.execFileSync)(e,process.argv.slice(2),{stdio:"inherit",env:_(P({},process.env),{YARN_IGNORE_PATH:"1",YARN_IGNORE_CWD:"1"})})}async function i0({binaryVersion:t,pluginConfiguration:e}){async function r(){let n=new oo({binaryLabel:"Yarn Package Manager",binaryName:"yarn",binaryVersion:t});try{await i(n)}catch(s){process.stdout.write(n.error(s)),process.exitCode=1}}async function i(n){var p,d,m,I,B;let s=process.versions.node,o=">=12 <14 || 14.2 - 14.9 || >14.10.0";if(process.env.YARN_IGNORE_NODE!=="1"&&!qt.satisfiesWithPrereleases(s,o))throw new me(`This tool requires a Node version compatible with ${o} (got ${s}). Upgrade Node, or set \`YARN_IGNORE_NODE=1\` in your environment.`);let a=await fe.find(M.toPortablePath(process.cwd()),e,{usePath:!0,strict:!1}),l=a.get("yarnPath"),c=a.get("ignorePath"),u=a.get("ignoreCwd"),g=M.toPortablePath(M.resolve(process.argv[1])),f=b=>T.readFilePromise(b).catch(()=>Buffer.of());if(!c&&!u&&await(async()=>l===g||Buffer.compare(...await Promise.all([f(l),f(g)]))===0)()){process.env.YARN_IGNORE_PATH="1",process.env.YARN_IGNORE_CWD="1",await i(n);return}else if(l!==null&&!c)if(!T.existsSync(l))process.stdout.write(n.error(new Error(`The "yarn-path" option has been set (in ${a.sources.get("yarnPath")}), but the specified location doesn't exist (${l}).`))),process.exitCode=1;else try{cUe(l)}catch(b){process.exitCode=b.code||1}else{c&&delete process.env.YARN_IGNORE_PATH,a.get("enableTelemetry")&&!R$.isCI&&process.stdout.isTTY&&(fe.telemetry=new Rd(a,"puba9cdc10ec5790a2cf4969dd413a47270")),(p=fe.telemetry)==null||p.reportVersion(t);for(let[L,K]of a.plugins.entries()){Yg.has((m=(d=L.match(/^@yarnpkg\/plugin-(.*)$/))==null?void 0:d[1])!=null?m:"")&&((I=fe.telemetry)==null||I.reportPluginName(L));for(let J of K.commands||[])n.register(J)}let R=n.process(process.argv.slice(2));R.help||(B=fe.telemetry)==null||B.reportCommandName(R.path.join(" "));let H=R.cwd;if(typeof H!="undefined"&&!u){let L=(0,hF.realpathSync)(process.cwd()),K=(0,hF.realpathSync)(H);if(L!==K){process.chdir(H),await r();return}}await n.runExit(R,{cwd:M.toPortablePath(process.cwd()),plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr})}}return r().catch(n=>{process.stdout.write(n.stack||n.message),process.exitCode=1}).finally(()=>T.rmtempPromise())}function F$(t){t.Command.Path=(...e)=>r=>{r.paths=r.paths||[],r.paths.push(e)};for(let e of["Array","Boolean","String","Proxy","Rest","Counter"])t.Command[e]=(...r)=>(i,n)=>{let s=t.Option[e](...r);Object.defineProperty(i,`__${n}`,{configurable:!1,enumerable:!0,get(){return s},set(o){this[n]=o}})};return t}var iC={};it(iC,{BaseCommand:()=>Be,WorkspaceRequiredError:()=>rt,getDynamicLibs:()=>Wie,getPluginConfiguration:()=>F0,main:()=>i0,openWorkspace:()=>rf,pluginCommands:()=>Yg});var Be=class extends ye{constructor(){super(...arguments);this.cwd=Y.String("--cwd",{hidden:!0})}};var rt=class extends me{constructor(e,r){let i=v.relative(e,r),n=v.join(e,Ze.fileName);super(`This command can only be run from within a workspace of your project (${i} isn't a workspace of ${n}).`)}};var dJe=ie(Or());Ss();var CJe=ie(gN()),Wie=()=>new Map([["@yarnpkg/cli",iC],["@yarnpkg/core",Fd],["@yarnpkg/fslib",ch],["@yarnpkg/libzip",Fp],["@yarnpkg/parsers",Hp],["@yarnpkg/shell",jp],["clipanion",vh],["semver",dJe],["typanion",lu],["yup",CJe]]);async function rf(t,e){let{project:r,workspace:i}=await Ke.find(t,e);if(!i)throw new rt(r.cwd,e);return i}var x_e=ie(Or());Ss();var k_e=ie(gN());var hL={};it(hL,{dedupeUtils:()=>zN,default:()=>Qze,suggestUtils:()=>LN});var WAe=ie(ml());var roe=ie(aC());Ss();var LN={};it(LN,{Modifier:()=>Lo,Strategy:()=>Fr,Target:()=>vr,WorkspaceModifier:()=>af,applyModifier:()=>Zse,extractDescriptorFromPath:()=>ON,extractRangeModifier:()=>Xse,fetchDescriptorFrom:()=>MN,findProjectDescriptors:()=>toe,getModifier:()=>AC,getSuggestedDescriptors:()=>lC,makeWorkspaceDescriptor:()=>eoe,toWorkspaceModifier:()=>$se});var TN=ie(Or()),L3e="workspace:",vr;(function(i){i.REGULAR="dependencies",i.DEVELOPMENT="devDependencies",i.PEER="peerDependencies"})(vr||(vr={}));var Lo;(function(i){i.CARET="^",i.TILDE="~",i.EXACT=""})(Lo||(Lo={}));var af;(function(i){i.CARET="^",i.TILDE="~",i.EXACT="*"})(af||(af={}));var Fr;(function(s){s.KEEP="keep",s.REUSE="reuse",s.PROJECT="project",s.LATEST="latest",s.CACHE="cache"})(Fr||(Fr={}));function AC(t,e){return t.exact?Lo.EXACT:t.caret?Lo.CARET:t.tilde?Lo.TILDE:e.configuration.get("defaultSemverRangePrefix")}var T3e=/^([\^~]?)[0-9]+(?:\.[0-9]+){0,2}(?:-\S+)?$/;function Xse(t,{project:e}){let r=t.match(T3e);return r?r[1]:e.configuration.get("defaultSemverRangePrefix")}function Zse(t,e){let{protocol:r,source:i,params:n,selector:s}=S.parseRange(t.range);return TN.default.valid(s)&&(s=`${e}${t.range}`),S.makeDescriptor(t,S.makeRange({protocol:r,source:i,params:n,selector:s}))}function $se(t){switch(t){case Lo.CARET:return af.CARET;case Lo.TILDE:return af.TILDE;case Lo.EXACT:return af.EXACT;default:throw new Error(`Assertion failed: Unknown modifier: "${t}"`)}}function eoe(t,e){return S.makeDescriptor(t.anchoredDescriptor,`${L3e}${$se(e)}`)}async function toe(t,{project:e,target:r}){let i=new Map,n=s=>{let o=i.get(s.descriptorHash);return o||i.set(s.descriptorHash,o={descriptor:s,locators:[]}),o};for(let s of e.workspaces)if(r===vr.PEER){let o=s.manifest.peerDependencies.get(t.identHash);o!==void 0&&n(o).locators.push(s.locator)}else{let o=s.manifest.dependencies.get(t.identHash),a=s.manifest.devDependencies.get(t.identHash);r===vr.DEVELOPMENT?a!==void 0?n(a).locators.push(s.locator):o!==void 0&&n(o).locators.push(s.locator):o!==void 0?n(o).locators.push(s.locator):a!==void 0&&n(a).locators.push(s.locator)}return i}async function ON(t,{cwd:e,workspace:r}){return await M3e(async i=>{v.isAbsolute(t)||(t=v.relative(r.cwd,v.resolve(e,t)),t.match(/^\.{0,2}\//)||(t=`./${t}`));let{project:n}=r,s=await MN(S.makeIdent(null,"archive"),t,{project:r.project,cache:i,workspace:r});if(!s)throw new Error("Assertion failed: The descriptor should have been found");let o=new ei,a=n.configuration.makeResolver(),l=n.configuration.makeFetcher(),c={checksums:n.storedChecksums,project:n,cache:i,fetcher:l,report:o,resolver:a},u=a.bindDescriptor(s,r.anchoredLocator,c),g=S.convertDescriptorToLocator(u),f=await l.fetch(g,c),h=await Ze.find(f.prefixPath,{baseFs:f.packageFs});if(!h.name)throw new Error("Target path doesn't have a name");return S.makeDescriptor(h.name,t)})}async function lC(t,{project:e,workspace:r,cache:i,target:n,modifier:s,strategies:o,maxResults:a=Infinity}){if(!(a>=0))throw new Error(`Invalid maxResults (${a})`);if(t.range!=="unknown")return{suggestions:[{descriptor:t,name:`Use ${S.prettyDescriptor(e.configuration,t)}`,reason:"(unambiguous explicit request)"}],rejections:[]};let l=typeof r!="undefined"&&r!==null&&r.manifest[n].get(t.identHash)||null,c=[],u=[],g=async f=>{try{await f()}catch(h){u.push(h)}};for(let f of o){if(c.length>=a)break;switch(f){case Fr.KEEP:await g(async()=>{l&&c.push({descriptor:l,name:`Keep ${S.prettyDescriptor(e.configuration,l)}`,reason:"(no changes)"})});break;case Fr.REUSE:await g(async()=>{for(let{descriptor:h,locators:p}of(await toe(t,{project:e,target:n})).values()){if(p.length===1&&p[0].locatorHash===r.anchoredLocator.locatorHash&&o.includes(Fr.KEEP))continue;let d=`(originally used by ${S.prettyLocator(e.configuration,p[0])}`;d+=p.length>1?` and ${p.length-1} other${p.length>2?"s":""})`:")",c.push({descriptor:h,name:`Reuse ${S.prettyDescriptor(e.configuration,h)}`,reason:d})}});break;case Fr.CACHE:await g(async()=>{for(let h of e.storedDescriptors.values())h.identHash===t.identHash&&c.push({descriptor:h,name:`Reuse ${S.prettyDescriptor(e.configuration,h)}`,reason:"(already used somewhere in the lockfile)"})});break;case Fr.PROJECT:await g(async()=>{if(r.manifest.name!==null&&t.identHash===r.manifest.name.identHash)return;let h=e.tryWorkspaceByIdent(t);if(h===null)return;let p=eoe(h,s);c.push({descriptor:p,name:`Attach ${S.prettyDescriptor(e.configuration,p)}`,reason:`(local workspace at ${ue.pretty(e.configuration,h.relativeCwd,ue.Type.PATH)})`})});break;case Fr.LATEST:await g(async()=>{if(t.range!=="unknown")c.push({descriptor:t,name:`Use ${S.prettyRange(e.configuration,t.range)}`,reason:"(explicit range requested)"});else if(n===vr.PEER)c.push({descriptor:S.makeDescriptor(t,"*"),name:"Use *",reason:"(catch-all peer dependency pattern)"});else if(!e.configuration.get("enableNetwork"))c.push({descriptor:null,name:"Resolve from latest",reason:ue.pretty(e.configuration,"(unavailable because enableNetwork is toggled off)","grey")});else{let h=await MN(t,"latest",{project:e,cache:i,workspace:r,preserveModifier:!1});h&&(h=Zse(h,s),c.push({descriptor:h,name:`Use ${S.prettyDescriptor(e.configuration,h)}`,reason:"(resolved from latest)"}))}});break}}return{suggestions:c.slice(0,a),rejections:u.slice(0,a)}}async function MN(t,e,{project:r,cache:i,workspace:n,preserveModifier:s=!0}){let o=S.makeDescriptor(t,e),a=new ei,l=r.configuration.makeFetcher(),c=r.configuration.makeResolver(),u={project:r,fetcher:l,cache:i,checksums:r.storedChecksums,report:a,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},g=_(P({},u),{resolver:c,fetchOptions:u}),f=c.bindDescriptor(o,n.anchoredLocator,g),h=await c.getCandidates(f,new Map,g);if(h.length===0)return null;let p=h[0],{protocol:d,source:m,params:I,selector:B}=S.parseRange(S.convertToManifestRange(p.reference));if(d===r.configuration.get("defaultProtocol")&&(d=null),TN.default.valid(B)&&s!==!1){let b=typeof s=="string"?s:o.range;B=Xse(b,{project:r})+B}return S.makeDescriptor(p,S.makeRange({protocol:d,source:m,params:I,selector:B}))}async function M3e(t){return await T.mktempPromise(async e=>{let r=fe.create(e);return r.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await t(new Qt(e,{configuration:r,check:!1,immutable:!1}))})}var cC=class extends Be{constructor(){super(...arguments);this.json=Y.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.exact=Y.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=Y.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=Y.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.dev=Y.Boolean("-D,--dev",!1,{description:"Add a package as a dev dependency"});this.peer=Y.Boolean("-P,--peer",!1,{description:"Add a package as a peer dependency"});this.optional=Y.Boolean("-O,--optional",!1,{description:"Add / upgrade a package to an optional regular / peer dependency"});this.preferDev=Y.Boolean("--prefer-dev",!1,{description:"Add / upgrade a package to a dev dependency"});this.interactive=Y.Boolean("-i,--interactive",{description:"Reuse the specified package from other workspaces in the project"});this.cached=Y.Boolean("--cached",!1,{description:"Reuse the highest version already used somewhere within the project"});this.mode=Y.String("--mode",{description:"Change what artifacts installs generate",validator:Yi(li)});this.silent=Y.Boolean("--silent",{hidden:!0});this.packages=Y.Rest()}async execute(){var d;let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd),n=await Qt.find(e);if(!i)throw new rt(r.cwd,this.context.cwd);await r.restoreInstallState({restoreResolutions:!1});let s=(d=this.interactive)!=null?d:e.get("preferInteractive"),o=AC(this,r),a=[...s?[Fr.REUSE]:[],Fr.PROJECT,...this.cached?[Fr.CACHE]:[],Fr.LATEST],l=s?Infinity:1,c=await Promise.all(this.packages.map(async m=>{let I=m.match(/^\.{0,2}\//)?await ON(m,{cwd:this.context.cwd,workspace:i}):S.parseDescriptor(m),B=O3e(i,I,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional}),b=await lC(I,{project:r,workspace:i,cache:n,target:B,modifier:o,strategies:a,maxResults:l});return[I,b,B]})),u=await Fa.start({configuration:e,stdout:this.context.stdout,suggestInstall:!1},async m=>{for(let[I,{suggestions:B,rejections:b}]of c)if(B.filter(H=>H.descriptor!==null).length===0){let[H]=b;if(typeof H=="undefined")throw new Error("Assertion failed: Expected an error to have been set");r.configuration.get("enableNetwork")?m.reportError(z.CANT_SUGGEST_RESOLUTIONS,`${S.prettyDescriptor(e,I)} can't be resolved to a satisfying range`):m.reportError(z.CANT_SUGGEST_RESOLUTIONS,`${S.prettyDescriptor(e,I)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),m.reportSeparator(),m.reportExceptionOnce(H)}});if(u.hasErrors())return u.exitCode();let g=!1,f=[],h=[];for(let[,{suggestions:m},I]of c){let B,b=m.filter(K=>K.descriptor!==null),R=b[0].descriptor,H=b.every(K=>S.areDescriptorsEqual(K.descriptor,R));b.length===1||H?B=R:(g=!0,{answer:B}=await(0,roe.prompt)({type:"select",name:"answer",message:"Which range do you want to use?",choices:m.map(({descriptor:K,name:J,reason:ne})=>K?{name:J,hint:ne,descriptor:K}:{name:J,hint:ne,disabled:!0}),onCancel:()=>process.exit(130),result(K){return this.find(K,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let L=i.manifest[I].get(B.identHash);(typeof L=="undefined"||L.descriptorHash!==B.descriptorHash)&&(i.manifest[I].set(B.identHash,B),this.optional&&(I==="dependencies"?i.manifest.ensureDependencyMeta(_(P({},B),{range:"unknown"})).optional=!0:I==="peerDependencies"&&(i.manifest.ensurePeerDependencyMeta(_(P({},B),{range:"unknown"})).optional=!0)),typeof L=="undefined"?f.push([i,I,B,a]):h.push([i,I,L,B]))}return await e.triggerMultipleHooks(m=>m.afterWorkspaceDependencyAddition,f),await e.triggerMultipleHooks(m=>m.afterWorkspaceDependencyReplacement,h),g&&this.context.stdout.write(` +`),(await Fe.start({configuration:e,json:this.json,stdout:this.context.stdout,includeLogs:!this.context.quiet},async m=>{await r.install({cache:n,report:m,mode:this.mode})})).exitCode()}};cC.paths=[["add"]],cC.usage=ye.Usage({description:"add dependencies to the project",details:"\n This command adds a package to the package.json for the nearest workspace.\n\n - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\n\n - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\n\n - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\n\n - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\"peerDependenciesMeta\": { \"\": { \"optional\": true } }`\n\n - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\n\n - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\n\n If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\n\n If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the later will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/features/protocols.\n ",examples:[["Add a regular package to the current workspace","$0 add lodash"],["Add a specific version for a package to the current workspace","$0 add lodash@1.2.3"],["Add a package from a GitHub repository (the master branch) to the current workspace using a URL","$0 add lodash@https://github.com/lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol","$0 add lodash@github:lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)","$0 add lodash@lodash/lodash"],["Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)","$0 add lodash-es@lodash/lodash#es"]]});var ioe=cC;function O3e(t,e,{dev:r,peer:i,preferDev:n,optional:s}){let o=t.manifest[vr.REGULAR].has(e.identHash),a=t.manifest[vr.DEVELOPMENT].has(e.identHash),l=t.manifest[vr.PEER].has(e.identHash);if((r||i)&&o)throw new me(`Package "${S.prettyIdent(t.project.configuration,e)}" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!r&&!i&&l)throw new me(`Package "${S.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(s&&a)throw new me(`Package "${S.prettyIdent(t.project.configuration,e)}" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(s&&!i&&l)throw new me(`Package "${S.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((r||n)&&s)throw new me(`Package "${S.prettyIdent(t.project.configuration,e)}" cannot simultaneously be a dev dependency and an optional dependency`);return i?vr.PEER:r||n?vr.DEVELOPMENT:o?vr.REGULAR:a?vr.DEVELOPMENT:vr.REGULAR}var uC=class extends Be{constructor(){super(...arguments);this.verbose=Y.Boolean("-v,--verbose",!1,{description:"Print both the binary name and the locator of the package that provides the binary"});this.json=Y.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.name=Y.String({required:!1})}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,locator:i}=await Ke.find(e,this.context.cwd);if(await r.restoreInstallState(),this.name){let o=(await Kt.getPackageAccessibleBinaries(i,{project:r})).get(this.name);if(!o)throw new me(`Couldn't find a binary named "${this.name}" for package "${S.prettyLocator(e,i)}"`);let[,a]=o;return this.context.stdout.write(`${a} +`),0}return(await Fe.start({configuration:e,json:this.json,stdout:this.context.stdout},async s=>{let o=await Kt.getPackageAccessibleBinaries(i,{project:r}),l=Array.from(o.keys()).reduce((c,u)=>Math.max(c,u.length),0);for(let[c,[u,g]]of o)s.reportJson({name:c,source:S.stringifyIdent(u),path:g});if(this.verbose)for(let[c,[u]]of o)s.reportInfo(null,`${c.padEnd(l," ")} ${S.prettyLocator(e,u)}`);else for(let c of o.keys())s.reportInfo(null,c)})).exitCode()}};uC.paths=[["bin"]],uC.usage=ye.Usage({description:"get the path to a binary script",details:` + When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \`-v,--verbose\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary. + + When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive. + `,examples:[["List all the available binaries","$0 bin"],["Print the path to a specific binary","$0 bin eslint"]]});var noe=uC;var gC=class extends Be{constructor(){super(...arguments);this.mirror=Y.Boolean("--mirror",!1,{description:"Remove the global cache files instead of the local cache files"});this.all=Y.Boolean("--all",!1,{description:"Remove both the global cache files and the local cache files of the current project"})}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),r=await Qt.find(e);return(await Fe.start({configuration:e,stdout:this.context.stdout},async()=>{let n=(this.all||this.mirror)&&r.mirrorCwd!==null,s=!this.mirror;n&&(await T.removePromise(r.mirrorCwd),await e.triggerHook(o=>o.cleanGlobalArtifacts,e)),s&&await T.removePromise(r.cwd)})).exitCode()}};gC.paths=[["cache","clean"],["cache","clear"]],gC.usage=ye.Usage({description:"remove the shared cache files",details:` + This command will remove all the files from the cache. + `,examples:[["Remove all the local archives","$0 cache clean"],["Remove all the archives stored in the ~/.yarn directory","$0 cache clean --mirror"]]});var soe=gC;var ooe=ie(p0()),KN=ie(require("util")),fC=class extends Be{constructor(){super(...arguments);this.json=Y.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.unsafe=Y.Boolean("--no-redacted",!1,{description:"Don't redact secrets (such as tokens) from the output"});this.name=Y.String()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),r=this.name.replace(/[.[].*$/,""),i=this.name.replace(/^[^.[]*/,"");if(typeof e.settings.get(r)=="undefined")throw new me(`Couldn't find a configuration settings named "${r}"`);let s=e.getSpecial(r,{hideSecrets:!this.unsafe,getNativePaths:!0}),o=de.convertMapsToIndexableObjects(s),a=i?(0,ooe.default)(o,i):o,l=await Fe.start({configuration:e,includeFooter:!1,json:this.json,stdout:this.context.stdout},async c=>{c.reportJson(a)});if(!this.json){if(typeof a=="string")return this.context.stdout.write(`${a} +`),l.exitCode();KN.inspect.styles.name="cyan",this.context.stdout.write(`${(0,KN.inspect)(a,{depth:Infinity,colors:e.get("enableColors"),compact:!1})} +`)}return l.exitCode()}};fC.paths=[["config","get"]],fC.usage=ye.Usage({description:"read a configuration settings",details:` + This command will print a configuration setting. + + Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \`--no-redacted\` to get the untransformed value. + `,examples:[["Print a simple configuration setting","yarn config get yarnPath"],["Print a complex configuration setting","yarn config get packageExtensions"],["Print a nested field from the configuration",`yarn config get 'npmScopes["my-company"].npmRegistryServer'`],["Print a token from the configuration","yarn config get npmAuthToken --no-redacted"],["Print a configuration setting as JSON","yarn config get packageExtensions --json"]]});var aoe=fC;var Eae=ie(qN()),Iae=ie(p0()),yae=ie(mae()),JN=ie(require("util")),pC=class extends Be{constructor(){super(...arguments);this.json=Y.Boolean("--json",!1,{description:"Set complex configuration settings to JSON values"});this.home=Y.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=Y.String();this.value=Y.String()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),r=()=>{if(!e.projectCwd)throw new me("This command must be run from within a project folder");return e.projectCwd},i=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof e.settings.get(i)=="undefined")throw new me(`Couldn't find a configuration settings named "${i}"`);if(i==="enableStrictSettings")throw new me("This setting only affects the file it's in, and thus cannot be set from the CLI");let o=this.json?JSON.parse(this.value):this.value;await(this.home?h=>fe.updateHomeConfiguration(h):h=>fe.updateConfiguration(r(),h))(h=>{if(n){let p=(0,Eae.default)(h);return(0,yae.default)(p,this.name,o),p}else return _(P({},h),{[i]:o})});let c=(await fe.find(this.context.cwd,this.context.plugins)).getSpecial(i,{hideSecrets:!0,getNativePaths:!0}),u=de.convertMapsToIndexableObjects(c),g=n?(0,Iae.default)(u,n):u;return(await Fe.start({configuration:e,includeFooter:!1,stdout:this.context.stdout},async h=>{JN.inspect.styles.name="cyan",h.reportInfo(z.UNNAMED,`Successfully set ${this.name} to ${(0,JN.inspect)(g,{depth:Infinity,colors:e.get("enableColors"),compact:!1})}`)})).exitCode()}};pC.paths=[["config","set"]],pC.usage=ye.Usage({description:"change a configuration settings",details:` + This command will set a configuration setting. + + When used without the \`--json\` flag, it can only set a simple configuration setting (a string, a number, or a boolean). + + When used with the \`--json\` flag, it can set both simple and complex configuration settings, including Arrays and Objects. + `,examples:[["Set a simple configuration setting (a string, a number, or a boolean)","yarn config set initScope myScope"],["Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag",'yarn config set initScope --json \\"myScope\\"'],["Set a complex configuration setting (an Array) using the `--json` flag",`yarn config set unsafeHttpWhitelist --json '["*.example.com", "example.com"]'`],["Set a complex configuration setting (an Object) using the `--json` flag",`yarn config set packageExtensions --json '{ "@babel/parser@*": { "dependencies": { "@babel/types": "*" } } }'`],["Set a nested configuration setting",'yarn config set npmScopes.company.npmRegistryServer "https://npm.example.com"'],["Set a nested configuration setting using indexed access for non-simple keys",`yarn config set 'npmRegistries["//npm.example.com"].npmAuthToken' "ffffffff-ffff-ffff-ffff-ffffffffffff"`]]});var wae=pC;var Dae=ie(qN()),Rae=ie(Ld()),Fae=ie(Pae()),dC=class extends Be{constructor(){super(...arguments);this.home=Y.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=Y.String()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),r=()=>{if(!e.projectCwd)throw new me("This command must be run from within a project folder");return e.projectCwd},i=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof e.settings.get(i)=="undefined")throw new me(`Couldn't find a configuration settings named "${i}"`);let o=this.home?l=>fe.updateHomeConfiguration(l):l=>fe.updateConfiguration(r(),l);return(await Fe.start({configuration:e,includeFooter:!1,stdout:this.context.stdout},async l=>{let c=!1;await o(u=>{if(!(0,Rae.default)(u,this.name))return l.reportWarning(z.UNNAMED,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),c=!0,u;let g=n?(0,Dae.default)(u):P({},u);return(0,Fae.default)(g,this.name),g}),c||l.reportInfo(z.UNNAMED,`Successfully unset ${this.name}`)})).exitCode()}};dC.paths=[["config","unset"]],dC.usage=ye.Usage({description:"unset a configuration setting",details:` + This command will unset a configuration setting. + `,examples:[["Unset a simple configuration setting","yarn config unset initScope"],["Unset a complex configuration setting","yarn config unset packageExtensions"],["Unset a nested configuration setting","yarn config unset npmScopes.company.npmRegistryServer"]]});var Nae=dC;var WN=ie(require("util")),CC=class extends Be{constructor(){super(...arguments);this.verbose=Y.Boolean("-v,--verbose",!1,{description:"Print the setting description on top of the regular key/value information"});this.why=Y.Boolean("--why",!1,{description:"Print the reason why a setting is set a particular way"});this.json=Y.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins,{strict:!1});return(await Fe.start({configuration:e,json:this.json,stdout:this.context.stdout},async i=>{if(e.invalid.size>0&&!this.json){for(let[n,s]of e.invalid)i.reportError(z.INVALID_CONFIGURATION_KEY,`Invalid configuration key "${n}" in ${s}`);i.reportSeparator()}if(this.json){let n=de.sortMap(e.settings.keys(),s=>s);for(let s of n){let o=e.settings.get(s),a=e.getSpecial(s,{hideSecrets:!0,getNativePaths:!0}),l=e.sources.get(s);this.verbose?i.reportJson({key:s,effective:a,source:l}):i.reportJson(P({key:s,effective:a,source:l},o))}}else{let n=de.sortMap(e.settings.keys(),a=>a),s=n.reduce((a,l)=>Math.max(a,l.length),0),o={breakLength:Infinity,colors:e.get("enableColors"),maxArrayLength:2};if(this.why||this.verbose){let a=n.map(c=>{let u=e.settings.get(c);if(!u)throw new Error(`Assertion failed: This settings ("${c}") should have been registered`);let g=this.why?e.sources.get(c)||"":u.description;return[c,g]}),l=a.reduce((c,[,u])=>Math.max(c,u.length),0);for(let[c,u]of a)i.reportInfo(null,`${c.padEnd(s," ")} ${u.padEnd(l," ")} ${(0,WN.inspect)(e.getSpecial(c,{hideSecrets:!0,getNativePaths:!0}),o)}`)}else for(let a of n)i.reportInfo(null,`${a.padEnd(s," ")} ${(0,WN.inspect)(e.getSpecial(a,{hideSecrets:!0,getNativePaths:!0}),o)}`)}})).exitCode()}};CC.paths=[["config"]],CC.usage=ye.Usage({description:"display the current configuration",details:` + This command prints the current active configuration settings. + `,examples:[["Print the active configuration settings","$0 config"]]});var Lae=CC;Ss();var zN={};it(zN,{Strategy:()=>Oc,acceptedStrategies:()=>H4e,dedupe:()=>VN});var Tae=ie(Nn()),Oc;(function(e){e.HIGHEST="highest"})(Oc||(Oc={}));var H4e=new Set(Object.values(Oc)),G4e={highest:async(t,e,{resolver:r,fetcher:i,resolveOptions:n,fetchOptions:s})=>{let o=new Map;for(let[a,l]of t.storedResolutions){let c=t.storedDescriptors.get(a);if(typeof c=="undefined")throw new Error(`Assertion failed: The descriptor (${a}) should have been registered`);de.getSetWithDefault(o,c.identHash).add(l)}return Array.from(t.storedDescriptors.values(),async a=>{if(e.length&&!Tae.default.isMatch(S.stringifyIdent(a),e))return null;let l=t.storedResolutions.get(a.descriptorHash);if(typeof l=="undefined")throw new Error(`Assertion failed: The resolution (${a.descriptorHash}) should have been registered`);let c=t.originalPackages.get(l);if(typeof c=="undefined"||!r.shouldPersistResolution(c,n))return null;let u=o.get(a.identHash);if(typeof u=="undefined")throw new Error(`Assertion failed: The resolutions (${a.identHash}) should have been registered`);if(u.size===1)return null;let g=[...u].map(m=>{let I=t.originalPackages.get(m);if(typeof I=="undefined")throw new Error(`Assertion failed: The package (${m}) should have been registered`);return I.reference}),f=await r.getSatisfying(a,g,n),h=f==null?void 0:f[0];if(typeof h=="undefined")return null;let p=h.locatorHash,d=t.originalPackages.get(p);if(typeof d=="undefined")throw new Error(`Assertion failed: The package (${p}) should have been registered`);return p===l?null:{descriptor:a,currentPackage:c,updatedPackage:d}})}};async function VN(t,{strategy:e,patterns:r,cache:i,report:n}){let{configuration:s}=t,o=new ei,a=s.makeResolver(),l=s.makeFetcher(),c={cache:i,checksums:t.storedChecksums,fetcher:l,project:t,report:o,skipIntegrityCheck:!0,cacheOptions:{skipIntegrityCheck:!0}},u={project:t,resolver:a,report:o,fetchOptions:c};return await n.startTimerPromise("Deduplication step",async()=>{let f=await G4e[e](t,r,{resolver:a,resolveOptions:u,fetcher:l,fetchOptions:c}),h=Xi.progressViaCounter(f.length);n.reportProgress(h);let p=0;await Promise.all(f.map(I=>I.then(B=>{if(B===null)return;p++;let{descriptor:b,currentPackage:R,updatedPackage:H}=B;n.reportInfo(z.UNNAMED,`${S.prettyDescriptor(s,b)} can be deduped from ${S.prettyLocator(s,R)} to ${S.prettyLocator(s,H)}`),n.reportJson({descriptor:S.stringifyDescriptor(b),currentResolution:S.stringifyLocator(R),updatedResolution:S.stringifyLocator(H)}),t.storedResolutions.set(b.descriptorHash,H.locatorHash)}).finally(()=>h.tick())));let d;switch(p){case 0:d="No packages";break;case 1:d="One package";break;default:d=`${p} packages`}let m=ue.pretty(s,e,ue.Type.CODE);return n.reportInfo(z.UNNAMED,`${d} can be deduped using the ${m} strategy`),p})}var mC=class extends Be{constructor(){super(...arguments);this.strategy=Y.String("-s,--strategy",Oc.HIGHEST,{description:"The strategy to use when deduping dependencies",validator:Yi(Oc)});this.check=Y.Boolean("-c,--check",!1,{description:"Exit with exit code 1 when duplicates are found, without persisting the dependency tree"});this.json=Y.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.mode=Y.String("--mode",{description:"Change what artifacts installs generate",validator:Yi(li)});this.patterns=Y.Rest()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r}=await Ke.find(e,this.context.cwd),i=await Qt.find(e);await r.restoreInstallState({restoreResolutions:!1});let n=0,s=await Fe.start({configuration:e,includeFooter:!1,stdout:this.context.stdout,json:this.json},async o=>{n=await VN(r,{strategy:this.strategy,patterns:this.patterns,cache:i,report:o})});return s.hasErrors()?s.exitCode():this.check?n?1:0:(await Fe.start({configuration:e,stdout:this.context.stdout,json:this.json},async a=>{await r.install({cache:i,report:a,mode:this.mode})})).exitCode()}};mC.paths=[["dedupe"]],mC.usage=ye.Usage({description:"deduplicate dependencies with overlapping ranges",details:"\n Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\n\n This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\n\n - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\n\n **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\n\n If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the later will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n ### In-depth explanation:\n\n Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\n\n Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\n ",examples:[["Dedupe all packages","$0 dedupe"],["Dedupe all packages using a specific strategy","$0 dedupe --strategy highest"],["Dedupe a specific package","$0 dedupe lodash"],["Dedupe all packages with the `@babel/*` scope","$0 dedupe '@babel/*'"],["Check for duplicates (can be used as a CI step)","$0 dedupe --check"]]});var Mae=mC;var Y0=class extends Be{async execute(){let{plugins:e}=await fe.find(this.context.cwd,this.context.plugins),r=[];for(let o of e){let{commands:a}=o[1];if(a){let c=oo.from(a).definitions();r.push([o[0],c])}}let i=this.cli.definitions(),n=(o,a)=>o.split(" ").slice(1).join()===a.split(" ").slice(1).join(),s=Kae()["@yarnpkg/builder"].bundles.standard;for(let o of r){let a=o[1];for(let l of a)i.find(c=>n(c.path,l.path)).plugin={name:o[0],isDefault:s.includes(o[0])}}this.context.stdout.write(`${JSON.stringify(i,null,2)} +`)}};Y0.paths=[["--clipanion=definitions"]];var Uae=Y0;var q0=class extends Be{async execute(){this.context.stdout.write(this.cli.usage(null))}};q0.paths=[["help"],["--help"],["-h"]];var Hae=q0;var _N=class extends Be{constructor(){super(...arguments);this.leadingArgument=Y.String();this.args=Y.Proxy()}async execute(){if(this.leadingArgument.match(/[\\/]/)&&!S.tryParseIdent(this.leadingArgument)){let e=v.resolve(this.context.cwd,M.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:e})}else return await this.cli.run(["run",this.leadingArgument,...this.args])}},Gae=_N;var J0=class extends Be{async execute(){this.context.stdout.write(`${Zr||""} +`)}};J0.paths=[["-v"],["--version"]];var jae=J0;var EC=class extends Be{constructor(){super(...arguments);this.commandName=Y.String();this.args=Y.Proxy()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,locator:i}=await Ke.find(e,this.context.cwd);return await r.restoreInstallState(),await Kt.executePackageShellcode(i,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:r})}};EC.paths=[["exec"]],EC.usage=ye.Usage({description:"execute a shell script",details:` + This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell. + + It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). + `,examples:[["Execute a single shell command","$0 exec echo Hello World"],["Execute a shell script",'$0 exec "tsc & babel src --out-dir lib"']]});var Yae=EC;Ss();var IC=class extends Be{constructor(){super(...arguments);this.hash=Y.String({required:!1,validator:fv(gv(),[hv(/^p[0-9a-f]{5}$/)])})}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r}=await Ke.find(e,this.context.cwd);return await r.restoreInstallState({restoreResolutions:!1}),await r.applyLightResolution(),typeof this.hash!="undefined"?await j4e(this.hash,r,{stdout:this.context.stdout}):(await Fe.start({configuration:e,stdout:this.context.stdout,includeFooter:!1},async n=>{var o;let s=[([,a])=>S.stringifyLocator(r.storedPackages.get(a.subject)),([,a])=>S.stringifyIdent(a.requested)];for(let[a,l]of de.sortMap(r.peerRequirements,s)){let c=r.storedPackages.get(l.subject);if(typeof c=="undefined")throw new Error("Assertion failed: Expected the subject package to have been registered");let u=r.storedPackages.get(l.rootRequester);if(typeof u=="undefined")throw new Error("Assertion failed: Expected the root package to have been registered");let g=(o=c.dependencies.get(l.requested.identHash))!=null?o:null,f=ue.pretty(e,a,ue.Type.CODE),h=S.prettyLocator(e,c),p=S.prettyIdent(e,l.requested),d=S.prettyIdent(e,u),m=l.allRequesters.length-1,I=`descendant${m===1?"":"s"}`,B=m>0?` and ${m} ${I}`:"",b=g!==null?"provides":"doesn't provide";n.reportInfo(null,`${f} \u2192 ${h} ${b} ${p} to ${d}${B}`)}})).exitCode()}};IC.paths=[["explain","peer-requirements"]],IC.usage=ye.Usage({description:"explain a set of peer requirements",details:` + A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants. + + When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not. + + When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set. + + **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\`yarn explain peer-requirements\`). + `,examples:[["Explain the corresponding set of peer requirements for a hash","$0 explain peer-requirements p1a4ed"],["List all sets of peer requirements","$0 explain peer-requirements"]]});var qae=IC;async function j4e(t,e,r){let{configuration:i}=e,n=e.peerRequirements.get(t);if(typeof n=="undefined")throw new Error(`No peerDependency requirements found for hash: "${t}"`);return(await Fe.start({configuration:i,stdout:r.stdout,includeFooter:!1},async o=>{var I,B;let a=e.storedPackages.get(n.subject);if(typeof a=="undefined")throw new Error("Assertion failed: Expected the subject package to have been registered");let l=e.storedPackages.get(n.rootRequester);if(typeof l=="undefined")throw new Error("Assertion failed: Expected the root package to have been registered");let c=(I=a.dependencies.get(n.requested.identHash))!=null?I:null,u=c!==null?e.storedResolutions.get(c.descriptorHash):null;if(typeof u=="undefined")throw new Error("Assertion failed: Expected the resolution to have been registered");let g=u!==null?e.storedPackages.get(u):null;if(typeof g=="undefined")throw new Error("Assertion failed: Expected the provided package to have been registered");let f=[...n.allRequesters.values()].map(b=>{let R=e.storedPackages.get(b);if(typeof R=="undefined")throw new Error("Assertion failed: Expected the package to be registered");let H=S.devirtualizeLocator(R),L=e.storedPackages.get(H.locatorHash);if(typeof L=="undefined")throw new Error("Assertion failed: Expected the package to be registered");let K=L.peerDependencies.get(n.requested.identHash);if(typeof K=="undefined")throw new Error("Assertion failed: Expected the peer dependency to be registered");return{pkg:R,peerDependency:K}});if(g!==null){let b=f.every(({peerDependency:R})=>qt.satisfiesWithPrereleases(g.version,R.range));o.reportInfo(z.UNNAMED,`${S.prettyLocator(i,a)} provides ${S.prettyLocator(i,g)} with version ${S.prettyReference(i,(B=g.version)!=null?B:"")}, which ${b?"satisfies":"doesn't satisfy"} the following requirements:`)}else o.reportInfo(z.UNNAMED,`${S.prettyLocator(i,a)} doesn't provide ${S.prettyIdent(i,n.requested)}, breaking the following requirements:`);o.reportSeparator();let h=ue.mark(i),p=[];for(let{pkg:b,peerDependency:R}of de.sortMap(f,H=>S.stringifyLocator(H.pkg))){let L=(g!==null?qt.satisfiesWithPrereleases(g.version,R.range):!1)?h.Check:h.Cross;p.push({stringifiedLocator:S.stringifyLocator(b),prettyLocator:S.prettyLocator(i,b),prettyRange:S.prettyRange(i,R.range),mark:L})}let d=Math.max(...p.map(({stringifiedLocator:b})=>b.length)),m=Math.max(...p.map(({prettyRange:b})=>b.length));for(let{stringifiedLocator:b,prettyLocator:R,prettyRange:H,mark:L}of de.sortMap(p,({stringifiedLocator:K})=>K))o.reportInfo(null,`${R.padEnd(d+(R.length-b.length)," ")} \u2192 ${H.padEnd(m," ")} ${L}`);p.length>1&&(o.reportSeparator(),o.reportInfo(z.UNNAMED,`Note: these requirements start with ${S.prettyLocator(e.configuration,l)}`))})).exitCode()}var Jae=ie(Nn()),yC=class extends Be{constructor(){super(...arguments);this.all=Y.Boolean("-A,--all",!1,{description:"Print versions of a package from the whole project"});this.recursive=Y.Boolean("-R,--recursive",!1,{description:"Print information for all packages, including transitive dependencies"});this.extra=Y.Array("-X,--extra",[],{description:"An array of requests of extra data provided by plugins"});this.cache=Y.Boolean("--cache",!1,{description:"Print information about the cache entry of a package (path, size, checksum)"});this.dependents=Y.Boolean("--dependents",!1,{description:"Print all dependents for each matching package"});this.manifest=Y.Boolean("--manifest",!1,{description:"Print data obtained by looking at the package archive (license, homepage, ...)"});this.nameOnly=Y.Boolean("--name-only",!1,{description:"Only print the name for the matching packages"});this.virtuals=Y.Boolean("--virtuals",!1,{description:"Print each instance of the virtual packages"});this.json=Y.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=Y.Rest()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd),n=await Qt.find(e);if(!i&&!this.all)throw new rt(r.cwd,this.context.cwd);await r.restoreInstallState();let s=new Set(this.extra);this.cache&&s.add("cache"),this.dependents&&s.add("dependents"),this.manifest&&s.add("manifest");let o=(b,{recursive:R})=>{let H=b.anchoredLocator.locatorHash,L=new Map,K=[H];for(;K.length>0;){let J=K.shift();if(L.has(J))continue;let ne=r.storedPackages.get(J);if(typeof ne=="undefined")throw new Error("Assertion failed: Expected the package to be registered");if(L.set(J,ne),S.isVirtualLocator(ne)&&K.push(S.devirtualizeLocator(ne).locatorHash),!(!R&&J!==H))for(let q of ne.dependencies.values()){let A=r.storedResolutions.get(q.descriptorHash);if(typeof A=="undefined")throw new Error("Assertion failed: Expected the resolution to be registered");K.push(A)}}return L.values()},a=({recursive:b})=>{let R=new Map;for(let H of r.workspaces)for(let L of o(H,{recursive:b}))R.set(L.locatorHash,L);return R.values()},l=({all:b,recursive:R})=>b&&R?r.storedPackages.values():b?a({recursive:R}):o(i,{recursive:R}),c=({all:b,recursive:R})=>{let H=l({all:b,recursive:R}),L=this.patterns.map(ne=>{let q=S.parseLocator(ne),A=Jae.default.makeRe(S.stringifyIdent(q)),V=S.isVirtualLocator(q),W=V?S.devirtualizeLocator(q):q;return X=>{let F=S.stringifyIdent(X);if(!A.test(F))return!1;if(q.reference==="unknown")return!0;let D=S.isVirtualLocator(X),he=D?S.devirtualizeLocator(X):X;return!(V&&D&&q.reference!==X.reference||W.reference!==he.reference)}}),K=de.sortMap([...H],ne=>S.stringifyLocator(ne));return{selection:K.filter(ne=>L.length===0||L.some(q=>q(ne))),sortedLookup:K}},{selection:u,sortedLookup:g}=c({all:this.all,recursive:this.recursive});if(u.length===0)throw new me("No package matched your request");let f=new Map;if(this.dependents)for(let b of g)for(let R of b.dependencies.values()){let H=r.storedResolutions.get(R.descriptorHash);if(typeof H=="undefined")throw new Error("Assertion failed: Expected the resolution to be registered");de.getArrayWithDefault(f,H).push(b)}let h=new Map;for(let b of g){if(!S.isVirtualLocator(b))continue;let R=S.devirtualizeLocator(b);de.getArrayWithDefault(h,R.locatorHash).push(b)}let p={},d={children:p},m=e.makeFetcher(),I={project:r,fetcher:m,cache:n,checksums:r.storedChecksums,report:new ei,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},B=[async(b,R,H)=>{var J,ne;if(!R.has("manifest"))return;let L=await m.fetch(b,I),K;try{K=await Ze.find(L.prefixPath,{baseFs:L.packageFs})}finally{(J=L.releaseFs)==null||J.call(L)}H("Manifest",{License:ue.tuple(ue.Type.NO_HINT,K.license),Homepage:ue.tuple(ue.Type.URL,(ne=K.raw.homepage)!=null?ne:null)})},async(b,R,H)=>{var A;if(!R.has("cache"))return;let L={mockedPackages:r.disabledLocators,unstablePackages:r.conditionalLocators},K=(A=r.storedChecksums.get(b.locatorHash))!=null?A:null,J=n.getLocatorPath(b,K,L),ne;if(J!==null)try{ne=T.statSync(J)}catch{}let q=typeof ne!="undefined"?[ne.size,ue.Type.SIZE]:void 0;H("Cache",{Checksum:ue.tuple(ue.Type.NO_HINT,K),Path:ue.tuple(ue.Type.PATH,J),Size:q})}];for(let b of u){let R=S.isVirtualLocator(b);if(!this.virtuals&&R)continue;let H={},L={value:[b,ue.Type.LOCATOR],children:H};if(p[S.stringifyLocator(b)]=L,this.nameOnly){delete L.children;continue}let K=h.get(b.locatorHash);typeof K!="undefined"&&(H.Instances={label:"Instances",value:ue.tuple(ue.Type.NUMBER,K.length)}),H.Version={label:"Version",value:ue.tuple(ue.Type.NO_HINT,b.version)};let J=(q,A)=>{let V={};if(H[q]=V,Array.isArray(A))V.children=A.map(W=>({value:W}));else{let W={};V.children=W;for(let[X,F]of Object.entries(A))typeof F!="undefined"&&(W[X]={label:X,value:F})}};if(!R){for(let q of B)await q(b,s,J);await e.triggerHook(q=>q.fetchPackageInfo,b,s,J)}b.bin.size>0&&!R&&J("Exported Binaries",[...b.bin.keys()].map(q=>ue.tuple(ue.Type.PATH,q)));let ne=f.get(b.locatorHash);typeof ne!="undefined"&&ne.length>0&&J("Dependents",ne.map(q=>ue.tuple(ue.Type.LOCATOR,q))),b.dependencies.size>0&&!R&&J("Dependencies",[...b.dependencies.values()].map(q=>{var W;let A=r.storedResolutions.get(q.descriptorHash),V=typeof A!="undefined"&&(W=r.storedPackages.get(A))!=null?W:null;return ue.tuple(ue.Type.RESOLUTION,{descriptor:q,locator:V})})),b.peerDependencies.size>0&&R&&J("Peer dependencies",[...b.peerDependencies.values()].map(q=>{var X,F;let A=b.dependencies.get(q.identHash),V=typeof A!="undefined"&&(X=r.storedResolutions.get(A.descriptorHash))!=null?X:null,W=V!==null&&(F=r.storedPackages.get(V))!=null?F:null;return ue.tuple(ue.Type.RESOLUTION,{descriptor:q,locator:W})}))}Hs.emitTree(d,{configuration:e,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};yC.paths=[["info"]],yC.usage=ye.Usage({description:"see information related to packages",details:"\n This command prints various information related to the specified packages, accepting glob patterns.\n\n By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\n\n Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\n\n Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\n ",examples:[["Show information about Lodash","$0 info lodash"]]});var Wae=yC;var W0=ie(ml());Ss();var wC=class extends Be{constructor(){super(...arguments);this.json=Y.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.immutable=Y.Boolean("--immutable",{description:"Abort with an error exit code if the lockfile was to be modified"});this.immutableCache=Y.Boolean("--immutable-cache",{description:"Abort with an error exit code if the cache folder was to be modified"});this.checkCache=Y.Boolean("--check-cache",!1,{description:"Always refetch the packages and ensure that their checksums are consistent"});this.inlineBuilds=Y.Boolean("--inline-builds",{description:"Verbosely print the output of the build steps of dependencies"});this.mode=Y.String("--mode",{description:"Change what artifacts installs generate",validator:Yi(li)});this.cacheFolder=Y.String("--cache-folder",{hidden:!0});this.frozenLockfile=Y.Boolean("--frozen-lockfile",{hidden:!0});this.ignoreEngines=Y.Boolean("--ignore-engines",{hidden:!0});this.nonInteractive=Y.Boolean("--non-interactive",{hidden:!0});this.preferOffline=Y.Boolean("--prefer-offline",{hidden:!0});this.production=Y.Boolean("--production",{hidden:!0});this.registry=Y.String("--registry",{hidden:!0});this.silent=Y.Boolean("--silent",{hidden:!0});this.networkTimeout=Y.String("--network-timeout",{hidden:!0})}async execute(){var c;let e=await fe.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds!="undefined"&&e.useWithSource("",{enableInlineBuilds:this.inlineBuilds},e.startingCwd,{overwrite:!0});let r=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,i=async(u,{error:g})=>{let f=await Fe.start({configuration:e,stdout:this.context.stdout,includeFooter:!1},async h=>{g?h.reportError(z.DEPRECATED_CLI_SETTINGS,u):h.reportWarning(z.DEPRECATED_CLI_SETTINGS,u)});return f.hasErrors()?f.exitCode():null};if(typeof this.ignoreEngines!="undefined"){let u=await i("The --ignore-engines option is deprecated; engine checking isn't a core feature anymore",{error:!W0.default.VERCEL});if(u!==null)return u}if(typeof this.registry!="undefined"){let u=await i("The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file",{error:!1});if(u!==null)return u}if(typeof this.preferOffline!="undefined"){let u=await i("The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead",{error:!W0.default.VERCEL});if(u!==null)return u}if(typeof this.production!="undefined"){let u=await i("The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead",{error:!0});if(u!==null)return u}if(typeof this.nonInteractive!="undefined"){let u=await i("The --non-interactive option is deprecated",{error:!r});if(u!==null)return u}if(typeof this.frozenLockfile!="undefined"&&(await i("The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead",{error:!1}),this.immutable=this.frozenLockfile),typeof this.cacheFolder!="undefined"){let u=await i("The cache-folder option has been deprecated; use rc settings instead",{error:!W0.default.NETLIFY});if(u!==null)return u}let n=(c=this.immutable)!=null?c:e.get("enableImmutableInstalls");if(e.projectCwd!==null){let u=await Fe.start({configuration:e,json:this.json,stdout:this.context.stdout,includeFooter:!1},async g=>{await Y4e(e,n)&&(g.reportInfo(z.AUTOMERGE_SUCCESS,"Automatically fixed merge conflicts \u{1F44D}"),g.reportSeparator())});if(u.hasErrors())return u.exitCode()}if(e.projectCwd!==null&&typeof e.sources.get("nodeLinker")=="undefined"){let u=e.projectCwd,g;try{g=await T.readFilePromise(v.join(u,wt.lockfile),"utf8")}catch{}if(g==null?void 0:g.includes("yarn lockfile v1")){let f=await Fe.start({configuration:e,json:this.json,stdout:this.context.stdout,includeFooter:!1},async h=>{h.reportInfo(z.AUTO_NM_SUCCESS,"Migrating from Yarn 1; automatically enabling the compatibility node-modules linker \u{1F44D}"),h.reportSeparator(),e.use("",{nodeLinker:"node-modules"},u,{overwrite:!0}),await fe.updateConfiguration(u,{nodeLinker:"node-modules"})});if(f.hasErrors())return f.exitCode()}}if(e.projectCwd!==null){let u=await Fe.start({configuration:e,json:this.json,stdout:this.context.stdout,includeFooter:!1},async g=>{var f;((f=fe.telemetry)==null?void 0:f.isNew)&&(g.reportInfo(z.TELEMETRY_NOTICE,"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry"),g.reportInfo(z.TELEMETRY_NOTICE,`Run ${ue.pretty(e,"yarn config set --home enableTelemetry 0",ue.Type.CODE)} to disable`),g.reportSeparator())});if(u.hasErrors())return u.exitCode()}let{project:s,workspace:o}=await Ke.find(e,this.context.cwd),a=await Qt.find(e,{immutable:this.immutableCache,check:this.checkCache});if(!o)throw new rt(s.cwd,this.context.cwd);return await s.restoreInstallState({restoreResolutions:!1}),(await Fe.start({configuration:e,json:this.json,stdout:this.context.stdout,includeLogs:!0},async u=>{await s.install({cache:a,report:u,immutable:n,mode:this.mode})})).exitCode()}};wC.paths=[["install"],ye.Default],wC.usage=ye.Usage({description:"install the project dependencies",details:` + This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics: + + - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ). + + - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of \`cacheFolder\` in \`yarn config\` to see where the cache files are stored). + + - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know). + + - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail. + + Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches. + + If the \`--immutable\` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the \`immutablePatterns\` configuration setting). For backward compatibility we offer an alias under the name of \`--frozen-lockfile\`, but it will be removed in a later release. + + If the \`--immutable-cache\` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed). + + If the \`--check-cache\` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them. + + If the \`--inline-builds\` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments. + + If the \`--mode=\` option is set, Yarn will change which artifacts are generated. The modes currently supported are: + + - \`skip-build\` will not run the build scripts at all. Note that this is different from setting \`enableScripts\` to false because the later will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run. + + - \`update-lockfile\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost. + `,examples:[["Install the project","$0 install"],["Validate a project when using Zero-Installs","$0 install --immutable --immutable-cache"],["Validate a project when using Zero-Installs (slightly safer if you accept external PRs)","$0 install --immutable --immutable-cache --check-cache"]]});var zae=wC,q4e="|||||||",J4e=">>>>>>>",W4e="=======",Vae="<<<<<<<";async function Y4e(t,e){if(!t.projectCwd)return!1;let r=v.join(t.projectCwd,t.get("lockfileFilename"));if(!await T.existsPromise(r))return!1;let i=await T.readFilePromise(r,"utf8");if(!i.includes(Vae))return!1;if(e)throw new nt(z.AUTOMERGE_IMMUTABLE,"Cannot autofix a lockfile when running an immutable install");let[n,s]=z4e(i),o,a;try{o=Ii(n),a=Ii(s)}catch(c){throw new nt(z.AUTOMERGE_FAILED_TO_PARSE,"The individual variants of the lockfile failed to parse")}let l=P(P({},o),a);for(let[c,u]of Object.entries(l))typeof u=="string"&&delete l[c];return await T.changeFilePromise(r,Qa(l),{automaticNewlines:!0}),!0}function z4e(t){let e=[[],[]],r=t.split(/\r?\n/g),i=!1;for(;r.length>0;){let n=r.shift();if(typeof n=="undefined")throw new Error("Assertion failed: Some lines should remain");if(n.startsWith(Vae)){for(;r.length>0;){let s=r.shift();if(typeof s=="undefined")throw new Error("Assertion failed: Some lines should remain");if(s===W4e){i=!1;break}else if(i||s.startsWith(q4e)){i=!0;continue}else e[0].push(s)}for(;r.length>0;){let s=r.shift();if(typeof s=="undefined")throw new Error("Assertion failed: Some lines should remain");if(s.startsWith(J4e))break;e[1].push(s)}}else e[0].push(n),e[1].push(n)}return[e[0].join(` +`),e[1].join(` +`)]}var BC=class extends Be{constructor(){super(...arguments);this.all=Y.Boolean("-A,--all",!1,{description:"Link all workspaces belonging to the target project to the current one"});this.private=Y.Boolean("-p,--private",!1,{description:"Also link private workspaces belonging to the target project to the current one"});this.relative=Y.Boolean("-r,--relative",!1,{description:"Link workspaces using relative paths instead of absolute paths"});this.destination=Y.String()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd),n=await Qt.find(e);if(!i)throw new rt(r.cwd,this.context.cwd);await r.restoreInstallState({restoreResolutions:!1});let s=v.resolve(this.context.cwd,M.toPortablePath(this.destination)),o=await fe.find(s,this.context.plugins,{useRc:!1,strict:!1}),{project:a,workspace:l}=await Ke.find(o,s);if(r.cwd===a.cwd)throw new me("Invalid destination; Can't link the project to itself");if(!l)throw new rt(a.cwd,s);let c=r.topLevelWorkspace,u=[];if(this.all){for(let f of a.workspaces)f.manifest.name&&(!f.manifest.private||this.private)&&u.push(f);if(u.length===0)throw new me("No workspace found to be linked in the target project")}else{if(!l.manifest.name)throw new me("The target workspace doesn't have a name and thus cannot be linked");if(l.manifest.private&&!this.private)throw new me("The target workspace is marked private - use the --private flag to link it anyway");u.push(l)}for(let f of u){let h=S.stringifyIdent(f.locator),p=this.relative?v.relative(r.cwd,f.cwd):f.cwd;c.manifest.resolutions.push({pattern:{descriptor:{fullName:h}},reference:`portal:${p}`})}return(await Fe.start({configuration:e,stdout:this.context.stdout},async f=>{await r.install({cache:n,report:f})})).exitCode()}};BC.paths=[["link"]],BC.usage=ye.Usage({description:"connect the local project to another one",details:"\n This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\n ",examples:[["Register a remote workspace for use in the current project","$0 link ~/ts-loader"],["Register all workspaces from a remote project for use in the current project","$0 link ~/jest --all"]]});var _ae=BC;var QC=class extends Be{constructor(){super(...arguments);this.args=Y.Proxy()}async execute(){return this.cli.run(["exec","node",...this.args])}};QC.paths=[["node"]],QC.usage=ye.Usage({description:"run node with the hook already setup",details:` + This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). + + The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version. + `,examples:[["Run a Node script","$0 node ./my-script.js"]]});var Xae=QC;var lAe=ie(require("os"));var rAe=ie(require("os"));var V4e="https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml";async function Kc(t){let e=await Zt.get(V4e,{configuration:t});return Ii(e.toString())}var bC=class extends Be{constructor(){super(...arguments);this.json=Y.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins);return(await Fe.start({configuration:e,json:this.json,stdout:this.context.stdout},async i=>{let n=await Kc(e);for(let s of Object.entries(n)){let[l,o]=s,a=o,{experimental:c}=a,u=qr(a,["experimental"]);let g=l;c&&(g+=" [experimental]"),i.reportJson(P({name:l,experimental:c},u)),i.reportInfo(null,g)}})).exitCode()}};bC.paths=[["plugin","list"]],bC.usage=ye.Usage({category:"Plugin-related commands",description:"list the available official plugins",details:"\n This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\n ",examples:[["List the official plugins","$0 plugin list"]]});var Zae=bC;var $ae=ie(Or()),vC=class extends Be{constructor(){super(...arguments);this.onlyIfNeeded=Y.Boolean("--only-if-needed",!1,{description:"Only lock the Yarn version if it isn't already locked"});this.version=Y.String()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins);if(e.get("yarnPath")&&this.onlyIfNeeded)return 0;let r=()=>{if(typeof Zr=="undefined")throw new me("The --install flag can only be used without explicit version specifier from the Yarn CLI");return`file://${process.argv[1]}`},i;if(this.version==="self")i=r();else if(this.version==="latest"||this.version==="berry"||this.version==="stable")i=`https://repo.yarnpkg.com/${await eAe(e,"stable")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version==="canary")i=`https://repo.yarnpkg.com/${await eAe(e,"canary")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version==="classic")i="https://nightly.yarnpkg.com/latest.js";else if(this.version.match(/^\.{0,2}[\\/]/)||M.isAbsolute(this.version))i=`file://${M.resolve(this.version)}`;else if(qt.satisfiesWithPrereleases(this.version,">=2.0.0"))i=`https://repo.yarnpkg.com/${this.version}/packages/yarnpkg-cli/bin/yarn.js`;else if(qt.satisfiesWithPrereleases(this.version,"^0.x || ^1.x"))i=`https://github.com/yarnpkg/yarn/releases/download/v${this.version}/yarn-${this.version}.js`;else if(qt.validRange(this.version))i=`https://repo.yarnpkg.com/${await _4e(e,this.version)}/packages/yarnpkg-cli/bin/yarn.js`;else throw new me(`Invalid version descriptor "${this.version}"`);return(await Fe.start({configuration:e,stdout:this.context.stdout,includeLogs:!this.context.quiet},async s=>{let o="file://",a;i.startsWith(o)?(s.reportInfo(z.UNNAMED,`Downloading ${ue.pretty(e,i,ps.URL)}`),a=await T.readFilePromise(M.toPortablePath(i.slice(o.length)))):(s.reportInfo(z.UNNAMED,`Retrieving ${ue.pretty(e,i,ps.PATH)}`),a=await Zt.get(i,{configuration:e})),await XN(e,null,a,{report:s})})).exitCode()}};vC.paths=[["set","version"]],vC.usage=ye.Usage({description:"lock the Yarn version used by the project",details:"\n This command will download a specific release of Yarn directly from the Yarn GitHub repository, will store it inside your project, and will change the `yarnPath` settings from your project `.yarnrc.yml` file to point to the new file.\n\n A very good use case for this command is to enforce the version of Yarn used by the any single member of your team inside a same project - by doing this you ensure that you have control on Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting a different behavior than you.\n\n The version specifier can be:\n\n - a tag:\n - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\n - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\n - `classic` -> the most recent classic (`^0.x || ^1.x`) release\n\n - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\n\n - a semver version (e.g. `2.4.1`, `1.22.1`)\n\n - a local file referenced through either a relative or absolute path\n\n - `self` -> the version used to invoke the command\n ",examples:[["Download the latest release from the Yarn repository","$0 set version latest"],["Download the latest canary release from the Yarn repository","$0 set version canary"],["Download the latest classic release from the Yarn repository","$0 set version classic"],["Download the most recent Yarn 3 build","$0 set version 3.x"],["Download a specific Yarn 2 build","$0 set version 2.0.0-rc.30"],["Switch back to a specific Yarn 1 release","$0 set version 1.22.1"],["Use a release from the local filesystem","$0 set version ./yarn.cjs"],["Download the version used to invoke the command","$0 set version self"]]});var tAe=vC;async function _4e(t,e){let i=(await Zt.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0})).tags.filter(n=>qt.satisfiesWithPrereleases(n,e));if(i.length===0)throw new me(`No matching release found for range ${ue.pretty(t,e,ue.Type.RANGE)}.`);return i[0]}async function eAe(t,e){let r=await Zt.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0});if(!r.latest[e])throw new me(`Tag ${ue.pretty(t,e,ue.Type.RANGE)} not found`);return r.latest[e]}async function XN(t,e,r,{report:i}){var g;e===null&&await T.mktempPromise(async f=>{let h=v.join(f,"yarn.cjs");await T.writeFilePromise(h,r);let{stdout:p}=await hr.execvp(process.execPath,[M.fromPortablePath(h),"--version"],{cwd:f,env:_(P({},process.env),{YARN_IGNORE_PATH:"1"})});if(e=p.trim(),!$ae.default.valid(e))throw new Error(`Invalid semver version. ${ue.pretty(t,"yarn --version",ue.Type.CODE)} returned: +${e}`)});let n=(g=t.projectCwd)!=null?g:t.startingCwd,s=v.resolve(n,".yarn/releases"),o=v.resolve(s,`yarn-${e}.cjs`),a=v.relative(t.startingCwd,o),l=v.relative(n,o),c=t.get("yarnPath"),u=c===null||c.startsWith(`${s}/`);if(i.reportInfo(z.UNNAMED,`Saving the new release in ${ue.pretty(t,a,"magenta")}`),await T.removePromise(v.dirname(o)),await T.mkdirPromise(v.dirname(o),{recursive:!0}),await T.writeFilePromise(o,r,{mode:493}),u){await fe.updateConfiguration(n,{yarnPath:l});let f=await Ze.tryFind(n)||new Ze;e&&de.isTaggedYarnVersion(e)&&(f.packageManager=`yarn@${e}`);let h={};f.exportTo(h);let p=v.join(n,Ze.fileName),d=`${JSON.stringify(h,null,f.indent)} +`;await T.changeFilePromise(p,d,{automaticNewlines:!0})}}var X4e=/^[0-9]+$/;function iAe(t){return X4e.test(t)?`pull/${t}/head`:t}var Z4e=({repository:t,branch:e},r)=>[["git","init",M.fromPortablePath(r)],["git","remote","add","origin",t],["git","fetch","origin",iAe(e)],["git","reset","--hard","FETCH_HEAD"]],$4e=({branch:t})=>[["git","fetch","origin",iAe(t),"--force"],["git","reset","--hard","FETCH_HEAD"],["git","clean","-dfx"]],eze=({plugins:t,noMinify:e},r)=>[["yarn","build:cli",...new Array().concat(...t.map(i=>["--plugin",v.resolve(r,i)])),...e?["--no-minify"]:[],"|"]],SC=class extends Be{constructor(){super(...arguments);this.installPath=Y.String("--path",{description:"The path where the repository should be cloned to"});this.repository=Y.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=Y.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.plugins=Y.Array("--plugin",[],{description:"An array of additional plugins that should be included in the bundle"});this.noMinify=Y.Boolean("--no-minify",!1,{description:"Build a bundle for development (debugging) - non-minified and non-mangled"});this.force=Y.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.skipPlugins=Y.Boolean("--skip-plugins",!1,{description:"Skip updating the contrib plugins"})}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r}=await Ke.find(e,this.context.cwd),i=typeof this.installPath!="undefined"?v.resolve(this.context.cwd,M.toPortablePath(this.installPath)):v.resolve(M.toPortablePath((0,rAe.tmpdir)()),"yarnpkg-sources",mn.makeHash(this.repository).slice(0,6));return(await Fe.start({configuration:e,stdout:this.context.stdout},async s=>{await $N(this,{configuration:e,report:s,target:i}),s.reportSeparator(),s.reportInfo(z.UNNAMED,"Building a fresh bundle"),s.reportSeparator(),await xC(eze(this,i),{configuration:e,context:this.context,target:i}),s.reportSeparator();let o=v.resolve(i,"packages/yarnpkg-cli/bundles/yarn.js"),a=await T.readFilePromise(o);await XN(e,"sources",a,{report:s}),this.skipPlugins||await tze(this,{project:r,report:s,target:i})})).exitCode()}};SC.paths=[["set","version","from","sources"]],SC.usage=ye.Usage({description:"build Yarn from master",details:` + This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project. + + By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \`--skip-plugins\` flag. + `,examples:[["Build Yarn from master","$0 set version from sources"]]});var nAe=SC;async function xC(t,{configuration:e,context:r,target:i}){for(let[n,...s]of t){let o=s[s.length-1]==="|";if(o&&s.pop(),o)await hr.pipevp(n,s,{cwd:i,stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,strict:!0});else{r.stdout.write(`${ue.pretty(e,` $ ${[n,...s].join(" ")}`,"grey")} +`);try{await hr.execvp(n,s,{cwd:i,strict:!0})}catch(a){throw r.stdout.write(a.stdout||a.stack),a}}}}async function $N(t,{configuration:e,report:r,target:i}){let n=!1;if(!t.force&&T.existsSync(v.join(i,".git"))){r.reportInfo(z.UNNAMED,"Fetching the latest commits"),r.reportSeparator();try{await xC($4e(t),{configuration:e,context:t.context,target:i}),n=!0}catch(s){r.reportSeparator(),r.reportWarning(z.UNNAMED,"Repository update failed; we'll try to regenerate it")}}n||(r.reportInfo(z.UNNAMED,"Cloning the remote repository"),r.reportSeparator(),await T.removePromise(i),await T.mkdirPromise(i,{recursive:!0}),await xC(Z4e(t,i),{configuration:e,context:t.context,target:i}))}async function tze(t,{project:e,report:r,target:i}){let n=await Kc(e.configuration),s=new Set(Object.keys(n));for(let o of e.configuration.plugins.keys())!s.has(o)||await ZN(o,t,{project:e,report:r,target:i})}var sAe=ie(Or()),oAe=ie(require("url")),aAe=ie(require("vm"));var kC=class extends Be{constructor(){super(...arguments);this.name=Y.String()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins);return(await Fe.start({configuration:e,stdout:this.context.stdout},async i=>{let{project:n}=await Ke.find(e,this.context.cwd),s,o;if(this.name.match(/^\.{0,2}[\\/]/)||M.isAbsolute(this.name)){let a=v.resolve(this.context.cwd,M.toPortablePath(this.name));i.reportInfo(z.UNNAMED,`Reading ${ue.pretty(e,a,ue.Type.PATH)}`),s=v.relative(n.cwd,a),o=await T.readFilePromise(a)}else{let a;if(this.name.match(/^https?:/)){try{new oAe.URL(this.name)}catch{throw new nt(z.INVALID_PLUGIN_REFERENCE,`Plugin specifier "${this.name}" is neither a plugin name nor a valid url`)}s=this.name,a=this.name}else{let l=S.parseLocator(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-"));if(l.reference!=="unknown"&&!sAe.default.valid(l.reference))throw new nt(z.UNNAMED,"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.");let c=S.stringifyIdent(l),u=await Kc(e);if(!Object.prototype.hasOwnProperty.call(u,c))throw new nt(z.PLUGIN_NAME_NOT_FOUND,`Couldn't find a plugin named "${c}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be referenced by their name; any other plugin will have to be referenced through its public url (for example https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js).`);s=c,a=u[c].url,l.reference!=="unknown"?a=a.replace(/\/master\//,`/${c}/${l.reference}/`):Zr!==null&&(a=a.replace(/\/master\//,`/@yarnpkg/cli/${Zr}/`))}i.reportInfo(z.UNNAMED,`Downloading ${ue.pretty(e,a,"green")}`),o=await Zt.get(a,{configuration:e})}await eL(s,o,{project:n,report:i})})).exitCode()}};kC.paths=[["plugin","import"]],kC.usage=ye.Usage({category:"Plugin-related commands",description:"download a plugin",details:` + This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations. + + Three types of plugin references are accepted: + + - If the plugin is stored within the Yarn repository, it can be referenced by name. + - Third-party plugins can be referenced directly through their public urls. + - Local plugins can be referenced by their path on the disk. + + Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \`@yarnpkg/builder\` package). + `,examples:[['Download and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import @yarnpkg/plugin-exec"],['Download and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import exec"],["Download and activate a community plugin","$0 plugin import https://example.org/path/to/plugin.js"],["Activate a local plugin","$0 plugin import ./path/to/plugin.js"]]});var AAe=kC;async function eL(t,e,{project:r,report:i}){let{configuration:n}=r,s={},o={exports:s};(0,aAe.runInNewContext)(e.toString(),{module:o,exports:s});let a=o.exports.name,l=`.yarn/plugins/${a}.cjs`,c=v.resolve(r.cwd,l);i.reportInfo(z.UNNAMED,`Saving the new plugin in ${ue.pretty(n,l,"magenta")}`),await T.mkdirPromise(v.dirname(c),{recursive:!0}),await T.writeFilePromise(c,e);let u={path:l,spec:t};await fe.updateConfiguration(r.cwd,g=>{let f=[],h=!1;for(let p of g.plugins||[]){let d=typeof p!="string"?p.path:p,m=v.resolve(r.cwd,M.toPortablePath(d)),{name:I}=de.dynamicRequire(m);I!==a?f.push(p):(f.push(u),h=!0)}return h||f.push(u),_(P({},g),{plugins:f})})}var rze=({pluginName:t,noMinify:e},r)=>[["yarn",`build:${t}`,...e?["--no-minify"]:[],"|"]],PC=class extends Be{constructor(){super(...arguments);this.installPath=Y.String("--path",{description:"The path where the repository should be cloned to"});this.repository=Y.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=Y.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.noMinify=Y.Boolean("--no-minify",!1,{description:"Build a plugin for development (debugging) - non-minified and non-mangled"});this.force=Y.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.name=Y.String()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),r=typeof this.installPath!="undefined"?v.resolve(this.context.cwd,M.toPortablePath(this.installPath)):v.resolve(M.toPortablePath((0,lAe.tmpdir)()),"yarnpkg-sources",mn.makeHash(this.repository).slice(0,6));return(await Fe.start({configuration:e,stdout:this.context.stdout},async n=>{let{project:s}=await Ke.find(e,this.context.cwd),o=S.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),a=S.stringifyIdent(o),l=await Kc(e);if(!Object.prototype.hasOwnProperty.call(l,a))throw new nt(z.PLUGIN_NAME_NOT_FOUND,`Couldn't find a plugin named "${a}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let c=a;await $N(this,{configuration:e,report:n,target:r}),await ZN(c,this,{project:s,report:n,target:r})})).exitCode()}};PC.paths=[["plugin","import","from","sources"]],PC.usage=ye.Usage({category:"Plugin-related commands",description:"build a plugin from sources",details:` + This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations. + + The plugins can be referenced by their short name if sourced from the official Yarn repository. + `,examples:[['Build and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import from sources @yarnpkg/plugin-exec"],['Build and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import from sources exec"]]});var cAe=PC;async function ZN(t,{context:e,noMinify:r},{project:i,report:n,target:s}){let o=t.replace(/@yarnpkg\//,""),{configuration:a}=i;n.reportSeparator(),n.reportInfo(z.UNNAMED,`Building a fresh ${o}`),n.reportSeparator(),await xC(rze({pluginName:o,noMinify:r},s),{configuration:a,context:e,target:s}),n.reportSeparator();let l=v.resolve(s,`packages/${o}/bundles/${t}.js`),c=await T.readFilePromise(l);await eL(t,c,{project:i,report:n})}var DC=class extends Be{constructor(){super(...arguments);this.name=Y.String()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r}=await Ke.find(e,this.context.cwd);return(await Fe.start({configuration:e,stdout:this.context.stdout},async n=>{let s=this.name,o=S.parseIdent(s);if(!e.plugins.has(s))throw new me(`${S.prettyIdent(e,o)} isn't referenced by the current configuration`);let a=`.yarn/plugins/${s}.cjs`,l=v.resolve(r.cwd,a);T.existsSync(l)&&(n.reportInfo(z.UNNAMED,`Removing ${ue.pretty(e,a,ue.Type.PATH)}...`),await T.removePromise(l)),n.reportInfo(z.UNNAMED,"Updating the configuration..."),await fe.updateConfiguration(r.cwd,c=>{if(!Array.isArray(c.plugins))return c;let u=c.plugins.filter(g=>g.path!==a);return c.plugins.length===u.length?c:_(P({},c),{plugins:u})})})).exitCode()}};DC.paths=[["plugin","remove"]],DC.usage=ye.Usage({category:"Plugin-related commands",description:"remove a plugin",details:` + This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration. + + **Note:** The plugins have to be referenced by their name property, which can be obtained using the \`yarn plugin runtime\` command. Shorthands are not allowed. + `,examples:[["Remove a plugin imported from the Yarn repository","$0 plugin remove @yarnpkg/plugin-typescript"],["Remove a plugin imported from a local file","$0 plugin remove my-local-plugin"]]});var uAe=DC;var RC=class extends Be{constructor(){super(...arguments);this.json=Y.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins);return(await Fe.start({configuration:e,json:this.json,stdout:this.context.stdout},async i=>{for(let n of e.plugins.keys()){let s=this.context.plugins.plugins.has(n),o=n;s&&(o+=" [builtin]"),i.reportJson({name:n,builtin:s}),i.reportInfo(null,`${o}`)}})).exitCode()}};RC.paths=[["plugin","runtime"]],RC.usage=ye.Usage({category:"Plugin-related commands",description:"list the active plugins",details:` + This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins. + `,examples:[["List the currently active plugins","$0 plugin runtime"]]});var gAe=RC;var FC=class extends Be{constructor(){super(...arguments);this.idents=Y.Rest()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd),n=await Qt.find(e);if(!i)throw new rt(r.cwd,this.context.cwd);let s=new Set;for(let a of this.idents)s.add(S.parseIdent(a).identHash);if(await r.restoreInstallState({restoreResolutions:!1}),await r.resolveEverything({cache:n,report:new ei}),s.size>0)for(let a of r.storedPackages.values())s.has(a.identHash)&&r.storedBuildState.delete(a.locatorHash);else r.storedBuildState.clear();return(await Fe.start({configuration:e,stdout:this.context.stdout,includeLogs:!this.context.quiet},async a=>{await r.install({cache:n,report:a})})).exitCode()}};FC.paths=[["rebuild"]],FC.usage=ye.Usage({description:"rebuild the project's native packages",details:` + This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again. + + Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future). + + By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory. + `,examples:[["Rebuild all packages","$0 rebuild"],["Rebuild fsevents only","$0 rebuild fsevents"]]});var fAe=FC;var tL=ie(Nn());Ss();var NC=class extends Be{constructor(){super(...arguments);this.all=Y.Boolean("-A,--all",!1,{description:"Apply the operation to all workspaces from the current project"});this.mode=Y.String("--mode",{description:"Change what artifacts installs generate",validator:Yi(li)});this.patterns=Y.Rest()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd),n=await Qt.find(e);if(!i)throw new rt(r.cwd,this.context.cwd);await r.restoreInstallState({restoreResolutions:!1});let s=this.all?r.workspaces:[i],o=[vr.REGULAR,vr.DEVELOPMENT,vr.PEER],a=[],l=!1,c=[];for(let h of this.patterns){let p=!1,d=S.parseIdent(h);for(let m of s){let I=[...m.manifest.peerDependenciesMeta.keys()];for(let B of(0,tL.default)(I,h))m.manifest.peerDependenciesMeta.delete(B),l=!0,p=!0;for(let B of o){let b=m.manifest.getForScope(B),R=[...b.values()].map(H=>S.stringifyIdent(H));for(let H of(0,tL.default)(R,S.stringifyIdent(d))){let{identHash:L}=S.parseIdent(H),K=b.get(L);if(typeof K=="undefined")throw new Error("Assertion failed: Expected the descriptor to be registered");m.manifest[B].delete(L),c.push([m,B,K]),l=!0,p=!0}}}p||a.push(h)}let u=a.length>1?"Patterns":"Pattern",g=a.length>1?"don't":"doesn't",f=this.all?"any":"this";if(a.length>0)throw new me(`${u} ${ue.prettyList(e,a,ps.CODE)} ${g} match any packages referenced by ${f} workspace`);return l?(await e.triggerMultipleHooks(p=>p.afterWorkspaceDependencyRemoval,c),(await Fe.start({configuration:e,stdout:this.context.stdout},async p=>{await r.install({cache:n,report:p,mode:this.mode})})).exitCode()):0}};NC.paths=[["remove"]],NC.usage=ye.Usage({description:"remove dependencies from the project",details:` + This command will remove the packages matching the specified patterns from the current workspace. + + If the \`--mode=\` option is set, Yarn will change which artifacts are generated. The modes currently supported are: + + - \`skip-build\` will not run the build scripts at all. Note that this is different from setting \`enableScripts\` to false because the later will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run. + + - \`update-lockfile\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost. + + This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them. + `,examples:[["Remove a dependency from the current project","$0 remove lodash"],["Remove a dependency from all workspaces at once","$0 remove lodash --all"],["Remove all dependencies starting with `eslint-`","$0 remove 'eslint-*'"],["Remove all dependencies with the `@babel` scope","$0 remove '@babel/*'"],["Remove all dependencies matching `react-dom` or `react-helmet`","$0 remove 'react-{dom,helmet}'"]]});var hAe=NC;var pAe=ie(require("util")),z0=class extends Be{async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd);if(!i)throw new rt(r.cwd,this.context.cwd);return(await Fe.start({configuration:e,stdout:this.context.stdout},async s=>{let o=i.manifest.scripts,a=de.sortMap(o.keys(),u=>u),l={breakLength:Infinity,colors:e.get("enableColors"),maxArrayLength:2},c=a.reduce((u,g)=>Math.max(u,g.length),0);for(let[u,g]of o.entries())s.reportInfo(null,`${u.padEnd(c," ")} ${(0,pAe.inspect)(g,l)}`)})).exitCode()}};z0.paths=[["run"]];var dAe=z0;var LC=class extends Be{constructor(){super(...arguments);this.inspect=Y.String("--inspect",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.inspectBrk=Y.String("--inspect-brk",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.topLevel=Y.Boolean("-T,--top-level",!1,{description:"Check the root workspace for scripts and/or binaries instead of the current one"});this.binariesOnly=Y.Boolean("-B,--binaries-only",!1,{description:"Ignore any user defined scripts and only check for binaries"});this.silent=Y.Boolean("--silent",{hidden:!0});this.scriptName=Y.String();this.args=Y.Proxy()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i,locator:n}=await Ke.find(e,this.context.cwd);await r.restoreInstallState();let s=this.topLevel?r.topLevelWorkspace.anchoredLocator:n;if(!this.binariesOnly&&await Kt.hasPackageScript(s,this.scriptName,{project:r}))return await Kt.executePackageScript(s,this.scriptName,this.args,{project:r,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let o=await Kt.getPackageAccessibleBinaries(s,{project:r});if(o.get(this.scriptName)){let l=[];return this.inspect&&(typeof this.inspect=="string"?l.push(`--inspect=${this.inspect}`):l.push("--inspect")),this.inspectBrk&&(typeof this.inspectBrk=="string"?l.push(`--inspect-brk=${this.inspectBrk}`):l.push("--inspect-brk")),await Kt.executePackageAccessibleBinary(s,this.scriptName,this.args,{cwd:this.context.cwd,project:r,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:l,packageAccessibleBinaries:o})}if(!this.topLevel&&!this.binariesOnly&&i&&this.scriptName.includes(":")){let c=(await Promise.all(r.workspaces.map(async u=>u.manifest.scripts.has(this.scriptName)?u:null))).filter(u=>u!==null);if(c.length===1)return await Kt.executeWorkspaceScript(c[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName==="node-gyp"?new me(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${S.prettyLocator(e,n)}). This typically happens because some package depends on "node-gyp" to build itself, but didn't list it in their dependencies. To fix that, please run "yarn add node-gyp" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new me(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${S.prettyLocator(e,n)}).`);{if(this.scriptName==="global")throw new me("The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead");let l=[this.scriptName].concat(this.args);for(let[c,u]of Yg)for(let g of u)if(l.length>=g.length&&JSON.stringify(l.slice(0,g.length))===JSON.stringify(g))throw new me(`Couldn't find a script named "${this.scriptName}", but a matching command can be found in the ${c} plugin. You can install it with "yarn plugin import ${c}".`);throw new me(`Couldn't find a script named "${this.scriptName}".`)}}};LC.paths=[["run"]],LC.usage=ye.Usage({description:"run a script defined in the package.json",details:` + This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace: + + - If the \`scripts\` field from your local package.json contains a matching script name, its definition will get executed. + + - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed. + + - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed. + + Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax). + `,examples:[["Run the tests from the local workspace","$0 run test"],['Same thing, but without the "run" keyword',"$0 test"],["Inspect Webpack while running","$0 run --inspect-brk webpack"]]});var CAe=LC;var TC=class extends Be{constructor(){super(...arguments);this.save=Y.Boolean("-s,--save",!1,{description:"Persist the resolution inside the top-level manifest"});this.descriptor=Y.String();this.resolution=Y.String()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd),n=await Qt.find(e);if(await r.restoreInstallState({restoreResolutions:!1}),!i)throw new rt(r.cwd,this.context.cwd);let s=S.parseDescriptor(this.descriptor,!0),o=S.makeDescriptor(s,this.resolution);return r.storedDescriptors.set(s.descriptorHash,s),r.storedDescriptors.set(o.descriptorHash,o),r.resolutionAliases.set(s.descriptorHash,o.descriptorHash),(await Fe.start({configuration:e,stdout:this.context.stdout},async l=>{await r.install({cache:n,report:l})})).exitCode()}};TC.paths=[["set","resolution"]],TC.usage=ye.Usage({description:"enforce a package resolution",details:'\n This command updates the resolution table so that `descriptor` is resolved by `resolution`.\n\n Note that by default this command only affect the current resolution table - meaning that this "manual override" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, add the `-s,--save` flag which will also edit the `resolutions` field from your top-level manifest.\n\n Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\n ',examples:[["Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0","$0 set resolution lodash@npm:^1.2.3 1.5.0"]]});var mAe=TC;var EAe=ie(Nn()),MC=class extends Be{constructor(){super(...arguments);this.all=Y.Boolean("-A,--all",!1,{description:"Unlink all workspaces belonging to the target project from the current one"});this.leadingArguments=Y.Rest()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd),n=await Qt.find(e);if(!i)throw new rt(r.cwd,this.context.cwd);let s=r.topLevelWorkspace,o=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:l,reference:c}of s.manifest.resolutions)c.startsWith("portal:")&&o.add(l.descriptor.fullName);if(this.leadingArguments.length>0)for(let l of this.leadingArguments){let c=v.resolve(this.context.cwd,M.toPortablePath(l));if(de.isPathLike(l)){let u=await fe.find(c,this.context.plugins,{useRc:!1,strict:!1}),{project:g,workspace:f}=await Ke.find(u,c);if(!f)throw new rt(g.cwd,c);if(this.all){for(let h of g.workspaces)h.manifest.name&&o.add(S.stringifyIdent(h.locator));if(o.size===0)throw new me("No workspace found to be unlinked in the target project")}else{if(!f.manifest.name)throw new me("The target workspace doesn't have a name and thus cannot be unlinked");o.add(S.stringifyIdent(f.locator))}}else{let u=[...s.manifest.resolutions.map(({pattern:g})=>g.descriptor.fullName)];for(let g of(0,EAe.default)(u,l))o.add(g)}}return s.manifest.resolutions=s.manifest.resolutions.filter(({pattern:l})=>!o.has(l.descriptor.fullName)),(await Fe.start({configuration:e,stdout:this.context.stdout},async l=>{await r.install({cache:n,report:l})})).exitCode()}};MC.paths=[["unlink"]],MC.usage=ye.Usage({description:"disconnect the local project from another one",details:` + This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments. + `,examples:[["Unregister a remote workspace in the current project","$0 unlink ~/ts-loader"],["Unregister all workspaces from a remote project in the current project","$0 unlink ~/jest --all"],["Unregister all previously linked workspaces","$0 unlink --all"],["Unregister all workspaces matching a glob","$0 unlink '@babel/*' 'pkg-{a,b}'"]]});var IAe=MC;var yAe=ie(aC()),rL=ie(Nn());Ss();var uf=class extends Be{constructor(){super(...arguments);this.interactive=Y.Boolean("-i,--interactive",{description:"Offer various choices, depending on the detected upgrade paths"});this.exact=Y.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=Y.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=Y.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.recursive=Y.Boolean("-R,--recursive",!1,{description:"Resolve again ALL resolutions for those packages"});this.mode=Y.String("--mode",{description:"Change what artifacts installs generate",validator:Yi(li)});this.patterns=Y.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd),n=await Qt.find(e);if(!i)throw new rt(r.cwd,this.context.cwd);await r.restoreInstallState({restoreResolutions:!1});let s=[...r.storedDescriptors.values()],o=s.map(u=>S.stringifyIdent(u)),a=new Set;for(let u of this.patterns){if(S.parseDescriptor(u).range!=="unknown")throw new me("Ranges aren't allowed when using --recursive");for(let g of(0,rL.default)(o,u)){let f=S.parseIdent(g);a.add(f.identHash)}}let l=s.filter(u=>a.has(u.identHash));for(let u of l)r.storedDescriptors.delete(u.descriptorHash),r.storedResolutions.delete(u.descriptorHash);return(await Fe.start({configuration:e,stdout:this.context.stdout},async u=>{await r.install({cache:n,report:u})})).exitCode()}async executeUpClassic(){var d;let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd),n=await Qt.find(e);if(!i)throw new rt(r.cwd,this.context.cwd);await r.restoreInstallState({restoreResolutions:!1});let s=(d=this.interactive)!=null?d:e.get("preferInteractive"),o=AC(this,r),a=s?[Fr.KEEP,Fr.REUSE,Fr.PROJECT,Fr.LATEST]:[Fr.PROJECT,Fr.LATEST],l=[],c=[];for(let m of this.patterns){let I=!1,B=S.parseDescriptor(m);for(let b of r.workspaces)for(let R of[vr.REGULAR,vr.DEVELOPMENT]){let L=[...b.manifest.getForScope(R).values()].map(K=>S.stringifyIdent(K));for(let K of(0,rL.default)(L,S.stringifyIdent(B))){let J=S.parseIdent(K),ne=b.manifest[R].get(J.identHash);if(typeof ne=="undefined")throw new Error("Assertion failed: Expected the descriptor to be registered");let q=S.makeDescriptor(J,B.range);l.push(Promise.resolve().then(async()=>[b,R,ne,await lC(q,{project:r,workspace:b,cache:n,target:R,modifier:o,strategies:a})])),I=!0}}I||c.push(m)}if(c.length>1)throw new me(`Patterns ${ue.prettyList(e,c,ps.CODE)} don't match any packages referenced by any workspace`);if(c.length>0)throw new me(`Pattern ${ue.prettyList(e,c,ps.CODE)} doesn't match any packages referenced by any workspace`);let u=await Promise.all(l),g=await Fa.start({configuration:e,stdout:this.context.stdout,suggestInstall:!1},async m=>{for(let[,,I,{suggestions:B,rejections:b}]of u){let R=B.filter(H=>H.descriptor!==null);if(R.length===0){let[H]=b;if(typeof H=="undefined")throw new Error("Assertion failed: Expected an error to have been set");let L=this.cli.error(H);r.configuration.get("enableNetwork")?m.reportError(z.CANT_SUGGEST_RESOLUTIONS,`${S.prettyDescriptor(e,I)} can't be resolved to a satisfying range + +${L}`):m.reportError(z.CANT_SUGGEST_RESOLUTIONS,`${S.prettyDescriptor(e,I)} can't be resolved to a satisfying range (note: network resolution has been disabled) + +${L}`)}else R.length>1&&!s&&m.reportError(z.CANT_SUGGEST_RESOLUTIONS,`${S.prettyDescriptor(e,I)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(g.hasErrors())return g.exitCode();let f=!1,h=[];for(let[m,I,,{suggestions:B}]of u){let b,R=B.filter(J=>J.descriptor!==null),H=R[0].descriptor,L=R.every(J=>S.areDescriptorsEqual(J.descriptor,H));R.length===1||L?b=H:(f=!0,{answer:b}=await(0,yAe.prompt)({type:"select",name:"answer",message:`Which range to you want to use in ${S.prettyWorkspace(e,m)} \u276F ${I}?`,choices:B.map(({descriptor:J,name:ne,reason:q})=>J?{name:ne,hint:q,descriptor:J}:{name:ne,hint:q,disabled:!0}),onCancel:()=>process.exit(130),result(J){return this.find(J,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let K=m.manifest[I].get(b.identHash);if(typeof K=="undefined")throw new Error("Assertion failed: This descriptor should have a matching entry");if(K.descriptorHash!==b.descriptorHash)m.manifest[I].set(b.identHash,b),h.push([m,I,K,b]);else{let J=e.makeResolver(),ne={project:r,resolver:J},q=J.bindDescriptor(K,m.anchoredLocator,ne);r.forgetResolution(q)}}return await e.triggerMultipleHooks(m=>m.afterWorkspaceDependencyReplacement,h),f&&this.context.stdout.write(` +`),(await Fe.start({configuration:e,stdout:this.context.stdout},async m=>{await r.install({cache:n,report:m,mode:this.mode})})).exitCode()}};uf.paths=[["up"]],uf.usage=ye.Usage({description:"upgrade dependencies across the project",details:"\n This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\n\n If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\n\n If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\n\n The, `-C,--caret`, `-E,--exact` and `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the later will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\n\n This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\n ",examples:[["Upgrade all instances of lodash to the latest release","$0 up lodash"],["Upgrade all instances of lodash to the latest release, but ask confirmation for each","$0 up lodash -i"],["Upgrade all instances of lodash to 1.2.3","$0 up lodash@1.2.3"],["Upgrade all instances of packages with the `@babel` scope to the latest release","$0 up '@babel/*'"],["Upgrade all instances of packages containing the word `jest` to the latest release","$0 up '*jest*'"],["Upgrade all instances of packages with the `@babel` scope to 7.0.0","$0 up '@babel/*@7.0.0'"]]}),uf.schema=[pv("recursive",Bl.Forbids,["interactive","exact","tilde","caret"],{ignore:[void 0,!1]})];var wAe=uf;var OC=class extends Be{constructor(){super(...arguments);this.recursive=Y.Boolean("-R,--recursive",!1,{description:"List, for each workspace, what are all the paths that lead to the dependency"});this.json=Y.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.peers=Y.Boolean("--peers",!1,{description:"Also print the peer dependencies that match the specified name"});this.package=Y.String()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd);if(!i)throw new rt(r.cwd,this.context.cwd);await r.restoreInstallState();let n=S.parseIdent(this.package).identHash,s=this.recursive?nze(r,n,{configuration:e,peers:this.peers}):ize(r,n,{configuration:e,peers:this.peers});Hs.emitTree(s,{configuration:e,stdout:this.context.stdout,json:this.json,separators:1})}};OC.paths=[["why"]],OC.usage=ye.Usage({description:"display the reason why a package is needed",details:` + This command prints the exact reasons why a package appears in the dependency tree. + + If \`-R,--recursive\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named "Foo" when looking for "Bar", it means that "Foo" already got printed higher in the tree. + `,examples:[["Explain why lodash is used in your project","$0 why lodash"]]});var BAe=OC;function ize(t,e,{configuration:r,peers:i}){let n=de.sortMap(t.storedPackages.values(),a=>S.stringifyLocator(a)),s={},o={children:s};for(let a of n){let l={},c=null;for(let u of a.dependencies.values()){if(!i&&a.peerDependencies.has(u.identHash))continue;let g=t.storedResolutions.get(u.descriptorHash);if(!g)throw new Error("Assertion failed: The resolution should have been registered");let f=t.storedPackages.get(g);if(!f)throw new Error("Assertion failed: The package should have been registered");if(f.identHash!==e)continue;if(c===null){let p=S.stringifyLocator(a);s[p]={value:[a,ue.Type.LOCATOR],children:l}}let h=S.stringifyLocator(f);l[h]={value:[{descriptor:u,locator:f},ue.Type.DEPENDENT]}}}return o}function nze(t,e,{configuration:r,peers:i}){let n=de.sortMap(t.workspaces,f=>S.stringifyLocator(f.anchoredLocator)),s=new Set,o=new Set,a=f=>{if(s.has(f.locatorHash))return o.has(f.locatorHash);if(s.add(f.locatorHash),f.identHash===e)return o.add(f.locatorHash),!0;let h=!1;f.identHash===e&&(h=!0);for(let p of f.dependencies.values()){if(!i&&f.peerDependencies.has(p.identHash))continue;let d=t.storedResolutions.get(p.descriptorHash);if(!d)throw new Error("Assertion failed: The resolution should have been registered");let m=t.storedPackages.get(d);if(!m)throw new Error("Assertion failed: The package should have been registered");a(m)&&(h=!0)}return h&&o.add(f.locatorHash),h};for(let f of n){let h=t.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error("Assertion failed: The package should have been registered");a(h)}let l=new Set,c={},u={children:c},g=(f,h,p)=>{if(!o.has(f.locatorHash))return;let d=p!==null?ue.tuple(ue.Type.DEPENDENT,{locator:f,descriptor:p}):ue.tuple(ue.Type.LOCATOR,f),m={},I={value:d,children:m},B=S.stringifyLocator(f);if(h[B]=I,!l.has(f.locatorHash)&&(l.add(f.locatorHash),!(p!==null&&t.tryWorkspaceByLocator(f))))for(let b of f.dependencies.values()){if(!i&&f.peerDependencies.has(b.identHash))continue;let R=t.storedResolutions.get(b.descriptorHash);if(!R)throw new Error("Assertion failed: The resolution should have been registered");let H=t.storedPackages.get(R);if(!H)throw new Error("Assertion failed: The package should have been registered");g(H,m,b)}};for(let f of n){let h=t.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error("Assertion failed: The package should have been registered");g(h,c,null)}return u}var fL={};it(fL,{default:()=>wze,gitUtils:()=>Uc});var Uc={};it(Uc,{TreeishProtocols:()=>vn,clone:()=>cL,fetchBase:()=>jAe,fetchChangedFiles:()=>YAe,fetchChangedWorkspaces:()=>Ize,fetchRoot:()=>GAe,isGitUrl:()=>ff,lsRemote:()=>HAe,normalizeLocator:()=>AL,normalizeRepoUrl:()=>KC,resolveUrl:()=>lL,splitRepoUrl:()=>UC});var oL=ie(OAe()),gf=ie(require("querystring")),aL=ie(Or()),KAe=ie(require("url"));function UAe(){return _(P({},process.env),{GIT_SSH_COMMAND:"ssh -o BatchMode=yes"})}var Eze=[/^ssh:/,/^git(?:\+[^:]+)?:/,/^(?:git\+)?https?:[^#]+\/[^#]+(?:\.git)(?:#.*)?$/,/^git@[^#]+\/[^#]+\.git(?:#.*)?$/,/^(?:github:|https:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z._0-9-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\.git)?(?:#.*)?$/,/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/],vn;(function(n){n.Commit="commit",n.Head="head",n.Tag="tag",n.Semver="semver"})(vn||(vn={}));function ff(t){return t?Eze.some(e=>!!t.match(e)):!1}function UC(t){t=KC(t);let e=t.indexOf("#");if(e===-1)return{repo:t,treeish:{protocol:vn.Head,request:"HEAD"},extra:{}};let r=t.slice(0,e),i=t.slice(e+1);if(i.match(/^[a-z]+=/)){let n=gf.default.parse(i);for(let[l,c]of Object.entries(n))if(typeof c!="string")throw new Error(`Assertion failed: The ${l} parameter must be a literal string`);let s=Object.values(vn).find(l=>Object.prototype.hasOwnProperty.call(n,l)),o,a;typeof s!="undefined"?(o=s,a=n[s]):(o=vn.Head,a="HEAD");for(let l of Object.values(vn))delete n[l];return{repo:r,treeish:{protocol:o,request:a},extra:n}}else{let n=i.indexOf(":"),s,o;return n===-1?(s=null,o=i):(s=i.slice(0,n),o=i.slice(n+1)),{repo:r,treeish:{protocol:s,request:o},extra:{}}}}function KC(t,{git:e=!1}={}){var r;if(t=t.replace(/^git\+https:/,"https:"),t=t.replace(/^(?:github:|https:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\.git)?(#.*)?$/,"https://github.com/$1/$2.git$3"),t=t.replace(/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/,"https://github.com/$1/$2.git#$3"),e){t=t.replace(/^git\+([^:]+):/,"$1:");let i;try{i=KAe.default.parse(t)}catch{i=null}i&&i.protocol==="ssh:"&&((r=i.path)==null?void 0:r.startsWith("/:"))&&(t=t.replace(/^ssh:\/\//,""))}return t}function AL(t){return S.makeLocator(t,KC(t.reference))}async function HAe(t,e){let r=KC(t,{git:!0});if(!Zt.getNetworkSettings(`https://${(0,oL.default)(r).resource}`,{configuration:e}).enableNetwork)throw new Error(`Request to '${r}' has been blocked because of your configuration settings`);let n;try{n=await hr.execvp("git",["ls-remote",r],{cwd:e.startingCwd,env:UAe(),strict:!0})}catch(l){throw l.message=`Listing the refs for ${t} failed`,l}let s=new Map,o=/^([a-f0-9]{40})\t([^\n]+)/gm,a;for(;(a=o.exec(n.stdout))!==null;)s.set(a[2],a[1]);return s}async function lL(t,e){let{repo:r,treeish:{protocol:i,request:n},extra:s}=UC(t),o=await HAe(r,e),a=(c,u)=>{switch(c){case vn.Commit:{if(!u.match(/^[a-f0-9]{40}$/))throw new Error("Invalid commit hash");return gf.default.stringify(_(P({},s),{commit:u}))}case vn.Head:{let g=o.get(u==="HEAD"?u:`refs/heads/${u}`);if(typeof g=="undefined")throw new Error(`Unknown head ("${u}")`);return gf.default.stringify(_(P({},s),{commit:g}))}case vn.Tag:{let g=o.get(`refs/tags/${u}`);if(typeof g=="undefined")throw new Error(`Unknown tag ("${u}")`);return gf.default.stringify(_(P({},s),{commit:g}))}case vn.Semver:{let g=qt.validRange(u);if(!g)throw new Error(`Invalid range ("${u}")`);let f=new Map([...o.entries()].filter(([p])=>p.startsWith("refs/tags/")).map(([p,d])=>[aL.default.parse(p.slice(10)),d]).filter(p=>p[0]!==null)),h=aL.default.maxSatisfying([...f.keys()],g);if(h===null)throw new Error(`No matching range ("${u}")`);return gf.default.stringify(_(P({},s),{commit:f.get(h)}))}case null:{let g;if((g=l(vn.Commit,u))!==null||(g=l(vn.Tag,u))!==null||(g=l(vn.Head,u))!==null)return g;throw u.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve "${u}" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve "${u}" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol ("${c}")`)}},l=(c,u)=>{try{return a(c,u)}catch(g){return null}};return`${r}#${a(i,n)}`}async function cL(t,e){return await e.getLimit("cloneConcurrency")(async()=>{let{repo:r,treeish:{protocol:i,request:n}}=UC(t);if(i!=="commit")throw new Error("Invalid treeish protocol when cloning");let s=KC(r,{git:!0});if(Zt.getNetworkSettings(`https://${(0,oL.default)(s).resource}`,{configuration:e}).enableNetwork===!1)throw new Error(`Request to '${s}' has been blocked because of your configuration settings`);let o=await T.mktempPromise(),a={cwd:o,env:UAe(),strict:!0};try{await hr.execvp("git",["clone","-c core.autocrlf=false",s,M.fromPortablePath(o)],a),await hr.execvp("git",["checkout",`${n}`],a)}catch(l){throw l.message=`Repository clone failed: ${l.message}`,l}return o})}async function GAe(t){let e=null,r,i=t;do r=i,await T.existsPromise(v.join(r,".git"))&&(e=r),i=v.dirname(r);while(e===null&&i!==r);return e}async function jAe(t,{baseRefs:e}){if(e.length===0)throw new me("Can't run this command with zero base refs specified.");let r=[];for(let a of e){let{code:l}=await hr.execvp("git",["merge-base",a,"HEAD"],{cwd:t});l===0&&r.push(a)}if(r.length===0)throw new me(`No ancestor could be found between any of HEAD and ${e.join(", ")}`);let{stdout:i}=await hr.execvp("git",["merge-base","HEAD",...r],{cwd:t,strict:!0}),n=i.trim(),{stdout:s}=await hr.execvp("git",["show","--quiet","--pretty=format:%s",n],{cwd:t,strict:!0}),o=s.trim();return{hash:n,title:o}}async function YAe(t,{base:e,project:r}){let i=de.buildIgnorePattern(r.configuration.get("changesetIgnorePatterns")),{stdout:n}=await hr.execvp("git",["diff","--name-only",`${e}`],{cwd:t,strict:!0}),s=n.split(/\r\n|\r|\n/).filter(c=>c.length>0).map(c=>v.resolve(t,M.toPortablePath(c))),{stdout:o}=await hr.execvp("git",["ls-files","--others","--exclude-standard"],{cwd:t,strict:!0}),a=o.split(/\r\n|\r|\n/).filter(c=>c.length>0).map(c=>v.resolve(t,M.toPortablePath(c))),l=[...new Set([...s,...a].sort())];return i?l.filter(c=>!v.relative(r.cwd,c).match(i)):l}async function Ize({ref:t,project:e}){if(e.configuration.projectCwd===null)throw new me("This command can only be run from within a Yarn project");let r=[v.resolve(e.cwd,e.configuration.get("cacheFolder")),v.resolve(e.cwd,e.configuration.get("installStatePath")),v.resolve(e.cwd,e.configuration.get("lockfileFilename")),v.resolve(e.cwd,e.configuration.get("virtualFolder"))];await e.configuration.triggerHook(o=>o.populateYarnPaths,e,o=>{o!=null&&r.push(o)});let i=await GAe(e.configuration.projectCwd);if(i==null)throw new me("This command can only be run on Git repositories");let n=await jAe(i,{baseRefs:typeof t=="string"?[t]:e.configuration.get("changesetBaseRefs")}),s=await YAe(i,{base:n.hash,project:e});return new Set(de.mapAndFilter(s,o=>{let a=e.tryWorkspaceByFilePath(o);return a===null?de.mapAndFilter.skip:r.some(l=>o.startsWith(l))?de.mapAndFilter.skip:a}))}var uL=class{supports(e,r){return ff(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,n=AL(e),s=new Map(r.checksums);s.set(n.locatorHash,i);let o=_(P({},r),{checksums:s}),a=await this.downloadHosted(n,o);if(a!==null)return a;let[l,c,u]=await r.cache.fetchPackageFromCache(e,i,P({onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${S.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(n,o),skipIntegrityCheck:r.skipIntegrityCheck},r.cacheOptions));return{packageFs:l,releaseFs:c,prefixPath:S.getIdentVendorPath(e),checksum:u}}async downloadHosted(e,r){return r.project.configuration.reduceHook(i=>i.fetchHostedRepository,null,e,r)}async cloneFromRemote(e,r){let i=await cL(e.reference,r.project.configuration),n=UC(e.reference),s=v.join(i,"package.tgz");await Kt.prepareExternalProject(i,s,{configuration:r.project.configuration,report:r.report,workspace:n.extra.workspace,locator:e});let o=await T.readFilePromise(s);return await de.releaseAfterUseAsync(async()=>await Ai.convertToZip(o,{compressionLevel:r.project.configuration.get("compressionLevel"),prefixPath:S.getIdentVendorPath(e),stripComponents:1}))}};var gL=class{supportsDescriptor(e,r){return ff(e.range)}supportsLocator(e,r){return ff(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=await lL(e.range,i.project.configuration);return[S.makeLocator(e,n)]}async getSatisfying(e,r,i){return null}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let i=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),n=await de.releaseAfterUseAsync(async()=>await Ze.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return _(P({},e),{version:n.version||"0.0.0",languageName:n.languageName||r.project.configuration.get("defaultLanguageName"),linkType:gt.HARD,conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin})}};var yze={configuration:{changesetBaseRefs:{description:"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.",type:ge.STRING,isArray:!0,isNullable:!1,default:["master","origin/master","upstream/master","main","origin/main","upstream/main"]},changesetIgnorePatterns:{description:"Array of glob patterns; files matching them will be ignored when fetching the changed files",type:ge.STRING,default:[],isArray:!0},cloneConcurrency:{description:"Maximal number of concurrent clones",type:ge.NUMBER,default:2}},fetchers:[uL],resolvers:[gL]};var wze=yze;var HC=class extends Be{constructor(){super(...arguments);this.since=Y.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.recursive=Y.Boolean("-R,--recursive",!1,{description:"Find packages via dependencies/devDependencies instead of using the workspaces field"});this.verbose=Y.Boolean("-v,--verbose",!1,{description:"Also return the cross-dependencies between workspaces"});this.json=Y.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r}=await Ke.find(e,this.context.cwd);return(await Fe.start({configuration:e,json:this.json,stdout:this.context.stdout},async n=>{let s=this.since?await Uc.fetchChangedWorkspaces({ref:this.since,project:r}):r.workspaces,o=new Set(s);if(this.recursive)for(let a of[...s].map(l=>l.getRecursiveWorkspaceDependents()))for(let l of a)o.add(l);for(let a of o){let{manifest:l}=a,c;if(this.verbose){let u=new Set,g=new Set;for(let f of Ze.hardDependencies)for(let[h,p]of l.getForScope(f)){let d=r.tryWorkspaceByDescriptor(p);d===null?r.workspacesByIdent.has(h)&&g.add(p):u.add(d)}c={workspaceDependencies:Array.from(u).map(f=>f.relativeCwd),mismatchedWorkspaceDependencies:Array.from(g).map(f=>S.stringifyDescriptor(f))}}n.reportInfo(null,`${a.relativeCwd}`),n.reportJson(P({location:a.relativeCwd,name:l.name?S.stringifyIdent(l.name):null},c))}})).exitCode()}};HC.paths=[["workspaces","list"]],HC.usage=ye.Usage({category:"Workspace-related commands",description:"list all available workspaces",details:"\n This command will print the list of all workspaces in the project.\n\n - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\n "});var qAe=HC;var GC=class extends Be{constructor(){super(...arguments);this.workspaceName=Y.String();this.commandName=Y.String();this.args=Y.Proxy()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd);if(!i)throw new rt(r.cwd,this.context.cwd);let n=r.workspaces,s=new Map(n.map(a=>{let l=S.convertToIdent(a.locator);return[S.stringifyIdent(l),a]})),o=s.get(this.workspaceName);if(o===void 0){let a=Array.from(s.keys()).sort();throw new me(`Workspace '${this.workspaceName}' not found. Did you mean any of the following: + - ${a.join(` + - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:o.cwd})}};GC.paths=[["workspace"]],GC.usage=ye.Usage({category:"Workspace-related commands",description:"run a command within the specified workspace",details:` + This command will run a given sub-command on a single workspace. + `,examples:[["Add a package to a single workspace","yarn workspace components add -D react"],["Run build script on a single workspace","yarn workspace components run build"]]});var JAe=GC;var Bze={configuration:{enableImmutableInstalls:{description:"If true (the default on CI), prevents the install command from modifying the lockfile",type:ge.BOOLEAN,default:WAe.isCI},defaultSemverRangePrefix:{description:"The default save prefix: '^', '~' or ''",type:ge.STRING,values:["^","~",""],default:Lo.CARET}},commands:[soe,aoe,wae,Nae,mAe,nAe,tAe,qAe,Uae,Hae,Gae,jae,ioe,noe,Lae,Mae,Yae,qae,Wae,zae,_ae,IAe,Xae,cAe,AAe,uAe,Zae,gAe,fAe,hAe,dAe,CAe,wAe,BAe,JAe]},Qze=Bze;var mL={};it(mL,{default:()=>vze});var Me={optional:!0},zAe=[["@tailwindcss/aspect-ratio@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@tailwindcss/line-clamp@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0",{peerDependencies:{postcss:"^8.0.0"}}],["@samverschueren/stream-to-observable@<0.3.1",{peerDependenciesMeta:{rxjs:Me,zenObservable:Me}}],["any-observable@<0.5.1",{peerDependenciesMeta:{rxjs:Me,zenObservable:Me}}],["@pm2/agent@<1.0.4",{dependencies:{debug:"*"}}],["debug@<4.2.0",{peerDependenciesMeta:{["supports-color"]:Me}}],["got@<11",{dependencies:{["@types/responselike"]:"^1.0.0",["@types/keyv"]:"^3.1.1"}}],["cacheable-lookup@<4.1.2",{dependencies:{["@types/keyv"]:"^3.1.1"}}],["http-link-dataloader@*",{peerDependencies:{graphql:"^0.13.1 || ^14.0.0"}}],["typescript-language-server@*",{dependencies:{["vscode-jsonrpc"]:"^5.0.1",["vscode-languageserver-protocol"]:"^3.15.0"}}],["postcss-syntax@*",{peerDependenciesMeta:{["postcss-html"]:Me,["postcss-jsx"]:Me,["postcss-less"]:Me,["postcss-markdown"]:Me,["postcss-scss"]:Me}}],["jss-plugin-rule-value-function@<=10.1.1",{dependencies:{["tiny-warning"]:"^1.0.2"}}],["ink-select-input@<4.1.0",{peerDependencies:{react:"^16.8.2"}}],["license-webpack-plugin@<2.3.18",{peerDependenciesMeta:{webpack:Me}}],["snowpack@>=3.3.0",{dependencies:{["node-gyp"]:"^7.1.0"}}],["promise-inflight@*",{peerDependenciesMeta:{bluebird:Me}}],["reactcss@*",{peerDependencies:{react:"*"}}],["react-color@<=2.19.0",{peerDependencies:{react:"*"}}],["gatsby-plugin-i18n@*",{dependencies:{ramda:"^0.24.1"}}],["useragent@^2.0.0",{dependencies:{request:"^2.88.0",yamlparser:"0.0.x",semver:"5.5.x"}}],["@apollographql/apollo-tools@*",{peerDependencies:{graphql:"^14.2.1 || ^15.0.0"}}],["material-table@^2.0.0",{dependencies:{"@babel/runtime":"^7.11.2"}}],["@babel/parser@*",{dependencies:{"@babel/types":"^7.8.3"}}],["fork-ts-checker-webpack-plugin@<=6.3.4",{peerDependencies:{eslint:">= 6",typescript:">= 2.7",webpack:">= 4","vue-template-compiler":"*"},peerDependenciesMeta:{eslint:Me,"vue-template-compiler":Me}}],["rc-animate@<=3.1.1",{peerDependencies:{react:">=16.9.0","react-dom":">=16.9.0"}}],["react-bootstrap-table2-paginator@*",{dependencies:{classnames:"^2.2.6"}}],["react-draggable@<=4.4.3",{peerDependencies:{react:">= 16.3.0","react-dom":">= 16.3.0"}}],["apollo-upload-client@<14",{peerDependencies:{graphql:"14 - 15"}}],["react-instantsearch-core@<=6.7.0",{peerDependencies:{algoliasearch:">= 3.1 < 5"}}],["react-instantsearch-dom@<=6.7.0",{dependencies:{"react-fast-compare":"^3.0.0"}}],["ws@<7.2.1",{peerDependencies:{bufferutil:"^4.0.1","utf-8-validate":"^5.0.2"},peerDependenciesMeta:{bufferutil:Me,"utf-8-validate":Me}}],["react-portal@*",{peerDependencies:{"react-dom":"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0"}}],["react-scripts@<=4.0.1",{peerDependencies:{react:"*"}}],["testcafe@<=1.10.1",{dependencies:{"@babel/plugin-transform-for-of":"^7.12.1","@babel/runtime":"^7.12.5"}}],["testcafe-legacy-api@<=4.2.0",{dependencies:{"testcafe-hammerhead":"^17.0.1","read-file-relative":"^1.2.0"}}],["@google-cloud/firestore@<=4.9.3",{dependencies:{protobufjs:"^6.8.6"}}],["gatsby-source-apiserver@*",{dependencies:{["babel-polyfill"]:"^6.26.0"}}],["@webpack-cli/package-utils@<=1.0.1-alpha.4",{dependencies:{["cross-spawn"]:"^7.0.3"}}],["gatsby-remark-prismjs@<3.3.28",{dependencies:{lodash:"^4"}}],["gatsby-plugin-favicon@*",{peerDependencies:{webpack:"*"}}],["gatsby-plugin-sharp@*",{dependencies:{debug:"^4.3.1"}}],["gatsby-react-router-scroll@*",{dependencies:{["prop-types"]:"^15.7.2"}}],["@rebass/forms@*",{dependencies:{["@styled-system/should-forward-prop"]:"^5.0.0"},peerDependencies:{react:"^16.8.6"}}],["rebass@*",{peerDependencies:{react:"^16.8.6"}}],["@ant-design/react-slick@<=0.28.3",{peerDependencies:{react:">=16.0.0"}}],["mqtt@<4.2.7",{dependencies:{duplexify:"^4.1.1"}}],["vue-cli-plugin-vuetify@<=2.0.3",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":Me,"vuetify-loader":Me}}],["vue-cli-plugin-vuetify@<=2.0.4",{dependencies:{"null-loader":"^3.0.0"}}],["@vuetify/cli-plugin-utils@<=0.0.4",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":Me}}],["@vue/cli-plugin-typescript@<=5.0.0-alpha.0",{dependencies:{"babel-loader":"^8.1.0"}}],["@vue/cli-plugin-typescript@<=5.0.0-beta.0",{dependencies:{"@babel/core":"^7.12.16"},peerDependencies:{"vue-template-compiler":"^2.0.0"},peerDependenciesMeta:{"vue-template-compiler":Me}}],["cordova-ios@<=6.3.0",{dependencies:{underscore:"^1.9.2"}}],["cordova-lib@<=10.0.1",{dependencies:{underscore:"^1.9.2"}}],["git-node-fs@*",{peerDependencies:{"js-git":"^0.7.8"},peerDependenciesMeta:{"js-git":Me}}],["consolidate@*",{peerDependencies:{velocityjs:"^2.0.1",tinyliquid:"^0.2.34","liquid-node":"^3.0.1",jade:"^1.11.0","then-jade":"*",dust:"^0.3.0","dustjs-helpers":"^1.7.4","dustjs-linkedin":"^2.7.5",swig:"^1.4.2","swig-templates":"^2.0.3","razor-tmpl":"^1.3.1",atpl:">=0.7.6",liquor:"^0.0.5",twig:"^1.15.2",ejs:"^3.1.5",eco:"^1.1.0-rc-3",jazz:"^0.0.18",jqtpl:"~1.1.0",hamljs:"^0.6.2",hamlet:"^0.3.3",whiskers:"^0.4.0","haml-coffee":"^1.14.1","hogan.js":"^3.0.2",templayed:">=0.2.3",handlebars:"^4.7.6",underscore:"^1.11.0",lodash:"^4.17.20",pug:"^3.0.0","then-pug":"*",qejs:"^3.0.5",walrus:"^0.10.1",mustache:"^4.0.1",just:"^0.1.8",ect:"^0.5.9",mote:"^0.2.0",toffee:"^0.3.6",dot:"^1.1.3","bracket-template":"^1.1.5",ractive:"^1.3.12",nunjucks:"^3.2.2",htmling:"^0.0.8","babel-core":"^6.26.3",plates:"~0.4.11","react-dom":"^16.13.1",react:"^16.13.1","arc-templates":"^0.5.3",vash:"^0.13.0",slm:"^2.0.0",marko:"^3.14.4",teacup:"^2.0.0","coffee-script":"^1.12.7",squirrelly:"^5.1.0",twing:"^5.0.2"},peerDependenciesMeta:{velocityjs:Me,tinyliquid:Me,"liquid-node":Me,jade:Me,"then-jade":Me,dust:Me,"dustjs-helpers":Me,"dustjs-linkedin":Me,swig:Me,"swig-templates":Me,"razor-tmpl":Me,atpl:Me,liquor:Me,twig:Me,ejs:Me,eco:Me,jazz:Me,jqtpl:Me,hamljs:Me,hamlet:Me,whiskers:Me,"haml-coffee":Me,"hogan.js":Me,templayed:Me,handlebars:Me,underscore:Me,lodash:Me,pug:Me,"then-pug":Me,qejs:Me,walrus:Me,mustache:Me,just:Me,ect:Me,mote:Me,toffee:Me,dot:Me,"bracket-template":Me,ractive:Me,nunjucks:Me,htmling:Me,"babel-core":Me,plates:Me,"react-dom":Me,react:Me,"arc-templates":Me,vash:Me,slm:Me,marko:Me,teacup:Me,"coffee-script":Me,squirrelly:Me,twing:Me}}],["vue-loader@<=16.3.1",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",webpack:"^4.1.0 || ^5.0.0-0"}}],["scss-parser@*",{dependencies:{lodash:"^4.17.21"}}],["query-ast@*",{dependencies:{lodash:"^4.17.21"}}],["redux-thunk@<=2.3.0",{peerDependencies:{redux:"^4.0.0"}}],["skypack@<=0.3.2",{dependencies:{tar:"^6.1.0"}}],["@npmcli/metavuln-calculator@*",{dependencies:{"json-parse-even-better-errors":"^2.3.1"}}],["bin-links@*",{dependencies:{"mkdirp-infer-owner":"^1.0.2"}}],["rollup-plugin-polyfill-node@*",{peerDependencies:{rollup:"^1.20.0 || ^2.0.0"}}],["snowpack@*",{dependencies:{"magic-string":"^0.25.7"}}],["elm-webpack-loader@*",{dependencies:{temp:"^0.9.4"}}],["winston-transport@<=4.4.0",{dependencies:{logform:"^2.2.0"}}],["jest-vue-preprocessor@*",{dependencies:{"@babel/core":"7.8.7","@babel/template":"7.8.6"},peerDependencies:{pug:"^2.0.4"},peerDependenciesMeta:{pug:Me}}],["redux-persist@*",{peerDependencies:{react:">=16"},peerDependenciesMeta:{react:Me}}],["sodium@>=3",{dependencies:{"node-gyp":"^3.8.0"}}],["babel-plugin-graphql-tag@<=3.1.0",{peerDependencies:{graphql:"^14.0.0 || ^15.0.0"}}],["@playwright/test@<=1.14.1",{dependencies:{"jest-matcher-utils":"^26.4.2"}}],...["babel-plugin-remove-graphql-queries@<3.14.0-next.1","babel-preset-gatsby-package@<1.14.0-next.1","create-gatsby@<1.14.0-next.1","gatsby-admin@<0.24.0-next.1","gatsby-cli@<3.14.0-next.1","gatsby-core-utils@<2.14.0-next.1","gatsby-design-tokens@<3.14.0-next.1","gatsby-legacy-polyfills@<1.14.0-next.1","gatsby-plugin-benchmark-reporting@<1.14.0-next.1","gatsby-plugin-graphql-config@<0.23.0-next.1","gatsby-plugin-image@<1.14.0-next.1","gatsby-plugin-mdx@<2.14.0-next.1","gatsby-plugin-netlify-cms@<5.14.0-next.1","gatsby-plugin-no-sourcemaps@<3.14.0-next.1","gatsby-plugin-page-creator@<3.14.0-next.1","gatsby-plugin-preact@<5.14.0-next.1","gatsby-plugin-preload-fonts@<2.14.0-next.1","gatsby-plugin-schema-snapshot@<2.14.0-next.1","gatsby-plugin-styletron@<6.14.0-next.1","gatsby-plugin-subfont@<3.14.0-next.1","gatsby-plugin-utils@<1.14.0-next.1","gatsby-recipes@<0.25.0-next.1","gatsby-source-shopify@<5.6.0-next.1","gatsby-source-wikipedia@<3.14.0-next.1","gatsby-transformer-screenshot@<3.14.0-next.1","gatsby-worker@<0.5.0-next.1"].map(t=>[t,{dependencies:{"@babel/runtime":"^7.14.8"}}]),["gatsby-core-utils@<2.14.0-next.1",{dependencies:{got:"8.3.2"}}],["gatsby-plugin-gatsby-cloud@<=3.1.0-next.0",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["gatsby-plugin-gatsby-cloud@<=3.2.0-next.1",{peerDependencies:{webpack:"*"}}],["babel-plugin-remove-graphql-queries@<=3.14.0-next.1",{dependencies:{"gatsby-core-utils":"^2.8.0-next.1"}}],["gatsby-plugin-netlify@3.13.0-next.1",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["clipanion-v3-codemod@<=0.2.0",{peerDependencies:{jscodeshift:"^0.11.0"}}],["react-live@*",{peerDependencies:{"react-dom":"*",react:"*"}}],["webpack@<4.44.1",{peerDependenciesMeta:{"webpack-cli":Me,"webpack-command":Me}}],["webpack@<5.0.0-beta.23",{peerDependenciesMeta:{"webpack-cli":Me}}],["webpack-dev-server@<3.10.2",{peerDependenciesMeta:{"webpack-cli":Me}}]];var pL;function VAe(){return typeof pL=="undefined"&&(pL=require("zlib").brotliDecompressSync(Buffer.from("G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==","base64")).toString()),pL}var dL;function _Ae(){return typeof dL=="undefined"&&(dL=require("zlib").brotliDecompressSync(Buffer.from("G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=","base64")).toString()),dL}var CL;function XAe(){return typeof CL=="undefined"&&(CL=require("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),CL}var ZAe=new Map([[S.makeIdent(null,"fsevents").identHash,VAe],[S.makeIdent(null,"resolve").identHash,_Ae],[S.makeIdent(null,"typescript").identHash,XAe]]),bze={hooks:{registerPackageExtensions:async(t,e)=>{for(let[r,i]of zAe)e(S.parseDescriptor(r,!0),i)},getBuiltinPatch:async(t,e)=>{var s;let r="compat/";if(!e.startsWith(r))return;let i=S.parseIdent(e.slice(r.length)),n=(s=ZAe.get(i.identHash))==null?void 0:s();return typeof n!="undefined"?n:null},reduceDependency:async(t,e,r,i)=>typeof ZAe.get(t.identHash)=="undefined"?t:S.makeDescriptor(t,S.makeRange({protocol:"patch:",source:S.stringifyDescriptor(t),selector:`~builtin`,params:null}))}},vze=bze;var EL={};it(EL,{default:()=>xze});var V0=class extends Be{constructor(){super(...arguments);this.pkg=Y.String("-p,--package",{description:"The package to run the provided command from"});this.quiet=Y.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=Y.String();this.args=Y.Proxy()}async execute(){let e=[];this.pkg&&e.push("--package",this.pkg),this.quiet&&e.push("--quiet");let r=S.parseIdent(this.command),i=S.makeIdent(r.scope,`create-${r.name}`);return this.cli.run(["dlx",...e,S.stringifyIdent(i),...this.args])}};V0.paths=[["create"]];var $Ae=V0;var jC=class extends Be{constructor(){super(...arguments);this.packages=Y.Array("-p,--package",{description:"The package(s) to install before running the command"});this.quiet=Y.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=Y.String();this.args=Y.Proxy()}async execute(){return fe.telemetry=null,await T.mktempPromise(async e=>{var p;let r=v.join(e,`dlx-${process.pid}`);await T.mkdirPromise(r),await T.writeFilePromise(v.join(r,"package.json"),`{} +`),await T.writeFilePromise(v.join(r,"yarn.lock"),"");let i=v.join(r,".yarnrc.yml"),n=await fe.findProjectCwd(this.context.cwd,wt.lockfile),s=!(await fe.find(this.context.cwd,null,{strict:!1})).get("enableGlobalCache"),o=n!==null?v.join(n,".yarnrc.yml"):null;o!==null&&T.existsSync(o)?(await T.copyFilePromise(o,i),await fe.updateConfiguration(r,d=>{let m=_(P({},d),{enableGlobalCache:s,enableTelemetry:!1});return Array.isArray(d.plugins)&&(m.plugins=d.plugins.map(I=>{let B=typeof I=="string"?I:I.path,b=M.isAbsolute(B)?B:M.resolve(M.fromPortablePath(n),B);return typeof I=="string"?b:{path:b,spec:I.spec}})),m})):await T.writeFilePromise(i,`enableGlobalCache: ${s} +enableTelemetry: false +`);let a=(p=this.packages)!=null?p:[this.command],l=S.parseDescriptor(this.command).name,c=await this.cli.run(["add","--",...a],{cwd:r,quiet:this.quiet});if(c!==0)return c;this.quiet||this.context.stdout.write(` +`);let u=await fe.find(r,this.context.plugins),{project:g,workspace:f}=await Ke.find(u,r);if(f===null)throw new rt(g.cwd,r);await g.restoreInstallState();let h=await Kt.getWorkspaceAccessibleBinaries(f);return h.has(l)===!1&&h.size===1&&typeof this.packages=="undefined"&&(l=Array.from(h)[0][0]),await Kt.executeWorkspaceAccessibleBinary(f,l,this.args,{packageAccessibleBinaries:h,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};jC.paths=[["dlx"]],jC.usage=ye.Usage({description:"run a package in a temporary environment",details:"\n This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\n\n By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\n\n Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\n ",examples:[["Use create-react-app to create a new React app","yarn dlx create-react-app ./my-app"],["Install multiple packages for a single command",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e "console.log('hello!')"`]]});var ele=jC;var Sze={commands:[$Ae,ele]},xze=Sze;var xL={};it(xL,{default:()=>Dze,fileUtils:()=>IL});var hf=/^(?:[a-zA-Z]:[\\/]|\.{0,2}\/)/,YC=/^[^?]*\.(?:tar\.gz|tgz)(?:::.*)?$/,Nr="file:";var IL={};it(IL,{makeArchiveFromLocator:()=>_0,makeBufferFromLocator:()=>BL,makeLocator:()=>wL,makeSpec:()=>tle,parseSpec:()=>yL});function yL(t){let{params:e,selector:r}=S.parseRange(t),i=M.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?S.parseLocator(e.locator):null,path:i}}function tle({parentLocator:t,path:e,folderHash:r,protocol:i}){let n=t!==null?{locator:S.stringifyLocator(t)}:{},s=typeof r!="undefined"?{hash:r}:{};return S.makeRange({protocol:i,source:e,selector:e,params:P(P({},s),n)})}function wL(t,{parentLocator:e,path:r,folderHash:i,protocol:n}){return S.makeLocator(t,tle({parentLocator:e,path:r,folderHash:i,protocol:n}))}async function _0(t,{protocol:e,fetchOptions:r,inMemory:i=!1}){let{parentLocator:n,path:s}=S.parseFileStyleRange(t.reference,{protocol:e}),o=v.isAbsolute(s)?{packageFs:new Ft(Se.root),prefixPath:Se.dot,localPath:Se.root}:await r.fetcher.fetch(n,r),a=o.localPath?{packageFs:new Ft(Se.root),prefixPath:v.relative(Se.root,o.localPath)}:o;o!==a&&o.releaseFs&&o.releaseFs();let l=a.packageFs,c=v.join(a.prefixPath,s);return await de.releaseAfterUseAsync(async()=>await Ai.makeArchiveFromDirectory(c,{baseFs:l,prefixPath:S.getIdentVendorPath(t),compressionLevel:r.project.configuration.get("compressionLevel"),inMemory:i}),a.releaseFs)}async function BL(t,{protocol:e,fetchOptions:r}){return(await _0(t,{protocol:e,fetchOptions:r,inMemory:!0})).getBufferAndClose()}var QL=class{supports(e,r){return!!e.reference.startsWith(Nr)}getLocalPath(e,r){let{parentLocator:i,path:n}=S.parseFileStyleRange(e.reference,{protocol:Nr});if(v.isAbsolute(n))return n;let s=r.fetcher.getLocalPath(i,r);return s===null?null:v.resolve(s,n)}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,P({onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${S.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),skipIntegrityCheck:r.skipIntegrityCheck},r.cacheOptions));return{packageFs:n,releaseFs:s,prefixPath:S.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:o}}async fetchFromDisk(e,r){return _0(e,{protocol:Nr,fetchOptions:r})}};var kze=2,bL=class{supportsDescriptor(e,r){return e.range.match(hf)?!0:!!e.range.startsWith(Nr)}supportsLocator(e,r){return!!e.reference.startsWith(Nr)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,i){return hf.test(e.range)&&(e=S.makeDescriptor(e,`${Nr}${e.range}`)),S.bindDescriptor(e,{locator:S.stringifyLocator(r)})}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){if(!i.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:n,parentLocator:s}=yL(e.range);if(s===null)throw new Error("Assertion failed: The descriptor should have been bound");let o=await BL(S.makeLocator(e,S.makeRange({protocol:Nr,source:n,selector:n,params:{locator:S.stringifyLocator(s)}})),{protocol:Nr,fetchOptions:i.fetchOptions}),a=mn.makeHash(`${kze}`,o).slice(0,6);return[wL(e,{parentLocator:s,path:n,folderHash:a,protocol:Nr})]}async getSatisfying(e,r,i){return null}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let i=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),n=await de.releaseAfterUseAsync(async()=>await Ze.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return _(P({},e),{version:n.version||"0.0.0",languageName:n.languageName||r.project.configuration.get("defaultLanguageName"),linkType:gt.HARD,conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin})}};var vL=class{supports(e,r){return YC.test(e.reference)?!!e.reference.startsWith(Nr):!1}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,P({onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${S.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),skipIntegrityCheck:r.skipIntegrityCheck},r.cacheOptions));return{packageFs:n,releaseFs:s,prefixPath:S.getIdentVendorPath(e),checksum:o}}async fetchFromDisk(e,r){let{parentLocator:i,path:n}=S.parseFileStyleRange(e.reference,{protocol:Nr}),s=v.isAbsolute(n)?{packageFs:new Ft(Se.root),prefixPath:Se.dot,localPath:Se.root}:await r.fetcher.fetch(i,r),o=s.localPath?{packageFs:new Ft(Se.root),prefixPath:v.relative(Se.root,s.localPath)}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=v.join(o.prefixPath,n),c=await a.readFilePromise(l);return await de.releaseAfterUseAsync(async()=>await Ai.convertToZip(c,{compressionLevel:r.project.configuration.get("compressionLevel"),prefixPath:S.getIdentVendorPath(e),stripComponents:1}),o.releaseFs)}};var SL=class{supportsDescriptor(e,r){return YC.test(e.range)?!!(e.range.startsWith(Nr)||hf.test(e.range)):!1}supportsLocator(e,r){return YC.test(e.reference)?!!e.reference.startsWith(Nr):!1}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,i){return hf.test(e.range)&&(e=S.makeDescriptor(e,`${Nr}${e.range}`)),S.bindDescriptor(e,{locator:S.stringifyLocator(r)})}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=e.range;return n.startsWith(Nr)&&(n=n.slice(Nr.length)),[S.makeLocator(e,`${Nr}${M.toPortablePath(n)}`)]}async getSatisfying(e,r,i){return null}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let i=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),n=await de.releaseAfterUseAsync(async()=>await Ze.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return _(P({},e),{version:n.version||"0.0.0",languageName:n.languageName||r.project.configuration.get("defaultLanguageName"),linkType:gt.HARD,conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin})}};var Pze={fetchers:[vL,QL],resolvers:[SL,bL]},Dze=Pze;var PL={};it(PL,{default:()=>Nze});var rle=ie(require("querystring")),ile=[/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+)\/tarball\/([^/#]+)(?:#(.*))?$/,/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+?)(?:\.git)?(?:#(.*))?$/];function nle(t){return t?ile.some(e=>!!t.match(e)):!1}function sle(t){let e;for(let a of ile)if(e=t.match(a),e)break;if(!e)throw new Error(Rze(t));let[,r,i,n,s="master"]=e,{commit:o}=rle.default.parse(s);return s=o||s.replace(/[^:]*:/,""),{auth:r,username:i,reponame:n,treeish:s}}function Rze(t){return`Input cannot be parsed as a valid GitHub URL ('${t}').`}var kL=class{supports(e,r){return!!nle(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,P({onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${S.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,r),skipIntegrityCheck:r.skipIntegrityCheck},r.cacheOptions));return{packageFs:n,releaseFs:s,prefixPath:S.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,r){let i=await Zt.get(this.getLocatorUrl(e,r),{configuration:r.project.configuration});return await T.mktempPromise(async n=>{let s=new Ft(n);await Ai.extractArchiveTo(i,s,{stripComponents:1});let o=Uc.splitRepoUrl(e.reference),a=v.join(n,"package.tgz");await Kt.prepareExternalProject(n,a,{configuration:r.project.configuration,report:r.report,workspace:o.extra.workspace,locator:e});let l=await T.readFilePromise(a);return await Ai.convertToZip(l,{compressionLevel:r.project.configuration.get("compressionLevel"),prefixPath:S.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,r){let{auth:i,username:n,reponame:s,treeish:o}=sle(e.reference);return`https://${i?`${i}@`:""}github.com/${n}/${s}/archive/${o}.tar.gz`}};var Fze={hooks:{async fetchHostedRepository(t,e,r){if(t!==null)return t;let i=new kL;if(!i.supports(e,r))return null;try{return await i.fetch(e,r)}catch(n){return null}}}},Nze=Fze;var FL={};it(FL,{default:()=>Tze});var qC=/^[^?]*\.(?:tar\.gz|tgz)(?:\?.*)?$/,JC=/^https?:/;var DL=class{supports(e,r){return qC.test(e.reference)?!!JC.test(e.reference):!1}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,P({onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${S.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),skipIntegrityCheck:r.skipIntegrityCheck},r.cacheOptions));return{packageFs:n,releaseFs:s,prefixPath:S.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,r){let i=await Zt.get(e.reference,{configuration:r.project.configuration});return await Ai.convertToZip(i,{compressionLevel:r.project.configuration.get("compressionLevel"),prefixPath:S.getIdentVendorPath(e),stripComponents:1})}};var RL=class{supportsDescriptor(e,r){return qC.test(e.range)?!!JC.test(e.range):!1}supportsLocator(e,r){return qC.test(e.reference)?!!JC.test(e.reference):!1}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){return[S.convertDescriptorToLocator(e)]}async getSatisfying(e,r,i){return null}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let i=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),n=await de.releaseAfterUseAsync(async()=>await Ze.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return _(P({},e),{version:n.version||"0.0.0",languageName:n.languageName||r.project.configuration.get("defaultLanguageName"),linkType:gt.HARD,conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin})}};var Lze={fetchers:[DL],resolvers:[RL]},Tze=Lze;var ML={};it(ML,{default:()=>M5e});var Rle=ie(Dle()),TL=ie(require("util")),WC=class extends Be{constructor(){super(...arguments);this.private=Y.Boolean("-p,--private",!1,{description:"Initialize a private package"});this.workspace=Y.Boolean("-w,--workspace",!1,{description:"Initialize a workspace root with a `packages/` directory"});this.install=Y.String("-i,--install",!1,{tolerateBoolean:!0,description:"Initialize a package with a specific bundle that will be locked in the project"});this.usev2=Y.Boolean("-2",!1,{hidden:!0});this.yes=Y.Boolean("-y,--yes",{hidden:!0});this.assumeFreshProject=Y.Boolean("--assume-fresh-project",!1,{hidden:!0})}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),r=typeof this.install=="string"?this.install:this.usev2||this.install===!0?"latest":null;return r!==null?await this.executeProxy(e,r):await this.executeRegular(e)}async executeProxy(e,r){if(e.projectCwd!==null&&e.projectCwd!==this.context.cwd)throw new me("Cannot use the --install flag from within a project subdirectory");T.existsSync(this.context.cwd)||await T.mkdirPromise(this.context.cwd,{recursive:!0});let i=v.join(this.context.cwd,e.get("lockfileFilename"));T.existsSync(i)||await T.writeFilePromise(i,"");let n=await this.cli.run(["set","version",r],{quiet:!0});if(n!==0)return n;let s=[];return this.private&&s.push("-p"),this.workspace&&s.push("-w"),this.yes&&s.push("-y"),await T.mktempPromise(async o=>{let{code:a}=await hr.pipevp("yarn",["init",...s],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await Kt.makeScriptEnv({binFolder:o})});return a})}async executeRegular(e){var l;let r=null;try{r=(await Ke.find(e,this.context.cwd)).project}catch{r=null}T.existsSync(this.context.cwd)||await T.mkdirPromise(this.context.cwd,{recursive:!0});let i=await Ze.tryFind(this.context.cwd)||new Ze,n=Object.fromEntries(e.get("initFields").entries());i.load(n),i.name=(l=i.name)!=null?l:S.makeIdent(e.get("initScope"),v.basename(this.context.cwd)),i.packageManager=Zr&&de.isTaggedYarnVersion(Zr)?`yarn@${Zr}`:null,typeof i.raw.private=="undefined"&&(this.private||this.workspace&&i.workspaceDefinitions.length===0)&&(i.private=!0),this.workspace&&i.workspaceDefinitions.length===0&&(await T.mkdirPromise(v.join(this.context.cwd,"packages"),{recursive:!0}),i.workspaceDefinitions=[{pattern:"packages/*"}]);let s={};i.exportTo(s),TL.inspect.styles.name="cyan",this.context.stdout.write(`${(0,TL.inspect)(s,{depth:Infinity,colors:!0,compact:!1})} +`);let o=v.join(this.context.cwd,Ze.fileName);await T.changeFilePromise(o,`${JSON.stringify(s,null,2)} +`,{automaticNewlines:!0});let a=v.join(this.context.cwd,"README.md");if(T.existsSync(a)||await T.writeFilePromise(a,`# ${S.stringifyIdent(i.name)} +`),!r||r.cwd===this.context.cwd){let c=v.join(this.context.cwd,wt.lockfile);T.existsSync(c)||await T.writeFilePromise(c,"");let g=["/.yarn/*","!/.yarn/patches","!/.yarn/plugins","!/.yarn/releases","!/.yarn/sdks","","# Swap the comments on the following lines if you don't wish to use zero-installs","# Documentation here: https://yarnpkg.com/features/zero-installs","!/.yarn/cache","#/.pnp.*"].map(m=>`${m} +`).join(""),f=v.join(this.context.cwd,".gitignore");T.existsSync(f)||await T.writeFilePromise(f,g);let h={["*"]:{endOfLine:"lf",insertFinalNewline:!0},["*.{js,json,yml}"]:{charset:"utf-8",indentStyle:"space",indentSize:2}};(0,Rle.default)(h,e.get("initEditorConfig"));let p=`root = true +`;for(let[m,I]of Object.entries(h)){p+=` +[${m}] +`;for(let[B,b]of Object.entries(I))p+=`${B.replace(/[A-Z]/g,H=>`_${H.toLowerCase()}`)} = ${b} +`}let d=v.join(this.context.cwd,".editorconfig");T.existsSync(d)||await T.writeFilePromise(d,p),T.existsSync(v.join(this.context.cwd,".git"))||await hr.execvp("git",["init"],{cwd:this.context.cwd})}}};WC.paths=[["init"]],WC.usage=ye.Usage({description:"create a new package",details:"\n This command will setup a new package in your local directory.\n\n If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\n\n If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\n\n If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\n\n The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\n ",examples:[["Create a new package in the local directory","yarn init"],["Create a new private package in the local directory","yarn init -p"],["Create a new package and store the Yarn release inside","yarn init -i=latest"],["Create a new private package and defines it as a workspace root","yarn init -w"]]});var Fle=WC;var T5e={configuration:{initScope:{description:"Scope used when creating packages via the init command",type:ge.STRING,default:null},initFields:{description:"Additional fields to set when creating packages via the init command",type:ge.MAP,valueDefinition:{description:"",type:ge.ANY}},initEditorConfig:{description:"Extra rules to define in the generator editorconfig",type:ge.MAP,valueDefinition:{description:"",type:ge.ANY}}},commands:[Fle]},M5e=T5e;var GL={};it(GL,{default:()=>K5e});var Ua="portal:",Ha="link:";var OL=class{supports(e,r){return!!e.reference.startsWith(Ua)}getLocalPath(e,r){let{parentLocator:i,path:n}=S.parseFileStyleRange(e.reference,{protocol:Ua});if(v.isAbsolute(n))return n;let s=r.fetcher.getLocalPath(i,r);return s===null?null:v.resolve(s,n)}async fetch(e,r){var c;let{parentLocator:i,path:n}=S.parseFileStyleRange(e.reference,{protocol:Ua}),s=v.isAbsolute(n)?{packageFs:new Ft(Se.root),prefixPath:Se.dot,localPath:Se.root}:await r.fetcher.fetch(i,r),o=s.localPath?{packageFs:new Ft(Se.root),prefixPath:v.relative(Se.root,s.localPath),localPath:Se.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=v.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new Ft(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Se.dot,localPath:l}:{packageFs:new Zo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Se.dot}}};var KL=class{supportsDescriptor(e,r){return!!e.range.startsWith(Ua)}supportsLocator(e,r){return!!e.reference.startsWith(Ua)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,i){return S.bindDescriptor(e,{locator:S.stringifyLocator(r)})}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=e.range.slice(Ua.length);return[S.makeLocator(e,`${Ua}${M.toPortablePath(n)}`)]}async getSatisfying(e,r,i){return null}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let i=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),n=await de.releaseAfterUseAsync(async()=>await Ze.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return _(P({},e),{version:n.version||"0.0.0",languageName:n.languageName||r.project.configuration.get("defaultLanguageName"),linkType:gt.SOFT,conditions:n.getConditions(),dependencies:new Map([...n.dependencies]),peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin})}};var UL=class{supports(e,r){return!!e.reference.startsWith(Ha)}getLocalPath(e,r){let{parentLocator:i,path:n}=S.parseFileStyleRange(e.reference,{protocol:Ha});if(v.isAbsolute(n))return n;let s=r.fetcher.getLocalPath(i,r);return s===null?null:v.resolve(s,n)}async fetch(e,r){var c;let{parentLocator:i,path:n}=S.parseFileStyleRange(e.reference,{protocol:Ha}),s=v.isAbsolute(n)?{packageFs:new Ft(Se.root),prefixPath:Se.dot,localPath:Se.root}:await r.fetcher.fetch(i,r),o=s.localPath?{packageFs:new Ft(Se.root),prefixPath:v.relative(Se.root,s.localPath),localPath:Se.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=v.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new Ft(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Se.dot,discardFromLookup:!0,localPath:l}:{packageFs:new Zo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Se.dot,discardFromLookup:!0}}};var HL=class{supportsDescriptor(e,r){return!!e.range.startsWith(Ha)}supportsLocator(e,r){return!!e.reference.startsWith(Ha)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,i){return S.bindDescriptor(e,{locator:S.stringifyLocator(r)})}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=e.range.slice(Ha.length);return[S.makeLocator(e,`${Ha}${M.toPortablePath(n)}`)]}async getSatisfying(e,r,i){return null}async resolve(e,r){return _(P({},e),{version:"0.0.0",languageName:r.project.configuration.get("defaultLanguageName"),linkType:gt.SOFT,conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map})}};var O5e={fetchers:[UL,OL],resolvers:[HL,KL]},K5e=O5e;var mT={};it(mT,{default:()=>Y6e});var Ga;(function(i){i[i.YES=0]="YES",i[i.NO=1]="NO",i[i.DEPENDS=2]="DEPENDS"})(Ga||(Ga={}));var jL=(t,e)=>`${t}@${e}`,Nle=(t,e)=>{let r=e.indexOf("#"),i=r>=0?e.substring(r+1):e;return jL(t,i)},qs;(function(s){s[s.NONE=-1]="NONE",s[s.PERF=0]="PERF",s[s.CHECK=1]="CHECK",s[s.REASONS=2]="REASONS",s[s.INTENSIVE_CHECK=9]="INTENSIVE_CHECK"})(qs||(qs={}));var Tle=(t,e={})=>{let r=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),i=e.check||r>=9,n=e.hoistingLimits||new Map,s={check:i,debugLevel:r,hoistingLimits:n,fastLookupPossible:!0},o;s.debugLevel>=0&&(o=Date.now());let a=U5e(t,s),l=!1,c=0;do l=YL(a,[a],new Set([a.locator]),new Map,s).anotherRoundNeeded,s.fastLookupPossible=!1,c++;while(l);if(s.debugLevel>=0&&console.log(`hoist time: ${Date.now()-o}ms, rounds: ${c}`),s.debugLevel>=1){let u=zC(a);if(YL(a,[a],new Set([a.locator]),new Map,s).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree: +${u}, next tree: +${zC(a)}`);let f=Lle(a);if(f)throw new Error(`${f}, after hoisting finished: +${zC(a)}`)}return s.debugLevel>=2&&console.log(zC(a)),H5e(a)},G5e=t=>{let e=t[t.length-1],r=new Map,i=new Set,n=s=>{if(!i.has(s)){i.add(s);for(let o of s.hoistedDependencies.values())r.set(o.name,o);for(let o of s.dependencies.values())s.peerNames.has(o.name)||n(o)}};return n(e),r},j5e=t=>{let e=t[t.length-1],r=new Map,i=new Set,n=new Set,s=(o,a)=>{if(i.has(o))return;i.add(o);for(let c of o.hoistedDependencies.values())if(!a.has(c.name)){let u;for(let g of t)u=g.dependencies.get(c.name),u&&r.set(u.name,u)}let l=new Set;for(let c of o.dependencies.values())l.add(c.name);for(let c of o.dependencies.values())o.peerNames.has(c.name)||s(c,l)};return s(e,n),r},Mle=(t,e)=>{if(e.decoupled)return e;let{name:r,references:i,ident:n,locator:s,dependencies:o,originalDependencies:a,hoistedDependencies:l,peerNames:c,reasons:u,isHoistBorder:g,hoistPriority:f,isWorkspace:h,hoistedFrom:p,hoistedTo:d}=e,m={name:r,references:new Set(i),ident:n,locator:s,dependencies:new Map(o),originalDependencies:new Map(a),hoistedDependencies:new Map(l),peerNames:new Set(c),reasons:new Map(u),decoupled:!0,isHoistBorder:g,hoistPriority:f,isWorkspace:h,hoistedFrom:new Map(p),hoistedTo:new Map(d)},I=m.dependencies.get(r);return I&&I.ident==m.ident&&m.dependencies.set(r,m),t.dependencies.set(m.name,m),m},Y5e=(t,e)=>{let r=new Map([[t.name,[t.ident]]]);for(let n of t.dependencies.values())t.peerNames.has(n.name)||r.set(n.name,[n.ident]);let i=Array.from(e.keys());i.sort((n,s)=>{let o=e.get(n),a=e.get(s);return a.hoistPriority!==o.hoistPriority?a.hoistPriority-o.hoistPriority:a.peerDependents.size!==o.peerDependents.size?a.peerDependents.size-o.peerDependents.size:a.dependents.size-o.dependents.size});for(let n of i){let s=n.substring(0,n.indexOf("@",1)),o=n.substring(s.length+1);if(!t.peerNames.has(s)){let a=r.get(s);a||(a=[],r.set(s,a)),a.indexOf(o)<0&&a.push(o)}}return r},qL=t=>{let e=new Set,r=(i,n=new Set)=>{if(!n.has(i)){n.add(i);for(let s of i.peerNames)if(!t.peerNames.has(s)){let o=t.dependencies.get(s);o&&!e.has(o)&&r(o,n)}e.add(i)}};for(let i of t.dependencies.values())t.peerNames.has(i.name)||r(i);return e},YL=(t,e,r,i,n,s=new Set)=>{let o=e[e.length-1];if(s.has(o))return{anotherRoundNeeded:!1,isGraphChanged:!1};s.add(o);let a=J5e(o),l=Y5e(o,a),c=t==o?new Map:n.fastLookupPossible?G5e(e):j5e(e),u,g=!1,f=!1,h=new Map(Array.from(l.entries()).map(([d,m])=>[d,m[0]])),p=new Map;do{let d=q5e(t,e,r,c,h,l,i,p,n);d.isGraphChanged&&(f=!0),d.anotherRoundNeeded&&(g=!0),u=!1;for(let[m,I]of l)I.length>1&&!o.dependencies.has(m)&&(h.delete(m),I.shift(),h.set(m,I[0]),u=!0)}while(u);for(let d of o.dependencies.values())if(!o.peerNames.has(d.name)&&!r.has(d.locator)){r.add(d.locator);let m=YL(t,[...e,d],r,p,n);m.isGraphChanged&&(f=!0),m.anotherRoundNeeded&&(g=!0),r.delete(d.locator)}return{anotherRoundNeeded:g,isGraphChanged:f}},W5e=(t,e,r,i,n,s,o,a,{outputReason:l,fastLookupPossible:c})=>{let u,g=null,f=new Set;l&&(u=`${Array.from(e).map(m=>wi(m)).join("\u2192")}`);let h=r[r.length-1],d=!(i.ident===h.ident);if(l&&!d&&(g="- self-reference"),d&&(d=!i.isWorkspace,l&&!d&&(g="- workspace")),d&&(d=!h.isWorkspace||h.hoistedFrom.has(i.name)||e.size===1,l&&!d&&(g=h.reasons.get(i.name))),d&&(d=!t.peerNames.has(i.name),l&&!d&&(g=`- cannot shadow peer: ${wi(t.originalDependencies.get(i.name).locator)} at ${u}`)),d){let m=!1,I=n.get(i.name);if(m=!I||I.ident===i.ident,l&&!m&&(g=`- filled by: ${wi(I.locator)} at ${u}`),m)for(let B=r.length-1;B>=1;B--){let R=r[B].dependencies.get(i.name);if(R&&R.ident!==i.ident){m=!1;let H=a.get(h);H||(H=new Set,a.set(h,H)),H.add(i.name),l&&(g=`- filled by ${wi(R.locator)} at ${r.slice(0,B).map(L=>wi(L.locator)).join("\u2192")}`);break}}d=m}if(d&&(d=s.get(i.name)===i.ident,l&&!d&&(g=`- filled by: ${wi(o.get(i.name)[0])} at ${u}`)),d){let m=!0,I=new Set(i.peerNames);for(let B=r.length-1;B>=1;B--){let b=r[B];for(let R of I){if(b.peerNames.has(R)&&b.originalDependencies.has(R))continue;let H=b.dependencies.get(R);H&&t.dependencies.get(R)!==H&&(B===r.length-1?f.add(H):(f=null,m=!1,l&&(g=`- peer dependency ${wi(H.locator)} from parent ${wi(b.locator)} was not hoisted to ${u}`))),I.delete(R)}if(!m)break}d=m}if(d&&!c)for(let m of i.hoistedDependencies.values()){let I=n.get(m.name);if(!I||m.ident!==I.ident){d=!1,l&&(g=`- previously hoisted dependency mismatch, needed: ${wi(m.locator)}, available: ${wi(I==null?void 0:I.locator)}`);break}}return f!==null&&f.size>0?{isHoistable:2,dependsOn:f,reason:g}:{isHoistable:d?0:1,reason:g}},q5e=(t,e,r,i,n,s,o,a,l)=>{let c=e[e.length-1],u=new Set,g=!1,f=!1,h=(m,I,B,b)=>{if(u.has(B))return;let R=[...I,B.locator],H=new Map,L=new Map;for(let q of qL(B)){let A=W5e(c,r,[c,...m,B],q,i,n,s,a,{outputReason:l.debugLevel>=2,fastLookupPossible:l.fastLookupPossible});if(L.set(q,A),A.isHoistable===2)for(let V of A.dependsOn){let W=H.get(V.name)||new Set;W.add(q.name),H.set(V.name,W)}}let K=new Set,J=(q,A,V)=>{if(!K.has(q)){K.add(q),L.set(q,{isHoistable:1,reason:V});for(let W of H.get(q.name)||[])J(B.dependencies.get(W),A,l.debugLevel>=2?`- peer dependency ${wi(q.locator)} from parent ${wi(B.locator)} was not hoisted`:"")}};for(let[q,A]of L)A.isHoistable===1&&J(q,A,A.reason);for(let q of L.keys())if(!K.has(q)){f=!0;let A=o.get(B);A&&A.has(q.name)&&(g=!0),B.dependencies.delete(q.name),B.hoistedDependencies.set(q.name,q),B.reasons.delete(q.name);let V=c.dependencies.get(q.name);if(l.debugLevel>=2){let W=Array.from(I).concat([B.locator]).map(F=>wi(F)).join("\u2192"),X=c.hoistedFrom.get(q.name);X||(X=[],c.hoistedFrom.set(q.name,X)),X.push(W),B.hoistedTo.set(q.name,Array.from(e).map(F=>wi(F.locator)).join("\u2192"))}if(!V)c.ident!==q.ident&&(c.dependencies.set(q.name,q),b.add(q));else for(let W of q.references)V.references.add(W)}if(l.check){let q=Lle(t);if(q)throw new Error(`${q}, after hoisting dependencies of ${[c,...m,B].map(A=>wi(A.locator)).join("\u2192")}: +${zC(t)}`)}let ne=qL(B);for(let q of ne)if(K.has(q)){let A=L.get(q);if((n.get(q.name)===q.ident||!B.reasons.has(q.name))&&A.isHoistable!==0&&B.reasons.set(q.name,A.reason),!q.isHoistBorder&&R.indexOf(q.locator)<0){u.add(B);let W=Mle(B,q);h([...m,B],[...I,B.locator],W,d),u.delete(B)}}},p,d=new Set(qL(c));do{p=d,d=new Set;for(let m of p){if(m.locator===c.locator||m.isHoistBorder)continue;let I=Mle(c,m);h([],Array.from(r),I,d)}}while(d.size>0);return{anotherRoundNeeded:g,isGraphChanged:f}},Lle=t=>{let e=[],r=new Set,i=new Set,n=(s,o,a)=>{if(r.has(s)||(r.add(s),i.has(s)))return;let l=new Map(o);for(let c of s.dependencies.values())s.peerNames.has(c.name)||l.set(c.name,c);for(let c of s.originalDependencies.values()){let u=l.get(c.name),g=()=>`${Array.from(i).concat([s]).map(f=>wi(f.locator)).join("\u2192")}`;if(s.peerNames.has(c.name)){let f=o.get(c.name);(f!==u||!f||f.ident!==c.ident)&&e.push(`${g()} - broken peer promise: expected ${c.ident} but found ${f&&f.ident}`)}else{let f=a.hoistedFrom.get(s.name),h=s.hoistedTo.get(c.name),p=`${f?` hoisted from ${f.join(", ")}`:""}`,d=`${h?` hoisted to ${h}`:""}`,m=`${g()}${p}`;u?u.ident!==c.ident&&e.push(`${m} - broken require promise for ${c.name}${d}: expected ${c.ident}, but found: ${u.ident}`):e.push(`${m} - broken require promise: no required dependency ${c.name}${d} found`)}}i.add(s);for(let c of s.dependencies.values())s.peerNames.has(c.name)||n(c,l,s);i.delete(s)};return n(t,t.dependencies,t),e.join(` +`)},U5e=(t,e)=>{let{identName:r,name:i,reference:n,peerNames:s}=t,o={name:i,references:new Set([n]),locator:jL(r,n),ident:Nle(r,n),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(s),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,isWorkspace:!0,hoistedFrom:new Map,hoistedTo:new Map},a=new Map([[t,o]]),l=(c,u)=>{let g=a.get(c),f=!!g;if(!g){let{name:h,identName:p,reference:d,peerNames:m,hoistPriority:I,isWorkspace:B}=c,b=e.hoistingLimits.get(u.locator);g={name:h,references:new Set([d]),locator:jL(p,d),ident:Nle(p,d),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(m),reasons:new Map,decoupled:!0,isHoistBorder:b?b.has(h):!1,hoistPriority:I||0,isWorkspace:B||!1,hoistedFrom:new Map,hoistedTo:new Map},a.set(c,g)}if(u.dependencies.set(c.name,g),u.originalDependencies.set(c.name,g),f){let h=new Set,p=d=>{if(!h.has(d)){h.add(d),d.decoupled=!1;for(let m of d.dependencies.values())d.peerNames.has(m.name)||p(m)}};p(g)}else for(let h of c.dependencies)l(h,g)};for(let c of t.dependencies)l(c,o);return o},JL=t=>t.substring(0,t.indexOf("@",1)),H5e=t=>{let e={name:t.name,identName:JL(t.locator),references:new Set(t.references),dependencies:new Set},r=new Set([t]),i=(n,s,o)=>{let a=r.has(n),l;if(s===n)l=o;else{let{name:c,references:u,locator:g}=n;l={name:c,identName:JL(g),references:u,dependencies:new Set}}if(o.dependencies.add(l),!a){r.add(n);for(let c of n.dependencies.values())n.peerNames.has(c.name)||i(c,n,l);r.delete(n)}};for(let n of t.dependencies.values())i(n,t,e);return e},J5e=t=>{let e=new Map,r=new Set([t]),i=o=>`${o.name}@${o.ident}`,n=o=>{let a=i(o),l=e.get(a);return l||(l={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(a,l)),l},s=(o,a)=>{let l=!!r.has(a);if(n(a).dependents.add(o.ident),!l){r.add(a);for(let u of a.dependencies.values()){let g=n(u);g.hoistPriority=Math.max(g.hoistPriority,u.hoistPriority),a.peerNames.has(u.name)?g.peerDependents.add(a.ident):s(a,u)}}};for(let o of t.dependencies.values())t.peerNames.has(o.name)||s(t,o);return e},wi=t=>{if(!t)return"none";let e=t.indexOf("@",1),r=t.substring(0,e);r.endsWith("$wsroot$")&&(r=`wh:${r.replace("$wsroot$","")}`);let i=t.substring(e+1);if(i==="workspace:.")return".";if(i){let n=(i.indexOf("#")>0?i.split("#")[1]:i).replace("npm:","");return i.startsWith("virtual")&&(r=`v:${r}`),n.startsWith("workspace")&&(r=`w:${r}`,n=""),`${r}${n?`@${n}`:""}`}else return`${r}`},Ole=5e4,zC=t=>{let e=0,r=(n,s,o="")=>{if(e>Ole||s.has(n))return"";e++;let a=Array.from(n.dependencies.values()).sort((c,u)=>c.name.localeCompare(u.name)),l="";s.add(n);for(let c=0;c":"")+(f!==u.name?`a:${u.name}:`:"")+wi(u.locator)+(g?` ${g}`:"")+(u!==n&&h.length>0?`, hoisted from: ${h.join(", ")}`:"")} +`,l+=r(u,s,`${o}${cOle?` +Tree is too large, part of the tree has been dunped +`:"")};var Js;(function(r){r.HARD="HARD",r.SOFT="SOFT"})(Js||(Js={}));var Sn;(function(i){i.WORKSPACES="workspaces",i.DEPENDENCIES="dependencies",i.NONE="none"})(Sn||(Sn={}));var Kle="node_modules",Hc="$wsroot$";var VC=(t,e)=>{let{packageTree:r,hoistingLimits:i,errors:n,preserveSymlinksRequired:s}=z5e(t,e),o=null;if(n.length===0){let a=Tle(r,{hoistingLimits:i});o=V5e(t,a,e)}return{tree:o,errors:n,preserveSymlinksRequired:s}},ms=t=>`${t.name}@${t.reference}`,WL=t=>{let e=new Map;for(let[r,i]of t.entries())if(!i.dirList){let n=e.get(i.locator);n||(n={target:i.target,linkType:i.linkType,locations:[],aliases:i.aliases},e.set(i.locator,n)),n.locations.push(r)}for(let r of e.values())r.locations=r.locations.sort((i,n)=>{let s=i.split(v.delimiter).length,o=n.split(v.delimiter).length;return s!==o?o-s:n.localeCompare(i)});return e},Ule=(t,e)=>{let r=S.isVirtualLocator(t)?S.devirtualizeLocator(t):t,i=S.isVirtualLocator(e)?S.devirtualizeLocator(e):e;return S.areLocatorsEqual(r,i)},zL=(t,e,r,i)=>{if(t.linkType!==Js.SOFT)return!1;let n=M.toPortablePath(r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation);return v.contains(i,n)===null},_5e=t=>{let e=t.getPackageInformation(t.topLevel);if(e===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");if(t.findPackageLocator(e.packageLocation)===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let i=M.toPortablePath(e.packageLocation.slice(0,-1)),n=new Map,s={children:new Map},o=t.getDependencyTreeRoots(),a=new Map,l=new Set,c=(f,h)=>{let p=ms(f);if(l.has(p))return;l.add(p);let d=t.getPackageInformation(f);if(d){let m=h?ms(h):"";if(ms(f)!==m&&d.linkType===Js.SOFT&&!zL(d,f,t,i)){let I=Hle(d,f,t);(!a.get(I)||f.reference.startsWith("workspace:"))&&a.set(I,f)}for(let[I,B]of d.packageDependencies)B!==null&&(d.packagePeers.has(I)||c(t.getLocator(I,B),f))}};for(let f of o)c(f,null);let u=i.split(v.sep);for(let f of a.values()){let h=t.getPackageInformation(f),d=M.toPortablePath(h.packageLocation.slice(0,-1)).split(v.sep).slice(u.length),m=s;for(let I of d){let B=m.children.get(I);B||(B={children:new Map},m.children.set(I,B)),m=B}m.workspaceLocator=f}let g=(f,h)=>{if(f.workspaceLocator){let p=ms(h),d=n.get(p);d||(d=new Set,n.set(p,d)),d.add(f.workspaceLocator)}for(let p of f.children.values())g(p,f.workspaceLocator||h)};for(let f of s.children.values())g(f,s.workspaceLocator);return n},z5e=(t,e)=>{let r=[],i=!1,n=new Map,s=_5e(t),o=t.getPackageInformation(t.topLevel);if(o===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");let a=t.findPackageLocator(o.packageLocation);if(a===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let l=M.toPortablePath(o.packageLocation.slice(0,-1)),c={name:a.name,identName:a.name,reference:a.reference,peerNames:o.packagePeers,dependencies:new Set,isWorkspace:!0},u=new Map,g=(h,p)=>`${ms(p)}:${h}`,f=(h,p,d,m,I,B,b,R)=>{var X,F;let H=g(h,d),L=u.get(H),K=!!L;!K&&d.name===a.name&&d.reference===a.reference&&(L=c,u.set(H,c));let J=zL(p,d,t,l);if(!L){let D=p.linkType===Js.SOFT&&d.name.endsWith(Hc);L={name:h,identName:d.name,reference:d.reference,dependencies:new Set,peerNames:D?new Set:p.packagePeers,isWorkspace:D},u.set(H,L)}let ne;if(J?ne=2:I.linkType===Js.SOFT?ne=1:ne=0,L.hoistPriority=Math.max(L.hoistPriority||0,ne),R&&!J){let D=ms({name:m.identName,reference:m.reference}),he=n.get(D)||new Set;n.set(D,he),he.add(L.name)}let q=new Map(p.packageDependencies);if(e.project){let D=e.project.workspacesByCwd.get(M.toPortablePath(p.packageLocation.slice(0,-1)));if(D){let he=new Set([...Array.from(D.manifest.peerDependencies.values(),pe=>S.stringifyIdent(pe)),...Array.from(D.manifest.peerDependenciesMeta.keys())]);for(let pe of he)q.has(pe)||(q.set(pe,B.get(pe)||null),L.peerNames.add(pe))}}let A=ms({name:d.name.replace(Hc,""),reference:d.reference}),V=s.get(A);if(V)for(let D of V)q.set(`${D.name}${Hc}`,D.reference);(p!==I||p.linkType!==Js.SOFT||!e.selfReferencesByCwd||e.selfReferencesByCwd.get(b))&&m.dependencies.add(L);let W=d!==a&&p.linkType===Js.SOFT&&!d.name.endsWith(Hc)&&!J;if(!K&&!W){let D=new Map;for(let[he,pe]of q)if(pe!==null){let Ne=t.getLocator(he,pe),Pe=t.getLocator(he.replace(Hc,""),pe),qe=t.getPackageInformation(Pe);if(qe===null)throw new Error("Assertion failed: Expected the package to have been registered");let re=zL(qe,Ne,t,l);if(e.validateExternalSoftLinks&&e.project&&re){qe.packageDependencies.size>0&&(i=!0);for(let[De,$]of qe.packageDependencies)if($!==null){let G=S.parseLocator(Array.isArray($)?`${$[0]}@${$[1]}`:`${De}@${$}`);if(ms(G)!==ms(Ne)){let Ce=q.get(De);if(Ce){let ee=S.parseLocator(Array.isArray(Ce)?`${Ce[0]}@${Ce[1]}`:`${De}@${Ce}`);Ule(ee,G)||r.push({messageName:z.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK,text:`Cannot link ${S.prettyIdent(e.project.configuration,S.parseIdent(Ne.name))} into ${S.prettyLocator(e.project.configuration,S.parseLocator(`${d.name}@${d.reference}`))} dependency ${S.prettyLocator(e.project.configuration,G)} conflicts with parent dependency ${S.prettyLocator(e.project.configuration,ee)}`})}else{let ee=D.get(De);if(ee){let Ue=ee.target,Oe=S.parseLocator(Array.isArray(Ue)?`${Ue[0]}@${Ue[1]}`:`${De}@${Ue}`);Ule(Oe,G)||r.push({messageName:z.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK,text:`Cannot link ${S.prettyIdent(e.project.configuration,S.parseIdent(Ne.name))} into ${S.prettyLocator(e.project.configuration,S.parseLocator(`${d.name}@${d.reference}`))} dependency ${S.prettyLocator(e.project.configuration,G)} conflicts with dependency ${S.prettyLocator(e.project.configuration,Oe)} from sibling portal ${S.prettyIdent(e.project.configuration,S.parseIdent(ee.portal.name))}`})}else D.set(De,{target:G.reference,portal:Ne})}}}}let se=(X=e.hoistingLimitsByCwd)==null?void 0:X.get(b),be=re?b:v.relative(l,M.toPortablePath(qe.packageLocation))||Se.dot,ae=(F=e.hoistingLimitsByCwd)==null?void 0:F.get(be),Ae=se===Sn.DEPENDENCIES||ae===Sn.DEPENDENCIES||ae===Sn.WORKSPACES;f(ms(Ne)===ms(d)?h:he,qe,Ne,L,p,q,be,Ae)}}};return f(a.name,o,a,c,o,o.packageDependencies,Se.dot,!1),{packageTree:c,hoistingLimits:n,errors:r,preserveSymlinksRequired:i}};function Hle(t,e,r){let i=r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation;return M.toPortablePath(i||t.packageLocation)}function X5e(t,e,r){let i=e.getLocator(t.name.replace(Hc,""),t.reference),n=e.getPackageInformation(i);if(n===null)throw new Error("Assertion failed: Expected the package to be registered");let s,o;return r.pnpifyFs?(o=M.toPortablePath(n.packageLocation),s=Js.SOFT):(o=Hle(n,t,e),s=n.linkType),{linkType:s,target:o}}var V5e=(t,e,r)=>{let i=new Map,n=(u,g,f)=>{let{linkType:h,target:p}=X5e(u,t,r);return{locator:ms(u),nodePath:g,target:p,linkType:h,aliases:f}},s=u=>{let[g,f]=u.split("/");return f?{scope:kr(g),name:kr(f)}:{scope:null,name:kr(g)}},o=new Set,a=(u,g,f)=>{if(!o.has(u)){o.add(u);for(let h of u.dependencies){if(h===u)continue;let p=Array.from(h.references).sort(),d={name:h.identName,reference:p[0]},{name:m,scope:I}=s(h.name),B=I?[I,m]:[m],b=v.join(g,Kle),R=v.join(b,...B),H=`${f}/${d.name}`,L=n(d,f,p.slice(1)),K=!1;if(L.linkType===Js.SOFT&&r.project){let J=r.project.workspacesByCwd.get(L.target.slice(0,-1));K=!!(J&&!J.manifest.name)}if(!h.name.endsWith(Hc)&&!K){let J=i.get(R);if(J){if(J.dirList)throw new Error(`Assertion failed: ${R} cannot merge dir node with leaf node`);{let V=S.parseLocator(J.locator),W=S.parseLocator(L.locator);if(J.linkType!==L.linkType)throw new Error(`Assertion failed: ${R} cannot merge nodes with different link types ${J.nodePath}/${S.stringifyLocator(V)} and ${f}/${S.stringifyLocator(W)}`);if(V.identHash!==W.identHash)throw new Error(`Assertion failed: ${R} cannot merge nodes with different idents ${J.nodePath}/${S.stringifyLocator(V)} and ${f}/s${S.stringifyLocator(W)}`);L.aliases=[...L.aliases,...J.aliases,S.parseLocator(J.locator).reference]}}i.set(R,L);let ne=R.split("/"),q=ne.indexOf(Kle),A=ne.length-1;for(;q>=0&&A>q;){let V=M.toPortablePath(ne.slice(0,A).join(v.sep)),W=kr(ne[A]),X=i.get(V);if(!X)i.set(V,{dirList:new Set([W])});else if(X.dirList){if(X.dirList.has(W))break;X.dirList.add(W)}A--}}a(h,L.linkType===Js.SOFT?L.target:R,H)}}},l=n({name:e.name,reference:Array.from(e.references)[0]},"",[]),c=l.target;return i.set(c,l),a(e,c,""),i};var oT={};it(oT,{PnpInstaller:()=>Cf,PnpLinker:()=>jc,default:()=>m6e,getPnpPath:()=>qA,jsInstallUtils:()=>Ws,pnpUtils:()=>nT,quotePathIfNeeded:()=>uce});var lce=ie(Or()),cce=ie(require("url"));var Gle;(function(r){r.HARD="HARD",r.SOFT="SOFT"})(Gle||(Gle={}));var Ht;(function(f){f.DEFAULT="DEFAULT",f.TOP_LEVEL="TOP_LEVEL",f.FALLBACK_EXCLUSION_LIST="FALLBACK_EXCLUSION_LIST",f.FALLBACK_EXCLUSION_ENTRIES="FALLBACK_EXCLUSION_ENTRIES",f.FALLBACK_EXCLUSION_DATA="FALLBACK_EXCLUSION_DATA",f.PACKAGE_REGISTRY_DATA="PACKAGE_REGISTRY_DATA",f.PACKAGE_REGISTRY_ENTRIES="PACKAGE_REGISTRY_ENTRIES",f.PACKAGE_STORE_DATA="PACKAGE_STORE_DATA",f.PACKAGE_STORE_ENTRIES="PACKAGE_STORE_ENTRIES",f.PACKAGE_INFORMATION_DATA="PACKAGE_INFORMATION_DATA",f.PACKAGE_DEPENDENCIES="PACKAGE_DEPENDENCIES",f.PACKAGE_DEPENDENCY="PACKAGE_DEPENDENCY"})(Ht||(Ht={}));var jle={[Ht.DEFAULT]:{collapsed:!1,next:{["*"]:Ht.DEFAULT}},[Ht.TOP_LEVEL]:{collapsed:!1,next:{fallbackExclusionList:Ht.FALLBACK_EXCLUSION_LIST,packageRegistryData:Ht.PACKAGE_REGISTRY_DATA,["*"]:Ht.DEFAULT}},[Ht.FALLBACK_EXCLUSION_LIST]:{collapsed:!1,next:{["*"]:Ht.FALLBACK_EXCLUSION_ENTRIES}},[Ht.FALLBACK_EXCLUSION_ENTRIES]:{collapsed:!0,next:{["*"]:Ht.FALLBACK_EXCLUSION_DATA}},[Ht.FALLBACK_EXCLUSION_DATA]:{collapsed:!0,next:{["*"]:Ht.DEFAULT}},[Ht.PACKAGE_REGISTRY_DATA]:{collapsed:!1,next:{["*"]:Ht.PACKAGE_REGISTRY_ENTRIES}},[Ht.PACKAGE_REGISTRY_ENTRIES]:{collapsed:!0,next:{["*"]:Ht.PACKAGE_STORE_DATA}},[Ht.PACKAGE_STORE_DATA]:{collapsed:!1,next:{["*"]:Ht.PACKAGE_STORE_ENTRIES}},[Ht.PACKAGE_STORE_ENTRIES]:{collapsed:!0,next:{["*"]:Ht.PACKAGE_INFORMATION_DATA}},[Ht.PACKAGE_INFORMATION_DATA]:{collapsed:!1,next:{packageDependencies:Ht.PACKAGE_DEPENDENCIES,["*"]:Ht.DEFAULT}},[Ht.PACKAGE_DEPENDENCIES]:{collapsed:!1,next:{["*"]:Ht.PACKAGE_DEPENDENCY}},[Ht.PACKAGE_DEPENDENCY]:{collapsed:!0,next:{["*"]:Ht.DEFAULT}}};function Z5e(t,e,r){let i="";i+="[";for(let n=0,s=t.length;ns(o)));let n=r.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>r[s])}function r6e(t){let e=new Map,r=_C(t.fallbackExclusionList||[],[({name:i,reference:n})=>i,({name:i,reference:n})=>n]);for(let{name:i,reference:n}of r){let s=e.get(i);typeof s=="undefined"&&e.set(i,s=new Set),s.add(n)}return Array.from(e).map(([i,n])=>[i,Array.from(n)])}function i6e(t){return _C(t.fallbackPool||[],([e])=>e)}function n6e(t){let e=[];for(let[r,i]of _C(t.packageRegistry,([n])=>n===null?"0":`1${n}`)){let n=[];e.push([r,n]);for(let[s,{packageLocation:o,packageDependencies:a,packagePeers:l,linkType:c,discardFromLookup:u}]of _C(i,([g])=>g===null?"0":`1${g}`)){let g=[];r!==null&&s!==null&&!a.has(r)&&g.push([r,s]);for(let[p,d]of _C(a.entries(),([m])=>m))g.push([p,d]);let f=l&&l.size>0?Array.from(l):void 0,h=u||void 0;n.push([s,{packageLocation:o,packageDependencies:g,packagePeers:f,linkType:c,discardFromLookup:h}])}}return e}function XC(t){return{__info:["This file is automatically generated. Do not touch it, or risk","your modifications being lost. We also recommend you not to read","it either without using the @yarnpkg/pnp package, as the data layout","is entirely unspecified and WILL change from a version to another."],dependencyTreeRoots:t.dependencyTreeRoots,enableTopLevelFallback:t.enableTopLevelFallback||!1,ignorePatternData:t.ignorePattern||null,fallbackExclusionList:r6e(t),fallbackPool:i6e(t),packageRegistryData:n6e(t)}}var zle=ie(Wle());function Vle(t,e){return[t?`${t} +`:"",`/* eslint-disable */ + +`,`try { +`,` Object.freeze({}).detectStrictMode = true; +`,`} catch (error) { +`," throw new Error(`The whole PnP file got strict-mode-ified, which is known to break (Emscripten libraries aren't strict mode). This usually happens when the file goes through Babel.`);\n",`} +`,` +`,`var __non_webpack_module__ = module; +`,` +`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) { +`,e.replace(/^/gm," "),`} +`,` +`,(0,zle.default)()].join("")}function s6e(t){return JSON.stringify(t,null,2)}function o6e(t){return[`return hydrateRuntimeState(${qle(t)}, {basePath: basePath || __dirname}); +`].join("")}function a6e(t){return[`var path = require('path'); +`,`var dataLocation = path.resolve(__dirname, ${JSON.stringify(t)}); +`,`return hydrateRuntimeState(require(dataLocation), {basePath: basePath || path.dirname(dataLocation)}); +`].join("")}function _le(t){let e=XC(t),r=o6e(e);return Vle(t.shebang,r)}function Xle(t){let e=XC(t),r=a6e(t.dataLocation),i=Vle(t.shebang,r);return{dataFile:s6e(e),loaderFile:i}}var tce=ie(require("fs")),u6e=ie(require("path")),rce=ie(require("util"));function _L(t,{basePath:e}){let r=M.toPortablePath(e),i=v.resolve(r),n=t.ignorePatternData!==null?new RegExp(t.ignorePatternData):null,s=new Map,o=new Map(t.packageRegistryData.map(([g,f])=>[g,new Map(f.map(([h,p])=>{var b;if(g===null!=(h===null))throw new Error("Assertion failed: The name and reference should be null, or neither should");let d=(b=p.discardFromLookup)!=null?b:!1,m={name:g,reference:h},I=s.get(p.packageLocation);I?(I.discardFromLookup=I.discardFromLookup&&d,d||(I.locator=m)):s.set(p.packageLocation,{locator:m,discardFromLookup:d});let B=null;return[h,{packageDependencies:new Map(p.packageDependencies),packagePeers:new Set(p.packagePeers),linkType:p.linkType,discardFromLookup:d,get packageLocation(){return B||(B=v.join(i,p.packageLocation))}}]}))])),a=new Map(t.fallbackExclusionList.map(([g,f])=>[g,new Set(f)])),l=new Map(t.fallbackPool),c=t.dependencyTreeRoots,u=t.enableTopLevelFallback;return{basePath:r,dependencyTreeRoots:c,enableTopLevelFallback:u,fallbackExclusionList:a,fallbackPool:l,ignorePattern:n,packageLocatorsByLocations:s,packageRegistry:o}}var df=ie(require("module")),ece=ie($le()),ZL=ie(require("util"));var ur;(function(l){l.API_ERROR="API_ERROR",l.BUILTIN_NODE_RESOLUTION_FAILED="BUILTIN_NODE_RESOLUTION_FAILED",l.MISSING_DEPENDENCY="MISSING_DEPENDENCY",l.MISSING_PEER_DEPENDENCY="MISSING_PEER_DEPENDENCY",l.QUALIFIED_PATH_RESOLUTION_FAILED="QUALIFIED_PATH_RESOLUTION_FAILED",l.INTERNAL="INTERNAL",l.UNDECLARED_DEPENDENCY="UNDECLARED_DEPENDENCY",l.UNSUPPORTED="UNSUPPORTED"})(ur||(ur={}));var c6e=new Set([ur.BUILTIN_NODE_RESOLUTION_FAILED,ur.MISSING_DEPENDENCY,ur.MISSING_PEER_DEPENDENCY,ur.QUALIFIED_PATH_RESOLUTION_FAILED,ur.UNDECLARED_DEPENDENCY]);function ui(t,e,r={}){let i=c6e.has(t)?"MODULE_NOT_FOUND":t,n={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:_(P({},n),{value:i}),pnpCode:_(P({},n),{value:t}),data:_(P({},n),{value:r})})}function YA(t){return M.normalize(M.fromPortablePath(t))}function $L(t,e){let r=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,i=Number(process.env.PNP_DEBUG_LEVEL),n=new Set(df.Module.builtinModules||Object.keys(process.binding("natives"))),s=re=>n.has(re)||re.startsWith("node:"),o=/^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/,a=/^(\/|\.{1,2}(\/|$))/,l=/\/$/,c=/^\.{0,2}\//,u={name:null,reference:null},g=[],f=new Set;if(t.enableTopLevelFallback===!0&&g.push(u),e.compatibilityMode!==!1)for(let re of["react-scripts","gatsby"]){let se=t.packageRegistry.get(re);if(se)for(let be of se.keys()){if(be===null)throw new Error("Assertion failed: This reference shouldn't be null");g.push({name:re,reference:be})}}let{ignorePattern:h,packageRegistry:p,packageLocatorsByLocations:d}=t;function m(re,se){return{fn:re,args:se,error:null,result:null}}function I(re){var De,$,G,Ce,ee,Ue;let se=(G=($=(De=process.stderr)==null?void 0:De.hasColors)==null?void 0:$.call(De))!=null?G:process.stdout.isTTY,be=(Oe,vt)=>`[${Oe}m${vt}`,ae=re.error;console.error(ae?be("31;1",`\u2716 ${(Ce=re.error)==null?void 0:Ce.message.replace(/\n.*/s,"")}`):be("33;1","\u203C Resolution")),re.args.length>0&&console.error();for(let Oe of re.args)console.error(` ${be("37;1","In \u2190")} ${(0,ZL.inspect)(Oe,{colors:se,compact:!0})}`);re.result&&(console.error(),console.error(` ${be("37;1","Out \u2192")} ${(0,ZL.inspect)(re.result,{colors:se,compact:!0})}`));let Ae=(Ue=(ee=new Error().stack.match(/(?<=^ +)at.*/gm))==null?void 0:ee.slice(2))!=null?Ue:[];if(Ae.length>0){console.error();for(let Oe of Ae)console.error(` ${be("38;5;244",Oe)}`)}console.error()}function B(re,se){if(e.allowDebug===!1)return se;if(Number.isFinite(i)){if(i>=2)return(...be)=>{let ae=m(re,be);try{return ae.result=se(...be)}catch(Ae){throw ae.error=Ae}finally{I(ae)}};if(i>=1)return(...be)=>{try{return se(...be)}catch(ae){let Ae=m(re,be);throw Ae.error=ae,I(Ae),ae}}}return se}function b(re){let se=W(re);if(!se)throw ui(ur.INTERNAL,"Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)");return se}function R(re){if(re.name===null)return!0;for(let se of t.dependencyTreeRoots)if(se.name===re.name&&se.reference===re.reference)return!0;return!1}let H=new Set(["default","node","require"]);function L(re,se=H){let be=D(v.join(re,"internal.js"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(be===null)throw ui(ur.INTERNAL,`The locator that owns the "${re}" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:ae}=b(be),Ae=v.join(ae,wt.manifest);if(!e.fakeFs.existsSync(Ae))return null;let De=JSON.parse(e.fakeFs.readFileSync(Ae,"utf8")),$=v.contains(ae,re);if($===null)throw ui(ur.INTERNAL,"unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)");c.test($)||($=`./${$}`);let G=(0,ece.resolve)(De,v.normalize($),{conditions:se,unsafe:!0});return typeof G=="string"?v.join(ae,G):null}function K(re,se,{extensions:be}){let ae;try{se.push(re),ae=e.fakeFs.statSync(re)}catch(Ae){}if(ae&&!ae.isDirectory())return e.fakeFs.realpathSync(re);if(ae&&ae.isDirectory()){let Ae;try{Ae=JSON.parse(e.fakeFs.readFileSync(v.join(re,wt.manifest),"utf8"))}catch($){}let De;if(Ae&&Ae.main&&(De=v.resolve(re,Ae.main)),De&&De!==re){let $=K(De,se,{extensions:be});if($!==null)return $}}for(let Ae=0,De=be.length;Ae{let G=JSON.stringify($.name);if(ae.has(G))return;ae.add(G);let Ce=X($);for(let ee of Ce)if(b(ee).packagePeers.has(re))Ae(ee);else{let Oe=be.get(ee.name);typeof Oe=="undefined"&&be.set(ee.name,Oe=new Set),Oe.add(ee.reference)}};Ae(se);let De=[];for(let $ of[...be.keys()].sort())for(let G of[...be.get($)].sort())De.push({name:$,reference:G});return De}function D(re,{resolveIgnored:se=!1,includeDiscardFromLookup:be=!1}={}){if(q(re)&&!se)return null;let ae=v.relative(t.basePath,re);ae.match(a)||(ae=`./${ae}`),ae.endsWith("/")||(ae=`${ae}/`);do{let Ae=d.get(ae);if(typeof Ae=="undefined"||Ae.discardFromLookup&&!be){ae=ae.substring(0,ae.lastIndexOf("/",ae.length-2)+1);continue}return Ae.locator}while(ae!=="");return null}function he(re,se,{considerBuiltins:be=!0}={}){if(re==="pnpapi")return M.toPortablePath(e.pnpapiResolution);if(be&&s(re))return null;let ae=YA(re),Ae=se&&YA(se);if(se&&q(se)&&(!v.isAbsolute(re)||D(re)===null)){let G=ne(re,se);if(G===!1)throw ui(ur.BUILTIN_NODE_RESOLUTION_FAILED,`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp) + +Require request: "${ae}" +Required by: ${Ae} +`,{request:ae,issuer:Ae});return M.toPortablePath(G)}let De,$=re.match(o);if($){if(!se)throw ui(ur.API_ERROR,"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:ae,issuer:Ae});let[,G,Ce]=$,ee=D(se);if(!ee){let yr=ne(re,se);if(yr===!1)throw ui(ur.BUILTIN_NODE_RESOLUTION_FAILED,`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree). + +Require path: "${ae}" +Required by: ${Ae} +`,{request:ae,issuer:Ae});return M.toPortablePath(yr)}let Oe=b(ee).packageDependencies.get(G),vt=null;if(Oe==null&&ee.name!==null){let yr=t.fallbackExclusionList.get(ee.name);if(!yr||!yr.has(ee.reference)){for(let Qi=0,Go=g.length;QiR(Ki))?dt=ui(ur.MISSING_PEER_DEPENDENCY,`${ee.name} tried to access ${G} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. + +Required package: ${G}${G!==ae?` (via "${ae}")`:""} +Required by: ${ee.name}@${ee.reference} (via ${Ae}) +${yr.map(Ki=>`Ancestor breaking the chain: ${Ki.name}@${Ki.reference} +`).join("")} +`,{request:ae,issuer:Ae,issuerLocator:Object.assign({},ee),dependencyName:G,brokenAncestors:yr}):dt=ui(ur.MISSING_PEER_DEPENDENCY,`${ee.name} tried to access ${G} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. + +Required package: ${G}${G!==ae?` (via "${ae}")`:""} +Required by: ${ee.name}@${ee.reference} (via ${Ae}) + +${yr.map(Ki=>`Ancestor breaking the chain: ${Ki.name}@${Ki.reference} +`).join("")} +`,{request:ae,issuer:Ae,issuerLocator:Object.assign({},ee),dependencyName:G,brokenAncestors:yr})}else Oe===void 0&&(!be&&s(re)?R(ee)?dt=ui(ur.UNDECLARED_DEPENDENCY,`Your application tried to access ${G}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${G} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. + +Required package: ${G}${G!==ae?` (via "${ae}")`:""} +Required by: ${Ae} +`,{request:ae,issuer:Ae,dependencyName:G}):dt=ui(ur.UNDECLARED_DEPENDENCY,`${ee.name} tried to access ${G}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${G} isn't otherwise declared in ${ee.name}'s dependencies, this makes the require call ambiguous and unsound. + +Required package: ${G}${G!==ae?` (via "${ae}")`:""} +Required by: ${Ae} +`,{request:ae,issuer:Ae,issuerLocator:Object.assign({},ee),dependencyName:G}):R(ee)?dt=ui(ur.UNDECLARED_DEPENDENCY,`Your application tried to access ${G}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. + +Required package: ${G}${G!==ae?` (via "${ae}")`:""} +Required by: ${Ae} +`,{request:ae,issuer:Ae,dependencyName:G}):dt=ui(ur.UNDECLARED_DEPENDENCY,`${ee.name} tried to access ${G}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. + +Required package: ${G}${G!==ae?` (via "${ae}")`:""} +Required by: ${ee.name}@${ee.reference} (via ${Ae}) +`,{request:ae,issuer:Ae,issuerLocator:Object.assign({},ee),dependencyName:G}));if(Oe==null){if(vt===null||dt===null)throw dt||new Error("Assertion failed: Expected an error to have been set");Oe=vt;let yr=dt.message.replace(/\n.*/g,"");dt.message=yr,!f.has(yr)&&i!==0&&(f.add(yr),process.emitWarning(dt))}let ri=Array.isArray(Oe)?{name:Oe[0],reference:Oe[1]}:{name:G,reference:Oe},ii=b(ri);if(!ii.packageLocation)throw ui(ur.MISSING_DEPENDENCY,`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod. + +Required package: ${ri.name}@${ri.reference}${ri.name!==ae?` (via "${ae}")`:""} +Required by: ${ee.name}@${ee.reference} (via ${Ae}) +`,{request:ae,issuer:Ae,dependencyLocator:Object.assign({},ri)});let an=ii.packageLocation;Ce?De=v.join(an,Ce):De=an}else if(v.isAbsolute(re))De=v.normalize(re);else{if(!se)throw ui(ur.API_ERROR,"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:ae,issuer:Ae});let G=v.resolve(se);se.match(l)?De=v.normalize(v.join(G,re)):De=v.normalize(v.join(v.dirname(G),re))}return v.normalize(De)}function pe(re,se,be=H){if(a.test(re))return se;let ae=L(se,be);return ae?v.normalize(ae):se}function Ne(re,{extensions:se=Object.keys(df.Module._extensions)}={}){let be=[],ae=K(re,be,{extensions:se});if(ae)return v.normalize(ae);{let Ae=YA(re),De=D(re);if(De){let{packageLocation:$}=b(De);if(!e.fakeFs.existsSync($)){let G=$.includes("/unplugged/")?"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).":"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.";throw ui(ur.QUALIFIED_PATH_RESOLUTION_FAILED,`${G} + +Missing package: ${De.name}@${De.reference} +Expected package location: ${YA($)} +`,{unqualifiedPath:Ae})}}throw ui(ur.QUALIFIED_PATH_RESOLUTION_FAILED,`Qualified path resolution failed - none of those files can be found on the disk. + +Source path: ${Ae} +${be.map($=>`Not found: ${YA($)} +`).join("")}`,{unqualifiedPath:Ae})}}function Pe(re,se,{considerBuiltins:be,extensions:ae,conditions:Ae}={}){let De=he(re,se,{considerBuiltins:be});if(re==="pnpapi")return De;if(De===null)return null;let $=()=>se!==null?q(se):!1,G=(!be||!s(re))&&!$()?pe(re,De,Ae):De;try{return Ne(G,{extensions:ae})}catch(Ce){throw Ce.pnpCode==="QUALIFIED_PATH_RESOLUTION_FAILED"&&Object.assign(Ce.data,{request:YA(re),issuer:se&&YA(se)}),Ce}}function qe(re){let se=v.normalize(re),be=Pr.resolveVirtual(se);return be!==se?be:null}return{VERSIONS:A,topLevel:V,getLocator:(re,se)=>Array.isArray(se)?{name:se[0],reference:se[1]}:{name:re,reference:se},getDependencyTreeRoots:()=>[...t.dependencyTreeRoots],getAllLocators(){let re=[];for(let[se,be]of p)for(let ae of be.keys())se!==null&&ae!==null&&re.push({name:se,reference:ae});return re},getPackageInformation:re=>{let se=W(re);if(se===null)return null;let be=M.fromPortablePath(se.packageLocation);return _(P({},se),{packageLocation:be})},findPackageLocator:re=>D(M.toPortablePath(re)),resolveToUnqualified:B("resolveToUnqualified",(re,se,be)=>{let ae=se!==null?M.toPortablePath(se):null,Ae=he(M.toPortablePath(re),ae,be);return Ae===null?null:M.fromPortablePath(Ae)}),resolveUnqualified:B("resolveUnqualified",(re,se)=>M.fromPortablePath(Ne(M.toPortablePath(re),se))),resolveRequest:B("resolveRequest",(re,se,be)=>{let ae=se!==null?M.toPortablePath(se):null,Ae=Pe(M.toPortablePath(re),ae,be);return Ae===null?null:M.fromPortablePath(Ae)}),resolveVirtual:B("resolveVirtual",re=>{let se=qe(M.toPortablePath(re));return se!==null?M.fromPortablePath(se):null})}}var ISt=(0,rce.promisify)(tce.readFile);var ice=(t,e,r)=>{let i=XC(t),n=_L(i,{basePath:e}),s=M.join(e,wt.pnpCjs);return $L(n,{fakeFs:r,pnpapiResolution:s})};var tT=ie(sce());var Ws={};it(Ws,{checkAndReportManifestCompatibility:()=>oce,extractBuildScripts:()=>Z0,getExtractHint:()=>rT,hasBindingGyp:()=>iT});function oce(t,e,{configuration:r,report:i}){return S.isPackageCompatible(t,{os:[process.platform],cpu:[process.arch]})?!0:(i==null||i.reportWarningOnce(z.INCOMPATIBLE_ARCHITECTURE,`${S.prettyLocator(r,t)} The ${process.platform}-${process.arch} architecture is incompatible with this module, ${e} skipped.`),!1)}function Z0(t,e,r,{configuration:i,report:n}){let s=[];for(let a of["preinstall","install","postinstall"])e.manifest.scripts.has(a)&&s.push([Gn.SCRIPT,a]);return!e.manifest.scripts.has("install")&&e.misc.hasBindingGyp&&s.push([Gn.SHELLCODE,"node-gyp rebuild"]),s.length===0?[]:t.linkType!==gt.HARD?(n==null||n.reportWarningOnce(z.SOFT_LINK_BUILD,`${S.prettyLocator(i,t)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`),[]):r&&r.built===!1?(n==null||n.reportInfoOnce(z.BUILD_DISABLED,`${S.prettyLocator(i,t)} lists build scripts, but its build has been explicitly disabled through configuration.`),[]):!i.get("enableScripts")&&!r.built?(n==null||n.reportWarningOnce(z.DISABLED_BUILD_SCRIPTS,`${S.prettyLocator(i,t)} lists build scripts, but all build scripts have been disabled.`),[]):oce(t,"build",{configuration:i,report:n})?s:[]}var g6e=new Set([".exe",".h",".hh",".hpp",".c",".cc",".cpp",".java",".jar",".node"]);function rT(t){return t.packageFs.getExtractHint({relevantExtensions:g6e})}function iT(t){let e=v.join(t.prefixPath,"binding.gyp");return t.packageFs.existsSync(e)}var nT={};it(nT,{getUnpluggedPath:()=>ZC});function ZC(t,{configuration:e}){return v.resolve(e.get("pnpUnpluggedFolder"),S.slugifyLocator(t))}var f6e=new Set([S.makeIdent(null,"nan").identHash,S.makeIdent(null,"node-gyp").identHash,S.makeIdent(null,"node-pre-gyp").identHash,S.makeIdent(null,"node-addon-api").identHash,S.makeIdent(null,"fsevents").identHash]),jc=class{constructor(){this.mode="strict";this.pnpCache=new Map}supportsPackage(e,r){return!(r.project.configuration.get("nodeLinker")!=="pnp"||r.project.configuration.get("pnpMode")!==this.mode)}async findPackageLocation(e,r){let i=qA(r.project).cjs;if(!T.existsSync(i))throw new me(`The project in ${ue.pretty(r.project.configuration,`${r.project.cwd}/package.json`,ue.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=de.getFactoryWithDefault(this.pnpCache,i,()=>de.dynamicRequire(i,{cachingStrategy:de.CachingStrategy.FsTime})),s={name:S.stringifyIdent(e),reference:e.reference},o=n.getPackageInformation(s);if(!o)throw new me(`Couldn't find ${S.prettyLocator(r.project.configuration,e)} in the currently installed PnP map - running an install might help`);return M.toPortablePath(o.packageLocation)}async findPackageLocator(e,r){let i=qA(r.project).cjs;if(!T.existsSync(i))return null;let s=de.getFactoryWithDefault(this.pnpCache,i,()=>de.dynamicRequire(i,{cachingStrategy:de.CachingStrategy.FsTime})).findPackageLocator(M.fromPortablePath(e));return s?S.makeLocator(S.parseIdent(s.name),s.reference):null}makeInstaller(e){return new Cf(e)}},Cf=class{constructor(e){this.opts=e;this.mode="strict";this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}getCustomDataKey(){return JSON.stringify({name:"PnpInstaller",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,r){let i=S.stringifyIdent(e),n=e.reference,s=!!this.opts.project.tryWorkspaceByLocator(e),o=S.isVirtualLocator(e),a=e.peerDependencies.size>0&&!o,l=!a&&!s,c=!a&&e.linkType!==gt.SOFT,u,g;if(l||c){let B=o?S.devirtualizeLocator(e):e;u=this.customData.store.get(B.locatorHash),typeof u=="undefined"&&(u=await h6e(r),e.linkType===gt.HARD&&this.customData.store.set(B.locatorHash,u)),u.manifest.type==="module"&&(this.isESMLoaderRequired=!0),g=this.opts.project.getDependencyMeta(B,e.version)}let f=l?Z0(e,u,g,{configuration:this.opts.project.configuration,report:this.opts.report}):[],h=c?await this.unplugPackageIfNeeded(e,u,r,g):r.packageFs;if(v.isAbsolute(r.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${r.prefixPath}) to be relative to the parent`);let p=v.resolve(h.getRealPath(),r.prefixPath),d=sT(this.opts.project.cwd,p),m=new Map,I=new Set;if(o){for(let B of e.peerDependencies.values())m.set(S.stringifyIdent(B),null),I.add(S.stringifyIdent(B));if(!s){let B=S.devirtualizeLocator(e);this.virtualTemplates.set(B.locatorHash,{location:sT(this.opts.project.cwd,Pr.resolveVirtual(p)),locator:B})}}return de.getMapWithDefault(this.packageRegistry,i).set(n,{packageLocation:d,packageDependencies:m,packagePeers:I,linkType:e.linkType,discardFromLookup:r.discardFromLookup||!1}),{packageLocation:p,buildDirective:f.length>0?f:null}}async attachInternalDependencies(e,r){let i=this.getPackageInformation(e);for(let[n,s]of r){let o=S.areIdentsEqual(n,s)?s.reference:[S.stringifyIdent(s),s.reference];i.packageDependencies.set(S.stringifyIdent(n),o)}}async attachExternalDependents(e,r){for(let i of r)this.getDiskInformation(i).packageDependencies.set(S.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;let e=qA(this.opts.project);if(T.existsSync(e.cjsLegacy)&&(this.opts.report.reportWarning(z.UNNAMED,`Removing the old ${ue.pretty(this.opts.project.configuration,wt.pnpJs,ue.Type.PATH)} file. You might need to manually update existing references to reference the new ${ue.pretty(this.opts.project.configuration,wt.pnpCjs,ue.Type.PATH)} file. If you use Editor SDKs, you'll have to rerun ${ue.pretty(this.opts.project.configuration,"yarn sdks",ue.Type.CODE)}.`),await T.removePromise(e.cjsLegacy)),this.isEsmEnabled()||await T.removePromise(e.esmLoader),this.opts.project.configuration.get("nodeLinker")!=="pnp"){await T.removePromise(e.cjs),await T.removePromise(this.opts.project.configuration.get("pnpDataPath")),await T.removePromise(e.esmLoader);return}for(let{locator:u,location:g}of this.virtualTemplates.values())de.getMapWithDefault(this.packageRegistry,S.stringifyIdent(u)).set(u.reference,{packageLocation:g,packageDependencies:new Map,packagePeers:new Set,linkType:gt.SOFT,discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let r=this.opts.project.configuration.get("pnpFallbackMode"),i=this.opts.project.workspaces.map(({anchoredLocator:u})=>({name:S.stringifyIdent(u),reference:u.reference})),n=r!=="none",s=[],o=new Map,a=de.buildIgnorePattern([".yarn/sdks/**",...this.opts.project.configuration.get("pnpIgnorePatterns")]),l=this.packageRegistry,c=this.opts.project.configuration.get("pnpShebang");if(r==="dependencies-only")for(let u of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(u)&&s.push({name:S.stringifyIdent(u),reference:u.reference});return await this.finalizeInstallWithPnp({dependencyTreeRoots:i,enableTopLevelFallback:n,fallbackExclusionList:s,fallbackPool:o,ignorePattern:a,packageRegistry:l,shebang:c}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has("pnpEnableEsmLoader"))return this.opts.project.configuration.get("pnpEnableEsmLoader");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type==="module")return!0;return!1}async finalizeInstallWithPnp(e){let r=qA(this.opts.project),i=this.opts.project.configuration.get("pnpDataPath"),n=await this.locateNodeModules(e.ignorePattern);if(n.length>0){this.opts.report.reportWarning(z.DANGEROUS_NODE_MODULES,"One or more node_modules have been detected and will be removed. This operation may take some time.");for(let o of n)await T.removePromise(o)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get("pnpEnableInlining")){let o=_le(e);await T.changeFilePromise(r.cjs,o,{automaticNewlines:!0,mode:493}),await T.removePromise(i)}else{let o=v.relative(v.dirname(r.cjs),i),{dataFile:a,loaderFile:l}=Xle(_(P({},e),{dataLocation:o}));await T.changeFilePromise(r.cjs,l,{automaticNewlines:!0,mode:493}),await T.changeFilePromise(i,a,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(z.UNNAMED,"ESM support for PnP uses the experimental loader API and is therefore experimental"),await T.changeFilePromise(r.esmLoader,(0,tT.default)(),{automaticNewlines:!0,mode:420}));let s=this.opts.project.configuration.get("pnpUnpluggedFolder");if(this.unpluggedPaths.size===0)await T.removePromise(s);else for(let o of await T.readdirPromise(s)){let a=v.resolve(s,o);this.unpluggedPaths.has(a)||await T.removePromise(a)}}async locateNodeModules(e){let r=[],i=e?new RegExp(e):null;for(let n of this.opts.project.workspaces){let s=v.join(n.cwd,"node_modules");if(i&&i.test(v.relative(this.opts.project.cwd,n.cwd))||!T.existsSync(s))continue;let o=await T.readdirPromise(s,{withFileTypes:!0}),a=o.filter(l=>!l.isDirectory()||l.name===".bin"||!l.name.startsWith("."));if(a.length===o.length)r.push(s);else for(let l of a)r.push(v.join(s,l.name))}return r}async unplugPackageIfNeeded(e,r,i,n){return this.shouldBeUnplugged(e,r,n)?this.unplugPackage(e,i):i.packageFs}shouldBeUnplugged(e,r,i){return typeof i.unplugged!="undefined"?i.unplugged:f6e.has(e.identHash)||e.conditions!=null?!0:r.manifest.preferUnplugged!==null?r.manifest.preferUnplugged:!!(Z0(e,r,i,{configuration:this.opts.project.configuration}).length>0||r.misc.extractHint)}async unplugPackage(e,r){let i=ZC(e,{configuration:this.opts.project.configuration});if(this.opts.project.disabledLocators.has(e.locatorHash))return new Xo(i,{baseFs:r.packageFs,pathUtils:v});this.unpluggedPaths.add(i);let n=v.join(i,r.prefixPath,".ready");return await T.existsPromise(n)?new Ft(i):(this.opts.project.storedBuildState.delete(e.locatorHash),await T.mkdirPromise(i,{recursive:!0}),await T.copyPromise(i,Se.dot,{baseFs:r.packageFs,overwrite:!1}),await T.writeFilePromise(n,""),new Ft(i))}getPackageInformation(e){let r=S.stringifyIdent(e),i=e.reference,n=this.packageRegistry.get(r);if(!n)throw new Error(`Assertion failed: The package information store should have been available (for ${S.prettyIdent(this.opts.project.configuration,e)})`);let s=n.get(i);if(!s)throw new Error(`Assertion failed: The package information should have been available (for ${S.prettyLocator(this.opts.project.configuration,e)})`);return s}getDiskInformation(e){let r=de.getMapWithDefault(this.packageRegistry,"@@disk"),i=sT(this.opts.project.cwd,e);return de.getFactoryWithDefault(r,i,()=>({packageLocation:i,packageDependencies:new Map,packagePeers:new Set,linkType:gt.SOFT,discardFromLookup:!1}))}};function sT(t,e){let r=v.relative(t,e);return r.match(/^\.{0,2}\//)||(r=`./${r}`),r.replace(/\/?$/,"/")}async function h6e(t){var i;let e=(i=await Ze.tryFind(t.prefixPath,{baseFs:t.packageFs}))!=null?i:new Ze,r=new Set(["preinstall","install","postinstall"]);for(let n of e.scripts.keys())r.has(n)||e.scripts.delete(n);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:rT(t),hasBindingGyp:iT(t)}}}var ace=ie(Nn());var $C=class extends Be{constructor(){super(...arguments);this.all=Y.Boolean("-A,--all",!1,{description:"Unplug direct dependencies from the entire project"});this.recursive=Y.Boolean("-R,--recursive",!1,{description:"Unplug both direct and transitive dependencies"});this.json=Y.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=Y.Rest()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd),n=await Qt.find(e);if(!i)throw new rt(r.cwd,this.context.cwd);if(e.get("nodeLinker")!=="pnp")throw new me("This command can only be used if the `nodeLinker` option is set to `pnp`");await r.restoreInstallState();let s=new Set(this.patterns),o=this.patterns.map(f=>{let h=S.parseDescriptor(f),p=h.range!=="unknown"?h:S.makeDescriptor(h,"*");if(!qt.validRange(p.range))throw new me(`The range of the descriptor patterns must be a valid semver range (${S.prettyDescriptor(e,p)})`);return d=>{let m=S.stringifyIdent(d);return!ace.default.isMatch(m,S.stringifyIdent(p))||d.version&&!qt.satisfiesWithPrereleases(d.version,p.range)?!1:(s.delete(f),!0)}}),a=()=>{let f=[];for(let h of r.storedPackages.values())!r.tryWorkspaceByLocator(h)&&!S.isVirtualLocator(h)&&o.some(p=>p(h))&&f.push(h);return f},l=f=>{let h=new Set,p=[],d=(m,I)=>{if(!h.has(m.locatorHash)&&(h.add(m.locatorHash),!r.tryWorkspaceByLocator(m)&&o.some(B=>B(m))&&p.push(m),!(I>0&&!this.recursive)))for(let B of m.dependencies.values()){let b=r.storedResolutions.get(B.descriptorHash);if(!b)throw new Error("Assertion failed: The resolution should have been registered");let R=r.storedPackages.get(b);if(!R)throw new Error("Assertion failed: The package should have been registered");d(R,I+1)}};for(let m of f){let I=r.storedPackages.get(m.anchoredLocator.locatorHash);if(!I)throw new Error("Assertion failed: The package should have been registered");d(I,0)}return p},c,u;if(this.all&&this.recursive?(c=a(),u="the project"):this.all?(c=l(r.workspaces),u="any workspace"):(c=l([i]),u="this workspace"),s.size>1)throw new me(`Patterns ${ue.prettyList(e,s,ue.Type.CODE)} don't match any packages referenced by ${u}`);if(s.size>0)throw new me(`Pattern ${ue.prettyList(e,s,ue.Type.CODE)} doesn't match any packages referenced by ${u}`);return c=de.sortMap(c,f=>S.stringifyLocator(f)),(await Fe.start({configuration:e,stdout:this.context.stdout,json:this.json},async f=>{var h;for(let p of c){let d=(h=p.version)!=null?h:"unknown",m=r.topLevelWorkspace.manifest.ensureDependencyMeta(S.makeDescriptor(p,d));m.unplugged=!0,f.reportInfo(z.UNNAMED,`Will unpack ${S.prettyLocator(e,p)} to ${ue.pretty(e,ZC(p,{configuration:e}),ue.Type.PATH)}`),f.reportJson({locator:S.stringifyLocator(p),version:d})}await r.topLevelWorkspace.persistManifest(),f.reportSeparator(),await r.install({cache:n,report:f})})).exitCode()}};$C.paths=[["unplug"]],$C.usage=ye.Usage({description:"force the unpacking of a list of packages",details:"\n This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\n\n A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\n\n Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\n\n By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\n\n This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\n ",examples:[["Unplug the lodash dependency from the active workspace","yarn unplug lodash"],["Unplug all instances of lodash referenced by any workspace","yarn unplug lodash -A"],["Unplug all instances of lodash referenced by the active workspace and its dependencies","yarn unplug lodash -R"],["Unplug all instances of lodash, anywhere","yarn unplug lodash -AR"],["Unplug one specific version of lodash","yarn unplug lodash@1.2.3"],["Unplug all packages with the `@babel` scope","yarn unplug '@babel/*'"],["Unplug all packages (only for testing, not recommended)","yarn unplug -R '*'"]]});var Ace=$C;var qA=t=>({cjs:v.join(t.cwd,wt.pnpCjs),cjsLegacy:v.join(t.cwd,wt.pnpJs),esmLoader:v.join(t.cwd,".pnp.loader.mjs")}),uce=t=>/\s/.test(t)?JSON.stringify(t):t;async function p6e(t,e,r){let i=qA(t),n=`--require ${uce(M.fromPortablePath(i.cjs))}`;if(T.existsSync(i.esmLoader)&&(n=`${n} --experimental-loader ${(0,cce.pathToFileURL)(M.fromPortablePath(i.esmLoader)).href}`),i.cjs.includes(" ")&&lce.default.lt(process.versions.node,"12.0.0"))throw new Error(`Expected the build location to not include spaces when using Node < 12.0.0 (${process.versions.node})`);if(T.existsSync(i.cjs)){let s=e.NODE_OPTIONS||"",o=/\s*--require\s+\S*\.pnp\.c?js\s*/g,a=/\s*--experimental-loader\s+\S*\.pnp\.loader\.mjs\s*/;s=s.replace(o," ").replace(a," ").trim(),s=s?`${n} ${s}`:n,e.NODE_OPTIONS=s}}async function d6e(t,e){let r=qA(t);e(r.cjs),e(r.esmLoader),e(t.configuration.get("pnpDataPath")),e(t.configuration.get("pnpUnpluggedFolder"))}var C6e={hooks:{populateYarnPaths:d6e,setupScriptEnvironment:p6e},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: "pnp", "node-modules"',type:ge.STRING,default:"pnp"},pnpMode:{description:"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.",type:ge.STRING,default:"strict"},pnpShebang:{description:"String to prepend to the generated PnP script",type:ge.STRING,default:"#!/usr/bin/env node"},pnpIgnorePatterns:{description:"Array of glob patterns; files matching them will use the classic resolution",type:ge.STRING,default:[],isArray:!0},pnpEnableEsmLoader:{description:"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.",type:ge.BOOLEAN,default:!1},pnpEnableInlining:{description:"If true, the PnP data will be inlined along with the generated loader",type:ge.BOOLEAN,default:!0},pnpFallbackMode:{description:"If true, the generated PnP loader will follow the top-level fallback rule",type:ge.STRING,default:"dependencies-only"},pnpUnpluggedFolder:{description:"Folder where the unplugged packages must be stored",type:ge.ABSOLUTE_PATH,default:"./.yarn/unplugged"},pnpDataPath:{description:"Path of the file where the PnP data (used by the loader) must be written",type:ge.ABSOLUTE_PATH,default:"./.pnp.data.json"}},linkers:[jc],commands:[Ace]},m6e=C6e;var Cce=ie(dce());var uT=ie(require("crypto")),mce=ie(require("fs")),Ece=1,gi="node_modules",gT=".bin",Ice=".yarn-state.yml",Bi;(function(i){i.CLASSIC="classic",i.HARDLINKS_LOCAL="hardlinks-local",i.HARDLINKS_GLOBAL="hardlinks-global"})(Bi||(Bi={}));var fT=class{constructor(){this.installStateCache=new Map}supportsPackage(e,r){return r.project.configuration.get("nodeLinker")==="node-modules"}async findPackageLocation(e,r){let i=r.project.tryWorkspaceByLocator(e);if(i)return i.cwd;let n=await de.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await hT(r.project,{unrollAliases:!0}));if(n===null)throw new me("Couldn't find the node_modules state file - running an install might help (findPackageLocation)");let s=n.locatorMap.get(S.stringifyLocator(e));if(!s){let a=new me(`Couldn't find ${S.prettyLocator(r.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw a.code="LOCATOR_NOT_INSTALLED",a}let o=r.project.configuration.startingCwd;return s.locations.find(a=>v.contains(o,a))||s.locations[0]}async findPackageLocator(e,r){let i=await de.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await hT(r.project,{unrollAliases:!0}));if(i===null)return null;let{locationRoot:n,segments:s}=$0(v.resolve(e),{skipPrefix:r.project.cwd}),o=i.locationTree.get(n);if(!o)return null;let a=o.locator;for(let l of s){if(o=o.children.get(l),!o)break;a=o.locator||a}return S.parseLocator(a)}makeInstaller(e){return new yce(e)}},yce=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}getCustomDataKey(){return JSON.stringify({name:"NodeModulesInstaller",version:1})}attachCustomData(e){this.customData=e}async installPackage(e,r){var u;let i=v.resolve(r.packageFs.getRealPath(),r.prefixPath),n=this.customData.store.get(e.locatorHash);if(typeof n=="undefined"&&(n=await L6e(e,r),e.linkType===gt.HARD&&this.customData.store.set(e.locatorHash,n)),!Ws.checkAndReportManifestCompatibility(e,"link",{configuration:this.opts.project.configuration,report:this.opts.report}))return{packageLocation:null,buildDirective:null};let s=new Map,o=new Set;s.has(S.stringifyIdent(e))||s.set(S.stringifyIdent(e),e.reference);let a=e;if(S.isVirtualLocator(e)){a=S.devirtualizeLocator(e);for(let g of e.peerDependencies.values())s.set(S.stringifyIdent(g),null),o.add(S.stringifyIdent(g))}let l={packageLocation:`${M.fromPortablePath(i)}/`,packageDependencies:s,packagePeers:o,linkType:e.linkType,discardFromLookup:(u=r.discardFromLookup)!=null?u:!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:n,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:l});let c=r.checksum?r.checksum.substring(r.checksum.indexOf("/")+1):null;return this.realLocatorChecksums.set(a.locatorHash,c),{packageLocation:i,buildDirective:null}}async attachInternalDependencies(e,r){let i=this.localStore.get(e.locatorHash);if(typeof i=="undefined")throw new Error("Assertion failed: Expected information object to have been registered");for(let[n,s]of r){let o=S.areIdentsEqual(n,s)?s.reference:[S.stringifyIdent(s),s.reference];i.pnpNode.packageDependencies.set(S.stringifyIdent(n),o)}}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the node-modules linker")}async finalizeInstall(){if(this.opts.project.configuration.get("nodeLinker")!=="node-modules")return;let e=new Pr({baseFs:new Jn({libzip:await $i(),maxOpenFiles:80,readOnlyArchives:!0})}),r=await hT(this.opts.project),i=this.opts.project.configuration.get("nmMode");(r===null||i!==r.nmMode)&&(this.opts.project.storedBuildState.clear(),r={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:i});let n=new Map(this.opts.project.workspaces.map(f=>{var p,d;let h=this.opts.project.configuration.get("nmHoistingLimits");try{h=de.validateEnum(Sn,(d=(p=f.manifest.installConfig)==null?void 0:p.hoistingLimits)!=null?d:h)}catch(m){let I=S.prettyWorkspace(this.opts.project.configuration,f);this.opts.report.reportWarning(z.INVALID_MANIFEST,`${I}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(Sn).join(", ")}, using default: "${h}"`)}return[f.relativeCwd,h]})),s=new Map(this.opts.project.workspaces.map(f=>{var p,d;let h=this.opts.project.configuration.get("nmSelfReferences");return h=(d=(p=f.manifest.installConfig)==null?void 0:p.selfReferences)!=null?d:h,[f.relativeCwd,h]})),o={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(f,h)=>Array.isArray(h)?{name:h[0],reference:h[1]}:{name:f,reference:h},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(f=>{let h=f.anchoredLocator;return{name:S.stringifyIdent(f.locator),reference:h.reference}}),getPackageInformation:f=>{let h=f.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:S.makeLocator(S.parseIdent(f.name),f.reference),p=this.localStore.get(h.locatorHash);if(typeof p=="undefined")throw new Error("Assertion failed: Expected the package reference to have been registered");return p.pnpNode},findPackageLocator:f=>{let h=this.opts.project.tryWorkspaceByCwd(M.toPortablePath(f));if(h!==null){let p=h.anchoredLocator;return{name:S.stringifyIdent(p),reference:p.reference}}throw new Error("Assertion failed: Unimplemented")},resolveToUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveRequest:()=>{throw new Error("Assertion failed: Unimplemented")},resolveVirtual:f=>M.fromPortablePath(Pr.resolveVirtual(M.toPortablePath(f)))},{tree:a,errors:l,preserveSymlinksRequired:c}=VC(o,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:n,project:this.opts.project,selfReferencesByCwd:s});if(!a){for(let{messageName:f,text:h}of l)this.opts.report.reportError(f,h);return}let u=WL(a);await T6e(r,u,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async f=>{let h=S.parseLocator(f),p=this.localStore.get(h.locatorHash);if(typeof p=="undefined")throw new Error("Assertion failed: Expected the slot to exist");return p.customPackageData.manifest}});let g=[];for(let[f,h]of u.entries()){if(wce(f))continue;let p=S.parseLocator(f),d=this.localStore.get(p.locatorHash);if(typeof d=="undefined")throw new Error("Assertion failed: Expected the slot to exist");if(this.opts.project.tryWorkspaceByLocator(d.pkg))continue;let m=Ws.extractBuildScripts(d.pkg,d.customPackageData,d.dependencyMeta,{configuration:this.opts.project.configuration,report:this.opts.report});m.length!==0&&g.push({buildLocations:h.locations,locatorHash:p.locatorHash,buildDirective:m})}return c&&this.opts.report.reportWarning(z.NM_PRESERVE_SYMLINKS_REQUIRED,`The application uses portals and that's why ${ue.pretty(this.opts.project.configuration,"--preserve-symlinks",ue.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:g}}};async function L6e(t,e){var n;let r=(n=await Ze.tryFind(e.prefixPath,{baseFs:e.packageFs}))!=null?n:new Ze,i=new Set(["preinstall","install","postinstall"]);for(let s of r.scripts.keys())i.has(s)||r.scripts.delete(s);return{manifest:{bin:r.bin,scripts:r.scripts},misc:{extractHint:Ws.getExtractHint(e),hasBindingGyp:Ws.hasBindingGyp(e)}}}async function M6e(t,e,r,i){let n="";n+=`# Warning: This file is automatically generated. Removing it is fine, but will +`,n+=`# cause your node_modules installation to become invalidated. +`,n+=` +`,n+=`__metadata: +`,n+=` version: ${Ece} +`,n+=` nmMode: ${i.value} +`;let s=Array.from(e.keys()).sort(),o=S.stringifyLocator(t.topLevelWorkspace.anchoredLocator);for(let c of s){let u=e.get(c);n+=` +`,n+=`${JSON.stringify(c)}: +`,n+=` locations: +`;for(let g of u.locations){let f=v.contains(t.cwd,g);if(f===null)throw new Error(`Assertion failed: Expected the path to be within the project (${g})`);n+=` - ${JSON.stringify(f)} +`}if(u.aliases.length>0){n+=` aliases: +`;for(let g of u.aliases)n+=` - ${JSON.stringify(g)} +`}if(c===o&&r.size>0){n+=` bin: +`;for(let[g,f]of r){let h=v.contains(t.cwd,g);if(h===null)throw new Error(`Assertion failed: Expected the path to be within the project (${g})`);n+=` ${JSON.stringify(h)}: +`;for(let[p,d]of f){let m=v.relative(v.join(g,gi),d);n+=` ${JSON.stringify(p)}: ${JSON.stringify(m)} +`}}}}let a=t.cwd,l=v.join(a,gi,Ice);await T.changeFilePromise(l,n,{automaticNewlines:!0})}async function hT(t,{unrollAliases:e=!1}={}){let r=t.cwd,i=v.join(r,gi,Ice);if(!T.existsSync(i))return null;let n=Ii(await T.readFilePromise(i,"utf8"));if(n.__metadata.version>Ece)return null;let s=n.__metadata.nmMode||Bi.CLASSIC,o=new Map,a=new Map;delete n.__metadata;for(let[l,c]of Object.entries(n)){let u=c.locations.map(f=>v.join(r,f)),g=c.bin;if(g)for(let[f,h]of Object.entries(g)){let p=v.join(r,M.toPortablePath(f)),d=de.getMapWithDefault(a,p);for(let[m,I]of Object.entries(h))d.set(kr(m),M.toPortablePath([p,gi,I].join(v.delimiter)))}if(o.set(l,{target:Se.dot,linkType:gt.HARD,locations:u,aliases:c.aliases||[]}),e&&c.aliases)for(let f of c.aliases){let{scope:h,name:p}=S.parseLocator(l),d=S.makeLocator(S.makeIdent(h,p),f),m=S.stringifyLocator(d);o.set(m,{target:Se.dot,linkType:gt.HARD,locations:u,aliases:[]})}}return{locatorMap:o,binSymlinks:a,locationTree:Bce(o,{skipPrefix:t.cwd}),nmMode:s}}var Ef=async(t,e)=>{if(t.split(v.sep).indexOf(gi)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${t}`);try{if(!e.innerLoop&&(await T.lstatPromise(t)).isSymbolicLink()){await T.unlinkPromise(t);return}let r=await T.readdirPromise(t,{withFileTypes:!0});for(let i of r){let n=v.join(t,kr(i.name));i.isDirectory()?(i.name!==gi||e&&e.innerLoop)&&await Ef(n,{innerLoop:!0,contentsOnly:!1}):await T.unlinkPromise(n)}e.contentsOnly||await T.rmdirPromise(t)}catch(r){if(r.code!=="ENOENT"&&r.code!=="ENOTEMPTY")throw r}},Qce=4,$0=(t,{skipPrefix:e})=>{let r=v.contains(e,t);if(r===null)throw new Error(`Assertion failed: Writing attempt prevented to ${t} which is outside project root: ${e}`);let i=r.split(v.sep).filter(l=>l!==""),n=i.indexOf(gi),s=i.slice(0,n).join(v.sep),o=v.join(e,s),a=i.slice(n);return{locationRoot:o,segments:a}},Bce=(t,{skipPrefix:e})=>{let r=new Map;if(t===null)return r;let i=()=>({children:new Map,linkType:gt.HARD});for(let[n,s]of t.entries()){if(s.linkType===gt.SOFT&&v.contains(e,s.target)!==null){let a=de.getFactoryWithDefault(r,s.target,i);a.locator=n,a.linkType=s.linkType}for(let o of s.locations){let{locationRoot:a,segments:l}=$0(o,{skipPrefix:e}),c=de.getFactoryWithDefault(r,a,i);for(let u=0;u{let r;try{process.platform==="win32"&&(r=await T.lstatPromise(t))}catch(i){}process.platform=="win32"&&(!r||r.isDirectory())?await T.symlinkPromise(t,e,"junction"):await T.symlinkPromise(v.relative(v.dirname(e),t),e)};async function bce(t,e,r){let i=v.join(t,kr(`${uT.default.randomBytes(16).toString("hex")}.tmp`));try{await T.writeFilePromise(i,r);try{await T.linkPromise(i,e)}catch(n){}}finally{await T.unlinkPromise(i)}}async function O6e({srcPath:t,dstPath:e,srcMode:r,globalHardlinksStore:i,baseFs:n,nmMode:s,digest:o}){if(s.value===Bi.HARDLINKS_GLOBAL&&i&&o){let l=v.join(i,o.substring(0,2),`${o.substring(2)}.dat`),c;try{if(await mn.checksumFile(l,{baseFs:T,algorithm:"sha1"})!==o){let g=v.join(i,kr(`${uT.default.randomBytes(16).toString("hex")}.tmp`));await T.renamePromise(l,g);let f=await n.readFilePromise(t);await T.writeFilePromise(g,f);try{await T.linkPromise(g,l),await T.unlinkPromise(g)}catch(h){}}await T.linkPromise(l,e),c=!0}catch(u){c=!1}if(!c){let u=await n.readFilePromise(t);await bce(i,l,u);try{await T.linkPromise(l,e)}catch(g){g&&g.code&&g.code=="EXDEV"&&(s.value=Bi.HARDLINKS_LOCAL,await n.copyFilePromise(t,e))}}}else await n.copyFilePromise(t,e);let a=r&511;a!==420&&await T.chmodPromise(e,a)}var JA;(function(i){i.FILE="file",i.DIRECTORY="directory",i.SYMLINK="symlink"})(JA||(JA={}));var K6e=async(t,e,{baseFs:r,globalHardlinksStore:i,nmMode:n,packageChecksum:s})=>{await T.mkdirPromise(t,{recursive:!0});let o=async(l=Se.dot)=>{let c=v.join(e,l),u=await r.readdirPromise(c,{withFileTypes:!0}),g=new Map;for(let f of u){let h=v.join(l,f.name),p,d=v.join(c,f.name);if(f.isFile()){if(p={kind:JA.FILE,mode:(await r.lstatPromise(d)).mode},n.value===Bi.HARDLINKS_GLOBAL){let m=await mn.checksumFile(d,{baseFs:r,algorithm:"sha1"});p.digest=m}}else if(f.isDirectory())p={kind:JA.DIRECTORY};else if(f.isSymbolicLink())p={kind:JA.SYMLINK,symlinkTo:await r.readlinkPromise(d)};else throw new Error(`Unsupported file type (file: ${d}, mode: 0o${await r.statSync(d).mode.toString(8).padStart(6,"0")})`);if(g.set(h,p),f.isDirectory()&&h!==gi){let m=await o(h);for(let[I,B]of m)g.set(I,B)}}return g},a;if(n.value===Bi.HARDLINKS_GLOBAL&&i&&s){let l=v.join(i,s.substring(0,2),`${s.substring(2)}.json`);try{a=new Map(Object.entries(JSON.parse(await T.readFilePromise(l,"utf8"))))}catch(c){a=await o(),await bce(i,l,Buffer.from(JSON.stringify(Object.fromEntries(a))))}}else a=await o();for(let[l,c]of a){let u=v.join(e,l),g=v.join(t,l);c.kind===JA.DIRECTORY?await T.mkdirPromise(g,{recursive:!0}):c.kind===JA.FILE?await O6e({srcPath:u,dstPath:g,srcMode:c.mode,digest:c.digest,nmMode:n,baseFs:r,globalHardlinksStore:i}):c.kind===JA.SYMLINK&&await pT(v.resolve(v.dirname(g),c.symlinkTo),g)}};function U6e(t,e){let r=new Map([...t]),i=new Map([...e]);for(let[n,s]of t){let o=v.join(n,gi);if(!T.existsSync(o)){s.children.delete(gi);for(let a of i.keys())v.contains(o,a)!==null&&i.delete(a)}}return{locationTree:r,binSymlinks:i}}function wce(t){let e=S.parseDescriptor(t);return S.isVirtualDescriptor(e)&&(e=S.devirtualizeDescriptor(e)),e.range.startsWith("link:")}async function H6e(t,e,r,{loadManifest:i}){let n=new Map;for(let[a,{locations:l}]of t){let c=wce(a)?null:await i(a,l[0]),u=new Map;if(c)for(let[g,f]of c.bin){let h=v.join(l[0],f);f!==""&&T.existsSync(h)&&u.set(g,f)}n.set(a,u)}let s=new Map,o=(a,l,c)=>{let u=new Map,g=v.contains(r,a);if(c.locator&&g!==null){let f=n.get(c.locator);for(let[h,p]of f){let d=v.join(a,M.toPortablePath(p));u.set(kr(h),d)}for(let[h,p]of c.children){let d=v.join(a,h),m=o(d,d,p);m.size>0&&s.set(a,new Map([...s.get(a)||new Map,...m]))}}else for(let[f,h]of c.children){let p=o(v.join(a,f),l,h);for(let[d,m]of p)u.set(d,m)}return u};for(let[a,l]of e){let c=o(a,a,l);c.size>0&&s.set(a,new Map([...s.get(a)||new Map,...c]))}return s}var vce=(t,e)=>{if(!t||!e)return t===e;let r=S.parseLocator(t);S.isVirtualLocator(r)&&(r=S.devirtualizeLocator(r));let i=S.parseLocator(e);return S.isVirtualLocator(i)&&(i=S.devirtualizeLocator(i)),S.areLocatorsEqual(r,i)};function dT(t){return v.join(t.get("globalFolder"),"store")}async function T6e(t,e,{baseFs:r,project:i,report:n,loadManifest:s,realLocatorChecksums:o}){let a=v.join(i.cwd,gi),{locationTree:l,binSymlinks:c}=U6e(t.locationTree,t.binSymlinks),u=Bce(e,{skipPrefix:i.cwd}),g=[],f=async({srcDir:L,dstDir:K,linkType:J,globalHardlinksStore:ne,nmMode:q,packageChecksum:A})=>{let V=(async()=>{try{J===gt.SOFT?(await T.mkdirPromise(v.dirname(K),{recursive:!0}),await pT(v.resolve(L),K)):await K6e(K,L,{baseFs:r,globalHardlinksStore:ne,nmMode:q,packageChecksum:A})}catch(W){throw W.message=`While persisting ${L} -> ${K} ${W.message}`,W}finally{B.tick()}})().then(()=>g.splice(g.indexOf(V),1));g.push(V),g.length>Qce&&await Promise.race(g)},h=async(L,K,J)=>{let ne=(async()=>{let q=async(A,V,W)=>{try{W.innerLoop||await T.mkdirPromise(V,{recursive:!0});let X=await T.readdirPromise(A,{withFileTypes:!0});for(let F of X){if(!W.innerLoop&&F.name===gT)continue;let D=v.join(A,F.name),he=v.join(V,F.name);F.isDirectory()?(F.name!==gi||W&&W.innerLoop)&&(await T.mkdirPromise(he,{recursive:!0}),await q(D,he,_(P({},W),{innerLoop:!0}))):H.value===Bi.HARDLINKS_LOCAL||H.value===Bi.HARDLINKS_GLOBAL?await T.linkPromise(D,he):await T.copyFilePromise(D,he,mce.default.constants.COPYFILE_FICLONE)}}catch(X){throw W.innerLoop||(X.message=`While cloning ${A} -> ${V} ${X.message}`),X}finally{W.innerLoop||B.tick()}};await q(L,K,J)})().then(()=>g.splice(g.indexOf(ne),1));g.push(ne),g.length>Qce&&await Promise.race(g)},p=async(L,K,J)=>{if(!J)K.children.has(gi)&&await Ef(v.join(L,gi),{contentsOnly:!1}),await Ef(L,{contentsOnly:L===a});else for(let[ne,q]of K.children){let A=J.children.get(ne);await p(v.join(L,ne),q,A)}};for(let[L,K]of l){let J=u.get(L);for(let[ne,q]of K.children){if(ne===".")continue;let A=J&&J.children.get(ne);await p(v.join(L,ne),q,A)}}let d=async(L,K,J)=>{if(!J)K.children.has(gi)&&await Ef(v.join(L,gi),{contentsOnly:!0}),await Ef(L,{contentsOnly:K.linkType===gt.HARD});else{vce(K.locator,J.locator)||await Ef(L,{contentsOnly:K.linkType===gt.HARD});for(let[ne,q]of K.children){let A=J.children.get(ne);await d(v.join(L,ne),q,A)}}};for(let[L,K]of u){let J=l.get(L);for(let[ne,q]of K.children){if(ne===".")continue;let A=J&&J.children.get(ne);await d(v.join(L,ne),q,A)}}let m=new Map,I=[];for(let[L,{locations:K}]of t.locatorMap.entries())for(let J of K){let{locationRoot:ne,segments:q}=$0(J,{skipPrefix:i.cwd}),A=u.get(ne),V=ne;if(A){for(let W of q)if(V=v.join(V,W),A=A.children.get(W),!A)break;if(A){let W=vce(A.locator,L),X=e.get(A.locator),F=X.target,D=V,he=X.linkType;if(W)m.has(F)||m.set(F,D);else if(F!==D){let pe=S.parseLocator(A.locator);S.isVirtualLocator(pe)&&(pe=S.devirtualizeLocator(pe)),I.push({srcDir:F,dstDir:D,linkType:he,realLocatorHash:pe.locatorHash})}}}}for(let[L,{locations:K}]of e.entries())for(let J of K){let{locationRoot:ne,segments:q}=$0(J,{skipPrefix:i.cwd}),A=l.get(ne),V=u.get(ne),W=ne,X=e.get(L),F=S.parseLocator(L);S.isVirtualLocator(F)&&(F=S.devirtualizeLocator(F));let D=F.locatorHash,he=X.target,pe=J;if(he===pe)continue;let Ne=X.linkType;for(let Pe of q)V=V.children.get(Pe);if(!A)I.push({srcDir:he,dstDir:pe,linkType:Ne,realLocatorHash:D});else for(let Pe of q)if(W=v.join(W,Pe),A=A.children.get(Pe),!A){I.push({srcDir:he,dstDir:pe,linkType:Ne,realLocatorHash:D});break}}let B=Xi.progressViaCounter(I.length),b=n.reportProgress(B),R=i.configuration.get("nmMode"),H={value:R};try{let L=H.value===Bi.HARDLINKS_GLOBAL?`${dT(i.configuration)}/v1`:null;if(L&&!await T.existsPromise(L)){await T.mkdirpPromise(L);for(let J=0;J<256;J++)await T.mkdirPromise(v.join(L,J.toString(16).padStart(2,"0")))}for(let J of I)(J.linkType===gt.SOFT||!m.has(J.srcDir))&&(m.set(J.srcDir,J.dstDir),await f(_(P({},J),{globalHardlinksStore:L,nmMode:H,packageChecksum:o.get(J.realLocatorHash)||null})));await Promise.all(g),g.length=0;for(let J of I){let ne=m.get(J.srcDir);J.linkType!==gt.SOFT&&J.dstDir!==ne&&await h(ne,J.dstDir,{nmMode:H})}await Promise.all(g),await T.mkdirPromise(a,{recursive:!0});let K=await H6e(e,u,i.cwd,{loadManifest:s});await G6e(c,K,i.cwd),await M6e(i,e,K,H),R==Bi.HARDLINKS_GLOBAL&&H.value==Bi.HARDLINKS_LOCAL&&n.reportWarningOnce(z.NM_HARDLINKS_MODE_DOWNGRADED,"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices")}finally{b.stop()}}async function G6e(t,e,r){for(let i of t.keys()){if(v.contains(r,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);if(!e.has(i)){let n=v.join(i,gi,gT);await T.removePromise(n)}}for(let[i,n]of e){if(v.contains(r,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);let s=v.join(i,gi,gT),o=t.get(i)||new Map;await T.mkdirPromise(s,{recursive:!0});for(let a of o.keys())n.has(a)||(await T.removePromise(v.join(s,a)),process.platform==="win32"&&await T.removePromise(v.join(s,kr(`${a}.cmd`))));for(let[a,l]of n){let c=o.get(a),u=v.join(s,a);c!==l&&(process.platform==="win32"?await(0,Cce.default)(M.fromPortablePath(l),M.fromPortablePath(u),{createPwshFile:!1}):(await T.removePromise(u),await pT(l,u),v.contains(r,await T.realpathPromise(l))!==null&&await T.chmodPromise(l,493)))}}}var CT=class extends jc{constructor(){super(...arguments);this.mode="loose"}makeInstaller(e){return new Sce(e)}},Sce=class extends Cf{constructor(){super(...arguments);this.mode="loose"}async transformPnpSettings(e){let r=new Pr({baseFs:new Jn({libzip:await $i(),maxOpenFiles:80,readOnlyArchives:!0})}),i=ice(e,this.opts.project.cwd,r),{tree:n,errors:s}=VC(i,{pnpifyFs:!1,project:this.opts.project});if(!n){for(let{messageName:u,text:g}of s)this.opts.report.reportError(u,g);return}let o=new Map;e.fallbackPool=o;let a=(u,g)=>{let f=S.parseLocator(g.locator),h=S.stringifyIdent(f);h===u?o.set(u,f.reference):o.set(u,[h,f.reference])},l=v.join(this.opts.project.cwd,wt.nodeModules),c=n.get(l);if(typeof c!="undefined"){if("target"in c)throw new Error("Assertion failed: Expected the root junction point to be a directory");for(let u of c.dirList){let g=v.join(l,u),f=n.get(g);if(typeof f=="undefined")throw new Error("Assertion failed: Expected the child to have been registered");if("target"in f)a(u,f);else for(let h of f.dirList){let p=v.join(g,h),d=n.get(p);if(typeof d=="undefined")throw new Error("Assertion failed: Expected the subchild to have been registered");if("target"in d)a(`${u}/${h}`,d);else throw new Error("Assertion failed: Expected the leaf junction to be a package")}}}}};var j6e={hooks:{cleanGlobalArtifacts:async t=>{let e=dT(t);await T.removePromise(e)}},configuration:{nmHoistingLimits:{description:"Prevent packages to be hoisted past specific levels",type:ge.STRING,values:[Sn.WORKSPACES,Sn.DEPENDENCIES,Sn.NONE],default:Sn.NONE},nmMode:{description:'If set to "hardlinks-local" Yarn will utilize hardlinks to reduce disk space consumption inside "node_modules" directories. With "hardlinks-global" Yarn will use global content addressable storage to reduce "node_modules" size across all the projects using this option.',type:ge.STRING,values:[Bi.CLASSIC,Bi.HARDLINKS_LOCAL,Bi.HARDLINKS_GLOBAL],default:Bi.CLASSIC},nmSelfReferences:{description:"If set to 'false' the workspace will not be allowed to require itself and corresponding self-referencing symlink will not be created",type:ge.BOOLEAN,default:!0}},linkers:[fT,CT]},Y6e=j6e;var yM={};it(yM,{default:()=>Z7e,npmConfigUtils:()=>gr,npmHttpUtils:()=>Lt,npmPublishUtils:()=>Rf});var Rce=ie(Or());var ir="npm:";var Lt={};it(Lt,{AuthType:()=>jn,customPackageError:()=>W6e,del:()=>_6e,get:()=>zs,getIdentUrl:()=>zA,handleInvalidAuthenticationError:()=>WA,post:()=>z6e,put:()=>V6e});var Pce=ie(aC()),Dce=ie(require("url"));var gr={};it(gr,{RegistryType:()=>ja,getAuditRegistry:()=>q6e,getAuthConfiguration:()=>IT,getDefaultRegistry:()=>eQ,getPublishRegistry:()=>xce,getRegistryConfiguration:()=>kce,getScopeConfiguration:()=>ET,getScopeRegistry:()=>Ya,normalizeRegistry:()=>To});var ja;(function(i){i.AUDIT_REGISTRY="npmAuditRegistry",i.FETCH_REGISTRY="npmRegistryServer",i.PUBLISH_REGISTRY="npmPublishRegistry"})(ja||(ja={}));function To(t){return t.replace(/\/$/,"")}function q6e(t,{configuration:e}){let r=e.get(ja.AUDIT_REGISTRY);return r!==null?To(r):xce(t,{configuration:e})}function xce(t,{configuration:e}){var r;return((r=t.publishConfig)==null?void 0:r.registry)?To(t.publishConfig.registry):t.name?Ya(t.name.scope,{configuration:e,type:ja.PUBLISH_REGISTRY}):eQ({configuration:e,type:ja.PUBLISH_REGISTRY})}function Ya(t,{configuration:e,type:r=ja.FETCH_REGISTRY}){let i=ET(t,{configuration:e});if(i===null)return eQ({configuration:e,type:r});let n=i.get(r);return n===null?eQ({configuration:e,type:r}):To(n)}function eQ({configuration:t,type:e=ja.FETCH_REGISTRY}){let r=t.get(e);return To(r!==null?r:t.get(ja.FETCH_REGISTRY))}function kce(t,{configuration:e}){let r=e.get("npmRegistries"),i=To(t),n=r.get(i);if(typeof n!="undefined")return n;let s=r.get(i.replace(/^[a-z]+:/,""));return typeof s!="undefined"?s:null}function ET(t,{configuration:e}){if(t===null)return null;let i=e.get("npmScopes").get(t);return i||null}function IT(t,{configuration:e,ident:r}){let i=r&&ET(r.scope,{configuration:e});return(i==null?void 0:i.get("npmAuthIdent"))||(i==null?void 0:i.get("npmAuthToken"))?i:kce(t,{configuration:e})||e}var jn;(function(n){n[n.NO_AUTH=0]="NO_AUTH",n[n.BEST_EFFORT=1]="BEST_EFFORT",n[n.CONFIGURATION=2]="CONFIGURATION",n[n.ALWAYS_AUTH=3]="ALWAYS_AUTH"})(jn||(jn={}));async function WA(t,{attemptedAs:e,registry:r,headers:i,configuration:n}){var s,o;if(((s=t.originalError)==null?void 0:s.name)==="HTTPError"&&((o=t.originalError)==null?void 0:o.response.statusCode)===401)throw new nt(z.AUTHENTICATION_INVALID,`Invalid authentication (${typeof e!="string"?`as ${await J6e(r,i,{configuration:n})}`:`attempted as ${e}`})`)}function W6e(t){var e;return((e=t.response)==null?void 0:e.statusCode)===404?"Package not found":null}function zA(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}async function zs(t,a){var l=a,{configuration:e,headers:r,ident:i,authType:n,registry:s}=l,o=qr(l,["configuration","headers","ident","authType","registry"]);if(i&&typeof s=="undefined"&&(s=Ya(i.scope,{configuration:e})),i&&i.scope&&typeof n=="undefined"&&(n=1),typeof s!="string")throw new Error("Assertion failed: The registry should be a string");let c=await tQ(s,{authType:n,configuration:e,ident:i});c&&(r=_(P({},r),{authorization:c}));try{return await Zt.get(t.charAt(0)==="/"?`${s}${t}`:t,P({configuration:e,headers:r},o))}catch(u){throw await WA(u,{registry:s,configuration:e,headers:r}),u}}async function z6e(t,e,c){var u=c,{attemptedAs:r,configuration:i,headers:n,ident:s,authType:o=3,registry:a}=u,l=qr(u,["attemptedAs","configuration","headers","ident","authType","registry"]);if(s&&typeof a=="undefined"&&(a=Ya(s.scope,{configuration:i})),typeof a!="string")throw new Error("Assertion failed: The registry should be a string");let g=await tQ(a,{authType:o,configuration:i,ident:s});g&&(n=_(P({},n),{authorization:g}));try{return await Zt.post(a+t,e,P({configuration:i,headers:n},l))}catch(f){if(!wT(f))throw await WA(f,{attemptedAs:r,registry:a,configuration:i,headers:n}),f;let h=await yT(),p=P(P({},n),BT(h));try{return await Zt.post(`${a}${t}`,e,P({configuration:i,headers:p},l))}catch(d){throw await WA(d,{attemptedAs:r,registry:a,configuration:i,headers:n}),d}}}async function V6e(t,e,c){var u=c,{attemptedAs:r,configuration:i,headers:n,ident:s,authType:o=3,registry:a}=u,l=qr(u,["attemptedAs","configuration","headers","ident","authType","registry"]);if(s&&typeof a=="undefined"&&(a=Ya(s.scope,{configuration:i})),typeof a!="string")throw new Error("Assertion failed: The registry should be a string");let g=await tQ(a,{authType:o,configuration:i,ident:s});g&&(n=_(P({},n),{authorization:g}));try{return await Zt.put(a+t,e,P({configuration:i,headers:n},l))}catch(f){if(!wT(f))throw await WA(f,{attemptedAs:r,registry:a,configuration:i,headers:n}),f;let h=await yT(),p=P(P({},n),BT(h));try{return await Zt.put(`${a}${t}`,e,P({configuration:i,headers:p},l))}catch(d){throw await WA(d,{attemptedAs:r,registry:a,configuration:i,headers:n}),d}}}async function _6e(t,l){var c=l,{attemptedAs:e,configuration:r,headers:i,ident:n,authType:s=3,registry:o}=c,a=qr(c,["attemptedAs","configuration","headers","ident","authType","registry"]);if(n&&typeof o=="undefined"&&(o=Ya(n.scope,{configuration:r})),typeof o!="string")throw new Error("Assertion failed: The registry should be a string");let u=await tQ(o,{authType:s,configuration:r,ident:n});u&&(i=_(P({},i),{authorization:u}));try{return await Zt.del(o+t,P({configuration:r,headers:i},a))}catch(g){if(!wT(g))throw await WA(g,{attemptedAs:e,registry:o,configuration:r,headers:i}),g;let f=await yT(),h=P(P({},i),BT(f));try{return await Zt.del(`${o}${t}`,P({configuration:r,headers:h},a))}catch(p){throw await WA(p,{attemptedAs:e,registry:o,configuration:r,headers:i}),p}}}async function tQ(t,{authType:e=2,configuration:r,ident:i}){let n=IT(t,{configuration:r,ident:i}),s=X6e(n,e);if(!s)return null;let o=await r.reduceHook(a=>a.getNpmAuthenticationHeader,void 0,t,{configuration:r,ident:i});if(o)return o;if(n.get("npmAuthToken"))return`Bearer ${n.get("npmAuthToken")}`;if(n.get("npmAuthIdent")){let a=n.get("npmAuthIdent");return a.includes(":")?`Basic ${Buffer.from(a).toString("base64")}`:`Basic ${a}`}if(s&&e!==1)throw new nt(z.AUTHENTICATION_NOT_FOUND,"No authentication configured for request");return null}function X6e(t,e){switch(e){case 2:return t.get("npmAlwaysAuth");case 1:case 3:return!0;case 0:return!1;default:throw new Error("Unreachable")}}async function J6e(t,e,{configuration:r}){var i;if(typeof e=="undefined"||typeof e.authorization=="undefined")return"an anonymous user";try{return(i=(await Zt.get(new Dce.URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username)!=null?i:"an unknown user"}catch{return"an unknown user"}}async function yT(){if(process.env.TEST_ENV)return process.env.TEST_NPM_2FA_TOKEN||"";let{otp:t}=await(0,Pce.prompt)({type:"password",name:"otp",message:"One-time password:",required:!0,onCancel:()=>process.exit(130)});return t}function wT(t){var e,r;if(((e=t.originalError)==null?void 0:e.name)!=="HTTPError")return!1;try{return((r=t.originalError)==null?void 0:r.response.headers["www-authenticate"].split(/,\s*/).map(n=>n.toLowerCase())).includes("otp")}catch(i){return!1}}function BT(t){return{["npm-otp"]:t}}var QT=class{supports(e,r){if(!e.reference.startsWith(ir))return!1;let{selector:i,params:n}=S.parseRange(e.reference);return!(!Rce.default.valid(i)||n===null||typeof n.__archiveUrl!="string")}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,P({onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${S.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),skipIntegrityCheck:r.skipIntegrityCheck},r.cacheOptions));return{packageFs:n,releaseFs:s,prefixPath:S.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,r){let{params:i}=S.parseRange(e.reference);if(i===null||typeof i.__archiveUrl!="string")throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");let n=await zs(i.__archiveUrl,{configuration:r.project.configuration,ident:e});return await Ai.convertToZip(n,{compressionLevel:r.project.configuration.get("compressionLevel"),prefixPath:S.getIdentVendorPath(e),stripComponents:1})}};var bT=class{supportsDescriptor(e,r){return!(!e.range.startsWith(ir)||!S.tryParseDescriptor(e.range.slice(ir.length),!0))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){let i=S.parseDescriptor(e.range.slice(ir.length),!0);return r.resolver.getResolutionDependencies(i,r)}async getCandidates(e,r,i){let n=S.parseDescriptor(e.range.slice(ir.length),!0);return await i.resolver.getCandidates(n,r,i)}async getSatisfying(e,r,i){let n=S.parseDescriptor(e.range.slice(ir.length),!0);return i.resolver.getSatisfying(n,r,i)}resolve(e,r){throw new Error("Unreachable")}};var vT=ie(Or()),Fce=ie(require("url"));var Vs=class{supports(e,r){if(!e.reference.startsWith(ir))return!1;let i=new Fce.URL(e.reference);return!(!vT.default.valid(i.pathname)||i.searchParams.has("__archiveUrl"))}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,P({onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${S.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,r),skipIntegrityCheck:r.skipIntegrityCheck},r.cacheOptions));return{packageFs:n,releaseFs:s,prefixPath:S.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,r){let i;try{i=await zs(Vs.getLocatorUrl(e),{configuration:r.project.configuration,ident:e})}catch(n){i=await zs(Vs.getLocatorUrl(e).replace(/%2f/g,"/"),{configuration:r.project.configuration,ident:e})}return await Ai.convertToZip(i,{compressionLevel:r.project.configuration.get("compressionLevel"),prefixPath:S.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,r,{configuration:i}){let n=Ya(e.scope,{configuration:i}),s=Vs.getLocatorUrl(e);return r=r.replace(/^https?:(\/\/(?:[^/]+\.)?npmjs.org(?:$|\/))/,"https:$1"),n=n.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r=r.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r===n+s||r===n+s.replace(/%2f/g,"/")}static getLocatorUrl(e){let r=vT.default.clean(e.reference.slice(ir.length));if(r===null)throw new nt(z.RESOLVER_NOT_FOUND,"The npm semver resolver got selected, but the version isn't semver");return`${zA(e)}/-/${e.name}-${r}.tgz`}};var ST=ie(Or());var rQ=S.makeIdent(null,"node-gyp"),Z6e=/\b(node-gyp|prebuild-install)\b/,xT=class{supportsDescriptor(e,r){return e.range.startsWith(ir)?!!qt.validRange(e.range.slice(ir.length)):!1}supportsLocator(e,r){if(!e.reference.startsWith(ir))return!1;let{selector:i}=S.parseRange(e.reference);return!!ST.default.valid(i)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=qt.validRange(e.range.slice(ir.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(ir.length)}`);let s=await zs(zA(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0}),o=de.mapAndFilter(Object.keys(s.versions),c=>{try{let u=new qt.SemVer(c);if(n.test(u))return u}catch{}return de.mapAndFilter.skip}),a=o.filter(c=>!s.versions[c.raw].deprecated),l=a.length>0?a:o;return l.sort((c,u)=>-c.compare(u)),l.map(c=>{let u=S.makeLocator(e,`${ir}${c.raw}`),g=s.versions[c.raw].dist.tarball;return Vs.isConventionalTarballUrl(u,g,{configuration:i.project.configuration})?u:S.bindLocator(u,{__archiveUrl:g})})}async getSatisfying(e,r,i){let n=qt.validRange(e.range.slice(ir.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(ir.length)}`);return de.mapAndFilter(r,s=>{try{let{selector:o}=S.parseRange(s,{requireProtocol:ir}),a=new qt.SemVer(o);if(n.test(a))return{reference:s,version:a}}catch{}return de.mapAndFilter.skip}).sort((s,o)=>-s.version.compare(o.version)).map(({reference:s})=>S.makeLocator(e,s))}async resolve(e,r){let{selector:i}=S.parseRange(e.reference),n=ST.default.clean(i);if(n===null)throw new nt(z.RESOLVER_NOT_FOUND,"The npm semver resolver got selected, but the version isn't semver");let s=await zs(zA(e),{configuration:r.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,"versions"))throw new nt(z.REMOTE_INVALID,'Registry returned invalid data for - missing "versions" field');if(!Object.prototype.hasOwnProperty.call(s.versions,n))throw new nt(z.REMOTE_NOT_FOUND,`Registry failed to return reference "${n}"`);let o=new Ze;if(o.load(s.versions[n]),!o.dependencies.has(rQ.identHash)&&!o.peerDependencies.has(rQ.identHash)){for(let a of o.scripts.values())if(a.match(Z6e)){o.dependencies.set(rQ.identHash,S.makeDescriptor(rQ,"latest")),r.report.reportWarningOnce(z.NODE_GYP_INJECTED,`${S.prettyLocator(r.project.configuration,e)}: Implicit dependencies on node-gyp are discouraged`);break}}return typeof o.raw.deprecated=="string"&&r.report.reportWarningOnce(z.DEPRECATED_PACKAGE,`${S.prettyLocator(r.project.configuration,e)} is deprecated: ${o.raw.deprecated}`),_(P({},e),{version:n,languageName:"node",linkType:gt.HARD,conditions:o.getConditions(),dependencies:o.dependencies,peerDependencies:o.peerDependencies,dependenciesMeta:o.dependenciesMeta,peerDependenciesMeta:o.peerDependenciesMeta,bin:o.bin})}};var kT=class{supportsDescriptor(e,r){return!(!e.range.startsWith(ir)||!Rg.test(e.range.slice(ir.length)))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=e.range.slice(ir.length),s=await zs(zA(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,"dist-tags"))throw new nt(z.REMOTE_INVALID,'Registry returned invalid data - missing "dist-tags" field');let o=s["dist-tags"];if(!Object.prototype.hasOwnProperty.call(o,n))throw new nt(z.REMOTE_NOT_FOUND,`Registry failed to return tag "${n}"`);let a=o[n],l=S.makeLocator(e,`${ir}${a}`),c=s.versions[a].dist.tarball;return Vs.isConventionalTarballUrl(l,c,{configuration:i.project.configuration})?[l]:[S.bindLocator(l,{__archiveUrl:c})]}async getSatisfying(e,r,i){return null}async resolve(e,r){throw new Error("Unreachable")}};var Rf={};it(Rf,{getGitHead:()=>_7e,makePublishBody:()=>V7e});var CM={};it(CM,{default:()=>D7e,packUtils:()=>za});var za={};it(za,{genPackList:()=>QQ,genPackStream:()=>dM,genPackageManifest:()=>age,hasPackScripts:()=>hM,prepareForPack:()=>pM});var fM=ie(Nn()),sge=ie(nge()),oge=ie(require("zlib")),I7e=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],y7e=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function hM(t){return!!(Kt.hasWorkspaceScript(t,"prepack")||Kt.hasWorkspaceScript(t,"postpack"))}async function pM(t,{report:e},r){await Kt.maybeExecuteWorkspaceLifecycleScript(t,"prepack",{report:e});try{let i=v.join(t.cwd,Ze.fileName);await T.existsPromise(i)&&await t.manifest.loadFile(i,{baseFs:T}),await r()}finally{await Kt.maybeExecuteWorkspaceLifecycleScript(t,"postpack",{report:e})}}async function dM(t,e){var s,o;typeof e=="undefined"&&(e=await QQ(t));let r=new Set;for(let a of(o=(s=t.manifest.publishConfig)==null?void 0:s.executableFiles)!=null?o:new Set)r.add(v.normalize(a));for(let a of t.manifest.bin.values())r.add(v.normalize(a));let i=sge.default.pack();process.nextTick(async()=>{for(let a of e){let l=v.normalize(a),c=v.resolve(t.cwd,l),u=v.join("package",l),g=await T.lstatPromise(c),f={name:u,mtime:new Date(mr.SAFE_TIME*1e3)},h=r.has(l)?493:420,p,d,m=new Promise((B,b)=>{p=B,d=b}),I=B=>{B?d(B):p()};if(g.isFile()){let B;l==="package.json"?B=Buffer.from(JSON.stringify(await age(t),null,2)):B=await T.readFilePromise(c),i.entry(_(P({},f),{mode:h,type:"file"}),B,I)}else g.isSymbolicLink()?i.entry(_(P({},f),{mode:h,type:"symlink",linkname:await T.readlinkPromise(c)}),I):I(new Error(`Unsupported file type ${g.mode} for ${M.fromPortablePath(l)}`));await m}i.finalize()});let n=(0,oge.createGzip)();return i.pipe(n),n}async function age(t){let e=JSON.parse(JSON.stringify(t.manifest.raw));return await t.project.configuration.triggerHook(r=>r.beforeWorkspacePacking,t,e),e}async function QQ(t){var g,f,h,p,d,m,I,B;let e=t.project,r=e.configuration,i={accept:[],reject:[]};for(let b of y7e)i.reject.push(b);for(let b of I7e)i.accept.push(b);i.reject.push(r.get("rcFilename"));let n=b=>{if(b===null||!b.startsWith(`${t.cwd}/`))return;let R=v.relative(t.cwd,b),H=v.resolve(Se.root,R);i.reject.push(H)};n(v.resolve(e.cwd,r.get("lockfileFilename"))),n(r.get("cacheFolder")),n(r.get("globalFolder")),n(r.get("installStatePath")),n(r.get("virtualFolder")),n(r.get("yarnPath")),await r.triggerHook(b=>b.populateYarnPaths,e,b=>{n(b)});for(let b of e.workspaces){let R=v.relative(t.cwd,b.cwd);R!==""&&!R.match(/^(\.\.)?\//)&&i.reject.push(`/${R}`)}let s={accept:[],reject:[]},o=(f=(g=t.manifest.publishConfig)==null?void 0:g.main)!=null?f:t.manifest.main,a=(p=(h=t.manifest.publishConfig)==null?void 0:h.module)!=null?p:t.manifest.module,l=(m=(d=t.manifest.publishConfig)==null?void 0:d.browser)!=null?m:t.manifest.browser,c=(B=(I=t.manifest.publishConfig)==null?void 0:I.bin)!=null?B:t.manifest.bin;o!=null&&s.accept.push(v.resolve(Se.root,o)),a!=null&&s.accept.push(v.resolve(Se.root,a)),typeof l=="string"&&s.accept.push(v.resolve(Se.root,l));for(let b of c.values())s.accept.push(v.resolve(Se.root,b));if(l instanceof Map)for(let[b,R]of l.entries())s.accept.push(v.resolve(Se.root,b)),typeof R=="string"&&s.accept.push(v.resolve(Se.root,R));let u=t.manifest.files!==null;if(u){s.reject.push("/*");for(let b of t.manifest.files)Age(s.accept,b,{cwd:Se.root})}return await w7e(t.cwd,{hasExplicitFileList:u,globalList:i,ignoreList:s})}async function w7e(t,{hasExplicitFileList:e,globalList:r,ignoreList:i}){let n=[],s=new Zo(t),o=[[Se.root,[i]]];for(;o.length>0;){let[a,l]=o.pop(),c=await s.lstatPromise(a);if(!cge(a,{globalList:r,ignoreLists:c.isDirectory()?null:l}))if(c.isDirectory()){let u=await s.readdirPromise(a),g=!1,f=!1;if(!e||a!==Se.root)for(let d of u)g=g||d===".gitignore",f=f||d===".npmignore";let h=f?await lge(s,a,".npmignore"):g?await lge(s,a,".gitignore"):null,p=h!==null?[h].concat(l):l;cge(a,{globalList:r,ignoreLists:l})&&(p=[...l,{accept:[],reject:["**/*"]}]);for(let d of u)o.push([v.resolve(a,d),p])}else(c.isFile()||c.isSymbolicLink())&&n.push(v.relative(Se.root,a))}return n.sort()}async function lge(t,e,r){let i={accept:[],reject:[]},n=await t.readFilePromise(v.join(e,r),"utf8");for(let s of n.split(/\n/g))Age(i.reject,s,{cwd:e});return i}function B7e(t,{cwd:e}){let r=t[0]==="!";return r&&(t=t.slice(1)),t.match(/\.{0,1}\//)&&(t=v.resolve(e,t)),r&&(t=`!${t}`),t}function Age(t,e,{cwd:r}){let i=e.trim();i===""||i[0]==="#"||t.push(B7e(i,{cwd:r}))}function cge(t,{globalList:e,ignoreLists:r}){if(bQ(t,e.accept))return!1;if(bQ(t,e.reject))return!0;if(r!==null)for(let i of r){if(bQ(t,i.accept))return!1;if(bQ(t,i.reject))return!0}return!1}function bQ(t,e){let r=e,i=[];for(let n=0;n{await pM(i,{report:l},async()=>{l.reportJson({base:M.fromPortablePath(i.cwd)});let c=await QQ(i);for(let u of c)l.reportInfo(null,M.fromPortablePath(u)),l.reportJson({location:M.fromPortablePath(u)});if(!this.dryRun){let u=await dM(i,c),g=T.createWriteStream(s);u.pipe(g),await new Promise(f=>{g.on("finish",f)})}}),this.dryRun||(l.reportInfo(z.UNNAMED,`Package archive generated in ${ue.pretty(e,s,ue.Type.PATH)}`),l.reportJson({output:M.fromPortablePath(s)}))})).exitCode()}};fm.paths=[["pack"]],fm.usage=ye.Usage({description:"generate a tarball from the active workspace",details:"\n This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\n\n If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\n ",examples:[["Create an archive from the active workspace","yarn pack"],["List the files that would be made part of the workspace's archive","yarn pack --dry-run"],["Name and output the archive in a dedicated folder","yarn pack --out /artifacts/%s-%v.tgz"]]});var gge=fm;function Q7e(t,{workspace:e}){let r=t.replace("%s",b7e(e)).replace("%v",v7e(e));return M.toPortablePath(r)}function b7e(t){return t.manifest.name!==null?S.slugifyIdent(t.manifest.name):"package"}function v7e(t){return t.manifest.version!==null?t.manifest.version:"unknown"}var S7e=["dependencies","devDependencies","peerDependencies"],x7e="workspace:",k7e=(t,e)=>{var i,n;e.publishConfig&&(e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let r=t.project;for(let s of S7e)for(let o of t.manifest.getForScope(s).values()){let a=r.tryWorkspaceByDescriptor(o),l=S.parseRange(o.range);if(l.protocol===x7e)if(a===null){if(r.tryWorkspaceByIdent(o)===null)throw new nt(z.WORKSPACE_NOT_FOUND,`${S.prettyDescriptor(r.configuration,o)}: No local workspace found for this range`)}else{let c;S.areDescriptorsEqual(o,a.anchoredDescriptor)||l.selector==="*"?c=(i=a.manifest.version)!=null?i:"0.0.0":l.selector==="~"||l.selector==="^"?c=`${l.selector}${(n=a.manifest.version)!=null?n:"0.0.0"}`:c=l.selector,e[s][S.stringifyIdent(o)]=c}}},P7e={hooks:{beforeWorkspacePacking:k7e},commands:[gge]},D7e=P7e;var yge=ie(require("crypto")),wge=ie(Ige()),Bge=ie(require("url"));async function V7e(t,e,{access:r,tag:i,registry:n,gitHead:s}){let o=t.project.configuration,a=t.manifest.name,l=t.manifest.version,c=S.stringifyIdent(a),u=(0,yge.createHash)("sha1").update(e).digest("hex"),g=wge.default.fromData(e).toString();typeof r=="undefined"&&(t.manifest.publishConfig&&typeof t.manifest.publishConfig.access=="string"?r=t.manifest.publishConfig.access:o.get("npmPublishAccess")!==null?r=o.get("npmPublishAccess"):a.scope?r="restricted":r="public");let f=await za.genPackageManifest(t),h=`${c}-${l}.tgz`,p=new Bge.URL(`${To(n)}/${c}/-/${h}`);return{_id:c,_attachments:{[h]:{content_type:"application/octet-stream",data:e.toString("base64"),length:e.length}},name:c,access:r,["dist-tags"]:{[i]:l},versions:{[l]:_(P({},f),{_id:`${c}@${l}`,name:c,version:l,gitHead:s,dist:{shasum:u,integrity:g,tarball:p.toString()}})}}}async function _7e(t){try{let{stdout:e}=await hr.execvp("git",["rev-parse","--revs-only","HEAD"],{cwd:t});return e.trim()===""?void 0:e.trim()}catch{return}}var wM={npmAlwaysAuth:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:ge.BOOLEAN,default:!1},npmAuthIdent:{description:"Authentication identity for the npm registry (_auth in npm and yarn v1)",type:ge.SECRET,default:null},npmAuthToken:{description:"Authentication token for the npm registry (_authToken in npm and yarn v1)",type:ge.SECRET,default:null}},Qge={npmAuditRegistry:{description:"Registry to query for audit reports",type:ge.STRING,default:null},npmPublishRegistry:{description:"Registry to push packages to",type:ge.STRING,default:null},npmRegistryServer:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:ge.STRING,default:"https://registry.yarnpkg.com"}},X7e={configuration:_(P(P({},wM),Qge),{npmScopes:{description:"Settings per package scope",type:ge.MAP,valueDefinition:{description:"",type:ge.SHAPE,properties:P(P({},wM),Qge)}},npmRegistries:{description:"Settings per registry",type:ge.MAP,normalizeKeys:To,valueDefinition:{description:"",type:ge.SHAPE,properties:P({},wM)}}}),fetchers:[QT,Vs],resolvers:[bT,xT,kT]},Z7e=X7e;var vM={};it(vM,{default:()=>a_e});Ss();var Ho;(function(i){i.All="all",i.Production="production",i.Development="development"})(Ho||(Ho={}));var Xs;(function(s){s.Info="info",s.Low="low",s.Moderate="moderate",s.High="high",s.Critical="critical"})(Xs||(Xs={}));var vQ=[Xs.Info,Xs.Low,Xs.Moderate,Xs.High,Xs.Critical];function bge(t,e){let r=[],i=new Set,n=o=>{i.has(o)||(i.add(o),r.push(o))};for(let o of e)n(o);let s=new Set;for(;r.length>0;){let o=r.shift(),a=t.storedResolutions.get(o);if(typeof a=="undefined")throw new Error("Assertion failed: Expected the resolution to have been registered");let l=t.storedPackages.get(a);if(!!l){s.add(o);for(let c of l.dependencies.values())n(c.descriptorHash)}}return s}function $7e(t,e){return new Set([...t].filter(r=>!e.has(r)))}function e_e(t,e,{all:r}){let i=r?t.workspaces:[e],n=i.map(f=>f.manifest),s=new Set(n.map(f=>[...f.dependencies].map(([h,p])=>h)).flat()),o=new Set(n.map(f=>[...f.devDependencies].map(([h,p])=>h)).flat()),a=i.map(f=>[...f.dependencies.values()]).flat(),l=a.filter(f=>s.has(f.identHash)).map(f=>f.descriptorHash),c=a.filter(f=>o.has(f.identHash)).map(f=>f.descriptorHash),u=bge(t,l),g=bge(t,c);return $7e(g,u)}function vge(t){let e={};for(let r of t)e[S.stringifyIdent(r)]=S.parseRange(r.range).selector;return e}function Sge(t){if(typeof t=="undefined")return new Set;let e=vQ.indexOf(t),r=vQ.slice(e);return new Set(r)}function t_e(t,e){let r=Sge(e),i={};for(let n of r)i[n]=t[n];return i}function xge(t,e){var i;let r=t_e(t,e);for(let n of Object.keys(r))if((i=r[n])!=null?i:0>0)return!0;return!1}function kge(t,e){var s;let r={},i={children:r},n=Object.values(t.advisories);if(e!=null){let o=Sge(e);n=n.filter(a=>o.has(a.severity))}for(let o of de.sortMap(n,a=>a.module_name))r[o.module_name]={label:o.module_name,value:ue.tuple(ue.Type.RANGE,o.findings.map(a=>a.version).join(", ")),children:{Issue:{label:"Issue",value:ue.tuple(ue.Type.NO_HINT,o.title)},URL:{label:"URL",value:ue.tuple(ue.Type.URL,o.url)},Severity:{label:"Severity",value:ue.tuple(ue.Type.NO_HINT,o.severity)},["Vulnerable Versions"]:{label:"Vulnerable Versions",value:ue.tuple(ue.Type.RANGE,o.vulnerable_versions)},["Patched Versions"]:{label:"Patched Versions",value:ue.tuple(ue.Type.RANGE,o.patched_versions)},Via:{label:"Via",value:ue.tuple(ue.Type.NO_HINT,Array.from(new Set(o.findings.map(a=>a.paths).flat().map(a=>a.split(">")[0]))).join(", "))},Recommendation:{label:"Recommendation",value:ue.tuple(ue.Type.NO_HINT,(s=o.recommendation)==null?void 0:s.replace(/\n/g," "))}}};return i}function Pge(t,e,{all:r,environment:i}){let n=r?t.workspaces:[e],s=[Ho.All,Ho.Production].includes(i),o=[];if(s)for(let c of n)for(let u of c.manifest.dependencies.values())o.push(u);let a=[Ho.All,Ho.Development].includes(i),l=[];if(a)for(let c of n)for(let u of c.manifest.devDependencies.values())l.push(u);return vge([...o,...l].filter(c=>S.parseRange(c.range).protocol===null))}function Dge(t,e,{all:r}){var s;let i=e_e(t,e,{all:r}),n={};for(let o of t.storedPackages.values())n[S.stringifyIdent(o)]={version:(s=o.version)!=null?s:"0.0.0",integrity:o.identHash,requires:vge(o.dependencies.values()),dev:i.has(S.convertLocatorToDescriptor(o).descriptorHash)};return n}var dm=class extends Be{constructor(){super(...arguments);this.all=Y.Boolean("-A,--all",!1,{description:"Audit dependencies from all workspaces"});this.recursive=Y.Boolean("-R,--recursive",!1,{description:"Audit transitive dependencies as well"});this.environment=Y.String("--environment",Ho.All,{description:"Which environments to cover",validator:Yi(Ho)});this.json=Y.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.severity=Y.String("--severity",Xs.Info,{description:"Minimal severity requested for packages to be displayed",validator:Yi(Xs)})}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd);if(!i)throw new rt(r.cwd,this.context.cwd);await r.restoreInstallState();let n=Pge(r,i,{all:this.all,environment:this.environment}),s=Dge(r,i,{all:this.all});if(!this.recursive)for(let f of Object.keys(s))Object.prototype.hasOwnProperty.call(n,f)?s[f].requires={}:delete s[f];let o={requires:n,dependencies:s},a=gr.getAuditRegistry(i.manifest,{configuration:e}),l,c=await Fa.start({configuration:e,stdout:this.context.stdout},async()=>{l=await Lt.post("/-/npm/v1/security/audits/quick",o,{authType:Lt.AuthType.BEST_EFFORT,configuration:e,jsonResponse:!0,registry:a})});if(c.hasErrors())return c.exitCode();let u=xge(l.metadata.vulnerabilities,this.severity);return!this.json&&u?(Hs.emitTree(kge(l,this.severity),{configuration:e,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Fe.start({configuration:e,includeFooter:!1,json:this.json,stdout:this.context.stdout},async f=>{f.reportJson(l),u||f.reportInfo(z.EXCEPTION,"No audit suggestions")})).exitCode()}};dm.paths=[["npm","audit"]],dm.usage=ye.Usage({description:"perform a vulnerability audit against the installed packages",details:` + This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths). + + For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \`-A,--all\`. To extend this search to both direct and transitive dependencies, use \`-R,--recursive\`. + + Applying the \`--severity\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${vQ.map(e=>`\`${e}\``).join(", ")}. + + If the \`--json\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages. + + To understand the dependency tree requiring vulnerable packages, check the raw report with the \`--json\` flag or use \`yarn why \` to get more information as to who depends on them. + `,examples:[["Checks for known security issues with the installed packages. The output is a list of known issues.","yarn npm audit"],["Audit dependencies in all workspaces","yarn npm audit --all"],["Limit auditing to `dependencies` (excludes `devDependencies`)","yarn npm audit --environment production"],["Show audit report as valid JSON","yarn npm audit --json"],["Audit all direct and transitive dependencies","yarn npm audit --recursive"],["Output moderate (or more severe) vulnerabilities","yarn npm audit --severity moderate"]]});var Rge=dm;var BM=ie(Or()),QM=ie(require("util")),Cm=class extends Be{constructor(){super(...arguments);this.fields=Y.String("-f,--fields",{description:"A comma-separated list of manifest fields that should be displayed"});this.json=Y.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.packages=Y.Rest()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r}=await Ke.find(e,this.context.cwd),i=typeof this.fields!="undefined"?new Set(["name",...this.fields.split(/\s*,\s*/)]):null,n=[],s=!1,o=await Fe.start({configuration:e,includeFooter:!1,json:this.json,stdout:this.context.stdout},async a=>{for(let l of this.packages){let c;if(l==="."){let b=r.topLevelWorkspace;if(!b.manifest.name)throw new me(`Missing 'name' field in ${M.fromPortablePath(v.join(b.cwd,wt.manifest))}`);c=S.makeDescriptor(b.manifest.name,"unknown")}else c=S.parseDescriptor(l);let u=Lt.getIdentUrl(c),g=bM(await Lt.get(u,{configuration:e,ident:c,jsonResponse:!0,customErrorMessage:Lt.customPackageError})),f=Object.keys(g.versions).sort(BM.default.compareLoose),p=g["dist-tags"].latest||f[f.length-1],d=qt.validRange(c.range);if(d){let b=BM.default.maxSatisfying(f,d);b!==null?p=b:(a.reportWarning(z.UNNAMED,`Unmet range ${S.prettyRange(e,c.range)}; falling back to the latest version`),s=!0)}else c.range!=="unknown"&&(a.reportWarning(z.UNNAMED,`Invalid range ${S.prettyRange(e,c.range)}; falling back to the latest version`),s=!0);let m=g.versions[p],I=_(P(P({},g),m),{version:p,versions:f}),B;if(i!==null){B={};for(let b of i){let R=I[b];if(typeof R!="undefined")B[b]=R;else{a.reportWarning(z.EXCEPTION,`The '${b}' field doesn't exist inside ${S.prettyIdent(e,c)}'s informations`),s=!0;continue}}}else this.json||(delete I.dist,delete I.readme,delete I.users),B=I;a.reportJson(B),this.json||n.push(B)}});QM.inspect.styles.name="cyan";for(let a of n)(a!==n[0]||s)&&this.context.stdout.write(` +`),this.context.stdout.write(`${(0,QM.inspect)(a,{depth:Infinity,colors:!0,compact:!1})} +`);return o.exitCode()}};Cm.paths=[["npm","info"]],Cm.usage=ye.Usage({category:"Npm-related commands",description:"show information about a package",details:"\n This command will fetch information about a package from the npm registry, and prints it in a tree format.\n\n The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\n\n Append `@` to the package argument to provide information specific to the latest version that satisfies the range. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\n\n If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package informations.\n\n By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\n ",examples:[["Show all available information about react (except the `dist`, `readme`, and `users` fields)","yarn npm info react"],["Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)","yarn npm info react --json"],["Show all available information about react 16.12.0","yarn npm info react@16.12.0"],["Show the description of react","yarn npm info react --fields description"],["Show all available versions of react","yarn npm info react --fields versions"],["Show the readme of react","yarn npm info react --fields readme"],["Show a few fields of react","yarn npm info react --fields homepage,repository"]]});var Fge=Cm;function bM(t){if(Array.isArray(t)){let e=[];for(let r of t)r=bM(r),r&&e.push(r);return e}else if(typeof t=="object"&&t!==null){let e={};for(let r of Object.keys(t)){if(r.startsWith("_"))continue;let i=bM(t[r]);i&&(e[r]=i)}return e}else return t||null}var Nge=ie(aC()),mm=class extends Be{constructor(){super(...arguments);this.scope=Y.String("-s,--scope",{description:"Login to the registry configured for a given scope"});this.publish=Y.Boolean("--publish",!1,{description:"Login to the publish registry"})}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),r=await SQ({configuration:e,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Fe.start({configuration:e,stdout:this.context.stdout},async n=>{let s=await i_e({registry:r,report:n,stdin:this.context.stdin,stdout:this.context.stdout}),o=`/-/user/org.couchdb.user:${encodeURIComponent(s.name)}`,a=await Lt.put(o,s,{attemptedAs:s.name,configuration:e,registry:r,jsonResponse:!0,authType:Lt.AuthType.NO_AUTH});return await r_e(r,a.token,{configuration:e,scope:this.scope}),n.reportInfo(z.UNNAMED,"Successfully logged in")})).exitCode()}};mm.paths=[["npm","login"]],mm.usage=ye.Usage({category:"Npm-related commands",description:"store new login info to access the npm registry",details:"\n This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\n\n Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n ",examples:[["Login to the default registry","yarn npm login"],["Login to the registry linked to the @my-scope registry","yarn npm login --scope my-scope"],["Login to the publish registry for the current package","yarn npm login --publish"]]});var Lge=mm;async function SQ({scope:t,publish:e,configuration:r,cwd:i}){return t&&e?gr.getScopeRegistry(t,{configuration:r,type:gr.RegistryType.PUBLISH_REGISTRY}):t?gr.getScopeRegistry(t,{configuration:r}):e?gr.getPublishRegistry((await rf(r,i)).manifest,{configuration:r}):gr.getDefaultRegistry({configuration:r})}async function r_e(t,e,{configuration:r,scope:i}){let n=o=>a=>{let l=de.isIndexableObject(a)?a:{},c=l[o],u=de.isIndexableObject(c)?c:{};return _(P({},l),{[o]:_(P({},u),{npmAuthToken:e})})},s=i?{npmScopes:n(i)}:{npmRegistries:n(t)};return await fe.updateHomeConfiguration(s)}async function i_e({registry:t,report:e,stdin:r,stdout:i}){if(process.env.TEST_ENV)return{name:process.env.TEST_NPM_USER||"",password:process.env.TEST_NPM_PASSWORD||""};e.reportInfo(z.UNNAMED,`Logging in to ${t}`);let n=!1;t.match(/^https:\/\/npm\.pkg\.github\.com(\/|$)/)&&(e.reportInfo(z.UNNAMED,"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions."),n=!0),e.reportSeparator();let{username:s,password:o}=await(0,Nge.prompt)([{type:"input",name:"username",message:"Username:",required:!0,onCancel:()=>process.exit(130),stdin:r,stdout:i},{type:"password",name:"password",message:n?"Token:":"Password:",required:!0,onCancel:()=>process.exit(130),stdin:r,stdout:i}]);return e.reportSeparator(),{name:s,password:o}}var Ff=new Set(["npmAuthIdent","npmAuthToken"]),Em=class extends Be{constructor(){super(...arguments);this.scope=Y.String("-s,--scope",{description:"Logout of the registry configured for a given scope"});this.publish=Y.Boolean("--publish",!1,{description:"Logout of the publish registry"});this.all=Y.Boolean("-A,--all",!1,{description:"Logout of all registries"})}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),r=async()=>{var l;let n=await SQ({configuration:e,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),s=await fe.find(this.context.cwd,this.context.plugins),o=S.makeIdent((l=this.scope)!=null?l:null,"pkg");return!gr.getAuthConfiguration(n,{configuration:s,ident:o}).get("npmAuthToken")};return(await Fe.start({configuration:e,stdout:this.context.stdout},async n=>{if(this.all&&(await n_e(),n.reportInfo(z.UNNAMED,"Successfully logged out from everything")),this.scope){await Tge("npmScopes",this.scope),await r()?n.reportInfo(z.UNNAMED,`Successfully logged out from ${this.scope}`):n.reportWarning(z.UNNAMED,"Scope authentication settings removed, but some other ones settings still apply to it");return}let s=await SQ({configuration:e,cwd:this.context.cwd,publish:this.publish});await Tge("npmRegistries",s),await r()?n.reportInfo(z.UNNAMED,`Successfully logged out from ${s}`):n.reportWarning(z.UNNAMED,"Registry authentication settings removed, but some other ones settings still apply to it")})).exitCode()}};Em.paths=[["npm","logout"]],Em.usage=ye.Usage({category:"Npm-related commands",description:"logout of the npm registry",details:"\n This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\n\n Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n\n Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\n ",examples:[["Logout of the default registry","yarn npm logout"],["Logout of the @my-scope scope","yarn npm logout --scope my-scope"],["Logout of the publish registry for the current package","yarn npm logout --publish"],["Logout of all registries","yarn npm logout --all"]]});var Mge=Em;function s_e(t,e){let r=t[e];if(!de.isIndexableObject(r))return!1;let i=new Set(Object.keys(r));if([...Ff].every(s=>!i.has(s)))return!1;for(let s of Ff)i.delete(s);if(i.size===0)return t[e]=void 0,!0;let n=P({},r);for(let s of Ff)delete n[s];return t[e]=n,!0}async function n_e(){let t=e=>{let r=!1,i=de.isIndexableObject(e)?P({},e):{};i.npmAuthToken&&(delete i.npmAuthToken,r=!0);for(let n of Object.keys(i))s_e(i,n)&&(r=!0);if(Object.keys(i).length!==0)return r?i:e};return await fe.updateHomeConfiguration({npmRegistries:t,npmScopes:t})}async function Tge(t,e){return await fe.updateHomeConfiguration({[t]:r=>{let i=de.isIndexableObject(r)?r:{};if(!Object.prototype.hasOwnProperty.call(i,e))return r;let n=i[e],s=de.isIndexableObject(n)?n:{},o=new Set(Object.keys(s));if([...Ff].every(l=>!o.has(l)))return r;for(let l of Ff)o.delete(l);if(o.size===0)return Object.keys(i).length===1?void 0:_(P({},i),{[e]:void 0});let a={};for(let l of Ff)a[l]=void 0;return _(P({},i),{[e]:P(P({},s),a)})}})}var Im=class extends Be{constructor(){super(...arguments);this.access=Y.String("--access",{description:"The access for the published package (public or restricted)"});this.tag=Y.String("--tag","latest",{description:"The tag on the registry that the package should be attached to"});this.tolerateRepublish=Y.Boolean("--tolerate-republish",!1,{description:"Warn and exit when republishing an already existing version of a package"})}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd);if(!i)throw new rt(r.cwd,this.context.cwd);if(i.manifest.private)throw new me("Private workspaces cannot be published");if(i.manifest.name===null||i.manifest.version===null)throw new me("Workspaces must have valid names and versions to be published on an external registry");await r.restoreInstallState();let n=i.manifest.name,s=i.manifest.version,o=gr.getPublishRegistry(i.manifest,{configuration:e});return(await Fe.start({configuration:e,stdout:this.context.stdout},async l=>{var c,u;if(this.tolerateRepublish)try{let g=await Lt.get(Lt.getIdentUrl(n),{configuration:e,registry:o,ident:n,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(g,"versions"))throw new nt(z.REMOTE_INVALID,'Registry returned invalid data for - missing "versions" field');if(Object.prototype.hasOwnProperty.call(g.versions,s)){l.reportWarning(z.UNNAMED,`Registry already knows about version ${s}; skipping.`);return}}catch(g){if(((u=(c=g.originalError)==null?void 0:c.response)==null?void 0:u.statusCode)!==404)throw g}await Kt.maybeExecuteWorkspaceLifecycleScript(i,"prepublish",{report:l}),await za.prepareForPack(i,{report:l},async()=>{let g=await za.genPackList(i);for(let m of g)l.reportInfo(null,m);let f=await za.genPackStream(i,g),h=await de.bufferStream(f),p=await Rf.getGitHead(i.cwd),d=await Rf.makePublishBody(i,h,{access:this.access,tag:this.tag,registry:o,gitHead:p});await Lt.put(Lt.getIdentUrl(n),d,{configuration:e,registry:o,ident:n,jsonResponse:!0})}),l.reportInfo(z.UNNAMED,"Package archive published")})).exitCode()}};Im.paths=[["npm","publish"]],Im.usage=ye.Usage({category:"Npm-related commands",description:"publish the active workspace to the npm registry",details:'\n This command will pack the active workspace into a fresh archive and upload it to the npm registry.\n\n The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\n\n Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka "private packages"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\n ',examples:[["Publish the active workspace","yarn npm publish"]]});var Oge=Im;var Uge=ie(Or());var ym=class extends Be{constructor(){super(...arguments);this.json=Y.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=Y.String({required:!1})}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd),n;if(typeof this.package!="undefined")n=S.parseIdent(this.package);else{if(!i)throw new rt(r.cwd,this.context.cwd);if(!i.manifest.name)throw new me(`Missing 'name' field in ${M.fromPortablePath(v.join(i.cwd,wt.manifest))}`);n=i.manifest.name}let s=await wm(n,e),a={children:de.sortMap(Object.entries(s),([l])=>l).map(([l,c])=>({value:ue.tuple(ue.Type.RESOLUTION,{descriptor:S.makeDescriptor(n,l),locator:S.makeLocator(n,c)})}))};return Hs.emitTree(a,{configuration:e,json:this.json,stdout:this.context.stdout})}};ym.paths=[["npm","tag","list"]],ym.usage=ye.Usage({category:"Npm-related commands",description:"list all dist-tags of a package",details:` + This command will list all tags of a package from the npm registry. + + If the package is not specified, Yarn will default to the current workspace. + `,examples:[["List all tags of package `my-pkg`","yarn npm tag list my-pkg"]]});var Kge=ym;async function wm(t,e){let r=`/-/package${Lt.getIdentUrl(t)}/dist-tags`;return Lt.get(r,{configuration:e,ident:t,jsonResponse:!0,customErrorMessage:Lt.customPackageError})}var Bm=class extends Be{constructor(){super(...arguments);this.package=Y.String();this.tag=Y.String()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd);if(!i)throw new rt(r.cwd,this.context.cwd);let n=S.parseDescriptor(this.package,!0),s=n.range;if(!Uge.default.valid(s))throw new me(`The range ${ue.pretty(e,n.range,ue.Type.RANGE)} must be a valid semver version`);let o=gr.getPublishRegistry(i.manifest,{configuration:e}),a=ue.pretty(e,n,ue.Type.IDENT),l=ue.pretty(e,s,ue.Type.RANGE),c=ue.pretty(e,this.tag,ue.Type.CODE);return(await Fe.start({configuration:e,stdout:this.context.stdout},async g=>{let f=await wm(n,e);Object.prototype.hasOwnProperty.call(f,this.tag)&&f[this.tag]===s&&g.reportWarning(z.UNNAMED,`Tag ${c} is already set to version ${l}`);let h=`/-/package${Lt.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await Lt.put(h,s,{configuration:e,registry:o,ident:n,jsonRequest:!0,jsonResponse:!0}),g.reportInfo(z.UNNAMED,`Tag ${c} added to version ${l} of package ${a}`)})).exitCode()}};Bm.paths=[["npm","tag","add"]],Bm.usage=ye.Usage({category:"Npm-related commands",description:"add a tag for a specific version of a package",details:` + This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten. + `,examples:[["Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`","yarn npm tag add my-pkg@2.3.4-beta.4 beta"]]});var Hge=Bm;var Qm=class extends Be{constructor(){super(...arguments);this.package=Y.String();this.tag=Y.String()}async execute(){if(this.tag==="latest")throw new me("The 'latest' tag cannot be removed.");let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd);if(!i)throw new rt(r.cwd,this.context.cwd);let n=S.parseIdent(this.package),s=gr.getPublishRegistry(i.manifest,{configuration:e}),o=ue.pretty(e,this.tag,ue.Type.CODE),a=ue.pretty(e,n,ue.Type.IDENT),l=await wm(n,e);if(!Object.prototype.hasOwnProperty.call(l,this.tag))throw new me(`${o} is not a tag of package ${a}`);return(await Fe.start({configuration:e,stdout:this.context.stdout},async u=>{let g=`/-/package${Lt.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await Lt.del(g,{configuration:e,registry:s,ident:n,jsonResponse:!0}),u.reportInfo(z.UNNAMED,`Tag ${o} removed from package ${a}`)})).exitCode()}};Qm.paths=[["npm","tag","remove"]],Qm.usage=ye.Usage({category:"Npm-related commands",description:"remove a tag from a package",details:` + This command will remove a tag from a package from the npm registry. + `,examples:[["Remove the `beta` tag from package `my-pkg`","yarn npm tag remove my-pkg beta"]]});var Gge=Qm;var bm=class extends Be{constructor(){super(...arguments);this.scope=Y.String("-s,--scope",{description:"Print username for the registry configured for a given scope"});this.publish=Y.Boolean("--publish",!1,{description:"Print username for the publish registry"})}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),r;return this.scope&&this.publish?r=gr.getScopeRegistry(this.scope,{configuration:e,type:gr.RegistryType.PUBLISH_REGISTRY}):this.scope?r=gr.getScopeRegistry(this.scope,{configuration:e}):this.publish?r=gr.getPublishRegistry((await rf(e,this.context.cwd)).manifest,{configuration:e}):r=gr.getDefaultRegistry({configuration:e}),(await Fe.start({configuration:e,stdout:this.context.stdout},async n=>{var o,a;let s;try{s=await Lt.get("/-/whoami",{configuration:e,registry:r,authType:Lt.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?S.makeIdent(this.scope,""):void 0})}catch(l){if(((o=l.response)==null?void 0:o.statusCode)===401||((a=l.response)==null?void 0:a.statusCode)===403){n.reportError(z.AUTHENTICATION_INVALID,"Authentication failed - your credentials may have expired");return}else throw l}n.reportInfo(z.UNNAMED,s.username)})).exitCode()}};bm.paths=[["npm","whoami"]],bm.usage=ye.Usage({category:"Npm-related commands",description:"display the name of the authenticated user",details:"\n Print the username associated with the current authentication settings to the standard output.\n\n When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\n\n When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\n ",examples:[["Print username for the default registry","yarn npm whoami"],["Print username for the registry on a given scope","yarn npm whoami --scope company"]]});var jge=bm;var o_e={configuration:{npmPublishAccess:{description:"Default access of the published packages",type:ge.STRING,default:null}},commands:[Rge,Fge,Lge,Mge,Oge,Hge,Kge,Gge,jge]},a_e=o_e;var NM={};it(NM,{default:()=>B_e,patchUtils:()=>SM});var SM={};it(SM,{applyPatchFile:()=>PQ,diffFolders:()=>DM,extractPackageToDisk:()=>PM,extractPatchFlags:()=>Xge,isParentRequired:()=>kM,loadPatchFiles:()=>km,makeDescriptor:()=>I_e,makeLocator:()=>xM,parseDescriptor:()=>Sm,parseLocator:()=>xm,parsePatchFile:()=>kQ});var vm=class extends Error{constructor(e,r){super(`Cannot apply hunk #${e+1}`);this.hunk=r}};var A_e=/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/;function Nf(t){return v.relative(Se.root,v.resolve(Se.root,M.toPortablePath(t)))}function l_e(t){let e=t.trim().match(A_e);if(!e)throw new Error(`Bad header line: '${t}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var c_e=420,u_e=493,Lr;(function(i){i.Context="context",i.Insertion="insertion",i.Deletion="deletion"})(Lr||(Lr={}));var Yge=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),g_e=t=>({header:l_e(t),parts:[]}),f_e={["@"]:"header",["-"]:Lr.Deletion,["+"]:Lr.Insertion,[" "]:Lr.Context,["\\"]:"pragma",undefined:Lr.Context};function p_e(t){let e=[],r=Yge(),i="parsing header",n=null,s=null;function o(){n&&(s&&(n.parts.push(s),s=null),r.hunks.push(n),n=null)}function a(){o(),e.push(r),r=Yge()}for(let l=0;l0?"patch":"mode change",B=null;switch(I){case"rename":{if(!u||!g)throw new Error("Bad parser state: rename from & to not given");e.push({type:"rename",semverExclusivity:i,fromPath:Nf(u),toPath:Nf(g)}),B=g}break;case"file deletion":{let b=n||p;if(!b)throw new Error("Bad parse state: no path given for file deletion");e.push({type:"file deletion",semverExclusivity:i,hunk:m&&m[0]||null,path:Nf(b),mode:xQ(l),hash:f})}break;case"file creation":{let b=s||d;if(!b)throw new Error("Bad parse state: no path given for file creation");e.push({type:"file creation",semverExclusivity:i,hunk:m&&m[0]||null,path:Nf(b),mode:xQ(c),hash:h})}break;case"patch":case"mode change":B=d||s;break;default:de.assertNever(I);break}B&&o&&a&&o!==a&&e.push({type:"mode change",semverExclusivity:i,path:Nf(B),oldMode:xQ(o),newMode:xQ(a)}),B&&m&&m.length&&e.push({type:"patch",semverExclusivity:i,path:Nf(B),hunks:m,beforeHash:f,afterHash:h})}if(e.length===0)throw new Error("Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string");return e}function xQ(t){let e=parseInt(t,8)&511;if(e!==c_e&&e!==u_e)throw new Error(`Unexpected file mode string: ${t}`);return e}function kQ(t){let e=t.split(/\n/g);return e[e.length-1]===""&&e.pop(),d_e(p_e(e))}function h_e(t){let e=0,r=0;for(let{type:i,lines:n}of t.parts)switch(i){case Lr.Context:r+=n.length,e+=n.length;break;case Lr.Deletion:e+=n.length;break;case Lr.Insertion:r+=n.length;break;default:de.assertNever(i);break}if(e!==t.header.original.length||r!==t.header.patched.length){let i=n=>n<0?n:`+${n}`;throw new Error(`hunk header integrity check failed (expected @@ ${i(t.header.original.length)} ${i(t.header.patched.length)} @@, got @@ ${i(e)} ${i(r)} @@)`)}}async function Lf(t,e,r){let i=await t.lstatPromise(e),n=await r();if(typeof n!="undefined"&&(e=n),t.lutimesPromise)await t.lutimesPromise(e,i.atime,i.mtime);else if(!i.isSymbolicLink())await t.utimesPromise(e,i.atime,i.mtime);else throw new Error("Cannot preserve the time values of a symlink")}async function PQ(t,{baseFs:e=new Wt,dryRun:r=!1,version:i=null}={}){for(let n of t)if(!(n.semverExclusivity!==null&&i!==null&&!qt.satisfiesWithPrereleases(i,n.semverExclusivity)))switch(n.type){case"file deletion":if(r){if(!e.existsSync(n.path))throw new Error(`Trying to delete a file that doesn't exist: ${n.path}`)}else await Lf(e,v.dirname(n.path),async()=>{await e.unlinkPromise(n.path)});break;case"rename":if(r){if(!e.existsSync(n.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${n.fromPath}`)}else await Lf(e,v.dirname(n.fromPath),async()=>{await Lf(e,v.dirname(n.toPath),async()=>{await Lf(e,n.fromPath,async()=>(await e.movePromise(n.fromPath,n.toPath),n.toPath))})});break;case"file creation":if(r){if(e.existsSync(n.path))throw new Error(`Trying to create a file that already exists: ${n.path}`)}else{let s=n.hunk?n.hunk.parts[0].lines.join(` +`)+(n.hunk.parts[0].noNewlineAtEndOfFile?"":` +`):"";await e.mkdirpPromise(v.dirname(n.path),{chmod:493,utimes:[mr.SAFE_TIME,mr.SAFE_TIME]}),await e.writeFilePromise(n.path,s,{mode:n.mode}),await e.utimesPromise(n.path,mr.SAFE_TIME,mr.SAFE_TIME)}break;case"patch":await Lf(e,n.path,async()=>{await C_e(n,{baseFs:e,dryRun:r})});break;case"mode change":{let o=(await e.statPromise(n.path)).mode;if(qge(n.newMode)!==qge(o))continue;await Lf(e,n.path,async()=>{await e.chmodPromise(n.path,n.newMode)})}break;default:de.assertNever(n);break}}function qge(t){return(t&64)>0}function Jge(t){return t.replace(/\s+$/,"")}function m_e(t,e){return Jge(t)===Jge(e)}async function C_e({hunks:t,path:e},{baseFs:r,dryRun:i=!1}){let n=await r.statSync(e).mode,o=(await r.readFileSync(e,"utf8")).split(/\n/),a=[],l=0,c=0;for(let g of t){let f=Math.max(c,g.header.patched.start+l),h=Math.max(0,f-c),p=Math.max(0,o.length-f-g.header.original.length),d=Math.max(h,p),m=0,I=0,B=null;for(;m<=d;){if(m<=h&&(I=f-m,B=Wge(g,o,I),B!==null)){m=-m;break}if(m<=p&&(I=f+m,B=Wge(g,o,I),B!==null))break;m+=1}if(B===null)throw new vm(t.indexOf(g),g);a.push(B),l+=m,c=I+g.header.original.length}if(i)return;let u=0;for(let g of a)for(let f of g)switch(f.type){case"splice":{let h=f.index+u;o.splice(h,f.numToDelete,...f.linesToInsert),u+=f.linesToInsert.length-f.numToDelete}break;case"pop":o.pop();break;case"push":o.push(f.line);break;default:de.assertNever(f);break}await r.writeFilePromise(e,o.join(` +`),{mode:n})}function Wge(t,e,r){let i=[];for(let n of t.parts)switch(n.type){case Lr.Context:case Lr.Deletion:{for(let s of n.lines){let o=e[r];if(o==null||!m_e(o,s))return null;r+=1}n.type===Lr.Deletion&&(i.push({type:"splice",index:r-n.lines.length,numToDelete:n.lines.length,linesToInsert:[]}),n.noNewlineAtEndOfFile&&i.push({type:"push",line:""}))}break;case Lr.Insertion:i.push({type:"splice",index:r,numToDelete:0,linesToInsert:n.lines}),n.noNewlineAtEndOfFile&&i.push({type:"pop"});break;default:de.assertNever(n.type);break}return i}var E_e=/^builtin<([^>]+)>$/;function zge(t,e){let{source:r,selector:i,params:n}=S.parseRange(t);if(r===null)throw new Error("Patch locators must explicitly define their source");let s=i?i.split(/&/).map(c=>M.toPortablePath(c)):[],o=n&&typeof n.locator=="string"?S.parseLocator(n.locator):null,a=n&&typeof n.version=="string"?n.version:null,l=e(r);return{parentLocator:o,sourceItem:l,patchPaths:s,sourceVersion:a}}function Sm(t){let i=zge(t.range,S.parseDescriptor),{sourceItem:e}=i,r=qr(i,["sourceItem"]);return _(P({},r),{sourceDescriptor:e})}function xm(t){let i=zge(t.reference,S.parseLocator),{sourceItem:e}=i,r=qr(i,["sourceItem"]);return _(P({},r),{sourceLocator:e})}function Vge({parentLocator:t,sourceItem:e,patchPaths:r,sourceVersion:i,patchHash:n},s){let o=t!==null?{locator:S.stringifyLocator(t)}:{},a=typeof i!="undefined"?{version:i}:{},l=typeof n!="undefined"?{hash:n}:{};return S.makeRange({protocol:"patch:",source:s(e),selector:r.join("&"),params:P(P(P({},a),l),o)})}function I_e(t,{parentLocator:e,sourceDescriptor:r,patchPaths:i}){return S.makeLocator(t,Vge({parentLocator:e,sourceItem:r,patchPaths:i},S.stringifyDescriptor))}function xM(t,{parentLocator:e,sourcePackage:r,patchPaths:i,patchHash:n}){return S.makeLocator(t,Vge({parentLocator:e,sourceItem:r,sourceVersion:r.version,patchPaths:i,patchHash:n},S.stringifyLocator))}function _ge({onAbsolute:t,onRelative:e,onBuiltin:r},i){i.startsWith("~")&&(i=i.slice(1));let s=i.match(E_e);return s!==null?r(s[1]):v.isAbsolute(i)?t(i):e(i)}function Xge(t){let e=t.startsWith("~");return e&&(t=t.slice(1)),{optional:e}}function kM(t){return _ge({onAbsolute:()=>!1,onRelative:()=>!0,onBuiltin:()=>!1},t)}async function km(t,e,r){let i=t!==null?await r.fetcher.fetch(t,r):null,n=i&&i.localPath?{packageFs:new Ft(Se.root),prefixPath:v.relative(Se.root,i.localPath)}:i;i&&i!==n&&i.releaseFs&&i.releaseFs();let s=await de.releaseAfterUseAsync(async()=>await Promise.all(e.map(async o=>{let a=Xge(o),l=await _ge({onAbsolute:async()=>await T.readFilePromise(o,"utf8"),onRelative:async()=>{if(n===null)throw new Error("Assertion failed: The parent locator should have been fetched");return await n.packageFs.readFilePromise(v.join(n.prefixPath,o),"utf8")},onBuiltin:async c=>await r.project.configuration.firstHook(u=>u.getBuiltinPatch,r.project,c)},o);return _(P({},a),{source:l})})));for(let o of s)typeof o.source=="string"&&(o.source=o.source.replace(/\r\n?/g,` +`));return s}async function PM(t,{cache:e,project:r}){let i=r.storedPackages.get(t.locatorHash);if(typeof i=="undefined")throw new Error("Assertion failed: Expected the package to be registered");let n=r.storedChecksums,s=new ei,o=r.configuration.makeFetcher(),a=await o.fetch(t,{cache:e,project:r,fetcher:o,checksums:n,report:s}),l=await T.mktempPromise(),c=v.join(l,"source"),u=v.join(l,"user"),g=v.join(l,".yarn-patch.json");return await Promise.all([T.copyPromise(c,a.prefixPath,{baseFs:a.packageFs}),T.copyPromise(u,a.prefixPath,{baseFs:a.packageFs}),T.writeJsonPromise(g,{locator:S.stringifyLocator(t),version:i.version})]),T.detachTemp(l),u}async function DM(t,e){let r=M.fromPortablePath(t).replace(/\\/g,"/"),i=M.fromPortablePath(e).replace(/\\/g,"/"),{stdout:n,stderr:s}=await hr.execvp("git",["-c","core.safecrlf=false","diff","--src-prefix=a/","--dst-prefix=b/","--ignore-cr-at-eol","--full-index","--no-index","--text",r,i],{cwd:M.toPortablePath(process.cwd()),env:_(P({},process.env),{GIT_CONFIG_NOSYSTEM:"1",HOME:"",XDG_CONFIG_HOME:"",USERPROFILE:""})});if(s.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH. +The following error was reported by 'git': +${s}`);let o=r.startsWith("/")?a=>a.slice(1):a=>a;return n.replace(new RegExp(`(a|b)(${de.escapeRegExp(`/${o(r)}/`)})`,"g"),"$1/").replace(new RegExp(`(a|b)${de.escapeRegExp(`/${o(i)}/`)}`,"g"),"$1/").replace(new RegExp(de.escapeRegExp(`${r}/`),"g"),"").replace(new RegExp(de.escapeRegExp(`${i}/`),"g"),"")}function Zge(t,{configuration:e,report:r}){for(let i of t.parts)for(let n of i.lines)switch(i.type){case Lr.Context:r.reportInfo(null,` ${ue.pretty(e,n,"grey")}`);break;case Lr.Deletion:r.reportError(z.FROZEN_LOCKFILE_EXCEPTION,`- ${ue.pretty(e,n,ue.Type.REMOVED)}`);break;case Lr.Insertion:r.reportError(z.FROZEN_LOCKFILE_EXCEPTION,`+ ${ue.pretty(e,n,ue.Type.ADDED)}`);break;default:de.assertNever(i.type)}}var RM=class{supports(e,r){return!!e.reference.startsWith("patch:")}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,P({onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${S.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,r),skipIntegrityCheck:r.skipIntegrityCheck},r.cacheOptions));return{packageFs:n,releaseFs:s,prefixPath:S.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:o}}async patchPackage(e,r){let{parentLocator:i,sourceLocator:n,sourceVersion:s,patchPaths:o}=xm(e),a=await km(i,o,r),l=await T.mktempPromise(),c=v.join(l,"current.zip"),u=await r.fetcher.fetch(n,r),g=S.getIdentVendorPath(e),f=await $i(),h=new Jr(c,{libzip:f,create:!0,level:r.project.configuration.get("compressionLevel")});await de.releaseAfterUseAsync(async()=>{await h.copyPromise(g,u.prefixPath,{baseFs:u.packageFs,stableSort:!0})},u.releaseFs),h.saveAndClose();for(let{source:p,optional:d}of a){if(p===null)continue;let m=new Jr(c,{libzip:f,level:r.project.configuration.get("compressionLevel")}),I=new Ft(v.resolve(Se.root,g),{baseFs:m});try{await PQ(kQ(p),{baseFs:I,version:s})}catch(B){if(!(B instanceof vm))throw B;let b=r.project.configuration.get("enableInlineHunks"),R=!b&&!d?" (set enableInlineHunks for details)":"",H=`${S.prettyLocator(r.project.configuration,e)}: ${B.message}${R}`,L=K=>{!b||Zge(B.hunk,{configuration:r.project.configuration,report:K})};if(m.discardAndClose(),d){r.report.reportWarningOnce(z.PATCH_HUNK_FAILED,H,{reportExtra:L});continue}else throw new nt(z.PATCH_HUNK_FAILED,H,L)}m.saveAndClose()}return new Jr(c,{libzip:f,level:r.project.configuration.get("compressionLevel")})}};var y_e=3,FM=class{supportsDescriptor(e,r){return!!e.range.startsWith("patch:")}supportsLocator(e,r){return!!e.reference.startsWith("patch:")}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,i){let{patchPaths:n}=Sm(e);return n.every(s=>!kM(s))?e:S.bindDescriptor(e,{locator:S.stringifyLocator(r)})}getResolutionDependencies(e,r){let{sourceDescriptor:i}=Sm(e);return[i]}async getCandidates(e,r,i){if(!i.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{parentLocator:n,sourceDescriptor:s,patchPaths:o}=Sm(e),a=await km(n,o,i.fetchOptions),l=r.get(s.descriptorHash);if(typeof l=="undefined")throw new Error("Assertion failed: The dependency should have been resolved");let c=mn.makeHash(`${y_e}`,...a.map(u=>JSON.stringify(u))).slice(0,6);return[xM(e,{parentLocator:n,sourcePackage:l,patchPaths:o,patchHash:c})]}async getSatisfying(e,r,i){return null}async resolve(e,r){let{sourceLocator:i}=xm(e),n=await r.resolver.resolve(i,r);return P(P({},n),e)}};var Pm=class extends Be{constructor(){super(...arguments);this.save=Y.Boolean("-s,--save",!1,{description:"Add the patch to your resolution entries"});this.patchFolder=Y.String()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd);if(!i)throw new rt(r.cwd,this.context.cwd);await r.restoreInstallState();let n=v.resolve(this.context.cwd,M.toPortablePath(this.patchFolder)),s=v.join(n,"../source"),o=v.join(n,"../.yarn-patch.json");if(!T.existsSync(s))throw new me("The argument folder didn't get created by 'yarn patch'");let a=await DM(s,n),l=await T.readJsonPromise(o),c=S.parseLocator(l.locator,!0);if(!r.storedPackages.has(c.locatorHash))throw new me("No package found in the project for the given locator");if(!this.save){this.context.stdout.write(a);return}let u=e.get("patchFolder"),g=v.join(u,S.slugifyLocator(c));await T.mkdirPromise(u,{recursive:!0}),await T.writeFilePromise(g,a);let f=v.relative(r.cwd,g);r.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:S.stringifyIdent(c),description:l.version}},reference:`patch:${S.stringifyLocator(c)}#${f}`}),await r.persist()}};Pm.paths=[["patch-commit"]],Pm.usage=ye.Usage({description:"generate a patch out of a directory",details:"\n This will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\n\n Only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\n "});var $ge=Pm;var Dm=class extends Be{constructor(){super(...arguments);this.json=Y.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=Y.String()}async execute(){let e=await fe.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Ke.find(e,this.context.cwd),n=await Qt.find(e);if(!i)throw new rt(r.cwd,this.context.cwd);await r.restoreInstallState();let s=S.parseLocator(this.package);if(s.reference==="unknown"){let o=de.mapAndFilter([...r.storedPackages.values()],a=>a.identHash!==s.identHash?de.mapAndFilter.skip:S.isVirtualLocator(a)?de.mapAndFilter.skip:a);if(o.length===0)throw new me("No package found in the project for the given locator");if(o.length>1)throw new me(`Multiple candidate packages found; explicitly choose one of them (use \`yarn why \` to get more information as to who depends on them): +${o.map(a=>` +- ${S.prettyLocator(e,a)}`).join("")}`);s=o[0]}if(!r.storedPackages.has(s.locatorHash))throw new me("No package found in the project for the given locator");await Fe.start({configuration:e,json:this.json,stdout:this.context.stdout},async o=>{let a=await PM(s,{cache:n,project:r});o.reportJson({locator:S.stringifyLocator(s),path:M.fromPortablePath(a)}),o.reportInfo(z.UNNAMED,`Package ${S.prettyLocator(e,s)} got extracted with success!`),o.reportInfo(z.UNNAMED,`You can now edit the following folder: ${ue.pretty(e,M.fromPortablePath(a),"magenta")}`),o.reportInfo(z.UNNAMED,`Once you are done run ${ue.pretty(e,`yarn patch-commit ${process.platform==="win32"?'"':""}${M.fromPortablePath(a)}${process.platform==="win32"?'"':""}`,"cyan")} and Yarn will store a patchfile based on your changes.`)})}};Dm.paths=[["patch"]],Dm.usage=ye.Usage({description:"prepare a package for patching",details:'\n This command will cause a package to be extracted in a temporary directory (under a folder named "patch-workdir"). This folder will be editable at will; running `yarn patch` inside it will then cause Yarn to generate a patchfile and register it into your top-level manifest (cf the `patch:` protocol).\n '});var efe=Dm;var w_e={configuration:{enableInlineHunks:{description:"If true, the installs will print unmatched patch hunks",type:ge.BOOLEAN,default:!1},patchFolder:{description:"Folder where the patch files must be written",type:ge.ABSOLUTE_PATH,default:"./.yarn/patches"}},commands:[$ge,efe],fetchers:[RM],resolvers:[FM]},B_e=w_e;var TM={};it(TM,{default:()=>S_e});var tfe=ie(Wp()),LM=class{supportsPackage(e,r){return r.project.configuration.get("nodeLinker")==="pnpm"}async findPackageLocation(e,r){return nfe(e,{project:r.project})}async findPackageLocator(e,r){let i=ife(),n=r.project.installersCustomData.get(i);if(!n)throw new me(`The project in ${ue.pretty(r.project.configuration,`${r.project.cwd}/package.json`,ue.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=e.match(/(^.*\/node_modules\/(@[^/]*\/)?[^/]+)(\/.*$)/);if(s){let l=n.locatorByPath.get(s[1]);if(l)return l}let o=e,a=e;do{a=o,o=v.dirname(a);let l=n.locatorByPath.get(a);if(l)return l}while(o!==a);return null}makeInstaller(e){return new rfe(e)}},rfe=class{constructor(e){this.opts=e;this.asyncActions=new afe;this.packageLocations=new Map;this.customData={locatorByPath:new Map}}getCustomDataKey(){return ife()}attachCustomData(e){this.customData=e}async installPackage(e,r,i){switch(e.linkType){case gt.SOFT:return this.installPackageSoft(e,r,i);case gt.HARD:return this.installPackageHard(e,r,i)}throw new Error("Assertion failed: Unsupported package link type")}async installPackageSoft(e,r,i){let n=v.resolve(r.packageFs.getRealPath(),r.prefixPath);return this.packageLocations.set(e.locatorHash,n),{packageLocation:n,buildDirective:null}}async installPackageHard(e,r,i){var u;let n=nfe(e,{project:this.opts.project});this.customData.locatorByPath.set(n,S.stringifyLocator(e)),this.packageLocations.set(e.locatorHash,n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await T.mkdirPromise(n,{recursive:!0}),await T.copyPromise(n,r.prefixPath,{baseFs:r.packageFs,overwrite:!1})}));let o=S.isVirtualLocator(e)?S.devirtualizeLocator(e):e,a={manifest:(u=await Ze.tryFind(r.prefixPath,{baseFs:r.packageFs}))!=null?u:new Ze,misc:{hasBindingGyp:Ws.hasBindingGyp(r)}},l=this.opts.project.getDependencyMeta(o,e.version),c=Ws.extractBuildScripts(e,a,l,{configuration:this.opts.project.configuration,report:this.opts.report});return{packageLocation:n,buildDirective:c}}async attachInternalDependencies(e,r){this.opts.project.configuration.get("nodeLinker")==="pnpm"&&(!ofe(e,{project:this.opts.project})||this.asyncActions.reduce(e.locatorHash,async i=>{await i;let n=this.packageLocations.get(e.locatorHash);if(typeof n=="undefined")throw new Error(`Assertion failed: Expected the package to have been registered (${S.stringifyLocator(e)})`);let s=v.join(n,wt.nodeModules);r.length>0&&await T.mkdirpPromise(s);let o=await Q_e(s),a=[];for(let[l,c]of r){let u=c;ofe(c,{project:this.opts.project})||(this.opts.report.reportWarning(z.UNNAMED,"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies"),u=S.devirtualizeLocator(c));let g=this.packageLocations.get(u.locatorHash);if(typeof g=="undefined")throw new Error(`Assertion failed: Expected the package to have been registered (${S.stringifyLocator(c)})`);let f=S.stringifyIdent(l),h=v.join(s,f),p=v.relative(v.dirname(h),g),d=o.get(f);o.delete(f),a.push(Promise.resolve().then(async()=>{if(d){if(d.isSymbolicLink()&&await T.readlinkPromise(h)===p)return;await T.removePromise(h)}await T.mkdirpPromise(v.dirname(h)),process.platform=="win32"?await T.symlinkPromise(g,h,"junction"):await T.symlinkPromise(p,h)}))}for(let l of o.keys())a.push(T.removePromise(v.join(s,l)));await Promise.all(a)}))}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the pnpm linker")}async finalizeInstall(){let e=sfe(this.opts.project),r=new Set;for(let s of this.packageLocations.values())r.add(v.basename(s));let i;try{i=await T.readdirPromise(e)}catch{i=[]}let n=[];for(let s of i)r.has(s)||n.push(T.removePromise(v.join(e,s)));await Promise.all(n),await this.asyncActions.wait()}};function ife(){return JSON.stringify({name:"PnpmInstaller",version:1})}function sfe(t){return v.join(t.cwd,wt.nodeModules,".store")}function nfe(t,{project:e}){let r=S.slugifyLocator(t);return v.join(sfe(e),r)}function ofe(t,{project:e}){return!S.isVirtualLocator(t)||!e.tryWorkspaceByLocator(t)}async function Q_e(t){let e=new Map,r=[];try{r=await T.readdirPromise(t,{withFileTypes:!0})}catch(i){if(i.code!=="ENOENT")throw i}try{for(let i of r)if(!i.name.startsWith("."))if(i.name.startsWith("@"))for(let n of await T.readdirPromise(v.join(t,i.name),{withFileTypes:!0}))e.set(`${i.name}/${n.name}`,n);else e.set(i.name,i)}catch(i){if(i.code!=="ENOENT")throw i}return e}function b_e(){let t,e;return{promise:new Promise((i,n)=>{t=i,e=n}),resolve:t,reject:e}}var afe=class{constructor(){this.deferred=new Map;this.promises=new Map;this.limit=(0,tfe.default)(10)}set(e,r){let i=this.deferred.get(e);typeof i=="undefined"&&this.deferred.set(e,i=b_e());let n=this.limit(()=>r());return this.promises.set(e,n),n.then(()=>{this.promises.get(e)===n&&i.resolve()},s=>{this.promises.get(e)===n&&i.reject(s)}),i.promise}reduce(e,r){var n;let i=(n=this.promises.get(e))!=null?n:Promise.resolve();this.set(e,()=>r(i))}async wait(){await Promise.all(this.promises.values())}};var v_e={linkers:[LM]},S_e=v_e;var F0=()=>({modules:new Map([["@yarnpkg/cli",iC],["@yarnpkg/core",Fd],["@yarnpkg/fslib",ch],["@yarnpkg/libzip",Fp],["@yarnpkg/parsers",Hp],["@yarnpkg/shell",jp],["clipanion",F$(vh)],["semver",x_e],["typanion",lu],["yup",k_e],["@yarnpkg/plugin-essentials",hL],["@yarnpkg/plugin-compat",mL],["@yarnpkg/plugin-dlx",EL],["@yarnpkg/plugin-file",xL],["@yarnpkg/plugin-git",fL],["@yarnpkg/plugin-github",PL],["@yarnpkg/plugin-http",FL],["@yarnpkg/plugin-init",ML],["@yarnpkg/plugin-link",GL],["@yarnpkg/plugin-nm",mT],["@yarnpkg/plugin-npm",yM],["@yarnpkg/plugin-npm-cli",vM],["@yarnpkg/plugin-pack",CM],["@yarnpkg/plugin-patch",NM],["@yarnpkg/plugin-pnp",oT],["@yarnpkg/plugin-pnpm",TM]]),plugins:new Set(["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-dlx","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm"])});i0({binaryVersion:Zr||"",pluginConfiguration:F0()});})(); +/*! + * buildToken + * Builds OAuth token prefix (helper function) + * + * @name buildToken + * @function + * @param {GitUrl} obj The parsed Git url object. + * @return {String} token prefix + */ +/*! + * fill-range + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Licensed under the MIT License. + */ +/*! + * is-extglob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ +/*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ +/*! + * is-number + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Released under the MIT License. + */ +/*! + * is-windows + * + * Copyright © 2015-2018, Jon Schlinkert. + * Released under the MIT License. + */ +/*! + * to-regex-range + * + * Copyright (c) 2015-present, Jon Schlinkert. + * Released under the MIT License. + */ diff --git a/.yarn/releases/yarn-sources.cjs b/.yarn/releases/yarn-sources.cjs deleted file mode 100755 index d8f366f6f1f6..000000000000 --- a/.yarn/releases/yarn-sources.cjs +++ /dev/null @@ -1,631 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable */ -//prettier-ignore -(()=>{var Noe=Object.create,pg=Object.defineProperty,Moe=Object.defineProperties,Ooe=Object.getOwnPropertyDescriptor,Toe=Object.getOwnPropertyDescriptors,Koe=Object.getOwnPropertyNames,gC=Object.getOwnPropertySymbols,Uoe=Object.getPrototypeOf,uw=Object.prototype.hasOwnProperty,IL=Object.prototype.propertyIsEnumerable;var EL=(t,e,r)=>e in t?pg(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,P=(t,e)=>{for(var r in e||(e={}))uw.call(e,r)&&EL(t,r,e[r]);if(gC)for(var r of gC(e))IL.call(e,r)&&EL(t,r,e[r]);return t},V=(t,e)=>Moe(t,Toe(e)),Yoe=t=>pg(t,"__esModule",{value:!0});var Rr=(t,e)=>{var r={};for(var i in t)uw.call(t,i)&&e.indexOf(i)<0&&(r[i]=t[i]);if(t!=null&&gC)for(var i of gC(t))e.indexOf(i)<0&&IL.call(t,i)&&(r[i]=t[i]);return r},Hoe=(t,e)=>()=>(t&&(e=t(t=0)),e),C=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),et=(t,e)=>{for(var r in e)pg(t,r,{get:e[r],enumerable:!0})},joe=(t,e,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Koe(e))!uw.call(t,i)&&i!=="default"&&pg(t,i,{get:()=>e[i],enumerable:!(r=Ooe(e,i))||r.enumerable});return t},re=t=>joe(Yoe(pg(t!=null?Noe(Uoe(t)):{},"default",t&&t.__esModule&&"default"in t?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t);var XL=C((J4e,JL)=>{JL.exports=WL;WL.sync=iae;var zL=require("fs");function nae(t,e){var r=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!r||(r=r.split(";"),r.indexOf("")!==-1))return!0;for(var i=0;i{ZL.exports=_L;_L.sync=sae;var $L=require("fs");function _L(t,e,r){$L.stat(t,function(i,n){r(i,i?!1:eN(n,e))})}function sae(t,e){return eN($L.statSync(t),e)}function eN(t,e){return t.isFile()&&oae(t,e)}function oae(t,e){var r=t.mode,i=t.uid,n=t.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt("100",8),l=parseInt("010",8),c=parseInt("001",8),u=a|l,g=r&c||r&l&&n===o||r&a&&i===s||r&u&&s===0;return g}});var iN=C((V4e,rN)=>{var z4e=require("fs"),bC;process.platform==="win32"||global.TESTING_WINDOWS?bC=XL():bC=tN();rN.exports=Sw;Sw.sync=aae;function Sw(t,e,r){if(typeof e=="function"&&(r=e,e={}),!r){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(i,n){Sw(t,e||{},function(s,o){s?n(s):i(o)})})}bC(t,e||{},function(i,n){i&&(i.code==="EACCES"||e&&e.ignoreErrors)&&(i=null,n=!1),r(i,n)})}function aae(t,e){try{return bC.sync(t,e||{})}catch(r){if(e&&e.ignoreErrors||r.code==="EACCES")return!1;throw r}}});var cN=C((X4e,nN)=>{var xl=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",sN=require("path"),Aae=xl?";":":",oN=iN(),aN=t=>Object.assign(new Error(`not found: ${t}`),{code:"ENOENT"}),AN=(t,e)=>{let r=e.colon||Aae,i=t.match(/\//)||xl&&t.match(/\\/)?[""]:[...xl?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(r)],n=xl?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",s=xl?n.split(r):[""];return xl&&t.indexOf(".")!==-1&&s[0]!==""&&s.unshift(""),{pathEnv:i,pathExt:s,pathExtExe:n}},lN=(t,e,r)=>{typeof e=="function"&&(r=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=AN(t,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(aN(t));let f=i[c],h=/^".*"$/.test(f)?f.slice(1,-1):f,p=sN.join(h,t),m=!h&&/^\.[\\\/]/.test(t)?t.slice(0,2)+p:p;u(l(m,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];oN(c+p,{pathExt:s},(m,I)=>{if(!m&&I)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return r?a(0).then(c=>r(null,c),r):a(0)},lae=(t,e)=>{e=e||{};let{pathEnv:r,pathExt:i,pathExtExe:n}=AN(t,e),s=[];for(let o=0;o{"use strict";var uN=(t={})=>{let e=t.env||process.env;return(t.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(i=>i.toUpperCase()==="PATH")||"Path"};xw.exports=uN;xw.exports.default=uN});var dN=C((_4e,fN)=>{"use strict";var hN=require("path"),cae=cN(),uae=gN();function pN(t,e){let r=t.options.env||process.env,i=process.cwd(),n=t.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(t.options.cwd)}catch(a){}let o;try{o=cae.sync(t.command,{path:r[uae({env:r})],pathExt:e?hN.delimiter:void 0})}catch(a){}finally{s&&process.chdir(i)}return o&&(o=hN.resolve(n?t.options.cwd:"",o)),o}function gae(t){return pN(t)||pN(t,!0)}fN.exports=gae});var CN=C(($4e,kw)=>{"use strict";var Pw=/([()\][%!^"`<>&|;, *?])/g;function fae(t){return t=t.replace(Pw,"^$1"),t}function hae(t,e){return t=`${t}`,t=t.replace(/(\\*)"/g,'$1$1\\"'),t=t.replace(/(\\*)$/,"$1$1"),t=`"${t}"`,t=t.replace(Pw,"^$1"),e&&(t=t.replace(Pw,"^$1")),t}kw.exports.command=fae;kw.exports.argument=hae});var IN=C((e8e,mN)=>{"use strict";mN.exports=/^#!(.*)/});var yN=C((t8e,EN)=>{"use strict";var pae=IN();EN.exports=(t="")=>{let e=t.match(pae);if(!e)return null;let[r,i]=e[0].replace(/#! ?/,"").split(" "),n=r.split("/").pop();return n==="env"?i:i?`${n} ${i}`:n}});var wN=C((r8e,BN)=>{"use strict";var vw=require("fs"),dae=yN();function Cae(t){let e=150,r=Buffer.alloc(e),i;try{i=vw.openSync(t,"r"),vw.readSync(i,r,0,e,0),vw.closeSync(i)}catch(n){}return dae(r.toString())}BN.exports=Cae});var SN=C((i8e,QN)=>{"use strict";var mae=require("path"),bN=dN(),DN=CN(),Iae=wN(),Eae=process.platform==="win32",yae=/\.(?:com|exe)$/i,Bae=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function wae(t){t.file=bN(t);let e=t.file&&Iae(t.file);return e?(t.args.unshift(t.file),t.command=e,bN(t)):t.file}function Qae(t){if(!Eae)return t;let e=wae(t),r=!yae.test(e);if(t.options.forceShell||r){let i=Bae.test(e);t.command=mae.normalize(t.command),t.command=DN.command(t.command),t.args=t.args.map(s=>DN.argument(s,i));let n=[t.command].concat(t.args).join(" ");t.args=["/d","/s","/c",`"${n}"`],t.command=process.env.comspec||"cmd.exe",t.options.windowsVerbatimArguments=!0}return t}function bae(t,e,r){e&&!Array.isArray(e)&&(r=e,e=null),e=e?e.slice(0):[],r=Object.assign({},r);let i={command:t,args:e,options:r,file:void 0,original:{command:t,args:e}};return r.shell?i:Qae(i)}QN.exports=bae});var PN=C((n8e,xN)=>{"use strict";var Fw=process.platform==="win32";function Rw(t,e){return Object.assign(new Error(`${e} ${t.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${t.command}`,path:t.command,spawnargs:t.args})}function Dae(t,e){if(!Fw)return;let r=t.emit;t.emit=function(i,n){if(i==="exit"){let s=kN(n,e,"spawn");if(s)return r.call(t,"error",s)}return r.apply(t,arguments)}}function kN(t,e){return Fw&&t===1&&!e.file?Rw(e.original,"spawn"):null}function Sae(t,e){return Fw&&t===1&&!e.file?Rw(e.original,"spawnSync"):null}xN.exports={hookChildProcess:Dae,verifyENOENT:kN,verifyENOENTSync:Sae,notFoundError:Rw}});var Mw=C((s8e,kl)=>{"use strict";var vN=require("child_process"),Lw=SN(),Nw=PN();function FN(t,e,r){let i=Lw(t,e,r),n=vN.spawn(i.command,i.args,i.options);return Nw.hookChildProcess(n,i),n}function xae(t,e,r){let i=Lw(t,e,r),n=vN.spawnSync(i.command,i.args,i.options);return n.error=n.error||Nw.verifyENOENTSync(n.status,i),n}kl.exports=FN;kl.exports.spawn=FN;kl.exports.sync=xae;kl.exports._parse=Lw;kl.exports._enoent=Nw});var LN=C((c8e,RN)=>{"use strict";RN.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var qw=C((u8e,NN)=>{var vg=LN(),MN={};for(let t of Object.keys(vg))MN[vg[t]]=t;var Ge={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};NN.exports=Ge;for(let t of Object.keys(Ge)){if(!("channels"in Ge[t]))throw new Error("missing channels property: "+t);if(!("labels"in Ge[t]))throw new Error("missing channel labels property: "+t);if(Ge[t].labels.length!==Ge[t].channels)throw new Error("channel and label counts mismatch: "+t);let{channels:e,labels:r}=Ge[t];delete Ge[t].channels,delete Ge[t].labels,Object.defineProperty(Ge[t],"channels",{value:e}),Object.defineProperty(Ge[t],"labels",{value:r})}Ge.rgb.hsl=function(t){let e=t[0]/255,r=t[1]/255,i=t[2]/255,n=Math.min(e,r,i),s=Math.max(e,r,i),o=s-n,a,l;s===n?a=0:e===s?a=(r-i)/o:r===s?a=2+(i-e)/o:i===s&&(a=4+(e-r)/o),a=Math.min(a*60,360),a<0&&(a+=360);let c=(n+s)/2;return s===n?l=0:c<=.5?l=o/(s+n):l=o/(2-s-n),[a,l*100,c*100]};Ge.rgb.hsv=function(t){let e,r,i,n,s,o=t[0]/255,a=t[1]/255,l=t[2]/255,c=Math.max(o,a,l),u=c-Math.min(o,a,l),g=function(f){return(c-f)/6/u+1/2};return u===0?(n=0,s=0):(s=u/c,e=g(o),r=g(a),i=g(l),o===c?n=i-r:a===c?n=1/3+e-i:l===c&&(n=2/3+r-e),n<0?n+=1:n>1&&(n-=1)),[n*360,s*100,c*100]};Ge.rgb.hwb=function(t){let e=t[0],r=t[1],i=t[2],n=Ge.rgb.hsl(t)[0],s=1/255*Math.min(e,Math.min(r,i));return i=1-1/255*Math.max(e,Math.max(r,i)),[n,s*100,i*100]};Ge.rgb.cmyk=function(t){let e=t[0]/255,r=t[1]/255,i=t[2]/255,n=Math.min(1-e,1-r,1-i),s=(1-e-n)/(1-n)||0,o=(1-r-n)/(1-n)||0,a=(1-i-n)/(1-n)||0;return[s*100,o*100,a*100,n*100]};function vae(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}Ge.rgb.keyword=function(t){let e=MN[t];if(e)return e;let r=Infinity,i;for(let n of Object.keys(vg)){let s=vg[n],o=vae(t,s);o.04045?((e+.055)/1.055)**2.4:e/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,i=i>.04045?((i+.055)/1.055)**2.4:i/12.92;let n=e*.4124+r*.3576+i*.1805,s=e*.2126+r*.7152+i*.0722,o=e*.0193+r*.1192+i*.9505;return[n*100,s*100,o*100]};Ge.rgb.lab=function(t){let e=Ge.rgb.xyz(t),r=e[0],i=e[1],n=e[2];r/=95.047,i/=100,n/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,i=i>.008856?i**(1/3):7.787*i+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let s=116*i-16,o=500*(r-i),a=200*(i-n);return[s,o,a]};Ge.hsl.rgb=function(t){let e=t[0]/360,r=t[1]/100,i=t[2]/100,n,s,o;if(r===0)return o=i*255,[o,o,o];i<.5?n=i*(1+r):n=i+r-i*r;let a=2*i-n,l=[0,0,0];for(let c=0;c<3;c++)s=e+1/3*-(c-1),s<0&&s++,s>1&&s--,6*s<1?o=a+(n-a)*6*s:2*s<1?o=n:3*s<2?o=a+(n-a)*(2/3-s)*6:o=a,l[c]=o*255;return l};Ge.hsl.hsv=function(t){let e=t[0],r=t[1]/100,i=t[2]/100,n=r,s=Math.max(i,.01);i*=2,r*=i<=1?i:2-i,n*=s<=1?s:2-s;let o=(i+r)/2,a=i===0?2*n/(s+n):2*r/(i+r);return[e,a*100,o*100]};Ge.hsv.rgb=function(t){let e=t[0]/60,r=t[1]/100,i=t[2]/100,n=Math.floor(e)%6,s=e-Math.floor(e),o=255*i*(1-r),a=255*i*(1-r*s),l=255*i*(1-r*(1-s));switch(i*=255,n){case 0:return[i,l,o];case 1:return[a,i,o];case 2:return[o,i,l];case 3:return[o,a,i];case 4:return[l,o,i];case 5:return[i,o,a]}};Ge.hsv.hsl=function(t){let e=t[0],r=t[1]/100,i=t[2]/100,n=Math.max(i,.01),s,o;o=(2-r)*i;let a=(2-r)*n;return s=r*n,s/=a<=1?a:2-a,s=s||0,o/=2,[e,s*100,o*100]};Ge.hwb.rgb=function(t){let e=t[0]/360,r=t[1]/100,i=t[2]/100,n=r+i,s;n>1&&(r/=n,i/=n);let o=Math.floor(6*e),a=1-i;s=6*e-o,(o&1)!=0&&(s=1-s);let l=r+s*(a-r),c,u,g;switch(o){default:case 6:case 0:c=a,u=l,g=r;break;case 1:c=l,u=a,g=r;break;case 2:c=r,u=a,g=l;break;case 3:c=r,u=l,g=a;break;case 4:c=l,u=r,g=a;break;case 5:c=a,u=r,g=l;break}return[c*255,u*255,g*255]};Ge.cmyk.rgb=function(t){let e=t[0]/100,r=t[1]/100,i=t[2]/100,n=t[3]/100,s=1-Math.min(1,e*(1-n)+n),o=1-Math.min(1,r*(1-n)+n),a=1-Math.min(1,i*(1-n)+n);return[s*255,o*255,a*255]};Ge.xyz.rgb=function(t){let e=t[0]/100,r=t[1]/100,i=t[2]/100,n,s,o;return n=e*3.2406+r*-1.5372+i*-.4986,s=e*-.9689+r*1.8758+i*.0415,o=e*.0557+r*-.204+i*1.057,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,n=Math.min(Math.max(0,n),1),s=Math.min(Math.max(0,s),1),o=Math.min(Math.max(0,o),1),[n*255,s*255,o*255]};Ge.xyz.lab=function(t){let e=t[0],r=t[1],i=t[2];e/=95.047,r/=100,i/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let n=116*r-16,s=500*(e-r),o=200*(r-i);return[n,s,o]};Ge.lab.xyz=function(t){let e=t[0],r=t[1],i=t[2],n,s,o;s=(e+16)/116,n=r/500+s,o=s-i/200;let a=s**3,l=n**3,c=o**3;return s=a>.008856?a:(s-16/116)/7.787,n=l>.008856?l:(n-16/116)/7.787,o=c>.008856?c:(o-16/116)/7.787,n*=95.047,s*=100,o*=108.883,[n,s,o]};Ge.lab.lch=function(t){let e=t[0],r=t[1],i=t[2],n;n=Math.atan2(i,r)*360/2/Math.PI,n<0&&(n+=360);let o=Math.sqrt(r*r+i*i);return[e,o,n]};Ge.lch.lab=function(t){let e=t[0],r=t[1],n=t[2]/360*2*Math.PI,s=r*Math.cos(n),o=r*Math.sin(n);return[e,s,o]};Ge.rgb.ansi16=function(t,e=null){let[r,i,n]=t,s=e===null?Ge.rgb.hsv(t)[2]:e;if(s=Math.round(s/50),s===0)return 30;let o=30+(Math.round(n/255)<<2|Math.round(i/255)<<1|Math.round(r/255));return s===2&&(o+=60),o};Ge.hsv.ansi16=function(t){return Ge.rgb.ansi16(Ge.hsv.rgb(t),t[2])};Ge.rgb.ansi256=function(t){let e=t[0],r=t[1],i=t[2];return e===r&&r===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(i/255*5)};Ge.ansi16.rgb=function(t){let e=t%10;if(e===0||e===7)return t>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let r=(~~(t>50)+1)*.5,i=(e&1)*r*255,n=(e>>1&1)*r*255,s=(e>>2&1)*r*255;return[i,n,s]};Ge.ansi256.rgb=function(t){if(t>=232){let s=(t-232)*10+8;return[s,s,s]}t-=16;let e,r=Math.floor(t/36)/5*255,i=Math.floor((e=t%36)/6)/5*255,n=e%6/5*255;return[r,i,n]};Ge.rgb.hex=function(t){let r=(((Math.round(t[0])&255)<<16)+((Math.round(t[1])&255)<<8)+(Math.round(t[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};Ge.hex.rgb=function(t){let e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let r=e[0];e[0].length===3&&(r=r.split("").map(a=>a+a).join(""));let i=parseInt(r,16),n=i>>16&255,s=i>>8&255,o=i&255;return[n,s,o]};Ge.rgb.hcg=function(t){let e=t[0]/255,r=t[1]/255,i=t[2]/255,n=Math.max(Math.max(e,r),i),s=Math.min(Math.min(e,r),i),o=n-s,a,l;return o<1?a=s/(1-o):a=0,o<=0?l=0:n===e?l=(r-i)/o%6:n===r?l=2+(i-e)/o:l=4+(e-r)/o,l/=6,l%=1,[l*360,o*100,a*100]};Ge.hsl.hcg=function(t){let e=t[1]/100,r=t[2]/100,i=r<.5?2*e*r:2*e*(1-r),n=0;return i<1&&(n=(r-.5*i)/(1-i)),[t[0],i*100,n*100]};Ge.hsv.hcg=function(t){let e=t[1]/100,r=t[2]/100,i=e*r,n=0;return i<1&&(n=(r-i)/(1-i)),[t[0],i*100,n*100]};Ge.hcg.rgb=function(t){let e=t[0]/360,r=t[1]/100,i=t[2]/100;if(r===0)return[i*255,i*255,i*255];let n=[0,0,0],s=e%1*6,o=s%1,a=1-o,l=0;switch(Math.floor(s)){case 0:n[0]=1,n[1]=o,n[2]=0;break;case 1:n[0]=a,n[1]=1,n[2]=0;break;case 2:n[0]=0,n[1]=1,n[2]=o;break;case 3:n[0]=0,n[1]=a,n[2]=1;break;case 4:n[0]=o,n[1]=0,n[2]=1;break;default:n[0]=1,n[1]=0,n[2]=a}return l=(1-r)*i,[(r*n[0]+l)*255,(r*n[1]+l)*255,(r*n[2]+l)*255]};Ge.hcg.hsv=function(t){let e=t[1]/100,r=t[2]/100,i=e+r*(1-e),n=0;return i>0&&(n=e/i),[t[0],n*100,i*100]};Ge.hcg.hsl=function(t){let e=t[1]/100,i=t[2]/100*(1-e)+.5*e,n=0;return i>0&&i<.5?n=e/(2*i):i>=.5&&i<1&&(n=e/(2*(1-i))),[t[0],n*100,i*100]};Ge.hcg.hwb=function(t){let e=t[1]/100,r=t[2]/100,i=e+r*(1-e);return[t[0],(i-e)*100,(1-i)*100]};Ge.hwb.hcg=function(t){let e=t[1]/100,r=t[2]/100,i=1-r,n=i-e,s=0;return n<1&&(s=(i-n)/(1-n)),[t[0],n*100,s*100]};Ge.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]};Ge.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]};Ge.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]};Ge.gray.hsl=function(t){return[0,0,t[0]]};Ge.gray.hsv=Ge.gray.hsl;Ge.gray.hwb=function(t){return[0,100,t[0]]};Ge.gray.cmyk=function(t){return[0,0,0,t[0]]};Ge.gray.lab=function(t){return[t[0],0,0]};Ge.gray.hex=function(t){let e=Math.round(t[0]/100*255)&255,i=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(i.length)+i};Ge.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}});var TN=C((g8e,ON)=>{var DC=qw();function Fae(){let t={},e=Object.keys(DC);for(let r=e.length,i=0;i{var Jw=qw(),Mae=TN(),Pl={},Oae=Object.keys(Jw);function Tae(t){let e=function(...r){let i=r[0];return i==null?i:(i.length>1&&(r=i),t(r))};return"conversion"in t&&(e.conversion=t.conversion),e}function Kae(t){let e=function(...r){let i=r[0];if(i==null)return i;i.length>1&&(r=i);let n=t(r);if(typeof n=="object")for(let s=n.length,o=0;o{Pl[t]={},Object.defineProperty(Pl[t],"channels",{value:Jw[t].channels}),Object.defineProperty(Pl[t],"labels",{value:Jw[t].labels});let e=Mae(t);Object.keys(e).forEach(i=>{let n=e[i];Pl[t][i]=Kae(n),Pl[t][i].raw=Tae(n)})});KN.exports=Pl});var JN=C((h8e,YN)=>{"use strict";var HN=(t,e)=>(...r)=>`[${t(...r)+e}m`,jN=(t,e)=>(...r)=>{let i=t(...r);return`[${38+e};5;${i}m`},GN=(t,e)=>(...r)=>{let i=t(...r);return`[${38+e};2;${i[0]};${i[1]};${i[2]}m`},SC=t=>t,qN=(t,e,r)=>[t,e,r],vl=(t,e,r)=>{Object.defineProperty(t,e,{get:()=>{let i=r();return Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0}),i},enumerable:!0,configurable:!0})},Ww,Fl=(t,e,r,i)=>{Ww===void 0&&(Ww=UN());let n=i?10:0,s={};for(let[o,a]of Object.entries(Ww)){let l=o==="ansi16"?"ansi":o;o===e?s[l]=t(r,n):typeof a=="object"&&(s[l]=t(a[e],n))}return s};function Uae(){let t=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[r,i]of Object.entries(e)){for(let[n,s]of Object.entries(i))e[n]={open:`[${s[0]}m`,close:`[${s[1]}m`},i[n]=e[n],t.set(s[0],s[1]);Object.defineProperty(e,r,{value:i,enumerable:!1})}return Object.defineProperty(e,"codes",{value:t,enumerable:!1}),e.color.close="",e.bgColor.close="",vl(e.color,"ansi",()=>Fl(HN,"ansi16",SC,!1)),vl(e.color,"ansi256",()=>Fl(jN,"ansi256",SC,!1)),vl(e.color,"ansi16m",()=>Fl(GN,"rgb",qN,!1)),vl(e.bgColor,"ansi",()=>Fl(HN,"ansi16",SC,!0)),vl(e.bgColor,"ansi256",()=>Fl(jN,"ansi256",SC,!0)),vl(e.bgColor,"ansi16m",()=>Fl(GN,"rgb",qN,!0)),e}Object.defineProperty(YN,"exports",{enumerable:!0,get:Uae})});var zN=C((p8e,WN)=>{"use strict";WN.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",i=e.indexOf(r+t),n=e.indexOf("--");return i!==-1&&(n===-1||i{"use strict";var Yae=require("os"),XN=require("tty"),on=zN(),{env:dr}=process,No;on("no-color")||on("no-colors")||on("color=false")||on("color=never")?No=0:(on("color")||on("colors")||on("color=true")||on("color=always"))&&(No=1);"FORCE_COLOR"in dr&&(dr.FORCE_COLOR==="true"?No=1:dr.FORCE_COLOR==="false"?No=0:No=dr.FORCE_COLOR.length===0?1:Math.min(parseInt(dr.FORCE_COLOR,10),3));function zw(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function Vw(t,e){if(No===0)return 0;if(on("color=16m")||on("color=full")||on("color=truecolor"))return 3;if(on("color=256"))return 2;if(t&&!e&&No===void 0)return 0;let r=No||0;if(dr.TERM==="dumb")return r;if(process.platform==="win32"){let i=Yae.release().split(".");return Number(i[0])>=10&&Number(i[2])>=10586?Number(i[2])>=14931?3:2:1}if("CI"in dr)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(i=>i in dr)||dr.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in dr)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(dr.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in dr)return 1;if(dr.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in dr){let i=parseInt((dr.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(dr.TERM_PROGRAM){case"iTerm.app":return i>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(dr.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(dr.TERM)||"COLORTERM"in dr?1:r}function Hae(t){let e=Vw(t,t&&t.isTTY);return zw(e)}VN.exports={supportsColor:Hae,stdout:zw(Vw(!0,XN.isatty(1))),stderr:zw(Vw(!0,XN.isatty(2)))}});var $N=C((C8e,_N)=>{"use strict";var jae=(t,e,r)=>{let i=t.indexOf(e);if(i===-1)return t;let n=e.length,s=0,o="";do o+=t.substr(s,i-s)+e+r,s=i+n,i=t.indexOf(e,s);while(i!==-1);return o+=t.substr(s),o},Gae=(t,e,r,i)=>{let n=0,s="";do{let o=t[i-1]==="\r";s+=t.substr(n,(o?i-1:i)-n)+e+(o?`\r -`:` -`)+r,n=i+1,i=t.indexOf(` -`,n)}while(i!==-1);return s+=t.substr(n),s};_N.exports={stringReplaceAll:jae,stringEncaseCRLFWithFirstIndex:Gae}});var nM=C((m8e,eM)=>{"use strict";var qae=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,tM=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,Jae=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,Wae=/\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|([^\\])/gi,zae=new Map([["n",` -`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e",""],["a","\x07"]]);function rM(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):zae.get(t)||t}function Vae(t,e){let r=[],i=e.trim().split(/\s*,\s*/g),n;for(let s of i){let o=Number(s);if(!Number.isNaN(o))r.push(o);else if(n=s.match(Jae))r.push(n[2].replace(Wae,(a,l,c)=>l?rM(l):c));else throw new Error(`Invalid Chalk template style argument: ${s} (in style '${t}')`)}return r}function Xae(t){tM.lastIndex=0;let e=[],r;for(;(r=tM.exec(t))!==null;){let i=r[1];if(r[2]){let n=Vae(i,r[2]);e.push([i].concat(n))}else e.push([i])}return e}function iM(t,e){let r={};for(let n of e)for(let s of n.styles)r[s[0]]=n.inverse?null:s.slice(1);let i=t;for(let[n,s]of Object.entries(r))if(!!Array.isArray(s)){if(!(n in i))throw new Error(`Unknown Chalk style: ${n}`);i=s.length>0?i[n](...s):i[n]}return i}eM.exports=(t,e)=>{let r=[],i=[],n=[];if(e.replace(qae,(s,o,a,l,c,u)=>{if(o)n.push(rM(o));else if(l){let g=n.join("");n=[],i.push(r.length===0?g:iM(t,r)(g)),r.push({inverse:a,styles:Xae(l)})}else if(c){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");i.push(iM(t,r)(n.join(""))),n=[],r.pop()}else n.push(u)}),i.push(n.join("")),r.length>0){let s=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(s)}return i.join("")}});var eQ=C((I8e,sM)=>{"use strict";var Fg=JN(),{stdout:Xw,stderr:Zw}=ZN(),{stringReplaceAll:Zae,stringEncaseCRLFWithFirstIndex:_ae}=$N(),oM=["ansi","ansi","ansi256","ansi16m"],Rl=Object.create(null),$ae=(t,e={})=>{if(e.level>3||e.level<0)throw new Error("The `level` option should be an integer from 0 to 3");let r=Xw?Xw.level:0;t.level=e.level===void 0?r:e.level},aM=class{constructor(e){return AM(e)}},AM=t=>{let e={};return $ae(e,t),e.template=(...r)=>eAe(e.template,...r),Object.setPrototypeOf(e,xC.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=aM,e.template};function xC(t){return AM(t)}for(let[t,e]of Object.entries(Fg))Rl[t]={get(){let r=kC(this,_w(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};Rl.visible={get(){let t=kC(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var lM=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of lM)Rl[t]={get(){let{level:e}=this;return function(...r){let i=_w(Fg.color[oM[e]][t](...r),Fg.color.close,this._styler);return kC(this,i,this._isEmpty)}}};for(let t of lM){let e="bg"+t[0].toUpperCase()+t.slice(1);Rl[e]={get(){let{level:r}=this;return function(...i){let n=_w(Fg.bgColor[oM[r]][t](...i),Fg.bgColor.close,this._styler);return kC(this,n,this._isEmpty)}}}}var tAe=Object.defineProperties(()=>{},V(P({},Rl),{level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}})),_w=(t,e,r)=>{let i,n;return r===void 0?(i=t,n=e):(i=r.openAll+t,n=e+r.closeAll),{open:t,close:e,openAll:i,closeAll:n,parent:r}},kC=(t,e,r)=>{let i=(...n)=>rAe(i,n.length===1?""+n[0]:n.join(" "));return i.__proto__=tAe,i._generator=t,i._styler=e,i._isEmpty=r,i},rAe=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:i,closeAll:n}=r;if(e.indexOf("")!==-1)for(;r!==void 0;)e=Zae(e,r.close,r.open),r=r.parent;let s=e.indexOf(` -`);return s!==-1&&(e=_ae(e,n,i,s)),i+e+n},$w,eAe=(t,...e)=>{let[r]=e;if(!Array.isArray(r))return e.join(" ");let i=e.slice(1),n=[r.raw[0]];for(let s=1;s{cM.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY_BUILD_BASE",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}}]});var Lg=C(Ki=>{"use strict";var gM=uM(),Zn=process.env;Object.defineProperty(Ki,"_vendors",{value:gM.map(function(t){return t.constant})});Ki.name=null;Ki.isPR=null;gM.forEach(function(t){var e=Array.isArray(t.env)?t.env:[t.env],r=e.every(function(i){return fM(i)});if(Ki[t.constant]=r,r)switch(Ki.name=t.name,typeof t.pr){case"string":Ki.isPR=!!Zn[t.pr];break;case"object":"env"in t.pr?Ki.isPR=t.pr.env in Zn&&Zn[t.pr.env]!==t.pr.ne:"any"in t.pr?Ki.isPR=t.pr.any.some(function(i){return!!Zn[i]}):Ki.isPR=fM(t.pr);break;default:Ki.isPR=null}});Ki.isCI=!!(Zn.CI||Zn.CONTINUOUS_INTEGRATION||Zn.BUILD_NUMBER||Zn.RUN_ID||Ki.name);function fM(t){return typeof t=="string"?!!Zn[t]:Object.keys(t).every(function(e){return Zn[e]===t[e]})}});var PC=C(an=>{"use strict";an.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;an.find=(t,e)=>t.nodes.find(r=>r.type===e);an.exceedsLimit=(t,e,r=1,i)=>i===!1||!an.isInteger(t)||!an.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=i;an.escapeNode=(t,e=0,r)=>{let i=t.nodes[e];!i||(r&&i.type===r||i.type==="open"||i.type==="close")&&i.escaped!==!0&&(i.value="\\"+i.value,i.escaped=!0)};an.encloseBrace=t=>t.type!=="brace"?!1:t.commas>>0+t.ranges>>0==0?(t.invalid=!0,!0):!1;an.isInvalidBrace=t=>t.type!=="brace"?!1:t.invalid===!0||t.dollar?!0:t.commas>>0+t.ranges>>0==0||t.open!==!0||t.close!==!0?(t.invalid=!0,!0):!1;an.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;an.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);an.flatten=(...t)=>{let e=[],r=i=>{for(let n=0;n{"use strict";var pM=PC();hM.exports=(t,e={})=>{let r=(i,n={})=>{let s=e.escapeInvalid&&pM.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a="";if(i.value)return(s||o)&&pM.isOpenOrClose(i)?"\\"+i.value:i.value;if(i.value)return i.value;if(i.nodes)for(let l of i.nodes)a+=r(l);return a};return r(t)}});var CM=C((Q8e,dM)=>{"use strict";dM.exports=function(t){return typeof t=="number"?t-t==0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var DM=C((b8e,mM)=>{"use strict";var IM=CM(),Va=(t,e,r)=>{if(IM(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(IM(e)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let i=P({relaxZeros:!0},r);typeof i.strictZeros=="boolean"&&(i.relaxZeros=i.strictZeros===!1);let n=String(i.relaxZeros),s=String(i.shorthand),o=String(i.capture),a=String(i.wrap),l=t+":"+e+"="+n+s+o+a;if(Va.cache.hasOwnProperty(l))return Va.cache[l].result;let c=Math.min(t,e),u=Math.max(t,e);if(Math.abs(c-u)===1){let m=t+"|"+e;return i.capture?`(${m})`:i.wrap===!1?m:`(?:${m})`}let g=yM(t)||yM(e),f={min:t,max:e,a:c,b:u},h=[],p=[];if(g&&(f.isPadded=g,f.maxLen=String(f.max).length),c<0){let m=u<0?Math.abs(u):1;p=EM(m,Math.abs(c),f,i),c=f.a=0}return u>=0&&(h=EM(c,u,f,i)),f.negatives=p,f.positives=h,f.result=iAe(p,h,i),i.capture===!0?f.result=`(${f.result})`:i.wrap!==!1&&h.length+p.length>1&&(f.result=`(?:${f.result})`),Va.cache[l]=f,f.result};function iAe(t,e,r){let i=tQ(t,e,"-",!1,r)||[],n=tQ(e,t,"",!1,r)||[],s=tQ(t,e,"-?",!0,r)||[];return i.concat(s).concat(n).join("|")}function sAe(t,e){let r=1,i=1,n=BM(t,r),s=new Set([e]);for(;t<=n&&n<=e;)s.add(n),r+=1,n=BM(t,r);for(n=wM(e+1,i)-1;t1&&a.count.pop(),a.count.push(u.count[0]),a.string=a.pattern+QM(a.count),o=c+1;continue}r.isPadded&&(g=lAe(c,r,i)),u.string=g+u.pattern+QM(u.count),s.push(u),o=c+1,a=u}return s}function tQ(t,e,r,i,n){let s=[];for(let o of t){let{string:a}=o;!i&&!bM(e,"string",a)&&s.push(r+a),i&&bM(e,"string",a)&&s.push(r+a)}return s}function oAe(t,e){let r=[];for(let i=0;ie?1:e>t?-1:0}function bM(t,e,r){return t.some(i=>i[e]===r)}function BM(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function wM(t,e){return t-t%Math.pow(10,e)}function QM(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function aAe(t,e,r){return`[${t}${e-t==1?"":"-"}${e}]`}function yM(t){return/^-?(0+)\d/.test(t)}function lAe(t,e,r){if(!e.isPadded)return t;let i=Math.abs(e.maxLen-String(t).length),n=r.relaxZeros!==!1;switch(i){case 0:return"";case 1:return n?"0?":"0";case 2:return n?"0{0,2}":"00";default:return n?`0{0,${i}}`:`0{${i}}`}}Va.cache={};Va.clearCache=()=>Va.cache={};mM.exports=Va});var nQ=C((D8e,SM)=>{"use strict";var cAe=require("util"),xM=DM(),kM=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),uAe=t=>e=>t===!0?Number(e):String(e),rQ=t=>typeof t=="number"||typeof t=="string"&&t!=="",Ng=t=>Number.isInteger(+t),iQ=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},gAe=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,fAe=(t,e,r)=>{if(e>0){let i=t[0]==="-"?"-":"";i&&(t=t.slice(1)),t=i+t.padStart(i?e-1:e,"0")}return r===!1?String(t):t},PM=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length{t.negatives.sort((o,a)=>oa?1:0),t.positives.sort((o,a)=>oa?1:0);let r=e.capture?"":"?:",i="",n="",s;return t.positives.length&&(i=t.positives.join("|")),t.negatives.length&&(n=`-(${r}${t.negatives.join("|")})`),i&&n?s=`${i}|${n}`:s=i||n,e.wrap?`(${r}${s})`:s},vM=(t,e,r,i)=>{if(r)return xM(t,e,P({wrap:!1},i));let n=String.fromCharCode(t);if(t===e)return n;let s=String.fromCharCode(e);return`[${n}-${s}]`},FM=(t,e,r)=>{if(Array.isArray(t)){let i=r.wrap===!0,n=r.capture?"":"?:";return i?`(${n}${t.join("|")})`:t.join("|")}return xM(t,e,r)},RM=(...t)=>new RangeError("Invalid range arguments: "+cAe.inspect(...t)),LM=(t,e,r)=>{if(r.strictRanges===!0)throw RM([t,e]);return[]},pAe=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},dAe=(t,e,r=1,i={})=>{let n=Number(t),s=Number(e);if(!Number.isInteger(n)||!Number.isInteger(s)){if(i.strictRanges===!0)throw RM([t,e]);return[]}n===0&&(n=0),s===0&&(s=0);let o=n>s,a=String(t),l=String(e),c=String(r);r=Math.max(Math.abs(r),1);let u=iQ(a)||iQ(l)||iQ(c),g=u?Math.max(a.length,l.length,c.length):0,f=u===!1&&gAe(t,e,i)===!1,h=i.transform||uAe(f);if(i.toRegex&&r===1)return vM(PM(t,g),PM(e,g),!0,i);let p={negatives:[],positives:[]},m=B=>p[B<0?"negatives":"positives"].push(Math.abs(B)),I=[],y=0;for(;o?n>=s:n<=s;)i.toRegex===!0&&r>1?m(n):I.push(fAe(h(n,y),g,f)),n=o?n-r:n+r,y++;return i.toRegex===!0?r>1?hAe(p,i):FM(I,null,P({wrap:!1},i)):I},CAe=(t,e,r=1,i={})=>{if(!Ng(t)&&t.length>1||!Ng(e)&&e.length>1)return LM(t,e,i);let n=i.transform||(f=>String.fromCharCode(f)),s=`${t}`.charCodeAt(0),o=`${e}`.charCodeAt(0),a=s>o,l=Math.min(s,o),c=Math.max(s,o);if(i.toRegex&&r===1)return vM(l,c,!1,i);let u=[],g=0;for(;a?s>=o:s<=o;)u.push(n(s,g)),s=a?s-r:s+r,g++;return i.toRegex===!0?FM(u,null,{wrap:!1,options:i}):u},FC=(t,e,r,i={})=>{if(e==null&&rQ(t))return[t];if(!rQ(t)||!rQ(e))return LM(t,e,i);if(typeof r=="function")return FC(t,e,1,{transform:r});if(kM(r))return FC(t,e,0,r);let n=P({},i);return n.capture===!0&&(n.wrap=!0),r=r||n.step||1,Ng(r)?Ng(t)&&Ng(e)?dAe(t,e,r,n):CAe(t,e,Math.max(Math.abs(r),1),n):r!=null&&!kM(r)?pAe(r,n):FC(t,e,1,r)};SM.exports=FC});var OM=C((S8e,NM)=>{"use strict";var mAe=nQ(),MM=PC(),IAe=(t,e={})=>{let r=(i,n={})=>{let s=MM.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=s===!0||o===!0,l=e.escapeInvalid===!0?"\\":"",c="";if(i.isOpen===!0||i.isClose===!0)return l+i.value;if(i.type==="open")return a?l+i.value:"(";if(i.type==="close")return a?l+i.value:")";if(i.type==="comma")return i.prev.type==="comma"?"":a?i.value:"|";if(i.value)return i.value;if(i.nodes&&i.ranges>0){let u=MM.reduce(i.nodes),g=mAe(...u,V(P({},e),{wrap:!1,toRegex:!0}));if(g.length!==0)return u.length>1&&g.length>1?`(${g})`:g}if(i.nodes)for(let u of i.nodes)c+=r(u,i);return c};return r(t)};NM.exports=IAe});var UM=C((x8e,TM)=>{"use strict";var EAe=nQ(),KM=vC(),Ll=PC(),Xa=(t="",e="",r=!1)=>{let i=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?Ll.flatten(e).map(n=>`{${n}}`):e;for(let n of t)if(Array.isArray(n))for(let s of n)i.push(Xa(s,e,r));else for(let s of e)r===!0&&typeof s=="string"&&(s=`{${s}}`),i.push(Array.isArray(s)?Xa(n,s,r):n+s);return Ll.flatten(i)},yAe=(t,e={})=>{let r=e.rangeLimit===void 0?1e3:e.rangeLimit,i=(n,s={})=>{n.queue=[];let o=s,a=s.queue;for(;o.type!=="brace"&&o.type!=="root"&&o.parent;)o=o.parent,a=o.queue;if(n.invalid||n.dollar){a.push(Xa(a.pop(),KM(n,e)));return}if(n.type==="brace"&&n.invalid!==!0&&n.nodes.length===2){a.push(Xa(a.pop(),["{}"]));return}if(n.nodes&&n.ranges>0){let g=Ll.reduce(n.nodes);if(Ll.exceedsLimit(...g,e.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let f=EAe(...g,e);f.length===0&&(f=KM(n,e)),a.push(Xa(a.pop(),f)),n.nodes=[];return}let l=Ll.encloseBrace(n),c=n.queue,u=n;for(;u.type!=="brace"&&u.type!=="root"&&u.parent;)u=u.parent,c=u.queue;for(let g=0;g{"use strict";YM.exports={MAX_LENGTH:1024*64,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:` -`,CHAR_NO_BREAK_SPACE:"\xA0",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:" ",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var WM=C((P8e,jM)=>{"use strict";var BAe=vC(),{MAX_LENGTH:GM,CHAR_BACKSLASH:sQ,CHAR_BACKTICK:wAe,CHAR_COMMA:QAe,CHAR_DOT:bAe,CHAR_LEFT_PARENTHESES:DAe,CHAR_RIGHT_PARENTHESES:SAe,CHAR_LEFT_CURLY_BRACE:xAe,CHAR_RIGHT_CURLY_BRACE:kAe,CHAR_LEFT_SQUARE_BRACKET:qM,CHAR_RIGHT_SQUARE_BRACKET:JM,CHAR_DOUBLE_QUOTE:PAe,CHAR_SINGLE_QUOTE:vAe,CHAR_NO_BREAK_SPACE:FAe,CHAR_ZERO_WIDTH_NOBREAK_SPACE:RAe}=HM(),LAe=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},i=typeof r.maxLength=="number"?Math.min(GM,r.maxLength):GM;if(t.length>i)throw new SyntaxError(`Input length (${t.length}), exceeds max characters (${i})`);let n={type:"root",input:t,nodes:[]},s=[n],o=n,a=n,l=0,c=t.length,u=0,g=0,f,h={},p=()=>t[u++],m=I=>{if(I.type==="text"&&a.type==="dot"&&(a.type="text"),a&&a.type==="text"&&I.type==="text"){a.value+=I.value;return}return o.nodes.push(I),I.parent=o,I.prev=a,a=I,I};for(m({type:"bos"});u0){if(o.ranges>0){o.ranges=0;let I=o.nodes.shift();o.nodes=[I,{type:"text",value:BAe(o)}]}m({type:"comma",value:f}),o.commas++;continue}if(f===bAe&&g>0&&o.commas===0){let I=o.nodes;if(g===0||I.length===0){m({type:"text",value:f});continue}if(a.type==="dot"){if(o.range=[],a.value+=f,a.type="range",o.nodes.length!==3&&o.nodes.length!==5){o.invalid=!0,o.ranges=0,a.type="text";continue}o.ranges++,o.args=[];continue}if(a.type==="range"){I.pop();let y=I[I.length-1];y.value+=a.value+f,a=y,o.ranges--;continue}m({type:"dot",value:f});continue}m({type:"text",value:f})}do if(o=s.pop(),o.type!=="root"){o.nodes.forEach(B=>{B.nodes||(B.type==="open"&&(B.isOpen=!0),B.type==="close"&&(B.isClose=!0),B.nodes||(B.type="text"),B.invalid=!0)});let I=s[s.length-1],y=I.nodes.indexOf(o);I.nodes.splice(y,1,...o.nodes)}while(s.length>0);return m({type:"eos"}),n};jM.exports=LAe});var XM=C((v8e,zM)=>{"use strict";var VM=vC(),NAe=OM(),MAe=UM(),OAe=WM(),Ui=(t,e={})=>{let r=[];if(Array.isArray(t))for(let i of t){let n=Ui.create(i,e);Array.isArray(n)?r.push(...n):r.push(n)}else r=[].concat(Ui.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};Ui.parse=(t,e={})=>OAe(t,e);Ui.stringify=(t,e={})=>typeof t=="string"?VM(Ui.parse(t,e),e):VM(t,e);Ui.compile=(t,e={})=>(typeof t=="string"&&(t=Ui.parse(t,e)),NAe(t,e));Ui.expand=(t,e={})=>{typeof t=="string"&&(t=Ui.parse(t,e));let r=MAe(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};Ui.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?Ui.compile(t,e):Ui.expand(t,e);zM.exports=Ui});var Mg=C((F8e,ZM)=>{"use strict";var TAe=require("path"),_n="\\\\/",_M=`[^${_n}]`,Ts="\\.",KAe="\\+",UAe="\\?",RC="\\/",YAe="(?=.)",$M="[^/]",oQ=`(?:${RC}|$)`,eO=`(?:^|${RC})`,aQ=`${Ts}{1,2}${oQ}`,HAe=`(?!${Ts})`,jAe=`(?!${eO}${aQ})`,GAe=`(?!${Ts}{0,1}${oQ})`,qAe=`(?!${aQ})`,JAe=`[^.${RC}]`,WAe=`${$M}*?`,tO={DOT_LITERAL:Ts,PLUS_LITERAL:KAe,QMARK_LITERAL:UAe,SLASH_LITERAL:RC,ONE_CHAR:YAe,QMARK:$M,END_ANCHOR:oQ,DOTS_SLASH:aQ,NO_DOT:HAe,NO_DOTS:jAe,NO_DOT_SLASH:GAe,NO_DOTS_SLASH:qAe,QMARK_NO_DOT:JAe,STAR:WAe,START_ANCHOR:eO},zAe=V(P({},tO),{SLASH_LITERAL:`[${_n}]`,QMARK:_M,STAR:`${_M}*?`,DOTS_SLASH:`${Ts}{1,2}(?:[${_n}]|$)`,NO_DOT:`(?!${Ts})`,NO_DOTS:`(?!(?:^|[${_n}])${Ts}{1,2}(?:[${_n}]|$))`,NO_DOT_SLASH:`(?!${Ts}{0,1}(?:[${_n}]|$))`,NO_DOTS_SLASH:`(?!${Ts}{1,2}(?:[${_n}]|$))`,QMARK_NO_DOT:`[^.${_n}]`,START_ANCHOR:`(?:^|[${_n}])`,END_ANCHOR:`(?:[${_n}]|$)`}),VAe={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"};ZM.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:VAe,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,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,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,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,CHAR_NO_BREAK_SPACE:160,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,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:TAe.sep,extglobChars(t){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${t.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(t){return t===!0?zAe:tO}}});var Og=C(wi=>{"use strict";var XAe=require("path"),ZAe=process.platform==="win32",{REGEX_BACKSLASH:_Ae,REGEX_REMOVE_BACKSLASH:$Ae,REGEX_SPECIAL_CHARS:ele,REGEX_SPECIAL_CHARS_GLOBAL:tle}=Mg();wi.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);wi.hasRegexChars=t=>ele.test(t);wi.isRegexChar=t=>t.length===1&&wi.hasRegexChars(t);wi.escapeRegex=t=>t.replace(tle,"\\$1");wi.toPosixSlashes=t=>t.replace(_Ae,"/");wi.removeBackslashes=t=>t.replace($Ae,e=>e==="\\"?"":e);wi.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};wi.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:ZAe===!0||XAe.sep==="\\";wi.escapeLast=(t,e,r)=>{let i=t.lastIndexOf(e,r);return i===-1?t:t[i-1]==="\\"?wi.escapeLast(t,e,i-1):`${t.slice(0,i)}\\${t.slice(i)}`};wi.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};wi.wrapOutput=(t,e={},r={})=>{let i=r.contains?"":"^",n=r.contains?"":"$",s=`${i}(?:${t})${n}`;return e.negated===!0&&(s=`(?:^(?!${s}).*$)`),s}});var cO=C((L8e,rO)=>{"use strict";var iO=Og(),{CHAR_ASTERISK:AQ,CHAR_AT:rle,CHAR_BACKWARD_SLASH:Tg,CHAR_COMMA:ile,CHAR_DOT:lQ,CHAR_EXCLAMATION_MARK:nO,CHAR_FORWARD_SLASH:sO,CHAR_LEFT_CURLY_BRACE:cQ,CHAR_LEFT_PARENTHESES:uQ,CHAR_LEFT_SQUARE_BRACKET:nle,CHAR_PLUS:sle,CHAR_QUESTION_MARK:oO,CHAR_RIGHT_CURLY_BRACE:ole,CHAR_RIGHT_PARENTHESES:aO,CHAR_RIGHT_SQUARE_BRACKET:ale}=Mg(),AO=t=>t===sO||t===Tg,lO=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?Infinity:1)},Ale=(t,e)=>{let r=e||{},i=t.length-1,n=r.parts===!0||r.scanToEnd===!0,s=[],o=[],a=[],l=t,c=-1,u=0,g=0,f=!1,h=!1,p=!1,m=!1,I=!1,y=!1,B=!1,x=!1,F=!1,L=0,T,v,q={value:"",depth:0,isGlob:!1},oe=()=>c>=i,U=()=>l.charCodeAt(c+1),A=()=>(T=v,l.charCodeAt(++c));for(;c0&&(ee=l.slice(0,u),l=l.slice(u),g-=u),W&&p===!0&&g>0?(W=l.slice(0,g),ie=l.slice(g)):p===!0?(W="",ie=l):W=l,W&&W!==""&&W!=="/"&&W!==l&&AO(W.charCodeAt(W.length-1))&&(W=W.slice(0,-1)),r.unescape===!0&&(ie&&(ie=iO.removeBackslashes(ie)),W&&B===!0&&(W=iO.removeBackslashes(W)));let J={prefix:ee,input:t,start:u,base:W,glob:ie,isBrace:f,isBracket:h,isGlob:p,isExtglob:m,isGlobstar:I,negated:x};if(r.tokens===!0&&(J.maxDepth=0,AO(v)||o.push(q),J.tokens=o),r.parts===!0||r.tokens===!0){let R;for(let ve=0;ve{"use strict";var LC=Mg(),Yi=Og(),{MAX_LENGTH:NC,POSIX_REGEX_SOURCE:lle,REGEX_NON_SPECIAL_CHARS:cle,REGEX_SPECIAL_CHARS_BACKREF:ule,REPLACEMENTS:gO}=LC,gle=(t,e)=>{if(typeof e.expandRange=="function")return e.expandRange(...t,e);t.sort();let r=`[${t.join("-")}]`;try{new RegExp(r)}catch(i){return t.map(n=>Yi.escapeRegex(n)).join("..")}return r},Nl=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,fO=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=gO[t]||t;let r=P({},e),i=typeof r.maxLength=="number"?Math.min(NC,r.maxLength):NC,n=t.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);let s={type:"bos",value:"",output:r.prepend||""},o=[s],a=r.capture?"":"?:",l=Yi.isWindows(e),c=LC.globChars(l),u=LC.extglobChars(c),{DOT_LITERAL:g,PLUS_LITERAL:f,SLASH_LITERAL:h,ONE_CHAR:p,DOTS_SLASH:m,NO_DOT:I,NO_DOT_SLASH:y,NO_DOTS_SLASH:B,QMARK:x,QMARK_NO_DOT:F,STAR:L,START_ANCHOR:T}=c,v=X=>`(${a}(?:(?!${T}${X.dot?m:g}).)*?)`,q=r.dot?"":I,oe=r.dot?x:F,U=r.bash===!0?v(r):L;r.capture&&(U=`(${U})`),typeof r.noext=="boolean"&&(r.noextglob=r.noext);let A={input:t,index:-1,start:0,dot:r.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:o};t=Yi.removePrefix(t,A),n=t.length;let W=[],ee=[],ie=[],J=s,R,ve=()=>A.index===n-1,Fe=A.peek=(X=1)=>t[A.index+X],Ke=A.advance=()=>t[++A.index],qe=()=>t.slice(A.index+1),te=(X="",Ae=0)=>{A.consumed+=X,A.index+=Ae},le=X=>{A.output+=X.output!=null?X.output:X.value,te(X.value)},Se=()=>{let X=1;for(;Fe()==="!"&&(Fe(2)!=="("||Fe(3)==="?");)Ke(),A.start++,X++;return X%2==0?!1:(A.negated=!0,A.start++,!0)},fe=X=>{A[X]++,ie.push(X)},Ie=X=>{A[X]--,ie.pop()},de=X=>{if(J.type==="globstar"){let Ae=A.braces>0&&(X.type==="comma"||X.type==="brace"),ue=X.extglob===!0||W.length&&(X.type==="pipe"||X.type==="paren");X.type!=="slash"&&X.type!=="paren"&&!Ae&&!ue&&(A.output=A.output.slice(0,-J.output.length),J.type="star",J.value="*",J.output=U,A.output+=J.output)}if(W.length&&X.type!=="paren"&&!u[X.value]&&(W[W.length-1].inner+=X.value),(X.value||X.output)&&le(X),J&&J.type==="text"&&X.type==="text"){J.value+=X.value,J.output=(J.output||"")+X.value;return}X.prev=J,o.push(X),J=X},we=(X,Ae)=>{let ue=V(P({},u[Ae]),{conditions:1,inner:""});ue.prev=J,ue.parens=A.parens,ue.output=A.output;let Be=(r.capture?"(":"")+ue.open;fe("parens"),de({type:X,value:Ae,output:A.output?"":p}),de({type:"paren",extglob:!0,value:Ke(),output:Be}),W.push(ue)},Z=X=>{let Ae=X.close+(r.capture?")":"");if(X.type==="negate"){let ue=U;X.inner&&X.inner.length>1&&X.inner.includes("/")&&(ue=v(r)),(ue!==U||ve()||/^\)+$/.test(qe()))&&(Ae=X.close=`)$))${ue}`),X.prev.type==="bos"&&(A.negatedExtglob=!0)}de({type:"paren",extglob:!0,value:R,output:Ae}),Ie("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let X=!1,Ae=t.replace(ule,(ue,Be,at,mt,St,xn)=>mt==="\\"?(X=!0,ue):mt==="?"?Be?Be+mt+(St?x.repeat(St.length):""):xn===0?oe+(St?x.repeat(St.length):""):x.repeat(at.length):mt==="."?g.repeat(at.length):mt==="*"?Be?Be+mt+(St?U:""):U:Be?ue:`\\${ue}`);return X===!0&&(r.unescape===!0?Ae=Ae.replace(/\\/g,""):Ae=Ae.replace(/\\+/g,ue=>ue.length%2==0?"\\\\":ue?"\\":"")),Ae===t&&r.contains===!0?(A.output=t,A):(A.output=Yi.wrapOutput(Ae,A,e),A)}for(;!ve();){if(R=Ke(),R==="\0")continue;if(R==="\\"){let ue=Fe();if(ue==="/"&&r.bash!==!0||ue==="."||ue===";")continue;if(!ue){R+="\\",de({type:"text",value:R});continue}let Be=/^\\+/.exec(qe()),at=0;if(Be&&Be[0].length>2&&(at=Be[0].length,A.index+=at,at%2!=0&&(R+="\\")),r.unescape===!0?R=Ke()||"":R+=Ke()||"",A.brackets===0){de({type:"text",value:R});continue}}if(A.brackets>0&&(R!=="]"||J.value==="["||J.value==="[^")){if(r.posix!==!1&&R===":"){let ue=J.value.slice(1);if(ue.includes("[")&&(J.posix=!0,ue.includes(":"))){let Be=J.value.lastIndexOf("["),at=J.value.slice(0,Be),mt=J.value.slice(Be+2),St=lle[mt];if(St){J.value=at+St,A.backtrack=!0,Ke(),!s.output&&o.indexOf(J)===1&&(s.output=p);continue}}}(R==="["&&Fe()!==":"||R==="-"&&Fe()==="]")&&(R=`\\${R}`),R==="]"&&(J.value==="["||J.value==="[^")&&(R=`\\${R}`),r.posix===!0&&R==="!"&&J.value==="["&&(R="^"),J.value+=R,le({value:R});continue}if(A.quotes===1&&R!=='"'){R=Yi.escapeRegex(R),J.value+=R,le({value:R});continue}if(R==='"'){A.quotes=A.quotes===1?0:1,r.keepQuotes===!0&&de({type:"text",value:R});continue}if(R==="("){fe("parens"),de({type:"paren",value:R});continue}if(R===")"){if(A.parens===0&&r.strictBrackets===!0)throw new SyntaxError(Nl("opening","("));let ue=W[W.length-1];if(ue&&A.parens===ue.parens+1){Z(W.pop());continue}de({type:"paren",value:R,output:A.parens?")":"\\)"}),Ie("parens");continue}if(R==="["){if(r.nobracket===!0||!qe().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(Nl("closing","]"));R=`\\${R}`}else fe("brackets");de({type:"bracket",value:R});continue}if(R==="]"){if(r.nobracket===!0||J&&J.type==="bracket"&&J.value.length===1){de({type:"text",value:R,output:`\\${R}`});continue}if(A.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(Nl("opening","["));de({type:"text",value:R,output:`\\${R}`});continue}Ie("brackets");let ue=J.value.slice(1);if(J.posix!==!0&&ue[0]==="^"&&!ue.includes("/")&&(R=`/${R}`),J.value+=R,le({value:R}),r.literalBrackets===!1||Yi.hasRegexChars(ue))continue;let Be=Yi.escapeRegex(J.value);if(A.output=A.output.slice(0,-J.value.length),r.literalBrackets===!0){A.output+=Be,J.value=Be;continue}J.value=`(${a}${Be}|${J.value})`,A.output+=J.value;continue}if(R==="{"&&r.nobrace!==!0){fe("braces");let ue={type:"brace",value:R,output:"(",outputIndex:A.output.length,tokensIndex:A.tokens.length};ee.push(ue),de(ue);continue}if(R==="}"){let ue=ee[ee.length-1];if(r.nobrace===!0||!ue){de({type:"text",value:R,output:R});continue}let Be=")";if(ue.dots===!0){let at=o.slice(),mt=[];for(let St=at.length-1;St>=0&&(o.pop(),at[St].type!=="brace");St--)at[St].type!=="dots"&&mt.unshift(at[St].value);Be=gle(mt,r),A.backtrack=!0}if(ue.comma!==!0&&ue.dots!==!0){let at=A.output.slice(0,ue.outputIndex),mt=A.tokens.slice(ue.tokensIndex);ue.value=ue.output="\\{",R=Be="\\}",A.output=at;for(let St of mt)A.output+=St.output||St.value}de({type:"brace",value:R,output:Be}),Ie("braces"),ee.pop();continue}if(R==="|"){W.length>0&&W[W.length-1].conditions++,de({type:"text",value:R});continue}if(R===","){let ue=R,Be=ee[ee.length-1];Be&&ie[ie.length-1]==="braces"&&(Be.comma=!0,ue="|"),de({type:"comma",value:R,output:ue});continue}if(R==="/"){if(J.type==="dot"&&A.index===A.start+1){A.start=A.index+1,A.consumed="",A.output="",o.pop(),J=s;continue}de({type:"slash",value:R,output:h});continue}if(R==="."){if(A.braces>0&&J.type==="dot"){J.value==="."&&(J.output=g);let ue=ee[ee.length-1];J.type="dots",J.output+=R,J.value+=R,ue.dots=!0;continue}if(A.braces+A.parens===0&&J.type!=="bos"&&J.type!=="slash"){de({type:"text",value:R,output:g});continue}de({type:"dot",value:R,output:g});continue}if(R==="?"){if(!(J&&J.value==="(")&&r.noextglob!==!0&&Fe()==="("&&Fe(2)!=="?"){we("qmark",R);continue}if(J&&J.type==="paren"){let Be=Fe(),at=R;if(Be==="<"&&!Yi.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(J.value==="("&&!/[!=<:]/.test(Be)||Be==="<"&&!/<([!=]|\w+>)/.test(qe()))&&(at=`\\${R}`),de({type:"text",value:R,output:at});continue}if(r.dot!==!0&&(J.type==="slash"||J.type==="bos")){de({type:"qmark",value:R,output:F});continue}de({type:"qmark",value:R,output:x});continue}if(R==="!"){if(r.noextglob!==!0&&Fe()==="("&&(Fe(2)!=="?"||!/[!=<:]/.test(Fe(3)))){we("negate",R);continue}if(r.nonegate!==!0&&A.index===0){Se();continue}}if(R==="+"){if(r.noextglob!==!0&&Fe()==="("&&Fe(2)!=="?"){we("plus",R);continue}if(J&&J.value==="("||r.regex===!1){de({type:"plus",value:R,output:f});continue}if(J&&(J.type==="bracket"||J.type==="paren"||J.type==="brace")||A.parens>0){de({type:"plus",value:R});continue}de({type:"plus",value:f});continue}if(R==="@"){if(r.noextglob!==!0&&Fe()==="("&&Fe(2)!=="?"){de({type:"at",extglob:!0,value:R,output:""});continue}de({type:"text",value:R});continue}if(R!=="*"){(R==="$"||R==="^")&&(R=`\\${R}`);let ue=cle.exec(qe());ue&&(R+=ue[0],A.index+=ue[0].length),de({type:"text",value:R});continue}if(J&&(J.type==="globstar"||J.star===!0)){J.type="star",J.star=!0,J.value+=R,J.output=U,A.backtrack=!0,A.globstar=!0,te(R);continue}let X=qe();if(r.noextglob!==!0&&/^\([^?]/.test(X)){we("star",R);continue}if(J.type==="star"){if(r.noglobstar===!0){te(R);continue}let ue=J.prev,Be=ue.prev,at=ue.type==="slash"||ue.type==="bos",mt=Be&&(Be.type==="star"||Be.type==="globstar");if(r.bash===!0&&(!at||X[0]&&X[0]!=="/")){de({type:"star",value:R,output:""});continue}let St=A.braces>0&&(ue.type==="comma"||ue.type==="brace"),xn=W.length&&(ue.type==="pipe"||ue.type==="paren");if(!at&&ue.type!=="paren"&&!St&&!xn){de({type:"star",value:R,output:""});continue}for(;X.slice(0,3)==="/**";){let Ii=t[A.index+4];if(Ii&&Ii!=="/")break;X=X.slice(3),te("/**",3)}if(ue.type==="bos"&&ve()){J.type="globstar",J.value+=R,J.output=v(r),A.output=J.output,A.globstar=!0,te(R);continue}if(ue.type==="slash"&&ue.prev.type!=="bos"&&!mt&&ve()){A.output=A.output.slice(0,-(ue.output+J.output).length),ue.output=`(?:${ue.output}`,J.type="globstar",J.output=v(r)+(r.strictSlashes?")":"|$)"),J.value+=R,A.globstar=!0,A.output+=ue.output+J.output,te(R);continue}if(ue.type==="slash"&&ue.prev.type!=="bos"&&X[0]==="/"){let Ii=X[1]!==void 0?"|$":"";A.output=A.output.slice(0,-(ue.output+J.output).length),ue.output=`(?:${ue.output}`,J.type="globstar",J.output=`${v(r)}${h}|${h}${Ii})`,J.value+=R,A.output+=ue.output+J.output,A.globstar=!0,te(R+Ke()),de({type:"slash",value:"/",output:""});continue}if(ue.type==="bos"&&X[0]==="/"){J.type="globstar",J.value+=R,J.output=`(?:^|${h}|${v(r)}${h})`,A.output=J.output,A.globstar=!0,te(R+Ke()),de({type:"slash",value:"/",output:""});continue}A.output=A.output.slice(0,-J.output.length),J.type="globstar",J.output=v(r),J.value+=R,A.output+=J.output,A.globstar=!0,te(R);continue}let Ae={type:"star",value:R,output:U};if(r.bash===!0){Ae.output=".*?",(J.type==="bos"||J.type==="slash")&&(Ae.output=q+Ae.output),de(Ae);continue}if(J&&(J.type==="bracket"||J.type==="paren")&&r.regex===!0){Ae.output=R,de(Ae);continue}(A.index===A.start||J.type==="slash"||J.type==="dot")&&(J.type==="dot"?(A.output+=y,J.output+=y):r.dot===!0?(A.output+=B,J.output+=B):(A.output+=q,J.output+=q),Fe()!=="*"&&(A.output+=p,J.output+=p)),de(Ae)}for(;A.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(Nl("closing","]"));A.output=Yi.escapeLast(A.output,"["),Ie("brackets")}for(;A.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(Nl("closing",")"));A.output=Yi.escapeLast(A.output,"("),Ie("parens")}for(;A.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(Nl("closing","}"));A.output=Yi.escapeLast(A.output,"{"),Ie("braces")}if(r.strictSlashes!==!0&&(J.type==="star"||J.type==="bracket")&&de({type:"maybe_slash",value:"",output:`${h}?`}),A.backtrack===!0){A.output="";for(let X of A.tokens)A.output+=X.output!=null?X.output:X.value,X.suffix&&(A.output+=X.suffix)}return A};fO.fastpaths=(t,e)=>{let r=P({},e),i=typeof r.maxLength=="number"?Math.min(NC,r.maxLength):NC,n=t.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);t=gO[t]||t;let s=Yi.isWindows(e),{DOT_LITERAL:o,SLASH_LITERAL:a,ONE_CHAR:l,DOTS_SLASH:c,NO_DOT:u,NO_DOTS:g,NO_DOTS_SLASH:f,STAR:h,START_ANCHOR:p}=LC.globChars(s),m=r.dot?g:u,I=r.dot?f:u,y=r.capture?"":"?:",B={negated:!1,prefix:""},x=r.bash===!0?".*?":h;r.capture&&(x=`(${x})`);let F=q=>q.noglobstar===!0?x:`(${y}(?:(?!${p}${q.dot?c:o}).)*?)`,L=q=>{switch(q){case"*":return`${m}${l}${x}`;case".*":return`${o}${l}${x}`;case"*.*":return`${m}${x}${o}${l}${x}`;case"*/*":return`${m}${x}${a}${l}${I}${x}`;case"**":return m+F(r);case"**/*":return`(?:${m}${F(r)}${a})?${I}${l}${x}`;case"**/*.*":return`(?:${m}${F(r)}${a})?${I}${x}${o}${l}${x}`;case"**/.*":return`(?:${m}${F(r)}${a})?${o}${l}${x}`;default:{let oe=/^(.*?)\.(\w+)$/.exec(q);if(!oe)return;let U=L(oe[1]);return U?U+o+oe[2]:void 0}}},T=Yi.removePrefix(t,B),v=L(T);return v&&r.strictSlashes!==!0&&(v+=`${a}?`),v};uO.exports=fO});var dO=C((M8e,pO)=>{"use strict";var fle=require("path"),hle=cO(),gQ=hO(),fQ=Og(),ple=Mg(),dle=t=>t&&typeof t=="object"&&!Array.isArray(t),nr=(t,e,r=!1)=>{if(Array.isArray(t)){let u=t.map(f=>nr(f,e,r));return f=>{for(let h of u){let p=h(f);if(p)return p}return!1}}let i=dle(t)&&t.tokens&&t.input;if(t===""||typeof t!="string"&&!i)throw new TypeError("Expected pattern to be a non-empty string");let n=e||{},s=fQ.isWindows(e),o=i?nr.compileRe(t,e):nr.makeRe(t,e,!1,!0),a=o.state;delete o.state;let l=()=>!1;if(n.ignore){let u=V(P({},e),{ignore:null,onMatch:null,onResult:null});l=nr(n.ignore,u,r)}let c=(u,g=!1)=>{let{isMatch:f,match:h,output:p}=nr.test(u,o,e,{glob:t,posix:s}),m={glob:t,state:a,regex:o,posix:s,input:u,output:p,match:h,isMatch:f};return typeof n.onResult=="function"&&n.onResult(m),f===!1?(m.isMatch=!1,g?m:!1):l(u)?(typeof n.onIgnore=="function"&&n.onIgnore(m),m.isMatch=!1,g?m:!1):(typeof n.onMatch=="function"&&n.onMatch(m),g?m:!0)};return r&&(c.state=a),c};nr.test=(t,e,r,{glob:i,posix:n}={})=>{if(typeof t!="string")throw new TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};let s=r||{},o=s.format||(n?fQ.toPosixSlashes:null),a=t===i,l=a&&o?o(t):t;return a===!1&&(l=o?o(t):t,a=l===i),(a===!1||s.capture===!0)&&(s.matchBase===!0||s.basename===!0?a=nr.matchBase(t,e,r,n):a=e.exec(l)),{isMatch:Boolean(a),match:a,output:l}};nr.matchBase=(t,e,r,i=fQ.isWindows(r))=>(e instanceof RegExp?e:nr.makeRe(e,r)).test(fle.basename(t));nr.isMatch=(t,e,r)=>nr(e,r)(t);nr.parse=(t,e)=>Array.isArray(t)?t.map(r=>nr.parse(r,e)):gQ(t,V(P({},e),{fastpaths:!1}));nr.scan=(t,e)=>hle(t,e);nr.compileRe=(t,e,r=!1,i=!1)=>{if(r===!0)return t.output;let n=e||{},s=n.contains?"":"^",o=n.contains?"":"$",a=`${s}(?:${t.output})${o}`;t&&t.negated===!0&&(a=`^(?!${a}).*$`);let l=nr.toRegex(a,e);return i===!0&&(l.state=t),l};nr.makeRe=(t,e,r=!1,i=!1)=>{if(!t||typeof t!="string")throw new TypeError("Expected a non-empty string");let n=e||{},s={negated:!1,fastpaths:!0},o="",a;return t.startsWith("./")&&(t=t.slice(2),o=s.prefix="./"),n.fastpaths!==!1&&(t[0]==="."||t[0]==="*")&&(a=gQ.fastpaths(t,e)),a===void 0?(s=gQ(t,e),s.prefix=o+(s.prefix||"")):s.output=a,nr.compileRe(s,e,r,i)};nr.toRegex=(t,e)=>{try{let r=e||{};return new RegExp(t,r.flags||(r.nocase?"i":""))}catch(r){if(e&&e.debug===!0)throw r;return/$^/}};nr.constants=ple;pO.exports=nr});var hQ=C((O8e,CO)=>{"use strict";CO.exports=dO()});var Hi=C((T8e,mO)=>{"use strict";var IO=require("util"),EO=XM(),$n=hQ(),pQ=Og(),yO=t=>typeof t=="string"&&(t===""||t==="./"),Wt=(t,e,r)=>{e=[].concat(e),t=[].concat(t);let i=new Set,n=new Set,s=new Set,o=0,a=u=>{s.add(u.output),r&&r.onResult&&r.onResult(u)};for(let u=0;u!i.has(u));if(r&&c.length===0){if(r.failglob===!0)throw new Error(`No matches found for "${e.join(", ")}"`);if(r.nonull===!0||r.nullglob===!0)return r.unescape?e.map(u=>u.replace(/\\/g,"")):e}return c};Wt.match=Wt;Wt.matcher=(t,e)=>$n(t,e);Wt.isMatch=(t,e,r)=>$n(e,r)(t);Wt.any=Wt.isMatch;Wt.not=(t,e,r={})=>{e=[].concat(e).map(String);let i=new Set,n=[],s=a=>{r.onResult&&r.onResult(a),n.push(a.output)},o=Wt(t,e,V(P({},r),{onResult:s}));for(let a of n)o.includes(a)||i.add(a);return[...i]};Wt.contains=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${IO.inspect(t)}"`);if(Array.isArray(e))return e.some(i=>Wt.contains(t,i,r));if(typeof e=="string"){if(yO(t)||yO(e))return!1;if(t.includes(e)||t.startsWith("./")&&t.slice(2).includes(e))return!0}return Wt.isMatch(t,e,V(P({},r),{contains:!0}))};Wt.matchKeys=(t,e,r)=>{if(!pQ.isObject(t))throw new TypeError("Expected the first argument to be an object");let i=Wt(Object.keys(t),e,r),n={};for(let s of i)n[s]=t[s];return n};Wt.some=(t,e,r)=>{let i=[].concat(t);for(let n of[].concat(e)){let s=$n(String(n),r);if(i.some(o=>s(o)))return!0}return!1};Wt.every=(t,e,r)=>{let i=[].concat(t);for(let n of[].concat(e)){let s=$n(String(n),r);if(!i.every(o=>s(o)))return!1}return!0};Wt.all=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${IO.inspect(t)}"`);return[].concat(e).every(i=>$n(i,r)(t))};Wt.capture=(t,e,r)=>{let i=pQ.isWindows(r),s=$n.makeRe(String(t),V(P({},r),{capture:!0})).exec(i?pQ.toPosixSlashes(e):e);if(s)return s.slice(1).map(o=>o===void 0?"":o)};Wt.makeRe=(...t)=>$n.makeRe(...t);Wt.scan=(...t)=>$n.scan(...t);Wt.parse=(t,e)=>{let r=[];for(let i of[].concat(t||[]))for(let n of EO(String(i),e))r.push($n.parse(n,e));return r};Wt.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!/\{.*\}/.test(t)?[t]:EO(t,e)};Wt.braceExpand=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return Wt.braces(t,V(P({},e),{expand:!0}))};mO.exports=Wt});var wO=C((K8e,BO)=>{"use strict";BO.exports=({onlyFirst:t=!1}={})=>{let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t?void 0:"g")}});var bO=C((U8e,QO)=>{"use strict";var Cle=wO();QO.exports=t=>typeof t=="string"?t.replace(Cle(),""):t});var Ol={};et(Ol,{KeyRelationship:()=>$a,applyCascade:()=>QQ,base64RegExp:()=>PO,colorStringAlphaRegExp:()=>kO,colorStringRegExp:()=>xO,computeKey:()=>Mo,getPrintable:()=>lr,hasExactLength:()=>NO,hasForbiddenKeys:()=>Vle,hasKeyRelationship:()=>DQ,hasMaxLength:()=>Fle,hasMinLength:()=>vle,hasMutuallyExclusiveKeys:()=>Xle,hasRequiredKeys:()=>zle,hasUniqueItems:()=>Rle,isArray:()=>wle,isAtLeast:()=>Mle,isAtMost:()=>Ole,isBase64:()=>Jle,isBoolean:()=>Ele,isDate:()=>Ble,isDict:()=>ble,isEnum:()=>ni,isHexColor:()=>qle,isISO8601:()=>Gle,isInExclusiveRange:()=>Kle,isInInclusiveRange:()=>Tle,isInstanceOf:()=>Sle,isInteger:()=>Ule,isJSON:()=>Wle,isLiteral:()=>mle,isLowerCase:()=>Yle,isNegative:()=>Lle,isNullable:()=>Ple,isNumber:()=>yle,isObject:()=>Dle,isOneOf:()=>xle,isOptional:()=>kle,isPositive:()=>Nle,isString:()=>wQ,isTuple:()=>Qle,isUUID4:()=>jle,isUnknown:()=>LO,isUpperCase:()=>Hle,iso8601RegExp:()=>BQ,makeCoercionFn:()=>_a,makeSetter:()=>RO,makeTrait:()=>FO,makeValidator:()=>At,matchesRegExp:()=>bQ,plural:()=>KC,pushError:()=>tt,simpleKeyRegExp:()=>SO,uuid4RegExp:()=>vO});function At({test:t}){return FO(t)()}function lr(t){return t===null?"null":t===void 0?"undefined":t===""?"an empty string":JSON.stringify(t)}function Mo(t,e){var r,i,n;return typeof e=="number"?`${(r=t==null?void 0:t.p)!==null&&r!==void 0?r:"."}[${e}]`:SO.test(e)?`${(i=t==null?void 0:t.p)!==null&&i!==void 0?i:""}.${e}`:`${(n=t==null?void 0:t.p)!==null&&n!==void 0?n:"."}[${JSON.stringify(e)}]`}function _a(t,e){return r=>{let i=t[e];return t[e]=r,_a(t,e).bind(null,i)}}function RO(t,e){return r=>{t[e]=r}}function KC(t,e,r){return t===1?e:r}function tt({errors:t,p:e}={},r){return t==null||t.push(`${e!=null?e:"."}: ${r}`),!1}function mle(t){return At({test:(e,r)=>e!==t?tt(r,`Expected a literal (got ${lr(t)})`):!0})}function ni(t){let e=Array.isArray(t)?t:Object.values(t),r=new Set(e);return At({test:(i,n)=>r.has(i)?!0:tt(n,`Expected a valid enumeration value (got ${lr(i)})`)})}var SO,xO,kO,PO,vO,BQ,FO,LO,wQ,Ile,Ele,yle,Ble,wle,Qle,ble,Dle,Sle,xle,QQ,kle,Ple,vle,Fle,NO,Rle,Lle,Nle,Mle,Ole,Tle,Kle,Ule,bQ,Yle,Hle,jle,Gle,qle,Jle,Wle,zle,Vle,Xle,$a,Zle,DQ,vn=Hoe(()=>{SO=/^[a-zA-Z_][a-zA-Z0-9_]*$/,xO=/^#[0-9a-f]{6}$/i,kO=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,PO=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,vO=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,BQ=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/,FO=t=>()=>t;LO=()=>At({test:(t,e)=>!0});wQ=()=>At({test:(t,e)=>typeof t!="string"?tt(e,`Expected a string (got ${lr(t)})`):!0});Ile=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]),Ele=()=>At({test:(t,e)=>{var r;if(typeof t!="boolean"){if(typeof(e==null?void 0:e.coercions)!="undefined"){if(typeof(e==null?void 0:e.coercion)=="undefined")return tt(e,"Unbound coercion result");let i=Ile.get(t);if(typeof i!="undefined")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,i)]),!0}return tt(e,`Expected a boolean (got ${lr(t)})`)}return!0}}),yle=()=>At({test:(t,e)=>{var r;if(typeof t!="number"){if(typeof(e==null?void 0:e.coercions)!="undefined"){if(typeof(e==null?void 0:e.coercion)=="undefined")return tt(e,"Unbound coercion result");let i;if(typeof t=="string"){let n;try{n=JSON.parse(t)}catch(s){}if(typeof n=="number")if(JSON.stringify(n)===t)i=n;else return tt(e,`Received a number that can't be safely represented by the runtime (${t})`)}if(typeof i!="undefined")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,i)]),!0}return tt(e,`Expected a number (got ${lr(t)})`)}return!0}}),Ble=()=>At({test:(t,e)=>{var r;if(!(t instanceof Date)){if(typeof(e==null?void 0:e.coercions)!="undefined"){if(typeof(e==null?void 0:e.coercion)=="undefined")return tt(e,"Unbound coercion result");let i;if(typeof t=="string"&&BQ.test(t))i=new Date(t);else{let n;if(typeof t=="string"){let s;try{s=JSON.parse(t)}catch(o){}typeof s=="number"&&(n=s)}else typeof t=="number"&&(n=t);if(typeof n!="undefined")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return tt(e,`Received a timestamp that can't be safely represented by the runtime (${t})`)}if(typeof i!="undefined")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,i)]),!0}return tt(e,`Expected a date (got ${lr(t)})`)}return!0}}),wle=(t,{delimiter:e}={})=>At({test:(r,i)=>{var n;if(typeof r=="string"&&typeof e!="undefined"&&typeof(i==null?void 0:i.coercions)!="undefined"){if(typeof(i==null?void 0:i.coercion)=="undefined")return tt(i,"Unbound coercion result");r=r.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:".",i.coercion.bind(null,r)])}if(!Array.isArray(r))return tt(i,`Expected an array (got ${lr(r)})`);let s=!0;for(let o=0,a=r.length;o{let r=NO(t.length);return At({test:(i,n)=>{var s;if(typeof i=="string"&&typeof e!="undefined"&&typeof(n==null?void 0:n.coercions)!="undefined"){if(typeof(n==null?void 0:n.coercion)=="undefined")return tt(n,"Unbound coercion result");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:".",n.coercion.bind(null,i)])}if(!Array.isArray(i))return tt(n,`Expected a tuple (got ${lr(i)})`);let o=r(i,Object.assign({},n));for(let a=0,l=i.length;aAt({test:(r,i)=>{if(typeof r!="object"||r===null)return tt(i,`Expected an object (got ${lr(r)})`);let n=Object.keys(r),s=!0;for(let o=0,a=n.length;o{let r=Object.keys(t);return At({test:(i,n)=>{if(typeof i!="object"||i===null)return tt(n,`Expected an object (got ${lr(i)})`);let s=new Set([...r,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l==="constructor"||l==="__proto__")a=tt(Object.assign(Object.assign({},n),{p:Mo(n,l)}),"Unsafe property name");else{let c=Object.prototype.hasOwnProperty.call(t,l)?t[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c!="undefined"?a=c(u,Object.assign(Object.assign({},n),{p:Mo(n,l),coercion:_a(i,l)}))&&a:e===null?a=tt(Object.assign(Object.assign({},n),{p:Mo(n,l)}),`Extraneous property (got ${lr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:RO(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},Sle=t=>At({test:(e,r)=>e instanceof t?!0:tt(r,`Expected an instance of ${t.name} (got ${lr(e)})`)}),xle=(t,{exclusive:e=!1}={})=>At({test:(r,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)!="undefined"?[]:void 0;for(let c=0,u=t.length;c1?tt(i,`Expected to match exactly a single predicate (matched ${a.join(", ")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),QQ=(t,e)=>At({test:(r,i)=>{var n,s;let o={value:r},a=typeof(i==null?void 0:i.coercions)!="undefined"?_a(o,"value"):void 0,l=typeof(i==null?void 0:i.coercions)!="undefined"?[]:void 0;if(!t(r,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l!="undefined")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)!="undefined"){if(o.value!==r){if(typeof(i==null?void 0:i.coercion)=="undefined")return tt(i,"Unbound coercion result");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:".",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),kle=t=>At({test:(e,r)=>typeof e=="undefined"?!0:t(e,r)}),Ple=t=>At({test:(e,r)=>e===null?!0:t(e,r)}),vle=t=>At({test:(e,r)=>e.length>=t?!0:tt(r,`Expected to have a length of at least ${t} elements (got ${e.length})`)}),Fle=t=>At({test:(e,r)=>e.length<=t?!0:tt(r,`Expected to have a length of at most ${t} elements (got ${e.length})`)}),NO=t=>At({test:(e,r)=>e.length!==t?tt(r,`Expected to have a length of exactly ${t} elements (got ${e.length})`):!0}),Rle=({map:t}={})=>At({test:(e,r)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;sAt({test:(t,e)=>t<=0?!0:tt(e,`Expected to be negative (got ${t})`)}),Nle=()=>At({test:(t,e)=>t>=0?!0:tt(e,`Expected to be positive (got ${t})`)}),Mle=t=>At({test:(e,r)=>e>=t?!0:tt(r,`Expected to be at least ${t} (got ${e})`)}),Ole=t=>At({test:(e,r)=>e<=t?!0:tt(r,`Expected to be at most ${t} (got ${e})`)}),Tle=(t,e)=>At({test:(r,i)=>r>=t&&r<=e?!0:tt(i,`Expected to be in the [${t}; ${e}] range (got ${r})`)}),Kle=(t,e)=>At({test:(r,i)=>r>=t&&rAt({test:(e,r)=>e!==Math.round(e)?tt(r,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:tt(r,`Expected to be a safe integer (got ${e})`)}),bQ=t=>At({test:(e,r)=>t.test(e)?!0:tt(r,`Expected to match the pattern ${t.toString()} (got ${lr(e)})`)}),Yle=()=>At({test:(t,e)=>t!==t.toLowerCase()?tt(e,`Expected to be all-lowercase (got ${t})`):!0}),Hle=()=>At({test:(t,e)=>t!==t.toUpperCase()?tt(e,`Expected to be all-uppercase (got ${t})`):!0}),jle=()=>At({test:(t,e)=>vO.test(t)?!0:tt(e,`Expected to be a valid UUID v4 (got ${lr(t)})`)}),Gle=()=>At({test:(t,e)=>BQ.test(t)?!1:tt(e,`Expected to be a valid ISO 8601 date string (got ${lr(t)})`)}),qle=({alpha:t=!1})=>At({test:(e,r)=>(t?xO.test(e):kO.test(e))?!0:tt(r,`Expected to be a valid hexadecimal color string (got ${lr(e)})`)}),Jle=()=>At({test:(t,e)=>PO.test(t)?!0:tt(e,`Expected to be a valid base 64 string (got ${lr(t)})`)}),Wle=(t=LO())=>At({test:(e,r)=>{let i;try{i=JSON.parse(e)}catch(n){return tt(r,`Expected to be a valid JSON string (got ${lr(e)})`)}return t(i,r)}}),zle=t=>{let e=new Set(t);return At({test:(r,i)=>{let n=new Set(Object.keys(r)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?tt(i,`Missing required ${KC(s.length,"property","properties")} ${s.map(o=>`"${o}"`).join(", ")}`):!0}})},Vle=t=>{let e=new Set(t);return At({test:(r,i)=>{let n=new Set(Object.keys(r)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?tt(i,`Forbidden ${KC(s.length,"property","properties")} ${s.map(o=>`"${o}"`).join(", ")}`):!0}})},Xle=t=>{let e=new Set(t);return At({test:(r,i)=>{let n=new Set(Object.keys(r)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?tt(i,`Mutually exclusive properties ${s.map(o=>`"${o}"`).join(", ")}`):!0}})};(function(t){t.Forbids="Forbids",t.Requires="Requires"})($a||($a={}));Zle={[$a.Forbids]:{expect:!1,message:"forbids using"},[$a.Requires]:{expect:!0,message:"requires using"}},DQ=(t,e,r,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(r),o=Zle[e];return At({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(t)||n.has(a[t]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?tt(l,`Property "${t}" ${o.message} ${KC(u.length,"property","properties")} ${u.map(g=>`"${g}"`).join(", ")}`):!0}})}});var Wg=C((Uze,ZO)=>{var fce="2.0.0",hce=256,pce=Number.MAX_SAFE_INTEGER||9007199254740991,dce=16;ZO.exports={SEMVER_SPEC_VERSION:fce,MAX_LENGTH:hce,MAX_SAFE_INTEGER:pce,MAX_SAFE_COMPONENT_LENGTH:dce}});var zg=C((Yze,_O)=>{var Cce=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};_O.exports=Cce});var eA=C((Oo,$O)=>{var{MAX_SAFE_COMPONENT_LENGTH:FQ}=Wg(),mce=zg();Oo=$O.exports={};var Ice=Oo.re=[],Ue=Oo.src=[],Ye=Oo.t={},Ece=0,lt=(t,e,r)=>{let i=Ece++;mce(i,e),Ye[t]=i,Ue[i]=e,Ice[i]=new RegExp(e,r?"g":void 0)};lt("NUMERICIDENTIFIER","0|[1-9]\\d*");lt("NUMERICIDENTIFIERLOOSE","[0-9]+");lt("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*");lt("MAINVERSION",`(${Ue[Ye.NUMERICIDENTIFIER]})\\.(${Ue[Ye.NUMERICIDENTIFIER]})\\.(${Ue[Ye.NUMERICIDENTIFIER]})`);lt("MAINVERSIONLOOSE",`(${Ue[Ye.NUMERICIDENTIFIERLOOSE]})\\.(${Ue[Ye.NUMERICIDENTIFIERLOOSE]})\\.(${Ue[Ye.NUMERICIDENTIFIERLOOSE]})`);lt("PRERELEASEIDENTIFIER",`(?:${Ue[Ye.NUMERICIDENTIFIER]}|${Ue[Ye.NONNUMERICIDENTIFIER]})`);lt("PRERELEASEIDENTIFIERLOOSE",`(?:${Ue[Ye.NUMERICIDENTIFIERLOOSE]}|${Ue[Ye.NONNUMERICIDENTIFIER]})`);lt("PRERELEASE",`(?:-(${Ue[Ye.PRERELEASEIDENTIFIER]}(?:\\.${Ue[Ye.PRERELEASEIDENTIFIER]})*))`);lt("PRERELEASELOOSE",`(?:-?(${Ue[Ye.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${Ue[Ye.PRERELEASEIDENTIFIERLOOSE]})*))`);lt("BUILDIDENTIFIER","[0-9A-Za-z-]+");lt("BUILD",`(?:\\+(${Ue[Ye.BUILDIDENTIFIER]}(?:\\.${Ue[Ye.BUILDIDENTIFIER]})*))`);lt("FULLPLAIN",`v?${Ue[Ye.MAINVERSION]}${Ue[Ye.PRERELEASE]}?${Ue[Ye.BUILD]}?`);lt("FULL",`^${Ue[Ye.FULLPLAIN]}$`);lt("LOOSEPLAIN",`[v=\\s]*${Ue[Ye.MAINVERSIONLOOSE]}${Ue[Ye.PRERELEASELOOSE]}?${Ue[Ye.BUILD]}?`);lt("LOOSE",`^${Ue[Ye.LOOSEPLAIN]}$`);lt("GTLT","((?:<|>)?=?)");lt("XRANGEIDENTIFIERLOOSE",`${Ue[Ye.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);lt("XRANGEIDENTIFIER",`${Ue[Ye.NUMERICIDENTIFIER]}|x|X|\\*`);lt("XRANGEPLAIN",`[v=\\s]*(${Ue[Ye.XRANGEIDENTIFIER]})(?:\\.(${Ue[Ye.XRANGEIDENTIFIER]})(?:\\.(${Ue[Ye.XRANGEIDENTIFIER]})(?:${Ue[Ye.PRERELEASE]})?${Ue[Ye.BUILD]}?)?)?`);lt("XRANGEPLAINLOOSE",`[v=\\s]*(${Ue[Ye.XRANGEIDENTIFIERLOOSE]})(?:\\.(${Ue[Ye.XRANGEIDENTIFIERLOOSE]})(?:\\.(${Ue[Ye.XRANGEIDENTIFIERLOOSE]})(?:${Ue[Ye.PRERELEASELOOSE]})?${Ue[Ye.BUILD]}?)?)?`);lt("XRANGE",`^${Ue[Ye.GTLT]}\\s*${Ue[Ye.XRANGEPLAIN]}$`);lt("XRANGELOOSE",`^${Ue[Ye.GTLT]}\\s*${Ue[Ye.XRANGEPLAINLOOSE]}$`);lt("COERCE",`(^|[^\\d])(\\d{1,${FQ}})(?:\\.(\\d{1,${FQ}}))?(?:\\.(\\d{1,${FQ}}))?(?:$|[^\\d])`);lt("COERCERTL",Ue[Ye.COERCE],!0);lt("LONETILDE","(?:~>?)");lt("TILDETRIM",`(\\s*)${Ue[Ye.LONETILDE]}\\s+`,!0);Oo.tildeTrimReplace="$1~";lt("TILDE",`^${Ue[Ye.LONETILDE]}${Ue[Ye.XRANGEPLAIN]}$`);lt("TILDELOOSE",`^${Ue[Ye.LONETILDE]}${Ue[Ye.XRANGEPLAINLOOSE]}$`);lt("LONECARET","(?:\\^)");lt("CARETTRIM",`(\\s*)${Ue[Ye.LONECARET]}\\s+`,!0);Oo.caretTrimReplace="$1^";lt("CARET",`^${Ue[Ye.LONECARET]}${Ue[Ye.XRANGEPLAIN]}$`);lt("CARETLOOSE",`^${Ue[Ye.LONECARET]}${Ue[Ye.XRANGEPLAINLOOSE]}$`);lt("COMPARATORLOOSE",`^${Ue[Ye.GTLT]}\\s*(${Ue[Ye.LOOSEPLAIN]})$|^$`);lt("COMPARATOR",`^${Ue[Ye.GTLT]}\\s*(${Ue[Ye.FULLPLAIN]})$|^$`);lt("COMPARATORTRIM",`(\\s*)${Ue[Ye.GTLT]}\\s*(${Ue[Ye.LOOSEPLAIN]}|${Ue[Ye.XRANGEPLAIN]})`,!0);Oo.comparatorTrimReplace="$1$2$3";lt("HYPHENRANGE",`^\\s*(${Ue[Ye.XRANGEPLAIN]})\\s+-\\s+(${Ue[Ye.XRANGEPLAIN]})\\s*$`);lt("HYPHENRANGELOOSE",`^\\s*(${Ue[Ye.XRANGEPLAINLOOSE]})\\s+-\\s+(${Ue[Ye.XRANGEPLAINLOOSE]})\\s*$`);lt("STAR","(<|>)?=?\\s*\\*");lt("GTE0","^\\s*>=\\s*0.0.0\\s*$");lt("GTE0PRE","^\\s*>=\\s*0.0.0-0\\s*$")});var Vg=C((Hze,eT)=>{var yce=["includePrerelease","loose","rtl"],Bce=t=>t?typeof t!="object"?{loose:!0}:yce.filter(e=>t[e]).reduce((e,r)=>(e[r]=!0,e),{}):{};eT.exports=Bce});var qC=C((jze,tT)=>{var rT=/^[0-9]+$/,iT=(t,e)=>{let r=rT.test(t),i=rT.test(e);return r&&i&&(t=+t,e=+e),t===e?0:r&&!i?-1:i&&!r?1:tiT(e,t);tT.exports={compareIdentifiers:iT,rcompareIdentifiers:wce}});var jr=C((Gze,nT)=>{var JC=zg(),{MAX_LENGTH:sT,MAX_SAFE_INTEGER:WC}=Wg(),{re:oT,t:aT}=eA(),Qce=Vg(),{compareIdentifiers:Xg}=qC(),ln=class{constructor(e,r){if(r=Qce(r),e instanceof ln){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid Version: ${e}`);if(e.length>sT)throw new TypeError(`version is longer than ${sT} characters`);JC("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let i=e.trim().match(r.loose?oT[aT.LOOSE]:oT[aT.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>WC||this.major<0)throw new TypeError("Invalid major version");if(this.minor>WC||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>WC||this.patch<0)throw new TypeError("Invalid patch version");i[4]?this.prerelease=i[4].split(".").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s=0;)typeof this.prerelease[i]=="number"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}r&&(this.prerelease[0]===r?isNaN(this.prerelease[1])&&(this.prerelease=[r,0]):this.prerelease=[r,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};nT.exports=ln});var tA=C((qze,AT)=>{var{MAX_LENGTH:bce}=Wg(),{re:lT,t:cT}=eA(),uT=jr(),Dce=Vg(),Sce=(t,e)=>{if(e=Dce(e),t instanceof uT)return t;if(typeof t!="string"||t.length>bce||!(e.loose?lT[cT.LOOSE]:lT[cT.FULL]).test(t))return null;try{return new uT(t,e)}catch(i){return null}};AT.exports=Sce});var fT=C((Jze,gT)=>{var xce=tA(),kce=(t,e)=>{let r=xce(t,e);return r?r.version:null};gT.exports=kce});var pT=C((Wze,hT)=>{var Pce=tA(),vce=(t,e)=>{let r=Pce(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};hT.exports=vce});var CT=C((zze,dT)=>{var Fce=jr(),Rce=(t,e,r,i)=>{typeof r=="string"&&(i=r,r=void 0);try{return new Fce(t,r).inc(e,i).version}catch(n){return null}};dT.exports=Rce});var cn=C((Vze,mT)=>{var IT=jr(),Lce=(t,e,r)=>new IT(t,r).compare(new IT(e,r));mT.exports=Lce});var zC=C((Xze,ET)=>{var Nce=cn(),Mce=(t,e,r)=>Nce(t,e,r)===0;ET.exports=Mce});var wT=C((Zze,yT)=>{var BT=tA(),Oce=zC(),Tce=(t,e)=>{if(Oce(t,e))return null;{let r=BT(t),i=BT(e),n=r.prerelease.length||i.prerelease.length,s=n?"pre":"",o=n?"prerelease":"";for(let a in r)if((a==="major"||a==="minor"||a==="patch")&&r[a]!==i[a])return s+a;return o}};yT.exports=Tce});var bT=C((_ze,QT)=>{var Kce=jr(),Uce=(t,e)=>new Kce(t,e).major;QT.exports=Uce});var ST=C(($ze,DT)=>{var Yce=jr(),Hce=(t,e)=>new Yce(t,e).minor;DT.exports=Hce});var kT=C((e5e,xT)=>{var jce=jr(),Gce=(t,e)=>new jce(t,e).patch;xT.exports=Gce});var vT=C((t5e,PT)=>{var qce=tA(),Jce=(t,e)=>{let r=qce(t,e);return r&&r.prerelease.length?r.prerelease:null};PT.exports=Jce});var RT=C((r5e,FT)=>{var Wce=cn(),zce=(t,e,r)=>Wce(e,t,r);FT.exports=zce});var NT=C((i5e,LT)=>{var Vce=cn(),Xce=(t,e)=>Vce(t,e,!0);LT.exports=Xce});var VC=C((n5e,MT)=>{var OT=jr(),Zce=(t,e,r)=>{let i=new OT(t,r),n=new OT(e,r);return i.compare(n)||i.compareBuild(n)};MT.exports=Zce});var KT=C((s5e,TT)=>{var _ce=VC(),$ce=(t,e)=>t.sort((r,i)=>_ce(r,i,e));TT.exports=$ce});var YT=C((o5e,UT)=>{var eue=VC(),tue=(t,e)=>t.sort((r,i)=>eue(i,r,e));UT.exports=tue});var Zg=C((a5e,HT)=>{var rue=cn(),iue=(t,e,r)=>rue(t,e,r)>0;HT.exports=iue});var XC=C((A5e,jT)=>{var nue=cn(),sue=(t,e,r)=>nue(t,e,r)<0;jT.exports=sue});var RQ=C((l5e,GT)=>{var oue=cn(),aue=(t,e,r)=>oue(t,e,r)!==0;GT.exports=aue});var ZC=C((c5e,qT)=>{var Aue=cn(),lue=(t,e,r)=>Aue(t,e,r)>=0;qT.exports=lue});var _C=C((u5e,JT)=>{var cue=cn(),uue=(t,e,r)=>cue(t,e,r)<=0;JT.exports=uue});var LQ=C((g5e,WT)=>{var gue=zC(),fue=RQ(),hue=Zg(),pue=ZC(),due=XC(),Cue=_C(),mue=(t,e,r,i)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return gue(t,r,i);case"!=":return fue(t,r,i);case">":return hue(t,r,i);case">=":return pue(t,r,i);case"<":return due(t,r,i);case"<=":return Cue(t,r,i);default:throw new TypeError(`Invalid operator: ${e}`)}};WT.exports=mue});var VT=C((f5e,zT)=>{var Iue=jr(),Eue=tA(),{re:$C,t:em}=eA(),yue=(t,e)=>{if(t instanceof Iue)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match($C[em.COERCE]);else{let i;for(;(i=$C[em.COERCERTL].exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||i.index+i[0].length!==r.index+r[0].length)&&(r=i),$C[em.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;$C[em.COERCERTL].lastIndex=-1}return r===null?null:Eue(`${r[2]}.${r[3]||"0"}.${r[4]||"0"}`,e)};zT.exports=yue});var ZT=C((h5e,XT)=>{"use strict";XT.exports=function(t){t.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var _g=C((p5e,_T)=>{"use strict";_T.exports=It;It.Node=rA;It.create=It;function It(t){var e=this;if(e instanceof It||(e=new It),e.tail=null,e.head=null,e.length=0,t&&typeof t.forEach=="function")t.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var r=0,i=arguments.length;r1)r=e;else if(this.head)i=this.head.next,r=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var n=0;i!==null;n++)r=t(r,i.value,n),i=i.next;return r};It.prototype.reduceReverse=function(t,e){var r,i=this.tail;if(arguments.length>1)r=e;else if(this.tail)i=this.tail.prev,r=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var n=this.length-1;i!==null;n--)r=t(r,i.value,n),i=i.prev;return r};It.prototype.toArray=function(){for(var t=new Array(this.length),e=0,r=this.head;r!==null;e++)t[e]=r.value,r=r.next;return t};It.prototype.toArrayReverse=function(){for(var t=new Array(this.length),e=0,r=this.tail;r!==null;e++)t[e]=r.value,r=r.prev;return t};It.prototype.slice=function(t,e){e=e||this.length,e<0&&(e+=this.length),t=t||0,t<0&&(t+=this.length);var r=new It;if(ethis.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&ithis.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>t;i--,n=n.prev)r.push(n.value);return r};It.prototype.splice=function(t,e,...r){t>this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(var i=0,n=this.head;n!==null&&i{"use strict";var bue=_g(),iA=Symbol("max"),Us=Symbol("length"),Kl=Symbol("lengthCalculator"),$g=Symbol("allowStale"),nA=Symbol("maxAge"),Ys=Symbol("dispose"),eK=Symbol("noDisposeOnSet"),br=Symbol("lruList"),Rn=Symbol("cache"),tK=Symbol("updateAgeOnGet"),NQ=()=>1,rK=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let r=this[iA]=e.max||Infinity,i=e.length||NQ;if(this[Kl]=typeof i!="function"?NQ:i,this[$g]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[nA]=e.maxAge||0,this[Ys]=e.dispose,this[eK]=e.noDisposeOnSet||!1,this[tK]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[iA]=e||Infinity,ef(this)}get max(){return this[iA]}set allowStale(e){this[$g]=!!e}get allowStale(){return this[$g]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[nA]=e,ef(this)}get maxAge(){return this[nA]}set lengthCalculator(e){typeof e!="function"&&(e=NQ),e!==this[Kl]&&(this[Kl]=e,this[Us]=0,this[br].forEach(r=>{r.length=this[Kl](r.value,r.key),this[Us]+=r.length})),ef(this)}get lengthCalculator(){return this[Kl]}get length(){return this[Us]}get itemCount(){return this[br].length}rforEach(e,r){r=r||this;for(let i=this[br].tail;i!==null;){let n=i.prev;nK(this,e,i,r),i=n}}forEach(e,r){r=r||this;for(let i=this[br].head;i!==null;){let n=i.next;nK(this,e,i,r),i=n}}keys(){return this[br].toArray().map(e=>e.key)}values(){return this[br].toArray().map(e=>e.value)}reset(){this[Ys]&&this[br]&&this[br].length&&this[br].forEach(e=>this[Ys](e.key,e.value)),this[Rn]=new Map,this[br]=new bue,this[Us]=0}dump(){return this[br].map(e=>tm(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[br]}set(e,r,i){if(i=i||this[nA],i&&typeof i!="number")throw new TypeError("maxAge must be a number");let n=i?Date.now():0,s=this[Kl](r,e);if(this[Rn].has(e)){if(s>this[iA])return Ul(this,this[Rn].get(e)),!1;let l=this[Rn].get(e).value;return this[Ys]&&(this[eK]||this[Ys](e,l.value)),l.now=n,l.maxAge=i,l.value=r,this[Us]+=s-l.length,l.length=s,this.get(e),ef(this),!0}let o=new iK(e,r,s,n,i);return o.length>this[iA]?(this[Ys]&&this[Ys](e,r),!1):(this[Us]+=o.length,this[br].unshift(o),this[Rn].set(e,this[br].head),ef(this),!0)}has(e){if(!this[Rn].has(e))return!1;let r=this[Rn].get(e).value;return!tm(this,r)}get(e){return MQ(this,e,!0)}peek(e){return MQ(this,e,!1)}pop(){let e=this[br].tail;return e?(Ul(this,e),e.value):null}del(e){Ul(this,this[Rn].get(e))}load(e){this.reset();let r=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-r;o>0&&this.set(n.k,n.v,o)}}}prune(){this[Rn].forEach((e,r)=>MQ(this,r,!1))}},MQ=(t,e,r)=>{let i=t[Rn].get(e);if(i){let n=i.value;if(tm(t,n)){if(Ul(t,i),!t[$g])return}else r&&(t[tK]&&(i.value.now=Date.now()),t[br].unshiftNode(i));return n.value}},tm=(t,e)=>{if(!e||!e.maxAge&&!t[nA])return!1;let r=Date.now()-e.now;return e.maxAge?r>e.maxAge:t[nA]&&r>t[nA]},ef=t=>{if(t[Us]>t[iA])for(let e=t[br].tail;t[Us]>t[iA]&&e!==null;){let r=e.prev;Ul(t,e),e=r}},Ul=(t,e)=>{if(e){let r=e.value;t[Ys]&&t[Ys](r.key,r.value),t[Us]-=r.length,t[Rn].delete(r.key),t[br].removeNode(e)}},iK=class{constructor(e,r,i,n,s){this.key=e,this.value=r,this.length=i,this.now=n,this.maxAge=s||0}},nK=(t,e,r,i)=>{let n=r.value;tm(t,n)&&(Ul(t,r),t[$g]||(n=void 0)),n&&e.call(i,n.value,n.key,t)};$T.exports=rK});var un=C((C5e,oK)=>{var Yl=class{constructor(e,r){if(r=Due(r),e instanceof Yl)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new Yl(e.raw,r);if(e instanceof OQ)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!AK(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&vue(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(",")}:${e}`,n=aK.get(i);if(n)return n;let s=this.options.loose,o=s?Gr[Tr.HYPHENRANGELOOSE]:Gr[Tr.HYPHENRANGE];e=e.replace(o,Lue(this.options.includePrerelease)),sr("hyphen replace",e),e=e.replace(Gr[Tr.COMPARATORTRIM],xue),sr("comparator trim",e,Gr[Tr.COMPARATORTRIM]),e=e.replace(Gr[Tr.TILDETRIM],kue),e=e.replace(Gr[Tr.CARETTRIM],Pue),e=e.split(/\s+/).join(" ");let a=s?Gr[Tr.COMPARATORLOOSE]:Gr[Tr.COMPARATOR],l=e.split(" ").map(f=>Fue(f,this.options)).join(" ").split(/\s+/).map(f=>Rue(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new OQ(f,this.options)),c=l.length,u=new Map;for(let f of l){if(AK(f))return[f];u.set(f.value,f)}u.size>1&&u.has("")&&u.delete("");let g=[...u.values()];return aK.set(i,g),g}intersects(e,r){if(!(e instanceof Yl))throw new TypeError("a Range is required");return this.set.some(i=>lK(i,r)&&e.set.some(n=>lK(n,r)&&i.every(s=>n.every(o=>s.intersects(o,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new Sue(e,this.options)}catch(r){return!1}for(let r=0;rt.value==="<0.0.0-0",vue=t=>t.value==="",lK=(t,e)=>{let r=!0,i=t.slice(),n=i.pop();for(;r&&i.length;)r=i.every(s=>n.intersects(s,e)),n=i.pop();return r},Fue=(t,e)=>(sr("comp",t,e),t=Tue(t,e),sr("caret",t),t=Oue(t,e),sr("tildes",t),t=Kue(t,e),sr("xrange",t),t=Uue(t,e),sr("stars",t),t),oi=t=>!t||t.toLowerCase()==="x"||t==="*",Oue=(t,e)=>t.trim().split(/\s+/).map(r=>Yue(r,e)).join(" "),Yue=(t,e)=>{let r=e.loose?Gr[Tr.TILDELOOSE]:Gr[Tr.TILDE];return t.replace(r,(i,n,s,o,a)=>{sr("tilde",t,i,n,s,o,a);let l;return oi(n)?l="":oi(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:oi(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(sr("replaceTilde pr",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,sr("tilde return",l),l})},Tue=(t,e)=>t.trim().split(/\s+/).map(r=>Hue(r,e)).join(" "),Hue=(t,e)=>{sr("caret",t,e);let r=e.loose?Gr[Tr.CARETLOOSE]:Gr[Tr.CARET],i=e.includePrerelease?"-0":"";return t.replace(r,(n,s,o,a,l)=>{sr("caret",t,n,s,o,a,l);let c;return oi(s)?c="":oi(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:oi(a)?s==="0"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(sr("replaceCaret pr",l),s==="0"?o==="0"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(sr("no pr"),s==="0"?o==="0"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),sr("caret return",c),c})},Kue=(t,e)=>(sr("replaceXRanges",t,e),t.split(/\s+/).map(r=>jue(r,e)).join(" ")),jue=(t,e)=>{t=t.trim();let r=e.loose?Gr[Tr.XRANGELOOSE]:Gr[Tr.XRANGE];return t.replace(r,(i,n,s,o,a,l)=>{sr("xRange",t,i,n,s,o,a,l);let c=oi(s),u=c||oi(o),g=u||oi(a),f=g;return n==="="&&f&&(n=""),l=e.includePrerelease?"-0":"",c?n===">"||n==="<"?i="<0.0.0-0":i="*":n&&f?(u&&(o=0),a=0,n===">"?(n=">=",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n==="<="&&(n="<",u?s=+s+1:o=+o+1),n==="<"&&(l="-0"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),sr("xRange return",i),i})},Uue=(t,e)=>(sr("replaceStars",t,e),t.trim().replace(Gr[Tr.STAR],"")),Rue=(t,e)=>(sr("replaceGTE0",t,e),t.trim().replace(Gr[e.includePrerelease?Tr.GTE0PRE:Tr.GTE0],"")),Lue=t=>(e,r,i,n,s,o,a,l,c,u,g,f,h)=>(oi(i)?r="":oi(n)?r=`>=${i}.0.0${t?"-0":""}`:oi(s)?r=`>=${i}.${n}.0${t?"-0":""}`:o?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,oi(c)?l="":oi(u)?l=`<${+c+1}.0.0-0`:oi(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:t?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${r} ${l}`.trim()),Nue=(t,e,r)=>{for(let i=0;i0){let n=t[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var tf=C((m5e,cK)=>{var rf=Symbol("SemVer ANY"),nf=class{static get ANY(){return rf}constructor(e,r){if(r=Gue(r),e instanceof nf){if(e.loose===!!r.loose)return e;e=e.value}KQ("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===rf?this.value="":this.value=this.operator+this.semver.version,KQ("comp",this)}parse(e){let r=this.options.loose?uK[gK.COMPARATORLOOSE]:uK[gK.COMPARATOR],i=e.match(r);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:"",this.operator==="="&&(this.operator=""),i[2]?this.semver=new fK(i[2],this.options.loose):this.semver=rf}toString(){return this.value}test(e){if(KQ("Comparator.test",e,this.options.loose),this.semver===rf||e===rf)return!0;if(typeof e=="string")try{e=new fK(e,this.options)}catch(r){return!1}return TQ(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof nf))throw new TypeError("a Comparator is required");if((!r||typeof r!="object")&&(r={loose:!!r,includePrerelease:!1}),this.operator==="")return this.value===""?!0:new hK(e.value,r).test(this.value);if(e.operator==="")return e.value===""?!0:new hK(this.value,r).test(e.semver);let i=(this.operator===">="||this.operator===">")&&(e.operator===">="||e.operator===">"),n=(this.operator==="<="||this.operator==="<")&&(e.operator==="<="||e.operator==="<"),s=this.semver.version===e.semver.version,o=(this.operator===">="||this.operator==="<=")&&(e.operator===">="||e.operator==="<="),a=TQ(this.semver,"<",e.semver,r)&&(this.operator===">="||this.operator===">")&&(e.operator==="<="||e.operator==="<"),l=TQ(this.semver,">",e.semver,r)&&(this.operator==="<="||this.operator==="<")&&(e.operator===">="||e.operator===">");return i||n||s&&o||a||l}};cK.exports=nf;var Gue=Vg(),{re:uK,t:gK}=eA(),TQ=LQ(),KQ=zg(),fK=jr(),hK=un()});var sf=C((I5e,pK)=>{var que=un(),Jue=(t,e,r)=>{try{e=new que(e,r)}catch(i){return!1}return e.test(t)};pK.exports=Jue});var CK=C((E5e,dK)=>{var Wue=un(),zue=(t,e)=>new Wue(t,e).set.map(r=>r.map(i=>i.value).join(" ").trim().split(" "));dK.exports=zue});var IK=C((y5e,mK)=>{var Vue=jr(),Xue=un(),Zue=(t,e,r)=>{let i=null,n=null,s=null;try{s=new Xue(e,r)}catch(o){return null}return t.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new Vue(i,r))}),i};mK.exports=Zue});var yK=C((B5e,EK)=>{var _ue=jr(),$ue=un(),ege=(t,e,r)=>{let i=null,n=null,s=null;try{s=new $ue(e,r)}catch(o){return null}return t.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new _ue(i,r))}),i};EK.exports=ege});var QK=C((w5e,BK)=>{var UQ=jr(),tge=un(),wK=Zg(),rge=(t,e)=>{t=new tge(t,e);let r=new UQ("0.0.0");if(t.test(r)||(r=new UQ("0.0.0-0"),t.test(r)))return r;r=null;for(let i=0;i{let a=new UQ(o.semver.version);switch(o.operator){case">":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case"":case">=":(!s||wK(a,s))&&(s=a);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!r||wK(r,s))&&(r=s)}return r&&t.test(r)?r:null};BK.exports=rge});var DK=C((Q5e,bK)=>{var ige=un(),nge=(t,e)=>{try{return new ige(t,e).range||"*"}catch(r){return null}};bK.exports=nge});var rm=C((b5e,SK)=>{var sge=jr(),xK=tf(),{ANY:oge}=xK,age=un(),Age=sf(),kK=Zg(),PK=XC(),lge=_C(),cge=ZC(),uge=(t,e,r,i)=>{t=new sge(t,i),e=new age(e,i);let n,s,o,a,l;switch(r){case">":n=kK,s=lge,o=PK,a=">",l=">=";break;case"<":n=PK,s=cge,o=kK,a="<",l="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(Age(t,e,i))return!1;for(let c=0;c{h.semver===oge&&(h=new xK(">=0.0.0")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(t,f.semver))return!1;if(f.operator===l&&o(t,f.semver))return!1}return!0};SK.exports=uge});var FK=C((D5e,vK)=>{var gge=rm(),fge=(t,e,r)=>gge(t,e,">",r);vK.exports=fge});var LK=C((S5e,RK)=>{var hge=rm(),pge=(t,e,r)=>hge(t,e,"<",r);RK.exports=pge});var OK=C((x5e,NK)=>{var MK=un(),dge=(t,e,r)=>(t=new MK(t,r),e=new MK(e,r),t.intersects(e));NK.exports=dge});var KK=C((k5e,TK)=>{var Cge=sf(),mge=cn();TK.exports=(t,e,r)=>{let i=[],n=null,s=null,o=t.sort((u,g)=>mge(u,g,r));for(let u of o)Cge(u,e,r)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push("*"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return l.length{var YK=un(),im=tf(),{ANY:YQ}=im,of=sf(),HQ=cn(),Ege=(t,e,r={})=>{if(t===e)return!0;t=new YK(t,r),e=new YK(e,r);let i=!1;e:for(let n of t.set){for(let s of e.set){let o=Ige(n,s,r);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},Ige=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===YQ){if(e.length===1&&e[0].semver===YQ)return!0;r.includePrerelease?t=[new im(">=0.0.0-0")]:t=[new im(">=0.0.0")]}if(e.length===1&&e[0].semver===YQ){if(r.includePrerelease)return!0;e=[new im(">=0.0.0")]}let i=new Set,n,s;for(let h of t)h.operator===">"||h.operator===">="?n=HK(n,h,r):h.operator==="<"||h.operator==="<="?s=jK(s,h,r):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=HQ(n.semver,s.semver,r),o>0)return null;if(o===0&&(n.operator!==">="||s.operator!=="<="))return null}for(let h of i){if(n&&!of(h,String(n),r)||s&&!of(h,String(s),r))return null;for(let p of e)if(!of(h,String(p),r))return!1;return!0}let a,l,c,u,g=s&&!r.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!r.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator==="<"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===">"||h.operator===">=",c=c||h.operator==="<"||h.operator==="<=",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===">"||h.operator===">="){if(a=HK(n,h,r),a===h&&a!==n)return!1}else if(n.operator===">="&&!of(n.semver,String(h),r))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator==="<"||h.operator==="<="){if(l=jK(s,h,r),l===h&&l!==s)return!1}else if(s.operator==="<="&&!of(s.semver,String(h),r))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},HK=(t,e,r)=>{if(!t)return e;let i=HQ(t.semver,e.semver,r);return i>0?t:i<0||e.operator===">"&&t.operator===">="?e:t},jK=(t,e,r)=>{if(!t)return e;let i=HQ(t.semver,e.semver,r);return i<0?t:i>0||e.operator==="<"&&t.operator==="<="?e:t};UK.exports=Ege});var cr=C((v5e,qK)=>{var jQ=eA();qK.exports={re:jQ.re,src:jQ.src,tokens:jQ.t,SEMVER_SPEC_VERSION:Wg().SEMVER_SPEC_VERSION,SemVer:jr(),compareIdentifiers:qC().compareIdentifiers,rcompareIdentifiers:qC().rcompareIdentifiers,parse:tA(),valid:fT(),clean:pT(),inc:CT(),diff:wT(),major:bT(),minor:ST(),patch:kT(),prerelease:vT(),compare:cn(),rcompare:RT(),compareLoose:NT(),compareBuild:VC(),sort:KT(),rsort:YT(),gt:Zg(),lt:XC(),eq:zC(),neq:RQ(),gte:ZC(),lte:_C(),cmp:LQ(),coerce:VT(),Comparator:tf(),Range:un(),satisfies:sf(),toComparators:CK(),maxSatisfying:IK(),minSatisfying:yK(),minVersion:QK(),validRange:DK(),outside:rm(),gtr:FK(),ltr:LK(),intersects:OK(),simplifyRange:KK(),subset:GK()}});var n1=C((M5e,i1)=>{"use strict";i1.exports=(...t)=>[...new Set([].concat(...t))]});var ZQ=C((O5e,s1)=>{"use strict";var xge=require("stream"),o1=xge.PassThrough,kge=Array.prototype.slice;s1.exports=Pge;function Pge(){let t=[],e=!1,r=kge.call(arguments),i=r[r.length-1];i&&!Array.isArray(i)&&i.pipe==null?r.pop():i={};let n=i.end!==!1;i.objectMode==null&&(i.objectMode=!0),i.highWaterMark==null&&(i.highWaterMark=64*1024);let s=o1(i);function o(){for(let c=0,u=arguments.length;c0||(e=!1,a())}function f(h){function p(){h.removeListener("merge2UnpipeEnd",p),h.removeListener("end",p),g()}if(h._readableState.endEmitted)return g();h.on("merge2UnpipeEnd",p),h.on("end",p),h.pipe(s,{end:!1}),h.resume()}for(let h=0;h{"use strict";Object.defineProperty(sm,"__esModule",{value:!0});function vge(t){return t.reduce((e,r)=>[].concat(e,r),[])}sm.flatten=vge;function Fge(t,e){let r=[[]],i=0;for(let n of t)e(n)?(i++,r[i]=[]):r[i].push(n);return r}sm.splitWhen=Fge});var l1=C(_Q=>{"use strict";Object.defineProperty(_Q,"__esModule",{value:!0});function Rge(t){return t.code==="ENOENT"}_Q.isEnoentCodeError=Rge});var u1=C($Q=>{"use strict";Object.defineProperty($Q,"__esModule",{value:!0});var c1=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function Lge(t,e){return new c1(t,e)}$Q.createDirentFromStats=Lge});var g1=C(Jl=>{"use strict";Object.defineProperty(Jl,"__esModule",{value:!0});var Nge=require("path"),Mge=2,Oge=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;function Tge(t){return t.replace(/\\/g,"/")}Jl.unixify=Tge;function Kge(t,e){return Nge.resolve(t,e)}Jl.makeAbsolute=Kge;function Uge(t){return t.replace(Oge,"\\$2")}Jl.escape=Uge;function Yge(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(Mge)}return t}Jl.removeLeadingDotSegment=Yge});var h1=C((H5e,f1)=>{f1.exports=function(e){if(typeof e!="string"||e==="")return!1;for(var r;r=/(\\).|([@?!+*]\(.*\))/g.exec(e);){if(r[2])return!0;e=e.slice(r.index+r[0].length)}return!1}});var d1=C((j5e,p1)=>{var Hge=h1(),jge={"{":"}","(":")","[":"]"},Gge=/\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/,qge=/\\(.)|(^!|[*?{}()[\]]|\(\?)/;p1.exports=function(e,r){if(typeof e!="string"||e==="")return!1;if(Hge(e))return!0;var i=Gge,n;for(r&&r.strict===!1&&(i=qge);n=i.exec(e);){if(n[2])return!0;var s=n.index+n[0].length,o=n[1],a=o?jge[o]:null;if(o&&a){var l=e.indexOf(a,s);l!==-1&&(s=l+1)}e=e.slice(s)}return!1}});var m1=C((G5e,C1)=>{"use strict";var Jge=d1(),Wge=require("path").posix.dirname,zge=require("os").platform()==="win32",e0="/",Vge=/\\/g,Xge=/[\{\[].*[\}\]]$/,Zge=/(^|[^\\])([\{\[]|\([^\)]+$)/,_ge=/\\([\!\*\?\|\[\]\(\)\{\}])/g;C1.exports=function(e,r){var i=Object.assign({flipBackslashes:!0},r);i.flipBackslashes&&zge&&e.indexOf(e0)<0&&(e=e.replace(Vge,e0)),Xge.test(e)&&(e+=e0),e+="a";do e=Wge(e);while(Jge(e)||Zge.test(e));return e.replace(_ge,"$1")}});var S1=C(ur=>{"use strict";Object.defineProperty(ur,"__esModule",{value:!0});var $ge=require("path"),efe=m1(),I1=Hi(),tfe=hQ(),E1="**",rfe="\\",ife=/[*?]|^!/,nfe=/\[.*]/,sfe=/(?:^|[^!*+?@])\(.*\|.*\)/,ofe=/[!*+?@]\(.*\)/,afe=/{.*(?:,|\.\.).*}/;function B1(t,e={}){return!y1(t,e)}ur.isStaticPattern=B1;function y1(t,e={}){return!!(e.caseSensitiveMatch===!1||t.includes(rfe)||ife.test(t)||nfe.test(t)||sfe.test(t)||e.extglob!==!1&&ofe.test(t)||e.braceExpansion!==!1&&afe.test(t))}ur.isDynamicPattern=y1;function Afe(t){return om(t)?t.slice(1):t}ur.convertToPositivePattern=Afe;function lfe(t){return"!"+t}ur.convertToNegativePattern=lfe;function om(t){return t.startsWith("!")&&t[1]!=="("}ur.isNegativePattern=om;function w1(t){return!om(t)}ur.isPositivePattern=w1;function cfe(t){return t.filter(om)}ur.getNegativePatterns=cfe;function ufe(t){return t.filter(w1)}ur.getPositivePatterns=ufe;function gfe(t){return efe(t,{flipBackslashes:!1})}ur.getBaseDirectory=gfe;function ffe(t){return t.includes(E1)}ur.hasGlobStar=ffe;function Q1(t){return t.endsWith("/"+E1)}ur.endsWithSlashGlobStar=Q1;function hfe(t){let e=$ge.basename(t);return Q1(t)||B1(e)}ur.isAffectDepthOfReadingPattern=hfe;function pfe(t){return t.reduce((e,r)=>e.concat(b1(r)),[])}ur.expandPatternsWithBraceExpansion=pfe;function b1(t){return I1.braces(t,{expand:!0,nodupes:!0})}ur.expandBraceExpansion=b1;function dfe(t,e){let r=tfe.scan(t,Object.assign(Object.assign({},e),{parts:!0}));return r.parts.length===0?[t]:r.parts}ur.getPatternParts=dfe;function D1(t,e){return I1.makeRe(t,e)}ur.makeRe=D1;function Cfe(t,e){return t.map(r=>D1(r,e))}ur.convertPatternsToRe=Cfe;function mfe(t,e){return e.some(r=>r.test(t))}ur.matchAny=mfe});var k1=C(t0=>{"use strict";Object.defineProperty(t0,"__esModule",{value:!0});var Ife=ZQ();function Efe(t){let e=Ife(t);return t.forEach(r=>{r.once("error",i=>e.emit("error",i))}),e.once("close",()=>x1(t)),e.once("end",()=>x1(t)),e}t0.merge=Efe;function x1(t){t.forEach(e=>e.emit("close"))}});var P1=C(am=>{"use strict";Object.defineProperty(am,"__esModule",{value:!0});function yfe(t){return typeof t=="string"}am.isString=yfe;function Bfe(t){return t===""}am.isEmpty=Bfe});var Gs=C(js=>{"use strict";Object.defineProperty(js,"__esModule",{value:!0});var wfe=A1();js.array=wfe;var Qfe=l1();js.errno=Qfe;var bfe=u1();js.fs=bfe;var Dfe=g1();js.path=Dfe;var Sfe=S1();js.pattern=Sfe;var xfe=k1();js.stream=xfe;var kfe=P1();js.string=kfe});var N1=C(qs=>{"use strict";Object.defineProperty(qs,"__esModule",{value:!0});var AA=Gs();function Pfe(t,e){let r=v1(t),i=F1(t,e.ignore),n=r.filter(l=>AA.pattern.isStaticPattern(l,e)),s=r.filter(l=>AA.pattern.isDynamicPattern(l,e)),o=r0(n,i,!1),a=r0(s,i,!0);return o.concat(a)}qs.generate=Pfe;function r0(t,e,r){let i=R1(t);return"."in i?[i0(".",t,e,r)]:L1(i,e,r)}qs.convertPatternsToTasks=r0;function v1(t){return AA.pattern.getPositivePatterns(t)}qs.getPositivePatterns=v1;function F1(t,e){return AA.pattern.getNegativePatterns(t).concat(e).map(AA.pattern.convertToPositivePattern)}qs.getNegativePatternsAsPositive=F1;function R1(t){let e={};return t.reduce((r,i)=>{let n=AA.pattern.getBaseDirectory(i);return n in r?r[n].push(i):r[n]=[i],r},e)}qs.groupPatternsByBaseDirectory=R1;function L1(t,e,r){return Object.keys(t).map(i=>i0(i,t[i],e,r))}qs.convertPatternGroupsToTasks=L1;function i0(t,e,r,i){return{dynamic:i,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(AA.pattern.convertToNegativePattern))}}qs.convertPatternGroupToTask=i0});var O1=C(Am=>{"use strict";Object.defineProperty(Am,"__esModule",{value:!0});Am.read=void 0;function vfe(t,e,r){e.fs.lstat(t,(i,n)=>{if(i!==null){M1(r,i);return}if(!n.isSymbolicLink()||!e.followSymbolicLink){n0(r,n);return}e.fs.stat(t,(s,o)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){M1(r,s);return}n0(r,n);return}e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),n0(r,o)})})}Am.read=vfe;function M1(t,e){t(e)}function n0(t,e){t(null,e)}});var T1=C(lm=>{"use strict";Object.defineProperty(lm,"__esModule",{value:!0});lm.read=void 0;function Ffe(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.followSymbolicLink)return r;try{let i=e.fs.statSync(t);return e.markSymbolicLink&&(i.isSymbolicLink=()=>!0),i}catch(i){if(!e.throwErrorOnBrokenSymbolicLink)return r;throw i}}lm.read=Ffe});var K1=C(To=>{"use strict";Object.defineProperty(To,"__esModule",{value:!0});To.createFileSystemAdapter=To.FILE_SYSTEM_ADAPTER=void 0;var cm=require("fs");To.FILE_SYSTEM_ADAPTER={lstat:cm.lstat,stat:cm.stat,lstatSync:cm.lstatSync,statSync:cm.statSync};function Rfe(t){return t===void 0?To.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},To.FILE_SYSTEM_ADAPTER),t)}To.createFileSystemAdapter=Rfe});var Y1=C(s0=>{"use strict";Object.defineProperty(s0,"__esModule",{value:!0});var Lfe=K1(),U1=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=Lfe.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,r){return e!=null?e:r}};s0.default=U1});var lA=C(Ko=>{"use strict";Object.defineProperty(Ko,"__esModule",{value:!0});Ko.statSync=Ko.stat=Ko.Settings=void 0;var H1=O1(),Nfe=T1(),o0=Y1();Ko.Settings=o0.default;function Mfe(t,e,r){if(typeof e=="function"){H1.read(t,a0(),e);return}H1.read(t,a0(e),r)}Ko.stat=Mfe;function Ofe(t,e){let r=a0(e);return Nfe.read(t,r)}Ko.statSync=Ofe;function a0(t={}){return t instanceof o0.default?t:new o0.default(t)}});var G1=C((t6e,j1)=>{j1.exports=Tfe;function Tfe(t,e){var r,i,n,s=!0;Array.isArray(t)?(r=[],i=t.length):(n=Object.keys(t),r={},i=n.length);function o(l){function c(){e&&e(l,r),e=null}s?process.nextTick(c):c()}function a(l,c,u){r[l]=u,(--i==0||c)&&o(c)}i?n?n.forEach(function(l){t[l](function(c,u){a(l,c,u)})}):t.forEach(function(l,c){l(function(u,g){a(c,u,g)})}):o(null),s=!1}});var A0=C(um=>{"use strict";Object.defineProperty(um,"__esModule",{value:!0});um.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var gm=process.versions.node.split(".");if(gm[0]===void 0||gm[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var q1=Number.parseInt(gm[0],10),Kfe=Number.parseInt(gm[1],10),J1=10,Ufe=10,Yfe=q1>J1,Hfe=q1===J1&&Kfe>=Ufe;um.IS_SUPPORT_READDIR_WITH_FILE_TYPES=Yfe||Hfe});var z1=C(fm=>{"use strict";Object.defineProperty(fm,"__esModule",{value:!0});fm.createDirentFromStats=void 0;var W1=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function jfe(t,e){return new W1(t,e)}fm.createDirentFromStats=jfe});var l0=C(hm=>{"use strict";Object.defineProperty(hm,"__esModule",{value:!0});hm.fs=void 0;var Gfe=z1();hm.fs=Gfe});var c0=C(pm=>{"use strict";Object.defineProperty(pm,"__esModule",{value:!0});pm.joinPathSegments=void 0;function qfe(t,e,r){return t.endsWith(r)?t+e:t+r+e}pm.joinPathSegments=qfe});var eU=C(Uo=>{"use strict";Object.defineProperty(Uo,"__esModule",{value:!0});Uo.readdir=Uo.readdirWithFileTypes=Uo.read=void 0;var Jfe=lA(),V1=G1(),Wfe=A0(),X1=l0(),Z1=c0();function zfe(t,e,r){if(!e.stats&&Wfe.IS_SUPPORT_READDIR_WITH_FILE_TYPES){_1(t,e,r);return}$1(t,e,r)}Uo.read=zfe;function _1(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(i,n)=>{if(i!==null){dm(r,i);return}let s=n.map(a=>({dirent:a,name:a.name,path:Z1.joinPathSegments(t,a.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){u0(r,s);return}let o=s.map(a=>Vfe(a,e));V1(o,(a,l)=>{if(a!==null){dm(r,a);return}u0(r,l)})})}Uo.readdirWithFileTypes=_1;function Vfe(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);return}e.fs.stat(t.path,(i,n)=>{if(i!==null){if(e.throwErrorOnBrokenSymbolicLink){r(i);return}r(null,t);return}t.dirent=X1.fs.createDirentFromStats(t.name,n),r(null,t)})}}function $1(t,e,r){e.fs.readdir(t,(i,n)=>{if(i!==null){dm(r,i);return}let s=n.map(o=>{let a=Z1.joinPathSegments(t,o,e.pathSegmentSeparator);return l=>{Jfe.stat(a,e.fsStatSettings,(c,u)=>{if(c!==null){l(c);return}let g={name:o,path:a,dirent:X1.fs.createDirentFromStats(o,u)};e.stats&&(g.stats=u),l(null,g)})}});V1(s,(o,a)=>{if(o!==null){dm(r,o);return}u0(r,a)})})}Uo.readdir=$1;function dm(t,e){t(e)}function u0(t,e){t(null,e)}});var sU=C(Yo=>{"use strict";Object.defineProperty(Yo,"__esModule",{value:!0});Yo.readdir=Yo.readdirWithFileTypes=Yo.read=void 0;var Xfe=lA(),Zfe=A0(),tU=l0(),rU=c0();function _fe(t,e){return!e.stats&&Zfe.IS_SUPPORT_READDIR_WITH_FILE_TYPES?iU(t,e):nU(t,e)}Yo.read=_fe;function iU(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(i=>{let n={dirent:i,name:i.name,path:rU.joinPathSegments(t,i.name,e.pathSegmentSeparator)};if(n.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let s=e.fs.statSync(n.path);n.dirent=tU.fs.createDirentFromStats(n.name,s)}catch(s){if(e.throwErrorOnBrokenSymbolicLink)throw s}return n})}Yo.readdirWithFileTypes=iU;function nU(t,e){return e.fs.readdirSync(t).map(i=>{let n=rU.joinPathSegments(t,i,e.pathSegmentSeparator),s=Xfe.statSync(n,e.fsStatSettings),o={name:i,path:n,dirent:tU.fs.createDirentFromStats(i,s)};return e.stats&&(o.stats=s),o})}Yo.readdir=nU});var oU=C(Ho=>{"use strict";Object.defineProperty(Ho,"__esModule",{value:!0});Ho.createFileSystemAdapter=Ho.FILE_SYSTEM_ADAPTER=void 0;var Wl=require("fs");Ho.FILE_SYSTEM_ADAPTER={lstat:Wl.lstat,stat:Wl.stat,lstatSync:Wl.lstatSync,statSync:Wl.statSync,readdir:Wl.readdir,readdirSync:Wl.readdirSync};function $fe(t){return t===void 0?Ho.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},Ho.FILE_SYSTEM_ADAPTER),t)}Ho.createFileSystemAdapter=$fe});var AU=C(g0=>{"use strict";Object.defineProperty(g0,"__esModule",{value:!0});var ehe=require("path"),the=lA(),rhe=oU(),aU=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=rhe.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,ehe.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new the.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e!=null?e:r}};g0.default=aU});var Cm=C(jo=>{"use strict";Object.defineProperty(jo,"__esModule",{value:!0});jo.Settings=jo.scandirSync=jo.scandir=void 0;var lU=eU(),ihe=sU(),f0=AU();jo.Settings=f0.default;function nhe(t,e,r){if(typeof e=="function"){lU.read(t,h0(),e);return}lU.read(t,h0(e),r)}jo.scandir=nhe;function she(t,e){let r=h0(e);return ihe.read(t,r)}jo.scandirSync=she;function h0(t={}){return t instanceof f0.default?t:new f0.default(t)}});var uU=C((u6e,cU)=>{"use strict";function ohe(t){var e=new t,r=e;function i(){var s=e;return s.next?e=s.next:(e=new t,r=e),s.next=null,s}function n(s){r.next=s,r=s}return{get:i,release:n}}cU.exports=ohe});var fU=C((g6e,p0)=>{"use strict";var ahe=uU();function gU(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),r<1)throw new Error("fastqueue concurrency must be greater than 1");var i=ahe(Ahe),n=null,s=null,o=0,a=null,l={push:m,drain:rs,saturated:rs,pause:u,paused:!1,concurrency:r,running:c,resume:h,idle:p,length:g,getQueue:f,unshift:I,empty:rs,kill:B,killAndDrain:x,error:F};return l;function c(){return o}function u(){l.paused=!0}function g(){for(var L=n,T=0;L;)L=L.next,T++;return T}function f(){for(var L=n,T=[];L;)T.push(L.value),L=L.next;return T}function h(){if(!!l.paused){l.paused=!1;for(var L=0;L{"use strict";Object.defineProperty(is,"__esModule",{value:!0});is.joinPathSegments=is.replacePathSegmentSeparator=is.isAppliedFilter=is.isFatalError=void 0;function che(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}is.isFatalError=che;function uhe(t,e){return t===null||t(e)}is.isAppliedFilter=uhe;function ghe(t,e){return t.split(/[/\\]/).join(e)}is.replacePathSegmentSeparator=ghe;function fhe(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}is.joinPathSegments=fhe});var C0=C(d0=>{"use strict";Object.defineProperty(d0,"__esModule",{value:!0});var hhe=mm(),hU=class{constructor(e,r){this._root=e,this._settings=r,this._root=hhe.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};d0.default=hU});var I0=C(m0=>{"use strict";Object.defineProperty(m0,"__esModule",{value:!0});var phe=require("events"),dhe=Cm(),Che=fU(),Im=mm(),mhe=C0(),pU=class extends mhe.default{constructor(e,r){super(e,r);this._settings=r,this._scandir=dhe.scandir,this._emitter=new phe.EventEmitter,this._queue=Che(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on("entry",e)}onError(e){this._emitter.once("error",e)}onEnd(e){this._emitter.once("end",e)}_pushToQueue(e,r){let i={directory:e,base:r};this._queue.push(i,n=>{n!==null&&this._handleError(n)})}_worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,(i,n)=>{if(i!==null){r(i,void 0);return}for(let s of n)this._handleEntry(s,e.base);r(null,void 0)})}_handleError(e){this._isDestroyed||!Im.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",e))}_handleEntry(e,r){if(this._isDestroyed||this._isFatalError)return;let i=e.path;r!==void 0&&(e.path=Im.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),Im.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&Im.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};m0.default=pU});var CU=C(E0=>{"use strict";Object.defineProperty(E0,"__esModule",{value:!0});var Ihe=I0(),dU=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Ihe.default(this._root,this._settings),this._storage=new Set}read(e){this._reader.onError(r=>{Ehe(e,r)}),this._reader.onEntry(r=>{this._storage.add(r)}),this._reader.onEnd(()=>{yhe(e,[...this._storage])}),this._reader.read()}};E0.default=dU;function Ehe(t,e){t(e)}function yhe(t,e){t(null,e)}});var IU=C(y0=>{"use strict";Object.defineProperty(y0,"__esModule",{value:!0});var Bhe=require("stream"),whe=I0(),mU=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new whe.default(this._root,this._settings),this._stream=new Bhe.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit("error",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};y0.default=mU});var yU=C(B0=>{"use strict";Object.defineProperty(B0,"__esModule",{value:!0});var Qhe=Cm(),Em=mm(),bhe=C0(),EU=class extends bhe.default{constructor(){super(...arguments);this._scandir=Qhe.scandirSync,this._storage=new Set,this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),[...this._storage]}_pushToQueue(e,r){this._queue.add({directory:e,base:r})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,r){try{let i=this._scandir(e,this._settings.fsScandirSettings);for(let n of i)this._handleEntry(n,r)}catch(i){this._handleError(i)}}_handleError(e){if(!!Em.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let i=e.path;r!==void 0&&(e.path=Em.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),Em.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&Em.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_pushToStorage(e){this._storage.add(e)}};B0.default=EU});var wU=C(w0=>{"use strict";Object.defineProperty(w0,"__esModule",{value:!0});var Dhe=yU(),BU=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Dhe.default(this._root,this._settings)}read(){return this._reader.read()}};w0.default=BU});var bU=C(Q0=>{"use strict";Object.defineProperty(Q0,"__esModule",{value:!0});var She=require("path"),xhe=Cm(),QU=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,She.sep),this.fsScandirSettings=new xhe.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e!=null?e:r}};Q0.default=QU});var D0=C(ns=>{"use strict";Object.defineProperty(ns,"__esModule",{value:!0});ns.Settings=ns.walkStream=ns.walkSync=ns.walk=void 0;var DU=CU(),khe=IU(),Phe=wU(),b0=bU();ns.Settings=b0.default;function vhe(t,e,r){if(typeof e=="function"){new DU.default(t,ym()).read(e);return}new DU.default(t,ym(e)).read(r)}ns.walk=vhe;function Fhe(t,e){let r=ym(e);return new Phe.default(t,r).read()}ns.walkSync=Fhe;function Rhe(t,e){let r=ym(e);return new khe.default(t,r).read()}ns.walkStream=Rhe;function ym(t={}){return t instanceof b0.default?t:new b0.default(t)}});var x0=C(S0=>{"use strict";Object.defineProperty(S0,"__esModule",{value:!0});var Lhe=require("path"),Nhe=lA(),SU=Gs(),xU=class{constructor(e){this._settings=e,this._fsStatSettings=new Nhe.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return Lhe.resolve(this._settings.cwd,e)}_makeEntry(e,r){let i={name:r,path:r,dirent:SU.fs.createDirentFromStats(r,e)};return this._settings.stats&&(i.stats=e),i}_isFatalError(e){return!SU.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};S0.default=xU});var P0=C(k0=>{"use strict";Object.defineProperty(k0,"__esModule",{value:!0});var Mhe=require("stream"),Ohe=lA(),The=D0(),Khe=x0(),kU=class extends Khe.default{constructor(){super(...arguments);this._walkStream=The.walkStream,this._stat=Ohe.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let i=e.map(this._getFullEntryPath,this),n=new Mhe.PassThrough({objectMode:!0});n._write=(s,o,a)=>this._getEntry(i[s],e[s],r).then(l=>{l!==null&&r.entryFilter(l)&&n.push(l),s===i.length-1&&n.end(),a()}).catch(a);for(let s=0;sthis._makeEntry(n,r)).catch(n=>{if(i.errorFilter(n))return null;throw n})}_getStat(e){return new Promise((r,i)=>{this._stat(e,this._fsStatSettings,(n,s)=>n===null?r(s):i(n))})}};k0.default=kU});var vU=C(v0=>{"use strict";Object.defineProperty(v0,"__esModule",{value:!0});var zl=Gs(),PU=class{constructor(e,r,i){this._patterns=e,this._settings=r,this._micromatchOptions=i,this._storage=[],this._fillStorage()}_fillStorage(){let e=zl.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let r of e){let i=this._getPatternSegments(r),n=this._splitSegmentsIntoSections(i);this._storage.push({complete:n.length<=1,pattern:r,segments:i,sections:n})}}_getPatternSegments(e){return zl.pattern.getPatternParts(e,this._micromatchOptions).map(i=>zl.pattern.isDynamicPattern(i,this._settings)?{dynamic:!0,pattern:i,patternRe:zl.pattern.makeRe(i,this._micromatchOptions)}:{dynamic:!1,pattern:i})}_splitSegmentsIntoSections(e){return zl.array.splitWhen(e,r=>r.dynamic&&zl.pattern.hasGlobStar(r.pattern))}};v0.default=PU});var RU=C(F0=>{"use strict";Object.defineProperty(F0,"__esModule",{value:!0});var Uhe=vU(),FU=class extends Uhe.default{match(e){let r=e.split("/"),i=r.length,n=this._storage.filter(s=>!s.complete||s.segments.length>i);for(let s of n){let o=s.sections[0];if(!s.complete&&i>o.length||r.every((l,c)=>{let u=s.segments[c];return!!(u.dynamic&&u.patternRe.test(l)||!u.dynamic&&u.pattern===l)}))return!0}return!1}};F0.default=FU});var NU=C(R0=>{"use strict";Object.defineProperty(R0,"__esModule",{value:!0});var Bm=Gs(),Yhe=RU(),LU=class{constructor(e,r){this._settings=e,this._micromatchOptions=r}getFilter(e,r,i){let n=this._getMatcher(r),s=this._getNegativePatternsRe(i);return o=>this._filter(e,o,n,s)}_getMatcher(e){return new Yhe.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(Bm.pattern.isAffectDepthOfReadingPattern);return Bm.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,i,n){let s=this._getEntryLevel(e,r.path);if(this._isSkippedByDeep(s)||this._isSkippedSymbolicLink(r))return!1;let o=Bm.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(o,i)?!1:this._isSkippedByNegativePatterns(o,n)}_isSkippedByDeep(e){return e>=this._settings.deep}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_getEntryLevel(e,r){let i=e.split("/").length;return r.split("/").length-(e===""?0:i)}_isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!r.match(e)}_isSkippedByNegativePatterns(e,r){return!Bm.pattern.matchAny(e,r)}};R0.default=LU});var OU=C(L0=>{"use strict";Object.defineProperty(L0,"__esModule",{value:!0});var cf=Gs(),MU=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let i=cf.pattern.convertPatternsToRe(e,this._micromatchOptions),n=cf.pattern.convertPatternsToRe(r,this._micromatchOptions);return s=>this._filter(s,i,n)}_filter(e,r,i){if(this._settings.unique){if(this._isDuplicateEntry(e))return!1;this._createIndexRecord(e)}if(this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e,i))return!1;let n=this._settings.baseNameMatch?e.name:e.path;return this._isMatchToPatterns(n,r)&&!this._isMatchToPatterns(e.path,i)}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,r){if(!this._settings.absolute)return!1;let i=cf.path.makeAbsolute(this._settings.cwd,e.path);return this._isMatchToPatterns(i,r)}_isMatchToPatterns(e,r){let i=cf.path.removeLeadingDotSegment(e);return cf.pattern.matchAny(i,r)}};L0.default=MU});var KU=C(N0=>{"use strict";Object.defineProperty(N0,"__esModule",{value:!0});var Hhe=Gs(),TU=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return Hhe.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};N0.default=TU});var HU=C(M0=>{"use strict";Object.defineProperty(M0,"__esModule",{value:!0});var UU=Gs(),YU=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=UU.path.makeAbsolute(this._settings.cwd,r),r=UU.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};M0.default=YU});var wm=C(O0=>{"use strict";Object.defineProperty(O0,"__esModule",{value:!0});var jhe=require("path"),Ghe=NU(),qhe=OU(),Jhe=KU(),Whe=HU(),jU=class{constructor(e){this._settings=e,this.errorFilter=new Jhe.default(this._settings),this.entryFilter=new qhe.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new Ghe.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new Whe.default(this._settings)}_getRootDirectory(e){return jhe.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let r=e.base==="."?"":e.base;return{basePath:r,pathSegmentSeparator:"/",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(r,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};O0.default=jU});var qU=C(T0=>{"use strict";Object.defineProperty(T0,"__esModule",{value:!0});var zhe=P0(),Vhe=wm(),GU=class extends Vhe.default{constructor(){super(...arguments);this._reader=new zhe.default(this._settings)}read(e){let r=this._getRootDirectory(e),i=this._getReaderOptions(e),n=[];return new Promise((s,o)=>{let a=this.api(r,e,i);a.once("error",o),a.on("data",l=>n.push(i.transform(l))),a.once("end",()=>s(n))})}api(e,r,i){return r.dynamic?this._reader.dynamic(e,i):this._reader.static(r.patterns,i)}};T0.default=GU});var WU=C(K0=>{"use strict";Object.defineProperty(K0,"__esModule",{value:!0});var Xhe=require("stream"),Zhe=P0(),_he=wm(),JU=class extends _he.default{constructor(){super(...arguments);this._reader=new Zhe.default(this._settings)}read(e){let r=this._getRootDirectory(e),i=this._getReaderOptions(e),n=this.api(r,e,i),s=new Xhe.Readable({objectMode:!0,read:()=>{}});return n.once("error",o=>s.emit("error",o)).on("data",o=>s.emit("data",i.transform(o))).once("end",()=>s.emit("end")),s.once("close",()=>n.destroy()),s}api(e,r,i){return r.dynamic?this._reader.dynamic(e,i):this._reader.static(r.patterns,i)}};K0.default=JU});var VU=C(U0=>{"use strict";Object.defineProperty(U0,"__esModule",{value:!0});var $he=lA(),epe=D0(),tpe=x0(),zU=class extends tpe.default{constructor(){super(...arguments);this._walkSync=epe.walkSync,this._statSync=$he.statSync}dynamic(e,r){return this._walkSync(e,r)}static(e,r){let i=[];for(let n of e){let s=this._getFullEntryPath(n),o=this._getEntry(s,n,r);o===null||!r.entryFilter(o)||i.push(o)}return i}_getEntry(e,r,i){try{let n=this._getStat(e);return this._makeEntry(n,r)}catch(n){if(i.errorFilter(n))return null;throw n}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};U0.default=zU});var ZU=C(Y0=>{"use strict";Object.defineProperty(Y0,"__esModule",{value:!0});var rpe=VU(),ipe=wm(),XU=class extends ipe.default{constructor(){super(...arguments);this._reader=new rpe.default(this._settings)}read(e){let r=this._getRootDirectory(e),i=this._getReaderOptions(e);return this.api(r,e,i).map(i.transform)}api(e,r,i){return r.dynamic?this._reader.dynamic(e,i):this._reader.static(r.patterns,i)}};Y0.default=XU});var $U=C(uf=>{"use strict";Object.defineProperty(uf,"__esModule",{value:!0});var Vl=require("fs"),npe=require("os"),spe=npe.cpus().length;uf.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:Vl.lstat,lstatSync:Vl.lstatSync,stat:Vl.stat,statSync:Vl.statSync,readdir:Vl.readdir,readdirSync:Vl.readdirSync};var _U=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,spe),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,Infinity),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,r){return e===void 0?r:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},uf.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};uf.default=_U});var Qm=C((M6e,e2)=>{"use strict";var t2=N1(),ope=qU(),ape=WU(),Ape=ZU(),H0=$U(),cA=Gs();async function G0(t,e){Xl(t);let r=j0(t,ope.default,e),i=await Promise.all(r);return cA.array.flatten(i)}(function(t){function e(o,a){Xl(o);let l=j0(o,Ape.default,a);return cA.array.flatten(l)}t.sync=e;function r(o,a){Xl(o);let l=j0(o,ape.default,a);return cA.stream.merge(l)}t.stream=r;function i(o,a){Xl(o);let l=[].concat(o),c=new H0.default(a);return t2.generate(l,c)}t.generateTasks=i;function n(o,a){Xl(o);let l=new H0.default(a);return cA.pattern.isDynamicPattern(o,l)}t.isDynamicPattern=n;function s(o){return Xl(o),cA.path.escape(o)}t.escapePath=s})(G0||(G0={}));function j0(t,e,r){let i=[].concat(t),n=new H0.default(r),s=t2.generate(i,n),o=new e(n);return s.map(o.read,o)}function Xl(t){if(![].concat(t).every(i=>cA.string.isString(i)&&!cA.string.isEmpty(i)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}e2.exports=G0});var i2=C(uA=>{"use strict";var{promisify:lpe}=require("util"),r2=require("fs");async function q0(t,e,r){if(typeof r!="string")throw new TypeError(`Expected a string, got ${typeof r}`);try{return(await lpe(r2[t])(r))[e]()}catch(i){if(i.code==="ENOENT")return!1;throw i}}function J0(t,e,r){if(typeof r!="string")throw new TypeError(`Expected a string, got ${typeof r}`);try{return r2[t](r)[e]()}catch(i){if(i.code==="ENOENT")return!1;throw i}}uA.isFile=q0.bind(null,"stat","isFile");uA.isDirectory=q0.bind(null,"stat","isDirectory");uA.isSymlink=q0.bind(null,"lstat","isSymbolicLink");uA.isFileSync=J0.bind(null,"statSync","isFile");uA.isDirectorySync=J0.bind(null,"statSync","isDirectory");uA.isSymlinkSync=J0.bind(null,"lstatSync","isSymbolicLink")});var A2=C((T6e,W0)=>{"use strict";var gA=require("path"),n2=i2(),s2=t=>t.length>1?`{${t.join(",")}}`:t[0],o2=(t,e)=>{let r=t[0]==="!"?t.slice(1):t;return gA.isAbsolute(r)?r:gA.join(e,r)},cpe=(t,e)=>gA.extname(t)?`**/${t}`:`**/${t}.${s2(e)}`,a2=(t,e)=>{if(e.files&&!Array.isArray(e.files))throw new TypeError(`Expected \`files\` to be of type \`Array\` but received type \`${typeof e.files}\``);if(e.extensions&&!Array.isArray(e.extensions))throw new TypeError(`Expected \`extensions\` to be of type \`Array\` but received type \`${typeof e.extensions}\``);return e.files&&e.extensions?e.files.map(r=>gA.posix.join(t,cpe(r,e.extensions))):e.files?e.files.map(r=>gA.posix.join(t,`**/${r}`)):e.extensions?[gA.posix.join(t,`**/*.${s2(e.extensions)}`)]:[gA.posix.join(t,"**")]};W0.exports=async(t,e)=>{if(e=P({cwd:process.cwd()},e),typeof e.cwd!="string")throw new TypeError(`Expected \`cwd\` to be of type \`string\` but received type \`${typeof e.cwd}\``);let r=await Promise.all([].concat(t).map(async i=>await n2.isDirectory(o2(i,e.cwd))?a2(i,e):i));return[].concat.apply([],r)};W0.exports.sync=(t,e)=>{if(e=P({cwd:process.cwd()},e),typeof e.cwd!="string")throw new TypeError(`Expected \`cwd\` to be of type \`string\` but received type \`${typeof e.cwd}\``);let r=[].concat(t).map(i=>n2.isDirectorySync(o2(i,e.cwd))?a2(i,e):i);return[].concat.apply([],r)}});var d2=C((K6e,l2)=>{function c2(t){return Array.isArray(t)?t:[t]}var upe=/^\s+$/,gpe=/^\\!/,fpe=/^\\#/,hpe=/\r?\n/g,ppe=/^\.*\/|^\.+$/,z0="/",u2=typeof Symbol!="undefined"?Symbol.for("node-ignore"):"node-ignore",dpe=(t,e,r)=>Object.defineProperty(t,e,{value:r}),Cpe=/([0-z])-([0-z])/g,mpe=t=>t.replace(Cpe,(e,r,i)=>r.charCodeAt(0)<=i.charCodeAt(0)?e:""),Ipe=[[/\\?\s+$/,t=>t.indexOf("\\")===0?" ":""],[/\\\s/g,()=>" "],[/[\\^$.|*+(){]/g,t=>`\\${t}`],[/\[([^\]/]*)($|\])/g,(t,e,r)=>r==="]"?`[${mpe(e)}]`:`\\${t}`],[/(?!\\)\?/g,()=>"[^/]"],[/^\//,()=>"^"],[/\//g,()=>"\\/"],[/^\^*\\\*\\\*\\\//,()=>"^(?:.*\\/)?"],[/(?:[^*])$/,t=>/\/$/.test(t)?`${t}$`:`${t}(?=$|\\/$)`],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?"^":"(?:^|\\/)"}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(t,e,r)=>e+6`${e}[^\\/]*`],[/(\^|\\\/)?\\\*$/,(t,e)=>`${e?`${e}[^/]+`:"[^/]*"}(?=$|\\/$)`],[/\\\\\\/g,()=>"\\"]],g2=Object.create(null),Epe=(t,e,r)=>{let i=g2[t];if(i)return i;let n=Ipe.reduce((s,o)=>s.replace(o[0],o[1].bind(t)),t);return g2[t]=r?new RegExp(n,"i"):new RegExp(n)},V0=t=>typeof t=="string",ype=t=>t&&V0(t)&&!upe.test(t)&&t.indexOf("#")!==0,Bpe=t=>t.split(hpe),f2=class{constructor(e,r,i,n){this.origin=e,this.pattern=r,this.negative=i,this.regex=n}},wpe=(t,e)=>{let r=t,i=!1;t.indexOf("!")===0&&(i=!0,t=t.substr(1)),t=t.replace(gpe,"!").replace(fpe,"#");let n=Epe(t,i,e);return new f2(r,t,i,n)},Qpe=(t,e)=>{throw new e(t)},Js=(t,e,r)=>V0(t)?t?Js.isNotRelative(t)?r(`path should be a \`path.relative()\`d string, but got "${e}"`,RangeError):!0:r("path must not be empty",TypeError):r(`path must be a string, but got \`${e}\``,TypeError),h2=t=>ppe.test(t);Js.isNotRelative=h2;Js.convert=t=>t;var p2=class{constructor({ignorecase:e=!0}={}){this._rules=[],this._ignorecase=e,dpe(this,u2,!0),this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}_addPattern(e){if(e&&e[u2]){this._rules=this._rules.concat(e._rules),this._added=!0;return}if(ype(e)){let r=wpe(e,this._ignorecase);this._added=!0,this._rules.push(r)}}add(e){return this._added=!1,c2(V0(e)?Bpe(e):e).forEach(this._addPattern,this),this._added&&this._initCache(),this}addPattern(e){return this.add(e)}_testOne(e,r){let i=!1,n=!1;return this._rules.forEach(s=>{let{negative:o}=s;if(n===o&&i!==n||o&&!i&&!n&&!r)return;s.regex.test(e)&&(i=!o,n=o)}),{ignored:i,unignored:n}}_test(e,r,i,n){let s=e&&Js.convert(e);return Js(s,e,Qpe),this._t(s,r,i,n)}_t(e,r,i,n){if(e in r)return r[e];if(n||(n=e.split(z0)),n.pop(),!n.length)return r[e]=this._testOne(e,i);let s=this._t(n.join(z0)+z0,r,i,n);return r[e]=s.ignored?s:this._testOne(e,i)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return c2(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},bm=t=>new p2(t),bpe=()=>!1,Dpe=t=>Js(t&&Js.convert(t),t,bpe);bm.isPathValid=Dpe;bm.default=bm;l2.exports=bm;if(typeof process!="undefined"&&(process.env&&process.env.IGNORE_TEST_WIN32||process.platform==="win32")){let t=r=>/^\\\\\?\\/.test(r)||/["<>|\u0000-\u001F]+/u.test(r)?r:r.replace(/\\/g,"/");Js.convert=t;let e=/^[a-z]:\//i;Js.isNotRelative=r=>e.test(r)||h2(r)}});var m2=C((U6e,C2)=>{"use strict";C2.exports=t=>{let e=/^\\\\\?\\/.test(t),r=/[^\u0000-\u0080]+/.test(t);return e||r?t:t.replace(/\\/g,"/")}});var b2=C((Y6e,X0)=>{"use strict";var{promisify:Spe}=require("util"),I2=require("fs"),Ws=require("path"),E2=Qm(),xpe=d2(),gf=m2(),y2=["**/node_modules/**","**/flow-typed/**","**/coverage/**","**/.git"],kpe=Spe(I2.readFile),Ppe=t=>e=>e.startsWith("!")?"!"+Ws.posix.join(t,e.slice(1)):Ws.posix.join(t,e),vpe=(t,e)=>{let r=gf(Ws.relative(e.cwd,Ws.dirname(e.fileName)));return t.split(/\r?\n/).filter(Boolean).filter(i=>!i.startsWith("#")).map(Ppe(r))},B2=t=>{let e=xpe();for(let r of t)e.add(vpe(r.content,{cwd:r.cwd,fileName:r.filePath}));return e},Fpe=(t,e)=>{if(t=gf(t),Ws.isAbsolute(e)){if(gf(e).startsWith(t))return e;throw new Error(`Path ${e} is not in cwd ${t}`)}return Ws.join(t,e)},w2=(t,e)=>r=>t.ignores(gf(Ws.relative(e,Fpe(e,r.path||r)))),Rpe=async(t,e)=>{let r=Ws.join(e,t),i=await kpe(r,"utf8");return{cwd:e,filePath:r,content:i}},Lpe=(t,e)=>{let r=Ws.join(e,t),i=I2.readFileSync(r,"utf8");return{cwd:e,filePath:r,content:i}},Q2=({ignore:t=[],cwd:e=gf(process.cwd())}={})=>({ignore:t,cwd:e});X0.exports=async t=>{t=Q2(t);let e=await E2("**/.gitignore",{ignore:y2.concat(t.ignore),cwd:t.cwd}),r=await Promise.all(e.map(n=>Rpe(n,t.cwd))),i=B2(r);return w2(i,t.cwd)};X0.exports.sync=t=>{t=Q2(t);let r=E2.sync("**/.gitignore",{ignore:y2.concat(t.ignore),cwd:t.cwd}).map(n=>Lpe(n,t.cwd)),i=B2(r);return w2(i,t.cwd)}});var k2=C((H6e,D2)=>{"use strict";var{Transform:Npe}=require("stream"),Z0=class extends Npe{constructor(){super({objectMode:!0})}},S2=class extends Z0{constructor(e){super();this._filter=e}_transform(e,r,i){this._filter(e)&&this.push(e),i()}},x2=class extends Z0{constructor(){super();this._pushed=new Set}_transform(e,r,i){this._pushed.has(e)||(this.push(e),this._pushed.add(e)),i()}};D2.exports={FilterStream:S2,UniqueStream:x2}});var tb=C((j6e,fA)=>{"use strict";var P2=require("fs"),Dm=n1(),Mpe=ZQ(),Sm=Qm(),xm=A2(),_0=b2(),{FilterStream:Ope,UniqueStream:Tpe}=k2(),v2=()=>!1,F2=t=>t[0]==="!",Kpe=t=>{if(!t.every(e=>typeof e=="string"))throw new TypeError("Patterns must be a string or an array of strings")},Upe=(t={})=>{if(!t.cwd)return;let e;try{e=P2.statSync(t.cwd)}catch{return}if(!e.isDirectory())throw new Error("The `cwd` option must be a path to a directory")},Ype=t=>t.stats instanceof P2.Stats?t.path:t,km=(t,e)=>{t=Dm([].concat(t)),Kpe(t),Upe(e);let r=[];e=P({ignore:[],expandDirectories:!0},e);for(let[i,n]of t.entries()){if(F2(n))continue;let s=t.slice(i).filter(a=>F2(a)).map(a=>a.slice(1)),o=V(P({},e),{ignore:e.ignore.concat(s)});r.push({pattern:n,options:o})}return r},Hpe=(t,e)=>{let r={};return t.options.cwd&&(r.cwd=t.options.cwd),Array.isArray(t.options.expandDirectories)?r=V(P({},r),{files:t.options.expandDirectories}):typeof t.options.expandDirectories=="object"&&(r=P(P({},r),t.options.expandDirectories)),e(t.pattern,r)},$0=(t,e)=>t.options.expandDirectories?Hpe(t,e):[t.pattern],R2=t=>t&&t.gitignore?_0.sync({cwd:t.cwd,ignore:t.ignore}):v2,eb=t=>e=>{let{options:r}=t;return r.ignore&&Array.isArray(r.ignore)&&r.expandDirectories&&(r.ignore=xm.sync(r.ignore)),{pattern:e,options:r}};fA.exports=async(t,e)=>{let r=km(t,e),i=async()=>e&&e.gitignore?_0({cwd:e.cwd,ignore:e.ignore}):v2,n=async()=>{let l=await Promise.all(r.map(async c=>{let u=await $0(c,xm);return Promise.all(u.map(eb(c)))}));return Dm(...l)},[s,o]=await Promise.all([i(),n()]),a=await Promise.all(o.map(l=>Sm(l.pattern,l.options)));return Dm(...a).filter(l=>!s(Ype(l)))};fA.exports.sync=(t,e)=>{let r=km(t,e),i=[];for(let o of r){let a=$0(o,xm.sync).map(eb(o));i.push(...a)}let n=R2(e),s=[];for(let o of i)s=Dm(s,Sm.sync(o.pattern,o.options));return s.filter(o=>!n(o))};fA.exports.stream=(t,e)=>{let r=km(t,e),i=[];for(let a of r){let l=$0(a,xm.sync).map(eb(a));i.push(...l)}let n=R2(e),s=new Ope(a=>!n(a)),o=new Tpe;return Mpe(i.map(a=>Sm.stream(a.pattern,a.options))).pipe(s).pipe(o)};fA.exports.generateGlobTasks=km;fA.exports.hasMagic=(t,e)=>[].concat(t).some(r=>Sm.isDynamicPattern(r,e));fA.exports.gitignore=_0});var Vs=C((zs,Hm)=>{"use strict";Object.defineProperty(zs,"__esModule",{value:!0});var H2=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function tde(t){return H2.includes(t)}var rde=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement",...H2];function ide(t){return rde.includes(t)}var nde=["null","undefined","string","number","bigint","boolean","symbol"];function sde(t){return nde.includes(t)}function ic(t){return e=>typeof e===t}var{toString:j2}=Object.prototype,wf=t=>{let e=j2.call(t).slice(8,-1);if(/HTML\w+Element/.test(e)&&G.domElement(t))return"HTMLElement";if(ide(e))return e},Vt=t=>e=>wf(e)===t;function G(t){if(t===null)return"null";switch(typeof t){case"undefined":return"undefined";case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"function":return"Function";case"bigint":return"bigint";case"symbol":return"symbol";default:}if(G.observable(t))return"Observable";if(G.array(t))return"Array";if(G.buffer(t))return"Buffer";let e=wf(t);if(e)return e;if(t instanceof String||t instanceof Boolean||t instanceof Number)throw new TypeError("Please don't use object wrappers for primitive types");return"Object"}G.undefined=ic("undefined");G.string=ic("string");var ode=ic("number");G.number=t=>ode(t)&&!G.nan(t);G.bigint=ic("bigint");G.function_=ic("function");G.null_=t=>t===null;G.class_=t=>G.function_(t)&&t.toString().startsWith("class ");G.boolean=t=>t===!0||t===!1;G.symbol=ic("symbol");G.numericString=t=>G.string(t)&&!G.emptyStringOrWhitespace(t)&&!Number.isNaN(Number(t));G.array=(t,e)=>Array.isArray(t)?G.function_(e)?t.every(e):!0:!1;G.buffer=t=>{var e,r,i,n;return(n=(i=(r=(e=t)===null||e===void 0?void 0:e.constructor)===null||r===void 0?void 0:r.isBuffer)===null||i===void 0?void 0:i.call(r,t))!==null&&n!==void 0?n:!1};G.nullOrUndefined=t=>G.null_(t)||G.undefined(t);G.object=t=>!G.null_(t)&&(typeof t=="object"||G.function_(t));G.iterable=t=>{var e;return G.function_((e=t)===null||e===void 0?void 0:e[Symbol.iterator])};G.asyncIterable=t=>{var e;return G.function_((e=t)===null||e===void 0?void 0:e[Symbol.asyncIterator])};G.generator=t=>G.iterable(t)&&G.function_(t.next)&&G.function_(t.throw);G.asyncGenerator=t=>G.asyncIterable(t)&&G.function_(t.next)&&G.function_(t.throw);G.nativePromise=t=>Vt("Promise")(t);var ade=t=>{var e,r;return G.function_((e=t)===null||e===void 0?void 0:e.then)&&G.function_((r=t)===null||r===void 0?void 0:r.catch)};G.promise=t=>G.nativePromise(t)||ade(t);G.generatorFunction=Vt("GeneratorFunction");G.asyncGeneratorFunction=t=>wf(t)==="AsyncGeneratorFunction";G.asyncFunction=t=>wf(t)==="AsyncFunction";G.boundFunction=t=>G.function_(t)&&!t.hasOwnProperty("prototype");G.regExp=Vt("RegExp");G.date=Vt("Date");G.error=Vt("Error");G.map=t=>Vt("Map")(t);G.set=t=>Vt("Set")(t);G.weakMap=t=>Vt("WeakMap")(t);G.weakSet=t=>Vt("WeakSet")(t);G.int8Array=Vt("Int8Array");G.uint8Array=Vt("Uint8Array");G.uint8ClampedArray=Vt("Uint8ClampedArray");G.int16Array=Vt("Int16Array");G.uint16Array=Vt("Uint16Array");G.int32Array=Vt("Int32Array");G.uint32Array=Vt("Uint32Array");G.float32Array=Vt("Float32Array");G.float64Array=Vt("Float64Array");G.bigInt64Array=Vt("BigInt64Array");G.bigUint64Array=Vt("BigUint64Array");G.arrayBuffer=Vt("ArrayBuffer");G.sharedArrayBuffer=Vt("SharedArrayBuffer");G.dataView=Vt("DataView");G.directInstanceOf=(t,e)=>Object.getPrototypeOf(t)===e.prototype;G.urlInstance=t=>Vt("URL")(t);G.urlString=t=>{if(!G.string(t))return!1;try{return new URL(t),!0}catch(e){return!1}};G.truthy=t=>Boolean(t);G.falsy=t=>!t;G.nan=t=>Number.isNaN(t);G.primitive=t=>G.null_(t)||sde(typeof t);G.integer=t=>Number.isInteger(t);G.safeInteger=t=>Number.isSafeInteger(t);G.plainObject=t=>{if(j2.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);return e===null||e===Object.getPrototypeOf({})};G.typedArray=t=>tde(wf(t));var Ade=t=>G.safeInteger(t)&&t>=0;G.arrayLike=t=>!G.nullOrUndefined(t)&&!G.function_(t)&&Ade(t.length);G.inRange=(t,e)=>{if(G.number(e))return t>=Math.min(0,e)&&t<=Math.max(e,0);if(G.array(e)&&e.length===2)return t>=Math.min(...e)&&t<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var lde=1,cde=["innerHTML","ownerDocument","style","attributes","nodeValue"];G.domElement=t=>G.object(t)&&t.nodeType===lde&&G.string(t.nodeName)&&!G.plainObject(t)&&cde.every(e=>e in t);G.observable=t=>{var e,r,i,n;return t?t===((r=(e=t)[Symbol.observable])===null||r===void 0?void 0:r.call(e))||t===((n=(i=t)["@@observable"])===null||n===void 0?void 0:n.call(i)):!1};G.nodeStream=t=>G.object(t)&&G.function_(t.pipe)&&!G.observable(t);G.infinite=t=>t===Infinity||t===-Infinity;var G2=t=>e=>G.integer(e)&&Math.abs(e%2)===t;G.evenInteger=G2(0);G.oddInteger=G2(1);G.emptyArray=t=>G.array(t)&&t.length===0;G.nonEmptyArray=t=>G.array(t)&&t.length>0;G.emptyString=t=>G.string(t)&&t.length===0;G.nonEmptyString=t=>G.string(t)&&t.length>0;var ude=t=>G.string(t)&&!/\S/.test(t);G.emptyStringOrWhitespace=t=>G.emptyString(t)||ude(t);G.emptyObject=t=>G.object(t)&&!G.map(t)&&!G.set(t)&&Object.keys(t).length===0;G.nonEmptyObject=t=>G.object(t)&&!G.map(t)&&!G.set(t)&&Object.keys(t).length>0;G.emptySet=t=>G.set(t)&&t.size===0;G.nonEmptySet=t=>G.set(t)&&t.size>0;G.emptyMap=t=>G.map(t)&&t.size===0;G.nonEmptyMap=t=>G.map(t)&&t.size>0;var q2=(t,e,r)=>{if(!G.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(r.length===0)throw new TypeError("Invalid number of values");return t.call(r,e)};G.any=(t,...e)=>(G.array(t)?t:[t]).some(i=>q2(Array.prototype.some,i,e));G.all=(t,...e)=>q2(Array.prototype.every,t,e);var Le=(t,e,r)=>{if(!t)throw new TypeError(`Expected value which is \`${e}\`, received value of type \`${G(r)}\`.`)};zs.assert={undefined:t=>Le(G.undefined(t),"undefined",t),string:t=>Le(G.string(t),"string",t),number:t=>Le(G.number(t),"number",t),bigint:t=>Le(G.bigint(t),"bigint",t),function_:t=>Le(G.function_(t),"Function",t),null_:t=>Le(G.null_(t),"null",t),class_:t=>Le(G.class_(t),"Class",t),boolean:t=>Le(G.boolean(t),"boolean",t),symbol:t=>Le(G.symbol(t),"symbol",t),numericString:t=>Le(G.numericString(t),"string with a number",t),array:(t,e)=>{Le(G.array(t),"Array",t),e&&t.forEach(e)},buffer:t=>Le(G.buffer(t),"Buffer",t),nullOrUndefined:t=>Le(G.nullOrUndefined(t),"null or undefined",t),object:t=>Le(G.object(t),"Object",t),iterable:t=>Le(G.iterable(t),"Iterable",t),asyncIterable:t=>Le(G.asyncIterable(t),"AsyncIterable",t),generator:t=>Le(G.generator(t),"Generator",t),asyncGenerator:t=>Le(G.asyncGenerator(t),"AsyncGenerator",t),nativePromise:t=>Le(G.nativePromise(t),"native Promise",t),promise:t=>Le(G.promise(t),"Promise",t),generatorFunction:t=>Le(G.generatorFunction(t),"GeneratorFunction",t),asyncGeneratorFunction:t=>Le(G.asyncGeneratorFunction(t),"AsyncGeneratorFunction",t),asyncFunction:t=>Le(G.asyncFunction(t),"AsyncFunction",t),boundFunction:t=>Le(G.boundFunction(t),"Function",t),regExp:t=>Le(G.regExp(t),"RegExp",t),date:t=>Le(G.date(t),"Date",t),error:t=>Le(G.error(t),"Error",t),map:t=>Le(G.map(t),"Map",t),set:t=>Le(G.set(t),"Set",t),weakMap:t=>Le(G.weakMap(t),"WeakMap",t),weakSet:t=>Le(G.weakSet(t),"WeakSet",t),int8Array:t=>Le(G.int8Array(t),"Int8Array",t),uint8Array:t=>Le(G.uint8Array(t),"Uint8Array",t),uint8ClampedArray:t=>Le(G.uint8ClampedArray(t),"Uint8ClampedArray",t),int16Array:t=>Le(G.int16Array(t),"Int16Array",t),uint16Array:t=>Le(G.uint16Array(t),"Uint16Array",t),int32Array:t=>Le(G.int32Array(t),"Int32Array",t),uint32Array:t=>Le(G.uint32Array(t),"Uint32Array",t),float32Array:t=>Le(G.float32Array(t),"Float32Array",t),float64Array:t=>Le(G.float64Array(t),"Float64Array",t),bigInt64Array:t=>Le(G.bigInt64Array(t),"BigInt64Array",t),bigUint64Array:t=>Le(G.bigUint64Array(t),"BigUint64Array",t),arrayBuffer:t=>Le(G.arrayBuffer(t),"ArrayBuffer",t),sharedArrayBuffer:t=>Le(G.sharedArrayBuffer(t),"SharedArrayBuffer",t),dataView:t=>Le(G.dataView(t),"DataView",t),urlInstance:t=>Le(G.urlInstance(t),"URL",t),urlString:t=>Le(G.urlString(t),"string with a URL",t),truthy:t=>Le(G.truthy(t),"truthy",t),falsy:t=>Le(G.falsy(t),"falsy",t),nan:t=>Le(G.nan(t),"NaN",t),primitive:t=>Le(G.primitive(t),"primitive",t),integer:t=>Le(G.integer(t),"integer",t),safeInteger:t=>Le(G.safeInteger(t),"integer",t),plainObject:t=>Le(G.plainObject(t),"plain object",t),typedArray:t=>Le(G.typedArray(t),"TypedArray",t),arrayLike:t=>Le(G.arrayLike(t),"array-like",t),domElement:t=>Le(G.domElement(t),"HTMLElement",t),observable:t=>Le(G.observable(t),"Observable",t),nodeStream:t=>Le(G.nodeStream(t),"Node.js Stream",t),infinite:t=>Le(G.infinite(t),"infinite number",t),emptyArray:t=>Le(G.emptyArray(t),"empty array",t),nonEmptyArray:t=>Le(G.nonEmptyArray(t),"non-empty array",t),emptyString:t=>Le(G.emptyString(t),"empty string",t),nonEmptyString:t=>Le(G.nonEmptyString(t),"non-empty string",t),emptyStringOrWhitespace:t=>Le(G.emptyStringOrWhitespace(t),"empty string or whitespace",t),emptyObject:t=>Le(G.emptyObject(t),"empty object",t),nonEmptyObject:t=>Le(G.nonEmptyObject(t),"non-empty object",t),emptySet:t=>Le(G.emptySet(t),"empty set",t),nonEmptySet:t=>Le(G.nonEmptySet(t),"non-empty set",t),emptyMap:t=>Le(G.emptyMap(t),"empty map",t),nonEmptyMap:t=>Le(G.nonEmptyMap(t),"non-empty map",t),evenInteger:t=>Le(G.evenInteger(t),"even integer",t),oddInteger:t=>Le(G.oddInteger(t),"odd integer",t),directInstanceOf:(t,e)=>Le(G.directInstanceOf(t,e),"T",t),inRange:(t,e)=>Le(G.inRange(t,e),"in range",t),any:(t,...e)=>Le(G.any(t,...e),"predicate returns truthy for any value",e),all:(t,...e)=>Le(G.all(t,...e),"predicate returns truthy for all values",e)};Object.defineProperties(G,{class:{value:G.class_},function:{value:G.function_},null:{value:G.null_}});Object.defineProperties(zs.assert,{class:{value:zs.assert.class_},function:{value:zs.assert.function_},null:{value:zs.assert.null_}});zs.default=G;Hm.exports=G;Hm.exports.default=G;Hm.exports.assert=zs.assert});var J2=C((c9e,pb)=>{"use strict";var db=class extends Error{constructor(e){super(e||"Promise was canceled");this.name="CancelError"}get isCanceled(){return!0}},Qf=class{static fn(e){return(...r)=>new Qf((i,n,s)=>{r.push(s),e(...r).then(i,n)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((r,i)=>{this._reject=i;let n=a=>{this._isPending=!1,r(a)},s=a=>{this._isPending=!1,i(a)},o=a=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(a)};return Object.defineProperties(o,{shouldReject:{get:()=>this._rejectOnCancel,set:a=>{this._rejectOnCancel=a}}}),e(n,s,o)})}then(e,r){return this._promise.then(e,r)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let r of this._cancelHandlers)r()}catch(r){this._reject(r)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new db(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(Qf.prototype,Promise.prototype);pb.exports=Qf;pb.exports.CancelError=db});var W2=C((Cb,mb)=>{"use strict";Object.defineProperty(Cb,"__esModule",{value:!0});var gde=require("tls"),Ib=(t,e)=>{let r;typeof e=="function"?r={connect:e}:r=e;let i=typeof r.connect=="function",n=typeof r.secureConnect=="function",s=typeof r.close=="function",o=()=>{i&&r.connect(),t instanceof gde.TLSSocket&&n&&(t.authorized?r.secureConnect():t.authorizationError||t.once("secureConnect",r.secureConnect)),s&&t.once("close",r.close)};t.writable&&!t.connecting?o():t.connecting?t.once("connect",o):t.destroyed&&s&&r.close(t._hadError)};Cb.default=Ib;mb.exports=Ib;mb.exports.default=Ib});var z2=C((Eb,yb)=>{"use strict";Object.defineProperty(Eb,"__esModule",{value:!0});var fde=W2(),hde=Number(process.versions.node.split(".")[0]),Bb=t=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};t.timings=e;let r=o=>{let a=o.emit.bind(o);o.emit=(l,...c)=>(l==="error"&&(e.error=Date.now(),e.phases.total=e.error-e.start,o.emit=a),a(l,...c))};r(t),t.prependOnceListener("abort",()=>{e.abort=Date.now(),(!e.response||hde>=13)&&(e.phases.total=Date.now()-e.start)});let i=o=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let a=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};o.prependOnceListener("lookup",a),fde.default(o,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(o.removeListener("lookup",a),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};t.socket?i(t.socket):t.prependOnceListener("socket",i);let n=()=>{var o;e.upload=Date.now(),e.phases.request=e.upload-(o=e.secureConnect,o!=null?o:e.connect)};return(()=>typeof t.writableFinished=="boolean"?t.writableFinished:t.finished&&t.outputSize===0&&(!t.socket||t.socket.writableLength===0))()?n():t.prependOnceListener("finish",n),t.prependOnceListener("response",o=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,o.timings=e,r(o),o.prependOnceListener("end",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};Eb.default=Bb;yb.exports=Bb;yb.exports.default=Bb});var tY=C((u9e,wb)=>{"use strict";var{V4MAPPED:pde,ADDRCONFIG:dde,ALL:V2,promises:{Resolver:X2},lookup:Cde}=require("dns"),{promisify:Qb}=require("util"),mde=require("os"),nc=Symbol("cacheableLookupCreateConnection"),bb=Symbol("cacheableLookupInstance"),Z2=Symbol("expires"),Ide=typeof V2=="number",_2=t=>{if(!(t&&typeof t.createConnection=="function"))throw new Error("Expected an Agent instance as the first argument")},Ede=t=>{for(let e of t)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},$2=()=>{let t=!1,e=!1;for(let r of Object.values(mde.networkInterfaces()))for(let i of r)if(!i.internal&&(i.family==="IPv6"?e=!0:t=!0,t&&e))return{has4:t,has6:e};return{has4:t,has6:e}},yde=t=>Symbol.iterator in t,eY={ttl:!0},Bde={all:!0},Db=class{constructor({cache:e=new Map,maxTtl:r=Infinity,fallbackDuration:i=3600,errorTtl:n=.15,resolver:s=new X2,lookup:o=Cde}={}){if(this.maxTtl=r,this.errorTtl=n,this._cache=e,this._resolver=s,this._dnsLookup=Qb(o),this._resolver instanceof X2?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=Qb(this._resolver.resolve4.bind(this._resolver)),this._resolve6=Qb(this._resolver.resolve6.bind(this._resolver))),this._iface=$2(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,i<1)this._fallback=!1;else{this._fallback=!0;let a=setInterval(()=>{this._hostnamesToFallback.clear()},i*1e3);a.unref&&a.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,r,i){if(typeof r=="function"?(i=r,r={}):typeof r=="number"&&(r={family:r}),!i)throw new Error("Callback must be a function.");this.lookupAsync(e,r).then(n=>{r.all?i(null,n):i(null,n.address,n.family,n.expires,n.ttl)},i)}async lookupAsync(e,r={}){typeof r=="number"&&(r={family:r});let i=await this.query(e);if(r.family===6){let n=i.filter(s=>s.family===6);r.hints&pde&&(Ide&&r.hints&V2||n.length===0)?Ede(i):i=n}else r.family===4&&(i=i.filter(n=>n.family===4));if(r.hints&dde){let{_iface:n}=this;i=i.filter(s=>s.family===6?n.has6:n.has4)}if(i.length===0){let n=new Error(`cacheableLookup ENOTFOUND ${e}`);throw n.code="ENOTFOUND",n.hostname=e,n}return r.all?i:i[0]}async query(e){let r=await this._cache.get(e);if(!r){let i=this._pending[e];if(i)r=await i;else{let n=this.queryAndCache(e);this._pending[e]=n,r=await n}}return r=r.map(i=>P({},i)),r}async _resolve(e){let r=async c=>{try{return await c}catch(u){if(u.code==="ENODATA"||u.code==="ENOTFOUND")return[];throw u}},[i,n]=await Promise.all([this._resolve4(e,eY),this._resolve6(e,eY)].map(c=>r(c))),s=0,o=0,a=0,l=Date.now();for(let c of i)c.family=4,c.expires=l+c.ttl*1e3,s=Math.max(s,c.ttl);for(let c of n)c.family=6,c.expires=l+c.ttl*1e3,o=Math.max(o,c.ttl);return i.length>0?n.length>0?a=Math.min(s,o):a=s:a=o,{entries:[...i,...n],cacheTtl:a}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch(r){return{entries:[],cacheTtl:0}}}async _set(e,r,i){if(this.maxTtl>0&&i>0){i=Math.min(i,this.maxTtl)*1e3,r[Z2]=Date.now()+i;try{await this._cache.set(e,r,i)}catch(n){this.lookupAsync=async()=>{let s=new Error("Cache Error. Please recreate the CacheableLookup instance.");throw s.cause=n,s}}yde(this._cache)&&this._tick(i)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,Bde);try{let r=await this._resolve(e);r.entries.length===0&&this._fallback&&(r=await this._lookup(e),r.entries.length!==0&&this._hostnamesToFallback.add(e));let i=r.entries.length===0?this.errorTtl:r.cacheTtl;return await this._set(e,r.entries,i),delete this._pending[e],r.entries}catch(r){throw delete this._pending[e],r}}_tick(e){let r=this._nextRemovalTime;(!r||e{this._nextRemovalTime=!1;let i=Infinity,n=Date.now();for(let[s,o]of this._cache){let a=o[Z2];n>=a?this._cache.delete(s):a("lookup"in r||(r.lookup=this.lookup),e[nc](r,i))}uninstall(e){if(_2(e),e[nc]){if(e[bb]!==this)throw new Error("The agent is not owned by this CacheableLookup instance");e.createConnection=e[nc],delete e[nc],delete e[bb]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=$2(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};wb.exports=Db;wb.exports.default=Db});var nY=C((g9e,Sb)=>{"use strict";var wde=typeof URL=="undefined"?require("url").URL:URL,Qde="text/plain",bde="us-ascii",rY=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),Dde=(t,{stripHash:e})=>{let r=t.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!r)throw new Error(`Invalid URL: ${t}`);let i=r[1].split(";"),n=r[2],s=e?"":r[3],o=!1;i[i.length-1]==="base64"&&(i.pop(),o=!0);let a=(i.shift()||"").toLowerCase(),c=[...i.map(u=>{let[g,f=""]=u.split("=").map(h=>h.trim());return g==="charset"&&(f=f.toLowerCase(),f===bde)?"":`${g}${f?`=${f}`:""}`}).filter(Boolean)];return o&&c.push("base64"),(c.length!==0||a&&a!==Qde)&&c.unshift(a),`data:${c.join(";")},${o?n.trim():n}${s?`#${s}`:""}`},iY=(t,e)=>{if(e=P({defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0},e),Reflect.has(e,"normalizeHttps"))throw new Error("options.normalizeHttps is renamed to options.forceHttp");if(Reflect.has(e,"normalizeHttp"))throw new Error("options.normalizeHttp is renamed to options.forceHttps");if(Reflect.has(e,"stripFragment"))throw new Error("options.stripFragment is renamed to options.stripHash");if(t=t.trim(),/^data:/i.test(t))return Dde(t,e);let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let n=new wde(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&n.protocol==="https:"&&(n.protocol="http:"),e.forceHttps&&n.protocol==="http:"&&(n.protocol="https:"),e.stripAuthentication&&(n.username="",n.password=""),e.stripHash&&(n.hash=""),n.pathname&&(n.pathname=n.pathname.replace(/((?!:).|^)\/{2,}/g,(s,o)=>/^(?!\/)/g.test(o)?`${o}/`:"/")),n.pathname&&(n.pathname=decodeURI(n.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let s=n.pathname.split("/"),o=s[s.length-1];rY(o,e.removeDirectoryIndex)&&(s=s.slice(0,s.length-1),n.pathname=s.slice(1).join("/")+"/")}if(n.hostname&&(n.hostname=n.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let s of[...n.searchParams.keys()])rY(s,e.removeQueryParameters)&&n.searchParams.delete(s);return e.sortQueryParameters&&n.searchParams.sort(),e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\/$/,"")),t=n.toString(),(e.removeTrailingSlash||n.pathname==="/")&&n.hash===""&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t};Sb.exports=iY;Sb.exports.default=iY});var aY=C((f9e,sY)=>{sY.exports=oY;function oY(t,e){if(t&&e)return oY(t)(e);if(typeof t!="function")throw new TypeError("need wrapper function");return Object.keys(t).forEach(function(i){r[i]=t[i]}),r;function r(){for(var i=new Array(arguments.length),n=0;n{var AY=aY();xb.exports=AY(jm);xb.exports.strict=AY(lY);jm.proto=jm(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return jm(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return lY(this)},configurable:!0})});function jm(t){var e=function(){return e.called?e.value:(e.called=!0,e.value=t.apply(this,arguments))};return e.called=!1,e}function lY(t){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=t.apply(this,arguments)},r=t.name||"Function wrapped with `once`";return e.onceError=r+" shouldn't be called more than once",e.called=!1,e}});var Pb=C((p9e,cY)=>{var Sde=kb(),xde=function(){},kde=function(t){return t.setHeader&&typeof t.abort=="function"},Pde=function(t){return t.stdio&&Array.isArray(t.stdio)&&t.stdio.length===3},uY=function(t,e,r){if(typeof e=="function")return uY(t,null,e);e||(e={}),r=Sde(r||xde);var i=t._writableState,n=t._readableState,s=e.readable||e.readable!==!1&&t.readable,o=e.writable||e.writable!==!1&&t.writable,a=function(){t.writable||l()},l=function(){o=!1,s||r.call(t)},c=function(){s=!1,o||r.call(t)},u=function(p){r.call(t,p?new Error("exited with error code: "+p):null)},g=function(p){r.call(t,p)},f=function(){if(s&&!(n&&n.ended))return r.call(t,new Error("premature close"));if(o&&!(i&&i.ended))return r.call(t,new Error("premature close"))},h=function(){t.req.on("finish",l)};return kde(t)?(t.on("complete",l),t.on("abort",f),t.req?h():t.on("request",h)):o&&!i&&(t.on("end",a),t.on("close",a)),Pde(t)&&t.on("exit",u),t.on("end",c),t.on("finish",l),e.error!==!1&&t.on("error",g),t.on("close",f),function(){t.removeListener("complete",l),t.removeListener("abort",f),t.removeListener("request",h),t.req&&t.req.removeListener("finish",l),t.removeListener("end",a),t.removeListener("close",a),t.removeListener("finish",l),t.removeListener("exit",u),t.removeListener("end",c),t.removeListener("error",g),t.removeListener("close",f)}};cY.exports=uY});var hY=C((d9e,gY)=>{var vde=kb(),Fde=Pb(),vb=require("fs"),bf=function(){},Rde=/^v?\.0/.test(process.version),Gm=function(t){return typeof t=="function"},Lde=function(t){return!Rde||!vb?!1:(t instanceof(vb.ReadStream||bf)||t instanceof(vb.WriteStream||bf))&&Gm(t.close)},Nde=function(t){return t.setHeader&&Gm(t.abort)},Mde=function(t,e,r,i){i=vde(i);var n=!1;t.on("close",function(){n=!0}),Fde(t,{readable:e,writable:r},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,Lde(t))return t.close(bf);if(Nde(t))return t.abort();if(Gm(t.destroy))return t.destroy();i(o||new Error("stream was destroyed"))}}},fY=function(t){t()},Ode=function(t,e){return t.pipe(e)},Tde=function(){var t=Array.prototype.slice.call(arguments),e=Gm(t[t.length-1]||bf)&&t.pop()||bf;if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new Error("pump requires two streams per minimum");var r,i=t.map(function(n,s){var o=s0;return Mde(n,o,a,function(l){r||(r=l),l&&i.forEach(fY),!o&&(i.forEach(fY),e(r))})});return t.reduce(Ode)};gY.exports=Tde});var dY=C((C9e,pY)=>{"use strict";var{PassThrough:Kde}=require("stream");pY.exports=t=>{t=P({},t);let{array:e}=t,{encoding:r}=t,i=r==="buffer",n=!1;e?n=!(r||i):r=r||"utf8",i&&(r=null);let s=new Kde({objectMode:n});r&&s.setEncoding(r);let o=0,a=[];return s.on("data",l=>{a.push(l),n?o=a.length:o+=l.length}),s.getBufferedValue=()=>e?a:i?Buffer.concat(a,o):a.join(""),s.getBufferedLength=()=>o,s}});var CY=C((m9e,sc)=>{"use strict";var Ude=hY(),Yde=dY(),Fb=class extends Error{constructor(){super("maxBuffer exceeded");this.name="MaxBufferError"}};async function qm(t,e){if(!t)return Promise.reject(new Error("Expected a stream"));e=P({maxBuffer:Infinity},e);let{maxBuffer:r}=e,i;return await new Promise((n,s)=>{let o=a=>{a&&(a.bufferedData=i.getBufferedValue()),s(a)};i=Ude(t,Yde(e),a=>{if(a){o(a);return}n()}),i.on("data",()=>{i.getBufferedLength()>r&&o(new Fb)})}),i.getBufferedValue()}sc.exports=qm;sc.exports.default=qm;sc.exports.buffer=(t,e)=>qm(t,V(P({},e),{encoding:"buffer"}));sc.exports.array=(t,e)=>qm(t,V(P({},e),{array:!0}));sc.exports.MaxBufferError=Fb});var IY=C((E9e,mY)=>{"use strict";var Hde=[200,203,204,206,300,301,404,405,410,414,501],jde=[200,203,204,300,301,302,303,307,308,404,405,410,414,501],Gde={date:!0,connection:!0,"keep-alive":!0,"proxy-authenticate":!0,"proxy-authorization":!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0},qde={"content-length":!0,"content-encoding":!0,"transfer-encoding":!0,"content-range":!0};function Rb(t){let e={};if(!t)return e;let r=t.trim().split(/\s*,\s*/);for(let i of r){let[n,s]=i.split(/\s*=\s*/,2);e[n]=s===void 0?!0:s.replace(/^"|"$/g,"")}return e}function Jde(t){let e=[];for(let r in t){let i=t[r];e.push(i===!0?r:r+"="+i)}if(!!e.length)return e.join(", ")}mY.exports=class{constructor(e,r,{shared:i,cacheHeuristic:n,immutableMinTimeToLive:s,ignoreCargoCult:o,trustServerDate:a,_fromObject:l}={}){if(l){this._fromObject(l);return}if(!r||!r.headers)throw Error("Response headers missing");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=i!==!1,this._trustServerDate=a!==void 0?a:!0,this._cacheHeuristic=n!==void 0?n:.1,this._immutableMinTtl=s!==void 0?s:24*3600*1e3,this._status="status"in r?r.status:200,this._resHeaders=r.headers,this._rescc=Rb(r.headers["cache-control"]),this._method="method"in e?e.method:"GET",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=r.headers.vary?e.headers:null,this._reqcc=Rb(e.headers["cache-control"]),o&&"pre-check"in this._rescc&&"post-check"in this._rescc&&(delete this._rescc["pre-check"],delete this._rescc["post-check"],delete this._rescc["no-cache"],delete this._rescc["no-store"],delete this._rescc["must-revalidate"],this._resHeaders=Object.assign({},this._resHeaders,{"cache-control":Jde(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),!r.headers["cache-control"]&&/no-cache/.test(r.headers.pragma)&&(this._rescc["no-cache"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc["no-store"]&&(this._method==="GET"||this._method==="HEAD"||this._method==="POST"&&this._hasExplicitExpiration())&&jde.indexOf(this._status)!==-1&&!this._rescc["no-store"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc.public||this._rescc["max-age"]||this._rescc["s-maxage"]||Hde.indexOf(this._status)!==-1))}_hasExplicitExpiration(){return this._isShared&&this._rescc["s-maxage"]||this._rescc["max-age"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error("Request headers missing")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let r=Rb(e.headers["cache-control"]);return r["no-cache"]||/no-cache/.test(e.headers.pragma)||r["max-age"]&&this.age()>r["max-age"]||r["min-fresh"]&&this.timeToLive()<1e3*r["min-fresh"]||this.stale()&&!(r["max-stale"]&&!this._rescc["must-revalidate"]&&(r["max-stale"]===!0||r["max-stale"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,r){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||r&&e.method==="HEAD")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc["must-revalidate"]||this._rescc.public||this._rescc["s-maxage"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary==="*")return!1;let r=this._resHeaders.vary.trim().toLowerCase().split(/\s*,\s*/);for(let i of r)if(e.headers[i]!==this._reqHeaders[i])return!1;return!0}_copyWithoutHopByHopHeaders(e){let r={};for(let i in e)Gde[i]||(r[i]=e[i]);if(e.connection){let i=e.connection.trim().split(/\s*,\s*/);for(let n of i)delete r[n]}if(r.warning){let i=r.warning.split(/,/).filter(n=>!/^\s*1[0-9][0-9]/.test(n));i.length?r.warning=i.join(",").trim():delete r.warning}return r}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),r=this.age();return r>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:"")+'113 - "rfc7234 5.5.4"'),e.age=`${Math.round(r)}`,e.date=new Date(this.now()).toUTCString(),e}date(){return this._trustServerDate?this._serverDate():this._responseTime}_serverDate(){let e=Date.parse(this._resHeaders.date);if(isFinite(e)){let r=8*3600*1e3;if(Math.abs(this._responseTime-e)e&&(e=i)}let r=(this.now()-this._responseTime)/1e3;return e+r}_ageValue(){let e=parseInt(this._resHeaders.age);return isFinite(e)?e:0}maxAge(){if(!this.storable()||this._rescc["no-cache"]||this._isShared&&this._resHeaders["set-cookie"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary==="*")return 0;if(this._isShared){if(this._rescc["proxy-revalidate"])return 0;if(this._rescc["s-maxage"])return parseInt(this._rescc["s-maxage"],10)}if(this._rescc["max-age"])return parseInt(this._rescc["max-age"],10);let e=this._rescc.immutable?this._immutableMinTtl:0,r=this._serverDate();if(this._resHeaders.expires){let i=Date.parse(this._resHeaders.expires);return Number.isNaN(i)||ii)return Math.max(e,(r-i)/1e3*this._cacheHeuristic)}return e}timeToLive(){return Math.max(0,this.maxAge()-this.age())*1e3}stale(){return this.maxAge()<=this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error("Reinitialized");if(!e||e.v!==1)throw Error("Invalid serialization");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let r=this._copyWithoutHopByHopHeaders(e.headers);if(delete r["if-range"],!this._requestMatches(e,!0)||!this.storable())return delete r["if-none-match"],delete r["if-modified-since"],r;if(this._resHeaders.etag&&(r["if-none-match"]=r["if-none-match"]?`${r["if-none-match"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),r["accept-ranges"]||r["if-match"]||r["if-unmodified-since"]||this._method&&this._method!="GET"){if(delete r["if-modified-since"],r["if-none-match"]){let n=r["if-none-match"].split(/,/).filter(s=>!/^\s*W\//.test(s));n.length?r["if-none-match"]=n.join(",").trim():delete r["if-none-match"]}}else this._resHeaders["last-modified"]&&!r["if-modified-since"]&&(r["if-modified-since"]=this._resHeaders["last-modified"]);return r}revalidatedPolicy(e,r){if(this._assertRequestHasHeaders(e),!r||!r.headers)throw Error("Response headers missing");let i=!1;if(r.status!==void 0&&r.status!=304?i=!1:r.headers.etag&&!/^\s*W\//.test(r.headers.etag)?i=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag:this._resHeaders.etag&&r.headers.etag?i=this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag.replace(/^\s*W\//,""):this._resHeaders["last-modified"]?i=this._resHeaders["last-modified"]===r.headers["last-modified"]:!this._resHeaders.etag&&!this._resHeaders["last-modified"]&&!r.headers.etag&&!r.headers["last-modified"]&&(i=!0),!i)return{policy:new this.constructor(e,r),modified:r.status!=304,matches:!1};let n={};for(let o in this._resHeaders)n[o]=o in r.headers&&!qde[o]?r.headers[o]:this._resHeaders[o];let s=Object.assign({},r,{status:this._status,method:this._method,headers:n});return{policy:new this.constructor(e,s,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl,trustServerDate:this._trustServerDate}),modified:!1,matches:!0}}}});var Jm=C((y9e,EY)=>{"use strict";EY.exports=t=>{let e={};for(let[r,i]of Object.entries(t))e[r.toLowerCase()]=i;return e}});var wY=C((B9e,yY)=>{"use strict";var Wde=require("stream").Readable,zde=Jm(),BY=class extends Wde{constructor(e,r,i,n){if(typeof e!="number")throw new TypeError("Argument `statusCode` should be a number");if(typeof r!="object")throw new TypeError("Argument `headers` should be an object");if(!(i instanceof Buffer))throw new TypeError("Argument `body` should be a buffer");if(typeof n!="string")throw new TypeError("Argument `url` should be a string");super();this.statusCode=e,this.headers=zde(r),this.body=i,this.url=n}_read(){this.push(this.body),this.push(null)}};yY.exports=BY});var bY=C((w9e,QY)=>{"use strict";var Vde=["destroy","setTimeout","socket","headers","trailers","rawHeaders","statusCode","httpVersion","httpVersionMinor","httpVersionMajor","rawTrailers","statusMessage"];QY.exports=(t,e)=>{let r=new Set(Object.keys(t).concat(Vde));for(let i of r)i in e||(e[i]=typeof t[i]=="function"?t[i].bind(t):t[i])}});var SY=C((Q9e,DY)=>{"use strict";var Xde=require("stream").PassThrough,Zde=bY(),_de=t=>{if(!(t&&t.pipe))throw new TypeError("Parameter `response` must be a response stream.");let e=new Xde;return Zde(t,e),t.pipe(e)};DY.exports=_de});var xY=C(Lb=>{Lb.stringify=function t(e){if(typeof e=="undefined")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(":base64:"+e.toString("base64"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e=="object"){var r="",i=Array.isArray(e);r=i?"[":"{";var n=!0;for(var s in e){var o=typeof e[s]=="function"||!i&&typeof e[s]=="undefined";Object.hasOwnProperty.call(e,s)&&!o&&(n||(r+=","),n=!1,i?e[s]==null?r+="null":r+=t(e[s]):e[s]!==void 0&&(r+=t(s)+":"+t(e[s])))}return r+=i?"]":"}",r}else return typeof e=="string"?JSON.stringify(/^:/.test(e)?":"+e:e):typeof e=="undefined"?"null":JSON.stringify(e)};Lb.parse=function(t){return JSON.parse(t,function(e,r){return typeof r=="string"?/^:base64:/.test(r)?Buffer.from(r.substring(8),"base64"):/^:/.test(r)?r.substring(1):r:r})}});var FY=C((D9e,kY)=>{"use strict";var $de=require("events"),PY=xY(),eCe=t=>{let e={redis:"@keyv/redis",mongodb:"@keyv/mongo",mongo:"@keyv/mongo",sqlite:"@keyv/sqlite",postgresql:"@keyv/postgres",postgres:"@keyv/postgres",mysql:"@keyv/mysql"};if(t.adapter||t.uri){let r=t.adapter||/^[^:]*/.exec(t.uri)[0];return new(require(e[r]))(t)}return new Map},vY=class extends $de{constructor(e,r){super();if(this.opts=Object.assign({namespace:"keyv",serialize:PY.stringify,deserialize:PY.parse},typeof e=="string"?{uri:e}:e,r),!this.opts.store){let i=Object.assign({},this.opts);this.opts.store=eCe(i)}typeof this.opts.store.on=="function"&&this.opts.store.on("error",i=>this.emit("error",i)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,r){e=this._getKeyPrefix(e);let{store:i}=this.opts;return Promise.resolve().then(()=>i.get(e)).then(n=>typeof n=="string"?this.opts.deserialize(n):n).then(n=>{if(n!==void 0){if(typeof n.expires=="number"&&Date.now()>n.expires){this.delete(e);return}return r&&r.raw?n:n.value}})}set(e,r,i){e=this._getKeyPrefix(e),typeof i=="undefined"&&(i=this.opts.ttl),i===0&&(i=void 0);let{store:n}=this.opts;return Promise.resolve().then(()=>{let s=typeof i=="number"?Date.now()+i:null;return r={value:r,expires:s},this.opts.serialize(r)}).then(s=>n.set(e,s,i)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:r}=this.opts;return Promise.resolve().then(()=>r.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};kY.exports=vY});var NY=C((S9e,RY)=>{"use strict";var tCe=require("events"),Wm=require("url"),rCe=nY(),iCe=CY(),Nb=IY(),LY=wY(),nCe=Jm(),sCe=SY(),oCe=FY(),os=class{constructor(e,r){if(typeof e!="function")throw new TypeError("Parameter `request` must be a function");return this.cache=new oCe({uri:typeof r=="string"&&r,store:typeof r!="string"&&r,namespace:"cacheable-request"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(r,i)=>{let n;if(typeof r=="string")n=Mb(Wm.parse(r)),r={};else if(r instanceof Wm.URL)n=Mb(Wm.parse(r.toString())),r={};else{let[g,...f]=(r.path||"").split("?"),h=f.length>0?`?${f.join("?")}`:"";n=Mb(V(P({},r),{pathname:g,search:h}))}r=P(P({headers:{},method:"GET",cache:!0,strictTtl:!1,automaticFailover:!1},r),aCe(n)),r.headers=nCe(r.headers);let s=new tCe,o=rCe(Wm.format(n),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),a=`${r.method}:${o}`,l=!1,c=!1,u=g=>{c=!0;let f=!1,h,p=new Promise(I=>{h=()=>{f||(f=!0,I())}}),m=I=>{if(l&&!g.forceRefresh){I.status=I.statusCode;let B=Nb.fromObject(l.cachePolicy).revalidatedPolicy(g,I);if(!B.modified){let x=B.policy.responseHeaders();I=new LY(l.statusCode,x,l.body,l.url),I.cachePolicy=B.policy,I.fromCache=!0}}I.fromCache||(I.cachePolicy=new Nb(g,I,g),I.fromCache=!1);let y;g.cache&&I.cachePolicy.storable()?(y=sCe(I),(async()=>{try{let B=iCe.buffer(I);if(await Promise.race([p,new Promise(T=>I.once("end",T))]),f)return;let x=await B,F={cachePolicy:I.cachePolicy.toObject(),url:I.url,statusCode:I.fromCache?l.statusCode:I.statusCode,body:x},L=g.strictTtl?I.cachePolicy.timeToLive():void 0;g.maxTtl&&(L=L?Math.min(L,g.maxTtl):g.maxTtl),await this.cache.set(a,F,L)}catch(B){s.emit("error",new os.CacheError(B))}})()):g.cache&&l&&(async()=>{try{await this.cache.delete(a)}catch(B){s.emit("error",new os.CacheError(B))}})(),s.emit("response",y||I),typeof i=="function"&&i(y||I)};try{let I=e(g,m);I.once("error",h),I.once("abort",h),s.emit("request",I)}catch(I){s.emit("error",new os.RequestError(I))}};return(async()=>{let g=async h=>{await Promise.resolve();let p=h.cache?await this.cache.get(a):void 0;if(typeof p=="undefined")return u(h);let m=Nb.fromObject(p.cachePolicy);if(m.satisfiesWithoutRevalidation(h)&&!h.forceRefresh){let I=m.responseHeaders(),y=new LY(p.statusCode,I,p.body,p.url);y.cachePolicy=m,y.fromCache=!0,s.emit("response",y),typeof i=="function"&&i(y)}else l=p,h.headers=m.revalidationHeaders(h),u(h)},f=h=>s.emit("error",new os.CacheError(h));this.cache.once("error",f),s.on("response",()=>this.cache.removeListener("error",f));try{await g(r)}catch(h){r.automaticFailover&&!c&&u(r),s.emit("error",new os.CacheError(h))}})(),s}}};function aCe(t){let e=P({},t);return e.path=`${t.pathname||"/"}${t.search||""}`,delete e.pathname,delete e.search,e}function Mb(t){return{protocol:t.protocol,auth:t.auth,hostname:t.hostname||t.host||"localhost",port:t.port,pathname:t.pathname,search:t.search}}os.RequestError=class extends Error{constructor(t){super(t.message);this.name="RequestError",Object.assign(this,t)}};os.CacheError=class extends Error{constructor(t){super(t.message);this.name="CacheError",Object.assign(this,t)}};RY.exports=os});var OY=C((x9e,MY)=>{"use strict";var ACe=["aborted","complete","headers","httpVersion","httpVersionMinor","httpVersionMajor","method","rawHeaders","rawTrailers","setTimeout","socket","statusCode","statusMessage","trailers","url"];MY.exports=(t,e)=>{if(e._readableState.autoDestroy)throw new Error("The second stream must have the `autoDestroy` option set to `false`");let r=new Set(Object.keys(t).concat(ACe)),i={};for(let n of r)n in e||(i[n]={get(){let s=t[n];return typeof s=="function"?s.bind(t):s},set(s){t[n]=s},enumerable:!0,configurable:!1});return Object.defineProperties(e,i),t.once("aborted",()=>{e.destroy(),e.emit("aborted")}),t.once("close",()=>{t.complete&&e.readable?e.once("end",()=>{e.emit("close")}):e.emit("close")}),e}});var KY=C((k9e,TY)=>{"use strict";var{Transform:lCe,PassThrough:cCe}=require("stream"),Ob=require("zlib"),uCe=OY();TY.exports=t=>{let e=(t.headers["content-encoding"]||"").toLowerCase();if(!["gzip","deflate","br"].includes(e))return t;let r=e==="br";if(r&&typeof Ob.createBrotliDecompress!="function")return t.destroy(new Error("Brotli is not supported on Node.js < 12")),t;let i=!0,n=new lCe({transform(a,l,c){i=!1,c(null,a)},flush(a){a()}}),s=new cCe({autoDestroy:!1,destroy(a,l){t.destroy(),l(a)}}),o=r?Ob.createBrotliDecompress():Ob.createUnzip();return o.once("error",a=>{if(i&&!t.readable){s.end();return}s.destroy(a)}),uCe(t,s),t.pipe(n).pipe(o).pipe(s),s}});var Tb=C((P9e,UY)=>{"use strict";var YY=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,r){if(this.cache.set(e,r),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction=="function")for(let[i,n]of this.oldCache.entries())this.onEviction(i,n);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let r=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,r),r}}set(e,r){return this.cache.has(e)?this.cache.set(e,r):this._set(e,r),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let r=this.cache.delete(e);return r&&this._size--,this.oldCache.delete(e)||r}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[r]=e;this.cache.has(r)||(yield e)}}get size(){let e=0;for(let r of this.oldCache.keys())this.cache.has(r)||e++;return Math.min(this._size+e,this.maxSize)}};UY.exports=YY});var Ub=C((v9e,HY)=>{"use strict";var gCe=require("events"),fCe=require("tls"),hCe=require("http2"),pCe=Tb(),li=Symbol("currentStreamsCount"),jY=Symbol("request"),fn=Symbol("cachedOriginSet"),oc=Symbol("gracefullyClosing"),dCe=["maxDeflateDynamicTableSize","maxSessionMemory","maxHeaderListPairs","maxOutstandingPings","maxReservedRemoteStreams","maxSendHeaderBlockLength","paddingStrategy","localAddress","path","rejectUnauthorized","minDHSize","ca","cert","clientCertEngine","ciphers","key","pfx","servername","minVersion","maxVersion","secureProtocol","crl","honorCipherOrder","ecdhCurve","dhparam","secureOptions","sessionIdContext"],CCe=(t,e,r)=>{let i=0,n=t.length;for(;i>>1;r(t[s],e)?i=s+1:n=s}return i},mCe=(t,e)=>t.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,Kb=(t,e)=>{for(let r of t)r[fn].lengthe[fn].includes(i))&&r[li]+e[li]<=e.remoteSettings.maxConcurrentStreams&&GY(r)},ICe=(t,e)=>{for(let r of t)e[fn].lengthr[fn].includes(i))&&e[li]+r[li]<=r.remoteSettings.maxConcurrentStreams&&GY(e)},qY=({agent:t,isFree:e})=>{let r={};for(let i in t.sessions){let s=t.sessions[i].filter(o=>{let a=o[Xs.kCurrentStreamsCount]{t[oc]=!0,t[li]===0&&t.close()},Xs=class extends gCe{constructor({timeout:e=6e4,maxSessions:r=Infinity,maxFreeSessions:i=10,maxCachedTlsSessions:n=100}={}){super();this.sessions={},this.queue={},this.timeout=e,this.maxSessions=r,this.maxFreeSessions=i,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new pCe({maxSize:n})}static normalizeOrigin(e,r){return typeof e=="string"&&(e=new URL(e)),r&&e.hostname!==r&&(e.hostname=r),e.origin}normalizeOptions(e){let r="";if(e)for(let i of dCe)e[i]&&(r+=`:${e[i]}`);return r}_tryToCreateNewSession(e,r){if(!(e in this.queue)||!(r in this.queue[e]))return;let i=this.queue[e][r];this._sessionsCount{Array.isArray(i)?(i=[...i],n()):i=[{resolve:n,reject:s}];let o=this.normalizeOptions(r),a=Xs.normalizeOrigin(e,r&&r.servername);if(a===void 0){for(let{reject:u}of i)u(new TypeError("The `origin` argument needs to be a string or an URL object"));return}if(o in this.sessions){let u=this.sessions[o],g=-1,f=-1,h;for(let p of u){let m=p.remoteSettings.maxConcurrentStreams;if(m=m||p[oc]||p.destroyed)continue;h||(g=m),I>f&&(h=p,f=I)}}if(h){if(i.length!==1){for(let{reject:p}of i){let m=new Error(`Expected the length of listeners to be 1, got ${i.length}. -Please report this to https://github.com/szmarczak/http2-wrapper/`);p(m)}return}i[0].resolve(h);return}}if(o in this.queue){if(a in this.queue[o]){this.queue[o][a].listeners.push(...i),this._tryToCreateNewSession(o,a);return}}else this.queue[o]={};let l=()=>{o in this.queue&&this.queue[o][a]===c&&(delete this.queue[o][a],Object.keys(this.queue[o]).length===0&&delete this.queue[o])},c=()=>{let u=`${a}:${o}`,g=!1;try{let f=hCe.connect(e,P({createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(u)},r));f[li]=0,f[oc]=!1;let h=()=>f[li]{this.tlsSessionCache.set(u,I)}),f.once("error",I=>{for(let{reject:y}of i)y(I);this.tlsSessionCache.delete(u)}),f.setTimeout(this.timeout,()=>{f.destroy()}),f.once("close",()=>{if(g){p&&this._freeSessionsCount--,this._sessionsCount--;let I=this.sessions[o];I.splice(I.indexOf(f),1),I.length===0&&delete this.sessions[o]}else{let I=new Error("Session closed without receiving a SETTINGS frame");I.code="HTTP2WRAPPER_NOSETTINGS";for(let{reject:y}of i)y(I);l()}this._tryToCreateNewSession(o,a)});let m=()=>{if(!(!(o in this.queue)||!h())){for(let I of f[fn])if(I in this.queue[o]){let{listeners:y}=this.queue[o][I];for(;y.length!==0&&h();)y.shift().resolve(f);let B=this.queue[o];if(B[I].listeners.length===0&&(delete B[I],Object.keys(B).length===0)){delete this.queue[o];break}if(!h())break}}};f.on("origin",()=>{f[fn]=f.originSet,!!h()&&(m(),Kb(this.sessions[o],f))}),f.once("remoteSettings",()=>{if(f.ref(),f.unref(),this._sessionsCount++,c.destroyed){let I=new Error("Agent has been destroyed");for(let y of i)y.reject(I);f.destroy();return}f[fn]=f.originSet;{let I=this.sessions;if(o in I){let y=I[o];y.splice(CCe(y,f,mCe),0,f)}else I[o]=[f]}this._freeSessionsCount+=1,g=!0,this.emit("session",f),m(),l(),f[li]===0&&this._freeSessionsCount>this.maxFreeSessions&&f.close(),i.length!==0&&(this.getSession(a,r,i),i.length=0),f.on("remoteSettings",()=>{m(),Kb(this.sessions[o],f)})}),f[jY]=f.request,f.request=(I,y)=>{if(f[oc])throw new Error("The session is gracefully closing. No new streams are allowed.");let B=f[jY](I,y);return f.ref(),++f[li],f[li]===f.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,B.once("close",()=>{if(p=h(),--f[li],!f.destroyed&&!f.closed&&(ICe(this.sessions[o],f),h()&&!f.closed)){p||(this._freeSessionsCount++,p=!0);let x=f[li]===0;x&&f.unref(),x&&(this._freeSessionsCount>this.maxFreeSessions||f[oc])?f.close():(Kb(this.sessions[o],f),m())}}),B}}catch(f){for(let h of i)h.reject(f);l()}};c.listeners=i,c.completed=!1,c.destroyed=!1,this.queue[o][a]=c,this._tryToCreateNewSession(o,a)})}request(e,r,i,n){return new Promise((s,o)=>{this.getSession(e,r,[{reject:o,resolve:a=>{try{s(a.request(i,n))}catch(l){o(l)}}}])})}createConnection(e,r){return Xs.connect(e,r)}static connect(e,r){r.ALPNProtocols=["h2"];let i=e.port||443,n=e.hostname||e.host;return typeof r.servername=="undefined"&&(r.servername=n),fCe.connect(i,n,r)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let r of e)r[li]===0&&r.close()}destroy(e){for(let r of Object.values(this.sessions))for(let i of r)i.destroy(e);for(let r of Object.values(this.queue))for(let i of Object.values(r))i.destroyed=!0;this.queue={}}get freeSessions(){return qY({agent:this,isFree:!0})}get busySessions(){return qY({agent:this,isFree:!1})}};Xs.kCurrentStreamsCount=li;Xs.kGracefullyClosing=oc;HY.exports={Agent:Xs,globalAgent:new Xs}});var Yb=C((F9e,JY)=>{"use strict";var{Readable:ECe}=require("stream"),WY=class extends ECe{constructor(e,r){super({highWaterMark:r,autoDestroy:!1});this.statusCode=null,this.statusMessage="",this.httpVersion="2.0",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,r){return this.req.setTimeout(e,r),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners("data"),this.resume())}_read(){this.req&&this.req._request.resume()}};JY.exports=WY});var Hb=C((R9e,zY)=>{"use strict";zY.exports=t=>{let e={protocol:t.protocol,hostname:typeof t.hostname=="string"&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return typeof t.port=="string"&&t.port.length!==0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var XY=C((L9e,VY)=>{"use strict";VY.exports=(t,e,r)=>{for(let i of r)t.on(i,(...n)=>e.emit(i,...n))}});var _Y=C((N9e,ZY)=>{"use strict";ZY.exports=t=>{switch(t){case":method":case":scheme":case":authority":case":path":return!0;default:return!1}}});var eH=C((O9e,$Y)=>{"use strict";var ac=(t,e,r)=>{$Y.exports[e]=class extends t{constructor(...n){super(typeof r=="string"?r:r(n));this.name=`${super.name} [${e}]`,this.code=e}}};ac(TypeError,"ERR_INVALID_ARG_TYPE",t=>{let e=t[0].includes(".")?"property":"argument",r=t[1],i=Array.isArray(r);return i&&(r=`${r.slice(0,-1).join(", ")} or ${r.slice(-1)}`),`The "${t[0]}" ${e} must be ${i?"one of":"of"} type ${r}. Received ${typeof t[2]}`});ac(TypeError,"ERR_INVALID_PROTOCOL",t=>`Protocol "${t[0]}" not supported. Expected "${t[1]}"`);ac(Error,"ERR_HTTP_HEADERS_SENT",t=>`Cannot ${t[0]} headers after they are sent to the client`);ac(TypeError,"ERR_INVALID_HTTP_TOKEN",t=>`${t[0]} must be a valid HTTP token [${t[1]}]`);ac(TypeError,"ERR_HTTP_INVALID_HEADER_VALUE",t=>`Invalid value "${t[0]} for header "${t[1]}"`);ac(TypeError,"ERR_INVALID_CHAR",t=>`Invalid character in ${t[0]} [${t[1]}]`)});var Jb=C((T9e,tH)=>{"use strict";var yCe=require("http2"),{Writable:BCe}=require("stream"),{Agent:rH,globalAgent:wCe}=Ub(),QCe=Yb(),bCe=Hb(),DCe=XY(),SCe=_Y(),{ERR_INVALID_ARG_TYPE:jb,ERR_INVALID_PROTOCOL:xCe,ERR_HTTP_HEADERS_SENT:iH,ERR_INVALID_HTTP_TOKEN:kCe,ERR_HTTP_INVALID_HEADER_VALUE:PCe,ERR_INVALID_CHAR:vCe}=eH(),{HTTP2_HEADER_STATUS:nH,HTTP2_HEADER_METHOD:sH,HTTP2_HEADER_PATH:oH,HTTP2_METHOD_CONNECT:FCe}=yCe.constants,Jr=Symbol("headers"),Gb=Symbol("origin"),qb=Symbol("session"),aH=Symbol("options"),zm=Symbol("flushedHeaders"),Df=Symbol("jobs"),RCe=/^[\^`\-\w!#$%&*+.|~]+$/,LCe=/[^\t\u0020-\u007E\u0080-\u00FF]/,AH=class extends BCe{constructor(e,r,i){super({autoDestroy:!1});let n=typeof e=="string"||e instanceof URL;if(n&&(e=bCe(e instanceof URL?e:new URL(e))),typeof r=="function"||r===void 0?(i=r,r=n?e:P({},e)):r=P(P({},e),r),r.h2session)this[qb]=r.h2session;else if(r.agent===!1)this.agent=new rH({maxFreeSessions:0});else if(typeof r.agent=="undefined"||r.agent===null)typeof r.createConnection=="function"?(this.agent=new rH({maxFreeSessions:0}),this.agent.createConnection=r.createConnection):this.agent=wCe;else if(typeof r.agent.request=="function")this.agent=r.agent;else throw new jb("options.agent",["Agent-like Object","undefined","false"],r.agent);if(r.protocol&&r.protocol!=="https:")throw new xCe(r.protocol,"https:");let s=r.port||r.defaultPort||this.agent&&this.agent.defaultPort||443,o=r.hostname||r.host||"localhost";delete r.hostname,delete r.host,delete r.port;let{timeout:a}=r;if(r.timeout=void 0,this[Jr]=Object.create(null),this[Df]=[],this.socket=null,this.connection=null,this.method=r.method||"GET",this.path=r.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,r.headers)for(let[l,c]of Object.entries(r.headers))this.setHeader(l,c);r.auth&&!("authorization"in this[Jr])&&(this[Jr].authorization="Basic "+Buffer.from(r.auth).toString("base64")),r.session=r.tlsSession,r.path=r.socketPath,this[aH]=r,s===443?(this[Gb]=`https://${o}`,":authority"in this[Jr]||(this[Jr][":authority"]=o)):(this[Gb]=`https://${o}:${s}`,":authority"in this[Jr]||(this[Jr][":authority"]=`${o}:${s}`)),a&&this.setTimeout(a),i&&this.once("response",i),this[zm]=!1}get method(){return this[Jr][sH]}set method(e){e&&(this[Jr][sH]=e.toUpperCase())}get path(){return this[Jr][oH]}set path(e){e&&(this[Jr][oH]=e)}get _mustNotHaveABody(){return this.method==="GET"||this.method==="HEAD"||this.method==="DELETE"}_write(e,r,i){if(this._mustNotHaveABody){i(new Error("The GET, HEAD and DELETE methods must NOT have a body"));return}this.flushHeaders();let n=()=>this._request.write(e,r,i);this._request?n():this[Df].push(n)}_final(e){if(this.destroyed)return;this.flushHeaders();let r=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?r():this[Df].push(r)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit("abort")),this.aborted=!0,this.destroy())}_destroy(e,r){this.res&&this.res._dump(),this._request&&this._request.destroy(),r(e)}async flushHeaders(){if(this[zm]||this.destroyed)return;this[zm]=!0;let e=this.method===FCe,r=i=>{if(this._request=i,this.destroyed){i.destroy();return}e||DCe(i,this,["timeout","continue","close","error"]);let n=o=>(...a)=>{!this.writable&&!this.destroyed?o(...a):this.once("finish",()=>{o(...a)})};i.once("response",n((o,a,l)=>{let c=new QCe(this.socket,i.readableHighWaterMark);this.res=c,c.req=this,c.statusCode=o[nH],c.headers=o,c.rawHeaders=l,c.once("end",()=>{this.aborted?(c.aborted=!0,c.emit("aborted")):(c.complete=!0,c.socket=null,c.connection=null)}),e?(c.upgrade=!0,this.emit("connect",c,i,Buffer.alloc(0))?this.emit("close"):i.destroy()):(i.on("data",u=>{!c._dumped&&!c.push(u)&&i.pause()}),i.once("end",()=>{c.push(null)}),this.emit("response",c)||c._dump())})),i.once("headers",n(o=>this.emit("information",{statusCode:o[nH]}))),i.once("trailers",n((o,a,l)=>{let{res:c}=this;c.trailers=o,c.rawTrailers=l}));let{socket:s}=i.session;this.socket=s,this.connection=s;for(let o of this[Df])o();this.emit("socket",this.socket)};if(this[qb])try{r(this[qb].request(this[Jr]))}catch(i){this.emit("error",i)}else{this.reusedSocket=!0;try{r(await this.agent.request(this[Gb],this[aH],this[Jr]))}catch(i){this.emit("error",i)}}}getHeader(e){if(typeof e!="string")throw new jb("name","string",e);return this[Jr][e.toLowerCase()]}get headersSent(){return this[zm]}removeHeader(e){if(typeof e!="string")throw new jb("name","string",e);if(this.headersSent)throw new iH("remove");delete this[Jr][e.toLowerCase()]}setHeader(e,r){if(this.headersSent)throw new iH("set");if(typeof e!="string"||!RCe.test(e)&&!SCe(e))throw new kCe("Header name",e);if(typeof r=="undefined")throw new PCe(r,e);if(LCe.test(r))throw new vCe("header content",e);this[Jr][e.toLowerCase()]=r}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,r){let i=()=>this._request.setTimeout(e,r);return this._request?i():this[Df].push(i),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};tH.exports=AH});var cH=C((K9e,lH)=>{"use strict";var NCe=require("tls");lH.exports=(t={})=>new Promise((e,r)=>{let i=NCe.connect(t,()=>{t.resolveSocket?(i.off("error",r),e({alpnProtocol:i.alpnProtocol,socket:i})):(i.destroy(),e({alpnProtocol:i.alpnProtocol}))});i.on("error",r)})});var gH=C((U9e,uH)=>{"use strict";var MCe=require("net");uH.exports=t=>{let e=t.host,r=t.headers&&t.headers.host;return r&&(r.startsWith("[")?r.indexOf("]")===-1?e=r:e=r.slice(1,-1):e=r.split(":",1)[0]),MCe.isIP(e)?"":e}});var pH=C((Y9e,Wb)=>{"use strict";var fH=require("http"),zb=require("https"),OCe=cH(),TCe=Tb(),KCe=Jb(),UCe=gH(),YCe=Hb(),Vm=new TCe({maxSize:100}),Sf=new Map,hH=(t,e,r)=>{e._httpMessage={shouldKeepAlive:!0};let i=()=>{t.emit("free",e,r)};e.on("free",i);let n=()=>{t.removeSocket(e,r)};e.on("close",n);let s=()=>{t.removeSocket(e,r),e.off("close",n),e.off("free",i),e.off("agentRemove",s)};e.on("agentRemove",s),t.emit("free",e,r)},HCe=async t=>{let e=`${t.host}:${t.port}:${t.ALPNProtocols.sort()}`;if(!Vm.has(e)){if(Sf.has(e))return(await Sf.get(e)).alpnProtocol;let{path:r,agent:i}=t;t.path=t.socketPath;let n=OCe(t);Sf.set(e,n);try{let{socket:s,alpnProtocol:o}=await n;if(Vm.set(e,o),t.path=r,o==="h2")s.destroy();else{let{globalAgent:a}=zb,l=zb.Agent.prototype.createConnection;i?i.createConnection===l?hH(i,s,t):s.destroy():a.createConnection===l?hH(a,s,t):s.destroy()}return Sf.delete(e),o}catch(s){throw Sf.delete(e),s}}return Vm.get(e)};Wb.exports=async(t,e,r)=>{if((typeof t=="string"||t instanceof URL)&&(t=YCe(new URL(t))),typeof e=="function"&&(r=e,e=void 0),e=V(P(P({ALPNProtocols:["h2","http/1.1"]},t),e),{resolveSocket:!0}),!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error("The `ALPNProtocols` option must be an Array with at least one entry");e.protocol=e.protocol||"https:";let i=e.protocol==="https:";e.host=e.hostname||e.host||"localhost",e.session=e.tlsSession,e.servername=e.servername||UCe(e),e.port=e.port||(i?443:80),e._defaultAgent=i?zb.globalAgent:fH.globalAgent;let n=e.agent;if(n){if(n.addRequest)throw new Error("The `options.agent` object can contain only `http`, `https` or `http2` properties");e.agent=n[i?"https":"http"]}return i&&await HCe(e)==="h2"?(n&&(e.agent=n.http2),new KCe(e,r)):fH.request(e,r)};Wb.exports.protocolCache=Vm});var CH=C((H9e,dH)=>{"use strict";var jCe=require("http2"),GCe=Ub(),Vb=Jb(),qCe=Yb(),JCe=pH(),WCe=(t,e,r)=>new Vb(t,e,r),zCe=(t,e,r)=>{let i=new Vb(t,e,r);return i.end(),i};dH.exports=V(P(V(P({},jCe),{ClientRequest:Vb,IncomingMessage:qCe}),GCe),{request:WCe,get:zCe,auto:JCe})});var Zb=C(Xb=>{"use strict";Object.defineProperty(Xb,"__esModule",{value:!0});var mH=Vs();Xb.default=t=>mH.default.nodeStream(t)&&mH.default.function_(t.getBoundary)});var BH=C(_b=>{"use strict";Object.defineProperty(_b,"__esModule",{value:!0});var IH=require("fs"),EH=require("util"),yH=Vs(),VCe=Zb(),XCe=EH.promisify(IH.stat);_b.default=async(t,e)=>{if(e&&"content-length"in e)return Number(e["content-length"]);if(!t)return 0;if(yH.default.string(t))return Buffer.byteLength(t);if(yH.default.buffer(t))return t.length;if(VCe.default(t))return EH.promisify(t.getLength.bind(t))();if(t instanceof IH.ReadStream){let{size:r}=await XCe(t.path);return r}}});var eD=C($b=>{"use strict";Object.defineProperty($b,"__esModule",{value:!0});function ZCe(t,e,r){let i={};for(let n of r)i[n]=(...s)=>{e.emit(n,...s)},t.on(n,i[n]);return()=>{for(let n of r)t.off(n,i[n])}}$b.default=ZCe});var wH=C(tD=>{"use strict";Object.defineProperty(tD,"__esModule",{value:!0});tD.default=()=>{let t=[];return{once(e,r,i){e.once(r,i),t.push({origin:e,event:r,fn:i})},unhandleAll(){for(let e of t){let{origin:r,event:i,fn:n}=e;r.removeListener(i,n)}t.length=0}}}});var bH=C(xf=>{"use strict";Object.defineProperty(xf,"__esModule",{value:!0});xf.TimeoutError=void 0;var _Ce=require("net"),$Ce=wH(),QH=Symbol("reentry"),eme=()=>{},rD=class extends Error{constructor(e,r){super(`Timeout awaiting '${r}' for ${e}ms`);this.event=r,this.name="TimeoutError",this.code="ETIMEDOUT"}};xf.TimeoutError=rD;xf.default=(t,e,r)=>{if(QH in t)return eme;t[QH]=!0;let i=[],{once:n,unhandleAll:s}=$Ce.default(),o=(g,f,h)=>{var p;let m=setTimeout(f,g,g,h);(p=m.unref)===null||p===void 0||p.call(m);let I=()=>{clearTimeout(m)};return i.push(I),I},{host:a,hostname:l}=r,c=(g,f)=>{t.destroy(new rD(g,f))},u=()=>{for(let g of i)g();s()};if(t.once("error",g=>{if(u(),t.listenerCount("error")===0)throw g}),t.once("close",u),n(t,"response",g=>{n(g,"end",u)}),typeof e.request!="undefined"&&o(e.request,c,"request"),typeof e.socket!="undefined"){let g=()=>{c(e.socket,"socket")};t.setTimeout(e.socket,g),i.push(()=>{t.removeListener("timeout",g)})}return n(t,"socket",g=>{var f;let{socketPath:h}=t;if(g.connecting){let p=Boolean(h!=null?h:_Ce.isIP((f=l!=null?l:a)!==null&&f!==void 0?f:"")!==0);if(typeof e.lookup!="undefined"&&!p&&typeof g.address().address=="undefined"){let m=o(e.lookup,c,"lookup");n(g,"lookup",m)}if(typeof e.connect!="undefined"){let m=()=>o(e.connect,c,"connect");p?n(g,"connect",m()):n(g,"lookup",I=>{I===null&&n(g,"connect",m())})}typeof e.secureConnect!="undefined"&&r.protocol==="https:"&&n(g,"connect",()=>{let m=o(e.secureConnect,c,"secureConnect");n(g,"secureConnect",m)})}if(typeof e.send!="undefined"){let p=()=>o(e.send,c,"send");g.connecting?n(g,"connect",()=>{n(t,"upload-complete",p())}):n(t,"upload-complete",p())}}),typeof e.response!="undefined"&&n(t,"upload-complete",()=>{let g=o(e.response,c,"response");n(t,"response",g)}),u}});var SH=C(iD=>{"use strict";Object.defineProperty(iD,"__esModule",{value:!0});var DH=Vs();iD.default=t=>{t=t;let e={protocol:t.protocol,hostname:DH.default.string(t.hostname)&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return DH.default.string(t.port)&&t.port.length!==0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var xH=C(nD=>{"use strict";Object.defineProperty(nD,"__esModule",{value:!0});var tme=require("url"),rme=["protocol","host","hostname","port","pathname","search"];nD.default=(t,e)=>{var r,i;if(e.path){if(e.pathname)throw new TypeError("Parameters `path` and `pathname` are mutually exclusive.");if(e.search)throw new TypeError("Parameters `path` and `search` are mutually exclusive.");if(e.searchParams)throw new TypeError("Parameters `path` and `searchParams` are mutually exclusive.")}if(e.search&&e.searchParams)throw new TypeError("Parameters `search` and `searchParams` are mutually exclusive.");if(!t){if(!e.protocol)throw new TypeError("No URL protocol specified");t=`${e.protocol}//${(i=(r=e.hostname)!==null&&r!==void 0?r:e.host)!==null&&i!==void 0?i:""}`}let n=new tme.URL(t);if(e.path){let s=e.path.indexOf("?");s===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,s),e.search=e.path.slice(s+1)),delete e.path}for(let s of rme)e[s]&&(n[s]=e[s].toString());return n}});var PH=C(sD=>{"use strict";Object.defineProperty(sD,"__esModule",{value:!0});var kH=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,r){typeof e=="object"?this.weakMap.set(e,r):this.map.set(e,r)}get(e){return typeof e=="object"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e=="object"?this.weakMap.has(e):this.map.has(e)}};sD.default=kH});var aD=C(oD=>{"use strict";Object.defineProperty(oD,"__esModule",{value:!0});var ime=async t=>{let e=[],r=0;for await(let i of t)e.push(i),r+=Buffer.byteLength(i);return Buffer.isBuffer(e[0])?Buffer.concat(e,r):Buffer.from(e.join(""))};oD.default=ime});var FH=C(mA=>{"use strict";Object.defineProperty(mA,"__esModule",{value:!0});mA.dnsLookupIpVersionToFamily=mA.isDnsLookupIpVersion=void 0;var vH={auto:0,ipv4:4,ipv6:6};mA.isDnsLookupIpVersion=t=>t in vH;mA.dnsLookupIpVersionToFamily=t=>{if(mA.isDnsLookupIpVersion(t))return vH[t];throw new Error("Invalid DNS lookup IP version")}});var AD=C(Xm=>{"use strict";Object.defineProperty(Xm,"__esModule",{value:!0});Xm.isResponseOk=void 0;Xm.isResponseOk=t=>{let{statusCode:e}=t,r=t.request.options.followRedirect?299:399;return e>=200&&e<=r||e===304}});var LH=C(lD=>{"use strict";Object.defineProperty(lD,"__esModule",{value:!0});var RH=new Set;lD.default=t=>{RH.has(t)||(RH.add(t),process.emitWarning(`Got: ${t}`,{type:"DeprecationWarning"}))}});var NH=C(cD=>{"use strict";Object.defineProperty(cD,"__esModule",{value:!0});var Yt=Vs(),nme=(t,e)=>{if(Yt.default.null_(t.encoding))throw new TypeError("To get a Buffer, set `options.responseType` to `buffer` instead");Yt.assert.any([Yt.default.string,Yt.default.undefined],t.encoding),Yt.assert.any([Yt.default.boolean,Yt.default.undefined],t.resolveBodyOnly),Yt.assert.any([Yt.default.boolean,Yt.default.undefined],t.methodRewriting),Yt.assert.any([Yt.default.boolean,Yt.default.undefined],t.isStream),Yt.assert.any([Yt.default.string,Yt.default.undefined],t.responseType),t.responseType===void 0&&(t.responseType="text");let{retry:r}=t;if(e?t.retry=P({},e.retry):t.retry={calculateDelay:i=>i.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},Yt.default.object(r)?(t.retry=P(P({},t.retry),r),t.retry.methods=[...new Set(t.retry.methods.map(i=>i.toUpperCase()))],t.retry.statusCodes=[...new Set(t.retry.statusCodes)],t.retry.errorCodes=[...new Set(t.retry.errorCodes)]):Yt.default.number(r)&&(t.retry.limit=r),Yt.default.undefined(t.retry.maxRetryAfter)&&(t.retry.maxRetryAfter=Math.min(...[t.timeout.request,t.timeout.connect].filter(Yt.default.number))),Yt.default.object(t.pagination)){e&&(t.pagination=P(P({},e.pagination),t.pagination));let{pagination:i}=t;if(!Yt.default.function_(i.transform))throw new Error("`options.pagination.transform` must be implemented");if(!Yt.default.function_(i.shouldContinue))throw new Error("`options.pagination.shouldContinue` must be implemented");if(!Yt.default.function_(i.filter))throw new TypeError("`options.pagination.filter` must be implemented");if(!Yt.default.function_(i.paginate))throw new Error("`options.pagination.paginate` must be implemented")}return t.responseType==="json"&&t.headers.accept===void 0&&(t.headers.accept="application/json"),t};cD.default=nme});var MH=C(kf=>{"use strict";Object.defineProperty(kf,"__esModule",{value:!0});kf.retryAfterStatusCodes=void 0;kf.retryAfterStatusCodes=new Set([413,429,503]);var sme=({attemptCount:t,retryOptions:e,error:r,retryAfter:i})=>{if(t>e.limit)return 0;let n=e.methods.includes(r.options.method),s=e.errorCodes.includes(r.code),o=r.response&&e.statusCodes.includes(r.response.statusCode);if(!n||!s&&!o)return 0;if(r.response){if(i)return e.maxRetryAfter===void 0||i>e.maxRetryAfter?0:i;if(r.response.statusCode===413)return 0}let a=Math.random()*100;return 2**(t-1)*1e3+a};kf.default=sme});var vf=C(Et=>{"use strict";Object.defineProperty(Et,"__esModule",{value:!0});Et.UnsupportedProtocolError=Et.ReadError=Et.TimeoutError=Et.UploadError=Et.CacheError=Et.HTTPError=Et.MaxRedirectsError=Et.RequestError=Et.setNonEnumerableProperties=Et.knownHookEvents=Et.withoutBody=Et.kIsNormalizedAlready=void 0;var OH=require("util"),TH=require("stream"),ome=require("fs"),Wo=require("url"),KH=require("http"),uD=require("http"),ame=require("https"),Ame=z2(),lme=tY(),UH=NY(),cme=KY(),ume=CH(),gme=Jm(),se=Vs(),fme=BH(),YH=Zb(),hme=eD(),HH=bH(),pme=SH(),jH=xH(),dme=PH(),Cme=aD(),GH=FH(),mme=AD(),zo=LH(),Ime=NH(),Eme=MH(),yme=new lme.default,Sr=Symbol("request"),Zm=Symbol("response"),Ac=Symbol("responseSize"),lc=Symbol("downloadedSize"),cc=Symbol("bodySize"),uc=Symbol("uploadedSize"),_m=Symbol("serverResponsesPiped"),qH=Symbol("unproxyEvents"),JH=Symbol("isFromCache"),gD=Symbol("cancelTimeouts"),WH=Symbol("startedReading"),gc=Symbol("stopReading"),$m=Symbol("triggerRead"),Vo=Symbol("body"),Pf=Symbol("jobs"),zH=Symbol("originalResponse"),VH=Symbol("retryTimeout");Et.kIsNormalizedAlready=Symbol("isNormalizedAlready");var Bme=se.default.string(process.versions.brotli);Et.withoutBody=new Set(["GET","HEAD"]);Et.knownHookEvents=["init","beforeRequest","beforeRedirect","beforeError","beforeRetry","afterResponse"];function wme(t){for(let e in t){let r=t[e];if(!se.default.string(r)&&!se.default.number(r)&&!se.default.boolean(r)&&!se.default.null_(r)&&!se.default.undefined(r))throw new TypeError(`The \`searchParams\` value '${String(r)}' must be a string, number, boolean or null`)}}function Qme(t){return se.default.object(t)&&!("statusCode"in t)}var fD=new dme.default,bme=async t=>new Promise((e,r)=>{let i=n=>{r(n)};t.pending||e(),t.once("error",i),t.once("ready",()=>{t.off("error",i),e()})}),Dme=new Set([300,301,302,303,304,307,308]),Sme=["context","body","json","form"];Et.setNonEnumerableProperties=(t,e)=>{let r={};for(let i of t)if(!!i)for(let n of Sme)n in i&&(r[n]={writable:!0,configurable:!0,enumerable:!1,value:i[n]});Object.defineProperties(e,r)};var mr=class extends Error{constructor(e,r,i){var n;super(e);if(Error.captureStackTrace(this,this.constructor),this.name="RequestError",this.code=r.code,i instanceof hD?(Object.defineProperty(this,"request",{enumerable:!1,value:i}),Object.defineProperty(this,"response",{enumerable:!1,value:i[Zm]}),Object.defineProperty(this,"options",{enumerable:!1,value:i.options})):Object.defineProperty(this,"options",{enumerable:!1,value:i}),this.timings=(n=this.request)===null||n===void 0?void 0:n.timings,!se.default.undefined(r.stack)){let s=this.stack.indexOf(this.message)+this.message.length,o=this.stack.slice(s).split(` -`).reverse(),a=r.stack.slice(r.stack.indexOf(r.message)+r.message.length).split(` -`).reverse();for(;a.length!==0&&a[0]===o[0];)o.shift();this.stack=`${this.stack.slice(0,s)}${o.reverse().join(` -`)}${a.reverse().join(` -`)}`}}};Et.RequestError=mr;var pD=class extends mr{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e);this.name="MaxRedirectsError"}};Et.MaxRedirectsError=pD;var dD=class extends mr{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request);this.name="HTTPError"}};Et.HTTPError=dD;var CD=class extends mr{constructor(e,r){super(e.message,e,r);this.name="CacheError"}};Et.CacheError=CD;var mD=class extends mr{constructor(e,r){super(e.message,e,r);this.name="UploadError"}};Et.UploadError=mD;var ID=class extends mr{constructor(e,r,i){super(e.message,e,i);this.name="TimeoutError",this.event=e.event,this.timings=r}};Et.TimeoutError=ID;var eI=class extends mr{constructor(e,r){super(e.message,e,r);this.name="ReadError"}};Et.ReadError=eI;var ED=class extends mr{constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e);this.name="UnsupportedProtocolError"}};Et.UnsupportedProtocolError=ED;var xme=["socket","connect","continue","information","upgrade","timeout"],hD=class extends TH.Duplex{constructor(e,r={},i){super({autoDestroy:!1,highWaterMark:0});this[lc]=0,this[uc]=0,this.requestInitialized=!1,this[_m]=new Set,this.redirects=[],this[gc]=!1,this[$m]=!1,this[Pf]=[],this.retryCount=0,this._progressCallbacks=[];let n=()=>this._unlockWrite(),s=()=>this._lockWrite();this.on("pipe",c=>{c.prependListener("data",n),c.on("data",s),c.prependListener("end",n),c.on("end",s)}),this.on("unpipe",c=>{c.off("data",n),c.off("data",s),c.off("end",n),c.off("end",s)}),this.on("pipe",c=>{c instanceof uD.IncomingMessage&&(this.options.headers=P(P({},c.headers),this.options.headers))});let{json:o,body:a,form:l}=r;if((o||a||l)&&this._lockWrite(),Et.kIsNormalizedAlready in r)this.options=r;else try{this.options=this.constructor.normalizeArguments(e,r,i)}catch(c){se.default.nodeStream(r.body)&&r.body.destroy(),this.destroy(c);return}(async()=>{var c;try{this.options.body instanceof ome.ReadStream&&await bme(this.options.body);let{url:u}=this.options;if(!u)throw new TypeError("Missing `url` property");if(this.requestUrl=u.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(c=this[Sr])===null||c===void 0||c.destroy();return}for(let g of this[Pf])g();this[Pf].length=0,this.requestInitialized=!0}catch(u){if(u instanceof mr){this._beforeError(u);return}this.destroyed||this.destroy(u)}})()}static normalizeArguments(e,r,i){var n,s,o,a,l;let c=r;if(se.default.object(e)&&!se.default.urlInstance(e))r=P(P(P({},i),e),r);else{if(e&&r&&r.url!==void 0)throw new TypeError("The `url` option is mutually exclusive with the `input` argument");r=P(P({},i),r),e!==void 0&&(r.url=e),se.default.urlInstance(r.url)&&(r.url=new Wo.URL(r.url.toString()))}if(r.cache===!1&&(r.cache=void 0),r.dnsCache===!1&&(r.dnsCache=void 0),se.assert.any([se.default.string,se.default.undefined],r.method),se.assert.any([se.default.object,se.default.undefined],r.headers),se.assert.any([se.default.string,se.default.urlInstance,se.default.undefined],r.prefixUrl),se.assert.any([se.default.object,se.default.undefined],r.cookieJar),se.assert.any([se.default.object,se.default.string,se.default.undefined],r.searchParams),se.assert.any([se.default.object,se.default.string,se.default.undefined],r.cache),se.assert.any([se.default.object,se.default.number,se.default.undefined],r.timeout),se.assert.any([se.default.object,se.default.undefined],r.context),se.assert.any([se.default.object,se.default.undefined],r.hooks),se.assert.any([se.default.boolean,se.default.undefined],r.decompress),se.assert.any([se.default.boolean,se.default.undefined],r.ignoreInvalidCookies),se.assert.any([se.default.boolean,se.default.undefined],r.followRedirect),se.assert.any([se.default.number,se.default.undefined],r.maxRedirects),se.assert.any([se.default.boolean,se.default.undefined],r.throwHttpErrors),se.assert.any([se.default.boolean,se.default.undefined],r.http2),se.assert.any([se.default.boolean,se.default.undefined],r.allowGetBody),se.assert.any([se.default.string,se.default.undefined],r.localAddress),se.assert.any([GH.isDnsLookupIpVersion,se.default.undefined],r.dnsLookupIpVersion),se.assert.any([se.default.object,se.default.undefined],r.https),se.assert.any([se.default.boolean,se.default.undefined],r.rejectUnauthorized),r.https&&(se.assert.any([se.default.boolean,se.default.undefined],r.https.rejectUnauthorized),se.assert.any([se.default.function_,se.default.undefined],r.https.checkServerIdentity),se.assert.any([se.default.string,se.default.object,se.default.array,se.default.undefined],r.https.certificateAuthority),se.assert.any([se.default.string,se.default.object,se.default.array,se.default.undefined],r.https.key),se.assert.any([se.default.string,se.default.object,se.default.array,se.default.undefined],r.https.certificate),se.assert.any([se.default.string,se.default.undefined],r.https.passphrase),se.assert.any([se.default.string,se.default.buffer,se.default.array,se.default.undefined],r.https.pfx)),se.assert.any([se.default.object,se.default.undefined],r.cacheOptions),se.default.string(r.method)?r.method=r.method.toUpperCase():r.method="GET",r.headers===(i==null?void 0:i.headers)?r.headers=P({},r.headers):r.headers=gme(P(P({},i==null?void 0:i.headers),r.headers)),"slashes"in r)throw new TypeError("The legacy `url.Url` has been deprecated. Use `URL` instead.");if("auth"in r)throw new TypeError("Parameter `auth` is deprecated. Use `username` / `password` instead.");if("searchParams"in r&&r.searchParams&&r.searchParams!==(i==null?void 0:i.searchParams)){let h;if(se.default.string(r.searchParams)||r.searchParams instanceof Wo.URLSearchParams)h=new Wo.URLSearchParams(r.searchParams);else{wme(r.searchParams),h=new Wo.URLSearchParams;for(let p in r.searchParams){let m=r.searchParams[p];m===null?h.append(p,""):m!==void 0&&h.append(p,m)}}(n=i==null?void 0:i.searchParams)===null||n===void 0||n.forEach((p,m)=>{h.has(m)||h.append(m,p)}),r.searchParams=h}if(r.username=(s=r.username)!==null&&s!==void 0?s:"",r.password=(o=r.password)!==null&&o!==void 0?o:"",se.default.undefined(r.prefixUrl)?r.prefixUrl=(a=i==null?void 0:i.prefixUrl)!==null&&a!==void 0?a:"":(r.prefixUrl=r.prefixUrl.toString(),r.prefixUrl!==""&&!r.prefixUrl.endsWith("/")&&(r.prefixUrl+="/")),se.default.string(r.url)){if(r.url.startsWith("/"))throw new Error("`input` must not start with a slash when using `prefixUrl`");r.url=jH.default(r.prefixUrl+r.url,r)}else(se.default.undefined(r.url)&&r.prefixUrl!==""||r.protocol)&&(r.url=jH.default(r.prefixUrl,r));if(r.url){"port"in r&&delete r.port;let{prefixUrl:h}=r;Object.defineProperty(r,"prefixUrl",{set:m=>{let I=r.url;if(!I.href.startsWith(m))throw new Error(`Cannot change \`prefixUrl\` from ${h} to ${m}: ${I.href}`);r.url=new Wo.URL(m+I.href.slice(h.length)),h=m},get:()=>h});let{protocol:p}=r.url;if(p==="unix:"&&(p="http:",r.url=new Wo.URL(`http://unix${r.url.pathname}${r.url.search}`)),r.searchParams&&(r.url.search=r.searchParams.toString()),p!=="http:"&&p!=="https:")throw new ED(r);r.username===""?r.username=r.url.username:r.url.username=r.username,r.password===""?r.password=r.url.password:r.url.password=r.password}let{cookieJar:u}=r;if(u){let{setCookie:h,getCookieString:p}=u;se.assert.function_(h),se.assert.function_(p),h.length===4&&p.length===0&&(h=OH.promisify(h.bind(r.cookieJar)),p=OH.promisify(p.bind(r.cookieJar)),r.cookieJar={setCookie:h,getCookieString:p})}let{cache:g}=r;if(g&&(fD.has(g)||fD.set(g,new UH((h,p)=>{let m=h[Sr](h,p);return se.default.promise(m)&&(m.once=(I,y)=>{if(I==="error")m.catch(y);else if(I==="abort")(async()=>{try{(await m).once("abort",y)}catch(B){}})();else throw new Error(`Unknown HTTP2 promise event: ${I}`);return m}),m},g))),r.cacheOptions=P({},r.cacheOptions),r.dnsCache===!0)r.dnsCache=yme;else if(!se.default.undefined(r.dnsCache)&&!r.dnsCache.lookup)throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${se.default(r.dnsCache)}`);se.default.number(r.timeout)?r.timeout={request:r.timeout}:i&&r.timeout!==i.timeout?r.timeout=P(P({},i.timeout),r.timeout):r.timeout=P({},r.timeout),r.context||(r.context={});let f=r.hooks===(i==null?void 0:i.hooks);r.hooks=P({},r.hooks);for(let h of Et.knownHookEvents)if(h in r.hooks)if(se.default.array(r.hooks[h]))r.hooks[h]=[...r.hooks[h]];else throw new TypeError(`Parameter \`${h}\` must be an Array, got ${se.default(r.hooks[h])}`);else r.hooks[h]=[];if(i&&!f)for(let h of Et.knownHookEvents)i.hooks[h].length!==0&&(r.hooks[h]=[...i.hooks[h],...r.hooks[h]]);if("family"in r&&zo.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"'),(i==null?void 0:i.https)&&(r.https=P(P({},i.https),r.https)),"rejectUnauthorized"in r&&zo.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"'),"checkServerIdentity"in r&&zo.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"'),"ca"in r&&zo.default('"options.ca" was never documented, please use "options.https.certificateAuthority"'),"key"in r&&zo.default('"options.key" was never documented, please use "options.https.key"'),"cert"in r&&zo.default('"options.cert" was never documented, please use "options.https.certificate"'),"passphrase"in r&&zo.default('"options.passphrase" was never documented, please use "options.https.passphrase"'),"pfx"in r&&zo.default('"options.pfx" was never documented, please use "options.https.pfx"'),"followRedirects"in r)throw new TypeError("The `followRedirects` option does not exist. Use `followRedirect` instead.");if(r.agent){for(let h in r.agent)if(h!=="http"&&h!=="https"&&h!=="http2")throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${h}\``)}return r.maxRedirects=(l=r.maxRedirects)!==null&&l!==void 0?l:0,Et.setNonEnumerableProperties([i,c],r),Ime.default(r,i)}_lockWrite(){let e=()=>{throw new TypeError("The payload has been already provided")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:r}=e,i=!se.default.undefined(e.form),n=!se.default.undefined(e.json),s=!se.default.undefined(e.body),o=i||n||s,a=Et.withoutBody.has(e.method)&&!(e.method==="GET"&&e.allowGetBody);if(this._cannotHaveBody=a,o){if(a)throw new TypeError(`The \`${e.method}\` method cannot be used with a body`);if([s,i,n].filter(l=>l).length>1)throw new TypeError("The `body`, `json` and `form` options are mutually exclusive");if(s&&!(e.body instanceof TH.Readable)&&!se.default.string(e.body)&&!se.default.buffer(e.body)&&!YH.default(e.body))throw new TypeError("The `body` option must be a stream.Readable, string or Buffer");if(i&&!se.default.object(e.form))throw new TypeError("The `form` option must be an Object");{let l=!se.default.string(r["content-type"]);s?(YH.default(e.body)&&l&&(r["content-type"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[Vo]=e.body):i?(l&&(r["content-type"]="application/x-www-form-urlencoded"),this[Vo]=new Wo.URLSearchParams(e.form).toString()):(l&&(r["content-type"]="application/json"),this[Vo]=e.stringifyJson(e.json));let c=await fme.default(this[Vo],e.headers);se.default.undefined(r["content-length"])&&se.default.undefined(r["transfer-encoding"])&&!a&&!se.default.undefined(c)&&(r["content-length"]=String(c))}}else a?this._lockWrite():this._unlockWrite();this[cc]=Number(r["content-length"])||void 0}async _onResponseBase(e){let{options:r}=this,{url:i}=r;this[zH]=e,r.decompress&&(e=cme(e));let n=e.statusCode,s=e;s.statusMessage=s.statusMessage?s.statusMessage:KH.STATUS_CODES[n],s.url=r.url.toString(),s.requestUrl=this.requestUrl,s.redirectUrls=this.redirects,s.request=this,s.isFromCache=e.fromCache||!1,s.ip=this.ip,s.retryCount=this.retryCount,this[JH]=s.isFromCache,this[Ac]=Number(e.headers["content-length"])||void 0,this[Zm]=e,e.once("end",()=>{this[Ac]=this[lc],this.emit("downloadProgress",this.downloadProgress)}),e.once("error",a=>{e.destroy(),this._beforeError(new eI(a,this))}),e.once("aborted",()=>{this._beforeError(new eI({name:"Error",message:"The server aborted pending request",code:"ECONNRESET"},this))}),this.emit("downloadProgress",this.downloadProgress);let o=e.headers["set-cookie"];if(se.default.object(r.cookieJar)&&o){let a=o.map(async l=>r.cookieJar.setCookie(l,i.toString()));r.ignoreInvalidCookies&&(a=a.map(async l=>l.catch(()=>{})));try{await Promise.all(a)}catch(l){this._beforeError(l);return}}if(r.followRedirect&&e.headers.location&&Dme.has(n)){if(e.resume(),this[Sr]&&(this[gD](),delete this[Sr],this[qH]()),(n===303&&r.method!=="GET"&&r.method!=="HEAD"||!r.methodRewriting)&&(r.method="GET","body"in r&&delete r.body,"json"in r&&delete r.json,"form"in r&&delete r.form,this[Vo]=void 0,delete r.headers["content-length"]),this.redirects.length>=r.maxRedirects){this._beforeError(new pD(this));return}try{let l=Buffer.from(e.headers.location,"binary").toString(),c=new Wo.URL(l,i),u=c.toString();decodeURI(u),c.hostname!==i.hostname||c.port!==i.port?("host"in r.headers&&delete r.headers.host,"cookie"in r.headers&&delete r.headers.cookie,"authorization"in r.headers&&delete r.headers.authorization,(r.username||r.password)&&(r.username="",r.password="")):(c.username=r.username,c.password=r.password),this.redirects.push(u),r.url=c;for(let g of r.hooks.beforeRedirect)await g(r,s);this.emit("redirect",s,r),await this._makeRequest()}catch(l){this._beforeError(l);return}return}if(r.isStream&&r.throwHttpErrors&&!mme.isResponseOk(s)){this._beforeError(new dD(s));return}e.on("readable",()=>{this[$m]&&this._read()}),this.on("resume",()=>{e.resume()}),this.on("pause",()=>{e.pause()}),e.once("end",()=>{this.push(null)}),this.emit("response",e);for(let a of this[_m])if(!a.headersSent){for(let l in e.headers){let c=r.decompress?l!=="content-encoding":!0,u=e.headers[l];c&&a.setHeader(l,u)}a.statusCode=n}}async _onResponse(e){try{await this._onResponseBase(e)}catch(r){this._beforeError(r)}}_onRequest(e){let{options:r}=this,{timeout:i,url:n}=r;Ame.default(e),this[gD]=HH.default(e,i,n);let s=r.cache?"cacheableResponse":"response";e.once(s,l=>{this._onResponse(l)}),e.once("error",l=>{var c;e.destroy(),(c=e.res)===null||c===void 0||c.removeAllListeners("end"),l instanceof HH.TimeoutError?l=new ID(l,this.timings,this):l=new mr(l.message,l,this),this._beforeError(l)}),this[qH]=hme.default(e,this,xme),this[Sr]=e,this.emit("uploadProgress",this.uploadProgress);let o=this[Vo],a=this.redirects.length===0?this:e;se.default.nodeStream(o)?(o.pipe(a),o.once("error",l=>{this._beforeError(new mD(l,this))})):(this._unlockWrite(),se.default.undefined(o)?(this._cannotHaveBody||this._noPipe)&&(a.end(),this._lockWrite()):(this._writeRequest(o,void 0,()=>{}),a.end(),this._lockWrite())),this.emit("request",e)}async _createCacheableRequest(e,r){return new Promise((i,n)=>{Object.assign(r,pme.default(e)),delete r.url;let s,o=fD.get(r.cache)(r,async a=>{a._readableState.autoDestroy=!1,s&&(await s).emit("cacheableResponse",a),i(a)});r.url=e,o.once("error",n),o.once("request",async a=>{s=a,i(s)})})}async _makeRequest(){var e,r,i,n,s;let{options:o}=this,{headers:a}=o;for(let y in a)if(se.default.undefined(a[y]))delete a[y];else if(se.default.null_(a[y]))throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${y}\` header`);if(o.decompress&&se.default.undefined(a["accept-encoding"])&&(a["accept-encoding"]=Bme?"gzip, deflate, br":"gzip, deflate"),o.cookieJar){let y=await o.cookieJar.getCookieString(o.url.toString());se.default.nonEmptyString(y)&&(o.headers.cookie=y)}for(let y of o.hooks.beforeRequest){let B=await y(o);if(!se.default.undefined(B)){o.request=()=>B;break}}o.body&&this[Vo]!==o.body&&(this[Vo]=o.body);let{agent:l,request:c,timeout:u,url:g}=o;if(o.dnsCache&&!("lookup"in o)&&(o.lookup=o.dnsCache.lookup),g.hostname==="unix"){let y=/(?.+?):(?.+)/.exec(`${g.pathname}${g.search}`);if(y==null?void 0:y.groups){let{socketPath:B,path:x}=y.groups;Object.assign(o,{socketPath:B,path:x,host:""})}}let f=g.protocol==="https:",h;o.http2?h=ume.auto:h=f?ame.request:KH.request;let p=(e=o.request)!==null&&e!==void 0?e:h,m=o.cache?this._createCacheableRequest:p;l&&!o.http2&&(o.agent=l[f?"https":"http"]),o[Sr]=p,delete o.request,delete o.timeout;let I=o;if(I.shared=(r=o.cacheOptions)===null||r===void 0?void 0:r.shared,I.cacheHeuristic=(i=o.cacheOptions)===null||i===void 0?void 0:i.cacheHeuristic,I.immutableMinTimeToLive=(n=o.cacheOptions)===null||n===void 0?void 0:n.immutableMinTimeToLive,I.ignoreCargoCult=(s=o.cacheOptions)===null||s===void 0?void 0:s.ignoreCargoCult,o.dnsLookupIpVersion!==void 0)try{I.family=GH.dnsLookupIpVersionToFamily(o.dnsLookupIpVersion)}catch(y){throw new Error("Invalid `dnsLookupIpVersion` option value")}o.https&&("rejectUnauthorized"in o.https&&(I.rejectUnauthorized=o.https.rejectUnauthorized),o.https.checkServerIdentity&&(I.checkServerIdentity=o.https.checkServerIdentity),o.https.certificateAuthority&&(I.ca=o.https.certificateAuthority),o.https.certificate&&(I.cert=o.https.certificate),o.https.key&&(I.key=o.https.key),o.https.passphrase&&(I.passphrase=o.https.passphrase),o.https.pfx&&(I.pfx=o.https.pfx));try{let y=await m(g,I);se.default.undefined(y)&&(y=h(g,I)),o.request=c,o.timeout=u,o.agent=l,o.https&&("rejectUnauthorized"in o.https&&delete I.rejectUnauthorized,o.https.checkServerIdentity&&delete I.checkServerIdentity,o.https.certificateAuthority&&delete I.ca,o.https.certificate&&delete I.cert,o.https.key&&delete I.key,o.https.passphrase&&delete I.passphrase,o.https.pfx&&delete I.pfx),Qme(y)?this._onRequest(y):this.writable?(this.once("finish",()=>{this._onResponse(y)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(y)}catch(y){throw y instanceof UH.CacheError?new CD(y,this):new mr(y.message,y,this)}}async _error(e){try{for(let r of this.options.hooks.beforeError)e=await r(e)}catch(r){e=new mr(r.message,r,this)}this.destroy(e)}_beforeError(e){if(this[gc])return;let{options:r}=this,i=this.retryCount+1;this[gc]=!0,e instanceof mr||(e=new mr(e.message,e,this));let n=e,{response:s}=n;(async()=>{if(s&&!s.body){s.setEncoding(this._readableState.encoding);try{s.rawBody=await Cme.default(s),s.body=s.rawBody.toString()}catch(o){}}if(this.listenerCount("retry")!==0){let o;try{let a;s&&"retry-after"in s.headers&&(a=Number(s.headers["retry-after"]),Number.isNaN(a)?(a=Date.parse(s.headers["retry-after"])-Date.now(),a<=0&&(a=1)):a*=1e3),o=await r.retry.calculateDelay({attemptCount:i,retryOptions:r.retry,error:n,retryAfter:a,computedValue:Eme.default({attemptCount:i,retryOptions:r.retry,error:n,retryAfter:a,computedValue:0})})}catch(a){this._error(new mr(a.message,a,this));return}if(o){let a=async()=>{try{for(let l of this.options.hooks.beforeRetry)await l(this.options,n,i)}catch(l){this._error(new mr(l.message,e,this));return}this.destroyed||(this.destroy(),this.emit("retry",i,e))};this[VH]=setTimeout(a,o);return}}this._error(n)})()}_read(){this[$m]=!0;let e=this[Zm];if(e&&!this[gc]){e.readableLength&&(this[$m]=!1);let r;for(;(r=e.read())!==null;){this[lc]+=r.length,this[WH]=!0;let i=this.downloadProgress;i.percent<1&&this.emit("downloadProgress",i),this.push(r)}}}_write(e,r,i){let n=()=>{this._writeRequest(e,r,i)};this.requestInitialized?n():this[Pf].push(n)}_writeRequest(e,r,i){this[Sr].destroyed||(this._progressCallbacks.push(()=>{this[uc]+=Buffer.byteLength(e,r);let n=this.uploadProgress;n.percent<1&&this.emit("uploadProgress",n)}),this[Sr].write(e,r,n=>{!n&&this._progressCallbacks.length!==0&&this._progressCallbacks.shift()(),i(n)}))}_final(e){let r=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Sr in this)){e();return}if(this[Sr].destroyed){e();return}this[Sr].end(i=>{i||(this[cc]=this[uc],this.emit("uploadProgress",this.uploadProgress),this[Sr].emit("upload-complete")),e(i)})};this.requestInitialized?r():this[Pf].push(r)}_destroy(e,r){var i;this[gc]=!0,clearTimeout(this[VH]),Sr in this&&(this[gD](),((i=this[Zm])===null||i===void 0?void 0:i.complete)||this[Sr].destroy()),e!==null&&!se.default.undefined(e)&&!(e instanceof mr)&&(e=new mr(e.message,e,this)),r(e)}get _isAboutToError(){return this[gc]}get ip(){var e;return(e=this[Sr])===null||e===void 0?void 0:e.socket.remoteAddress}get aborted(){var e,r,i;return((r=(e=this[Sr])===null||e===void 0?void 0:e.destroyed)!==null&&r!==void 0?r:this.destroyed)&&!((i=this[zH])===null||i===void 0?void 0:i.complete)}get socket(){var e;return(e=this[Sr])===null||e===void 0?void 0:e.socket}get downloadProgress(){let e;return this[Ac]?e=this[lc]/this[Ac]:this[Ac]===this[lc]?e=1:e=0,{percent:e,transferred:this[lc],total:this[Ac]}}get uploadProgress(){let e;return this[cc]?e=this[uc]/this[cc]:this[cc]===this[uc]?e=1:e=0,{percent:e,transferred:this[uc],total:this[cc]}}get timings(){var e;return(e=this[Sr])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[JH]}pipe(e,r){if(this[WH])throw new Error("Failed to pipe. The response has been emitted already.");return e instanceof uD.ServerResponse&&this[_m].add(e),super.pipe(e,r)}unpipe(e){return e instanceof uD.ServerResponse&&this[_m].delete(e),super.unpipe(e),this}};Et.default=hD});var Ff=C(Mn=>{"use strict";var kme=Mn&&Mn.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r),Object.defineProperty(t,i,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]}),Pme=Mn&&Mn.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&kme(e,t,r)};Object.defineProperty(Mn,"__esModule",{value:!0});Mn.CancelError=Mn.ParseError=void 0;var XH=vf(),ZH=class extends XH.RequestError{constructor(e,r){let{options:i}=r.request;super(`${e.message} in "${i.url.toString()}"`,e,r.request);this.name="ParseError"}};Mn.ParseError=ZH;var _H=class extends XH.RequestError{constructor(e){super("Promise was canceled",{},e);this.name="CancelError"}get isCanceled(){return!0}};Mn.CancelError=_H;Pme(vf(),Mn)});var ej=C(yD=>{"use strict";Object.defineProperty(yD,"__esModule",{value:!0});var $H=Ff(),vme=(t,e,r,i)=>{let{rawBody:n}=t;try{if(e==="text")return n.toString(i);if(e==="json")return n.length===0?"":r(n.toString());if(e==="buffer")return n;throw new $H.ParseError({message:`Unknown body type '${e}'`,name:"Error"},t)}catch(s){throw new $H.ParseError(s,t)}};yD.default=vme});var BD=C(Xo=>{"use strict";var Fme=Xo&&Xo.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r),Object.defineProperty(t,i,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]}),Rme=Xo&&Xo.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Fme(e,t,r)};Object.defineProperty(Xo,"__esModule",{value:!0});var Lme=require("events"),Nme=Vs(),Mme=J2(),tI=Ff(),tj=ej(),rj=vf(),Ome=eD(),Tme=aD(),ij=AD(),Kme=["request","response","redirect","uploadProgress","downloadProgress"];function nj(t){let e,r,i=new Lme.EventEmitter,n=new Mme((o,a,l)=>{let c=u=>{let g=new rj.default(void 0,t);g.retryCount=u,g._noPipe=!0,l(()=>g.destroy()),l.shouldReject=!1,l(()=>a(new tI.CancelError(g))),e=g,g.once("response",async h=>{var p;if(h.retryCount=u,h.request.aborted)return;let m;try{m=await Tme.default(g),h.rawBody=m}catch(x){return}if(g._isAboutToError)return;let I=((p=h.headers["content-encoding"])!==null&&p!==void 0?p:"").toLowerCase(),y=["gzip","deflate","br"].includes(I),{options:B}=g;if(y&&!B.decompress)h.body=m;else try{h.body=tj.default(h,B.responseType,B.parseJson,B.encoding)}catch(x){if(h.body=m.toString(),ij.isResponseOk(h)){g._beforeError(x);return}}try{for(let[x,F]of B.hooks.afterResponse.entries())h=await F(h,async L=>{let T=rj.default.normalizeArguments(void 0,V(P({},L),{retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1}),B);T.hooks.afterResponse=T.hooks.afterResponse.slice(0,x);for(let q of T.hooks.beforeRetry)await q(T);let v=nj(T);return l(()=>{v.catch(()=>{}),v.cancel()}),v})}catch(x){g._beforeError(new tI.RequestError(x.message,x,g));return}if(!ij.isResponseOk(h)){g._beforeError(new tI.HTTPError(h));return}r=h,o(g.options.resolveBodyOnly?h.body:h)});let f=h=>{if(n.isCanceled)return;let{options:p}=g;if(h instanceof tI.HTTPError&&!p.throwHttpErrors){let{response:m}=h;o(g.options.resolveBodyOnly?m.body:m);return}a(h)};g.once("error",f),g.once("retry",(h,p)=>{var m;if(Nme.default.nodeStream((m=p.request)===null||m===void 0?void 0:m.options.body)){f(p);return}c(h)}),Ome.default(g,i,Kme)};c(0)});n.on=(o,a)=>(i.on(o,a),n);let s=o=>{let a=(async()=>{await n;let{options:l}=r.request;return tj.default(r,o,l.parseJson,l.encoding)})();return Object.defineProperties(a,Object.getOwnPropertyDescriptors(n)),a};return n.json=()=>{let{headers:o}=e.options;return!e.writableFinished&&o.accept===void 0&&(o.accept="application/json"),s("json")},n.buffer=()=>s("buffer"),n.text=()=>s("text"),n}Xo.default=nj;Rme(Ff(),Xo)});var sj=C(wD=>{"use strict";Object.defineProperty(wD,"__esModule",{value:!0});var Ume=Ff();function Yme(t,...e){let r=(async()=>{if(t instanceof Ume.RequestError)try{for(let n of e)if(n)for(let s of n)t=await s(t)}catch(n){t=n}throw t})(),i=()=>r;return r.json=i,r.text=i,r.buffer=i,r.on=i,r}wD.default=Yme});var Aj=C(QD=>{"use strict";Object.defineProperty(QD,"__esModule",{value:!0});var oj=Vs();function aj(t){for(let e of Object.values(t))(oj.default.plainObject(e)||oj.default.array(e))&&aj(e);return Object.freeze(t)}QD.default=aj});var cj=C(lj=>{"use strict";Object.defineProperty(lj,"__esModule",{value:!0})});var bD=C(hn=>{"use strict";var Hme=hn&&hn.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r),Object.defineProperty(t,i,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]}),jme=hn&&hn.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Hme(e,t,r)};Object.defineProperty(hn,"__esModule",{value:!0});hn.defaultHandler=void 0;var uj=Vs(),pn=BD(),Gme=sj(),rI=vf(),qme=Aj(),Jme={RequestError:pn.RequestError,CacheError:pn.CacheError,ReadError:pn.ReadError,HTTPError:pn.HTTPError,MaxRedirectsError:pn.MaxRedirectsError,TimeoutError:pn.TimeoutError,ParseError:pn.ParseError,CancelError:pn.CancelError,UnsupportedProtocolError:pn.UnsupportedProtocolError,UploadError:pn.UploadError},Wme=async t=>new Promise(e=>{setTimeout(e,t)}),{normalizeArguments:iI}=rI.default,gj=(...t)=>{let e;for(let r of t)e=iI(void 0,r,e);return e},zme=t=>t.isStream?new rI.default(void 0,t):pn.default(t),Vme=t=>"defaults"in t&&"options"in t.defaults,Xme=["get","post","put","patch","head","delete"];hn.defaultHandler=(t,e)=>e(t);var fj=(t,e)=>{if(t)for(let r of t)r(e)},hj=t=>{t._rawHandlers=t.handlers,t.handlers=t.handlers.map(i=>(n,s)=>{let o,a=i(n,l=>(o=s(l),o));if(a!==o&&!n.isStream&&o){let l=a,{then:c,catch:u,finally:g}=l;Object.setPrototypeOf(l,Object.getPrototypeOf(o)),Object.defineProperties(l,Object.getOwnPropertyDescriptors(o)),l.then=c,l.catch=u,l.finally=g}return a});let e=(i,n,s)=>{var o,a;let l=0,c=u=>t.handlers[l++](u,l===t.handlers.length?zme:c);if(uj.default.plainObject(i)){let u=P(P({},i),n);rI.setNonEnumerableProperties([i,n],u),n=u,i=void 0}try{let u;try{fj(t.options.hooks.init,n),fj((o=n==null?void 0:n.hooks)===null||o===void 0?void 0:o.init,n)}catch(f){u=f}let g=iI(i,n,s!=null?s:t.options);if(g[rI.kIsNormalizedAlready]=!0,u)throw new pn.RequestError(u.message,u,g);return c(g)}catch(u){if(n==null?void 0:n.isStream)throw u;return Gme.default(u,t.options.hooks.beforeError,(a=n==null?void 0:n.hooks)===null||a===void 0?void 0:a.beforeError)}};e.extend=(...i)=>{let n=[t.options],s=[...t._rawHandlers],o;for(let a of i)Vme(a)?(n.push(a.defaults.options),s.push(...a.defaults._rawHandlers),o=a.defaults.mutableDefaults):(n.push(a),"handlers"in a&&s.push(...a.handlers),o=a.mutableDefaults);return s=s.filter(a=>a!==hn.defaultHandler),s.length===0&&s.push(hn.defaultHandler),hj({options:gj(...n),handlers:s,mutableDefaults:Boolean(o)})};let r=async function*(i,n){let s=iI(i,n,t.options);s.resolveBodyOnly=!1;let o=s.pagination;if(!uj.default.object(o))throw new TypeError("`options.pagination` must be implemented");let a=[],{countLimit:l}=o,c=0;for(;c{let s=[];for await(let o of r(i,n))s.push(o);return s},e.paginate.each=r,e.stream=(i,n)=>e(i,V(P({},n),{isStream:!0}));for(let i of Xme)e[i]=(n,s)=>e(n,V(P({},s),{method:i})),e.stream[i]=(n,s)=>e(n,V(P({},s),{method:i,isStream:!0}));return Object.assign(e,Jme),Object.defineProperty(e,"defaults",{value:t.mutableDefaults?t:qme.default(t),writable:t.mutableDefaults,configurable:t.mutableDefaults,enumerable:!0}),e.mergeOptions=gj,e};hn.default=hj;jme(cj(),hn)});var sI=C((Zs,nI)=>{"use strict";var Zme=Zs&&Zs.__createBinding||(Object.create?function(t,e,r,i){i===void 0&&(i=r),Object.defineProperty(t,i,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]}),pj=Zs&&Zs.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Zme(e,t,r)};Object.defineProperty(Zs,"__esModule",{value:!0});var _me=require("url"),dj=bD(),$me={options:{method:"GET",retry:{limit:2,methods:["GET","PUT","HEAD","DELETE","OPTIONS","TRACE"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"],maxRetryAfter:void 0,calculateDelay:({computedValue:t})=>t},timeout:{},headers:{"user-agent":"got (https://github.com/sindresorhus/got)"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:"text",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:"",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:t=>t.request.options.responseType==="json"?t.body:JSON.parse(t.body),paginate:t=>{if(!Reflect.has(t.headers,"link"))return!1;let e=t.headers.link.split(","),r;for(let i of e){let n=i.split(";");if(n[1].includes("next")){r=n[0].trimStart().trim(),r=r.slice(1,-1);break}}return r?{url:new _me.URL(r)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:Infinity,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:t=>JSON.parse(t),stringifyJson:t=>JSON.stringify(t),cacheOptions:{}},handlers:[dj.defaultHandler],mutableDefaults:!1},DD=dj.default($me);Zs.default=DD;nI.exports=DD;nI.exports.default=DD;nI.exports.__esModule=!0;pj(bD(),Zs);pj(BD(),Zs)});var Ej=C(fc=>{"use strict";var uVe=require("net"),eIe=require("tls"),SD=require("http"),Cj=require("https"),tIe=require("events"),gVe=require("assert"),rIe=require("util");fc.httpOverHttp=iIe;fc.httpsOverHttp=nIe;fc.httpOverHttps=sIe;fc.httpsOverHttps=oIe;function iIe(t){var e=new _s(t);return e.request=SD.request,e}function nIe(t){var e=new _s(t);return e.request=SD.request,e.createSocket=mj,e.defaultPort=443,e}function sIe(t){var e=new _s(t);return e.request=Cj.request,e}function oIe(t){var e=new _s(t);return e.request=Cj.request,e.createSocket=mj,e.defaultPort=443,e}function _s(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||SD.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(i,n,s,o){for(var a=Ij(n,s,o),l=0,c=e.requests.length;l=this.maxSockets){s.requests.push(o);return}s.createSocket(o,function(a){a.on("free",l),a.on("close",c),a.on("agentRemove",c),e.onSocket(a);function l(){s.emit("free",a,o)}function c(u){s.removeSocket(a),a.removeListener("free",l),a.removeListener("close",c),a.removeListener("agentRemove",c)}})};_s.prototype.createSocket=function(e,r){var i=this,n={};i.sockets.push(n);var s=xD({},i.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(s.localAddress=e.localAddress),s.proxyAuth&&(s.headers=s.headers||{},s.headers["Proxy-Authorization"]="Basic "+new Buffer(s.proxyAuth).toString("base64")),Zo("making CONNECT request");var o=i.request(s);o.useChunkedEncodingByDefault=!1,o.once("response",a),o.once("upgrade",l),o.once("connect",c),o.once("error",u),o.end();function a(g){g.upgrade=!0}function l(g,f,h){process.nextTick(function(){c(g,f,h)})}function c(g,f,h){if(o.removeAllListeners(),f.removeAllListeners(),g.statusCode!==200){Zo("tunneling socket could not be established, statusCode=%d",g.statusCode),f.destroy();var p=new Error("tunneling socket could not be established, statusCode="+g.statusCode);p.code="ECONNRESET",e.request.emit("error",p),i.removeSocket(n);return}if(h.length>0){Zo("got illegal response body from proxy"),f.destroy();var p=new Error("got illegal response body from proxy");p.code="ECONNRESET",e.request.emit("error",p),i.removeSocket(n);return}return Zo("tunneling connection has established"),i.sockets[i.sockets.indexOf(n)]=f,r(f)}function u(g){o.removeAllListeners(),Zo(`tunneling socket could not be established, cause=%s -`,g.message,g.stack);var f=new Error("tunneling socket could not be established, cause="+g.message);f.code="ECONNRESET",e.request.emit("error",f),i.removeSocket(n)}};_s.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var i=this.requests.shift();i&&this.createSocket(i,function(n){i.request.onSocket(n)})}};function mj(t,e){var r=this;_s.prototype.createSocket.call(r,t,function(i){var n=t.request.getHeader("host"),s=xD({},r.options,{socket:i,servername:n?n.replace(/:.*$/,""):t.host}),o=eIe.connect(0,s);r.sockets[r.sockets.indexOf(i)]=o,e(o)})}function Ij(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function xD(t){for(var e=1,r=arguments.length;e{yj.exports=Ej()});var sG=C((D7e,RD)=>{var Lj=Object.assign({},require("fs")),ne=typeof ne!="undefined"?ne:{},Lf={},$o;for($o in ne)ne.hasOwnProperty($o)&&(Lf[$o]=ne[$o]);var LD=[],Nj="./this.program",Mj=function(t,e){throw e},Oj=!1,EA=!0,Nf="";function pIe(t){return ne.locateFile?ne.locateFile(t,Nf):Nf+t}var AI,ND,lI,MD;EA&&(Oj?Nf=require("path").dirname(Nf)+"/":Nf=__dirname+"/",AI=function(e,r){var i=Kj(e);return i?r?i:i.toString():(lI||(lI=Lj),MD||(MD=require("path")),e=MD.normalize(e),lI.readFileSync(e,r?null:"utf8"))},ND=function(e){var r=AI(e,!0);return r.buffer||(r=new Uint8Array(r)),Tj(r.buffer),r},process.argv.length>1&&(Nj=process.argv[1].replace(/\\/g,"/")),LD=process.argv.slice(2),typeof RD!="undefined"&&(RD.exports=ne),Mj=function(t){process.exit(t)},ne.inspect=function(){return"[Emscripten Module object]"});var cI=ne.print||console.log.bind(console),Wr=ne.printErr||console.warn.bind(console);for($o in Lf)Lf.hasOwnProperty($o)&&(ne[$o]=Lf[$o]);Lf=null;ne.arguments&&(LD=ne.arguments);ne.thisProgram&&(Nj=ne.thisProgram);ne.quit&&(Mj=ne.quit);var dIe=16;function CIe(t,e){return e||(e=dIe),Math.ceil(t/e)*e}var mIe=0,IIe=function(t){mIe=t},OD;ne.wasmBinary&&(OD=ne.wasmBinary);var xVe=ne.noExitRuntime||!0;typeof WebAssembly!="object"&&gr("no native wasm support detected");function EIe(t,e,r){switch(e=e||"i8",e.charAt(e.length-1)==="*"&&(e="i32"),e){case"i1":return ui[t>>0];case"i8":return ui[t>>0];case"i16":return TD[t>>1];case"i32":return je[t>>2];case"i64":return je[t>>2];case"float":return Uj[t>>2];case"double":return Yj[t>>3];default:gr("invalid type for getValue: "+e)}return null}var uI,Hj=!1,yIe;function Tj(t,e){t||gr("Assertion failed: "+e)}function jj(t){var e=ne["_"+t];return Tj(e,"Cannot call unknown function "+t+", make sure it is exported"),e}function bIe(t,e,r,i,n){var s={string:function(h){var p=0;if(h!=null&&h!==0){var m=(h.length<<2)+1;p=Jj(m),qj(h,p,m)}return p},array:function(h){var p=Jj(h.length);return BIe(h,p),p}};function o(h){return e==="string"?Gj(h):e==="boolean"?Boolean(h):h}var a=jj(t),l=[],c=0;if(i)for(var u=0;u=i);)++n;if(n-e>16&&t.subarray&&Wj)return Wj.decode(t.subarray(e,n));for(var s="";e>10,56320|c&1023)}}return s}function Gj(t,e){return t?hc(pc,t,e):""}function gI(t,e,r,i){if(!(i>0))return 0;for(var n=r,s=r+i-1,o=0;o=55296&&a<=57343){var l=t.charCodeAt(++o);a=65536+((a&1023)<<10)|l&1023}if(a<=127){if(r>=s)break;e[r++]=a}else if(a<=2047){if(r+1>=s)break;e[r++]=192|a>>6,e[r++]=128|a&63}else if(a<=65535){if(r+2>=s)break;e[r++]=224|a>>12,e[r++]=128|a>>6&63,e[r++]=128|a&63}else{if(r+3>=s)break;e[r++]=240|a>>18,e[r++]=128|a>>12&63,e[r++]=128|a>>6&63,e[r++]=128|a&63}}return e[r]=0,r-n}function qj(t,e,r){return gI(t,pc,e,r)}function fI(t){for(var e=0,r=0;r=55296&&i<=57343&&(i=65536+((i&1023)<<10)|t.charCodeAt(++r)&1023),i<=127?++e:i<=2047?e+=2:i<=65535?e+=3:e+=4}return e}function KD(t){var e=fI(t)+1,r=zj(e);return r&&gI(t,ui,r,e),r}function BIe(t,e){ui.set(t,e)}function SIe(t,e){return t%e>0&&(t+=e-t%e),t}var UD,ui,pc,TD,xIe,je,kIe,Uj,Yj;function Vj(t){UD=t,ne.HEAP8=ui=new Int8Array(t),ne.HEAP16=TD=new Int16Array(t),ne.HEAP32=je=new Int32Array(t),ne.HEAPU8=pc=new Uint8Array(t),ne.HEAPU16=xIe=new Uint16Array(t),ne.HEAPU32=kIe=new Uint32Array(t),ne.HEAPF32=Uj=new Float32Array(t),ne.HEAPF64=Yj=new Float64Array(t)}var kVe=ne.INITIAL_MEMORY||16777216,YD,Xj=[],Zj=[],_j=[],PIe=!1;function FIe(){if(ne.preRun)for(typeof ne.preRun=="function"&&(ne.preRun=[ne.preRun]);ne.preRun.length;)vIe(ne.preRun.shift());HD(Xj)}function RIe(){PIe=!0,!ne.noFSInit&&!E.init.initialized&&E.init(),ea.init(),HD(Zj)}function NIe(){if(ne.postRun)for(typeof ne.postRun=="function"&&(ne.postRun=[ne.postRun]);ne.postRun.length;)LIe(ne.postRun.shift());HD(_j)}function vIe(t){Xj.unshift(t)}function MIe(t){Zj.unshift(t)}function LIe(t){_j.unshift(t)}var yA=0,jD=null,Mf=null;function OIe(t){return t}function $j(t){yA++,ne.monitorRunDependencies&&ne.monitorRunDependencies(yA)}function GD(t){if(yA--,ne.monitorRunDependencies&&ne.monitorRunDependencies(yA),yA==0&&(jD!==null&&(clearInterval(jD),jD=null),Mf)){var e=Mf;Mf=null,e()}}ne.preloadedImages={};ne.preloadedAudios={};function gr(t){ne.onAbort&&ne.onAbort(t),t+="",Wr(t),Hj=!0,yIe=1,t="abort("+t+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(t);throw e}var eG="data:application/octet-stream;base64,";function tG(t){return t.startsWith(eG)}var Of="data:application/octet-stream;base64,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AkEEaiEBIAIoAgAiA0F/cyADQYGChAhrcUGAgYKEeHFFDQALIANB/wFxRQRAIAIgAGsPCwNAIAItAAEhAyACQQFqIgEhAiADDQALCyABIABrC2EBAX8jAEEQayICIAA2AgggAiABNwMAAkAgAikDACACKAIIKQMIVgRAIAIoAghBADoAACACQX82AgwMAQsgAigCCEEBOgAAIAIoAgggAikDADcDECACQQA2AgwLIAIoAgwL7wEBAX8jAEEgayICJAAgAiAANgIYIAIgATcDECACIAIoAhhCCBAeNgIMAkAgAigCDEUEQCACQX82AhwMAQsgAigCDCACKQMQQv8BgzwAACACKAIMIAIpAxBCCIhC/wGDPAABIAIoAgwgAikDEEIQiEL/AYM8AAIgAigCDCACKQMQQhiIQv8BgzwAAyACKAIMIAIpAxBCIIhC/wGDPAAEIAIoAgwgAikDEEIoiEL/AYM8AAUgAigCDCACKQMQQjCIQv8BgzwABiACKAIMIAIpAxBCOIhC/wGDPAAHIAJBADYCHAsgAigCHBogAkEgaiQAC4cDAQF/IwBBMGsiAyQAIAMgADYCJCADIAE2AiAgAyACNwMYAkAgAygCJC0AKEEBcQRAIANCfzcDKAwBCwJAAkAgAygCJCgCIEUNACADKQMYQv///////////wBWDQAgAykDGFANASADKAIgDQELIAMoAiRBDGpBEkEAEBQgA0J/NwMoDAELIAMoAiQtADVBAXEEQCADQn83AygMAQsCfyMAQRBrIgAgAygCJDYCDCAAKAIMLQA0QQFxCwRAIANCADcDKAwBCyADKQMYUARAIANCADcDKAwBCyADQgA3AxADQCADKQMQIAMpAxhUBEAgAyADKAIkIAMoAiAgAykDEKdqIAMpAxggAykDEH1BARAhIgI3AwggAkIAUwRAIAMoAiRBAToANSADKQMQUARAIANCfzcDKAwECyADIAMpAxA3AygMAwsgAykDCFAEQCADKAIkQQE6ADQFIAMgAykDCCADKQMQfDcDEAwCCwsLIAMgAykDEDcDKAsgAykDKCECIANBMGokACACCzYBAX8jAEEQayIBIAA2AgwCfiABKAIMLQAAQQFxBEAgASgCDCkDCCABKAIMKQMQfQwBC0IACwuyAQIBfwF+IwBBEGsiASQAIAEgADYCBCABIAEoAgRC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AkEBNgIQIAJBADYCCANAAkAgAigCCCACKAIYLwEETw0AAkAgAigCDCACKAIIai0AAEEfSwRAIAIoAgwgAigCCGotAABBgAFJDQELIAIoAgwgAigCCGotAABBDUYNACACKAIMIAIoAghqLQAAQQpGDQAgAigCDCACKAIIai0AAEEJRgRADAELIAJBAzYCEAJAIAIoAgwgAigCCGotAABB4AFxQcABRgRAIAJBATYCAAwBCwJAIAIoAgwgAigCCGotAABB8AFxQeABRgRAIAJBAjYCAAwBCwJAIAIoAgwgAigCCGotAABB+AFxQfABRgRAIAJBAzYCAAwBCyACQQQ2AhAMBAsLCyACKAIYLwEEIAIoAgggAigCAGpNBEAgAkEENgIQDAILIAJBATYCBANAIAIoAgQgAigCAE0EQCACKAIMIAIoAgggAigCBGpqLQAAQcABcUGAAUcEQCACQQQ2AhAMBgUgAiACKAIEQQFqNgIEDAILAAsLIAIgAigCACACKAIIajYCCAsgAiACKAIIQQFqNgIIDAELCwsgAigCGCACKAIQNgIIIAIoAhQEQAJAIAIoAhRBAkcNACACKAIQQQNHDQAgAkECNgIQIAIoAhhBAjYCCAsCQCACKAIUIAIoAhBGDQAgAigCEEEBRg0AIAJBBTYCHAwCCwsgAiACKAIQNgIcCyACKAIcC2oBAX8jAEEQayIBIAA2AgwgASgCDEIANwMAIAEoAgxBADYCCCABKAIMQn83AxAgASgCDEEANgIsIAEoAgxBfzYCKCABKAIMQgA3AxggASgCDEIANwMgIAEoAgxBADsBMCABKAIMQQA7ATILUgECf0GQlwEoAgAiASAAQQNqQXxxIgJqIQACQCACQQAgACABTRsNACAAPwBBEHRLBEAgABATRQ0BC0GQlwEgADYCACABDwtBtJsBQTA2AgBBfwuNBQEDfyMAQRBrIgEkACABIAA2AgwgASgCDARAIAEoAgwoAgAEQCABKAIMKAIAEDEaIAEoAgwoAgAQGwsgASgCDCgCHBAVIAEoAgwoAiAQJSABKAIMKAIkECUgASgCDCgCUCECIwBBEGsiACQAIAAgAjYCDCAAKAIMBEAgACgCDCgCEARAIABBADYCCANAIAAoAgggACgCDCgCAEkEQCAAKAIMKAIQIAAoAghBAnRqKAIABEAgACgCDCgCECAAKAIIQQJ0aigCACEDIwBBEGsiAiQAIAIgAzYCDANAIAIoAgwEQCACIAIoAgwoAhg2AgggAigCDBAVIAIgAigCCDYCDAwBCwsgAkEQaiQACyAAIAAoAghBAWo2AggMAQsLIAAoAgwoAhAQFQsgACgCDBAVCyAAQRBqJAAgASgCDCgCQARAIAFCADcDAANAIAEpAwAgASgCDCkDMFQEQCABKAIMKAJAIAEpAwCnQQR0ahBiIAEgASkDAEIBfDcDAAwBCwsgASgCDCgCQBAVCyABQgA3AwADQCABKQMAIAEoAgwoAkStVARAIAEoAgwoAkwgASkDAKdBAnRqKAIAIQIjAEEQayIAJAAgACACNgIMIAAoAgxBAToAKAJ/IwBBEGsiAiAAKAIMQQxqNgIMIAIoAgwoAgBFCwRAIAAoAgxBDGpBCEEAEBQLIABBEGokACABIAEpAwBCAXw3AwAMAQsLIAEoAgwoAkwQFSABKAIMKAJUIQIjAEEQayIAJAAgACACNgIMIAAoAgwEQCAAKAIMKAIIBEAgACgCDCgCDCAAKAIMKAIIEQIACyAAKAIMEBULIABBEGokACABKAIMQQhqEDcgASgCDBAVCyABQRBqJAALjw4BAX8jAEEQayIDJAAgAyAANgIMIAMgATYCCCADIAI2AgQgAygCCCEBIAMoAgQhAiMAQSBrIgAgAygCDDYCGCAAIAE2AhQgACACNgIQIAAgACgCGEEQdjYCDCAAIAAoAhhB//8DcTYCGAJAIAAoAhBBAUYEQCAAIAAoAhQtAAAgACgCGGo2AhggACgCGEHx/wNPBEAgACAAKAIYQfH/A2s2AhgLIAAgACgCGCAAKAIMajYCDCAAKAIMQfH/A08EQCAAIAAoAgxB8f8DazYCDAsgACAAKAIYIAAoAgxBEHRyNgIcDAELIAAoAhRFBEAgAEEBNgIcDAELIAAoAhBBEEkEQANAIAAgACgCECIBQQFrNgIQIAEEQCAAIAAoAhQiAUEBajYCFCAAIAEtAAAgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMDAELCyAAKAIYQfH/A08EQCAAIAAoAhhB8f8DazYCGAsgACAAKAIMQfH/A3A2AgwgACAAKAIYIAAoAgxBEHRyNgIcDAELA0AgACgCEEGwK08EQCAAIAAoAhBBsCtrNgIQIABB2wI2AggDQCAAIAAoAhQtAAAgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AASAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQACIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAMgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAFIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAYgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AByAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAIIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAkgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQALIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAwgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAOIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA8gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFEEQajYCFCAAIAAoAghBAWsiATYCCCABDQALIAAgACgCGEHx/wNwNgIYIAAgACgCDEHx/wNwNgIMDAELCyAAKAIQBEADQCAAKAIQQRBPBEAgACAAKAIQQRBrNgIQIAAgACgCFC0AACAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQABIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAIgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AAyAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAEIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAUgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAHIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAggACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAKIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAsgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQANIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA4gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADyAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIUQRBqNgIUDAELCwNAIAAgACgCECIBQQFrNgIQIAEEQCAAIAAoAhQiAUEBajYCFCAAIAEtAAAgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMDAELCyAAIAAoAhhB8f8DcDYCGCAAIAAoAgxB8f8DcDYCDAsgACAAKAIYIAAoAgxBEHRyNgIcCyAAKAIcIQAgA0EQaiQAIAALhAEBAX8jAEEQayIBJAAgASAANgIIIAFB2AAQGCIANgIEAkAgAEUEQCABQQA2AgwMAQsCQCABKAIIBEAgASgCBCABKAIIQdgAEBkaDAELIAEoAgQQTwsgASgCBEEANgIAIAEoAgRBAToABSABIAEoAgQ2AgwLIAEoAgwhACABQRBqJAAgAAtvAQF/IwBBIGsiAyQAIAMgADYCGCADIAE2AhQgAyACNgIQIAMgAygCGCADKAIQrRAeNgIMAkAgAygCDEUEQCADQX82AhwMAQsgAygCDCADKAIUIAMoAhAQGRogA0EANgIcCyADKAIcGiADQSBqJAALogEBAX8jAEEgayIEJAAgBCAANgIYIAQgATcDECAEIAI2AgwgBCADNgIIIAQgBCgCDCAEKQMQECkiADYCBAJAIABFBEAgBCgCCEEOQQAQFCAEQQA2AhwMAQsgBCgCGCAEKAIEKAIEIAQpAxAgBCgCCBBhQQBIBEAgBCgCBBAWIARBADYCHAwBCyAEIAQoAgQ2AhwLIAQoAhwhACAEQSBqJAAgAAugAQEBfyMAQSBrIgMkACADIAA2AhQgAyABNgIQIAMgAjcDCCADIAMoAhA2AgQCQCADKQMIQghUBEAgA0J/NwMYDAELIwBBEGsiACADKAIUNgIMIAAoAgwoAgAhACADKAIEIAA2AgAjAEEQayIAIAMoAhQ2AgwgACgCDCgCBCEAIAMoAgQgADYCBCADQgg3AxgLIAMpAxghAiADQSBqJAAgAgs/AQF/IwBBEGsiAiAANgIMIAIgATYCCCACKAIMBEAgAigCDCACKAIIKAIANgIAIAIoAgwgAigCCCgCBDYCBAsLgwECA38BfgJAIABCgICAgBBUBEAgACEFDAELA0AgAUEBayIBIAAgAEIKgCIFQgp+fadBMHI6AAAgAEL/////nwFWIQIgBSEAIAINAAsLIAWnIgIEQANAIAFBAWsiASACIAJBCm4iA0EKbGtBMHI6AAAgAkEJSyEEIAMhAiAEDQALCyABC7wCAQF/IwBBIGsiBCQAIAQgADYCGCAEIAE3AxAgBCACNgIMIAQgAzYCCCAEKAIIRQRAIAQgBCgCGEEIajYCCAsCQCAEKQMQIAQoAhgpAzBaBEAgBCgCCEESQQAQFCAEQQA2AhwMAQsCQCAEKAIMQQhxRQRAIAQoAhgoAkAgBCkDEKdBBHRqKAIEDQELIAQoAhgoAkAgBCkDEKdBBHRqKAIARQRAIAQoAghBEkEAEBQgBEEANgIcDAILAkAgBCgCGCgCQCAEKQMQp0EEdGotAAxBAXFFDQAgBCgCDEEIcQ0AIAQoAghBF0EAEBQgBEEANgIcDAILIAQgBCgCGCgCQCAEKQMQp0EEdGooAgA2AhwMAQsgBCAEKAIYKAJAIAQpAxCnQQR0aigCBDYCHAsgBCgCHCEAIARBIGokACAAC9kIAQJ/IwBBIGsiBCQAIAQgADYCGCAEIAE2AhQgBCACNgIQIAQgAzYCDAJAIAQoAhhFBEAgBCgCFARAIAQoAhRBADYCAAsgBEGQ2QA2AhwMAQsgBCgCEEHAAHFFBEAgBCgCGCgCCEUEQCAEKAIYQQAQOhoLAkACQAJAIAQoAhBBgAFxRQ0AIAQoAhgoAghBAUYNACAEKAIYKAIIQQJHDQELIAQoAhgoAghBBEcNAQsgBCgCGCgCDEUEQCAEKAIYKAIAIQEgBCgCGC8BBCECIAQoAhhBEGohAyAEKAIMIQUjAEEwayIAJAAgACABNgIoIAAgAjYCJCAAIAM2AiAgACAFNgIcIAAgACgCKDYCGAJAIAAoAiRFBEAgACgCIARAIAAoAiBBADYCAAsgAEEANgIsDAELIABBATYCECAAQQA2AgwDQCAAKAIMIAAoAiRJBEAjAEEQayIBIAAoAhggACgCDGotAABBAXRBkNUAai8BADYCCAJAIAEoAghBgAFJBEAgAUEBNgIMDAELIAEoAghBgBBJBEAgAUECNgIMDAELIAEoAghBgIAESQRAIAFBAzYCDAwBCyABQQQ2AgwLIAAgASgCDCAAKAIQajYCECAAIAAoAgxBAWo2AgwMAQsLIAAgACgCEBAYIgE2AhQgAUUEQCAAKAIcQQ5BABAUIABBADYCLAwBCyAAQQA2AgggAEEANgIMA0AgACgCDCAAKAIkSQRAIAAoAhQgACgCCGohAiMAQRBrIgEgACgCGCAAKAIMai0AAEEBdEGQ1QBqLwEANgIIIAEgAjYCBAJAIAEoAghBgAFJBEAgASgCBCABKAIIOgAAIAFBATYCDAwBCyABKAIIQYAQSQRAIAEoAgQgASgCCEEGdkEfcUHAAXI6AAAgASgCBCABKAIIQT9xQYABcjoAASABQQI2AgwMAQsgASgCCEGAgARJBEAgASgCBCABKAIIQQx2QQ9xQeABcjoAACABKAIEIAEoAghBBnZBP3FBgAFyOgABIAEoAgQgASgCCEE/cUGAAXI6AAIgAUEDNgIMDAELIAEoAgQgASgCCEESdkEHcUHwAXI6AAAgASgCBCABKAIIQQx2QT9xQYABcjoAASABKAIEIAEoAghBBnZBP3FBgAFyOgACIAEoAgQgASgCCEE/cUGAAXI6AAMgAUEENgIMCyAAIAEoAgwgACgCCGo2AgggACAAKAIMQQFqNgIMDAELCyAAKAIUIAAoAhBBAWtqQQA6AAAgACgCIARAIAAoAiAgACgCEEEBazYCAAsgACAAKAIUNgIsCyAAKAIsIQEgAEEwaiQAIAEhACAEKAIYIAA2AgwgAEUEQCAEQQA2AhwMBAsLIAQoAhQEQCAEKAIUIAQoAhgoAhA2AgALIAQgBCgCGCgCDDYCHAwCCwsgBCgCFARAIAQoAhQgBCgCGC8BBDYCAAsgBCAEKAIYKAIANgIcCyAEKAIcIQAgBEEgaiQAIAALOQEBfyMAQRBrIgEgADYCDEEAIQAgASgCDC0AAEEBcQR/IAEoAgwpAxAgASgCDCkDCFEFQQALQQFxC5wIAQt/IABFBEAgARAYDwsgAUFATwRAQbSbAUEwNgIAQQAPCwJ/QRAgAUELakF4cSABQQtJGyEGIABBCGsiBSgCBCIJQXhxIQQCQCAJQQNxRQRAQQAgBkGAAkkNAhogBkEEaiAETQRAIAUhAiAEIAZrQZifASgCAEEBdE0NAgtBAAwCCyAEIAVqIQcCQCAEIAZPBEAgBCAGayIDQRBJDQEgBSAJQQFxIAZyQQJyNgIEIAUgBmoiAiADQQNyNgIEIAcgBygCBEEBcjYCBCACIAMQrAEMAQsgB0HQmwEoAgBGBEBBxJsBKAIAIARqIgQgBk0NAiAFIAlBAXEgBnJBAnI2AgQgBSAGaiIDIAQgBmsiAkEBcjYCBEHEmwEgAjYCAEHQmwEgAzYCAAwBCyAHQcybASgCAEYEQEHAmwEoAgAgBGoiAyAGSQ0CAkAgAyAGayICQRBPBEAgBSAJQQFxIAZyQQJyNgIEIAUgBmoiBCACQQFyNgIEIAMgBWoiAyACNgIAIAMgAygCBEF+cTYCBAwBCyAFIAlBAXEgA3JBAnI2AgQgAyAFaiICIAIoAgRBAXI2AgRBACECQQAhBAtBzJsBIAQ2AgBBwJsBIAI2AgAMAQsgBygCBCIDQQJxDQEgA0F4cSAEaiIKIAZJDQEgCiAGayEMAkAgA0H/AU0EQCAHKAIIIgQgA0EDdiICQQN0QeCbAWpGGiAEIAcoAgwiA0YEQEG4mwFBuJsBKAIAQX4gAndxNgIADAILIAQgAzYCDCADIAQ2AggMAQsgBygCGCELAkAgByAHKAIMIghHBEAgBygCCCICQcibASgCAEkaIAIgCDYCDCAIIAI2AggMAQsCQCAHQRRqIgQoAgAiAg0AIAdBEGoiBCgCACICDQBBACEIDAELA0AgBCEDIAIiCEEUaiIEKAIAIgINACAIQRBqIQQgCCgCECICDQALIANBADYCAAsgC0UNAAJAIAcgBygCHCIDQQJ0QeidAWoiAigCAEYEQCACIAg2AgAgCA0BQbybAUG8mwEoAgBBfiADd3E2AgAMAgsgC0EQQRQgCygCECAHRhtqIAg2AgAgCEUNAQsgCCALNgIYIAcoAhAiAgRAIAggAjYCECACIAg2AhgLIAcoAhQiAkUNACAIIAI2AhQgAiAINgIYCyAMQQ9NBEAgBSAJQQFxIApyQQJyNgIEIAUgCmoiAiACKAIEQQFyNgIEDAELIAUgCUEBcSAGckECcjYCBCAFIAZqIgMgDEEDcjYCBCAFIApqIgIgAigCBEEBcjYCBCADIAwQrAELIAUhAgsgAgsiAgRAIAJBCGoPCyABEBgiBUUEQEEADwsgBSAAQXxBeCAAQQRrKAIAIgJBA3EbIAJBeHFqIgIgASABIAJLGxAZGiAAEBUgBQvvAgEBfyMAQRBrIgEkACABIAA2AggCQCABKAIILQAoQQFxBEAgAUF/NgIMDAELIAEoAggoAiRBA0YEQCABKAIIQQxqQRdBABAUIAFBfzYCDAwBCwJAIAEoAggoAiAEQAJ/IwBBEGsiACABKAIINgIMIAAoAgwpAxhCwACDUAsEQCABKAIIQQxqQR1BABAUIAFBfzYCDAwDCwwBCyABKAIIKAIABEAgASgCCCgCABBJQQBIBEAgASgCCEEMaiABKAIIKAIAEBcgAUF/NgIMDAMLCyABKAIIQQBCAEEAECFCAFMEQCABKAIIKAIABEAgASgCCCgCABAxGgsgAUF/NgIMDAILCyABKAIIQQA6ADQgASgCCEEAOgA1IwBBEGsiACABKAIIQQxqNgIMIAAoAgwEQCAAKAIMQQA2AgAgACgCDEEANgIECyABKAIIIgAgACgCIEEBajYCICABQQA2AgwLIAEoAgwhACABQRBqJAAgAAt1AgF/AX4jAEEQayIBJAAgASAANgIEAkAgASgCBC0AKEEBcQRAIAFCfzcDCAwBCyABKAIEKAIgRQRAIAEoAgRBDGpBEkEAEBQgAUJ/NwMIDAELIAEgASgCBEEAQgBBBxAhNwMICyABKQMIIQIgAUEQaiQAIAILnQEBAX8jAEEQayIBIAA2AggCQAJAAkAgASgCCEUNACABKAIIKAIgRQ0AIAEoAggoAiQNAQsgAUEBNgIMDAELIAEgASgCCCgCHDYCBAJAAkAgASgCBEUNACABKAIEKAIAIAEoAghHDQAgASgCBCgCBEG0/gBJDQAgASgCBCgCBEHT/gBNDQELIAFBATYCDAwBCyABQQA2AgwLIAEoAgwLgAEBA38jAEEQayICIAA2AgwgAiABNgIIIAIoAghBCHYhASACKAIMKAIIIQMgAigCDCIEKAIUIQAgBCAAQQFqNgIUIAAgA2ogAToAACACKAIIQf8BcSEBIAIoAgwoAgghAyACKAIMIgIoAhQhACACIABBAWo2AhQgACADaiABOgAAC5kFAQF/IwBBQGoiBCQAIAQgADYCOCAEIAE3AzAgBCACNgIsIAQgAzYCKCAEQcgAEBgiADYCJAJAIABFBEAgBEEANgI8DAELIAQoAiRCADcDOCAEKAIkQgA3AxggBCgCJEIANwMwIAQoAiRBADYCACAEKAIkQQA2AgQgBCgCJEIANwMIIAQoAiRCADcDECAEKAIkQQA2AiggBCgCJEIANwMgAkAgBCkDMFAEQEEIEBghACAEKAIkIAA2AgQgAEUEQCAEKAIkEBUgBCgCKEEOQQAQFCAEQQA2AjwMAwsgBCgCJCgCBEIANwMADAELIAQoAiQgBCkDMEEAEMEBQQFxRQRAIAQoAihBDkEAEBQgBCgCJBAzIARBADYCPAwCCyAEQgA3AwggBEIANwMYIARCADcDEANAIAQpAxggBCkDMFQEQCAEKAI4IAQpAxinQQR0aikDCFBFBEAgBCgCOCAEKQMYp0EEdGooAgBFBEAgBCgCKEESQQAQFCAEKAIkEDMgBEEANgI8DAULIAQoAiQoAgAgBCkDEKdBBHRqIAQoAjggBCkDGKdBBHRqKAIANgIAIAQoAiQoAgAgBCkDEKdBBHRqIAQoAjggBCkDGKdBBHRqKQMINwMIIAQoAiQoAgQgBCkDGKdBA3RqIAQpAwg3AwAgBCAEKAI4IAQpAxinQQR0aikDCCAEKQMIfDcDCCAEIAQpAxBCAXw3AxALIAQgBCkDGEIBfDcDGAwBCwsgBCgCJCAEKQMQNwMIIAQoAiQgBCgCLAR+QgAFIAQoAiQpAwgLNwMYIAQoAiQoAgQgBCgCJCkDCKdBA3RqIAQpAwg3AwAgBCgCJCAEKQMINwMwCyAEIAQoAiQ2AjwLIAQoAjwhACAEQUBrJAAgAAueAQEBfyMAQSBrIgQkACAEIAA2AhggBCABNwMQIAQgAjYCDCAEIAM2AgggBCAEKAIYIAQpAxAgBCgCDCAEKAIIEEUiADYCBAJAIABFBEAgBEEANgIcDAELIAQgBCgCBCgCMEEAIAQoAgwgBCgCCBBGIgA2AgAgAEUEQCAEQQA2AhwMAQsgBCAEKAIANgIcCyAEKAIcIQAgBEEgaiQAIAAL8QEBAX8jAEEQayIBIAA2AgwgASgCDEEANgIAIAEoAgxBADoABCABKAIMQQA6AAUgASgCDEEBOgAGIAEoAgxBvwY7AQggASgCDEEKOwEKIAEoAgxBADsBDCABKAIMQX82AhAgASgCDEEANgIUIAEoAgxBADYCGCABKAIMQgA3AyAgASgCDEIANwMoIAEoAgxBADYCMCABKAIMQQA2AjQgASgCDEEANgI4IAEoAgxBADYCPCABKAIMQQA7AUAgASgCDEGAgNiNeDYCRCABKAIMQgA3A0ggASgCDEEAOwFQIAEoAgxBADsBUiABKAIMQQA2AlQL0hMBAX8jAEGwAWsiAyQAIAMgADYCqAEgAyABNgKkASADIAI2AqABIANBADYCkAEgAyADKAKkASgCMEEAEDo2ApQBIAMgAygCpAEoAjhBABA6NgKYAQJAAkACQAJAIAMoApQBQQJGBEAgAygCmAFBAUYNAQsgAygClAFBAUYEQCADKAKYAUECRg0BCyADKAKUAUECRw0BIAMoApgBQQJHDQELIAMoAqQBIgAgAC8BDEGAEHI7AQwMAQsgAygCpAEiACAALwEMQf/vA3E7AQwgAygClAFBAkYEQCADQfXgASADKAKkASgCMCADKAKoAUEIahCCATYCkAEgAygCkAFFBEAgA0F/NgKsAQwDCwsCQCADKAKgAUGAAnENACADKAKYAUECRw0AIANB9cYBIAMoAqQBKAI4IAMoAqgBQQhqEIIBNgJIIAMoAkhFBEAgAygCkAEQIyADQX82AqwBDAMLIAMoAkggAygCkAE2AgAgAyADKAJINgKQAQsLAkAgAygCpAEvAVJFBEAgAygCpAEiACAALwEMQf7/A3E7AQwMAQsgAygCpAEiACAALwEMQQFyOwEMCyADIAMoAqQBIAMoAqABEF5BAXE6AIYBIAMgAygCoAFBgApxQYAKRwR/IAMtAIYBBUEBC0EBcToAhwEgAwJ/QQEgAygCpAEvAVJBgQJGDQAaQQEgAygCpAEvAVJBggJGDQAaIAMoAqQBLwFSQYMCRgtBAXE6AIUBIAMtAIcBQQFxBEAgAyADQSBqQhwQKTYCHCADKAIcRQRAIAMoAqgBQQhqQQ5BABAUIAMoApABECMgA0F/NgKsAQwCCwJAIAMoAqABQYACcQRAAkAgAygCoAFBgAhxDQAgAygCpAEpAyBC/////w9WDQAgAygCpAEpAyhC/////w9YDQILIAMoAhwgAygCpAEpAygQLSADKAIcIAMoAqQBKQMgEC0MAQsCQAJAIAMoAqABQYAIcQ0AIAMoAqQBKQMgQv////8PVg0AIAMoAqQBKQMoQv////8PVg0AIAMoAqQBKQNIQv////8PWA0BCyADKAKkASkDKEL/////D1oEQCADKAIcIAMoAqQBKQMoEC0LIAMoAqQBKQMgQv////8PWgRAIAMoAhwgAygCpAEpAyAQLQsgAygCpAEpA0hC/////w9aBEAgAygCHCADKAKkASkDSBAtCwsLAn8jAEEQayIAIAMoAhw2AgwgACgCDC0AAEEBcUULBEAgAygCqAFBCGpBFEEAEBQgAygCHBAWIAMoApABECMgA0F/NgKsAQwCCyADQQECfyMAQRBrIgAgAygCHDYCDAJ+IAAoAgwtAABBAXEEQCAAKAIMKQMQDAELQgALp0H//wNxCyADQSBqQYAGEFE2AowBIAMoAhwQFiADKAKMASADKAKQATYCACADIAMoAowBNgKQAQsgAy0AhQFBAXEEQCADIANBFWpCBxApNgIQIAMoAhBFBEAgAygCqAFBCGpBDkEAEBQgAygCkAEQIyADQX82AqwBDAILIAMoAhBBAhAfIAMoAhBBvRJBAhBAIAMoAhAgAygCpAEvAVJB/wFxEI4BIAMoAhAgAygCpAEoAhBB//8DcRAfAn8jAEEQayIAIAMoAhA2AgwgACgCDC0AAEEBcUULBEAgAygCqAFBCGpBFEEAEBQgAygCEBAWIAMoApABECMgA0F/NgKsAQwCCyADQYGyAkEHIANBFWpBgAYQUTYCDCADKAIQEBYgAygCDCADKAKQATYCACADIAMoAgw2ApABCyADIANB0ABqQi4QKSIANgJMIABFBEAgAygCqAFBCGpBDkEAEBQgAygCkAEQIyADQX82AqwBDAELIAMoAkxB8RJB9hIgAygCoAFBgAJxG0EEEEAgAygCoAFBgAJxRQRAIAMoAkwgAy0AhgFBAXEEf0EtBSADKAKkAS8BCAtB//8DcRAfCyADKAJMIAMtAIYBQQFxBH9BLQUgAygCpAEvAQoLQf//A3EQHyADKAJMIAMoAqQBLwEMEB8CQCADLQCFAUEBcQRAIAMoAkxB4wAQHwwBCyADKAJMIAMoAqQBKAIQQf//A3EQHwsgAygCpAEoAhQgA0GeAWogA0GcAWoQgQEgAygCTCADLwGeARAfIAMoAkwgAy8BnAEQHwJAAkAgAy0AhQFBAXFFDQAgAygCpAEpAyhCFFoNACADKAJMQQAQIAwBCyADKAJMIAMoAqQBKAIYECALAkACQCADKAKgAUGAAnFBgAJHDQAgAygCpAEpAyBC/////w9UBEAgAygCpAEpAyhC/////w9UDQELIAMoAkxBfxAgIAMoAkxBfxAgDAELAkAgAygCpAEpAyBC/////w9UBEAgAygCTCADKAKkASkDIKcQIAwBCyADKAJMQX8QIAsCQCADKAKkASkDKEL/////D1QEQCADKAJMIAMoAqQBKQMopxAgDAELIAMoAkxBfxAgCwsgAygCTCADKAKkASgCMBBTQf//A3EQHyADIAMoAqQBKAI0IAMoAqABEIYBQf//A3EgAygCkAFBgAYQhgFB//8DcWo2AogBIAMoAkwgAygCiAFB//8DcRAfIAMoAqABQYACcUUEQCADKAJMIAMoAqQBKAI4EFNB//8DcRAfIAMoAkwgAygCpAEoAjxB//8DcRAfIAMoAkwgAygCpAEvAUAQHyADKAJMIAMoAqQBKAJEECACQCADKAKkASkDSEL/////D1QEQCADKAJMIAMoAqQBKQNIpxAgDAELIAMoAkxBfxAgCwsCfyMAQRBrIgAgAygCTDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAJMEBYgAygCkAEQIyADQX82AqwBDAELIAMoAqgBIANB0ABqAn4jAEEQayIAIAMoAkw2AgwCfiAAKAIMLQAAQQFxBEAgACgCDCkDEAwBC0IACwsQNUEASARAIAMoAkwQFiADKAKQARAjIANBfzYCrAEMAQsgAygCTBAWIAMoAqQBKAIwBEAgAygCqAEgAygCpAEoAjAQigFBAEgEQCADKAKQARAjIANBfzYCrAEMAgsLIAMoApABBEAgAygCqAEgAygCkAFBgAYQhQFBAEgEQCADKAKQARAjIANBfzYCrAEMAgsLIAMoApABECMgAygCpAEoAjQEQCADKAKoASADKAKkASgCNCADKAKgARCFAUEASARAIANBfzYCrAEMAgsLIAMoAqABQYACcUUEQCADKAKkASgCOARAIAMoAqgBIAMoAqQBKAI4EIoB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HCAAIAAoAhRBAWo2AhQMAQsLIAAoAggQR0EBcUUEQCAAKAIgQRRBABAUIAAoAggQFiAAQX82AiwMAQsgACgCCBAWIAAgACgCHDYCLAsgACgCLCECIABBMGokACADIAIiADYCBCAAQQBIBEAgA0IANwMoDAELIAMpAwggAygCBK18Qv///////////wBWBEAgAygCFEEEQRYQFCADQgA3AygMAQsgAyADKQMIIAMoAgStfDcDKAsgAykDKCEBIANBMGokACABC20BAX8jAEEgayIEJAAgBCAANgIYIAQgATYCFCAEIAI2AhAgBCADNgIMAkAgBCgCGEUEQCAEQQA2AhwMAQsgBCAEKAIUIAQoAhAgBCgCDCAEKAIYQQhqEJIBNgIcCyAEKAIcIQAgBEEgaiQAIAALVQEBfyMAQRBrIgEkACABIAA2AgwCQAJAIAEoAgwoAiRBAUYNACABKAIMKAIkQQJGDQAMAQsgASgCDEEAQgBBChAhGiABKAIMQQA2AiQLIAFBEGokAAumAQEBfyMAQRBrIgIkACACIAA2AgggAiABNgIEAkAgAigCCC0AKEEBcQRAIAJBfzYCDAwBCyACKAIIKAIABEAgAigCCCgCACACKAIEEGhBAEgEQCACKAIIQQxqIAIoAggoAgAQFyACQX82AgwMAgsLIAIoAgggAkEEakIEQRMQIUIAUwRAIAJBfzYCDAwBCyACQQA2AgwLIAIoAgwhACACQRBqJAAgAAuNCAIBfwF+IwBBkAFrIgMkACADIAA2AoQBIAMgATYCgAEgAyACNgJ8IAMQTwJAIAMoAoABKQMIQgBSBEAgAyADKAKAASgCACgCACkDSDcDYCADIAMoAoABKAIAKAIAKQNINwNoDAELIANCADcDYCADQgA3A2gLIANCADcDcAJAA0AgAykDcCADKAKAASkDCFQEQCADKAKAASgCACADKQNwp0EEdGooAgApA0ggAykDaFQEQCADIAMoAoABKAIAIAMpA3CnQQR0aigCACkDSDcDaAsgAykDaCADKAKAASkDIFYEQCADKAJ8QRNBABAUIANCfzcDiAEMAwsgAyADKAKAASgCACADKQNwp0EEdGooAgApA0ggAygCgAEoAgAgAykDcKdBBHRqKAIAKQMgfCADKAKAASgCACADKQNwp0EEdGooAgAoAjAQU0H//wNxrXxCHnw3A1ggAykDWCADKQNgVgRAIAMgAykDWDcDYAsgAykDYCADKAKAASkDIFYEQCADKAJ8QRNBABAUIANCfzcDiAEMAwsgAygChAEoAgAgAygCgAEoAgAgAykDcKdBBHRqKAIAKQNIQQAQJ0EASARAIAMoAnwgAygChAEoAgAQFyADQn83A4gBDAMLIAMgAygChAEoAgBBAEEBIAMoAnwQxgFCf1EEQCADEF0gA0J/NwOIAQwDCwJ/IAMoAoABKAIAIAMpA3CnQQR0aigCACEBIwBBEGsiACQAIAAgATYCCCAAIAM2AgQCQAJAAkAgACgCCC8BCiAAKAIELwEKSA0AIAAoAggoAhAgACgCBCgCEEcNACAAKAIIKAIUIAAoAgQoAhRHDQAgACgCCCgCMCAAKAIEKAIwEIsBDQELIABBfzYCDAwBCwJAAkAgACgCCCgCGCAAKAIEKAIYRw0AIAAoAggpAyAgACgCBCkDIFINACAAKAIIKQMoIAAoAgQpAyhRDQELAkACQCAAKAIELwEMQQhxRQ0AIAAoAgQoAhgNACAAKAIEKQMgQgBSDQAgACgCBCkDKFANAQsgAEF/NgIMDAILCyAAQQA2AgwLIAAoAgwhASAAQRBqJAAgAQsEQCADKAJ8QRVBABAUIAMQXSADQn83A4gBDAMFIAMoAoABKAIAIAMpA3CnQQR0aigCACgCNCADKAI0EIkBIQAgAygCgAEoAgAgAykDcKdBBHRqKAIAIAA2AjQgAygCgAEoAgAgAykDcKdBBHRqKAIAQQE6AAQgA0EANgI0IAMQXSADIAMpA3BCAXw3A3AMAgsACwsgAwJ+IAMpA2AgAykDaH1C////////////AFQEQCADKQNgIAMpA2h9DAELQv///////////wALNwOIAQsgAykDiAEhBCADQZABaiQAIAQL1AQBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAygCECEBIwBBEGsiACQAIAAgATYCCCAAQdgAEBg2AgQCQCAAKAIERQRAIAAoAghBDkEAEBQgAEEANgIMDAELIAAoAgghAiMAQRBrIgEkACABIAI2AgggAUEYEBgiAjYCBAJAIAJFBEAgASgCCEEOQQAQFCABQQA2AgwMAQsgASgCBEEANgIAIAEoAgRCADcDCCABKAIEQQA2AhAgASABKAIENgIMCyABKAIMIQIgAUEQaiQAIAAoAgQgAjYCUCACRQRAIAAoAgQQFSAAQQA2AgwMAQsgACgCBEEANgIAIAAoAgRBADYCBCMAQRBrIgEgACgCBEEIajYCDCABKAIMQQA2AgAgASgCDEEANgIEIAEoAgxBADYCCCAAKAIEQQA2AhggACgCBEEANgIUIAAoAgRBADYCHCAAKAIEQQA2AiQgACgCBEEANgIgIAAoAgRBADoAKCAAKAIEQgA3AzggACgCBEIANwMwIAAoAgRBADYCQCAAKAIEQQA2AkggACgCBEEANgJEIAAoAgRBADYCTCAAKAIEQQA2AlQgACAAKAIENgIMCyAAKAIMIQEgAEEQaiQAIAMgASIANgIMAkAgAEUEQCADQQA2AhwMAQsgAygCDCADKAIYNgIAIAMoAgwgAygCFDYCBCADKAIUQRBxBEAgAygCDCIAIAAoAhRBAnI2AhQgAygCDCIAIAAoAhhBAnI2AhgLIAMgAygCDDYCHAsgAygCHCEAIANBIGokACAAC9UBAQF/IwBBIGsiBCQAIAQgADYCGCAEIAE3AxAgBCACNgIMIAQgAzYCCAJAAkAgBCkDEEL///////////8AVwRAIAQpAxBCgICAgICAgICAf1kNAQsgBCgCCEEEQT0QFCAEQX82AhwMAQsCfyAEKQMQIQEgBCgCDCEAIAQoAhgiAigCTEF/TARAIAIgASAAEKABDAELIAIgASAAEKABC0EASARAIAQoAghBBEG0mwEoAgAQFCAEQX82AhwMAQsgBEEANgIcCyAEKAIcIQAgBEEgaiQAIAALJABBACAAEAUiACAAQRtGGyIABH9BtJsBIAA2AgBBAAVBAAsaC3ABAX8jAEEQayIDJAAgAwJ/IAFBwABxRQRAQQAgAUGAgIQCcUGAgIQCRw0BGgsgAyACQQRqNgIMIAIoAgALNgIAIAAgAUGAgAJyIAMQECIAQYFgTwRAQbSbAUEAIABrNgIAQX8hAAsgA0EQaiQAIAALMwEBfwJ/IAAQByIBQWFGBEAgABARIQELIAFBgWBPCwR/QbSbAUEAIAFrNgIAQX8FIAELC2kBAn8CQCAAKAIUIAAoAhxNDQAgAEEAQQAgACgCJBEBABogACgCFA0AQX8PCyAAKAIEIgEgACgCCCICSQRAIAAgASACa6xBASAAKAIoEQ8AGgsgAEEANgIcIABCADcDECAAQgA3AgRBAAvaAwEGfyMAQRBrIgUkACAFIAI2AgwjAEGgAWsiBCQAIARBCGpBkIcBQZABEBkaIAQgADYCNCAEIAA2AhwgBEF+IABrIgNB/////wcgA0H/////B0kbIgY2AjggBCAAIAZqIgA2AiQgBCAANgIYIARBCGohACMAQdABayIDJAAgAyACNgLMASADQaABakEAQSgQMiADIAMoAswBNgLIAQJAQQAgASADQcgBaiADQdAAaiADQaABahBxQQBIDQAgACgCTEEATiEHIAAoAgAhAiAALABKQQBMBEAgACACQV9xNgIACyACQSBxIQgCfyAAKAIwBEAgACABIANByAFqIANB0ABqIANBoAFqEHEMAQsgAEHQADYCMCAAIANB0ABqNgIQIAAgAzYCHCAAIAM2AhQgACgCLCECIAAgAzYCLCAAIAEgA0HIAWogA0HQAGogA0GgAWoQcSACRQ0AGiAAQQBBACAAKAIkEQEAGiAAQQA2AjAgACACNgIsIABBADYCHCAAQQA2AhAgACgCFBogAEEANgIUQQALGiAAIAAoAgAgCHI2AgAgB0UNAAsgA0HQAWokACAGBEAgBCgCHCIAIAAgBCgCGEZrQQA6AAALIARBoAFqJAAgBUEQaiQAC4wSAg9/AX4jAEHQAGsiBSQAIAUgATYCTCAFQTdqIRMgBUE4aiEQQQAhAQNAAkAgDUEASA0AQf////8HIA1rIAFIBEBBtJsBQT02AgBBfyENDAELIAEgDWohDQsgBSgCTCIHIQECQAJAAkACQAJAAkACQAJAIAUCfwJAIActAAAiBgRAA0ACQAJAIAZB/wFxIgZFBEAgASEGDAELIAZBJUcNASABIQYDQCABLQABQSVHDQEgBSABQQJqIgg2AkwgBkEBaiEGIAEtAAIhDiAIIQEgDkElRg0ACwsgBiAHayEBIAAEQCAAIAcgARAiCyABDQ0gBSgCTCEBIAUoAkwsAAFBMGtBCk8NAyABLQACQSRHDQMgASwAAUEwayEPQQEhESABQQNqDAQLIAUgAUEBaiIINgJMIAEtAAEhBiAIIQEMAAsACyANIQsgAA0IIBFFDQJBASEBA0AgBCABQQJ0aigCACIABEAgAyABQQN0aiAAIAIQqAFBASELIAFBAWoiAUEKRw0BDAoLC0EBIQsgAUEKTw0IA0AgBCABQQJ0aigCAA0IIAFBAWoiAUEKRw0ACwwIC0F/IQ8gAUEBagsiATYCTEEAIQgCQCABLAAAIgxBIGsiBkEfSw0AQQEgBnQiBkGJ0QRxRQ0AA0ACQCAFIAFBAWoiCDYCTCABLAABIgxBIGsiAUEgTw0AQQEgAXQiAUGJ0QRxRQ0AIAEgBnIhBiAIIQEMAQsLIAghASAGIQgLAkAgDEEqRgRAIAUCfwJAIAEsAAFBMGtBCk8NACAFKAJMIgEtAAJBJEcNACABLAABQQJ0IARqQcABa0EKNgIAIAEsAAFBA3QgA2pBgANrKAIAIQpBASERIAFBA2oMAQsgEQ0IQQAhEUEAIQogAARAIAIgAigCACIBQQRqNgIAIAEoAgAhCgsgBSgCTEEBagsiATYCTCAKQX9KDQFBACAKayEKIAhBgMAAciEIDAELIAVBzABqEKcBIgpBAEgNBiAFKAJMIQELQX8hCQJAIAEtAABBLkcNACABLQABQSpGBEACQCABLAACQTBrQQpPDQAgBSgCTCIBLQADQSRHDQAgASwAAkECdCAEakHAAWtBCjYCACABLAACQQN0IANqQYADaygCACEJIAUgAUEEaiIBNgJMDAILIBENByAABH8gAiACKAIAIgFBBGo2AgAgASgCAAVBAAshCSAFIAUoAkxBAmoiATYCTAwBCyAFIAFBAWo2AkwgBUHMAGoQpwEhCSAFKAJMIQELQQAhBgNAIAYhEkF/IQsgASwAAEHBAGtBOUsNByAFIAFBAWoiDDYCTCABLAAAIQYgDCEBIAYgEkE6bGpB74IBai0AACIGQQFrQQhJDQALIAZBE0YNAiAGRQ0GIA9BAE4EQCAEIA9BAnRqIAY2AgAgBSADIA9BA3RqKQMANwNADAQLIAANAQtBACELDAULIAVBQGsgBiACEKgBIAUoAkwhDAwCCyAPQX9KDQMLQQAhASAARQ0ECyAIQf//e3EiDiAIIAhBgMAAcRshBkEAIQtBpAghDyAQIQgCQAJAAkACfwJAAkACQAJAAn8CQAJAAkACQAJAAkACQCAMQQFrLAAAIgFBX3EgASABQQ9xQQNGGyABIBIbIgFB2ABrDiEEEhISEhISEhIOEg8GDg4OEgYSEhISAgUDEhIJEgESEgQACwJAIAFBwQBrDgcOEgsSDg4OAAsgAUHTAEYNCQwRCyAFKQNAIRRBpAgMBQtBACEBAkACQAJAAkACQAJAAkAgEkH/AXEOCAABAgMEFwUGFwsgBSgCQCANNgIADBYLIAUoAkAgDTYCAAwVCyAFKAJAIA2sNwMADBQLIAUoAkAgDTsBAAwTCyAFKAJAIA06AAAMEgsgBSgCQCANNgIADBELIAUoAkAgDaw3AwAMEAsgCUEIIAlBCEsbIQkgBkEIciEGQfgAIQELIBAhByABQSBxIQ4gBSkDQCIUUEUEQANAIAdBAWsiByAUp0EPcUGAhwFqLQAAIA5yOgAAIBRCD1YhDCAUQgSIIRQgDA0ACwsgBSkDQFANAyAGQQhxRQ0DIAFBBHZBpAhqIQ9BAiELDAMLIBAhASAFKQNAIhRQRQRAA0AgAUEBayIBIBSnQQdxQTByOgAAIBRCB1YhByAUQgOIIRQgBw0ACwsgASEHIAZBCHFFDQIgCSAQIAdrIgFBAWogASAJSBshCQwCCyAFKQNAIhRCf1cEQCAFQgAgFH0iFDcDQEEBIQtBpAgMAQsgBkGAEHEEQEEBIQtBpQgMAQtBpghBpAggBkEBcSILGwshDyAUIBAQRCEHCyAGQf//e3EgBiAJQX9KGyEGAkAgBSkDQCIUQgBSDQAgCQ0AQQAhCSAQIQcMCgsgCSAUUCAQIAdraiIBIAEgCUgbIQkMCQsgBSgCQCIBQdgSIAEbIgdBACAJEKsBIgEgByAJaiABGyEIIA4hBiABIAdrIAkgARshCQwICyAJBEAgBSgCQAwCC0EAIQEgAEEgIApBACAGECYMAgsgBUEANgIMIAUgBSkDQD4CCCAFIAVBCGo2AkBBfyEJIAVBCGoLIQhBACEBAkADQCAIKAIAIgdFDQECQCAFQQRqIAcQqgEiB0EASCIODQAgByAJIAFrSw0AIAhBBGohCCAJIAEgB2oiAUsNAQwCCwtBfyELIA4NBQsgAEEgIAogASAGECYgAUUEQEEAIQEMAQtBACEIIAUoAkAhDANAIAwoAgAiB0UNASAFQQRqIAcQqgEiByAIaiIIIAFKDQEgACAFQQRqIAcQIiAMQQRqIQwgASAISw0ACwsgAEEgIAogASAGQYDAAHMQJiAKIAEgASAKSBshAQwFCyAAIAUrA0AgCiAJIAYgAUEXERkAIQEMBAsgBSAFKQNAPAA3QQEhCSATIQcgDiEGDAILQX8hCwsgBUHQAGokACALDwsgAEEgIAsgCCAHayIOIAkgCSAOSBsiDGoiCCAKIAggCkobIgEgCCAGECYgACAPIAsQIiAAQTAgASAIIAZBgIAEcxAmIABBMCAMIA5BABAmIAAgByAOECIgAEEgIAEgCCAGQYDAAHMQJgwACwALkAIBA38CQCABIAIoAhAiBAR/IAQFQQAhBAJ/IAIgAi0ASiIDQQFrIANyOgBKIAIoAgAiA0EIcQRAIAIgA0EgcjYCAEF/DAELIAJCADcCBCACIAIoAiwiAzYCHCACIAM2AhQgAiADIAIoAjBqNgIQQQALDQEgAigCEAsgAigCFCIFa0sEQCACIAAgASACKAIkEQEADwsCfyACLABLQX9KBEAgASEEA0AgASAEIgNFDQIaIAAgA0EBayIEai0AAEEKRw0ACyACIAAgAyACKAIkEQEAIgQgA0kNAiAAIANqIQAgAigCFCEFIAEgA2sMAQsgAQshBCAFIAAgBBAZGiACIAIoAhQgBGo2AhQgASEECyAEC0gCAX8BfiMAQRBrIgMkACADIAA2AgwgAyABNgIIIAMgAjYCBCADKAIMIAMoAgggAygCBCADKAIMQQhqEFchBCADQRBqJAAgBAt3AQF/IwBBEGsiASAANgIIIAFChSo3AwACQCABKAIIRQRAIAFBADYCDAwBCwNAIAEoAggtAAAEQCABIAEoAggtAACtIAEpAwBCIX58Qv////8PgzcDACABIAEoAghBAWo2AggMAQsLIAEgASkDAD4CDAsgASgCDAuHBQEBfyMAQTBrIgUkACAFIAA2AiggBSABNgIkIAUgAjcDGCAFIAM2AhQgBSAENgIQAkACQAJAIAUoAihFDQAgBSgCJEUNACAFKQMYQv///////////wBYDQELIAUoAhBBEkEAEBQgBUEAOgAvDAELIAUoAigoAgBFBEAgBSgCKEGAAiAFKAIQEFlBAXFFBEAgBUEAOgAvDAILCyAFIAUoAiQQdDYCDCAFIAUoAgwgBSgCKCgCAHA2AgggBSAFKAIoKAIQIAUoAghBAnRqKAIANgIEA0ACQCAFKAIERQ0AAkAgBSgCBCgCHCAFKAIMRw0AIAUoAiQgBSgCBCgCABBaDQACQAJAIAUoAhRBCHEEQCAFKAIEKQMIQn9SDQELIAUoAgQpAxBCf1ENAQsgBSgCEEEKQQAQFCAFQQA6AC8MBAsMAQsgBSAFKAIEKAIYNgIEDAELCyAFKAIERQRAIAVBIBAYIgA2AgQgAEUEQCAFKAIQQQ5BABAUIAVBADoALwwCCyAFKAIEIAUoAiQ2AgAgBSgCBCAFKAIoKAIQIAUoAghBAnRqKAIANgIYIAUoAigoAhAgBSgCCEECdGogBSgCBDYCACAFKAIEIAUoAgw2AhwgBSgCBEJ/NwMIIAUoAigiACAAKQMIQgF8NwMIAkAgBSgCKCIAKQMIuiAAKAIAuEQAAAAAAADoP6JkRQ0AIAUoAigoAgBBgICAgHhPDQAgBSgCKCAFKAIoKAIAQQF0IAUoAhAQWUEBcUUEQCAFQQA6AC8MAwsLCyAFKAIUQQhxBEAgBSgCBCAFKQMYNwMICyAFKAIEIAUpAxg3AxAgBUEBOgAvCyAFLQAvQQFxIQAgBUEwaiQAIAALWQIBfwF+AkACf0EAIABFDQAaIACtIAGtfiIDpyICIAAgAXJBgIAESQ0AGkF/IAIgA0IgiKcbCyICEBgiAEUNACAAQQRrLQAAQQNxRQ0AIABBACACEDILIAAL1BEBAX8jAEGwAWsiBiQAIAYgADYCqAEgBiABNgKkASAGIAI2AqABIAYgAzYCnAEgBiAENgKYASAGIAU2ApQBIAZBADYCkAEDQCAGKAKQAUEPS0UEQCAGQSBqIAYoApABQQF0akEAOwEAIAYgBigCkAFBAWo2ApABDAELCyAGQQA2AowBA0AgBigCjAEgBigCoAFPRQRAIAZBIGogBigCpAEgBigCjAFBAXRqLwEAQQF0aiIAIAAvAQBBAWo7AQAgBiAGKAKMAUEBajYCjAEMAQsLIAYgBigCmAEoAgA2AoABIAZBDzYChAEDQAJAIAYoAoQBQQFJDQAgBkEgaiAGKAKEAUEBdGovAQANACAGIAYoAoQBQQFrNgKEAQwBCwsgBigCgAEgBigChAFLBEAgBiAGKAKEATYCgAELAkAgBigChAFFBEAgBkHAADoAWCAGQQE6AFkgBkEAOwFaIAYoApwBIgEoAgAhACABIABBBGo2AgAgACAGQdgAaigBADYBACAGKAKcASIBKAIAIQAgASAAQQRqNgIAIAAgBkHYAGooAQA2AQAgBigCmAFBATYCACAGQQA2AqwBDAELIAZBATYCiAEDQAJAIAYoAogBIAYoAoQBTw0AIAZBIGogBigCiAFBAXRqLwEADQAgBiAGKAKIAUEBajYCiAEMAQsLIAYoAoABIAYoAogBSQRAIAYgBigCiAE2AoABCyAGQQE2AnQgBkEBNgKQAQNAIAYoApABQQ9NBEAgBiAGKAJ0QQF0NgJ0IAYgBigCdCAGQSBqIAYoApABQQF0ai8BAGs2AnQgBigCdEEASARAIAZBfzYCrAEMAwUgBiAGKAKQAUEBajYCkAEMAgsACwsCQCAGKAJ0QQBMDQAgBigCqAEEQCAGKAKEAUEBRg0BCyAGQX82AqwBDAELIAZBADsBAiAGQQE2ApABA0AgBigCkAFBD09FBEAgBigCkAFBAWpBAXQgBmogBigCkAFBAXQgBmovAQAgBkEgaiAGKAKQAUEBdGovAQBqOwEAIAYgBigCkAFBAWo2ApABDAELCyAGQQA2AowBA0AgBigCjAEgBigCoAFJBEAgBigCpAEgBigCjAFBAXRqLwEABEAgBigClAEhASAGKAKkASAGKAKMASICQQF0ai8BAEEBdCAGaiIDLwEAIQAgAyAAQQFqOwEAIABB//8DcUEBdCABaiACOwEACyAGIAYoAowBQQFqNgKMAQwBCwsCQAJAAkACQCAGKAKoAQ4CAAECCyAGIAYoApQBIgA2AkwgBiAANgJQIAZBFDYCSAwCCyAGQYDwADYCUCAGQcDwADYCTCAGQYECNgJIDAELIAZBgPEANgJQIAZBwPEANgJMIAZBADYCSAsgBkEANgJsIAZBADYCjAEgBiAGKAKIATYCkAEgBiAGKAKcASgCADYCVCAGIAYoAoABNgJ8IAZBADYCeCAGQX82AmAgBkEBIAYoAoABdDYCcCAGIAYoAnBBAWs2AlwCQAJAIAYoAqgBQQFGBEAgBigCcEHUBksNAQsgBigCqAFBAkcNASAGKAJwQdAETQ0BCyAGQQE2AqwBDAELA0AgBiAGKAKQASAGKAJ4azoAWQJAIAYoAkggBigClAEgBigCjAFBAXRqLwEAQQFqSwRAIAZBADoAWCAGIAYoApQBIAYoAowBQQF0ai8BADsBWgwBCwJAIAYoApQBIAYoAowBQQF0ai8BACAGKAJITwRAIAYgBigCTCAGKAKUASAGKAKMAUEBdGovAQAgBigCSGtBAXRqLwEAOgBYIAYgBigCUCAGKAKUASAGKAKMAUEBdGovAQAgBigCSGtBAXRqLwEAOwFaDAELIAZB4AA6AFggBkEAOwFaCwsgBkEBIAYoApABIAYoAnhrdDYCaCAGQQEgBigCfHQ2AmQgBiAGKAJkNgKIAQNAIAYgBigCZCAGKAJoazYCZCAGKAJUIAYoAmQgBigCbCAGKAJ4dmpBAnRqIAZB2ABqKAEANgEAIAYoAmQNAAsgBkEBIAYoApABQQFrdDYCaANAIAYoAmwgBigCaHEEQCAGIAYoAmhBAXY2AmgMAQsLAkAgBigCaARAIAYgBigCbCAGKAJoQQFrcTYCbCAGIAYoAmggBigCbGo2AmwMAQsgBkEANgJsCyAGIAYoAowBQQFqNgKMASAGQSBqIAYoApABQQF0aiIBLwEAQQFrIQAgASAAOwEAAkAgAEH//wNxRQRAIAYoApABIAYoAoQBRg0BIAYgBigCpAEgBigClAEgBigCjAFBAXRqLwEAQQF0ai8BADYCkAELAkAgBigCkAEgBigCgAFNDQAgBigCYCAGKAJsIAYoAlxxRg0AIAYoAnhFBEAgBiAGKAKAATYCeAsgBiAGKAJUIAYoAogBQQJ0ajYCVCAGIAYoApABIAYoAnhrNgJ8IAZBASAGKAJ8dDYCdANAAkAgBigChAEgBigCfCAGKAJ4ak0NACAGIAYoAnQgBkEgaiAGKAJ8IAYoAnhqQQF0ai8BAGs2AnQgBigCdEEATA0AIAYgBigCfEEBajYCfCAGIAYoAnRBAXQ2AnQMAQsLIAYgBigCcEEBIAYoAnx0ajYCcAJAAkAgBigCqAFBAUYEQCAGKAJwQdQGSw0BCyAGKAKoAUECRw0BIAYoAnBB0ARNDQELIAZBATYCrAEMBAsgBiAGKAJsIAYoAlxxNgJgIAYoApwBKAIAIAYoAmBBAnRqIAYoAnw6AAAgBigCnAEoAgAgBigCYEECdGogBigCgAE6AAEgBigCnAEoAgAgBigCYEECdGogBigCVCAGKAKcASgCAGtBAnU7AQILDAELCyAGKAJsBEAgBkHAADoAWCAGIAYoApABIAYoAnhrOgBZIAZBADsBWiAGKAJUIAYoAmxBAnRqIAZB2ABqKAEANgEACyAGKAKcASIAIAAoAgAgBigCcEECdGo2AgAgBigCmAEgBigCgAE2AgAgBkEANgKsAQsgBigCrAEhACAGQbABaiQAIAALsQIBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAyADKAIYKAIENgIMIAMoAgwgAygCEEsEQCADIAMoAhA2AgwLAkAgAygCDEUEQCADQQA2AhwMAQsgAygCGCIAIAAoAgQgAygCDGs2AgQgAygCFCADKAIYKAIAIAMoAgwQGRoCQCADKAIYKAIcKAIYQQFGBEAgAygCGCgCMCADKAIUIAMoAgwQPiEAIAMoAhggADYCMAwBCyADKAIYKAIcKAIYQQJGBEAgAygCGCgCMCADKAIUIAMoAgwQGiEAIAMoAhggADYCMAsLIAMoAhgiACADKAIMIAAoAgBqNgIAIAMoAhgiACADKAIMIAAoAghqNgIIIAMgAygCDDYCHAsgAygCHCEAIANBIGokACAAC+0BAQF/IwBBEGsiASAANgIIAkACQAJAIAEoAghFDQAgASgCCCgCIEUNACABKAIIKAIkDQELIAFBATYCDAwBCyABIAEoAggoAhw2AgQCQAJAIAEoAgRFDQAgASgCBCgCACABKAIIRw0AIAEoAgQoAgRBKkYNASABKAIEKAIEQTlGDQEgASgCBCgCBEHFAEYNASABKAIEKAIEQckARg0BIAEoAgQoAgRB2wBGDQEgASgCBCgCBEHnAEYNASABKAIEKAIEQfEARg0BIAEoAgQoAgRBmgVGDQELIAFBATYCDAwBCyABQQA2AgwLIAEoAgwL0gQBAX8jAEEgayIDIAA2AhwgAyABNgIYIAMgAjYCFCADIAMoAhxB3BZqIAMoAhRBAnRqKAIANgIQIAMgAygCFEEBdDYCDANAAkAgAygCDCADKAIcKALQKEoNAAJAIAMoAgwgAygCHCgC0ChODQAgAygCGCADKAIcIAMoAgxBAnRqQeAWaigCAEECdGovAQAgAygCGCADKAIcQdwWaiADKAIMQQJ0aigCAEECdGovAQBOBEAgAygCGCADKAIcIAMoAgxBAnRqQeAWaigCAEECdGovAQAgAygCGCADKAIcQdwWaiADKAIMQQJ0aigCAEECdGovAQBHDQEgAygCHCADKAIMQQJ0akHgFmooAgAgAygCHEHYKGpqLQAAIAMoAhxB3BZqIAMoAgxBAnRqKAIAIAMoAhxB2Chqai0AAEoNAQsgAyADKAIMQQFqNgIMCyADKAIYIAMoAhBBAnRqLwEAIAMoAhggAygCHEHcFmogAygCDEECdGooAgBBAnRqLwEASA0AAkAgAygCGCADKAIQQQJ0ai8BACADKAIYIAMoAhxB3BZqIAMoAgxBAnRqKAIAQQJ0ai8BAEcNACADKAIQIAMoAhxB2Chqai0AACADKAIcQdwWaiADKAIMQQJ0aigCACADKAIcQdgoamotAABKDQAMAQsgAygCHEHcFmogAygCFEECdGogAygCHEHcFmogAygCDEECdGooAgA2AgAgAyADKAIMNgIUIAMgAygCDEEBdDYCDAwBCwsgAygCHEHcFmogAygCFEECdGogAygCEDYCAAvXEwEDfyMAQTBrIgIkACACIAA2AiwgAiABNgIoIAIgAigCKCgCADYCJCACIAIoAigoAggoAgA2AiAgAiACKAIoKAIIKAIMNgIcIAJBfzYCECACKAIsQQA2AtAoIAIoAixBvQQ2AtQoIAJBADYCGANAIAIoAhggAigCHEgEQAJAIAIoAiQgAigCGEECdGovAQAEQCACIAIoAhgiATYCECACKAIsQdwWaiEDIAIoAiwiBCgC0ChBAWohACAEIAA2AtAoIABBAnQgA2ogATYCACACKAIYIAIoAixB2ChqakEAOgAADAELIAIoAiQgAigCGEECdGpBADsBAgsgAiACKAIYQQFqNgIYDAELCwNAIAIoAiwoAtAoQQJIBEACQCACKAIQQQJIBEAgAiACKAIQQQFqIgA2AhAMAQtBACEACyACKAIsQdwWaiEDIAIoAiwiBCgC0ChBAWohASAEIAE2AtAoIAFBAnQgA2ogADYCACACIAA2AgwgAigCJCACKAIMQQJ0akEBOwEAIAIoAgwgAigCLEHYKGpqQQA6AAAgAigCLCIAIAAoAqgtQQFrNgKoLSACKAIgBEAgAigCLCIAIAAoAqwtIAIoAiAgAigCDEECdGovAQJrNgKsLQsMAQsLIAIoAiggAigCEDYCBCACIAIoAiwoAtAoQQJtNgIYA0AgAigCGEEBTgRAIAIoAiwgAigCJCACKAIYEHogAiACKAIYQQFrNgIYDAELCyACIAIoAhw2AgwDQCACIAIoAiwoAuAWNgIYIAIoAixB3BZqIQEgAigCLCIDKALQKCEAIAMgAEEBazYC0CggAigCLCAAQQJ0IAFqKAIANgLgFiACKAIsIAIoAiRBARB6IAIgAigCLCgC4BY2AhQgAigCGCEBIAIoAixB3BZqIQMgAigCLCIEKALUKEEBayEAIAQgADYC1CggAEECdCADaiABNgIAIAIoAhQhASACKAIsQdwWaiEDIAIoAiwiBCgC1ChBAWshACAEIAA2AtQoIABBAnQgA2ogATYCACACKAIkIAIoAgxBAnRqIAIoAiQgAigCGEECdGovAQAgAigCJCACKAIUQQJ0ai8BAGo7AQAgAigCDCACKAIsQdgoamoCfyACKAIYIAIoAixB2Chqai0AACACKAIUIAIoAixB2Chqai0AAE4EQCACKAIYIAIoAixB2Chqai0AAAwBCyACKAIUIAIoAixB2Chqai0AAAtBAWo6AAAgAigCJCACKAIUQQJ0aiACKAIMIgA7AQIgAigCJCACKAIYQQJ0aiAAOwECIAIgAigCDCIAQQFqNgIMIAIoAiwgADYC4BYgAigCLCACKAIkQQEQeiACKAIsKALQKEECTg0ACyACKAIsKALgFiEBIAIoAixB3BZqIQMgAigCLCIEKALUKEEBayEAIAQgADYC1CggAEECdCADaiABNgIAIAIoAighASMAQUBqIgAgAigCLDYCPCAAIAE2AjggACAAKAI4KAIANgI0IAAgACgCOCgCBDYCMCAAIAAoAjgoAggoAgA2AiwgACAAKAI4KAIIKAIENgIoIAAgACgCOCgCCCgCCDYCJCAAIAAoAjgoAggoAhA2AiAgAEEANgIEIABBADYCEANAIAAoAhBBD0wEQCAAKAI8QbwWaiAAKAIQQQF0akEAOwEAIAAgACgCEEEBajYCEAwBCwsgACgCNCAAKAI8QdwWaiAAKAI8KALUKEECdGooAgBBAnRqQQA7AQIgACAAKAI8KALUKEEBajYCHANAIAAoAhxBvQRIBEAgACAAKAI8QdwWaiAAKAIcQQJ0aigCADYCGCAAIAAoAjQgACgCNCAAKAIYQQJ0ai8BAkECdGovAQJBAWo2AhAgACgCECAAKAIgSgRAIAAgACgCIDYCECAAIAAoAgRBAWo2AgQLIAAoAjQgACgCGEECdGogACgCEDsBAiAAKAIYIAAoAjBMBEAgACgCPCAAKAIQQQF0akG8FmoiASABLwEAQQFqOwEAIABBADYCDCAAKAIYIAAoAiROBEAgACAAKAIoIAAoAhggACgCJGtBAnRqKAIANgIMCyAAIAAoAjQgACgCGEECdGovAQA7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EANAIAMpAxAgAykDCFpFBEAgAygCKCgCACADKQMQp0EEdGoQkAEgAyADKQMQQgF8NwMQDAELCyADKAIoIAMpAwgiATcDECADKAIoIAE3AwggA0EBOgAvCyADLQAvQQFxIQAgA0EwaiQAIAALzAEBAX8jAEEgayICJAAgAiAANwMQIAIgATYCDCACQTAQGCIBNgIIAkAgAUUEQCACKAIMQQ5BABAUIAJBADYCHAwBCyACKAIIQQA2AgAgAigCCEIANwMQIAIoAghCADcDCCACKAIIQgA3AyAgAigCCEIANwMYIAIoAghBADYCKCACKAIIQQA6ACwgAigCCCACKQMQIAIoAgwQgwFBAXFFBEAgAigCCBAkIAJBADYCHAwBCyACIAIoAgg2AhwLIAIoAhwhASACQSBqJAAgAQvWAgEBfyMAQSBrIgMkACADIAA2AhggAyABNgIUIAMgAjYCECADIANBDGpCBBApNgIIAkAgAygCCEUEQCADQX82AhwMAQsDQCADKAIUBEAgAygCFCgCBCADKAIQcUGABnEEQCADKAIIQgAQLBogAygCCCADKAIULwEIEB8gAygCCCADKAIULwEKEB8CfyMAQRBrIgAgAygCCDYCDCAAKAIMLQAAQQFxRQsEQCADKAIYQQhqQRRBABAUIAMoAggQFiADQX82AhwMBAsgAygCGCADQQxqQgQQNUEASARAIAMoAggQFiADQX82AhwMBAsgAygCFC8BCgRAIAMoAhggAygCFCgCDCADKAIULwEKrRA1QQBIBEAgAygCCBAWIANBfzYCHAwFCwsLIAMgAygCFCgCADYCFAwBCwsgAygCCBAWIANBADYCHAsgAygCHCEAIANBIGokACAAC2gBAX8jAEEQayICIAA2AgwgAiABNgIIIAJBADsBBgNAIAIoAgwEQCACKAIMKAIEIAIoAghxQYAGcQRAIAIgAigCDC8BCiACLwEGQQRqajsBBgsgAiACKAIMKAIANgIMDAELCyACLwEGC/ABAQF/IwBBEGsiASQAIAEgADYCDCABIAEoAgw2AgggAUEANgIEA0AgASgCDARAAkACQCABKAIMLwEIQfXGAUYNACABKAIMLwEIQfXgAUYNACABKAIMLwEIQYGyAkYNACABKAIMLwEIQQFHDQELIAEgASgCDCgCADYCACABKAIIIAEoAgxGBEAg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IAEpA4ABIAEpAzB8IAEpA5gBIAEpAzh8VgRAIAEoApABQRVBABAUIAFBADYCrAEMAQsCQCABKAKUAUEEcUUNACABKQOAASABKQMwfCABKQOYASABKQM4fFENACABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEpAyggASkDMEIugFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEgASkDKCABKAKQARCEASIFNgKMASAFRQRAIAFBADYCrAEMAQsgASgCjAFBAToALCABKAKMASABKQMwNwMYIAEoAowBIAEpA4ABNwMgIAEgASgCjAE2AqwBCyABKAKsASEFIAFBsAFqJAAgACAFNgJQDAELIAAoAmQgACkDMBAsGiAAKAJkIQUgACkDWCEJIAAoAmgoAhQhBiAAKAJUIQcjAEHQAGsiASQAIAEgBTYCSCABIAk3A0AgASAGNgI8IAEgBzYCOAJAIAEoAkgQL0IWVARAIAEoAjhBFUEAEBQgAUEANgJMDAELIwBBEGsiBSABKAJINgIMIAECfiAFKAIMLQAAQQFxBEAgBSgCDCkDEAwBC0IACzcDCCABKAJIQgQQHhogASgCSBAqBEAgASgCOEEBQQAQFCABQQA2AkwMAQsgASABKAJIEB1B//8Dca03AyggASABKAJIEB1B//8Dca03AyAgASkDICABKQMoUgRAIAEoAjhBE0EAEBQgAUEANgJMDAELIAEgASgCSBAqrTcDGCABIAEoAkgQKq03AxAgASkDECABKQMQIAEpAxh8VgRAIAEoAjhBBEEWEBQgAUEANgJMDAELIAEpAxAgASkDGHwgASkDQCABKQMIfFYEQCABKAI4QRVBABAUIAFBADYCTAwBCwJAIAEoAjxBBHFFDQAgASkDECABKQMYfCABKQNAIAEpAwh8UQ0AIAEoAjhBFUEAEBQgAUEANgJMDAELIAEgASkDICABKAI4EIQBIgU2AjQgBUUEQCABQQA2AkwMAQsgASgCNEEAOgAsIAEoAjQgASkDGDcDGCABKAI0IAEpAxA3AyAgASABKAI0NgJMCyABKAJMIQUgAUHQAGokACAAIAU2AlALIAAoAlBFBEAgAEEANgJsDAELIAAoAmQgACkDMEIUfBAsGiAAIAAoAmQQHTsBTiAAKAJQKQMgIAAoAlApAxh8IAApA1ggACkDMHxWBEAg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IAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEGCAms2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEEBayIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C5IQAQF/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQgAgJ/IAIoAigoAiwgAigCKCgCDEEFa0kEQCACKAIoKAIsDAELIAIoAigoAgxBBWsLNgIgIAJBADYCECACIAIoAigoAgAoAgQ2AgwDQAJAIAJB//8DNgIcIAIgAigCKCgCvC1BKmpBA3U2AhQgAigCKCgCACgCECACKAIUSQ0AIAIgAigCKCgCACgCECACKAIUazYCFCACIAIoAigoAmwgAigCKCgCXGs2AhggAigCHCACKAIYIAIoAigoAgAoAgRqSwRAIAIgAigCGCACKAIoKAIAKAIEajYCHAsgAigCHCACKAIUSwRAIAIgAigCFDYCHAsCQCACKAIcIAIoAiBPDQACQCACKAIcRQRAIAIoAiRBBEcNAQsgAigCJEUNACACKAIcIAIoAhggAigCKCgCACgCBGpGDQELDAELQQAhACACIAIoAiRBBEYEfyACKAIcIAIoAhggAigCKCgCACgCBGpGBUEAC0EBcTYCECACKAIoQQBBACACKAIQEFwgAigCKCgCCCACKAIoKAIUQQRraiACKAIcOgAAIAIoAigoAgggAigCKCgCFEEDa2ogAigCHEEIdjoAACACKAIoKAIIIAIoAigoAhRBAmtqIAIoAhxBf3M6AAAgAigCKCgCCCACKAIoKAIUQQFraiACKAIcQX9zQQh2OgAAIAIoAigoAgAQHCACKAIYBEAgAigCGCACKAIcSwRAIAIgAigCHDYCGAsgAigCKCgCACgCDCACKAIoKAI4IAIoAigoAlxqIAIoAhgQGRogAigCKCgCACIAIAIoAhggACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCGGs2AhAgAigCKCgCACIAIAIoAhggACgCFGo2AhQgAigCKCIAIAIoAhggACgCXGo2AlwgAiACKAIcIAIoAhhrNgIcCyACKAIcBEAgAigCKCgCACACKAIoKAIAKAIMIAIoAhwQeBogAigCKCgCACIAIAIoAhwgACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCHGs2AhAgAigCKCgCACIAIAIoAhwgACgCFGo2AhQLIAIoAhBFDQELCyACIAIoAgwgAigCKCgCACgCBGs2AgwgAigCDARAAkAgAigCDCACKAIoKAIsTwRAIAIoAihBAjYCsC0gAigCKCgCOCACKAIoKAIAKAIAIAIoAigoAixrIAIoAigoAiwQGRogAigCKCACKAIoKAIsNgJsDAELIAIoAgwgAigCKCgCPCACKAIoKAJsa08EQCACKAIoIgAgACgCbCACKAIoKAIsazYCbCACKAIoKAI4IAIoAigoAjggAigCKCgCLGogAigCKCgCbBAZGiACKAIoKAKwLUECSQRAIAIoAigiACAAKAKwLUEBajYCsC0LCyACKAIoKAI4IAIoAigoAmxqIAIoAigoAgAoAgAgAigCDGsgAigCDBAZGiACKAIoIgAgAigCDCAAKAJsajYCbAsgAigCKCACKAIoKAJsNgJcIAIoAigiAQJ/IAIoAgwgAigCKCgCLCACKAIoKAK0LWtLBEAgAigCKCgCLCACKAIoKAK0LWsMAQsgAigCDAsgASgCtC1qNgK0LQsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCwJAIAIoAhAEQCACQQM2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mwFCADcDAEGYmwFCADcDAEGQmwFCADcDAEGImwFCADcDAEGAmwFCADcDAEH4mgFCADcDAEHwmgFCADcDAEHwmgEL1QQBBX8jAEGwAWsiASQAIAEgADYCqAEgASgCqAEQNwJAAkAgASgCqAEoAgBBAE4EQCABKAKoASgCAEGAFCgCAEgNAQsgASABKAKoASgCADYCECABQSBqQY8SIAFBEGoQcCABQQA2AqQBIAEgAUEgajYCoAEMAQsgASABKAKoASgCAEECdEGAE2ooAgA2AqQBAkACQAJAAkAgASgCqAEoAgBBAnRBkBRqKAIAQQFrDgIAAQILIAEoAqgBKAIEIQJBkJkBKAIAIQRBACEAAkACQANAIAIgAEGgiAFqLQAARwRAQdcAIQMgAEEBaiIAQdcARw0BDAILCyAAIgMNAEGAiQEhAgwBC0GAiQEhAANAIAAtAAAhBSAAQQFqIgIhACAFDQAgAiEAIANBAWsiAw0ACwsgBCgCFBogASACNgKgAQwCCyMAQRBrIgAgASgCqAEoAgQ2AgwgAUEAIAAoAgxrQQJ0QajZAGooAgA2AqABDAELIAFBADYCoAELCwJAIAEoAqABRQRAIAEgASgCpAE2AqwBDAELIAEgASgCoAEQKwJ/IAEoAqQBBEAgASgCpAEQK0ECagwBC0EAC2pBAWoQGCIANgIcIABFBEAgAUG4EygCADYCrAEMAQsgASgCHCEAAn8gASgCpAEEQCABKAKkAQwBC0H6EgshA0HfEkH6EiABKAKkARshAiABIAEoAqABNgIIIAEgAjYCBCABIAM2AgAgAEG+CiABEHAgASgCqAEgASgCHDYCCCABIAEoAhw2AqwBCyABKAKsASEAIAFBsAFqJAAgAAszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQGRogACAAKAIUIAFqNgIUIAILjwUCBn4BfyABIAEoAgBBD2pBcHEiAUEQajYCACAAAnwgASkDACEDIAEpAwghBiMAQSBrIggkAAJAIAZC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBkIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAiFQgBSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBkIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIAQZH3AEkNACADIQIgBkL///////8/g0KAgICAgIDAAIQiBSEHAkAgAEGB9wBrIgFBwABxBEAgAiABQUBqrYYhB0IAIQIMAQsgAUUNACAHIAGtIgSGIAJBwAAgAWutiIQhByACIASGIQILIAggAjcDECAIIAc3AxgCQEGB+AAgAGsiAEHAAHEEQCAFIABBQGqtiCEDQgAhBQwBCyAARQ0AIAVBwAAgAGuthiADIACtIgKIhCEDIAUgAoghBQsgCCADNwMAIAggBTcDCCAIKQMIQgSGIAgpAwAiA0I8iIQhAiAIKQMQIAgpAxiEQgBSrSADQv//////////D4OEIgNCgYCAgICAgIAIWgRAIAJCAXwhAgwBCyADQoCAgICAgICACIVCAFINACACQgGDIAJ8IQILIAhBIGokACACIAZCgICAgICAgICAf4OEvws5AwALrRcDEn8CfgF8IwBBsARrIgkkACAJQQA2AiwCQCABvSIYQn9XBEBBASESQa4IIRMgAZoiAb0hGAwBCyAEQYAQcQRAQQEhEkGxCCETDAELQbQIQa8IIARBAXEiEhshEyASRSEXCwJAIBhCgICAgICAgPj/AINCgICAgICAgPj/AFEEQCAAQSAgAiASQQNqIg0gBEH//3txECYgACATIBIQIiAAQeQLQbUSIAVBIHEiAxtBjw1BuRIgAxsgASABYhtBAxAiDAELIAlBEGohEAJAAn8CQCABIAlBLGoQqQEiASABoCIBRAAAAAAAAAAAYgRAIAkgCSgCLCIGQQFrNgIsIAVBIHIiFEHhAEcNAQwDCyAFQSByIhRB4QBGDQIgCSgCLCELQQYgAyADQQBIGwwBCyAJIAZBHWsiCzYCLCABRAAAAAAAALBBoiEBQQYgAyADQQBIGwshCiAJQTBqIAlB0AJqIAtBAEgbIg4hBwNAIAcCfyABRAAAAAAAAPBBYyABRAAAAAAAAAAAZnEEQCABqwwBC0EACyIDNgIAIAdBBGohByABIAO4oUQA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HCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCGCABKAIUSQtBAXENAAsgASgCKEGCAiABKAIUIAEoAhhrazYCYCABKAIoKAJgIAEoAigoAnRLBEAgASgCKCABKAIoKAJ0NgJgCwsLAkAgASgCKCgCYEEDTwRAIAEgASgCKCgCYEEDazoAEyABQQE7ARAgASgCKCICKAKkLSACKAKgLUEBdGogAS8BEDsBACABLQATIQMgASgCKCICKAKYLSEEIAIgAigCoC0iAkEBajYCoC0gAiAEaiADOgAAIAEgAS8BEEEBazsBECABKAIoIAEtABNB0N0Aai0AAEECdGpBmAlqIgIgAi8BAEEBajsBACABKAIoQYgTagJ/IAEvARBBgAJJBEAgAS8BEC0A0FkMAQsgAS8BEEEHdkGAAmotANBZC0ECdGoiAiACLwEAQQFqOwEAIAEgASgCKCgCoC0gASgCKCgCnC1BAWtGNgIgIAEoAigiAiACKAJ0IAEoAigoAmBrNgJ0IAEoAigiAiABKAIoKAJgIAIoAmxqNgJsIAEoAihBADYCYAwBCyABIAEoAigiAigCOCACKAJsai0AADoADyABKAIoIgIoAqQtIAIoAqAtQQF0akEAOwEAIAEtAA8hAyABKAIoIgIoApgtIQQgAiACKAKgLSICQQFqNgKgLSACIARqIAM6AAAgASgCKCABLQAPQQJ0aiICIAIvAZQBQQFqOwGUASABIAEoAigoAqAtIAEoAigoApwtQQFrRjYCICABKAIoIgIgAigCdEEBazYCdCABKAIoIgIgAigCbEEBajYCbAsgASgCIARAIAEoAigCfyABKAIoKAJcQQBOBEAgASgCKCgCOCABKAIoKAJcagwBC0EACyABKAIoKAJsIAEoAigoAlxrQQAQKCABKAIoIAEoAigoAmw2AlwgASgCKCgCABAcIAEoAigo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QCABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiQgASgCLCABKAIccUECdGooAQA2ARACQAJAA0AgASABLQARNgIMIAEgASgCLCABKAIMdjYCLCABIAEoAiggASgCDGs2AiggASABLQAQNgIMIAEoAgxFBEAgAS8BEiECIAEgASgCSCIDQQFqNgJIIAMgAjoAAAwCCyABKAIMQRBxBEAgASABLwESNgIIIAEgASgCDEEPcTYCDCABKAIMBEAgASgCKCABKAIMSQRAIAEgASgCUCICQQFqNgJQIAEgASgCLCACLQAAIAEoAih0ajYCLCABIAEoAihBCGo2AigLIAEgASgCCCABKAIsQQEgASgCDHRBAWtxajYCCCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoCyABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiAgASgCLCABKAIYcUECdGooAQA2ARACQANAIAEgAS0AETYCDCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgAS0AEDYCDCABKAIMQRBxBEAgASABLwESNgIEIAEgASgCDEEPcTYCDCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKAsLIAEgASgCBCABKAIsQQEgASgCDHRBAWtxajYCBCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgASgCSCABKAJEazYCDAJAIAEoAgQgASgCDEsEQCABIAEoAgQgASgCDGs2AgwgASgCDCABKAI4SwRAIAEoAlQoAsQ3BEAgASgCXEHdDDYCGCABKAJUQdH+ADYCBAwKCwsgASABKAIwNgIAAkAgASgCNEUEQCABIAEoAgAgASgCPCABKAIMa2o2AgAgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAkggASgCBGs2AgALDAELAkAgASgCNCABKAIMSQRAIAEgASgCACABKAI8IAEoAjRqIAEoAgxrajYCACABIAEoAgwgASgCNGs2AgwgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAjA2AgAgASgCNCABKAIISQRAIAEgASgCNDYCDCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsMAQsgASABKAIAIAEoAjQgASgCDGtqNgIAIAEoAgwgASgCCEkEQCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsLA0AgASgCCEECSwRAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCCEEDazYCCAwBCwsMAQsgASABKAJIIAEoAgRrNgIAA0AgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgi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ZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AbmFuAC9kZXYvdXJhbmRvbQBpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2sAaW5jb3JyZWN0IGhlYWRlciBjaGVjawBpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrAGluY29ycmVjdCBkYXRhIGNoZWNrAGludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrAGhlYWRlciBjcmMgbWlzbWF0Y2gAaW5mAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRlZABPcGVyYXRpb24gbm90IHN1cHBvcnRlZABFbmNyeXB0aW9uIG1ldGhvZCBub3Qgc3VwcG9ydGVkAENvbXByZXNzaW9uIG1ldGhvZCBub3Qgc3VwcG9ydGVkAEVudHJ5IGhhcyBiZWVuIGRlbGV0ZWQAQ29udGFpbmluZyB6aXAgYXJjaGl2ZSB3YXMgY2xvc2VkAENsb3NpbmcgemlwIGFyY2hpdmUgZmFpbGVkAFJlbmFtaW5nIHRlbXBvcmFyeSBmaWxlIGZhaWxlZABFbnRyeSBoYXMgYmVlbiBjaGFuZ2VkAE5vIHBhc3N3b3JkIHByb3ZpZGVkAFdyb25nIHBhc3N3b3JkIHByb3ZpZGVkAFVua25vd24gZXJyb3IgJWQAcmIAcitiAHJ3YQAlcy5YWFhYWFgATkFOAElORgBBRQAxLjIuMTEAL3Byb2Mvc2VsZi9mZC8ALgAobnVsbCkAOiAAUEsGBwBQSwYGAFBLBQYAUEsDBABQSwECAAAAAAAAUgUAANkHAACsCAAAkQgAAIIFAACkBQAAjQUAAMUFAABvCAAANAcAAOkEAAAkBwAAAwcAAK8FAADhBgAAywgAADcIAABBBwAAWgQAALkGAABzBQAAQQQAAFcHAABYCAAAFwgAAKcGAADiCAAA9wgAAP8HAADLBgAAaAUAAMEHAAAgAEGYFAsRAQAAAAEAAAABAAAAAQAAAAEAQbwUCwkBAAAAAQAAAAIAQegUCwEBAEGIFQsBAQBBlBUL+0OWMAd3LGEO7rpRCZkZxG0Hj/RqcDWlY+mjlWSeMojbDqS43Hke6dXgiNnSlytMtgm9fLF+By2455Edv5BkELcd8iCwakhxufPeQb6EfdTaGuvk3W1RtdT0x4XTg1aYbBPAqGtkevli/ezJZYpPXAEU2WwGY2M9D/r1DQiNyCBuO14QaUzkQWDVcnFnotHkAzxH1ARL/YUN0mu1CqX6qLU1bJiyQtbJu9tA+bys42zYMnVc30XPDdbcWT3Rq6ww2SY6AN5RgFHXyBZh0L+19LQhI8SzVpmVus8Ppb24nrgCKAiIBV+y2QzGJOkLsYd8by8RTGhYqx1hwT0tZraQQdx2BnHbAbwg0pgqENXviYWxcR+1tgal5L+fM9S46KLJB3g0+QAPjqgJlhiYDuG7DWp/LT1tCJdsZJEBXGPm9FFra2JhbBzYMGWFTgBi8u2VBmx7pQEbwfQIglfED/XG2bBlUOm3Euq4vot8iLn83x3dYkkt2hXzfNOMZUzU+1hhsk3OUbU6dAC8o+Iwu9RBpd9K15XYPW3E0aT79NbTaulpQ/zZbjRGiGet0Lhg2nMtBETlHQMzX0wKqsl8Dd08cQVQqkECJxAQC76GIAzJJbVoV7OFbyAJ1Ga5n+Rhzg753l6YydkpIpjQsLSo18cXPbNZgQ20LjtcvbetbLrAIIO47bazv5oM4rYDmtKxdDlH1eqvd9KdFSbbBIMW3HMSC2PjhDtklD5qbQ2oWmp6C88O5J3/CZMnrgAKsZ4HfUSTD/DSowiHaPIBHv7CBmldV2L3y2dlgHE2bBnnBmtudhvU/uAr04laetoQzErdZ2/fufn5776OQ763F9WOsGDoo9bWfpPRocTC2DhS8t9P8We70WdXvKbdBrU/SzaySNorDdhMGwqv9koDNmB6BEHD72DfVd9nqO+ObjF5vmlGjLNhyxqDZryg0m8lNuJoUpV3DMwDRwu7uRYCIi8mBVW+O7rFKAu9spJatCsEarNcp//XwjHP0LWLntksHa7eW7DCZJsm8mPsnKNqdQqTbQKpBgmcPzYO64VnB3ITVwAFgkq/lRR6uOKuK7F7OBu2DJuO0pINvtXlt+/cfCHf2wvU0tOGQuLU8fiz3Whug9ofzRa+gVsmufbhd7Bvd0e3GOZaCIhwag//yjsGZlwLARH/nmWPaa5i+NP/a2FFz2wWeOIKoO7SDddUgwROwrMDOWEmZ6f3FmDQTUdpSdt3bj5KatGu3FrW2WYL30DwO9g3U668qcWeu95/z7JH6f+1MBzyvb2KwrrKMJOzU6ajtCQFNtC6kwbXzSlX3lS/Z9kjLnpms7hKYcQCG2hdlCtvKje+C7ShjgzDG98FWo3vAi0AAAAAQTEbGYJiNjLDUy0rBMVsZEX0d32Gp1pWx5ZBTwiK2chJu8LRiujv+svZ9OMMT7WsTX6utY4tg57PHJiHURLCShAj2VPTcPR4kkHvYVXXri4U5rU317WYHJaEgwVZmBuCGKkAm9v6LbCayzapXV135hxsbP/fP0HUng5azaIkhJXjFZ+MIEayp2F3qb6m4ejx59Dz6CSD3sNlssXaqq5dXeufRkQozGtvaf1wdq5rMTnvWiogLAkHC204HBLzNkbfsgddxnFUcO0wZWv09/Mqu7bCMaJ1kRyJNKAHkPu8nxe6jYQOed6pJTjvsjz/efNzvkjoan0bxUE8Kt5YBU958ER+YumHLU/CxhxU2wGKFZRAuw6Ng+gjpsLZOL8NxaA4TPS7IY+nlgrOlo0TCQDMXEgx10WLYvpuylPhd1Rdu7oVbKCj1j+NiJcOlpFQmNfeEanMx9L64eyTy/r1XNdich3meWvetVRAn4RPWVgSDhYZIxUP2nA4JJtBIz2na/1l5lrmfCUJy1dkONBOo66RAeKfihghzKczYP28Kq/hJK3u0D+0LYMSn2yyCYarJEjJ6hVT0ClGfvtod2Xi9nk/L7dIJDZ0GwkdNSoSBPK8U0uzjUhScN5leTHvfmD+8+bnv8L9/nyR0NU9oMvM+jaKg7sHkZp4VLyxOWWnqEuYgzsKqZgiyfq1CYjLrhBPXe9fDmz0Rs0/2W2MDsJ0QxJa8wIjQerBcGzBgEF32EfXNpcG5i2OxbUApYSEG7waikFxW7taaJjod0PZ2WxaHk8tFV9+NgycLRsn3RwAPhIAmLlTMYOgkGKui9FTtZIWxfTdV/TvxJSnwu/Vltn26bwHrqiNHLdr3jGcKu8qhe15a8qsSHDTbxtd+C4qRuHhNt5moAfFf2NU6FQiZfNN5fOyAqTCqRtnkYQwJqCfKbiuxeT5n979Oszz1nv96M+8a6mA/VqymT4Jn7J/OISrsCQcLPEVBzUyRioec3cxB7ThcEj10GtRNoNGeneyXWNO1/rLD+bh0sy1zPmNhNfgShKWrwsjjbbIcKCdiUG7hEZdIwMHbDgaxD8VMYUODihCmE9nA6lUfsD6eVWBy2JMH8U4gV70I5idpw6z3JYVqhsAVOVaMU/8mWJi19hTec4XT+FJVn76UJUt13vUHMxiE4qNLVK7ljSR6Lsf0NmgBuzzfl6twmVHbpFIbC+gU3XoNhI6qQcJI2pUJAgrZT8R5HmnlqVIvI9mG5GkJyqKveC8y/KhjdDrYt79wCPv5tm94bwU/NCnDT+DiiZ+spE/uSTQcPgVy2k7RuZCenf9W7VrZdz0Wn7FNwlT7nY4SPexrgm48J8SoTPMP4py/SSTAAAAADdqwgFu1IQDWb5GAtyoCQfrwssGsnyNBIUWTwW4URMOjzvRD9aFlw3h71UMZPkaCVOT2AgKLZ4KPUdcC3CjJhxHyeQdHneiHykdYB6sCy8bm2HtGsLfqxj1tWkZyPI1Ev+Y9xOmJrERkUxzEBRaPBUjMP4Ueo64Fk3kehfgRk041yyPOY6SyTu5+As6PO5EPwuEhj5SOsA8ZVACPVgXXjZvfZw3NsPaNQGpGDSEv1cxs9WVMOpr0zLdAREzkOVrJKePqSX+Me8nyVstJkxNYiN7J6AiIpnmIBXzJCEotHgqH966K0Zg/ClxCj4o9BxxLcN2syyayPUuraI3L8CNmnD351hxrlkec5kz3HIcJZN3K09RdnLxF3RFm9V1eNyJfk+2S38WCA19IWLPfKR0gHmTHkJ4yqAEev3KxnuwLrxsh0R+bd76OG/pkPpubIa1a1vsd2oCUjFoNTjzaQh/r2I/FW1jZqsrYVHB6WDU16Zl471kZLoDImaNaeBnIMvXSBehFUlOH1NLeXWRSvxj3k/LCRxOkrdaTKXdmE2YmsRGr/AGR/ZOQEXBJIJERDLNQXNYD0Aq5klCHYyLQ1Bo8VRnAjNVPrx1VwnWt1aMwPhTu6o6UuIUfFDVfr5R6DniWt9TIFuG7WZZsYekWDSR610D+ylcWkVvXm0vrV+AGzXht3H34O7PseLZpXPjXLM85mvZ/ucyZ7jlBQ165DhKJu8PIOTuVp6i7GH0YO3k4i/o04jt6Yo2q+u9XGnq8LgT/cfS0fyebJf+qQZV/ywQGvobetj7QsSe+XWuXPhI6QDzf4PC8iY9hPARV0bxlEEJ9KMry/X6lY33zf9P9mBdeNlXN7rYDon82jnjPtu89XHei5+z39Ih9d3lSzfc2Axr1+9mqda22O/UgbIt1QSkYtAzzqDRanDm010aJNIQ/l7FJ5ScxH4q2sZJQBjHzFZXwvs8lcOigtPBlegRwKivTcufxY/KxnvJyPERC8l0B0TMQ22GzRrTwM8tuQLOQJavkXf8bZAuQiuSGSjpk5w+pparVGSX8uoilcWA4JT4x7yfz61+npYTOJyhefqdJG+1mBMFd5lKuzGbfdHzmjA1iY0HX0uMXuENjmmLz4/snYCK2/dCi4JJBIm1I8aIiGSag78OWILmsB6A0drcgVTMk4RjplGFOhgXhw1y1Yag0OKpl7ogqM4EZqr5bqSrfHjrrksSKa8SrG+tJcatrBiB8acv6zOmdlV1pEE/t6XEKfig80M6oar9fKOdl76i0HPEtecZBrS+p0C2ic2CtwzbzbI7sQ+zYg9JsVVli7BoIte7X0gVugb2U7gxnJG5tIrevIPgHL3aXlq/7TSYvgAAAABlZ7y4i8gJqu6vtRJXl2KPMvDeN9xfayW5ONed7yi0xYpPCH1k4L1vAYcB17i/1krd2GryM3ff4FYQY1ifVxlQ+jCl6BSfEPpx+KxCyMB7362nx2dDCHJ1Jm/OzXB/rZUVGBEt+7ekP57QGIcn6M8aQo9zoqwgxrDJR3oIPq8yoFvIjhi1ZzsK0ACHsmk4UC8MX+yX4vBZhYeX5T3Rh4ZltOA63VpPj88/KDN3hhDk6uN3WFIN2O1AaL9R+KH4K/DEn5dIKjAiWk9XnuL2b0l/kwj1x32nQNUYwPxtTtCfNSu3I43FGJafoH8qJxlH/bp8IEECko/0EPfoSKg9WBSbWD+oI7aQHTHT96GJas92FA+oyqzhB3++hGDDBtJwoF63FxzmWbip9DzfFUyF58LR4IB+aQ4vy3trSHfDog8Ny8dosXMpxwRhTKC42fWYb0SQ/9P8flBm7hs32lZNJ7kOKEAFtsbvsKSjiAwcGrDbgX/XZzmReNIr9B9ukwP3JjtmkJqDiD8vke1YkylUYES0MQf4DN+oTR66z/Gm7N+S/om4LkZnF5tUAnAn7LtI8HHeL0zJMID521XnRWOcoD9r+ceD0xdoNsFyD4p5yzdd5K5Q4VxA/1ROJZjo9nOIi64W7zcW+ECCBJ0nPrwkH+khQXhVma/X4IvKsFwzO7ZZ7V7R5VWwflBH1Rns/2whO2IJRofa5+kyyIKOjnDUnu0osflRkF9W5II6MVg6gwmPp+ZuMx8IwYYNbaY6taThQL3BhvwFLylJF0pO9a/zdiIylhGeini+K5gd2ZcgS8n0eC6uSMDAAf3SpWZBahxelvd5OSpPl5afXfLxI+UFGWtNYH7X9Y7RYufrtt5fUo4JwjfptXrZRgBovCG80Oox34iPVmMwYfnWIgSeapq9pr0H2MEBvzZutK1TCQgVmk5yHf8pzqURhnu3dOHHD83ZEJKovqwqRhEZOCN2pYB1ZsbYEAF6YP6uz3KbyXPKIvGkV0eWGO+pOa39zF4RRQbuTXZjifHOjSZE3OhB+GRReS/5NB6TQdqxJlO/1prr6cb5s4yhRQtiDvAZB2lMob5RmzzbNieENZmSllD+Li6ZuVQm/N7onhJxXYx3FuE0zi42qatJihFF5j8DIIGDu3aR4OMT9lxb/VnpSZg+VfEhBoJsRGE+1KrOi8bPqTd+OEF/1l0mw26ziXZ81u7KxG/WHVkKsaHh5B4U84F5qEvXacsTsg53q1yhwrk5xn4BgP6pnOWZFSQLNqA2blEcjqcWZobCcdo+LN5vLEm505TwgQQJlea4sXtJDaMeLrEbSD7SQy1ZbvvD9tvpppFnUR+psMx6zgx0lGG5ZvEGBd4AAAAAdwcwlu4OYSyZCVG6B23EGXBq9I/pY6U1nmSVow7biDJ53Lik4NXpHpfS2YgJtkwrfrF8vee4LQeQvx2RHbcQZGqwIPLzuXFIhL5B3hra1H1t3eTr9NS1UYPThccTbJhWZGuowP1i+XqKZcnsFAFcT2MGbNn6Dz1jjQgN9TtuIMhMaRBe1WBB5KJncXI8A+TRSwTUR9INhf2lCrVrNbWo+kKymGzbu8nWrLz5QDLYbONF31x13NYNz6vRPVkm2TCsUd4AOsjXUYC/0GEWIbT0tVazxCPPupWZuL2lDygCuJ5fBYgIxgzZsrEL6SQvb3yHWGhMEcFhHau2Zi09dtxBkAHbcQaY0iC879UQKnGxhYkGtrUfn7/kpei41DN4B8miDwD5NJYJqI7hDpgYf2oNuwhtPS2RZGyX5mNcAWtrUfQcbGFihWUw2PJiAE5sBpXtGwGle4II9MH1D8RXZbDZxhK36VCLvrjq/LmIfGLdHd8V2i1JjNN88/vUTGVNsmFYOrVRzqO8AHTUuzDiSt+lQT3Yldek0cRt09b0+0Np6Wo0btn8rWeIRtpguNBEBC1zMwMd5aoKTF/dDXzJUAVxPCcCQaq+CxAQyQwghldotSUgb4WzuWbUCc5h5J9e3vkOKdnJmLDQmCLH16i0WbM9Fy60DYG3vVw7wLpsre24gyCav7O2A7biDHSx0prq1Uc5ndJ3rwTbJhVz3BaD42MLEpRkO4QNbWo+empaqOQOzwuTCf+dCgCuJ30HnrHwD5NEhwij0h4B8mhpBsL+92JXXYBlZ8sZbDZxbmsG5/7UG3aJ0yvgENp6WmfdSsz5ud9vjr7v+Re3vkNgsI7V1taj6KHRk3442MLET9/yUtG7Z/GmvFdnP7UG3UiyNkvYDSvarwobTDYDSvZBBHpg32Dvw6hn31Uxbo7vRmm+ecths4y8ZoMaJW/SoFJo4jbMDHeVuwtHAyICFrlVBSYvxbo7vrK9CygrtFqSXLNqBMLX/6e10M8xLNmei1verh2bZMKw7GPyJnVqo5wCbZMKnAkGqesONj9yB2eFBQBXE5W/SoLiuHoUe7Errgy2GziS0o6b5dW+DXzc77cL298hhtPS1PHU4kJo3bP4H9qDboG+Fs32uSZbb7B34Ri3R3eICFrm/w9qcGYGO8oRAQtcj2We//hirmlha//TFmzPRaAK4njXDdLuTgSDVDkDs8KnZyZh0GAW90lpR00+bnfbrtFqStnWWtxA3wtmN9g78Km8rlPeu57FR7LPfzC1/+m9vfIcyrrCilOzkzAktKOmutA2Bc3XBpNU3lcpI9lnv7Nmei7EYUq4XWgbAipvK5S0C743wwyOoVoF3xstAu+NAAAAABkbMUEyNmKCKy1Tw2RsxQR9d/RFVlqnhk9BlsfI2YoI0cK7Sfrv6Irj9NnLrLVPDLWufk2egy2Oh5gcz0rCElFT2SMQePRw02HvQZIurtdVN7XmFByYtdcFg4SWghuYWZsAqRiwLfrbqTbLmuZ3XV3/bGwc1EE/381aDp6VhCSijJ8V46eyRiC+qXdh8ejhpujz0OfD3oMk2sWyZV1drqpERp/rb2vMKHZw/Wk5MWuuICpa7wsHCSwSHDht30Y288ZdB7LtcFRx9GtlMLsq8/eiMcK2iRyRdZAHoDQXn7z7DoSNuiWp3nk8su84c/N5/2roSL5BxRt9WN4qPPB5TwXpYn5Ewk8th9tUHMaUFYoBjQ67QKYj6IO/ONnCOKDFDSG79EwKlqePE42WzlzMAAlF1zFIbvpii3fhU8q6u11Uo6BsFYiNP9aRlg6X3teYUMfMqRHs4frS9frLk3Ji11xreeYdQFS13llPhJ8WDhJYDxUjGSQ4cNo9I0GbZf1rp3zmWuZXywklTtA4ZAGRrqMYip/iM6fMISq8/WCtJOGvtD/Q7p8Sgy2GCbJsyUgkq9BTFer7fkYp4mV3aC8/efY2JEi3HQkbdAQSKjVLU7zyUkiNs3ll3nBgfu8x5+bz/v79wr/V0JF8zMugPYOKNvqakQe7sbxUeKinZTk7g5hLIpipCgm1+skQrsuIX+9dT0b0bA5t2T/NdMIOjPNaEkPqQSMCwWxwwdh3QYCXNtdHji3mBqUAtcW8G4SEcUGKGmhau1tDd+iYWmzZ2RUtTx4MNn5fJxstnD4AHN25mAASoIMxU4uuYpCStVPR3fTFFsTv9FfvwqeU9tmW1a4HvOm3HI2onDHea4Uq7yrKa3nt03BIrPhdG2/hRiouZt424X/FB6BU6FRjTfNlIgKy8+UbqcKkMISRZymfoCbkxa64/d6f+dbzzDrP6P17gKlrvJmyWv2ynwk+q4Q4fywcJLA1BxXxHipGMgcxd3NIcOG0UWvQ9XpGgzZjXbJ3y/rXTtLh5g/5zLXM4NeEja+WEkq2jSMLnaBwyIS7QYkDI11GGjhsBzEVP8QoDg6FZ0+YQn5UqQNVefrATGLLgYE4xR+YI/Resw6nnaoVltzlVAAb/E8xWtdiYpnOeVPYSeFPF1D6flZ71y2VYswc1C2NihM0lrtSH7vokQag2dBefvPsR2XCrWxIkW51U6AvOhI26CMJB6kIJFRqET9lK5aneeSPvEilpJEbZr2KKifyy7zg69CNocD93mLZ5u8jFLzhvQ2n0PwmioM/P5GyfnDQJLlpyxX4QuZGO1v9d3rcZWu1xX5a9O5TCTf3SDh2uAmusaESn/CKP8wzkyT9cgAAAAABwmo3A4TUbgJGvlkHCajcBsvC6wSNfLIFTxaFDhNRuA/RO48Nl4XWDFXv4Qka+WQI2JNTCp4tCgtcRz0cJqNwHeTJRx+idx4eYB0pGy8LrBrtYZsYq9/CGWm19RI18sgT95j/EbEmphBzTJEVPFoUFP4wIxa4jnoXeuRNOE1G4DmPLNc7yZKOOgv4uT9E7jw+hoQLPMA6Uj0CUGU2XhdYN5x9bzXawzY0GKkBMVe/hDCV1bMy02vqMxEB3SRr5ZAlqY+nJ+8x/iYtW8kjYk1MIqAneyDmmSIhJPMVKni0KCu63h8p/GBGKD4KcS1xHPQss3bDLvXImi83oq1wmo3AcVjn93MeWa5y3DOZd5MlHHZRTyt0F/FyddWbRX6J3Hh/S7ZPfQ0IFnzPYiF5gHSkeEIek3oEoMp7xsr9bLwusG1+RIdvOPrebvqQ6Wu1hmxqd+xbaDFSAmnzODVir38IY20VP2Erq2Zg6cFRZabX1GRkveNmIgO6Z+BpjUjXyyBJFaEXS1MfTkqRdXlP3mP8ThwJy0xat5JNmN2lRsSamEcG8K9FQE72RIIkwUHNMkRAD1hzQknmKkOLjB1U8WhQVTMCZ1d1vD5Wt9YJU/jAjFI6qrtQfBTiUb5+1VriOehbIFPfWWbthlikh7Fd65E0XCn7A15vRVpfrS9t4TUbgOD3cbfisc/u43Ol2eY8s1zn/tlr5bhnMuR6DQXvJko47uQgD+yinlbtYPRh6C/i5OntiNPrqzaK6mlcvf0TuPD80dLH/pdsnv9VBqn6GhAs+9h6G/mexEL4XK518wDpSPLCg3/whD0m8UZXEfQJQZT1yyuj942V+vZP/83ZeF1g2Lo3V9r8iQ7bPuM53nH1vN+zn4vd9SHS3DdL5ddrDNjWqWbv1O/YttUtsoHQYqQE0aDOM9PmcGrSJBpdxV7+EMSclCfG2ip+xxhAScJXVszDlTz7wdOCosAR6JXLTa+oyo/Fn8jJe8bJCxHxzEQHdM2GbUPPwNMazgK5LZGvlkCQbfx3kitCLpPpKBmWpj6cl2RUq5Ui6vKU4IDFn7zH+J5+rc+cOBOWnfp5oZi1bySZdwUTmzG7Sprz0X2NiTUwjEtfB44N4V6Pz4tpioCd7ItC99uJBEmCiMYjtYOaZIiCWA6/gB6w5oHc2tGEk8xUhVGmY4cXGDqG1XINqeLQoKggupeqZgTOq6Ru+a7reHyvKRJLrW+sEqytxiWn8YEYpjPrL6R1VXaltz9BoPgpxKE6Q/OjfP2qor6XnbXEc9C0BhnntkCnvreCzYmyzdsMsw+xO7FJD2Kwi2VVu9ciaLoVSF+4U/YGuZGcMbzeirS9HOCDv1pe2r6YNO0AAAAAuLxnZaoJyIsSta/uj2KXVzfe8DIla1/cndc4ucW0KO99CE+Kb73gZNcBhwFK1r+48mrY3eDfdzNYYxBWUBlXn+ilMPr6EJ8UQqz4cd97wMhnx6etdXIIQ83ObyaVrX9wLREYFT+kt/uHGNCeGs/oJ6Jzj0KwxiCsCHpHyaAyrz4YjshbCjtntbKHANAvUDhpl+xfDIVZ8OI95ZeHZYaH0d064LTPj09adzMoP+rkEIZSWHfjQO3YDfhRv2jwK/ihSJefxFoiMCrinldPf0lv9sf1CJPVQKd9bfzAGDWf0E6NI7crn5YYxScqf6C6/UcZAkEgfBD0j5KoSOj3mxRYPSOoP1gxHZC2iaH30xR2z2qsyqgPvn8H4QbDYIReoHDS5hwXt/SpuFlMFd880cLnhWl+gOB7yy8Ow3dIa8sND6JzsWjHYQTHKdm4oExEb5j1/NP/kO5mUH5W2jcbDrknTbYFQCiksO/GHAyIo4HbsBo5Z9d/K9J4kZNuH/Q7JvcDg5qQZpEvP4gpk1jttERgVAz4BzEeTajfpvHPuv6S3+xGLriJVJsXZ+wncAJx8Ei7yUwv3tv5gDBjRedVaz+gnNODx/nBNmgXeYoPcuRdN8tc4VCuTlT/QPbomCWui4hzFjfvFgSCQPi8PiedIekfJJlVeEGL4NevM1ywyu1ZtjtV5dFeR1B+sP/sGdViOyFs2odGCcgy6edwjo6CKO2e1JBR+bGC5FZfOlgxOqePCYMfM27mDYbBCLU6pm29QOGkBfyGwRdJKS+v9U5KMiJ284qeEZaYK754IJfZHXj0yUvASK4u0v0BwGpBZqX3ll4cTyo5eV2flpflI/HyTWsZBfXXfmDnYtGOX96268IJjlJ6tek3aABG2dC8IbyI3zHqMGNWjyLW+WGaap4EB72mvb8BwdittG42FQgJUx1yTpqlzin/t3uGEQ/H4XSSENnNKqy+qDgZEUaApXYj2MZmdWB6ARByz67+ynPJm1ek8SLvGJZH/a05qUURXsx2Te4GzvGJY9xEJo1k+EHo+S95UUGTHjRTJrHa65rWv7P5xukLRaGMGfAOYqFMaQc8m1G+hCc225aSmTUuLv5QJlS5mZ7o3vyMXXESNOEWd6k2Ls4RikmrAz/mRbuDgSDj4JF2W1z2E0npWf3xVT6YbIIGIdQ+YUTGi86qfjepz9Z/QThuwyZdfHaJs8TK7tZZHdZv4aGxCvMUHuRLqHmBE8tp16t3DrK5wqFcAX7GOZyp/oAkFZnlNqA2C44cUW6GZhanPtpxwixv3iyU07lJCQSB8LG45pWjDUl7G7EuHkPSPkj7blkt6dv2w1FnkabMsKkfdAzOema5YZTeBQbxAAA6JjsmZSZmJmMmYCYiINglyyXZJUImQCZqJmsmPCa6JcQllSE8ILYApwCsJaghkSGTIZIhkCEfIpQhsiW8JSAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkAGUAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBzAHQAdQB2AHcAeAB5AHoAewB8AH0AfgACI8cA/ADpAOIA5ADgAOUA5wDqAOsA6ADvAO4A7ADEAMUAyQDmAMYA9AD2APIA+wD5AP8A1gDcAKIAowClAKcgkgHhAO0A8wD6APEA0QCqALoAvwAQI6wAvQC8AKEAqwC7AJElkiWTJQIlJCVhJWIlViVVJWMlUSVXJV0lXCVbJRAlFCU0JSwlHCUAJTwlXiVfJVolVCVpJWYlYCVQJWwlZyVoJWQlZSVZJVglUiVTJWslaiUYJQwliCWEJYwlkCWAJbED3wCTA8ADowPDA7UAxAOmA5gDqQO0Ax4ixgO1AykiYSKxAGUiZCIgIyEj9wBIIrAAGSK3ABoifyCyAKAloABBoNkACyYUBAAAtgcAAHoJAACZBQAAWwUAALoFAAAABAAARQUAAM8FAAB6CQBB0dkAC7YQAQIDBAQFBQYGBgYHBwcHCAgICAgICAgJCQkJCQkJCQoKCgoKCgoKCgoKCgoKCgoLCwsLCwsLCwsLCwsLCwsLDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PAAAQERISExMUFBQUFRUVFRYWFhYWFhYWFxcXFxcXFxcYGBgYGBgYGBgYGBgYGBgYGRkZGRkZGRkZGRkZGRkZGRoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxscHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQABAgMEBQYHCAgJCQoKCwsMDAwMDQ0NDQ4ODg4PDw8PEBAQEBAQEBARERERERERERISEhISEhISExMTExMTExMUFBQUFBQUFBQUFBQUFBQUFRUVFRUVFRUVFRUVFRUVFRYWFhYWFhYWFhYWFhYWFhYXFxcXFxcXFxcXFxcXFxcXGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxwQMAAAEDUAAAEBAAAeAQAADwAAAJA0AACQNQAAAAAAAB4AAAAPAAAAAAAAABA2AAAAAAAAEwAAAAcAAAAAAAAADAAIAIwACABMAAgAzAAIACwACACsAAgAbAAIAOwACAAcAAgAnAAIAFwACADcAAgAPAAIALwACAB8AAgA/AAIAAIACACCAAgAQgAIAMIACAAiAAgAogAIAGIACADiAAgAEgAIAJIACABSAAgA0gAIADIACACyAAgAcgAIAPIACAAKAAgAigAIAEoACADKAAgAKgAIAKoACABqAAgA6gAIABoACACaAAgAWgAIANoACAA6AAgAugAIAHoACAD6AAgABgAIAIYACABGAAgAxgAIACYACACmAAgAZgAIAOYACAAWAAgAlgAIAFYACADWAAgANgAIALYACAB2AAgA9gAIAA4ACACOAAgATgAIAM4ACAAuAAgArgAIAG4ACADuAAgAHgAIAJ4ACABeAAgA3gAIAD4ACAC+AAgAfgAIAP4ACAABAAgAgQAIAEEACADBAAgAIQAIAKEACABhAAgA4QAIABEACACRAAgAUQAIANEACAAxAAgAsQAIAHEACADxAAgACQAIAIkACABJAAgAyQAIACkACACpAAgAaQAIAOkACAAZAAgAmQAIAFkACADZAAgAOQAIALkACAB5AAgA+QAIAAUACACFAAgARQAIAMUACAAlAAgApQAIAGUACADlAAgAFQAIAJUACABVAAgA1QAIADUACAC1AAgAdQAIAPUACAANAAgAjQAIAE0ACADNAAgALQAIAK0ACABtAAgA7QAIAB0ACACdAAgAXQAIAN0ACAA9AAgAvQAIAH0ACAD9AAgAEwAJABMBCQCTAAkAkwEJAFMACQBTAQkA0wAJANMBCQAzAAkAMwEJALMACQCzAQkAcwAJAHMBCQDzAAkA8wEJAAsACQALAQkAiwAJAIsBCQBLAAkASwEJAMsACQDLAQkAKwAJACsBCQCrAAkAqwEJAGsACQBrAQkA6wAJAOsBCQAbAAkAGwEJAJsACQCbAQkAWwAJAFsBCQDbAAkA2wEJADsACQA7AQkAuwAJALsBCQB7AAkAewEJAPsACQD7AQkABwAJAAcBCQCHAAkAhwEJAEcACQBHAQkAxwAJAMcBCQAnAAkAJwEJAKcACQCnAQkAZwAJAGcBCQDnAAkA5wEJABcACQAXAQkAlwAJAJcBCQBXAAkAVwEJANcACQDXAQkANwAJADcBCQC3AAkAtwEJAHcACQB3AQkA9wAJAPcBCQAPAAkADwEJAI8ACQCPAQkATwAJAE8BCQDPAAkAzwEJAC8ACQAvAQkArwAJAK8BCQBvAAkAbwEJAO8ACQDvAQkAHwAJAB8BCQCfAAkAnwEJAF8ACQBfAQkA3wAJAN8BCQA/AAkAPwEJAL8ACQC/AQkAfwAJAH8BCQD/AAkA/wEJAAAABwBAAAcAIAAHAGAABwAQAAcAUAAHADAABwBwAAcACAAHAEgABwAoAAcAaAAHABgABwBYAAcAOAAHAHgABwAEAAcARAAHACQABwBkAAcAFAAHAFQABwA0AAcAdAAHAAMACACDAAgAQwAIAMMACAAjAAgAowAIAGMACADjAAgAAAAFABAABQAIAAUAGAAFAAQABQAUAAUADAAFABwABQACAAUAEgAFAAoABQAaAAUABgAFABYABQAOAAUAHgAFAAEABQARAAUACQAFABkABQAFAAUAFQAFAA0ABQAdAAUAAwAFABMABQALAAUAGwAFAAcABQAXAAUAQbDqAAtNAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAUAAAAFAAAABQAAAAUAQaDrAAtlAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAIAAAACAAAAAkAAAAJAAAACgAAAAoAAAALAAAACwAAAAwAAAAMAAAADQAAAA0AQdDsAAsjAgAAAAMAAAAHAAAAAAAAABAREgAIBwkGCgULBAwDDQIOAQ8AQYTtAAtpAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAEGE7gALegEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAMS4yLjExAEGI7wALbQcAAAAEAAQACAAEAAgAAAAEAAUAEAAIAAgAAAAEAAYAIAAgAAgAAAAEAAQAEAAQAAkAAAAIABAAIAAgAAkAAAAIABAAgACAAAkAAAAIACAAgAAAAQkAAAAgAIAAAgEABAkAAAAgAAIBAgEAEAkAQYDwAAulAgMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAATQDKAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEGw8gALwRFgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnAABAHCgAACGAAAAggAAAJoAAACAAAAAiAAAAIQAAACeAAEAcGAAAIWAAACBgAAAmQABMHOwAACHgAAAg4AAAJ0AARBxEAAAhoAAAIKAAACbAAAAgIAAAIiAAACEgAAAnwABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACcgAEQcNAAAIZAAACCQAAAmoAAAIBAAACIQAAAhEAAAJ6AAQBwgAAAhcAAAIHAAACZgAFAdTAAAIfAAACDwAAAnYABIHFwAACGwAAAgsAAAJuAAACAwAAAiMAAAITAAACfgAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxAARBwsAAAhiAAAIIgAACaQAAAgCAAAIggAACEIAAAnkABAHBwAACFoAAAgaAAAJlAAUB0MAAAh6AAAIOgAACdQAEgcTAAAIagAACCoAAAm0AAAICgAACIoAAAhKAAAJ9AAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnMABEHDwAACGYAAAgmAAAJrAAACAYAAAiGAAAIRgAACewAEAcJAAAIXgAACB4AAAmcABQHYwAACH4AAAg+AAAJ3AASBxsAAAhuAAAILgAACbwAAAgOAAAIjgAACE4AAAn8AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcIAEAcKAAAIYQAACCEAAAmiAAAIAQAACIEAAAhBAAAJ4gAQBwYAAAhZAAAIGQAACZIAEwc7AAAIeQAACDkAAAnSABEHEQAACGkAAAgpAAAJsgAACAkAAAiJAAAISQAACfIAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJygARBw0AAAhlAAAIJQAACaoAAAgFAAAIhQAACEUAAAnqABAHCAAACF0AAAgdAAAJmgAUB1MAAAh9AAAIPQAACdoAEgcXAAAIbQAACC0AAAm6AAAIDQAACI0AAAhNAAAJ+gAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnGABEHCwAACGMAAAgjAAAJpgAACAMAAAiDAAAIQwAACeYAEAcHAAAIWwAACBsAAAmWABQHQwAACHsAAAg7AAAJ1gASBxMAAAhrAAAIKwAACbYAAAgLAAAIiwAACEsAAAn2ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc4AEQcPAAAIZwAACCcAAAmuAAAIBwAACIcAAAhHAAAJ7gAQBwkAAAhfAAAIHwAACZ4AFAdjAAAIfwAACD8AAAneABIHGwAACG8AAAgvAAAJvgAACA8AAAiPAAAITwAACf4AYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwQAQBwoAAAhgAAAIIAAACaEAAAgAAAAIgAAACEAAAAnhABAHBgAACFgAAAgYAAAJkQATBzsAAAh4AAAIOAAACdEAEQcRAAAIaAAACCgAAAmxAAAICAAACIgAAAhIAAAJ8QAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnJABEHDQAACGQAAAgkAAAJqQAACAQAAAiEAAAIRAAACekAEAcIAAAIXAAACBwAAAmZABQHUwAACHwAAAg8AAAJ2QASBxcAAAhsAAAILAAACbkAAAgMAAAIjAAACEwAAAn5ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcUAEQcLAAAIYgAACCIAAAmlAAAIAgAACIIAAAhCAAAJ5QAQBwcAAAhaAAAIGgAACZUAFAdDAAAIegAACDoAAAnVABIHEwAACGoAAAgqAAAJtQAACAoAAAiKAAAISgAACfUAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzQARBw8AAAhmAAAIJgAACa0AAAgGAAAIhgAACEYAAAntABAHCQAACF4AAAgeAAAJnQAUB2MAAAh+AAAIPgAACd0AEgcbAAAIbgAACC4AAAm9AAAIDgAACI4AAAhOAAAJ/QBgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnDABAHCgAACGEAAAghAAAJowAACAEAAAiBAAAIQQAACeMAEAcGAAAIWQAACBkAAAmTABMHOwAACHkAAAg5AAAJ0wARBxEAAAhpAAAIKQAACbMAAAgJAAAIiQAACEkAAAnzABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcsAEQcNAAAIZQAACCUAAAmrAAAIBQAACIUAAAhFAAAJ6wAQBwgAAAhdAAAIHQAACZsAFAdTAAAIfQAACD0AAAnbABIHFwAACG0AAAgtAAAJuwAACA0AAAiNAAAITQAACfsAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxwARBwsAAAhjAAAIIwAACacAAAgDAAAIgwAACEMAAAnnABAHBwAACFsAAAgbAAAJlwAUB0MAAAh7AAAIOwAACdcAEgcTAAAIawAACCsAAAm3AAAICwAACIsAAAhLAAAJ9wAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnPABEHDwAACGcAAAgnAAAJrwAACAcAAAiHAAAIRwAACe8AEAcJAAAIXwAACB8AAAmfABQHYwAACH8AAAg/AAAJ3wASBxsAAAhvAAAILwAACb8AAAgPAAAIjwAACE8AAAn/ABAFAQAXBQEBEwURABsFARARBQUAGQUBBBUFQQAdBQFAEAUDABgFAQIUBSEAHAUBIBIFCQAaBQEIFgWBAEAFAAAQBQIAFwWBARMFGQAbBQEYEQUHABkFAQYVBWEAHQUBYBAFBAAYBQEDFAUxABwFATASBQ0AGgUBDBYFwQBABQAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAEACQsLAAAJBgsAAAsABhEAAAAREREAQYGEAQshCwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAEG7hAELAQwAQceEAQsVDAAAAAAMAAAAAAkMAAAAAAAMAAAMAEH1hAELAQ4AQYGFAQsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEGvhQELARAAQbuFAQseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEHyhQELDhIAAAASEhIAAAAAAAAJAEGjhgELAQsAQa+GAQsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHdhgELAQwAQemGAQsnDAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGAEG0hwELARkAQduHAQsF//////8AQaCIAQtXGRJEOwI/LEcUPTMwChsGRktFNw9JDo4XA0AdPGkrNh9KLRwBICUpIQgMFRYiLhA4Pgs0MRhkdHV2L0EJfzkRI0MyQomKiwUEJignDSoeNYwHGkiTE5SVAEGAiQELig5JbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgBBkJcBC1JQUFAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAAAEAAAAIAAAAlEsAALRLAEGQmQELAgxQAEHImQELCR8AAADkTAAAAwBB5JkBC4wBLfRRWM+MscBG9rXLKTEDxwRbcDC0Xf0geH+LmthZKVBoSImrp1YDbP+3zYg/1He0K6WjcPG65Kj8QYP92W/hinovLXSWBx8NCV4Ddixw90ClLKdvV0GoqnTfoFhkA0rHxDxTrq9fGAQVseNtKIarDKS/Q/DpUIE5VxZSN/////////////////////8=";tG(Of)||(Of=pIe(Of));function TIe(t){try{if(t==Of&&OD)return new Uint8Array(OD);var e=Kj(t);if(e)return e;if(ND)return ND(t);throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"}catch(r){gr(r)}}function KIe(t,e){var r,i,n;try{n=TIe(t),i=new WebAssembly.Module(n),r=new WebAssembly.Instance(i,e)}catch(o){var s=o.toString();throw Wr("failed to compile wasm module: "+s),(s.includes("imported Memory")||s.includes("memory import"))&&Wr("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."),o}return[r,i]}function YIe(){var t={a:UIe};function e(n,s){var o=n.exports;ne.asm=o,uI=ne.asm.u,Vj(uI.buffer),YD=ne.asm.za,MIe(ne.asm.v),GD("wasm-instantiate")}if($j("wasm-instantiate"),ne.instantiateWasm)try{var r=ne.instantiateWasm(t,e);return r}catch(n){return Wr("Module.instantiateWasm callback failed with error: "+n),!1}var i=KIe(Of,t);return e(i[0]),ne.asm}var xr,$s;function HD(t){for(;t.length>0;){var e=t.shift();if(typeof e=="function"){e(ne);continue}var r=e.func;typeof r=="number"?e.arg===void 0?YD.get(r)():YD.get(r)(e.arg):r(e.arg===void 0?null:e.arg)}}function hI(t,e){var r=new Date(je[t>>2]*1e3);je[e>>2]=r.getUTCSeconds(),je[e+4>>2]=r.getUTCMinutes(),je[e+8>>2]=r.getUTCHours(),je[e+12>>2]=r.getUTCDate(),je[e+16>>2]=r.getUTCMonth(),je[e+20>>2]=r.getUTCFullYear()-1900,je[e+24>>2]=r.getUTCDay(),je[e+36>>2]=0,je[e+32>>2]=0;var i=Date.UTC(r.getUTCFullYear(),0,1,0,0,0,0),n=(r.getTime()-i)/(1e3*60*60*24)|0;return je[e+28>>2]=n,hI.GMTString||(hI.GMTString=KD("GMT")),je[e+40>>2]=hI.GMTString,e}function HIe(t,e){return hI(t,e)}var gt={splitPath:function(t){var e=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return e.exec(t).slice(1)},normalizeArray:function(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];n==="."?t.splice(i,1):n===".."?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r;r--)t.unshift("..");return t},normalize:function(t){var e=t.charAt(0)==="/",r=t.substr(-1)==="/";return t=gt.normalizeArray(t.split("/").filter(function(i){return!!i}),!e).join("/"),!t&&!e&&(t="."),t&&r&&(t+="/"),(e?"/":"")+t},dirname:function(t){var e=gt.splitPath(t),r=e[0],i=e[1];return!r&&!i?".":(i&&(i=i.substr(0,i.length-1)),r+i)},basename:function(t){if(t==="/")return"/";t=gt.normalize(t),t=t.replace(/\/$/,"");var e=t.lastIndexOf("/");return e===-1?t:t.substr(e+1)},extname:function(t){return gt.splitPath(t)[3]},join:function(){var t=Array.prototype.slice.call(arguments,0);return gt.normalize(t.join("/"))},join2:function(t,e){return gt.normalize(t+"/"+e)}};function jIe(){if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function"){var t=new Uint8Array(1);return function(){return crypto.getRandomValues(t),t[0]}}else if(EA)try{var e=require("crypto");return function(){return e.randomBytes(1)[0]}}catch(r){}return function(){gr("randomDevice")}}var eo={resolve:function(){for(var t="",e=!1,r=arguments.length-1;r>=-1&&!e;r--){var i=r>=0?arguments[r]:E.cwd();if(typeof i!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!i)return"";t=i+"/"+t,e=i.charAt(0)==="/"}return t=gt.normalizeArray(t.split("/").filter(function(n){return!!n}),!e).join("/"),(e?"/":"")+t||"."},relative:function(t,e){t=eo.resolve(t).substr(1),e=eo.resolve(e).substr(1);function r(c){for(var u=0;u=0&&c[g]==="";g--);return u>g?[]:c.slice(u,g-u+1)}for(var i=r(t.split("/")),n=r(e.split("/")),s=Math.min(i.length,n.length),o=s,a=0;a0?e=i.slice(0,n).toString("utf-8"):e=null}else typeof window!="undefined"&&typeof window.prompt=="function"?(e=window.prompt("Input: "),e!==null&&(e+=` -`)):typeof readline=="function"&&(e=readline(),e!==null&&(e+=` -`));if(!e)return null;t.input=qD(e,!0)}return t.input.shift()},put_char:function(t,e){e===null||e===10?(cI(hc(t.output,0)),t.output=[]):e!=0&&t.output.push(e)},flush:function(t){t.output&&t.output.length>0&&(cI(hc(t.output,0)),t.output=[])}},default_tty1_ops:{put_char:function(t,e){e===null||e===10?(Wr(hc(t.output,0)),t.output=[]):e!=0&&t.output.push(e)},flush:function(t){t.output&&t.output.length>0&&(Wr(hc(t.output,0)),t.output=[])}}};function JD(t){for(var e=CIe(t,65536),r=zj(e);t=e)){var i=1024*1024;e=Math.max(e,r*(r>>0),r!=0&&(e=Math.max(e,256));var n=t.contents;t.contents=new Uint8Array(e),t.usedBytes>0&&t.contents.set(n.subarray(0,t.usedBytes),0)}},resizeFileStorage:function(t,e){if(t.usedBytes!=e)if(e==0)t.contents=null,t.usedBytes=0;else{var r=t.contents;t.contents=new Uint8Array(e),r&&t.contents.set(r.subarray(0,Math.min(e,t.usedBytes))),t.usedBytes=e}},node_ops:{getattr:function(t){var e={};return e.dev=E.isChrdev(t.mode)?t.id:1,e.ino=t.id,e.mode=t.mode,e.nlink=1,e.uid=0,e.gid=0,e.rdev=t.rdev,E.isDir(t.mode)?e.size=4096:E.isFile(t.mode)?e.size=t.usedBytes:E.isLink(t.mode)?e.size=t.link.length:e.size=0,e.atime=new Date(t.timestamp),e.mtime=new Date(t.timestamp),e.ctime=new Date(t.timestamp),e.blksize=4096,e.blocks=Math.ceil(e.size/e.blksize),e},setattr:function(t,e){e.mode!==void 0&&(t.mode=e.mode),e.timestamp!==void 0&&(t.timestamp=e.timestamp),e.size!==void 0&&ot.resizeFileStorage(t,e.size)},lookup:function(t,e){throw E.genericErrors[44]},mknod:function(t,e,r,i){return ot.createNode(t,e,r,i)},rename:function(t,e,r){if(E.isDir(t.mode)){var i;try{i=E.lookupNode(e,r)}catch(s){}if(i)for(var n in i.contents)throw new E.ErrnoError(55)}delete t.parent.contents[t.name],t.parent.timestamp=Date.now(),t.name=r,e.contents[r]=t,e.timestamp=t.parent.timestamp,t.parent=e},unlink:function(t,e){delete t.contents[e],t.timestamp=Date.now()},rmdir:function(t,e){var r=E.lookupNode(t,e);for(var i in r.contents)throw new E.ErrnoError(55);delete t.contents[e],t.timestamp=Date.now()},readdir:function(t){var e=[".",".."];for(var r in t.contents)!t.contents.hasOwnProperty(r)||e.push(r);return e},symlink:function(t,e,r){var i=ot.createNode(t,e,511|40960,0);return i.link=r,i},readlink:function(t){if(!E.isLink(t.mode))throw new E.ErrnoError(28);return t.link}},stream_ops:{read:function(t,e,r,i,n){var s=t.node.contents;if(n>=t.node.usedBytes)return 0;var o=Math.min(t.node.usedBytes-n,i);if(o>8&&s.subarray)e.set(s.subarray(n,n+o),r);else for(var a=0;a0||i+r>2)}catch(r){throw r.code?new E.ErrnoError(Xe.convertNodeCode(r)):r}return e.mode},realPath:function(t){for(var e=[];t.parent!==t;)e.push(t.name),t=t.parent;return e.push(t.mount.opts.root),e.reverse(),gt.join.apply(null,e)},flagsForNode:function(t){t&=~2097152,t&=~2048,t&=~32768,t&=~524288;var e=0;for(var r in Xe.flagsForNodeMap)t&r&&(e|=Xe.flagsForNodeMap[r],t^=r);if(t)throw new E.ErrnoError(28);return e},node_ops:{getattr:function(t){var e=Xe.realPath(t),r;try{r=st.lstatSync(e)}catch(i){throw i.code?new E.ErrnoError(Xe.convertNodeCode(i)):i}return Xe.isWindows&&!r.blksize&&(r.blksize=4096),Xe.isWindows&&!r.blocks&&(r.blocks=(r.size+r.blksize-1)/r.blksize|0),{dev:r.dev,ino:r.ino,mode:r.mode,nlink:r.nlink,uid:r.uid,gid:r.gid,rdev:r.rdev,size:r.size,atime:r.atime,mtime:r.mtime,ctime:r.ctime,blksize:r.blksize,blocks:r.blocks}},setattr:function(t,e){var r=Xe.realPath(t);try{if(e.mode!==void 0&&(st.chmodSync(r,e.mode),t.mode=e.mode),e.timestamp!==void 0){var i=new Date(e.timestamp);st.utimesSync(r,i,i)}e.size!==void 0&&st.truncateSync(r,e.size)}catch(n){throw n.code?new E.ErrnoError(Xe.convertNodeCode(n)):n}},lookup:function(t,e){var r=gt.join2(Xe.realPath(t),e),i=Xe.getMode(r);return Xe.createNode(t,e,i)},mknod:function(t,e,r,i){var n=Xe.createNode(t,e,r,i),s=Xe.realPath(n);try{E.isDir(n.mode)?st.mkdirSync(s,n.mode):st.writeFileSync(s,"",{mode:n.mode})}catch(o){throw o.code?new E.ErrnoError(Xe.convertNodeCode(o)):o}return n},rename:function(t,e,r){var i=Xe.realPath(t),n=gt.join2(Xe.realPath(e),r);try{st.renameSync(i,n)}catch(s){throw s.code?new E.ErrnoError(Xe.convertNodeCode(s)):s}t.name=r},unlink:function(t,e){var r=gt.join2(Xe.realPath(t),e);try{st.unlinkSync(r)}catch(i){throw i.code?new E.ErrnoError(Xe.convertNodeCode(i)):i}},rmdir:function(t,e){var r=gt.join2(Xe.realPath(t),e);try{st.rmdirSync(r)}catch(i){throw i.code?new E.ErrnoError(Xe.convertNodeCode(i)):i}},readdir:function(t){var e=Xe.realPath(t);try{return st.readdirSync(e)}catch(r){throw r.code?new E.ErrnoError(Xe.convertNodeCode(r)):r}},symlink:function(t,e,r){var i=gt.join2(Xe.realPath(t),e);try{st.symlinkSync(r,i)}catch(n){throw n.code?new E.ErrnoError(Xe.convertNodeCode(n)):n}},readlink:function(t){var e=Xe.realPath(t);try{return e=st.readlinkSync(e),e=WD.relative(WD.resolve(t.mount.opts.root),e),e}catch(r){throw r.code?new E.ErrnoError(Xe.convertNodeCode(r)):r}}},stream_ops:{open:function(t){var e=Xe.realPath(t.node);try{E.isFile(t.node.mode)&&(t.nfd=st.openSync(e,Xe.flagsForNode(t.flags)))}catch(r){throw r.code?new E.ErrnoError(Xe.convertNodeCode(r)):r}},close:function(t){try{E.isFile(t.node.mode)&&t.nfd&&st.closeSync(t.nfd)}catch(e){throw e.code?new E.ErrnoError(Xe.convertNodeCode(e)):e}},read:function(t,e,r,i,n){if(i===0)return 0;try{return st.readSync(t.nfd,Xe.bufferFrom(e.buffer),r,i,n)}catch(s){throw new E.ErrnoError(Xe.convertNodeCode(s))}},write:function(t,e,r,i,n){try{return st.writeSync(t.nfd,Xe.bufferFrom(e.buffer),r,i,n)}catch(s){throw new E.ErrnoError(Xe.convertNodeCode(s))}},llseek:function(t,e,r){var i=e;if(r===1)i+=t.position;else if(r===2&&E.isFile(t.node.mode))try{var n=st.fstatSync(t.nfd);i+=n.size}catch(s){throw new E.ErrnoError(Xe.convertNodeCode(s))}if(i<0)throw new E.ErrnoError(28);return i},mmap:function(t,e,r,i,n,s){if(e!==0)throw new E.ErrnoError(28);if(!E.isFile(t.node.mode))throw new E.ErrnoError(43);var o=JD(r);return Xe.stream_ops.read(t,ui,o,r,i),{ptr:o,allocated:!0}},msync:function(t,e,r,i,n){if(!E.isFile(t.node.mode))throw new E.ErrnoError(43);if(n&2)return 0;var s=Xe.stream_ops.write(t,e,0,i,r,!1);return 0}}},rG={lookupPath:function(t){return{path:t,node:{mode:Xe.getMode(t)}}},createStandardStreams:function(){E.streams[0]={fd:0,nfd:0,position:0,path:"",flags:0,tty:!0,seekable:!1};for(var t=1;t<3;t++)E.streams[t]={fd:t,nfd:t,position:0,path:"",flags:577,tty:!0,seekable:!1}},cwd:function(){return process.cwd()},chdir:function(){process.chdir.apply(void 0,arguments)},mknod:function(t,e){E.isDir(t)?st.mkdirSync(t,e):st.writeFileSync(t,"",{mode:e})},mkdir:function(){st.mkdirSync.apply(void 0,arguments)},symlink:function(){st.symlinkSync.apply(void 0,arguments)},rename:function(){st.renameSync.apply(void 0,arguments)},rmdir:function(){st.rmdirSync.apply(void 0,arguments)},readdir:function(){st.readdirSync.apply(void 0,arguments)},unlink:function(){st.unlinkSync.apply(void 0,arguments)},readlink:function(){return st.readlinkSync.apply(void 0,arguments)},stat:function(){return st.statSync.apply(void 0,arguments)},lstat:function(){return st.lstatSync.apply(void 0,arguments)},chmod:function(){st.chmodSync.apply(void 0,arguments)},fchmod:function(){st.fchmodSync.apply(void 0,arguments)},chown:function(){st.chownSync.apply(void 0,arguments)},fchown:function(){st.fchownSync.apply(void 0,arguments)},truncate:function(){st.truncateSync.apply(void 0,arguments)},ftruncate:function(t,e){if(e<0)throw new E.ErrnoError(28);st.ftruncateSync.apply(void 0,arguments)},utime:function(){st.utimesSync.apply(void 0,arguments)},open:function(t,e,r,i){typeof e=="string"&&(e=BA.modeStringToFlags(e));var n=st.openSync(t,Xe.flagsForNode(e),r),s=i!=null?i:E.nextfd(n),o={fd:s,nfd:n,position:0,path:t,flags:e,seekable:!0};return E.streams[s]=o,o},close:function(t){t.stream_ops||st.closeSync(t.nfd),E.closeStream(t.fd)},llseek:function(t,e,r){if(t.stream_ops)return BA.llseek(t,e,r);var i=e;if(r===1)i+=t.position;else if(r===2)i+=st.fstatSync(t.nfd).size;else if(r!==0)throw new E.ErrnoError(dc.EINVAL);if(i<0)throw new E.ErrnoError(dc.EINVAL);return t.position=i,i},read:function(t,e,r,i,n){if(t.stream_ops)return BA.read(t,e,r,i,n);var s=typeof n!="undefined";!s&&t.seekable&&(n=t.position);var o=st.readSync(t.nfd,Xe.bufferFrom(e.buffer),r,i,n);return s||(t.position+=o),o},write:function(t,e,r,i,n){if(t.stream_ops)return BA.write(t,e,r,i,n);t.flags&+"1024"&&E.llseek(t,0,+"2");var s=typeof n!="undefined";!s&&t.seekable&&(n=t.position);var o=st.writeSync(t.nfd,Xe.bufferFrom(e.buffer),r,i,n);return s||(t.position+=o),o},allocate:function(){throw new E.ErrnoError(dc.EOPNOTSUPP)},mmap:function(t,e,r,i,n,s){if(t.stream_ops)return BA.mmap(t,e,r,i,n,s);if(e!==0)throw new E.ErrnoError(28);var o=JD(r);return E.read(t,ui,o,r,i),{ptr:o,allocated:!0}},msync:function(t,e,r,i,n){return t.stream_ops?BA.msync(t,e,r,i,n):(n&2||E.write(t,e,0,i,r),0)},munmap:function(){return 0},ioctl:function(){throw new E.ErrnoError(dc.ENOTTY)}},E={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(t,e){if(t=eo.resolve(E.cwd(),t),e=e||{},!t)return{path:"",node:null};var r={follow_mount:!0,recurse_count:0};for(var i in r)e[i]===void 0&&(e[i]=r[i]);if(e.recurse_count>8)throw new E.ErrnoError(32);for(var n=gt.normalizeArray(t.split("/").filter(function(f){return!!f}),!1),s=E.root,o="/",a=0;a40)throw new E.ErrnoError(32)}}return{path:o,node:s}},getPath:function(t){for(var e;;){if(E.isRoot(t)){var r=t.mount.mountpoint;return e?r[r.length-1]!=="/"?r+"/"+e:r+e:r}e=e?t.name+"/"+e:t.name,t=t.parent}},hashName:function(t,e){for(var r=0,i=0;i>>0)%E.nameTable.length},hashAddNode:function(t){var e=E.hashName(t.parent.id,t.name);t.name_next=E.nameTable[e],E.nameTable[e]=t},hashRemoveNode:function(t){var e=E.hashName(t.parent.id,t.name);if(E.nameTable[e]===t)E.nameTable[e]=t.name_next;else for(var r=E.nameTable[e];r;){if(r.name_next===t){r.name_next=t.name_next;break}r=r.name_next}},lookupNode:function(t,e){var r=E.mayLookup(t);if(r)throw new E.ErrnoError(r,t);for(var i=E.hashName(t.id,e),n=E.nameTable[i];n;n=n.name_next){var s=n.name;if(n.parent.id===t.id&&s===e)return n}return E.lookup(t,e)},createNode:function(t,e,r,i){var n=new E.FSNode(t,e,r,i);return E.hashAddNode(n),n},destroyNode:function(t){E.hashRemoveNode(t)},isRoot:function(t){return t===t.parent},isMountpoint:function(t){return!!t.mounted},isFile:function(t){return(t&61440)==32768},isDir:function(t){return(t&61440)==16384},isLink:function(t){return(t&61440)==40960},isChrdev:function(t){return(t&61440)==8192},isBlkdev:function(t){return(t&61440)==24576},isFIFO:function(t){return(t&61440)==4096},isSocket:function(t){return(t&49152)==49152},flagModes:{r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},modeStringToFlags:function(t){var e=E.flagModes[t];if(typeof e=="undefined")throw new Error("Unknown file open mode: "+t);return e},flagsToPermissionString:function(t){var e=["r","w","rw"][t&3];return t&512&&(e+="w"),e},nodePermissions:function(t,e){return E.ignorePermissions?0:e.includes("r")&&!(t.mode&292)||e.includes("w")&&!(t.mode&146)||e.includes("x")&&!(t.mode&73)?2:0},mayLookup:function(t){var e=E.nodePermissions(t,"x");return e||(t.node_ops.lookup?0:2)},mayCreate:function(t,e){try{var r=E.lookupNode(t,e);return 20}catch(i){}return E.nodePermissions(t,"wx")},mayDelete:function(t,e,r){var i;try{i=E.lookupNode(t,e)}catch(s){return s.errno}var n=E.nodePermissions(t,"wx");if(n)return n;if(r){if(!E.isDir(i.mode))return 54;if(E.isRoot(i)||E.getPath(i)===E.cwd())return 10}else if(E.isDir(i.mode))return 31;return 0},mayOpen:function(t,e){return t?E.isLink(t.mode)?32:E.isDir(t.mode)&&(E.flagsToPermissionString(e)!=="r"||e&512)?31:E.nodePermissions(t,E.flagsToPermissionString(e)):44},MAX_OPEN_FDS:4096,nextfd:function(t,e){t=t||0,e=e||E.MAX_OPEN_FDS;for(var r=t;r<=e;r++)if(!E.streams[r])return r;throw new E.ErrnoError(33)},getStream:function(t){return E.streams[t]},createStream:function(t,e,r){E.FSStream||(E.FSStream=function(){},E.FSStream.prototype={object:{get:function(){return this.node},set:function(o){this.node=o}},isRead:{get:function(){return(this.flags&2097155)!=1}},isWrite:{get:function(){return(this.flags&2097155)!=0}},isAppend:{get:function(){return this.flags&1024}}});var i=new E.FSStream;for(var n in t)i[n]=t[n];t=i;var s=E.nextfd(e,r);return t.fd=s,E.streams[s]=t,t},closeStream:function(t){E.streams[t]=null},chrdev_stream_ops:{open:function(t){var e=E.getDevice(t.node.rdev);t.stream_ops=e.stream_ops,t.stream_ops.open&&t.stream_ops.open(t)},llseek:function(){throw new E.ErrnoError(70)}},major:function(t){return t>>8},minor:function(t){return t&255},makedev:function(t,e){return t<<8|e},registerDevice:function(t,e){E.devices[t]={stream_ops:e}},getDevice:function(t){return E.devices[t]},getMounts:function(t){for(var e=[],r=[t];r.length;){var i=r.pop();e.push(i),r.push.apply(r,i.mounts)}return e},syncfs:function(t,e){typeof t=="function"&&(e=t,t=!1),E.syncFSRequests++,E.syncFSRequests>1&&Wr("warning: "+E.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work");var r=E.getMounts(E.root.mount),i=0;function n(o){return E.syncFSRequests--,e(o)}function s(o){if(o)return s.errored?void 0:(s.errored=!0,n(o));++i>=r.length&&n(null)}r.forEach(function(o){if(!o.type.syncfs)return s(null);o.type.syncfs(o,t,s)})},mount:function(t,e,r){var i=r==="/",n=!r,s;if(i&&E.root)throw new E.ErrnoError(10);if(!i&&!n){var o=E.lookupPath(r,{follow_mount:!1});if(r=o.path,s=o.node,E.isMountpoint(s))throw new E.ErrnoError(10);if(!E.isDir(s.mode))throw new E.ErrnoError(54)}var a={type:t,opts:e,mountpoint:r,mounts:[]},l=t.mount(a);return l.mount=a,a.root=l,i?E.root=l:s&&(s.mounted=a,s.mount&&s.mount.mounts.push(a)),l},unmount:function(t){var e=E.lookupPath(t,{follow_mount:!1});if(!E.isMountpoint(e.node))throw new E.ErrnoError(28);var r=e.node,i=r.mounted,n=E.getMounts(i);Object.keys(E.nameTable).forEach(function(o){for(var a=E.nameTable[o];a;){var l=a.name_next;n.includes(a.mount)&&E.destroyNode(a),a=l}}),r.mounted=null;var s=r.mount.mounts.indexOf(i);r.mount.mounts.splice(s,1)},lookup:function(t,e){return t.node_ops.lookup(t,e)},mknod:function(t,e,r){var i=E.lookupPath(t,{parent:!0}),n=i.node,s=gt.basename(t);if(!s||s==="."||s==="..")throw new E.ErrnoError(28);var o=E.mayCreate(n,s);if(o)throw new E.ErrnoError(o);if(!n.node_ops.mknod)throw new E.ErrnoError(63);return n.node_ops.mknod(n,s,e,r)},create:function(t,e){return e=e!==void 0?e:438,e&=4095,e|=32768,E.mknod(t,e,0)},mkdir:function(t,e){return e=e!==void 0?e:511,e&=511|512,e|=16384,E.mknod(t,e,0)},mkdirTree:function(t,e){for(var r=t.split("/"),i="",n=0;nthis.length-1||f<0)){var h=f%this.chunkSize,p=f/this.chunkSize|0;return this.getter(p)[h]}},s.prototype.setDataGetter=function(f){this.getter=f},s.prototype.cacheLength=function(){var f=new XMLHttpRequest;if(f.open("HEAD",r,!1),f.send(null),!(f.status>=200&&f.status<300||f.status===304))throw new Error("Couldn't load "+r+". Status: "+f.status);var h=Number(f.getResponseHeader("Content-length")),p,m=(p=f.getResponseHeader("Accept-Ranges"))&&p==="bytes",I=(p=f.getResponseHeader("Content-Encoding"))&&p==="gzip",y=1024*1024;m||(y=h);var B=function(F,L){if(F>L)throw new Error("invalid range ("+F+", "+L+") or no bytes requested!");if(L>h-1)throw new Error("only "+h+" bytes available! programmer error!");var T=new XMLHttpRequest;if(T.open("GET",r,!1),h!==y&&T.setRequestHeader("Range","bytes="+F+"-"+L),typeof Uint8Array!="undefined"&&(T.responseType="arraybuffer"),T.overrideMimeType&&T.overrideMimeType("text/plain; charset=x-user-defined"),T.send(null),!(T.status>=200&&T.status<300||T.status===304))throw new Error("Couldn't load "+r+". Status: "+T.status);return T.response!==void 0?new Uint8Array(T.response||[]):qD(T.responseText||"",!0)},x=this;x.setDataGetter(function(F){var L=F*y,T=(F+1)*y-1;if(T=Math.min(T,h-1),typeof x.chunks[F]=="undefined"&&(x.chunks[F]=B(L,T)),typeof x.chunks[F]=="undefined")throw new Error("doXHR failed!");return x.chunks[F]}),(I||!h)&&(y=h=1,h=this.getter(0).length,y=h,cI("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=h,this._chunkSize=y,this.lengthKnown=!0},typeof XMLHttpRequest!="undefined"){if(!Oj)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var o=new s;Object.defineProperties(o,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var a={isDevice:!1,contents:o}}else var a={isDevice:!1,url:r};var l=E.createFile(t,e,a,i,n);a.contents?l.contents=a.contents:a.url&&(l.contents=null,l.url=a.url),Object.defineProperties(l,{usedBytes:{get:function(){return this.contents.length}}});var c={},u=Object.keys(l.stream_ops);return u.forEach(function(g){var f=l.stream_ops[g];c[g]=function(){return E.forceLoadFile(l),f.apply(null,arguments)}}),c.read=function(f,h,p,m,I){E.forceLoadFile(l);var y=f.node.contents;if(I>=y.length)return 0;var B=Math.min(y.length-I,m);if(y.slice)for(var x=0;x>2]=i.dev,je[r+4>>2]=0,je[r+8>>2]=i.ino,je[r+12>>2]=i.mode,je[r+16>>2]=i.nlink,je[r+20>>2]=i.uid,je[r+24>>2]=i.gid,je[r+28>>2]=i.rdev,je[r+32>>2]=0,$s=[i.size>>>0,(xr=i.size,+Math.abs(xr)>=1?xr>0?(Math.min(+Math.floor(xr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((xr-+(~~xr>>>0))/4294967296)>>>0:0)],je[r+40>>2]=$s[0],je[r+44>>2]=$s[1],je[r+48>>2]=4096,je[r+52>>2]=i.blocks,je[r+56>>2]=i.atime.getTime()/1e3|0,je[r+60>>2]=0,je[r+64>>2]=i.mtime.getTime()/1e3|0,je[r+68>>2]=0,je[r+72>>2]=i.ctime.getTime()/1e3|0,je[r+76>>2]=0,$s=[i.ino>>>0,(xr=i.ino,+Math.abs(xr)>=1?xr>0?(Math.min(+Math.floor(xr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((xr-+(~~xr>>>0))/4294967296)>>>0:0)],je[r+80>>2]=$s[0],je[r+84>>2]=$s[1],0},doMsync:function(t,e,r,i,n){var s=pc.slice(t,t+r);E.msync(e,s,n,r,i)},doMkdir:function(t,e){return t=gt.normalize(t),t[t.length-1]==="/"&&(t=t.substr(0,t.length-1)),E.mkdir(t,e,0),0},doMknod:function(t,e,r){switch(e&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return E.mknod(t,e,r),0},doReadlink:function(t,e,r){if(r<=0)return-28;var i=E.readlink(t),n=Math.min(r,fI(i)),s=ui[e+n];return qj(i,e,r+1),ui[e+n]=s,n},doAccess:function(t,e){if(e&~7)return-28;var r,i=E.lookupPath(t,{follow:!0});if(r=i.node,!r)return-44;var n="";return e&4&&(n+="r"),e&2&&(n+="w"),e&1&&(n+="x"),n&&E.nodePermissions(r,n)?-2:0},doDup:function(t,e,r){var i=E.getStream(r);return i&&E.close(i),E.open(t,e,0,r,r).fd},doReadv:function(t,e,r,i){for(var n=0,s=0;s>2],a=je[e+(s*8+4)>>2],l=E.read(t,ui,o,a,i);if(l<0)return-1;if(n+=l,l>2],a=je[e+(s*8+4)>>2],l=E.write(t,ui,o,a,i);if(l<0)return-1;n+=l}return n},varargs:void 0,get:function(){wt.varargs+=4;var t=je[wt.varargs-4>>2];return t},getStr:function(t){var e=Gj(t);return e},getStreamFromFD:function(t){var e=E.getStream(t);if(!e)throw new E.ErrnoError(8);return e},get64:function(t,e){return t}};function GIe(t,e){try{return t=wt.getStr(t),E.chmod(t,e),0}catch(r){return(typeof E=="undefined"||!(r instanceof E.ErrnoError))&&gr(r),-r.errno}}function JIe(t){return je[qIe()>>2]=t,t}function WIe(t,e,r){wt.varargs=r;try{var i=wt.getStreamFromFD(t);switch(e){case 0:{var n=wt.get();if(n<0)return-28;var s;return s=E.open(i.path,i.flags,0,n),s.fd}case 1:case 2:return 0;case 3:return i.flags;case 4:{var n=wt.get();return i.flags|=n,0}case 12:{var n=wt.get(),o=0;return TD[n+o>>1]=2,0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:return JIe(28),-1;default:return-28}}catch(a){return(typeof E=="undefined"||!(a instanceof E.ErrnoError))&&gr(a),-a.errno}}function zIe(t,e){try{var r=wt.getStreamFromFD(t);return wt.doStat(E.stat,r.path,e)}catch(i){return(typeof E=="undefined"||!(i instanceof E.ErrnoError))&&gr(i),-i.errno}}function VIe(t,e,r){wt.varargs=r;try{var i=wt.getStreamFromFD(t);switch(e){case 21509:case 21505:return i.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return i.tty?0:-59;case 21519:{if(!i.tty)return-59;var n=wt.get();return je[n>>2]=0,0}case 21520:return i.tty?-28:-59;case 21531:{var n=wt.get();return E.ioctl(i,e,n)}case 21523:return i.tty?0:-59;case 21524:return i.tty?0:-59;default:gr("bad ioctl syscall "+e)}}catch(s){return(typeof E=="undefined"||!(s instanceof E.ErrnoError))&&gr(s),-s.errno}}function XIe(t,e,r){wt.varargs=r;try{var i=wt.getStr(t),n=r?wt.get():0,s=E.open(i,e,n);return s.fd}catch(o){return(typeof E=="undefined"||!(o instanceof E.ErrnoError))&&gr(o),-o.errno}}function ZIe(t,e){try{return t=wt.getStr(t),e=wt.getStr(e),E.rename(t,e),0}catch(r){return(typeof E=="undefined"||!(r instanceof E.ErrnoError))&&gr(r),-r.errno}}function _Ie(t){try{return t=wt.getStr(t),E.rmdir(t),0}catch(e){return(typeof E=="undefined"||!(e instanceof E.ErrnoError))&&gr(e),-e.errno}}function $Ie(t,e){try{return t=wt.getStr(t),wt.doStat(E.stat,t,e)}catch(r){return(typeof E=="undefined"||!(r instanceof E.ErrnoError))&&gr(r),-r.errno}}function eEe(t){try{return t=wt.getStr(t),E.unlink(t),0}catch(e){return(typeof E=="undefined"||!(e instanceof E.ErrnoError))&&gr(e),-e.errno}}function tEe(t,e,r){pc.copyWithin(t,e,e+r)}function rEe(t){try{return uI.grow(t-UD.byteLength+65535>>>16),Vj(uI.buffer),1}catch(e){}}function iEe(t){var e=pc.length;t=t>>>0;var r=2147483648;if(t>r)return!1;for(var i=1;i<=4;i*=2){var n=e*(1+.2/i);n=Math.min(n,t+100663296);var s=Math.min(r,SIe(Math.max(t,n),65536)),o=rEe(s);if(o)return!0}return!1}function nEe(t){try{var e=wt.getStreamFromFD(t);return E.close(e),0}catch(r){return(typeof E=="undefined"||!(r instanceof E.ErrnoError))&&gr(r),r.errno}}function sEe(t,e){try{var r=wt.getStreamFromFD(t),i=r.tty?2:E.isDir(r.mode)?3:E.isLink(r.mode)?7:4;return ui[e>>0]=i,0}catch(n){return(typeof E=="undefined"||!(n instanceof E.ErrnoError))&&gr(n),n.errno}}function oEe(t,e,r,i){try{var n=wt.getStreamFromFD(t),s=wt.doReadv(n,e,r);return je[i>>2]=s,0}catch(o){return(typeof E=="undefined"||!(o instanceof E.ErrnoError))&&gr(o),o.errno}}function aEe(t,e,r,i,n){try{var s=wt.getStreamFromFD(t),o=4294967296,a=r*o+(e>>>0),l=9007199254740992;return a<=-l||a>=l?-61:(E.llseek(s,a,i),$s=[s.position>>>0,(xr=s.position,+Math.abs(xr)>=1?xr>0?(Math.min(+Math.floor(xr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((xr-+(~~xr>>>0))/4294967296)>>>0:0)],je[n>>2]=$s[0],je[n+4>>2]=$s[1],s.getdents&&a===0&&i===0&&(s.getdents=null),0)}catch(c){return(typeof E=="undefined"||!(c instanceof E.ErrnoError))&&gr(c),c.errno}}function AEe(t,e,r,i){try{var n=wt.getStreamFromFD(t),s=wt.doWritev(n,e,r);return je[i>>2]=s,0}catch(o){return(typeof E=="undefined"||!(o instanceof E.ErrnoError))&&gr(o),o.errno}}function lEe(t){IIe(t)}function cEe(t){var e=Date.now()/1e3|0;return t&&(je[t>>2]=e),e}function zD(){if(zD.called)return;zD.called=!0;var t=new Date().getFullYear(),e=new Date(t,0,1),r=new Date(t,6,1),i=e.getTimezoneOffset(),n=r.getTimezoneOffset(),s=Math.max(i,n);je[gEe()>>2]=s*60,je[uEe()>>2]=Number(i!=n);function o(g){var f=g.toTimeString().match(/\(([A-Za-z ]+)\)$/);return f?f[1]:"GMT"}var a=o(e),l=o(r),c=KD(a),u=KD(l);n>2]=c,je[pI()+4>>2]=u):(je[pI()>>2]=u,je[pI()+4>>2]=c)}function fEe(t){zD();var e=Date.UTC(je[t+20>>2]+1900,je[t+16>>2],je[t+12>>2],je[t+8>>2],je[t+4>>2],je[t>>2],0),r=new Date(e);je[t+24>>2]=r.getUTCDay();var i=Date.UTC(r.getUTCFullYear(),0,1,0,0,0,0),n=(r.getTime()-i)/(1e3*60*60*24)|0;return je[t+28>>2]=n,r.getTime()/1e3|0}var iG=function(t,e,r,i){t||(t=this),this.parent=t,this.mount=t.mount,this.mounted=null,this.id=E.nextInode++,this.name=e,this.mode=r,this.node_ops={},this.stream_ops={},this.rdev=i},dI=292|73,CI=146;Object.defineProperties(iG.prototype,{read:{get:function(){return(this.mode&dI)===dI},set:function(t){t?this.mode|=dI:this.mode&=~dI}},write:{get:function(){return(this.mode&CI)===CI},set:function(t){t?this.mode|=CI:this.mode&=~CI}},isFolder:{get:function(){return E.isDir(this.mode)}},isDevice:{get:function(){return E.isChrdev(this.mode)}}});E.FSNode=iG;E.staticInit();EA&&(st=Lj,WD=require("path"),Xe.staticInit());var st,WD;if(EA){nG=function(t){return function(){try{return t.apply(this,arguments)}catch(e){throw e.code?new E.ErrnoError(dc[e.code]):e}}},BA=Object.assign({},E);for(VD in rG)E[VD]=nG(rG[VD])}else throw new Error("NODERAWFS is currently only supported on Node.js environment.");var nG,BA,VD;function qD(t,e,r){var i=r>0?r:fI(t)+1,n=new Array(i),s=gI(t,n,0,n.length);return e&&(n.length=s),n}var hEe=typeof atob=="function"?atob:function(t){var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r="",i,n,s,o,a,l,c,u=0;t=t.replace(/[^A-Za-z0-9\+\/\=]/g,"");do o=e.indexOf(t.charAt(u++)),a=e.indexOf(t.charAt(u++)),l=e.indexOf(t.charAt(u++)),c=e.indexOf(t.charAt(u++)),i=o<<2|a>>4,n=(a&15)<<4|l>>2,s=(l&3)<<6|c,r=r+String.fromCharCode(i),l!==64&&(r=r+String.fromCharCode(n)),c!==64&&(r=r+String.fromCharCode(s));while(u0||(FIe(),yA>0))return;function e(){mI||(mI=!0,ne.calledRun=!0,!Hj&&(RIe(),ne.onRuntimeInitialized&&ne.onRuntimeInitialized(),NIe()))}ne.setStatus?(ne.setStatus("Running..."),setTimeout(function(){setTimeout(function(){ne.setStatus("")},1),e()},1)):e()}ne.run=XD;if(ne.preInit)for(typeof ne.preInit=="function"&&(ne.preInit=[ne.preInit]);ne.preInit.length>0;)ne.preInit.pop()();XD()});var AG=C((k7e,aG)=>{"use strict";function dEe(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function wA(t,e,r,i){this.message=t,this.expected=e,this.found=r,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,wA)}dEe(wA,Error);wA.buildMessage=function(t,e){var r={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g>",ue=pt(">>",!1),Be=">&",at=pt(">&",!1),mt=">",St=pt(">",!1),xn="<<<",Ii=pt("<<<",!1),Xt="<&",_i=pt("<&",!1),zn="<",_u=pt("<",!1),Kd=function(d){return{type:"argument",segments:[].concat(...d)}},xs=function(d){return d},$u="'",Ud=pt("'",!1),HB=function(d){return[{type:"text",text:d}]},eg='"',Yd=pt('"',!1),Hd=function(d){return d},jd=function(d){return{type:"arithmetic",arithmetic:d,quoted:!0}},jB=function(d){return{type:"shell",shell:d,quoted:!0}},GB=function(d){return V(P({type:"variable"},d),{quoted:!0})},tg=function(d){return{type:"text",text:d}},qB=function(d){return{type:"arithmetic",arithmetic:d,quoted:!1}},JB=function(d){return{type:"shell",shell:d,quoted:!1}},Gd=function(d){return V(P({type:"variable"},d),{quoted:!1})},WB=function(d){return{type:"glob",pattern:d}},_="\\",ks=pt("\\",!1),$i=vs(),en=function(d){return d},rg=/^[^']/,qd=Yr(["'"],!0,!1),El=function(d){return d.join("")},ig=/^[^$"]/,Jd=Yr(["$",'"'],!0,!1),ng="-",yl=pt("-",!1),sg="+",og=pt("+",!1),zB=".",VB=pt(".",!1),XB=function(d,b,k){return{type:"number",value:(d==="-"?-1:1)*parseFloat(b.join("")+"."+k.join(""))}},Wd=function(d,b){return{type:"number",value:(d==="-"?-1:1)*parseInt(b.join(""))}},zd=function(d){return P({type:"variable"},d)},ZB=function(d){return{type:"variable",name:d}},Vd=function(d){return d},Xd="*",Zd=pt("*",!1),_B=function(d,b){return{type:"multiplication",left:d,right:b}},$B="/",ew=pt("/",!1),tw=function(d,b){return{type:"division",left:d,right:b}},rw=function(d,b){return{type:"addition",left:d,right:b}},M=function(d,b){return{type:"subtraction",left:d,right:b}},it="$((",Bl=pt("$((",!1),Ti="))",ag=pt("))",!1),Te=function(d){return d},Oa="$(",_d=pt("$(",!1),aL=function(d){return d},Ta="${",$d=pt("${",!1),Tt=":-",Vn=pt(":-",!1),iw=function(d,b){return{name:d,defaultValue:b}},eC=":-}",So=pt(":-}",!1),tC=function(d){return{name:d,defaultValue:[]}},xo=function(d){return{name:d}},Ve="$",nw=pt("$",!1),rC=function(d){return e.isGlobPattern(d)},iC=function(d){return d},nC=/^[a-zA-Z0-9_]/,Ag=Yr([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),lg=function(){return ow()},cg=/^[$@*?#a-zA-Z0-9_\-]/,Ka=Yr(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),Ua=/^[(){}<>$|&; \t"']/,sw=Yr(["(",")","{","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),sC=/^[<>&; \t"']/,oC=Yr(["<",">","&",";"," "," ",'"',"'"],!1,!1),aC=/^[ \t]/,ko=Yr([" "," "],!1,!1),Q=0,Ne=0,Ya=[{line:1,column:1}],Ei=0,wl=[],be=0,Ps;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function ow(){return t.substring(Ne,Q)}function aw(){return K(Ne,Q)}function ug(d,b){throw b=b!==void 0?b:K(Ne,Q),Ce([Ql(d)],t.substring(Ne,Q),b)}function pr(d,b){throw b=b!==void 0?b:K(Ne,Q),Ee(d,b)}function pt(d,b){return{type:"literal",text:d,ignoreCase:b}}function Yr(d,b,k){return{type:"class",parts:d,inverted:b,ignoreCase:k}}function vs(){return{type:"any"}}function AC(){return{type:"end"}}function Ql(d){return{type:"other",description:d}}function S(d){var b=Ya[d],k;if(b)return b;for(k=d-1;!Ya[k];)k--;for(b=Ya[k],b={line:b.line,column:b.column};kEi&&(Ei=Q,wl=[]),wl.push(d))}function Ee(d,b){return new wA(d,null,null,b)}function Ce(d,b,k){return new wA(wA.buildMessage(d,b),d,b,k)}function Oe(){var d,b;return d=Q,b=rt(),b===r&&(b=null),b!==r&&(Ne=d,b=s(b)),d=b,d}function rt(){var d,b,k,Y,$;if(d=Q,b=Aw(),b!==r){for(k=[],Y=De();Y!==r;)k.push(Y),Y=De();k!==r?(Y=Fs(),Y!==r?($=Kt(),$===r&&($=null),$!==r?(Ne=d,b=o(b,Y,$),d=b):(Q=d,d=r)):(Q=d,d=r)):(Q=d,d=r)}else Q=d,d=r;if(d===r)if(d=Q,b=Aw(),b!==r){for(k=[],Y=De();Y!==r;)k.push(Y),Y=De();k!==r?(Y=Fs(),Y===r&&(Y=null),Y!==r?(Ne=d,b=a(b,Y),d=b):(Q=d,d=r)):(Q=d,d=r)}else Q=d,d=r;return d}function Kt(){var d,b,k,Y,$;for(d=Q,b=[],k=De();k!==r;)b.push(k),k=De();if(b!==r)if(k=rt(),k!==r){for(Y=[],$=De();$!==r;)Y.push($),$=De();Y!==r?(Ne=d,b=l(k),d=b):(Q=d,d=r)}else Q=d,d=r;else Q=d,d=r;return d}function Fs(){var d;return t.charCodeAt(Q)===59?(d=c,Q++):(d=r,be===0&&j(u)),d===r&&(t.charCodeAt(Q)===38?(d=g,Q++):(d=r,be===0&&j(f))),d}function Aw(){var d,b,k;return d=Q,b=AL(),b!==r?(k=Eoe(),k===r&&(k=null),k!==r?(Ne=d,b=h(b,k),d=b):(Q=d,d=r)):(Q=d,d=r),d}function Eoe(){var d,b,k,Y,$,ke,kt;for(d=Q,b=[],k=De();k!==r;)b.push(k),k=De();if(b!==r)if(k=yoe(),k!==r){for(Y=[],$=De();$!==r;)Y.push($),$=De();if(Y!==r)if($=Aw(),$!==r){for(ke=[],kt=De();kt!==r;)ke.push(kt),kt=De();ke!==r?(Ne=d,b=p(k,$),d=b):(Q=d,d=r)}else Q=d,d=r;else Q=d,d=r}else Q=d,d=r;else Q=d,d=r;return d}function yoe(){var d;return t.substr(Q,2)===m?(d=m,Q+=2):(d=r,be===0&&j(I)),d===r&&(t.substr(Q,2)===y?(d=y,Q+=2):(d=r,be===0&&j(B))),d}function AL(){var d,b,k;return d=Q,b=Qoe(),b!==r?(k=Boe(),k===r&&(k=null),k!==r?(Ne=d,b=x(b,k),d=b):(Q=d,d=r)):(Q=d,d=r),d}function Boe(){var d,b,k,Y,$,ke,kt;for(d=Q,b=[],k=De();k!==r;)b.push(k),k=De();if(b!==r)if(k=woe(),k!==r){for(Y=[],$=De();$!==r;)Y.push($),$=De();if(Y!==r)if($=AL(),$!==r){for(ke=[],kt=De();kt!==r;)ke.push(kt),kt=De();ke!==r?(Ne=d,b=F(k,$),d=b):(Q=d,d=r)}else Q=d,d=r;else Q=d,d=r}else Q=d,d=r;else Q=d,d=r;return d}function woe(){var d;return t.substr(Q,2)===L?(d=L,Q+=2):(d=r,be===0&&j(T)),d===r&&(t.charCodeAt(Q)===124?(d=v,Q++):(d=r,be===0&&j(q))),d}function lC(){var d,b,k,Y,$,ke;if(d=Q,b=dL(),b!==r)if(t.charCodeAt(Q)===61?(k=oe,Q++):(k=r,be===0&&j(U)),k!==r)if(Y=cL(),Y!==r){for($=[],ke=De();ke!==r;)$.push(ke),ke=De();$!==r?(Ne=d,b=A(b,Y),d=b):(Q=d,d=r)}else Q=d,d=r;else Q=d,d=r;else Q=d,d=r;if(d===r)if(d=Q,b=dL(),b!==r)if(t.charCodeAt(Q)===61?(k=oe,Q++):(k=r,be===0&&j(U)),k!==r){for(Y=[],$=De();$!==r;)Y.push($),$=De();Y!==r?(Ne=d,b=W(b),d=b):(Q=d,d=r)}else Q=d,d=r;else Q=d,d=r;return d}function Qoe(){var d,b,k,Y,$,ke,kt,bl,Hr,yi,Po;for(d=Q,b=[],k=De();k!==r;)b.push(k),k=De();if(b!==r)if(t.charCodeAt(Q)===40?(k=ee,Q++):(k=r,be===0&&j(ie)),k!==r){for(Y=[],$=De();$!==r;)Y.push($),$=De();if(Y!==r)if($=rt(),$!==r){for(ke=[],kt=De();kt!==r;)ke.push(kt),kt=De();if(ke!==r)if(t.charCodeAt(Q)===41?(kt=J,Q++):(kt=r,be===0&&j(R)),kt!==r){for(bl=[],Hr=De();Hr!==r;)bl.push(Hr),Hr=De();if(bl!==r){for(Hr=[],yi=gg();yi!==r;)Hr.push(yi),yi=gg();if(Hr!==r){for(yi=[],Po=De();Po!==r;)yi.push(Po),Po=De();yi!==r?(Ne=d,b=ve($,Hr),d=b):(Q=d,d=r)}else Q=d,d=r}else Q=d,d=r}else Q=d,d=r;else Q=d,d=r}else Q=d,d=r;else Q=d,d=r}else Q=d,d=r;else Q=d,d=r;if(d===r){for(d=Q,b=[],k=De();k!==r;)b.push(k),k=De();if(b!==r)if(t.charCodeAt(Q)===123?(k=Fe,Q++):(k=r,be===0&&j(Ke)),k!==r){for(Y=[],$=De();$!==r;)Y.push($),$=De();if(Y!==r)if($=rt(),$!==r){for(ke=[],kt=De();kt!==r;)ke.push(kt),kt=De();if(ke!==r)if(t.charCodeAt(Q)===125?(kt=qe,Q++):(kt=r,be===0&&j(te)),kt!==r){for(bl=[],Hr=De();Hr!==r;)bl.push(Hr),Hr=De();if(bl!==r){for(Hr=[],yi=gg();yi!==r;)Hr.push(yi),yi=gg();if(Hr!==r){for(yi=[],Po=De();Po!==r;)yi.push(Po),Po=De();yi!==r?(Ne=d,b=le($,Hr),d=b):(Q=d,d=r)}else Q=d,d=r}else Q=d,d=r}else Q=d,d=r;else Q=d,d=r}else Q=d,d=r;else Q=d,d=r}else Q=d,d=r;else Q=d,d=r;if(d===r){for(d=Q,b=[],k=De();k!==r;)b.push(k),k=De();if(b!==r){for(k=[],Y=lC();Y!==r;)k.push(Y),Y=lC();if(k!==r){for(Y=[],$=De();$!==r;)Y.push($),$=De();if(Y!==r){if($=[],ke=lL(),ke!==r)for(;ke!==r;)$.push(ke),ke=lL();else $=r;if($!==r){for(ke=[],kt=De();kt!==r;)ke.push(kt),kt=De();ke!==r?(Ne=d,b=Se(k,$),d=b):(Q=d,d=r)}else Q=d,d=r}else Q=d,d=r}else Q=d,d=r}else Q=d,d=r;if(d===r){for(d=Q,b=[],k=De();k!==r;)b.push(k),k=De();if(b!==r){if(k=[],Y=lC(),Y!==r)for(;Y!==r;)k.push(Y),Y=lC();else k=r;if(k!==r){for(Y=[],$=De();$!==r;)Y.push($),$=De();Y!==r?(Ne=d,b=fe(k),d=b):(Q=d,d=r)}else Q=d,d=r}else Q=d,d=r}}}return d}function boe(){var d,b,k,Y,$;for(d=Q,b=[],k=De();k!==r;)b.push(k),k=De();if(b!==r){if(k=[],Y=cC(),Y!==r)for(;Y!==r;)k.push(Y),Y=cC();else k=r;if(k!==r){for(Y=[],$=De();$!==r;)Y.push($),$=De();Y!==r?(Ne=d,b=Ie(k),d=b):(Q=d,d=r)}else Q=d,d=r}else Q=d,d=r;return d}function lL(){var d,b,k;for(d=Q,b=[],k=De();k!==r;)b.push(k),k=De();if(b!==r?(k=gg(),k!==r?(Ne=d,b=de(k),d=b):(Q=d,d=r)):(Q=d,d=r),d===r){for(d=Q,b=[],k=De();k!==r;)b.push(k),k=De();b!==r?(k=cC(),k!==r?(Ne=d,b=de(k),d=b):(Q=d,d=r)):(Q=d,d=r)}return d}function gg(){var d,b,k,Y,$;for(d=Q,b=[],k=De();k!==r;)b.push(k),k=De();return b!==r?(we.test(t.charAt(Q))?(k=t.charAt(Q),Q++):(k=r,be===0&&j(Z)),k===r&&(k=null),k!==r?(Y=Doe(),Y!==r?($=cC(),$!==r?(Ne=d,b=X(k,Y,$),d=b):(Q=d,d=r)):(Q=d,d=r)):(Q=d,d=r)):(Q=d,d=r),d}function Doe(){var d;return t.substr(Q,2)===Ae?(d=Ae,Q+=2):(d=r,be===0&&j(ue)),d===r&&(t.substr(Q,2)===Be?(d=Be,Q+=2):(d=r,be===0&&j(at)),d===r&&(t.charCodeAt(Q)===62?(d=mt,Q++):(d=r,be===0&&j(St)),d===r&&(t.substr(Q,3)===xn?(d=xn,Q+=3):(d=r,be===0&&j(Ii)),d===r&&(t.substr(Q,2)===Xt?(d=Xt,Q+=2):(d=r,be===0&&j(_i)),d===r&&(t.charCodeAt(Q)===60?(d=zn,Q++):(d=r,be===0&&j(_u))))))),d}function cC(){var d,b,k;for(d=Q,b=[],k=De();k!==r;)b.push(k),k=De();return b!==r?(k=cL(),k!==r?(Ne=d,b=de(k),d=b):(Q=d,d=r)):(Q=d,d=r),d}function cL(){var d,b,k;if(d=Q,b=[],k=uL(),k!==r)for(;k!==r;)b.push(k),k=uL();else b=r;return b!==r&&(Ne=d,b=Kd(b)),d=b,d}function uL(){var d,b;return d=Q,b=Soe(),b!==r&&(Ne=d,b=xs(b)),d=b,d===r&&(d=Q,b=xoe(),b!==r&&(Ne=d,b=xs(b)),d=b,d===r&&(d=Q,b=koe(),b!==r&&(Ne=d,b=xs(b)),d=b)),d}function Soe(){var d,b,k,Y;return d=Q,t.charCodeAt(Q)===39?(b=$u,Q++):(b=r,be===0&&j(Ud)),b!==r?(k=Poe(),k!==r?(t.charCodeAt(Q)===39?(Y=$u,Q++):(Y=r,be===0&&j(Ud)),Y!==r?(Ne=d,b=HB(k),d=b):(Q=d,d=r)):(Q=d,d=r)):(Q=d,d=r),d}function xoe(){var d,b,k,Y;if(d=Q,t.charCodeAt(Q)===34?(b=eg,Q++):(b=r,be===0&&j(Yd)),b!==r){for(k=[],Y=gL();Y!==r;)k.push(Y),Y=gL();k!==r?(t.charCodeAt(Q)===34?(Y=eg,Q++):(Y=r,be===0&&j(Yd)),Y!==r?(Ne=d,b=Hd(k),d=b):(Q=d,d=r)):(Q=d,d=r)}else Q=d,d=r;return d}function koe(){var d,b,k;if(d=Q,b=[],k=fL(),k!==r)for(;k!==r;)b.push(k),k=fL();else b=r;return b!==r&&(Ne=d,b=Hd(b)),d=b,d}function gL(){var d,b;return d=Q,b=hL(),b!==r&&(Ne=d,b=jd(b)),d=b,d===r&&(d=Q,b=pL(),b!==r&&(Ne=d,b=jB(b)),d=b,d===r&&(d=Q,b=cw(),b!==r&&(Ne=d,b=GB(b)),d=b,d===r&&(d=Q,b=voe(),b!==r&&(Ne=d,b=tg(b)),d=b))),d}function fL(){var d,b;return d=Q,b=hL(),b!==r&&(Ne=d,b=qB(b)),d=b,d===r&&(d=Q,b=pL(),b!==r&&(Ne=d,b=JB(b)),d=b,d===r&&(d=Q,b=cw(),b!==r&&(Ne=d,b=Gd(b)),d=b,d===r&&(d=Q,b=Roe(),b!==r&&(Ne=d,b=WB(b)),d=b,d===r&&(d=Q,b=Foe(),b!==r&&(Ne=d,b=tg(b)),d=b)))),d}function Poe(){var d,b,k,Y,$;for(d=Q,b=[],k=Q,t.charCodeAt(Q)===92?(Y=_,Q++):(Y=r,be===0&&j(ks)),Y!==r?(t.length>Q?($=t.charAt(Q),Q++):($=r,be===0&&j($i)),$!==r?(Ne=k,Y=en($),k=Y):(Q=k,k=r)):(Q=k,k=r),k===r&&(rg.test(t.charAt(Q))?(k=t.charAt(Q),Q++):(k=r,be===0&&j(qd)));k!==r;)b.push(k),k=Q,t.charCodeAt(Q)===92?(Y=_,Q++):(Y=r,be===0&&j(ks)),Y!==r?(t.length>Q?($=t.charAt(Q),Q++):($=r,be===0&&j($i)),$!==r?(Ne=k,Y=en($),k=Y):(Q=k,k=r)):(Q=k,k=r),k===r&&(rg.test(t.charAt(Q))?(k=t.charAt(Q),Q++):(k=r,be===0&&j(qd)));return b!==r&&(Ne=d,b=El(b)),d=b,d}function voe(){var d,b,k,Y,$;if(d=Q,b=[],k=Q,t.charCodeAt(Q)===92?(Y=_,Q++):(Y=r,be===0&&j(ks)),Y!==r?(t.length>Q?($=t.charAt(Q),Q++):($=r,be===0&&j($i)),$!==r?(Ne=k,Y=en($),k=Y):(Q=k,k=r)):(Q=k,k=r),k===r&&(ig.test(t.charAt(Q))?(k=t.charAt(Q),Q++):(k=r,be===0&&j(Jd))),k!==r)for(;k!==r;)b.push(k),k=Q,t.charCodeAt(Q)===92?(Y=_,Q++):(Y=r,be===0&&j(ks)),Y!==r?(t.length>Q?($=t.charAt(Q),Q++):($=r,be===0&&j($i)),$!==r?(Ne=k,Y=en($),k=Y):(Q=k,k=r)):(Q=k,k=r),k===r&&(ig.test(t.charAt(Q))?(k=t.charAt(Q),Q++):(k=r,be===0&&j(Jd)));else b=r;return b!==r&&(Ne=d,b=El(b)),d=b,d}function Foe(){var d,b,k,Y,$;if(d=Q,b=[],k=Q,t.charCodeAt(Q)===92?(Y=_,Q++):(Y=r,be===0&&j(ks)),Y!==r?(t.length>Q?($=t.charAt(Q),Q++):($=r,be===0&&j($i)),$!==r?(Ne=k,Y=en($),k=Y):(Q=k,k=r)):(Q=k,k=r),k===r&&(k=Q,Y=Q,be++,$=CL(),be--,$===r?Y=void 0:(Q=Y,Y=r),Y!==r?(t.length>Q?($=t.charAt(Q),Q++):($=r,be===0&&j($i)),$!==r?(Ne=k,Y=en($),k=Y):(Q=k,k=r)):(Q=k,k=r)),k!==r)for(;k!==r;)b.push(k),k=Q,t.charCodeAt(Q)===92?(Y=_,Q++):(Y=r,be===0&&j(ks)),Y!==r?(t.length>Q?($=t.charAt(Q),Q++):($=r,be===0&&j($i)),$!==r?(Ne=k,Y=en($),k=Y):(Q=k,k=r)):(Q=k,k=r),k===r&&(k=Q,Y=Q,be++,$=CL(),be--,$===r?Y=void 0:(Q=Y,Y=r),Y!==r?(t.length>Q?($=t.charAt(Q),Q++):($=r,be===0&&j($i)),$!==r?(Ne=k,Y=en($),k=Y):(Q=k,k=r)):(Q=k,k=r));else b=r;return b!==r&&(Ne=d,b=El(b)),d=b,d}function lw(){var d,b,k,Y,$,ke;if(d=Q,t.charCodeAt(Q)===45?(b=ng,Q++):(b=r,be===0&&j(yl)),b===r&&(t.charCodeAt(Q)===43?(b=sg,Q++):(b=r,be===0&&j(og))),b===r&&(b=null),b!==r){if(k=[],we.test(t.charAt(Q))?(Y=t.charAt(Q),Q++):(Y=r,be===0&&j(Z)),Y!==r)for(;Y!==r;)k.push(Y),we.test(t.charAt(Q))?(Y=t.charAt(Q),Q++):(Y=r,be===0&&j(Z));else k=r;if(k!==r)if(t.charCodeAt(Q)===46?(Y=zB,Q++):(Y=r,be===0&&j(VB)),Y!==r){if($=[],we.test(t.charAt(Q))?(ke=t.charAt(Q),Q++):(ke=r,be===0&&j(Z)),ke!==r)for(;ke!==r;)$.push(ke),we.test(t.charAt(Q))?(ke=t.charAt(Q),Q++):(ke=r,be===0&&j(Z));else $=r;$!==r?(Ne=d,b=XB(b,k,$),d=b):(Q=d,d=r)}else Q=d,d=r;else Q=d,d=r}else Q=d,d=r;if(d===r){if(d=Q,t.charCodeAt(Q)===45?(b=ng,Q++):(b=r,be===0&&j(yl)),b===r&&(t.charCodeAt(Q)===43?(b=sg,Q++):(b=r,be===0&&j(og))),b===r&&(b=null),b!==r){if(k=[],we.test(t.charAt(Q))?(Y=t.charAt(Q),Q++):(Y=r,be===0&&j(Z)),Y!==r)for(;Y!==r;)k.push(Y),we.test(t.charAt(Q))?(Y=t.charAt(Q),Q++):(Y=r,be===0&&j(Z));else k=r;k!==r?(Ne=d,b=Wd(b,k),d=b):(Q=d,d=r)}else Q=d,d=r;if(d===r&&(d=Q,b=cw(),b!==r&&(Ne=d,b=zd(b)),d=b,d===r&&(d=Q,b=hg(),b!==r&&(Ne=d,b=ZB(b)),d=b,d===r)))if(d=Q,t.charCodeAt(Q)===40?(b=ee,Q++):(b=r,be===0&&j(ie)),b!==r){for(k=[],Y=De();Y!==r;)k.push(Y),Y=De();if(k!==r)if(Y=uC(),Y!==r){for($=[],ke=De();ke!==r;)$.push(ke),ke=De();$!==r?(t.charCodeAt(Q)===41?(ke=J,Q++):(ke=r,be===0&&j(R)),ke!==r?(Ne=d,b=Vd(Y),d=b):(Q=d,d=r)):(Q=d,d=r)}else Q=d,d=r;else Q=d,d=r}else Q=d,d=r}return d}function fg(){var d,b,k,Y,$,ke;if(d=Q,b=lw(),b!==r){for(k=[],Y=De();Y!==r;)k.push(Y),Y=De();if(k!==r)if(t.charCodeAt(Q)===42?(Y=Xd,Q++):(Y=r,be===0&&j(Zd)),Y!==r){for($=[],ke=De();ke!==r;)$.push(ke),ke=De();$!==r?(ke=fg(),ke!==r?(Ne=d,b=_B(b,ke),d=b):(Q=d,d=r)):(Q=d,d=r)}else Q=d,d=r;else Q=d,d=r}else Q=d,d=r;if(d===r){if(d=Q,b=lw(),b!==r){for(k=[],Y=De();Y!==r;)k.push(Y),Y=De();if(k!==r)if(t.charCodeAt(Q)===47?(Y=$B,Q++):(Y=r,be===0&&j(ew)),Y!==r){for($=[],ke=De();ke!==r;)$.push(ke),ke=De();$!==r?(ke=fg(),ke!==r?(Ne=d,b=tw(b,ke),d=b):(Q=d,d=r)):(Q=d,d=r)}else Q=d,d=r;else Q=d,d=r}else Q=d,d=r;d===r&&(d=lw())}return d}function uC(){var d,b,k,Y,$,ke;if(d=Q,b=fg(),b!==r){for(k=[],Y=De();Y!==r;)k.push(Y),Y=De();if(k!==r)if(t.charCodeAt(Q)===43?(Y=sg,Q++):(Y=r,be===0&&j(og)),Y!==r){for($=[],ke=De();ke!==r;)$.push(ke),ke=De();$!==r?(ke=uC(),ke!==r?(Ne=d,b=rw(b,ke),d=b):(Q=d,d=r)):(Q=d,d=r)}else Q=d,d=r;else Q=d,d=r}else Q=d,d=r;if(d===r){if(d=Q,b=fg(),b!==r){for(k=[],Y=De();Y!==r;)k.push(Y),Y=De();if(k!==r)if(t.charCodeAt(Q)===45?(Y=ng,Q++):(Y=r,be===0&&j(yl)),Y!==r){for($=[],ke=De();ke!==r;)$.push(ke),ke=De();$!==r?(ke=uC(),ke!==r?(Ne=d,b=M(b,ke),d=b):(Q=d,d=r)):(Q=d,d=r)}else Q=d,d=r;else Q=d,d=r}else Q=d,d=r;d===r&&(d=fg())}return d}function hL(){var d,b,k,Y,$,ke;if(d=Q,t.substr(Q,3)===it?(b=it,Q+=3):(b=r,be===0&&j(Bl)),b!==r){for(k=[],Y=De();Y!==r;)k.push(Y),Y=De();if(k!==r)if(Y=uC(),Y!==r){for($=[],ke=De();ke!==r;)$.push(ke),ke=De();$!==r?(t.substr(Q,2)===Ti?(ke=Ti,Q+=2):(ke=r,be===0&&j(ag)),ke!==r?(Ne=d,b=Te(Y),d=b):(Q=d,d=r)):(Q=d,d=r)}else Q=d,d=r;else Q=d,d=r}else Q=d,d=r;return d}function pL(){var d,b,k,Y;return d=Q,t.substr(Q,2)===Oa?(b=Oa,Q+=2):(b=r,be===0&&j(_d)),b!==r?(k=rt(),k!==r?(t.charCodeAt(Q)===41?(Y=J,Q++):(Y=r,be===0&&j(R)),Y!==r?(Ne=d,b=aL(k),d=b):(Q=d,d=r)):(Q=d,d=r)):(Q=d,d=r),d}function cw(){var d,b,k,Y,$,ke;return d=Q,t.substr(Q,2)===Ta?(b=Ta,Q+=2):(b=r,be===0&&j($d)),b!==r?(k=hg(),k!==r?(t.substr(Q,2)===Tt?(Y=Tt,Q+=2):(Y=r,be===0&&j(Vn)),Y!==r?($=boe(),$!==r?(t.charCodeAt(Q)===125?(ke=qe,Q++):(ke=r,be===0&&j(te)),ke!==r?(Ne=d,b=iw(k,$),d=b):(Q=d,d=r)):(Q=d,d=r)):(Q=d,d=r)):(Q=d,d=r)):(Q=d,d=r),d===r&&(d=Q,t.substr(Q,2)===Ta?(b=Ta,Q+=2):(b=r,be===0&&j($d)),b!==r?(k=hg(),k!==r?(t.substr(Q,3)===eC?(Y=eC,Q+=3):(Y=r,be===0&&j(So)),Y!==r?(Ne=d,b=tC(k),d=b):(Q=d,d=r)):(Q=d,d=r)):(Q=d,d=r),d===r&&(d=Q,t.substr(Q,2)===Ta?(b=Ta,Q+=2):(b=r,be===0&&j($d)),b!==r?(k=hg(),k!==r?(t.charCodeAt(Q)===125?(Y=qe,Q++):(Y=r,be===0&&j(te)),Y!==r?(Ne=d,b=xo(k),d=b):(Q=d,d=r)):(Q=d,d=r)):(Q=d,d=r),d===r&&(d=Q,t.charCodeAt(Q)===36?(b=Ve,Q++):(b=r,be===0&&j(nw)),b!==r?(k=hg(),k!==r?(Ne=d,b=xo(k),d=b):(Q=d,d=r)):(Q=d,d=r)))),d}function Roe(){var d,b,k;return d=Q,b=Loe(),b!==r?(Ne=Q,k=rC(b),k?k=void 0:k=r,k!==r?(Ne=d,b=iC(b),d=b):(Q=d,d=r)):(Q=d,d=r),d}function Loe(){var d,b,k,Y,$;if(d=Q,b=[],k=Q,Y=Q,be++,$=mL(),be--,$===r?Y=void 0:(Q=Y,Y=r),Y!==r?(t.length>Q?($=t.charAt(Q),Q++):($=r,be===0&&j($i)),$!==r?(Ne=k,Y=en($),k=Y):(Q=k,k=r)):(Q=k,k=r),k!==r)for(;k!==r;)b.push(k),k=Q,Y=Q,be++,$=mL(),be--,$===r?Y=void 0:(Q=Y,Y=r),Y!==r?(t.length>Q?($=t.charAt(Q),Q++):($=r,be===0&&j($i)),$!==r?(Ne=k,Y=en($),k=Y):(Q=k,k=r)):(Q=k,k=r);else b=r;return b!==r&&(Ne=d,b=El(b)),d=b,d}function dL(){var d,b,k;if(d=Q,b=[],nC.test(t.charAt(Q))?(k=t.charAt(Q),Q++):(k=r,be===0&&j(Ag)),k!==r)for(;k!==r;)b.push(k),nC.test(t.charAt(Q))?(k=t.charAt(Q),Q++):(k=r,be===0&&j(Ag));else b=r;return b!==r&&(Ne=d,b=lg()),d=b,d}function hg(){var d,b,k;if(d=Q,b=[],cg.test(t.charAt(Q))?(k=t.charAt(Q),Q++):(k=r,be===0&&j(Ka)),k!==r)for(;k!==r;)b.push(k),cg.test(t.charAt(Q))?(k=t.charAt(Q),Q++):(k=r,be===0&&j(Ka));else b=r;return b!==r&&(Ne=d,b=lg()),d=b,d}function CL(){var d;return Ua.test(t.charAt(Q))?(d=t.charAt(Q),Q++):(d=r,be===0&&j(sw)),d}function mL(){var d;return sC.test(t.charAt(Q))?(d=t.charAt(Q),Q++):(d=r,be===0&&j(oC)),d}function De(){var d,b;if(d=[],aC.test(t.charAt(Q))?(b=t.charAt(Q),Q++):(b=r,be===0&&j(ko)),b!==r)for(;b!==r;)d.push(b),aC.test(t.charAt(Q))?(b=t.charAt(Q),Q++):(b=r,be===0&&j(ko));else d=r;return d}if(Ps=n(),Ps!==r&&Q===t.length)return Ps;throw Ps!==r&&Q{"use strict";function mEe(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function QA(t,e,r,i){this.message=t,this.expected=e,this.found=r,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,QA)}mEe(QA,Error);QA.buildMessage=function(t,e){var r={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;gL&&(L=B,T=[]),T.push(Z))}function te(Z,X){return new QA(Z,null,null,X)}function le(Z,X,Ae){return new QA(QA.buildMessage(Z,X),Z,X,Ae)}function Se(){var Z,X,Ae,ue;return Z=B,X=fe(),X!==r?(t.charCodeAt(B)===47?(Ae=s,B++):(Ae=r,v===0&&qe(o)),Ae!==r?(ue=fe(),ue!==r?(x=Z,X=a(X,ue),Z=X):(B=Z,Z=r)):(B=Z,Z=r)):(B=Z,Z=r),Z===r&&(Z=B,X=fe(),X!==r&&(x=Z,X=l(X)),Z=X),Z}function fe(){var Z,X,Ae,ue;return Z=B,X=Ie(),X!==r?(t.charCodeAt(B)===64?(Ae=c,B++):(Ae=r,v===0&&qe(u)),Ae!==r?(ue=we(),ue!==r?(x=Z,X=g(X,ue),Z=X):(B=Z,Z=r)):(B=Z,Z=r)):(B=Z,Z=r),Z===r&&(Z=B,X=Ie(),X!==r&&(x=Z,X=f(X)),Z=X),Z}function Ie(){var Z,X,Ae,ue,Be;return Z=B,t.charCodeAt(B)===64?(X=c,B++):(X=r,v===0&&qe(u)),X!==r?(Ae=de(),Ae!==r?(t.charCodeAt(B)===47?(ue=s,B++):(ue=r,v===0&&qe(o)),ue!==r?(Be=de(),Be!==r?(x=Z,X=h(),Z=X):(B=Z,Z=r)):(B=Z,Z=r)):(B=Z,Z=r)):(B=Z,Z=r),Z===r&&(Z=B,X=de(),X!==r&&(x=Z,X=h()),Z=X),Z}function de(){var Z,X,Ae;if(Z=B,X=[],p.test(t.charAt(B))?(Ae=t.charAt(B),B++):(Ae=r,v===0&&qe(m)),Ae!==r)for(;Ae!==r;)X.push(Ae),p.test(t.charAt(B))?(Ae=t.charAt(B),B++):(Ae=r,v===0&&qe(m));else X=r;return X!==r&&(x=Z,X=h()),Z=X,Z}function we(){var Z,X,Ae;if(Z=B,X=[],I.test(t.charAt(B))?(Ae=t.charAt(B),B++):(Ae=r,v===0&&qe(y)),Ae!==r)for(;Ae!==r;)X.push(Ae),I.test(t.charAt(B))?(Ae=t.charAt(B),B++):(Ae=r,v===0&&qe(y));else X=r;return X!==r&&(x=Z,X=h()),Z=X,Z}if(q=n(),q!==r&&B===t.length)return q;throw q!==r&&B{"use strict";function fG(t){return typeof t=="undefined"||t===null}function EEe(t){return typeof t=="object"&&t!==null}function yEe(t){return Array.isArray(t)?t:fG(t)?[]:[t]}function BEe(t,e){var r,i,n,s;if(e)for(s=Object.keys(e),r=0,i=s.length;r{"use strict";function Uf(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}Uf.prototype=Object.create(Error.prototype);Uf.prototype.constructor=Uf;Uf.prototype.toString=function(e){var r=this.name+": ";return r+=this.reason||"(unknown reason)",!e&&this.mark&&(r+=" "+this.mark.toString()),r};hG.exports=Uf});var CG=C((W7e,pG)=>{"use strict";var dG=DA();function iS(t,e,r,i,n){this.name=t,this.buffer=e,this.position=r,this.line=i,this.column=n}iS.prototype.getSnippet=function(e,r){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,r=r||75,i="",n=this.position;n>0&&`\0\r -\x85\u2028\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>r/2-1){i=" ... ",n+=5;break}for(s="",o=this.position;or/2-1){s=" ... ",o-=5;break}return a=this.buffer.slice(n,o),dG.repeat(" ",e)+i+a+s+` -`+dG.repeat(" ",e+this.position-n+i.length)+"^"};iS.prototype.toString=function(e){var r,i="";return this.name&&(i+='in "'+this.name+'" '),i+="at line "+(this.line+1)+", column "+(this.column+1),e||(r=this.getSnippet(),r&&(i+=`: -`+r)),i};pG.exports=iS});var Ir=C((z7e,mG)=>{"use strict";var IG=Ec(),bEe=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],DEe=["scalar","sequence","mapping"];function SEe(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(i){e[String(i)]=r})}),e}function xEe(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(bEe.indexOf(r)===-1)throw new IG('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=SEe(e.styleAliases||null),DEe.indexOf(this.kind)===-1)throw new IG('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}mG.exports=xEe});var SA=C((V7e,EG)=>{"use strict";var yG=DA(),bI=Ec(),kEe=Ir();function nS(t,e,r){var i=[];return t.include.forEach(function(n){r=nS(n,e,r)}),t[e].forEach(function(n){r.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),r.push(n)}),r.filter(function(n,s){return i.indexOf(s)===-1})}function PEe(){var t={scalar:{},sequence:{},mapping:{},fallback:{}},e,r;function i(n){t[n.kind][n.tag]=t.fallback[n.tag]=n}for(e=0,r=arguments.length;e{"use strict";var vEe=Ir();BG.exports=new vEe("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}})});var bG=C((Z7e,QG)=>{"use strict";var FEe=Ir();QG.exports=new FEe("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}})});var SG=C((_7e,DG)=>{"use strict";var REe=Ir();DG.exports=new REe("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}})});var DI=C(($7e,xG)=>{"use strict";var LEe=SA();xG.exports=new LEe({explicit:[wG(),bG(),SG()]})});var PG=C((eXe,kG)=>{"use strict";var NEe=Ir();function MEe(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function OEe(){return null}function TEe(t){return t===null}kG.exports=new NEe("tag:yaml.org,2002:null",{kind:"scalar",resolve:MEe,construct:OEe,predicate:TEe,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var FG=C((tXe,vG)=>{"use strict";var KEe=Ir();function UEe(t){if(t===null)return!1;var e=t.length;return e===4&&(t==="true"||t==="True"||t==="TRUE")||e===5&&(t==="false"||t==="False"||t==="FALSE")}function YEe(t){return t==="true"||t==="True"||t==="TRUE"}function HEe(t){return Object.prototype.toString.call(t)==="[object Boolean]"}vG.exports=new KEe("tag:yaml.org,2002:bool",{kind:"scalar",resolve:UEe,construct:YEe,predicate:HEe,represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"})});var LG=C((rXe,RG)=>{"use strict";var jEe=DA(),GEe=Ir();function qEe(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function JEe(t){return 48<=t&&t<=55}function WEe(t){return 48<=t&&t<=57}function zEe(t){if(t===null)return!1;var e=t.length,r=0,i=!1,n;if(!e)return!1;if(n=t[r],(n==="-"||n==="+")&&(n=t[++r]),n==="0"){if(r+1===e)return!0;if(n=t[++r],n==="b"){for(r++;r=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0"+t.toString(8):"-0"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var OG=C((iXe,NG)=>{"use strict";var MG=DA(),ZEe=Ir(),_Ee=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))$");function $Ee(t){return!(t===null||!_Ee.test(t)||t[t.length-1]==="_")}function eye(t){var e,r,i,n;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,n=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),r*e):r*parseFloat(e,10)}var tye=/^[-+]?[0-9]+e/;function rye(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(MG.isNegativeZero(t))return"-0.0";return r=t.toString(10),tye.test(r)?r.replace("e",".e"):r}function iye(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!=0||MG.isNegativeZero(t))}NG.exports=new ZEe("tag:yaml.org,2002:float",{kind:"scalar",resolve:$Ee,construct:eye,predicate:iye,represent:rye,defaultStyle:"lowercase"})});var sS=C((nXe,TG)=>{"use strict";var nye=SA();TG.exports=new nye({include:[DI()],implicit:[PG(),FG(),LG(),OG()]})});var oS=C((sXe,KG)=>{"use strict";var sye=SA();KG.exports=new sye({include:[sS()]})});var jG=C((oXe,UG)=>{"use strict";var oye=Ir(),YG=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),HG=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function aye(t){return t===null?!1:YG.exec(t)!==null||HG.exec(t)!==null}function Aye(t){var e,r,i,n,s,o,a,l=0,c=null,u,g,f;if(e=YG.exec(t),e===null&&(e=HG.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(r,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+="0";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]==="-"&&(c=-c)),f=new Date(Date.UTC(r,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function lye(t){return t.toISOString()}UG.exports=new oye("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:aye,construct:Aye,instanceOf:Date,represent:lye})});var qG=C((aXe,GG)=>{"use strict";var cye=Ir();function uye(t){return t==="<<"||t===null}GG.exports=new cye("tag:yaml.org,2002:merge",{kind:"scalar",resolve:uye})});var zG=C((AXe,JG)=>{"use strict";var xA;try{WG=require,xA=WG("buffer").Buffer}catch(t){}var WG,gye=Ir(),aS=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;function fye(t){if(t===null)return!1;var e,r,i=0,n=t.length,s=aS;for(r=0;r64)){if(e<0)return!1;i+=6}return i%8==0}function hye(t){var e,r,i=t.replace(/[\r\n=]/g,""),n=i.length,s=aS,o=0,a=[];for(e=0;e>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return r=n%4*6,r===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):r===18?(a.push(o>>10&255),a.push(o>>2&255)):r===12&&a.push(o>>4&255),xA?xA.from?xA.from(a):new xA(a):a}function pye(t){var e="",r=0,i,n,s=t.length,o=aS;for(i=0;i>18&63],e+=o[r>>12&63],e+=o[r>>6&63],e+=o[r&63]),r=(r<<8)+t[i];return n=s%3,n===0?(e+=o[r>>18&63],e+=o[r>>12&63],e+=o[r>>6&63],e+=o[r&63]):n===2?(e+=o[r>>10&63],e+=o[r>>4&63],e+=o[r<<2&63],e+=o[64]):n===1&&(e+=o[r>>2&63],e+=o[r<<4&63],e+=o[64],e+=o[64]),e}function dye(t){return xA&&xA.isBuffer(t)}JG.exports=new gye("tag:yaml.org,2002:binary",{kind:"scalar",resolve:fye,construct:hye,predicate:dye,represent:pye})});var XG=C((lXe,VG)=>{"use strict";var Cye=Ir(),mye=Object.prototype.hasOwnProperty,Iye=Object.prototype.toString;function Eye(t){if(t===null)return!0;var e=[],r,i,n,s,o,a=t;for(r=0,i=a.length;r{"use strict";var Bye=Ir(),wye=Object.prototype.toString;function Qye(t){if(t===null)return!0;var e,r,i,n,s,o=t;for(s=new Array(o.length),e=0,r=o.length;e{"use strict";var Dye=Ir(),Sye=Object.prototype.hasOwnProperty;function xye(t){if(t===null)return!0;var e,r=t;for(e in r)if(Sye.call(r,e)&&r[e]!==null)return!1;return!0}function kye(t){return t!==null?t:{}}$G.exports=new Dye("tag:yaml.org,2002:set",{kind:"mapping",resolve:xye,construct:kye})});var Bc=C((gXe,tq)=>{"use strict";var Pye=SA();tq.exports=new Pye({include:[oS()],implicit:[jG(),qG()],explicit:[zG(),XG(),_G(),eq()]})});var iq=C((fXe,rq)=>{"use strict";var vye=Ir();function Fye(){return!0}function Rye(){}function Lye(){return""}function Nye(t){return typeof t=="undefined"}rq.exports=new vye("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:Fye,construct:Rye,predicate:Nye,represent:Lye})});var sq=C((hXe,nq)=>{"use strict";var Mye=Ir();function Oye(t){if(t===null||t.length===0)return!1;var e=t,r=/\/([gim]*)$/.exec(t),i="";return!(e[0]==="/"&&(r&&(i=r[1]),i.length>3||e[e.length-i.length-1]!=="/"))}function Tye(t){var e=t,r=/\/([gim]*)$/.exec(t),i="";return e[0]==="/"&&(r&&(i=r[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function Kye(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function Uye(t){return Object.prototype.toString.call(t)==="[object RegExp]"}nq.exports=new Mye("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:Oye,construct:Tye,predicate:Uye,represent:Kye})});var Aq=C((pXe,oq)=>{"use strict";var SI;try{aq=require,SI=aq("esprima")}catch(t){typeof window!="undefined"&&(SI=window.esprima)}var aq,Yye=Ir();function Hye(t){if(t===null)return!1;try{var e="("+t+")",r=SI.parse(e,{range:!0});return!(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")}catch(i){return!1}}function jye(t){var e="("+t+")",r=SI.parse(e,{range:!0}),i=[],n;if(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=r.body[0].expression.body.range,r.body[0].expression.body.type==="BlockStatement"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,"return "+e.slice(n[0],n[1]))}function Gye(t){return t.toString()}function qye(t){return Object.prototype.toString.call(t)==="[object Function]"}oq.exports=new Yye("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:Hye,construct:jye,predicate:qye,represent:Gye})});var Yf=C((dXe,lq)=>{"use strict";var cq=SA();lq.exports=cq.DEFAULT=new cq({include:[Bc()],explicit:[iq(),sq(),Aq()]})});var kq=C((CXe,Hf)=>{"use strict";var to=DA(),uq=Ec(),Jye=CG(),gq=Bc(),Wye=Yf(),ta=Object.prototype.hasOwnProperty,xI=1,fq=2,hq=3,kI=4,AS=1,zye=2,pq=3,Vye=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,Xye=/[\x85\u2028\u2029]/,Zye=/[,\[\]\{\}]/,dq=/^(?:!|!!|![a-z\-]+!)$/i,Cq=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function mq(t){return Object.prototype.toString.call(t)}function as(t){return t===10||t===13}function kA(t){return t===9||t===32}function ki(t){return t===9||t===32||t===10||t===13}function wc(t){return t===44||t===91||t===93||t===123||t===125}function _ye(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function $ye(t){return t===120?2:t===117?4:t===85?8:0}function eBe(t){return 48<=t&&t<=57?t-48:-1}function Iq(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?` -`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"\x85":t===95?"\xA0":t===76?"\u2028":t===80?"\u2029":""}function tBe(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}var Eq=new Array(256),yq=new Array(256);for(var Qc=0;Qc<256;Qc++)Eq[Qc]=Iq(Qc)?1:0,yq[Qc]=Iq(Qc);function rBe(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||Wye,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function Bq(t,e){return new uq(e,new Jye(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function $e(t,e){throw Bq(t,e)}function PI(t,e){t.onWarning&&t.onWarning.call(null,Bq(t,e))}var wq={YAML:function(e,r,i){var n,s,o;e.version!==null&&$e(e,"duplication of %YAML directive"),i.length!==1&&$e(e,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(i[0]),n===null&&$e(e,"ill-formed argument of the YAML directive"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&&$e(e,"unacceptable YAML version of the document"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&PI(e,"unsupported YAML version of the document")},TAG:function(e,r,i){var n,s;i.length!==2&&$e(e,"TAG directive accepts exactly two arguments"),n=i[0],s=i[1],dq.test(n)||$e(e,"ill-formed tag handle (first argument) of the TAG directive"),ta.call(e.tagMap,n)&&$e(e,'there is a previously declared suffix for "'+n+'" tag handle'),Cq.test(s)||$e(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[n]=s}};function ra(t,e,r,i){var n,s,o,a;if(e1&&(t.result+=to.repeat(` -`,e-1))}function iBe(t,e,r){var i,n,s,o,a,l,c,u,g=t.kind,f=t.result,h;if(h=t.input.charCodeAt(t.position),ki(h)||wc(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=t.input.charCodeAt(t.position+1),ki(n)||r&&wc(n)))return!1;for(t.kind="scalar",t.result="",s=o=t.position,a=!1;h!==0;){if(h===58){if(n=t.input.charCodeAt(t.position+1),ki(n)||r&&wc(n))break}else if(h===35){if(i=t.input.charCodeAt(t.position-1),ki(i))break}else{if(t.position===t.lineStart&&vI(t)||r&&wc(h))break;if(as(h))if(l=t.line,c=t.lineStart,u=t.lineIndent,fr(t,!1,-1),t.lineIndent>=e){a=!0,h=t.input.charCodeAt(t.position);continue}else{t.position=o,t.line=l,t.lineStart=c,t.lineIndent=u;break}}a&&(ra(t,s,o,!1),cS(t,t.line-l),s=o=t.position,a=!1),kA(h)||(o=t.position+1),h=t.input.charCodeAt(++t.position)}return ra(t,s,o,!1),t.result?!0:(t.kind=g,t.result=f,!1)}function nBe(t,e){var r,i,n;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,i=n=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(ra(t,i,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)i=t.position,t.position++,n=t.position;else return!0;else as(r)?(ra(t,i,n,!0),cS(t,fr(t,!1,e)),i=n=t.position):t.position===t.lineStart&&vI(t)?$e(t,"unexpected end of the document within a single quoted scalar"):(t.position++,n=t.position);$e(t,"unexpected end of the stream within a single quoted scalar")}function sBe(t,e){var r,i,n,s,o,a;if(a=t.input.charCodeAt(t.position),a!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=i=t.position;(a=t.input.charCodeAt(t.position))!==0;){if(a===34)return ra(t,r,t.position,!0),t.position++,!0;if(a===92){if(ra(t,r,t.position,!0),a=t.input.charCodeAt(++t.position),as(a))fr(t,!1,e);else if(a<256&&Eq[a])t.result+=yq[a],t.position++;else if((o=$ye(a))>0){for(n=o,s=0;n>0;n--)a=t.input.charCodeAt(++t.position),(o=_ye(a))>=0?s=(s<<4)+o:$e(t,"expected hexadecimal character");t.result+=tBe(s),t.position++}else $e(t,"unknown escape sequence");r=i=t.position}else as(a)?(ra(t,r,i,!0),cS(t,fr(t,!1,e)),r=i=t.position):t.position===t.lineStart&&vI(t)?$e(t,"unexpected end of the document within a double quoted scalar"):(t.position++,i=t.position)}$e(t,"unexpected end of the stream within a double quoted scalar")}function oBe(t,e){var r=!0,i,n=t.tag,s,o=t.anchor,a,l,c,u,g,f={},h,p,m,I;if(I=t.input.charCodeAt(t.position),I===91)l=93,g=!1,s=[];else if(I===123)l=125,g=!0,s={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=s),I=t.input.charCodeAt(++t.position);I!==0;){if(fr(t,!0,e),I=t.input.charCodeAt(t.position),I===l)return t.position++,t.tag=n,t.anchor=o,t.kind=g?"mapping":"sequence",t.result=s,!0;r||$e(t,"missed comma between flow collection entries"),p=h=m=null,c=u=!1,I===63&&(a=t.input.charCodeAt(t.position+1),ki(a)&&(c=u=!0,t.position++,fr(t,!0,e))),i=t.line,Dc(t,e,xI,!1,!0),p=t.tag,h=t.result,fr(t,!0,e),I=t.input.charCodeAt(t.position),(u||t.line===i)&&I===58&&(c=!0,I=t.input.charCodeAt(++t.position),fr(t,!0,e),Dc(t,e,xI,!1,!0),m=t.result),g?bc(t,s,f,p,h,m):c?s.push(bc(t,null,f,p,h,m)):s.push(h),fr(t,!0,e),I=t.input.charCodeAt(t.position),I===44?(r=!0,I=t.input.charCodeAt(++t.position)):r=!1}$e(t,"unexpected end of the stream within a flow collection")}function aBe(t,e){var r,i,n=AS,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=t.input.charCodeAt(t.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(t.kind="scalar",t.result="";g!==0;)if(g=t.input.charCodeAt(++t.position),g===43||g===45)AS===n?n=g===43?pq:zye:$e(t,"repeat of a chomping mode identifier");else if((u=eBe(g))>=0)u===0?$e(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):o?$e(t,"repeat of an indentation width identifier"):(a=e+u-1,o=!0);else break;if(kA(g)){do g=t.input.charCodeAt(++t.position);while(kA(g));if(g===35)do g=t.input.charCodeAt(++t.position);while(!as(g)&&g!==0)}for(;g!==0;){for(lS(t),t.lineIndent=0,g=t.input.charCodeAt(t.position);(!o||t.lineIndenta&&(a=t.lineIndent),as(g)){l++;continue}if(t.lineIndente)&&l!==0)$e(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(Dc(t,e,kI,!0,n)&&(p?f=t.result:h=t.result),p||(bc(t,c,u,g,f,h,s,o),g=f=h=null),fr(t,!0,-1),I=t.input.charCodeAt(t.position)),t.lineIndent>e&&I!==0)$e(t,"bad indentation of a mapping entry");else if(t.lineIndente?l=1:t.lineIndent===e?l=0:t.lineIndente?l=1:t.lineIndent===e?l=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),g=0,f=t.implicitTypes.length;g tag; it should be "'+h.kind+'", not "'+t.kind+'"'),h.resolve(t.result)?(t.result=h.construct(t.result),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):$e(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):$e(t,"unknown tag !<"+t.tag+">");return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||u}function gBe(t){var e=t.position,r,i,n,s=!1,o;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};(o=t.input.charCodeAt(t.position))!==0&&(fr(t,!0,-1),o=t.input.charCodeAt(t.position),!(t.lineIndent>0||o!==37));){for(s=!0,o=t.input.charCodeAt(++t.position),r=t.position;o!==0&&!ki(o);)o=t.input.charCodeAt(++t.position);for(i=t.input.slice(r,t.position),n=[],i.length<1&&$e(t,"directive name must not be less than one character in length");o!==0;){for(;kA(o);)o=t.input.charCodeAt(++t.position);if(o===35){do o=t.input.charCodeAt(++t.position);while(o!==0&&!as(o));break}if(as(o))break;for(r=t.position;o!==0&&!ki(o);)o=t.input.charCodeAt(++t.position);n.push(t.input.slice(r,t.position))}o!==0&&lS(t),ta.call(wq,i)?wq[i](t,i,n):PI(t,'unknown document directive "'+i+'"')}if(fr(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,fr(t,!0,-1)):s&&$e(t,"directives end mark is expected"),Dc(t,t.lineIndent-1,kI,!1,!0),fr(t,!0,-1),t.checkLineBreaks&&Xye.test(t.input.slice(e,t.position))&&PI(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&vI(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,fr(t,!0,-1));return}if(t.position{"use strict";var jf=DA(),Gf=Ec(),pBe=Yf(),dBe=Bc(),Pq=Object.prototype.toString,vq=Object.prototype.hasOwnProperty,CBe=9,qf=10,mBe=13,IBe=32,EBe=33,yBe=34,Fq=35,BBe=37,wBe=38,QBe=39,bBe=42,Rq=44,DBe=45,Lq=58,SBe=61,xBe=62,kBe=63,PBe=64,Nq=91,Mq=93,vBe=96,Oq=123,FBe=124,Tq=125,zr={};zr[0]="\\0";zr[7]="\\a";zr[8]="\\b";zr[9]="\\t";zr[10]="\\n";zr[11]="\\v";zr[12]="\\f";zr[13]="\\r";zr[27]="\\e";zr[34]='\\"';zr[92]="\\\\";zr[133]="\\N";zr[160]="\\_";zr[8232]="\\L";zr[8233]="\\P";var RBe=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function LBe(t,e){var r,i,n,s,o,a,l;if(e===null)return{};for(r={},i=Object.keys(e),n=0,s=i.length;n0?t.charCodeAt(s-1):null,f=f&&Yq(o,a)}else{for(s=0;si&&t[g+1]!==" ",g=s);else if(!Sc(o))return FI;a=s>0?t.charCodeAt(s-1):null,f=f&&Yq(o,a)}c=c||u&&s-g-1>i&&t[g+1]!==" "}return!l&&!c?f&&!n(t)?jq:Gq:r>9&&Hq(t)?FI:c?Jq:qq}function HBe(t,e,r,i){t.dump=function(){if(e.length===0)return"''";if(!t.noCompatMode&&RBe.indexOf(e)!==-1)return"'"+e+"'";var n=t.indent*Math.max(1,r),s=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-n),o=i||t.flowLevel>-1&&r>=t.flowLevel;function a(l){return MBe(t,l)}switch(KBe(e,o,t.indent,s,a)){case jq:return e;case Gq:return"'"+e.replace(/'/g,"''")+"'";case qq:return"|"+Wq(e,t.indent)+zq(Uq(e,n));case Jq:return">"+Wq(e,t.indent)+zq(Uq(UBe(e,s),n));case FI:return'"'+YBe(e,s)+'"';default:throw new Gf("impossible error: invalid scalar style")}}()}function Wq(t,e){var r=Hq(t)?String(e):"",i=t[t.length-1]===` -`,n=i&&(t[t.length-2]===` -`||t===` -`),s=n?"+":i?"":"-";return r+s+` -`}function zq(t){return t[t.length-1]===` -`?t.slice(0,-1):t}function UBe(t,e){for(var r=/(\n+)([^\n]*)/g,i=function(){var c=t.indexOf(` -`);return c=c!==-1?c:t.length,r.lastIndex=c,Vq(t.slice(0,c),e)}(),n=t[0]===` -`||t[0]===" ",s,o;o=r.exec(t);){var a=o[1],l=o[2];s=l[0]===" ",i+=a+(!n&&!s&&l!==""?` -`:"")+Vq(l,e),n=s}return i}function Vq(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,i,n=0,s,o=0,a=0,l="";i=r.exec(t);)a=i.index,a-n>e&&(s=o>n?o:a,l+=` -`+t.slice(n,s),n=s+1),o=a;return l+=` -`,t.length-n>e&&o>n?l+=t.slice(n,o)+` -`+t.slice(o+1):l+=t.slice(n),l.slice(1)}function YBe(t){for(var e="",r,i,n,s=0;s=55296&&r<=56319&&(i=t.charCodeAt(s+1),i>=56320&&i<=57343)){e+=Kq((r-55296)*1024+i-56320+65536),s++;continue}n=zr[r],e+=!n&&Sc(r)?t[s]:n||Kq(r)}return e}function jBe(t,e,r){var i="",n=t.tag,s,o;for(s=0,o=r.length;s1024&&(u+="? "),u+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),!!PA(t,e,c,!1,!1)&&(u+=t.dump,i+=u));t.tag=n,t.dump="{"+i+"}"}function JBe(t,e,r,i){var n="",s=t.tag,o=Object.keys(r),a,l,c,u,g,f;if(t.sortKeys===!0)o.sort();else if(typeof t.sortKeys=="function")o.sort(t.sortKeys);else if(t.sortKeys)throw new Gf("sortKeys must be a boolean or a function");for(a=0,l=o.length;a1024,g&&(t.dump&&qf===t.dump.charCodeAt(0)?f+="?":f+="? "),f+=t.dump,g&&(f+=gS(t,e)),!!PA(t,e+1,u,!0,g)&&(t.dump&&qf===t.dump.charCodeAt(0)?f+=":":f+=": ",f+=t.dump,n+=f));t.tag=s,t.dump=n||"{}"}function Xq(t,e,r){var i,n,s,o,a,l;for(n=r?t.explicitTypes:t.implicitTypes,s=0,o=n.length;s tag resolver accepts not "'+l+'" style');t.dump=i}return!0}return!1}function PA(t,e,r,i,n,s){t.tag=null,t.dump=r,Xq(t,r,!1)||Xq(t,r,!0);var o=Pq.call(t.dump);i&&(i=t.flowLevel<0||t.flowLevel>e);var a=o==="[object Object]"||o==="[object Array]",l,c;if(a&&(l=t.duplicates.indexOf(r),c=l!==-1),(t.tag!==null&&t.tag!=="?"||c||t.indent!==2&&e>0)&&(n=!1),c&&t.usedDuplicates[l])t.dump="*ref_"+l;else{if(a&&c&&!t.usedDuplicates[l]&&(t.usedDuplicates[l]=!0),o==="[object Object]")i&&Object.keys(t.dump).length!==0?(JBe(t,e,t.dump,n),c&&(t.dump="&ref_"+l+t.dump)):(qBe(t,e,t.dump),c&&(t.dump="&ref_"+l+" "+t.dump));else if(o==="[object Array]"){var u=t.noArrayIndent&&e>0?e-1:e;i&&t.dump.length!==0?(GBe(t,u,t.dump,n),c&&(t.dump="&ref_"+l+t.dump)):(jBe(t,u,t.dump),c&&(t.dump="&ref_"+l+" "+t.dump))}else if(o==="[object String]")t.tag!=="?"&&HBe(t,t.dump,e,s);else{if(t.skipInvalid)return!1;throw new Gf("unacceptable kind of an object to dump "+o)}t.tag!==null&&t.tag!=="?"&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function WBe(t,e){var r=[],i=[],n,s;for(hS(t,r,i),n=0,s=i.length;n{"use strict";var RI=kq(),$q=_q();function LI(t){return function(){throw new Error("Function "+t+" is deprecated and cannot be used.")}}_t.exports.Type=Ir();_t.exports.Schema=SA();_t.exports.FAILSAFE_SCHEMA=DI();_t.exports.JSON_SCHEMA=sS();_t.exports.CORE_SCHEMA=oS();_t.exports.DEFAULT_SAFE_SCHEMA=Bc();_t.exports.DEFAULT_FULL_SCHEMA=Yf();_t.exports.load=RI.load;_t.exports.loadAll=RI.loadAll;_t.exports.safeLoad=RI.safeLoad;_t.exports.safeLoadAll=RI.safeLoadAll;_t.exports.dump=$q.dump;_t.exports.safeDump=$q.safeDump;_t.exports.YAMLException=Ec();_t.exports.MINIMAL_SCHEMA=DI();_t.exports.SAFE_SCHEMA=Bc();_t.exports.DEFAULT_SCHEMA=Yf();_t.exports.scan=LI("scan");_t.exports.parse=LI("parse");_t.exports.compose=LI("compose");_t.exports.addConstructor=LI("addConstructor")});var rJ=C((EXe,tJ)=>{"use strict";var VBe=eJ();tJ.exports=VBe});var nJ=C((yXe,iJ)=>{"use strict";function XBe(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function vA(t,e,r,i){this.message=t,this.expected=e,this.found=r,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,vA)}XBe(vA,Error);vA.buildMessage=function(t,e){var r={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g({[Ee]:j})))},L=function(S){return S},T=function(S){return S},v=So("correct indentation"),q=" ",oe=Tt(" ",!1),U=function(S){return S.length===Ql*AC},A=function(S){return S.length===(Ql+1)*AC},W=function(){return Ql++,!0},ee=function(){return Ql--,!0},ie=function(){return _d()},J=So("pseudostring"),R=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,ve=Vn(["\r",` -`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),Fe=/^[^\r\n\t ,\][{}:#"']/,Ke=Vn(["\r",` -`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),qe=function(){return _d().replace(/^ *| *$/g,"")},te="--",le=Tt("--",!1),Se=/^[a-zA-Z\/0-9]/,fe=Vn([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),Ie=/^[^\r\n\t :,]/,de=Vn(["\r",` -`," "," ",":",","],!0,!1),we="null",Z=Tt("null",!1),X=function(){return null},Ae="true",ue=Tt("true",!1),Be=function(){return!0},at="false",mt=Tt("false",!1),St=function(){return!1},xn=So("string"),Ii='"',Xt=Tt('"',!1),_i=function(){return""},zn=function(S){return S},_u=function(S){return S.join("")},Kd=/^[^"\\\0-\x1F\x7F]/,xs=Vn(['"',"\\",["\0",""],"\x7F"],!0,!1),$u='\\"',Ud=Tt('\\"',!1),HB=function(){return'"'},eg="\\\\",Yd=Tt("\\\\",!1),Hd=function(){return"\\"},jd="\\/",jB=Tt("\\/",!1),GB=function(){return"/"},tg="\\b",qB=Tt("\\b",!1),JB=function(){return"\b"},Gd="\\f",WB=Tt("\\f",!1),_=function(){return"\f"},ks="\\n",$i=Tt("\\n",!1),en=function(){return` -`},rg="\\r",qd=Tt("\\r",!1),El=function(){return"\r"},ig="\\t",Jd=Tt("\\t",!1),ng=function(){return" "},yl="\\u",sg=Tt("\\u",!1),og=function(S,K,j,Ee){return String.fromCharCode(parseInt(`0x${S}${K}${j}${Ee}`))},zB=/^[0-9a-fA-F]/,VB=Vn([["0","9"],["a","f"],["A","F"]],!1,!1),XB=So("blank space"),Wd=/^[ \t]/,zd=Vn([" "," "],!1,!1),ZB=So("white space"),Vd=/^[ \t\n\r]/,Xd=Vn([" "," ",` -`,"\r"],!1,!1),Zd=`\r -`,_B=Tt(`\r -`,!1),$B=` -`,ew=Tt(` -`,!1),tw="\r",rw=Tt("\r",!1),M=0,it=0,Bl=[{line:1,column:1}],Ti=0,ag=[],Te=0,Oa;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function _d(){return t.substring(it,M)}function aL(){return xo(it,M)}function Ta(S,K){throw K=K!==void 0?K:xo(it,M),rC([So(S)],t.substring(it,M),K)}function $d(S,K){throw K=K!==void 0?K:xo(it,M),nw(S,K)}function Tt(S,K){return{type:"literal",text:S,ignoreCase:K}}function Vn(S,K,j){return{type:"class",parts:S,inverted:K,ignoreCase:j}}function iw(){return{type:"any"}}function eC(){return{type:"end"}}function So(S){return{type:"other",description:S}}function tC(S){var K=Bl[S],j;if(K)return K;for(j=S-1;!Bl[j];)j--;for(K=Bl[j],K={line:K.line,column:K.column};jTi&&(Ti=M,ag=[]),ag.push(S))}function nw(S,K){return new vA(S,null,null,K)}function rC(S,K,j){return new vA(vA.buildMessage(S,K),S,K,j)}function iC(){var S;return S=lg(),S}function nC(){var S,K,j;for(S=M,K=[],j=Ag();j!==r;)K.push(j),j=Ag();return K!==r&&(it=S,K=s(K)),S=K,S}function Ag(){var S,K,j,Ee,Ce;return S=M,K=Ua(),K!==r?(t.charCodeAt(M)===45?(j=o,M++):(j=r,Te===0&&Ve(a)),j!==r?(Ee=pr(),Ee!==r?(Ce=Ka(),Ce!==r?(it=S,K=l(Ce),S=K):(M=S,S=r)):(M=S,S=r)):(M=S,S=r)):(M=S,S=r),S}function lg(){var S,K,j;for(S=M,K=[],j=cg();j!==r;)K.push(j),j=cg();return K!==r&&(it=S,K=c(K)),S=K,S}function cg(){var S,K,j,Ee,Ce,Oe,rt,Kt,Fs;if(S=M,K=pr(),K===r&&(K=null),K!==r){if(j=M,t.charCodeAt(M)===35?(Ee=u,M++):(Ee=r,Te===0&&Ve(g)),Ee!==r){if(Ce=[],Oe=M,rt=M,Te++,Kt=vs(),Te--,Kt===r?rt=void 0:(M=rt,rt=r),rt!==r?(t.length>M?(Kt=t.charAt(M),M++):(Kt=r,Te===0&&Ve(f)),Kt!==r?(rt=[rt,Kt],Oe=rt):(M=Oe,Oe=r)):(M=Oe,Oe=r),Oe!==r)for(;Oe!==r;)Ce.push(Oe),Oe=M,rt=M,Te++,Kt=vs(),Te--,Kt===r?rt=void 0:(M=rt,rt=r),rt!==r?(t.length>M?(Kt=t.charAt(M),M++):(Kt=r,Te===0&&Ve(f)),Kt!==r?(rt=[rt,Kt],Oe=rt):(M=Oe,Oe=r)):(M=Oe,Oe=r);else Ce=r;Ce!==r?(Ee=[Ee,Ce],j=Ee):(M=j,j=r)}else M=j,j=r;if(j===r&&(j=null),j!==r){if(Ee=[],Ce=Yr(),Ce!==r)for(;Ce!==r;)Ee.push(Ce),Ce=Yr();else Ee=r;Ee!==r?(it=S,K=h(),S=K):(M=S,S=r)}else M=S,S=r}else M=S,S=r;if(S===r&&(S=M,K=Ua(),K!==r?(j=aC(),j!==r?(Ee=pr(),Ee===r&&(Ee=null),Ee!==r?(t.charCodeAt(M)===58?(Ce=p,M++):(Ce=r,Te===0&&Ve(m)),Ce!==r?(Oe=pr(),Oe===r&&(Oe=null),Oe!==r?(rt=Ka(),rt!==r?(it=S,K=I(j,rt),S=K):(M=S,S=r)):(M=S,S=r)):(M=S,S=r)):(M=S,S=r)):(M=S,S=r)):(M=S,S=r),S===r&&(S=M,K=Ua(),K!==r?(j=ko(),j!==r?(Ee=pr(),Ee===r&&(Ee=null),Ee!==r?(t.charCodeAt(M)===58?(Ce=p,M++):(Ce=r,Te===0&&Ve(m)),Ce!==r?(Oe=pr(),Oe===r&&(Oe=null),Oe!==r?(rt=Ka(),rt!==r?(it=S,K=I(j,rt),S=K):(M=S,S=r)):(M=S,S=r)):(M=S,S=r)):(M=S,S=r)):(M=S,S=r)):(M=S,S=r),S===r))){if(S=M,K=Ua(),K!==r)if(j=ko(),j!==r)if(Ee=pr(),Ee!==r)if(Ce=Ne(),Ce!==r){if(Oe=[],rt=Yr(),rt!==r)for(;rt!==r;)Oe.push(rt),rt=Yr();else Oe=r;Oe!==r?(it=S,K=I(j,Ce),S=K):(M=S,S=r)}else M=S,S=r;else M=S,S=r;else M=S,S=r;else M=S,S=r;if(S===r)if(S=M,K=Ua(),K!==r)if(j=ko(),j!==r){if(Ee=[],Ce=M,Oe=pr(),Oe===r&&(Oe=null),Oe!==r?(t.charCodeAt(M)===44?(rt=y,M++):(rt=r,Te===0&&Ve(B)),rt!==r?(Kt=pr(),Kt===r&&(Kt=null),Kt!==r?(Fs=ko(),Fs!==r?(it=Ce,Oe=x(j,Fs),Ce=Oe):(M=Ce,Ce=r)):(M=Ce,Ce=r)):(M=Ce,Ce=r)):(M=Ce,Ce=r),Ce!==r)for(;Ce!==r;)Ee.push(Ce),Ce=M,Oe=pr(),Oe===r&&(Oe=null),Oe!==r?(t.charCodeAt(M)===44?(rt=y,M++):(rt=r,Te===0&&Ve(B)),rt!==r?(Kt=pr(),Kt===r&&(Kt=null),Kt!==r?(Fs=ko(),Fs!==r?(it=Ce,Oe=x(j,Fs),Ce=Oe):(M=Ce,Ce=r)):(M=Ce,Ce=r)):(M=Ce,Ce=r)):(M=Ce,Ce=r);else Ee=r;Ee!==r?(Ce=pr(),Ce===r&&(Ce=null),Ce!==r?(t.charCodeAt(M)===58?(Oe=p,M++):(Oe=r,Te===0&&Ve(m)),Oe!==r?(rt=pr(),rt===r&&(rt=null),rt!==r?(Kt=Ka(),Kt!==r?(it=S,K=F(j,Ee,Kt),S=K):(M=S,S=r)):(M=S,S=r)):(M=S,S=r)):(M=S,S=r)):(M=S,S=r)}else M=S,S=r;else M=S,S=r}return S}function Ka(){var S,K,j,Ee,Ce,Oe,rt;if(S=M,K=M,Te++,j=M,Ee=vs(),Ee!==r?(Ce=sw(),Ce!==r?(t.charCodeAt(M)===45?(Oe=o,M++):(Oe=r,Te===0&&Ve(a)),Oe!==r?(rt=pr(),rt!==r?(Ee=[Ee,Ce,Oe,rt],j=Ee):(M=j,j=r)):(M=j,j=r)):(M=j,j=r)):(M=j,j=r),Te--,j!==r?(M=K,K=void 0):K=r,K!==r?(j=Yr(),j!==r?(Ee=sC(),Ee!==r?(Ce=nC(),Ce!==r?(Oe=oC(),Oe!==r?(it=S,K=L(Ce),S=K):(M=S,S=r)):(M=S,S=r)):(M=S,S=r)):(M=S,S=r)):(M=S,S=r),S===r&&(S=M,K=vs(),K!==r?(j=sC(),j!==r?(Ee=lg(),Ee!==r?(Ce=oC(),Ce!==r?(it=S,K=L(Ee),S=K):(M=S,S=r)):(M=S,S=r)):(M=S,S=r)):(M=S,S=r),S===r))if(S=M,K=Q(),K!==r){if(j=[],Ee=Yr(),Ee!==r)for(;Ee!==r;)j.push(Ee),Ee=Yr();else j=r;j!==r?(it=S,K=T(K),S=K):(M=S,S=r)}else M=S,S=r;return S}function Ua(){var S,K,j;for(Te++,S=M,K=[],t.charCodeAt(M)===32?(j=q,M++):(j=r,Te===0&&Ve(oe));j!==r;)K.push(j),t.charCodeAt(M)===32?(j=q,M++):(j=r,Te===0&&Ve(oe));return K!==r?(it=M,j=U(K),j?j=void 0:j=r,j!==r?(K=[K,j],S=K):(M=S,S=r)):(M=S,S=r),Te--,S===r&&(K=r,Te===0&&Ve(v)),S}function sw(){var S,K,j;for(S=M,K=[],t.charCodeAt(M)===32?(j=q,M++):(j=r,Te===0&&Ve(oe));j!==r;)K.push(j),t.charCodeAt(M)===32?(j=q,M++):(j=r,Te===0&&Ve(oe));return K!==r?(it=M,j=A(K),j?j=void 0:j=r,j!==r?(K=[K,j],S=K):(M=S,S=r)):(M=S,S=r),S}function sC(){var S;return it=M,S=W(),S?S=void 0:S=r,S}function oC(){var S;return it=M,S=ee(),S?S=void 0:S=r,S}function aC(){var S;return S=Ps(),S===r&&(S=Ya()),S}function ko(){var S,K,j;if(S=Ps(),S===r){if(S=M,K=[],j=Ei(),j!==r)for(;j!==r;)K.push(j),j=Ei();else K=r;K!==r&&(it=S,K=ie()),S=K}return S}function Q(){var S;return S=wl(),S===r&&(S=be(),S===r&&(S=Ps(),S===r&&(S=Ya()))),S}function Ne(){var S;return S=wl(),S===r&&(S=Ps(),S===r&&(S=Ei())),S}function Ya(){var S,K,j,Ee,Ce,Oe;if(Te++,S=M,R.test(t.charAt(M))?(K=t.charAt(M),M++):(K=r,Te===0&&Ve(ve)),K!==r){for(j=[],Ee=M,Ce=pr(),Ce===r&&(Ce=null),Ce!==r?(Fe.test(t.charAt(M))?(Oe=t.charAt(M),M++):(Oe=r,Te===0&&Ve(Ke)),Oe!==r?(Ce=[Ce,Oe],Ee=Ce):(M=Ee,Ee=r)):(M=Ee,Ee=r);Ee!==r;)j.push(Ee),Ee=M,Ce=pr(),Ce===r&&(Ce=null),Ce!==r?(Fe.test(t.charAt(M))?(Oe=t.charAt(M),M++):(Oe=r,Te===0&&Ve(Ke)),Oe!==r?(Ce=[Ce,Oe],Ee=Ce):(M=Ee,Ee=r)):(M=Ee,Ee=r);j!==r?(it=S,K=qe(),S=K):(M=S,S=r)}else M=S,S=r;return Te--,S===r&&(K=r,Te===0&&Ve(J)),S}function Ei(){var S,K,j,Ee,Ce;if(S=M,t.substr(M,2)===te?(K=te,M+=2):(K=r,Te===0&&Ve(le)),K===r&&(K=null),K!==r)if(Se.test(t.charAt(M))?(j=t.charAt(M),M++):(j=r,Te===0&&Ve(fe)),j!==r){for(Ee=[],Ie.test(t.charAt(M))?(Ce=t.charAt(M),M++):(Ce=r,Te===0&&Ve(de));Ce!==r;)Ee.push(Ce),Ie.test(t.charAt(M))?(Ce=t.charAt(M),M++):(Ce=r,Te===0&&Ve(de));Ee!==r?(it=S,K=qe(),S=K):(M=S,S=r)}else M=S,S=r;else M=S,S=r;return S}function wl(){var S,K;return S=M,t.substr(M,4)===we?(K=we,M+=4):(K=r,Te===0&&Ve(Z)),K!==r&&(it=S,K=X()),S=K,S}function be(){var S,K;return S=M,t.substr(M,4)===Ae?(K=Ae,M+=4):(K=r,Te===0&&Ve(ue)),K!==r&&(it=S,K=Be()),S=K,S===r&&(S=M,t.substr(M,5)===at?(K=at,M+=5):(K=r,Te===0&&Ve(mt)),K!==r&&(it=S,K=St()),S=K),S}function Ps(){var S,K,j,Ee;return Te++,S=M,t.charCodeAt(M)===34?(K=Ii,M++):(K=r,Te===0&&Ve(Xt)),K!==r?(t.charCodeAt(M)===34?(j=Ii,M++):(j=r,Te===0&&Ve(Xt)),j!==r?(it=S,K=_i(),S=K):(M=S,S=r)):(M=S,S=r),S===r&&(S=M,t.charCodeAt(M)===34?(K=Ii,M++):(K=r,Te===0&&Ve(Xt)),K!==r?(j=ow(),j!==r?(t.charCodeAt(M)===34?(Ee=Ii,M++):(Ee=r,Te===0&&Ve(Xt)),Ee!==r?(it=S,K=zn(j),S=K):(M=S,S=r)):(M=S,S=r)):(M=S,S=r)),Te--,S===r&&(K=r,Te===0&&Ve(xn)),S}function ow(){var S,K,j;if(S=M,K=[],j=aw(),j!==r)for(;j!==r;)K.push(j),j=aw();else K=r;return K!==r&&(it=S,K=_u(K)),S=K,S}function aw(){var S,K,j,Ee,Ce,Oe;return Kd.test(t.charAt(M))?(S=t.charAt(M),M++):(S=r,Te===0&&Ve(xs)),S===r&&(S=M,t.substr(M,2)===$u?(K=$u,M+=2):(K=r,Te===0&&Ve(Ud)),K!==r&&(it=S,K=HB()),S=K,S===r&&(S=M,t.substr(M,2)===eg?(K=eg,M+=2):(K=r,Te===0&&Ve(Yd)),K!==r&&(it=S,K=Hd()),S=K,S===r&&(S=M,t.substr(M,2)===jd?(K=jd,M+=2):(K=r,Te===0&&Ve(jB)),K!==r&&(it=S,K=GB()),S=K,S===r&&(S=M,t.substr(M,2)===tg?(K=tg,M+=2):(K=r,Te===0&&Ve(qB)),K!==r&&(it=S,K=JB()),S=K,S===r&&(S=M,t.substr(M,2)===Gd?(K=Gd,M+=2):(K=r,Te===0&&Ve(WB)),K!==r&&(it=S,K=_()),S=K,S===r&&(S=M,t.substr(M,2)===ks?(K=ks,M+=2):(K=r,Te===0&&Ve($i)),K!==r&&(it=S,K=en()),S=K,S===r&&(S=M,t.substr(M,2)===rg?(K=rg,M+=2):(K=r,Te===0&&Ve(qd)),K!==r&&(it=S,K=El()),S=K,S===r&&(S=M,t.substr(M,2)===ig?(K=ig,M+=2):(K=r,Te===0&&Ve(Jd)),K!==r&&(it=S,K=ng()),S=K,S===r&&(S=M,t.substr(M,2)===yl?(K=yl,M+=2):(K=r,Te===0&&Ve(sg)),K!==r?(j=ug(),j!==r?(Ee=ug(),Ee!==r?(Ce=ug(),Ce!==r?(Oe=ug(),Oe!==r?(it=S,K=og(j,Ee,Ce,Oe),S=K):(M=S,S=r)):(M=S,S=r)):(M=S,S=r)):(M=S,S=r)):(M=S,S=r)))))))))),S}function ug(){var S;return zB.test(t.charAt(M))?(S=t.charAt(M),M++):(S=r,Te===0&&Ve(VB)),S}function pr(){var S,K;if(Te++,S=[],Wd.test(t.charAt(M))?(K=t.charAt(M),M++):(K=r,Te===0&&Ve(zd)),K!==r)for(;K!==r;)S.push(K),Wd.test(t.charAt(M))?(K=t.charAt(M),M++):(K=r,Te===0&&Ve(zd));else S=r;return Te--,S===r&&(K=r,Te===0&&Ve(XB)),S}function pt(){var S,K;if(Te++,S=[],Vd.test(t.charAt(M))?(K=t.charAt(M),M++):(K=r,Te===0&&Ve(Xd)),K!==r)for(;K!==r;)S.push(K),Vd.test(t.charAt(M))?(K=t.charAt(M),M++):(K=r,Te===0&&Ve(Xd));else S=r;return Te--,S===r&&(K=r,Te===0&&Ve(ZB)),S}function Yr(){var S,K,j,Ee,Ce,Oe;if(S=M,K=vs(),K!==r){for(j=[],Ee=M,Ce=pr(),Ce===r&&(Ce=null),Ce!==r?(Oe=vs(),Oe!==r?(Ce=[Ce,Oe],Ee=Ce):(M=Ee,Ee=r)):(M=Ee,Ee=r);Ee!==r;)j.push(Ee),Ee=M,Ce=pr(),Ce===r&&(Ce=null),Ce!==r?(Oe=vs(),Oe!==r?(Ce=[Ce,Oe],Ee=Ce):(M=Ee,Ee=r)):(M=Ee,Ee=r);j!==r?(K=[K,j],S=K):(M=S,S=r)}else M=S,S=r;return S}function vs(){var S;return t.substr(M,2)===Zd?(S=Zd,M+=2):(S=r,Te===0&&Ve(_B)),S===r&&(t.charCodeAt(M)===10?(S=$B,M++):(S=r,Te===0&&Ve(ew)),S===r&&(t.charCodeAt(M)===13?(S=tw,M++):(S=r,Te===0&&Ve(rw)))),S}let AC=2,Ql=0;if(Oa=n(),Oa!==r&&M===t.length)return Oa;throw Oa!==r&&M{var gwe=typeof global=="object"&&global&&global.Object===Object&&global;kJ.exports=gwe});var Tn=C((XXe,PJ)=>{var fwe=BS(),hwe=typeof self=="object"&&self&&self.Object===Object&&self,pwe=fwe||hwe||Function("return this")();PJ.exports=pwe});var LA=C((ZXe,vJ)=>{var dwe=Tn(),Cwe=dwe.Symbol;vJ.exports=Cwe});var RJ=C((_Xe,FJ)=>{function mwe(t,e){for(var r=-1,i=t==null?0:t.length,n=Array(i);++r{var Iwe=Array.isArray;LJ.exports=Iwe});var TJ=C((eZe,NJ)=>{var MJ=LA(),OJ=Object.prototype,Ewe=OJ.hasOwnProperty,ywe=OJ.toString,Zf=MJ?MJ.toStringTag:void 0;function Bwe(t){var e=Ewe.call(t,Zf),r=t[Zf];try{t[Zf]=void 0;var i=!0}catch(s){}var n=ywe.call(t);return i&&(e?t[Zf]=r:delete t[Zf]),n}NJ.exports=Bwe});var UJ=C((tZe,KJ)=>{var wwe=Object.prototype,Qwe=wwe.toString;function bwe(t){return Qwe.call(t)}KJ.exports=bwe});var NA=C((rZe,YJ)=>{var HJ=LA(),Dwe=TJ(),Swe=UJ(),xwe="[object Null]",kwe="[object Undefined]",jJ=HJ?HJ.toStringTag:void 0;function Pwe(t){return t==null?t===void 0?kwe:xwe:jJ&&jJ in Object(t)?Dwe(t):Swe(t)}YJ.exports=Pwe});var ls=C((iZe,GJ)=>{function vwe(t){return t!=null&&typeof t=="object"}GJ.exports=vwe});var jI=C((nZe,qJ)=>{var Fwe=NA(),Rwe=ls(),Lwe="[object Symbol]";function Nwe(t){return typeof t=="symbol"||Rwe(t)&&Fwe(t)==Lwe}qJ.exports=Nwe});var ZJ=C((sZe,JJ)=>{var WJ=LA(),Mwe=RJ(),Owe=dn(),Twe=jI(),Kwe=1/0,zJ=WJ?WJ.prototype:void 0,VJ=zJ?zJ.toString:void 0;function XJ(t){if(typeof t=="string")return t;if(Owe(t))return Mwe(t,XJ)+"";if(Twe(t))return VJ?VJ.call(t):"";var e=t+"";return e=="0"&&1/t==-Kwe?"-0":e}JJ.exports=XJ});var kc=C((oZe,_J)=>{var Uwe=ZJ();function Ywe(t){return t==null?"":Uwe(t)}_J.exports=Ywe});var wS=C((aZe,$J)=>{function Hwe(t,e,r){var i=-1,n=t.length;e<0&&(e=-e>n?0:n+e),r=r>n?n:r,r<0&&(r+=n),n=e>r?0:r-e>>>0,e>>>=0;for(var s=Array(n);++i{var jwe=wS();function Gwe(t,e,r){var i=t.length;return r=r===void 0?i:r,!e&&r>=i?t:jwe(t,e,r)}eW.exports=Gwe});var QS=C((lZe,rW)=>{var qwe="\\ud800-\\udfff",Jwe="\\u0300-\\u036f",Wwe="\\ufe20-\\ufe2f",zwe="\\u20d0-\\u20ff",Vwe=Jwe+Wwe+zwe,Xwe="\\ufe0e\\ufe0f",Zwe="\\u200d",_we=RegExp("["+Zwe+qwe+Vwe+Xwe+"]");function $we(t){return _we.test(t)}rW.exports=$we});var nW=C((cZe,iW)=>{function eQe(t){return t.split("")}iW.exports=eQe});var gW=C((uZe,sW)=>{var oW="\\ud800-\\udfff",tQe="\\u0300-\\u036f",rQe="\\ufe20-\\ufe2f",iQe="\\u20d0-\\u20ff",nQe=tQe+rQe+iQe,sQe="\\ufe0e\\ufe0f",oQe="["+oW+"]",bS="["+nQe+"]",DS="\\ud83c[\\udffb-\\udfff]",aQe="(?:"+bS+"|"+DS+")",aW="[^"+oW+"]",AW="(?:\\ud83c[\\udde6-\\uddff]){2}",lW="[\\ud800-\\udbff][\\udc00-\\udfff]",AQe="\\u200d",cW=aQe+"?",uW="["+sQe+"]?",lQe="(?:"+AQe+"(?:"+[aW,AW,lW].join("|")+")"+uW+cW+")*",cQe=uW+cW+lQe,uQe="(?:"+[aW+bS+"?",bS,AW,lW,oQe].join("|")+")",gQe=RegExp(DS+"(?="+DS+")|"+uQe+cQe,"g");function fQe(t){return t.match(gQe)||[]}sW.exports=fQe});var hW=C((gZe,fW)=>{var hQe=nW(),pQe=QS(),dQe=gW();function CQe(t){return pQe(t)?dQe(t):hQe(t)}fW.exports=CQe});var dW=C((fZe,pW)=>{var mQe=tW(),IQe=QS(),EQe=hW(),yQe=kc();function BQe(t){return function(e){e=yQe(e);var r=IQe(e)?EQe(e):void 0,i=r?r[0]:e.charAt(0),n=r?mQe(r,1).join(""):e.slice(1);return i[t]()+n}}pW.exports=BQe});var mW=C((hZe,CW)=>{var wQe=dW(),QQe=wQe("toUpperCase");CW.exports=QQe});var SS=C((pZe,IW)=>{var bQe=kc(),DQe=mW();function SQe(t){return DQe(bQe(t).toLowerCase())}IW.exports=SQe});var yW=C((dZe,EW)=>{"use strict";EW.exports=(t,...e)=>new Promise(r=>{r(t(...e))})});var GI=C((CZe,xS)=>{"use strict";var xQe=yW(),BW=t=>{if(t<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],r=0,i=()=>{r--,e.length>0&&e.shift()()},n=(a,l,...c)=>{r++;let u=xQe(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{rnew Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>r},pendingCount:{get:()=>e.length}}),o};xS.exports=BW;xS.exports.default=BW});var kW=C((xZe,WI)=>{function kQe(){var t=0,e=1,r=2,i=3,n=4,s=5,o=6,a=7,l=8,c=9,u=10,g=11,f=12,h=13,p=14,m=15,I=16,y=17,B=0,x=1,F=2,L=3,T=4;function v(A,W){return 55296<=A.charCodeAt(W)&&A.charCodeAt(W)<=56319&&56320<=A.charCodeAt(W+1)&&A.charCodeAt(W+1)<=57343}function q(A,W){W===void 0&&(W=0);var ee=A.charCodeAt(W);if(55296<=ee&&ee<=56319&&W=1){var ie=A.charCodeAt(W-1),J=ee;return 55296<=ie&&ie<=56319?(ie-55296)*1024+(J-56320)+65536:J}return ee}function oe(A,W,ee){var ie=[A].concat(W).concat([ee]),J=ie[ie.length-2],R=ee,ve=ie.lastIndexOf(p);if(ve>1&&ie.slice(1,ve).every(function(qe){return qe==i})&&[i,h,y].indexOf(A)==-1)return F;var Fe=ie.lastIndexOf(n);if(Fe>0&&ie.slice(1,Fe).every(function(qe){return qe==n})&&[f,n].indexOf(J)==-1)return ie.filter(function(qe){return qe==n}).length%2==1?L:T;if(J==t&&R==e)return B;if(J==r||J==t||J==e)return R==p&&W.every(function(qe){return qe==i})?F:x;if(R==r||R==t||R==e)return x;if(J==o&&(R==o||R==a||R==c||R==u))return B;if((J==c||J==a)&&(R==a||R==l))return B;if((J==u||J==l)&&R==l)return B;if(R==i||R==m)return B;if(R==s)return B;if(J==f)return B;var Ke=ie.indexOf(i)!=-1?ie.lastIndexOf(i)-1:ie.length-2;return[h,y].indexOf(ie[Ke])!=-1&&ie.slice(Ke+1,-1).every(function(qe){return qe==i})&&R==p||J==m&&[I,y].indexOf(R)!=-1?B:W.indexOf(n)!=-1?F:J==n&&R==n?B:x}this.nextBreak=function(A,W){if(W===void 0&&(W=0),W<0)return 0;if(W>=A.length-1)return A.length;for(var ee=U(q(A,W)),ie=[],J=W+1;J{var PQe=kW(),vQe=/^(.*?)(\x1b\[[^m]+m|\x1b\]8;;.*?(\x1b\\|\u0007))/,FQe=new PQe;PW.exports=(t,e=0,r=t.length)=>{if(e<0||r<0)throw new RangeError("Negative indices aren't supported by this implementation");let i=r-e,n="",s=0,o=0;for(;t.length>0;){let a=t.match(vQe)||[t,t,void 0],l=FQe.splitGraphemes(a[1]),c=Math.min(e-s,l.length);l=l.slice(c);let u=Math.min(i-o,l.length);n+=l.slice(0,u).join(""),s+=c,o+=u,typeof a[2]!="undefined"&&(n+=a[2]),t=t.slice(a[0].length)}return n}});var vc=C((t_e,GW)=>{"use strict";var qW=new Map([["C","cwd"],["f","file"],["z","gzip"],["P","preservePaths"],["U","unlink"],["strip-components","strip"],["stripComponents","strip"],["keep-newer","newer"],["keepNewer","newer"],["keep-newer-files","newer"],["keepNewerFiles","newer"],["k","keep"],["keep-existing","keep"],["keepExisting","keep"],["m","noMtime"],["no-mtime","noMtime"],["p","preserveOwner"],["L","follow"],["h","follow"]]),e_e=GW.exports=t=>t?Object.keys(t).map(e=>[qW.has(e)?qW.get(e):e,t[e]]).reduce((e,r)=>(e[r[0]]=r[1],e),Object.create(null)):{}});var Fc=C((r_e,JW)=>{"use strict";var JQe=require("events"),WW=require("stream"),eh=_g(),zW=require("string_decoder").StringDecoder,no=Symbol("EOF"),th=Symbol("maybeEmitEnd"),oa=Symbol("emittedEnd"),ZI=Symbol("emittingEnd"),_I=Symbol("closed"),VW=Symbol("read"),FS=Symbol("flush"),XW=Symbol("flushChunk"),vi=Symbol("encoding"),so=Symbol("decoder"),$I=Symbol("flowing"),rh=Symbol("paused"),ih=Symbol("resume"),hi=Symbol("bufferLength"),ZW=Symbol("bufferPush"),RS=Symbol("bufferShift"),Xr=Symbol("objectMode"),Zr=Symbol("destroyed"),_W=global._MP_NO_ITERATOR_SYMBOLS_!=="1",WQe=_W&&Symbol.asyncIterator||Symbol("asyncIterator not implemented"),zQe=_W&&Symbol.iterator||Symbol("iterator not implemented"),$W=t=>t==="end"||t==="finish"||t==="prefinish",VQe=t=>t instanceof ArrayBuffer||typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,XQe=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t);JW.exports=class e3 extends WW{constructor(e){super();this[$I]=!1,this[rh]=!1,this.pipes=new eh,this.buffer=new eh,this[Xr]=e&&e.objectMode||!1,this[Xr]?this[vi]=null:this[vi]=e&&e.encoding||null,this[vi]==="buffer"&&(this[vi]=null),this[so]=this[vi]?new zW(this[vi]):null,this[no]=!1,this[oa]=!1,this[ZI]=!1,this[_I]=!1,this.writable=!0,this.readable=!0,this[hi]=0,this[Zr]=!1}get bufferLength(){return this[hi]}get encoding(){return this[vi]}set encoding(e){if(this[Xr])throw new Error("cannot set encoding in objectMode");if(this[vi]&&e!==this[vi]&&(this[so]&&this[so].lastNeed||this[hi]))throw new Error("cannot change encoding");this[vi]!==e&&(this[so]=e?new zW(e):null,this.buffer.length&&(this.buffer=this.buffer.map(r=>this[so].write(r)))),this[vi]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Xr]}set objectMode(e){this[Xr]=this[Xr]||!!e}write(e,r,i){if(this[no])throw new Error("write after end");return this[Zr]?(this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0):(typeof r=="function"&&(i=r,r="utf8"),r||(r="utf8"),!this[Xr]&&!Buffer.isBuffer(e)&&(XQe(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):VQe(e)?e=Buffer.from(e):typeof e!="string"&&(this.objectMode=!0)),!this.objectMode&&!e.length?(this[hi]!==0&&this.emit("readable"),i&&i(),this.flowing):(typeof e=="string"&&!this[Xr]&&!(r===this[vi]&&!this[so].lastNeed)&&(e=Buffer.from(e,r)),Buffer.isBuffer(e)&&this[vi]&&(e=this[so].write(e)),this.flowing?(this[hi]!==0&&this[FS](!0),this.emit("data",e)):this[ZW](e),this[hi]!==0&&this.emit("readable"),i&&i(),this.flowing))}read(e){if(this[Zr])return null;try{return this[hi]===0||e===0||e>this[hi]?null:(this[Xr]&&(e=null),this.buffer.length>1&&!this[Xr]&&(this.encoding?this.buffer=new eh([Array.from(this.buffer).join("")]):this.buffer=new eh([Buffer.concat(Array.from(this.buffer),this[hi])])),this[VW](e||null,this.buffer.head.value))}finally{this[th]()}}[VW](e,r){return e===r.length||e===null?this[RS]():(this.buffer.head.value=r.slice(e),r=r.slice(0,e),this[hi]-=e),this.emit("data",r),!this.buffer.length&&!this[no]&&this.emit("drain"),r}end(e,r,i){return typeof e=="function"&&(i=e,e=null),typeof r=="function"&&(i=r,r="utf8"),e&&this.write(e,r),i&&this.once("end",i),this[no]=!0,this.writable=!1,(this.flowing||!this[rh])&&this[th](),this}[ih](){this[Zr]||(this[rh]=!1,this[$I]=!0,this.emit("resume"),this.buffer.length?this[FS]():this[no]?this[th]():this.emit("drain"))}resume(){return this[ih]()}pause(){this[$I]=!1,this[rh]=!0}get destroyed(){return this[Zr]}get flowing(){return this[$I]}get paused(){return this[rh]}[ZW](e){return this[Xr]?this[hi]+=1:this[hi]+=e.length,this.buffer.push(e)}[RS](){return this.buffer.length&&(this[Xr]?this[hi]-=1:this[hi]-=this.buffer.head.value.length),this.buffer.shift()}[FS](e){do;while(this[XW](this[RS]()));!e&&!this.buffer.length&&!this[no]&&this.emit("drain")}[XW](e){return e?(this.emit("data",e),this.flowing):!1}pipe(e,r){if(this[Zr])return;let i=this[oa];r=r||{},e===process.stdout||e===process.stderr?r.end=!1:r.end=r.end!==!1;let n={dest:e,opts:r,ondrain:s=>this[ih]()};return this.pipes.push(n),e.on("drain",n.ondrain),this[ih](),i&&n.opts.end&&n.dest.end(),e}addListener(e,r){return this.on(e,r)}on(e,r){try{return super.on(e,r)}finally{e==="data"&&!this.pipes.length&&!this.flowing?this[ih]():$W(e)&&this[oa]&&(super.emit(e),this.removeAllListeners(e))}}get emittedEnd(){return this[oa]}[th](){!this[ZI]&&!this[oa]&&!this[Zr]&&this.buffer.length===0&&this[no]&&(this[ZI]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[_I]&&this.emit("close"),this[ZI]=!1)}emit(e,r){if(e!=="error"&&e!=="close"&&e!==Zr&&this[Zr])return;if(e==="data"){if(!r)return;this.pipes.length&&this.pipes.forEach(n=>n.dest.write(r)===!1&&this.pause())}else if(e==="end"){if(this[oa]===!0)return;this[oa]=!0,this.readable=!1,this[so]&&(r=this[so].end(),r&&(this.pipes.forEach(n=>n.dest.write(r)),super.emit("data",r))),this.pipes.forEach(n=>{n.dest.removeListener("drain",n.ondrain),n.opts.end&&n.dest.end()})}else if(e==="close"&&(this[_I]=!0,!this[oa]&&!this[Zr]))return;let i=new Array(arguments.length);if(i[0]=e,i[1]=r,arguments.length>2)for(let n=2;n{e.push(i),this[Xr]||(e.dataLength+=i.length)}),r.then(()=>e)}concat(){return this[Xr]?Promise.reject(new Error("cannot concat in objectMode")):this.collect().then(e=>this[Xr]?Promise.reject(new Error("cannot concat in objectMode")):this[vi]?e.join(""):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,r)=>{this.on(Zr,()=>r(new Error("stream destroyed"))),this.on("end",()=>e()),this.on("error",i=>r(i))})}[WQe](){return{next:()=>{let r=this.read();if(r!==null)return Promise.resolve({done:!1,value:r});if(this[no])return Promise.resolve({done:!0});let i=null,n=null,s=c=>{this.removeListener("data",o),this.removeListener("end",a),n(c)},o=c=>{this.removeListener("error",s),this.removeListener("end",a),this.pause(),i({value:c,done:!!this[no]})},a=()=>{this.removeListener("error",s),this.removeListener("data",o),i({done:!0})},l=()=>s(new Error("stream destroyed"));return new Promise((c,u)=>{n=u,i=c,this.once(Zr,l),this.once("error",s),this.once("end",a),this.once("data",o)})}}}[zQe](){return{next:()=>{let r=this.read();return{value:r,done:r===null}}}}destroy(e){return this[Zr]?(e?this.emit("error",e):this.emit(Zr),this):(this[Zr]=!0,this.buffer=new eh,this[hi]=0,typeof this.close=="function"&&!this[_I]&&this.close(),e?this.emit("error",e):this.emit(Zr),this)}static isStream(e){return!!e&&(e instanceof e3||e instanceof WW||e instanceof JQe&&(typeof e.pipe=="function"||typeof e.write=="function"&&typeof e.end=="function"))}}});var r3=C((i_e,t3)=>{var ZQe=require("zlib").constants||{ZLIB_VERNUM:4736};t3.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:Infinity,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},ZQe))});var HS=C(Ji=>{"use strict";var LS=require("assert"),aa=require("buffer").Buffer,i3=require("zlib"),MA=Ji.constants=r3(),_Qe=Fc(),n3=aa.concat,OA=Symbol("_superWrite"),nh=class extends Error{constructor(e){super("zlib: "+e.message);this.code=e.code,this.errno=e.errno,this.code||(this.code="ZLIB_ERROR"),this.message="zlib: "+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return"ZlibError"}},$Qe=Symbol("opts"),sh=Symbol("flushFlag"),s3=Symbol("finishFlushFlag"),NS=Symbol("fullFlushFlag"),Lt=Symbol("handle"),eE=Symbol("onError"),Rc=Symbol("sawError"),MS=Symbol("level"),OS=Symbol("strategy"),TS=Symbol("ended"),n_e=Symbol("_defaultFullFlush"),KS=class extends _Qe{constructor(e,r){if(!e||typeof e!="object")throw new TypeError("invalid options for ZlibBase constructor");super(e);this[Rc]=!1,this[TS]=!1,this[$Qe]=e,this[sh]=e.flush,this[s3]=e.finishFlush;try{this[Lt]=new i3[r](e)}catch(i){throw new nh(i)}this[eE]=i=>{this[Rc]||(this[Rc]=!0,this.close(),this.emit("error",i))},this[Lt].on("error",i=>this[eE](new nh(i))),this.once("end",()=>this.close)}close(){this[Lt]&&(this[Lt].close(),this[Lt]=null,this.emit("close"))}reset(){if(!this[Rc])return LS(this[Lt],"zlib binding closed"),this[Lt].reset()}flush(e){this.ended||(typeof e!="number"&&(e=this[NS]),this.write(Object.assign(aa.alloc(0),{[sh]:e})))}end(e,r,i){return e&&this.write(e,r),this.flush(this[s3]),this[TS]=!0,super.end(null,null,i)}get ended(){return this[TS]}write(e,r,i){if(typeof r=="function"&&(i=r,r="utf8"),typeof e=="string"&&(e=aa.from(e,r)),this[Rc])return;LS(this[Lt],"zlib binding closed");let n=this[Lt]._handle,s=n.close;n.close=()=>{};let o=this[Lt].close;this[Lt].close=()=>{},aa.concat=c=>c;let a;try{let c=typeof e[sh]=="number"?e[sh]:this[sh];a=this[Lt]._processChunk(e,c),aa.concat=n3}catch(c){aa.concat=n3,this[eE](new nh(c))}finally{this[Lt]&&(this[Lt]._handle=n,n.close=s,this[Lt].close=o,this[Lt].removeAllListeners("error"))}this[Lt]&&this[Lt].on("error",c=>this[eE](new nh(c)));let l;if(a)if(Array.isArray(a)&&a.length>0){l=this[OA](aa.from(a[0]));for(let c=1;c{this.flush(n),s()};try{this[Lt].params(e,r)}finally{this[Lt].flush=i}this[Lt]&&(this[MS]=e,this[OS]=r)}}}},o3=class extends Aa{constructor(e){super(e,"Deflate")}},a3=class extends Aa{constructor(e){super(e,"Inflate")}},US=Symbol("_portable"),A3=class extends Aa{constructor(e){super(e,"Gzip");this[US]=e&&!!e.portable}[OA](e){return this[US]?(this[US]=!1,e[9]=255,super[OA](e)):super[OA](e)}},l3=class extends Aa{constructor(e){super(e,"Gunzip")}},c3=class extends Aa{constructor(e){super(e,"DeflateRaw")}},u3=class extends Aa{constructor(e){super(e,"InflateRaw")}},g3=class extends Aa{constructor(e){super(e,"Unzip")}},YS=class extends KS{constructor(e,r){e=e||{},e.flush=e.flush||MA.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||MA.BROTLI_OPERATION_FINISH,super(e,r),this[NS]=MA.BROTLI_OPERATION_FLUSH}},f3=class extends YS{constructor(e){super(e,"BrotliCompress")}},h3=class extends YS{constructor(e){super(e,"BrotliDecompress")}};Ji.Deflate=o3;Ji.Inflate=a3;Ji.Gzip=A3;Ji.Gunzip=l3;Ji.DeflateRaw=c3;Ji.InflateRaw=u3;Ji.Unzip=g3;typeof i3.BrotliCompress=="function"?(Ji.BrotliCompress=f3,Ji.BrotliDecompress=h3):Ji.BrotliCompress=Ji.BrotliDecompress=class{constructor(){throw new Error("Brotli is not supported in this version of Node.js")}}});var oh=C(tE=>{"use strict";tE.name=new Map([["0","File"],["","OldFile"],["1","Link"],["2","SymbolicLink"],["3","CharacterDevice"],["4","BlockDevice"],["5","Directory"],["6","FIFO"],["7","ContiguousFile"],["g","GlobalExtendedHeader"],["x","ExtendedHeader"],["A","SolarisACL"],["D","GNUDumpDir"],["I","Inode"],["K","NextFileHasLongLinkpath"],["L","NextFileHasLongPath"],["M","ContinuationFile"],["N","OldGnuLongPath"],["S","SparseFile"],["V","TapeVolumeHeader"],["X","OldExtendedHeader"]]);tE.code=new Map(Array.from(tE.name).map(t=>[t[1],t[0]]))});var ah=C((l_e,p3)=>{"use strict";var a_e=oh(),e0e=Fc(),jS=Symbol("slurp");p3.exports=class extends e0e{constructor(e,r,i){super();switch(this.pause(),this.extended=r,this.globalExtended=i,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case"File":case"OldFile":case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":case"ContiguousFile":case"GNUDumpDir":break;case"NextFileHasLongLinkpath":case"NextFileHasLongPath":case"OldGnuLongPath":case"GlobalExtendedHeader":case"ExtendedHeader":case"OldExtendedHeader":this.meta=!0;break;default:this.ignore=!0}this.path=e.path,this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=e.linkpath,this.uname=e.uname,this.gname=e.gname,r&&this[jS](r),i&&this[jS](i,!0)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");let i=this.remain,n=this.blockRemain;return this.remain=Math.max(0,i-r),this.blockRemain=Math.max(0,n-r),this.ignore?!0:i>=r?super.write(e):super.write(e.slice(0,i))}[jS](e,r){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(r&&i==="path")&&(this[i]=e[i])}}});var m3=C(GS=>{"use strict";var c_e=GS.encode=(t,e)=>{if(Number.isSafeInteger(t))t<0?r0e(t,e):t0e(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},t0e=(t,e)=>{e[0]=128;for(var r=e.length;r>1;r--)e[r-1]=t&255,t=Math.floor(t/256)},r0e=(t,e)=>{e[0]=255;var r=!1;t=t*-1;for(var i=e.length;i>1;i--){var n=t&255;t=Math.floor(t/256),r?e[i-1]=d3(n):n===0?e[i-1]=0:(r=!0,e[i-1]=C3(n))}},u_e=GS.parse=t=>{var e=t[t.length-1],r=t[0],i;if(r===128)i=n0e(t.slice(1,t.length));else if(r===255)i=i0e(t);else throw Error("invalid base256 encoding");if(!Number.isSafeInteger(i))throw Error("parsed number outside of javascript safe integer range");return i},i0e=t=>{for(var e=t.length,r=0,i=!1,n=e-1;n>-1;n--){var s=t[n],o;i?o=d3(s):s===0?o=s:(i=!0,o=C3(s)),o!==0&&(r-=o*Math.pow(256,e-n-1))}return r},n0e=t=>{for(var e=t.length,r=0,i=e-1;i>-1;i--){var n=t[i];n!==0&&(r+=n*Math.pow(256,e-i-1))}return r},d3=t=>(255^t)&255,C3=t=>(255^t)+1&255});var Nc=C((f_e,I3)=>{"use strict";var qS=oh(),Lc=require("path").posix,E3=m3(),JS=Symbol("slurp"),Wi=Symbol("type"),y3=class{constructor(e,r,i,n){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[Wi]="0",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,r||0,i,n):e&&this.set(e)}decode(e,r,i,n){if(r||(r=0),!e||!(e.length>=r+512))throw new Error("need 512 bytes for header");if(this.path=TA(e,r,100),this.mode=la(e,r+100,8),this.uid=la(e,r+108,8),this.gid=la(e,r+116,8),this.size=la(e,r+124,12),this.mtime=WS(e,r+136,12),this.cksum=la(e,r+148,12),this[JS](i),this[JS](n,!0),this[Wi]=TA(e,r+156,1),this[Wi]===""&&(this[Wi]="0"),this[Wi]==="0"&&this.path.substr(-1)==="/"&&(this[Wi]="5"),this[Wi]==="5"&&(this.size=0),this.linkpath=TA(e,r+157,100),e.slice(r+257,r+265).toString()==="ustar\x0000")if(this.uname=TA(e,r+265,32),this.gname=TA(e,r+297,32),this.devmaj=la(e,r+329,8),this.devmin=la(e,r+337,8),e[r+475]!==0){let o=TA(e,r+345,155);this.path=o+"/"+this.path}else{let o=TA(e,r+345,130);o&&(this.path=o+"/"+this.path),this.atime=WS(e,r+476,12),this.ctime=WS(e,r+488,12)}let s=8*32;for(let o=r;o=r+512))throw new Error("need 512 bytes for header");let i=this.ctime||this.atime?130:155,n=s0e(this.path||"",i),s=n[0],o=n[1];this.needPax=n[2],this.needPax=KA(e,r,100,s)||this.needPax,this.needPax=ca(e,r+100,8,this.mode)||this.needPax,this.needPax=ca(e,r+108,8,this.uid)||this.needPax,this.needPax=ca(e,r+116,8,this.gid)||this.needPax,this.needPax=ca(e,r+124,12,this.size)||this.needPax,this.needPax=zS(e,r+136,12,this.mtime)||this.needPax,e[r+156]=this[Wi].charCodeAt(0),this.needPax=KA(e,r+157,100,this.linkpath)||this.needPax,e.write("ustar\x0000",r+257,8),this.needPax=KA(e,r+265,32,this.uname)||this.needPax,this.needPax=KA(e,r+297,32,this.gname)||this.needPax,this.needPax=ca(e,r+329,8,this.devmaj)||this.needPax,this.needPax=ca(e,r+337,8,this.devmin)||this.needPax,this.needPax=KA(e,r+345,i,o)||this.needPax,e[r+475]!==0?this.needPax=KA(e,r+345,155,o)||this.needPax:(this.needPax=KA(e,r+345,130,o)||this.needPax,this.needPax=zS(e,r+476,12,this.atime)||this.needPax,this.needPax=zS(e,r+488,12,this.ctime)||this.needPax);let a=8*32;for(let l=r;l{let r=100,i=t,n="",s,o=Lc.parse(t).root||".";if(Buffer.byteLength(i)r&&Buffer.byteLength(n)<=e?s=[i.substr(0,r-1),n,!0]:(i=Lc.join(Lc.basename(n),i),n=Lc.dirname(n));while(n!==o&&!s);s||(s=[t.substr(0,r-1),"",!0])}return s},TA=(t,e,r)=>t.slice(e,e+r).toString("utf8").replace(/\0.*/,""),WS=(t,e,r)=>o0e(la(t,e,r)),o0e=t=>t===null?null:new Date(t*1e3),la=(t,e,r)=>t[e]&128?E3.parse(t.slice(e,e+r)):a0e(t,e,r),A0e=t=>isNaN(t)?null:t,a0e=(t,e,r)=>A0e(parseInt(t.slice(e,e+r).toString("utf8").replace(/\0.*$/,"").trim(),8)),l0e={12:8589934591,8:2097151},ca=(t,e,r,i)=>i===null?!1:i>l0e[r]||i<0?(E3.encode(i,t.slice(e,e+r)),!0):(c0e(t,e,r,i),!1),c0e=(t,e,r,i)=>t.write(u0e(i,r),e,r,"ascii"),u0e=(t,e)=>g0e(Math.floor(t).toString(8),e),g0e=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",zS=(t,e,r,i)=>i===null?!1:ca(t,e,r,i.getTime()/1e3),f0e=new Array(156).join("\0"),KA=(t,e,r,i)=>i===null?!1:(t.write(i+f0e,e,r,"utf8"),i.length!==Buffer.byteLength(i)||i.length>r);I3.exports=y3});var iE=C((h_e,B3)=>{"use strict";var h0e=Nc(),p0e=require("path"),rE=class{constructor(e,r){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=r||!1}encode(){let e=this.encodeBody();if(e==="")return null;let r=Buffer.byteLength(e),i=512*Math.ceil(1+r/512),n=Buffer.allocUnsafe(i);for(let s=0;s<512;s++)n[s]=0;new h0e({path:("PaxHeader/"+p0e.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:r,mtime:this.mtime||null,type:this.global?"GlobalExtendedHeader":"ExtendedHeader",linkpath:"",uname:this.uname||"",gname:this.gname||"",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(n),n.write(e,512,r,"utf8");for(let s=r+512;s=Math.pow(10,s)&&(s+=1),s+n+i}};rE.parse=(t,e,r)=>new rE(d0e(C0e(t),e),r);var d0e=(t,e)=>e?Object.keys(t).reduce((r,i)=>(r[i]=t[i],r),e):t,C0e=t=>t.replace(/\n$/,"").split(` -`).reduce(m0e,Object.create(null)),m0e=(t,e)=>{let r=parseInt(e,10);if(r!==Buffer.byteLength(e)+1)return t;e=e.substr((r+" ").length);let i=e.split("="),n=i.shift().replace(/^SCHILY\.(dev|ino|nlink)/,"$1");if(!n)return t;let s=i.join("=");return t[n]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(n)?new Date(s*1e3):/^[0-9]+$/.test(s)?+s:s,t};B3.exports=rE});var nE=C((p_e,w3)=>{"use strict";w3.exports=t=>class extends t{warn(e,r,i={}){this.file&&(i.file=this.file),this.cwd&&(i.cwd=this.cwd),i.code=r instanceof Error&&r.code||e,i.tarCode=e,!this.strict&&i.recoverable!==!1?(r instanceof Error&&(i=Object.assign(r,i),r=r.message),this.emit("warn",i.tarCode,r,i)):r instanceof Error?this.emit("error",Object.assign(r,i)):this.emit("error",Object.assign(new Error(`${e}: ${r}`),i))}}});var XS=C((d_e,Q3)=>{"use strict";var sE=["|","<",">","?",":"],VS=sE.map(t=>String.fromCharCode(61440+t.charCodeAt(0))),I0e=new Map(sE.map((t,e)=>[t,VS[e]])),E0e=new Map(VS.map((t,e)=>[t,sE[e]]));Q3.exports={encode:t=>sE.reduce((e,r)=>e.split(r).join(I0e.get(r)),t),decode:t=>VS.reduce((e,r)=>e.split(r).join(E0e.get(r)),t)}});var D3=C((C_e,b3)=>{"use strict";b3.exports=(t,e,r)=>(t&=4095,r&&(t=(t|384)&~18),e&&(t&256&&(t|=64),t&32&&(t|=8),t&4&&(t|=1)),t)});var ix=C((B_e,S3)=>{"use strict";var x3=Fc(),k3=iE(),P3=Nc(),m_e=ah(),us=require("fs"),Mc=require("path"),I_e=oh(),y0e=16*1024*1024,v3=Symbol("process"),F3=Symbol("file"),R3=Symbol("directory"),ZS=Symbol("symlink"),L3=Symbol("hardlink"),Ah=Symbol("header"),oE=Symbol("read"),_S=Symbol("lstat"),aE=Symbol("onlstat"),$S=Symbol("onread"),ex=Symbol("onreadlink"),tx=Symbol("openfile"),rx=Symbol("onopenfile"),UA=Symbol("close"),AE=Symbol("mode"),N3=nE(),B0e=XS(),M3=D3(),lE=N3(class extends x3{constructor(e,r){if(r=r||{},super(r),typeof e!="string")throw new TypeError("path is required");this.path=e,this.portable=!!r.portable,this.myuid=process.getuid&&process.getuid(),this.myuser=process.env.USER||"",this.maxReadSize=r.maxReadSize||y0e,this.linkCache=r.linkCache||new Map,this.statCache=r.statCache||new Map,this.preservePaths=!!r.preservePaths,this.cwd=r.cwd||process.cwd(),this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.mtime=r.mtime||null,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let i=!1;if(!this.preservePaths&&Mc.win32.isAbsolute(e)){let n=Mc.win32.parse(e);this.path=e.substr(n.root.length),i=n.root}this.win32=!!r.win32||process.platform==="win32",this.win32&&(this.path=B0e.decode(this.path.replace(/\\/g,"/")),e=e.replace(/\\/g,"/")),this.absolute=r.absolute||Mc.resolve(this.cwd,e),this.path===""&&(this.path="./"),i&&this.warn("TAR_ENTRY_INFO",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.statCache.has(this.absolute)?this[aE](this.statCache.get(this.absolute)):this[_S]()}[_S](){us.lstat(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[aE](r)})}[aE](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=w0e(e),this.emit("stat",e),this[v3]()}[v3](){switch(this.type){case"File":return this[F3]();case"Directory":return this[R3]();case"SymbolicLink":return this[ZS]();default:return this.end()}}[AE](e){return M3(e,this.type==="Directory",this.portable)}[Ah](){this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.header=new P3({path:this.path,linkpath:this.linkpath,mode:this[AE](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:"",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&this.write(new k3({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this.path,linkpath:this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),this.write(this.header.block)}[R3](){this.path.substr(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[Ah](),this.end()}[ZS](){us.readlink(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[ex](r)})}[ex](e){this.linkpath=e.replace(/\\/g,"/"),this[Ah](),this.end()}[L3](e){this.type="Link",this.linkpath=Mc.relative(this.cwd,e).replace(/\\/g,"/"),this.stat.size=0,this[Ah](),this.end()}[F3](){if(this.stat.nlink>1){let e=this.stat.dev+":"+this.stat.ino;if(this.linkCache.has(e)){let r=this.linkCache.get(e);if(r.indexOf(this.cwd)===0)return this[L3](r)}this.linkCache.set(e,this.absolute)}if(this[Ah](),this.stat.size===0)return this.end();this[tx]()}[tx](){us.open(this.absolute,"r",(e,r)=>{if(e)return this.emit("error",e);this[rx](r)})}[rx](e){let r=512*Math.ceil(this.stat.size/512),i=Math.min(r,this.maxReadSize),n=Buffer.allocUnsafe(i);this[oE](e,n,0,n.length,0,this.stat.size,r)}[oE](e,r,i,n,s,o,a){us.read(e,r,i,n,s,(l,c)=>{if(l)return this[UA](e,()=>this.emit("error",l));this[$S](e,r,i,n,s,o,a,c)})}[UA](e,r){us.close(e,r)}[$S](e,r,i,n,s,o,a,l){if(l<=0&&o>0){let u=new Error("encountered unexpected EOF");return u.path=this.absolute,u.syscall="read",u.code="EOF",this[UA](e,()=>this.emit("error",u))}if(l>o){let u=new Error("did not encounter expected EOF");return u.path=this.absolute,u.syscall="read",u.code="EOF",this[UA](e,()=>this.emit("error",u))}if(l===o)for(let u=l;uu?this.emit("error",u):this.end());i>=n&&(r=Buffer.allocUnsafe(n),i=0),n=r.length-i,this[oE](e,r,i,n,s,o,a)}}),O3=class extends lE{constructor(e,r){super(e,r)}[_S](){this[aE](us.lstatSync(this.absolute))}[ZS](){this[ex](us.readlinkSync(this.absolute))}[tx](){this[rx](us.openSync(this.absolute,"r"))}[oE](e,r,i,n,s,o,a){let l=!0;try{let c=us.readSync(e,r,i,n,s);this[$S](e,r,i,n,s,o,a,c),l=!1}finally{if(l)try{this[UA](e,()=>{})}catch(c){}}}[UA](e,r){us.closeSync(e),r()}},Q0e=N3(class extends x3{constructor(e,r){r=r||{},super(r),this.preservePaths=!!r.preservePaths,this.portable=!!r.portable,this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.readEntry=e,this.type=e.type,this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.path=e.path,this.mode=this[AE](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:r.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=e.linkpath,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let i=!1;if(Mc.isAbsolute(this.path)&&!this.preservePaths){let n=Mc.parse(this.path);i=n.root,this.path=this.path.substr(n.root.length)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new P3({path:this.path,linkpath:this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),i&&this.warn("TAR_ENTRY_INFO",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.header.encode()&&!this.noPax&&super.write(new k3({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this.path,linkpath:this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[AE](e){return M3(e,this.type==="Directory",this.portable)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");return this.blockRemain-=r,super.write(e)}end(){return this.blockRemain&&this.write(Buffer.alloc(this.blockRemain)),super.end()}});lE.Sync=O3;lE.Tar=Q0e;var w0e=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported";S3.exports=lE});var CE=C((Q_e,T3)=>{"use strict";var nx=class{constructor(e,r){this.path=e||"./",this.absolute=r,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},b0e=Fc(),D0e=HS(),S0e=ah(),sx=ix(),x0e=sx.Sync,k0e=sx.Tar,P0e=_g(),K3=Buffer.alloc(1024),cE=Symbol("onStat"),uE=Symbol("ended"),gs=Symbol("queue"),Oc=Symbol("current"),YA=Symbol("process"),gE=Symbol("processing"),U3=Symbol("processJob"),fs=Symbol("jobs"),ox=Symbol("jobDone"),fE=Symbol("addFSEntry"),Y3=Symbol("addTarEntry"),ax=Symbol("stat"),Ax=Symbol("readdir"),hE=Symbol("onreaddir"),pE=Symbol("pipe"),H3=Symbol("entry"),lx=Symbol("entryOpt"),cx=Symbol("writeEntryClass"),j3=Symbol("write"),ux=Symbol("ondrain"),dE=require("fs"),G3=require("path"),v0e=nE(),gx=v0e(class extends b0e{constructor(e){super(e);e=e||Object.create(null),this.opt=e,this.file=e.file||"",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=(e.prefix||"").replace(/(\\|\/)+$/,""),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[cx]=sx,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!="object"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new D0e.Gzip(e.gzip),this.zip.on("data",r=>super.write(r)),this.zip.on("end",r=>super.end()),this.zip.on("drain",r=>this[ux]()),this.on("resume",r=>this.zip.resume())):this.on("drain",this[ux]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter=="function"?e.filter:r=>!0,this[gs]=new P0e,this[fs]=0,this.jobs=+e.jobs||4,this[gE]=!1,this[uE]=!1}[j3](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[uE]=!0,this[YA](),this}write(e){if(this[uE])throw new Error("write after end");return e instanceof S0e?this[Y3](e):this[fE](e),this.flowing}[Y3](e){let r=G3.resolve(this.cwd,e.path);if(this.prefix&&(e.path=this.prefix+"/"+e.path.replace(/^\.(\/+|$)/,"")),!this.filter(e.path,e))e.resume();else{let i=new nx(e.path,r,!1);i.entry=new k0e(e,this[lx](i)),i.entry.on("end",n=>this[ox](i)),this[fs]+=1,this[gs].push(i)}this[YA]()}[fE](e){let r=G3.resolve(this.cwd,e);this.prefix&&(e=this.prefix+"/"+e.replace(/^\.(\/+|$)/,"")),this[gs].push(new nx(e,r)),this[YA]()}[ax](e){e.pending=!0,this[fs]+=1;let r=this.follow?"stat":"lstat";dE[r](e.absolute,(i,n)=>{e.pending=!1,this[fs]-=1,i?this.emit("error",i):this[cE](e,n)})}[cE](e,r){this.statCache.set(e.absolute,r),e.stat=r,this.filter(e.path,r)||(e.ignore=!0),this[YA]()}[Ax](e){e.pending=!0,this[fs]+=1,dE.readdir(e.absolute,(r,i)=>{if(e.pending=!1,this[fs]-=1,r)return this.emit("error",r);this[hE](e,i)})}[hE](e,r){this.readdirCache.set(e.absolute,r),e.readdir=r,this[YA]()}[YA](){if(!this[gE]){this[gE]=!0;for(let e=this[gs].head;e!==null&&this[fs]this.warn(r,i,n),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime}}[H3](e){this[fs]+=1;try{return new this[cx](e.path,this[lx](e)).on("end",()=>this[ox](e)).on("error",r=>this.emit("error",r))}catch(r){this.emit("error",r)}}[ux](){this[Oc]&&this[Oc].entry&&this[Oc].entry.resume()}[pE](e){e.piped=!0,e.readdir&&e.readdir.forEach(n=>{let s=this.prefix?e.path.slice(this.prefix.length+1)||"./":e.path,o=s==="./"?"":s.replace(/\/*$/,"/");this[fE](o+n)});let r=e.entry,i=this.zip;i?r.on("data",n=>{i.write(n)||r.pause()}):r.on("data",n=>{super.write(n)||r.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),q3=class extends gx{constructor(e){super(e);this[cx]=x0e}pause(){}resume(){}[ax](e){let r=this.follow?"statSync":"lstatSync";this[cE](e,dE[r](e.absolute))}[Ax](e,r){this[hE](e,dE.readdirSync(e.absolute))}[pE](e){let r=e.entry,i=this.zip;e.readdir&&e.readdir.forEach(n=>{let s=this.prefix?e.path.slice(this.prefix.length+1)||"./":e.path,o=s==="./"?"":s.replace(/\/*$/,"/");this[fE](o+n)}),i?r.on("data",n=>{i.write(n)}):r.on("data",n=>{super[j3](n)})}};gx.Sync=q3;T3.exports=gx});var jc=C(lh=>{"use strict";var F0e=Fc(),R0e=require("events").EventEmitter,Cn=require("fs"),mE=process.binding("fs"),b_e=mE.writeBuffers,L0e=mE.FSReqWrap||mE.FSReqCallback,Tc=Symbol("_autoClose"),hs=Symbol("_close"),ch=Symbol("_ended"),vt=Symbol("_fd"),J3=Symbol("_finished"),HA=Symbol("_flags"),fx=Symbol("_flush"),hx=Symbol("_handleChunk"),px=Symbol("_makeBuf"),dx=Symbol("_mode"),IE=Symbol("_needDrain"),Kc=Symbol("_onerror"),Uc=Symbol("_onopen"),Cx=Symbol("_onread"),jA=Symbol("_onwrite"),ua=Symbol("_open"),ga=Symbol("_path"),GA=Symbol("_pos"),ps=Symbol("_queue"),Yc=Symbol("_read"),W3=Symbol("_readSize"),fa=Symbol("_reading"),EE=Symbol("_remain"),z3=Symbol("_size"),yE=Symbol("_write"),Hc=Symbol("_writing"),BE=Symbol("_defaultFlag"),mx=class extends F0e{constructor(e,r){if(r=r||{},super(r),this.writable=!1,typeof e!="string")throw new TypeError("path must be a string");this[vt]=typeof r.fd=="number"?r.fd:null,this[ga]=e,this[W3]=r.readSize||16*1024*1024,this[fa]=!1,this[z3]=typeof r.size=="number"?r.size:Infinity,this[EE]=this[z3],this[Tc]=typeof r.autoClose=="boolean"?r.autoClose:!0,typeof this[vt]=="number"?this[Yc]():this[ua]()}get fd(){return this[vt]}get path(){return this[ga]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[ua](){Cn.open(this[ga],"r",(e,r)=>this[Uc](e,r))}[Uc](e,r){e?this[Kc](e):(this[vt]=r,this.emit("open",r),this[Yc]())}[px](){return Buffer.allocUnsafe(Math.min(this[W3],this[EE]))}[Yc](){if(!this[fa]){this[fa]=!0;let e=this[px]();if(e.length===0)return process.nextTick(()=>this[Cx](null,0,e));Cn.read(this[vt],e,0,e.length,null,(r,i,n)=>this[Cx](r,i,n))}}[Cx](e,r,i){this[fa]=!1,e?this[Kc](e):this[hx](r,i)&&this[Yc]()}[hs](){this[Tc]&&typeof this[vt]=="number"&&(Cn.close(this[vt],e=>this.emit("close")),this[vt]=null)}[Kc](e){this[fa]=!0,this[hs](),this.emit("error",e)}[hx](e,r){let i=!1;return this[EE]-=e,e>0&&(i=super.write(ethis[Uc](e,r))}[Uc](e,r){this[BE]&&this[HA]==="r+"&&e&&e.code==="ENOENT"?(this[HA]="w",this[ua]()):e?this[Kc](e):(this[vt]=r,this.emit("open",r),this[fx]())}end(e,r){e&&this.write(e,r),this[ch]=!0,!this[Hc]&&!this[ps].length&&typeof this[vt]=="number"&&this[jA](null,0)}write(e,r){return typeof e=="string"&&(e=new Buffer(e,r)),this[ch]?(this.emit("error",new Error("write() after end()")),!1):this[vt]===null||this[Hc]||this[ps].length?(this[ps].push(e),this[IE]=!0,!1):(this[Hc]=!0,this[yE](e),!0)}[yE](e){Cn.write(this[vt],e,0,e.length,this[GA],(r,i)=>this[jA](r,i))}[jA](e,r){e?this[Kc](e):(this[GA]!==null&&(this[GA]+=r),this[ps].length?this[fx]():(this[Hc]=!1,this[ch]&&!this[J3]?(this[J3]=!0,this[hs](),this.emit("finish")):this[IE]&&(this[IE]=!1,this.emit("drain"))))}[fx](){if(this[ps].length===0)this[ch]&&this[jA](null,0);else if(this[ps].length===1)this[yE](this[ps].pop());else{let e=this[ps];this[ps]=[],N0e(this[vt],e,this[GA],(r,i)=>this[jA](r,i))}}[hs](){this[Tc]&&typeof this[vt]=="number"&&(Cn.close(this[vt],e=>this.emit("close")),this[vt]=null)}},X3=class extends Ix{[ua](){let e;try{e=Cn.openSync(this[ga],this[HA],this[dx])}catch(r){if(this[BE]&&this[HA]==="r+"&&r&&r.code==="ENOENT")return this[HA]="w",this[ua]();throw r}this[Uc](null,e)}[hs](){if(this[Tc]&&typeof this[vt]=="number"){try{Cn.closeSync(this[vt])}catch(e){}this[vt]=null,this.emit("close")}}[yE](e){try{this[jA](null,Cn.writeSync(this[vt],e,0,e.length,this[GA]))}catch(r){this[jA](r,0)}}},N0e=(t,e,r,i)=>{let n=(o,a)=>i(o,a,e),s=new L0e;s.oncomplete=n,mE.writeBuffers(t,e,r,s)};lh.ReadStream=mx;lh.ReadStreamSync=V3;lh.WriteStream=Ix;lh.WriteStreamSync=X3});var fh=C((k_e,Z3)=>{"use strict";var M0e=nE(),S_e=require("path"),O0e=Nc(),T0e=require("events"),K0e=_g(),U0e=1024*1024,Y0e=ah(),_3=iE(),H0e=HS(),Ex=Buffer.from([31,139]),mn=Symbol("state"),qA=Symbol("writeEntry"),oo=Symbol("readEntry"),yx=Symbol("nextEntry"),$3=Symbol("processEntry"),In=Symbol("extendedHeader"),uh=Symbol("globalExtendedHeader"),ha=Symbol("meta"),e4=Symbol("emitMeta"),Ht=Symbol("buffer"),ao=Symbol("queue"),JA=Symbol("ended"),t4=Symbol("emittedEnd"),WA=Symbol("emit"),Fi=Symbol("unzip"),wE=Symbol("consumeChunk"),QE=Symbol("consumeChunkSub"),Bx=Symbol("consumeBody"),r4=Symbol("consumeMeta"),i4=Symbol("consumeHeader"),bE=Symbol("consuming"),wx=Symbol("bufferConcat"),Qx=Symbol("maybeEnd"),gh=Symbol("writing"),pa=Symbol("aborted"),DE=Symbol("onDone"),zA=Symbol("sawValidEntry"),SE=Symbol("sawNullBlock"),xE=Symbol("sawEOF"),j0e=t=>!0;Z3.exports=M0e(class extends T0e{constructor(e){e=e||{},super(e),this.file=e.file||"",this[zA]=null,this.on(DE,r=>{(this[mn]==="begin"||this[zA]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),e.ondone?this.on(DE,e.ondone):this.on(DE,r=>{this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||U0e,this.filter=typeof e.filter=="function"?e.filter:j0e,this.writable=!0,this.readable=!1,this[ao]=new K0e,this[Ht]=null,this[oo]=null,this[qA]=null,this[mn]="begin",this[ha]="",this[In]=null,this[uh]=null,this[JA]=!1,this[Fi]=null,this[pa]=!1,this[SE]=!1,this[xE]=!1,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),typeof e.onentry=="function"&&this.on("entry",e.onentry)}[i4](e,r){this[zA]===null&&(this[zA]=!1);let i;try{i=new O0e(e,r,this[In],this[uh])}catch(n){return this.warn("TAR_ENTRY_INVALID",n)}if(i.nullBlock)this[SE]?(this[xE]=!0,this[mn]==="begin"&&(this[mn]="header"),this[WA]("eof")):(this[SE]=!0,this[WA]("nullBlock"));else if(this[SE]=!1,!i.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:i});else if(!i.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:i});else{let n=i.type;if(/^(Symbolic)?Link$/.test(n)&&!i.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:i});else if(!/^(Symbolic)?Link$/.test(n)&&i.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:i});else{let s=this[qA]=new Y0e(i,this[In],this[uh]);if(!this[zA])if(s.remain){let o=()=>{s.invalid||(this[zA]=!0)};s.on("end",o)}else this[zA]=!0;s.meta?s.size>this.maxMetaEntrySize?(s.ignore=!0,this[WA]("ignoredEntry",s),this[mn]="ignore",s.resume()):s.size>0&&(this[ha]="",s.on("data",o=>this[ha]+=o),this[mn]="meta"):(this[In]=null,s.ignore=s.ignore||!this.filter(s.path,s),s.ignore?(this[WA]("ignoredEntry",s),this[mn]=s.remain?"ignore":"header",s.resume()):(s.remain?this[mn]="body":(this[mn]="header",s.end()),this[oo]?this[ao].push(s):(this[ao].push(s),this[yx]())))}}}[$3](e){let r=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[oo]=e,this.emit("entry",e),e.emittedEnd||(e.on("end",i=>this[yx]()),r=!1)):(this[oo]=null,r=!1),r}[yx](){do;while(this[$3](this[ao].shift()));if(!this[ao].length){let e=this[oo];!e||e.flowing||e.size===e.remain?this[gh]||this.emit("drain"):e.once("drain",i=>this.emit("drain"))}}[Bx](e,r){let i=this[qA],n=i.blockRemain,s=n>=e.length&&r===0?e:e.slice(r,r+n);return i.write(s),i.blockRemain||(this[mn]="header",this[qA]=null,i.end()),s.length}[r4](e,r){let i=this[qA],n=this[Bx](e,r);return this[qA]||this[e4](i),n}[WA](e,r,i){!this[ao].length&&!this[oo]?this.emit(e,r,i):this[ao].push([e,r,i])}[e4](e){switch(this[WA]("meta",this[ha]),e.type){case"ExtendedHeader":case"OldExtendedHeader":this[In]=_3.parse(this[ha],this[In],!1);break;case"GlobalExtendedHeader":this[uh]=_3.parse(this[ha],this[uh],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":this[In]=this[In]||Object.create(null),this[In].path=this[ha].replace(/\0.*/,"");break;case"NextFileHasLongLinkpath":this[In]=this[In]||Object.create(null),this[In].linkpath=this[ha].replace(/\0.*/,"");break;default:throw new Error("unknown meta: "+e.type)}}abort(e){this[pa]=!0,this.emit("abort",e),this.warn("TAR_ABORT",e,{recoverable:!1})}write(e){if(this[pa])return;if(this[Fi]===null&&e){if(this[Ht]&&(e=Buffer.concat([this[Ht],e]),this[Ht]=null),e.lengththis[wE](s)),this[Fi].on("error",s=>this.abort(s)),this[Fi].on("end",s=>{this[JA]=!0,this[wE]()}),this[gh]=!0;let n=this[Fi][i?"end":"write"](e);return this[gh]=!1,n}}this[gh]=!0,this[Fi]?this[Fi].write(e):this[wE](e),this[gh]=!1;let r=this[ao].length?!1:this[oo]?this[oo].flowing:!0;return!r&&!this[ao].length&&this[oo].once("drain",i=>this.emit("drain")),r}[wx](e){e&&!this[pa]&&(this[Ht]=this[Ht]?Buffer.concat([this[Ht],e]):e)}[Qx](){if(this[JA]&&!this[t4]&&!this[pa]&&!this[bE]){this[t4]=!0;let e=this[qA];if(e&&e.blockRemain){let r=this[Ht]?this[Ht].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${e.blockRemain} more bytes, only ${r} available)`,{entry:e}),this[Ht]&&e.write(this[Ht]),e.end()}this[WA](DE)}}[wE](e){if(this[bE])this[wx](e);else if(!e&&!this[Ht])this[Qx]();else{if(this[bE]=!0,this[Ht]){this[wx](e);let r=this[Ht];this[Ht]=null,this[QE](r)}else this[QE](e);for(;this[Ht]&&this[Ht].length>=512&&!this[pa]&&!this[xE];){let r=this[Ht];this[Ht]=null,this[QE](r)}this[bE]=!1}(!this[Ht]||this[JA])&&this[Qx]()}[QE](e){let r=0,i=e.length;for(;r+512<=i&&!this[pa]&&!this[xE];)switch(this[mn]){case"begin":case"header":this[i4](e,r),r+=512;break;case"ignore":case"body":r+=this[Bx](e,r);break;case"meta":r+=this[r4](e,r);break;default:throw new Error("invalid state: "+this[mn])}r{"use strict";var G0e=vc(),s4=fh(),Gc=require("fs"),q0e=jc(),o4=require("path"),P_e=n4.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let i=G0e(t);if(i.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!i.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&W0e(i,e),i.noResume||J0e(i),i.file&&i.sync?z0e(i):i.file?V0e(i,r):a4(i)},J0e=t=>{let e=t.onentry;t.onentry=e?r=>{e(r),r.resume()}:r=>r.resume()},W0e=(t,e)=>{let r=new Map(e.map(s=>[s.replace(/\/+$/,""),!0])),i=t.filter,n=(s,o)=>{let a=o||o4.parse(s).root||".",l=s===a?!1:r.has(s)?r.get(s):n(o4.dirname(s),a);return r.set(s,l),l};t.filter=i?(s,o)=>i(s,o)&&n(s.replace(/\/+$/,"")):s=>n(s.replace(/\/+$/,""))},z0e=t=>{let e=a4(t),r=t.file,i=!0,n;try{let s=Gc.statSync(r),o=t.maxReadSize||16*1024*1024;if(s.size{let r=new s4(t),i=t.maxReadSize||16*1024*1024,n=t.file,s=new Promise((o,a)=>{r.on("error",a),r.on("end",o),Gc.stat(n,(l,c)=>{if(l)a(l);else{let u=new q0e.ReadStream(n,{readSize:i,size:c.size});u.on("error",a),u.pipe(r)}})});return e?s.then(e,e):s},a4=t=>new s4(t)});var f4=C((L_e,A4)=>{"use strict";var X0e=vc(),PE=CE(),F_e=require("fs"),l4=jc(),c4=kE(),u4=require("path"),R_e=A4.exports=(t,e,r)=>{if(typeof e=="function"&&(r=e),Array.isArray(t)&&(e=t,t={}),!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");e=Array.from(e);let i=X0e(t);if(i.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!i.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return i.file&&i.sync?Z0e(i,e):i.file?_0e(i,e,r):i.sync?$0e(i,e):ebe(i,e)},Z0e=(t,e)=>{let r=new PE.Sync(t),i=new l4.WriteStreamSync(t.file,{mode:t.mode||438});r.pipe(i),g4(r,e)},_0e=(t,e,r)=>{let i=new PE(t),n=new l4.WriteStream(t.file,{mode:t.mode||438});i.pipe(n);let s=new Promise((o,a)=>{n.on("error",a),n.on("close",o),i.on("error",a)});return bx(i,e),r?s.then(r,r):s},g4=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?c4({file:u4.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:i=>t.add(i)}):t.add(r)}),t.end()},bx=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return c4({file:u4.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:i=>t.add(i)}).then(i=>bx(t,e));t.add(r)}t.end()},$0e=(t,e)=>{let r=new PE.Sync(t);return g4(r,e),r},ebe=(t,e)=>{let r=new PE(t);return bx(r,e),r}});var Dx=C((O_e,h4)=>{"use strict";var tbe=vc(),p4=CE(),N_e=fh(),En=require("fs"),d4=jc(),C4=kE(),m4=require("path"),I4=Nc(),M_e=h4.exports=(t,e,r)=>{let i=tbe(t);if(!i.file)throw new TypeError("file is required");if(i.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),i.sync?rbe(i,e):ibe(i,e,r)},rbe=(t,e)=>{let r=new p4.Sync(t),i=!0,n,s;try{try{n=En.openSync(t.file,"r+")}catch(l){if(l.code==="ENOENT")n=En.openSync(t.file,"w+");else throw l}let o=En.fstatSync(n),a=Buffer.alloc(512);e:for(s=0;so.size)break;s+=c,t.mtimeCache&&t.mtimeCache.set(l.path,l.mtime)}i=!1,nbe(t,r,s,n,e)}finally{if(i)try{En.closeSync(n)}catch(o){}}},nbe=(t,e,r,i,n)=>{let s=new d4.WriteStreamSync(t.file,{fd:i,start:r});e.pipe(s),sbe(e,n)},ibe=(t,e,r)=>{e=Array.from(e);let i=new p4(t),n=(o,a,l)=>{let c=(p,m)=>{p?En.close(o,I=>l(p)):l(null,m)},u=0;if(a===0)return c(null,0);let g=0,f=Buffer.alloc(512),h=(p,m)=>{if(p)return c(p);if(g+=m,g<512&&m)return En.read(o,f,g,f.length-g,u+g,h);if(u===0&&f[0]===31&&f[1]===139)return c(new Error("cannot append to compressed archives"));if(g<512)return c(null,u);let I=new I4(f);if(!I.cksumValid)return c(null,u);let y=512*Math.ceil(I.size/512);if(u+y+512>a||(u+=y+512,u>=a))return c(null,u);t.mtimeCache&&t.mtimeCache.set(I.path,I.mtime),g=0,En.read(o,f,0,512,u,h)};En.read(o,f,0,512,u,h)},s=new Promise((o,a)=>{i.on("error",a);let l="r+",c=(u,g)=>{if(u&&u.code==="ENOENT"&&l==="r+")return l="w+",En.open(t.file,l,c);if(u)return a(u);En.fstat(g,(f,h)=>{if(f)return a(f);n(g,h.size,(p,m)=>{if(p)return a(p);let I=new d4.WriteStream(t.file,{fd:g,start:m});i.pipe(I),I.on("error",a),I.on("close",o),E4(i,e)})})};En.open(t.file,l,c)});return r?s.then(r,r):s},sbe=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?C4({file:m4.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:i=>t.add(i)}):t.add(r)}),t.end()},E4=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return C4({file:m4.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:i=>t.add(i)}).then(i=>E4(t,e));t.add(r)}t.end()}});var B4=C((K_e,y4)=>{"use strict";var obe=vc(),abe=Dx(),T_e=y4.exports=(t,e,r)=>{let i=obe(t);if(!i.file)throw new TypeError("file is required");if(i.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),Abe(i),abe(i,e,r)},Abe=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(r,i)=>e(r,i)&&!(t.mtimeCache.get(r)>i.mtime):(r,i)=>!(t.mtimeCache.get(r)>i.mtime)}});var b4=C((U_e,w4)=>{var{promisify:Q4}=require("util"),da=require("fs"),lbe=t=>{if(!t)t={mode:511,fs:da};else if(typeof t=="object")t=P({mode:511,fs:da},t);else if(typeof t=="number")t={mode:t,fs:da};else if(typeof t=="string")t={mode:parseInt(t,8),fs:da};else throw new TypeError("invalid options argument");return t.mkdir=t.mkdir||t.fs.mkdir||da.mkdir,t.mkdirAsync=Q4(t.mkdir),t.stat=t.stat||t.fs.stat||da.stat,t.statAsync=Q4(t.stat),t.statSync=t.statSync||t.fs.statSync||da.statSync,t.mkdirSync=t.mkdirSync||t.fs.mkdirSync||da.mkdirSync,t};w4.exports=lbe});var S4=C((Y_e,D4)=>{var cbe=process.env.__TESTING_MKDIRP_PLATFORM__||process.platform,{resolve:ube,parse:gbe}=require("path"),fbe=t=>{if(/\0/.test(t))throw Object.assign(new TypeError("path must be a string without null bytes"),{path:t,code:"ERR_INVALID_ARG_VALUE"});if(t=ube(t),cbe==="win32"){let e=/[*|"<>?:]/,{root:r}=gbe(t);if(e.test(t.substr(r.length)))throw Object.assign(new Error("Illegal characters in path."),{path:t,code:"EINVAL"})}return t};D4.exports=fbe});var F4=C((H_e,x4)=>{var{dirname:k4}=require("path"),P4=(t,e,r=void 0)=>r===e?Promise.resolve():t.statAsync(e).then(i=>i.isDirectory()?r:void 0,i=>i.code==="ENOENT"?P4(t,k4(e),e):void 0),v4=(t,e,r=void 0)=>{if(r!==e)try{return t.statSync(e).isDirectory()?r:void 0}catch(i){return i.code==="ENOENT"?v4(t,k4(e),e):void 0}};x4.exports={findMade:P4,findMadeSync:v4}});var kx=C((j_e,R4)=>{var{dirname:L4}=require("path"),Sx=(t,e,r)=>{e.recursive=!1;let i=L4(t);return i===t?e.mkdirAsync(t,e).catch(n=>{if(n.code!=="EISDIR")throw n}):e.mkdirAsync(t,e).then(()=>r||t,n=>{if(n.code==="ENOENT")return Sx(i,e).then(s=>Sx(t,e,s));if(n.code!=="EEXIST"&&n.code!=="EROFS")throw n;return e.statAsync(t).then(s=>{if(s.isDirectory())return r;throw n},()=>{throw n})})},xx=(t,e,r)=>{let i=L4(t);if(e.recursive=!1,i===t)try{return e.mkdirSync(t,e)}catch(n){if(n.code!=="EISDIR")throw n;return}try{return e.mkdirSync(t,e),r||t}catch(n){if(n.code==="ENOENT")return xx(t,e,xx(i,e,r));if(n.code!=="EEXIST"&&n.code!=="EROFS")throw n;try{if(!e.statSync(t).isDirectory())throw n}catch(s){throw n}}};R4.exports={mkdirpManual:Sx,mkdirpManualSync:xx}});var O4=C((G_e,N4)=>{var{dirname:M4}=require("path"),{findMade:hbe,findMadeSync:pbe}=F4(),{mkdirpManual:dbe,mkdirpManualSync:Cbe}=kx(),mbe=(t,e)=>(e.recursive=!0,M4(t)===t?e.mkdirAsync(t,e):hbe(e,t).then(i=>e.mkdirAsync(t,e).then(()=>i).catch(n=>{if(n.code==="ENOENT")return dbe(t,e);throw n}))),Ibe=(t,e)=>{if(e.recursive=!0,M4(t)===t)return e.mkdirSync(t,e);let i=pbe(e,t);try{return e.mkdirSync(t,e),i}catch(n){if(n.code==="ENOENT")return Cbe(t,e);throw n}};N4.exports={mkdirpNative:mbe,mkdirpNativeSync:Ibe}});var Y4=C((q_e,T4)=>{var K4=require("fs"),Ebe=process.env.__TESTING_MKDIRP_NODE_VERSION__||process.version,Px=Ebe.replace(/^v/,"").split("."),U4=+Px[0]>10||+Px[0]==10&&+Px[1]>=12,ybe=U4?t=>t.mkdir===K4.mkdir:()=>!1,Bbe=U4?t=>t.mkdirSync===K4.mkdirSync:()=>!1;T4.exports={useNative:ybe,useNativeSync:Bbe}});var W4=C((J_e,H4)=>{var qc=b4(),Jc=S4(),{mkdirpNative:j4,mkdirpNativeSync:G4}=O4(),{mkdirpManual:q4,mkdirpManualSync:J4}=kx(),{useNative:wbe,useNativeSync:Qbe}=Y4(),Wc=(t,e)=>(t=Jc(t),e=qc(e),wbe(e)?j4(t,e):q4(t,e)),bbe=(t,e)=>(t=Jc(t),e=qc(e),Qbe(e)?G4(t,e):J4(t,e));Wc.sync=bbe;Wc.native=(t,e)=>j4(Jc(t),qc(e));Wc.manual=(t,e)=>q4(Jc(t),qc(e));Wc.nativeSync=(t,e)=>G4(Jc(t),qc(e));Wc.manualSync=(t,e)=>J4(Jc(t),qc(e));H4.exports=Wc});var e8=C((W_e,z4)=>{"use strict";var yn=require("fs"),VA=require("path"),Dbe=yn.lchown?"lchown":"chown",Sbe=yn.lchownSync?"lchownSync":"chownSync",V4=yn.lchown&&!process.version.match(/v1[1-9]+\./)&&!process.version.match(/v10\.[6-9]/),X4=(t,e,r)=>{try{return yn[Sbe](t,e,r)}catch(i){if(i.code!=="ENOENT")throw i}},xbe=(t,e,r)=>{try{return yn.chownSync(t,e,r)}catch(i){if(i.code!=="ENOENT")throw i}},kbe=V4?(t,e,r,i)=>n=>{!n||n.code!=="EISDIR"?i(n):yn.chown(t,e,r,i)}:(t,e,r,i)=>i,vx=V4?(t,e,r)=>{try{return X4(t,e,r)}catch(i){if(i.code!=="EISDIR")throw i;xbe(t,e,r)}}:(t,e,r)=>X4(t,e,r),Pbe=process.version,Z4=(t,e,r)=>yn.readdir(t,e,r),vbe=(t,e)=>yn.readdirSync(t,e);/^v4\./.test(Pbe)&&(Z4=(t,e,r)=>yn.readdir(t,r));var vE=(t,e,r,i)=>{yn[Dbe](t,e,r,kbe(t,e,r,n=>{i(n&&n.code!=="ENOENT"?n:null)}))},_4=(t,e,r,i,n)=>{if(typeof e=="string")return yn.lstat(VA.resolve(t,e),(s,o)=>{if(s)return n(s.code!=="ENOENT"?s:null);o.name=e,_4(t,o,r,i,n)});if(e.isDirectory())Fx(VA.resolve(t,e.name),r,i,s=>{if(s)return n(s);let o=VA.resolve(t,e.name);vE(o,r,i,n)});else{let s=VA.resolve(t,e.name);vE(s,r,i,n)}},Fx=(t,e,r,i)=>{Z4(t,{withFileTypes:!0},(n,s)=>{if(n){if(n.code==="ENOENT")return i();if(n.code!=="ENOTDIR"&&n.code!=="ENOTSUP")return i(n)}if(n||!s.length)return vE(t,e,r,i);let o=s.length,a=null,l=c=>{if(!a){if(c)return i(a=c);if(--o==0)return vE(t,e,r,i)}};s.forEach(c=>_4(t,c,e,r,l))})},Fbe=(t,e,r,i)=>{if(typeof e=="string")try{let n=yn.lstatSync(VA.resolve(t,e));n.name=e,e=n}catch(n){if(n.code==="ENOENT")return;throw n}e.isDirectory()&&$4(VA.resolve(t,e.name),r,i),vx(VA.resolve(t,e.name),r,i)},$4=(t,e,r)=>{let i;try{i=vbe(t,{withFileTypes:!0})}catch(n){if(n.code==="ENOENT")return;if(n.code==="ENOTDIR"||n.code==="ENOTSUP")return vx(t,e,r);throw n}return i&&i.length&&i.forEach(n=>Fbe(t,n,e,r)),vx(t,e,r)};z4.exports=Fx;Fx.sync=$4});var n8=C((X_e,Rx)=>{"use strict";var t8=W4(),Bn=require("fs"),FE=require("path"),r8=e8(),Lx=class extends Error{constructor(e,r){super("Cannot extract through symbolic link");this.path=r,this.symlink=e}get name(){return"SylinkError"}},hh=class extends Error{constructor(e,r){super(r+": Cannot cd into '"+e+"'");this.path=e,this.code=r}get name(){return"CwdError"}},z_e=Rx.exports=(t,e,r)=>{let i=e.umask,n=e.mode|448,s=(n&i)!=0,o=e.uid,a=e.gid,l=typeof o=="number"&&typeof a=="number"&&(o!==e.processUid||a!==e.processGid),c=e.preserve,u=e.unlink,g=e.cache,f=e.cwd,h=(I,y)=>{I?r(I):(g.set(t,!0),y&&l?r8(y,o,a,B=>h(B)):s?Bn.chmod(t,n,r):r())};if(g&&g.get(t)===!0)return h();if(t===f)return Bn.stat(t,(I,y)=>{(I||!y.isDirectory())&&(I=new hh(t,I&&I.code||"ENOTDIR")),h(I)});if(c)return t8(t,{mode:n}).then(I=>h(null,I),h);let m=FE.relative(f,t).split(/\/|\\/);RE(f,m,n,g,u,f,null,h)},RE=(t,e,r,i,n,s,o,a)=>{if(!e.length)return a(null,o);let l=e.shift(),c=t+"/"+l;if(i.get(c))return RE(c,e,r,i,n,s,o,a);Bn.mkdir(c,r,i8(c,e,r,i,n,s,o,a))},i8=(t,e,r,i,n,s,o,a)=>l=>{if(l){if(l.path&&FE.dirname(l.path)===s&&(l.code==="ENOTDIR"||l.code==="ENOENT"))return a(new hh(s,l.code));Bn.lstat(t,(c,u)=>{if(c)a(c);else if(u.isDirectory())RE(t,e,r,i,n,s,o,a);else if(n)Bn.unlink(t,g=>{if(g)return a(g);Bn.mkdir(t,r,i8(t,e,r,i,n,s,o,a))});else{if(u.isSymbolicLink())return a(new Lx(t,t+"/"+e.join("/")));a(l)}})}else o=o||t,RE(t,e,r,i,n,s,o,a)},V_e=Rx.exports.sync=(t,e)=>{let r=e.umask,i=e.mode|448,n=(i&r)!=0,s=e.uid,o=e.gid,a=typeof s=="number"&&typeof o=="number"&&(s!==e.processUid||o!==e.processGid),l=e.preserve,c=e.unlink,u=e.cache,g=e.cwd,f=I=>{u.set(t,!0),I&&a&&r8.sync(I,s,o),n&&Bn.chmodSync(t,i)};if(u&&u.get(t)===!0)return f();if(t===g){let I=!1,y="ENOTDIR";try{I=Bn.statSync(t).isDirectory()}catch(B){y=B.code}finally{if(!I)throw new hh(t,y)}f();return}if(l)return f(t8.sync(t,i));let p=FE.relative(g,t).split(/\/|\\/),m=null;for(let I=p.shift(),y=g;I&&(y+="/"+I);I=p.shift())if(!u.get(y))try{Bn.mkdirSync(y,i),m=m||y,u.set(y,!0)}catch(B){if(B.path&&FE.dirname(B.path)===g&&(B.code==="ENOTDIR"||B.code==="ENOENT"))return new hh(g,B.code);let x=Bn.lstatSync(y);if(x.isDirectory()){u.set(y,!0);continue}else if(c){Bn.unlinkSync(y),Bn.mkdirSync(y,i),m=m||y,u.set(y,!0);continue}else if(x.isSymbolicLink())return new Lx(y,y+"/"+p.join("/"))}return f(m)}});var a8=C((Z_e,s8)=>{var o8=require("assert");s8.exports=()=>{let t=new Map,e=new Map,{join:r}=require("path"),i=u=>r(u).split(/[\\\/]/).slice(0,-1).reduce((g,f)=>g.length?g.concat(r(g[g.length-1],f)):[f],[]),n=new Set,s=u=>{let g=e.get(u);if(!g)throw new Error("function does not have any path reservations");return{paths:g.paths.map(f=>t.get(f)),dirs:[...g.dirs].map(f=>t.get(f))}},o=u=>{let{paths:g,dirs:f}=s(u);return g.every(h=>h[0]===u)&&f.every(h=>h[0]instanceof Set&&h[0].has(u))},a=u=>n.has(u)||!o(u)?!1:(n.add(u),u(()=>l(u)),!0),l=u=>{if(!n.has(u))return!1;let{paths:g,dirs:f}=e.get(u),h=new Set;return g.forEach(p=>{let m=t.get(p);o8.equal(m[0],u),m.length===1?t.delete(p):(m.shift(),typeof m[0]=="function"?h.add(m[0]):m[0].forEach(I=>h.add(I)))}),f.forEach(p=>{let m=t.get(p);o8(m[0]instanceof Set),m[0].size===1&&m.length===1?t.delete(p):m[0].size===1?(m.shift(),h.add(m[0])):m[0].delete(u)}),n.delete(u),h.forEach(p=>a(p)),!0};return{check:o,reserve:(u,g)=>{let f=new Set(u.map(h=>i(h)).reduce((h,p)=>h.concat(p)));return e.set(g,{dirs:f,paths:u}),u.forEach(h=>{let p=t.get(h);p?p.push(g):t.set(h,[g])}),f.forEach(h=>{let p=t.get(h);p?p[p.length-1]instanceof Set?p[p.length-1].add(g):p.push(new Set([g])):t.set(h,[new Set([g])])}),a(g)}}}});var c8=C((__e,A8)=>{var Rbe=process.env.__FAKE_PLATFORM__||process.platform,Lbe=Rbe==="win32",Nbe=global.__FAKE_TESTING_FS__||require("fs"),{O_CREAT:Mbe,O_TRUNC:Obe,O_WRONLY:Tbe,UV_FS_O_FILEMAP:l8=0}=Nbe.constants,Kbe=Lbe&&!!l8,Ube=512*1024,Ybe=l8|Obe|Mbe|Tbe;A8.exports=Kbe?t=>t"w"});var jx=C((r$e,u8)=>{"use strict";var Hbe=require("assert"),$_e=require("events").EventEmitter,jbe=fh(),bt=require("fs"),Gbe=jc(),Ao=require("path"),Nx=n8(),e$e=Nx.sync,g8=XS(),qbe=a8(),f8=Symbol("onEntry"),Mx=Symbol("checkFs"),h8=Symbol("checkFs2"),Ox=Symbol("isReusable"),lo=Symbol("makeFs"),Tx=Symbol("file"),Kx=Symbol("directory"),LE=Symbol("link"),p8=Symbol("symlink"),d8=Symbol("hardlink"),C8=Symbol("unsupported"),t$e=Symbol("unknown"),m8=Symbol("checkPath"),zc=Symbol("mkdir"),pi=Symbol("onError"),NE=Symbol("pending"),I8=Symbol("pend"),Vc=Symbol("unpend"),Ux=Symbol("ended"),Yx=Symbol("maybeClose"),Hx=Symbol("skip"),ph=Symbol("doChown"),dh=Symbol("uid"),Ch=Symbol("gid"),E8=require("crypto"),y8=c8(),ME=()=>{throw new Error("sync function called cb somehow?!?")},Jbe=(t,e)=>{if(process.platform!=="win32")return bt.unlink(t,e);let r=t+".DELETE."+E8.randomBytes(16).toString("hex");bt.rename(t,r,i=>{if(i)return e(i);bt.unlink(r,e)})},Wbe=t=>{if(process.platform!=="win32")return bt.unlinkSync(t);let e=t+".DELETE."+E8.randomBytes(16).toString("hex");bt.renameSync(t,e),bt.unlinkSync(e)},B8=(t,e,r)=>t===t>>>0?t:e===e>>>0?e:r,OE=class extends jbe{constructor(e){if(e||(e={}),e.ondone=r=>{this[Ux]=!0,this[Yx]()},super(e),this.reservations=qbe(),this.transform=typeof e.transform=="function"?e.transform:null,this.writable=!0,this.readable=!1,this[NE]=0,this[Ux]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid=="number"||typeof e.gid=="number"){if(typeof e.uid!="number"||typeof e.gid!="number")throw new TypeError("cannot set owner without number uid and gid");if(e.preserveOwner)throw new TypeError("cannot preserve owner in archive and also set owner explicitly");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!="number"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||process.platform==="win32",this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=Ao.resolve(e.cwd||process.cwd()),this.strip=+e.strip||0,this.processUmask=process.umask(),this.umask=typeof e.umask=="number"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on("entry",r=>this[f8](r))}warn(e,r,i={}){return(e==="TAR_BAD_ARCHIVE"||e==="TAR_ABORT")&&(i.recoverable=!1),super.warn(e,r,i)}[Yx](){this[Ux]&&this[NE]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close"))}[m8](e){if(this.strip){let r=e.path.split(/\/|\\/);if(r.length=this.strip&&(e.linkpath=i.slice(this.strip).join("/"))}}if(!this.preservePaths){let r=e.path;if(r.match(/(^|\/|\\)\.\.(\\|\/|$)/))return this.warn("TAR_ENTRY_ERROR","path contains '..'",{entry:e,path:r}),!1;if(Ao.win32.isAbsolute(r)){let i=Ao.win32.parse(r);e.path=r.substr(i.root.length);let n=i.root;this.warn("TAR_ENTRY_INFO",`stripping ${n} from absolute path`,{entry:e,path:r})}}if(this.win32){let r=Ao.win32.parse(e.path);e.path=r.root===""?g8.encode(e.path):r.root+g8.encode(e.path.substr(r.root.length))}return Ao.isAbsolute(e.path)?e.absolute=e.path:e.absolute=Ao.resolve(this.cwd,e.path),!0}[f8](e){if(!this[m8](e))return e.resume();switch(Hbe.equal(typeof e.absolute,"string"),e.type){case"Directory":case"GNUDumpDir":e.mode&&(e.mode=e.mode|448);case"File":case"OldFile":case"ContiguousFile":case"Link":case"SymbolicLink":return this[Mx](e);case"CharacterDevice":case"BlockDevice":case"FIFO":return this[C8](e)}}[pi](e,r){e.name==="CwdError"?this.emit("error",e):(this.warn("TAR_ENTRY_ERROR",e,{entry:r}),this[Vc](),r.resume())}[zc](e,r,i){Nx(e,{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r},i)}[ph](e){return this.forceChown||this.preserveOwner&&(typeof e.uid=="number"&&e.uid!==this.processUid||typeof e.gid=="number"&&e.gid!==this.processGid)||typeof this.uid=="number"&&this.uid!==this.processUid||typeof this.gid=="number"&&this.gid!==this.processGid}[dh](e){return B8(this.uid,e.uid,this.processUid)}[Ch](e){return B8(this.gid,e.gid,this.processGid)}[Tx](e,r){let i=e.mode&4095||this.fmode,n=new Gbe.WriteStream(e.absolute,{flags:y8(e.size),mode:i,autoClose:!1});n.on("error",l=>this[pi](l,e));let s=1,o=l=>{if(l)return this[pi](l,e);--s==0&&bt.close(n.fd,c=>{r(),c?this[pi](c,e):this[Vc]()})};n.on("finish",l=>{let c=e.absolute,u=n.fd;if(e.mtime&&!this.noMtime){s++;let g=e.atime||new Date,f=e.mtime;bt.futimes(u,g,f,h=>h?bt.utimes(c,g,f,p=>o(p&&h)):o())}if(this[ph](e)){s++;let g=this[dh](e),f=this[Ch](e);bt.fchown(u,g,f,h=>h?bt.chown(c,g,f,p=>o(p&&h)):o())}o()});let a=this.transform&&this.transform(e)||e;a!==e&&(a.on("error",l=>this[pi](l,e)),e.pipe(a)),a.pipe(n)}[Kx](e,r){let i=e.mode&4095||this.dmode;this[zc](e.absolute,i,n=>{if(n)return r(),this[pi](n,e);let s=1,o=a=>{--s==0&&(r(),this[Vc](),e.resume())};e.mtime&&!this.noMtime&&(s++,bt.utimes(e.absolute,e.atime||new Date,e.mtime,o)),this[ph](e)&&(s++,bt.chown(e.absolute,this[dh](e),this[Ch](e),o)),o()})}[C8](e){e.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[p8](e,r){this[LE](e,e.linkpath,"symlink",r)}[d8](e,r){this[LE](e,Ao.resolve(this.cwd,e.linkpath),"link",r)}[I8](){this[NE]++}[Vc](){this[NE]--,this[Yx]()}[Hx](e){this[Vc](),e.resume()}[Ox](e,r){return e.type==="File"&&!this.unlink&&r.isFile()&&r.nlink<=1&&process.platform!=="win32"}[Mx](e){this[I8]();let r=[e.path];e.linkpath&&r.push(e.linkpath),this.reservations.reserve(r,i=>this[h8](e,i))}[h8](e,r){this[zc](Ao.dirname(e.absolute),this.dmode,i=>{if(i)return r(),this[pi](i,e);bt.lstat(e.absolute,(n,s)=>{s&&(this.keep||this.newer&&s.mtime>e.mtime)?(this[Hx](e),r()):n||this[Ox](e,s)?this[lo](null,e,r):s.isDirectory()?e.type==="Directory"?!e.mode||(s.mode&4095)===e.mode?this[lo](null,e,r):bt.chmod(e.absolute,e.mode,o=>this[lo](o,e,r)):bt.rmdir(e.absolute,o=>this[lo](o,e,r)):Jbe(e.absolute,o=>this[lo](o,e,r))})})}[lo](e,r,i){if(e)return this[pi](e,r);switch(r.type){case"File":case"OldFile":case"ContiguousFile":return this[Tx](r,i);case"Link":return this[d8](r,i);case"SymbolicLink":return this[p8](r,i);case"Directory":case"GNUDumpDir":return this[Kx](r,i)}}[LE](e,r,i,n){bt[i](r,e.absolute,s=>{if(s)return this[pi](s,e);n(),this[Vc](),e.resume()})}},w8=class extends OE{constructor(e){super(e)}[Mx](e){let r=this[zc](Ao.dirname(e.absolute),this.dmode,ME);if(r)return this[pi](r,e);try{let i=bt.lstatSync(e.absolute);if(this.keep||this.newer&&i.mtime>e.mtime)return this[Hx](e);if(this[Ox](e,i))return this[lo](null,e,ME);try{return i.isDirectory()?e.type==="Directory"?e.mode&&(i.mode&4095)!==e.mode&&bt.chmodSync(e.absolute,e.mode):bt.rmdirSync(e.absolute):Wbe(e.absolute),this[lo](null,e,ME)}catch(n){return this[pi](n,e)}}catch(i){return this[lo](null,e,ME)}}[Tx](e,r){let i=e.mode&4095||this.fmode,n=l=>{let c;try{bt.closeSync(o)}catch(u){c=u}(l||c)&&this[pi](l||c,e)},s,o;try{o=bt.openSync(e.absolute,y8(e.size),i)}catch(l){return n(l)}let a=this.transform&&this.transform(e)||e;a!==e&&(a.on("error",l=>this[pi](l,e)),e.pipe(a)),a.on("data",l=>{try{bt.writeSync(o,l,0,l.length)}catch(c){n(c)}}),a.on("end",l=>{let c=null;if(e.mtime&&!this.noMtime){let u=e.atime||new Date,g=e.mtime;try{bt.futimesSync(o,u,g)}catch(f){try{bt.utimesSync(e.absolute,u,g)}catch(h){c=f}}}if(this[ph](e)){let u=this[dh](e),g=this[Ch](e);try{bt.fchownSync(o,u,g)}catch(f){try{bt.chownSync(e.absolute,u,g)}catch(h){c=c||f}}}n(c)})}[Kx](e,r){let i=e.mode&4095||this.dmode,n=this[zc](e.absolute,i);if(n)return this[pi](n,e);if(e.mtime&&!this.noMtime)try{bt.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch(s){}if(this[ph](e))try{bt.chownSync(e.absolute,this[dh](e),this[Ch](e))}catch(s){}e.resume()}[zc](e,r){try{return Nx.sync(e,{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r})}catch(i){return i}}[LE](e,r,i,n){try{bt[i+"Sync"](r,e.absolute),e.resume()}catch(s){return this[pi](s,e)}}};OE.Sync=w8;u8.exports=OE});var x8=C((n$e,Q8)=>{"use strict";var zbe=vc(),TE=jx(),b8=require("fs"),D8=jc(),S8=require("path"),i$e=Q8.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let i=zbe(t);if(i.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!i.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Vbe(i,e),i.file&&i.sync?Xbe(i):i.file?Zbe(i,r):i.sync?_be(i):$be(i)},Vbe=(t,e)=>{let r=new Map(e.map(s=>[s.replace(/\/+$/,""),!0])),i=t.filter,n=(s,o)=>{let a=o||S8.parse(s).root||".",l=s===a?!1:r.has(s)?r.get(s):n(S8.dirname(s),a);return r.set(s,l),l};t.filter=i?(s,o)=>i(s,o)&&n(s.replace(/\/+$/,"")):s=>n(s.replace(/\/+$/,""))},Xbe=t=>{let e=new TE.Sync(t),r=t.file,i=!0,n,s=b8.statSync(r),o=t.maxReadSize||16*1024*1024;new D8.ReadStreamSync(r,{readSize:o,size:s.size}).pipe(e)},Zbe=(t,e)=>{let r=new TE(t),i=t.maxReadSize||16*1024*1024,n=t.file,s=new Promise((o,a)=>{r.on("error",a),r.on("close",o),b8.stat(n,(l,c)=>{if(l)a(l);else{let u=new D8.ReadStream(n,{readSize:i,size:c.size});u.on("error",a),u.pipe(r)}})});return e?s.then(e,e):s},_be=t=>new TE.Sync(t),$be=t=>new TE(t)});var k8=C(yr=>{"use strict";yr.c=yr.create=f4();yr.r=yr.replace=Dx();yr.t=yr.list=kE();yr.u=yr.update=B4();yr.x=yr.extract=x8();yr.Pack=CE();yr.Unpack=jx();yr.Parse=fh();yr.ReadEntry=ah();yr.WriteEntry=ix();yr.Header=Nc();yr.Pax=iE();yr.types=oh()});var v8=C((o$e,Gx)=>{"use strict";var eDe=Object.prototype.hasOwnProperty,di="~";function mh(){}Object.create&&(mh.prototype=Object.create(null),new mh().__proto__||(di=!1));function tDe(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function P8(t,e,r,i,n){if(typeof r!="function")throw new TypeError("The listener must be a function");var s=new tDe(r,i||t,n),o=di?di+e:e;return t._events[o]?t._events[o].fn?t._events[o]=[t._events[o],s]:t._events[o].push(s):(t._events[o]=s,t._eventsCount++),t}function KE(t,e){--t._eventsCount==0?t._events=new mh:delete t._events[e]}function _r(){this._events=new mh,this._eventsCount=0}_r.prototype.eventNames=function(){var e=[],r,i;if(this._eventsCount===0)return e;for(i in r=this._events)eDe.call(r,i)&&e.push(di?i.slice(1):i);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(r)):e};_r.prototype.listeners=function(e){var r=di?di+e:e,i=this._events[r];if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,o=new Array(s);n{"use strict";F8.exports=(t,e)=>(e=e||(()=>{}),t.then(r=>new Promise(i=>{i(e())}).then(()=>r),r=>new Promise(i=>{i(e())}).then(()=>{throw r})))});var N8=C((A$e,UE)=>{"use strict";var rDe=R8(),qx=class extends Error{constructor(e){super(e);this.name="TimeoutError"}},L8=(t,e,r)=>new Promise((i,n)=>{if(typeof e!="number"||e<0)throw new TypeError("Expected `milliseconds` to be a positive number");if(e===Infinity){i(t);return}let s=setTimeout(()=>{if(typeof r=="function"){try{i(r())}catch(l){n(l)}return}let o=typeof r=="string"?r:`Promise timed out after ${e} milliseconds`,a=r instanceof Error?r:new qx(o);typeof t.cancel=="function"&&t.cancel(),n(a)},e);rDe(t.then(i,n),()=>{clearTimeout(s)})});UE.exports=L8;UE.exports.default=L8;UE.exports.TimeoutError=qx});var M8=C(Jx=>{"use strict";Object.defineProperty(Jx,"__esModule",{value:!0});function iDe(t,e,r){let i=0,n=t.length;for(;n>0;){let s=n/2|0,o=i+s;r(t[o],e)<=0?(i=++o,n-=s+1):n=s}return i}Jx.default=iDe});var T8=C(Wx=>{"use strict";Object.defineProperty(Wx,"__esModule",{value:!0});var nDe=M8(),O8=class{constructor(){this._queue=[]}enqueue(e,r){r=Object.assign({priority:0},r);let i={priority:r.priority,run:e};if(this.size&&this._queue[this.size-1].priority>=r.priority){this._queue.push(i);return}let n=nDe.default(this._queue,i,(s,o)=>o.priority-s.priority);this._queue.splice(n,0,i)}dequeue(){let e=this._queue.shift();return e==null?void 0:e.run}filter(e){return this._queue.filter(r=>r.priority===e.priority).map(r=>r.run)}get size(){return this._queue.length}};Wx.default=O8});var Y8=C(zx=>{"use strict";Object.defineProperty(zx,"__esModule",{value:!0});var sDe=v8(),K8=N8(),oDe=T8(),YE=()=>{},aDe=new K8.TimeoutError,U8=class extends sDe{constructor(e){var r,i,n,s;super();if(this._intervalCount=0,this._intervalEnd=0,this._pendingCount=0,this._resolveEmpty=YE,this._resolveIdle=YE,e=Object.assign({carryoverConcurrencyCount:!1,intervalCap:Infinity,interval:0,concurrency:Infinity,autoStart:!0,queueClass:oDe.default},e),!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${(i=(r=e.intervalCap)===null||r===void 0?void 0:r.toString())!==null&&i!==void 0?i:""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${(s=(n=e.interval)===null||n===void 0?void 0:n.toString())!==null&&s!==void 0?s:""}\` (${typeof e.interval})`);this._carryoverConcurrencyCount=e.carryoverConcurrencyCount,this._isIntervalIgnored=e.intervalCap===Infinity||e.interval===0,this._intervalCap=e.intervalCap,this._interval=e.interval,this._queue=new e.queueClass,this._queueClass=e.queueClass,this.concurrency=e.concurrency,this._timeout=e.timeout,this._throwOnTimeout=e.throwOnTimeout===!0,this._isPaused=e.autoStart===!1}get _doesIntervalAllowAnother(){return this._isIntervalIgnored||this._intervalCount{this._onResumeInterval()},r)),!0}return!1}_tryToStartAnother(){if(this._queue.size===0)return this._intervalId&&clearInterval(this._intervalId),this._intervalId=void 0,this._resolvePromises(),!1;if(!this._isPaused){let e=!this._isIntervalPaused();if(this._doesIntervalAllowAnother&&this._doesConcurrentAllowAnother){let r=this._queue.dequeue();return r?(this.emit("active"),r(),e&&this._initializeIntervalIfNeeded(),!0):!1}}return!1}_initializeIntervalIfNeeded(){this._isIntervalIgnored||this._intervalId!==void 0||(this._intervalId=setInterval(()=>{this._onInterval()},this._interval),this._intervalEnd=Date.now()+this._interval)}_onInterval(){this._intervalCount===0&&this._pendingCount===0&&this._intervalId&&(clearInterval(this._intervalId),this._intervalId=void 0),this._intervalCount=this._carryoverConcurrencyCount?this._pendingCount:0,this._processQueue()}_processQueue(){for(;this._tryToStartAnother(););}get concurrency(){return this._concurrency}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this._concurrency=e,this._processQueue()}async add(e,r={}){return new Promise((i,n)=>{let s=async()=>{this._pendingCount++,this._intervalCount++;try{let o=this._timeout===void 0&&r.timeout===void 0?e():K8.default(Promise.resolve(e()),r.timeout===void 0?this._timeout:r.timeout,()=>{(r.throwOnTimeout===void 0?this._throwOnTimeout:r.throwOnTimeout)&&n(aDe)});i(await o)}catch(o){n(o)}this._next()};this._queue.enqueue(s,r),this._tryToStartAnother(),this.emit("add")})}async addAll(e,r){return Promise.all(e.map(async i=>this.add(i,r)))}start(){return this._isPaused?(this._isPaused=!1,this._processQueue(),this):this}pause(){this._isPaused=!0}clear(){this._queue=new this._queueClass}async onEmpty(){if(this._queue.size!==0)return new Promise(e=>{let r=this._resolveEmpty;this._resolveEmpty=()=>{r(),e()}})}async onIdle(){if(!(this._pendingCount===0&&this._queue.size===0))return new Promise(e=>{let r=this._resolveIdle;this._resolveIdle=()=>{r(),e()}})}get size(){return this._queue.size}sizeBy(e){return this._queue.filter(e).length}get pending(){return this._pendingCount}get isPaused(){return this._isPaused}get timeout(){return this._timeout}set timeout(e){this._timeout=e}};zx.default=U8});var J8=C((f$e,q8)=>{var Xx;q8.exports.getContent=()=>(typeof Xx=="undefined"&&(Xx=require("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),Xx)});var _8=C((Zx,Z8)=>{(function(t,e){typeof Zx=="object"?Z8.exports=e():typeof define=="function"&&define.amd?define(e):t.treeify=e()})(Zx,function(){function t(n,s){var o=s?"\u2514":"\u251C";return n?o+="\u2500 ":o+="\u2500\u2500\u2510",o}function e(n,s){var o=[];for(var a in n)!n.hasOwnProperty(a)||s&&typeof n[a]=="function"||o.push(a);return o}function r(n,s,o,a,l,c,u){var g="",f=0,h,p,m=a.slice(0);if(m.push([s,o])&&a.length>0&&(a.forEach(function(y,B){B>0&&(g+=(y[1]?" ":"\u2502")+" "),!p&&y[0]===s&&(p=!0)}),g+=t(n,o)+n,l&&(typeof s!="object"||s instanceof Date)&&(g+=": "+s),p&&(g+=" (circular ref.)"),u(g)),!p&&typeof s=="object"){var I=e(s,c);I.forEach(function(y){h=++f===I.length,r(y,s[y],h,m,l,c,u)})}}var i={};return i.asLines=function(n,s,o,a){var l=typeof o!="function"?o:!1;r(".",n,!1,[],s,l,a||o)},i.asTree=function(n,s,o){var a="";return r(".",n,!1,[],s,o,function(l){a+=l+` -`}),a},i})});var nz=C((M$e,ek)=>{"use strict";var pDe=t=>{let e=!1,r=!1,i=!1;for(let n=0;n{if(!(typeof t=="string"||Array.isArray(t)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let r=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(t)?t=t.map(n=>n.trim()).filter(n=>n.length).join("-"):t=t.trim(),t.length===0?"":t.length===1?e.pascalCase?t.toUpperCase():t.toLowerCase():(t!==t.toLowerCase()&&(t=pDe(t)),t=t.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\d+(\w|$)/g,n=>n.toUpperCase()),r(t))};ek.exports=iz;ek.exports.default=iz});var go=C(uk=>{"use strict";Object.defineProperty(uk,"__esModule",{value:!0});uk.default=uz;function uz(){}uz.prototype={diff:function(e,r){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=i.callback;typeof i=="function"&&(n=i,i={}),this.options=i;var s=this;function o(m){return n?(setTimeout(function(){n(void 0,m)},0),!0):m}e=this.castInput(e),r=this.castInput(r),e=this.removeEmpty(this.tokenize(e)),r=this.removeEmpty(this.tokenize(r));var a=r.length,l=e.length,c=1,u=a+l,g=[{newPos:-1,components:[]}],f=this.extractCommon(g[0],r,e,0);if(g[0].newPos+1>=a&&f+1>=l)return o([{value:this.join(r),count:r.length}]);function h(){for(var m=-1*c;m<=c;m+=2){var I=void 0,y=g[m-1],B=g[m+1],x=(B?B.newPos:0)-m;y&&(g[m-1]=void 0);var F=y&&y.newPos+1=a&&x+1>=l)return o(yDe(s,I.components,r,e,s.useLongestToken));g[m]=I}c++}if(n)(function m(){setTimeout(function(){if(c>u)return n();h()||m()},0)})();else for(;c<=u;){var p=h();if(p)return p}},pushComponent:function(e,r,i){var n=e[e.length-1];n&&n.added===r&&n.removed===i?e[e.length-1]={count:n.count+1,added:r,removed:i}:e.push({count:1,added:r,removed:i})},extractCommon:function(e,r,i,n){for(var s=r.length,o=i.length,a=e.newPos,l=a-n,c=0;a+1h.length?m:h}),c.value=t.join(u)}else c.value=t.join(r.slice(a,a+c.count));a+=c.count,c.added||(l+=c.count)}}var f=e[o-1];return o>1&&typeof f.value=="string"&&(f.added||f.removed)&&t.equals("",f.value)&&(e[o-2].value+=f.value,e.pop()),e}function BDe(t){return{newPos:t.newPos,components:t.components.slice(0)}}});var fz=C(yh=>{"use strict";Object.defineProperty(yh,"__esModule",{value:!0});yh.diffChars=wDe;yh.characterDiff=void 0;var bDe=QDe(go());function QDe(t){return t&&t.__esModule?t:{default:t}}var gz=new bDe.default;yh.characterDiff=gz;function wDe(t,e,r){return gz.diff(t,e,r)}});var fk=C(gk=>{"use strict";Object.defineProperty(gk,"__esModule",{value:!0});gk.generateOptions=DDe;function DDe(t,e){if(typeof t=="function")e.callback=t;else if(t)for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}});var dz=C($c=>{"use strict";Object.defineProperty($c,"__esModule",{value:!0});$c.diffWords=SDe;$c.diffWordsWithSpace=xDe;$c.wordDiff=void 0;var PDe=kDe(go()),vDe=fk();function kDe(t){return t&&t.__esModule?t:{default:t}}var hz=/^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/,pz=/\S/,Bh=new PDe.default;$c.wordDiff=Bh;Bh.equals=function(t,e){return this.options.ignoreCase&&(t=t.toLowerCase(),e=e.toLowerCase()),t===e||this.options.ignoreWhitespace&&!pz.test(t)&&!pz.test(e)};Bh.tokenize=function(t){for(var e=t.split(/(\s+|[()[\]{}'"]|\b)/),r=0;r{"use strict";Object.defineProperty(eu,"__esModule",{value:!0});eu.diffLines=FDe;eu.diffTrimmedLines=RDe;eu.lineDiff=void 0;var NDe=LDe(go()),MDe=fk();function LDe(t){return t&&t.__esModule?t:{default:t}}var WE=new NDe.default;eu.lineDiff=WE;WE.tokenize=function(t){var e=[],r=t.split(/(\n|\r\n)/);r[r.length-1]||r.pop();for(var i=0;i{"use strict";Object.defineProperty(wh,"__esModule",{value:!0});wh.diffSentences=ODe;wh.sentenceDiff=void 0;var KDe=TDe(go());function TDe(t){return t&&t.__esModule?t:{default:t}}var hk=new KDe.default;wh.sentenceDiff=hk;hk.tokenize=function(t){return t.split(/(\S.+?[.!?])(?=\s+|$)/)};function ODe(t,e,r){return hk.diff(t,e,r)}});var mz=C(Qh=>{"use strict";Object.defineProperty(Qh,"__esModule",{value:!0});Qh.diffCss=UDe;Qh.cssDiff=void 0;var HDe=YDe(go());function YDe(t){return t&&t.__esModule?t:{default:t}}var pk=new HDe.default;Qh.cssDiff=pk;pk.tokenize=function(t){return t.split(/([{}:;,]|\s+)/)};function UDe(t,e,r){return pk.diff(t,e,r)}});var Ez=C(tu=>{"use strict";Object.defineProperty(tu,"__esModule",{value:!0});tu.diffJson=jDe;tu.canonicalize=VE;tu.jsonDiff=void 0;var Iz=GDe(go()),qDe=zE();function GDe(t){return t&&t.__esModule?t:{default:t}}function XE(t){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?XE=function(r){return typeof r}:XE=function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},XE(t)}var JDe=Object.prototype.toString,XA=new Iz.default;tu.jsonDiff=XA;XA.useLongestToken=!0;XA.tokenize=qDe.lineDiff.tokenize;XA.castInput=function(t){var e=this.options,r=e.undefinedReplacement,i=e.stringifyReplacer,n=i===void 0?function(s,o){return typeof o=="undefined"?r:o}:i;return typeof t=="string"?t:JSON.stringify(VE(t,null,null,n),n," ")};XA.equals=function(t,e){return Iz.default.prototype.equals.call(XA,t.replace(/,([\r\n])/g,"$1"),e.replace(/,([\r\n])/g,"$1"))};function jDe(t,e,r){return XA.diff(t,e,r)}function VE(t,e,r,i,n){e=e||[],r=r||[],i&&(t=i(n,t));var s;for(s=0;s{"use strict";Object.defineProperty(bh,"__esModule",{value:!0});bh.diffArrays=WDe;bh.arrayDiff=void 0;var VDe=zDe(go());function zDe(t){return t&&t.__esModule?t:{default:t}}var Dh=new VDe.default;bh.arrayDiff=Dh;Dh.tokenize=function(t){return t.slice()};Dh.join=Dh.removeEmpty=function(t){return t};function WDe(t,e,r){return Dh.diff(t,e,r)}});var ZE=C(dk=>{"use strict";Object.defineProperty(dk,"__esModule",{value:!0});dk.parsePatch=XDe;function XDe(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=t.split(/\r\n|[\n\v\f\r\x85]/),i=t.match(/\r\n|[\n\v\f\r\x85]/g)||[],n=[],s=0;function o(){var c={};for(n.push(c);s{"use strict";Object.defineProperty(Ck,"__esModule",{value:!0});Ck.default=ZDe;function ZDe(t,e,r){var i=!0,n=!1,s=!1,o=1;return function a(){if(i&&!s){if(n?o++:i=!1,t+o<=r)return o;s=!0}if(!n)return s||(i=!0),e<=t-o?-o++:(n=!0,a())}}});var bz=C(_E=>{"use strict";Object.defineProperty(_E,"__esModule",{value:!0});_E.applyPatch=wz;_E.applyPatches=_De;var Qz=ZE(),eSe=$De(Bz());function $De(t){return t&&t.__esModule?t:{default:t}}function wz(t,e){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(typeof e=="string"&&(e=(0,Qz.parsePatch)(e)),Array.isArray(e)){if(e.length>1)throw new Error("applyPatch only works with a single input.");e=e[0]}var i=t.split(/\r\n|[\n\v\f\r\x85]/),n=t.match(/\r\n|[\n\v\f\r\x85]/g)||[],s=e.hunks,o=r.compareLine||function(J,R,ve,Fe){return R===Fe},a=0,l=r.fuzzFactor||0,c=0,u=0,g,f;function h(J,R){for(var ve=0;ve0?Fe[0]:" ",qe=Fe.length>0?Fe.substr(1):Fe;if(Ke===" "||Ke==="-"){if(!o(R+1,i[R],Ke,qe)&&(a++,a>l))return!1;R++}}return!0}for(var p=0;p0?oe[0]:" ",A=oe.length>0?oe.substr(1):oe,W=T.linedelimiters[q];if(U===" ")v++;else if(U==="-")i.splice(v,1),n.splice(v,1);else if(U==="+")i.splice(v,0,A),n.splice(v,0,W),v++;else if(U==="\\"){var ee=T.lines[q-1]?T.lines[q-1][0]:null;ee==="+"?g=!0:ee==="-"&&(f=!0)}}}if(g)for(;!i[i.length-1];)i.pop(),n.pop();else f&&(i.push(""),n.push(` -`));for(var ie=0;ie{"use strict";Object.defineProperty(Sh,"__esModule",{value:!0});Sh.structuredPatch=Dz;Sh.createTwoFilesPatch=Sz;Sh.createPatch=tSe;var rSe=zE();function mk(t){return sSe(t)||nSe(t)||iSe()}function iSe(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function nSe(t){if(Symbol.iterator in Object(t)||Object.prototype.toString.call(t)==="[object Arguments]")return Array.from(t)}function sSe(t){if(Array.isArray(t)){for(var e=0,r=new Array(t.length);e0?l(T.lines.slice(-o.context)):[],u-=f.length,g-=f.length)}(L=f).push.apply(L,mk(F.map(function(ie){return(x.added?"+":"-")+ie}))),x.added?p+=F.length:h+=F.length}else{if(u)if(F.length<=o.context*2&&B=a.length-2&&F.length<=o.context){var A=/\n$/.test(r),W=/\n$/.test(i),ee=F.length==0&&f.length>U.oldLines;!A&&ee&&f.splice(U.oldLines,0,"\\ No newline at end of file"),(!A&&!ee||!W)&&f.push("\\ No newline at end of file")}c.push(U),u=0,g=0,f=[]}h+=F.length,p+=F.length}},I=0;I{"use strict";Object.defineProperty($E,"__esModule",{value:!0});$E.arrayEqual=oSe;$E.arrayStartsWith=xz;function oSe(t,e){return t.length!==e.length?!1:xz(t,e)}function xz(t,e){if(e.length>t.length)return!1;for(var r=0;r{"use strict";Object.defineProperty(ey,"__esModule",{value:!0});ey.calcLineCount=Pz;ey.merge=aSe;var ASe=Ik(),lSe=ZE(),Ek=kz();function ru(t){return gSe(t)||uSe(t)||cSe()}function cSe(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function uSe(t){if(Symbol.iterator in Object(t)||Object.prototype.toString.call(t)==="[object Arguments]")return Array.from(t)}function gSe(t){if(Array.isArray(t)){for(var e=0,r=new Array(t.length);e{"use strict";Object.defineProperty(wk,"__esModule",{value:!0});wk.convertChangesToDMP=dSe;function dSe(t){for(var e=[],r,i,n=0;n{"use strict";Object.defineProperty(Qk,"__esModule",{value:!0});Qk.convertChangesToXML=CSe;function CSe(t){for(var e=[],r=0;r"):i.removed&&e.push(""),e.push(mSe(i.value)),i.added?e.push(""):i.removed&&e.push("")}return e.join("")}function mSe(t){var e=t;return e=e.replace(/&/g,"&"),e=e.replace(//g,">"),e=e.replace(/"/g,"""),e}});var Wz=C($t=>{"use strict";Object.defineProperty($t,"__esModule",{value:!0});Object.defineProperty($t,"Diff",{enumerable:!0,get:function(){return ISe.default}});Object.defineProperty($t,"diffChars",{enumerable:!0,get:function(){return ESe.diffChars}});Object.defineProperty($t,"diffWords",{enumerable:!0,get:function(){return jz.diffWords}});Object.defineProperty($t,"diffWordsWithSpace",{enumerable:!0,get:function(){return jz.diffWordsWithSpace}});Object.defineProperty($t,"diffLines",{enumerable:!0,get:function(){return Gz.diffLines}});Object.defineProperty($t,"diffTrimmedLines",{enumerable:!0,get:function(){return Gz.diffTrimmedLines}});Object.defineProperty($t,"diffSentences",{enumerable:!0,get:function(){return ySe.diffSentences}});Object.defineProperty($t,"diffCss",{enumerable:!0,get:function(){return BSe.diffCss}});Object.defineProperty($t,"diffJson",{enumerable:!0,get:function(){return qz.diffJson}});Object.defineProperty($t,"canonicalize",{enumerable:!0,get:function(){return qz.canonicalize}});Object.defineProperty($t,"diffArrays",{enumerable:!0,get:function(){return wSe.diffArrays}});Object.defineProperty($t,"applyPatch",{enumerable:!0,get:function(){return Jz.applyPatch}});Object.defineProperty($t,"applyPatches",{enumerable:!0,get:function(){return Jz.applyPatches}});Object.defineProperty($t,"parsePatch",{enumerable:!0,get:function(){return QSe.parsePatch}});Object.defineProperty($t,"merge",{enumerable:!0,get:function(){return bSe.merge}});Object.defineProperty($t,"structuredPatch",{enumerable:!0,get:function(){return bk.structuredPatch}});Object.defineProperty($t,"createTwoFilesPatch",{enumerable:!0,get:function(){return bk.createTwoFilesPatch}});Object.defineProperty($t,"createPatch",{enumerable:!0,get:function(){return bk.createPatch}});Object.defineProperty($t,"convertChangesToDMP",{enumerable:!0,get:function(){return DSe.convertChangesToDMP}});Object.defineProperty($t,"convertChangesToXML",{enumerable:!0,get:function(){return SSe.convertChangesToXML}});var ISe=xSe(go()),ESe=fz(),jz=dz(),Gz=zE(),ySe=Cz(),BSe=mz(),qz=Ez(),wSe=yz(),Jz=bz(),QSe=ZE(),bSe=Uz(),bk=Ik(),DSe=Yz(),SSe=Hz();function xSe(t){return t&&t.__esModule?t:{default:t}}});var ry=C((att,zz)=>{var kSe=dn(),PSe=jI(),vSe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,FSe=/^\w*$/;function RSe(t,e){if(kSe(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||PSe(t)?!0:FSe.test(t)||!vSe.test(t)||e!=null&&t in Object(e)}zz.exports=RSe});var Yn=C((Att,Vz)=>{function LSe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}Vz.exports=LSe});var iy=C((ltt,Xz)=>{var NSe=NA(),MSe=Yn(),OSe="[object AsyncFunction]",TSe="[object Function]",KSe="[object GeneratorFunction]",USe="[object Proxy]";function YSe(t){if(!MSe(t))return!1;var e=NSe(t);return e==TSe||e==KSe||e==OSe||e==USe}Xz.exports=YSe});var _z=C((ctt,Zz)=>{var HSe=Tn(),jSe=HSe["__core-js_shared__"];Zz.exports=jSe});var t5=C((utt,$z)=>{var Dk=_z(),e5=function(){var t=/[^.]+$/.exec(Dk&&Dk.keys&&Dk.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function GSe(t){return!!e5&&e5 in t}$z.exports=GSe});var Sk=C((gtt,r5)=>{var qSe=Function.prototype,JSe=qSe.toString;function WSe(t){if(t!=null){try{return JSe.call(t)}catch(e){}try{return t+""}catch(e){}}return""}r5.exports=WSe});var n5=C((ftt,i5)=>{var zSe=iy(),VSe=t5(),XSe=Yn(),ZSe=Sk(),_Se=/[\\^$.*+?()[\]{}|]/g,$Se=/^\[object .+?Constructor\]$/,exe=Function.prototype,txe=Object.prototype,rxe=exe.toString,ixe=txe.hasOwnProperty,nxe=RegExp("^"+rxe.call(ixe).replace(_Se,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function sxe(t){if(!XSe(t)||VSe(t))return!1;var e=zSe(t)?nxe:$Se;return e.test(ZSe(t))}i5.exports=sxe});var o5=C((htt,s5)=>{function oxe(t,e){return t==null?void 0:t[e]}s5.exports=oxe});var ma=C((ptt,a5)=>{var axe=n5(),Axe=o5();function lxe(t,e){var r=Axe(t,e);return axe(r)?r:void 0}a5.exports=lxe});var xh=C((dtt,A5)=>{var cxe=ma(),uxe=cxe(Object,"create");A5.exports=uxe});var u5=C((Ctt,l5)=>{var c5=xh();function gxe(){this.__data__=c5?c5(null):{},this.size=0}l5.exports=gxe});var f5=C((mtt,g5)=>{function fxe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}g5.exports=fxe});var p5=C((Itt,h5)=>{var hxe=xh(),pxe="__lodash_hash_undefined__",dxe=Object.prototype,Cxe=dxe.hasOwnProperty;function mxe(t){var e=this.__data__;if(hxe){var r=e[t];return r===pxe?void 0:r}return Cxe.call(e,t)?e[t]:void 0}h5.exports=mxe});var C5=C((Ett,d5)=>{var Ixe=xh(),Exe=Object.prototype,yxe=Exe.hasOwnProperty;function Bxe(t){var e=this.__data__;return Ixe?e[t]!==void 0:yxe.call(e,t)}d5.exports=Bxe});var I5=C((ytt,m5)=>{var wxe=xh(),Qxe="__lodash_hash_undefined__";function bxe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=wxe&&e===void 0?Qxe:e,this}m5.exports=bxe});var y5=C((Btt,E5)=>{var Dxe=u5(),Sxe=f5(),xxe=p5(),kxe=C5(),Pxe=I5();function iu(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{function vxe(){this.__data__=[],this.size=0}B5.exports=vxe});var nu=C((Qtt,Q5)=>{function Fxe(t,e){return t===e||t!==t&&e!==e}Q5.exports=Fxe});var kh=C((btt,b5)=>{var Rxe=nu();function Lxe(t,e){for(var r=t.length;r--;)if(Rxe(t[r][0],e))return r;return-1}b5.exports=Lxe});var S5=C((Dtt,D5)=>{var Nxe=kh(),Mxe=Array.prototype,Oxe=Mxe.splice;function Txe(t){var e=this.__data__,r=Nxe(e,t);if(r<0)return!1;var i=e.length-1;return r==i?e.pop():Oxe.call(e,r,1),--this.size,!0}D5.exports=Txe});var k5=C((Stt,x5)=>{var Kxe=kh();function Uxe(t){var e=this.__data__,r=Kxe(e,t);return r<0?void 0:e[r][1]}x5.exports=Uxe});var v5=C((xtt,P5)=>{var Yxe=kh();function Hxe(t){return Yxe(this.__data__,t)>-1}P5.exports=Hxe});var R5=C((ktt,F5)=>{var jxe=kh();function Gxe(t,e){var r=this.__data__,i=jxe(r,t);return i<0?(++this.size,r.push([t,e])):r[i][1]=e,this}F5.exports=Gxe});var Ph=C((Ptt,L5)=>{var qxe=w5(),Jxe=S5(),Wxe=k5(),zxe=v5(),Vxe=R5();function su(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var Xxe=ma(),Zxe=Tn(),_xe=Xxe(Zxe,"Map");N5.exports=_xe});var T5=C((Ftt,M5)=>{var O5=y5(),$xe=Ph(),eke=ny();function tke(){this.size=0,this.__data__={hash:new O5,map:new(eke||$xe),string:new O5}}M5.exports=tke});var U5=C((Rtt,K5)=>{function rke(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}K5.exports=rke});var vh=C((Ltt,Y5)=>{var ike=U5();function nke(t,e){var r=t.__data__;return ike(e)?r[typeof e=="string"?"string":"hash"]:r.map}Y5.exports=nke});var j5=C((Ntt,H5)=>{var ske=vh();function oke(t){var e=ske(this,t).delete(t);return this.size-=e?1:0,e}H5.exports=oke});var q5=C((Mtt,G5)=>{var ake=vh();function Ake(t){return ake(this,t).get(t)}G5.exports=Ake});var W5=C((Ott,J5)=>{var lke=vh();function cke(t){return lke(this,t).has(t)}J5.exports=cke});var V5=C((Ttt,z5)=>{var uke=vh();function gke(t,e){var r=uke(this,t),i=r.size;return r.set(t,e),this.size+=r.size==i?0:1,this}z5.exports=gke});var sy=C((Ktt,X5)=>{var fke=T5(),hke=j5(),pke=q5(),dke=W5(),Cke=V5();function ou(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var _5=sy(),mke="Expected a function";function xk(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(mke);var r=function(){var i=arguments,n=e?e.apply(this,i):i[0],s=r.cache;if(s.has(n))return s.get(n);var o=t.apply(this,i);return r.cache=s.set(n,o)||s,o};return r.cache=new(xk.Cache||_5),r}xk.Cache=_5;Z5.exports=xk});var t6=C((Ytt,e6)=>{var Ike=$5(),Eke=500;function yke(t){var e=Ike(t,function(i){return r.size===Eke&&r.clear(),i}),r=e.cache;return e}e6.exports=yke});var i6=C((Htt,r6)=>{var Bke=t6(),wke=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Qke=/\\(\\)?/g,bke=Bke(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(wke,function(r,i,n,s){e.push(n?s.replace(Qke,"$1"):i||r)}),e});r6.exports=bke});var au=C((jtt,n6)=>{var Dke=dn(),Ske=ry(),xke=i6(),kke=kc();function Pke(t,e){return Dke(t)?t:Ske(t,e)?[t]:xke(kke(t))}n6.exports=Pke});var _A=C((Gtt,s6)=>{var vke=jI(),Fke=1/0;function Rke(t){if(typeof t=="string"||vke(t))return t;var e=t+"";return e=="0"&&1/t==-Fke?"-0":e}s6.exports=Rke});var Fh=C((qtt,o6)=>{var Lke=au(),Nke=_A();function Mke(t,e){e=Lke(e,t);for(var r=0,i=e.length;t!=null&&r{var Oke=ma(),Tke=function(){try{var t=Oke(Object,"defineProperty");return t({},"",{}),t}catch(e){}}();a6.exports=Tke});var Au=C((Wtt,A6)=>{var l6=kk();function Kke(t,e,r){e=="__proto__"&&l6?l6(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}A6.exports=Kke});var oy=C((ztt,c6)=>{var Uke=Au(),Yke=nu(),Hke=Object.prototype,jke=Hke.hasOwnProperty;function Gke(t,e,r){var i=t[e];(!(jke.call(t,e)&&Yke(i,r))||r===void 0&&!(e in t))&&Uke(t,e,r)}c6.exports=Gke});var Rh=C((Vtt,u6)=>{var qke=9007199254740991,Jke=/^(?:0|[1-9]\d*)$/;function Wke(t,e){var r=typeof t;return e=e==null?qke:e,!!e&&(r=="number"||r!="symbol"&&Jke.test(t))&&t>-1&&t%1==0&&t{var zke=oy(),Vke=au(),Xke=Rh(),f6=Yn(),Zke=_A();function _ke(t,e,r,i){if(!f6(t))return t;e=Vke(e,t);for(var n=-1,s=e.length,o=s-1,a=t;a!=null&&++n{var $ke=Fh(),ePe=Pk(),tPe=au();function rPe(t,e,r){for(var i=-1,n=e.length,s={};++i{function iPe(t,e){return t!=null&&e in Object(t)}d6.exports=iPe});var I6=C(($tt,m6)=>{var nPe=NA(),sPe=ls(),oPe="[object Arguments]";function aPe(t){return sPe(t)&&nPe(t)==oPe}m6.exports=aPe});var Lh=C((ert,E6)=>{var y6=I6(),APe=ls(),B6=Object.prototype,lPe=B6.hasOwnProperty,cPe=B6.propertyIsEnumerable,uPe=y6(function(){return arguments}())?y6:function(t){return APe(t)&&lPe.call(t,"callee")&&!cPe.call(t,"callee")};E6.exports=uPe});var ay=C((trt,w6)=>{var gPe=9007199254740991;function fPe(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=gPe}w6.exports=fPe});var vk=C((rrt,Q6)=>{var hPe=au(),pPe=Lh(),dPe=dn(),CPe=Rh(),mPe=ay(),IPe=_A();function EPe(t,e,r){e=hPe(e,t);for(var i=-1,n=e.length,s=!1;++i{var yPe=C6(),BPe=vk();function wPe(t,e){return t!=null&&BPe(t,e,yPe)}b6.exports=wPe});var S6=C((nrt,D6)=>{var QPe=p6(),bPe=Fk();function DPe(t,e){return QPe(t,e,function(r,i){return bPe(t,i)})}D6.exports=DPe});var Ay=C((srt,x6)=>{function SPe(t,e){for(var r=-1,i=e.length,n=t.length;++r{var P6=LA(),xPe=Lh(),kPe=dn(),v6=P6?P6.isConcatSpreadable:void 0;function PPe(t){return kPe(t)||xPe(t)||!!(v6&&t&&t[v6])}k6.exports=PPe});var N6=C((art,R6)=>{var vPe=Ay(),FPe=F6();function L6(t,e,r,i,n){var s=-1,o=t.length;for(r||(r=FPe),n||(n=[]);++s0&&r(a)?e>1?L6(a,e-1,r,i,n):vPe(n,a):i||(n[n.length]=a)}return n}R6.exports=L6});var O6=C((Art,M6)=>{var RPe=N6();function LPe(t){var e=t==null?0:t.length;return e?RPe(t,1):[]}M6.exports=LPe});var K6=C((lrt,T6)=>{function NPe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}T6.exports=NPe});var Rk=C((crt,U6)=>{var MPe=K6(),Y6=Math.max;function OPe(t,e,r){return e=Y6(e===void 0?t.length-1:e,0),function(){for(var i=arguments,n=-1,s=Y6(i.length-e,0),o=Array(s);++n{function TPe(t){return function(){return t}}H6.exports=TPe});var ly=C((grt,G6)=>{function KPe(t){return t}G6.exports=KPe});var W6=C((frt,q6)=>{var UPe=j6(),J6=kk(),YPe=ly(),HPe=J6?function(t,e){return J6(t,"toString",{configurable:!0,enumerable:!1,value:UPe(e),writable:!0})}:YPe;q6.exports=HPe});var V6=C((hrt,z6)=>{var jPe=800,GPe=16,qPe=Date.now;function JPe(t){var e=0,r=0;return function(){var i=qPe(),n=GPe-(i-r);if(r=i,n>0){if(++e>=jPe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}z6.exports=JPe});var Lk=C((prt,X6)=>{var WPe=W6(),zPe=V6(),VPe=zPe(WPe);X6.exports=VPe});var _6=C((drt,Z6)=>{var XPe=O6(),ZPe=Rk(),_Pe=Lk();function $Pe(t){return _Pe(ZPe(t,void 0,XPe),t+"")}Z6.exports=$Pe});var e9=C((Crt,$6)=>{var eve=S6(),tve=_6(),rve=tve(function(t,e){return t==null?{}:eve(t,e)});$6.exports=rve});var u9=C((ant,A9)=>{"use strict";var Gk;try{Gk=Map}catch(t){}var qk;try{qk=Set}catch(t){}function l9(t,e,r){if(!t||typeof t!="object"||typeof t=="function")return t;if(t.nodeType&&"cloneNode"in t)return t.cloneNode(!0);if(t instanceof Date)return new Date(t.getTime());if(t instanceof RegExp)return new RegExp(t);if(Array.isArray(t))return t.map(c9);if(Gk&&t instanceof Gk)return new Map(Array.from(t.entries()));if(qk&&t instanceof qk)return new Set(Array.from(t.values()));if(t instanceof Object){e.push(t);var i=Object.create(t);r.push(i);for(var n in t){var s=e.findIndex(function(o){return o===t[n]});i[n]=s>-1?r[s]:l9(t[n],e,r)}return i}return t}function c9(t){return l9(t,[],[])}A9.exports=c9});var Th=C(Jk=>{"use strict";Object.defineProperty(Jk,"__esModule",{value:!0});Jk.default=uve;var gve=Object.prototype.toString,fve=Error.prototype.toString,hve=RegExp.prototype.toString,pve=typeof Symbol!="undefined"?Symbol.prototype.toString:()=>"",dve=/^Symbol\((.*)\)(.*)$/;function Cve(t){return t!=+t?"NaN":t===0&&1/t<0?"-0":""+t}function g9(t,e=!1){if(t==null||t===!0||t===!1)return""+t;let r=typeof t;if(r==="number")return Cve(t);if(r==="string")return e?`"${t}"`:t;if(r==="function")return"[Function "+(t.name||"anonymous")+"]";if(r==="symbol")return pve.call(t).replace(dve,"Symbol($1)");let i=gve.call(t).slice(8,-1);return i==="Date"?isNaN(t.getTime())?""+t:t.toISOString(t):i==="Error"||t instanceof Error?"["+fve.call(t)+"]":i==="RegExp"?hve.call(t):null}function uve(t,e){let r=g9(t,e);return r!==null?r:JSON.stringify(t,function(i,n){let s=g9(this[i],e);return s!==null?s:n},2)}});var fo=C(Pr=>{"use strict";Object.defineProperty(Pr,"__esModule",{value:!0});Pr.default=Pr.array=Pr.object=Pr.boolean=Pr.date=Pr.number=Pr.string=Pr.mixed=void 0;var f9=mve(Th());function mve(t){return t&&t.__esModule?t:{default:t}}var h9={default:"${path} is invalid",required:"${path} is a required field",oneOf:"${path} must be one of the following values: ${values}",notOneOf:"${path} must not be one of the following values: ${values}",notType:({path:t,type:e,value:r,originalValue:i})=>{let n=i!=null&&i!==r,s=`${t} must be a \`${e}\` type, but the final value was: \`${(0,f9.default)(r,!0)}\``+(n?` (cast from the value \`${(0,f9.default)(i,!0)}\`).`:".");return r===null&&(s+='\n If "null" is intended as an empty value be sure to mark the schema as `.nullable()`'),s},defined:"${path} must be defined"};Pr.mixed=h9;var p9={length:"${path} must be exactly ${length} characters",min:"${path} must be at least ${min} characters",max:"${path} must be at most ${max} characters",matches:'${path} must match the following: "${regex}"',email:"${path} must be a valid email",url:"${path} must be a valid URL",uuid:"${path} must be a valid UUID",trim:"${path} must be a trimmed string",lowercase:"${path} must be a lowercase string",uppercase:"${path} must be a upper case string"};Pr.string=p9;var d9={min:"${path} must be greater than or equal to ${min}",max:"${path} must be less than or equal to ${max}",lessThan:"${path} must be less than ${less}",moreThan:"${path} must be greater than ${more}",positive:"${path} must be a positive number",negative:"${path} must be a negative number",integer:"${path} must be an integer"};Pr.number=d9;var C9={min:"${path} field must be later than ${min}",max:"${path} field must be at earlier than ${max}"};Pr.date=C9;var m9={isValue:"${path} field must be ${value}"};Pr.boolean=m9;var I9={noUnknown:"${path} field has unspecified keys: ${unknown}"};Pr.object=I9;var E9={min:"${path} field must have at least ${min} items",max:"${path} field must have less than or equal to ${max} items",length:"${path} must be have ${length} items"};Pr.array=E9;var Ive=Object.assign(Object.create(null),{mixed:h9,string:p9,number:d9,date:C9,object:I9,array:E9,boolean:m9});Pr.default=Ive});var B9=C((cnt,y9)=>{var Eve=Object.prototype,yve=Eve.hasOwnProperty;function Bve(t,e){return t!=null&&yve.call(t,e)}y9.exports=Bve});var Kh=C((unt,w9)=>{var wve=B9(),Qve=vk();function bve(t,e){return t!=null&&Qve(t,e,wve)}w9.exports=bve});var cu=C(hy=>{"use strict";Object.defineProperty(hy,"__esModule",{value:!0});hy.default=void 0;var Dve=t=>t&&t.__isYupSchema__;hy.default=Dve});var D9=C(py=>{"use strict";Object.defineProperty(py,"__esModule",{value:!0});py.default=void 0;var Sve=Q9(Kh()),xve=Q9(cu());function Q9(t){return t&&t.__esModule?t:{default:t}}var b9=class{constructor(e,r){if(this.refs=e,this.refs=e,typeof r=="function"){this.fn=r;return}if(!(0,Sve.default)(r,"is"))throw new TypeError("`is:` is required for `when()` conditions");if(!r.then&&!r.otherwise)throw new TypeError("either `then:` or `otherwise:` is required for `when()` conditions");let{is:i,then:n,otherwise:s}=r,o=typeof i=="function"?i:(...a)=>a.every(l=>l===i);this.fn=function(...a){let l=a.pop(),c=a.pop(),u=o(...a)?n:s;if(!!u)return typeof u=="function"?u(c):c.concat(u.resolve(l))}}resolve(e,r){let i=this.refs.map(s=>s.getValue(r==null?void 0:r.value,r==null?void 0:r.parent,r==null?void 0:r.context)),n=this.fn.apply(e,i.concat(e,r));if(n===void 0||n===e)return e;if(!(0,xve.default)(n))throw new TypeError("conditions must return a schema object");return n.resolve(r)}},kve=b9;py.default=kve});var zk=C(Wk=>{"use strict";Object.defineProperty(Wk,"__esModule",{value:!0});Wk.default=Pve;function Pve(t){return t==null?[]:[].concat(t)}});var $A=C(dy=>{"use strict";Object.defineProperty(dy,"__esModule",{value:!0});dy.default=void 0;var vve=S9(Th()),Fve=S9(zk());function S9(t){return t&&t.__esModule?t:{default:t}}function Vk(){return Vk=Object.assign||function(t){for(var e=1;e(0,vve.default)(r[s])):typeof e=="function"?e(r):e}static isError(e){return e&&e.name==="ValidationError"}constructor(e,r,i,n){super();this.name="ValidationError",this.value=r,this.path=i,this.type=n,this.errors=[],this.inner=[],(0,Fve.default)(e).forEach(s=>{Uh.isError(s)?(this.errors.push(...s.errors),this.inner=this.inner.concat(s.inner.length?s.inner:s)):this.errors.push(s)}),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0],Error.captureStackTrace&&Error.captureStackTrace(this,Uh)}};dy.default=Uh});var Cy=C(Xk=>{"use strict";Object.defineProperty(Xk,"__esModule",{value:!0});Xk.default=Lve;var Zk=Nve($A());function Nve(t){return t&&t.__esModule?t:{default:t}}var Mve=t=>{let e=!1;return(...r)=>{e||(e=!0,t(...r))}};function Lve(t,e){let{endEarly:r,tests:i,args:n,value:s,errors:o,sort:a,path:l}=t,c=Mve(e),u=i.length,g=[];if(o=o||[],!u)return o.length?c(new Zk.default(o,s,l)):c(null,s);for(let f=0;f{function Ove(t){return function(e,r,i){for(var n=-1,s=Object(e),o=i(e),a=o.length;a--;){var l=o[t?a:++n];if(r(s[l],l,s)===!1)break}return e}}x9.exports=Ove});var _k=C((mnt,P9)=>{var Tve=k9(),Kve=Tve();P9.exports=Kve});var F9=C((Int,v9)=>{function Uve(t,e){for(var r=-1,i=Array(t);++r{function Yve(){return!1}R9.exports=Yve});var Hh=C((Yh,uu)=>{var Hve=Tn(),jve=L9(),N9=typeof Yh=="object"&&Yh&&!Yh.nodeType&&Yh,M9=N9&&typeof uu=="object"&&uu&&!uu.nodeType&&uu,Gve=M9&&M9.exports===N9,O9=Gve?Hve.Buffer:void 0,qve=O9?O9.isBuffer:void 0,Jve=qve||jve;uu.exports=Jve});var K9=C((ynt,T9)=>{var Wve=NA(),zve=ay(),Vve=ls(),Xve="[object Arguments]",Zve="[object Array]",_ve="[object Boolean]",$ve="[object Date]",eFe="[object Error]",tFe="[object Function]",rFe="[object Map]",iFe="[object Number]",nFe="[object Object]",sFe="[object RegExp]",oFe="[object Set]",aFe="[object String]",AFe="[object WeakMap]",lFe="[object ArrayBuffer]",cFe="[object DataView]",uFe="[object Float32Array]",gFe="[object Float64Array]",fFe="[object Int8Array]",hFe="[object Int16Array]",pFe="[object Int32Array]",dFe="[object Uint8Array]",CFe="[object Uint8ClampedArray]",mFe="[object Uint16Array]",IFe="[object Uint32Array]",jt={};jt[uFe]=jt[gFe]=jt[fFe]=jt[hFe]=jt[pFe]=jt[dFe]=jt[CFe]=jt[mFe]=jt[IFe]=!0;jt[Xve]=jt[Zve]=jt[lFe]=jt[_ve]=jt[cFe]=jt[$ve]=jt[eFe]=jt[tFe]=jt[rFe]=jt[iFe]=jt[nFe]=jt[sFe]=jt[oFe]=jt[aFe]=jt[AFe]=!1;function EFe(t){return Vve(t)&&zve(t.length)&&!!jt[Wve(t)]}T9.exports=EFe});var my=C((Bnt,U9)=>{function yFe(t){return function(e){return t(e)}}U9.exports=yFe});var Iy=C((jh,gu)=>{var BFe=BS(),Y9=typeof jh=="object"&&jh&&!jh.nodeType&&jh,Gh=Y9&&typeof gu=="object"&&gu&&!gu.nodeType&&gu,wFe=Gh&&Gh.exports===Y9,$k=wFe&&BFe.process,QFe=function(){try{var t=Gh&&Gh.require&&Gh.require("util").types;return t||$k&&$k.binding&&$k.binding("util")}catch(e){}}();gu.exports=QFe});var Ey=C((wnt,H9)=>{var bFe=K9(),DFe=my(),j9=Iy(),G9=j9&&j9.isTypedArray,SFe=G9?DFe(G9):bFe;H9.exports=SFe});var eP=C((Qnt,q9)=>{var xFe=F9(),kFe=Lh(),PFe=dn(),vFe=Hh(),FFe=Rh(),RFe=Ey(),LFe=Object.prototype,NFe=LFe.hasOwnProperty;function MFe(t,e){var r=PFe(t),i=!r&&kFe(t),n=!r&&!i&&vFe(t),s=!r&&!i&&!n&&RFe(t),o=r||i||n||s,a=o?xFe(t.length,String):[],l=a.length;for(var c in t)(e||NFe.call(t,c))&&!(o&&(c=="length"||n&&(c=="offset"||c=="parent")||s&&(c=="buffer"||c=="byteLength"||c=="byteOffset")||FFe(c,l)))&&a.push(c);return a}q9.exports=MFe});var yy=C((bnt,J9)=>{var OFe=Object.prototype;function TFe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||OFe;return t===r}J9.exports=TFe});var tP=C((Dnt,W9)=>{function KFe(t,e){return function(r){return t(e(r))}}W9.exports=KFe});var V9=C((Snt,z9)=>{var UFe=tP(),YFe=UFe(Object.keys,Object);z9.exports=YFe});var Z9=C((xnt,X9)=>{var HFe=yy(),jFe=V9(),GFe=Object.prototype,qFe=GFe.hasOwnProperty;function JFe(t){if(!HFe(t))return jFe(t);var e=[];for(var r in Object(t))qFe.call(t,r)&&r!="constructor"&&e.push(r);return e}X9.exports=JFe});var qh=C((knt,_9)=>{var WFe=iy(),zFe=ay();function VFe(t){return t!=null&&zFe(t.length)&&!WFe(t)}_9.exports=VFe});var fu=C((Pnt,$9)=>{var XFe=eP(),ZFe=Z9(),_Fe=qh();function $Fe(t){return _Fe(t)?XFe(t):ZFe(t)}$9.exports=$Fe});var rP=C((vnt,eV)=>{var eRe=_k(),tRe=fu();function rRe(t,e){return t&&eRe(t,e,tRe)}eV.exports=rRe});var rV=C((Fnt,tV)=>{var iRe=Ph();function nRe(){this.__data__=new iRe,this.size=0}tV.exports=nRe});var nV=C((Rnt,iV)=>{function sRe(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}iV.exports=sRe});var oV=C((Lnt,sV)=>{function oRe(t){return this.__data__.get(t)}sV.exports=oRe});var AV=C((Nnt,aV)=>{function aRe(t){return this.__data__.has(t)}aV.exports=aRe});var cV=C((Mnt,lV)=>{var ARe=Ph(),lRe=ny(),cRe=sy(),uRe=200;function gRe(t,e){var r=this.__data__;if(r instanceof ARe){var i=r.__data__;if(!lRe||i.length{var fRe=Ph(),hRe=rV(),pRe=nV(),dRe=oV(),CRe=AV(),mRe=cV();function hu(t){var e=this.__data__=new fRe(t);this.size=e.size}hu.prototype.clear=hRe;hu.prototype.delete=pRe;hu.prototype.get=dRe;hu.prototype.has=CRe;hu.prototype.set=mRe;uV.exports=hu});var fV=C((Tnt,gV)=>{var IRe="__lodash_hash_undefined__";function ERe(t){return this.__data__.set(t,IRe),this}gV.exports=ERe});var pV=C((Knt,hV)=>{function yRe(t){return this.__data__.has(t)}hV.exports=yRe});var CV=C((Unt,dV)=>{var BRe=sy(),wRe=fV(),QRe=pV();function By(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new BRe;++e{function bRe(t,e){for(var r=-1,i=t==null?0:t.length;++r{function DRe(t,e){return t.has(e)}EV.exports=DRe});var iP=C((jnt,BV)=>{var SRe=CV(),xRe=IV(),kRe=yV(),PRe=1,vRe=2;function FRe(t,e,r,i,n,s){var o=r&PRe,a=t.length,l=e.length;if(a!=l&&!(o&&l>a))return!1;var c=s.get(t),u=s.get(e);if(c&&u)return c==e&&u==t;var g=-1,f=!0,h=r&vRe?new SRe:void 0;for(s.set(t,e),s.set(e,t);++g{var RRe=Tn(),LRe=RRe.Uint8Array;wV.exports=LRe});var bV=C((qnt,QV)=>{function NRe(t){var e=-1,r=Array(t.size);return t.forEach(function(i,n){r[++e]=[n,i]}),r}QV.exports=NRe});var SV=C((Jnt,DV)=>{function MRe(t){var e=-1,r=Array(t.size);return t.forEach(function(i){r[++e]=i}),r}DV.exports=MRe});var FV=C((Wnt,xV)=>{var kV=LA(),PV=nP(),ORe=nu(),TRe=iP(),KRe=bV(),URe=SV(),YRe=1,HRe=2,jRe="[object Boolean]",GRe="[object Date]",qRe="[object Error]",JRe="[object Map]",WRe="[object Number]",zRe="[object RegExp]",VRe="[object Set]",XRe="[object String]",ZRe="[object Symbol]",_Re="[object ArrayBuffer]",$Re="[object DataView]",vV=kV?kV.prototype:void 0,sP=vV?vV.valueOf:void 0;function eLe(t,e,r,i,n,s,o){switch(r){case $Re:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case _Re:return!(t.byteLength!=e.byteLength||!s(new PV(t),new PV(e)));case jRe:case GRe:case WRe:return ORe(+t,+e);case qRe:return t.name==e.name&&t.message==e.message;case zRe:case XRe:return t==e+"";case JRe:var a=KRe;case VRe:var l=i&YRe;if(a||(a=URe),t.size!=e.size&&!l)return!1;var c=o.get(t);if(c)return c==e;i|=HRe,o.set(t,e);var u=TRe(a(t),a(e),i,n,s,o);return o.delete(t),u;case ZRe:if(sP)return sP.call(t)==sP.call(e)}return!1}xV.exports=eLe});var oP=C((znt,RV)=>{var tLe=Ay(),rLe=dn();function iLe(t,e,r){var i=e(t);return rLe(t)?i:tLe(i,r(t))}RV.exports=iLe});var NV=C((Vnt,LV)=>{function nLe(t,e){for(var r=-1,i=t==null?0:t.length,n=0,s=[];++r{function sLe(){return[]}MV.exports=sLe});var wy=C((Znt,OV)=>{var oLe=NV(),aLe=aP(),ALe=Object.prototype,lLe=ALe.propertyIsEnumerable,TV=Object.getOwnPropertySymbols,cLe=TV?function(t){return t==null?[]:(t=Object(t),oLe(TV(t),function(e){return lLe.call(t,e)}))}:aLe;OV.exports=cLe});var AP=C((_nt,KV)=>{var uLe=oP(),gLe=wy(),fLe=fu();function hLe(t){return uLe(t,fLe,gLe)}KV.exports=hLe});var HV=C(($nt,UV)=>{var YV=AP(),pLe=1,dLe=Object.prototype,CLe=dLe.hasOwnProperty;function mLe(t,e,r,i,n,s){var o=r&pLe,a=YV(t),l=a.length,c=YV(e),u=c.length;if(l!=u&&!o)return!1;for(var g=l;g--;){var f=a[g];if(!(o?f in e:CLe.call(e,f)))return!1}var h=s.get(t),p=s.get(e);if(h&&p)return h==e&&p==t;var m=!0;s.set(t,e),s.set(e,t);for(var I=o;++g{var ILe=ma(),ELe=Tn(),yLe=ILe(ELe,"DataView");jV.exports=yLe});var JV=C((tst,qV)=>{var BLe=ma(),wLe=Tn(),QLe=BLe(wLe,"Promise");qV.exports=QLe});var zV=C((rst,WV)=>{var bLe=ma(),DLe=Tn(),SLe=bLe(DLe,"Set");WV.exports=SLe});var XV=C((ist,VV)=>{var xLe=ma(),kLe=Tn(),PLe=xLe(kLe,"WeakMap");VV.exports=PLe});var Wh=C((nst,ZV)=>{var lP=GV(),cP=ny(),uP=JV(),gP=zV(),fP=XV(),_V=NA(),pu=Sk(),$V="[object Map]",vLe="[object Object]",e7="[object Promise]",t7="[object Set]",r7="[object WeakMap]",i7="[object DataView]",FLe=pu(lP),RLe=pu(cP),LLe=pu(uP),NLe=pu(gP),MLe=pu(fP),el=_V;(lP&&el(new lP(new ArrayBuffer(1)))!=i7||cP&&el(new cP)!=$V||uP&&el(uP.resolve())!=e7||gP&&el(new gP)!=t7||fP&&el(new fP)!=r7)&&(el=function(t){var e=_V(t),r=e==vLe?t.constructor:void 0,i=r?pu(r):"";if(i)switch(i){case FLe:return i7;case RLe:return $V;case LLe:return e7;case NLe:return t7;case MLe:return r7}return e});ZV.exports=el});var u7=C((sst,n7)=>{var hP=Jh(),OLe=iP(),TLe=FV(),KLe=HV(),s7=Wh(),o7=dn(),a7=Hh(),ULe=Ey(),YLe=1,A7="[object Arguments]",l7="[object Array]",Qy="[object Object]",HLe=Object.prototype,c7=HLe.hasOwnProperty;function jLe(t,e,r,i,n,s){var o=o7(t),a=o7(e),l=o?l7:s7(t),c=a?l7:s7(e);l=l==A7?Qy:l,c=c==A7?Qy:c;var u=l==Qy,g=c==Qy,f=l==c;if(f&&a7(t)){if(!a7(e))return!1;o=!0,u=!1}if(f&&!u)return s||(s=new hP),o||ULe(t)?OLe(t,e,r,i,n,s):TLe(t,e,l,r,i,n,s);if(!(r&YLe)){var h=u&&c7.call(t,"__wrapped__"),p=g&&c7.call(e,"__wrapped__");if(h||p){var m=h?t.value():t,I=p?e.value():e;return s||(s=new hP),n(m,I,r,i,s)}}return f?(s||(s=new hP),KLe(t,e,r,i,n,s)):!1}n7.exports=jLe});var pP=C((ost,g7)=>{var GLe=u7(),f7=ls();function h7(t,e,r,i,n){return t===e?!0:t==null||e==null||!f7(t)&&!f7(e)?t!==t&&e!==e:GLe(t,e,r,i,h7,n)}g7.exports=h7});var d7=C((ast,p7)=>{var qLe=Jh(),JLe=pP(),WLe=1,zLe=2;function VLe(t,e,r,i){var n=r.length,s=n,o=!i;if(t==null)return!s;for(t=Object(t);n--;){var a=r[n];if(o&&a[2]?a[1]!==t[a[0]]:!(a[0]in t))return!1}for(;++n{var XLe=Yn();function ZLe(t){return t===t&&!XLe(t)}C7.exports=ZLe});var I7=C((lst,m7)=>{var _Le=dP(),$Le=fu();function eNe(t){for(var e=$Le(t),r=e.length;r--;){var i=e[r],n=t[i];e[r]=[i,n,_Le(n)]}return e}m7.exports=eNe});var CP=C((cst,E7)=>{function tNe(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==void 0||t in Object(r))}}E7.exports=tNe});var B7=C((ust,y7)=>{var rNe=d7(),iNe=I7(),nNe=CP();function sNe(t){var e=iNe(t);return e.length==1&&e[0][2]?nNe(e[0][0],e[0][1]):function(r){return r===t||rNe(r,t,e)}}y7.exports=sNe});var by=C((gst,w7)=>{var oNe=Fh();function aNe(t,e,r){var i=t==null?void 0:oNe(t,e);return i===void 0?r:i}w7.exports=aNe});var b7=C((fst,Q7)=>{var ANe=pP(),lNe=by(),cNe=Fk(),uNe=ry(),gNe=dP(),fNe=CP(),hNe=_A(),pNe=1,dNe=2;function CNe(t,e){return uNe(t)&&gNe(e)?fNe(hNe(t),e):function(r){var i=lNe(r,t);return i===void 0&&i===e?cNe(r,t):ANe(e,i,pNe|dNe)}}Q7.exports=CNe});var S7=C((hst,D7)=>{function mNe(t){return function(e){return e==null?void 0:e[t]}}D7.exports=mNe});var k7=C((pst,x7)=>{var INe=Fh();function ENe(t){return function(e){return INe(e,t)}}x7.exports=ENe});var v7=C((dst,P7)=>{var yNe=S7(),BNe=k7(),wNe=ry(),QNe=_A();function bNe(t){return wNe(t)?yNe(QNe(t)):BNe(t)}P7.exports=bNe});var mP=C((Cst,F7)=>{var DNe=B7(),SNe=b7(),xNe=ly(),kNe=dn(),PNe=v7();function vNe(t){return typeof t=="function"?t:t==null?xNe:typeof t=="object"?kNe(t)?SNe(t[0],t[1]):DNe(t):PNe(t)}F7.exports=vNe});var IP=C((mst,R7)=>{var FNe=Au(),RNe=rP(),LNe=mP();function NNe(t,e){var r={};return e=LNe(e,3),RNe(t,function(i,n,s){FNe(r,n,e(i,n,s))}),r}R7.exports=NNe});var zh=C((Ist,L7)=>{"use strict";function tl(t){this._maxSize=t,this.clear()}tl.prototype.clear=function(){this._size=0,this._values=Object.create(null)};tl.prototype.get=function(t){return this._values[t]};tl.prototype.set=function(t,e){return this._size>=this._maxSize&&this.clear(),t in this._values||this._size++,this._values[t]=e};var MNe=/[^.^\]^[]+|(?=\[\]|\.\.)/g,N7=/^\d+$/,ONe=/^\d/,TNe=/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g,KNe=/^\s*(['"]?)(.*?)(\1)\s*$/,EP=512,M7=new tl(EP),O7=new tl(EP),T7=new tl(EP);L7.exports={Cache:tl,split:BP,normalizePath:yP,setter:function(t){var e=yP(t);return O7.get(t)||O7.set(t,function(i,n){for(var s=0,o=e.length,a=i;s{"use strict";Object.defineProperty(Vh,"__esModule",{value:!0});Vh.create=GNe;Vh.default=void 0;var qNe=zh(),Dy={context:"$",value:"."};function GNe(t,e){return new Sy(t,e)}var Sy=class{constructor(e,r={}){if(typeof e!="string")throw new TypeError("ref must be a string, got: "+e);if(this.key=e.trim(),e==="")throw new TypeError("ref must be a non-empty string");this.isContext=this.key[0]===Dy.context,this.isValue=this.key[0]===Dy.value,this.isSibling=!this.isContext&&!this.isValue;let i=this.isContext?Dy.context:this.isValue?Dy.value:"";this.path=this.key.slice(i.length),this.getter=this.path&&(0,qNe.getter)(this.path,!0),this.map=r.map}getValue(e,r,i){let n=this.isContext?i:this.isValue?e:r;return this.getter&&(n=this.getter(n||{})),this.map&&(n=this.map(n)),n}cast(e,r){return this.getValue(e,r==null?void 0:r.parent,r==null?void 0:r.context)}resolve(){return this}describe(){return{type:"ref",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(e){return e&&e.__isYupRef}};Vh.default=Sy;Sy.prototype.__isYupRef=!0});var K7=C(QP=>{"use strict";Object.defineProperty(QP,"__esModule",{value:!0});QP.default=JNe;var WNe=bP(IP()),xy=bP($A()),zNe=bP(rl());function bP(t){return t&&t.__esModule?t:{default:t}}function ky(){return ky=Object.assign||function(t){for(var e=1;e=0)&&(r[n]=t[n]);return r}function JNe(t){function e(r,i){let{value:n,path:s="",label:o,options:a,originalValue:l,sync:c}=r,u=VNe(r,["value","path","label","options","originalValue","sync"]),{name:g,test:f,params:h,message:p}=t,{parent:m,context:I}=a;function y(T){return zNe.default.isRef(T)?T.getValue(n,m,I):T}function B(T={}){let v=(0,WNe.default)(ky({value:n,originalValue:l,label:o,path:T.path||s},h,T.params),y),q=new xy.default(xy.default.formatError(T.message||p,v),n,v.path,T.type||g);return q.params=v,q}let x=ky({path:s,parent:m,type:g,createError:B,resolve:y,options:a,originalValue:l},u);if(!c){try{Promise.resolve(f.call(x,n,x)).then(T=>{xy.default.isError(T)?i(T):T?i(null,T):i(B())})}catch(T){i(T)}return}let F;try{var L;if(F=f.call(x,n,x),typeof((L=F)==null?void 0:L.then)=="function")throw new Error(`Validation test of type: "${x.type}" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`)}catch(T){i(T);return}xy.default.isError(F)?i(F):F?i(null,F):i(B())}return e.OPTIONS=t,e}});var DP=C(Xh=>{"use strict";Object.defineProperty(Xh,"__esModule",{value:!0});Xh.getIn=U7;Xh.default=void 0;var XNe=zh(),ZNe=t=>t.substr(0,t.length-1).substr(1);function U7(t,e,r,i=r){let n,s,o;return e?((0,XNe.forEach)(e,(a,l,c)=>{let u=l?ZNe(a):a;if(t=t.resolve({context:i,parent:n,value:r}),t.innerType){let g=c?parseInt(u,10):0;if(r&&g>=r.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${a}, in the path: ${e}. because there is no value at that index. `);n=r,r=r&&r[g],t=t.innerType}if(!c){if(!t.fields||!t.fields[u])throw new Error(`The schema does not contain the path: ${e}. (failed at: ${o} which is a type: "${t._type}")`);n=r,r=r&&r[u],t=t.fields[u]}s=u,o=l?"["+a+"]":"."+a}),{schema:t,parent:n,parentPath:s}):{parent:n,parentPath:e,schema:t}}var _Ne=(t,e,r,i)=>U7(t,e,r,i).schema,$Ne=_Ne;Xh.default=$Ne});var H7=C(Py=>{"use strict";Object.defineProperty(Py,"__esModule",{value:!0});Py.default=void 0;var Y7=eMe(rl());function eMe(t){return t&&t.__esModule?t:{default:t}}var vy=class{constructor(){this.list=new Set,this.refs=new Map}get size(){return this.list.size+this.refs.size}describe(){let e=[];for(let r of this.list)e.push(r);for(let[,r]of this.refs)e.push(r.describe());return e}toArray(){return Array.from(this.list).concat(Array.from(this.refs.values()))}add(e){Y7.default.isRef(e)?this.refs.set(e.key,e):this.list.add(e)}delete(e){Y7.default.isRef(e)?this.refs.delete(e.key):this.list.delete(e)}has(e,r){if(this.list.has(e))return!0;let i,n=this.refs.values();for(;i=n.next(),!i.done;)if(r(i.value)===e)return!0;return!1}clone(){let e=new vy;return e.list=new Set(this.list),e.refs=new Map(this.refs),e}merge(e,r){let i=this.clone();return e.list.forEach(n=>i.add(n)),e.refs.forEach(n=>i.add(n)),r.list.forEach(n=>i.delete(n)),r.refs.forEach(n=>i.delete(n)),i}};Py.default=vy});var po=C(Fy=>{"use strict";Object.defineProperty(Fy,"__esModule",{value:!0});Fy.default=void 0;var j7=ho(u9()),du=fo(),tMe=ho(D9()),G7=ho(Cy()),Ry=ho(K7()),q7=ho(Th()),rMe=ho(rl()),iMe=DP(),nMe=ho(zk()),J7=ho($A()),W7=ho(H7());function ho(t){return t&&t.__esModule?t:{default:t}}function wn(){return wn=Object.assign||function(t){for(var e=1;e{this.typeError(du.mixed.notType)}),this.type=(e==null?void 0:e.type)||"mixed",this.spec=wn({strip:!1,strict:!1,abortEarly:!0,recursive:!0,nullable:!1,presence:"optional"},e==null?void 0:e.spec)}get _type(){return this.type}_typeCheck(e){return!0}clone(e){if(this._mutate)return e&&Object.assign(this.spec,e),this;let r=Object.create(Object.getPrototypeOf(this));return r.type=this.type,r._typeError=this._typeError,r._whitelistError=this._whitelistError,r._blacklistError=this._blacklistError,r._whitelist=this._whitelist.clone(),r._blacklist=this._blacklist.clone(),r.exclusiveTests=wn({},this.exclusiveTests),r.deps=[...this.deps],r.conditions=[...this.conditions],r.tests=[...this.tests],r.transforms=[...this.transforms],r.spec=(0,j7.default)(wn({},this.spec,e)),r}label(e){var r=this.clone();return r.spec.label=e,r}meta(...e){if(e.length===0)return this.spec.meta;let r=this.clone();return r.spec.meta=Object.assign(r.spec.meta||{},e[0]),r}withMutation(e){let r=this._mutate;this._mutate=!0;let i=e(this);return this._mutate=r,i}concat(e){if(!e||e===this)return this;if(e.type!==this.type&&this.type!=="mixed")throw new TypeError(`You cannot \`concat()\` schema's of different types: ${this.type} and ${e.type}`);let r=this,i=e.clone(),n=wn({},r.spec,i.spec);return i.spec=n,i._typeError||(i._typeError=r._typeError),i._whitelistError||(i._whitelistError=r._whitelistError),i._blacklistError||(i._blacklistError=r._blacklistError),i._whitelist=r._whitelist.merge(e._whitelist,e._blacklist),i._blacklist=r._blacklist.merge(e._blacklist,e._whitelist),i.tests=r.tests,i.exclusiveTests=r.exclusiveTests,i.withMutation(s=>{e.tests.forEach(o=>{s.test(o.OPTIONS)})}),i}isType(e){return this.spec.nullable&&e===null?!0:this._typeCheck(e)}resolve(e){let r=this;if(r.conditions.length){let i=r.conditions;r=r.clone(),r.conditions=[],r=i.reduce((n,s)=>s.resolve(n,e),r),r=r.resolve(e)}return r}cast(e,r={}){let i=this.resolve(wn({value:e},r)),n=i._cast(e,r);if(e!==void 0&&r.assert!==!1&&i.isType(n)!==!0){let s=(0,q7.default)(e),o=(0,q7.default)(n);throw new TypeError(`The value of ${r.path||"field"} could not be cast to a value that satisfies the schema type: "${i._type}". - -attempted value: ${s} -`+(o!==s?`result of cast: ${o}`:""))}return n}_cast(e,r){let i=e===void 0?e:this.transforms.reduce((n,s)=>s.call(this,n,e,this),e);return i===void 0&&(i=this.getDefault()),i}_validate(e,r={},i){let{sync:n,path:s,from:o=[],originalValue:a=e,strict:l=this.spec.strict,abortEarly:c=this.spec.abortEarly}=r,u=e;l||(u=this._cast(u,wn({assert:!1},r)));let g={value:u,path:s,options:r,originalValue:a,schema:this,label:this.spec.label,sync:n,from:o},f=[];this._typeError&&f.push(this._typeError),this._whitelistError&&f.push(this._whitelistError),this._blacklistError&&f.push(this._blacklistError),(0,G7.default)({args:g,value:u,path:s,sync:n,tests:f,endEarly:c},h=>{if(h)return void i(h,u);(0,G7.default)({tests:this.tests,args:g,path:s,sync:n,value:u,endEarly:c},i)})}validate(e,r,i){let n=this.resolve(wn({},r,{value:e}));return typeof i=="function"?n._validate(e,r,i):new Promise((s,o)=>n._validate(e,r,(a,l)=>{a?o(a):s(l)}))}validateSync(e,r){let i=this.resolve(wn({},r,{value:e})),n;return i._validate(e,wn({},r,{sync:!0}),(s,o)=>{if(s)throw s;n=o}),n}isValid(e,r){return this.validate(e,r).then(()=>!0,i=>{if(J7.default.isError(i))return!1;throw i})}isValidSync(e,r){try{return this.validateSync(e,r),!0}catch(i){if(J7.default.isError(i))return!1;throw i}}_getDefault(){let e=this.spec.default;return e==null?e:typeof e=="function"?e.call(this):(0,j7.default)(e)}getDefault(e){return this.resolve(e||{})._getDefault()}default(e){return arguments.length===0?this._getDefault():this.clone({default:e})}strict(e=!0){var r=this.clone();return r.spec.strict=e,r}_isPresent(e){return e!=null}defined(e=du.mixed.defined){return this.test({message:e,name:"defined",exclusive:!0,test(r){return r!==void 0}})}required(e=du.mixed.required){return this.clone({presence:"required"}).withMutation(r=>r.test({message:e,name:"required",exclusive:!0,test(i){return this.schema._isPresent(i)}}))}notRequired(){var e=this.clone({presence:"optional"});return e.tests=e.tests.filter(r=>r.OPTIONS.name!=="required"),e}nullable(e=!0){var r=this.clone({nullable:e!==!1});return r}transform(e){var r=this.clone();return r.transforms.push(e),r}test(...e){let r;if(e.length===1?typeof e[0]=="function"?r={test:e[0]}:r=e[0]:e.length===2?r={name:e[0],test:e[1]}:r={name:e[0],message:e[1],test:e[2]},r.message===void 0&&(r.message=du.mixed.default),typeof r.test!="function")throw new TypeError("`test` is a required parameters");let i=this.clone(),n=(0,Ry.default)(r),s=r.exclusive||r.name&&i.exclusiveTests[r.name]===!0;if(r.exclusive&&!r.name)throw new TypeError("Exclusive tests must provide a unique `name` identifying the test");return r.name&&(i.exclusiveTests[r.name]=!!r.exclusive),i.tests=i.tests.filter(o=>!(o.OPTIONS.name===r.name&&(s||o.OPTIONS.test===n.OPTIONS.test))),i.tests.push(n),i}when(e,r){!Array.isArray(e)&&typeof e!="string"&&(r=e,e=".");let i=this.clone(),n=(0,nMe.default)(e).map(s=>new rMe.default(s));return n.forEach(s=>{s.isSibling&&i.deps.push(s.key)}),i.conditions.push(new tMe.default(n,r)),i}typeError(e){var r=this.clone();return r._typeError=(0,Ry.default)({message:e,name:"typeError",test(i){return i!==void 0&&!this.schema.isType(i)?this.createError({params:{type:this.schema._type}}):!0}}),r}oneOf(e,r=du.mixed.oneOf){var i=this.clone();return e.forEach(n=>{i._whitelist.add(n),i._blacklist.delete(n)}),i._whitelistError=(0,Ry.default)({message:r,name:"oneOf",test(n){if(n===void 0)return!0;let s=this.schema._whitelist;return s.has(n,this.resolve)?!0:this.createError({params:{values:s.toArray().join(", ")}})}}),i}notOneOf(e,r=du.mixed.notOneOf){var i=this.clone();return e.forEach(n=>{i._blacklist.add(n),i._whitelist.delete(n)}),i._blacklistError=(0,Ry.default)({message:r,name:"notOneOf",test(n){let s=this.schema._blacklist;return s.has(n,this.resolve)?this.createError({params:{values:s.toArray().join(", ")}}):!0}}),i}strip(e=!0){let r=this.clone();return r.spec.strip=e,r}describe(){let e=this.clone(),{label:r,meta:i}=e.spec;return{meta:i,label:r,type:e.type,oneOf:e._whitelist.describe(),notOneOf:e._blacklist.describe(),tests:e.tests.map(s=>({name:s.OPTIONS.name,params:s.OPTIONS.params})).filter((s,o,a)=>a.findIndex(l=>l.name===s.name)===o)}}};Fy.default=ms;ms.prototype.__isYupSchema__=!0;for(let t of["validate","validateSync"])ms.prototype[`${t}At`]=function(e,r,i={}){let{parent:n,parentPath:s,schema:o}=(0,iMe.getIn)(this,e,r,i.context);return o[t](n&&n[s],wn({},i,{parent:n,path:e}))};for(let t of["equals","is"])ms.prototype[t]=ms.prototype.oneOf;for(let t of["not","nope"])ms.prototype[t]=ms.prototype.notOneOf;ms.prototype.optional=ms.prototype.notRequired});var V7=C(Zh=>{"use strict";Object.defineProperty(Zh,"__esModule",{value:!0});Zh.create=z7;Zh.default=void 0;var oMe=sMe(po());function sMe(t){return t&&t.__esModule?t:{default:t}}var SP=oMe.default,aMe=SP;Zh.default=aMe;function z7(){return new SP}z7.prototype=SP.prototype});var Cu=C(Ly=>{"use strict";Object.defineProperty(Ly,"__esModule",{value:!0});Ly.default=void 0;var AMe=t=>t==null;Ly.default=AMe});var eX=C(_h=>{"use strict";Object.defineProperty(_h,"__esModule",{value:!0});_h.create=X7;_h.default=void 0;var lMe=Z7(po()),_7=fo(),$7=Z7(Cu());function Z7(t){return t&&t.__esModule?t:{default:t}}function X7(){return new Ny}var Ny=class extends lMe.default{constructor(){super({type:"boolean"});this.withMutation(()=>{this.transform(function(e){if(!this.isType(e)){if(/^(true|1)$/i.test(String(e)))return!0;if(/^(false|0)$/i.test(String(e)))return!1}return e})})}_typeCheck(e){return e instanceof Boolean&&(e=e.valueOf()),typeof e=="boolean"}isTrue(e=_7.boolean.isValue){return this.test({message:e,name:"is-value",exclusive:!0,params:{value:"true"},test(r){return(0,$7.default)(r)||r===!0}})}isFalse(e=_7.boolean.isValue){return this.test({message:e,name:"is-value",exclusive:!0,params:{value:"false"},test(r){return(0,$7.default)(r)||r===!1}})}};_h.default=Ny;X7.prototype=Ny.prototype});var iX=C($h=>{"use strict";Object.defineProperty($h,"__esModule",{value:!0});$h.create=tX;$h.default=void 0;var Is=fo(),Co=rX(Cu()),cMe=rX(po());function rX(t){return t&&t.__esModule?t:{default:t}}var uMe=/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i,gMe=/^((https?|ftp):)?\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,fMe=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,hMe=t=>(0,Co.default)(t)||t===t.trim(),pMe={}.toString();function tX(){return new My}var My=class extends cMe.default{constructor(){super({type:"string"});this.withMutation(()=>{this.transform(function(e){if(this.isType(e)||Array.isArray(e))return e;let r=e!=null&&e.toString?e.toString():e;return r===pMe?e:r})})}_typeCheck(e){return e instanceof String&&(e=e.valueOf()),typeof e=="string"}_isPresent(e){return super._isPresent(e)&&!!e.length}length(e,r=Is.string.length){return this.test({message:r,name:"length",exclusive:!0,params:{length:e},test(i){return(0,Co.default)(i)||i.length===this.resolve(e)}})}min(e,r=Is.string.min){return this.test({message:r,name:"min",exclusive:!0,params:{min:e},test(i){return(0,Co.default)(i)||i.length>=this.resolve(e)}})}max(e,r=Is.string.max){return this.test({name:"max",exclusive:!0,message:r,params:{max:e},test(i){return(0,Co.default)(i)||i.length<=this.resolve(e)}})}matches(e,r){let i=!1,n,s;return r&&(typeof r=="object"?{excludeEmptyString:i=!1,message:n,name:s}=r:n=r),this.test({name:s||"matches",message:n||Is.string.matches,params:{regex:e},test:o=>(0,Co.default)(o)||o===""&&i||o.search(e)!==-1})}email(e=Is.string.email){return this.matches(uMe,{name:"email",message:e,excludeEmptyString:!0})}url(e=Is.string.url){return this.matches(gMe,{name:"url",message:e,excludeEmptyString:!0})}uuid(e=Is.string.uuid){return this.matches(fMe,{name:"uuid",message:e,excludeEmptyString:!1})}ensure(){return this.default("").transform(e=>e===null?"":e)}trim(e=Is.string.trim){return this.transform(r=>r!=null?r.trim():r).test({message:e,name:"trim",test:hMe})}lowercase(e=Is.string.lowercase){return this.transform(r=>(0,Co.default)(r)?r:r.toLowerCase()).test({message:e,name:"string_case",exclusive:!0,test:r=>(0,Co.default)(r)||r===r.toLowerCase()})}uppercase(e=Is.string.uppercase){return this.transform(r=>(0,Co.default)(r)?r:r.toUpperCase()).test({message:e,name:"string_case",exclusive:!0,test:r=>(0,Co.default)(r)||r===r.toUpperCase()})}};$h.default=My;tX.prototype=My.prototype});var oX=C(ep=>{"use strict";Object.defineProperty(ep,"__esModule",{value:!0});ep.create=nX;ep.default=void 0;var il=fo(),nl=sX(Cu()),dMe=sX(po());function sX(t){return t&&t.__esModule?t:{default:t}}var CMe=t=>t!=+t;function nX(){return new Oy}var Oy=class extends dMe.default{constructor(){super({type:"number"});this.withMutation(()=>{this.transform(function(e){let r=e;if(typeof r=="string"){if(r=r.replace(/\s/g,""),r==="")return NaN;r=+r}return this.isType(r)?r:parseFloat(r)})})}_typeCheck(e){return e instanceof Number&&(e=e.valueOf()),typeof e=="number"&&!CMe(e)}min(e,r=il.number.min){return this.test({message:r,name:"min",exclusive:!0,params:{min:e},test(i){return(0,nl.default)(i)||i>=this.resolve(e)}})}max(e,r=il.number.max){return this.test({message:r,name:"max",exclusive:!0,params:{max:e},test(i){return(0,nl.default)(i)||i<=this.resolve(e)}})}lessThan(e,r=il.number.lessThan){return this.test({message:r,name:"max",exclusive:!0,params:{less:e},test(i){return(0,nl.default)(i)||ithis.resolve(e)}})}positive(e=il.number.positive){return this.moreThan(0,e)}negative(e=il.number.negative){return this.lessThan(0,e)}integer(e=il.number.integer){return this.test({name:"integer",message:e,test:r=>(0,nl.default)(r)||Number.isInteger(r)})}truncate(){return this.transform(e=>(0,nl.default)(e)?e:e|0)}round(e){var r,i=["ceil","floor","round","trunc"];if(e=((r=e)==null?void 0:r.toLowerCase())||"round",e==="trunc")return this.truncate();if(i.indexOf(e.toLowerCase())===-1)throw new TypeError("Only valid options for round() are: "+i.join(", "));return this.transform(n=>(0,nl.default)(n)?n:Math[e](n))}};ep.default=Oy;nX.prototype=Oy.prototype});var aX=C(xP=>{"use strict";Object.defineProperty(xP,"__esModule",{value:!0});xP.default=mMe;var IMe=/^(\d{4}|[+\-]\d{6})(?:-?(\d{2})(?:-?(\d{2}))?)?(?:[ T]?(\d{2}):?(\d{2})(?::?(\d{2})(?:[,\.](\d{1,}))?)?(?:(Z)|([+\-])(\d{2})(?::?(\d{2}))?)?)?$/;function mMe(t){var e=[1,4,5,6,7,10,11],r=0,i,n;if(n=IMe.exec(t)){for(var s=0,o;o=e[s];++s)n[o]=+n[o]||0;n[2]=(+n[2]||1)-1,n[3]=+n[3]||1,n[7]=n[7]?String(n[7]).substr(0,3):0,(n[8]===void 0||n[8]==="")&&(n[9]===void 0||n[9]==="")?i=+new Date(n[1],n[2],n[3],n[4],n[5],n[6],n[7]):(n[8]!=="Z"&&n[9]!==void 0&&(r=n[10]*60+n[11],n[9]==="+"&&(r=0-r)),i=Date.UTC(n[1],n[2],n[3],n[4],n[5]+r,n[6],n[7]))}else i=Date.parse?Date.parse(t):NaN;return i}});var cX=C(tp=>{"use strict";Object.defineProperty(tp,"__esModule",{value:!0});tp.create=kP;tp.default=void 0;var EMe=Ty(aX()),AX=fo(),lX=Ty(Cu()),yMe=Ty(rl()),BMe=Ty(po());function Ty(t){return t&&t.__esModule?t:{default:t}}var PP=new Date(""),wMe=t=>Object.prototype.toString.call(t)==="[object Date]";function kP(){return new rp}var rp=class extends BMe.default{constructor(){super({type:"date"});this.withMutation(()=>{this.transform(function(e){return this.isType(e)?e:(e=(0,EMe.default)(e),isNaN(e)?PP:new Date(e))})})}_typeCheck(e){return wMe(e)&&!isNaN(e.getTime())}prepareParam(e,r){let i;if(yMe.default.isRef(e))i=e;else{let n=this.cast(e);if(!this._typeCheck(n))throw new TypeError(`\`${r}\` must be a Date or a value that can be \`cast()\` to a Date`);i=n}return i}min(e,r=AX.date.min){let i=this.prepareParam(e,"min");return this.test({message:r,name:"min",exclusive:!0,params:{min:e},test(n){return(0,lX.default)(n)||n>=this.resolve(i)}})}max(e,r=AX.date.max){var i=this.prepareParam(e,"max");return this.test({message:r,name:"max",exclusive:!0,params:{max:e},test(n){return(0,lX.default)(n)||n<=this.resolve(i)}})}};tp.default=rp;rp.INVALID_DATE=PP;kP.prototype=rp.prototype;kP.INVALID_DATE=PP});var gX=C((Fst,uX)=>{function QMe(t,e,r,i){var n=-1,s=t==null?0:t.length;for(i&&s&&(r=t[++n]);++n{function bMe(t){return function(e){return t==null?void 0:t[e]}}fX.exports=bMe});var dX=C((Lst,pX)=>{var DMe=hX(),SMe={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},xMe=DMe(SMe);pX.exports=xMe});var mX=C((Nst,CX)=>{var kMe=dX(),PMe=kc(),vMe=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,FMe="\\u0300-\\u036f",RMe="\\ufe20-\\ufe2f",LMe="\\u20d0-\\u20ff",NMe=FMe+RMe+LMe,MMe="["+NMe+"]",OMe=RegExp(MMe,"g");function TMe(t){return t=PMe(t),t&&t.replace(vMe,kMe).replace(OMe,"")}CX.exports=TMe});var EX=C((Mst,IX)=>{var KMe=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;function UMe(t){return t.match(KMe)||[]}IX.exports=UMe});var BX=C((Ost,yX)=>{var YMe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;function HMe(t){return YMe.test(t)}yX.exports=HMe});var YX=C((Tst,wX)=>{var QX="\\ud800-\\udfff",jMe="\\u0300-\\u036f",GMe="\\ufe20-\\ufe2f",qMe="\\u20d0-\\u20ff",JMe=jMe+GMe+qMe,bX="\\u2700-\\u27bf",DX="a-z\\xdf-\\xf6\\xf8-\\xff",WMe="\\xac\\xb1\\xd7\\xf7",zMe="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",VMe="\\u2000-\\u206f",XMe=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",SX="A-Z\\xc0-\\xd6\\xd8-\\xde",ZMe="\\ufe0e\\ufe0f",xX=WMe+zMe+VMe+XMe,kX="['\u2019]",PX="["+xX+"]",_Me="["+JMe+"]",vX="\\d+",$Me="["+bX+"]",FX="["+DX+"]",RX="[^"+QX+xX+vX+bX+DX+SX+"]",eOe="\\ud83c[\\udffb-\\udfff]",tOe="(?:"+_Me+"|"+eOe+")",rOe="[^"+QX+"]",LX="(?:\\ud83c[\\udde6-\\uddff]){2}",NX="[\\ud800-\\udbff][\\udc00-\\udfff]",mu="["+SX+"]",iOe="\\u200d",MX="(?:"+FX+"|"+RX+")",nOe="(?:"+mu+"|"+RX+")",OX="(?:"+kX+"(?:d|ll|m|re|s|t|ve))?",TX="(?:"+kX+"(?:D|LL|M|RE|S|T|VE))?",KX=tOe+"?",UX="["+ZMe+"]?",sOe="(?:"+iOe+"(?:"+[rOe,LX,NX].join("|")+")"+UX+KX+")*",oOe="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",aOe="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",AOe=UX+KX+sOe,lOe="(?:"+[$Me,LX,NX].join("|")+")"+AOe,cOe=RegExp([mu+"?"+FX+"+"+OX+"(?="+[PX,mu,"$"].join("|")+")",nOe+"+"+TX+"(?="+[PX,mu+MX,"$"].join("|")+")",mu+"?"+MX+"+"+OX,mu+"+"+TX,aOe,oOe,vX,lOe].join("|"),"g");function uOe(t){return t.match(cOe)||[]}wX.exports=uOe});var jX=C((Kst,HX)=>{var gOe=EX(),fOe=BX(),hOe=kc(),pOe=YX();function dOe(t,e,r){return t=hOe(t),e=r?void 0:e,e===void 0?fOe(t)?pOe(t):gOe(t):t.match(e)||[]}HX.exports=dOe});var vP=C((Ust,GX)=>{var COe=gX(),mOe=mX(),IOe=jX(),EOe="['\u2019]",yOe=RegExp(EOe,"g");function BOe(t){return function(e){return COe(IOe(mOe(e).replace(yOe,"")),t,"")}}GX.exports=BOe});var JX=C((Yst,qX)=>{var wOe=vP(),QOe=wOe(function(t,e,r){return t+(r?"_":"")+e.toLowerCase()});qX.exports=QOe});var zX=C((Hst,WX)=>{var bOe=SS(),DOe=vP(),SOe=DOe(function(t,e,r){return e=e.toLowerCase(),t+(r?bOe(e):e)});WX.exports=SOe});var XX=C((jst,VX)=>{var xOe=Au(),kOe=rP(),POe=mP();function vOe(t,e){var r={};return e=POe(e,3),kOe(t,function(i,n,s){xOe(r,e(i,n,s),i)}),r}VX.exports=vOe});var _X=C((Gst,FP)=>{FP.exports=function(t){return ZX(FOe(t),t)};FP.exports.array=ZX;function ZX(t,e){var r=t.length,i=new Array(r),n={},s=r,o=ROe(e),a=LOe(t);for(e.forEach(function(c){if(!a.has(c[0])||!a.has(c[1]))throw new Error("Unknown node. There is an unknown node in the supplied edges.")});s--;)n[s]||l(t[s],s,new Set);return i;function l(c,u,g){if(g.has(c)){var f;try{f=", node was:"+JSON.stringify(c)}catch(m){f=""}throw new Error("Cyclic dependency"+f)}if(!a.has(c))throw new Error("Found unknown node. Make sure to provided all involved nodes. Unknown node: "+JSON.stringify(c));if(!n[u]){n[u]=!0;var h=o.get(c)||new Set;if(h=Array.from(h),u=h.length){g.add(c);do{var p=h[--u];l(p,a.get(p),g)}while(u);g.delete(c)}i[--r]=c}}}function FOe(t){for(var e=new Set,r=0,i=t.length;r{"use strict";Object.defineProperty(RP,"__esModule",{value:!0});RP.default=NOe;var MOe=Ky(Kh()),OOe=Ky(_X()),TOe=zh(),KOe=Ky(rl()),UOe=Ky(cu());function Ky(t){return t&&t.__esModule?t:{default:t}}function NOe(t,e=[]){let r=[],i=[];function n(s,o){var a=(0,TOe.split)(s)[0];~i.indexOf(a)||i.push(a),~e.indexOf(`${o}-${a}`)||r.push([o,a])}for(let s in t)if((0,MOe.default)(t,s)){let o=t[s];~i.indexOf(s)||i.push(s),KOe.default.isRef(o)&&o.isSibling?n(o.path,s):(0,UOe.default)(o)&&"deps"in o&&o.deps.forEach(a=>n(a,s))}return OOe.default.array(i,r).reverse()}});var tZ=C(LP=>{"use strict";Object.defineProperty(LP,"__esModule",{value:!0});LP.default=YOe;function eZ(t,e){let r=Infinity;return t.some((i,n)=>{var s;if(((s=e.path)==null?void 0:s.indexOf(i))!==-1)return r=n,!0}),r}function YOe(t){return(e,r)=>eZ(t,e)-eZ(t,r)}});var AZ=C(ip=>{"use strict";Object.defineProperty(ip,"__esModule",{value:!0});ip.create=rZ;ip.default=void 0;var iZ=Es(Kh()),nZ=Es(JX()),HOe=Es(zX()),jOe=Es(XX()),GOe=Es(IP()),qOe=zh(),sZ=fo(),JOe=Es($X()),oZ=Es(tZ()),WOe=Es(Cy()),zOe=Es($A()),NP=Es(po());function Es(t){return t&&t.__esModule?t:{default:t}}function Iu(){return Iu=Object.assign||function(t){for(var e=1;eObject.prototype.toString.call(t)==="[object Object]";function VOe(t,e){let r=Object.keys(t.fields);return Object.keys(e).filter(i=>r.indexOf(i)===-1)}var XOe=(0,oZ.default)([]),Uy=class extends NP.default{constructor(e){super({type:"object"});this.fields=Object.create(null),this._sortErrors=XOe,this._nodes=[],this._excludedEdges=[],this.withMutation(()=>{this.transform(function(i){if(typeof i=="string")try{i=JSON.parse(i)}catch(n){i=null}return this.isType(i)?i:null}),e&&this.shape(e)})}_typeCheck(e){return aZ(e)||typeof e=="function"}_cast(e,r={}){var i;let n=super._cast(e,r);if(n===void 0)return this.getDefault();if(!this._typeCheck(n))return n;let s=this.fields,o=(i=r.stripUnknown)!=null?i:this.spec.noUnknown,a=this._nodes.concat(Object.keys(n).filter(g=>this._nodes.indexOf(g)===-1)),l={},c=Iu({},r,{parent:l,__validating:r.__validating||!1}),u=!1;for(let g of a){let f=s[g],h=(0,iZ.default)(n,g);if(f){let p,m=n[g];c.path=(r.path?`${r.path}.`:"")+g,f=f.resolve({value:m,context:r.context,parent:l});let I="spec"in f?f.spec:void 0,y=I==null?void 0:I.strict;if(I==null?void 0:I.strip){u=u||g in n;continue}p=!r.__validating||!y?f.cast(n[g],c):n[g],p!==void 0&&(l[g]=p)}else h&&!o&&(l[g]=n[g]);l[g]!==n[g]&&(u=!0)}return u?l:n}_validate(e,r={},i){let n=[],{sync:s,from:o=[],originalValue:a=e,abortEarly:l=this.spec.abortEarly,recursive:c=this.spec.recursive}=r;o=[{schema:this,value:a},...o],r.__validating=!0,r.originalValue=a,r.from=o,super._validate(e,r,(u,g)=>{if(u){if(!zOe.default.isError(u)||l)return void i(u,g);n.push(u)}if(!c||!aZ(g)){i(n[0]||null,g);return}a=a||g;let f=this._nodes.map(h=>(p,m)=>{let I=h.indexOf(".")===-1?(r.path?`${r.path}.`:"")+h:`${r.path||""}["${h}"]`,y=this.fields[h];if(y&&"validate"in y){y.validate(g[h],Iu({},r,{path:I,from:o,strict:!0,parent:g,originalValue:a[h]}),m);return}m(null)});(0,WOe.default)({sync:s,tests:f,value:g,errors:n,endEarly:l,sort:this._sortErrors,path:r.path},i)})}clone(e){let r=super.clone(e);return r.fields=Iu({},this.fields),r._nodes=this._nodes,r._excludedEdges=this._excludedEdges,r._sortErrors=this._sortErrors,r}concat(e){let r=super.concat(e),i=r.fields;for(let[n,s]of Object.entries(this.fields)){let o=i[n];o===void 0?i[n]=s:o instanceof NP.default&&s instanceof NP.default&&(i[n]=s.concat(o))}return r.withMutation(()=>r.shape(i))}getDefaultFromShape(){let e={};return this._nodes.forEach(r=>{let i=this.fields[r];e[r]="default"in i?i.getDefault():void 0}),e}_getDefault(){if("default"in this.spec)return super._getDefault();if(!!this._nodes.length)return this.getDefaultFromShape()}shape(e,r=[]){let i=this.clone(),n=Object.assign(i.fields,e);if(i.fields=n,i._sortErrors=(0,oZ.default)(Object.keys(n)),r.length){Array.isArray(r[0])||(r=[r]);let s=r.map(([o,a])=>`${o}-${a}`);i._excludedEdges=i._excludedEdges.concat(s)}return i._nodes=(0,JOe.default)(n,i._excludedEdges),i}pick(e){let r={};for(let i of e)this.fields[i]&&(r[i]=this.fields[i]);return this.clone().withMutation(i=>(i.fields={},i.shape(r)))}omit(e){let r=this.clone(),i=r.fields;r.fields={};for(let n of e)delete i[n];return r.withMutation(()=>r.shape(i))}from(e,r,i){let n=(0,qOe.getter)(e,!0);return this.transform(s=>{if(s==null)return s;let o=s;return(0,iZ.default)(s,e)&&(o=Iu({},s),i||delete o[e],o[r]=n(s)),o})}noUnknown(e=!0,r=sZ.object.noUnknown){typeof e=="string"&&(r=e,e=!0);let i=this.test({name:"noUnknown",exclusive:!0,message:r,test(n){if(n==null)return!0;let s=VOe(this.schema,n);return!e||s.length===0||this.createError({params:{unknown:s.join(", ")}})}});return i.spec.noUnknown=e,i}unknown(e=!0,r=sZ.object.noUnknown){return this.noUnknown(!e,r)}transformKeys(e){return this.transform(r=>r&&(0,jOe.default)(r,(i,n)=>e(n)))}camelCase(){return this.transformKeys(HOe.default)}snakeCase(){return this.transformKeys(nZ.default)}constantCase(){return this.transformKeys(e=>(0,nZ.default)(e).toUpperCase())}describe(){let e=super.describe();return e.fields=(0,GOe.default)(this.fields,r=>r.describe()),e}};ip.default=Uy;function rZ(t){return new Uy(t)}rZ.prototype=Uy.prototype});var cZ=C(np=>{"use strict";Object.defineProperty(np,"__esModule",{value:!0});np.create=lZ;np.default=void 0;var MP=Eu(Cu()),ZOe=Eu(cu()),_Oe=Eu(Th()),OP=fo(),$Oe=Eu(Cy()),eTe=Eu($A()),tTe=Eu(po());function Eu(t){return t&&t.__esModule?t:{default:t}}function Yy(){return Yy=Object.assign||function(t){for(var e=1;e{this.transform(function(r){if(typeof r=="string")try{r=JSON.parse(r)}catch(i){r=null}return this.isType(r)?r:null})})}_typeCheck(e){return Array.isArray(e)}get _subType(){return this.innerType}_cast(e,r){let i=super._cast(e,r);if(!this._typeCheck(i)||!this.innerType)return i;let n=!1,s=i.map((o,a)=>{let l=this.innerType.cast(o,Yy({},r,{path:`${r.path||""}[${a}]`}));return l!==o&&(n=!0),l});return n?s:i}_validate(e,r={},i){var n,s;let o=[],a=r.sync,l=r.path,c=this.innerType,u=(n=r.abortEarly)!=null?n:this.spec.abortEarly,g=(s=r.recursive)!=null?s:this.spec.recursive,f=r.originalValue!=null?r.originalValue:e;super._validate(e,r,(h,p)=>{if(h){if(!eTe.default.isError(h)||u)return void i(h,p);o.push(h)}if(!g||!c||!this._typeCheck(p)){i(o[0]||null,p);return}f=f||p;let m=new Array(p.length);for(let I=0;Ic.validate(y,x,L)}(0,$Oe.default)({sync:a,path:l,value:p,errors:o,endEarly:u,tests:m},i)})}clone(e){let r=super.clone(e);return r.innerType=this.innerType,r}concat(e){let r=super.concat(e);return r.innerType=this.innerType,e.innerType&&(r.innerType=r.innerType?r.innerType.concat(e.innerType):e.innerType),r}of(e){let r=this.clone();if(!(0,ZOe.default)(e))throw new TypeError("`array.of()` sub-schema must be a valid yup schema not: "+(0,_Oe.default)(e));return r.innerType=e,r}length(e,r=OP.array.length){return this.test({message:r,name:"length",exclusive:!0,params:{length:e},test(i){return(0,MP.default)(i)||i.length===this.resolve(e)}})}min(e,r){return r=r||OP.array.min,this.test({message:r,name:"min",exclusive:!0,params:{min:e},test(i){return(0,MP.default)(i)||i.length>=this.resolve(e)}})}max(e,r){return r=r||OP.array.max,this.test({message:r,name:"max",exclusive:!0,params:{max:e},test(i){return(0,MP.default)(i)||i.length<=this.resolve(e)}})}ensure(){return this.default(()=>[]).transform((e,r)=>this._typeCheck(e)?e:r==null?[]:[].concat(r))}compact(e){let r=e?(i,n,s)=>!e(i,n,s):i=>!!i;return this.transform(i=>i!=null?i.filter(r):i)}describe(){let e=super.describe();return this.innerType&&(e.innerType=this.innerType.describe()),e}nullable(e=!0){return super.nullable(e)}defined(){return super.defined()}required(e){return super.required(e)}};np.default=Hy;lZ.prototype=Hy.prototype});var uZ=C(sp=>{"use strict";Object.defineProperty(sp,"__esModule",{value:!0});sp.create=rTe;sp.default=void 0;var nTe=iTe(cu());function iTe(t){return t&&t.__esModule?t:{default:t}}function rTe(t){return new TP(t)}var TP=class{constructor(e){this.type="lazy",this.__isYupSchema__=!0,this._resolve=(r,i={})=>{let n=this.builder(r,i);if(!(0,nTe.default)(n))throw new TypeError("lazy() functions must return a valid schema");return n.resolve(i)},this.builder=e}resolve(e){return this._resolve(e.value,e)}cast(e,r){return this._resolve(e,r).cast(e,r)}validate(e,r,i){return this._resolve(e,r).validate(e,r,i)}validateSync(e,r){return this._resolve(e,r).validateSync(e,r)}validateAt(e,r,i){return this._resolve(r,i).validateAt(e,r,i)}validateSyncAt(e,r,i){return this._resolve(r,i).validateSyncAt(e,r,i)}describe(){return null}isValid(e,r){return this._resolve(e,r).isValid(e,r)}isValidSync(e,r){return this._resolve(e,r).isValidSync(e,r)}},sTe=TP;sp.default=sTe});var gZ=C(KP=>{"use strict";Object.defineProperty(KP,"__esModule",{value:!0});KP.default=oTe;var ATe=aTe(fo());function aTe(t){return t&&t.__esModule?t:{default:t}}function oTe(t){Object.keys(t).forEach(e=>{Object.keys(t[e]).forEach(r=>{ATe.default[e][r]=t[e][r]})})}});var YP=C(Gt=>{"use strict";Object.defineProperty(Gt,"__esModule",{value:!0});Gt.addMethod=lTe;Object.defineProperty(Gt,"MixedSchema",{enumerable:!0,get:function(){return fZ.default}});Object.defineProperty(Gt,"mixed",{enumerable:!0,get:function(){return fZ.create}});Object.defineProperty(Gt,"BooleanSchema",{enumerable:!0,get:function(){return UP.default}});Object.defineProperty(Gt,"bool",{enumerable:!0,get:function(){return UP.create}});Object.defineProperty(Gt,"boolean",{enumerable:!0,get:function(){return UP.create}});Object.defineProperty(Gt,"StringSchema",{enumerable:!0,get:function(){return hZ.default}});Object.defineProperty(Gt,"string",{enumerable:!0,get:function(){return hZ.create}});Object.defineProperty(Gt,"NumberSchema",{enumerable:!0,get:function(){return pZ.default}});Object.defineProperty(Gt,"number",{enumerable:!0,get:function(){return pZ.create}});Object.defineProperty(Gt,"DateSchema",{enumerable:!0,get:function(){return dZ.default}});Object.defineProperty(Gt,"date",{enumerable:!0,get:function(){return dZ.create}});Object.defineProperty(Gt,"ObjectSchema",{enumerable:!0,get:function(){return CZ.default}});Object.defineProperty(Gt,"object",{enumerable:!0,get:function(){return CZ.create}});Object.defineProperty(Gt,"ArraySchema",{enumerable:!0,get:function(){return mZ.default}});Object.defineProperty(Gt,"array",{enumerable:!0,get:function(){return mZ.create}});Object.defineProperty(Gt,"ref",{enumerable:!0,get:function(){return cTe.create}});Object.defineProperty(Gt,"lazy",{enumerable:!0,get:function(){return uTe.create}});Object.defineProperty(Gt,"ValidationError",{enumerable:!0,get:function(){return gTe.default}});Object.defineProperty(Gt,"reach",{enumerable:!0,get:function(){return fTe.default}});Object.defineProperty(Gt,"isSchema",{enumerable:!0,get:function(){return IZ.default}});Object.defineProperty(Gt,"setLocale",{enumerable:!0,get:function(){return hTe.default}});Object.defineProperty(Gt,"BaseSchema",{enumerable:!0,get:function(){return pTe.default}});var fZ=sl(V7()),UP=sl(eX()),hZ=sl(iX()),pZ=sl(oX()),dZ=sl(cX()),CZ=sl(AZ()),mZ=sl(cZ()),cTe=rl(),uTe=uZ(),gTe=op($A()),fTe=op(DP()),IZ=op(cu()),hTe=op(gZ()),pTe=op(po());function op(t){return t&&t.__esModule?t:{default:t}}function EZ(){if(typeof WeakMap!="function")return null;var t=new WeakMap;return EZ=function(){return t},t}function sl(t){if(t&&t.__esModule)return t;if(t===null||typeof t!="object"&&typeof t!="function")return{default:t};var e=EZ();if(e&&e.has(t))return e.get(t);var r={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)){var s=i?Object.getOwnPropertyDescriptor(t,n):null;s&&(s.get||s.set)?Object.defineProperty(r,n,s):r[n]=t[n]}return r.default=t,e&&e.set(t,r),r}function lTe(t,e,r){if(!t||!(0,IZ.default)(t.prototype))throw new TypeError("You must provide a yup schema constructor function");if(typeof e!="string")throw new TypeError("A Method name must be provided");if(typeof r!="function")throw new TypeError("Method function must be provided");t.prototype[e]=r}});var bZ=C((cot,Ap)=>{"use strict";var mTe=process.env.TERM_PROGRAM==="Hyper",ITe=process.platform==="win32",BZ=process.platform==="linux",HP={ballotDisabled:"\u2612",ballotOff:"\u2610",ballotOn:"\u2611",bullet:"\u2022",bulletWhite:"\u25E6",fullBlock:"\u2588",heart:"\u2764",identicalTo:"\u2261",line:"\u2500",mark:"\u203B",middot:"\xB7",minus:"\uFF0D",multiplication:"\xD7",obelus:"\xF7",pencilDownRight:"\u270E",pencilRight:"\u270F",pencilUpRight:"\u2710",percent:"%",pilcrow2:"\u2761",pilcrow:"\xB6",plusMinus:"\xB1",section:"\xA7",starsOff:"\u2606",starsOn:"\u2605",upDownArrow:"\u2195"},wZ=Object.assign({},HP,{check:"\u221A",cross:"\xD7",ellipsisLarge:"...",ellipsis:"...",info:"i",question:"?",questionSmall:"?",pointer:">",pointerSmall:"\xBB",radioOff:"( )",radioOn:"(*)",warning:"\u203C"}),QZ=Object.assign({},HP,{ballotCross:"\u2718",check:"\u2714",cross:"\u2716",ellipsisLarge:"\u22EF",ellipsis:"\u2026",info:"\u2139",question:"?",questionFull:"\uFF1F",questionSmall:"\uFE56",pointer:BZ?"\u25B8":"\u276F",pointerSmall:BZ?"\u2023":"\u203A",radioOff:"\u25EF",radioOn:"\u25C9",warning:"\u26A0"});Ap.exports=ITe&&!mTe?wZ:QZ;Reflect.defineProperty(Ap.exports,"common",{enumerable:!1,value:HP});Reflect.defineProperty(Ap.exports,"windows",{enumerable:!1,value:wZ});Reflect.defineProperty(Ap.exports,"other",{enumerable:!1,value:QZ})});var Hn=C((uot,jP)=>{"use strict";var ETe=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),yTe=/[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,DZ=()=>{let t={enabled:!0,visible:!0,styles:{},keys:{}};"FORCE_COLOR"in process.env&&(t.enabled=process.env.FORCE_COLOR!=="0");let e=s=>{let o=s.open=`[${s.codes[0]}m`,a=s.close=`[${s.codes[1]}m`,l=s.regex=new RegExp(`\\u001b\\[${s.codes[1]}m`,"g");return s.wrap=(c,u)=>{c.includes(a)&&(c=c.replace(l,a+o));let g=o+c+a;return u?g.replace(/\r*\n/g,`${a}$&${o}`):g},s},r=(s,o,a)=>typeof s=="function"?s(o):s.wrap(o,a),i=(s,o)=>{if(s===""||s==null)return"";if(t.enabled===!1)return s;if(t.visible===!1)return"";let a=""+s,l=a.includes(` -`),c=o.length;for(c>0&&o.includes("unstyle")&&(o=[...new Set(["unstyle",...o])].reverse());c-- >0;)a=r(t.styles[o[c]],a,l);return a},n=(s,o,a)=>{t.styles[s]=e({name:s,codes:o}),(t.keys[a]||(t.keys[a]=[])).push(s),Reflect.defineProperty(t,s,{configurable:!0,enumerable:!0,set(c){t.alias(s,c)},get(){let c=u=>i(u,c.stack);return Reflect.setPrototypeOf(c,t),c.stack=this.stack?this.stack.concat(s):[s],c}})};return n("reset",[0,0],"modifier"),n("bold",[1,22],"modifier"),n("dim",[2,22],"modifier"),n("italic",[3,23],"modifier"),n("underline",[4,24],"modifier"),n("inverse",[7,27],"modifier"),n("hidden",[8,28],"modifier"),n("strikethrough",[9,29],"modifier"),n("black",[30,39],"color"),n("red",[31,39],"color"),n("green",[32,39],"color"),n("yellow",[33,39],"color"),n("blue",[34,39],"color"),n("magenta",[35,39],"color"),n("cyan",[36,39],"color"),n("white",[37,39],"color"),n("gray",[90,39],"color"),n("grey",[90,39],"color"),n("bgBlack",[40,49],"bg"),n("bgRed",[41,49],"bg"),n("bgGreen",[42,49],"bg"),n("bgYellow",[43,49],"bg"),n("bgBlue",[44,49],"bg"),n("bgMagenta",[45,49],"bg"),n("bgCyan",[46,49],"bg"),n("bgWhite",[47,49],"bg"),n("blackBright",[90,39],"bright"),n("redBright",[91,39],"bright"),n("greenBright",[92,39],"bright"),n("yellowBright",[93,39],"bright"),n("blueBright",[94,39],"bright"),n("magentaBright",[95,39],"bright"),n("cyanBright",[96,39],"bright"),n("whiteBright",[97,39],"bright"),n("bgBlackBright",[100,49],"bgBright"),n("bgRedBright",[101,49],"bgBright"),n("bgGreenBright",[102,49],"bgBright"),n("bgYellowBright",[103,49],"bgBright"),n("bgBlueBright",[104,49],"bgBright"),n("bgMagentaBright",[105,49],"bgBright"),n("bgCyanBright",[106,49],"bgBright"),n("bgWhiteBright",[107,49],"bgBright"),t.ansiRegex=yTe,t.hasColor=t.hasAnsi=s=>(t.ansiRegex.lastIndex=0,typeof s=="string"&&s!==""&&t.ansiRegex.test(s)),t.alias=(s,o)=>{let a=typeof o=="string"?t[o]:o;if(typeof a!="function")throw new TypeError("Expected alias to be the name of an existing color (string) or a function");a.stack||(Reflect.defineProperty(a,"name",{value:s}),t.styles[s]=a,a.stack=[s]),Reflect.defineProperty(t,s,{configurable:!0,enumerable:!0,set(l){t.alias(s,l)},get(){let l=c=>i(c,l.stack);return Reflect.setPrototypeOf(l,t),l.stack=this.stack?this.stack.concat(a.stack):a.stack,l}})},t.theme=s=>{if(!ETe(s))throw new TypeError("Expected theme to be an object");for(let o of Object.keys(s))t.alias(o,s[o]);return t},t.alias("unstyle",s=>typeof s=="string"&&s!==""?(t.ansiRegex.lastIndex=0,s.replace(t.ansiRegex,"")):""),t.alias("noop",s=>s),t.none=t.clear=t.noop,t.stripColor=t.unstyle,t.symbols=bZ(),t.define=n,t};jP.exports=DZ();jP.exports.create=DZ});var $r=C(ht=>{"use strict";var BTe=Object.prototype.toString,Qn=Hn(),SZ=!1,GP=[],xZ={yellow:"blue",cyan:"red",green:"magenta",black:"white",blue:"yellow",red:"cyan",magenta:"green",white:"black"};ht.longest=(t,e)=>t.reduce((r,i)=>Math.max(r,e?i[e].length:i.length),0);ht.hasColor=t=>!!t&&Qn.hasColor(t);var Gy=ht.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);ht.nativeType=t=>BTe.call(t).slice(8,-1).toLowerCase().replace(/\s/g,"");ht.isAsyncFn=t=>ht.nativeType(t)==="asyncfunction";ht.isPrimitive=t=>t!=null&&typeof t!="object"&&typeof t!="function";ht.resolve=(t,e,...r)=>typeof e=="function"?e.call(t,...r):e;ht.scrollDown=(t=[])=>[...t.slice(1),t[0]];ht.scrollUp=(t=[])=>[t.pop(),...t];ht.reorder=(t=[])=>{let e=t.slice();return e.sort((r,i)=>r.index>i.index?1:r.index{let i=t.length,n=r===i?0:r<0?i-1:r,s=t[e];t[e]=t[n],t[n]=s};ht.width=(t,e=80)=>{let r=t&&t.columns?t.columns:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[0]),process.platform==="win32"?r-1:r};ht.height=(t,e=20)=>{let r=t&&t.rows?t.rows:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[1]),r};ht.wordWrap=(t,e={})=>{if(!t)return t;typeof e=="number"&&(e={width:e});let{indent:r="",newline:i=` -`+r,width:n=80}=e;n-=((i+r).match(/[^\S\n]/g)||[]).length;let o=`.{1,${n}}([\\s\\u200B]+|$)|[^\\s\\u200B]+?([\\s\\u200B]+|$)`,a=t.trim(),l=new RegExp(o,"g"),c=a.match(l)||[];return c=c.map(u=>u.replace(/\n$/,"")),e.padEnd&&(c=c.map(u=>u.padEnd(n," "))),e.padStart&&(c=c.map(u=>u.padStart(n," "))),r+c.join(i)};ht.unmute=t=>{let e=t.stack.find(i=>Qn.keys.color.includes(i));return e?Qn[e]:t.stack.find(i=>i.slice(2)==="bg")?Qn[e.slice(2)]:i=>i};ht.pascal=t=>t?t[0].toUpperCase()+t.slice(1):"";ht.inverse=t=>{if(!t||!t.stack)return t;let e=t.stack.find(i=>Qn.keys.color.includes(i));if(e){let i=Qn["bg"+ht.pascal(e)];return i?i.black:t}let r=t.stack.find(i=>i.slice(0,2)==="bg");return r?Qn[r.slice(2).toLowerCase()]||t:Qn.none};ht.complement=t=>{if(!t||!t.stack)return t;let e=t.stack.find(i=>Qn.keys.color.includes(i)),r=t.stack.find(i=>i.slice(0,2)==="bg");if(e&&!r)return Qn[xZ[e]||e];if(r){let i=r.slice(2).toLowerCase(),n=xZ[i];return n&&Qn["bg"+ht.pascal(n)]||t}return Qn.none};ht.meridiem=t=>{let e=t.getHours(),r=t.getMinutes(),i=e>=12?"pm":"am";e=e%12;let n=e===0?12:e,s=r<10?"0"+r:r;return n+":"+s+" "+i};ht.set=(t={},e="",r)=>e.split(".").reduce((i,n,s,o)=>{let a=o.length-1>s?i[n]||{}:r;return!ht.isObject(a)&&s{let i=t[e]==null?e.split(".").reduce((n,s)=>n&&n[s],t):t[e];return i==null?r:i};ht.mixin=(t,e)=>{if(!Gy(t))return e;if(!Gy(e))return t;for(let r of Object.keys(e)){let i=Object.getOwnPropertyDescriptor(e,r);if(i.hasOwnProperty("value"))if(t.hasOwnProperty(r)&&Gy(i.value)){let n=Object.getOwnPropertyDescriptor(t,r);Gy(n.value)?t[r]=ht.merge({},t[r],e[r]):Reflect.defineProperty(t,r,i)}else Reflect.defineProperty(t,r,i);else Reflect.defineProperty(t,r,i)}return t};ht.merge=(...t)=>{let e={};for(let r of t)ht.mixin(e,r);return e};ht.mixinEmitter=(t,e)=>{let r=e.constructor.prototype;for(let i of Object.keys(r)){let n=r[i];typeof n=="function"?ht.define(t,i,n.bind(e)):ht.define(t,i,n)}};ht.onExit=t=>{let e=(r,i)=>{SZ||(SZ=!0,GP.forEach(n=>n()),r===!0&&process.exit(128+i))};GP.length===0&&(process.once("SIGTERM",e.bind(null,!0,15)),process.once("SIGINT",e.bind(null,!0,2)),process.once("exit",e)),GP.push(t)};ht.define=(t,e,r)=>{Reflect.defineProperty(t,e,{value:r})};ht.defineExport=(t,e,r)=>{let i;Reflect.defineProperty(t,e,{enumerable:!0,configurable:!0,set(n){i=n},get(){return i?i():r()}})}});var kZ=C(Bu=>{"use strict";Bu.ctrl={a:"first",b:"backward",c:"cancel",d:"deleteForward",e:"last",f:"forward",g:"reset",i:"tab",k:"cutForward",l:"reset",n:"newItem",m:"cancel",j:"submit",p:"search",r:"remove",s:"save",u:"undo",w:"cutLeft",x:"toggleCursor",v:"paste"};Bu.shift={up:"shiftUp",down:"shiftDown",left:"shiftLeft",right:"shiftRight",tab:"prev"};Bu.fn={up:"pageUp",down:"pageDown",left:"pageLeft",right:"pageRight",delete:"deleteForward"};Bu.option={b:"backward",f:"forward",d:"cutRight",left:"cutLeft",up:"altUp",down:"altDown"};Bu.keys={pageup:"pageUp",pagedown:"pageDown",home:"home",end:"end",cancel:"cancel",delete:"deleteForward",backspace:"delete",down:"down",enter:"submit",escape:"cancel",left:"left",space:"space",number:"number",return:"submit",right:"right",tab:"next",up:"up"}});var FZ=C((hot,PZ)=>{"use strict";var vZ=require("readline"),wTe=kZ(),QTe=/^(?:\x1b)([a-zA-Z0-9])$/,bTe=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,DTe={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"};function STe(t){return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(t)}function xTe(t){return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(t)}var qy=(t="",e={})=>{let r,i=P({name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:t,raw:t},e);if(Buffer.isBuffer(t)?t[0]>127&&t[1]===void 0?(t[0]-=128,t=""+String(t)):t=String(t):t!==void 0&&typeof t!="string"?t=String(t):t||(t=i.sequence||""),i.sequence=i.sequence||t||i.name,t==="\r")i.raw=void 0,i.name="return";else if(t===` -`)i.name="enter";else if(t===" ")i.name="tab";else if(t==="\b"||t==="\x7F"||t==="\x7F"||t==="\b")i.name="backspace",i.meta=t.charAt(0)==="";else if(t===""||t==="")i.name="escape",i.meta=t.length===2;else if(t===" "||t===" ")i.name="space",i.meta=t.length===2;else if(t<="")i.name=String.fromCharCode(t.charCodeAt(0)+"a".charCodeAt(0)-1),i.ctrl=!0;else if(t.length===1&&t>="0"&&t<="9")i.name="number";else if(t.length===1&&t>="a"&&t<="z")i.name=t;else if(t.length===1&&t>="A"&&t<="Z")i.name=t.toLowerCase(),i.shift=!0;else if(r=QTe.exec(t))i.meta=!0,i.shift=/^[A-Z]$/.test(r[1]);else if(r=bTe.exec(t)){let n=[...t];n[0]===""&&n[1]===""&&(i.option=!0);let s=[r[1],r[2],r[4],r[6]].filter(Boolean).join(""),o=(r[3]||r[5]||1)-1;i.ctrl=!!(o&4),i.meta=!!(o&10),i.shift=!!(o&1),i.code=s,i.name=DTe[s],i.shift=STe(s)||i.shift,i.ctrl=xTe(s)||i.ctrl}return i};qy.listen=(t={},e)=>{let{stdin:r}=t;if(!r||r!==process.stdin&&!r.isTTY)throw new Error("Invalid stream passed");let i=vZ.createInterface({terminal:!0,input:r});vZ.emitKeypressEvents(r,i);let n=(a,l)=>e(a,qy(a,l),i),s=r.isRaw;return r.isTTY&&r.setRawMode(!0),r.on("keypress",n),i.resume(),()=>{r.isTTY&&r.setRawMode(s),r.removeListener("keypress",n),i.pause(),i.close()}};qy.action=(t,e,r)=>{let i=P(P({},wTe),r);return e.ctrl?(e.action=i.ctrl[e.name],e):e.option&&i.option?(e.action=i.option[e.name],e):e.shift?(e.action=i.shift[e.name],e):(e.action=i.keys[e.name],e)};PZ.exports=qy});var LZ=C((pot,RZ)=>{"use strict";RZ.exports=t=>{t.timers=t.timers||{};let e=t.options.timers;if(!!e)for(let r of Object.keys(e)){let i=e[r];typeof i=="number"&&(i={interval:i}),kTe(t,r,i)}};function kTe(t,e,r={}){let i=t.timers[e]={name:e,start:Date.now(),ms:0,tick:0},n=r.interval||120;i.frames=r.frames||[],i.loading=!0;let s=setInterval(()=>{i.ms=Date.now()-i.start,i.tick++,t.render()},n);return i.stop=()=>{i.loading=!1,clearInterval(s)},Reflect.defineProperty(i,"interval",{value:s}),t.once("close",()=>i.stop()),i.stop}});var OZ=C((dot,NZ)=>{"use strict";var{define:PTe,width:vTe}=$r(),MZ=class{constructor(e){let r=e.options;PTe(this,"_prompt",e),this.type=e.type,this.name=e.name,this.message="",this.header="",this.footer="",this.error="",this.hint="",this.input="",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt="",this.buffer="",this.width=vTe(r.stdout||process.stdout),Object.assign(this,r),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e=P({},this);return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let r=this._color||e[this.status];return typeof r=="function"?r:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading=="boolean"?this._loading:this.loadingChoices?"choices":!1}get status(){return this.cancelled?"cancelled":this.submitted?"submitted":"pending"}};NZ.exports=MZ});var KZ=C((Cot,TZ)=>{"use strict";var qP=$r(),Ur=Hn(),JP={default:Ur.noop,noop:Ur.noop,set inverse(t){this._inverse=t},get inverse(){return this._inverse||qP.inverse(this.primary)},set complement(t){this._complement=t},get complement(){return this._complement||qP.complement(this.primary)},primary:Ur.cyan,success:Ur.green,danger:Ur.magenta,strong:Ur.bold,warning:Ur.yellow,muted:Ur.dim,disabled:Ur.gray,dark:Ur.dim.gray,underline:Ur.underline,set info(t){this._info=t},get info(){return this._info||this.primary},set em(t){this._em=t},get em(){return this._em||this.primary.underline},set heading(t){this._heading=t},get heading(){return this._heading||this.muted.underline},set pending(t){this._pending=t},get pending(){return this._pending||this.primary},set submitted(t){this._submitted=t},get submitted(){return this._submitted||this.success},set cancelled(t){this._cancelled=t},get cancelled(){return this._cancelled||this.danger},set typing(t){this._typing=t},get typing(){return this._typing||this.dim},set placeholder(t){this._placeholder=t},get placeholder(){return this._placeholder||this.primary.dim},set highlight(t){this._highlight=t},get highlight(){return this._highlight||this.inverse}};JP.merge=(t={})=>{t.styles&&typeof t.styles.enabled=="boolean"&&(Ur.enabled=t.styles.enabled),t.styles&&typeof t.styles.visible=="boolean"&&(Ur.visible=t.styles.visible);let e=qP.merge({},JP,t.styles);delete e.merge;for(let r of Object.keys(Ur))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>Ur[r]});for(let r of Object.keys(Ur.styles))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>Ur[r]});return e};TZ.exports=JP});var YZ=C((mot,UZ)=>{"use strict";var WP=process.platform==="win32",mo=Hn(),FTe=$r(),zP=V(P({},mo.symbols),{upDownDoubleArrow:"\u21D5",upDownDoubleArrow2:"\u2B0D",upDownArrow:"\u2195",asterisk:"*",asterism:"\u2042",bulletWhite:"\u25E6",electricArrow:"\u2301",ellipsisLarge:"\u22EF",ellipsisSmall:"\u2026",fullBlock:"\u2588",identicalTo:"\u2261",indicator:mo.symbols.check,leftAngle:"\u2039",mark:"\u203B",minus:"\u2212",multiplication:"\xD7",obelus:"\xF7",percent:"%",pilcrow:"\xB6",pilcrow2:"\u2761",pencilUpRight:"\u2710",pencilDownRight:"\u270E",pencilRight:"\u270F",plus:"+",plusMinus:"\xB1",pointRight:"\u261E",rightAngle:"\u203A",section:"\xA7",hexagon:{off:"\u2B21",on:"\u2B22",disabled:"\u2B22"},ballot:{on:"\u2611",off:"\u2610",disabled:"\u2612"},stars:{on:"\u2605",off:"\u2606",disabled:"\u2606"},folder:{on:"\u25BC",off:"\u25B6",disabled:"\u25B6"},prefix:{pending:mo.symbols.question,submitted:mo.symbols.check,cancelled:mo.symbols.cross},separator:{pending:mo.symbols.pointerSmall,submitted:mo.symbols.middot,cancelled:mo.symbols.middot},radio:{off:WP?"( )":"\u25EF",on:WP?"(*)":"\u25C9",disabled:WP?"(|)":"\u24BE"},numbers:["\u24EA","\u2460","\u2461","\u2462","\u2463","\u2464","\u2465","\u2466","\u2467","\u2468","\u2469","\u246A","\u246B","\u246C","\u246D","\u246E","\u246F","\u2470","\u2471","\u2472","\u2473","\u3251","\u3252","\u3253","\u3254","\u3255","\u3256","\u3257","\u3258","\u3259","\u325A","\u325B","\u325C","\u325D","\u325E","\u325F","\u32B1","\u32B2","\u32B3","\u32B4","\u32B5","\u32B6","\u32B7","\u32B8","\u32B9","\u32BA","\u32BB","\u32BC","\u32BD","\u32BE","\u32BF"]});zP.merge=t=>{let e=FTe.merge({},mo.symbols,zP,t.symbols);return delete e.merge,e};UZ.exports=zP});var jZ=C((Iot,HZ)=>{"use strict";var RTe=KZ(),LTe=YZ(),NTe=$r();HZ.exports=t=>{t.options=NTe.merge({},t.options.theme,t.options),t.symbols=LTe.merge(t.options),t.styles=RTe.merge(t.options)}});var zZ=C((GZ,qZ)=>{"use strict";var JZ=process.env.TERM_PROGRAM==="Apple_Terminal",MTe=Hn(),VP=$r(),jn=qZ.exports=GZ,Zt="[",WZ="\x07",XP=!1,Ia=jn.code={bell:WZ,beep:WZ,beginning:`${Zt}G`,down:`${Zt}J`,esc:Zt,getPosition:`${Zt}6n`,hide:`${Zt}?25l`,line:`${Zt}2K`,lineEnd:`${Zt}K`,lineStart:`${Zt}1K`,restorePosition:Zt+(JZ?"8":"u"),savePosition:Zt+(JZ?"7":"s"),screen:`${Zt}2J`,show:`${Zt}?25h`,up:`${Zt}1J`},ol=jn.cursor={get hidden(){return XP},hide(){return XP=!0,Ia.hide},show(){return XP=!1,Ia.show},forward:(t=1)=>`${Zt}${t}C`,backward:(t=1)=>`${Zt}${t}D`,nextLine:(t=1)=>`${Zt}E`.repeat(t),prevLine:(t=1)=>`${Zt}F`.repeat(t),up:(t=1)=>t?`${Zt}${t}A`:"",down:(t=1)=>t?`${Zt}${t}B`:"",right:(t=1)=>t?`${Zt}${t}C`:"",left:(t=1)=>t?`${Zt}${t}D`:"",to(t,e){return e?`${Zt}${e+1};${t+1}H`:`${Zt}${t+1}G`},move(t=0,e=0){let r="";return r+=t<0?ol.left(-t):t>0?ol.right(t):"",r+=e<0?ol.up(-e):e>0?ol.down(e):"",r},restore(t={}){let{after:e,cursor:r,initial:i,input:n,prompt:s,size:o,value:a}=t;if(i=VP.isPrimitive(i)?String(i):"",n=VP.isPrimitive(n)?String(n):"",a=VP.isPrimitive(a)?String(a):"",o){let l=jn.cursor.up(o)+jn.cursor.to(s.length),c=n.length-r;return c>0&&(l+=jn.cursor.left(c)),l}if(a||e){let l=!n&&!!i?-i.length:-n.length+r;return e&&(l-=e.length),n===""&&i&&!s.includes(i)&&(l+=i.length),jn.cursor.move(l)}}},ZP=jn.erase={screen:Ia.screen,up:Ia.up,down:Ia.down,line:Ia.line,lineEnd:Ia.lineEnd,lineStart:Ia.lineStart,lines(t){let e="";for(let r=0;r{if(!e)return ZP.line+ol.to(0);let r=s=>[...MTe.unstyle(s)].length,i=t.split(/\r?\n/),n=0;for(let s of i)n+=1+Math.floor(Math.max(r(s)-1,0)/e);return(ZP.line+ol.prevLine()).repeat(n-1)+ZP.line+ol.to(0)}});var wu=C((Eot,VZ)=>{"use strict";var OTe=require("events"),XZ=Hn(),_P=FZ(),TTe=LZ(),KTe=OZ(),UTe=jZ(),Ri=$r(),al=zZ(),Jy=class extends OTe{constructor(e={}){super();this.name=e.name,this.type=e.type,this.options=e,UTe(this),TTe(this),this.state=new KTe(this),this.initial=[e.initial,e.default].find(r=>r!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=HTe(this.options.margin),this.setMaxListeners(0),YTe(this)}async keypress(e,r={}){this.keypressed=!0;let i=_P.action(e,_P(e,r),this.options.actions);this.state.keypress=i,this.emit("keypress",e,i),this.emit("state",this.state.clone());let n=this.options[i.action]||this[i.action]||this.dispatch;if(typeof n=="function")return await n.call(this,e,i);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit("alert"):this.stdout.write(al.code.beep)}cursorHide(){this.stdout.write(al.cursor.hide()),Ri.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(al.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let r=this.state.buffer;this.state.buffer="",!(!r&&!e||this.options.show===!1)&&this.stdout.write(al.cursor.down(e)+al.clear(r,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:r,rest:i}=this.sections(),{cursor:n,initial:s="",input:o="",value:a=""}=this,l=this.state.size=i.length,c={after:r,cursor:n,initial:s,input:o,prompt:e,size:l,value:a},u=al.cursor.restore(c);u&&this.stdout.write(u)}sections(){let{buffer:e,input:r,prompt:i}=this.state;i=XZ.unstyle(i);let n=XZ.unstyle(e),s=n.indexOf(i),o=n.slice(0,s),l=n.slice(s).split(` -`),c=l[0],u=l[l.length-1],f=(i+(r?" "+r:"")).length,h=fe.call(this,this.value),this.result=()=>i.call(this,this.value),typeof r.initial=="function"&&(this.initial=await r.initial.call(this,this)),typeof r.onRun=="function"&&await r.onRun.call(this,this),typeof r.onSubmit=="function"){let n=r.onSubmit.bind(this),s=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await n(this.name,this.value,this),s())}await this.start(),await this.render()}render(){throw new Error("expected prompt to have a custom render method")}run(){return new Promise(async(e,r)=>{if(this.once("submit",e),this.once("cancel",r),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit("run")})}async element(e,r,i){let{options:n,state:s,symbols:o,timers:a}=this,l=a&&a[e];s.timer=l;let c=n[e]||s[e]||o[e],u=r&&r[e]!=null?r[e]:await c;if(u==="")return u;let g=await this.resolve(u,s,r,i);return!g&&r&&r[e]?this.resolve(c,s,r,i):g}async prefix(){let e=await this.element("prefix")||this.symbols,r=this.timers&&this.timers.prefix,i=this.state;return i.timer=r,Ri.isObject(e)&&(e=e[i.status]||e.pending),Ri.hasColor(e)?e:(this.styles[i.status]||this.styles.pending)(e)}async message(){let e=await this.element("message");return Ri.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element("separator")||this.symbols,r=this.timers&&this.timers.separator,i=this.state;i.timer=r;let n=e[i.status]||e.pending||i.separator,s=await this.resolve(n,i);return Ri.isObject(s)&&(s=s[i.status]||s.pending),Ri.hasColor(s)?s:this.styles.muted(s)}async pointer(e,r){let i=await this.element("pointer",e,r);if(typeof i=="string"&&Ri.hasColor(i))return i;if(i){let n=this.styles,s=this.index===r,o=s?n.primary:c=>c,a=await this.resolve(i[s?"on":"off"]||i,this.state),l=Ri.hasColor(a)?a:o(a);return s?l:" ".repeat(a.length)}}async indicator(e,r){let i=await this.element("indicator",e,r);if(typeof i=="string"&&Ri.hasColor(i))return i;if(i){let n=this.styles,s=e.enabled===!0,o=s?n.success:n.dark,a=i[s?"on":"off"]||i;return Ri.hasColor(a)?a:o(a)}return""}body(){return null}footer(){if(this.state.status==="pending")return this.element("footer")}header(){if(this.state.status==="pending")return this.element("header")}async hint(){if(this.state.status==="pending"&&!this.isValue(this.state.input)){let e=await this.element("hint");return Ri.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?"":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==""}resolve(e,...r){return Ri.resolve(this,e,...r)}get base(){return Jy.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||Ri.height(this.stdout,25)}get width(){return this.options.columns||Ri.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:r}=this.state,i=[r,e].find(this.isValue.bind(this));return this.isValue(i)?i:this.initial}static get prompt(){return e=>new this(e).run()}};function YTe(t){let e=n=>t[n]===void 0||typeof t[n]=="function",r=["actions","choices","initial","margin","roles","styles","symbols","theme","timers","value"],i=["body","footer","error","header","hint","indicator","message","prefix","separator","skip"];for(let n of Object.keys(t.options)){if(r.includes(n)||/^on[A-Z]/.test(n))continue;let s=t.options[n];typeof s=="function"&&e(n)?i.includes(n)||(t[n]=s.bind(t)):typeof t[n]!="function"&&(t[n]=s)}}function HTe(t){typeof t=="number"&&(t=[t,t,t,t]);let e=[].concat(t||[]),r=n=>n%2==0?` -`:" ",i=[];for(let n=0;n<4;n++){let s=r(n);e[n]?i.push(s.repeat(e[n])):i.push("")}return i}VZ.exports=Jy});var $Z=C((yot,ZZ)=>{"use strict";var jTe=$r(),_Z={default(t,e){return e},checkbox(t,e){throw new Error("checkbox role is not implemented yet")},editable(t,e){throw new Error("editable role is not implemented yet")},expandable(t,e){throw new Error("expandable role is not implemented yet")},heading(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||"",e},input(t,e){throw new Error("input role is not implemented yet")},option(t,e){return _Z.default(t,e)},radio(t,e){throw new Error("radio role is not implemented yet")},separator(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||t.symbols.line.repeat(5),e},spacer(t,e){return e}};ZZ.exports=(t,e={})=>{let r=jTe.merge({},_Z,e.roles);return r[t]||r.default}});var lp=C((Bot,e_)=>{"use strict";var GTe=Hn(),qTe=wu(),JTe=$Z(),Wy=$r(),{reorder:$P,scrollUp:WTe,scrollDown:zTe,isObject:t_,swap:VTe}=Wy,r_=class extends qTe{constructor(e){super(e);this.cursorHide(),this.maxSelected=e.maxSelected||Infinity,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=""}async initialize(){typeof this.options.initial=="function"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:r,autofocus:i,suggest:n}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(s=>s.enabled=!1),typeof n!="function"&&this.selectable.length===0)throw new Error("At least one choice must be selectable");t_(r)&&(r=Object.keys(r)),Array.isArray(r)?(i!=null&&(this.index=this.findIndex(i)),r.forEach(s=>this.enable(this.find(s))),await this.render()):(i!=null&&(r=i),typeof r=="string"&&(r=this.findIndex(r)),typeof r=="number"&&r>-1&&(this.index=Math.max(0,Math.min(r,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,r){this.state.loadingChoices=!0;let i=[],n=0,s=async(o,a)=>{typeof o=="function"&&(o=await o.call(this)),o instanceof Promise&&(o=await o);for(let l=0;l(this.state.loadingChoices=!1,o))}async toChoice(e,r,i){if(typeof e=="function"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e=="string"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let n=e.value;if(e=JTe(e.role,this.options)(this,e),typeof e.disabled=="string"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint="(disabled)"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||"",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input="",e.index=r,e.cursor=0,Wy.define(e,"parent",i),e.level=i?i.level+1:1,e.indent==null&&(e.indent=i?i.indent+" ":e.indent||""),e.path=i?i.path+"."+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,GTe.unstyle(e.message).length));let o=P({},e);return e.reset=(a=o.input,l=o.value)=>{for(let c of Object.keys(o))e[c]=o[c];e.input=a,e.value=l},n==null&&typeof e.initial=="function"&&(e.input=await e.initial.call(this,this.state,e,r)),e}async onChoice(e,r){this.emit("choice",e,r,this),typeof e.onChoice=="function"&&await e.onChoice.call(this,this.state,e,r)}async addChoice(e,r,i){let n=await this.toChoice(e,r,i);return this.choices.push(n),this.index=this.choices.length-1,this.limit=this.choices.length,n}async newItem(e,r,i){let n=P({name:"New choice name?",editable:!0,newChoice:!0},e),s=await this.addChoice(n,r,i);return s.updateChoice=()=>{delete s.newChoice,s.name=s.message=s.input,s.input="",s.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?" ".repeat(e.level-1):"":e.indent}dispatch(e,r){if(this.multiple&&this[r.name])return this[r.name]();this.alert()}focus(e,r){return typeof r!="boolean"&&(r=e.enabled),r&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=r&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelectedr.enabled);return this.choices.forEach(r=>r.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(r=>!!r.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,r){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof r!="boolean"&&(r=!e.enabled),e.enabled=r,e.choices&&e.choices.forEach(n=>this.toggle(n,r));let i=e.parent;for(;i;){let n=i.choices.filter(s=>this.isDisabled(s));i.enabled=n.every(s=>s.enabled===!0),i=i.parent}return i_(this,this.choices),this.emit("toggle",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let r=i=>{let n=Number(i);if(n>this.choices.length-1)return this.alert();let s=this.focused,o=this.choices.find(a=>n===a.index);if(!o.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(o)===-1){let a=$P(this.choices),l=a.indexOf(o);if(s.index>l){let c=a.slice(l,l+this.limit),u=a.filter(g=>!c.includes(g));this.choices=c.concat(u)}else{let c=l-this.limit+1;this.choices=a.slice(c).concat(a.slice(0,c))}}return this.index=this.choices.indexOf(o),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(i=>{let n=this.choices.length,s=this.num,o=(a=!1,l)=>{clearTimeout(this.numberTimeout),a&&(l=r(s)),this.num="",i(l)};if(s==="0"||s.length===1&&Number(s+"0")>n)return o(!0);if(Number(s)>n)return o(!1,this.alert());this.numberTimeout=setTimeout(()=>o(!0),this.delay)})}home(){return this.choices=$P(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,r=$P(this.choices);return this.choices=r.slice(e).concat(r.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,r=this.visible.length,i=this.index;return this.options.scroll===!1&&i===0?this.alert():e>r&&i===0?this.scrollUp():(this.index=(i-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,r=this.visible.length,i=this.index;return this.options.scroll===!1&&i===r-1?this.alert():e>r&&i===r-1?this.scrollDown():(this.index=(i+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=WTe(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=zTe(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){VTe(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&["disabled","collapsed","hidden","completing","readonly"].some(i=>e[i]===!0)?!0:e&&e.role==="heading"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(r=>this.isEnabled(r));if(e.choices){let r=e.choices.filter(i=>!this.isDisabled(i));return e.enabled&&r.every(i=>this.isEnabled(i))}return e.enabled&&!this.isDisabled(e)}isChoice(e,r){return e.name===r||e.index===Number(r)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(r=>this.isChoice(e,r)):this.isChoice(e,this.initial)}map(e=[],r="value"){return[].concat(e||[]).reduce((i,n)=>(i[n]=this.find(n,r),i),{})}filter(e,r){let i=(a,l)=>[a.name,l].includes(e),n=typeof e=="function"?e:i,o=(this.options.multiple?this.state._choices:this.choices).filter(n);return r?o.map(a=>a[r]):o}find(e,r){if(t_(e))return r?e[r]:e;let i=(o,a)=>[o.name,a].includes(e),n=typeof e=="function"?e:i,s=this.choices.find(n);if(s)return r?s[r]:s}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(o=>o.newChoice))return this.alert();let{reorder:r,sort:i}=this.options,n=this.multiple===!0,s=this.selected;return s===void 0?this.alert():(Array.isArray(s)&&r!==!1&&i!==!0&&(s=Wy.reorder(s)),this.value=n?s.map(o=>o.name):s.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let r of e)this.state._choices.some(i=>i.name===r.name)||this.state._choices.push(r);if(!this._initial&&this.options.initial){this._initial=!0;let r=this.initial;if(typeof r=="string"||typeof r=="number"){let i=this.find(r);i&&(this.initial=i.index,this.focus(i,!0))}}}get choices(){return i_(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:r,choices:i}=this,n=e.limit||this._limit||r.limit||i.length;return Math.min(n,this.height)}set value(e){super.value=e}get value(){return typeof super.value!="string"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function i_(t,e){if(e instanceof Promise)return e;if(typeof e=="function"){if(Wy.isAsyncFn(e))return e;e=e.call(t,t)}for(let r of e){if(Array.isArray(r.choices)){let i=r.choices.filter(n=>!t.isDisabled(n));r.enabled=i.every(n=>n.enabled===!0)}t.isDisabled(r)===!0&&delete r.enabled}return e}e_.exports=r_});var Ea=C((wot,n_)=>{"use strict";var XTe=lp(),ev=$r(),s_=class extends XTe{constructor(e){super(e);this.emptyError=this.options.emptyError||"No items were selected"}async dispatch(e,r){if(this.multiple)return this[r.name]?await this[r.name](e,r):await super.dispatch(e,r);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,r){return!this.multiple||this.options.pointer?super.pointer(e,r):""}indicator(e,r){return this.multiple?super.indicator(e,r):""}choiceMessage(e,r){let i=this.resolve(e.message,this.state,e,r);return e.role==="heading"&&!ev.hasColor(i)&&(i=this.styles.strong(i)),this.resolve(i,this.state,e,r)}choiceSeparator(){return":"}async renderChoice(e,r){await this.onChoice(e,r);let i=this.index===r,n=await this.pointer(e,r),s=await this.indicator(e,r)+(e.pad||""),o=await this.resolve(e.hint,this.state,e,r);o&&!ev.hasColor(o)&&(o=this.styles.muted(o));let a=this.indent(e),l=await this.choiceMessage(e,r),c=()=>[this.margin[3],a+n+s,l,this.margin[1],o].filter(Boolean).join(" ");return e.role==="heading"?c():e.disabled?(ev.hasColor(l)||(l=this.styles.disabled(l)),c()):(i&&(l=this.styles.em(l)),c())}async renderChoices(){if(this.state.loading==="choices")return this.styles.warning("Loading choices");if(this.state.submitted)return"";let e=this.visible.map(async(s,o)=>await this.renderChoice(s,o)),r=await Promise.all(e);r.length||r.push(this.styles.danger("No matching choices"));let i=this.margin[0]+r.join(` -`),n;return this.options.choicesHeader&&(n=await this.resolve(this.options.choicesHeader,this.state)),[n,i].filter(Boolean).join(` -`)}format(){return!this.state.submitted||this.state.cancelled?"":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(", "):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:r}=this.state,i="",n=await this.header(),s=await this.prefix(),o=await this.separator(),a=await this.message();this.options.promptLine!==!1&&(i=[s,a,o,""].join(" "),this.state.prompt=i);let l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();l&&(i+=l),c&&!i.includes(c)&&(i+=" "+c),e&&!l&&!u.trim()&&this.multiple&&this.emptyError!=null&&(i+=this.styles.danger(this.emptyError)),this.clear(r),this.write([n,i,u,g].filter(Boolean).join(` -`)),this.write(this.margin[2]),this.restore()}};n_.exports=s_});var A_=C((Qot,o_)=>{"use strict";var ZTe=Ea(),_Te=(t,e)=>{let r=t.toLowerCase();return i=>{let s=i.toLowerCase().indexOf(r),o=e(i.slice(s,s+r.length));return s>=0?i.slice(0,s)+o+i.slice(s+r.length):i}},a_=class extends ZTe{constructor(e){super(e);this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:r,input:i}=this.state;return this.input=i.slice(0,r)+e+i.slice(r),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:r}=this.state;return r?(this.input=r.slice(0,e-1)+r.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:r}=this.state;return r[e]===void 0?this.alert():(this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,r=this.state._choices){if(typeof this.options.suggest=="function")return this.options.suggest.call(this,e,r);let i=e.toLowerCase();return r.filter(n=>n.message.toLowerCase().includes(i))}pointer(){return""}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(", ");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!=="pending")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,r=_Te(this.input,e),i=this.choices;this.choices=i.map(n=>V(P({},n),{message:r(n.message)})),await super.render(),this.choices=i}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};o_.exports=a_});var rv=C((bot,l_)=>{"use strict";var tv=$r();l_.exports=(t,e={})=>{t.cursorHide();let{input:r="",initial:i="",pos:n,showCursor:s=!0,color:o}=e,a=o||t.styles.placeholder,l=tv.inverse(t.styles.primary),c=m=>l(t.styles.black(m)),u=r,g=" ",f=c(g);if(t.blink&&t.blink.off===!0&&(c=m=>m,f=""),s&&n===0&&i===""&&r==="")return c(g);if(s&&n===0&&(r===i||r===""))return c(i[0])+a(i.slice(1));i=tv.isPrimitive(i)?`${i}`:"",r=tv.isPrimitive(r)?`${r}`:"";let h=i&&i.startsWith(r)&&i!==r,p=h?c(i[r.length]):f;if(n!==r.length&&s===!0&&(u=r.slice(0,n)+c(r[n])+r.slice(n+1),p=""),s===!1&&(p=""),h){let m=t.styles.unstyle(u+p);return u+p+a(i.slice(m.length))}return u+p}});var zy=C((Dot,c_)=>{"use strict";var $Te=Hn(),eKe=Ea(),tKe=rv(),u_=class extends eKe{constructor(e){super(V(P({},e),{multiple:!0}));this.type="form",this.initial=this.options.initial,this.align=[this.options.align,"right"].find(r=>r!=null),this.emptyError="",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(r=>r.reset&&r.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let r=this.focused;if(!r)return this.alert();let{cursor:i,input:n}=r;return r.value=r.input=n.slice(0,i)+e+n.slice(i),r.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:r,input:i}=e;return e.value=e.input=i.slice(0,r-1)+i.slice(r),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:r,input:i}=e;if(i[r]===void 0)return this.alert();let n=`${i}`.slice(0,r)+`${i}`.slice(r+1);return e.value=e.input=n,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,r){return this.dispatch(e,r)}number(e,r){return this.dispatch(e,r)}next(){let e=this.focused;if(!e)return this.alert();let{initial:r,input:i}=e;return r&&r.startsWith(i)&&i!==r?(e.value=e.input=r,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input="",e.cursor=0,this.render()):this.alert()}separator(){return""}format(e){return this.state.submitted?"":super.format(e)}pointer(){return""}indicator(e){return e.input?"\u29BF":"\u2299"}async choiceSeparator(e,r){let i=await this.resolve(e.separator,this.state,e,r)||":";return i?" "+this.styles.disabled(i):""}async renderChoice(e,r){await this.onChoice(e,r);let{state:i,styles:n}=this,{cursor:s,initial:o="",name:a,hint:l,input:c=""}=e,{muted:u,submitted:g,primary:f,danger:h}=n,p=l,m=this.index===r,I=e.validate||(()=>!0),y=await this.choiceSeparator(e,r),B=e.message;this.align==="right"&&(B=B.padStart(this.longest+1," ")),this.align==="left"&&(B=B.padEnd(this.longest+1," "));let x=this.values[a]=c||o,F=c?"success":"dark";await I.call(e,x,this.state)!==!0&&(F="danger");let T=n[F](await this.indicator(e,r))+(e.pad||""),v=this.indent(e),q=()=>[v,T,B+y,c,p].filter(Boolean).join(" ");if(i.submitted)return B=$Te.unstyle(B),c=g(c),p="",q();if(e.format)c=await e.format.call(this,c,e,r);else{let oe=this.styles.muted;c=tKe(this,{input:c,initial:o,pos:s,showCursor:m,color:oe})}return this.isValue(c)||(c=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[a]=await e.result.call(this,x,e,r)),m&&(B=f(B)),e.error?c+=(c?" ":"")+h(e.error.trim()):e.hint&&(c+=(c?" ":"")+u(e.hint.trim())),q()}async submit(){return this.value=this.values,super.base.submit.call(this)}};c_.exports=u_});var iv=C((Sot,g_)=>{"use strict";var rKe=zy(),iKe=()=>{throw new Error("expected prompt to have a custom authenticate method")},f_=(t=iKe)=>{class e extends rKe{constructor(i){super(i)}async submit(){this.value=await t.call(this,this.values,this.state),super.base.submit.call(this)}static create(i){return f_(i)}}return e};g_.exports=f_()});var d_=C((xot,h_)=>{"use strict";var nKe=iv();function sKe(t,e){return t.username===this.options.username&&t.password===this.options.password}var p_=(t=sKe)=>{let e=[{name:"username",message:"username"},{name:"password",message:"password",format(i){return this.options.showPassword?i:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(i.length))}}];class r extends nKe.create(t){constructor(n){super(V(P({},n),{choices:e}))}static create(n){return p_(n)}}return r};h_.exports=p_()});var Vy=C((kot,C_)=>{"use strict";var oKe=wu(),{isPrimitive:aKe,hasColor:AKe}=$r(),m_=class extends oKe{constructor(e){super(e);this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:r,state:i}=this;return i.submitted?r.success(e):r.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return aKe(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status==="pending"){let e=await this.element("hint");return AKe(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:r}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=this.styles.muted(this.default),a=[i,s,o,n].filter(Boolean).join(" ");this.state.prompt=a;let l=await this.header(),c=this.value=this.cast(e),u=await this.format(c),g=await this.error()||await this.hint(),f=await this.footer();g&&!a.includes(g)&&(u+=" "+g),a+=" "+u,this.clear(r),this.write([l,a,f].filter(Boolean).join(` -`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};C_.exports=m_});var y_=C((Pot,I_)=>{"use strict";var lKe=Vy(),E_=class extends lKe{constructor(e){super(e);this.default=this.options.default||(this.initial?"(Y/n)":"(y/N)")}};I_.exports=E_});var Q_=C((vot,B_)=>{"use strict";var cKe=Ea(),uKe=zy(),Qu=uKe.prototype,w_=class extends cKe{constructor(e){super(V(P({},e),{multiple:!0}));this.align=[this.options.align,"left"].find(r=>r!=null),this.emptyError="",this.values={}}dispatch(e,r){let i=this.focused,n=i.parent||{};return!i.editable&&!n.editable&&(e==="a"||e==="i")?super[e]():Qu.dispatch.call(this,e,r)}append(e,r){return Qu.append.call(this,e,r)}delete(e,r){return Qu.delete.call(this,e,r)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?Qu.next.call(this):super.next()}prev(){return this.focused.editable?Qu.prev.call(this):super.prev()}async indicator(e,r){let i=e.indicator||"",n=e.editable?i:super.indicator(e,r);return await this.resolve(n,this.state,e,r)||""}indent(e){return e.role==="heading"?"":e.editable?" ":" "}async renderChoice(e,r){return e.indent="",e.editable?Qu.renderChoice.call(this,e,r):super.renderChoice(e,r)}error(){return""}footer(){return this.state.error}async validate(){let e=!0;for(let r of this.choices){if(typeof r.validate!="function"||r.role==="heading")continue;let i=r.parent?this.value[r.parent.name]:this.value;if(r.editable?i=r.value===r.name?r.initial||"":r.value:this.isDisabled(r)||(i=r.enabled===!0),e=await r.validate(i,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e=="string"?e:"Invalid Input"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let r=e.parent?this.value[e.parent.name]:this.value;if(e.role==="heading"){this.value[e.name]={};continue}e.editable?r[e.name]=e.value===e.name?e.initial||"":e.value:this.isDisabled(e)||(r[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};B_.exports=w_});var Al=C((Fot,b_)=>{"use strict";var gKe=wu(),fKe=rv(),{isPrimitive:hKe}=$r(),D_=class extends gKe{constructor(e){super(e);this.initial=hKe(this.initial)?String(this.initial):"",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,r={}){let i=this.state.prevKeypress;return this.state.prevKeypress=r,this.options.multiline===!0&&r.name==="return"&&(!i||i.name!=="return")?this.append(` -`,r):super.keypress(e,r)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value="",this.cursor=0,this.render()}dispatch(e,r){if(!e||r.ctrl||r.code)return this.alert();this.append(e)}append(e){let{cursor:r,input:i}=this.state;this.input=`${i}`.slice(0,r)+e+`${i}`.slice(r),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:r}=this.state;if(e<=0)return this.alert();this.input=`${r}`.slice(0,e-1)+`${r}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:r}=this.state;if(r[e]===void 0)return this.alert();this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let r=this.input.slice(0,e),i=this.input.slice(e),n=r.split(" ");this.state.clipboard.push(n.pop()),this.input=n.join(" "),this.cursor=this.input.length,this.input+=i,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):"";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let r=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||r):fKe(this,{input:e,initial:r,pos:this.cursor})}async render(){let e=this.state.size,r=await this.prefix(),i=await this.separator(),n=await this.message(),s=[r,n,i].filter(Boolean).join(" ");this.state.prompt=s;let o=await this.header(),a=await this.format(),l=await this.error()||await this.hint(),c=await this.footer();l&&!a.includes(l)&&(a+=" "+l),s+=" "+a,this.clear(e),this.write([o,s,c].filter(Boolean).join(` -`)),this.restore()}};b_.exports=D_});var x_=C((Rot,S_)=>{"use strict";var pKe=t=>t.filter((e,r)=>t.lastIndexOf(e)===r),Xy=t=>pKe(t).filter(Boolean);S_.exports=(t,e={},r="")=>{let{past:i=[],present:n=""}=e,s,o;switch(t){case"prev":case"undo":return s=i.slice(0,i.length-1),o=i[i.length-1]||"",{past:Xy([r,...s]),present:o};case"next":case"redo":return s=i.slice(1),o=i[0]||"",{past:Xy([...s,r]),present:o};case"save":return{past:Xy([...i,r]),present:""};case"remove":return o=Xy(i.filter(a=>a!==r)),n="",o.length&&(n=o.pop()),{past:o,present:n};default:throw new Error(`Invalid action: "${t}"`)}}});var nv=C((Lot,k_)=>{"use strict";var dKe=Al(),P_=x_(),v_=class extends dKe{constructor(e){super(e);let r=this.options.history;if(r&&r.store){let i=r.values||this.initial;this.autosave=!!r.autosave,this.store=r.store,this.data=this.store.get("values")||{past:[],present:i},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=P_(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion("prev")}altDown(){return this.completion("next")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=P_("save",this.data,this.input),this.store.set("values",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};k_.exports=v_});var L_=C((Not,F_)=>{"use strict";var CKe=Al(),R_=class extends CKe{format(){return""}};F_.exports=R_});var O_=C((Mot,N_)=>{"use strict";var mKe=Al(),M_=class extends mKe{constructor(e={}){super(e);this.sep=this.options.separator||/, */,this.initial=e.initial||""}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:r=>r;return this.list.map(e).join(", ")}async submit(e){let r=this.state.error||await this.validate(this.list,this.state);return r!==!0?(this.state.error=r,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};N_.exports=M_});var U_=C((Oot,T_)=>{"use strict";var IKe=Ea(),K_=class extends IKe{constructor(e){super(V(P({},e),{multiple:!0}))}};T_.exports=K_});var sv=C((Tot,Y_)=>{"use strict";var EKe=Al(),H_=class extends EKe{constructor(e={}){super(P({style:"number"},e));this.min=this.isValue(e.min)?this.toNumber(e.min):-Infinity,this.max=this.isValue(e.max)?this.toNumber(e.max):Infinity,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:"",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e==="."&&this.input.includes(".")?this.alert("invalid number"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let r=e||this.minor,i=this.toNumber(this.input);return i>this.max+r?this.alert():(this.input=`${i+r}`,this.render())}down(e){let r=e||this.minor,i=this.toNumber(this.input);return ithis.isValue(r));return this.value=this.toNumber(e||0),super.submit()}};Y_.exports=H_});var G_=C((Kot,j_)=>{j_.exports=sv()});var W_=C((Uot,q_)=>{"use strict";var yKe=Al(),J_=class extends yKe{constructor(e){super(e);this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):""}};q_.exports=J_});var Z_=C((Yot,z_)=>{"use strict";var BKe=Hn(),wKe=lp(),V_=$r(),X_=class extends wKe{constructor(e={}){super(e);this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||"left"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||` - `;let r=e.startNumber||1;typeof this.scale=="number"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((i,n)=>({name:n+r})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let r of this.choices){e=Math.max(e,r.message.length),r.scaleIndex=r.initial||2,r.scale=[];for(let i=0;i=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return""}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.index)).join(", "):""}pointer(){return""}renderScaleKey(){if(this.scaleKey===!1||this.state.submitted)return"";let e=this.scale.map(i=>` ${i.name} - ${i.message}`);return["",...e].map(i=>this.styles.muted(i)).join(` -`)}renderScaleHeading(e){let r=this.scale.map(l=>l.name);typeof this.options.renderScaleHeading=="function"&&(r=this.options.renderScaleHeading.call(this,e));let i=this.scaleLength-r.join("").length,n=Math.round(i/(r.length-1)),o=r.map(l=>this.styles.strong(l)).join(" ".repeat(n)),a=" ".repeat(this.widths[0]);return this.margin[3]+a+this.margin[1]+o}scaleIndicator(e,r,i){if(typeof this.options.scaleIndicator=="function")return this.options.scaleIndicator.call(this,e,r,i);let n=e.scaleIndex===r.index;return r.disabled?this.styles.hint(this.symbols.radio.disabled):n?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,r){let i=e.scale.map(s=>this.scaleIndicator(e,s,r)),n=this.term==="Hyper"?"":" ";return i.join(n+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,r){await this.onChoice(e,r);let i=this.index===r,n=await this.pointer(e,r),s=await e.hint;s&&!V_.hasColor(s)&&(s=this.styles.muted(s));let o=p=>this.margin[3]+p.replace(/\s+$/,"").padEnd(this.widths[0]," "),a=this.newline,l=this.indent(e),c=await this.resolve(e.message,this.state,e,r),u=await this.renderScale(e,r),g=this.margin[1]+this.margin[3];this.scaleLength=BKe.unstyle(u).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-g.length);let h=V_.wordWrap(c,{width:this.widths[0],newline:a}).split(` -`).map(p=>o(p)+this.margin[1]);return i&&(u=this.styles.info(u),h=h.map(p=>this.styles.info(p))),h[0]+=u,this.linebreak&&h.push(""),[l+n,h.join(` -`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return"";this.tableize();let e=this.visible.map(async(n,s)=>await this.renderChoice(n,s)),r=await Promise.all(e),i=await this.renderScaleHeading();return this.margin[0]+[i,...r.map(n=>n.join(" "))].join(` -`)}async render(){let{submitted:e,size:r}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o="";this.options.promptLine!==!1&&(o=[i,s,n,""].join(" "),this.state.prompt=o);let a=await this.header(),l=await this.format(),c=await this.renderScaleKey(),u=await this.error()||await this.hint(),g=await this.renderChoices(),f=await this.footer(),h=this.emptyError;l&&(o+=l),u&&!o.includes(u)&&(o+=" "+u),e&&!l&&!g.trim()&&this.multiple&&h!=null&&(o+=this.styles.danger(h)),this.clear(r),this.write([a,o,c,g,f].filter(Boolean).join(` -`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};z_.exports=X_});var t$=C((Hot,__)=>{"use strict";var $_=Hn(),QKe=(t="")=>typeof t=="string"?t.replace(/^['"]|['"]$/g,""):"",e$=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=QKe(e.initial||this.field.initial||""),this.message=e.message||this.name,this.cursor=0,this.input="",this.lines=[]}},bKe=async(t={},e={},r=i=>i)=>{let i=new Set,n=t.fields||[],s=t.template,o=[],a=[],l=[],c=1;typeof s=="function"&&(s=await s());let u=-1,g=()=>s[++u],f=()=>s[u+1],h=p=>{p.line=c,o.push(p)};for(h({type:"bos",value:""});uF.name===y.key);y.field=n.find(F=>F.name===y.key),x||(x=new e$(y),a.push(x)),x.lines.push(y.line-1);continue}let m=o[o.length-1];m.type==="text"&&m.line===c?m.value+=p:h({type:"text",value:p})}return h({type:"eos",value:""}),{input:s,tabstops:o,unique:i,keys:l,items:a}};__.exports=async t=>{let e=t.options,r=new Set(e.required===!0?[]:e.required||[]),i=P(P({},e.values),e.initial),{tabstops:n,items:s,keys:o}=await bKe(e,i),a=ov("result",t,e),l=ov("format",t,e),c=ov("validate",t,e,!0),u=t.isValue.bind(t);return async(g={},f=!1)=>{let h=0;g.required=r,g.items=s,g.keys=o,g.output="";let p=async(B,x,F,L)=>{let T=await c(B,x,F,L);return T===!1?"Invalid field "+F.name:T};for(let B of n){let x=B.value,F=B.key;if(B.type!=="template"){x&&(g.output+=x);continue}if(B.type==="template"){let L=s.find(U=>U.name===F);e.required===!0&&g.required.add(L.name);let T=[L.input,g.values[L.value],L.value,x].find(u),q=(L.field||{}).message||B.inner;if(f){let U=await p(g.values[F],g,L,h);if(U&&typeof U=="string"||U===!1){g.invalid.set(F,U);continue}g.invalid.delete(F);let A=await a(g.values[F],g,L,h);g.output+=$_.unstyle(A);continue}L.placeholder=!1;let oe=x;x=await l(x,g,L,h),T!==x?(g.values[F]=T,x=t.styles.typing(T),g.missing.delete(q)):(g.values[F]=void 0,T=`<${q}>`,x=t.styles.primary(T),L.placeholder=!0,g.required.has(F)&&g.missing.add(q)),g.missing.has(q)&&g.validating&&(x=t.styles.warning(T)),g.invalid.has(F)&&g.validating&&(x=t.styles.danger(T)),h===g.index&&(oe!==x?x=t.styles.underline(x):x=t.styles.heading($_.unstyle(x))),h++}x&&(g.output+=x)}let m=g.output.split(` -`).map(B=>" "+B),I=s.length,y=0;for(let B of s)g.invalid.has(B.name)&&B.lines.forEach(x=>{m[x][0]===" "&&(m[x]=g.styles.danger(g.symbols.bullet)+m[x].slice(1))}),t.isValue(g.values[B.name])&&y++;return g.completed=(y/I*100).toFixed(0),g.output=m.join(` -`),g.output}};function ov(t,e,r,i){return(n,s,o,a)=>typeof o.field[t]=="function"?o.field[t].call(e,n,s,o,a):[i,n].find(l=>e.isValue(l))}});var n$=C((jot,r$)=>{"use strict";var DKe=Hn(),SKe=t$(),xKe=wu(),i$=class extends xKe{constructor(e){super(e);this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await SKe(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let r=this.getItem();this.cursor+=e,r.cursor+=e}dispatch(e,r){if(!r.code&&!r.ctrl&&e!=null&&this.getItem()){this.append(e,r);return}this.alert()}append(e,r){let i=this.getItem(),n=i.input.slice(0,this.cursor),s=i.input.slice(this.cursor);this.input=i.input=`${n}${e}${s}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let r=e.input.slice(this.cursor),i=e.input.slice(0,this.cursor-1);this.input=e.input=`${i}${r}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let r=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(r=this.styles.danger),r(`${this.state.completed}% completed`)}async render(){let{index:e,keys:r=[],submitted:i,size:n}=this.state,s=[this.options.newline,` -`].find(B=>B!=null),o=await this.prefix(),a=await this.separator(),l=await this.message(),c=[o,l,a].filter(Boolean).join(" ");this.state.prompt=c;let u=await this.header(),g=await this.error()||"",f=await this.hint()||"",h=i?"":await this.interpolate(this.state),p=this.state.key=r[e]||"",m=await this.format(p),I=await this.footer();m&&(c+=" "+m),f&&!m&&this.state.completed===0&&(c+=" "+f),this.clear(n);let y=[u,c,h,I,g.trim()];this.write(y.filter(Boolean).join(s)),this.restore()}getItem(e){let{items:r,keys:i,index:n}=this.state,s=r.find(o=>o.name===i[n]);return s&&s.input!=null&&(this.input=s.input,this.cursor=s.cursor),s}async submit(){typeof this.interpolate!="function"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:r,output:i,values:n}=this.state;if(e.size){let a="";for(let[l,c]of e)a+=`Invalid ${l}: ${c} -`;return this.state.error=a,super.submit()}if(r.size)return this.state.error="Required: "+[...r.keys()].join(", "),super.submit();let o=DKe.unstyle(i).split(` -`).map(a=>a.slice(1)).join(` -`);return this.value={values:n,result:o},super.submit()}};r$.exports=i$});var a$=C((Got,s$)=>{"use strict";var kKe="(Use + to sort)",PKe=Ea(),o$=class extends PKe{constructor(e){super(V(P({},e),{reorder:!1,sort:!0,multiple:!0}));this.state.hint=[this.options.hint,kKe].find(this.isValue.bind(this))}indicator(){return""}async renderChoice(e,r){let i=await super.renderChoice(e,r),n=this.symbols.identicalTo+" ",s=this.index===r&&this.sorting?this.styles.muted(n):" ";return this.options.drag===!1&&(s=""),this.options.numbered===!0?s+`${r+1} - `+i:s+i}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};s$.exports=o$});var c$=C((qot,A$)=>{"use strict";var vKe=lp(),l$=class extends vKe{constructor(e={}){super(e);if(this.emptyError=e.emptyError||"No items were selected",this.term=process.env.TERM_PROGRAM,!this.options.header){let r=["","4 - Strongly Agree","3 - Agree","2 - Neutral","1 - Disagree","0 - Strongly Disagree",""];r=r.map(i=>this.styles.muted(i)),this.state.header=r.join(` - `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let r=await super.toChoices(...e);for(let i of r)i.scale=FKe(5,this.options),i.scaleIdx=2;return r}dispatch(){this.alert()}space(){let e=this.focused,r=e.scale[e.scaleIdx],i=r.selected;return e.scale.forEach(n=>n.selected=!1),r.selected=!i,this.render()}indicator(){return""}pointer(){return""}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return" "}async renderChoice(e,r){await this.onChoice(e,r);let i=this.index===r,n=this.term==="Hyper",s=n?9:8,o=n?"":" ",a=this.symbols.line.repeat(s),l=" ".repeat(s+(n?0:1)),c=x=>(x?this.styles.success("\u25C9"):"\u25EF")+o,u=r+1+".",g=i?this.styles.heading:this.styles.noop,f=await this.resolve(e.message,this.state,e,r),h=this.indent(e),p=h+e.scale.map((x,F)=>c(F===e.scaleIdx)).join(a),m=x=>x===e.scaleIdx?g(x):x,I=h+e.scale.map((x,F)=>m(F)).join(l),y=()=>[u,f].filter(Boolean).join(" "),B=()=>[y(),p,I," "].filter(Boolean).join(` -`);return i&&(p=this.styles.cyan(p),I=this.styles.cyan(I)),B()}async renderChoices(){if(this.state.submitted)return"";let e=this.visible.map(async(i,n)=>await this.renderChoice(i,n)),r=await Promise.all(e);return r.length||r.push(this.styles.danger("No matching choices")),r.join(` -`)}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.scaleIdx)).join(", "):""}async render(){let{submitted:e,size:r}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=[i,s,n].filter(Boolean).join(" ");this.state.prompt=o;let a=await this.header(),l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();(l||!c)&&(o+=" "+l),c&&!o.includes(c)&&(o+=" "+c),e&&!l&&!u&&this.multiple&&this.type!=="form"&&(o+=this.styles.danger(this.emptyError)),this.clear(r),this.write([o,a,u,g].filter(Boolean).join(` -`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function FKe(t,e={}){if(Array.isArray(e.scale))return e.scale.map(i=>P({},i));let r=[];for(let i=1;i{u$.exports=nv()});var p$=C((Wot,f$)=>{"use strict";var RKe=Vy(),h$=class extends RKe{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||"no",this.enabled=this.options.enabled||"yes",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e="",r){switch(e.toLowerCase()){case" ":return this.toggle();case"1":case"y":case"t":return this.enable();case"0":case"n":case"f":return this.disable();default:return this.alert()}}format(){let e=i=>this.styles.primary.underline(i);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(" / "))}async render(){let{size:e}=this.state,r=await this.header(),i=await this.prefix(),n=await this.separator(),s=await this.message(),o=await this.format(),a=await this.error()||await this.hint(),l=await this.footer(),c=[i,s,n,o].join(" ");this.state.prompt=c,a&&!c.includes(a)&&(c+=" "+a),this.clear(e),this.write([r,c,l].filter(Boolean).join(` -`)),this.write(this.margin[2]),this.restore()}};f$.exports=h$});var m$=C((zot,d$)=>{"use strict";var LKe=Ea(),C$=class extends LKe{constructor(e){super(e);if(typeof this.options.correctChoice!="number"||this.options.correctChoice<0)throw new Error("Please specify the index of the correct answer from the list of choices")}async toChoices(e,r){let i=await super.toChoices(e,r);if(i.length<2)throw new Error("Please give at least two choices to the user");if(this.options.correctChoice>i.length)throw new Error("Please specify the index of the correct answer from the list of choices");return i}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};d$.exports=C$});var E$=C(av=>{"use strict";var I$=$r(),wr=(t,e)=>{I$.defineExport(av,t,e),I$.defineExport(av,t.toLowerCase(),e)};wr("AutoComplete",()=>A_());wr("BasicAuth",()=>d_());wr("Confirm",()=>y_());wr("Editable",()=>Q_());wr("Form",()=>zy());wr("Input",()=>nv());wr("Invisible",()=>L_());wr("List",()=>O_());wr("MultiSelect",()=>U_());wr("Numeral",()=>G_());wr("Password",()=>W_());wr("Scale",()=>Z_());wr("Select",()=>Ea());wr("Snippet",()=>n$());wr("Sort",()=>a$());wr("Survey",()=>c$());wr("Text",()=>g$());wr("Toggle",()=>p$());wr("Quiz",()=>m$())});var B$=C((Xot,y$)=>{y$.exports={ArrayPrompt:lp(),AuthPrompt:iv(),BooleanPrompt:Vy(),NumberPrompt:sv(),StringPrompt:Al()}});var up=C((Zot,w$)=>{"use strict";var Q$=require("assert"),Av=require("events"),ya=$r(),ys=class extends Av{constructor(e,r){super();this.options=ya.merge({},e),this.answers=P({},r)}register(e,r){if(ya.isObject(e)){for(let n of Object.keys(e))this.register(n,e[n]);return this}Q$.equal(typeof r,"function","expected a function");let i=e.toLowerCase();return r.prototype instanceof this.Prompt?this.prompts[i]=r:this.prompts[i]=r(this.Prompt,this),this}async prompt(e=[]){for(let r of[].concat(e))try{typeof r=="function"&&(r=await r.call(this)),await this.ask(ya.merge({},this.options,r))}catch(i){return Promise.reject(i)}return this.answers}async ask(e){typeof e=="function"&&(e=await e.call(this));let r=ya.merge({},this.options,e),{type:i,name:n}=e,{set:s,get:o}=ya;if(typeof i=="function"&&(i=await i.call(this,e,this.answers)),!i)return this.answers[n];Q$(this.prompts[i],`Prompt "${i}" is not registered`);let a=new this.prompts[i](r),l=o(this.answers,n);a.state.answers=this.answers,a.enquirer=this,n&&a.on("submit",u=>{this.emit("answer",n,u,a),s(this.answers,n,u)});let c=a.emit.bind(a);return a.emit=(...u)=>(this.emit.call(this,...u),c(...u)),this.emit("prompt",a,this),r.autofill&&l!=null?(a.value=a.input=l,r.autofill==="show"&&await a.submit()):l=a.value=await a.run(),l}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||wu()}static get prompts(){return E$()}static get types(){return B$()}static get prompt(){let e=(r,...i)=>{let n=new this(...i),s=n.emit.bind(n);return n.emit=(...o)=>(e.emit(...o),s(...o)),n.prompt(r)};return ya.mixinEmitter(e,new Av),e}};ya.mixinEmitter(ys,new Av);var lv=ys.prompts;for(let t of Object.keys(lv)){let e=t.toLowerCase(),r=i=>new lv[t](i).run();ys.prompt[e]=r,ys[e]=r,ys[t]||Reflect.defineProperty(ys,t,{get:()=>lv[t]})}var cp=t=>{ya.defineExport(ys,t,()=>ys.types[t])};cp("ArrayPrompt");cp("AuthPrompt");cp("BooleanPrompt");cp("NumberPrompt");cp("StringPrompt");w$.exports=ys});var N$=C((Uat,L$)=>{function TKe(t,e){for(var r=-1,i=t==null?0:t.length;++r{var KKe=oy(),UKe=Au();function YKe(t,e,r,i){var n=!r;r||(r={});for(var s=-1,o=e.length;++s{var HKe=bu(),jKe=fu();function GKe(t,e){return t&&HKe(e,jKe(e),t)}O$.exports=GKe});var U$=C((jat,K$)=>{function qKe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}K$.exports=qKe});var H$=C((Gat,Y$)=>{var JKe=Yn(),WKe=yy(),zKe=U$(),VKe=Object.prototype,XKe=VKe.hasOwnProperty;function ZKe(t){if(!JKe(t))return zKe(t);var e=WKe(t),r=[];for(var i in t)i=="constructor"&&(e||!XKe.call(t,i))||r.push(i);return r}Y$.exports=ZKe});var Du=C((qat,j$)=>{var _Ke=eP(),$Ke=H$(),e1e=qh();function t1e(t){return e1e(t)?_Ke(t,!0):$Ke(t)}j$.exports=t1e});var q$=C((Jat,G$)=>{var r1e=bu(),i1e=Du();function n1e(t,e){return t&&r1e(e,i1e(e),t)}G$.exports=n1e});var pv=C((mp,Su)=>{var s1e=Tn(),J$=typeof mp=="object"&&mp&&!mp.nodeType&&mp,W$=J$&&typeof Su=="object"&&Su&&!Su.nodeType&&Su,o1e=W$&&W$.exports===J$,z$=o1e?s1e.Buffer:void 0,V$=z$?z$.allocUnsafe:void 0;function a1e(t,e){if(e)return t.slice();var r=t.length,i=V$?V$(r):new t.constructor(r);return t.copy(i),i}Su.exports=a1e});var dv=C((Wat,X$)=>{function A1e(t,e){var r=-1,i=t.length;for(e||(e=Array(i));++r{var l1e=bu(),c1e=wy();function u1e(t,e){return l1e(t,c1e(t),e)}Z$.exports=u1e});var Zy=C((Vat,$$)=>{var g1e=tP(),f1e=g1e(Object.getPrototypeOf,Object);$$.exports=f1e});var Cv=C((Xat,eee)=>{var h1e=Ay(),p1e=Zy(),d1e=wy(),C1e=aP(),m1e=Object.getOwnPropertySymbols,I1e=m1e?function(t){for(var e=[];t;)h1e(e,d1e(t)),t=p1e(t);return e}:C1e;eee.exports=I1e});var ree=C((Zat,tee)=>{var E1e=bu(),y1e=Cv();function B1e(t,e){return E1e(t,y1e(t),e)}tee.exports=B1e});var nee=C((_at,iee)=>{var w1e=oP(),Q1e=Cv(),b1e=Du();function D1e(t){return w1e(t,b1e,Q1e)}iee.exports=D1e});var oee=C(($at,see)=>{var S1e=Object.prototype,x1e=S1e.hasOwnProperty;function k1e(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&x1e.call(t,"index")&&(r.index=t.index,r.input=t.input),r}see.exports=k1e});var _y=C((eAt,aee)=>{var Aee=nP();function P1e(t){var e=new t.constructor(t.byteLength);return new Aee(e).set(new Aee(t)),e}aee.exports=P1e});var cee=C((tAt,lee)=>{var v1e=_y();function F1e(t,e){var r=e?v1e(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}lee.exports=F1e});var gee=C((rAt,uee)=>{var R1e=/\w*$/;function L1e(t){var e=new t.constructor(t.source,R1e.exec(t));return e.lastIndex=t.lastIndex,e}uee.exports=L1e});var Cee=C((iAt,fee)=>{var hee=LA(),pee=hee?hee.prototype:void 0,dee=pee?pee.valueOf:void 0;function N1e(t){return dee?Object(dee.call(t)):{}}fee.exports=N1e});var mv=C((nAt,mee)=>{var M1e=_y();function O1e(t,e){var r=e?M1e(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}mee.exports=O1e});var Eee=C((sAt,Iee)=>{var T1e=_y(),K1e=cee(),U1e=gee(),Y1e=Cee(),H1e=mv(),j1e="[object Boolean]",G1e="[object Date]",q1e="[object Map]",J1e="[object Number]",W1e="[object RegExp]",z1e="[object Set]",V1e="[object String]",X1e="[object Symbol]",Z1e="[object ArrayBuffer]",_1e="[object DataView]",$1e="[object Float32Array]",eUe="[object Float64Array]",tUe="[object Int8Array]",rUe="[object Int16Array]",iUe="[object Int32Array]",nUe="[object Uint8Array]",sUe="[object Uint8ClampedArray]",oUe="[object Uint16Array]",aUe="[object Uint32Array]";function AUe(t,e,r){var i=t.constructor;switch(e){case Z1e:return T1e(t);case j1e:case G1e:return new i(+t);case _1e:return K1e(t,r);case $1e:case eUe:case tUe:case rUe:case iUe:case nUe:case sUe:case oUe:case aUe:return H1e(t,r);case q1e:return new i;case J1e:case V1e:return new i(t);case W1e:return U1e(t);case z1e:return new i;case X1e:return Y1e(t)}}Iee.exports=AUe});var wee=C((oAt,yee)=>{var lUe=Yn(),Bee=Object.create,cUe=function(){function t(){}return function(e){if(!lUe(e))return{};if(Bee)return Bee(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();yee.exports=cUe});var Iv=C((aAt,Qee)=>{var uUe=wee(),gUe=Zy(),fUe=yy();function hUe(t){return typeof t.constructor=="function"&&!fUe(t)?uUe(gUe(t)):{}}Qee.exports=hUe});var Dee=C((AAt,bee)=>{var pUe=Wh(),dUe=ls(),CUe="[object Map]";function mUe(t){return dUe(t)&&pUe(t)==CUe}bee.exports=mUe});var Pee=C((lAt,See)=>{var IUe=Dee(),EUe=my(),xee=Iy(),kee=xee&&xee.isMap,yUe=kee?EUe(kee):IUe;See.exports=yUe});var Fee=C((cAt,vee)=>{var BUe=Wh(),wUe=ls(),QUe="[object Set]";function bUe(t){return wUe(t)&&BUe(t)==QUe}vee.exports=bUe});var Mee=C((uAt,Ree)=>{var DUe=Fee(),SUe=my(),Lee=Iy(),Nee=Lee&&Lee.isSet,xUe=Nee?SUe(Nee):DUe;Ree.exports=xUe});var Yee=C((gAt,Oee)=>{var kUe=Jh(),PUe=N$(),vUe=oy(),FUe=T$(),RUe=q$(),LUe=pv(),NUe=dv(),MUe=_$(),OUe=ree(),TUe=AP(),KUe=nee(),UUe=Wh(),YUe=oee(),HUe=Eee(),jUe=Iv(),GUe=dn(),qUe=Hh(),JUe=Pee(),WUe=Yn(),zUe=Mee(),VUe=fu(),XUe=Du(),ZUe=1,_Ue=2,$Ue=4,Tee="[object Arguments]",e2e="[object Array]",t2e="[object Boolean]",r2e="[object Date]",i2e="[object Error]",Kee="[object Function]",n2e="[object GeneratorFunction]",s2e="[object Map]",o2e="[object Number]",Uee="[object Object]",a2e="[object RegExp]",A2e="[object Set]",l2e="[object String]",c2e="[object Symbol]",u2e="[object WeakMap]",g2e="[object ArrayBuffer]",f2e="[object DataView]",h2e="[object Float32Array]",p2e="[object Float64Array]",d2e="[object Int8Array]",C2e="[object Int16Array]",m2e="[object Int32Array]",I2e="[object Uint8Array]",E2e="[object Uint8ClampedArray]",y2e="[object Uint16Array]",B2e="[object Uint32Array]",Nt={};Nt[Tee]=Nt[e2e]=Nt[g2e]=Nt[f2e]=Nt[t2e]=Nt[r2e]=Nt[h2e]=Nt[p2e]=Nt[d2e]=Nt[C2e]=Nt[m2e]=Nt[s2e]=Nt[o2e]=Nt[Uee]=Nt[a2e]=Nt[A2e]=Nt[l2e]=Nt[c2e]=Nt[I2e]=Nt[E2e]=Nt[y2e]=Nt[B2e]=!0;Nt[i2e]=Nt[Kee]=Nt[u2e]=!1;function $y(t,e,r,i,n,s){var o,a=e&ZUe,l=e&_Ue,c=e&$Ue;if(r&&(o=n?r(t,i,n,s):r(t)),o!==void 0)return o;if(!WUe(t))return t;var u=GUe(t);if(u){if(o=YUe(t),!a)return NUe(t,o)}else{var g=UUe(t),f=g==Kee||g==n2e;if(qUe(t))return LUe(t,a);if(g==Uee||g==Tee||f&&!n){if(o=l||f?{}:jUe(t),!a)return l?OUe(t,RUe(o,t)):MUe(t,FUe(o,t))}else{if(!Nt[g])return n?t:{};o=HUe(t,g,a)}}s||(s=new kUe);var h=s.get(t);if(h)return h;s.set(t,o),zUe(t)?t.forEach(function(I){o.add($y(I,e,r,I,t,s))}):JUe(t)&&t.forEach(function(I,y){o.set(y,$y(I,e,r,y,t,s))});var p=c?l?KUe:TUe:l?XUe:VUe,m=u?void 0:p(t);return PUe(m||t,function(I,y){m&&(y=I,I=t[y]),vUe(o,y,$y(I,e,r,y,t,s))}),o}Oee.exports=$y});var Ev=C((fAt,Hee)=>{var w2e=Yee(),Q2e=1,b2e=4;function D2e(t){return w2e(t,Q2e|b2e)}Hee.exports=D2e});var Gee=C((hAt,jee)=>{var S2e=Pk();function x2e(t,e,r){return t==null?t:S2e(t,e,r)}jee.exports=x2e});var Xee=C((EAt,Vee)=>{function k2e(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}Vee.exports=k2e});var _ee=C((yAt,Zee)=>{var P2e=Fh(),v2e=wS();function F2e(t,e){return e.length<2?t:P2e(t,v2e(e,0,-1))}Zee.exports=F2e});var ete=C((BAt,$ee)=>{var R2e=au(),L2e=Xee(),N2e=_ee(),M2e=_A();function O2e(t,e){return e=R2e(e,t),t=N2e(t,e),t==null||delete t[M2e(L2e(e))]}$ee.exports=O2e});var rte=C((wAt,tte)=>{var T2e=ete();function K2e(t,e){return t==null?!0:T2e(t,e)}tte.exports=K2e});var ute=C(($At,cte)=>{cte.exports={name:"@yarnpkg/cli",version:"3.0.0",license:"BSD-2-Clause",main:"./sources/index.ts",dependencies:{"@yarnpkg/core":"workspace:^3.0.0","@yarnpkg/fslib":"workspace:^2.5.0","@yarnpkg/libzip":"workspace:^2.2.2","@yarnpkg/parsers":"workspace:^2.4.0","@yarnpkg/plugin-compat":"workspace:^3.0.0","@yarnpkg/plugin-dlx":"workspace:^3.0.0","@yarnpkg/plugin-essentials":"workspace:^3.0.0","@yarnpkg/plugin-file":"workspace:^2.2.1","@yarnpkg/plugin-git":"workspace:^2.4.0","@yarnpkg/plugin-github":"workspace:^2.2.0","@yarnpkg/plugin-http":"workspace:^2.1.3","@yarnpkg/plugin-init":"workspace:^3.0.0","@yarnpkg/plugin-link":"workspace:^2.1.2","@yarnpkg/plugin-nm":"workspace:^3.0.0","@yarnpkg/plugin-npm":"workspace:^2.5.0","@yarnpkg/plugin-npm-cli":"workspace:^3.0.0","@yarnpkg/plugin-pack":"workspace:^3.0.0","@yarnpkg/plugin-patch":"workspace:^3.0.0","@yarnpkg/plugin-pnp":"workspace:^3.0.0","@yarnpkg/shell":"workspace:^3.0.0",chalk:"^3.0.0","ci-info":"^2.0.0",clipanion:"^3.0.1",semver:"^7.1.2",tslib:"^1.13.0",typanion:"^3.3.0",yup:"^0.32.9"},devDependencies:{"@types/ci-info":"^2","@types/semver":"^7.1.0","@types/yup":"^0","@yarnpkg/builder":"workspace:*","@yarnpkg/monorepo":"workspace:*","@yarnpkg/pnpify":"workspace:*",micromatch:"^4.0.2",typescript:"^4.3.2"},peerDependencies:{"@yarnpkg/core":"^3.0.0"},scripts:{postpack:"rm -rf lib",prepack:'run build:compile "$(pwd)"',"build:cli+hook":"run build:pnp:hook && builder build bundle","build:cli":"builder build bundle","run:cli":"builder run","update-local":"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/"},publishConfig:{main:"./lib/index.js",types:"./lib/index.d.ts",bin:null},files:["/lib/**/*","!/lib/pluginConfiguration.*","!/lib/cli.*"],"@yarnpkg/builder":{bundles:{standard:["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-dlx","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp"]}},repository:{type:"git",url:"ssh://git@github.com/yarnpkg/berry.git",directory:"packages/yarnpkg-cli"},engines:{node:">=12 <14 || 14.2 - 14.9 || >14.10.0"}}});var Wv=C((Oht,are)=>{"use strict";are.exports=function(e,r){r===!0&&(r=0);var i=e.indexOf("://"),n=e.substring(0,i).split("+").filter(Boolean);return typeof r=="number"?n[r]:n}});var zv=C((Tht,Are)=>{"use strict";var fYe=Wv();function lre(t){if(Array.isArray(t))return t.indexOf("ssh")!==-1||t.indexOf("rsync")!==-1;if(typeof t!="string")return!1;var e=fYe(t);return t=t.substring(t.indexOf("://")+3),lre(e)?!0:t.indexOf("@"){"use strict";var hYe=Wv(),pYe=zv(),dYe=require("querystring");function CYe(t){t=(t||"").trim();var e={protocols:hYe(t),protocol:null,port:null,resource:"",user:"",pathname:"",hash:"",search:"",href:t,query:Object.create(null)},r=t.indexOf("://"),i=-1,n=null,s=null;t.startsWith(".")&&(t.startsWith("./")&&(t=t.substring(2)),e.pathname=t,e.protocol="file");var o=t.charAt(1);return e.protocol||(e.protocol=e.protocols[0],e.protocol||(pYe(t)?e.protocol="ssh":((o==="/"||o==="~")&&(t=t.substring(2)),e.protocol="file"))),r!==-1&&(t=t.substring(r+3)),s=t.split("/"),e.protocol!=="file"?e.resource=s.shift():e.resource="",n=e.resource.split("@"),n.length===2&&(e.user=n[0],e.resource=n[1]),n=e.resource.split(":"),n.length===2&&(e.resource=n[0],n[1]?(e.port=Number(n[1]),isNaN(e.port)&&(e.port=null,s.unshift(n[1]))):e.port=null),s=s.filter(Boolean),e.protocol==="file"?e.pathname=e.href:e.pathname=e.pathname||(e.protocol!=="file"||e.href[0]==="/"?"/":"")+s.join("/"),n=e.pathname.split("#"),n.length===2&&(e.pathname=n[0],e.hash=n[1]),n=e.pathname.split("?"),n.length===2&&(e.pathname=n[0],e.search=n[1]),e.query=dYe.parse(e.search),e.href=e.href.replace(/\/$/,""),e.pathname=e.pathname.replace(/\/$/,""),e}cre.exports=CYe});var hre=C((Uht,gre)=>{"use strict";var mYe=typeof URL=="undefined"?require("url").URL:URL,fre=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t);gre.exports=(t,e)=>{e=Object.assign({defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripHash:!0,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0},e),Reflect.has(e,"normalizeHttps")&&(e.forceHttp=e.normalizeHttps),Reflect.has(e,"normalizeHttp")&&(e.forceHttps=e.normalizeHttp),Reflect.has(e,"stripFragment")&&(e.stripHash=e.stripFragment),t=t.trim();let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let n=new mYe(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&n.protocol==="https:"&&(n.protocol="http:"),e.forceHttps&&n.protocol==="http:"&&(n.protocol="https:"),e.stripHash&&(n.hash=""),n.pathname&&(n.pathname=n.pathname.replace(/((?![https?:]).)\/{2,}/g,(s,o)=>/^(?!\/)/g.test(o)?`${o}/`:"/")),n.pathname&&(n.pathname=decodeURI(n.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let s=n.pathname.split("/"),o=s[s.length-1];fre(o,e.removeDirectoryIndex)&&(s=s.slice(0,s.length-1),n.pathname=s.slice(1).join("/")+"/")}if(n.hostname&&(n.hostname=n.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z\.]{2,5})$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let s of[...n.searchParams.keys()])fre(s,e.removeQueryParameters)&&n.searchParams.delete(s);return e.sortQueryParameters&&n.searchParams.sort(),t=n.toString(),(e.removeTrailingSlash||n.pathname==="/")&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),t}});var dre=C((Yht,pre)=>{"use strict";var IYe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},EYe=ure(),yYe=hre();function BYe(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(typeof t!="string"||!t.trim())throw new Error("Invalid url.");e&&((typeof e=="undefined"?"undefined":IYe(e))!=="object"&&(e={stripFragment:!1}),t=yYe(t,e));var r=EYe(t);return r}pre.exports=BYe});var Ire=C((Hht,Cre)=>{"use strict";var wYe=dre(),mre=zv();function QYe(t){var e=wYe(t);e.token="";var r=e.user.split(":");return r.length===2&&(r[1]==="x-oauth-basic"?e.token=r[0]:r[0]==="x-token-auth"&&(e.token=r[1])),mre(e.protocols)||mre(t)?e.protocol="ssh":e.protocols.length?e.protocol=e.protocols[0]:e.protocol="file",e.href=e.href.replace(/\/$/,""),e}Cre.exports=QYe});var yre=C((jht,Ere)=>{"use strict";var bYe=Ire();function Vv(t){if(typeof t!="string")throw new Error("The url must be a string.");var e=bYe(t),r=e.resource.split("."),i=null;switch(e.toString=function(l){return Vv.stringify(this,l)},e.source=r.length>2?r.slice(1-r.length).join("."):e.source=e.resource,e.git_suffix=/\.git$/.test(e.pathname),e.name=decodeURIComponent(e.pathname.replace(/^\//,"").replace(/\.git$/,"")),e.owner=decodeURIComponent(e.user),e.source){case"git.cloudforge.com":e.owner=e.user,e.organization=r[0],e.source="cloudforge.com";break;case"visualstudio.com":if(e.resource==="vs-ssh.visualstudio.com"){i=e.name.split("/"),i.length===4&&(e.organization=i[1],e.owner=i[2],e.name=i[3],e.full_name=i[2]+"/"+i[3]);break}else{i=e.name.split("/"),i.length===2?(e.owner=i[1],e.name=i[1],e.full_name="_git/"+e.name):i.length===3?(e.name=i[2],i[0]==="DefaultCollection"?(e.owner=i[2],e.organization=i[0],e.full_name=e.organization+"/_git/"+e.name):(e.owner=i[0],e.full_name=e.owner+"/_git/"+e.name)):i.length===4&&(e.organization=i[0],e.owner=i[1],e.name=i[3],e.full_name=e.organization+"/"+e.owner+"/_git/"+e.name);break}case"dev.azure.com":case"azure.com":if(e.resource==="ssh.dev.azure.com"){i=e.name.split("/"),i.length===4&&(e.organization=i[1],e.owner=i[2],e.name=i[3]);break}else{i=e.name.split("/"),i.length===5?(e.organization=i[0],e.owner=i[1],e.name=i[4],e.full_name="_git/"+e.name):i.length===3?(e.name=i[2],i[0]==="DefaultCollection"?(e.owner=i[2],e.organization=i[0],e.full_name=e.organization+"/_git/"+e.name):(e.owner=i[0],e.full_name=e.owner+"/_git/"+e.name)):i.length===4&&(e.organization=i[0],e.owner=i[1],e.name=i[3],e.full_name=e.organization+"/"+e.owner+"/_git/"+e.name);break}default:i=e.name.split("/");var n=i.length-1;if(i.length>=2){var s=i.indexOf("blob",2),o=i.indexOf("tree",2),a=i.indexOf("commit",2);n=s>0?s-1:o>0?o-1:a>0?a-1:n,e.owner=i.slice(0,n).join("/"),e.name=i[n],a&&(e.commit=i[n+2])}e.ref="",e.filepathtype="",e.filepath="",i.length>n+2&&["blob","tree"].indexOf(i[n+1])>=0&&(e.filepathtype=i[n+1],e.ref=i[n+2],i.length>n+3&&(e.filepath=i.slice(n+3).join("/"))),e.organization=e.owner;break}return e.full_name||(e.full_name=e.owner,e.name&&(e.full_name&&(e.full_name+="/"),e.full_name+=e.name)),e}Vv.stringify=function(t,e){e=e||(t.protocols&&t.protocols.length?t.protocols.join("+"):t.protocol);var r=t.port?":"+t.port:"",i=t.user||"git",n=t.git_suffix?".git":"";switch(e){case"ssh":return r?"ssh://"+i+"@"+t.resource+r+"/"+t.full_name+n:i+"@"+t.resource+":"+t.full_name+n;case"git+ssh":case"ssh+git":case"ftp":case"ftps":return e+"://"+i+"@"+t.resource+r+"/"+t.full_name+n;case"http":case"https":var s=t.token?DYe(t):t.user&&(t.protocols.includes("http")||t.protocols.includes("https"))?t.user+"@":"";return e+"://"+s+t.resource+r+"/"+t.full_name+n;default:return t.href}};function DYe(t){switch(t.source){case"bitbucket.org":return"x-token-auth:"+t.token+"@";default:return t.token+"@"}}Ere.exports=Vv});var lF=C((Lpt,kre)=>{var NYe=Au(),MYe=nu();function OYe(t,e,r){(r!==void 0&&!MYe(t[e],r)||r===void 0&&!(e in t))&&NYe(t,e,r)}kre.exports=OYe});var vre=C((Npt,Pre)=>{var TYe=qh(),KYe=ls();function UYe(t){return KYe(t)&&TYe(t)}Pre.exports=UYe});var Lre=C((Mpt,Fre)=>{var YYe=NA(),HYe=Zy(),jYe=ls(),GYe="[object Object]",qYe=Function.prototype,JYe=Object.prototype,Rre=qYe.toString,WYe=JYe.hasOwnProperty,zYe=Rre.call(Object);function VYe(t){if(!jYe(t)||YYe(t)!=GYe)return!1;var e=HYe(t);if(e===null)return!0;var r=WYe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Rre.call(r)==zYe}Fre.exports=VYe});var cF=C((Opt,Nre)=>{function XYe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}Nre.exports=XYe});var Ore=C((Tpt,Mre)=>{var ZYe=bu(),_Ye=Du();function $Ye(t){return ZYe(t,_Ye(t))}Mre.exports=$Ye});var jre=C((Kpt,Tre)=>{var Kre=lF(),eHe=pv(),tHe=mv(),rHe=dv(),iHe=Iv(),Ure=Lh(),Yre=dn(),nHe=vre(),sHe=Hh(),oHe=iy(),aHe=Yn(),AHe=Lre(),lHe=Ey(),Hre=cF(),cHe=Ore();function uHe(t,e,r,i,n,s,o){var a=Hre(t,r),l=Hre(e,r),c=o.get(l);if(c){Kre(t,r,c);return}var u=s?s(a,l,r+"",t,e,o):void 0,g=u===void 0;if(g){var f=Yre(l),h=!f&&sHe(l),p=!f&&!h&&lHe(l);u=l,f||h||p?Yre(a)?u=a:nHe(a)?u=rHe(a):h?(g=!1,u=eHe(l,!0)):p?(g=!1,u=tHe(l,!0)):u=[]:AHe(l)||Ure(l)?(u=a,Ure(a)?u=cHe(a):(!aHe(a)||oHe(a))&&(u=iHe(l))):g=!1}g&&(o.set(l,u),n(u,l,i,s,o),o.delete(l)),Kre(t,r,u)}Tre.exports=uHe});var Jre=C((Upt,Gre)=>{var gHe=Jh(),fHe=lF(),hHe=_k(),pHe=jre(),dHe=Yn(),CHe=Du(),mHe=cF();function qre(t,e,r,i,n){t!==e&&hHe(e,function(s,o){if(n||(n=new gHe),dHe(s))pHe(t,e,o,r,qre,i,n);else{var a=i?i(mHe(t,o),s,o+"",t,e,n):void 0;a===void 0&&(a=s),fHe(t,o,a)}},CHe)}Gre.exports=qre});var zre=C((Ypt,Wre)=>{var IHe=ly(),EHe=Rk(),yHe=Lk();function BHe(t,e){return yHe(EHe(t,e,IHe),t+"")}Wre.exports=BHe});var Xre=C((Hpt,Vre)=>{var wHe=nu(),QHe=qh(),bHe=Rh(),DHe=Yn();function SHe(t,e,r){if(!DHe(r))return!1;var i=typeof e;return(i=="number"?QHe(r)&&bHe(e,r.length):i=="string"&&e in r)?wHe(r[e],t):!1}Vre.exports=SHe});var _re=C((jpt,Zre)=>{var xHe=zre(),kHe=Xre();function PHe(t){return xHe(function(e,r){var i=-1,n=r.length,s=n>1?r[n-1]:void 0,o=n>2?r[2]:void 0;for(s=t.length>3&&typeof s=="function"?(n--,s):void 0,o&&kHe(r[0],r[1],o)&&(s=n<3?void 0:s,n=1),e=Object(e);++i{var vHe=Jre(),FHe=_re(),RHe=FHe(function(t,e,r){vHe(t,e,r)});$re.exports=RHe});var pie=C((Vdt,hie)=>{var wF;hie.exports=()=>(typeof wF=="undefined"&&(wF=require("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),wF)});var yie=C(bF=>{function Fu(t,e){if(typeof t=="string")return t;if(t){let r,i;if(Array.isArray(t)){for(r=0;r0)return(g=Fu(n[u],c))?g.replace("*",l.substring(u.length-1)):gl(i,l,1)}return gl(i,l)}}function oje(t,e={}){let r=0,i,n=e.browser,s=e.fields||["module","main"];for(n&&!s.includes("browser")&&s.unshift("browser");r{(function(t){RF&&typeof RF=="object"&&typeof LF!="undefined"?LF.exports=t():typeof define=="function"&&define.amd?define([],t):typeof window!="undefined"?window.isWindows=t():typeof global!="undefined"?global.isWindows=t():typeof self!="undefined"?self.isWindows=t():this.isWindows=t()})(function(){"use strict";return function(){return process&&(process.platform==="win32"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var Nie=C((bmt,Fie)=>{"use strict";NF.ifExists=dje;var Nu=require("util"),bn=require("path"),Rie=vie(),Cje=/^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/,mje={createPwshFile:!0,createCmdFile:Rie(),fs:require("fs")},Ije=new Map([[".js","node"],[".cjs","node"],[".mjs","node"],[".cmd","cmd"],[".bat","cmd"],[".ps1","pwsh"],[".sh","sh"]]);function Lie(t){let e=P(P({},mje),t),r=e.fs;return e.fs_={chmod:r.chmod?Nu.promisify(r.chmod):async()=>{},mkdir:Nu.promisify(r.mkdir),readFile:Nu.promisify(r.readFile),stat:Nu.promisify(r.stat),unlink:Nu.promisify(r.unlink),writeFile:Nu.promisify(r.writeFile)},e}async function NF(t,e,r){let i=Lie(r);await i.fs_.stat(t),await Eje(t,e,i)}function dje(t,e,r){return NF(t,e,r).catch(()=>{})}function yje(t,e){return e.fs_.unlink(t).catch(()=>{})}async function Eje(t,e,r){let i=await Qje(t,r);return await Bje(e,r),wje(t,e,i,r)}function Bje(t,e){return e.fs_.mkdir(bn.dirname(t),{recursive:!0})}function wje(t,e,r,i){let n=Lie(i),s=[{generator:Sje,extension:""}];return n.createCmdFile&&s.push({generator:Dje,extension:".cmd"}),n.createPwshFile&&s.push({generator:xje,extension:".ps1"}),Promise.all(s.map(o=>bje(t,e+o.extension,r,o.generator,n)))}function kje(t,e){return yje(t,e)}function vje(t,e){return Pje(t,e)}async function Qje(t,e){let n=(await e.fs_.readFile(t,"utf8")).trim().split(/\r*\n/)[0].match(Cje);if(!n){let s=bn.extname(t).toLowerCase();return{program:Ije.get(s)||null,additionalArgs:""}}return{program:n[1],additionalArgs:n[2]}}async function bje(t,e,r,i,n){let s=n.preserveSymlinks?"--preserve-symlinks":"",o=[r.additionalArgs,s].filter(a=>a).join(" ");return n=Object.assign({},n,{prog:r.program,args:o}),await kje(e,n),await n.fs_.writeFile(e,i(t,e,n),"utf8"),vje(e,n)}function Dje(t,e,r){let n=bn.relative(bn.dirname(e),t).split("/").join("\\"),s=bn.isAbsolute(n)?`"${n}"`:`"%~dp0\\${n}"`,o,a=r.prog,l=r.args||"",c=MF(r.nodePath).win32;a?(o=`"%~dp0\\${a}.exe"`,n=s):(a=s,l="",n="");let u=r.progArgs?`${r.progArgs.join(" ")} `:"",g=c?`@SET NODE_PATH=${c}\r -`:"";return o?g+=`@IF EXIST ${o} (\r - ${o} ${l} ${n} ${u}%*\r -) ELSE (\r - @SETLOCAL\r - @SET PATHEXT=%PATHEXT:;.JS;=;%\r - ${a} ${l} ${n} ${u}%*\r -)\r -`:g+=`@${a} ${l} ${n} ${u}%*\r -`,g}function Sje(t,e,r){let i=bn.relative(bn.dirname(e),t),n=r.prog&&r.prog.split("\\").join("/"),s;i=i.split("\\").join("/");let o=bn.isAbsolute(i)?`"${i}"`:`"$basedir/${i}"`,a=r.args||"",l=MF(r.nodePath).posix;n?(s=`"$basedir/${r.prog}"`,i=o):(n=o,a="",i="");let c=r.progArgs?`${r.progArgs.join(" ")} `:"",u=`#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\\\,/,g')") - -case \`uname\` in - *CYGWIN*) basedir=\`cygpath -w "$basedir"\`;; -esac - -`,g=r.nodePath?`export NODE_PATH="${l}" -`:"";return s?u+=`${g}if [ -x ${s} ]; then - exec ${s} ${a} ${i} ${c}"$@" -else - exec ${n} ${a} ${i} ${c}"$@" -fi -`:u+=`${g}${n} ${a} ${i} ${c}"$@" -exit $? -`,u}function xje(t,e,r){let i=bn.relative(bn.dirname(e),t),n=r.prog&&r.prog.split("\\").join("/"),s=n&&`"${n}$exe"`,o;i=i.split("\\").join("/");let a=bn.isAbsolute(i)?`"${i}"`:`"$basedir/${i}"`,l=r.args||"",c=MF(r.nodePath),u=c.win32,g=c.posix;s?(o=`"$basedir/${r.prog}$exe"`,i=a):(s=a,l="",i="");let f=r.progArgs?`${r.progArgs.join(" ")} `:"",h=`#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -${r.nodePath?`$env_node_path=$env:NODE_PATH -$env:NODE_PATH="${u}" -`:""}if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -}`;return r.nodePath&&(h+=` else { - $env:NODE_PATH="${g}" -}`),o?h+=` -$ret=0 -if (Test-Path ${o}) { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & ${o} ${l} ${i} ${f}$args - } else { - & ${o} ${l} ${i} ${f}$args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & ${s} ${l} ${i} ${f}$args - } else { - & ${s} ${l} ${i} ${f}$args - } - $ret=$LASTEXITCODE -} -${r.nodePath?`$env:NODE_PATH=$env_node_path -`:""}exit $ret -`:h+=` -# Support pipeline input -if ($MyInvocation.ExpectingInput) { - $input | & ${s} ${l} ${i} ${f}$args -} else { - & ${s} ${l} ${i} ${f}$args -} -${r.nodePath?`$env:NODE_PATH=$env_node_path -`:""}exit $LASTEXITCODE -`,h}function Pje(t,e){return e.fs_.chmod(t,493)}function MF(t){if(!t)return{win32:"",posix:""};let e=typeof t=="string"?t.split(bn.delimiter):Array.from(t),r={};for(let i=0;i`/mnt/${a.toLowerCase()}`):e[i];r.win32=r.win32?`${r.win32};${n}`:n,r.posix=r.posix?`${r.posix}:${s}`:s,r[i]={win32:n,posix:s}}return r}Fie.exports=NF});var rR=C((aEt,_ie)=>{_ie.exports=require("stream")});var rne=C((AEt,$ie)=>{"use strict";function ene(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable})),r.push.apply(r,i)}return r}function Zje(t){for(var e=1;e0?this.tail.next=i:this.head=i,this.tail=i,++this.length}},{key:"unshift",value:function(r){var i={data:r,next:this.head};this.length===0&&(this.tail=i),this.head=i,++this.length}},{key:"shift",value:function(){if(this.length!==0){var r=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,r}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(r){if(this.length===0)return"";for(var i=this.head,n=""+i.data;i=i.next;)n+=r+i.data;return n}},{key:"concat",value:function(r){if(this.length===0)return fB.alloc(0);for(var i=fB.allocUnsafe(r>>>0),n=this.head,s=0;n;)iGe(n.data,i,s),s+=n.data.length,n=n.next;return i}},{key:"consume",value:function(r,i){var n;return ro.length?o.length:r;if(a===o.length?s+=o:s+=o.slice(0,r),r-=a,r===0){a===o.length?(++n,i.next?this.head=i.next:this.head=this.tail=null):(this.head=i,i.data=o.slice(a));break}++n}return this.length-=n,s}},{key:"_getBuffer",value:function(r){var i=fB.allocUnsafe(r),n=this.head,s=1;for(n.data.copy(i),r-=n.data.length;n=n.next;){var o=n.data,a=r>o.length?o.length:r;if(o.copy(i,i.length-r,0,a),r-=a,r===0){a===o.length?(++s,n.next?this.head=n.next:this.head=this.tail=null):(this.head=n,n.data=o.slice(a));break}++s}return this.length-=s,i}},{key:rGe,value:function(r,i){return iR(this,Zje({},i,{depth:0,customInspect:!1}))}}]),t}()});var sR=C((lEt,ine)=>{"use strict";function nGe(t,e){var r=this,i=this._readableState&&this._readableState.destroyed,n=this._writableState&&this._writableState.destroyed;return i||n?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(nR,this,t)):process.nextTick(nR,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(s){!e&&s?r._writableState?r._writableState.errorEmitted?process.nextTick(hB,r):(r._writableState.errorEmitted=!0,process.nextTick(nne,r,s)):process.nextTick(nne,r,s):e?(process.nextTick(hB,r),e(s)):process.nextTick(hB,r)}),this)}function nne(t,e){nR(t,e),hB(t)}function hB(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function sGe(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function nR(t,e){t.emit("error",e)}function oGe(t,e){var r=t._readableState,i=t._writableState;r&&r.autoDestroy||i&&i.autoDestroy?t.destroy(e):t.emit("error",e)}ine.exports={destroy:nGe,undestroy:sGe,errorOrDestroy:oGe}});var ka=C((cEt,sne)=>{"use strict";var one={};function Dn(t,e,r){r||(r=Error);function i(s,o,a){return typeof e=="string"?e:e(s,o,a)}class n extends r{constructor(o,a,l){super(i(o,a,l))}}n.prototype.name=r.name,n.prototype.code=t,one[t]=n}function ane(t,e){if(Array.isArray(t)){let r=t.length;return t=t.map(i=>String(i)),r>2?`one of ${e} ${t.slice(0,r-1).join(", ")}, or `+t[r-1]:r===2?`one of ${e} ${t[0]} or ${t[1]}`:`of ${e} ${t[0]}`}else return`of ${e} ${String(t)}`}function aGe(t,e,r){return t.substr(!r||r<0?0:+r,e.length)===e}function AGe(t,e,r){return(r===void 0||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}function lGe(t,e,r){return typeof r!="number"&&(r=0),r+e.length>t.length?!1:t.indexOf(e,r)!==-1}Dn("ERR_INVALID_OPT_VALUE",function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'},TypeError);Dn("ERR_INVALID_ARG_TYPE",function(t,e,r){let i;typeof e=="string"&&aGe(e,"not ")?(i="must not be",e=e.replace(/^not /,"")):i="must be";let n;if(AGe(t," argument"))n=`The ${t} ${i} ${ane(e,"type")}`;else{let s=lGe(t,".")?"property":"argument";n=`The "${t}" ${s} ${i} ${ane(e,"type")}`}return n+=`. Received type ${typeof r}`,n},TypeError);Dn("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");Dn("ERR_METHOD_NOT_IMPLEMENTED",function(t){return"The "+t+" method is not implemented"});Dn("ERR_STREAM_PREMATURE_CLOSE","Premature close");Dn("ERR_STREAM_DESTROYED",function(t){return"Cannot call "+t+" after a stream was destroyed"});Dn("ERR_MULTIPLE_CALLBACK","Callback called multiple times");Dn("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");Dn("ERR_STREAM_WRITE_AFTER_END","write after end");Dn("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);Dn("ERR_UNKNOWN_ENCODING",function(t){return"Unknown encoding: "+t},TypeError);Dn("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");sne.exports.codes=one});var oR=C((uEt,Ane)=>{"use strict";var cGe=ka().codes.ERR_INVALID_OPT_VALUE;function uGe(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function gGe(t,e,r,i){var n=uGe(e,i,r);if(n!=null){if(!(isFinite(n)&&Math.floor(n)===n)||n<0){var s=i?r:"highWaterMark";throw new cGe(s,n)}return Math.floor(n)}return t.objectMode?16:16*1024}Ane.exports={getHighWaterMark:gGe}});var lne=C((gEt,aR)=>{typeof Object.create=="function"?aR.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:aR.exports=function(e,r){if(r){e.super_=r;var i=function(){};i.prototype=r.prototype,e.prototype=new i,e.prototype.constructor=e}}});var Pa=C((fEt,AR)=>{try{if(lR=require("util"),typeof lR.inherits!="function")throw"";AR.exports=lR.inherits}catch(t){AR.exports=lne()}var lR});var une=C((hEt,cne)=>{cne.exports=require("util").deprecate});var gR=C((pEt,gne)=>{"use strict";gne.exports=tr;function fne(t){var e=this;this.next=null,this.entry=null,this.finish=function(){fGe(e,t)}}var Ou;tr.WritableState=od;var hGe={deprecate:une()},hne=rR(),pB=require("buffer").Buffer,pGe=global.Uint8Array||function(){};function dGe(t){return pB.from(t)}function CGe(t){return pB.isBuffer(t)||t instanceof pGe}var cR=sR(),mGe=oR(),IGe=mGe.getHighWaterMark,va=ka().codes,EGe=va.ERR_INVALID_ARG_TYPE,yGe=va.ERR_METHOD_NOT_IMPLEMENTED,BGe=va.ERR_MULTIPLE_CALLBACK,wGe=va.ERR_STREAM_CANNOT_PIPE,QGe=va.ERR_STREAM_DESTROYED,bGe=va.ERR_STREAM_NULL_VALUES,DGe=va.ERR_STREAM_WRITE_AFTER_END,SGe=va.ERR_UNKNOWN_ENCODING,Tu=cR.errorOrDestroy;Pa()(tr,hne);function xGe(){}function od(t,e,r){Ou=Ou||pl(),t=t||{},typeof r!="boolean"&&(r=e instanceof Ou),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=IGe(this,t,"writableHighWaterMark",r),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var i=t.decodeStrings===!1;this.decodeStrings=!i,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(n){kGe(e,n)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new fne(this)}od.prototype.getBuffer=function(){for(var e=this.bufferedRequest,r=[];e;)r.push(e),e=e.next;return r};(function(){try{Object.defineProperty(od.prototype,"buffer",{get:hGe.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(t){}})();var dB;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(dB=Function.prototype[Symbol.hasInstance],Object.defineProperty(tr,Symbol.hasInstance,{value:function(e){return dB.call(this,e)?!0:this!==tr?!1:e&&e._writableState instanceof od}})):dB=function(e){return e instanceof this};function tr(t){Ou=Ou||pl();var e=this instanceof Ou;if(!e&&!dB.call(tr,this))return new tr(t);this._writableState=new od(t,this,e),this.writable=!0,t&&(typeof t.write=="function"&&(this._write=t.write),typeof t.writev=="function"&&(this._writev=t.writev),typeof t.destroy=="function"&&(this._destroy=t.destroy),typeof t.final=="function"&&(this._final=t.final)),hne.call(this)}tr.prototype.pipe=function(){Tu(this,new wGe)};function PGe(t,e){var r=new DGe;Tu(t,r),process.nextTick(e,r)}function vGe(t,e,r,i){var n;return r===null?n=new bGe:typeof r!="string"&&!e.objectMode&&(n=new EGe("chunk",["string","Buffer"],r)),n?(Tu(t,n),process.nextTick(i,n),!1):!0}tr.prototype.write=function(t,e,r){var i=this._writableState,n=!1,s=!i.objectMode&&CGe(t);return s&&!pB.isBuffer(t)&&(t=dGe(t)),typeof e=="function"&&(r=e,e=null),s?e="buffer":e||(e=i.defaultEncoding),typeof r!="function"&&(r=xGe),i.ending?PGe(this,r):(s||vGe(this,i,t,r))&&(i.pendingcb++,n=FGe(this,i,s,t,e,r)),n};tr.prototype.cork=function(){this._writableState.corked++};tr.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,!t.writing&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&pne(this,t))};tr.prototype.setDefaultEncoding=function(e){if(typeof e=="string"&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new SGe(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(tr.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function RGe(t,e,r){return!t.objectMode&&t.decodeStrings!==!1&&typeof e=="string"&&(e=pB.from(e,r)),e}Object.defineProperty(tr.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function FGe(t,e,r,i,n,s){if(!r){var o=RGe(e,i,n);i!==o&&(r=!0,n="buffer",i=o)}var a=e.objectMode?1:i.length;e.length+=a;var l=e.length{"use strict";var UGe=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};mne.exports=ws;var Ine=fR(),hR=gR();Pa()(ws,Ine);for(pR=UGe(hR.prototype),CB=0;CB{var IB=require("buffer"),wo=IB.Buffer;function yne(t,e){for(var r in t)e[r]=t[r]}wo.from&&wo.alloc&&wo.allocUnsafe&&wo.allocUnsafeSlow?Ene.exports=IB:(yne(IB,dR),dR.Buffer=Ku);function Ku(t,e,r){return wo(t,e,r)}yne(wo,Ku);Ku.from=function(t,e,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return wo(t,e,r)};Ku.alloc=function(t,e,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var i=wo(t);return e!==void 0?typeof r=="string"?i.fill(e,r):i.fill(e):i.fill(0),i};Ku.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return wo(t)};Ku.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return IB.SlowBuffer(t)}});var IR=C(wne=>{"use strict";var CR=Bne().Buffer,Qne=CR.isEncoding||function(t){switch(t=""+t,t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function jGe(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}function GGe(t){var e=jGe(t);if(typeof e!="string"&&(CR.isEncoding===Qne||!Qne(t)))throw new Error("Unknown encoding: "+t);return e||t}wne.StringDecoder=Ad;function Ad(t){this.encoding=GGe(t);var e;switch(this.encoding){case"utf16le":this.text=JGe,this.end=WGe,e=4;break;case"utf8":this.fillLast=qGe,e=4;break;case"base64":this.text=zGe,this.end=VGe,e=3;break;default:this.write=XGe,this.end=ZGe;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=CR.allocUnsafe(e)}Ad.prototype.write=function(t){if(t.length===0)return"";var e,r;if(this.lastNeed){if(e=this.fillLast(t),e===void 0)return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function eqe(t,e,r){var i=e.length-1;if(i=0?(n>0&&(t.lastNeed=n-1),n):--i=0?(n>0&&(t.lastNeed=n-2),n):--i=0?(n>0&&(n===2?n=0:t.lastNeed=n-3),n):0))}function tqe(t,e,r){if((e[0]&192)!=128)return t.lastNeed=0,"\uFFFD";if(t.lastNeed>1&&e.length>1){if((e[1]&192)!=128)return t.lastNeed=1,"\uFFFD";if(t.lastNeed>2&&e.length>2&&(e[2]&192)!=128)return t.lastNeed=2,"\uFFFD"}}function qGe(t){var e=this.lastTotal-this.lastNeed,r=tqe(this,t,e);if(r!==void 0)return r;if(this.lastNeed<=t.length)return t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,e,0,t.length),this.lastNeed-=t.length}function $Ge(t,e){var r=eqe(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var i=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,i),t.toString("utf8",e,i)}function _Ge(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"\uFFFD":e}function JGe(t,e){if((t.length-e)%2==0){var r=t.toString("utf16le",e);if(r){var i=r.charCodeAt(r.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function WGe(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function zGe(t,e){var r=(t.length-e)%3;return r===0?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,r===1?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function VGe(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function XGe(t){return t.toString(this.encoding)}function ZGe(t){return t&&t.length?this.write(t):""}});var EB=C((mEt,bne)=>{"use strict";var Dne=ka().codes.ERR_STREAM_PREMATURE_CLOSE;function rqe(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,i=new Array(r),n=0;n{"use strict";var yB;function Fa(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var sqe=EB(),Ra=Symbol("lastResolve"),dl=Symbol("lastReject"),ld=Symbol("error"),BB=Symbol("ended"),Cl=Symbol("lastPromise"),ER=Symbol("handlePromise"),ml=Symbol("stream");function La(t,e){return{value:t,done:e}}function oqe(t){var e=t[Ra];if(e!==null){var r=t[ml].read();r!==null&&(t[Cl]=null,t[Ra]=null,t[dl]=null,e(La(r,!1)))}}function aqe(t){process.nextTick(oqe,t)}function Aqe(t,e){return function(r,i){t.then(function(){if(e[BB]){r(La(void 0,!0));return}e[ER](r,i)},i)}}var lqe=Object.getPrototypeOf(function(){}),cqe=Object.setPrototypeOf((yB={get stream(){return this[ml]},next:function(){var e=this,r=this[ld];if(r!==null)return Promise.reject(r);if(this[BB])return Promise.resolve(La(void 0,!0));if(this[ml].destroyed)return new Promise(function(o,a){process.nextTick(function(){e[ld]?a(e[ld]):o(La(void 0,!0))})});var i=this[Cl],n;if(i)n=new Promise(Aqe(i,this));else{var s=this[ml].read();if(s!==null)return Promise.resolve(La(s,!1));n=new Promise(this[ER])}return this[Cl]=n,n}},Fa(yB,Symbol.asyncIterator,function(){return this}),Fa(yB,"return",function(){var e=this;return new Promise(function(r,i){e[ml].destroy(null,function(n){if(n){i(n);return}r(La(void 0,!0))})})}),yB),lqe),uqe=function(e){var r,i=Object.create(cqe,(r={},Fa(r,ml,{value:e,writable:!0}),Fa(r,Ra,{value:null,writable:!0}),Fa(r,dl,{value:null,writable:!0}),Fa(r,ld,{value:null,writable:!0}),Fa(r,BB,{value:e._readableState.endEmitted,writable:!0}),Fa(r,ER,{value:function(s,o){var a=i[ml].read();a?(i[Cl]=null,i[Ra]=null,i[dl]=null,s(La(a,!1))):(i[Ra]=s,i[dl]=o)},writable:!0}),r));return i[Cl]=null,sqe(e,function(n){if(n&&n.code!=="ERR_STREAM_PREMATURE_CLOSE"){var s=i[dl];s!==null&&(i[Cl]=null,i[Ra]=null,i[dl]=null,s(n)),i[ld]=n;return}var o=i[Ra];o!==null&&(i[Cl]=null,i[Ra]=null,i[dl]=null,o(La(void 0,!0))),i[BB]=!0}),e.on("readable",aqe.bind(null,i)),i};xne.exports=uqe});var Rne=C((EEt,Pne)=>{"use strict";function vne(t,e,r,i,n,s,o){try{var a=t[s](o),l=a.value}catch(c){r(c);return}a.done?e(l):Promise.resolve(l).then(i,n)}function gqe(t){return function(){var e=this,r=arguments;return new Promise(function(i,n){var s=t.apply(e,r);function o(l){vne(s,i,n,o,a,"next",l)}function a(l){vne(s,i,n,o,a,"throw",l)}o(void 0)})}}function Fne(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable})),r.push.apply(r,i)}return r}function hqe(t){for(var e=1;e{"use strict";Lne.exports=Ct;var Uu;Ct.ReadableState=Nne;var yEt=require("events").EventEmitter,Mne=function(e,r){return e.listeners(r).length},cd=rR(),wB=require("buffer").Buffer,Cqe=global.Uint8Array||function(){};function mqe(t){return wB.from(t)}function Iqe(t){return wB.isBuffer(t)||t instanceof Cqe}var yR=require("util"),ut;yR&&yR.debuglog?ut=yR.debuglog("stream"):ut=function(){};var Eqe=rne(),BR=sR(),yqe=oR(),Bqe=yqe.getHighWaterMark,QB=ka().codes,wqe=QB.ERR_INVALID_ARG_TYPE,Qqe=QB.ERR_STREAM_PUSH_AFTER_EOF,bqe=QB.ERR_METHOD_NOT_IMPLEMENTED,Dqe=QB.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,Yu,wR,QR;Pa()(Ct,cd);var ud=BR.errorOrDestroy,bR=["error","close","destroy","pause","resume"];function Sqe(t,e,r){if(typeof t.prependListener=="function")return t.prependListener(e,r);!t._events||!t._events[e]?t.on(e,r):Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]}function Nne(t,e,r){Uu=Uu||pl(),t=t||{},typeof r!="boolean"&&(r=e instanceof Uu),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=Bqe(this,t,"readableHighWaterMark",r),this.buffer=new Eqe,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(Yu||(Yu=IR().StringDecoder),this.decoder=new Yu(t.encoding),this.encoding=t.encoding)}function Ct(t){if(Uu=Uu||pl(),!(this instanceof Ct))return new Ct(t);var e=this instanceof Uu;this._readableState=new Nne(t,this,e),this.readable=!0,t&&(typeof t.read=="function"&&(this._read=t.read),typeof t.destroy=="function"&&(this._destroy=t.destroy)),cd.call(this)}Object.defineProperty(Ct.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});Ct.prototype.destroy=BR.destroy;Ct.prototype._undestroy=BR.undestroy;Ct.prototype._destroy=function(t,e){e(t)};Ct.prototype.push=function(t,e){var r=this._readableState,i;return r.objectMode?i=!0:typeof t=="string"&&(e=e||r.defaultEncoding,e!==r.encoding&&(t=wB.from(t,e),e=""),i=!0),One(this,t,e,!1,i)};Ct.prototype.unshift=function(t){return One(this,t,null,!0,!1)};function One(t,e,r,i,n){ut("readableAddChunk",e);var s=t._readableState;if(e===null)s.reading=!1,kqe(t,s);else{var o;if(n||(o=xqe(s,e)),o)ud(t,o);else if(s.objectMode||e&&e.length>0)if(typeof e!="string"&&!s.objectMode&&Object.getPrototypeOf(e)!==wB.prototype&&(e=mqe(e)),i)s.endEmitted?ud(t,new Dqe):DR(t,s,e,!0);else if(s.ended)ud(t,new Qqe);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!r?(e=s.decoder.write(e),s.objectMode||e.length!==0?DR(t,s,e,!1):SR(t,s)):DR(t,s,e,!1)}else i||(s.reading=!1,SR(t,s))}return!s.ended&&(s.length=Tne?t=Tne:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function Kne(t,e){return t<=0||e.length===0&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=Pqe(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}Ct.prototype.read=function(t){ut("read",t),t=parseInt(t,10);var e=this._readableState,r=t;if(t!==0&&(e.emittedReadable=!1),t===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return ut("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?xR(this):bB(this),null;if(t=Kne(t,e),t===0&&e.ended)return e.length===0&&xR(this),null;var i=e.needReadable;ut("need readable",i),(e.length===0||e.length-t0?n=Une(t,e):n=null,n===null?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&xR(this)),n!==null&&this.emit("data",n),n};function kqe(t,e){if(ut("onEofChunk"),!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?bB(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,Yne(t)))}}function bB(t){var e=t._readableState;ut("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(ut("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(Yne,t))}function Yne(t){var e=t._readableState;ut("emitReadable_",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,kR(t)}function SR(t,e){e.readingMore||(e.readingMore=!0,process.nextTick(vqe,t,e))}function vqe(t,e){for(;!e.reading&&!e.ended&&(e.length1&&Hne(i.pipes,t)!==-1)&&!c&&(ut("false write response, pause",i.awaitDrain),i.awaitDrain++),r.pause())}function f(I){ut("onerror",I),m(),t.removeListener("error",f),Mne(t,"error")===0&&ud(t,I)}Sqe(t,"error",f);function h(){t.removeListener("finish",p),m()}t.once("close",h);function p(){ut("onfinish"),t.removeListener("close",h),m()}t.once("finish",p);function m(){ut("unpipe"),r.unpipe(t)}return t.emit("pipe",r),i.flowing||(ut("pipe resume"),r.resume()),t};function Fqe(t){return function(){var r=t._readableState;ut("pipeOnDrain",r.awaitDrain),r.awaitDrain&&r.awaitDrain--,r.awaitDrain===0&&Mne(t,"data")&&(r.flowing=!0,kR(t))}}Ct.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var i=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var s=0;s0,i.flowing!==!1&&this.resume()):t==="readable"&&!i.endEmitted&&!i.readableListening&&(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,ut("on readable",i.length,i.reading),i.length?bB(this):i.reading||process.nextTick(Rqe,this)),r};Ct.prototype.addListener=Ct.prototype.on;Ct.prototype.removeListener=function(t,e){var r=cd.prototype.removeListener.call(this,t,e);return t==="readable"&&process.nextTick(jne,this),r};Ct.prototype.removeAllListeners=function(t){var e=cd.prototype.removeAllListeners.apply(this,arguments);return(t==="readable"||t===void 0)&&process.nextTick(jne,this),e};function jne(t){var e=t._readableState;e.readableListening=t.listenerCount("readable")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount("data")>0&&t.resume()}function Rqe(t){ut("readable nexttick read 0"),t.read(0)}Ct.prototype.resume=function(){var t=this._readableState;return t.flowing||(ut("resume"),t.flowing=!t.readableListening,Lqe(this,t)),t.paused=!1,this};function Lqe(t,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(Nqe,t,e))}function Nqe(t,e){ut("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),kR(t),e.flowing&&!e.reading&&t.read(0)}Ct.prototype.pause=function(){return ut("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(ut("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function kR(t){var e=t._readableState;for(ut("flow",e.flowing);e.flowing&&t.read()!==null;);}Ct.prototype.wrap=function(t){var e=this,r=this._readableState,i=!1;t.on("end",function(){if(ut("wrapped end"),r.decoder&&!r.ended){var o=r.decoder.end();o&&o.length&&e.push(o)}e.push(null)}),t.on("data",function(o){if(ut("wrapped data"),r.decoder&&(o=r.decoder.write(o)),!(r.objectMode&&o==null)&&!(!r.objectMode&&(!o||!o.length))){var a=e.push(o);a||(i=!0,t.pause())}});for(var n in t)this[n]===void 0&&typeof t[n]=="function"&&(this[n]=function(a){return function(){return t[a].apply(t,arguments)}}(n));for(var s=0;s=e.length?(e.decoder?r=e.buffer.join(""):e.buffer.length===1?r=e.buffer.first():r=e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r}function xR(t){var e=t._readableState;ut("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(Mqe,e,t))}function Mqe(t,e){if(ut("endReadableNT",t.endEmitted,t.length),!t.endEmitted&&t.length===0&&(t.endEmitted=!0,e.readable=!1,e.emit("end"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}typeof Symbol=="function"&&(Ct.from=function(t,e){return QR===void 0&&(QR=Rne()),QR(Ct,t,e)});function Hne(t,e){for(var r=0,i=t.length;r{"use strict";Gne.exports=Qo;var DB=ka().codes,Oqe=DB.ERR_METHOD_NOT_IMPLEMENTED,Tqe=DB.ERR_MULTIPLE_CALLBACK,Kqe=DB.ERR_TRANSFORM_ALREADY_TRANSFORMING,Uqe=DB.ERR_TRANSFORM_WITH_LENGTH_0,SB=pl();Pa()(Qo,SB);function Yqe(t,e){var r=this._transformState;r.transforming=!1;var i=r.writecb;if(i===null)return this.emit("error",new Tqe);r.writechunk=null,r.writecb=null,e!=null&&this.push(e),i(t);var n=this._readableState;n.reading=!1,(n.needReadable||n.length{"use strict";Jne.exports=gd;var Wne=PR();Pa()(gd,Wne);function gd(t){if(!(this instanceof gd))return new gd(t);Wne.call(this,t)}gd.prototype._transform=function(t,e,r){r(null,t)}});var $ne=C((bEt,Vne)=>{"use strict";var vR;function jqe(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}var Xne=ka().codes,Gqe=Xne.ERR_MISSING_ARGS,qqe=Xne.ERR_STREAM_DESTROYED;function Zne(t){if(t)throw t}function Jqe(t){return t.setHeader&&typeof t.abort=="function"}function Wqe(t,e,r,i){i=jqe(i);var n=!1;t.on("close",function(){n=!0}),vR===void 0&&(vR=EB()),vR(t,{readable:e,writable:r},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,Jqe(t))return t.abort();if(typeof t.destroy=="function")return t.destroy();i(o||new qqe("pipe"))}}}function _ne(t){t()}function zqe(t,e){return t.pipe(e)}function Vqe(t){return!t.length||typeof t[t.length-1]!="function"?Zne:t.pop()}function Xqe(){for(var t=arguments.length,e=new Array(t),r=0;r0;return Wqe(o,l,c,function(u){n||(n=u),u&&s.forEach(_ne),!l&&(s.forEach(_ne),i(n))})});return e.reduce(zqe)}Vne.exports=Xqe});var Hu=C((Sn,fd)=>{var hd=require("stream");process.env.READABLE_STREAM==="disable"&&hd?(fd.exports=hd.Readable,Object.assign(fd.exports,hd),fd.exports.Stream=hd):(Sn=fd.exports=fR(),Sn.Stream=hd||Sn,Sn.Readable=Sn,Sn.Writable=gR(),Sn.Duplex=pl(),Sn.Transform=PR(),Sn.PassThrough=zne(),Sn.finished=EB(),Sn.pipeline=$ne())});var rse=C((DEt,ese)=>{"use strict";var{Buffer:Jn}=require("buffer"),tse=Symbol.for("BufferList");function Ot(t){if(!(this instanceof Ot))return new Ot(t);Ot._init.call(this,t)}Ot._init=function(e){Object.defineProperty(this,tse,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};Ot.prototype._new=function(e){return new Ot(e)};Ot.prototype._offset=function(e){if(e===0)return[0,0];let r=0;for(let i=0;ithis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};Ot.prototype.slice=function(e,r){return typeof e=="number"&&e<0&&(e+=this.length),typeof r=="number"&&r<0&&(r+=this.length),this.copy(null,0,e,r)};Ot.prototype.copy=function(e,r,i,n){if((typeof i!="number"||i<0)&&(i=0),(typeof n!="number"||n>this.length)&&(n=this.length),i>=this.length||n<=0)return e||Jn.alloc(0);let s=!!e,o=this._offset(i),a=n-i,l=a,c=s&&r||0,u=o[1];if(i===0&&n===this.length){if(!s)return this._bufs.length===1?this._bufs[0]:Jn.concat(this._bufs,this.length);for(let g=0;gf)this._bufs[g].copy(e,c,u),c+=f;else{this._bufs[g].copy(e,c,u,u+l),c+=f;break}l-=f,u&&(u=0)}return e.length>c?e.slice(0,c):e};Ot.prototype.shallowSlice=function(e,r){if(e=e||0,r=typeof r!="number"?this.length:r,e<0&&(e+=this.length),r<0&&(r+=this.length),e===r)return this._new();let i=this._offset(e),n=this._offset(r),s=this._bufs.slice(i[0],n[0]+1);return n[1]===0?s.pop():s[s.length-1]=s[s.length-1].slice(0,n[1]),i[1]!==0&&(s[0]=s[0].slice(i[1])),this._new(s)};Ot.prototype.toString=function(e,r,i){return this.slice(r,i).toString(e)};Ot.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};Ot.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let i=this._offset(e),n=i[0],s=i[1];for(;n=t.length){let l=o.indexOf(t,s);if(l!==-1)return this._reverseOffset([n,l]);s=o.length-t.length+1}else{let l=this._reverseOffset([n,s]);if(this._match(l,t))return l;s++}s=0}return-1};Ot.prototype._match=function(t,e){if(this.length-t{"use strict";var FR=Hu().Duplex,Zqe=Pa(),pd=rse();function ei(t){if(!(this instanceof ei))return new ei(t);if(typeof t=="function"){this._callback=t;let e=function(i){this._callback&&(this._callback(i),this._callback=null)}.bind(this);this.on("pipe",function(i){i.on("error",e)}),this.on("unpipe",function(i){i.removeListener("error",e)}),t=null}pd._init.call(this,t),FR.call(this)}Zqe(ei,FR);Object.assign(ei.prototype,pd.prototype);ei.prototype._new=function(e){return new ei(e)};ei.prototype._write=function(e,r,i){this._appendBuffer(e),typeof i=="function"&&i()};ei.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};ei.prototype.end=function(e){FR.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};ei.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e)};ei.prototype._isBufferList=function(e){return e instanceof ei||e instanceof pd||ei.isBufferList(e)};ei.isBufferList=pd.isBufferList;xB.exports=ei;xB.exports.BufferListStream=ei;xB.exports.BufferList=pd});var NR=C(ju=>{var _qe=Buffer.alloc,$qe="0000000000000000000",eJe="7777777777777777777",nse="0".charCodeAt(0),sse=Buffer.from("ustar\0","binary"),tJe=Buffer.from("00","binary"),rJe=Buffer.from("ustar ","binary"),iJe=Buffer.from(" \0","binary"),nJe=parseInt("7777",8),dd=257,RR=263,sJe=function(t,e,r){return typeof t!="number"?r:(t=~~t,t>=e?e:t>=0||(t+=e,t>=0)?t:0)},oJe=function(t){switch(t){case 0:return"file";case 1:return"link";case 2:return"symlink";case 3:return"character-device";case 4:return"block-device";case 5:return"directory";case 6:return"fifo";case 7:return"contiguous-file";case 72:return"pax-header";case 55:return"pax-global-header";case 27:return"gnu-long-link-path";case 28:case 30:return"gnu-long-path"}return null},aJe=function(t){switch(t){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72}return 0},ose=function(t,e,r,i){for(;re?eJe.slice(0,e)+" ":$qe.slice(0,e-t.length)+t+" "};function AJe(t){var e;if(t[0]===128)e=!0;else if(t[0]===255)e=!1;else return null;for(var r=[],i=t.length-1;i>0;i--){var n=t[i];e?r.push(n):r.push(255-n)}var s=0,o=r.length;for(i=0;i=Math.pow(10,r)&&r++,e+r+t};ju.decodeLongPath=function(t,e){return Gu(t,0,t.length,e)};ju.encodePax=function(t){var e="";t.name&&(e+=LR(" path="+t.name+` -`)),t.linkname&&(e+=LR(" linkpath="+t.linkname+` -`));var r=t.pax;if(r)for(var i in r)e+=LR(" "+i+"="+r[i]+` -`);return Buffer.from(e)};ju.decodePax=function(t){for(var e={};t.length;){for(var r=0;r100;){var n=r.indexOf("/");if(n===-1)return null;i+=i?"/"+r.slice(0,n):r.slice(0,n),r=r.slice(n+1)}return Buffer.byteLength(r)>100||Buffer.byteLength(i)>155||t.linkname&&Buffer.byteLength(t.linkname)>100?null:(e.write(r),e.write(Na(t.mode&nJe,6),100),e.write(Na(t.uid,6),108),e.write(Na(t.gid,6),116),e.write(Na(t.size,11),124),e.write(Na(t.mtime.getTime()/1e3|0,11),136),e[156]=nse+aJe(t.type),t.linkname&&e.write(t.linkname,157),sse.copy(e,dd),tJe.copy(e,RR),t.uname&&e.write(t.uname,265),t.gname&&e.write(t.gname,297),e.write(Na(t.devmajor||0,6),329),e.write(Na(t.devminor||0,6),337),i&&e.write(i,345),e.write(Na(ase(e),6),148),e)};ju.decode=function(t,e,r){var i=t[156]===0?0:t[156]-nse,n=Gu(t,0,100,e),s=Ma(t,100,8),o=Ma(t,108,8),a=Ma(t,116,8),l=Ma(t,124,12),c=Ma(t,136,12),u=oJe(i),g=t[157]===0?null:Gu(t,157,100,e),f=Gu(t,265,32),h=Gu(t,297,32),p=Ma(t,329,8),m=Ma(t,337,8),I=ase(t);if(I===8*32)return null;if(I!==Ma(t,148,8))throw new Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(sse.compare(t,dd,dd+6)===0)t[345]&&(n=Gu(t,345,155,e)+"/"+n);else if(!(rJe.compare(t,dd,dd+6)===0&&iJe.compare(t,RR,RR+2)===0)){if(!r)throw new Error("Invalid tar header: unknown format.")}return i===0&&n&&n[n.length-1]==="/"&&(i=5),{name:n,mode:s,uid:o,gid:a,size:l,mtime:new Date(1e3*c),type:u,linkname:g,uname:f,gname:h,devmajor:p,devminor:m}}});var hse=C((kEt,Ase)=>{var lse=require("util"),lJe=ise(),Cd=NR(),cse=Hu().Writable,use=Hu().PassThrough,gse=function(){},fse=function(t){return t&=511,t&&512-t},cJe=function(t,e){var r=new kB(t,e);return r.end(),r},uJe=function(t,e){return e.path&&(t.name=e.path),e.linkpath&&(t.linkname=e.linkpath),e.size&&(t.size=parseInt(e.size,10)),t.pax=e,t},kB=function(t,e){this._parent=t,this.offset=e,use.call(this,{autoDestroy:!1})};lse.inherits(kB,use);kB.prototype.destroy=function(t){this._parent.destroy(t)};var bo=function(t){if(!(this instanceof bo))return new bo(t);cse.call(this,t),t=t||{},this._offset=0,this._buffer=lJe(),this._missing=0,this._partial=!1,this._onparse=gse,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,r=e._buffer,i=function(){e._continue()},n=function(f){if(e._locked=!1,f)return e.destroy(f);e._stream||i()},s=function(){e._stream=null;var f=fse(e._header.size);f?e._parse(f,o):e._parse(512,g),e._locked||i()},o=function(){e._buffer.consume(fse(e._header.size)),e._parse(512,g),i()},a=function(){var f=e._header.size;e._paxGlobal=Cd.decodePax(r.slice(0,f)),r.consume(f),s()},l=function(){var f=e._header.size;e._pax=Cd.decodePax(r.slice(0,f)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),r.consume(f),s()},c=function(){var f=e._header.size;this._gnuLongPath=Cd.decodeLongPath(r.slice(0,f),t.filenameEncoding),r.consume(f),s()},u=function(){var f=e._header.size;this._gnuLongLinkPath=Cd.decodeLongPath(r.slice(0,f),t.filenameEncoding),r.consume(f),s()},g=function(){var f=e._offset,h;try{h=e._header=Cd.decode(r.slice(0,512),t.filenameEncoding,t.allowUnknownFormat)}catch(p){e.emit("error",p)}if(r.consume(512),!h){e._parse(512,g),i();return}if(h.type==="gnu-long-path"){e._parse(h.size,c),i();return}if(h.type==="gnu-long-link-path"){e._parse(h.size,u),i();return}if(h.type==="pax-global-header"){e._parse(h.size,a),i();return}if(h.type==="pax-header"){e._parse(h.size,l),i();return}if(e._gnuLongPath&&(h.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(h.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=h=uJe(h,e._pax),e._pax=null),e._locked=!0,!h.size||h.type==="directory"){e._parse(512,g),e.emit("entry",h,cJe(e,f),n);return}e._stream=new kB(e,f),e.emit("entry",h,e._stream,n),e._parse(h.size,s),i()};this._onheader=g,this._parse(512,g)};lse.inherits(bo,cse);bo.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.emit("close"))};bo.prototype._parse=function(t,e){this._destroyed||(this._offset+=t,this._missing=t,e===this._onheader&&(this._partial=!1),this._onparse=e)};bo.prototype._continue=function(){if(!this._destroyed){var t=this._cb;this._cb=gse,this._overflow?this._write(this._overflow,void 0,t):t()}};bo.prototype._write=function(t,e,r){if(!this._destroyed){var i=this._stream,n=this._buffer,s=this._missing;if(t.length&&(this._partial=!0),t.lengths&&(o=t.slice(s),t=t.slice(0,s)),i?i.end(t):n.append(t),this._overflow=o,this._onparse()}};bo.prototype._final=function(t){if(this._partial)return this.destroy(new Error("Unexpected end of data"));t()};Ase.exports=bo});var dse=C((PEt,pse)=>{pse.exports=require("fs").constants||require("constants")});var yse=C((vEt,Cse)=>{var qu=dse(),mse=Pb(),PB=Pa(),gJe=Buffer.alloc,Ise=Hu().Readable,Ju=Hu().Writable,fJe=require("string_decoder").StringDecoder,vB=NR(),hJe=parseInt("755",8),pJe=parseInt("644",8),Ese=gJe(1024),MR=function(){},OR=function(t,e){e&=511,e&&t.push(Ese.slice(0,512-e))};function dJe(t){switch(t&qu.S_IFMT){case qu.S_IFBLK:return"block-device";case qu.S_IFCHR:return"character-device";case qu.S_IFDIR:return"directory";case qu.S_IFIFO:return"fifo";case qu.S_IFLNK:return"symlink"}return"file"}var FB=function(t){Ju.call(this),this.written=0,this._to=t,this._destroyed=!1};PB(FB,Ju);FB.prototype._write=function(t,e,r){if(this.written+=t.length,this._to.push(t))return r();this._to._drain=r};FB.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var RB=function(){Ju.call(this),this.linkname="",this._decoder=new fJe("utf-8"),this._destroyed=!1};PB(RB,Ju);RB.prototype._write=function(t,e,r){this.linkname+=this._decoder.write(t),r()};RB.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var md=function(){Ju.call(this),this._destroyed=!1};PB(md,Ju);md.prototype._write=function(t,e,r){r(new Error("No body allowed for this entry"))};md.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var Qs=function(t){if(!(this instanceof Qs))return new Qs(t);Ise.call(this,t),this._drain=MR,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};PB(Qs,Ise);Qs.prototype.entry=function(t,e,r){if(this._stream)throw new Error("already piping an entry");if(!(this._finalized||this._destroyed)){typeof e=="function"&&(r=e,e=null),r||(r=MR);var i=this;if((!t.size||t.type==="symlink")&&(t.size=0),t.type||(t.type=dJe(t.mode)),t.mode||(t.mode=t.type==="directory"?hJe:pJe),t.uid||(t.uid=0),t.gid||(t.gid=0),t.mtime||(t.mtime=new Date),typeof e=="string"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){t.size=e.length,this._encode(t);var n=this.push(e);return OR(i,t.size),n?process.nextTick(r):this._drain=r,new md}if(t.type==="symlink"&&!t.linkname){var s=new RB;return mse(s,function(a){if(a)return i.destroy(),r(a);t.linkname=s.linkname,i._encode(t),r()}),s}if(this._encode(t),t.type!=="file"&&t.type!=="contiguous-file")return process.nextTick(r),new md;var o=new FB(this);return this._stream=o,mse(o,function(a){if(i._stream=null,a)return i.destroy(),r(a);if(o.written!==t.size)return i.destroy(),r(new Error("size mismatch"));OR(i,t.size),i._finalizing&&i.finalize(),r()}),o}};Qs.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(Ese),this.push(null))};Qs.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.destroy&&this._stream.destroy())};Qs.prototype._encode=function(t){if(!t.pax){var e=vB.encode(t);if(e){this.push(e);return}}this._encodePax(t)};Qs.prototype._encodePax=function(t){var e=vB.encodePax({name:t.name,linkname:t.linkname,pax:t.pax}),r={name:"PaxHeader",mode:t.mode,uid:t.uid,gid:t.gid,size:e.length,mtime:t.mtime,type:"pax-header",linkname:t.linkname&&"PaxHeader",uname:t.uname,gname:t.gname,devmajor:t.devmajor,devminor:t.devminor};this.push(vB.encode(r)),this.push(e),OR(this,e.length),r.size=t.size,r.type=t.type,this.push(vB.encode(r))};Qs.prototype._read=function(t){var e=this._drain;this._drain=MR,e()};Cse.exports=Qs});var Bse=C(TR=>{TR.extract=hse();TR.pack=yse()});var Nse=C((eyt,vse)=>{"use strict";var Wu=class{constructor(e,r,i){this.__specs=e||{},Object.keys(this.__specs).forEach(n=>{if(typeof this.__specs[n]=="string"){let s=this.__specs[n],o=this.__specs[s];if(o){let a=o.aliases||[];a.push(n,s),o.aliases=[...new Set(a)],this.__specs[n]=o}else throw new Error(`Alias refers to invalid key: ${s} -> ${n}`)}}),this.__opts=r||{},this.__providers=Rse(i.filter(n=>n!=null&&typeof n=="object")),this.__isFiggyPudding=!0}get(e){return GR(this,e,!0)}get[Symbol.toStringTag](){return"FiggyPudding"}forEach(e,r=this){for(let[i,n]of this.entries())e.call(r,n,i,this)}toJSON(){let e={};return this.forEach((r,i)=>{e[i]=r}),e}*entries(e){for(let i of Object.keys(this.__specs))yield[i,this.get(i)];let r=e||this.__opts.other;if(r){let i=new Set;for(let n of this.__providers){let s=n.entries?n.entries(r):kJe(n);for(let[o,a]of s)r(o)&&!i.has(o)&&(i.add(o),yield[o,a])}}}*[Symbol.iterator](){for(let[e,r]of this.entries())yield[e,r]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Wu(this.__specs,this.__opts,Rse(this.__providers).concat(e)),Fse)}};try{let t=require("util");Wu.prototype[t.inspect.custom]=function(e,r){return this[Symbol.toStringTag]+" "+t.inspect(this.toJSON(),r)}}catch(t){}function PJe(t){throw Object.assign(new Error(`invalid config key requested: ${t}`),{code:"EBADKEY"})}function GR(t,e,r){let i=t.__specs[e];if(r&&!i&&(!t.__opts.other||!t.__opts.other(e)))PJe(e);else{i||(i={});let n;for(let s of t.__providers){if(n=Lse(e,s),n===void 0&&i.aliases&&i.aliases.length){for(let o of i.aliases)if(o!==e&&(n=Lse(o,s),n!==void 0))break}if(n!==void 0)break}return n===void 0&&i.default!==void 0?typeof i.default=="function"?i.default(t):i.default:n}}function Lse(t,e){let r;return e.__isFiggyPudding?r=GR(e,t,!1):typeof e.get=="function"?r=e.get(t):r=e[t],r}var Fse={has(t,e){return e in t.__specs&&GR(t,e,!1)!==void 0},ownKeys(t){return Object.keys(t.__specs)},get(t,e){return typeof e=="symbol"||e.slice(0,2)==="__"||e in Wu.prototype?t[e]:t.get(e)},set(t,e,r){if(typeof e=="symbol"||e.slice(0,2)==="__")return t[e]=r,!0;throw new Error("figgyPudding options cannot be modified. Use .concat() instead.")},deleteProperty(){throw new Error("figgyPudding options cannot be deleted. Use .concat() and shadow them instead.")}};vse.exports=vJe;function vJe(t,e){function r(...i){return new Proxy(new Wu(t,e,i),Fse)}return r}function Rse(t){let e=[];return t.forEach(r=>e.unshift(r)),e}function kJe(t){return Object.keys(t).map(e=>[e,t[e]])}});var Tse=C((tyt,bs)=>{"use strict";var Ed=require("crypto"),FJe=Nse(),RJe=require("stream").Transform,Mse=["sha256","sha384","sha512"],LJe=/^[a-z0-9+/]+(?:=?=?)$/i,NJe=/^([^-]+)-([^?]+)([?\S*]*)$/,MJe=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/,OJe=/^[\x21-\x7E]+$/,mi=FJe({algorithms:{default:["sha512"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>TJe},Promise:{default:()=>Promise},sep:{default:" "},single:{default:!1},size:{},strict:{default:!1}}),Il=class{get isHash(){return!0}constructor(e,r){r=mi(r);let i=!!r.strict;this.source=e.trim();let n=this.source.match(i?MJe:NJe);if(!n||i&&!Mse.some(o=>o===n[1]))return;this.algorithm=n[1],this.digest=n[2];let s=n[3];this.options=s?s.slice(1).split("?"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,"base64").toString("hex")}toJSON(){return this.toString()}toString(e){if(e=mi(e),e.strict&&!(Mse.some(i=>i===this.algorithm)&&this.digest.match(LJe)&&(this.options||[]).every(i=>i.match(OJe))))return"";let r=this.options&&this.options.length?`?${this.options.join("?")}`:"";return`${this.algorithm}-${this.digest}${r}`}},zu=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=mi(e);let r=e.sep||" ";return e.strict&&(r=r.replace(/\S+/g," ")),Object.keys(this).map(i=>this[i].map(n=>Il.prototype.toString.call(n,e)).filter(n=>n.length).join(r)).filter(i=>i.length).join(r)}concat(e,r){r=mi(r);let i=typeof e=="string"?e:yd(e,r);return Ds(`${this.toString(r)} ${i}`,r)}hexDigest(){return Ds(this,{single:!0}).hexDigest()}match(e,r){r=mi(r);let i=Ds(e,r),n=i.pickAlgorithm(r);return this[n]&&i[n]&&this[n].find(s=>i[n].find(o=>s.digest===o.digest))||!1}pickAlgorithm(e){e=mi(e);let r=e.pickAlgorithm,i=Object.keys(this);if(!i.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return i.reduce((n,s)=>r(n,s)||n)}};bs.exports.parse=Ds;function Ds(t,e){if(e=mi(e),typeof t=="string")return qR(t,e);if(t.algorithm&&t.digest){let r=new zu;return r[t.algorithm]=[t],qR(yd(r,e),e)}else return qR(yd(t,e),e)}function qR(t,e){return e.single?new Il(t,e):t.trim().split(/\s+/).reduce((r,i)=>{let n=new Il(i,e);if(n.algorithm&&n.digest){let s=n.algorithm;r[s]||(r[s]=[]),r[s].push(n)}return r},new zu)}bs.exports.stringify=yd;function yd(t,e){return e=mi(e),t.algorithm&&t.digest?Il.prototype.toString.call(t,e):typeof t=="string"?yd(Ds(t,e),e):zu.prototype.toString.call(t,e)}bs.exports.fromHex=KJe;function KJe(t,e,r){r=mi(r);let i=r.options&&r.options.length?`?${r.options.join("?")}`:"";return Ds(`${e}-${Buffer.from(t,"hex").toString("base64")}${i}`,r)}bs.exports.fromData=UJe;function UJe(t,e){e=mi(e);let r=e.algorithms,i=e.options&&e.options.length?`?${e.options.join("?")}`:"";return r.reduce((n,s)=>{let o=Ed.createHash(s).update(t).digest("base64"),a=new Il(`${s}-${o}${i}`,e);if(a.algorithm&&a.digest){let l=a.algorithm;n[l]||(n[l]=[]),n[l].push(a)}return n},new zu)}bs.exports.fromStream=YJe;function YJe(t,e){e=mi(e);let r=e.Promise||Promise,i=JR(e);return new r((n,s)=>{t.pipe(i),t.on("error",s),i.on("error",s);let o;i.on("integrity",a=>{o=a}),i.on("end",()=>n(o)),i.on("data",()=>{})})}bs.exports.checkData=HJe;function HJe(t,e,r){if(r=mi(r),e=Ds(e,r),!Object.keys(e).length){if(r.error)throw Object.assign(new Error("No valid integrity hashes to check against"),{code:"EINTEGRITY"});return!1}let i=e.pickAlgorithm(r),n=Ed.createHash(i).update(t).digest("base64"),s=Ds({algorithm:i,digest:n}),o=s.match(e,r);if(o||!r.error)return o;if(typeof r.size=="number"&&t.length!==r.size){let a=new Error(`data size mismatch when checking ${e}. - Wanted: ${r.size} - Found: ${t.length}`);throw a.code="EBADSIZE",a.found=t.length,a.expected=r.size,a.sri=e,a}else{let a=new Error(`Integrity checksum failed when using ${i}: Wanted ${e}, but got ${s}. (${t.length} bytes)`);throw a.code="EINTEGRITY",a.found=s,a.expected=e,a.algorithm=i,a.sri=e,a}}bs.exports.checkStream=jJe;function jJe(t,e,r){r=mi(r);let i=r.Promise||Promise,n=JR(r.concat({integrity:e}));return new i((s,o)=>{t.pipe(n),t.on("error",o),n.on("error",o);let a;n.on("verified",l=>{a=l}),n.on("end",()=>s(a)),n.on("data",()=>{})})}bs.exports.integrityStream=JR;function JR(t){t=mi(t);let e=t.integrity&&Ds(t.integrity,t),r=e&&Object.keys(e).length,i=r&&e.pickAlgorithm(t),n=r&&e[i],s=Array.from(new Set(t.algorithms.concat(i?[i]:[]))),o=s.map(Ed.createHash),a=0,l=new RJe({transform(c,u,g){a+=c.length,o.forEach(f=>f.update(c,u)),g(null,c,u)}}).on("end",()=>{let c=t.options&&t.options.length?`?${t.options.join("?")}`:"",u=Ds(o.map((f,h)=>`${s[h]}-${f.digest("base64")}${c}`).join(" "),t),g=r&&u.match(e,t);if(typeof t.size=="number"&&a!==t.size){let f=new Error(`stream size mismatch when checking ${e}. - Wanted: ${t.size} - Found: ${a}`);f.code="EBADSIZE",f.found=a,f.expected=t.size,f.sri=e,l.emit("error",f)}else if(t.integrity&&!g){let f=new Error(`${e} integrity checksum failed when using ${i}: wanted ${n} but got ${u}. (${a} bytes)`);f.code="EINTEGRITY",f.found=u,f.expected=n,f.algorithm=i,f.sri=e,l.emit("error",f)}else l.emit("size",a),l.emit("integrity",u),g&&l.emit("verified",g)});return l}bs.exports.create=GJe;function GJe(t){t=mi(t);let e=t.algorithms,r=t.options.length?`?${t.options.join("?")}`:"",i=e.map(Ed.createHash);return{update:function(n,s){return i.forEach(o=>o.update(n,s)),this},digest:function(n){return e.reduce((o,a)=>{let l=i.shift().digest("base64"),c=new Il(`${a}-${l}${r}`,t);if(c.algorithm&&c.digest){let u=c.algorithm;o[u]||(o[u]=[]),o[u].push(c)}return o},new zu)}}}var qJe=new Set(Ed.getHashes()),Ose=["md5","whirlpool","sha1","sha224","sha256","sha384","sha512","sha3","sha3-256","sha3-384","sha3-512","sha3_256","sha3_384","sha3_512"].filter(t=>qJe.has(t));function TJe(t,e){return Ose.indexOf(t.toLowerCase())>=Ose.indexOf(e.toLowerCase())?t:e}});var Oh={};et(Oh,{BuildType:()=>Vi,Cache:()=>ft,Configuration:()=>ce,DEFAULT_LOCK_FILENAME:()=>ok,DEFAULT_RC_FILENAME:()=>sk,FormatType:()=>ds,InstallMode:()=>kr,LightReport:()=>uo,LinkType:()=>ct,Manifest:()=>ze,MessageName:()=>z,PackageExtensionStatus:()=>qr,PackageExtensionType:()=>Dr,Project:()=>Re,ProjectLookup:()=>Ca,Report:()=>ci,ReportError:()=>_e,SettingsType:()=>ge,StreamReport:()=>xe,TAG_REGEXP:()=>Zc,TelemetryManager:()=>Mh,ThrowReport:()=>Br,VirtualFetcher:()=>Ih,Workspace:()=>Nh,WorkspaceResolver:()=>Ci,YarnVersion:()=>Er,execUtils:()=>Nr,folderUtils:()=>Yw,formatUtils:()=>ae,hashUtils:()=>Di,httpUtils:()=>Rt,miscUtils:()=>pe,scriptUtils:()=>Qt,semverUtils:()=>Pt,structUtils:()=>w,tgzUtils:()=>hr,treeUtils:()=>Un});var Nr={};et(Nr,{EndStrategy:()=>sn,execvp:()=>kae,pipevp:()=>Os});var kg={};et(kg,{AliasFS:()=>Ja,CwdFS:()=>yt,DEFAULT_COMPRESSION_LEVEL:()=>qa,FakeFS:()=>Ls,Filename:()=>xt,JailFS:()=>Ns,LazyFS:()=>bg,LinkStrategy:()=>Ig,NoFS:()=>BC,NodeFS:()=>Ft,PortablePath:()=>Qe,PosixFS:()=>Dg,ProxiedFS:()=>Lr,VirtualFS:()=>ir,ZipFS:()=>Qr,ZipOpenFS:()=>nn,extendFs:()=>QC,normalizeLineEndings:()=>Dl,npath:()=>O,opendir:()=>IC,patchFs:()=>Dw,ppath:()=>D,statUtils:()=>gw,toFilename:()=>rr,xfs:()=>N});var gw={};et(gw,{BigIntStatsEntry:()=>dg,DirEntry:()=>yL,StatEntry:()=>Ro,areStatsEqual:()=>hw,clearStats:()=>fC,convertToBigIntStats:()=>hC,makeDefaultStats:()=>Cg,makeEmptyStats:()=>Goe});var fw=re(require("util"));var tn=61440,vo=16384,Rs=32768,Fo=40960;var yL=class{constructor(){this.name="";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&tn)===vo}isFIFO(){return!1}isFile(){return(this.mode&tn)===Rs}isSocket(){return!1}isSymbolicLink(){return(this.mode&tn)===Fo}},Ro=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=Rs|420;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&tn)===vo}isFIFO(){return!1}isFile(){return(this.mode&tn)===Rs}isSocket(){return!1}isSymbolicLink(){return(this.mode&tn)===Fo}},dg=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(Rs|420);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(tn))===BigInt(vo)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(tn))===BigInt(Rs)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(tn))===BigInt(Fo)}};function Cg(){return new Ro}function Goe(){return fC(Cg())}function fC(t){for(let e in t)if(Object.prototype.hasOwnProperty.call(t,e)){let r=t[e];typeof r=="number"?t[e]=0:typeof r=="bigint"?t[e]=BigInt(0):fw.types.isDate(r)&&(t[e]=new Date(0))}return t}function hC(t){let e=new dg;for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let i=t[r];typeof i=="number"?e[r]=BigInt(i):fw.types.isDate(i)&&(e[r]=new Date(i))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function hw(t,e){if(t.atimeMs!==e.atimeMs||t.birthtimeMs!==e.birthtimeMs||t.blksize!==e.blksize||t.blocks!==e.blocks||t.ctimeMs!==e.ctimeMs||t.dev!==e.dev||t.gid!==e.gid||t.ino!==e.ino||t.isBlockDevice()!==e.isBlockDevice()||t.isCharacterDevice()!==e.isCharacterDevice()||t.isDirectory()!==e.isDirectory()||t.isFIFO()!==e.isFIFO()||t.isFile()!==e.isFile()||t.isSocket()!==e.isSocket()||t.isSymbolicLink()!==e.isSymbolicLink()||t.mode!==e.mode||t.mtimeMs!==e.mtimeMs||t.nlink!==e.nlink||t.rdev!==e.rdev||t.size!==e.size||t.uid!==e.uid)return!1;let r=t,i=e;return!(r.atimeNs!==i.atimeNs||r.mtimeNs!==i.mtimeNs||r.ctimeNs!==i.ctimeNs||r.birthtimeNs!==i.birthtimeNs)}var dC=re(require("fs"));var mg=re(require("path")),BL;(function(i){i[i.File=0]="File",i[i.Portable=1]="Portable",i[i.Native=2]="Native"})(BL||(BL={}));var Qe={root:"/",dot:"."},xt={nodeModules:"node_modules",manifest:"package.json",lockfile:"yarn.lock",virtual:"__virtual__",pnpJs:".pnp.js",pnpCjs:".pnp.cjs",rc:".yarnrc.yml"},O=Object.create(mg.default),D=Object.create(mg.default.posix);O.cwd=()=>process.cwd();D.cwd=()=>pw(process.cwd());D.resolve=(...t)=>t.length>0&&D.isAbsolute(t[0])?mg.default.posix.resolve(...t):mg.default.posix.resolve(D.cwd(),...t);var wL=function(t,e,r){return e=t.normalize(e),r=t.normalize(r),e===r?".":(e.endsWith(t.sep)||(e=e+t.sep),r.startsWith(e)?r.slice(e.length):null)};O.fromPortablePath=QL;O.toPortablePath=pw;O.contains=(t,e)=>wL(O,t,e);D.contains=(t,e)=>wL(D,t,e);var bL=/^([a-zA-Z]:.*)$/,DL=/^\\\\(\.\\)?(.*)$/,SL=/^\/([a-zA-Z]:.*)$/,xL=/^\/unc\/(\.dot\/)?(.*)$/;function QL(t){if(process.platform!=="win32")return t;if(t.match(SL))t=t.replace(SL,"$1");else if(t.match(xL))t=t.replace(xL,(e,r,i)=>`\\\\${r?".\\":""}${i}`);else return t;return t.replace(/\//g,"\\")}function pw(t){return process.platform!=="win32"?t:(t.match(bL)?t=t.replace(bL,"/$1"):t.match(DL)&&(t=t.replace(DL,(e,r,i)=>`/unc/${r?".dot/":""}${i}`)),t.replace(/\\/g,"/"))}function pC(t,e){return t===O?QL(e):pw(e)}function rr(t){if(O.parse(t).dir!==""||D.parse(t).dir!=="")throw new Error(`Invalid filename: "${t}"`);return t}var kL=new Date(315532800*1e3),Ig;(function(r){r.Allow="allow",r.ReadOnly="readOnly"})(Ig||(Ig={}));async function PL(t,e,r,i,n){let s=t.pathUtils.normalize(e),o=r.pathUtils.normalize(i),a=[],l=[];await t.mkdirPromise(t.pathUtils.dirname(e),{recursive:!0});let c=typeof t.lutimesPromise=="function"?t.lutimesPromise.bind(t):t.utimesPromise.bind(t);await dw(a,l,c,t,s,r,o,n);for(let u of a)await u();await Promise.all(l.map(u=>u()))}async function dw(t,e,r,i,n,s,o,a){var f,h;let l=await qoe(i,n),c=await s.lstatPromise(o),u=a.stableTime?{mtime:kL,atime:kL}:c,g;switch(!0){case c.isDirectory():g=await Joe(t,e,r,i,n,l,s,o,c,a);break;case c.isFile():g=await Woe(t,e,r,i,n,l,s,o,c,a);break;case c.isSymbolicLink():g=await zoe(t,e,r,i,n,l,s,o,c,a);break;default:throw new Error(`Unsupported file type (${c.mode})`)}return(g||((f=l==null?void 0:l.mtime)==null?void 0:f.getTime())!==u.mtime.getTime()||((h=l==null?void 0:l.atime)==null?void 0:h.getTime())!==u.atime.getTime())&&(e.push(()=>r(n,u.atime,u.mtime)),g=!0),(l===null||(l.mode&511)!=(c.mode&511))&&(e.push(()=>i.chmodPromise(n,c.mode&511)),g=!0),g}async function qoe(t,e){try{return await t.lstatPromise(e)}catch(r){return null}}async function Joe(t,e,r,i,n,s,o,a,l,c){if(s!==null&&!s.isDirectory())if(c.overwrite)t.push(async()=>i.removePromise(n)),s=null;else return!1;let u=!1;s===null&&(t.push(async()=>i.mkdirPromise(n,{mode:l.mode})),u=!0);let g=await o.readdirPromise(a);if(c.stableSort)for(let f of g.sort())await dw(t,e,r,i,i.pathUtils.join(n,f),o,o.pathUtils.join(a,f),c)&&(u=!0);else(await Promise.all(g.map(async h=>{await dw(t,e,r,i,i.pathUtils.join(n,h),o,o.pathUtils.join(a,h),c)}))).some(h=>h)&&(u=!0);return u}var Cw=new WeakMap;function mw(t,e,r,i,n){return async()=>{await t.linkPromise(r,e),n===Ig.ReadOnly&&(i.mode&=~146,await t.chmodPromise(e,i.mode))}}function Voe(t,e,r,i,n){let s=Cw.get(t);return typeof s=="undefined"?async()=>{try{await t.copyFilePromise(r,e,dC.default.constants.COPYFILE_FICLONE_FORCE),Cw.set(t,!0)}catch(o){if(o.code==="ENOSYS"||o.code==="ENOTSUP")Cw.set(t,!1),await mw(t,e,r,i,n)();else throw o}}:s?async()=>t.copyFilePromise(r,e,dC.default.constants.COPYFILE_FICLONE_FORCE):mw(t,e,r,i,n)}async function Woe(t,e,r,i,n,s,o,a,l,c){var f;if(s!==null)if(c.overwrite)t.push(async()=>i.removePromise(n)),s=null;else return!1;let u=(f=c.linkStrategy)!=null?f:null,g=i===o?u!==null?Voe(i,n,a,l,u):async()=>i.copyFilePromise(a,n,dC.default.constants.COPYFILE_FICLONE):u!==null?mw(i,n,a,l,u):async()=>i.writeFilePromise(n,await o.readFilePromise(a));return t.push(async()=>g()),!0}async function zoe(t,e,r,i,n,s,o,a,l,c){if(s!==null)if(c.overwrite)t.push(async()=>i.removePromise(n)),s=null;else return!1;return t.push(async()=>{await i.symlinkPromise(pC(i.pathUtils,await o.readlinkPromise(a)),n)}),!0}function rn(t,e){return Object.assign(new Error(`${t}: ${e}`),{code:t})}function CC(t){return rn("EBUSY",t)}function Eg(t,e){return rn("ENOSYS",`${t}, ${e}`)}function Lo(t){return rn("EINVAL",`invalid argument, ${t}`)}function ti(t){return rn("EBADF",`bad file descriptor, ${t}`)}function kn(t){return rn("ENOENT",`no such file or directory, ${t}`)}function Xn(t){return rn("ENOTDIR",`not a directory, ${t}`)}function yg(t){return rn("EISDIR",`illegal operation on a directory, ${t}`)}function mC(t){return rn("EEXIST",`file already exists, ${t}`)}function Bi(t){return rn("EROFS",`read-only filesystem, ${t}`)}function vL(t){return rn("ENOTEMPTY",`directory not empty, ${t}`)}function FL(t){return rn("EOPNOTSUPP",`operation not supported, ${t}`)}function RL(){return rn("ERR_DIR_CLOSED","Directory handle was closed")}var Iw=class extends Error{constructor(e,r){super(e);this.name="Libzip Error",this.code=r}};var LL=class{constructor(e,r,i={}){this.path=e;this.nextDirent=r;this.opts=i;this.closed=!1}throwIfClosed(){if(this.closed)throw RL()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let r=this.readSync();return typeof e!="undefined"?e(null,r):Promise.resolve(r)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e!="undefined"?e(null):Promise.resolve()}closeSync(){var e,r;this.throwIfClosed(),(r=(e=this.opts).onClose)==null||r.call(e),this.closed=!0}};function IC(t,e,r,i){let n=()=>{let s=r.shift();return typeof s=="undefined"?null:Object.assign(t.statSync(t.pathUtils.join(e,s)),{name:s})};return new LL(e,n,i)}var NL=re(require("os"));var Ls=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:r=!1}={}){let i=[e];for(;i.length>0;){let n=i.shift();if((await this.lstatPromise(n)).isDirectory()){let o=await this.readdirPromise(n);if(r)for(let a of o.sort())i.push(this.pathUtils.join(n,a));else throw new Error("Not supported")}else yield n}}async removePromise(e,{recursive:r=!0,maxRetries:i=5}={}){let n;try{n=await this.lstatPromise(e)}catch(s){if(s.code==="ENOENT")return;throw s}if(n.isDirectory()){if(r){let o=await this.readdirPromise(e);await Promise.all(o.map(a=>this.removePromise(this.pathUtils.resolve(e,a))))}let s=0;do try{await this.rmdirPromise(e);break}catch(o){if(o.code==="EBUSY"||o.code==="ENOTEMPTY"){if(i===0)break;await new Promise(a=>setTimeout(a,s*100));continue}else throw o}while(s++{let l;try{[l]=await this.readJsonPromise(i)}catch(c){return Date.now()-s<500}try{return process.kill(l,0),!0}catch(c){return!1}};for(;o===null;)try{o=await this.openPromise(i,"wx")}catch(l){if(l.code==="EEXIST"){if(!await a())try{await this.unlinkPromise(i);continue}catch(c){}if(Date.now()-s<60*1e3)await new Promise(c=>setTimeout(c,n));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${i})`)}else throw l}await this.writePromise(o,JSON.stringify([process.pid]));try{return await r()}finally{try{await this.closePromise(o),await this.unlinkPromise(i)}catch(l){}}}async readJsonPromise(e){let r=await this.readFilePromise(e,"utf8");try{return JSON.parse(r)}catch(i){throw i.message+=` (in ${e})`,i}}readJsonSync(e){let r=this.readFileSync(e,"utf8");try{return JSON.parse(r)}catch(i){throw i.message+=` (in ${e})`,i}}async writeJsonPromise(e,r){return await this.writeFilePromise(e,`${JSON.stringify(r,null,2)} -`)}writeJsonSync(e,r){return this.writeFileSync(e,`${JSON.stringify(r,null,2)} -`)}async preserveTimePromise(e,r){let i=await this.lstatPromise(e),n=await r();typeof n!="undefined"&&(e=n),this.lutimesPromise?await this.lutimesPromise(e,i.atime,i.mtime):i.isSymbolicLink()||await this.utimesPromise(e,i.atime,i.mtime)}async preserveTimeSync(e,r){let i=this.lstatSync(e),n=r();typeof n!="undefined"&&(e=n),this.lutimesSync?this.lutimesSync(e,i.atime,i.mtime):i.isSymbolicLink()||this.utimesSync(e,i.atime,i.mtime)}};Ls.DEFAULT_TIME=315532800;var Ha=class extends Ls{constructor(){super(D)}};function Xoe(t){let e=t.match(/\r?\n/g);if(e===null)return NL.EOL;let r=e.filter(n=>n===`\r -`).length,i=e.length-r;return r>i?`\r -`:` -`}function Dl(t,e){return e.replace(/\r?\n/g,Xoe(t))}var Sl=re(require("fs")),Ew=re(require("stream")),KL=re(require("util")),yw=re(require("zlib"));var ML=re(require("fs"));var Ft=class extends Ha{constructor(e=ML.default){super();this.realFs=e,typeof this.realFs.lutimes!="undefined"&&(this.lutimesPromise=this.lutimesPromiseImpl,this.lutimesSync=this.lutimesSyncImpl)}getExtractHint(){return!1}getRealPath(){return Qe.root}resolve(e){return D.resolve(e)}async openPromise(e,r,i){return await new Promise((n,s)=>{this.realFs.open(O.fromPortablePath(e),r,i,this.makeCallback(n,s))})}openSync(e,r,i){return this.realFs.openSync(O.fromPortablePath(e),r,i)}async opendirPromise(e,r){return await new Promise((i,n)=>{typeof r!="undefined"?this.realFs.opendir(O.fromPortablePath(e),r,this.makeCallback(i,n)):this.realFs.opendir(O.fromPortablePath(e),this.makeCallback(i,n))}).then(i=>Object.defineProperty(i,"path",{value:e,configurable:!0,writable:!0}))}opendirSync(e,r){let i=typeof r!="undefined"?this.realFs.opendirSync(O.fromPortablePath(e),r):this.realFs.opendirSync(O.fromPortablePath(e));return Object.defineProperty(i,"path",{value:e,configurable:!0,writable:!0})}async readPromise(e,r,i=0,n=0,s=-1){return await new Promise((o,a)=>{this.realFs.read(e,r,i,n,s,(l,c)=>{l?a(l):o(c)})})}readSync(e,r,i,n,s){return this.realFs.readSync(e,r,i,n,s)}async writePromise(e,r,i,n,s){return await new Promise((o,a)=>typeof r=="string"?this.realFs.write(e,r,i,this.makeCallback(o,a)):this.realFs.write(e,r,i,n,s,this.makeCallback(o,a)))}writeSync(e,r,i,n,s){return typeof r=="string"?this.realFs.writeSync(e,r,i):this.realFs.writeSync(e,r,i,n,s)}async closePromise(e){await new Promise((r,i)=>{this.realFs.close(e,this.makeCallback(r,i))})}closeSync(e){this.realFs.closeSync(e)}createReadStream(e,r){let i=e!==null?O.fromPortablePath(e):e;return this.realFs.createReadStream(i,r)}createWriteStream(e,r){let i=e!==null?O.fromPortablePath(e):e;return this.realFs.createWriteStream(i,r)}async realpathPromise(e){return await new Promise((r,i)=>{this.realFs.realpath(O.fromPortablePath(e),{},this.makeCallback(r,i))}).then(r=>O.toPortablePath(r))}realpathSync(e){return O.toPortablePath(this.realFs.realpathSync(O.fromPortablePath(e),{}))}async existsPromise(e){return await new Promise(r=>{this.realFs.exists(O.fromPortablePath(e),r)})}accessSync(e,r){return this.realFs.accessSync(O.fromPortablePath(e),r)}async accessPromise(e,r){return await new Promise((i,n)=>{this.realFs.access(O.fromPortablePath(e),r,this.makeCallback(i,n))})}existsSync(e){return this.realFs.existsSync(O.fromPortablePath(e))}async statPromise(e,r){return await new Promise((i,n)=>{r?this.realFs.stat(O.fromPortablePath(e),r,this.makeCallback(i,n)):this.realFs.stat(O.fromPortablePath(e),this.makeCallback(i,n))})}statSync(e,r){return r?this.realFs.statSync(O.fromPortablePath(e),r):this.realFs.statSync(O.fromPortablePath(e))}async fstatPromise(e,r){return await new Promise((i,n)=>{r?this.realFs.fstat(e,r,this.makeCallback(i,n)):this.realFs.fstat(e,this.makeCallback(i,n))})}fstatSync(e,r){return r?this.realFs.fstatSync(e,r):this.realFs.fstatSync(e)}async lstatPromise(e,r){return await new Promise((i,n)=>{r?this.realFs.lstat(O.fromPortablePath(e),r,this.makeCallback(i,n)):this.realFs.lstat(O.fromPortablePath(e),this.makeCallback(i,n))})}lstatSync(e,r){return r?this.realFs.lstatSync(O.fromPortablePath(e),r):this.realFs.lstatSync(O.fromPortablePath(e))}async chmodPromise(e,r){return await new Promise((i,n)=>{this.realFs.chmod(O.fromPortablePath(e),r,this.makeCallback(i,n))})}chmodSync(e,r){return this.realFs.chmodSync(O.fromPortablePath(e),r)}async chownPromise(e,r,i){return await new Promise((n,s)=>{this.realFs.chown(O.fromPortablePath(e),r,i,this.makeCallback(n,s))})}chownSync(e,r,i){return this.realFs.chownSync(O.fromPortablePath(e),r,i)}async renamePromise(e,r){return await new Promise((i,n)=>{this.realFs.rename(O.fromPortablePath(e),O.fromPortablePath(r),this.makeCallback(i,n))})}renameSync(e,r){return this.realFs.renameSync(O.fromPortablePath(e),O.fromPortablePath(r))}async copyFilePromise(e,r,i=0){return await new Promise((n,s)=>{this.realFs.copyFile(O.fromPortablePath(e),O.fromPortablePath(r),i,this.makeCallback(n,s))})}copyFileSync(e,r,i=0){return this.realFs.copyFileSync(O.fromPortablePath(e),O.fromPortablePath(r),i)}async appendFilePromise(e,r,i){return await new Promise((n,s)=>{let o=typeof e=="string"?O.fromPortablePath(e):e;i?this.realFs.appendFile(o,r,i,this.makeCallback(n,s)):this.realFs.appendFile(o,r,this.makeCallback(n,s))})}appendFileSync(e,r,i){let n=typeof e=="string"?O.fromPortablePath(e):e;i?this.realFs.appendFileSync(n,r,i):this.realFs.appendFileSync(n,r)}async writeFilePromise(e,r,i){return await new Promise((n,s)=>{let o=typeof e=="string"?O.fromPortablePath(e):e;i?this.realFs.writeFile(o,r,i,this.makeCallback(n,s)):this.realFs.writeFile(o,r,this.makeCallback(n,s))})}writeFileSync(e,r,i){let n=typeof e=="string"?O.fromPortablePath(e):e;i?this.realFs.writeFileSync(n,r,i):this.realFs.writeFileSync(n,r)}async unlinkPromise(e){return await new Promise((r,i)=>{this.realFs.unlink(O.fromPortablePath(e),this.makeCallback(r,i))})}unlinkSync(e){return this.realFs.unlinkSync(O.fromPortablePath(e))}async utimesPromise(e,r,i){return await new Promise((n,s)=>{this.realFs.utimes(O.fromPortablePath(e),r,i,this.makeCallback(n,s))})}utimesSync(e,r,i){this.realFs.utimesSync(O.fromPortablePath(e),r,i)}async lutimesPromiseImpl(e,r,i){let n=this.realFs.lutimes;if(typeof n=="undefined")throw Eg("unavailable Node binding",`lutimes '${e}'`);return await new Promise((s,o)=>{n.call(this.realFs,O.fromPortablePath(e),r,i,this.makeCallback(s,o))})}lutimesSyncImpl(e,r,i){let n=this.realFs.lutimesSync;if(typeof n=="undefined")throw Eg("unavailable Node binding",`lutimes '${e}'`);n.call(this.realFs,O.fromPortablePath(e),r,i)}async mkdirPromise(e,r){return await new Promise((i,n)=>{this.realFs.mkdir(O.fromPortablePath(e),r,this.makeCallback(i,n))})}mkdirSync(e,r){return this.realFs.mkdirSync(O.fromPortablePath(e),r)}async rmdirPromise(e,r){return await new Promise((i,n)=>{r?this.realFs.rmdir(O.fromPortablePath(e),r,this.makeCallback(i,n)):this.realFs.rmdir(O.fromPortablePath(e),this.makeCallback(i,n))})}rmdirSync(e,r){return this.realFs.rmdirSync(O.fromPortablePath(e),r)}async linkPromise(e,r){return await new Promise((i,n)=>{this.realFs.link(O.fromPortablePath(e),O.fromPortablePath(r),this.makeCallback(i,n))})}linkSync(e,r){return this.realFs.linkSync(O.fromPortablePath(e),O.fromPortablePath(r))}async symlinkPromise(e,r,i){return await new Promise((n,s)=>{this.realFs.symlink(O.fromPortablePath(e.replace(/\/+$/,"")),O.fromPortablePath(r),i,this.makeCallback(n,s))})}symlinkSync(e,r,i){return this.realFs.symlinkSync(O.fromPortablePath(e.replace(/\/+$/,"")),O.fromPortablePath(r),i)}async readFilePromise(e,r){return await new Promise((i,n)=>{let s=typeof e=="string"?O.fromPortablePath(e):e;this.realFs.readFile(s,r,this.makeCallback(i,n))})}readFileSync(e,r){let i=typeof e=="string"?O.fromPortablePath(e):e;return this.realFs.readFileSync(i,r)}async readdirPromise(e,{withFileTypes:r}={}){return await new Promise((i,n)=>{r?this.realFs.readdir(O.fromPortablePath(e),{withFileTypes:!0},this.makeCallback(i,n)):this.realFs.readdir(O.fromPortablePath(e),this.makeCallback(s=>i(s),n))})}readdirSync(e,{withFileTypes:r}={}){return r?this.realFs.readdirSync(O.fromPortablePath(e),{withFileTypes:!0}):this.realFs.readdirSync(O.fromPortablePath(e))}async readlinkPromise(e){return await new Promise((r,i)=>{this.realFs.readlink(O.fromPortablePath(e),this.makeCallback(r,i))}).then(r=>O.toPortablePath(r))}readlinkSync(e){return O.toPortablePath(this.realFs.readlinkSync(O.fromPortablePath(e)))}async truncatePromise(e,r){return await new Promise((i,n)=>{this.realFs.truncate(O.fromPortablePath(e),r,this.makeCallback(i,n))})}truncateSync(e,r){return this.realFs.truncateSync(O.fromPortablePath(e),r)}watch(e,r,i){return this.realFs.watch(O.fromPortablePath(e),r,i)}watchFile(e,r,i){return this.realFs.watchFile(O.fromPortablePath(e),r,i)}unwatchFile(e,r){return this.realFs.unwatchFile(O.fromPortablePath(e),r)}makeCallback(e,r){return(i,n)=>{i?r(i):e(n)}}};var OL=re(require("events"));var ja;(function(r){r.Change="change",r.Stop="stop"})(ja||(ja={}));var Ga;(function(i){i.Ready="ready",i.Running="running",i.Stopped="stopped"})(Ga||(Ga={}));function TL(t,e){if(t!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${t}'`)}var Bg=class extends OL.EventEmitter{constructor(e,r,{bigint:i=!1}={}){super();this.status=Ga.Ready;this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=e,this.path=r,this.bigint=i,this.lastStats=this.stat()}static create(e,r,i){let n=new Bg(e,r,i);return n.start(),n}start(){TL(this.status,Ga.Ready),this.status=Ga.Running,this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit(ja.Change,this.lastStats,this.lastStats)},3)}stop(){TL(this.status,Ga.Running),this.status=Ga.Stopped,this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit(ja.Stop)}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch(e){if(e.code==="ENOENT"){let r=this.bigint?new dg:new Ro;return fC(r)}else throw e}}makeInterval(e){let r=setInterval(()=>{let i=this.stat(),n=this.lastStats;hw(i,n)||(this.lastStats=i,this.emit(ja.Change,i,n))},e.interval);return e.persistent?r:r.unref()}registerChangeListener(e,r){this.addListener(ja.Change,e),this.changeListeners.set(e,this.makeInterval(r))}unregisterChangeListener(e){this.removeListener(ja.Change,e);let r=this.changeListeners.get(e);typeof r!="undefined"&&clearInterval(r),this.changeListeners.delete(e)}unregisterAllChangeListeners(){for(let e of this.changeListeners.keys())this.unregisterChangeListener(e)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let e of this.changeListeners.values())e.ref();return this}unref(){for(let e of this.changeListeners.values())e.unref();return this}};var EC=new WeakMap;function yC(t,e,r,i){let n,s,o,a;switch(typeof r){case"function":n=!1,s=!0,o=5007,a=r;break;default:({bigint:n=!1,persistent:s=!0,interval:o=5007}=r),a=i;break}let l=EC.get(t);typeof l=="undefined"&&EC.set(t,l=new Map);let c=l.get(e);return typeof c=="undefined"&&(c=Bg.create(t,e,{bigint:n}),l.set(e,c)),c.registerChangeListener(a,{persistent:s,interval:o}),c}function wg(t,e,r){let i=EC.get(t);if(typeof i=="undefined")return;let n=i.get(e);typeof n!="undefined"&&(typeof r=="undefined"?n.unregisterAllChangeListeners():n.unregisterChangeListener(r),n.hasChangeListeners()||(n.stop(),i.delete(e)))}function Qg(t){let e=EC.get(t);if(typeof e!="undefined")for(let r of e.keys())wg(t,r)}var qa="mixed";function Zoe(t){if(typeof t=="string"&&String(+t)===t)return+t;if(Number.isFinite(t))return t<0?Date.now()/1e3:t;if((0,KL.isDate)(t))return t.getTime()/1e3;throw new Error("Invalid time")}var Qr=class extends Ha{constructor(e,r){super();this.lzSource=null;this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;this.libzip=r.libzip;let i=r;if(this.level=typeof i.level!="undefined"?i.level:qa,e===null&&(e=Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])),typeof e=="string"){let{baseFs:o=new Ft}=i;this.baseFs=o,this.path=e}else this.path=null,this.baseFs=null;if(r.stats)this.stats=r.stats;else if(typeof e=="string")try{this.stats=this.baseFs.statSync(e)}catch(o){if(o.code==="ENOENT"&&i.create)this.stats=Cg();else throw o}else this.stats=Cg();let n=this.libzip.malloc(4);try{let o=0;if(typeof e=="string"&&i.create&&(o|=this.libzip.ZIP_CREATE|this.libzip.ZIP_TRUNCATE),r.readOnly&&(o|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof e=="string")this.zip=this.libzip.open(O.fromPortablePath(e),o,n);else{let a=this.allocateUnattachedSource(e);try{this.zip=this.libzip.openFromSource(a,o,n),this.lzSource=a}catch(l){throw this.libzip.source.free(a),l}}if(this.zip===0){let a=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(a,this.libzip.getValue(n,"i32")),this.makeLibzipError(a)}}finally{this.libzip.free(n)}this.listings.set(Qe.root,new Set);let s=this.libzip.getNumEntries(this.zip,0);for(let o=0;oe)throw new Error("Overread");let n=this.libzip.HEAPU8.subarray(r,r+e);return Buffer.from(n)}finally{this.libzip.free(r)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}prepareClose(){if(!this.ready)throw CC("archive closed, close");Qg(this)}saveAndClose(){if(!this.path||!this.baseFs)throw new Error("ZipFS cannot be saved and must be discarded when loaded from a buffer");if(this.prepareClose(),this.readOnly){this.discardAndClose();return}let e=this.baseFs.existsSync(this.path)?this.baseFs.statSync(this.path).mode&511:null;if(this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));e===null?this.baseFs.chmodSync(this.path,this.stats.mode):e!==(this.baseFs.statSync(this.path).mode&511)&&this.baseFs.chmodSync(this.path,e),this.ready=!1}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}resolve(e){return D.resolve(Qe.root,e)}async openPromise(e,r,i){return this.openSync(e,r,i)}openSync(e,r,i){let n=this.nextFd++;return this.fds.set(n,{cursor:0,p:e}),n}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(e,r){return this.opendirSync(e,r)}opendirSync(e,r={}){let i=this.resolveFilename(`opendir '${e}'`,e);if(!this.entries.has(i)&&!this.listings.has(i))throw kn(`opendir '${e}'`);let n=this.listings.get(i);if(!n)throw Xn(`opendir '${e}'`);let s=[...n],o=this.openSync(i,"r");return IC(this,i,s,{onClose:()=>{this.closeSync(o)}})}async readPromise(e,r,i,n,s){return this.readSync(e,r,i,n,s)}readSync(e,r,i=0,n=0,s=-1){let o=this.fds.get(e);if(typeof o=="undefined")throw ti("read");let a;s===-1||s===null?a=o.cursor:a=s;let l=this.readFileSync(o.p);l.copy(r,i,a,a+n);let c=Math.max(0,Math.min(l.length-a,n));return(s===-1||s===null)&&(o.cursor+=c),c}async writePromise(e,r,i,n,s){return typeof r=="string"?this.writeSync(e,r,s):this.writeSync(e,r,i,n,s)}writeSync(e,r,i,n,s){throw typeof this.fds.get(e)=="undefined"?ti("read"):new Error("Unimplemented")}async closePromise(e){return this.closeSync(e)}closeSync(e){if(typeof this.fds.get(e)=="undefined")throw ti("read");this.fds.delete(e)}createReadStream(e,{encoding:r}={}){if(e===null)throw new Error("Unimplemented");let i=this.openSync(e,"r"),n=Object.assign(new Ew.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(o,a)=>{clearImmediate(s),this.closeSync(i),a(o)}}),{close(){n.destroy()},bytesRead:0,path:e}),s=setImmediate(async()=>{try{let o=await this.readFilePromise(e,r);n.bytesRead=o.length,n.end(o)}catch(o){n.destroy(o)}});return n}createWriteStream(e,{encoding:r}={}){if(this.readOnly)throw Bi(`open '${e}'`);if(e===null)throw new Error("Unimplemented");let i=[],n=this.openSync(e,"w"),s=Object.assign(new Ew.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(o,a)=>{try{o?a(o):(this.writeFileSync(e,Buffer.concat(i),r),a(null))}catch(l){a(l)}finally{this.closeSync(n)}}}),{bytesWritten:0,path:e,close(){s.destroy()}});return s.on("data",o=>{let a=Buffer.from(o);s.bytesWritten+=a.length,i.push(a)}),s}async realpathPromise(e){return this.realpathSync(e)}realpathSync(e){let r=this.resolveFilename(`lstat '${e}'`,e);if(!this.entries.has(r)&&!this.listings.has(r))throw kn(`lstat '${e}'`);return r}async existsPromise(e){return this.existsSync(e)}existsSync(e){if(!this.ready)throw CC(`archive closed, existsSync '${e}'`);if(this.symlinkCount===0){let i=D.resolve(Qe.root,e);return this.entries.has(i)||this.listings.has(i)}let r;try{r=this.resolveFilename(`stat '${e}'`,e)}catch(i){return!1}return this.entries.has(r)||this.listings.has(r)}async accessPromise(e,r){return this.accessSync(e,r)}accessSync(e,r=Sl.constants.F_OK){let i=this.resolveFilename(`access '${e}'`,e);if(!this.entries.has(i)&&!this.listings.has(i))throw kn(`access '${e}'`);if(this.readOnly&&r&Sl.constants.W_OK)throw Bi(`access '${e}'`)}async statPromise(e,r){return this.statSync(e,r)}statSync(e,r){let i=this.resolveFilename(`stat '${e}'`,e);if(!this.entries.has(i)&&!this.listings.has(i))throw kn(`stat '${e}'`);if(e[e.length-1]==="/"&&!this.listings.has(i))throw Xn(`stat '${e}'`);return this.statImpl(`stat '${e}'`,i,r)}async fstatPromise(e,r){return this.fstatSync(e,r)}fstatSync(e,r){let i=this.fds.get(e);if(typeof i=="undefined")throw ti("fstatSync");let{p:n}=i,s=this.resolveFilename(`stat '${n}'`,n);if(!this.entries.has(s)&&!this.listings.has(s))throw kn(`stat '${n}'`);if(n[n.length-1]==="/"&&!this.listings.has(s))throw Xn(`stat '${n}'`);return this.statImpl(`fstat '${n}'`,s,r)}async lstatPromise(e,r){return this.lstatSync(e,r)}lstatSync(e,r){let i=this.resolveFilename(`lstat '${e}'`,e,!1);if(!this.entries.has(i)&&!this.listings.has(i))throw kn(`lstat '${e}'`);if(e[e.length-1]==="/"&&!this.listings.has(i))throw Xn(`lstat '${e}'`);return this.statImpl(`lstat '${e}'`,i,r)}statImpl(e,r,i={}){let n=this.entries.get(r);if(typeof n!="undefined"){let s=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,n,0,0,s)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let a=this.stats.uid,l=this.stats.gid,c=this.libzip.struct.statSize(s)>>>0,u=512,g=Math.ceil(c/u),f=(this.libzip.struct.statMtime(s)>>>0)*1e3,h=f,p=f,m=f,I=new Date(h),y=new Date(p),B=new Date(m),x=new Date(f),F=this.listings.has(r)?vo:this.isSymbolicLink(n)?Fo:Rs,L=F===vo?493:420,T=F|this.getUnixMode(n,L)&511,v=this.libzip.struct.statCrc(s),q=Object.assign(new Ro,{uid:a,gid:l,size:c,blksize:u,blocks:g,atime:I,birthtime:y,ctime:B,mtime:x,atimeMs:h,birthtimeMs:p,ctimeMs:m,mtimeMs:f,mode:T,crc:v});return i.bigint===!0?hC(q):q}if(this.listings.has(r)){let s=this.stats.uid,o=this.stats.gid,a=0,l=512,c=0,u=this.stats.mtimeMs,g=this.stats.mtimeMs,f=this.stats.mtimeMs,h=this.stats.mtimeMs,p=new Date(u),m=new Date(g),I=new Date(f),y=new Date(h),B=vo|493,x=0,F=Object.assign(new Ro,{uid:s,gid:o,size:a,blksize:l,blocks:c,atime:p,birthtime:m,ctime:I,mtime:y,atimeMs:u,birthtimeMs:g,ctimeMs:f,mtimeMs:h,mode:B,crc:x});return i.bigint===!0?hC(F):F}throw new Error("Unreachable")}getUnixMode(e,r){if(this.libzip.file.getExternalAttributes(this.zip,e,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?r:this.libzip.getValue(this.libzip.uint32S,"i32")>>>16}registerListing(e){let r=this.listings.get(e);if(r)return r;let i=this.registerListing(D.dirname(e));return r=new Set,i.add(D.basename(e)),this.listings.set(e,r),r}registerEntry(e,r){this.registerListing(D.dirname(e)).add(D.basename(e)),this.entries.set(e,r)}unregisterListing(e){this.listings.delete(e);let r=this.listings.get(D.dirname(e));r==null||r.delete(D.basename(e))}unregisterEntry(e){this.unregisterListing(e);let r=this.entries.get(e);this.entries.delete(e),typeof r!="undefined"&&(this.fileSources.delete(r),this.isSymbolicLink(r)&&this.symlinkCount--)}deleteEntry(e,r){if(this.unregisterEntry(e),this.libzip.delete(this.zip,r)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(e,r,i=!0){if(!this.ready)throw CC(`archive closed, ${e}`);let n=D.resolve(Qe.root,r);if(n==="/")return Qe.root;let s=this.entries.get(n);if(i&&s!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(s)){let o=this.getFileSource(s).toString();return this.resolveFilename(e,D.resolve(D.dirname(n),o),!0)}else return n;for(;;){let o=this.resolveFilename(e,D.dirname(n),!0),a=this.listings.has(o),l=this.entries.has(o);if(!a&&!l)throw kn(e);if(!a)throw Xn(e);if(n=D.resolve(o,D.basename(n)),!i||this.symlinkCount===0)break;let c=this.libzip.name.locate(this.zip,n.slice(1));if(c===-1)break;if(this.isSymbolicLink(c)){let u=this.getFileSource(c).toString();n=D.resolve(D.dirname(n),u)}else break}return n}allocateBuffer(e){Buffer.isBuffer(e)||(e=Buffer.from(e));let r=this.libzip.malloc(e.byteLength);if(!r)throw new Error("Couldn't allocate enough memory");return new Uint8Array(this.libzip.HEAPU8.buffer,r,e.byteLength).set(e),{buffer:r,byteLength:e.byteLength}}allocateUnattachedSource(e){let r=this.libzip.struct.errorS(),{buffer:i,byteLength:n}=this.allocateBuffer(e),s=this.libzip.source.fromUnattachedBuffer(i,n,0,!0,r);if(s===0)throw this.libzip.free(r),this.makeLibzipError(r);return s}allocateSource(e){let{buffer:r,byteLength:i}=this.allocateBuffer(e),n=this.libzip.source.fromBuffer(this.zip,r,i,0,!0);if(n===0)throw this.libzip.free(r),this.makeLibzipError(this.libzip.getError(this.zip));return n}setFileSource(e,r){let i=Buffer.isBuffer(r)?r:Buffer.from(r),n=D.relative(Qe.root,e),s=this.allocateSource(r);try{let o=this.libzip.file.add(this.zip,n,s,this.libzip.ZIP_FL_OVERWRITE);if(o===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!=="mixed"){let a;if(this.level===0?a=this.libzip.ZIP_CM_STORE:a=this.libzip.ZIP_CM_DEFLATE,this.libzip.file.setCompression(this.zip,o,0,a,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(o,i),o}catch(o){throw this.libzip.source.free(s),o}}isSymbolicLink(e){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,e,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,"i32")>>>16&tn)===Fo}getFileSource(e,r={asyncDecompress:!1}){let i=this.fileSources.get(e);if(typeof i!="undefined")return i;let n=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,e,0,0,n)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let o=this.libzip.struct.statCompSize(n),a=this.libzip.struct.statCompMethod(n),l=this.libzip.malloc(o);try{let c=this.libzip.fopenIndex(this.zip,e,0,this.libzip.ZIP_FL_COMPRESSED);if(c===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let u=this.libzip.fread(c,l,o,0);if(u===-1)throw this.makeLibzipError(this.libzip.file.getError(c));if(uo)throw new Error("Overread");let g=this.libzip.HEAPU8.subarray(l,l+o),f=Buffer.from(g);if(a===0)return this.fileSources.set(e,f),f;if(r.asyncDecompress)return new Promise((h,p)=>{yw.default.inflateRaw(f,(m,I)=>{m?p(m):(this.fileSources.set(e,I),h(I))})});{let h=yw.default.inflateRawSync(f);return this.fileSources.set(e,h),h}}finally{this.libzip.fclose(c)}}finally{this.libzip.free(l)}}async chmodPromise(e,r){return this.chmodSync(e,r)}chmodSync(e,r){if(this.readOnly)throw Bi(`chmod '${e}'`);r&=493;let i=this.resolveFilename(`chmod '${e}'`,e,!1),n=this.entries.get(i);if(typeof n=="undefined")throw new Error(`Assertion failed: The entry should have been registered (${i})`);let o=this.getUnixMode(n,Rs|0)&~511|r;if(this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,o<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async chownPromise(e,r,i){return this.chownSync(e,r,i)}chownSync(e,r,i){throw new Error("Unimplemented")}async renamePromise(e,r){return this.renameSync(e,r)}renameSync(e,r){throw new Error("Unimplemented")}async copyFilePromise(e,r,i){let{indexSource:n,indexDest:s,resolvedDestP:o}=this.prepareCopyFile(e,r,i),a=await this.getFileSource(n,{asyncDecompress:!0}),l=this.setFileSource(o,a);l!==s&&this.registerEntry(o,l)}copyFileSync(e,r,i=0){let{indexSource:n,indexDest:s,resolvedDestP:o}=this.prepareCopyFile(e,r,i),a=this.getFileSource(n),l=this.setFileSource(o,a);l!==s&&this.registerEntry(o,l)}prepareCopyFile(e,r,i=0){if(this.readOnly)throw Bi(`copyfile '${e} -> '${r}'`);if((i&Sl.constants.COPYFILE_FICLONE_FORCE)!=0)throw Eg("unsupported clone operation",`copyfile '${e}' -> ${r}'`);let n=this.resolveFilename(`copyfile '${e} -> ${r}'`,e),s=this.entries.get(n);if(typeof s=="undefined")throw Lo(`copyfile '${e}' -> '${r}'`);let o=this.resolveFilename(`copyfile '${e}' -> ${r}'`,r),a=this.entries.get(o);if((i&(Sl.constants.COPYFILE_EXCL|Sl.constants.COPYFILE_FICLONE_FORCE))!=0&&typeof a!="undefined")throw mC(`copyfile '${e}' -> '${r}'`);return{indexSource:s,resolvedDestP:o,indexDest:a}}async appendFilePromise(e,r,i){if(this.readOnly)throw Bi(`open '${e}'`);return typeof i=="undefined"?i={flag:"a"}:typeof i=="string"?i={flag:"a",encoding:i}:typeof i.flag=="undefined"&&(i=P({flag:"a"},i)),this.writeFilePromise(e,r,i)}appendFileSync(e,r,i={}){if(this.readOnly)throw Bi(`open '${e}'`);return typeof i=="undefined"?i={flag:"a"}:typeof i=="string"?i={flag:"a",encoding:i}:typeof i.flag=="undefined"&&(i=P({flag:"a"},i)),this.writeFileSync(e,r,i)}async writeFilePromise(e,r,i){let{encoding:n,index:s,resolvedP:o}=this.prepareWriteFile(e,i);s!==void 0&&typeof i=="object"&&i.flag&&i.flag.includes("a")&&(r=Buffer.concat([await this.getFileSource(s,{asyncDecompress:!0}),Buffer.from(r)])),n!==null&&(r=r.toString(n));let a=this.setFileSource(o,r);a!==s&&this.registerEntry(o,a)}writeFileSync(e,r,i){let{encoding:n,index:s,resolvedP:o}=this.prepareWriteFile(e,i);s!==void 0&&typeof i=="object"&&i.flag&&i.flag.includes("a")&&(r=Buffer.concat([this.getFileSource(s),Buffer.from(r)])),n!==null&&(r=r.toString(n));let a=this.setFileSource(o,r);a!==s&&this.registerEntry(o,a)}prepareWriteFile(e,r){if(typeof e!="string")throw ti("read");if(this.readOnly)throw Bi(`open '${e}'`);let i=this.resolveFilename(`open '${e}'`,e);if(this.listings.has(i))throw yg(`open '${e}'`);let n=null;typeof r=="string"?n=r:typeof r=="object"&&r.encoding&&(n=r.encoding);let s=this.entries.get(i);return{encoding:n,resolvedP:i,index:s}}async unlinkPromise(e){return this.unlinkSync(e)}unlinkSync(e){if(this.readOnly)throw Bi(`unlink '${e}'`);let r=this.resolveFilename(`unlink '${e}'`,e);if(this.listings.has(r))throw yg(`unlink '${e}'`);let i=this.entries.get(r);if(typeof i=="undefined")throw Lo(`unlink '${e}'`);this.deleteEntry(r,i)}async utimesPromise(e,r,i){return this.utimesSync(e,r,i)}utimesSync(e,r,i){if(this.readOnly)throw Bi(`utimes '${e}'`);let n=this.resolveFilename(`utimes '${e}'`,e);this.utimesImpl(n,i)}async lutimesPromise(e,r,i){return this.lutimesSync(e,r,i)}lutimesSync(e,r,i){if(this.readOnly)throw Bi(`lutimes '${e}'`);let n=this.resolveFilename(`utimes '${e}'`,e,!1);this.utimesImpl(n,i)}utimesImpl(e,r){this.listings.has(e)&&(this.entries.has(e)||this.hydrateDirectory(e));let i=this.entries.get(e);if(i===void 0)throw new Error("Unreachable");if(this.libzip.file.setMtime(this.zip,i,0,Zoe(r),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(e,r){return this.mkdirSync(e,r)}mkdirSync(e,{mode:r=493,recursive:i=!1}={}){if(i){this.mkdirpSync(e,{chmod:r});return}if(this.readOnly)throw Bi(`mkdir '${e}'`);let n=this.resolveFilename(`mkdir '${e}'`,e);if(this.entries.has(n)||this.listings.has(n))throw mC(`mkdir '${e}'`);this.hydrateDirectory(n),this.chmodSync(n,r)}async rmdirPromise(e,r){return this.rmdirSync(e,r)}rmdirSync(e,{recursive:r=!1}={}){if(this.readOnly)throw Bi(`rmdir '${e}'`);if(r){this.removeSync(e);return}let i=this.resolveFilename(`rmdir '${e}'`,e),n=this.listings.get(i);if(!n)throw Xn(`rmdir '${e}'`);if(n.size>0)throw vL(`rmdir '${e}'`);let s=this.entries.get(i);if(typeof s=="undefined")throw Lo(`rmdir '${e}'`);this.deleteEntry(e,s)}hydrateDirectory(e){let r=this.libzip.dir.add(this.zip,D.relative(Qe.root,e));if(r===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(e),this.registerEntry(e,r),r}async linkPromise(e,r){return this.linkSync(e,r)}linkSync(e,r){throw FL(`link '${e}' -> '${r}'`)}async symlinkPromise(e,r){return this.symlinkSync(e,r)}symlinkSync(e,r){if(this.readOnly)throw Bi(`symlink '${e}' -> '${r}'`);let i=this.resolveFilename(`symlink '${e}' -> '${r}'`,r);if(this.listings.has(i))throw yg(`symlink '${e}' -> '${r}'`);if(this.entries.has(i))throw mC(`symlink '${e}' -> '${r}'`);let n=this.setFileSource(i,e);if(this.registerEntry(i,n),this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,(Fo|511)<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(e,r){typeof r=="object"&&(r=r?r.encoding:void 0);let i=await this.readFileBuffer(e,{asyncDecompress:!0});return r?i.toString(r):i}readFileSync(e,r){typeof r=="object"&&(r=r?r.encoding:void 0);let i=this.readFileBuffer(e);return r?i.toString(r):i}readFileBuffer(e,r={asyncDecompress:!1}){let i=this.resolveFilename(`open '${e}'`,e);if(!this.entries.has(i)&&!this.listings.has(i))throw kn(`open '${e}'`);if(e[e.length-1]==="/"&&!this.listings.has(i))throw Xn(`open '${e}'`);if(this.listings.has(i))throw yg("read");let n=this.entries.get(i);if(n===void 0)throw new Error("Unreachable");return this.getFileSource(n,r)}async readdirPromise(e,{withFileTypes:r}={}){return this.readdirSync(e,{withFileTypes:r})}readdirSync(e,{withFileTypes:r}={}){let i=this.resolveFilename(`scandir '${e}'`,e);if(!this.entries.has(i)&&!this.listings.has(i))throw kn(`scandir '${e}'`);let n=this.listings.get(i);if(!n)throw Xn(`scandir '${e}'`);let s=[...n];return r?s.map(o=>Object.assign(this.statImpl("lstat",D.join(e,o)),{name:o})):s}async readlinkPromise(e){let r=this.prepareReadlink(e);return(await this.getFileSource(r,{asyncDecompress:!0})).toString()}readlinkSync(e){let r=this.prepareReadlink(e);return this.getFileSource(r).toString()}prepareReadlink(e){let r=this.resolveFilename(`readlink '${e}'`,e,!1);if(!this.entries.has(r)&&!this.listings.has(r))throw kn(`readlink '${e}'`);if(e[e.length-1]==="/"&&!this.listings.has(r))throw Xn(`open '${e}'`);if(this.listings.has(r))throw Lo(`readlink '${e}'`);let i=this.entries.get(r);if(i===void 0)throw new Error("Unreachable");if(!this.isSymbolicLink(i))throw Lo(`readlink '${e}'`);return i}async truncatePromise(e,r=0){let i=this.resolveFilename(`open '${e}'`,e),n=this.entries.get(i);if(typeof n=="undefined")throw Lo(`open '${e}'`);let s=await this.getFileSource(n,{asyncDecompress:!0}),o=Buffer.alloc(r,0);return s.copy(o),await this.writeFilePromise(e,o)}truncateSync(e,r=0){let i=this.resolveFilename(`open '${e}'`,e),n=this.entries.get(i);if(typeof n=="undefined")throw Lo(`open '${e}'`);let s=this.getFileSource(n),o=Buffer.alloc(r,0);return s.copy(o),this.writeFileSync(e,o)}watch(e,r,i){let n;switch(typeof r){case"function":case"string":case"undefined":n=!0;break;default:({persistent:n=!0}=r);break}if(!n)return{on:()=>{},close:()=>{}};let s=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(s)}}}watchFile(e,r,i){let n=this.resolveFilename(`open '${e}'`,e);return yC(this,n,r,i)}unwatchFile(e,r){let i=this.resolveFilename(`open '${e}'`,e);return wg(this,i,r)}};var Lr=class extends Ls{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,r,i){return this.baseFs.openPromise(this.mapToBase(e),r,i)}openSync(e,r,i){return this.baseFs.openSync(this.mapToBase(e),r,i)}async opendirPromise(e,r){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),r),{path:e})}opendirSync(e,r){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),r),{path:e})}async readPromise(e,r,i,n,s){return await this.baseFs.readPromise(e,r,i,n,s)}readSync(e,r,i,n,s){return this.baseFs.readSync(e,r,i,n,s)}async writePromise(e,r,i,n,s){return typeof r=="string"?await this.baseFs.writePromise(e,r,i):await this.baseFs.writePromise(e,r,i,n,s)}writeSync(e,r,i,n,s){return typeof r=="string"?this.baseFs.writeSync(e,r,i):this.baseFs.writeSync(e,r,i,n,s)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,r){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,r)}createWriteStream(e,r){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,r)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,r){return this.baseFs.accessSync(this.mapToBase(e),r)}async accessPromise(e,r){return this.baseFs.accessPromise(this.mapToBase(e),r)}async statPromise(e,r){return this.baseFs.statPromise(this.mapToBase(e),r)}statSync(e,r){return this.baseFs.statSync(this.mapToBase(e),r)}async fstatPromise(e,r){return this.baseFs.fstatPromise(e,r)}fstatSync(e,r){return this.baseFs.fstatSync(e,r)}async lstatPromise(e,r){return this.baseFs.lstatPromise(this.mapToBase(e),r)}lstatSync(e,r){return this.baseFs.lstatSync(this.mapToBase(e),r)}async chmodPromise(e,r){return this.baseFs.chmodPromise(this.mapToBase(e),r)}chmodSync(e,r){return this.baseFs.chmodSync(this.mapToBase(e),r)}async chownPromise(e,r,i){return this.baseFs.chownPromise(this.mapToBase(e),r,i)}chownSync(e,r,i){return this.baseFs.chownSync(this.mapToBase(e),r,i)}async renamePromise(e,r){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(r))}renameSync(e,r){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(r))}async copyFilePromise(e,r,i=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(r),i)}copyFileSync(e,r,i=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(r),i)}async appendFilePromise(e,r,i){return this.baseFs.appendFilePromise(this.fsMapToBase(e),r,i)}appendFileSync(e,r,i){return this.baseFs.appendFileSync(this.fsMapToBase(e),r,i)}async writeFilePromise(e,r,i){return this.baseFs.writeFilePromise(this.fsMapToBase(e),r,i)}writeFileSync(e,r,i){return this.baseFs.writeFileSync(this.fsMapToBase(e),r,i)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,r,i){return this.baseFs.utimesPromise(this.mapToBase(e),r,i)}utimesSync(e,r,i){return this.baseFs.utimesSync(this.mapToBase(e),r,i)}async mkdirPromise(e,r){return this.baseFs.mkdirPromise(this.mapToBase(e),r)}mkdirSync(e,r){return this.baseFs.mkdirSync(this.mapToBase(e),r)}async rmdirPromise(e,r){return this.baseFs.rmdirPromise(this.mapToBase(e),r)}rmdirSync(e,r){return this.baseFs.rmdirSync(this.mapToBase(e),r)}async linkPromise(e,r){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(r))}linkSync(e,r){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(r))}async symlinkPromise(e,r,i){let n=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkPromise(o,n,i)}symlinkSync(e,r,i){let n=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkSync(o,n,i)}async readFilePromise(e,r){return r==="utf8"?this.baseFs.readFilePromise(this.fsMapToBase(e),r):this.baseFs.readFilePromise(this.fsMapToBase(e),r)}readFileSync(e,r){return r==="utf8"?this.baseFs.readFileSync(this.fsMapToBase(e),r):this.baseFs.readFileSync(this.fsMapToBase(e),r)}async readdirPromise(e,{withFileTypes:r}={}){return this.baseFs.readdirPromise(this.mapToBase(e),{withFileTypes:r})}readdirSync(e,{withFileTypes:r}={}){return this.baseFs.readdirSync(this.mapToBase(e),{withFileTypes:r})}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,r){return this.baseFs.truncatePromise(this.mapToBase(e),r)}truncateSync(e,r){return this.baseFs.truncateSync(this.mapToBase(e),r)}watch(e,r,i){return this.baseFs.watch(this.mapToBase(e),r,i)}watchFile(e,r,i){return this.baseFs.watchFile(this.mapToBase(e),r,i)}unwatchFile(e,r){return this.baseFs.unwatchFile(this.mapToBase(e),r)}fsMapToBase(e){return typeof e=="number"?e:this.mapToBase(e)}};var Ja=class extends Lr{constructor(e,{baseFs:r,pathUtils:i}){super(i);this.target=e,this.baseFs=r}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(e){return e}mapToBase(e){return e}};var yt=class extends Lr{constructor(e,{baseFs:r=new Ft}={}){super(D);this.target=this.pathUtils.normalize(e),this.baseFs=r}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(e){return this.pathUtils.isAbsolute(e)?D.normalize(e):this.baseFs.resolve(D.join(this.target,e))}mapFromBase(e){return e}mapToBase(e){return this.pathUtils.isAbsolute(e)?e:this.pathUtils.join(this.target,e)}};var UL=Qe.root,Ns=class extends Lr{constructor(e,{baseFs:r=new Ft}={}){super(D);this.target=this.pathUtils.resolve(Qe.root,e),this.baseFs=r}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Qe.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(e){let r=this.pathUtils.normalize(e);if(this.pathUtils.isAbsolute(e))return this.pathUtils.resolve(this.target,this.pathUtils.relative(UL,e));if(r.match(/^\.\.\/?/))throw new Error(`Resolving this path (${e}) would escape the jail`);return this.pathUtils.resolve(this.target,e)}mapFromBase(e){return this.pathUtils.resolve(UL,this.pathUtils.relative(this.target,e))}};var bg=class extends Lr{constructor(e,r){super(r);this.instance=null;this.factory=e}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(e){this.instance=e}mapFromBase(e){return e}mapToBase(e){return e}};var He=()=>Object.assign(new Error("ENOSYS: unsupported filesystem access"),{code:"ENOSYS"}),Bw=class extends Ls{constructor(){super(D)}getExtractHint(){throw He()}getRealPath(){throw He()}resolve(){throw He()}async openPromise(){throw He()}openSync(){throw He()}async opendirPromise(){throw He()}opendirSync(){throw He()}async readPromise(){throw He()}readSync(){throw He()}async writePromise(){throw He()}writeSync(){throw He()}async closePromise(){throw He()}closeSync(){throw He()}createWriteStream(){throw He()}createReadStream(){throw He()}async realpathPromise(){throw He()}realpathSync(){throw He()}async readdirPromise(){throw He()}readdirSync(){throw He()}async existsPromise(e){throw He()}existsSync(e){throw He()}async accessPromise(){throw He()}accessSync(){throw He()}async statPromise(){throw He()}statSync(){throw He()}async fstatPromise(e){throw He()}fstatSync(e){throw He()}async lstatPromise(e){throw He()}lstatSync(e){throw He()}async chmodPromise(){throw He()}chmodSync(){throw He()}async chownPromise(){throw He()}chownSync(){throw He()}async mkdirPromise(){throw He()}mkdirSync(){throw He()}async rmdirPromise(){throw He()}rmdirSync(){throw He()}async linkPromise(){throw He()}linkSync(){throw He()}async symlinkPromise(){throw He()}symlinkSync(){throw He()}async renamePromise(){throw He()}renameSync(){throw He()}async copyFilePromise(){throw He()}copyFileSync(){throw He()}async appendFilePromise(){throw He()}appendFileSync(){throw He()}async writeFilePromise(){throw He()}writeFileSync(){throw He()}async unlinkPromise(){throw He()}unlinkSync(){throw He()}async utimesPromise(){throw He()}utimesSync(){throw He()}async readFilePromise(){throw He()}readFileSync(){throw He()}async readlinkPromise(){throw He()}readlinkSync(){throw He()}async truncatePromise(){throw He()}truncateSync(){throw He()}watch(){throw He()}watchFile(){throw He()}unwatchFile(){throw He()}},BC=Bw;BC.instance=new Bw;var Dg=class extends Lr{constructor(e){super(O);this.baseFs=e}mapFromBase(e){return O.fromPortablePath(e)}mapToBase(e){return O.toPortablePath(e)}};var _oe=/^[0-9]+$/,ww=/^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/,$oe=/^([^/]+-)?[a-f0-9]+$/,ir=class extends Lr{static makeVirtualPath(e,r,i){if(D.basename(e)!=="__virtual__")throw new Error('Assertion failed: Virtual folders must be named "__virtual__"');if(!D.basename(r).match($oe))throw new Error("Assertion failed: Virtual components must be ended by an hexadecimal hash");let s=D.relative(D.dirname(e),i).split("/"),o=0;for(;o{let e=t.indexOf(Qw);if(e<=0)return null;let r=e;for(;e>=0&&(r=e+Qw.length,t[r]!==D.sep);){if(t[e-1]===D.sep)return null;e=t.indexOf(Qw,r)}return t.length>r&&t[r]!==D.sep?null:t.slice(0,r)},nn=class extends Ha{constructor({libzip:e,baseFs:r=new Ft,filter:i=null,maxOpenFiles:n=Infinity,readOnlyArchives:s=!1,useCache:o=!0,maxAge:a=5e3}){super();this.fdMap=new Map;this.nextFd=3;this.isZip=new Set;this.notZip=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.libzipFactory=typeof e!="function"?()=>e:e,this.baseFs=r,this.zipInstances=o?new Map:null,this.filter=i,this.maxOpenFiles=n,this.readOnlyArchives=s,this.maxAge=a}static async openPromise(e,r){let i=new nn(r);try{return await e(i)}finally{i.saveAndClose()}}get libzip(){return typeof this.libzipInstance=="undefined"&&(this.libzipInstance=this.libzipFactory()),this.libzipInstance}getExtractHint(e){return this.baseFs.getExtractHint(e)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Qg(this),this.zipInstances)for(let[e,{zipFs:r}]of this.zipInstances.entries())r.saveAndClose(),this.zipInstances.delete(e)}discardAndClose(){if(Qg(this),this.zipInstances)for(let[e,{zipFs:r}]of this.zipInstances.entries())r.discardAndClose(),this.zipInstances.delete(e)}resolve(e){return this.baseFs.resolve(e)}remapFd(e,r){let i=this.nextFd++|Ms;return this.fdMap.set(i,[e,r]),i}async openPromise(e,r,i){return await this.makeCallPromise(e,async()=>await this.baseFs.openPromise(e,r,i),async(n,{subPath:s})=>this.remapFd(n,await n.openPromise(s,r,i)))}openSync(e,r,i){return this.makeCallSync(e,()=>this.baseFs.openSync(e,r,i),(n,{subPath:s})=>this.remapFd(n,n.openSync(s,r,i)))}async opendirPromise(e,r){return await this.makeCallPromise(e,async()=>await this.baseFs.opendirPromise(e,r),async(i,{subPath:n})=>await i.opendirPromise(n,r),{requireSubpath:!1})}opendirSync(e,r){return this.makeCallSync(e,()=>this.baseFs.opendirSync(e,r),(i,{subPath:n})=>i.opendirSync(n,r),{requireSubpath:!1})}async readPromise(e,r,i,n,s){if((e&Ms)==0)return await this.baseFs.readPromise(e,r,i,n,s);let o=this.fdMap.get(e);if(typeof o=="undefined")throw ti("read");let[a,l]=o;return await a.readPromise(l,r,i,n,s)}readSync(e,r,i,n,s){if((e&Ms)==0)return this.baseFs.readSync(e,r,i,n,s);let o=this.fdMap.get(e);if(typeof o=="undefined")throw ti("readSync");let[a,l]=o;return a.readSync(l,r,i,n,s)}async writePromise(e,r,i,n,s){if((e&Ms)==0)return typeof r=="string"?await this.baseFs.writePromise(e,r,i):await this.baseFs.writePromise(e,r,i,n,s);let o=this.fdMap.get(e);if(typeof o=="undefined")throw ti("write");let[a,l]=o;return typeof r=="string"?await a.writePromise(l,r,i):await a.writePromise(l,r,i,n,s)}writeSync(e,r,i,n,s){if((e&Ms)==0)return typeof r=="string"?this.baseFs.writeSync(e,r,i):this.baseFs.writeSync(e,r,i,n,s);let o=this.fdMap.get(e);if(typeof o=="undefined")throw ti("writeSync");let[a,l]=o;return typeof r=="string"?a.writeSync(l,r,i):a.writeSync(l,r,i,n,s)}async closePromise(e){if((e&Ms)==0)return await this.baseFs.closePromise(e);let r=this.fdMap.get(e);if(typeof r=="undefined")throw ti("close");this.fdMap.delete(e);let[i,n]=r;return await i.closePromise(n)}closeSync(e){if((e&Ms)==0)return this.baseFs.closeSync(e);let r=this.fdMap.get(e);if(typeof r=="undefined")throw ti("closeSync");this.fdMap.delete(e);let[i,n]=r;return i.closeSync(n)}createReadStream(e,r){return e===null?this.baseFs.createReadStream(e,r):this.makeCallSync(e,()=>this.baseFs.createReadStream(e,r),(i,{subPath:n})=>i.createReadStream(n,r))}createWriteStream(e,r){return e===null?this.baseFs.createWriteStream(e,r):this.makeCallSync(e,()=>this.baseFs.createWriteStream(e,r),(i,{subPath:n})=>i.createWriteStream(n,r))}async realpathPromise(e){return await this.makeCallPromise(e,async()=>await this.baseFs.realpathPromise(e),async(r,{archivePath:i,subPath:n})=>{let s=this.realPaths.get(i);return typeof s=="undefined"&&(s=await this.baseFs.realpathPromise(i),this.realPaths.set(i,s)),this.pathUtils.join(s,this.pathUtils.relative(Qe.root,await r.realpathPromise(n)))})}realpathSync(e){return this.makeCallSync(e,()=>this.baseFs.realpathSync(e),(r,{archivePath:i,subPath:n})=>{let s=this.realPaths.get(i);return typeof s=="undefined"&&(s=this.baseFs.realpathSync(i),this.realPaths.set(i,s)),this.pathUtils.join(s,this.pathUtils.relative(Qe.root,r.realpathSync(n)))})}async existsPromise(e){return await this.makeCallPromise(e,async()=>await this.baseFs.existsPromise(e),async(r,{subPath:i})=>await r.existsPromise(i))}existsSync(e){return this.makeCallSync(e,()=>this.baseFs.existsSync(e),(r,{subPath:i})=>r.existsSync(i))}async accessPromise(e,r){return await this.makeCallPromise(e,async()=>await this.baseFs.accessPromise(e,r),async(i,{subPath:n})=>await i.accessPromise(n,r))}accessSync(e,r){return this.makeCallSync(e,()=>this.baseFs.accessSync(e,r),(i,{subPath:n})=>i.accessSync(n,r))}async statPromise(e,r){return await this.makeCallPromise(e,async()=>await this.baseFs.statPromise(e,r),async(i,{subPath:n})=>await i.statPromise(n,r))}statSync(e,r){return this.makeCallSync(e,()=>this.baseFs.statSync(e,r),(i,{subPath:n})=>i.statSync(n,r))}async fstatPromise(e,r){if((e&Ms)==0)return this.baseFs.fstatPromise(e,r);let i=this.fdMap.get(e);if(typeof i=="undefined")throw ti("fstat");let[n,s]=i;return n.fstatPromise(s,r)}fstatSync(e,r){if((e&Ms)==0)return this.baseFs.fstatSync(e,r);let i=this.fdMap.get(e);if(typeof i=="undefined")throw ti("fstatSync");let[n,s]=i;return n.fstatSync(s,r)}async lstatPromise(e,r){return await this.makeCallPromise(e,async()=>await this.baseFs.lstatPromise(e,r),async(i,{subPath:n})=>await i.lstatPromise(n,r))}lstatSync(e,r){return this.makeCallSync(e,()=>this.baseFs.lstatSync(e,r),(i,{subPath:n})=>i.lstatSync(n,r))}async chmodPromise(e,r){return await this.makeCallPromise(e,async()=>await this.baseFs.chmodPromise(e,r),async(i,{subPath:n})=>await i.chmodPromise(n,r))}chmodSync(e,r){return this.makeCallSync(e,()=>this.baseFs.chmodSync(e,r),(i,{subPath:n})=>i.chmodSync(n,r))}async chownPromise(e,r,i){return await this.makeCallPromise(e,async()=>await this.baseFs.chownPromise(e,r,i),async(n,{subPath:s})=>await n.chownPromise(s,r,i))}chownSync(e,r,i){return this.makeCallSync(e,()=>this.baseFs.chownSync(e,r,i),(n,{subPath:s})=>n.chownSync(s,r,i))}async renamePromise(e,r){return await this.makeCallPromise(e,async()=>await this.makeCallPromise(r,async()=>await this.baseFs.renamePromise(e,r),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),async(i,{subPath:n})=>await this.makeCallPromise(r,async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},async(s,{subPath:o})=>{if(i!==s)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return await i.renamePromise(n,o)}))}renameSync(e,r){return this.makeCallSync(e,()=>this.makeCallSync(r,()=>this.baseFs.renameSync(e,r),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),(i,{subPath:n})=>this.makeCallSync(r,()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},(s,{subPath:o})=>{if(i!==s)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return i.renameSync(n,o)}))}async copyFilePromise(e,r,i=0){let n=async(s,o,a,l)=>{if((i&Sg.constants.COPYFILE_FICLONE_FORCE)!=0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${o}' -> ${l}'`),{code:"EXDEV"});if(i&Sg.constants.COPYFILE_EXCL&&await this.existsPromise(o))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${o}' -> '${l}'`),{code:"EEXIST"});let c;try{c=await s.readFilePromise(o)}catch(u){throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${o}' -> '${l}'`),{code:"EINVAL"})}await a.writeFilePromise(l,c)};return await this.makeCallPromise(e,async()=>await this.makeCallPromise(r,async()=>await this.baseFs.copyFilePromise(e,r,i),async(s,{subPath:o})=>await n(this.baseFs,e,s,o)),async(s,{subPath:o})=>await this.makeCallPromise(r,async()=>await n(s,o,this.baseFs,r),async(a,{subPath:l})=>s!==a?await n(s,o,a,l):await s.copyFilePromise(o,l,i)))}copyFileSync(e,r,i=0){let n=(s,o,a,l)=>{if((i&Sg.constants.COPYFILE_FICLONE_FORCE)!=0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${o}' -> ${l}'`),{code:"EXDEV"});if(i&Sg.constants.COPYFILE_EXCL&&this.existsSync(o))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${o}' -> '${l}'`),{code:"EEXIST"});let c;try{c=s.readFileSync(o)}catch(u){throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${o}' -> '${l}'`),{code:"EINVAL"})}a.writeFileSync(l,c)};return this.makeCallSync(e,()=>this.makeCallSync(r,()=>this.baseFs.copyFileSync(e,r,i),(s,{subPath:o})=>n(this.baseFs,e,s,o)),(s,{subPath:o})=>this.makeCallSync(r,()=>n(s,o,this.baseFs,r),(a,{subPath:l})=>s!==a?n(s,o,a,l):s.copyFileSync(o,l,i)))}async appendFilePromise(e,r,i){return await this.makeCallPromise(e,async()=>await this.baseFs.appendFilePromise(e,r,i),async(n,{subPath:s})=>await n.appendFilePromise(s,r,i))}appendFileSync(e,r,i){return this.makeCallSync(e,()=>this.baseFs.appendFileSync(e,r,i),(n,{subPath:s})=>n.appendFileSync(s,r,i))}async writeFilePromise(e,r,i){return await this.makeCallPromise(e,async()=>await this.baseFs.writeFilePromise(e,r,i),async(n,{subPath:s})=>await n.writeFilePromise(s,r,i))}writeFileSync(e,r,i){return this.makeCallSync(e,()=>this.baseFs.writeFileSync(e,r,i),(n,{subPath:s})=>n.writeFileSync(s,r,i))}async unlinkPromise(e){return await this.makeCallPromise(e,async()=>await this.baseFs.unlinkPromise(e),async(r,{subPath:i})=>await r.unlinkPromise(i))}unlinkSync(e){return this.makeCallSync(e,()=>this.baseFs.unlinkSync(e),(r,{subPath:i})=>r.unlinkSync(i))}async utimesPromise(e,r,i){return await this.makeCallPromise(e,async()=>await this.baseFs.utimesPromise(e,r,i),async(n,{subPath:s})=>await n.utimesPromise(s,r,i))}utimesSync(e,r,i){return this.makeCallSync(e,()=>this.baseFs.utimesSync(e,r,i),(n,{subPath:s})=>n.utimesSync(s,r,i))}async mkdirPromise(e,r){return await this.makeCallPromise(e,async()=>await this.baseFs.mkdirPromise(e,r),async(i,{subPath:n})=>await i.mkdirPromise(n,r))}mkdirSync(e,r){return this.makeCallSync(e,()=>this.baseFs.mkdirSync(e,r),(i,{subPath:n})=>i.mkdirSync(n,r))}async rmdirPromise(e,r){return await this.makeCallPromise(e,async()=>await this.baseFs.rmdirPromise(e,r),async(i,{subPath:n})=>await i.rmdirPromise(n,r))}rmdirSync(e,r){return this.makeCallSync(e,()=>this.baseFs.rmdirSync(e,r),(i,{subPath:n})=>i.rmdirSync(n,r))}async linkPromise(e,r){return await this.makeCallPromise(r,async()=>await this.baseFs.linkPromise(e,r),async(i,{subPath:n})=>await i.linkPromise(e,n))}linkSync(e,r){return this.makeCallSync(r,()=>this.baseFs.linkSync(e,r),(i,{subPath:n})=>i.linkSync(e,n))}async symlinkPromise(e,r,i){return await this.makeCallPromise(r,async()=>await this.baseFs.symlinkPromise(e,r,i),async(n,{subPath:s})=>await n.symlinkPromise(e,s))}symlinkSync(e,r,i){return this.makeCallSync(r,()=>this.baseFs.symlinkSync(e,r,i),(n,{subPath:s})=>n.symlinkSync(e,s))}async readFilePromise(e,r){return this.makeCallPromise(e,async()=>{switch(r){case"utf8":return await this.baseFs.readFilePromise(e,r);default:return await this.baseFs.readFilePromise(e,r)}},async(i,{subPath:n})=>await i.readFilePromise(n,r))}readFileSync(e,r){return this.makeCallSync(e,()=>{switch(r){case"utf8":return this.baseFs.readFileSync(e,r);default:return this.baseFs.readFileSync(e,r)}},(i,{subPath:n})=>i.readFileSync(n,r))}async readdirPromise(e,{withFileTypes:r}={}){return await this.makeCallPromise(e,async()=>await this.baseFs.readdirPromise(e,{withFileTypes:r}),async(i,{subPath:n})=>await i.readdirPromise(n,{withFileTypes:r}),{requireSubpath:!1})}readdirSync(e,{withFileTypes:r}={}){return this.makeCallSync(e,()=>this.baseFs.readdirSync(e,{withFileTypes:r}),(i,{subPath:n})=>i.readdirSync(n,{withFileTypes:r}),{requireSubpath:!1})}async readlinkPromise(e){return await this.makeCallPromise(e,async()=>await this.baseFs.readlinkPromise(e),async(r,{subPath:i})=>await r.readlinkPromise(i))}readlinkSync(e){return this.makeCallSync(e,()=>this.baseFs.readlinkSync(e),(r,{subPath:i})=>r.readlinkSync(i))}async truncatePromise(e,r){return await this.makeCallPromise(e,async()=>await this.baseFs.truncatePromise(e,r),async(i,{subPath:n})=>await i.truncatePromise(n,r))}truncateSync(e,r){return this.makeCallSync(e,()=>this.baseFs.truncateSync(e,r),(i,{subPath:n})=>i.truncateSync(n,r))}watch(e,r,i){return this.makeCallSync(e,()=>this.baseFs.watch(e,r,i),(n,{subPath:s})=>n.watch(s,r,i))}watchFile(e,r,i){return this.makeCallSync(e,()=>this.baseFs.watchFile(e,r,i),()=>yC(this,e,r,i))}unwatchFile(e,r){return this.makeCallSync(e,()=>this.baseFs.unwatchFile(e,r),()=>wg(this,e,r))}async makeCallPromise(e,r,i,{requireSubpath:n=!0}={}){if(typeof e!="string")return await r();let s=this.resolve(e),o=this.findZip(s);return o?n&&o.subPath==="/"?await r():await this.getZipPromise(o.archivePath,async a=>await i(a,o)):await r()}makeCallSync(e,r,i,{requireSubpath:n=!0}={}){if(typeof e!="string")return r();let s=this.resolve(e),o=this.findZip(s);return!o||n&&o.subPath==="/"?r():this.getZipSync(o.archivePath,a=>i(a,o))}findZip(e){if(this.filter&&!this.filter.test(e))return null;let r="";for(;;){let i=eae(e.substr(r.length));if(!i)return null;if(r=this.pathUtils.join(r,i),this.isZip.has(r)===!1){if(this.notZip.has(r))continue;try{if(!this.baseFs.lstatSync(r).isFile()){this.notZip.add(r);continue}}catch{return null}this.isZip.add(r)}return{archivePath:r,subPath:this.pathUtils.join(Qe.root,e.substr(r.length))}}}limitOpenFiles(e){if(this.zipInstances===null)return;let r=Date.now(),i=r+this.maxAge,n=e===null?0:this.zipInstances.size-e;for(let[s,{zipFs:o,expiresAt:a,refCount:l}]of this.zipInstances.entries())if(!(l!==0||o.hasOpenFileHandles())){if(r>=a){o.saveAndClose(),this.zipInstances.delete(s),n-=1;continue}else if(e===null||n<=0){i=a;break}o.saveAndClose(),this.zipInstances.delete(s),n-=1}this.limitOpenFilesTimeout===null&&(e===null&&this.zipInstances.size>0||e!==null)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},i-r).unref())}async getZipPromise(e,r){let i=async()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:await this.baseFs.statPromise(e)});if(this.zipInstances){let n=this.zipInstances.get(e);if(!n){let s=await i();n=this.zipInstances.get(e),n||(n={zipFs:new Qr(e,s),expiresAt:0,refCount:0})}this.zipInstances.delete(e),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(e,n),n.expiresAt=Date.now()+this.maxAge,n.refCount+=1;try{return await r(n.zipFs)}finally{n.refCount-=1}}else{let n=new Qr(e,await i());try{return await r(n)}finally{n.saveAndClose()}}}getZipSync(e,r){let i=()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:this.baseFs.statSync(e)});if(this.zipInstances){let n=this.zipInstances.get(e);return n||(n={zipFs:new Qr(e,i()),expiresAt:0,refCount:0}),this.zipInstances.delete(e),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(e,n),n.expiresAt=Date.now()+this.maxAge,r(n.zipFs)}else{let n=new Qr(e,i());try{return r(n)}finally{n.saveAndClose()}}}};var xg=re(require("util"));var wC=re(require("url"));var bw=class extends Lr{constructor(e){super(O);this.baseFs=e}mapFromBase(e){return e}mapToBase(e){return e instanceof wC.URL?(0,wC.fileURLToPath)(e):e}};var tae=new Set(["accessSync","appendFileSync","createReadStream","chmodSync","chownSync","closeSync","copyFileSync","linkSync","lstatSync","fstatSync","lutimesSync","mkdirSync","openSync","opendirSync","readSync","readlinkSync","readFileSync","readdirSync","readlinkSync","realpathSync","renameSync","rmdirSync","statSync","symlinkSync","truncateSync","unlinkSync","unwatchFile","utimesSync","watch","watchFile","writeFileSync","writeSync"]),YL=new Set(["accessPromise","appendFilePromise","chmodPromise","chownPromise","closePromise","copyFilePromise","linkPromise","fstatPromise","lstatPromise","lutimesPromise","mkdirPromise","openPromise","opendirPromise","readdirPromise","realpathPromise","readFilePromise","readdirPromise","readlinkPromise","renamePromise","rmdirPromise","statPromise","symlinkPromise","truncatePromise","unlinkPromise","utimesPromise","writeFilePromise","writeSync"]),rae=new Set(["appendFilePromise","chmodPromise","chownPromise","closePromise","readPromise","readFilePromise","statPromise","truncatePromise","utimesPromise","writePromise","writeFilePromise"]);function Dw(t,e){e=new bw(e);let r=(i,n,s)=>{let o=i[n];i[n]=s,typeof(o==null?void 0:o[xg.promisify.custom])!="undefined"&&(s[xg.promisify.custom]=o[xg.promisify.custom])};{r(t,"exists",(i,...n)=>{let o=typeof n[n.length-1]=="function"?n.pop():()=>{};process.nextTick(()=>{e.existsPromise(i).then(a=>{o(a)},()=>{o(!1)})})}),r(t,"read",(i,n,...s)=>{let a=typeof s[s.length-1]=="function"?s.pop():()=>{};process.nextTick(()=>{e.readPromise(i,n,...s).then(l=>{a(null,l,n)},l=>{a(l,0,n)})})});for(let i of YL){let n=i.replace(/Promise$/,"");if(typeof t[n]=="undefined")continue;let s=e[i];if(typeof s=="undefined")continue;r(t,n,(...a)=>{let c=typeof a[a.length-1]=="function"?a.pop():()=>{};process.nextTick(()=>{s.apply(e,a).then(u=>{c(null,u)},u=>{c(u)})})})}t.realpath.native=t.realpath}{r(t,"existsSync",i=>{try{return e.existsSync(i)}catch(n){return!1}});for(let i of tae){let n=i;if(typeof t[n]=="undefined")continue;let s=e[i];typeof s!="undefined"&&r(t,n,s.bind(e))}t.realpathSync.native=t.realpathSync}{let i=process.emitWarning;process.emitWarning=()=>{};let n;try{n=t.promises}finally{process.emitWarning=i}if(typeof n!="undefined"){for(let o of YL){let a=o.replace(/Promise$/,"");if(typeof n[a]=="undefined")continue;let l=e[o];typeof l!="undefined"&&o!=="open"&&r(n,a,l.bind(e))}class s{constructor(a){this.fd=a}}for(let o of rae){let a=o.replace(/Promise$/,""),l=e[o];typeof l!="undefined"&&r(s.prototype,a,function(...c){return l.call(e,this.fd,...c)})}r(n,"open",async(...o)=>{let a=await e.openPromise(...o);return new s(a)})}}t.read[xg.promisify.custom]=async(i,n,...s)=>({bytesRead:await e.readPromise(i,n,...s),buffer:n})}function QC(t,e){let r=Object.create(t);return Dw(r,e),r}var HL=re(require("os"));function jL(t){let e=O.toPortablePath(HL.default.tmpdir()),r=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,"0");return D.join(e,`${t}${r}`)}var Pn=new Set,GL=!1;function qL(){GL||(GL=!0,process.once("exit",()=>{N.rmtempSync()}))}var N=Object.assign(new Ft,{detachTemp(t){Pn.delete(t)},mktempSync(t){for(qL();;){let e=jL("xfs-");try{this.mkdirSync(e)}catch(i){if(i.code==="EEXIST")continue;throw i}let r=this.realpathSync(e);if(Pn.add(r),typeof t!="undefined")try{return t(r)}finally{if(Pn.has(r)){Pn.delete(r);try{this.removeSync(r)}catch{}}}else return r}},async mktempPromise(t){for(qL();;){let e=jL("xfs-");try{await this.mkdirPromise(e)}catch(i){if(i.code==="EEXIST")continue;throw i}let r=await this.realpathPromise(e);if(Pn.add(r),typeof t!="undefined")try{return await t(r)}finally{if(Pn.has(r)){Pn.delete(r);try{await this.removePromise(r)}catch{}}}else return r}},async rmtempPromise(){await Promise.all(Array.from(Pn.values()).map(async t=>{try{await N.removePromise(t,{maxRetries:0}),Pn.delete(t)}catch{}}))},rmtempSync(){for(let t of Pn)try{N.removeSync(t),Pn.delete(t)}catch{}}});var Ow=re(Mw()),sn;(function(i){i[i.Never=0]="Never",i[i.ErrorCode=1]="ErrorCode",i[i.Always=2]="Always"})(sn||(sn={}));function Wa(t){return t!==null&&typeof t.fd=="number"}var za=new Set;function Tw(){}function Kw(){for(let t of za)t.kill()}async function Os(t,e,{cwd:r,env:i=process.env,strict:n=!1,stdin:s=null,stdout:o,stderr:a,end:l=2}){let c=["pipe","pipe","pipe"];s===null?c[0]="ignore":Wa(s)&&(c[0]=s),Wa(o)&&(c[1]=o),Wa(a)&&(c[2]=a);let u=(0,Ow.default)(t,e,{cwd:O.fromPortablePath(r),env:V(P({},i),{PWD:O.fromPortablePath(r)}),stdio:c});za.add(u),za.size===1&&(process.on("SIGINT",Tw),process.on("SIGTERM",Kw)),!Wa(s)&&s!==null&&s.pipe(u.stdin),Wa(o)||u.stdout.pipe(o,{end:!1}),Wa(a)||u.stderr.pipe(a,{end:!1});let g=()=>{for(let f of new Set([o,a]))Wa(f)||f.end()};return new Promise((f,h)=>{u.on("error",p=>{za.delete(u),za.size===0&&(process.off("SIGINT",Tw),process.off("SIGTERM",Kw)),(l===2||l===1)&&g(),h(p)}),u.on("close",(p,m)=>{za.delete(u),za.size===0&&(process.off("SIGINT",Tw),process.off("SIGTERM",Kw)),(l===2||l===1&&p>0)&&g(),p===0||!n?f({code:Uw(p,m)}):h(p!==null?new Error(`Child "${t}" exited with exit code ${p}`):new Error(`Child "${t}" exited with signal ${m}`))})})}async function kae(t,e,{cwd:r,env:i=process.env,encoding:n="utf8",strict:s=!1}){let o=["ignore","pipe","pipe"],a=[],l=[],c=O.fromPortablePath(r);typeof i.PWD!="undefined"&&(i=V(P({},i),{PWD:c}));let u=(0,Ow.default)(t,e,{cwd:c,env:i,stdio:o});return u.stdout.on("data",g=>{a.push(g)}),u.stderr.on("data",g=>{l.push(g)}),await new Promise((g,f)=>{u.on("error",()=>{f()}),u.on("close",(h,p)=>{let m=n==="buffer"?Buffer.concat(a):Buffer.concat(a).toString(n),I=n==="buffer"?Buffer.concat(l):Buffer.concat(l).toString(n);h===0||!s?g({code:Uw(h,p),stdout:m,stderr:I}):f(Object.assign(new Error(`Child "${t}" exited with exit code ${h} - -${I}`),{code:Uw(h,p),stdout:m,stderr:I}))})})}var Pae=new Map([["SIGINT",2],["SIGQUIT",3],["SIGKILL",9],["SIGTERM",15]]);function Uw(t,e){let r=Pae.get(e);return typeof r!="undefined"?128+r:t!=null?t:1}var Yw={};et(Yw,{getDefaultGlobalFolder:()=>jw,getHomeFolder:()=>Pg,isFolderInside:()=>Gw});var Hw=re(require("os"));function jw(){if(process.platform==="win32"){let t=O.toPortablePath(process.env.LOCALAPPDATA||O.join((0,Hw.homedir)(),"AppData","Local"));return D.resolve(t,"Yarn/Berry")}if(process.env.XDG_DATA_HOME){let t=O.toPortablePath(process.env.XDG_DATA_HOME);return D.resolve(t,"yarn/berry")}return D.resolve(Pg(),".yarn/berry")}function Pg(){return O.toPortablePath((0,Hw.homedir)()||"/usr/local/share")}function Gw(t,e){let r=D.relative(e,t);return r&&!r.startsWith("..")&&!D.isAbsolute(r)}var ae={};et(ae,{LogLevel:()=>Nn,Style:()=>pA,Type:()=>Pe,addLogFilterSupport:()=>Bf,applyColor:()=>Gi,applyHyperlink:()=>tc,applyStyle:()=>Ym,json:()=>rc,mark:()=>ib,pretty:()=>Je,prettyField:()=>CA,prettyList:()=>hb,supportsColor:()=>Km,supportsHyperlinks:()=>gb,tuple:()=>dA});var yf=re(eQ()),K2=re(Lg()),U2=re(Hi()),Y2=re(bO());var z;(function(_){_[_.UNNAMED=0]="UNNAMED",_[_.EXCEPTION=1]="EXCEPTION",_[_.MISSING_PEER_DEPENDENCY=2]="MISSING_PEER_DEPENDENCY",_[_.CYCLIC_DEPENDENCIES=3]="CYCLIC_DEPENDENCIES",_[_.DISABLED_BUILD_SCRIPTS=4]="DISABLED_BUILD_SCRIPTS",_[_.BUILD_DISABLED=5]="BUILD_DISABLED",_[_.SOFT_LINK_BUILD=6]="SOFT_LINK_BUILD",_[_.MUST_BUILD=7]="MUST_BUILD",_[_.MUST_REBUILD=8]="MUST_REBUILD",_[_.BUILD_FAILED=9]="BUILD_FAILED",_[_.RESOLVER_NOT_FOUND=10]="RESOLVER_NOT_FOUND",_[_.FETCHER_NOT_FOUND=11]="FETCHER_NOT_FOUND",_[_.LINKER_NOT_FOUND=12]="LINKER_NOT_FOUND",_[_.FETCH_NOT_CACHED=13]="FETCH_NOT_CACHED",_[_.YARN_IMPORT_FAILED=14]="YARN_IMPORT_FAILED",_[_.REMOTE_INVALID=15]="REMOTE_INVALID",_[_.REMOTE_NOT_FOUND=16]="REMOTE_NOT_FOUND",_[_.RESOLUTION_PACK=17]="RESOLUTION_PACK",_[_.CACHE_CHECKSUM_MISMATCH=18]="CACHE_CHECKSUM_MISMATCH",_[_.UNUSED_CACHE_ENTRY=19]="UNUSED_CACHE_ENTRY",_[_.MISSING_LOCKFILE_ENTRY=20]="MISSING_LOCKFILE_ENTRY",_[_.WORKSPACE_NOT_FOUND=21]="WORKSPACE_NOT_FOUND",_[_.TOO_MANY_MATCHING_WORKSPACES=22]="TOO_MANY_MATCHING_WORKSPACES",_[_.CONSTRAINTS_MISSING_DEPENDENCY=23]="CONSTRAINTS_MISSING_DEPENDENCY",_[_.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]="CONSTRAINTS_INCOMPATIBLE_DEPENDENCY",_[_.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]="CONSTRAINTS_EXTRANEOUS_DEPENDENCY",_[_.CONSTRAINTS_INVALID_DEPENDENCY=26]="CONSTRAINTS_INVALID_DEPENDENCY",_[_.CANT_SUGGEST_RESOLUTIONS=27]="CANT_SUGGEST_RESOLUTIONS",_[_.FROZEN_LOCKFILE_EXCEPTION=28]="FROZEN_LOCKFILE_EXCEPTION",_[_.CROSS_DRIVE_VIRTUAL_LOCAL=29]="CROSS_DRIVE_VIRTUAL_LOCAL",_[_.FETCH_FAILED=30]="FETCH_FAILED",_[_.DANGEROUS_NODE_MODULES=31]="DANGEROUS_NODE_MODULES",_[_.NODE_GYP_INJECTED=32]="NODE_GYP_INJECTED",_[_.AUTHENTICATION_NOT_FOUND=33]="AUTHENTICATION_NOT_FOUND",_[_.INVALID_CONFIGURATION_KEY=34]="INVALID_CONFIGURATION_KEY",_[_.NETWORK_ERROR=35]="NETWORK_ERROR",_[_.LIFECYCLE_SCRIPT=36]="LIFECYCLE_SCRIPT",_[_.CONSTRAINTS_MISSING_FIELD=37]="CONSTRAINTS_MISSING_FIELD",_[_.CONSTRAINTS_INCOMPATIBLE_FIELD=38]="CONSTRAINTS_INCOMPATIBLE_FIELD",_[_.CONSTRAINTS_EXTRANEOUS_FIELD=39]="CONSTRAINTS_EXTRANEOUS_FIELD",_[_.CONSTRAINTS_INVALID_FIELD=40]="CONSTRAINTS_INVALID_FIELD",_[_.AUTHENTICATION_INVALID=41]="AUTHENTICATION_INVALID",_[_.PROLOG_UNKNOWN_ERROR=42]="PROLOG_UNKNOWN_ERROR",_[_.PROLOG_SYNTAX_ERROR=43]="PROLOG_SYNTAX_ERROR",_[_.PROLOG_EXISTENCE_ERROR=44]="PROLOG_EXISTENCE_ERROR",_[_.STACK_OVERFLOW_RESOLUTION=45]="STACK_OVERFLOW_RESOLUTION",_[_.AUTOMERGE_FAILED_TO_PARSE=46]="AUTOMERGE_FAILED_TO_PARSE",_[_.AUTOMERGE_IMMUTABLE=47]="AUTOMERGE_IMMUTABLE",_[_.AUTOMERGE_SUCCESS=48]="AUTOMERGE_SUCCESS",_[_.AUTOMERGE_REQUIRED=49]="AUTOMERGE_REQUIRED",_[_.DEPRECATED_CLI_SETTINGS=50]="DEPRECATED_CLI_SETTINGS",_[_.PLUGIN_NAME_NOT_FOUND=51]="PLUGIN_NAME_NOT_FOUND",_[_.INVALID_PLUGIN_REFERENCE=52]="INVALID_PLUGIN_REFERENCE",_[_.CONSTRAINTS_AMBIGUITY=53]="CONSTRAINTS_AMBIGUITY",_[_.CACHE_OUTSIDE_PROJECT=54]="CACHE_OUTSIDE_PROJECT",_[_.IMMUTABLE_INSTALL=55]="IMMUTABLE_INSTALL",_[_.IMMUTABLE_CACHE=56]="IMMUTABLE_CACHE",_[_.INVALID_MANIFEST=57]="INVALID_MANIFEST",_[_.PACKAGE_PREPARATION_FAILED=58]="PACKAGE_PREPARATION_FAILED",_[_.INVALID_RANGE_PEER_DEPENDENCY=59]="INVALID_RANGE_PEER_DEPENDENCY",_[_.INCOMPATIBLE_PEER_DEPENDENCY=60]="INCOMPATIBLE_PEER_DEPENDENCY",_[_.DEPRECATED_PACKAGE=61]="DEPRECATED_PACKAGE",_[_.INCOMPATIBLE_OS=62]="INCOMPATIBLE_OS",_[_.INCOMPATIBLE_CPU=63]="INCOMPATIBLE_CPU",_[_.FROZEN_ARTIFACT_EXCEPTION=64]="FROZEN_ARTIFACT_EXCEPTION",_[_.TELEMETRY_NOTICE=65]="TELEMETRY_NOTICE",_[_.PATCH_HUNK_FAILED=66]="PATCH_HUNK_FAILED",_[_.INVALID_CONFIGURATION_VALUE=67]="INVALID_CONFIGURATION_VALUE",_[_.UNUSED_PACKAGE_EXTENSION=68]="UNUSED_PACKAGE_EXTENSION",_[_.REDUNDANT_PACKAGE_EXTENSION=69]="REDUNDANT_PACKAGE_EXTENSION",_[_.AUTO_NM_SUCCESS=70]="AUTO_NM_SUCCESS",_[_.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]="NM_CANT_INSTALL_EXTERNAL_SOFT_LINK",_[_.NM_PRESERVE_SYMLINKS_REQUIRED=72]="NM_PRESERVE_SYMLINKS_REQUIRED",_[_.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]="UPDATE_LOCKFILE_ONLY_SKIP_LINK"})(z||(z={}));function MC(t){return`YN${t.toString(10).padStart(4,"0")}`}var pe={};et(pe,{BufferStream:()=>ZK,CachingStrategy:()=>aA,DefaultStream:()=>_K,assertNever:()=>JQ,bufferStream:()=>af,buildIgnorePattern:()=>Dge,convertMapsToIndexableObjects:()=>nm,dynamicRequire:()=>ql,escapeRegExp:()=>Bge,getArrayWithDefault:()=>Hl,getFactoryWithDefault:()=>Hs,getMapWithDefault:()=>jl,getSetWithDefault:()=>oA,isIndexableObject:()=>WQ,isPathLike:()=>Sge,isTaggedYarnVersion:()=>yge,mapAndFilter:()=>sA,mapAndFind:()=>XK,overrideType:()=>qQ,parseBoolean:()=>lf,parseOptionalBoolean:()=>r1,prettifyAsyncErrors:()=>Gl,prettifySyncErrors:()=>zQ,releaseAfterUseAsync:()=>Qge,replaceEnvVariables:()=>VQ,sortMap:()=>bi,tryParseOptionalBoolean:()=>XQ,validateEnum:()=>wge});var Jg={};et(Jg,{Builtins:()=>vQ,Cli:()=>ts,Command:()=>he,Option:()=>H,UsageError:()=>me});var Za=0,Kg=1,ri=2,dQ="",Mr="\0",Ml=-1,CQ=/^(-h|--help)(?:=([0-9]+))?$/,OC=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,DO=/^-[a-zA-Z]{2,}$/,mQ=/^([^=]+)=([\s\S]*)$/,IQ=process.env.DEBUG_CLI==="1";var me=class extends Error{constructor(e){super(e);this.clipanion={type:"usage"},this.name="UsageError"}},Ug=class extends Error{constructor(e,r){super();if(this.input=e,this.candidates=r,this.clipanion={type:"none"},this.name="UnknownSyntaxError",this.candidates.length===0)this.message="Command not found, but we're not sure what's the alternative.";else if(this.candidates.every(i=>i.reason!==null&&i.reason===r[0].reason)){let[{reason:i}]=this.candidates;this.message=`${i} - -${this.candidates.map(({usage:n})=>`$ ${n}`).join(` -`)}`}else if(this.candidates.length===1){let[{usage:i}]=this.candidates;this.message=`Command not found; did you mean: - -$ ${i} -${EQ(e)}`}else this.message=`Command not found; did you mean one of: - -${this.candidates.map(({usage:i},n)=>`${`${n}.`.padStart(4)} ${i}`).join(` -`)} - -${EQ(e)}`}},yQ=class extends Error{constructor(e,r){super();this.input=e,this.usages=r,this.clipanion={type:"none"},this.name="AmbiguousSyntaxError",this.message=`Cannot find which to pick amongst the following alternatives: - -${this.usages.map((i,n)=>`${`${n}.`.padStart(4)} ${i}`).join(` -`)} - -${EQ(e)}`}},EQ=t=>`While running ${t.filter(e=>e!==Mr).map(e=>{let r=JSON.stringify(e);return e.match(/\s/)||e.length===0||r!==`"${e}"`?r:e}).join(" ")}`;var Yg=Symbol("clipanion/isOption");function ii(t){return V(P({},t),{[Yg]:!0})}function es(t,e){return typeof t=="undefined"?[t,e]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[void 0,t]:[t,e]}function TC(t,e=!1){let r=t.replace(/^\.: /,"");return e&&(r=r[0].toLowerCase()+r.slice(1)),r}function Hg(t,e){return e.length===1?new me(`${t}: ${TC(e[0],!0)}`):new me(`${t}: -${e.map(r=>` -- ${TC(r)}`).join("")}`)}function jg(t,e,r){if(typeof r=="undefined")return e;let i=[],n=[],s=a=>{let l=e;return e=a,s.bind(null,l)};if(!r(e,{errors:i,coercions:n,coercion:s}))throw Hg(`Invalid value for ${t}`,i);for(let[,a]of n)a();return e}var he=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let r=this.constructor.schema;if(typeof r!="undefined"){let{isDict:n,isUnknown:s,applyCascade:o}=await Promise.resolve().then(()=>(vn(),Ol)),a=o(n(s()),r),l=[],c=[];if(!a(this,{errors:l,coercions:c}))throw Hg("Invalid option schema",l);for(let[,g]of c)g()}let i=await this.execute();return typeof i!="undefined"?i:0}};he.isOption=Yg;he.Default=[];function Qi(t){IQ&&console.log(t)}var MO={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:Ml};function OO(){return{nodes:[si(),si(),si()]}}function $le(t){let e=OO(),r=[],i=e.nodes.length;for(let n of t){r.push(i);for(let s=0;s{if(e.has(i))return;e.add(i);let n=t.nodes[i];for(let o of Object.values(n.statics))for(let{to:a}of o)r(a);for(let[,{to:o}]of n.dynamics)r(o);for(let{to:o}of n.shortcuts)r(o);let s=new Set(n.shortcuts.map(({to:o})=>o));for(;n.shortcuts.length>0;){let{to:o}=n.shortcuts.shift(),a=t.nodes[o];for(let[l,c]of Object.entries(a.statics)){let u=Object.prototype.hasOwnProperty.call(n.statics,l)?n.statics[l]:n.statics[l]=[];for(let g of c)u.some(({to:f})=>g.to===f)||u.push(g)}for(let[l,c]of a.dynamics)n.dynamics.some(([u,{to:g}])=>l===u&&c.to===g)||n.dynamics.push([l,c]);for(let l of a.shortcuts)s.has(l.to)||(n.shortcuts.push(l),s.add(l.to))}};r(Za)}function tce(t,{prefix:e=""}={}){if(IQ){Qi(`${e}Nodes are:`);for(let r=0;rl!==ri).map(({state:l})=>({usage:l.candidateUsage,reason:null})));if(a.every(({node:l})=>l===ri))throw new Ug(e,a.map(({state:l})=>({usage:l.candidateUsage,reason:l.errorMessage})));i=rce(a)}if(i.length>0){Qi(" Results:");for(let s of i)Qi(` - ${s.node} -> ${JSON.stringify(s.state)}`)}else Qi(" No results");return i}function ice(t,e){if(e.selectedIndex!==null)return!0;if(Object.prototype.hasOwnProperty.call(t.statics,Mr)){for(let{to:r}of t.statics[Mr])if(r===Kg)return!0}return!1}function sce(t,e,r){let i=r&&e.length>0?[""]:[],n=KO(t,e,r),s=[],o=new Set,a=(l,c,u=!0)=>{let g=[c];for(;g.length>0;){let h=g;g=[];for(let p of h){let m=t.nodes[p],I=Object.keys(m.statics);for(let y of Object.keys(m.statics)){let B=I[0];for(let{to:x,reducer:F}of m.statics[B])F==="pushPath"&&(u||l.push(B),g.push(x))}}u=!1}let f=JSON.stringify(l);o.has(f)||(s.push(l),o.add(f))};for(let{node:l,state:c}of n){if(c.remainder!==null){a([c.remainder],l);continue}let u=t.nodes[l],g=ice(u,c);for(let[f,h]of Object.entries(u.statics))(g&&f!==Mr||!f.startsWith("-")&&h.some(({reducer:p})=>p==="pushPath"))&&a([...i,f],l);if(!!g)for(let[f,{to:h}]of u.dynamics){if(h===ri)continue;let p=nce(f,c);if(p!==null)for(let m of p)a([...i,m],l)}}return[...s].sort()}function ace(t,e){let r=KO(t,[...e,Mr]);return oce(e,r.map(({state:i})=>i))}function rce(t){let e=0;for(let{state:r}of t)r.path.length>e&&(e=r.path.length);return t.filter(({state:r})=>r.path.length===e)}function oce(t,e){let r=e.filter(g=>g.selectedIndex!==null);if(r.length===0)throw new Error;let i=r.filter(g=>g.requiredOptions.every(f=>f.some(h=>g.options.find(p=>p.name===h))));if(i.length===0)throw new Ug(t,r.map(g=>({usage:g.candidateUsage,reason:null})));let n=0;for(let g of i)g.path.length>n&&(n=g.path.length);let s=i.filter(g=>g.path.length===n),o=g=>g.positionals.filter(({extra:f})=>!f).length+g.options.length,a=s.map(g=>({state:g,positionalCount:o(g)})),l=0;for(let{positionalCount:g}of a)g>l&&(l=g);let c=a.filter(({positionalCount:g})=>g===l).map(({state:g})=>g),u=Ace(c);if(u.length>1)throw new yQ(t,u.map(g=>g.candidateUsage));return u[0]}function Ace(t){let e=[],r=[];for(let i of t)i.selectedIndex===Ml?r.push(i):e.push(i);return r.length>0&&e.push(V(P({},MO),{path:UO(...r.map(i=>i.path)),options:r.reduce((i,n)=>i.concat(n.options),[])})),e}function UO(t,e,...r){return e===void 0?Array.from(t):UO(t.filter((i,n)=>i===e[n]),...r)}function si(){return{dynamics:[],shortcuts:[],statics:{}}}function TO(t){return t===Kg||t===ri}function xQ(t,e=0){return{to:TO(t.to)?t.to:t.to>2?t.to+e-2:t.to+e,reducer:t.reducer}}function _le(t,e=0){let r=si();for(let[i,n]of t.dynamics)r.dynamics.push([i,xQ(n,e)]);for(let i of t.shortcuts)r.shortcuts.push(xQ(i,e));for(let[i,n]of Object.entries(t.statics))r.statics[i]=n.map(s=>xQ(s,e));return r}function Or(t,e,r,i,n){t.nodes[e].dynamics.push([r,{to:i,reducer:n}])}function Tl(t,e,r,i){t.nodes[e].shortcuts.push({to:r,reducer:i})}function Ks(t,e,r,i,n){(Object.prototype.hasOwnProperty.call(t.nodes[e].statics,r)?t.nodes[e].statics[r]:t.nodes[e].statics[r]=[]).push({to:i,reducer:n})}function UC(t,e,r,i){if(Array.isArray(e)){let[n,...s]=e;return t[n](r,i,...s)}else return t[e](r,i)}function nce(t,e){let r=Array.isArray(t)?YC[t[0]]:YC[t];if(typeof r.suggest=="undefined")return null;let i=Array.isArray(t)?t.slice(1):[];return r.suggest(e,...i)}var YC={always:()=>!0,isOptionLike:(t,e)=>!t.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(t,e)=>t.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(t,e,r,i)=>!t.ignoreOptions&&e===r,isBatchOption:(t,e,r)=>!t.ignoreOptions&&DO.test(e)&&[...e.slice(1)].every(i=>r.includes(`-${i}`)),isBoundOption:(t,e,r,i)=>{let n=e.match(mQ);return!t.ignoreOptions&&!!n&&OC.test(n[1])&&r.includes(n[1])&&i.filter(s=>s.names.includes(n[1])).every(s=>s.allowBinding)},isNegatedOption:(t,e,r)=>!t.ignoreOptions&&e===`--no-${r.slice(2)}`,isHelp:(t,e)=>!t.ignoreOptions&&CQ.test(e),isUnsupportedOption:(t,e,r)=>!t.ignoreOptions&&e.startsWith("-")&&OC.test(e)&&!r.includes(e),isInvalidOption:(t,e)=>!t.ignoreOptions&&e.startsWith("-")&&!OC.test(e)};YC.isOption.suggest=(t,e,r=!0)=>r?null:[e];var SQ={setCandidateState:(t,e,r)=>P(P({},t),r),setSelectedIndex:(t,e,r)=>V(P({},t),{selectedIndex:r}),pushBatch:(t,e)=>V(P({},t),{options:t.options.concat([...e.slice(1)].map(r=>({name:`-${r}`,value:!0})))}),pushBound:(t,e)=>{let[,r,i]=e.match(mQ);return V(P({},t),{options:t.options.concat({name:r,value:i})})},pushPath:(t,e)=>V(P({},t),{path:t.path.concat(e)}),pushPositional:(t,e)=>V(P({},t),{positionals:t.positionals.concat({value:e,extra:!1})}),pushExtra:(t,e)=>V(P({},t),{positionals:t.positionals.concat({value:e,extra:!0})}),pushExtraNoLimits:(t,e)=>V(P({},t),{positionals:t.positionals.concat({value:e,extra:ji})}),pushTrue:(t,e,r=e)=>V(P({},t),{options:t.options.concat({name:e,value:!0})}),pushFalse:(t,e,r=e)=>V(P({},t),{options:t.options.concat({name:r,value:!1})}),pushUndefined:(t,e)=>V(P({},t),{options:t.options.concat({name:e,value:void 0})}),pushStringValue:(t,e)=>{var r;let i=V(P({},t),{options:[...t.options]}),n=t.options[t.options.length-1];return n.value=((r=n.value)!==null&&r!==void 0?r:[]).concat([e]),i},setStringValue:(t,e)=>{let r=V(P({},t),{options:[...t.options]}),i=t.options[t.options.length-1];return i.value=e,r},inhibateOptions:t=>V(P({},t),{ignoreOptions:!0}),useHelp:(t,e,r)=>{let[,,i]=e.match(CQ);return typeof i!="undefined"?V(P({},t),{options:[{name:"-c",value:String(r)},{name:"-i",value:i}]}):V(P({},t),{options:[{name:"-c",value:String(r)}]})},setError:(t,e,r)=>e===Mr?V(P({},t),{errorMessage:`${r}.`}):V(P({},t),{errorMessage:`${r} ("${e}").`}),setOptionArityError:(t,e)=>{let r=t.options[t.options.length-1];return V(P({},t),{errorMessage:`Not enough arguments to option ${r.name}.`})}},ji=Symbol(),YO=class{constructor(e,r){this.allOptionNames=[],this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=r}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:r=this.arity.trailing,extra:i=this.arity.extra,proxy:n=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:r,extra:i,proxy:n})}addPositional({name:e="arg",required:r=!0}={}){if(!r&&this.arity.extra===ji)throw new Error("Optional parameters cannot be declared when using .rest() or .proxy()");if(!r&&this.arity.trailing.length>0)throw new Error("Optional parameters cannot be declared after the required trailing positional arguments");!r&&this.arity.extra!==ji?this.arity.extra.push(e):this.arity.extra!==ji&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e="arg",required:r=0}={}){if(this.arity.extra===ji)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let i=0;i1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(i))throw new Error(`The arity must be an integer, got ${i}`);if(i<0)throw new Error(`The arity must be positive, got ${i}`);this.allOptionNames.push(...e),this.options.push({names:e,description:r,arity:i,hidden:n,required:s,allowBinding:o})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:r=!0}={}){let i=[this.cliOpts.binaryName],n=[];if(this.paths.length>0&&i.push(...this.paths[0]),e){for(let{names:o,arity:a,hidden:l,description:c,required:u}of this.options){if(l)continue;let g=[];for(let h=0;h`:`[${f}]`)}i.push(...this.arity.leading.map(o=>`<${o}>`)),this.arity.extra===ji?i.push("..."):i.push(...this.arity.extra.map(o=>`[${o}]`)),i.push(...this.arity.trailing.map(o=>`<${o}>`))}return{usage:i.join(" "),options:n}}compile(){if(typeof this.context=="undefined")throw new Error("Assertion failed: No context attached");let e=OO(),r=Za,i=this.usage().usage,n=this.options.filter(a=>a.required).map(a=>a.names);r=Fn(e,si()),Ks(e,Za,dQ,r,["setCandidateState",{candidateUsage:i,requiredOptions:n}]);let s=this.arity.proxy?"always":"isNotOptionLike",o=this.paths.length>0?this.paths:[[]];for(let a of o){let l=r;if(a.length>0){let f=Fn(e,si());Tl(e,l,f),this.registerOptions(e,f),l=f}for(let f=0;f0||!this.arity.proxy){let f=Fn(e,si());Or(e,l,"isHelp",f,["useHelp",this.cliIndex]),Ks(e,f,Mr,Kg,["setSelectedIndex",Ml]),this.registerOptions(e,l)}this.arity.leading.length>0&&Ks(e,l,Mr,ri,["setError","Not enough positional arguments"]);let c=l;for(let f=0;f0||f+1!==this.arity.leading.length)&&Ks(e,h,Mr,ri,["setError","Not enough positional arguments"]),Or(e,c,"isNotOptionLike",h,"pushPositional"),c=h}let u=c;if(this.arity.extra===ji||this.arity.extra.length>0){let f=Fn(e,si());if(Tl(e,c,f),this.arity.extra===ji){let h=Fn(e,si());this.arity.proxy||this.registerOptions(e,h),Or(e,c,s,h,"pushExtraNoLimits"),Or(e,h,s,h,"pushExtraNoLimits"),Tl(e,h,f)}else for(let h=0;h0&&Ks(e,u,Mr,ri,["setError","Not enough positional arguments"]);let g=u;for(let f=0;fo.length>s.length?o:s,"");if(i.arity===0)for(let s of i.names)Or(e,r,["isOption",s,i.hidden||s!==n],r,"pushTrue"),s.startsWith("--")&&!s.startsWith("--no-")&&Or(e,r,["isNegatedOption",s],r,["pushFalse",s]);else{let s=Fn(e,si());for(let o of i.names)Or(e,r,["isOption",o,i.hidden||o!==n],s,"pushUndefined");for(let o=0;o=0&&eace(i,n),suggest:(n,s)=>sce(i,n,s)}}};var HO=80,kQ=Array(HO).fill("\u2501");for(let t=0;t<=24;++t)kQ[kQ.length-t]=`[38;5;${232+t}m\u2501`;var PQ={header:t=>`\u2501\u2501\u2501 ${t}${t.length`${t}`,error:t=>`${t}`,code:t=>`${t}`},jO={header:t=>t,bold:t=>t,error:t=>t,code:t=>t};function lce(t){let e=t.split(` -`),r=e.filter(n=>n.match(/\S/)),i=r.length>0?r.reduce((n,s)=>Math.min(n,s.length-s.trimStart().length),Number.MAX_VALUE):0;return e.map(n=>n.slice(i).trimRight()).join(` -`)}function An(t,{format:e,paragraphs:r}){return t=t.replace(/\r\n?/g,` -`),t=lce(t),t=t.replace(/^\n+|\n+$/g,""),t=t.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 - -`),t=t.replace(/\n(\n)?\n*/g,"$1"),r&&(t=t.split(/\n/).map(i=>{let n=i.match(/^\s*[*-][\t ]+(.*)/);if(!n)return i.match(/(.{1,80})(?: |$)/g).join(` -`);let s=i.length-i.trimStart().length;return n[1].match(new RegExp(`(.{1,${78-s}})(?: |$)`,"g")).map((o,a)=>" ".repeat(s)+(a===0?"- ":" ")+o).join(` -`)}).join(` - -`)),t=t.replace(/(`+)((?:.|[\n])*?)\1/g,(i,n,s)=>e.code(n+s+n)),t=t.replace(/(\*\*)((?:.|[\n])*?)\1/g,(i,n,s)=>e.bold(n+s+n)),t?`${t} -`:""}var qg=class extends he{constructor(e){super();this.contexts=e,this.commands=[]}static from(e,r){let i=new qg(r);i.path=e.path;for(let n of e.options)switch(n.name){case"-c":i.commands.push(Number(n.value));break;case"-i":i.index=Number(n.value);break}return i}async execute(){let e=this.commands;if(typeof this.index!="undefined"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: -`),this.context.stdout.write(` -`);let r=0;for(let i of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[i].commandClass,{prefix:`${r++}. `.padStart(5)}));this.context.stdout.write(` -`),this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands. -`)}}};var GO=Symbol("clipanion/errorCommand");function cce(){return process.env.FORCE_COLOR==="0"?!1:!!(process.env.FORCE_COLOR==="1"||typeof process.stdout!="undefined"&&process.stdout.isTTY)}var ts=class{constructor({binaryLabel:e,binaryName:r="...",binaryVersion:i,enableColors:n=cce()}={}){this.registrations=new Map,this.builder=new Gg({binaryName:r}),this.binaryLabel=e,this.binaryName=r,this.binaryVersion=i,this.enableColors=n}static from(e,r={}){let i=new ts(r);for(let n of e)i.register(n);return i}register(e){var r;let i=new Map,n=new e;for(let l in n){let c=n[l];typeof c=="object"&&c!==null&&c[he.isOption]&&i.set(l,c)}let s=this.builder.command(),o=s.cliIndex,a=(r=e.paths)!==null&&r!==void 0?r:n.paths;if(typeof a!="undefined")for(let l of a)s.addPath(l);this.registrations.set(e,{specs:i,builder:s,index:o});for(let[l,{definition:c}]of i.entries())c(s,l);s.setContext({commandClass:e})}process(e){let{contexts:r,process:i}=this.builder.compile(),n=i(e);switch(n.selectedIndex){case Ml:return qg.from(n,r);default:{let{commandClass:s}=r[n.selectedIndex],o=this.registrations.get(s);if(typeof o=="undefined")throw new Error("Assertion failed: Expected the command class to have been registered.");let a=new s;a.path=n.path;try{for(let[l,{transformer:c}]of o.specs.entries())a[l]=c(o.builder,l,n);return a}catch(l){throw l[GO]=a,l}}break}}async run(e,r){let i;if(!Array.isArray(e))i=e;else try{i=this.process(e)}catch(s){return r.stdout.write(this.error(s)),1}if(i.help)return r.stdout.write(this.usage(i,{detailed:!0})),0;i.context=r,i.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableColors:this.enableColors,definitions:()=>this.definitions(),error:(s,o)=>this.error(s,o),process:s=>this.process(s),run:(s,o)=>this.run(s,P(P({},r),o)),usage:(s,o)=>this.usage(s,o)};let n;try{n=await i.validateAndExecute().catch(s=>i.catch(s).then(()=>0))}catch(s){return r.stdout.write(this.error(s,{command:i})),1}return n}async runExit(e,r){process.exitCode=await this.run(e,r)}suggest(e,r){let{suggest:i}=this.builder.compile();return i(e,r)}definitions({colored:e=!1}={}){let r=[];for(let[i,{index:n}]of this.registrations){if(typeof i.usage=="undefined")continue;let{usage:s}=this.getUsageByIndex(n,{detailed:!1}),{usage:o,options:a}=this.getUsageByIndex(n,{detailed:!0,inlineOptions:!1}),l=typeof i.usage.category!="undefined"?An(i.usage.category,{format:this.format(e),paragraphs:!1}):void 0,c=typeof i.usage.description!="undefined"?An(i.usage.description,{format:this.format(e),paragraphs:!1}):void 0,u=typeof i.usage.details!="undefined"?An(i.usage.details,{format:this.format(e),paragraphs:!0}):void 0,g=typeof i.usage.examples!="undefined"?i.usage.examples.map(([f,h])=>[An(f,{format:this.format(e),paragraphs:!1}),h.replace(/\$0/g,this.binaryName)]):void 0;r.push({path:s,usage:o,category:l,description:c,details:u,examples:g,options:a})}return r}usage(e=null,{colored:r,detailed:i=!1,prefix:n="$ "}={}){var s;if(e===null){for(let l of this.registrations.keys()){let c=l.paths,u=typeof l.usage!="undefined";if(!c||c.length===0||c.length===1&&c[0].length===0||((s=c==null?void 0:c.some(h=>h.length===0))!==null&&s!==void 0?s:!1))if(e){e=null;break}else e=l;else if(u){e=null;continue}}e&&(i=!0)}let o=e!==null&&e instanceof he?e.constructor:e,a="";if(o)if(i){let{description:l="",details:c="",examples:u=[]}=o.usage||{};l!==""&&(a+=An(l,{format:this.format(r),paragraphs:!1}).replace(/^./,h=>h.toUpperCase()),a+=` -`),(c!==""||u.length>0)&&(a+=`${this.format(r).header("Usage")} -`,a+=` -`);let{usage:g,options:f}=this.getUsageByRegistration(o,{inlineOptions:!1});if(a+=`${this.format(r).bold(n)}${g} -`,f.length>0){a+=` -`,a+=`${PQ.header("Options")} -`;let h=f.reduce((p,m)=>Math.max(p,m.definition.length),0);a+=` -`;for(let{definition:p,description:m}of f)a+=` ${this.format(r).bold(p.padEnd(h))} ${An(m,{format:this.format(r),paragraphs:!1})}`}if(c!==""&&(a+=` -`,a+=`${this.format(r).header("Details")} -`,a+=` -`,a+=An(c,{format:this.format(r),paragraphs:!0})),u.length>0){a+=` -`,a+=`${this.format(r).header("Examples")} -`;for(let[h,p]of u)a+=` -`,a+=An(h,{format:this.format(r),paragraphs:!1}),a+=`${p.replace(/^/m,` ${this.format(r).bold(n)}`).replace(/\$0/g,this.binaryName)} -`}}else{let{usage:l}=this.getUsageByRegistration(o);a+=`${this.format(r).bold(n)}${l} -`}else{let l=new Map;for(let[f,{index:h}]of this.registrations.entries()){if(typeof f.usage=="undefined")continue;let p=typeof f.usage.category!="undefined"?An(f.usage.category,{format:this.format(r),paragraphs:!1}):null,m=l.get(p);typeof m=="undefined"&&l.set(p,m=[]);let{usage:I}=this.getUsageByIndex(h);m.push({commandClass:f,usage:I})}let c=Array.from(l.keys()).sort((f,h)=>f===null?-1:h===null?1:f.localeCompare(h,"en",{usage:"sort",caseFirst:"upper"})),u=typeof this.binaryLabel!="undefined",g=typeof this.binaryVersion!="undefined";u||g?(u&&g?a+=`${this.format(r).header(`${this.binaryLabel} - ${this.binaryVersion}`)} - -`:u?a+=`${this.format(r).header(`${this.binaryLabel}`)} -`:a+=`${this.format(r).header(`${this.binaryVersion}`)} -`,a+=` ${this.format(r).bold(n)}${this.binaryName} -`):a+=`${this.format(r).bold(n)}${this.binaryName} -`;for(let f of c){let h=l.get(f).slice().sort((m,I)=>m.usage.localeCompare(I.usage,"en",{usage:"sort",caseFirst:"upper"})),p=f!==null?f.trim():"General commands";a+=` -`,a+=`${this.format(r).header(`${p}`)} -`;for(let{commandClass:m,usage:I}of h){let y=m.usage.description||"undocumented";a+=` -`,a+=` ${this.format(r).bold(I)} -`,a+=` ${An(y,{format:this.format(r),paragraphs:!1})}`}}a+=` -`,a+=An("You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.",{format:this.format(r),paragraphs:!0})}return a}error(e,r){var i,{colored:n,command:s=(i=e[GO])!==null&&i!==void 0?i:null}=r===void 0?{}:r;e instanceof Error||(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let o="",a=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");a==="Error"&&(a="Internal Error"),o+=`${this.format(n).error(a)}: ${e.message} -`;let l=e.clipanion;return typeof l!="undefined"?l.type==="usage"&&(o+=` -`,o+=this.usage(s)):e.stack&&(o+=`${e.stack.replace(/^.*\n/,"")} -`),o}getUsageByRegistration(e,r){let i=this.registrations.get(e);if(typeof i=="undefined")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(i.index,r)}getUsageByIndex(e,r){return this.builder.getBuilderByIndex(e).usage(r)}format(e=this.enableColors){return e?PQ:jO}};ts.defaultContext={stdin:process.stdin,stdout:process.stdout,stderr:process.stderr};var vQ={};et(vQ,{DefinitionsCommand:()=>HC,HelpCommand:()=>jC,VersionCommand:()=>GC});var HC=class extends he{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} -`)}};HC.paths=[["--clipanion=definitions"]];var jC=class extends he{async execute(){this.context.stdout.write(this.cli.usage())}};jC.paths=[["-h"],["--help"]];var GC=class extends he{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} -`)}};GC.paths=[["-v"],["--version"]];var H={};et(H,{Array:()=>qO,Boolean:()=>JO,Counter:()=>WO,Proxy:()=>zO,Rest:()=>VO,String:()=>XO,applyValidator:()=>jg,cleanValidationError:()=>TC,formatError:()=>Hg,isOptionSymbol:()=>Yg,makeCommandOption:()=>ii,rerouteArguments:()=>es});function qO(t,e,r){let[i,n]=es(e,r!=null?r:{}),{arity:s=1}=n,o=t.split(","),a=new Set(o);return ii({definition(l){l.addOption({names:o,arity:s,hidden:n==null?void 0:n.hidden,description:n==null?void 0:n.description,required:n.required})},transformer(l,c,u){let g=typeof i!="undefined"?[...i]:void 0;for(let{name:f,value:h}of u.options)!a.has(f)||(g=g!=null?g:[],g.push(h));return g}})}function JO(t,e,r){let[i,n]=es(e,r!=null?r:{}),s=t.split(","),o=new Set(s);return ii({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u=f);return u}})}function WO(t,e,r){let[i,n]=es(e,r!=null?r:{}),s=t.split(","),o=new Set(s);return ii({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u!=null||(u=0),f?u+=1:u=0);return u}})}function zO(t={}){return ii({definition(e,r){var i;e.addProxy({name:(i=t.name)!==null&&i!==void 0?i:r,required:t.required})},transformer(e,r,i){return i.positionals.map(({value:n})=>n)}})}function VO(t={}){return ii({definition(e,r){var i;e.addRest({name:(i=t.name)!==null&&i!==void 0?i:r,required:t.required})},transformer(e,r,i){let n=o=>{let a=i.positionals[o];return a.extra===ji||a.extra===!1&&oo)}})}function uce(t,e,r){let[i,n]=es(e,r!=null?r:{}),{arity:s=1}=n,o=t.split(","),a=new Set(o);return ii({definition(l){l.addOption({names:o,arity:n.tolerateBoolean?0:s,hidden:n.hidden,description:n.description,required:n.required})},transformer(l,c,u){let g,f=i;for(let{name:h,value:p}of u.options)!a.has(h)||(g=h,f=p);return typeof f=="string"?jg(g!=null?g:c,f,n.validator):f}})}function gce(t={}){let{required:e=!0}=t;return ii({definition(r,i){var n;r.addPositional({name:(n=t.name)!==null&&n!==void 0?n:i,required:t.required})},transformer(r,i,n){var s;for(let o=0;oJSON.stringify(i)).join(", ")})`);return e}function sA(t,e){let r=[];for(let i of t){let n=e(i);n!==zK&&r.push(n)}return r}var zK=Symbol();sA.skip=zK;function XK(t,e){for(let r of t){let i=e(r);if(i!==VK)return i}}var VK=Symbol();XK.skip=VK;function WQ(t){return typeof t=="object"&&t!==null}function nm(t){if(t instanceof Map&&(t=Object.fromEntries(t)),WQ(t))for(let e of Object.keys(t)){let r=t[e];WQ(r)&&(t[e]=nm(r))}return t}function Hs(t,e,r){let i=t.get(e);return typeof i=="undefined"&&t.set(e,i=r()),i}function Hl(t,e){let r=t.get(e);return typeof r=="undefined"&&t.set(e,r=[]),r}function oA(t,e){let r=t.get(e);return typeof r=="undefined"&&t.set(e,r=new Set),r}function jl(t,e){let r=t.get(e);return typeof r=="undefined"&&t.set(e,r=new Map),r}async function Qge(t,e){if(e==null)return await t();try{return await t()}finally{await e()}}async function Gl(t,e){try{return await t()}catch(r){throw r.message=e(r.message),r}}function zQ(t,e){try{return t()}catch(r){throw r.message=e(r.message),r}}async function af(t){return await new Promise((e,r)=>{let i=[];t.on("error",n=>{r(n)}),t.on("data",n=>{i.push(n)}),t.on("end",()=>{e(Buffer.concat(i))})})}var ZK=class extends GQ.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(e,r,i){if(r!=="buffer"||!Buffer.isBuffer(e))throw new Error("Assertion failed: BufferStream only accept buffers");this.chunks.push(e),i(null,null)}_flush(e){e(null,Buffer.concat(this.chunks))}},_K=class extends GQ.Transform{constructor(e=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=e}_transform(e,r,i){if(r!=="buffer"||!Buffer.isBuffer(e))throw new Error("Assertion failed: DefaultStream only accept buffers");this.active=!1,i(null,e)}_flush(e){this.active&&this.ifEmpty.length>0?e(null,this.ifEmpty):e(null)}},Af=eval("require");function $K(t){return Af(O.fromPortablePath(t))}function e1(path){let physicalPath=O.fromPortablePath(path),currentCacheEntry=Af.cache[physicalPath];delete Af.cache[physicalPath];let result;try{result=$K(physicalPath);let freshCacheEntry=Af.cache[physicalPath],dynamicModule=eval("module"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{Af.cache[physicalPath]=currentCacheEntry}return result}var t1=new Map;function bge(t){let e=t1.get(t),r=N.statSync(t);if((e==null?void 0:e.mtime)===r.mtimeMs)return e.instance;let i=e1(t);return t1.set(t,{mtime:r.mtimeMs,instance:i}),i}var aA;(function(i){i[i.NoCache=0]="NoCache",i[i.FsTime=1]="FsTime",i[i.Node=2]="Node"})(aA||(aA={}));function ql(t,{cachingStrategy:e=2}={}){switch(e){case 0:return e1(t);case 1:return bge(t);case 2:return $K(t);default:throw new Error("Unsupported caching strategy")}}function bi(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(r.map(o=>s(o)));let n=r.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>r[s])}function Dge(t){return t.length===0?null:t.map(e=>`(${JK.default.makeRe(e,{windows:!1,dot:!0}).source})`).join("|")}function VQ(t,{env:e}){let r=/\${(?[\d\w_]+)(?:)?(?:-(?[^}]*))?}/g;return t.replace(r,(...i)=>{let{variableName:n,colon:s,fallback:o}=i[i.length-1],a=Object.prototype.hasOwnProperty.call(e,n),l=e[n];if(l||a&&!s)return l;if(o!=null)return o;throw new me(`Environment variable not found (${n})`)})}function lf(t){switch(t){case"true":case"1":case 1:case!0:return!0;case"false":case"0":case 0:case!1:return!1;default:throw new Error(`Couldn't parse "${t}" as a boolean`)}}function r1(t){return typeof t=="undefined"?t:lf(t)}function XQ(t){try{return r1(t)}catch{return null}}function Sge(t){return!!(O.isAbsolute(t)||t.match(/^(\.{1,2}|~)\//))}var w={};et(w,{areDescriptorsEqual:()=>N2,areIdentsEqual:()=>Cf,areLocatorsEqual:()=>ob,areVirtualPackagesEquivalent:()=>zpe,bindDescriptor:()=>Jpe,bindLocator:()=>Wpe,convertDescriptorToLocator:()=>Nm,convertLocatorToDescriptor:()=>Mm,convertPackageToLocator:()=>qpe,convertToIdent:()=>Gpe,convertToManifestRange:()=>Zpe,copyPackage:()=>hf,devirtualizeDescriptor:()=>pf,devirtualizeLocator:()=>df,getIdentVendorPath:()=>_pe,isVirtualDescriptor:()=>qo,isVirtualLocator:()=>ss,makeDescriptor:()=>zt,makeIdent:()=>Go,makeLocator:()=>Ai,makeRange:()=>Om,parseDescriptor:()=>Jo,parseFileStyleRange:()=>Vpe,parseIdent:()=>Si,parseLocator:()=>hA,parseRange:()=>_l,prettyDependent:()=>cb,prettyDescriptor:()=>Ut,prettyIdent:()=>Cr,prettyLocator:()=>nt,prettyLocatorNoColors:()=>Ab,prettyRange:()=>Rm,prettyReference:()=>If,prettyResolution:()=>lb,prettyWorkspace:()=>Ef,renamePackage:()=>ff,slugifyIdent:()=>ab,slugifyLocator:()=>$l,sortDescriptors:()=>ec,stringifyDescriptor:()=>xi,stringifyIdent:()=>dt,stringifyLocator:()=>gn,tryParseDescriptor:()=>mf,tryParseIdent:()=>M2,tryParseLocator:()=>O2,virtualizeDescriptor:()=>nb,virtualizePackage:()=>sb});var Zl=re(require("querystring")),L2=re(cr());var Di={};et(Di,{checksumFile:()=>vm,checksumPattern:()=>Fm,makeHash:()=>ai});var Pm=re(require("crypto")),rb=re(tb());function ai(...t){let e=(0,Pm.createHash)("sha512"),r="";for(let i of t)typeof i=="string"?r+=i:i&&(r&&(e.update(r),r=""),e.update(i));return r&&e.update(r),e.digest("hex")}async function vm(t,{baseFs:e,algorithm:r}={baseFs:N,algorithm:"sha512"}){let i=await e.openPromise(t,"r");try{let n=65536,s=Buffer.allocUnsafeSlow(n),o=(0,Pm.createHash)(r),a=0;for(;(a=await e.readPromise(i,s,0,n))!==0;)o.update(a===n?s:s.slice(0,a));return o.digest("hex")}finally{await e.closePromise(i)}}async function Fm(t,{cwd:e}){let i=(await(0,rb.default)(t,{cwd:O.fromPortablePath(e),expandDirectories:!1,onlyDirectories:!0,unique:!0})).map(a=>`${a}/**/*`),n=await(0,rb.default)([t,...i],{cwd:O.fromPortablePath(e),expandDirectories:!1,onlyFiles:!1,unique:!0});n.sort();let s=await Promise.all(n.map(async a=>{let l=[Buffer.from(a)],c=O.toPortablePath(a),u=await N.lstatPromise(c);return u.isSymbolicLink()?l.push(Buffer.from(await N.readlinkPromise(c))):u.isFile()&&l.push(await N.readFilePromise(c)),l.join("\0")})),o=(0,Pm.createHash)("sha512");for(let a of s)o.update(a);return o.digest("hex")}var Lm="virtual:",jpe=5;function Go(t,e){if(t==null?void 0:t.startsWith("@"))throw new Error("Invalid scope: don't prefix it with '@'");return{identHash:ai(t,e),scope:t,name:e}}function zt(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:ai(t.identHash,e),range:e}}function Ai(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:ai(t.identHash,e),reference:e}}function Gpe(t){return{identHash:t.identHash,scope:t.scope,name:t.name}}function Nm(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.descriptorHash,reference:t.range}}function Mm(t){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:t.locatorHash,range:t.reference}}function qpe(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.locatorHash,reference:t.reference}}function ff(t,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:t.version,languageName:t.languageName,linkType:t.linkType,dependencies:new Map(t.dependencies),peerDependencies:new Map(t.peerDependencies),dependenciesMeta:new Map(t.dependenciesMeta),peerDependenciesMeta:new Map(t.peerDependenciesMeta),bin:new Map(t.bin)}}function hf(t){return ff(t,t)}function nb(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return zt(t,`virtual:${e}#${t.range}`)}function sb(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return ff(t,Ai(t,`virtual:${e}#${t.reference}`))}function qo(t){return t.range.startsWith(Lm)}function ss(t){return t.reference.startsWith(Lm)}function pf(t){if(!qo(t))throw new Error("Not a virtual descriptor");return zt(t,t.range.replace(/^[^#]*#/,""))}function df(t){if(!ss(t))throw new Error("Not a virtual descriptor");return Ai(t,t.reference.replace(/^[^#]*#/,""))}function Jpe(t,e){return t.range.includes("::")?t:zt(t,`${t.range}::${Zl.default.stringify(e)}`)}function Wpe(t,e){return t.reference.includes("::")?t:Ai(t,`${t.reference}::${Zl.default.stringify(e)}`)}function Cf(t,e){return t.identHash===e.identHash}function N2(t,e){return t.descriptorHash===e.descriptorHash}function ob(t,e){return t.locatorHash===e.locatorHash}function zpe(t,e){if(!ss(t))throw new Error("Invalid package type");if(!ss(e))throw new Error("Invalid package type");if(!Cf(t,e)||t.dependencies.size!==e.dependencies.size)return!1;for(let r of t.dependencies.values()){let i=e.dependencies.get(r.identHash);if(!i||!N2(r,i))return!1}return!0}function Si(t){let e=M2(t);if(!e)throw new Error(`Invalid ident (${t})`);return e}function M2(t){let e=t.match(/^(?:@([^/]+?)\/)?([^/]+)$/);if(!e)return null;let[,r,i]=e,n=typeof r!="undefined"?r:null;return Go(n,i)}function Jo(t,e=!1){let r=mf(t,e);if(!r)throw new Error(`Invalid descriptor (${t})`);return r}function mf(t,e=!1){let r=e?t.match(/^(?:@([^/]+?)\/)?([^/]+?)(?:@(.+))$/):t.match(/^(?:@([^/]+?)\/)?([^/]+?)(?:@(.+))?$/);if(!r)return null;let[,i,n,s]=r;if(s==="unknown")throw new Error(`Invalid range (${t})`);let o=typeof i!="undefined"?i:null,a=typeof s!="undefined"?s:"unknown";return zt(Go(o,n),a)}function hA(t,e=!1){let r=O2(t,e);if(!r)throw new Error(`Invalid locator (${t})`);return r}function O2(t,e=!1){let r=e?t.match(/^(?:@([^/]+?)\/)?([^/]+?)(?:@(.+))$/):t.match(/^(?:@([^/]+?)\/)?([^/]+?)(?:@(.+))?$/);if(!r)return null;let[,i,n,s]=r;if(s==="unknown")throw new Error(`Invalid reference (${t})`);let o=typeof i!="undefined"?i:null,a=typeof s!="undefined"?s:"unknown";return Ai(Go(o,n),a)}function _l(t,e){let r=t.match(/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/);if(r===null)throw new Error(`Invalid range (${t})`);let i=typeof r[1]!="undefined"?r[1]:null;if(typeof(e==null?void 0:e.requireProtocol)=="string"&&i!==e.requireProtocol)throw new Error(`Invalid protocol (${i})`);if((e==null?void 0:e.requireProtocol)&&i===null)throw new Error(`Missing protocol (${i})`);let n=typeof r[3]!="undefined"?decodeURIComponent(r[2]):null;if((e==null?void 0:e.requireSource)&&n===null)throw new Error(`Missing source (${t})`);let s=typeof r[3]!="undefined"?decodeURIComponent(r[3]):decodeURIComponent(r[2]),o=(e==null?void 0:e.parseSelector)?Zl.default.parse(s):s,a=typeof r[4]!="undefined"?Zl.default.parse(r[4]):null;return{protocol:i,source:n,selector:o,params:a}}function Vpe(t,{protocol:e}){let{selector:r,params:i}=_l(t,{requireProtocol:e,requireBindings:!0});if(typeof i.locator!="string")throw new Error(`Assertion failed: Invalid bindings for ${t}`);return{parentLocator:hA(i.locator,!0),path:r}}function T2(t){return t=t.replace(/%/g,"%25"),t=t.replace(/:/g,"%3A"),t=t.replace(/#/g,"%23"),t}function Xpe(t){return t===null?!1:Object.entries(t).length>0}function Om({protocol:t,source:e,selector:r,params:i}){let n="";return t!==null&&(n+=`${t}`),e!==null&&(n+=`${T2(e)}#`),n+=T2(r),Xpe(i)&&(n+=`::${Zl.default.stringify(i)}`),n}function Zpe(t){let{params:e,protocol:r,source:i,selector:n}=_l(t);for(let s in e)s.startsWith("__")&&delete e[s];return Om({protocol:r,source:i,params:e,selector:n})}function dt(t){return t.scope?`@${t.scope}/${t.name}`:`${t.name}`}function xi(t){return t.scope?`@${t.scope}/${t.name}@${t.range}`:`${t.name}@${t.range}`}function gn(t){return t.scope?`@${t.scope}/${t.name}@${t.reference}`:`${t.name}@${t.reference}`}function ab(t){return t.scope!==null?`@${t.scope}-${t.name}`:t.name}function $l(t){let{protocol:e,selector:r}=_l(t.reference),i=e!==null?e.replace(/:$/,""):"exotic",n=L2.default.valid(r),s=n!==null?`${i}-${n}`:`${i}`,o=10,a=t.scope?`${ab(t)}-${s}-${t.locatorHash.slice(0,o)}`:`${ab(t)}-${s}-${t.locatorHash.slice(0,o)}`;return rr(a)}function Cr(t,e){return e.scope?`${Je(t,`@${e.scope}/`,Pe.SCOPE)}${Je(t,e.name,Pe.NAME)}`:`${Je(t,e.name,Pe.NAME)}`}function Tm(t){if(t.startsWith(Lm)){let e=Tm(t.substr(t.indexOf("#")+1)),r=t.substr(Lm.length,jpe);return`${e} [${r}]`}else return t.replace(/\?.*/,"?[...]")}function Rm(t,e){return`${Je(t,Tm(e),Pe.RANGE)}`}function Ut(t,e){return`${Cr(t,e)}${Je(t,"@",Pe.RANGE)}${Rm(t,e.range)}`}function If(t,e){return`${Je(t,Tm(e),Pe.REFERENCE)}`}function nt(t,e){return`${Cr(t,e)}${Je(t,"@",Pe.REFERENCE)}${If(t,e.reference)}`}function Ab(t){return`${dt(t)}@${Tm(t.reference)}`}function ec(t){return bi(t,[e=>dt(e),e=>e.range])}function Ef(t,e){return Cr(t,e.locator)}function lb(t,e,r){let i=qo(e)?pf(e):e;return r===null?`${Ut(t,i)} \u2192 ${ib(t).Cross}`:i.identHash===r.identHash?`${Ut(t,i)} \u2192 ${If(t,r.reference)}`:`${Ut(t,i)} \u2192 ${nt(t,r)}`}function cb(t,e,r){return r===null?`${nt(t,e)}`:`${nt(t,e)} (via ${Rm(t,r.range)})`}function _pe(t){return`node_modules/${dt(t)}`}var ct;(function(r){r.HARD="HARD",r.SOFT="SOFT"})(ct||(ct={}));var Dr;(function(i){i.Dependency="Dependency",i.PeerDependency="PeerDependency",i.PeerDependencyMeta="PeerDependencyMeta"})(Dr||(Dr={}));var qr;(function(i){i.Inactive="inactive",i.Redundant="redundant",i.Active="active"})(qr||(qr={}));var Pe={NO_HINT:"NO_HINT",NULL:"NULL",SCOPE:"SCOPE",NAME:"NAME",RANGE:"RANGE",REFERENCE:"REFERENCE",NUMBER:"NUMBER",PATH:"PATH",URL:"URL",ADDED:"ADDED",REMOVED:"REMOVED",CODE:"CODE",DURATION:"DURATION",SIZE:"SIZE",IDENT:"IDENT",DESCRIPTOR:"DESCRIPTOR",LOCATOR:"LOCATOR",RESOLUTION:"RESOLUTION",DEPENDENT:"DEPENDENT",PACKAGE_EXTENSION:"PACKAGE_EXTENSION",SETTING:"SETTING"},pA;(function(e){e[e.BOLD=2]="BOLD"})(pA||(pA={}));var ub=process.env.GITHUB_ACTIONS?{level:2}:yf.default.supportsColor?{level:yf.default.supportsColor.level}:{level:0},Km=ub.level!==0,gb=Km&&!process.env.GITHUB_ACTIONS&&!K2.CIRCLE,fb=new yf.default.Instance(ub),$pe=new Map([[Pe.NO_HINT,null],[Pe.NULL,["#a853b5",129]],[Pe.SCOPE,["#d75f00",166]],[Pe.NAME,["#d7875f",173]],[Pe.RANGE,["#00afaf",37]],[Pe.REFERENCE,["#87afff",111]],[Pe.NUMBER,["#ffd700",220]],[Pe.PATH,["#d75fd7",170]],[Pe.URL,["#d75fd7",170]],[Pe.ADDED,["#5faf00",70]],[Pe.REMOVED,["#d70000",160]],[Pe.CODE,["#87afff",111]],[Pe.SIZE,["#ffd700",220]]]),Ln=t=>t,Um={[Pe.NUMBER]:Ln({pretty:(t,e)=>`${e}`,json:t=>t}),[Pe.IDENT]:Ln({pretty:(t,e)=>Cr(t,e),json:t=>dt(t)}),[Pe.LOCATOR]:Ln({pretty:(t,e)=>nt(t,e),json:t=>gn(t)}),[Pe.DESCRIPTOR]:Ln({pretty:(t,e)=>Ut(t,e),json:t=>xi(t)}),[Pe.RESOLUTION]:Ln({pretty:(t,{descriptor:e,locator:r})=>lb(t,e,r),json:({descriptor:t,locator:e})=>({descriptor:xi(t),locator:e!==null?gn(e):null})}),[Pe.DEPENDENT]:Ln({pretty:(t,{locator:e,descriptor:r})=>cb(t,e,r),json:({locator:t,descriptor:e})=>({locator:gn(t),descriptor:xi(e)})}),[Pe.PACKAGE_EXTENSION]:Ln({pretty:(t,e)=>{switch(e.type){case Dr.Dependency:return`${Cr(t,e.parentDescriptor)} \u27A4 ${Gi(t,"dependencies",Pe.CODE)} \u27A4 ${Cr(t,e.descriptor)}`;case Dr.PeerDependency:return`${Cr(t,e.parentDescriptor)} \u27A4 ${Gi(t,"peerDependencies",Pe.CODE)} \u27A4 ${Cr(t,e.descriptor)}`;case Dr.PeerDependencyMeta:return`${Cr(t,e.parentDescriptor)} \u27A4 ${Gi(t,"peerDependenciesMeta",Pe.CODE)} \u27A4 ${Cr(t,Si(e.selector))} \u27A4 ${Gi(t,e.key,Pe.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:t=>{switch(t.type){case Dr.Dependency:return`${dt(t.parentDescriptor)} > ${dt(t.descriptor)}`;case Dr.PeerDependency:return`${dt(t.parentDescriptor)} >> ${dt(t.descriptor)}`;case Dr.PeerDependencyMeta:return`${dt(t.parentDescriptor)} >> ${t.selector} / ${t.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${t.type}`)}}}),[Pe.SETTING]:Ln({pretty:(t,e)=>(t.get(e),tc(t,Gi(t,e,Pe.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:t=>t}),[Pe.DURATION]:Ln({pretty:(t,e)=>{if(e>1e3*60){let r=Math.floor(e/1e3/60),i=Math.ceil((e-r*60*1e3)/1e3);return i===0?`${r}m`:`${r}m ${i}s`}else{let r=Math.floor(e/1e3),i=e-r*1e3;return i===0?`${r}s`:`${r}s ${i}ms`}},json:t=>t}),[Pe.SIZE]:Ln({pretty:(t,e)=>{let r=["KB","MB","GB","TB"],i=r.length;for(;i>1&&e<1024**i;)i-=1;let n=1024**i,s=Math.floor(e*100/n)/100;return Gi(t,`${s} ${r[i-1]}`,Pe.NUMBER)},json:t=>t}),[Pe.PATH]:Ln({pretty:(t,e)=>Gi(t,O.fromPortablePath(e),Pe.PATH),json:t=>O.fromPortablePath(t)})};function dA(t,e){return[e,t]}function Ym(t,e,r){return t.get("enableColors")&&r&2&&(e=yf.default.bold(e)),e}function Gi(t,e,r){if(!t.get("enableColors"))return e;let i=$pe.get(r);if(i===null)return e;let n=typeof i=="undefined"?r:ub.level>=3?i[0]:i[1],s=typeof n=="number"?fb.ansi256(n):n.startsWith("#")?fb.hex(n):fb[n];if(typeof s!="function")throw new Error(`Invalid format type ${n}`);return s(e)}var ede=!!process.env.KONSOLE_VERSION;function tc(t,e,r){return t.get("enableHyperlinks")?ede?`]8;;${r}\\${e}]8;;\\`:`]8;;${r}\x07${e}]8;;\x07`:e}function Je(t,e,r){if(e===null)return Gi(t,"null",Pe.NULL);if(Object.prototype.hasOwnProperty.call(Um,r))return Um[r].pretty(t,e);if(typeof e!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Gi(t,e,r)}function hb(t,e,r,{separator:i=", "}={}){return[...e].map(n=>Je(t,n,r)).join(i)}function rc(t,e){if(t===null)return null;if(Object.prototype.hasOwnProperty.call(Um,e))return qQ(e),Um[e].json(t);if(typeof t!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof t}`);return t}function ib(t){return{Check:Gi(t,"\u2713","green"),Cross:Gi(t,"\u2718","red"),Question:Gi(t,"?","cyan")}}function CA(t,{label:e,value:[r,i]}){return`${Je(t,e,Pe.CODE)}: ${Je(t,r,i)}`}var Nn;(function(n){n.Error="error",n.Warning="warning",n.Info="info",n.Discard="discard"})(Nn||(Nn={}));function Bf(t,{configuration:e}){let r=e.get("logFilters"),i=new Map,n=new Map,s=[];for(let g of r){let f=g.get("level");if(typeof f=="undefined")continue;let h=g.get("code");typeof h!="undefined"&&i.set(h,f);let p=g.get("text");typeof p!="undefined"&&n.set(p,f);let m=g.get("pattern");typeof m!="undefined"&&s.push([U2.default.matcher(m),f])}s.reverse();let o=(g,f,h)=>{if(g===null||g===z.UNNAMED)return h;let p=n.size>0||s.length>0?(0,Y2.default)(f):f;if(n.size>0){let m=n.get(p);if(typeof m!="undefined")return m!=null?m:h}if(s.length>0){for(let[m,I]of s)if(m(p))return I!=null?I:h}if(i.size>0){let m=i.get(MC(g));if(typeof m!="undefined")return m!=null?m:h}return h},a=t.reportInfo,l=t.reportWarning,c=t.reportError,u=function(g,f,h,p){switch(o(f,h,p)){case Nn.Info:a.call(g,f,h);break;case Nn.Warning:l.call(g,f!=null?f:z.UNNAMED,h);break;case Nn.Error:c.call(g,f!=null?f:z.UNNAMED,h);break}};t.reportInfo=function(...g){return u(this,...g,Nn.Info)},t.reportWarning=function(...g){return u(this,...g,Nn.Warning)},t.reportError=function(...g){return u(this,...g,Nn.Error)}}var Rt={};et(Rt,{Method:()=>IA,RequestError:()=>xj.RequestError,del:()=>hIe,get:()=>gIe,getNetworkSettings:()=>Fj,post:()=>vD,put:()=>fIe,request:()=>Rf});var bj=re(sI()),Dj=re(require("https")),Sj=re(require("http")),kD=re(Hi()),PD=re(Bj()),oI=re(require("url"));var wj=re(require("stream")),Qj=re(require("string_decoder"));var _e=class extends Error{constructor(e,r,i){super(r);this.reportExtra=i;this.reportCode=e}};function aIe(t){return typeof t.reportCode!="undefined"}var ci=class{constructor(){this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}static progressViaCounter(e){let r=0,i,n=new Promise(l=>{i=l}),s=l=>{let c=i;n=new Promise(u=>{i=u}),r=l,c()},o=(l=0)=>{s(r+1)},a=async function*(){for(;r{let o=i.write(s),a;do if(a=o.indexOf(` -`),a!==-1){let l=n+o.substr(0,a);o=o.substr(a+1),n="",e!==null?this.reportInfo(null,`${e} ${l}`):this.reportInfo(null,l)}while(a!==-1);n+=o}),r.on("end",()=>{let s=i.end();s!==""&&(e!==null?this.reportInfo(null,`${e} ${s}`):this.reportInfo(null,s))}),r}};var xj=re(sI()),kj=new Map,Pj=new Map,AIe=new Sj.Agent({keepAlive:!0}),lIe=new Dj.Agent({keepAlive:!0});function vj(t){let e=new oI.URL(t),r={host:e.hostname,headers:{}};return e.port&&(r.port=Number(e.port)),{proxy:r}}async function cIe(t){return Hs(Pj,t,()=>N.readFilePromise(t).then(e=>(Pj.set(t,e),e)))}function uIe({statusCode:t,statusMessage:e},r){let i=Je(r,t,Pe.NUMBER),n=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${t}`;return tc(r,`${i}${e?` (${e})`:""}`,n)}async function aI(t,{configuration:e,customErrorMessage:r}){var i,n;try{return await t}catch(s){if(s.name!=="HTTPError")throw s;let o=(n=r==null?void 0:r(s))!=null?n:(i=s.response.body)==null?void 0:i.error;o==null&&(s.message.startsWith("Response code")?o="The remote server failed to provide the requested resource":o=s.message),s instanceof bj.TimeoutError&&s.event==="socket"&&(o+=`(can be increased via ${Je(e,"httpTimeout",Pe.SETTING)})`);let a=new _e(z.NETWORK_ERROR,o,l=>{s.response&&l.reportError(z.NETWORK_ERROR,` ${CA(e,{label:"Response Code",value:dA(Pe.NO_HINT,uIe(s.response,e))})}`),s.request&&(l.reportError(z.NETWORK_ERROR,` ${CA(e,{label:"Request Method",value:dA(Pe.NO_HINT,s.request.options.method)})}`),l.reportError(z.NETWORK_ERROR,` ${CA(e,{label:"Request URL",value:dA(Pe.URL,s.request.requestUrl)})}`)),s.request.redirects.length>0&&l.reportError(z.NETWORK_ERROR,` ${CA(e,{label:"Request Redirects",value:dA(Pe.NO_HINT,hb(e,s.request.redirects,Pe.URL))})}`),s.request.retryCount===s.request.options.retry.limit&&l.reportError(z.NETWORK_ERROR,` ${CA(e,{label:"Request Retry Count",value:dA(Pe.NO_HINT,`${Je(e,s.request.retryCount,Pe.NUMBER)} (can be increased via ${Je(e,"httpRetry",Pe.SETTING)})`)})}`)});throw a.originalError=s,a}}function Fj(t,e){let r=[...e.configuration.get("networkSettings")].sort(([o],[a])=>a.length-o.length),i={enableNetwork:void 0,caFilePath:void 0,httpProxy:void 0,httpsProxy:void 0},n=Object.keys(i),s=typeof t=="string"?new oI.URL(t):t;for(let[o,a]of r)if(kD.default.isMatch(s.hostname,o))for(let l of n){let c=a.get(l);c!==null&&typeof i[l]=="undefined"&&(i[l]=c)}for(let o of n)typeof i[o]=="undefined"&&(i[o]=e.configuration.get(o));return i}var IA;(function(n){n.GET="GET",n.PUT="PUT",n.POST="POST",n.DELETE="DELETE"})(IA||(IA={}));async function Rf(t,e,{configuration:r,headers:i,jsonRequest:n,jsonResponse:s,method:o=IA.GET}){let a=typeof t=="string"?new oI.URL(t):t,l=Fj(a,{configuration:r});if(l.enableNetwork===!1)throw new Error(`Request to '${a.href}' has been blocked because of your configuration settings`);if(a.protocol==="http:"&&!kD.default.isMatch(a.hostname,r.get("unsafeHttpWhitelist")))throw new Error(`Unsafe http requests must be explicitly whitelisted in your configuration (${a.hostname})`);let u={agent:{http:l.httpProxy?PD.default.httpOverHttp(vj(l.httpProxy)):AIe,https:l.httpsProxy?PD.default.httpsOverHttp(vj(l.httpsProxy)):lIe},headers:i,method:o};u.responseType=s?"json":"buffer",e!==null&&(Buffer.isBuffer(e)||!n&&typeof e=="string"?u.body=e:u.json=e);let g=r.get("httpTimeout"),f=r.get("httpRetry"),h=r.get("enableStrictSsl"),p=l.caFilePath,{default:m}=await Promise.resolve().then(()=>re(sI())),I=p?await cIe(p):void 0,y=m.extend(P({timeout:{socket:g},retry:f,https:{rejectUnauthorized:h,certificateAuthority:I}},u));return r.getLimit("networkConcurrency")(()=>y(a))}async function gIe(t,n){var s=n,{configuration:e,jsonResponse:r}=s,i=Rr(s,["configuration","jsonResponse"]);let o=Hs(kj,t,()=>aI(Rf(t,null,P({configuration:e},i)),{configuration:e}).then(a=>(kj.set(t,a.body),a.body)));return Buffer.isBuffer(o)===!1&&(o=await o),r?JSON.parse(o.toString()):o}async function fIe(t,e,n){var s=n,{customErrorMessage:r}=s,i=Rr(s,["customErrorMessage"]);return(await aI(Rf(t,e,V(P({},i),{method:IA.PUT})),i)).body}async function vD(t,e,n){var s=n,{customErrorMessage:r}=s,i=Rr(s,["customErrorMessage"]);return(await aI(Rf(t,e,V(P({},i),{method:IA.POST})),i)).body}async function hIe(t,i){var n=i,{customErrorMessage:e}=n,r=Rr(n,["customErrorMessage"]);return(await aI(Rf(t,null,V(P({},r),{method:IA.DELETE})),r)).body}var Qt={};et(Qt,{executePackageAccessibleBinary:()=>jW,executePackageScript:()=>VI,executePackageShellcode:()=>vS,executeWorkspaceAccessibleBinary:()=>qQe,executeWorkspaceLifecycleScript:()=>HW,executeWorkspaceScript:()=>YW,getPackageAccessibleBinaries:()=>XI,getWorkspaceAccessibleBinaries:()=>UW,hasPackageScript:()=>HQe,hasWorkspaceScript:()=>PS,makeScriptEnv:()=>$f,maybeExecuteWorkspaceLifecycleScript:()=>GQe,prepareExternalProject:()=>YQe});var Tf={};et(Tf,{getLibzipPromise:()=>gi,getLibzipSync:()=>oG});var _o=["number","number"],FD;(function(R){R[R.ZIP_ER_OK=0]="ZIP_ER_OK",R[R.ZIP_ER_MULTIDISK=1]="ZIP_ER_MULTIDISK",R[R.ZIP_ER_RENAME=2]="ZIP_ER_RENAME",R[R.ZIP_ER_CLOSE=3]="ZIP_ER_CLOSE",R[R.ZIP_ER_SEEK=4]="ZIP_ER_SEEK",R[R.ZIP_ER_READ=5]="ZIP_ER_READ",R[R.ZIP_ER_WRITE=6]="ZIP_ER_WRITE",R[R.ZIP_ER_CRC=7]="ZIP_ER_CRC",R[R.ZIP_ER_ZIPCLOSED=8]="ZIP_ER_ZIPCLOSED",R[R.ZIP_ER_NOENT=9]="ZIP_ER_NOENT",R[R.ZIP_ER_EXISTS=10]="ZIP_ER_EXISTS",R[R.ZIP_ER_OPEN=11]="ZIP_ER_OPEN",R[R.ZIP_ER_TMPOPEN=12]="ZIP_ER_TMPOPEN",R[R.ZIP_ER_ZLIB=13]="ZIP_ER_ZLIB",R[R.ZIP_ER_MEMORY=14]="ZIP_ER_MEMORY",R[R.ZIP_ER_CHANGED=15]="ZIP_ER_CHANGED",R[R.ZIP_ER_COMPNOTSUPP=16]="ZIP_ER_COMPNOTSUPP",R[R.ZIP_ER_EOF=17]="ZIP_ER_EOF",R[R.ZIP_ER_INVAL=18]="ZIP_ER_INVAL",R[R.ZIP_ER_NOZIP=19]="ZIP_ER_NOZIP",R[R.ZIP_ER_INTERNAL=20]="ZIP_ER_INTERNAL",R[R.ZIP_ER_INCONS=21]="ZIP_ER_INCONS",R[R.ZIP_ER_REMOVE=22]="ZIP_ER_REMOVE",R[R.ZIP_ER_DELETED=23]="ZIP_ER_DELETED",R[R.ZIP_ER_ENCRNOTSUPP=24]="ZIP_ER_ENCRNOTSUPP",R[R.ZIP_ER_RDONLY=25]="ZIP_ER_RDONLY",R[R.ZIP_ER_NOPASSWD=26]="ZIP_ER_NOPASSWD",R[R.ZIP_ER_WRONGPASSWD=27]="ZIP_ER_WRONGPASSWD",R[R.ZIP_ER_OPNOTSUPP=28]="ZIP_ER_OPNOTSUPP",R[R.ZIP_ER_INUSE=29]="ZIP_ER_INUSE",R[R.ZIP_ER_TELL=30]="ZIP_ER_TELL",R[R.ZIP_ER_COMPRESSED_DATA=31]="ZIP_ER_COMPRESSED_DATA"})(FD||(FD={}));var Rj=t=>({get HEAP8(){return t.HEAP8},get HEAPU8(){return t.HEAPU8},errors:FD,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_CREATE:1,ZIP_EXCL:2,ZIP_TRUNCATE:8,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:t._malloc(1),uint16S:t._malloc(2),uint32S:t._malloc(4),uint64S:t._malloc(8),malloc:t._malloc,free:t._free,getValue:t.getValue,open:t.cwrap("zip_open","number",["string","number","number"]),openFromSource:t.cwrap("zip_open_from_source","number",["number","number","number"]),close:t.cwrap("zip_close","number",["number"]),discard:t.cwrap("zip_discard",null,["number"]),getError:t.cwrap("zip_get_error","number",["number"]),getName:t.cwrap("zip_get_name","string",["number","number","number"]),getNumEntries:t.cwrap("zip_get_num_entries","number",["number","number"]),delete:t.cwrap("zip_delete","number",["number","number"]),stat:t.cwrap("zip_stat","number",["number","string","number","number"]),statIndex:t.cwrap("zip_stat_index","number",["number",..._o,"number","number"]),fopen:t.cwrap("zip_fopen","number",["number","string","number"]),fopenIndex:t.cwrap("zip_fopen_index","number",["number",..._o,"number"]),fread:t.cwrap("zip_fread","number",["number","number","number","number"]),fclose:t.cwrap("zip_fclose","number",["number"]),dir:{add:t.cwrap("zip_dir_add","number",["number","string"])},file:{add:t.cwrap("zip_file_add","number",["number","string","number","number"]),getError:t.cwrap("zip_file_get_error","number",["number"]),getExternalAttributes:t.cwrap("zip_file_get_external_attributes","number",["number",..._o,"number","number","number"]),setExternalAttributes:t.cwrap("zip_file_set_external_attributes","number",["number",..._o,"number","number","number"]),setMtime:t.cwrap("zip_file_set_mtime","number",["number",..._o,"number","number"]),setCompression:t.cwrap("zip_set_file_compression","number",["number",..._o,"number","number"])},ext:{countSymlinks:t.cwrap("zip_ext_count_symlinks","number",["number"])},error:{initWithCode:t.cwrap("zip_error_init_with_code",null,["number","number"]),strerror:t.cwrap("zip_error_strerror","string",["number"])},name:{locate:t.cwrap("zip_name_locate","number",["number","string","number"])},source:{fromUnattachedBuffer:t.cwrap("zip_source_buffer_create","number",["number","number","number","number"]),fromBuffer:t.cwrap("zip_source_buffer","number",["number","number",..._o,"number"]),free:t.cwrap("zip_source_free",null,["number"]),keep:t.cwrap("zip_source_keep",null,["number"]),open:t.cwrap("zip_source_open","number",["number"]),close:t.cwrap("zip_source_close","number",["number"]),seek:t.cwrap("zip_source_seek","number",["number",..._o,"number"]),tell:t.cwrap("zip_source_tell","number",["number"]),read:t.cwrap("zip_source_read","number",["number","number","number"]),error:t.cwrap("zip_source_error","number",["number"]),setMtime:t.cwrap("zip_source_set_mtime","number",["number","number"])},struct:{stat:t.cwrap("zipstruct_stat","number",[]),statS:t.cwrap("zipstruct_statS","number",[]),statName:t.cwrap("zipstruct_stat_name","string",["number"]),statIndex:t.cwrap("zipstruct_stat_index","number",["number"]),statSize:t.cwrap("zipstruct_stat_size","number",["number"]),statCompSize:t.cwrap("zipstruct_stat_comp_size","number",["number"]),statCompMethod:t.cwrap("zipstruct_stat_comp_method","number",["number"]),statMtime:t.cwrap("zipstruct_stat_mtime","number",["number"]),statCrc:t.cwrap("zipstruct_stat_crc","number",["number"]),error:t.cwrap("zipstruct_error","number",[]),errorS:t.cwrap("zipstruct_errorS","number",[]),errorCodeZip:t.cwrap("zipstruct_error_code_zip","number",["number"])}});var ZD=null;function oG(){return ZD===null&&(ZD=Rj(sG())),ZD}async function gi(){return oG()}var zf={};et(zf,{ShellError:()=>ia,execute:()=>xc,globUtils:()=>MI});var Jf={};et(Jf,{parseResolution:()=>wI,parseShell:()=>II,parseSyml:()=>Kr,stringifyArgument:()=>tS,stringifyArgumentSegment:()=>rS,stringifyArithmeticExpression:()=>BI,stringifyCommand:()=>eS,stringifyCommandChain:()=>mc,stringifyCommandChainThen:()=>$D,stringifyCommandLine:()=>EI,stringifyCommandLineThen:()=>_D,stringifyEnvSegment:()=>yI,stringifyRedirectArgument:()=>Kf,stringifyResolution:()=>QI,stringifyShell:()=>Cc,stringifyShellLine:()=>Cc,stringifySyml:()=>ro,stringifyValueArgument:()=>Ic});var lG=re(AG());function II(t,e={isGlobPattern:()=>!1}){try{return(0,lG.parse)(t,e)}catch(r){throw r.location&&(r.message=r.message.replace(/(\.)?$/,` (line ${r.location.start.line}, column ${r.location.start.column})$1`)),r}}function Cc(t,{endSemicolon:e=!1}={}){return t.map(({command:r,type:i},n)=>`${EI(r)}${i===";"?n!==t.length-1||e?";":"":" &"}`).join(" ")}function EI(t){return`${mc(t.chain)}${t.then?` ${_D(t.then)}`:""}`}function _D(t){return`${t.type} ${EI(t.line)}`}function mc(t){return`${eS(t)}${t.then?` ${$D(t.then)}`:""}`}function $D(t){return`${t.type} ${mc(t.chain)}`}function eS(t){switch(t.type){case"command":return`${t.envs.length>0?`${t.envs.map(e=>yI(e)).join(" ")} `:""}${t.args.map(e=>tS(e)).join(" ")}`;case"subshell":return`(${Cc(t.subshell)})${t.args.length>0?` ${t.args.map(e=>Kf(e)).join(" ")}`:""}`;case"group":return`{ ${Cc(t.group,{endSemicolon:!0})} }${t.args.length>0?` ${t.args.map(e=>Kf(e)).join(" ")}`:""}`;case"envs":return t.envs.map(e=>yI(e)).join(" ");default:throw new Error(`Unsupported command type: "${t.type}"`)}}function yI(t){return`${t.name}=${t.args[0]?Ic(t.args[0]):""}`}function tS(t){switch(t.type){case"redirection":return Kf(t);case"argument":return Ic(t);default:throw new Error(`Unsupported argument type: "${t.type}"`)}}function Kf(t){return`${t.subtype} ${t.args.map(e=>Ic(e)).join(" ")}`}function Ic(t){return t.segments.map(e=>rS(e)).join("")}function rS(t){let e=(i,n)=>n?`"${i}"`:i,r=i=>i.match(/[(){}<>$|&; \t"']/)?i.match(/[$"]/)?`'${i.replace(/[']/g,"\\'")}'`:`"${i}"`:i;switch(t.type){case"text":return r(t.text);case"glob":return t.pattern;case"shell":return e(`\${${Cc(t.shell)}}`,t.quoted);case"variable":return e(typeof t.defaultValue=="undefined"?`\${${t.name}}`:t.defaultValue.length===0?`\${${t.name}:-}`:`\${${t.name}:-${t.defaultValue.map(i=>Ic(i)).join(" ")}}`,t.quoted);case"arithmetic":return`$(( ${BI(t.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: "${t.type}"`)}}function BI(t){let e=n=>{switch(n){case"addition":return"+";case"subtraction":return"-";case"multiplication":return"*";case"division":return"/";default:throw new Error(`Can't extract operator from arithmetic expression of type "${n}"`)}},r=(n,s)=>s?`( ${n} )`:n,i=n=>r(BI(n),!["number","variable"].includes(n.type));switch(t.type){case"number":return String(t.value);case"variable":return t.name;default:return`${i(t.left)} ${e(t.type)} ${i(t.right)}`}}var gG=re(uG());function wI(t){let e=t.match(/^\*{1,2}\/(.*)/);if(e)throw new Error(`The override for '${t}' includes a glob pattern. Glob patterns have been removed since their behaviours don't match what you'd expect. Set the override to '${e[1]}' instead.`);try{return(0,gG.parse)(t)}catch(r){throw r.location&&(r.message=r.message.replace(/(\.)?$/,` (line ${r.location.start.line}, column ${r.location.start.column})$1`)),r}}function QI(t){let e="";return t.from&&(e+=t.from.fullName,t.from.description&&(e+=`@${t.from.description}`),e+="/"),e+=t.descriptor.fullName,t.descriptor.description&&(e+=`@${t.descriptor.description}`),e}var NI=re(rJ()),sJ=re(nJ()),_Be=/^(?![-?:,\][{}#&*!|>'"%@` \t\r\n]).([ \t]*(?![,\][{}:# \t\r\n]).)*$/,oJ=["__metadata","version","resolution","dependencies","peerDependencies","dependenciesMeta","peerDependenciesMeta","binaries"],pS=class{constructor(e){this.data=e}};function aJ(t){return t.match(_Be)?t:JSON.stringify(t)}function AJ(t){return typeof t=="undefined"?!0:typeof t=="object"&&t!==null?Object.keys(t).every(e=>AJ(t[e])):!1}function dS(t,e,r){if(t===null)return`null -`;if(typeof t=="number"||typeof t=="boolean")return`${t.toString()} -`;if(typeof t=="string")return`${aJ(t)} -`;if(Array.isArray(t)){if(t.length===0)return`[] -`;let i=" ".repeat(e);return` -${t.map(s=>`${i}- ${dS(s,e+1,!1)}`).join("")}`}if(typeof t=="object"&&t){let i,n;t instanceof pS?(i=t.data,n=!1):(i=t,n=!0);let s=" ".repeat(e),o=Object.keys(i);n&&o.sort((l,c)=>{let u=oJ.indexOf(l),g=oJ.indexOf(c);return u===-1&&g===-1?lc?1:0:u!==-1&&g===-1?-1:u===-1&&g!==-1?1:u-g});let a=o.filter(l=>!AJ(i[l])).map((l,c)=>{let u=i[l],g=aJ(l),f=dS(u,e+1,!0),h=c>0||r?s:"";return f.startsWith(` -`)?`${h}${g}:${f}`:`${h}${g}: ${f}`}).join(e===0?` -`:"")||` -`;return r?` -${a}`:`${a}`}throw new Error(`Unsupported value type (${t})`)}function ro(t){try{let e=dS(t,0,!1);return e!==` -`?e:""}catch(e){throw e.location&&(e.message=e.message.replace(/(\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}ro.PreserveOrdering=pS;function $Be(t){return t.endsWith(` -`)||(t+=` -`),(0,sJ.parse)(t)}var ewe=/^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i;function twe(t){if(ewe.test(t))return $Be(t);let e=(0,NI.safeLoad)(t,{schema:NI.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!="object")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error("Expected an indexed object, got an array instead. Does your file follow Yaml's rules?");return e}function Kr(t){return twe(t)}var EJ=re(eQ()),yJ=re(require("os")),qi=re(require("stream")),BJ=re(require("util"));var ia=class extends Error{constructor(e){super(e);this.name="ShellError"}};var MI={};et(MI,{fastGlobOptions:()=>uJ,isBraceExpansion:()=>gJ,isGlobPattern:()=>rwe,match:()=>iwe,micromatchOptions:()=>TI});var lJ=re(Qm()),cJ=re(require("fs")),OI=re(Hi()),TI={strictBrackets:!0},uJ={onlyDirectories:!1,onlyFiles:!1};function rwe(t){if(!OI.default.scan(t,TI).isGlob)return!1;try{OI.default.parse(t,TI)}catch{return!1}return!0}function iwe(t,{cwd:e,baseFs:r}){return(0,lJ.default)(t,V(P({},uJ),{cwd:O.fromPortablePath(e),fs:QC(cJ.default,new Dg(r))}))}function gJ(t){return OI.default.scan(t,TI).isBrace}var fJ=re(Mw()),As=re(require("stream")),hJ=re(require("string_decoder")),Pi;(function(i){i[i.STDIN=0]="STDIN",i[i.STDOUT=1]="STDOUT",i[i.STDERR=2]="STDERR"})(Pi||(Pi={}));var FA=new Set;function CS(){}function mS(){for(let t of FA)t.kill()}function pJ(t,e,r,i){return n=>{let s=n[0]instanceof As.Transform?"pipe":n[0],o=n[1]instanceof As.Transform?"pipe":n[1],a=n[2]instanceof As.Transform?"pipe":n[2],l=(0,fJ.default)(t,e,V(P({},i),{stdio:[s,o,a]}));return FA.add(l),FA.size===1&&(process.on("SIGINT",CS),process.on("SIGTERM",mS)),n[0]instanceof As.Transform&&n[0].pipe(l.stdin),n[1]instanceof As.Transform&&l.stdout.pipe(n[1],{end:!1}),n[2]instanceof As.Transform&&l.stderr.pipe(n[2],{end:!1}),{stdin:l.stdin,promise:new Promise(c=>{l.on("error",u=>{switch(FA.delete(l),FA.size===0&&(process.off("SIGINT",CS),process.off("SIGTERM",mS)),u.code){case"ENOENT":n[2].write(`command not found: ${t} -`),c(127);break;case"EACCES":n[2].write(`permission denied: ${t} -`),c(128);break;default:n[2].write(`uncaught error: ${u.message} -`),c(1);break}}),l.on("exit",u=>{FA.delete(l),FA.size===0&&(process.off("SIGINT",CS),process.off("SIGTERM",mS)),c(u!==null?u:129)})})}}}function dJ(t){return e=>{let r=e[0]==="pipe"?new As.PassThrough:e[0];return{stdin:r,promise:Promise.resolve().then(()=>t({stdin:r,stdout:e[1],stderr:e[2]}))}}}var On=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},CJ=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");return this.stream}},Wf=class{constructor(e,r){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=r}static start(e,{stdin:r,stdout:i,stderr:n}){let s=new Wf(null,e);return s.stdin=r,s.stdout=i,s.stderr=n,s}pipeTo(e,r=1){let i=new Wf(this,e),n=new CJ;return i.pipe=n,i.stdout=this.stdout,i.stderr=this.stderr,(r&1)==1?this.stdout=n:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(r&2)==2?this.stderr=n:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),i}async exec(){let e=["ignore","ignore","ignore"];if(this.pipe)e[0]="pipe";else{if(this.stdin===null)throw new Error("Assertion failed: No input stream registered");e[0]=this.stdin.get()}let r;if(this.stdout===null)throw new Error("Assertion failed: No output stream registered");r=this.stdout,e[1]=r.get();let i;if(this.stderr===null)throw new Error("Assertion failed: No error stream registered");i=this.stderr,e[2]=i.get();let n=this.implementation(e);return this.pipe&&this.pipe.attach(n.stdin),await n.promise.then(s=>(r.close(),i.close(),s))}async run(){let e=[];for(let i=this;i;i=i.ancestor)e.push(i.exec());return(await Promise.all(e))[0]}};function KI(t,e){return Wf.start(t,e)}function mJ(t,e=null){let r=new As.PassThrough,i=new hJ.StringDecoder,n="";return r.on("data",s=>{let o=i.write(s),a;do if(a=o.indexOf(` -`),a!==-1){let l=n+o.substr(0,a);o=o.substr(a+1),n="",t(e!==null?`${e} ${l}`:l)}while(a!==-1);n+=o}),r.on("end",()=>{let s=i.end();s!==""&&t(e!==null?`${e} ${s}`:s)}),r}function IJ(t,{prefix:e}){return{stdout:mJ(r=>t.stdout.write(`${r} -`),t.stdout.isTTY?e:null),stderr:mJ(r=>t.stderr.write(`${r} -`),t.stderr.isTTY?e:null)}}var nwe=(0,BJ.promisify)(setTimeout);var Vr;(function(r){r[r.Readable=1]="Readable",r[r.Writable=2]="Writable"})(Vr||(Vr={}));function wJ(t,e,r){let i=new qi.PassThrough({autoDestroy:!0});switch(t){case Pi.STDIN:(e&1)==1&&r.stdin.pipe(i,{end:!1}),(e&2)==2&&r.stdin instanceof qi.Writable&&i.pipe(r.stdin,{end:!1});break;case Pi.STDOUT:(e&1)==1&&r.stdout.pipe(i,{end:!1}),(e&2)==2&&i.pipe(r.stdout,{end:!1});break;case Pi.STDERR:(e&1)==1&&r.stderr.pipe(i,{end:!1}),(e&2)==2&&i.pipe(r.stderr,{end:!1});break;default:throw new ia(`Bad file descriptor: "${t}"`)}return i}function UI(t,e={}){let r=P(P({},t),e);return r.environment=P(P({},t.environment),e.environment),r.variables=P(P({},t.variables),e.variables),r}var swe=new Map([["cd",async([t=(0,yJ.homedir)(),...e],r,i)=>{let n=D.resolve(i.cwd,O.toPortablePath(t));return(await r.baseFs.statPromise(n)).isDirectory()?(i.cwd=n,0):(i.stderr.write(`cd: not a directory -`),1)}],["pwd",async(t,e,r)=>(r.stdout.write(`${O.fromPortablePath(r.cwd)} -`),0)],[":",async(t,e,r)=>0],["true",async(t,e,r)=>0],["false",async(t,e,r)=>1],["exit",async([t,...e],r,i)=>i.exitCode=parseInt(t!=null?t:i.variables["?"],10)],["echo",async(t,e,r)=>(r.stdout.write(`${t.join(" ")} -`),0)],["sleep",async([t],e,r)=>{if(typeof t=="undefined")return r.stderr.write(`sleep: missing operand -`),1;let i=Number(t);return Number.isNaN(i)?(r.stderr.write(`sleep: invalid time interval '${t}' -`),1):await nwe(1e3*i,0)}],["__ysh_run_procedure",async(t,e,r)=>{let i=r.procedures[t[0]];return await KI(i,{stdin:new On(r.stdin),stdout:new On(r.stdout),stderr:new On(r.stderr)}).run()}],["__ysh_set_redirects",async(t,e,r)=>{let i=r.stdin,n=r.stdout,s=r.stderr,o=[],a=[],l=[],c=0;for(;t[c]!=="--";){let g=t[c++],{type:f,fd:h}=JSON.parse(g),p=B=>{switch(h){case null:case 0:o.push(B);break;default:throw new Error(`Unsupported file descriptor: "${h}"`)}},m=B=>{switch(h){case null:case 1:a.push(B);break;case 2:l.push(B);break;default:throw new Error(`Unsupported file descriptor: "${h}"`)}},I=Number(t[c++]),y=c+I;for(let B=c;Be.baseFs.createReadStream(D.resolve(r.cwd,O.toPortablePath(t[B]))));break;case"<<<":p(()=>{let x=new qi.PassThrough;return process.nextTick(()=>{x.write(`${t[B]} -`),x.end()}),x});break;case"<&":p(()=>wJ(Number(t[B]),1,r));break;case">":case">>":{let x=D.resolve(r.cwd,O.toPortablePath(t[B]));m(x==="/dev/null"?new qi.Writable({autoDestroy:!0,emitClose:!0,write(F,L,T){setImmediate(T)}}):e.baseFs.createWriteStream(x,f===">>"?{flags:"a"}:void 0))}break;case">&":m(wJ(Number(t[B]),2,r));break;default:throw new Error(`Assertion failed: Unsupported redirection type: "${f}"`)}}if(o.length>0){let g=new qi.PassThrough;i=g;let f=h=>{if(h===o.length)g.end();else{let p=o[h]();p.pipe(g,{end:!1}),p.on("end",()=>{f(h+1)})}};f(0)}if(a.length>0){let g=new qi.PassThrough;n=g;for(let f of a)g.pipe(f)}if(l.length>0){let g=new qi.PassThrough;s=g;for(let f of l)g.pipe(f)}let u=await KI(Vf(t.slice(c+1),e,r),{stdin:new On(i),stdout:new On(n),stderr:new On(s)}).run();return await Promise.all(a.map(g=>new Promise((f,h)=>{g.on("error",p=>{h(p)}),g.on("close",()=>{f()}),g.end()}))),await Promise.all(l.map(g=>new Promise((f,h)=>{g.on("error",p=>{h(p)}),g.on("close",()=>{f()}),g.end()}))),u}]]);async function owe(t,e,r){let i=[],n=new qi.PassThrough;return n.on("data",s=>i.push(s)),await YI(t,e,UI(r,{stdout:n})),Buffer.concat(i).toString().replace(/[\r\n]+$/,"")}async function QJ(t,e,r){let i=t.map(async s=>{let o=await RA(s.args,e,r);return{name:s.name,value:o.join(" ")}});return(await Promise.all(i)).reduce((s,o)=>(s[o.name]=o.value,s),{})}function IS(t){return t.match(/[^ \r\n\t]+/g)||[]}async function bJ(t,e,r,i,n=i){switch(t.name){case"$":i(String(process.pid));break;case"#":i(String(e.args.length));break;case"@":if(t.quoted)for(let s of e.args)n(s);else for(let s of e.args){let o=IS(s);for(let a=0;a=0&&st+e,subtraction:(t,e)=>t-e,multiplication:(t,e)=>t*e,division:(t,e)=>Math.trunc(t/e)};async function Xf(t,e,r){if(t.type==="number"){if(Number.isInteger(t.value))return t.value;throw new Error(`Invalid number: "${t.value}", only integers are allowed`)}else if(t.type==="variable"){let i=[];await bJ(V(P({},t),{quoted:!0}),e,r,s=>i.push(s));let n=Number(i.join(" "));return Number.isNaN(n)?Xf({type:"variable",name:i.join(" ")},e,r):Xf({type:"number",value:n},e,r)}else return awe[t.type](await Xf(t.left,e,r),await Xf(t.right,e,r))}async function RA(t,e,r){let i=new Map,n=[],s=[],o=u=>{s.push(u)},a=()=>{s.length>0&&n.push(s.join("")),s=[]},l=u=>{o(u),a()},c=(u,g,f)=>{let h=JSON.stringify({type:u,fd:g}),p=i.get(h);typeof p=="undefined"&&i.set(h,p=[]),p.push(f)};for(let u of t){let g=!1;switch(u.type){case"redirection":{let f=await RA(u.args,e,r);for(let h of f)c(u.subtype,u.fd,h)}break;case"argument":for(let f of u.segments)switch(f.type){case"text":o(f.text);break;case"glob":o(f.pattern),g=!0;break;case"shell":{let h=await owe(f.shell,e,r);if(f.quoted)o(h);else{let p=IS(h);for(let m=0;m0){let u=[];for(let[g,f]of i.entries())u.splice(u.length,0,g,String(f.length),...f);n.splice(0,0,"__ysh_set_redirects",...u,"--")}return n}function Vf(t,e,r){e.builtins.has(t[0])||(t=["command",...t]);let i=O.fromPortablePath(r.cwd),n=r.environment;typeof n.PWD!="undefined"&&(n=V(P({},n),{PWD:i}));let[s,...o]=t;if(s==="command")return pJ(o[0],o.slice(1),e,{cwd:i,env:n});let a=e.builtins.get(s);if(typeof a=="undefined")throw new Error(`Assertion failed: A builtin should exist for "${s}"`);return dJ(async({stdin:l,stdout:c,stderr:u})=>(r.stdin=l,r.stdout=c,r.stderr=u,await a(o,e,r)))}function Awe(t,e,r){return i=>{let n=new qi.PassThrough,s=YI(t,e,UI(r,{stdin:n}));return{stdin:n,promise:s}}}function lwe(t,e,r){return i=>{let n=new qi.PassThrough,s=YI(t,e,r);return{stdin:n,promise:s}}}function DJ(t,e,r,i){if(e.length===0)return t;{let n;do n=String(Math.random());while(Object.prototype.hasOwnProperty.call(i.procedures,n));return i.procedures=P({},i.procedures),i.procedures[n]=t,Vf([...e,"__ysh_run_procedure",n],r,i)}}async function SJ(t,e,r){let i=t,n=null,s=null;for(;i;){let o=i.then?P({},r):r,a;switch(i.type){case"command":{let l=await RA(i.args,e,r),c=await QJ(i.envs,e,r);a=i.envs.length?Vf(l,e,UI(o,{environment:c})):Vf(l,e,o)}break;case"subshell":{let l=await RA(i.args,e,r),c=Awe(i.subshell,e,o);a=DJ(c,l,e,o)}break;case"group":{let l=await RA(i.args,e,r),c=lwe(i.group,e,o);a=DJ(c,l,e,o)}break;case"envs":{let l=await QJ(i.envs,e,r);o.environment=P(P({},o.environment),l),a=Vf(["true"],e,o)}break}if(typeof a=="undefined")throw new Error("Assertion failed: An action should have been generated");if(n===null)s=KI(a,{stdin:new On(o.stdin),stdout:new On(o.stdout),stderr:new On(o.stderr)});else{if(s===null)throw new Error("Assertion failed: The execution pipeline should have been setup");switch(n){case"|":s=s.pipeTo(a,Pi.STDOUT);break;case"|&":s=s.pipeTo(a,Pi.STDOUT|Pi.STDERR);break}}i.then?(n=i.then.type,i=i.then.chain):i=null}if(s===null)throw new Error("Assertion failed: The execution pipeline should have been setup");return await s.run()}async function cwe(t,e,r,{background:i=!1}={}){function n(s){let o=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],a=o[s%o.length];return EJ.default.hex(a)}if(i){let s=r.nextBackgroundJobIndex++,o=n(s),a=`[${s}]`,l=o(a),{stdout:c,stderr:u}=IJ(r,{prefix:l});return r.backgroundJobs.push(SJ(t,e,UI(r,{stdout:c,stderr:u})).catch(g=>u.write(`${g.message} -`)).finally(()=>{r.stdout.isTTY&&r.stdout.write(`Job ${l}, '${o(mc(t))}' has ended -`)})),0}return await SJ(t,e,r)}async function uwe(t,e,r,{background:i=!1}={}){let n,s=a=>{n=a,r.variables["?"]=String(a)},o=async a=>{try{return await cwe(a.chain,e,r,{background:i&&typeof a.then=="undefined"})}catch(l){if(!(l instanceof ia))throw l;return r.stderr.write(`${l.message} -`),1}};for(s(await o(t));t.then;){if(r.exitCode!==null)return r.exitCode;switch(t.then.type){case"&&":n===0&&s(await o(t.then.line));break;case"||":n!==0&&s(await o(t.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: "${t.then.type}"`)}t=t.then.line}return n}async function YI(t,e,r){let i=r.backgroundJobs;r.backgroundJobs=[];let n=0;for(let{command:s,type:o}of t){if(n=await uwe(s,e,r,{background:o==="&"}),r.exitCode!==null)return r.exitCode;r.variables["?"]=String(n)}return await Promise.all(r.backgroundJobs),r.backgroundJobs=i,n}function xJ(t){switch(t.type){case"variable":return t.name==="@"||t.name==="#"||t.name==="*"||Number.isFinite(parseInt(t.name,10))||"defaultValue"in t&&!!t.defaultValue&&t.defaultValue.some(e=>HI(e));case"arithmetic":return ES(t.arithmetic);case"shell":return yS(t.shell);default:return!1}}function HI(t){switch(t.type){case"redirection":return t.args.some(e=>HI(e));case"argument":return t.segments.some(e=>xJ(e));default:throw new Error(`Assertion failed: Unsupported argument type: "${t.type}"`)}}function ES(t){switch(t.type){case"variable":return xJ(t);case"number":return!1;default:return ES(t.left)||ES(t.right)}}function yS(t){return t.some(({command:e})=>{for(;e;){let r=e.chain;for(;r;){let i;switch(r.type){case"subshell":i=yS(r.subshell);break;case"command":i=r.envs.some(n=>n.args.some(s=>HI(s)))||r.args.some(n=>HI(n));break}if(i)return!0;if(!r.then)break;r=r.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function xc(t,e=[],{baseFs:r=new Ft,builtins:i={},cwd:n=O.toPortablePath(process.cwd()),env:s=process.env,stdin:o=process.stdin,stdout:a=process.stdout,stderr:l=process.stderr,variables:c={},glob:u=MI}={}){let g={};for(let[p,m]of Object.entries(s))typeof m!="undefined"&&(g[p]=m);let f=new Map(swe);for(let[p,m]of Object.entries(i))f.set(p,m);o===null&&(o=new qi.PassThrough,o.end());let h=II(t,u);if(!yS(h)&&h.length>0&&e.length>0){let{command:p}=h[h.length-1];for(;p.then;)p=p.then.line;let m=p.chain;for(;m.then;)m=m.then.chain;m.type==="command"&&(m.args=m.args.concat(e.map(I=>({type:"argument",segments:[{type:"text",text:I}]}))))}return await YI(h,{args:e,baseFs:r,builtins:f,initialStdin:o,initialStdout:a,initialStderr:l,glob:u},{cwd:n,environment:g,exitCode:null,procedures:{},stdin:o,stdout:a,stderr:l,variables:Object.assign({},c,{["?"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var OW=re(SS()),TW=re(GI()),Pc=re(require("stream"));var DW=re(cr());var Pt={};et(Pt,{SemVer:()=>wW.SemVer,satisfiesWithPrereleases:()=>_f,validRange:()=>Kn});var qI=re(cr()),wW=re(cr()),QW=new Map;function _f(t,e,r=!1){if(!t)return!1;let i=`${e}${r}`,n=QW.get(i);if(typeof n=="undefined")try{n=new qI.default.Range(e,{includePrerelease:!0,loose:r})}catch{return!1}finally{QW.set(i,n||null)}else if(n===null)return!1;let s;try{s=new qI.default.SemVer(t,n)}catch(o){return!1}return n.test(s)?!0:(s.prerelease&&(s.prerelease=[]),n.set.some(o=>{for(let a of o)a.semver.prerelease&&(a.semver.prerelease=[]);return o.every(a=>a.test(s))}))}var bW=new Map;function Kn(t){if(t.indexOf(":")!==-1)return null;let e=bW.get(t);if(typeof e!="undefined")return e;try{e=new qI.default.Range(t)}catch{e=null}return bW.set(t,e),e}var na=class{constructor(){this.indent=" ";this.name=null;this.version=null;this.os=null;this.cpu=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:r=new Ft}={}){let i=D.join(e,"package.json");return await r.existsPromise(i)?await na.fromFile(i,{baseFs:r}):null}static async find(e,{baseFs:r}={}){let i=await na.tryFind(e,{baseFs:r});if(i===null)throw new Error("Manifest not found");return i}static async fromFile(e,{baseFs:r=new Ft}={}){let i=new na;return await i.loadFile(e,{baseFs:r}),i}static fromText(e){let r=new na;return r.loadFromText(e),r}static isManifestFieldCompatible(e,r){if(e===null)return!0;let i=!0,n=!1;for(let s of e)if(s[0]==="!"){if(n=!0,r===s.slice(1))return!1}else if(i=!1,s===r)return!0;return n&&i}loadFromText(e){let r;try{r=JSON.parse(xW(e)||"{}")}catch(i){throw i.message+=` (when parsing ${e})`,i}this.load(r),this.indent=SW(e)}async loadFile(e,{baseFs:r=new Ft}){let i=await r.readFilePromise(e,"utf8"),n;try{n=JSON.parse(xW(i)||"{}")}catch(s){throw s.message+=` (when parsing ${e})`,s}this.load(n),this.indent=SW(i)}load(e,{yamlCompatibilityMode:r=!1}={}){if(typeof e!="object"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let i=[];if(this.name=null,typeof e.name=="string")try{this.name=Si(e.name)}catch(s){i.push(new Error("Parsing failed for the 'name' field"))}if(typeof e.version=="string"?this.version=e.version:this.version=null,Array.isArray(e.os)){let s=[];this.os=s;for(let o of e.os)typeof o!="string"?i.push(new Error("Parsing failed for the 'os' field")):s.push(o)}else this.os=null;if(Array.isArray(e.cpu)){let s=[];this.cpu=s;for(let o of e.cpu)typeof o!="string"?i.push(new Error("Parsing failed for the 'cpu' field")):s.push(o)}else this.cpu=null;if(typeof e.type=="string"?this.type=e.type:this.type=null,typeof e.packageManager=="string"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private=="boolean"?this.private=e.private:this.private=!1,typeof e.license=="string"?this.license=e.license:this.license=null,typeof e.languageName=="string"?this.languageName=e.languageName:this.languageName=null,typeof e.main=="string"?this.main=fi(e.main):this.main=null,typeof e.module=="string"?this.module=fi(e.module):this.module=null,e.browser!=null)if(typeof e.browser=="string")this.browser=fi(e.browser);else{this.browser=new Map;for(let[s,o]of Object.entries(e.browser))this.browser.set(fi(s),typeof o=="string"?fi(o):o)}else this.browser=null;if(this.bin=new Map,typeof e.bin=="string")this.name!==null?this.bin.set(this.name.name,fi(e.bin)):i.push(new Error("String bin field, but no attached package name"));else if(typeof e.bin=="object"&&e.bin!==null)for(let[s,o]of Object.entries(e.bin)){if(typeof o!="string"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}this.bin.set(s,fi(o))}if(this.scripts=new Map,typeof e.scripts=="object"&&e.scripts!==null)for(let[s,o]of Object.entries(e.scripts)){if(typeof o!="string"){i.push(new Error(`Invalid script definition for '${s}'`));continue}this.scripts.set(s,o)}if(this.dependencies=new Map,typeof e.dependencies=="object"&&e.dependencies!==null)for(let[s,o]of Object.entries(e.dependencies)){if(typeof o!="string"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=Si(s)}catch(c){i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=zt(a,o);this.dependencies.set(l.identHash,l)}if(this.devDependencies=new Map,typeof e.devDependencies=="object"&&e.devDependencies!==null)for(let[s,o]of Object.entries(e.devDependencies)){if(typeof o!="string"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=Si(s)}catch(c){i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=zt(a,o);this.devDependencies.set(l.identHash,l)}if(this.peerDependencies=new Map,typeof e.peerDependencies=="object"&&e.peerDependencies!==null)for(let[s,o]of Object.entries(e.peerDependencies)){let a;try{a=Si(s)}catch(c){i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}(typeof o!="string"||!Kn(o))&&(i.push(new Error(`Invalid dependency range for '${s}'`)),o="*");let l=zt(a,o);this.peerDependencies.set(l.identHash,l)}typeof e.workspaces=="object"&&e.workspaces.nohoist&&i.push(new Error("'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead"));let n=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces=="object"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let s of n){if(typeof s!="string"){i.push(new Error(`Invalid workspace definition for '${s}'`));continue}this.workspaceDefinitions.push({pattern:s})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta=="object"&&e.dependenciesMeta!==null)for(let[s,o]of Object.entries(e.dependenciesMeta)){if(typeof o!="object"||o===null){i.push(new Error(`Invalid meta field for '${s}`));continue}let a=Jo(s),l=this.ensureDependencyMeta(a),c=JI(o.built,{yamlCompatibilityMode:r});if(c===null){i.push(new Error(`Invalid built meta field for '${s}'`));continue}let u=JI(o.optional,{yamlCompatibilityMode:r});if(u===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}let g=JI(o.unplugged,{yamlCompatibilityMode:r});if(g===null){i.push(new Error(`Invalid unplugged meta field for '${s}'`));continue}Object.assign(l,{built:c,optional:u,unplugged:g})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta=="object"&&e.peerDependenciesMeta!==null)for(let[s,o]of Object.entries(e.peerDependenciesMeta)){if(typeof o!="object"||o===null){i.push(new Error(`Invalid meta field for '${s}'`));continue}let a=Jo(s),l=this.ensurePeerDependencyMeta(a),c=JI(o.optional,{yamlCompatibilityMode:r});if(c===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}Object.assign(l,{optional:c})}if(this.resolutions=[],typeof e.resolutions=="object"&&e.resolutions!==null)for(let[s,o]of Object.entries(e.resolutions)){if(typeof o!="string"){i.push(new Error(`Invalid resolution entry for '${s}'`));continue}try{this.resolutions.push({pattern:wI(s),reference:o})}catch(a){i.push(a);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let s of e.files){if(typeof s!="string"){i.push(new Error(`Invalid files entry for '${s}'`));continue}this.files.add(s)}}else this.files=null;if(typeof e.publishConfig=="object"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access=="string"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main=="string"&&(this.publishConfig.main=fi(e.publishConfig.main)),typeof e.publishConfig.module=="string"&&(this.publishConfig.module=fi(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser=="string")this.publishConfig.browser=fi(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[s,o]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set(fi(s),typeof o=="string"?fi(o):o)}if(typeof e.publishConfig.registry=="string"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin=="string")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,fi(e.publishConfig.bin)]]):i.push(new Error("String bin field, but no attached package name"));else if(typeof e.publishConfig.bin=="object"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[s,o]of Object.entries(e.publishConfig.bin)){if(typeof o!="string"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}this.publishConfig.bin.set(s,fi(o))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let s of e.publishConfig.executableFiles){if(typeof s!="string"){i.push(new Error("Invalid executable file definition"));continue}this.publishConfig.executableFiles.add(fi(s))}}}else this.publishConfig=null;if(typeof e.installConfig=="object"&&e.installConfig!==null){this.installConfig={};for(let s of Object.keys(e.installConfig))s==="hoistingLimits"?typeof e.installConfig.hoistingLimits=="string"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:i.push(new Error("Invalid hoisting limits definition")):i.push(new Error(`Unrecognized installConfig key: ${s}`))}else this.installConfig=null;if(typeof e.optionalDependencies=="object"&&e.optionalDependencies!==null)for(let[s,o]of Object.entries(e.optionalDependencies)){if(typeof o!="string"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=Si(s)}catch(g){i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=zt(a,o);this.dependencies.set(l.identHash,l);let c=zt(a,"unknown"),u=this.ensureDependencyMeta(c);Object.assign(u,{optional:!0})}typeof e.preferUnplugged=="boolean"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=i}getForScope(e){switch(e){case"dependencies":return this.dependencies;case"devDependencies":return this.devDependencies;case"peerDependencies":return this.peerDependencies;default:throw new Error(`Unsupported value ("${e}")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}isCompatibleWithOS(e){return na.isManifestFieldCompatible(this.os,e)}isCompatibleWithCPU(e){return na.isManifestFieldCompatible(this.cpu,e)}ensureDependencyMeta(e){if(e.range!=="unknown"&&!DW.default.valid(e.range))throw new Error(`Invalid meta field range for '${xi(e)}'`);let r=dt(e),i=e.range!=="unknown"?e.range:null,n=this.dependenciesMeta.get(r);n||this.dependenciesMeta.set(r,n=new Map);let s=n.get(i);return s||n.set(i,s={}),s}ensurePeerDependencyMeta(e){if(e.range!=="unknown")throw new Error(`Invalid meta field range for '${xi(e)}'`);let r=dt(e),i=this.peerDependenciesMeta.get(r);return i||this.peerDependenciesMeta.set(r,i={}),i}setRawField(e,r,{after:i=[]}={}){let n=new Set(i.filter(s=>Object.prototype.hasOwnProperty.call(this.raw,s)));if(n.size===0||Object.prototype.hasOwnProperty.call(this.raw,e))this.raw[e]=r;else{let s=this.raw,o=this.raw={},a=!1;for(let l of Object.keys(s))o[l]=s[l],a||(n.delete(l),n.size===0&&(o[e]=r,a=!0))}}exportTo(e,{compatibilityMode:r=!0}={}){if(Object.assign(e,this.raw),this.name!==null?e.name=dt(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let s=this.browser;typeof s=="string"?e.browser=s:s instanceof Map&&(e.browser=Object.assign({},...Array.from(s.keys()).sort().map(o=>({[o]:s.get(o)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(s=>({[s]:this.bin.get(s)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces=V(P({},this.raw.workspaces),{packages:this.workspaceDefinitions.map(({pattern:s})=>s)}):e.workspaces=this.workspaceDefinitions.map(({pattern:s})=>s):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let i=[],n=[];for(let s of this.dependencies.values()){let o=this.dependenciesMeta.get(dt(s)),a=!1;if(r&&o){let l=o.get(null);l&&l.optional&&(a=!0)}a?n.push(s):i.push(s)}i.length>0?e.dependencies=Object.assign({},...ec(i).map(s=>({[dt(s)]:s.range}))):delete e.dependencies,n.length>0?e.optionalDependencies=Object.assign({},...ec(n).map(s=>({[dt(s)]:s.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...ec(this.devDependencies.values()).map(s=>({[dt(s)]:s.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...ec(this.peerDependencies.values()).map(s=>({[dt(s)]:s.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[s,o]of bi(this.dependenciesMeta.entries(),([a,l])=>a))for(let[a,l]of bi(o.entries(),([c,u])=>c!==null?`0${c}`:"1")){let c=a!==null?xi(zt(Si(s),a)):s,u=P({},l);r&&a===null&&delete u.optional,Object.keys(u).length!==0&&(e.dependenciesMeta[c]=u)}return Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...bi(this.peerDependenciesMeta.entries(),([s,o])=>s).map(([s,o])=>({[s]:o}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:s,reference:o})=>({[QI(s)]:o}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,e}},ze=na;ze.fileName="package.json",ze.allDependencies=["dependencies","devDependencies","peerDependencies"],ze.hardDependencies=["dependencies","devDependencies"];function SW(t){let e=t.match(/^[ \t]+/m);return e?e[0]:" "}function xW(t){return t.charCodeAt(0)===65279?t.slice(1):t}function fi(t){return t.replace(/\\/g,"/")}function JI(t,{yamlCompatibilityMode:e}){return e?XQ(t):typeof t=="undefined"||typeof t=="boolean"?t:null}var FW=re(vW());var RW=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],LW=80,RQe=new Set([z.FETCH_NOT_CACHED,z.UNUSED_CACHE_ENTRY]),LQe=5,sa=process.env.GITHUB_ACTIONS?{start:t=>`::group::${t} -`,end:t=>`::endgroup:: -`}:process.env.TRAVIS?{start:t=>`travis_fold:start:${t} -`,end:t=>`travis_fold:end:${t} -`}:process.env.GITLAB_CI?{start:t=>`section_start:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}\r${t} -`,end:t=>`section_end:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}\r`}:null,NW=new Date,NQe=["iTerm.app","Apple_Terminal"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,MQe=t=>t,zI=MQe({patrick:{date:[17,3],chars:["\u{1F340}","\u{1F331}"],size:40},simba:{date:[19,7],chars:["\u{1F981}","\u{1F334}"],size:40},jack:{date:[31,10],chars:["\u{1F383}","\u{1F987}"],size:40},hogsfather:{date:[31,12],chars:["\u{1F389}","\u{1F384}"],size:40},default:{chars:["=","-"],size:80}}),OQe=NQe&&Object.keys(zI).find(t=>{let e=zI[t];return!(e.date&&(e.date[0]!==NW.getDate()||e.date[1]!==NW.getMonth()+1))})||"default";function MW(t,{configuration:e,json:r}){if(!e.get("enableMessageNames"))return"";let n=MC(t===null?0:t);return!r&&t===null?Je(e,n,"grey"):n}function kS(t,{configuration:e,json:r}){let i=MW(t,{configuration:e,json:r});if(!i||t===null||t===z.UNNAMED)return i;let n=z[t],s=`https://yarnpkg.com/advanced/error-codes#${i}---${n}`.toLowerCase();return tc(e,i,s)}var xe=class extends ci{constructor({configuration:e,stdout:r,json:i=!1,includeFooter:n=!0,includeLogs:s=!i,includeInfos:o=s,includeWarnings:a=s,forgettableBufferSize:l=LQe,forgettableNames:c=new Set}){super();this.uncommitted=new Set;this.cacheHitCount=0;this.cacheMissCount=0;this.lastCacheMiss=null;this.warningCount=0;this.errorCount=0;this.startTime=Date.now();this.indent=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.forgettableLines=[];Bf(this,{configuration:e}),this.configuration=e,this.forgettableBufferSize=l,this.forgettableNames=new Set([...c,...RQe]),this.includeFooter=n,this.includeInfos=o,this.includeWarnings=a,this.json=i,this.stdout=r;let u=this.configuration.get("progressBarStyle")||OQe;if(!Object.prototype.hasOwnProperty.call(zI,u))throw new Error("Assertion failed: Invalid progress bar style");this.progressStyle=zI[u];let g="\u27A4 YN0000: \u250C ".length,f=Math.max(0,Math.min(process.stdout.columns-g,80));this.progressMaxScaledSize=Math.floor(this.progressStyle.size*f/80)}static async start(e,r){let i=new this(e),n=process.emitWarning;process.emitWarning=(s,o)=>{if(typeof s!="string"){let l=s;s=l.message,o=o!=null?o:l.name}let a=typeof o!="undefined"?`${o}: ${s}`:s;i.reportWarning(z.UNNAMED,a)};try{await r(i)}catch(s){i.reportExceptionOnce(s)}finally{await i.finalize(),process.emitWarning=n}return i}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(e){this.cacheHitCount+=1}reportCacheMiss(e,r){this.lastCacheMiss=e,this.cacheMissCount+=1,typeof r!="undefined"&&!this.configuration.get("preferAggregateCacheInfo")&&this.reportInfo(z.FETCH_NOT_CACHED,r)}startTimerSync(e,r,i){let n=typeof r=="function"?{}:r,s=typeof r=="function"?r:i,o={committed:!1,action:()=>{this.reportInfo(null,`\u250C ${e}`),this.indent+=1,sa!==null&&!this.json&&this.includeInfos&&this.stdout.write(sa.start(e))}};n.skipIfEmpty?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(this.indent-=1,sa!==null&&!this.json&&this.includeInfos&&this.stdout.write(sa.end(e)),this.configuration.get("enableTimers")&&l-a>200?this.reportInfo(null,`\u2514 Completed in ${Je(this.configuration,l-a,Pe.DURATION)}`):this.reportInfo(null,"\u2514 Completed"))}}async startTimerPromise(e,r,i){let n=typeof r=="function"?{}:r,s=typeof r=="function"?r:i,o={committed:!1,action:()=>{this.reportInfo(null,`\u250C ${e}`),this.indent+=1,sa!==null&&!this.json&&this.includeInfos&&this.stdout.write(sa.start(e))}};n.skipIfEmpty?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return await s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(this.indent-=1,sa!==null&&!this.json&&this.includeInfos&&this.stdout.write(sa.end(e)),this.configuration.get("enableTimers")&&l-a>200?this.reportInfo(null,`\u2514 Completed in ${Je(this.configuration,l-a,Pe.DURATION)}`):this.reportInfo(null,"\u2514 Completed"))}}async startCacheReport(e){let r=this.configuration.get("preferAggregateCacheInfo")?{cacheHitCount:this.cacheHitCount,cacheMissCount:this.cacheMissCount}:null;try{return await e()}catch(i){throw this.reportExceptionOnce(i),i}finally{r!==null&&this.reportCacheChanges(r)}}reportSeparator(){this.indent===0?this.writeLineWithForgettableReset(""):this.reportInfo(null,"")}reportInfo(e,r){if(!this.includeInfos)return;this.commit();let i=this.formatNameWithHyperlink(e),n=i?`${i}: `:"",s=`${Je(this.configuration,"\u27A4","blueBright")} ${n}${this.formatIndent()}${r}`;if(this.json)this.reportJson({type:"info",name:e,displayName:this.formatName(e),indent:this.formatIndent(),data:r});else if(this.forgettableNames.has(e))if(this.forgettableLines.push(s),this.forgettableLines.length>this.forgettableBufferSize){for(;this.forgettableLines.length>this.forgettableBufferSize;)this.forgettableLines.shift();this.writeLines(this.forgettableLines,{truncate:!0})}else this.writeLine(s,{truncate:!0});else this.writeLineWithForgettableReset(s)}reportWarning(e,r){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let i=this.formatNameWithHyperlink(e),n=i?`${i}: `:"";this.json?this.reportJson({type:"warning",name:e,displayName:this.formatName(e),indent:this.formatIndent(),data:r}):this.writeLineWithForgettableReset(`${Je(this.configuration,"\u27A4","yellowBright")} ${n}${this.formatIndent()}${r}`)}reportError(e,r){this.errorCount+=1,this.commit();let i=this.formatNameWithHyperlink(e),n=i?`${i}: `:"";this.json?this.reportJson({type:"error",name:e,displayName:this.formatName(e),indent:this.formatIndent(),data:r}):this.writeLineWithForgettableReset(`${Je(this.configuration,"\u27A4","redBright")} ${n}${this.formatIndent()}${r}`,{truncate:!1})}reportProgress(e){let r=!1,i=Promise.resolve().then(async()=>{let s={progress:0,title:void 0};this.progress.set(e,{definition:s,lastScaledSize:-1}),this.refreshProgress(-1);for await(let{progress:o,title:a}of e)r||s.progress===o&&s.title===a||(s.progress=o,s.title=a,this.refreshProgress());n()}),n=()=>{r||(r=!0,this.progress.delete(e),this.refreshProgress(1))};return V(P({},i),{stop:n})}reportJson(e){this.json&&this.writeLineWithForgettableReset(`${JSON.stringify(e)}`)}async finalize(){if(!this.includeFooter)return;let e="";this.errorCount>0?e="Failed with errors":this.warningCount>0?e="Done with warnings":e="Done";let r=Je(this.configuration,Date.now()-this.startTime,Pe.DURATION),i=this.configuration.get("enableTimers")?`${e} in ${r}`:e;this.errorCount>0?this.reportError(z.UNNAMED,i):this.warningCount>0?this.reportWarning(z.UNNAMED,i):this.reportInfo(z.UNNAMED,i)}writeLine(e,{truncate:r}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(e,{truncate:r})} -`),this.writeProgress()}writeLineWithForgettableReset(e,{truncate:r}={}){this.forgettableLines=[],this.writeLine(e,{truncate:r})}writeLines(e,{truncate:r}={}){this.clearProgress({delta:e.length});for(let i of e)this.stdout.write(`${this.truncate(i,{truncate:r})} -`);this.writeProgress()}reportCacheChanges({cacheHitCount:e,cacheMissCount:r}){let i=this.cacheHitCount-e,n=this.cacheMissCount-r;if(i===0&&n===0)return;let s="";this.cacheHitCount>1?s+=`${this.cacheHitCount} packages were already cached`:this.cacheHitCount===1?s+=" - one package was already cached":s+="No packages were cached",this.cacheHitCount>0?this.cacheMissCount>1?s+=`, ${this.cacheMissCount} had to be fetched`:this.cacheMissCount===1&&(s+=`, one had to be fetched (${nt(this.configuration,this.lastCacheMiss)})`):this.cacheMissCount>1?s+=` - ${this.cacheMissCount} packages had to be fetched`:this.cacheMissCount===1&&(s+=` - one package had to be fetched (${nt(this.configuration,this.lastCacheMiss)})`),this.reportInfo(z.FETCH_NOT_CACHED,s)}commit(){let e=this.uncommitted;this.uncommitted=new Set;for(let r of e)r.committed=!0,r.action()}clearProgress({delta:e=0,clear:r=!1}){!this.configuration.get("enableProgressBars")||this.json||this.progress.size+e>0&&(this.stdout.write(`[${this.progress.size+e}A`),(e>0||r)&&this.stdout.write(""))}writeProgress(){if(!this.configuration.get("enableProgressBars")||this.json||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let e=Date.now();e-this.progressTime>LW&&(this.progressFrame=(this.progressFrame+1)%RW.length,this.progressTime=e);let r=RW[this.progressFrame];for(let i of this.progress.values()){let n=this.progressStyle.chars[0].repeat(i.lastScaledSize),s=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-i.lastScaledSize),o=this.formatName(null),a=o?`${o}: `:"";this.stdout.write(`${Je(this.configuration,"\u27A4","blueBright")} ${a}${r} ${n}${s} -`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress()},LW)}refreshProgress(e=0){let r=!1;if(this.progress.size===0)r=!0;else for(let i of this.progress.values()){let n=Math.trunc(this.progressMaxScaledSize*i.definition.progress),s=i.lastScaledSize;if(i.lastScaledSize=n,n!==s){r=!0;break}}r&&(this.clearProgress({delta:e}),this.writeProgress())}truncate(e,{truncate:r}={}){return this.configuration.get("enableProgressBars")||(r=!1),typeof r=="undefined"&&(r=this.configuration.get("preferTruncatedLines")),r&&(e=(0,FW.default)(e,0,process.stdout.columns-1)),e}formatName(e){return MW(e,{configuration:this.configuration,json:this.json})}formatNameWithHyperlink(e){return kS(e,{configuration:this.configuration,json:this.json})}formatIndent(){return"\u2502 ".repeat(this.indent)}};var Er="3.0.0-git.20210727.hash-3cbbb672";var cs;(function(n){n.Yarn1="Yarn Classic",n.Yarn2="Yarn",n.Npm="npm",n.Pnpm="pnpm"})(cs||(cs={}));async function io(t,e,r,i=[]){if(process.platform==="win32"){let n=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @"${r}" ${i.map(s=>`"${s.replace('"','""')}"`).join(" ")} %*`;await N.writeFilePromise(D.format({dir:t,name:e,ext:".cmd"}),n)}await N.writeFilePromise(D.join(t,e),`#!/bin/sh -exec "${r}" ${i.map(n=>`'${n.replace(/'/g,`'"'"'`)}'`).join(" ")} "$@" -`),await N.chmodPromise(D.join(t,e),493)}async function TQe(t){let e=null;try{e=await N.readFilePromise(D.join(t,xt.lockfile),"utf8")}catch{}return e!==null?e.match(/^__metadata:$/m)?{packageManager:cs.Yarn2,reason:'"__metadata" key found in yarn.lock'}:{packageManager:cs.Yarn1,reason:'"__metadata" key not found in yarn.lock, must be a Yarn classic lockfile'}:N.existsSync(D.join(t,"package-lock.json"))?{packageManager:cs.Npm,reason:`found npm's "package-lock.json" lockfile`}:N.existsSync(D.join(t,"pnpm-lock.yaml"))?{packageManager:cs.Pnpm,reason:`found pnpm's "pnpm-lock.yaml" lockfile`}:null}async function $f({project:t,locator:e,binFolder:r,lifecycleScript:i}){var l,c;let n={};for(let[u,g]of Object.entries(process.env))typeof g!="undefined"&&(n[u.toLowerCase()!=="path"?u:"PATH"]=g);let s=O.fromPortablePath(r);n.BERRY_BIN_FOLDER=O.fromPortablePath(s);let o=process.env.COREPACK_ROOT?O.join(process.env.COREPACK_ROOT,"dist/yarn.js"):process.argv[1];if(await Promise.all([io(r,"node",process.execPath),...Er!==null?[io(r,"run",process.execPath,[o,"run"]),io(r,"yarn",process.execPath,[o]),io(r,"yarnpkg",process.execPath,[o]),io(r,"node-gyp",process.execPath,[o,"run","--top-level","node-gyp"])]:[]]),t&&(n.INIT_CWD=O.fromPortablePath(t.configuration.startingCwd),n.PROJECT_CWD=O.fromPortablePath(t.cwd)),n.PATH=n.PATH?`${s}${O.delimiter}${n.PATH}`:`${s}`,n.npm_execpath=`${s}${O.sep}yarn`,n.npm_node_execpath=`${s}${O.sep}node`,e){if(!t)throw new Error("Assertion failed: Missing project");let u=t.tryWorkspaceByLocator(e),g=u?(l=u.manifest.version)!=null?l:"":(c=t.storedPackages.get(e.locatorHash).version)!=null?c:"";n.npm_package_name=dt(e),n.npm_package_version=g}let a=Er!==null?`yarn/${Er}`:`yarn/${ql("@yarnpkg/core").version}-core`;return n.npm_config_user_agent=`${a} npm/? node/${process.versions.node} ${process.platform} ${process.arch}`,i&&(n.npm_lifecycle_event=i),t&&await t.configuration.triggerHook(u=>u.setupScriptEnvironment,t,n,async(u,g,f)=>await io(r,rr(u),g,f)),n}var KQe=2,UQe=(0,TW.default)(KQe);async function YQe(t,e,{configuration:r,report:i,workspace:n=null,locator:s=null}){await UQe(async()=>{await N.mktempPromise(async o=>{let a=D.join(o,"pack.log"),l=null,{stdout:c,stderr:u}=r.getSubprocessStreams(a,{prefix:O.fromPortablePath(t),report:i}),g=s&&ss(s)?df(s):s,f=g?gn(g):"an external project";c.write(`Packing ${f} from sources -`);let h=await TQe(t),p;h!==null?(c.write(`Using ${h.packageManager} for bootstrap. Reason: ${h.reason} - -`),p=h.packageManager):(c.write(`No package manager configuration detected; defaulting to Yarn - -`),p=cs.Yarn2),await N.mktempPromise(async m=>{let I=await $f({binFolder:m}),B=new Map([[cs.Yarn1,async()=>{let F=n!==null?["workspace",n]:[],L=await Os("yarn",["set","version","classic","--only-if-needed"],{cwd:t,env:I,stdin:l,stdout:c,stderr:u,end:sn.ErrorCode});if(L.code!==0)return L.code;await N.appendFilePromise(D.join(t,".npmignore"),`/.yarn -`),c.write(` -`);let T=await Os("yarn",["install"],{cwd:t,env:I,stdin:l,stdout:c,stderr:u,end:sn.ErrorCode});if(T.code!==0)return T.code;c.write(` -`);let v=await Os("yarn",[...F,"pack","--filename",O.fromPortablePath(e)],{cwd:t,env:I,stdin:l,stdout:c,stderr:u});return v.code!==0?v.code:0}],[cs.Yarn2,async()=>{let F=n!==null?["workspace",n]:[];I.YARN_ENABLE_INLINE_BUILDS="1";let L=D.join(t,xt.lockfile);await N.existsPromise(L)||await N.writeFilePromise(L,"");let T=await Os("yarn",[...F,"pack","--install-if-needed","--filename",O.fromPortablePath(e)],{cwd:t,env:I,stdin:l,stdout:c,stderr:u});return T.code!==0?T.code:0}],[cs.Npm,async()=>{if(n!==null)throw new Error(`Workspaces aren't supported by npm, which has been detected as the primary package manager for ${t}`);delete I.npm_config_user_agent;let F=await Os("npm",["install"],{cwd:t,env:I,stdin:l,stdout:c,stderr:u,end:sn.ErrorCode});if(F.code!==0)return F.code;let L=new Pc.PassThrough,T=af(L);L.pipe(c);let v=await Os("npm",["pack","--silent"],{cwd:t,env:I,stdin:l,stdout:L,stderr:u});if(v.code!==0)return v.code;let q=(await T).toString().trim(),oe=D.resolve(t,O.toPortablePath(q));return await N.renamePromise(oe,e),0}]]).get(p);if(typeof B=="undefined")throw new Error("Assertion failed: Unsupported workflow");let x=await B();if(!(x===0||typeof x=="undefined"))throw N.detachTemp(o),new _e(z.PACKAGE_PREPARATION_FAILED,`Packing the package failed (exit code ${x}, logs can be found here: ${a})`)})})})}async function HQe(t,e,{project:r}){let i=r.tryWorkspaceByLocator(t);if(i!==null)return PS(i,e);let n=r.storedPackages.get(t.locatorHash);if(!n)throw new Error(`Package for ${nt(r.configuration,t)} not found in the project`);return await nn.openPromise(async s=>{let o=r.configuration,a=r.configuration.getLinkers(),l={project:r,report:new xe({stdout:new Pc.PassThrough,configuration:o})},c=a.find(h=>h.supportsPackage(n,l));if(!c)throw new Error(`The package ${nt(r.configuration,n)} isn't supported by any of the available linkers`);let u=await c.findPackageLocation(n,l),g=new yt(u,{baseFs:s});return(await ze.find(Qe.dot,{baseFs:g})).scripts.has(e)},{libzip:await gi()})}async function VI(t,e,r,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await N.mktempPromise(async l=>{let{manifest:c,env:u,cwd:g}=await KW(t,{project:n,binFolder:l,cwd:i,lifecycleScript:e}),f=c.scripts.get(e);if(typeof f=="undefined")return 1;let h=async()=>await xc(f,r,{cwd:g,env:u,stdin:s,stdout:o,stderr:a});return await(await n.configuration.reduceHook(m=>m.wrapScriptExecution,h,n,t,e,{script:f,args:r,cwd:g,env:u,stdin:s,stdout:o,stderr:a}))()})}async function vS(t,e,r,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await N.mktempPromise(async l=>{let{env:c,cwd:u}=await KW(t,{project:n,binFolder:l,cwd:i});return await xc(e,r,{cwd:u,env:c,stdin:s,stdout:o,stderr:a})})}async function jQe(t,{binFolder:e,cwd:r,lifecycleScript:i}){let n=await $f({project:t.project,locator:t.anchoredLocator,binFolder:e,lifecycleScript:i});return await Promise.all(Array.from(await UW(t),([s,[,o]])=>io(e,rr(s),process.execPath,[o]))),typeof r=="undefined"&&(r=D.dirname(await N.realpathPromise(D.join(t.cwd,"package.json")))),{manifest:t.manifest,binFolder:e,env:n,cwd:r}}async function KW(t,{project:e,binFolder:r,cwd:i,lifecycleScript:n}){let s=e.tryWorkspaceByLocator(t);if(s!==null)return jQe(s,{binFolder:r,cwd:i,lifecycleScript:n});let o=e.storedPackages.get(t.locatorHash);if(!o)throw new Error(`Package for ${nt(e.configuration,t)} not found in the project`);return await nn.openPromise(async a=>{let l=e.configuration,c=e.configuration.getLinkers(),u={project:e,report:new xe({stdout:new Pc.PassThrough,configuration:l})},g=c.find(I=>I.supportsPackage(o,u));if(!g)throw new Error(`The package ${nt(e.configuration,o)} isn't supported by any of the available linkers`);let f=await $f({project:e,locator:t,binFolder:r,lifecycleScript:n});await Promise.all(Array.from(await XI(t,{project:e}),([I,[,y]])=>io(r,rr(I),process.execPath,[y])));let h=await g.findPackageLocation(o,u),p=new yt(h,{baseFs:a}),m=await ze.find(Qe.dot,{baseFs:p});return typeof i=="undefined"&&(i=h),{manifest:m,binFolder:r,env:f,cwd:i}},{libzip:await gi()})}async function YW(t,e,r,{cwd:i,stdin:n,stdout:s,stderr:o}){return await VI(t.anchoredLocator,e,r,{cwd:i,project:t.project,stdin:n,stdout:s,stderr:o})}function PS(t,e){return t.manifest.scripts.has(e)}async function HW(t,e,{cwd:r,report:i}){let{configuration:n}=t.project,s=null;await N.mktempPromise(async o=>{let a=D.join(o,`${e}.log`),l=`# This file contains the result of Yarn calling the "${e}" lifecycle script inside a workspace ("${t.cwd}") -`,{stdout:c,stderr:u}=n.getSubprocessStreams(a,{report:i,prefix:nt(n,t.anchoredLocator),header:l});i.reportInfo(z.LIFECYCLE_SCRIPT,`Calling the "${e}" lifecycle script`);let g=await YW(t,e,[],{cwd:r,stdin:s,stdout:c,stderr:u});if(c.end(),u.end(),g!==0)throw N.detachTemp(o),new _e(z.LIFECYCLE_SCRIPT,`${(0,OW.default)(e)} script failed (exit code ${Je(n,g,Pe.NUMBER)}, logs can be found here: ${Je(n,a,Pe.PATH)}); run ${Je(n,`yarn ${e}`,Pe.CODE)} to investigate`)})}async function GQe(t,e,r){PS(t,e)&&await HW(t,e,r)}async function XI(t,{project:e}){let r=e.configuration,i=new Map,n=e.storedPackages.get(t.locatorHash);if(!n)throw new Error(`Package for ${nt(r,t)} not found in the project`);let s=new Pc.Writable,o=r.getLinkers(),a={project:e,report:new xe({configuration:r,stdout:s})},l=new Set([t.locatorHash]);for(let u of n.dependencies.values()){let g=e.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(`Assertion failed: The resolution (${Ut(r,u)}) should have been registered`);l.add(g)}let c=await Promise.all(Array.from(l,async u=>{let g=e.storedPackages.get(u);if(!g)throw new Error(`Assertion failed: The package (${u}) should have been registered`);if(g.bin.size===0)return sA.skip;let f=o.find(p=>p.supportsPackage(g,a));if(!f)return sA.skip;let h=null;try{h=await f.findPackageLocation(g,a)}catch(p){if(p.code==="LOCATOR_NOT_INSTALLED")return sA.skip;throw p}return{dependency:g,packageLocation:h}}));for(let u of c){if(u===sA.skip)continue;let{dependency:g,packageLocation:f}=u;for(let[h,p]of g.bin)i.set(h,[g,O.fromPortablePath(D.resolve(f,p))])}return i}async function UW(t){return await XI(t.anchoredLocator,{project:t.project})}async function jW(t,e,r,{cwd:i,project:n,stdin:s,stdout:o,stderr:a,nodeArgs:l=[],packageAccessibleBinaries:c}){c!=null||(c=await XI(t,{project:n}));let u=c.get(e);if(!u)throw new Error(`Binary not found (${e}) for ${nt(n.configuration,t)}`);return await N.mktempPromise(async g=>{let[,f]=u,h=await $f({project:n,locator:t,binFolder:g});await Promise.all(Array.from(c,([m,[,I]])=>io(h.BERRY_BIN_FOLDER,rr(m),process.execPath,[I])));let p;try{p=await Os(process.execPath,[...l,f,...r],{cwd:i,env:h,stdin:s,stdout:o,stderr:a})}finally{await N.removePromise(h.BERRY_BIN_FOLDER)}return p.code})}async function qQe(t,e,r,{cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a}){return await jW(t.anchoredLocator,e,r,{project:t.project,cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a})}var hr={};et(hr,{convertToZip:()=>lDe,extractArchiveTo:()=>uDe,makeArchiveFromDirectory:()=>ADe,safeTime:()=>zi});var W8=re(require("stream")),z8=re(k8());var H8=re(require("os")),j8=re(Y8()),G8=re(require("worker_threads")),Vx=class{constructor(e){this.source=e;this.pool=[];this.queue=new j8.default({concurrency:Math.max(1,(0,H8.cpus)().length)});let r=setTimeout(()=>{if(!(this.queue.size!==0||this.queue.pending!==0)){for(let i of this.pool)i.terminate();this.pool=[]}},1e3).unref();this.queue.on("idle",()=>{r.refresh()})}run(e){return this.queue.add(()=>{var i;let r=(i=this.pool.pop())!=null?i:new G8.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,"--unhandled-rejections=strict"]});return r.ref(),new Promise((n,s)=>{let o=a=>{a!==0&&s(new Error(`Worker exited with code ${a}`))};r.once("message",a=>{this.pool.push(r),r.unref(),r.off("error",s),r.off("exit",o),n(a)}),r.once("error",s),r.once("exit",o),r.postMessage(e)})})}};var V8=re(J8()),zi=456789e3;async function ADe(t,{baseFs:e=new Ft,prefixPath:r=Qe.root,compressionLevel:i,inMemory:n=!1}={}){let s=await gi(),o;if(n)o=new Qr(null,{libzip:s,level:i});else{let l=await N.mktempPromise(),c=D.join(l,"archive.zip");o=new Qr(c,{create:!0,libzip:s,level:i})}let a=D.resolve(Qe.root,r);return await o.copyPromise(a,t,{baseFs:e,stableTime:!0,stableSort:!0}),o}var X8;async function lDe(t,e){let r=await N.mktempPromise(),i=D.join(r,"archive.zip");return X8||(X8=new Vx((0,V8.getContent)())),await X8.run({tmpFile:i,tgz:t,opts:e}),new Qr(i,{libzip:await gi(),level:e.compressionLevel})}async function*cDe(t){let e=new z8.default.Parse,r=new W8.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on("entry",i=>{r.write(i)}),e.on("error",i=>{r.destroy(i)}),e.on("close",()=>{r.destroy()}),e.end(t);for await(let i of r){let n=i;yield n,n.resume()}}async function uDe(t,e,{stripComponents:r=0,prefixPath:i=Qe.dot}={}){var s,o;function n(a){if(a.path[0]==="/")return!0;let l=a.path.split(/\//g);return!!(l.some(c=>c==="..")||l.length<=r)}for await(let a of cDe(t)){if(n(a))continue;let l=D.normalize(O.toPortablePath(a.path)).replace(/\/$/,"").split(/\//g);if(l.length<=r)continue;let c=l.slice(r).join("/"),u=D.join(i,c),g=420;switch((a.type==="Directory"||(((s=a.mode)!=null?s:0)&73)!=0)&&(g|=73),a.type){case"Directory":e.mkdirpSync(D.dirname(u),{chmod:493,utimes:[zi,zi]}),e.mkdirSync(u),e.chmodSync(u,g),e.utimesSync(u,zi,zi);break;case"OldFile":case"File":e.mkdirpSync(D.dirname(u),{chmod:493,utimes:[zi,zi]}),e.writeFileSync(u,await af(a)),e.chmodSync(u,g),e.utimesSync(u,zi,zi);break;case"SymbolicLink":e.mkdirpSync(D.dirname(u),{chmod:493,utimes:[zi,zi]}),e.symlinkSync(a.linkpath,u),(o=e.lutimesSync)==null||o.call(e,u,zi,zi);break}}return e}var Un={};et(Un,{emitList:()=>gDe,emitTree:()=>rz,treeNodeToJson:()=>tz,treeNodeToTreeify:()=>ez});var $8=re(_8());function ez(t,{configuration:e}){let r={},i=(n,s)=>{let o=Array.isArray(n)?n.entries():Object.entries(n);for(let[a,{label:l,value:c,children:u}]of o){let g=[];typeof l!="undefined"&&g.push(Ym(e,l,pA.BOLD)),typeof c!="undefined"&&g.push(Je(e,c[0],c[1])),g.length===0&&g.push(Ym(e,`${a}`,pA.BOLD));let f=g.join(": "),h=s[f]={};typeof u!="undefined"&&i(u,h)}};if(typeof t.children=="undefined")throw new Error("The root node must only contain children");return i(t.children,r),r}function tz(t){let e=r=>{var s;if(typeof r.children=="undefined"){if(typeof r.value=="undefined")throw new Error("Assertion failed: Expected a value to be set if the children are missing");return rc(r.value[0],r.value[1])}let i=Array.isArray(r.children)?r.children.entries():Object.entries((s=r.children)!=null?s:{}),n=Array.isArray(r.children)?[]:{};for(let[o,a]of i)n[o]=e(a);return typeof r.value=="undefined"?n:{value:rc(r.value[0],r.value[1]),children:n}};return e(t)}function gDe(t,{configuration:e,stdout:r,json:i}){let n=t.map(s=>({value:s}));rz({children:n},{configuration:e,stdout:r,json:i})}function rz(t,{configuration:e,stdout:r,json:i,separators:n=0}){var o;if(i){let a=Array.isArray(t.children)?t.children.values():Object.values((o=t.children)!=null?o:{});for(let l of a)r.write(`${JSON.stringify(tz(l))} -`);return}let s=(0,$8.asTree)(ez(t,{configuration:e}),!1,!1);if(n>=1&&(s=s.replace(/^([├└]─)/gm,`\u2502 -$1`).replace(/^│\n/,"")),n>=2)for(let a=0;a<2;++a)s=s.replace(/^([│ ].{2}[├│ ].{2}[^\n]+\n)(([│ ]).{2}[├└].{2}[^\n]*\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3 \u2502 -$2`).replace(/^│\n/,"");if(n>=3)throw new Error("Only the first two levels are accepted by treeUtils.emitTree");r.write(s)}var _x=re(require("fs"));var fDe=8,ft=class{constructor(e,{configuration:r,immutable:i=r.get("enableImmutableCache"),check:n=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.configuration=r,this.cwd=e,this.immutable=i,this.check=n;let s=r.get("cacheKeyOverride");if(s!==null)this.cacheKey=`${s}`;else{let o=r.get("compressionLevel"),a=o!==qa?`c${o}`:"";this.cacheKey=[fDe,a].join("")}}static async find(e,{immutable:r,check:i}={}){let n=new ft(e.get("cacheFolder"),{configuration:e,immutable:r,check:i});return await n.setup(),n}get mirrorCwd(){if(!this.configuration.get("enableMirror"))return null;let e=`${this.configuration.get("globalFolder")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${$l(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,r){let n=hDe(r).slice(0,10);return`${$l(e)}-${n}.zip`}getLocatorPath(e,r){return this.mirrorCwd===null?D.resolve(this.cwd,this.getVersionFilename(e)):r===null||$x(r)!==this.cacheKey?null:D.resolve(this.cwd,this.getChecksumFilename(e,r))}getLocatorMirrorPath(e){let r=this.mirrorCwd;return r!==null?D.resolve(r,this.getVersionFilename(e)):null}async setup(){if(!this.configuration.get("enableGlobalCache"))if(this.immutable){if(!await N.existsPromise(this.cwd))throw new _e(z.IMMUTABLE_CACHE,"Cache path does not exist.")}else{await N.mkdirPromise(this.cwd,{recursive:!0});let e=D.resolve(this.cwd,".gitignore");await N.changeFilePromise(e,`/.gitignore -*.flock -`)}(this.mirrorCwd||!this.immutable)&&await N.mkdirPromise(this.mirrorCwd||this.cwd,{recursive:!0})}async fetchPackageFromCache(e,r,{onHit:i,onMiss:n,loader:s,skipIntegrityCheck:o}){let a=this.getLocatorMirrorPath(e),l=new Ft,c=async(L,T=null)=>{let v=!o||!r?`${this.cacheKey}/${await vm(L)}`:r;if(T!==null){let q=!o||!r?`${this.cacheKey}/${await vm(T)}`:r;if(v!==q)throw new _e(z.CACHE_CHECKSUM_MISMATCH,"The remote archive doesn't match the local checksum - has the local cache been corrupted?")}if(r!==null&&v!==r){let q;switch(this.check?q="throw":$x(r)!==$x(v)?q="update":q=this.configuration.get("checksumBehavior"),q){case"ignore":return r;case"update":return v;default:case"throw":throw new _e(z.CACHE_CHECKSUM_MISMATCH,"The remote archive doesn't match the expected checksum")}}return v},u=async L=>{if(!s)throw new Error(`Cache check required but no loader configured for ${nt(this.configuration,e)}`);let T=await s(),v=T.getRealPath();return T.saveAndClose(),await N.chmodPromise(v,420),await c(L,v)},g=async()=>{if(a===null||!await N.existsPromise(a)){let v=await s(),q=v.getRealPath();return v.saveAndClose(),{source:"loader",path:q}}let L=await N.mktempPromise(),T=D.join(L,this.getVersionFilename(e));return await N.copyFilePromise(a,T,_x.default.constants.COPYFILE_FICLONE),{source:"mirror",path:T}},f=async()=>{if(!s)throw new Error(`Cache entry required but missing for ${nt(this.configuration,e)}`);if(this.immutable)throw new _e(z.IMMUTABLE_CACHE,`Cache entry required but missing for ${nt(this.configuration,e)}`);let{path:L,source:T}=await g();await N.chmodPromise(L,420);let v=await c(L),q=this.getLocatorPath(e,v);if(!q)throw new Error("Assertion failed: Expected the cache path to be available");let oe=null;if(T!=="mirror"&&a!==null){let U=await N.mktempPromise();oe=D.join(U,this.getVersionFilename(e)),await N.copyFilePromise(L,oe,_x.default.constants.COPYFILE_FICLONE)}return await this.writeFileWithLock(q,async()=>await this.writeFileWithLock(T==="mirror"?null:a,async()=>(await N.movePromise(L,q),oe&&a&&await N.movePromise(oe,a),[q,v])))},h=async()=>{let T=(async()=>{let v=this.getLocatorPath(e,r),q=v!==null?await l.existsPromise(v):!1,oe=q?i:n;if(oe&&oe(),q){let U=null,A=v;return this.check?U=await u(A):U=await c(A),[A,U]}else return f()})();this.mutexes.set(e.locatorHash,T);try{return await T}finally{this.mutexes.delete(e.locatorHash)}};for(let L;L=this.mutexes.get(e.locatorHash);)await L;let[p,m]=await h();this.markedFiles.add(p);let I=null,y=await gi(),B=new bg(()=>zQ(()=>I=new Qr(p,{baseFs:l,libzip:y,readOnly:!0}),L=>`Failed to open the cache entry for ${nt(this.configuration,e)}: ${L}`),D);return[new Ja(p,{baseFs:B,pathUtils:D}),()=>{I!==null&&I.discardAndClose()},m]}async writeFileWithLock(e,r){return e===null?await r():await N.lockPromise(e,async()=>await r())}};function $x(t){let e=t.indexOf("/");return e!==-1?t.slice(0,e):null}function hDe(t){let e=t.indexOf("/");return e!==-1?t.slice(e+1):t}var lz=re(nz()),jE=re(Lg());var cz=re(GI()),nk=re(require("stream"));var sz={hooks:{reduceDependency:(t,e,r,i,{resolver:n,resolveOptions:s})=>{for(let{pattern:o,reference:a}of e.topLevelWorkspace.manifest.resolutions){if(o.from&&o.from.fullName!==dt(r)||o.from&&o.from.description&&o.from.description!==r.reference||o.descriptor.fullName!==dt(t)||o.descriptor.description&&o.descriptor.description!==t.range)continue;return n.bindDescriptor(zt(t,a),e.topLevelWorkspace.anchoredLocator,s)}return t},validateProject:async(t,e)=>{for(let r of t.workspaces){let i=Ef(t.configuration,r);await t.configuration.triggerHook(n=>n.validateWorkspace,r,{reportWarning:(n,s)=>e.reportWarning(n,`${i}: ${s}`),reportError:(n,s)=>e.reportError(n,`${i}: ${s}`)})}},validateWorkspace:async(t,e)=>{let{manifest:r}=t;r.resolutions.length&&t.cwd!==t.project.cwd&&r.errors.push(new Error("Resolutions field will be ignored"));for(let i of r.errors)e.reportWarning(z.INVALID_MANIFEST,i.message)}}};var tk=class{constructor(e){this.fetchers=e}supports(e,r){return!!this.tryFetcher(e,r)}getLocalPath(e,r){return this.getFetcher(e,r).getLocalPath(e,r)}async fetch(e,r){return await this.getFetcher(e,r).fetch(e,r)}tryFetcher(e,r){let i=this.fetchers.find(n=>n.supports(e,r));return i||null}getFetcher(e,r){let i=this.fetchers.find(n=>n.supports(e,r));if(!i)throw new _e(z.FETCHER_NOT_FOUND,`${nt(r.project.configuration,e)} isn't supported by any available fetcher`);return i}};var Xc=class{constructor(e){this.resolvers=e.filter(r=>r)}supportsDescriptor(e,r){return!!this.tryResolverByDescriptor(e,r)}supportsLocator(e,r){return!!this.tryResolverByLocator(e,r)}shouldPersistResolution(e,r){return this.getResolverByLocator(e,r).shouldPersistResolution(e,r)}bindDescriptor(e,r,i){return this.getResolverByDescriptor(e,i).bindDescriptor(e,r,i)}getResolutionDependencies(e,r){return this.getResolverByDescriptor(e,r).getResolutionDependencies(e,r)}async getCandidates(e,r,i){return await this.getResolverByDescriptor(e,i).getCandidates(e,r,i)}async getSatisfying(e,r,i){return this.getResolverByDescriptor(e,i).getSatisfying(e,r,i)}async resolve(e,r){return await this.getResolverByLocator(e,r).resolve(e,r)}tryResolverByDescriptor(e,r){let i=this.resolvers.find(n=>n.supportsDescriptor(e,r));return i||null}getResolverByDescriptor(e,r){let i=this.resolvers.find(n=>n.supportsDescriptor(e,r));if(!i)throw new Error(`${Ut(r.project.configuration,e)} isn't supported by any available resolver`);return i}tryResolverByLocator(e,r){let i=this.resolvers.find(n=>n.supportsLocator(e,r));return i||null}getResolverByLocator(e,r){let i=this.resolvers.find(n=>n.supportsLocator(e,r));if(!i)throw new Error(`${nt(r.project.configuration,e)} isn't supported by any available resolver`);return i}};var oz=re(cr());var Zc=/^(?!v)[a-z0-9._-]+$/i,rk=class{supportsDescriptor(e,r){return!!(Kn(e.range)||Zc.test(e.range))}supportsLocator(e,r){return!!(oz.default.valid(e.reference)||Zc.test(e.reference))}shouldPersistResolution(e,r){return r.resolver.shouldPersistResolution(this.forwardLocator(e,r),r)}bindDescriptor(e,r,i){return i.resolver.bindDescriptor(this.forwardDescriptor(e,i),r,i)}getResolutionDependencies(e,r){return r.resolver.getResolutionDependencies(this.forwardDescriptor(e,r),r)}async getCandidates(e,r,i){return await i.resolver.getCandidates(this.forwardDescriptor(e,i),r,i)}async getSatisfying(e,r,i){return await i.resolver.getSatisfying(this.forwardDescriptor(e,i),r,i)}async resolve(e,r){let i=await r.resolver.resolve(this.forwardLocator(e,r),r);return ff(i,e)}forwardDescriptor(e,r){return zt(e,`${r.project.configuration.get("defaultProtocol")}${e.range}`)}forwardLocator(e,r){return Ai(e,`${r.project.configuration.get("defaultProtocol")}${e.reference}`)}};var Ih=class{supports(e){return!!e.reference.startsWith("virtual:")}getLocalPath(e,r){let i=e.reference.indexOf("#");if(i===-1)throw new Error("Invalid virtual package reference");let n=e.reference.slice(i+1),s=Ai(e,n);return r.fetcher.getLocalPath(s,r)}async fetch(e,r){let i=e.reference.indexOf("#");if(i===-1)throw new Error("Invalid virtual package reference");let n=e.reference.slice(i+1),s=Ai(e,n),o=await r.fetcher.fetch(s,r);return await this.ensureVirtualLink(e,o,r)}getLocatorFilename(e){return $l(e)}async ensureVirtualLink(e,r,i){let n=r.packageFs.getRealPath(),s=i.project.configuration.get("virtualFolder"),o=this.getLocatorFilename(e),a=ir.makeVirtualPath(s,o,n),l=new Ja(a,{baseFs:r.packageFs,pathUtils:D});return V(P({},r),{packageFs:l})}};var _c=class{static isVirtualDescriptor(e){return!!e.range.startsWith(_c.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(_c.protocol)}supportsDescriptor(e,r){return _c.isVirtualDescriptor(e)}supportsLocator(e,r){return _c.isVirtualLocator(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,i){throw new Error('Assertion failed: calling "bindDescriptor" on a virtual descriptor is unsupported')}getResolutionDependencies(e,r){throw new Error('Assertion failed: calling "getResolutionDependencies" on a virtual descriptor is unsupported')}async getCandidates(e,r,i){throw new Error('Assertion failed: calling "getCandidates" on a virtual descriptor is unsupported')}async getSatisfying(e,r,i){throw new Error('Assertion failed: calling "getSatisfying" on a virtual descriptor is unsupported')}async resolve(e,r){throw new Error('Assertion failed: calling "resolve" on a virtual locator is unsupported')}},HE=_c;HE.protocol="virtual:";var Eh=class{supportsDescriptor(e,r){return!!(e.range.startsWith(Eh.protocol)||r.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,r){return!!e.reference.startsWith(Eh.protocol)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){return[i.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,r,i){return null}async resolve(e,r){let i=r.project.getWorkspaceByCwd(e.reference.slice(Eh.protocol.length));return V(P({},e),{version:i.manifest.version||"0.0.0",languageName:"unknown",linkType:ct.SOFT,dependencies:new Map([...i.manifest.dependencies,...i.manifest.devDependencies]),peerDependencies:new Map([...i.manifest.peerDependencies]),dependenciesMeta:i.manifest.dependenciesMeta,peerDependenciesMeta:i.manifest.peerDependenciesMeta,bin:i.manifest.bin})}},Ci=Eh;Ci.protocol="workspace:";var ik=class{supports(e){return!!e.reference.startsWith(Ci.protocol)}getLocalPath(e,r){return this.getWorkspace(e,r).cwd}async fetch(e,r){let i=this.getWorkspace(e,r).cwd;return{packageFs:new yt(i),prefixPath:Qe.dot,localPath:i}}getWorkspace(e,r){return r.project.getWorkspaceByCwd(e.reference.slice(Ci.protocol.length))}};var az=re(require("module"));function Az(){return new Set(az.default.builtinModules||Object.keys(process.binding("natives")))}var dDe=new Set(["binFolder","version","flags","profile","gpg","ignoreNode","wrapOutput","home","confDir"]),GE="yarn_",sk=".yarnrc.yml",ok="yarn.lock",CDe="********",ge;(function(u){u.ANY="ANY",u.BOOLEAN="BOOLEAN",u.ABSOLUTE_PATH="ABSOLUTE_PATH",u.LOCATOR="LOCATOR",u.LOCATOR_LOOSE="LOCATOR_LOOSE",u.NUMBER="NUMBER",u.STRING="STRING",u.SECRET="SECRET",u.SHAPE="SHAPE",u.MAP="MAP"})(ge||(ge={}));var ds=Pe,ak={lastUpdateCheck:{description:"Last timestamp we checked whether new Yarn versions were available",type:ge.STRING,default:null},yarnPath:{description:"Path to the local executable that must be used over the global one",type:ge.ABSOLUTE_PATH,default:null},ignorePath:{description:"If true, the local executable will be ignored when using the global one",type:ge.BOOLEAN,default:!1},ignoreCwd:{description:"If true, the `--cwd` flag will be ignored",type:ge.BOOLEAN,default:!1},cacheKeyOverride:{description:"A global cache key override; used only for test purposes",type:ge.STRING,default:null},globalFolder:{description:"Folder where are stored the system-wide settings",type:ge.ABSOLUTE_PATH,default:jw()},cacheFolder:{description:"Folder where the cache files must be written",type:ge.ABSOLUTE_PATH,default:"./.yarn/cache"},compressionLevel:{description:"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)",type:ge.NUMBER,values:["mixed",0,1,2,3,4,5,6,7,8,9],default:qa},virtualFolder:{description:"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)",type:ge.ABSOLUTE_PATH,default:"./.yarn/__virtual__"},lockfileFilename:{description:"Name of the files where the Yarn dependency tree entries must be stored",type:ge.STRING,default:ok},installStatePath:{description:"Path of the file where the install state will be persisted",type:ge.ABSOLUTE_PATH,default:"./.yarn/install-state.gz"},immutablePatterns:{description:"Array of glob patterns; files matching them won't be allowed to change during immutable installs",type:ge.STRING,default:[],isArray:!0},rcFilename:{description:"Name of the files where the configuration can be found",type:ge.STRING,default:qE()},enableGlobalCache:{description:"If true, the system-wide cache folder will be used regardless of `cache-folder`",type:ge.BOOLEAN,default:!1},enableColors:{description:"If true, the CLI is allowed to use colors in its output",type:ge.BOOLEAN,default:Km,defaultText:""},enableHyperlinks:{description:"If true, the CLI is allowed to use hyperlinks in its output",type:ge.BOOLEAN,default:gb,defaultText:""},enableInlineBuilds:{description:"If true, the CLI will print the build output on the command line",type:ge.BOOLEAN,default:jE.isCI,defaultText:""},enableMessageNames:{description:"If true, the CLI will prefix most messages with codes suitable for search engines",type:ge.BOOLEAN,default:!0},enableProgressBars:{description:"If true, the CLI is allowed to show a progress bar for long-running events",type:ge.BOOLEAN,default:!jE.isCI&&process.stdout.isTTY&&process.stdout.columns>22,defaultText:""},enableTimers:{description:"If true, the CLI is allowed to print the time spent executing commands",type:ge.BOOLEAN,default:!0},preferAggregateCacheInfo:{description:"If true, the CLI will only print a one-line report of any cache changes",type:ge.BOOLEAN,default:jE.isCI},preferInteractive:{description:"If true, the CLI will automatically use the interactive mode when called from a TTY",type:ge.BOOLEAN,default:!1},preferTruncatedLines:{description:"If true, the CLI will truncate lines that would go beyond the size of the terminal",type:ge.BOOLEAN,default:!1},progressBarStyle:{description:"Which style of progress bar should be used (only when progress bars are enabled)",type:ge.STRING,default:void 0,defaultText:""},defaultLanguageName:{description:"Default language mode that should be used when a package doesn't offer any insight",type:ge.STRING,default:"node"},defaultProtocol:{description:"Default resolution protocol used when resolving pure semver and tag ranges",type:ge.STRING,default:"npm:"},enableTransparentWorkspaces:{description:"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol",type:ge.BOOLEAN,default:!0},enableMirror:{description:"If true, the downloaded packages will be retrieved and stored in both the local and global folders",type:ge.BOOLEAN,default:!0},enableNetwork:{description:"If false, the package manager will refuse to use the network if required to",type:ge.BOOLEAN,default:!0},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:ge.STRING,default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:ge.STRING,default:null},unsafeHttpWhitelist:{description:"List of the hostnames for which http queries are allowed (glob patterns are supported)",type:ge.STRING,default:[],isArray:!0},httpTimeout:{description:"Timeout of each http request in milliseconds",type:ge.NUMBER,default:6e4},httpRetry:{description:"Retry times on http failure",type:ge.NUMBER,default:3},networkConcurrency:{description:"Maximal number of concurrent requests",type:ge.NUMBER,default:Infinity},networkSettings:{description:"Network settings per hostname (glob patterns are supported)",type:ge.MAP,valueDefinition:{description:"",type:ge.SHAPE,properties:{caFilePath:{description:"Path to file containing one or multiple Certificate Authority signing certificates",type:ge.ABSOLUTE_PATH,default:null},enableNetwork:{description:"If false, the package manager will refuse to use the network if required to",type:ge.BOOLEAN,default:null},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:ge.STRING,default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:ge.STRING,default:null}}}},caFilePath:{description:"A path to a file containing one or multiple Certificate Authority signing certificates",type:ge.ABSOLUTE_PATH,default:null},enableStrictSsl:{description:"If false, SSL certificate errors will be ignored",type:ge.BOOLEAN,default:!0},logFilters:{description:"Overrides for log levels",type:ge.SHAPE,isArray:!0,concatenateValues:!0,properties:{code:{description:"Code of the messages covered by this override",type:ge.STRING,default:void 0},text:{description:"Code of the texts covered by this override",type:ge.STRING,default:void 0},pattern:{description:"Code of the patterns covered by this override",type:ge.STRING,default:void 0},level:{description:"Log level override, set to null to remove override",type:ge.STRING,values:Object.values(Nn),isNullable:!0,default:void 0}}},enableTelemetry:{description:"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry",type:ge.BOOLEAN,default:!0},telemetryInterval:{description:"Minimal amount of time between two telemetry uploads, in days",type:ge.NUMBER,default:7},telemetryUserId:{description:"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.",type:ge.STRING,default:null},enableScripts:{description:"If true, packages are allowed to have install scripts by default",type:ge.BOOLEAN,default:!0},enableImmutableCache:{description:"If true, the cache is reputed immutable and actions that would modify it will throw",type:ge.BOOLEAN,default:!1},checksumBehavior:{description:"Enumeration defining what to do when a checksum doesn't match expectations",type:ge.STRING,default:"throw"},packageExtensions:{description:"Map of package corrections to apply on the dependency tree",type:ge.MAP,valueDefinition:{description:"The extension that will be applied to any package whose version matches the specified range",type:ge.SHAPE,properties:{dependencies:{description:"The set of dependencies that must be made available to the current package in order for it to work properly",type:ge.MAP,valueDefinition:{description:"A range",type:ge.STRING}},peerDependencies:{description:"Inherited dependencies - the consumer of the package will be tasked to provide them",type:ge.MAP,valueDefinition:{description:"A semver range",type:ge.STRING}},peerDependenciesMeta:{description:"Extra information related to the dependencies listed in the peerDependencies field",type:ge.MAP,valueDefinition:{description:"The peerDependency meta",type:ge.SHAPE,properties:{optional:{description:"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error",type:ge.BOOLEAN,default:!1}}}}}}}};function lk(t,e,r,i,n){if(i.isArray||i.type===ge.ANY&&Array.isArray(r))return Array.isArray(r)?r.map((s,o)=>Ak(t,`${e}[${o}]`,s,i,n)):String(r).split(/,/).map(s=>Ak(t,e,s,i,n));if(Array.isArray(r))throw new Error(`Non-array configuration settings "${e}" cannot be an array`);return Ak(t,e,r,i,n)}function Ak(t,e,r,i,n){var a;switch(i.type){case ge.ANY:return r;case ge.SHAPE:return mDe(t,e,r,i,n);case ge.MAP:return IDe(t,e,r,i,n)}if(r===null&&!i.isNullable&&i.default!==null)throw new Error(`Non-nullable configuration settings "${e}" cannot be set to null`);if((a=i.values)==null?void 0:a.includes(r))return r;let o=(()=>{if(i.type===ge.BOOLEAN&&typeof r!="string")return lf(r);if(typeof r!="string")throw new Error(`Expected value (${r}) to be a string`);let l=VQ(r,{env:process.env});switch(i.type){case ge.ABSOLUTE_PATH:return D.resolve(n,O.toPortablePath(l));case ge.LOCATOR_LOOSE:return hA(l,!1);case ge.NUMBER:return parseInt(l);case ge.LOCATOR:return hA(l);case ge.BOOLEAN:return lf(l);default:return l}})();if(i.values&&!i.values.includes(o))throw new Error(`Invalid value, expected one of ${i.values.join(", ")}`);return o}function mDe(t,e,r,i,n){if(typeof r!="object"||Array.isArray(r))throw new me(`Object configuration settings "${e}" must be an object`);let s=ck(t,i,{ignoreArrays:!0});if(r===null)return s;for(let[o,a]of Object.entries(r)){let l=`${e}.${o}`;if(!i.properties[o])throw new me(`Unrecognized configuration settings found: ${e}.${o} - run "yarn config -v" to see the list of settings supported in Yarn`);s.set(o,lk(t,l,a,i.properties[o],n))}return s}function IDe(t,e,r,i,n){let s=new Map;if(typeof r!="object"||Array.isArray(r))throw new me(`Map configuration settings "${e}" must be an object`);if(r===null)return s;for(let[o,a]of Object.entries(r)){let l=i.normalizeKeys?i.normalizeKeys(o):o,c=`${e}['${l}']`,u=i.valueDefinition;s.set(l,lk(t,c,a,u,n))}return s}function ck(t,e,{ignoreArrays:r=!1}={}){switch(e.type){case ge.SHAPE:{if(e.isArray&&!r)return[];let i=new Map;for(let[n,s]of Object.entries(e.properties))i.set(n,ck(t,s));return i}break;case ge.MAP:return e.isArray&&!r?[]:new Map;case ge.ABSOLUTE_PATH:return e.default===null?null:t.projectCwd===null?D.isAbsolute(e.default)?D.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(i=>D.resolve(t.projectCwd,i)):D.resolve(t.projectCwd,e.default);default:return e.default}}function JE(t,e,r){if(e.type===ge.SECRET&&typeof t=="string"&&r.hideSecrets)return CDe;if(e.type===ge.ABSOLUTE_PATH&&typeof t=="string"&&r.getNativePaths)return O.fromPortablePath(t);if(e.isArray&&Array.isArray(t)){let i=[];for(let n of t)i.push(JE(n,e,r));return i}if(e.type===ge.MAP&&t instanceof Map){let i=new Map;for(let[n,s]of t.entries())i.set(n,JE(s,e.valueDefinition,r));return i}if(e.type===ge.SHAPE&&t instanceof Map){let i=new Map;for(let[n,s]of t.entries()){let o=e.properties[n];i.set(n,JE(s,o,r))}return i}return t}function EDe(){let t={};for(let[e,r]of Object.entries(process.env))e=e.toLowerCase(),!!e.startsWith(GE)&&(e=(0,lz.default)(e.slice(GE.length)),t[e]=r);return t}function qE(){let t=`${GE}rc_filename`;for(let[e,r]of Object.entries(process.env))if(e.toLowerCase()===t&&typeof r=="string")return r;return sk}var Ca;(function(i){i[i.LOCKFILE=0]="LOCKFILE",i[i.MANIFEST=1]="MANIFEST",i[i.NONE=2]="NONE"})(Ca||(Ca={}));var co=class{constructor(e){this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.packageExtensions=new Map;this.limits=new Map;this.startingCwd=e}static create(e,r,i){let n=new co(e);typeof r!="undefined"&&!(r instanceof Map)&&(n.projectCwd=r),n.importSettings(ak);let s=typeof i!="undefined"?i:r instanceof Map?r:new Map;for(let[o,a]of s)n.activatePlugin(o,a);return n}static async find(e,r,{lookup:i=0,strict:n=!0,usePath:s=!1,useRc:o=!0}={}){let a=EDe();delete a.rcFilename;let l=await co.findRcFiles(e),c=await co.findHomeRcFile();if(c){let y=l.find(B=>B.path===c.path);y?y.strict=!1:l.push(V(P({},c),{strict:!1}))}let u=({ignoreCwd:y,yarnPath:B,ignorePath:x,lockfileFilename:F})=>({ignoreCwd:y,yarnPath:B,ignorePath:x,lockfileFilename:F}),g=T=>{var v=T,{ignoreCwd:y,yarnPath:B,ignorePath:x,lockfileFilename:F}=v,L=Rr(v,["ignoreCwd","yarnPath","ignorePath","lockfileFilename"]);return L},f=new co(e);f.importSettings(u(ak)),f.useWithSource("",u(a),e,{strict:!1});for(let{path:y,cwd:B,data:x}of l)f.useWithSource(y,u(x),B,{strict:!1});if(s){let y=f.get("yarnPath"),B=f.get("ignorePath");if(y!==null&&!B)return f}let h=f.get("lockfileFilename"),p;switch(i){case 0:p=await co.findProjectCwd(e,h);break;case 1:p=await co.findProjectCwd(e,null);break;case 2:N.existsSync(D.join(e,"package.json"))?p=D.resolve(e):p=null;break}f.startingCwd=e,f.projectCwd=p,f.importSettings(g(ak));let m=new Map([["@@core",sz]]),I=y=>"default"in y?y.default:y;if(r!==null){for(let F of r.plugins.keys())m.set(F,I(r.modules.get(F)));let y=new Map;for(let F of Az())y.set(F,()=>ql(F));for(let[F,L]of r.modules)y.set(F,()=>L);let B=new Set,x=async(F,L)=>{let{factory:T,name:v}=ql(F);if(B.has(v))return;let q=new Map(y),oe=A=>{if(q.has(A))return q.get(A)();throw new me(`This plugin cannot access the package referenced via ${A} which is neither a builtin, nor an exposed entry`)},U=await Gl(async()=>I(await T(oe)),A=>`${A} (when initializing ${v}, defined in ${L})`);y.set(v,()=>U),B.add(v),m.set(v,U)};if(a.plugins)for(let F of a.plugins.split(";")){let L=D.resolve(e,O.toPortablePath(F));await x(L,"")}for(let{path:F,cwd:L,data:T}of l)if(!!o&&!!Array.isArray(T.plugins))for(let v of T.plugins){let q=typeof v!="string"?v.path:v,oe=D.resolve(L,O.toPortablePath(q));await x(oe,F)}}for(let[y,B]of m)f.activatePlugin(y,B);f.useWithSource("",g(a),e,{strict:n});for(let{path:y,cwd:B,data:x,strict:F}of l)f.useWithSource(y,g(x),B,{strict:F!=null?F:n});return f.get("enableGlobalCache")&&(f.values.set("cacheFolder",`${f.get("globalFolder")}/cache`),f.sources.set("cacheFolder","")),await f.refreshPackageExtensions(),f}static async findRcFiles(e){let r=qE(),i=[],n=e,s=null;for(;n!==s;){s=n;let o=D.join(s,r);if(N.existsSync(o)){let a=await N.readFilePromise(o,"utf8"),l;try{l=Kr(a)}catch(c){let u="";throw a.match(/^\s+(?!-)[^:]+\s+\S+/m)&&(u=" (in particular, make sure you list the colons after each key name)"),new me(`Parse error when loading ${o}; please check it's proper Yaml${u}`)}i.push({path:o,cwd:s,data:l})}n=D.dirname(s)}return i}static async findHomeRcFile(){let e=qE(),r=Pg(),i=D.join(r,e);if(N.existsSync(i)){let n=await N.readFilePromise(i,"utf8"),s=Kr(n);return{path:i,cwd:r,data:s}}return null}static async findProjectCwd(e,r){let i=null,n=e,s=null;for(;n!==s;){if(s=n,N.existsSync(D.join(s,"package.json"))&&(i=s),r!==null){if(N.existsSync(D.join(s,r))){i=s;break}}else if(i!==null)break;n=D.dirname(s)}return i}static async updateConfiguration(e,r){let i=qE(),n=D.join(e,i),s=N.existsSync(n)?Kr(await N.readFilePromise(n,"utf8")):{},o=!1,a;if(typeof r=="function"){try{a=r(s)}catch{a=r({})}if(a===s)return}else{a=s;for(let l of Object.keys(r)){let c=s[l],u=r[l],g;if(typeof u=="function")try{g=u(c)}catch{g=u(void 0)}else g=u;c!==g&&(a[l]=g,o=!0)}if(!o)return}await N.changeFilePromise(n,ro(a),{automaticNewlines:!0})}static async updateHomeConfiguration(e){let r=Pg();return await co.updateConfiguration(r,e)}activatePlugin(e,r){this.plugins.set(e,r),typeof r.configuration!="undefined"&&this.importSettings(r.configuration)}importSettings(e){for(let[r,i]of Object.entries(e))if(i!=null){if(this.settings.has(r))throw new Error(`Cannot redefine settings "${r}"`);this.settings.set(r,i),this.values.set(r,ck(this,i))}}useWithSource(e,r,i,n){try{this.use(e,r,i,n)}catch(s){throw s.message+=` (in ${Je(this,e,Pe.PATH)})`,s}}use(e,r,i,{strict:n=!0,overwrite:s=!1}={}){for(let o of Object.keys(r)){if(typeof r[o]=="undefined"||o==="plugins"||e===""&&dDe.has(o))continue;if(o==="rcFilename")throw new me(`The rcFilename settings can only be set via ${`${GE}RC_FILENAME`.toUpperCase()}, not via a rc file`);let l=this.settings.get(o);if(!l){if(n)throw new me(`Unrecognized or legacy configuration settings found: ${o} - run "yarn config -v" to see the list of settings supported in Yarn`);this.invalid.set(o,e);continue}if(this.sources.has(o)&&!(s||l.type===ge.MAP||l.isArray&&l.concatenateValues))continue;let c;try{c=lk(this,o,r[o],l,i)}catch(u){throw u.message+=` in ${Je(this,e,Pe.PATH)}`,u}if(l.type===ge.MAP){let u=this.values.get(o);this.values.set(o,new Map(s?[...u,...c]:[...c,...u])),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else if(l.isArray&&l.concatenateValues){let u=this.values.get(o);this.values.set(o,s?[...u,...c]:[...c,...u]),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else this.values.set(o,c),this.sources.set(o,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key "${e}"`);return this.values.get(e)}getSpecial(e,{hideSecrets:r=!1,getNativePaths:i=!1}){let n=this.get(e),s=this.settings.get(e);if(typeof s=="undefined")throw new me(`Couldn't find a configuration settings named "${e}"`);return JE(n,s,{hideSecrets:r,getNativePaths:i})}getSubprocessStreams(e,{header:r,prefix:i,report:n}){let s,o,a=N.createWriteStream(e);if(this.get("enableInlineBuilds")){let l=n.createStreamReporter(`${i} ${Je(this,"STDOUT","green")}`),c=n.createStreamReporter(`${i} ${Je(this,"STDERR","red")}`);s=new nk.PassThrough,s.pipe(l),s.pipe(a),o=new nk.PassThrough,o.pipe(c),o.pipe(a)}else s=a,o=a,typeof r!="undefined"&&s.write(`${r} -`);return{stdout:s,stderr:o}}makeResolver(){let e=[];for(let r of this.plugins.values())for(let i of r.resolvers||[])e.push(new i);return new Xc([new HE,new Ci,new rk,...e])}makeFetcher(){let e=[];for(let r of this.plugins.values())for(let i of r.fetchers||[])e.push(new i);return new tk([new Ih,new ik,...e])}getLinkers(){let e=[];for(let r of this.plugins.values())for(let i of r.linkers||[])e.push(new i);return e}async refreshPackageExtensions(){this.packageExtensions=new Map;let e=this.packageExtensions,r=(i,n,{userProvided:s=!1}={})=>{if(!Kn(i.range))throw new Error("Only semver ranges are allowed as keys for the lockfileExtensions setting");let o=new ze;o.load(n,{yamlCompatibilityMode:!0});let a=Hl(e,i.identHash),l=[];a.push([i.range,l]);let c={status:qr.Inactive,userProvided:s,parentDescriptor:i};for(let u of o.dependencies.values())l.push(V(P({},c),{type:Dr.Dependency,descriptor:u}));for(let u of o.peerDependencies.values())l.push(V(P({},c),{type:Dr.PeerDependency,descriptor:u}));for(let[u,g]of o.peerDependenciesMeta)for(let[f,h]of Object.entries(g))l.push(V(P({},c),{type:Dr.PeerDependencyMeta,selector:u,key:f,value:h}))};await this.triggerHook(i=>i.registerPackageExtensions,this,r);for(let[i,n]of this.get("packageExtensions"))r(Jo(i,!0),nm(n),{userProvided:!0})}normalizePackage(e){let r=hf(e);if(this.packageExtensions==null)throw new Error("refreshPackageExtensions has to be called before normalizing packages");let i=this.packageExtensions.get(e.identHash);if(typeof i!="undefined"){let s=e.version;if(s!==null){for(let[o,a]of i)if(!!_f(s,o))for(let l of a)switch(l.status===qr.Inactive&&(l.status=qr.Redundant),l.type){case Dr.Dependency:typeof r.dependencies.get(l.descriptor.identHash)=="undefined"&&(l.status=qr.Active,r.dependencies.set(l.descriptor.identHash,l.descriptor));break;case Dr.PeerDependency:typeof r.peerDependencies.get(l.descriptor.identHash)=="undefined"&&(l.status=qr.Active,r.peerDependencies.set(l.descriptor.identHash,l.descriptor));break;case Dr.PeerDependencyMeta:{let c=r.peerDependenciesMeta.get(l.selector);(typeof c=="undefined"||!Object.prototype.hasOwnProperty.call(c,l.key)||c[l.key]!==l.value)&&(l.status=qr.Active,Hs(r.peerDependenciesMeta,l.selector,()=>({}))[l.key]=l.value)}break;default:JQ(l);break}}}let n=s=>s.scope?`${s.scope}__${s.name}`:`${s.name}`;for(let s of r.peerDependencies.values()){if(s.scope==="types")continue;let o=n(s),a=Go("types",o),l=dt(a);r.peerDependencies.has(a.identHash)||r.peerDependenciesMeta.has(l)||r.peerDependenciesMeta.set(l,{optional:!0})}for(let s of r.peerDependenciesMeta.keys()){let o=Si(s);r.peerDependencies.has(o.identHash)||r.peerDependencies.set(o.identHash,zt(o,"*"))}return r.dependencies=new Map(bi(r.dependencies,([,s])=>xi(s))),r.peerDependencies=new Map(bi(r.peerDependencies,([,s])=>xi(s))),r}getLimit(e){return Hs(this.limits,e,()=>(0,cz.default)(this.get(e)))}async triggerHook(e,...r){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);!s||await s(...r)}}async triggerMultipleHooks(e,r){for(let i of r)await this.triggerHook(e,...i)}async reduceHook(e,r,...i){let n=r;for(let s of this.plugins.values()){let o=s.hooks;if(!o)continue;let a=e(o);!a||(n=await a(n,...i))}return n}async firstHook(e,...r){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);if(!s)continue;let o=await s(...r);if(typeof o!="undefined")return o}return null}},ce=co;ce.telemetry=null;var Vi;(function(r){r[r.SCRIPT=0]="SCRIPT",r[r.SHELLCODE=1]="SHELLCODE"})(Vi||(Vi={}));var uo=class extends ci{constructor({configuration:e,stdout:r,suggestInstall:i=!0}){super();this.errorCount=0;Bf(this,{configuration:e}),this.configuration=e,this.stdout=r,this.suggestInstall=i}static async start(e,r){let i=new this(e);try{await r(i)}catch(n){i.reportExceptionOnce(n)}finally{await i.finalize()}return i}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(e){}reportCacheMiss(e){}startTimerSync(e,r,i){return(typeof r=="function"?r:i)()}async startTimerPromise(e,r,i){return await(typeof r=="function"?r:i)()}async startCacheReport(e){return await e()}reportSeparator(){}reportInfo(e,r){}reportWarning(e,r){}reportError(e,r){this.errorCount+=1,this.stdout.write(`${Je(this.configuration,"\u27A4","redBright")} ${this.formatNameWithHyperlink(e)}: ${r} -`)}reportProgress(e){let r=Promise.resolve().then(async()=>{for await(let{}of e);}),i=()=>{};return V(P({},r),{stop:i})}reportJson(e){}async finalize(){this.errorCount>0&&(this.stdout.write(` -`),this.stdout.write(`${Je(this.configuration,"\u27A4","redBright")} Errors happened when preparing the environment required to run this command. -`),this.suggestInstall&&this.stdout.write(`${Je(this.configuration,"\u27A4","redBright")} This might be caused by packages being missing from the lockfile, in which case running "yarn install" might help. -`))}formatNameWithHyperlink(e){return kS(e,{configuration:this.configuration,json:!1})}};var uy=re(require("crypto")),r9=re(Wz()),gy=re(e9()),i9=re(GI()),n9=re(cr()),Ok=re(require("util")),Tk=re(require("v8")),Kk=re(require("zlib"));var ive=[[/^(git(?:\+(?:https|ssh))?:\/\/.*(?:\.git)?)#(.*)$/,(t,e,r,i)=>`${r}#commit=${i}`],[/^https:\/\/((?:[^/]+?)@)?codeload\.github\.com\/([^/]+\/[^/]+)\/tar\.gz\/([0-9a-f]+)$/,(t,e,r="",i,n)=>`https://${r}github.com/${i}.git#commit=${n}`],[/^https:\/\/((?:[^/]+?)@)?github\.com\/([^/]+\/[^/]+?)(?:\.git)?#([0-9a-f]+)$/,(t,e,r="",i,n)=>`https://${r}github.com/${i}.git#commit=${n}`],[/^https?:\/\/[^/]+\/(?:[^/]+\/)*(?:@.+(?:\/|(?:%2f)))?([^/]+)\/(?:-|download)\/\1-[^/]+\.tgz(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.pkg\.github\.com\/download\/(?:@[^/]+)\/(?:[^/]+)\/(?:[^/]+)\/(?:[0-9a-f]+)$/,t=>`npm:${t}`],[/^https:\/\/npm\.fontawesome\.com\/(?:@[^/]+)\/([^/]+)\/-\/([^/]+)\/\1-\2.tgz(?:#|$)/,t=>`npm:${t}`],[/^https?:\/\/(?:[^\\.]+)\.jfrog\.io\/.*\/(@[^/]+)\/([^/]+)\/-\/\1\/\2-(?:[.\d\w-]+)\.tgz(?:#|$)/,(t,e)=>Om({protocol:"npm:",source:null,selector:t,params:{__archiveUrl:e}})],[/^[^/]+\.tgz#[0-9a-f]+$/,t=>`npm:${t}`]],Nk=class{constructor(){this.resolutions=null}async setup(e,{report:r}){let i=D.join(e.cwd,e.configuration.get("lockfileFilename"));if(!N.existsSync(i))return;let n=await N.readFilePromise(i,"utf8"),s=Kr(n);if(Object.prototype.hasOwnProperty.call(s,"__metadata"))return;let o=this.resolutions=new Map;for(let a of Object.keys(s)){let l=mf(a);if(!l){r.reportWarning(z.YARN_IMPORT_FAILED,`Failed to parse the string "${a}" into a proper descriptor`);continue}Kn(l.range)&&(l=zt(l,`npm:${l.range}`));let{version:c,resolved:u}=s[a];if(!u)continue;let g;for(let[h,p]of ive){let m=u.match(h);if(m){g=p(c,...m);break}}if(!g){r.reportWarning(z.YARN_IMPORT_FAILED,`${Ut(e.configuration,l)}: Only some patterns can be imported from legacy lockfiles (not "${u}")`);continue}let f=l;try{let h=_l(l.range),p=mf(h.selector,!0);p&&(f=p)}catch{}o.set(l.descriptorHash,Ai(f,g))}}supportsDescriptor(e,r){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){if(!this.resolutions)throw new Error("Assertion failed: The resolution store should have been setup");let n=this.resolutions.get(e.descriptorHash);if(!n)throw new Error("Assertion failed: The resolution should have been registered");return[n]}async getSatisfying(e,r,i){return null}async resolve(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}};var cy=class{supportsDescriptor(e,r){return!!(r.project.storedResolutions.get(e.descriptorHash)||r.project.originalPackages.has(Nm(e).locatorHash))}supportsLocator(e,r){return!!r.project.originalPackages.has(e.locatorHash)}shouldPersistResolution(e,r){throw new Error("The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes")}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=i.project.originalPackages.get(Nm(e).locatorHash);if(n)return[n];let s=i.project.storedResolutions.get(e.descriptorHash);if(!s)throw new Error("Expected the resolution to have been successful - resolution not found");if(n=i.project.originalPackages.get(s),!n)throw new Error("Expected the resolution to have been successful - package not found");return[n]}async getSatisfying(e,r,i){return null}async resolve(e,r){let i=r.project.originalPackages.get(e.locatorHash);if(!i)throw new Error("The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache");return i}};var Mk=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return this.resolver.supportsDescriptor(e,r)}supportsLocator(e,r){return this.resolver.supportsLocator(e,r)}shouldPersistResolution(e,r){return this.resolver.shouldPersistResolution(e,r)}bindDescriptor(e,r,i){return this.resolver.bindDescriptor(e,r,i)}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,i){throw new _e(z.MISSING_LOCKFILE_ENTRY,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async getSatisfying(e,r,i){throw new _e(z.MISSING_LOCKFILE_ENTRY,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async resolve(e,r){throw new _e(z.MISSING_LOCKFILE_ENTRY,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}};var Br=class extends ci{reportCacheHit(e){}reportCacheMiss(e){}startTimerSync(e,r,i){return(typeof r=="function"?r:i)()}async startTimerPromise(e,r,i){return await(typeof r=="function"?r:i)()}async startCacheReport(e){return await e()}reportSeparator(){}reportInfo(e,r){}reportWarning(e,r){}reportError(e,r){}reportProgress(e){let r=Promise.resolve().then(async()=>{for await(let{}of e);}),i=()=>{};return V(P({},r),{stop:i})}reportJson(e){}async finalize(){}};var t9=re(tb());var Nh=class{constructor(e,{project:r}){this.workspacesCwds=new Set;this.dependencies=new Map;this.project=r,this.cwd=e}async setup(){this.manifest=N.existsSync(D.join(this.cwd,ze.fileName))?await ze.find(this.cwd):new ze,this.relativeCwd=D.relative(this.project.cwd,this.cwd)||Qe.dot;let e=this.manifest.name?this.manifest.name:Go(null,`${this.computeCandidateName()}-${ai(this.relativeCwd).substr(0,6)}`),r=this.manifest.version?this.manifest.version:"0.0.0";this.locator=Ai(e,r),this.anchoredDescriptor=zt(this.locator,`${Ci.protocol}${this.relativeCwd}`),this.anchoredLocator=Ai(this.locator,`${Ci.protocol}${this.relativeCwd}`);let i=this.manifest.workspaceDefinitions.map(({pattern:s})=>s),n=await(0,t9.default)(i,{cwd:O.fromPortablePath(this.cwd),expandDirectories:!1,onlyDirectories:!0,onlyFiles:!1,ignore:["**/node_modules","**/.git","**/.yarn"]});n.sort();for(let s of n){let o=D.resolve(this.cwd,O.toPortablePath(s));N.existsSync(D.join(o,"package.json"))&&this.workspacesCwds.add(o)}}accepts(e){var o;let r=e.indexOf(":"),i=r!==-1?e.slice(0,r+1):null,n=r!==-1?e.slice(r+1):e;if(i===Ci.protocol&&D.normalize(n)===this.relativeCwd||i===Ci.protocol&&n==="*")return!0;let s=Kn(n);return s?i===Ci.protocol?s.test((o=this.manifest.version)!=null?o:"0.0.0"):this.project.configuration.get("enableTransparentWorkspaces")&&this.manifest.version!==null?s.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?"root-workspace":`${D.basename(this.cwd)}`||"unnamed-workspace"}getRecursiveWorkspaceDependencies({dependencies:e=ze.hardDependencies}={}){let r=new Set,i=n=>{for(let s of e)for(let o of n.manifest[s].values()){let a=this.project.tryWorkspaceByDescriptor(o);a===null||r.has(a)||(r.add(a),i(a))}};return i(this),r}getRecursiveWorkspaceChildren(){let e=[];for(let r of this.workspacesCwds){let i=this.project.workspacesByCwd.get(r);i&&e.push(i,...i.getRecursiveWorkspaceChildren())}return e}async persistManifest(){let e={};this.manifest.exportTo(e);let r=D.join(this.cwd,ze.fileName),i=`${JSON.stringify(e,null,this.manifest.indent)} -`;await N.changeFilePromise(r,i,{automaticNewlines:!0}),this.manifest.raw=e}};var Uk=4,nve=1,sve=/ *, */g,s9=/\/$/,ove=32,ave=(0,Ok.promisify)(Kk.default.gzip),Ave=(0,Ok.promisify)(Kk.default.gunzip),kr;(function(r){r.UpdateLockfile="update-lockfile",r.SkipBuild="skip-build"})(kr||(kr={}));var Yk={restoreInstallersCustomData:["installersCustomData"],restoreResolutions:["accessibleLocators","optionalBuilds","storedDescriptors","storedResolutions","storedPackages","lockFileChecksum"],restoreBuildState:["storedBuildState"]},Re=class{constructor(e,{configuration:r}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.peerRequirements=new Map;this.installersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=r,this.cwd=e}static async find(e,r){var c,u,g;if(!e.projectCwd)throw new me(`No project found in ${r}`);let i=e.projectCwd,n=r,s=null;for(;s!==e.projectCwd;){if(s=n,N.existsSync(D.join(s,xt.manifest))){i=s;break}n=D.dirname(s)}let o=new Re(e.projectCwd,{configuration:e});(c=ce.telemetry)==null||c.reportProject(o.cwd),await o.setupResolutions(),await o.setupWorkspaces(),(u=ce.telemetry)==null||u.reportWorkspaceCount(o.workspaces.length),(g=ce.telemetry)==null||g.reportDependencyCount(o.workspaces.reduce((f,h)=>f+h.manifest.dependencies.size+h.manifest.devDependencies.size,0));let a=o.tryWorkspaceByCwd(i);if(a)return{project:o,workspace:a,locator:a.anchoredLocator};let l=await o.findLocatorForLocation(`${i}/`,{strict:!0});if(l)return{project:o,locator:l,workspace:null};throw new me(`The nearest package directory (${Je(e,i,Pe.PATH)}) doesn't seem to be part of the project declared in ${Je(e,o.cwd,Pe.PATH)}. - -- If the project directory is right, it might be that you forgot to list ${Je(e,D.relative(o.cwd,i),Pe.PATH)} as a workspace. -- If it isn't, it's likely because you have a yarn.lock or package.json file there, confusing the project root detection.`)}async setupResolutions(){this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=D.join(this.cwd,this.configuration.get("lockfileFilename")),r=this.configuration.get("defaultLanguageName");if(N.existsSync(e)){let i=await N.readFilePromise(e,"utf8");this.lockFileChecksum=ai(`${nve}`,i);let n=Kr(i);if(n.__metadata){let s=n.__metadata.version,o=n.__metadata.cacheKey;for(let a of Object.keys(n)){if(a==="__metadata")continue;let l=n[a];if(typeof l.resolution=="undefined")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${a})`);let c=hA(l.resolution,!0),u=new ze;u.load(l,{yamlCompatibilityMode:!0});let g=u.version,f=u.languageName||r,h=l.linkType.toUpperCase(),p=u.dependencies,m=u.peerDependencies,I=u.dependenciesMeta,y=u.peerDependenciesMeta,B=u.bin;if(l.checksum!=null){let x=typeof o!="undefined"&&!l.checksum.includes("/")?`${o}/${l.checksum}`:l.checksum;this.storedChecksums.set(c.locatorHash,x)}if(s>=Uk){let x=V(P({},c),{version:g,languageName:f,linkType:h,dependencies:p,peerDependencies:m,dependenciesMeta:I,peerDependenciesMeta:y,bin:B});this.originalPackages.set(x.locatorHash,x)}for(let x of a.split(sve)){let F=Jo(x);if(this.storedDescriptors.set(F.descriptorHash,F),s>=Uk)this.storedResolutions.set(F.descriptorHash,c.locatorHash);else{let L=Mm(c);L.descriptorHash!==F.descriptorHash&&(this.storedDescriptors.set(L.descriptorHash,L),this.resolutionAliases.set(F.descriptorHash,L.descriptorHash))}}}}}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=[this.cwd];for(;e.length>0;){let r=e;e=[];for(let i of r){if(this.workspacesByCwd.has(i))continue;let n=await this.addWorkspace(i),s=this.storedPackages.get(n.anchoredLocator.locatorHash);s&&(n.dependencies=s.dependencies);for(let o of n.workspacesCwds)e.push(o)}}}async addWorkspace(e){let r=new Nh(e,{project:this});await r.setup();let i=this.workspacesByIdent.get(r.locator.identHash);if(typeof i!="undefined")throw new Error(`Duplicate workspace name ${Cr(this.configuration,r.locator)}: ${O.fromPortablePath(e)} conflicts with ${O.fromPortablePath(i.cwd)}`);return this.workspaces.push(r),this.workspacesByCwd.set(e,r),this.workspacesByIdent.set(r.locator.identHash,r),r}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){D.isAbsolute(e)||(e=D.resolve(this.cwd,e)),e=D.normalize(e).replace(/\/+$/,"");let r=this.workspacesByCwd.get(e);return r||null}getWorkspaceByCwd(e){let r=this.tryWorkspaceByCwd(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByFilePath(e){let r=null;for(let i of this.workspaces)D.relative(i.cwd,e).startsWith("../")||r&&r.cwd.length>=i.cwd.length||(r=i);return r||null}getWorkspaceByFilePath(e){let r=this.tryWorkspaceByFilePath(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByIdent(e){let r=this.workspacesByIdent.get(e.identHash);return typeof r=="undefined"?null:r}getWorkspaceByIdent(e){let r=this.tryWorkspaceByIdent(e);if(!r)throw new Error(`Workspace not found (${Cr(this.configuration,e)})`);return r}tryWorkspaceByDescriptor(e){let r=this.tryWorkspaceByIdent(e);return r===null||(qo(e)&&(e=pf(e)),!r.accepts(e.range))?null:r}getWorkspaceByDescriptor(e){let r=this.tryWorkspaceByDescriptor(e);if(r===null)throw new Error(`Workspace not found (${Ut(this.configuration,e)})`);return r}tryWorkspaceByLocator(e){let r=this.tryWorkspaceByIdent(e);return r===null||(ss(e)&&(e=df(e)),r.locator.locatorHash!==e.locatorHash&&r.anchoredLocator.locatorHash!==e.locatorHash)?null:r}getWorkspaceByLocator(e){let r=this.tryWorkspaceByLocator(e);if(!r)throw new Error(`Workspace not found (${nt(this.configuration,e)})`);return r}refreshWorkspaceDependencies(){for(let e of this.workspaces){let r=this.storedPackages.get(e.anchoredLocator.locatorHash);if(!r)throw new Error(`Assertion failed: Expected workspace ${Ef(this.configuration,e)} (${Je(this.configuration,D.join(e.cwd,xt.manifest),Pe.PATH)}) to have been resolved. Run "yarn install" to update the lockfile`);e.dependencies=new Map(r.dependencies)}}forgetResolution(e){let r=n=>{this.storedResolutions.delete(n),this.storedDescriptors.delete(n)},i=n=>{this.originalPackages.delete(n),this.storedPackages.delete(n),this.accessibleLocators.delete(n)};if("descriptorHash"in e){let n=this.storedResolutions.get(e.descriptorHash);r(e.descriptorHash);let s=new Set(this.storedResolutions.values());typeof n!="undefined"&&!s.has(n)&&i(n)}if("locatorHash"in e){i(e.locatorHash);for(let[n,s]of this.storedResolutions)s===e.locatorHash&&r(n)}}forgetTransientResolutions(){let e=this.configuration.makeResolver();for(let r of this.originalPackages.values()){let i;try{i=e.shouldPersistResolution(r,{project:this,resolver:e})}catch{i=!1}i||this.forgetResolution(r)}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[r,i]of e.dependencies)qo(i)&&e.dependencies.set(r,pf(i))}getDependencyMeta(e,r){let i={},s=this.topLevelWorkspace.manifest.dependenciesMeta.get(dt(e));if(!s)return i;let o=s.get(null);if(o&&Object.assign(i,o),r===null||!n9.default.valid(r))return i;for(let[a,l]of s)a!==null&&a===r&&Object.assign(i,l);return i}async findLocatorForLocation(e,{strict:r=!1}={}){let i=new Br,n=this.configuration.getLinkers(),s={project:this,report:i};for(let o of n){let a=await o.findPackageLocator(e,s);if(a){if(r&&(await o.findPackageLocation(a,s)).replace(s9,"")!==e.replace(s9,""))continue;return a}}return null}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error("Workspaces must have been setup before calling this function");this.forgetVirtualResolutions(),e.lockfileOnly||this.forgetTransientResolutions();let r=e.resolver||this.configuration.makeResolver(),i=new Nk;await i.setup(this,{report:e.report});let n=e.lockfileOnly?new Xc([new cy,new Mk(r)]):new Xc([new cy,i,r]),s=this.configuration.makeFetcher(),o=e.lockfileOnly?{project:this,report:e.report,resolver:n}:{project:this,report:e.report,resolver:n,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:s}},a=new Map,l=new Map,c=new Map,u=new Map,g=new Map,f=new Map,h=[],p=async v=>{let q=await Gl(async()=>await n.resolve(v,o),U=>`${nt(this.configuration,v)}: ${U}`);if(!ob(v,q))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${nt(this.configuration,v)} to ${nt(this.configuration,q)})`);u.set(q.locatorHash,q);let oe=this.configuration.normalizePackage(q);for(let[U,A]of oe.dependencies){let W=await this.configuration.reduceHook(ie=>ie.reduceDependency,A,this,oe,A,{resolver:n,resolveOptions:o});if(!Cf(A,W))throw new Error("Assertion failed: The descriptor ident cannot be changed through aliases");let ee=n.bindDescriptor(W,v,o);oe.dependencies.set(U,ee)}return h.push(Promise.all([...oe.dependencies.values()].map(U=>B(U)))),l.set(oe.locatorHash,oe),oe},m=async v=>{let q=g.get(v.locatorHash);if(typeof q!="undefined")return q;let oe=Promise.resolve().then(()=>p(v));return g.set(v.locatorHash,oe),oe},I=async(v,q)=>{let oe=await B(q);return a.set(v.descriptorHash,v),c.set(v.descriptorHash,oe.locatorHash),oe},y=async v=>{let q=this.resolutionAliases.get(v.descriptorHash);if(typeof q!="undefined")return I(v,this.storedDescriptors.get(q));let oe=n.getResolutionDependencies(v,o),U=new Map(await Promise.all(oe.map(async ee=>[ee.descriptorHash,await B(ee)]))),W=(await Gl(async()=>await n.getCandidates(v,U,o),ee=>`${Ut(this.configuration,v)}: ${ee}`))[0];if(typeof W=="undefined")throw new Error(`${Ut(this.configuration,v)}: No candidates found`);return a.set(v.descriptorHash,v),c.set(v.descriptorHash,W.locatorHash),m(W)},B=v=>{let q=f.get(v.descriptorHash);if(typeof q!="undefined")return q;a.set(v.descriptorHash,v);let oe=Promise.resolve().then(()=>y(v));return f.set(v.descriptorHash,oe),oe};for(let v of this.workspaces){let q=v.anchoredDescriptor;h.push(B(q))}for(;h.length>0;){let v=[...h];h.length=0,await Promise.all(v)}let x=new Set(this.resolutionAliases.values()),F=new Set(l.keys()),L=new Set,T=new Map;lve({project:this,report:e.report,accessibleLocators:L,volatileDescriptors:x,optionalBuilds:F,peerRequirements:T,allDescriptors:a,allResolutions:c,allPackages:l});for(let v of x)a.delete(v),c.delete(v);this.storedResolutions=c,this.storedDescriptors=a,this.storedPackages=l,this.accessibleLocators=L,this.originalPackages=u,this.optionalBuilds=F,this.peerRequirements=T,this.refreshWorkspaceDependencies()}async fetchEverything({cache:e,report:r,fetcher:i,mode:n}){let s=i||this.configuration.makeFetcher(),o={checksums:this.storedChecksums,project:this,cache:e,fetcher:s,report:r},a=Array.from(new Set(bi(this.storedResolutions.values(),[g=>{let f=this.storedPackages.get(g);if(!f)throw new Error("Assertion failed: The locator should have been registered");return gn(f)}])));n===kr.UpdateLockfile&&(a=a.filter(g=>!this.storedChecksums.has(g)));let l=!1,c=ci.progressViaCounter(a.length);r.reportProgress(c);let u=(0,i9.default)(ove);if(await r.startCacheReport(async()=>{await Promise.all(a.map(g=>u(async()=>{let f=this.storedPackages.get(g);if(!f)throw new Error("Assertion failed: The locator should have been registered");if(ss(f))return;let h;try{h=await s.fetch(f,o)}catch(p){p.message=`${nt(this.configuration,f)}: ${p.message}`,r.reportExceptionOnce(p),l=p;return}h.checksum?this.storedChecksums.set(f.locatorHash,h.checksum):this.storedChecksums.delete(f.locatorHash),h.releaseFs&&h.releaseFs()}).finally(()=>{c.tick()})))}),l)throw l}async linkEverything({cache:e,report:r,fetcher:i,mode:n}){var oe;let s=i||this.configuration.makeFetcher(),o={checksums:this.storedChecksums,project:this,cache:e,fetcher:s,report:r,skipIntegrityCheck:!0},a=this.configuration.getLinkers(),l={project:this,report:r},c=new Map(a.map(U=>{let A=U.makeInstaller(l),W=A.getCustomDataKey(),ee=this.installersCustomData.get(W);return typeof ee!="undefined"&&A.attachCustomData(ee),[U,A]})),u=new Map,g=new Map,f=new Map,h=new Map(await Promise.all([...this.accessibleLocators].map(async U=>{let A=this.storedPackages.get(U);if(!A)throw new Error("Assertion failed: The locator should have been registered");return[U,await s.fetch(A,o)]})));for(let U of this.accessibleLocators){let A=this.storedPackages.get(U);if(typeof A=="undefined")throw new Error("Assertion failed: The locator should have been registered");let W=h.get(A.locatorHash);if(typeof W=="undefined")throw new Error("Assertion failed: The fetch result should have been registered");let ee=this.tryWorkspaceByLocator(A);if(ee!==null){let ie=[],{scripts:J}=ee.manifest;for(let ve of["preinstall","install","postinstall"])J.has(ve)&&ie.push([Vi.SCRIPT,ve]);try{for(let[ve,Fe]of c)if(ve.supportsPackage(A,l)&&(await Fe.installPackage(A,W)).buildDirective!==null)throw new Error("Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core")}finally{W.releaseFs&&W.releaseFs()}let R=D.join(W.packageFs.getRealPath(),W.prefixPath);g.set(A.locatorHash,R),!ss(A)&&ie.length>0&&f.set(A.locatorHash,{directives:ie,buildLocations:[R]})}else{let ie=a.find(ve=>ve.supportsPackage(A,l));if(!ie)throw new _e(z.LINKER_NOT_FOUND,`${nt(this.configuration,A)} isn't supported by any available linker`);let J=c.get(ie);if(!J)throw new Error("Assertion failed: The installer should have been registered");let R;try{R=await J.installPackage(A,W)}finally{W.releaseFs&&W.releaseFs()}u.set(A.locatorHash,ie),g.set(A.locatorHash,R.packageLocation),R.buildDirective&&R.packageLocation&&f.set(A.locatorHash,{directives:R.buildDirective,buildLocations:[R.packageLocation]})}}let p=new Map;for(let U of this.accessibleLocators){let A=this.storedPackages.get(U);if(!A)throw new Error("Assertion failed: The locator should have been registered");let W=this.tryWorkspaceByLocator(A)!==null,ee=async(ie,J)=>{let R=g.get(A.locatorHash);if(typeof R=="undefined")throw new Error(`Assertion failed: The package (${nt(this.configuration,A)}) should have been registered`);let ve=[];for(let Fe of A.dependencies.values()){let Ke=this.storedResolutions.get(Fe.descriptorHash);if(typeof Ke=="undefined")throw new Error(`Assertion failed: The resolution (${Ut(this.configuration,Fe)}, from ${nt(this.configuration,A)})should have been registered`);let qe=this.storedPackages.get(Ke);if(typeof qe=="undefined")throw new Error(`Assertion failed: The package (${Ke}, resolved from ${Ut(this.configuration,Fe)}) should have been registered`);let te=this.tryWorkspaceByLocator(qe)===null?u.get(Ke):null;if(typeof te=="undefined")throw new Error(`Assertion failed: The package (${Ke}, resolved from ${Ut(this.configuration,Fe)}) should have been registered`);te===ie||W||te===null?g.get(qe.locatorHash)!==null&&ve.push([Fe,qe]):R!==null&&Hl(p,Ke).push(R)}R!==null&&await J.attachInternalDependencies(A,ve)};if(W)for(let[ie,J]of c)ie.supportsPackage(A,l)&&await ee(ie,J);else{let ie=u.get(A.locatorHash);if(!ie)throw new Error("Assertion failed: The linker should have been found");let J=c.get(ie);if(!J)throw new Error("Assertion failed: The installer should have been registered");await ee(ie,J)}}for(let[U,A]of p){let W=this.storedPackages.get(U);if(!W)throw new Error("Assertion failed: The package should have been registered");let ee=u.get(W.locatorHash);if(!ee)throw new Error("Assertion failed: The linker should have been found");let ie=c.get(ee);if(!ie)throw new Error("Assertion failed: The installer should have been registered");await ie.attachExternalDependents(W,A)}let m=new Map;for(let U of c.values()){let A=await U.finalizeInstall();for(let W of(oe=A==null?void 0:A.records)!=null?oe:[])f.set(W.locatorHash,{directives:W.buildDirective,buildLocations:W.buildLocations});typeof(A==null?void 0:A.customData)!="undefined"&&m.set(U.getCustomDataKey(),A.customData)}if(this.installersCustomData=m,n===kr.SkipBuild)return;let I=new Set(this.storedPackages.keys()),y=new Set(f.keys());for(let U of y)I.delete(U);let B=(0,uy.createHash)("sha512");B.update(process.versions.node),await this.configuration.triggerHook(U=>U.globalHashGeneration,this,U=>{B.update("\0"),B.update(U)});let x=B.digest("hex"),F=new Map,L=U=>{let A=F.get(U.locatorHash);if(typeof A!="undefined")return A;let W=this.storedPackages.get(U.locatorHash);if(typeof W=="undefined")throw new Error("Assertion failed: The package should have been registered");let ee=(0,uy.createHash)("sha512");ee.update(U.locatorHash),F.set(U.locatorHash,"");for(let ie of W.dependencies.values()){let J=this.storedResolutions.get(ie.descriptorHash);if(typeof J=="undefined")throw new Error(`Assertion failed: The resolution (${Ut(this.configuration,ie)}) should have been registered`);let R=this.storedPackages.get(J);if(typeof R=="undefined")throw new Error("Assertion failed: The package should have been registered");ee.update(L(R))}return A=ee.digest("hex"),F.set(U.locatorHash,A),A},T=(U,A)=>{let W=(0,uy.createHash)("sha512");W.update(x),W.update(L(U));for(let ee of A)W.update(ee);return W.digest("hex")},v=new Map,q=!1;for(;y.size>0;){let U=y.size,A=[];for(let W of y){let ee=this.storedPackages.get(W);if(!ee)throw new Error("Assertion failed: The package should have been registered");let ie=!0;for(let ve of ee.dependencies.values()){let Fe=this.storedResolutions.get(ve.descriptorHash);if(!Fe)throw new Error(`Assertion failed: The resolution (${Ut(this.configuration,ve)}) should have been registered`);if(y.has(Fe)){ie=!1;break}}if(!ie)continue;y.delete(W);let J=f.get(ee.locatorHash);if(!J)throw new Error("Assertion failed: The build directive should have been registered");let R=T(ee,J.buildLocations);if(this.storedBuildState.get(ee.locatorHash)===R){v.set(ee.locatorHash,R);continue}q||(await this.persistInstallStateFile(),q=!0),this.storedBuildState.has(ee.locatorHash)?r.reportInfo(z.MUST_REBUILD,`${nt(this.configuration,ee)} must be rebuilt because its dependency tree changed`):r.reportInfo(z.MUST_BUILD,`${nt(this.configuration,ee)} must be built because it never has been before or the last one failed`);for(let ve of J.buildLocations){if(!D.isAbsolute(ve))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${ve})`);A.push((async()=>{for(let[Fe,Ke]of J.directives){let qe=`# This file contains the result of Yarn building a package (${gn(ee)}) -`;switch(Fe){case Vi.SCRIPT:qe+=`# Script name: ${Ke} -`;break;case Vi.SHELLCODE:qe+=`# Script code: ${Ke} -`;break}let te=null;if(!await N.mktempPromise(async Se=>{let fe=D.join(Se,"build.log"),{stdout:Ie,stderr:de}=this.configuration.getSubprocessStreams(fe,{header:qe,prefix:nt(this.configuration,ee),report:r}),we;try{switch(Fe){case Vi.SCRIPT:we=await VI(ee,Ke,[],{cwd:ve,project:this,stdin:te,stdout:Ie,stderr:de});break;case Vi.SHELLCODE:we=await vS(ee,Ke,[],{cwd:ve,project:this,stdin:te,stdout:Ie,stderr:de});break}}catch(X){de.write(X.stack),we=1}if(Ie.end(),de.end(),we===0)return v.set(ee.locatorHash,R),!0;N.detachTemp(Se);let Z=`${nt(this.configuration,ee)} couldn't be built successfully (exit code ${Je(this.configuration,we,Pe.NUMBER)}, logs can be found here: ${Je(this.configuration,fe,Pe.PATH)})`;return this.optionalBuilds.has(ee.locatorHash)?(r.reportInfo(z.BUILD_FAILED,Z),v.set(ee.locatorHash,R),!0):(r.reportError(z.BUILD_FAILED,Z),!1)}))return}})())}}if(await Promise.all(A),U===y.size){let W=Array.from(y).map(ee=>{let ie=this.storedPackages.get(ee);if(!ie)throw new Error("Assertion failed: The package should have been registered");return nt(this.configuration,ie)}).join(", ");r.reportError(z.CYCLIC_DEPENDENCIES,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${W})`);break}}this.storedBuildState=v}async install(e){var a,l;let r=this.configuration.get("nodeLinker");(a=ce.telemetry)==null||a.reportInstall(r),await e.report.startTimerPromise("Project validation",{skipIfEmpty:!0},async()=>{await this.configuration.triggerHook(c=>c.validateProject,this,{reportWarning:e.report.reportWarning.bind(e.report),reportError:e.report.reportError.bind(e.report)})});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.status=qr.Inactive;let i=D.join(this.cwd,this.configuration.get("lockfileFilename")),n=null;if(e.immutable)try{n=await N.readFilePromise(i,"utf8")}catch(c){throw c.code==="ENOENT"?new _e(z.FROZEN_LOCKFILE_EXCEPTION,"The lockfile would have been created by this install, which is explicitly forbidden."):c}await e.report.startTimerPromise("Resolution step",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise("Post-resolution validation",{skipIfEmpty:!0},async()=>{for(let[,c]of this.configuration.packageExtensions)for(let[,u]of c)for(let g of u)if(g.userProvided){let f=Je(this.configuration,g,Pe.PACKAGE_EXTENSION);switch(g.status){case qr.Inactive:e.report.reportWarning(z.UNUSED_PACKAGE_EXTENSION,`${f}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case qr.Redundant:e.report.reportWarning(z.REDUNDANT_PACKAGE_EXTENSION,`${f}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(n!==null){let c=Dl(n,this.generateLockfile());if(c!==n){let u=(0,r9.structuredPatch)(i,i,n,c);e.report.reportSeparator();for(let g of u.hunks){e.report.reportInfo(null,`@@ -${g.oldStart},${g.oldLines} +${g.newStart},${g.newLines} @@`);for(let f of g.lines)f.startsWith("+")?e.report.reportError(z.FROZEN_LOCKFILE_EXCEPTION,Je(this.configuration,f,Pe.ADDED)):f.startsWith("-")?e.report.reportError(z.FROZEN_LOCKFILE_EXCEPTION,Je(this.configuration,f,Pe.REMOVED)):e.report.reportInfo(null,Je(this.configuration,f,"grey"))}throw e.report.reportSeparator(),new _e(z.FROZEN_LOCKFILE_EXCEPTION,"The lockfile would have been modified by this install, which is explicitly forbidden.")}}});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.userProvided&&g.status===qr.Active&&((l=ce.telemetry)==null||l.reportPackageExtension(rc(g,Pe.PACKAGE_EXTENSION)));await e.report.startTimerPromise("Fetch step",async()=>{await this.fetchEverything(e),(typeof e.persistProject=="undefined"||e.persistProject)&&e.mode!==kr.UpdateLockfile&&await this.cacheCleanup(e)});let s=e.immutable?[...new Set(this.configuration.get("immutablePatterns"))].sort():[],o=await Promise.all(s.map(async c=>Fm(c,{cwd:this.cwd})));(typeof e.persistProject=="undefined"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise("Link step",async()=>{if(e.mode===kr.UpdateLockfile){e.report.reportWarning(z.UPDATE_LOCKFILE_ONLY_SKIP_LINK,`Skipped due to ${Je(this.configuration,"mode=update-lockfile",Pe.CODE)}`);return}await this.linkEverything(e);let c=await Promise.all(s.map(async u=>Fm(u,{cwd:this.cwd})));for(let u=0;uc.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,s]of this.storedResolutions.entries()){let o=e.get(s);o||e.set(s,o=new Set),o.add(n)}let r={};r.__metadata={version:Uk};for(let[n,s]of e.entries()){let o=this.originalPackages.get(n);if(!o)continue;let a=[];for(let f of s){let h=this.storedDescriptors.get(f);if(!h)throw new Error("Assertion failed: The descriptor should have been registered");a.push(h)}let l=a.map(f=>xi(f)).sort().join(", "),c=new ze;c.version=o.linkType===ct.HARD?o.version:"0.0.0-use.local",c.languageName=o.languageName,c.dependencies=new Map(o.dependencies),c.peerDependencies=new Map(o.peerDependencies),c.dependenciesMeta=new Map(o.dependenciesMeta),c.peerDependenciesMeta=new Map(o.peerDependenciesMeta),c.bin=new Map(o.bin);let u,g=this.storedChecksums.get(o.locatorHash);if(typeof g!="undefined"){let f=g.indexOf("/");if(f===-1)throw new Error("Assertion failed: Expecte the checksum to reference its cache key");let h=g.slice(0,f),p=g.slice(f+1);typeof r.__metadata.cacheKey=="undefined"&&(r.__metadata.cacheKey=h),h===r.__metadata.cacheKey?u=p:u=g}r[l]=V(P({},c.exportTo({},{compatibilityMode:!1})),{linkType:o.linkType.toLowerCase(),resolution:gn(o),checksum:u})}return`${[`# This file is generated by running "yarn install" inside your project. -`,`# Manual changes might be lost - proceed with caution! -`].join("")} -`+ro(r)}async persistLockfile(){let e=D.join(this.cwd,this.configuration.get("lockfileFilename")),r=this.generateLockfile();await N.changeFilePromise(e,r,{automaticNewlines:!0})}async persistInstallStateFile(){let e=[];for(let o of Object.values(Yk))e.push(...o);let r=(0,gy.default)(this,e),i=Tk.default.serialize(r),n=ai(i);if(this.installStateChecksum===n)return;let s=this.configuration.get("installStatePath");await N.mkdirPromise(D.dirname(s),{recursive:!0}),await N.writeFilePromise(s,await ave(i)),this.installStateChecksum=n}async restoreInstallState({restoreInstallersCustomData:e=!0,restoreResolutions:r=!0,restoreBuildState:i=!0}={}){let n=this.configuration.get("installStatePath");if(!N.existsSync(n)){r&&await this.applyLightResolution();return}let s=await Ave(await N.readFilePromise(n));this.installStateChecksum=ai(s);let o=Tk.default.deserialize(s);e&&typeof o.installersCustomData!="undefined"&&(this.installersCustomData=o.installersCustomData),i&&Object.assign(this,(0,gy.default)(o,Yk.restoreBuildState)),r&&(o.lockFileChecksum===this.lockFileChecksum?(Object.assign(this,(0,gy.default)(o,Yk.restoreResolutions)),this.refreshWorkspaceDependencies()):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new Br}),await this.persistInstallStateFile()}async persist(){await this.persistLockfile();for(let e of this.workspacesByCwd.values())await e.persistManifest()}async cacheCleanup({cache:e,report:r}){let i=new Set([".gitignore"]);if(!Gw(e.cwd,this.cwd)||!await N.existsPromise(e.cwd))return;let n=this.configuration.get("preferAggregateCacheInfo"),s=0,o=null;for(let a of await N.readdirPromise(e.cwd)){if(i.has(a))continue;let l=D.resolve(e.cwd,a);e.markedFiles.has(l)||(o=a,e.immutable?r.reportError(z.IMMUTABLE_CACHE,`${Je(this.configuration,D.basename(l),"magenta")} appears to be unused and would be marked for deletion, but the cache is immutable`):(n?s+=1:r.reportInfo(z.UNUSED_CACHE_ENTRY,`${Je(this.configuration,D.basename(l),"magenta")} appears to be unused - removing`),await N.removePromise(l)))}n&&s!==0&&r.reportInfo(z.UNUSED_CACHE_ENTRY,s>1?`${s} packages appeared to be unused and were removed`:`${o} appeared to be unused and was removed`),e.markedFiles.clear()}};function lve({project:t,allDescriptors:e,allResolutions:r,allPackages:i,accessibleLocators:n=new Set,optionalBuilds:s=new Set,volatileDescriptors:o=new Set,peerRequirements:a=new Map,report:l,tolerateMissingPackages:c=!1}){var oe;let u=new Map,g=[],f=new Map,h=new Map,p=new Map,m=new Map,I=new Map,y=new Map(t.workspaces.map(U=>{let A=U.anchoredLocator.locatorHash,W=i.get(A);if(typeof W=="undefined"){if(c)return[A,null];throw new Error("Assertion failed: The workspace should have an associated package")}return[A,hf(W)]})),B=()=>{let U=N.mktempSync(),A=D.join(U,"stacktrace.log"),W=String(g.length+1).length,ee=g.map((ie,J)=>`${`${J+1}.`.padStart(W," ")} ${gn(ie)} -`).join("");throw N.writeFileSync(A,ee),N.detachTemp(U),new _e(z.STACK_OVERFLOW_RESOLUTION,`Encountered a stack overflow when resolving peer dependencies; cf ${O.fromPortablePath(A)}`)},x=U=>{let A=r.get(U.descriptorHash);if(typeof A=="undefined")throw new Error("Assertion failed: The resolution should have been registered");let W=i.get(A);if(!W)throw new Error("Assertion failed: The package could not be found");return W},F=(U,A,{top:W,optional:ee})=>{g.length>1e3&&B(),g.push(U);let ie=L(U,A,{top:W,optional:ee});return g.pop(),ie},L=(U,A,{top:W,optional:ee})=>{if(n.has(U.locatorHash))return;n.add(U.locatorHash),ee||s.delete(U.locatorHash);let ie=i.get(U.locatorHash);if(!ie){if(c)return;throw new Error(`Assertion failed: The package (${nt(t.configuration,U)}) should have been registered`)}let J=[],R=[],ve=[],Fe=[],Ke=[];for(let te of Array.from(ie.dependencies.values())){if(ie.peerDependencies.has(te.identHash)&&ie.locatorHash!==W)continue;if(qo(te))throw new Error("Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch");o.delete(te.descriptorHash);let le=ee;if(!le){let Ae=ie.dependenciesMeta.get(dt(te));if(typeof Ae!="undefined"){let ue=Ae.get(null);typeof ue!="undefined"&&ue.optional&&(le=!0)}}let Se=r.get(te.descriptorHash);if(!Se){if(c)continue;throw new Error(`Assertion failed: The resolution (${Ut(t.configuration,te)}) should have been registered`)}let fe=y.get(Se)||i.get(Se);if(!fe)throw new Error(`Assertion failed: The package (${Se}, resolved from ${Ut(t.configuration,te)}) should have been registered`);if(fe.peerDependencies.size===0){F(fe,new Map,{top:W,optional:le});continue}let Ie=u.get(fe.locatorHash);typeof Ie=="number"&&Ie>=2&&B();let de,we,Z=new Set,X;R.push(()=>{de=nb(te,U.locatorHash),we=sb(fe,U.locatorHash),ie.dependencies.delete(te.identHash),ie.dependencies.set(de.identHash,de),r.set(de.descriptorHash,we.locatorHash),e.set(de.descriptorHash,de),i.set(we.locatorHash,we),J.push([fe,de,we])}),ve.push(()=>{var Ae;X=new Map;for(let ue of we.peerDependencies.values()){let Be=ie.dependencies.get(ue.identHash);if(!Be&&Cf(U,ue)&&(Be=Mm(U),e.set(Be.descriptorHash,Be),r.set(Be.descriptorHash,U.locatorHash),o.delete(Be.descriptorHash)),(!Be||Be.range==="missing:")&&we.dependencies.has(ue.identHash)){we.peerDependencies.delete(ue.identHash);continue}Be||(Be=zt(ue,"missing:")),we.dependencies.set(Be.identHash,Be),qo(Be)&&oA(p,Be.descriptorHash).add(we.locatorHash),f.set(Be.identHash,Be),Be.range==="missing:"&&Z.add(Be.identHash),X.set(ue.identHash,(Ae=A.get(ue.identHash))!=null?Ae:we.locatorHash)}we.dependencies=new Map(bi(we.dependencies,([ue,Be])=>dt(Be)))}),Fe.push(()=>{if(!i.has(we.locatorHash))return;let Ae=u.get(fe.locatorHash),ue=typeof Ae!="undefined"?Ae+1:1;u.set(fe.locatorHash,ue),F(we,X,{top:W,optional:le}),u.set(fe.locatorHash,ue-1)}),Ke.push(()=>{let Ae=ie.dependencies.get(te.identHash);if(typeof Ae=="undefined")throw new Error("Assertion failed: Expected the peer dependency to have been turned into a dependency");let ue=r.get(Ae.descriptorHash);if(typeof ue=="undefined")throw new Error("Assertion failed: Expected the descriptor to be registered");if(oA(I,ue).add(U.locatorHash),!!i.has(we.locatorHash)){for(let Be of we.peerDependencies.values()){let at=X.get(Be.identHash);if(typeof at=="undefined")throw new Error("Assertion failed: Expected the peer dependency ident to be registered");Hl(jl(m,at),dt(Be)).push(we.locatorHash)}for(let Be of Z)we.dependencies.delete(Be)}})}for(let te of[...R,...ve])te();let qe;do{qe=!0;for(let[te,le,Se]of J){if(!i.has(Se.locatorHash))continue;let fe=jl(h,te.locatorHash),Ie=ai(...[...Se.dependencies.values()].map(X=>{let Ae=X.range!=="missing:"?r.get(X.descriptorHash):"missing:";if(typeof Ae=="undefined")throw new Error(`Assertion failed: Expected the resolution for ${Ut(t.configuration,X)} to have been registered`);return Ae===W?`${Ae} (top)`:Ae}),le.identHash),de=fe.get(Ie);if(typeof de=="undefined"){fe.set(Ie,le);continue}if(de===le)continue;qe=!1,i.delete(Se.locatorHash),e.delete(le.descriptorHash),r.delete(le.descriptorHash),n.delete(Se.locatorHash);let we=p.get(le.descriptorHash)||[],Z=[ie.locatorHash,...we];p.delete(le.descriptorHash);for(let X of Z){let Ae=i.get(X);typeof Ae!="undefined"&&Ae.dependencies.set(le.identHash,de)}}}while(!qe);for(let te of[...Fe,...Ke])te()};for(let U of t.workspaces){let A=U.anchoredLocator;o.delete(U.anchoredDescriptor.descriptorHash),F(A,new Map,{top:A.locatorHash,optional:!1})}var T;(function(W){W[W.NotProvided=0]="NotProvided",W[W.NotCompatible=1]="NotCompatible"})(T||(T={}));let v=[];for(let[U,A]of I){let W=i.get(U);if(typeof W=="undefined")throw new Error("Assertion failed: Expected the root to be registered");let ee=m.get(U);if(typeof ee!="undefined")for(let ie of A){let J=i.get(ie);if(typeof J!="undefined")for(let[R,ve]of ee){let Fe=Si(R);if(J.peerDependencies.has(Fe.identHash))continue;let Ke=`p${ai(ie,R,U).slice(0,5)}`;a.set(Ke,{subject:ie,requested:Fe,rootRequester:U,allRequesters:ve});let qe=W.dependencies.get(Fe.identHash);if(typeof qe!="undefined"){let le=(oe=x(qe).version)!=null?oe:"0.0.0",Se=new Set;for(let Ie of ve){let de=i.get(Ie);if(typeof de=="undefined")throw new Error("Assertion failed: Expected the link to be registered");let we=de.peerDependencies.get(Fe.identHash);if(typeof we=="undefined")throw new Error("Assertion failed: Expected the ident to be registered");Se.add(we.range)}[...Se].every(Ie=>_f(le,Ie))||v.push({type:1,subject:J,requested:Fe,requester:W,version:le,hash:Ke,requirementCount:ve.length})}else{let te=W.peerDependenciesMeta.get(R);(te==null?void 0:te.optional)||v.push({type:0,subject:J,requested:Fe,requester:W,hash:Ke})}}}}let q=[U=>Ab(U.subject),U=>dt(U.requested),U=>`${U.type}`];for(let U of bi(v,q))switch(U.type){case 0:l==null||l.reportWarning(z.MISSING_PEER_DEPENDENCY,`${nt(t.configuration,U.subject)} doesn't provide ${Cr(t.configuration,U.requested)} (${Je(t.configuration,U.hash,Pe.CODE)}), requested by ${Cr(t.configuration,U.requester)}`);break;case 1:{let A=U.requirementCount>1?"and some of its descendants request":"requests";l==null||l.reportWarning(z.INCOMPATIBLE_PEER_DEPENDENCY,`${nt(t.configuration,U.subject)} provides ${Cr(t.configuration,U.requested)} (${Je(t.configuration,U.hash,Pe.CODE)}) with version ${If(t.configuration,U.version)}, which doesn't satisfy what ${Cr(t.configuration,U.requester)} ${A}`)}break}v.length>0&&(l==null||l.reportWarning(z.UNNAMED,`Some peer dependencies are incorrectly met; run ${Je(t.configuration,"yarn explain peer-requirements ",Pe.CODE)} for details, where ${Je(t.configuration,"",Pe.CODE)} is the six-letter p-prefixed code`))}var Cs;(function(l){l.VERSION="version",l.COMMAND_NAME="commandName",l.PLUGIN_NAME="pluginName",l.INSTALL_COUNT="installCount",l.PROJECT_COUNT="projectCount",l.WORKSPACE_COUNT="workspaceCount",l.DEPENDENCY_COUNT="dependencyCount",l.EXTENSION="packageExtension"})(Cs||(Cs={}));var Mh=class{constructor(e,r){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.configuration=e;let i=this.getRegistryPath();this.isNew=!N.existsSync(i),this.sendReport(r),this.startBuffer()}reportVersion(e){this.reportValue(Cs.VERSION,e.replace(/-git\..*/,"-git"))}reportCommandName(e){this.reportValue(Cs.COMMAND_NAME,e||"")}reportPluginName(e){this.reportValue(Cs.PLUGIN_NAME,e)}reportProject(e){this.reportEnumerator(Cs.PROJECT_COUNT,e)}reportInstall(e){this.reportHit(Cs.INSTALL_COUNT,e)}reportPackageExtension(e){this.reportValue(Cs.EXTENSION,e)}reportWorkspaceCount(e){this.reportValue(Cs.WORKSPACE_COUNT,String(e))}reportDependencyCount(e){this.reportValue(Cs.DEPENDENCY_COUNT,String(e))}reportValue(e,r){oA(this.values,e).add(r)}reportEnumerator(e,r){oA(this.enumerators,e).add(ai(r))}reportHit(e,r="*"){let i=jl(this.hits,e),n=Hs(i,r,()=>0);i.set(r,n+1)}getRegistryPath(){let e=this.configuration.get("globalFolder");return D.join(e,"telemetry.json")}sendReport(e){var u,g,f;let r=this.getRegistryPath(),i;try{i=N.readJsonSync(r)}catch{i={}}let n=Date.now(),s=this.configuration.get("telemetryInterval")*24*60*60*1e3,a=((u=i.lastUpdate)!=null?u:n+s+Math.floor(s*Math.random()))+s;if(a>n&&i.lastUpdate!=null)return;try{N.mkdirSync(D.dirname(r),{recursive:!0}),N.writeJsonSync(r,{lastUpdate:n})}catch{return}if(a>n||!i.blocks)return;let l=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,c=h=>vD(l,h,{configuration:this.configuration}).catch(()=>{});for(let[h,p]of Object.entries((g=i.blocks)!=null?g:{})){if(Object.keys(p).length===0)continue;let m=p;m.userId=h,m.reportType="primary";for(let B of Object.keys((f=m.enumerators)!=null?f:{}))m.enumerators[B]=m.enumerators[B].length;c(m);let I=new Map,y=20;for(let[B,x]of Object.entries(m.values))x.length>0&&I.set(B,x.slice(0,y));for(;I.size>0;){let B={};B.userId=h,B.reportType="secondary",B.metrics={};for(let[x,F]of I)B.metrics[x]=F.shift(),F.length===0&&I.delete(x);c(B)}}}applyChanges(){var o,a,l,c,u,g,f,h,p;let e=this.getRegistryPath(),r;try{r=N.readJsonSync(e)}catch{r={}}let i=(o=this.configuration.get("telemetryUserId"))!=null?o:"*",n=r.blocks=(a=r.blocks)!=null?a:{},s=n[i]=(l=n[i])!=null?l:{};for(let m of this.hits.keys()){let I=s.hits=(c=s.hits)!=null?c:{},y=I[m]=(u=I[m])!=null?u:{};for(let[B,x]of this.hits.get(m))y[B]=((g=y[B])!=null?g:0)+x}for(let m of["values","enumerators"])for(let I of this[m].keys()){let y=s[m]=(f=s[m])!=null?f:{};y[I]=[...new Set([...(h=y[I])!=null?h:[],...(p=this[m].get(I))!=null?p:[]])]}N.mkdirSync(D.dirname(e),{recursive:!0}),N.writeJsonSync(e,r)}startBuffer(){process.on("exit",()=>{try{this.applyChanges()}catch{}})}};var Hk=re(require("child_process")),o9=re(Lg());var jk=re(require("fs"));var lu=new Map([["constraints",[["constraints","query"],["constraints","source"],["constraints"]]],["exec",[]],["interactive-tools",[["search"],["upgrade-interactive"]]],["stage",[["stage"]]],["typescript",[]],["version",[["version","apply"],["version","check"],["version"]]],["workspace-tools",[["workspaces","focus"],["workspaces","foreach"]]]]);function cve(t){let e=O.fromPortablePath(t);process.on("SIGINT",()=>{}),e?(0,Hk.execFileSync)(process.execPath,[e,...process.argv.slice(2)],{stdio:"inherit",env:V(P({},process.env),{YARN_IGNORE_PATH:"1",YARN_IGNORE_CWD:"1"})}):(0,Hk.execFileSync)(e,process.argv.slice(2),{stdio:"inherit",env:V(P({},process.env),{YARN_IGNORE_PATH:"1",YARN_IGNORE_CWD:"1"})})}async function fy({binaryVersion:t,pluginConfiguration:e}){async function r(){let n=new ts({binaryLabel:"Yarn Package Manager",binaryName:"yarn",binaryVersion:t});try{await i(n)}catch(s){process.stdout.write(n.error(s)),process.exitCode=1}}async function i(n){var p,m,I,y,B;let s=process.versions.node,o=">=12 <14 || 14.2 - 14.9 || >14.10.0";if(process.env.YARN_IGNORE_NODE!=="1"&&!Pt.satisfiesWithPrereleases(s,o))throw new me(`This tool requires a Node version compatible with ${o} (got ${s}). Upgrade Node, or set \`YARN_IGNORE_NODE=1\` in your environment.`);let a=await ce.find(O.toPortablePath(process.cwd()),e,{usePath:!0,strict:!1}),l=a.get("yarnPath"),c=a.get("ignorePath"),u=a.get("ignoreCwd"),g=O.toPortablePath(O.resolve(process.argv[1])),f=x=>N.readFilePromise(x).catch(()=>Buffer.of());if(!c&&!u&&await(async()=>l===g||Buffer.compare(...await Promise.all([f(l),f(g)]))===0)()){process.env.YARN_IGNORE_PATH="1",process.env.YARN_IGNORE_CWD="1",await i(n);return}else if(l!==null&&!c)if(!N.existsSync(l))process.stdout.write(n.error(new Error(`The "yarn-path" option has been set (in ${a.sources.get("yarnPath")}), but the specified location doesn't exist (${l}).`))),process.exitCode=1;else try{cve(l)}catch(x){process.exitCode=x.code||1}else{c&&delete process.env.YARN_IGNORE_PATH,a.get("enableTelemetry")&&!o9.isCI&&process.stdout.isTTY&&(ce.telemetry=new Mh(a,"puba9cdc10ec5790a2cf4969dd413a47270")),(p=ce.telemetry)==null||p.reportVersion(t);for(let[T,v]of a.plugins.entries()){lu.has((I=(m=T.match(/^@yarnpkg\/plugin-(.*)$/))==null?void 0:m[1])!=null?I:"")&&((y=ce.telemetry)==null||y.reportPluginName(T));for(let q of v.commands||[])n.register(q)}let F=n.process(process.argv.slice(2));F.help||(B=ce.telemetry)==null||B.reportCommandName(F.path.join(" "));let L=F.cwd;if(typeof L!="undefined"&&!u){let T=(0,jk.realpathSync)(process.cwd()),v=(0,jk.realpathSync)(L);if(T!==v){process.chdir(L),await r();return}}await n.runExit(F,{cwd:O.toPortablePath(process.cwd()),plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr})}}return r().catch(n=>{process.stdout.write(n.stack||n.message),process.exitCode=1}).finally(()=>N.rmtempPromise())}function a9(t){t.Command.Path=(...e)=>r=>{r.paths=r.paths||[],r.paths.push(e)};for(let e of["Array","Boolean","String","Proxy","Rest","Counter"])t.Command[e]=(...r)=>(i,n)=>{let s=t.Option[e](...r);Object.defineProperty(i,`__${n}`,{configurable:!1,enumerable:!0,get(){return s},set(o){this[n]=o}})};return t}var ap={};et(ap,{BaseCommand:()=>ye,WorkspaceRequiredError:()=>Ze,getDynamicLibs:()=>yZ,getPluginConfiguration:()=>jy,main:()=>fy,openWorkspace:()=>yu,pluginCommands:()=>lu});var ye=class extends he{constructor(){super(...arguments);this.cwd=H.String("--cwd",{hidden:!0})}};var Ze=class extends me{constructor(e,r){let i=D.relative(e,r),n=D.join(e,ze.fileName);super(`This command can only be run from within a workspace of your project (${i} isn't a workspace of ${n}).`)}};var dTe=re(cr());vn();var CTe=re(YP()),yZ=()=>new Map([["@yarnpkg/cli",ap],["@yarnpkg/core",Oh],["@yarnpkg/fslib",kg],["@yarnpkg/libzip",Tf],["@yarnpkg/parsers",Jf],["@yarnpkg/shell",zf],["clipanion",Jg],["semver",dTe],["typanion",Ol],["yup",CTe]]);async function yu(t,e){let{project:r,workspace:i}=await Re.find(t,e);if(!i)throw new Ze(r.cwd,e);return i}var EWe=re(cr());vn();var yWe=re(YP());var Fv={};et(Fv,{dedupeUtils:()=>wv,default:()=>sYe,suggestUtils:()=>cv});var _te=re(Lg());var x$=re(up());vn();var cv={};et(cv,{Modifier:()=>ll,Strategy:()=>or,Target:()=>er,applyModifier:()=>D$,extractDescriptorFromPath:()=>fv,extractRangeModifier:()=>b$,fetchDescriptorFrom:()=>gv,findProjectDescriptors:()=>S$,getModifier:()=>gp,getSuggestedDescriptors:()=>fp});var uv=re(cr()),er;(function(i){i.REGULAR="dependencies",i.DEVELOPMENT="devDependencies",i.PEER="peerDependencies"})(er||(er={}));var ll;(function(i){i.CARET="^",i.TILDE="~",i.EXACT=""})(ll||(ll={}));var or;(function(s){s.KEEP="keep",s.REUSE="reuse",s.PROJECT="project",s.LATEST="latest",s.CACHE="cache"})(or||(or={}));function gp(t,e){return t.exact?ll.EXACT:t.caret?ll.CARET:t.tilde?ll.TILDE:e.configuration.get("defaultSemverRangePrefix")}var NKe=/^([\^~]?)[0-9]+(?:\.[0-9]+){0,2}(?:-\S+)?$/;function b$(t,{project:e}){let r=t.match(NKe);return r?r[1]:e.configuration.get("defaultSemverRangePrefix")}function D$(t,e){let{protocol:r,source:i,params:n,selector:s}=w.parseRange(t.range);return uv.default.valid(s)&&(s=`${e}${t.range}`),w.makeDescriptor(t,w.makeRange({protocol:r,source:i,params:n,selector:s}))}async function S$(t,{project:e,target:r}){let i=new Map,n=s=>{let o=i.get(s.descriptorHash);return o||i.set(s.descriptorHash,o={descriptor:s,locators:[]}),o};for(let s of e.workspaces)if(r===er.PEER){let o=s.manifest.peerDependencies.get(t.identHash);o!==void 0&&n(o).locators.push(s.locator)}else{let o=s.manifest.dependencies.get(t.identHash),a=s.manifest.devDependencies.get(t.identHash);r===er.DEVELOPMENT?a!==void 0?n(a).locators.push(s.locator):o!==void 0&&n(o).locators.push(s.locator):o!==void 0?n(o).locators.push(s.locator):a!==void 0&&n(a).locators.push(s.locator)}return i}async function fv(t,{cwd:e,workspace:r}){return await MKe(async i=>{D.isAbsolute(t)||(t=D.relative(r.cwd,D.resolve(e,t)),t.match(/^\.{0,2}\//)||(t=`./${t}`));let{project:n}=r,s=await gv(w.makeIdent(null,"archive"),t,{project:r.project,cache:i,workspace:r});if(!s)throw new Error("Assertion failed: The descriptor should have been found");let o=new Br,a=n.configuration.makeResolver(),l=n.configuration.makeFetcher(),c={checksums:n.storedChecksums,project:n,cache:i,fetcher:l,report:o,resolver:a},u=a.bindDescriptor(s,r.anchoredLocator,c),g=w.convertDescriptorToLocator(u),f=await l.fetch(g,c),h=await ze.find(f.prefixPath,{baseFs:f.packageFs});if(!h.name)throw new Error("Target path doesn't have a name");return w.makeDescriptor(h.name,t)})}async function fp(t,{project:e,workspace:r,cache:i,target:n,modifier:s,strategies:o,maxResults:a=Infinity}){if(!(a>=0))throw new Error(`Invalid maxResults (${a})`);if(t.range!=="unknown")return{suggestions:[{descriptor:t,name:`Use ${w.prettyDescriptor(e.configuration,t)}`,reason:"(unambiguous explicit request)"}],rejections:[]};let l=typeof r!="undefined"&&r!==null&&r.manifest[n].get(t.identHash)||null,c=[],u=[],g=async f=>{try{await f()}catch(h){u.push(h)}};for(let f of o){if(c.length>=a)break;switch(f){case or.KEEP:await g(async()=>{l&&c.push({descriptor:l,name:`Keep ${w.prettyDescriptor(e.configuration,l)}`,reason:"(no changes)"})});break;case or.REUSE:await g(async()=>{for(let{descriptor:h,locators:p}of(await S$(t,{project:e,target:n})).values()){if(p.length===1&&p[0].locatorHash===r.anchoredLocator.locatorHash&&o.includes(or.KEEP))continue;let m=`(originally used by ${w.prettyLocator(e.configuration,p[0])}`;m+=p.length>1?` and ${p.length-1} other${p.length>2?"s":""})`:")",c.push({descriptor:h,name:`Reuse ${w.prettyDescriptor(e.configuration,h)}`,reason:m})}});break;case or.CACHE:await g(async()=>{for(let h of e.storedDescriptors.values())h.identHash===t.identHash&&c.push({descriptor:h,name:`Reuse ${w.prettyDescriptor(e.configuration,h)}`,reason:"(already used somewhere in the lockfile)"})});break;case or.PROJECT:await g(async()=>{if(r.manifest.name!==null&&t.identHash===r.manifest.name.identHash)return;let h=e.tryWorkspaceByIdent(t);h!==null&&c.push({descriptor:h.anchoredDescriptor,name:`Attach ${w.prettyWorkspace(e.configuration,h)}`,reason:`(local workspace at ${h.cwd})`})});break;case or.LATEST:await g(async()=>{if(t.range!=="unknown")c.push({descriptor:t,name:`Use ${w.prettyRange(e.configuration,t.range)}`,reason:"(explicit range requested)"});else if(n===er.PEER)c.push({descriptor:w.makeDescriptor(t,"*"),name:"Use *",reason:"(catch-all peer dependency pattern)"});else if(!e.configuration.get("enableNetwork"))c.push({descriptor:null,name:"Resolve from latest",reason:ae.pretty(e.configuration,"(unavailable because enableNetwork is toggled off)","grey")});else{let h=await gv(t,"latest",{project:e,cache:i,workspace:r,preserveModifier:!1});h&&(h=D$(h,s),c.push({descriptor:h,name:`Use ${w.prettyDescriptor(e.configuration,h)}`,reason:"(resolved from latest)"}))}});break}}return{suggestions:c.slice(0,a),rejections:u.slice(0,a)}}async function gv(t,e,{project:r,cache:i,workspace:n,preserveModifier:s=!0}){let o=w.makeDescriptor(t,e),a=new Br,l=r.configuration.makeFetcher(),c=r.configuration.makeResolver(),u={project:r,fetcher:l,cache:i,checksums:r.storedChecksums,report:a,skipIntegrityCheck:!0},g=V(P({},u),{resolver:c,fetchOptions:u}),f=c.bindDescriptor(o,n.anchoredLocator,g),h=await c.getCandidates(f,new Map,g);if(h.length===0)return null;let p=h[0],{protocol:m,source:I,params:y,selector:B}=w.parseRange(w.convertToManifestRange(p.reference));if(m===r.configuration.get("defaultProtocol")&&(m=null),uv.default.valid(B)&&s!==!1){let x=typeof s=="string"?s:o.range;B=b$(x,{project:r})+B}return w.makeDescriptor(p,w.makeRange({protocol:m,source:I,params:y,selector:B}))}async function MKe(t){return await N.mktempPromise(async e=>{let r=ce.create(e);return r.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await t(new ft(e,{configuration:r,check:!1,immutable:!1}))})}var hp=class extends ye{constructor(){super(...arguments);this.json=H.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.exact=H.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=H.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=H.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.dev=H.Boolean("-D,--dev",!1,{description:"Add a package as a dev dependency"});this.peer=H.Boolean("-P,--peer",!1,{description:"Add a package as a peer dependency"});this.optional=H.Boolean("-O,--optional",!1,{description:"Add / upgrade a package to an optional regular / peer dependency"});this.preferDev=H.Boolean("--prefer-dev",!1,{description:"Add / upgrade a package to a dev dependency"});this.interactive=H.Boolean("-i,--interactive",{description:"Reuse the specified package from other workspaces in the project"});this.cached=H.Boolean("--cached",!1,{description:"Reuse the highest version already used somewhere within the project"});this.mode=H.String("--mode",{description:"Change what artifacts installs generate",validator:ni(kr)});this.packages=H.Rest()}async execute(){var m;let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd),n=await ft.find(e);if(!i)throw new Ze(r.cwd,this.context.cwd);await r.restoreInstallState({restoreResolutions:!1});let s=(m=this.interactive)!=null?m:e.get("preferInteractive"),o=gp(this,r),a=[...s?[or.REUSE]:[],or.PROJECT,...this.cached?[or.CACHE]:[],or.LATEST],l=s?Infinity:1,c=await Promise.all(this.packages.map(async I=>{let y=I.match(/^\.{0,2}\//)?await fv(I,{cwd:this.context.cwd,workspace:i}):w.parseDescriptor(I),B=OKe(i,y,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional}),x=await fp(y,{project:r,workspace:i,cache:n,target:B,modifier:o,strategies:a,maxResults:l});return[y,x,B]})),u=await uo.start({configuration:e,stdout:this.context.stdout,suggestInstall:!1},async I=>{for(let[y,{suggestions:B,rejections:x}]of c)if(B.filter(L=>L.descriptor!==null).length===0){let[L]=x;if(typeof L=="undefined")throw new Error("Assertion failed: Expected an error to have been set");r.configuration.get("enableNetwork")?I.reportError(z.CANT_SUGGEST_RESOLUTIONS,`${w.prettyDescriptor(e,y)} can't be resolved to a satisfying range`):I.reportError(z.CANT_SUGGEST_RESOLUTIONS,`${w.prettyDescriptor(e,y)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),I.reportSeparator(),I.reportExceptionOnce(L)}});if(u.hasErrors())return u.exitCode();let g=!1,f=[],h=[];for(let[,{suggestions:I},y]of c){let B,x=I.filter(v=>v.descriptor!==null),F=x[0].descriptor,L=x.every(v=>w.areDescriptorsEqual(v.descriptor,F));x.length===1||L?B=F:(g=!0,{answer:B}=await(0,x$.prompt)({type:"select",name:"answer",message:"Which range do you want to use?",choices:I.map(({descriptor:v,name:q,reason:oe})=>v?{name:q,hint:oe,descriptor:v}:{name:q,hint:oe,disabled:!0}),onCancel:()=>process.exit(130),result(v){return this.find(v,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let T=i.manifest[y].get(B.identHash);(typeof T=="undefined"||T.descriptorHash!==B.descriptorHash)&&(i.manifest[y].set(B.identHash,B),this.optional&&(y==="dependencies"?i.manifest.ensureDependencyMeta(V(P({},B),{range:"unknown"})).optional=!0:y==="peerDependencies"&&(i.manifest.ensurePeerDependencyMeta(V(P({},B),{range:"unknown"})).optional=!0)),typeof T=="undefined"?f.push([i,y,B,a]):h.push([i,y,T,B]))}return await e.triggerMultipleHooks(I=>I.afterWorkspaceDependencyAddition,f),await e.triggerMultipleHooks(I=>I.afterWorkspaceDependencyReplacement,h),g&&this.context.stdout.write(` -`),(await xe.start({configuration:e,json:this.json,stdout:this.context.stdout,includeLogs:!this.context.quiet},async I=>{await r.install({cache:n,report:I,mode:this.mode})})).exitCode()}};hp.paths=[["add"]],hp.usage=he.Usage({description:"add dependencies to the project",details:"\n This command adds a package to the package.json for the nearest workspace.\n\n - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\n\n - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\n\n - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\n\n - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\"peerDependenciesMeta\": { \"\": { \"optional\": true } }`\n\n - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\n\n - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\n\n If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\n\n If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the later will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/features/protocols.\n ",examples:[["Add a regular package to the current workspace","$0 add lodash"],["Add a specific version for a package to the current workspace","$0 add lodash@1.2.3"],["Add a package from a GitHub repository (the master branch) to the current workspace using a URL","$0 add lodash@https://github.com/lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol","$0 add lodash@github:lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)","$0 add lodash@lodash/lodash"],["Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)","$0 add lodash-es@lodash/lodash#es"]]});var k$=hp;function OKe(t,e,{dev:r,peer:i,preferDev:n,optional:s}){let o=t.manifest[er.REGULAR].has(e.identHash),a=t.manifest[er.DEVELOPMENT].has(e.identHash),l=t.manifest[er.PEER].has(e.identHash);if((r||i)&&o)throw new me(`Package "${w.prettyIdent(t.project.configuration,e)}" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!r&&!i&&l)throw new me(`Package "${w.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(s&&a)throw new me(`Package "${w.prettyIdent(t.project.configuration,e)}" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(s&&!i&&l)throw new me(`Package "${w.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((r||n)&&s)throw new me(`Package "${w.prettyIdent(t.project.configuration,e)}" cannot simultaneously be a dev dependency and an optional dependency`);return i?er.PEER:r||n?er.DEVELOPMENT:o?er.REGULAR:a?er.DEVELOPMENT:er.REGULAR}var pp=class extends ye{constructor(){super(...arguments);this.verbose=H.Boolean("-v,--verbose",!1,{description:"Print both the binary name and the locator of the package that provides the binary"});this.json=H.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.name=H.String({required:!1})}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,locator:i}=await Re.find(e,this.context.cwd);if(await r.restoreInstallState(),this.name){let o=(await Qt.getPackageAccessibleBinaries(i,{project:r})).get(this.name);if(!o)throw new me(`Couldn't find a binary named "${this.name}" for package "${w.prettyLocator(e,i)}"`);let[,a]=o;return this.context.stdout.write(`${a} -`),0}return(await xe.start({configuration:e,json:this.json,stdout:this.context.stdout},async s=>{let o=await Qt.getPackageAccessibleBinaries(i,{project:r}),l=Array.from(o.keys()).reduce((c,u)=>Math.max(c,u.length),0);for(let[c,[u,g]]of o)s.reportJson({name:c,source:w.stringifyIdent(u),path:g});if(this.verbose)for(let[c,[u]]of o)s.reportInfo(null,`${c.padEnd(l," ")} ${w.prettyLocator(e,u)}`);else for(let c of o.keys())s.reportInfo(null,c)})).exitCode()}};pp.paths=[["bin"]],pp.usage=he.Usage({description:"get the path to a binary script",details:` - When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \`-v,--verbose\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary. - - When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive. - `,examples:[["List all the available binaries","$0 bin"],["Print the path to a specific binary","$0 bin eslint"]]});var P$=pp;var dp=class extends ye{constructor(){super(...arguments);this.mirror=H.Boolean("--mirror",!1,{description:"Remove the global cache files instead of the local cache files"});this.all=H.Boolean("--all",!1,{description:"Remove both the global cache files and the local cache files of the current project"})}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),r=await ft.find(e);return(await xe.start({configuration:e,stdout:this.context.stdout},async()=>{let n=(this.all||this.mirror)&&r.mirrorCwd!==null,s=!this.mirror;n&&(await N.removePromise(r.mirrorCwd),await e.triggerHook(o=>o.cleanGlobalArtifacts,e)),s&&await N.removePromise(r.cwd)})).exitCode()}};dp.paths=[["cache","clean"],["cache","clear"]],dp.usage=he.Usage({description:"remove the shared cache files",details:` - This command will remove all the files from the cache. - `,examples:[["Remove all the local archives","$0 cache clean"],["Remove all the archives stored in the ~/.yarn directory","$0 cache clean --mirror"]]});var v$=dp;var F$=re(by()),hv=re(require("util")),Cp=class extends ye{constructor(){super(...arguments);this.json=H.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.unsafe=H.Boolean("--no-redacted",!1,{description:"Don't redact secrets (such as tokens) from the output"});this.name=H.String()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),r=this.name.replace(/[.[].*$/,""),i=this.name.replace(/^[^.[]*/,"");if(typeof e.settings.get(r)=="undefined")throw new me(`Couldn't find a configuration settings named "${r}"`);let s=e.getSpecial(r,{hideSecrets:!this.unsafe,getNativePaths:!0}),o=pe.convertMapsToIndexableObjects(s),a=i?(0,F$.default)(o,i):o,l=await xe.start({configuration:e,includeFooter:!1,json:this.json,stdout:this.context.stdout},async c=>{c.reportJson(a)});if(!this.json){if(typeof a=="string")return this.context.stdout.write(`${a} -`),l.exitCode();hv.inspect.styles.name="cyan",this.context.stdout.write(`${(0,hv.inspect)(a,{depth:Infinity,colors:e.get("enableColors"),compact:!1})} -`)}return l.exitCode()}};Cp.paths=[["config","get"]],Cp.usage=he.Usage({description:"read a configuration settings",details:` - This command will print a configuration setting. - - Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \`--no-redacted\` to get the untransformed value. - `,examples:[["Print a simple configuration setting","yarn config get yarnPath"],["Print a complex configuration setting","yarn config get packageExtensions"],["Print a nested field from the configuration",`yarn config get 'npmScopes["my-company"].npmRegistryServer'`],["Print a token from the configuration","yarn config get npmAuthToken --no-redacted"],["Print a configuration setting as JSON","yarn config get packageExtensions --json"]]});var R$=Cp;var qee=re(Ev()),Jee=re(by()),Wee=re(Gee()),yv=re(require("util")),Ip=class extends ye{constructor(){super(...arguments);this.json=H.Boolean("--json",!1,{description:"Set complex configuration settings to JSON values"});this.home=H.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=H.String();this.value=H.String()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),r=()=>{if(!e.projectCwd)throw new me("This command must be run from within a project folder");return e.projectCwd},i=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof e.settings.get(i)=="undefined")throw new me(`Couldn't find a configuration settings named "${i}"`);let o=this.json?JSON.parse(this.value):this.value;await(this.home?h=>ce.updateHomeConfiguration(h):h=>ce.updateConfiguration(r(),h))(h=>{if(n){let p=(0,qee.default)(h);return(0,Wee.default)(p,this.name,o),p}else return V(P({},h),{[i]:o})});let c=(await ce.find(this.context.cwd,this.context.plugins)).getSpecial(i,{hideSecrets:!0,getNativePaths:!0}),u=pe.convertMapsToIndexableObjects(c),g=n?(0,Jee.default)(u,n):u;return(await xe.start({configuration:e,includeFooter:!1,stdout:this.context.stdout},async h=>{yv.inspect.styles.name="cyan",h.reportInfo(z.UNNAMED,`Successfully set ${this.name} to ${(0,yv.inspect)(g,{depth:Infinity,colors:e.get("enableColors"),compact:!1})}`)})).exitCode()}};Ip.paths=[["config","set"]],Ip.usage=he.Usage({description:"change a configuration settings",details:` - This command will set a configuration setting. - - When used without the \`--json\` flag, it can only set a simple configuration setting (a string, a number, or a boolean). - - When used with the \`--json\` flag, it can set both simple and complex configuration settings, including Arrays and Objects. - `,examples:[["Set a simple configuration setting (a string, a number, or a boolean)","yarn config set initScope myScope"],["Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag",'yarn config set initScope --json \\"myScope\\"'],["Set a complex configuration setting (an Array) using the `--json` flag",`yarn config set unsafeHttpWhitelist --json '["*.example.com", "example.com"]'`],["Set a complex configuration setting (an Object) using the `--json` flag",`yarn config set packageExtensions --json '{ "@babel/parser@*": { "dependencies": { "@babel/types": "*" } } }'`],["Set a nested configuration setting",'yarn config set npmScopes.company.npmRegistryServer "https://npm.example.com"'],["Set a nested configuration setting using indexed access for non-simple keys",`yarn config set 'npmRegistries["//npm.example.com"].npmAuthToken' "ffffffff-ffff-ffff-ffff-ffffffffffff"`]]});var zee=Ip;var ite=re(Ev()),nte=re(Kh()),ste=re(rte()),Ep=class extends ye{constructor(){super(...arguments);this.home=H.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=H.String()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),r=()=>{if(!e.projectCwd)throw new me("This command must be run from within a project folder");return e.projectCwd},i=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof e.settings.get(i)=="undefined")throw new me(`Couldn't find a configuration settings named "${i}"`);let o=this.home?l=>ce.updateHomeConfiguration(l):l=>ce.updateConfiguration(r(),l);return(await xe.start({configuration:e,includeFooter:!1,stdout:this.context.stdout},async l=>{let c=!1;await o(u=>{if(!(0,nte.default)(u,this.name))return l.reportWarning(z.UNNAMED,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),c=!0,u;let g=n?(0,ite.default)(u):P({},u);return(0,ste.default)(g,this.name),g}),c||l.reportInfo(z.UNNAMED,`Successfully unset ${this.name}`)})).exitCode()}};Ep.paths=[["config","unset"]],Ep.usage=he.Usage({description:"unset a configuration setting",details:` - This command will unset a configuration setting. - `,examples:[["Unset a simple configuration setting","yarn config unset initScope"],["Unset a complex configuration setting","yarn config unset packageExtensions"],["Unset a nested configuration setting","yarn config unset npmScopes.company.npmRegistryServer"]]});var ote=Ep;var Bv=re(require("util")),yp=class extends ye{constructor(){super(...arguments);this.verbose=H.Boolean("-v,--verbose",!1,{description:"Print the setting description on top of the regular key/value information"});this.why=H.Boolean("--why",!1,{description:"Print the reason why a setting is set a particular way"});this.json=H.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins,{strict:!1});return(await xe.start({configuration:e,json:this.json,stdout:this.context.stdout},async i=>{if(e.invalid.size>0&&!this.json){for(let[n,s]of e.invalid)i.reportError(z.INVALID_CONFIGURATION_KEY,`Invalid configuration key "${n}" in ${s}`);i.reportSeparator()}if(this.json){let n=pe.sortMap(e.settings.keys(),s=>s);for(let s of n){let o=e.settings.get(s),a=e.getSpecial(s,{hideSecrets:!0,getNativePaths:!0}),l=e.sources.get(s);this.verbose?i.reportJson({key:s,effective:a,source:l}):i.reportJson(P({key:s,effective:a,source:l},o))}}else{let n=pe.sortMap(e.settings.keys(),a=>a),s=n.reduce((a,l)=>Math.max(a,l.length),0),o={breakLength:Infinity,colors:e.get("enableColors"),maxArrayLength:2};if(this.why||this.verbose){let a=n.map(c=>{let u=e.settings.get(c);if(!u)throw new Error(`Assertion failed: This settings ("${c}") should have been registered`);let g=this.why?e.sources.get(c)||"":u.description;return[c,g]}),l=a.reduce((c,[,u])=>Math.max(c,u.length),0);for(let[c,u]of a)i.reportInfo(null,`${c.padEnd(s," ")} ${u.padEnd(l," ")} ${(0,Bv.inspect)(e.getSpecial(c,{hideSecrets:!0,getNativePaths:!0}),o)}`)}else for(let a of n)i.reportInfo(null,`${a.padEnd(s," ")} ${(0,Bv.inspect)(e.getSpecial(a,{hideSecrets:!0,getNativePaths:!0}),o)}`)}})).exitCode()}};yp.paths=[["config"]],yp.usage=he.Usage({description:"display the current configuration",details:` - This command prints the current active configuration settings. - `,examples:[["Print the active configuration settings","$0 config"]]});var ate=yp;vn();var wv={};et(wv,{Strategy:()=>cl,acceptedStrategies:()=>U2e,dedupe:()=>Qv});var Ate=re(Hi()),cl;(function(e){e.HIGHEST="highest"})(cl||(cl={}));var U2e=new Set(Object.values(cl)),Y2e={highest:async(t,e,{resolver:r,fetcher:i,resolveOptions:n,fetchOptions:s})=>{let o=new Map;for(let[a,l]of t.storedResolutions){let c=t.storedDescriptors.get(a);if(typeof c=="undefined")throw new Error(`Assertion failed: The descriptor (${a}) should have been registered`);pe.getSetWithDefault(o,c.identHash).add(l)}return Array.from(t.storedDescriptors.values(),async a=>{if(e.length&&!Ate.default.isMatch(w.stringifyIdent(a),e))return null;let l=t.storedResolutions.get(a.descriptorHash);if(typeof l=="undefined")throw new Error(`Assertion failed: The resolution (${a.descriptorHash}) should have been registered`);let c=t.originalPackages.get(l);if(typeof c=="undefined"||!r.shouldPersistResolution(c,n))return null;let u=o.get(a.identHash);if(typeof u=="undefined")throw new Error(`Assertion failed: The resolutions (${a.identHash}) should have been registered`);if(u.size===1)return null;let g=[...u].map(I=>{let y=t.originalPackages.get(I);if(typeof y=="undefined")throw new Error(`Assertion failed: The package (${I}) should have been registered`);return y.reference}),f=await r.getSatisfying(a,g,n),h=f==null?void 0:f[0];if(typeof h=="undefined")return null;let p=h.locatorHash,m=t.originalPackages.get(p);if(typeof m=="undefined")throw new Error(`Assertion failed: The package (${p}) should have been registered`);return p===l?null:{descriptor:a,currentPackage:c,updatedPackage:m}})}};async function Qv(t,{strategy:e,patterns:r,cache:i,report:n}){let{configuration:s}=t,o=new Br,a=s.makeResolver(),l=s.makeFetcher(),c={cache:i,checksums:t.storedChecksums,fetcher:l,project:t,report:o,skipIntegrityCheck:!0},u={project:t,resolver:a,report:o,fetchOptions:c};return await n.startTimerPromise("Deduplication step",async()=>{let f=await Y2e[e](t,r,{resolver:a,resolveOptions:u,fetcher:l,fetchOptions:c}),h=ci.progressViaCounter(f.length);n.reportProgress(h);let p=0;await Promise.all(f.map(y=>y.then(B=>{if(B===null)return;p++;let{descriptor:x,currentPackage:F,updatedPackage:L}=B;n.reportInfo(z.UNNAMED,`${w.prettyDescriptor(s,x)} can be deduped from ${w.prettyLocator(s,F)} to ${w.prettyLocator(s,L)}`),n.reportJson({descriptor:w.stringifyDescriptor(x),currentResolution:w.stringifyLocator(F),updatedResolution:w.stringifyLocator(L)}),t.storedResolutions.set(x.descriptorHash,L.locatorHash)}).finally(()=>h.tick())));let m;switch(p){case 0:m="No packages";break;case 1:m="One package";break;default:m=`${p} packages`}let I=ae.pretty(s,e,ae.Type.CODE);return n.reportInfo(z.UNNAMED,`${m} can be deduped using the ${I} strategy`),p})}var Bp=class extends ye{constructor(){super(...arguments);this.strategy=H.String("-s,--strategy",cl.HIGHEST,{description:"The strategy to use when deduping dependencies",validator:ni(cl)});this.check=H.Boolean("-c,--check",!1,{description:"Exit with exit code 1 when duplicates are found, without persisting the dependency tree"});this.json=H.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.mode=H.String("--mode",{description:"Change what artifacts installs generate",validator:ni(kr)});this.patterns=H.Rest()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r}=await Re.find(e,this.context.cwd),i=await ft.find(e);await r.restoreInstallState({restoreResolutions:!1});let n=0,s=await xe.start({configuration:e,includeFooter:!1,stdout:this.context.stdout,json:this.json},async o=>{n=await Qv(r,{strategy:this.strategy,patterns:this.patterns,cache:i,report:o})});return s.hasErrors()?s.exitCode():this.check?n?1:0:(await xe.start({configuration:e,stdout:this.context.stdout,json:this.json},async a=>{await r.install({cache:i,report:a,mode:this.mode})})).exitCode()}};Bp.paths=[["dedupe"]],Bp.usage=he.Usage({description:"deduplicate dependencies with overlapping ranges",details:"\n Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\n\n This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\n\n - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\n\n **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\n\n If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the later will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n ### In-depth explanation:\n\n Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\n\n Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\n ",examples:[["Dedupe all packages","$0 dedupe"],["Dedupe all packages using a specific strategy","$0 dedupe --strategy highest"],["Dedupe a specific package","$0 dedupe lodash"],["Dedupe all packages with the `@babel/*` scope","$0 dedupe '@babel/*'"],["Check for duplicates (can be used as a CI step)","$0 dedupe --check"]]});var lte=Bp;var eB=class extends he{async execute(){let{plugins:e}=await ce.find(this.context.cwd,this.context.plugins),r=[];for(let o of e){let{commands:a}=o[1];if(a){let c=ts.from(a).definitions();r.push([o[0],c])}}let i=this.cli.definitions(),n=(o,a)=>o.split(" ").slice(1).join()===a.split(" ").slice(1).join(),s=ute()["@yarnpkg/builder"].bundles.standard;for(let o of r){let a=o[1];for(let l of a)i.find(c=>n(c.path,l.path)).plugin={name:o[0],isDefault:s.includes(o[0])}}this.context.stdout.write(`${JSON.stringify(i,null,2)} -`)}};eB.paths=[["--clipanion=definitions"]];var gte=eB;var tB=class extends he{async execute(){this.context.stdout.write(this.cli.usage(null))}};tB.paths=[["help"],["--help"],["-h"]];var fte=tB;var bv=class extends he{constructor(){super(...arguments);this.leadingArgument=H.String();this.args=H.Proxy()}async execute(){if(this.leadingArgument.match(/[\\/]/)&&!w.tryParseIdent(this.leadingArgument)){let e=D.resolve(this.context.cwd,O.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:e})}else return await this.cli.run(["run",this.leadingArgument,...this.args])}},hte=bv;var rB=class extends he{async execute(){this.context.stdout.write(`${Er||""} -`)}};rB.paths=[["-v"],["--version"]];var pte=rB;var wp=class extends ye{constructor(){super(...arguments);this.commandName=H.String();this.args=H.Proxy()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,locator:i}=await Re.find(e,this.context.cwd);return await N.mktempPromise(async n=>await xc(this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await Qt.makeScriptEnv({project:r,locator:i,binFolder:n})}))}};wp.paths=[["exec"]],wp.usage=he.Usage({description:"execute a shell script",details:` - This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell. - - It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). - `,examples:[["Execute a single shell command","$0 exec echo Hello World"],["Execute a shell script",'$0 exec "tsc & babel src --out-dir lib"']]});var dte=wp;vn();var Qp=class extends ye{constructor(){super(...arguments);this.hash=H.String({required:!1,validator:QQ(wQ(),[bQ(/^p[0-9a-f]{5}$/)])})}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r}=await Re.find(e,this.context.cwd);return await r.restoreInstallState({restoreResolutions:!1}),await r.applyLightResolution(),typeof this.hash!="undefined"?await H2e(this.hash,r,{stdout:this.context.stdout}):(await xe.start({configuration:e,stdout:this.context.stdout,includeFooter:!1},async n=>{var o;let s=[([,a])=>w.stringifyLocator(r.storedPackages.get(a.subject)),([,a])=>w.stringifyIdent(a.requested)];for(let[a,l]of pe.sortMap(r.peerRequirements,s)){let c=r.storedPackages.get(l.subject);if(typeof c=="undefined")throw new Error("Assertion failed: Expected the subject package to have been registered");let u=r.storedPackages.get(l.rootRequester);if(typeof u=="undefined")throw new Error("Assertion failed: Expected the root package to have been registered");let g=(o=c.dependencies.get(l.requested.identHash))!=null?o:null,f=ae.pretty(e,a,ae.Type.CODE),h=w.prettyLocator(e,c),p=w.prettyIdent(e,l.requested),m=w.prettyIdent(e,u),I=l.allRequesters.length-1,y=`descendant${I===1?"":"s"}`,B=I>0?` and ${I} ${y}`:"",x=g!==null?"provides":"doesn't provide";n.reportInfo(null,`${f} \u2192 ${h} ${x} ${p} to ${m}${B}`)}})).exitCode()}};Qp.paths=[["explain","peer-requirements"]],Qp.usage=he.Usage({description:"explain a set of peer requirements",details:` - A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants. - - When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not. - - When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set. - - **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\`yarn explain peer-requirements\`). - `,examples:[["Explain the corresponding set of peer requirements for a hash","$0 explain peer-requirements p1a4ed"],["List all sets of peer requirements","$0 explain peer-requirements"]]});var Cte=Qp;async function H2e(t,e,r){let{configuration:i}=e,n=e.peerRequirements.get(t);if(typeof n=="undefined")throw new Error(`No peerDependency requirements found for hash: "${t}"`);return(await xe.start({configuration:i,stdout:r.stdout,includeFooter:!1},async o=>{var y,B;let a=e.storedPackages.get(n.subject);if(typeof a=="undefined")throw new Error("Assertion failed: Expected the subject package to have been registered");let l=e.storedPackages.get(n.rootRequester);if(typeof l=="undefined")throw new Error("Assertion failed: Expected the root package to have been registered");let c=(y=a.dependencies.get(n.requested.identHash))!=null?y:null,u=c!==null?e.storedResolutions.get(c.descriptorHash):null;if(typeof u=="undefined")throw new Error("Assertion failed: Expected the resolution to have been registered");let g=u!==null?e.storedPackages.get(u):null;if(typeof g=="undefined")throw new Error("Assertion failed: Expected the provided package to have been registered");let f=[...n.allRequesters.values()].map(x=>{let F=e.storedPackages.get(x);if(typeof F=="undefined")throw new Error("Assertion failed: Expected the package to be registered");let L=w.devirtualizeLocator(F),T=e.storedPackages.get(L.locatorHash);if(typeof T=="undefined")throw new Error("Assertion failed: Expected the package to be registered");let v=T.peerDependencies.get(n.requested.identHash);if(typeof v=="undefined")throw new Error("Assertion failed: Expected the peer dependency to be registered");return{pkg:F,peerDependency:v}});if(g!==null){let x=f.every(({peerDependency:F})=>Pt.satisfiesWithPrereleases(g.version,F.range));o.reportInfo(z.UNNAMED,`${w.prettyLocator(i,a)} provides ${w.prettyLocator(i,g)} with version ${w.prettyReference(i,(B=g.version)!=null?B:"")}, which ${x?"satisfies":"doesn't satisfy"} the following requirements:`)}else o.reportInfo(z.UNNAMED,`${w.prettyLocator(i,a)} doesn't provide ${w.prettyIdent(i,n.requested)}, breaking the following requirements:`);o.reportSeparator();let h=ae.mark(i),p=[];for(let{pkg:x,peerDependency:F}of pe.sortMap(f,L=>w.stringifyLocator(L.pkg))){let T=(g!==null?Pt.satisfiesWithPrereleases(g.version,F.range):!1)?h.Check:h.Cross;p.push({stringifiedLocator:w.stringifyLocator(x),prettyLocator:w.prettyLocator(i,x),prettyRange:w.prettyRange(i,F.range),mark:T})}let m=Math.max(...p.map(({stringifiedLocator:x})=>x.length)),I=Math.max(...p.map(({prettyRange:x})=>x.length));for(let{stringifiedLocator:x,prettyLocator:F,prettyRange:L,mark:T}of pe.sortMap(p,({stringifiedLocator:v})=>v))o.reportInfo(null,`${F.padEnd(m+(F.length-x.length)," ")} \u2192 ${L.padEnd(I," ")} ${T}`);p.length>1&&(o.reportSeparator(),o.reportInfo(z.UNNAMED,`Note: these requirements start with ${w.prettyLocator(e.configuration,l)}`))})).exitCode()}var mte=re(Hi()),bp=class extends ye{constructor(){super(...arguments);this.all=H.Boolean("-A,--all",!1,{description:"Print versions of a package from the whole project"});this.recursive=H.Boolean("-R,--recursive",!1,{description:"Print information for all packages, including transitive dependencies"});this.extra=H.Array("-X,--extra",[],{description:"An array of requests of extra data provided by plugins"});this.cache=H.Boolean("--cache",!1,{description:"Print information about the cache entry of a package (path, size, checksum)"});this.dependents=H.Boolean("--dependents",!1,{description:"Print all dependents for each matching package"});this.manifest=H.Boolean("--manifest",!1,{description:"Print data obtained by looking at the package archive (license, homepage, ...)"});this.nameOnly=H.Boolean("--name-only",!1,{description:"Only print the name for the matching packages"});this.virtuals=H.Boolean("--virtuals",!1,{description:"Print each instance of the virtual packages"});this.json=H.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=H.Rest()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd),n=await ft.find(e);if(!i&&!this.all)throw new Ze(r.cwd,this.context.cwd);await r.restoreInstallState();let s=new Set(this.extra);this.cache&&s.add("cache"),this.dependents&&s.add("dependents"),this.manifest&&s.add("manifest");let o=(x,{recursive:F})=>{let L=x.anchoredLocator.locatorHash,T=new Map,v=[L];for(;v.length>0;){let q=v.shift();if(T.has(q))continue;let oe=r.storedPackages.get(q);if(typeof oe=="undefined")throw new Error("Assertion failed: Expected the package to be registered");if(T.set(q,oe),w.isVirtualLocator(oe)&&v.push(w.devirtualizeLocator(oe).locatorHash),!(!F&&q!==L))for(let U of oe.dependencies.values()){let A=r.storedResolutions.get(U.descriptorHash);if(typeof A=="undefined")throw new Error("Assertion failed: Expected the resolution to be registered");v.push(A)}}return T.values()},a=({recursive:x})=>{let F=new Map;for(let L of r.workspaces)for(let T of o(L,{recursive:x}))F.set(T.locatorHash,T);return F.values()},l=({all:x,recursive:F})=>x&&F?r.storedPackages.values():x?a({recursive:F}):o(i,{recursive:F}),c=({all:x,recursive:F})=>{let L=l({all:x,recursive:F}),T=this.patterns.map(oe=>{let U=w.parseLocator(oe),A=mte.default.makeRe(w.stringifyIdent(U)),W=w.isVirtualLocator(U),ee=W?w.devirtualizeLocator(U):U;return ie=>{let J=w.stringifyIdent(ie);if(!A.test(J))return!1;if(U.reference==="unknown")return!0;let R=w.isVirtualLocator(ie),ve=R?w.devirtualizeLocator(ie):ie;return!(W&&R&&U.reference!==ie.reference||ee.reference!==ve.reference)}}),v=pe.sortMap([...L],oe=>w.stringifyLocator(oe));return{selection:v.filter(oe=>T.length===0||T.some(U=>U(oe))),sortedLookup:v}},{selection:u,sortedLookup:g}=c({all:this.all,recursive:this.recursive});if(u.length===0)throw new me("No package matched your request");let f=new Map;if(this.dependents)for(let x of g)for(let F of x.dependencies.values()){let L=r.storedResolutions.get(F.descriptorHash);if(typeof L=="undefined")throw new Error("Assertion failed: Expected the resolution to be registered");pe.getArrayWithDefault(f,L).push(x)}let h=new Map;for(let x of g){if(!w.isVirtualLocator(x))continue;let F=w.devirtualizeLocator(x);pe.getArrayWithDefault(h,F.locatorHash).push(x)}let p={},m={children:p},I=e.makeFetcher(),y={project:r,fetcher:I,cache:n,checksums:r.storedChecksums,report:new Br,skipIntegrityCheck:!0},B=[async(x,F,L)=>{var q,oe;if(!F.has("manifest"))return;let T=await I.fetch(x,y),v;try{v=await ze.find(T.prefixPath,{baseFs:T.packageFs})}finally{(q=T.releaseFs)==null||q.call(T)}L("Manifest",{License:ae.tuple(ae.Type.NO_HINT,v.license),Homepage:ae.tuple(ae.Type.URL,(oe=v.raw.homepage)!=null?oe:null)})},async(x,F,L)=>{var U;if(!F.has("cache"))return;let T=(U=r.storedChecksums.get(x.locatorHash))!=null?U:null,v=n.getLocatorPath(x,T),q;if(v!==null)try{q=N.statSync(v)}catch{}let oe=typeof q!="undefined"?[q.size,ae.Type.SIZE]:void 0;L("Cache",{Checksum:ae.tuple(ae.Type.NO_HINT,T),Path:ae.tuple(ae.Type.PATH,v),Size:oe})}];for(let x of u){let F=w.isVirtualLocator(x);if(!this.virtuals&&F)continue;let L={},T={value:[x,ae.Type.LOCATOR],children:L};if(p[w.stringifyLocator(x)]=T,this.nameOnly){delete T.children;continue}let v=h.get(x.locatorHash);typeof v!="undefined"&&(L.Instances={label:"Instances",value:ae.tuple(ae.Type.NUMBER,v.length)}),L.Version={label:"Version",value:ae.tuple(ae.Type.NO_HINT,x.version)};let q=(U,A)=>{let W={};if(L[U]=W,Array.isArray(A))W.children=A.map(ee=>({value:ee}));else{let ee={};W.children=ee;for(let[ie,J]of Object.entries(A))typeof J!="undefined"&&(ee[ie]={label:ie,value:J})}};if(!F){for(let U of B)await U(x,s,q);await e.triggerHook(U=>U.fetchPackageInfo,x,s,q)}x.bin.size>0&&!F&&q("Exported Binaries",[...x.bin.keys()].map(U=>ae.tuple(ae.Type.PATH,U)));let oe=f.get(x.locatorHash);typeof oe!="undefined"&&oe.length>0&&q("Dependents",oe.map(U=>ae.tuple(ae.Type.LOCATOR,U))),x.dependencies.size>0&&!F&&q("Dependencies",[...x.dependencies.values()].map(U=>{var ee;let A=r.storedResolutions.get(U.descriptorHash),W=typeof A!="undefined"&&(ee=r.storedPackages.get(A))!=null?ee:null;return ae.tuple(ae.Type.RESOLUTION,{descriptor:U,locator:W})})),x.peerDependencies.size>0&&F&&q("Peer dependencies",[...x.peerDependencies.values()].map(U=>{var ie,J;let A=x.dependencies.get(U.identHash),W=typeof A!="undefined"&&(ie=r.storedResolutions.get(A.descriptorHash))!=null?ie:null,ee=W!==null&&(J=r.storedPackages.get(W))!=null?J:null;return ae.tuple(ae.Type.RESOLUTION,{descriptor:U,locator:ee})}))}Un.emitTree(m,{configuration:e,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};bp.paths=[["info"]],bp.usage=he.Usage({description:"see information related to packages",details:"\n This command prints various information related to the specified packages, accepting glob patterns.\n\n By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\n\n Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\n\n Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\n ",examples:[["Show information about Lodash","$0 info lodash"]]});var Ite=bp;vn();var Dp=class extends ye{constructor(){super(...arguments);this.json=H.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.immutable=H.Boolean("--immutable",{description:"Abort with an error exit code if the lockfile was to be modified"});this.immutableCache=H.Boolean("--immutable-cache",{description:"Abort with an error exit code if the cache folder was to be modified"});this.checkCache=H.Boolean("--check-cache",!1,{description:"Always refetch the packages and ensure that their checksums are consistent"});this.inlineBuilds=H.Boolean("--inline-builds",{description:"Verbosely print the output of the build steps of dependencies"});this.mode=H.String("--mode",{description:"Change what artifacts installs generate",validator:ni(kr)});this.cacheFolder=H.String("--cache-folder",{hidden:!0});this.frozenLockfile=H.Boolean("--frozen-lockfile",{hidden:!0});this.ignoreEngines=H.Boolean("--ignore-engines",{hidden:!0});this.nonInteractive=H.Boolean("--non-interactive",{hidden:!0});this.preferOffline=H.Boolean("--prefer-offline",{hidden:!0});this.production=H.Boolean("--production",{hidden:!0});this.registry=H.String("--registry",{hidden:!0});this.silent=H.Boolean("--silent",{hidden:!0})}async execute(){var g;let e=await ce.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds!="undefined"&&e.useWithSource("",{enableInlineBuilds:this.inlineBuilds},e.startingCwd,{overwrite:!0});let r=!!process.env.NOW_BUILDER,i=!!process.env.NETLIFY,n=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,s=async(f,{error:h})=>{let p=await xe.start({configuration:e,stdout:this.context.stdout,includeFooter:!1},async m=>{h?m.reportError(z.DEPRECATED_CLI_SETTINGS,f):m.reportWarning(z.DEPRECATED_CLI_SETTINGS,f)});return p.hasErrors()?p.exitCode():null};if(typeof this.ignoreEngines!="undefined"){let f=await s("The --ignore-engines option is deprecated; engine checking isn't a core feature anymore",{error:!r});if(f!==null)return f}if(typeof this.registry!="undefined"){let f=await s("The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file",{error:!1});if(f!==null)return f}if(typeof this.preferOffline!="undefined"){let f=await s("The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead",{error:!r});if(f!==null)return f}if(typeof this.production!="undefined"){let f=await s("The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead",{error:!0});if(f!==null)return f}if(typeof this.nonInteractive!="undefined"){let f=await s("The --non-interactive option is deprecated",{error:!n});if(f!==null)return f}if(typeof this.frozenLockfile!="undefined"&&(await s("The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead",{error:!1}),this.immutable=this.frozenLockfile),typeof this.cacheFolder!="undefined"){let f=await s("The cache-folder option has been deprecated; use rc settings instead",{error:!i});if(f!==null)return f}let o=(g=this.immutable)!=null?g:e.get("enableImmutableInstalls");if(e.projectCwd!==null){let f=await xe.start({configuration:e,json:this.json,stdout:this.context.stdout,includeFooter:!1},async h=>{await j2e(e,o)&&(h.reportInfo(z.AUTOMERGE_SUCCESS,"Automatically fixed merge conflicts \u{1F44D}"),h.reportSeparator())});if(f.hasErrors())return f.exitCode()}if(e.projectCwd!==null&&typeof e.sources.get("nodeLinker")=="undefined"){let f=e.projectCwd,h;try{h=await N.readFilePromise(D.join(f,xt.lockfile),"utf8")}catch{}if(h==null?void 0:h.includes("yarn lockfile v1")){let p=await xe.start({configuration:e,json:this.json,stdout:this.context.stdout,includeFooter:!1},async m=>{m.reportInfo(z.AUTO_NM_SUCCESS,"Migrating from Yarn 1; automatically enabling the compatibility node-modules linker \u{1F44D}"),m.reportSeparator(),e.use("",{nodeLinker:"node-modules"},f,{overwrite:!0}),await ce.updateConfiguration(f,{nodeLinker:"node-modules"})});if(p.hasErrors())return p.exitCode()}}if(e.projectCwd!==null){let f=await xe.start({configuration:e,json:this.json,stdout:this.context.stdout,includeFooter:!1},async h=>{var p;((p=ce.telemetry)==null?void 0:p.isNew)&&(h.reportInfo(z.TELEMETRY_NOTICE,"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry"),h.reportInfo(z.TELEMETRY_NOTICE,`Run ${ae.pretty(e,"yarn config set --home enableTelemetry 0",ae.Type.CODE)} to disable`),h.reportSeparator())});if(f.hasErrors())return f.exitCode()}let{project:a,workspace:l}=await Re.find(e,this.context.cwd),c=await ft.find(e,{immutable:this.immutableCache,check:this.checkCache});if(!l)throw new Ze(a.cwd,this.context.cwd);return await a.restoreInstallState({restoreResolutions:!1}),(await xe.start({configuration:e,json:this.json,stdout:this.context.stdout,includeLogs:!0},async f=>{await a.install({cache:c,report:f,immutable:o,mode:this.mode})})).exitCode()}};Dp.paths=[["install"],he.Default],Dp.usage=he.Usage({description:"install the project dependencies",details:` - This command setup your project if needed. The installation is splitted in four different steps that each have their own characteristics: - - - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ). - - - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of \`cacheFolder\` in \`yarn config\` to see where are stored the cache files). - - - **Link:** Then we send the dependency tree information to internal plugins tasked from writing them on the disk in some form (for example by generating the .pnp.cjs file you might know). - - - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. - - Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches. - - If the \`--immutable\` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the \`immutablePatterns\` configuration setting). For backward compatibility we offer an alias under the name of \`--frozen-lockfile\`, but it will be removed in a later release. - - If the \`--immutable-cache\` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed). - - If the \`--check-cache\` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them. - - If the \`--inline-builds\` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments. - - If the \`--mode=\` option is set, Yarn will change which artifacts are generated. The modes currently supported are: - - - \`skip-build\` will not run the build scripts at all. Note that this is different from setting \`enableScripts\` to false because the later will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run. - - - \`update-lockfile\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost. - `,examples:[["Install the project","$0 install"],["Validate a project when using Zero-Installs","$0 install --immutable --immutable-cache"],["Validate a project when using Zero-Installs (slightly safer if you accept external PRs)","$0 install --immutable --immutable-cache --check-cache"]]});var Ete=Dp,G2e="|||||||",q2e=">>>>>>>",J2e="=======",yte="<<<<<<<";async function j2e(t,e){if(!t.projectCwd)return!1;let r=D.join(t.projectCwd,t.get("lockfileFilename"));if(!await N.existsPromise(r))return!1;let i=await N.readFilePromise(r,"utf8");if(!i.includes(yte))return!1;if(e)throw new _e(z.AUTOMERGE_IMMUTABLE,"Cannot autofix a lockfile when running an immutable install");let[n,s]=W2e(i),o,a;try{o=Kr(n),a=Kr(s)}catch(c){throw new _e(z.AUTOMERGE_FAILED_TO_PARSE,"The individual variants of the lockfile failed to parse")}let l=P(P({},o),a);for(let[c,u]of Object.entries(l))typeof u=="string"&&delete l[c];return await N.changeFilePromise(r,ro(l),{automaticNewlines:!0}),!0}function W2e(t){let e=[[],[]],r=t.split(/\r?\n/g),i=!1;for(;r.length>0;){let n=r.shift();if(typeof n=="undefined")throw new Error("Assertion failed: Some lines should remain");if(n.startsWith(yte)){for(;r.length>0;){let s=r.shift();if(typeof s=="undefined")throw new Error("Assertion failed: Some lines should remain");if(s===J2e){i=!1;break}else if(i||s.startsWith(G2e)){i=!0;continue}else e[0].push(s)}for(;r.length>0;){let s=r.shift();if(typeof s=="undefined")throw new Error("Assertion failed: Some lines should remain");if(s.startsWith(q2e))break;e[1].push(s)}}else e[0].push(n),e[1].push(n)}return[e[0].join(` -`),e[1].join(` -`)]}var Sp=class extends ye{constructor(){super(...arguments);this.all=H.Boolean("-A,--all",!1,{description:"Link all workspaces belonging to the target project to the current one"});this.private=H.Boolean("-p,--private",!1,{description:"Also link private workspaces belonging to the target project to the current one"});this.relative=H.Boolean("-r,--relative",!1,{description:"Link workspaces using relative paths instead of absolute paths"});this.destination=H.String()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd),n=await ft.find(e);if(!i)throw new Ze(r.cwd,this.context.cwd);await r.restoreInstallState({restoreResolutions:!1});let s=D.resolve(this.context.cwd,O.toPortablePath(this.destination)),o=await ce.find(s,this.context.plugins,{useRc:!1,strict:!1}),{project:a,workspace:l}=await Re.find(o,s);if(r.cwd===a.cwd)throw new me("Invalid destination; Can't link the project to itself");if(!l)throw new Ze(a.cwd,s);let c=r.topLevelWorkspace,u=[];if(this.all){for(let f of a.workspaces)f.manifest.name&&(!f.manifest.private||this.private)&&u.push(f);if(u.length===0)throw new me("No workspace found to be linked in the target project")}else{if(!l.manifest.name)throw new me("The target workspace doesn't have a name and thus cannot be linked");if(l.manifest.private&&!this.private)throw new me("The target workspace is marked private - use the --private flag to link it anyway");u.push(l)}for(let f of u){let h=w.stringifyIdent(f.locator),p=this.relative?D.relative(r.cwd,f.cwd):f.cwd;c.manifest.resolutions.push({pattern:{descriptor:{fullName:h}},reference:`portal:${p}`})}return(await xe.start({configuration:e,stdout:this.context.stdout},async f=>{await r.install({cache:n,report:f})})).exitCode()}};Sp.paths=[["link"]],Sp.usage=he.Usage({description:"connect the local project to another one",details:"\n This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\n ",examples:[["Register a remote workspace for use in the current project","$0 link ~/ts-loader"],["Register all workspaces from a remote project for use in the current project","$0 link ~/jest --all"]]});var Bte=Sp;var xp=class extends ye{constructor(){super(...arguments);this.args=H.Proxy()}async execute(){return this.cli.run(["exec","node",...this.args])}};xp.paths=[["node"]],xp.usage=he.Usage({description:"run node with the hook already setup",details:` - This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). - - The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version. - `,examples:[["Run a Node script","$0 node ./my-script.js"]]});var wte=xp;var Nte=re(require("os"));var xte=re(require("os"));var z2e="https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml";async function ul(t){let e=await Rt.get(z2e,{configuration:t});return Kr(e.toString())}var kp=class extends ye{constructor(){super(...arguments);this.json=H.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins);return(await xe.start({configuration:e,json:this.json,stdout:this.context.stdout},async i=>{let n=await ul(e);for(let s of Object.entries(n)){let[l,o]=s,a=o,{experimental:c}=a,u=Rr(a,["experimental"]);let g=l;c&&(g+=" [experimental]"),i.reportJson(P({name:l,experimental:c},u)),i.reportInfo(null,g)}})).exitCode()}};kp.paths=[["plugin","list"]],kp.usage=he.Usage({category:"Plugin-related commands",description:"list the available official plugins",details:"\n This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\n ",examples:[["List the official plugins","$0 plugin list"]]});var Qte=kp;var bte=re(cr()),Pp=class extends ye{constructor(){super(...arguments);this.onlyIfNeeded=H.Boolean("--only-if-needed",!1,{description:"Only lock the Yarn version if it isn't already locked"});this.version=H.String()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins);if(e.get("yarnPath")&&this.onlyIfNeeded)return 0;let r=()=>{if(typeof Er=="undefined")throw new me("The --install flag can only be used without explicit version specifier from the Yarn CLI");return`file://${process.argv[1]}`},i;if(this.version==="self")i=r();else if(this.version==="latest"||this.version==="berry"||this.version==="stable")i=`https://repo.yarnpkg.com/${await Dte(e,"stable")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version==="canary")i=`https://repo.yarnpkg.com/${await Dte(e,"canary")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version==="classic")i="https://nightly.yarnpkg.com/latest.js";else if(this.version.match(/^\.{0,2}[\\/]/)||O.isAbsolute(this.version))i=`file://${O.resolve(this.version)}`;else if(Pt.satisfiesWithPrereleases(this.version,">=2.0.0"))i=`https://repo.yarnpkg.com/${this.version}/packages/yarnpkg-cli/bin/yarn.js`;else if(Pt.satisfiesWithPrereleases(this.version,"^0.x || ^1.x"))i=`https://github.com/yarnpkg/yarn/releases/download/v${this.version}/yarn-${this.version}.js`;else if(Pt.validRange(this.version))i=`https://repo.yarnpkg.com/${await V2e(e,this.version)}/packages/yarnpkg-cli/bin/yarn.js`;else throw new me(`Invalid version descriptor "${this.version}"`);return(await xe.start({configuration:e,stdout:this.context.stdout,includeLogs:!this.context.quiet},async s=>{let o="file://",a;i.startsWith(o)?(s.reportInfo(z.UNNAMED,`Downloading ${ae.pretty(e,i,ds.URL)}`),a=await N.readFilePromise(O.toPortablePath(i.slice(o.length)))):(s.reportInfo(z.UNNAMED,`Retrieving ${ae.pretty(e,i,ds.PATH)}`),a=await Rt.get(i,{configuration:e})),await Dv(e,null,a,{report:s})})).exitCode()}};Pp.paths=[["set","version"]],Pp.usage=he.Usage({description:"lock the Yarn version used by the project",details:"\n This command will download a specific release of Yarn directly from the Yarn GitHub repository, will store it inside your project, and will change the `yarnPath` settings from your project `.yarnrc.yml` file to point to the new file.\n\n A very good use case for this command is to enforce the version of Yarn used by the any single member of your team inside a same project - by doing this you ensure that you have control on Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting a different behavior than you.\n\n The version specifier can be:\n\n - a tag:\n - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\n - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\n - `classic` -> the most recent classic (`^0.x || ^1.x`) release\n\n - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\n\n - a semver version (e.g. `2.4.1`, `1.22.1`)\n\n - a local file referenced through either a relative or absolute path\n\n - `self` -> the version used to invoke the command\n ",examples:[["Download the latest release from the Yarn repository","$0 set version latest"],["Download the latest canary release from the Yarn repository","$0 set version canary"],["Download the latest classic release from the Yarn repository","$0 set version classic"],["Download the most recent Yarn 3 build","$0 set version 3.x"],["Download a specific Yarn 2 build","$0 set version 2.0.0-rc.30"],["Switch back to a specific Yarn 1 release","$0 set version 1.22.1"],["Use a release from the local filesystem","$0 set version ./yarn.cjs"],["Download the version used to invoke the command","$0 set version self"]]});var Ste=Pp;async function V2e(t,e){let i=(await Rt.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0})).tags.filter(n=>Pt.satisfiesWithPrereleases(n,e));if(i.length===0)throw new me(`No matching release found for range ${ae.pretty(t,e,ae.Type.RANGE)}.`);return i[0]}async function Dte(t,e){let r=await Rt.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0});if(!r.latest[e])throw new me(`Tag ${ae.pretty(t,e,ae.Type.RANGE)} not found`);return r.latest[e]}async function Dv(t,e,r,{report:i}){var g;e===null&&await N.mktempPromise(async f=>{let h=D.join(f,"yarn.cjs");await N.writeFilePromise(h,r);let{stdout:p}=await Nr.execvp(process.execPath,[O.fromPortablePath(h),"--version"],{cwd:f,env:V(P({},process.env),{YARN_IGNORE_PATH:"1"})});if(e=p.trim(),!bte.default.valid(e))throw new Error(`Invalid semver version. ${ae.pretty(t,"yarn --version",ae.Type.CODE)} returned: -${e}`)});let n=(g=t.projectCwd)!=null?g:t.startingCwd,s=D.resolve(n,".yarn/releases"),o=D.resolve(s,`yarn-${e}.cjs`),a=D.relative(t.startingCwd,o),l=D.relative(n,o),c=t.get("yarnPath"),u=c===null||c.startsWith(`${s}/`);if(i.reportInfo(z.UNNAMED,`Saving the new release in ${ae.pretty(t,a,"magenta")}`),await N.removePromise(D.dirname(o)),await N.mkdirPromise(D.dirname(o),{recursive:!0}),await N.writeFilePromise(o,r),await N.chmodPromise(o,493),u){await ce.updateConfiguration(n,{yarnPath:l});let f=await ze.tryFind(n)||new ze;e&&pe.isTaggedYarnVersion(e)&&(f.packageManager=`yarn@${e}`);let h={};f.exportTo(h);let p=D.join(n,ze.fileName),m=`${JSON.stringify(h,null,f.indent)} -`;await N.changeFilePromise(p,m,{automaticNewlines:!0})}}var X2e=/^[0-9]+$/;function kte(t){return X2e.test(t)?`pull/${t}/head`:t}var Z2e=({repository:t,branch:e},r)=>[["git","init",O.fromPortablePath(r)],["git","remote","add","origin",t],["git","fetch","origin",kte(e)],["git","reset","--hard","FETCH_HEAD"]],_2e=({branch:t})=>[["git","fetch","origin",kte(t),"--force"],["git","reset","--hard","FETCH_HEAD"],["git","clean","-dfx"]],$2e=({plugins:t,noMinify:e},r)=>[["yarn","build:cli",...new Array().concat(...t.map(i=>["--plugin",D.resolve(r,i)])),...e?["--no-minify"]:[],"|"]],vp=class extends ye{constructor(){super(...arguments);this.installPath=H.String("--path",{description:"The path where the repository should be cloned to"});this.repository=H.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=H.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.plugins=H.Array("--plugin",[],{description:"An array of additional plugins that should be included in the bundle"});this.noMinify=H.Boolean("--no-minify",!1,{description:"Build a bundle for development (debugging) - non-minified and non-mangled"});this.force=H.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.skipPlugins=H.Boolean("--skip-plugins",!1,{description:"Skip updating the contrib plugins"})}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r}=await Re.find(e,this.context.cwd),i=typeof this.installPath!="undefined"?D.resolve(this.context.cwd,O.toPortablePath(this.installPath)):D.resolve(O.toPortablePath((0,xte.tmpdir)()),"yarnpkg-sources",Di.makeHash(this.repository).slice(0,6));return(await xe.start({configuration:e,stdout:this.context.stdout},async s=>{await xv(this,{configuration:e,report:s,target:i}),s.reportSeparator(),s.reportInfo(z.UNNAMED,"Building a fresh bundle"),s.reportSeparator(),await Fp($2e(this,i),{configuration:e,context:this.context,target:i}),s.reportSeparator();let o=D.resolve(i,"packages/yarnpkg-cli/bundles/yarn.js"),a=await N.readFilePromise(o);await Dv(e,"sources",a,{report:s}),this.skipPlugins||await eYe(this,{project:r,report:s,target:i})})).exitCode()}};vp.paths=[["set","version","from","sources"]],vp.usage=he.Usage({description:"build Yarn from master",details:` - This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project. - - By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \`--skip-plugins\` flag. - `,examples:[["Build Yarn from master","$0 set version from sources"]]});var Pte=vp;async function Fp(t,{configuration:e,context:r,target:i}){for(let[n,...s]of t){let o=s[s.length-1]==="|";if(o&&s.pop(),o)await Nr.pipevp(n,s,{cwd:i,stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,strict:!0});else{r.stdout.write(`${ae.pretty(e,` $ ${[n,...s].join(" ")}`,"grey")} -`);try{await Nr.execvp(n,s,{cwd:i,strict:!0})}catch(a){throw r.stdout.write(a.stdout||a.stack),a}}}}async function xv(t,{configuration:e,report:r,target:i}){let n=!1;if(!t.force&&N.existsSync(D.join(i,".git"))){r.reportInfo(z.UNNAMED,"Fetching the latest commits"),r.reportSeparator();try{await Fp(_2e(t),{configuration:e,context:t.context,target:i}),n=!0}catch(s){r.reportSeparator(),r.reportWarning(z.UNNAMED,"Repository update failed; we'll try to regenerate it")}}n||(r.reportInfo(z.UNNAMED,"Cloning the remote repository"),r.reportSeparator(),await N.removePromise(i),await N.mkdirPromise(i,{recursive:!0}),await Fp(Z2e(t,i),{configuration:e,context:t.context,target:i}))}async function eYe(t,{project:e,report:r,target:i}){let n=await ul(e.configuration),s=new Set(Object.keys(n));for(let o of e.configuration.plugins.keys())!s.has(o)||await Sv(o,t,{project:e,report:r,target:i})}var vte=re(cr()),Fte=re(require("url")),Rte=re(require("vm"));var Rp=class extends ye{constructor(){super(...arguments);this.name=H.String()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins);return(await xe.start({configuration:e,stdout:this.context.stdout},async i=>{let{project:n}=await Re.find(e,this.context.cwd),s,o;if(this.name.match(/^\.{0,2}[\\/]/)||O.isAbsolute(this.name)){let a=D.resolve(this.context.cwd,O.toPortablePath(this.name));i.reportInfo(z.UNNAMED,`Reading ${ae.pretty(e,a,ae.Type.PATH)}`),s=D.relative(n.cwd,a),o=await N.readFilePromise(a)}else{let a;if(this.name.match(/^https?:/)){try{new Fte.URL(this.name)}catch{throw new _e(z.INVALID_PLUGIN_REFERENCE,`Plugin specifier "${this.name}" is neither a plugin name nor a valid url`)}s=this.name,a=this.name}else{let l=w.parseLocator(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-"));if(l.reference!=="unknown"&&!vte.default.valid(l.reference))throw new _e(z.UNNAMED,"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.");let c=w.stringifyIdent(l),u=await ul(e);if(!Object.prototype.hasOwnProperty.call(u,c))throw new _e(z.PLUGIN_NAME_NOT_FOUND,`Couldn't find a plugin named "${c}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be referenced by their name; any other plugin will have to be referenced through its public url (for example https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js).`);s=c,a=u[c].url,l.reference!=="unknown"?a=a.replace(/\/master\//,`/${c}/${l.reference}/`):Er!==null&&(a=a.replace(/\/master\//,`/@yarnpkg/cli/${Er}/`))}i.reportInfo(z.UNNAMED,`Downloading ${ae.pretty(e,a,"green")}`),o=await Rt.get(a,{configuration:e})}await kv(s,o,{project:n,report:i})})).exitCode()}};Rp.paths=[["plugin","import"]],Rp.usage=he.Usage({category:"Plugin-related commands",description:"download a plugin",details:` - This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations. - - Three types of plugin references are accepted: - - - If the plugin is stored within the Yarn repository, it can be referenced by name. - - Third-party plugins can be referenced directly through their public urls. - - Local plugins can be referenced by their path on the disk. - - Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \`@yarnpkg/builder\` package). - `,examples:[['Download and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import @yarnpkg/plugin-exec"],['Download and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import exec"],["Download and activate a community plugin","$0 plugin import https://example.org/path/to/plugin.js"],["Activate a local plugin","$0 plugin import ./path/to/plugin.js"]]});var Lte=Rp;async function kv(t,e,{project:r,report:i}){let{configuration:n}=r,s={},o={exports:s};(0,Rte.runInNewContext)(e.toString(),{module:o,exports:s});let a=o.exports.name,l=`.yarn/plugins/${a}.cjs`,c=D.resolve(r.cwd,l);i.reportInfo(z.UNNAMED,`Saving the new plugin in ${ae.pretty(n,l,"magenta")}`),await N.mkdirPromise(D.dirname(c),{recursive:!0}),await N.writeFilePromise(c,e);let u={path:l,spec:t};await ce.updateConfiguration(r.cwd,g=>{let f=[],h=!1;for(let p of g.plugins||[]){let m=typeof p!="string"?p.path:p,I=D.resolve(r.cwd,O.toPortablePath(m)),{name:y}=pe.dynamicRequire(I);y!==a?f.push(p):(f.push(u),h=!0)}return h||f.push(u),V(P({},g),{plugins:f})})}var tYe=({pluginName:t,noMinify:e},r)=>[["yarn",`build:${t}`,...e?["--no-minify"]:[],"|"]],Lp=class extends ye{constructor(){super(...arguments);this.installPath=H.String("--path",{description:"The path where the repository should be cloned to"});this.repository=H.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=H.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.noMinify=H.Boolean("--no-minify",!1,{description:"Build a plugin for development (debugging) - non-minified and non-mangled"});this.force=H.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.name=H.String()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),r=typeof this.installPath!="undefined"?D.resolve(this.context.cwd,O.toPortablePath(this.installPath)):D.resolve(O.toPortablePath((0,Nte.tmpdir)()),"yarnpkg-sources",Di.makeHash(this.repository).slice(0,6));return(await xe.start({configuration:e,stdout:this.context.stdout},async n=>{let{project:s}=await Re.find(e,this.context.cwd),o=w.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),a=w.stringifyIdent(o),l=await ul(e);if(!Object.prototype.hasOwnProperty.call(l,a))throw new _e(z.PLUGIN_NAME_NOT_FOUND,`Couldn't find a plugin named "${a}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let c=a;await xv(this,{configuration:e,report:n,target:r}),await Sv(c,this,{project:s,report:n,target:r})})).exitCode()}};Lp.paths=[["plugin","import","from","sources"]],Lp.usage=he.Usage({category:"Plugin-related commands",description:"build a plugin from sources",details:` - This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations. - - The plugins can be referenced by their short name if sourced from the official Yarn repository. - `,examples:[['Build and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import from sources @yarnpkg/plugin-exec"],['Build and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import from sources exec"]]});var Mte=Lp;async function Sv(t,{context:e,noMinify:r},{project:i,report:n,target:s}){let o=t.replace(/@yarnpkg\//,""),{configuration:a}=i;n.reportSeparator(),n.reportInfo(z.UNNAMED,`Building a fresh ${o}`),n.reportSeparator(),await Fp(tYe({pluginName:o,noMinify:r},s),{configuration:a,context:e,target:s}),n.reportSeparator();let l=D.resolve(s,`packages/${o}/bundles/${t}.js`),c=await N.readFilePromise(l);await kv(t,c,{project:i,report:n})}var Np=class extends ye{constructor(){super(...arguments);this.name=H.String()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r}=await Re.find(e,this.context.cwd);return(await xe.start({configuration:e,stdout:this.context.stdout},async n=>{let s=this.name,o=w.parseIdent(s);if(!e.plugins.has(s))throw new me(`${w.prettyIdent(e,o)} isn't referenced by the current configuration`);let a=`.yarn/plugins/${s}.cjs`,l=D.resolve(r.cwd,a);N.existsSync(l)&&(n.reportInfo(z.UNNAMED,`Removing ${ae.pretty(e,a,ae.Type.PATH)}...`),await N.removePromise(l)),n.reportInfo(z.UNNAMED,"Updating the configuration..."),await ce.updateConfiguration(r.cwd,c=>{if(!Array.isArray(c.plugins))return c;let u=c.plugins.filter(g=>g.path!==a);return c.plugins.length===u.length?c:V(P({},c),{plugins:u})})})).exitCode()}};Np.paths=[["plugin","remove"]],Np.usage=he.Usage({category:"Plugin-related commands",description:"remove a plugin",details:` - This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration. - - **Note:** The plugins have to be referenced by their name property, which can be obtained using the \`yarn plugin runtime\` command. Shorthands are not allowed. - `,examples:[["Remove a plugin imported from the Yarn repository","$0 plugin remove @yarnpkg/plugin-typescript"],["Remove a plugin imported from a local file","$0 plugin remove my-local-plugin"]]});var Ote=Np;var Mp=class extends ye{constructor(){super(...arguments);this.json=H.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins);return(await xe.start({configuration:e,json:this.json,stdout:this.context.stdout},async i=>{for(let n of e.plugins.keys()){let s=this.context.plugins.plugins.has(n),o=n;s&&(o+=" [builtin]"),i.reportJson({name:n,builtin:s}),i.reportInfo(null,`${o}`)}})).exitCode()}};Mp.paths=[["plugin","runtime"]],Mp.usage=he.Usage({category:"Plugin-related commands",description:"list the active plugins",details:` - This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins. - `,examples:[["List the currently active plugins","$0 plugin runtime"]]});var Tte=Mp;var Op=class extends ye{constructor(){super(...arguments);this.idents=H.Rest()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd),n=await ft.find(e);if(!i)throw new Ze(r.cwd,this.context.cwd);let s=new Set;for(let a of this.idents)s.add(w.parseIdent(a).identHash);if(await r.restoreInstallState({restoreResolutions:!1}),await r.resolveEverything({cache:n,report:new Br}),s.size>0)for(let a of r.storedPackages.values())s.has(a.identHash)&&r.storedBuildState.delete(a.locatorHash);else r.storedBuildState.clear();return(await xe.start({configuration:e,stdout:this.context.stdout,includeLogs:!this.context.quiet},async a=>{await r.install({cache:n,report:a})})).exitCode()}};Op.paths=[["rebuild"]],Op.usage=he.Usage({description:"rebuild the project's native packages",details:` - This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again. - - Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future). - - By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory. - `,examples:[["Rebuild all packages","$0 rebuild"],["Rebuild fsevents only","$0 rebuild fsevents"]]});var Kte=Op;var Pv=re(Hi());vn();var Tp=class extends ye{constructor(){super(...arguments);this.all=H.Boolean("-A,--all",!1,{description:"Apply the operation to all workspaces from the current project"});this.mode=H.String("--mode",{description:"Change what artifacts installs generate",validator:ni(kr)});this.patterns=H.Rest()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd),n=await ft.find(e);if(!i)throw new Ze(r.cwd,this.context.cwd);await r.restoreInstallState({restoreResolutions:!1});let s=this.all?r.workspaces:[i],o=[er.REGULAR,er.DEVELOPMENT,er.PEER],a=[],l=!1,c=[];for(let h of this.patterns){let p=!1,m=w.parseIdent(h);for(let I of s){let y=[...I.manifest.peerDependenciesMeta.keys()];for(let B of(0,Pv.default)(y,h))I.manifest.peerDependenciesMeta.delete(B),l=!0,p=!0;for(let B of o){let x=I.manifest.getForScope(B),F=[...x.values()].map(L=>w.stringifyIdent(L));for(let L of(0,Pv.default)(F,w.stringifyIdent(m))){let{identHash:T}=w.parseIdent(L),v=x.get(T);if(typeof v=="undefined")throw new Error("Assertion failed: Expected the descriptor to be registered");I.manifest[B].delete(T),c.push([I,B,v]),l=!0,p=!0}}}p||a.push(h)}let u=a.length>1?"Patterns":"Pattern",g=a.length>1?"don't":"doesn't",f=this.all?"any":"this";if(a.length>0)throw new me(`${u} ${ae.prettyList(e,a,ds.CODE)} ${g} match any packages referenced by ${f} workspace`);return l?(await e.triggerMultipleHooks(p=>p.afterWorkspaceDependencyRemoval,c),(await xe.start({configuration:e,stdout:this.context.stdout},async p=>{await r.install({cache:n,report:p,mode:this.mode})})).exitCode()):0}};Tp.paths=[["remove"]],Tp.usage=he.Usage({description:"remove dependencies from the project",details:` - This command will remove the packages matching the specified patterns from the current workspace. - - If the \`--mode=\` option is set, Yarn will change which artifacts are generated. The modes currently supported are: - - - \`skip-build\` will not run the build scripts at all. Note that this is different from setting \`enableScripts\` to false because the later will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run. - - - \`update-lockfile\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost. - - This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them. - `,examples:[["Remove a dependency from the current project","$0 remove lodash"],["Remove a dependency from all workspaces at once","$0 remove lodash --all"],["Remove all dependencies starting with `eslint-`","$0 remove 'eslint-*'"],["Remove all dependencies with the `@babel` scope","$0 remove '@babel/*'"],["Remove all dependencies matching `react-dom` or `react-helmet`","$0 remove 'react-{dom,helmet}'"]]});var Ute=Tp;var Yte=re(require("util")),iB=class extends ye{async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd);if(!i)throw new Ze(r.cwd,this.context.cwd);return(await xe.start({configuration:e,stdout:this.context.stdout},async s=>{let o=i.manifest.scripts,a=pe.sortMap(o.keys(),u=>u),l={breakLength:Infinity,colors:e.get("enableColors"),maxArrayLength:2},c=a.reduce((u,g)=>Math.max(u,g.length),0);for(let[u,g]of o.entries())s.reportInfo(null,`${u.padEnd(c," ")} ${(0,Yte.inspect)(g,l)}`)})).exitCode()}};iB.paths=[["run"]];var Hte=iB;var Kp=class extends ye{constructor(){super(...arguments);this.inspect=H.String("--inspect",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.inspectBrk=H.String("--inspect-brk",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.topLevel=H.Boolean("-T,--top-level",!1,{hidden:!0});this.binariesOnly=H.Boolean("-B,--binaries-only",!1,{hidden:!0});this.silent=H.Boolean("--silent",{hidden:!0});this.scriptName=H.String();this.args=H.Proxy()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i,locator:n}=await Re.find(e,this.context.cwd);await r.restoreInstallState();let s=this.topLevel?r.topLevelWorkspace.anchoredLocator:n;if(!this.binariesOnly&&await Qt.hasPackageScript(s,this.scriptName,{project:r}))return await Qt.executePackageScript(s,this.scriptName,this.args,{project:r,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let o=await Qt.getPackageAccessibleBinaries(s,{project:r});if(o.get(this.scriptName)){let l=[];return this.inspect&&(typeof this.inspect=="string"?l.push(`--inspect=${this.inspect}`):l.push("--inspect")),this.inspectBrk&&(typeof this.inspectBrk=="string"?l.push(`--inspect-brk=${this.inspectBrk}`):l.push("--inspect-brk")),await Qt.executePackageAccessibleBinary(s,this.scriptName,this.args,{cwd:this.context.cwd,project:r,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:l,packageAccessibleBinaries:o})}if(!this.topLevel&&!this.binariesOnly&&i&&this.scriptName.includes(":")){let c=(await Promise.all(r.workspaces.map(async u=>u.manifest.scripts.has(this.scriptName)?u:null))).filter(u=>u!==null);if(c.length===1)return await Qt.executeWorkspaceScript(c[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName==="node-gyp"?new me(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${w.prettyLocator(e,n)}). This typically happens because some package depends on "node-gyp" to build itself, but didn't list it in their dependencies. To fix that, please run "yarn add node-gyp" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new me(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${w.prettyLocator(e,n)}).`);{if(this.scriptName==="global")throw new me("The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead");let l=[this.scriptName].concat(this.args);for(let[c,u]of lu)for(let g of u)if(l.length>=g.length&&JSON.stringify(l.slice(0,g.length))===JSON.stringify(g))throw new me(`Couldn't find a script named "${this.scriptName}", but a matching command can be found in the ${c} plugin. You can install it with "yarn plugin import ${c}".`);throw new me(`Couldn't find a script named "${this.scriptName}".`)}}};Kp.paths=[["run"]],Kp.usage=he.Usage({description:"run a script defined in the package.json",details:` - This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace: - - - If the \`scripts\` field from your local package.json contains a matching script name, its definition will get executed. - - - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed. - - - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed. - - Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax). - `,examples:[["Run the tests from the local workspace","$0 run test"],['Same thing, but without the "run" keyword',"$0 test"],["Inspect Webpack while running","$0 run --inspect-brk webpack"]]});var jte=Kp;var Up=class extends ye{constructor(){super(...arguments);this.save=H.Boolean("-s,--save",!1,{description:"Persist the resolution inside the top-level manifest"});this.descriptor=H.String();this.resolution=H.String()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd),n=await ft.find(e);if(await r.restoreInstallState({restoreResolutions:!1}),!i)throw new Ze(r.cwd,this.context.cwd);let s=w.parseDescriptor(this.descriptor,!0),o=w.makeDescriptor(s,this.resolution);return r.storedDescriptors.set(s.descriptorHash,s),r.storedDescriptors.set(o.descriptorHash,o),r.resolutionAliases.set(s.descriptorHash,o.descriptorHash),(await xe.start({configuration:e,stdout:this.context.stdout},async l=>{await r.install({cache:n,report:l})})).exitCode()}};Up.paths=[["set","resolution"]],Up.usage=he.Usage({description:"enforce a package resolution",details:'\n This command updates the resolution table so that `descriptor` is resolved by `resolution`.\n\n Note that by default this command only affect the current resolution table - meaning that this "manual override" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, add the `-s,--save` flag which will also edit the `resolutions` field from your top-level manifest.\n\n Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\n ',examples:[["Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0","$0 set resolution lodash@npm:^1.2.3 1.5.0"]]});var Gte=Up;var qte=re(Hi()),Yp=class extends ye{constructor(){super(...arguments);this.all=H.Boolean("-A,--all",!1,{description:"Unlink all workspaces belonging to the target project from the current one"});this.leadingArguments=H.Rest()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd),n=await ft.find(e);if(!i)throw new Ze(r.cwd,this.context.cwd);let s=r.topLevelWorkspace,o=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:l,reference:c}of s.manifest.resolutions)c.startsWith("portal:")&&o.add(l.descriptor.fullName);if(this.leadingArguments.length>0)for(let l of this.leadingArguments){let c=D.resolve(this.context.cwd,O.toPortablePath(l));if(pe.isPathLike(l)){let u=await ce.find(c,this.context.plugins,{useRc:!1,strict:!1}),{project:g,workspace:f}=await Re.find(u,c);if(!f)throw new Ze(g.cwd,c);if(this.all){for(let h of g.workspaces)h.manifest.name&&o.add(w.stringifyIdent(h.locator));if(o.size===0)throw new me("No workspace found to be unlinked in the target project")}else{if(!f.manifest.name)throw new me("The target workspace doesn't have a name and thus cannot be unlinked");o.add(w.stringifyIdent(f.locator))}}else{let u=[...s.manifest.resolutions.map(({pattern:g})=>g.descriptor.fullName)];for(let g of(0,qte.default)(u,l))o.add(g)}}return s.manifest.resolutions=s.manifest.resolutions.filter(({pattern:l})=>!o.has(l.descriptor.fullName)),(await xe.start({configuration:e,stdout:this.context.stdout},async l=>{await r.install({cache:n,report:l})})).exitCode()}};Yp.paths=[["unlink"]],Yp.usage=he.Usage({description:"disconnect the local project from another one",details:` - This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments. - `,examples:[["Unregister a remote workspace in the current project","$0 unlink ~/ts-loader"],["Unregister all workspaces from a remote project in the current project","$0 unlink ~/jest --all"],["Unregister all previously linked workspaces","$0 unlink --all"],["Unregister all workspaces matching a glob","$0 unlink '@babel/*' 'pkg-{a,b}'"]]});var Jte=Yp;var Wte=re(up()),vv=re(Hi());vn();var xu=class extends ye{constructor(){super(...arguments);this.interactive=H.Boolean("-i,--interactive",{description:"Offer various choices, depending on the detected upgrade paths"});this.exact=H.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=H.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=H.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.recursive=H.Boolean("-R,--recursive",!1,{description:"Resolve again ALL resolutions for those packages"});this.mode=H.String("--mode",{description:"Change what artifacts installs generate",validator:ni(kr)});this.patterns=H.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd),n=await ft.find(e);if(!i)throw new Ze(r.cwd,this.context.cwd);await r.restoreInstallState({restoreResolutions:!1});let s=[...r.storedDescriptors.values()],o=s.map(u=>w.stringifyIdent(u)),a=new Set;for(let u of this.patterns){if(w.parseDescriptor(u).range!=="unknown")throw new me("Ranges aren't allowed when using --recursive");for(let g of(0,vv.default)(o,u)){let f=w.parseIdent(g);a.add(f.identHash)}}let l=s.filter(u=>a.has(u.identHash));for(let u of l)r.storedDescriptors.delete(u.descriptorHash),r.storedResolutions.delete(u.descriptorHash);return(await xe.start({configuration:e,stdout:this.context.stdout},async u=>{await r.install({cache:n,report:u})})).exitCode()}async executeUpClassic(){var m;let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd),n=await ft.find(e);if(!i)throw new Ze(r.cwd,this.context.cwd);await r.restoreInstallState({restoreResolutions:!1});let s=(m=this.interactive)!=null?m:e.get("preferInteractive"),o=gp(this,r),a=s?[or.KEEP,or.REUSE,or.PROJECT,or.LATEST]:[or.PROJECT,or.LATEST],l=[],c=[];for(let I of this.patterns){let y=!1,B=w.parseDescriptor(I);for(let x of r.workspaces)for(let F of[er.REGULAR,er.DEVELOPMENT]){let T=[...x.manifest.getForScope(F).values()].map(v=>w.stringifyIdent(v));for(let v of(0,vv.default)(T,w.stringifyIdent(B))){let q=w.parseIdent(v),oe=x.manifest[F].get(q.identHash);if(typeof oe=="undefined")throw new Error("Assertion failed: Expected the descriptor to be registered");let U=w.makeDescriptor(q,B.range);l.push(Promise.resolve().then(async()=>[x,F,oe,await fp(U,{project:r,workspace:x,cache:n,target:F,modifier:o,strategies:a})])),y=!0}}y||c.push(I)}if(c.length>1)throw new me(`Patterns ${ae.prettyList(e,c,ds.CODE)} don't match any packages referenced by any workspace`);if(c.length>0)throw new me(`Pattern ${ae.prettyList(e,c,ds.CODE)} doesn't match any packages referenced by any workspace`);let u=await Promise.all(l),g=await uo.start({configuration:e,stdout:this.context.stdout,suggestInstall:!1},async I=>{for(let[,,y,{suggestions:B,rejections:x}]of u){let F=B.filter(L=>L.descriptor!==null);if(F.length===0){let[L]=x;if(typeof L=="undefined")throw new Error("Assertion failed: Expected an error to have been set");let T=this.cli.error(L);r.configuration.get("enableNetwork")?I.reportError(z.CANT_SUGGEST_RESOLUTIONS,`${w.prettyDescriptor(e,y)} can't be resolved to a satisfying range - -${T}`):I.reportError(z.CANT_SUGGEST_RESOLUTIONS,`${w.prettyDescriptor(e,y)} can't be resolved to a satisfying range (note: network resolution has been disabled) - -${T}`)}else F.length>1&&!s&&I.reportError(z.CANT_SUGGEST_RESOLUTIONS,`${w.prettyDescriptor(e,y)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(g.hasErrors())return g.exitCode();let f=!1,h=[];for(let[I,y,,{suggestions:B}]of u){let x,F=B.filter(q=>q.descriptor!==null),L=F[0].descriptor,T=F.every(q=>w.areDescriptorsEqual(q.descriptor,L));F.length===1||T?x=L:(f=!0,{answer:x}=await(0,Wte.prompt)({type:"select",name:"answer",message:`Which range to you want to use in ${w.prettyWorkspace(e,I)} \u276F ${y}?`,choices:B.map(({descriptor:q,name:oe,reason:U})=>q?{name:oe,hint:U,descriptor:q}:{name:oe,hint:U,disabled:!0}),onCancel:()=>process.exit(130),result(q){return this.find(q,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let v=I.manifest[y].get(x.identHash);if(typeof v=="undefined")throw new Error("Assertion failed: This descriptor should have a matching entry");if(v.descriptorHash!==x.descriptorHash)I.manifest[y].set(x.identHash,x),h.push([I,y,v,x]);else{let q=e.makeResolver(),oe={project:r,resolver:q},U=q.bindDescriptor(v,I.anchoredLocator,oe);r.forgetResolution(U)}}return await e.triggerMultipleHooks(I=>I.afterWorkspaceDependencyReplacement,h),f&&this.context.stdout.write(` -`),(await xe.start({configuration:e,stdout:this.context.stdout},async I=>{await r.install({cache:n,report:I,mode:this.mode})})).exitCode()}};xu.paths=[["up"]],xu.usage=he.Usage({description:"upgrade dependencies across the project",details:"\n This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\n\n If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\n\n If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\n\n The, `-C,--caret`, `-E,--exact` and `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the later will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\n\n This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\n ",examples:[["Upgrade all instances of lodash to the latest release","$0 up lodash"],["Upgrade all instances of lodash to the latest release, but ask confirmation for each","$0 up lodash -i"],["Upgrade all instances of lodash to 1.2.3","$0 up lodash@1.2.3"],["Upgrade all instances of packages with the `@babel` scope to the latest release","$0 up '@babel/*'"],["Upgrade all instances of packages containing the word `jest` to the latest release","$0 up '*jest*'"],["Upgrade all instances of packages with the `@babel` scope to 7.0.0","$0 up '@babel/*@7.0.0'"]]}),xu.schema=[DQ("recursive",$a.Forbids,["interactive","exact","tilde","caret"],{ignore:[void 0,!1]})];var zte=xu;var Hp=class extends ye{constructor(){super(...arguments);this.recursive=H.Boolean("-R,--recursive",!1,{description:"List, for each workspace, what are all the paths that lead to the dependency"});this.json=H.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.peers=H.Boolean("--peers",!1,{description:"Also print the peer dependencies that match the specified name"});this.package=H.String()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd);if(!i)throw new Ze(r.cwd,this.context.cwd);await r.restoreInstallState();let n=w.parseIdent(this.package).identHash,s=this.recursive?iYe(r,n,{configuration:e,peers:this.peers}):rYe(r,n,{configuration:e,peers:this.peers});Un.emitTree(s,{configuration:e,stdout:this.context.stdout,json:this.json,separators:1})}};Hp.paths=[["why"]],Hp.usage=he.Usage({description:"display the reason why a package is needed",details:` - This command prints the exact reasons why a package appears in the dependency tree. - - If \`-R,--recursive\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named "Foo" when looking for "Bar", it means that "Foo" already got printed higher in the tree. - `,examples:[["Explain why lodash is used in your project","$0 why lodash"]]});var Vte=Hp;function rYe(t,e,{configuration:r,peers:i}){let n=pe.sortMap(t.storedPackages.values(),a=>w.stringifyLocator(a)),s={},o={children:s};for(let a of n){let l={},c=null;for(let u of a.dependencies.values()){if(!i&&a.peerDependencies.has(u.identHash))continue;let g=t.storedResolutions.get(u.descriptorHash);if(!g)throw new Error("Assertion failed: The resolution should have been registered");let f=t.storedPackages.get(g);if(!f)throw new Error("Assertion failed: The package should have been registered");if(f.identHash!==e)continue;if(c===null){let p=w.stringifyLocator(a);s[p]={value:[a,ae.Type.LOCATOR],children:l}}let h=w.stringifyLocator(f);l[h]={value:[{descriptor:u,locator:f},ae.Type.DEPENDENT]}}}return o}function iYe(t,e,{configuration:r,peers:i}){let n=pe.sortMap(t.workspaces,f=>w.stringifyLocator(f.anchoredLocator)),s=new Set,o=new Set,a=f=>{if(s.has(f.locatorHash))return o.has(f.locatorHash);if(s.add(f.locatorHash),f.identHash===e)return o.add(f.locatorHash),!0;let h=!1;f.identHash===e&&(h=!0);for(let p of f.dependencies.values()){if(!i&&f.peerDependencies.has(p.identHash))continue;let m=t.storedResolutions.get(p.descriptorHash);if(!m)throw new Error("Assertion failed: The resolution should have been registered");let I=t.storedPackages.get(m);if(!I)throw new Error("Assertion failed: The package should have been registered");a(I)&&(h=!0)}return h&&o.add(f.locatorHash),h};for(let f of n){let h=t.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error("Assertion failed: The package should have been registered");a(h)}let l=new Set,c={},u={children:c},g=(f,h,p)=>{if(!o.has(f.locatorHash))return;let m=p!==null?ae.tuple(ae.Type.DEPENDENT,{locator:f,descriptor:p}):ae.tuple(ae.Type.LOCATOR,f),I={},y={value:m,children:I},B=w.stringifyLocator(f);if(h[B]=y,!l.has(f.locatorHash)&&(l.add(f.locatorHash),!(p!==null&&t.tryWorkspaceByLocator(f))))for(let x of f.dependencies.values()){if(!i&&f.peerDependencies.has(x.identHash))continue;let F=t.storedResolutions.get(x.descriptorHash);if(!F)throw new Error("Assertion failed: The resolution should have been registered");let L=t.storedPackages.get(F);if(!L)throw new Error("Assertion failed: The package should have been registered");g(L,I,x)}};for(let f of n){let h=t.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error("Assertion failed: The package should have been registered");g(h,c,null)}return u}var jp=class extends ye{constructor(){super(...arguments);this.verbose=H.Boolean("-v,--verbose",!1,{description:"Also return the cross-dependencies between workspaces"});this.json=H.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r}=await Re.find(e,this.context.cwd);return(await xe.start({configuration:e,json:this.json,stdout:this.context.stdout},async n=>{for(let s of r.workspaces){let{manifest:o}=s,a;if(this.verbose){let l=new Set,c=new Set;for(let u of ze.hardDependencies)for(let[g,f]of o.getForScope(u)){let h=r.tryWorkspaceByDescriptor(f);h===null?r.workspacesByIdent.has(g)&&c.add(f):l.add(h)}a={workspaceDependencies:Array.from(l).map(u=>u.relativeCwd),mismatchedWorkspaceDependencies:Array.from(c).map(u=>w.stringifyDescriptor(u))}}n.reportInfo(null,`${s.relativeCwd}`),n.reportJson(P({location:s.relativeCwd,name:o.name?w.stringifyIdent(o.name):null},a))}})).exitCode()}};jp.paths=[["workspaces","list"]],jp.usage=he.Usage({category:"Workspace-related commands",description:"list all available workspaces",details:"\n This command will print the list of all workspaces in the project. If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\n "});var Xte=jp;var Gp=class extends he{constructor(){super(...arguments);this.workspaceName=H.String();this.commandName=H.String();this.args=H.Proxy()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd);if(!i)throw new Ze(r.cwd,this.context.cwd);let n=r.workspaces,s=new Map(n.map(a=>{let l=w.convertToIdent(a.locator);return[w.stringifyIdent(l),a]})),o=s.get(this.workspaceName);if(o===void 0){let a=Array.from(s.keys()).sort();throw new me(`Workspace '${this.workspaceName}' not found. Did you mean any of the following: - - ${a.join(` - - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:o.cwd})}};Gp.paths=[["workspace"]],Gp.usage=he.Usage({category:"Workspace-related commands",description:"run a command within the specified workspace",details:` - This command will run a given sub-command on a single workspace. - `,examples:[["Add a package to a single workspace","yarn workspace components add -D react"],["Run build script on a single workspace","yarn workspace components run build"]]});var Zte=Gp;var nYe={configuration:{enableImmutableInstalls:{description:"If true (the default on CI), prevents the install command from modifying the lockfile",type:ge.BOOLEAN,default:_te.isCI},defaultSemverRangePrefix:{description:"The default save prefix: '^', '~' or ''",type:ge.STRING,values:["^","~",""],default:ll.CARET}},commands:[v$,R$,zee,ote,Gte,Pte,Ste,Xte,gte,fte,hte,pte,k$,P$,ate,lte,dte,Cte,Ite,Ete,Bte,Jte,wte,Mte,Lte,Ote,Qte,Tte,Kte,Ute,Hte,jte,zte,Vte,Zte]},sYe=nYe;var Mv={};et(Mv,{default:()=>aYe});var Me={optional:!0},$te=[["@tailwindcss/aspect-ratio@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@tailwindcss/line-clamp@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0",{peerDependencies:{postcss:"^8.0.0"}}],["@samverschueren/stream-to-observable@<0.3.1",{peerDependenciesMeta:{rxjs:Me,zenObservable:Me}}],["any-observable@<0.5.1",{peerDependenciesMeta:{rxjs:Me,zenObservable:Me}}],["@pm2/agent@<1.0.4",{dependencies:{debug:"*"}}],["debug@<4.2.0",{peerDependenciesMeta:{["supports-color"]:Me}}],["got@<11",{dependencies:{["@types/responselike"]:"^1.0.0",["@types/keyv"]:"^3.1.1"}}],["cacheable-lookup@<4.1.2",{dependencies:{["@types/keyv"]:"^3.1.1"}}],["http-link-dataloader@*",{peerDependencies:{graphql:"^0.13.1 || ^14.0.0"}}],["typescript-language-server@*",{dependencies:{["vscode-jsonrpc"]:"^5.0.1",["vscode-languageserver-protocol"]:"^3.15.0"}}],["postcss-syntax@*",{peerDependenciesMeta:{["postcss-html"]:Me,["postcss-jsx"]:Me,["postcss-less"]:Me,["postcss-markdown"]:Me,["postcss-scss"]:Me}}],["jss-plugin-rule-value-function@<=10.1.1",{dependencies:{["tiny-warning"]:"^1.0.2"}}],["ink-select-input@<4.1.0",{peerDependencies:{react:"^16.8.2"}}],["license-webpack-plugin@<2.3.18",{peerDependenciesMeta:{webpack:Me}}],["snowpack@>=3.3.0",{dependencies:{["node-gyp"]:"^7.1.0"}}],["promise-inflight@*",{peerDependenciesMeta:{bluebird:Me}}],["reactcss@*",{peerDependencies:{react:"*"}}],["react-color@<=2.19.0",{peerDependencies:{react:"*"}}],["gatsby-plugin-i18n@*",{dependencies:{ramda:"^0.24.1"}}],["useragent@^2.0.0",{dependencies:{request:"^2.88.0",yamlparser:"0.0.x",semver:"5.5.x"}}],["@apollographql/apollo-tools@*",{peerDependencies:{graphql:"^14.2.1 || ^15.0.0"}}],["material-table@^2.0.0",{dependencies:{"@babel/runtime":"^7.11.2"}}],["@babel/parser@*",{dependencies:{"@babel/types":"^7.8.3"}}],["fork-ts-checker-webpack-plugin@*",{peerDependencies:{eslint:">= 6",typescript:">= 2.7",webpack:">= 4","vue-template-compiler":"*"},peerDependenciesMeta:{eslint:Me,"vue-template-compiler":Me}}],["rc-animate@<=3.1.1",{peerDependencies:{react:">=16.9.0","react-dom":">=16.9.0"}}],["react-bootstrap-table2-paginator@*",{dependencies:{classnames:"^2.2.6"}}],["react-draggable@<=4.4.3",{peerDependencies:{react:">= 16.3.0","react-dom":">= 16.3.0"}}],["apollo-upload-client@<14",{peerDependencies:{graphql:"14 - 15"}}],["react-instantsearch-core@<=6.7.0",{peerDependencies:{algoliasearch:">= 3.1 < 5"}}],["react-instantsearch-dom@<=6.7.0",{dependencies:{"react-fast-compare":"^3.0.0"}}],["ws@<7.2.1",{peerDependencies:{bufferutil:"^4.0.1","utf-8-validate":"^5.0.2"},peerDependenciesMeta:{bufferutil:Me,"utf-8-validate":Me}}],["react-portal@*",{peerDependencies:{"react-dom":"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0"}}],["react-scripts@<=4.0.1",{peerDependencies:{react:"*"}}],["testcafe@<=1.10.1",{dependencies:{"@babel/plugin-transform-for-of":"^7.12.1","@babel/runtime":"^7.12.5"}}],["testcafe-legacy-api@<=4.2.0",{dependencies:{"testcafe-hammerhead":"^17.0.1","read-file-relative":"^1.2.0"}}],["@google-cloud/firestore@<=4.9.3",{dependencies:{protobufjs:"^6.8.6"}}],["gatsby-source-apiserver@*",{dependencies:{["babel-polyfill"]:"^6.26.0"}}],["@webpack-cli/package-utils@<=1.0.1-alpha.4",{dependencies:{["cross-spawn"]:"^7.0.3"}}],["gatsby-remark-prismjs@<3.3.28",{dependencies:{lodash:"^4"}}],["gatsby-plugin-favicon@*",{peerDependencies:{webpack:"*"}}],["gatsby-plugin-sharp@*",{dependencies:{debug:"^4.3.1"}}],["gatsby-react-router-scroll@*",{dependencies:{["prop-types"]:"^15.7.2"}}],["@rebass/forms@*",{dependencies:{["@styled-system/should-forward-prop"]:"^5.0.0"},peerDependencies:{react:"^16.8.6"}}],["rebass@*",{peerDependencies:{react:"^16.8.6"}}],["@ant-design/react-slick@<=0.28.3",{peerDependencies:{react:">=16.0.0"}}],["mqtt@<4.2.7",{dependencies:{duplexify:"^4.1.1"}}],["vue-cli-plugin-vuetify@<=2.0.3",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":Me,"vuetify-loader":Me}}],["vue-cli-plugin-vuetify@<=2.0.4",{dependencies:{"null-loader":"^3.0.0"}}],["@vuetify/cli-plugin-utils@<=0.0.4",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":Me}}],["@vue/cli-plugin-typescript@<=5.0.0-alpha.0",{dependencies:{"babel-loader":"^8.1.0"}}],["@vue/cli-plugin-typescript@<=5.0.0-beta.0",{dependencies:{"@babel/core":"^7.12.16"},peerDependencies:{"vue-template-compiler":"^2.0.0"},peerDependenciesMeta:{"vue-template-compiler":Me}}],["cordova-ios@<=6.3.0",{dependencies:{underscore:"^1.9.2"}}],["cordova-lib@<=10.0.1",{dependencies:{underscore:"^1.9.2"}}],["git-node-fs@*",{peerDependencies:{"js-git":"^0.7.8"},peerDependenciesMeta:{"js-git":Me}}],["consolidate@*",{peerDependencies:{velocityjs:"^2.0.1",tinyliquid:"^0.2.34","liquid-node":"^3.0.1",jade:"^1.11.0","then-jade":"*",dust:"^0.3.0","dustjs-helpers":"^1.7.4","dustjs-linkedin":"^2.7.5",swig:"^1.4.2","swig-templates":"^2.0.3","razor-tmpl":"^1.3.1",atpl:">=0.7.6",liquor:"^0.0.5",twig:"^1.15.2",ejs:"^3.1.5",eco:"^1.1.0-rc-3",jazz:"^0.0.18",jqtpl:"~1.1.0",hamljs:"^0.6.2",hamlet:"^0.3.3",whiskers:"^0.4.0","haml-coffee":"^1.14.1","hogan.js":"^3.0.2",templayed:">=0.2.3",handlebars:"^4.7.6",underscore:"^1.11.0",lodash:"^4.17.20",pug:"^3.0.0","then-pug":"*",qejs:"^3.0.5",walrus:"^0.10.1",mustache:"^4.0.1",just:"^0.1.8",ect:"^0.5.9",mote:"^0.2.0",toffee:"^0.3.6",dot:"^1.1.3","bracket-template":"^1.1.5",ractive:"^1.3.12",nunjucks:"^3.2.2",htmling:"^0.0.8","babel-core":"^6.26.3",plates:"~0.4.11","react-dom":"^16.13.1",react:"^16.13.1","arc-templates":"^0.5.3",vash:"^0.13.0",slm:"^2.0.0",marko:"^3.14.4",teacup:"^2.0.0","coffee-script":"^1.12.7",squirrelly:"^5.1.0",twing:"^5.0.2"},peerDependenciesMeta:{velocityjs:Me,tinyliquid:Me,"liquid-node":Me,jade:Me,"then-jade":Me,dust:Me,"dustjs-helpers":Me,"dustjs-linkedin":Me,swig:Me,"swig-templates":Me,"razor-tmpl":Me,atpl:Me,liquor:Me,twig:Me,ejs:Me,eco:Me,jazz:Me,jqtpl:Me,hamljs:Me,hamlet:Me,whiskers:Me,"haml-coffee":Me,"hogan.js":Me,templayed:Me,handlebars:Me,underscore:Me,lodash:Me,pug:Me,"then-pug":Me,qejs:Me,walrus:Me,mustache:Me,just:Me,ect:Me,mote:Me,toffee:Me,dot:Me,"bracket-template":Me,ractive:Me,nunjucks:Me,htmling:Me,"babel-core":Me,plates:Me,"react-dom":Me,react:Me,"arc-templates":Me,vash:Me,slm:Me,marko:Me,teacup:Me,"coffee-script":Me,squirrelly:Me,twing:Me}}],["vue-loader@<=16.3.1",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",webpack:"^4.1.0 || ^5.0.0-0"}}],["scss-parser@*",{dependencies:{lodash:"^4.17.21"}}],["query-ast@*",{dependencies:{lodash:"^4.17.21"}}],["redux-thunk@<=2.3.0",{peerDependencies:{redux:"^4.0.0"}}]];var Rv;function ere(){return typeof Rv=="undefined"&&(Rv=require("zlib").brotliDecompressSync(Buffer.from("G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==","base64")).toString()),Rv}var Lv;function tre(){return typeof Lv=="undefined"&&(Lv=require("zlib").brotliDecompressSync(Buffer.from("G1QTIIzURnVBnGa0VPvr81orV8AFIqdU0sqrdcVgCdukgAZwi8a50gLk9+19Z2NcUILjmzXkzt4dzm5a6Yoys+/9qnKiaApXukOiuoyUaMcynG4X7X4vBaIE/PL30gwG6HSGJkLxb9PnLjfMr+748n7sM6C/NycK6ber/bX1reVVxta6W/31tZIhfrS+upoE/TPRHj0S/l0T59gTGdtKOp1OmMOJt9rhfucDdLJ2tgyfnO+u4YMkQAcYq/nebTcDmbXhqhgo6iQA4M3m4xya4Cos3p6klmkmQT+S4DLDZfwfMF+sUCx36KleOtaHLQfEIz0Bmncj/Ngi3lqOl4391EWEfIss6gVp3oDUGwsSZJKeOVONJWZg+Mue3KUMV3aMqYJ+7b2219D+GFDi8EV5y/Y+5J+He0oNjKAgqLsJziEsS9uIaCu3BHBKSXxNKKa2ShbfglcWoiiVT2kfGI7Gw+YJ/Sqy1H6wdFWtyVUQIa82JPwbeV25YKLzc5ZIFM6GCPSA+J9dTvJbs5LuuKnLP3f09gCu2jxqsAv6CA+ZySVaUJr2d3A70BC/uBCKr2OVrWgC3fSwb7NlfkgSEEiejrMGvhya9lMbVI6lMsFKN330A1/FOaefHQdNGLEZ3IwFF87H3xVlM0Xxsmbi/7A60oymRcIe0tH90alG6ez/yA7jwYotxuHWZdR+1HlMcddGHAV6QD/gXYPV0wnNv47I+5FGevzZFMqWSO8GU4nQ3FjsdgdJcD+c1rvudERKuLyd7bxiBpnsMDHsvPP4nXdXkld/gUNks3GAE1Otmb90bavDyiw4Mrx496Iw+jbLTgsCZGZXSZ9vM55C7KGe4HyJAKXEk0iT/Cj/PFwLJBN7pcP7ZFfYtUApGTWKkYhI9IE2zt/5ByH72wdvH+88b71zuv/FMCX3w6x5nzhY44Cg5IYv9LeKwHuHIWgPbfgrAcUxOlKkPRdQOIDF/aBuLPJAXD+TgxCNXx4jQxeR/qlBWVikFPfEI4rXMUc4kZ2w9KbPKYRvFUag0dVlVoyUP4zfidbTXAdZF88jAckl+NHjLFCNdX7EQ1PbLSOl+P+MqgwEOCi6dxgWZ7NCwJBjWKpk1LaxwKrhZ4aEC/0lMPJYe5S8xAakDcmA2kSS86GjEMTrv3VEu0S0YGZcxToMV524G4WAc4CReePePdipvs4aXRL5p+aeN96yfMGjsiTbQNxgbdRKc+keQ+NxYIEm1mBtEO29WrcbrqNbQRMR66KpGG4aG0NtmRyZ2JhUvu0paCklRlID8PT3gSiwZrqr4XZXoBBzBMrveWCuOg7iTgGDXDdbGi8XHkQf5KXDGFUxWueu5wkSa6gMWY1599g2piQjwBKIAPt4N5cOZdFBidz2feGwEAy1j1UydGxDSCCUsh314cUIIRV/dWCheceubL2gU8CibewmP7UxmN5kN4I7zfQhPxkP0NCcei8GXQpw4c3krEzW7PR2hgi/hqqqR58UJ/ZVfWxfcH5ZKMo4itkmPK0FCGxzzIRP20lK/gz28Y03sY233KvSVWUKl9rcbX6MbHjpUG8MvNlw72p6FwTejv92zgpnCxVJnIHHZhCBxNcHF5RTveRp513hUtTHHq4BIndlytZT5xoTSYfHKqKNr4o9kcGINIz6tZSKRdtbON3Ydr9cgqxHIeisMNIsvPg/IFMZuBbSqqDLeSO5dak1cGr76FtH2PC7hs0S0Oq3GsmF1Ga4YABAMGcdPAWzTk26B7cKV91I2b0V/GYvnsEQ1YGntRqi5EQqTlgZszbV/32GuZtUF49JOA/r4jAdwUOsbPo6mNoBlJPYjM5axrZaWQf33bFsLWqiyvvDOM4x0Ng802T7cuP2a3q98GWq6yiq6q3M77hcZlOUnmryctRYmI4Hb2F5XixFohkBmySCjU+M7/WQVE5YAtnlxiUJDhFN0y1tNeMWY9E0MfZi2rQ4eC72WXjsAA==","base64")).toString()),Lv}var Nv;function rre(){return typeof Nv=="undefined"&&(Nv=require("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),Nv}var ire=new Map([[w.makeIdent(null,"fsevents").identHash,ere],[w.makeIdent(null,"resolve").identHash,tre],[w.makeIdent(null,"typescript").identHash,rre]]),oYe={hooks:{registerPackageExtensions:async(t,e)=>{for(let[r,i]of $te)e(w.parseDescriptor(r,!0),i)},getBuiltinPatch:async(t,e)=>{var s;let r="compat/";if(!e.startsWith(r))return;let i=w.parseIdent(e.slice(r.length)),n=(s=ire.get(i.identHash))==null?void 0:s();return typeof n!="undefined"?n:null},reduceDependency:async(t,e,r,i)=>typeof ire.get(t.identHash)=="undefined"?t:w.makeDescriptor(t,w.makeRange({protocol:"patch:",source:w.stringifyDescriptor(t),selector:`~builtin`,params:null}))}},aYe=oYe;var Ov={};et(Ov,{default:()=>lYe});var nB=class extends ye{constructor(){super(...arguments);this.pkg=H.String("-p,--package",{description:"The package to run the provided command from"});this.quiet=H.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=H.String();this.args=H.Proxy()}async execute(){let e=[];this.pkg&&e.push("--package",this.pkg),this.quiet&&e.push("--quiet");let r=w.parseIdent(this.command),i=w.makeIdent(r.scope,`create-${r.name}`);return this.cli.run(["dlx",...e,w.stringifyIdent(i),...this.args])}};nB.paths=[["create"]];var nre=nB;var qp=class extends ye{constructor(){super(...arguments);this.packages=H.Array("-p,--package",{description:"The package(s) to install before running the command"});this.quiet=H.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=H.String();this.args=H.Proxy()}async execute(){return ce.telemetry=null,await N.mktempPromise(async e=>{var p;let r=D.join(e,`dlx-${process.pid}`);await N.mkdirPromise(r),await N.writeFilePromise(D.join(r,"package.json"),`{} -`),await N.writeFilePromise(D.join(r,"yarn.lock"),"");let i=D.join(r,".yarnrc.yml"),n=await ce.findProjectCwd(this.context.cwd,xt.lockfile),s=!(await ce.find(this.context.cwd,null,{strict:!1})).get("enableGlobalCache"),o=n!==null?D.join(n,".yarnrc.yml"):null;o!==null&&N.existsSync(o)?(await N.copyFilePromise(o,i),await ce.updateConfiguration(r,m=>{let I=V(P({},m),{enableGlobalCache:s,enableTelemetry:!1});return Array.isArray(m.plugins)&&(I.plugins=m.plugins.map(y=>{let B=typeof y=="string"?y:y.path,x=O.isAbsolute(B)?B:O.resolve(O.fromPortablePath(n),B);return typeof y=="string"?x:{path:x,spec:y.spec}})),I})):await N.writeFilePromise(i,`enableGlobalCache: ${s} -enableTelemetry: false -`);let a=(p=this.packages)!=null?p:[this.command],l=w.parseDescriptor(this.command).name,c=await this.cli.run(["add","--",...a],{cwd:r,quiet:this.quiet});if(c!==0)return c;this.quiet||this.context.stdout.write(` -`);let u=await ce.find(r,this.context.plugins),{project:g,workspace:f}=await Re.find(u,r);if(f===null)throw new Ze(g.cwd,r);await g.restoreInstallState();let h=await Qt.getWorkspaceAccessibleBinaries(f);return h.has(l)===!1&&h.size===1&&typeof this.packages=="undefined"&&(l=Array.from(h)[0][0]),await Qt.executeWorkspaceAccessibleBinary(f,l,this.args,{packageAccessibleBinaries:h,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};qp.paths=[["dlx"]],qp.usage=he.Usage({description:"run a package in a temporary environment",details:"\n This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\n\n By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\n\n Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\n ",examples:[["Use create-react-app to create a new React app","yarn dlx create-react-app ./my-app"]]});var sre=qp;var AYe={commands:[nre,sre]},lYe=AYe;var Jv={};et(Jv,{default:()=>gYe,fileUtils:()=>Tv});var ku=/^(?:[a-zA-Z]:[\\/]|\.{0,2}\/)/,Jp=/^[^?]*\.(?:tar\.gz|tgz)(?:::.*)?$/,ar="file:";var Tv={};et(Tv,{makeArchiveFromLocator:()=>sB,makeBufferFromLocator:()=>Yv,makeLocator:()=>Uv,makeSpec:()=>ore,parseSpec:()=>Kv});function Kv(t){let{params:e,selector:r}=w.parseRange(t),i=O.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?w.parseLocator(e.locator):null,path:i}}function ore({parentLocator:t,path:e,folderHash:r,protocol:i}){let n=t!==null?{locator:w.stringifyLocator(t)}:{},s=typeof r!="undefined"?{hash:r}:{};return w.makeRange({protocol:i,source:e,selector:e,params:P(P({},s),n)})}function Uv(t,{parentLocator:e,path:r,folderHash:i,protocol:n}){return w.makeLocator(t,ore({parentLocator:e,path:r,folderHash:i,protocol:n}))}async function sB(t,{protocol:e,fetchOptions:r,inMemory:i=!1}){let{parentLocator:n,path:s}=w.parseFileStyleRange(t.reference,{protocol:e}),o=D.isAbsolute(s)?{packageFs:new yt(Qe.root),prefixPath:Qe.dot,localPath:Qe.root}:await r.fetcher.fetch(n,r),a=o.localPath?{packageFs:new yt(Qe.root),prefixPath:D.relative(Qe.root,o.localPath)}:o;o!==a&&o.releaseFs&&o.releaseFs();let l=a.packageFs,c=D.join(a.prefixPath,s);return await pe.releaseAfterUseAsync(async()=>await hr.makeArchiveFromDirectory(c,{baseFs:l,prefixPath:w.getIdentVendorPath(t),compressionLevel:r.project.configuration.get("compressionLevel"),inMemory:i}),a.releaseFs)}async function Yv(t,{protocol:e,fetchOptions:r}){return(await sB(t,{protocol:e,fetchOptions:r,inMemory:!0})).getBufferAndClose()}var Hv=class{supports(e,r){return!!e.reference.startsWith(ar)}getLocalPath(e,r){let{parentLocator:i,path:n}=w.parseFileStyleRange(e.reference,{protocol:ar});if(D.isAbsolute(n))return n;let s=r.fetcher.getLocalPath(i,r);return s===null?null:D.resolve(s,n)}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${w.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),skipIntegrityCheck:r.skipIntegrityCheck});return{packageFs:n,releaseFs:s,prefixPath:w.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:o}}async fetchFromDisk(e,r){return sB(e,{protocol:ar,fetchOptions:r})}};var cYe=1,jv=class{supportsDescriptor(e,r){return e.range.match(ku)?!0:!!e.range.startsWith(ar)}supportsLocator(e,r){return!!e.reference.startsWith(ar)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,i){return ku.test(e.range)&&(e=w.makeDescriptor(e,`${ar}${e.range}`)),w.bindDescriptor(e,{locator:w.stringifyLocator(r)})}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){if(!i.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:n,parentLocator:s}=Kv(e.range);if(s===null)throw new Error("Assertion failed: The descriptor should have been bound");let o=await Yv(w.makeLocator(e,w.makeRange({protocol:ar,source:n,selector:n,params:{locator:w.stringifyLocator(s)}})),{protocol:ar,fetchOptions:i.fetchOptions}),a=Di.makeHash(`${cYe}`,o).slice(0,6);return[Uv(e,{parentLocator:s,path:n,folderHash:a,protocol:ar})]}async getSatisfying(e,r,i){return null}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let i=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),n=await pe.releaseAfterUseAsync(async()=>await ze.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return V(P({},e),{version:n.version||"0.0.0",languageName:n.languageName||r.project.configuration.get("defaultLanguageName"),linkType:ct.HARD,dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin})}};var Gv=class{supports(e,r){return Jp.test(e.reference)?!!e.reference.startsWith(ar):!1}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${w.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),skipIntegrityCheck:r.skipIntegrityCheck});return{packageFs:n,releaseFs:s,prefixPath:w.getIdentVendorPath(e),checksum:o}}async fetchFromDisk(e,r){let{parentLocator:i,path:n}=w.parseFileStyleRange(e.reference,{protocol:ar}),s=D.isAbsolute(n)?{packageFs:new yt(Qe.root),prefixPath:Qe.dot,localPath:Qe.root}:await r.fetcher.fetch(i,r),o=s.localPath?{packageFs:new yt(Qe.root),prefixPath:D.relative(Qe.root,s.localPath)}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=D.join(o.prefixPath,n),c=await a.readFilePromise(l);return await pe.releaseAfterUseAsync(async()=>await hr.convertToZip(c,{compressionLevel:r.project.configuration.get("compressionLevel"),prefixPath:w.getIdentVendorPath(e),stripComponents:1}),o.releaseFs)}};var qv=class{supportsDescriptor(e,r){return Jp.test(e.range)?!!(e.range.startsWith(ar)||ku.test(e.range)):!1}supportsLocator(e,r){return Jp.test(e.reference)?!!e.reference.startsWith(ar):!1}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,i){return ku.test(e.range)&&(e=w.makeDescriptor(e,`${ar}${e.range}`)),w.bindDescriptor(e,{locator:w.stringifyLocator(r)})}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=e.range;return n.startsWith(ar)&&(n=n.slice(ar.length)),[w.makeLocator(e,`${ar}${O.toPortablePath(n)}`)]}async getSatisfying(e,r,i){return null}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let i=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),n=await pe.releaseAfterUseAsync(async()=>await ze.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return V(P({},e),{version:n.version||"0.0.0",languageName:n.languageName||r.project.configuration.get("defaultLanguageName"),linkType:ct.HARD,dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin})}};var uYe={fetchers:[Gv,Hv],resolvers:[qv,jv]},gYe=uYe;var iF={};et(iF,{default:()=>kYe,gitUtils:()=>Wp});var Wp={};et(Wp,{TreeishProtocols:()=>Li,clone:()=>eF,isGitUrl:()=>vu,lsRemote:()=>Qre,normalizeLocator:()=>_v,normalizeRepoUrl:()=>zp,resolveUrl:()=>$v,splitRepoUrl:()=>Vp});var Xv=re(yre()),Pu=re(require("querystring")),Zv=re(cr()),Bre=re(require("url"));function wre(){return V(P({},process.env),{GIT_SSH_COMMAND:"ssh -o BatchMode=yes"})}var SYe=[/^ssh:/,/^git(?:\+[^:]+)?:/,/^(?:git\+)?https?:[^#]+\/[^#]+(?:\.git)(?:#.*)?$/,/^git@[^#]+\/[^#]+\.git(?:#.*)?$/,/^(?:github:|https:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z._0-9-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\.git)?(?:#.*)?$/,/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/],Li;(function(n){n.Commit="commit",n.Head="head",n.Tag="tag",n.Semver="semver"})(Li||(Li={}));function vu(t){return t?SYe.some(e=>!!t.match(e)):!1}function Vp(t){t=zp(t);let e=t.indexOf("#");if(e===-1)return{repo:t,treeish:{protocol:Li.Head,request:"HEAD"},extra:{}};let r=t.slice(0,e),i=t.slice(e+1);if(i.match(/^[a-z]+=/)){let n=Pu.default.parse(i);for(let[l,c]of Object.entries(n))if(typeof c!="string")throw new Error(`Assertion failed: The ${l} parameter must be a literal string`);let s=Object.values(Li).find(l=>Object.prototype.hasOwnProperty.call(n,l)),o,a;typeof s!="undefined"?(o=s,a=n[s]):(o=Li.Head,a="HEAD");for(let l of Object.values(Li))delete n[l];return{repo:r,treeish:{protocol:o,request:a},extra:n}}else{let n=i.indexOf(":"),s,o;return n===-1?(s=null,o=i):(s=i.slice(0,n),o=i.slice(n+1)),{repo:r,treeish:{protocol:s,request:o},extra:{}}}}function zp(t,{git:e=!1}={}){var r;if(t=t.replace(/^git\+https:/,"https:"),t=t.replace(/^(?:github:|https:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\.git)?(#.*)?$/,"https://github.com/$1/$2.git$3"),t=t.replace(/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/,"https://github.com/$1/$2.git#$3"),e){t=t.replace(/^git\+([^:]+):/,"$1:");let i;try{i=Bre.default.parse(t)}catch{i=null}i&&i.protocol==="ssh:"&&((r=i.path)==null?void 0:r.startsWith("/:"))&&(t=t.replace(/^ssh:\/\//,""))}return t}function _v(t){return w.makeLocator(t,zp(t.reference))}async function Qre(t,e){let r=zp(t,{git:!0});if(!Rt.getNetworkSettings(`https://${(0,Xv.default)(r).resource}`,{configuration:e}).enableNetwork)throw new Error(`Request to '${r}' has been blocked because of your configuration settings`);let n;try{n=await Nr.execvp("git",["ls-remote",r],{cwd:e.startingCwd,env:wre(),strict:!0})}catch(l){throw l.message=`Listing the refs for ${t} failed`,l}let s=new Map,o=/^([a-f0-9]{40})\t([^\n]+)/gm,a;for(;(a=o.exec(n.stdout))!==null;)s.set(a[2],a[1]);return s}async function $v(t,e){let{repo:r,treeish:{protocol:i,request:n},extra:s}=Vp(t),o=await Qre(r,e),a=(c,u)=>{switch(c){case Li.Commit:{if(!u.match(/^[a-f0-9]{40}$/))throw new Error("Invalid commit hash");return Pu.default.stringify(V(P({},s),{commit:u}))}case Li.Head:{let g=o.get(u==="HEAD"?u:`refs/heads/${u}`);if(typeof g=="undefined")throw new Error(`Unknown head ("${u}")`);return Pu.default.stringify(V(P({},s),{commit:g}))}case Li.Tag:{let g=o.get(`refs/tags/${u}`);if(typeof g=="undefined")throw new Error(`Unknown tag ("${u}")`);return Pu.default.stringify(V(P({},s),{commit:g}))}case Li.Semver:{let g=Pt.validRange(u);if(!g)throw new Error(`Invalid range ("${u}")`);let f=new Map([...o.entries()].filter(([p])=>p.startsWith("refs/tags/")).map(([p,m])=>[Zv.default.parse(p.slice(10)),m]).filter(p=>p[0]!==null)),h=Zv.default.maxSatisfying([...f.keys()],g);if(h===null)throw new Error(`No matching range ("${u}")`);return Pu.default.stringify(V(P({},s),{commit:f.get(h)}))}case null:{let g;if((g=l(Li.Commit,u))!==null||(g=l(Li.Tag,u))!==null||(g=l(Li.Head,u))!==null)return g;throw u.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve "${u}" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve "${u}" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol ("${c}")`)}},l=(c,u)=>{try{return a(c,u)}catch(g){return null}};return`${r}#${a(i,n)}`}async function eF(t,e){return await e.getLimit("cloneConcurrency")(async()=>{let{repo:r,treeish:{protocol:i,request:n}}=Vp(t);if(i!=="commit")throw new Error("Invalid treeish protocol when cloning");let s=zp(r,{git:!0});if(Rt.getNetworkSettings(`https://${(0,Xv.default)(s).resource}`,{configuration:e}).enableNetwork===!1)throw new Error(`Request to '${s}' has been blocked because of your configuration settings`);let o=await N.mktempPromise(),a={cwd:o,env:wre(),strict:!0};try{await Nr.execvp("git",["clone","-c core.autocrlf=false",s,O.fromPortablePath(o)],a),await Nr.execvp("git",["checkout",`${n}`],a)}catch(l){throw l.message=`Repository clone failed: ${l.message}`,l}return o})}var tF=class{supports(e,r){return vu(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,n=_v(e),s=new Map(r.checksums);s.set(n.locatorHash,i);let o=V(P({},r),{checksums:s}),a=await this.downloadHosted(n,o);if(a!==null)return a;let[l,c,u]=await r.cache.fetchPackageFromCache(e,i,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${w.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(n,o),skipIntegrityCheck:r.skipIntegrityCheck});return{packageFs:l,releaseFs:c,prefixPath:w.getIdentVendorPath(e),checksum:u}}async downloadHosted(e,r){return r.project.configuration.reduceHook(i=>i.fetchHostedRepository,null,e,r)}async cloneFromRemote(e,r){let i=await eF(e.reference,r.project.configuration),n=Vp(e.reference),s=D.join(i,"package.tgz");await Qt.prepareExternalProject(i,s,{configuration:r.project.configuration,report:r.report,workspace:n.extra.workspace,locator:e});let o=await N.readFilePromise(s);return await pe.releaseAfterUseAsync(async()=>await hr.convertToZip(o,{compressionLevel:r.project.configuration.get("compressionLevel"),prefixPath:w.getIdentVendorPath(e),stripComponents:1}))}};var rF=class{supportsDescriptor(e,r){return vu(e.range)}supportsLocator(e,r){return vu(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=await $v(e.range,i.project.configuration);return[w.makeLocator(e,n)]}async getSatisfying(e,r,i){return null}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let i=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),n=await pe.releaseAfterUseAsync(async()=>await ze.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return V(P({},e),{version:n.version||"0.0.0",languageName:n.languageName||r.project.configuration.get("defaultLanguageName"),linkType:ct.HARD,dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin})}};var xYe={configuration:{cloneConcurrency:{description:"Maximal number of concurrent clones",type:ge.NUMBER,default:2}},fetchers:[tF],resolvers:[rF]};var kYe=xYe;var sF={};et(sF,{default:()=>FYe});var bre=re(require("querystring")),Dre=[/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+)\/tarball\/([^/#]+)(?:#(.*))?$/,/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+?)(?:\.git)?(?:#(.*))?$/];function Sre(t){return t?Dre.some(e=>!!t.match(e)):!1}function xre(t){let e;for(let a of Dre)if(e=t.match(a),e)break;if(!e)throw new Error(PYe(t));let[,r,i,n,s="master"]=e,{commit:o}=bre.default.parse(s);return s=o||s.replace(/[^:]*:/,""),{auth:r,username:i,reponame:n,treeish:s}}function PYe(t){return`Input cannot be parsed as a valid GitHub URL ('${t}').`}var nF=class{supports(e,r){return!!Sre(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${w.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,r),skipIntegrityCheck:r.skipIntegrityCheck});return{packageFs:n,releaseFs:s,prefixPath:w.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,r){let i=await Rt.get(this.getLocatorUrl(e,r),{configuration:r.project.configuration});return await N.mktempPromise(async n=>{let s=new yt(n);await hr.extractArchiveTo(i,s,{stripComponents:1});let o=Wp.splitRepoUrl(e.reference),a=D.join(n,"package.tgz");await Qt.prepareExternalProject(n,a,{configuration:r.project.configuration,report:r.report,workspace:o.extra.workspace,locator:e});let l=await N.readFilePromise(a);return await hr.convertToZip(l,{compressionLevel:r.project.configuration.get("compressionLevel"),prefixPath:w.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,r){let{auth:i,username:n,reponame:s,treeish:o}=xre(e.reference);return`https://${i?`${i}@`:""}github.com/${n}/${s}/archive/${o}.tar.gz`}};var vYe={hooks:{async fetchHostedRepository(t,e,r){if(t!==null)return t;let i=new nF;if(!i.supports(e,r))return null;try{return await i.fetch(e,r)}catch(n){return null}}}},FYe=vYe;var AF={};et(AF,{default:()=>LYe});var Xp=/^[^?]*\.(?:tar\.gz|tgz)(?:\?.*)?$/,Zp=/^https?:/;var oF=class{supports(e,r){return Xp.test(e.reference)?!!Zp.test(e.reference):!1}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${w.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),skipIntegrityCheck:r.skipIntegrityCheck});return{packageFs:n,releaseFs:s,prefixPath:w.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,r){let i=await Rt.get(e.reference,{configuration:r.project.configuration});return await hr.convertToZip(i,{compressionLevel:r.project.configuration.get("compressionLevel"),prefixPath:w.getIdentVendorPath(e),stripComponents:1})}};var aF=class{supportsDescriptor(e,r){return Xp.test(e.range)?!!Zp.test(e.range):!1}supportsLocator(e,r){return Xp.test(e.reference)?!!Zp.test(e.reference):!1}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){return[w.convertDescriptorToLocator(e)]}async getSatisfying(e,r,i){return null}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let i=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),n=await pe.releaseAfterUseAsync(async()=>await ze.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return V(P({},e),{version:n.version||"0.0.0",languageName:n.languageName||r.project.configuration.get("defaultLanguageName"),linkType:ct.HARD,dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin})}};var RYe={fetchers:[oF],resolvers:[aF]},LYe=RYe;var gF={};et(gF,{default:()=>NHe});var tie=re(eie()),uF=re(require("util")),_p=class extends ye{constructor(){super(...arguments);this.private=H.Boolean("-p,--private",!1,{description:"Initialize a private package"});this.workspace=H.Boolean("-w,--workspace",!1,{description:"Initialize a workspace root with a `packages/` directory"});this.install=H.String("-i,--install",!1,{tolerateBoolean:!0,description:"Initialize a package with a specific bundle that will be locked in the project"});this.usev2=H.Boolean("-2",!1,{hidden:!0});this.yes=H.Boolean("-y,--yes",{hidden:!0});this.assumeFreshProject=H.Boolean("--assume-fresh-project",!1,{hidden:!0})}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),r=typeof this.install=="string"?this.install:this.usev2||this.install===!0?"latest":null;return r!==null?await this.executeProxy(e,r):await this.executeRegular(e)}async executeProxy(e,r){if(e.projectCwd!==null&&e.projectCwd!==this.context.cwd)throw new me("Cannot use the --install flag from within a project subdirectory");N.existsSync(this.context.cwd)||await N.mkdirPromise(this.context.cwd,{recursive:!0});let i=D.join(this.context.cwd,e.get("lockfileFilename"));N.existsSync(i)||await N.writeFilePromise(i,"");let n=await this.cli.run(["set","version",r],{quiet:!0});if(n!==0)return n;this.context.stdout.write(` -`);let s=[];return this.private&&s.push("-p"),this.workspace&&s.push("-w"),this.yes&&s.push("-y"),await N.mktempPromise(async o=>{let{code:a}=await Nr.pipevp("yarn",["init",...s],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await Qt.makeScriptEnv({binFolder:o})});return a})}async executeRegular(e){var l;let r=null;try{r=(await Re.find(e,this.context.cwd)).project}catch{r=null}N.existsSync(this.context.cwd)||await N.mkdirPromise(this.context.cwd,{recursive:!0});let i=await ze.tryFind(this.context.cwd)||new ze,n=Object.fromEntries(e.get("initFields").entries());i.load(n),i.name=(l=i.name)!=null?l:w.makeIdent(e.get("initScope"),D.basename(this.context.cwd)),i.packageManager=Er&&pe.isTaggedYarnVersion(Er)?`yarn@${Er}`:null,typeof i.raw.private=="undefined"&&(this.private||this.workspace&&i.workspaceDefinitions.length===0)&&(i.private=!0),this.workspace&&i.workspaceDefinitions.length===0&&(await N.mkdirPromise(D.join(this.context.cwd,"packages"),{recursive:!0}),i.workspaceDefinitions=[{pattern:"packages/*"}]);let s={};i.exportTo(s),uF.inspect.styles.name="cyan",this.context.stdout.write(`${(0,uF.inspect)(s,{depth:Infinity,colors:!0,compact:!1})} -`);let o=D.join(this.context.cwd,ze.fileName);await N.changeFilePromise(o,`${JSON.stringify(s,null,2)} -`,{automaticNewlines:!0});let a=D.join(this.context.cwd,"README.md");if(N.existsSync(a)||await N.writeFilePromise(a,`# ${w.stringifyIdent(i.name)} -`),!r||r.cwd===this.context.cwd){let c=D.join(this.context.cwd,xt.lockfile);N.existsSync(c)||await N.writeFilePromise(c,"");let g=["/.yarn/*","!/.yarn/patches","!/.yarn/plugins","!/.yarn/releases","!/.yarn/sdks","","# Swap the comments on the following lines if you don't wish to use zero-installs","# Documentation here: https://yarnpkg.com/features/zero-installs","!/.yarn/cache","#/.pnp.*"].map(I=>`${I} -`).join(""),f=D.join(this.context.cwd,".gitignore");N.existsSync(f)||await N.writeFilePromise(f,g);let h={["*"]:{endOfLine:"lf",insertFinalNewline:!0},["*.{js,json,yml}"]:{charset:"utf-8",indentStyle:"space",indentSize:2}};(0,tie.default)(h,e.get("initEditorConfig"));let p=`root = true -`;for(let[I,y]of Object.entries(h)){p+=` -[${I}] -`;for(let[B,x]of Object.entries(y))p+=`${B.replace(/[A-Z]/g,L=>`_${L.toLowerCase()}`)} = ${x} -`}let m=D.join(this.context.cwd,".editorconfig");N.existsSync(m)||await N.writeFilePromise(m,p),N.existsSync(D.join(this.context.cwd,".git"))||await Nr.execvp("git",["init"],{cwd:this.context.cwd})}}};_p.paths=[["init"]],_p.usage=he.Usage({description:"create a new package",details:"\n This command will setup a new package in your local directory.\n\n If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\n\n If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\n\n If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\n\n The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\n ",examples:[["Create a new package in the local directory","yarn init"],["Create a new private package in the local directory","yarn init -p"],["Create a new package and store the Yarn release inside","yarn init -i=latest"],["Create a new private package and defines it as a workspace root","yarn init -w"]]});var rie=_p;var LHe={configuration:{initScope:{description:"Scope used when creating packages via the init command",type:ge.STRING,default:null},initFields:{description:"Additional fields to set when creating packages via the init command",type:ge.MAP,valueDefinition:{description:"",type:ge.ANY}},initEditorConfig:{description:"Extra rules to define in the generator editorconfig",type:ge.MAP,valueDefinition:{description:"",type:ge.ANY}}},commands:[rie]},NHe=LHe;var CF={};et(CF,{default:()=>OHe});var Io="portal:",Eo="link:";var fF=class{supports(e,r){return!!e.reference.startsWith(Io)}getLocalPath(e,r){let{parentLocator:i,path:n}=w.parseFileStyleRange(e.reference,{protocol:Io});if(D.isAbsolute(n))return n;let s=r.fetcher.getLocalPath(i,r);return s===null?null:D.resolve(s,n)}async fetch(e,r){let{parentLocator:i,path:n}=w.parseFileStyleRange(e.reference,{protocol:Io}),s=D.isAbsolute(n)?{packageFs:new yt(Qe.root),prefixPath:Qe.dot,localPath:Qe.root}:await r.fetcher.fetch(i,r),o=s.localPath?{packageFs:new yt(Qe.root),prefixPath:D.relative(Qe.root,s.localPath)}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=D.join(o.prefixPath,n);return s.localPath?{packageFs:new yt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Qe.dot,localPath:l}:{packageFs:new Ns(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Qe.dot}}};var hF=class{supportsDescriptor(e,r){return!!e.range.startsWith(Io)}supportsLocator(e,r){return!!e.reference.startsWith(Io)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,i){return w.bindDescriptor(e,{locator:w.stringifyLocator(r)})}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=e.range.slice(Io.length);return[w.makeLocator(e,`${Io}${O.toPortablePath(n)}`)]}async getSatisfying(e,r,i){return null}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let i=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),n=await pe.releaseAfterUseAsync(async()=>await ze.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return V(P({},e),{version:n.version||"0.0.0",languageName:n.languageName||r.project.configuration.get("defaultLanguageName"),linkType:ct.SOFT,dependencies:new Map([...n.dependencies]),peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin})}};var pF=class{supports(e,r){return!!e.reference.startsWith(Eo)}getLocalPath(e,r){let{parentLocator:i,path:n}=w.parseFileStyleRange(e.reference,{protocol:Eo});if(D.isAbsolute(n))return n;let s=r.fetcher.getLocalPath(i,r);return s===null?null:D.resolve(s,n)}async fetch(e,r){let{parentLocator:i,path:n}=w.parseFileStyleRange(e.reference,{protocol:Eo}),s=D.isAbsolute(n)?{packageFs:new yt(Qe.root),prefixPath:Qe.dot,localPath:Qe.root}:await r.fetcher.fetch(i,r),o=s.localPath?{packageFs:new yt(Qe.root),prefixPath:D.relative(Qe.root,s.localPath)}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=D.join(o.prefixPath,n);return s.localPath?{packageFs:new yt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Qe.dot,discardFromLookup:!0,localPath:l}:{packageFs:new Ns(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Qe.dot,discardFromLookup:!0}}};var dF=class{supportsDescriptor(e,r){return!!e.range.startsWith(Eo)}supportsLocator(e,r){return!!e.reference.startsWith(Eo)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,i){return w.bindDescriptor(e,{locator:w.stringifyLocator(r)})}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=e.range.slice(Eo.length);return[w.makeLocator(e,`${Eo}${O.toPortablePath(n)}`)]}async getSatisfying(e,r,i){return null}async resolve(e,r){return V(P({},e),{version:"0.0.0",languageName:r.project.configuration.get("defaultLanguageName"),linkType:ct.SOFT,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map})}};var MHe={fetchers:[pF,fF],resolvers:[dF,hF]},OHe=MHe;var GF={};et(GF,{default:()=>Yje});var yo;(function(i){i[i.YES=0]="YES",i[i.NO=1]="NO",i[i.DEPENDS=2]="DEPENDS"})(yo||(yo={}));var mF=(t,e)=>`${t}@${e}`,iie=(t,e)=>{let r=e.indexOf("#"),i=r>=0?e.substring(r+1):e;return mF(t,i)},Xi;(function(s){s[s.NONE=-1]="NONE",s[s.PERF=0]="PERF",s[s.CHECK=1]="CHECK",s[s.REASONS=2]="REASONS",s[s.INTENSIVE_CHECK=9]="INTENSIVE_CHECK"})(Xi||(Xi={}));var sie=(t,e={})=>{let r=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),i=e.check||r>=9,n=e.hoistingLimits||new Map,s={check:i,debugLevel:r,hoistingLimits:n,fastLookupPossible:!0},o;s.debugLevel>=0&&(o=Date.now());let a=THe(t,s),l=!1,c=0;do l=IF(a,[a],new Set([a.locator]),new Map,s).anotherRoundNeeded,s.fastLookupPossible=!1,c++;while(l);if(s.debugLevel>=0&&console.log(`hoist time: ${Date.now()-o}ms, rounds: ${c}`),s.debugLevel>=1){let u=$p(a);if(IF(a,[a],new Set([a.locator]),new Map,s).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree: -${u}, next tree: -${$p(a)}`);let f=nie(a);if(f)throw new Error(`${f}, after hoisting finished: -${$p(a)}`)}return s.debugLevel>=2&&console.log($p(a)),KHe(a)},UHe=t=>{let e=t[t.length-1],r=new Map,i=new Set,n=s=>{if(!i.has(s)){i.add(s);for(let o of s.hoistedDependencies.values())r.set(o.name,o);for(let o of s.dependencies.values())s.peerNames.has(o.name)||n(o)}};return n(e),r},YHe=t=>{let e=t[t.length-1],r=new Map,i=new Set,n=new Map;for(let a of t)for(let l of a.dependencies.values())n.set(l.name,l);let s=new Set,o=(a,l)=>{if(i.has(a))return;i.add(a);for(let u of a.hoistedDependencies.values())if(!l.has(u.name)){let g=n.get(u.name);g&&r.set(g.name,g)}let c=new Set;for(let u of a.dependencies.values())c.add(u.name);for(let u of a.dependencies.values())a.peerNames.has(u.name)||o(u,c)};return o(e,s),r},oie=(t,e)=>{if(e.decoupled)return e;let{name:r,references:i,ident:n,locator:s,dependencies:o,originalDependencies:a,hoistedDependencies:l,peerNames:c,reasons:u,isHoistBorder:g,isExternalSoftLink:f}=e,h={name:r,references:new Set(i),ident:n,locator:s,dependencies:new Map(o),originalDependencies:new Map(a),hoistedDependencies:new Map(l),peerNames:new Set(c),reasons:new Map(u),decoupled:!0,isHoistBorder:g,isExternalSoftLink:f,hoistedFrom:[]},p=h.dependencies.get(r);return p&&p.ident==h.ident&&h.dependencies.set(r,h),t.dependencies.set(h.name,h),h},HHe=(t,e)=>{let r=new Map([[t.name,[t.ident]]]);for(let n of t.dependencies.values())t.peerNames.has(n.name)||r.set(n.name,[n.ident]);let i=Array.from(e.keys());i.sort((n,s)=>{let o=e.get(n),a=e.get(s);return a.hoistPriority!==o.hoistPriority?a.hoistPriority-o.hoistPriority:a.peerDependents.size!==o.peerDependents.size?a.peerDependents.size-o.peerDependents.size:a.dependents.size-o.dependents.size});for(let n of i){let s=n.substring(0,n.indexOf("@",1)),o=n.substring(s.length+1);if(!t.peerNames.has(s)){let a=r.get(s);a||(a=[],r.set(s,a)),a.indexOf(o)<0&&a.push(o)}}return r},EF=t=>{let e=new Set,r=(i,n=new Set)=>{if(!n.has(i)){n.add(i);for(let s of i.peerNames)if(!t.peerNames.has(s)){let o=t.dependencies.get(s);o&&!e.has(o)&&r(o,n)}e.add(i)}};for(let i of t.dependencies.values())t.peerNames.has(i.name)||r(i);return e},IF=(t,e,r,i,n,s=new Set)=>{let o=e[e.length-1];if(s.has(o))return{anotherRoundNeeded:!1,isGraphChanged:!1};s.add(o);let a=GHe(o),l=HHe(o,a),c=t==o?new Map:n.fastLookupPossible?UHe(e):YHe(e),u,g=!1,f=!1,h=new Map(Array.from(l.entries()).map(([m,I])=>[m,I[0]])),p=new Map;do{let m=jHe(t,e,r,c,h,l,i,p,n);m.isGraphChanged&&(f=!0),m.anotherRoundNeeded&&(g=!0),u=!1;for(let[I,y]of l)y.length>1&&!o.dependencies.has(I)&&(h.delete(I),y.shift(),h.set(I,y[0]),u=!0)}while(u);for(let m of o.dependencies.values())if(!o.peerNames.has(m.name)&&!r.has(m.locator)){r.add(m.locator);let I=IF(t,[...e,m],r,p,n);I.isGraphChanged&&(f=!0),I.anotherRoundNeeded&&(g=!0),r.delete(m.locator)}return{anotherRoundNeeded:g,isGraphChanged:f}},qHe=(t,e,r,i,n,s,o,a,{outputReason:l})=>{let c,u=null,g=new Set;l&&(c=`${Array.from(e).map(m=>Ni(m)).join("\u2192")}`);let f=r[r.length-1],p=!(i.ident===f.ident);if(l&&!p&&(u="- self-reference"),p&&(p=!t.peerNames.has(i.name),l&&!p&&(u=`- cannot shadow peer: ${Ni(t.originalDependencies.get(i.name).locator)} at ${c}`)),p){let m=!1,I=n.get(i.name);if(m=!I||I.ident===i.ident,l&&!m&&(u=`- filled by: ${Ni(I.locator)} at ${c}`),m)for(let y=r.length-1;y>=1;y--){let x=r[y].dependencies.get(i.name);if(x&&x.ident!==i.ident){m=!1;let F=a.get(f);F||(F=new Set,a.set(f,F)),F.add(i.name),l&&(u=`- filled by ${Ni(x.locator)} at ${r.slice(0,y).map(L=>Ni(L.locator)).join("\u2192")}`);break}}p=m}if(p&&(p=s.get(i.name)===i.ident,l&&!p&&(u=`- filled by: ${Ni(o.get(i.name)[0])} at ${c}`)),p){let m=!0,I=new Set(i.peerNames);for(let y=r.length-1;y>=1;y--){let B=r[y];for(let x of I){if(B.peerNames.has(x)&&B.originalDependencies.has(x))continue;let F=B.dependencies.get(x);F&&t.dependencies.get(x)!==F&&(y===r.length-1?g.add(F):(g=null,m=!1,l&&(u=`- peer dependency ${Ni(F.locator)} from parent ${Ni(B.locator)} was not hoisted to ${c}`))),I.delete(x)}if(!m)break}p=m}return g!==null&&g.size>0?{isHoistable:2,dependsOn:g,reason:u}:{isHoistable:p?0:1,reason:u}},jHe=(t,e,r,i,n,s,o,a,l)=>{let c=e[e.length-1],u=new Set,g=!1,f=!1,h=(I,y,B,x)=>{if(u.has(B))return;let F=[...y,B.locator],L=new Map,T=new Map;for(let U of EF(B)){let A=qHe(c,r,[c,...I,B],U,i,n,s,a,{outputReason:l.debugLevel>=2});if(T.set(U,A),A.isHoistable===2)for(let W of A.dependsOn){let ee=L.get(W.name)||new Set;ee.add(U.name),L.set(W.name,ee)}}let v=new Set,q=(U,A,W)=>{if(!v.has(U)){v.add(U),T.set(U,{isHoistable:1,reason:W});for(let ee of L.get(U.name)||[])q(B.dependencies.get(ee),A,l.debugLevel>=2?`- peer dependency ${Ni(U.locator)} from parent ${Ni(B.locator)} was not hoisted`:"")}};for(let[U,A]of T)A.isHoistable===1&&q(U,A,A.reason);for(let U of T.keys())if(!v.has(U)){f=!0;let A=o.get(B);A&&A.has(U.name)&&(g=!0),B.dependencies.delete(U.name),B.hoistedDependencies.set(U.name,U),B.reasons.delete(U.name);let W=c.dependencies.get(U.name),ee=null;if(l.debugLevel>=2&&(ee=Array.from(y).concat([B.locator]).map(ie=>Ni(ie)).join("\u2192")),!W)c.ident!==U.ident&&(c.dependencies.set(U.name,U),l.debugLevel>=2&&U.hoistedFrom.push(ee),x.add(U));else for(let ie of U.references)W.references.add(ie),l.debugLevel>=2&&W.hoistedFrom.push(ee)}if(l.check){let U=nie(t);if(U)throw new Error(`${U}, after hoisting dependencies of ${[c,...I,B].map(A=>Ni(A.locator)).join("\u2192")}: -${$p(t)}`)}let oe=EF(B);for(let U of oe)if(v.has(U)){let A=T.get(U);if((n.get(U.name)===U.ident||!B.reasons.has(U.name))&&A.isHoistable!==0&&B.reasons.set(U.name,A.reason),!U.isHoistBorder&&F.indexOf(U.locator)<0){u.add(B);let ee=oie(B,U);h([...I,B],[...y,B.locator],ee,m),u.delete(B)}}},p,m=new Set(EF(c));do{p=m,m=new Set;for(let I of p){if(I.locator===c.locator||I.isHoistBorder)continue;let y=oie(c,I);h([],Array.from(r),y,m)}}while(m.size>0);return{anotherRoundNeeded:g,isGraphChanged:f}},nie=t=>{let e=[],r=new Set,i=new Set,n=(s,o)=>{if(r.has(s)||(r.add(s),i.has(s)))return;let a=new Map(o);for(let l of s.dependencies.values())s.peerNames.has(l.name)||a.set(l.name,l);for(let l of s.originalDependencies.values()){let c=a.get(l.name),u=()=>`${Array.from(i).concat([s]).map(g=>Ni(g.locator)).join("\u2192")}`;if(s.peerNames.has(l.name)){let g=o.get(l.name);(g!==c||!g||g.ident!==l.ident)&&e.push(`${u()} - broken peer promise: expected ${l.ident} but found ${g&&g.ident}`)}else c?c.ident!==l.ident&&e.push(`${u()} - broken require promise for ${l.name}: expected ${l.ident}, but found: ${c.ident}`):e.push(`${u()} - broken require promise: no required dependency ${l.locator} found`)}i.add(s);for(let l of s.dependencies.values())s.peerNames.has(l.name)||n(l,a);i.delete(s)};return n(t,t.dependencies),e.join(` -`)},THe=(t,e)=>{let{identName:r,name:i,reference:n,peerNames:s}=t,o={name:i,references:new Set([n]),locator:mF(r,n),ident:iie(r,n),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(s),reasons:new Map,decoupled:!0,isHoistBorder:!0,isExternalSoftLink:!1,hoistedFrom:[]},a=new Map([[t,o]]),l=(c,u)=>{let g=a.get(c),f=!!g;if(!g){let{name:h,identName:p,reference:m,peerNames:I,isExternalSoftLink:y}=c,B=e.hoistingLimits.get(u.locator);g={name:h,references:new Set([m]),locator:mF(p,m),ident:iie(p,m),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(I),reasons:new Map,decoupled:!0,isHoistBorder:B?B.has(h):!1,isExternalSoftLink:!!y,hoistedFrom:[]},a.set(c,g)}if(u.dependencies.set(c.name,g),u.originalDependencies.set(c.name,g),f){let h=new Set,p=m=>{if(!h.has(m)){h.add(m),m.decoupled=!1;for(let I of m.dependencies.values())m.peerNames.has(I.name)||p(I)}};p(g)}else for(let h of c.dependencies)l(h,g)};for(let c of t.dependencies)l(c,o);return o},yF=t=>t.substring(0,t.indexOf("@",1)),KHe=t=>{let e={name:t.name,identName:yF(t.locator),references:new Set(t.references),dependencies:new Set},r=new Set([t]),i=(n,s,o)=>{let a=r.has(n),l;if(s===n)l=o;else{let{name:c,references:u,locator:g}=n;l={name:c,identName:yF(g),references:u,dependencies:new Set}}if(o.dependencies.add(l),!a){r.add(n);for(let c of n.dependencies.values())n.peerNames.has(c.name)||i(c,n,l);r.delete(n)}};for(let n of t.dependencies.values())i(n,t,e);return e},GHe=t=>{let e=new Map,r=new Set([t]),i=o=>`${o.name}@${o.ident}`,n=o=>{let a=i(o),l=e.get(a);return l||(l={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(a,l)),l},s=(o,a)=>{let l=!!r.has(a);if(n(a).dependents.add(o.ident),!l){r.add(a);for(let u of a.dependencies.values()){let g=n(u);a.isExternalSoftLink&&(g.hoistPriority=1),a.peerNames.has(u.name)?g.peerDependents.add(a.ident):s(a,u)}}};for(let o of t.dependencies.values())t.peerNames.has(o.name)||s(t,o);return e},Ni=t=>{let e=t.indexOf("@",1),r=t.substring(0,e);r.endsWith("$wsroot$")&&(r=`wh:${r.replace("$wsroot$","")}`);let i=t.substring(e+1);if(i==="workspace:.")return".";if(i){let n=(i.indexOf("#")>0?i.split("#")[1]:i).replace("npm:","");return i.startsWith("virtual")&&(r=`v:${r}`),n.startsWith("workspace")&&(r=`w:${r}`,n=""),`${r}${n?`@${n}`:""}`}else return`${r}`},aie=5e4,$p=t=>{let e=0,r=(n,s,o="")=>{if(e>aie||s.has(n))return"";e++;let a=Array.from(n.dependencies.values()).sort((c,u)=>c.name.localeCompare(u.name)),l="";s.add(n);for(let c=0;c":"")+(f!==u.name?`a:${u.name}:`:"")+Ni(u.locator)+(g?` ${g}`:"")+(u!==n&&u.hoistedFrom.length>0?`, hoisted from: ${u.hoistedFrom.join(", ")}`:"")} -`,l+=r(u,s,`${o}${caie?` -Tree is too large, part of the tree has been dunped -`:"")};var ed;(function(r){r.HARD="HARD",r.SOFT="SOFT"})(ed||(ed={}));var Mi;(function(i){i.WORKSPACES="workspaces",i.DEPENDENCIES="dependencies",i.NONE="none"})(Mi||(Mi={}));var Aie="node_modules",oB="$wsroot$";var td=(t,e)=>{let{packageTree:r,hoistingLimits:i,errors:n,preserveSymlinksRequired:s}=JHe(t,e),o=null;if(n.length===0){let a=sie(r,{hoistingLimits:i});o=WHe(t,a,e)}return{tree:o,errors:n,preserveSymlinksRequired:s}},Bs=t=>`${t.name}@${t.reference}`,BF=t=>{let e=new Map;for(let[r,i]of t.entries())if(!i.dirList){let n=e.get(i.locator);n||(n={target:i.target,linkType:i.linkType,locations:[],aliases:i.aliases},e.set(i.locator,n)),n.locations.push(r)}for(let r of e.values())r.locations=r.locations.sort((i,n)=>{let s=i.split(D.delimiter).length,o=n.split(D.delimiter).length;return s!==o?o-s:n.localeCompare(i)});return e},lie=(t,e)=>{let r=w.isVirtualLocator(t)?w.devirtualizeLocator(t):t,i=w.isVirtualLocator(e)?w.devirtualizeLocator(e):e;return w.areLocatorsEqual(r,i)},JHe=(t,e)=>{let r=t.getDependencyTreeRoots(),i=[],n=!1,s=new Map,o=new Map,a=t.getPackageInformation(t.topLevel);if(a===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");let l=t.findPackageLocator(a.packageLocation);if(l===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let c=O.toPortablePath(a.packageLocation),u=Bs(l);if(e.project){let I={children:new Map},y=e.project.cwd.split(D.sep);for(let[x,F]of e.project.workspacesByCwd){let L=x.split(D.sep).slice(y.length),T=I;for(let v of L){let q=T.children.get(v);q||(q={children:new Map},T.children.set(v,q)),T=q}T.workspaceLocator={name:w.stringifyIdent(F.anchoredLocator),reference:F.anchoredLocator.reference}}let B=(x,F)=>{if(x.workspaceLocator){let L=Bs(F),T=o.get(L);T||(T=new Set,o.set(L,T)),T.add(x.workspaceLocator)}for(let L of x.children.values())B(L,x.workspaceLocator||F)};for(let x of I.children.values())B(x,I.workspaceLocator)}else for(let I of r)if(I.name!==l.name||I.reference!==l.reference){let y=o.get(u);y||(y=new Set,o.set(u,y)),y.add(I)}let g={name:l.name,identName:l.name,reference:l.reference,peerNames:a.packagePeers,dependencies:new Set},f=new Map,h=(I,y)=>`${Bs(y)}:${I}`,p=(I,y)=>{if(I.linkType!==ed.SOFT||!e.project)return!1;let B=O.toPortablePath(t.resolveVirtual&&y.reference&&y.reference.startsWith("virtual:")?t.resolveVirtual(I.packageLocation):I.packageLocation);return D.contains(e.project.cwd,B)===null},m=(I,y,B,x,F,L,T)=>{var ie,J;let v=h(I,B),q=f.get(v),oe=!!q;!oe&&B.name===l.name&&B.reference===l.reference&&(q=g,f.set(v,g));let U=p(y,B);if(q||(q={name:I,identName:B.name,reference:B.reference,dependencies:new Set,peerNames:y.packagePeers,isExternalSoftLink:U},f.set(v,q)),T&&!U){let R=Bs({name:x.identName,reference:x.reference}),ve=s.get(R)||new Set;s.set(R,ve),ve.add(q.name)}let A=new Map(y.packageDependencies);if(e.project){let R=e.project.workspacesByCwd.get(O.toPortablePath(y.packageLocation.slice(0,-1)));if(R){let ve=new Set([...Array.from(R.manifest.peerDependencies.values(),Fe=>w.stringifyIdent(Fe)),...Array.from(R.manifest.peerDependenciesMeta.keys())]);for(let Fe of ve)A.has(Fe)||(A.set(Fe,F.get(Fe)||null),q.peerNames.add(Fe))}}let W=Bs(B),ee=o.get(W);if(ee)for(let R of ee)A.set(`${R.name}${oB}`,R.reference);if(x.dependencies.add(q),!oe){let R=new Map;for(let[ve,Fe]of A)if(Fe!==null){let Ke=t.getLocator(ve,Fe),qe=t.getLocator(ve.replace(oB,""),Fe),te=t.getPackageInformation(qe);if(te===null)throw new Error("Assertion failed: Expected the package to have been registered");let le=p(te,Ke);if(e.validateExternalSoftLinks&&e.project&&le){te.packageDependencies.size>0&&(n=!0);for(let[we,Z]of te.packageDependencies)if(Z!==null){let X=w.parseLocator(Array.isArray(Z)?`${Z[0]}@${Z[1]}`:`${we}@${Z}`);if(Bs(X)!==Bs(Ke)){let Ae=A.get(we);if(Ae){let ue=w.parseLocator(Array.isArray(Ae)?`${Ae[0]}@${Ae[1]}`:`${we}@${Ae}`);lie(ue,X)||i.push({messageName:z.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK,text:`Cannot link ${w.prettyIdent(e.project.configuration,w.parseIdent(Ke.name))} into ${w.prettyLocator(e.project.configuration,w.parseLocator(`${B.name}@${B.reference}`))} dependency ${w.prettyLocator(e.project.configuration,X)} conflicts with parent dependency ${w.prettyLocator(e.project.configuration,ue)}`})}else{let ue=R.get(we);if(ue){let Be=ue.target,at=w.parseLocator(Array.isArray(Be)?`${Be[0]}@${Be[1]}`:`${we}@${Be}`);lie(at,X)||i.push({messageName:z.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK,text:`Cannot link ${w.prettyIdent(e.project.configuration,w.parseIdent(Ke.name))} into ${w.prettyLocator(e.project.configuration,w.parseLocator(`${B.name}@${B.reference}`))} dependency ${w.prettyLocator(e.project.configuration,X)} conflicts with dependency ${w.prettyLocator(e.project.configuration,at)} from sibling portal ${w.prettyIdent(e.project.configuration,w.parseIdent(ue.portal.name))}`})}else R.set(we,{target:X.reference,portal:Ke})}}}}let Se=(ie=e.hoistingLimitsByCwd)==null?void 0:ie.get(L),fe=le?L:D.relative(c,O.toPortablePath(te.packageLocation))||Qe.dot,Ie=(J=e.hoistingLimitsByCwd)==null?void 0:J.get(fe),de=Se===Mi.DEPENDENCIES||Ie===Mi.DEPENDENCIES||Ie===Mi.WORKSPACES;m(Bs(Ke)===Bs(B)?I:ve,te,Ke,q,A,fe,de)}}};return m(l.name,a,l,g,a.packageDependencies,Qe.dot,!1),{packageTree:g,hoistingLimits:s,errors:i,preserveSymlinksRequired:n}};function zHe(t,e,r){let i=e.getLocator(t.name.replace(oB,""),t.reference),n=e.getPackageInformation(i);if(n===null)throw new Error("Assertion failed: Expected the package to be registered");let s,o;if(r.pnpifyFs)o=O.toPortablePath(n.packageLocation),s=ed.SOFT;else{let a=e.resolveVirtual&&t.reference&&t.reference.startsWith("virtual:")?e.resolveVirtual(n.packageLocation):n.packageLocation;o=O.toPortablePath(a||n.packageLocation),s=n.linkType}return{linkType:s,target:o}}var WHe=(t,e,r)=>{let i=new Map,n=(u,g,f)=>{let{linkType:h,target:p}=zHe(u,t,r);return{locator:Bs(u),nodePath:g,target:p,linkType:h,aliases:f}},s=u=>{let[g,f]=u.split("/");return f?{scope:rr(g),name:rr(f)}:{scope:null,name:rr(g)}},o=new Set,a=(u,g,f)=>{if(!o.has(u)){o.add(u);for(let h of u.dependencies){if(h===u)continue;let p=Array.from(h.references).sort(),m={name:h.identName,reference:p[0]},{name:I,scope:y}=s(h.name),B=y?[y,I]:[I],x=D.join(g,Aie),F=D.join(x,...B),L=`${f}/${m.name}`,T=n(m,f,p.slice(1));if(!h.name.endsWith(oB)){let v=i.get(F);if(v){if(v.dirList)throw new Error(`Assertion failed: ${F} cannot merge dir node with leaf node`);{let A=w.parseLocator(v.locator),W=w.parseLocator(T.locator);if(v.linkType!==T.linkType)throw new Error(`Assertion failed: ${F} cannot merge nodes with different link types ${v.nodePath}/${w.stringifyLocator(A)} and ${f}/${w.stringifyLocator(W)}`);if(A.identHash!==W.identHash)throw new Error(`Assertion failed: ${F} cannot merge nodes with different idents ${v.nodePath}/${w.stringifyLocator(A)} and ${f}/s${w.stringifyLocator(W)}`);T.aliases=[...T.aliases,...v.aliases,w.parseLocator(v.locator).reference]}}i.set(F,T);let q=F.split("/"),oe=q.indexOf(Aie),U=q.length-1;for(;oe>=0&&U>oe;){let A=O.toPortablePath(q.slice(0,U).join(D.sep)),W=rr(q[U]),ee=i.get(A);if(!ee)i.set(A,{dirList:new Set([W])});else if(ee.dirList){if(ee.dirList.has(W))break;ee.dirList.add(W)}U--}}a(h,T.linkType===ed.SOFT?T.target:F,L)}}},l=n({name:e.name,reference:Array.from(e.references)[0]},"",[]),c=l.target;return i.set(c,l),a(e,c,""),i};var FF={};et(FF,{PnpInstaller:()=>Lu,PnpLinker:()=>fl,default:()=>pje,getPnpPath:()=>Qa,jsInstallUtils:()=>wa,pnpUtils:()=>PF,quotePathIfNeeded:()=>Pie});var kie=re(cr());var cie;(function(r){r.HARD="HARD",r.SOFT="SOFT"})(cie||(cie={}));var Dt;(function(f){f.DEFAULT="DEFAULT",f.TOP_LEVEL="TOP_LEVEL",f.FALLBACK_EXCLUSION_LIST="FALLBACK_EXCLUSION_LIST",f.FALLBACK_EXCLUSION_ENTRIES="FALLBACK_EXCLUSION_ENTRIES",f.FALLBACK_EXCLUSION_DATA="FALLBACK_EXCLUSION_DATA",f.PACKAGE_REGISTRY_DATA="PACKAGE_REGISTRY_DATA",f.PACKAGE_REGISTRY_ENTRIES="PACKAGE_REGISTRY_ENTRIES",f.PACKAGE_STORE_DATA="PACKAGE_STORE_DATA",f.PACKAGE_STORE_ENTRIES="PACKAGE_STORE_ENTRIES",f.PACKAGE_INFORMATION_DATA="PACKAGE_INFORMATION_DATA",f.PACKAGE_DEPENDENCIES="PACKAGE_DEPENDENCIES",f.PACKAGE_DEPENDENCY="PACKAGE_DEPENDENCY"})(Dt||(Dt={}));var uie={[Dt.DEFAULT]:{collapsed:!1,next:{["*"]:Dt.DEFAULT}},[Dt.TOP_LEVEL]:{collapsed:!1,next:{fallbackExclusionList:Dt.FALLBACK_EXCLUSION_LIST,packageRegistryData:Dt.PACKAGE_REGISTRY_DATA,["*"]:Dt.DEFAULT}},[Dt.FALLBACK_EXCLUSION_LIST]:{collapsed:!1,next:{["*"]:Dt.FALLBACK_EXCLUSION_ENTRIES}},[Dt.FALLBACK_EXCLUSION_ENTRIES]:{collapsed:!0,next:{["*"]:Dt.FALLBACK_EXCLUSION_DATA}},[Dt.FALLBACK_EXCLUSION_DATA]:{collapsed:!0,next:{["*"]:Dt.DEFAULT}},[Dt.PACKAGE_REGISTRY_DATA]:{collapsed:!1,next:{["*"]:Dt.PACKAGE_REGISTRY_ENTRIES}},[Dt.PACKAGE_REGISTRY_ENTRIES]:{collapsed:!0,next:{["*"]:Dt.PACKAGE_STORE_DATA}},[Dt.PACKAGE_STORE_DATA]:{collapsed:!1,next:{["*"]:Dt.PACKAGE_STORE_ENTRIES}},[Dt.PACKAGE_STORE_ENTRIES]:{collapsed:!0,next:{["*"]:Dt.PACKAGE_INFORMATION_DATA}},[Dt.PACKAGE_INFORMATION_DATA]:{collapsed:!1,next:{packageDependencies:Dt.PACKAGE_DEPENDENCIES,["*"]:Dt.DEFAULT}},[Dt.PACKAGE_DEPENDENCIES]:{collapsed:!1,next:{["*"]:Dt.PACKAGE_DEPENDENCY}},[Dt.PACKAGE_DEPENDENCY]:{collapsed:!0,next:{["*"]:Dt.DEFAULT}}};function VHe(t,e,r){let i="";i+="[";for(let n=0,s=t.length;ns(o)));let n=r.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>r[s])}function $He(t){let e=new Map,r=rd(t.fallbackExclusionList||[],[({name:i,reference:n})=>i,({name:i,reference:n})=>n]);for(let{name:i,reference:n}of r){let s=e.get(i);typeof s=="undefined"&&e.set(i,s=new Set),s.add(n)}return Array.from(e).map(([i,n])=>[i,Array.from(n)])}function eje(t){return rd(t.fallbackPool||[],([e])=>e)}function tje(t){let e=[];for(let[r,i]of rd(t.packageRegistry,([n])=>n===null?"0":`1${n}`)){let n=[];e.push([r,n]);for(let[s,{packageLocation:o,packageDependencies:a,packagePeers:l,linkType:c,discardFromLookup:u}]of rd(i,([g])=>g===null?"0":`1${g}`)){let g=[];r!==null&&s!==null&&!a.has(r)&&g.push([r,s]);for(let[p,m]of rd(a.entries(),([I])=>I))g.push([p,m]);let f=l&&l.size>0?Array.from(l):void 0,h=u||void 0;n.push([s,{packageLocation:o,packageDependencies:g,packagePeers:f,linkType:c,discardFromLookup:h}])}}return e}function id(t){return{__info:["This file is automatically generated. Do not touch it, or risk","your modifications being lost. We also recommend you not to read","it either without using the @yarnpkg/pnp package, as the data layout","is entirely unspecified and WILL change from a version to another."],dependencyTreeRoots:t.dependencyTreeRoots,enableTopLevelFallback:t.enableTopLevelFallback||!1,ignorePatternData:t.ignorePattern||null,fallbackExclusionList:$He(t),fallbackPool:eje(t),packageRegistryData:tje(t)}}var die=re(pie());function Cie(t,e){return[t?`${t} -`:"",`/* eslint-disable */ - -`,`try { -`,` Object.freeze({}).detectStrictMode = true; -`,`} catch (error) { -`," throw new Error(`The whole PnP file got strict-mode-ified, which is known to break (Emscripten libraries aren't strict mode). This usually happens when the file goes through Babel.`);\n",`} -`,` -`,`var __non_webpack_module__ = module; -`,` -`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) { -`,e.replace(/^/gm," "),`} -`,` -`,(0,die.default)()].join("")}function rje(t){return JSON.stringify(t,null,2)}function ije(t){return[`return hydrateRuntimeState(${fie(t)}, {basePath: basePath || __dirname}); -`].join("")}function nje(t){return[`var path = require('path'); -`,`var dataLocation = path.resolve(__dirname, ${JSON.stringify(t)}); -`,`return hydrateRuntimeState(require(dataLocation), {basePath: basePath || path.dirname(dataLocation)}); -`].join("")}function mie(t){let e=id(t),r=ije(e);return Cie(t.shebang,r)}function Iie(t){let e=id(t),r=nje(t.dataLocation),i=Cie(t.shebang,r);return{dataFile:rje(e),loaderFile:i}}var wie=re(require("fs")),Aje=re(require("path")),Qie=re(require("util"));function QF(t,{basePath:e}){let r=O.toPortablePath(e),i=D.resolve(r),n=t.ignorePatternData!==null?new RegExp(t.ignorePatternData):null,s=new Map,o=new Map(t.packageRegistryData.map(([g,f])=>[g,new Map(f.map(([h,p])=>{var x;if(g===null!=(h===null))throw new Error("Assertion failed: The name and reference should be null, or neither should");let m=(x=p.discardFromLookup)!=null?x:!1,I={name:g,reference:h},y=s.get(p.packageLocation);y?(y.discardFromLookup=y.discardFromLookup&&m,m||(y.locator=I)):s.set(p.packageLocation,{locator:I,discardFromLookup:m});let B=null;return[h,{packageDependencies:new Map(p.packageDependencies),packagePeers:new Set(p.packagePeers),linkType:p.linkType,discardFromLookup:m,get packageLocation(){return B||(B=D.join(i,p.packageLocation))}}]}))])),a=new Map(t.fallbackExclusionList.map(([g,f])=>[g,new Set(f)])),l=new Map(t.fallbackPool),c=t.dependencyTreeRoots,u=t.enableTopLevelFallback;return{basePath:r,dependencyTreeRoots:c,enableTopLevelFallback:u,fallbackExclusionList:a,fallbackPool:l,ignorePattern:n,packageLocatorsByLocations:s,packageRegistry:o}}var Ru=re(require("module")),Bie=re(yie()),DF=re(require("util"));var qt;(function(l){l.API_ERROR="API_ERROR",l.BUILTIN_NODE_RESOLUTION_FAILED="BUILTIN_NODE_RESOLUTION_FAILED",l.MISSING_DEPENDENCY="MISSING_DEPENDENCY",l.MISSING_PEER_DEPENDENCY="MISSING_PEER_DEPENDENCY",l.QUALIFIED_PATH_RESOLUTION_FAILED="QUALIFIED_PATH_RESOLUTION_FAILED",l.INTERNAL="INTERNAL",l.UNDECLARED_DEPENDENCY="UNDECLARED_DEPENDENCY",l.UNSUPPORTED="UNSUPPORTED"})(qt||(qt={}));var aje=new Set([qt.BUILTIN_NODE_RESOLUTION_FAILED,qt.MISSING_DEPENDENCY,qt.MISSING_PEER_DEPENDENCY,qt.QUALIFIED_PATH_RESOLUTION_FAILED,qt.UNDECLARED_DEPENDENCY]);function vr(t,e,r={}){let i=aje.has(t)?"MODULE_NOT_FOUND":t,n={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:V(P({},n),{value:i}),pnpCode:V(P({},n),{value:t}),data:V(P({},n),{value:r})})}function Ba(t){return O.normalize(O.fromPortablePath(t))}function SF(t,e){let r=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,i=Number(process.env.PNP_DEBUG_LEVEL),n=new Set(Ru.Module.builtinModules||Object.keys(process.binding("natives"))),s=te=>n.has(te)||te.startsWith("node:"),o=/^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/,a=/^(\/|\.{1,2}(\/|$))/,l=/\/$/,c=/^\.{0,2}\//,u={name:null,reference:null},g=[],f=new Set;if(t.enableTopLevelFallback===!0&&g.push(u),e.compatibilityMode!==!1)for(let te of["react-scripts","gatsby"]){let le=t.packageRegistry.get(te);if(le)for(let Se of le.keys()){if(Se===null)throw new Error("Assertion failed: This reference shouldn't be null");g.push({name:te,reference:Se})}}let{ignorePattern:h,packageRegistry:p,packageLocatorsByLocations:m}=t;function I(te,le){return{fn:te,args:le,error:null,result:null}}function y(te){var de,we,Z,X,Ae,ue;let le=(Z=(we=(de=process.stderr)==null?void 0:de.hasColors)==null?void 0:we.call(de))!=null?Z:process.stdout.isTTY,Se=(Be,at)=>`[${Be}m${at}`,fe=te.error;console.error(fe?Se("31;1",`\u2716 ${(X=te.error)==null?void 0:X.message.replace(/\n.*/s,"")}`):Se("33;1","\u203C Resolution")),te.args.length>0&&console.error();for(let Be of te.args)console.error(` ${Se("37;1","In \u2190")} ${(0,DF.inspect)(Be,{colors:le,compact:!0})}`);te.result&&(console.error(),console.error(` ${Se("37;1","Out \u2192")} ${(0,DF.inspect)(te.result,{colors:le,compact:!0})}`));let Ie=(ue=(Ae=new Error().stack.match(/(?<=^ +)at.*/gm))==null?void 0:Ae.slice(2))!=null?ue:[];if(Ie.length>0){console.error();for(let Be of Ie)console.error(` ${Se("38;5;244",Be)}`)}console.error()}function B(te,le){if(e.allowDebug===!1)return le;if(Number.isFinite(i)){if(i>=2)return(...Se)=>{let fe=I(te,Se);try{return fe.result=le(...Se)}catch(Ie){throw fe.error=Ie}finally{y(fe)}};if(i>=1)return(...Se)=>{try{return le(...Se)}catch(fe){let Ie=I(te,Se);throw Ie.error=fe,y(Ie),fe}}}return le}function x(te){let le=W(te);if(!le)throw vr(qt.INTERNAL,"Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)");return le}function F(te){if(te.name===null)return!0;for(let le of t.dependencyTreeRoots)if(le.name===te.name&&le.reference===te.reference)return!0;return!1}function L(te){let le=J(D.join(te,"internal.js"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(le===null)throw vr(qt.INTERNAL,`The locator that owns the "${te}" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:Se}=x(le),fe=D.join(Se,xt.manifest);if(!e.fakeFs.existsSync(fe))return null;let Ie=JSON.parse(e.fakeFs.readFileSync(fe,"utf8")),de=D.contains(Se,te);if(de===null)throw vr(qt.INTERNAL,"unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)");c.test(de)||(de=`./${de}`);let we=(0,Bie.resolve)(Ie,D.normalize(de),{browser:!1,require:!0,conditions:[]});return typeof we=="string"?D.join(Se,we):null}function T(te,le,{extensions:Se}){let fe;try{le.push(te),fe=e.fakeFs.statSync(te)}catch(Ie){}if(fe&&!fe.isDirectory())return e.fakeFs.realpathSync(te);if(fe&&fe.isDirectory()){let Ie;try{Ie=JSON.parse(e.fakeFs.readFileSync(D.join(te,xt.manifest),"utf8"))}catch(we){}let de;if(Ie&&Ie.main&&(de=D.resolve(te,Ie.main)),de&&de!==te){let we=T(de,le,{extensions:Se});if(we!==null)return we}}for(let Ie=0,de=Se.length;Ie{let Z=JSON.stringify(we.name);if(fe.has(Z))return;fe.add(Z);let X=ee(we);for(let Ae of X)if(x(Ae).packagePeers.has(te))Ie(Ae);else{let Be=Se.get(Ae.name);typeof Be=="undefined"&&Se.set(Ae.name,Be=new Set),Be.add(Ae.reference)}};Ie(le);let de=[];for(let we of[...Se.keys()].sort())for(let Z of[...Se.get(we)].sort())de.push({name:we,reference:Z});return de}function J(te,{resolveIgnored:le=!1,includeDiscardFromLookup:Se=!1}={}){if(oe(te)&&!le)return null;let fe=D.relative(t.basePath,te);fe.match(a)||(fe=`./${fe}`),fe.endsWith("/")||(fe=`${fe}/`);do{let Ie=m.get(fe);if(typeof Ie=="undefined"||Ie.discardFromLookup&&!Se){fe=fe.substring(0,fe.lastIndexOf("/",fe.length-2)+1);continue}return Ie.locator}while(fe!=="");return null}function R(te,le,{considerBuiltins:Se=!0}={}){if(te==="pnpapi")return O.toPortablePath(e.pnpapiResolution);if(Se&&s(te))return null;let fe=Ba(te),Ie=le&&Ba(le);if(le&&oe(le)&&(!D.isAbsolute(te)||J(te)===null)){let Z=q(te,le);if(Z===!1)throw vr(qt.BUILTIN_NODE_RESOLUTION_FAILED,`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp) - -Require request: "${fe}" -Required by: ${Ie} -`,{request:fe,issuer:Ie});return O.toPortablePath(Z)}let de,we=te.match(o);if(we){if(!le)throw vr(qt.API_ERROR,"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:fe,issuer:Ie});let[,Z,X]=we,Ae=J(le);if(!Ae){let Xt=q(te,le);if(Xt===!1)throw vr(qt.BUILTIN_NODE_RESOLUTION_FAILED,`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree). - -Require path: "${fe}" -Required by: ${Ie} -`,{request:fe,issuer:Ie});return O.toPortablePath(Xt)}let Be=x(Ae).packageDependencies.get(Z),at=null;if(Be==null&&Ae.name!==null){let Xt=t.fallbackExclusionList.get(Ae.name);if(!Xt||!Xt.has(Ae.reference)){for(let zn=0,_u=g.length;zn<_u;++zn){let xs=x(g[zn]).packageDependencies.get(Z);if(xs!=null){r?at=xs:Be=xs;break}}if(t.enableTopLevelFallback&&Be==null&&at===null){let zn=t.fallbackPool.get(Z);zn!=null&&(at=zn)}}}let mt=null;if(Be===null)if(F(Ae))mt=vr(qt.MISSING_PEER_DEPENDENCY,`Your application tried to access ${Z} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed. - -Required package: ${Z}${Z!==fe?` (via "${fe}")`:""} -Required by: ${Ie} -`,{request:fe,issuer:Ie,dependencyName:Z});else{let Xt=ie(Z,Ae);Xt.every(_i=>F(_i))?mt=vr(qt.MISSING_PEER_DEPENDENCY,`${Ae.name} tried to access ${Z} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. - -Required package: ${Z}${Z!==fe?` (via "${fe}")`:""} -Required by: ${Ae.name}@${Ae.reference} (via ${Ie}) -${Xt.map(_i=>`Ancestor breaking the chain: ${_i.name}@${_i.reference} -`).join("")} -`,{request:fe,issuer:Ie,issuerLocator:Object.assign({},Ae),dependencyName:Z,brokenAncestors:Xt}):mt=vr(qt.MISSING_PEER_DEPENDENCY,`${Ae.name} tried to access ${Z} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. - -Required package: ${Z}${Z!==fe?` (via "${fe}")`:""} -Required by: ${Ae.name}@${Ae.reference} (via ${Ie}) - -${Xt.map(_i=>`Ancestor breaking the chain: ${_i.name}@${_i.reference} -`).join("")} -`,{request:fe,issuer:Ie,issuerLocator:Object.assign({},Ae),dependencyName:Z,brokenAncestors:Xt})}else Be===void 0&&(!Se&&s(te)?F(Ae)?mt=vr(qt.UNDECLARED_DEPENDENCY,`Your application tried to access ${Z}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Z} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. - -Required package: ${Z}${Z!==fe?` (via "${fe}")`:""} -Required by: ${Ie} -`,{request:fe,issuer:Ie,dependencyName:Z}):mt=vr(qt.UNDECLARED_DEPENDENCY,`${Ae.name} tried to access ${Z}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Z} isn't otherwise declared in ${Ae.name}'s dependencies, this makes the require call ambiguous and unsound. - -Required package: ${Z}${Z!==fe?` (via "${fe}")`:""} -Required by: ${Ie} -`,{request:fe,issuer:Ie,issuerLocator:Object.assign({},Ae),dependencyName:Z}):F(Ae)?mt=vr(qt.UNDECLARED_DEPENDENCY,`Your application tried to access ${Z}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. - -Required package: ${Z}${Z!==fe?` (via "${fe}")`:""} -Required by: ${Ie} -`,{request:fe,issuer:Ie,dependencyName:Z}):mt=vr(qt.UNDECLARED_DEPENDENCY,`${Ae.name} tried to access ${Z}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. - -Required package: ${Z}${Z!==fe?` (via "${fe}")`:""} -Required by: ${Ae.name}@${Ae.reference} (via ${Ie}) -`,{request:fe,issuer:Ie,issuerLocator:Object.assign({},Ae),dependencyName:Z}));if(Be==null){if(at===null||mt===null)throw mt||new Error("Assertion failed: Expected an error to have been set");Be=at;let Xt=mt.message.replace(/\n.*/g,"");mt.message=Xt,!f.has(Xt)&&i!==0&&(f.add(Xt),process.emitWarning(mt))}let St=Array.isArray(Be)?{name:Be[0],reference:Be[1]}:{name:Z,reference:Be},xn=x(St);if(!xn.packageLocation)throw vr(qt.MISSING_DEPENDENCY,`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod. - -Required package: ${St.name}@${St.reference}${St.name!==fe?` (via "${fe}")`:""} -Required by: ${Ae.name}@${Ae.reference} (via ${Ie}) -`,{request:fe,issuer:Ie,dependencyLocator:Object.assign({},St)});let Ii=xn.packageLocation;X?de=D.join(Ii,X):de=Ii}else if(D.isAbsolute(te))de=D.normalize(te);else{if(!le)throw vr(qt.API_ERROR,"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:fe,issuer:Ie});let Z=D.resolve(le);le.match(l)?de=D.normalize(D.join(Z,te)):de=D.normalize(D.join(D.dirname(Z),te))}return D.normalize(de)}function ve(te,le){if(a.test(te))return le;let Se=L(le);return Se?D.normalize(Se):le}function Fe(te,{extensions:le=Object.keys(Ru.Module._extensions)}={}){let Se=[],fe=T(te,Se,{extensions:le});if(fe)return D.normalize(fe);{let Ie=Ba(te),de=J(te);if(de){let{packageLocation:we}=x(de);if(!e.fakeFs.existsSync(we)){let Z=we.includes("/unplugged/")?"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).":"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.";throw vr(qt.QUALIFIED_PATH_RESOLUTION_FAILED,`${Z} - -Missing package: ${de.name}@${de.reference} -Expected package location: ${Ba(we)} -`,{unqualifiedPath:Ie})}}throw vr(qt.QUALIFIED_PATH_RESOLUTION_FAILED,`Qualified path resolution failed - none of those files can be found on the disk. - -Source path: ${Ie} -${Se.map(we=>`Not found: ${Ba(we)} -`).join("")}`,{unqualifiedPath:Ie})}}function Ke(te,le,{considerBuiltins:Se,extensions:fe}={}){let Ie=R(te,le,{considerBuiltins:Se});if(Ie===null)return null;let de=()=>le!==null?oe(le):!1,we=(!Se||!s(te))&&!de()?ve(te,Ie):Ie;try{return Fe(we,{extensions:fe})}catch(Z){throw Z.pnpCode==="QUALIFIED_PATH_RESOLUTION_FAILED"&&Object.assign(Z.data,{request:Ba(te),issuer:le&&Ba(le)}),Z}}function qe(te){let le=D.normalize(te),Se=ir.resolveVirtual(le);return Se!==le?Se:null}return{VERSIONS:U,topLevel:A,getLocator:(te,le)=>Array.isArray(le)?{name:le[0],reference:le[1]}:{name:te,reference:le},getDependencyTreeRoots:()=>[...t.dependencyTreeRoots],getAllLocators(){let te=[];for(let[le,Se]of p)for(let fe of Se.keys())le!==null&&fe!==null&&te.push({name:le,reference:fe});return te},getPackageInformation:te=>{let le=W(te);if(le===null)return null;let Se=O.fromPortablePath(le.packageLocation);return V(P({},le),{packageLocation:Se})},findPackageLocator:te=>J(O.toPortablePath(te)),resolveToUnqualified:B("resolveToUnqualified",(te,le,Se)=>{let fe=le!==null?O.toPortablePath(le):null,Ie=R(O.toPortablePath(te),fe,Se);return Ie===null?null:O.fromPortablePath(Ie)}),resolveUnqualified:B("resolveUnqualified",(te,le)=>O.fromPortablePath(Fe(O.toPortablePath(te),le))),resolveRequest:B("resolveRequest",(te,le,Se)=>{let fe=le!==null?O.toPortablePath(le):null,Ie=Ke(O.toPortablePath(te),fe,Se);return Ie===null?null:O.fromPortablePath(Ie)}),resolveVirtual:B("resolveVirtual",te=>{let le=qe(O.toPortablePath(te));return le!==null?O.fromPortablePath(le):null})}}var dCt=(0,Qie.promisify)(wie.readFile);var bie=(t,e,r)=>{let i=id(t),n=QF(i,{basePath:e}),s=O.join(e,xt.pnpCjs);return SF(n,{fakeFs:r,pnpapiResolution:s})};var wa={};et(wa,{checkAndReportManifestCompatibility:()=>Die,extractBuildScripts:()=>AB,getExtractHint:()=>xF,hasBindingGyp:()=>kF});function Die(t,e,r,{configuration:i,report:n}){return ze.isManifestFieldCompatible(e.manifest.os,process.platform)?ze.isManifestFieldCompatible(e.manifest.cpu,process.arch)?!0:(n==null||n.reportWarningOnce(z.INCOMPATIBLE_CPU,`${w.prettyLocator(i,t)} The CPU architecture ${process.arch} is incompatible with this module, ${r} skipped.`),!1):(n==null||n.reportWarningOnce(z.INCOMPATIBLE_OS,`${w.prettyLocator(i,t)} The platform ${process.platform} is incompatible with this module, ${r} skipped.`),!1)}function AB(t,e,r,{configuration:i,report:n}){let s=[];for(let a of["preinstall","install","postinstall"])e.manifest.scripts.has(a)&&s.push([Vi.SCRIPT,a]);return!e.manifest.scripts.has("install")&&e.misc.hasBindingGyp&&s.push([Vi.SHELLCODE,"node-gyp rebuild"]),s.length===0?[]:t.linkType!==ct.HARD?(n==null||n.reportWarningOnce(z.SOFT_LINK_BUILD,`${w.prettyLocator(i,t)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`),[]):r&&r.built===!1?(n==null||n.reportInfoOnce(z.BUILD_DISABLED,`${w.prettyLocator(i,t)} lists build scripts, but its build has been explicitly disabled through configuration.`),[]):!i.get("enableScripts")&&!r.built?(n==null||n.reportWarningOnce(z.DISABLED_BUILD_SCRIPTS,`${w.prettyLocator(i,t)} lists build scripts, but all build scripts have been disabled.`),[]):Die(t,e,"build",{configuration:i,report:n})?s:[]}var lje=new Set([".exe",".h",".hh",".hpp",".c",".cc",".cpp",".java",".jar",".node"]);function xF(t){return t.packageFs.getExtractHint({relevantExtensions:lje})}function kF(t){let e=D.join(t.prefixPath,"binding.gyp");return t.packageFs.existsSync(e)}var PF={};et(PF,{getUnpluggedPath:()=>nd});function nd(t,{configuration:e}){return D.resolve(e.get("pnpUnpluggedFolder"),w.slugifyLocator(t))}var cje=new Set([w.makeIdent(null,"nan").identHash,w.makeIdent(null,"node-gyp").identHash,w.makeIdent(null,"node-pre-gyp").identHash,w.makeIdent(null,"node-addon-api").identHash,w.makeIdent(null,"fsevents").identHash]),fl=class{constructor(){this.mode="strict";this.pnpCache=new Map}supportsPackage(e,r){return!(r.project.configuration.get("nodeLinker")!=="pnp"||r.project.configuration.get("pnpMode")!==this.mode)}async findPackageLocation(e,r){let i=Qa(r.project).cjs;if(!N.existsSync(i))throw new me(`The project in ${ae.pretty(r.project.configuration,`${r.project.cwd}/package.json`,ae.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=pe.getFactoryWithDefault(this.pnpCache,i,()=>pe.dynamicRequire(i,{cachingStrategy:pe.CachingStrategy.FsTime})),s={name:w.stringifyIdent(e),reference:e.reference},o=n.getPackageInformation(s);if(!o)throw new me(`Couldn't find ${w.prettyLocator(r.project.configuration,e)} in the currently installed PnP map - running an install might help`);return O.toPortablePath(o.packageLocation)}async findPackageLocator(e,r){let i=Qa(r.project).cjs;if(!N.existsSync(i))return null;let s=pe.getFactoryWithDefault(this.pnpCache,i,()=>pe.dynamicRequire(i,{cachingStrategy:pe.CachingStrategy.FsTime})).findPackageLocator(O.fromPortablePath(e));return s?w.makeLocator(w.parseIdent(s.name),s.reference):null}makeInstaller(e){return new Lu(e)}},Lu=class{constructor(e){this.opts=e;this.mode="strict";this.packageRegistry=new Map;this.virtualTemplates=new Map;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}getCustomDataKey(){return JSON.stringify({name:"PnpInstaller",version:1})}attachCustomData(e){this.customData=e}async installPackage(e,r){let i=w.stringifyIdent(e),n=e.reference,s=!!this.opts.project.tryWorkspaceByLocator(e),o=e.peerDependencies.size>0&&!w.isVirtualLocator(e),a=!o&&!s,l=!o&&e.linkType!==ct.SOFT,c,u;(a||l)&&(c=this.customData.store.get(e.locatorHash),typeof c=="undefined"&&(c=await uje(e,r),e.linkType===ct.HARD&&this.customData.store.set(e.locatorHash,c)),u=this.opts.project.getDependencyMeta(e,e.version));let g=a?AB(e,c,u,{configuration:this.opts.project.configuration,report:this.opts.report}):[],f=l?await this.unplugPackageIfNeeded(e,c,r,u):r.packageFs;if(D.isAbsolute(r.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${r.prefixPath}) to be relative to the parent`);let h=D.resolve(f.getRealPath(),r.prefixPath),p=vF(this.opts.project.cwd,h),m=new Map,I=new Set;if(w.isVirtualLocator(e)){for(let y of e.peerDependencies.values())m.set(w.stringifyIdent(y),null),I.add(w.stringifyIdent(y));if(!this.opts.project.tryWorkspaceByLocator(e)){let y=w.devirtualizeLocator(e);this.virtualTemplates.set(y.locatorHash,{location:vF(this.opts.project.cwd,ir.resolveVirtual(h)),locator:y})}}return pe.getMapWithDefault(this.packageRegistry,i).set(n,{packageLocation:p,packageDependencies:m,packagePeers:I,linkType:e.linkType,discardFromLookup:r.discardFromLookup||!1}),{packageLocation:h,buildDirective:g.length>0?g:null}}async attachInternalDependencies(e,r){let i=this.getPackageInformation(e);for(let[n,s]of r){let o=w.areIdentsEqual(n,s)?s.reference:[w.stringifyIdent(s),s.reference];i.packageDependencies.set(w.stringifyIdent(n),o)}}async attachExternalDependents(e,r){for(let i of r)this.getDiskInformation(i).packageDependencies.set(w.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;let e=Qa(this.opts.project);if(N.existsSync(e.cjsLegacy)&&(this.opts.report.reportWarning(z.UNNAMED,`Removing the old ${ae.pretty(this.opts.project.configuration,xt.pnpJs,ae.Type.PATH)} file. You might need to manually update existing references to reference the new ${ae.pretty(this.opts.project.configuration,xt.pnpCjs,ae.Type.PATH)} file. If you use Editor SDKs, you'll have to rerun ${ae.pretty(this.opts.project.configuration,"yarn sdks",ae.Type.CODE)}.`),await N.removePromise(e.cjsLegacy)),this.opts.project.configuration.get("nodeLinker")!=="pnp"){await N.removePromise(e.cjs),await N.removePromise(this.opts.project.configuration.get("pnpDataPath"));return}for(let{locator:u,location:g}of this.virtualTemplates.values())pe.getMapWithDefault(this.packageRegistry,w.stringifyIdent(u)).set(u.reference,{packageLocation:g,packageDependencies:new Map,packagePeers:new Set,linkType:ct.SOFT,discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let r=this.opts.project.configuration.get("pnpFallbackMode"),i=this.opts.project.workspaces.map(({anchoredLocator:u})=>({name:w.stringifyIdent(u),reference:u.reference})),n=r!=="none",s=[],o=new Map,a=pe.buildIgnorePattern([".yarn/sdks/**",...this.opts.project.configuration.get("pnpIgnorePatterns")]),l=this.packageRegistry,c=this.opts.project.configuration.get("pnpShebang");if(r==="dependencies-only")for(let u of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(u)&&s.push({name:w.stringifyIdent(u),reference:u.reference});return await this.finalizeInstallWithPnp({dependencyTreeRoots:i,enableTopLevelFallback:n,fallbackExclusionList:s,fallbackPool:o,ignorePattern:a,packageRegistry:l,shebang:c}),{customData:this.customData}}async transformPnpSettings(e){}async finalizeInstallWithPnp(e){let r=Qa(this.opts.project),i=this.opts.project.configuration.get("pnpDataPath"),n=await this.locateNodeModules(e.ignorePattern);if(n.length>0){this.opts.report.reportWarning(z.DANGEROUS_NODE_MODULES,"One or more node_modules have been detected and will be removed. This operation may take some time.");for(let o of n)await N.removePromise(o)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get("pnpEnableInlining")){let o=mie(e);await N.changeFilePromise(r.cjs,o,{automaticNewlines:!0}),await N.chmodPromise(r.cjs,493),await N.removePromise(i)}else{let o=D.relative(D.dirname(r.cjs),i),{dataFile:a,loaderFile:l}=Iie(V(P({},e),{dataLocation:o}));await N.changeFilePromise(r.cjs,l,{automaticNewlines:!0}),await N.chmodPromise(r.cjs,493),await N.changeFilePromise(i,a,{automaticNewlines:!0}),await N.chmodPromise(i,420)}let s=this.opts.project.configuration.get("pnpUnpluggedFolder");if(this.unpluggedPaths.size===0)await N.removePromise(s);else for(let o of await N.readdirPromise(s)){let a=D.resolve(s,o);this.unpluggedPaths.has(a)||await N.removePromise(a)}}async locateNodeModules(e){let r=[],i=e?new RegExp(e):null;for(let n of this.opts.project.workspaces){let s=D.join(n.cwd,"node_modules");if(i&&i.test(D.relative(this.opts.project.cwd,n.cwd))||!N.existsSync(s))continue;let o=await N.readdirPromise(s,{withFileTypes:!0}),a=o.filter(l=>!l.isDirectory()||l.name===".bin"||!l.name.startsWith("."));if(a.length===o.length)r.push(s);else for(let l of a)r.push(D.join(s,l.name))}return r}async unplugPackageIfNeeded(e,r,i,n){return this.shouldBeUnplugged(e,r,n)?this.unplugPackage(e,i):i.packageFs}shouldBeUnplugged(e,r,i){return typeof i.unplugged!="undefined"?i.unplugged:cje.has(e.identHash)?!0:r.manifest.preferUnplugged!==null?r.manifest.preferUnplugged:!!(AB(e,r,i,{configuration:this.opts.project.configuration}).length>0||r.misc.extractHint)}async unplugPackage(e,r){let i=nd(e,{configuration:this.opts.project.configuration});this.unpluggedPaths.add(i);let n=D.join(i,r.prefixPath,".ready");return await N.existsPromise(n)?new yt(i):(this.opts.project.storedBuildState.delete(e.locatorHash),await N.mkdirPromise(i,{recursive:!0}),await N.copyPromise(i,Qe.dot,{baseFs:r.packageFs,overwrite:!1}),await N.writeFilePromise(n,""),new yt(i))}getPackageInformation(e){let r=w.stringifyIdent(e),i=e.reference,n=this.packageRegistry.get(r);if(!n)throw new Error(`Assertion failed: The package information store should have been available (for ${w.prettyIdent(this.opts.project.configuration,e)})`);let s=n.get(i);if(!s)throw new Error(`Assertion failed: The package information should have been available (for ${w.prettyLocator(this.opts.project.configuration,e)})`);return s}getDiskInformation(e){let r=pe.getMapWithDefault(this.packageRegistry,"@@disk"),i=vF(this.opts.project.cwd,e);return pe.getFactoryWithDefault(r,i,()=>({packageLocation:i,packageDependencies:new Map,packagePeers:new Set,linkType:ct.SOFT,discardFromLookup:!1}))}};function vF(t,e){let r=D.relative(t,e);return r.match(/^\.{0,2}\//)||(r=`./${r}`),r.replace(/\/?$/,"/")}async function uje(t,e){var n;let r=(n=await ze.tryFind(e.prefixPath,{baseFs:e.packageFs}))!=null?n:new ze,i=new Set(["preinstall","install","postinstall"]);for(let s of r.scripts.keys())i.has(s)||r.scripts.delete(s);return{manifest:{os:r.os,cpu:r.cpu,scripts:r.scripts,preferUnplugged:r.preferUnplugged},misc:{extractHint:xF(e),hasBindingGyp:kF(e)}}}var Sie=re(Hi());var sd=class extends ye{constructor(){super(...arguments);this.all=H.Boolean("-A,--all",!1,{description:"Unplug direct dependencies from the entire project"});this.recursive=H.Boolean("-R,--recursive",!1,{description:"Unplug both direct and transitive dependencies"});this.json=H.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=H.Rest()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd),n=await ft.find(e);if(!i)throw new Ze(r.cwd,this.context.cwd);if(e.get("nodeLinker")!=="pnp")throw new me("This command can only be used if the `nodeLinker` option is set to `pnp`");await r.restoreInstallState();let s=new Set(this.patterns),o=this.patterns.map(f=>{let h=w.parseDescriptor(f),p=h.range!=="unknown"?h:w.makeDescriptor(h,"*");if(!Pt.validRange(p.range))throw new me(`The range of the descriptor patterns must be a valid semver range (${w.prettyDescriptor(e,p)})`);return m=>{let I=w.stringifyIdent(m);return!Sie.default.isMatch(I,w.stringifyIdent(p))||m.version&&!Pt.satisfiesWithPrereleases(m.version,p.range)?!1:(s.delete(f),!0)}}),a=()=>{let f=[];for(let h of r.storedPackages.values())!r.tryWorkspaceByLocator(h)&&!w.isVirtualLocator(h)&&o.some(p=>p(h))&&f.push(h);return f},l=f=>{let h=new Set,p=[],m=(I,y)=>{if(!h.has(I.locatorHash)&&(h.add(I.locatorHash),!r.tryWorkspaceByLocator(I)&&o.some(B=>B(I))&&p.push(I),!(y>0&&!this.recursive)))for(let B of I.dependencies.values()){let x=r.storedResolutions.get(B.descriptorHash);if(!x)throw new Error("Assertion failed: The resolution should have been registered");let F=r.storedPackages.get(x);if(!F)throw new Error("Assertion failed: The package should have been registered");m(F,y+1)}};for(let I of f){let y=r.storedPackages.get(I.anchoredLocator.locatorHash);if(!y)throw new Error("Assertion failed: The package should have been registered");m(y,0)}return p},c,u;if(this.all&&this.recursive?(c=a(),u="the project"):this.all?(c=l(r.workspaces),u="any workspace"):(c=l([i]),u="this workspace"),s.size>1)throw new me(`Patterns ${ae.prettyList(e,s,ae.Type.CODE)} don't match any packages referenced by ${u}`);if(s.size>0)throw new me(`Pattern ${ae.prettyList(e,s,ae.Type.CODE)} doesn't match any packages referenced by ${u}`);return c=pe.sortMap(c,f=>w.stringifyLocator(f)),(await xe.start({configuration:e,stdout:this.context.stdout,json:this.json},async f=>{var h;for(let p of c){let m=(h=p.version)!=null?h:"unknown",I=r.topLevelWorkspace.manifest.ensureDependencyMeta(w.makeDescriptor(p,m));I.unplugged=!0,f.reportInfo(z.UNNAMED,`Will unpack ${w.prettyLocator(e,p)} to ${ae.pretty(e,nd(p,{configuration:e}),ae.Type.PATH)}`),f.reportJson({locator:w.stringifyLocator(p),version:m})}await r.topLevelWorkspace.persistManifest(),f.reportSeparator(),await r.install({cache:n,report:f})})).exitCode()}};sd.paths=[["unplug"]],sd.usage=he.Usage({description:"force the unpacking of a list of packages",details:"\n This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\n\n A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\n\n Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\n\n By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\n\n This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\n ",examples:[["Unplug the lodash dependency from the active workspace","yarn unplug lodash"],["Unplug all instances of lodash referenced by any workspace","yarn unplug lodash -A"],["Unplug all instances of lodash referenced by the active workspace and its dependencies","yarn unplug lodash -R"],["Unplug all instances of lodash, anywhere","yarn unplug lodash -AR"],["Unplug one specific version of lodash","yarn unplug lodash@1.2.3"],["Unplug all packages with the `@babel` scope","yarn unplug '@babel/*'"],["Unplug all packages (only for testing, not recommended)","yarn unplug -R '*'"]]});var xie=sd;var Qa=t=>({cjs:D.join(t.cwd,xt.pnpCjs),cjsLegacy:D.join(t.cwd,xt.pnpJs)}),Pie=t=>/\s/.test(t)?JSON.stringify(t):t;async function gje(t,e,r){let i=Qa(t).cjs,n=`--require ${Pie(O.fromPortablePath(i))}`;if(i.includes(" ")&&kie.default.lt(process.versions.node,"12.0.0"))throw new Error(`Expected the build location to not include spaces when using Node < 12.0.0 (${process.versions.node})`);if(N.existsSync(i)){let s=e.NODE_OPTIONS||"",o=/\s*--require\s+\S*\.pnp\.c?js\s*/g;s=s.replace(o," ").trim(),s=s?`${n} ${s}`:n,e.NODE_OPTIONS=s}}async function fje(t,e){e(Qa(t).cjs),e(t.configuration.get("pnpDataPath")),e(t.configuration.get("pnpUnpluggedFolder"))}var hje={hooks:{populateYarnPaths:fje,setupScriptEnvironment:gje},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: "pnp", "node-modules"',type:ge.STRING,default:"pnp"},pnpMode:{description:"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.",type:ge.STRING,default:"strict"},pnpShebang:{description:"String to prepend to the generated PnP script",type:ge.STRING,default:"#!/usr/bin/env node"},pnpIgnorePatterns:{description:"Array of glob patterns; files matching them will use the classic resolution",type:ge.STRING,default:[],isArray:!0},pnpEnableInlining:{description:"If true, the PnP data will be inlined along with the generated loader",type:ge.BOOLEAN,default:!0},pnpFallbackMode:{description:"If true, the generated PnP loader will follow the top-level fallback rule",type:ge.STRING,default:"dependencies-only"},pnpUnpluggedFolder:{description:"Folder where the unplugged packages must be stored",type:ge.ABSOLUTE_PATH,default:"./.yarn/unplugged"},pnpDataPath:{description:"Path of the file where the PnP data (used by the loader) must be written",type:ge.ABSOLUTE_PATH,default:"./.pnp.data.json"}},linkers:[fl],commands:[xie]},pje=hje;var Mie=re(Nie());var OF=re(require("crypto")),Oie=re(require("fs")),Tie=1,Fr="node_modules",TF=".bin",Kie=".yarn-state.yml",Oi;(function(i){i.CLASSIC="classic",i.HARDLINKS_LOCAL="hardlinks-local",i.HARDLINKS_GLOBAL="hardlinks-global"})(Oi||(Oi={}));var KF=class{constructor(){this.installStateCache=new Map}supportsPackage(e,r){return r.project.configuration.get("nodeLinker")==="node-modules"}async findPackageLocation(e,r){let i=r.project.tryWorkspaceByLocator(e);if(i)return i.cwd;let n=await pe.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await UF(r.project,{unrollAliases:!0}));if(n===null)throw new me("Couldn't find the node_modules state file - running an install might help (findPackageLocation)");let s=n.locatorMap.get(w.stringifyLocator(e));if(!s){let a=new me(`Couldn't find ${w.prettyLocator(r.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw a.code="LOCATOR_NOT_INSTALLED",a}let o=r.project.configuration.startingCwd;return s.locations.find(a=>D.contains(o,a))||s.locations[0]}async findPackageLocator(e,r){let i=await pe.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await UF(r.project,{unrollAliases:!0}));if(i===null)return null;let{locationRoot:n,segments:s}=lB(D.resolve(e),{skipPrefix:r.project.cwd}),o=i.locationTree.get(n);if(!o)return null;let a=o.locator;for(let l of s){if(o=o.children.get(l),!o)break;a=o.locator||a}return w.parseLocator(a)}makeInstaller(e){return new Uie(e)}},Uie=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}getCustomDataKey(){return JSON.stringify({name:"NodeModulesInstaller",version:1})}attachCustomData(e){this.customData=e}async installPackage(e,r){var u;let i=D.resolve(r.packageFs.getRealPath(),r.prefixPath),n=this.customData.store.get(e.locatorHash);if(typeof n=="undefined"&&(n=await Fje(e,r),e.linkType===ct.HARD&&this.customData.store.set(e.locatorHash,n)),!wa.checkAndReportManifestCompatibility(e,n,"link",{configuration:this.opts.project.configuration,report:this.opts.report}))return{packageLocation:null,buildDirective:null};let s=new Map,o=new Set;s.has(w.stringifyIdent(e))||s.set(w.stringifyIdent(e),e.reference);let a=e;if(w.isVirtualLocator(e)){a=w.devirtualizeLocator(e);for(let g of e.peerDependencies.values())s.set(w.stringifyIdent(g),null),o.add(w.stringifyIdent(g))}let l={packageLocation:`${O.fromPortablePath(i)}/`,packageDependencies:s,packagePeers:o,linkType:e.linkType,discardFromLookup:(u=r.discardFromLookup)!=null?u:!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:n,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:l});let c=r.checksum?r.checksum.substring(r.checksum.indexOf("/")+1):null;return this.realLocatorChecksums.set(a.locatorHash,c),{packageLocation:i,buildDirective:null}}async attachInternalDependencies(e,r){let i=this.localStore.get(e.locatorHash);if(typeof i=="undefined")throw new Error("Assertion failed: Expected information object to have been registered");for(let[n,s]of r){let o=w.areIdentsEqual(n,s)?s.reference:[w.stringifyIdent(s),s.reference];i.pnpNode.packageDependencies.set(w.stringifyIdent(n),o)}}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the node-modules linker")}async finalizeInstall(){if(this.opts.project.configuration.get("nodeLinker")!=="node-modules")return;let e=new ir({baseFs:new nn({libzip:await gi(),maxOpenFiles:80,readOnlyArchives:!0})}),r=await UF(this.opts.project),i=this.opts.project.configuration.get("nmMode");(r===null||i!==r.nmMode)&&(this.opts.project.storedBuildState.clear(),r={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:i});let n=new Map(this.opts.project.workspaces.map(g=>{var h,p;let f=this.opts.project.configuration.get("nmHoistingLimits");try{f=pe.validateEnum(Mi,(p=(h=g.manifest.installConfig)==null?void 0:h.hoistingLimits)!=null?p:f)}catch(m){let I=w.prettyWorkspace(this.opts.project.configuration,g);this.opts.report.reportWarning(z.INVALID_MANIFEST,`${I}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(Mi).join(", ")}, using default: "${f}"`)}return[g.relativeCwd,f]})),s={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(g,f)=>Array.isArray(f)?{name:f[0],reference:f[1]}:{name:g,reference:f},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(g=>{let f=g.anchoredLocator;return{name:w.stringifyIdent(g.locator),reference:f.reference}}),getPackageInformation:g=>{let f=g.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:w.makeLocator(w.parseIdent(g.name),g.reference),h=this.localStore.get(f.locatorHash);if(typeof h=="undefined")throw new Error("Assertion failed: Expected the package reference to have been registered");return h.pnpNode},findPackageLocator:g=>{let f=this.opts.project.tryWorkspaceByCwd(O.toPortablePath(g));if(f!==null){let h=f.anchoredLocator;return{name:w.stringifyIdent(h),reference:h.reference}}throw new Error("Assertion failed: Unimplemented")},resolveToUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveRequest:()=>{throw new Error("Assertion failed: Unimplemented")},resolveVirtual:g=>O.fromPortablePath(ir.resolveVirtual(O.toPortablePath(g)))},{tree:o,errors:a,preserveSymlinksRequired:l}=td(s,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:n,project:this.opts.project});if(!o){for(let{messageName:g,text:f}of a)this.opts.report.reportError(g,f);return}let c=BF(o);await Rje(r,c,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async g=>{let f=w.parseLocator(g),h=this.localStore.get(f.locatorHash);if(typeof h=="undefined")throw new Error("Assertion failed: Expected the slot to exist");return h.customPackageData.manifest}});let u=[];for(let[g,f]of c.entries()){if(Yie(g))continue;let h=w.parseLocator(g),p=this.localStore.get(h.locatorHash);if(typeof p=="undefined")throw new Error("Assertion failed: Expected the slot to exist");if(this.opts.project.tryWorkspaceByLocator(p.pkg))continue;let m=wa.extractBuildScripts(p.pkg,p.customPackageData,p.dependencyMeta,{configuration:this.opts.project.configuration,report:this.opts.report});m.length!==0&&u.push({buildLocations:f.locations,locatorHash:h.locatorHash,buildDirective:m})}return l&&this.opts.report.reportWarning(z.NM_PRESERVE_SYMLINKS_REQUIRED,`The application uses portals and that's why ${ae.pretty(this.opts.project.configuration,"--preserve-symlinks",ae.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:u}}};async function Fje(t,e){var n;let r=(n=await ze.tryFind(e.prefixPath,{baseFs:e.packageFs}))!=null?n:new ze,i=new Set(["preinstall","install","postinstall"]);for(let s of r.scripts.keys())i.has(s)||r.scripts.delete(s);return{manifest:{bin:r.bin,os:r.os,cpu:r.cpu,scripts:r.scripts},misc:{extractHint:wa.getExtractHint(e),hasBindingGyp:wa.hasBindingGyp(e)}}}async function Lje(t,e,r,i){let n="";n+=`# Warning: This file is automatically generated. Removing it is fine, but will -`,n+=`# cause your node_modules installation to become invalidated. -`,n+=` -`,n+=`__metadata: -`,n+=` version: ${Tie} -`,n+=` nmMode: ${i} -`;let s=Array.from(e.keys()).sort(),o=w.stringifyLocator(t.topLevelWorkspace.anchoredLocator);for(let c of s){let u=e.get(c);n+=` -`,n+=`${JSON.stringify(c)}: -`,n+=` locations: -`;for(let g of u.locations){let f=D.contains(t.cwd,g);if(f===null)throw new Error(`Assertion failed: Expected the path to be within the project (${g})`);n+=` - ${JSON.stringify(f)} -`}if(u.aliases.length>0){n+=` aliases: -`;for(let g of u.aliases)n+=` - ${JSON.stringify(g)} -`}if(c===o&&r.size>0){n+=` bin: -`;for(let[g,f]of r){let h=D.contains(t.cwd,g);if(h===null)throw new Error(`Assertion failed: Expected the path to be within the project (${g})`);n+=` ${JSON.stringify(h)}: -`;for(let[p,m]of f){let I=D.relative(D.join(g,Fr),m);n+=` ${JSON.stringify(p)}: ${JSON.stringify(I)} -`}}}}let a=t.cwd,l=D.join(a,Fr,Kie);await N.changeFilePromise(l,n,{automaticNewlines:!0})}async function UF(t,{unrollAliases:e=!1}={}){let r=t.cwd,i=D.join(r,Fr,Kie);if(!N.existsSync(i))return null;let n=Kr(await N.readFilePromise(i,"utf8"));if(n.__metadata.version>Tie)return null;let s=n.__metadata.nmMode||Oi.CLASSIC,o=new Map,a=new Map;delete n.__metadata;for(let[l,c]of Object.entries(n)){let u=c.locations.map(f=>D.join(r,f)),g=c.bin;if(g)for(let[f,h]of Object.entries(g)){let p=D.join(r,O.toPortablePath(f)),m=pe.getMapWithDefault(a,p);for(let[I,y]of Object.entries(h))m.set(rr(I),O.toPortablePath([p,Fr,y].join(D.delimiter)))}if(o.set(l,{target:Qe.dot,linkType:ct.HARD,locations:u,aliases:c.aliases||[]}),e&&c.aliases)for(let f of c.aliases){let{scope:h,name:p}=w.parseLocator(l),m=w.makeLocator(w.makeIdent(h,p),f),I=w.stringifyLocator(m);o.set(I,{target:Qe.dot,linkType:ct.HARD,locations:u,aliases:[]})}}return{locatorMap:o,binSymlinks:a,locationTree:Hie(o,{skipPrefix:t.cwd}),nmMode:s}}var Mu=async(t,e)=>{if(t.split(D.sep).indexOf(Fr)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${t}`);try{if(!e.innerLoop&&(await N.lstatPromise(t)).isSymbolicLink()){await N.unlinkPromise(t);return}let r=await N.readdirPromise(t,{withFileTypes:!0});for(let i of r){let n=D.join(t,rr(i.name));i.isDirectory()?(i.name!==Fr||e&&e.innerLoop)&&await Mu(n,{innerLoop:!0,contentsOnly:!1}):await N.unlinkPromise(n)}e.contentsOnly||await N.rmdirPromise(t)}catch(r){if(r.code!=="ENOENT"&&r.code!=="ENOTEMPTY")throw r}},jie=4,lB=(t,{skipPrefix:e})=>{let r=D.contains(e,t);if(r===null)throw new Error(`Assertion failed: Writing attempt prevented to ${t} which is outside project root: ${e}`);let i=r.split(D.sep).filter(l=>l!==""),n=i.indexOf(Fr),s=i.slice(0,n).join(D.sep),o=D.join(e,s),a=i.slice(n);return{locationRoot:o,segments:a}},Hie=(t,{skipPrefix:e})=>{let r=new Map;if(t===null)return r;let i=()=>({children:new Map,linkType:ct.HARD});for(let[n,s]of t.entries()){if(s.linkType===ct.SOFT&&D.contains(e,s.target)!==null){let a=pe.getFactoryWithDefault(r,s.target,i);a.locator=n,a.linkType=s.linkType}for(let o of s.locations){let{locationRoot:a,segments:l}=lB(o,{skipPrefix:e}),c=pe.getFactoryWithDefault(r,a,i);for(let u=0;u{let r;try{process.platform==="win32"&&(r=await N.lstatPromise(t))}catch(i){}process.platform=="win32"&&(!r||r.isDirectory())?await N.symlinkPromise(t,e,"junction"):await N.symlinkPromise(D.relative(D.dirname(e),t),e)};async function Gie(t,e,r){let i=D.join(t,rr(`${OF.default.randomBytes(16).toString("hex")}.tmp`));try{await N.writeFilePromise(i,r);try{await N.linkPromise(i,e)}catch(n){}}finally{await N.unlinkPromise(i)}}async function Nje({srcPath:t,dstPath:e,srcMode:r,globalHardlinksStore:i,baseFs:n,nmMode:s,digest:o}){if(s===Oi.HARDLINKS_GLOBAL&&i&&o){let l=D.join(i,o.substring(0,2),`${o.substring(2)}.dat`),c;try{if(await Di.checksumFile(l,{baseFs:N,algorithm:"sha1"})!==o){let g=D.join(i,rr(`${OF.default.randomBytes(16).toString("hex")}.tmp`));await N.renamePromise(l,g);let f=await n.readFilePromise(t);await N.writeFilePromise(g,f);try{await N.linkPromise(g,l),await N.unlinkPromise(g)}catch(h){}}await N.linkPromise(l,e),c=!0}catch(u){c=!1}if(!c){let u=await n.readFilePromise(t);await Gie(i,l,u),await N.linkPromise(l,e)}}else await n.copyFilePromise(t,e);let a=r&511;a!==420&&await N.chmodPromise(e,a)}var ba;(function(i){i.FILE="file",i.DIRECTORY="directory",i.SYMLINK="symlink"})(ba||(ba={}));var Mje=async(t,e,{baseFs:r,globalHardlinksStore:i,nmMode:n,packageChecksum:s})=>{await N.mkdirPromise(t,{recursive:!0});let o=async(l=Qe.dot)=>{let c=D.join(e,l),u=await r.readdirPromise(c,{withFileTypes:!0}),g=new Map;for(let f of u){let h=D.join(l,f.name),p,m=D.join(c,f.name);if(f.isFile()){if(p={kind:ba.FILE,mode:(await r.lstatPromise(m)).mode},n===Oi.HARDLINKS_GLOBAL){let I=await Di.checksumFile(m,{baseFs:r,algorithm:"sha1"});p.digest=I}}else if(f.isDirectory())p={kind:ba.DIRECTORY};else if(f.isSymbolicLink())p={kind:ba.SYMLINK,symlinkTo:await r.readlinkPromise(m)};else throw new Error(`Unsupported file type (file: ${m}, mode: 0o${await r.statSync(m).mode.toString(8).padStart(6,"0")})`);if(g.set(h,p),f.isDirectory()&&h!==Fr){let I=await o(h);for(let[y,B]of I)g.set(y,B)}}return g},a;if(n===Oi.HARDLINKS_GLOBAL&&i&&s){let l=D.join(i,s.substring(0,2),`${s.substring(2)}.json`);try{a=new Map(Object.entries(JSON.parse(await N.readFilePromise(l,"utf8"))))}catch(c){a=await o(),await Gie(i,l,Buffer.from(JSON.stringify(Object.fromEntries(a))))}}else a=await o();for(let[l,c]of a){let u=D.join(e,l),g=D.join(t,l);c.kind===ba.DIRECTORY?await N.mkdirPromise(g,{recursive:!0}):c.kind===ba.FILE?await Nje({srcPath:u,dstPath:g,srcMode:c.mode,digest:c.digest,nmMode:n,baseFs:r,globalHardlinksStore:i}):c.kind===ba.SYMLINK&&await YF(D.resolve(D.dirname(g),c.symlinkTo),g)}};function Oje(t,e){let r=new Map([...t]),i=new Map([...e]);for(let[n,s]of t){let o=D.join(n,Fr);if(!N.existsSync(o)){s.children.delete(Fr);for(let a of i.keys())D.contains(o,a)!==null&&i.delete(a)}}return{locationTree:r,binSymlinks:i}}function Yie(t){let e=w.parseDescriptor(t);return w.isVirtualDescriptor(e)&&(e=w.devirtualizeDescriptor(e)),e.range.startsWith("link:")}async function Tje(t,e,r,{loadManifest:i}){let n=new Map;for(let[a,{locations:l}]of t){let c=Yie(a)?null:await i(a,l[0]),u=new Map;if(c)for(let[g,f]of c.bin){let h=D.join(l[0],f);f!==""&&N.existsSync(h)&&u.set(g,f)}n.set(a,u)}let s=new Map,o=(a,l,c)=>{let u=new Map,g=D.contains(r,a);if(c.locator&&g!==null){let f=n.get(c.locator);for(let[h,p]of f){let m=D.join(a,O.toPortablePath(p));u.set(rr(h),m)}for(let[h,p]of c.children){let m=D.join(a,h),I=o(m,m,p);I.size>0&&s.set(a,new Map([...s.get(a)||new Map,...I]))}}else for(let[f,h]of c.children){let p=o(D.join(a,f),l,h);for(let[m,I]of p)u.set(m,I)}return u};for(let[a,l]of e){let c=o(a,a,l);c.size>0&&s.set(a,new Map([...s.get(a)||new Map,...c]))}return s}var qie=(t,e)=>{if(!t||!e)return t===e;let r=w.parseLocator(t);w.isVirtualLocator(r)&&(r=w.devirtualizeLocator(r));let i=w.parseLocator(e);return w.isVirtualLocator(i)&&(i=w.devirtualizeLocator(i)),w.areLocatorsEqual(r,i)};function HF(t){return D.join(t.get("globalFolder"),"store")}async function Rje(t,e,{baseFs:r,project:i,report:n,loadManifest:s,realLocatorChecksums:o}){let a=D.join(i.cwd,Fr),{locationTree:l,binSymlinks:c}=Oje(t.locationTree,t.binSymlinks),u=Hie(e,{skipPrefix:i.cwd}),g=[],f=async({srcDir:L,dstDir:T,linkType:v,globalHardlinksStore:q,nmMode:oe,packageChecksum:U})=>{let A=(async()=>{try{v===ct.SOFT?(await N.mkdirPromise(D.dirname(T),{recursive:!0}),await YF(D.resolve(L),T)):await Mje(T,L,{baseFs:r,globalHardlinksStore:q,nmMode:oe,packageChecksum:U})}catch(W){throw W.message=`While persisting ${L} -> ${T} ${W.message}`,W}finally{B.tick()}})().then(()=>g.splice(g.indexOf(A),1));g.push(A),g.length>jie&&await Promise.race(g)},h=async(L,T,v)=>{let q=(async()=>{let oe=async(U,A,W)=>{try{W.innerLoop||await N.mkdirPromise(A,{recursive:!0});let ee=await N.readdirPromise(U,{withFileTypes:!0});for(let ie of ee){if(!W.innerLoop&&ie.name===TF)continue;let J=D.join(U,ie.name),R=D.join(A,ie.name);ie.isDirectory()?(ie.name!==Fr||W&&W.innerLoop)&&(await N.mkdirPromise(R,{recursive:!0}),await oe(J,R,V(P({},W),{innerLoop:!0}))):F===Oi.HARDLINKS_LOCAL||F===Oi.HARDLINKS_GLOBAL?await N.linkPromise(J,R):await N.copyFilePromise(J,R,Oie.default.constants.COPYFILE_FICLONE)}}catch(ee){throw W.innerLoop||(ee.message=`While cloning ${U} -> ${A} ${ee.message}`),ee}finally{W.innerLoop||B.tick()}};await oe(L,T,v)})().then(()=>g.splice(g.indexOf(q),1));g.push(q),g.length>jie&&await Promise.race(g)},p=async(L,T,v)=>{if(!v)T.children.has(Fr)&&await Mu(D.join(L,Fr),{contentsOnly:!1}),await Mu(L,{contentsOnly:L===a});else for(let[q,oe]of T.children){let U=v.children.get(q);await p(D.join(L,q),oe,U)}};for(let[L,T]of l){let v=u.get(L);for(let[q,oe]of T.children){if(q===".")continue;let U=v&&v.children.get(q);await p(D.join(L,q),oe,U)}}let m=async(L,T,v)=>{if(!v)T.children.has(Fr)&&await Mu(D.join(L,Fr),{contentsOnly:!0}),await Mu(L,{contentsOnly:T.linkType===ct.HARD});else{qie(T.locator,v.locator)||await Mu(L,{contentsOnly:T.linkType===ct.HARD});for(let[q,oe]of T.children){let U=v.children.get(q);await m(D.join(L,q),oe,U)}}};for(let[L,T]of u){let v=l.get(L);for(let[q,oe]of T.children){if(q===".")continue;let U=v&&v.children.get(q);await m(D.join(L,q),oe,U)}}let I=new Map,y=[];for(let[L,{locations:T}]of t.locatorMap.entries())for(let v of T){let{locationRoot:q,segments:oe}=lB(v,{skipPrefix:i.cwd}),U=u.get(q),A=q;if(U){for(let W of oe)if(A=D.join(A,W),U=U.children.get(W),!U)break;if(U){let W=qie(U.locator,L),ee=e.get(U.locator),ie=ee.target,J=A,R=ee.linkType;if(W)I.has(ie)||I.set(ie,J);else if(ie!==J){let ve=w.parseLocator(U.locator);w.isVirtualLocator(ve)&&(ve=w.devirtualizeLocator(ve)),y.push({srcDir:ie,dstDir:J,linkType:R,realLocatorHash:ve.locatorHash})}}}}for(let[L,{locations:T}]of e.entries())for(let v of T){let{locationRoot:q,segments:oe}=lB(v,{skipPrefix:i.cwd}),U=l.get(q),A=u.get(q),W=q,ee=e.get(L),ie=w.parseLocator(L);w.isVirtualLocator(ie)&&(ie=w.devirtualizeLocator(ie));let J=ie.locatorHash,R=ee.target,ve=v;if(R===ve)continue;let Fe=ee.linkType;for(let Ke of oe)A=A.children.get(Ke);if(!U)y.push({srcDir:R,dstDir:ve,linkType:Fe,realLocatorHash:J});else for(let Ke of oe)if(W=D.join(W,Ke),U=U.children.get(Ke),!U){y.push({srcDir:R,dstDir:ve,linkType:Fe,realLocatorHash:J});break}}let B=ci.progressViaCounter(y.length),x=n.reportProgress(B),F=i.configuration.get("nmMode");try{let L=F===Oi.HARDLINKS_GLOBAL?`${HF(i.configuration)}/v1`:null;if(L&&!await N.existsPromise(L)){await N.mkdirpPromise(L);for(let v=0;v<256;v++)await N.mkdirPromise(D.join(L,v.toString(16).padStart(2,"0")))}for(let v of y)(v.linkType===ct.SOFT||!I.has(v.srcDir))&&(I.set(v.srcDir,v.dstDir),await f(V(P({},v),{globalHardlinksStore:L,nmMode:F,packageChecksum:o.get(v.realLocatorHash)||null})));await Promise.all(g),g.length=0;for(let v of y){let q=I.get(v.srcDir);v.linkType!==ct.SOFT&&v.dstDir!==q&&await h(q,v.dstDir,{nmMode:F})}await Promise.all(g),await N.mkdirPromise(a,{recursive:!0});let T=await Tje(e,u,i.cwd,{loadManifest:s});await Kje(c,T,i.cwd),await Lje(i,e,T,F)}finally{x.stop()}}async function Kje(t,e,r){for(let i of t.keys()){if(D.contains(r,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);if(!e.has(i)){let n=D.join(i,Fr,TF);await N.removePromise(n)}}for(let[i,n]of e){if(D.contains(r,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);let s=D.join(i,Fr,TF),o=t.get(i)||new Map;await N.mkdirPromise(s,{recursive:!0});for(let a of o.keys())n.has(a)||(await N.removePromise(D.join(s,a)),process.platform==="win32"&&await N.removePromise(D.join(s,rr(`${a}.cmd`))));for(let[a,l]of n){let c=o.get(a),u=D.join(s,a);c!==l&&(process.platform==="win32"?await(0,Mie.default)(O.fromPortablePath(l),O.fromPortablePath(u),{createPwshFile:!1}):(await N.removePromise(u),await YF(l,u),D.contains(r,await N.realpathPromise(l))!==null&&await N.chmodPromise(l,493)))}}}var jF=class extends fl{constructor(){super(...arguments);this.mode="loose"}makeInstaller(e){return new Jie(e)}},Jie=class extends Lu{constructor(){super(...arguments);this.mode="loose"}async transformPnpSettings(e){let r=new ir({baseFs:new nn({libzip:await gi(),maxOpenFiles:80,readOnlyArchives:!0})}),i=bie(e,this.opts.project.cwd,r),{tree:n,errors:s}=td(i,{pnpifyFs:!1,project:this.opts.project});if(!n){for(let{messageName:u,text:g}of s)this.opts.report.reportError(u,g);return}let o=new Map;e.fallbackPool=o;let a=(u,g)=>{let f=w.parseLocator(g.locator),h=w.stringifyIdent(f);h===u?o.set(u,f.reference):o.set(u,[h,f.reference])},l=D.join(this.opts.project.cwd,xt.nodeModules),c=n.get(l);if(typeof c!="undefined"){if("target"in c)throw new Error("Assertion failed: Expected the root junction point to be a directory");for(let u of c.dirList){let g=D.join(l,u),f=n.get(g);if(typeof f=="undefined")throw new Error("Assertion failed: Expected the child to have been registered");if("target"in f)a(u,f);else for(let h of f.dirList){let p=D.join(g,h),m=n.get(p);if(typeof m=="undefined")throw new Error("Assertion failed: Expected the subchild to have been registered");if("target"in m)a(`${u}/${h}`,m);else throw new Error("Assertion failed: Expected the leaf junction to be a package")}}}}};var Uje={hooks:{cleanGlobalArtifacts:async t=>{let e=HF(t);await N.removePromise(e)}},configuration:{nmHoistingLimits:{description:"Prevent packages to be hoisted past specific levels",type:ge.STRING,values:[Mi.WORKSPACES,Mi.DEPENDENCIES,Mi.NONE],default:Mi.NONE},nmMode:{description:'If set to "hardlinks-local" Yarn will utilize hardlinks to reduce disk space consumption inside "node_modules" directories. With "hardlinks-global" Yarn will use global content addressable storage to reduce "node_modules" size across all the projects using this option.',type:ge.STRING,values:[Oi.CLASSIC,Oi.HARDLINKS_LOCAL,Oi.HARDLINKS_GLOBAL],default:Oi.CLASSIC}},linkers:[KF,jF]},Yje=Uje;var WR={};et(WR,{default:()=>zJe,npmConfigUtils:()=>Jt,npmHttpUtils:()=>Bt,npmPublishUtils:()=>Bd});var Xie=re(cr());var Mt="npm:";var Bt={};et(Bt,{AuthType:()=>Zi,customPackageError:()=>Gje,del:()=>Wje,get:()=>Gn,getIdentUrl:()=>xa,handleInvalidAuthenticationError:()=>Sa,post:()=>qje,put:()=>Jje});var zie=re(up()),Vie=re(require("url"));var Jt={};et(Jt,{RegistryType:()=>Da,getAuthConfiguration:()=>JF,getDefaultRegistry:()=>cB,getPublishRegistry:()=>Hje,getRegistryConfiguration:()=>Wie,getScopeConfiguration:()=>qF,getScopeRegistry:()=>Bo,normalizeRegistry:()=>hl});var Da;(function(r){r.FETCH_REGISTRY="npmRegistryServer",r.PUBLISH_REGISTRY="npmPublishRegistry"})(Da||(Da={}));function hl(t){return t.replace(/\/$/,"")}function Hje(t,{configuration:e}){return t.publishConfig&&t.publishConfig.registry?hl(t.publishConfig.registry):t.name?Bo(t.name.scope,{configuration:e,type:Da.PUBLISH_REGISTRY}):cB({configuration:e,type:Da.PUBLISH_REGISTRY})}function Bo(t,{configuration:e,type:r=Da.FETCH_REGISTRY}){let i=qF(t,{configuration:e});if(i===null)return cB({configuration:e,type:r});let n=i.get(r);return n===null?cB({configuration:e,type:r}):hl(n)}function cB({configuration:t,type:e=Da.FETCH_REGISTRY}){let r=t.get(e);return hl(r!==null?r:t.get(Da.FETCH_REGISTRY))}function Wie(t,{configuration:e}){let r=e.get("npmRegistries"),i=hl(t),n=r.get(i);if(typeof n!="undefined")return n;let s=r.get(i.replace(/^[a-z]+:/,""));return typeof s!="undefined"?s:null}function qF(t,{configuration:e}){if(t===null)return null;let i=e.get("npmScopes").get(t);return i||null}function JF(t,{configuration:e,ident:r}){let i=r&&qF(r.scope,{configuration:e});return(i==null?void 0:i.get("npmAuthIdent"))||(i==null?void 0:i.get("npmAuthToken"))?i:Wie(t,{configuration:e})||e}var Zi;(function(n){n[n.NO_AUTH=0]="NO_AUTH",n[n.BEST_EFFORT=1]="BEST_EFFORT",n[n.CONFIGURATION=2]="CONFIGURATION",n[n.ALWAYS_AUTH=3]="ALWAYS_AUTH"})(Zi||(Zi={}));async function Sa(t,{attemptedAs:e,registry:r,headers:i,configuration:n}){var s,o;if(((s=t.originalError)==null?void 0:s.name)==="HTTPError"&&((o=t.originalError)==null?void 0:o.response.statusCode)===401)throw new _e(z.AUTHENTICATION_INVALID,`Invalid authentication (${typeof e!="string"?`as ${await jje(r,i,{configuration:n})}`:`attempted as ${e}`})`)}function Gje(t){var e;return((e=t.response)==null?void 0:e.statusCode)===404?"Package not found":null}function xa(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}async function Gn(t,a){var l=a,{configuration:e,headers:r,ident:i,authType:n,registry:s}=l,o=Rr(l,["configuration","headers","ident","authType","registry"]);if(i&&typeof s=="undefined"&&(s=Bo(i.scope,{configuration:e})),i&&i.scope&&typeof n=="undefined"&&(n=1),typeof s!="string")throw new Error("Assertion failed: The registry should be a string");let c=await uB(s,{authType:n,configuration:e,ident:i});c&&(r=V(P({},r),{authorization:c}));try{return await Rt.get(t.charAt(0)==="/"?`${s}${t}`:t,P({configuration:e,headers:r},o))}catch(u){throw await Sa(u,{registry:s,configuration:e,headers:r}),u}}async function qje(t,e,c){var u=c,{attemptedAs:r,configuration:i,headers:n,ident:s,authType:o=3,registry:a}=u,l=Rr(u,["attemptedAs","configuration","headers","ident","authType","registry"]);if(s&&typeof a=="undefined"&&(a=Bo(s.scope,{configuration:i})),typeof a!="string")throw new Error("Assertion failed: The registry should be a string");let g=await uB(a,{authType:o,configuration:i,ident:s});g&&(n=V(P({},n),{authorization:g}));try{return await Rt.post(a+t,e,P({configuration:i,headers:n},l))}catch(f){if(!zF(f))throw await Sa(f,{attemptedAs:r,registry:a,configuration:i,headers:n}),f;let h=await WF(),p=P(P({},n),VF(h));try{return await Rt.post(`${a}${t}`,e,P({configuration:i,headers:p},l))}catch(m){throw await Sa(m,{attemptedAs:r,registry:a,configuration:i,headers:n}),m}}}async function Jje(t,e,c){var u=c,{attemptedAs:r,configuration:i,headers:n,ident:s,authType:o=3,registry:a}=u,l=Rr(u,["attemptedAs","configuration","headers","ident","authType","registry"]);if(s&&typeof a=="undefined"&&(a=Bo(s.scope,{configuration:i})),typeof a!="string")throw new Error("Assertion failed: The registry should be a string");let g=await uB(a,{authType:o,configuration:i,ident:s});g&&(n=V(P({},n),{authorization:g}));try{return await Rt.put(a+t,e,P({configuration:i,headers:n},l))}catch(f){if(!zF(f))throw await Sa(f,{attemptedAs:r,registry:a,configuration:i,headers:n}),f;let h=await WF(),p=P(P({},n),VF(h));try{return await Rt.put(`${a}${t}`,e,P({configuration:i,headers:p},l))}catch(m){throw await Sa(m,{attemptedAs:r,registry:a,configuration:i,headers:n}),m}}}async function Wje(t,l){var c=l,{attemptedAs:e,configuration:r,headers:i,ident:n,authType:s=3,registry:o}=c,a=Rr(c,["attemptedAs","configuration","headers","ident","authType","registry"]);if(n&&typeof o=="undefined"&&(o=Bo(n.scope,{configuration:r})),typeof o!="string")throw new Error("Assertion failed: The registry should be a string");let u=await uB(o,{authType:s,configuration:r,ident:n});u&&(i=V(P({},i),{authorization:u}));try{return await Rt.del(o+t,P({configuration:r,headers:i},a))}catch(g){if(!zF(g))throw await Sa(g,{attemptedAs:e,registry:o,configuration:r,headers:i}),g;let f=await WF(),h=P(P({},i),VF(f));try{return await Rt.del(`${o}${t}`,P({configuration:r,headers:h},a))}catch(p){throw await Sa(p,{attemptedAs:e,registry:o,configuration:r,headers:i}),p}}}async function uB(t,{authType:e=2,configuration:r,ident:i}){let n=JF(t,{configuration:r,ident:i}),s=zje(n,e);if(!s)return null;let o=await r.reduceHook(a=>a.getNpmAuthenticationHeader,void 0,t,{configuration:r,ident:i});if(o)return o;if(n.get("npmAuthToken"))return`Bearer ${n.get("npmAuthToken")}`;if(n.get("npmAuthIdent")){let a=n.get("npmAuthIdent");return a.includes(":")?`Basic ${Buffer.from(a).toString("base64")}`:`Basic ${a}`}if(s&&e!==1)throw new _e(z.AUTHENTICATION_NOT_FOUND,"No authentication configured for request");return null}function zje(t,e){switch(e){case 2:return t.get("npmAlwaysAuth");case 1:case 3:return!0;case 0:return!1;default:throw new Error("Unreachable")}}async function jje(t,e,{configuration:r}){var i;if(typeof e=="undefined"||typeof e.authorization=="undefined")return"an anonymous user";try{return(i=(await Rt.get(new Vie.URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username)!=null?i:"an unknown user"}catch{return"an unknown user"}}async function WF(){if(process.env.TEST_ENV)return process.env.TEST_NPM_2FA_TOKEN||"";let{otp:t}=await(0,zie.prompt)({type:"password",name:"otp",message:"One-time password:",required:!0,onCancel:()=>process.exit(130)});return t}function zF(t){var e,r;if(((e=t.originalError)==null?void 0:e.name)!=="HTTPError")return!1;try{return((r=t.originalError)==null?void 0:r.response.headers["www-authenticate"].split(/,\s*/).map(n=>n.toLowerCase())).includes("otp")}catch(i){return!1}}function VF(t){return{["npm-otp"]:t}}var XF=class{supports(e,r){if(!e.reference.startsWith(Mt))return!1;let{selector:i,params:n}=w.parseRange(e.reference);return!(!Xie.default.valid(i)||n===null||typeof n.__archiveUrl!="string")}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${w.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),skipIntegrityCheck:r.skipIntegrityCheck});return{packageFs:n,releaseFs:s,prefixPath:w.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,r){let{params:i}=w.parseRange(e.reference);if(i===null||typeof i.__archiveUrl!="string")throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");let n=await Gn(i.__archiveUrl,{configuration:r.project.configuration,ident:e});return await hr.convertToZip(n,{compressionLevel:r.project.configuration.get("compressionLevel"),prefixPath:w.getIdentVendorPath(e),stripComponents:1})}};var ZF=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Mt)||!w.tryParseDescriptor(e.range.slice(Mt.length),!0))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){let i=w.parseDescriptor(e.range.slice(Mt.length),!0);return r.resolver.getResolutionDependencies(i,r)}async getCandidates(e,r,i){let n=w.parseDescriptor(e.range.slice(Mt.length),!0);return await i.resolver.getCandidates(n,r,i)}async getSatisfying(e,r,i){let n=w.parseDescriptor(e.range.slice(Mt.length),!0);return i.resolver.getSatisfying(n,r,i)}resolve(e,r){throw new Error("Unreachable")}};var _F=re(cr()),Zie=re(require("url"));var qn=class{supports(e,r){if(!e.reference.startsWith(Mt))return!1;let i=new Zie.URL(e.reference);return!(!_F.default.valid(i.pathname)||i.searchParams.has("__archiveUrl"))}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${w.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,r),skipIntegrityCheck:r.skipIntegrityCheck});return{packageFs:n,releaseFs:s,prefixPath:w.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,r){let i;try{i=await Gn(qn.getLocatorUrl(e),{configuration:r.project.configuration,ident:e})}catch(n){i=await Gn(qn.getLocatorUrl(e).replace(/%2f/g,"/"),{configuration:r.project.configuration,ident:e})}return await hr.convertToZip(i,{compressionLevel:r.project.configuration.get("compressionLevel"),prefixPath:w.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,r,{configuration:i}){let n=Bo(e.scope,{configuration:i}),s=qn.getLocatorUrl(e);return r=r.replace(/^https?:(\/\/(?:[^/]+\.)?npmjs.org(?:$|\/))/,"https:$1"),n=n.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r=r.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r===n+s||r===n+s.replace(/%2f/g,"/")}static getLocatorUrl(e){let r=_F.default.clean(e.reference.slice(Mt.length));if(r===null)throw new _e(z.RESOLVER_NOT_FOUND,"The npm semver resolver got selected, but the version isn't semver");return`${xa(e)}/-/${e.name}-${r}.tgz`}};var $F=re(cr());var gB=w.makeIdent(null,"node-gyp"),Vje=/\b(node-gyp|prebuild-install)\b/,eR=class{supportsDescriptor(e,r){return e.range.startsWith(Mt)?!!Pt.validRange(e.range.slice(Mt.length)):!1}supportsLocator(e,r){if(!e.reference.startsWith(Mt))return!1;let{selector:i}=w.parseRange(e.reference);return!!$F.default.valid(i)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=Pt.validRange(e.range.slice(Mt.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(Mt.length)}`);let s=await Gn(xa(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0}),o=pe.mapAndFilter(Object.keys(s.versions),c=>{try{let u=new Pt.SemVer(c);if(n.test(u))return u}catch{}return pe.mapAndFilter.skip}),a=o.filter(c=>!s.versions[c.raw].deprecated),l=a.length>0?a:o;return l.sort((c,u)=>-c.compare(u)),l.map(c=>{let u=w.makeLocator(e,`${Mt}${c.raw}`),g=s.versions[c.raw].dist.tarball;return qn.isConventionalTarballUrl(u,g,{configuration:i.project.configuration})?u:w.bindLocator(u,{__archiveUrl:g})})}async getSatisfying(e,r,i){let n=Pt.validRange(e.range.slice(Mt.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(Mt.length)}`);return pe.mapAndFilter(r,s=>{try{let{selector:o}=w.parseRange(s,{requireProtocol:Mt}),a=new Pt.SemVer(o);if(n.test(a))return{reference:s,version:a}}catch{}return pe.mapAndFilter.skip}).sort((s,o)=>-s.version.compare(o.version)).map(({reference:s})=>w.makeLocator(e,s))}async resolve(e,r){let{selector:i}=w.parseRange(e.reference),n=$F.default.clean(i);if(n===null)throw new _e(z.RESOLVER_NOT_FOUND,"The npm semver resolver got selected, but the version isn't semver");let s=await Gn(xa(e),{configuration:r.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,"versions"))throw new _e(z.REMOTE_INVALID,'Registry returned invalid data for - missing "versions" field');if(!Object.prototype.hasOwnProperty.call(s.versions,n))throw new _e(z.REMOTE_NOT_FOUND,`Registry failed to return reference "${n}"`);let o=new ze;if(o.load(s.versions[n]),!o.dependencies.has(gB.identHash)&&!o.peerDependencies.has(gB.identHash)){for(let a of o.scripts.values())if(a.match(Vje)){o.dependencies.set(gB.identHash,w.makeDescriptor(gB,"latest")),r.report.reportWarning(z.NODE_GYP_INJECTED,`${w.prettyLocator(r.project.configuration,e)}: Implicit dependencies on node-gyp are discouraged`);break}}return typeof o.raw.deprecated=="string"&&r.report.reportWarningOnce(z.DEPRECATED_PACKAGE,`${w.prettyLocator(r.project.configuration,e)} is deprecated: ${o.raw.deprecated}`),V(P({},e),{version:n,languageName:"node",linkType:ct.HARD,dependencies:o.dependencies,peerDependencies:o.peerDependencies,dependenciesMeta:o.dependenciesMeta,peerDependenciesMeta:o.peerDependenciesMeta,bin:o.bin})}};var tR=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Mt)||!Zc.test(e.range.slice(Mt.length)))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=e.range.slice(Mt.length),s=await Gn(xa(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,"dist-tags"))throw new _e(z.REMOTE_INVALID,'Registry returned invalid data - missing "dist-tags" field');let o=s["dist-tags"];if(!Object.prototype.hasOwnProperty.call(o,n))throw new _e(z.REMOTE_NOT_FOUND,`Registry failed to return tag "${n}"`);let a=o[n],l=w.makeLocator(e,`${Mt}${a}`),c=s.versions[a].dist.tarball;return qn.isConventionalTarballUrl(l,c,{configuration:i.project.configuration})?[l]:[w.bindLocator(l,{__archiveUrl:c})]}async getSatisfying(e,r,i){return null}async resolve(e,r){throw new Error("Unreachable")}};var Bd={};et(Bd,{makePublishBody:()=>JJe});var jR={};et(jR,{default:()=>xJe,packUtils:()=>Do});var Do={};et(Do,{genPackList:()=>LB,genPackStream:()=>HR,genPackageManifest:()=>bse,hasPackScripts:()=>UR,prepareForPack:()=>YR});var KR=re(Hi()),wse=re(Bse()),Qse=re(require("zlib")),CJe=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],mJe=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function UR(t){return!!(Qt.hasWorkspaceScript(t,"prepack")||Qt.hasWorkspaceScript(t,"postpack"))}async function YR(t,{report:e},r){await Qt.maybeExecuteWorkspaceLifecycleScript(t,"prepack",{report:e});try{await r()}finally{await Qt.maybeExecuteWorkspaceLifecycleScript(t,"postpack",{report:e})}}async function HR(t,e){var s,o;typeof e=="undefined"&&(e=await LB(t));let r=new Set;for(let a of(o=(s=t.manifest.publishConfig)==null?void 0:s.executableFiles)!=null?o:new Set)r.add(D.normalize(a));for(let a of t.manifest.bin.values())r.add(D.normalize(a));let i=wse.default.pack();process.nextTick(async()=>{for(let a of e){let l=D.normalize(a),c=D.resolve(t.cwd,l),u=D.join("package",l),g=await N.lstatPromise(c),f={name:u,mtime:new Date(hr.safeTime*1e3)},h=r.has(l)?493:420,p,m,I=new Promise((B,x)=>{p=B,m=x}),y=B=>{B?m(B):p()};if(g.isFile()){let B;l==="package.json"?B=Buffer.from(JSON.stringify(await bse(t),null,2)):B=await N.readFilePromise(c),i.entry(V(P({},f),{mode:h,type:"file"}),B,y)}else g.isSymbolicLink()?i.entry(V(P({},f),{mode:h,type:"symlink",linkname:await N.readlinkPromise(c)}),y):y(new Error(`Unsupported file type ${g.mode} for ${O.fromPortablePath(l)}`));await I}i.finalize()});let n=(0,Qse.createGzip)();return i.pipe(n),n}async function bse(t){let e=JSON.parse(JSON.stringify(t.manifest.raw));return await t.project.configuration.triggerHook(r=>r.beforeWorkspacePacking,t,e),e}async function LB(t){var g,f,h,p,m,I,y,B;let e=t.project,r=e.configuration,i={accept:[],reject:[]};for(let x of mJe)i.reject.push(x);for(let x of CJe)i.accept.push(x);i.reject.push(r.get("rcFilename"));let n=x=>{if(x===null||!x.startsWith(`${t.cwd}/`))return;let F=D.relative(t.cwd,x),L=D.resolve(Qe.root,F);i.reject.push(L)};n(D.resolve(e.cwd,r.get("lockfileFilename"))),n(r.get("cacheFolder")),n(r.get("globalFolder")),n(r.get("installStatePath")),n(r.get("virtualFolder")),n(r.get("yarnPath")),await r.triggerHook(x=>x.populateYarnPaths,e,x=>{n(x)});for(let x of e.workspaces){let F=D.relative(t.cwd,x.cwd);F!==""&&!F.match(/^(\.\.)?\//)&&i.reject.push(`/${F}`)}let s={accept:[],reject:[]},o=(f=(g=t.manifest.publishConfig)==null?void 0:g.main)!=null?f:t.manifest.main,a=(p=(h=t.manifest.publishConfig)==null?void 0:h.module)!=null?p:t.manifest.module,l=(I=(m=t.manifest.publishConfig)==null?void 0:m.browser)!=null?I:t.manifest.browser,c=(B=(y=t.manifest.publishConfig)==null?void 0:y.bin)!=null?B:t.manifest.bin;o!=null&&s.accept.push(D.resolve(Qe.root,o)),a!=null&&s.accept.push(D.resolve(Qe.root,a)),typeof l=="string"&&s.accept.push(D.resolve(Qe.root,l));for(let x of c.values())s.accept.push(D.resolve(Qe.root,x));if(l instanceof Map)for(let[x,F]of l.entries())s.accept.push(D.resolve(Qe.root,x)),typeof F=="string"&&s.accept.push(D.resolve(Qe.root,F));let u=t.manifest.files!==null;if(u){s.reject.push("/*");for(let x of t.manifest.files)Dse(s.accept,x,{cwd:Qe.root})}return await IJe(t.cwd,{hasExplicitFileList:u,globalList:i,ignoreList:s})}async function IJe(t,{hasExplicitFileList:e,globalList:r,ignoreList:i}){let n=[],s=new Ns(t),o=[[Qe.root,[i]]];for(;o.length>0;){let[a,l]=o.pop(),c=await s.lstatPromise(a);if(!xse(a,{globalList:r,ignoreLists:c.isDirectory()?null:l}))if(c.isDirectory()){let u=await s.readdirPromise(a),g=!1,f=!1;if(!e||a!==Qe.root)for(let m of u)g=g||m===".gitignore",f=f||m===".npmignore";let h=f?await Sse(s,a,".npmignore"):g?await Sse(s,a,".gitignore"):null,p=h!==null?[h].concat(l):l;xse(a,{globalList:r,ignoreLists:l})&&(p=[...l,{accept:[],reject:["**/*"]}]);for(let m of u)o.push([D.resolve(a,m),p])}else(c.isFile()||c.isSymbolicLink())&&n.push(D.relative(Qe.root,a))}return n.sort()}async function Sse(t,e,r){let i={accept:[],reject:[]},n=await t.readFilePromise(D.join(e,r),"utf8");for(let s of n.split(/\n/g))Dse(i.reject,s,{cwd:e});return i}function EJe(t,{cwd:e}){let r=t[0]==="!";return r&&(t=t.slice(1)),t.match(/\.{0,1}\//)&&(t=D.resolve(e,t)),r&&(t=`!${t}`),t}function Dse(t,e,{cwd:r}){let i=e.trim();i===""||i[0]==="#"||t.push(EJe(i,{cwd:r}))}function xse(t,{globalList:e,ignoreLists:r}){if(NB(t,e.accept))return!1;if(NB(t,e.reject))return!0;if(r!==null)for(let i of r){if(NB(t,i.accept))return!1;if(NB(t,i.reject))return!0}return!1}function NB(t,e){let r=e,i=[];for(let n=0;n{await YR(i,{report:l},async()=>{l.reportJson({base:i.cwd});let c=await LB(i);for(let u of c)l.reportInfo(null,u),l.reportJson({location:u});if(!this.dryRun){let u=await HR(i,c),g=N.createWriteStream(s);u.pipe(g),await new Promise(f=>{g.on("finish",f)})}}),this.dryRun||(l.reportInfo(z.UNNAMED,`Package archive generated in ${ae.pretty(e,s,ae.Type.PATH)}`),l.reportJson({output:s}))})).exitCode()}};Id.paths=[["pack"]],Id.usage=he.Usage({description:"generate a tarball from the active workspace",details:"\n This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\n\n If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\n ",examples:[["Create an archive from the active workspace","yarn pack"],["List the files that would be made part of the workspace's archive","yarn pack --dry-run"],["Name and output the archive in a dedicated folder","yarn pack --out /artifacts/%s-%v.tgz"]]});var Pse=Id;function yJe(t,{workspace:e}){let r=t.replace("%s",BJe(e)).replace("%v",wJe(e));return O.toPortablePath(r)}function BJe(t){return t.manifest.name!==null?w.slugifyIdent(t.manifest.name):"package"}function wJe(t){return t.manifest.version!==null?t.manifest.version:"unknown"}var QJe=["dependencies","devDependencies","peerDependencies"],bJe="workspace:",DJe=(t,e)=>{var i;e.publishConfig&&(e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let r=t.project;for(let n of QJe)for(let s of t.manifest.getForScope(n).values()){let o=r.tryWorkspaceByDescriptor(s),a=w.parseRange(s.range);if(a.protocol===bJe)if(o===null){if(r.tryWorkspaceByIdent(s)===null)throw new _e(z.WORKSPACE_NOT_FOUND,`${w.prettyDescriptor(r.configuration,s)}: No local workspace found for this range`)}else{let l;w.areDescriptorsEqual(s,o.anchoredDescriptor)||a.selector==="*"?l=(i=o.manifest.version)!=null?i:"0.0.0":l=a.selector,e[n][w.stringifyIdent(s)]=l}}},SJe={hooks:{beforeWorkspacePacking:DJe},commands:[Pse]},xJe=SJe;var Kse=re(require("crypto")),Use=re(Tse()),Yse=re(require("url"));async function JJe(t,e,{access:r,tag:i,registry:n}){let s=t.project.configuration,o=t.manifest.name,a=t.manifest.version,l=w.stringifyIdent(o),c=(0,Kse.createHash)("sha1").update(e).digest("hex"),u=Use.default.fromData(e).toString();typeof r=="undefined"&&(t.manifest.publishConfig&&typeof t.manifest.publishConfig.access=="string"?r=t.manifest.publishConfig.access:s.get("npmPublishAccess")!==null?r=s.get("npmPublishAccess"):o.scope?r="restricted":r="public");let g=await Do.genPackageManifest(t),f=`${l}-${a}.tgz`,h=new Yse.URL(`${l}/-/${f}`,n);return{_id:l,_attachments:{[f]:{content_type:"application/octet-stream",data:e.toString("base64"),length:e.length}},name:l,access:r,["dist-tags"]:{[i]:a},versions:{[a]:V(P({},g),{_id:`${l}@${a}`,name:l,version:a,dist:{shasum:c,integrity:u,tarball:h.toString()}})}}}var zR={npmAlwaysAuth:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:ge.BOOLEAN,default:!1},npmAuthIdent:{description:"Authentication identity for the npm registry (_auth in npm and yarn v1)",type:ge.SECRET,default:null},npmAuthToken:{description:"Authentication token for the npm registry (_authToken in npm and yarn v1)",type:ge.SECRET,default:null}},Hse={npmPublishRegistry:{description:"Registry to push packages to",type:ge.STRING,default:null},npmRegistryServer:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:ge.STRING,default:"https://registry.yarnpkg.com"}},WJe={configuration:V(P(P({},zR),Hse),{npmScopes:{description:"Settings per package scope",type:ge.MAP,valueDefinition:{description:"",type:ge.SHAPE,properties:P(P({},zR),Hse)}},npmRegistries:{description:"Settings per registry",type:ge.MAP,normalizeKeys:hl,valueDefinition:{description:"",type:ge.SHAPE,properties:P({},zR)}}}),fetchers:[XF,qn],resolvers:[ZF,eR,tR]},zJe=WJe;var _R={};et(_R,{default:()=>iWe});vn();var Ss;(function(i){i.All="all",i.Production="production",i.Development="development"})(Ss||(Ss={}));var Wn;(function(s){s.Info="info",s.Low="low",s.Moderate="moderate",s.High="high",s.Critical="critical"})(Wn||(Wn={}));var MB=[Wn.Info,Wn.Low,Wn.Moderate,Wn.High,Wn.Critical];function jse(t,e){let r=[],i=new Set,n=o=>{i.has(o)||(i.add(o),r.push(o))};for(let o of e)n(o);let s=new Set;for(;r.length>0;){let o=r.shift(),a=t.storedResolutions.get(o);if(typeof a=="undefined")throw new Error("Assertion failed: Expected the resolution to have been registered");let l=t.storedPackages.get(a);if(!!l){s.add(o);for(let c of l.dependencies.values())n(c.descriptorHash)}}return s}function VJe(t,e){return new Set([...t].filter(r=>!e.has(r)))}function XJe(t,e,{all:r}){let i=r?t.workspaces:[e],n=i.map(f=>f.manifest),s=new Set(n.map(f=>[...f.dependencies].map(([h,p])=>h)).flat()),o=new Set(n.map(f=>[...f.devDependencies].map(([h,p])=>h)).flat()),a=i.map(f=>[...f.dependencies.values()]).flat(),l=a.filter(f=>s.has(f.identHash)).map(f=>f.descriptorHash),c=a.filter(f=>o.has(f.identHash)).map(f=>f.descriptorHash),u=jse(t,l),g=jse(t,c);return VJe(g,u)}function Gse(t){let e={};for(let r of t)e[w.stringifyIdent(r)]=w.parseRange(r.range).selector;return e}function qse(t){if(typeof t=="undefined")return new Set;let e=MB.indexOf(t),r=MB.slice(e);return new Set(r)}function ZJe(t,e){let r=qse(e),i={};for(let n of r)i[n]=t[n];return i}function Jse(t,e){var i;let r=ZJe(t,e);for(let n of Object.keys(r))if((i=r[n])!=null?i:0>0)return!0;return!1}function Wse(t,e){let r={},i={children:r},n=Object.values(t.advisories);if(e!=null){let s=qse(e);n=n.filter(o=>s.has(o.severity))}for(let s of pe.sortMap(n,o=>o.module_name))r[s.module_name]={label:s.module_name,value:ae.tuple(ae.Type.RANGE,s.findings.map(o=>o.version).join(", ")),children:{Issue:{label:"Issue",value:ae.tuple(ae.Type.NO_HINT,s.title)},URL:{label:"URL",value:ae.tuple(ae.Type.URL,s.url)},Severity:{label:"Severity",value:ae.tuple(ae.Type.NO_HINT,s.severity)},["Vulnerable Versions"]:{label:"Vulnerable Versions",value:ae.tuple(ae.Type.RANGE,s.vulnerable_versions)},["Patched Versions"]:{label:"Patched Versions",value:ae.tuple(ae.Type.RANGE,s.patched_versions)},Via:{label:"Via",value:ae.tuple(ae.Type.NO_HINT,Array.from(new Set(s.findings.map(o=>o.paths).flat().map(o=>o.split(">")[0]))).join(", "))},Recommendation:{label:"Recommendation",value:ae.tuple(ae.Type.NO_HINT,s.recommendation.replace(/\n/g," "))}}};return i}function zse(t,e,{all:r,environment:i}){let n=r?t.workspaces:[e],s=[Ss.All,Ss.Production].includes(i),o=[];if(s)for(let c of n)for(let u of c.manifest.dependencies.values())o.push(u);let a=[Ss.All,Ss.Development].includes(i),l=[];if(a)for(let c of n)for(let u of c.manifest.devDependencies.values())l.push(u);return Gse([...o,...l].filter(c=>w.parseRange(c.range).protocol===null))}function Vse(t,e,{all:r}){var s;let i=XJe(t,e,{all:r}),n={};for(let o of t.storedPackages.values())n[w.stringifyIdent(o)]={version:(s=o.version)!=null?s:"0.0.0",integrity:o.identHash,requires:Gse(o.dependencies.values()),dev:i.has(w.convertLocatorToDescriptor(o).descriptorHash)};return n}var wd=class extends ye{constructor(){super(...arguments);this.all=H.Boolean("-A,--all",!1,{description:"Audit dependencies from all workspaces"});this.recursive=H.Boolean("-R,--recursive",!1,{description:"Audit transitive dependencies as well"});this.environment=H.String("--environment",Ss.All,{description:"Which environments to cover",validator:ni(Ss)});this.json=H.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.severity=H.String("--severity",Wn.Info,{description:"Minimal severity requested for packages to be displayed",validator:ni(Wn)})}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd);if(!i)throw new Ze(r.cwd,this.context.cwd);await r.restoreInstallState();let n=zse(r,i,{all:this.all,environment:this.environment}),s=Vse(r,i,{all:this.all});if(!this.recursive)for(let f of Object.keys(s))Object.prototype.hasOwnProperty.call(n,f)?s[f].requires={}:delete s[f];let o={requires:n,dependencies:s},a=Jt.getPublishRegistry(i.manifest,{configuration:e}),l,c=await uo.start({configuration:e,stdout:this.context.stdout},async()=>{l=await Bt.post("/-/npm/v1/security/audits/quick",o,{authType:Bt.AuthType.NO_AUTH,configuration:e,jsonResponse:!0,registry:a})});if(c.hasErrors())return c.exitCode();let u=Jse(l.metadata.vulnerabilities,this.severity);return!this.json&&u?(Un.emitTree(Wse(l,this.severity),{configuration:e,json:this.json,stdout:this.context.stdout,separators:2}),1):(await xe.start({configuration:e,includeFooter:!1,json:this.json,stdout:this.context.stdout},async f=>{f.reportJson(l),u||f.reportInfo(z.EXCEPTION,"No audit suggestions")})).exitCode()}};wd.paths=[["npm","audit"]],wd.usage=he.Usage({description:"perform a vulnerability audit against the installed packages",details:` - This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths). - - For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \`-A,--all\`. To extend this search to both direct and transitive dependencies, use \`-R,--recursive\`. - - Applying the \`--severity\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${MB.map(e=>`\`${e}\``).join(", ")}. - - If the \`--json\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages. - - To understand the dependency tree requiring vulnerable packages, check the raw report with the \`--json\` flag or use \`yarn why \` to get more information as to who depends on them. - `,examples:[["Checks for known security issues with the installed packages. The output is a list of known issues.","yarn npm audit"],["Audit dependencies in all workspaces","yarn npm audit --all"],["Limit auditing to `dependencies` (excludes `devDependencies`)","yarn npm audit --environment production"],["Show audit report as valid JSON","yarn npm audit --json"],["Audit all direct and transitive dependencies","yarn npm audit --recursive"],["Output moderate (or more severe) vulnerabilities","yarn npm audit --severity moderate"]]});var Xse=wd;var Zse=re(require("path")),VR=re(cr()),XR=re(require("util")),Qd=class extends ye{constructor(){super(...arguments);this.fields=H.String("-f,--fields",{description:"A comma-separated list of manifest fields that should be displayed"});this.json=H.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.packages=H.Rest()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r}=await Re.find(e,this.context.cwd),i=typeof this.fields!="undefined"?new Set(["name",...this.fields.split(/\s*,\s*/)]):null,n=[],s=!1,o=await xe.start({configuration:e,includeFooter:!1,json:this.json,stdout:this.context.stdout},async a=>{for(let l of this.packages){let c;if(l==="."){let x=r.topLevelWorkspace;if(!x.manifest.name)throw new me(`Missing 'name' field in ${Zse.default.join(x.cwd,"package.json")}`);c=w.makeDescriptor(x.manifest.name,"unknown")}else c=w.parseDescriptor(l);let u=Bt.getIdentUrl(c),g=ZR(await Bt.get(u,{configuration:e,ident:c,jsonResponse:!0,customErrorMessage:Bt.customPackageError})),f=Object.keys(g.versions).sort(VR.default.compareLoose),p=g["dist-tags"].latest||f[f.length-1],m=Pt.validRange(c.range);if(m){let x=VR.default.maxSatisfying(f,m);x!==null?p=x:(a.reportWarning(z.UNNAMED,`Unmet range ${w.prettyRange(e,c.range)}; falling back to the latest version`),s=!0)}else c.range!=="unknown"&&(a.reportWarning(z.UNNAMED,`Invalid range ${w.prettyRange(e,c.range)}; falling back to the latest version`),s=!0);let I=g.versions[p],y=V(P(P({},g),I),{version:p,versions:f}),B;if(i!==null){B={};for(let x of i){let F=y[x];if(typeof F!="undefined")B[x]=F;else{a.reportWarning(z.EXCEPTION,`The '${x}' field doesn't exist inside ${w.prettyIdent(e,c)}'s informations`),s=!0;continue}}}else this.json||(delete y.dist,delete y.readme,delete y.users),B=y;a.reportJson(B),this.json||n.push(B)}});XR.inspect.styles.name="cyan";for(let a of n)(a!==n[0]||s)&&this.context.stdout.write(` -`),this.context.stdout.write(`${(0,XR.inspect)(a,{depth:Infinity,colors:!0,compact:!1})} -`);return o.exitCode()}};Qd.paths=[["npm","info"]],Qd.usage=he.Usage({category:"Npm-related commands",description:"show information about a package",details:"\n This command will fetch information about a package from the npm registry, and prints it in a tree format.\n\n The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\n\n Append `@` to the package argument to provide information specific to the latest version that satisfies the range. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\n\n If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package informations.\n\n By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\n ",examples:[["Show all available information about react (except the `dist`, `readme`, and `users` fields)","yarn npm info react"],["Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)","yarn npm info react --json"],["Show all available information about react 16.12.0","yarn npm info react@16.12.0"],["Show the description of react","yarn npm info react --fields description"],["Show all available versions of react","yarn npm info react --fields versions"],["Show the readme of react","yarn npm info react --fields readme"],["Show a few fields of react","yarn npm info react --fields homepage,repository"]]});var _se=Qd;function ZR(t){if(Array.isArray(t)){let e=[];for(let r of t)r=ZR(r),r&&e.push(r);return e}else if(typeof t=="object"&&t!==null){let e={};for(let r of Object.keys(t)){if(r.startsWith("_"))continue;let i=ZR(t[r]);i&&(e[r]=i)}return e}else return t||null}var $se=re(up()),bd=class extends ye{constructor(){super(...arguments);this.scope=H.String("-s,--scope",{description:"Login to the registry configured for a given scope"});this.publish=H.Boolean("--publish",!1,{description:"Login to the publish registry"})}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),r=await OB({configuration:e,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await xe.start({configuration:e,stdout:this.context.stdout},async n=>{let s=await $Je({registry:r,report:n,stdin:this.context.stdin,stdout:this.context.stdout}),o=`/-/user/org.couchdb.user:${encodeURIComponent(s.name)}`,a=await Bt.put(o,s,{attemptedAs:s.name,configuration:e,registry:r,jsonResponse:!0,authType:Bt.AuthType.NO_AUTH});return await _Je(r,a.token,{configuration:e,scope:this.scope}),n.reportInfo(z.UNNAMED,"Successfully logged in")})).exitCode()}};bd.paths=[["npm","login"]],bd.usage=he.Usage({category:"Npm-related commands",description:"store new login info to access the npm registry",details:"\n This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\n\n Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n ",examples:[["Login to the default registry","yarn npm login"],["Login to the registry linked to the @my-scope registry","yarn npm login --scope my-scope"],["Login to the publish registry for the current package","yarn npm login --publish"]]});var eoe=bd;async function OB({scope:t,publish:e,configuration:r,cwd:i}){return t&&e?Jt.getScopeRegistry(t,{configuration:r,type:Jt.RegistryType.PUBLISH_REGISTRY}):t?Jt.getScopeRegistry(t,{configuration:r}):e?Jt.getPublishRegistry((await yu(r,i)).manifest,{configuration:r}):Jt.getDefaultRegistry({configuration:r})}async function _Je(t,e,{configuration:r,scope:i}){let n=o=>a=>{let l=pe.isIndexableObject(a)?a:{},c=l[o],u=pe.isIndexableObject(c)?c:{};return V(P({},l),{[o]:V(P({},u),{npmAuthToken:e})})},s=i?{npmScopes:n(i)}:{npmRegistries:n(t)};return await ce.updateHomeConfiguration(s)}async function $Je({registry:t,report:e,stdin:r,stdout:i}){if(process.env.TEST_ENV)return{name:process.env.TEST_NPM_USER||"",password:process.env.TEST_NPM_PASSWORD||""};e.reportInfo(z.UNNAMED,`Logging in to ${t}`);let n=!1;t.match(/^https:\/\/npm\.pkg\.github\.com(\/|$)/)&&(e.reportInfo(z.UNNAMED,"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions."),n=!0),e.reportSeparator();let{username:s,password:o}=await(0,$se.prompt)([{type:"input",name:"username",message:"Username:",required:!0,onCancel:()=>process.exit(130),stdin:r,stdout:i},{type:"password",name:"password",message:n?"Token:":"Password:",required:!0,onCancel:()=>process.exit(130),stdin:r,stdout:i}]);return e.reportSeparator(),{name:s,password:o}}var Vu=new Set(["npmAuthIdent","npmAuthToken"]),Dd=class extends ye{constructor(){super(...arguments);this.scope=H.String("-s,--scope",{description:"Logout of the registry configured for a given scope"});this.publish=H.Boolean("--publish",!1,{description:"Logout of the publish registry"});this.all=H.Boolean("-A,--all",!1,{description:"Logout of all registries"})}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),r=async()=>{var l;let n=await OB({configuration:e,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),s=await ce.find(this.context.cwd,this.context.plugins),o=w.makeIdent((l=this.scope)!=null?l:null,"pkg");return!Jt.getAuthConfiguration(n,{configuration:s,ident:o}).get("npmAuthToken")};return(await xe.start({configuration:e,stdout:this.context.stdout},async n=>{if(this.all&&(await eWe(),n.reportInfo(z.UNNAMED,"Successfully logged out from everything")),this.scope){await toe("npmScopes",this.scope),await r()?n.reportInfo(z.UNNAMED,`Successfully logged out from ${this.scope}`):n.reportWarning(z.UNNAMED,"Scope authentication settings removed, but some other ones settings still apply to it");return}let s=await OB({configuration:e,cwd:this.context.cwd,publish:this.publish});await toe("npmRegistries",s),await r()?n.reportInfo(z.UNNAMED,`Successfully logged out from ${s}`):n.reportWarning(z.UNNAMED,"Registry authentication settings removed, but some other ones settings still apply to it")})).exitCode()}};Dd.paths=[["npm","logout"]],Dd.usage=he.Usage({category:"Npm-related commands",description:"logout of the npm registry",details:"\n This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\n\n Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n\n Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\n ",examples:[["Logout of the default registry","yarn npm logout"],["Logout of the @my-scope scope","yarn npm logout --scope my-scope"],["Logout of the publish registry for the current package","yarn npm logout --publish"],["Logout of all registries","yarn npm logout --all"]]});var roe=Dd;function tWe(t,e){let r=t[e];if(!pe.isIndexableObject(r))return!1;let i=new Set(Object.keys(r));if([...Vu].every(s=>!i.has(s)))return!1;for(let s of Vu)i.delete(s);if(i.size===0)return t[e]=void 0,!0;let n=P({},r);for(let s of Vu)delete n[s];return t[e]=n,!0}async function eWe(){let t=e=>{let r=!1,i=pe.isIndexableObject(e)?P({},e):{};i.npmAuthToken&&(delete i.npmAuthToken,r=!0);for(let n of Object.keys(i))tWe(i,n)&&(r=!0);if(Object.keys(i).length!==0)return r?i:e};return await ce.updateHomeConfiguration({npmRegistries:t,npmScopes:t})}async function toe(t,e){return await ce.updateHomeConfiguration({[t]:r=>{let i=pe.isIndexableObject(r)?r:{};if(!Object.prototype.hasOwnProperty.call(i,e))return r;let n=i[e],s=pe.isIndexableObject(n)?n:{},o=new Set(Object.keys(s));if([...Vu].every(l=>!o.has(l)))return r;for(let l of Vu)o.delete(l);if(o.size===0)return Object.keys(i).length===1?void 0:V(P({},i),{[e]:void 0});let a={};for(let l of Vu)a[l]=void 0;return V(P({},i),{[e]:P(P({},s),a)})}})}var Sd=class extends ye{constructor(){super(...arguments);this.access=H.String("--access",{description:"The access for the published package (public or restricted)"});this.tag=H.String("--tag","latest",{description:"The tag on the registry that the package should be attached to"});this.tolerateRepublish=H.Boolean("--tolerate-republish",!1,{description:"Warn and exit when republishing an already existing version of a package"})}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd);if(!i)throw new Ze(r.cwd,this.context.cwd);if(i.manifest.private)throw new me("Private workspaces cannot be published");if(i.manifest.name===null||i.manifest.version===null)throw new me("Workspaces must have valid names and versions to be published on an external registry");await r.restoreInstallState();let n=i.manifest.name,s=i.manifest.version,o=Jt.getPublishRegistry(i.manifest,{configuration:e});return(await xe.start({configuration:e,stdout:this.context.stdout},async l=>{var c,u;if(this.tolerateRepublish)try{let g=await Bt.get(Bt.getIdentUrl(n),{configuration:e,registry:o,ident:n,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(g,"versions"))throw new _e(z.REMOTE_INVALID,'Registry returned invalid data for - missing "versions" field');if(Object.prototype.hasOwnProperty.call(g.versions,s)){l.reportWarning(z.UNNAMED,`Registry already knows about version ${s}; skipping.`);return}}catch(g){if(((u=(c=g.originalError)==null?void 0:c.response)==null?void 0:u.statusCode)!==404)throw g}await Qt.maybeExecuteWorkspaceLifecycleScript(i,"prepublish",{report:l}),await Do.prepareForPack(i,{report:l},async()=>{let g=await Do.genPackList(i);for(let m of g)l.reportInfo(null,m);let f=await Do.genPackStream(i,g),h=await pe.bufferStream(f),p=await Bd.makePublishBody(i,h,{access:this.access,tag:this.tag,registry:o});await Bt.put(Bt.getIdentUrl(n),p,{configuration:e,registry:o,ident:n,jsonResponse:!0})}),l.reportInfo(z.UNNAMED,"Package archive published")})).exitCode()}};Sd.paths=[["npm","publish"]],Sd.usage=he.Usage({category:"Npm-related commands",description:"publish the active workspace to the npm registry",details:'\n This command will pack the active workspace into a fresh archive and upload it to the npm registry.\n\n The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\n\n Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka "private packages"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\n ',examples:[["Publish the active workspace","yarn npm publish"]]});var ioe=Sd;var soe=re(cr());var xd=class extends ye{constructor(){super(...arguments);this.json=H.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=H.String({required:!1})}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd),n;if(typeof this.package!="undefined")n=w.parseIdent(this.package);else{if(!i)throw new Ze(r.cwd,this.context.cwd);if(!i.manifest.name)throw new me(`Missing 'name' field in ${D.join(i.cwd,xt.manifest)}`);n=i.manifest.name}let s=await kd(n,e),a={children:pe.sortMap(Object.entries(s),([l])=>l).map(([l,c])=>({value:ae.tuple(ae.Type.RESOLUTION,{descriptor:w.makeDescriptor(n,l),locator:w.makeLocator(n,c)})}))};return Un.emitTree(a,{configuration:e,json:this.json,stdout:this.context.stdout})}};xd.paths=[["npm","tag","list"]],xd.usage=he.Usage({category:"Npm-related commands",description:"list all dist-tags of a package",details:` - This command will list all tags of a package from the npm registry. - - If the package is not specified, Yarn will default to the current workspace. - `,examples:[["List all tags of package `my-pkg`","yarn npm tag list my-pkg"]]});var noe=xd;async function kd(t,e){let r=`/-/package${Bt.getIdentUrl(t)}/dist-tags`;return Bt.get(r,{configuration:e,ident:t,jsonResponse:!0,customErrorMessage:Bt.customPackageError})}var Pd=class extends ye{constructor(){super(...arguments);this.package=H.String();this.tag=H.String()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd);if(!i)throw new Ze(r.cwd,this.context.cwd);let n=w.parseDescriptor(this.package,!0),s=n.range;if(!soe.default.valid(s))throw new me(`The range ${ae.pretty(e,n.range,ae.Type.RANGE)} must be a valid semver version`);let o=Jt.getPublishRegistry(i.manifest,{configuration:e}),a=ae.pretty(e,n,ae.Type.IDENT),l=ae.pretty(e,s,ae.Type.RANGE),c=ae.pretty(e,this.tag,ae.Type.CODE);return(await xe.start({configuration:e,stdout:this.context.stdout},async g=>{let f=await kd(n,e);Object.prototype.hasOwnProperty.call(f,this.tag)&&f[this.tag]===s&&g.reportWarning(z.UNNAMED,`Tag ${c} is already set to version ${l}`);let h=`/-/package${Bt.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await Bt.put(h,s,{configuration:e,registry:o,ident:n,jsonRequest:!0,jsonResponse:!0}),g.reportInfo(z.UNNAMED,`Tag ${c} added to version ${l} of package ${a}`)})).exitCode()}};Pd.paths=[["npm","tag","add"]],Pd.usage=he.Usage({category:"Npm-related commands",description:"add a tag for a specific version of a package",details:` - This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten. - `,examples:[["Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`","yarn npm tag add my-pkg@2.3.4-beta.4 beta"]]});var ooe=Pd;var vd=class extends ye{constructor(){super(...arguments);this.package=H.String();this.tag=H.String()}async execute(){if(this.tag==="latest")throw new me("The 'latest' tag cannot be removed.");let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd);if(!i)throw new Ze(r.cwd,this.context.cwd);let n=w.parseIdent(this.package),s=Jt.getPublishRegistry(i.manifest,{configuration:e}),o=ae.pretty(e,this.tag,ae.Type.CODE),a=ae.pretty(e,n,ae.Type.IDENT),l=await kd(n,e);if(!Object.prototype.hasOwnProperty.call(l,this.tag))throw new me(`${o} is not a tag of package ${a}`);return(await xe.start({configuration:e,stdout:this.context.stdout},async u=>{let g=`/-/package${Bt.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await Bt.del(g,{configuration:e,registry:s,ident:n,jsonResponse:!0}),u.reportInfo(z.UNNAMED,`Tag ${o} removed from package ${a}`)})).exitCode()}};vd.paths=[["npm","tag","remove"]],vd.usage=he.Usage({category:"Npm-related commands",description:"remove a tag from a package",details:` - This command will remove a tag from a package from the npm registry. - `,examples:[["Remove the `beta` tag from package `my-pkg`","yarn npm tag remove my-pkg beta"]]});var aoe=vd;var Fd=class extends ye{constructor(){super(...arguments);this.scope=H.String("-s,--scope",{description:"Print username for the registry configured for a given scope"});this.publish=H.Boolean("--publish",!1,{description:"Print username for the publish registry"})}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),r;return this.scope&&this.publish?r=Jt.getScopeRegistry(this.scope,{configuration:e,type:Jt.RegistryType.PUBLISH_REGISTRY}):this.scope?r=Jt.getScopeRegistry(this.scope,{configuration:e}):this.publish?r=Jt.getPublishRegistry((await yu(e,this.context.cwd)).manifest,{configuration:e}):r=Jt.getDefaultRegistry({configuration:e}),(await xe.start({configuration:e,stdout:this.context.stdout},async n=>{var o,a;let s;try{s=await Bt.get("/-/whoami",{configuration:e,registry:r,authType:Bt.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?w.makeIdent(this.scope,""):void 0})}catch(l){if(((o=l.response)==null?void 0:o.statusCode)===401||((a=l.response)==null?void 0:a.statusCode)===403){n.reportError(z.AUTHENTICATION_INVALID,"Authentication failed - your credentials may have expired");return}else throw l}n.reportInfo(z.UNNAMED,s.username)})).exitCode()}};Fd.paths=[["npm","whoami"]],Fd.usage=he.Usage({category:"Npm-related commands",description:"display the name of the authenticated user",details:"\n Print the username associated with the current authentication settings to the standard output.\n\n When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\n\n When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\n ",examples:[["Print username for the default registry","yarn npm whoami"],["Print username for the registry on a given scope","yarn npm whoami --scope company"]]});var Aoe=Fd;var rWe={configuration:{npmPublishAccess:{description:"Default access of the published packages",type:ge.STRING,default:null}},commands:[Xse,_se,eoe,roe,ioe,ooe,noe,aoe,Aoe]},iWe=rWe;var oL={};et(oL,{default:()=>IWe,patchUtils:()=>$R});var $R={};et($R,{applyPatchFile:()=>YB,diffFolders:()=>iL,extractPackageToDisk:()=>rL,extractPatchFlags:()=>doe,isParentRequired:()=>tL,loadPatchFiles:()=>Md,makeDescriptor:()=>dWe,makeLocator:()=>eL,parseDescriptor:()=>Ld,parseLocator:()=>Nd,parsePatchFile:()=>KB});var Rd=class extends Error{constructor(e,r){super(`Cannot apply hunk #${e+1}`);this.hunk=r}};var nWe=/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/;function Xu(t){return D.relative(Qe.root,D.resolve(Qe.root,O.toPortablePath(t)))}function sWe(t){let e=t.trim().match(nWe);if(!e)throw new Error(`Bad header line: '${t}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var oWe=420,aWe=493,Ar;(function(i){i.Context="context",i.Insertion="insertion",i.Deletion="deletion"})(Ar||(Ar={}));var loe=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),AWe=t=>({header:sWe(t),parts:[]}),lWe={["@"]:"header",["-"]:Ar.Deletion,["+"]:Ar.Insertion,[" "]:Ar.Context,["\\"]:"pragma",undefined:Ar.Context};function uWe(t){let e=[],r=loe(),i="parsing header",n=null,s=null;function o(){n&&(s&&(n.parts.push(s),s=null),r.hunks.push(n),n=null)}function a(){o(),e.push(r),r=loe()}for(let l=0;l0?"patch":"mode change",B=null;switch(y){case"rename":{if(!u||!g)throw new Error("Bad parser state: rename from & to not given");e.push({type:"rename",semverExclusivity:i,fromPath:Xu(u),toPath:Xu(g)}),B=g}break;case"file deletion":{let x=n||p;if(!x)throw new Error("Bad parse state: no path given for file deletion");e.push({type:"file deletion",semverExclusivity:i,hunk:I&&I[0]||null,path:Xu(x),mode:TB(l),hash:f})}break;case"file creation":{let x=s||m;if(!x)throw new Error("Bad parse state: no path given for file creation");e.push({type:"file creation",semverExclusivity:i,hunk:I&&I[0]||null,path:Xu(x),mode:TB(c),hash:h})}break;case"patch":case"mode change":B=m||s;break;default:pe.assertNever(y);break}B&&o&&a&&o!==a&&e.push({type:"mode change",semverExclusivity:i,path:Xu(B),oldMode:TB(o),newMode:TB(a)}),B&&I&&I.length&&e.push({type:"patch",semverExclusivity:i,path:Xu(B),hunks:I,beforeHash:f,afterHash:h})}if(e.length===0)throw new Error("Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string");return e}function TB(t){let e=parseInt(t,8)&511;if(e!==oWe&&e!==aWe)throw new Error(`Unexpected file mode string: ${t}`);return e}function KB(t){let e=t.split(/\n/g);return e[e.length-1]===""&&e.pop(),gWe(uWe(e))}function cWe(t){let e=0,r=0;for(let{type:i,lines:n}of t.parts)switch(i){case Ar.Context:r+=n.length,e+=n.length;break;case Ar.Deletion:e+=n.length;break;case Ar.Insertion:r+=n.length;break;default:pe.assertNever(i);break}if(e!==t.header.original.length||r!==t.header.patched.length){let i=n=>n<0?n:`+${n}`;throw new Error(`hunk header integrity check failed (expected @@ ${i(t.header.original.length)} ${i(t.header.patched.length)} @@, got @@ ${i(e)} ${i(r)} @@)`)}}var UB=315532800;async function Zu(t,e,r){let i=await t.lstatPromise(e),n=await r();if(typeof n!="undefined"&&(e=n),t.lutimesPromise)await t.lutimesPromise(e,i.atime,i.mtime);else if(!i.isSymbolicLink())await t.utimesPromise(e,i.atime,i.mtime);else throw new Error("Cannot preserve the time values of a symlink")}async function YB(t,{baseFs:e=new Ft,dryRun:r=!1,version:i=null}={}){for(let n of t)if(!(n.semverExclusivity!==null&&i!==null&&!Pt.satisfiesWithPrereleases(i,n.semverExclusivity)))switch(n.type){case"file deletion":if(r){if(!e.existsSync(n.path))throw new Error(`Trying to delete a file that doesn't exist: ${n.path}`)}else await Zu(e,D.dirname(n.path),async()=>{await e.unlinkPromise(n.path)});break;case"rename":if(r){if(!e.existsSync(n.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${n.fromPath}`)}else await Zu(e,D.dirname(n.fromPath),async()=>{await Zu(e,D.dirname(n.toPath),async()=>{await Zu(e,n.fromPath,async()=>(await e.movePromise(n.fromPath,n.toPath),n.toPath))})});break;case"file creation":if(r){if(e.existsSync(n.path))throw new Error(`Trying to create a file that already exists: ${n.path}`)}else{let s=n.hunk?n.hunk.parts[0].lines.join(` -`)+(n.hunk.parts[0].noNewlineAtEndOfFile?"":` -`):"";await e.mkdirpPromise(D.dirname(n.path),{chmod:493,utimes:[UB,UB]}),await e.writeFilePromise(n.path,s,{mode:n.mode}),await e.utimesPromise(n.path,UB,UB)}break;case"patch":await Zu(e,n.path,async()=>{await fWe(n,{baseFs:e,dryRun:r})});break;case"mode change":{let o=(await e.statPromise(n.path)).mode;if(coe(n.newMode)!==coe(o))continue;await Zu(e,n.path,async()=>{await e.chmodPromise(n.path,n.newMode)})}break;default:pe.assertNever(n);break}}function coe(t){return(t&64)>0}function uoe(t){return t.replace(/\s+$/,"")}function hWe(t,e){return uoe(t)===uoe(e)}async function fWe({hunks:t,path:e},{baseFs:r,dryRun:i=!1}){let n=await r.statSync(e).mode,o=(await r.readFileSync(e,"utf8")).split(/\n/),a=[],l=0,c=0;for(let g of t){let f=Math.max(c,g.header.patched.start+l),h=Math.max(0,f-c),p=Math.max(0,o.length-f-g.header.original.length),m=Math.max(h,p),I=0,y=0,B=null;for(;I<=m;){if(I<=h&&(y=f-I,B=goe(g,o,y),B!==null)){I=-I;break}if(I<=p&&(y=f+I,B=goe(g,o,y),B!==null))break;I+=1}if(B===null)throw new Rd(t.indexOf(g),g);a.push(B),l+=I,c=y+g.header.original.length}if(i)return;let u=0;for(let g of a)for(let f of g)switch(f.type){case"splice":{let h=f.index+u;o.splice(h,f.numToDelete,...f.linesToInsert),u+=f.linesToInsert.length-f.numToDelete}break;case"pop":o.pop();break;case"push":o.push(f.line);break;default:pe.assertNever(f);break}await r.writeFilePromise(e,o.join(` -`),{mode:n})}function goe(t,e,r){let i=[];for(let n of t.parts)switch(n.type){case Ar.Context:case Ar.Deletion:{for(let s of n.lines){let o=e[r];if(o==null||!hWe(o,s))return null;r+=1}n.type===Ar.Deletion&&(i.push({type:"splice",index:r-n.lines.length,numToDelete:n.lines.length,linesToInsert:[]}),n.noNewlineAtEndOfFile&&i.push({type:"push",line:""}))}break;case Ar.Insertion:i.push({type:"splice",index:r,numToDelete:0,linesToInsert:n.lines}),n.noNewlineAtEndOfFile&&i.push({type:"pop"});break;default:pe.assertNever(n.type);break}return i}var pWe=/^builtin<([^>]+)>$/;function foe(t,e){let{source:r,selector:i,params:n}=w.parseRange(t);if(r===null)throw new Error("Patch locators must explicitly define their source");let s=i?i.split(/&/).map(c=>O.toPortablePath(c)):[],o=n&&typeof n.locator=="string"?w.parseLocator(n.locator):null,a=n&&typeof n.version=="string"?n.version:null,l=e(r);return{parentLocator:o,sourceItem:l,patchPaths:s,sourceVersion:a}}function Ld(t){let i=foe(t.range,w.parseDescriptor),{sourceItem:e}=i,r=Rr(i,["sourceItem"]);return V(P({},r),{sourceDescriptor:e})}function Nd(t){let i=foe(t.reference,w.parseLocator),{sourceItem:e}=i,r=Rr(i,["sourceItem"]);return V(P({},r),{sourceLocator:e})}function hoe({parentLocator:t,sourceItem:e,patchPaths:r,sourceVersion:i,patchHash:n},s){let o=t!==null?{locator:w.stringifyLocator(t)}:{},a=typeof i!="undefined"?{version:i}:{},l=typeof n!="undefined"?{hash:n}:{};return w.makeRange({protocol:"patch:",source:s(e),selector:r.join("&"),params:P(P(P({},a),l),o)})}function dWe(t,{parentLocator:e,sourceDescriptor:r,patchPaths:i}){return w.makeLocator(t,hoe({parentLocator:e,sourceItem:r,patchPaths:i},w.stringifyDescriptor))}function eL(t,{parentLocator:e,sourcePackage:r,patchPaths:i,patchHash:n}){return w.makeLocator(t,hoe({parentLocator:e,sourceItem:r,sourceVersion:r.version,patchPaths:i,patchHash:n},w.stringifyLocator))}function poe({onAbsolute:t,onRelative:e,onBuiltin:r},i){i.startsWith("~")&&(i=i.slice(1));let s=i.match(pWe);return s!==null?r(s[1]):D.isAbsolute(i)?t(i):e(i)}function doe(t){let e=t.startsWith("~");return e&&(t=t.slice(1)),{optional:e}}function tL(t){return poe({onAbsolute:()=>!1,onRelative:()=>!0,onBuiltin:()=>!1},t)}async function Md(t,e,r){let i=t!==null?await r.fetcher.fetch(t,r):null,n=i&&i.localPath?{packageFs:new yt(Qe.root),prefixPath:D.relative(Qe.root,i.localPath)}:i;i&&i!==n&&i.releaseFs&&i.releaseFs();let s=await pe.releaseAfterUseAsync(async()=>await Promise.all(e.map(async o=>{let a=doe(o),l=await poe({onAbsolute:async()=>await N.readFilePromise(o,"utf8"),onRelative:async()=>{if(n===null)throw new Error("Assertion failed: The parent locator should have been fetched");return await n.packageFs.readFilePromise(D.join(n.prefixPath,o),"utf8")},onBuiltin:async c=>await r.project.configuration.firstHook(u=>u.getBuiltinPatch,r.project,c)},o);return V(P({},a),{source:l})})));for(let o of s)typeof o.source=="string"&&(o.source=o.source.replace(/\r\n?/g,` -`));return s}async function rL(t,{cache:e,project:r}){let i=r.storedPackages.get(t.locatorHash);if(typeof i=="undefined")throw new Error("Assertion failed: Expected the package to be registered");let n=r.storedChecksums,s=new Br,o=r.configuration.makeFetcher(),a=await o.fetch(t,{cache:e,project:r,fetcher:o,checksums:n,report:s}),l=await N.mktempPromise(),c=D.join(l,"source"),u=D.join(l,"user"),g=D.join(l,".yarn-patch.json");return await Promise.all([N.copyPromise(c,a.prefixPath,{baseFs:a.packageFs}),N.copyPromise(u,a.prefixPath,{baseFs:a.packageFs}),N.writeJsonPromise(g,{locator:w.stringifyLocator(t),version:i.version})]),N.detachTemp(l),u}async function iL(t,e){let r=O.fromPortablePath(t).replace(/\\/g,"/"),i=O.fromPortablePath(e).replace(/\\/g,"/"),{stdout:n,stderr:s}=await Nr.execvp("git",["-c","core.safecrlf=false","diff","--src-prefix=a/","--dst-prefix=b/","--ignore-cr-at-eol","--full-index","--no-index","--text",r,i],{cwd:O.toPortablePath(process.cwd()),env:V(P({},process.env),{GIT_CONFIG_NOSYSTEM:"1",HOME:"",XDG_CONFIG_HOME:"",USERPROFILE:""})});if(s.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH. -The following error was reported by 'git': -${s}`);let o=r.startsWith("/")?a=>a.slice(1):a=>a;return n.replace(new RegExp(`(a|b)(${pe.escapeRegExp(`/${o(r)}/`)})`,"g"),"$1/").replace(new RegExp(`(a|b)${pe.escapeRegExp(`/${o(i)}/`)}`,"g"),"$1/").replace(new RegExp(pe.escapeRegExp(`${r}/`),"g"),"").replace(new RegExp(pe.escapeRegExp(`${i}/`),"g"),"")}function Coe(t,{configuration:e,report:r}){for(let i of t.parts)for(let n of i.lines)switch(i.type){case Ar.Context:r.reportInfo(null,` ${ae.pretty(e,n,"grey")}`);break;case Ar.Deletion:r.reportError(z.FROZEN_LOCKFILE_EXCEPTION,`- ${ae.pretty(e,n,ae.Type.REMOVED)}`);break;case Ar.Insertion:r.reportError(z.FROZEN_LOCKFILE_EXCEPTION,`+ ${ae.pretty(e,n,ae.Type.ADDED)}`);break;default:pe.assertNever(i.type)}}var nL=class{supports(e,r){return!!e.reference.startsWith("patch:")}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${w.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,r),skipIntegrityCheck:r.skipIntegrityCheck});return{packageFs:n,releaseFs:s,prefixPath:w.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:o}}async patchPackage(e,r){let{parentLocator:i,sourceLocator:n,sourceVersion:s,patchPaths:o}=Nd(e),a=await Md(i,o,r),l=await N.mktempPromise(),c=D.join(l,"current.zip"),u=await r.fetcher.fetch(n,r),g=w.getIdentVendorPath(e),f=await gi(),h=new Qr(c,{libzip:f,create:!0,level:r.project.configuration.get("compressionLevel")});await h.mkdirpPromise(g),await pe.releaseAfterUseAsync(async()=>{await h.copyPromise(g,u.prefixPath,{baseFs:u.packageFs,stableSort:!0})},u.releaseFs),h.saveAndClose();for(let{source:p,optional:m}of a){if(p===null)continue;let I=new Qr(c,{libzip:f,level:r.project.configuration.get("compressionLevel")}),y=new yt(D.resolve(Qe.root,g),{baseFs:I});try{await YB(KB(p),{baseFs:y,version:s})}catch(B){if(!(B instanceof Rd))throw B;let x=r.project.configuration.get("enableInlineHunks"),F=!x&&!m?" (set enableInlineHunks for details)":"",L=`${w.prettyLocator(r.project.configuration,e)}: ${B.message}${F}`,T=v=>{!x||Coe(B.hunk,{configuration:r.project.configuration,report:v})};if(I.discardAndClose(),m){r.report.reportWarningOnce(z.PATCH_HUNK_FAILED,L,{reportExtra:T});continue}else throw new _e(z.PATCH_HUNK_FAILED,L,T)}I.saveAndClose()}return new Qr(c,{libzip:f,level:r.project.configuration.get("compressionLevel")})}};var CWe=2,sL=class{supportsDescriptor(e,r){return!!e.range.startsWith("patch:")}supportsLocator(e,r){return!!e.reference.startsWith("patch:")}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,i){let{patchPaths:n}=Ld(e);return n.every(s=>!tL(s))?e:w.bindDescriptor(e,{locator:w.stringifyLocator(r)})}getResolutionDependencies(e,r){let{sourceDescriptor:i}=Ld(e);return[i]}async getCandidates(e,r,i){if(!i.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{parentLocator:n,sourceDescriptor:s,patchPaths:o}=Ld(e),a=await Md(n,o,i.fetchOptions),l=r.get(s.descriptorHash);if(typeof l=="undefined")throw new Error("Assertion failed: The dependency should have been resolved");let c=Di.makeHash(`${CWe}`,...a.map(u=>JSON.stringify(u))).slice(0,6);return[eL(e,{parentLocator:n,sourcePackage:l,patchPaths:o,patchHash:c})]}async getSatisfying(e,r,i){return null}async resolve(e,r){let{sourceLocator:i}=Nd(e),n=await r.resolver.resolve(i,r);return P(P({},n),e)}};var Od=class extends ye{constructor(){super(...arguments);this.save=H.Boolean("-s,--save",!1,{description:"Add the patch to your resolution entries"});this.patchFolder=H.String()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd);if(!i)throw new Ze(r.cwd,this.context.cwd);await r.restoreInstallState();let n=D.resolve(this.context.cwd,O.toPortablePath(this.patchFolder)),s=D.join(n,"../source"),o=D.join(n,"../.yarn-patch.json");if(!N.existsSync(s))throw new me("The argument folder didn't get created by 'yarn patch'");let a=await iL(s,n),l=await N.readJsonPromise(o),c=w.parseLocator(l.locator,!0);if(!r.storedPackages.has(c.locatorHash))throw new me("No package found in the project for the given locator");if(!this.save){this.context.stdout.write(a);return}let u=e.get("patchFolder"),g=D.join(u,w.slugifyLocator(c));await N.mkdirPromise(u,{recursive:!0}),await N.writeFilePromise(g,a);let f=D.relative(r.cwd,g);r.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:w.stringifyIdent(c),description:l.version}},reference:`patch:${w.stringifyLocator(c)}#${f}`}),await r.persist()}};Od.paths=[["patch-commit"]],Od.usage=he.Usage({description:"generate a patch out of a directory",details:"\n This will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\n\n Only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\n "});var moe=Od;var Td=class extends ye{constructor(){super(...arguments);this.json=H.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=H.String()}async execute(){let e=await ce.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await Re.find(e,this.context.cwd),n=await ft.find(e);if(!i)throw new Ze(r.cwd,this.context.cwd);await r.restoreInstallState();let s=w.parseLocator(this.package);if(s.reference==="unknown"){let o=pe.mapAndFilter([...r.storedPackages.values()],a=>a.identHash!==s.identHash?pe.mapAndFilter.skip:w.isVirtualLocator(a)?pe.mapAndFilter.skip:a);if(o.length===0)throw new me("No package found in the project for the given locator");if(o.length>1)throw new me(`Multiple candidate packages found; explicitly choose one of them (use \`yarn why \` to get more information as to who depends on them): -${o.map(a=>` -- ${w.prettyLocator(e,a)}`).join("")}`);s=o[0]}if(!r.storedPackages.has(s.locatorHash))throw new me("No package found in the project for the given locator");await xe.start({configuration:e,json:this.json,stdout:this.context.stdout},async o=>{let a=await rL(s,{cache:n,project:r});o.reportJson({locator:w.stringifyLocator(s),path:O.fromPortablePath(a)}),o.reportInfo(z.UNNAMED,`Package ${w.prettyLocator(e,s)} got extracted with success!`),o.reportInfo(z.UNNAMED,`You can now edit the following folder: ${ae.pretty(e,O.fromPortablePath(a),"magenta")}`),o.reportInfo(z.UNNAMED,`Once you are done run ${ae.pretty(e,`yarn patch-commit ${process.platform==="win32"?'"':""}${O.fromPortablePath(a)}${process.platform==="win32"?'"':""}`,"cyan")} and Yarn will store a patchfile based on your changes.`)})}};Td.paths=[["patch"]],Td.usage=he.Usage({description:"prepare a package for patching",details:'\n This command will cause a package to be extracted in a temporary directory (under a folder named "patch-workdir"). This folder will be editable at will; running `yarn patch` inside it will then cause Yarn to generate a patchfile and register it into your top-level manifest (cf the `patch:` protocol).\n '});var Ioe=Td;var mWe={configuration:{enableInlineHunks:{description:"If true, the installs will print unmatched patch hunks",type:ge.BOOLEAN,default:!1},patchFolder:{description:"Folder where the patch files must be written",type:ge.ABSOLUTE_PATH,default:"./.yarn/patches"}},commands:[moe,Ioe],fetchers:[nL],resolvers:[sL]},IWe=mWe;var jy=()=>({modules:new Map([["@yarnpkg/cli",ap],["@yarnpkg/core",Oh],["@yarnpkg/fslib",kg],["@yarnpkg/libzip",Tf],["@yarnpkg/parsers",Jf],["@yarnpkg/shell",zf],["clipanion",a9(Jg)],["semver",EWe],["typanion",Ol],["yup",yWe],["@yarnpkg/plugin-essentials",Fv],["@yarnpkg/plugin-compat",Mv],["@yarnpkg/plugin-dlx",Ov],["@yarnpkg/plugin-file",Jv],["@yarnpkg/plugin-git",iF],["@yarnpkg/plugin-github",sF],["@yarnpkg/plugin-http",AF],["@yarnpkg/plugin-init",gF],["@yarnpkg/plugin-link",CF],["@yarnpkg/plugin-nm",GF],["@yarnpkg/plugin-npm",WR],["@yarnpkg/plugin-npm-cli",_R],["@yarnpkg/plugin-pack",jR],["@yarnpkg/plugin-patch",oL],["@yarnpkg/plugin-pnp",FF]]),plugins:new Set(["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-dlx","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp"])});fy({binaryVersion:Er||"",pluginConfiguration:jy()});})(); -/*! - * buildToken - * Builds OAuth token prefix (helper function) - * - * @name buildToken - * @function - * @param {GitUrl} obj The parsed Git url object. - * @return {String} token prefix - */ -/*! - * fill-range - * - * Copyright (c) 2014-present, Jon Schlinkert. - * Licensed under the MIT License. - */ -/*! - * is-extglob - * - * Copyright (c) 2014-2016, Jon Schlinkert. - * Licensed under the MIT License. - */ -/*! - * is-glob - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ -/*! - * is-number - * - * Copyright (c) 2014-present, Jon Schlinkert. - * Released under the MIT License. - */ -/*! - * is-windows - * - * Copyright © 2015-2018, Jon Schlinkert. - * Released under the MIT License. - */ -/*! - * to-regex-range - * - * Copyright (c) 2015-present, Jon Schlinkert. - * Released under the MIT License. - */ diff --git a/.yarnrc.yml b/.yarnrc.yml index 663163546061..e9991e9f238f 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -9,8 +9,10 @@ npmRegistryServer: "https://registry.yarnpkg.com" plugins: - path: .yarn/plugins/@yarnpkg/plugin-typescript.cjs spec: "@yarnpkg/plugin-typescript" + - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs + spec: "@yarnpkg/plugin-interactive-tools" unsafeHttpWhitelist: - localhost -yarnPath: .yarn/releases/yarn-sources.cjs +yarnPath: .yarn/releases/yarn-3.1.1.cjs diff --git a/ADDONS_SUPPORT.md b/ADDONS_SUPPORT.md deleted file mode 100644 index d795c7a9b6b3..000000000000 --- a/ADDONS_SUPPORT.md +++ /dev/null @@ -1,32 +0,0 @@ -## Addon / Framework Support Table - -| | [React](app/react) | [React Native](app/react-native) | [Vue](app/vue) | [Angular](app/angular) | [Mithril](app/mithril) | [HTML](app/html) | [Web Components](app/html) | [Marko](app/marko) | [Svelte](app/svelte) | [Riot](app/riot) | [Ember](app/ember) | [Preact](app/preact) | [Rax](app/rax) | -| ------------------------------------------- | :----------------: | :------------------------------: | :------------: | :--------------------: | :--------------------: | :--------------: | :------------------------: | :----------------: | :------------------: | :--------------: | :----------------: | :------------------: | -------------- | -| [a11y](addons/a11y) | + | | + | + | + | + | + | + | + | + | + | + | + | -| [actions](addons/actions) | + | +\* | + | + | + | + | + | + | + | + | + | + | + | -| [backgrounds](addons/backgrounds) | + | \* | + | + | + | + | + | + | + | + | + | + | + | -| [cssresources](addons/cssresources) | + | | + | + | + | + | + | + | + | + | + | + | + | -| [design assets](addons/design-assets) | + | | + | + | + | + | + | + | + | + | + | + | + | -| [docs](addons/docs) | + | | + | + | + | + | + | + | + | + | + | + | + | -| [events](addons/events) | + | | + | + | + | + | + | + | | | + | + | + | -| [google-analytics](addons/google-analytics) | + | + | + | + | + | + | + | + | + | + | + | + | + | -| [graphql](addons/graphql) | + | | | | | | | | | | | | | -| [jest](addons/jest) | + | + | + | + | + | + | + | + | + | + | + | + | + | -| [knobs](addons/knobs) | + | +\* | + | + | + | + | + | + | + | + | + | + | + | -| [links](addons/links) | + | + | + | + | + | + | + | | + | + | + | + | + | -| [options](addons/options) | + | + | + | + | + | + | + | | + | + | + | + | + | -| [query params](addons/queryparams) | + | | + | + | + | + | + | + | + | + | + | + | + | -| [storyshots](addons/storyshots) | + | + | + | + | | + | + | | + | + | | + | + | -| [storysource](addons/storysource) | + | | + | + | + | + | + | + | + | + | + | + | + | -| [viewport](addons/viewport) | + | | + | + | + | + | + | + | + | + | + | + | + | - -`*` - React Native on device addon (addons/onDevice-\) - -## Deprecated Addons - -| | [React](app/react) | [React Native](app/react-native) | [Vue](app/vue) | [Angular](app/angular) | [Mithril](app/mithril) | [HTML](app/html) | [Marko](app/marko) | [Svelte](app/svelte) | [Riot](app/riot) | [Ember](app/ember) | [Preact](app/preact) | [Rax](app/rax) | -| ------------------------------------------- | :----------------: | :------------------------------: | :------------: | :--------------------: | :--------------------: | :--------------: | :----------------: | :------------------: | :--------------: | :----------------: | :------------------: | -------------- | -| [info](https://github.com/storybookjs/deprecated-addons/tree/master/addons/info) | + | | | | | | | | | | | | -| [notes](https://github.com/storybookjs/deprecated-addons/tree/master/addons/notes) | + | +\* | + | + | + | + | | + | + | + | + | + | - -`*` - React Native on device addon (addons/onDevice-\) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11375a8bf7b1..f8f01a839ea2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,1527 @@ +## 6.5.0-rc.1 (May 18, 2022) + +### Bug Fixes + +- CLI: Improve webpack version and add detection of nextjs ([#18220](https://github.com/storybookjs/storybook/pull/18220)) +- ArgsTable: Gracefully handle conditional args failures ([#18248](https://github.com/storybookjs/storybook/pull/18248)) +- Controls: Fix reset button broken for !undefined URL values ([#18231](https://github.com/storybookjs/storybook/pull/18231)) +- Vue3: Add support for TSX in single file components ([#18038](https://github.com/storybookjs/storybook/pull/18038)) + +## 6.5.0-rc.0 (May 17, 2022) + +### Features + +- Addon-a11y: Show % of users in toolbar menu ([#18003](https://github.com/storybookjs/storybook/pull/18003)) + +### Bug Fixes + +- Web-components: Clean Lit Expression comments in story source ([#18108](https://github.com/storybookjs/storybook/pull/18108)) +- Vue: Map args correctly in CSF3 implicit render function ([#18209](https://github.com/storybookjs/storybook/pull/18209)) +- Vue3: Fix CSF3 implicit render function when storyStoreV7 is enabled ([#18208](https://github.com/storybookjs/storybook/pull/182) + +### Maintenance + +- CLI: Don't throw is Ctrl + C was pressed when selecting a package in the build command ([#18195](https://github.com/storybookjs/storybook/pull/18195)) +- Build: Cleanup noise from unit tests ([#18196](https://github.com/storybookjs/storybook/pull/18196)) + +### Dependency Upgrades + +- Fixed PnP compatibility for bundled components package ([#18015](https://github.com/storybookjs/storybook/pull/18015)) + +## 6.5.0-beta.8 (May 11, 2022) + +### Bug Fixes + +- Composition: Fix metadata.json incorrectly overriding main.js refs versions ([#18185](https://github.com/storybookjs/storybook/pull/18185)) + +### Maintenance + +- Examples: Set channelOptions to disallow function serialization ([#18071](https://github.com/storybookjs/storybook/pull/18071)) + +### Dependency Upgrades + +- Upgrade to telejson 6 ([#18164](https://github.com/storybookjs/storybook/pull/18164)) + +## 6.5.0-beta.7 (May 9, 2022) + +### Features + +- CSF3: Add title prefix support for stories with custom titles ([#17724](https://github.com/storybookjs/storybook/pull/17724)) + +### Bug Fixes + +- Components: Fix race conditions in SyntaxHighlighter ([#18158](https://github.com/storybookjs/storybook/pull/18158)) + +### Maintenance + +- API: Deprecate isToolshown, rename to showToolbar ([#18131](https://github.com/storybookjs/storybook/pull/18131)) + +## 6.5.0-beta.6 (May 6, 2022) + +### Bug Fixes + +- Controls: Fix undefined args handling ([#18135](https://github.com/storybookjs/storybook/pull/18135)) + +### Maintenance + +- CLI: Update Introduction.stories.mdx template to be MDX2-friendly ([#18141](https://github.com/storybookjs/storybook/pull/18141)) + +### Dependency Upgrades + +- Remove jest from cli peerDependencies ([#18149](https://github.com/storybookjs/storybook/pull/18149)) + +## 6.5.0-beta.5 (May 4, 2022) + +### Bug Fixes + +- Core: Fix anonymous ID generation ([#18133](https://github.com/storybookjs/storybook/pull/18133)) + +## 6.5.0-beta.4 (May 4, 2022) + +### Features + +- UI: Add a parent level toolbar exclusion key for tabs ([#18106](https://github.com/storybookjs/storybook/pull/18106)) +- Addon-a11y: Display a11y issues number in addon tab title ([#17983](https://github.com/storybookjs/storybook/pull/17983)) + +### Bug Fixes + +- Addon-docs: Fix Canvas block CURRENT_SELECTION handling ([#18130](https://github.com/storybookjs/storybook/pull/18130)) +- Telemetry: Add safecheck for crash reports ([#18129](https://github.com/storybookjs/storybook/pull/18129)) +- Addon-a11y: Fix a11y params > element use ([#17989](https://github.com/storybookjs/storybook/pull/17989)) + +## 6.5.0-beta.3 (May 4, 2022) + +### Bug Fixes + +- UI: Externalize `react-syntax-highlighter` from components ([#18127](https://github.com/storybookjs/storybook/pull/18127)) + +## 6.5.0-beta.2 (May 2, 2022) + +### Features + +- Core: Add optional telemetry and crash reporting ([#18046](https://github.com/storybookjs/storybook/pull/18046)) + +### Bug Fixes + +- Controls: Fix URL deserialization for argTypes with mapping ([#18124](https://github.com/storybookjs/storybook/pull/18124)) +- Core: Fix telemetry project root detection ([#18125](https://github.com/storybookjs/storybook/pull/18125)) +- React: Fix version detection for older versions of `react-dom` ([#18105](https://github.com/storybookjs/storybook/pull/18105)) +- CLI: Add non-monorepo testing tools to exclude lists ([#18092](https://github.com/storybookjs/storybook/pull/18092)) + +### Maintenance + +- Examples: Update example to restore 6.4 auto-title behavior in UI ([#18109](https://github.com/storybookjs/storybook/pull/18109)) +- CLI: Remove git.io URL ([#18070](https://github.com/storybookjs/storybook/pull/18070)) +- UI: Make panel position a persistent preference ([#18036](https://github.com/storybookjs/storybook/pull/18036)) + +### Dependency Upgrades + +- React: Fix jest-specific-snapshot dev dependency ([#18095](https://github.com/storybookjs/storybook/pull/18095)) + +## 6.5.0-beta.1 (April 28, 2022) + +### Features + +- Toolbars: Add dynamicTitle option ([#17789](https://github.com/storybookjs/storybook/pull/17789)) +- Angular: Add webpackStatsJson to angular-builder ([#18001](https://github.com/storybookjs/storybook/pull/18001)) +- CLI/Vue: add interactions to vue cli template ([#18021](https://github.com/storybookjs/storybook/pull/18021)) +- CLI/HTML: Add interactions to cli template ([#18014](https://github.com/storybookjs/storybook/pull/18014)) + +### Bug Fixes + +- CSF: Re-apply TArgs to render type ([#18075](https://github.com/storybookjs/storybook/pull/18075)) +- CLI: await generators for proper install ([#18053](https://github.com/storybookjs/storybook/pull/18053)) +- Core: Fix story index for CSF default exports as TS vars ([#18054](https://github.com/storybookjs/storybook/pull/18054)) +- Core: Fix single-story hoisting regression for auto-title changes ([#18052](https://github.com/storybookjs/storybook/pull/18052)) + +## 6.5.0-beta.0 (April 24, 2022) + +### Features + +- CLI/Vue3: add interactions to vue3 cli template ([#18031](https://github.com/storybookjs/storybook/pull/18031)) +- CLI/Svelte: add interactions to cli template ([#17993](https://github.com/storybookjs/storybook/pull/17993)) +- UI: Move the "Rerun interactions" button to Subnav ([#17647](https://github.com/storybookjs/storybook/pull/17647)) + +## 6.5.0-alpha.64 (April 18, 2022) + +### Features + +- CLI/Preact: add interactions to cli template ([#17984](https://github.com/storybookjs/storybook/pull/17984)) + +### Bug Fixes + +- Interactions: Fix show length of object value on MethodCall ([#17649](https://github.com/storybookjs/storybook/pull/17649)) +- React: Fix React 18 react-dom/client dynamic import syntax ([#17987](https://github.com/storybookjs/storybook/pull/17987)) +- Svelte: Fix webpack5/babelModeV7 ([#17939](https://github.com/storybookjs/storybook/pull/17939)) + +### Maintenance + +- Examples: Remove stories from deprecated `options`/`queryparams` addons ([#17977](https://github.com/storybookjs/storybook/pull/17977)) +- Chore: Format versions.ts file using repo config ([#17963](https://github.com/storybookjs/storybook/pull/17963)) + +## 6.5.0-alpha.63 (April 14, 2022) + +### Bug Fixes + +- Theming: Re-export correct bundled file ([#17956](https://github.com/storybookjs/storybook/pull/17956)) +- Core: Support react-dom/client dom hack on Windows machines ([#17946](https://github.com/storybookjs/storybook/pull/17946)) + +### Maintenance + +- CI: set parallelism of nx to 2 ([#17878](https://github.com/storybookjs/storybook/pull/17878)) + +### Dependency Upgrades + +- Run `prebundle` script without `browser: true` in Rollup config ([#17947](https://github.com/storybookjs/storybook/pull/17947)) + +## 6.4.22 (April 14, 2022) + +### Maintenance + +- Core: Avoid framework imports from core/client ([#17875](https://github.com/storybookjs/storybook/pull/17875)) + +## 6.5.0-alpha.62 (April 13, 2022) + +Test publish with npm 2FA enabled for addon-jest + +## 6.5.0-alpha.61 (April 11, 2022) + +### Features + +- UI: Add URL parameters to SB to tweak visible UI ([#17891](https://github.com/storybookjs/storybook/pull/17891)) + +### Maintenance + +- Core: Followup changing CJS entrypoints to ESM ([#17927](https://github.com/storybookjs/storybook/pull/17927)) + +### Dependency Upgrades + +- Export `createCache` from `@storybook/theming` ([#17929](https://github.com/storybookjs/storybook/pull/17929)) + +## 6.4.21 (April 9, 2022) + +### Bug Fixes + +- Angular: Do not use default for includePaths ([#17876](https://github.com/storybookjs/storybook/pull/17876)) +- Controls: Fix date control width in addons panel ([#17780](https://github.com/storybookjs/storybook/pull/17780)) +- CLI: Preserve quote style in automigrate ([#17858](https://github.com/storybookjs/storybook/pull/17858)) +- CLI: Update the exclude list for upgrade warnings ([#17909](https://github.com/storybookjs/storybook/pull/17909)) + +## 6.5.0-alpha.60 (April 9, 2022) + +### Features + +- Core: Add story preloading to optimize lazy compilation ([#17903](https://github.com/storybookjs/storybook/pull/17903)) + +### Bug Fixes + +- UI: Fix pseudo class potential unsafe warning ([#17911](https://github.com/storybookjs/storybook/pull/17911)) +- Core: Fix user-supplied project-level `render` in v6 store ([#17885](https://github.com/storybookjs/storybook/pull/17885)) + +### Dependency Upgrades + +- Upgrade polished to 4.2.2 ([#17913](https://github.com/storybookjs/storybook/pull/17913)) +- Bump min vue-loader dependency version ([#17912](https://github.com/storybookjs/storybook/pull/17912)) + +## 6.5.0-alpha.59 (April 7, 2022) + +### Maintenance + +- CLI: Update the exclude list for upgrade warnings ([#17909](https://github.com/storybookjs/storybook/pull/17909)) +- Examples: Added an external-docs example to show the basic use case ([#17807](https://github.com/storybookjs/storybook/pull/17807)) + +### Dependency Upgrades + +- Migration to Emotion 11 ([#17640](https://github.com/storybookjs/storybook/pull/17640)) + +## 6.5.0-alpha.58 (April 7, 2022) + +### Features + +- CLI: Add webpack4/5 auto-detection ([#17908](https://github.com/storybookjs/storybook/pull/17908)) +- React: Add support for react18's new root API ([#17215](https://github.com/storybookjs/storybook/pull/17215)) + +### Bug Fixes + +- UI: Fix canvas as initialActive for fullscreen mode in mobile ([#17906](https://github.com/storybookjs/storybook/pull/17906)) +- UI: Fix mobile fullscreen UI ([#17873](https://github.com/storybookjs/storybook/pull/17873)) + +### Maintenance + +- Core: Avoid framework imports from core/client ([#17875](https://github.com/storybookjs/storybook/pull/17875)) +- Webpack: Make manager and preview build processes cancelable ([#17809](https://github.com/storybookjs/storybook/pull/17809)) +- Build: Add vite-react to e2e tests ([#17871](https://github.com/storybookjs/storybook/pull/17871)) +- CLI: Upgrade vue3 template to use webpack5 builder ([#17896](https://github.com/storybookjs/storybook/pull/17896)) +- Build: Exclude @storybook/builder-vite from verdaccio ([#17897](https://github.com/storybookjs/storybook/pull/17897)) + +## 6.5.0-alpha.57 (April 6, 2022) + +### Bug Fixes + +- Svelte: Fix dynamic source snippets ([#17866](https://github.com/storybookjs/storybook/pull/17866)) +- Angular: Do not use default for includePaths ([#17876](https://github.com/storybookjs/storybook/pull/17876)) + +### Maintenance + +- Addon-docs: assume links starting with "https://" are external ([#17819](https://github.com/storybookjs/storybook/pull/17819)) + +### Dependency Upgrades + +- Unify CSF version ([#17895](https://github.com/storybookjs/storybook/pull/17895)) + +## 6.5.0-alpha.56 (April 5, 2022) + +### Features + +- Controls: Rework conditional controls with globals, queries ([#17883](https://github.com/storybookjs/storybook/pull/17883)) +- UI: Add Brand target config option ([#17814](https://github.com/storybookjs/storybook/pull/17814)) + +### Bug Fixes + +- Controls: Fix date control width in addons panel ([#17780](https://github.com/storybookjs/storybook/pull/17780)) + +### Maintenance + +- Core: Update some references to use ESM rather than CJS ([#17868](https://github.com/storybookjs/storybook/pull/17868)) +- Build: Upgrade from deprecated circleci docker img ([#17832](https://github.com/storybookjs/storybook/pull/17832)) +- Build: Parallel e2e (this might be expensive) ([#17842](https://github.com/storybookjs/storybook/pull/17842)) +- Build: Add junit summary for CircleCI ([#17867](https://github.com/storybookjs/storybook/pull/17867)) + +## 6.5.0-alpha.55 (April 3, 2022) + +### Features + +- CLI: Detect vite project, use vite builder automatically ([#17860](https://github.com/storybookjs/storybook/pull/17860)) +- CLI: Default new vite projects to storyStoreV7 ([#17859](https://github.com/storybookjs/storybook/pull/17859)) + +### Bug Fixes + +- Core: Restore preview-web composeConfigs export ([#17861](https://github.com/storybookjs/storybook/pull/17861)) +- CLI: Preserve quote style in automigrate ([#17858](https://github.com/storybookjs/storybook/pull/17858)) + +## 6.4.20 (April 1, 2022) + +### Bug Fixes + +- CLI: Fix vite/jest issue with mocked global ([#17830](https://github.com/storybookjs/storybook/pull/17830)) +- Angular: Fix multiple calls of Input setter ([#17633](https://github.com/storybookjs/storybook/pull/17633)) +- Web-components: Fix CSS class usage in CLI template ([#17702](https://github.com/storybookjs/storybook/pull/17702)) +- UI: Fix composition support in safari ([#17679](https://github.com/storybookjs/storybook/pull/17679)) +- Addon-docs: DocsPage story order should match the index ([#17669](https://github.com/storybookjs/storybook/pull/17669)) +- Core: Fix core.builder check ([#17606](https://github.com/storybookjs/storybook/pull/17606)) + +### Maintenance + +- CLI: Add automigration to `@storybook/builder-vite` ([#17829](https://github.com/storybookjs/storybook/pull/17829)) + +## 6.5.0-alpha.54 (April 1, 2022) + +### Dependency Upgrades + +- React: Update react and react-dom peerDeps for React18 ([#17853](https://github.com/storybookjs/storybook/pull/17853)) + +## 6.5.0-alpha.53 (April 1, 2022) + +### Features + +- Core: Add simplified manager.js/preview.js API for addons ([#17755](https://github.com/storybookjs/storybook/pull/17755)) +- Core/React: Add testing utilities ([#17282](https://github.com/storybookjs/storybook/pull/17282)) + +### Bug Fixes + +- Addon-docs: Fix dependencies for yarn pnp ([#17705](https://github.com/storybookjs/storybook/pull/17705)) +- Webpack: Expand version ranges of webpack in the apps ([#17834](https://github.com/storybookjs/storybook/pull/17834)) +- CLI: Fix vite/jest issue with mocked global ([#17830](https://github.com/storybookjs/storybook/pull/17830)) + +### Maintenance + +- Build: Remove packtracker ([#17841](https://github.com/storybookjs/storybook/pull/17841)) +- Build: Swap order of e2e tests around ([#17840](https://github.com/storybookjs/storybook/pull/17840)) +- Build: Add weekly check for broken markdown links ([#17799](https://github.com/storybookjs/storybook/pull/17799)) +- Build: Switch to use medium+ ([#17837](https://github.com/storybookjs/storybook/pull/17837)) + +## 6.5.0-alpha.52 (March 31, 2022) + +### Bug Fixes + +- UI: Add back CacheProvider from emotion to lib/theming ([#17820](https://github.com/storybookjs/storybook/pull/17820)) +- Core: Add a feature flag for enabling crossOriginIsolated ([#17815](https://github.com/storybookjs/storybook/pull/17815)) +- Angular: Fix multiple calls of Input setter ([#17633](https://github.com/storybookjs/storybook/pull/17633)) +- UI: Wait 100ms before showing spinner and fix story overlaying it ([#17753](https://github.com/storybookjs/storybook/pull/17753)) + +### Maintenance + +- CLI: Add automigration to `@storybook/builder-vite` ([#17829](https://github.com/storybookjs/storybook/pull/17829)) +- Build: Add setup-node version for danger ([#17826](https://github.com/storybookjs/storybook/pull/17826)) +- Add contributing instructions to PULL_REQUEST_TEMPLATE ([#17713](https://github.com/storybookjs/storybook/pull/17713)) + +## 6.5.0-alpha.51 (March 25, 2022) + +### Features + +- SyntaxHighlighter: Add prettier for code formatting ([#17746](https://github.com/storybookjs/storybook/pull/17746)) + +### Maintenance + +- Build: Add main overrides to e2e config and possibility to run test runner ([#17778](https://github.com/storybookjs/storybook/pull/17778)) + +## 6.5.0-alpha.50 (March 23, 2022) + +### Features + +- Controls: Add conditional controls ([#17536](https://github.com/storybookjs/storybook/pull/17536)) +- Core: Add headers to enable SharedArrayBuffer in stories ([#16970](https://github.com/storybookjs/storybook/pull/16970)) +- UI: Button for toggling addons panel ([#17714](https://github.com/storybookjs/storybook/pull/17714)) + +### Bug Fixes + +- Core: Ensure simultaneous first access to stories.json waits ([#17785](https://github.com/storybookjs/storybook/pull/17785)) +- Reload iframe when the url changes ([#17644](https://github.com/storybookjs/storybook/pull/17644)) +- UI: Fix brand logo layout shift ([#16467](https://github.com/storybookjs/storybook/pull/16467)) +- UI: Fix nesting issue for refs in sidebar component ([#17726](https://github.com/storybookjs/storybook/pull/17726)) +- Core: Fix filesystem cache missing return ([#17748](https://github.com/storybookjs/storybook/pull/17748)) +- Addon-docs: Fix binding of the `renderStoryToElement` passed to `DocsRender` ([#17742](https://github.com/storybookjs/storybook/pull/17742)) + +### Maintenance + +- Addon-docs/Vue: Add tests for sourceDecorator vnodeToString ([#17764](https://github.com/storybookjs/storybook/pull/17764)) +- Controls: Date control tests ([#17765](https://github.com/storybookjs/storybook/pull/17765)) +- Remove mock directories from Jest test coverage ([#17771](https://github.com/storybookjs/storybook/pull/17771)) +- fix dts-localize script ([#17747](https://github.com/storybookjs/storybook/pull/17747)) + +## 6.5.0-alpha.49 (March 17, 2022) + +### Bug Fixes + +- Addon-docs/Svelte: Fix `HOC.svelte` reference ([#17731](https://github.com/storybookjs/storybook/pull/17731)) +- UI: Fix composition support in safari ([#17679](https://github.com/storybookjs/storybook/pull/17679)) + +## 6.5.0-alpha.48 (March 14, 2022) + +### Features + +- Addon-docs: Auto-disable docs presets if docs/controls unused ([#17697](https://github.com/storybookjs/storybook/pull/17697)) + +### Bug Fixes + +- Web-components: Fix CSS class usage in CLI template ([#17702](https://github.com/storybookjs/storybook/pull/17702)) + +### Maintenance + +- Addon-docs: Refactor docs support into individual framework packages ([#17695](https://github.com/storybookjs/storybook/pull/17695)) + +## 6.5.0-alpha.47 (March 10, 2022) + +### Bug Fixes + +- Webpack4: Fix useExports for angular-cli ([#17674](https://github.com/storybookjs/storybook/pull/17674)) +- Core: Ensure that we do not render a story twice if re-rendered during preparing ([#17599](https://github.com/storybookjs/storybook/pull/17599)) +- Addon-docs: DocsPage story order should match the index ([#17669](https://github.com/storybookjs/storybook/pull/17669)) +- Core: Fix staticDirs path issue on Windows ([#17641](https://github.com/storybookjs/storybook/pull/17641)) +- Angular: Set ForkTsCheckerWebpackPlugin to async ([#17389](https://github.com/storybookjs/storybook/pull/17389)) +- Core: Fix core.builder check ([#17606](https://github.com/storybookjs/storybook/pull/17606)) + +### Maintenance + +- Examples: Build stories.json for examples that support it ([#17670](https://github.com/storybookjs/storybook/pull/17670)) +- Core: Refactor preview rendering out of `PreviewWeb` ([#17598](https://github.com/storybookjs/storybook/pull/17598)) +- Prevent lint hook from running on all files ([#17662](https://github.com/storybookjs/storybook/pull/17662)) +- TypeScript: Change imports of types to be prefixed ([#17627](https://github.com/storybookjs/storybook/pull/17627)) +- Build: Give linting sub-commands a directory to run against ([#17545](https://github.com/storybookjs/storybook/pull/17545)) +- TypeScript: remove unnecessary 'as any' ([#17595](https://github.com/storybookjs/storybook/pull/17595)) + +### Dependency Upgrades + +- Update shelljs dependency version ([#17602](https://github.com/storybookjs/storybook/pull/17602)) +- Remove unused `uuid` that's also deprecated ([#17615](https://github.com/storybookjs/storybook/pull/17615)) + +## 6.5.0-alpha.46 (March 5, 2022) + +### Bug Fixes + +- Addon-interactions: Use 'global' package instead of `global` ([#17614](https://github.com/storybookjs/storybook/pull/17614)) + +## 6.5.0-alpha.45 (March 2, 2022) + +### Bug Fixes + +- CSF3: Fix Auto-title to respect file system capitalization ([#17574](https://github.com/storybookjs/storybook/pull/17574)) + +### Maintenance + +- Core: Remove unused babel dependencies ([#17425](https://github.com/storybookjs/storybook/pull/17425)) + +## 6.5.0-alpha.44 (February 28, 2022) + +### Dependency Upgrades + +- Fix mdx-csf dependencies to canary dist-tag ([#17592](https://github.com/storybookjs/storybook/pull/17592)) + +## 6.5.0-alpha.43 (February 28, 2022) + +### Features + +- Addon-docs: MDX2 support ([#17515](https://github.com/storybookjs/storybook/pull/17515)) + +### Bug Fixes + +- Core: Fix global render fn ([#17577](https://github.com/storybookjs/storybook/pull/17577)) +- Addon-interactions: Mock window in browser environments ([#17535](https://github.com/storybookjs/storybook/pull/17535)) + +## 6.5.0-alpha.42 (February 25, 2022) + +### Bug Fixes + +- Controls/Essentials/Interactions: Add support for main.cjs/mjs/tsx files ([#17524](https://github.com/storybookjs/storybook/pull/17524)) +- Addon-docs: Fix preset handling for builder with options ([#17544](https://github.com/storybookjs/storybook/pull/17544)) + +## 6.5.0-alpha.41 (February 22, 2022) + +### Features + +- Addon-Outline: add 'o' keyboard shortcut to toggle the outline addon ([#17530](https://github.com/storybookjs/storybook/pull/17530)) + +### Bug Fixes + +- Addon-docs: Ensure that **DOCS_CONTEXT** cannot be undefined ([#17251](https://github.com/storybookjs/storybook/pull/17251)) +- Addon-docs: Account for non-string types when converting enums ([#15822](https://github.com/storybookjs/storybook/pull/15822)) +- Addon-actions: Don't override undefined args ([#17505](https://github.com/storybookjs/storybook/pull/17505)) + +## 6.5.0-alpha.40 (February 19, 2022) + +### Features + +- Webpack5: Add lazy compilation ([#17501](https://github.com/storybookjs/storybook/pull/17501)) + +### Maintenance + +- Build: Fix CRA repro generator and e2e test in PnP mode ([#17375](https://github.com/storybookjs/storybook/pull/17375)) +- UI: Add a custom title story for heading component ([#17487](https://github.com/storybookjs/storybook/pull/17487)) + +## 6.4.19 (February 12, 2022) + +### Features + +- CLI/React: Add interactions to cli template ([#17345](https://github.com/storybookjs/storybook/pull/17345)) +- CLI/Angular: Add interactions to cli template ([#17437](https://github.com/storybookjs/storybook/pull/17437)) + +### Bug Fixes + +- Core/CLI: Add `extract` function to `PreviewWeb` and use it in `sb extract` if available ([#17447](https://github.com/storybookjs/storybook/pull/17447)) +- Core: Ensure we show an error when `configure()` throws ([#17435](https://github.com/storybookjs/storybook/pull/17435)) +- Core: Fix `useParameter` with nullish coalescing ([#17327](https://github.com/storybookjs/storybook/pull/17327)) +- Addon-links: Fix export statement in react.d.ts ([#17434](https://github.com/storybookjs/storybook/pull/17434)) +- Addon-docs: Fix typo in ArgsTable tooltip ([#17404](https://github.com/storybookjs/storybook/pull/17404)) + +## 6.5.0-alpha.39 (February 11, 2022) + +### Features + +- CLI: Add addon-interactions to angular template ([#17437](https://github.com/storybookjs/storybook/pull/17437)) + +### Bug Fixes + +- Core: Rename `generated-stories-entry` to `cjs` extension so require works ([#17486](https://github.com/storybookjs/storybook/pull/17486)) +- Core/CLI: Add `extract` function to `PreviewWeb` and use it in `sb extract` if available ([#17447](https://github.com/storybookjs/storybook/pull/17447)) +- Controls: Fix Boolean control parsing ([#17456](https://github.com/storybookjs/storybook/pull/17456)) + +### Maintenance + +- Fix `ci:matrix` label in CI ([#17457](https://github.com/storybookjs/storybook/pull/17457)) + +### Dependency Upgrades + +- Bump vue-docgen-api to 4.44.15 ([#17465](https://github.com/storybookjs/storybook/pull/17465)) + +## 6.5.0-alpha.38 (February 8, 2022) + +### Bug Fixes + +- Addon-links: Fix export statement in react.d.ts ([#17434](https://github.com/storybookjs/storybook/pull/17434)) +- Core: Fix `useParameter` with nullish coalescing ([#17327](https://github.com/storybookjs/storybook/pull/17327)) +- Core: Ensure we show an error when `configure()` throws ([#17435](https://github.com/storybookjs/storybook/pull/17435)) + +### Maintenance + +- Web-components: Upgrade kitchen sink lockfile ([#17424](https://github.com/storybookjs/storybook/pull/17424)) + +## 6.5.0-alpha.37 (February 8, 2022) + +Failed publish + +## 6.5.0-alpha.36 (February 4, 2022) + +### Maintenance + +- UI: Prebundle `@storybook/components` ([#17304](https://github.com/storybookjs/storybook/pull/17304)) + +## 6.5.0-alpha.35 (February 4, 2022) + +### Features + +- CLI/React: Add interactions to cli template ([#17345](https://github.com/storybookjs/storybook/pull/17345)) +- CSF3: Handle auto-title redundant filename ([#17421](https://github.com/storybookjs/storybook/pull/17421)) + +### Bug Fixes + +- Addon-docs: Fix typo in ArgsTable tooltip ([#17404](https://github.com/storybookjs/storybook/pull/17404)) +- Core: Apply Docs mode to composed storybooks ([#17292](https://github.com/storybookjs/storybook/pull/17292)) + +### Maintenance + +- Core: Move CSF-related logic to its own folder ([#17381](https://github.com/storybookjs/storybook/pull/17381)) +- Improve style handling in angular example in monorepo ([#17343](https://github.com/storybookjs/storybook/pull/17343)) + +## 6.4.18 (February 2, 2022) + +### Bug Fixes + +- CLI: Pin version of `@mdx-js/react` to 1.x.x until we are compatible ([#17395](https://github.com/storybookjs/storybook/pull/17395)) + +## 6.5.0-alpha.34 (February 2, 2022) + +### Features + +- Core: Mock channel if not present ([#17382](https://github.com/storybookjs/storybook/pull/17382)) + +### Bug Fixes + +- CLI: Pin version of `@mdx-js/react` to 1.x.x until we are compatible ([#17395](https://github.com/storybookjs/storybook/pull/17395)) + +## 6.5.0-alpha.33 (February 1, 2022) + +### Maintenance + +- UI: Prebundle `@storybook/ui` ([#17301](https://github.com/storybookjs/storybook/pull/17301)) + +## 6.5.0-alpha.32 (February 1, 2022) + +### Maintenance + +- Core: Pre-bundle `@storybook/router` to avoid react-router conflict ([#17294](https://github.com/storybookjs/storybook/pull/17294)) + +## 6.5.0-alpha.31 (February 1, 2022) + +### Maintenance + +- Web components: add addon-interactions example story ([#17303](https://github.com/storybookjs/storybook/pull/17303)) +- Core: Pre-bundle theming to avoid emotion11 conflicts ([#17000](https://github.com/storybookjs/storybook/pull/17000)) + +## 6.5.0-alpha.30 (January 31, 2022) + +### Maintenance + +- Build: Enforce stricter types ([#17368](https://github.com/storybookjs/storybook/pull/17368)) + +## 6.5.0-alpha.29 (January 31, 2022) + +### Bug Fixes + +- Revert "Angular: Retrieve version from core package" ([#17372](https://github.com/storybookjs/storybook/pull/17372)) + +## 6.4.17 (January 31, 2022) + +### Bug Fixes + +- Revert "Angular: Retrieve version from core package" ([#17372](https://github.com/storybookjs/storybook/pull/17372)) + +## 6.5.0-alpha.28 (January 29, 2022) + +### Bug Fixes + +- Svelte: Fix missing templates dir in package.json publish files ([#17367](https://github.com/storybookjs/storybook/pull/17367)) + +## 6.4.16 (January 29, 2022) + +### Bug Fixes + +- Angular: Workaround for compodoc on windows machines ([#17334](https://github.com/storybookjs/storybook/pull/17334)) +- Angular: Use ɵReflectionCapabilities to find component & module metadata ([#17156](https://github.com/storybookjs/storybook/pull/17156)) +- Angular: Retrieve version from core package ([#17363](https://github.com/storybookjs/storybook/pull/17363)) + +## 6.5.0-alpha.27 (January 29, 2022) + +### Bug Fixes + +- Angular: Workaround for compodoc on windows machines ([#17334](https://github.com/storybookjs/storybook/pull/17334)) +- Angular: Retrieve version from core package ([#17363](https://github.com/storybookjs/storybook/pull/17363)) + +## 6.5.0-alpha.26 (January 28, 2022) + +### Bug Fixes + +- Revert "Core: Rename `generated-stories-entry` to `cjs` extension so require works" ([#17361](https://github.com/storybookjs/storybook/pull/17361)) + +## 6.5.0-alpha.25 (January 28, 2022) + +### Maintenance + +- Build: Overhaul dev script & compile-babel & compile-tsc ([#17338](https://github.com/storybookjs/storybook/pull/17338)) + +## 6.4.15 (January 28, 2022) + +### Bug Fixes + +- Angular: Fix runCompodoc for Windows, local Compodoc, and user specified tsconfig ([#16728](https://github.com/storybookjs/storybook/pull/16728)) +- Core: Fix negated glob support ([#17328](https://github.com/storybookjs/storybook/pull/17328)) + +### Maintenance + +- Build: Upgrade main yarn ([#17323](https://github.com/storybookjs/storybook/pull/17323)) +- CLI: Add version update argument to generate-sb-packages-versions utility ([#17356](https://github.com/storybookjs/storybook/pull/17356)) + +## 6.5.0-alpha.24 (January 28, 2022) + +### Bug Fixes + +- Core: Fix negated glob support ([#17328](https://github.com/storybookjs/storybook/pull/17328)) + +### Maintenance + +- CLI/Svelte: Revert template stories from svelte-native to CSF ([#17340](https://github.com/storybookjs/storybook/pull/17340)) +- CLI: Add version update argument to generate-sb-packages-versions utility ([#17356](https://github.com/storybookjs/storybook/pull/17356)) + +## 6.5.0-alpha.23 (January 25, 2022) + +### Features + +- Vue: Add CSF3 default render function ([#17279](https://github.com/storybookjs/storybook/pull/17279)) + +### Bug Fixes + +- Core: Rename `generated-stories-entry` to `cjs` extension so require works ([#16727](https://github.com/storybookjs/storybook/pull/16727)) +- Addon-docs: Fix `BuilderConfig` can be an object ([#17320](https://github.com/storybookjs/storybook/pull/17320)) + +### Maintenance + +- Core: Remove useless unfetch ([#17306](https://github.com/storybookjs/storybook/pull/17306)) +- Build: Regen lockfile ([#17283](https://github.com/storybookjs/storybook/pull/17283)) + +### Dependency Upgrades + +- Upgrade node-fetch to latest version ([#17317](https://github.com/storybookjs/storybook/pull/17317)) + +## 6.4.14 (January 21, 2022) + +### Bug Fixes + +- CLI: Add `--no-manager-cache` to build-storybook ([#17300](https://github.com/storybookjs/storybook/pull/17300)) +- CSF3: Remove `path` from autoTitle browser code ([#17185](https://github.com/storybookjs/storybook/pull/17185)) +- Addon-docs: Fix `docs.disable` parameter on DocsPage ([#17256](https://github.com/storybookjs/storybook/pull/17256)) +- Core: Fix issue with recursive glob with prior special chars ([#17252](https://github.com/storybookjs/storybook/pull/17252)) +- Webpack: Fix for `process` fallback using `require.resolve` ([#17249](https://github.com/storybookjs/storybook/pull/17249)) + +### Dependency Upgrades + +- Upgrade compodoc for colors.js bug ([#17266](https://github.com/storybookjs/storybook/pull/17266)) +- Upgrade jscodeshift dependency for colors.js bug ([#17265](https://github.com/storybookjs/storybook/pull/17265)) +- Restore prettier >= 2.2.1 to satisfy previous constraints ([#17257](https://github.com/storybookjs/storybook/pull/17257)) + +## 6.5.0-alpha.22 (January 20, 2022) + +### Features + +- Svelte: Add CSF3 default render function ([#17276](https://github.com/storybookjs/storybook/pull/17276)) +- CLI: Add `--no-manager-cache` to build-storybook ([#17300](https://github.com/storybookjs/storybook/pull/17300)) + +### Maintenance + +- Build: Upgrade yarn to 3.1.1 ([#17281](https://github.com/storybookjs/storybook/pull/17281)) + +## 6.5.0-alpha.21 (January 18, 2022) + +### Features + +- Webpack5: Switch to using `import.meta.webpackHot.accept` ([#17270](https://github.com/storybookjs/storybook/pull/17270)) + +## 6.5.0-alpha.20 (January 18, 2022) + +### Dependency Upgrades + +- Upgrade compodoc for colors.js bug ([#17266](https://github.com/storybookjs/storybook/pull/17266)) +- Upgrade jscodeshift dependency for colors.js bug ([#17265](https://github.com/storybookjs/storybook/pull/17265)) +- Restore prettier >= 2.2.1 to satisfy previous constraints ([#17257](https://github.com/storybookjs/storybook/pull/17257)) + +## 6.5.0-alpha.19 (January 17, 2022) + +### Features + +- Core: Add IS_STORYBOOK global variable ([#16676](https://github.com/storybookjs/storybook/pull/16676)) + +### Bug Fixes + +- Addon-docs: Fix `docs.disable` parameter on DocsPage ([#17256](https://github.com/storybookjs/storybook/pull/17256)) +- Controls: Fix number control update when using useArgs hook ([#17247](https://github.com/storybookjs/storybook/pull/17247)) +- Core: Fix issue with recursive glob with prior special chars ([#17252](https://github.com/storybookjs/storybook/pull/17252)) + +## 6.5.0-alpha.18 (January 16, 2022) + +### Bug Fixes + +- Webpack: Fix for `process` fallback using `require.resolve` ([#17249](https://github.com/storybookjs/storybook/pull/17249)) + +### Maintenance + +- Official-storybook: Fix ForwardRefButtonInnerPropTypes warning ([#12733](https://github.com/storybookjs/storybook/pull/12733)) +- Fix prettier 2.3 formatting across the codebase ([#17242](https://github.com/storybookjs/storybook/pull/17242)) + +## 6.4.13 (January 15, 2022) + +### Bug Fixes + +- Core: Fix `staticDirs` favicon handling by refactor ([#17241](https://github.com/storybookjs/storybook/pull/17241)) +- Angular: Fix 13.1 and add CI test cases ([#17206](https://github.com/storybookjs/storybook/pull/17206)) +- Core: Fix `__namedExportsOrder` warning from preview.js ([#17240](https://github.com/storybookjs/storybook/pull/17240)) +- Webpack5: Fix manager.js `process` references ([#17213](https://github.com/storybookjs/storybook/pull/17213)) + +### Dependency Upgrades + +- React: Remove react-dev-utils ([#17022](https://github.com/storybookjs/storybook/pull/17022)) +- Fix prettier transpile problems ([#17239](https://github.com/storybookjs/storybook/pull/17239)) + +## 6.5.0-alpha.17 (January 14, 2022) + +### Bug Fixes + +- Core: Fix `staticDirs` favicon handling by refactor ([#17241](https://github.com/storybookjs/storybook/pull/17241)) +- Core: Fix `__namedExportsOrder` warning from preview.js ([#17240](https://github.com/storybookjs/storybook/pull/17240)) + +### Dependency Upgrades + +- Fix prettier transpile problems ([#17239](https://github.com/storybookjs/storybook/pull/17239)) + +## 6.5.0-alpha.16 (January 13, 2022) + +### Bug Fixes + +- Webpack5: Fix named exports order in production mode ([#17229](https://github.com/storybookjs/storybook/pull/17229)) + +## 6.5.0-alpha.15 (January 12, 2022) + +### Bug Fixes + +- Angular: Fix 13.1 and add CI test cases ([#17206](https://github.com/storybookjs/storybook/pull/17206)) +- Webpack5: Fix manager.js process references ([#17213](https://github.com/storybookjs/storybook/pull/17213)) + +### Dependency Upgrades + +- React: Restore webpack as a dependency, updated webpack 5 docs ([#17207](https://github.com/storybookjs/storybook/pull/17207)) + +## 6.5.0-alpha.14 (January 11, 2022) + +### Bug Fixes + +- Angular: Fix void element selectors ([#15495](https://github.com/storybookjs/storybook/pull/15495)) + +### Dependency Upgrades + +- React: Remove webpack from dependencies, types as devDependencies ([#17192](https://github.com/storybookjs/storybook/pull/17192)) + +## 6.5.0-alpha.13 (January 11, 2022) + +### Features + +- UI: Set the current story name in the title ([#17177](https://github.com/storybookjs/storybook/pull/17177)) + +### Bug Fixes + +- Core: Retain iframe.html query parameters ([#17136](https://github.com/storybookjs/storybook/pull/17136)) +- CSF3: Remove `path` from autoTitle browser code ([#17185](https://github.com/storybookjs/storybook/pull/17185)) + +### Maintenance + +- Build: Fix package.json warnings in JetBrains IDEs ([#17184](https://github.com/storybookjs/storybook/pull/17184)) +- Fix github workflow syntax to run unit-tests on push ([#17148](https://github.com/storybookjs/storybook/pull/17148)) + +## 5.3.22 (January 10, 2022) + +### Dependency Upgrades + +- Bump cli-table3 to fix colors.js bug in 5.3 ([#17182](https://github.com/storybookjs/storybook/pull/17182)) + +## 6.3.13 (January 10, 2022) + +### Dependency Upgrades + +- Bump cli-table3 to fix colors bug ([#17180](https://github.com/storybookjs/storybook/pull/17180)) + +## 6.4.10 (January 10, 2022) + +### Bug Fixes + +- Core: Fix process.env assignment ([#17174](https://github.com/storybookjs/storybook/pull/17174)) +- Angular: Fix angular 13.1 JIT error and HMR reload ([#17131](https://github.com/storybookjs/storybook/pull/17131)) +- Router: Fix navigating to hash links ([#17134](https://github.com/storybookjs/storybook/pull/17134)) +- Source-loader: Fix node.declaration edge case ([#17027](https://github.com/storybookjs/storybook/pull/17027)) +- Core: Fix debug output on webpack failures ([#16988](https://github.com/storybookjs/storybook/pull/16988)) + +### Dependency Upgrades + +- Bump cli-table3 to fix colors bug ([#17180](https://github.com/storybookjs/storybook/pull/17180)) + +## 6.5.0-alpha.12 (January 10, 2022) + +### Bug Fixes + +- Core: Fix process.env assignment ([#17174](https://github.com/storybookjs/storybook/pull/17174)) + +### Dependency Upgrades + +- Bump cli-table3 to fix colors bug ([#17180](https://github.com/storybookjs/storybook/pull/17180)) + +## 6.5.0-alpha.11 (January 7, 2022) + +### Bug Fixes + +- Addon-docs: Fix babel-loader resolution based on builder ([#16752](https://github.com/storybookjs/storybook/pull/16752)) +- Angular: Use ɵReflectionCapabilities to find component & module metadata ([#17156](https://github.com/storybookjs/storybook/pull/17156)) + +### Dependency Upgrades + +- Update react-syntax-highlighter to fix transitive vulnerability ([#17127](https://github.com/storybookjs/storybook/pull/17127)) + +## 6.5.0-alpha.10 (January 6, 2022) + +### Bug Fixes + +- Angular: Fix angular 13.1 JIT error and HMR reload ([#17131](https://github.com/storybookjs/storybook/pull/17131)) +- Core: Fix IE support by transpiling more libs to es5 ([#17141](https://github.com/storybookjs/storybook/pull/17141)) + +## 6.5.0-alpha.9 (January 6, 2022) + +### Features + +- Allow setting project args/argTypes for v6 store ([#17043](https://github.com/storybookjs/storybook/pull/17043)) + +### Bug Fixes + +- Router: Fix navigating to hash links ([#17134](https://github.com/storybookjs/storybook/pull/17134)) + +## 6.5.0-alpha.8 (January 6, 2022) + +Publish failed + +## 6.5.0-alpha.7 (January 4, 2022) + +### Bug Fixes + +- Addon-measure: Update z-index to fit with libraries with also high z-index ([#15860](https://github.com/storybookjs/storybook/pull/15860)) + +### Maintenance + +- Vue: Fix VueLoaderPlugin import to support vue-loader@16.x ([#14624](https://github.com/storybookjs/storybook/pull/14624)) + +### Dependency Upgrades + +- Upgrade react-syntax-highlighter to pick up security patch upstream in highlight.js ([#17100](https://github.com/storybookjs/storybook/pull/17100)) + +## 6.5.0-alpha.6 (January 3, 2022) + +### Features + +- Vue3: Add default render function CSF3 ([#17068](https://github.com/storybookjs/storybook/pull/17068)) +- Addon-docs/Vue: Include methods in ArgsTable ([#16975](https://github.com/storybookjs/storybook/pull/16975)) + +### Bug Fixes + +- CLI: Install `lit-html` in new web components project ([#17106](https://github.com/storybookjs/storybook/pull/17106)) +- Angular: Fix runCompodoc for Windows, local Compodoc, and user specified tsconfig ([#16728](https://github.com/storybookjs/storybook/pull/16728)) + +### Dependency Upgrades + +- React: Remove react-dev-utils ([#17022](https://github.com/storybookjs/storybook/pull/17022)) + +## 6.5.0-alpha.5 (December 23, 2021) + +### Dependency Upgrades + +- Update react-refresh@0.11.0 & react-refresh-webpack-plugin@0.5.3 same as cra5 ([#17056](https://github.com/storybookjs/storybook/pull/17056)) + +## 6.5.0-alpha.4 (December 18, 2021) + +### Bug Fixes + +- Angular: Fix for renamed method in angular 13.1 ([#17032](https://github.com/storybookjs/storybook/pull/17032)) +- Source-loader: Fix node.declaration edge case ([#17027](https://github.com/storybookjs/storybook/pull/17027)) +- Core: Fix debug output on webpack failures ([#16988](https://github.com/storybookjs/storybook/pull/16988)) + +### Maintenance + +- Build: Run unit tests on more node versions, mac, and windows ([#16744](https://github.com/storybookjs/storybook/pull/16744)) + +### Dependency Upgrades + +- Avoid referencing internal Emotion packages in built types ([#16905](https://github.com/storybookjs/storybook/pull/16905)) + +## 6.5.0-alpha.3 (December 9, 2021) + +### Bug Fixes + +- Core: Support custom PREVIEW URL for block story iframe ([#16773](https://github.com/storybookjs/storybook/pull/16773)) + +## 6.5.0-alpha.2 (December 9, 2021) + +### Bug Fixes + +- UI: Only push the view back to Story if the viewMode is settings ([#16943](https://github.com/storybookjs/storybook/pull/16943)) +- Core: Ensure we have a full story index before caching ([#16947](https://github.com/storybookjs/storybook/pull/16947)) +- Angular: Fix support for non-roman alphabets in story titles ([#16931](https://github.com/storybookjs/storybook/pull/16931)) +- Core: Be explicit about `viewMode` to fix Vue issue ([#16919](https://github.com/storybookjs/storybook/pull/16919)) +- Core: Remove unused and occluded types ([#16917](https://github.com/storybookjs/storybook/pull/16917)) +- CLI: Fix `sb repro` clobbering .vuerc ([#16897](https://github.com/storybookjs/storybook/pull/16897)) +- Core: Fix auto-title in webpack5 ([#16913](https://github.com/storybookjs/storybook/pull/16913)) +- Angular: Fix incorrect log ([#16885](https://github.com/storybookjs/storybook/pull/16885)) +- Angular: Fix tsConfig paths not resolving for Angular >=12.2 ([#16882](https://github.com/storybookjs/storybook/pull/16882)) +- Core: Add feature flag to disable legacy hierarchy separator warning ([#16915](https://github.com/storybookjs/storybook/pull/16915)) + +### Dependency Upgrades + +- Move @types/node to dependencies and accept v16 types ([#16904](https://github.com/storybookjs/storybook/pull/16904)) +- Bump lodash to 4.17.21 ([#16883](https://github.com/storybookjs/storybook/pull/16883)) + +## 6.4.9 (December 9, 2021) + +### Bug Fixes + +- Core: Ensure we have a full story index before caching ([#16947](https://github.com/storybookjs/storybook/pull/16947)) +- Angular: Fix support for non-roman alphabets in story titles ([#16931](https://github.com/storybookjs/storybook/pull/16931)) +- Core: Be explicit about `viewMode` to fix Vue issue ([#16919](https://github.com/storybookjs/storybook/pull/16919)) +- Core: Remove unused and occluded types ([#16917](https://github.com/storybookjs/storybook/pull/16917)) + +## 6.4.8 (December 6, 2021) + +### Bug Fixes + +- Core: Fix auto-title in webpack5 ([#16913](https://github.com/storybookjs/storybook/pull/16913)) +- CLI: Fix `sb repro` clobbering .vuerc ([#16897](https://github.com/storybookjs/storybook/pull/16897)) + +### Maintenance + +- Core: Add feature flag to disable legacy hierarchy separator warning ([#16915](https://github.com/storybookjs/storybook/pull/16915)) + +## 6.4.7 (December 3, 2021) + +### Bug Fixes + +- Angular: Fix incorrect log ([#16885](https://github.com/storybookjs/storybook/pull/16885)) + +## 6.4.6 (December 3, 2021) + +Npm publish failed. + +## 6.4.5 (December 3, 2021) + +### Bug Fixes + +- Angular: Fix tsConfig paths not resolving for Angular >=12.2 ([#16882](https://github.com/storybookjs/storybook/pull/16882)) +- Addon-docs: Fix transclusion crash on webpack rules without test field ([#16873](https://github.com/storybookjs/storybook/pull/16873)) + +### Dependency Upgrades + +- Bump lodash to 4.17.21 ([#16883](https://github.com/storybookjs/storybook/pull/16883)) + +## 6.5.0-alpha.1 (December 3, 2021) + +### Bug Fixes + +- CLI: Fix open storybook in default browser ([#16844](https://github.com/storybookjs/storybook/pull/16844)) +- Addon-docs: Fix transclusion crash on webpack rules without test field ([#16873](https://github.com/storybookjs/storybook/pull/16873)) + +### Maintenance + +- CLI: Improve `sb repro` directory prompt ([#16854](https://github.com/storybookjs/storybook/pull/16854)) + +## 6.4.4 (December 2, 2021) + +### Bug Fixes + +- CLI: Fix mainjsFramework automigrate ([#16866](https://github.com/storybookjs/storybook/pull/16866)) + +## 6.4.3 (December 1, 2021) + +### Bug Fixes + +- Don't render with `modernInline` if `inlineStories` is `false` ([#16853](https://github.com/storybookjs/storybook/pull/16853)) +- Preview: Don't hide the story while preparing ([#16850](https://github.com/storybookjs/storybook/pull/16850)) + +## 6.4.2 (December 1, 2021) + +### Bug Fixes + +- UI: Ensure all classes+animations for our loaders are prefixed ([#16815](https://github.com/storybookjs/storybook/pull/16815)) +- Angular: Add back-compat method to find options (styles) in angular.json ([#16832](https://github.com/storybookjs/storybook/pull/16832)) + +## 6.4.1 (November 30, 2021) + +### Bug Fixes + +- Core: Fix packageName check in build-dev ([#16823](https://github.com/storybookjs/storybook/pull/16823)) +- CSFFile: Fix function exports ([#16829](https://github.com/storybookjs/storybook/pull/16829)) + +### Maintenance + +- Fix `handle-release-branches` workflow ([#16801](https://github.com/storybookjs/storybook/pull/16801)) + +## 6.4.0 (November 27, 2021) + +Storybook 6.4 is here!! 🎉🎉🎉 + +SB6.4 adds interaction testing and performance re-architecture ahead of a huge 7.0 release. + +- ▶️ **Interactive stories** to simulate user behavior and tools to debug it +- ⚡️ **On-demand architecture** for smaller builds and faster load times +- ⛸ **Automigrate + versioned documentation** for easier upgrades +- 📋 **Linter** to enforce Storybook best practices +- 💯 **Hundreds more fixes** and quality of life improvements + +More info in the Github issue [Storybook 6.4 Release 🛠](https://github.com/storybookjs/storybook/issues/15355). Release announcement coming soon!!! + +## 6.4.0-rc.11 (November 26, 2021) + +### Bug Fixes + +- Core: Fix breaking change in process/browser ([#16795](https://github.com/storybookjs/storybook/pull/16795)) + +## 6.4.0-rc.10 (November 26, 2021) + +### Bug Fixes + +- Core: Allow args/argTypes/component to be set via parameters for storiesOf back-compat ([#16791](https://github.com/storybookjs/storybook/pull/16791)) +- Core: Sort the results of `globby` when constructing Story Index ([#16788](https://github.com/storybookjs/storybook/pull/16788)) +- Core: Don't log a console error when the story is missing ([#16783](https://github.com/storybookjs/storybook/pull/16783)) +- Addon-docs: Wait for the story component to render before emitting ([#16792](https://github.com/storybookjs/storybook/pull/16792)) +- Core: Ensure that `context.args` is always set ([#16790](https://github.com/storybookjs/storybook/pull/16790)) + +## 6.4.0-rc.9 (November 26, 2021) + +### Features + +- Angular: Add styles and stylePreprocessorOptions to angular builder ([#16675](https://github.com/storybookjs/storybook/pull/16675)) + +### Bug Fixes + +- Interactions: Unlock controls when play function is finished ([#16784](https://github.com/storybookjs/storybook/pull/16784)) + +### Maintenance + +- Misc: Cleanup typescript webpack types ([#16780](https://github.com/storybookjs/storybook/pull/16780)) + +## 6.4.0-rc.8 (November 25, 2021) + +### Bug Fixes + +- Interactions: Fix duplicate rows in waitFor ([#16465](https://github.com/storybookjs/storybook/pull/16465)) +- Core: Fix channel options so that they are merged in correct order ([#16764](https://github.com/storybookjs/storybook/pull/16764)) + +### Dependency Upgrades + +- Add missing peer dependencies ([#16551](https://github.com/storybookjs/storybook/pull/16551)) + +## 6.4.0-rc.7 (November 24, 2021) + +### Bug Fixes + +- Core: Add `./` to start of hidden file & folder paths ([#16723](https://github.com/storybookjs/storybook/pull/16723)) + +### Dependency Upgrades + +- Update peer dependencies for angular 13 support ([#16758](https://github.com/storybookjs/storybook/pull/16758)) + +## 6.4.0-rc.6 (November 22, 2021) + +### Bug Fixes + +- CSF: Fix component id handling ([#16746](https://github.com/storybookjs/storybook/pull/16746)) +- Addon-docs: Improved loading state ([#16709](https://github.com/storybookjs/storybook/pull/16709)) + +### Maintenance + +- WebComponents: Update Lit peerDep to use Lit 2 stable version ([#16670](https://github.com/storybookjs/storybook/pull/16670)) + +### Dependency Upgrades + +- Upgrade react-router to 6.0.0 ([#16742](https://github.com/storybookjs/storybook/pull/16742)) + +## 6.4.0-rc.5 (November 19, 2021) + +### Bug Fixes + +- Core: Restore `stringifyEnvs` utility used by Vite builder ([#16731](https://github.com/storybookjs/storybook/pull/16731)) + +## 6.4.0-rc.4 (November 19, 2021) + +### Bug Fixes + +- Core: Fix `process.env` stringification ([#16725](https://github.com/storybookjs/storybook/pull/16725)) +- Core: Fix build-storybook sort bug in v6-mode ([#16724](https://github.com/storybookjs/storybook/pull/16724)) +- Addon-docs/Angular: fix extractEnumValues undefined error ([#16524](https://github.com/storybookjs/storybook/pull/16524)) + +### Maintenance + +- Angular: update addon interactions example ([#16698](https://github.com/storybookjs/storybook/pull/16698)) + +### Dependency Upgrades + +- Upgrade from node-sass to sass in examples/angular-cli ([#16663](https://github.com/storybookjs/storybook/pull/16663)) + +## 6.4.0-rc.3 (November 16, 2021) + +### Bug Fixes + +- Angular: Fix detection of @angular/cli package version ([#16696](https://github.com/storybookjs/storybook/pull/16696)) + +## 6.4.0-rc.2 (November 16, 2021) + +### Features + +- Core: Add option to use webpack filesystem cache ([#16219](https://github.com/storybookjs/storybook/pull/16219)) + +### Bug Fixes + +- CLI: Fix automigrate command for eslint with extends as string ([#16687](https://github.com/storybookjs/storybook/pull/16687)) +- Core: Bust the prebuilt manager cache if user has set `features` ([#16684](https://github.com/storybookjs/storybook/pull/16684)) + +### Maintenance + +- Build: GH Action for exporting to linear by GH label ([#16683](https://github.com/storybookjs/storybook/pull/16683)) + +## 6.4.0-rc.1 (November 13, 2021) + +### Features + +- Angular: Add getWebpackConfig for angular 12.2.x & 13.x.x ([#16644](https://github.com/storybookjs/storybook/pull/16644)) + +## 6.4.0-rc.0 (November 12, 2021) + +Storybook 6.4 is in RC!! 🎉🎉🎉 + +Hundreds of improvements and fixes, including: + +- ▶️ **Interactive stories** to simulate user behavior and tools to debug it +- ⚡️ **On-demand architecture** for smaller builds and faster load times +- ⛸ **Streamlined tooling and documentation** for easier upgrades +- 💯 **Hundreds more fixes** and quality of life improvements + +Track the release in the Github: [Storybook 6.4 Release 🛠](https://github.com/storybookjs/storybook/issues/15355) + +## 6.4.0-beta.33 (November 12, 2021) + +### Features + +- UI: Remove `nopreview` and show redbox for any story error ([#16669](https://github.com/storybookjs/storybook/pull/16669)) +- CLI: Run automigrate at the end of `sb init` ([#16671](https://github.com/storybookjs/storybook/pull/16671)) +- UI: Docs loading state (WIP) ([#16666](https://github.com/storybookjs/storybook/pull/16666)) + +### Bugs + +- Addon-actions: Omit sending window object thru the channel ([#16514](https://github.com/storybookjs/storybook/pull/16514)) + +### Maintenance + +- Build: Fix CI checks ([#16535](https://github.com/storybookjs/storybook/pull/16535)) +- Build: Add eslint-plugin-storybook to the repo ([#16662](https://github.com/storybookjs/storybook/pull/16662)) + +## 6.4.0-beta.32 (November 12, 2021) + +### Features + +- CLI: Add eslint-plugin-storybook to automigrate ([#16550](https://github.com/storybookjs/storybook/pull/16550)) + +### Bug Fixes + +- Core: Ensure manager caching respects globals ([#16653](https://github.com/storybookjs/storybook/pull/16653)) +- Core: Move the websocket channel to a specific path ([#16665](https://github.com/storybookjs/storybook/pull/16665)) +- Storyshots: Fix autotitle ([#16568](https://github.com/storybookjs/storybook/pull/16568)) + +### Maintenance + +- Interactions: Use Icon button and add disabled state to IconButton ([#16601](https://github.com/storybookjs/storybook/pull/16601)) +- Add handle-release-branches-workflow ([#16580](https://github.com/storybookjs/storybook/pull/16580)) +- Addon-interactions: add waitForElementToBeRemoved example ([#16434](https://github.com/storybookjs/storybook/pull/16434)) + +## 6.4.0-beta.31 (November 10, 2021) + +### Features + +- Core: Add feature flag to stop storybook from aliasing emotion ([#16613](https://github.com/storybookjs/storybook/pull/16613)) + +### Bug Fixes + +- Core: Fix `staticDirs` and `-s` conflict check ([#16649](https://github.com/storybookjs/storybook/pull/16649)) + +### Maintenance + +- Build: Add node-gyp for M1 macs ([#16645](https://github.com/storybookjs/storybook/pull/16645)) + +## 6.4.0-beta.30 (November 8, 2021) + +### Features + +- Args: Add ability to specific argType "targets" ([#16333](https://github.com/storybookjs/storybook/pull/16333)) + +### Bug Fixes + +- Core: Fix sorting by `__namedExportsOrder` ([#16626](https://github.com/storybookjs/storybook/pull/16626)) +- Angular: Fix zonejs imports in framework preset ([#16631](https://github.com/storybookjs/storybook/pull/16631)) +- Core: Change CSF loading problems from warning to error ([#16632](https://github.com/storybookjs/storybook/pull/16632)) +- Core: Fix args values updated from url to control ([#16508](https://github.com/storybookjs/storybook/pull/16508)) +- CLI: Fix upgrade error state ([#16622](https://github.com/storybookjs/storybook/pull/16622)) + +## 6.4.0-beta.29 (November 6, 2021) + +### Features + +- CSFFile: Handle re-exported stories ([#16607](https://github.com/storybookjs/storybook/pull/16607)) + +### Bug Fixes + +- StoryIndex: Skip files with no default export ([#16606](https://github.com/storybookjs/storybook/pull/16606)) +- Addon-docs/Source: Fix disabling show code with null ([#16615](https://github.com/storybookjs/storybook/pull/16615)) +- Core: Handle missing websocket in production build ([#16590](https://github.com/storybookjs/storybook/pull/16590)) +- Core: Ensure we set `parameters.filePath` in v7 mode ([#16566](https://github.com/storybookjs/storybook/pull/16566)) +- Core: Fix behavior around missing stories to be more clear ([#16608](https://github.com/storybookjs/storybook/pull/16608)) + +## 6.4.0-beta.28 (November 5, 2021) + +### Bug Fixes + +- Interactions: Fix README link ([#16596](https://github.com/storybookjs/storybook/pull/16596)) + +## 6.4.0-beta.27 (November 4, 2021) + +### Features + +- Core: Add 'staticDirs' config option ([#15969](https://github.com/storybookjs/storybook/pull/15969)) + +### Bug Fixes + +- TS: Fix type for Refs so they can be disabled ([#16582](https://github.com/storybookjs/storybook/pull/16582)) +- CLI: Add a check for source-dir in `sb extract` ([#16505](https://github.com/storybookjs/storybook/pull/16505)) +- UI: Fix links that have no onClick handler ([#16581](https://github.com/storybookjs/storybook/pull/16581)) +- Core: Continue running play function on rerender ([#16574](https://github.com/storybookjs/storybook/pull/16574)) +- Ensure we always initialize the story store, even when the index errors. ([#16537](https://github.com/storybookjs/storybook/pull/16537)) +- Interactions: Fix panel tab icon/count ([#16578](https://github.com/storybookjs/storybook/pull/16578)) + +### Dependency Upgrades + +- Pin the version of `history` for `react-router-dom` compat ([#16560](https://github.com/storybookjs/storybook/pull/16560)) + +## 6.4.0-beta.26 (November 2, 2021) + +### Bug Fixes + +- Core: Replace SSE with websockets ([#16504](https://github.com/storybookjs/storybook/pull/16504)) +- UI: Upgrade react-router ([#16554](https://github.com/storybookjs/storybook/pull/16554)) +- Addon-docs/HTML: Fix source snippetization for DOM elements ([#16553](https://github.com/storybookjs/storybook/pull/16553)) + +## 6.4.0-beta.25 (November 2, 2021) + +### Bug Fixes + +- Core: Fix `decorateStory` exports from frameworks that have it ([#16529](https://github.com/storybookjs/storybook/pull/16529)) +- Fix v7.0 type exports and update MIGRATION.md ([#16466](https://github.com/storybookjs/storybook/pull/16466)) +- UI: Do not display menu toggle when `singleStory=true` ([#15755](https://github.com/storybookjs/storybook/pull/15755)) + +### Maintenance + +- Core: Improve webpack chunk names ([#16513](https://github.com/storybookjs/storybook/pull/16513)) + +### Dependency Upgrades + +- Migrate from micromatch to picomatch ([#16522](https://github.com/storybookjs/storybook/pull/16522)) +- Add qs as a dev dependency of the api package ([#16525](https://github.com/storybookjs/storybook/pull/16525)) + +## 6.4.0-beta.24 (November 2, 2021) + +bad npm publish + +# 6.4.0-beta.23 (October 29, 2021) + +### Features + +- Core: Add support for async `getProjectAnnotations` function ([#16495](https://github.com/storybookjs/storybook/pull/16495)) + +### Bug Fixes + +- Addon-docs: Fix centered layout on DocsPage ([#16506](https://github.com/storybookjs/storybook/pull/16506)) +- Addon-docs/Angular: Fix missing condition in compodoc resolveTypealias ([#16523](https://github.com/storybookjs/storybook/pull/16523)) +- Core: Fix `toImportFn` when dealing with `../`-led paths ([#16474](https://github.com/storybookjs/storybook/pull/16474)) + +### Maintenance + +- UI: Update the toolbar button styles ([#16429](https://github.com/storybookjs/storybook/pull/16429)) +- CLI: Fix build selection menu ([#16521](https://github.com/storybookjs/storybook/pull/16521)) +- Core: Use synchronous promises to "fake" promises for sync code ([#16517](https://github.com/storybookjs/storybook/pull/16517)) +- UI: Improve WithTooltip contrast and positioning ([#16510](https://github.com/storybookjs/storybook/pull/16510)) + +## 6.4.0-beta.22 (October 28, 2021) + +### Bug Fixes + +- Addon-docs: Track code-level args changes in `ArgsTable` ([#16488](https://github.com/storybookjs/storybook/pull/16488)) + +### Maintenance + +- Addon-a11y: Lazy load axe-core only when running tests ([#16484](https://github.com/storybookjs/storybook/pull/16484)) +- Addon-docs: Lazy load Prettier in Vue and Angular ([#16459](https://github.com/storybookjs/storybook/pull/16459)) + +## 6.4.0-beta.21 (October 28, 2021) + +### Features + +- Core: Rerun loaders when args/globals change ([#16476](https://github.com/storybookjs/storybook/pull/16476)) +- Interactions: move step debugger behind a feature flag ([#16481](https://github.com/storybookjs/storybook/pull/16481)) + +### Bug Fixes + +- Core: Always update initial args when loading a story ([#16487](https://github.com/storybookjs/storybook/pull/16487)) +- Core: Ensure we don't reset `WebPreview` if calling `start()` in v7 mode ([#16475](https://github.com/storybookjs/storybook/pull/16475)) +- Core: Save and restore globals on preview init using the channel ([#16469](https://github.com/storybookjs/storybook/pull/16469)) + +### Maintenance + +- CI: Upgrade Cypress and Node.js version used in e2e tests ([#16263](https://github.com/storybookjs/storybook/pull/16263)) + +### Dependency Upgrades + +- Interactions: Use latest package versions ([#16464](https://github.com/storybookjs/storybook/pull/16464)) + +## 6.4.0-beta.20 (October 26, 2021) + +### Bug Fixes + +- Interactions: Do not cleanup state when loading initial story ([#16462](https://github.com/storybookjs/storybook/pull/16462)) +- Addon-interactions: Add safety check on fileName parameter ([#16454](https://github.com/storybookjs/storybook/pull/16454)) +- Core: Fix optional global features in PreviewWeb ([#16448](https://github.com/storybookjs/storybook/pull/16448)) + +### Maintenance + +- UI: Migrate router to react-router ([#16440](https://github.com/storybookjs/storybook/pull/16440)) + +## 6.4.0-beta.19 (October 22, 2021) + +### Bug Fixes + +- Core: Fix some slashes for windows ([#16445](https://github.com/storybookjs/storybook/pull/16445)) + +### Maintenance + +- Core: Add typing for StorybookConfig.refs ([#16443](https://github.com/storybookjs/storybook/pull/16443)) + +## 6.4.0-beta.18 (October 21, 2021) + +### Features + +- StoryIndex: Detect added/moved directories and batch invalidations ([#16432](https://github.com/storybookjs/storybook/pull/16432)) + +### Bug Fixes + +- Core: Fix module loading support ([#16404](https://github.com/storybookjs/storybook/pull/16404)) +- Addon-links: Modernize to be compatible with v7 store ([#16420](https://github.com/storybookjs/storybook/pull/16420)) + +### Maintenance + +- CLI: Improve build-storybooks script in the monorepo ([#16433](https://github.com/storybookjs/storybook/pull/16433)) + +## 6.4.0-beta.17 (October 21, 2021) + +### Features + +- Core: Add `core.channelOptions` main.js config ([#16415](https://github.com/storybookjs/storybook/pull/16415)) + +### Maintenance + +- Addon-docs: Lazy load docs to reduce bundle size ([#16412](https://github.com/storybookjs/storybook/pull/16412)) +- UI: Update mono font stack ([#16409](https://github.com/storybookjs/storybook/pull/16409)) +- UI: Update sidebar hover color to be a refreshing transparent blue ([#16408](https://github.com/storybookjs/storybook/pull/16408)) + +## 6.4.0-beta.16 (October 20, 2021) + +### Bug Fixes + +- Core: Consolidate framework presets ([#16417](https://github.com/storybookjs/storybook/pull/16417)) +- Addon-a11y: Fix to use `loadStory` over deprecated `fromId` ([#16398](https://github.com/storybookjs/storybook/pull/16398)) +- Core: Restore `queryparams` exports in `client-api` ([#16414](https://github.com/storybookjs/storybook/pull/16414)) + +### Maintenance + +- Core: Minor cleanup of `PreviewWeb` ([#16418](https://github.com/storybookjs/storybook/pull/16418)) + +### Dependency Upgrades + +- Update `react-element-to-jsx-string` package ([#16407](https://github.com/storybookjs/storybook/pull/16407)) + +## 6.4.0-beta.15 (October 19, 2021) + +### Features + +- Core: Add `framework` field support to main.js ([#16393](https://github.com/storybookjs/storybook/pull/16393)) + +### Bug Fixes + +- Addon-docs: Spread all the old docs context fields ([#16399](https://github.com/storybookjs/storybook/pull/16399)) +- Core: Reverse checking of promise so it's OK if we get it wrong ([#16396](https://github.com/storybookjs/storybook/pull/16396)) + +### Maintenance + +- Addon-interactions: Update interaction hover icon ([#16388](https://github.com/storybookjs/storybook/pull/16388)) +- Core: Refactor story store to be simpler when getting the index ([#16397](https://github.com/storybookjs/storybook/pull/16397)) + +## 6.4.0-beta.14 (October 19, 2021) + +### Bug Fixes + +- Core: Fix bad deprecation link for argType.defaultValue ([#16391](https://github.com/storybookjs/storybook/pull/16391)) +- Storyshots/vue3: Fix story render with singleton vue3 app ([#15983](https://github.com/storybookjs/storybook/pull/15983)) +- Angular: Fix preset for storyStoreV7 ([#16380](https://github.com/storybookjs/storybook/pull/16380)) +- Core: Fix Args combination to allow `undefined` overrides ([#16385](https://github.com/storybookjs/storybook/pull/16385)) +- Core: Fix missing FEATURES global ([#16389](https://github.com/storybookjs/storybook/pull/16389)) + +### Dependency Upgrades + +- Upgrade chromatic CLI ([#16320](https://github.com/storybookjs/storybook/pull/16320)) + +## 6.4.0-beta.13 (October 18, 2021) + +### Features + +- Core: Listen to story change events as soon as the preview is created ([#16331](https://github.com/storybookjs/storybook/pull/16331)) + +### Bug Fixes + +- Addon-controls: Fix `{control: false}` handling ([#16366](https://github.com/storybookjs/storybook/pull/16366)) +- CLI: Fix broken link in react native template ([#16372](https://github.com/storybookjs/storybook/pull/16372)) +- UI: Fix scrollbar color to be visible in dark theme ([#16345](https://github.com/storybookjs/storybook/pull/16345)) + +## 6.4.0-beta.12 (October 15, 2021) + +### Features + +- Addon-interactions: New addon for step debugging play functions ([#16002](https://github.com/storybookjs/storybook/pull/16002)) +- Addon-interactions: Add rewind button to interactions subnav ([#16042](https://github.com/storybookjs/storybook/pull/16042)) + +## 6.3.12 (October 14, 2021) + +### Bug Fixes + +- CLI: Force `sb upgrade` to use latest version of `npm-check-updates` ([#16336](https://github.com/storybookjs/storybook/pull/16336)) + +## 6.4.0-beta.11 (October 14, 2021) + +### Features + +- Core: Align storyIndex generated by the server and client ([#16311](https://github.com/storybookjs/storybook/pull/16311)) +- Core: Render behavior around play functions ([#16208](https://github.com/storybookjs/storybook/pull/16208)) +- Angular: Allow to set configuration in angularBrowserTarget ([#16218](https://github.com/storybookjs/storybook/pull/16218)) + +### Bug Fixes + +- CLI: Force `sb upgrade` to use latest version of `npm-check-updates` ([#16336](https://github.com/storybookjs/storybook/pull/16336)) + +### Maintenance + +- Core: Fix broken build ([#16346](https://github.com/storybookjs/storybook/pull/16346)) + ## 6.4.0-beta.10 (October 13, 2021) ### Features diff --git a/CONTRIBUTING.old.md b/CONTRIBUTING.old.md index 7d6885538b4f..7c1c9d6e1766 100644 --- a/CONTRIBUTING.old.md +++ b/CONTRIBUTING.old.md @@ -133,7 +133,7 @@ This should enable auto-fix for all source files, and give linting warnings and First make sure the repo is bootstrapped. -Then run `yarn build-storybooks`, this creates a static website from all examples. +Then run `yarn build-storybooks --all`, this creates a static website from all examples. Then run `yarn serve-storybooks`, this will run the static site on the port cypress expects. diff --git a/MAINTAINERS.md b/MAINTAINERS.md index 6ff77fef4875..28c946793682 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -15,7 +15,7 @@ This document outlines some of the processes that the maintainers should adhere | api:(name) | Issue, bug, or pull request related to Storybook's API (e.g.,[makeDecorator](/docs/addons/addons-api.md#makeDecorator-API)) | | args | Issue, bug, or pull request related to Storybook's [args](/docs/writing-stories/args.md) | | babel/webpack | Issue, bug, or pull request related to Storybook's build system (e.g., Webpack or Babel), for Webpack 5 issues see below | -| block:(name) | Issue or bug within a certain surface are of Storybook (e.g., [argsTable](/docs/writing-docs/doc-blocks.md#argstable)) | +| block:(name) | Issue or bug within a certain surface are of Storybook (e.g., [argsTable](/docs/writing-docs/doc-block-argstable.md)) | | BREAKING CHANGE | Issue or pull request that introduces a breaking change within Storybook's ecosystem. | | BREAKING PRERELASE | Breaking, but only for prerelease users (not relative to the stable release) | | build-storybook | Issue, bug, or pull request related to Storybook's production build | @@ -24,7 +24,7 @@ This document outlines some of the processes that the maintainers should adhere | cli | Issue, bug, or pull request that affects the Storybook's CLI | | compatibility with other tools | Issue, bug, or pull request between Storybook and other tools (e.g., [Nuxt](https://nuxtjs.org/)) | | components | Issue, bug, or pull request related to Storybook's internal components | -| composition | Issue, bug, or pull request related to Storybook [Composition](/docs/workflows/storybook-composition.md) | +| composition | Issue, bug, or pull request related to Storybook [Composition](/docs/sharing/storybook-composition.md) | | configuration | Issue, bug, or pull request related to Storybook [configuration](/docs/configure/overview.md) | | core | Issue, bug, or pull request related to Storybook's Core | | cra | Issue, bug, or pull request that affects Storybook's compatibility with Create React APP ([CRA](https://create-react-app.dev/docs/getting-started/))| diff --git a/MIGRATION.md b/MIGRATION.md index f81bfba39c2e..55d2d4a43fac 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -1,17 +1,41 @@

Migration

+- [From version 6.4.x to 6.5.0](#from-version-64x-to-650) + - [Vue 3 upgrade](#vue-3-upgrade) + - [React18 new root API](#react18-new-root-api) + - [Renamed isToolshown to showToolbar](#renamed-istoolshown-to-showtoolbar) + - [Deprecated register.js](#deprecated-registerjs) + - [Dropped support for addon-actions addDecorators](#dropped-support-for-addon-actions-adddecorators) + - [Vite builder renamed](#vite-builder-renamed) + - [Docs framework refactor for React](#docs-framework-refactor-for-react) + - [Opt-in MDX2 support](#opt-in-mdx2-support) + - [CSF3 auto-title improvements](#csf3-auto-title-improvements) + - [Auto-title filename case](#auto-title-filename-case) + - [Auto-title redundant filename](#auto-title-redundant-filename) + - [Auto-title always prefixes](#auto-title-always-prefixes) - [From version 6.3.x to 6.4.0](#from-version-63x-to-640) + - [Automigrate](#automigrate) - [CRA5 upgrade](#cra5-upgrade) - [CSF3 enabled](#csf3-enabled) - [Optional titles](#optional-titles) - [String literal titles](#string-literal-titles) + - [StoryObj type](#storyobj-type) - [Story Store v7](#story-store-v7) - [Behavioral differences](#behavioral-differences) + - [Main.js framework field](#mainjs-framework-field) - [Using the v7 store](#using-the-v7-store) - - [V7-style story sort](#v7-style-story-sort) + - [v7-style story sort](#v7-style-story-sort) + - [v7 Store API changes for addon authors](#v7-store-api-changes-for-addon-authors) + - [Storyshots compatibility in the v7 store](#storyshots-compatibility-in-the-v7-store) + - [Emotion11 quasi-compatibility](#emotion11-quasi-compatibility) - [Babel mode v7](#babel-mode-v7) - [Loader behavior with args changes](#loader-behavior-with-args-changes) - - [Angular component parameter removed](#angular-component-parameter-removed) + - [6.4 Angular changes](#64-angular-changes) + - [SB Angular builder](#sb-angular-builder) + - [Angular13](#angular13) + - [Angular component parameter removed](#angular-component-parameter-removed) + - [6.4 deprecations](#64-deprecations) + - [Deprecated --static-dir CLI flag](#deprecated---static-dir-cli-flag) - [From version 6.2.x to 6.3.0](#from-version-62x-to-630) - [Webpack 5](#webpack-5) - [Fixing hoisting issues](#fixing-hoisting-issues) @@ -177,23 +201,207 @@ - [Packages renaming](#packages-renaming) - [Deprecated embedded addons](#deprecated-embedded-addons) +## From version 6.4.x to 6.5.0 + +### Vue 3 upgrade + +Storybook 6.5 supports Vue 3 out of the box when you install it fresh. However, if you're upgrading your project from a previous version, you'll need to [follow the steps for opting-in to webpack 5](#webpack-5). + +### React18 new root API + +React 18 introduces a [new root API](https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html#updates-to-client-rendering-apis). Starting in 6.5, Storybook for React will auto-detect your react version and use the new root API automatically if you're on React18. + +If you wish to opt out of the new root API, set the `reactOptions.legacyRootApi` flag in your `.storybook/main.js` config: + +```js +module.exports = { + reactOptions: { legacyRootApi: true }, +}; +``` + +### Renamed isToolshown to showToolbar + +Storybook's [manager API](docs/addons/addons-api.md) has deprecated the `isToolshown` option (to show/hide the toolbar) and renamed it to `showToolbar` for consistency with other similar UI options. + +Example: + +```js +// .storybook/manager.js +import { addons } from '@storybook/addons'; + +addons.setConfig({ + showToolbar: false, +}); +``` + +### Deprecated register.js + +In ancient versions of Storybook, addons were registered by referring to `addon-name/register.js`. This is going away in SB7.0. Instead you should just add `addon-name` to the `addons` array in `.storybook/main.js`. + +Before: + +```js +module.exports = { addons: ['my-addon/register.js'] }; +``` + +After: + +```js +module.exports = { addons: ['my-addon'] }; +``` + +### Dropped support for addon-actions addDecorators + +Prior to SB6.5, `addon-actions` provided an option called `addDecorators`. In SB6.5, decorators are applied always. This is technically a breaking change, so if this affects you please file an issue in Github and we can consider reverting this in a patch release. + +### Vite builder renamed + +SB6.5 renames Storybook's [Vite builder](https://github.com/storybookjs/builder-vite) from `storybook-builder-vite` to `@storybook/builder-vite`. This move is part of a larger effort to improve Vite support in Storybook. + +Storybook's `automigrate` command can migrate for you. To manually migrate: + +1. Remove `storybook-builder-vite` from your `package.json` dependencies +2. Install `@storybook/builder-vite` +3. Update your `core.builder` setting in `.storybook/main.js` to `@storybook/builder-vite`. + +### Docs framework refactor for React + +SB6.5 moves framework specializations (e.g. ArgType inference, dynamic snippet rendering) out of `@storybook/addon-docs` and into the specific framework packages to which they apply (e.g. `@storybook/react`). + +This change should not require any specific migrations on your part if you are using the docs addon as described in the documentation. However, if you are using `react-docgen` or `react-docgen-typescript` information in some custom way outside of `addon-docs`, you should be aware of this change. + +In SB6.4, `@storybook/react` added `react-docgen` to its babel settings and `react-docgen-typescript` to its webpack settings. In SB6.5, this only happens if you are using `addon-docs` or `addon-controls`, either directly or indirectly through `addon-essentials`. If you're not using either of those addons, but require that information for some other addon, please configure that manually in your `.storybook/main.js` configuration. You can see the docs configuration here: https://github.com/storybookjs/storybook/blob/next/app/react/src/server/framework-preset-react-docs.ts + +### Opt-in MDX2 support + +SB6.5 adds experimental opt-in support for MDXv2. To install: + +```sh +yarn add @storybook/mdx2-csf -D +``` + +Then add the `previewMdx2` feature flag to your `.storybook/main.js` config: + +```js +module.exports = { + features: { + previewMdx2: true, + }, +}; +``` + +### CSF3 auto-title improvements + +SB 6.4 introduced experimental "auto-title", in which a story's location in the sidebar (aka `title`) can be automatically inferred from its location on disk. For example, the file `atoms/Button.stories.js` might result in the title `Atoms/Button`. + +We've made two improvements to Auto-title based on user feedback: + +- Auto-title preserves filename case +- Auto-title removes redundant filenames from the path + +#### Auto-title filename case + +SB 6.4's implementation of auto-title ran `startCase` on each path component. For example, the file `atoms/MyButton` would be transformed to `Atoms/My Button`. + +We've changed this in SB 6.5 to preserve the filename case, so that instead it the same file would result in the title `atoms/MyButton`. The rationale is that this gives more control to users about what their auto-title will be. + +This might be considered a breaking change. However, we feel justified to release this in 6.5 because: + +1. We consider it a bug in the initial auto-title implementation +2. CSF3 and the auto-title feature are experimental, and we reserve the right to make breaking changes outside of semver (tho we try to avoid it) + +If you want to restore the old titles in the UI, you can customize your sidebar with the following code snippet in `.storybook/manager.js`: + +```js +import { addons } from '@storybook/addons'; +import startCase from 'lodash/startCase'; + +addons.setConfig({ + sidebar: { + renderLabel: ({ name, type }) => (type === 'story' ? name : startCase(name)), + }, +}); +``` + +#### Auto-title redundant filename + +The heuristic failed in the common scenario in which each component gets its own directory, e.g. `atoms/Button/Button.stories.js`, which would result in the redundant title `Atoms/Button/Button`. Alternatively, `atoms/Button/index.stories.js` would result in `Atoms/Button/Index`. + +To address this problem, 6.5 introduces a new heuristic to removes the filename if it matches the directory name or `index`. So `atoms/Button/Button.stories.js` and `atoms/Button/index.stories.js` would both result in the title `Atoms/Button` (or `atoms/Button` if `autoTitleFilenameCase` is set, see above). + +Since CSF3 is experimental, we are introducing this technically breaking change in a minor release. If you desire the old structure, you can manually specify the title in file. For example: + +```js +// atoms/Button/Button.stories.js +export default { title: 'Atoms/Button/Button' }; +``` + +#### Auto-title always prefixes + +When the user provides a `prefix` in their `main.js` `stories` field, it now prefixes all titles to matching stories, whereas in 6.4 and earlier it only prefixed auto-titles. + +Consider the following example: + +```js +// main.js +module.exports = { + stories: [{ directory: '../src', titlePrefix: 'Custom' }] +} + +// ../src/NoTitle.stories.js +export default { component: Foo }; + +// ../src/Title.stories.js +export default { component: Bar, title: 'Bar' } +``` + +In 6.4, the final titles would be: + +- `NoTitle.stories.js` => `Custom/NoTitle` +- `Title.stories.js` => `Bar` + +In 6.5, the final titles would be: + +- `NoTitle.stories.js` => `Custom/NoTitle` +- `Title.stories.js` => `Custom/Bar` + + ## From version 6.3.x to 6.4.0 +### Automigrate + +Automigrate is a new 6.4 feature that provides zero-config upgrades to your dependencies, configurations, and story files. + +Each automigration analyzes your project, and if it's is applicable, propose a change alongside relevant documentation. If you accept the changes, the automigration will update your files accordingly. + +For example, if you're in a webpack5 project but still use Storybook's default webpack4 builder, the automigration can detect this and propose an upgrade. If you opt-in, it will install the webpack5 builder and update your `main.js` configuration automatically. + +You can run the existing suite of automigrations to see which ones apply to your project. This won't update any files unless you accept the changes: + +``` + +npx sb@next automigrate + +``` + +The automigration suite also runs when you create a new project (`sb init`) or when you update storybook (`sb upgrade`). + ### CRA5 upgrade -Storybook 6.3 supports CRA5 out of the box when you install it fresh. However, if you're upgrading your project from a previous version, you'll need to -upgrade the configuration. You can do this automatically by running: +Storybook 6.3 supports CRA5 out of the box when you install it fresh. However, if you're upgrading your project from a previous version, you'll need to upgrade the configuration. You can do this automatically by running: ``` -npx sb@next fix + +npx sb@next automigrate + ``` Or you can do the following steps manually to force Storybook to use webpack 5 for building your project: ```shell -yarn add @storybook/builder-webpack5@next @storybook/manager-webpack5 --dev +yarn add @storybook/builder-webpack5 @storybook/manager-webpack5 --dev # Or -npm install @storybook/builder-webpack5@next @storybook/manager-webpack5 --save-dev +npm install @storybook/builder-webpack5 @storybook/manager-webpack5 --save-dev ``` Then edit your `.storybook/main.js` config: @@ -221,7 +429,7 @@ Consider a project configuration `/path/to/project/.storybook/main.js` containin module.exports = { stories: ['../src/**/*.stories.*'] }; ``` -And te file `/path/to/project/src/components/Button.stories.tsx` containing the default export: +And the file `/path/to/project/src/components/Button.stories.tsx` containing the default export: ```js import { Button } from './Button'; @@ -234,7 +442,7 @@ We will provide more documentation soon on how to configure this. #### String literal titles -Starting in 6.4 CSF component [titles are optional](#optional-titles). However, if you do specify titles, title handing is becoming more strict in V7 and are limited to string literals. +Starting in 6.4 CSF component [titles are optional](#optional-titles). However, if you do specify titles, title handing is becoming more strict in V7 and is limited to string literals. Earlier versions of Storybook supported story titles that are dynamic Javascript expressions @@ -244,7 +452,7 @@ export default { title: 'Components/Atoms/Button', }; -// ✅ undefined 6.3 KO / 7.0 OK +// ✅ undefined 6.3 OK / 7.0 OK export default { component: Button, }; @@ -260,6 +468,30 @@ export default { }; ``` +#### StoryObj type + +The TypeScript type for CSF3 story objects is `StoryObj`, and this will become the default in Storybook 7.0. In 6.x, the `StoryFn` type is the default, and `Story` is aliased to `StoryFn`. + +If you are migrating to experimental CSF3, the following is compatible with 6.4 and requires the least amount of change to your code today: + +```ts +// CSF2 function stories, current API, will break in 7.0 +import type { Story } from '@storybook/'; + +// CSF3 object stories, will persist in 7.0 +import type { StoryObj } from '@storybook/'; +``` + +The following is compatible with 6.4 and also forward-compatible with anticipated 7.0 changes: + +```ts +// CSF2 function stories, forward-compatible mode +import type { StoryFn } from '@storybook/'; + +// CSF3 object stories, using future 7.0 types +import type { Story } from '@storybook//types-7-0'; +``` + ### Story Store v7 SB6.4 introduces an opt-in feature flag, `features.storyStoreV7`, which loads stories in an "on demand" way (that is when rendered), rather than up front when the Storybook is booted. This way of operating will become the default in 7.0 and will likely be switched to opt-out in that version. @@ -269,7 +501,7 @@ The key benefit of the on demand store is that stories are code-split automatica The on-demand store relies on the "story index" data structure which is generated in the server (node) via static code analysis. As such, it has the following limitations: - Does not work with `storiesOf()` -- Does not work if you used dynamic story names or component titles. +- Does not work if you use dynamic story names or component titles. However, the `autoTitle` feature is supported. @@ -281,6 +513,21 @@ The key behavioral differences of the v7 store are: - A new event `STORY_PREPARED` is emitted when a story is rendered for the first time, which contains metadata about the story, such as `parameters`. - All "entire" store APIs such as `extract()` need to be proceeded by an async call to `loadAllCSFFiles()` which fetches all CSF files and processes them. +#### Main.js framework field + +In earlier versions of Storybook, each framework package (e.g. `@storybook/react`) provided its own `start-storybook` and `build-storybook` binaries, which automatically filled in various settings. + +In 7.0, we're moving towards a model where the user specifies their framework in `main.js`. + +```js +module.exports = { + // ... your existing config + framework: '@storybook/react', // OR whatever framework you're using +}; +``` + +Each framework must export a `renderToDOM` function and `parameters.framework`. We'll be adding more documentation for framework authors in a future release. + #### Using the v7 store To activate the v7 mode set the feature flag in your `.storybook/main.js` config: @@ -288,6 +535,7 @@ To activate the v7 mode set the feature flag in your `.storybook/main.js` config ```js module.exports = { // ... your existing config + framework: '@storybook/react', // OR whatever framework you're using features: { storyStoreV7: true, }, @@ -296,7 +544,7 @@ module.exports = { NOTE: `features.storyStoreV7` implies `features.buildStoriesJson` and has the same limitations. -#### V7-style story sort +#### v7-style story sort If you've written a custom `storySort` function, you'll need to rewrite it for V7. @@ -332,6 +580,46 @@ function storySort(a, b) { }, ``` +#### v7 Store API changes for addon authors + +The Story Store in v7 mode is async, so synchronous story loading APIs no longer work. In particular: + +- `store.fromId()` has been replaced by `store.loadStory()`, which is async (i.e. returns a `Promise` you will need to await). +- `store.raw()/store.extract()` and friends that list all stories require a prior call to `store.cacheAllCSFFiles()` (which is async). This will load all stories, and isn't generally a good idea in an addon, as it will force the whole store to load. + +#### Storyshots compatibility in the v7 store + +Storyshots is not currently compatible with the v7 store. However, you can use the following workaround to opt-out of the v7 store when running storyshots; in your `main.js`: + +```js +module.exports = { + features: { + storyStoreV7: !global.navigator?.userAgent?.match?.('jsdom'), + }, +}; +``` + +There are some caveats with the above approach: + +- The code path in the v6 store is different to the v7 store and your mileage may vary in identical behavior. Buyer beware. +- The story sort API [changed between the stores](#v7-style-story-sort). If you are using a custom story sort function, you will need to ensure it works in both contexts (perhaps using the check `global.navigator.userAgent.match('jsdom')`). + +### Emotion11 quasi-compatibility + +Now that the web is moving to Emotion 11 for styling, popular libraries like MUI5 and ChakraUI are breaking with Storybook 6.3 which only supports emotion@10. + +Unfortunately we're unable to upgrade Storybook to Emotion 11 without a semver major release, and we're not ready for that. So, as a workaround, we've created a feature flag which opts-out of the previous behavior of pinning the Emotion version to v10. To enable this workaround, add the following to your `.storybook/main.js` config: + +```js +module.exports = { + features: { + emotionAlias: false, + }, +}; +``` + +Setting this should unlock theming for emotion11-based libraries in Storybook 6.4. + ### Babel mode v7 SB6.4 introduces an opt-in feature flag, `features.babelModeV7`, that reworks the way Babel is configured in Storybook to make it more consistent with the Babel is configured in your app. This breaking change will become the default in SB 7.0, but we encourage you to migrate today. @@ -365,9 +653,62 @@ This will create a `.babelrc.json` file. This file includes a bunch of babel plu ### Loader behavior with args changes -In 6.4 the behavior of loaders when arg changes occurred was tweaked so loaders do not re-run. Instead the previous value of the loader in passed to the story, irrespective of the new args. +In 6.4 the behavior of loaders when arg changes occurred was tweaked so loaders do not re-run. Instead the previous value of the loader is passed to the story, irrespective of the new args. + +### 6.4 Angular changes + +#### SB Angular builder -### Angular component parameter removed +Since SB6.3, Storybook for Angular supports a builder configuration in your project's `angular.json`. This provides an Angular-style configuration for running and building your Storybook. The full builder documentation will be shown in the [main documentation page](https://storybook.js.org/docs/angular) soon, but for now you can check out an example here: + +- `start-storybook`: [example](https://github.com/storybookjs/storybook/blob/next/examples/angular-cli/angular.json#L78) [schema](https://github.com/storybookjs/storybook/blob/next/app/angular/src/builders/start-storybook/schema.json) +- `build-storybook`: [example](https://github.com/storybookjs/storybook/blob/next/examples/angular-cli/angular.json#L86) [schema](https://github.com/storybookjs/storybook/blob/next/app/angular/src/builders/build-storybook/schema.json) + +#### Angular13 + +Angular 13 introduces breaking changes that require updating your Storybook configuration if you are migrating from a previous version of Angular. + +Most notably, the documented way of including global styles is no longer supported by Angular13. Previously you could write the following in your `.storybook/preview.js` config: + +``` +import '!style-loader!css-loader!sass-loader!./styles.scss'; +``` + +If you use Angular 13 and above, you should use the builder configuration instead: + +```json + "my-default-project": { + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "styles": ["src/styles.css", "src/styles.scss"], + } + } + }, + }, +``` + +If you need storybook-specific styles separate from your app, you can configure the styles in the [SB Angular builder](#sb-angular-builder), which completely overrides your project's styles: + +```json + "storybook": { + "builder": "@storybook/angular:start-storybook", + "options": { + "browserTarget": "my-default-project:build", + "styles": [".storybook/custom-styles.scss"], + }, + } +``` + +Then, once you've set this up, you should run Storybook through the builder: + +```sh +ng run my-default-project:storybook +ng run my-default-project:build-storybook +``` + +#### Angular component parameter removed In SB6.3 and earlier, the `default.component` metadata was implemented as a parameter, meaning that stories could set `parameters.component` to override the default export. This was an internal implementation that was never documented, but it was mistakenly used in some Angular examples. @@ -386,11 +727,56 @@ export const MyStory = () => ({ component: MyComponent, ... }) [More discussion here.](https://github.com/storybookjs/storybook/pull/16010#issuecomment-917378595) +### 6.4 deprecations + +#### Deprecated --static-dir CLI flag + +In 6.4 we've replaced the `--static-dir` CLI flag with the the `staticDirs` field in `.storybook/main.js`. Note that the CLI directories are relative to the current working directory, whereas the `staticDirs` are relative to the location of `main.js`. + +Before: + +```sh +start-storybook --static-dir ./public,./static,./foo/assets:/assets +``` + +After: + +```js +// .storybook/main.js +module.exports = { + staticDirs: ['../public', '../static', { from: '../foo/assets', to: '/assets' }], +}; +``` + +The `--static-dir` flag has been deprecated and will be removed in Storybook 7.0. + ## From version 6.2.x to 6.3.0 ### Webpack 5 -Storybook 6.3 brings opt-in support for building both your project and the manager UI with webpack 5. To do so: +Storybook 6.3 brings opt-in support for building both your project and the manager UI with webpack 5. To do so, there are two ways: + +1 - Upgrade command + +If you're upgrading your Storybook version, run this command, which will both upgrade your dependencies but also detect whether you should migrate to webpack5 builders and apply the changes automatically: + +```shell +npx sb upgrade +``` + +2 - Automigrate command + +If you don't want to change your Storybook version but want Storybook to detect whether you should migrate to webpack5 builders and apply the changes automatically: + +```shell +npx sb automigrate +``` + +3 - Manually + +If either methods did not work or you just want to proceed manually, do the following steps: + +Install the dependencies: ```shell yarn add @storybook/builder-webpack5 @storybook/manager-webpack5 --dev @@ -408,6 +794,8 @@ module.exports = { }; ``` +> NOTE: If you're using `@storybook/preset-create-react-app` make sure to update it to version 4.0.0 as well. + #### Fixing hoisting issues ##### Webpack 5 manager build @@ -432,6 +820,17 @@ yarn add webpack@5 --dev npm install webpack@5 --save-dev ``` +Alternatively or additionally you might need to add a resolution to your package.json to ensure that a consistent webpack version is provided across all of storybook packages. Replacing the {app} with the app (react, vue, etc.) that you're using: + +```js +// package.json +... +resolutions: { + "@storybook/{app}/webpack": "^5" +} +... +``` + ### Angular 12 upgrade Storybook 6.3 supports Angular 12 out of the box when you install it fresh. However, if you're upgrading your project from a previous version, you'll need to [follow the steps for opting-in to webpack 5](#webpack-5). @@ -544,7 +943,7 @@ export const Basic = () => ({ }); ``` -The new convention is consistent with how other frameworks and addons work in Storybook. The old way will be supported until 7.0. For a full discussion see https://github.com/storybookjs/storybook/issues/8673. +The new convention is consistent with how other frameworks and addons work in Storybook. The old way will be supported until 7.0. For a full discussion see . #### New Angular renderer @@ -581,7 +980,7 @@ Instead of continuing to include PostCSS inside the core library, it has been mo If you require PostCSS support, please install `@storybook/addon-postcss` in your project, add it to your list of addons inside `.storybook/main.js`, and configure a `postcss.config.js` file. -Further information is available at https://github.com/storybookjs/storybook/issues/12668 and https://github.com/storybookjs/storybook/pull/13669. +Further information is available at and . If you're not using Postcss and you don't want to see the warning, you can disable it by adding the following to your `.storybook/main.js`: @@ -722,7 +1121,7 @@ Starting in 6.1, `react` and `react-dom` are required peer dependencies of `@sto Error: Cannot find module 'react-dom/package.json' ``` -They were also peer dependencies in earlier versions, but due to the package structure they would be installed by Storybook if they were not required by the user's project. For more discussion: https://github.com/storybookjs/storybook/issues/13269 +They were also peer dependencies in earlier versions, but due to the package structure they would be installed by Storybook if they were not required by the user's project. For more discussion: ### 6.1 deprecations @@ -751,7 +1150,7 @@ console.log(unboundStoryFn(context)); If you're not using loaders, `storyFn` will work as before. If you are, you'll need to use the new approach. -> NOTE: If you're using `@storybook/addon-docs`, this deprecation warning is triggered by the Docs tab in 6.1. It's safe to ignore and we will be providing a proper fix in a future release. You can track the issue at https://github.com/storybookjs/storybook/issues/13074. +> NOTE: If you're using `@storybook/addon-docs`, this deprecation warning is triggered by the Docs tab in 6.1. It's safe to ignore and we will be providing a proper fix in a future release. You can track the issue at . #### Deprecated onBeforeRender @@ -1591,7 +1990,7 @@ Solution: ```javascript getStorybookUI({ ... - asyncStorage: require('@react-native-community/async-storage').default || require('react-native').AsyncStorage || null + asyncStorage: require('@react-native-async-storage/async-storage').default || require('react-native').AsyncStorage || null }); ``` @@ -1845,7 +2244,7 @@ Theming has been rewritten in v5. If you used theming in v4, please consult the ### Story hierarchy defaults -Storybook's UI contains a hierarchical tree of stories that can be configured by `hierarchySeparator` and `hierarchyRootSeparator` [options](./addons/options/README.md). +Storybook's UI contains a hierarchical tree of stories that can be configured by `hierarchySeparator` and `hierarchyRootSeparator` [options](https://github.com/storybookjs/deprecated-addons/blob/master/MIGRATION.md#options-addon-deprecated). In Storybook 4.x the values defaulted to `null` for both of these options, so that there would be no hierarchy by default. @@ -2221,16 +2620,16 @@ The `@storybook/react-native` had built-in addons (`addon-actions` and `addon-li ### Storyshots Changes -1. `imageSnapshot` test function was extracted from `addon-storyshots` - and moved to a new package - `addon-storyshots-puppeteer` that now will - be dependant on puppeteer. [README](https://github.com/storybookjs/storybook/tree/master/addons/storyshots/storyshots-puppeteer) -2. `getSnapshotFileName` export was replaced with the `Stories2SnapsConverter` - class that now can be overridden for a custom implementation of the - snapshot-name generation. [README](https://github.com/storybookjs/storybook/tree/master/addons/storyshots/storyshots-core#stories2snapsconverter) -3. Storybook that was configured with Webpack's `require.context()` feature - will need to add a babel plugin to polyfill this functionality. - A possible plugin might be [babel-plugin-require-context-hook](https://github.com/smrq/babel-plugin-require-context-hook). - [README](https://github.com/storybookjs/storybook/tree/master/addons/storyshots/storyshots-core#configure-jest-to-work-with-webpacks-requirecontext) +1. `imageSnapshot` test function was extracted from `addon-storyshots` + and moved to a new package - `addon-storyshots-puppeteer` that now will + be dependant on puppeteer. [README](https://github.com/storybookjs/storybook/tree/master/addons/storyshots/storyshots-puppeteer) +2. `getSnapshotFileName` export was replaced with the `Stories2SnapsConverter` + class that now can be overridden for a custom implementation of the + snapshot-name generation. [README](https://github.com/storybookjs/storybook/tree/master/addons/storyshots/storyshots-core#stories2snapsconverter) +3. Storybook that was configured with Webpack's `require.context()` feature + will need to add a babel plugin to polyfill this functionality. + A possible plugin might be [babel-plugin-require-context-hook](https://github.com/smrq/babel-plugin-require-context-hook). + [README](https://github.com/storybookjs/storybook/tree/master/addons/storyshots/storyshots-core#configure-jest-to-work-with-webpacks-requirecontext) ### Webpack 4 @@ -2241,9 +2640,11 @@ Storybook now uses webpack 4. If you have a [custom webpack config](https://stor Storybook now uses Babel 7. There's a couple of cases when it can break with your app: - If you aren't using Babel yourself, and don't have .babelrc, install following dependencies: + ``` npm i -D @babel/core babel-loader@next ``` + - If you're using Babel 6, make sure that you have direct dependencies on `babel-core@6` and `babel-loader@7` and that you have a `.babelrc` in your project directory. ### Create-react-app @@ -2494,14 +2895,18 @@ If you **are** using these addons, it takes two steps to migrate: - add the addons you use to your `package.json`. - update your code: change `addons.js` like so: + ```js import '@storybook/addon-actions/register'; import '@storybook/addon-links/register'; ``` + change `x.story.js` like so: + ```js import React from 'react'; import { storiesOf } from '@storybook/react'; import { action } from '@storybook/addon-actions'; import { linkTo } from '@storybook/addon-links'; ``` + \ No newline at end of file diff --git a/README.md b/README.md index 4c03ebc91655..df9b875b9e3f 100644 --- a/README.md +++ b/README.md @@ -51,8 +51,8 @@ It allows you to browse a component library, view the different states of each c

View README for:
- latest - next + latest + next

## Table of contents @@ -80,7 +80,7 @@ Documentation can be found [Storybook's docs site](https://storybook.js.org/docs ### Examples -Here are some featured examples that you can reference to see how Storybook works: +Here are some featured examples that you can reference to see how Storybook works: Storybook comes with a lot of [addons](https://storybook.js.org/docs/react/configure/storybook-addons) for component design, documentation, testing, interactivity, and so on. Storybook's API makes it possible to configure and extend in various ways. It has even been extended to support React Native, Android, iOS, and Flutter development for mobile. @@ -92,23 +92,19 @@ For additional help, join us in the [Storybook Discord](https://discord.gg/story ### Supported Frameworks -| Framework | Demo | | -| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | -| [React](app/react) | [v6.3.x](https://storybookjs.netlify.com/official-storybook/?path=/story/*) | [![React](https://img.shields.io/npm/dm/@storybook/react.svg)](app/react) | -| [Vue](app/vue) | [v6.3.x](https://storybookjs.netlify.com/vue-kitchen-sink/) | [![Vue](https://img.shields.io/npm/dm/@storybook/vue.svg)](app/vue) | -| [Angular](app/angular) | [v6.3.x](https://storybookjs.netlify.com/angular-cli/) | [![Angular](https://img.shields.io/npm/dm/@storybook/angular.svg)](app/angular) | -| [Web components](app/web-components) | [v6.3.x](https://storybookjs.netlify.com/web-components-kitchen-sink/) | [![Svelte](https://img.shields.io/npm/dm/@storybook/web-components.svg)](app/web-components) | -| [React Native](https://github.com/storybookjs/react-native) | - | [![React Native](https://img.shields.io/npm/dm/@storybook/react-native.svg)](app/react-native) | -| [HTML](app/html) | [v6.3.x](https://storybookjs.netlify.com/html-kitchen-sink/) | [![HTML](https://img.shields.io/npm/dm/@storybook/html.svg)](app/html) | -| [Ember](app/ember) | [v6.3.x](https://storybookjs.netlify.com/ember-cli/) | [![Ember](https://img.shields.io/npm/dm/@storybook/ember.svg)](app/ember) | -| [Svelte](app/svelte) | [v6.3.x](https://storybookjs.netlify.com/svelte-kitchen-sink/) | [![Svelte](https://img.shields.io/npm/dm/@storybook/svelte.svg)](app/svelte) | -| [Preact](app/preact) | [v6.3.x](https://storybookjs.netlify.com/preact-kitchen-sink/) | [![Preact](https://img.shields.io/npm/dm/@storybook/preact.svg)](app/preact) | -| [Marionette.js](https://github.com/storybookjs/marionette) | - | [![Marionette.js](https://img.shields.io/npm/dm/@storybook/marionette.svg)](app/marionette) | -| [Mithril](https://github.com/storybookjs/mithril) | [v6.3.x](https://storybookjs.netlify.com/mithril-kitchen-sink/) | [![Mithril](https://img.shields.io/npm/dm/@storybook/mithril.svg)](app/mithril) | -| [Marko](https://github.com/storybookjs/marko) | [v6.3.x](https://storybookjs.netlify.com/marko-cli/) | [![Marko](https://img.shields.io/npm/dm/@storybook/marko.svg)](app/marko) | -| [Riot](https://github.com/storybookjs/riot) | [v6.3.x](https://storybookjs.netlify.com/riot-kitchen-sink/) | [![Riot](https://img.shields.io/npm/dm/@storybook/riot.svg)](app/riot) | -| [Rax](https://github.com/storybookjs/rax) | [v6.3.x](https://storybookjs.netlify.com/rax-kitchen-sink/) | [![Rax](https://img.shields.io/npm/dm/@storybook/rax.svg)](app/rax) | -| [Android, iOS, Flutter](https://github.com/storybookjs/native) | [v6.3.x](https://storybookjs.github.io/native/@storybook/native-flutter-example/index.html) | [![Rax](https://img.shields.io/npm/dm/@storybook/native.svg)](https://github.com/storybookjs/native) | +| Framework | Demo | | +| -------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| [React](app/react) | [![Storybook demo](https://img.shields.io/npm/v/@storybook/react/latest?style=flat-square&color=blue&label)](https://storybookjs.netlify.com/official-storybook/?path=/story/*) | [![React](https://img.shields.io/npm/dm/@storybook/react?style=flat-square&color=eee)](app/react) | +| [Vue](app/vue) | [![Storybook demo](https://img.shields.io/npm/v/@storybook/vue/latest?style=flat-square&color=blue&label)](https://storybookjs.netlify.com/vue-kitchen-sink/) | [![Vue](https://img.shields.io/npm/dm/@storybook/vue?style=flat-square&color=eee)](app/vue) | +| [Angular](app/angular) | [![Storybook demo](https://img.shields.io/npm/v/@storybook/angular/latest?style=flat-square&color=blue&label)](https://storybookjs.netlify.com/angular-cli/) | [![Angular](https://img.shields.io/npm/dm/@storybook/angular?style=flat-square&color=eee)](app/angular) | +| [Web components](app/web-components) | [![Storybook demo](https://img.shields.io/npm/v/@storybook/web-components/latest?style=flat-square&color=blue&label)](https://storybookjs.netlify.com/web-components-kitchen-sink/) | [![Svelte](https://img.shields.io/npm/dm/@storybook/web-components?style=flat-square&color=eee)](app/web-components) | +| [React Native](https://github.com/storybookjs/react-native) | - | [![React Native](https://img.shields.io/npm/dm/@storybook/react-native?style=flat-square&color=eee)](https://github.com/storybookjs/react-native) | +| [HTML](app/html) | [![Storybook demo](https://img.shields.io/npm/v/@storybook/html/latest?style=flat-square&color=blue&label)](https://storybookjs.netlify.com/html-kitchen-sink/) | [![HTML](https://img.shields.io/npm/dm/@storybook/html?style=flat-square&color=eee)](app/html) | +| [Ember](app/ember) | [![Storybook demo](https://img.shields.io/npm/v/@storybook/ember/latest?style=flat-square&color=blue&label)](https://storybookjs.netlify.com/ember-cli/) | [![Ember](https://img.shields.io/npm/dm/@storybook/ember?style=flat-square&color=eee)](app/ember) | +| [Svelte](app/svelte) | [![Storybook demo](https://img.shields.io/npm/v/@storybook/svelte/latest?style=flat-square&color=blue&label)](https://storybookjs.netlify.com/svelte-kitchen-sink/) | [![Svelte](https://img.shields.io/npm/dm/@storybook/svelte?style=flat-square&color=eee)](app/svelte) | +| [Preact](app/preact) | [![Storybook demo](https://img.shields.io/npm/v/@storybook/preact/latest?style=flat-square&color=blue&label)](https://storybookjs.netlify.com/preact-kitchen-sink/) | [![Preact](https://img.shields.io/npm/dm/@storybook/preact?style=flat-square&color=eee)](app/preact) | +| [Marionette.js](https://github.com/storybookjs/marionette) | - | [![Marionette.js](https://img.shields.io/npm/dm/@storybook/marionette?style=flat-square&color=eee)](https://github.com/storybookjs/marionette) | +| [Android, iOS, Flutter](https://github.com/storybookjs/native) | [![Storybook demo](https://img.shields.io/npm/v/@storybook/native/latest?style=flat-square&color=blue&label)](https://storybookjs.github.io/native/@storybook/native-flutter-example/index.html) | [![Native](https://img.shields.io/npm/dm/@storybook/native?style=flat-square&color=eee)](https://github.com/storybookjs/native) | ### Sub Projects @@ -141,13 +137,13 @@ See [Addon / Framework Support Table](https://storybook.js.org/docs/react/api/fr ### Deprecated Addons -| Addons | | -| -------------------------------------------------------------------------------- | ---------------------------------------------------------- | +| Addons | | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------- | | [info](https://github.com/storybookjs/deprecated-addons/tree/master/addons/info) | Annotate stories with extra component usage information | | [notes](https://github.com/storybookjs/deprecated-addons/tree/master/addons/notes) | Annotate Storybook stories with notes | -| [contexts](https://storybook.js.org/addons/@storybook/addon-contexts/) | Addon for driving your components under dynamic contexts | -| [options](https://www.npmjs.com/package/@storybook/addon-options) | Customize the Storybook UI in code | -| [knobs](https://github.com/storybookjs/addon-knobs) | Interactively edit component prop data in the Storybook UI | +| [contexts](https://storybook.js.org/addons/@storybook/addon-contexts/) | Addon for driving your components under dynamic contexts | +| [options](https://www.npmjs.com/package/@storybook/addon-options) | Customize the Storybook UI in code | +| [knobs](https://github.com/storybookjs/addon-knobs) | Interactively edit component prop data in the Storybook UI | In order to continue improving your experience, we have to eventually deprecate certain addons in favor of new, better tools. diff --git a/RELEASES.md b/RELEASES.md index 59321da2f1dc..88557cf2fbeb 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -81,12 +81,11 @@ there gathering upvotes and "me too" comments. We need a way to make sure that these bugs get addressed. For every non-PATCH release, we nominate a small number of bugs that must be -addressed before a release can go out by adding them to the milestone. For example, here's a list of blocking bugs [for the 3.2 milestone](https://github.com/storybookjs/storybook/milestone/3). +addressed before a release can go out by adding them to the milestone. For example, here's a list of blocking bugs [for the 6.5 milestone](https://github.com/storybookjs/storybook/milestone/75). Adding bugs to the milestone helps people looking for good ways to contribute, or to understand what is blocking the release so they can actually do something -about it. Discussion about which bugs are critical happens in the `#maintenance` -channel [in our Slack](https://now-examples-slackin-rrirkqohko.now.sh/) [![Storybook Slack](https://now-examples-slackin-rrirkqohko.now.sh/badge.svg)](https://now-examples-slackin-rrirkqohko.now.sh/) +about it. Discussion about which bugs are critical happens in the [`#maintenance` channel](https://discord.com/channels/486522875931656193/490070912448724992) in our Discord Server If you're experiencing a bug, the best way to make sure that it gets attention is to upvote it by adding a "thumbs-up" reaction in Github. This way important @@ -114,5 +113,5 @@ in a patch release. #### How does my PR get merged? - For PATCH PR's, any maintainer can review, test, approve, and merge it. -- For MINOR/MAJOR PR's, once a maintainer reviews, tests, and approves it, s/he should clear it with the other maintainers before merging it into the release branch. +- For MINOR/MAJOR PR's, once a maintainer reviews, tests, and approves it, they should clear it with the other maintainers before merging it into the release branch. - Once a release date has been set and we cut off merging, we'll create a temporary branch to hold that release so that it doesn't block merging to `next`. diff --git a/SECURITY.md b/SECURITY.md index e442fb9e923c..04845f5bf4a8 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,17 +2,12 @@ ## Supported Versions -| Version | Supported | -| ------- | ------------------ | -| 6.x | :white_check_mark: | -| 5.3.x | :white_check_mark: | +| Version | Supported | +| --------------- | ------------------ | +| 6.3, 6.4, 6.5 | :white_check_mark: | ## Reporting a Vulnerability -We rely on NPM's security advisory process for reporting vulnerabilities. - -You can submit a vulnerability in a Storybook package at: https://www.npmjs.com/advisories/report - -You can also reach out to the maintainers directly on Twitter: https://twitter.com/storybookjs +To report a vulnerability, you can reach out to the maintainers directly on Twitter: https://twitter.com/storybookjs When we fix a security issue, we will post a security advisory on Github/NPM, describe the change in the [release notes](https://github.com/storybookjs/storybook/releases), and also announce notify the community on [our Discord](https://discord.gg/storybook). diff --git a/__mocks__/fs-extra.js b/__mocks__/fs-extra.js index 349ffb2b4c7f..ebe0d6c11d36 100644 --- a/__mocks__/fs-extra.js +++ b/__mocks__/fs-extra.js @@ -15,6 +15,7 @@ function __setMockFiles(newMockFiles) { const readFile = async (filePath) => mockFiles[filePath]; const readFileSync = (filePath = '') => mockFiles[filePath]; const existsSync = (filePath) => !!mockFiles[filePath]; +const readJsonSync = (filePath = '') => JSON.parse(mockFiles[filePath]); const lstatSync = (filePath) => ({ isFile: () => !!mockFiles[filePath], }); @@ -23,6 +24,7 @@ const lstatSync = (filePath) => ({ fs.__setMockFiles = __setMockFiles; fs.readFile = readFile; fs.readFileSync = readFileSync; +fs.readJsonSync = readJsonSync; fs.existsSync = existsSync; fs.lstatSync = lstatSync; diff --git a/addons/a11y/README.md b/addons/a11y/README.md index 15bbaa107841..14f3b309de6c 100755 --- a/addons/a11y/README.md +++ b/addons/a11y/README.md @@ -2,7 +2,7 @@ This Storybook addon can be helpful to make your UI components more accessible. -[Framework Support](https://github.com/storybookjs/storybook/blob/main/ADDONS_SUPPORT.md) +[Framework Support](https://storybook.js.org/docs/react/api/frameworks-feature-support) ![Screenshot](https://raw.githubusercontent.com/storybookjs/storybook/next/addons/a11y/docs/screenshot.png) @@ -22,6 +22,8 @@ module.exports = { }; ``` +And here's a sample story file to test the addon: + ```js import React from 'react'; @@ -45,7 +47,7 @@ When Axe reports accessibility violations in stories, there are multiple ways to At the Story level, override rules using `parameters.a11y.config.rules`. ```js -export const InputWithoutAutofill = () => ; +export const InputWithoutAutofill = () => ; InputWithoutAutofill.parameters = { a11y: { diff --git a/addons/a11y/manager.js b/addons/a11y/manager.js new file mode 100644 index 000000000000..4e287d25b151 --- /dev/null +++ b/addons/a11y/manager.js @@ -0,0 +1 @@ +import './dist/esm/manager'; diff --git a/addons/a11y/package.json b/addons/a11y/package.json index fa620335e210..0bf05819540a 100644 --- a/addons/a11y/package.json +++ b/addons/a11y/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-a11y", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Test component compliance with web accessibility standards", "keywords": [ "a11y", @@ -45,18 +45,18 @@ "prepare": "node ../../scripts/prepare.js" }, "dependencies": { - "@storybook/addons": "6.4.0-beta.10", - "@storybook/api": "6.4.0-beta.10", - "@storybook/channels": "6.4.0-beta.10", - "@storybook/client-logger": "6.4.0-beta.10", - "@storybook/components": "6.4.0-beta.10", - "@storybook/core-events": "6.4.0-beta.10", - "@storybook/csf": "0.0.2--canary.6aca495.0", - "@storybook/theming": "6.4.0-beta.10", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/api": "6.5.0-rc.1", + "@storybook/channels": "6.5.0-rc.1", + "@storybook/client-logger": "6.5.0-rc.1", + "@storybook/components": "6.5.0-rc.1", + "@storybook/core-events": "6.5.0-rc.1", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.0-rc.1", "axe-core": "^4.2.0", "core-js": "^3.8.2", "global": "^4.4.0", - "lodash": "^4.17.20", + "lodash": "^4.17.21", "react-sizeme": "^3.0.1", "regenerator-runtime": "^0.13.7", "ts-dedent": "^2.0.0", @@ -67,8 +67,8 @@ "@types/webpack-env": "^1.16.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "react": { @@ -81,7 +81,7 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", "sbmodern": "dist/modern/index.js", "storybook": { "displayName": "Accessibility", diff --git a/addons/a11y/preset.js b/addons/a11y/preset.js deleted file mode 100644 index fc6884de55c6..000000000000 --- a/addons/a11y/preset.js +++ /dev/null @@ -1,13 +0,0 @@ -function managerEntries(entry = []) { - return [...entry, require.resolve('./dist/esm/register')]; -} - -function config(entry = []) { - return [ - ...entry, - require.resolve('./dist/esm/a11yRunner'), - require.resolve('./dist/esm/a11yHighlight'), - ]; -} - -module.exports = { managerEntries, config }; diff --git a/addons/a11y/preview.js b/addons/a11y/preview.js new file mode 100644 index 000000000000..e726cab5a1b6 --- /dev/null +++ b/addons/a11y/preview.js @@ -0,0 +1 @@ +export * from './dist/esm/preview'; diff --git a/addons/a11y/register.js b/addons/a11y/register.js index f209c0eb3703..2d916bea61a0 100755 --- a/addons/a11y/register.js +++ b/addons/a11y/register.js @@ -1 +1,6 @@ -require('./dist/esm/register'); +import { once } from '@storybook/client-logger'; +import './manager'; + +once.warn( + 'register.js is deprecated see https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#deprecated-registerjs' +); diff --git a/addons/a11y/src/a11yRunner.ts b/addons/a11y/src/a11yRunner.ts index 8485ab26c73b..1f4fd7ddeab6 100644 --- a/addons/a11y/src/a11yRunner.ts +++ b/addons/a11y/src/a11yRunner.ts @@ -1,5 +1,4 @@ import global from 'global'; -import axe from 'axe-core'; import { addons } from '@storybook/addons'; import { EVENTS } from './constants'; import { A11yParameters } from './params'; @@ -16,38 +15,35 @@ let active = false; // Holds latest story we requested a run let activeStoryId: string | undefined; -const getElement = () => { - const storyRoot = document.getElementById('story-root'); - return storyRoot ? storyRoot.childNodes : document.getElementById('root'); -}; - /** * Handle A11yContext events. * Because the event are sent without manual check, we split calls */ -const handleRequest = (storyId: string) => { - const { manual } = getParams(storyId); +const handleRequest = async (storyId: string) => { + const { manual } = await getParams(storyId); if (!manual) { - run(storyId); + await run(storyId); } }; const run = async (storyId: string) => { activeStoryId = storyId; try { - const input = getParams(storyId); + const input = await getParams(storyId); if (!active) { active = true; channel.emit(EVENTS.RUNNING); + const axe = (await import('axe-core')).default; - const { element = getElement(), config, options = {} } = input; + const { element = '#root', config, options = {} } = input; + const htmlElement = document.querySelector(element); axe.reset(); if (config) { axe.configure(config); } - const result = await axe.run(element, options); + const result = await axe.run(htmlElement, options); // It's possible that we requested a new run on a different story. // Unfortunately, axe doesn't support a cancel method to abort current run. // We check if the story we run against is still the current one, @@ -67,8 +63,9 @@ const run = async (storyId: string) => { }; /** Returns story parameters or default ones. */ -const getParams = (storyId: string): A11yParameters => { - const { parameters } = globalWindow.__STORYBOOK_STORY_STORE__.fromId(storyId) || {}; +const getParams = async (storyId: string): Promise => { + const { parameters } = + (await globalWindow.__STORYBOOK_STORY_STORE__.loadStory({ storyId })) || {}; return ( parameters.a11y || { config: {}, diff --git a/addons/a11y/src/addDecorator.ts b/addons/a11y/src/addDecorator.ts deleted file mode 100644 index 95dc140b157a..000000000000 --- a/addons/a11y/src/addDecorator.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { withA11y } from '.'; - -export const decorators = [withA11y]; diff --git a/addons/a11y/src/components/A11YPanel.test.tsx b/addons/a11y/src/components/A11YPanel.test.tsx index b7e77b1e51a3..7c366377b12d 100644 --- a/addons/a11y/src/components/A11YPanel.test.tsx +++ b/addons/a11y/src/components/A11YPanel.test.tsx @@ -63,6 +63,7 @@ describe('A11YPanel', () => { mockedApi.useStorybookState.mockReset(); mockedApi.useAddonState.mockReset(); + mockedApi.useAddonState.mockImplementation((_, defaultState) => React.useState(defaultState)); mockedApi.useChannel.mockReturnValue(jest.fn()); mockedApi.useParameter.mockReturnValue({ manual: false }); const state: Partial = { storyId: 'jest' }; @@ -129,11 +130,14 @@ describe('A11YPanel', () => { const { getByText } = render(); const useChannelArgs = mockedApi.useChannel.mock.calls[0][0]; act(() => useChannelArgs[EVENTS.RESULT](axeResult)); - await waitFor(() => { - expect(getByText(/Tests completed/)).toBeTruthy(); - expect(getByText(/Violations/)).toBeTruthy(); - expect(getByText(/Passes/)).toBeTruthy(); - expect(getByText(/Incomplete/)).toBeTruthy(); - }); + await waitFor( + () => { + expect(getByText(/Tests completed/)).toBeTruthy(); + expect(getByText(/Violations/)).toBeTruthy(); + expect(getByText(/Passes/)).toBeTruthy(); + expect(getByText(/Incomplete/)).toBeTruthy(); + }, + { timeout: 2000 } + ); }); }); diff --git a/addons/a11y/src/components/A11YPanel.tsx b/addons/a11y/src/components/A11YPanel.tsx index a00d6178440a..41173cb2afa9 100644 --- a/addons/a11y/src/components/A11YPanel.tsx +++ b/addons/a11y/src/components/A11YPanel.tsx @@ -94,9 +94,10 @@ export const A11YPanel: React.FC = () => { emit(EVENTS.MANUAL, storyId); }, [storyId]); - const manualActionItems = useMemo(() => [{ title: 'Run test', onClick: handleManual }], [ - handleManual, - ]); + const manualActionItems = useMemo( + () => [{ title: 'Run test', onClick: handleManual }], + [handleManual] + ); const readyActionItems = useMemo( () => [ { diff --git a/addons/a11y/src/components/A11yContext.test.tsx b/addons/a11y/src/components/A11yContext.test.tsx index 5d4e7003f149..a70ced0368a6 100644 --- a/addons/a11y/src/components/A11yContext.test.tsx +++ b/addons/a11y/src/components/A11yContext.test.tsx @@ -53,11 +53,13 @@ describe('A11YPanel', () => { beforeEach(() => { mockedApi.useChannel.mockReset(); mockedApi.useStorybookState.mockReset(); + mockedApi.useAddonState.mockReset(); + mockedApi.useAddonState.mockImplementation((_, defaultState) => React.useState(defaultState)); mockedApi.useChannel.mockReturnValue(jest.fn()); - const state: Partial = { storyId }; + const storyState: Partial = { storyId }; // Lazy to mock entire state - mockedApi.useStorybookState.mockReturnValue(state as any); + mockedApi.useStorybookState.mockReturnValue(storyState as any); }); it('should render children', () => { diff --git a/addons/a11y/src/components/A11yContext.tsx b/addons/a11y/src/components/A11yContext.tsx index 5061f5623d47..bd3c378f2659 100644 --- a/addons/a11y/src/components/A11yContext.tsx +++ b/addons/a11y/src/components/A11yContext.tsx @@ -1,11 +1,11 @@ import * as React from 'react'; import { themes, convert } from '@storybook/theming'; import { Result } from 'axe-core'; -import { useChannel, useStorybookState } from '@storybook/api'; +import { useChannel, useStorybookState, useAddonState } from '@storybook/api'; import { STORY_CHANGED, STORY_RENDERED } from '@storybook/core-events'; -import { EVENTS } from '../constants'; +import { ADDON_ID, EVENTS } from '../constants'; -interface Results { +export interface Results { passes: Result[]; violations: Result[]; incomplete: Result[]; @@ -52,7 +52,7 @@ const defaultResult = { }; export const A11yContextProvider: React.FC = ({ active, ...props }) => { - const [results, setResults] = React.useState(defaultResult); + const [results, setResults] = useAddonState(ADDON_ID, defaultResult); const [tab, setTab] = React.useState(0); const [highlighted, setHighlighted] = React.useState([]); const { storyId } = useStorybookState(); diff --git a/addons/a11y/src/components/Report/Rules.tsx b/addons/a11y/src/components/Report/Rules.tsx index 5523f07dc830..1243027a29aa 100644 --- a/addons/a11y/src/components/Report/Rules.tsx +++ b/addons/a11y/src/components/Report/Rules.tsx @@ -10,8 +10,8 @@ const List = styled.div({ paddingBottom: 4, paddingRight: 4, paddingTop: 4, - fontWeight: '400', -} as any); + fontWeight: 400, +}); const Item = styled.div<{ elementWidth: number }>(({ elementWidth }) => { const maxWidthBeforeBreak = 407; diff --git a/addons/a11y/src/components/VisionSimulator.test.tsx b/addons/a11y/src/components/VisionSimulator.test.tsx new file mode 100644 index 000000000000..9191e058db6f --- /dev/null +++ b/addons/a11y/src/components/VisionSimulator.test.tsx @@ -0,0 +1,69 @@ +import React from 'react'; +import { render, fireEvent, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { ThemeProvider, themes, convert } from '@storybook/theming'; +import { VisionSimulator, baseList } from './VisionSimulator'; + +const getOptionByNameAndPercentage = (option: string, percentage: number) => + screen.getByText( + (content, element) => + content !== '' && + element.textContent === option && + (percentage === undefined || element.nextSibling.textContent === `${percentage}% of users`) + ); + +function ThemedVisionSimulator() { + return ( + + + + ); +} + +describe('Vision Simulator', () => { + it('should render tool button', async () => { + // when + render(); + + // then + // waitFor because WithTooltip is a lazy component + await waitFor(() => expect(screen.getByTitle('Vision simulator')).toBeInTheDocument()); + }); + + it.skip('should display tooltip on click', async () => { + // given + render(); + await waitFor(() => expect(screen.getByTitle('Vision simulator')).toBeInTheDocument()); + + // when + userEvent.click(screen.getByRole('button', { name: 'Vision simulator' })); + + // then + await waitFor(() => expect(screen.getByText('blurred vision')).toBeInTheDocument()); + baseList.forEach(({ name, percentage }) => + expect(getOptionByNameAndPercentage(name, percentage)).toBeInTheDocument() + ); + }); + + it.skip('should set filter', async () => { + // given + render(); + await waitFor(() => expect(screen.getByTitle('Vision simulator')).toBeInTheDocument()); + userEvent.click(screen.getByRole('button', { name: 'Vision simulator' })); + await waitFor(() => expect(screen.getByText('blurred vision')).toBeInTheDocument()); + + // when + fireEvent.click(screen.getByText('blurred vision')); + + // then + // eslint-disable-next-line no-undef + const rule = Object.values(document.styleSheets) + .filter(({ cssRules }) => cssRules) + .map(({ cssRules }) => Object.values(cssRules)) + .flat() + .find((cssRule: CSSRule) => cssRule.selectorText === '#storybook-preview-iframe'); + + expect(rule).toBeDefined(); + expect(rule.style.filter).toBe('blur(2px)'); + }); +}); diff --git a/addons/a11y/src/components/VisionSimulator.tsx b/addons/a11y/src/components/VisionSimulator.tsx index f4fb24cafc18..050c9392ecaa 100644 --- a/addons/a11y/src/components/VisionSimulator.tsx +++ b/addons/a11y/src/components/VisionSimulator.tsx @@ -1,4 +1,4 @@ -import React, { FunctionComponent, ReactNode, useState } from 'react'; +import React, { ReactNode, useState } from 'react'; import { Global, styled } from '@storybook/theming'; import { Icons, IconButton, WithTooltip, TooltipLinkList } from '@storybook/components'; @@ -6,32 +6,37 @@ import { Filters } from './ColorFilters'; const iframeId = 'storybook-preview-iframe'; -const baseList = [ - 'blurred vision', - 'deuteranomaly', - 'deuteranopia', - 'protanomaly', - 'protanopia', - 'tritanomaly', - 'tritanopia', - 'achromatomaly', - 'achromatopsia', - 'grayscale', -] as const; +interface Option { + name: string; + percentage?: number; +} + +export const baseList = [ + { name: 'blurred vision', percentage: 22.9 }, + { name: 'deuteranomaly', percentage: 2.7 }, + { name: 'deuteranopia', percentage: 0.56 }, + { name: 'protanomaly', percentage: 0.66 }, + { name: 'protanopia', percentage: 0.59 }, + { name: 'tritanomaly', percentage: 0.01 }, + { name: 'tritanopia', percentage: 0.016 }, + { name: 'achromatomaly', percentage: 0.00001 }, + { name: 'achromatopsia', percentage: 0.0001 }, + { name: 'grayscale' }, +] as Option[]; -type Filter = typeof baseList[number] | null; +type Filter = Option | null; -const getFilter = (filter: Filter) => { - if (!filter) { +const getFilter = (filterName: string) => { + if (!filterName) { return 'none'; } - if (filter === 'blurred vision') { + if (filterName === 'blurred vision') { return 'blur(2px)'; } - if (filter === 'grayscale') { + if (filterName === 'grayscale') { return 'grayscale(100%)'; } - return `url('#${filter}')`; + return `url('#${filterName}')`; }; const Hidden = styled.div(() => ({ @@ -42,7 +47,7 @@ const Hidden = styled.div(() => ({ }, })); -const ColorIcon = styled.span<{ filter: Filter }>( +const ColorIcon = styled.span<{ filter: string }>( { background: 'linear-gradient(to right, #F44336, #FF9800, #FFEB3B, #8BC34A, #2196F3, #9C27B0)', borderRadius: '1rem', @@ -66,6 +71,20 @@ export interface Link { onClick: () => void; } +const Column = styled.span({ + display: 'flex', + flexDirection: 'column', +}); + +const Title = styled.span({ + textTransform: 'capitalize', +}); + +const Description = styled.span(({ theme }) => ({ + fontSize: 11, + color: theme.textMutedColor, +})); + const getColorList = (active: Filter, set: (i: Filter) => void): Link[] => [ ...(active !== null ? [ @@ -80,27 +99,34 @@ const getColorList = (active: Filter, set: (i: Filter) => void): Link[] => [ }, ] : []), - ...baseList.map((i) => ({ - id: i, - title: i.charAt(0).toUpperCase() + i.slice(1), - onClick: () => { - set(i); - }, - right: , - active: active === i, - })), + ...baseList.map((i) => { + const description = i.percentage !== undefined ? `${i.percentage}% of users` : undefined; + return { + id: i.name, + title: ( + + {i.name} + {description && {description}} + + ), + onClick: () => { + set(i); + }, + right: , + active: active === i, + }; + }), ]; -export const VisionSimulator: FunctionComponent = () => { +export const VisionSimulator = () => { const [filter, setFilter] = useState(null); - return ( <> {filter && ( diff --git a/addons/a11y/src/index.ts b/addons/a11y/src/index.ts index c93847273ffc..76e1182f2b4e 100644 --- a/addons/a11y/src/index.ts +++ b/addons/a11y/src/index.ts @@ -1,4 +1,4 @@ -import { AnyFramework, DecoratorFunction } from '@storybook/csf'; +import type { AnyFramework, DecoratorFunction } from '@storybook/csf'; import deprecate from 'util-deprecate'; import dedent from 'ts-dedent'; diff --git a/addons/a11y/src/manager.test.tsx b/addons/a11y/src/manager.test.tsx new file mode 100644 index 000000000000..92ef7866313d --- /dev/null +++ b/addons/a11y/src/manager.test.tsx @@ -0,0 +1,55 @@ +import { addons } from '@storybook/addons'; +import * as api from '@storybook/api'; +import { PANEL_ID } from './constants'; +import './manager'; + +jest.mock('@storybook/api'); +jest.mock('@storybook/addons'); +const mockedApi = api as unknown as jest.Mocked; +mockedApi.getAddonState = jest.fn(); +const mockedAddons = addons as jest.Mocked; +const registrationImpl = mockedAddons.register.mock.calls[0][1]; + +describe('A11yManager', () => { + it('should register the panels', () => { + // when + registrationImpl(mockedApi); + + // then + expect(mockedAddons.add.mock.calls).toHaveLength(2); + expect(mockedAddons.add).toHaveBeenCalledWith(PANEL_ID, expect.anything()); + + const panel = mockedAddons.add.mock.calls + .map(([_, def]) => def) + .find(({ type }) => type === 'panel'); + const tool = mockedAddons.add.mock.calls + .map(([_, def]) => def) + .find(({ type }) => type === 'tool'); + expect(panel).toBeDefined(); + expect(tool).toBeDefined(); + }); + + it('should compute title with no issues', () => { + // given + mockedApi.getAddonState.mockImplementation(() => undefined); + registrationImpl(api as unknown as api.API); + const title = mockedAddons.add.mock.calls + .map(([_, def]) => def) + .find(({ type }) => type === 'panel').title as Function; + + // when / then + expect(title()).toBe('Accessibility'); + }); + + it('should compute title with issues', () => { + // given + mockedApi.getAddonState.mockImplementation(() => ({ violations: [{}], incomplete: [{}, {}] })); + registrationImpl(mockedApi); + const title = mockedAddons.add.mock.calls + .map(([_, def]) => def) + .find(({ type }) => type === 'panel').title as Function; + + // when / then + expect(title()).toBe('Accessibility (3)'); + }); +}); diff --git a/addons/a11y/src/manager.tsx b/addons/a11y/src/manager.tsx new file mode 100644 index 000000000000..ce24d1c9cafd --- /dev/null +++ b/addons/a11y/src/manager.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import { addons, types } from '@storybook/addons'; +import { ADDON_ID, PANEL_ID, PARAM_KEY } from './constants'; +import { VisionSimulator } from './components/VisionSimulator'; +import { A11YPanel } from './components/A11YPanel'; +import { A11yContextProvider, Results } from './components/A11yContext'; + +addons.register(ADDON_ID, (api) => { + addons.add(PANEL_ID, { + title: '', + type: types.TOOL, + match: ({ viewMode }) => viewMode === 'story', + render: () => , + }); + + addons.add(PANEL_ID, { + title() { + const addonState: Results = api?.getAddonState(ADDON_ID); + const violationsNb = addonState?.violations?.length || 0; + const incompleteNb = addonState?.incomplete?.length || 0; + const totalNb = violationsNb + incompleteNb; + return totalNb !== 0 ? `Accessibility (${totalNb})` : 'Accessibility'; + }, + type: types.PANEL, + render: ({ active = true, key }) => ( + + + + ), + paramKey: PARAM_KEY, + }); +}); diff --git a/addons/a11y/src/preview.tsx b/addons/a11y/src/preview.tsx new file mode 100644 index 000000000000..146feb51f50f --- /dev/null +++ b/addons/a11y/src/preview.tsx @@ -0,0 +1,2 @@ +import './a11yRunner'; +import './a11yHighlight'; diff --git a/addons/a11y/src/register.tsx b/addons/a11y/src/register.tsx deleted file mode 100644 index 69cb77a7fbf4..000000000000 --- a/addons/a11y/src/register.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; -import { addons, types } from '@storybook/addons'; -import { ADDON_ID, PANEL_ID, PARAM_KEY } from './constants'; -import { VisionSimulator } from './components/VisionSimulator'; -import { A11YPanel } from './components/A11YPanel'; -import { A11yContextProvider } from './components/A11yContext'; - -addons.register(ADDON_ID, () => { - addons.add(PANEL_ID, { - title: '', - type: types.TOOL, - match: ({ viewMode }) => viewMode === 'story', - render: () => , - }); - - addons.add(PANEL_ID, { - title: 'Accessibility', - type: types.PANEL, - render: ({ active = true, key }) => ( - - - - ), - paramKey: PARAM_KEY, - }); -}); diff --git a/addons/a11y/tsconfig.json b/addons/a11y/tsconfig.json index 8319c147bd1f..a7db239dea4e 100644 --- a/addons/a11y/tsconfig.json +++ b/addons/a11y/tsconfig.json @@ -2,7 +2,10 @@ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "./src", - "types": ["webpack-env", "jest"], + "types": [ + "webpack-env", + "jest" + ], "forceConsistentCasingInFileNames": true, "strict": true, "noUnusedLocals": true, @@ -10,7 +13,9 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true }, - "include": ["src/**/*"], + "include": [ + "src/**/*" + ], "exclude": [ "src/**/*.test.*", "src/**/tests/**/*", @@ -19,4 +24,4 @@ "src/**/*.mockdata.*", "src/**/__testfixtures__/**" ] -} +} \ No newline at end of file diff --git a/addons/actions/ADVANCED.md b/addons/actions/ADVANCED.md index 2ef8719e282d..7cca56342dee 100644 --- a/addons/actions/ADVANCED.md +++ b/addons/actions/ADVANCED.md @@ -60,7 +60,7 @@ To apply the configuration globally use the `configureActions` function in your import { configureActions } from '@storybook/addon-actions'; configureActions({ - depth: 100, + maxDepth: 100, // Limit the number of items logged into the actions panel limit: 20, }); @@ -70,7 +70,7 @@ To apply the configuration per action use: ```js action('my-action', { - depth: 5, + maxDepth: 5, }); ``` @@ -78,6 +78,6 @@ action('my-action', { | Name | Type | Description | Default | | -------------------- | ------- | ----------------------------------------------------------------------------------- | ------- | -| `depth` | Number | Configures the transferred depth of any logged objects. | `10` | +| `maxDepth` | Number | Configures the transferred depth of any logged objects. | `10` | | `clearOnStoryChange` | Boolean | Flag whether to clear the action logger when switching away from the current story. | `true` | | `limit` | Number | Limits the number of items logged in the action logger | `50` | diff --git a/addons/actions/manager.js b/addons/actions/manager.js new file mode 100644 index 000000000000..4e287d25b151 --- /dev/null +++ b/addons/actions/manager.js @@ -0,0 +1 @@ +import './dist/esm/manager'; diff --git a/addons/actions/package.json b/addons/actions/package.json index 81e27636a0f9..a3e8624c7287 100644 --- a/addons/actions/package.json +++ b/addons/actions/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-actions", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Get UI feedback when an action is performed on an interactive element", "keywords": [ "storybook", @@ -41,20 +41,22 @@ "prepare": "node ../../scripts/prepare.js" }, "dependencies": { - "@storybook/addons": "6.4.0-beta.10", - "@storybook/api": "6.4.0-beta.10", - "@storybook/components": "6.4.0-beta.10", - "@storybook/core-events": "6.4.0-beta.10", - "@storybook/csf": "0.0.2--canary.6aca495.0", - "@storybook/theming": "6.4.0-beta.10", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/api": "6.5.0-rc.1", + "@storybook/client-logger": "6.5.0-rc.1", + "@storybook/components": "6.5.0-rc.1", + "@storybook/core-events": "6.5.0-rc.1", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.0-rc.1", "core-js": "^3.8.2", "fast-deep-equal": "^3.1.3", "global": "^4.4.0", - "lodash": "^4.17.20", - "polished": "^4.0.5", + "lodash": "^4.17.21", + "polished": "^4.2.2", "prop-types": "^15.7.2", "react-inspector": "^5.1.0", "regenerator-runtime": "^0.13.7", + "telejson": "^6.0.8", "ts-dedent": "^2.0.0", "util-deprecate": "^1.0.2", "uuid-browser": "^3.1.0" @@ -64,8 +66,8 @@ "@types/webpack-env": "^1.16.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "react": { @@ -78,7 +80,7 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", "sbmodern": "dist/modern/index.js", "storybook": { "displayName": "Actions", diff --git a/addons/actions/preset.js b/addons/actions/preset.js deleted file mode 100644 index ba70abe968e6..000000000000 --- a/addons/actions/preset.js +++ /dev/null @@ -1,16 +0,0 @@ -function managerEntries(entry, options) { - return [...entry, require.resolve('./dist/esm/register')]; -} - -function config(entry = [], { addDecorator = true } = {}) { - const actionConfig = []; - if (addDecorator) { - actionConfig.push(require.resolve('./dist/esm/preset/addDecorator')); - } - return [...entry, ...actionConfig, require.resolve('./dist/esm/preset/addArgs')]; -} - -module.exports = { - managerEntries, - config, -}; diff --git a/addons/actions/preview.js b/addons/actions/preview.js new file mode 100644 index 000000000000..7817e1d278d2 --- /dev/null +++ b/addons/actions/preview.js @@ -0,0 +1 @@ +export * from './dist/esm/preset/preview'; diff --git a/addons/actions/register.js b/addons/actions/register.js index f209c0eb3703..2d916bea61a0 100644 --- a/addons/actions/register.js +++ b/addons/actions/register.js @@ -1 +1,6 @@ -require('./dist/esm/register'); +import { once } from '@storybook/client-logger'; +import './manager'; + +once.warn( + 'register.js is deprecated see https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#deprecated-registerjs' +); diff --git a/addons/actions/src/components/ActionLogger/index.tsx b/addons/actions/src/components/ActionLogger/index.tsx index e2cd0c6fc44a..4efee9b0f0cb 100644 --- a/addons/actions/src/components/ActionLogger/index.tsx +++ b/addons/actions/src/components/ActionLogger/index.tsx @@ -1,5 +1,6 @@ import React, { Fragment } from 'react'; -import { styled, withTheme, Theme } from '@storybook/theming'; +import { styled, withTheme } from '@storybook/theming'; +import type { Theme } from '@storybook/theming'; import Inspector from 'react-inspector'; import { ActionBar, ScrollArea } from '@storybook/components'; diff --git a/addons/actions/src/register.tsx b/addons/actions/src/manager.tsx similarity index 100% rename from addons/actions/src/register.tsx rename to addons/actions/src/manager.tsx diff --git a/addons/actions/src/models/ActionOptions.ts b/addons/actions/src/models/ActionOptions.ts index c4a838b17c25..6678e5138929 100644 --- a/addons/actions/src/models/ActionOptions.ts +++ b/addons/actions/src/models/ActionOptions.ts @@ -1,6 +1,9 @@ -export interface ActionOptions { - depth?: number; - clearOnStoryChange?: boolean; - limit?: number; - allowFunction?: boolean; +import type { Options as TelejsonOptions } from 'telejson'; + +interface Options { + depth: number; // backards compatibility, remove in 7.0 + clearOnStoryChange: boolean; + limit: number; } + +export type ActionOptions = Partial & Partial; diff --git a/addons/actions/src/preset/addArgsHelpers.test.ts b/addons/actions/src/preset/addArgsHelpers.test.ts index dd388ef3d665..487dab330305 100644 --- a/addons/actions/src/preset/addArgsHelpers.test.ts +++ b/addons/actions/src/preset/addArgsHelpers.test.ts @@ -1,4 +1,4 @@ -import { StoryContext } from '@storybook/addons'; +import type { StoryContext } from '@storybook/addons'; import { inferActionsFromArgTypesRegex, addActionsFromArgTypes } from './addArgsHelpers'; describe('actions parameter enhancers', () => { @@ -7,11 +7,11 @@ describe('actions parameter enhancers', () => { const argTypes = { onClick: {}, onFocus: {}, somethingElse: {} }; it('should add actions that match a pattern', () => { - const args = inferActionsFromArgTypesRegex(({ + const args = inferActionsFromArgTypesRegex({ initialArgs: {}, argTypes, parameters, - } as unknown) as StoryContext); + } as unknown as StoryContext); expect(args).toEqual({ onClick: expect.any(Function), onFocus: expect.any(Function), @@ -19,41 +19,50 @@ describe('actions parameter enhancers', () => { }); it('should NOT override pre-existing args', () => { - const args = inferActionsFromArgTypesRegex(({ + const args = inferActionsFromArgTypesRegex({ initialArgs: { onClick: 'pre-existing value' }, argTypes, parameters, - } as unknown) as StoryContext); + } as unknown as StoryContext); expect(args).toEqual({ onFocus: expect.any(Function) }); }); it('should NOT override pre-existing args, if null', () => { - const args = inferActionsFromArgTypesRegex(({ + const args = inferActionsFromArgTypesRegex({ initialArgs: { onClick: null }, argTypes, parameters, - } as unknown) as StoryContext); + } as unknown as StoryContext); expect(args).toEqual({ onFocus: expect.any(Function) }); }); it('should override pre-existing args, if undefined', () => { - const args = inferActionsFromArgTypesRegex(({ - initialArgs: { onClick: undefined }, + const args = inferActionsFromArgTypesRegex({ + initialArgs: {}, argTypes, parameters, - } as unknown) as StoryContext); + } as unknown as StoryContext); expect(args).toEqual({ onClick: expect.any(Function), onFocus: expect.any(Function) }); }); + it('should NOT override pre-existing args, if set undefined on purpose', () => { + const args = inferActionsFromArgTypesRegex({ + initialArgs: { onClick: undefined }, + argTypes, + parameters, + } as unknown as StoryContext); + expect(args).toEqual({ onClick: undefined, onFocus: expect.any(Function) }); + }); + it('should do nothing if actions are disabled', () => { - const args = inferActionsFromArgTypesRegex(({ + const args = inferActionsFromArgTypesRegex({ initialArgs: {}, argTypes, parameters: { ...parameters, actions: { ...parameters.actions, disable: true }, }, - } as unknown) as StoryContext); + } as unknown as StoryContext); expect(args).toEqual({}); }); }); @@ -65,11 +74,11 @@ describe('actions parameter enhancers', () => { }; it('should add actions based on action.args', () => { expect( - addActionsFromArgTypes(({ + addActionsFromArgTypes({ initialArgs: {}, argTypes, parameters: {}, - } as unknown) as StoryContext) + } as unknown as StoryContext) ).toEqual({ onClick: expect.any(Function), onBlur: expect.any(Function), @@ -78,41 +87,51 @@ describe('actions parameter enhancers', () => { it('should NOT override pre-existing args', () => { expect( - addActionsFromArgTypes(({ + addActionsFromArgTypes({ argTypes: { onClick: { action: 'clicked!' } }, initialArgs: { onClick: 'pre-existing value' }, parameters: {}, - } as unknown) as StoryContext) + } as unknown as StoryContext) ).toEqual({}); }); it('should NOT override pre-existing args, if null', () => { expect( - addActionsFromArgTypes(({ + addActionsFromArgTypes({ argTypes: { onClick: { action: 'clicked!' } }, initialArgs: { onClick: null }, parameters: {}, - } as unknown) as StoryContext) + } as unknown as StoryContext) ).toEqual({}); }); it('should override pre-existing args, if undefined', () => { expect( - addActionsFromArgTypes(({ + addActionsFromArgTypes({ argTypes: { onClick: { action: 'clicked!' } }, - initialArgs: { onClick: undefined }, + initialArgs: {}, parameters: {}, - } as unknown) as StoryContext) + } as unknown as StoryContext) ).toEqual({ onClick: expect.any(Function) }); }); + it('should NOT override pre-existing args, if set undefined on purpose', () => { + expect( + addActionsFromArgTypes({ + argTypes: { onClick: { action: 'clicked!' } }, + initialArgs: { onClick: undefined }, + parameters: {}, + } as unknown as StoryContext) + ).toEqual({ onClick: undefined }); + }); + it('should do nothing if actions are disabled', () => { expect( - addActionsFromArgTypes(({ + addActionsFromArgTypes({ initialArgs: {}, argTypes, parameters: { actions: { disable: true } }, - } as unknown) as StoryContext) + } as unknown as StoryContext) ).toEqual({}); }); }); diff --git a/addons/actions/src/preset/addArgsHelpers.ts b/addons/actions/src/preset/addArgsHelpers.ts index 0155d8130e53..45b5207d6e6e 100644 --- a/addons/actions/src/preset/addArgsHelpers.ts +++ b/addons/actions/src/preset/addArgsHelpers.ts @@ -1,5 +1,4 @@ -import { Args } from '@storybook/addons'; -import { AnyFramework, ArgsEnhancer } from '@storybook/csf'; +import type { Args, AnyFramework, ArgsEnhancer } from '@storybook/csf'; import { action } from '../index'; // interface ActionsParameter { @@ -7,6 +6,9 @@ import { action } from '../index'; // argTypesRegex?: RegExp; // } +const isInInitialArgs = (name: string, initialArgs: Args) => + typeof initialArgs[name] === 'undefined' && !(name in initialArgs); + /** * Automatically add action args for argTypes whose name * matches a regex, such as `^on.*` for react-style `onClick` etc. @@ -28,7 +30,7 @@ export const inferActionsFromArgTypesRegex: ArgsEnhancer = (contex ); return argTypesMatchingRegex.reduce((acc, [name, argType]) => { - if (typeof initialArgs[name] === 'undefined') { + if (isInInitialArgs(name, initialArgs)) { acc[name] = action(name); } return acc; @@ -51,7 +53,7 @@ export const addActionsFromArgTypes: ArgsEnhancer = (context) => { const argTypesWithAction = Object.entries(argTypes).filter(([name, argType]) => !!argType.action); return argTypesWithAction.reduce((acc, [name, argType]) => { - if (typeof initialArgs[name] === 'undefined') { + if (isInInitialArgs(name, initialArgs)) { acc[name] = action(typeof argType.action === 'string' ? argType.action : name); } return acc; diff --git a/addons/actions/src/preset/preview.tsx b/addons/actions/src/preset/preview.tsx new file mode 100644 index 000000000000..117c34f7196b --- /dev/null +++ b/addons/actions/src/preset/preview.tsx @@ -0,0 +1,2 @@ +export * from './addDecorator'; +export * from './addArgs'; diff --git a/addons/actions/src/preview/action.ts b/addons/actions/src/preview/action.ts index 945c94dc33a9..c8af13de05d1 100644 --- a/addons/actions/src/preview/action.ts +++ b/addons/actions/src/preview/action.ts @@ -4,6 +4,40 @@ import { EVENT_ID } from '../constants'; import { ActionDisplay, ActionOptions, HandlerFunction } from '../models'; import { config } from './configureActions'; +type SyntheticEvent = any; // import('react').SyntheticEvent; +const findProto = (obj: unknown, callback: (proto: any) => boolean): Function | null => { + const proto = Object.getPrototypeOf(obj); + if (!proto || callback(proto)) return proto; + return findProto(proto, callback); +}; +const isReactSyntheticEvent = (e: unknown): e is SyntheticEvent => + Boolean( + typeof e === 'object' && + e && + findProto(e, (proto) => /^Synthetic(?:Base)?Event$/.test(proto.constructor.name)) && + typeof (e as SyntheticEvent).persist === 'function' + ); +const serializeArg = (a: T) => { + if (isReactSyntheticEvent(a)) { + const e: SyntheticEvent = Object.create( + a.constructor.prototype, + Object.getOwnPropertyDescriptors(a) + ); + e.persist(); + const viewDescriptor = Object.getOwnPropertyDescriptor(e, 'view'); + // don't send the entire window object over. + const view: unknown = viewDescriptor?.value; + if (typeof view === 'object' && view?.constructor.name === 'Window') { + Object.defineProperty(e, 'view', { + ...viewDescriptor, + value: Object.create(view.constructor.prototype), + }); + } + return e; + } + return a; +}; + export function action(name: string, options: ActionOptions = {}): HandlerFunction { const actionOptions = { ...config, @@ -14,7 +48,8 @@ export function action(name: string, options: ActionOptions = {}): HandlerFuncti const channel = addons.getChannel(); const id = uuidv4(); const minDepth = 5; // anything less is really just storybook internals - const normalizedArgs = args.length > 1 ? args : args[0]; + const serializedArgs = args.map(serializeArg); + const normalizedArgs = args.length > 1 ? serializedArgs : serializedArgs[0]; const actionDisplayToEmit: ActionDisplay = { id, @@ -22,7 +57,7 @@ export function action(name: string, options: ActionOptions = {}): HandlerFuncti data: { name, args: normalizedArgs }, options: { ...actionOptions, - depth: minDepth + (actionOptions.depth || 3), + maxDepth: minDepth + (actionOptions.depth || 3), allowFunction: actionOptions.allowFunction || false, }, }; diff --git a/addons/actions/tsconfig.json b/addons/actions/tsconfig.json index 78bae36b0b11..0baf78294f75 100644 --- a/addons/actions/tsconfig.json +++ b/addons/actions/tsconfig.json @@ -2,9 +2,14 @@ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "./src", - "types": ["webpack-env", "jest"] + "types": [ + "webpack-env", + "jest" + ] }, - "include": ["src/**/*"], + "include": [ + "src/**/*" + ], "exclude": [ "src/**/*.test.*", "src/**/tests/**/*", @@ -13,4 +18,4 @@ "src/**/*.mockdata.*", "src/**/__testfixtures__/**" ] -} +} \ No newline at end of file diff --git a/addons/backgrounds/manager.js b/addons/backgrounds/manager.js new file mode 100644 index 000000000000..4e287d25b151 --- /dev/null +++ b/addons/backgrounds/manager.js @@ -0,0 +1 @@ +import './dist/esm/manager'; diff --git a/addons/backgrounds/package.json b/addons/backgrounds/package.json index 22c967e86fea..d4c6bb11b66d 100644 --- a/addons/backgrounds/package.json +++ b/addons/backgrounds/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-backgrounds", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Switch backgrounds to view components in different settings", "keywords": [ "addon", @@ -45,13 +45,13 @@ "prepare": "node ../../scripts/prepare.js" }, "dependencies": { - "@storybook/addons": "6.4.0-beta.10", - "@storybook/api": "6.4.0-beta.10", - "@storybook/client-logger": "6.4.0-beta.10", - "@storybook/components": "6.4.0-beta.10", - "@storybook/core-events": "6.4.0-beta.10", - "@storybook/csf": "0.0.2--canary.6aca495.0", - "@storybook/theming": "6.4.0-beta.10", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/api": "6.5.0-rc.1", + "@storybook/client-logger": "6.5.0-rc.1", + "@storybook/components": "6.5.0-rc.1", + "@storybook/core-events": "6.5.0-rc.1", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.0-rc.1", "core-js": "^3.8.2", "global": "^4.4.0", "memoizerific": "^1.11.3", @@ -63,8 +63,8 @@ "@types/webpack-env": "^1.16.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "react": { @@ -77,7 +77,7 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", "sbmodern": "dist/modern/index.js", "storybook": { "displayName": "Backgrounds", diff --git a/addons/backgrounds/preset.js b/addons/backgrounds/preset.js deleted file mode 100644 index a80aaefb5b30..000000000000 --- a/addons/backgrounds/preset.js +++ /dev/null @@ -1,16 +0,0 @@ -function config(entry = []) { - return [ - ...entry, - require.resolve('./dist/esm/preset/addDecorator'), - require.resolve('./dist/esm/preset/addParameter'), - ]; -} - -function managerEntries(entry = [], options) { - return [...entry, require.resolve('./dist/esm/register')]; -} - -module.exports = { - managerEntries, - config, -}; diff --git a/addons/backgrounds/preview.js b/addons/backgrounds/preview.js new file mode 100644 index 000000000000..e726cab5a1b6 --- /dev/null +++ b/addons/backgrounds/preview.js @@ -0,0 +1 @@ +export * from './dist/esm/preview'; diff --git a/addons/backgrounds/register.js b/addons/backgrounds/register.js index f209c0eb3703..2d916bea61a0 100644 --- a/addons/backgrounds/register.js +++ b/addons/backgrounds/register.js @@ -1 +1,6 @@ -require('./dist/esm/register'); +import { once } from '@storybook/client-logger'; +import './manager'; + +once.warn( + 'register.js is deprecated see https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#deprecated-registerjs' +); diff --git a/addons/backgrounds/src/decorators/index.ts b/addons/backgrounds/src/decorators/index.ts deleted file mode 100644 index cf4a28890479..000000000000 --- a/addons/backgrounds/src/decorators/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './withBackground'; -export * from './withGrid'; diff --git a/addons/backgrounds/src/decorators/withBackground.ts b/addons/backgrounds/src/decorators/withBackground.ts index b5d72d4cbcb9..391ecb0e28a2 100644 --- a/addons/backgrounds/src/decorators/withBackground.ts +++ b/addons/backgrounds/src/decorators/withBackground.ts @@ -1,5 +1,5 @@ import { useMemo, useEffect } from '@storybook/addons'; -import { AnyFramework, PartialStoryFn as StoryFunction, StoryContext } from '@storybook/csf'; +import type { AnyFramework, PartialStoryFn as StoryFunction, StoryContext } from '@storybook/csf'; import { PARAM_KEY as BACKGROUNDS_PARAM_KEY } from '../constants'; import { diff --git a/addons/backgrounds/src/decorators/withGrid.ts b/addons/backgrounds/src/decorators/withGrid.ts index 294f9df818a4..35ba05383ffc 100644 --- a/addons/backgrounds/src/decorators/withGrid.ts +++ b/addons/backgrounds/src/decorators/withGrid.ts @@ -1,7 +1,7 @@ import dedent from 'ts-dedent'; import deprecate from 'util-deprecate'; import { useMemo, useEffect } from '@storybook/addons'; -import { AnyFramework, PartialStoryFn as StoryFunction, StoryContext } from '@storybook/csf'; +import type { AnyFramework, PartialStoryFn as StoryFunction, StoryContext } from '@storybook/csf'; import { clearStyles, addGridStyle } from '../helpers'; import { PARAM_KEY as BACKGROUNDS_PARAM_KEY } from '../constants'; diff --git a/addons/backgrounds/src/register.tsx b/addons/backgrounds/src/manager.tsx similarity index 100% rename from addons/backgrounds/src/register.tsx rename to addons/backgrounds/src/manager.tsx diff --git a/addons/backgrounds/src/preset/addDecorator.tsx b/addons/backgrounds/src/preset/addDecorator.tsx deleted file mode 100644 index 93ccff632339..000000000000 --- a/addons/backgrounds/src/preset/addDecorator.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import { withGrid, withBackground } from '../decorators'; - -export const decorators = [withGrid, withBackground]; diff --git a/addons/backgrounds/src/preset/addParameter.tsx b/addons/backgrounds/src/preset/addParameter.tsx deleted file mode 100644 index ceb1d3b41203..000000000000 --- a/addons/backgrounds/src/preset/addParameter.tsx +++ /dev/null @@ -1,13 +0,0 @@ -export const parameters = { - backgrounds: { - grid: { - cellSize: 20, - opacity: 0.5, - cellAmount: 5, - }, - values: [ - { name: 'light', value: '#F8F8F8' }, - { name: 'dark', value: '#333333' }, - ], - }, -}; diff --git a/addons/backgrounds/src/preview.tsx b/addons/backgrounds/src/preview.tsx new file mode 100644 index 000000000000..cc67d00f6318 --- /dev/null +++ b/addons/backgrounds/src/preview.tsx @@ -0,0 +1,17 @@ +import { withBackground } from './decorators/withBackground'; +import { withGrid } from './decorators/withGrid'; + +export const decorators = [withGrid, withBackground]; +export const parameters = { + backgrounds: { + grid: { + cellSize: 20, + opacity: 0.5, + cellAmount: 5, + }, + values: [ + { name: 'light', value: '#F8F8F8' }, + { name: 'dark', value: '#333333' }, + ], + }, +}; diff --git a/addons/backgrounds/tsconfig.json b/addons/backgrounds/tsconfig.json index d1ee4fc75941..36ca4e1d3033 100644 --- a/addons/backgrounds/tsconfig.json +++ b/addons/backgrounds/tsconfig.json @@ -2,7 +2,9 @@ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "./src", - "types": ["webpack-env"] + "types": [ + "webpack-env" + ] }, "include": [ "src/**/*" @@ -15,4 +17,4 @@ "src/**/*.mockdata.*", "src/**/__testfixtures__/**" ] -} +} \ No newline at end of file diff --git a/addons/controls/README.md b/addons/controls/README.md index 81751a70a35b..372d453b6a58 100644 --- a/addons/controls/README.md +++ b/addons/controls/README.md @@ -48,7 +48,7 @@ If you are somehow tied to knobs or prefer the knobs interface, we are happy to ### How do I migrate from addon-knobs? -If you're already using [Storybook Knobs](https://github.com/storybookjs/storybook/tree/main/addons/knobs) you should consider migrating to Controls. +If you're already using [Storybook Knobs](https://github.com/storybookjs/addon-knobs) you should consider migrating to Controls. You're probably using it for something that can be satisfied by one of the cases [described above](#writing-stories). diff --git a/addons/controls/manager.js b/addons/controls/manager.js new file mode 100644 index 000000000000..4e287d25b151 --- /dev/null +++ b/addons/controls/manager.js @@ -0,0 +1 @@ +import './dist/esm/manager'; diff --git a/addons/controls/package.json b/addons/controls/package.json index 6b534f87f9cb..e6446c0a5307 100644 --- a/addons/controls/package.json +++ b/addons/controls/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-controls", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Interact with component inputs dynamically in the Storybook UI", "keywords": [ "addon", @@ -25,8 +25,8 @@ "url": "https://opencollective.com/storybook" }, "license": "MIT", - "main": "dist/cjs/register.js", - "module": "dist/esm/register.js", + "main": "dist/cjs/manager.js", + "module": "dist/esm/manager.js", "types": "dist/ts3.9/index.d.ts", "typesVersions": { "<3.8": { @@ -45,21 +45,22 @@ "prepare": "node ../../scripts/prepare.js" }, "dependencies": { - "@storybook/addons": "6.4.0-beta.10", - "@storybook/api": "6.4.0-beta.10", - "@storybook/client-logger": "6.4.0-beta.10", - "@storybook/components": "6.4.0-beta.10", - "@storybook/csf": "0.0.2--canary.6aca495.0", - "@storybook/node-logger": "6.4.0-beta.10", - "@storybook/store": "6.4.0-beta.10", - "@storybook/theming": "6.4.0-beta.10", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/api": "6.5.0-rc.1", + "@storybook/client-logger": "6.5.0-rc.1", + "@storybook/components": "6.5.0-rc.1", + "@storybook/core-common": "6.5.0-rc.1", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/node-logger": "6.5.0-rc.1", + "@storybook/store": "6.5.0-rc.1", + "@storybook/theming": "6.5.0-rc.1", "core-js": "^3.8.2", - "lodash": "^4.17.20", + "lodash": "^4.17.21", "ts-dedent": "^2.0.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "react": { @@ -72,8 +73,8 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", - "sbmodern": "dist/modern/register.js", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", + "sbmodern": "dist/modern/manager.js", "storybook": { "displayName": "Controls", "icon": "https://user-images.githubusercontent.com/263385/101991669-479cc600-3c7c-11eb-93d9-38b67e8371f2.png", diff --git a/addons/controls/preset.js b/addons/controls/preset.js deleted file mode 100644 index 1fac913bc69b..000000000000 --- a/addons/controls/preset.js +++ /dev/null @@ -1,8 +0,0 @@ -const { ensureDocsBeforeControls } = require('./dist/cjs/preset/ensureDocsBeforeControls'); - -function managerEntries(entry = [], options) { - ensureDocsBeforeControls(options.configDir); - return [...entry, require.resolve('./dist/esm/register')]; -} - -module.exports = { managerEntries }; diff --git a/addons/controls/register.js b/addons/controls/register.js index 681a5d09dcec..2d916bea61a0 100644 --- a/addons/controls/register.js +++ b/addons/controls/register.js @@ -1 +1,6 @@ -import './dist/esm/register'; +import { once } from '@storybook/client-logger'; +import './manager'; + +once.warn( + 'register.js is deprecated see https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#deprecated-registerjs' +); diff --git a/addons/controls/src/ControlsPanel.tsx b/addons/controls/src/ControlsPanel.tsx index 66b052a75186..6d74c4576235 100644 --- a/addons/controls/src/ControlsPanel.tsx +++ b/addons/controls/src/ControlsPanel.tsx @@ -1,5 +1,12 @@ import React, { FC } from 'react'; -import { ArgTypes, useArgs, useArgTypes, useParameter, useStorybookState } from '@storybook/api'; +import { + ArgTypes, + useArgs, + useGlobals, + useArgTypes, + useParameter, + useStorybookState, +} from '@storybook/api'; import { ArgsTable, NoControlsWarning, PresetColor, SortType } from '@storybook/components'; import { PARAM_KEY } from './constants'; @@ -13,6 +20,7 @@ interface ControlsParameters { export const ControlsPanel: FC = () => { const [args, updateArgs, resetArgs] = useArgs(); + const [globals] = useGlobals(); const rows = useArgTypes(); const isArgsStory = useParameter('__isArgsStory', false); const { @@ -41,6 +49,7 @@ export const ControlsPanel: FC = () => { compact: !expanded && hasControls, rows: withPresetColors, args, + globals, updateArgs, resetArgs, inAddonPanel: true, diff --git a/addons/controls/src/register.tsx b/addons/controls/src/manager.tsx similarity index 100% rename from addons/controls/src/register.tsx rename to addons/controls/src/manager.tsx diff --git a/addons/controls/src/preset/checkDocsLoaded.ts b/addons/controls/src/preset/checkDocsLoaded.ts new file mode 100644 index 000000000000..e888487605e9 --- /dev/null +++ b/addons/controls/src/preset/checkDocsLoaded.ts @@ -0,0 +1,19 @@ +import { checkAddonOrder, serverRequire } from '@storybook/core-common'; +import path from 'path'; + +export const checkDocsLoaded = (configDir: string) => { + checkAddonOrder({ + before: { + name: '@storybook/addon-docs', + inEssentials: true, + }, + after: { + name: '@storybook/addon-controls', + inEssentials: true, + }, + configFile: path.isAbsolute(configDir) + ? path.join(configDir, 'main') + : path.join(process.cwd(), configDir, 'main'), + getConfig: (configFile) => serverRequire(configFile), + }); +}; diff --git a/addons/controls/src/preset/ensureDocsBeforeControls.test.ts b/addons/controls/src/preset/ensureDocsBeforeControls.test.ts deleted file mode 100644 index 2bfe0c390aca..000000000000 --- a/addons/controls/src/preset/ensureDocsBeforeControls.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { verifyDocsBeforeControls } from './ensureDocsBeforeControls'; - -describe.each([ - [[]], - [['@storybook/addon-controls']], - [['@storybook/addon-docs']], - [['@storybook/addon-controls', '@storybook/addon-docs']], - [['@storybook/addon-essentials', '@storybook/addon-docs']], - [['@storybook/addon-controls', '@storybook/addon-essentials']], - [['@storybook/addon-essentials', '@storybook/addon-controls', '@storybook/addon-docs']], -])('verifyDocsBeforeControls', (input) => { - it(`invalid ${input}`, () => { - expect(verifyDocsBeforeControls(input)).toBeFalsy(); - }); -}); - -describe.each([ - [['@storybook/addon-docs', '@storybook/addon-controls']], - [['@storybook/addon-docs', 'foo/node_modules/@storybook/addon-controls']], - [[{ name: '@storybook/addon-docs' }, '@storybook/addon-controls']], - [['@storybook/addon-essentials', '@storybook/addon-controls']], - [['@storybook/addon-essentials']], -])('verifyDocsBeforeControls', (input) => { - it(`valid ${input}`, () => { - expect(verifyDocsBeforeControls(input)).toBeTruthy(); - }); -}); diff --git a/addons/controls/src/preset/ensureDocsBeforeControls.ts b/addons/controls/src/preset/ensureDocsBeforeControls.ts deleted file mode 100644 index 4d20d16250ba..000000000000 --- a/addons/controls/src/preset/ensureDocsBeforeControls.ts +++ /dev/null @@ -1,48 +0,0 @@ -import path from 'path'; -import { logger } from '@storybook/node-logger'; -import dedent from 'ts-dedent'; - -type OptionsEntry = { name: string }; -type Entry = string | OptionsEntry; - -const findIndex = (addon: string, addons: Entry[]) => - addons.findIndex((entry) => { - const name = (entry as OptionsEntry).name || (entry as string); - return name && name.includes(addon); - }); - -const indexOfAddonOrEssentials = (addon: string, addons: Entry[]) => { - const index = findIndex(addon, addons); - return index >= 0 ? index : findIndex('@storybook/addon-essentials', addons); -}; - -export const verifyDocsBeforeControls = (addons: Entry[]) => { - const docsIndex = indexOfAddonOrEssentials('@storybook/addon-docs', addons); - const controlsIndex = indexOfAddonOrEssentials('@storybook/addon-controls', addons); - return controlsIndex >= 0 && docsIndex >= 0 && docsIndex <= controlsIndex; -}; - -export const ensureDocsBeforeControls = (configDir: string) => { - const mainFile = path.isAbsolute(configDir) - ? path.join(configDir, 'main') - : path.join(process.cwd(), configDir, 'main'); - - try { - // eslint-disable-next-line global-require,import/no-dynamic-require - const main = require(mainFile); - if (!main?.addons) { - logger.warn(`Unable to find main.js addons: ${mainFile}`); - return; - } - if (!verifyDocsBeforeControls(main.addons)) { - logger.warn(dedent` - Expected '@storybook/addon-docs' to be listed before '@storybook/addon-controls' (or '@storybook/addon-essentials'). Check your main.js? - If addon-docs or addon-essentials is included by another addon/preset you can safely ignore this warning. - - https://github.com/storybookjs/storybook/issues/11442 - `); - } - } catch (err) { - logger.warn(`Unable to find main.js: ${mainFile}`); - } -}; diff --git a/addons/controls/tsconfig.json b/addons/controls/tsconfig.json index dfc6803adda9..64141341cff1 100644 --- a/addons/controls/tsconfig.json +++ b/addons/controls/tsconfig.json @@ -2,9 +2,15 @@ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "./src", - "types": ["webpack-env", "jest", "node"] + "types": [ + "webpack-env", + "jest", + "node" + ] }, - "include": ["src/**/*"], + "include": [ + "src/**/*" + ], "exclude": [ "src/**/*.test.*", "src/**/tests/**/*", @@ -13,4 +19,4 @@ "src/**/*.mockdata.*", "src/**/__testfixtures__/**" ] -} +} \ No newline at end of file diff --git a/addons/docs/README.md b/addons/docs/README.md index e50eb9fd0c52..dd69a55a8b3a 100644 --- a/addons/docs/README.md +++ b/addons/docs/README.md @@ -77,19 +77,10 @@ For more information on `MDX`, see the [`MDX` reference](https://github.com/stor ## Framework support -Storybook Docs supports all view layers that Storybook supports except for React Native (currently). There are some framework-specific features as well, such as props tables and inline story rendering. This chart captures the current state of support: - -| | React | Vue | Angular | Ember | Web Components | Marko | HTML | Svelte | Preact | Riot | Mithril | Marko | -| ----------------- | :---: | :-: | :-----: | :---: | :------------: | :---: | :--: | :----: | :----: | :--: | :-----: | :---: | -| MDX stories | + | + | + | + | + | WIP | + | + | + | + | + | + | -| CSF stories | + | + | + | + | + | WIP | + | + | + | + | + | + | -| StoriesOf stories | + | + | + | + | + | WIP | + | + | + | + | + | + | -| Source | + | + | + | + | + | WIP | + | + | + | + | + | + | -| Notes / Info | + | + | + | + | + | WIP | + | + | + | + | + | + | -| Props table | + | + | + | + | + | WIP | | | | | | | -| Props controls | + | + | + | | | WIP | | | | | | | -| Description | + | + | + | + | + | WIP | | | | | | | -| Inline stories | + | + | + | | + | WIP | + | | | | | | +Storybook Docs supports all view layers that Storybook supports except for React Native (currently). There are some framework-specific features as well, such as props tables and inline story rendering. The following page captures the current state of support: + +[Framework Support](https://storybook.js.org/docs/react/api/frameworks-feature-support) + **Note:** `#` = WIP support diff --git a/addons/docs/angular/README.md b/addons/docs/angular/README.md index 48c2c5f10d7a..c2a0781f8ff2 100644 --- a/addons/docs/angular/README.md +++ b/addons/docs/angular/README.md @@ -210,12 +210,6 @@ And for `MDX` you can modify it as an attribute on the `Story` element: Storybook Docs renders all Angular stories inside IFrames by default. But it is possible to use an inline rendering: -To get this, you'll first need to install Angular elements: - -```sh -yarn add -D @angular/elements @webcomponents/custom-elements -``` - Then update `.storybook/preview.js`: ```js diff --git a/addons/docs/angular/index.d.ts b/addons/docs/angular/index.d.ts index f2a8c4052072..f63f89b4d1f5 100644 --- a/addons/docs/angular/index.d.ts +++ b/addons/docs/angular/index.d.ts @@ -1 +1 @@ -export * from '../dist/ts3.9/frameworks/angular/index.d'; +export declare const setCompodocJson: (compodocJson: any) => void; diff --git a/addons/docs/angular/index.js b/addons/docs/angular/index.js index aab19f758f29..3fd4c7ea527c 100644 --- a/addons/docs/angular/index.js +++ b/addons/docs/angular/index.js @@ -1 +1,7 @@ -module.exports = require('../dist/esm/frameworks/angular/index'); +/* eslint-disable no-underscore-dangle */ +/* global window */ + +export const setCompodocJson = (compodocJson) => { + // @ts-ignore + window.__STORYBOOK_COMPODOC_JSON__ = compodocJson; +}; diff --git a/addons/docs/common-preset.js b/addons/docs/common-preset.js deleted file mode 100644 index 462287ef4225..000000000000 --- a/addons/docs/common-preset.js +++ /dev/null @@ -1,19 +0,0 @@ -function managerEntries(entry = [], options) { - return [...entry, require.resolve('./dist/esm/register')]; -} - -function config(entry = [], options = {}) { - const { framework } = options; - const docsConfig = [require.resolve('./dist/esm/frameworks/common/config')]; - try { - docsConfig.push(require.resolve(`./dist/esm/frameworks/${framework}/config`)); - } catch (err) { - // there is no custom config for the user's framework, do nothing - } - return [...docsConfig, ...entry]; -} - -module.exports = { - managerEntries, - config, -}; diff --git a/addons/docs/docs/faq.md b/addons/docs/docs/faq.md index 8030502baf12..5710640cc092 100644 --- a/addons/docs/docs/faq.md +++ b/addons/docs/docs/faq.md @@ -9,7 +9,7 @@ You've read the [Storybook Docs README](../README.md). You're already familiar w ## Does Docs support framework X? -Docs does not currently support [React Native](https://github.com/storybooks/storybook/tree/next/app/react-native). Otherwise, [it supports all frameworks that Storybook supports](../README.md#framework-support), including React, Vue, Angular, Ember, Svelte, and others. +Docs does not currently support [React Native](https://github.com/storybookjs/react-native). Otherwise, [it supports all frameworks that Storybook supports](../README.md#framework-support), including React, Vue, Angular, Ember, Svelte, and others. ## How does Docs interact with existing addons? diff --git a/addons/docs/docs/multiframework.md b/addons/docs/docs/multiframework.md index e6b8a6f400f8..a70a59d14533 100644 --- a/addons/docs/docs/multiframework.md +++ b/addons/docs/docs/multiframework.md @@ -106,7 +106,7 @@ The input is the story function and the story context (id, parameters, args, etc ## Dynamic source rendering -With the release of Storybook 6.0, we've improved how stories are rendered in the [Source doc block](https://storybook.js.org/docs/react/writing-docs/doc-blocks#source). One of such improvements is the `dynamic` source type, which renders a snippet based on the output the story function. +With the release of Storybook 6.0, we've improved how stories are rendered in the [Source doc block](https://storybook.js.org/docs/react/writing-docs/doc-blocks#source). One of such improvements is the `dynamic` source type, which renders a snippet based on the output the story function. This dynamic rendering is framework-specific, meaning it needs a custom implementation for each framework. @@ -151,7 +151,7 @@ import { jsxDecorator } from './jsxDecorator'; export const decorators = [jsxDecorator]; ``` -This configures the `jsxDecorator` to be run on every story. +This configures the `jsxDecorator` to be run on every story.
To learn more and see how it's implemented in context, check out the code . diff --git a/addons/docs/docs/recipes.md b/addons/docs/docs/recipes.md index 12940168fff3..db5681bdf07f 100644 --- a/addons/docs/docs/recipes.md +++ b/addons/docs/docs/recipes.md @@ -63,7 +63,8 @@ basic.parameters = { ```md import { Meta, Story } from '@storybook/addon-docs'; -import \* as stories from './Button.stories.js'; +import * as stories from './Button.stories.js'; +import { Button } from './Button'; import { SomeComponent } from 'path/to/SomeComponent'; diff --git a/addons/docs/ember/index.js b/addons/docs/ember/index.js index edcab7e3604b..b4ff874067cd 100644 --- a/addons/docs/ember/index.js +++ b/addons/docs/ember/index.js @@ -1 +1,6 @@ -module.exports = require('../dist/esm/frameworks/ember'); +/* eslint-disable no-underscore-dangle */ +/* global window */ + +export const setJSONDoc = (jsondoc) => { + window.__EMBER_GENERATED_DOC_JSON__ = jsondoc; +}; diff --git a/addons/docs/jest-transform-mdx.js b/addons/docs/jest-transform-mdx.js index 3e73194ce258..597d18a69cb2 100644 --- a/addons/docs/jest-transform-mdx.js +++ b/addons/docs/jest-transform-mdx.js @@ -1,11 +1,8 @@ const path = require('path'); -const mdx = require('@mdx-js/mdx'); const { ScriptTransformer } = require('@jest/transform'); const { dedent } = require('ts-dedent'); -const { createCompiler } = require('@storybook/csf-tools/mdx'); - -const compilers = [createCompiler({})]; +const { compileSync } = require('@storybook/mdx1-csf'); module.exports = { process(src, filename, config, { instrument }) { @@ -13,7 +10,7 @@ module.exports = { /* @jsx mdx */ import React from 'react' import { mdx } from '@mdx-js/react' - ${mdx.sync(src, { compilers, filepath: filename })} + ${compileSync(src, { filepath: filename })} `; const extension = path.extname(filename); diff --git a/addons/docs/manager.js b/addons/docs/manager.js new file mode 100644 index 000000000000..4e287d25b151 --- /dev/null +++ b/addons/docs/manager.js @@ -0,0 +1 @@ +import './dist/esm/manager'; diff --git a/addons/docs/mdx-compiler-plugin.js b/addons/docs/mdx-compiler-plugin.js index edbca81d1a97..2651fa35e30a 100644 --- a/addons/docs/mdx-compiler-plugin.js +++ b/addons/docs/mdx-compiler-plugin.js @@ -1 +1 @@ -module.exports = require('@storybook/csf-tools/mdx').createCompiler; +module.exports = require('@storybook/mdx1-csf').createCompiler; diff --git a/addons/docs/package.json b/addons/docs/package.json index 6d118a5e7ad3..e974e4ac8048 100644 --- a/addons/docs/package.json +++ b/addons/docs/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-docs", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Document component usage and properties in Markdown", "keywords": [ "addon", @@ -40,6 +40,7 @@ "common/**/*", "ember/**/*", "html/**/*", + "svelte/**/*", "postinstall/**/*", "react/**/*", "vue/**/*", @@ -54,48 +55,29 @@ "prepare": "node ../../scripts/prepare.js" }, "dependencies": { - "@babel/core": "^7.12.10", - "@babel/generator": "^7.12.11", - "@babel/parser": "^7.12.11", "@babel/plugin-transform-react-jsx": "^7.12.12", "@babel/preset-env": "^7.12.11", "@jest/transform": "^26.6.2", - "@mdx-js/loader": "^1.6.22", - "@mdx-js/mdx": "^1.6.22", "@mdx-js/react": "^1.6.22", - "@storybook/addons": "6.4.0-beta.10", - "@storybook/api": "6.4.0-beta.10", - "@storybook/builder-webpack4": "6.4.0-beta.10", - "@storybook/client-api": "6.4.0-beta.10", - "@storybook/client-logger": "6.4.0-beta.10", - "@storybook/components": "6.4.0-beta.10", - "@storybook/core": "6.4.0-beta.10", - "@storybook/core-events": "6.4.0-beta.10", - "@storybook/csf": "0.0.2--canary.6aca495.0", - "@storybook/csf-tools": "6.4.0-beta.10", - "@storybook/node-logger": "6.4.0-beta.10", - "@storybook/postinstall": "6.4.0-beta.10", - "@storybook/preview-web": "6.4.0-beta.10", - "@storybook/source-loader": "6.4.0-beta.10", - "@storybook/store": "6.4.0-beta.10", - "@storybook/theming": "6.4.0-beta.10", - "acorn": "^7.4.1", - "acorn-jsx": "^5.3.1", - "acorn-walk": "^7.2.0", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/api": "6.5.0-rc.1", + "@storybook/components": "6.5.0-rc.1", + "@storybook/core-common": "6.5.0-rc.1", + "@storybook/core-events": "6.5.0-rc.1", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/docs-tools": "6.5.0-rc.1", + "@storybook/mdx1-csf": "^0.0.1", + "@storybook/node-logger": "6.5.0-rc.1", + "@storybook/postinstall": "6.5.0-rc.1", + "@storybook/preview-web": "6.5.0-rc.1", + "@storybook/source-loader": "6.5.0-rc.1", + "@storybook/store": "6.5.0-rc.1", + "@storybook/theming": "6.5.0-rc.1", + "babel-loader": "^8.0.0", "core-js": "^3.8.2", - "doctrine": "^3.0.0", - "escodegen": "^2.0.0", "fast-deep-equal": "^3.1.3", "global": "^4.4.0", - "html-tags": "^3.1.0", - "js-string-escape": "^1.0.1", - "loader-utils": "^2.0.0", - "lodash": "^4.17.20", - "nanoid": "^3.1.23", - "p-limit": "^3.1.0", - "prettier": "^2.2.1", - "prop-types": "^15.7.2", - "react-element-to-jsx-string": "^14.3.2", + "lodash": "^4.17.21", "regenerator-runtime": "^0.13.7", "remark-external-links": "^8.0.0", "remark-slug": "^6.0.0", @@ -103,82 +85,17 @@ "util-deprecate": "^1.0.2" }, "devDependencies": { - "@angular/core": "^11.2.14", "@babel/core": "^7.12.10", - "@emotion/core": "^10.1.1", - "@emotion/styled": "^10.0.27", - "@storybook/angular": "6.4.0-beta.10", - "@storybook/html": "6.4.0-beta.10", - "@storybook/react": "6.4.0-beta.10", - "@storybook/vue": "6.4.0-beta.10", - "@storybook/web-components": "6.4.0-beta.10", - "@types/cross-spawn": "^6.0.2", - "@types/doctrine": "^0.0.3", - "@types/enzyme": "^3.10.8", - "@types/estree": "^0.0.44", - "@types/jest": "^26.0.16", - "@types/loader-utils": "^2.0.0", - "@types/prop-types": "^15.7.3", - "@types/tmp": "^0.2.0", - "@types/util-deprecate": "^1.0.0", - "babel-loader": "^8.0.0", - "babel-plugin-react-docgen": "^4.2.1", - "cross-spawn": "^7.0.3", - "fs-extra": "^9.0.1", - "jest": "^26.6.3", - "jest-specific-snapshot": "^4.0.0", - "lit-element": "^3.0.0-rc.2", - "lit-html": "^2.0.0-rc.3", - "require-from-string": "^2.0.2", - "rxjs": "^6.6.3", - "styled-components": "^5.2.1", - "terser-webpack-plugin": "^5.0.3", - "tmp": "^0.2.1", - "tslib": "^2.1.0", - "vue": "^2.6.10", - "web-component-analyzer": "^1.1.6", - "webpack": "4", - "zone.js": "^0.11.3" + "@storybook/mdx2-csf": "^0.0.3", + "@types/util-deprecate": "^1.0.0" }, "peerDependencies": { - "@storybook/angular": "6.4.0-beta.10", - "@storybook/html": "6.4.0-beta.10", - "@storybook/react": "6.4.0-beta.10", - "@storybook/vue": "6.4.0-beta.10", - "@storybook/vue3": "6.4.0-beta.10", - "@storybook/web-components": "6.4.0-beta.10", - "lit": "^2.0.0-rc.1", - "lit-html": "^1.4.1 || ^2.0.0-rc.3", - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0", - "svelte": "^3.31.2", - "sveltedoc-parser": "^4.1.0", - "vue": "^2.6.10 || ^3.0.0", - "webpack": "*" + "@storybook/mdx2-csf": "^0.0.3", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { - "@storybook/angular": { - "optional": true - }, - "@storybook/html": { - "optional": true - }, - "@storybook/react": { - "optional": true - }, - "@storybook/vue": { - "optional": true - }, - "@storybook/vue3": { - "optional": true - }, - "@storybook/web-components": { - "optional": true - }, - "lit": { - "optional": true - }, - "lit-html": { + "@storybook/mdx2-csf": { "optional": true }, "react": { @@ -186,24 +103,12 @@ }, "react-dom": { "optional": true - }, - "svelte": { - "optional": true - }, - "sveltedoc-parser": { - "optional": true - }, - "vue": { - "optional": true - }, - "webpack": { - "optional": true } }, "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", "sbmodern": "dist/modern/index.js", "storybook": { "displayName": "Docs", diff --git a/addons/docs/preset.js b/addons/docs/preset.js index dfce06bdfda4..e45ac5b4cec0 100644 --- a/addons/docs/preset.js +++ b/addons/docs/preset.js @@ -1,16 +1 @@ -const getFrameworkPresets = (framework) => { - try { - return [require.resolve(`./dist/cjs/frameworks/${framework}/preset`)]; - } catch (err) { - // there is no custom config for the user's framework, do nothing - return []; - } -}; - -module.exports = (storybookOptions, presetOptions) => { - return [ - { name: require.resolve('./common-preset'), options: presetOptions }, - { name: require.resolve('./dist/cjs/frameworks/common/preset'), options: presetOptions }, - ...getFrameworkPresets(storybookOptions.framework), - ]; -}; +module.exports = require('./dist/cjs/preset'); diff --git a/addons/docs/preview.js b/addons/docs/preview.js new file mode 100644 index 000000000000..e726cab5a1b6 --- /dev/null +++ b/addons/docs/preview.js @@ -0,0 +1 @@ +export * from './dist/esm/preview'; diff --git a/addons/docs/register.js b/addons/docs/register.js index 257d32c01f8f..2d916bea61a0 100644 --- a/addons/docs/register.js +++ b/addons/docs/register.js @@ -1 +1,6 @@ -require('./dist/esm/register.js'); +import { once } from '@storybook/client-logger'; +import './manager'; + +once.warn( + 'register.js is deprecated see https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#deprecated-registerjs' +); diff --git a/addons/docs/src/blocks/ArgsTable.tsx b/addons/docs/src/blocks/ArgsTable.tsx index 92b8b74b784f..d30792f387b0 100644 --- a/addons/docs/src/blocks/ArgsTable.tsx +++ b/addons/docs/src/blocks/ArgsTable.tsx @@ -7,15 +7,15 @@ import { SortType, TabbedArgsTable, } from '@storybook/components'; +import { ArgTypesExtractor } from '@storybook/docs-tools'; import { addons } from '@storybook/addons'; import { filterArgTypes, PropDescriptor } from '@storybook/store'; import Events from '@storybook/core-events'; -import { StrictArgTypes, Args } from '@storybook/csf'; +import { StrictArgTypes, Args, Globals } from '@storybook/csf'; import { DocsContext, DocsContextProps } from './DocsContext'; import { Component, CURRENT_SELECTION, PRIMARY_STORY } from './types'; import { getComponentName } from './utils'; -import { ArgTypesExtractor } from '../lib/docgen/types'; import { lookupStoryId } from './Story'; import { useStory } from './useStory'; @@ -42,18 +42,20 @@ type StoryProps = BaseProps & { type ArgsTableProps = BaseProps | OfProps | ComponentsProps | StoryProps; -const useArgs = ( - storyId: string, - context: DocsContextProps -): [Args, (args: Args) => void, (argNames?: string[]) => void] => { - const channel = addons.getChannel(); - +const getContext = (storyId: string, context: DocsContextProps) => { const story = context.storyById(storyId); if (!story) { throw new Error(`Unknown story: ${storyId}`); } + return context.getStoryContext(story); +}; - const storyContext = context.getStoryContext(story); +const useArgs = ( + storyId: string, + context: DocsContextProps +): [Args, (args: Args) => void, (argNames?: string[]) => void] => { + const channel = addons.getChannel(); + const storyContext = getContext(storyId, context); const [args, setArgs] = useState(storyContext.args); useEffect(() => { @@ -76,6 +78,22 @@ const useArgs = ( return [args, updateArgs, resetArgs]; }; +const useGlobals = (storyId: string, context: DocsContextProps): [Globals] => { + const channel = addons.getChannel(); + const storyContext = getContext(storyId, context); + const [globals, setGlobals] = useState(storyContext.globals); + + useEffect(() => { + const cb = (changed: { globals: Globals }) => { + setGlobals(changed.globals); + }; + channel.on(Events.GLOBALS_UPDATED, cb); + return () => channel.off(Events.GLOBALS_UPDATED, cb); + }, []); + + return [globals]; +}; + export const extractComponentArgTypes = ( component: Component, { id, storyById }: DocsContextProps, @@ -162,15 +180,14 @@ export const StoryTable: FC< const story = useStory(storyId, context); // eslint-disable-next-line prefer-const let [args, updateArgs, resetArgs] = useArgs(storyId, context); - if (!story) { - return
Loading...
; - } + const [globals] = useGlobals(storyId, context); + if (!story) return ; const argTypes = filterArgTypes(story.argTypes, include, exclude); const mainLabel = getComponentName(component) || 'Story'; - let tabs = { [mainLabel]: { rows: argTypes, args, updateArgs, resetArgs } } as Record< + let tabs = { [mainLabel]: { rows: argTypes, args, globals, updateArgs, resetArgs } } as Record< string, PureArgsTableProps >; diff --git a/addons/docs/src/blocks/Canvas.tsx b/addons/docs/src/blocks/Canvas.tsx index 42cfb0f31b1a..a1217e48939d 100644 --- a/addons/docs/src/blocks/Canvas.tsx +++ b/addons/docs/src/blocks/Canvas.tsx @@ -5,11 +5,13 @@ import { resetComponents, Preview as PurePreview, PreviewProps as PurePreviewProps, + PreviewSkeleton, } from '@storybook/components'; import { DocsContext, DocsContextProps } from './DocsContext'; import { SourceContext, SourceContextProps } from './SourceContainer'; import { getSourceProps, SourceState } from './Source'; import { useStories } from './useStory'; +import { CURRENT_SELECTION } from './types'; export { SourceState }; @@ -52,7 +54,10 @@ const getPreviewProps = ( ); const sourceProps = getSourceProps({ ids: targetIds }, docsContext, sourceContext); if (!sourceState) sourceState = sourceProps.state; - const stories = useStories(targetIds, docsContext); + const storyIds = targetIds.map((targetId) => + targetId === CURRENT_SELECTION ? docsContext.id : targetId + ); + const stories = useStories(storyIds, docsContext); isLoading = stories.some((s) => !s); return { @@ -71,7 +76,9 @@ export const Canvas: FC = (props) => { const { isLoading, previewProps } = getPreviewProps(props, docsContext, sourceContext); const { children } = props; - return isLoading ? null : ( + if (isLoading) return ; + + return ( {children} diff --git a/addons/docs/src/blocks/Description.tsx b/addons/docs/src/blocks/Description.tsx index 2f92c105e160..2c55f10e740a 100644 --- a/addons/docs/src/blocks/Description.tsx +++ b/addons/docs/src/blocks/Description.tsx @@ -1,8 +1,9 @@ import React, { FunctionComponent, useContext } from 'react'; import { Description, DescriptionProps as PureDescriptionProps } from '@storybook/components'; +import { str } from '@storybook/docs-tools'; + import { DocsContext, DocsContextProps } from './DocsContext'; import { Component, CURRENT_SELECTION } from './types'; -import { str } from '../lib/docgen'; export enum DescriptionType { INFO = 'info', diff --git a/addons/docs/src/blocks/DocsContext.ts b/addons/docs/src/blocks/DocsContext.ts index 3fada361a323..c902d8fb9b2f 100644 --- a/addons/docs/src/blocks/DocsContext.ts +++ b/addons/docs/src/blocks/DocsContext.ts @@ -1,8 +1,8 @@ import { Context, createContext } from 'react'; import { window as globalWindow } from 'global'; -import { DocsContextProps } from '@storybook/preview-web'; -import { AnyFramework } from '@storybook/csf'; +import type { DocsContextProps } from '@storybook/preview-web'; +import type { AnyFramework } from '@storybook/csf'; export type { DocsContextProps }; @@ -12,9 +12,11 @@ export type { DocsContextProps }; // the React component tree. // This was specifically a problem with the Vite builder. /* eslint-disable no-underscore-dangle */ -if (globalWindow.__DOCS_CONTEXT__ === undefined) { +if (globalWindow && globalWindow.__DOCS_CONTEXT__ === undefined) { globalWindow.__DOCS_CONTEXT__ = createContext({}); globalWindow.__DOCS_CONTEXT__.displayName = 'DocsContext'; } -export const DocsContext: Context> = globalWindow.__DOCS_CONTEXT__; +export const DocsContext: Context> = globalWindow + ? globalWindow.__DOCS_CONTEXT__ + : createContext({}); diff --git a/addons/docs/src/blocks/DocsStory.tsx b/addons/docs/src/blocks/DocsStory.tsx index 68b3cd6a770f..7b45c7e91889 100644 --- a/addons/docs/src/blocks/DocsStory.tsx +++ b/addons/docs/src/blocks/DocsStory.tsx @@ -41,7 +41,7 @@ export const DocsStory: FunctionComponent = ({ {subheading && {subheading}} {description && } - + ); diff --git a/addons/docs/src/blocks/Source.tsx b/addons/docs/src/blocks/Source.tsx index 2fa59005525c..82464c7ae6ab 100644 --- a/addons/docs/src/blocks/Source.tsx +++ b/addons/docs/src/blocks/Source.tsx @@ -1,14 +1,10 @@ -import React, { FC, useContext } from 'react'; -import { - Source as PureSource, - SourceError, - SourceProps as PureSourceProps, -} from '@storybook/components'; -import { StoryId } from '@storybook/api'; -import { Story } from '@storybook/store'; +import React, { ComponentProps, FC, useContext } from 'react'; +import { Source as PureSource, SourceError } from '@storybook/components'; +import type { StoryId } from '@storybook/api'; +import type { Story } from '@storybook/store'; import { DocsContext, DocsContextProps } from './DocsContext'; -import { SourceContext, SourceContextProps } from './SourceContainer'; +import { SourceContext, SourceContextProps, SourceItem } from './SourceContainer'; import { CURRENT_SELECTION } from './types'; import { SourceType } from '../shared'; @@ -24,6 +20,7 @@ export enum SourceState { interface CommonProps { language?: string; dark?: boolean; + format?: PureSourceProps['format']; code?: string; } @@ -50,11 +47,11 @@ const getSourceState = (stories: Story[]) => { return states[0]; }; -const getStorySource = (storyId: StoryId, sourceContext: SourceContextProps): string => { +const getStorySource = (storyId: StoryId, sourceContext: SourceContextProps): SourceItem => { const { sources } = sourceContext; // source rendering is async so source is unavailable at the start of the render cycle, // so we fail gracefully here without warning - return sources?.[storyId] || ''; + return sources?.[storyId] || { code: '', format: false }; }; const getSnippet = (snippet: string, story?: Story): string => { @@ -69,7 +66,7 @@ const getSnippet = (snippet: string, story?: Story): string => { // if user has hard-coded the snippet, that takes precedence const userCode = parameters.docs?.source?.code; - if (userCode) { + if (userCode !== undefined) { return userCode; } @@ -89,6 +86,7 @@ const getSnippet = (snippet: string, story?: Story): string => { }; type SourceStateProps = { state: SourceState }; +type PureSourceProps = ComponentProps; export const getSourceProps = ( props: SourceProps, @@ -103,6 +101,7 @@ export const getSourceProps = ( const multiProps = props as MultiSourceProps; let source = codeProps.code; // prefer user-specified code + let { format } = codeProps; // prefer user-specified code const targetIds = multiProps.ids || [singleProps.id || currentId]; const storyIds = targetIds.map((targetId) => @@ -115,9 +114,12 @@ export const getSourceProps = ( } if (!source) { + // just take the format from the first story, given how they're all concatinated together... + // TODO: we should consider sending an event with all the sources separately, instead of concatenating them here + ({ format } = getStorySource(storyIds[0], sourceContext)); source = storyIds .map((storyId, idx) => { - const storySource = getStorySource(storyId, sourceContext); + const { code: storySource } = getStorySource(storyId, sourceContext); const storyObj = stories[idx] as Story; return getSnippet(storySource, storyObj); }) @@ -134,6 +136,7 @@ export const getSourceProps = ( ? { code: source, state, + format, language: props.language || docsLanguage || 'jsx', dark: props.dark || false, } @@ -145,7 +148,7 @@ export const getSourceProps = ( * or the source for a story if `storyId` is provided, or * the source for the current story if nothing is provided. */ -export const Source: FC = (props) => { +export const Source: FC = (props) => { const sourceContext = useContext(SourceContext); const docsContext = useContext(DocsContext); const sourceProps = getSourceProps(props, docsContext, sourceContext); diff --git a/addons/docs/src/blocks/SourceContainer.tsx b/addons/docs/src/blocks/SourceContainer.tsx index 4cae3680f96f..c15840d47adc 100644 --- a/addons/docs/src/blocks/SourceContainer.tsx +++ b/addons/docs/src/blocks/SourceContainer.tsx @@ -1,10 +1,14 @@ import React, { FC, Context, createContext, useEffect, useState } from 'react'; import deepEqual from 'fast-deep-equal'; import { addons } from '@storybook/addons'; -import { StoryId } from '@storybook/api'; +import type { SyntaxHighlighterFormatTypes } from '@storybook/components'; +import type { StoryId } from '@storybook/api'; import { SNIPPET_RENDERED } from '../shared'; -export type SourceItem = string; +export interface SourceItem { + code: string; + format: SyntaxHighlighterFormatTypes; +} export type StorySources = Record; export interface SourceContextProps { @@ -19,23 +23,33 @@ export const SourceContainer: FC<{}> = ({ children }) => { const channel = addons.getChannel(); useEffect(() => { - const handleSnippetRendered = (id: StoryId, newItem: SourceItem) => { - if (newItem !== sources[id]) { - setSources((current) => { - const newSources = { ...current, [id]: newItem }; - - if (!deepEqual(current, newSources)) { - return newSources; - } - return current; - }); + const handleSnippetRendered = ( + id: StoryId, + newSource: string, + format: SyntaxHighlighterFormatTypes = false + ) => { + // optimization: if the source is the same, ignore the incoming event + if (sources[id] && sources[id].code === newSource) { + return; } + + setSources((current) => { + const newSources = { + ...current, + [id]: { code: newSource, format }, + }; + + if (!deepEqual(current, newSources)) { + return newSources; + } + return current; + }); }; channel.on(SNIPPET_RENDERED, handleSnippetRendered); return () => channel.off(SNIPPET_RENDERED, handleSnippetRendered); - }); + }, []); return {children}; }; diff --git a/addons/docs/src/blocks/Stories.tsx b/addons/docs/src/blocks/Stories.tsx index 9d460a5cd830..d393b822fdd6 100644 --- a/addons/docs/src/blocks/Stories.tsx +++ b/addons/docs/src/blocks/Stories.tsx @@ -13,6 +13,7 @@ export const Stories: FunctionComponent = ({ title, includePrimary const { componentStories } = useContext(DocsContext); let stories: DocsStoryProps[] = componentStories(); + stories = stories.filter((story) => !story.parameters?.docs?.disable); if (!includePrimary) stories = stories.slice(1); if (!stories || stories.length === 0) { diff --git a/addons/docs/src/blocks/Story.tsx b/addons/docs/src/blocks/Story.tsx index 4dc31ce7c3c8..e61fcb321512 100644 --- a/addons/docs/src/blocks/Story.tsx +++ b/addons/docs/src/blocks/Story.tsx @@ -6,10 +6,11 @@ import React, { useContext, useRef, useEffect, + useState, } from 'react'; import { MDXProvider } from '@mdx-js/react'; import global from 'global'; -import { resetComponents, Story as PureStory } from '@storybook/components'; +import { resetComponents, Story as PureStory, StorySkeleton } from '@storybook/components'; import { StoryId, toId, storyNameFromExport, StoryAnnotations, AnyFramework } from '@storybook/csf'; import { Story as StoryType } from '@storybook/store'; import { addons } from '@storybook/addons'; @@ -86,6 +87,8 @@ export const getStoryProps = ( const storyResult = story.unboundStoryFn({ ...context.getStoryContext(story), loaded: {}, + abortSignal: undefined, + canvasElement: undefined, }); // We need to wait until the bound story function has actually been called before we @@ -108,72 +111,82 @@ export const getStoryProps = ( }; }; +function makeGate(): [Promise, () => void] { + let open; + const gate = new Promise((r) => { + open = r; + }); + return [gate, open]; +} + const Story: FunctionComponent = (props) => { const context = useContext(DocsContext); const channel = addons.getChannel(); - const ref = useRef(); + const storyRef = useRef(); const storyId = getStoryId(props, context); const story = useStory(storyId, context); + const [showLoader, setShowLoader] = useState(true); useEffect(() => { let cleanup: () => void; - if (story && ref.current) { - const { componentId, id, title, name } = story; - const renderContext = { - componentId, - title, - kind: title, - id, - name, - story: name, - // TODO what to do when these fail? - showMain: () => {}, - showError: () => {}, - showException: () => {}, - }; - cleanup = context.renderStoryToElement({ - story, - renderContext, - element: ref.current as Element, - }); + if (story && storyRef.current) { + const element = storyRef.current as HTMLElement; + cleanup = context.renderStoryToElement(story, element); + setShowLoader(false); } return () => cleanup && cleanup(); }, [story]); + const [storyFnRan, onStoryFnRan] = makeGate(); + const [rendered, onRendered] = makeGate(); + useEffect(onRendered); + if (!story) { - return
Loading...
; + return ; } - // If we are rendering a old-style inline Story via `PureStory` below, we want to emit - // the `STORY_RENDERED` event when it renders. The modern mode below calls out to - // `Preview.renderStoryToDom()` which itself emits the event. - const storyProps = getStoryProps(props, story, context, () => - channel.emit(Events.STORY_RENDERED, storyId) - ); + const storyProps = getStoryProps(props, story, context, onStoryFnRan); if (!storyProps) { return null; } - if (global?.FEATURES?.modernInlineRender) { - // We do this so React doesn't complain when we replace the span in a secondary render - const htmlContents = `loading story...`; - - // FIXME: height/style/etc. lifted from PureStory - const { height } = storyProps; - return ( -
- - {height ? ( - - ) : null} -
- -
- ); + if (storyProps.inline) { + // If we are rendering a old-style inline Story via `PureStory` below, we want to emit + // the `STORY_RENDERED` event when it renders. The modern mode below calls out to + // `Preview.renderStoryToDom()` which itself emits the event. + if (!global?.FEATURES?.modernInlineRender) { + // We need to wait for two things before we can consider the story rendered: + // (a) React's `useEffect` hook needs to fire. This is needed for React stories, as + // decorators of the form `` will not actually execute `B` in the first + // call to the story function. + // (b) The story function needs to actually have been called. + // Certain frameworks (i.e.angular) don't actually render the component in the very first + // React render cycle, so we need to wait for the framework to actually do that + Promise.all([storyFnRan, rendered]).then(() => { + channel.emit(Events.STORY_RENDERED, storyId); + }); + } else { + // We do this so React doesn't complain when we replace the span in a secondary render + const htmlContents = ``; + + // FIXME: height/style/etc. lifted from PureStory + const { height } = storyProps; + return ( +
+ + {height ? ( + + ) : null} + {showLoader && } +
+ +
+ ); + } } return ( diff --git a/addons/docs/src/blocks/enhanceSource.test.ts b/addons/docs/src/blocks/enhanceSource.test.ts index 006463374fd0..13afaadc40c4 100644 --- a/addons/docs/src/blocks/enhanceSource.test.ts +++ b/addons/docs/src/blocks/enhanceSource.test.ts @@ -1,4 +1,4 @@ -import { StoryContext } from '@storybook/addons'; +import type { StoryContext } from '@storybook/addons'; import { enhanceSource } from './enhanceSource'; const emptyContext: StoryContext = { diff --git a/addons/docs/src/blocks/enhanceSource.ts b/addons/docs/src/blocks/enhanceSource.ts index ea969c1d46ce..3cfb4890dc06 100644 --- a/addons/docs/src/blocks/enhanceSource.ts +++ b/addons/docs/src/blocks/enhanceSource.ts @@ -1,6 +1,6 @@ -import { combineParameters } from '@storybook/client-api'; -import { Parameters } from '@storybook/addons'; -import { Story } from '@storybook/store'; +import type { Parameters } from '@storybook/addons'; +import type { Story } from '@storybook/store'; +import { combineParameters } from '@storybook/store'; // ============================================================ // START @storybook/source-loader/extract-source diff --git a/addons/docs/src/blocks/mdx.tsx b/addons/docs/src/blocks/mdx.tsx index 3dbc6746ee99..953bd22266b3 100644 --- a/addons/docs/src/blocks/mdx.tsx +++ b/addons/docs/src/blocks/mdx.tsx @@ -91,7 +91,7 @@ export const AnchorMdx: FC = (props) => { } // Links to other pages of SB should use the base URL of the top level iframe instead of the base URL of the preview iframe. - if (target !== '_blank') { + if (target !== '_blank' && !href.startsWith('https://')) { return ( ( storyIds: StoryId[], context: DocsContextProps ): (Story | void)[] { - const [storiesById, setStories] = useState({} as Record>); + const initialStoriesById = context.componentStories().reduce((acc, story) => { + acc[story.id] = story; + return acc; + }, {} as Record>); + + const [storiesById, setStories] = useState(initialStoriesById as typeof initialStoriesById); useEffect(() => { Promise.all( diff --git a/addons/docs/src/frameworks/angular/__testfixtures__/doc-button/compodoc.snapshot b/addons/docs/src/frameworks/angular/__testfixtures__/doc-button/compodoc.snapshot deleted file mode 100644 index 17a268f1a31e..000000000000 --- a/addons/docs/src/frameworks/angular/__testfixtures__/doc-button/compodoc.snapshot +++ /dev/null @@ -1,1297 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`angular component properties doc-button 1`] = ` -Object { - "classes": Array [], - "components": Array [ - Object { - "accessors": Object { - "inputValue": Object { - "getSignature": Object { - "description": "

Getter for inputValue.

-", - "line": 115, - "name": "inputValue", - "rawdescription": "Getter for \`inputValue\`.", - "returnType": "", - "type": "", - }, - "name": "inputValue", - "setSignature": Object { - "args": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "value", - "type": "string", - }, - ], - "deprecated": false, - "deprecationMessage": "", - "description": "

Setter for inputValue that is also an @Input.

-", - "jsdoctags": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "value", - "tagName": Object { - "text": "param", - }, - "type": "string", - }, - ], - "line": 110, - "name": "inputValue", - "rawdescription": "Setter for \`inputValue\` that is also an \`@Input\`.", - "returnType": "void", - "type": "void", - }, - }, - "item": Object { - "name": "item", - "setSignature": Object { - "args": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "item", - "type": "T[]", - }, - ], - "deprecated": false, - "deprecationMessage": "", - "jsdoctags": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "item", - "tagName": Object { - "text": "param", - }, - "type": "T[]", - }, - ], - "line": 195, - "name": "item", - "returnType": "void", - "type": "void", - }, - }, - "value": Object { - "getSignature": Object { - "description": "

Get the private value.

-", - "line": 154, - "name": "value", - "rawdescription": "Get the private value.", - "returnType": "string | number", - "type": "", - }, - "name": "value", - "setSignature": Object { - "args": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "value", - "type": "string | number", - }, - ], - "deprecated": false, - "deprecationMessage": "", - "description": "

Set the private value.

-", - "jsdoctags": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "value", - "tagName": Object { - "text": "param", - }, - "type": "string | number", - }, - ], - "line": 149, - "name": "value", - "rawdescription": "Set the private value.", - "returnType": "void", - "type": "void", - }, - }, - }, - "assetsDirs": Array [], - "deprecated": false, - "deprecationMessage": "", - "description": "

This is a simple button that demonstrates various JSDoc handling in Storybook Docs for Angular.

-

It supports markdown, so you can embed formatted text, -like bold, italic, and inline code.

-
-

How you like dem apples?! It's never been easier to document all your components.

-
-", - "encapsulation": Array [], - "entryComponents": Array [], - "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", - "hostBindings": Array [ - Object { - "defaultValue": "false", - "deprecated": false, - "deprecationMessage": "", - "line": 124, - "name": "class.focused", - "type": "boolean", - }, - ], - "hostListeners": Array [ - Object { - "args": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "btn", - "type": "", - }, - ], - "argsDecorator": Array [ - "$event.target", - ], - "deprecated": false, - "deprecationMessage": "", - "line": 120, - "name": "click", - }, - ], - "id": "component-InputComponent-568feeafa68e593b062061c27c4625a9", - "inputs": Array [], - "inputsClass": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "description": "

Specify the accent-type of the button

-", - "line": 56, - "name": "accent", - "rawdescription": "Specify the accent-type of the button", - "type": "ButtonAccent", - }, - Object { - "defaultValue": "'secondary'", - "deprecated": false, - "deprecationMessage": "", - "description": "

Appearance style of the button.

-", - "line": 52, - "name": "appearance", - "rawdescription": "Appearance style of the button.", - "type": "\\"primary\\" | \\"secondary\\"", - }, - Object { - "deprecated": false, - "deprecationMessage": "", - "description": "

Setter for inputValue that is also an @Input.

-", - "line": 110, - "name": "inputValue", - "rawdescription": "Setter for \`inputValue\` that is also an \`@Input\`.", - "type": "string", - }, - Object { - "defaultValue": "false", - "deprecated": false, - "deprecationMessage": "", - "description": "

Sets the button to a disabled state.

-", - "line": 60, - "name": "isDisabled", - "rawdescription": "Sets the button to a disabled state.", - "type": "boolean", - }, - Object { - "deprecated": false, - "deprecationMessage": "", - "line": 195, - "name": "item", - "type": "[]", - }, - Object { - "deprecated": false, - "deprecationMessage": "", - "description": "

The inner text of the button.

-", - "jsdoctags": Array [ - Object { - "comment": "", - "end": 1525, - "flags": 4227072, - "kind": 317, - "modifierFlagsCache": 0, - "pos": 1512, - "tagName": Object { - "end": 1521, - "escapedText": "required", - "flags": 4227072, - "kind": 78, - "modifierFlagsCache": 0, - "pos": 1513, - "transformFlags": 0, - }, - "transformFlags": 0, - }, - ], - "line": 68, - "name": "label", - "rawdescription": "The inner text of the button.", - "type": "string", - }, - Object { - "deprecated": false, - "deprecationMessage": "", - "line": 192, - "name": "showKeyAlias", - "type": "", - }, - Object { - "defaultValue": "'medium'", - "deprecated": false, - "deprecationMessage": "", - "description": "

Size of the button.

-", - "line": 72, - "name": "size", - "rawdescription": "Size of the button.", - "type": "ButtonSize", - }, - Object { - "deprecated": false, - "deprecationMessage": "", - "description": "

Specifies some arbitrary object

-", - "line": 75, - "name": "someDataObject", - "rawdescription": "Specifies some arbitrary object", - "type": "ISomeInterface", - }, - Object { - "defaultValue": "false", - "deprecated": true, - "deprecationMessage": "", - "description": "

Some input you shouldn't use.

-", - "jsdoctags": Array [ - Object { - "comment": "", - "end": 1802, - "flags": 4227072, - "kind": 321, - "modifierFlagsCache": 0, - "pos": 1787, - "tagName": Object { - "end": 1798, - "escapedText": "deprecated", - "flags": 4227072, - "kind": 78, - "modifierFlagsCache": 0, - "pos": 1788, - "transformFlags": 0, - }, - "transformFlags": 0, - }, - ], - "line": 83, - "name": "somethingYouShouldNotUse", - "rawdescription": "Some input you shouldn't use.", - "type": "boolean", - }, - ], - "methodsClass": Array [ - Object { - "args": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "x", - "type": "number", - }, - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "y", - "type": "string | number", - }, - ], - "deprecated": false, - "deprecationMessage": "", - "description": "

An internal calculation method which adds x and y together.

-", - "jsdoctags": Array [ - Object { - "comment": "

Some number you'd like to use.

-", - "deprecated": false, - "deprecationMessage": "", - "name": Object { - "end": 3518, - "escapedText": "x", - "flags": 4227072, - "kind": 78, - "modifierFlagsCache": 0, - "pos": 3517, - "transformFlags": 0, - }, - "tagName": Object { - "end": 3516, - "escapedText": "param", - "flags": 4227072, - "kind": 78, - "modifierFlagsCache": 0, - "pos": 3511, - "transformFlags": 0, - }, - "type": "number", - }, - Object { - "comment": "

Some other number or string you'd like to use, will have parseInt() applied before calculation.

-", - "deprecated": false, - "deprecationMessage": "", - "name": Object { - "end": 3563, - "escapedText": "y", - "flags": 4227072, - "kind": 78, - "modifierFlagsCache": 0, - "pos": 3562, - "transformFlags": 0, - }, - "tagName": Object { - "end": 3561, - "escapedText": "param", - "flags": 4227072, - "kind": 78, - "modifierFlagsCache": 0, - "pos": 3556, - "transformFlags": 0, - }, - "type": "string | number", - }, - ], - "line": 164, - "modifierKind": Array [ - 122, - ], - "name": "calc", - "optional": false, - "rawdescription": " - -An internal calculation method which adds \`x\` and \`y\` together. - -", - "returnType": "number", - "typeParameters": Array [], - }, - Object { - "args": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "btn", - "type": "", - }, - ], - "decorators": Array [ - Object { - "name": "HostListener", - "stringifiedArguments": "'click', ['$event.target']", - }, - ], - "deprecated": false, - "deprecationMessage": "", - "jsdoctags": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "btn", - "tagName": Object { - "text": "param", - }, - "type": "", - }, - ], - "line": 120, - "name": "onClickListener", - "optional": false, - "returnType": "void", - "typeParameters": Array [], - }, - Object { - "args": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "password", - "type": "string", - }, - ], - "deprecated": false, - "deprecationMessage": "", - "description": "

A private method.

-", - "jsdoctags": Array [ - Object { - "comment": "

Some password.

-", - "deprecated": false, - "deprecationMessage": "", - "name": Object { - "end": 4079, - "escapedText": "password", - "flags": 4227072, - "kind": 78, - "modifierFlagsCache": 0, - "pos": 4071, - "transformFlags": 0, - }, - "tagName": Object { - "end": 4070, - "escapedText": "param", - "flags": 4227072, - "kind": 78, - "modifierFlagsCache": 0, - "pos": 4065, - "transformFlags": 0, - }, - "type": "string", - }, - ], - "line": 187, - "modifierKind": Array [ - 120, - ], - "name": "privateMethod", - "optional": false, - "rawdescription": " - -A private method. - -", - "returnType": "void", - "typeParameters": Array [], - }, - Object { - "args": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "id", - "optional": true, - "type": "number", - }, - ], - "deprecated": false, - "deprecationMessage": "", - "description": "

A protected method.

-", - "jsdoctags": Array [ - Object { - "comment": "

Some id.

-", - "deprecated": false, - "deprecationMessage": "", - "name": Object { - "end": 3938, - "escapedText": "id", - "flags": 4227072, - "kind": 78, - "modifierFlagsCache": 0, - "pos": 3936, - "transformFlags": 0, - }, - "optional": true, - "tagName": Object { - "end": 3935, - "escapedText": "param", - "flags": 4227072, - "kind": 78, - "modifierFlagsCache": 0, - "pos": 3930, - "transformFlags": 0, - }, - "type": "number", - }, - ], - "line": 178, - "modifierKind": Array [ - 121, - ], - "name": "protectedMethod", - "optional": false, - "rawdescription": " - -A protected method. - -", - "returnType": "void", - "typeParameters": Array [], - }, - Object { - "args": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "things", - "type": "ISomeInterface", - }, - ], - "deprecated": false, - "deprecationMessage": "", - "description": "

A public method using an interface.

-", - "jsdoctags": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "things", - "tagName": Object { - "text": "param", - }, - "type": "ISomeInterface", - }, - ], - "line": 169, - "modifierKind": Array [ - 122, - ], - "name": "publicMethod", - "optional": false, - "rawdescription": " -A public method using an interface.", - "returnType": "void", - "typeParameters": Array [], - }, - ], - "name": "InputComponent", - "outputs": Array [], - "outputsClass": Array [ - Object { - "defaultValue": "new EventEmitter()", - "deprecated": false, - "deprecationMessage": "", - "description": "

Handler to be called when the button is clicked by a user.

-

Will also block the emission of the event if isDisabled is true.

-", - "line": 91, - "name": "onClick", - "rawdescription": " - -Handler to be called when the button is clicked by a user. - -Will also block the emission of the event if \`isDisabled\` is true. -", - "type": "EventEmitter", - }, - ], - "propertiesClass": Array [ - Object { - "defaultValue": "'some value'", - "deprecated": false, - "deprecationMessage": "", - "description": "", - "line": 106, - "modifierKind": Array [ - 120, - ], - "name": "_inputValue", - "optional": false, - "type": "string", - }, - Object { - "defaultValue": "'Private hello'", - "deprecated": false, - "deprecationMessage": "", - "description": "

Private value.

-", - "line": 146, - "modifierKind": Array [ - 120, - ], - "name": "_value", - "optional": false, - "rawdescription": " -Private value.", - "type": "string", - }, - Object { - "decorators": Array [ - Object { - "name": "ViewChild", - "stringifiedArguments": "'buttonRef', {static: false}", - }, - ], - "deprecated": false, - "deprecationMessage": "", - "description": "", - "line": 48, - "name": "buttonRef", - "optional": false, - "type": "ElementRef", - }, - Object { - "decorators": Array [ - Object { - "name": "HostBinding", - "stringifiedArguments": "'class.focused'", - }, - ], - "defaultValue": "false", - "deprecated": false, - "deprecationMessage": "", - "description": "", - "line": 124, - "name": "focus", - "optional": false, - "type": "", - }, - Object { - "defaultValue": "'Public hello'", - "deprecated": false, - "deprecationMessage": "", - "description": "

Public value.

-", - "line": 143, - "modifierKind": Array [ - 122, - ], - "name": "internalProperty", - "optional": false, - "rawdescription": " -Public value.", - "type": "string", - }, - Object { - "deprecated": false, - "deprecationMessage": "", - "description": "", - "line": 199, - "modifierKind": Array [ - 122, - ], - "name": "processedItem", - "optional": false, - "type": "T[]", - }, - ], - "providers": Array [], - "rawdescription": " - -This is a simple button that demonstrates various JSDoc handling in Storybook Docs for Angular. - -It supports [markdown](https://en.wikipedia.org/wiki/Markdown), so you can embed formatted text, -like **bold**, _italic_, and \`inline code\`. - -> How you like dem apples?! It's never been easier to document all your components. - -", - "selector": "doc-button", - "sourceCode": "import { - Component, - ElementRef, - EventEmitter, - HostBinding, - HostListener, - Input, - Output, - ViewChild, -} from '@angular/core'; - -export const exportedConstant = 'An exported constant'; - -export type ButtonSize = 'small' | 'medium' | 'large' | 'xlarge'; - -export enum ButtonAccent { - 'Normal' = 'Normal', - 'High' = 'High', -} - -export interface ISomeInterface { - one: string; - two: boolean; - three: any[]; -} - -/** - * This is a simple button that demonstrates various JSDoc handling in Storybook Docs for Angular. - * - * It supports [markdown](https://en.wikipedia.org/wiki/Markdown), so you can embed formatted text, - * like **bold**, _italic_, and \`inline code\`. - * - * > How you like dem apples?! It's never been easier to document all your components. - * - * @string Hello world - * @link [Example](http://example.com) - * @code \`ThingThing\` - * @html aaa - */ -@Component({ - selector: 'doc-button', - template: '', -}) -export class InputComponent { - @ViewChild('buttonRef', { static: false }) buttonRef: ElementRef; - - /** Appearance style of the button. */ - @Input() - public appearance: 'primary' | 'secondary' = 'secondary'; - - /** Specify the accent-type of the button */ - @Input() - public accent: ButtonAccent; - - /** Sets the button to a disabled state. */ - @Input() - public isDisabled = false; - - /** - * The inner text of the button. - * - * @required - */ - @Input() - public label: string; - - /** Size of the button. */ - @Input() - public size?: ButtonSize = 'medium'; - - /** Specifies some arbitrary object */ - @Input() public someDataObject: ISomeInterface; - - /** - * Some input you shouldn't use. - * - * @deprecated - */ - @Input() - public somethingYouShouldNotUse = false; - - /** - * Handler to be called when the button is clicked by a user. - * - * Will also block the emission of the event if \`isDisabled\` is true. - */ - @Output() - public onClick = new EventEmitter(); - - /** - * This is an internal method that we don't want to document and have added the \`ignore\` annotation to. - * - * @ignore - */ - public handleClick(event: Event) { - event.stopPropagation(); - - if (!this.isDisabled) { - this.onClick.emit(event); - } - } - - private _inputValue = 'some value'; - - /** Setter for \`inputValue\` that is also an \`@Input\`. */ - @Input() - public set inputValue(value: string) { - this._inputValue = value; - } - - /** Getter for \`inputValue\`. */ - public get inputValue() { - return this._inputValue; - } - - @HostListener('click', ['$event.target']) - onClickListener(btn) { - console.log('button', btn); - } - - @HostBinding('class.focused') focus = false; - - /** - * Returns all the CSS classes for the button. - * - * @ignore - */ - public get classes(): string[] { - return [this.appearance, this.size] - .filter((_class) => !!_class) - .map((_class) => \`btn-\${_class}\`); - } - - /** - * @ignore - */ - public ignoredProperty = 'Ignore me'; - - /** Public value. */ - public internalProperty = 'Public hello'; - - /** Private value. */ - private _value = 'Private hello'; - - /** Set the private value. */ - public set value(value: string | number) { - this._value = \`\${value}\`; - } - - /** Get the private value. */ - public get value(): string | number { - return this._value; - } - - /** - * An internal calculation method which adds \`x\` and \`y\` together. - * - * @param x Some number you'd like to use. - * @param y Some other number or string you'd like to use, will have \`parseInt()\` applied before calculation. - */ - public calc(x: number, y: string | number): number { - return x + parseInt(\`\${y}\`, 10); - } - - /** A public method using an interface. */ - public publicMethod(things: ISomeInterface) { - console.log(things); - } - - /** - * A protected method. - * - * @param id Some \`id\`. - */ - protected protectedMethod(id?: number) { - console.log(id); - } - - /** - * A private method. - * - * @param password Some \`password\`. - */ - private privateMethod(password: string) { - console.log(password); - } - - @Input('showKeyAlias') - public showKey: keyof T; - - @Input() - public set item(item: T[]) { - this.processedItem = item; - } - - public processedItem: T[]; -} -", - "styleUrls": Array [], - "styleUrlsData": "", - "styles": Array [], - "stylesData": "", - "template": "", - "templateUrl": Array [], - "type": "component", - "viewProviders": Array [], - }, - ], - "coverage": Object { - "count": 21, - "files": Array [ - Object { - "coverageCount": "16/25", - "coveragePercent": 64, - "filePath": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", - "linktype": "component", - "name": "InputComponent", - "status": "good", - "type": "component", - }, - Object { - "coverageCount": "0/4", - "coveragePercent": 0, - "filePath": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", - "linktype": "interface", - "name": "ISomeInterface", - "status": "low", - "type": "interface", - }, - Object { - "coverageCount": "0/1", - "coveragePercent": 0, - "filePath": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", - "linksubtype": "variable", - "linktype": "miscellaneous", - "name": "exportedConstant", - "status": "low", - "type": "variable", - }, - ], - "status": "low", - }, - "directives": Array [], - "guards": Array [], - "injectables": Array [], - "interceptors": Array [], - "interfaces": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", - "id": "interface-ISomeInterface-568feeafa68e593b062061c27c4625a9", - "indexSignatures": Array [], - "kind": 163, - "methods": Array [], - "name": "ISomeInterface", - "properties": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "description": "", - "line": 25, - "name": "one", - "optional": false, - "type": "string", - }, - Object { - "deprecated": false, - "deprecationMessage": "", - "description": "", - "line": 27, - "name": "three", - "optional": false, - "type": "any[]", - }, - Object { - "deprecated": false, - "deprecationMessage": "", - "description": "", - "line": 26, - "name": "two", - "optional": false, - "type": "boolean", - }, - ], - "sourceCode": "import { - Component, - ElementRef, - EventEmitter, - HostBinding, - HostListener, - Input, - Output, - ViewChild, -} from '@angular/core'; - -export const exportedConstant = 'An exported constant'; - -export type ButtonSize = 'small' | 'medium' | 'large' | 'xlarge'; - -export enum ButtonAccent { - 'Normal' = 'Normal', - 'High' = 'High', -} - -export interface ISomeInterface { - one: string; - two: boolean; - three: any[]; -} - -/** - * This is a simple button that demonstrates various JSDoc handling in Storybook Docs for Angular. - * - * It supports [markdown](https://en.wikipedia.org/wiki/Markdown), so you can embed formatted text, - * like **bold**, _italic_, and \`inline code\`. - * - * > How you like dem apples?! It's never been easier to document all your components. - * - * @string Hello world - * @link [Example](http://example.com) - * @code \`ThingThing\` - * @html aaa - */ -@Component({ - selector: 'doc-button', - template: '', -}) -export class InputComponent { - @ViewChild('buttonRef', { static: false }) buttonRef: ElementRef; - - /** Appearance style of the button. */ - @Input() - public appearance: 'primary' | 'secondary' = 'secondary'; - - /** Specify the accent-type of the button */ - @Input() - public accent: ButtonAccent; - - /** Sets the button to a disabled state. */ - @Input() - public isDisabled = false; - - /** - * The inner text of the button. - * - * @required - */ - @Input() - public label: string; - - /** Size of the button. */ - @Input() - public size?: ButtonSize = 'medium'; - - /** Specifies some arbitrary object */ - @Input() public someDataObject: ISomeInterface; - - /** - * Some input you shouldn't use. - * - * @deprecated - */ - @Input() - public somethingYouShouldNotUse = false; - - /** - * Handler to be called when the button is clicked by a user. - * - * Will also block the emission of the event if \`isDisabled\` is true. - */ - @Output() - public onClick = new EventEmitter(); - - /** - * This is an internal method that we don't want to document and have added the \`ignore\` annotation to. - * - * @ignore - */ - public handleClick(event: Event) { - event.stopPropagation(); - - if (!this.isDisabled) { - this.onClick.emit(event); - } - } - - private _inputValue = 'some value'; - - /** Setter for \`inputValue\` that is also an \`@Input\`. */ - @Input() - public set inputValue(value: string) { - this._inputValue = value; - } - - /** Getter for \`inputValue\`. */ - public get inputValue() { - return this._inputValue; - } - - @HostListener('click', ['$event.target']) - onClickListener(btn) { - console.log('button', btn); - } - - @HostBinding('class.focused') focus = false; - - /** - * Returns all the CSS classes for the button. - * - * @ignore - */ - public get classes(): string[] { - return [this.appearance, this.size] - .filter((_class) => !!_class) - .map((_class) => \`btn-\${_class}\`); - } - - /** - * @ignore - */ - public ignoredProperty = 'Ignore me'; - - /** Public value. */ - public internalProperty = 'Public hello'; - - /** Private value. */ - private _value = 'Private hello'; - - /** Set the private value. */ - public set value(value: string | number) { - this._value = \`\${value}\`; - } - - /** Get the private value. */ - public get value(): string | number { - return this._value; - } - - /** - * An internal calculation method which adds \`x\` and \`y\` together. - * - * @param x Some number you'd like to use. - * @param y Some other number or string you'd like to use, will have \`parseInt()\` applied before calculation. - */ - public calc(x: number, y: string | number): number { - return x + parseInt(\`\${y}\`, 10); - } - - /** A public method using an interface. */ - public publicMethod(things: ISomeInterface) { - console.log(things); - } - - /** - * A protected method. - * - * @param id Some \`id\`. - */ - protected protectedMethod(id?: number) { - console.log(id); - } - - /** - * A private method. - * - * @param password Some \`password\`. - */ - private privateMethod(password: string) { - console.log(password); - } - - @Input('showKeyAlias') - public showKey: keyof T; - - @Input() - public set item(item: T[]) { - this.processedItem = item; - } - - public processedItem: T[]; -} -", - "type": "interface", - }, - ], - "miscellaneous": Object { - "enumerations": Array [ - Object { - "childs": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "Normal", - "value": "Normal", - }, - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "High", - "value": "High", - }, - ], - "ctype": "miscellaneous", - "deprecated": false, - "deprecationMessage": "", - "description": "", - "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", - "name": "ButtonAccent", - "subtype": "enum", - }, - ], - "functions": Array [], - "groupedEnumerations": Object { - "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts": Array [ - Object { - "childs": Array [ - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "Normal", - "value": "Normal", - }, - Object { - "deprecated": false, - "deprecationMessage": "", - "name": "High", - "value": "High", - }, - ], - "ctype": "miscellaneous", - "deprecated": false, - "deprecationMessage": "", - "description": "", - "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", - "name": "ButtonAccent", - "subtype": "enum", - }, - ], - }, - "groupedFunctions": Object {}, - "groupedTypeAliases": Object { - "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts": Array [ - Object { - "ctype": "miscellaneous", - "deprecated": false, - "deprecationMessage": "", - "description": "", - "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", - "kind": 183, - "name": "ButtonSize", - "rawtype": "\\"small\\" | \\"medium\\" | \\"large\\" | \\"xlarge\\"", - "subtype": "typealias", - }, - ], - }, - "groupedVariables": Object { - "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts": Array [ - Object { - "ctype": "miscellaneous", - "defaultValue": "'An exported constant'", - "deprecated": false, - "deprecationMessage": "", - "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", - "name": "exportedConstant", - "subtype": "variable", - "type": "string", - }, - ], - }, - "typealiases": Array [ - Object { - "ctype": "miscellaneous", - "deprecated": false, - "deprecationMessage": "", - "description": "", - "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", - "kind": 183, - "name": "ButtonSize", - "rawtype": "\\"small\\" | \\"medium\\" | \\"large\\" | \\"xlarge\\"", - "subtype": "typealias", - }, - ], - "variables": Array [ - Object { - "ctype": "miscellaneous", - "defaultValue": "'An exported constant'", - "deprecated": false, - "deprecationMessage": "", - "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", - "name": "exportedConstant", - "subtype": "variable", - "type": "string", - }, - ], - }, - "modules": Array [], - "pipes": Array [], - "routes": Array [], -} -`; diff --git a/addons/docs/src/frameworks/angular/__testfixtures__/doc-button/tsconfig.json b/addons/docs/src/frameworks/angular/__testfixtures__/doc-button/tsconfig.json deleted file mode 100644 index ced6b7ae2f7c..000000000000 --- a/addons/docs/src/frameworks/angular/__testfixtures__/doc-button/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../../tsconfig.json", - "compilerOptions": { - "rootDir": "." - }, - "include": ["./*.ts"] -} diff --git a/addons/docs/src/frameworks/angular/config.ts b/addons/docs/src/frameworks/angular/config.ts deleted file mode 100644 index 25f9626ec4dc..000000000000 --- a/addons/docs/src/frameworks/angular/config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { SourceType } from '../../shared'; -import { extractArgTypes, extractComponentDescription } from './compodoc'; -import { sourceDecorator } from './sourceDecorator'; -import { prepareForInline } from './prepareForInline'; - -export const parameters = { - docs: { - // probably set this to true by default once it's battle-tested - inlineStories: false, - prepareForInline, - extractArgTypes, - extractComponentDescription, - source: { - type: SourceType.DYNAMIC, - language: 'html', - }, - }, -}; - -export const decorators = [sourceDecorator]; diff --git a/addons/docs/src/frameworks/angular/prepareForInline.ts b/addons/docs/src/frameworks/angular/prepareForInline.ts deleted file mode 100644 index 3e07c842248a..000000000000 --- a/addons/docs/src/frameworks/angular/prepareForInline.ts +++ /dev/null @@ -1,43 +0,0 @@ -import React from 'react'; -import pLimit from 'p-limit'; -import { nanoid } from 'nanoid'; - -import { AngularFramework, StoryContext } from '@storybook/angular'; -import { rendererFactory } from '@storybook/angular/renderer'; -import { PartialStoryFn } from '@storybook/csf'; - -const limit = pLimit(1); - -/** - * Uses the angular renderer to generate a story. Uses p-limit to run synchronously - */ -export const prepareForInline = ( - storyFn: PartialStoryFn, - { id, parameters, component }: StoryContext -) => { - const el = React.useRef(); - - React.useEffect(() => { - (async () => { - limit(async () => { - const renderer = await rendererFactory.getRendererInstance( - `${id}-${nanoid(10)}`.toLowerCase(), - el.current - ); - if (renderer) { - await renderer.render({ - forced: false, - component, - parameters, - storyFnAngular: storyFn(), - targetDOMNode: el.current, - }); - } - }); - })(); - }); - - return React.createElement('div', { - ref: el, - }); -}; diff --git a/addons/docs/src/frameworks/angular/sourceDecorator.ts b/addons/docs/src/frameworks/angular/sourceDecorator.ts deleted file mode 100644 index 7a14b4ce64b2..000000000000 --- a/addons/docs/src/frameworks/angular/sourceDecorator.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { addons, useEffect } from '@storybook/addons'; -import { PartialStoryFn } from '@storybook/csf'; -import { StoryContext, AngularFramework } from '@storybook/angular'; -import { computesTemplateSourceFromComponent } from '@storybook/angular/renderer'; -import prettierHtml from 'prettier/parser-html'; -import prettier from 'prettier/standalone'; -import { SNIPPET_RENDERED, SourceType } from '../../shared'; - -export const skipSourceRender = (context: StoryContext) => { - const sourceParams = context?.parameters.docs?.source; - - // always render if the user forces it - if (sourceParams?.type === SourceType.DYNAMIC) { - return false; - } - // never render if the user is forcing the block to render code, or - // if the user provides code - return sourceParams?.code || sourceParams?.type === SourceType.CODE; -}; - -const prettyUp = (source: string) => { - return prettier.format(source, { - parser: 'angular', - plugins: [prettierHtml], - htmlWhitespaceSensitivity: 'ignore', - }); -}; - -/** - * Svelte source decorator. - * @param storyFn Fn - * @param context StoryContext - */ -export const sourceDecorator = ( - storyFn: PartialStoryFn, - context: StoryContext -) => { - const story = storyFn(); - if (skipSourceRender(context)) { - return story; - } - const channel = addons.getChannel(); - const { props, template, userDefinedTemplate } = story; - - const { component, argTypes } = context; - - let toEmit: string; - useEffect(() => { - if (toEmit) channel.emit(SNIPPET_RENDERED, context.id, prettyUp(template)); - }); - - if (component && !userDefinedTemplate) { - const source = computesTemplateSourceFromComponent(component, props, argTypes); - - // We might have a story with a Directive or Service defined as the component - // In these cases there might exist a template, even if we aren't able to create source from component - if (source || template) { - toEmit = prettyUp(source || template); - } - } else if (template) { - toEmit = prettyUp(template); - } - - return story; -}; diff --git a/addons/docs/src/frameworks/common/config.ts b/addons/docs/src/frameworks/common/config.ts deleted file mode 100644 index 26b8364f920d..000000000000 --- a/addons/docs/src/frameworks/common/config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { DocsContainer, DocsPage } from '../../blocks'; -import { enhanceArgTypes } from './enhanceArgTypes'; - -export const parameters = { - docs: { - inlineStories: false, - container: DocsContainer, - page: DocsPage, - iframeHeight: 100, - }, -}; - -export const argTypesEnhancers = [enhanceArgTypes]; diff --git a/addons/docs/src/frameworks/common/preset.ts b/addons/docs/src/frameworks/common/preset.ts deleted file mode 100644 index 5575e875a1d4..000000000000 --- a/addons/docs/src/frameworks/common/preset.ts +++ /dev/null @@ -1,139 +0,0 @@ -import path from 'path'; -import remarkSlug from 'remark-slug'; -import remarkExternalLinks from 'remark-external-links'; - -// @ts-ignore -import { createCompiler } from '@storybook/csf-tools/mdx'; - -const resolvedBabelLoader = require.resolve('babel-loader', { - paths: [require.resolve('@storybook/builder-webpack4')], // FIXME!!! -}); - -// for frameworks that are not working with react, we need to configure -// the jsx to transpile mdx, for now there will be a flag for that -// for more complex solutions we can find alone that we need to add '@babel/plugin-transform-react-jsx' -type BabelParams = { - babelOptions?: any; - mdxBabelOptions?: any; - configureJSX?: boolean; -}; -function createBabelOptions({ babelOptions, mdxBabelOptions, configureJSX }: BabelParams) { - const babelPlugins = mdxBabelOptions?.plugins || babelOptions?.plugins || []; - const jsxPlugin = [ - require.resolve('@babel/plugin-transform-react-jsx'), - { pragma: 'React.createElement', pragmaFrag: 'React.Fragment' }, - ]; - const plugins = configureJSX ? [...babelPlugins, jsxPlugin] : babelPlugins; - return { - // don't use the root babelrc by default (users can override this in mdxBabelOptions) - babelrc: false, - configFile: false, - ...babelOptions, - ...mdxBabelOptions, - plugins, - }; -} - -export function webpack(webpackConfig: any = {}, options: any = {}) { - const { module = {} } = webpackConfig; - // it will reuse babel options that are already in use in storybook - // also, these babel options are chained with other presets. - const { - babelOptions, - mdxBabelOptions, - configureJSX = true, - sourceLoaderOptions = { injectStoryParameters: true }, - transcludeMarkdown = false, - } = options; - - const mdxLoaderOptions = { - remarkPlugins: [remarkSlug, remarkExternalLinks], - }; - - // set `sourceLoaderOptions` to `null` to disable for manual configuration - const sourceLoader = sourceLoaderOptions - ? [ - { - test: /\.(stories|story)\.[tj]sx?$/, - loader: require.resolve('@storybook/source-loader'), - options: { ...sourceLoaderOptions, inspectLocalDependencies: true }, - enforce: 'pre', - }, - ] - : []; - - let rules = module.rules || []; - if (transcludeMarkdown) { - rules = [ - ...rules.filter((rule: any) => rule.test.toString() !== '/\\.md$/'), - { - test: /\.md$/, - use: [ - { - loader: resolvedBabelLoader, - options: createBabelOptions({ babelOptions, mdxBabelOptions, configureJSX }), - }, - { - loader: require.resolve('@mdx-js/loader'), - options: mdxLoaderOptions, - }, - ], - }, - ]; - } - - const result = { - ...webpackConfig, - module: { - ...module, - rules: [ - ...rules, - { - test: /\.js$/, - include: new RegExp(`node_modules\\${path.sep}acorn-jsx`), - use: [ - { - loader: resolvedBabelLoader, - options: { - presets: [[require.resolve('@babel/preset-env'), { modules: 'commonjs' }]], - }, - }, - ], - }, - { - test: /(stories|story)\.mdx$/, - use: [ - { - loader: resolvedBabelLoader, - options: createBabelOptions({ babelOptions, mdxBabelOptions, configureJSX }), - }, - { - loader: require.resolve('@mdx-js/loader'), - options: { - compilers: [createCompiler(options)], - ...mdxLoaderOptions, - }, - }, - ], - }, - { - test: /\.mdx$/, - exclude: /(stories|story)\.mdx$/, - use: [ - { - loader: resolvedBabelLoader, - options: createBabelOptions({ babelOptions, mdxBabelOptions, configureJSX }), - }, - { - loader: require.resolve('@mdx-js/loader'), - options: mdxLoaderOptions, - }, - ], - }, - ...sourceLoader, - ], - }, - }; - - return result; -} diff --git a/addons/docs/src/frameworks/html/config.ts b/addons/docs/src/frameworks/html/config.ts deleted file mode 100644 index 007800d5da93..000000000000 --- a/addons/docs/src/frameworks/html/config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { sourceDecorator } from './sourceDecorator'; -import { prepareForInline } from './prepareForInline'; -import { SourceType } from '../../shared'; - -export const decorators = [sourceDecorator]; - -export const parameters = { - docs: { - inlineStories: true, - prepareForInline, - source: { - type: SourceType.DYNAMIC, - language: 'html', - }, - }, -}; diff --git a/addons/docs/src/frameworks/html/sourceDecorator.test.ts b/addons/docs/src/frameworks/html/sourceDecorator.test.ts deleted file mode 100644 index 9e66c1ebd1c1..000000000000 --- a/addons/docs/src/frameworks/html/sourceDecorator.test.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { addons, StoryContext, useEffect } from '@storybook/addons'; -import { sourceDecorator } from './sourceDecorator'; -import { SNIPPET_RENDERED } from '../../shared'; - -jest.mock('@storybook/addons'); -const mockedAddons = addons as jest.Mocked; -const mockedUseEffect = useEffect as jest.Mocked; - -expect.addSnapshotSerializer({ - print: (val: any) => val, - test: (val) => typeof val === 'string', -}); - -const tick = () => new Promise((r) => setTimeout(r, 0)); - -const makeContext = (name: string, parameters: any, args: any, extra?: object): StoryContext => ({ - id: `html-test--${name}`, - kind: 'js-text', - name, - parameters, - args, - argTypes: {}, - globals: {}, - ...extra, -}); - -describe('sourceDecorator', () => { - let mockChannel: { on: jest.Mock; emit?: jest.Mock }; - beforeEach(() => { - mockedAddons.getChannel.mockReset(); - mockedUseEffect.mockImplementation((cb) => setTimeout(cb, 0)); - - mockChannel = { on: jest.fn(), emit: jest.fn() }; - mockedAddons.getChannel.mockReturnValue(mockChannel as any); - }); - - it('should render dynamically for args stories', async () => { - const storyFn = (args: any) => `
args story
`; - const context = makeContext('args', { __isArgsStory: true }, {}); - sourceDecorator(storyFn, context); - await tick(); - expect(mockChannel.emit).toHaveBeenCalledWith( - SNIPPET_RENDERED, - 'html-test--args', - '
args story
' - ); - }); - - it('should dedent source by default', async () => { - const storyFn = (args: any) => ` -
- args story -
- `; - const context = makeContext('args', { __isArgsStory: true }, {}); - sourceDecorator(storyFn, context); - await tick(); - expect(mockChannel.emit).toHaveBeenCalledWith( - SNIPPET_RENDERED, - 'html-test--args', - ['
', ' args story', '
'].join('\n') - ); - }); - - it('should skip dynamic rendering for no-args stories', async () => { - const storyFn = () => `
classic story
`; - const context = makeContext('classic', {}, {}); - sourceDecorator(storyFn, context); - await tick(); - expect(mockChannel.emit).not.toHaveBeenCalled(); - }); - - it('should use the originalStoryFn if excludeDecorators is set', async () => { - const storyFn = (args: any) => `
args story
`; - const decoratedStoryFn = (args: any) => ` -
${storyFn(args)}
- `; - const context = makeContext( - 'args', - { - __isArgsStory: true, - docs: { - source: { - excludeDecorators: true, - }, - }, - }, - {}, - { originalStoryFn: storyFn } - ); - sourceDecorator(decoratedStoryFn, context); - await tick(); - expect(mockChannel.emit).toHaveBeenCalledWith( - SNIPPET_RENDERED, - 'html-test--args', - '
args story
' - ); - }); - - it('allows the snippet output to be modified by transformSource', async () => { - const storyFn = (args: any) => `
args story
`; - const transformSource = (dom: string) => `

${dom}

`; - const docs = { transformSource }; - const context = makeContext('args', { __isArgsStory: true, docs }, {}); - sourceDecorator(storyFn, context); - await tick(); - expect(mockChannel.emit).toHaveBeenCalledWith( - SNIPPET_RENDERED, - 'html-test--args', - '

args story

' - ); - }); - - it('provides the story context to transformSource', () => { - const storyFn = (args: any) => `
args story
`; - const transformSource = jest.fn((x) => x); - const docs = { transformSource }; - const context = makeContext('args', { __isArgsStory: true, docs }, {}); - sourceDecorator(storyFn, context); - expect(transformSource).toHaveBeenCalledWith('
args story
', context); - }); -}); diff --git a/addons/docs/src/frameworks/html/sourceDecorator.ts b/addons/docs/src/frameworks/html/sourceDecorator.ts deleted file mode 100644 index 16252f813c38..000000000000 --- a/addons/docs/src/frameworks/html/sourceDecorator.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* global window */ -import { addons, useEffect } from '@storybook/addons'; -import { ArgsStoryFn, PartialStoryFn, StoryContext } from '@storybook/csf'; -import dedent from 'ts-dedent'; -import { HtmlFramework } from '@storybook/html'; - -import { SNIPPET_RENDERED, SourceType } from '../../shared'; - -function skipSourceRender(context: StoryContext) { - const sourceParams = context?.parameters.docs?.source; - const isArgsStory = context?.parameters.__isArgsStory; - - // always render if the user forces it - if (sourceParams?.type === SourceType.DYNAMIC) { - return false; - } - - // never render if the user is forcing the block to render code, or - // if the user provides code, or if it's not an args story. - return !isArgsStory || sourceParams?.code || sourceParams?.type === SourceType.CODE; -} - -// By default, just remove indentation -function defaultTransformSource(source: string) { - // Have to wrap dedent so it doesn't serialize the context - return dedent(source); -} - -function applyTransformSource(source: string, context: StoryContext): string { - const docs = context.parameters.docs ?? {}; - const transformSource = docs.transformSource ?? defaultTransformSource; - return transformSource(source, context); -} - -export function sourceDecorator( - storyFn: PartialStoryFn, - context: StoryContext -) { - const story = context?.parameters.docs?.source?.excludeDecorators - ? (context.originalStoryFn as ArgsStoryFn)(context.args, context) - : storyFn(); - - let source: string; - if (typeof story === 'string' && !skipSourceRender(context)) { - source = applyTransformSource(story, context); - } - useEffect(() => { - if (source) addons.getChannel().emit(SNIPPET_RENDERED, context.id, source); - }); - - return story; -} diff --git a/addons/docs/src/frameworks/react/config.ts b/addons/docs/src/frameworks/react/config.ts deleted file mode 100644 index 28ef4afc0e47..000000000000 --- a/addons/docs/src/frameworks/react/config.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { PartialStoryFn } from '@storybook/csf'; -import { ReactFramework } from '@storybook/react'; - -import { extractArgTypes } from './extractArgTypes'; -import { extractComponentDescription } from '../../lib/docgen'; -import { jsxDecorator } from './jsxDecorator'; - -export const parameters = { - docs: { - inlineStories: true, - // NOTE: that the result is a react element. Hooks support is provided by the outer code. - prepareForInline: (storyFn: PartialStoryFn) => storyFn(), - extractArgTypes, - extractComponentDescription, - }, -}; - -export const decorators = [jsxDecorator]; diff --git a/addons/docs/src/frameworks/react/extractArgTypes.ts b/addons/docs/src/frameworks/react/extractArgTypes.ts deleted file mode 100644 index e86dcaa99b88..000000000000 --- a/addons/docs/src/frameworks/react/extractArgTypes.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { StrictArgTypes } from '@storybook/csf'; -import { PropDef, ArgTypesExtractor } from '../../lib/docgen'; -import { extractProps } from './extractProps'; - -export const extractArgTypes: ArgTypesExtractor = (component) => { - if (component) { - const { rows } = extractProps(component); - if (rows) { - return rows.reduce((acc: StrictArgTypes, row: PropDef) => { - const { - name, - description, - type, - sbType, - defaultValue: defaultSummary, - jsDocTags, - required, - } = row; - - acc[name] = { - name, - description, - type: { required, ...sbType }, - table: { - type, - jsDocTags, - defaultValue: defaultSummary, - }, - }; - return acc; - }, {}); - } - } - - return null; -}; diff --git a/addons/docs/src/frameworks/react/lib/defaultValues/createDefaultValue.ts b/addons/docs/src/frameworks/react/lib/defaultValues/createDefaultValue.ts deleted file mode 100644 index c4cd930e1011..000000000000 --- a/addons/docs/src/frameworks/react/lib/defaultValues/createDefaultValue.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { PropDefaultValue } from '@storybook/components'; -import { FUNCTION_CAPTION, ELEMENT_CAPTION } from '../captions'; -import { - InspectionFunction, - InspectionResult, - InspectionType, - InspectionElement, - InspectionIdentifiableInferedType, - inspectValue, -} from '../inspection'; -import { isHtmlTag } from '../isHtmlTag'; -import { createSummaryValue, isTooLongForDefaultValueSummary } from '../../../../lib'; -import { generateCode } from '../generateCode'; -import { generateObject } from './generateObject'; -import { generateArray } from './generateArray'; -import { getPrettyIdentifier } from './prettyIdentifier'; - -function generateFunc({ inferredType, ast }: InspectionResult): PropDefaultValue { - const { identifier } = inferredType as InspectionFunction; - - if (identifier != null) { - return createSummaryValue( - getPrettyIdentifier(inferredType as InspectionIdentifiableInferedType), - generateCode(ast) - ); - } - - const prettyCaption = generateCode(ast, true); - - return !isTooLongForDefaultValueSummary(prettyCaption) - ? createSummaryValue(prettyCaption) - : createSummaryValue(FUNCTION_CAPTION, generateCode(ast)); -} - -// All elements are JSX elements. -// JSX elements are not supported by escodegen. -function generateElement( - defaultValue: string, - inspectionResult: InspectionResult -): PropDefaultValue { - const { inferredType } = inspectionResult; - const { identifier } = inferredType as InspectionElement; - - if (identifier != null) { - if (!isHtmlTag(identifier)) { - const prettyIdentifier = getPrettyIdentifier( - inferredType as InspectionIdentifiableInferedType - ); - - return createSummaryValue(prettyIdentifier, defaultValue); - } - } - - return !isTooLongForDefaultValueSummary(defaultValue) - ? createSummaryValue(defaultValue) - : createSummaryValue(ELEMENT_CAPTION, defaultValue); -} - -export function createDefaultValue(defaultValue: string): PropDefaultValue { - try { - const inspectionResult = inspectValue(defaultValue); - - switch (inspectionResult.inferredType.type) { - case InspectionType.OBJECT: - return generateObject(inspectionResult); - case InspectionType.FUNCTION: - return generateFunc(inspectionResult); - case InspectionType.ELEMENT: - return generateElement(defaultValue, inspectionResult); - case InspectionType.ARRAY: - return generateArray(inspectionResult); - default: - return null; - } - } catch (e) { - // eslint-disable-next-line no-console - console.error(e); - } - - return null; -} diff --git a/addons/docs/src/frameworks/react/propTypes/createType.ts b/addons/docs/src/frameworks/react/propTypes/createType.ts deleted file mode 100644 index 6af9bc582898..000000000000 --- a/addons/docs/src/frameworks/react/propTypes/createType.ts +++ /dev/null @@ -1,409 +0,0 @@ -import { PropType } from '@storybook/components'; -import { createSummaryValue, isTooLongForTypeSummary } from '../../../lib'; -import { ExtractedProp, DocgenPropType } from '../../../lib/docgen'; -import { - generateFuncSignature, - generateShortFuncSignature, - toMultilineSignature, -} from './generateFuncSignature'; -import { - OBJECT_CAPTION, - ARRAY_CAPTION, - CLASS_CAPTION, - FUNCTION_CAPTION, - ELEMENT_CAPTION, - CUSTOM_CAPTION, - isHtmlTag, - generateObjectCode, - generateCode, -} from '../lib'; -import { - InspectionType, - inspectValue, - InspectionElement, - InspectionObject, - InspectionArray, -} from '../lib/inspection'; - -const MAX_FUNC_LENGTH = 150; - -enum PropTypesType { - CUSTOM = 'custom', - ANY = 'any', - FUNC = 'func', - SHAPE = 'shape', - OBJECT = 'object', - INSTANCEOF = 'instanceOf', - OBJECTOF = 'objectOf', - UNION = 'union', - ENUM = 'enum', - ARRAYOF = 'arrayOf', - ELEMENT = 'element', - ELEMENTTYPE = 'elementType', - NODE = 'node', -} - -interface EnumValue { - value: string; - computed: boolean; -} - -interface TypeDef { - name: string; - short: string; - compact: string; - full: string; - inferredType?: InspectionType; -} - -function createTypeDef({ - name, - short, - compact, - full, - inferredType, -}: { - name: string; - short: string; - compact: string; - full?: string; - inferredType?: InspectionType; -}): TypeDef { - return { - name, - short, - compact, - full: full != null ? full : short, - inferredType, - }; -} - -function cleanPropTypes(value: string): string { - return value.replace(/PropTypes./g, '').replace(/.isRequired/g, ''); -} - -function splitIntoLines(value: string): string[] { - return value.split(/\r?\n/); -} - -function prettyObject(ast: any, compact = false): string { - return cleanPropTypes(generateObjectCode(ast, compact)); -} - -function prettyArray(ast: any, compact = false): string { - return cleanPropTypes(generateCode(ast, compact)); -} - -function getCaptionForInspectionType(type: InspectionType): string { - switch (type) { - case InspectionType.OBJECT: - return OBJECT_CAPTION; - case InspectionType.ARRAY: - return ARRAY_CAPTION; - case InspectionType.CLASS: - return CLASS_CAPTION; - case InspectionType.FUNCTION: - return FUNCTION_CAPTION; - case InspectionType.ELEMENT: - return ELEMENT_CAPTION; - default: - return CUSTOM_CAPTION; - } -} - -function generateTypeFromString(value: string, originalTypeName: string): TypeDef { - const { inferredType, ast } = inspectValue(value); - const { type } = inferredType; - - let short; - let compact; - let full; - - switch (type) { - case InspectionType.IDENTIFIER: - case InspectionType.LITERAL: - short = value; - compact = value; - break; - case InspectionType.OBJECT: { - const { depth } = inferredType as InspectionObject; - - short = OBJECT_CAPTION; - compact = depth === 1 ? prettyObject(ast, true) : null; - full = prettyObject(ast); - break; - } - case InspectionType.ELEMENT: { - const { identifier } = inferredType as InspectionElement; - - short = identifier != null && !isHtmlTag(identifier) ? identifier : ELEMENT_CAPTION; - compact = splitIntoLines(value).length === 1 ? value : null; - full = value; - break; - } - case InspectionType.ARRAY: { - const { depth } = inferredType as InspectionArray; - - short = ARRAY_CAPTION; - compact = depth <= 2 ? prettyArray(ast, true) : null; - full = prettyArray(ast); - break; - } - default: - short = getCaptionForInspectionType(type); - compact = splitIntoLines(value).length === 1 ? value : null; - full = value; - break; - } - - return createTypeDef({ - name: originalTypeName, - short, - compact, - full, - inferredType: type, - }); -} - -function generateCustom({ raw }: DocgenPropType): TypeDef { - if (raw != null) { - return generateTypeFromString(raw, PropTypesType.CUSTOM); - } - - return createTypeDef({ - name: PropTypesType.CUSTOM, - short: CUSTOM_CAPTION, - compact: CUSTOM_CAPTION, - }); -} - -function generateFunc(extractedProp: ExtractedProp): TypeDef { - const { jsDocTags } = extractedProp; - - if (jsDocTags != null) { - if (jsDocTags.params != null || jsDocTags.returns != null) { - return createTypeDef({ - name: PropTypesType.FUNC, - short: generateShortFuncSignature(jsDocTags.params, jsDocTags.returns), - compact: null, - full: generateFuncSignature(jsDocTags.params, jsDocTags.returns), - }); - } - } - - return createTypeDef({ - name: PropTypesType.FUNC, - short: FUNCTION_CAPTION, - compact: FUNCTION_CAPTION, - }); -} - -function generateShape(type: DocgenPropType, extractedProp: ExtractedProp): TypeDef { - const fields = Object.keys(type.value) - .map((key: string) => `${key}: ${generateType(type.value[key], extractedProp).full}`) - .join(', '); - - const { inferredType, ast } = inspectValue(`{ ${fields} }`); - const { depth } = inferredType as InspectionObject; - - return createTypeDef({ - name: PropTypesType.SHAPE, - short: OBJECT_CAPTION, - compact: depth === 1 && ast ? prettyObject(ast, true) : null, - full: ast ? prettyObject(ast) : null, - }); -} - -function objectOf(of: string): string { - return `objectOf(${of})`; -} - -function generateObjectOf(type: DocgenPropType, extractedProp: ExtractedProp): TypeDef { - const { short, compact, full } = generateType(type.value, extractedProp); - - return createTypeDef({ - name: PropTypesType.OBJECTOF, - short: objectOf(short), - compact: compact != null ? objectOf(compact) : null, - full: objectOf(full), - }); -} - -function generateUnion(type: DocgenPropType, extractedProp: ExtractedProp): TypeDef { - if (Array.isArray(type.value)) { - const values = type.value.reduce( - (acc: any, v: any) => { - const { short, compact, full } = generateType(v, extractedProp); - - acc.short.push(short); - acc.compact.push(compact); - acc.full.push(full); - - return acc; - }, - { short: [], compact: [], full: [] } - ); - - return createTypeDef({ - name: PropTypesType.UNION, - short: values.short.join(' | '), - compact: values.compact.every((x: string) => x != null) ? values.compact.join(' | ') : null, - full: values.full.join(' | '), - }); - } - - return createTypeDef({ name: PropTypesType.UNION, short: type.value, compact: null }); -} - -function generateEnumValue({ value, computed }: EnumValue): TypeDef { - return computed - ? generateTypeFromString(value, 'enumvalue') - : createTypeDef({ name: 'enumvalue', short: value, compact: value }); -} - -function generateEnum(type: DocgenPropType): TypeDef { - if (Array.isArray(type.value)) { - const values = type.value.reduce( - (acc: any, v: EnumValue) => { - const { short, compact, full } = generateEnumValue(v); - - acc.short.push(short); - acc.compact.push(compact); - acc.full.push(full); - - return acc; - }, - { short: [], compact: [], full: [] } - ); - - return createTypeDef({ - name: PropTypesType.ENUM, - short: values.short.join(' | '), - compact: values.compact.every((x: string) => x != null) ? values.compact.join(' | ') : null, - full: values.full.join(' | '), - }); - } - - return createTypeDef({ name: PropTypesType.ENUM, short: type.value, compact: type.value }); -} - -function braceAfter(of: string): string { - return `${of}[]`; -} - -function braceAround(of: string): string { - return `[${of}]`; -} - -function createArrayOfObjectTypeDef(short: string, compact: string, full: string): TypeDef { - return createTypeDef({ - name: PropTypesType.ARRAYOF, - short: braceAfter(short), - compact: compact != null ? braceAround(compact) : null, - full: braceAround(full), - }); -} - -function generateArray(type: DocgenPropType, extractedProp: ExtractedProp): TypeDef { - const { name, short, compact, full, inferredType } = generateType(type.value, extractedProp); - - if (name === PropTypesType.CUSTOM) { - if (inferredType === InspectionType.OBJECT) { - return createArrayOfObjectTypeDef(short, compact, full); - } - } else if (name === PropTypesType.SHAPE) { - return createArrayOfObjectTypeDef(short, compact, full); - } - - return createTypeDef({ - name: PropTypesType.ARRAYOF, - short: braceAfter(short), - compact: braceAfter(short), - }); -} - -function generateType(type: DocgenPropType, extractedProp: ExtractedProp): TypeDef { - try { - switch (type.name) { - case PropTypesType.CUSTOM: - return generateCustom(type); - case PropTypesType.FUNC: - return generateFunc(extractedProp); - case PropTypesType.SHAPE: - return generateShape(type, extractedProp); - case PropTypesType.INSTANCEOF: - return createTypeDef({ - name: PropTypesType.INSTANCEOF, - short: type.value, - compact: type.value, - }); - case PropTypesType.OBJECTOF: - return generateObjectOf(type, extractedProp); - case PropTypesType.UNION: - return generateUnion(type, extractedProp); - case PropTypesType.ENUM: - return generateEnum(type); - case PropTypesType.ARRAYOF: - return generateArray(type, extractedProp); - default: - return createTypeDef({ name: type.name, short: type.name, compact: type.name }); - } - } catch (e) { - // eslint-disable-next-line no-console - console.error(e); - } - - return createTypeDef({ name: 'unknown', short: 'unknown', compact: 'unknown' }); -} - -export function createType(extractedProp: ExtractedProp): PropType { - const { type } = extractedProp.docgenInfo; - - // A type could be null if a defaultProp has been provided without a type definition. - if (type == null) { - return null; - } - - try { - switch (type.name) { - case PropTypesType.CUSTOM: - case PropTypesType.SHAPE: - case PropTypesType.INSTANCEOF: - case PropTypesType.OBJECTOF: - case PropTypesType.UNION: - case PropTypesType.ENUM: - case PropTypesType.ARRAYOF: { - const { short, compact, full } = generateType(type, extractedProp); - - if (compact != null) { - if (!isTooLongForTypeSummary(compact)) { - return createSummaryValue(compact); - } - } - - return createSummaryValue(short, full); - } - case PropTypesType.FUNC: { - const { short, full } = generateType(type, extractedProp); - - let summary = short; - let detail; - - if (full.length < MAX_FUNC_LENGTH) { - summary = full; - } else { - detail = toMultilineSignature(full); - } - - return createSummaryValue(summary, detail); - } - default: - return null; - } - } catch (e) { - // eslint-disable-next-line no-console - console.error(e); - } - - return null; -} diff --git a/addons/docs/src/frameworks/react/propTypes/handleProp.test.tsx b/addons/docs/src/frameworks/react/propTypes/handleProp.test.tsx deleted file mode 100644 index dcbcecb5e16d..000000000000 --- a/addons/docs/src/frameworks/react/propTypes/handleProp.test.tsx +++ /dev/null @@ -1,1480 +0,0 @@ -/* eslint-disable no-underscore-dangle */ - -import PropTypes from 'prop-types'; -import React from 'react'; -import { Component } from '../../../blocks/types'; -import { - PropDef, - extractComponentProps, - DocgenInfo, - DocgenPropDefaultValue, -} from '../../../lib/docgen'; -import { enhancePropTypesProp, enhancePropTypesProps } from './handleProp'; - -const DOCGEN_SECTION = 'props'; - -function ReactComponent() { - return
React Component!
; -} - -function createDocgenSection(docgenInfo: DocgenInfo): Record { - return { - [DOCGEN_SECTION]: { - ...docgenInfo, - }, - }; -} - -function createDocgenProp({ - name, - type, - ...others -}: Partial & { name: string }): Record { - return { - [name]: { - type, - required: false, - ...others, - }, - }; -} - -// eslint-disable-next-line react/forbid-foreign-prop-types -function createComponent({ propTypes = {}, defaultProps = {}, docgenInfo = {} }): Component { - const component = () => { - return
Hey!
; - }; - component.propTypes = propTypes; - component.defaultProps = defaultProps; - - // @ts-ignore - component.__docgenInfo = createDocgenSection(docgenInfo); - - return component; -} - -function createDefaultValue(defaultValue: string): DocgenPropDefaultValue { - return { value: defaultValue }; -} - -function extractPropDef(component: Component, rawDefaultProp?: any): PropDef { - return enhancePropTypesProp(extractComponentProps(component, DOCGEN_SECTION)[0], rawDefaultProp); -} - -describe('enhancePropTypesProp', () => { - describe('type', () => { - function createTestComponent(docgenInfo: Partial): Component { - return createComponent({ - docgenInfo: { - ...createDocgenProp({ name: 'prop', ...docgenInfo }), - }, - }); - } - - describe('custom', () => { - describe('when raw value is available', () => { - it('should support literal', () => { - const component = createTestComponent({ - type: { - name: 'custom', - raw: 'MY_LITERAL', - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('MY_LITERAL'); - expect(type.detail).toBeUndefined(); - }); - - it('should support short object', () => { - const component = createTestComponent({ - type: { - name: 'custom', - raw: '{\n text: PropTypes.string.isRequired,\n}', - }, - }); - - const { type } = extractPropDef(component); - - const expectedSummary = '{ text: string }'; - - expect(type.summary.replace(/\s/g, '')).toBe(expectedSummary.replace(/\s/g, '')); - expect(type.detail).toBeUndefined(); - }); - - it('should support long object', () => { - const component = createTestComponent({ - type: { - name: 'custom', - raw: - '{\n text: PropTypes.string.isRequired,\n value1: PropTypes.string.isRequired,\n value2: PropTypes.string.isRequired,\n value3: PropTypes.string.isRequired,\n value4: PropTypes.string.isRequired,\n}', - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('object'); - - const expectedDetail = `{ - text: string, - value1: string, - value2: string, - value3: string, - value4: string - }`; - - expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should not have a deep object as summary', () => { - const component = createTestComponent({ - type: { - name: 'custom', - raw: '{\n foo: { bar: PropTypes.string.isRequired,\n }}', - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('object'); - }); - - it('should use identifier of a React element when available', () => { - const component = createTestComponent({ - type: { - name: 'custom', - raw: - 'function InlinedFunctionalComponent() {\n return
Inlined FunctionalComponent!
;\n}', - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('InlinedFunctionalComponent'); - - const expectedDetail = `function InlinedFunctionalComponent() { - return
Inlined FunctionalComponent!
; - }`; - - expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should not use identifier of a HTML element', () => { - const component = createTestComponent({ - type: { - name: 'custom', - raw: - '
Hello world from Montreal, Quebec, Canada!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
', - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('element'); - - const expectedDetail = - '
Hello world from Montreal, Quebec, Canada!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
'; - - expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should support element without identifier', () => { - const component = createTestComponent({ - type: { - name: 'custom', - raw: '() => {\n return
Inlined FunctionalComponent!
;\n}', - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('element'); - - const expectedDetail = `() => { - return
Inlined FunctionalComponent!
; - }`; - - expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - describe('when it is not a known type', () => { - it('should return "custom" when its a long type', () => { - const component = createTestComponent({ - type: { - name: 'custom', - raw: - 'Symbol("A very very very very very very lonnnngggggggggggggggggggggggggggggggggggg symbol")', - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('custom'); - expect(type.detail).toBe( - 'Symbol("A very very very very very very lonnnngggggggggggggggggggggggggggggggggggg symbol")' - ); - }); - - it('should return "custom" when its a short type', () => { - const component = createTestComponent({ - type: { - name: 'custom', - raw: 'Symbol("Hey!")', - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('Symbol("Hey!")'); - expect(type.detail).toBeUndefined(); - }); - }); - }); - - it("should return 'custom' when there is no raw value", () => { - const component = createTestComponent({ - type: { - name: 'custom', - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('custom'); - }); - }); - - [ - 'any', - 'bool', - 'string', - 'number', - 'symbol', - 'object', - 'element', - 'elementType', - 'node', - ].forEach((x) => { - it(`should return '${x}' when type is ${x}`, () => { - const component = createTestComponent({ - type: { - name: x, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe(x); - }); - }); - - it('should support short shape', () => { - const component = createTestComponent({ - type: { - name: 'shape', - value: { - foo: { - name: 'string', - required: false, - }, - }, - }, - }); - - const { type } = extractPropDef(component); - - const expectedSummary = '{ foo: string }'; - - expect(type.summary.replace(/\s/g, '')).toBe(expectedSummary.replace(/\s/g, '')); - expect(type.detail).toBeUndefined(); - }); - - it('should support long shape', () => { - const component = createTestComponent({ - type: { - name: 'shape', - value: { - foo: { - name: 'string', - required: false, - }, - bar: { - name: 'string', - required: false, - }, - another: { - name: 'string', - required: false, - }, - another2: { - name: 'string', - required: false, - }, - another3: { - name: 'string', - required: false, - }, - another4: { - name: 'string', - required: false, - }, - }, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('object'); - - const expectedDetail = `{ - foo: string, - bar: string, - another: string, - another2: string, - another3: string, - another4: string - }`; - - expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should not have a deep shape as summary', () => { - const component = createTestComponent({ - type: { - name: 'shape', - value: { - bar: { - name: 'shape', - value: { - hey: { - name: 'string', - required: false, - }, - }, - required: false, - }, - }, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('object'); - }); - - it('should support enum of string', () => { - const component = createTestComponent({ - type: { - name: 'enum', - value: [ - { - value: "'News'", - computed: false, - }, - { - value: "'Photos'", - computed: false, - }, - ], - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe("'News' | 'Photos'"); - }); - - it('should support enum of object', () => { - const component = createTestComponent({ - type: { - name: 'enum', - value: [ - { - value: - '{\n text: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n}', - computed: true, - }, - { - value: - '{\n foo: PropTypes.string,\n bar: PropTypes.string,\n hey: PropTypes.string,\n ho: PropTypes.string,\n}', - computed: true, - }, - ], - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('object | object'); - - const expectedDetail = `{ - text: string, - value: string - } | { - foo: string, - bar: string, - hey: string, - ho: string - }`; - - expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should support short object in enum summary', () => { - const component = createTestComponent({ - type: { - name: 'enum', - value: [ - { - value: '{\n text: PropTypes.string.isRequired,\n}', - computed: true, - }, - { - value: '{\n foo: PropTypes.string,\n}', - computed: true, - }, - ], - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('{ text: string } | { foo: string }'); - }); - - it('should not have a deep object in an enum summary', () => { - const component = createTestComponent({ - type: { - name: 'enum', - value: [ - { - value: '{\n text: { foo: PropTypes.string.isRequired,\n }\n}', - computed: true, - }, - { - value: '{\n foo: PropTypes.string,\n}', - computed: true, - }, - ], - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('object | object'); - }); - - it('should support enum of element', () => { - const component = createTestComponent({ - type: { - name: 'enum', - value: [ - { - value: '() => {\n return
FunctionalComponent!
;\n}', - computed: true, - }, - { - value: - 'class ClassComponent extends React.PureComponent {\n render() {\n return
ClassComponent!
;\n }\n}', - computed: true, - }, - ], - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('element | ClassComponent'); - - const expectedDetail = `() => { - return
FunctionalComponent!
; - } | class ClassComponent extends React.PureComponent { - render() { - return
ClassComponent!
; - } - }`; - - expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - describe('func', () => { - it('should return "func" when the prop dont have a description', () => { - const component = createTestComponent({ - type: { - name: 'func', - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('func'); - }); - - it('should return "func" when the prop have a description without JSDoc tags', () => { - const component = createTestComponent({ - type: { - name: 'func', - }, - description: 'Hey! Hey!', - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('func'); - }); - - it('should return a func signature when there is JSDoc tags.', () => { - const component = createTestComponent({ - type: { - name: 'func', - }, - description: '@param event\n@param data\n@returns {string}', - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('(event, data) => string'); - }); - }); - - it('should return the instance type when type is instanceOf', () => { - const component = createTestComponent({ - type: { - name: 'instanceOf', - value: 'Set', - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('Set'); - }); - - describe('objectOf', () => { - it('should support objectOf primitive', () => { - const component = createTestComponent({ - type: { - name: 'objectOf', - value: { - name: 'number', - }, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('objectOf(number)'); - expect(type.detail).toBeUndefined(); - }); - - it('should support objectOf of identifier', () => { - const component = createTestComponent({ - type: { - name: 'objectOf', - value: { - name: 'custom', - raw: 'NAMED_OBJECT', - }, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('objectOf(NAMED_OBJECT)'); - expect(type.detail).toBeUndefined(); - }); - - it('should support objectOf short object', () => { - const component = createTestComponent({ - type: { - name: 'objectOf', - value: { - name: 'custom', - raw: '{\n foo: PropTypes.string,\n}', - }, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('objectOf({ foo: string })'); - expect(type.detail).toBeUndefined(); - }); - - it('should support objectOf long object', () => { - const component = createTestComponent({ - type: { - name: 'objectOf', - value: { - name: 'custom', - raw: - '{\n foo: PropTypes.string,\n bar: PropTypes.string,\n another: PropTypes.string,\n anotherAnother: PropTypes.string,\n}', - }, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('objectOf(object)'); - - const expectedDetail = `objectOf({ - foo: string, - bar: string, - another: string, - anotherAnother: string - })`; - - expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should not have deep object in summary', () => { - const component = createTestComponent({ - type: { - name: 'objectOf', - value: { - name: 'custom', - raw: '{\n foo: { bar: PropTypes.string,\n }\n}', - }, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('objectOf(object)'); - }); - - it('should support objectOf short shape', () => { - const component = createTestComponent({ - type: { - name: 'objectOf', - value: { - name: 'shape', - value: { - foo: { - name: 'string', - required: false, - }, - }, - }, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('objectOf({ foo: string })'); - expect(type.detail).toBeUndefined(); - }); - - it('should support objectOf long shape', () => { - const component = createTestComponent({ - type: { - name: 'objectOf', - value: { - name: 'shape', - value: { - foo: { - name: 'string', - required: false, - }, - bar: { - name: 'string', - required: false, - }, - another: { - name: 'string', - required: false, - }, - anotherAnother: { - name: 'string', - required: false, - }, - }, - }, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('objectOf(object)'); - - const expectedDetail = `objectOf({ - foo: string, - bar: string, - another: string, - anotherAnother: string - })`; - - expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should not have a deep shape in summary', () => { - const component = createTestComponent({ - type: { - name: 'objectOf', - value: { - name: 'shape', - value: { - bar: { - name: 'shape', - value: { - hey: { - name: 'string', - required: false, - }, - }, - required: false, - }, - }, - }, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('objectOf(object)'); - }); - }); - - it('should support union', () => { - const component = createTestComponent({ - type: { - name: 'union', - value: [ - { - name: 'string', - }, - { - name: 'instanceOf', - value: 'Set', - }, - ], - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('string | Set'); - expect(type.detail).toBeUndefined(); - }); - - describe('array', () => { - it('should support array of primitive', () => { - const component = createTestComponent({ - type: { - name: 'arrayOf', - value: { - name: 'number', - }, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('number[]'); - expect(type.detail).toBeUndefined(); - }); - - it('should support array of identifier', () => { - const component = createTestComponent({ - type: { - name: 'arrayOf', - value: { - name: 'custom', - raw: 'NAMED_OBJECT', - }, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('NAMED_OBJECT[]'); - expect(type.detail).toBeUndefined(); - }); - - it('should support array of short object', () => { - const component = createTestComponent({ - type: { - name: 'arrayOf', - value: { - name: 'custom', - raw: '{\n foo: PropTypes.string,\n}', - }, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('[{ foo: string }]'); - expect(type.detail).toBeUndefined(); - }); - - it('should support array of long object', () => { - const component = createTestComponent({ - type: { - name: 'arrayOf', - value: { - name: 'custom', - raw: - '{\n text: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n another: PropTypes.string.isRequired,\n another2: PropTypes.string.isRequired,\n another3: PropTypes.string.isRequired,\n another4: PropTypes.string.isRequired,\n}', - }, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('object[]'); - - const expectedDetail = `[{ - text: string, - value: string, - another: string, - another2: string, - another3: string, - another4: string - }]`; - - expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should not have deep object in summary', () => { - const component = createTestComponent({ - type: { - name: 'arrayOf', - value: { - name: 'custom', - raw: '{\n foo: { bar: PropTypes.string, }\n}', - }, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('object[]'); - }); - - it('should support array of short shape', () => { - const component = createTestComponent({ - type: { - name: 'arrayOf', - value: { - name: 'shape', - value: { - foo: { - name: 'string', - required: false, - }, - }, - }, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('[{ foo: string }]'); - expect(type.detail).toBeUndefined(); - }); - - it('should support array of long shape', () => { - const component = createTestComponent({ - type: { - name: 'arrayOf', - value: { - name: 'shape', - value: { - foo: { - name: 'string', - required: false, - }, - bar: { - name: 'string', - required: false, - }, - another: { - name: 'string', - required: false, - }, - another2: { - name: 'string', - required: false, - }, - another3: { - name: 'string', - required: false, - }, - another4: { - name: 'string', - required: false, - }, - }, - }, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('object[]'); - - const expectedDetail = `[{ - foo: string, - bar: string, - another: string, - another2: string, - another3: string, - another4: string - }]`; - - expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should not have deep shape in summary', () => { - const component = createTestComponent({ - type: { - name: 'arrayOf', - value: { - name: 'shape', - value: { - bar: { - name: 'shape', - value: { - hey: { - name: 'string', - required: false, - }, - }, - required: false, - }, - }, - }, - }, - }); - - const { type } = extractPropDef(component); - - expect(type.summary).toBe('object[]'); - }); - }); - }); - - describe('defaultValue', () => { - function createTestComponent( - defaultValue: DocgenPropDefaultValue, - typeName = 'anything-is-fine' - ): Component { - return createComponent({ - docgenInfo: { - ...createDocgenProp({ - name: 'prop', - type: { name: typeName }, - defaultValue, - }), - }, - }); - } - - it('should support short object', () => { - const component = createTestComponent(createDefaultValue("{ foo: 'foo', bar: 'bar' }")); - - const { defaultValue } = extractPropDef(component); - - const expectedSummary = "{ foo: 'foo', bar: 'bar' }"; - - expect(defaultValue.summary.replace(/\s/g, '')).toBe(expectedSummary.replace(/\s/g, '')); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support long object', () => { - const component = createTestComponent( - createDefaultValue("{ foo: 'foo', bar: 'bar', another: 'another' }") - ); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('object'); - - const expectedDetail = `{ - foo: 'foo', - bar: 'bar', - another: 'another' - }`; - - expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should not have deep object in summary', () => { - const component = createTestComponent( - createDefaultValue("{ foo: 'foo', bar: { hey: 'ho' } }") - ); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('object'); - }); - - it('should support short function', () => { - const component = createTestComponent(createDefaultValue('() => {}')); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('() => {}'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support long function', () => { - const component = createTestComponent( - createDefaultValue( - '(foo, bar) => {\n const concat = foo + bar;\n const append = concat + " hey!";\n \n return append;\n}' - ) - ); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('func'); - - const expectedDetail = `(foo, bar) => { - const concat = foo + bar; - const append = concat + ' hey!'; - return append - }`; - - expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should use the name of function when available and indicate that args are present', () => { - const component = createTestComponent( - createDefaultValue('function concat(a, b) {\n return a + b;\n}') - ); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('concat( ... )'); - - const expectedDetail = `function concat(a, b) { - return a + b - }`; - - expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should use the name of function when available', () => { - const component = createTestComponent( - createDefaultValue('function hello() {\n return "hello";\n}') - ); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('hello()'); - - const expectedDetail = `function hello() { - return 'hello' - }`; - - expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should support short element', () => { - const component = createTestComponent(createDefaultValue('
Hey!
')); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('
Hey!
'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support long element', () => { - const component = createTestComponent( - createDefaultValue( - '
Hey! Hey! Hey!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
' - ) - ); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('element'); - expect(defaultValue.detail).toBe( - '
Hey! Hey! Hey!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
' - ); - }); - - it('should support element with props', () => { - const component = createTestComponent(createDefaultValue('')); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe(''); - expect(defaultValue.detail).toBe(''); - }); - - it("should use the name of the React component when it's available", () => { - const component = createTestComponent( - createDefaultValue( - 'function InlinedFunctionalComponent() {\n return
Inlined FunctionalComponent!
;\n}' - ) - ); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe(''); - - const expectedDetail = `function InlinedFunctionalComponent() { - return
Inlined FunctionalComponent!
; - }`; - - expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should not use the name of an HTML element', () => { - const component = createTestComponent(createDefaultValue('
Hey!
')); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).not.toBe('
'); - }); - - it('should support short array', () => { - const component = createTestComponent(createDefaultValue('[1]')); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('[1]'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support long array', () => { - const component = createTestComponent( - createDefaultValue( - '[\n {\n thing: {\n id: 2,\n func: () => {},\n arr: [],\n },\n },\n]' - ) - ); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('array'); - - const expectedDetail = `[{ - thing: { - id: 2, - func: () => { - }, - arr: [] - } - }]`; - - expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should not have deep array in summary', () => { - const component = createTestComponent(createDefaultValue('[[[1]]]')); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('array'); - }); - - describe('fromRawDefaultProp', () => { - [ - { type: 'number', defaultProp: 1 }, - { type: 'boolean', defaultProp: true }, - { type: 'symbol', defaultProp: Symbol('hey!') }, - ].forEach((x) => { - it(`should support ${x.type}`, () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, x.defaultProp); - - expect(defaultValue.summary).toBe(x.defaultProp.toString()); - expect(defaultValue.detail).toBeUndefined(); - }); - }); - - it('should support strings', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, 'foo'); - - expect(defaultValue.summary).toBe('"foo"'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support array of primitives', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, [1, 2, 3]); - - expect(defaultValue.summary).toBe('[1, 2, 3]'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support array of short object', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, [{ foo: 'bar' }]); - - expect(defaultValue.summary).toBe("[{ 'foo': 'bar' }]"); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support array of long object', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, [{ foo: 'bar', bar: 'foo', hey: 'ho' }]); - - expect(defaultValue.summary).toBe('array'); - - const expectedDetail = `[{ - 'foo': 'bar', - 'bar': 'foo', - 'hey': 'ho' - }]`; - - expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should support short object', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, { foo: 'bar' }); - - expect(defaultValue.summary).toBe("{ 'foo': 'bar' }"); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support long object', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, { foo: 'bar', bar: 'foo', hey: 'ho' }); - - expect(defaultValue.summary).toBe('object'); - - const expectedDetail = `{ - 'foo': 'bar', - 'bar': 'foo', - 'hey': 'ho' - }`; - - expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should support anonymous function', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, () => 'hey!'); - - expect(defaultValue.summary).toBe('func'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support named function', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, function hello() { - return 'world!'; - }); - - expect(defaultValue.summary).toBe('hello()'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support named function with params', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, function add(a: number, b: number) { - return a + b; - }); - - expect(defaultValue.summary).toBe('add( ... )'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support React element', () => { - const component = createTestComponent(null); - - const defaultProp = ; - // Simulate babel-plugin-add-react-displayname. - defaultProp.type.displayName = 'ReactComponent'; - - const { defaultValue } = extractPropDef(component, defaultProp); - - expect(defaultValue.summary).toBe(''); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support React element with props', () => { - const component = createTestComponent(null); - - // @ts-ignore - const defaultProp = ; - // Simulate babel-plugin-add-react-displayname. - defaultProp.type.displayName = 'ReactComponent'; - - const { defaultValue } = extractPropDef(component, defaultProp); - - expect(defaultValue.summary).toBe(''); - expect(defaultValue.detail).toBe(''); - }); - - it('should support short HTML element', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component,
HTML element
); - - expect(defaultValue.summary).toBe('
HTML element
'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support long HTML element', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef( - component, -
HTML element!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- ); - - expect(defaultValue.summary).toBe('element'); - - const expectedDetail = `
- HTML element!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -
`; - - expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - ['element', 'elementType'].forEach((x) => { - it(`should support inlined React class component for ${x}`, () => { - const component = createTestComponent(null, x); - - const { defaultValue } = extractPropDef( - component, - class InlinedClassComponent extends React.PureComponent { - render() { - return
Inlined ClassComponent!
; - } - } - ); - - expect(defaultValue.summary).toBe(''); - expect(defaultValue.detail).toBeUndefined(); - }); - - it(`should support inlined anonymous React functional component for ${x}`, () => { - const component = createTestComponent(null, x); - - const { defaultValue } = extractPropDef(component, () => { - return
Inlined FunctionalComponent!
; - }); - - expect(defaultValue.summary).toBe('element'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it(`should support inlined anonymous React functional component with props for ${x}`, () => { - const component = createTestComponent(null, x); - - const { defaultValue } = extractPropDef(component, ({ foo }: { foo: string }) => { - return
{foo}
; - }); - - expect(defaultValue.summary).toBe('element'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it(`should support inlined named React functional component for ${x}`, () => { - const component = createTestComponent(null, x); - - const { defaultValue } = extractPropDef(component, function InlinedFunctionalComponent() { - return
Inlined FunctionalComponent!
; - }); - - expect(defaultValue.summary).toBe(''); - expect(defaultValue.detail).toBeUndefined(); - }); - - it(`should support inlined named React functional component with props for ${x}`, () => { - const component = createTestComponent(null, x); - - const { defaultValue } = extractPropDef( - component, - function InlinedFunctionalComponent({ foo }: { foo: string }) { - return
{foo}
; - } - ); - - expect(defaultValue.summary).toBe(''); - expect(defaultValue.detail).toBeUndefined(); - }); - }); - }); - }); -}); - -describe('enhancePropTypesProps', () => { - it('should keep the original definition order', () => { - const component = createComponent({ - propTypes: { - foo: PropTypes.string, - middleWithDefaultValue: PropTypes.string, - bar: PropTypes.string, - endWithDefaultValue: PropTypes.string, - }, - docgenInfo: { - ...createDocgenProp({ - name: 'middleWithDefaultValue', - type: { name: 'string' }, - defaultValue: { value: 'Middle!' }, - }), - ...createDocgenProp({ - name: 'endWithDefaultValue', - type: { name: 'string' }, - defaultValue: { value: 'End!' }, - }), - ...createDocgenProp({ - name: 'foo', - type: { name: 'string' }, - }), - ...createDocgenProp({ - name: 'bar', - type: { name: 'string' }, - }), - }, - }); - - const props = enhancePropTypesProps( - extractComponentProps(component, DOCGEN_SECTION), - component - ); - - expect(props.length).toBe(4); - expect(props[0].name).toBe('foo'); - expect(props[1].name).toBe('middleWithDefaultValue'); - expect(props[2].name).toBe('bar'); - expect(props[3].name).toBe('endWithDefaultValue'); - }); - - it('should not include @ignore props', () => { - const component = createComponent({ - propTypes: { - foo: PropTypes.string, - bar: PropTypes.string, - }, - docgenInfo: { - ...createDocgenProp({ - name: 'foo', - type: { name: 'string' }, - }), - ...createDocgenProp({ - name: 'bar', - type: { name: 'string' }, - description: '@ignore', - }), - }, - }); - - const props = enhancePropTypesProps( - extractComponentProps(component, DOCGEN_SECTION), - component - ); - - expect(props.length).toBe(1); - expect(props[0].name).toBe('foo'); - }); -}); diff --git a/addons/docs/src/frameworks/react/propTypes/handleProp.ts b/addons/docs/src/frameworks/react/propTypes/handleProp.ts deleted file mode 100644 index 232c1d0cf89c..000000000000 --- a/addons/docs/src/frameworks/react/propTypes/handleProp.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { PropDef, ExtractedProp } from '../../../lib/docgen'; -import { createType } from './createType'; -import { createDefaultValue, createDefaultValueFromRawDefaultProp } from '../lib/defaultValues'; -import { Component } from '../../../blocks/types'; -import { keepOriginalDefinitionOrder } from './sortProps'; -import { rawDefaultPropTypeResolvers } from './rawDefaultPropResolvers'; - -export function enhancePropTypesProp(extractedProp: ExtractedProp, rawDefaultProp?: any): PropDef { - const { propDef } = extractedProp; - - const newtype = createType(extractedProp); - if (newtype != null) { - propDef.type = newtype; - } - - const { defaultValue } = extractedProp.docgenInfo; - if (defaultValue != null && defaultValue.value != null) { - const newDefaultValue = createDefaultValue(defaultValue.value); - - if (newDefaultValue != null) { - propDef.defaultValue = newDefaultValue; - } - } else if (rawDefaultProp != null) { - const newDefaultValue = createDefaultValueFromRawDefaultProp( - rawDefaultProp, - propDef, - rawDefaultPropTypeResolvers - ); - - if (newDefaultValue != null) { - propDef.defaultValue = newDefaultValue; - } - } - - return propDef; -} - -export function enhancePropTypesProps( - extractedProps: ExtractedProp[], - component: Component -): PropDef[] { - const rawDefaultProps = component.defaultProps != null ? component.defaultProps : {}; - const enhancedProps = extractedProps.map((x) => - enhancePropTypesProp(x, rawDefaultProps[x.propDef.name]) - ); - - return keepOriginalDefinitionOrder(enhancedProps, component); -} diff --git a/addons/docs/src/frameworks/react/react-argtypes.stories.tsx b/addons/docs/src/frameworks/react/react-argtypes.stories.tsx deleted file mode 100644 index 8c5764331136..000000000000 --- a/addons/docs/src/frameworks/react/react-argtypes.stories.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import React, { useState } from 'react'; -import mapValues from 'lodash/mapValues'; -import { storiesOf, StoryContext } from '@storybook/react'; -import { ArgsTable } from '@storybook/components'; -import { Args } from '@storybook/api'; -import { inferControls } from '@storybook/client-api'; - -import { extractArgTypes } from './extractArgTypes'; -import { Component } from '../../blocks'; - -const argsTableProps = (component: Component) => { - const argTypes = extractArgTypes(component); - const parameters = { __isArgsStory: true }; - const rows = inferControls(({ argTypes, parameters } as unknown) as StoryContext); - return { rows }; -}; - -const ArgsStory = ({ component }: any) => { - const { rows } = argsTableProps(component); - const initialArgs = mapValues(rows, (argType) => argType.defaultValue) as Args; - - const [args, setArgs] = useState(initialArgs); - return ( - <> -

- NOTE: these stories are to help visualise the snapshot tests in{' '} - ./react-properties.test.js. -

- setArgs({ ...args, ...val })} /> - - - - - - - - - {Object.entries(args).map(([key, val]) => ( - - - - - ))} - -
arg nameargType
- {key} - -
{JSON.stringify(rows[key])}
-
- - ); -}; - -const typescriptFixtures = [ - 'aliases', - 'arrays', - 'enums', - 'functions', - 'interfaces', - 'intersections', - 'records', - 'scalars', - 'tuples', - 'unions', - 'optionals', -]; - -const typescriptStories = storiesOf('ArgTypes/TypeScript', module); -typescriptFixtures.forEach((fixture) => { - // eslint-disable-next-line import/no-dynamic-require, global-require, no-shadow - const { Component } = require(`../../lib/convert/__testfixtures__/typescript/${fixture}`); - typescriptStories.add(fixture, () => ); -}); - -const proptypesFixtures = ['arrays', 'enums', 'misc', 'objects', 'react', 'scalars']; - -const proptypesStories = storiesOf('ArgTypes/PropTypes', module); -proptypesFixtures.forEach((fixture) => { - // eslint-disable-next-line import/no-dynamic-require, global-require, no-shadow - const { Component } = require(`../../lib/convert/__testfixtures__/proptypes/${fixture}`); - proptypesStories.add(fixture, () => ); -}); - -const issuesFixtures = [ - 'js-class-component', - 'js-function-component', - 'js-function-component-inline-defaults', - 'js-function-component-inline-defaults-no-propTypes', - 'ts-function-component', - 'ts-function-component-inline-defaults', - '9399-js-proptypes-shape', - '8663-js-styled-components', - '9626-js-default-values', - '9668-js-proptypes-no-jsdoc', - '8143-ts-react-fc-generics', - '8143-ts-imported-types', - '8279-js-styled-docgen', - '8140-js-prop-types-oneof', - '9023-js-hoc', - '8740-ts-multi-props', - '9556-ts-react-default-exports', - '9592-ts-styled-props', - '9591-ts-import-types', - '9721-ts-deprecated-jsdoc', - '9827-ts-default-values', - '9586-js-react-memo', - '9575-ts-camel-case', - '9493-ts-display-name', - '8894-9511-ts-forward-ref', - '9465-ts-type-props', - '8428-js-static-prop-types', - '9764-ts-extend-props', - '9922-ts-component-props', -]; - -const issuesStories = storiesOf('ArgTypes/Issues', module); -issuesFixtures.forEach((fixture) => { - // eslint-disable-next-line import/no-dynamic-require, global-require - const { component } = require(`./__testfixtures__/${fixture}/input`); - - issuesStories.add(fixture, () => , { - chromatic: { disable: true }, - }); -}); diff --git a/addons/docs/src/frameworks/react/typeScript/handleProp.test.tsx b/addons/docs/src/frameworks/react/typeScript/handleProp.test.tsx deleted file mode 100644 index 1071979909c4..000000000000 --- a/addons/docs/src/frameworks/react/typeScript/handleProp.test.tsx +++ /dev/null @@ -1,513 +0,0 @@ -/* eslint-disable no-underscore-dangle */ - -import React from 'react'; -import { Component } from '../../../blocks/types'; -import { - PropDef, - extractComponentProps, - DocgenInfo, - DocgenPropDefaultValue, -} from '../../../lib/docgen'; -import { enhanceTypeScriptProp } from './handleProp'; - -const DOCGEN_SECTION = 'props'; - -function ReactComponent() { - return
React Component!
; -} - -function createDocgenSection(docgenInfo: DocgenInfo): Record { - return { - [DOCGEN_SECTION]: { - ...docgenInfo, - }, - }; -} - -function createDocgenProp({ - name, - tsType, - ...others -}: Partial & { name: string }): Record { - return { - [name]: { - tsType, - required: false, - ...others, - }, - }; -} - -// eslint-disable-next-line react/forbid-foreign-prop-types -function createComponent({ propTypes = {}, defaultProps = {}, docgenInfo = {} }): Component { - const component = () => { - return
Hey!
; - }; - component.propTypes = propTypes; - component.defaultProps = defaultProps; - - // @ts-ignore - component.__docgenInfo = createDocgenSection(docgenInfo); - - return component; -} - -function createDefaultValue(defaultValue: string): DocgenPropDefaultValue { - return { value: defaultValue }; -} - -function extractPropDef(component: Component, rawDefaultProp?: any): PropDef { - return enhanceTypeScriptProp(extractComponentProps(component, DOCGEN_SECTION)[0], rawDefaultProp); -} - -describe('enhanceTypeScriptProp', () => { - describe('defaultValue', () => { - function createTestComponent( - defaultValue: DocgenPropDefaultValue, - typeName = 'anything-is-fine' - ): Component { - return createComponent({ - docgenInfo: { - ...createDocgenProp({ - name: 'prop', - tsType: { name: typeName }, - defaultValue, - }), - }, - }); - } - - it('should support short object', () => { - const component = createTestComponent(createDefaultValue("{ foo: 'foo', bar: 'bar' }")); - - const { defaultValue } = extractPropDef(component); - - const expectedSummary = "{ foo: 'foo', bar: 'bar' }"; - - expect(defaultValue.summary.replace(/\s/g, '')).toBe(expectedSummary.replace(/\s/g, '')); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support long object', () => { - const component = createTestComponent( - createDefaultValue("{ foo: 'foo', bar: 'bar', another: 'another' }") - ); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('object'); - - const expectedDetail = `{ - foo: 'foo', - bar: 'bar', - another: 'another' - }`; - - expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should not have deep object in summary', () => { - const component = createTestComponent( - createDefaultValue("{ foo: 'foo', bar: { hey: 'ho' } }") - ); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('object'); - }); - - it('should support short function', () => { - const component = createTestComponent(createDefaultValue('() => {}')); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('() => {}'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support long function', () => { - const component = createTestComponent( - createDefaultValue( - '(foo, bar) => {\n const concat = foo + bar;\n const append = concat + " hey!";\n \n return append;\n}' - ) - ); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('func'); - - const expectedDetail = `(foo, bar) => { - const concat = foo + bar; - const append = concat + ' hey!'; - return append - }`; - - expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should use the name of function when available and indicate that args are present', () => { - const component = createTestComponent( - createDefaultValue('function concat(a, b) {\n return a + b;\n}') - ); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('concat( ... )'); - - const expectedDetail = `function concat(a, b) { - return a + b - }`; - - expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should use the name of function when available', () => { - const component = createTestComponent( - createDefaultValue('function hello() {\n return "hello";\n}') - ); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('hello()'); - - const expectedDetail = `function hello() { - return 'hello' - }`; - - expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should support short element', () => { - const component = createTestComponent(createDefaultValue('
Hey!
')); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('
Hey!
'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support long element', () => { - const component = createTestComponent( - createDefaultValue( - '
Hey! Hey! Hey!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
' - ) - ); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('element'); - expect(defaultValue.detail).toBe( - '
Hey! Hey! Hey!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
' - ); - }); - - it('should support element with props', () => { - const component = createTestComponent(createDefaultValue('')); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe(''); - expect(defaultValue.detail).toBe(''); - }); - - it("should use the name of the React component when it's available", () => { - const component = createTestComponent( - createDefaultValue( - 'function InlinedFunctionalComponent() {\n return
Inlined FunctionalComponent!
;\n}' - ) - ); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe(''); - - const expectedDetail = `function InlinedFunctionalComponent() { - return
Inlined FunctionalComponent!
; - }`; - - expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should not use the name of an HTML element', () => { - const component = createTestComponent(createDefaultValue('
Hey!
')); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).not.toBe('
'); - }); - - it('should support short array', () => { - const component = createTestComponent(createDefaultValue('[1]')); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('[1]'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support long array', () => { - const component = createTestComponent( - createDefaultValue( - '[\n {\n thing: {\n id: 2,\n func: () => {},\n arr: [],\n },\n },\n]' - ) - ); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('array'); - - const expectedDetail = `[{ - thing: { - id: 2, - func: () => { - }, - arr: [] - } - }]`; - - expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should not have deep array in summary', () => { - const component = createTestComponent(createDefaultValue('[[[1]]]')); - - const { defaultValue } = extractPropDef(component); - - expect(defaultValue.summary).toBe('array'); - }); - - describe('fromRawDefaultProp', () => { - [ - { type: 'number', defaultProp: 1 }, - { type: 'boolean', defaultProp: true }, - { type: 'symbol', defaultProp: Symbol('hey!') }, - ].forEach((x) => { - it(`should support ${x.type}`, () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, x.defaultProp); - - expect(defaultValue.summary).toBe(x.defaultProp.toString()); - expect(defaultValue.detail).toBeUndefined(); - }); - }); - - it('should support strings', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, 'foo'); - - expect(defaultValue.summary).toBe('"foo"'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support array of primitives', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, [1, 2, 3]); - - expect(defaultValue.summary).toBe('[1, 2, 3]'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support array of short object', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, [{ foo: 'bar' }]); - - expect(defaultValue.summary).toBe("[{ 'foo': 'bar' }]"); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support array of long object', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, [{ foo: 'bar', bar: 'foo', hey: 'ho' }]); - - expect(defaultValue.summary).toBe('array'); - - const expectedDetail = `[{ - 'foo': 'bar', - 'bar': 'foo', - 'hey': 'ho' - }]`; - - expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should support short object', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, { foo: 'bar' }); - - expect(defaultValue.summary).toBe("{ 'foo': 'bar' }"); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support long object', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, { foo: 'bar', bar: 'foo', hey: 'ho' }); - - expect(defaultValue.summary).toBe('object'); - - const expectedDetail = `{ - 'foo': 'bar', - 'bar': 'foo', - 'hey': 'ho' - }`; - - expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - it('should support anonymous function', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, () => 'hey!'); - - expect(defaultValue.summary).toBe('func'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support named function', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, function hello() { - return 'world!'; - }); - - expect(defaultValue.summary).toBe('hello()'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support named function with params', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component, function add(a: number, b: number) { - return a + b; - }); - - expect(defaultValue.summary).toBe('add( ... )'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support React element', () => { - const component = createTestComponent(null); - - const defaultProp = ; - // Simulate babel-plugin-add-react-displayname. - defaultProp.type.displayName = 'ReactComponent'; - - const { defaultValue } = extractPropDef(component, defaultProp); - - expect(defaultValue.summary).toBe(''); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support React element with props', () => { - const component = createTestComponent(null); - - // @ts-ignore - const defaultProp = ; - // Simulate babel-plugin-add-react-displayname. - defaultProp.type.displayName = 'ReactComponent'; - - const { defaultValue } = extractPropDef(component, defaultProp); - - expect(defaultValue.summary).toBe(''); - expect(defaultValue.detail).toBe(''); - }); - - it('should support short HTML element', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef(component,
HTML element
); - - expect(defaultValue.summary).toBe('
HTML element
'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it('should support long HTML element', () => { - const component = createTestComponent(null); - - const { defaultValue } = extractPropDef( - component, -
HTML element!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- ); - - expect(defaultValue.summary).toBe('element'); - - const expectedDetail = `
- HTML element!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -
`; - - expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); - }); - - ['element', 'elementType'].forEach((x) => { - it(`should support inlined React class component for ${x}`, () => { - const component = createTestComponent(null, x); - - const { defaultValue } = extractPropDef( - component, - class InlinedClassComponent extends React.PureComponent { - render() { - return
Inlined ClassComponent!
; - } - } - ); - - expect(defaultValue.summary).toBe(''); - expect(defaultValue.detail).toBeUndefined(); - }); - - it(`should support inlined anonymous React functional component for ${x}`, () => { - const component = createTestComponent(null, x); - - const { defaultValue } = extractPropDef(component, () => { - return
Inlined FunctionalComponent!
; - }); - - expect(defaultValue.summary).toBe('element'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it(`should support inlined anonymous React functional component with props for ${x}`, () => { - const component = createTestComponent(null, x); - - const { defaultValue } = extractPropDef(component, ({ foo }: { foo: string }) => { - return
{foo}
; - }); - - expect(defaultValue.summary).toBe('element'); - expect(defaultValue.detail).toBeUndefined(); - }); - - it(`should support inlined named React functional component for ${x}`, () => { - const component = createTestComponent(null, x); - - const { defaultValue } = extractPropDef(component, function InlinedFunctionalComponent() { - return
Inlined FunctionalComponent!
; - }); - - expect(defaultValue.summary).toBe(''); - expect(defaultValue.detail).toBeUndefined(); - }); - - it(`should support inlined named React functional component with props for ${x}`, () => { - const component = createTestComponent(null, x); - - const { defaultValue } = extractPropDef( - component, - function InlinedFunctionalComponent({ foo }: { foo: string }) { - return
{foo}
; - } - ); - - expect(defaultValue.summary).toBe(''); - expect(defaultValue.detail).toBeUndefined(); - }); - }); - }); - }); -}); diff --git a/addons/docs/src/frameworks/react/typeScript/handleProp.ts b/addons/docs/src/frameworks/react/typeScript/handleProp.ts deleted file mode 100644 index eeecb2db81f0..000000000000 --- a/addons/docs/src/frameworks/react/typeScript/handleProp.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { PropDef, ExtractedProp } from '../../../lib/docgen'; -import { createDefaultValue, createDefaultValueFromRawDefaultProp } from '../lib/defaultValues'; - -export function enhanceTypeScriptProp(extractedProp: ExtractedProp, rawDefaultProp?: any): PropDef { - const { propDef } = extractedProp; - - const { defaultValue } = extractedProp.docgenInfo; - if (defaultValue != null && defaultValue.value != null) { - const newDefaultValue = createDefaultValue(defaultValue.value); - if (newDefaultValue != null) { - propDef.defaultValue = newDefaultValue; - } - } else if (rawDefaultProp != null) { - const newDefaultValue = createDefaultValueFromRawDefaultProp(rawDefaultProp, propDef); - - if (newDefaultValue != null) { - propDef.defaultValue = newDefaultValue; - } - } - - return propDef; -} - -export function enhanceTypeScriptProps(extractedProps: ExtractedProp[]): PropDef[] { - return extractedProps.map((prop) => enhanceTypeScriptProp(prop)); -} diff --git a/addons/docs/src/frameworks/svelte/config.ts b/addons/docs/src/frameworks/svelte/config.ts deleted file mode 100644 index 033474d23f72..000000000000 --- a/addons/docs/src/frameworks/svelte/config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { extractArgTypes } from './extractArgTypes'; -import { extractComponentDescription } from './extractComponentDescription'; -import { prepareForInline } from './prepareForInline'; -import { sourceDecorator } from './sourceDecorator'; - -export const parameters = { - docs: { - inlineStories: true, - prepareForInline, - extractArgTypes, - extractComponentDescription, - }, -}; - -export const decorators = [sourceDecorator]; diff --git a/addons/docs/src/frameworks/svelte/extractArgTypes.ts b/addons/docs/src/frameworks/svelte/extractArgTypes.ts deleted file mode 100644 index ca1ee3e31522..000000000000 --- a/addons/docs/src/frameworks/svelte/extractArgTypes.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { SBScalarType, StrictArgTypes } from '@storybook/csf'; -import { logger } from '@storybook/client-logger'; -import type { - SvelteComponentDoc, - JSDocType, - JSDocKeyword, - JSDocTypeConst, -} from 'sveltedoc-parser/typings'; - -import { ArgTypesExtractor } from '../../lib/docgen'; - -type ComponentWithDocgen = { - __docgen: SvelteComponentDoc; -}; - -function hasKeyword(keyword: string, keywords: JSDocKeyword[]): boolean { - return keywords ? keywords.find((k) => k.name === keyword) != null : false; -} - -export const extractArgTypes: ArgTypesExtractor = (component: ComponentWithDocgen) => { - try { - // eslint-disable-next-line no-underscore-dangle - const docgen = component.__docgen; - if (docgen) { - return createArgTypes(docgen); - } - } catch (err) { - logger.log(`Error extracting argTypes: ${err}`); - } - return {}; -}; - -export const createArgTypes = (docgen: SvelteComponentDoc) => { - const results: StrictArgTypes = {}; - docgen.data.forEach((item) => { - results[item.name] = { - control: parseTypeToControl(item.type), - name: item.name, - description: item.description, - type: { - required: hasKeyword('required', item.keywords), - name: item.type?.text as SBScalarType['name'], - }, - table: { - type: { - summary: item.type?.text, - }, - defaultValue: { - summary: item.defaultValue, - }, - category: 'properties', - }, - }; - }); - - docgen.events.forEach((item) => { - results[`event_${item.name}`] = { - name: item.name, - description: item.description, - type: { name: 'other', value: 'void' }, - table: { - category: 'events', - }, - }; - }); - - docgen.slots.forEach((item) => { - results[`slot_${item.name}`] = { - name: item.name, - description: [item.description, item.params?.map((p) => `\`${p.name}\``).join(' ')] - .filter((p) => p) - .join('\n\n'), - type: { name: 'other', value: 'void' }, - table: { - category: 'slots', - }, - }; - }); - - return results; -}; - -/** - * Function to convert the type from sveltedoc-parser to a storybook type - * @param typeName - * @returns string - */ -const parseTypeToControl = (type: JSDocType): any => { - if (!type) { - return null; - } - - if (type.kind === 'type') { - switch (type.type) { - case 'string': - return { type: 'text' }; - - case 'enum': - return { type: 'radio' }; - case 'any': - return { type: 'object' }; - default: - return { type: type.type }; - } - } else if (type.kind === 'union') { - if (Array.isArray(type.type) && !type.type.find((t) => t.type !== 'string')) { - return { - type: 'radio', - options: type.type.filter((t) => t.kind === 'const').map((t: JSDocTypeConst) => t.value), - }; - } - } - - return null; -}; diff --git a/addons/docs/src/frameworks/svelte/prepareForInline.ts b/addons/docs/src/frameworks/svelte/prepareForInline.ts deleted file mode 100644 index e8f4ce7c5ab2..000000000000 --- a/addons/docs/src/frameworks/svelte/prepareForInline.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { AnyFramework, StoryFn } from '@storybook/csf'; - -import React from 'react'; - -// @ts-ignore -import HOC from './HOC.svelte'; - -export const prepareForInline = (storyFn: StoryFn) => { - const el = React.useRef(null); - React.useEffect(() => { - const root = new HOC({ - target: el.current, - props: { - storyFn, - }, - }); - return () => root.$destroy(); - }); - - return React.createElement('div', { ref: el }); -}; diff --git a/addons/docs/src/frameworks/svelte/preset.ts b/addons/docs/src/frameworks/svelte/preset.ts deleted file mode 100644 index 20004fc47223..000000000000 --- a/addons/docs/src/frameworks/svelte/preset.ts +++ /dev/null @@ -1,17 +0,0 @@ -import path from 'path'; - -import { Configuration } from 'webpack'; -import type { Options } from '@storybook/core-common'; - -export async function webpackFinal(webpackConfig: Configuration, options: Options) { - const svelteOptions = await options.presets.apply('svelteOptions', {} as any, options); - - webpackConfig.module.rules.push({ - test: /\.svelte$/, - loader: path.resolve(`${__dirname}/svelte-docgen-loader`), - enforce: 'post', - options: svelteOptions, - }); - - return webpackConfig; -} diff --git a/addons/docs/src/frameworks/svelte/sourceDecorator.test.ts b/addons/docs/src/frameworks/svelte/sourceDecorator.test.ts deleted file mode 100644 index 6c55200e21fe..000000000000 --- a/addons/docs/src/frameworks/svelte/sourceDecorator.test.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Args } from '@storybook/api'; -import { generateSvelteSource } from './sourceDecorator'; - -expect.addSnapshotSerializer({ - print: (val: any) => val, - test: (val) => typeof val === 'string', -}); - -function generateForArgs(args: Args, slotProperty: string = null) { - return generateSvelteSource({ name: 'Component' }, args, {}, slotProperty); -} - -describe('generateSvelteSource', () => { - test('boolean true', () => { - expect(generateForArgs({ bool: true })).toMatchInlineSnapshot(``); - }); - test('boolean false', () => { - expect(generateForArgs({ bool: false })).toMatchInlineSnapshot(``); - }); - test('null property', () => { - expect(generateForArgs({ propnull: null })).toMatchInlineSnapshot(``); - }); - test('string property', () => { - expect(generateForArgs({ str: 'mystr' })).toMatchInlineSnapshot(``); - }); - test('number property', () => { - expect(generateForArgs({ count: 42 })).toMatchInlineSnapshot(``); - }); - test('object property', () => { - expect(generateForArgs({ obj: { x: true } })).toMatchInlineSnapshot( - `` - ); - }); - test('multiple properties', () => { - expect(generateForArgs({ a: 1, b: 2 })).toMatchInlineSnapshot(``); - }); - test('slot property', () => { - expect(generateForArgs({ content: 'xyz', myProp: 'abc' }, 'content')).toMatchInlineSnapshot(` - - xyz - - `); - }); - test('component is not set', () => { - expect(generateSvelteSource(null, null, null, null)).toBeNull(); - }); -}); diff --git a/addons/docs/src/frameworks/svelte/sourceDecorator.ts b/addons/docs/src/frameworks/svelte/sourceDecorator.ts deleted file mode 100644 index f740a4c857b5..000000000000 --- a/addons/docs/src/frameworks/svelte/sourceDecorator.ts +++ /dev/null @@ -1,174 +0,0 @@ -import { addons, useEffect } from '@storybook/addons'; -import { ArgTypes, Args, StoryContext, AnyFramework } from '@storybook/csf'; - -import { SourceType, SNIPPET_RENDERED } from '../../shared'; - -/** - * Check if the sourcecode should be generated. - * - * @param context StoryContext - */ -const skipSourceRender = (context: StoryContext) => { - const sourceParams = context?.parameters.docs?.source; - const isArgsStory = context?.parameters.__isArgsStory; - - // always render if the user forces it - if (sourceParams?.type === SourceType.DYNAMIC) { - return false; - } - - // never render if the user is forcing the block to render code, or - // if the user provides code, or if it's not an args story. - return !isArgsStory || sourceParams?.code || sourceParams?.type === SourceType.CODE; -}; - -/** - * Transform a key/value to a svelte declaration as string. - * - * Default values are ommited - * - * @param key Key - * @param value Value - * @param argTypes Component ArgTypes - */ -function toSvelteProperty(key: string, value: any, argTypes: ArgTypes): string { - if (value === undefined || value === null) { - return null; - } - - // default value ? - if (argTypes[key] && argTypes[key].defaultValue === value) { - return null; - } - - if (value === true) { - return key; - } - - if (typeof value === 'string') { - return `${key}=${JSON.stringify(value)}`; - } - - return `${key}={${JSON.stringify(value)}}`; -} - -/** - * Extract a component name. - * - * @param component Component - */ -function getComponentName(component: any): string { - if (component == null) { - return null; - } - - const { __docgen = {} } = component; - let { name } = __docgen; - - if (!name) { - return component.name; - } - - if (name.endsWith('.svelte')) { - name = name.substring(0, name.length - 7); - } - return name; -} - -/** - * Generate a svelte template. - * - * @param component Component - * @param args Args - * @param argTypes ArgTypes - * @param slotProperty Property used to simulate a slot - */ -export function generateSvelteSource( - component: any, - args: Args, - argTypes: ArgTypes, - slotProperty: string -): string { - const name = getComponentName(component); - - if (!name) { - return null; - } - - const props = Object.entries(args) - .filter(([k]) => k !== slotProperty) - .map(([k, v]) => toSvelteProperty(k, v, argTypes)) - .filter((p) => p) - .join(' '); - - const slotValue = slotProperty ? args[slotProperty] : null; - - if (slotValue) { - return `<${name} ${props}>\n ${slotValue}\n`; - } - - return `<${name} ${props}/>`; -} - -/** - * Check if the story component is a wrapper to the real component. - * - * A component can be annoted with @wrapper to indicate that - * it's just a wrapper for the real tested component. If it's the case - * then the code generated references the real component, not the wrapper. - * - * moreover, a wrapper can annotate a property with @slot : this property - * is then assumed to be an alias to the default slot. - * - * @param component Component - */ -function getWrapperProperties(component: any) { - const { __docgen } = component; - if (!__docgen) { - return { wrapper: false }; - } - - // the component should be declared as a wrapper - if (!__docgen.keywords.find((kw: any) => kw.name === 'wrapper')) { - return { wrapper: false }; - } - - const slotProp = __docgen.data.find((prop: any) => - prop.keywords.find((kw: any) => kw.name === 'slot') - ); - return { wrapper: true, slotProperty: slotProp?.name as string }; -} - -/** - * Svelte source decorator. - * @param storyFn Fn - * @param context StoryContext - */ -export const sourceDecorator = (storyFn: any, context: StoryContext) => { - const channel = addons.getChannel(); - const skip = skipSourceRender(context); - const story = storyFn(); - - let source: string; - useEffect(() => { - if (!skip && source) { - channel.emit(SNIPPET_RENDERED, (context || {}).id, source); - } - }); - - if (skip) { - return story; - } - - const { parameters = {}, args = {} } = context || {}; - let { Component: component = {} } = story; - - const { wrapper, slotProperty } = getWrapperProperties(component); - if (wrapper) { - component = parameters.component; - } - - source = generateSvelteSource(component, args, context?.argTypes, slotProperty); - - return story; -}; diff --git a/addons/docs/src/frameworks/vue/config.ts b/addons/docs/src/frameworks/vue/config.ts deleted file mode 100644 index a5e41a726139..000000000000 --- a/addons/docs/src/frameworks/vue/config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { extractArgTypes } from './extractArgTypes'; -import { extractComponentDescription } from '../../lib/docgen'; -import { prepareForInline } from './prepareForInline'; -import { sourceDecorator } from './sourceDecorator'; - -export const parameters = { - docs: { - inlineStories: true, - prepareForInline, - extractArgTypes, - extractComponentDescription, - }, -}; - -export const decorators = [sourceDecorator]; diff --git a/addons/docs/src/frameworks/vue/extractArgTypes.ts b/addons/docs/src/frameworks/vue/extractArgTypes.ts deleted file mode 100644 index eaa981115bbf..000000000000 --- a/addons/docs/src/frameworks/vue/extractArgTypes.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { StrictArgTypes } from '@storybook/csf'; -import { - ArgTypesExtractor, - hasDocgen, - extractComponentProps, - DocgenInfo, - PropDef, -} from '../../lib/docgen'; -import { convert } from '../../lib/convert'; - -const SECTIONS = ['props', 'events', 'slots']; - -/** - * Check if "@values" tag is defined within docgenInfo. - * If true, then propDef is mutated. - */ -function isEnum(propDef: PropDef, docgenInfo: DocgenInfo): false | PropDef { - // cast as any, since "values" doesn't exist in DocgenInfo type - const { type, values } = docgenInfo as any; - const matched = Array.isArray(values) && values.length && type.name !== 'enum'; - - if (!matched) return false; - - const enumString = values.join(', '); - let { summary } = propDef.type; - summary = summary ? `${summary}: ${enumString}` : enumString; - - Object.assign(propDef.type, { - ...propDef.type, - name: 'enum', - value: values, - summary, - }); - return propDef; -} - -/** - * @returns {Array} result - * @returns {PropDef} result.def - propDef - * @returns {boolean} result.isChanged - flag whether propDef is mutated or not. - * this is needed to prevent sbType from performing convert(docgenInfo). - */ -function verifyPropDef(propDef: PropDef, docgenInfo: DocgenInfo): [PropDef, boolean] { - let def = propDef; - let isChanged = false; - - // another callback can be added here. - // callback is mutually exclusive from each other. - const callbacks = [isEnum]; - for (let i = 0, len = callbacks.length; i < len; i += 1) { - const matched = callbacks[i](propDef, docgenInfo); - if (matched) { - def = matched; - isChanged = true; - } - } - - return [def, isChanged]; -} - -export const extractArgTypes: ArgTypesExtractor = (component) => { - if (!hasDocgen(component)) { - return null; - } - const results: StrictArgTypes = {}; - SECTIONS.forEach((section) => { - const props = extractComponentProps(component, section); - props.forEach(({ propDef, docgenInfo, jsDocTags }) => { - const [result, isPropDefChanged] = verifyPropDef(propDef, docgenInfo); - const { name, type, description, defaultValue: defaultSummary, required } = result; - - let sbType; - if (isPropDefChanged) { - sbType = type; - } else { - sbType = section === 'props' ? convert(docgenInfo) : { name: 'void' }; - } - results[name] = { - name, - description, - type: { required, ...sbType }, - table: { - type, - jsDocTags, - defaultValue: defaultSummary, - category: section, - }, - }; - }); - }); - return results; -}; diff --git a/addons/docs/src/frameworks/vue/prepareForInline.ts b/addons/docs/src/frameworks/vue/prepareForInline.ts deleted file mode 100644 index 6627db5ec96f..000000000000 --- a/addons/docs/src/frameworks/vue/prepareForInline.ts +++ /dev/null @@ -1,39 +0,0 @@ -import React from 'react'; -import Vue from 'vue'; -import { StoryContext, PartialStoryFn } from '@storybook/csf'; -import { VueFramework } from '@storybook/vue'; - -// Inspired by https://github.com/egoist/vue-to-react, -// modified to store args as props in the root store - -// FIXME get this from @storybook/vue -const COMPONENT = 'STORYBOOK_COMPONENT'; -const VALUES = 'STORYBOOK_VALUES'; - -export const prepareForInline = ( - storyFn: PartialStoryFn, - { args }: StoryContext -) => { - const component = storyFn(); - const el = React.useRef(null); - - // FIXME: This recreates the Vue instance every time, which should be optimized - React.useEffect(() => { - const root = new Vue({ - el: el.current, - data() { - return { - [COMPONENT]: component, - [VALUES]: args, - }; - }, - render(h) { - const children = this[COMPONENT] ? [h(this[COMPONENT])] : undefined; - return h('div', { attrs: { id: 'root' } }, children); - }, - }); - return () => root.$destroy(); - }); - - return React.createElement('div', null, React.createElement('div', { ref: el })); -}; diff --git a/addons/docs/src/frameworks/vue/preset.ts b/addons/docs/src/frameworks/vue/preset.ts deleted file mode 100644 index 5650c588cc67..000000000000 --- a/addons/docs/src/frameworks/vue/preset.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { Options } from '@storybook/core-common'; - -export function webpackFinal(webpackConfig: any = {}, options: Options) { - let vueDocgenOptions = {}; - - options.presetsList?.forEach((preset) => { - if (preset.name.includes('addon-docs') && preset.options.vueDocgenOptions) { - const appendableOptions = preset.options.vueDocgenOptions; - vueDocgenOptions = { - ...vueDocgenOptions, - ...appendableOptions, - }; - } - }); - - webpackConfig.module.rules.push({ - test: /\.vue$/, - loader: require.resolve('vue-docgen-loader', { paths: [require.resolve('@storybook/vue')] }), - enforce: 'post', - options: { - docgenOptions: { - alias: webpackConfig.resolve.alias, - ...vueDocgenOptions, - }, - }, - }); - return webpackConfig; -} diff --git a/addons/docs/src/frameworks/vue/sourceDecorator.test.ts b/addons/docs/src/frameworks/vue/sourceDecorator.test.ts deleted file mode 100644 index 54695c1ea84f..000000000000 --- a/addons/docs/src/frameworks/vue/sourceDecorator.test.ts +++ /dev/null @@ -1,144 +0,0 @@ -/* eslint no-underscore-dangle: ["error", { "allow": ["_vnode"] }] */ - -import { ComponentOptions } from 'vue'; -import Vue from 'vue/dist/vue'; -import { vnodeToString } from './sourceDecorator'; - -expect.addSnapshotSerializer({ - print: (val: any) => val, - test: (val) => typeof val === 'string', -}); - -const getVNode = (Component: ComponentOptions) => { - const vm = new Vue({ - render(h: (c: any) => unknown) { - return h(Component); - }, - }).$mount(); - - return vm.$children[0]._vnode; -}; - -describe('vnodeToString', () => { - it('basic', () => { - expect( - vnodeToString( - getVNode({ - template: ``, - }) - ) - ).toMatchInlineSnapshot(``); - }); - - it('static class', () => { - expect( - vnodeToString( - getVNode({ - template: ``, - }) - ) - ).toMatchInlineSnapshot(``); - }); - - it('string dynamic class', () => { - expect( - vnodeToString( - getVNode({ - template: ``, - }) - ) - ).toMatchInlineSnapshot(``); - }); - - it('non-string dynamic class', () => { - expect( - vnodeToString( - getVNode({ - template: ``, - }) - ) - ).toMatchInlineSnapshot(``); - }); - - it('array dynamic class', () => { - expect( - vnodeToString( - getVNode({ - template: ``, - }) - ) - ).toMatchInlineSnapshot(``); - }); - - it('object dynamic class', () => { - expect( - vnodeToString( - getVNode({ - template: ``, - }) - ) - ).toMatchInlineSnapshot(``); - }); - - it('merge dynamic and static classes', () => { - expect( - vnodeToString( - getVNode({ - template: ``, - }) - ) - ).toMatchInlineSnapshot(``); - }); - - it('attributes', () => { - const MyComponent: ComponentOptions = { - props: ['propA', 'propB', 'propC', 'propD', 'propE', 'propF', 'propG'], - template: '
', - }; - - expect( - vnodeToString( - getVNode({ - components: { MyComponent }, - data(): { props: Record } { - return { - props: { - propA: 'propA', - propB: 1, - propC: null, - propD: { - foo: 'bar', - }, - propE: true, - propF() { - const foo = 'bar'; - - return foo; - }, - propG: undefined, - }, - }; - }, - template: ``, - }) - ) - ).toMatchInlineSnapshot( - `` - ); - }); - - it('children', () => { - expect( - vnodeToString( - getVNode({ - template: ` -
-
- -
-
`, - }) - ) - ).toMatchInlineSnapshot(`
`); - }); -}); diff --git a/addons/docs/src/frameworks/vue/sourceDecorator.ts b/addons/docs/src/frameworks/vue/sourceDecorator.ts deleted file mode 100644 index 0fbab7a1e4ea..000000000000 --- a/addons/docs/src/frameworks/vue/sourceDecorator.ts +++ /dev/null @@ -1,236 +0,0 @@ -/* eslint no-underscore-dangle: ["error", { "allow": ["_vnode"] }] */ - -import { StoryContext } from '@storybook/csf'; -import { addons } from '@storybook/addons'; -import { logger } from '@storybook/client-logger'; -import prettier from 'prettier/standalone'; -import prettierHtml from 'prettier/parser-html'; -import type Vue from 'vue'; -import { VueFramework } from '@storybook/vue'; - -import { SourceType, SNIPPET_RENDERED } from '../../shared'; - -export const skipSourceRender = (context: StoryContext) => { - const sourceParams = context?.parameters.docs?.source; - const isArgsStory = context?.parameters.__isArgsStory; - - // always render if the user forces it - if (sourceParams?.type === SourceType.DYNAMIC) { - return false; - } - - // never render if the user is forcing the block to render code, or - // if the user provides code, or if it's not an args story. - return !isArgsStory || sourceParams?.code || sourceParams?.type === SourceType.CODE; -}; - -export const sourceDecorator = (storyFn: any, context: StoryContext) => { - const story = storyFn(); - - // See ../react/jsxDecorator.tsx - if (skipSourceRender(context)) { - return story; - } - - const channel = addons.getChannel(); - - const storyComponent = getStoryComponent(story.options.STORYBOOK_WRAPS); - - return { - components: { - Story: story, - }, - // We need to wait until the wrapper component to be mounted so Vue runtime - // struct VNode tree. We get `this._vnode == null` if switch to `created` - // lifecycle hook. - mounted() { - // Theoretically this does not happens but we need to check it. - if (!this._vnode) { - return; - } - - try { - const storyNode = lookupStoryInstance(this, storyComponent); - - const code = vnodeToString(storyNode._vnode); - - channel.emit( - SNIPPET_RENDERED, - (context || {}).id, - prettier.format(``, { - parser: 'vue', - plugins: [prettierHtml], - // Because the parsed vnode missing spaces right before/after the surround tag, - // we always get weird wrapped code without this option. - htmlWhitespaceSensitivity: 'ignore', - }) - ); - } catch (e) { - logger.warn(`Failed to generate dynamic story source: ${e}`); - } - }, - template: '', - }; -}; - -export function vnodeToString(vnode: Vue.VNode): string { - const attrString = [ - ...(vnode.data?.slot ? ([['slot', vnode.data.slot]] as [string, any][]) : []), - ['class', stringifyClassAttribute(vnode)], - ...(vnode.componentOptions?.propsData ? Object.entries(vnode.componentOptions.propsData) : []), - ...(vnode.data?.attrs ? Object.entries(vnode.data.attrs) : []), - ] - .filter(([name], index, list) => list.findIndex((item) => item[0] === name) === index) - .map(([name, value]) => stringifyAttr(name, value)) - .filter(Boolean) - .join(' '); - - if (!vnode.componentOptions) { - // Non-component elements (div, span, etc...) - if (vnode.tag) { - if (!vnode.children) { - return `<${vnode.tag} ${attrString}/>`; - } - - return `<${vnode.tag} ${attrString}>${vnode.children.map(vnodeToString).join('')}`; - } - - // TextNode - if (vnode.text) { - if (/[<>"&]/.test(vnode.text)) { - return `{{\`${vnode.text.replace(/`/g, '\\`')}\`}}`; - } - - return vnode.text; - } - - // Unknown - return ''; - } - - // Probably users never see the "unknown-component". It seems that vnode.tag - // is always set. - const tag = vnode.componentOptions.tag || vnode.tag || 'unknown-component'; - - if (!vnode.componentOptions.children) { - return `<${tag} ${attrString}/>`; - } - - return `<${tag} ${attrString}>${vnode.componentOptions.children - .map(vnodeToString) - .join('')}`; -} - -function stringifyClassAttribute(vnode: Vue.VNode): string | undefined { - if (!vnode.data || (!vnode.data.staticClass && !vnode.data.class)) { - return undefined; - } - - return ( - [...(vnode.data.staticClass?.split(' ') ?? []), ...normalizeClassBinding(vnode.data.class)] - .filter(Boolean) - .join(' ') || undefined - ); -} - -// https://vuejs.org/v2/guide/class-and-style.html#Binding-HTML-Classes -function normalizeClassBinding(binding: unknown): readonly string[] { - if (!binding) { - return []; - } - - if (typeof binding === 'string') { - return [binding]; - } - - if (binding instanceof Array) { - // To handle an object-in-array binding smartly, we use recursion - return binding.map(normalizeClassBinding).reduce((a, b) => [...a, ...b], []); - } - - if (typeof binding === 'object') { - return Object.entries(binding) - .filter(([, active]) => !!active) - .map(([className]) => className); - } - - // Unknown class binding - return []; -} - -function stringifyAttr(attrName: string, value?: any): string | null { - if (typeof value === 'undefined' || typeof value === 'function') { - return null; - } - - if (value === true) { - return attrName; - } - - if (typeof value === 'string') { - return `${attrName}=${quote(value)}`; - } - - // TODO: Better serialization (unquoted object key, Symbol/Classes, etc...) - // Seems like Prettier don't format JSON-look object (= when keys are quoted) - return `:${attrName}=${quote(JSON.stringify(value))}`; -} - -function quote(value: string) { - return value.includes(`"`) && !value.includes(`'`) - ? `'${value}'` - : `"${value.replace(/"/g, '"')}"`; -} - -/** - * Skip decorators and grab a story component itself. - * https://github.com/pocka/storybook-addon-vue-info/pull/113 - */ -function getStoryComponent(w: any) { - let matched = w; - - while ( - matched && - matched.options && - matched.options.components && - matched.options.components.story && - matched.options.components.story.options && - matched.options.components.story.options.STORYBOOK_WRAPS - ) { - matched = matched.options.components.story.options.STORYBOOK_WRAPS; - } - return matched; -} - -interface VueInternal { - // We need to access this private property, in order to grab the vnode of the - // component instead of the "vnode of the parent of the component". - // Probably it's safe to rely on this because vm.$vnode is a reference for this. - // https://github.com/vuejs/vue/issues/6070#issuecomment-314389883 - _vnode: Vue.VNode; -} - -/** - * Find the story's instance from VNode tree. - */ -function lookupStoryInstance(instance: Vue, storyComponent: any): (Vue & VueInternal) | null { - if ( - instance.$vnode && - instance.$vnode.componentOptions && - instance.$vnode.componentOptions.Ctor === storyComponent - ) { - return instance as Vue & VueInternal; - } - - for (let i = 0, l = instance.$children.length; i < l; i += 1) { - const found = lookupStoryInstance(instance.$children[i], storyComponent); - - if (found) { - return found; - } - } - - return null; -} diff --git a/addons/docs/src/frameworks/vue3/config.ts b/addons/docs/src/frameworks/vue3/config.ts deleted file mode 100644 index 4a4fd37a39fb..000000000000 --- a/addons/docs/src/frameworks/vue3/config.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { extractArgTypes } from './extractArgTypes'; -import { extractComponentDescription } from '../../lib/docgen'; -import { prepareForInline } from './prepareForInline'; - -export const parameters = { - docs: { - inlineStories: true, - prepareForInline, - extractArgTypes, - extractComponentDescription, - }, -}; diff --git a/addons/docs/src/frameworks/vue3/extractArgTypes.ts b/addons/docs/src/frameworks/vue3/extractArgTypes.ts deleted file mode 100644 index 039f0c7be2ae..000000000000 --- a/addons/docs/src/frameworks/vue3/extractArgTypes.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { StrictArgTypes } from '@storybook/csf'; -import { ArgTypesExtractor, hasDocgen, extractComponentProps } from '../../lib/docgen'; -import { convert } from '../../lib/convert'; - -const SECTIONS = ['props', 'events', 'slots']; - -export const extractArgTypes: ArgTypesExtractor = (component) => { - if (!hasDocgen(component)) { - return null; - } - const results: StrictArgTypes = {}; - SECTIONS.forEach((section) => { - const props = extractComponentProps(component, section); - props.forEach(({ propDef, docgenInfo, jsDocTags }) => { - const { name, type, description, defaultValue: defaultSummary, required } = propDef; - const sbType = section === 'props' ? convert(docgenInfo) : { name: 'void' }; - - results[name] = { - name, - description, - type: { required, ...sbType }, - table: { - type, - jsDocTags, - defaultValue: defaultSummary, - category: section, - }, - }; - }); - }); - return results; -}; diff --git a/addons/docs/src/frameworks/vue3/prepareForInline.ts b/addons/docs/src/frameworks/vue3/prepareForInline.ts deleted file mode 100644 index 2f414504289e..000000000000 --- a/addons/docs/src/frameworks/vue3/prepareForInline.ts +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import * as Vue from 'vue'; -import { StoryContext, PartialStoryFn } from '@storybook/csf'; -import { app, VueFramework } from '@storybook/vue3'; - -// This is cast as `any` to workaround type errors caused by Vue 2 types -const { render, h } = Vue as any; - -export const prepareForInline = ( - storyFn: PartialStoryFn, - { args }: StoryContext -) => { - const component = storyFn(); - - const vnode = h(component, args); - // By attaching the app context from `@storybook/vue3` to the vnode - // like this, these stoeis are able to access any app config stuff - // the end-user set inside `.storybook/preview.js` - vnode.appContext = app._context; // eslint-disable-line no-underscore-dangle - - return React.createElement('div', { - ref: (node?: HTMLDivElement): void => (node ? render(vnode, node) : null), - }); -}; diff --git a/addons/docs/src/frameworks/vue3/preset.ts b/addons/docs/src/frameworks/vue3/preset.ts deleted file mode 100644 index c8e044caf8e2..000000000000 --- a/addons/docs/src/frameworks/vue3/preset.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { Options } from '@storybook/core-common'; - -export function webpackFinal(webpackConfig: any = {}, options: Options) { - let vueDocgenOptions = {}; - - options.presetsList?.forEach((preset) => { - if (preset.name.includes('addon-docs') && preset.options.vueDocgenOptions) { - const appendableOptions = preset.options.vueDocgenOptions; - vueDocgenOptions = { - ...vueDocgenOptions, - ...appendableOptions, - }; - } - }); - - webpackConfig.module.rules.push({ - test: /\.vue$/, - loader: require.resolve('vue-docgen-loader', { paths: [require.resolve('@storybook/vue3')] }), - enforce: 'post', - options: { - docgenOptions: { - alias: webpackConfig.resolve.alias, - ...vueDocgenOptions, - }, - }, - }); - return webpackConfig; -} diff --git a/addons/docs/src/frameworks/web-components/config.ts b/addons/docs/src/frameworks/web-components/config.ts deleted file mode 100644 index 30273896e170..000000000000 --- a/addons/docs/src/frameworks/web-components/config.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { extractArgTypes, extractComponentDescription } from './custom-elements'; -import { sourceDecorator } from './sourceDecorator'; -import { prepareForInline } from './prepareForInline'; -import { SourceType } from '../../shared'; - -export const decorators = [sourceDecorator]; - -export const parameters = { - docs: { - extractArgTypes, - extractComponentDescription, - inlineStories: true, - prepareForInline, - source: { - type: SourceType.DYNAMIC, - language: 'html', - }, - }, -}; diff --git a/addons/docs/src/frameworks/web-components/prepareForInline.ts b/addons/docs/src/frameworks/web-components/prepareForInline.ts deleted file mode 100644 index dcdb86c3432b..000000000000 --- a/addons/docs/src/frameworks/web-components/prepareForInline.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { PartialStoryFn } from '@storybook/csf'; -import { WebComponentsFramework } from '@storybook/web-components'; -import React from 'react'; - -import { render } from 'lit-html'; - -export const prepareForInline = (storyFn: PartialStoryFn) => { - class Story extends React.Component { - wrapperRef = React.createRef(); - - componentDidMount(): void { - render(storyFn(), this.wrapperRef.current); - } - - render(): React.ReactElement { - return React.createElement('div', { ref: this.wrapperRef }); - } - } - - return (React.createElement(Story) as unknown) as React.CElement<{}, React.Component>; -}; diff --git a/addons/docs/src/frameworks/web-components/sourceDecorator.test.ts b/addons/docs/src/frameworks/web-components/sourceDecorator.test.ts deleted file mode 100644 index 28cff3d42c79..000000000000 --- a/addons/docs/src/frameworks/web-components/sourceDecorator.test.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { html } from 'lit-html'; -import { styleMap } from 'lit-html/directives/style-map'; -import { addons, StoryContext, useEffect } from '@storybook/addons'; -import { sourceDecorator } from './sourceDecorator'; -import { SNIPPET_RENDERED } from '../../shared'; - -jest.mock('@storybook/addons'); -const mockedAddons = addons as jest.Mocked; -const mockedUseEffect = useEffect as jest.Mocked; - -expect.addSnapshotSerializer({ - print: (val: any) => val, - test: (val) => typeof val === 'string', -}); - -const tick = () => new Promise((r) => setTimeout(r, 0)); - -const makeContext = (name: string, parameters: any, args: any, extra?: object): StoryContext => ({ - id: `lit-test--${name}`, - kind: 'js-text', - name, - parameters, - args, - argTypes: {}, - globals: {}, - ...extra, -}); - -describe('sourceDecorator', () => { - let mockChannel: { on: jest.Mock; emit?: jest.Mock }; - beforeEach(() => { - mockedAddons.getChannel.mockReset(); - mockedUseEffect.mockImplementation((cb) => setTimeout(cb, 0)); - - mockChannel = { on: jest.fn(), emit: jest.fn() }; - mockedAddons.getChannel.mockReturnValue(mockChannel as any); - }); - - it('should render dynamically for args stories', async () => { - const storyFn = (args: any) => html`
args story
`; - const context = makeContext('args', { __isArgsStory: true }, {}); - sourceDecorator(storyFn, context); - await tick(); - expect(mockChannel.emit).toHaveBeenCalledWith( - SNIPPET_RENDERED, - 'lit-test--args', - '
args story
' - ); - }); - - it('should skip dynamic rendering for no-args stories', async () => { - const storyFn = () => html`
classic story
`; - const context = makeContext('classic', {}, {}); - sourceDecorator(storyFn, context); - await tick(); - expect(mockChannel.emit).not.toHaveBeenCalled(); - }); - - it('should use the originalStoryFn if excludeDecorators is set', async () => { - const storyFn = (args: any) => html`
args story
`; - const decoratedStoryFn = (args: any) => html` -
${storyFn(args)}
- `; - const context = makeContext( - 'args', - { - __isArgsStory: true, - docs: { - source: { - excludeDecorators: true, - }, - }, - }, - {}, - { originalStoryFn: storyFn } - ); - sourceDecorator(decoratedStoryFn, context); - await tick(); - expect(mockChannel.emit).toHaveBeenCalledWith( - SNIPPET_RENDERED, - 'lit-test--args', - '
args story
' - ); - }); - - it('allows the snippet output to be modified by transformSource', async () => { - const storyFn = (args: any) => html`
args story
`; - const transformSource = (dom: string) => `

${dom}

`; - const docs = { transformSource }; - const context = makeContext('args', { __isArgsStory: true, docs }, {}); - sourceDecorator(storyFn, context); - await tick(); - expect(mockChannel.emit).toHaveBeenCalledWith( - SNIPPET_RENDERED, - 'lit-test--args', - '

args story

' - ); - }); - - it('provides the story context to transformSource', () => { - const storyFn = (args: any) => html`
args story
`; - const transformSource = jest.fn((x) => x); - const docs = { transformSource }; - const context = makeContext('args', { __isArgsStory: true, docs }, {}); - sourceDecorator(storyFn, context); - expect(transformSource).toHaveBeenCalledWith('
args story
', context); - }); -}); diff --git a/addons/docs/src/frameworks/web-components/sourceDecorator.ts b/addons/docs/src/frameworks/web-components/sourceDecorator.ts deleted file mode 100644 index 9cf5b9bec7e4..000000000000 --- a/addons/docs/src/frameworks/web-components/sourceDecorator.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* global window */ -import { render } from 'lit-html'; -import { ArgsStoryFn, PartialStoryFn, StoryContext } from '@storybook/csf'; -import { addons, useEffect } from '@storybook/addons'; -import { WebComponentsFramework } from '@storybook/web-components'; - -import { SNIPPET_RENDERED, SourceType } from '../../shared'; - -function skipSourceRender(context: StoryContext) { - const sourceParams = context?.parameters.docs?.source; - const isArgsStory = context?.parameters.__isArgsStory; - - // always render if the user forces it - if (sourceParams?.type === SourceType.DYNAMIC) { - return false; - } - - // never render if the user is forcing the block to render code, or - // if the user provides code, or if it's not an args story. - return !isArgsStory || sourceParams?.code || sourceParams?.type === SourceType.CODE; -} - -function applyTransformSource( - source: string, - context: StoryContext -): string { - const { transformSource } = context.parameters.docs ?? {}; - if (typeof transformSource !== 'function') return source; - return transformSource(source, context); -} - -export function sourceDecorator( - storyFn: PartialStoryFn, - context: StoryContext -) { - const story = context?.parameters.docs?.source?.excludeDecorators - ? (context.originalStoryFn as ArgsStoryFn)(context.args, context) - : storyFn(); - - let source: string; - useEffect(() => { - if (source) addons.getChannel().emit(SNIPPET_RENDERED, context.id, source); - }); - if (!skipSourceRender(context)) { - const container = window.document.createElement('div'); - render(story, container); - source = applyTransformSource(container.innerHTML.replace(//g, ''), context); - } - - return story; -} diff --git a/addons/docs/src/lib/convert/__testfixtures__/proptypes/enums.js b/addons/docs/src/lib/convert/__testfixtures__/proptypes/enums.js deleted file mode 100644 index 60f51359b6f5..000000000000 --- a/addons/docs/src/lib/convert/__testfixtures__/proptypes/enums.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -export const Component = (props) => <>JSON.stringify(props); -Component.propTypes = { - oneOfNumber: PropTypes.oneOf([1, 2, 3]), - oneOfString: PropTypes.oneOf(['static', 'timed']), -}; diff --git a/addons/docs/src/lib/convert/flow/convert.ts b/addons/docs/src/lib/convert/flow/convert.ts deleted file mode 100644 index e61a8c6acd4d..000000000000 --- a/addons/docs/src/lib/convert/flow/convert.ts +++ /dev/null @@ -1,55 +0,0 @@ -/* eslint-disable no-case-declarations */ -import { SBType } from '@storybook/csf'; -import { FlowType, FlowSigType, FlowLiteralType } from './types'; - -const isLiteral = (type: FlowType) => type.name === 'literal'; -const toEnumOption = (element: FlowLiteralType) => element.value.replace(/['|"]/g, ''); - -const convertSig = (type: FlowSigType) => { - switch (type.type) { - case 'function': - return { name: 'function' }; - case 'object': - const values: any = {}; - type.signature.properties.forEach((prop) => { - values[prop.key] = convert(prop.value); - }); - return { - name: 'object', - value: values, - }; - default: - throw new Error(`Unknown: ${type}`); - } -}; - -export const convert = (type: FlowType): SBType | void => { - const { name, raw } = type; - const base: any = {}; - if (typeof raw !== 'undefined') base.raw = raw; - switch (type.name) { - case 'literal': - return { ...base, name: 'other', value: type.value }; - case 'string': - case 'number': - case 'symbol': - case 'boolean': { - return { ...base, name }; - } - case 'Array': { - return { ...base, name: 'array', value: type.elements.map(convert) }; - } - case 'signature': - return { ...base, ...convertSig(type) }; - case 'union': - if (type.elements.every(isLiteral)) { - return { ...base, name: 'enum', value: type.elements.map(toEnumOption) }; - } - return { ...base, name, value: type.elements.map(convert) }; - - case 'intersection': - return { ...base, name, value: type.elements.map(convert) }; - default: - return { ...base, name: 'other', value: name }; - } -}; diff --git a/addons/docs/src/lib/convert/proptypes/convert.ts b/addons/docs/src/lib/convert/proptypes/convert.ts deleted file mode 100644 index 7a7bbd9b3f51..000000000000 --- a/addons/docs/src/lib/convert/proptypes/convert.ts +++ /dev/null @@ -1,62 +0,0 @@ -/* eslint-disable no-case-declarations */ -import mapValues from 'lodash/mapValues'; -import { SBType } from '@storybook/csf'; -import { PTType } from './types'; -import { trimQuotes } from '../utils'; - -const SIGNATURE_REGEXP = /^\(.*\) => /; - -export const convert = (type: PTType): SBType | any => { - const { name, raw, computed, value } = type; - const base: any = {}; - if (typeof raw !== 'undefined') base.raw = raw; - - switch (name) { - case 'enum': { - const values = computed ? value : value.map((v: PTType) => trimQuotes(v.value)); - return { ...base, name, value: values }; - } - case 'string': - case 'number': - case 'symbol': - return { ...base, name }; - case 'func': - return { ...base, name: 'function' }; - case 'bool': - case 'boolean': - return { ...base, name: 'boolean' }; - case 'arrayOf': - case 'array': - return { ...base, name: 'array', value: value && convert(value as PTType) }; - case 'object': - return { ...base, name }; - case 'objectOf': - return { ...base, name, value: convert(value as PTType) }; - case 'shape': - case 'exact': - const values = mapValues(value, (field) => convert(field)); - return { ...base, name: 'object', value: values }; - case 'union': - return { ...base, name: 'union', value: value.map((v: PTType) => convert(v)) }; - case 'instanceOf': - case 'element': - case 'elementType': - default: { - if (name?.indexOf('|') > 0) { - // react-docgen-typescript-plugin doesn't always produce enum-like unions - // (like if a user has turned off shouldExtractValuesFromUnion) so here we - // try to recover and construct one. - try { - const literalValues = name.split('|').map((v: string) => JSON.parse(v)); - return { ...base, name: 'enum', value: literalValues }; - } catch (err) { - // fall through - } - } - const otherVal = value ? `${name}(${value})` : name; - const otherName = SIGNATURE_REGEXP.test(name) ? 'function' : 'other'; - - return { ...base, name: otherName, value: otherVal }; - } - } -}; diff --git a/addons/docs/src/lib/convert/typescript/convert.ts b/addons/docs/src/lib/convert/typescript/convert.ts deleted file mode 100644 index bae2e7235e9c..000000000000 --- a/addons/docs/src/lib/convert/typescript/convert.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* eslint-disable no-case-declarations */ -import { SBType } from '@storybook/csf'; -import { TSType, TSSigType } from './types'; - -const convertSig = (type: TSSigType) => { - switch (type.type) { - case 'function': - return { name: 'function' }; - case 'object': - const values: any = {}; - type.signature.properties.forEach((prop) => { - values[prop.key] = convert(prop.value); - }); - return { - name: 'object', - value: values, - }; - default: - throw new Error(`Unknown: ${type}`); - } -}; - -export const convert = (type: TSType): SBType | void => { - const { name, raw } = type; - const base: any = {}; - if (typeof raw !== 'undefined') base.raw = raw; - switch (type.name) { - case 'string': - case 'number': - case 'symbol': - case 'boolean': { - return { ...base, name }; - } - case 'Array': { - return { ...base, name: 'array', value: type.elements.map(convert) }; - } - case 'signature': - return { ...base, ...convertSig(type) }; - case 'union': - case 'intersection': - return { ...base, name, value: type.elements.map(convert) }; - default: - return { ...base, name: 'other', value: name }; - } -}; diff --git a/addons/docs/src/lib/convert/utils.ts b/addons/docs/src/lib/convert/utils.ts deleted file mode 100644 index 00d59c295b7f..000000000000 --- a/addons/docs/src/lib/convert/utils.ts +++ /dev/null @@ -1,2 +0,0 @@ -const QUOTE_REGEX = /^['"]|['"]$/g; -export const trimQuotes = (str: string) => str.replace(QUOTE_REGEX, ''); diff --git a/addons/docs/src/lib/docgen/flow/createDefaultValue.ts b/addons/docs/src/lib/docgen/flow/createDefaultValue.ts deleted file mode 100644 index a9be5f0fe9d4..000000000000 --- a/addons/docs/src/lib/docgen/flow/createDefaultValue.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { PropDefaultValue } from '@storybook/components'; -import { DocgenPropDefaultValue, DocgenPropType } from '../types'; -import { createSummaryValue, isTooLongForDefaultValueSummary } from '../../utils'; -import { isDefaultValueBlacklisted } from '../utils/defaultValue'; - -export function createDefaultValue( - defaultValue: DocgenPropDefaultValue, - type: DocgenPropType -): PropDefaultValue { - if (defaultValue != null) { - const { value } = defaultValue; - - if (!isDefaultValueBlacklisted(value)) { - return !isTooLongForDefaultValueSummary(value) - ? createSummaryValue(value) - : createSummaryValue(type.name, value); - } - } - - return null; -} diff --git a/addons/docs/src/lib/docgen/flow/createType.ts b/addons/docs/src/lib/docgen/flow/createType.ts deleted file mode 100644 index 2e9d86a93a4f..000000000000 --- a/addons/docs/src/lib/docgen/flow/createType.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { PropType } from '@storybook/components'; -import { DocgenFlowType } from '../types'; -import { createSummaryValue, isTooLongForTypeSummary } from '../../utils'; - -enum FlowTypesType { - UNION = 'union', - SIGNATURE = 'signature', -} - -interface DocgenFlowUnionElement { - name: string; - value?: string; - elements?: DocgenFlowUnionElement[]; - raw?: string; -} - -interface DocgenFlowUnionType extends DocgenFlowType { - elements: DocgenFlowUnionElement[]; -} - -function generateUnionElement({ name, value, elements, raw }: DocgenFlowUnionElement): string { - if (value != null) { - return value; - } - - if (elements != null) { - return elements.map(generateUnionElement).join(' | '); - } - - if (raw != null) { - return raw; - } - - return name; -} - -function generateUnion({ name, raw, elements }: DocgenFlowUnionType): PropType { - if (elements != null) { - return createSummaryValue(elements.map(generateUnionElement).join(' | ')); - } - - if (raw != null) { - // Flow Unions can be defined with or without a leading `|` character, so try to remove it. - return createSummaryValue(raw.replace(/^\|\s*/, '')); - } - - return createSummaryValue(name); -} - -function generateFuncSignature({ type, raw }: DocgenFlowType): PropType { - if (raw != null) { - return createSummaryValue(raw); - } - - return createSummaryValue(type); -} - -function generateObjectSignature({ type, raw }: DocgenFlowType): PropType { - if (raw != null) { - return !isTooLongForTypeSummary(raw) ? createSummaryValue(raw) : createSummaryValue(type, raw); - } - - return createSummaryValue(type); -} - -function generateSignature(flowType: DocgenFlowType): PropType { - const { type } = flowType; - - return type === 'object' ? generateObjectSignature(flowType) : generateFuncSignature(flowType); -} - -function generateDefault({ name, raw }: DocgenFlowType): PropType { - if (raw != null) { - return !isTooLongForTypeSummary(raw) ? createSummaryValue(raw) : createSummaryValue(name, raw); - } - - return createSummaryValue(name); -} - -export function createType(type: DocgenFlowType): PropType { - // A type could be null if a defaultProp has been provided without a type definition. - if (type == null) { - return null; - } - - switch (type.name) { - case FlowTypesType.UNION: - return generateUnion(type as DocgenFlowUnionType); - case FlowTypesType.SIGNATURE: - return generateSignature(type); - default: - return generateDefault(type); - } -} diff --git a/addons/docs/src/lib/docgen/index.ts b/addons/docs/src/lib/docgen/index.ts deleted file mode 100644 index 4116325caa86..000000000000 --- a/addons/docs/src/lib/docgen/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './types'; -export * from './utils'; -export * from './extractDocgenProps'; diff --git a/addons/docs/src/lib/docgen/typeScript/createDefaultValue.ts b/addons/docs/src/lib/docgen/typeScript/createDefaultValue.ts deleted file mode 100644 index 14bfcf67b687..000000000000 --- a/addons/docs/src/lib/docgen/typeScript/createDefaultValue.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { PropDefaultValue } from '@storybook/components'; -import { DocgenInfo } from '../types'; -import { createSummaryValue } from '../../utils'; -import { isDefaultValueBlacklisted } from '../utils/defaultValue'; - -export function createDefaultValue({ defaultValue }: DocgenInfo): PropDefaultValue { - if (defaultValue != null) { - const { value } = defaultValue; - - if (!isDefaultValueBlacklisted(value)) { - return createSummaryValue(value); - } - } - - return null; -} diff --git a/addons/docs/src/lib/docgen/typeScript/createType.ts b/addons/docs/src/lib/docgen/typeScript/createType.ts deleted file mode 100644 index c2022c90d4f3..000000000000 --- a/addons/docs/src/lib/docgen/typeScript/createType.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { PropType } from '@storybook/components'; -import { DocgenInfo } from '../types'; -import { createSummaryValue } from '../../utils'; - -export function createType({ tsType, required }: DocgenInfo): PropType { - // A type could be null if a defaultProp has been provided without a type definition. - if (tsType == null) { - return null; - } - - if (!required) { - return createSummaryValue(tsType.name.replace(' | undefined', '')); - } - - return createSummaryValue(tsType.name); -} diff --git a/addons/docs/src/lib/docgen/types.ts b/addons/docs/src/lib/docgen/types.ts deleted file mode 100644 index 0fb5fa82373c..000000000000 --- a/addons/docs/src/lib/docgen/types.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { StrictArgTypes } from '@storybook/csf'; -import { PropDef } from './PropDef'; -import { Component } from '../../blocks/types'; - -export type PropsExtractor = (component: Component) => { rows?: PropDef[] } | null; - -export type ArgTypesExtractor = (component: Component) => StrictArgTypes | null; - -export interface DocgenType { - name: string; - description?: string; - required?: boolean; - value?: any; // Seems like this can be many things -} - -export interface DocgenPropType extends DocgenType { - value?: any; - raw?: string; - computed?: boolean; -} - -export interface DocgenFlowType extends DocgenType { - type?: string; - raw?: string; - signature?: any; - elements?: any[]; -} - -// eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface DocgenTypeScriptType extends DocgenType {} - -// export type DocgenType = DocgenPropType | DocgenFlowType | DocgenTypeScriptType; - -export interface DocgenPropDefaultValue { - value: string; - computed?: boolean; - func?: boolean; -} - -export interface DocgenInfo { - type?: DocgenPropType; - flowType?: DocgenFlowType; - tsType?: DocgenTypeScriptType; - required: boolean; - description?: string; - defaultValue?: DocgenPropDefaultValue; -} - -export enum TypeSystem { - JAVASCRIPT = 'JavaScript', - FLOW = 'Flow', - TYPESCRIPT = 'TypeScript', - UNKNOWN = 'Unknown', -} - -export type { PropDef }; diff --git a/addons/docs/src/lib/index.ts b/addons/docs/src/lib/index.ts deleted file mode 100644 index 04bca77e0dec..000000000000 --- a/addons/docs/src/lib/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './utils'; diff --git a/addons/docs/src/lib/utils.ts b/addons/docs/src/lib/utils.ts deleted file mode 100644 index b623c12e19b7..000000000000 --- a/addons/docs/src/lib/utils.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { PropSummaryValue } from '@storybook/components'; - -export const MAX_TYPE_SUMMARY_LENGTH = 90; -export const MAX_DEFAULT_VALUE_SUMMARY_LENGTH = 50; - -export function isTooLongForTypeSummary(value: string): boolean { - return value.length > MAX_TYPE_SUMMARY_LENGTH; -} - -export function isTooLongForDefaultValueSummary(value: string): boolean { - return value.length > MAX_DEFAULT_VALUE_SUMMARY_LENGTH; -} - -export function createSummaryValue(summary: string, detail?: string): PropSummaryValue { - if (summary === detail) { - return { summary }; - } - return { summary, detail }; -} - -export const normalizeNewlines = (string: string) => string.replace(/\\r\\n/g, '\\n'); diff --git a/addons/docs/src/register.ts b/addons/docs/src/manager.ts similarity index 100% rename from addons/docs/src/register.ts rename to addons/docs/src/manager.ts diff --git a/addons/docs/src/preset.ts b/addons/docs/src/preset.ts new file mode 100644 index 000000000000..b6cb10d7e2b1 --- /dev/null +++ b/addons/docs/src/preset.ts @@ -0,0 +1,149 @@ +import path from 'path'; +import remarkSlug from 'remark-slug'; +import remarkExternalLinks from 'remark-external-links'; +import global from 'global'; + +import type { Options } from '@storybook/core-common'; +import { logger } from '@storybook/node-logger'; + +// for frameworks that are not working with react, we need to configure +// the jsx to transpile mdx, for now there will be a flag for that +// for more complex solutions we can find alone that we need to add '@babel/plugin-transform-react-jsx' +type BabelParams = { + babelOptions?: any; + mdxBabelOptions?: any; + configureJSX?: boolean; +}; +function createBabelOptions({ babelOptions, mdxBabelOptions, configureJSX }: BabelParams) { + const babelPlugins = mdxBabelOptions?.plugins || babelOptions?.plugins || []; + const jsxPlugin = [ + require.resolve('@babel/plugin-transform-react-jsx'), + { pragma: 'React.createElement', pragmaFrag: 'React.Fragment' }, + ]; + const plugins = configureJSX ? [...babelPlugins, jsxPlugin] : babelPlugins; + return { + // don't use the root babelrc by default (users can override this in mdxBabelOptions) + babelrc: false, + configFile: false, + ...babelOptions, + ...mdxBabelOptions, + plugins, + }; +} + +export async function webpack( + webpackConfig: any = {}, + options: Options & + BabelParams & { sourceLoaderOptions: any; transcludeMarkdown: boolean } /* & Parameters< + typeof createCompiler + >[0] */ +) { + const resolvedBabelLoader = require.resolve('babel-loader'); + + const { module = {} } = webpackConfig; + + // it will reuse babel options that are already in use in storybook + // also, these babel options are chained with other presets. + const { + babelOptions, + mdxBabelOptions, + configureJSX = true, + sourceLoaderOptions = { injectStoryParameters: true }, + transcludeMarkdown = false, + } = options; + + const mdxLoaderOptions = { + skipCsf: true, + remarkPlugins: [remarkSlug, remarkExternalLinks], + }; + + const mdxVersion = global.FEATURES?.previewMdx2 ? 'MDX2' : 'MDX1'; + logger.info(`Addon-docs: using ${mdxVersion}`); + + const mdxLoader = global.FEATURES?.previewMdx2 + ? require.resolve('@storybook/mdx2-csf/loader') + : require.resolve('@storybook/mdx1-csf/loader'); + + // set `sourceLoaderOptions` to `null` to disable for manual configuration + const sourceLoader = sourceLoaderOptions + ? [ + { + test: /\.(stories|story)\.[tj]sx?$/, + loader: require.resolve('@storybook/source-loader'), + options: { ...sourceLoaderOptions, inspectLocalDependencies: true }, + enforce: 'pre', + }, + ] + : []; + + let rules = module.rules || []; + if (transcludeMarkdown) { + rules = [ + ...rules.filter((rule: any) => rule.test?.toString() !== '/\\.md$/'), + { + test: /\.md$/, + use: [ + { + loader: resolvedBabelLoader, + options: createBabelOptions({ babelOptions, mdxBabelOptions, configureJSX }), + }, + { + loader: mdxLoader, + options: mdxLoaderOptions, + }, + ], + }, + ]; + } + + const result = { + ...webpackConfig, + module: { + ...module, + rules: [ + ...rules, + { + test: /\.js$/, + include: new RegExp(`node_modules\\${path.sep}acorn-jsx`), + use: [ + { + loader: resolvedBabelLoader, + options: { + presets: [[require.resolve('@babel/preset-env'), { modules: 'commonjs' }]], + }, + }, + ], + }, + { + test: /(stories|story)\.mdx$/, + use: [ + { + loader: resolvedBabelLoader, + options: createBabelOptions({ babelOptions, mdxBabelOptions, configureJSX }), + }, + { + loader: mdxLoader, + }, + ], + }, + { + test: /\.mdx$/, + exclude: /(stories|story)\.mdx$/, + use: [ + { + loader: resolvedBabelLoader, + options: createBabelOptions({ babelOptions, mdxBabelOptions, configureJSX }), + }, + { + loader: mdxLoader, + options: mdxLoaderOptions, + }, + ], + }, + ...sourceLoader, + ], + }, + }; + + return result; +} diff --git a/addons/docs/src/preview.ts b/addons/docs/src/preview.ts new file mode 100644 index 000000000000..a6269505f285 --- /dev/null +++ b/addons/docs/src/preview.ts @@ -0,0 +1,6 @@ +export const parameters = { + docs: { + getContainer: async () => (await import('./blocks')).DocsContainer, + getPage: async () => (await import('./blocks')).DocsPage, + }, +}; diff --git a/addons/docs/src/frameworks/svelte/HOC.svelte b/addons/docs/svelte/HOC.svelte similarity index 100% rename from addons/docs/src/frameworks/svelte/HOC.svelte rename to addons/docs/svelte/HOC.svelte diff --git a/addons/docs/tsconfig.json b/addons/docs/tsconfig.json index 38e42ca13fd5..54dcf5a7ef0b 100644 --- a/addons/docs/tsconfig.json +++ b/addons/docs/tsconfig.json @@ -2,9 +2,16 @@ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "./src", - "types": ["webpack-env", "jest", "node"] + "skipLibCheck": true, + "types": [ + "webpack-env", + "jest", + "node" + ] }, - "include": ["src/**/*"], + "include": [ + "src/**/*" + ], "exclude": [ "src/**/*.test.*", "src/**/__tests__/**/*", @@ -12,4 +19,4 @@ "src/**/*.mockdata.*", "src/**/__testfixtures__/**" ] -} +} \ No newline at end of file diff --git a/addons/essentials/README.md b/addons/essentials/README.md index bd9566054c48..8fddb9004daa 100644 --- a/addons/essentials/README.md +++ b/addons/essentials/README.md @@ -2,7 +2,7 @@ Storybook Essentials is a curated collection of addons to bring out the best of Storybook. -Each addon is documented and maintained by the core team and will be upgraded alongside Storybook as the platform evolves. We will also do our best to maintain [framework support](https://github.com/storybookjs/storybook/blob/main/ADDONS_SUPPORT.md) for all of the officially supported frameworks. +Each addon is documented and maintained by the core team and will be upgraded alongside Storybook as the platform evolves. We will also do our best to maintain [framework support](https://storybook.js.org/docs/react/api/frameworks-feature-support) for all of the officially supported frameworks. ## Contents diff --git a/addons/essentials/package.json b/addons/essentials/package.json index 1ea1e5c2b27d..c56311c67ffc 100644 --- a/addons/essentials/package.json +++ b/addons/essentials/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-essentials", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Curated addons to bring out the best of Storybook", "keywords": [ "addon", @@ -39,44 +39,62 @@ "prepare": "node ../../scripts/prepare.js" }, "dependencies": { - "@storybook/addon-actions": "6.4.0-beta.10", - "@storybook/addon-backgrounds": "6.4.0-beta.10", - "@storybook/addon-controls": "6.4.0-beta.10", - "@storybook/addon-docs": "6.4.0-beta.10", - "@storybook/addon-measure": "6.4.0-beta.10", - "@storybook/addon-outline": "6.4.0-beta.10", - "@storybook/addon-toolbars": "6.4.0-beta.10", - "@storybook/addon-viewport": "6.4.0-beta.10", - "@storybook/addons": "6.4.0-beta.10", - "@storybook/api": "6.4.0-beta.10", - "@storybook/node-logger": "6.4.0-beta.10", + "@storybook/addon-actions": "6.5.0-rc.1", + "@storybook/addon-backgrounds": "6.5.0-rc.1", + "@storybook/addon-controls": "6.5.0-rc.1", + "@storybook/addon-docs": "6.5.0-rc.1", + "@storybook/addon-measure": "6.5.0-rc.1", + "@storybook/addon-outline": "6.5.0-rc.1", + "@storybook/addon-toolbars": "6.5.0-rc.1", + "@storybook/addon-viewport": "6.5.0-rc.1", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/api": "6.5.0-rc.1", + "@storybook/core-common": "6.5.0-rc.1", + "@storybook/node-logger": "6.5.0-rc.1", "core-js": "^3.8.2", "regenerator-runtime": "^0.13.7", "ts-dedent": "^2.0.0" }, "devDependencies": { "@babel/core": "^7.12.10", - "@storybook/vue": "6.4.0-beta.10", + "@storybook/vue": "6.5.0-rc.1", "@types/jest": "^26.0.16", "@types/webpack-env": "^1.16.0" }, "peerDependencies": { - "@babel/core": "^7.9.6", - "@storybook/vue": "6.4.0-beta.10", - "@storybook/web-components": "6.4.0-beta.10", - "babel-loader": "^8.0.0", - "lit-html": "^1.4.1 || ^2.0.0-rc.3", - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0", - "webpack": "*" + "@babel/core": "^7.9.6" }, "peerDependenciesMeta": { + "@storybook/angular": { + "optional": true + }, + "@storybook/builder-manager4": { + "optional": true + }, + "@storybook/builder-manager5": { + "optional": true + }, + "@storybook/builder-webpack4": { + "optional": true + }, + "@storybook/builder-webpack5": { + "optional": true + }, + "@storybook/html": { + "optional": true + }, "@storybook/vue": { "optional": true }, + "@storybook/vue3": { + "optional": true + }, "@storybook/web-components": { "optional": true }, + "lit": { + "optional": true + }, "lit-html": { "optional": true }, @@ -86,6 +104,15 @@ "react-dom": { "optional": true }, + "svelte": { + "optional": true + }, + "sveltedoc-parser": { + "optional": true + }, + "vue": { + "optional": true + }, "webpack": { "optional": true } @@ -93,6 +120,6 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", "sbmodern": "dist/modern/index.js" } diff --git a/addons/essentials/src/index.ts b/addons/essentials/src/index.ts index 7cf3bc35170b..7b5bc79e3741 100644 --- a/addons/essentials/src/index.ts +++ b/addons/essentials/src/index.ts @@ -1,26 +1,26 @@ -import path, { join } from 'path'; +import path, { dirname, join } from 'path'; import { logger } from '@storybook/node-logger'; +import { serverRequire } from '@storybook/core-common'; interface PresetOptions { configDir?: string; - backgrounds?: any; - viewport?: any; - docs?: any; + docs?: boolean; + controls?: boolean; + actions?: boolean; + backgrounds?: boolean; + viewport?: boolean; + toolbars?: boolean; + measure?: boolean; + outline?: boolean; } const requireMain = (configDir: string) => { - let main = {}; const absoluteConfigDir = path.isAbsolute(configDir) ? configDir : path.join(process.cwd(), configDir); const mainFile = path.join(absoluteConfigDir, 'main'); - try { - // eslint-disable-next-line global-require,import/no-dynamic-require - main = require(mainFile); - } catch (err) { - logger.warn(`Unable to find main.js: ${mainFile}`); - } - return main; + + return serverRequire(mainFile) ?? {}; }; export function addons(options: PresetOptions = {}) { @@ -50,12 +50,7 @@ export function addons(options: PresetOptions = {}) { // as it's done in `lib/core/src/server/presets.js`. .map((addon) => { try { - return require.resolve(join(addon, 'preset')); - // eslint-disable-next-line no-empty - } catch (err) {} - - try { - return require.resolve(join(addon, 'register')); + return dirname(require.resolve(join(addon, 'package.json'))); // eslint-disable-next-line no-empty } catch (err) {} diff --git a/addons/essentials/tsconfig.json b/addons/essentials/tsconfig.json index dfc6803adda9..64141341cff1 100644 --- a/addons/essentials/tsconfig.json +++ b/addons/essentials/tsconfig.json @@ -2,9 +2,15 @@ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "./src", - "types": ["webpack-env", "jest", "node"] + "types": [ + "webpack-env", + "jest", + "node" + ] }, - "include": ["src/**/*"], + "include": [ + "src/**/*" + ], "exclude": [ "src/**/*.test.*", "src/**/tests/**/*", @@ -13,4 +19,4 @@ "src/**/*.mockdata.*", "src/**/__testfixtures__/**" ] -} +} \ No newline at end of file diff --git a/addons/interactions/README.md b/addons/interactions/README.md new file mode 100644 index 000000000000..d3687e084f32 --- /dev/null +++ b/addons/interactions/README.md @@ -0,0 +1,71 @@ +# Storybook Addon Interactions + +Storybook Addon Interactions enables visual debugging of interactions and tests in [Storybook](https://storybook.js.org). + +![Screenshot](https://user-images.githubusercontent.com/321738/135628189-3d101cba-50bc-49dc-bba0-776586fedaf3.png) + +## Installation + +Install this addon by adding the `@storybook/addon-interactions` dependency: + +```sh +yarn add -D @storybook/addon-interactions @storybook/jest @storybook/testing-library +``` + +within `.storybook/main.js`: + +```js +module.exports = { + addons: ['@storybook/addon-interactions'], +}; +``` + +Note that `@storybook/addon-interactions` must be listed **after** `@storybook/addon-actions` or `@storybook/addon-essentials`. + +## Experimental step debugging + +Step debugging features are experimental and disabled by default. To enable them: + +```js +// main.js +module.exports = { + features: { + interactionsDebugger: true, + }, +}; +``` + +## Usage + +Interactions relies on "instrumented" versions of Jest and Testing Library, that you import from `@storybook/jest` and +`@storybook/testing-library` instead of their original package. You can then use these libraries in your `play` function. + +```js +import { expect } from '@storybook/jest'; +import { within, userEvent } from '@storybook/testing-library'; + +export default { + title: 'Button', + argTypes: { + onClick: { action: true }, + }, +}; + +export const Demo = { + play: async ({ args, canvasElement }) => { + const canvas = within(canvasElement); + await userEvent.click(canvas.getByRole('button')); + await expect(args.onClick).toHaveBeenCalled(); + }, +}; +``` + +In order to enable step-through debugging, calls to `userEvent.*`, `fireEvent`, `findBy*`, `waitFor*` and `expect` have to +be `await`-ed. While debugging, these functions return a Promise that won't resolve until you continue to the next step. + +While you can technically use `screen`, it's recommended to use `within(canvasElement)`. Besides giving you a better error +message when a DOM element can't be found, it will also ensure your play function is compatible with Storybook Docs. + +Any `args` that are marked as an `action` (typically via `argTypes` or `argTypesRegex`) will be automatically wrapped in +a [Jest mock function](https://jestjs.io/docs/jest-object#jestfnimplementation) so you can assert invocations. See +[addon-actions](https://storybook.js.org/docs/react/essentials/actions) for how to setup actions. diff --git a/addons/interactions/manager.js b/addons/interactions/manager.js new file mode 100644 index 000000000000..4e287d25b151 --- /dev/null +++ b/addons/interactions/manager.js @@ -0,0 +1 @@ +import './dist/esm/manager'; diff --git a/addons/interactions/package.json b/addons/interactions/package.json new file mode 100644 index 000000000000..a9cdfc2204d0 --- /dev/null +++ b/addons/interactions/package.json @@ -0,0 +1,89 @@ +{ + "name": "@storybook/addon-interactions", + "version": "6.5.0-rc.1", + "description": "Automate, test and debug user interactions", + "keywords": [ + "storybook-addons", + "data-state", + "test" + ], + "homepage": "https://github.com/storybookjs/storybook/tree/main/addons/interactions", + "bugs": { + "url": "https://github.com/storybookjs/storybook/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/storybookjs/storybook.git", + "directory": "addons/interactions" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "license": "MIT", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/ts3.9/index.d.ts", + "typesVersions": { + "<3.8": { + "dist/ts3.9/*": [ + "dist/ts3.4/*" + ] + } + }, + "files": [ + "dist/**/*", + "README.md", + "*.js", + "*.d.ts" + ], + "scripts": { + "prepare": "node ../../scripts/prepare.js" + }, + "dependencies": { + "@devtools-ds/object-inspector": "^1.1.2", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/api": "6.5.0-rc.1", + "@storybook/client-logger": "6.5.0-rc.1", + "@storybook/components": "6.5.0-rc.1", + "@storybook/core-common": "6.5.0-rc.1", + "@storybook/core-events": "6.5.0-rc.1", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/instrumenter": "6.5.0-rc.1", + "@storybook/theming": "6.5.0-rc.1", + "core-js": "^3.8.2", + "global": "^4.4.0", + "jest-mock": "^27.0.6", + "polished": "^4.2.2", + "ts-dedent": "^2.2.0" + }, + "devDependencies": { + "@storybook/jest": "^0.0.5", + "@storybook/testing-library": "0.0.14-next.0", + "formik": "^2.2.9" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", + "sbmodern": "dist/modern/index.js", + "storybook": { + "displayName": "Interactions", + "unsupportedFrameworks": [ + "react-native" + ], + "icon": "https://user-images.githubusercontent.com/263385/101991666-479cc600-3c7c-11eb-837b-be4e5ffa1bb8.png" + } +} diff --git a/addons/interactions/preset.js b/addons/interactions/preset.js new file mode 100644 index 000000000000..fb325c5b170b --- /dev/null +++ b/addons/interactions/preset.js @@ -0,0 +1,10 @@ +const { checkActionsLoaded } = require('./dist/cjs/preset/checkActionsLoaded'); + +function previewAnnotations(entry = [], options) { + checkActionsLoaded(options.configDir); + return entry; +} + +module.exports = { + previewAnnotations, +}; diff --git a/addons/interactions/preview.js b/addons/interactions/preview.js new file mode 100644 index 000000000000..7817e1d278d2 --- /dev/null +++ b/addons/interactions/preview.js @@ -0,0 +1 @@ +export * from './dist/esm/preset/preview'; diff --git a/addons/interactions/register.js b/addons/interactions/register.js new file mode 100644 index 000000000000..2d916bea61a0 --- /dev/null +++ b/addons/interactions/register.js @@ -0,0 +1,6 @@ +import { once } from '@storybook/client-logger'; +import './manager'; + +once.warn( + 'register.js is deprecated see https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#deprecated-registerjs' +); diff --git a/addons/interactions/src/Panel.stories.tsx b/addons/interactions/src/Panel.stories.tsx new file mode 100644 index 000000000000..cc6f37afdd09 --- /dev/null +++ b/addons/interactions/src/Panel.stories.tsx @@ -0,0 +1,99 @@ +import React from 'react'; +import { action } from '@storybook/addon-actions'; +import { ComponentStoryObj, ComponentMeta } from '@storybook/react'; +import { CallStates } from '@storybook/instrumenter'; +import { styled } from '@storybook/theming'; + +import { getCalls, getInteractions } from './mocks'; +import { AddonPanelPure } from './Panel'; +import SubnavStories from './components/Subnav/Subnav.stories'; + +const StyledWrapper = styled.div(({ theme }) => ({ + backgroundColor: theme.background.content, + color: theme.color.defaultText, + display: 'block', + height: '100%', + position: 'absolute', + left: 0, + right: 0, + bottom: 0, + overflow: 'auto', +})); + +const interactions = getInteractions(CallStates.DONE); + +export default { + title: 'Addons/Interactions/Panel', + component: AddonPanelPure, + decorators: [ + (Story: any) => ( + + + + ), + ], + parameters: { + layout: 'fullscreen', + }, + args: { + calls: new Map(getCalls(CallStates.DONE).map((call) => [call.id, call])), + controls: SubnavStories.args.controls, + controlStates: SubnavStories.args.controlStates, + interactions, + fileName: 'addon-interactions.stories.tsx', + hasException: false, + isPlaying: false, + onScrollToEnd: action('onScrollToEnd'), + endRef: null, + // prop for the AddonPanel used as wrapper of Panel + active: true, + }, +} as ComponentMeta; + +type Story = ComponentStoryObj; + +export const Passing: Story = { + args: { + interactions: getInteractions(CallStates.DONE), + }, +}; + +export const Paused: Story = { + args: { + isPlaying: true, + interactions: getInteractions(CallStates.WAITING), + controlStates: { + debugger: true, + start: false, + back: false, + goto: true, + next: true, + end: true, + }, + pausedAt: interactions[interactions.length - 1].id, + }, +}; + +export const Playing: Story = { + args: { + isPlaying: true, + interactions: getInteractions(CallStates.ACTIVE), + }, +}; + +export const Failed: Story = { + args: { + hasException: true, + interactions: getInteractions(CallStates.ERROR), + }, +}; + +export const WithDebuggingDisabled: Story = { + args: { controlStates: { ...SubnavStories.args.controlStates, debugger: false } }, +}; + +export const NoInteractions: Story = { + args: { + interactions: [], + }, +}; diff --git a/addons/interactions/src/Panel.tsx b/addons/interactions/src/Panel.tsx new file mode 100644 index 000000000000..0b8325166ace --- /dev/null +++ b/addons/interactions/src/Panel.tsx @@ -0,0 +1,250 @@ +import global from 'global'; +import * as React from 'react'; +import ReactDOM from 'react-dom'; +import { useChannel, useParameter, StoryId } from '@storybook/api'; +import { STORY_RENDER_PHASE_CHANGED, FORCE_REMOUNT } from '@storybook/core-events'; +import { AddonPanel, Link, Placeholder } from '@storybook/components'; +import { EVENTS, Call, CallStates, ControlStates, LogItem } from '@storybook/instrumenter'; +import { styled } from '@storybook/theming'; + +import { StatusIcon } from './components/StatusIcon/StatusIcon'; +import { Subnav } from './components/Subnav/Subnav'; +import { Interaction } from './components/Interaction/Interaction'; + +export interface Controls { + start: (args: any) => void; + back: (args: any) => void; + goto: (args: any) => void; + next: (args: any) => void; + end: (args: any) => void; + rerun: (args: any) => void; +} + +interface AddonPanelProps { + active: boolean; +} + +interface InteractionsPanelProps { + active: boolean; + controls: Controls; + controlStates: ControlStates; + interactions: (Call & { + status?: CallStates; + childCallIds: Call['id'][]; + isCollapsed: boolean; + toggleCollapsed: () => void; + })[]; + fileName?: string; + hasException?: boolean; + isPlaying?: boolean; + pausedAt?: Call['id']; + calls: Map; + endRef?: React.Ref; + onScrollToEnd?: () => void; + isRerunAnimating: boolean; + setIsRerunAnimating: React.Dispatch>; +} + +const INITIAL_CONTROL_STATES = { + debugger: false, + start: false, + back: false, + goto: false, + next: false, + end: false, +}; + +const TabIcon = styled(StatusIcon)({ + marginLeft: 5, +}); + +const TabStatus = ({ children }: { children: React.ReactChild }) => { + const container = global.document.getElementById('tabbutton-interactions'); + return container && ReactDOM.createPortal(children, container); +}; + +export const AddonPanelPure: React.FC = React.memo( + ({ + calls, + controls, + controlStates, + interactions, + fileName, + hasException, + isPlaying, + pausedAt, + onScrollToEnd, + endRef, + isRerunAnimating, + setIsRerunAnimating, + ...panelProps + }) => ( + + {controlStates.debugger && interactions.length > 0 && ( + + )} +
+ {interactions.map((call) => ( + + ))} +
+
+ {!isPlaying && interactions.length === 0 && ( + + No interactions found + + Learn how to add interactions to your story + + + )} + + ) +); + +export const Panel: React.FC = (props) => { + const [storyId, setStoryId] = React.useState(); + const [controlStates, setControlStates] = React.useState(INITIAL_CONTROL_STATES); + const [pausedAt, setPausedAt] = React.useState(); + const [isPlaying, setPlaying] = React.useState(false); + const [isRerunAnimating, setIsRerunAnimating] = React.useState(false); + const [scrollTarget, setScrollTarget] = React.useState(); + const [collapsed, setCollapsed] = React.useState>(new Set()); + const [log, setLog] = React.useState([]); + + // Calls are tracked in a ref so we don't needlessly rerender. + const calls = React.useRef>>(new Map()); + const setCall = ({ status, ...call }: Call) => calls.current.set(call.id, call); + + const endRef = React.useRef(); + React.useEffect(() => { + let observer: IntersectionObserver; + if (global.window.IntersectionObserver) { + observer = new global.window.IntersectionObserver( + ([end]: any) => setScrollTarget(end.isIntersecting ? undefined : end.target), + { root: global.window.document.querySelector('#panel-tab-content') } + ); + if (endRef.current) observer.observe(endRef.current); + } + return () => observer?.disconnect(); + }, []); + + const emit = useChannel( + { + [EVENTS.CALL]: setCall, + [EVENTS.SYNC]: (payload) => { + setControlStates(payload.controlStates); + setLog(payload.logItems); + setPausedAt(payload.pausedAt); + }, + [STORY_RENDER_PHASE_CHANGED]: (event) => { + setStoryId(event.storyId); + setPlaying(event.newPhase === 'playing'); + setPausedAt(undefined); + }, + }, + [] + ); + + const controls = React.useMemo( + () => ({ + start: () => emit(EVENTS.START, { storyId }), + back: () => emit(EVENTS.BACK, { storyId }), + goto: (callId: string) => emit(EVENTS.GOTO, { storyId, callId }), + next: () => emit(EVENTS.NEXT, { storyId }), + end: () => emit(EVENTS.END, { storyId }), + rerun: () => { + setIsRerunAnimating(true); + emit(FORCE_REMOUNT, { storyId }); + }, + }), + [storyId] + ); + + const storyFilePath = useParameter('fileName', ''); + const [fileName] = storyFilePath.toString().split('/').slice(-1); + const scrollToTarget = () => scrollTarget?.scrollIntoView({ behavior: 'smooth', block: 'end' }); + + const showStatus = log.length > 0 && !isPlaying; + const hasException = log.some((item) => item.status === CallStates.ERROR); + + const interactions = React.useMemo(() => { + const callsById = new Map(); + const childCallMap = new Map(); + return log + .filter(({ callId, parentId }) => { + if (!parentId) return true; + childCallMap.set(parentId, (childCallMap.get(parentId) || []).concat(callId)); + return !collapsed.has(parentId); + }) + .map(({ callId, status }) => ({ ...calls.current.get(callId), status } as Call)) + .map((call) => { + const status = + call.status === CallStates.ERROR && + callsById.get(call.parentId)?.status === CallStates.ACTIVE + ? CallStates.ACTIVE + : call.status; + callsById.set(call.id, { ...call, status }); + return { + ...call, + status, + childCallIds: childCallMap.get(call.id), + isCollapsed: collapsed.has(call.id), + toggleCollapsed: () => + setCollapsed((ids) => { + if (ids.has(call.id)) ids.delete(call.id); + else ids.add(call.id); + return new Set(ids); + }), + }; + }); + }, [log, collapsed]); + + return ( + + + {showStatus && + (hasException ? : ` (${interactions.length})`)} + + + + ); +}; diff --git a/addons/interactions/src/components/AccountForm/AccountForm.tsx b/addons/interactions/src/components/AccountForm/AccountForm.tsx new file mode 100644 index 000000000000..683f711178e7 --- /dev/null +++ b/addons/interactions/src/components/AccountForm/AccountForm.tsx @@ -0,0 +1,553 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import { Icons, WithTooltip } from '@storybook/components'; +import { keyframes, styled } from '@storybook/theming'; +import { + ErrorMessage, + Field as FormikInput, + Form as FormikForm, + Formik, + FormikProps, +} from 'formik'; +import React, { FC, HTMLAttributes, useCallback, useState } from 'react'; + +const errorMap = { + email: { + required: { + normal: 'Please enter your email address', + tooltip: + 'We do require an email address and a password as a minimum in order to be able to create an account for you to log in with', + }, + format: { + normal: 'Please enter a correctly formatted email address', + tooltip: + 'Your email address is formatted incorrectly and is not correct - please double check for misspelling', + }, + }, + password: { + required: { + normal: 'Please enter a password', + tooltip: 'A password is requried to create an account', + }, + length: { + normal: 'Please enter a password of minimum 6 characters', + tooltip: + 'For security reasons we enforce a password length of minimum 6 characters - but have no other requirements', + }, + }, + verifiedPassword: { + required: { + normal: 'Please verify your password', + tooltip: + 'Verification of your password is required to ensure no errors in the spelling of the password', + }, + match: { + normal: 'Your passwords do not match', + tooltip: + 'Your verification password has to match your password to make sure you have not misspelled', + }, + }, +}; + +// https://emailregex.com/ +const email99RegExp = new RegExp( + // eslint-disable-next-line no-useless-escape + /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ +); + +export interface AccountFormResponse { + success: boolean; +} + +export interface AccountFormValues { + email: string; + password: string; +} + +interface FormValues extends AccountFormValues { + verifiedPassword: string; +} + +interface FormErrors { + email?: string; + emailTooltip?: string; + password?: string; + passwordTooltip?: string; + verifiedPassword?: string; + verifiedPasswordTooltip?: string; +} + +export type AccountFormProps = { + passwordVerification?: boolean; + onSubmit?: (values: AccountFormValues) => void; + onTransactionStart?: (values: AccountFormValues) => void; + onTransactionEnd?: (values: AccountFormResponse) => void; +}; + +export const AccountForm: FC = ({ + passwordVerification, + onSubmit, + onTransactionStart, + onTransactionEnd, +}) => { + const [state, setState] = useState({ + transacting: false, + transactionSuccess: false, + transactionFailure: false, + }); + + const handleFormSubmit = useCallback( + async ({ email, password }: FormValues, { setSubmitting, resetForm }) => { + if (onSubmit) { + onSubmit({ email, password }); + } + + if (onTransactionStart) { + onTransactionStart({ email, password }); + } + + setSubmitting(true); + + setState({ + ...state, + transacting: true, + }); + + await new Promise((r) => setTimeout(r, 2100)); + + const success = Math.random() < 1; + + if (onTransactionEnd) { + onTransactionEnd({ success }); + } + + setSubmitting(false); + resetForm({ values: { email: '', password: '', verifiedPassword: '' } }); + + setState({ + ...state, + transacting: false, + transactionSuccess: success === true, + transactionFailure: success === false, + }); + }, + [setState, onTransactionEnd, onTransactionStart] + ); + + return ( + + + + Storybook icon + + + + + + + + <title>Storybook + + + + + + {!state.transactionSuccess && !state.transactionFailure && ( + Create an account to join the Storybook community + )} + + {state.transactionSuccess && !state.transactionFailure && ( + +

+ Everything is perfect. Your account is ready and we should probably get you started! +

+

So why don't you get started then?

+ { + setState({ + transacting: false, + transactionSuccess: false, + transactionFailure: false, + }); + }} + > + Go back + +
+ )} + {state.transactionFailure && !state.transactionSuccess && ( + +

What a mess, this API is not working

+

+ Someone should probably have a stern talking to about this, but it won't be me - coz + I'm gonna head out into the nice weather +

+ { + setState({ + transacting: false, + transactionSuccess: false, + transactionFailure: false, + }); + }} + > + Go back + +
+ )} + {!state.transactionSuccess && !state.transactionFailure && ( + { + const errors: FormErrors = {}; + + if (!email) { + errors.email = errorMap.email.required.normal; + errors.emailTooltip = errorMap.email.required.tooltip; + } else { + const validEmail = email.match(email99RegExp); + + if (validEmail === null) { + errors.email = errorMap.email.format.normal; + errors.emailTooltip = errorMap.email.format.tooltip; + } + } + + if (!password) { + errors.password = errorMap.password.required.normal; + errors.passwordTooltip = errorMap.password.required.tooltip; + } else if (password.length < 6) { + errors.password = errorMap.password.length.normal; + errors.passwordTooltip = errorMap.password.length.tooltip; + } + + if (passwordVerification && !verifiedPassword) { + errors.verifiedPassword = errorMap.verifiedPassword.required.normal; + errors.verifiedPasswordTooltip = errorMap.verifiedPassword.required.tooltip; + } else if (passwordVerification && password !== verifiedPassword) { + errors.verifiedPassword = errorMap.verifiedPassword.match.normal; + errors.verifiedPasswordTooltip = errorMap.verifiedPassword.match.tooltip; + } + + return errors; + }} + > + {({ errors: _errors, isSubmitting, dirty }: FormikProps) => { + const errors = _errors as FormErrors; + + return ( +
+ + + + {({ field }: { field: HTMLAttributes }) => ( + <> + + {errors.email && ( + {errors.emailTooltip}} + > + + + + + + )} + + )} + + + + + + {({ field }: { field: HTMLAttributes }) => ( + + )} + + {errors.password && ( + {errors.passwordTooltip}}> + + + + + + )} + + {passwordVerification && ( + + + + {({ field }: { field: HTMLAttributes }) => ( + + )} + + {errors.verifiedPassword && ( + {errors.verifiedPasswordTooltip}} + > + + + + + + )} + + )} + + + Create Account + + + Reset + + +
+ ); + }} +
+ )} +
+
+ ); +}; + +const Wrapper = styled.section(({ theme }) => ({ + fontFamily: theme.typography.fonts.base, + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + width: 450, + padding: 32, + backgroundColor: theme.background.content, + borderRadius: 7, +})); + +const Brand = styled.div({ + display: 'flex', + alignItems: 'center', + justifyContent: 'center', +}); + +const Title = styled.svg({ + height: 40, + zIndex: 1, + left: -32, + position: 'relative', +}); + +const logoAnimation = keyframes({ + '0': { + transform: 'rotateY(0deg)', + transformOrigin: '50% 5% 0', + }, + '100%': { + transform: 'rotateY(360deg)', + transformOrigin: '50% 5% 0', + }, +}); + +interface LogoProps { + transacting: boolean; +} + +const Logo = styled.svg( + ({ transacting }) => + transacting && { + animation: `${logoAnimation} 1250ms both infinite`, + }, + { height: 40, zIndex: 10, marginLeft: 32 } +); + +const Introduction = styled.p({ + marginTop: 20, + textAlign: 'center', +}); + +const Content = styled.div({ + display: 'flex', + alignItems: 'flex-start', + justifyContent: 'center', + width: 350, + minHeight: 189, + marginTop: 8, +}); + +const Presentation = styled.div({ + textAlign: 'center', +}); + +const Form = styled(FormikForm)({ + width: '100%', + alignSelf: 'flex-start', + '&[aria-disabled="true"]': { + opacity: 0.6, + }, +}); + +const FieldWrapper = styled.div({ + display: 'flex', + flexDirection: 'column', + justifyContent: 'stretch', + marginBottom: 10, +}); + +const Label = styled.label({ + fontSize: 13, + fontWeight: 500, + marginBottom: 6, +}); + +const Input = styled.input(({ theme }) => ({ + fontSize: 14, + color: theme.color.defaultText, + padding: '10px 15px', + borderRadius: 4, + appearance: 'none', + outline: 'none', + border: '0 none', + boxShadow: 'rgb(0 0 0 / 10%) 0px 0px 0px 1px inset', + '&:focus': { + boxShadow: 'rgb(30 167 253) 0px 0px 0px 1px inset', + }, + '&:active': { + boxShadow: 'rgb(30 167 253) 0px 0px 0px 1px inset', + }, + '&[aria-invalid="true"]': { + boxShadow: 'rgb(255 68 0) 0px 0px 0px 1px inset', + }, +})); + +const ErrorWrapper = styled.div({ + display: 'flex', + alignItems: 'flex-start', + fontSize: 11, + marginTop: 6, + cursor: 'help', +}); + +const ErrorIcon = styled(Icons)(({ theme }) => ({ + fill: theme.color.defaultText, + opacity: 0.8, + marginRight: 6, + marginLeft: 2, + marginTop: 1, +})); + +const ErrorTooltip = styled.div(({ theme }) => ({ + fontFamily: theme.typography.fonts.base, + fontSize: 13, + padding: 8, + maxWidth: 350, +})); + +const Actions = styled.div({ + alignSelf: 'stretch', + display: 'flex', + justifyContent: 'space-between', + marginTop: 24, +}); + +const Error = styled(ErrorMessage)({}); + +interface ButtonProps { + dirty?: boolean; +} + +const Button = styled.button({ + backgroundColor: 'transparent', + border: '0 none', + outline: 'none', + appearance: 'none', + fontWeight: 500, + fontSize: 12, + flexBasis: '50%', + cursor: 'pointer', + padding: '11px 16px', + borderRadius: 4, + textTransform: 'uppercase', + '&:focus': { + textDecoration: 'underline', + fontWeight: 700, + }, + '&:active': { + textDecoration: 'underline', + fontWeight: 700, + }, + '&[aria-disabled="true"]': { + cursor: 'default', + }, +}); + +const Submit = styled(Button)(({ theme, dirty }) => ({ + marginRight: 8, + backgroundColor: theme.color.secondary, + color: theme.color.inverseText, + opacity: dirty ? 1 : 0.6, + boxShadow: 'rgb(30 167 253 / 10%) 0 0 0 1px inset', +})); + +const Reset = styled(Button)(({ theme }) => ({ + marginLeft: 8, + boxShadow: 'rgb(30 167 253) 0 0 0 1px inset', + color: theme.color.secondary, +})); diff --git a/addons/interactions/src/components/AccountForm/addon-interactions.stories.mdx b/addons/interactions/src/components/AccountForm/addon-interactions.stories.mdx new file mode 100644 index 000000000000..1930000cc9a1 --- /dev/null +++ b/addons/interactions/src/components/AccountForm/addon-interactions.stories.mdx @@ -0,0 +1,33 @@ +import { Meta, Canvas, Story } from '@storybook/addon-docs'; +import { expect } from '@storybook/jest'; +import { within, waitFor, fireEvent, userEvent } from '@storybook/testing-library'; + +import { AccountForm } from './AccountForm'; + + + +## AccountForm + + + { + const { args, canvasElement } = context + const canvas = within(canvasElement) + + await userEvent.type(canvas.getByTestId('email'), 'username@email.com') + await userEvent.type(canvas.getByTestId('password1'), 'thepassword') + await userEvent.click(canvas.getByRole('button', { name: /create account/i })) + expect(args.onSubmit).not.toHaveBeenCalled() + }}/> + diff --git a/addons/interactions/src/components/AccountForm/addon-interactions.stories.tsx b/addons/interactions/src/components/AccountForm/addon-interactions.stories.tsx new file mode 100644 index 000000000000..f1d8aace3951 --- /dev/null +++ b/addons/interactions/src/components/AccountForm/addon-interactions.stories.tsx @@ -0,0 +1,221 @@ +import { Story as CSF2Story, Meta, ComponentStoryObj } from '@storybook/react'; +import { expect } from '@storybook/jest'; +import { + within, + waitFor, + fireEvent, + userEvent, + waitForElementToBeRemoved, +} from '@storybook/testing-library'; +import React from 'react'; + +import { AccountForm } from './AccountForm'; + +export default { + title: 'Addons/Interactions/AccountForm', + component: AccountForm, + parameters: { + layout: 'centered', + theme: 'light', + options: { selectedPanel: 'storybook/interactions/panel' }, + }, + argTypes: { + onSubmit: { action: true }, + }, +} as Meta; + +type CSF3Story = ComponentStoryObj; + +export const Demo: CSF2Story = (args) => ( + +); + +Demo.play = async ({ args, canvasElement }) => { + await userEvent.click(within(canvasElement).getByRole('button')); + await expect(args.onSubmit).toHaveBeenCalledWith(expect.stringMatching(/([A-Z])\w+/gi)); + await expect([{ name: 'John', age: 42 }]).toEqual( + expect.arrayContaining([ + expect.objectContaining({ name: 'John' }), + expect.objectContaining({ age: 42 }), + ]) + ); +}; + +export const FindBy: CSF2Story = (args) => { + const [isLoading, setIsLoading] = React.useState(true); + React.useEffect(() => { + setTimeout(() => setIsLoading(false), 500); + }, []); + return isLoading ?
Loading...
: ; +}; +FindBy.play = async ({ canvasElement }) => { + const canvas = within(canvasElement); + await canvas.findByRole('button'); + await expect(true).toBe(true); +}; + +export const WaitFor: CSF2Story = (args) => ( + +); +WaitFor.play = async ({ args, canvasElement }) => { + await userEvent.click(await within(canvasElement).findByText('Click')); + await waitFor(async () => { + await expect(args.onSubmit).toHaveBeenCalledWith(expect.stringMatching(/([A-Z])\w+/gi)); + await expect(true).toBe(true); + }); +}; + +export const WaitForElementToBeRemoved: CSF2Story = () => { + const [isLoading, setIsLoading] = React.useState(true); + React.useEffect(() => { + setTimeout(() => setIsLoading(false), 1500); + }, []); + return isLoading ?
Loading...
: ; +}; +WaitForElementToBeRemoved.play = async ({ canvasElement }) => { + const canvas = within(canvasElement); + await waitForElementToBeRemoved(await canvas.findByText('Loading...'), { timeout: 2000 }); + const button = await canvas.findByText('Loaded!'); + await expect(button).not.toBeNull(); +}; + +export const WithLoaders: CSF2Story = (args, { loaded: { todo } }) => { + return ( + + ); +}; +WithLoaders.loaders = [ + async () => { + // long fake timeout + await new Promise((resolve) => setTimeout(resolve, 2000)); + + return { + todo: { + userId: 1, + id: 1, + title: 'delectus aut autem', + completed: false, + }, + }; + }, +]; +WithLoaders.play = async ({ args, canvasElement }) => { + const canvas = within(canvasElement); + const todoItem = await canvas.findByText('Todo: delectus aut autem'); + await userEvent.click(todoItem); + await expect(args.onSubmit).toHaveBeenCalledWith('delectus aut autem'); +}; + +export const Standard: CSF3Story = { + args: { passwordVerification: false }, +}; + +export const StandardEmailFilled: CSF3Story = { + ...Standard, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + await fireEvent.change(canvas.getByTestId('email'), { + target: { + value: 'michael@chromatic.com', + }, + }); + }, +}; + +export const StandardEmailFailed: CSF3Story = { + ...Standard, + play: async ({ args, canvasElement }) => { + const canvas = within(canvasElement); + await userEvent.type(canvas.getByTestId('email'), 'gert@chromatic'); + await userEvent.type(canvas.getByTestId('password1'), 'supersecret'); + await userEvent.click(canvas.getByRole('button', { name: /create account/i })); + + await canvas.findByText('Please enter a correctly formatted email address'); + await expect(args.onSubmit).not.toHaveBeenCalled(); + }, +}; + +export const StandardEmailSuccess: CSF3Story = { + ...Standard, + play: async ({ args, canvasElement }) => { + const canvas = within(canvasElement); + await userEvent.type(canvas.getByTestId('email'), 'michael@chromatic.com'); + await userEvent.type(canvas.getByTestId('password1'), 'testpasswordthatwontfail'); + await userEvent.click(canvas.getByTestId('submit')); + + await waitFor(async () => { + await expect(args.onSubmit).toHaveBeenCalledTimes(1); + await expect(args.onSubmit).toHaveBeenCalledWith({ + email: 'michael@chromatic.com', + password: 'testpasswordthatwontfail', + }); + }); + }, +}; + +export const StandardPasswordFailed: CSF3Story = { + ...Standard, + play: async (context) => { + const canvas = within(context.canvasElement); + await StandardEmailFilled.play(context); + await userEvent.type(canvas.getByTestId('password1'), 'asdf'); + await userEvent.click(canvas.getByTestId('submit')); + }, +}; + +export const StandardFailHover: CSF3Story = { + ...StandardPasswordFailed, + play: async (context) => { + const canvas = within(context.canvasElement); + await StandardPasswordFailed.play(context); + await waitFor(async () => { + await userEvent.hover(canvas.getByTestId('password-error-info')); + }); + }, +}; + +export const Verification: CSF3Story = { + args: { passwordVerification: true }, + argTypes: { onSubmit: { action: 'clicked' } }, +}; + +export const VerificationPassword: CSF3Story = { + ...Verification, + play: async (context) => { + const canvas = within(context.canvasElement); + await StandardEmailFilled.play(context); + await userEvent.type(canvas.getByTestId('password1'), 'asdfasdf'); + await userEvent.click(canvas.getByTestId('submit')); + }, +}; + +export const VerificationPasswordMismatch: CSF3Story = { + ...Verification, + play: async (context) => { + const canvas = within(context.canvasElement); + await StandardEmailFilled.play(context); + await userEvent.type(canvas.getByTestId('password1'), 'asdfasdf'); + await userEvent.type(canvas.getByTestId('password2'), 'asdf1234'); + await userEvent.click(canvas.getByTestId('submit')); + }, +}; + +export const VerificationSuccess: CSF3Story = { + ...Verification, + play: async (context) => { + const canvas = within(context.canvasElement); + await StandardEmailFilled.play(context); + await new Promise((resolve) => setTimeout(resolve, 1000)); + await userEvent.type(canvas.getByTestId('password1'), 'helloyou', { delay: 50 }); + await new Promise((resolve) => setTimeout(resolve, 1000)); + await userEvent.type(canvas.getByTestId('password2'), 'helloyou', { delay: 50 }); + await new Promise((resolve) => setTimeout(resolve, 1000)); + await userEvent.click(canvas.getByTestId('submit')); + }, +}; diff --git a/addons/interactions/src/components/Interaction/Interaction.stories.tsx b/addons/interactions/src/components/Interaction/Interaction.stories.tsx new file mode 100644 index 000000000000..2089cef4a2a0 --- /dev/null +++ b/addons/interactions/src/components/Interaction/Interaction.stories.tsx @@ -0,0 +1,67 @@ +import { ComponentStoryObj, ComponentMeta } from '@storybook/react'; +import { expect } from '@storybook/jest'; +import { CallStates } from '@storybook/instrumenter'; +import { userEvent, within } from '@storybook/testing-library'; +import { getCalls } from '../../mocks'; + +import { Interaction } from './Interaction'; +import SubnavStories from '../Subnav/Subnav.stories'; + +type Story = ComponentStoryObj; + +export default { + title: 'Addons/Interactions/Interaction', + component: Interaction, + args: { + callsById: new Map(getCalls(CallStates.DONE).map((call) => [call.id, call])), + controls: SubnavStories.args.controls, + controlStates: SubnavStories.args.controlStates, + }, +} as ComponentMeta; + +export const Active: Story = { + args: { + call: getCalls(CallStates.ACTIVE).slice(-1)[0], + }, +}; + +export const Waiting: Story = { + args: { + call: getCalls(CallStates.WAITING).slice(-1)[0], + }, +}; + +export const Failed: Story = { + args: { + call: getCalls(CallStates.ERROR).slice(-1)[0], + }, +}; + +export const Done: Story = { + args: { + call: getCalls(CallStates.DONE).slice(-1)[0], + }, +}; + +export const WithParent: Story = { + args: { + call: { ...getCalls(CallStates.DONE).slice(-1)[0], parentId: 'parent-id' }, + }, +}; + +export const Disabled: Story = { + args: { ...Done.args, controlStates: { ...SubnavStories.args.controlStates, goto: false } }, +}; + +export const Hovered: Story = { + ...Done, + parameters: { + // Set light theme to avoid stacked theme in chromatic + theme: 'light', + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + await userEvent.hover(canvas.getByRole('button')); + await expect(canvas.getByTestId('icon-active')).not.toBeNull(); + }, +}; diff --git a/addons/interactions/src/components/Interaction/Interaction.tsx b/addons/interactions/src/components/Interaction/Interaction.tsx new file mode 100644 index 000000000000..30922f8dc908 --- /dev/null +++ b/addons/interactions/src/components/Interaction/Interaction.tsx @@ -0,0 +1,187 @@ +import * as React from 'react'; +import { IconButton, Icons, TooltipNote, WithTooltip } from '@storybook/components'; +import { Call, CallStates, ControlStates } from '@storybook/instrumenter'; +import { styled, typography } from '@storybook/theming'; +import { transparentize } from 'polished'; + +import { MatcherResult } from '../MatcherResult'; +import { MethodCall } from '../MethodCall'; +import { StatusIcon } from '../StatusIcon/StatusIcon'; +import { Controls } from '../../Panel'; + +const MethodCallWrapper = styled.div(() => ({ + fontFamily: typography.fonts.mono, + fontSize: typography.size.s1, + overflowWrap: 'break-word', + inlineSize: 'calc( 100% - 40px )', +})); + +const RowContainer = styled('div', { + shouldForwardProp: (prop) => !['call', 'pausedAt'].includes(prop), +})<{ call: Call; pausedAt: Call['id'] }>( + ({ theme, call }) => ({ + position: 'relative', + display: 'flex', + flexDirection: 'column', + borderBottom: `1px solid ${theme.appBorderColor}`, + fontFamily: typography.fonts.base, + fontSize: 13, + ...(call.status === CallStates.ERROR && { + backgroundColor: + theme.base === 'dark' + ? transparentize(0.93, theme.color.negative) + : theme.background.warning, + }), + paddingLeft: call.parentId ? 20 : 0, + }), + ({ theme, call, pausedAt }) => + pausedAt === call.id && { + '&::before': { + content: '""', + position: 'absolute', + top: -5, + zIndex: 1, + borderTop: '4.5px solid transparent', + borderLeft: `7px solid ${theme.color.warning}`, + borderBottom: '4.5px solid transparent', + }, + '&::after': { + content: '""', + position: 'absolute', + top: -1, + zIndex: 1, + width: '100%', + borderTop: `1.5px solid ${theme.color.warning}`, + }, + } +); + +const RowHeader = styled.div<{ disabled: boolean }>(({ theme, disabled }) => ({ + display: 'flex', + '&:hover': disabled ? {} : { background: theme.background.hoverable }, +})); + +const RowLabel = styled('button', { shouldForwardProp: (prop) => !['call'].includes(prop) })< + React.ButtonHTMLAttributes & { call: Call } +>(({ theme, disabled, call }) => ({ + flex: 1, + display: 'grid', + background: 'none', + border: 0, + gridTemplateColumns: '15px 1fr', + alignItems: 'center', + minHeight: 40, + margin: 0, + padding: '8px 15px', + textAlign: 'start', + cursor: disabled || call.status === CallStates.ERROR ? 'default' : 'pointer', + '&:focus-visible': { + outline: 0, + boxShadow: `inset 3px 0 0 0 ${ + call.status === CallStates.ERROR ? theme.color.warning : theme.color.secondary + }`, + background: call.status === CallStates.ERROR ? 'transparent' : theme.background.hoverable, + }, + '& > div': { + opacity: call.status === CallStates.WAITING ? 0.5 : 1, + }, +})); + +const RowActions = styled.div(({ theme }) => ({ + padding: 6, +})); + +export const StyledIconButton = styled(IconButton as any)(({ theme }) => ({ + color: theme.color.mediumdark, + margin: '0 3px', +})); + +const Note = styled(TooltipNote)(({ theme }) => ({ + fontFamily: theme.typography.fonts.base, +})); + +const RowMessage = styled('div')(({ theme }) => ({ + padding: '8px 10px 8px 36px', + fontSize: typography.size.s1, + pre: { + margin: 0, + padding: 0, + }, + p: { + color: theme.color.dark, + }, +})); + +const Exception = ({ exception }: { exception: Call['exception'] }) => { + if (exception.message.startsWith('expect(')) { + return ; + } + const paragraphs = exception.message.split('\n\n'); + const more = paragraphs.length > 1; + return ( + +
{paragraphs[0]}
+ {more &&

See the full stack trace in the browser console.

} +
+ ); +}; + +export const Interaction = ({ + call, + callsById, + controls, + controlStates, + childCallIds, + isCollapsed, + toggleCollapsed, + pausedAt, +}: { + call: Call; + callsById: Map; + controls: Controls; + controlStates: ControlStates; + childCallIds?: Call['id'][]; + isCollapsed: boolean; + toggleCollapsed: () => void; + pausedAt?: Call['id']; +}) => { + const [isHovered, setIsHovered] = React.useState(false); + return ( + + + controls.goto(call.id)} + disabled={!controlStates.goto || !call.interceptable || !!call.parentId} + onMouseEnter={() => controlStates.goto && setIsHovered(true)} + onMouseLeave={() => controlStates.goto && setIsHovered(false)} + > + + + + + + + {childCallIds?.length > 0 && ( + + } + > + + + + + )} + + + + {call.status === CallStates.ERROR && call.exception?.callId === call.id && ( + + )} + + ); +}; diff --git a/addons/interactions/src/components/List.tsx b/addons/interactions/src/components/List.tsx new file mode 100644 index 000000000000..ecda51c505c6 --- /dev/null +++ b/addons/interactions/src/components/List.tsx @@ -0,0 +1,95 @@ +import React, { Fragment, useState } from 'react'; +import { styled, themes, convert } from '@storybook/theming'; +import { Icons, IconsProps } from '@storybook/components'; + +const ListWrapper = styled.ul({ + listStyle: 'none', + fontSize: 14, + padding: 0, + margin: 0, +}); + +const Wrapper = styled.div({ + display: 'flex', + width: '100%', + borderBottom: `1px solid ${convert(themes.normal).appBorderColor}`, + '&:hover': { + background: convert(themes.normal).background.hoverable, + }, +}); + +const Icon = styled(Icons)({ + height: 10, + width: 10, + minWidth: 10, + color: convert(themes.normal).color.mediumdark, + marginRight: 10, + transition: 'transform 0.1s ease-in-out', + alignSelf: 'center', + display: 'inline-flex', +}); + +const HeaderBar = styled.div({ + padding: convert(themes.normal).layoutMargin, + paddingLeft: convert(themes.normal).layoutMargin - 3, + background: 'none', + color: 'inherit', + textAlign: 'left', + cursor: 'pointer', + borderLeft: '3px solid transparent', + width: '100%', + + '&:focus': { + outline: '0 none', + borderLeft: `3px solid ${convert(themes.normal).color.secondary}`, + }, +}); + +const Description = styled.div({ + padding: convert(themes.normal).layoutMargin, + marginBottom: convert(themes.normal).layoutMargin, + fontStyle: 'italic', +}); + +type Item = { + title: string; + description: string; +}; + +interface ListItemProps { + item: Item; +} + +export const ListItem: React.FC = ({ item }) => { + const [open, onToggle] = useState(false); + + return ( + + + onToggle(!open)} role="button"> + + {item.title} + + + {open ? {item.description} : null} + + ); +}; + +interface ListProps { + items: Item[]; +} + +export const List: React.FC = ({ items }) => ( + + {items.map((item) => ( + + ))} + +); diff --git a/addons/interactions/src/components/MatcherResult.stories.tsx b/addons/interactions/src/components/MatcherResult.stories.tsx new file mode 100644 index 000000000000..c81ac36eb201 --- /dev/null +++ b/addons/interactions/src/components/MatcherResult.stories.tsx @@ -0,0 +1,82 @@ +import React from 'react'; +import dedent from 'ts-dedent'; +import { styled } from '@storybook/theming'; +import { MatcherResult } from './MatcherResult'; + +const StyledWrapper = styled.div(({ theme }) => ({ + backgroundColor: theme.background.content, + padding: '12px 0', + boxShadow: `0 0 0 1px ${theme.appBorderColor}`, + color: theme.color.defaultText, + fontSize: 13, +})); + +export default { + title: 'Addons/Interactions/MatcherResult', + component: MatcherResult, + decorators: [ + (Story: any) => ( + + + + ), + ], + parameters: { + layout: 'fullscreen', + }, +}; + +export const Expected = { + args: { + message: dedent` + expect(jest.fn()).lastCalledWith(...expected) + + Expected: {"email": "michael@chromatic.com", "password": "testpasswordthatwontfail"} + + Number of calls: 0 + `, + }, +}; + +export const ExpectedReceived = { + args: { + message: dedent` + expect(jest.fn()).toHaveBeenCalledWith(...expected) + + Expected: called with 0 arguments + Received: {"email": "michael@chromatic.com", "password": "testpasswordthatwontfail"} + + Number of calls: 1 + `, + }, +}; + +export const ExpectedNumberOfCalls = { + args: { + message: dedent` + expect(jest.fn()).toHaveBeenCalledTimes(expected) + + Expected number of calls: 1 + Received number of calls: 0 + `, + }, +}; + +export const Diff = { + args: { + message: dedent` + expect(jest.fn()).toHaveBeenCalledWith(...expected) + + - Expected + + Received + + Object { + - "email": "michael@chromatic.com", + + "email": "michael@chromaui.com", + "password": "testpasswordthatwontfail", + }, + + Number of calls: 1 + `, + }, +}; diff --git a/addons/interactions/src/components/MatcherResult.tsx b/addons/interactions/src/components/MatcherResult.tsx new file mode 100644 index 000000000000..4e3814702e3f --- /dev/null +++ b/addons/interactions/src/components/MatcherResult.tsx @@ -0,0 +1,123 @@ +import React from 'react'; +import { styled, typography } from '@storybook/theming'; +import { Node } from './MethodCall'; + +const getParams = (line: string, fromIndex = 0): string => { + for (let i = fromIndex, depth = 1; i < line.length; i += 1) { + if (line[i] === '(') depth += 1; + else if (line[i] === ')') depth -= 1; + if (depth === 0) return line.slice(fromIndex, i); + } + return ''; +}; + +const parseValue = (value: string): any => { + try { + return value === 'undefined' ? undefined : JSON.parse(value); + } catch (e) { + return value; + } +}; + +const StyledExpected = styled.span(({ theme }) => ({ + color: theme.color.positive, +})); + +const StyledReceived = styled.span(({ theme }) => ({ + color: theme.color.negative, +})); + +export const Received = ({ value, parsed }: { value: any; parsed?: boolean }) => + parsed ? ( + + ) : ( + {value} + ); + +export const Expected = ({ value, parsed }: { value: any; parsed?: boolean }) => { + if (parsed) { + if (typeof value === 'string' && value.startsWith('called with')) { + return <>{value}; + } + return ; + } + return {value}; +}; + +export const MatcherResult = ({ message }: { message: string }) => { + const lines = message.split('\n'); + return ( +
+      {lines.flatMap((line: string, index: number) => {
+        if (line.startsWith('expect(')) {
+          const received = getParams(line, 7);
+          const remainderIndex = received && 7 + received.length;
+          const matcher = received && line.slice(remainderIndex).match(/\.(to|last|nth)[A-Z]\w+\(/);
+          if (matcher) {
+            const expectedIndex = remainderIndex + matcher.index + matcher[0].length;
+            const expected = getParams(line, expectedIndex);
+            if (expected) {
+              return [
+                'expect(',
+                ,
+                line.slice(remainderIndex, expectedIndex),
+                ,
+                line.slice(expectedIndex + expected.length),
+                
, + ]; + } + } + } + + if (line.match(/^\s*- /)) { + return [,
]; + } + if (line.match(/^\s*\+ /)) { + return [,
]; + } + + const [, assertionLabel, assertionValue] = line.match(/^(Expected|Received): (.*)$/) || []; + if (assertionLabel && assertionValue) { + return assertionLabel === 'Expected' + ? [ + 'Expected: ', + , +
, + ] + : [ + 'Received: ', + , +
, + ]; + } + + const [, prefix, numberOfCalls] = + line.match(/(Expected number|Received number|Number) of calls: (\d+)$/i) || []; + if (prefix && numberOfCalls) { + return [ + `${prefix} of calls: `, + , +
, + ]; + } + + const [, receivedValue] = line.match(/^Received has value: (.+)$/) || []; + if (receivedValue) { + return [ + 'Received has value: ', + , +
, + ]; + } + + return [{line},
]; + })} +
+ ); +}; diff --git a/addons/interactions/src/components/MethodCall.stories.tsx b/addons/interactions/src/components/MethodCall.stories.tsx new file mode 100644 index 000000000000..b65001b4e1cb --- /dev/null +++ b/addons/interactions/src/components/MethodCall.stories.tsx @@ -0,0 +1,195 @@ +import { Call } from '@storybook/instrumenter'; +import React from 'react'; +import { styled, typography } from '@storybook/theming'; +import { Node, MethodCall } from './MethodCall'; + +const StyledWrapper = styled.div(({ theme }) => ({ + backgroundColor: theme.background.content, + padding: '20px', + boxShadow: `0 0 0 1px ${theme.appBorderColor}`, + color: theme.color.defaultText, + fontFamily: typography.fonts.mono, + fontSize: typography.size.s1, +})); + +export default { + title: 'Addons/Interactions/MethodCall', + component: MethodCall, + decorators: [ + (Story: any) => ( + + + + ), + ], + parameters: { + layout: 'fullscreen', + }, +}; + +export const Args = () => ( +
+ + + + + + {/* eslint-disable-next-line react/jsx-boolean-value */} + + + + + i)} /> + + + + 123, + asyncFn: async () => 'hello', + }} + showObjectInspector + /> + + + + + + + + + + + + + + + + + + + +
+); + +const calls: Call[] = [ + { + cursor: 0, + id: '1', + path: ['screen'], + method: 'getByText', + storyId: 'kind--story', + args: ['Click'], + interceptable: false, + retain: false, + }, + { + cursor: 1, + id: '2', + path: ['userEvent'], + method: 'click', + storyId: 'kind--story', + args: [{ __callId__: '1' }], + interceptable: true, + retain: false, + }, + { + cursor: 2, + id: '3', + path: [], + method: 'expect', + storyId: 'kind--story', + args: [true], + interceptable: true, + retain: false, + }, + { + cursor: 3, + id: '4', + path: [{ __callId__: '3' }, 'not'], + method: 'toBe', + storyId: 'kind--story', + args: [false], + interceptable: true, + retain: false, + }, + { + cursor: 4, + id: '5', + path: ['jest'], + method: 'fn', + storyId: 'kind--story', + args: [{ __function__: { name: 'actionHandler' } }], + interceptable: false, + retain: false, + }, + { + cursor: 5, + id: '6', + path: [], + method: 'expect', + storyId: 'kind--story', + args: [{ __callId__: '5' }], + interceptable: false, + retain: false, + }, + { + cursor: 6, + id: '7', + path: ['expect'], + method: 'stringMatching', + storyId: 'kind--story', + args: [{ __regexp__: { flags: 'i', source: 'hello' } }], + interceptable: false, + retain: false, + }, + { + cursor: 7, + id: '8', + path: [{ __callId__: '6' }, 'not'], + method: 'toHaveBeenCalledWith', + storyId: 'kind--story', + args: [ + { __callId__: '7' }, + [ + { __error__: { name: 'Error', message: "Cannot read property 'foo' of undefined" } }, + { __symbol__: { description: 'Hello world' } }, + ], + ], + interceptable: false, + retain: false, + }, +]; + +const callsById = calls.reduce((acc, call) => { + acc.set(call.id, call); + return acc; +}, new Map()); + +export const Simple = () => ; +export const Nested = () => ; +export const Chained = () => ; +export const Complex = () => ; diff --git a/addons/interactions/src/components/MethodCall.tsx b/addons/interactions/src/components/MethodCall.tsx new file mode 100644 index 000000000000..871068cea0ef --- /dev/null +++ b/addons/interactions/src/components/MethodCall.tsx @@ -0,0 +1,430 @@ +import { ObjectInspector } from '@devtools-ds/object-inspector'; +import { Call, CallRef, ElementRef } from '@storybook/instrumenter'; +import { useTheme } from '@storybook/theming'; +import React, { Fragment, ReactElement } from 'react'; + +const colorsLight = { + base: '#444', + nullish: '#7D99AA', + string: '#16B242', + number: '#5D40D0', + boolean: '#f41840', + objectkey: '#698394', + instance: '#A15C20', + function: '#EA7509', + muted: '#7D99AA', + tag: { + name: '#6F2CAC', + suffix: '#1F99E5', + }, + date: '#459D9C', + error: { + name: '#D43900', + message: '#444', + }, + regex: { + source: '#A15C20', + flags: '#EA7509', + }, + meta: '#EA7509', + method: '#0271B6', +}; + +const colorsDark = { + base: '#eee', + nullish: '#aaa', + string: '#5FE584', + number: '#6ba5ff', + boolean: '#ff4191', + objectkey: '#accfe6', + instance: '#E3B551', + function: '#E3B551', + muted: '#aaa', + tag: { + name: '#f57bff', + suffix: '#8EB5FF', + }, + date: '#70D4D3', + error: { + name: '#f40', + message: '#eee', + }, + regex: { + source: '#FAD483', + flags: '#E3B551', + }, + meta: '#FAD483', + method: '#5EC1FF', +}; + +const useThemeColors = () => { + const { base } = useTheme(); + return base === 'dark' ? colorsDark : colorsLight; +}; + +const special = /[^A-Z0-9]/i; +const trimEnd = /[\s.,…]+$/gm; +const ellipsize = (string: string, maxlength: number): string => { + if (string.length <= maxlength) return string; + for (let i = maxlength - 1; i >= 0; i -= 1) { + if (special.test(string[i]) && i > 10) { + return `${string.slice(0, i).replace(trimEnd, '')}…`; + } + } + return `${string.slice(0, maxlength).replace(trimEnd, '')}…`; +}; + +const stringify = (value: any) => { + try { + return JSON.stringify(value, null, 1); + } catch (e) { + return String(value); + } +}; + +const interleave = (nodes: ReactElement[], separator: ReactElement) => + nodes.flatMap((node, index) => + index === nodes.length - 1 + ? [node] + : [node, React.cloneElement(separator, { key: `sep${index}` })] + ); + +export const Node = ({ + value, + nested, + showObjectInspector, + callsById, + ...props +}: { + value: any; + nested?: boolean; + /** + * Shows an object inspector instead of just printing the object. + * Only available for Objects + */ + showObjectInspector?: boolean; + callsById?: Map; + [props: string]: any; +}) => { + switch (true) { + case value === null: + return ; + case value === undefined: + return ; + case Array.isArray(value): + return ; + case typeof value === 'string': + return ; + case typeof value === 'number': + return ; + case typeof value === 'boolean': + return ; + + /* eslint-disable no-underscore-dangle */ + case Object.prototype.hasOwnProperty.call(value, '__date__'): + return ; + case Object.prototype.hasOwnProperty.call(value, '__error__'): + return ; + case Object.prototype.hasOwnProperty.call(value, '__regexp__'): + return ; + case Object.prototype.hasOwnProperty.call(value, '__function__'): + return ; + case Object.prototype.hasOwnProperty.call(value, '__symbol__'): + return ; + case Object.prototype.hasOwnProperty.call(value, '__element__'): + return ; + case Object.prototype.hasOwnProperty.call(value, '__class__'): + return ; + case Object.prototype.hasOwnProperty.call(value, '__callId__'): + return ; + /* eslint-enable no-underscore-dangle */ + + case Object.prototype.toString.call(value) === '[object Object]': + return ; + default: + return ; + } +}; + +export const NullNode = (props: object) => { + const colors = useThemeColors(); + return ( + + null + + ); +}; + +export const UndefinedNode = (props: object) => { + const colors = useThemeColors(); + return ( + + undefined + + ); +}; + +export const StringNode = ({ value, ...props }: { value: string }) => { + const colors = useThemeColors(); + return ( + + {JSON.stringify(ellipsize(value, 50))} + + ); +}; + +export const NumberNode = ({ value, ...props }: { value: number }) => { + const colors = useThemeColors(); + return ( + + {value} + + ); +}; + +export const BooleanNode = ({ value, ...props }: { value: boolean }) => { + const colors = useThemeColors(); + return ( + + {String(value)} + + ); +}; + +export const ArrayNode = ({ + value, + nested = false, + callsById, +}: { + value: any[]; + nested?: boolean; + callsById?: Map; +}) => { + const colors = useThemeColors(); + if (nested) { + return […]; + } + const nodes = value + .slice(0, 3) + .map((v) => ); + const nodelist = interleave(nodes, , ); + if (value.length <= 3) { + return [{nodelist}]; + } + return ( + + ({value.length}) [{nodelist}, …] + + ); +}; + +export const ObjectNode = ({ + showInspector, + value, + nested = false, +}: { + showInspector?: boolean; + value: object; + nested?: boolean; +}) => { + const isDarkMode = useTheme().base === 'dark'; + const colors = useThemeColors(); + + if (showInspector) { + return ( + <> + + + ); + } + + if (nested) { + return {'{…}'}; + } + const nodelist = interleave( + Object.entries(value) + .slice(0, 2) + .map(([k, v]) => ( + + {k}: + + + )), + , + ); + if (Object.keys(value).length <= 2) { + return ( + + {'{ '} + {nodelist} + {' }'} + + ); + } + return ( + + ({Object.keys(value).length}) {'{ '} + {nodelist} + {', … }'} + + ); +}; + +export const ClassNode = ({ name }: { name: string }) => { + const colors = useThemeColors(); + return {name}; +}; + +export const FunctionNode = ({ name }: { name: string }) => { + const colors = useThemeColors(); + return name ? ( + {name} + ) : ( + anonymous + ); +}; + +export const ElementNode = ({ + prefix, + localName, + id, + classNames = [], + innerText, +}: ElementRef['__element__']) => { + const name = prefix ? `${prefix}:${localName}` : localName; + const colors = useThemeColors(); + return ( + + + < + + + {name} + + + {id ? `#${id}` : classNames.reduce((acc, className) => `${acc}.${className}`, '')} + + + > + + {!id && classNames.length === 0 && innerText && ( + <> + {innerText} + + < + + + /{name} + + + > + + + )} + + ); +}; + +export const DateNode = ({ value }: { value: string }) => { + const [date, time, ms] = value.split(/[T.Z]/); + const colors = useThemeColors(); + return ( + + {date} + T + {time === '00:00:00' ? {time} : time} + {ms === '000' ? .{ms} : `.${ms}`} + Z + + ); +}; + +export const ErrorNode = ({ name, message }: { name: string; message: string }) => { + const colors = useThemeColors(); + return ( + + {name} + {message && ': '} + {message && ( + 50 ? message : ''}> + {ellipsize(message, 50)} + + )} + + ); +}; + +export const RegExpNode = ({ flags, source }: { flags: string; source: string }) => { + const colors = useThemeColors(); + return ( + + /{source}/{flags} + + ); +}; + +export const SymbolNode = ({ description }: { description: string }) => { + const colors = useThemeColors(); + return ( + + Symbol( + {description && "{description}"}) + + ); +}; + +export const OtherNode = ({ value }: { value: any }) => { + const colors = useThemeColors(); + return {stringify(value)}; +}; + +export const MethodCall = ({ + call, + callsById, +}: { + call: Call; + callsById: Map; +}) => { + // Call might be undefined during initial render, can be safely ignored. + if (!call) return null; + + const colors = useThemeColors(); + + const path = call.path.flatMap((elem, index) => { + // eslint-disable-next-line no-underscore-dangle + const callId = (elem as CallRef).__callId__; + return [ + callId ? ( + + ) : ( + {elem} + ), + , + ., + ]; + }); + + const args = call.args.flatMap((arg, index, array) => { + const node = ; + return index < array.length - 1 + ? [node, , ] + : [node]; + }); + + return ( + <> + {path} + {call.method} + + ( + {args} + ) + + + ); +}; diff --git a/addons/interactions/src/components/StatusBadge/StatusBadge.stories.tsx b/addons/interactions/src/components/StatusBadge/StatusBadge.stories.tsx new file mode 100644 index 000000000000..f85d7f7ed9b0 --- /dev/null +++ b/addons/interactions/src/components/StatusBadge/StatusBadge.stories.tsx @@ -0,0 +1,24 @@ +import { CallStates } from '@storybook/instrumenter'; +import { StatusBadge } from './StatusBadge'; + +export default { + title: 'Addons/Interactions/StatusBadge', + component: StatusBadge, + parameters: { layout: 'padded' }, +}; + +export const Pass = { + args: { status: CallStates.DONE }, +}; + +export const Active = { + args: { status: CallStates.ACTIVE }, +}; + +export const Waiting = { + args: { status: CallStates.WAITING }, +}; + +export const Fail = { + args: { status: CallStates.ERROR }, +}; diff --git a/addons/interactions/src/components/StatusBadge/StatusBadge.tsx b/addons/interactions/src/components/StatusBadge/StatusBadge.tsx new file mode 100644 index 000000000000..4c28636166f3 --- /dev/null +++ b/addons/interactions/src/components/StatusBadge/StatusBadge.tsx @@ -0,0 +1,39 @@ +import React from 'react'; +import { Call, CallStates } from '@storybook/instrumenter'; +import { styled, typography } from '@storybook/theming'; + +export interface StatusBadgeProps { + status: Call['status']; +} + +const StyledBadge = styled.div(({ theme, status }) => { + const backgroundColor = { + [CallStates.DONE]: theme.color.positive, + [CallStates.ERROR]: theme.color.negative, + [CallStates.ACTIVE]: theme.color.warning, + [CallStates.WAITING]: theme.color.warning, + }[status]; + return { + padding: '4px 6px 4px 8px;', + borderRadius: '4px', + backgroundColor, + color: 'white', + fontFamily: typography.fonts.base, + textTransform: 'uppercase', + fontSize: typography.size.s1, + letterSpacing: 3, + fontWeight: typography.weight.bold, + width: 65, + textAlign: 'center', + }; +}); + +export const StatusBadge: React.FC = ({ status }) => { + const badgeText = { + [CallStates.DONE]: 'Pass', + [CallStates.ERROR]: 'Fail', + [CallStates.ACTIVE]: 'Runs', + [CallStates.WAITING]: 'Runs', + }[status]; + return {badgeText}; +}; diff --git a/addons/interactions/src/components/StatusIcon/StatusIcon.stories.tsx b/addons/interactions/src/components/StatusIcon/StatusIcon.stories.tsx new file mode 100644 index 000000000000..07c6cdd2d420 --- /dev/null +++ b/addons/interactions/src/components/StatusIcon/StatusIcon.stories.tsx @@ -0,0 +1,19 @@ +import { CallStates } from '@storybook/instrumenter'; +import { StatusIcon } from './StatusIcon'; + +export default { + title: 'Addons/Interactions/StatusIcon', + component: StatusIcon, +}; + +export const Pending = { + args: { status: CallStates.WAITING }, +}; + +export const Error = { + args: { status: CallStates.ERROR }, +}; + +export const Done = { + args: { status: CallStates.DONE }, +}; diff --git a/addons/interactions/src/components/StatusIcon/StatusIcon.tsx b/addons/interactions/src/components/StatusIcon/StatusIcon.tsx new file mode 100644 index 000000000000..d26d7bd493bc --- /dev/null +++ b/addons/interactions/src/components/StatusIcon/StatusIcon.tsx @@ -0,0 +1,49 @@ +import React from 'react'; +import { Icons, IconsProps } from '@storybook/components'; +import { Call, CallStates } from '@storybook/instrumenter'; +import { styled } from '@storybook/theming'; + +import { transparentize } from 'polished'; +import localTheme from '../../theme'; + +export interface StatusIconProps extends IconsProps { + status: Call['status']; +} + +const { + colors: { + pure: { gray }, + }, +} = localTheme; + +const StyledStatusIcon = styled(Icons)(({ theme, status }) => { + const color = { + [CallStates.DONE]: theme.color.positive, + [CallStates.ERROR]: theme.color.negative, + [CallStates.ACTIVE]: theme.color.secondary, + [CallStates.WAITING]: transparentize(0.5, gray[500]), + }[status]; + return { + width: status === CallStates.WAITING ? 6 : 12, + height: status === CallStates.WAITING ? 6 : 12, + color, + justifySelf: 'center', + }; +}); + +export const StatusIcon: React.FC = ({ status, className }) => { + const icon = { + [CallStates.DONE]: 'check', + [CallStates.ERROR]: 'stopalt', + [CallStates.ACTIVE]: 'play', + [CallStates.WAITING]: 'circle', + }[status] as IconsProps['icon']; + return ( + + ); +}; diff --git a/addons/interactions/src/components/Subnav/Subnav.stories.tsx b/addons/interactions/src/components/Subnav/Subnav.stories.tsx new file mode 100644 index 000000000000..40e365d03fb9 --- /dev/null +++ b/addons/interactions/src/components/Subnav/Subnav.stories.tsx @@ -0,0 +1,89 @@ +import { action } from '@storybook/addon-actions'; +import { CallStates } from '@storybook/instrumenter'; +import { Subnav } from './Subnav'; + +export default { + title: 'Addons/Interactions/Subnav', + component: Subnav, + args: { + controls: { + start: action('start'), + back: action('back'), + goto: action('goto'), + next: action('next'), + end: action('end'), + rerun: action('rerun'), + }, + controlStates: { + debugger: true, + start: true, + back: true, + goto: true, + next: false, + end: false, + }, + storyFileName: 'Subnav.stories.tsx', + hasNext: true, + hasPrevious: true, + }, +}; + +export const Pass = { + args: { + status: CallStates.DONE, + }, +}; + +export const Fail = { + args: { + status: CallStates.ERROR, + }, +}; + +export const Runs = { + args: { + status: CallStates.WAITING, + }, +}; + +export const AtStart = { + args: { + status: CallStates.WAITING, + controlStates: { + debugger: true, + start: false, + back: false, + goto: true, + next: true, + end: true, + }, + }, +}; + +export const Midway = { + args: { + status: CallStates.WAITING, + controlStates: { + debugger: true, + start: true, + back: true, + goto: true, + next: true, + end: true, + }, + }, +}; + +export const Locked = { + args: { + status: CallStates.ACTIVE, + controlStates: { + debugger: true, + start: false, + back: false, + goto: false, + next: false, + end: false, + }, + }, +}; diff --git a/addons/interactions/src/components/Subnav/Subnav.tsx b/addons/interactions/src/components/Subnav/Subnav.tsx new file mode 100644 index 000000000000..9b371cce947c --- /dev/null +++ b/addons/interactions/src/components/Subnav/Subnav.tsx @@ -0,0 +1,178 @@ +import React, { ComponentProps } from 'react'; +import { + Button, + IconButton, + Icons, + Separator, + P, + TooltipNote, + WithTooltip, + Bar, +} from '@storybook/components'; +import { Call, CallStates, ControlStates } from '@storybook/instrumenter'; +import { styled } from '@storybook/theming'; + +import { StatusBadge } from '../StatusBadge/StatusBadge'; +import { Controls } from '../../Panel'; + +const SubnavWrapper = styled.div(({ theme }) => ({ + background: theme.background.app, + borderBottom: `1px solid ${theme.appBorderColor}`, + position: 'sticky', + top: 0, + zIndex: 1, +})); + +const StyledSubnav = styled.nav(({ theme }) => ({ + height: 40, + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + paddingLeft: 15, +})); + +export interface SubnavProps { + controls: Controls; + controlStates: ControlStates; + status: Call['status']; + storyFileName?: string; + onScrollToEnd?: () => void; + isRerunAnimating: boolean; + setIsRerunAnimating: React.Dispatch>; +} + +const StyledButton = styled(Button)(({ theme }) => ({ + borderRadius: 4, + padding: 6, + color: theme.textMutedColor, + '&:not(:disabled)': { + '&:hover,&:focus-visible': { + color: theme.color.secondary, + }, + }, +})); + +const Note = styled(TooltipNote)(({ theme }) => ({ + fontFamily: theme.typography.fonts.base, +})); + +export const StyledIconButton = styled(IconButton as any)(({ theme }) => ({ + color: theme.color.mediumdark, + margin: '0 3px', +})); + +const StyledSeparator = styled(Separator)({ + marginTop: 0, +}); + +const StyledLocation = styled(P)(({ theme }) => ({ + color: theme.textMutedColor, + justifyContent: 'flex-end', + textAlign: 'right', + whiteSpace: 'nowrap', + marginTop: 'auto', + marginBottom: 1, + paddingRight: 15, + fontSize: 13, +})); + +const Group = styled.div({ + display: 'flex', + alignItems: 'center', +}); + +const RewindButton = styled(StyledIconButton)({ + marginLeft: 9, +}); + +const JumpToEndButton = styled(StyledButton)({ + marginLeft: 9, + marginRight: 9, + marginBottom: 1, + lineHeight: '12px', +}); + +interface AnimatedButtonProps { + animating?: boolean; +} + +const RerunButton = styled(StyledIconButton)< + AnimatedButtonProps & ComponentProps +>(({ theme, animating, disabled }) => ({ + opacity: disabled ? 0.5 : 1, + svg: { + animation: animating && `${theme.animation.rotate360} 200ms ease-out`, + }, +})); + +export const Subnav: React.FC = ({ + controls, + controlStates, + status, + storyFileName, + onScrollToEnd, + isRerunAnimating, + setIsRerunAnimating, +}) => { + const buttonText = status === CallStates.ERROR ? 'Scroll to error' : 'Scroll to end'; + + return ( + + + + + + + + {buttonText} + + + + + }> + + + + + + }> + + + + + + }> + + + + + + }> + + + + + + }> + setIsRerunAnimating(false)} + animating={isRerunAnimating} + disabled={isRerunAnimating} + > + + + + + {storyFileName && ( + + {storyFileName} + + )} + + + + ); +}; diff --git a/addons/interactions/src/constants.ts b/addons/interactions/src/constants.ts new file mode 100644 index 000000000000..3c723e93852c --- /dev/null +++ b/addons/interactions/src/constants.ts @@ -0,0 +1,2 @@ +export const ADDON_ID = 'storybook/interactions'; +export const PANEL_ID = `${ADDON_ID}/panel`; diff --git a/addons/interactions/src/index.ts b/addons/interactions/src/index.ts new file mode 100644 index 000000000000..dafa948eda6c --- /dev/null +++ b/addons/interactions/src/index.ts @@ -0,0 +1,2 @@ +// make it work with --isolatedModules +export default {}; diff --git a/addons/interactions/src/manager.tsx b/addons/interactions/src/manager.tsx new file mode 100644 index 000000000000..454945d6c44a --- /dev/null +++ b/addons/interactions/src/manager.tsx @@ -0,0 +1,13 @@ +import { addons, types } from '@storybook/addons'; + +import { ADDON_ID, PANEL_ID } from './constants'; +import { Panel } from './Panel'; + +addons.register(ADDON_ID, () => { + addons.add(PANEL_ID, { + type: types.PANEL, + title: 'Interactions', + match: ({ viewMode }) => viewMode === 'story', + render: Panel, + }); +}); diff --git a/addons/interactions/src/mocks/index.ts b/addons/interactions/src/mocks/index.ts new file mode 100644 index 000000000000..e55fe4d88b8f --- /dev/null +++ b/addons/interactions/src/mocks/index.ts @@ -0,0 +1,122 @@ +import { CallStates, Call } from '@storybook/instrumenter'; + +export const getCalls = (finalStatus: CallStates) => { + const calls: Call[] = [ + { + id: 'story--id [3] within', + storyId: 'story--id', + cursor: 3, + path: [], + method: 'within', + args: [{ __element__: { localName: 'div', id: 'root' } }], + interceptable: false, + retain: false, + status: CallStates.DONE, + }, + { + id: 'story--id [4] findByText', + storyId: 'story--id', + cursor: 4, + path: [{ __callId__: 'story--id [3] within' }], + method: 'findByText', + args: ['Click'], + interceptable: true, + retain: false, + status: CallStates.DONE, + }, + { + id: 'story--id [5] click', + storyId: 'story--id', + cursor: 5, + path: ['userEvent'], + method: 'click', + args: [{ __element__: { localName: 'button', innerText: 'Click' } }], + interceptable: true, + retain: false, + status: CallStates.DONE, + }, + { + id: 'story--id [6] waitFor', + storyId: 'story--id', + cursor: 6, + path: [], + method: 'waitFor', + args: [{ __function__: { name: '' } }], + interceptable: true, + retain: false, + status: CallStates.DONE, + }, + { + id: 'story--id [6] waitFor [0] expect', + parentId: 'story--id [6] waitFor', + storyId: 'story--id', + cursor: 1, + path: [], + method: 'expect', + args: [{ __function__: { name: 'handleSubmit' } }], + interceptable: false, + retain: false, + status: CallStates.DONE, + }, + { + id: 'story--id [6] waitFor [1] stringMatching', + parentId: 'story--id [6] waitFor', + storyId: 'story--id', + cursor: 2, + path: ['expect'], + method: 'stringMatching', + args: [{ __regexp__: { flags: 'gi', source: '([A-Z])w+' } }], + interceptable: false, + retain: false, + status: CallStates.DONE, + }, + { + id: 'story--id [6] waitFor [2] toHaveBeenCalledWith', + parentId: 'story--id [6] waitFor', + storyId: 'story--id', + cursor: 3, + path: [{ __callId__: 'story--id [6] waitFor [0] expect' }], + method: 'toHaveBeenCalledWith', + args: [{ __callId__: 'story--id [6] waitFor [1] stringMatching', retain: false }], + interceptable: true, + retain: false, + status: CallStates.DONE, + }, + { + id: 'story--id [7] expect', + storyId: 'story--id', + cursor: 7, + path: [], + method: 'expect', + args: [{ __function__: { name: 'handleReset' } }], + interceptable: false, + retain: false, + status: CallStates.DONE, + }, + { + id: 'story--id [8] toHaveBeenCalled', + storyId: 'story--id', + cursor: 8, + path: [{ __callId__: 'story--id [7] expect' }, 'not'], + method: 'toHaveBeenCalled', + args: [], + interceptable: true, + retain: false, + status: finalStatus, + }, + ]; + + if (finalStatus === CallStates.ERROR) { + calls[calls.length - 1].exception = { + name: 'Error', + stack: '', + message: 'Oops!', + callId: calls[calls.length - 1].id, + }; + } + + return calls; +}; + +export const getInteractions = (finalStatus: CallStates) => + getCalls(finalStatus).filter((call) => call.interceptable); diff --git a/addons/interactions/src/preset/checkActionsLoaded.ts b/addons/interactions/src/preset/checkActionsLoaded.ts new file mode 100644 index 000000000000..3c0ca1414577 --- /dev/null +++ b/addons/interactions/src/preset/checkActionsLoaded.ts @@ -0,0 +1,19 @@ +import { checkAddonOrder, serverRequire } from '@storybook/core-common'; +import path from 'path'; + +export const checkActionsLoaded = (configDir: string) => { + checkAddonOrder({ + before: { + name: '@storybook/addon-actions', + inEssentials: true, + }, + after: { + name: '@storybook/addon-interactions', + inEssentials: false, + }, + configFile: path.isAbsolute(configDir) + ? path.join(configDir, 'main') + : path.join(process.cwd(), configDir, 'main'), + getConfig: (configFile) => serverRequire(configFile), + }); +}; diff --git a/addons/interactions/src/preset/preview.ts b/addons/interactions/src/preset/preview.ts new file mode 100644 index 000000000000..a6f1b90c78cf --- /dev/null +++ b/addons/interactions/src/preset/preview.ts @@ -0,0 +1,35 @@ +import { addons } from '@storybook/addons'; +import type { Args } from '@storybook/addons'; +import { FORCE_REMOUNT, STORY_RENDER_PHASE_CHANGED } from '@storybook/core-events'; +import type { AnyFramework, ArgsEnhancer } from '@storybook/csf'; +import { instrument } from '@storybook/instrumenter'; +import { ModuleMocker } from 'jest-mock'; + +const JestMock = new ModuleMocker(global); +const fn = JestMock.fn.bind(JestMock); + +// Aliasing `fn` to `action` here, so we get a more descriptive label in the UI. +const { action } = instrument({ action: fn }, { retain: true }); +const channel = addons.getChannel(); +const spies: any[] = []; + +channel.on(FORCE_REMOUNT, () => spies.forEach((mock) => mock?.mockClear?.())); +channel.on(STORY_RENDER_PHASE_CHANGED, ({ newPhase }) => { + if (newPhase === 'loading') spies.forEach((mock) => mock?.mockClear?.()); +}); + +const addActionsFromArgTypes: ArgsEnhancer = ({ id, initialArgs }) => { + return Object.entries(initialArgs).reduce((acc, [key, val]) => { + if (typeof val === 'function' && val.name === 'actionHandler') { + Object.defineProperty(val, 'name', { value: key, writable: false }); + Object.defineProperty(val, '__storyId__', { value: id, writable: false }); + acc[key] = action(val); + spies.push(acc[key]); + return acc; + } + acc[key] = val; + return acc; + }, {} as Args); +}; + +export const argsEnhancers = [addActionsFromArgTypes]; diff --git a/addons/interactions/src/theme.ts b/addons/interactions/src/theme.ts new file mode 100644 index 000000000000..2c4eb0da3430 --- /dev/null +++ b/addons/interactions/src/theme.ts @@ -0,0 +1,23 @@ +/** + * Interaction Testing Theme + * PLACEHOLDER until SB is updated <3 + */ +interface Colors { + pure?: { + gray?: any; + }; +} + +export const colors: Colors = { + pure: { + gray: { + 500: '#CCCCCC', + }, + }, +}; + +export const theme = { + colors, +}; + +export default theme; diff --git a/lib/csf-tools/src/typings.d.ts b/addons/interactions/src/typings.d.ts similarity index 100% rename from lib/csf-tools/src/typings.d.ts rename to addons/interactions/src/typings.d.ts diff --git a/addons/interactions/tsconfig.json b/addons/interactions/tsconfig.json new file mode 100644 index 000000000000..36ca4e1d3033 --- /dev/null +++ b/addons/interactions/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "./src", + "types": [ + "webpack-env" + ] + }, + "include": [ + "src/**/*" + ], + "exclude": [ + "src/**/*.test.*", + "src/**/tests/**/*", + "src/**/__tests__/**/*", + "src/**/*.stories.*", + "src/**/*.mockdata.*", + "src/**/__testfixtures__/**" + ] +} \ No newline at end of file diff --git a/addons/jest/README.md b/addons/jest/README.md index 5a75fce42ca5..ab5046b2813b 100644 --- a/addons/jest/README.md +++ b/addons/jest/README.md @@ -2,7 +2,7 @@ Storybook addon for inspecting Jest unit test results. -[Framework Support](https://github.com/storybookjs/storybook/blob/main/ADDONS_SUPPORT.md) +[Framework Support](https://storybook.js.org/docs/react/api/frameworks-feature-support) [![Storybook Jest Addon Demo](https://raw.githubusercontent.com/storybookjs/storybook/next/addons/jest/docs/storybook-addon-jest.gif)](http://storybooks-official.netlify.com/?selectedKind=Addons%7Cjest&selectedStory=withTests&full=0&addons=1&stories=1&panelRight=0&addonPanel=storybook%2Ftests%2Fpanel) @@ -46,7 +46,7 @@ You may want to add the result file to `.gitignore`, since it's a generated file But much like lockfiles and snapshots, checking-in generated files can have certain advantages as well. It's up to you. We recommend to **do** check in the test results file so starting Storybook from a clean git clone doesn't require running all tests first, -but this can mean you'll encounter merge conflicts on this file in the future (_re-generating this file is very similar to re-generating lockfiles and snapshots_). +but this can mean you'll encounter merge conflicts on this file in the future (_re-generating this file is very similar to re-generating lockfiles and snapshots_). ### Generating the test results @@ -56,7 +56,13 @@ Ensure the generated test-results file exists before you start Storybook. During npm run test:generate-output -- --watch ``` -This change will then be HMR (hot module reloaded) using Webpack and displayed by the addon. +And in the jest config, add `jest-test-results.json` to `modulePathIgnorePatterns` to avoid an infinite loop. + +```js +modulePathIgnorePatterns: ['node_modules', 'jest-test-results.json'], +``` + +This change will then be HMR (hot module reloaded) using webpack and displayed by this addon. If you want to pre-run Jest automatically during development or a static build, you may need to consider that if your tests fail, the script receives a non-0 exit code and will exit. You could create a `prebuild:storybook` npm script, which will never fail by appending `|| true`: @@ -90,7 +96,7 @@ import results from '../.jest-test-results.json'; import { withTests } from '@storybook/addon-jest'; export default { - component: MyComponent, + component: MyComponent, title: 'MyComponent', decorators: [withTests({ results })], }; @@ -101,17 +107,17 @@ You can also add multiple tests results within your story by including the `jest ```js // MyComponent.stories.js | MyComponent.stories.jsx -import MyComponent from './MyComponent'; +import MyComponent from './MyComponent'; -import results from '../.jest-test-results.json'; +import results from '../.jest-test-results.json'; -import { withTests } from '@storybook/addon-jest'; +import { withTests } from '@storybook/addon-jest'; -export default { - component: MyComponent, - title: 'MyComponent', +export default { + component: MyComponent, + title: 'MyComponent', decorators: [withTests({ results })], -}; +}; const Template = (args) => ; @@ -126,13 +132,13 @@ Default.parameters = { ### Global level -To avoid importing the results of the tests in each story, you can update +To avoid importing the results of the tests in each story, you can update your [`.storybook/preview.js`](https://storybook.js.org/docs/react/configure/overview#configure-story-rendering) and include a decorator allowing you to display the results only for the stories that have the `jest` parameter defined: ```js // .storybook/preview.js -import { withTests } from "@storybook/addon-jest"; +import { withTests } from '@storybook/addon-jest'; import results from '../.jest-test-results.json'; @@ -140,7 +146,7 @@ export const decorators = [ withTests({ results, }), -]; +]; ``` Then in your story file: @@ -162,7 +168,7 @@ Default.args={ text: 'Jest results in Storybook', }; Default.parameters = { - jest: ['MyComponent.test.js'], + jest: 'MyComponent.test.js', }; ``` @@ -185,7 +191,7 @@ const Template = (args) => ; export const Default = Template.bind({}); -Default.args={ +Default.args = { text: 'Jest results in Storybook', }; Default.parameters = { @@ -207,7 +213,7 @@ import results from '../.jest-test-results.json'; export const decorators = [ withTests({ results, - filesExt: "((\\.specs?)|(\\.tests?))?(\\.ts)?$", + filesExt: '((\\.specs?)|(\\.tests?))?(\\.ts)?$', }), ]; ``` @@ -230,7 +236,7 @@ const Template: Story = (args: MyComponent) => ({ export const Default = Template.bind({}); Default.parameters = { - jest: ['MyComponent.component'], + jest: 'MyComponent.component', }; ``` diff --git a/addons/jest/manager.js b/addons/jest/manager.js new file mode 100644 index 000000000000..4e287d25b151 --- /dev/null +++ b/addons/jest/manager.js @@ -0,0 +1 @@ +import './dist/esm/manager'; diff --git a/addons/jest/package.json b/addons/jest/package.json index 4e217cbe89f1..74d3c12556cc 100644 --- a/addons/jest/package.json +++ b/addons/jest/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-jest", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "React storybook addon that show component jest report", "keywords": [ "addon", @@ -47,11 +47,12 @@ "prepare": "node ../../scripts/prepare.js" }, "dependencies": { - "@storybook/addons": "6.4.0-beta.10", - "@storybook/api": "6.4.0-beta.10", - "@storybook/components": "6.4.0-beta.10", - "@storybook/core-events": "6.4.0-beta.10", - "@storybook/theming": "6.4.0-beta.10", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/api": "6.5.0-rc.1", + "@storybook/client-logger": "6.5.0-rc.1", + "@storybook/components": "6.5.0-rc.1", + "@storybook/core-events": "6.5.0-rc.1", + "@storybook/theming": "6.5.0-rc.1", "core-js": "^3.8.2", "global": "^4.4.0", "react-sizeme": "^3.0.1", @@ -62,8 +63,8 @@ "@types/webpack-env": "^1.16.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "react": { @@ -76,7 +77,7 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", "sbmodern": "dist/modern/index.js", "storybook": { "displayName": "Jest", diff --git a/addons/jest/register.js b/addons/jest/register.js index f209c0eb3703..2d916bea61a0 100644 --- a/addons/jest/register.js +++ b/addons/jest/register.js @@ -1 +1,6 @@ -require('./dist/esm/register'); +import { once } from '@storybook/client-logger'; +import './manager'; + +once.warn( + 'register.js is deprecated see https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#deprecated-registerjs' +); diff --git a/addons/jest/src/components/Panel.tsx b/addons/jest/src/components/Panel.tsx index 72a1c88da02b..e085d93d4cf6 100644 --- a/addons/jest/src/components/Panel.tsx +++ b/addons/jest/src/components/Panel.tsx @@ -1,4 +1,3 @@ -/* eslint-disable react/default-props-match-prop-types */ import React, { Fragment } from 'react'; import { styled, themes, convert } from '@storybook/theming'; import { ScrollArea, TabsState, Link, Placeholder } from '@storybook/components'; diff --git a/addons/jest/src/register.tsx b/addons/jest/src/manager.tsx similarity index 100% rename from addons/jest/src/register.tsx rename to addons/jest/src/manager.tsx diff --git a/addons/jest/tsconfig.json b/addons/jest/tsconfig.json index 858d1aa0ffb9..0baf78294f75 100644 --- a/addons/jest/tsconfig.json +++ b/addons/jest/tsconfig.json @@ -2,7 +2,10 @@ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "./src", - "types": ["webpack-env", "jest"] + "types": [ + "webpack-env", + "jest" + ] }, "include": [ "src/**/*" @@ -15,4 +18,4 @@ "src/**/*.mockdata.*", "src/**/__testfixtures__/**" ] -} +} \ No newline at end of file diff --git a/addons/links/README.md b/addons/links/README.md index c512695b275d..b8e1d7e4e5ef 100644 --- a/addons/links/README.md +++ b/addons/links/README.md @@ -2,7 +2,7 @@ The Storybook Links addon can be used to create links that navigate between stories in [Storybook](https://storybook.js.org). -[Framework Support](https://github.com/storybookjs/storybook/blob/main/ADDONS_SUPPORT.md) +[Framework Support](https://storybook.js.org/docs/react/api/frameworks-feature-support) ## Getting Started @@ -55,7 +55,8 @@ With that, you can link an event in a component to any story in the Storybook. You can also pass a function instead for any of above parameter. That function accepts arguments emitted by the event and it should return a string: ```js -import { LinkTo, linkTo } from '@storybook/addon-links'; +import { linkTo } from '@storybook/addon-links'; +import LinkTo from '@storybook/addon-links/react'; export default { title: 'Select', diff --git a/addons/links/manager.js b/addons/links/manager.js new file mode 100644 index 000000000000..4e287d25b151 --- /dev/null +++ b/addons/links/manager.js @@ -0,0 +1 @@ +import './dist/esm/manager'; diff --git a/addons/links/package.json b/addons/links/package.json index aea5cdf6a99a..007075fb728f 100644 --- a/addons/links/package.json +++ b/addons/links/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-links", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Link stories together to build demos and prototypes with your UI components", "keywords": [ "addon", @@ -41,11 +41,11 @@ "prepare": "node ../../scripts/prepare.js" }, "dependencies": { - "@storybook/addons": "6.4.0-beta.10", - "@storybook/client-logger": "6.4.0-beta.10", - "@storybook/core-events": "6.4.0-beta.10", - "@storybook/csf": "0.0.2--canary.6aca495.0", - "@storybook/router": "6.4.0-beta.10", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/client-logger": "6.5.0-rc.1", + "@storybook/core-events": "6.5.0-rc.1", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.0-rc.1", "@types/qs": "^6.9.5", "core-js": "^3.8.2", "global": "^4.4.0", @@ -58,8 +58,8 @@ "@types/webpack-env": "^1.16.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "react": { @@ -72,7 +72,7 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", "sbmodern": "dist/modern/index.js", "storybook": { "displayName": "Links", diff --git a/addons/links/preset.js b/addons/links/preset.js deleted file mode 100644 index 2b5ed5ac00d6..000000000000 --- a/addons/links/preset.js +++ /dev/null @@ -1,13 +0,0 @@ -function managerEntries(entry = []) { - return [...entry, require.resolve('./dist/esm/register')]; -} - -function config(entry = [], { addDecorator = true } = {}) { - const linkConfig = []; - if (addDecorator) { - linkConfig.push(require.resolve('./dist/esm/preset/addDecorator')); - } - return [...entry, ...linkConfig]; -} - -module.exports = { managerEntries, config }; diff --git a/addons/links/preview.js b/addons/links/preview.js new file mode 100644 index 000000000000..e726cab5a1b6 --- /dev/null +++ b/addons/links/preview.js @@ -0,0 +1 @@ +export * from './dist/esm/preview'; diff --git a/addons/links/react.d.ts b/addons/links/react.d.ts index 1e0e42d007c9..e02d10f3216c 100644 --- a/addons/links/react.d.ts +++ b/addons/links/react.d.ts @@ -1,2 +1,2 @@ export * from './dist/ts3.9/react'; -export { default as LinkTo } from './dist/ts3.9/react'; +export { default } from './dist/ts3.9/react'; diff --git a/addons/links/react.js b/addons/links/react.js index 835dd0388e29..d0e3270119d6 100644 --- a/addons/links/react.js +++ b/addons/links/react.js @@ -1 +1,3 @@ -module.exports = require('./dist/cjs/react'); +import LinkTo from './dist/esm/react'; + +export default LinkTo; diff --git a/addons/links/register.js b/addons/links/register.js index f209c0eb3703..2d916bea61a0 100644 --- a/addons/links/register.js +++ b/addons/links/register.js @@ -1 +1,6 @@ -require('./dist/esm/register'); +import { once } from '@storybook/client-logger'; +import './manager'; + +once.warn( + 'register.js is deprecated see https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#deprecated-registerjs' +); diff --git a/addons/links/src/index.ts b/addons/links/src/index.ts index 239fae7ba1a8..a41227513de1 100644 --- a/addons/links/src/index.ts +++ b/addons/links/src/index.ts @@ -14,7 +14,7 @@ export function LinkTo(): null { return null; } -export { linkTo, hrefTo, withLinks, navigate } from './preview'; +export { linkTo, hrefTo, withLinks, navigate } from './utils'; if (module && module.hot && module.hot.decline) { module.hot.decline(); diff --git a/addons/links/src/register.ts b/addons/links/src/manager.ts similarity index 100% rename from addons/links/src/register.ts rename to addons/links/src/manager.ts diff --git a/addons/links/src/preset/addDecorator.ts b/addons/links/src/preset/addDecorator.ts deleted file mode 100644 index ff68743b1a37..000000000000 --- a/addons/links/src/preset/addDecorator.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { withLinks } from '../index'; - -export const decorators = [withLinks]; diff --git a/addons/links/src/preview.test.ts b/addons/links/src/preview.test.ts deleted file mode 100644 index 10994b915329..000000000000 --- a/addons/links/src/preview.test.ts +++ /dev/null @@ -1,135 +0,0 @@ -import { addons } from '@storybook/addons'; -import { SELECT_STORY } from '@storybook/core-events'; - -import globalPkg from 'global'; -import { linkTo, hrefTo } from './preview'; - -const { __STORYBOOK_STORY_STORE__ } = globalPkg; - -jest.mock('@storybook/addons'); -jest.mock('global', () => ({ - // @ts-ignore - document: global.document, - __STORYBOOK_STORY_STORE__: { - getSelection: jest.fn(() => ({ - storyId: 'name', - kind: 'kind', - })), - fromId: jest.fn(() => ({ - story: 'name', - kind: 'kind', - })), - }, - // @ts-ignore - window: global, - __STORYBOOK_CLIENT_API__: { - raw: jest.fn(() => [ - { - story: 'name', - kind: 'kind', - }, - { - story: 'namekind', - kind: 'kindname', - }, - ]), - }, -})); - -const mockAddons = (addons as unknown) as jest.Mocked; - -describe('preview', () => { - const channel = { emit: jest.fn() }; - beforeAll(() => { - mockAddons.getChannel.mockReturnValue(channel as any); - }); - beforeEach(channel.emit.mockReset); - describe('linkTo()', () => { - it('should select the kind and story provided', () => { - const handler = linkTo('kind', 'name'); - handler(); - - expect(channel.emit).toHaveBeenCalledWith(SELECT_STORY, { - kind: 'kind', - story: 'name', - }); - }); - - it('should select the kind (only) provided', () => { - __STORYBOOK_STORY_STORE__.fromId.mockImplementation((): any => null); - - const handler = linkTo('kind'); - handler(); - - expect(channel.emit).toHaveBeenCalledWith(SELECT_STORY, { - kind: 'kind', - story: 'name', - }); - }); - - it('should select the story (only) provided', () => { - // simulate a currently selected, but not found as ID - __STORYBOOK_STORY_STORE__.fromId.mockImplementation((input: any) => - !input - ? { - kind: 'kind', - story: 'name', - } - : null - ); - - const handler = linkTo(undefined, 'kind'); - handler(); - - expect(channel.emit).toHaveBeenCalledWith(SELECT_STORY, { - kind: 'kind', - story: 'name', - }); - }); - - it('should select the id provided', () => { - __STORYBOOK_STORY_STORE__.fromId.mockImplementation((input: any) => - input === 'kind--story' - ? { - story: 'name', - kind: 'kind', - } - : null - ); - - const handler = linkTo('kind--story'); - handler(); - - expect(channel.emit).toHaveBeenCalledWith(SELECT_STORY, { - kind: 'kind', - story: 'name', - }); - }); - - it('should handle functions returning strings', () => { - __STORYBOOK_STORY_STORE__.fromId.mockImplementation((input: any): any => null); - - const handler = linkTo( - // @ts-expect-error - (a, b) => a + b, - (a, b) => b + a - ); - handler('kind', 'name'); - - expect(channel.emit.mock.calls).toContainEqual([ - SELECT_STORY, - { - kind: 'kindname', - story: 'namekind', - }, - ]); - }); - }); - - describe('hrefTo()', () => { - it('should return promise resolved with story href', async () => { - const href = await hrefTo('kind', 'name'); - expect(href).toContain('?id=kind--name'); - }); - }); -}); diff --git a/addons/links/src/preview.ts b/addons/links/src/preview.ts index 440386d0376b..1527786e81af 100644 --- a/addons/links/src/preview.ts +++ b/addons/links/src/preview.ts @@ -1,123 +1,3 @@ -import global from 'global'; -import qs from 'qs'; -import { addons, makeDecorator } from '@storybook/addons'; -import { STORY_CHANGED, SELECT_STORY } from '@storybook/core-events'; -import { toId } from '@storybook/csf'; -import { logger } from '@storybook/client-logger'; -import { PARAM_KEY } from './constants'; +import { withLinks } from './index'; -const { - document, - HTMLElement, - __STORYBOOK_STORY_STORE__: storyStore, - __STORYBOOK_CLIENT_API__: clientApi, -} = global; - -interface ParamsId { - storyId: string; -} -interface ParamsCombo { - kind: string; - story: string; -} - -export const navigate = (params: ParamsId | ParamsCombo) => - addons.getChannel().emit(SELECT_STORY, params); - -const generateUrl = (id: string) => { - const { location } = document; - const query = qs.parse(location.search, { ignoreQueryPrefix: true }); - return `${location.origin + location.pathname}?${qs.stringify( - { ...query, id }, - { encode: false } - )}`; -}; - -const valueOrCall = (args: string[]) => (value: string | ((...args: string[]) => string)) => - typeof value === 'function' ? value(...args) : value; - -export const linkTo = ( - idOrKindInput: string, - storyInput?: string | ((...args: any[]) => string) -) => (...args: any[]) => { - const resolver = valueOrCall(args); - const { storyId } = storyStore.getSelection(); - const current = storyStore.fromId(storyId) || {}; - const kindVal = resolver(idOrKindInput); - const storyVal = resolver(storyInput); - - const fromid = storyStore.fromId(kindVal); - - const item = - fromid || - clientApi.raw().find((i: any) => { - if (kindVal && storyVal) { - return i.kind === kindVal && i.story === storyVal; - } - if (!kindVal && storyVal) { - return i.kind === current.kind && i.story === storyVal; - } - if (kindVal && !storyVal) { - return i.kind === kindVal; - } - if (!kindVal && !storyVal) { - return i.kind === current.kind; - } - return false; - }); - - if (item) { - navigate({ - kind: item.kind, - story: item.story, - }); - } else { - logger.error('could not navigate to provided story'); - } -}; - -export const hrefTo = (kind: string, name: string): Promise => { - return new Promise((resolve) => { - const { storyId } = storyStore.getSelection(); - const current = storyStore.fromId(storyId); - resolve(generateUrl(toId(kind || current.kind, name))); - }); -}; - -const linksListener = (e: Event) => { - const { target } = e; - if (!(target instanceof HTMLElement)) { - return; - } - const element = target as HTMLElement; - const { sbKind: kind, sbStory: story } = element.dataset; - if (kind || story) { - e.preventDefault(); - navigate({ kind, story }); - } -}; - -let hasListener = false; - -const on = () => { - if (!hasListener) { - hasListener = true; - document.addEventListener('click', linksListener); - } -}; -const off = () => { - if (hasListener) { - hasListener = false; - document.removeEventListener('click', linksListener); - } -}; - -export const withLinks = makeDecorator({ - name: 'withLinks', - parameterName: PARAM_KEY, - wrapper: (getStory, context, { parameters }) => { - on(); - addons.getChannel().once(STORY_CHANGED, off); - return getStory(context); - }, -}); +export const decorators = [withLinks]; diff --git a/addons/links/src/react/components/link.test.tsx b/addons/links/src/react/components/link.test.tsx index ebef61478bdf..b2e75887549b 100644 --- a/addons/links/src/react/components/link.test.tsx +++ b/addons/links/src/react/components/link.test.tsx @@ -29,7 +29,7 @@ const mockChannel = () => { once: jest.fn(), }; }; -const mockAddons = (addons as unknown) as jest.Mocked; +const mockAddons = addons as unknown as jest.Mocked; describe('LinkTo', () => { describe('render', () => { diff --git a/addons/links/src/react/components/link.tsx b/addons/links/src/react/components/link.tsx index fccca70d04a5..aa6207eff75c 100644 --- a/addons/links/src/react/components/link.tsx +++ b/addons/links/src/react/components/link.tsx @@ -1,6 +1,6 @@ import React, { MouseEvent, PureComponent, ReactNode } from 'react'; -import { navigate, hrefTo } from '../../preview'; +import { navigate, hrefTo } from '../../utils'; // FIXME: copied from Typography.Link. Code is duplicated to // avoid emotion dependency which breaks React 15.x back-compat diff --git a/addons/links/src/utils.test.ts b/addons/links/src/utils.test.ts new file mode 100644 index 000000000000..fb2126018bf6 --- /dev/null +++ b/addons/links/src/utils.test.ts @@ -0,0 +1,85 @@ +import { addons } from '@storybook/addons'; +import { SELECT_STORY } from '@storybook/core-events'; + +import { linkTo, hrefTo } from './utils'; + +jest.mock('@storybook/addons'); +jest.mock('global', () => ({ + // @ts-ignore + document: global.document, + // @ts-ignore + window: global, +})); + +const mockAddons = addons as unknown as jest.Mocked; + +describe('preview', () => { + const channel = { emit: jest.fn() }; + beforeAll(() => { + mockAddons.getChannel.mockReturnValue(channel as any); + }); + beforeEach(channel.emit.mockReset); + describe('linkTo()', () => { + it('should select the title and name provided', () => { + const handler = linkTo('title', 'name'); + handler(); + + expect(channel.emit).toHaveBeenCalledWith(SELECT_STORY, { + kind: 'title', + story: 'name', + }); + }); + + it('should select the title (only) provided', () => { + const handler = linkTo('title'); + handler(); + + expect(channel.emit).toHaveBeenCalledWith(SELECT_STORY, { + kind: 'title', + }); + }); + + it('should select the story (only) provided', () => { + // simulate a currently selected, but not found as ID + const handler = linkTo(undefined, 'name'); + handler(); + + expect(channel.emit).toHaveBeenCalledWith(SELECT_STORY, { + story: 'name', + }); + }); + + it('should select the id provided', () => { + const handler = linkTo('title--name'); + handler(); + + expect(channel.emit).toHaveBeenCalledWith(SELECT_STORY, { + storyId: 'title--name', + }); + }); + + it('should handle functions returning strings', () => { + const handler = linkTo( + // @ts-expect-error + (a, b) => a + b, + (a, b) => b + a + ); + handler('title', 'name'); + + expect(channel.emit.mock.calls).toContainEqual([ + SELECT_STORY, + { + kind: 'titlename', + story: 'nametitle', + }, + ]); + }); + }); + + describe('hrefTo()', () => { + it('should return promise resolved with story href', async () => { + const href = await hrefTo('title', 'name'); + expect(href).toContain('?id=title--name'); + }); + }); +}); diff --git a/addons/links/src/utils.ts b/addons/links/src/utils.ts new file mode 100644 index 000000000000..3082bedc09bc --- /dev/null +++ b/addons/links/src/utils.ts @@ -0,0 +1,91 @@ +import global from 'global'; +import qs from 'qs'; +import { addons, makeDecorator } from '@storybook/addons'; +import { STORY_CHANGED, SELECT_STORY } from '@storybook/core-events'; +import type { StoryId, StoryName, ComponentTitle } from '@storybook/csf'; +import { toId } from '@storybook/csf'; +import { PARAM_KEY } from './constants'; + +const { document, HTMLElement } = global; + +interface ParamsId { + storyId: StoryId; +} +interface ParamsCombo { + kind?: ComponentTitle; + story?: StoryName; +} + +export const navigate = (params: ParamsId | ParamsCombo) => + addons.getChannel().emit(SELECT_STORY, params); + +export const hrefTo = (title: ComponentTitle, name: StoryName): Promise => { + return new Promise((resolve) => { + const { location } = document; + const query = qs.parse(location.search, { ignoreQueryPrefix: true }); + const existingId = [].concat(query.id)[0]; + const titleToLink = title || existingId.split('--', 2)[0]; + const id = toId(titleToLink, name); + const url = `${location.origin + location.pathname}?${qs.stringify( + { ...query, id }, + { encode: false } + )}`; + + resolve(url); + }); +}; + +const valueOrCall = (args: string[]) => (value: string | ((...args: string[]) => string)) => + typeof value === 'function' ? value(...args) : value; + +export const linkTo = + (idOrTitle: string, nameInput?: string | ((...args: any[]) => string)) => + (...args: any[]) => { + const resolver = valueOrCall(args); + const title = resolver(idOrTitle); + const name = resolver(nameInput); + + if (title?.match(/--/) && !name) { + navigate({ storyId: title }); + } else { + navigate({ kind: title, story: name }); + } + }; + +const linksListener = (e: Event) => { + const { target } = e; + if (!(target instanceof HTMLElement)) { + return; + } + const element = target as HTMLElement; + const { sbKind: kind, sbStory: story } = element.dataset; + if (kind || story) { + e.preventDefault(); + navigate({ kind, story }); + } +}; + +let hasListener = false; + +const on = () => { + if (!hasListener) { + hasListener = true; + document.addEventListener('click', linksListener); + } +}; +const off = () => { + if (hasListener) { + hasListener = false; + document.removeEventListener('click', linksListener); + } +}; + +export const withLinks = makeDecorator({ + name: 'withLinks', + parameterName: PARAM_KEY, + wrapper: (getStory, context) => { + on(); + addons.getChannel().once(STORY_CHANGED, off); + return getStory(context); + }, +}); diff --git a/addons/links/tsconfig.json b/addons/links/tsconfig.json index 152b58ee30e1..0d8e23c22271 100644 --- a/addons/links/tsconfig.json +++ b/addons/links/tsconfig.json @@ -2,7 +2,10 @@ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "./src", - "types": ["webpack-env", "@testing-library/jest-dom"] + "types": [ + "webpack-env", + "@testing-library/jest-dom" + ] }, "include": [ "src/**/*" @@ -15,4 +18,4 @@ "src/**/*.mockdata.*", "src/**/__testfixtures__/**" ] -} +} \ No newline at end of file diff --git a/addons/measure/manager.js b/addons/measure/manager.js new file mode 100644 index 000000000000..4e287d25b151 --- /dev/null +++ b/addons/measure/manager.js @@ -0,0 +1 @@ +import './dist/esm/manager'; diff --git a/addons/measure/package.json b/addons/measure/package.json index 0d59875f0216..9333fad133dd 100644 --- a/addons/measure/package.json +++ b/addons/measure/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-measure", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Inspect layouts by visualizing the box model", "keywords": [ "storybook-addons", @@ -44,12 +44,12 @@ "prepare": "node ../../scripts/prepare.js" }, "dependencies": { - "@storybook/addons": "6.4.0-beta.10", - "@storybook/api": "6.4.0-beta.10", - "@storybook/client-logger": "6.4.0-beta.10", - "@storybook/components": "6.4.0-beta.10", - "@storybook/core-events": "6.4.0-beta.10", - "@storybook/csf": "0.0.2--canary.6aca495.0", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/api": "6.5.0-rc.1", + "@storybook/client-logger": "6.5.0-rc.1", + "@storybook/components": "6.5.0-rc.1", + "@storybook/core-events": "6.5.0-rc.1", + "@storybook/csf": "0.0.2--canary.4566f4d.1", "core-js": "^3.8.2", "global": "^4.4.0" }, @@ -57,8 +57,8 @@ "@types/webpack-env": "^1.16.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "react": { @@ -71,7 +71,7 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", "sbmodern": "dist/modern/index.js", "storybook": { "displayName": "Measure", diff --git a/addons/measure/preset.js b/addons/measure/preset.js deleted file mode 100644 index 459bbb650ccd..000000000000 --- a/addons/measure/preset.js +++ /dev/null @@ -1,12 +0,0 @@ -function config(entry = []) { - return [...entry, require.resolve('./dist/esm/preset/addDecorator')]; -} - -function managerEntries(entry = [], options) { - return [...entry, require.resolve('./dist/esm/register')]; -} - -module.exports = { - managerEntries, - config, -}; diff --git a/addons/measure/preview.js b/addons/measure/preview.js new file mode 100644 index 000000000000..e726cab5a1b6 --- /dev/null +++ b/addons/measure/preview.js @@ -0,0 +1 @@ +export * from './dist/esm/preview'; diff --git a/addons/measure/register.js b/addons/measure/register.js index f209c0eb3703..2d916bea61a0 100644 --- a/addons/measure/register.js +++ b/addons/measure/register.js @@ -1 +1,6 @@ -require('./dist/esm/register'); +import { once } from '@storybook/client-logger'; +import './manager'; + +once.warn( + 'register.js is deprecated see https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#deprecated-registerjs' +); diff --git a/addons/measure/src/box-model/canvas.ts b/addons/measure/src/box-model/canvas.ts index 08387ec05a64..e35ee8a6eac8 100644 --- a/addons/measure/src/box-model/canvas.ts +++ b/addons/measure/src/box-model/canvas.ts @@ -32,7 +32,7 @@ function createCanvas(): CanvasState { canvas.style.position = 'absolute'; canvas.style.left = '0'; canvas.style.top = '0'; - canvas.style.zIndex = '100000'; + canvas.style.zIndex = '2147483647'; // Disable any user interactions canvas.style.pointerEvents = 'none'; global.document.body.appendChild(canvas); diff --git a/addons/measure/src/register.tsx b/addons/measure/src/manager.tsx similarity index 100% rename from addons/measure/src/register.tsx rename to addons/measure/src/manager.tsx diff --git a/addons/measure/src/preset/addDecorator.tsx b/addons/measure/src/preset/addDecorator.tsx deleted file mode 100644 index 8aabbd42a2da..000000000000 --- a/addons/measure/src/preset/addDecorator.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import { withMeasure } from '../withMeasure'; -import { PARAM_KEY } from '../constants'; - -export const decorators = [withMeasure]; - -export const globals = { - [PARAM_KEY]: false, -}; diff --git a/addons/measure/src/preview.tsx b/addons/measure/src/preview.tsx new file mode 100644 index 000000000000..c1433b927efa --- /dev/null +++ b/addons/measure/src/preview.tsx @@ -0,0 +1,8 @@ +import { withMeasure } from './withMeasure'; +import { PARAM_KEY } from './constants'; + +export const decorators = [withMeasure]; + +export const globals = { + [PARAM_KEY]: false, +}; diff --git a/addons/measure/src/withMeasure.ts b/addons/measure/src/withMeasure.ts index b8c78b7109fd..867ac58f1728 100644 --- a/addons/measure/src/withMeasure.ts +++ b/addons/measure/src/withMeasure.ts @@ -1,6 +1,6 @@ /* eslint-env browser */ import { useEffect } from '@storybook/addons'; -import { AnyFramework, PartialStoryFn as StoryFunction, StoryContext } from '@storybook/csf'; +import type { AnyFramework, PartialStoryFn as StoryFunction, StoryContext } from '@storybook/csf'; import { drawSelectedElement } from './box-model/visualizer'; import { init, rescale, destroy } from './box-model/canvas'; import { deepElementFromPoint } from './util'; diff --git a/addons/measure/tsconfig.json b/addons/measure/tsconfig.json index d1ee4fc75941..36ca4e1d3033 100644 --- a/addons/measure/tsconfig.json +++ b/addons/measure/tsconfig.json @@ -2,7 +2,9 @@ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "./src", - "types": ["webpack-env"] + "types": [ + "webpack-env" + ] }, "include": [ "src/**/*" @@ -15,4 +17,4 @@ "src/**/*.mockdata.*", "src/**/__testfixtures__/**" ] -} +} \ No newline at end of file diff --git a/addons/outline/README.md b/addons/outline/README.md index c94df715d438..bbec1211d849 100644 --- a/addons/outline/README.md +++ b/addons/outline/README.md @@ -20,4 +20,4 @@ module.exports = { }; ``` -You can now click on the outline button in the toolbar to toggle the outlines. +You can now click on the outline button or press the o key in the toolbar to toggle the outlines. diff --git a/addons/outline/manager.js b/addons/outline/manager.js new file mode 100644 index 000000000000..4e287d25b151 --- /dev/null +++ b/addons/outline/manager.js @@ -0,0 +1 @@ +import './dist/esm/manager'; diff --git a/addons/outline/package.json b/addons/outline/package.json index b259a934eac2..b61963e6224b 100644 --- a/addons/outline/package.json +++ b/addons/outline/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-outline", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Outline all elements with CSS to help with layout placement and alignment", "keywords": [ "storybook-addons", @@ -47,12 +47,12 @@ "prepare": "node ../../scripts/prepare.js" }, "dependencies": { - "@storybook/addons": "6.4.0-beta.10", - "@storybook/api": "6.4.0-beta.10", - "@storybook/client-logger": "6.4.0-beta.10", - "@storybook/components": "6.4.0-beta.10", - "@storybook/core-events": "6.4.0-beta.10", - "@storybook/csf": "0.0.2--canary.6aca495.0", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/api": "6.5.0-rc.1", + "@storybook/client-logger": "6.5.0-rc.1", + "@storybook/components": "6.5.0-rc.1", + "@storybook/core-events": "6.5.0-rc.1", + "@storybook/csf": "0.0.2--canary.4566f4d.1", "core-js": "^3.8.2", "global": "^4.4.0", "regenerator-runtime": "^0.13.7", @@ -62,8 +62,8 @@ "@types/webpack-env": "^1.16.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "react": { @@ -76,7 +76,7 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", "sbmodern": "dist/modern/index.js", "storybook": { "displayName": "Outline", diff --git a/addons/outline/preset.js b/addons/outline/preset.js deleted file mode 100644 index 459bbb650ccd..000000000000 --- a/addons/outline/preset.js +++ /dev/null @@ -1,12 +0,0 @@ -function config(entry = []) { - return [...entry, require.resolve('./dist/esm/preset/addDecorator')]; -} - -function managerEntries(entry = [], options) { - return [...entry, require.resolve('./dist/esm/register')]; -} - -module.exports = { - managerEntries, - config, -}; diff --git a/addons/outline/preview.js b/addons/outline/preview.js new file mode 100644 index 000000000000..7817e1d278d2 --- /dev/null +++ b/addons/outline/preview.js @@ -0,0 +1 @@ +export * from './dist/esm/preset/preview'; diff --git a/addons/outline/register.js b/addons/outline/register.js index f209c0eb3703..2d916bea61a0 100644 --- a/addons/outline/register.js +++ b/addons/outline/register.js @@ -1 +1,6 @@ -require('./dist/esm/register'); +import { once } from '@storybook/client-logger'; +import './manager'; + +once.warn( + 'register.js is deprecated see https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#deprecated-registerjs' +); diff --git a/addons/outline/src/OutlineSelector.tsx b/addons/outline/src/OutlineSelector.tsx index 9a91fba9cd6d..b1e92ba02fd9 100644 --- a/addons/outline/src/OutlineSelector.tsx +++ b/addons/outline/src/OutlineSelector.tsx @@ -1,10 +1,11 @@ -import React, { memo, useCallback } from 'react'; -import { useGlobals } from '@storybook/api'; +import React, { memo, useCallback, useEffect } from 'react'; +import { useGlobals, useStorybookApi } from '@storybook/api'; import { Icons, IconButton } from '@storybook/components'; -import { PARAM_KEY } from './constants'; +import { ADDON_ID, PARAM_KEY } from './constants'; export const OutlineSelector = memo(() => { const [globals, updateGlobals] = useGlobals(); + const api = useStorybookApi(); const isActive = globals[PARAM_KEY] || false; @@ -16,6 +17,16 @@ export const OutlineSelector = memo(() => { [isActive] ); + useEffect(() => { + api.setAddonShortcut(ADDON_ID, { + label: 'Toggle Measure [O]', + defaultShortcut: ['O'], + actionName: 'outline', + showInMenu: false, + action: toggleOutline, + }); + }, [toggleOutline, api]); + return ( { - if (storyNameRegex && !item.name.match(storyNameRegex)) { - return acc; - } + // NOTE: as the store + preview's initialization process entirely uses + // `SychronousPromise`s in the v6 store case, the callback to the `then()` here + // will run *immediately* (in the same tick), and thus the `snapshotsTests`, and + // subsequent calls to `it()` etc will all happen within this tick, which is required + // by Jest (cannot add tests asynchronously) + globalWindow.__STORYBOOK_STORY_STORE__.initializationPromise.then(() => { + const data = storybook.raw().reduce( + (acc, item) => { + if (storyNameRegex && !item.name.match(storyNameRegex)) { + return acc; + } - if (storyKindRegex && !item.kind.match(storyKindRegex)) { - return acc; - } + if (storyKindRegex && !item.kind.match(storyKindRegex)) { + return acc; + } - const { kind, storyFn: render, parameters } = item; - const existing = acc.find((i: any) => i.kind === kind); - const { fileName } = item.parameters; + const { kind, storyFn: render, parameters } = item; + const existing = acc.find((i: any) => i.kind === kind); + const { fileName } = item.parameters; - if (!isDisabled(parameters.storyshots)) { - if (existing) { - existing.children.push({ ...item, render, fileName }); - } else { - acc.push({ - kind, - children: [{ ...item, render, fileName }], - }); + if (!isDisabled(parameters.storyshots)) { + if (existing) { + existing.children.push({ ...item, render, fileName }); + } else { + acc.push({ + kind, + children: [{ ...item, render, fileName }], + }); + } } - } - return acc; - }, - [] as { - kind: string; - children: any[]; - }[] - ); + return acc; + }, + [] as { + kind: string; + children: any[]; + }[] + ); - if (data.length) { - callTestMethodGlobals(testMethod); + if (data.length) { + callTestMethodGlobals(testMethod); - snapshotsTests({ - data, - asyncJest, - suite, - framework, - testMethod, - testMethodParams, - snapshotSerializers, - }); + snapshotsTests({ + data, + asyncJest, + suite, + framework, + testMethod, + testMethodParams, + snapshotSerializers, + }); - integrityTest(integrityOptions, stories2snapsConverter); - } else { - throw new Error('storyshots found 0 stories'); - } + integrityTest(integrityOptions, stories2snapsConverter); + } else { + throw new Error('storyshots found 0 stories'); + } + }); } export default testStorySnapshots; diff --git a/addons/storyshots/storyshots-core/src/api/snapshotsTestsTemplate.ts b/addons/storyshots/storyshots-core/src/api/snapshotsTestsTemplate.ts index ba1eac4385b4..b155bd6dce81 100644 --- a/addons/storyshots/storyshots-core/src/api/snapshotsTestsTemplate.ts +++ b/addons/storyshots/storyshots-core/src/api/snapshotsTestsTemplate.ts @@ -1,4 +1,3 @@ -/* eslint-disable jest/valid-title */ /* eslint-disable jest/no-export */ /* eslint-disable jest/expect-expect */ import global from 'global'; diff --git a/addons/storyshots/storyshots-core/src/frameworks/Loader.ts b/addons/storyshots/storyshots-core/src/frameworks/Loader.ts index 0d15defea34f..20ce598c423c 100644 --- a/addons/storyshots/storyshots-core/src/frameworks/Loader.ts +++ b/addons/storyshots/storyshots-core/src/frameworks/Loader.ts @@ -1,8 +1,8 @@ -import { AnyFramework } from '@storybook/csf'; -import { ClientStoryApi, Loadable } from '@storybook/addons'; +import type { AnyFramework } from '@storybook/csf'; +import type { ClientStoryApi, Loadable } from '@storybook/addons'; import { ClientApi as ClientApiClass } from '@storybook/client-api'; -import { StoryshotsOptions } from '../api/StoryshotsOptions'; -import { SupportedFramework } from './SupportedFramework'; +import type { StoryshotsOptions } from '../api/StoryshotsOptions'; +import type { SupportedFramework } from './SupportedFramework'; export type RenderTree = (story: any, context?: any, options?: any) => any; @@ -19,9 +19,7 @@ export interface ClientApi } export interface Loader { - load: ( - options: StoryshotsOptions - ) => { + load: (options: StoryshotsOptions) => { framework: SupportedFramework; renderTree: RenderTree; renderShallowTree: any; diff --git a/addons/storyshots/storyshots-core/src/frameworks/configure.test.ts b/addons/storyshots/storyshots-core/src/frameworks/configure.test.ts index 76c88463876a..509aa5a13b24 100644 --- a/addons/storyshots/storyshots-core/src/frameworks/configure.test.ts +++ b/addons/storyshots/storyshots-core/src/frameworks/configure.test.ts @@ -1,3 +1,4 @@ +import path from 'path'; import { getPreviewFile, getMainFile } from './configure'; // eslint-disable-next-line global-require, jest/no-mocks-import @@ -19,9 +20,9 @@ describe('preview files', () => { ${'config.js'} ${'config.jsx'} `('resolves a valid preview file from $filepath', ({ filepath }) => { - setupFiles({ [`test/${filepath}`]: 'true' }); + setupFiles({ [path.join('test', filepath)]: 'true' }); - expect(getPreviewFile('test/')).toEqual(`test/${filepath}`); + expect(getPreviewFile('test/')).toEqual(`test${path.sep}${filepath}`); }); it('returns false when none of the paths exist', () => { @@ -39,9 +40,9 @@ describe('main files', () => { ${'main.js'} ${'main.jsx'} `('resolves a valid main file path from $filepath', ({ filepath }) => { - setupFiles({ [`test/${filepath}`]: 'true' }); + setupFiles({ [path.join('test', filepath)]: 'true' }); - expect(getMainFile('test/')).toEqual(`test/${filepath}`); + expect(getMainFile('test/')).toEqual(`test${path.sep}${filepath}`); }); it('returns false when none of the paths exist', () => { diff --git a/addons/storyshots/storyshots-core/src/frameworks/configure.ts b/addons/storyshots/storyshots-core/src/frameworks/configure.ts index 87b51027a995..ec8ce9be30dd 100644 --- a/addons/storyshots/storyshots-core/src/frameworks/configure.ts +++ b/addons/storyshots/storyshots-core/src/frameworks/configure.ts @@ -1,12 +1,18 @@ import fs from 'fs'; import path from 'path'; -import { toRequireContext, StoriesEntry, normalizeStoriesEntry } from '@storybook/core-common'; -import registerRequireContextHook from 'babel-plugin-require-context-hook/register'; +import type { NormalizedStoriesSpecifier, StoriesEntry } from '@storybook/core-common'; +import { toRequireContext, normalizeStoriesEntry } from '@storybook/core-common'; +import registerRequireContextHook from '@storybook/babel-plugin-require-context-hook/register'; import global from 'global'; -import { AnyFramework, ArgsEnhancer, ArgTypesEnhancer, DecoratorFunction } from '@storybook/csf'; +import type { + AnyFramework, + ArgsEnhancer, + ArgTypesEnhancer, + DecoratorFunction, +} from '@storybook/csf'; import { ClientApi } from './Loader'; -import { StoryshotsOptions } from '../api/StoryshotsOptions'; +import type { StoryshotsOptions } from '../api/StoryshotsOptions'; registerRequireContextHook(); @@ -19,8 +25,10 @@ const isFile = (file: string): boolean => { }; interface Output { + features?: Record; preview?: string; - stories?: string[]; + stories?: NormalizedStoriesSpecifier[]; + requireContexts?: string[]; } const supportedExtensions = ['ts', 'tsx', 'js', 'jsx']; @@ -50,15 +58,20 @@ function getConfigPathParts(input: string): Output { output.preview = preview; } if (main) { - const { stories = [] } = jest.requireActual(main); + const { stories = [], features = {} } = jest.requireActual(main); + output.features = features; + + const workingDir = process.cwd(); output.stories = stories.map((entry: StoriesEntry) => { - const workingDir = process.cwd(); const specifier = normalizeStoriesEntry(entry, { configDir, workingDir, }); + return specifier; + }); + output.requireContexts = output.stories.map((specifier) => { const { path: basePath, recursive, match } = toRequireContext(specifier); // eslint-disable-next-line no-underscore-dangle @@ -84,18 +97,23 @@ function configure( return; } - const { preview, stories } = getConfigPathParts(configPath); + const { + preview, + features = {}, + stories = [], + requireContexts = [], + } = getConfigPathParts(configPath); + + global.FEATURES = features; + global.STORIES = stories.map((specifier) => ({ + ...specifier, + importPathMatcher: specifier.importPathMatcher.source, + })); if (preview) { // This is essentially the same code as lib/core/src/server/preview/virtualModuleEntry.template - const { - parameters, - decorators, - globals, - globalTypes, - argsEnhancers, - argTypesEnhancers, - } = jest.requireActual(preview); + const { parameters, decorators, globals, globalTypes, argsEnhancers, argTypesEnhancers } = + jest.requireActual(preview); if (decorators) { decorators.forEach((decorator: DecoratorFunction) => @@ -117,8 +135,8 @@ function configure( } } - if (stories && stories.length) { - storybook.configure(stories, false, false); + if (requireContexts && requireContexts.length) { + storybook.configure(requireContexts, false, false); } } diff --git a/addons/storyshots/storyshots-core/src/frameworks/vue3/renderTree.ts b/addons/storyshots/storyshots-core/src/frameworks/vue3/renderTree.ts index 9e9f4084b8fa..9d2cc999ced2 100644 --- a/addons/storyshots/storyshots-core/src/frameworks/vue3/renderTree.ts +++ b/addons/storyshots/storyshots-core/src/frameworks/vue3/renderTree.ts @@ -1,12 +1,14 @@ import * as Vue from 'vue'; import global from 'global'; import dedent from 'ts-dedent'; +import { app, activeStoryComponent } from '@storybook/vue3'; const { document } = global; // This is cast as `any` to workaround type errors caused by Vue 2 types -const { render, h } = Vue as any; +const { h } = Vue as any; +let vm: any; function getRenderedTree(story: any) { const component = story.render(); @@ -14,20 +16,12 @@ function getRenderedTree(story: any) { // Vue 3's Jest renderer throws if all of the required props aren't specified // So we try/catch and warn the user if they forgot to specify one in their args - try { - render(vnode, document.createElement('div')); - } catch (err) { - // Jest throws an error when you call `console.error` - // eslint-disable-next-line no-console - console.error( - dedent` - Storyshots encountered an error while rendering Vue 3 story: ${story.id} - Did you remember to define every prop you are using in the story? - ` - ); + activeStoryComponent.value = vnode; + if (!vm) { + vm = app.mount(document.createElement('div')); } - - return vnode.el; + vm.$forceUpdate(); + return vm.$el; } export default getRenderedTree; diff --git a/addons/storyshots/storyshots-core/src/typings.d.ts b/addons/storyshots/storyshots-core/src/typings.d.ts index 8184210fd20a..23f273977217 100644 --- a/addons/storyshots/storyshots-core/src/typings.d.ts +++ b/addons/storyshots/storyshots-core/src/typings.d.ts @@ -3,4 +3,4 @@ declare module 'jest-preset-angular/*'; declare module 'preact-render-to-string/jsx'; declare module 'react-test-renderer*'; declare module 'rax-test-renderer*'; -declare module 'babel-plugin-require-context-hook/register'; +declare module '@storybook/babel-plugin-require-context-hook/register'; diff --git a/addons/storyshots/storyshots-core/stories/__snapshots__/storyshot.enzyme.test.js.snap b/addons/storyshots/storyshots-core/stories/__snapshots__/storyshot.enzyme.test.js.snap index 2c7cbf790b68..3f13c5c1a766 100644 --- a/addons/storyshots/storyshots-core/stories/__snapshots__/storyshot.enzyme.test.js.snap +++ b/addons/storyshots/storyshots-core/stories/__snapshots__/storyshot.enzyme.test.js.snap @@ -53,12 +53,6 @@ exports[`Storyshots Another Button with text 1`] = ` `; -exports[`Storyshots Async with 5ms timeout simulating async operation 1`] = ` - -

- -`; - exports[`Storyshots Button With Text 1`] = ` ; +export const WithText = () => ; -export const withSomeEmoji = () => ( +export const WithSomeEmoji = () => ( ); -withSomeEmoji.storyName = 'with some emoji'; +WithSomeEmoji.storyName = 'with some emoji'; diff --git a/addons/storyshots/storyshots-core/stories/required_with_context/Welcome.stories.js b/addons/storyshots/storyshots-core/stories/required_with_context/Welcome.stories.js index c1ffd1fbe5c5..8c850f44a7bb 100644 --- a/addons/storyshots/storyshots-core/stories/required_with_context/Welcome.stories.js +++ b/addons/storyshots/storyshots-core/stories/required_with_context/Welcome.stories.js @@ -11,6 +11,6 @@ export default { }, }; -export const toStorybook = () => ; +export const ToStorybook = () => ; -toStorybook.storyName = 'to Storybook'; +ToStorybook.storyName = 'to Storybook'; diff --git a/addons/storyshots/storyshots-core/stories/storyshot.enzyme.test.js b/addons/storyshots/storyshots-core/stories/storyshot.enzyme.test.js index ef3fb2f198cb..96e285722d44 100644 --- a/addons/storyshots/storyshots-core/stories/storyshot.enzyme.test.js +++ b/addons/storyshots/storyshots-core/stories/storyshot.enzyme.test.js @@ -1,12 +1,9 @@ import path from 'path'; import { mount } from 'enzyme'; -import { createSerializer as enzymeSerializer } from 'enzyme-to-json'; -import { createSerializer as emotionSerializer } from 'jest-emotion'; import initStoryshots from '../dist/ts3.9'; initStoryshots({ framework: 'react', configPath: path.join(__dirname, '..', '.storybook'), renderer: mount, - snapshotSerializers: [enzymeSerializer(), emotionSerializer()], }); diff --git a/addons/storyshots/storyshots-core/tsconfig.json b/addons/storyshots/storyshots-core/tsconfig.json index 4a91c980e54c..7d76274dfca8 100644 --- a/addons/storyshots/storyshots-core/tsconfig.json +++ b/addons/storyshots/storyshots-core/tsconfig.json @@ -6,6 +6,7 @@ "compilerOptions": { "rootDir": "./src", "experimentalDecorators": true, - "declaration": true + "declaration": true, + "skipLibCheck": true } -} +} \ No newline at end of file diff --git a/addons/storyshots/storyshots-puppeteer/README.md b/addons/storyshots/storyshots-puppeteer/README.md index 9c793d56f0a5..c2b6ab49566b 100644 --- a/addons/storyshots/storyshots-puppeteer/README.md +++ b/addons/storyshots/storyshots-puppeteer/README.md @@ -8,13 +8,13 @@ Add the following modules into your app. npm install @storybook/addon-storyshots-puppeteer puppeteer --save-dev ``` -⚠️ As of Storybook 5.3 `puppeteer` is no more included in addon dependencies and must be added to your project directly. +⚠️ As of Storybook 5.3 `puppeteer` is no longer included in the addon dependencies and must be added to your project directly. ## Configure Storyshots for Puppeteer tests ⚠️ **React-native** is **not supported** by this test function. -When willing to run Puppeteer tests for your stories, you have two options: +When running Puppeteer tests for your stories, you have two options: - Have a storybook running (ie. accessible via http(s), for instance using `npm run storybook`) - Have a static build of the storybook (for instance, using `npm run build-storybook`) diff --git a/addons/storyshots/storyshots-puppeteer/package.json b/addons/storyshots/storyshots-puppeteer/package.json index 230107cb51df..40ec2bc4fbf6 100644 --- a/addons/storyshots/storyshots-puppeteer/package.json +++ b/addons/storyshots/storyshots-puppeteer/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-storyshots-puppeteer", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Image snapshots addition to StoryShots based on puppeteer", "keywords": [ "addon", @@ -41,19 +41,19 @@ }, "dependencies": { "@axe-core/puppeteer": "^4.2.0", - "@storybook/csf": "0.0.2--canary.6aca495.0", - "@storybook/node-logger": "6.4.0-beta.10", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/node-logger": "6.5.0-rc.1", "@types/jest-image-snapshot": "^4.1.3", "core-js": "^3.8.2", "jest-image-snapshot": "^4.3.0", "regenerator-runtime": "^0.13.7" }, "devDependencies": { - "@storybook/csf": "0.0.2--canary.6aca495.0", + "@storybook/csf": "0.0.2--canary.4566f4d.1", "@types/puppeteer": "^5.4.0" }, "peerDependencies": { - "@storybook/addon-storyshots": "6.4.0-beta.10", + "@storybook/addon-storyshots": "6.5.0-rc.1", "puppeteer": "^2.0.0 || ^3.0.0" }, "peerDependenciesMeta": { @@ -64,5 +64,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c" + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401" } diff --git a/addons/storyshots/storyshots-puppeteer/src/axeTest.ts b/addons/storyshots/storyshots-puppeteer/src/axeTest.ts index d9db81952450..21548a4a0e0a 100644 --- a/addons/storyshots/storyshots-puppeteer/src/axeTest.ts +++ b/addons/storyshots/storyshots-puppeteer/src/axeTest.ts @@ -9,8 +9,13 @@ export const axeTest = (customConfig: Partial = {}) => { return puppeteerTest({ ...extendedConfig, async testBody(page, testOptions) { - const { element = '#root', exclude, disabledRules, options, config } = - testOptions.context.parameters.a11y || {}; + const { + element = '#root', + exclude, + disabledRules, + options, + config, + } = testOptions.context.parameters.a11y || {}; await beforeAxeTest(page, options); const axe = new AxePuppeteer(page); axe.include(element); diff --git a/addons/storyshots/storyshots-puppeteer/tsconfig.json b/addons/storyshots/storyshots-puppeteer/tsconfig.json index 4f09fb307c20..a055df7e6154 100644 --- a/addons/storyshots/storyshots-puppeteer/tsconfig.json +++ b/addons/storyshots/storyshots-puppeteer/tsconfig.json @@ -2,7 +2,11 @@ "extends": "../../../tsconfig.json", "compilerOptions": { "rootDir": "./src", - "types": ["webpack-env", "node"], + "skipLibCheck": true, + "types": [ + "webpack-env", + "node" + ], "declaration": true }, "include": [ @@ -11,4 +15,4 @@ "exclude": [ "src/__tests__/**/*" ] -} +} \ No newline at end of file diff --git a/addons/storysource/README.md b/addons/storysource/README.md index 616e9b4e56c2..143a025cb800 100644 --- a/addons/storysource/README.md +++ b/addons/storysource/README.md @@ -2,7 +2,7 @@ This addon is used to show stories source in the addon panel. -[Framework Support](https://github.com/storybookjs/storybook/blob/main/ADDONS_SUPPORT.md) +[Framework Support](https://storybook.js.org/docs/react/api/frameworks-feature-support) ![Storysource Demo](https://raw.githubusercontent.com/storybookjs/storybook/next/addons/storysource/docs/demo.gif) @@ -52,7 +52,7 @@ module.exports = { }; ``` -To customize the `source-loader`, pass `loaderOptions`. Valid configurations are documented in the [`source-loader` README](../../lib/source-loader/README.md#options). +To customize the `source-loader`, pass `loaderOptions`. Valid configurations are documented in the [`source-loader` README](https://github.com/storybookjs/storybook/tree/main/lib/source-loader/README.md#options). ## Theming diff --git a/addons/storysource/package.json b/addons/storysource/package.json index cefe19a0bc7f..d4e6637b2ef3 100644 --- a/addons/storysource/package.json +++ b/addons/storysource/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-storysource", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "View a story’s source code to see how it works and paste into your app", "keywords": [ "addon", @@ -41,28 +41,27 @@ "prepare": "node ../../scripts/prepare.js" }, "dependencies": { - "@storybook/addons": "6.4.0-beta.10", - "@storybook/api": "6.4.0-beta.10", - "@storybook/client-logger": "6.4.0-beta.10", - "@storybook/components": "6.4.0-beta.10", - "@storybook/router": "6.4.0-beta.10", - "@storybook/source-loader": "6.4.0-beta.10", - "@storybook/theming": "6.4.0-beta.10", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/api": "6.5.0-rc.1", + "@storybook/client-logger": "6.5.0-rc.1", + "@storybook/components": "6.5.0-rc.1", + "@storybook/router": "6.5.0-rc.1", + "@storybook/source-loader": "6.5.0-rc.1", + "@storybook/theming": "6.5.0-rc.1", "core-js": "^3.8.2", "estraverse": "^5.2.0", "loader-utils": "^2.0.0", - "prettier": "^2.2.1", "prop-types": "^15.7.2", - "react-syntax-highlighter": "^13.5.3", + "react-syntax-highlighter": "^15.5.0", "regenerator-runtime": "^0.13.7" }, "devDependencies": { - "@types/react": "^16.14.2", + "@types/react": "^16.14.23", "@types/react-syntax-highlighter": "^11.0.5" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "react": { @@ -75,7 +74,7 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", "sbmodern": "dist/modern/index.js", "storybook": { "displayName": "Storysource", diff --git a/addons/storysource/preset.js b/addons/storysource/preset.js index 9a53f8d68228..9ffb6ac993f5 100644 --- a/addons/storysource/preset.js +++ b/addons/storysource/preset.js @@ -25,7 +25,7 @@ function webpack(webpackConfig = {}, options = {}) { } function managerEntries(entry = []) { - return [...entry, require.resolve('./dist/esm/register')]; + return [...entry, require.resolve('./dist/esm/manager')]; } module.exports = { webpack, managerEntries }; diff --git a/addons/storysource/register.js b/addons/storysource/register.js index f209c0eb3703..4e287d25b151 100644 --- a/addons/storysource/register.js +++ b/addons/storysource/register.js @@ -1 +1 @@ -require('./dist/esm/register'); +import './dist/esm/manager'; diff --git a/addons/storysource/src/manager.tsx b/addons/storysource/src/manager.tsx new file mode 100644 index 000000000000..7de7e8845f06 --- /dev/null +++ b/addons/storysource/src/manager.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import { addons } from '@storybook/addons'; + +import { StoryPanel } from './StoryPanel'; +import { ADDON_ID, PANEL_ID } from './index'; + +addons.register(ADDON_ID, (api) => { + addons.addPanel(PANEL_ID, { + title: 'Story', + render: ({ active, key }) => (active ? : null), + paramKey: 'storysource', + }); +}); diff --git a/addons/storysource/src/register.tsx b/addons/storysource/src/register.tsx deleted file mode 100644 index 8a12561ac1f1..000000000000 --- a/addons/storysource/src/register.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react'; -import { addons } from '@storybook/addons'; - -import { StoryPanel } from './StoryPanel'; -import { ADDON_ID, PANEL_ID } from '.'; - -addons.register(ADDON_ID, (api) => { - addons.addPanel(PANEL_ID, { - title: 'Story', - render: ({ active, key }) => (active ? : null), - paramKey: 'storysource', - }); -}); diff --git a/addons/storysource/tsconfig.json b/addons/storysource/tsconfig.json index d1ee4fc75941..36ca4e1d3033 100644 --- a/addons/storysource/tsconfig.json +++ b/addons/storysource/tsconfig.json @@ -2,7 +2,9 @@ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "./src", - "types": ["webpack-env"] + "types": [ + "webpack-env" + ] }, "include": [ "src/**/*" @@ -15,4 +17,4 @@ "src/**/*.mockdata.*", "src/**/__testfixtures__/**" ] -} +} \ No newline at end of file diff --git a/addons/toolbars/manager.js b/addons/toolbars/manager.js new file mode 100644 index 000000000000..4e287d25b151 --- /dev/null +++ b/addons/toolbars/manager.js @@ -0,0 +1 @@ +import './dist/esm/manager'; diff --git a/addons/toolbars/package.json b/addons/toolbars/package.json index a5d06dbb19ae..b8b305d57249 100644 --- a/addons/toolbars/package.json +++ b/addons/toolbars/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-toolbars", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Create your own toolbar items that control story rendering", "keywords": [ "addon", @@ -25,9 +25,9 @@ "url": "https://opencollective.com/storybook" }, "license": "MIT", - "main": "dist/cjs/register.js", - "module": "dist/esm/register.js", - "types": "dist/ts3.9/register.d.ts", + "main": "dist/cjs/manager.js", + "module": "dist/esm/manager.js", + "types": "dist/ts3.9/manager.d.ts", "typesVersions": { "<3.8": { "dist/ts3.9/*": [ @@ -45,16 +45,17 @@ "prepare": "node ../../scripts/prepare.js" }, "dependencies": { - "@storybook/addons": "6.4.0-beta.10", - "@storybook/api": "6.4.0-beta.10", - "@storybook/components": "6.4.0-beta.10", - "@storybook/theming": "6.4.0-beta.10", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/api": "6.5.0-rc.1", + "@storybook/client-logger": "6.5.0-rc.1", + "@storybook/components": "6.5.0-rc.1", + "@storybook/theming": "6.5.0-rc.1", "core-js": "^3.8.2", "regenerator-runtime": "^0.13.7" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "react": { @@ -67,8 +68,8 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", - "sbmodern": "dist/modern/register.js", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", + "sbmodern": "dist/modern/manager.js", "storybook": { "displayName": "Toolbars", "icon": "https://user-images.githubusercontent.com/263385/101991677-48cdf300-3c7c-11eb-93b4-19b0e3366959.png", diff --git a/addons/toolbars/preset.js b/addons/toolbars/preset.js deleted file mode 100644 index 656f27562a44..000000000000 --- a/addons/toolbars/preset.js +++ /dev/null @@ -1,5 +0,0 @@ -function managerEntries(entry = []) { - return [...entry, require.resolve('./dist/esm/register')]; -} - -module.exports = { managerEntries }; diff --git a/addons/toolbars/register.js b/addons/toolbars/register.js index 681a5d09dcec..2d916bea61a0 100644 --- a/addons/toolbars/register.js +++ b/addons/toolbars/register.js @@ -1 +1,6 @@ -import './dist/esm/register'; +import { once } from '@storybook/client-logger'; +import './manager'; + +once.warn( + 'register.js is deprecated see https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#deprecated-registerjs' +); diff --git a/addons/toolbars/src/components/ToolbarMenuList.tsx b/addons/toolbars/src/components/ToolbarMenuList.tsx index 0f5bef8764fa..ae921689ad89 100644 --- a/addons/toolbars/src/components/ToolbarMenuList.tsx +++ b/addons/toolbars/src/components/ToolbarMenuList.tsx @@ -3,7 +3,7 @@ import { useGlobals } from '@storybook/api'; import { WithTooltip, TooltipLinkList } from '@storybook/components'; import { ToolbarMenuButton } from './ToolbarMenuButton'; import { withKeyboardCycle, WithKeyboardCycleProps } from '../hoc/withKeyboardCycle'; -import { getSelectedIcon } from '../utils/get-selected-icon'; +import { getSelectedIcon, getSelectedTitle } from '../utils/get-selected'; import { ToolbarMenuProps } from '../types'; import { ToolbarMenuListItem } from './ToolbarMenuListItem'; @@ -22,7 +22,7 @@ export const ToolbarMenuList: FC = withKeyboardCycle( id, name, description, - toolbar: { icon: _icon, items, title: _title, showName, preventDynamicIcon }, + toolbar: { icon: _icon, items, title: _title, showName, preventDynamicIcon, dynamicTitle }, }) => { const [globals, updateGlobals] = useGlobals(); @@ -40,6 +40,10 @@ export const ToolbarMenuList: FC = withKeyboardCycle( title = name; } + if (dynamicTitle) { + title = getSelectedTitle({ currentValue, items }) || title; + } + const handleItemClick = useCallback( (value: string) => { updateGlobals({ [id]: value }); diff --git a/addons/toolbars/src/register.tsx b/addons/toolbars/src/manager.tsx similarity index 100% rename from addons/toolbars/src/register.tsx rename to addons/toolbars/src/manager.tsx diff --git a/addons/toolbars/src/types.ts b/addons/toolbars/src/types.ts index ec64b06396ea..078e007e6220 100644 --- a/addons/toolbars/src/types.ts +++ b/addons/toolbars/src/types.ts @@ -1,5 +1,5 @@ -import { IconsProps } from '@storybook/components'; -import { ArgType } from '@storybook/api'; +import type { IconsProps } from '@storybook/components'; +import type { ArgType } from '@storybook/api'; export type ToolbarShortcutType = 'next' | 'previous' | 'reset'; @@ -33,6 +33,8 @@ export interface NormalizedToolbarConfig { shortcuts?: ToolbarShortcuts; /** @deprecated "name" no longer dual purposes as title - use "title" if a title is wanted */ showName?: boolean; + /** Change title based on selected value */ + dynamicTitle?: boolean; } export type NormalizedToolbarArgType = ArgType & { diff --git a/addons/toolbars/src/utils/get-selected-icon.ts b/addons/toolbars/src/utils/get-selected-icon.ts deleted file mode 100644 index fb0e201e14d2..000000000000 --- a/addons/toolbars/src/utils/get-selected-icon.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ToolbarItem } from '../types'; - -interface GetSelectedIconProps { - currentValue: string | null; - items: ToolbarItem[]; -} - -export const getSelectedIcon = ({ currentValue, items }: GetSelectedIconProps) => { - const selectedItem = currentValue != null && items.find((item) => item.value === currentValue); - const selectedIcon = selectedItem && selectedItem.icon; - - return selectedIcon; -}; diff --git a/addons/toolbars/src/utils/get-selected.ts b/addons/toolbars/src/utils/get-selected.ts new file mode 100644 index 000000000000..245f0b9fe04a --- /dev/null +++ b/addons/toolbars/src/utils/get-selected.ts @@ -0,0 +1,21 @@ +import { ToolbarItem } from '../types'; + +interface GetSelectedItemProps { + currentValue: string | null; + items: ToolbarItem[]; +} + +export const getSelectedItem = ({ currentValue, items }: GetSelectedItemProps) => { + const selectedItem = currentValue != null && items.find((item) => item.value === currentValue); + return selectedItem; +}; + +export const getSelectedIcon = ({ currentValue, items }: GetSelectedItemProps) => { + const selectedItem = getSelectedItem({ currentValue, items }); + return selectedItem?.icon; +}; + +export const getSelectedTitle = ({ currentValue, items }: GetSelectedItemProps) => { + const selectedItem = getSelectedItem({ currentValue, items }); + return selectedItem?.title; +}; diff --git a/addons/toolbars/tsconfig.json b/addons/toolbars/tsconfig.json index 78bae36b0b11..0baf78294f75 100644 --- a/addons/toolbars/tsconfig.json +++ b/addons/toolbars/tsconfig.json @@ -2,9 +2,14 @@ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "./src", - "types": ["webpack-env", "jest"] + "types": [ + "webpack-env", + "jest" + ] }, - "include": ["src/**/*"], + "include": [ + "src/**/*" + ], "exclude": [ "src/**/*.test.*", "src/**/tests/**/*", @@ -13,4 +18,4 @@ "src/**/*.mockdata.*", "src/**/__testfixtures__/**" ] -} +} \ No newline at end of file diff --git a/addons/viewport/manager.js b/addons/viewport/manager.js new file mode 100644 index 000000000000..4e287d25b151 --- /dev/null +++ b/addons/viewport/manager.js @@ -0,0 +1 @@ +import './dist/esm/manager'; diff --git a/addons/viewport/package.json b/addons/viewport/package.json index 4ffdd82b44ed..5016cf623961 100644 --- a/addons/viewport/package.json +++ b/addons/viewport/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-viewport", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Build responsive components by adjusting Storybook’s viewport size and orientation", "keywords": [ "addon", @@ -42,12 +42,12 @@ "prepare": "node ../../scripts/prepare.js" }, "dependencies": { - "@storybook/addons": "6.4.0-beta.10", - "@storybook/api": "6.4.0-beta.10", - "@storybook/client-logger": "6.4.0-beta.10", - "@storybook/components": "6.4.0-beta.10", - "@storybook/core-events": "6.4.0-beta.10", - "@storybook/theming": "6.4.0-beta.10", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/api": "6.5.0-rc.1", + "@storybook/client-logger": "6.5.0-rc.1", + "@storybook/components": "6.5.0-rc.1", + "@storybook/core-events": "6.5.0-rc.1", + "@storybook/theming": "6.5.0-rc.1", "core-js": "^3.8.2", "global": "^4.4.0", "memoizerific": "^1.11.3", @@ -55,8 +55,8 @@ "regenerator-runtime": "^0.13.7" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "react": { @@ -69,7 +69,7 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", "sbmodern": "dist/modern/preview.js", "storybook": { "displayName": "Viewport", diff --git a/addons/viewport/preset.js b/addons/viewport/preset.js deleted file mode 100644 index 656f27562a44..000000000000 --- a/addons/viewport/preset.js +++ /dev/null @@ -1,5 +0,0 @@ -function managerEntries(entry = []) { - return [...entry, require.resolve('./dist/esm/register')]; -} - -module.exports = { managerEntries }; diff --git a/addons/viewport/register.js b/addons/viewport/register.js index f209c0eb3703..2d916bea61a0 100644 --- a/addons/viewport/register.js +++ b/addons/viewport/register.js @@ -1 +1,6 @@ -require('./dist/esm/register'); +import { once } from '@storybook/client-logger'; +import './manager'; + +once.warn( + 'register.js is deprecated see https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#deprecated-registerjs' +); diff --git a/addons/viewport/src/register.tsx b/addons/viewport/src/manager.tsx similarity index 100% rename from addons/viewport/src/register.tsx rename to addons/viewport/src/manager.tsx diff --git a/addons/viewport/src/shortcuts.ts b/addons/viewport/src/shortcuts.ts index 34cbb8db0fa2..779726eb9e23 100644 --- a/addons/viewport/src/shortcuts.ts +++ b/addons/viewport/src/shortcuts.ts @@ -1,4 +1,4 @@ -import { API } from '@storybook/api'; +import type { API } from '@storybook/api'; import { ADDON_ID } from './constants'; const getCurrentViewportIndex = (viewportsKeys: string[], current: string): number => diff --git a/addons/viewport/tsconfig.json b/addons/viewport/tsconfig.json index d1ee4fc75941..36ca4e1d3033 100644 --- a/addons/viewport/tsconfig.json +++ b/addons/viewport/tsconfig.json @@ -2,7 +2,9 @@ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "./src", - "types": ["webpack-env"] + "types": [ + "webpack-env" + ] }, "include": [ "src/**/*" @@ -15,4 +17,4 @@ "src/**/*.mockdata.*", "src/**/__testfixtures__/**" ] -} +} \ No newline at end of file diff --git a/app/angular/README.md b/app/angular/README.md index 24e320e7b728..f18b4cdfb590 100644 --- a/app/angular/README.md +++ b/app/angular/README.md @@ -19,5 +19,5 @@ For more information visit: [storybook.js.org](https://storybook.js.org) --- -Storybook also comes with a lot of [addons](https://storybook.js.org/docs/angular/configure/storybook-addons) and a great API to customize as you wish. -You can also build a [static version](https://storybook.js.org/docs/angular/workflows/publish-storybook) of your storybook and deploy it anywhere you want. +Storybook also comes with a lot of [addons](https://storybook.js.org/addons) and a great API to customize as you wish. +You can also build a [static version](https://storybook.js.org/docs/angular/sharing/publish-storybook) of your Storybook and deploy it anywhere you want. diff --git a/app/angular/package.json b/app/angular/package.json index 92a9bfb132a3..554db8973eca 100644 --- a/app/angular/package.json +++ b/app/angular/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/angular", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Storybook for Angular: Develop Angular Components in isolation with Hot Reloading.", "keywords": [ "storybook" @@ -45,83 +45,89 @@ "prepare": "node ../../scripts/prepare.js" }, "dependencies": { - "@storybook/addons": "6.4.0-beta.10", - "@storybook/api": "6.4.0-beta.10", - "@storybook/core": "6.4.0-beta.10", - "@storybook/core-common": "6.4.0-beta.10", - "@storybook/core-events": "6.4.0-beta.10", - "@storybook/csf": "0.0.2--canary.6aca495.0", - "@storybook/node-logger": "6.4.0-beta.10", - "@storybook/store": "6.4.0-beta.10", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/api": "6.5.0-rc.1", + "@storybook/client-logger": "6.5.0-rc.1", + "@storybook/core": "6.5.0-rc.1", + "@storybook/core-common": "6.5.0-rc.1", + "@storybook/core-events": "6.5.0-rc.1", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/docs-tools": "6.5.0-rc.1", + "@storybook/node-logger": "6.5.0-rc.1", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.0-rc.1", + "@types/node": "^14.14.20 || ^16.0.0", + "@types/react": "^16.14.23", + "@types/react-dom": "^16.9.14", "@types/webpack-env": "^1.16.0", "autoprefixer": "^9.8.6", "core-js": "^3.8.2", + "find-up": "^5.0.0", "fork-ts-checker-webpack-plugin": "^4.1.6", "global": "^4.4.0", + "nanoid": "^3.1.23", + "p-limit": "^3.1.0", "postcss": "^7.0.36", "postcss-loader": "^4.2.0", "raw-loader": "^4.0.2", - "react": "16.14.0", - "react-dom": "16.14.0", + "react": "^16.14.0", + "react-dom": "^16.14.0", "read-pkg-up": "^7.0.1", "regenerator-runtime": "^0.13.7", "sass-loader": "^10.1.0", - "strip-json-comments": "3.1.1", - "telejson": "^5.3.2", + "telejson": "^6.0.8", "ts-dedent": "^2.0.0", "ts-loader": "^8.0.14", "tsconfig-paths-webpack-plugin": "^3.3.0", "util-deprecate": "^1.0.2", - "webpack": "4" + "webpack": ">=4.0.0 <6.0.0" }, "devDependencies": { "@angular-devkit/architect": "~0.1102.0", "@angular-devkit/build-angular": "~0.1102.13", "@angular-devkit/core": "^11.2.13", + "@angular/cli": "^11.2.14", "@angular/common": "^11.2.14", "@angular/compiler": "^11.2.14", "@angular/compiler-cli": "^11.2.14", "@angular/core": "^11.2.14", - "@angular/elements": "^11.2.14", "@angular/forms": "^11.2.14", "@angular/platform-browser": "^11.2.14", "@angular/platform-browser-dynamic": "^11.2.14", "@nrwl/workspace": "^11.6.3", "@types/autoprefixer": "^9.7.2", - "@types/jest": "^26.0.16", - "@webcomponents/custom-elements": "^1.4.3", + "@types/tmp": "^0.2.3", + "cross-spawn": "^7.0.3", "jest": "^26.6.3", "jest-preset-angular": "^8.3.2", - "ts-jest": "^26.4.4" + "jest-specific-snapshot": "^4.0.0", + "tmp": "^0.2.1", + "webpack": "4" }, "peerDependencies": { "@angular-devkit/architect": ">=0.8.9", - "@angular-devkit/build-angular": ">=0.8.9", + "@angular-devkit/build-angular": ">=0.8.9 || >= 12.0.0", "@angular-devkit/core": "^0.6.1 || >=7.0.0", + "@angular/cli": ">=6.0.0", "@angular/common": ">=6.0.0", "@angular/compiler": ">=6.0.0", "@angular/compiler-cli": ">=6.0.0", "@angular/core": ">=6.0.0", - "@angular/elements": ">=6.0.0", "@angular/forms": ">=6.0.0", "@angular/platform-browser": ">=6.0.0", "@angular/platform-browser-dynamic": ">=6.0.0", "@babel/core": "*", "@nrwl/workspace": ">=11.1.0", - "@webcomponents/custom-elements": ">=1.4.3", - "rxjs": "^6.0.0", + "rxjs": "^6.0.0 || ^7.4.0", "typescript": "^3.4.0 || >=4.0.0", "zone.js": "^0.8.29 || ^0.9.0 || ^0.10.0 || ^0.11.0" }, "peerDependenciesMeta": { - "@angular/elements": { + "@angular/cli": { "optional": true }, "@nrwl/workspace": { "optional": true - }, - "@webcomponents/custom-elements": { - "optional": true } }, "engines": { @@ -131,5 +137,5 @@ "access": "public" }, "builders": "dist/ts3.9/builders/builders.json", - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c" + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401" } diff --git a/app/angular/preset.js b/app/angular/preset.js index 20b417ae97b5..761bd4584936 100644 --- a/app/angular/preset.js +++ b/app/angular/preset.js @@ -1,7 +1 @@ -function config(entry = []) { - return [...entry, require.resolve('./dist/esm/client/preview/config')]; -} - -module.exports = { - config, -}; +module.exports = require('./dist/ts3.9/server/preset'); diff --git a/app/angular/setup-jest.ts b/app/angular/setup-jest.ts index 3e05aa930bb9..3caa91649606 100644 --- a/app/angular/setup-jest.ts +++ b/app/angular/setup-jest.ts @@ -1,4 +1,4 @@ // eslint-disable-next-line import/no-extraneous-dependencies -import 'jest-preset-angular'; +import 'jest-preset-angular/setup-jest'; global.EventSource = class {} as any; diff --git a/app/angular/src/builders/build-storybook/index.spec.ts b/app/angular/src/builders/build-storybook/index.spec.ts index 3ad5848d1eca..40b12a8b8804 100644 --- a/app/angular/src/builders/build-storybook/index.spec.ts +++ b/app/angular/src/builders/build-storybook/index.spec.ts @@ -5,11 +5,13 @@ import * as path from 'path'; const buildStandaloneMock = jest.fn(); jest.doMock('@storybook/angular/standalone', () => buildStandaloneMock); +jest.doMock('find-up', () => ({ sync: () => './storybook/tsconfig.ts' })); const cpSpawnMock = { spawn: jest.fn(), }; jest.doMock('child_process', () => cpSpawnMock); + describe('Build Storybook Builder', () => { let architect: Architect; let architectHost: TestingArchitectHost; @@ -74,16 +76,15 @@ describe('Build Storybook Builder', () => { expect(cpSpawnMock.spawn).not.toHaveBeenCalledWith(); expect(buildStandaloneMock).toHaveBeenCalledWith({ angularBrowserTarget: 'angular-cli:build-2', + angularBuilderContext: expect.any(Object), + angularBuilderOptions: {}, configDir: '.storybook', - docsMode: false, loglevel: undefined, quiet: false, outputDir: 'storybook-static', - staticDir: [], mode: 'static', - compodoc: false, - compodocArgs: ['-e', 'json'], - tsConfig: 'src/tsconfig.app.json', + tsConfig: './storybook/tsconfig.ts', + webpackStatsJson: false, }); }); @@ -101,21 +102,47 @@ describe('Build Storybook Builder', () => { expect(cpSpawnMock.spawn).not.toHaveBeenCalledWith(); expect(buildStandaloneMock).toHaveBeenCalledWith({ angularBrowserTarget: null, + angularBuilderContext: expect.any(Object), + angularBuilderOptions: {}, configDir: '.storybook', - docsMode: false, loglevel: undefined, quiet: false, outputDir: 'storybook-static', - staticDir: [], mode: 'static', + tsConfig: 'path/to/tsConfig.json', + webpackStatsJson: false, + }); + }); + + it('should build storybook with webpack stats.json', async () => { + const run = await architect.scheduleBuilder('@storybook/angular:build-storybook', { + tsConfig: 'path/to/tsConfig.json', compodoc: false, - compodocArgs: ['-e', 'json'], + webpackStatsJson: true, + }); + + const output = await run.result; + + await run.stop(); + + expect(output.success).toBeTruthy(); + expect(cpSpawnMock.spawn).not.toHaveBeenCalledWith(); + expect(buildStandaloneMock).toHaveBeenCalledWith({ + angularBrowserTarget: null, + angularBuilderContext: expect.any(Object), + angularBuilderOptions: {}, + configDir: '.storybook', + loglevel: undefined, + quiet: false, + outputDir: 'storybook-static', + mode: 'static', tsConfig: 'path/to/tsConfig.json', + webpackStatsJson: true, }); }); it('should throw error', async () => { - buildStandaloneMock.mockRejectedValue(new Error()); + buildStandaloneMock.mockRejectedValue(true); const run = await architect.scheduleBuilder('@storybook/angular:start-storybook', { browserTarget: 'angular-cli:build-2', @@ -128,7 +155,7 @@ describe('Build Storybook Builder', () => { expect(false).toEqual('Throw expected'); } catch (error) { - // eslint-disable-next-line jest/no-try-expect, jest/no-conditional-expect + // eslint-disable-next-line jest/no-try-expect expect(error).toEqual( 'Broken build, fix the error above.\nYou may need to refresh the browser.' ); @@ -145,26 +172,53 @@ describe('Build Storybook Builder', () => { await run.stop(); expect(output.success).toBeTruthy(); - expect(cpSpawnMock.spawn).toHaveBeenCalledWith('compodoc', [ - '-p', - 'src/tsconfig.app.json', - '-d', - '', - '-e', - 'json', - ]); + expect(cpSpawnMock.spawn).toHaveBeenCalledWith( + 'npx', + ['compodoc', '-p', './storybook/tsconfig.ts', '-d', '', '-e', 'json'], + { + cwd: '', + env: process.env, + shell: true, + } + ); expect(buildStandaloneMock).toHaveBeenCalledWith({ angularBrowserTarget: 'angular-cli:build-2', + angularBuilderContext: expect.any(Object), + angularBuilderOptions: {}, + configDir: '.storybook', + loglevel: undefined, + quiet: false, + outputDir: 'storybook-static', + mode: 'static', + tsConfig: './storybook/tsconfig.ts', + webpackStatsJson: false, + }); + }); + + it('should start storybook with styles options', async () => { + const run = await architect.scheduleBuilder('@storybook/angular:build-storybook', { + tsConfig: 'path/to/tsConfig.json', + compodoc: false, + styles: ['style.scss'], + }); + + const output = await run.result; + + await run.stop(); + + expect(output.success).toBeTruthy(); + expect(cpSpawnMock.spawn).not.toHaveBeenCalledWith(); + expect(buildStandaloneMock).toHaveBeenCalledWith({ + angularBrowserTarget: null, + angularBuilderContext: expect.any(Object), + angularBuilderOptions: { styles: ['style.scss'] }, configDir: '.storybook', - docsMode: false, loglevel: undefined, quiet: false, outputDir: 'storybook-static', - staticDir: [], mode: 'static', - compodoc: true, - compodocArgs: ['-e', 'json'], - tsConfig: 'src/tsconfig.app.json', + tsConfig: 'path/to/tsConfig.json', + webpackStatsJson: false, }); }); }); diff --git a/app/angular/src/builders/build-storybook/index.ts b/app/angular/src/builders/build-storybook/index.ts index eb465f6b9433..462efad1bd4b 100644 --- a/app/angular/src/builders/build-storybook/index.ts +++ b/app/angular/src/builders/build-storybook/index.ts @@ -7,12 +7,17 @@ import { } from '@angular-devkit/architect'; import { JsonObject } from '@angular-devkit/core'; import { from, Observable, of, throwError } from 'rxjs'; -import { CLIOptions } from '@storybook/core-common'; +import type { CLIOptions } from '@storybook/core-common'; import { catchError, map, mapTo, switchMap } from 'rxjs/operators'; +import { sync as findUpSync } from 'find-up'; +import { + BrowserBuilderOptions, + ExtraEntryPoint, + StylePreprocessorOptions, +} from '@angular-devkit/build-angular'; // eslint-disable-next-line import/no-extraneous-dependencies import buildStandalone, { StandaloneOptions } from '@storybook/angular/standalone'; -import { BrowserBuilderOptions } from '@angular-devkit/build-angular'; import { runCompodoc } from '../utils/run-compodoc'; import { buildStandaloneErrorHandler } from '../utils/build-standalone-errors-handler'; @@ -21,10 +26,12 @@ export type StorybookBuilderOptions = JsonObject & { tsConfig?: string; compodoc: boolean; compodocArgs: string[]; + styles?: ExtraEntryPoint[]; + stylePreprocessorOptions?: StylePreprocessorOptions; } & Pick< // makes sure the option exists CLIOptions, - 'staticDir' | 'outputDir' | 'configDir' | 'loglevel' | 'quiet' | 'docs' + 'outputDir' | 'configDir' | 'loglevel' | 'quiet' | 'docs' | 'webpackStatsJson' >; export type StorybookBuilderOutput = JsonObject & BuilderOutput & {}; @@ -46,13 +53,34 @@ function commandBuilder( return runCompodoc$.pipe(mapTo({ tsConfig })); }), map(({ tsConfig }) => { - const { browserTarget, ...otherOptions } = options; + const { + browserTarget, + stylePreprocessorOptions, + styles, + configDir, + docs, + loglevel, + outputDir, + quiet, + webpackStatsJson, + } = options; - return { - ...otherOptions, + const standaloneOptions: StandaloneOptions = { + configDir, + docs, + loglevel, + outputDir, + quiet, angularBrowserTarget: browserTarget, + angularBuilderContext: context, + angularBuilderOptions: { + ...(stylePreprocessorOptions ? { stylePreprocessorOptions } : {}), + ...(styles ? { styles } : {}), + }, tsConfig, + webpackStatsJson, }; + return standaloneOptions; }), switchMap((standaloneOptions) => runInstance({ ...standaloneOptions, mode: 'static' })), map(() => { @@ -74,7 +102,10 @@ async function setup(options: StorybookBuilderOptions, context: BuilderContext) } return { - tsConfig: options.tsConfig ?? browserOptions.tsConfig ?? undefined, + tsConfig: + options.tsConfig ?? + findUpSync('tsconfig.json', { cwd: options.configDir }) ?? + browserOptions.tsConfig, }; } diff --git a/app/angular/src/builders/build-storybook/schema.json b/app/angular/src/builders/build-storybook/schema.json index 952a05069933..2fa4edad3f2d 100644 --- a/app/angular/src/builders/build-storybook/schema.json +++ b/app/angular/src/builders/build-storybook/schema.json @@ -14,13 +14,6 @@ "type": "string", "description": "The full path for the TypeScript configuration file, relative to the current workspace." }, - "staticDir": { - "type": "array", - "description": "Directory where to load static files from, array of strings.", - "items": { - "type": "string" - } - }, "outputDir": { "type": "string", "description": "Directory where to store built files.", @@ -58,15 +51,66 @@ "items": { "type": "string" } + }, + "webpackStatsJson": { + "type": "boolean", + "description": "Write Webpack Stats JSON to disk", + "default": false + }, + "styles": { + "type": "array", + "description": "Global styles to be included in the build.", + "items": { + "$ref": "#/definitions/extraEntryPoint" + }, + "default": "" + }, + "stylePreprocessorOptions": { + "description": "Options to pass to style preprocessors.", + "type": "object", + "properties": { + "includePaths": { + "description": "Paths to include. Paths will be resolved to workspace root.", + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "default": "" } }, "additionalProperties": false, - "oneOf": [ - { - "required": ["browserTarget"] - }, - { - "required": ["tsConfig"] + "definitions": { + "extraEntryPoint": { + "oneOf": [ + { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "The file to include." + }, + "bundleName": { + "type": "string", + "pattern": "^[\\w\\-.]*$", + "description": "The bundle name for this extra entry point." + }, + "inject": { + "type": "boolean", + "description": "If the bundle will be referenced in the HTML file.", + "default": true + } + }, + "additionalProperties": false, + "required": ["input"] + }, + { + "type": "string", + "description": "The file to include." + } + ] } - ] + } } diff --git a/app/angular/src/builders/start-storybook/index.spec.ts b/app/angular/src/builders/start-storybook/index.spec.ts index 733fb5eac581..1430ea25e5ba 100644 --- a/app/angular/src/builders/start-storybook/index.spec.ts +++ b/app/angular/src/builders/start-storybook/index.spec.ts @@ -5,6 +5,7 @@ import * as path from 'path'; const buildStandaloneMock = jest.fn(); jest.doMock('@storybook/angular/standalone', () => buildStandaloneMock); +jest.doMock('find-up', () => ({ sync: () => './storybook/tsconfig.ts' })); const cpSpawnMock = { spawn: jest.fn(), @@ -75,9 +76,10 @@ describe('Start Storybook Builder', () => { expect(cpSpawnMock.spawn).not.toHaveBeenCalledWith(); expect(buildStandaloneMock).toHaveBeenCalledWith({ angularBrowserTarget: 'angular-cli:build-2', + angularBuilderContext: expect.any(Object), + angularBuilderOptions: {}, ci: false, configDir: '.storybook', - docsMode: false, host: 'localhost', https: false, port: 4400, @@ -86,10 +88,7 @@ describe('Start Storybook Builder', () => { sslCa: undefined, sslCert: undefined, sslKey: undefined, - staticDir: [], - compodoc: false, - compodocArgs: ['-e', 'json'], - tsConfig: 'src/tsconfig.app.json', + tsConfig: './storybook/tsconfig.ts', }); }); @@ -108,9 +107,10 @@ describe('Start Storybook Builder', () => { expect(cpSpawnMock.spawn).not.toHaveBeenCalledWith(); expect(buildStandaloneMock).toHaveBeenCalledWith({ angularBrowserTarget: null, + angularBuilderContext: expect.any(Object), + angularBuilderOptions: {}, ci: false, configDir: '.storybook', - docsMode: false, host: 'localhost', https: false, port: 4400, @@ -119,15 +119,12 @@ describe('Start Storybook Builder', () => { sslCa: undefined, sslCert: undefined, sslKey: undefined, - staticDir: [], - compodoc: false, - compodocArgs: ['-e', 'json'], tsConfig: 'path/to/tsConfig.json', }); }); it('should throw error', async () => { - buildStandaloneMock.mockRejectedValue(new Error()); + buildStandaloneMock.mockRejectedValue(true); const run = await architect.scheduleBuilder('@storybook/angular:start-storybook', { browserTarget: 'angular-cli:build-2', @@ -140,7 +137,7 @@ describe('Start Storybook Builder', () => { expect(false).toEqual('Throw expected'); } catch (error) { - // eslint-disable-next-line jest/no-try-expect, jest/no-conditional-expect + // eslint-disable-next-line jest/no-try-expect expect(error).toEqual( 'Broken build, fix the error above.\nYou may need to refresh the browser.' ); @@ -157,19 +154,21 @@ describe('Start Storybook Builder', () => { await run.stop(); expect(output.success).toBeTruthy(); - expect(cpSpawnMock.spawn).toHaveBeenCalledWith('compodoc', [ - '-p', - 'src/tsconfig.app.json', - '-d', - '', - '-e', - 'json', - ]); + expect(cpSpawnMock.spawn).toHaveBeenCalledWith( + 'npx', + ['compodoc', '-p', './storybook/tsconfig.ts', '-d', '', '-e', 'json'], + { + cwd: '', + env: process.env, + shell: true, + } + ); expect(buildStandaloneMock).toHaveBeenCalledWith({ angularBrowserTarget: 'angular-cli:build-2', + angularBuilderContext: expect.any(Object), + angularBuilderOptions: {}, ci: false, configDir: '.storybook', - docsMode: false, host: 'localhost', https: false, port: 9009, @@ -178,10 +177,41 @@ describe('Start Storybook Builder', () => { sslCa: undefined, sslCert: undefined, sslKey: undefined, - staticDir: [], - compodoc: true, - compodocArgs: ['-e', 'json'], - tsConfig: 'src/tsconfig.app.json', + tsConfig: './storybook/tsconfig.ts', + }); + }); + + it('should start storybook with styles options', async () => { + const run = await architect.scheduleBuilder('@storybook/angular:start-storybook', { + tsConfig: 'path/to/tsConfig.json', + port: 4400, + compodoc: false, + styles: ['src/styles.css'], + }); + + const output = await run.result; + + await run.stop(); + + expect(output.success).toBeTruthy(); + expect(cpSpawnMock.spawn).not.toHaveBeenCalledWith(); + expect(buildStandaloneMock).toHaveBeenCalledWith({ + angularBrowserTarget: null, + angularBuilderContext: expect.any(Object), + angularBuilderOptions: { + styles: ['src/styles.css'], + }, + ci: false, + configDir: '.storybook', + host: 'localhost', + https: false, + port: 4400, + quiet: false, + smokeTest: false, + sslCa: undefined, + sslCert: undefined, + sslKey: undefined, + tsConfig: 'path/to/tsConfig.json', }); }); }); diff --git a/app/angular/src/builders/start-storybook/index.ts b/app/angular/src/builders/start-storybook/index.ts index 354a6e19f3f9..ef3fe61cfa47 100644 --- a/app/angular/src/builders/start-storybook/index.ts +++ b/app/angular/src/builders/start-storybook/index.ts @@ -6,10 +6,15 @@ import { Target, } from '@angular-devkit/architect'; import { JsonObject } from '@angular-devkit/core'; -import { BrowserBuilderOptions } from '@angular-devkit/build-angular'; +import { + BrowserBuilderOptions, + ExtraEntryPoint, + StylePreprocessorOptions, +} from '@angular-devkit/build-angular'; import { from, Observable, of } from 'rxjs'; -import { CLIOptions } from '@storybook/core-common'; +import type { CLIOptions } from '@storybook/core-common'; import { map, switchMap, mapTo } from 'rxjs/operators'; +import { sync as findUpSync } from 'find-up'; // eslint-disable-next-line import/no-extraneous-dependencies import buildStandalone, { StandaloneOptions } from '@storybook/angular/standalone'; @@ -21,12 +26,13 @@ export type StorybookBuilderOptions = JsonObject & { tsConfig?: string; compodoc: boolean; compodocArgs: string[]; + styles?: ExtraEntryPoint[]; + stylePreprocessorOptions?: StylePreprocessorOptions; } & Pick< // makes sure the option exists CLIOptions, | 'port' | 'host' - | 'staticDir' | 'configDir' | 'https' | 'sslCa' @@ -57,13 +63,45 @@ function commandBuilder( return runCompodoc$.pipe(mapTo({ tsConfig })); }), map(({ tsConfig }) => { - const { browserTarget, ...otherOptions } = options; + const { + browserTarget, + stylePreprocessorOptions, + styles, + ci, + configDir, + docs, + host, + https, + port, + quiet, + smokeTest, + sslCa, + sslCert, + sslKey, + } = options; - return { - ...otherOptions, + const standaloneOptions: StandaloneOptions = { + ci, + configDir, + docs, + host, + https, + port, + quiet, + smokeTest, + sslCa, + sslCert, + sslKey, angularBrowserTarget: browserTarget, + angularBuilderContext: context, + angularBuilderOptions: { + ...(stylePreprocessorOptions ? { stylePreprocessorOptions } : {}), + ...(styles ? { styles } : {}), + }, tsConfig, }; + + return standaloneOptions; }), switchMap((standaloneOptions) => runInstance(standaloneOptions)), map(() => { @@ -85,10 +123,12 @@ async function setup(options: StorybookBuilderOptions, context: BuilderContext) } return { - tsConfig: options.tsConfig ?? browserOptions.tsConfig ?? undefined, + tsConfig: + options.tsConfig ?? + findUpSync('tsconfig.json', { cwd: options.configDir }) ?? + browserOptions.tsConfig, }; } - function runInstance(options: StandaloneOptions) { return new Observable((observer) => { // This Observable intentionally never complete, leaving the process running ;) diff --git a/app/angular/src/builders/start-storybook/schema.json b/app/angular/src/builders/start-storybook/schema.json index cbc6a6de71b4..3c78f907bdd1 100644 --- a/app/angular/src/builders/start-storybook/schema.json +++ b/app/angular/src/builders/start-storybook/schema.json @@ -24,13 +24,6 @@ "description": "Host to listen on.", "default": "localhost" }, - "staticDir": { - "type": "array", - "description": "Directory where to load static files from, array of strings.", - "items": { - "type": "string" - } - }, "configDir": { "type": "string", "description": "Directory where to load Storybook configurations from.", @@ -85,15 +78,61 @@ "items": { "type": "string" } + }, + "styles": { + "type": "array", + "description": "Global styles to be included in the build.", + "items": { + "$ref": "#/definitions/extraEntryPoint" + }, + "default": "" + }, + "stylePreprocessorOptions": { + "description": "Options to pass to style preprocessors.", + "type": "object", + "properties": { + "includePaths": { + "description": "Paths to include. Paths will be resolved to workspace root.", + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "default": "" } }, "additionalProperties": false, - "oneOf": [ - { - "required": ["browserTarget"] - }, - { - "required": ["tsConfig"] + "definitions": { + "extraEntryPoint": { + "oneOf": [ + { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "The file to include." + }, + "bundleName": { + "type": "string", + "pattern": "^[\\w\\-.]*$", + "description": "The bundle name for this extra entry point." + }, + "inject": { + "type": "boolean", + "description": "If the bundle will be referenced in the HTML file.", + "default": true + } + }, + "additionalProperties": false, + "required": ["input"] + }, + { + "type": "string", + "description": "The file to include." + } + ] } - ] + } } diff --git a/app/angular/src/builders/utils/build-standalone-errors-handler.ts b/app/angular/src/builders/utils/build-standalone-errors-handler.ts index d912c0163126..126ad4836c26 100644 --- a/app/angular/src/builders/utils/build-standalone-errors-handler.ts +++ b/app/angular/src/builders/utils/build-standalone-errors-handler.ts @@ -21,11 +21,11 @@ export const buildStandaloneErrorHandler = (error: any): any => { logger.line(); return error.close ? dedent` - FATAL broken build!, will close the process, - Fix the error below and restart storybook. - ` + FATAL broken build!, will close the process, + Fix the error below and restart storybook. + ` : dedent` - Broken build, fix the error above. - You may need to refresh the browser. - `; + Broken build, fix the error above. + You may need to refresh the browser. + `; }; diff --git a/app/angular/src/builders/utils/run-compodoc.spec.ts b/app/angular/src/builders/utils/run-compodoc.spec.ts new file mode 100644 index 000000000000..3c99cfefc499 --- /dev/null +++ b/app/angular/src/builders/utils/run-compodoc.spec.ts @@ -0,0 +1,88 @@ +import { BuilderContext } from '@angular-devkit/architect'; +import { LoggerApi } from '@angular-devkit/core/src/logger'; +import { take } from 'rxjs/operators'; + +const cpSpawnMock = { + spawn: jest.fn(), +}; +jest.doMock('child_process', () => cpSpawnMock); + +const { runCompodoc } = require('./run-compodoc'); + +const builderContextLoggerMock: LoggerApi = { + createChild: jest.fn(), + log: jest.fn(), + debug: jest.fn(), + info: jest.fn(), + warn: jest.fn(), + error: jest.fn(), + fatal: jest.fn(), +}; + +describe('runCompodoc', () => { + const originalEnv = process.env; + + beforeEach(() => { + process.env = { FOO: 'bar' }; + cpSpawnMock.spawn.mockImplementation(() => ({ + stdout: { on: () => {} }, + stderr: { on: () => {} }, + on: (_event: string, cb: any) => cb(0), + })); + }); + + afterEach(() => { + process.env = originalEnv; + jest.clearAllMocks(); + }); + + it('should run compodoc with tsconfig from context', async () => { + runCompodoc( + { + compodocArgs: [], + tsconfig: 'path/to/tsconfig.json', + }, + { + workspaceRoot: 'path/to/project', + logger: builderContextLoggerMock, + } as BuilderContext + ) + .pipe(take(1)) + .subscribe(); + + expect(cpSpawnMock.spawn).toHaveBeenCalledWith( + 'npx', + ['compodoc', '-p', 'path/to/tsconfig.json', '-d', 'path/to/project'], + { + cwd: 'path/to/project', + env: { FOO: 'bar' }, + shell: true, + } + ); + }); + + it('should run compodoc with tsconfig from compodocArgs', async () => { + runCompodoc( + { + compodocArgs: ['-p', 'path/to/tsconfig.stories.json'], + tsconfig: 'path/to/tsconfig.json', + }, + { + workspaceRoot: 'path/to/project', + logger: builderContextLoggerMock, + } as BuilderContext + ) + .pipe(take(1)) + .subscribe(); + + expect(cpSpawnMock.spawn).toHaveBeenCalledWith( + 'npx', + ['compodoc', '-d', 'path/to/project', '-p', 'path/to/tsconfig.stories.json'], + { + cwd: 'path/to/project', + env: { FOO: 'bar' }, + shell: true, + } + ); + }); +}); diff --git a/app/angular/src/builders/utils/run-compodoc.ts b/app/angular/src/builders/utils/run-compodoc.ts index 76ddadc5c326..0df330892048 100644 --- a/app/angular/src/builders/utils/run-compodoc.ts +++ b/app/angular/src/builders/utils/run-compodoc.ts @@ -1,23 +1,38 @@ import { BuilderContext } from '@angular-devkit/architect'; import { spawn } from 'child_process'; import { Observable } from 'rxjs'; +import * as path from 'path'; + +const hasTsConfigArg = (args: string[]) => args.indexOf('-p') !== -1; + +// path.relative is necessary to workaround a compodoc issue with +// absolute paths on windows machines +const toRelativePath = (pathToTsConfig: string) => { + return path.isAbsolute(pathToTsConfig) ? path.relative('.', pathToTsConfig) : pathToTsConfig; +}; export const runCompodoc = ( { compodocArgs, tsconfig }: { compodocArgs: string[]; tsconfig: string }, context: BuilderContext ): Observable => { return new Observable((observer) => { + const tsConfigPath = toRelativePath(tsconfig); const finalCompodocArgs = [ + 'compodoc', // Default options - '-p', - tsconfig, + ...(hasTsConfigArg(compodocArgs) ? [] : ['-p', tsConfigPath]), '-d', `${context.workspaceRoot}`, ...compodocArgs, ]; try { - const child = spawn('compodoc', finalCompodocArgs); + context.logger.info(finalCompodocArgs.join(' ')); + const child = spawn('npx', finalCompodocArgs, { + cwd: context.workspaceRoot, + env: process.env, + shell: true, + }); child.stdout.on('data', (data) => { context.logger.info(data.toString()); diff --git a/addons/docs/src/frameworks/angular/__testfixtures__/doc-button/argtypes.snapshot b/app/angular/src/client/docs/__testfixtures__/doc-button/argtypes.snapshot similarity index 94% rename from addons/docs/src/frameworks/angular/__testfixtures__/doc-button/argtypes.snapshot rename to app/angular/src/client/docs/__testfixtures__/doc-button/argtypes.snapshot index a29f3e151231..d3625f14e38f 100644 --- a/addons/docs/src/frameworks/angular/__testfixtures__/doc-button/argtypes.snapshot +++ b/app/angular/src/client/docs/__testfixtures__/doc-button/argtypes.snapshot @@ -41,7 +41,8 @@ Private value.", }, "accent": Object { "defaultValue": undefined, - "description": "Specify the accent-type of the button", + "description": " +Specify the accent-type of the button", "name": "accent", "table": Object { "category": "inputs", @@ -59,7 +60,8 @@ Private value.", }, "appearance": Object { "defaultValue": "secondary", - "description": "Appearance style of the button.", + "description": " +Appearance style of the button.", "name": "appearance", "table": Object { "category": "inputs", @@ -139,7 +141,8 @@ An internal calculation method which adds \`x\` and \`y\` together. }, "inputValue": Object { "defaultValue": undefined, - "description": "Setter for \`inputValue\` that is also an \`@Input\`.", + "description": " +Setter for \`inputValue\` that is also an \`@Input\`.", "name": "inputValue", "table": Object { "category": "inputs", @@ -176,7 +179,8 @@ Public value.", }, "isDisabled": Object { "defaultValue": false, - "description": "Sets the button to a disabled state.", + "description": " +Sets the button to a disabled state.", "name": "isDisabled", "table": Object { "category": "inputs", @@ -203,7 +207,7 @@ Public value.", }, "type": Object { "required": true, - "summary": "[]", + "summary": "T[]", }, }, "type": Object { @@ -212,7 +216,11 @@ Public value.", }, "label": Object { "defaultValue": undefined, - "description": "The inner text of the button.", + "description": " + +The inner text of the button. + +", "name": "label", "table": Object { "category": "inputs", @@ -371,7 +379,8 @@ A public method using an interface.", }, "size": Object { "defaultValue": "medium", - "description": "Size of the button.", + "description": " +Size of the button.", "name": "size", "table": Object { "category": "inputs", @@ -389,7 +398,8 @@ A public method using an interface.", }, "someDataObject": Object { "defaultValue": undefined, - "description": "Specifies some arbitrary object", + "description": " +Specifies some arbitrary object", "name": "someDataObject", "table": Object { "category": "inputs", @@ -407,7 +417,11 @@ A public method using an interface.", }, "somethingYouShouldNotUse": Object { "defaultValue": false, - "description": "Some input you shouldn't use.", + "description": " + +Some input you shouldn't use. + +", "name": "somethingYouShouldNotUse", "table": Object { "category": "inputs", diff --git a/app/angular/src/client/docs/__testfixtures__/doc-button/compodoc-posix.snapshot b/app/angular/src/client/docs/__testfixtures__/doc-button/compodoc-posix.snapshot new file mode 100644 index 000000000000..dbb2d4c08edf --- /dev/null +++ b/app/angular/src/client/docs/__testfixtures__/doc-button/compodoc-posix.snapshot @@ -0,0 +1,1326 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`angular component properties doc-button 1`] = ` +Object { + "classes": Array [], + "components": Array [ + Object { + "accessors": Object { + "inputValue": Object { + "getSignature": Object { + "description": "

Getter for inputValue.

+", + "line": 115, + "name": "inputValue", + "rawdescription": " +Getter for \`inputValue\`.", + "returnType": "", + "type": "", + }, + "name": "inputValue", + "setSignature": Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "value", + "type": "string", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "

Setter for inputValue that is also an @Input.

+", + "jsdoctags": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "value", + "tagName": Object { + "text": "param", + }, + "type": "string", + }, + ], + "line": 110, + "name": "inputValue", + "rawdescription": " +Setter for \`inputValue\` that is also an \`@Input\`.", + "returnType": "void", + "type": "void", + }, + }, + "item": Object { + "name": "item", + "setSignature": Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "item", + "type": "T[]", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "jsdoctags": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "item", + "tagName": Object { + "text": "param", + }, + "type": "T[]", + }, + ], + "line": 195, + "name": "item", + "returnType": "void", + "type": "void", + }, + }, + "value": Object { + "getSignature": Object { + "description": "

Get the private value.

+", + "line": 154, + "name": "value", + "rawdescription": " +Get the private value.", + "returnType": "string | number", + "type": "", + }, + "name": "value", + "setSignature": Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "value", + "type": "string | number", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "

Set the private value.

+", + "jsdoctags": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "value", + "tagName": Object { + "text": "param", + }, + "type": "string | number", + }, + ], + "line": 149, + "name": "value", + "rawdescription": " +Set the private value.", + "returnType": "void", + "type": "void", + }, + }, + }, + "assetsDirs": Array [], + "deprecated": false, + "deprecationMessage": "", + "description": "

This is a simple button that demonstrates various JSDoc handling in Storybook Docs for Angular.

+

It supports markdown, so you can embed formatted text, +like bold, italic, and inline code.

+
+

How you like dem apples?! It's never been easier to document all your components.

+
+", + "encapsulation": Array [], + "entryComponents": Array [], + "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "hostBindings": Array [ + Object { + "decorators": Array [], + "defaultValue": "false", + "deprecated": false, + "deprecationMessage": "", + "line": 124, + "name": "class.focused", + "type": "boolean", + }, + ], + "hostListeners": Array [ + Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "btn", + "type": "", + }, + ], + "argsDecorator": Array [ + "$event.target", + ], + "deprecated": false, + "deprecationMessage": "", + "line": 120, + "name": "click", + }, + ], + "id": "component-InputComponent-d145da25329b094ee29610c45a9e46387cb39eddb2a67b4c9fadb84bcec76eacd60d131e48d98b2ee5725dedd25f2eb299b704e8e0a34307d6e84f6e57d57044", + "inputs": Array [], + "inputsClass": Array [ + Object { + "decorators": Array [], + "deprecated": false, + "deprecationMessage": "", + "description": "

Specify the accent-type of the button

+", + "line": 56, + "name": "accent", + "rawdescription": " +Specify the accent-type of the button", + "type": "ButtonAccent", + }, + Object { + "decorators": Array [], + "defaultValue": "'secondary'", + "deprecated": false, + "deprecationMessage": "", + "description": "

Appearance style of the button.

+", + "line": 52, + "name": "appearance", + "rawdescription": " +Appearance style of the button.", + "type": "\\"primary\\" | \\"secondary\\"", + }, + Object { + "decorators": Array [], + "deprecated": false, + "deprecationMessage": "", + "description": "

Setter for inputValue that is also an @Input.

+", + "line": 110, + "name": "inputValue", + "rawdescription": " +Setter for \`inputValue\` that is also an \`@Input\`.", + "type": "string", + }, + Object { + "decorators": Array [], + "defaultValue": "false", + "deprecated": false, + "deprecationMessage": "", + "description": "

Sets the button to a disabled state.

+", + "line": 60, + "name": "isDisabled", + "rawdescription": " +Sets the button to a disabled state.", + "type": "boolean", + }, + Object { + "decorators": Array [], + "deprecated": false, + "deprecationMessage": "", + "line": 195, + "name": "item", + "type": "T[]", + }, + Object { + "decorators": Array [], + "deprecated": false, + "deprecationMessage": "", + "description": "

The inner text of the button.

+", + "jsdoctags": Array [ + Object { + "comment": "", + "end": 1525, + "flags": 4227072, + "kind": 325, + "modifierFlagsCache": 0, + "pos": 1512, + "tagName": Object { + "end": 1521, + "escapedText": "required", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 1513, + "transformFlags": 0, + }, + "transformFlags": 0, + }, + ], + "line": 68, + "name": "label", + "rawdescription": " + +The inner text of the button. + +", + "type": "string", + }, + Object { + "decorators": Array [], + "deprecated": false, + "deprecationMessage": "", + "line": 192, + "name": "showKeyAlias", + "type": "", + }, + Object { + "decorators": Array [], + "defaultValue": "'medium'", + "deprecated": false, + "deprecationMessage": "", + "description": "

Size of the button.

+", + "line": 72, + "name": "size", + "rawdescription": " +Size of the button.", + "type": "ButtonSize", + }, + Object { + "decorators": Array [], + "deprecated": false, + "deprecationMessage": "", + "description": "

Specifies some arbitrary object

+", + "line": 75, + "name": "someDataObject", + "rawdescription": " +Specifies some arbitrary object", + "type": "ISomeInterface", + }, + Object { + "decorators": Array [], + "defaultValue": "false", + "deprecated": true, + "deprecationMessage": "", + "description": "

Some input you shouldn't use.

+", + "jsdoctags": Array [ + Object { + "comment": "", + "end": 1802, + "flags": 4227072, + "kind": 329, + "modifierFlagsCache": 0, + "pos": 1787, + "tagName": Object { + "end": 1798, + "escapedText": "deprecated", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 1788, + "transformFlags": 0, + }, + "transformFlags": 0, + }, + ], + "line": 83, + "name": "somethingYouShouldNotUse", + "rawdescription": " + +Some input you shouldn't use. + +", + "type": "boolean", + }, + ], + "methodsClass": Array [ + Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "x", + "type": "number", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "y", + "type": "string | number", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "

An internal calculation method which adds x and y together.

+", + "jsdoctags": Array [ + Object { + "comment": "

Some number you'd like to use.

+", + "deprecated": false, + "deprecationMessage": "", + "name": Object { + "end": 3518, + "escapedText": "x", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 3517, + "transformFlags": 0, + }, + "tagName": Object { + "end": 3516, + "escapedText": "param", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 3511, + "transformFlags": 0, + }, + "type": "number", + }, + Object { + "comment": "

Some other number or string you'd like to use, will have parseInt() applied before calculation.

+", + "deprecated": false, + "deprecationMessage": "", + "name": Object { + "end": 3563, + "escapedText": "y", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 3562, + "transformFlags": 0, + }, + "tagName": Object { + "end": 3561, + "escapedText": "param", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 3556, + "transformFlags": 0, + }, + "type": "string | number", + }, + ], + "line": 164, + "modifierKind": Array [ + 123, + ], + "name": "calc", + "optional": false, + "rawdescription": " + +An internal calculation method which adds \`x\` and \`y\` together. + +", + "returnType": "number", + "typeParameters": Array [], + }, + Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "btn", + "type": "", + }, + ], + "decorators": Array [ + Object { + "name": "HostListener", + "stringifiedArguments": "'click', ['$event.target']", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "jsdoctags": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "btn", + "tagName": Object { + "text": "param", + }, + "type": "", + }, + ], + "line": 120, + "name": "onClickListener", + "optional": false, + "returnType": "void", + "typeParameters": Array [], + }, + Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "password", + "type": "string", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "

A private method.

+", + "jsdoctags": Array [ + Object { + "comment": "

Some password.

+", + "deprecated": false, + "deprecationMessage": "", + "name": Object { + "end": 4079, + "escapedText": "password", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 4071, + "transformFlags": 0, + }, + "tagName": Object { + "end": 4070, + "escapedText": "param", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 4065, + "transformFlags": 0, + }, + "type": "string", + }, + ], + "line": 187, + "modifierKind": Array [ + 121, + ], + "name": "privateMethod", + "optional": false, + "rawdescription": " + +A private method. + +", + "returnType": "void", + "typeParameters": Array [], + }, + Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "id", + "optional": true, + "type": "number", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "

A protected method.

+", + "jsdoctags": Array [ + Object { + "comment": "

Some id.

+", + "deprecated": false, + "deprecationMessage": "", + "name": Object { + "end": 3938, + "escapedText": "id", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 3936, + "transformFlags": 0, + }, + "optional": true, + "tagName": Object { + "end": 3935, + "escapedText": "param", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 3930, + "transformFlags": 0, + }, + "type": "number", + }, + ], + "line": 178, + "modifierKind": Array [ + 122, + ], + "name": "protectedMethod", + "optional": false, + "rawdescription": " + +A protected method. + +", + "returnType": "void", + "typeParameters": Array [], + }, + Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "things", + "type": "ISomeInterface", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "

A public method using an interface.

+", + "jsdoctags": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "things", + "tagName": Object { + "text": "param", + }, + "type": "ISomeInterface", + }, + ], + "line": 169, + "modifierKind": Array [ + 123, + ], + "name": "publicMethod", + "optional": false, + "rawdescription": " +A public method using an interface.", + "returnType": "void", + "typeParameters": Array [], + }, + ], + "name": "InputComponent", + "outputs": Array [], + "outputsClass": Array [ + Object { + "defaultValue": "new EventEmitter()", + "deprecated": false, + "deprecationMessage": "", + "description": "

Handler to be called when the button is clicked by a user.

+

Will also block the emission of the event if isDisabled is true.

+", + "line": 91, + "name": "onClick", + "rawdescription": " + +Handler to be called when the button is clicked by a user. + +Will also block the emission of the event if \`isDisabled\` is true. +", + "type": "EventEmitter", + }, + ], + "propertiesClass": Array [ + Object { + "defaultValue": "'some value'", + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 106, + "modifierKind": Array [ + 121, + ], + "name": "_inputValue", + "optional": false, + "type": "string", + }, + Object { + "defaultValue": "'Private hello'", + "deprecated": false, + "deprecationMessage": "", + "description": "

Private value.

+", + "line": 146, + "modifierKind": Array [ + 121, + ], + "name": "_value", + "optional": false, + "rawdescription": " +Private value.", + "type": "string", + }, + Object { + "decorators": Array [ + Object { + "name": "ViewChild", + "stringifiedArguments": "'buttonRef', {static: false}", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 48, + "name": "buttonRef", + "optional": false, + "type": "ElementRef", + }, + Object { + "decorators": Array [ + Object { + "name": "HostBinding", + "stringifiedArguments": "'class.focused'", + }, + ], + "defaultValue": "false", + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 124, + "name": "focus", + "optional": false, + "type": "", + }, + Object { + "defaultValue": "'Public hello'", + "deprecated": false, + "deprecationMessage": "", + "description": "

Public value.

+", + "line": 143, + "modifierKind": Array [ + 123, + ], + "name": "internalProperty", + "optional": false, + "rawdescription": " +Public value.", + "type": "string", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 199, + "modifierKind": Array [ + 123, + ], + "name": "processedItem", + "optional": false, + "type": "T[]", + }, + ], + "providers": Array [], + "rawdescription": " + +This is a simple button that demonstrates various JSDoc handling in Storybook Docs for Angular. + +It supports [markdown](https://en.wikipedia.org/wiki/Markdown), so you can embed formatted text, +like **bold**, _italic_, and \`inline code\`. + +> How you like dem apples?! It's never been easier to document all your components. + +", + "selector": "doc-button", + "sourceCode": "import { + Component, + ElementRef, + EventEmitter, + HostBinding, + HostListener, + Input, + Output, + ViewChild, +} from '@angular/core'; + +export const exportedConstant = 'An exported constant'; + +export type ButtonSize = 'small' | 'medium' | 'large' | 'xlarge'; + +export enum ButtonAccent { + 'Normal' = 'Normal', + 'High' = 'High', +} + +export interface ISomeInterface { + one: string; + two: boolean; + three: any[]; +} + +/** + * This is a simple button that demonstrates various JSDoc handling in Storybook Docs for Angular. + * + * It supports [markdown](https://en.wikipedia.org/wiki/Markdown), so you can embed formatted text, + * like **bold**, _italic_, and \`inline code\`. + * + * > How you like dem apples?! It's never been easier to document all your components. + * + * @string Hello world + * @link [Example](http://example.com) + * @code \`ThingThing\` + * @html aaa + */ +@Component({ + selector: 'doc-button', + template: '', +}) +export class InputComponent { + @ViewChild('buttonRef', { static: false }) buttonRef: ElementRef; + + /** Appearance style of the button. */ + @Input() + public appearance: 'primary' | 'secondary' = 'secondary'; + + /** Specify the accent-type of the button */ + @Input() + public accent: ButtonAccent; + + /** Sets the button to a disabled state. */ + @Input() + public isDisabled = false; + + /** + * The inner text of the button. + * + * @required + */ + @Input() + public label: string; + + /** Size of the button. */ + @Input() + public size?: ButtonSize = 'medium'; + + /** Specifies some arbitrary object */ + @Input() public someDataObject: ISomeInterface; + + /** + * Some input you shouldn't use. + * + * @deprecated + */ + @Input() + public somethingYouShouldNotUse = false; + + /** + * Handler to be called when the button is clicked by a user. + * + * Will also block the emission of the event if \`isDisabled\` is true. + */ + @Output() + public onClick = new EventEmitter(); + + /** + * This is an internal method that we don't want to document and have added the \`ignore\` annotation to. + * + * @ignore + */ + public handleClick(event: Event) { + event.stopPropagation(); + + if (!this.isDisabled) { + this.onClick.emit(event); + } + } + + private _inputValue = 'some value'; + + /** Setter for \`inputValue\` that is also an \`@Input\`. */ + @Input() + public set inputValue(value: string) { + this._inputValue = value; + } + + /** Getter for \`inputValue\`. */ + public get inputValue() { + return this._inputValue; + } + + @HostListener('click', ['$event.target']) + onClickListener(btn) { + console.log('button', btn); + } + + @HostBinding('class.focused') focus = false; + + /** + * Returns all the CSS classes for the button. + * + * @ignore + */ + public get classes(): string[] { + return [this.appearance, this.size] + .filter((_class) => !!_class) + .map((_class) => \`btn-\${_class}\`); + } + + /** + * @ignore + */ + public ignoredProperty = 'Ignore me'; + + /** Public value. */ + public internalProperty = 'Public hello'; + + /** Private value. */ + private _value = 'Private hello'; + + /** Set the private value. */ + public set value(value: string | number) { + this._value = \`\${value}\`; + } + + /** Get the private value. */ + public get value(): string | number { + return this._value; + } + + /** + * An internal calculation method which adds \`x\` and \`y\` together. + * + * @param x Some number you'd like to use. + * @param y Some other number or string you'd like to use, will have \`parseInt()\` applied before calculation. + */ + public calc(x: number, y: string | number): number { + return x + parseInt(\`\${y}\`, 10); + } + + /** A public method using an interface. */ + public publicMethod(things: ISomeInterface) { + console.log(things); + } + + /** + * A protected method. + * + * @param id Some \`id\`. + */ + protected protectedMethod(id?: number) { + console.log(id); + } + + /** + * A private method. + * + * @param password Some \`password\`. + */ + private privateMethod(password: string) { + console.log(password); + } + + @Input('showKeyAlias') + public showKey: keyof T; + + @Input() + public set item(item: T[]) { + this.processedItem = item; + } + + public processedItem: T[]; +} +", + "styleUrls": Array [], + "styleUrlsData": "", + "styles": Array [], + "stylesData": "", + "template": "", + "templateUrl": Array [], + "type": "component", + "viewProviders": Array [], + }, + ], + "coverage": Object { + "count": 21, + "files": Array [ + Object { + "coverageCount": "16/25", + "coveragePercent": 64, + "filePath": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "linktype": "component", + "name": "InputComponent", + "status": "good", + "type": "component", + }, + Object { + "coverageCount": "0/4", + "coveragePercent": 0, + "filePath": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "linktype": "interface", + "name": "ISomeInterface", + "status": "low", + "type": "interface", + }, + Object { + "coverageCount": "0/1", + "coveragePercent": 0, + "filePath": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "linksubtype": "variable", + "linktype": "miscellaneous", + "name": "exportedConstant", + "status": "low", + "type": "variable", + }, + ], + "status": "low", + }, + "directives": Array [], + "guards": Array [], + "injectables": Array [], + "interceptors": Array [], + "interfaces": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "id": "interface-ISomeInterface-d145da25329b094ee29610c45a9e46387cb39eddb2a67b4c9fadb84bcec76eacd60d131e48d98b2ee5725dedd25f2eb299b704e8e0a34307d6e84f6e57d57044", + "indexSignatures": Array [], + "kind": 165, + "methods": Array [], + "name": "ISomeInterface", + "properties": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 25, + "name": "one", + "optional": false, + "type": "string", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 27, + "name": "three", + "optional": false, + "type": "any[]", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 26, + "name": "two", + "optional": false, + "type": "boolean", + }, + ], + "sourceCode": "import { + Component, + ElementRef, + EventEmitter, + HostBinding, + HostListener, + Input, + Output, + ViewChild, +} from '@angular/core'; + +export const exportedConstant = 'An exported constant'; + +export type ButtonSize = 'small' | 'medium' | 'large' | 'xlarge'; + +export enum ButtonAccent { + 'Normal' = 'Normal', + 'High' = 'High', +} + +export interface ISomeInterface { + one: string; + two: boolean; + three: any[]; +} + +/** + * This is a simple button that demonstrates various JSDoc handling in Storybook Docs for Angular. + * + * It supports [markdown](https://en.wikipedia.org/wiki/Markdown), so you can embed formatted text, + * like **bold**, _italic_, and \`inline code\`. + * + * > How you like dem apples?! It's never been easier to document all your components. + * + * @string Hello world + * @link [Example](http://example.com) + * @code \`ThingThing\` + * @html aaa + */ +@Component({ + selector: 'doc-button', + template: '', +}) +export class InputComponent { + @ViewChild('buttonRef', { static: false }) buttonRef: ElementRef; + + /** Appearance style of the button. */ + @Input() + public appearance: 'primary' | 'secondary' = 'secondary'; + + /** Specify the accent-type of the button */ + @Input() + public accent: ButtonAccent; + + /** Sets the button to a disabled state. */ + @Input() + public isDisabled = false; + + /** + * The inner text of the button. + * + * @required + */ + @Input() + public label: string; + + /** Size of the button. */ + @Input() + public size?: ButtonSize = 'medium'; + + /** Specifies some arbitrary object */ + @Input() public someDataObject: ISomeInterface; + + /** + * Some input you shouldn't use. + * + * @deprecated + */ + @Input() + public somethingYouShouldNotUse = false; + + /** + * Handler to be called when the button is clicked by a user. + * + * Will also block the emission of the event if \`isDisabled\` is true. + */ + @Output() + public onClick = new EventEmitter(); + + /** + * This is an internal method that we don't want to document and have added the \`ignore\` annotation to. + * + * @ignore + */ + public handleClick(event: Event) { + event.stopPropagation(); + + if (!this.isDisabled) { + this.onClick.emit(event); + } + } + + private _inputValue = 'some value'; + + /** Setter for \`inputValue\` that is also an \`@Input\`. */ + @Input() + public set inputValue(value: string) { + this._inputValue = value; + } + + /** Getter for \`inputValue\`. */ + public get inputValue() { + return this._inputValue; + } + + @HostListener('click', ['$event.target']) + onClickListener(btn) { + console.log('button', btn); + } + + @HostBinding('class.focused') focus = false; + + /** + * Returns all the CSS classes for the button. + * + * @ignore + */ + public get classes(): string[] { + return [this.appearance, this.size] + .filter((_class) => !!_class) + .map((_class) => \`btn-\${_class}\`); + } + + /** + * @ignore + */ + public ignoredProperty = 'Ignore me'; + + /** Public value. */ + public internalProperty = 'Public hello'; + + /** Private value. */ + private _value = 'Private hello'; + + /** Set the private value. */ + public set value(value: string | number) { + this._value = \`\${value}\`; + } + + /** Get the private value. */ + public get value(): string | number { + return this._value; + } + + /** + * An internal calculation method which adds \`x\` and \`y\` together. + * + * @param x Some number you'd like to use. + * @param y Some other number or string you'd like to use, will have \`parseInt()\` applied before calculation. + */ + public calc(x: number, y: string | number): number { + return x + parseInt(\`\${y}\`, 10); + } + + /** A public method using an interface. */ + public publicMethod(things: ISomeInterface) { + console.log(things); + } + + /** + * A protected method. + * + * @param id Some \`id\`. + */ + protected protectedMethod(id?: number) { + console.log(id); + } + + /** + * A private method. + * + * @param password Some \`password\`. + */ + private privateMethod(password: string) { + console.log(password); + } + + @Input('showKeyAlias') + public showKey: keyof T; + + @Input() + public set item(item: T[]) { + this.processedItem = item; + } + + public processedItem: T[]; +} +", + "type": "interface", + }, + ], + "miscellaneous": Object { + "enumerations": Array [ + Object { + "childs": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "Normal", + "value": "Normal", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "High", + "value": "High", + }, + ], + "ctype": "miscellaneous", + "deprecated": false, + "deprecationMessage": "", + "description": "", + "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "name": "ButtonAccent", + "subtype": "enum", + }, + ], + "functions": Array [], + "groupedEnumerations": Object { + "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts": Array [ + Object { + "childs": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "Normal", + "value": "Normal", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "High", + "value": "High", + }, + ], + "ctype": "miscellaneous", + "deprecated": false, + "deprecationMessage": "", + "description": "", + "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "name": "ButtonAccent", + "subtype": "enum", + }, + ], + }, + "groupedFunctions": Object {}, + "groupedTypeAliases": Object { + "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts": Array [ + Object { + "ctype": "miscellaneous", + "deprecated": false, + "deprecationMessage": "", + "description": "", + "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "kind": 186, + "name": "ButtonSize", + "rawtype": "\\"small\\" | \\"medium\\" | \\"large\\" | \\"xlarge\\"", + "subtype": "typealias", + }, + ], + }, + "groupedVariables": Object { + "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts": Array [ + Object { + "ctype": "miscellaneous", + "defaultValue": "'An exported constant'", + "deprecated": false, + "deprecationMessage": "", + "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "name": "exportedConstant", + "subtype": "variable", + "type": "string", + }, + ], + }, + "typealiases": Array [ + Object { + "ctype": "miscellaneous", + "deprecated": false, + "deprecationMessage": "", + "description": "", + "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "kind": 186, + "name": "ButtonSize", + "rawtype": "\\"small\\" | \\"medium\\" | \\"large\\" | \\"xlarge\\"", + "subtype": "typealias", + }, + ], + "variables": Array [ + Object { + "ctype": "miscellaneous", + "defaultValue": "'An exported constant'", + "deprecated": false, + "deprecationMessage": "", + "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "name": "exportedConstant", + "subtype": "variable", + "type": "string", + }, + ], + }, + "modules": Array [], + "pipes": Array [], + "routes": Array [], +} +`; diff --git a/app/angular/src/client/docs/__testfixtures__/doc-button/compodoc-undefined.snapshot b/app/angular/src/client/docs/__testfixtures__/doc-button/compodoc-undefined.snapshot new file mode 100644 index 000000000000..1bddf9b75503 --- /dev/null +++ b/app/angular/src/client/docs/__testfixtures__/doc-button/compodoc-undefined.snapshot @@ -0,0 +1,1326 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`angular component properties doc-button 1`] = ` +Object { + "classes": Array [], + "components": Array [ + Object { + "accessors": Object { + "inputValue": Object { + "getSignature": Object { + "description": "

Getter for inputValue.

+", + "line": 115, + "name": "inputValue", + "rawdescription": " +Getter for \`inputValue\`.", + "returnType": "", + "type": "", + }, + "name": "inputValue", + "setSignature": Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "value", + "type": "string", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "

Setter for inputValue that is also an @Input.

+", + "jsdoctags": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "value", + "tagName": Object { + "text": "param", + }, + "type": "string", + }, + ], + "line": 110, + "name": "inputValue", + "rawdescription": " +Setter for \`inputValue\` that is also an \`@Input\`.", + "returnType": "void", + "type": "void", + }, + }, + "item": Object { + "name": "item", + "setSignature": Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "item", + "type": "T[]", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "jsdoctags": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "item", + "tagName": Object { + "text": "param", + }, + "type": "T[]", + }, + ], + "line": 195, + "name": "item", + "returnType": "void", + "type": "void", + }, + }, + "value": Object { + "getSignature": Object { + "description": "

Get the private value.

+", + "line": 154, + "name": "value", + "rawdescription": " +Get the private value.", + "returnType": "string | number", + "type": "", + }, + "name": "value", + "setSignature": Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "value", + "type": "string | number", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "

Set the private value.

+", + "jsdoctags": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "value", + "tagName": Object { + "text": "param", + }, + "type": "string | number", + }, + ], + "line": 149, + "name": "value", + "rawdescription": " +Set the private value.", + "returnType": "void", + "type": "void", + }, + }, + }, + "assetsDirs": Array [], + "deprecated": false, + "deprecationMessage": "", + "description": "

This is a simple button that demonstrates various JSDoc handling in Storybook Docs for Angular.

+

It supports markdown, so you can embed formatted text, +like bold, italic, and inline code.

+
+

How you like dem apples?! It's never been easier to document all your components.

+
+", + "encapsulation": Array [], + "entryComponents": Array [], + "file": "app/angular/src/client/docs/__testfixtures__/doc-button/input.ts", + "hostBindings": Array [ + Object { + "decorators": Array [], + "defaultValue": "false", + "deprecated": false, + "deprecationMessage": "", + "line": 124, + "name": "class.focused", + "type": "boolean", + }, + ], + "hostListeners": Array [ + Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "btn", + "type": "", + }, + ], + "argsDecorator": Array [ + "$event.target", + ], + "deprecated": false, + "deprecationMessage": "", + "line": 120, + "name": "click", + }, + ], + "id": "component-InputComponent-d145da25329b094ee29610c45a9e46387cb39eddb2a67b4c9fadb84bcec76eacd60d131e48d98b2ee5725dedd25f2eb299b704e8e0a34307d6e84f6e57d57044", + "inputs": Array [], + "inputsClass": Array [ + Object { + "decorators": Array [], + "deprecated": false, + "deprecationMessage": "", + "description": "

Specify the accent-type of the button

+", + "line": 56, + "name": "accent", + "rawdescription": " +Specify the accent-type of the button", + "type": "ButtonAccent", + }, + Object { + "decorators": Array [], + "defaultValue": "'secondary'", + "deprecated": false, + "deprecationMessage": "", + "description": "

Appearance style of the button.

+", + "line": 52, + "name": "appearance", + "rawdescription": " +Appearance style of the button.", + "type": "\\"primary\\" | \\"secondary\\"", + }, + Object { + "decorators": Array [], + "deprecated": false, + "deprecationMessage": "", + "description": "

Setter for inputValue that is also an @Input.

+", + "line": 110, + "name": "inputValue", + "rawdescription": " +Setter for \`inputValue\` that is also an \`@Input\`.", + "type": "string", + }, + Object { + "decorators": Array [], + "defaultValue": "false", + "deprecated": false, + "deprecationMessage": "", + "description": "

Sets the button to a disabled state.

+", + "line": 60, + "name": "isDisabled", + "rawdescription": " +Sets the button to a disabled state.", + "type": "boolean", + }, + Object { + "decorators": Array [], + "deprecated": false, + "deprecationMessage": "", + "line": 195, + "name": "item", + "type": "T[]", + }, + Object { + "decorators": Array [], + "deprecated": false, + "deprecationMessage": "", + "description": "

The inner text of the button.

+", + "jsdoctags": Array [ + Object { + "comment": "", + "end": 1525, + "flags": 4227072, + "kind": 325, + "modifierFlagsCache": 0, + "pos": 1512, + "tagName": Object { + "end": 1521, + "escapedText": "required", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 1513, + "transformFlags": 0, + }, + "transformFlags": 0, + }, + ], + "line": 68, + "name": "label", + "rawdescription": " + +The inner text of the button. + +", + "type": "string", + }, + Object { + "decorators": Array [], + "deprecated": false, + "deprecationMessage": "", + "line": 192, + "name": "showKeyAlias", + "type": "", + }, + Object { + "decorators": Array [], + "defaultValue": "'medium'", + "deprecated": false, + "deprecationMessage": "", + "description": "

Size of the button.

+", + "line": 72, + "name": "size", + "rawdescription": " +Size of the button.", + "type": "ButtonSize", + }, + Object { + "decorators": Array [], + "deprecated": false, + "deprecationMessage": "", + "description": "

Specifies some arbitrary object

+", + "line": 75, + "name": "someDataObject", + "rawdescription": " +Specifies some arbitrary object", + "type": "ISomeInterface", + }, + Object { + "decorators": Array [], + "defaultValue": "false", + "deprecated": true, + "deprecationMessage": "", + "description": "

Some input you shouldn't use.

+", + "jsdoctags": Array [ + Object { + "comment": "", + "end": 1802, + "flags": 4227072, + "kind": 329, + "modifierFlagsCache": 0, + "pos": 1787, + "tagName": Object { + "end": 1798, + "escapedText": "deprecated", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 1788, + "transformFlags": 0, + }, + "transformFlags": 0, + }, + ], + "line": 83, + "name": "somethingYouShouldNotUse", + "rawdescription": " + +Some input you shouldn't use. + +", + "type": "boolean", + }, + ], + "methodsClass": Array [ + Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "x", + "type": "number", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "y", + "type": "string | number", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "

An internal calculation method which adds x and y together.

+", + "jsdoctags": Array [ + Object { + "comment": "

Some number you'd like to use.

+", + "deprecated": false, + "deprecationMessage": "", + "name": Object { + "end": 3518, + "escapedText": "x", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 3517, + "transformFlags": 0, + }, + "tagName": Object { + "end": 3516, + "escapedText": "param", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 3511, + "transformFlags": 0, + }, + "type": "number", + }, + Object { + "comment": "

Some other number or string you'd like to use, will have parseInt() applied before calculation.

+", + "deprecated": false, + "deprecationMessage": "", + "name": Object { + "end": 3563, + "escapedText": "y", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 3562, + "transformFlags": 0, + }, + "tagName": Object { + "end": 3561, + "escapedText": "param", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 3556, + "transformFlags": 0, + }, + "type": "string | number", + }, + ], + "line": 164, + "modifierKind": Array [ + 123, + ], + "name": "calc", + "optional": false, + "rawdescription": " + +An internal calculation method which adds \`x\` and \`y\` together. + +", + "returnType": "number", + "typeParameters": Array [], + }, + Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "btn", + "type": "", + }, + ], + "decorators": Array [ + Object { + "name": "HostListener", + "stringifiedArguments": "'click', ['$event.target']", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "jsdoctags": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "btn", + "tagName": Object { + "text": "param", + }, + "type": "", + }, + ], + "line": 120, + "name": "onClickListener", + "optional": false, + "returnType": "void", + "typeParameters": Array [], + }, + Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "password", + "type": "string", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "

A private method.

+", + "jsdoctags": Array [ + Object { + "comment": "

Some password.

+", + "deprecated": false, + "deprecationMessage": "", + "name": Object { + "end": 4079, + "escapedText": "password", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 4071, + "transformFlags": 0, + }, + "tagName": Object { + "end": 4070, + "escapedText": "param", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 4065, + "transformFlags": 0, + }, + "type": "string", + }, + ], + "line": 187, + "modifierKind": Array [ + 121, + ], + "name": "privateMethod", + "optional": false, + "rawdescription": " + +A private method. + +", + "returnType": "void", + "typeParameters": Array [], + }, + Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "id", + "optional": true, + "type": "number", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "

A protected method.

+", + "jsdoctags": Array [ + Object { + "comment": "

Some id.

+", + "deprecated": false, + "deprecationMessage": "", + "name": Object { + "end": 3938, + "escapedText": "id", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 3936, + "transformFlags": 0, + }, + "optional": true, + "tagName": Object { + "end": 3935, + "escapedText": "param", + "flags": 4227072, + "kind": 79, + "modifierFlagsCache": 0, + "pos": 3930, + "transformFlags": 0, + }, + "type": "number", + }, + ], + "line": 178, + "modifierKind": Array [ + 122, + ], + "name": "protectedMethod", + "optional": false, + "rawdescription": " + +A protected method. + +", + "returnType": "void", + "typeParameters": Array [], + }, + Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "things", + "type": "ISomeInterface", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "

A public method using an interface.

+", + "jsdoctags": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "things", + "tagName": Object { + "text": "param", + }, + "type": "ISomeInterface", + }, + ], + "line": 169, + "modifierKind": Array [ + 123, + ], + "name": "publicMethod", + "optional": false, + "rawdescription": " +A public method using an interface.", + "returnType": "void", + "typeParameters": Array [], + }, + ], + "name": "InputComponent", + "outputs": Array [], + "outputsClass": Array [ + Object { + "defaultValue": "new EventEmitter()", + "deprecated": false, + "deprecationMessage": "", + "description": "

Handler to be called when the button is clicked by a user.

+

Will also block the emission of the event if isDisabled is true.

+", + "line": 91, + "name": "onClick", + "rawdescription": " + +Handler to be called when the button is clicked by a user. + +Will also block the emission of the event if \`isDisabled\` is true. +", + "type": "EventEmitter", + }, + ], + "propertiesClass": Array [ + Object { + "defaultValue": "'some value'", + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 106, + "modifierKind": Array [ + 121, + ], + "name": "_inputValue", + "optional": false, + "type": "string", + }, + Object { + "defaultValue": "'Private hello'", + "deprecated": false, + "deprecationMessage": "", + "description": "

Private value.

+", + "line": 146, + "modifierKind": Array [ + 121, + ], + "name": "_value", + "optional": false, + "rawdescription": " +Private value.", + "type": "string", + }, + Object { + "decorators": Array [ + Object { + "name": "ViewChild", + "stringifiedArguments": "'buttonRef', {static: false}", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 48, + "name": "buttonRef", + "optional": false, + "type": "ElementRef", + }, + Object { + "decorators": Array [ + Object { + "name": "HostBinding", + "stringifiedArguments": "'class.focused'", + }, + ], + "defaultValue": "false", + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 124, + "name": "focus", + "optional": false, + "type": "", + }, + Object { + "defaultValue": "'Public hello'", + "deprecated": false, + "deprecationMessage": "", + "description": "

Public value.

+", + "line": 143, + "modifierKind": Array [ + 123, + ], + "name": "internalProperty", + "optional": false, + "rawdescription": " +Public value.", + "type": "string", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 199, + "modifierKind": Array [ + 123, + ], + "name": "processedItem", + "optional": false, + "type": "T[]", + }, + ], + "providers": Array [], + "rawdescription": " + +This is a simple button that demonstrates various JSDoc handling in Storybook Docs for Angular. + +It supports [markdown](https://en.wikipedia.org/wiki/Markdown), so you can embed formatted text, +like **bold**, _italic_, and \`inline code\`. + +> How you like dem apples?! It's never been easier to document all your components. + +", + "selector": "doc-button", + "sourceCode": "import { + Component, + ElementRef, + EventEmitter, + HostBinding, + HostListener, + Input, + Output, + ViewChild, +} from '@angular/core'; + +export const exportedConstant = 'An exported constant'; + +export type ButtonSize = 'small' | 'medium' | 'large' | 'xlarge'; + +export enum ButtonAccent { + 'Normal' = 'Normal', + 'High' = 'High', +} + +export interface ISomeInterface { + one: string; + two: boolean; + three: any[]; +} + +/** + * This is a simple button that demonstrates various JSDoc handling in Storybook Docs for Angular. + * + * It supports [markdown](https://en.wikipedia.org/wiki/Markdown), so you can embed formatted text, + * like **bold**, _italic_, and \`inline code\`. + * + * > How you like dem apples?! It's never been easier to document all your components. + * + * @string Hello world + * @link [Example](http://example.com) + * @code \`ThingThing\` + * @html aaa + */ +@Component({ + selector: 'doc-button', + template: '', +}) +export class InputComponent { + @ViewChild('buttonRef', { static: false }) buttonRef: ElementRef; + + /** Appearance style of the button. */ + @Input() + public appearance: 'primary' | 'secondary' = 'secondary'; + + /** Specify the accent-type of the button */ + @Input() + public accent: ButtonAccent; + + /** Sets the button to a disabled state. */ + @Input() + public isDisabled = false; + + /** + * The inner text of the button. + * + * @required + */ + @Input() + public label: string; + + /** Size of the button. */ + @Input() + public size?: ButtonSize = 'medium'; + + /** Specifies some arbitrary object */ + @Input() public someDataObject: ISomeInterface; + + /** + * Some input you shouldn't use. + * + * @deprecated + */ + @Input() + public somethingYouShouldNotUse = false; + + /** + * Handler to be called when the button is clicked by a user. + * + * Will also block the emission of the event if \`isDisabled\` is true. + */ + @Output() + public onClick = new EventEmitter(); + + /** + * This is an internal method that we don't want to document and have added the \`ignore\` annotation to. + * + * @ignore + */ + public handleClick(event: Event) { + event.stopPropagation(); + + if (!this.isDisabled) { + this.onClick.emit(event); + } + } + + private _inputValue = 'some value'; + + /** Setter for \`inputValue\` that is also an \`@Input\`. */ + @Input() + public set inputValue(value: string) { + this._inputValue = value; + } + + /** Getter for \`inputValue\`. */ + public get inputValue() { + return this._inputValue; + } + + @HostListener('click', ['$event.target']) + onClickListener(btn) { + console.log('button', btn); + } + + @HostBinding('class.focused') focus = false; + + /** + * Returns all the CSS classes for the button. + * + * @ignore + */ + public get classes(): string[] { + return [this.appearance, this.size] + .filter((_class) => !!_class) + .map((_class) => \`btn-\${_class}\`); + } + + /** + * @ignore + */ + public ignoredProperty = 'Ignore me'; + + /** Public value. */ + public internalProperty = 'Public hello'; + + /** Private value. */ + private _value = 'Private hello'; + + /** Set the private value. */ + public set value(value: string | number) { + this._value = \`\${value}\`; + } + + /** Get the private value. */ + public get value(): string | number { + return this._value; + } + + /** + * An internal calculation method which adds \`x\` and \`y\` together. + * + * @param x Some number you'd like to use. + * @param y Some other number or string you'd like to use, will have \`parseInt()\` applied before calculation. + */ + public calc(x: number, y: string | number): number { + return x + parseInt(\`\${y}\`, 10); + } + + /** A public method using an interface. */ + public publicMethod(things: ISomeInterface) { + console.log(things); + } + + /** + * A protected method. + * + * @param id Some \`id\`. + */ + protected protectedMethod(id?: number) { + console.log(id); + } + + /** + * A private method. + * + * @param password Some \`password\`. + */ + private privateMethod(password: string) { + console.log(password); + } + + @Input('showKeyAlias') + public showKey: keyof T; + + @Input() + public set item(item: T[]) { + this.processedItem = item; + } + + public processedItem: T[]; +} +", + "styleUrls": Array [], + "styleUrlsData": "", + "styles": Array [], + "stylesData": "", + "template": "", + "templateUrl": Array [], + "type": "component", + "viewProviders": Array [], + }, + ], + "coverage": Object { + "count": 21, + "files": Array [ + Object { + "coverageCount": "16/25", + "coveragePercent": 64, + "filePath": "app/angular/src/client/docs/__testfixtures__/doc-button/input.ts", + "linktype": "component", + "name": "InputComponent", + "status": "good", + "type": "component", + }, + Object { + "coverageCount": "0/4", + "coveragePercent": 0, + "filePath": "app/angular/src/client/docs/__testfixtures__/doc-button/input.ts", + "linktype": "interface", + "name": "ISomeInterface", + "status": "low", + "type": "interface", + }, + Object { + "coverageCount": "0/1", + "coveragePercent": 0, + "filePath": "app/angular/src/client/docs/__testfixtures__/doc-button/input.ts", + "linksubtype": "variable", + "linktype": "miscellaneous", + "name": "exportedConstant", + "status": "low", + "type": "variable", + }, + ], + "status": "low", + }, + "directives": Array [], + "guards": Array [], + "injectables": Array [], + "interceptors": Array [], + "interfaces": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "file": "app/angular/src/client/docs/__testfixtures__/doc-button/input.ts", + "id": "interface-ISomeInterface-d145da25329b094ee29610c45a9e46387cb39eddb2a67b4c9fadb84bcec76eacd60d131e48d98b2ee5725dedd25f2eb299b704e8e0a34307d6e84f6e57d57044", + "indexSignatures": Array [], + "kind": 165, + "methods": Array [], + "name": "ISomeInterface", + "properties": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 25, + "name": "one", + "optional": false, + "type": "string", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 27, + "name": "three", + "optional": false, + "type": "any[]", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 26, + "name": "two", + "optional": false, + "type": "boolean", + }, + ], + "sourceCode": "import { + Component, + ElementRef, + EventEmitter, + HostBinding, + HostListener, + Input, + Output, + ViewChild, +} from '@angular/core'; + +export const exportedConstant = 'An exported constant'; + +export type ButtonSize = 'small' | 'medium' | 'large' | 'xlarge'; + +export enum ButtonAccent { + 'Normal' = 'Normal', + 'High' = 'High', +} + +export interface ISomeInterface { + one: string; + two: boolean; + three: any[]; +} + +/** + * This is a simple button that demonstrates various JSDoc handling in Storybook Docs for Angular. + * + * It supports [markdown](https://en.wikipedia.org/wiki/Markdown), so you can embed formatted text, + * like **bold**, _italic_, and \`inline code\`. + * + * > How you like dem apples?! It's never been easier to document all your components. + * + * @string Hello world + * @link [Example](http://example.com) + * @code \`ThingThing\` + * @html aaa + */ +@Component({ + selector: 'doc-button', + template: '', +}) +export class InputComponent { + @ViewChild('buttonRef', { static: false }) buttonRef: ElementRef; + + /** Appearance style of the button. */ + @Input() + public appearance: 'primary' | 'secondary' = 'secondary'; + + /** Specify the accent-type of the button */ + @Input() + public accent: ButtonAccent; + + /** Sets the button to a disabled state. */ + @Input() + public isDisabled = false; + + /** + * The inner text of the button. + * + * @required + */ + @Input() + public label: string; + + /** Size of the button. */ + @Input() + public size?: ButtonSize = 'medium'; + + /** Specifies some arbitrary object */ + @Input() public someDataObject: ISomeInterface; + + /** + * Some input you shouldn't use. + * + * @deprecated + */ + @Input() + public somethingYouShouldNotUse = false; + + /** + * Handler to be called when the button is clicked by a user. + * + * Will also block the emission of the event if \`isDisabled\` is true. + */ + @Output() + public onClick = new EventEmitter(); + + /** + * This is an internal method that we don't want to document and have added the \`ignore\` annotation to. + * + * @ignore + */ + public handleClick(event: Event) { + event.stopPropagation(); + + if (!this.isDisabled) { + this.onClick.emit(event); + } + } + + private _inputValue = 'some value'; + + /** Setter for \`inputValue\` that is also an \`@Input\`. */ + @Input() + public set inputValue(value: string) { + this._inputValue = value; + } + + /** Getter for \`inputValue\`. */ + public get inputValue() { + return this._inputValue; + } + + @HostListener('click', ['$event.target']) + onClickListener(btn) { + console.log('button', btn); + } + + @HostBinding('class.focused') focus = false; + + /** + * Returns all the CSS classes for the button. + * + * @ignore + */ + public get classes(): string[] { + return [this.appearance, this.size] + .filter((_class) => !!_class) + .map((_class) => \`btn-\${_class}\`); + } + + /** + * @ignore + */ + public ignoredProperty = 'Ignore me'; + + /** Public value. */ + public internalProperty = 'Public hello'; + + /** Private value. */ + private _value = 'Private hello'; + + /** Set the private value. */ + public set value(value: string | number) { + this._value = \`\${value}\`; + } + + /** Get the private value. */ + public get value(): string | number { + return this._value; + } + + /** + * An internal calculation method which adds \`x\` and \`y\` together. + * + * @param x Some number you'd like to use. + * @param y Some other number or string you'd like to use, will have \`parseInt()\` applied before calculation. + */ + public calc(x: number, y: string | number): number { + return x + parseInt(\`\${y}\`, 10); + } + + /** A public method using an interface. */ + public publicMethod(things: ISomeInterface) { + console.log(things); + } + + /** + * A protected method. + * + * @param id Some \`id\`. + */ + protected protectedMethod(id?: number) { + console.log(id); + } + + /** + * A private method. + * + * @param password Some \`password\`. + */ + private privateMethod(password: string) { + console.log(password); + } + + @Input('showKeyAlias') + public showKey: keyof T; + + @Input() + public set item(item: T[]) { + this.processedItem = item; + } + + public processedItem: T[]; +} +", + "type": "interface", + }, + ], + "miscellaneous": Object { + "enumerations": Array [ + Object { + "childs": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "Normal", + "value": "Normal", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "High", + "value": "High", + }, + ], + "ctype": "miscellaneous", + "deprecated": false, + "deprecationMessage": "", + "description": "", + "file": "app/angular/src/client/docs/__testfixtures__/doc-button/input.ts", + "name": "ButtonAccent", + "subtype": "enum", + }, + ], + "functions": Array [], + "groupedEnumerations": Object { + "app/angular/src/client/docs/__testfixtures__/doc-button/input.ts": Array [ + Object { + "childs": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "Normal", + "value": "Normal", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "High", + "value": "High", + }, + ], + "ctype": "miscellaneous", + "deprecated": false, + "deprecationMessage": "", + "description": "", + "file": "app/angular/src/client/docs/__testfixtures__/doc-button/input.ts", + "name": "ButtonAccent", + "subtype": "enum", + }, + ], + }, + "groupedFunctions": Object {}, + "groupedTypeAliases": Object { + "app/angular/src/client/docs/__testfixtures__/doc-button/input.ts": Array [ + Object { + "ctype": "miscellaneous", + "deprecated": false, + "deprecationMessage": "", + "description": "", + "file": "app/angular/src/client/docs/__testfixtures__/doc-button/input.ts", + "kind": 186, + "name": "ButtonSize", + "rawtype": "\\"small\\" | \\"medium\\" | \\"large\\" | \\"xlarge\\"", + "subtype": "typealias", + }, + ], + }, + "groupedVariables": Object { + "app/angular/src/client/docs/__testfixtures__/doc-button/input.ts": Array [ + Object { + "ctype": "miscellaneous", + "defaultValue": "'An exported constant'", + "deprecated": false, + "deprecationMessage": "", + "file": "app/angular/src/client/docs/__testfixtures__/doc-button/input.ts", + "name": "exportedConstant", + "subtype": "variable", + "type": "string", + }, + ], + }, + "typealiases": Array [ + Object { + "ctype": "miscellaneous", + "deprecated": false, + "deprecationMessage": "", + "description": "", + "file": "app/angular/src/client/docs/__testfixtures__/doc-button/input.ts", + "kind": 186, + "name": "ButtonSize", + "rawtype": "\\"small\\" | \\"medium\\" | \\"large\\" | \\"xlarge\\"", + "subtype": "typealias", + }, + ], + "variables": Array [ + Object { + "ctype": "miscellaneous", + "defaultValue": "'An exported constant'", + "deprecated": false, + "deprecationMessage": "", + "file": "app/angular/src/client/docs/__testfixtures__/doc-button/input.ts", + "name": "exportedConstant", + "subtype": "variable", + "type": "string", + }, + ], + }, + "modules": Array [], + "pipes": Array [], + "routes": Array [], +} +`; diff --git a/app/angular/src/client/docs/__testfixtures__/doc-button/compodoc-windows.snapshot b/app/angular/src/client/docs/__testfixtures__/doc-button/compodoc-windows.snapshot new file mode 100644 index 000000000000..87b561823850 --- /dev/null +++ b/app/angular/src/client/docs/__testfixtures__/doc-button/compodoc-windows.snapshot @@ -0,0 +1,1297 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`angular component properties doc-button 1`] = ` +Object { + "classes": Array [], + "components": Array [ + Object { + "accessors": Object { + "inputValue": Object { + "getSignature": Object { + "description": "

Getter for inputValue.

+", + "line": 115, + "name": "inputValue", + "rawdescription": "Getter for \`inputValue\`.", + "returnType": "", + "type": "", + }, + "name": "inputValue", + "setSignature": Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "value", + "type": "string", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "

Setter for inputValue that is also an @Input.

+", + "jsdoctags": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "value", + "tagName": Object { + "text": "param", + }, + "type": "string", + }, + ], + "line": 110, + "name": "inputValue", + "rawdescription": "Setter for \`inputValue\` that is also an \`@Input\`.", + "returnType": "void", + "type": "void", + }, + }, + "item": Object { + "name": "item", + "setSignature": Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "item", + "type": "T[]", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "jsdoctags": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "item", + "tagName": Object { + "text": "param", + }, + "type": "T[]", + }, + ], + "line": 195, + "name": "item", + "returnType": "void", + "type": "void", + }, + }, + "value": Object { + "getSignature": Object { + "description": "

Get the private value.

+", + "line": 154, + "name": "value", + "rawdescription": "Get the private value.", + "returnType": "string | number", + "type": "", + }, + "name": "value", + "setSignature": Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "value", + "type": "string | number", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "

Set the private value.

+", + "jsdoctags": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "value", + "tagName": Object { + "text": "param", + }, + "type": "string | number", + }, + ], + "line": 149, + "name": "value", + "rawdescription": "Set the private value.", + "returnType": "void", + "type": "void", + }, + }, + }, + "assetsDirs": Array [], + "deprecated": false, + "deprecationMessage": "", + "description": "

This is a simple button that demonstrates various JSDoc handling in Storybook Docs for Angular.

+

It supports markdown, so you can embed formatted text, +like bold, italic, and inline code.

+
+

How you like dem apples?! It's never been easier to document all your components.

+
+", + "encapsulation": Array [], + "entryComponents": Array [], + "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "hostBindings": Array [ + Object { + "defaultValue": "false", + "deprecated": false, + "deprecationMessage": "", + "line": 124, + "name": "class.focused", + "type": "boolean", + }, + ], + "hostListeners": Array [ + Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "btn", + "type": "", + }, + ], + "argsDecorator": Array [ + "$event.target", + ], + "deprecated": false, + "deprecationMessage": "", + "line": 120, + "name": "click", + }, + ], + "id": "component-InputComponent-fd2eff3e4da750f1c06d4928670993b3", + "inputs": Array [], + "inputsClass": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "description": "

Specify the accent-type of the button

+", + "line": 56, + "name": "accent", + "rawdescription": "Specify the accent-type of the button", + "type": "ButtonAccent", + }, + Object { + "defaultValue": "'secondary'", + "deprecated": false, + "deprecationMessage": "", + "description": "

Appearance style of the button.

+", + "line": 52, + "name": "appearance", + "rawdescription": "Appearance style of the button.", + "type": "\\"primary\\" | \\"secondary\\"", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "description": "

Setter for inputValue that is also an @Input.

+", + "line": 110, + "name": "inputValue", + "rawdescription": "Setter for \`inputValue\` that is also an \`@Input\`.", + "type": "string", + }, + Object { + "defaultValue": "false", + "deprecated": false, + "deprecationMessage": "", + "description": "

Sets the button to a disabled state.

+", + "line": 60, + "name": "isDisabled", + "rawdescription": "Sets the button to a disabled state.", + "type": "boolean", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "line": 195, + "name": "item", + "type": "[]", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "description": "

The inner text of the button.

+", + "jsdoctags": Array [ + Object { + "comment": "", + "end": 1590, + "flags": 4227072, + "kind": 317, + "modifierFlagsCache": 0, + "pos": 1576, + "tagName": Object { + "end": 1585, + "escapedText": "required", + "flags": 4227072, + "kind": 78, + "modifierFlagsCache": 0, + "pos": 1577, + "transformFlags": 0, + }, + "transformFlags": 0, + }, + ], + "line": 68, + "name": "label", + "rawdescription": "The inner text of the button.", + "type": "string", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "line": 192, + "name": "showKeyAlias", + "type": "", + }, + Object { + "defaultValue": "'medium'", + "deprecated": false, + "deprecationMessage": "", + "description": "

Size of the button.

+", + "line": 72, + "name": "size", + "rawdescription": "Size of the button.", + "type": "ButtonSize", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "description": "

Specifies some arbitrary object

+", + "line": 75, + "name": "someDataObject", + "rawdescription": "Specifies some arbitrary object", + "type": "ISomeInterface", + }, + Object { + "defaultValue": "false", + "deprecated": true, + "deprecationMessage": "", + "description": "

Some input you shouldn't use.

+", + "jsdoctags": Array [ + Object { + "comment": "", + "end": 1882, + "flags": 4227072, + "kind": 321, + "modifierFlagsCache": 0, + "pos": 1866, + "tagName": Object { + "end": 1877, + "escapedText": "deprecated", + "flags": 4227072, + "kind": 78, + "modifierFlagsCache": 0, + "pos": 1867, + "transformFlags": 0, + }, + "transformFlags": 0, + }, + ], + "line": 83, + "name": "somethingYouShouldNotUse", + "rawdescription": "Some input you shouldn't use.", + "type": "boolean", + }, + ], + "methodsClass": Array [ + Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "x", + "type": "number", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "y", + "type": "string | number", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "

An internal calculation method which adds x and y together.

+", + "jsdoctags": Array [ + Object { + "comment": "

Some number you'd like to use.

+", + "deprecated": false, + "deprecationMessage": "", + "name": Object { + "end": 3678, + "escapedText": "x", + "flags": 4227072, + "kind": 78, + "modifierFlagsCache": 0, + "pos": 3677, + "transformFlags": 0, + }, + "tagName": Object { + "end": 3676, + "escapedText": "param", + "flags": 4227072, + "kind": 78, + "modifierFlagsCache": 0, + "pos": 3671, + "transformFlags": 0, + }, + "type": "number", + }, + Object { + "comment": "

Some other number or string you'd like to use, will have parseInt() applied before calculation.

+", + "deprecated": false, + "deprecationMessage": "", + "name": Object { + "end": 3724, + "escapedText": "y", + "flags": 4227072, + "kind": 78, + "modifierFlagsCache": 0, + "pos": 3723, + "transformFlags": 0, + }, + "tagName": Object { + "end": 3722, + "escapedText": "param", + "flags": 4227072, + "kind": 78, + "modifierFlagsCache": 0, + "pos": 3717, + "transformFlags": 0, + }, + "type": "string | number", + }, + ], + "line": 164, + "modifierKind": Array [ + 122, + ], + "name": "calc", + "optional": false, + "rawdescription": " + +An internal calculation method which adds \`x\` and \`y\` together. + +", + "returnType": "number", + "typeParameters": Array [], + }, + Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "btn", + "type": "", + }, + ], + "decorators": Array [ + Object { + "name": "HostListener", + "stringifiedArguments": "'click', ['$event.target']", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "jsdoctags": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "btn", + "tagName": Object { + "text": "param", + }, + "type": "", + }, + ], + "line": 120, + "name": "onClickListener", + "optional": false, + "returnType": "void", + "typeParameters": Array [], + }, + Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "password", + "type": "string", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "

A private method.

+", + "jsdoctags": Array [ + Object { + "comment": "

Some password.

+", + "deprecated": false, + "deprecationMessage": "", + "name": Object { + "end": 4263, + "escapedText": "password", + "flags": 4227072, + "kind": 78, + "modifierFlagsCache": 0, + "pos": 4255, + "transformFlags": 0, + }, + "tagName": Object { + "end": 4254, + "escapedText": "param", + "flags": 4227072, + "kind": 78, + "modifierFlagsCache": 0, + "pos": 4249, + "transformFlags": 0, + }, + "type": "string", + }, + ], + "line": 187, + "modifierKind": Array [ + 120, + ], + "name": "privateMethod", + "optional": false, + "rawdescription": " + +A private method. + +", + "returnType": "void", + "typeParameters": Array [], + }, + Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "id", + "optional": true, + "type": "number", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "

A protected method.

+", + "jsdoctags": Array [ + Object { + "comment": "

Some id.

+", + "deprecated": false, + "deprecationMessage": "", + "name": Object { + "end": 4113, + "escapedText": "id", + "flags": 4227072, + "kind": 78, + "modifierFlagsCache": 0, + "pos": 4111, + "transformFlags": 0, + }, + "optional": true, + "tagName": Object { + "end": 4110, + "escapedText": "param", + "flags": 4227072, + "kind": 78, + "modifierFlagsCache": 0, + "pos": 4105, + "transformFlags": 0, + }, + "type": "number", + }, + ], + "line": 178, + "modifierKind": Array [ + 121, + ], + "name": "protectedMethod", + "optional": false, + "rawdescription": " + +A protected method. + +", + "returnType": "void", + "typeParameters": Array [], + }, + Object { + "args": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "things", + "type": "ISomeInterface", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "

A public method using an interface.

+", + "jsdoctags": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "things", + "tagName": Object { + "text": "param", + }, + "type": "ISomeInterface", + }, + ], + "line": 169, + "modifierKind": Array [ + 122, + ], + "name": "publicMethod", + "optional": false, + "rawdescription": " +A public method using an interface.", + "returnType": "void", + "typeParameters": Array [], + }, + ], + "name": "InputComponent", + "outputs": Array [], + "outputsClass": Array [ + Object { + "defaultValue": "new EventEmitter()", + "deprecated": false, + "deprecationMessage": "", + "description": "

Handler to be called when the button is clicked by a user.

+

Will also block the emission of the event if isDisabled is true.

+", + "line": 91, + "name": "onClick", + "rawdescription": " + +Handler to be called when the button is clicked by a user. + +Will also block the emission of the event if \`isDisabled\` is true. +", + "type": "EventEmitter", + }, + ], + "propertiesClass": Array [ + Object { + "defaultValue": "'some value'", + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 106, + "modifierKind": Array [ + 120, + ], + "name": "_inputValue", + "optional": false, + "type": "string", + }, + Object { + "defaultValue": "'Private hello'", + "deprecated": false, + "deprecationMessage": "", + "description": "

Private value.

+", + "line": 146, + "modifierKind": Array [ + 120, + ], + "name": "_value", + "optional": false, + "rawdescription": " +Private value.", + "type": "string", + }, + Object { + "decorators": Array [ + Object { + "name": "ViewChild", + "stringifiedArguments": "'buttonRef', {static: false}", + }, + ], + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 48, + "name": "buttonRef", + "optional": false, + "type": "ElementRef", + }, + Object { + "decorators": Array [ + Object { + "name": "HostBinding", + "stringifiedArguments": "'class.focused'", + }, + ], + "defaultValue": "false", + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 124, + "name": "focus", + "optional": false, + "type": "", + }, + Object { + "defaultValue": "'Public hello'", + "deprecated": false, + "deprecationMessage": "", + "description": "

Public value.

+", + "line": 143, + "modifierKind": Array [ + 122, + ], + "name": "internalProperty", + "optional": false, + "rawdescription": " +Public value.", + "type": "string", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 199, + "modifierKind": Array [ + 122, + ], + "name": "processedItem", + "optional": false, + "type": "T[]", + }, + ], + "providers": Array [], + "rawdescription": " + +This is a simple button that demonstrates various JSDoc handling in Storybook Docs for Angular. + +It supports [markdown](https://en.wikipedia.org/wiki/Markdown), so you can embed formatted text, +like **bold**, _italic_, and \`inline code\`. + +> How you like dem apples?! It's never been easier to document all your components. + +", + "selector": "doc-button", + "sourceCode": "import { + Component, + ElementRef, + EventEmitter, + HostBinding, + HostListener, + Input, + Output, + ViewChild, +} from '@angular/core'; + +export const exportedConstant = 'An exported constant'; + +export type ButtonSize = 'small' | 'medium' | 'large' | 'xlarge'; + +export enum ButtonAccent { + 'Normal' = 'Normal', + 'High' = 'High', +} + +export interface ISomeInterface { + one: string; + two: boolean; + three: any[]; +} + +/** + * This is a simple button that demonstrates various JSDoc handling in Storybook Docs for Angular. + * + * It supports [markdown](https://en.wikipedia.org/wiki/Markdown), so you can embed formatted text, + * like **bold**, _italic_, and \`inline code\`. + * + * > How you like dem apples?! It's never been easier to document all your components. + * + * @string Hello world + * @link [Example](http://example.com) + * @code \`ThingThing\` + * @html aaa + */ +@Component({ + selector: 'doc-button', + template: '', +}) +export class InputComponent { + @ViewChild('buttonRef', { static: false }) buttonRef: ElementRef; + + /** Appearance style of the button. */ + @Input() + public appearance: 'primary' | 'secondary' = 'secondary'; + + /** Specify the accent-type of the button */ + @Input() + public accent: ButtonAccent; + + /** Sets the button to a disabled state. */ + @Input() + public isDisabled = false; + + /** + * The inner text of the button. + * + * @required + */ + @Input() + public label: string; + + /** Size of the button. */ + @Input() + public size?: ButtonSize = 'medium'; + + /** Specifies some arbitrary object */ + @Input() public someDataObject: ISomeInterface; + + /** + * Some input you shouldn't use. + * + * @deprecated + */ + @Input() + public somethingYouShouldNotUse = false; + + /** + * Handler to be called when the button is clicked by a user. + * + * Will also block the emission of the event if \`isDisabled\` is true. + */ + @Output() + public onClick = new EventEmitter(); + + /** + * This is an internal method that we don't want to document and have added the \`ignore\` annotation to. + * + * @ignore + */ + public handleClick(event: Event) { + event.stopPropagation(); + + if (!this.isDisabled) { + this.onClick.emit(event); + } + } + + private _inputValue = 'some value'; + + /** Setter for \`inputValue\` that is also an \`@Input\`. */ + @Input() + public set inputValue(value: string) { + this._inputValue = value; + } + + /** Getter for \`inputValue\`. */ + public get inputValue() { + return this._inputValue; + } + + @HostListener('click', ['$event.target']) + onClickListener(btn) { + console.log('button', btn); + } + + @HostBinding('class.focused') focus = false; + + /** + * Returns all the CSS classes for the button. + * + * @ignore + */ + public get classes(): string[] { + return [this.appearance, this.size] + .filter((_class) => !!_class) + .map((_class) => \`btn-\${_class}\`); + } + + /** + * @ignore + */ + public ignoredProperty = 'Ignore me'; + + /** Public value. */ + public internalProperty = 'Public hello'; + + /** Private value. */ + private _value = 'Private hello'; + + /** Set the private value. */ + public set value(value: string | number) { + this._value = \`\${value}\`; + } + + /** Get the private value. */ + public get value(): string | number { + return this._value; + } + + /** + * An internal calculation method which adds \`x\` and \`y\` together. + * + * @param x Some number you'd like to use. + * @param y Some other number or string you'd like to use, will have \`parseInt()\` applied before calculation. + */ + public calc(x: number, y: string | number): number { + return x + parseInt(\`\${y}\`, 10); + } + + /** A public method using an interface. */ + public publicMethod(things: ISomeInterface) { + console.log(things); + } + + /** + * A protected method. + * + * @param id Some \`id\`. + */ + protected protectedMethod(id?: number) { + console.log(id); + } + + /** + * A private method. + * + * @param password Some \`password\`. + */ + private privateMethod(password: string) { + console.log(password); + } + + @Input('showKeyAlias') + public showKey: keyof T; + + @Input() + public set item(item: T[]) { + this.processedItem = item; + } + + public processedItem: T[]; +} +", + "styleUrls": Array [], + "styleUrlsData": "", + "styles": Array [], + "stylesData": "", + "template": "", + "templateUrl": Array [], + "type": "component", + "viewProviders": Array [], + }, + ], + "coverage": Object { + "count": 21, + "files": Array [ + Object { + "coverageCount": "16/25", + "coveragePercent": 64, + "filePath": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "linktype": "component", + "name": "InputComponent", + "status": "good", + "type": "component", + }, + Object { + "coverageCount": "0/4", + "coveragePercent": 0, + "filePath": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "linktype": "interface", + "name": "ISomeInterface", + "status": "low", + "type": "interface", + }, + Object { + "coverageCount": "0/1", + "coveragePercent": 0, + "filePath": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "linksubtype": "variable", + "linktype": "miscellaneous", + "name": "exportedConstant", + "status": "low", + "type": "variable", + }, + ], + "status": "low", + }, + "directives": Array [], + "guards": Array [], + "injectables": Array [], + "interceptors": Array [], + "interfaces": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "id": "interface-ISomeInterface-fd2eff3e4da750f1c06d4928670993b3", + "indexSignatures": Array [], + "kind": 163, + "methods": Array [], + "name": "ISomeInterface", + "properties": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 25, + "name": "one", + "optional": false, + "type": "string", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 27, + "name": "three", + "optional": false, + "type": "any[]", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "description": "", + "line": 26, + "name": "two", + "optional": false, + "type": "boolean", + }, + ], + "sourceCode": "import { + Component, + ElementRef, + EventEmitter, + HostBinding, + HostListener, + Input, + Output, + ViewChild, +} from '@angular/core'; + +export const exportedConstant = 'An exported constant'; + +export type ButtonSize = 'small' | 'medium' | 'large' | 'xlarge'; + +export enum ButtonAccent { + 'Normal' = 'Normal', + 'High' = 'High', +} + +export interface ISomeInterface { + one: string; + two: boolean; + three: any[]; +} + +/** + * This is a simple button that demonstrates various JSDoc handling in Storybook Docs for Angular. + * + * It supports [markdown](https://en.wikipedia.org/wiki/Markdown), so you can embed formatted text, + * like **bold**, _italic_, and \`inline code\`. + * + * > How you like dem apples?! It's never been easier to document all your components. + * + * @string Hello world + * @link [Example](http://example.com) + * @code \`ThingThing\` + * @html aaa + */ +@Component({ + selector: 'doc-button', + template: '', +}) +export class InputComponent { + @ViewChild('buttonRef', { static: false }) buttonRef: ElementRef; + + /** Appearance style of the button. */ + @Input() + public appearance: 'primary' | 'secondary' = 'secondary'; + + /** Specify the accent-type of the button */ + @Input() + public accent: ButtonAccent; + + /** Sets the button to a disabled state. */ + @Input() + public isDisabled = false; + + /** + * The inner text of the button. + * + * @required + */ + @Input() + public label: string; + + /** Size of the button. */ + @Input() + public size?: ButtonSize = 'medium'; + + /** Specifies some arbitrary object */ + @Input() public someDataObject: ISomeInterface; + + /** + * Some input you shouldn't use. + * + * @deprecated + */ + @Input() + public somethingYouShouldNotUse = false; + + /** + * Handler to be called when the button is clicked by a user. + * + * Will also block the emission of the event if \`isDisabled\` is true. + */ + @Output() + public onClick = new EventEmitter(); + + /** + * This is an internal method that we don't want to document and have added the \`ignore\` annotation to. + * + * @ignore + */ + public handleClick(event: Event) { + event.stopPropagation(); + + if (!this.isDisabled) { + this.onClick.emit(event); + } + } + + private _inputValue = 'some value'; + + /** Setter for \`inputValue\` that is also an \`@Input\`. */ + @Input() + public set inputValue(value: string) { + this._inputValue = value; + } + + /** Getter for \`inputValue\`. */ + public get inputValue() { + return this._inputValue; + } + + @HostListener('click', ['$event.target']) + onClickListener(btn) { + console.log('button', btn); + } + + @HostBinding('class.focused') focus = false; + + /** + * Returns all the CSS classes for the button. + * + * @ignore + */ + public get classes(): string[] { + return [this.appearance, this.size] + .filter((_class) => !!_class) + .map((_class) => \`btn-\${_class}\`); + } + + /** + * @ignore + */ + public ignoredProperty = 'Ignore me'; + + /** Public value. */ + public internalProperty = 'Public hello'; + + /** Private value. */ + private _value = 'Private hello'; + + /** Set the private value. */ + public set value(value: string | number) { + this._value = \`\${value}\`; + } + + /** Get the private value. */ + public get value(): string | number { + return this._value; + } + + /** + * An internal calculation method which adds \`x\` and \`y\` together. + * + * @param x Some number you'd like to use. + * @param y Some other number or string you'd like to use, will have \`parseInt()\` applied before calculation. + */ + public calc(x: number, y: string | number): number { + return x + parseInt(\`\${y}\`, 10); + } + + /** A public method using an interface. */ + public publicMethod(things: ISomeInterface) { + console.log(things); + } + + /** + * A protected method. + * + * @param id Some \`id\`. + */ + protected protectedMethod(id?: number) { + console.log(id); + } + + /** + * A private method. + * + * @param password Some \`password\`. + */ + private privateMethod(password: string) { + console.log(password); + } + + @Input('showKeyAlias') + public showKey: keyof T; + + @Input() + public set item(item: T[]) { + this.processedItem = item; + } + + public processedItem: T[]; +} +", + "type": "interface", + }, + ], + "miscellaneous": Object { + "enumerations": Array [ + Object { + "childs": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "Normal", + "value": "Normal", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "High", + "value": "High", + }, + ], + "ctype": "miscellaneous", + "deprecated": false, + "deprecationMessage": "", + "description": "", + "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "name": "ButtonAccent", + "subtype": "enum", + }, + ], + "functions": Array [], + "groupedEnumerations": Object { + "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts": Array [ + Object { + "childs": Array [ + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "Normal", + "value": "Normal", + }, + Object { + "deprecated": false, + "deprecationMessage": "", + "name": "High", + "value": "High", + }, + ], + "ctype": "miscellaneous", + "deprecated": false, + "deprecationMessage": "", + "description": "", + "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "name": "ButtonAccent", + "subtype": "enum", + }, + ], + }, + "groupedFunctions": Object {}, + "groupedTypeAliases": Object { + "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts": Array [ + Object { + "ctype": "miscellaneous", + "deprecated": false, + "deprecationMessage": "", + "description": "", + "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "kind": 183, + "name": "ButtonSize", + "rawtype": "\\"small\\" | \\"medium\\" | \\"large\\" | \\"xlarge\\"", + "subtype": "typealias", + }, + ], + }, + "groupedVariables": Object { + "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts": Array [ + Object { + "ctype": "miscellaneous", + "defaultValue": "'An exported constant'", + "deprecated": false, + "deprecationMessage": "", + "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "name": "exportedConstant", + "subtype": "variable", + "type": "string", + }, + ], + }, + "typealiases": Array [ + Object { + "ctype": "miscellaneous", + "deprecated": false, + "deprecationMessage": "", + "description": "", + "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "kind": 183, + "name": "ButtonSize", + "rawtype": "\\"small\\" | \\"medium\\" | \\"large\\" | \\"xlarge\\"", + "subtype": "typealias", + }, + ], + "variables": Array [ + Object { + "ctype": "miscellaneous", + "defaultValue": "'An exported constant'", + "deprecated": false, + "deprecationMessage": "", + "file": "addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts", + "name": "exportedConstant", + "subtype": "variable", + "type": "string", + }, + ], + }, + "modules": Array [], + "pipes": Array [], + "routes": Array [], +} +`; diff --git a/addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts b/app/angular/src/client/docs/__testfixtures__/doc-button/input.ts similarity index 100% rename from addons/docs/src/frameworks/angular/__testfixtures__/doc-button/input.ts rename to app/angular/src/client/docs/__testfixtures__/doc-button/input.ts diff --git a/addons/docs/src/frameworks/angular/__testfixtures__/doc-button/properties.snapshot b/app/angular/src/client/docs/__testfixtures__/doc-button/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/angular/__testfixtures__/doc-button/properties.snapshot rename to app/angular/src/client/docs/__testfixtures__/doc-button/properties.snapshot diff --git a/app/angular/src/client/docs/__testfixtures__/doc-button/tsconfig.json b/app/angular/src/client/docs/__testfixtures__/doc-button/tsconfig.json new file mode 100644 index 000000000000..fdb47c28b38c --- /dev/null +++ b/app/angular/src/client/docs/__testfixtures__/doc-button/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "rootDir": "." + }, + "include": [ + "./*.ts" + ] +} \ No newline at end of file diff --git a/addons/docs/src/frameworks/angular/angular-properties.test.ts b/app/angular/src/client/docs/angular-properties.test.ts similarity index 91% rename from addons/docs/src/frameworks/angular/angular-properties.test.ts rename to app/angular/src/client/docs/angular-properties.test.ts index 28789a4edea4..49c7f5661a66 100644 --- a/addons/docs/src/frameworks/angular/angular-properties.test.ts +++ b/app/angular/src/client/docs/angular-properties.test.ts @@ -6,6 +6,9 @@ import { sync as spawnSync } from 'cross-spawn'; import { findComponentByName, extractArgTypesFromData } from './compodoc'; +// @ts-ignore +const { SNAPSHOT_OS } = global; + // File hierarchy: __testfixtures__ / some-test-case / input.* const inputRegExp = /^input\..*$/; @@ -35,14 +38,15 @@ describe('angular component properties', () => { const testDir = path.join(fixturesDir, testEntry.name); const testFile = fs.readdirSync(testDir).find((fileName) => inputRegExp.test(fileName)); if (testFile) { - // eslint-disable-next-line jest/valid-title it(testEntry.name, () => { const inputPath = path.join(testDir, testFile); // snapshot the output of compodoc const compodocOutput = runCompodoc(inputPath); const compodocJson = JSON.parse(compodocOutput); - expect(compodocJson).toMatchSpecificSnapshot(path.join(testDir, 'compodoc.snapshot')); + expect(compodocJson).toMatchSpecificSnapshot( + path.join(testDir, `compodoc-${SNAPSHOT_OS}.snapshot`) + ); // snapshot the output of addon-docs angular-properties const componentData = findComponentByName('InputComponent', compodocJson); diff --git a/addons/docs/src/frameworks/angular/compodoc.test.ts b/app/angular/src/client/docs/compodoc.test.ts similarity index 100% rename from addons/docs/src/frameworks/angular/compodoc.test.ts rename to app/angular/src/client/docs/compodoc.test.ts diff --git a/addons/docs/src/frameworks/angular/compodoc.ts b/app/angular/src/client/docs/compodoc.ts similarity index 97% rename from addons/docs/src/frameworks/angular/compodoc.ts rename to app/angular/src/client/docs/compodoc.ts index c6dd02d450c7..7de806bce9ad 100644 --- a/addons/docs/src/frameworks/angular/compodoc.ts +++ b/app/angular/src/client/docs/compodoc.ts @@ -1,9 +1,9 @@ /* eslint-disable no-underscore-dangle */ /* global window */ -import { ArgType, ArgTypes } from '@storybook/api'; +import type { ArgType, ArgTypes } from '@storybook/api'; import { logger } from '@storybook/client-logger'; -import { +import type { Argument, Class, CompodocJson, @@ -120,7 +120,7 @@ const extractTypeFromValue = (defaultValue: any) => { const extractEnumValues = (compodocType: any) => { const compodocJson = getCompodocJson(); - const enumType = compodocJson?.miscellaneous.enumerations.find((x) => x.name === compodocType); + const enumType = compodocJson?.miscellaneous?.enumerations?.find((x) => x.name === compodocType); if (enumType?.childs.every((x) => x.value)) { return enumType.childs.map((x) => x.value); @@ -217,7 +217,7 @@ const extractDefaultValue = (property: Property) => { const resolveTypealias = (compodocType: string): string => { const compodocJson = getCompodocJson(); - const typeAlias = compodocJson?.miscellaneous.typealiases.find((x) => x.name === compodocType); + const typeAlias = compodocJson?.miscellaneous?.typealiases?.find((x) => x.name === compodocType); return typeAlias ? resolveTypealias(typeAlias.rawtype) : compodocType; }; diff --git a/app/angular/src/client/docs/config.ts b/app/angular/src/client/docs/config.ts new file mode 100644 index 000000000000..70f19c61d0f0 --- /dev/null +++ b/app/angular/src/client/docs/config.ts @@ -0,0 +1,22 @@ +import { SourceType, enhanceArgTypes } from '@storybook/docs-tools'; +import { extractArgTypes, extractComponentDescription } from './compodoc'; +import { sourceDecorator } from './sourceDecorator'; +import { prepareForInline } from './prepareForInline'; + +export const parameters = { + docs: { + // probably set this to true by default once it's battle-tested + inlineStories: false, + prepareForInline, + extractArgTypes, + extractComponentDescription, + source: { + type: SourceType.DYNAMIC, + language: 'html', + }, + }, +}; + +export const decorators = [sourceDecorator]; + +export const argTypesEnhancers = [enhanceArgTypes]; diff --git a/addons/docs/src/frameworks/angular/index.ts b/app/angular/src/client/docs/index.ts similarity index 100% rename from addons/docs/src/frameworks/angular/index.ts rename to app/angular/src/client/docs/index.ts diff --git a/app/angular/src/client/docs/prepareForInline.ts b/app/angular/src/client/docs/prepareForInline.ts new file mode 100644 index 000000000000..4568782e8244 --- /dev/null +++ b/app/angular/src/client/docs/prepareForInline.ts @@ -0,0 +1,43 @@ +import React from 'react'; +import pLimit from 'p-limit'; +import { nanoid } from 'nanoid'; + +import { PartialStoryFn } from '@storybook/csf'; +import { AngularFramework, StoryContext } from '..'; +import { rendererFactory } from '../../renderer'; + +const limit = pLimit(1); + +/** + * Uses the angular renderer to generate a story. Uses p-limit to run synchronously + */ +export const prepareForInline = ( + storyFn: PartialStoryFn, + { id, parameters, component }: StoryContext +) => { + const el = React.useRef(); + + React.useEffect(() => { + (async () => { + limit(async () => { + const renderer = await rendererFactory.getRendererInstance( + `${id}-${nanoid(10)}`.toLowerCase(), + el.current + ); + if (renderer) { + await renderer.render({ + forced: false, + component, + parameters, + storyFnAngular: storyFn(), + targetDOMNode: el.current, + }); + } + }); + })(); + }); + + return React.createElement('div', { + ref: el, + }); +}; diff --git a/app/angular/src/client/docs/sourceDecorator.ts b/app/angular/src/client/docs/sourceDecorator.ts new file mode 100644 index 000000000000..9b4f5841e871 --- /dev/null +++ b/app/angular/src/client/docs/sourceDecorator.ts @@ -0,0 +1,58 @@ +import { addons, useEffect } from '@storybook/addons'; +import type { PartialStoryFn } from '@storybook/csf'; +import { SNIPPET_RENDERED, SourceType } from '@storybook/docs-tools'; +import { StoryContext, AngularFramework } from '..'; +import { computesTemplateSourceFromComponent } from '../../renderer'; + +export const skipSourceRender = (context: StoryContext) => { + const sourceParams = context?.parameters.docs?.source; + + // always render if the user forces it + if (sourceParams?.type === SourceType.DYNAMIC) { + return false; + } + // never render if the user is forcing the block to render code, or + // if the user provides code + return sourceParams?.code || sourceParams?.type === SourceType.CODE; +}; + +/** + * Angular source decorator. + * @param storyFn Fn + * @param context StoryContext + */ +export const sourceDecorator = ( + storyFn: PartialStoryFn, + context: StoryContext +) => { + const story = storyFn(); + if (skipSourceRender(context)) { + return story; + } + const channel = addons.getChannel(); + const { props, template, userDefinedTemplate } = story; + + const { component, argTypes } = context; + + let toEmit: string; + + useEffect(() => { + if (toEmit) { + channel.emit(SNIPPET_RENDERED, context.id, toEmit, 'angular'); + } + }); + + if (component && !userDefinedTemplate) { + const source = computesTemplateSourceFromComponent(component, props, argTypes); + + // We might have a story with a Directive or Service defined as the component + // In these cases there might exist a template, even if we aren't able to create source from component + if (source || template) { + toEmit = source || template; + } + } else if (template) { + toEmit = template; + } + + return story; +}; diff --git a/addons/docs/src/frameworks/angular/types.ts b/app/angular/src/client/docs/types.ts similarity index 100% rename from addons/docs/src/frameworks/angular/types.ts rename to app/angular/src/client/docs/types.ts diff --git a/app/angular/src/client/preview/angular-beta/AbstractRenderer.ts b/app/angular/src/client/preview/angular-beta/AbstractRenderer.ts index d2d5108b2e86..5c9e7c4e7197 100644 --- a/app/angular/src/client/preview/angular-beta/AbstractRenderer.ts +++ b/app/angular/src/client/preview/angular-beta/AbstractRenderer.ts @@ -108,7 +108,7 @@ export abstract class AbstractRenderer { parameters: Parameters; targetDOMNode: HTMLElement; }) { - const targetSelector = `${this.storyId}`; + const targetSelector = `${this.generateTargetSelectorFromStoryId()}`; const newStoryProps$ = new BehaviorSubject(storyFnAngular.props); const moduleMetadata = getStorybookModuleMetadata( @@ -144,6 +144,26 @@ export abstract class AbstractRenderer { await this.afterFullRender(); } + /** + * Only ASCII alphanumerics can be used as HTML tag name. + * https://html.spec.whatwg.org/#elements-2 + * + * Therefore, stories break when non-ASCII alphanumerics are included in target selector. + * https://github.com/storybookjs/storybook/issues/15147 + * + * This method returns storyId when it doesn't contain any non-ASCII alphanumerics. + * Otherwise, it generates a valid HTML tag name from storyId by removing non-ASCII alphanumerics from storyId, prefixing "sb-", and suffixing "-component" + * @protected + * @memberof AbstractRenderer + */ + protected generateTargetSelectorFromStoryId() { + const invalidHtmlTag = /[^A-Za-z0-9-]/g; + const storyIdIsInvalidHtmlTagName = invalidHtmlTag.test(this.storyId); + return storyIdIsInvalidHtmlTagName + ? `sb-${this.storyId.replace(invalidHtmlTag, '')}-component` + : this.storyId; + } + protected initAngularRootElement(targetDOMNode: HTMLElement, targetSelector: string) { // Adds DOM element that angular will use as bootstrap component // eslint-disable-next-line no-param-reassign diff --git a/app/angular/src/client/preview/angular-beta/ComputesTemplateFromComponent.test.ts b/app/angular/src/client/preview/angular-beta/ComputesTemplateFromComponent.test.ts index 62786ade02b3..b4a571feb05f 100644 --- a/app/angular/src/client/preview/angular-beta/ComputesTemplateFromComponent.test.ts +++ b/app/angular/src/client/preview/angular-beta/ComputesTemplateFromComponent.test.ts @@ -1,5 +1,5 @@ import { Component } from '@angular/core'; -import { ArgTypes } from '@storybook/api'; +import type { ArgTypes } from '@storybook/api'; import { computesTemplateSourceFromComponent } from './ComputesTemplateFromComponent'; import { ButtonAccent, InputComponent, ISomeInterface } from './__testfixtures__/input.component'; @@ -77,6 +77,22 @@ describe('angular source decorator', () => { }); }); + describe('with component with void element and attribute selector', () => { + @Component({ + selector: 'input[foo]', + template: '', + }) + class VoidElementWithAttributeComponent {} + + it('should create without separate closing tag', async () => { + const component = VoidElementWithAttributeComponent; + const props = {}; + const argTypes: ArgTypes = {}; + const source = computesTemplateSourceFromComponent(component, props, argTypes); + expect(source).toEqual(``); + }); + }); + describe('with component with attribute and value only selector', () => { @Component({ selector: '[foo="bar"]', @@ -93,6 +109,22 @@ describe('angular source decorator', () => { }); }); + describe('with component with void element, attribute and value only selector', () => { + @Component({ + selector: 'input[foo="bar"]', + template: '', + }) + class VoidElementWithAttributeComponent {} + + it('should create and add attribute to template without separate closing tag', async () => { + const component = VoidElementWithAttributeComponent; + const props = {}; + const argTypes: ArgTypes = {}; + const source = computesTemplateSourceFromComponent(component, props, argTypes); + expect(source).toEqual(``); + }); + }); + describe('with component with class selector', () => { @Component({ selector: 'doc-button.foo', diff --git a/app/angular/src/client/preview/angular-beta/ComputesTemplateFromComponent.ts b/app/angular/src/client/preview/angular-beta/ComputesTemplateFromComponent.ts index 297b63c57af5..ade69fb64695 100644 --- a/app/angular/src/client/preview/angular-beta/ComputesTemplateFromComponent.ts +++ b/app/angular/src/client/preview/angular-beta/ComputesTemplateFromComponent.ts @@ -1,6 +1,6 @@ -import { Type } from '@angular/core'; -import { ArgType, ArgTypes } from '@storybook/api'; -import { ICollection } from '../types'; +import type { Type } from '@angular/core'; +import type { ArgType, ArgTypes } from '@storybook/api'; +import type { ICollection } from '../types'; import { ComponentInputsOutputs, getComponentDecoratorMetadata, @@ -141,6 +141,26 @@ const buildTemplate = ( inputs: string, outputs: string ) => { + // https://www.w3.org/TR/2011/WD-html-markup-20110113/syntax.html#syntax-elements + const voidElements = [ + 'area', + 'base', + 'br', + 'col', + 'command', + 'embed', + 'hr', + 'img', + 'input', + 'keygen', + 'link', + 'meta', + 'param', + 'source', + 'track', + 'wbr', + ]; + const firstSelector = selector.split(',')[0]; const templateReplacers: [ string | RegExp, @@ -153,7 +173,14 @@ const buildTemplate = ( [/#([\w-]+)/, ` id="$1"`], [/((\.[\w-]+)+)/, (_, c) => ` class="${c.split`.`.join` `.trim()}"`], [/(\[.+?])/g, (_, a) => ` ${a.slice(1, -1)}`], - [/([\S]+)(.*)/, `<$1$2${inputs}${outputs}>${innerTemplate}`], + [ + /([\S]+)(.*)/, + (template, elementSelector) => { + return voidElements.some((element) => elementSelector === element) + ? template.replace(/([\S]+)(.*)/, `<$1$2${inputs}${outputs} />`) + : template.replace(/([\S]+)(.*)/, `<$1$2${inputs}${outputs}>${innerTemplate}`); + }, + ], ]; return templateReplacers.reduce( diff --git a/app/angular/src/client/preview/angular-beta/RendererFactory.test.ts b/app/angular/src/client/preview/angular-beta/RendererFactory.test.ts index 237e9b2c9b92..3d57c6c9ef2e 100644 --- a/app/angular/src/client/preview/angular-beta/RendererFactory.test.ts +++ b/app/angular/src/client/preview/angular-beta/RendererFactory.test.ts @@ -22,6 +22,7 @@ describe('RendererFactory', () => { rootTargetDOMNode = global.document.getElementById('root'); rootDocstargetDOMNode = global.document.getElementById('root-docs'); (platformBrowserDynamic as any).mockImplementation(platformBrowserDynamicTesting); + jest.spyOn(console, 'log').mockImplementation(() => {}); }); afterEach(() => { @@ -239,6 +240,49 @@ describe('RendererFactory', () => { expect(countDestroy).toEqual(1); }); + + describe('when story id contains non-Ascii characters', () => { + it('should render my-story for story template', async () => { + const render = await rendererFactory.getRendererInstance( + 'my-ストーリー', + rootTargetDOMNode + ); + await render.render({ + storyFnAngular: { + template: '🦊', + props: {}, + }, + forced: false, + parameters: {}, + targetDOMNode: rootTargetDOMNode, + }); + + expect(document.body.getElementsByTagName('sb-my--component')[0].innerHTML).toBe('🦊'); + }); + + it('should render my-story for story component', async () => { + @Component({ selector: 'foo', template: '🦊' }) + class FooComponent {} + + const render = await rendererFactory.getRendererInstance( + 'my-ストーリー', + rootTargetDOMNode + ); + await render.render({ + storyFnAngular: { + props: {}, + }, + forced: false, + parameters: {}, + component: FooComponent, + targetDOMNode: rootTargetDOMNode, + }); + + expect(document.body.getElementsByTagName('sb-my--component')[0].innerHTML).toBe( + '🦊' + ); + }); + }); }); describe('DocsRenderer', () => { diff --git a/app/angular/src/client/preview/angular-beta/StorybookModule.test.ts b/app/angular/src/client/preview/angular-beta/StorybookModule.test.ts index cceba5cfe89b..ef7e664e07aa 100644 --- a/app/angular/src/client/preview/angular-beta/StorybookModule.test.ts +++ b/app/angular/src/client/preview/angular-beta/StorybookModule.test.ts @@ -14,6 +14,7 @@ describe('StorybookModule', () => { template: `

{{ input }}

{{ localPropertyName }}

+

{{ setterCallNb }}

{{ localProperty }}

{{ localFunction() }}

@@ -27,6 +28,11 @@ describe('StorybookModule', () => { @Input('inputBindingPropertyName') public localPropertyName: string; + @Input() + public set setter(value: string) { + this.setterCallNb += 1; + } + @Output() public output = new EventEmitter(); @@ -36,6 +42,8 @@ describe('StorybookModule', () => { public localProperty: string; public localFunction = () => ''; + + public setterCallNb = 0; } it('should initialize inputs', async () => { @@ -104,6 +112,7 @@ describe('StorybookModule', () => { it('should change inputs if storyProps$ Subject emit', async () => { const initialProps = { input: 'input', + inputBindingPropertyName: '', }; const storyProps$ = new BehaviorSubject(initialProps); @@ -150,6 +159,7 @@ describe('StorybookModule', () => { let expectedOutputValue; let expectedOutputBindingValue; const initialProps = { + input: '', output: (value: string) => { expectedOutputValue = value; }, @@ -225,6 +235,34 @@ describe('StorybookModule', () => { expect(fixture.nativeElement.querySelector('p').style.color).toEqual('black'); expect(fixture.nativeElement.querySelector('p#input').innerHTML).toEqual(newProps.input); }); + + it('should call the Input() setter the right number of times', async () => { + const initialProps = { + setter: 'init', + }; + const storyProps$ = new BehaviorSubject(initialProps); + + const ngModule = getStorybookModuleMetadata( + { + storyFnAngular: { props: initialProps }, + component: FooComponent, + targetSelector: 'my-selector', + }, + storyProps$ + ); + const { fixture } = await configureTestingModule(ngModule); + fixture.detectChanges(); + + expect(fixture.nativeElement.querySelector('p#setterCallNb').innerHTML).toEqual('1'); + + const newProps = { + setter: 'new setter value', + }; + storyProps$.next(newProps); + fixture.detectChanges(); + + expect(fixture.nativeElement.querySelector('p#setterCallNb').innerHTML).toEqual('2'); + }); }); describe('with component without selector', () => { diff --git a/app/angular/src/client/preview/angular-beta/StorybookModule.ts b/app/angular/src/client/preview/angular-beta/StorybookModule.ts index 68c443375a83..275b490c18bc 100644 --- a/app/angular/src/client/preview/angular-beta/StorybookModule.ts +++ b/app/angular/src/client/preview/angular-beta/StorybookModule.ts @@ -7,7 +7,7 @@ import deprecate from 'util-deprecate'; import { ICollection, StoryFnAngularReturnType } from '../types'; import { storyPropsProvider } from './StorybookProvider'; import { isComponentAlreadyDeclaredInModules } from './utils/NgModulesAnalyzer'; -import { isDeclarable } from './utils/NgComponentAnalyzer'; +import { isDeclarable, isStandaloneComponent } from './utils/NgComponentAnalyzer'; import { createStorybookWrapperComponent } from './StorybookWrapperComponent'; import { computesTemplateFromComponent } from './ComputesTemplateFromComponent'; @@ -61,6 +61,7 @@ export const getStorybookModuleMetadata = ( props ); + const isStandalone = isStandaloneComponent(component); // Look recursively (deep) if the component is not already declared by an import module const requiresComponentDeclaration = isDeclarable(component) && @@ -68,7 +69,8 @@ export const getStorybookModuleMetadata = ( component, moduleMetadata.declarations, moduleMetadata.imports - ); + ) && + !isStandalone; return { declarations: [ @@ -76,7 +78,11 @@ export const getStorybookModuleMetadata = ( ComponentToInject, ...(moduleMetadata.declarations ?? []), ], - imports: [BrowserModule, ...(moduleMetadata.imports ?? [])], + imports: [ + BrowserModule, + ...(isStandalone ? [component] : []), + ...(moduleMetadata.imports ?? []), + ], providers: [storyPropsProvider(storyProps$), ...(moduleMetadata.providers ?? [])], entryComponents: [...(moduleMetadata.entryComponents ?? [])], schemas: [...(moduleMetadata.schemas ?? [])], diff --git a/app/angular/src/client/preview/angular-beta/StorybookWrapperComponent.ts b/app/angular/src/client/preview/angular-beta/StorybookWrapperComponent.ts index 9192f213f059..d3017dc5e784 100644 --- a/app/angular/src/client/preview/angular-beta/StorybookWrapperComponent.ts +++ b/app/angular/src/client/preview/angular-beta/StorybookWrapperComponent.ts @@ -98,39 +98,13 @@ export const createStorybookWrapperComponent = ( this.storyComponentViewContainerRef.injector.get(ChangeDetectorRef).markForCheck(); this.changeDetectorRef.detectChanges(); - // Once target component has been initialized, the storyProps$ observable keeps target component inputs up to date + // Once target component has been initialized, the storyProps$ observable keeps target component properties than are not Input|Output up to date this.storyComponentPropsSubscription = this.storyProps$ .pipe( skip(1), map((props) => { - // removes component output in props - const outputsKeyToRemove = ngComponentInputsOutputs.outputs.map( - (o) => o.templateName - ); - return Object.entries(props).reduce( - (prev, [key, value]) => ({ - ...prev, - ...(!outputsKeyToRemove.includes(key) && { - [key]: value, - }), - }), - {} as ICollection - ); - }), - map((props) => { - // In case a component uses an input with `bindingPropertyName` (ex: @Input('name')) - // find the value of the local propName in the component Inputs - // otherwise use the input key - return Object.entries(props).reduce((prev, [propKey, value]) => { - const input = ngComponentInputsOutputs.inputs.find( - (o) => o.templateName === propKey - ); - - return { - ...prev, - ...(input ? { [input.propName]: value } : { [propKey]: value }), - }; - }, {} as ICollection); + const propsKeyToKeep = getNonInputsOutputsProps(ngComponentInputsOutputs, props); + return propsKeyToKeep.reduce((acc, p) => ({ ...acc, [p]: props[p] }), {}); }) ) .subscribe((props) => { diff --git a/app/angular/src/client/preview/angular-beta/utils/NgComponentAnalyzer.test.ts b/app/angular/src/client/preview/angular-beta/utils/NgComponentAnalyzer.test.ts index c22079ac29ab..faa7cdce09ff 100644 --- a/app/angular/src/client/preview/angular-beta/utils/NgComponentAnalyzer.test.ts +++ b/app/angular/src/client/preview/angular-beta/utils/NgComponentAnalyzer.test.ts @@ -19,6 +19,7 @@ import { isComponent, isDeclarable, getComponentDecoratorMetadata, + isStandaloneComponent, } from './NgComponentAnalyzer'; describe('getComponentInputsOutputs', () => { @@ -137,6 +138,46 @@ describe('getComponentInputsOutputs', () => { expect(sortByPropName(inputs)).toEqual(sortByPropName(fooComponentFactory.inputs)); expect(sortByPropName(outputs)).toEqual(sortByPropName(fooComponentFactory.outputs)); }); + + it('should return I/O with extending classes', () => { + @Component({ + template: '', + }) + class BarComponent { + @Input() + public a: string; + + @Input() + public b: string; + } + + @Component({ + template: '', + }) + class FooComponent extends BarComponent { + @Input() + public b: string; + + @Input() + public c: string; + } + + const fooComponentFactory = resolveComponentFactory(FooComponent); + + const { inputs, outputs } = getComponentInputsOutputs(FooComponent); + + expect({ inputs, outputs }).toEqual({ + inputs: [ + { propName: 'a', templateName: 'a' }, + { propName: 'b', templateName: 'b' }, + { propName: 'c', templateName: 'c' }, + ], + outputs: [], + }); + + expect(sortByPropName(inputs)).toEqual(sortByPropName(fooComponentFactory.inputs)); + expect(sortByPropName(outputs)).toEqual(sortByPropName(fooComponentFactory.outputs)); + }); }); describe('isDeclarable', () => { @@ -195,12 +236,69 @@ describe('isComponent', () => { }); }); +describe('isStandaloneComponent', () => { + it('should return true with a Component with "standalone: true"', () => { + // TODO: `standalone` is only available in Angular v14. Remove cast to `any` once + // Angular deps are updated to v14.x.x. + @Component({ standalone: true } as any) + class FooComponent {} + + expect(isStandaloneComponent(FooComponent)).toEqual(true); + }); + + it('should return false with a Component with "standalone: false"', () => { + // TODO: `standalone` is only available in Angular v14. Remove cast to `any` once + // Angular deps are updated to v14.x.x. + @Component({ standalone: false } as any) + class FooComponent {} + + expect(isStandaloneComponent(FooComponent)).toEqual(false); + }); + + it('should return false with a Component without the "standalone" property', () => { + @Component({}) + class FooComponent {} + + expect(isStandaloneComponent(FooComponent)).toEqual(false); + }); + + it('should return false with simple class', () => { + class FooPipe {} + + expect(isStandaloneComponent(FooPipe)).toEqual(false); + }); + + it('should return false with Directive', () => { + @Directive() + class FooDirective {} + + expect(isStandaloneComponent(FooDirective)).toEqual(false); + }); +}); + describe('getComponentDecoratorMetadata', () => { it('should return Component with a Component', () => { - @Component({}) + @Component({ selector: 'foo' }) class FooComponent {} expect(getComponentDecoratorMetadata(FooComponent)).toBeInstanceOf(Component); + expect(getComponentDecoratorMetadata(FooComponent)).toEqual({ + changeDetection: 1, + selector: 'foo', + }); + }); + + it('should return Component with extending classes', () => { + @Component({ selector: 'bar' }) + class BarComponent {} + @Component({ selector: 'foo' }) + class FooComponent extends BarComponent {} + + expect(getComponentDecoratorMetadata(FooComponent)).toBeInstanceOf(Component); + expect(getComponentDecoratorMetadata(FooComponent)).toEqual({ + changeDetection: 1, + selector: 'foo', + }); }); }); diff --git a/app/angular/src/client/preview/angular-beta/utils/NgComponentAnalyzer.ts b/app/angular/src/client/preview/angular-beta/utils/NgComponentAnalyzer.ts index 4160656adab9..36bd036631e3 100644 --- a/app/angular/src/client/preview/angular-beta/utils/NgComponentAnalyzer.ts +++ b/app/angular/src/client/preview/angular-beta/utils/NgComponentAnalyzer.ts @@ -1,4 +1,15 @@ -import { Component, Directive, Input, Output, Pipe, Type } from '@angular/core'; +import { + Component, + Directive, + Input, + Output, + Pipe, + Type, + ɵReflectionCapabilities as ReflectionCapabilities, + ɵCodegenComponentFactoryResolver, +} from '@angular/core'; + +const reflectionCapabilities = new ReflectionCapabilities(); export type ComponentInputsOutputs = { inputs: { @@ -80,10 +91,7 @@ export const isDeclarable = (component: any): boolean => { return false; } - const decoratorKey = '__annotations__'; - const decorators: any[] = Reflect.getOwnPropertyDescriptor(component, decoratorKey) - ? Reflect.getOwnPropertyDescriptor(component, decoratorKey).value - : component[decoratorKey]; + const decorators = reflectionCapabilities.annotations(component); return !!(decorators || []).find( (d) => d instanceof Directive || d instanceof Pipe || d instanceof Component @@ -95,56 +103,36 @@ export const isComponent = (component: any): component is Type => { return false; } - const decoratorKey = '__annotations__'; - const decorators: any[] = Reflect.getOwnPropertyDescriptor(component, decoratorKey) - ? Reflect.getOwnPropertyDescriptor(component, decoratorKey).value - : component[decoratorKey]; + const decorators = reflectionCapabilities.annotations(component); + return (decorators || []).some((d) => d instanceof Component); }; +export const isStandaloneComponent = (component: any): component is Type => { + if (!component) { + return false; + } + + const decorators = reflectionCapabilities.annotations(component); + + // TODO: `standalone` is only available in Angular v14. Remove cast to `any` once + // Angular deps are updated to v14.x.x. + return (decorators || []).some((d) => d instanceof Component && (d as any).standalone); +}; + /** * Returns all component decorator properties * is used to get all `@Input` and `@Output` Decorator */ export const getComponentPropsDecoratorMetadata = (component: any) => { - const decoratorKey = '__prop__metadata__'; - let propsDecorators: Record = - Reflect && - Reflect.getOwnPropertyDescriptor && - Reflect.getOwnPropertyDescriptor(component, decoratorKey) - ? Reflect.getOwnPropertyDescriptor(component, decoratorKey).value - : component[decoratorKey]; - - const parent = Reflect && Reflect.getPrototypeOf && Reflect.getPrototypeOf(component); - - if (parent) { - const parentPropsDecorators = getComponentPropsDecoratorMetadata(parent); - propsDecorators = { ...parentPropsDecorators, ...propsDecorators }; - } - - return propsDecorators; + return reflectionCapabilities.propMetadata(component); }; /** * Returns component decorator `@Component` */ export const getComponentDecoratorMetadata = (component: any): Component | undefined => { - const decoratorKey = '__annotations__'; - const decorators: any[] = - Reflect && - Reflect.getOwnPropertyDescriptor && - Reflect.getOwnPropertyDescriptor(component, decoratorKey) - ? Reflect.getOwnPropertyDescriptor(component, decoratorKey).value - : component[decoratorKey]; - - if (!decorators) { - return ( - component.decorators && - component.decorators[0] && - component.decorators[0].args && - component.decorators[0].args[0] - ); - } + const decorators = reflectionCapabilities.annotations(component); - return decorators.find((d) => d instanceof Component); + return decorators.reverse().find((d) => d instanceof Component); }; diff --git a/app/angular/src/client/preview/angular-beta/utils/NgModulesAnalyzer.ts b/app/angular/src/client/preview/angular-beta/utils/NgModulesAnalyzer.ts index 54e721ebea2d..24bdae58d5bf 100644 --- a/app/angular/src/client/preview/angular-beta/utils/NgModulesAnalyzer.ts +++ b/app/angular/src/client/preview/angular-beta/utils/NgModulesAnalyzer.ts @@ -1,4 +1,6 @@ -import { NgModule } from '@angular/core'; +import { NgModule, ɵReflectionCapabilities as ReflectionCapabilities } from '@angular/core'; + +const reflectionCapabilities = new ReflectionCapabilities(); /** * Avoid component redeclaration @@ -37,13 +39,7 @@ export const isComponentAlreadyDeclaredInModules = ( const extractNgModuleMetadata = (importItem: any): NgModule => { const target = importItem && importItem.ngModule ? importItem.ngModule : importItem; - const decoratorKey = '__annotations__'; - const decorators: any[] = - Reflect && - Reflect.getOwnPropertyDescriptor && - Reflect.getOwnPropertyDescriptor(target, decoratorKey) - ? Reflect.getOwnPropertyDescriptor(target, decoratorKey).value - : target[decoratorKey]; + const decorators = reflectionCapabilities.annotations(target); if (!decorators || decorators.length === 0) { return null; diff --git a/app/angular/src/client/preview/angular/components/app.component.ts b/app/angular/src/client/preview/angular/components/app.component.ts index 57bd79442abc..f4e6c0f60d66 100644 --- a/app/angular/src/client/preview/angular/components/app.component.ts +++ b/app/angular/src/client/preview/angular/components/app.component.ts @@ -48,9 +48,8 @@ export class AppComponent implements OnInit, OnDestroy { const componentRef = this.target.createComponent(compFactory); const { instance } = componentRef; // For some reason, manual change detection ref is only working when getting the ref from the injector (rather than componentRef.changeDetectorRef) - const childChangeDetectorRef: ChangeDetectorRef = componentRef.injector.get( - ChangeDetectorRef - ); + const childChangeDetectorRef: ChangeDetectorRef = + componentRef.injector.get(ChangeDetectorRef); this.subscription = this.data.subscribe((newData) => { this.setProps(instance, newData); diff --git a/app/angular/src/client/preview/angular/helpers.ts b/app/angular/src/client/preview/angular/helpers.ts index bad80b39bf93..0ffd723442f5 100644 --- a/app/angular/src/client/preview/angular/helpers.ts +++ b/app/angular/src/client/preview/angular/helpers.ts @@ -5,11 +5,11 @@ import { FormsModule } from '@angular/forms'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { BrowserModule } from '@angular/platform-browser'; import { Observable, ReplaySubject, Subscriber } from 'rxjs'; -import { PartialStoryFn } from '@storybook/csf'; +import type { PartialStoryFn } from '@storybook/csf'; import { AppComponent } from './components/app.component'; import { STORY } from './app.token'; -import { NgModuleMetadata, StoryFnAngularReturnType } from '../types'; -import { AngularFramework } from '../types-6-0'; +import type { NgModuleMetadata, StoryFnAngularReturnType } from '../types'; +import type { AngularFramework } from '../types-6-0'; const { document } = global; diff --git a/app/angular/src/client/preview/config.ts b/app/angular/src/client/preview/config.ts index 2ea6e7700bc4..4f80f0321317 100644 --- a/app/angular/src/client/preview/config.ts +++ b/app/angular/src/client/preview/config.ts @@ -1,3 +1,6 @@ +import './globals'; + export { render, renderToDOM } from './render'; +export { decorateStory } from './decorateStory'; export const parameters = { framework: 'angular' }; diff --git a/app/angular/src/client/preview/decorateStory.test.ts b/app/angular/src/client/preview/decorateStory.test.ts index 316c79b06287..69243b14a74f 100644 --- a/app/angular/src/client/preview/decorateStory.test.ts +++ b/app/angular/src/client/preview/decorateStory.test.ts @@ -1,5 +1,5 @@ import { Component, Input, Output } from '@angular/core'; -import { DecoratorFunction, StoryContext } from '@storybook/addons'; +import type { DecoratorFunction, StoryContext } from '@storybook/addons'; import { componentWrapperDecorator } from './decorators'; import decorateStory from './decorateStory'; diff --git a/app/angular/src/client/preview/decorateStory.ts b/app/angular/src/client/preview/decorateStory.ts index fbd70c8285d4..410ffec07f24 100644 --- a/app/angular/src/client/preview/decorateStory.ts +++ b/app/angular/src/client/preview/decorateStory.ts @@ -1,32 +1,33 @@ -import { DecoratorFunction, LegacyStoryFn, StoryContext } from '@storybook/csf'; +import type { DecoratorFunction, LegacyStoryFn, StoryContext } from '@storybook/csf'; import { sanitizeStoryContextUpdate } from '@storybook/store'; import { computesTemplateFromComponent } from './angular-beta/ComputesTemplateFromComponent'; -import { AngularFramework } from './types-6-0'; +import type { AngularFramework } from './types-6-0'; export default function decorateStory( mainStoryFn: LegacyStoryFn, decorators: DecoratorFunction[] ): LegacyStoryFn { const returnDecorators = [cleanArgsDecorator, ...decorators].reduce( - (previousStoryFn: LegacyStoryFn, decorator) => ( - context: StoryContext - ) => { - const decoratedStory = decorator((update) => { - return previousStoryFn({ - ...context, - ...sanitizeStoryContextUpdate(update), - }); - }, context); + (previousStoryFn: LegacyStoryFn, decorator) => + (context: StoryContext) => { + const decoratedStory = decorator((update) => { + return previousStoryFn({ + ...context, + ...sanitizeStoryContextUpdate(update), + }); + }, context); - return decoratedStory; - }, + return decoratedStory; + }, (context) => prepareMain(mainStoryFn(context), context) ); return returnDecorators; } +export { decorateStory }; + const prepareMain = ( story: AngularFramework['storyResult'], context: StoryContext diff --git a/app/angular/src/client/preview/decorators.test.ts b/app/angular/src/client/preview/decorators.test.ts index ed72890e8609..aa40d61767de 100644 --- a/app/angular/src/client/preview/decorators.test.ts +++ b/app/angular/src/client/preview/decorators.test.ts @@ -1,4 +1,5 @@ -import { addons, mockChannel, StoryContext } from '@storybook/addons'; +import { addons, mockChannel } from '@storybook/addons'; +import type { StoryContext } from '@storybook/addons'; import { Component } from '@angular/core'; import { moduleMetadata } from './decorators'; @@ -20,6 +21,8 @@ const defaultContext: StoryContext = { loaded: {}, originalStoryFn: jest.fn(), viewMode: 'story', + abortSignal: undefined, + canvasElement: undefined, }; class MockModule {} diff --git a/app/angular/src/client/preview/decorators.ts b/app/angular/src/client/preview/decorators.ts index 8b2b3824c5a7..d5eeffe6c57e 100644 --- a/app/angular/src/client/preview/decorators.ts +++ b/app/angular/src/client/preview/decorators.ts @@ -1,56 +1,58 @@ /* eslint-disable no-param-reassign */ -import { Type } from '@angular/core'; -import { DecoratorFunction, StoryContext } from '@storybook/csf'; +import type { Type } from '@angular/core'; +import type { DecoratorFunction, StoryContext } from '@storybook/csf'; import { computesTemplateFromComponent } from './angular-beta/ComputesTemplateFromComponent'; import { isComponent } from './angular-beta/utils/NgComponentAnalyzer'; -import { ICollection, NgModuleMetadata } from './types'; -import { AngularFramework } from './types-6-0'; +import type { ICollection, NgModuleMetadata } from './types'; +import type { AngularFramework } from './types-6-0'; // We use `any` here as the default type rather than `Args` because we need something that is // castable to any component-specific args type when the user is being careful. -export const moduleMetadata = ( - metadata: Partial -): DecoratorFunction => (storyFn) => { - const story = storyFn(); - const storyMetadata = story.moduleMetadata || {}; - metadata = metadata || {}; +export const moduleMetadata = + (metadata: Partial): DecoratorFunction => + (storyFn) => { + const story = storyFn(); + const storyMetadata = story.moduleMetadata || {}; + metadata = metadata || {}; - return { - ...story, - moduleMetadata: { - declarations: [...(metadata.declarations || []), ...(storyMetadata.declarations || [])], - entryComponents: [ - ...(metadata.entryComponents || []), - ...(storyMetadata.entryComponents || []), - ], - imports: [...(metadata.imports || []), ...(storyMetadata.imports || [])], - schemas: [...(metadata.schemas || []), ...(storyMetadata.schemas || [])], - providers: [...(metadata.providers || []), ...(storyMetadata.providers || [])], - }, + return { + ...story, + moduleMetadata: { + declarations: [...(metadata.declarations || []), ...(storyMetadata.declarations || [])], + entryComponents: [ + ...(metadata.entryComponents || []), + ...(storyMetadata.entryComponents || []), + ], + imports: [...(metadata.imports || []), ...(storyMetadata.imports || [])], + schemas: [...(metadata.schemas || []), ...(storyMetadata.schemas || [])], + providers: [...(metadata.providers || []), ...(storyMetadata.providers || [])], + }, + }; }; -}; -export const componentWrapperDecorator = ( - element: Type | ((story: string) => string), - props?: ICollection | ((storyContext: StoryContext) => ICollection) -): DecoratorFunction => (storyFn, storyContext) => { - const story = storyFn(); - const currentProps = typeof props === 'function' ? (props(storyContext) as ICollection) : props; +export const componentWrapperDecorator = + ( + element: Type | ((story: string) => string), + props?: ICollection | ((storyContext: StoryContext) => ICollection) + ): DecoratorFunction => + (storyFn, storyContext) => { + const story = storyFn(); + const currentProps = typeof props === 'function' ? (props(storyContext) as ICollection) : props; - const template = isComponent(element) - ? computesTemplateFromComponent(element, currentProps ?? {}, story.template) - : element(story.template); + const template = isComponent(element) + ? computesTemplateFromComponent(element, currentProps ?? {}, story.template) + : element(story.template); - return { - ...story, - template, - ...(currentProps || story.props - ? { - props: { - ...currentProps, - ...story.props, - }, - } - : {}), + return { + ...story, + template, + ...(currentProps || story.props + ? { + props: { + ...currentProps, + ...story.props, + }, + } + : {}), + }; }; -}; diff --git a/app/angular/src/client/preview/index.ts b/app/angular/src/client/preview/index.ts index 91ff1e5e2ea9..e2d014eeecec 100644 --- a/app/angular/src/client/preview/index.ts +++ b/app/angular/src/client/preview/index.ts @@ -1,11 +1,11 @@ /* eslint-disable prefer-destructuring */ -import { ClientStoryApi, Loadable } from '@storybook/addons'; -import { start } from '@storybook/core/client'; +import type { ClientStoryApi, Loadable } from '@storybook/addons'; +import { start } from '@storybook/core'; import './globals'; import { renderToDOM, render } from './render'; import decorateStory from './decorateStory'; -import { IStorybookSection } from './types'; -import { AngularFramework } from './types-6-0'; +import type { IStorybookSection } from './types'; +import type { AngularFramework } from './types-6-0'; const framework = 'angular'; diff --git a/app/angular/src/client/preview/render.ts b/app/angular/src/client/preview/render.ts index a942d7e05ad6..fc1427ded470 100644 --- a/app/angular/src/client/preview/render.ts +++ b/app/angular/src/client/preview/render.ts @@ -1,8 +1,8 @@ -import { RenderContext } from '@storybook/store'; -import { ArgsStoryFn } from '@storybook/csf'; +import type { RenderContext } from '@storybook/store'; +import type { ArgsStoryFn } from '@storybook/csf'; import { renderNgApp } from './angular/helpers'; -import { AngularFramework } from './types-6-0'; +import type { AngularFramework } from './types-6-0'; import { RendererFactory } from './angular-beta/RendererFactory'; diff --git a/app/angular/src/client/preview/types-6-0.ts b/app/angular/src/client/preview/types-6-0.ts index 86bd12d15131..7e4372d14490 100644 --- a/app/angular/src/client/preview/types-6-0.ts +++ b/app/angular/src/client/preview/types-6-0.ts @@ -1,4 +1,4 @@ -import { +import type { Args, Parameters as DefaultParameters, StoryContext as DefaultStoryContext, @@ -7,7 +7,7 @@ import { AnnotatedStoryFn, } from '@storybook/csf'; -import { StoryFnAngularReturnType } from './types'; +import type { StoryFnAngularReturnType } from './types'; export type { Args, ArgTypes } from '@storybook/csf'; diff --git a/app/angular/src/client/preview/types-7-0.ts b/app/angular/src/client/preview/types-7-0.ts index b88051446a9d..2af743156fb7 100644 --- a/app/angular/src/client/preview/types-7-0.ts +++ b/app/angular/src/client/preview/types-7-0.ts @@ -1,5 +1,4 @@ -import { Args } from '@storybook/csf'; - +import type { Args } from '@storybook/csf'; import type { StoryObj } from './types-6-0'; export type { StoryFn, StoryObj, Meta } from './types-6-0'; diff --git a/app/angular/src/server/__mocks-ng-workspace__/minimal-config/angular.json b/app/angular/src/server/__mocks-ng-workspace__/minimal-config/angular.json index ac7d21f9eb2c..f3dcfcd45586 100644 --- a/app/angular/src/server/__mocks-ng-workspace__/minimal-config/angular.json +++ b/app/angular/src/server/__mocks-ng-workspace__/minimal-config/angular.json @@ -3,6 +3,7 @@ "projects": { "foo-project": { "root": "", + "sourceRoot": "src", "architect": { "build": { "options": { diff --git a/app/angular/src/server/__mocks-ng-workspace__/minimal-config/tsconfig.json b/app/angular/src/server/__mocks-ng-workspace__/minimal-config/tsconfig.json index ed46a09da328..7baff160a40c 100644 --- a/app/angular/src/server/__mocks-ng-workspace__/minimal-config/tsconfig.json +++ b/app/angular/src/server/__mocks-ng-workspace__/minimal-config/tsconfig.json @@ -8,6 +8,9 @@ "esModuleInterop": true, "skipLibCheck": true, "target": "es5", - "lib": ["es2017", "dom"] + "lib": [ + "es2017", + "dom" + ] } -} +} \ No newline at end of file diff --git a/app/angular/src/server/__mocks-ng-workspace__/some-config/angular.json b/app/angular/src/server/__mocks-ng-workspace__/some-config/angular.json index 3d3cb9cde581..358ec4f98f18 100644 --- a/app/angular/src/server/__mocks-ng-workspace__/some-config/angular.json +++ b/app/angular/src/server/__mocks-ng-workspace__/some-config/angular.json @@ -3,6 +3,7 @@ "projects": { "foo-project": { "root": "", + "sourceRoot": "src", "architect": { "build": { "options": { diff --git a/app/angular/src/server/__mocks-ng-workspace__/some-config/tsconfig.json b/app/angular/src/server/__mocks-ng-workspace__/some-config/tsconfig.json index ed46a09da328..7baff160a40c 100644 --- a/app/angular/src/server/__mocks-ng-workspace__/some-config/tsconfig.json +++ b/app/angular/src/server/__mocks-ng-workspace__/some-config/tsconfig.json @@ -8,6 +8,9 @@ "esModuleInterop": true, "skipLibCheck": true, "target": "es5", - "lib": ["es2017", "dom"] + "lib": [ + "es2017", + "dom" + ] } -} +} \ No newline at end of file diff --git a/app/angular/src/server/__mocks-ng-workspace__/with-angularBrowserTarget/angular.json b/app/angular/src/server/__mocks-ng-workspace__/with-angularBrowserTarget/angular.json index 06a1590a183c..f55b743522a1 100644 --- a/app/angular/src/server/__mocks-ng-workspace__/with-angularBrowserTarget/angular.json +++ b/app/angular/src/server/__mocks-ng-workspace__/with-angularBrowserTarget/angular.json @@ -3,6 +3,7 @@ "projects": { "foo-project": { "root": "", + "sourceRoot": "src", "architect": { "build": { "options": { @@ -12,13 +13,48 @@ } } }, + "no-confs-project": { + "root": "", + "sourceRoot": "src", + "architect": { + "target-build": { + "options": { + "tsConfig": "src/tsconfig.app.json", + "assets": [] + } + } + } + }, + "no-target-conf-project": { + "root": "", + "sourceRoot": "src", + "architect": { + "target-build": { + "options": { + "tsConfig": "src/tsconfig.app.json", + "assets": [] + }, + "configurations": { + "other-conf": { + "styles": ["src/styles.css"] + } + } + } + } + }, "target-project": { "root": "", + "sourceRoot": "src", "architect": { "target-build": { "options": { "tsConfig": "src/tsconfig.app.json", "assets": [] + }, + "configurations": { + "target-conf": { + "styles": ["src/styles.css"] + } } } } diff --git a/app/angular/src/server/__mocks-ng-workspace__/with-angularBrowserTarget/src/styles.css b/app/angular/src/server/__mocks-ng-workspace__/with-angularBrowserTarget/src/styles.css new file mode 100644 index 000000000000..25357ee7cc98 --- /dev/null +++ b/app/angular/src/server/__mocks-ng-workspace__/with-angularBrowserTarget/src/styles.css @@ -0,0 +1,2 @@ +.class { +} diff --git a/app/angular/src/server/__mocks-ng-workspace__/with-angularBrowserTarget/tsconfig.json b/app/angular/src/server/__mocks-ng-workspace__/with-angularBrowserTarget/tsconfig.json index ed46a09da328..7baff160a40c 100644 --- a/app/angular/src/server/__mocks-ng-workspace__/with-angularBrowserTarget/tsconfig.json +++ b/app/angular/src/server/__mocks-ng-workspace__/with-angularBrowserTarget/tsconfig.json @@ -8,6 +8,9 @@ "esModuleInterop": true, "skipLibCheck": true, "target": "es5", - "lib": ["es2017", "dom"] + "lib": [ + "es2017", + "dom" + ] } -} +} \ No newline at end of file diff --git a/app/angular/src/server/__mocks-ng-workspace__/with-lib/projects/pattern-lib/tsconfig.lib.json b/app/angular/src/server/__mocks-ng-workspace__/with-lib/projects/pattern-lib/tsconfig.lib.json index 6e06ad542ed3..557265aa5b56 100644 --- a/app/angular/src/server/__mocks-ng-workspace__/with-lib/projects/pattern-lib/tsconfig.lib.json +++ b/app/angular/src/server/__mocks-ng-workspace__/with-lib/projects/pattern-lib/tsconfig.lib.json @@ -2,6 +2,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "baseUrl": ".", "outDir": "../../out-tsc/lib", "target": "es2015", "declaration": true, diff --git a/app/angular/src/server/__mocks-ng-workspace__/with-lib/tsconfig.json b/app/angular/src/server/__mocks-ng-workspace__/with-lib/tsconfig.json index ed46a09da328..7baff160a40c 100644 --- a/app/angular/src/server/__mocks-ng-workspace__/with-lib/tsconfig.json +++ b/app/angular/src/server/__mocks-ng-workspace__/with-lib/tsconfig.json @@ -8,6 +8,9 @@ "esModuleInterop": true, "skipLibCheck": true, "target": "es5", - "lib": ["es2017", "dom"] + "lib": [ + "es2017", + "dom" + ] } -} +} \ No newline at end of file diff --git a/app/angular/src/server/__mocks-ng-workspace__/with-nx-workspace/tsconfig.json b/app/angular/src/server/__mocks-ng-workspace__/with-nx-workspace/tsconfig.json index 4c19c82b6bab..524035cf5290 100644 --- a/app/angular/src/server/__mocks-ng-workspace__/with-nx-workspace/tsconfig.json +++ b/app/angular/src/server/__mocks-ng-workspace__/with-nx-workspace/tsconfig.json @@ -1,5 +1,7 @@ { - "include": ["./src"], + "include": [ + "./src" + ], "compilerOptions": { "sourceMap": true, "moduleResolution": "node", @@ -9,6 +11,9 @@ "esModuleInterop": true, "skipLibCheck": true, "target": "es5", - "lib": ["es2017", "dom"] + "lib": [ + "es2017", + "dom" + ] } -} +} \ No newline at end of file diff --git a/app/angular/src/server/__mocks-ng-workspace__/with-nx-workspace/workspace.json b/app/angular/src/server/__mocks-ng-workspace__/with-nx-workspace/workspace.json index 39f1562a36a7..9d9fc9b3ef36 100644 --- a/app/angular/src/server/__mocks-ng-workspace__/with-nx-workspace/workspace.json +++ b/app/angular/src/server/__mocks-ng-workspace__/with-nx-workspace/workspace.json @@ -3,6 +3,7 @@ "projects": { "foo-project": { "root": "", + "sourceRoot": "src", "architect": { "build": { "options": { diff --git a/app/angular/src/server/__mocks-ng-workspace__/with-nx/angular.json b/app/angular/src/server/__mocks-ng-workspace__/with-nx/angular.json index 39f1562a36a7..9d9fc9b3ef36 100644 --- a/app/angular/src/server/__mocks-ng-workspace__/with-nx/angular.json +++ b/app/angular/src/server/__mocks-ng-workspace__/with-nx/angular.json @@ -3,6 +3,7 @@ "projects": { "foo-project": { "root": "", + "sourceRoot": "src", "architect": { "build": { "options": { diff --git a/app/angular/src/server/__mocks-ng-workspace__/with-nx/tsconfig.json b/app/angular/src/server/__mocks-ng-workspace__/with-nx/tsconfig.json index 4c19c82b6bab..524035cf5290 100644 --- a/app/angular/src/server/__mocks-ng-workspace__/with-nx/tsconfig.json +++ b/app/angular/src/server/__mocks-ng-workspace__/with-nx/tsconfig.json @@ -1,5 +1,7 @@ { - "include": ["./src"], + "include": [ + "./src" + ], "compilerOptions": { "sourceMap": true, "moduleResolution": "node", @@ -9,6 +11,9 @@ "esModuleInterop": true, "skipLibCheck": true, "target": "es5", - "lib": ["es2017", "dom"] + "lib": [ + "es2017", + "dom" + ] } -} +} \ No newline at end of file diff --git a/app/angular/src/server/__mocks-ng-workspace__/with-options-styles/angular.json b/app/angular/src/server/__mocks-ng-workspace__/with-options-styles/angular.json index 39f1562a36a7..9d9fc9b3ef36 100644 --- a/app/angular/src/server/__mocks-ng-workspace__/with-options-styles/angular.json +++ b/app/angular/src/server/__mocks-ng-workspace__/with-options-styles/angular.json @@ -3,6 +3,7 @@ "projects": { "foo-project": { "root": "", + "sourceRoot": "src", "architect": { "build": { "options": { diff --git a/app/angular/src/server/__mocks-ng-workspace__/with-options-styles/tsconfig.json b/app/angular/src/server/__mocks-ng-workspace__/with-options-styles/tsconfig.json index ed46a09da328..7baff160a40c 100644 --- a/app/angular/src/server/__mocks-ng-workspace__/with-options-styles/tsconfig.json +++ b/app/angular/src/server/__mocks-ng-workspace__/with-options-styles/tsconfig.json @@ -8,6 +8,9 @@ "esModuleInterop": true, "skipLibCheck": true, "target": "es5", - "lib": ["es2017", "dom"] + "lib": [ + "es2017", + "dom" + ] } -} +} \ No newline at end of file diff --git a/app/angular/src/server/__mocks-ng-workspace__/without-projects-entry/projects/pattern-lib/tsconfig.lib.json b/app/angular/src/server/__mocks-ng-workspace__/without-projects-entry/projects/pattern-lib/tsconfig.lib.json index 6e06ad542ed3..557265aa5b56 100644 --- a/app/angular/src/server/__mocks-ng-workspace__/without-projects-entry/projects/pattern-lib/tsconfig.lib.json +++ b/app/angular/src/server/__mocks-ng-workspace__/without-projects-entry/projects/pattern-lib/tsconfig.lib.json @@ -2,6 +2,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "baseUrl": ".", "outDir": "../../out-tsc/lib", "target": "es2015", "declaration": true, diff --git a/app/angular/src/server/__mocks-ng-workspace__/without-projects-entry/tsconfig.json b/app/angular/src/server/__mocks-ng-workspace__/without-projects-entry/tsconfig.json index ed46a09da328..7baff160a40c 100644 --- a/app/angular/src/server/__mocks-ng-workspace__/without-projects-entry/tsconfig.json +++ b/app/angular/src/server/__mocks-ng-workspace__/without-projects-entry/tsconfig.json @@ -8,6 +8,9 @@ "esModuleInterop": true, "skipLibCheck": true, "target": "es5", - "lib": ["es2017", "dom"] + "lib": [ + "es2017", + "dom" + ] } -} +} \ No newline at end of file diff --git a/app/angular/src/server/__mocks-ng-workspace__/without-tsConfig/tsconfig.json b/app/angular/src/server/__mocks-ng-workspace__/without-tsConfig/tsconfig.json index ed46a09da328..7baff160a40c 100644 --- a/app/angular/src/server/__mocks-ng-workspace__/without-tsConfig/tsconfig.json +++ b/app/angular/src/server/__mocks-ng-workspace__/without-tsConfig/tsconfig.json @@ -8,6 +8,9 @@ "esModuleInterop": true, "skipLibCheck": true, "target": "es5", - "lib": ["es2017", "dom"] + "lib": [ + "es2017", + "dom" + ] } -} +} \ No newline at end of file diff --git a/app/angular/src/server/angular-cli-webpack-12.2.x.d.ts b/app/angular/src/server/angular-cli-webpack-12.2.x.d.ts new file mode 100644 index 000000000000..b2f79e4d963a --- /dev/null +++ b/app/angular/src/server/angular-cli-webpack-12.2.x.d.ts @@ -0,0 +1,7 @@ +import { JsonObject } from '@angular-devkit/core'; +import { BuilderContext } from '@angular-devkit/architect'; + +export declare function getWebpackConfig( + baseConfig: any, + options: { builderOptions: JsonObject; builderContext: BuilderContext } +): any; diff --git a/app/angular/src/server/angular-cli-webpack-12.2.x.js b/app/angular/src/server/angular-cli-webpack-12.2.x.js new file mode 100644 index 000000000000..bb3f12011b8a --- /dev/null +++ b/app/angular/src/server/angular-cli-webpack-12.2.x.js @@ -0,0 +1,85 @@ +// Private angular devkit stuff +const { + generateI18nBrowserWebpackConfigFromContext, +} = require('@angular-devkit/build-angular/src/utils/webpack-browser-config'); +const { + getCommonConfig, + getStylesConfig, + getTypeScriptConfig, +} = require('@angular-devkit/build-angular/src/webpack/configs'); +const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin'); + +const { filterOutStylingRules } = require('./utils/filter-out-styling-rules'); + +/** + * Extract webpack config from angular-cli 12.2.x + * ⚠️ This file is in JavaScript to not use TypeScript. Because current storybook TypeScript version is not compatible with Angular CLI. + * FIXME: Try another way with TypeScript on future storybook version (7 maybe 🤞) + * + * @param {*} baseConfig Previous webpack config from storybook + * @param {*} options { builderOptions, builderContext } + */ +exports.getWebpackConfig = async (baseConfig, { builderOptions, builderContext }) => { + /** + * Get angular-cli Webpack config + */ + const { config: cliConfig } = await generateI18nBrowserWebpackConfigFromContext( + { + // Default options + index: 'noop-index', + main: 'noop-main', + outputPath: 'noop-out', + + // Options provided by user + ...builderOptions, + + // Fixed options + optimization: false, + namedChunks: false, + progress: false, + buildOptimizer: false, + aot: false, + }, + builderContext, + (wco) => [getCommonConfig(wco), getStylesConfig(wco), getTypeScriptConfig(wco)] + ); + + /** + * Merge baseConfig Webpack with angular-cli Webpack + */ + const entry = [ + ...baseConfig.entry, + ...(cliConfig.entry.styles ?? []), + ...(cliConfig.entry.polyfills ?? []), + ]; + + // Don't use storybooks styling rules because we have to use rules created by @angular-devkit/build-angular + // because @angular-devkit/build-angular created rules have include/exclude for global style files. + const rulesExcludingStyles = filterOutStylingRules(baseConfig); + const module = { + ...baseConfig.module, + rules: [...cliConfig.module.rules, ...rulesExcludingStyles], + }; + + const plugins = [...(cliConfig.plugins ?? []), ...baseConfig.plugins]; + + const resolve = { + ...baseConfig.resolve, + modules: Array.from(new Set([...baseConfig.resolve.modules, ...cliConfig.resolve.modules])), + plugins: [ + new TsconfigPathsPlugin({ + configFile: builderOptions.tsConfig, + mainFields: ['browser', 'module', 'main'], + }), + ], + }; + + return { + ...baseConfig, + entry, + module, + plugins, + resolve, + resolveLoader: cliConfig.resolveLoader, + }; +}; diff --git a/app/angular/src/server/angular-cli-webpack-13.x.x.d.ts b/app/angular/src/server/angular-cli-webpack-13.x.x.d.ts new file mode 100644 index 000000000000..b2f79e4d963a --- /dev/null +++ b/app/angular/src/server/angular-cli-webpack-13.x.x.d.ts @@ -0,0 +1,7 @@ +import { JsonObject } from '@angular-devkit/core'; +import { BuilderContext } from '@angular-devkit/architect'; + +export declare function getWebpackConfig( + baseConfig: any, + options: { builderOptions: JsonObject; builderContext: BuilderContext } +): any; diff --git a/app/angular/src/server/angular-cli-webpack-13.x.x.js b/app/angular/src/server/angular-cli-webpack-13.x.x.js new file mode 100644 index 000000000000..c8c87041cf20 --- /dev/null +++ b/app/angular/src/server/angular-cli-webpack-13.x.x.js @@ -0,0 +1,90 @@ +// Private angular devkit stuff +const { + generateI18nBrowserWebpackConfigFromContext, +} = require('@angular-devkit/build-angular/src/utils/webpack-browser-config'); +const { + getCommonConfig, + getStylesConfig, + getDevServerConfig, + getTypeScriptConfig, +} = require('@angular-devkit/build-angular/src/webpack/configs'); +const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin'); + +const { filterOutStylingRules } = require('./utils/filter-out-styling-rules'); + +/** + * Extract webpack config from angular-cli 13.x.x + * ⚠️ This file is in JavaScript to not use TypeScript. Because current storybook TypeScript version is not compatible with Angular CLI. + * FIXME: Try another way with TypeScript on future storybook version (7 maybe 🤞) + * + * @param {*} baseConfig Previous webpack config from storybook + * @param {*} options { builderOptions, builderContext } + */ +exports.getWebpackConfig = async (baseConfig, { builderOptions, builderContext }) => { + /** + * Get angular-cli Webpack config + */ + const { config: cliConfig } = await generateI18nBrowserWebpackConfigFromContext( + { + // Default options + index: 'noop-index', + main: 'noop-main', + outputPath: 'noop-out', + + // Options provided by user + ...builderOptions, + + // Fixed options + optimization: false, + namedChunks: false, + progress: false, + buildOptimizer: false, + aot: false, + }, + builderContext, + (wco) => [ + getCommonConfig(wco), + getStylesConfig(wco), + getTypeScriptConfig ? getTypeScriptConfig(wco) : getDevServerConfig(wco), + ] + ); + + /** + * Merge baseConfig Webpack with angular-cli Webpack + */ + const entry = [ + ...baseConfig.entry, + ...(cliConfig.entry.styles ?? []), + ...(cliConfig.entry.polyfills ?? []), + ]; + + // Don't use storybooks styling rules because we have to use rules created by @angular-devkit/build-angular + // because @angular-devkit/build-angular created rules have include/exclude for global style files. + const rulesExcludingStyles = filterOutStylingRules(baseConfig); + const module = { + ...baseConfig.module, + rules: [...cliConfig.module.rules, ...rulesExcludingStyles], + }; + + const plugins = [...(cliConfig.plugins ?? []), ...baseConfig.plugins]; + + const resolve = { + ...baseConfig.resolve, + modules: Array.from(new Set([...baseConfig.resolve.modules, ...cliConfig.resolve.modules])), + plugins: [ + new TsconfigPathsPlugin({ + configFile: builderOptions.tsConfig, + mainFields: ['browser', 'module', 'main'], + }), + ], + }; + + return { + ...baseConfig, + entry, + module, + plugins, + resolve, + resolveLoader: cliConfig.resolveLoader, + }; +}; diff --git a/app/angular/src/server/angular-cli-webpack-older.ts b/app/angular/src/server/angular-cli-webpack-older.ts new file mode 100644 index 000000000000..27dc5ff6be64 --- /dev/null +++ b/app/angular/src/server/angular-cli-webpack-older.ts @@ -0,0 +1,145 @@ +import webpack from 'webpack'; +import { logger } from '@storybook/node-logger'; +import TsconfigPathsPlugin from 'tsconfig-paths-webpack-plugin'; +import { targetFromTargetString, Target } from '@angular-devkit/architect'; + +import { workspaces } from '@angular-devkit/core'; +import { + findAngularProjectTarget, + getDefaultProjectName, + readAngularWorkspaceConfig, +} from './angular-read-workspace'; +import { + AngularCliWebpackConfig, + extractAngularCliWebpackConfig, +} from './angular-devkit-build-webpack'; +import { filterOutStylingRules } from './utils/filter-out-styling-rules'; +import { PresetOptions } from './options'; + +/** + * Old way currently support version lower than 12.2.x + */ +export async function getWebpackConfig(baseConfig: webpack.Configuration, options: PresetOptions) { + const dirToSearch = process.cwd(); + + // Read angular workspace + let workspaceConfig; + try { + workspaceConfig = await readAngularWorkspaceConfig(dirToSearch); + } catch (error) { + logger.error( + `=> Could not find angular workspace config (angular.json) on this path "${dirToSearch}"` + ); + logger.info(`=> Fail to load angular-cli config. Using base config`); + return baseConfig; + } + + // Find angular project target + let project: workspaces.ProjectDefinition; + let target: workspaces.TargetDefinition; + let confName: string; + try { + // Default behavior when `angularBrowserTarget` are not explicitly defined to null + if (options.angularBrowserTarget !== null) { + const browserTarget = options.angularBrowserTarget + ? targetFromTargetString(options.angularBrowserTarget) + : ({ + configuration: undefined, + project: getDefaultProjectName(workspaceConfig), + target: 'build', + } as Target); + + const fondProject = findAngularProjectTarget( + workspaceConfig, + browserTarget.project, + browserTarget.target + ); + project = fondProject.project; + target = fondProject.target; + confName = browserTarget.configuration; + + logger.info( + `=> Using angular project "${browserTarget.project}:${browserTarget.target}${ + confName ? `:${confName}` : '' + }" for configuring Storybook` + ); + } + // Start storybook when only tsConfig is provided. + if (options.angularBrowserTarget === null && options.tsConfig) { + logger.info(`=> Using default angular project with "tsConfig:${options.tsConfig}"`); + + project = { root: '', extensions: {}, targets: undefined }; + target = { builder: '', options: { tsConfig: options.tsConfig } }; + } + } catch (error) { + logger.error(`=> Could not find angular project: ${error.message}`); + logger.info(`=> Fail to load angular-cli config. Using base config`); + return baseConfig; + } + + // Use angular-cli to get some webpack config + let angularCliWebpackConfig: AngularCliWebpackConfig; + try { + angularCliWebpackConfig = await extractAngularCliWebpackConfig( + dirToSearch, + project, + target, + confName + ); + logger.info(`=> Using angular-cli webpack config`); + } catch (error) { + logger.error(`=> Could not get angular cli webpack config`); + throw error; + } + + return mergeAngularCliWebpackConfig(angularCliWebpackConfig, baseConfig); +} + +function mergeAngularCliWebpackConfig( + { cliCommonWebpackConfig, cliStyleWebpackConfig, tsConfigPath }: AngularCliWebpackConfig, + baseConfig: webpack.Configuration +) { + // Don't use storybooks styling rules because we have to use rules created by @angular-devkit/build-angular + // because @angular-devkit/build-angular created rules have include/exclude for global style files. + const rulesExcludingStyles = filterOutStylingRules(baseConfig); + + // styleWebpackConfig.entry adds global style files to the webpack context + const entry = [ + ...(baseConfig.entry as string[]), + ...Object.values(cliStyleWebpackConfig.entry).reduce((acc, item) => acc.concat(item), []), + ]; + + const module = { + ...baseConfig.module, + rules: [...cliStyleWebpackConfig.module.rules, ...rulesExcludingStyles], + }; + + // We use cliCommonConfig plugins to serve static assets files. + const plugins = [ + ...cliStyleWebpackConfig.plugins, + ...cliCommonWebpackConfig.plugins, + ...baseConfig.plugins, + ]; + + const resolve = { + ...baseConfig.resolve, + modules: Array.from( + new Set([...baseConfig.resolve.modules, ...cliCommonWebpackConfig.resolve.modules]) + ), + plugins: [ + new TsconfigPathsPlugin({ + configFile: tsConfigPath, + mainFields: ['browser', 'module', 'main'], + }), + ], + }; + + return { + ...baseConfig, + entry, + module, + plugins, + resolve, + resolveLoader: cliCommonWebpackConfig.resolveLoader, + }; +} diff --git a/app/angular/src/server/angular-devkit-build-webpack.ts b/app/angular/src/server/angular-devkit-build-webpack.ts index bd176b118ff4..cace158b8e06 100644 --- a/app/angular/src/server/angular-devkit-build-webpack.ts +++ b/app/angular/src/server/angular-devkit-build-webpack.ts @@ -47,28 +47,44 @@ const importAngularCliWebpackConfigGenerator = (): { }; }; -const importAngularCliReadTsconfigUtil = (): typeof import('@angular-devkit/build-angular/src/utils/read-tsconfig') => { - // First we look for webpack config according to directory structure of Angular 11 - if (moduleIsAvailable('@angular-devkit/build-angular/src/utils/read-tsconfig')) { - // eslint-disable-next-line global-require - return require('@angular-devkit/build-angular/src/utils/read-tsconfig'); - } - // We fallback on directory structure of Angular 10 (and below) - if ( - moduleIsAvailable('@angular-devkit/build-angular/src/angular-cli-files/utilities/read-tsconfig') - ) { - // eslint-disable-next-line global-require - return require('@angular-devkit/build-angular/src/angular-cli-files/utilities/read-tsconfig'); - } - throw new Error('ReadTsconfig not found in "@angular-devkit/build-angular"'); -}; +const importAngularCliReadTsconfigUtil = + (): typeof import('@angular-devkit/build-angular/src/utils/read-tsconfig') => { + // First we look for webpack config according to directory structure of Angular 11 + if (moduleIsAvailable('@angular-devkit/build-angular/src/utils/read-tsconfig')) { + // eslint-disable-next-line global-require + return require('@angular-devkit/build-angular/src/utils/read-tsconfig'); + } + // We fallback on directory structure of Angular 10 (and below) + if ( + moduleIsAvailable( + '@angular-devkit/build-angular/src/angular-cli-files/utilities/read-tsconfig' + ) + ) { + // eslint-disable-next-line global-require + return require('@angular-devkit/build-angular/src/angular-cli-files/utilities/read-tsconfig'); + } + throw new Error('ReadTsconfig not found in "@angular-devkit/build-angular"'); + }; const buildWebpackConfigOptions = async ( dirToSearch: string, project: workspaces.ProjectDefinition, - target: workspaces.TargetDefinition + target: workspaces.TargetDefinition, + confName?: string ): Promise => { - const { options: projectBuildOptions = {} } = target; + let conf: Record = {}; + + if (confName) { + if (!target.configurations) { + throw new Error('Missing "configurations" section in project target'); + } + if (!target.configurations[confName]) { + throw new Error(`Missing required configuration in project target. Check "${confName}"`); + } + conf = target.configurations[confName]; + } + + const projectBuildOptions = { ...target.options, ...conf }; const requiredOptions = ['tsConfig']; if (!requiredOptions.every((key) => !!projectBuildOptions[key])) { @@ -124,9 +140,9 @@ const buildWebpackConfigOptions = async ( return { root: getSystemPath(workspaceRootNormalized), // The dependency of `@angular-devkit/build-angular` to `@angular-devkit/core` is not exactly the same version as the one for storybook (node modules of node modules ^^) - logger: (createConsoleLogger() as unknown) as WebpackConfigOptions['logger'], + logger: createConsoleLogger() as unknown as WebpackConfigOptions['logger'], projectRoot: getSystemPath(projectRootNormalized), - sourceRoot: getSystemPath(sourceRootNormalized), + sourceRoot: sourceRootNormalized ? getSystemPath(sourceRootNormalized) : undefined, buildOptions, tsConfig, tsConfigPath, @@ -159,11 +175,17 @@ export type AngularCliWebpackConfig = { export async function extractAngularCliWebpackConfig( dirToSearch: string, project: workspaces.ProjectDefinition, - target: workspaces.TargetDefinition + target: workspaces.TargetDefinition, + confName?: string ): Promise { const { getCommonConfig, getStylesConfig } = importAngularCliWebpackConfigGenerator(); - const webpackConfigOptions = await buildWebpackConfigOptions(dirToSearch, project, target); + const webpackConfigOptions = await buildWebpackConfigOptions( + dirToSearch, + project, + target, + confName + ); const cliCommonConfig = getCommonConfig(webpackConfigOptions); const cliStyleConfig = getStylesConfig(webpackConfigOptions); diff --git a/app/angular/src/server/create-fork-ts-checker-plugin.ts b/app/angular/src/server/create-fork-ts-checker-plugin.ts index 941dd81031a4..329609b8f2b6 100644 --- a/app/angular/src/server/create-fork-ts-checker-plugin.ts +++ b/app/angular/src/server/create-fork-ts-checker-plugin.ts @@ -8,7 +8,7 @@ export default function (tsLoaderOptions: Partial) { if (tsLoaderOptions && tsLoaderOptions.configFile) { return new ForkTsCheckerWebpackPlugin({ tsconfig: tsLoaderOptions.configFile, - async: false, + async: true, }); } diff --git a/app/angular/src/server/framework-preset-angular-cli.test.ts b/app/angular/src/server/framework-preset-angular-cli.test.ts index 6fbf8498b376..b5e1b86eee2b 100644 --- a/app/angular/src/server/framework-preset-angular-cli.test.ts +++ b/app/angular/src/server/framework-preset-angular-cli.test.ts @@ -1,7 +1,10 @@ -/* eslint-disable jest/no-interpolation-in-snapshots */ -import { Configuration } from 'webpack'; +import path from 'path'; +import type { Configuration } from 'webpack'; import { logger } from '@storybook/node-logger'; -import { Options, webpackFinal } from './framework-preset-angular-cli'; +import { normalize, getSystemPath } from '@angular-devkit/core'; +import TsconfigPathsPlugin from 'tsconfig-paths-webpack-plugin'; +import { webpackFinal } from './framework-preset-angular-cli'; +import { PresetOptions } from './options'; const testPath = __dirname; @@ -19,15 +22,15 @@ afterEach(() => { }); function initMockWorkspace(name: string) { - workspaceRoot = `${testPath}/__mocks-ng-workspace__/${name}`; + workspaceRoot = path.join(__dirname, '__mocks-ng-workspace__', name); cwdSpy.mockReturnValue(workspaceRoot); } describe('framework-preset-angular-cli', () => { - let options: Options; + let options: PresetOptions; beforeEach(() => { - options = {} as Options; + options = {} as PresetOptions; }); describe('without angular.json', () => { @@ -42,7 +45,9 @@ describe('framework-preset-angular-cli', () => { const config = await webpackFinal(webpackBaseConfig, options); - expect(logger.info).toHaveBeenCalledWith('=> Loading angular-cli config'); + expect(logger.info).toHaveBeenCalledWith( + '=> Loading angular-cli config for angular lower than 12.2.0' + ); expect(logger.error).toHaveBeenCalledWith( `=> Could not find angular workspace config (angular.json) on this path "${workspaceRoot}"` ); @@ -60,7 +65,9 @@ describe('framework-preset-angular-cli', () => { const config = await webpackFinal(webpackBaseConfig, options); - expect(logger.info).toHaveBeenCalledWith('=> Loading angular-cli config'); + expect(logger.info).toHaveBeenCalledWith( + '=> Loading angular-cli config for angular lower than 12.2.0' + ); expect(logger.error).toHaveBeenCalledWith( '=> Could not find angular project: No angular projects found' ); @@ -81,7 +88,9 @@ describe('framework-preset-angular-cli', () => { const config = await webpackFinal(webpackBaseConfig, options); - expect(logger.info).toHaveBeenCalledWith('=> Loading angular-cli config'); + expect(logger.info).toHaveBeenCalledWith( + '=> Loading angular-cli config for angular lower than 12.2.0' + ); expect(logger.error).toHaveBeenCalledWith( '=> Could not find angular project: No angular projects found' ); @@ -102,7 +111,9 @@ describe('framework-preset-angular-cli', () => { const config = await webpackFinal(webpackBaseConfig, options); - expect(logger.info).toHaveBeenCalledWith('=> Loading angular-cli config'); + expect(logger.info).toHaveBeenCalledWith( + '=> Loading angular-cli config for angular lower than 12.2.0' + ); expect(logger.error).toHaveBeenCalledWith( '=> Could not find angular project: "missing-project" project is not found in angular.json' ); @@ -123,7 +134,9 @@ describe('framework-preset-angular-cli', () => { const config = await webpackFinal(webpackBaseConfig, options); - expect(logger.info).toHaveBeenCalledWith('=> Loading angular-cli config'); + expect(logger.info).toHaveBeenCalledWith( + '=> Loading angular-cli config for angular lower than 12.2.0' + ); expect(logger.error).toHaveBeenCalledWith( '=> Could not find angular project: "build" target is not found in "foo-project" project' ); @@ -155,7 +168,10 @@ describe('framework-preset-angular-cli', () => { await webpackFinal(baseWebpackConfig, options); expect(logger.info).toHaveBeenCalledTimes(3); - expect(logger.info).toHaveBeenNthCalledWith(1, '=> Loading angular-cli config'); + expect(logger.info).toHaveBeenNthCalledWith( + 1, + '=> Loading angular-cli config for angular lower than 12.2.0' + ); expect(logger.info).toHaveBeenNthCalledWith( 2, '=> Using angular project "foo-project:build" for configuring Storybook' @@ -175,7 +191,11 @@ describe('framework-preset-angular-cli', () => { ...baseWebpackConfig.resolve, modules: expect.arrayContaining(baseWebpackConfig.resolve.modules), // the base resolve.plugins are not kept 🤷‍♂️ - plugins: expect.not.arrayContaining(baseWebpackConfig.resolve.plugins), + plugins: expect.arrayContaining([ + expect.objectContaining({ + absoluteBaseUrl: expect.any(String), + } as TsconfigPathsPlugin), + ]), }, resolveLoader: expect.anything(), }); @@ -244,7 +264,7 @@ describe('framework-preset-angular-cli', () => { expect(webpackFinalConfig.resolve.modules).toEqual([ ...baseWebpackConfig.resolve.modules, - `${workspaceRoot}/src`, + getSystemPath(normalize(path.join(workspaceRoot, 'src'))).replace(/\\/g, '/'), ]); }); @@ -255,7 +275,9 @@ describe('framework-preset-angular-cli', () => { expect(webpackFinalConfig.resolve.plugins).toMatchInlineSnapshot(` Array [ TsconfigPathsPlugin { - "absoluteBaseUrl": "${workspaceRoot}/src/", + "absoluteBaseUrl": "${( + getSystemPath(normalize(path.join(workspaceRoot, 'src'))) + path.sep + ).replace(/\\/g, '\\\\')}", "baseUrl": "./", "extensions": Array [ ".ts", @@ -288,8 +310,8 @@ describe('framework-preset-angular-cli', () => { ...baseWebpackConfig, entry: [ ...(baseWebpackConfig.entry as any[]), - `${workspaceRoot}/src/styles.css`, - `${workspaceRoot}/src/styles.scss`, + path.join(workspaceRoot, 'src', 'styles.css'), + path.join(workspaceRoot, 'src', 'styles.scss'), ], module: { ...baseWebpackConfig.module, rules: expect.anything() }, plugins: expect.anything(), @@ -306,45 +328,48 @@ describe('framework-preset-angular-cli', () => { it('should set webpack "module.rules"', async () => { const baseWebpackConfig = newWebpackConfiguration(); const webpackFinalConfig = await webpackFinal(baseWebpackConfig, options); - + const stylePaths = [ + path.join(workspaceRoot, 'src', 'styles.css'), + path.join(workspaceRoot, 'src', 'styles.scss'), + ]; expect(webpackFinalConfig.module.rules).toEqual([ { - exclude: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + exclude: stylePaths, test: /\.css$/, use: expect.anything(), }, { - exclude: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + exclude: stylePaths, test: /\.scss$|\.sass$/, use: expect.anything(), }, { - exclude: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + exclude: stylePaths, test: /\.less$/, use: expect.anything(), }, { - exclude: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + exclude: stylePaths, test: /\.styl$/, use: expect.anything(), }, { - include: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + include: stylePaths, test: /\.css$/, use: expect.anything(), }, { - include: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + include: stylePaths, test: /\.scss$|\.sass$/, use: expect.anything(), }, { - include: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + include: stylePaths, test: /\.less$/, use: expect.anything(), }, { - include: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + include: stylePaths, test: /\.styl$/, use: expect.anything(), }, @@ -379,8 +404,8 @@ describe('framework-preset-angular-cli', () => { ...baseWebpackConfig, entry: [ ...(baseWebpackConfig.entry as any[]), - `${workspaceRoot}/src/styles.css`, - `${workspaceRoot}/src/styles.scss`, + path.join(workspaceRoot, 'src', 'styles.css'), + path.join(workspaceRoot, 'src', 'styles.scss'), ], module: { ...baseWebpackConfig.module, rules: expect.anything() }, plugins: expect.anything(), @@ -397,45 +422,49 @@ describe('framework-preset-angular-cli', () => { it('should set webpack "module.rules"', async () => { const baseWebpackConfig = newWebpackConfiguration(); const webpackFinalConfig = await webpackFinal(baseWebpackConfig, options); + const stylePaths = [ + path.join(workspaceRoot, 'src', 'styles.css'), + path.join(workspaceRoot, 'src', 'styles.scss'), + ]; expect(webpackFinalConfig.module.rules).toEqual([ { - exclude: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + exclude: stylePaths, test: /\.css$/, use: expect.anything(), }, { - exclude: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + exclude: stylePaths, test: /\.scss$|\.sass$/, use: expect.anything(), }, { - exclude: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + exclude: stylePaths, test: /\.less$/, use: expect.anything(), }, { - exclude: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + exclude: stylePaths, test: /\.styl$/, use: expect.anything(), }, { - include: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + include: stylePaths, test: /\.css$/, use: expect.anything(), }, { - include: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + include: stylePaths, test: /\.scss$|\.sass$/, use: expect.anything(), }, { - include: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + include: stylePaths, test: /\.less$/, use: expect.anything(), }, { - include: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + include: stylePaths, test: /\.styl$/, use: expect.anything(), }, @@ -457,8 +486,8 @@ describe('framework-preset-angular-cli', () => { ...baseWebpackConfig, entry: [ ...(baseWebpackConfig.entry as any[]), - `${workspaceRoot}/src/styles.css`, - `${workspaceRoot}/src/styles.scss`, + path.join(workspaceRoot, 'src', 'styles.css'), + path.join(workspaceRoot, 'src', 'styles.scss'), ], module: { ...baseWebpackConfig.module, rules: expect.anything() }, plugins: expect.anything(), @@ -466,7 +495,11 @@ describe('framework-preset-angular-cli', () => { ...baseWebpackConfig.resolve, modules: expect.arrayContaining(baseWebpackConfig.resolve.modules), // the base resolve.plugins are not kept 🤷‍♂️ - plugins: expect.not.arrayContaining(baseWebpackConfig.resolve.plugins), + plugins: expect.arrayContaining([ + expect.objectContaining({ + absoluteBaseUrl: expect.any(String), + } as TsconfigPathsPlugin), + ]), }, resolveLoader: expect.anything(), }); @@ -475,45 +508,49 @@ describe('framework-preset-angular-cli', () => { it('should set webpack "module.rules"', async () => { const baseWebpackConfig = newWebpackConfiguration(); const webpackFinalConfig = await webpackFinal(baseWebpackConfig, options); + const stylePaths = [ + path.join(workspaceRoot, 'src', 'styles.css'), + path.join(workspaceRoot, 'src', 'styles.scss'), + ]; expect(webpackFinalConfig.module.rules).toEqual([ { - exclude: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + exclude: stylePaths, test: /\.css$/, use: expect.anything(), }, { - exclude: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + exclude: stylePaths, test: /\.scss$|\.sass$/, use: expect.anything(), }, { - exclude: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + exclude: stylePaths, test: /\.less$/, use: expect.anything(), }, { - exclude: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + exclude: stylePaths, test: /\.styl$/, use: expect.anything(), }, { - include: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + include: stylePaths, test: /\.css$/, use: expect.anything(), }, { - include: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + include: stylePaths, test: /\.scss$|\.sass$/, use: expect.anything(), }, { - include: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + include: stylePaths, test: /\.less$/, use: expect.anything(), }, { - include: [`${workspaceRoot}/src/styles.css`, `${workspaceRoot}/src/styles.scss`], + include: stylePaths, test: /\.styl$/, use: expect.anything(), }, @@ -585,7 +622,10 @@ describe('framework-preset-angular-cli', () => { await webpackFinal(baseWebpackConfig, options); expect(logger.info).toHaveBeenCalledTimes(3); - expect(logger.info).toHaveBeenNthCalledWith(1, '=> Loading angular-cli config'); + expect(logger.info).toHaveBeenNthCalledWith( + 1, + '=> Loading angular-cli config for angular lower than 12.2.0' + ); expect(logger.info).toHaveBeenNthCalledWith( 2, '=> Using angular project "foo-project:build" for configuring Storybook' @@ -597,14 +637,17 @@ describe('framework-preset-angular-cli', () => { describe('with angularBrowserTarget option', () => { beforeEach(() => { initMockWorkspace('with-angularBrowserTarget'); - options = { angularBrowserTarget: 'target-project:target-build' } as Options; + options = { angularBrowserTarget: 'target-project:target-build' } as PresetOptions; }); it('should log', async () => { const baseWebpackConfig = newWebpackConfiguration(); await webpackFinal(baseWebpackConfig, options); expect(logger.info).toHaveBeenCalledTimes(3); - expect(logger.info).toHaveBeenNthCalledWith(1, '=> Loading angular-cli config'); + expect(logger.info).toHaveBeenNthCalledWith( + 1, + '=> Loading angular-cli config for angular lower than 12.2.0' + ); expect(logger.info).toHaveBeenNthCalledWith( 2, '=> Using angular project "target-project:target-build" for configuring Storybook' @@ -613,20 +656,98 @@ describe('framework-preset-angular-cli', () => { }); }); + describe('with angularBrowserTarget option with configuration', () => { + beforeEach(() => { + initMockWorkspace('with-angularBrowserTarget'); + }); + describe('when angular.json have the target without "configurations" section', () => { + beforeEach(() => { + options = { + angularBrowserTarget: 'no-confs-project:target-build:target-conf', + } as PresetOptions; + }); + it('throws error', async () => { + await expect(() => webpackFinal(newWebpackConfiguration(), options)).rejects.toThrowError( + 'Missing "configurations" section in project target' + ); + expect(logger.error).toHaveBeenCalledWith(`=> Could not get angular cli webpack config`); + }); + }); + describe('when angular.json have the target without required configuration', () => { + beforeEach(() => { + options = { + angularBrowserTarget: 'no-target-conf-project:target-build:target-conf', + } as PresetOptions; + }); + it('throws error', async () => { + await expect(() => webpackFinal(newWebpackConfiguration(), options)).rejects.toThrowError( + 'Missing required configuration in project target. Check "target-conf"' + ); + expect(logger.error).toHaveBeenCalledWith(`=> Could not get angular cli webpack config`); + }); + }); + describe('when angular.json have the target with required configuration', () => { + beforeEach(() => { + options = { + angularBrowserTarget: 'target-project:target-build:target-conf', + } as PresetOptions; + }); + it('should log', async () => { + const baseWebpackConfig = newWebpackConfiguration(); + await webpackFinal(baseWebpackConfig, options); + + expect(logger.info).toHaveBeenCalledTimes(3); + expect(logger.info).toHaveBeenNthCalledWith( + 1, + '=> Loading angular-cli config for angular lower than 12.2.0' + ); + expect(logger.info).toHaveBeenNthCalledWith( + 2, + '=> Using angular project "target-project:target-build:target-conf" for configuring Storybook' + ); + expect(logger.info).toHaveBeenNthCalledWith(3, '=> Using angular-cli webpack config'); + }); + it('should extends webpack base config', async () => { + const baseWebpackConfig = newWebpackConfiguration(); + const webpackFinalConfig = await webpackFinal(baseWebpackConfig, options); + + expect(webpackFinalConfig).toEqual({ + ...baseWebpackConfig, + entry: [ + ...(baseWebpackConfig.entry as any[]), + path.join(workspaceRoot, 'src', 'styles.css'), + ], + module: { ...baseWebpackConfig.module, rules: expect.anything() }, + plugins: expect.anything(), + resolve: { + ...baseWebpackConfig.resolve, + modules: expect.arrayContaining(baseWebpackConfig.resolve.modules), + // the base resolve.plugins are not kept 🤷‍♂️ + plugins: expect.not.arrayContaining(baseWebpackConfig.resolve.plugins), + }, + resolveLoader: expect.anything(), + }); + }); + }); + }); + describe('with only tsConfig option', () => { beforeEach(() => { initMockWorkspace('without-projects-entry'); options = { tsConfig: 'projects/pattern-lib/tsconfig.lib.json', angularBrowserTarget: null, - } as Options; + } as PresetOptions; }); it('should log', async () => { const baseWebpackConfig = newWebpackConfiguration(); await webpackFinal(baseWebpackConfig, options); expect(logger.info).toHaveBeenCalledTimes(3); - expect(logger.info).toHaveBeenNthCalledWith(1, '=> Loading angular-cli config'); + expect(logger.info).toHaveBeenNthCalledWith( + 1, + '=> Loading angular-cli config for angular lower than 12.2.0' + ); expect(logger.info).toHaveBeenNthCalledWith( 2, '=> Using default angular project with "tsConfig:projects/pattern-lib/tsconfig.lib.json"' @@ -645,8 +766,8 @@ const newWebpackConfiguration = ( bail: false, devtool: 'cheap-module-source-map', entry: [ - '/Users/joe/storybook/lib/core-server/dist/cjs/globals/polyfills.js', - '/Users/joe/storybook/lib/core-server/dist/cjs/globals/globals.js', + '/Users/joe/storybook/lib/core-server/dist/esm/globals/polyfills.js', + '/Users/joe/storybook/lib/core-server/dist/esm/globals/globals.js', '/Users/joe/storybook/examples/angular-cli/.storybook/storybook-init-framework-entry.js', '/Users/joe/storybook/addons/docs/dist/esm/frameworks/common/config.js-generated-other-entry.js', '/Users/joe/storybook/addons/docs/dist/esm/frameworks/angular/config.js-generated-other-entry.js', @@ -676,9 +797,6 @@ const newWebpackConfiguration = ( modules: ['node_modules'], mainFields: ['browser', 'main'], alias: { - '@emotion/core': '/Users/joe/storybook/node_modules/@emotion/core', - '@emotion/styled': '/Users/joe/storybook/node_modules/@emotion/styled', - 'emotion-theming': '/Users/joe/storybook/node_modules/emotion-theming', '@storybook/addons': '/Users/joe/storybook/lib/addons', '@storybook/api': '/Users/joe/storybook/lib/api', '@storybook/channels': '/Users/joe/storybook/lib/channels', diff --git a/app/angular/src/server/framework-preset-angular-cli.ts b/app/angular/src/server/framework-preset-angular-cli.ts index ffc90c3c9a2d..2d7d6da3eb1c 100644 --- a/app/angular/src/server/framework-preset-angular-cli.ts +++ b/app/angular/src/server/framework-preset-angular-cli.ts @@ -1,35 +1,159 @@ import webpack from 'webpack'; import { logger } from '@storybook/node-logger'; -import TsconfigPathsPlugin from 'tsconfig-paths-webpack-plugin'; -import { targetFromTargetString, Target } from '@angular-devkit/architect'; +import { targetFromTargetString, BuilderContext, Target } from '@angular-devkit/architect'; +import { sync as findUpSync } from 'find-up'; +import semver from '@storybook/semver'; +import dedent from 'ts-dedent'; -import { Options as CoreOptions } from '@storybook/core-common'; -import { workspaces } from '@angular-devkit/core'; +import { logging, JsonObject } from '@angular-devkit/core'; +import { moduleIsAvailable } from './utils/module-is-available'; +import { getWebpackConfig as getWebpackConfig12_2_x } from './angular-cli-webpack-12.2.x'; +import { getWebpackConfig as getWebpackConfig13_x_x } from './angular-cli-webpack-13.x.x'; +import { getWebpackConfig as getWebpackConfigOlder } from './angular-cli-webpack-older'; +import { PresetOptions } from './options'; import { - findAngularProjectTarget, getDefaultProjectName, + findAngularProjectTarget, readAngularWorkspaceConfig, } from './angular-read-workspace'; -import { - AngularCliWebpackConfig, - extractAngularCliWebpackConfig, -} from './angular-devkit-build-webpack'; -import { moduleIsAvailable } from './utils/module-is-available'; -import { filterOutStylingRules } from './utils/filter-out-styling-rules'; - -export type Options = CoreOptions & { - angularBrowserTarget?: string; - tsConfig?: string; -}; - -export async function webpackFinal(baseConfig: webpack.Configuration, options: Options) { - const dirToSearch = process.cwd(); +export async function webpackFinal(baseConfig: webpack.Configuration, options: PresetOptions) { if (!moduleIsAvailable('@angular-devkit/build-angular')) { logger.info('=> Using base config because "@angular-devkit/build-angular" is not installed'); return baseConfig; } - logger.info('=> Loading angular-cli config'); + + const angularCliVersion = await import('@angular/cli').then((m) => semver.coerce(m.VERSION.full)); + + /** + * Ordered array to use the specific getWebpackConfig according to some condition like angular-cli version + */ + const webpackGetterByVersions: { + info: string; + condition: boolean; + getWebpackConfig( + baseConfig: webpack.Configuration, + options: PresetOptions + ): Promise | webpack.Configuration; + }[] = [ + { + info: '=> Loading angular-cli config for angular >= 13.0.0', + condition: semver.satisfies(angularCliVersion, '>=13.0.0'), + getWebpackConfig: async (_baseConfig, _options) => { + const builderContext = getBuilderContext(_options); + const builderOptions = await getBuilderOptions(_options, builderContext); + const legacyDefaultOptions = await getLegacyDefaultBuildOptions(_options); + + return getWebpackConfig13_x_x(_baseConfig, { + builderOptions: { + watch: options.configType === 'DEVELOPMENT', + ...legacyDefaultOptions, + ...builderOptions, + }, + builderContext, + }); + }, + }, + { + info: '=> Loading angular-cli config for angular 12.2.x', + condition: semver.satisfies(angularCliVersion, '12.2.x') && options.angularBuilderContext, + getWebpackConfig: async (_baseConfig, _options) => { + const builderContext = getBuilderContext(_options); + const builderOptions = await getBuilderOptions(_options, builderContext); + + return getWebpackConfig12_2_x(_baseConfig, { + builderOptions, + builderContext, + }); + }, + }, + { + info: '=> Loading angular-cli config for angular lower than 12.2.0', + condition: true, + getWebpackConfig: getWebpackConfigOlder, + }, + ]; + + const webpackGetter = webpackGetterByVersions.find((wg) => wg.condition); + + logger.info(webpackGetter.info); + return Promise.resolve(webpackGetter.getWebpackConfig(baseConfig, options)); +} + +/** + * Get Builder Context + * If storybook is not start by angular builder create dumb BuilderContext + */ +function getBuilderContext(options: PresetOptions): BuilderContext { + return ( + options.angularBuilderContext ?? + ({ + target: { project: 'noop-project', builder: '', options: {} }, + workspaceRoot: process.cwd(), + getProjectMetadata: () => ({}), + getTargetOptions: () => ({}), + logger: new logging.Logger('Storybook'), + } as unknown as BuilderContext) + ); +} + +/** + * Get builder options + * Merge target options from browser target and from storybook options + */ +async function getBuilderOptions( + options: PresetOptions, + builderContext: BuilderContext +): Promise { + /** + * Get Browser Target options + */ + let browserTargetOptions: JsonObject = {}; + if (options.angularBrowserTarget) { + const browserTarget = targetFromTargetString(options.angularBrowserTarget); + + logger.info( + `=> Using angular browser target options from "${browserTarget.project}:${ + browserTarget.target + }${browserTarget.configuration ? `:${browserTarget.configuration}` : ''}"` + ); + browserTargetOptions = await builderContext.getTargetOptions(browserTarget); + } + + /** + * Merge target options from browser target options and from storybook options + */ + const builderOptions = { + ...browserTargetOptions, + ...(options.angularBuilderOptions as JsonObject), + tsConfig: + options.tsConfig ?? + findUpSync('tsconfig.json', { cwd: options.configDir }) ?? + browserTargetOptions.tsConfig, + }; + logger.info(`=> Using angular project with "tsConfig:${builderOptions.tsConfig}"`); + + return builderOptions; +} + +/** + * Get options from legacy way + * /!\ This is only for backward compatibility and would be removed on Storybook 7.0 + * only work for angular.json with [defaultProject].build or "storybook.build" config + */ +async function getLegacyDefaultBuildOptions(options: PresetOptions) { + if (options.angularBrowserTarget !== undefined) { + // Not use legacy way with builder (`angularBrowserTarget` is defined or null with builder and undefined without) + return {}; + } + + logger.warn(dedent`Your Storybook startup uses a solution that will not be supported in version 7.0. + You must use angular builder to have an explicit configuration on the project used in angular.json + Read more at: + - https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#sb-angular-builder) + - https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#angular13) + `); + const dirToSearch = process.cwd(); // Read angular workspace let workspaceConfig; @@ -40,106 +164,30 @@ export async function webpackFinal(baseConfig: webpack.Configuration, options: O `=> Could not find angular workspace config (angular.json) on this path "${dirToSearch}"` ); logger.info(`=> Fail to load angular-cli config. Using base config`); - return baseConfig; + return {}; } // Find angular project target - let project: workspaces.ProjectDefinition; - let target: workspaces.TargetDefinition; try { - // Default behavior when `angularBrowserTarget` are not explicitly defined to null - if (options.angularBrowserTarget !== null) { - const browserTarget = options.angularBrowserTarget - ? targetFromTargetString(options.angularBrowserTarget) - : ({ - configuration: undefined, - project: getDefaultProjectName(workspaceConfig), - target: 'build', - } as Target); - - const fondProject = findAngularProjectTarget( - workspaceConfig, - browserTarget.project, - browserTarget.target - ); - project = fondProject.project; - target = fondProject.target; - - logger.info( - `=> Using angular project "${browserTarget.project}:${browserTarget.target}" for configuring Storybook` - ); - } - // Start storybook when only tsConfig is provided. - if (options.angularBrowserTarget === null && options.tsConfig) { - logger.info(`=> Using default angular project with "tsConfig:${options.tsConfig}"`); - - project = { root: '', extensions: {}, targets: undefined }; - target = { builder: '', options: { tsConfig: options.tsConfig } }; - } + const browserTarget = { + configuration: undefined, + project: getDefaultProjectName(workspaceConfig), + target: 'build', + } as Target; + + const { target, project } = findAngularProjectTarget( + workspaceConfig, + browserTarget.project, + browserTarget.target + ); + + logger.info( + `=> Using angular project "${browserTarget.project}:${browserTarget.target}" for configuring Storybook` + ); + return { ...target.options }; } catch (error) { logger.error(`=> Could not find angular project: ${error.message}`); logger.info(`=> Fail to load angular-cli config. Using base config`); - return baseConfig; - } - - // Use angular-cli to get some webpack config - let angularCliWebpackConfig: AngularCliWebpackConfig; - try { - angularCliWebpackConfig = await extractAngularCliWebpackConfig(dirToSearch, project, target); - logger.info(`=> Using angular-cli webpack config`); - } catch (error) { - logger.error(`=> Could not get angular cli webpack config`); - throw error; + return {}; } - - return mergeAngularCliWebpackConfig(angularCliWebpackConfig, baseConfig); -} - -function mergeAngularCliWebpackConfig( - { cliCommonWebpackConfig, cliStyleWebpackConfig, tsConfigPath }: AngularCliWebpackConfig, - baseConfig: webpack.Configuration -) { - // Don't use storybooks styling rules because we have to use rules created by @angular-devkit/build-angular - // because @angular-devkit/build-angular created rules have include/exclude for global style files. - const rulesExcludingStyles = filterOutStylingRules(baseConfig); - - // styleWebpackConfig.entry adds global style files to the webpack context - const entry = [ - ...(baseConfig.entry as string[]), - ...Object.values(cliStyleWebpackConfig.entry).reduce((acc, item) => acc.concat(item), []), - ]; - - const module = { - ...baseConfig.module, - rules: [...cliStyleWebpackConfig.module.rules, ...rulesExcludingStyles], - }; - - // We use cliCommonConfig plugins to serve static assets files. - const plugins = [ - ...cliStyleWebpackConfig.plugins, - ...cliCommonWebpackConfig.plugins, - ...baseConfig.plugins, - ]; - - const resolve = { - ...baseConfig.resolve, - modules: Array.from( - new Set([...baseConfig.resolve.modules, ...cliCommonWebpackConfig.resolve.modules]) - ), - plugins: [ - new TsconfigPathsPlugin({ - configFile: tsConfigPath, - mainFields: ['browser', 'module', 'main'], - }), - ], - }; - - return { - ...baseConfig, - entry, - module, - plugins, - resolve, - resolveLoader: cliCommonWebpackConfig.resolveLoader, - }; } diff --git a/app/angular/src/server/framework-preset-angular-docs.ts b/app/angular/src/server/framework-preset-angular-docs.ts new file mode 100644 index 000000000000..1c2cac0c15eb --- /dev/null +++ b/app/angular/src/server/framework-preset-angular-docs.ts @@ -0,0 +1,8 @@ +import path from 'path'; +import { StorybookConfig } from '@storybook/core-common'; +import { hasDocsOrControls } from '@storybook/docs-tools'; + +export const previewAnnotations: StorybookConfig['previewAnnotations'] = (entry = [], options) => { + if (!hasDocsOrControls(options)) return entry; + return [...entry, path.join(__dirname, '../../../dist/ts3.9/client/docs/config')]; +}; diff --git a/app/angular/src/server/framework-preset-angular-ivy.ts b/app/angular/src/server/framework-preset-angular-ivy.ts index 77b0204030dc..65f2e5076419 100644 --- a/app/angular/src/server/framework-preset-angular-ivy.ts +++ b/app/angular/src/server/framework-preset-angular-ivy.ts @@ -1,7 +1,25 @@ import { Configuration } from 'webpack'; -import { process as ngccProcess } from '@angular/compiler-cli/ngcc'; import * as path from 'path'; -import { Options } from './framework-preset-angular-cli'; + +import { PresetOptions } from './options'; + +/** + * Source : https://github.com/angular/angular-cli/blob/ebccb5de4a455af813c5e82483db6af20666bdbd/packages/angular_devkit/build_angular/src/utils/load-esm.ts#L23 + * This uses a dynamic import to load a module which may be ESM. + * CommonJS code can load ESM code via a dynamic import. Unfortunately, TypeScript + * will currently, unconditionally downlevel dynamic import into a require call. + * require calls cannot load ESM code and will result in a runtime error. To workaround + * this, a Function constructor is used to prevent TypeScript from changing the dynamic import. + * Once TypeScript provides support for keeping the dynamic import this workaround can + * be dropped. + * + * @param modulePath The path of the module to load. + * @returns A Promise that resolves to the dynamically imported module. + */ +function loadEsmModule(modulePath: string): Promise { + // eslint-disable-next-line no-new-func + return new Function('modulePath', `return import(modulePath);`)(modulePath) as Promise; +} /** * Run ngcc for converting modules to ivy format before starting storybook @@ -9,8 +27,17 @@ import { Options } from './framework-preset-angular-cli'; * * Information about Ivy can be found here https://angular.io/guide/ivy */ -export const runNgcc = () => { - ngccProcess({ +export const runNgcc = async () => { + let ngcc: typeof import('@angular/compiler-cli/ngcc'); + try { + ngcc = await import('@angular/compiler-cli/ngcc'); + } catch (error) { + ngcc = await loadEsmModule( + '@angular/compiler-cli/ngcc' + ); + } + + ngcc.process({ // should be async: true but does not work due to // https://github.com/storybookjs/storybook/pull/11157/files#r615413803 async: false, @@ -20,7 +47,7 @@ export const runNgcc = () => { }); }; -export const webpack = async (webpackConfig: Configuration, options: Options) => { +export const webpack = async (webpackConfig: Configuration, options: PresetOptions) => { const angularOptions = await options.presets.apply( 'angularOptions', {} as { diff --git a/app/angular/src/server/framework-preset-angular.ts b/app/angular/src/server/framework-preset-angular.ts index 065ed8add6b3..1538f901c763 100644 --- a/app/angular/src/server/framework-preset-angular.ts +++ b/app/angular/src/server/framework-preset-angular.ts @@ -1,13 +1,30 @@ import path from 'path'; +import semver from '@storybook/semver'; import { ContextReplacementPlugin, Configuration } from 'webpack'; import autoprefixer from 'autoprefixer'; import getTsLoaderOptions from './ts_config'; import createForkTsCheckerInstance from './create-fork-ts-checker-plugin'; -export function webpack( +export async function webpack( config: Configuration, - { configDir }: { configDir: string } -): Configuration { + { configDir, angularBuilderContext }: { configDir: string; angularBuilderContext: any } +): Promise { + try { + // Disable all this webpack stuff if we use angular-cli >= 12 + // Angular cli is in charge of doing all the necessary for angular. If there is any additional configuration to add, it must be done in the preset angular-cli versioned. + const angularCliVersion = await import('@angular/cli').then((m) => + semver.coerce(m.VERSION.full) + ); + if ( + (semver.satisfies(angularCliVersion, '12.2.x') && angularBuilderContext) || + semver.satisfies(angularCliVersion, '>=13.0.0') + ) { + return config; + } + } catch (error) { + // do nothing, continue + } + const tsLoaderOptions = getTsLoaderOptions(configDir); return { ...config, @@ -61,7 +78,7 @@ export function webpack( /@angular(\\|\/)core(\\|\/)(fesm5|bundles)/, path.resolve(__dirname, '..') ), - (createForkTsCheckerInstance(tsLoaderOptions) as any) as Configuration['plugins'][0], + createForkTsCheckerInstance(tsLoaderOptions) as any as Configuration['plugins'][0], ], }; } diff --git a/app/angular/src/server/options.ts b/app/angular/src/server/options.ts index 6b459475ba09..06866176345b 100644 --- a/app/angular/src/server/options.ts +++ b/app/angular/src/server/options.ts @@ -1,12 +1,24 @@ import { sync } from 'read-pkg-up'; -import { LoadOptions } from '@storybook/core-common'; +import type { LoadOptions, Options as CoreOptions } from '@storybook/core-common'; + +import { BuilderContext } from '@angular-devkit/architect'; +import { ExtraEntryPoint, StylePreprocessorOptions } from '@angular-devkit/build-angular'; + +export type PresetOptions = CoreOptions & { + /* Allow to get the options of a targeted "browser builder" */ + angularBrowserTarget?: string | null; + /* Defined set of options. These will take over priority from angularBrowserTarget options */ + angularBuilderOptions?: { + styles?: ExtraEntryPoint[]; + stylePreprocessorOptions?: StylePreprocessorOptions; + }; + /* Angular context from builder */ + angularBuilderContext?: BuilderContext | null; + tsConfig?: string; +}; export default { packageJson: sync({ cwd: __dirname }).packageJson, framework: 'angular', - frameworkPresets: [ - require.resolve('./framework-preset-angular'), - require.resolve('./framework-preset-angular-cli'), - require.resolve('./framework-preset-angular-ivy'), - ], + frameworkPresets: [require.resolve('./preset')], } as LoadOptions; diff --git a/app/angular/src/server/preset.ts b/app/angular/src/server/preset.ts new file mode 100644 index 000000000000..65dc2fa28dc0 --- /dev/null +++ b/app/angular/src/server/preset.ts @@ -0,0 +1,13 @@ +import type { StorybookConfig } from '@storybook/core-common'; + +export const previewAnnotations: StorybookConfig['previewAnnotations'] = (entries = []) => [ + ...entries, + require.resolve('../client/preview/config'), +]; + +export const addons: StorybookConfig['addons'] = [ + require.resolve('./framework-preset-angular'), + require.resolve('./framework-preset-angular-cli'), + require.resolve('./framework-preset-angular-ivy'), + require.resolve('./framework-preset-angular-docs'), +]; diff --git a/app/angular/src/server/utils/filter-out-styling-rules.ts b/app/angular/src/server/utils/filter-out-styling-rules.ts index 46591becee5d..26489cee2ffc 100644 --- a/app/angular/src/server/utils/filter-out-styling-rules.ts +++ b/app/angular/src/server/utils/filter-out-styling-rules.ts @@ -1,4 +1,4 @@ -import { Configuration, RuleSetRule } from 'webpack'; +import type { Configuration, RuleSetRule } from 'webpack'; const isStylingRule = (rule: RuleSetRule) => { const { test } = rule; diff --git a/app/angular/src/types/index.ts b/app/angular/src/types/index.ts index 7b7db58544c8..13ee64606a0b 100644 --- a/app/angular/src/types/index.ts +++ b/app/angular/src/types/index.ts @@ -1,4 +1,4 @@ -import { StorybookConfig as BaseConfig } from '@storybook/core-common'; +import type { StorybookConfig as BaseConfig } from '@storybook/core-common'; export interface StorybookConfig extends BaseConfig { angularOptions?: { diff --git a/app/angular/src/typings.d.ts b/app/angular/src/typings.d.ts index d8f7c6f660ad..2fbe88afdf7b 100644 --- a/app/angular/src/typings.d.ts +++ b/app/angular/src/typings.d.ts @@ -1,4 +1,5 @@ declare module 'global'; +declare module '@storybook/semver'; // will be provided by the webpack define plugin declare var NODE_ENV: string | undefined; diff --git a/app/angular/standalone.d.ts b/app/angular/standalone.d.ts index 978437c490b6..cd728e7dfb14 100644 --- a/app/angular/standalone.d.ts +++ b/app/angular/standalone.d.ts @@ -1,4 +1,5 @@ -import { CLIOptions, LoadOptions, BuilderOptions } from '@storybook/core-common'; +import type { CLIOptions, LoadOptions, BuilderOptions } from '@storybook/core-common'; +import type { BuilderContext } from '@angular-devkit/architect'; export type StandaloneOptions = Partial< CLIOptions & @@ -6,6 +7,11 @@ export type StandaloneOptions = Partial< BuilderOptions & { mode?: 'static' | 'dev'; angularBrowserTarget?: string | null; + angularBuilderOptions?: Record & { + styles?: any[]; + stylePreprocessorOptions?: any; + }; + angularBuilderContext?: BuilderContext | null; tsConfig?: string; } >; diff --git a/app/angular/tsconfig.json b/app/angular/tsconfig.json index df95ea161135..1b0fdfe5cf28 100644 --- a/app/angular/tsconfig.json +++ b/app/angular/tsconfig.json @@ -3,9 +3,17 @@ "compileOnSave": false, "compilerOptions": { "outDir": "dist", - "types": ["webpack-env", "node"], + "types": [ + "webpack-env", + "node" + ], "rootDir": "./src", - "resolveJsonModule": true + "skipLibCheck": true, + "resolveJsonModule": true, + "allowJs": true }, - "include": ["src/**/*", "src/**/*.json"] -} + "include": [ + "src/**/*", + "src/**/*.json" + ] +} \ No newline at end of file diff --git a/app/angular/types-7-0.d.ts b/app/angular/types-7-0.d.ts new file mode 100644 index 000000000000..a6080e072100 --- /dev/null +++ b/app/angular/types-7-0.d.ts @@ -0,0 +1 @@ +export * from './dist/ts3.9/client/preview/types-7-0.d'; diff --git a/app/ember/README.md b/app/ember/README.md index ee45d9a87eb3..95b842a85ad8 100644 --- a/app/ember/README.md +++ b/app/ember/README.md @@ -19,8 +19,8 @@ For more information visit: [storybook.js.org](https://storybook.js.org) --- -Storybook also comes with a lot of [addons](https://storybook.js.org/docs/ember/configure/storybook-addons) and a great API to customize as you wish. -You can also build a [static version](https://storybook.js.org/docs/ember/workflows/publish-storybook) of your storybook and deploy it anywhere you want. +Storybook also comes with a lot of [addons](https://storybook.js.org/addons) and a great API to customize as you wish. +You can also build a [static version](https://storybook.js.org/docs/ember/sharing/publish-storybook) of your Storybook and deploy it anywhere you want. ## Docs diff --git a/app/ember/package.json b/app/ember/package.json index 140371dc4f63..f9d7e3cf47ca 100644 --- a/app/ember/package.json +++ b/app/ember/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/ember", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Storybook for Ember: Develop Ember Component in isolation with Hot Reloading.", "homepage": "https://github.com/storybookjs/storybook/tree/main/app/ember", "bugs": { @@ -42,10 +42,10 @@ "prepare": "node ../../scripts/prepare.js" }, "dependencies": { - "@ember/test-helpers": "^2.1.4", - "@storybook/core": "6.4.0-beta.10", - "@storybook/core-common": "6.4.0-beta.10", - "@storybook/store": "6.4.0-beta.10", + "@storybook/core": "6.5.0-rc.1", + "@storybook/core-common": "6.5.0-rc.1", + "@storybook/docs-tools": "6.5.0-rc.1", + "@storybook/store": "6.5.0-rc.1", "core-js": "^3.8.2", "global": "^4.4.0", "react": "16.14.0", @@ -66,6 +66,6 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", "sbmodern": "dist/modern/client/index.js" } diff --git a/app/ember/preset.js b/app/ember/preset.js index 20b417ae97b5..f09c6698e046 100644 --- a/app/ember/preset.js +++ b/app/ember/preset.js @@ -1,7 +1 @@ -function config(entry = []) { - return [...entry, require.resolve('./dist/esm/client/preview/config')]; -} - -module.exports = { - config, -}; +module.exports = require('./dist/cjs/server/preset'); diff --git a/app/ember/src/client/docs/config.js b/app/ember/src/client/docs/config.js new file mode 100644 index 000000000000..042ec16227ef --- /dev/null +++ b/app/ember/src/client/docs/config.js @@ -0,0 +1,12 @@ +import { enhanceArgTypes } from '@storybook/docs-tools'; +import { extractArgTypes, extractComponentDescription } from './jsondoc'; + +export const parameters = { + docs: { + iframeHeight: 80, + extractArgTypes, + extractComponentDescription, + }, +}; + +export const argTypesEnhancers = [enhanceArgTypes]; diff --git a/addons/docs/src/frameworks/ember/index.js b/app/ember/src/client/docs/index.js similarity index 100% rename from addons/docs/src/frameworks/ember/index.js rename to app/ember/src/client/docs/index.js diff --git a/addons/docs/src/frameworks/ember/jsondoc.js b/app/ember/src/client/docs/jsondoc.js similarity index 100% rename from addons/docs/src/frameworks/ember/jsondoc.js rename to app/ember/src/client/docs/jsondoc.js diff --git a/addons/docs/src/frameworks/ember/config.js b/app/ember/src/client/preview/docs/config.js similarity index 100% rename from addons/docs/src/frameworks/ember/config.js rename to app/ember/src/client/preview/docs/config.js diff --git a/app/ember/src/client/preview/docs/index.js b/app/ember/src/client/preview/docs/index.js new file mode 100644 index 000000000000..fab7166db9d7 --- /dev/null +++ b/app/ember/src/client/preview/docs/index.js @@ -0,0 +1 @@ +export { setJSONDoc } from './jsondoc'; diff --git a/app/ember/src/client/preview/docs/jsondoc.js b/app/ember/src/client/preview/docs/jsondoc.js new file mode 100644 index 000000000000..f9e648ebc21b --- /dev/null +++ b/app/ember/src/client/preview/docs/jsondoc.js @@ -0,0 +1,50 @@ +/* eslint-disable no-underscore-dangle */ +/* global window */ + +export const setJSONDoc = (jsondoc) => { + window.__EMBER_GENERATED_DOC_JSON__ = jsondoc; +}; +export const getJSONDoc = () => { + return window.__EMBER_GENERATED_DOC_JSON__; +}; + +export const extractArgTypes = (componentName) => { + const json = getJSONDoc(); + if (!(json && json.included)) { + return null; + } + const componentDoc = json.included.find((doc) => doc.attributes.name === componentName); + + if (!componentDoc) { + return null; + } + return componentDoc.attributes.arguments.reduce((acc, prop) => { + acc[prop.name] = { + name: prop.name, + defaultValue: prop.defaultValue, + description: prop.description, + table: { + defaultValue: { summary: prop.defaultValue }, + type: { + summary: prop.type, + required: prop.tags.length ? prop.tags.some((tag) => tag.name === 'required') : false, + }, + }, + }; + return acc; + }, {}); +}; + +export const extractComponentDescription = (componentName) => { + const json = getJSONDoc(); + if (!(json && json.included)) { + return null; + } + const componentDoc = json.included.find((doc) => doc.attributes.name === componentName); + + if (!componentDoc) { + return null; + } + + return componentDoc.attributes.description; +}; diff --git a/app/ember/src/client/preview/index.ts b/app/ember/src/client/preview/index.ts index 78bc0f24d3bf..b85ad89f9751 100644 --- a/app/ember/src/client/preview/index.ts +++ b/app/ember/src/client/preview/index.ts @@ -1,18 +1,12 @@ -import { start } from '@storybook/core/client'; +import { start } from '@storybook/core'; import './globals'; import { renderToDOM } from './render'; const { configure: coreConfigure, clientApi, forceReRender } = start(renderToDOM); -export const { - setAddon, - addDecorator, - addParameters, - clearDecorators, - getStorybook, - raw, -} = clientApi; +export const { setAddon, addDecorator, addParameters, clearDecorators, getStorybook, raw } = + clientApi; const framework = 'ember'; export const storiesOf = (kind: string, m: any) => diff --git a/app/ember/src/server/framework-preset-babel-ember.ts b/app/ember/src/server/framework-preset-babel-ember.ts index ae9143bfdc82..da857b38fada 100644 --- a/app/ember/src/server/framework-preset-babel-ember.ts +++ b/app/ember/src/server/framework-preset-babel-ember.ts @@ -1,5 +1,7 @@ -import { TransformOptions } from '@babel/core'; +import type { TransformOptions } from '@babel/core'; import { precompile } from 'ember-source/dist/ember-template-compiler'; +import { findDistEsm } from '@storybook/core-common'; +import type { StorybookConfig, Options } from '@storybook/core-common'; let emberOptions: any; @@ -12,7 +14,7 @@ function precompileWithPlugins(string: string, options: any) { return precompile(string, precompileOptions); } -export function babel(config: TransformOptions, options: any) { +export function babel(config: TransformOptions, options: Options): TransformOptions { if (options && options.presetsList) { options.presetsList.forEach((e: any, index: number) => { if (e.preset && e.preset.emberOptions) { @@ -45,3 +47,7 @@ export function babel(config: TransformOptions, options: any) { plugins: [].concat(babelConfigPlugins, extraPlugins), }; } + +export const previewAnnotations: StorybookConfig['previewAnnotations'] = (entry = []) => { + return [...entry, findDistEsm(__dirname, 'client/preview/config')]; +}; diff --git a/app/ember/src/server/framework-preset-ember-docs.ts b/app/ember/src/server/framework-preset-ember-docs.ts new file mode 100644 index 000000000000..2cdcc56e7cb8 --- /dev/null +++ b/app/ember/src/server/framework-preset-ember-docs.ts @@ -0,0 +1,8 @@ +import type { StorybookConfig } from '@storybook/core-common'; +import { findDistEsm } from '@storybook/core-common'; +import { hasDocsOrControls } from '@storybook/docs-tools'; + +export const previewAnnotations: StorybookConfig['previewAnnotations'] = (entry = [], options) => { + if (!hasDocsOrControls(options)) return entry; + return [...entry, findDistEsm(__dirname, 'client/docs/config')]; +}; diff --git a/app/ember/src/server/options.ts b/app/ember/src/server/options.ts index f6656af3802e..3643aedba732 100644 --- a/app/ember/src/server/options.ts +++ b/app/ember/src/server/options.ts @@ -1,8 +1,8 @@ import { sync } from 'read-pkg-up'; -import { LoadOptions } from '@storybook/core-common'; +import type { LoadOptions } from '@storybook/core-common'; export default { packageJson: sync({ cwd: __dirname }).packageJson, framework: 'ember', - frameworkPresets: [require.resolve('./framework-preset-babel-ember.js')], + frameworkPresets: [require.resolve('./preset')], } as LoadOptions; diff --git a/app/ember/src/server/preset.ts b/app/ember/src/server/preset.ts new file mode 100644 index 000000000000..5e5003a2626a --- /dev/null +++ b/app/ember/src/server/preset.ts @@ -0,0 +1,6 @@ +import type { StorybookConfig } from '@storybook/core-common'; + +export const addons: StorybookConfig['addons'] = [ + require.resolve('./framework-preset-babel-ember'), + require.resolve('./framework-preset-ember-docs'), +]; diff --git a/app/ember/tsconfig.json b/app/ember/tsconfig.json index bdf2e98ebb1e..21c9e27f55dd 100644 --- a/app/ember/tsconfig.json +++ b/app/ember/tsconfig.json @@ -2,9 +2,17 @@ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": ".", - "types": ["webpack-env", "node"], + "types": [ + "webpack-env", + "node" + ], "resolveJsonModule": true }, - "include": ["src/**/*", "package.json"], - "exclude": ["src/**/*.test.*"] + "include": [ + "src/**/*", + "package.json" + ], + "exclude": [ + "src/**/*.test.*" + ] } \ No newline at end of file diff --git a/app/html/README.md b/app/html/README.md index 223ecd19e5b9..3fa757d3a7f5 100644 --- a/app/html/README.md +++ b/app/html/README.md @@ -21,5 +21,5 @@ For more information visit: [storybook.js.org](https://storybook.js.org) --- -Storybook also comes with a lot of [addons](https://storybook.js.org/docs/html/configure/storybook-addons) and a great API to customize as you wish. -You can also build a [static version](https://storybook.js.org/docs/html/workflows/publish-storybook) of your storybook and deploy it anywhere you want. +Storybook also comes with a lot of [addons](https://storybook.js.org/addons) and a great API to customize as you wish. +You can also build a [static version](https://storybook.js.org/docs/html/sharing/publish-storybook) of your Storybook and deploy it anywhere you want. diff --git a/app/html/package.json b/app/html/package.json index 1d9ddc6ab49e..6cbb274b905f 100644 --- a/app/html/package.json +++ b/app/html/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/html", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Storybook for HTML: View HTML snippets in isolation with Hot Reloading.", "keywords": [ "storybook" @@ -45,13 +45,14 @@ "prepare": "node ../../scripts/prepare.js" }, "dependencies": { - "@storybook/addons": "6.4.0-beta.10", - "@storybook/client-api": "6.4.0-beta.10", - "@storybook/core": "6.4.0-beta.10", - "@storybook/core-common": "6.4.0-beta.10", - "@storybook/csf": "0.0.2--canary.6aca495.0", - "@storybook/preview-web": "6.4.0-beta.10", - "@storybook/store": "6.4.0-beta.10", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/core": "6.5.0-rc.1", + "@storybook/core-common": "6.5.0-rc.1", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/docs-tools": "6.5.0-rc.1", + "@storybook/preview-web": "6.5.0-rc.1", + "@storybook/store": "6.5.0-rc.1", + "@types/node": "^14.14.20 || ^16.0.0", "@types/webpack-env": "^1.16.0", "core-js": "^3.8.2", "global": "^4.4.0", @@ -60,7 +61,11 @@ "react-dom": "16.14.0", "read-pkg-up": "^7.0.1", "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0" + "ts-dedent": "^2.0.0", + "webpack": ">=4.0.0 <6.0.0" + }, + "devDependencies": { + "webpack": "4" }, "peerDependencies": { "@babel/core": "*" @@ -71,6 +76,6 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", "sbmodern": "dist/modern/client/index.js" } diff --git a/app/html/preset.js b/app/html/preset.js index 20b417ae97b5..f09c6698e046 100644 --- a/app/html/preset.js +++ b/app/html/preset.js @@ -1,7 +1 @@ -function config(entry = []) { - return [...entry, require.resolve('./dist/esm/client/preview/config')]; -} - -module.exports = { - config, -}; +module.exports = require('./dist/cjs/server/preset'); diff --git a/app/html/src/client/docs/config.ts b/app/html/src/client/docs/config.ts new file mode 100644 index 000000000000..73dd8ea8a5e9 --- /dev/null +++ b/app/html/src/client/docs/config.ts @@ -0,0 +1,16 @@ +import { SourceType } from '@storybook/docs-tools'; +import { sourceDecorator } from './sourceDecorator'; +import { prepareForInline } from './prepareForInline'; + +export const decorators = [sourceDecorator]; + +export const parameters = { + docs: { + inlineStories: true, + prepareForInline, + source: { + type: SourceType.DYNAMIC, + language: 'html', + }, + }, +}; diff --git a/addons/docs/src/frameworks/html/prepareForInline.tsx b/app/html/src/client/docs/prepareForInline.tsx similarity index 100% rename from addons/docs/src/frameworks/html/prepareForInline.tsx rename to app/html/src/client/docs/prepareForInline.tsx diff --git a/app/html/src/client/docs/sourceDecorator.test.ts b/app/html/src/client/docs/sourceDecorator.test.ts new file mode 100644 index 000000000000..18e5e3ace141 --- /dev/null +++ b/app/html/src/client/docs/sourceDecorator.test.ts @@ -0,0 +1,122 @@ +import { SNIPPET_RENDERED } from '@storybook/docs-tools'; +import { addons, StoryContext, useEffect } from '@storybook/addons'; +import { sourceDecorator } from './sourceDecorator'; + +jest.mock('@storybook/addons'); +const mockedAddons = addons as jest.Mocked; +const mockedUseEffect = useEffect as jest.Mocked; + +expect.addSnapshotSerializer({ + print: (val: any) => val, + test: (val) => typeof val === 'string', +}); + +const tick = () => new Promise((r) => setTimeout(r, 0)); + +const makeContext = (name: string, parameters: any, args: any, extra?: object): StoryContext => ({ + id: `html-test--${name}`, + kind: 'js-text', + name, + parameters, + args, + argTypes: {}, + globals: {}, + ...extra, +}); + +describe('sourceDecorator', () => { + let mockChannel: { on: jest.Mock; emit?: jest.Mock }; + beforeEach(() => { + mockedAddons.getChannel.mockReset(); + mockedUseEffect.mockImplementation((cb) => setTimeout(cb, 0)); + + mockChannel = { on: jest.fn(), emit: jest.fn() }; + mockedAddons.getChannel.mockReturnValue(mockChannel as any); + }); + + it('should render dynamically for args stories', async () => { + const storyFn = (args: any) => `
args story
`; + const context = makeContext('args', { __isArgsStory: true }, {}); + sourceDecorator(storyFn, context); + await tick(); + expect(mockChannel.emit).toHaveBeenCalledWith( + SNIPPET_RENDERED, + 'html-test--args', + '
args story
' + ); + }); + + it('should dedent source by default', async () => { + const storyFn = (args: any) => ` +
+ args story +
+ `; + const context = makeContext('args', { __isArgsStory: true }, {}); + sourceDecorator(storyFn, context); + await tick(); + expect(mockChannel.emit).toHaveBeenCalledWith( + SNIPPET_RENDERED, + 'html-test--args', + ['
', ' args story', '
'].join('\n') + ); + }); + + it('should skip dynamic rendering for no-args stories', async () => { + const storyFn = () => `
classic story
`; + const context = makeContext('classic', {}, {}); + sourceDecorator(storyFn, context); + await tick(); + expect(mockChannel.emit).not.toHaveBeenCalled(); + }); + + it('should use the originalStoryFn if excludeDecorators is set', async () => { + const storyFn = (args: any) => `
args story
`; + const decoratedStoryFn = (args: any) => ` +
${storyFn(args)}
+ `; + const context = makeContext( + 'args', + { + __isArgsStory: true, + docs: { + source: { + excludeDecorators: true, + }, + }, + }, + {}, + { originalStoryFn: storyFn } + ); + sourceDecorator(decoratedStoryFn, context); + await tick(); + expect(mockChannel.emit).toHaveBeenCalledWith( + SNIPPET_RENDERED, + 'html-test--args', + '
args story
' + ); + }); + + it('allows the snippet output to be modified by transformSource', async () => { + const storyFn = (args: any) => `
args story
`; + const transformSource = (dom: string) => `

${dom}

`; + const docs = { transformSource }; + const context = makeContext('args', { __isArgsStory: true, docs }, {}); + sourceDecorator(storyFn, context); + await tick(); + expect(mockChannel.emit).toHaveBeenCalledWith( + SNIPPET_RENDERED, + 'html-test--args', + '

args story

' + ); + }); + + it('provides the story context to transformSource', () => { + const storyFn = (args: any) => `
args story
`; + const transformSource = jest.fn((x) => x); + const docs = { transformSource }; + const context = makeContext('args', { __isArgsStory: true, docs }, {}); + sourceDecorator(storyFn, context); + expect(transformSource).toHaveBeenCalledWith('
args story
', context); + }); +}); diff --git a/app/html/src/client/docs/sourceDecorator.ts b/app/html/src/client/docs/sourceDecorator.ts new file mode 100644 index 000000000000..d9076dd35f03 --- /dev/null +++ b/app/html/src/client/docs/sourceDecorator.ts @@ -0,0 +1,59 @@ +/* global window */ +import { SNIPPET_RENDERED, SourceType } from '@storybook/docs-tools'; +import { addons, useEffect } from '@storybook/addons'; +import type { ArgsStoryFn, PartialStoryFn, StoryContext } from '@storybook/csf'; +import dedent from 'ts-dedent'; +import type { HtmlFramework } from '..'; + +function skipSourceRender(context: StoryContext) { + const sourceParams = context?.parameters.docs?.source; + const isArgsStory = context?.parameters.__isArgsStory; + + // always render if the user forces it + if (sourceParams?.type === SourceType.DYNAMIC) { + return false; + } + + // never render if the user is forcing the block to render code, or + // if the user provides code, or if it's not an args story. + return !isArgsStory || sourceParams?.code || sourceParams?.type === SourceType.CODE; +} + +// By default, just remove indentation +function defaultTransformSource(source: string) { + // Have to wrap dedent so it doesn't serialize the context + return dedent(source); +} + +function applyTransformSource(source: string, context: StoryContext): string { + const docs = context.parameters.docs ?? {}; + const transformSource = docs.transformSource ?? defaultTransformSource; + return transformSource(source, context); +} + +export function sourceDecorator( + storyFn: PartialStoryFn, + context: StoryContext +) { + const story = context?.parameters.docs?.source?.excludeDecorators + ? (context.originalStoryFn as ArgsStoryFn)(context.args, context) + : storyFn(); + + let source: string; + if (!skipSourceRender(context)) { + if (typeof story === 'string') { + source = story; + } + // eslint-disable-next-line no-undef + else if (story instanceof Element) { + source = story.outerHTML; + } + + if (source) source = applyTransformSource(source, context); + } + useEffect(() => { + if (source) addons.getChannel().emit(SNIPPET_RENDERED, context.id, source); + }); + + return story; +} diff --git a/app/html/src/client/preview/index.ts b/app/html/src/client/preview/index.ts index 96f8be1e9156..decfcb1ee96e 100644 --- a/app/html/src/client/preview/index.ts +++ b/app/html/src/client/preview/index.ts @@ -1,11 +1,11 @@ /* eslint-disable prefer-destructuring */ -import { start } from '@storybook/core/client'; -import { ClientStoryApi, Loadable } from '@storybook/addons'; +import { start } from '@storybook/core'; +import type { ClientStoryApi, Loadable } from '@storybook/addons'; import { HtmlFramework } from './types-6-0'; import './globals'; import { renderToDOM } from './render'; -import { IStorybookSection } from './types'; +import type { IStorybookSection } from './types'; const framework = 'html'; diff --git a/app/html/src/client/preview/types-6-0.ts b/app/html/src/client/preview/types-6-0.ts index 905b047506c4..abc711430c38 100644 --- a/app/html/src/client/preview/types-6-0.ts +++ b/app/html/src/client/preview/types-6-0.ts @@ -1,6 +1,11 @@ -import { Args, ComponentAnnotations, StoryAnnotations, AnnotatedStoryFn } from '@storybook/csf'; +import type { + Args, + ComponentAnnotations, + StoryAnnotations, + AnnotatedStoryFn, +} from '@storybook/csf'; -import { StoryFnHtmlReturnType } from './types'; +import type { StoryFnHtmlReturnType } from './types'; export type { Args, ArgTypes, Parameters, StoryContext } from '@storybook/addons'; diff --git a/app/html/src/client/preview/types-7-0.ts b/app/html/src/client/preview/types-7-0.ts index b88051446a9d..d897ad97a81a 100644 --- a/app/html/src/client/preview/types-7-0.ts +++ b/app/html/src/client/preview/types-7-0.ts @@ -1,4 +1,4 @@ -import { Args } from '@storybook/csf'; +import type { Args } from '@storybook/csf'; import type { StoryObj } from './types-6-0'; diff --git a/app/html/src/server/framework-preset-html-docs.ts b/app/html/src/server/framework-preset-html-docs.ts new file mode 100644 index 000000000000..2cdcc56e7cb8 --- /dev/null +++ b/app/html/src/server/framework-preset-html-docs.ts @@ -0,0 +1,8 @@ +import type { StorybookConfig } from '@storybook/core-common'; +import { findDistEsm } from '@storybook/core-common'; +import { hasDocsOrControls } from '@storybook/docs-tools'; + +export const previewAnnotations: StorybookConfig['previewAnnotations'] = (entry = [], options) => { + if (!hasDocsOrControls(options)) return entry; + return [...entry, findDistEsm(__dirname, 'client/docs/config')]; +}; diff --git a/app/html/src/server/framework-preset-html.ts b/app/html/src/server/framework-preset-html.ts index f3273c51f1b4..481086898273 100644 --- a/app/html/src/server/framework-preset-html.ts +++ b/app/html/src/server/framework-preset-html.ts @@ -1,5 +1,6 @@ -// eslint-disable-next-line import/no-extraneous-dependencies -import { Configuration } from 'webpack'; +import { findDistEsm } from '@storybook/core-common'; +import type { Configuration } from 'webpack'; +import type { StorybookConfig } from '@storybook/core-common'; export function webpack(config: Configuration) { config.module.rules.push({ @@ -9,3 +10,7 @@ export function webpack(config: Configuration) { return config; } + +export const previewAnnotations: StorybookConfig['previewAnnotations'] = (entry = []) => { + return [...entry, findDistEsm(__dirname, 'client/preview/config')]; +}; diff --git a/app/html/src/server/options.ts b/app/html/src/server/options.ts index 306658e949e7..7c46e5bf5632 100644 --- a/app/html/src/server/options.ts +++ b/app/html/src/server/options.ts @@ -1,8 +1,8 @@ import { sync } from 'read-pkg-up'; -import { LoadOptions } from '@storybook/core-common'; +import type { LoadOptions } from '@storybook/core-common'; export default { packageJson: sync({ cwd: __dirname }).packageJson, framework: 'html', - frameworkPresets: [require.resolve('./framework-preset-html')], + frameworkPresets: [require.resolve('./preset')], } as LoadOptions; diff --git a/app/html/src/server/preset.ts b/app/html/src/server/preset.ts new file mode 100644 index 000000000000..62a020699371 --- /dev/null +++ b/app/html/src/server/preset.ts @@ -0,0 +1,6 @@ +import type { StorybookConfig } from '@storybook/core-common'; + +export const addons: StorybookConfig['addons'] = [ + require.resolve('./framework-preset-html'), + require.resolve('./framework-preset-html-docs'), +]; diff --git a/app/html/tsconfig.json b/app/html/tsconfig.json index 13f32ad63095..a7b3b6102f4c 100644 --- a/app/html/tsconfig.json +++ b/app/html/tsconfig.json @@ -5,5 +5,5 @@ "types": ["webpack-env", "node"] }, "include": ["src/**/*"], - "exclude": ["src/__tests__/**/*"] + "exclude": ["src/**/*.test.*", "src/__tests__/**/*"] } diff --git a/app/html/types-7-0.d.ts b/app/html/types-7-0.d.ts new file mode 100644 index 000000000000..a6080e072100 --- /dev/null +++ b/app/html/types-7-0.d.ts @@ -0,0 +1 @@ +export * from './dist/ts3.9/client/preview/types-7-0.d'; diff --git a/app/preact/README.md b/app/preact/README.md index 886a1a134b13..2bbdd89def68 100644 --- a/app/preact/README.md +++ b/app/preact/README.md @@ -19,8 +19,8 @@ For more information visit: [storybook.js.org](https://storybook.js.org) --- -Storybook also comes with a lot of [addons](https://storybook.js.org/docs/preact/configure/storybook-addons) and a great API to customize as you wish. -You can also build a [static version](https://storybook.js.org/docs/preact/workflows/publish-storybook) of your storybook and deploy it anywhere you want. +Storybook also comes with a lot of [addons](https://storybook.js.org/addons) and a great API to customize as you wish. +You can also build a [static version](https://storybook.js.org/docs/preact/sharing/publish-storybook) of your Storybook and deploy it anywhere you want. ## Docs diff --git a/app/preact/package.json b/app/preact/package.json index f385d2e87d45..dce5332f9e10 100644 --- a/app/preact/package.json +++ b/app/preact/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/preact", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Storybook for Preact: Develop Preact Component in isolation.", "keywords": [ "storybook" @@ -46,11 +46,12 @@ }, "dependencies": { "@babel/plugin-transform-react-jsx": "^7.12.12", - "@storybook/addons": "6.4.0-beta.10", - "@storybook/core": "6.4.0-beta.10", - "@storybook/core-common": "6.4.0-beta.10", - "@storybook/csf": "0.0.2--canary.6aca495.0", - "@storybook/store": "6.4.0-beta.10", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/core": "6.5.0-rc.1", + "@storybook/core-common": "6.5.0-rc.1", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/store": "6.5.0-rc.1", + "@types/node": "^14.14.20 || ^16.0.0", "@types/webpack-env": "^1.16.0", "core-js": "^3.8.2", "global": "^4.4.0", @@ -58,15 +59,16 @@ "react-dom": "16.14.0", "read-pkg-up": "^7.0.1", "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0" + "ts-dedent": "^2.0.0", + "webpack": ">=4.0.0 <6.0.0" }, "devDependencies": { - "preact": "^10.5.13" + "preact": "^10.5.13", + "webpack": "4" }, "peerDependencies": { "@babel/core": "*", - "preact": "^8.0.0||^10.0.0", - "webpack": "*" + "preact": "^8.0.0||^10.0.0" }, "engines": { "node": ">=10.13.0" @@ -74,6 +76,6 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", "sbmodern": "dist/modern/client/index.js" } diff --git a/app/preact/preset.js b/app/preact/preset.js index 20b417ae97b5..324b0db8eda2 100644 --- a/app/preact/preset.js +++ b/app/preact/preset.js @@ -1,7 +1 @@ -function config(entry = []) { - return [...entry, require.resolve('./dist/esm/client/preview/config')]; -} - -module.exports = { - config, -}; +module.exports = require('./dist/cjs/server/framework-preset-preact'); diff --git a/app/preact/src/client/preview/index.ts b/app/preact/src/client/preview/index.ts index 82bbf67a73d3..922e284a6e9c 100644 --- a/app/preact/src/client/preview/index.ts +++ b/app/preact/src/client/preview/index.ts @@ -1,11 +1,11 @@ /* eslint-disable prefer-destructuring */ -import { start } from '@storybook/core/client'; -import { ClientStoryApi, Loadable } from '@storybook/addons'; +import { start } from '@storybook/core'; +import type { ClientStoryApi, Loadable } from '@storybook/addons'; import './globals'; import { renderToDOM } from './render'; -import { IStorybookSection } from './types'; -import { PreactFramework } from './types-6-0'; +import type { IStorybookSection } from './types'; +import type { PreactFramework } from './types-6-0'; export interface ClientApi extends ClientStoryApi { setAddon(addon: any): void; diff --git a/app/preact/src/client/preview/render.tsx b/app/preact/src/client/preview/render.tsx index 095e2ebea50f..d78cfe699c8b 100644 --- a/app/preact/src/client/preview/render.tsx +++ b/app/preact/src/client/preview/render.tsx @@ -11,7 +11,7 @@ function preactRender(story: StoryFnPreactReturnType, domElement: HTMLElement): // Preact 10 only: preact.render(story, domElement); } else { - renderedStory = (preact.render(story, domElement, renderedStory) as unknown) as Element; + renderedStory = preact.render(story, domElement, renderedStory) as unknown as Element; } } diff --git a/app/preact/src/client/preview/types-6-0.ts b/app/preact/src/client/preview/types-6-0.ts index 5f43f298f57c..c98eb9071576 100644 --- a/app/preact/src/client/preview/types-6-0.ts +++ b/app/preact/src/client/preview/types-6-0.ts @@ -1,6 +1,11 @@ -import { AnyComponent } from 'preact'; -import { Args, ComponentAnnotations, StoryAnnotations, AnnotatedStoryFn } from '@storybook/csf'; -import { StoryFnPreactReturnType } from './types'; +import type { AnyComponent } from 'preact'; +import type { + Args, + ComponentAnnotations, + StoryAnnotations, + AnnotatedStoryFn, +} from '@storybook/csf'; +import type { StoryFnPreactReturnType } from './types'; export type { Args, ArgTypes, Parameters, StoryContext } from '@storybook/csf'; diff --git a/app/preact/src/client/preview/types-7-0.ts b/app/preact/src/client/preview/types-7-0.ts index b88051446a9d..d897ad97a81a 100644 --- a/app/preact/src/client/preview/types-7-0.ts +++ b/app/preact/src/client/preview/types-7-0.ts @@ -1,4 +1,4 @@ -import { Args } from '@storybook/csf'; +import type { Args } from '@storybook/csf'; import type { StoryObj } from './types-6-0'; diff --git a/app/preact/src/server/framework-preset-preact.ts b/app/preact/src/server/framework-preset-preact.ts index 9b445f1459dc..9a50492d3480 100644 --- a/app/preact/src/server/framework-preset-preact.ts +++ b/app/preact/src/server/framework-preset-preact.ts @@ -1,8 +1,10 @@ import path from 'path'; -import { TransformOptions } from '@babel/core'; -import { Configuration } from 'webpack'; +import type { TransformOptions } from '@babel/core'; +import type { Configuration } from 'webpack'; +import { findDistEsm } from '@storybook/core-common'; +import type { StorybookConfig } from '@storybook/core-common'; -export function babelDefault(config: TransformOptions) { +export function babelDefault(config: TransformOptions): TransformOptions { return { ...config, plugins: [ @@ -12,7 +14,7 @@ export function babelDefault(config: TransformOptions) { }; } -export function webpackFinal(config: Configuration) { +export function webpackFinal(config: Configuration): Configuration { return { ...config, resolve: { @@ -26,3 +28,7 @@ export function webpackFinal(config: Configuration) { }, }; } + +export const previewAnnotations: StorybookConfig['previewAnnotations'] = (entry = []) => { + return [...entry, findDistEsm(__dirname, 'client/preview/config')]; +}; diff --git a/app/preact/src/server/options.ts b/app/preact/src/server/options.ts index 6132aceaae33..f2614b12e04b 100644 --- a/app/preact/src/server/options.ts +++ b/app/preact/src/server/options.ts @@ -1,5 +1,5 @@ import { sync } from 'read-pkg-up'; -import { LoadOptions } from '@storybook/core-common'; +import type { LoadOptions } from '@storybook/core-common'; export default { packageJson: sync({ cwd: __dirname }).packageJson, diff --git a/app/preact/tsconfig.json b/app/preact/tsconfig.json index 08bdb7764f76..ea47a78eb476 100644 --- a/app/preact/tsconfig.json +++ b/app/preact/tsconfig.json @@ -2,7 +2,10 @@ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "./src", - "types": ["webpack-env", "node"], + "types": [ + "webpack-env", + "node" + ], "resolveJsonModule": true }, "include": [ @@ -11,4 +14,4 @@ "exclude": [ "src/**/*.test.*" ] -} +} \ No newline at end of file diff --git a/app/preact/types-7-0.d.ts b/app/preact/types-7-0.d.ts new file mode 100644 index 000000000000..a6080e072100 --- /dev/null +++ b/app/preact/types-7-0.d.ts @@ -0,0 +1 @@ +export * from './dist/ts3.9/client/preview/types-7-0.d'; diff --git a/app/react/README.md b/app/react/README.md index 2e7e11dcbfe7..60379031702d 100644 --- a/app/react/README.md +++ b/app/react/README.md @@ -19,8 +19,8 @@ For more information visit: [storybook.js.org](https://storybook.js.org) --- -Storybook also comes with a lot of [addons](https://storybook.js.org/docs/react/configure/storybook-addons) and a great API to customize as you wish. -You can also build a [static version](https://storybook.js.org/docs/react/workflows/publish-storybook) of your storybook and deploy it anywhere you want. +Storybook also comes with a lot of [addons](https://storybook.js.org/addons) and a great API to customize as you wish. +You can also build a [static version](https://storybook.js.org/docs/react/sharing/publish-storybook) of your Storybook and deploy it anywhere you want. Here are some featured storybooks that you can reference to see how Storybook works: diff --git a/app/react/package.json b/app/react/package.json index 4e7858d56755..50a7d901971a 100644 --- a/app/react/package.json +++ b/app/react/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/react", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Storybook for React: Develop React Component in isolation with Hot Reloading.", "keywords": [ "storybook" @@ -48,44 +48,67 @@ "dependencies": { "@babel/preset-flow": "^7.12.1", "@babel/preset-react": "^7.12.10", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.1", - "@storybook/addons": "6.4.0-beta.10", - "@storybook/core": "6.4.0-beta.10", - "@storybook/core-common": "6.4.0-beta.10", - "@storybook/csf": "0.0.2--canary.6aca495.0", - "@storybook/node-logger": "6.4.0-beta.10", - "@storybook/react-docgen-typescript-plugin": "1.0.2-canary.253f8c1.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/client-logger": "6.5.0-rc.1", + "@storybook/core": "6.5.0-rc.1", + "@storybook/core-common": "6.5.0-rc.1", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/docs-tools": "6.5.0-rc.1", + "@storybook/node-logger": "6.5.0-rc.1", + "@storybook/react-docgen-typescript-plugin": "1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0", "@storybook/semver": "^7.3.2", - "@storybook/store": "6.4.0-beta.10", + "@storybook/store": "6.5.0-rc.1", + "@types/estree": "^0.0.51", + "@types/node": "^14.14.20 || ^16.0.0", "@types/webpack-env": "^1.16.0", + "acorn": "^7.4.1", + "acorn-jsx": "^5.3.1", + "acorn-walk": "^7.2.0", "babel-plugin-add-react-displayname": "^0.0.5", - "babel-plugin-named-asset-import": "^0.3.1", "babel-plugin-react-docgen": "^4.2.1", "core-js": "^3.8.2", + "escodegen": "^2.0.0", + "fs-extra": "^9.0.1", "global": "^4.4.0", - "lodash": "^4.17.20", + "html-tags": "^3.1.0", + "lodash": "^4.17.21", "prop-types": "^15.7.2", - "react-dev-utils": "^11.0.4", - "react-refresh": "^0.10.0", + "react-element-to-jsx-string": "^14.3.4", + "react-refresh": "^0.11.0", "read-pkg-up": "^7.0.1", "regenerator-runtime": "^0.13.7", "ts-dedent": "^2.0.0", - "webpack": "4" + "util-deprecate": "^1.0.2", + "webpack": ">=4.43.0 <6.0.0" }, "devDependencies": { - "@storybook/client-api": "6.4.0-beta.10", - "@types/node": "^14.14.20", - "@types/prompts": "^2.0.9" + "@types/util-deprecate": "^1.0.0", + "jest-specific-snapshot": "^4.0.0", + "webpack": "4" }, "peerDependencies": { "@babel/core": "^7.11.5", - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "require-from-string": "^2.0.2" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, + "@storybook/builder-webpack4": { + "optional": true + }, + "@storybook/builder-webpack5": { + "optional": true + }, + "@storybook/manager-webpack4": { + "optional": true + }, + "@storybook/manager-webpack5": { + "optional": true + }, "typescript": { "optional": true } @@ -96,6 +119,6 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", "sbmodern": "dist/modern/client/index.js" } diff --git a/app/react/preset.js b/app/react/preset.js index 20b417ae97b5..f09c6698e046 100644 --- a/app/react/preset.js +++ b/app/react/preset.js @@ -1,7 +1 @@ -function config(entry = []) { - return [...entry, require.resolve('./dist/esm/client/preview/config')]; -} - -module.exports = { - config, -}; +module.exports = require('./dist/cjs/server/preset'); diff --git a/addons/docs/src/frameworks/react/__testfixtures__/10017-ts-union/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/10017-ts-union/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/10017-ts-union/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/10017-ts-union/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/10017-ts-union/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/10017-ts-union/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/10017-ts-union/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/10017-ts-union/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/10017-ts-union/input.tsx b/app/react/src/client/docs/__testfixtures__/10017-ts-union/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/10017-ts-union/input.tsx rename to app/react/src/client/docs/__testfixtures__/10017-ts-union/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/10017-ts-union/properties.snapshot b/app/react/src/client/docs/__testfixtures__/10017-ts-union/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/10017-ts-union/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/10017-ts-union/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/10278-ts-multiple-components/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/10278-ts-multiple-components/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/10278-ts-multiple-components/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/10278-ts-multiple-components/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/10278-ts-multiple-components/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/10278-ts-multiple-components/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/10278-ts-multiple-components/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/10278-ts-multiple-components/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/10278-ts-multiple-components/input.tsx b/app/react/src/client/docs/__testfixtures__/10278-ts-multiple-components/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/10278-ts-multiple-components/input.tsx rename to app/react/src/client/docs/__testfixtures__/10278-ts-multiple-components/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/10278-ts-multiple-components/properties.snapshot b/app/react/src/client/docs/__testfixtures__/10278-ts-multiple-components/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/10278-ts-multiple-components/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/10278-ts-multiple-components/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8140-js-prop-types-oneof/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/8140-js-prop-types-oneof/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8140-js-prop-types-oneof/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/8140-js-prop-types-oneof/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8140-js-prop-types-oneof/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/8140-js-prop-types-oneof/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8140-js-prop-types-oneof/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/8140-js-prop-types-oneof/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8140-js-prop-types-oneof/input.js b/app/react/src/client/docs/__testfixtures__/8140-js-prop-types-oneof/input.js similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8140-js-prop-types-oneof/input.js rename to app/react/src/client/docs/__testfixtures__/8140-js-prop-types-oneof/input.js diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8140-js-prop-types-oneof/properties.snapshot b/app/react/src/client/docs/__testfixtures__/8140-js-prop-types-oneof/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8140-js-prop-types-oneof/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/8140-js-prop-types-oneof/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8143-ts-imported-types/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/8143-ts-imported-types/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8143-ts-imported-types/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/8143-ts-imported-types/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8143-ts-imported-types/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/8143-ts-imported-types/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8143-ts-imported-types/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/8143-ts-imported-types/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8143-ts-imported-types/input.tsx b/app/react/src/client/docs/__testfixtures__/8143-ts-imported-types/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8143-ts-imported-types/input.tsx rename to app/react/src/client/docs/__testfixtures__/8143-ts-imported-types/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8143-ts-imported-types/properties.snapshot b/app/react/src/client/docs/__testfixtures__/8143-ts-imported-types/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8143-ts-imported-types/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/8143-ts-imported-types/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8143-ts-imported-types/types.ts b/app/react/src/client/docs/__testfixtures__/8143-ts-imported-types/types.ts similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8143-ts-imported-types/types.ts rename to app/react/src/client/docs/__testfixtures__/8143-ts-imported-types/types.ts diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8143-ts-react-fc-generics/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/8143-ts-react-fc-generics/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8143-ts-react-fc-generics/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/8143-ts-react-fc-generics/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8143-ts-react-fc-generics/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/8143-ts-react-fc-generics/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8143-ts-react-fc-generics/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/8143-ts-react-fc-generics/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8143-ts-react-fc-generics/input.tsx b/app/react/src/client/docs/__testfixtures__/8143-ts-react-fc-generics/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8143-ts-react-fc-generics/input.tsx rename to app/react/src/client/docs/__testfixtures__/8143-ts-react-fc-generics/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8143-ts-react-fc-generics/properties.snapshot b/app/react/src/client/docs/__testfixtures__/8143-ts-react-fc-generics/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8143-ts-react-fc-generics/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/8143-ts-react-fc-generics/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8279-js-styled-docgen/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/8279-js-styled-docgen/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8279-js-styled-docgen/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/8279-js-styled-docgen/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8279-js-styled-docgen/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/8279-js-styled-docgen/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8279-js-styled-docgen/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/8279-js-styled-docgen/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8279-js-styled-docgen/input.js b/app/react/src/client/docs/__testfixtures__/8279-js-styled-docgen/input.js similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8279-js-styled-docgen/input.js rename to app/react/src/client/docs/__testfixtures__/8279-js-styled-docgen/input.js diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8279-js-styled-docgen/properties.snapshot b/app/react/src/client/docs/__testfixtures__/8279-js-styled-docgen/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8279-js-styled-docgen/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/8279-js-styled-docgen/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8428-js-static-prop-types/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/8428-js-static-prop-types/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8428-js-static-prop-types/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/8428-js-static-prop-types/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8428-js-static-prop-types/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/8428-js-static-prop-types/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8428-js-static-prop-types/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/8428-js-static-prop-types/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8428-js-static-prop-types/input.js b/app/react/src/client/docs/__testfixtures__/8428-js-static-prop-types/input.js similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8428-js-static-prop-types/input.js rename to app/react/src/client/docs/__testfixtures__/8428-js-static-prop-types/input.js diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8428-js-static-prop-types/properties.snapshot b/app/react/src/client/docs/__testfixtures__/8428-js-static-prop-types/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8428-js-static-prop-types/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/8428-js-static-prop-types/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8663-js-styled-components/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/8663-js-styled-components/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8663-js-styled-components/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/8663-js-styled-components/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8663-js-styled-components/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/8663-js-styled-components/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8663-js-styled-components/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/8663-js-styled-components/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8663-js-styled-components/input.js b/app/react/src/client/docs/__testfixtures__/8663-js-styled-components/input.js similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8663-js-styled-components/input.js rename to app/react/src/client/docs/__testfixtures__/8663-js-styled-components/input.js diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8663-js-styled-components/properties.snapshot b/app/react/src/client/docs/__testfixtures__/8663-js-styled-components/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8663-js-styled-components/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/8663-js-styled-components/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8740-ts-multi-props/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/8740-ts-multi-props/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8740-ts-multi-props/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/8740-ts-multi-props/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8740-ts-multi-props/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/8740-ts-multi-props/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8740-ts-multi-props/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/8740-ts-multi-props/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8740-ts-multi-props/input.tsx b/app/react/src/client/docs/__testfixtures__/8740-ts-multi-props/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8740-ts-multi-props/input.tsx rename to app/react/src/client/docs/__testfixtures__/8740-ts-multi-props/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8740-ts-multi-props/properties.snapshot b/app/react/src/client/docs/__testfixtures__/8740-ts-multi-props/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8740-ts-multi-props/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/8740-ts-multi-props/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8894-9511-ts-forward-ref/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/8894-9511-ts-forward-ref/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8894-9511-ts-forward-ref/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/8894-9511-ts-forward-ref/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8894-9511-ts-forward-ref/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/8894-9511-ts-forward-ref/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8894-9511-ts-forward-ref/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/8894-9511-ts-forward-ref/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8894-9511-ts-forward-ref/input.tsx b/app/react/src/client/docs/__testfixtures__/8894-9511-ts-forward-ref/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8894-9511-ts-forward-ref/input.tsx rename to app/react/src/client/docs/__testfixtures__/8894-9511-ts-forward-ref/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/8894-9511-ts-forward-ref/properties.snapshot b/app/react/src/client/docs/__testfixtures__/8894-9511-ts-forward-ref/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/8894-9511-ts-forward-ref/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/8894-9511-ts-forward-ref/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9023-js-hoc/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/9023-js-hoc/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9023-js-hoc/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/9023-js-hoc/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9023-js-hoc/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/9023-js-hoc/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9023-js-hoc/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/9023-js-hoc/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9023-js-hoc/input.js b/app/react/src/client/docs/__testfixtures__/9023-js-hoc/input.js similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9023-js-hoc/input.js rename to app/react/src/client/docs/__testfixtures__/9023-js-hoc/input.js diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9023-js-hoc/properties.snapshot b/app/react/src/client/docs/__testfixtures__/9023-js-hoc/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9023-js-hoc/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/9023-js-hoc/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9399-js-proptypes-shape/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/9399-js-proptypes-shape/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9399-js-proptypes-shape/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/9399-js-proptypes-shape/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9399-js-proptypes-shape/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/9399-js-proptypes-shape/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9399-js-proptypes-shape/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/9399-js-proptypes-shape/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9399-js-proptypes-shape/input.js b/app/react/src/client/docs/__testfixtures__/9399-js-proptypes-shape/input.js similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9399-js-proptypes-shape/input.js rename to app/react/src/client/docs/__testfixtures__/9399-js-proptypes-shape/input.js diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9399-js-proptypes-shape/properties.snapshot b/app/react/src/client/docs/__testfixtures__/9399-js-proptypes-shape/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9399-js-proptypes-shape/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/9399-js-proptypes-shape/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9465-ts-type-props/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/9465-ts-type-props/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9465-ts-type-props/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/9465-ts-type-props/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9465-ts-type-props/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/9465-ts-type-props/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9465-ts-type-props/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/9465-ts-type-props/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9465-ts-type-props/input.tsx b/app/react/src/client/docs/__testfixtures__/9465-ts-type-props/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9465-ts-type-props/input.tsx rename to app/react/src/client/docs/__testfixtures__/9465-ts-type-props/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9465-ts-type-props/properties.snapshot b/app/react/src/client/docs/__testfixtures__/9465-ts-type-props/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9465-ts-type-props/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/9465-ts-type-props/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9493-ts-display-name/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/9493-ts-display-name/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9493-ts-display-name/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/9493-ts-display-name/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9493-ts-display-name/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/9493-ts-display-name/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9493-ts-display-name/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/9493-ts-display-name/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9493-ts-display-name/input.tsx b/app/react/src/client/docs/__testfixtures__/9493-ts-display-name/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9493-ts-display-name/input.tsx rename to app/react/src/client/docs/__testfixtures__/9493-ts-display-name/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9493-ts-display-name/properties.snapshot b/app/react/src/client/docs/__testfixtures__/9493-ts-display-name/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9493-ts-display-name/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/9493-ts-display-name/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9556-ts-react-default-exports/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/9556-ts-react-default-exports/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9556-ts-react-default-exports/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/9556-ts-react-default-exports/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9556-ts-react-default-exports/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/9556-ts-react-default-exports/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9556-ts-react-default-exports/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/9556-ts-react-default-exports/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9556-ts-react-default-exports/input.tsx b/app/react/src/client/docs/__testfixtures__/9556-ts-react-default-exports/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9556-ts-react-default-exports/input.tsx rename to app/react/src/client/docs/__testfixtures__/9556-ts-react-default-exports/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9556-ts-react-default-exports/properties.snapshot b/app/react/src/client/docs/__testfixtures__/9556-ts-react-default-exports/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9556-ts-react-default-exports/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/9556-ts-react-default-exports/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9575-ts-camel-case/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/9575-ts-camel-case/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9575-ts-camel-case/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/9575-ts-camel-case/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9575-ts-camel-case/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/9575-ts-camel-case/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9575-ts-camel-case/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/9575-ts-camel-case/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9575-ts-camel-case/input.tsx b/app/react/src/client/docs/__testfixtures__/9575-ts-camel-case/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9575-ts-camel-case/input.tsx rename to app/react/src/client/docs/__testfixtures__/9575-ts-camel-case/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9575-ts-camel-case/properties.snapshot b/app/react/src/client/docs/__testfixtures__/9575-ts-camel-case/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9575-ts-camel-case/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/9575-ts-camel-case/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9586-js-react-memo/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/9586-js-react-memo/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9586-js-react-memo/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/9586-js-react-memo/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9586-js-react-memo/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/9586-js-react-memo/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9586-js-react-memo/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/9586-js-react-memo/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9586-js-react-memo/input.js b/app/react/src/client/docs/__testfixtures__/9586-js-react-memo/input.js similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9586-js-react-memo/input.js rename to app/react/src/client/docs/__testfixtures__/9586-js-react-memo/input.js diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9586-js-react-memo/properties.snapshot b/app/react/src/client/docs/__testfixtures__/9586-js-react-memo/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9586-js-react-memo/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/9586-js-react-memo/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9591-ts-import-types/Bar.tsx b/app/react/src/client/docs/__testfixtures__/9591-ts-import-types/Bar.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9591-ts-import-types/Bar.tsx rename to app/react/src/client/docs/__testfixtures__/9591-ts-import-types/Bar.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9591-ts-import-types/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/9591-ts-import-types/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9591-ts-import-types/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/9591-ts-import-types/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9591-ts-import-types/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/9591-ts-import-types/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9591-ts-import-types/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/9591-ts-import-types/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9591-ts-import-types/input.tsx b/app/react/src/client/docs/__testfixtures__/9591-ts-import-types/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9591-ts-import-types/input.tsx rename to app/react/src/client/docs/__testfixtures__/9591-ts-import-types/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9591-ts-import-types/properties.snapshot b/app/react/src/client/docs/__testfixtures__/9591-ts-import-types/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9591-ts-import-types/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/9591-ts-import-types/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9592-ts-styled-props/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/9592-ts-styled-props/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9592-ts-styled-props/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/9592-ts-styled-props/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9592-ts-styled-props/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/9592-ts-styled-props/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9592-ts-styled-props/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/9592-ts-styled-props/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9592-ts-styled-props/input.tsx b/app/react/src/client/docs/__testfixtures__/9592-ts-styled-props/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9592-ts-styled-props/input.tsx rename to app/react/src/client/docs/__testfixtures__/9592-ts-styled-props/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9592-ts-styled-props/properties.snapshot b/app/react/src/client/docs/__testfixtures__/9592-ts-styled-props/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9592-ts-styled-props/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/9592-ts-styled-props/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9626-js-default-values/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/9626-js-default-values/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9626-js-default-values/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/9626-js-default-values/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9626-js-default-values/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/9626-js-default-values/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9626-js-default-values/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/9626-js-default-values/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9626-js-default-values/input.js b/app/react/src/client/docs/__testfixtures__/9626-js-default-values/input.js similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9626-js-default-values/input.js rename to app/react/src/client/docs/__testfixtures__/9626-js-default-values/input.js diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9626-js-default-values/properties.snapshot b/app/react/src/client/docs/__testfixtures__/9626-js-default-values/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9626-js-default-values/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/9626-js-default-values/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9668-js-proptypes-no-jsdoc/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/9668-js-proptypes-no-jsdoc/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9668-js-proptypes-no-jsdoc/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/9668-js-proptypes-no-jsdoc/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9668-js-proptypes-no-jsdoc/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/9668-js-proptypes-no-jsdoc/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9668-js-proptypes-no-jsdoc/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/9668-js-proptypes-no-jsdoc/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9668-js-proptypes-no-jsdoc/input.js b/app/react/src/client/docs/__testfixtures__/9668-js-proptypes-no-jsdoc/input.js similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9668-js-proptypes-no-jsdoc/input.js rename to app/react/src/client/docs/__testfixtures__/9668-js-proptypes-no-jsdoc/input.js diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9668-js-proptypes-no-jsdoc/properties.snapshot b/app/react/src/client/docs/__testfixtures__/9668-js-proptypes-no-jsdoc/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9668-js-proptypes-no-jsdoc/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/9668-js-proptypes-no-jsdoc/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9721-ts-deprecated-jsdoc/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/9721-ts-deprecated-jsdoc/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9721-ts-deprecated-jsdoc/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/9721-ts-deprecated-jsdoc/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9721-ts-deprecated-jsdoc/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/9721-ts-deprecated-jsdoc/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9721-ts-deprecated-jsdoc/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/9721-ts-deprecated-jsdoc/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9721-ts-deprecated-jsdoc/input.tsx b/app/react/src/client/docs/__testfixtures__/9721-ts-deprecated-jsdoc/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9721-ts-deprecated-jsdoc/input.tsx rename to app/react/src/client/docs/__testfixtures__/9721-ts-deprecated-jsdoc/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9721-ts-deprecated-jsdoc/properties.snapshot b/app/react/src/client/docs/__testfixtures__/9721-ts-deprecated-jsdoc/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9721-ts-deprecated-jsdoc/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/9721-ts-deprecated-jsdoc/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9764-ts-extend-props/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/9764-ts-extend-props/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9764-ts-extend-props/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/9764-ts-extend-props/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9764-ts-extend-props/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/9764-ts-extend-props/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9764-ts-extend-props/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/9764-ts-extend-props/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9764-ts-extend-props/input.tsx b/app/react/src/client/docs/__testfixtures__/9764-ts-extend-props/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9764-ts-extend-props/input.tsx rename to app/react/src/client/docs/__testfixtures__/9764-ts-extend-props/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9764-ts-extend-props/properties.snapshot b/app/react/src/client/docs/__testfixtures__/9764-ts-extend-props/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9764-ts-extend-props/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/9764-ts-extend-props/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9827-ts-default-values/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/9827-ts-default-values/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9827-ts-default-values/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/9827-ts-default-values/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9827-ts-default-values/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/9827-ts-default-values/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9827-ts-default-values/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/9827-ts-default-values/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9827-ts-default-values/input.tsx b/app/react/src/client/docs/__testfixtures__/9827-ts-default-values/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9827-ts-default-values/input.tsx rename to app/react/src/client/docs/__testfixtures__/9827-ts-default-values/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9827-ts-default-values/properties.snapshot b/app/react/src/client/docs/__testfixtures__/9827-ts-default-values/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9827-ts-default-values/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/9827-ts-default-values/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9832-ts-enum-export/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/9832-ts-enum-export/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9832-ts-enum-export/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/9832-ts-enum-export/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9832-ts-enum-export/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/9832-ts-enum-export/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9832-ts-enum-export/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/9832-ts-enum-export/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9832-ts-enum-export/input.tsx b/app/react/src/client/docs/__testfixtures__/9832-ts-enum-export/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9832-ts-enum-export/input.tsx rename to app/react/src/client/docs/__testfixtures__/9832-ts-enum-export/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9832-ts-enum-export/properties.snapshot b/app/react/src/client/docs/__testfixtures__/9832-ts-enum-export/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9832-ts-enum-export/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/9832-ts-enum-export/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9922-ts-component-props/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/9922-ts-component-props/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9922-ts-component-props/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/9922-ts-component-props/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9922-ts-component-props/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/9922-ts-component-props/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9922-ts-component-props/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/9922-ts-component-props/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9922-ts-component-props/input.tsx b/app/react/src/client/docs/__testfixtures__/9922-ts-component-props/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9922-ts-component-props/input.tsx rename to app/react/src/client/docs/__testfixtures__/9922-ts-component-props/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/9922-ts-component-props/properties.snapshot b/app/react/src/client/docs/__testfixtures__/9922-ts-component-props/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/9922-ts-component-props/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/9922-ts-component-props/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/imported.js b/app/react/src/client/docs/__testfixtures__/imported.js similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/imported.js rename to app/react/src/client/docs/__testfixtures__/imported.js diff --git a/addons/docs/src/frameworks/react/__testfixtures__/js-class-component/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/js-class-component/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/js-class-component/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/js-class-component/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/js-class-component/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/js-class-component/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/js-class-component/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/js-class-component/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/js-class-component/input.js b/app/react/src/client/docs/__testfixtures__/js-class-component/input.js similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/js-class-component/input.js rename to app/react/src/client/docs/__testfixtures__/js-class-component/input.js diff --git a/addons/docs/src/frameworks/react/__testfixtures__/js-class-component/properties.snapshot b/app/react/src/client/docs/__testfixtures__/js-class-component/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/js-class-component/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/js-class-component/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/js-function-component-inline-defaults-no-propTypes/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/js-function-component-inline-defaults-no-propTypes/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/js-function-component-inline-defaults-no-propTypes/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/js-function-component-inline-defaults-no-propTypes/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/js-function-component-inline-defaults-no-propTypes/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/js-function-component-inline-defaults-no-propTypes/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/js-function-component-inline-defaults-no-propTypes/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/js-function-component-inline-defaults-no-propTypes/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/js-function-component-inline-defaults-no-propTypes/input.js b/app/react/src/client/docs/__testfixtures__/js-function-component-inline-defaults-no-propTypes/input.js similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/js-function-component-inline-defaults-no-propTypes/input.js rename to app/react/src/client/docs/__testfixtures__/js-function-component-inline-defaults-no-propTypes/input.js diff --git a/addons/docs/src/frameworks/react/__testfixtures__/js-function-component-inline-defaults-no-propTypes/properties.snapshot b/app/react/src/client/docs/__testfixtures__/js-function-component-inline-defaults-no-propTypes/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/js-function-component-inline-defaults-no-propTypes/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/js-function-component-inline-defaults-no-propTypes/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/js-function-component-inline-defaults/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/js-function-component-inline-defaults/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/js-function-component-inline-defaults/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/js-function-component-inline-defaults/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/js-function-component-inline-defaults/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/js-function-component-inline-defaults/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/js-function-component-inline-defaults/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/js-function-component-inline-defaults/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/js-function-component-inline-defaults/input.js b/app/react/src/client/docs/__testfixtures__/js-function-component-inline-defaults/input.js similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/js-function-component-inline-defaults/input.js rename to app/react/src/client/docs/__testfixtures__/js-function-component-inline-defaults/input.js diff --git a/addons/docs/src/frameworks/react/__testfixtures__/js-function-component-inline-defaults/properties.snapshot b/app/react/src/client/docs/__testfixtures__/js-function-component-inline-defaults/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/js-function-component-inline-defaults/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/js-function-component-inline-defaults/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/js-function-component/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/js-function-component/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/js-function-component/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/js-function-component/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/js-function-component/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/js-function-component/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/js-function-component/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/js-function-component/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/js-function-component/input.js b/app/react/src/client/docs/__testfixtures__/js-function-component/input.js similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/js-function-component/input.js rename to app/react/src/client/docs/__testfixtures__/js-function-component/input.js diff --git a/addons/docs/src/frameworks/react/__testfixtures__/js-function-component/properties.snapshot b/app/react/src/client/docs/__testfixtures__/js-function-component/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/js-function-component/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/js-function-component/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/ts-function-component-inline-defaults/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/ts-function-component-inline-defaults/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/ts-function-component-inline-defaults/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/ts-function-component-inline-defaults/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/ts-function-component-inline-defaults/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/ts-function-component-inline-defaults/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/ts-function-component-inline-defaults/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/ts-function-component-inline-defaults/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/ts-function-component-inline-defaults/input.tsx b/app/react/src/client/docs/__testfixtures__/ts-function-component-inline-defaults/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/ts-function-component-inline-defaults/input.tsx rename to app/react/src/client/docs/__testfixtures__/ts-function-component-inline-defaults/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/ts-function-component-inline-defaults/properties.snapshot b/app/react/src/client/docs/__testfixtures__/ts-function-component-inline-defaults/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/ts-function-component-inline-defaults/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/ts-function-component-inline-defaults/properties.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/ts-function-component/argTypes.snapshot b/app/react/src/client/docs/__testfixtures__/ts-function-component/argTypes.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/ts-function-component/argTypes.snapshot rename to app/react/src/client/docs/__testfixtures__/ts-function-component/argTypes.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/ts-function-component/docgen.snapshot b/app/react/src/client/docs/__testfixtures__/ts-function-component/docgen.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/ts-function-component/docgen.snapshot rename to app/react/src/client/docs/__testfixtures__/ts-function-component/docgen.snapshot diff --git a/addons/docs/src/frameworks/react/__testfixtures__/ts-function-component/input.tsx b/app/react/src/client/docs/__testfixtures__/ts-function-component/input.tsx similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/ts-function-component/input.tsx rename to app/react/src/client/docs/__testfixtures__/ts-function-component/input.tsx diff --git a/addons/docs/src/frameworks/react/__testfixtures__/ts-function-component/properties.snapshot b/app/react/src/client/docs/__testfixtures__/ts-function-component/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/react/__testfixtures__/ts-function-component/properties.snapshot rename to app/react/src/client/docs/__testfixtures__/ts-function-component/properties.snapshot diff --git a/app/react/src/client/docs/config.ts b/app/react/src/client/docs/config.ts new file mode 100644 index 000000000000..393befc24150 --- /dev/null +++ b/app/react/src/client/docs/config.ts @@ -0,0 +1,20 @@ +import type { PartialStoryFn } from '@storybook/csf'; +import { extractComponentDescription, enhanceArgTypes } from '@storybook/docs-tools'; + +import { ReactFramework } from '..'; +import { extractArgTypes } from './extractArgTypes'; +import { jsxDecorator } from './jsxDecorator'; + +export const parameters = { + docs: { + inlineStories: true, + // NOTE: that the result is a react element. Hooks support is provided by the outer code. + prepareForInline: (storyFn: PartialStoryFn) => storyFn(), + extractArgTypes, + extractComponentDescription, + }, +}; + +export const decorators = [jsxDecorator]; + +export const argTypesEnhancers = [enhanceArgTypes]; diff --git a/app/react/src/client/docs/extractArgTypes.ts b/app/react/src/client/docs/extractArgTypes.ts new file mode 100644 index 000000000000..333052be43e1 --- /dev/null +++ b/app/react/src/client/docs/extractArgTypes.ts @@ -0,0 +1,36 @@ +import type { StrictArgTypes } from '@storybook/csf'; +import type { PropDef, ArgTypesExtractor } from '@storybook/docs-tools'; +import { extractProps } from './extractProps'; + +export const extractArgTypes: ArgTypesExtractor = (component) => { + if (component) { + const { rows } = extractProps(component); + if (rows) { + return rows.reduce((acc: StrictArgTypes, row: PropDef) => { + const { + name, + description, + type, + sbType, + defaultValue: defaultSummary, + jsDocTags, + required, + } = row; + + acc[name] = { + name, + description, + type: { required, ...sbType }, + table: { + type, + jsDocTags, + defaultValue: defaultSummary, + }, + }; + return acc; + }, {}); + } + } + + return null; +}; diff --git a/addons/docs/src/frameworks/react/extractProps.ts b/app/react/src/client/docs/extractProps.ts similarity index 94% rename from addons/docs/src/frameworks/react/extractProps.ts rename to app/react/src/client/docs/extractProps.ts index 008aa8b26117..e763fd9e374f 100644 --- a/addons/docs/src/frameworks/react/extractProps.ts +++ b/app/react/src/client/docs/extractProps.ts @@ -5,12 +5,14 @@ import { extractComponentProps, PropsExtractor, TypeSystem, -} from '../../lib/docgen'; -import { Component } from '../../blocks/types'; +} from '@storybook/docs-tools'; import { enhancePropTypesProps } from './propTypes/handleProp'; import { enhanceTypeScriptProps } from './typeScript/handleProp'; import { isMemo } from './lib'; +// FIXME +type Component = any; + export interface PropDefMap { [p: string]: PropDef; } diff --git a/addons/docs/src/frameworks/react/jsxDecorator.test.tsx b/app/react/src/client/docs/jsxDecorator.test.tsx similarity index 88% rename from addons/docs/src/frameworks/react/jsxDecorator.test.tsx rename to app/react/src/client/docs/jsxDecorator.test.tsx index b18e9984c51e..86e70c1c87e3 100644 --- a/addons/docs/src/frameworks/react/jsxDecorator.test.tsx +++ b/app/react/src/client/docs/jsxDecorator.test.tsx @@ -2,8 +2,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import { addons, StoryContext, useEffect } from '@storybook/addons'; +import { SNIPPET_RENDERED } from '@storybook/docs-tools'; import { renderJsx, jsxDecorator } from './jsxDecorator'; -import { SNIPPET_RENDERED } from '../../shared'; jest.mock('@storybook/addons'); const mockedAddons = addons as jest.Mocked; @@ -284,4 +284,33 @@ describe('jsxDecorator', () => { '
' ); }); + + it('handles stories that trigger Suspense', async () => { + // if a story function uses a hook or other library that triggers suspense, it will throw a Promise until it is resolved + // and then it will return the story content after the promise is resolved + const storyFn = jest.fn(); + storyFn + .mockImplementationOnce(() => { + throw Promise.resolve(); + }) + .mockImplementation(() => { + return
resolved args story
; + }); + const jsx = ''; + const context = makeContext('args', { __isArgsStory: true, jsx }, {}); + expect(() => { + jsxDecorator(storyFn, context); + }).toThrow(Promise); + jsxDecorator(storyFn, context); + await new Promise((r) => setTimeout(r, 0)); + + expect(mockChannel.emit).toHaveBeenCalledTimes(2); + expect(mockChannel.emit).nthCalledWith(1, SNIPPET_RENDERED, 'jsx-test--args', ''); + expect(mockChannel.emit).nthCalledWith( + 2, + SNIPPET_RENDERED, + 'jsx-test--args', + '
\n resolved args story\n
' + ); + }); }); diff --git a/addons/docs/src/frameworks/react/jsxDecorator.tsx b/app/react/src/client/docs/jsxDecorator.tsx similarity index 97% rename from addons/docs/src/frameworks/react/jsxDecorator.tsx rename to app/react/src/client/docs/jsxDecorator.tsx index 9170adaa3ccb..20a294ea35f8 100644 --- a/addons/docs/src/frameworks/react/jsxDecorator.tsx +++ b/app/react/src/client/docs/jsxDecorator.tsx @@ -5,11 +5,11 @@ import deprecate from 'util-deprecate'; import { addons, useEffect } from '@storybook/addons'; import { StoryContext, ArgsStoryFn, PartialStoryFn } from '@storybook/csf'; +import { SourceType, SNIPPET_RENDERED, getDocgenSection } from '@storybook/docs-tools'; import { logger } from '@storybook/client-logger'; -import { ReactFramework } from '@storybook/react'; -import { SourceType, SNIPPET_RENDERED } from '../../shared'; -import { getDocgenSection } from '../../lib/docgen'; +import { ReactFramework } from '..'; + import { isMemo, isForwardRef } from './lib'; type JSXOptions = Options & { @@ -177,7 +177,6 @@ export const jsxDecorator = ( ) => { const channel = addons.getChannel(); const skip = skipJsxRender(context); - const story = storyFn(); let jsx = ''; @@ -185,6 +184,7 @@ export const jsxDecorator = ( if (!skip) channel.emit(SNIPPET_RENDERED, (context || {}).id, jsx); }); + const story = storyFn(); // We only need to render JSX if the source block is actually going to // consume it. Otherwise it's just slowing us down. if (skip) { diff --git a/addons/docs/src/frameworks/react/lib/captions.ts b/app/react/src/client/docs/lib/captions.ts similarity index 100% rename from addons/docs/src/frameworks/react/lib/captions.ts rename to app/react/src/client/docs/lib/captions.ts diff --git a/addons/docs/src/frameworks/react/lib/componentTypes.ts b/app/react/src/client/docs/lib/componentTypes.ts similarity index 100% rename from addons/docs/src/frameworks/react/lib/componentTypes.ts rename to app/react/src/client/docs/lib/componentTypes.ts diff --git a/app/react/src/client/docs/lib/defaultValues/createDefaultValue.ts b/app/react/src/client/docs/lib/defaultValues/createDefaultValue.ts new file mode 100644 index 000000000000..c2fb441d32c1 --- /dev/null +++ b/app/react/src/client/docs/lib/defaultValues/createDefaultValue.ts @@ -0,0 +1,85 @@ +import { + createSummaryValue, + isTooLongForDefaultValueSummary, + PropDefaultValue, +} from '@storybook/docs-tools'; + +import { FUNCTION_CAPTION, ELEMENT_CAPTION } from '../captions'; +import { + InspectionFunction, + InspectionResult, + InspectionType, + InspectionElement, + InspectionIdentifiableInferedType, + inspectValue, +} from '../inspection'; +import { isHtmlTag } from '../isHtmlTag'; +import { generateCode } from '../generateCode'; +import { generateObject } from './generateObject'; +import { generateArray } from './generateArray'; +import { getPrettyIdentifier } from './prettyIdentifier'; + +function generateFunc({ inferredType, ast }: InspectionResult): PropDefaultValue { + const { identifier } = inferredType as InspectionFunction; + + if (identifier != null) { + return createSummaryValue( + getPrettyIdentifier(inferredType as InspectionIdentifiableInferedType), + generateCode(ast) + ); + } + + const prettyCaption = generateCode(ast, true); + + return !isTooLongForDefaultValueSummary(prettyCaption) + ? createSummaryValue(prettyCaption) + : createSummaryValue(FUNCTION_CAPTION, generateCode(ast)); +} + +// All elements are JSX elements. +// JSX elements are not supported by escodegen. +function generateElement( + defaultValue: string, + inspectionResult: InspectionResult +): PropDefaultValue { + const { inferredType } = inspectionResult; + const { identifier } = inferredType as InspectionElement; + + if (identifier != null) { + if (!isHtmlTag(identifier)) { + const prettyIdentifier = getPrettyIdentifier( + inferredType as InspectionIdentifiableInferedType + ); + + return createSummaryValue(prettyIdentifier, defaultValue); + } + } + + return !isTooLongForDefaultValueSummary(defaultValue) + ? createSummaryValue(defaultValue) + : createSummaryValue(ELEMENT_CAPTION, defaultValue); +} + +export function createDefaultValue(defaultValue: string): PropDefaultValue { + try { + const inspectionResult = inspectValue(defaultValue); + + switch (inspectionResult.inferredType.type) { + case InspectionType.OBJECT: + return generateObject(inspectionResult); + case InspectionType.FUNCTION: + return generateFunc(inspectionResult); + case InspectionType.ELEMENT: + return generateElement(defaultValue, inspectionResult); + case InspectionType.ARRAY: + return generateArray(inspectionResult); + default: + return null; + } + } catch (e) { + // eslint-disable-next-line no-console + console.error(e); + } + + return null; +} diff --git a/addons/docs/src/frameworks/react/lib/defaultValues/createFromRawDefaultProp.ts b/app/react/src/client/docs/lib/defaultValues/createFromRawDefaultProp.ts similarity index 96% rename from addons/docs/src/frameworks/react/lib/defaultValues/createFromRawDefaultProp.ts rename to app/react/src/client/docs/lib/defaultValues/createFromRawDefaultProp.ts index 6ef614385b5f..1fba89efa580 100644 --- a/addons/docs/src/frameworks/react/lib/defaultValues/createFromRawDefaultProp.ts +++ b/app/react/src/client/docs/lib/defaultValues/createFromRawDefaultProp.ts @@ -1,11 +1,15 @@ -import { PropDefaultValue } from '@storybook/components'; import isPlainObject from 'lodash/isPlainObject'; import isFunction from 'lodash/isFunction'; import isString from 'lodash/isString'; // @ts-ignore import reactElementToJSXString from 'react-element-to-jsx-string'; -import { createSummaryValue, isTooLongForDefaultValueSummary } from '../../../../lib'; -import { PropDef } from '../../../../lib/docgen'; +import { + PropDef, + createSummaryValue, + isTooLongForDefaultValueSummary, + PropDefaultValue, +} from '@storybook/docs-tools'; + import { inspectValue, InspectionFunction } from '../inspection'; import { generateObject } from './generateObject'; import { generateArray } from './generateArray'; diff --git a/addons/docs/src/frameworks/react/lib/defaultValues/generateArray.ts b/app/react/src/client/docs/lib/defaultValues/generateArray.ts similarity index 79% rename from addons/docs/src/frameworks/react/lib/defaultValues/generateArray.ts rename to app/react/src/client/docs/lib/defaultValues/generateArray.ts index 6956b0979313..8d80f9a371fb 100644 --- a/addons/docs/src/frameworks/react/lib/defaultValues/generateArray.ts +++ b/app/react/src/client/docs/lib/defaultValues/generateArray.ts @@ -1,7 +1,10 @@ -import { PropDefaultValue } from '@storybook/components'; +import { + createSummaryValue, + isTooLongForDefaultValueSummary, + PropDefaultValue, +} from '@storybook/docs-tools'; import { ARRAY_CAPTION } from '../captions'; import { InspectionResult, InspectionArray } from '../inspection'; -import { createSummaryValue, isTooLongForDefaultValueSummary } from '../../../../lib'; import { generateArrayCode } from '../generateCode'; export function generateArray({ inferredType, ast }: InspectionResult): PropDefaultValue { diff --git a/addons/docs/src/frameworks/react/lib/defaultValues/generateObject.ts b/app/react/src/client/docs/lib/defaultValues/generateObject.ts similarity index 80% rename from addons/docs/src/frameworks/react/lib/defaultValues/generateObject.ts rename to app/react/src/client/docs/lib/defaultValues/generateObject.ts index c831271d6a62..2aa6e45e7a3f 100644 --- a/addons/docs/src/frameworks/react/lib/defaultValues/generateObject.ts +++ b/app/react/src/client/docs/lib/defaultValues/generateObject.ts @@ -1,7 +1,11 @@ -import { PropDefaultValue } from '@storybook/components'; +import { + createSummaryValue, + isTooLongForDefaultValueSummary, + PropDefaultValue, +} from '@storybook/docs-tools'; + import { OBJECT_CAPTION } from '../captions'; import { InspectionResult, InspectionArray } from '../inspection'; -import { createSummaryValue, isTooLongForDefaultValueSummary } from '../../../../lib'; import { generateObjectCode } from '../generateCode'; export function generateObject({ inferredType, ast }: InspectionResult): PropDefaultValue { diff --git a/addons/docs/src/frameworks/react/lib/defaultValues/index.ts b/app/react/src/client/docs/lib/defaultValues/index.ts similarity index 100% rename from addons/docs/src/frameworks/react/lib/defaultValues/index.ts rename to app/react/src/client/docs/lib/defaultValues/index.ts diff --git a/addons/docs/src/frameworks/react/lib/defaultValues/prettyIdentifier.ts b/app/react/src/client/docs/lib/defaultValues/prettyIdentifier.ts similarity index 100% rename from addons/docs/src/frameworks/react/lib/defaultValues/prettyIdentifier.ts rename to app/react/src/client/docs/lib/defaultValues/prettyIdentifier.ts diff --git a/addons/docs/src/frameworks/react/lib/generateCode.ts b/app/react/src/client/docs/lib/generateCode.ts similarity index 100% rename from addons/docs/src/frameworks/react/lib/generateCode.ts rename to app/react/src/client/docs/lib/generateCode.ts diff --git a/addons/docs/src/frameworks/react/lib/index.ts b/app/react/src/client/docs/lib/index.ts similarity index 100% rename from addons/docs/src/frameworks/react/lib/index.ts rename to app/react/src/client/docs/lib/index.ts diff --git a/addons/docs/src/frameworks/react/lib/inspection/acornParser.test.ts b/app/react/src/client/docs/lib/inspection/acornParser.test.ts similarity index 99% rename from addons/docs/src/frameworks/react/lib/inspection/acornParser.test.ts rename to app/react/src/client/docs/lib/inspection/acornParser.test.ts index 9367f035b708..f49752aed6f8 100644 --- a/addons/docs/src/frameworks/react/lib/inspection/acornParser.test.ts +++ b/app/react/src/client/docs/lib/inspection/acornParser.test.ts @@ -148,7 +148,7 @@ describe('parse', () => { }); it('support array', () => { - const result = parse("['bottom-left', 'botton-center', 'bottom-right']"); + const result = parse("['bottom-left', 'bottom-center', 'bottom-right']"); const inferredType = result.inferredType as InspectionArray; expect(inferredType.type).toBe(InspectionType.ARRAY); diff --git a/addons/docs/src/frameworks/react/lib/inspection/acornParser.ts b/app/react/src/client/docs/lib/inspection/acornParser.ts similarity index 97% rename from addons/docs/src/frameworks/react/lib/inspection/acornParser.ts rename to app/react/src/client/docs/lib/inspection/acornParser.ts index 28a5a7ad2267..78290b9e616e 100644 --- a/addons/docs/src/frameworks/react/lib/inspection/acornParser.ts +++ b/app/react/src/client/docs/lib/inspection/acornParser.ts @@ -1,6 +1,5 @@ import { Parser } from 'acorn'; import jsx from 'acorn-jsx'; -// eslint-disable-next-line import/no-extraneous-dependencies import estree from 'estree'; import * as acornWalk from 'acorn-walk'; import { @@ -207,7 +206,7 @@ function parseExpression(expression: any): ParsingResult } export function parse(value: string): ParsingResult { - const ast = (acornParser.parse(`(${value})`) as unknown) as estree.Program; + const ast = acornParser.parse(`(${value})`) as unknown as estree.Program; let parsingResult: ParsingResult = { inferredType: { type: InspectionType.UNKNOWN }, diff --git a/addons/docs/src/frameworks/react/lib/inspection/index.ts b/app/react/src/client/docs/lib/inspection/index.ts similarity index 100% rename from addons/docs/src/frameworks/react/lib/inspection/index.ts rename to app/react/src/client/docs/lib/inspection/index.ts diff --git a/addons/docs/src/frameworks/react/lib/inspection/inspectValue.ts b/app/react/src/client/docs/lib/inspection/inspectValue.ts similarity index 100% rename from addons/docs/src/frameworks/react/lib/inspection/inspectValue.ts rename to app/react/src/client/docs/lib/inspection/inspectValue.ts diff --git a/addons/docs/src/frameworks/react/lib/inspection/types.ts b/app/react/src/client/docs/lib/inspection/types.ts similarity index 100% rename from addons/docs/src/frameworks/react/lib/inspection/types.ts rename to app/react/src/client/docs/lib/inspection/types.ts diff --git a/addons/docs/src/frameworks/react/lib/isHtmlTag.ts b/app/react/src/client/docs/lib/isHtmlTag.ts similarity index 100% rename from addons/docs/src/frameworks/react/lib/isHtmlTag.ts rename to app/react/src/client/docs/lib/isHtmlTag.ts diff --git a/app/react/src/client/docs/propTypes/createType.ts b/app/react/src/client/docs/propTypes/createType.ts new file mode 100644 index 000000000000..cc3286dce0cc --- /dev/null +++ b/app/react/src/client/docs/propTypes/createType.ts @@ -0,0 +1,408 @@ +import type { ExtractedProp, DocgenPropType, PropType } from '@storybook/docs-tools'; +import { createSummaryValue, isTooLongForTypeSummary } from '@storybook/docs-tools'; +import { + generateFuncSignature, + generateShortFuncSignature, + toMultilineSignature, +} from './generateFuncSignature'; +import { + OBJECT_CAPTION, + ARRAY_CAPTION, + CLASS_CAPTION, + FUNCTION_CAPTION, + ELEMENT_CAPTION, + CUSTOM_CAPTION, + isHtmlTag, + generateObjectCode, + generateCode, +} from '../lib'; +import { + InspectionType, + inspectValue, + InspectionElement, + InspectionObject, + InspectionArray, +} from '../lib/inspection'; + +const MAX_FUNC_LENGTH = 150; + +enum PropTypesType { + CUSTOM = 'custom', + ANY = 'any', + FUNC = 'func', + SHAPE = 'shape', + OBJECT = 'object', + INSTANCEOF = 'instanceOf', + OBJECTOF = 'objectOf', + UNION = 'union', + ENUM = 'enum', + ARRAYOF = 'arrayOf', + ELEMENT = 'element', + ELEMENTTYPE = 'elementType', + NODE = 'node', +} + +interface EnumValue { + value: string; + computed: boolean; +} + +interface TypeDef { + name: string; + short: string; + compact: string; + full: string; + inferredType?: InspectionType; +} + +function createTypeDef({ + name, + short, + compact, + full, + inferredType, +}: { + name: string; + short: string; + compact: string; + full?: string; + inferredType?: InspectionType; +}): TypeDef { + return { + name, + short, + compact, + full: full != null ? full : short, + inferredType, + }; +} + +function cleanPropTypes(value: string): string { + return value.replace(/PropTypes./g, '').replace(/.isRequired/g, ''); +} + +function splitIntoLines(value: string): string[] { + return value.split(/\r?\n/); +} + +function prettyObject(ast: any, compact = false): string { + return cleanPropTypes(generateObjectCode(ast, compact)); +} + +function prettyArray(ast: any, compact = false): string { + return cleanPropTypes(generateCode(ast, compact)); +} + +function getCaptionForInspectionType(type: InspectionType): string { + switch (type) { + case InspectionType.OBJECT: + return OBJECT_CAPTION; + case InspectionType.ARRAY: + return ARRAY_CAPTION; + case InspectionType.CLASS: + return CLASS_CAPTION; + case InspectionType.FUNCTION: + return FUNCTION_CAPTION; + case InspectionType.ELEMENT: + return ELEMENT_CAPTION; + default: + return CUSTOM_CAPTION; + } +} + +function generateTypeFromString(value: string, originalTypeName: string): TypeDef { + const { inferredType, ast } = inspectValue(value); + const { type } = inferredType; + + let short; + let compact; + let full; + + switch (type) { + case InspectionType.IDENTIFIER: + case InspectionType.LITERAL: + short = value; + compact = value; + break; + case InspectionType.OBJECT: { + const { depth } = inferredType as InspectionObject; + + short = OBJECT_CAPTION; + compact = depth === 1 ? prettyObject(ast, true) : null; + full = prettyObject(ast); + break; + } + case InspectionType.ELEMENT: { + const { identifier } = inferredType as InspectionElement; + + short = identifier != null && !isHtmlTag(identifier) ? identifier : ELEMENT_CAPTION; + compact = splitIntoLines(value).length === 1 ? value : null; + full = value; + break; + } + case InspectionType.ARRAY: { + const { depth } = inferredType as InspectionArray; + + short = ARRAY_CAPTION; + compact = depth <= 2 ? prettyArray(ast, true) : null; + full = prettyArray(ast); + break; + } + default: + short = getCaptionForInspectionType(type); + compact = splitIntoLines(value).length === 1 ? value : null; + full = value; + break; + } + + return createTypeDef({ + name: originalTypeName, + short, + compact, + full, + inferredType: type, + }); +} + +function generateCustom({ raw }: DocgenPropType): TypeDef { + if (raw != null) { + return generateTypeFromString(raw, PropTypesType.CUSTOM); + } + + return createTypeDef({ + name: PropTypesType.CUSTOM, + short: CUSTOM_CAPTION, + compact: CUSTOM_CAPTION, + }); +} + +function generateFunc(extractedProp: ExtractedProp): TypeDef { + const { jsDocTags } = extractedProp; + + if (jsDocTags != null) { + if (jsDocTags.params != null || jsDocTags.returns != null) { + return createTypeDef({ + name: PropTypesType.FUNC, + short: generateShortFuncSignature(jsDocTags.params, jsDocTags.returns), + compact: null, + full: generateFuncSignature(jsDocTags.params, jsDocTags.returns), + }); + } + } + + return createTypeDef({ + name: PropTypesType.FUNC, + short: FUNCTION_CAPTION, + compact: FUNCTION_CAPTION, + }); +} + +function generateShape(type: DocgenPropType, extractedProp: ExtractedProp): TypeDef { + const fields = Object.keys(type.value) + .map((key: string) => `${key}: ${generateType(type.value[key], extractedProp).full}`) + .join(', '); + + const { inferredType, ast } = inspectValue(`{ ${fields} }`); + const { depth } = inferredType as InspectionObject; + + return createTypeDef({ + name: PropTypesType.SHAPE, + short: OBJECT_CAPTION, + compact: depth === 1 && ast ? prettyObject(ast, true) : null, + full: ast ? prettyObject(ast) : null, + }); +} + +function objectOf(of: string): string { + return `objectOf(${of})`; +} + +function generateObjectOf(type: DocgenPropType, extractedProp: ExtractedProp): TypeDef { + const { short, compact, full } = generateType(type.value, extractedProp); + + return createTypeDef({ + name: PropTypesType.OBJECTOF, + short: objectOf(short), + compact: compact != null ? objectOf(compact) : null, + full: objectOf(full), + }); +} + +function generateUnion(type: DocgenPropType, extractedProp: ExtractedProp): TypeDef { + if (Array.isArray(type.value)) { + const values = type.value.reduce( + (acc: any, v: any) => { + const { short, compact, full } = generateType(v, extractedProp); + + acc.short.push(short); + acc.compact.push(compact); + acc.full.push(full); + + return acc; + }, + { short: [], compact: [], full: [] } + ); + + return createTypeDef({ + name: PropTypesType.UNION, + short: values.short.join(' | '), + compact: values.compact.every((x: string) => x != null) ? values.compact.join(' | ') : null, + full: values.full.join(' | '), + }); + } + + return createTypeDef({ name: PropTypesType.UNION, short: type.value, compact: null }); +} + +function generateEnumValue({ value, computed }: EnumValue): TypeDef { + return computed + ? generateTypeFromString(value, 'enumvalue') + : createTypeDef({ name: 'enumvalue', short: value, compact: value }); +} + +function generateEnum(type: DocgenPropType): TypeDef { + if (Array.isArray(type.value)) { + const values = type.value.reduce( + (acc: any, v: EnumValue) => { + const { short, compact, full } = generateEnumValue(v); + + acc.short.push(short); + acc.compact.push(compact); + acc.full.push(full); + + return acc; + }, + { short: [], compact: [], full: [] } + ); + + return createTypeDef({ + name: PropTypesType.ENUM, + short: values.short.join(' | '), + compact: values.compact.every((x: string) => x != null) ? values.compact.join(' | ') : null, + full: values.full.join(' | '), + }); + } + + return createTypeDef({ name: PropTypesType.ENUM, short: type.value, compact: type.value }); +} + +function braceAfter(of: string): string { + return `${of}[]`; +} + +function braceAround(of: string): string { + return `[${of}]`; +} + +function createArrayOfObjectTypeDef(short: string, compact: string, full: string): TypeDef { + return createTypeDef({ + name: PropTypesType.ARRAYOF, + short: braceAfter(short), + compact: compact != null ? braceAround(compact) : null, + full: braceAround(full), + }); +} + +function generateArray(type: DocgenPropType, extractedProp: ExtractedProp): TypeDef { + const { name, short, compact, full, inferredType } = generateType(type.value, extractedProp); + + if (name === PropTypesType.CUSTOM) { + if (inferredType === InspectionType.OBJECT) { + return createArrayOfObjectTypeDef(short, compact, full); + } + } else if (name === PropTypesType.SHAPE) { + return createArrayOfObjectTypeDef(short, compact, full); + } + + return createTypeDef({ + name: PropTypesType.ARRAYOF, + short: braceAfter(short), + compact: braceAfter(short), + }); +} + +function generateType(type: DocgenPropType, extractedProp: ExtractedProp): TypeDef { + try { + switch (type.name) { + case PropTypesType.CUSTOM: + return generateCustom(type); + case PropTypesType.FUNC: + return generateFunc(extractedProp); + case PropTypesType.SHAPE: + return generateShape(type, extractedProp); + case PropTypesType.INSTANCEOF: + return createTypeDef({ + name: PropTypesType.INSTANCEOF, + short: type.value, + compact: type.value, + }); + case PropTypesType.OBJECTOF: + return generateObjectOf(type, extractedProp); + case PropTypesType.UNION: + return generateUnion(type, extractedProp); + case PropTypesType.ENUM: + return generateEnum(type); + case PropTypesType.ARRAYOF: + return generateArray(type, extractedProp); + default: + return createTypeDef({ name: type.name, short: type.name, compact: type.name }); + } + } catch (e) { + // eslint-disable-next-line no-console + console.error(e); + } + + return createTypeDef({ name: 'unknown', short: 'unknown', compact: 'unknown' }); +} + +export function createType(extractedProp: ExtractedProp): PropType { + const { type } = extractedProp.docgenInfo; + + // A type could be null if a defaultProp has been provided without a type definition. + if (type == null) { + return null; + } + + try { + switch (type.name) { + case PropTypesType.CUSTOM: + case PropTypesType.SHAPE: + case PropTypesType.INSTANCEOF: + case PropTypesType.OBJECTOF: + case PropTypesType.UNION: + case PropTypesType.ENUM: + case PropTypesType.ARRAYOF: { + const { short, compact, full } = generateType(type, extractedProp); + + if (compact != null) { + if (!isTooLongForTypeSummary(compact)) { + return createSummaryValue(compact); + } + } + + return createSummaryValue(short, full); + } + case PropTypesType.FUNC: { + const { short, full } = generateType(type, extractedProp); + + let summary = short; + let detail; + + if (full.length < MAX_FUNC_LENGTH) { + summary = full; + } else { + detail = toMultilineSignature(full); + } + + return createSummaryValue(summary, detail); + } + default: + return null; + } + } catch (e) { + // eslint-disable-next-line no-console + console.error(e); + } + + return null; +} diff --git a/addons/docs/src/frameworks/react/propTypes/generateFuncSignature.test.ts b/app/react/src/client/docs/propTypes/generateFuncSignature.test.ts similarity index 99% rename from addons/docs/src/frameworks/react/propTypes/generateFuncSignature.test.ts rename to app/react/src/client/docs/propTypes/generateFuncSignature.test.ts index 92f6575c9374..c62464b01e1b 100644 --- a/addons/docs/src/frameworks/react/propTypes/generateFuncSignature.test.ts +++ b/app/react/src/client/docs/propTypes/generateFuncSignature.test.ts @@ -1,5 +1,5 @@ +import { parseJsDoc } from '@storybook/docs-tools'; import { generateFuncSignature, generateShortFuncSignature } from './generateFuncSignature'; -import { parseJsDoc } from '../../../lib/jsdocParser'; describe('generateFuncSignature', () => { it('should return an empty string when there is no @params and @returns tags', () => { diff --git a/addons/docs/src/frameworks/react/propTypes/generateFuncSignature.ts b/app/react/src/client/docs/propTypes/generateFuncSignature.ts similarity index 93% rename from addons/docs/src/frameworks/react/propTypes/generateFuncSignature.ts rename to app/react/src/client/docs/propTypes/generateFuncSignature.ts index 0d6b6c251d86..2e1b500a9e5f 100644 --- a/addons/docs/src/frameworks/react/propTypes/generateFuncSignature.ts +++ b/app/react/src/client/docs/propTypes/generateFuncSignature.ts @@ -1,4 +1,4 @@ -import { ExtractedJsDocParam, ExtractedJsDocReturns } from '../../../lib/jsdocParser'; +import { ExtractedJsDocParam, ExtractedJsDocReturns } from '@storybook/docs-tools'; export function generateFuncSignature( params: ExtractedJsDocParam[], diff --git a/app/react/src/client/docs/propTypes/handleProp.test.tsx b/app/react/src/client/docs/propTypes/handleProp.test.tsx new file mode 100644 index 000000000000..84dfecd350e0 --- /dev/null +++ b/app/react/src/client/docs/propTypes/handleProp.test.tsx @@ -0,0 +1,1474 @@ +/* eslint-disable no-underscore-dangle */ + +import PropTypes from 'prop-types'; +import React from 'react'; +import { + PropDef, + extractComponentProps, + DocgenInfo, + DocgenPropDefaultValue, +} from '@storybook/docs-tools'; +import { enhancePropTypesProp, enhancePropTypesProps } from './handleProp'; + +type Component = any; +const DOCGEN_SECTION = 'props'; + +function ReactComponent() { + return
React Component!
; +} + +function createDocgenSection(docgenInfo: DocgenInfo): Record { + return { + [DOCGEN_SECTION]: { + ...docgenInfo, + }, + }; +} + +function createDocgenProp({ + name, + type, + ...others +}: Partial & { name: string }): Record { + return { + [name]: { + type, + required: false, + ...others, + }, + }; +} + +// eslint-disable-next-line react/forbid-foreign-prop-types +function createComponent({ propTypes = {}, defaultProps = {}, docgenInfo = {} }): Component { + const component = () => { + return
Hey!
; + }; + component.propTypes = propTypes; + component.defaultProps = defaultProps; + + // @ts-ignore + component.__docgenInfo = createDocgenSection(docgenInfo); + + return component; +} + +function createDefaultValue(defaultValue: string): DocgenPropDefaultValue { + return { value: defaultValue }; +} + +function extractPropDef(component: Component, rawDefaultProp?: any): PropDef { + return enhancePropTypesProp(extractComponentProps(component, DOCGEN_SECTION)[0], rawDefaultProp); +} + +describe('enhancePropTypesProp', () => { + describe('type', () => { + function createTestComponent(docgenInfo: Partial): Component { + return createComponent({ + docgenInfo: { + ...createDocgenProp({ name: 'prop', ...docgenInfo }), + }, + }); + } + + describe('custom', () => { + describe('when raw value is available', () => { + it('should support literal', () => { + const component = createTestComponent({ + type: { + name: 'custom', + raw: 'MY_LITERAL', + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('MY_LITERAL'); + expect(type.detail).toBeUndefined(); + }); + + it('should support short object', () => { + const component = createTestComponent({ + type: { + name: 'custom', + raw: '{\n text: PropTypes.string.isRequired,\n}', + }, + }); + + const { type } = extractPropDef(component); + + const expectedSummary = '{ text: string }'; + + expect(type.summary.replace(/\s/g, '')).toBe(expectedSummary.replace(/\s/g, '')); + expect(type.detail).toBeUndefined(); + }); + + it('should support long object', () => { + const component = createTestComponent({ + type: { + name: 'custom', + raw: '{\n text: PropTypes.string.isRequired,\n value1: PropTypes.string.isRequired,\n value2: PropTypes.string.isRequired,\n value3: PropTypes.string.isRequired,\n value4: PropTypes.string.isRequired,\n}', + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('object'); + + const expectedDetail = `{ + text: string, + value1: string, + value2: string, + value3: string, + value4: string + }`; + + expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should not have a deep object as summary', () => { + const component = createTestComponent({ + type: { + name: 'custom', + raw: '{\n foo: { bar: PropTypes.string.isRequired,\n }}', + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('object'); + }); + + it('should use identifier of a React element when available', () => { + const component = createTestComponent({ + type: { + name: 'custom', + raw: 'function InlinedFunctionalComponent() {\n return
Inlined FunctionalComponent!
;\n}', + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('InlinedFunctionalComponent'); + + const expectedDetail = `function InlinedFunctionalComponent() { + return
Inlined FunctionalComponent!
; + }`; + + expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should not use identifier of a HTML element', () => { + const component = createTestComponent({ + type: { + name: 'custom', + raw: '
Hello world from Montreal, Quebec, Canada!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
', + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('element'); + + const expectedDetail = + '
Hello world from Montreal, Quebec, Canada!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
'; + + expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should support element without identifier', () => { + const component = createTestComponent({ + type: { + name: 'custom', + raw: '() => {\n return
Inlined FunctionalComponent!
;\n}', + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('element'); + + const expectedDetail = `() => { + return
Inlined FunctionalComponent!
; + }`; + + expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + describe('when it is not a known type', () => { + it('should return "custom" when its a long type', () => { + const component = createTestComponent({ + type: { + name: 'custom', + raw: 'Symbol("A very very very very very very lonnnngggggggggggggggggggggggggggggggggggg symbol")', + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('custom'); + expect(type.detail).toBe( + 'Symbol("A very very very very very very lonnnngggggggggggggggggggggggggggggggggggg symbol")' + ); + }); + + it('should return "custom" when its a short type', () => { + const component = createTestComponent({ + type: { + name: 'custom', + raw: 'Symbol("Hey!")', + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('Symbol("Hey!")'); + expect(type.detail).toBeUndefined(); + }); + }); + }); + + it("should return 'custom' when there is no raw value", () => { + const component = createTestComponent({ + type: { + name: 'custom', + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('custom'); + }); + }); + + [ + 'any', + 'bool', + 'string', + 'number', + 'symbol', + 'object', + 'element', + 'elementType', + 'node', + ].forEach((x) => { + it(`should return '${x}' when type is ${x}`, () => { + const component = createTestComponent({ + type: { + name: x, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe(x); + }); + }); + + it('should support short shape', () => { + const component = createTestComponent({ + type: { + name: 'shape', + value: { + foo: { + name: 'string', + required: false, + }, + }, + }, + }); + + const { type } = extractPropDef(component); + + const expectedSummary = '{ foo: string }'; + + expect(type.summary.replace(/\s/g, '')).toBe(expectedSummary.replace(/\s/g, '')); + expect(type.detail).toBeUndefined(); + }); + + it('should support long shape', () => { + const component = createTestComponent({ + type: { + name: 'shape', + value: { + foo: { + name: 'string', + required: false, + }, + bar: { + name: 'string', + required: false, + }, + another: { + name: 'string', + required: false, + }, + another2: { + name: 'string', + required: false, + }, + another3: { + name: 'string', + required: false, + }, + another4: { + name: 'string', + required: false, + }, + }, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('object'); + + const expectedDetail = `{ + foo: string, + bar: string, + another: string, + another2: string, + another3: string, + another4: string + }`; + + expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should not have a deep shape as summary', () => { + const component = createTestComponent({ + type: { + name: 'shape', + value: { + bar: { + name: 'shape', + value: { + hey: { + name: 'string', + required: false, + }, + }, + required: false, + }, + }, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('object'); + }); + + it('should support enum of string', () => { + const component = createTestComponent({ + type: { + name: 'enum', + value: [ + { + value: "'News'", + computed: false, + }, + { + value: "'Photos'", + computed: false, + }, + ], + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe("'News' | 'Photos'"); + }); + + it('should support enum of object', () => { + const component = createTestComponent({ + type: { + name: 'enum', + value: [ + { + value: + '{\n text: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n}', + computed: true, + }, + { + value: + '{\n foo: PropTypes.string,\n bar: PropTypes.string,\n hey: PropTypes.string,\n ho: PropTypes.string,\n}', + computed: true, + }, + ], + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('object | object'); + + const expectedDetail = `{ + text: string, + value: string + } | { + foo: string, + bar: string, + hey: string, + ho: string + }`; + + expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should support short object in enum summary', () => { + const component = createTestComponent({ + type: { + name: 'enum', + value: [ + { + value: '{\n text: PropTypes.string.isRequired,\n}', + computed: true, + }, + { + value: '{\n foo: PropTypes.string,\n}', + computed: true, + }, + ], + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('{ text: string } | { foo: string }'); + }); + + it('should not have a deep object in an enum summary', () => { + const component = createTestComponent({ + type: { + name: 'enum', + value: [ + { + value: '{\n text: { foo: PropTypes.string.isRequired,\n }\n}', + computed: true, + }, + { + value: '{\n foo: PropTypes.string,\n}', + computed: true, + }, + ], + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('object | object'); + }); + + it('should support enum of element', () => { + const component = createTestComponent({ + type: { + name: 'enum', + value: [ + { + value: '() => {\n return
FunctionalComponent!
;\n}', + computed: true, + }, + { + value: + 'class ClassComponent extends React.PureComponent {\n render() {\n return
ClassComponent!
;\n }\n}', + computed: true, + }, + ], + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('element | ClassComponent'); + + const expectedDetail = `() => { + return
FunctionalComponent!
; + } | class ClassComponent extends React.PureComponent { + render() { + return
ClassComponent!
; + } + }`; + + expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + describe('func', () => { + it('should return "func" when the prop dont have a description', () => { + const component = createTestComponent({ + type: { + name: 'func', + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('func'); + }); + + it('should return "func" when the prop have a description without JSDoc tags', () => { + const component = createTestComponent({ + type: { + name: 'func', + }, + description: 'Hey! Hey!', + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('func'); + }); + + it('should return a func signature when there is JSDoc tags.', () => { + const component = createTestComponent({ + type: { + name: 'func', + }, + description: '@param event\n@param data\n@returns {string}', + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('(event, data) => string'); + }); + }); + + it('should return the instance type when type is instanceOf', () => { + const component = createTestComponent({ + type: { + name: 'instanceOf', + value: 'Set', + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('Set'); + }); + + describe('objectOf', () => { + it('should support objectOf primitive', () => { + const component = createTestComponent({ + type: { + name: 'objectOf', + value: { + name: 'number', + }, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('objectOf(number)'); + expect(type.detail).toBeUndefined(); + }); + + it('should support objectOf of identifier', () => { + const component = createTestComponent({ + type: { + name: 'objectOf', + value: { + name: 'custom', + raw: 'NAMED_OBJECT', + }, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('objectOf(NAMED_OBJECT)'); + expect(type.detail).toBeUndefined(); + }); + + it('should support objectOf short object', () => { + const component = createTestComponent({ + type: { + name: 'objectOf', + value: { + name: 'custom', + raw: '{\n foo: PropTypes.string,\n}', + }, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('objectOf({ foo: string })'); + expect(type.detail).toBeUndefined(); + }); + + it('should support objectOf long object', () => { + const component = createTestComponent({ + type: { + name: 'objectOf', + value: { + name: 'custom', + raw: '{\n foo: PropTypes.string,\n bar: PropTypes.string,\n another: PropTypes.string,\n anotherAnother: PropTypes.string,\n}', + }, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('objectOf(object)'); + + const expectedDetail = `objectOf({ + foo: string, + bar: string, + another: string, + anotherAnother: string + })`; + + expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should not have deep object in summary', () => { + const component = createTestComponent({ + type: { + name: 'objectOf', + value: { + name: 'custom', + raw: '{\n foo: { bar: PropTypes.string,\n }\n}', + }, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('objectOf(object)'); + }); + + it('should support objectOf short shape', () => { + const component = createTestComponent({ + type: { + name: 'objectOf', + value: { + name: 'shape', + value: { + foo: { + name: 'string', + required: false, + }, + }, + }, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('objectOf({ foo: string })'); + expect(type.detail).toBeUndefined(); + }); + + it('should support objectOf long shape', () => { + const component = createTestComponent({ + type: { + name: 'objectOf', + value: { + name: 'shape', + value: { + foo: { + name: 'string', + required: false, + }, + bar: { + name: 'string', + required: false, + }, + another: { + name: 'string', + required: false, + }, + anotherAnother: { + name: 'string', + required: false, + }, + }, + }, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('objectOf(object)'); + + const expectedDetail = `objectOf({ + foo: string, + bar: string, + another: string, + anotherAnother: string + })`; + + expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should not have a deep shape in summary', () => { + const component = createTestComponent({ + type: { + name: 'objectOf', + value: { + name: 'shape', + value: { + bar: { + name: 'shape', + value: { + hey: { + name: 'string', + required: false, + }, + }, + required: false, + }, + }, + }, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('objectOf(object)'); + }); + }); + + it('should support union', () => { + const component = createTestComponent({ + type: { + name: 'union', + value: [ + { + name: 'string', + }, + { + name: 'instanceOf', + value: 'Set', + }, + ], + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('string | Set'); + expect(type.detail).toBeUndefined(); + }); + + describe('array', () => { + it('should support array of primitive', () => { + const component = createTestComponent({ + type: { + name: 'arrayOf', + value: { + name: 'number', + }, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('number[]'); + expect(type.detail).toBeUndefined(); + }); + + it('should support array of identifier', () => { + const component = createTestComponent({ + type: { + name: 'arrayOf', + value: { + name: 'custom', + raw: 'NAMED_OBJECT', + }, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('NAMED_OBJECT[]'); + expect(type.detail).toBeUndefined(); + }); + + it('should support array of short object', () => { + const component = createTestComponent({ + type: { + name: 'arrayOf', + value: { + name: 'custom', + raw: '{\n foo: PropTypes.string,\n}', + }, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('[{ foo: string }]'); + expect(type.detail).toBeUndefined(); + }); + + it('should support array of long object', () => { + const component = createTestComponent({ + type: { + name: 'arrayOf', + value: { + name: 'custom', + raw: '{\n text: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n another: PropTypes.string.isRequired,\n another2: PropTypes.string.isRequired,\n another3: PropTypes.string.isRequired,\n another4: PropTypes.string.isRequired,\n}', + }, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('object[]'); + + const expectedDetail = `[{ + text: string, + value: string, + another: string, + another2: string, + another3: string, + another4: string + }]`; + + expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should not have deep object in summary', () => { + const component = createTestComponent({ + type: { + name: 'arrayOf', + value: { + name: 'custom', + raw: '{\n foo: { bar: PropTypes.string, }\n}', + }, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('object[]'); + }); + + it('should support array of short shape', () => { + const component = createTestComponent({ + type: { + name: 'arrayOf', + value: { + name: 'shape', + value: { + foo: { + name: 'string', + required: false, + }, + }, + }, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('[{ foo: string }]'); + expect(type.detail).toBeUndefined(); + }); + + it('should support array of long shape', () => { + const component = createTestComponent({ + type: { + name: 'arrayOf', + value: { + name: 'shape', + value: { + foo: { + name: 'string', + required: false, + }, + bar: { + name: 'string', + required: false, + }, + another: { + name: 'string', + required: false, + }, + another2: { + name: 'string', + required: false, + }, + another3: { + name: 'string', + required: false, + }, + another4: { + name: 'string', + required: false, + }, + }, + }, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('object[]'); + + const expectedDetail = `[{ + foo: string, + bar: string, + another: string, + another2: string, + another3: string, + another4: string + }]`; + + expect(type.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should not have deep shape in summary', () => { + const component = createTestComponent({ + type: { + name: 'arrayOf', + value: { + name: 'shape', + value: { + bar: { + name: 'shape', + value: { + hey: { + name: 'string', + required: false, + }, + }, + required: false, + }, + }, + }, + }, + }); + + const { type } = extractPropDef(component); + + expect(type.summary).toBe('object[]'); + }); + }); + }); + + describe('defaultValue', () => { + function createTestComponent( + defaultValue: DocgenPropDefaultValue, + typeName = 'anything-is-fine' + ): Component { + return createComponent({ + docgenInfo: { + ...createDocgenProp({ + name: 'prop', + type: { name: typeName }, + defaultValue, + }), + }, + }); + } + + it('should support short object', () => { + const component = createTestComponent(createDefaultValue("{ foo: 'foo', bar: 'bar' }")); + + const { defaultValue } = extractPropDef(component); + + const expectedSummary = "{ foo: 'foo', bar: 'bar' }"; + + expect(defaultValue.summary.replace(/\s/g, '')).toBe(expectedSummary.replace(/\s/g, '')); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support long object', () => { + const component = createTestComponent( + createDefaultValue("{ foo: 'foo', bar: 'bar', another: 'another' }") + ); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('object'); + + const expectedDetail = `{ + foo: 'foo', + bar: 'bar', + another: 'another' + }`; + + expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should not have deep object in summary', () => { + const component = createTestComponent( + createDefaultValue("{ foo: 'foo', bar: { hey: 'ho' } }") + ); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('object'); + }); + + it('should support short function', () => { + const component = createTestComponent(createDefaultValue('() => {}')); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('() => {}'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support long function', () => { + const component = createTestComponent( + createDefaultValue( + '(foo, bar) => {\n const concat = foo + bar;\n const append = concat + " hey!";\n \n return append;\n}' + ) + ); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('func'); + + const expectedDetail = `(foo, bar) => { + const concat = foo + bar; + const append = concat + ' hey!'; + return append + }`; + + expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should use the name of function when available and indicate that args are present', () => { + const component = createTestComponent( + createDefaultValue('function concat(a, b) {\n return a + b;\n}') + ); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('concat( ... )'); + + const expectedDetail = `function concat(a, b) { + return a + b + }`; + + expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should use the name of function when available', () => { + const component = createTestComponent( + createDefaultValue('function hello() {\n return "hello";\n}') + ); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('hello()'); + + const expectedDetail = `function hello() { + return 'hello' + }`; + + expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should support short element', () => { + const component = createTestComponent(createDefaultValue('
Hey!
')); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('
Hey!
'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support long element', () => { + const component = createTestComponent( + createDefaultValue( + '
Hey! Hey! Hey!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
' + ) + ); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('element'); + expect(defaultValue.detail).toBe( + '
Hey! Hey! Hey!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
' + ); + }); + + it('should support element with props', () => { + const component = createTestComponent(createDefaultValue('')); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe(''); + expect(defaultValue.detail).toBe(''); + }); + + it("should use the name of the React component when it's available", () => { + const component = createTestComponent( + createDefaultValue( + 'function InlinedFunctionalComponent() {\n return
Inlined FunctionalComponent!
;\n}' + ) + ); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe(''); + + const expectedDetail = `function InlinedFunctionalComponent() { + return
Inlined FunctionalComponent!
; + }`; + + expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should not use the name of an HTML element', () => { + const component = createTestComponent(createDefaultValue('
Hey!
')); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).not.toBe('
'); + }); + + it('should support short array', () => { + const component = createTestComponent(createDefaultValue('[1]')); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('[1]'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support long array', () => { + const component = createTestComponent( + createDefaultValue( + '[\n {\n thing: {\n id: 2,\n func: () => {},\n arr: [],\n },\n },\n]' + ) + ); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('array'); + + const expectedDetail = `[{ + thing: { + id: 2, + func: () => { + }, + arr: [] + } + }]`; + + expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should not have deep array in summary', () => { + const component = createTestComponent(createDefaultValue('[[[1]]]')); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('array'); + }); + + describe('fromRawDefaultProp', () => { + [ + { type: 'number', defaultProp: 1 }, + { type: 'boolean', defaultProp: true }, + { type: 'symbol', defaultProp: Symbol('hey!') }, + ].forEach((x) => { + it(`should support ${x.type}`, () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, x.defaultProp); + + expect(defaultValue.summary).toBe(x.defaultProp.toString()); + expect(defaultValue.detail).toBeUndefined(); + }); + }); + + it('should support strings', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, 'foo'); + + expect(defaultValue.summary).toBe('"foo"'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support array of primitives', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, [1, 2, 3]); + + expect(defaultValue.summary).toBe('[1, 2, 3]'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support array of short object', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, [{ foo: 'bar' }]); + + expect(defaultValue.summary).toBe("[{ 'foo': 'bar' }]"); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support array of long object', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, [{ foo: 'bar', bar: 'foo', hey: 'ho' }]); + + expect(defaultValue.summary).toBe('array'); + + const expectedDetail = `[{ + 'foo': 'bar', + 'bar': 'foo', + 'hey': 'ho' + }]`; + + expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should support short object', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, { foo: 'bar' }); + + expect(defaultValue.summary).toBe("{ 'foo': 'bar' }"); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support long object', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, { foo: 'bar', bar: 'foo', hey: 'ho' }); + + expect(defaultValue.summary).toBe('object'); + + const expectedDetail = `{ + 'foo': 'bar', + 'bar': 'foo', + 'hey': 'ho' + }`; + + expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should support anonymous function', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, () => 'hey!'); + + expect(defaultValue.summary).toBe('func'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support named function', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, function hello() { + return 'world!'; + }); + + expect(defaultValue.summary).toBe('hello()'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support named function with params', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, function add(a: number, b: number) { + return a + b; + }); + + expect(defaultValue.summary).toBe('add( ... )'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support React element', () => { + const component = createTestComponent(null); + + const defaultProp = ; + // Simulate babel-plugin-add-react-displayname. + defaultProp.type.displayName = 'ReactComponent'; + + const { defaultValue } = extractPropDef(component, defaultProp); + + expect(defaultValue.summary).toBe(''); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support React element with props', () => { + const component = createTestComponent(null); + + // @ts-ignore + const defaultProp = ; + // Simulate babel-plugin-add-react-displayname. + defaultProp.type.displayName = 'ReactComponent'; + + const { defaultValue } = extractPropDef(component, defaultProp); + + expect(defaultValue.summary).toBe(''); + expect(defaultValue.detail).toBe(''); + }); + + it('should support short HTML element', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component,
HTML element
); + + expect(defaultValue.summary).toBe('
HTML element
'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support long HTML element', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef( + component, +
HTML element!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ ); + + expect(defaultValue.summary).toBe('element'); + + const expectedDetail = `
+ HTML element!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +
`; + + expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + ['element', 'elementType'].forEach((x) => { + it(`should support inlined React class component for ${x}`, () => { + const component = createTestComponent(null, x); + + const { defaultValue } = extractPropDef( + component, + class InlinedClassComponent extends React.PureComponent { + render() { + return
Inlined ClassComponent!
; + } + } + ); + + expect(defaultValue.summary).toBe(''); + expect(defaultValue.detail).toBeUndefined(); + }); + + it(`should support inlined anonymous React functional component for ${x}`, () => { + const component = createTestComponent(null, x); + + const { defaultValue } = extractPropDef(component, () => { + return
Inlined FunctionalComponent!
; + }); + + expect(defaultValue.summary).toBe('element'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it(`should support inlined anonymous React functional component with props for ${x}`, () => { + const component = createTestComponent(null, x); + + const { defaultValue } = extractPropDef(component, ({ foo }: { foo: string }) => { + return
{foo}
; + }); + + expect(defaultValue.summary).toBe('element'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it(`should support inlined named React functional component for ${x}`, () => { + const component = createTestComponent(null, x); + + const { defaultValue } = extractPropDef(component, function InlinedFunctionalComponent() { + return
Inlined FunctionalComponent!
; + }); + + expect(defaultValue.summary).toBe(''); + expect(defaultValue.detail).toBeUndefined(); + }); + + it(`should support inlined named React functional component with props for ${x}`, () => { + const component = createTestComponent(null, x); + + const { defaultValue } = extractPropDef( + component, + function InlinedFunctionalComponent({ foo }: { foo: string }) { + return
{foo}
; + } + ); + + expect(defaultValue.summary).toBe(''); + expect(defaultValue.detail).toBeUndefined(); + }); + }); + }); + }); +}); + +describe('enhancePropTypesProps', () => { + it('should keep the original definition order', () => { + const component = createComponent({ + propTypes: { + foo: PropTypes.string, + middleWithDefaultValue: PropTypes.string, + bar: PropTypes.string, + endWithDefaultValue: PropTypes.string, + }, + docgenInfo: { + ...createDocgenProp({ + name: 'middleWithDefaultValue', + type: { name: 'string' }, + defaultValue: { value: 'Middle!' }, + }), + ...createDocgenProp({ + name: 'endWithDefaultValue', + type: { name: 'string' }, + defaultValue: { value: 'End!' }, + }), + ...createDocgenProp({ + name: 'foo', + type: { name: 'string' }, + }), + ...createDocgenProp({ + name: 'bar', + type: { name: 'string' }, + }), + }, + }); + + const props = enhancePropTypesProps( + extractComponentProps(component, DOCGEN_SECTION), + component + ); + + expect(props.length).toBe(4); + expect(props[0].name).toBe('foo'); + expect(props[1].name).toBe('middleWithDefaultValue'); + expect(props[2].name).toBe('bar'); + expect(props[3].name).toBe('endWithDefaultValue'); + }); + + it('should not include @ignore props', () => { + const component = createComponent({ + propTypes: { + foo: PropTypes.string, + bar: PropTypes.string, + }, + docgenInfo: { + ...createDocgenProp({ + name: 'foo', + type: { name: 'string' }, + }), + ...createDocgenProp({ + name: 'bar', + type: { name: 'string' }, + description: '@ignore', + }), + }, + }); + + const props = enhancePropTypesProps( + extractComponentProps(component, DOCGEN_SECTION), + component + ); + + expect(props.length).toBe(1); + expect(props[0].name).toBe('foo'); + }); +}); diff --git a/app/react/src/client/docs/propTypes/handleProp.ts b/app/react/src/client/docs/propTypes/handleProp.ts new file mode 100644 index 000000000000..a59022ffd7e3 --- /dev/null +++ b/app/react/src/client/docs/propTypes/handleProp.ts @@ -0,0 +1,49 @@ +import { PropDef, ExtractedProp } from '@storybook/docs-tools'; +import { createType } from './createType'; +import { createDefaultValue, createDefaultValueFromRawDefaultProp } from '../lib/defaultValues'; +import { keepOriginalDefinitionOrder } from './sortProps'; +import { rawDefaultPropTypeResolvers } from './rawDefaultPropResolvers'; + +type Component = any; + +export function enhancePropTypesProp(extractedProp: ExtractedProp, rawDefaultProp?: any): PropDef { + const { propDef } = extractedProp; + + const newtype = createType(extractedProp); + if (newtype != null) { + propDef.type = newtype; + } + + const { defaultValue } = extractedProp.docgenInfo; + if (defaultValue != null && defaultValue.value != null) { + const newDefaultValue = createDefaultValue(defaultValue.value); + + if (newDefaultValue != null) { + propDef.defaultValue = newDefaultValue; + } + } else if (rawDefaultProp != null) { + const newDefaultValue = createDefaultValueFromRawDefaultProp( + rawDefaultProp, + propDef, + rawDefaultPropTypeResolvers + ); + + if (newDefaultValue != null) { + propDef.defaultValue = newDefaultValue; + } + } + + return propDef; +} + +export function enhancePropTypesProps( + extractedProps: ExtractedProp[], + component: Component +): PropDef[] { + const rawDefaultProps = component.defaultProps != null ? component.defaultProps : {}; + const enhancedProps = extractedProps.map((x) => + enhancePropTypesProp(x, rawDefaultProps[x.propDef.name]) + ); + + return keepOriginalDefinitionOrder(enhancedProps, component); +} diff --git a/addons/docs/src/frameworks/react/propTypes/rawDefaultPropResolvers.ts b/app/react/src/client/docs/propTypes/rawDefaultPropResolvers.ts similarity index 95% rename from addons/docs/src/frameworks/react/propTypes/rawDefaultPropResolvers.ts rename to app/react/src/client/docs/propTypes/rawDefaultPropResolvers.ts index 9433159adde6..692554e7e37b 100644 --- a/addons/docs/src/frameworks/react/propTypes/rawDefaultPropResolvers.ts +++ b/app/react/src/client/docs/propTypes/rawDefaultPropResolvers.ts @@ -1,5 +1,5 @@ +import { createSummaryValue } from '@storybook/docs-tools'; import { TypeResolver, extractFunctionName, createTypeResolvers } from '../lib/defaultValues'; -import { createSummaryValue } from '../../../lib'; import { FUNCTION_CAPTION, ELEMENT_CAPTION } from '../lib'; import { getPrettyElementIdentifier, diff --git a/addons/docs/src/frameworks/react/propTypes/sortProps.ts b/app/react/src/client/docs/propTypes/sortProps.ts similarity index 85% rename from addons/docs/src/frameworks/react/propTypes/sortProps.ts rename to app/react/src/client/docs/propTypes/sortProps.ts index 4cc5720a1345..4d5dbb19e143 100644 --- a/addons/docs/src/frameworks/react/propTypes/sortProps.ts +++ b/app/react/src/client/docs/propTypes/sortProps.ts @@ -1,5 +1,6 @@ -import { PropDef } from '../../../lib/docgen'; -import { Component } from '../../../blocks/types'; +import { PropDef } from '@storybook/docs-tools'; + +type Component = any; // react-docgen doesn't returned the props in the order they were defined in the "propTypes" object of the component. // This function re-order them by their original definition order. diff --git a/app/react/src/client/docs/react-argtypes.stories.tsx b/app/react/src/client/docs/react-argtypes.stories.tsx new file mode 100644 index 000000000000..9a14a0c39f64 --- /dev/null +++ b/app/react/src/client/docs/react-argtypes.stories.tsx @@ -0,0 +1,96 @@ +import React, { useState } from 'react'; +import mapValues from 'lodash/mapValues'; +import { ArgsTable } from '@storybook/components'; +import { Args } from '@storybook/api'; +import { inferControls } from '@storybook/store'; + +import { storiesOf, StoryContext } from '..'; +import { extractArgTypes } from './extractArgTypes'; + +// FIXME +type Component = any; + +const argsTableProps = (component: Component) => { + const argTypes = extractArgTypes(component); + const parameters = { __isArgsStory: true }; + const rows = inferControls({ argTypes, parameters } as unknown as StoryContext); + return { rows }; +}; + +const ArgsStory = ({ component }: any) => { + const { rows } = argsTableProps(component); + const initialArgs = mapValues(rows, (argType) => argType.defaultValue) as Args; + + const [args, setArgs] = useState(initialArgs); + return ( + <> +

+ NOTE: these stories are to help visualise the snapshot tests in{' '} + ./react-properties.test.js. +

+ setArgs({ ...args, ...val })} /> + + + + + + + + + {Object.entries(args).map(([key, val]) => ( + + + + + ))} + +
arg nameargType
+ {key} + +
{JSON.stringify(rows[key])}
+
+ + ); +}; + +const issuesFixtures = [ + 'js-class-component', + 'js-function-component', + 'js-function-component-inline-defaults', + 'js-function-component-inline-defaults-no-propTypes', + 'ts-function-component', + 'ts-function-component-inline-defaults', + '9399-js-proptypes-shape', + '8663-js-styled-components', + '9626-js-default-values', + '9668-js-proptypes-no-jsdoc', + '8143-ts-react-fc-generics', + '8143-ts-imported-types', + '8279-js-styled-docgen', + '8140-js-prop-types-oneof', + '9023-js-hoc', + '8740-ts-multi-props', + '9556-ts-react-default-exports', + '9592-ts-styled-props', + '9591-ts-import-types', + '9721-ts-deprecated-jsdoc', + '9827-ts-default-values', + '9586-js-react-memo', + '9575-ts-camel-case', + '9493-ts-display-name', + '8894-9511-ts-forward-ref', + '9465-ts-type-props', + '8428-js-static-prop-types', + '9764-ts-extend-props', + '9922-ts-component-props', +]; + +const issuesStories = storiesOf('ArgTypes/Issues', module); +issuesFixtures.forEach((fixture) => { + // eslint-disable-next-line import/no-dynamic-require, global-require + const { component } = require(`./__testfixtures__/${fixture}/input`); + + issuesStories.add(fixture, () => , { + chromatic: { disable: true }, + }); +}); diff --git a/addons/docs/src/frameworks/react/react-properties.test.ts b/app/react/src/client/docs/react-properties.test.ts similarity index 90% rename from addons/docs/src/frameworks/react/react-properties.test.ts rename to app/react/src/client/docs/react-properties.test.ts index 30bdc5aa69c1..d2cc707ddeda 100644 --- a/addons/docs/src/frameworks/react/react-properties.test.ts +++ b/app/react/src/client/docs/react-properties.test.ts @@ -1,16 +1,16 @@ import 'jest-specific-snapshot'; import path from 'path'; import fs from 'fs'; - +import requireFromString from 'require-from-string'; import { transformFileSync, transformSync } from '@babel/core'; + import { inferControls } from '@storybook/store'; -import { StoryContext } from '@storybook/react'; -import { AnyFramework } from '@storybook/csf'; -import requireFromString from 'require-from-string'; +import type { AnyFramework } from '@storybook/csf'; +import { normalizeNewlines } from '@storybook/docs-tools'; +import type { StoryContext } from '..'; import { extractProps } from './extractProps'; import { extractArgTypes } from './extractArgTypes'; -import { normalizeNewlines } from '../../lib/utils'; // jest.mock('../imported', () => () => ({ imported: 'imported-value' }), { virtual: true }); @@ -52,7 +52,6 @@ describe('react component properties', () => { const testDir = path.join(fixturesDir, testEntry.name); const testFile = fs.readdirSync(testDir).find((fileName) => inputRegExp.test(fileName)); if (testFile) { - // eslint-disable-next-line jest/valid-title it(testEntry.name, () => { const inputPath = path.join(testDir, testFile); @@ -71,10 +70,10 @@ describe('react component properties', () => { // snapshot the output of `extractArgTypes` const argTypes = extractArgTypes(component); const parameters = { __isArgsStory: true }; - const rows = inferControls(({ + const rows = inferControls({ argTypes, parameters, - } as unknown) as StoryContext); + } as unknown as StoryContext); expect(rows).toMatchSpecificSnapshot(path.join(testDir, 'argTypes.snapshot')); }); } diff --git a/app/react/src/client/docs/typeScript/handleProp.test.tsx b/app/react/src/client/docs/typeScript/handleProp.test.tsx new file mode 100644 index 000000000000..e00a21df83d8 --- /dev/null +++ b/app/react/src/client/docs/typeScript/handleProp.test.tsx @@ -0,0 +1,514 @@ +/* eslint-disable no-underscore-dangle */ + +import React from 'react'; +import { + PropDef, + extractComponentProps, + DocgenInfo, + DocgenPropDefaultValue, +} from '@storybook/docs-tools'; +import { enhanceTypeScriptProp } from './handleProp'; + +type Component = any; + +const DOCGEN_SECTION = 'props'; + +function ReactComponent() { + return
React Component!
; +} + +function createDocgenSection(docgenInfo: DocgenInfo): Record { + return { + [DOCGEN_SECTION]: { + ...docgenInfo, + }, + }; +} + +function createDocgenProp({ + name, + tsType, + ...others +}: Partial & { name: string }): Record { + return { + [name]: { + tsType, + required: false, + ...others, + }, + }; +} + +// eslint-disable-next-line react/forbid-foreign-prop-types +function createComponent({ propTypes = {}, defaultProps = {}, docgenInfo = {} }): Component { + const component = () => { + return
Hey!
; + }; + component.propTypes = propTypes; + component.defaultProps = defaultProps; + + // @ts-ignore + component.__docgenInfo = createDocgenSection(docgenInfo); + + return component; +} + +function createDefaultValue(defaultValue: string): DocgenPropDefaultValue { + return { value: defaultValue }; +} + +function extractPropDef(component: Component, rawDefaultProp?: any): PropDef { + return enhanceTypeScriptProp(extractComponentProps(component, DOCGEN_SECTION)[0], rawDefaultProp); +} + +describe('enhanceTypeScriptProp', () => { + describe('defaultValue', () => { + function createTestComponent( + defaultValue: DocgenPropDefaultValue, + typeName = 'anything-is-fine' + ): Component { + return createComponent({ + docgenInfo: { + ...createDocgenProp({ + name: 'prop', + tsType: { name: typeName }, + defaultValue, + }), + }, + }); + } + + it('should support short object', () => { + const component = createTestComponent(createDefaultValue("{ foo: 'foo', bar: 'bar' }")); + + const { defaultValue } = extractPropDef(component); + + const expectedSummary = "{ foo: 'foo', bar: 'bar' }"; + + expect(defaultValue.summary.replace(/\s/g, '')).toBe(expectedSummary.replace(/\s/g, '')); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support long object', () => { + const component = createTestComponent( + createDefaultValue("{ foo: 'foo', bar: 'bar', another: 'another' }") + ); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('object'); + + const expectedDetail = `{ + foo: 'foo', + bar: 'bar', + another: 'another' + }`; + + expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should not have deep object in summary', () => { + const component = createTestComponent( + createDefaultValue("{ foo: 'foo', bar: { hey: 'ho' } }") + ); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('object'); + }); + + it('should support short function', () => { + const component = createTestComponent(createDefaultValue('() => {}')); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('() => {}'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support long function', () => { + const component = createTestComponent( + createDefaultValue( + '(foo, bar) => {\n const concat = foo + bar;\n const append = concat + " hey!";\n \n return append;\n}' + ) + ); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('func'); + + const expectedDetail = `(foo, bar) => { + const concat = foo + bar; + const append = concat + ' hey!'; + return append + }`; + + expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should use the name of function when available and indicate that args are present', () => { + const component = createTestComponent( + createDefaultValue('function concat(a, b) {\n return a + b;\n}') + ); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('concat( ... )'); + + const expectedDetail = `function concat(a, b) { + return a + b + }`; + + expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should use the name of function when available', () => { + const component = createTestComponent( + createDefaultValue('function hello() {\n return "hello";\n}') + ); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('hello()'); + + const expectedDetail = `function hello() { + return 'hello' + }`; + + expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should support short element', () => { + const component = createTestComponent(createDefaultValue('
Hey!
')); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('
Hey!
'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support long element', () => { + const component = createTestComponent( + createDefaultValue( + '
Hey! Hey! Hey!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
' + ) + ); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('element'); + expect(defaultValue.detail).toBe( + '
Hey! Hey! Hey!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
' + ); + }); + + it('should support element with props', () => { + const component = createTestComponent(createDefaultValue('')); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe(''); + expect(defaultValue.detail).toBe(''); + }); + + it("should use the name of the React component when it's available", () => { + const component = createTestComponent( + createDefaultValue( + 'function InlinedFunctionalComponent() {\n return
Inlined FunctionalComponent!
;\n}' + ) + ); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe(''); + + const expectedDetail = `function InlinedFunctionalComponent() { + return
Inlined FunctionalComponent!
; + }`; + + expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should not use the name of an HTML element', () => { + const component = createTestComponent(createDefaultValue('
Hey!
')); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).not.toBe('
'); + }); + + it('should support short array', () => { + const component = createTestComponent(createDefaultValue('[1]')); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('[1]'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support long array', () => { + const component = createTestComponent( + createDefaultValue( + '[\n {\n thing: {\n id: 2,\n func: () => {},\n arr: [],\n },\n },\n]' + ) + ); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('array'); + + const expectedDetail = `[{ + thing: { + id: 2, + func: () => { + }, + arr: [] + } + }]`; + + expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should not have deep array in summary', () => { + const component = createTestComponent(createDefaultValue('[[[1]]]')); + + const { defaultValue } = extractPropDef(component); + + expect(defaultValue.summary).toBe('array'); + }); + + describe('fromRawDefaultProp', () => { + [ + { type: 'number', defaultProp: 1 }, + { type: 'boolean', defaultProp: true }, + { type: 'symbol', defaultProp: Symbol('hey!') }, + ].forEach((x) => { + it(`should support ${x.type}`, () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, x.defaultProp); + + expect(defaultValue.summary).toBe(x.defaultProp.toString()); + expect(defaultValue.detail).toBeUndefined(); + }); + }); + + it('should support strings', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, 'foo'); + + expect(defaultValue.summary).toBe('"foo"'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support array of primitives', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, [1, 2, 3]); + + expect(defaultValue.summary).toBe('[1, 2, 3]'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support array of short object', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, [{ foo: 'bar' }]); + + expect(defaultValue.summary).toBe("[{ 'foo': 'bar' }]"); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support array of long object', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, [{ foo: 'bar', bar: 'foo', hey: 'ho' }]); + + expect(defaultValue.summary).toBe('array'); + + const expectedDetail = `[{ + 'foo': 'bar', + 'bar': 'foo', + 'hey': 'ho' + }]`; + + expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should support short object', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, { foo: 'bar' }); + + expect(defaultValue.summary).toBe("{ 'foo': 'bar' }"); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support long object', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, { foo: 'bar', bar: 'foo', hey: 'ho' }); + + expect(defaultValue.summary).toBe('object'); + + const expectedDetail = `{ + 'foo': 'bar', + 'bar': 'foo', + 'hey': 'ho' + }`; + + expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + it('should support anonymous function', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, () => 'hey!'); + + expect(defaultValue.summary).toBe('func'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support named function', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, function hello() { + return 'world!'; + }); + + expect(defaultValue.summary).toBe('hello()'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support named function with params', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component, function add(a: number, b: number) { + return a + b; + }); + + expect(defaultValue.summary).toBe('add( ... )'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support React element', () => { + const component = createTestComponent(null); + + const defaultProp = ; + // Simulate babel-plugin-add-react-displayname. + defaultProp.type.displayName = 'ReactComponent'; + + const { defaultValue } = extractPropDef(component, defaultProp); + + expect(defaultValue.summary).toBe(''); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support React element with props', () => { + const component = createTestComponent(null); + + // @ts-ignore + const defaultProp = ; + // Simulate babel-plugin-add-react-displayname. + defaultProp.type.displayName = 'ReactComponent'; + + const { defaultValue } = extractPropDef(component, defaultProp); + + expect(defaultValue.summary).toBe(''); + expect(defaultValue.detail).toBe(''); + }); + + it('should support short HTML element', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef(component,
HTML element
); + + expect(defaultValue.summary).toBe('
HTML element
'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it('should support long HTML element', () => { + const component = createTestComponent(null); + + const { defaultValue } = extractPropDef( + component, +
HTML element!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ ); + + expect(defaultValue.summary).toBe('element'); + + const expectedDetail = `
+ HTML element!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +
`; + + expect(defaultValue.detail.replace(/\s/g, '')).toBe(expectedDetail.replace(/\s/g, '')); + }); + + ['element', 'elementType'].forEach((x) => { + it(`should support inlined React class component for ${x}`, () => { + const component = createTestComponent(null, x); + + const { defaultValue } = extractPropDef( + component, + class InlinedClassComponent extends React.PureComponent { + render() { + return
Inlined ClassComponent!
; + } + } + ); + + expect(defaultValue.summary).toBe(''); + expect(defaultValue.detail).toBeUndefined(); + }); + + it(`should support inlined anonymous React functional component for ${x}`, () => { + const component = createTestComponent(null, x); + + const { defaultValue } = extractPropDef(component, () => { + return
Inlined FunctionalComponent!
; + }); + + expect(defaultValue.summary).toBe('element'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it(`should support inlined anonymous React functional component with props for ${x}`, () => { + const component = createTestComponent(null, x); + + const { defaultValue } = extractPropDef(component, ({ foo }: { foo: string }) => { + return
{foo}
; + }); + + expect(defaultValue.summary).toBe('element'); + expect(defaultValue.detail).toBeUndefined(); + }); + + it(`should support inlined named React functional component for ${x}`, () => { + const component = createTestComponent(null, x); + + const { defaultValue } = extractPropDef(component, function InlinedFunctionalComponent() { + return
Inlined FunctionalComponent!
; + }); + + expect(defaultValue.summary).toBe(''); + expect(defaultValue.detail).toBeUndefined(); + }); + + it(`should support inlined named React functional component with props for ${x}`, () => { + const component = createTestComponent(null, x); + + const { defaultValue } = extractPropDef( + component, + function InlinedFunctionalComponent({ foo }: { foo: string }) { + return
{foo}
; + } + ); + + expect(defaultValue.summary).toBe(''); + expect(defaultValue.detail).toBeUndefined(); + }); + }); + }); + }); +}); diff --git a/app/react/src/client/docs/typeScript/handleProp.ts b/app/react/src/client/docs/typeScript/handleProp.ts new file mode 100644 index 000000000000..2d7d13522ef7 --- /dev/null +++ b/app/react/src/client/docs/typeScript/handleProp.ts @@ -0,0 +1,26 @@ +import { PropDef, ExtractedProp } from '@storybook/docs-tools'; +import { createDefaultValue, createDefaultValueFromRawDefaultProp } from '../lib/defaultValues'; + +export function enhanceTypeScriptProp(extractedProp: ExtractedProp, rawDefaultProp?: any): PropDef { + const { propDef } = extractedProp; + + const { defaultValue } = extractedProp.docgenInfo; + if (defaultValue != null && defaultValue.value != null) { + const newDefaultValue = createDefaultValue(defaultValue.value); + if (newDefaultValue != null) { + propDef.defaultValue = newDefaultValue; + } + } else if (rawDefaultProp != null) { + const newDefaultValue = createDefaultValueFromRawDefaultProp(rawDefaultProp, propDef); + + if (newDefaultValue != null) { + propDef.defaultValue = newDefaultValue; + } + } + + return propDef; +} + +export function enhanceTypeScriptProps(extractedProps: ExtractedProp[]): PropDef[] { + return extractedProps.map((prop) => enhanceTypeScriptProp(prop)); +} diff --git a/app/react/src/client/index.ts b/app/react/src/client/index.ts index 54de76c85858..141f7e7f43fc 100644 --- a/app/react/src/client/index.ts +++ b/app/react/src/client/index.ts @@ -9,6 +9,7 @@ export { raw, forceReRender, } from './preview'; +export * from './testing'; export * from './preview/types-6-3'; diff --git a/app/react/src/client/preview/index.tsx b/app/react/src/client/preview/index.tsx index 4f47993c6719..9847e6da2046 100644 --- a/app/react/src/client/preview/index.tsx +++ b/app/react/src/client/preview/index.tsx @@ -1,5 +1,5 @@ /* eslint-disable prefer-destructuring */ -import { start } from '@storybook/core/client'; +import { start } from '@storybook/core'; import { ClientStoryApi, Loadable } from '@storybook/addons'; import './globals'; diff --git a/app/react/src/client/preview/render.tsx b/app/react/src/client/preview/render.tsx index d006aa4fdf31..e2f305158a58 100644 --- a/app/react/src/client/preview/render.tsx +++ b/app/react/src/client/preview/render.tsx @@ -6,8 +6,10 @@ import React, { StrictMode, Fragment, } from 'react'; -import ReactDOM from 'react-dom'; -import { RenderContext } from '@storybook/store'; +import ReactDOM, { version as reactDomVersion } from 'react-dom'; +import type { Root as ReactRoot } from 'react-dom/client'; + +import type { RenderContext } from '@storybook/store'; import { ArgsStoryFn } from '@storybook/csf'; import { StoryContext } from './types'; @@ -15,19 +17,70 @@ import { ReactFramework } from './types-6-0'; const { FRAMEWORK_OPTIONS } = global; -export const render: ArgsStoryFn = (args, { id, component: Component }) => { +// A map of all rendered React 18 nodes +const nodes = new Map(); + +export const render: ArgsStoryFn = (args, context) => { + const { id, component: Component } = context; if (!Component) { throw new Error( `Unable to render story ${id} as the component annotation is missing from the default export` ); } + return ; }; -const renderElement = async (node: ReactElement, el: Element) => - new Promise((resolve) => { - ReactDOM.render(node, el, () => resolve(null)); +const renderElement = async (node: ReactElement, el: Element) => { + // Create Root Element conditionally for new React 18 Root Api + const root = await getReactRoot(el); + + return new Promise((resolve) => { + if (root) { + root.render(node); + setTimeout(() => { + resolve(null); + }, 0); + } else { + ReactDOM.render(node, el, () => resolve(null)); + } }); +}; + +const canUseNewReactRootApi = + reactDomVersion && (reactDomVersion.startsWith('18') || reactDomVersion.startsWith('0.0.0')); + +const shouldUseNewRootApi = FRAMEWORK_OPTIONS?.legacyRootApi !== true; + +const isUsingNewReactRootApi = shouldUseNewRootApi && canUseNewReactRootApi; + +const unmountElement = (el: Element) => { + const root = nodes.get(el); + if (root && isUsingNewReactRootApi) { + root.unmount(); + nodes.delete(el); + } else { + ReactDOM.unmountComponentAtNode(el); + } +}; + +const getReactRoot = async (el: Element): Promise => { + if (!isUsingNewReactRootApi) { + return null; + } + + let root = nodes.get(el); + + if (!root) { + // eslint-disable-next-line import/no-unresolved + const reactDomClient = (await import('react-dom/client')).default; + root = reactDomClient.createRoot(el); + + nodes.set(el, root); + } + + return root; +}; class ErrorBoundary extends ReactComponent<{ showException: (err: Error) => void; @@ -90,8 +143,10 @@ export async function renderToDOM( // https://github.com/storybookjs/react-storybook/issues/81 // (This is not the case when we change args or globals to the story however) if (forceRemount) { - ReactDOM.unmountComponentAtNode(domElement); + unmountElement(domElement); } await renderElement(element, domElement); + + return () => unmountElement(domElement); } diff --git a/app/react/src/client/preview/types-6-0.ts b/app/react/src/client/preview/types-6-0.ts index f2d3d53a18f4..9b573efac5a6 100644 --- a/app/react/src/client/preview/types-6-0.ts +++ b/app/react/src/client/preview/types-6-0.ts @@ -1,6 +1,11 @@ -import { ComponentType } from 'react'; -import { Args, ComponentAnnotations, StoryAnnotations, AnnotatedStoryFn } from '@storybook/csf'; -import { StoryFnReactReturnType } from './types'; +import type { ComponentType } from 'react'; +import type { + Args, + ComponentAnnotations, + StoryAnnotations, + AnnotatedStoryFn, +} from '@storybook/csf'; +import type { StoryFnReactReturnType } from './types'; export type { Args, ArgTypes, Parameters, StoryContext } from '@storybook/csf'; diff --git a/app/react/src/client/preview/types-6-3.ts b/app/react/src/client/preview/types-6-3.ts index cb1025b975b4..85c72920bee1 100644 --- a/app/react/src/client/preview/types-6-3.ts +++ b/app/react/src/client/preview/types-6-3.ts @@ -10,9 +10,8 @@ export * from './types-6-0'; * export default { ... } as ComponentMeta; * ``` */ -export type ComponentMeta< - T extends keyof JSX.IntrinsicElements | JSXElementConstructor -> = Meta>; +export type ComponentMeta> = + Meta>; /** * For the common case where a (CSFv2) story is a simple component that receives args as props: @@ -21,9 +20,8 @@ export type ComponentMeta< * const Template: ComponentStory = (args) => `, + }) + ) + ).toMatchInlineSnapshot(``); + }); + + it('static class', () => { + expect( + vnodeToString( + getVNode({ + template: ``, + }) + ) + ).toMatchInlineSnapshot(``); + }); + + it('string dynamic class', () => { + expect( + vnodeToString( + getVNode({ + template: ``, + }) + ) + ).toMatchInlineSnapshot(``); + }); + + it('non-string dynamic class', () => { + expect( + vnodeToString( + getVNode({ + template: ``, + }) + ) + ).toMatchInlineSnapshot(``); + }); + + it('array dynamic class', () => { + expect( + vnodeToString( + getVNode({ + template: ``, + }) + ) + ).toMatchInlineSnapshot(``); + }); + + it('object dynamic class', () => { + expect( + vnodeToString( + getVNode({ + template: ``, + }) + ) + ).toMatchInlineSnapshot(``); + }); + + it('merge dynamic and static classes', () => { + expect( + vnodeToString( + getVNode({ + template: ``, + }) + ) + ).toMatchInlineSnapshot(``); + }); + + it('attributes', () => { + const MyComponent: ComponentOptions = { + props: ['propA', 'propB', 'propC', 'propD', 'propE', 'propF', 'propG'], + template: '
', + }; + + expect( + vnodeToString( + getVNode({ + components: { MyComponent }, + data(): { props: Record } { + return { + props: { + propA: 'propA', + propB: 1, + propC: null, + propD: { + foo: 'bar', + }, + propE: true, + propF() { + const foo = 'bar'; + + return foo; + }, + propG: undefined, + }, + }; + }, + template: ``, + }) + ) + ).toMatchInlineSnapshot( + `` + ); + }); + + it('children', () => { + expect( + vnodeToString( + getVNode({ + template: ` +
+
+ +
+
`, + }) + ) + ).toMatchInlineSnapshot(`
`); + }); + + it('empty tag', () => { + expect( + vnodeToString( + getVNode({ + template: ` +
+
`, + }) + ) + ).toMatchInlineSnapshot(`
`); + }); + + it('tag in text', () => { + expect( + vnodeToString( + getVNode({ + template: ` +
+ <> +
`, + }) + ) + ).toMatchInlineSnapshot(` +
{{\` + <> + \`}}
+ `); + }); + + it('component element with children', () => { + const MyComponent: ComponentOptions = { + props: ['propA'], + template: '
', + }; + + expect( + vnodeToString( + getVNode({ + components: { MyComponent }, + data(): { props: Record } { + return { + props: { + propA: 'propA', + }, + }; + }, + template: `
`, + }) + ) + ).toMatchInlineSnapshot(`
`); + }); +}); diff --git a/app/vue/src/client/docs/sourceDecorator.ts b/app/vue/src/client/docs/sourceDecorator.ts new file mode 100644 index 000000000000..3104f70abee9 --- /dev/null +++ b/app/vue/src/client/docs/sourceDecorator.ts @@ -0,0 +1,224 @@ +/* eslint no-underscore-dangle: ["error", { "allow": ["_vnode"] }] */ + +import type { StoryContext } from '@storybook/csf'; +import { addons } from '@storybook/addons'; +import { logger } from '@storybook/client-logger'; +import type Vue from 'vue'; + +import { SourceType, SNIPPET_RENDERED } from '@storybook/docs-tools'; +import type { VueFramework } from '../preview/types-6-0'; + +export const skipSourceRender = (context: StoryContext) => { + const sourceParams = context?.parameters.docs?.source; + const isArgsStory = context?.parameters.__isArgsStory; + + // always render if the user forces it + if (sourceParams?.type === SourceType.DYNAMIC) { + return false; + } + + // never render if the user is forcing the block to render code, or + // if the user provides code, or if it's not an args story. + return !isArgsStory || sourceParams?.code || sourceParams?.type === SourceType.CODE; +}; + +export const sourceDecorator = (storyFn: any, context: StoryContext) => { + const story = storyFn(); + + // See ../react/jsxDecorator.tsx + if (skipSourceRender(context)) { + return story; + } + + const channel = addons.getChannel(); + + const storyComponent = getStoryComponent(story.options.STORYBOOK_WRAPS); + + return { + components: { + Story: story, + }, + // We need to wait until the wrapper component to be mounted so Vue runtime + // struct VNode tree. We get `this._vnode == null` if switch to `created` + // lifecycle hook. + mounted() { + // Theoretically this does not happens but we need to check it. + if (!this._vnode) { + return; + } + + try { + const storyNode = lookupStoryInstance(this, storyComponent); + + const code = vnodeToString(storyNode._vnode); + + channel.emit(SNIPPET_RENDERED, (context || {}).id, ``, 'vue'); + } catch (e) { + logger.warn(`Failed to generate dynamic story source: ${e}`); + } + }, + template: '', + }; +}; + +export function vnodeToString(vnode: Vue.VNode): string { + const attrString = [ + ...(vnode.data?.slot ? ([['slot', vnode.data.slot]] as [string, any][]) : []), + ['class', stringifyClassAttribute(vnode)], + ...(vnode.componentOptions?.propsData ? Object.entries(vnode.componentOptions.propsData) : []), + ...(vnode.data?.attrs ? Object.entries(vnode.data.attrs) : []), + ] + .filter(([name], index, list) => list.findIndex((item) => item[0] === name) === index) + .map(([name, value]) => stringifyAttr(name, value)) + .filter(Boolean) + .join(' '); + + if (!vnode.componentOptions) { + // Non-component elements (div, span, etc...) + if (vnode.tag) { + if (!vnode.children) { + return `<${vnode.tag} ${attrString}/>`; + } + + return `<${vnode.tag} ${attrString}>${vnode.children.map(vnodeToString).join('')}`; + } + + // TextNode + if (vnode.text) { + if (/[<>"&]/.test(vnode.text)) { + return `{{\`${vnode.text.replace(/`/g, '\\`')}\`}}`; + } + + return vnode.text; + } + + // Unknown + return ''; + } + + // Probably users never see the "unknown-component". It seems that vnode.tag + // is always set. + const tag = vnode.componentOptions.tag || vnode.tag || 'unknown-component'; + + if (!vnode.componentOptions.children) { + return `<${tag} ${attrString}/>`; + } + + return `<${tag} ${attrString}>${vnode.componentOptions.children + .map(vnodeToString) + .join('')}`; +} + +function stringifyClassAttribute(vnode: Vue.VNode): string | undefined { + if (!vnode.data || (!vnode.data.staticClass && !vnode.data.class)) { + return undefined; + } + + return ( + [...(vnode.data.staticClass?.split(' ') ?? []), ...normalizeClassBinding(vnode.data.class)] + .filter(Boolean) + .join(' ') || undefined + ); +} + +// https://vuejs.org/v2/guide/class-and-style.html#Binding-HTML-Classes +function normalizeClassBinding(binding: unknown): readonly string[] { + if (!binding) { + return []; + } + + if (typeof binding === 'string') { + return [binding]; + } + + if (binding instanceof Array) { + // To handle an object-in-array binding smartly, we use recursion + return binding.map(normalizeClassBinding).reduce((a, b) => [...a, ...b], []); + } + + if (typeof binding === 'object') { + return Object.entries(binding) + .filter(([, active]) => !!active) + .map(([className]) => className); + } + + // Unknown class binding + return []; +} + +function stringifyAttr(attrName: string, value?: any): string | null { + if (typeof value === 'undefined' || typeof value === 'function') { + return null; + } + + if (value === true) { + return attrName; + } + + if (typeof value === 'string') { + return `${attrName}=${quote(value)}`; + } + + // TODO: Better serialization (unquoted object key, Symbol/Classes, etc...) + // Seems like Prettier don't format JSON-look object (= when keys are quoted) + return `:${attrName}=${quote(JSON.stringify(value))}`; +} + +function quote(value: string) { + return value.includes(`"`) && !value.includes(`'`) + ? `'${value}'` + : `"${value.replace(/"/g, '"')}"`; +} + +/** + * Skip decorators and grab a story component itself. + * https://github.com/pocka/storybook-addon-vue-info/pull/113 + */ +function getStoryComponent(w: any) { + let matched = w; + + while ( + matched && + matched.options && + matched.options.components && + matched.options.components.story && + matched.options.components.story.options && + matched.options.components.story.options.STORYBOOK_WRAPS + ) { + matched = matched.options.components.story.options.STORYBOOK_WRAPS; + } + return matched; +} + +interface VueInternal { + // We need to access this private property, in order to grab the vnode of the + // component instead of the "vnode of the parent of the component". + // Probably it's safe to rely on this because vm.$vnode is a reference for this. + // https://github.com/vuejs/vue/issues/6070#issuecomment-314389883 + _vnode: Vue.VNode; +} + +/** + * Find the story's instance from VNode tree. + */ +function lookupStoryInstance(instance: Vue, storyComponent: any): (Vue & VueInternal) | null { + if ( + instance.$vnode && + instance.$vnode.componentOptions && + instance.$vnode.componentOptions.Ctor === storyComponent + ) { + return instance as Vue & VueInternal; + } + + for (let i = 0, l = instance.$children.length; i < l; i += 1) { + const found = lookupStoryInstance(instance.$children[i], storyComponent); + + if (found) { + return found; + } + } + + return null; +} diff --git a/app/vue/src/client/preview/config.ts b/app/vue/src/client/preview/config.ts index 1ffa6048478c..759c77b9abeb 100644 --- a/app/vue/src/client/preview/config.ts +++ b/app/vue/src/client/preview/config.ts @@ -1,3 +1,4 @@ -export { renderToDOM } from './render'; +export { render, renderToDOM } from './render'; +export { decorateStory as applyDecorators } from './decorateStory'; export const parameters = { framework: 'vue' }; diff --git a/app/vue/src/client/preview/decorateStory.ts b/app/vue/src/client/preview/decorateStory.ts new file mode 100644 index 000000000000..490df79b9ea0 --- /dev/null +++ b/app/vue/src/client/preview/decorateStory.ts @@ -0,0 +1,83 @@ +import Vue, { VueConstructor, ComponentOptions } from 'vue'; +import type { DecoratorFunction, StoryContext, LegacyStoryFn } from '@storybook/csf'; +import { sanitizeStoryContextUpdate } from '@storybook/store'; + +import type { StoryFnVueReturnType } from './types'; +import type { VueFramework } from './types-6-0'; +import { extractProps } from './util'; +import { VALUES } from './render'; + +export const WRAPS = 'STORYBOOK_WRAPS'; + +function prepare( + rawStory: StoryFnVueReturnType, + innerStory?: VueConstructor +): VueConstructor | null { + let story: ComponentOptions | VueConstructor; + + if (typeof rawStory === 'string') { + story = { template: rawStory }; + } else if (rawStory != null) { + story = rawStory as ComponentOptions; + } else { + return null; + } + + // @ts-ignore + // eslint-disable-next-line no-underscore-dangle + if (!story._isVue) { + if (innerStory) { + story.components = { ...(story.components || {}), story: innerStory }; + } + story = Vue.extend(story); + // @ts-ignore // https://github.com/storybookjs/storybook/pull/7578#discussion_r307984824 + } else if (story.options[WRAPS]) { + return story as VueConstructor; + } + + return Vue.extend({ + // @ts-ignore // https://github.com/storybookjs/storybook/pull/7578#discussion_r307985279 + [WRAPS]: story, + // @ts-ignore // https://github.com/storybookjs/storybook/pull/7578#discussion_r307984824 + [VALUES]: { ...(innerStory ? innerStory.options[VALUES] : {}), ...extractProps(story) }, + functional: true, + render(h, { data, parent, children }) { + return h( + story, + { + ...data, + // @ts-ignore // https://github.com/storybookjs/storybook/pull/7578#discussion_r307986196 + props: { ...(data.props || {}), ...parent.$root[VALUES] }, + }, + children + ); + }, + }); +} + +export function decorateStory( + storyFn: LegacyStoryFn, + decorators: DecoratorFunction[] +): LegacyStoryFn { + return decorators.reduce( + (decorated: LegacyStoryFn, decorator) => (context: StoryContext) => { + let story; + + const decoratedStory = decorator((update) => { + story = decorated({ ...context, ...sanitizeStoryContextUpdate(update) }); + return story; + }, context); + + if (!story) { + story = decorated(context); + } + + if (decoratedStory === story) { + return story; + } + + return prepare(decoratedStory, story as any); + }, + (context) => prepare(storyFn(context)) + ); +} diff --git a/app/vue/src/client/preview/index.ts b/app/vue/src/client/preview/index.ts index 1470e77e91b4..0d894499697c 100644 --- a/app/vue/src/client/preview/index.ts +++ b/app/vue/src/client/preview/index.ts @@ -1,93 +1,13 @@ /* eslint-disable prefer-destructuring */ -import Vue, { VueConstructor, ComponentOptions } from 'vue'; -import { start } from '@storybook/core/client'; -import { DecoratorFunction, StoryContext, LegacyStoryFn } from '@storybook/csf'; -import { ClientStoryApi, Loadable } from '@storybook/addons'; -import { sanitizeStoryContextUpdate } from '@storybook/store'; +import { start } from '@storybook/core'; +import type { ClientStoryApi, Loadable } from '@storybook/addons'; import './globals'; -import { IStorybookSection, StoryFnVueReturnType } from './types'; -import { VueFramework } from './types-6-0'; +import type { IStorybookSection } from './types'; +import type { VueFramework } from './types-6-0'; +import { renderToDOM, render } from './render'; +import { decorateStory } from './decorateStory'; -import { renderToDOM, VALUES } from './render'; -import { extractProps } from './util'; - -export const WRAPS = 'STORYBOOK_WRAPS'; - -function prepare( - rawStory: StoryFnVueReturnType, - innerStory?: VueConstructor -): VueConstructor | null { - let story: ComponentOptions | VueConstructor; - - if (typeof rawStory === 'string') { - story = { template: rawStory }; - } else if (rawStory != null) { - story = rawStory as ComponentOptions; - } else { - return null; - } - - // @ts-ignore - // eslint-disable-next-line no-underscore-dangle - if (!story._isVue) { - if (innerStory) { - story.components = { ...(story.components || {}), story: innerStory }; - } - story = Vue.extend(story); - // @ts-ignore // https://github.com/storybookjs/storybook/pull/7578#discussion_r307984824 - } else if (story.options[WRAPS]) { - return story as VueConstructor; - } - - return Vue.extend({ - // @ts-ignore // https://github.com/storybookjs/storybook/pull/7578#discussion_r307985279 - [WRAPS]: story, - // @ts-ignore // https://github.com/storybookjs/storybook/pull/7578#discussion_r307984824 - [VALUES]: { ...(innerStory ? innerStory.options[VALUES] : {}), ...extractProps(story) }, - functional: true, - render(h, { data, parent, children }) { - return h( - story, - { - ...data, - // @ts-ignore // https://github.com/storybookjs/storybook/pull/7578#discussion_r307986196 - props: { ...(data.props || {}), ...parent.$root[VALUES] }, - }, - children - ); - }, - }); -} - -function decorateStory( - storyFn: LegacyStoryFn, - decorators: DecoratorFunction[] -): LegacyStoryFn { - return decorators.reduce( - (decorated: LegacyStoryFn, decorator) => ( - context: StoryContext - ) => { - let story; - - const decoratedStory = decorator((update) => { - story = decorated({ ...context, ...sanitizeStoryContextUpdate(update) }); - return story; - }, context); - - if (!story) { - story = decorated(context); - } - - if (decoratedStory === story) { - return story; - } - - return prepare(decoratedStory, story as any); - }, - (context) => prepare(storyFn(context)) - ); -} const framework = 'vue'; interface ClientApi extends ClientStoryApi { @@ -100,7 +20,7 @@ interface ClientApi extends ClientStoryApi { load: (...args: any[]) => void; } -const api = start(renderToDOM, { decorateStory }); +const api = start(renderToDOM, { decorateStory, render }); export const storiesOf: ClientApi['storiesOf'] = (kind, m) => { return (api.clientApi.storiesOf(kind, m) as ReturnType).addParameters({ diff --git a/app/vue/src/client/preview/render.ts b/app/vue/src/client/preview/render.ts index 2f82dd7fa706..0df15a39b692 100644 --- a/app/vue/src/client/preview/render.ts +++ b/app/vue/src/client/preview/render.ts @@ -1,7 +1,9 @@ +/* eslint-disable no-underscore-dangle */ import dedent from 'ts-dedent'; import Vue from 'vue'; -import { RenderContext } from '@storybook/store'; -import { VueFramework } from './types-6-0'; +import type { RenderContext } from '@storybook/store'; +import type { ArgsStoryFn } from '@storybook/csf'; +import type { VueFramework } from './types-6-0'; export const COMPONENT = 'STORYBOOK_COMPONENT'; export const VALUES = 'STORYBOOK_VALUES'; @@ -19,6 +21,40 @@ const root = new Vue({ }, }); +export const render: ArgsStoryFn = (props, context) => { + const { id, component: Component, argTypes } = context; + const component = Component as VueFramework['component'] & { + __docgenInfo?: { displayName: string }; + props: Record; + }; + + if (!component) { + throw new Error( + `Unable to render story ${id} as the component annotation is missing from the default export` + ); + } + + let componentName = 'component'; + + // if there is a name property, we either use it or preprend with sb- in case it's an invalid name + if (component.name) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore isReservedTag is an internal function from Vue, might be changed in future releases + const isReservedTag = Vue.config.isReservedTag && Vue.config.isReservedTag(component.name); + + componentName = isReservedTag ? `sb-${component.name}` : component.name; + } else if (component.__docgenInfo?.displayName) { + // otherwise, we use the displayName from docgen, if present + componentName = component.__docgenInfo?.displayName; + } + + return { + props: Object.keys(argTypes), + components: { [componentName]: component }, + template: `<${componentName} v-bind="$props" />`, + }; +}; + export function renderToDOM( { title, diff --git a/app/vue/src/client/preview/types-6-0.ts b/app/vue/src/client/preview/types-6-0.ts index 39435b6f1187..dcd515791c01 100644 --- a/app/vue/src/client/preview/types-6-0.ts +++ b/app/vue/src/client/preview/types-6-0.ts @@ -1,6 +1,11 @@ -import { Component, AsyncComponent } from 'vue'; -import { Args, ComponentAnnotations, StoryAnnotations, AnnotatedStoryFn } from '@storybook/csf'; -import { StoryFnVueReturnType } from './types'; +import type { Component, AsyncComponent } from 'vue'; +import type { + Args, + ComponentAnnotations, + StoryAnnotations, + AnnotatedStoryFn, +} from '@storybook/csf'; +import type { StoryFnVueReturnType } from './types'; export type { Args, ArgTypes, Parameters, StoryContext } from '@storybook/csf'; diff --git a/app/vue/src/client/preview/types-7-0.ts b/app/vue/src/client/preview/types-7-0.ts index b88051446a9d..d897ad97a81a 100644 --- a/app/vue/src/client/preview/types-7-0.ts +++ b/app/vue/src/client/preview/types-7-0.ts @@ -1,4 +1,4 @@ -import { Args } from '@storybook/csf'; +import type { Args } from '@storybook/csf'; import type { StoryObj } from './types-6-0'; diff --git a/app/vue/src/server/framework-preset-vue-docs.ts b/app/vue/src/server/framework-preset-vue-docs.ts new file mode 100644 index 000000000000..984fa07c49c5 --- /dev/null +++ b/app/vue/src/server/framework-preset-vue-docs.ts @@ -0,0 +1,36 @@ +import { findDistEsm, Options, StorybookConfig } from '@storybook/core-common'; +import { hasDocsOrControls } from '@storybook/docs-tools'; + +export function webpackFinal(webpackConfig: any = {}, options: Options) { + if (!hasDocsOrControls(options)) return webpackConfig; + + let vueDocgenOptions = {}; + + options.presetsList?.forEach((preset) => { + if (preset.name.includes('addon-docs') && preset.options.vueDocgenOptions) { + const appendableOptions = preset.options.vueDocgenOptions; + vueDocgenOptions = { + ...vueDocgenOptions, + ...appendableOptions, + }; + } + }); + + webpackConfig.module.rules.push({ + test: /\.vue$/, + loader: require.resolve('vue-docgen-loader', { paths: [require.resolve('@storybook/vue')] }), + enforce: 'post', + options: { + docgenOptions: { + alias: webpackConfig.resolve.alias, + ...vueDocgenOptions, + }, + }, + }); + return webpackConfig; +} + +export const previewAnnotations: StorybookConfig['previewAnnotations'] = (entry = [], options) => { + if (!hasDocsOrControls(options)) return entry; + return [...entry, findDistEsm(__dirname, 'client/docs/config')]; +}; diff --git a/app/vue/src/server/framework-preset-vue.ts b/app/vue/src/server/framework-preset-vue.ts index 9e0eeb442079..8656d8d35060 100644 --- a/app/vue/src/server/framework-preset-vue.ts +++ b/app/vue/src/server/framework-preset-vue.ts @@ -1,8 +1,9 @@ /* eslint-disable no-param-reassign */ -import VueLoaderPlugin from 'vue-loader/lib/plugin'; -import type { Configuration } from 'webpack'; +import { VueLoaderPlugin } from 'vue-loader'; +import { findDistEsm } from '@storybook/core-common'; -import type { Options, TypescriptConfig } from '@storybook/core-common'; +import type { Configuration } from 'webpack'; +import type { Options, TypescriptConfig, StorybookConfig } from '@storybook/core-common'; export async function webpack(config: Configuration, { presets }: Options) { const typescriptOptions = await presets.apply('typescript', {} as any); @@ -43,3 +44,7 @@ export async function webpack(config: Configuration, { presets }: Options) { return config; } + +export const previewAnnotations: StorybookConfig['previewAnnotations'] = (entry = []) => { + return [...entry, findDistEsm(__dirname, 'client/preview/config')]; +}; diff --git a/app/vue/src/server/options.ts b/app/vue/src/server/options.ts index e57b04994811..6cd7efb1f6a8 100644 --- a/app/vue/src/server/options.ts +++ b/app/vue/src/server/options.ts @@ -4,5 +4,5 @@ import { LoadOptions } from '@storybook/core-common'; export default { packageJson: sync({ cwd: __dirname }).packageJson, framework: 'vue', - frameworkPresets: [require.resolve('./framework-preset-vue.js')], + frameworkPresets: [require.resolve('./preset.js')], } as LoadOptions; diff --git a/app/vue/src/server/preset.ts b/app/vue/src/server/preset.ts new file mode 100644 index 000000000000..89288293223c --- /dev/null +++ b/app/vue/src/server/preset.ts @@ -0,0 +1,6 @@ +import type { StorybookConfig } from '@storybook/core-common'; + +export const addons: StorybookConfig['addons'] = [ + require.resolve('./framework-preset-vue'), + require.resolve('./framework-preset-vue-docs'), +]; diff --git a/app/vue/src/typings.d.ts b/app/vue/src/typings.d.ts index 87f498f04800..4f4eff6c31cd 100644 --- a/app/vue/src/typings.d.ts +++ b/app/vue/src/typings.d.ts @@ -1,5 +1,3 @@ declare module 'global'; -// todo check for correct types -declare module 'webpack/lib/RuleSet'; declare module 'vue-loader/lib/plugin'; \ No newline at end of file diff --git a/app/vue/tsconfig.json b/app/vue/tsconfig.json index 08bdb7764f76..ea47a78eb476 100644 --- a/app/vue/tsconfig.json +++ b/app/vue/tsconfig.json @@ -2,7 +2,10 @@ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "./src", - "types": ["webpack-env", "node"], + "types": [ + "webpack-env", + "node" + ], "resolveJsonModule": true }, "include": [ @@ -11,4 +14,4 @@ "exclude": [ "src/**/*.test.*" ] -} +} \ No newline at end of file diff --git a/app/vue/types-7-0.d.ts b/app/vue/types-7-0.d.ts new file mode 100644 index 000000000000..a6080e072100 --- /dev/null +++ b/app/vue/types-7-0.d.ts @@ -0,0 +1 @@ +export * from './dist/ts3.9/client/preview/types-7-0.d'; diff --git a/app/vue3/README.md b/app/vue3/README.md index 0d85c31aa0eb..b0fafaff0295 100644 --- a/app/vue3/README.md +++ b/app/vue3/README.md @@ -19,8 +19,8 @@ For more information visit: [storybook.js.org](https://storybook.js.org) --- -Storybook also comes with a lot of [addons](https://storybook.js.org/docs/vue3/configure/storybook-addons) and a great API to customize as you wish. -You can also build a [static version](https://storybook.js.org/docs/vue3/workflows/publish-storybook) of your storybook and deploy it anywhere you want. +Storybook also comes with a lot of [addons](https://storybook.js.org/addons) and a great API to customize as you wish. +You can also build a [static version](https://storybook.js.org/docs/vue/sharing/publish-storybook) of your Storybook and deploy it anywhere you want. ## Extending the Vue application diff --git a/app/vue3/package.json b/app/vue3/package.json index 2a9b5d2f759a..37912dd5606d 100644 --- a/app/vue3/package.json +++ b/app/vue3/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/vue3", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Storybook for Vue 3: Develop Vue 3 Components in isolation with Hot Reloading.", "keywords": [ "storybook" @@ -45,11 +45,13 @@ "prepare": "node ../../scripts/prepare.js" }, "dependencies": { - "@storybook/addons": "6.4.0-beta.10", - "@storybook/core": "6.4.0-beta.10", - "@storybook/core-common": "6.4.0-beta.10", - "@storybook/csf": "0.0.2--canary.6aca495.0", - "@storybook/store": "6.4.0-beta.10", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/core": "6.5.0-rc.1", + "@storybook/core-common": "6.5.0-rc.1", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/docs-tools": "6.5.0-rc.1", + "@storybook/store": "6.5.0-rc.1", + "@types/node": "^14.14.20 || ^16.0.0", "@types/webpack-env": "^1.16.0", "core-js": "^3.8.2", "global": "^4.4.0", @@ -59,15 +61,15 @@ "regenerator-runtime": "^0.13.7", "ts-dedent": "^2.0.0", "ts-loader": "^8.0.14", - "vue-docgen-api": "^4.38.0", + "vue-docgen-api": "^4.44.15", "vue-docgen-loader": "^1.5.0", - "vue-loader": "^16.0.0", - "webpack": "4" + "vue-loader": "^16.4.1", + "webpack": ">=4.0.0 <6.0.0" }, "devDependencies": { - "@types/node": "^14.14.20", - "@vue/compiler-sfc": "^3.0.0", - "vue": "^3.0.0" + "@vue/compiler-sfc": "3.0.0", + "vue": "3.0.0", + "webpack": "4" }, "peerDependencies": { "@babel/core": "*", @@ -81,6 +83,6 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", "sbmodern": "dist/modern/client/index.js" } diff --git a/app/vue3/preset.js b/app/vue3/preset.js index 20b417ae97b5..f09c6698e046 100644 --- a/app/vue3/preset.js +++ b/app/vue3/preset.js @@ -1,7 +1 @@ -function config(entry = []) { - return [...entry, require.resolve('./dist/esm/client/preview/config')]; -} - -module.exports = { - config, -}; +module.exports = require('./dist/cjs/server/preset'); diff --git a/app/vue3/src/client/docs/config.ts b/app/vue3/src/client/docs/config.ts new file mode 100644 index 000000000000..dd87a14d1a7e --- /dev/null +++ b/app/vue3/src/client/docs/config.ts @@ -0,0 +1,14 @@ +import { extractComponentDescription, enhanceArgTypes } from '@storybook/docs-tools'; +import { extractArgTypes } from './extractArgTypes'; +import { prepareForInline } from './prepareForInline'; + +export const parameters = { + docs: { + inlineStories: true, + prepareForInline, + extractArgTypes, + extractComponentDescription, + }, +}; + +export const argTypesEnhancers = [enhanceArgTypes]; diff --git a/app/vue3/src/client/docs/extractArgTypes.ts b/app/vue3/src/client/docs/extractArgTypes.ts new file mode 100644 index 000000000000..c7a3e4199598 --- /dev/null +++ b/app/vue3/src/client/docs/extractArgTypes.ts @@ -0,0 +1,32 @@ +import type { StrictArgTypes } from '@storybook/csf'; +import type { ArgTypesExtractor } from '@storybook/docs-tools'; +import { hasDocgen, extractComponentProps, convert } from '@storybook/docs-tools'; + +const SECTIONS = ['props', 'events', 'slots']; + +export const extractArgTypes: ArgTypesExtractor = (component) => { + if (!hasDocgen(component)) { + return null; + } + const results: StrictArgTypes = {}; + SECTIONS.forEach((section) => { + const props = extractComponentProps(component, section); + props.forEach(({ propDef, docgenInfo, jsDocTags }) => { + const { name, type, description, defaultValue: defaultSummary, required } = propDef; + const sbType = section === 'props' ? convert(docgenInfo) : { name: 'void' }; + + results[name] = { + name, + description, + type: { required, ...sbType }, + table: { + type, + jsDocTags, + defaultValue: defaultSummary, + category: section, + }, + }; + }); + }); + return results; +}; diff --git a/app/vue3/src/client/docs/prepareForInline.ts b/app/vue3/src/client/docs/prepareForInline.ts new file mode 100644 index 000000000000..155f9253b83d --- /dev/null +++ b/app/vue3/src/client/docs/prepareForInline.ts @@ -0,0 +1,24 @@ +import React from 'react'; +import * as Vue from 'vue'; +import { StoryContext, PartialStoryFn } from '@storybook/csf'; +import { app, VueFramework } from '../index'; + +// This is cast as `any` to workaround type errors caused by Vue 2 types +const { render, h } = Vue as any; + +export const prepareForInline = ( + storyFn: PartialStoryFn, + { args }: StoryContext +) => { + const component = storyFn(); + + const vnode = h(component, args); + // By attaching the app context from `@storybook/vue3` to the vnode + // like this, these stoeis are able to access any app config stuff + // the end-user set inside `.storybook/preview.js` + vnode.appContext = app._context; // eslint-disable-line no-underscore-dangle + + return React.createElement('div', { + ref: (node?: HTMLDivElement): void => (node ? render(vnode, node) : null), + }); +}; diff --git a/app/vue3/src/client/index.ts b/app/vue3/src/client/index.ts index 57d0e7c7f30e..de13a1bc49ff 100644 --- a/app/vue3/src/client/index.ts +++ b/app/vue3/src/client/index.ts @@ -8,6 +8,7 @@ export { forceReRender, raw, app, + activeStoryComponent, } from './preview'; export * from './preview/types-6-0'; diff --git a/app/vue3/src/client/preview/config.ts b/app/vue3/src/client/preview/config.ts index 256d07e9a057..589efca6a13f 100644 --- a/app/vue3/src/client/preview/config.ts +++ b/app/vue3/src/client/preview/config.ts @@ -1,3 +1,4 @@ -export { renderToDOM } from './render'; +export { render, renderToDOM } from './render'; +export { decorateStory as applyDecorators } from './decorateStory'; export const parameters = { framework: 'vue3' }; diff --git a/app/vue3/src/client/preview/decorateStory.ts b/app/vue3/src/client/preview/decorateStory.ts new file mode 100644 index 000000000000..22fc50e6bbf9 --- /dev/null +++ b/app/vue3/src/client/preview/decorateStory.ts @@ -0,0 +1,68 @@ +import type { ConcreteComponent, Component, ComponentOptions } from 'vue'; +import { h } from 'vue'; +import type { DecoratorFunction, StoryContext, LegacyStoryFn } from '@storybook/csf'; +import { sanitizeStoryContextUpdate } from '@storybook/store'; + +import type { VueFramework } from './types-6-0'; + +/* + This normalizes a functional component into a render method in ComponentOptions. + + The concept is taken from Vue 3's `defineComponent` but changed from creating a `setup` + method on the ComponentOptions so end-users don't need to specify a "thunk" as a decorator. + */ +function normalizeFunctionalComponent(options: ConcreteComponent): ComponentOptions { + return typeof options === 'function' ? { render: options, name: options.name } : options; +} + +function prepare( + rawStory: VueFramework['storyResult'], + innerStory?: ConcreteComponent +): Component | null { + const story = rawStory as ComponentOptions; + + if (story == null) { + return null; + } + + if (innerStory) { + return { + // Normalize so we can always spread an object + ...normalizeFunctionalComponent(story), + components: { ...(story.components || {}), story: innerStory }, + }; + } + + return { + render() { + return h(story); + }, + }; +} + +export function decorateStory( + storyFn: LegacyStoryFn, + decorators: DecoratorFunction[] +): LegacyStoryFn { + return decorators.reduce( + (decorated: LegacyStoryFn, decorator) => (context: StoryContext) => { + let story: VueFramework['storyResult']; + + const decoratedStory: VueFramework['storyResult'] = decorator((update) => { + story = decorated({ ...context, ...sanitizeStoryContextUpdate(update) }); + return story; + }, context); + + if (!story) { + story = decorated(context); + } + + if (decoratedStory === story) { + return story; + } + + return prepare(decoratedStory, story) as VueFramework['storyResult']; + }, + (context) => prepare(storyFn(context)) as LegacyStoryFn + ); +} diff --git a/app/vue3/src/client/preview/index.ts b/app/vue3/src/client/preview/index.ts index 83ea77664b37..912dc4bf7919 100644 --- a/app/vue3/src/client/preview/index.ts +++ b/app/vue3/src/client/preview/index.ts @@ -1,79 +1,14 @@ -import type { ConcreteComponent, Component, ComponentOptions, App } from 'vue'; -import { h } from 'vue'; -import { start } from '@storybook/core/client'; -import { DecoratorFunction, StoryContext, LegacyStoryFn } from '@storybook/csf'; -import { ClientStoryApi, Loadable } from '@storybook/addons'; -import { sanitizeStoryContextUpdate } from '@storybook/store'; +import type { App } from 'vue'; +import { start } from '@storybook/core'; +import type { ClientStoryApi, Loadable } from '@storybook/addons'; import './globals'; -import { IStorybookSection } from './types'; -import { VueFramework } from './types-6-0'; +import type { IStorybookSection } from './types'; +import type { VueFramework } from './types-6-0'; +import { decorateStory } from './decorateStory'; -import { renderToDOM, storybookApp } from './render'; +import { render, renderToDOM, storybookApp } from './render'; -/* - This normalizes a functional component into a render method in ComponentOptions. - - The concept is taken from Vue 3's `defineComponent` but changed from creating a `setup` - method on the ComponentOptions so end-users don't need to specify a "thunk" as a decorator. - */ -function normalizeFunctionalComponent(options: ConcreteComponent): ComponentOptions { - return typeof options === 'function' ? { render: options, name: options.name } : options; -} - -function prepare( - rawStory: VueFramework['storyResult'], - innerStory?: ConcreteComponent -): Component | null { - const story = rawStory as ComponentOptions; - - if (story == null) { - return null; - } - - if (innerStory) { - return { - // Normalize so we can always spread an object - ...normalizeFunctionalComponent(story), - components: { ...(story.components || {}), story: innerStory }, - }; - } - - return { - render() { - return h(story); - }, - }; -} - -function decorateStory( - storyFn: LegacyStoryFn, - decorators: DecoratorFunction[] -): LegacyStoryFn { - return decorators.reduce( - (decorated: LegacyStoryFn, decorator) => ( - context: StoryContext - ) => { - let story: VueFramework['storyResult']; - - const decoratedStory: VueFramework['storyResult'] = decorator((update) => { - story = decorated({ ...context, ...sanitizeStoryContextUpdate(update) }); - return story; - }, context); - - if (!story) { - story = decorated(context); - } - - if (decoratedStory === story) { - return story; - } - - return prepare(decoratedStory, story) as VueFramework['storyResult']; - }, - (context) => prepare(storyFn(context)) as LegacyStoryFn - ); -} const framework = 'vue3'; interface ClientApi extends ClientStoryApi { @@ -87,7 +22,7 @@ interface ClientApi extends ClientStoryApi { app: App; } -const api = start(renderToDOM, { decorateStory }); +const api = start(renderToDOM, { decorateStory, render }); export const storiesOf: ClientApi['storiesOf'] = (kind, m) => { return (api.clientApi.storiesOf(kind, m) as ReturnType).addParameters({ @@ -104,3 +39,4 @@ export const { forceReRender } = api; export const { getStorybook } = api.clientApi; export const { raw } = api.clientApi; export const app: ClientApi['app'] = storybookApp; +export { activeStoryComponent } from './render'; diff --git a/app/vue3/src/client/preview/render.ts b/app/vue3/src/client/preview/render.ts index db46ddfaa966..a9d3b2020f47 100644 --- a/app/vue3/src/client/preview/render.ts +++ b/app/vue3/src/client/preview/render.ts @@ -1,10 +1,24 @@ import dedent from 'ts-dedent'; import { createApp, h, shallowRef, ComponentPublicInstance } from 'vue'; -import { RenderContext } from '@storybook/store'; +import type { RenderContext } from '@storybook/store'; +import type { ArgsStoryFn } from '@storybook/csf'; + import { StoryFnVueReturnType } from './types'; import { VueFramework } from './types-6-0'; -const activeStoryComponent = shallowRef(null); +export const render: ArgsStoryFn = (props, context) => { + const { id, component: Component } = context; + if (!Component) { + throw new Error( + `Unable to render story ${id} as the component annotation is missing from the default export` + ); + } + + // TODO remove this hack + return h(Component as Parameters[0], props); +}; + +export const activeStoryComponent = shallowRef(null); let root: ComponentPublicInstance | null = null; diff --git a/app/vue3/src/client/preview/types-6-0.ts b/app/vue3/src/client/preview/types-6-0.ts index 7fcddf3c8349..741a1e50fae3 100644 --- a/app/vue3/src/client/preview/types-6-0.ts +++ b/app/vue3/src/client/preview/types-6-0.ts @@ -1,6 +1,11 @@ -import { ConcreteComponent } from 'vue'; -import { Args, ComponentAnnotations, StoryAnnotations, AnnotatedStoryFn } from '@storybook/csf'; -import { StoryFnVueReturnType } from './types'; +import type { ConcreteComponent } from 'vue'; +import type { + Args, + ComponentAnnotations, + StoryAnnotations, + AnnotatedStoryFn, +} from '@storybook/csf'; +import type { StoryFnVueReturnType } from './types'; export type { Args, ArgTypes, Parameters, StoryContext } from '@storybook/csf'; diff --git a/app/vue3/src/client/preview/types-7-0.ts b/app/vue3/src/client/preview/types-7-0.ts index b88051446a9d..d897ad97a81a 100644 --- a/app/vue3/src/client/preview/types-7-0.ts +++ b/app/vue3/src/client/preview/types-7-0.ts @@ -1,4 +1,4 @@ -import { Args } from '@storybook/csf'; +import type { Args } from '@storybook/csf'; import type { StoryObj } from './types-6-0'; diff --git a/app/vue3/src/server/framework-preset-vue3-docs.ts b/app/vue3/src/server/framework-preset-vue3-docs.ts new file mode 100644 index 000000000000..b97af76f15ff --- /dev/null +++ b/app/vue3/src/server/framework-preset-vue3-docs.ts @@ -0,0 +1,37 @@ +import type { Options, StorybookConfig } from '@storybook/core-common'; +import { findDistEsm } from '@storybook/core-common'; +import { hasDocsOrControls } from '@storybook/docs-tools'; + +export function webpackFinal(webpackConfig: any = {}, options: Options) { + if (!hasDocsOrControls(options)) return webpackConfig; + + let vueDocgenOptions = {}; + + options.presetsList?.forEach((preset) => { + if (preset.name.includes('addon-docs') && preset.options.vueDocgenOptions) { + const appendableOptions = preset.options.vueDocgenOptions; + vueDocgenOptions = { + ...vueDocgenOptions, + ...appendableOptions, + }; + } + }); + + webpackConfig.module.rules.push({ + test: /\.vue$/, + loader: require.resolve('vue-docgen-loader', { paths: [require.resolve('@storybook/vue3')] }), + enforce: 'post', + options: { + docgenOptions: { + alias: webpackConfig.resolve.alias, + ...vueDocgenOptions, + }, + }, + }); + return webpackConfig; +} + +export const previewAnnotations: StorybookConfig['previewAnnotations'] = (entry = [], options) => { + if (!hasDocsOrControls(options)) return entry; + return [...entry, findDistEsm(__dirname, 'client/docs/config')]; +}; diff --git a/app/vue3/src/server/framework-preset-vue3.ts b/app/vue3/src/server/framework-preset-vue3.ts index 5061efe35be2..549ac4c02acd 100644 --- a/app/vue3/src/server/framework-preset-vue3.ts +++ b/app/vue3/src/server/framework-preset-vue3.ts @@ -1,5 +1,7 @@ import { VueLoaderPlugin } from 'vue-loader'; import { Configuration, DefinePlugin } from 'webpack'; +import { findDistEsm } from '@storybook/core-common'; +import type { StorybookConfig } from '@storybook/core-common'; export function webpack(config: Configuration): Configuration { return { @@ -22,7 +24,7 @@ export function webpack(config: Configuration): Configuration { options: {}, }, { - test: /\.tsx?$/, + test: /\.ts$/, use: [ { loader: require.resolve('ts-loader'), @@ -33,6 +35,19 @@ export function webpack(config: Configuration): Configuration { }, ], }, + { + test: /\.tsx$/, + use: [ + { + loader: require.resolve('ts-loader'), + options: { + transpileOnly: true, + // Note this is different from the `appendTsSuffixTo` above! + appendTsxSuffixTo: [/\.vue$/], + }, + }, + ], + }, ], }, resolve: { @@ -45,3 +60,7 @@ export function webpack(config: Configuration): Configuration { }, }; } + +export const previewAnnotations: StorybookConfig['previewAnnotations'] = (entry = []) => { + return [...entry, findDistEsm(__dirname, 'client/preview/config')]; +}; diff --git a/app/vue3/src/server/options.ts b/app/vue3/src/server/options.ts index 539771517c8a..ce5415ddde88 100644 --- a/app/vue3/src/server/options.ts +++ b/app/vue3/src/server/options.ts @@ -1,8 +1,8 @@ import { sync } from 'read-pkg-up'; -import { LoadOptions } from '@storybook/core-common'; +import type { LoadOptions } from '@storybook/core-common'; export default { packageJson: sync({ cwd: __dirname }).packageJson, framework: 'vue3', - frameworkPresets: [require.resolve('./framework-preset-vue3')], + frameworkPresets: [require.resolve('./preset')], } as LoadOptions; diff --git a/app/vue3/src/server/preset.ts b/app/vue3/src/server/preset.ts new file mode 100644 index 000000000000..16c9fbcfde38 --- /dev/null +++ b/app/vue3/src/server/preset.ts @@ -0,0 +1,6 @@ +import type { StorybookConfig } from '@storybook/core-common'; + +export const addons: StorybookConfig['addons'] = [ + require.resolve('./framework-preset-vue3'), + require.resolve('./framework-preset-vue3-docs'), +]; diff --git a/app/vue3/src/typings.d.ts b/app/vue3/src/typings.d.ts index 64a098b25475..4dd567187328 100644 --- a/app/vue3/src/typings.d.ts +++ b/app/vue3/src/typings.d.ts @@ -1,7 +1,5 @@ declare module 'global'; -// todo check for correct types -declare module 'webpack/lib/RuleSet'; declare module 'vue-loader' { - export const VueLoaderPlugin + export const VueLoaderPlugin: any } diff --git a/app/vue3/tsconfig.json b/app/vue3/tsconfig.json index 08bdb7764f76..5b0f285df93d 100644 --- a/app/vue3/tsconfig.json +++ b/app/vue3/tsconfig.json @@ -2,8 +2,12 @@ "extends": "../../tsconfig.json", "compilerOptions": { "rootDir": "./src", - "types": ["webpack-env", "node"], - "resolveJsonModule": true + "types": [ + "webpack-env", + "node" + ], + "resolveJsonModule": true, + "skipLibCheck": true }, "include": [ "src/**/*" @@ -11,4 +15,4 @@ "exclude": [ "src/**/*.test.*" ] -} +} \ No newline at end of file diff --git a/app/vue3/types-7-0.d.ts b/app/vue3/types-7-0.d.ts new file mode 100644 index 000000000000..a6080e072100 --- /dev/null +++ b/app/vue3/types-7-0.d.ts @@ -0,0 +1 @@ +export * from './dist/ts3.9/client/preview/types-7-0.d'; diff --git a/app/web-components/README.md b/app/web-components/README.md index 5de2c1130fcc..e07aad25f2bb 100644 --- a/app/web-components/README.md +++ b/app/web-components/README.md @@ -21,8 +21,8 @@ For more information visit: [storybook.js.org](https://storybook.js.org) --- -Storybook also comes with a lot of [addons](https://storybook.js.org/docs/web-components/configure/storybook-addons) and a great API to customize as you wish. -You can also build a [static version](https://storybook.js.org/docs/web-components/workflows/publish-storybook) of your storybook and deploy it anywhere you want. +Storybook also comes with a lot of [addons](https://storybook.js.org/addons) and a great API to customize as you wish. +You can also build a [static version](https://storybook.js.org/docs/web-components/sharing/publish-storybook) of your storybook and deploy it anywhere you want. # Hot Module Reloading (HMR) diff --git a/app/web-components/package.json b/app/web-components/package.json index 9e7f09174d5c..8ee26167c130 100644 --- a/app/web-components/package.json +++ b/app/web-components/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/web-components", - "version": "6.4.0-beta.10", + "version": "6.5.0-rc.1", "description": "Storybook for web-components: View web components snippets in isolation with Hot Reloading.", "keywords": [ "lit-html", @@ -50,13 +50,16 @@ "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/preset-env": "^7.12.11", - "@storybook/addons": "6.4.0-beta.10", - "@storybook/client-api": "6.4.0-beta.10", - "@storybook/core": "6.4.0-beta.10", - "@storybook/core-common": "6.4.0-beta.10", - "@storybook/csf": "0.0.2--canary.6aca495.0", - "@storybook/preview-web": "6.4.0-beta.10", - "@storybook/store": "6.4.0-beta.10", + "@storybook/addons": "6.5.0-rc.1", + "@storybook/client-api": "6.5.0-rc.1", + "@storybook/client-logger": "6.5.0-rc.1", + "@storybook/core": "6.5.0-rc.1", + "@storybook/core-common": "6.5.0-rc.1", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/docs-tools": "6.5.0-rc.1", + "@storybook/preview-web": "6.5.0-rc.1", + "@storybook/store": "6.5.0-rc.1", + "@types/node": "^14.14.20 || ^16.0.0", "@types/webpack-env": "^1.16.0", "babel-plugin-bundled-import-meta": "^0.3.1", "core-js": "^3.8.2", @@ -68,10 +71,10 @@ "ts-dedent": "^2.0.0" }, "devDependencies": { - "lit-html": "^2.0.0-rc.3" + "lit-html": "2.0.2" }, "peerDependencies": { - "lit-html": "^1.4.1 || ^2.0.0-rc.3" + "lit-html": "^1.4.1 || ^2.0.0" }, "engines": { "node": ">=10.13.0" @@ -79,6 +82,6 @@ "publishConfig": { "access": "public" }, - "gitHead": "9128cc184fa9771b332c1aabe85af6751dde890c", + "gitHead": "3f09d4e6b0c655a092dc812488ef2c7ed3808401", "sbmodern": "dist/modern/client/index.js" } diff --git a/app/web-components/preset.js b/app/web-components/preset.js index 20b417ae97b5..f09c6698e046 100644 --- a/app/web-components/preset.js +++ b/app/web-components/preset.js @@ -1,7 +1 @@ -function config(entry = []) { - return [...entry, require.resolve('./dist/esm/client/preview/config')]; -} - -module.exports = { - config, -}; +module.exports = require('./dist/cjs/server/preset'); diff --git a/addons/docs/src/frameworks/web-components/__testfixtures__/custom-elements.json b/app/web-components/src/client/docs/__testfixtures__/custom-elements.json similarity index 100% rename from addons/docs/src/frameworks/web-components/__testfixtures__/custom-elements.json rename to app/web-components/src/client/docs/__testfixtures__/custom-elements.json diff --git a/addons/docs/src/frameworks/web-components/__testfixtures__/lit-element-demo-card/custom-elements.snapshot b/app/web-components/src/client/docs/__testfixtures__/lit-element-demo-card/custom-elements.snapshot similarity index 100% rename from addons/docs/src/frameworks/web-components/__testfixtures__/lit-element-demo-card/custom-elements.snapshot rename to app/web-components/src/client/docs/__testfixtures__/lit-element-demo-card/custom-elements.snapshot diff --git a/addons/docs/src/frameworks/web-components/__testfixtures__/lit-element-demo-card/input.js b/app/web-components/src/client/docs/__testfixtures__/lit-element-demo-card/input.js similarity index 98% rename from addons/docs/src/frameworks/web-components/__testfixtures__/lit-element-demo-card/input.js rename to app/web-components/src/client/docs/__testfixtures__/lit-element-demo-card/input.js index 64f03ae29da0..8ac6852e9117 100644 --- a/addons/docs/src/frameworks/web-components/__testfixtures__/lit-element-demo-card/input.js +++ b/app/web-components/src/client/docs/__testfixtures__/lit-element-demo-card/input.js @@ -1,3 +1,4 @@ +/* eslint-disable import/no-unresolved */ import global from 'global'; import { LitElement, html, css } from 'lit-element'; diff --git a/addons/docs/src/frameworks/web-components/__testfixtures__/lit-element-demo-card/properties.snapshot b/app/web-components/src/client/docs/__testfixtures__/lit-element-demo-card/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/web-components/__testfixtures__/lit-element-demo-card/properties.snapshot rename to app/web-components/src/client/docs/__testfixtures__/lit-element-demo-card/properties.snapshot diff --git a/addons/docs/src/frameworks/web-components/__testfixtures__/lit-html-welcome/custom-elements.snapshot b/app/web-components/src/client/docs/__testfixtures__/lit-html-welcome/custom-elements.snapshot similarity index 100% rename from addons/docs/src/frameworks/web-components/__testfixtures__/lit-html-welcome/custom-elements.snapshot rename to app/web-components/src/client/docs/__testfixtures__/lit-html-welcome/custom-elements.snapshot diff --git a/addons/docs/src/frameworks/web-components/__testfixtures__/lit-html-welcome/input.js b/app/web-components/src/client/docs/__testfixtures__/lit-html-welcome/input.js similarity index 100% rename from addons/docs/src/frameworks/web-components/__testfixtures__/lit-html-welcome/input.js rename to app/web-components/src/client/docs/__testfixtures__/lit-html-welcome/input.js diff --git a/addons/docs/src/frameworks/web-components/__testfixtures__/lit-html-welcome/properties.snapshot b/app/web-components/src/client/docs/__testfixtures__/lit-html-welcome/properties.snapshot similarity index 100% rename from addons/docs/src/frameworks/web-components/__testfixtures__/lit-html-welcome/properties.snapshot rename to app/web-components/src/client/docs/__testfixtures__/lit-html-welcome/properties.snapshot diff --git a/app/web-components/src/client/docs/config.ts b/app/web-components/src/client/docs/config.ts new file mode 100644 index 000000000000..e0363ff66646 --- /dev/null +++ b/app/web-components/src/client/docs/config.ts @@ -0,0 +1,21 @@ +import { SourceType, enhanceArgTypes } from '@storybook/docs-tools'; +import { extractArgTypes, extractComponentDescription } from './custom-elements'; +import { sourceDecorator } from './sourceDecorator'; +import { prepareForInline } from './prepareForInline'; + +export const decorators = [sourceDecorator]; + +export const parameters = { + docs: { + extractArgTypes, + extractComponentDescription, + inlineStories: true, + prepareForInline, + source: { + type: SourceType.DYNAMIC, + language: 'html', + }, + }, +}; + +export const argTypesEnhancers = [enhanceArgTypes]; diff --git a/addons/docs/src/frameworks/web-components/custom-elements.test.ts b/app/web-components/src/client/docs/custom-elements.test.ts similarity index 100% rename from addons/docs/src/frameworks/web-components/custom-elements.test.ts rename to app/web-components/src/client/docs/custom-elements.test.ts diff --git a/addons/docs/src/frameworks/web-components/custom-elements.ts b/app/web-components/src/client/docs/custom-elements.ts similarity index 98% rename from addons/docs/src/frameworks/web-components/custom-elements.ts rename to app/web-components/src/client/docs/custom-elements.ts index 3c17aa7fd7d4..124f7a6978ee 100644 --- a/addons/docs/src/frameworks/web-components/custom-elements.ts +++ b/app/web-components/src/client/docs/custom-elements.ts @@ -1,6 +1,6 @@ -import { getCustomElements, isValidComponent, isValidMetaData } from '@storybook/web-components'; -import { ArgType, ArgTypes } from '@storybook/api'; +import type { ArgType, ArgTypes } from '@storybook/api'; import { logger } from '@storybook/client-logger'; +import { getCustomElements, isValidComponent, isValidMetaData } from '..'; interface TagItem { name: string; diff --git a/app/web-components/src/client/docs/prepareForInline.ts b/app/web-components/src/client/docs/prepareForInline.ts new file mode 100644 index 000000000000..b501854839ed --- /dev/null +++ b/app/web-components/src/client/docs/prepareForInline.ts @@ -0,0 +1,21 @@ +import type { PartialStoryFn } from '@storybook/csf'; +import React from 'react'; +import { render } from 'lit-html'; + +import { WebComponentsFramework } from '..'; + +export const prepareForInline = (storyFn: PartialStoryFn) => { + class Story extends React.Component { + wrapperRef = React.createRef(); + + componentDidMount(): void { + render(storyFn(), this.wrapperRef.current); + } + + render(): React.ReactElement { + return React.createElement('div', { ref: this.wrapperRef }); + } + } + + return React.createElement(Story) as unknown as React.CElement<{}, React.Component>; +}; diff --git a/app/web-components/src/client/docs/sourceDecorator.test.ts b/app/web-components/src/client/docs/sourceDecorator.test.ts new file mode 100644 index 000000000000..2612be374199 --- /dev/null +++ b/app/web-components/src/client/docs/sourceDecorator.test.ts @@ -0,0 +1,134 @@ +import { html } from 'lit-html'; +import { styleMap } from 'lit-html/directives/style-map'; +import { addons, useEffect } from '@storybook/addons'; +import { SNIPPET_RENDERED } from '@storybook/docs-tools'; +import type { StoryContext, WebComponentsFramework } from '..'; +import { sourceDecorator } from './sourceDecorator'; + +jest.mock('@storybook/addons'); +const mockedAddons = addons as jest.Mocked; +const mockedUseEffect = useEffect as jest.Mock; + +expect.addSnapshotSerializer({ + print: (val: any) => val, + test: (val) => typeof val === 'string', +}); + +const tick = () => new Promise((r) => setTimeout(r, 0)); + +const makeContext = ( + name: string, + parameters: any, + args: any, + extra?: Partial> +) => + ({ + id: `lit-test--${name}`, + kind: 'js-text', + name, + parameters, + args, + argTypes: {}, + globals: {}, + ...extra, + } as StoryContext); + +describe('sourceDecorator', () => { + let mockChannel: { on: jest.Mock; emit?: jest.Mock }; + beforeEach(() => { + mockedAddons.getChannel.mockReset(); + mockedUseEffect.mockImplementation((cb) => setTimeout(cb, 0)); + + mockChannel = { on: jest.fn(), emit: jest.fn() }; + mockedAddons.getChannel.mockReturnValue(mockChannel as any); + }); + + it('should render dynamically for args stories', async () => { + const storyFn = (args: any) => html`
args story
`; + const context = makeContext('args', { __isArgsStory: true }, {}); + sourceDecorator(storyFn, context); + await tick(); + expect(mockChannel.emit).toHaveBeenCalledWith( + SNIPPET_RENDERED, + 'lit-test--args', + '
args story
' + ); + }); + + it('should skip dynamic rendering for no-args stories', async () => { + const storyFn = () => html`
classic story
`; + const context = makeContext('classic', {}, {}); + sourceDecorator(storyFn, context); + await tick(); + expect(mockChannel.emit).not.toHaveBeenCalled(); + }); + + it('should use the originalStoryFn if excludeDecorators is set', async () => { + const storyFn = (args: any) => html`
args story
`; + const decoratedStoryFn = (args: any) => html` +
${storyFn(args)}
+ `; + const context = makeContext( + 'args', + { + __isArgsStory: true, + docs: { + source: { + excludeDecorators: true, + }, + }, + }, + {}, + { originalStoryFn: storyFn } + ); + sourceDecorator(decoratedStoryFn, context); + await tick(); + expect(mockChannel.emit).toHaveBeenCalledWith( + SNIPPET_RENDERED, + 'lit-test--args', + '
args story
' + ); + }); + + it('allows the snippet output to be modified by transformSource', async () => { + const storyFn = (args: any) => html`
args story
`; + const transformSource = (dom: string) => `

${dom}

`; + const docs = { transformSource }; + const context = makeContext('args', { __isArgsStory: true, docs }, {}); + sourceDecorator(storyFn, context); + await tick(); + expect(mockChannel.emit).toHaveBeenCalledWith( + SNIPPET_RENDERED, + 'lit-test--args', + '

args story

' + ); + }); + + it('provides the story context to transformSource', () => { + const storyFn = (args: any) => html`
args story
`; + const transformSource = jest.fn((x) => x); + const docs = { transformSource }; + const context = makeContext('args', { __isArgsStory: true, docs }, {}); + sourceDecorator(storyFn, context); + expect(transformSource).toHaveBeenCalledWith('
args story
', context); + }); + + it('should clean lit expression comments', async () => { + const storyFn = (args: any) => html`
${args.slot}
`; + const context = makeContext( + 'args', + { __isArgsStory: true }, + { slot: 'some content' }, + { originalStoryFn: storyFn } + ); + // bind args to storyFn, as it's done in Storybook + const boundStoryFn = storyFn.bind(null, context.args); + sourceDecorator(boundStoryFn, context); + await tick(); + expect(mockChannel.emit).toHaveBeenCalledWith( + SNIPPET_RENDERED, + 'lit-test--args', + '
some content
' + ); + }); +}); diff --git a/app/web-components/src/client/docs/sourceDecorator.ts b/app/web-components/src/client/docs/sourceDecorator.ts new file mode 100644 index 000000000000..0b4b01f25f85 --- /dev/null +++ b/app/web-components/src/client/docs/sourceDecorator.ts @@ -0,0 +1,57 @@ +/* global window */ +import { render } from 'lit-html'; +import type { ArgsStoryFn, PartialStoryFn, StoryContext } from '@storybook/csf'; +import { addons, useEffect } from '@storybook/addons'; +import { SNIPPET_RENDERED, SourceType } from '@storybook/docs-tools'; + +import type { WebComponentsFramework } from '..'; + +// Taken from https://github.com/lit/lit/blob/main/packages/lit-html/src/test/test-utils/strip-markers.ts +const LIT_EXPRESSION_COMMENTS = /|/g; + +function skipSourceRender(context: StoryContext) { + const sourceParams = context?.parameters.docs?.source; + const isArgsStory = context?.parameters.__isArgsStory; + + // always render if the user forces it + if (sourceParams?.type === SourceType.DYNAMIC) { + return false; + } + + // never render if the user is forcing the block to render code, or + // if the user provides code, or if it's not an args story. + return !isArgsStory || sourceParams?.code || sourceParams?.type === SourceType.CODE; +} + +function applyTransformSource( + source: string, + context: StoryContext +): string { + const { transformSource } = context.parameters.docs ?? {}; + if (typeof transformSource !== 'function') return source; + return transformSource(source, context); +} + +export function sourceDecorator( + storyFn: PartialStoryFn, + context: StoryContext +): WebComponentsFramework['storyResult'] { + const story = context?.parameters.docs?.source?.excludeDecorators + ? (context.originalStoryFn as ArgsStoryFn)(context.args, context) + : storyFn(); + + let source: string; + useEffect(() => { + if (source) addons.getChannel().emit(SNIPPET_RENDERED, context.id, source); + }); + if (!skipSourceRender(context)) { + const container = window.document.createElement('div'); + render(story, container); + source = applyTransformSource( + container.innerHTML.replace(LIT_EXPRESSION_COMMENTS, ''), + context + ); + } + + return story; +} diff --git a/addons/docs/src/frameworks/web-components/web-components-properties.test.ts b/app/web-components/src/client/docs/web-components-properties.test.ts similarity index 97% rename from addons/docs/src/frameworks/web-components/web-components-properties.test.ts rename to app/web-components/src/client/docs/web-components-properties.test.ts index b4881bac3302..722f8bdb3291 100644 --- a/addons/docs/src/frameworks/web-components/web-components-properties.test.ts +++ b/app/web-components/src/client/docs/web-components-properties.test.ts @@ -38,7 +38,6 @@ describe('web-components component properties', () => { const testDir = path.join(fixturesDir, testEntry.name); const testFile = fs.readdirSync(testDir).find((fileName) => inputRegExp.test(fileName)); if (testFile) { - // eslint-disable-next-line jest/valid-title it(testEntry.name, () => { const inputPath = path.join(testDir, testFile); diff --git a/app/web-components/src/client/preview/index.ts b/app/web-components/src/client/preview/index.ts index 44ba037d0f03..ef8fe1cc37e4 100644 --- a/app/web-components/src/client/preview/index.ts +++ b/app/web-components/src/client/preview/index.ts @@ -1,11 +1,11 @@ /* eslint-disable prefer-destructuring */ -import { start } from '@storybook/core/client'; -import { ClientStoryApi, Loadable } from '@storybook/addons'; +import { start } from '@storybook/core'; +import type { ClientStoryApi, Loadable } from '@storybook/addons'; import './globals'; import { renderToDOM } from './render'; -import { IStorybookSection } from './types'; -import { WebComponentsFramework } from './types-6-0'; +import type { IStorybookSection } from './types'; +import type { WebComponentsFramework } from './types-6-0'; const framework = 'web-components'; diff --git a/app/web-components/src/client/preview/types-6-0.ts b/app/web-components/src/client/preview/types-6-0.ts index c7e40e379cee..901b73c907b7 100644 --- a/app/web-components/src/client/preview/types-6-0.ts +++ b/app/web-components/src/client/preview/types-6-0.ts @@ -1,5 +1,10 @@ -import { Args, ComponentAnnotations, StoryAnnotations, AnnotatedStoryFn } from '@storybook/csf'; -import { StoryFnHtmlReturnType } from './types'; +import type { + Args, + ComponentAnnotations, + StoryAnnotations, + AnnotatedStoryFn, +} from '@storybook/csf'; +import type { StoryFnHtmlReturnType } from './types'; export type { Args, ArgTypes, Parameters, StoryContext } from '@storybook/csf'; diff --git a/app/web-components/src/client/preview/types-7-0.ts b/app/web-components/src/client/preview/types-7-0.ts index b88051446a9d..d897ad97a81a 100644 --- a/app/web-components/src/client/preview/types-7-0.ts +++ b/app/web-components/src/client/preview/types-7-0.ts @@ -1,4 +1,4 @@ -import { Args } from '@storybook/csf'; +import type { Args } from '@storybook/csf'; import type { StoryObj } from './types-6-0'; diff --git a/app/web-components/src/client/preview/types.ts b/app/web-components/src/client/preview/types.ts index 2a9e2564c6e5..04cbf9a47e62 100644 --- a/app/web-components/src/client/preview/types.ts +++ b/app/web-components/src/client/preview/types.ts @@ -1,4 +1,4 @@ -import { TemplateResult, SVGTemplateResult } from 'lit-html'; +import type { TemplateResult, SVGTemplateResult } from 'lit-html'; export type { RenderContext } from '@storybook/core'; export type { Args, ArgTypes, Parameters, StoryContext } from '@storybook/addons'; diff --git a/app/web-components/src/server/framework-preset-web-components-docs.ts b/app/web-components/src/server/framework-preset-web-components-docs.ts new file mode 100644 index 000000000000..31ccb922f3f1 --- /dev/null +++ b/app/web-components/src/server/framework-preset-web-components-docs.ts @@ -0,0 +1,7 @@ +import { findDistEsm, StorybookConfig } from '@storybook/core-common'; +import { hasDocsOrControls } from '@storybook/docs-tools'; + +export const previewAnnotations: StorybookConfig['previewAnnotations'] = (entry = [], options) => { + if (!hasDocsOrControls(options)) return entry; + return [...entry, findDistEsm(__dirname, 'client/docs/config')]; +}; diff --git a/app/web-components/src/server/framework-preset-web-components.ts b/app/web-components/src/server/framework-preset-web-components.ts index 6e17cad29f5a..19c537420947 100644 --- a/app/web-components/src/server/framework-preset-web-components.ts +++ b/app/web-components/src/server/framework-preset-web-components.ts @@ -1,6 +1,7 @@ -// eslint-disable-next-line import/no-extraneous-dependencies -import { Configuration } from 'webpack'; -import type { Options } from '@storybook/core-common'; +import { findDistEsm } from '@storybook/core-common'; + +import type { Options, StorybookConfig } from '@storybook/core-common'; +import type { Configuration } from 'webpack'; export function webpack(config: Configuration, options: Options) { const babelrcOptions = options.features?.babelModeV7 ? null : { babelrc: false }; @@ -39,3 +40,7 @@ export function webpack(config: Configuration, options: Options) { return config; } + +export const previewAnnotations: StorybookConfig['previewAnnotations'] = (entry = []) => { + return [...entry, findDistEsm(__dirname, 'client/preview/config')]; +}; diff --git a/app/web-components/src/server/options.ts b/app/web-components/src/server/options.ts index 0a63c8168cb1..b94cf9009d76 100644 --- a/app/web-components/src/server/options.ts +++ b/app/web-components/src/server/options.ts @@ -1,8 +1,8 @@ import { sync } from 'read-pkg-up'; -import { LoadOptions } from '@storybook/core-common'; +import type { LoadOptions } from '@storybook/core-common'; export default { packageJson: sync({ cwd: __dirname }).packageJson, framework: 'web-components', - frameworkPresets: [require.resolve('./framework-preset-web-components')], + frameworkPresets: [require.resolve('./preset')], } as LoadOptions; diff --git a/app/web-components/src/server/preset.ts b/app/web-components/src/server/preset.ts new file mode 100644 index 000000000000..2b8b5f434f7c --- /dev/null +++ b/app/web-components/src/server/preset.ts @@ -0,0 +1,6 @@ +import type { StorybookConfig } from '@storybook/core-common'; + +export const addons: StorybookConfig['addons'] = [ + require.resolve('./framework-preset-web-components'), + require.resolve('./framework-preset-web-components-docs'), +]; diff --git a/app/web-components/tsconfig.json b/app/web-components/tsconfig.json index 13f32ad63095..a7b3b6102f4c 100644 --- a/app/web-components/tsconfig.json +++ b/app/web-components/tsconfig.json @@ -5,5 +5,5 @@ "types": ["webpack-env", "node"] }, "include": ["src/**/*"], - "exclude": ["src/__tests__/**/*"] + "exclude": ["src/**/*.test.*", "src/__tests__/**/*"] } diff --git a/app/web-components/types-7-0.d.ts b/app/web-components/types-7-0.d.ts new file mode 100644 index 000000000000..a6080e072100 --- /dev/null +++ b/app/web-components/types-7-0.d.ts @@ -0,0 +1 @@ +export * from './dist/ts3.9/client/preview/types-7-0.d'; diff --git a/cypress.json b/cypress.json index f098c972a496..c9b8eebb70cb 100644 --- a/cypress.json +++ b/cypress.json @@ -1,5 +1,7 @@ { "defaultCommandTimeout": 20000, "requestTimeout": 20000, - "responseTimeout": 60000 + "responseTimeout": 60000, + "viewportHeight": 800, + "viewportWidth": 1280 } diff --git a/cypress/generated/addon-docs.spec.ts b/cypress/generated/addon-docs.spec.ts index e2eee13d28a4..0efffca5d2b5 100644 --- a/cypress/generated/addon-docs.spec.ts +++ b/cypress/generated/addon-docs.spec.ts @@ -1,6 +1,6 @@ import { skipOn } from '@cypress/skip-test'; -describe('addon-action', () => { +describe('addon-docs', () => { beforeEach(() => { cy.visitStorybook(); cy.navigateToStory('example-button', 'primary'); @@ -16,21 +16,23 @@ describe('addon-action', () => { }); skipOn('vue3', () => { - it('should provide source snippet', () => { - cy.getDocsElement() - .find('.docblock-code-toggle') - .first() - .should('contain.text', 'Show code') - // use force click so cypress does not automatically scroll, making the source block visible on this step - .click({ force: true }); + skipOn('html', () => { + it('should provide source snippet', () => { + cy.getDocsElement() + .find('.docblock-code-toggle') + .first() + .should('contain.text', 'Show code') + // use force click so cypress does not automatically scroll, making the source block visible on this step + .click({ force: true }); - cy.getDocsElement() - .find('pre.prismjs') - .first() - .should(($div) => { - const text = $div.text(); - expect(text).not.match(/^\(args\) => /); - }); + cy.getDocsElement() + .find('pre.prismjs') + .first() + .should(($div) => { + const text = $div.text(); + expect(text).not.match(/^\(args\) => /); + }); + }); }); }); }); diff --git a/cypress/generated/addon-interactions.spec.ts b/cypress/generated/addon-interactions.spec.ts new file mode 100644 index 000000000000..95d0b59c172d --- /dev/null +++ b/cypress/generated/addon-interactions.spec.ts @@ -0,0 +1,57 @@ +/* eslint-disable jest/no-identical-title */ +import { onlyOn } from '@cypress/skip-test'; + +describe('addon-interactions', () => { + before(() => { + cy.visitStorybook(); + }); + + const test = () => { + // click on the button + cy.navigateToStory('example-page', 'logged-in'); + + cy.viewAddonPanel('Interactions'); + + cy.getStoryElement().find('.welcome').should('contain.text', 'Welcome, Jane Doe!'); + + cy.get('#tabbutton-interactions').contains(/(1)/).should('be.visible'); + cy.get('#storybook-panel-root') + .contains(/userEvent.click/) + .should('be.visible'); + cy.get('[data-testid=icon-done]').should('be.visible'); + }; + + // Having multiple of onlyOn for the same test is a workaround instead + // of having to use skipOn a long list of frameworks + onlyOn('angular', () => { + it('should have interactions', test); + }); + + onlyOn('react', () => { + it('should have interactions', test); + }); + + onlyOn('vite_react', () => { + it('should have interactions', test); + }); + + onlyOn('preact', () => { + it('should have interactions', test); + }); + + onlyOn('html', () => { + it('should have interactions', test); + }); + + onlyOn('svelte', () => { + it('should have interactions', test); + }); + + onlyOn('vue3', () => { + it('should have interactions', test); + }); + + onlyOn('vue', () => { + it('should have interactions', test); + }); +}); diff --git a/cypress/generated/basic.spec.ts b/cypress/generated/basic.spec.ts index efb67e23f8a2..589762497a2f 100644 --- a/cypress/generated/basic.spec.ts +++ b/cypress/generated/basic.spec.ts @@ -58,13 +58,6 @@ describe('Basic CLI', () => { }); describe('Page story', () => { - it('should load and display logged in', () => { - cy.navigateToStory('example-page', 'logged-in'); - cy.getStoryElement().find('header').should('contain.text', 'Acme'); - cy.getStoryElement().find('button').should('contain.text', 'Log out'); - cy.getStoryElement().should('contain.text', 'Pages in Storybook'); - }); - it('should load and display logged out', () => { cy.navigateToStory('example-page', 'logged-out'); cy.getStoryElement().should('contain.text', 'Acme'); @@ -72,5 +65,12 @@ describe('Basic CLI', () => { cy.getStoryElement().find('button').last().should('contain.text', 'Sign up'); cy.getStoryElement().should('contain.text', 'Pages in Storybook'); }); + + it('should load and display logged in', () => { + cy.navigateToStory('example-page', 'logged-in'); + cy.getStoryElement().find('header').should('contain.text', 'Acme'); + cy.getStoryElement().find('button').should('contain.text', 'Log out'); + cy.getStoryElement().should('contain.text', 'Pages in Storybook'); + }); }); }); diff --git a/cypress/helper.ts b/cypress/helper.ts index d886439d90b0..f1dc95a29344 100644 --- a/cypress/helper.ts +++ b/cypress/helper.ts @@ -11,22 +11,19 @@ const getUrl = (route: string) => { }; export const visit = (route = '') => { - return cy - .clearLocalStorage() - .visit(getUrl(route)) - .get(`#storybook-preview-iframe`) - .then({ timeout: 15000 }, (iframe) => { - return cy.wrap(iframe, { timeout: 10000 }).should(() => { - const content: Document | null = (iframe[0] as HTMLIFrameElement).contentDocument; - const element: HTMLElement | null = content !== null ? content.documentElement : null; + cy.clearLocalStorage().visit(getUrl(route)); + return cy.get(`#storybook-preview-iframe`).then({ timeout: 15000 }, (iframe) => { + return cy.wrap(iframe, { timeout: 10000 }).should(() => { + const content: Document | null = (iframe[0] as HTMLIFrameElement).contentDocument; + const element: HTMLElement | null = content !== null ? content.documentElement : null; - expect(element).not.null; + expect(element).not.null; - if (element !== null) { - expect(element.querySelector('#root > *')).not.null; - } - }); + if (element !== null) { + expect(element.querySelector('#root > *')).not.null; + } }); + }); }; export const clickAddon = (addonName: Addons) => { diff --git a/cypress/integration/addon-links.spec.ts b/cypress/integration/addon-links.spec.ts new file mode 100644 index 000000000000..aa8c4235c003 --- /dev/null +++ b/cypress/integration/addon-links.spec.ts @@ -0,0 +1,17 @@ +import { visit } from '../helper'; + +describe('addon-links', () => { + before(() => { + visit('official-storybook?path=/story/addons-links-button--first'); + }); + + it('should navigate on link', () => { + cy.getStoryElement().find('button').should('contain.text', 'Go to "Second"').click(); + + cy.url().should('include', 'path=/story/addons-links-button--second'); + + cy.getStoryElement().find('button').should('contain.text', 'Go to "First"').click(); + + cy.url().should('include', 'path=/story/addons-links-button--first'); + }); +}); diff --git a/cypress/integration/navigation.spec.ts b/cypress/integration/navigation.spec.ts index 629fa3b4eabb..120d4e978918 100644 --- a/cypress/integration/navigation.spec.ts +++ b/cypress/integration/navigation.spec.ts @@ -6,7 +6,9 @@ describe('Navigation', () => { }); it('should search navigation item', () => { - cy.get('#storybook-explorer-searchfield').click().clear().type('syntax'); + cy.get('#storybook-explorer-searchfield').click({ force: true }); + cy.get('#storybook-explorer-searchfield').clear(); + cy.get('#storybook-explorer-searchfield').type('syntax'); cy.get('#storybook-explorer-menu button') .should('contain', 'SyntaxHighlighter') @@ -14,7 +16,9 @@ describe('Navigation', () => { }); it('should display no results after searching a non-existing navigation item', () => { - cy.get('#storybook-explorer-searchfield').click().clear().type('zzzzzzzzzz'); + cy.get('#storybook-explorer-searchfield').click({ force: true }); + cy.get('#storybook-explorer-searchfield').clear(); + cy.get('#storybook-explorer-searchfield').type('zzzzzzzzzz'); cy.get('#storybook-explorer-menu button').should('be.hidden'); }); @@ -24,7 +28,7 @@ describe('Routing', () => { it('should navigate to story addons-a11y-basebutton--default', () => { visit('official-storybook'); - cy.get('#addons-a11y-basebutton--label').click(); + cy.get('#addons-a11y-basebutton--label').click({ force: true }); cy.url().should('include', 'path=/story/addons-a11y-basebutton--label'); }); diff --git a/cypress/support/commands.js b/cypress/support/commands.js index aab52aa129db..d5e6e32cadfb 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -97,13 +97,24 @@ Cypress.Commands.add('navigateToStory', (kind, name) => { const storyLinkId = `#${kindId}--${storyId}`; cy.log(`navigateToStory ${kind} ${name}`); + // docs-only stories if (name !== 'page') { // Section might be collapsed - cy.get(`#${kindId}`).then(($item) => { - if ($item.attr('aria-expanded') === 'false') $item.click(); + cy.get(`#${kindId}`).then(async ($item) => { + if ($item.attr('aria-expanded') === 'false') { + await $item.click(); + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(300); + } }); } - cy.get(storyLinkId).click(); + + cy.get(storyLinkId).click({ force: true }); + + // FIXME: Find a way to not wait like this but check for an element in the UI + // A pause is good when switching stories + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(300); // assert url changes cy.url().should('include', `path=/story/${kindId}--${storyId}`); diff --git a/cypress/support/index.js b/cypress/support/index.js index 37a498fb5bf3..6aea86aa3f62 100644 --- a/cypress/support/index.js +++ b/cypress/support/index.js @@ -16,5 +16,13 @@ // Import commands.js using ES2015 syntax: import './commands'; +// Turn off all uncaught exception handling +// https://docs.cypress.io/guides/references/migration-guide#Uncaught-exception-and-unhandled-rejections +Cypress.on('uncaught:exception', (err, runnable) => { + // returning false here prevents Cypress from + // failing the test + return false; +}); + // Alternatively you can use CommonJS syntax: // require('./commands') diff --git a/cypress/tsconfig.json b/cypress/tsconfig.json index cae4f81611a5..55293e4eb488 100644 --- a/cypress/tsconfig.json +++ b/cypress/tsconfig.json @@ -3,9 +3,17 @@ "strict": true, "baseUrl": "../node_modules", "target": "es5", - "lib": ["es2017", "dom"], - "types": ["cypress", "node"], + "lib": [ + "es2017", + "dom" + ], + "types": [ + "cypress", + "node" + ], "esModuleInterop": true }, - "include": ["**/*.ts"] -} + "include": [ + "**/*.ts" + ] +} \ No newline at end of file diff --git a/docs/addons/addon-catalog.md b/docs/addons/addon-catalog.md index 3252ccda2f3f..372d9ce7dbbc 100644 --- a/docs/addons/addon-catalog.md +++ b/docs/addons/addon-catalog.md @@ -2,9 +2,9 @@ title: 'Add to the addon catalog' --- -Storybook addons are listed in the [catalog](/addons) and distributed via npm. The catalog is populated by querying npm's registry for Storybook-specific metadata in `package.json`. +Storybook addons are listed in the [catalog](https://storybook.js.org/addons/) and distributed via npm. The catalog is populated by querying npm's registry for Storybook-specific metadata in `package.json`. -Add your addon to the catalog by publishing an npm package that follows these requirements: +Add your addon to the catalog by publishing a npm package that follows these requirements: - `package.json` with [module information](./writing-addons.md#get-started) and [addon metadata](#addon-metadata) - `README.md` file with installation and configuration instructions @@ -38,18 +38,22 @@ Customize your addon's appearance by adding the `storybook` property with the fo | `unsupportedFrameworks` | List of unsupported frameworks | `["vue"]` | | `supportedFrameworks` | List of supported frameworks | `["react", "angular"]` | +Use the list below as a reference when filling in the values for both the `supportedFrameworks` and `unsupportedFrameworks` fields. -Use the table below as a reference when filling in the values for both the `supportedFrameworks` and `unsupportedFrameworks` metadata properties. - -| react | vue | angular | -|----------------|------------|--------------| -| web-components | ember | html | -| mithril | marko | svelte | -| riot | preact | rax | -| aurelia | marionette | react-native | +- react +- vue +- angular +- web-components +- ember +- html +- svelte +- preact +- aurelia +- marionette +- react-native
-Note: Make sure to copy each item exactly as listed so that we can properly index your addon in our catalog. +💡 Make sure to copy each item exactly as listed so that we can properly index your addon in our catalog.
```json @@ -67,8 +71,8 @@ Note: Make sure to copy each item exactly as listed so that we "keywords": ["storybook-addons", "style", "debug", "layout", "css"], "storybook": { "displayName": "Outline", - "unsupportedFrameworks": ["Vue"], - "supportedFrameworks": ["React", "Angular"], + "unsupportedFrameworks": ["vue"], + "supportedFrameworks": ["react", "angular"], "icon": "https://yoursite.com/outline-icon.png" } } diff --git a/docs/addons/addon-knowledge-base.md b/docs/addons/addon-knowledge-base.md index fd4ff6e0a9b6..2e174ca405fd 100644 --- a/docs/addons/addon-knowledge-base.md +++ b/docs/addons/addon-knowledge-base.md @@ -2,7 +2,7 @@ title: Addon knowledge base --- -Once you understand the basics of writing addons, there are a variety of common enhancements to make your addon better. This page details additional information about addon creation. Use it as a quick reference guide when creating your own addons. +Once you understand the basics of writing addons, there are a variety of common enhancements to make your addon better. This page details additional information about addon creation. Use it as a quick reference guide when creating your own addons. ### Disable the addon panel @@ -34,25 +34,23 @@ Then when adding a story, you can pass a disabled parameter. ### Style your addon -Storybook uses [Emotion](https://emotion.sh/docs/introduction) for styling. Alongside with a theme which you can customize! +Storybook uses [Emotion](https://emotion.sh/docs/introduction) for styling. Alongside with a theme that you can customize! -We recommend you also to use Emotion to style your addon’s UI components. That allows you to use the active Storybook theme to deliver a seamless developer experience. -If you don’t want to use Emotion, you can use inline styles or another css-in-js lib. You can receive the theme as a prop by using the `withTheme` hoc from Emotion. [Read more about theming](../configure/theming.md). +We recommend using Emotion to style your addon’s UI components. That allows you to use the active Storybook theme to deliver a seamless developer experience. +If you don’t want to use Emotion, you can use inline styles or another css-in-js lib. You can receive the theme as a prop by using Emotion's `withTheme` HOC. [Read more about theming](../configure/theming.md). ### Storybook components -Addon authors can develop their UIs using any React library. But we recommend using Storybook’s own UI components in `@storybook/components` to build addons faster. When you use Storybook components you get: +Addon authors can develop their UIs using any React library. But we recommend using Storybook’s UI components in `@storybook/components` to build addons faster. When you use Storybook components, you get: - Battle-tested off-the-shelf components - Storybook native look and feel - Built-in support for Storybook theming - -Use the components listed below with your next addon. - +Use the components listed below with your next addon. | Component | Source | Story | -|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------| +| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | | Action Bar | [See component implementation](https://github.com/storybookjs/storybook/blob/master/lib/components/src/ActionBar/ActionBar.tsx) | [See component story](https://5a375b97f4b14f0020b0cda3-wbeulgbetj.chromatic.com/?path=/story/basics-actionbar--single-item) | | Addon Panel | [See component implementation](https://github.com/storybookjs/storybook/blob/master/lib/components/src/addon-panel/addon-panel.tsx) | N/A | | Badge | [See component implementation](https://github.com/storybookjs/storybook/blob/master/lib/components/src/Badge/Badge.tsx) | [See component story](https://5a375b97f4b14f0020b0cda3-wbeulgbetj.chromatic.com/?path=/story/basics-badge--all-badges) | @@ -68,15 +66,13 @@ Use the components listed below with your next addon. | ToolTip | [See component implementation](https://github.com/storybookjs/storybook/blob/master/lib/components/src/tooltip/Tooltip.tsx) | [See component story](https://5a375b97f4b14f0020b0cda3-wbeulgbetj.chromatic.com/?path=/story/basics-tooltip-tooltip--basic-default) | | Zoom | [See component implementation](https://github.com/storybookjs/storybook/blob/master/lib/components/src/Zoom/Zoom.tsx) | [See component story](https://5a375b97f4b14f0020b0cda3-wbeulgbetj.chromatic.com/?path=/story/basics-zoom--element-actual-size) | - -Complementing the components, also included is a set of UI primitives. Use the content listed below as reference for styling your addon. +Complementing the components, also included is a set of UI primitives. Use the content listed below as a reference for styling your addon. | Component | Source | Story | -|---------------------------------|--------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------| -| Color Pallette (see note below) | [See implementation](https://github.com/storybookjs/storybook/tree/master/lib/components/src/Colors) | [See story](https://5a375b97f4b14f0020b0cda3-wbeulgbetj.chromatic.com/?path=/story/basics-colorpalette--page) | +| ------------------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------- | +| Color Palette (see note below) | [See implementation](https://github.com/storybookjs/storybook/tree/master/lib/components/src/Colors) | [See story](https://5a375b97f4b14f0020b0cda3-wbeulgbetj.chromatic.com/?path=/story/basics-colorpalette--page) | | Icon | [See implementation](https://github.com/storybookjs/storybook/blob/master/lib/components/src/icon/icons.tsx) | [See story](https://5a375b97f4b14f0020b0cda3-wbeulgbetj.chromatic.com/?path=/story/basics-icon--labels) | -| Typography | [See implementation](https://github.com/storybookjs/storybook/tree/master/lib/components/src/typography) | [See story](https://5a375b97f4b14f0020b0cda3-wbeulgbetj.chromatic.com/?path=/story/basics-typography--all) | - +| Typography | [See implementation](https://github.com/storybookjs/storybook/tree/master/lib/components/src/typography) | [See story](https://5a375b97f4b14f0020b0cda3-wbeulgbetj.chromatic.com/?path=/story/basics-typography--all) |
The color palette implemented by @storybook/components is a high-level abstraction of the @storybook/theming package. @@ -84,7 +80,7 @@ The color palette implemented by @storybook/components is a high-le ### Build system -When you're developing your addon as a package, you can’t use `npm link` to add it to your project. List your addon as a local dependency into your package.json: +When you're developing your addon as a package, you can’t use `npm link` to add it to your project. List your addon as a local dependency into your package.json: ```json { @@ -100,22 +96,38 @@ Run either yarn or npm install to install the addon. ### Hot module replacement -While developing your addon you can configure HMR (hot module replacement) to reflect the changes made. +While developing your addon, you can configure HMR (hot module replacement) to reflect the changes made. -#### Standalone Storybook addons +### Standalone Storybook addons -If you're developing a standalone addon, add a new script to `package.json` with the following: +If you're developing a standalone addon, add a new script to `package.json` with the following: ```json { - "scripts":{ - "start": "npm run build -- --watch", + "scripts": { + "start": "npm run build -- --watch" } } ``` #### Local Storybook addons -If you're developing a local Storybook addon that is built on top of an existing Storybook installation HMR (hot module replacement) is available out of the box. +If you're developing a local Storybook addon built on top of an existing Storybook installation, HMR (hot module replacement) is available out of the box. + +If you don't see the changes being reflected, add the flag `--no-manager-cache` to the `storybook` script and restart Storybook. + +### Composing addons in presets + +If you're working on a preset that loads third-party addons, which you don't have control over, and you need access to certain features (e.g., decorators) or provide additional configurations. In that case, you'll need to update your preset to the following to allow you to load and configure the other addons: + + + + + + -If you don't see the changes being reflected, add the flag `--no-manager-cache` to the `storybook` script and restart Storybook. \ No newline at end of file +If you have control over the addons you want to customize. In that case, you can update your preset and implement a custom function to load any additional presets and provide the necessary configuration, similar to how it's implemented in the [Essentials](../../addons/essentials/src/index.ts) addon. \ No newline at end of file diff --git a/docs/addons/addon-types.md b/docs/addons/addon-types.md index e7bf0a799010..2a5940bcdca2 100644 --- a/docs/addons/addon-types.md +++ b/docs/addons/addon-types.md @@ -47,7 +47,7 @@ Use this boilerplate code to add a new `button` to Storybook's Toolbar:
-The icon element used in the example loads the icons from the @storybook/components package. See [here](../workflows/faq.md#what-icons-are-available-for-my-toolbar-or-my-addon) for the list of available icons that you can use. +The icon element used in the example loads the icons from the @storybook/components package. See [here](../faq.md#what-icons-are-available-for-my-toolbar-or-my-addon) for the list of available icons that you can use.
diff --git a/docs/addons/addons-api.md b/docs/addons/addons-api.md index cdb4db144ea7..5c0e5b2a6463 100644 --- a/docs/addons/addons-api.md +++ b/docs/addons/addons-api.md @@ -18,7 +18,7 @@ This is the core addon API. This is how to get the addon API: ### addons.getChannel() -Get an instance to the channel where you can communicate with the manager and the preview. You can find this in both the addon register code and your addon’s wrapper component (where used inside a story). +Get an instance to the channel to communicate with the manager and the preview. You can find this in both the addon register code and your addon’s wrapper component (where used inside a story). It has a NodeJS [EventEmitter](https://nodejs.org/api/events.html) compatible API. So, you can use it to emit events and listen for events. @@ -54,11 +54,9 @@ See how you can use this method: -The render function is called with `active` and `key`. +The render function is called with `active` and `key`. The `active` value will be true when the panel is focused on the UI. -When the panel is in focus in the UI, the `active` will be true. - -As you can see, you can set any React Component as the panel. Currently, it's one line of text. But you can do anything you want. +As you can see, you can set any React Component as the panel. Currently, it's one line of text. But you can do anything you want. It's a good practice to specify the panel title with the `title` key. You can use any plain text with it. ## makeDecorator API @@ -85,7 +83,7 @@ The options to `makeDecorator` are:
-💡 Note:If the story's parameters include `{ foo: { disable: true } }` (where `foo` is the `parameterName` of your addon), your decorator will not be called. +💡 If the story's parameters include `{ foo: { disable: true } }` (where `foo` is the `parameterName` of your addon), your decorator will not be called.
@@ -140,7 +138,7 @@ Details on the Storybook API are further down. -Allows for both setting subscriptions to events and getting the emitter for emitting custom events unto the channel. +Allows both setting subscriptions to events and getting the emitter for emitting custom events to the channel. The messages can be listened to on both the iframe and the manager side. @@ -158,11 +156,11 @@ The messages can be listened to on both the iframe and the manager side. Extremely useful for addons that need to persist in some form of state. -Storybook may unmount your addon component, and so keeping local state might not work well. +Storybook may unmount your addon component, so keeping local state might not work well. -Also, some addons consist of multiple parts, some parts being in a panel, some in the toolbar, etc. +Also, some addons consist of multiple parts, some parts in a panel, some in the toolbar, etc. -With this hook, addons can get access to the same portion of the state, persisted even if the components are unmounted. +With this hook, addons can access the same portion of the state, persisted even if the components are unmounted. ### useParameter @@ -198,7 +196,6 @@ It allows you to retrieve and update any Storybook Globals you want. If you use this hook, remember that your component will render a lot, and you may need to optimize for that using [`React.memo`](https://reactjs.org/docs/react-api.html#reactmemo) or [`useMemo`](https://reactjs.org/docs/hooks-reference.html#usememo) or [`useCallback`](https://reactjs.org/docs/hooks-reference.html#usecallback). - ### useArgs @@ -211,13 +208,13 @@ If you use this hook, remember that your component will render a lot, and you ma -A handy Storybook hook that you can use in your addon if you need to read or update [`args`](../writing-stories/args.md). +You can use this handy Storybook hook in your addon if you need to read or update [`args`](../writing-stories/args.md). --- ## Storybook API -Storybook API allows you to access different functionalities of Storybook UI. You can move an instance to the Storybook API when you register an addon. +Storybook API allows you to access different functionalities of Storybook UI. You can move an instance to the Storybook API when registering an addon. Let's have a look at API methods. @@ -286,7 +283,7 @@ This method allows you to set query string parameters. You can use that as tempo
-💡 Note: If you need to remove a query param, use `null` for that. For example, let's say we need to remove the `bbc` query param. See below how to do it: +💡 If you need to remove a query param, use `null` for that. For example, we need to remove the `bbc` query param. See below how to do it:
@@ -302,7 +299,7 @@ This method allows you to set query string parameters. You can use that as tempo ### api.getQueryParam() -This method allows you to get a query param set by the above API `setQueryParams`. For example, let's say we need to get the `bbc` query param. Then this how we do it: +This method allows you to get a query param set by the above API `setQueryParams`. For example, we need to get the `bbc` query param. Then this is how we do it: @@ -340,4 +337,48 @@ This method allows you to register a handler function called whenever the user n ]} /> - \ No newline at end of file + + +### addons.setConfig(config) + +This method allows you to override the default Storybook UI configuration (e.g., set up a [theme](../configure/theming.md) or hide UI elements): + + + + + + + +The following table details how to use the API values: + +| Name | Type | Description | Example Value | +| ------------------- | :-----------: | :------------------------------------------------: | :-----------------------------------: | +| **isFullscreen** | Boolean | Show story component as full screen | `false` | +| **showNav** | Boolean | Display panel that shows a list of stories | `true` | +| **showPanel** | Boolean | Display panel that shows addon configurations | `true` | +| **panelPosition** | String/Object | Where to show the addon panel | `bottom` or `right` | +| **enableShortcuts** | Boolean | Enable/disable shortcuts | `true` | +| **showToolbar** | Boolean | Show/hide tool bar | `true` | +| **theme** | Object | Storybook Theme, see next section | `undefined` | +| **selectedPanel** | String | Id to select an addon panel | `storybook/actions/panel` | +| **initialActive** | String | Select the default active tab on Mobile | `sidebar` or `canvas` or `addons` | +| **sidebar** | Object | Sidebar options, see below | `{ showRoots: false }` | +| **toolbar** | Object | Modify the tools in the toolbar using the addon id | `{ fullscreen: { hidden: false } } }` | + +The following options are configurable under the `sidebar` namespace: + +| Name | Type | Description | Example Value | +| ------------------ | :------: | :-----------------------------------------------------------: | :----------------------------------------------: | +| **showRoots** | Boolean | Display the top-level nodes as a "root" in the sidebar | `false` | +| **collapsedRoots** | Array | Set of root node IDs to visually collapse by default | `['misc', 'other']` | +| **renderLabel** | Function | Create a custom label for tree nodes; must return a ReactNode | `(item) => {item.name}` | + +The following options are configurable under the `toolbar` namespace: + +| Name | Type | Description | Example Value | +| ------ | :----: | :--------------------------------: | :-----------------: | +| **id** | String | Toggle visibility for toolbar item | `{ hidden: false }` | \ No newline at end of file diff --git a/docs/addons/configure-addons.md b/docs/addons/configure-addons.md index fcf6dd3263be..d68f9c40d997 100644 --- a/docs/addons/configure-addons.md +++ b/docs/addons/configure-addons.md @@ -10,9 +10,9 @@ Presets offload the burden of configuration from user to the addon. Preset optio For example, many libraries require that the app be wrapped by a `Provider` which _provides_ data to components down the tree. Presets can describe behavior like adding wrappers automatically, without users having to do any manual configuration. If a user installs an addon that has Presets, the addon can instruct Storybook to wrap all stories in `Provider`. This allows folks to start using your library with Storybook, with just 1 line of config! -For more on presets, see: [Write a preset addon](./writing-presets) +For more on presets, see: [Write a preset addon](./writing-presets.md) -The mechanism for wrapping each story is referred to as a Storybook [decorator](../writing-stories/decorators). They allow you to augment stories with extra rendering functionality or by providing data. +The mechanism for wrapping each story is referred to as a Storybook [decorator](../writing-stories/decorators.md). They allow you to augment stories with extra rendering functionality or by providing data. ## Parameters @@ -20,7 +20,7 @@ Parameters are available in the browser and are great for configuring addon beha For example, the [Pseudo States addon](https://storybook.js.org/addons/storybook-addon-pseudo-states) uses parameters to enable the various pseudo-states. Users can provide global defaults and then override them at the story level. -Use the [`useParameter`](./addons-api#useparameter) hook to access the parameter values within your addon. +Use the [`useParameter`](./addons-api.md#useparameter) hook to access the parameter values within your addon. ```js export const Hover = () => ; @@ -33,6 +33,6 @@ Channels enable two-way communication between the manager and the preview pane, For example, the [Actions addon](https://storybook.js.org/addons/@storybook/addon-actions) captures user events and displays their data in a panel. -Use the [`useChannel`](./addons-api#usechannel) hook to access the channel data within your addon. +Use the [`useChannel`](./addons-api.md#usechannel) hook to access the channel data within your addon. For a complete example, check out [storybookjs/addon-kit/withRoundTrip.ts](https://github.com/storybookjs/addon-kit/blob/main/src/withRoundTrip.ts) diff --git a/docs/addons/install-addons.md b/docs/addons/install-addons.md index 5d52d4e38491..c12482c7a1d2 100644 --- a/docs/addons/install-addons.md +++ b/docs/addons/install-addons.md @@ -2,7 +2,7 @@ title: Install addons --- -Storybook has [hundreds of reusable addons](/addons) that are packaged as NPM modules. Let's walk through how to extend Storybook by installing and registering addons. +Storybook has [hundreds of reusable addons](https://storybook.js.org/addons) that are packaged as NPM modules. Let's walk through how to extend Storybook by installing and registering addons. ### Using addons @@ -40,9 +40,20 @@ Storybook preset addons are grouped collections of specific `babel`,`webpack` an For example, to use SCSS styling, run the following command to install the addon and the required dependencies: -```sh -yarn add -D @storybook/preset-scss css-loader sass sass-loader style-loader -``` + + + + + + +
+ 💡 Tip: Use the Webpack 5 snippet only if your framework already includes support for this version. Otherwise, use the Webpack 4 snippet. +
Next, update [`.storybook/main.js`](../configure/overview.md#configure-story-rendering) to the following: @@ -81,4 +92,4 @@ Consider the following example: Preset addons may also have addon-specific configuration. Read their respective READMEs.
-Now, when Storybook starts up, it will update webpack's CSS loader to use modules and adjust how styling is defined. +Now, when Storybook starts up, it will update webpack's CSS loader to use modules and adjust how styling is defined. \ No newline at end of file diff --git a/docs/addons/introduction.md b/docs/addons/introduction.md index f043fc24299c..7558e16786b4 100644 --- a/docs/addons/introduction.md +++ b/docs/addons/introduction.md @@ -5,7 +5,7 @@ title: 'Introduction to addons' Addons extend Storybook with features and integrations that are not built into the core. Most Storybook features are implemented as addons. For instance: [documentation](../writing-docs/introduction.md), [accessibility testing](https://github.com/storybookjs/storybook/tree/master/addons/a11y), [interactive controls](../essentials/controls.md), among others. The [addon API](./addons-api.md) makes it easy for you to configure and customize Storybook in new ways. There are countless addons made by the community that unlock time-saving workflows. -Browse our [addon catalog](/addons) to install an existing addon or as inspiration for your own addon. +Browse our [addon catalog](https://storybook.js.org/addons) to install an existing addon or as inspiration for your own addon. ## Storybook basics @@ -22,7 +22,7 @@ The **Preview** area is an `iframe` where your stories are rendered. ![Storybook detailed window](./manager-preview.jpg) -Because both elements run in their own separate `iframes`, they use a communication channel to keep in synch. For example when you select a story in the Manager a event is dispatched across the channel notifying the Preview to render the story. +Because both elements run in their own separate `iframes`, they use a communication channel to keep in sync. For example when you select a story in the Manager an event is dispatched across the channel notifying the Preview to render the story. ## Anatomy of an addon @@ -32,10 +32,10 @@ Storybook addons allow you to extend what's already possible with Storybook, eve [UI-based addons](./addon-types.md#ui-based-addons) focus on customizing Storybook's user interface to extend your development workflow. Examples of UI-based addons include: [Controls](../essentials/controls.md), [Docs](../writing-docs/introduction.md) and [Accessibility](https://github.com/storybookjs/storybook/tree/master/addons/a11y). -[Learn how to write an addon »](./writing-addons) +[Learn how to write an addon »](./writing-addons.md) ### Preset addons [Preset addons](./addon-types.md#preset-addons) help you integrate Storybook with other technologies and libraries. Examples of preset addons are: [preset-scss](https://github.com/storybookjs/presets/tree/master/packages/preset-scss) and [preset-create-react-app](https://github.com/storybookjs/presets/tree/master/packages/preset-create-react-app). -[Learn how to write a preset addon »](./writing-presets) +[Learn how to write a preset addon »](./writing-presets.md) diff --git a/docs/addons/writing-addons.md b/docs/addons/writing-addons.md index 573f0d1c49f4..6245585bda3d 100644 --- a/docs/addons/writing-addons.md +++ b/docs/addons/writing-addons.md @@ -50,14 +50,23 @@ Once you've gone through the prompts, your `package.json` should look like: ### Build system -We'll need to add the necessary dependencies and make some adjustments. Run the following commands: +We'll need to add the necessary dependencies and make some adjustments. Run the following command to install the required dependencies: -```shell -# Installs React and Babel CLI -yarn add react react-dom @babel/cli + -# Adds Storybook: -npx sb init + + + + +Initialize a local Storybook instance to allow you to test your addon. + +```shell +npx storybook init ```
@@ -187,6 +196,7 @@ When Storybook was initialized, it provided a small set of example stories. Chan @@ -46,7 +46,7 @@ For example, Storybook's Mihtril support uses plugins internally and here's how ### Webpack -The webpack functions `webpack`, `webpackFinal`, and `managerWebpack` configure webpack. +The Webpack functions `webpack`, `webpackFinal`, and `managerWebpack` configure Webpack. All functions take a [webpack4 configuration object](https://webpack.js.org/configuration/). @@ -62,27 +62,26 @@ For example, here is how Storybook automatically adopts `create-react-app`'s con -- `webpack` is applied to the preview config after it has been initialized by storybook +- `webpack` is applied to the preview config after it has been initialized by Storybook - `webpackFinal` is applied to the preview config after all user presets have been applied - `managerWebpack` is applied to the manager config -As of Storybook 6.3, Storybook can run with either `webpack4` or `webpack5` builder. If your addon needs to know which version of Webpack it's running inside, the version and the actual webpack instance itself are both available inside your preset: +As of Storybook 6.3, Storybook can run with either `webpack4` or `webpack5` builder. If your addon needs to know which version of Webpack it's running inside, the version and the actual Webpack instance itself are both available inside your preset: -```js -// .storybook/main.js + + + -export function webpackFinal(config, { presets }) { - const version = await presets.apply('webpackVersion'); - const instance = (await presets.apply('webpackInstance'))?.default; + - logger.info(`=> Running in webpack ${version}: ${instance}`); - return config; -} -``` ### Manager entries -The addon config `managerEntries` allows you to add addons to Storybook from within a preset. For addons that require custom webpack/babel configuration, it is easier to install the preset, and it will take care of everything. +The addon config `managerEntries` allows you to add addons to Storybook from within a preset. For addons that require custom Webpack/Babel configuration, it is easier to install the preset, and it will take care of everything. For example, the Storysource preset contains the following code: @@ -110,30 +109,32 @@ This is equivalent to [registering the addon manually](../get-started/browse-sto ### Preview entries -The addon config `config` allows you to add extra preview configuration from within a preset, for example to add parameters or decorators from an addon. +The addon `config` function allows you to add extra preview configuration from within a preset, for example to add parameters or decorators from an addon. For example, the Backgrounds preset contains the following code: -```js -// preset.js -export function config(entry = []) { - return [...entry, require.resolve('./defaultParameters')]; -} -``` + + + + + + Which in turn invokes: -```js -// defaultParameters.js -export const parameters = { - backgrounds: { - values: [ - { name: 'light', value: '#F8F8F8' }, - { name: 'dark', value: '#333333' }, - ], - }, -}; -``` + + + + + This is equivalent to exporting the `backgrounds` parameter manually in `main.js`. @@ -175,9 +176,9 @@ Entries are the place to register entry points for the preview. For example it c ## Advanced Configuration -The presets API is also more powerful than the [standard configuration options](../configure/webpack.md#extending-storybooks-webpack-config) available in Storybook, so it's also possible to use presets for more advanced configuration without actually publishing a preset yourself. +The presets API is also more powerful than the [standard configuration options](../builders/webpack.md#extending-storybooks-webpack-config) available in Storybook, so it's also possible to use presets for more advanced configuration without actually publishing a preset yourself. -For example, some users want to configure the webpack for Storybook's UI and addons ([issue](https://github.com/storybookjs/storybook/issues/4995)), but this is not possible using [standard webpack configuration](../configure/webpack.md#default-configuration) (it used to be possible before SB4.1). However, you can achieve this with a private preset. +For example, some users want to configure the Webpack for Storybook's UI and addons ([issue](https://github.com/storybookjs/storybook/issues/4995)), but this is not possible using [standard Webpack configuration](../builders/webpack.md#default-configuration) (it used to be possible before SB4.1). However, you can achieve this with a private preset. If it doesn't exist yet, create a file `.storybook/main.js`: @@ -193,9 +194,9 @@ If it doesn't exist yet, create a file `.storybook/main.js`: ### Preview/Manager templates -It's also possible to to programmatically modify the preview head/body HTML using a preset, similar to the way `preview-head.html`/`preview-body.html` can be used to [configure story rendering](../configure/story-rendering.md). The `previewHead` and `previewBody` functions accept a string, which is the existing head/body, and return a modified string. +It's also possible to programmatically modify the preview head/body HTML using a preset, similar to the way `preview-head.html`/`preview-body.html` can be used to [configure story rendering](../configure/story-rendering.md). The `previewHead` and `previewBody` functions accept a string, which is the existing head/body, and return a modified string. -For example, the following snippet adds a style tag to the preview head programatically: +For example, the following snippet adds a style tag to the preview head programmatically: @@ -209,7 +210,7 @@ For example, the following snippet adds a style tag to the preview head programa Similarly, the `managerHead` can be used to modify the surrounding "manager" UI, analogous to `manager-head.html`. -Finally, the preview's main page _template_ can also be overridden using the `previewMainTemplate`, which should return a reference to a file containing an `.ejs` template that gets interpolated with some environment variables. For an example, see the [Storybook's default template](https://github.com/storybookjs/storybook/blob/next/lib/core-common/src/templates/index.ejs). +Finally, the preview's main page _template_ can also be overridden using the `previewMainTemplate`, which should return a reference to a file containing an `.ejs` template that gets interpolated with some environment variables. For an example, see the [Storybook's default template](https://github.com/storybookjs/storybook/blob/next/lib/core-common/templates/index.ejs). ## Sharing advanced configuration diff --git a/docs/api/argtypes.md b/docs/api/argtypes.md index db77a4efd170..75031481bc78 100644 --- a/docs/api/argtypes.md +++ b/docs/api/argtypes.md @@ -4,15 +4,15 @@ title: 'ArgTypes'
-NOTE: This API is experimental and may change outside of the typical semver release cycle +This API is experimental and may change outside of the typical semver release cycle
-ArgTypes are a first-class feature in Storybook for specifying the behaviour of [Args](../writing-stories/args.md). By specifying the type of an arg you constrain the values that it can take and can also provide information about args that are not explicitly set (i.e. not required). +ArgTypes are a first-class feature in Storybook for specifying the behaviour of [Args](../writing-stories/args.md). By specifying the type of an arg, you constrain the values that it can take and provide information about args that are not explicitly set (i.e., not required). -You can also use argTypes to “annotate” args with information that is used by addons that make use of those args, for instance to instruct the controls addons to render a color choose for a string-valued arg. +You can also use argTypes to “annotate” args with information used by addons that make use of those args. For instance, to instruct the controls addon to render a color, you could choose a string-valued arg. -The most concrete realization of argTypes is the [Args Table](../writing-docs/doc-blocks.md#argstable) doc block. Each row in the table corresponds to a single argType, as well as the current value of that arg. +The most concrete realization of argTypes is the [Args Table](../writing-docs/doc-block-argstable.md) doc block. Each row in the table corresponds to a single argType and the current value of that arg. ![Storybook inferring automatically the argType](./argstable.png) @@ -34,7 +34,7 @@ To do so, Storybook uses various static analysis tools depending on your framewo - Ember - [YUI doc](https://github.com/ember-learn/ember-cli-addon-docs-yuidoc#documenting-components) -The format of the generated argType will look something like: +The format of the generated argType will look something like this: @@ -46,11 +46,11 @@ The format of the generated argType will look something like: -In this ArgTypes data structure, name, type, defaultValue, and description are standard fields in all ArgTypes (analogous to PropTypes in React). The table and control fields are addon-specific annotations. So, for example, the table annotation provides extra information to customize how label gets rendered, and the control annotation provides extra information for the control for editing the property. +This ArgTypes data structure, name, type, defaultValue, and description are standard fields in all ArgTypes (analogous to PropTypes in React). The table and control fields are addon-specific annotations. So, for example, the table annotation provides extra information to customize how the label gets rendered, and the control annotation includes additional information for the control editing the property.
-`@storybook/addon-docs` provide shorthand for common tasks: +💡 The `@storybook/addon-docs` provide a shorthand for common tasks: - `type: 'number'` is shorthand for type: { name: 'number' } - `control: 'radio'` is shorthand for control: { type: 'radio' } @@ -59,7 +59,7 @@ In this ArgTypes data structure, name, type, defaultValue, and description are s #### Manual specification -If you want more control over the args table or any other aspect of using argTypes, you can overwrite the generated argTypes for your component on a per-arg basis. For instance, with the above inferred argTypes and the following default export: +If you want more control over the args table or any other aspect of using argTypes, you can overwrite the generated argTypes for your component on a per-arg basis. For instance, with the above-inferred argTypes and the following default export: @@ -71,7 +71,7 @@ If you want more control over the args table or any other aspect of using argTyp -These values--description, table.type, and controls.type--get merged over the defaults that are extracted by Storybook. The final merged values would be: +The `values.description`, `table.type`, and `controls.type` are merged into the defaults extracted by Storybook. The final merged values would be: @@ -86,9 +86,25 @@ These values--description, table.type, and controls.type--get merged over the de In particular, this would render a row with a modified description, a type display with a dropdown that shows the detail, and no control.
+💡 As with other Storybook properties (e.g., args, decorators), you can also override ArgTypes per story basis. +
+ +#### Global `argTypes` + +You can also define arg types at the global level; they will apply to every component's stories unless you overwrite them. To do so, export the `argTypes` key in your `preview.js`: + + + + -As it happens with other properties such as `args`, `argTypes` can be overridden in a single story. + +
+💡 If you define a global arg type for a story that does not have that arg (e.g. if there is no corresponding global arg definition), then the arg type will have no effect.
#### Using argTypes in addons diff --git a/docs/api/cli-options.md b/docs/api/cli-options.md index 0a22c6a22031..6ca92991ce99 100644 --- a/docs/api/cli-options.md +++ b/docs/api/cli-options.md @@ -4,6 +4,12 @@ title: 'CLI options' Storybook comes with two CLI utilities: `start-storybook` and `build-storybook`. +
+ +Storybook collects completely anonymous data to help us improve user experience. Participation is optional, and you may [opt-out](../configure/telemetry.md#how-to-opt-out) if you'd not like to share any information. + +
+ Pass these commands the following options to alter Storybook's behavior. ## start-storybook @@ -12,30 +18,37 @@ Pass these commands the following options to alter Storybook's behavior. Usage: start-storybook [options] ``` -| Options | Description | Example | -| ---------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------- | -| --help | Output usage information | `start-storybook --help` | -| -V, --version | Output the version number | `start-storybook -V` | -| -p, --port [number] | Port to run Storybook | `start-storybook -p 9009` | -| -h, --host [string] | Host to run Storybook | `start-storybook -h my-host.com` | -| -s, --static-dir `` | Directory where to load static files from, comma-separated list | `start-storybook -s public` | -| -c, --config-dir [dir-name] | Directory where to load Storybook configurations from | `start-storybook -c .storybook` | -| --https | Serve Storybook over HTTPS. Note: You must provide your own certificate information. | `start-storybook --https` | -| --ssl-ca `` | Provide an SSL certificate authority. (Optional with --https, required if using a self-signed certificate) | `start-storybook --ssl-ca my-certificate` | -| --ssl-cert `` | Provide an SSL certificate. (Required with --https) | `start-storybook --ssl-cert my-ssl-certificate` | -| --ssl-key `` | Provide an SSL key. (Required with --https) | `start-storybook --ssl-key my-ssl-key` | -| --smoke-test | Exit after successful start | `start-storybook --smoke-test` | -| --ci | CI mode (skip interactive prompts, don't open browser) | `start-storybook --ci` | -| --no-open | Do not open Storybook automatically in the browser | `start-storybook --no-open` | -| --quiet | Suppress verbose build output | `start-storybook --quiet` | -| --no-dll | Do not use dll reference (no-op) | `start-storybook --no-dll` | -| --debug-webpack | Display final webpack configurations for debugging purposes | `start-storybook --debug-webpack` | -| `--webpack-stats-json ` | Write Webpack Stats JSON to disk | `start-storybook --webpack-stats-json /tmp/webpack-stats` | -| --docs | Starts Storybook in documentation mode. Learn more about it in [here](../writing-docs/build-documentation.md#preview-storybooks-documentation) | `start-storybook --docs` | -| --no-manager-cache | Disables Storybook's manager caching mechanism. See note below. | `start-storybook --no-manager-cache` | +| Options | Description | +| ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `--help` | Output usage information
`start-storybook --help` | +| `-V`, `--version` | Output the version number
`start-storybook -V` | +| `-p`, `--port [number]` | Port to run Storybook
`start-storybook -p 9009` | +| `-h`, `--host [string]` | Host to run Storybook
`start-storybook -h my-host.com` | +| `-s`, `--static-dir` | **Deprecated** [see note](#static-dir-deprecation). Directory where to load static files from, comma-separated list
`start-storybook -s public` | +| `-c`, `--config-dir [dir-name]` | Directory where to load Storybook configurations from
`start-storybook -c .storybook` | +| `--https` | Serve Storybook over HTTPS. Note: You must provide your own certificate information
`start-storybook --https` | +| `--ssl-ca` | Provide an SSL certificate authority. (Optional with --https, required if using a self-signed certificate)
`start-storybook --ssl-ca my-certificate` | +| `--ssl-cert` | Provide an SSL certificate. (Required with --https)
`start-storybook --ssl-cert my-ssl-certificate` | +| `--ssl-key` | Provide an SSL key. (Required with --https)
`start-storybook --ssl-key my-ssl-key` | +| `--smoke-test` | Exit after successful start
`start-storybook --smoke-test` | +| `--ci` | CI mode (skip interactive prompts, don't open browser)
`start-storybook --ci` | +| `--no-open` | Do not open Storybook automatically in the browser
`start-storybook --no-open` | +| `--quiet` | Suppress verbose build output
`start-storybook --quiet` | +| `--no-dll` | Do not use dll reference (no-op)
`start-storybook --no-dll` | +| `--debug-webpack` | Display final webpack configurations for debugging purposes
`start-storybook --debug-webpack` | +| `--webpack-stats-json` | Write Webpack Stats JSON to disk
`start-storybook --webpack-stats-json /tmp/webpack-stats` | +| `--docs` | Starts Storybook in documentation mode. Learn more about it in [here](../writing-docs/build-documentation.md#preview-storybooks-documentation)
`start-storybook --docs` | +| `--no-manager-cache` | Disables Storybook's manager caching mechanism. See note below
`start-storybook --no-manager-cache` | +| `--disable-telemetry` | Disables Storybook's telemetry. Learn more about it [here](../configure/telemetry.md)
`start-storybook --disable-telemetry` |
-💡 NOTE: The flag --no-manager-cache disables the internal caching of Storybook and can severely impact your Storybook loading time, so only use it when you need to refresh Storybook's UI, such as when editing themes. +💡 The flag --no-manager-cache disables the internal caching of Storybook and can severely impact your Storybook loading time, so only use it when you need to refresh Storybook's UI, such as when editing themes. +
+ +
+ +💡 Starting in 6.4 the `-s` flag is deprecated. Instead, use a configuration object in your `.storybook/main.js` file. See the [images and assets documentation](../configure/images-and-assets.md#serving-static-files-via-storybook) for more information. +
## build-storybook @@ -44,20 +57,21 @@ Usage: start-storybook [options] Usage: build-storybook [options] ``` -| Options | Description | Example | -| ---------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------- | -| -h, --help | Output usage information | `build-storybook --help` | -| -V, --version | Output the version number | `build-storybook -V` | -| -s, --static-dir `` | Directory where to load static files from, comma-separated list | `build-storybook -s public` | -| -o, --output-dir [dir-name] | Directory where to store built files | `build-storybook -o /my-deployed-storybook` | -| -c, --config-dir [dir-name] | Directory where to load Storybook configurations from | `build-storybook -c .storybook` | -| --loglevel [level] | Controls level of logging during build. Can be one of: [silly, verbose, info (default), warn, error, silent] | `build-storybook --loglevel warn` | -| --quiet | Suppress verbose build output | `build-storybook --quiet` | -| --no-dll | Do not use dll reference (no-op) | `build-storybook --no-dll` | -| --debug-webpack | Display final webpack configurations for debugging purposes | `build-storybook --debug-webpack` | -| `--webpack-stats-json ` | Write Webpack Stats JSON to disk | `build-storybook --webpack-stats-json /my-storybook/webpack-stats` | -| --docs | Builds Storybook in documentation mode. Learn more about it in [here](../writing-docs/build-documentation.md#publish-storybooks-documentation)) | `build-storybook --docs` | +| Options | Description | +| ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `-h`, `--help` | Output usage information
`build-storybook --help` | +| `-V`, `--version` | Output the version number
`build-storybook -V` | +| `-s`, `--static-dir` | **Deprecated** [see note](#static-dir-deprecation).
Directory where to load static files from, comma-separated list
`build-storybook -s public` | +| `-o`, `--output-dir [dir-name]` | Directory where to store built files
`build-storybook -o /my-deployed-storybook` | +| `-c`, `--config-dir [dir-name]` | Directory where to load Storybook configurations from
`build-storybook -c .storybook` | +| `--loglevel [level]` | Controls level of logging during build.
Available options: `silly`, `verbose`, `info` (default), `warn`, `error`, `silent`
`build-storybook --loglevel warn` | +| `--quiet` | Suppress verbose build output
`build-storybook --quiet` | +| `--no-dll` | Do not use dll reference (no-op)
`build-storybook --no-dll` | +| `--debug-webpack` | Display final webpack configurations for debugging purposes
`build-storybook --debug-webpack` | +| `--webpack-stats-json` | Write Webpack Stats JSON to disk
`build-storybook --webpack-stats-json /my-storybook/webpack-stats` | +| `--docs` | Builds Storybook in documentation mode. Learn more about it in [here](../writing-docs/build-documentation.md#publish-storybooks-documentation)
`build-storybook --docs` | +| `--disable-telemetry` | Disables Storybook's telemetry. Learn more about it [here](../configure/telemetry.md).
`build-storybook --disable-telemetry` |
-💡 NOTE: If you're using npm instead of yarn to publish Storybook, the commands work slightly different. For example, npm run build-storybook -- -o ./path/to/build. +💡 If you're using npm instead of yarn to publish Storybook, the commands work slightly different. For example, npm run build-storybook -- -o ./path/to/build.
diff --git a/docs/api/csf.md b/docs/api/csf.md index b2d26ad635d6..b96c2fd970e3 100644 --- a/docs/api/csf.md +++ b/docs/api/csf.md @@ -6,7 +6,7 @@ Component Story Format (CSF) is the recommended way to [write stories](../writin
-If you are writing stories in the older `storiesOf()` syntax, you can find documentation in an [advanced README](../../lib/core/docs/storiesOf.md). +💡 If you are writing stories in the older `storiesOf()` syntax, you can find documentation in an [advanced README](../../lib/core/docs/storiesOf.md).
@@ -18,7 +18,7 @@ CSF is supported in all frameworks except React Native, where you should use the The default export defines metadata about your component, including the `component` itself, its `title` (where it will show up in the [navigation UI story hierarchy](../writing-stories/naming-components-and-hierarchy.md#sorting-stories)), [decorators](../writing-stories/decorators.md), and [parameters](../writing-stories/parameters.md). -The `component` field is optional (but encouraged!), and is used by addons for automatic prop table generation and display of other component metadata. `title` should be unique, i.e. not re-used across files. +The `component` field is required and used by addons for automatic prop table generation and display of other component metadata. The `title` field is optional and should be unique (i.e., not re-used across files). @@ -34,16 +34,18 @@ For more examples, see [writing stories](../writing-stories/introduction.md). ## Named story exports -With CSF, every named export in the file represents a story function by default. +With CSF, every named export in the file represents a story object by default. @@ -59,11 +61,11 @@ The exported identifiers will be converted to "start case" using Lodash's [start | some_custom_NAME | Some Custom NAME | | someName1234 | Some Name 1 2 3 4 | -It's recommended to start export names with a capital letter. +We recommend that all export names to start with a capital letter. -Story functions can be annotated with a few different fields to define story-level [decorators](../writing-stories/decorators.md) and [parameters](../writing-stories/parameters.md), and also to define the `storyName` of the story. +Story objects can be annotated with a few different fields to define story-level [decorators](../writing-stories/decorators.md) and [parameters](../writing-stories/parameters.md), and also to define the `name` of the story. -The `storyName` is useful if you want to use names with special characters, names that correspond to restricted keywords in Javascript, or names that collide with other variables in the file. If it's not specified, the export name will be used instead. +Storybook's `name` configuration element is helpful in specific circumstances. Common use cases are names with special characters or Javascript restricted words. If not specified, Storybook defaults to the named export. @@ -86,10 +88,12 @@ Consider Storybook’s ["Button" example](../writing-stories/introduction.md#def @@ -104,51 +108,63 @@ Now consider the same example, re-written with args: 'react/button-story-click-handler-args.js.mdx', 'vue/button-story-click-handler-args.2.js.mdx', 'vue/button-story-click-handler-args.3.js.mdx', + 'angular/button-story-click-handler-args.ts.mdx', + 'svelte/button-story-click-handler-args.js.mdx', ]} /> - -At first blush this might seem no better than the original example. However, if we add the [Docs addon](https://github.com/storybookjs/storybook/tree/master/addons/docs) and configure the [Actions addon](https://github.com/storybookjs/storybook/tree/master/addons/actions) appropriately, we can write: + +Or even more simply: -Or even more simply: +Not only are these versions shorter and more accessible to write than their no-args counterparts, but they are also more portable since the code doesn't depend on the actions addon specifically. + +For more information on setting up [Docs](../writing-docs/introduction.md) and [Actions](../essentials/actions.md), see their respective documentation. + +## Play function + +Storybook's `play` functions are small snippets of code executed when the story renders in the UI. They are convenient helper methods to help you test use cases that otherwise weren't possible or required user intervention. + +A good use case for the `play` function is a form component. With previous Storybook versions, you'd write your set of stories and had to interact with the component to validate it. With Storybook's play functions, you could write the following story: -Not only are these versions shorter and easier to write than their no-args counterparts, but they are also more portable since the code doesn't depend on the actions addon specifically. - -For more information on setting up [Docs](../writing-docs/introduction.md) and [Actions](../essentials/actions.md), see their respective documentation. - -## Storybook export vs name handling +When the story renders in the UI, Storybook executes each step defined in the `play` function and runs the assertions without the need for user interaction. -Storybook handles named exports and `story.name` slightly differently. When should you use one vs. the other? +## Storybook export vs. name handling -The named export is always used to determine the story ID / URL. +Storybook handles named exports and the `name` option slightly differently. When should you use one vs. the other? -If you specify `story.name`, it will be used as the story display name in the UI. +Storybook will always use the named export to determine the story ID and URL. -If you don't specify `story.name`, the named export will be used to generate the display name. Storybook passes the named export through a `storyNameFromExport` function, which is implemented with `lodash.startCase`: +If you specify the `name` option, it will be used as the story display name in the UI. Otherwise, it defaults to the named export, processed through Storybook's `storyNameFromExport` and `lodash.startCase` functions. @@ -160,18 +176,18 @@ If you don't specify `story.name`, the named export will be used to generate the -When you want to change the name of your story, just rename the CSF export. This will change the name of the story and also change the story's ID and URL. +When you want to change the name of your story, rename the CSF export. It will change the name of the story and also change the story's ID and URL. -You should use the `story.name` option in the following cases: +It would be best if you used the `name` configuration element in the following cases: -1. You want the name to show up in the Storybook UI in a way that's not possible with a named export, e.g. reserved keywords like "default", special characters like emoji, spacing/capitalization other than what's provided by `storyNameFromExport`. -2. You want to preserve the Story ID independently from changing how it's displayed. Having stable Story ID's is useful for integration with third party tools. +1. You want the name to show up in the Storybook UI in a way that's not possible with a named export, e.g., reserved keywords like "default", special characters like emoji, spacing/capitalization other than what's provided by `storyNameFromExport`. +2. You want to preserve the Story ID independently from changing how it's displayed. Having stable Story IDs is helpful for integration with third-party tools. ## Non-story exports -In some cases, you may want to export a mixture of story and non-stories. For example, it can be useful to export data that's used in your stories. +In some cases, you may want to export a mixture of stories and non-stories (e.g., mocked data). -To make this possible, you can use optional `includeStories` and `excludeStories` configuration fields in the default export, which can be set to either an array of strings, or a regular expression. +You can use the optional configuration fields `includeStories` and `excludeStories` in the default export to make this possible. You can define them as an array of strings or regular expressions. Consider the following story file: @@ -180,16 +196,19 @@ Consider the following story file: -When Storybook loads this file, it will see all the exports, but it will ignore the data exports and only treat `SimpleStory` and `ComplexStory` as stories. +When this file renders in Storybook, it treats `ComplexStory` and `SimpleStory` as stories and ignores the `data` named exports. -For this specific example the equivalent result can be achieved in a few ways depending on what's convenient: +For this particular example, you could achieve the same result in different ways, depending on what's convenient: - `includeStories: /^[A-Z]/` - `includeStories: /.*Story$/` @@ -198,4 +217,4 @@ For this specific example the equivalent result can be achieved in a few ways de - `excludeStories: /.*Data$/` - `excludeStories: ['simpleData', 'complexData']` -If you follow the best practice of starting story exports with an uppercase letter (i.e. use UpperCamelCase), the first option is the recommended solution. +The first option is the recommended solution if you follow the best practice of starting story exports with an uppercase letter (i.e., use UpperCamelCase). \ No newline at end of file diff --git a/docs/api/frameworks-feature-support.md b/docs/api/frameworks-feature-support.md index 8b1ae823ed3d..94bab1ebf95c 100644 --- a/docs/api/frameworks-feature-support.md +++ b/docs/api/frameworks-feature-support.md @@ -16,4 +16,4 @@ Core frameworks have dedicated maintainers or contributors who are responsible f Community frameworks have fewer contributors which means they may not be as up to date as core frameworks. If you use one of these frameworks for your job, please consider contributing to its integration with Storybook. - + \ No newline at end of file diff --git a/docs/api/mdx.md b/docs/api/mdx.md index 61c2ca74dab8..4783ec5f12a3 100644 --- a/docs/api/mdx.md +++ b/docs/api/mdx.md @@ -20,27 +20,28 @@ Let's get started with an example that combines Markdown with a single story: -And here's how that's rendered in Storybook: +And here's how it renders in Storybook: ![Show a simple mdx example](./mdx-simple.png) -As you can see there's a lot going on here. We're writing Markdown, we're writing JSX, and somehow we're also defining Storybook stories that are drop-in compatible with the entire Storybook ecosystem. +As you can see, a lot is going on here. We're writing Markdown, we're writing JSX, and somehow we're also defining Storybook stories that are drop-in compatible with the entire Storybook ecosystem. Let's break it down. ## MDX-Flavored CSF -[MDX](https://mdxjs.com/) is a standard file format that combines Markdown with JSX. This means you can use Markdown’s terse syntax (such as `# heading`) for your documentation, and freely embed JSX component blocks at any point in the file. +[MDX](https://mdxjs.com/) is a standard file format that combines Markdown with JSX. It means you can use Markdown’s terse syntax (such as `# heading`) for your documentation and freely embed JSX component blocks at any point in the file. -MDX-flavored [Component Story Format (CSF)](https://medium.com/storybookjs/component-story-format-66f4c32366df) includes a collection of components called **"Doc Blocks"**, that allow Storybook to translate MDX files into storybook stories. MDX-defined stories are identical to regular Storybook stories, so they can be used with Storybook's entire ecosystem of addons and view layers. +MDX-flavored [Component Story Format (CSF)](https://medium.com/storybookjs/component-story-format-66f4c32366df) includes a collection of components called **"Doc Blocks"**, that allow Storybook to translate MDX files into Storybook stories. MDX-defined stories are identical to regular Storybook stories, so they can be used with Storybook's entire ecosystem of addons and view layers. -For example, here's the story from `Checkbox` example above, rewritten in CSF: +For example, here's the story from the `Checkbox` example above, rewritten in CSF: -There's a one-to-one mapping from the code in `MDX` to `CSF`, which in turn directly corresponds to Storybook's internal `storiesOf` API. As a user, this means your existing Storybook knowledge should translate between the three. And technically, this means that the transformations that happen under the hood are simple and predictable. +There's a one-to-one mapping from the code in `MDX` to `CSF`, which in turn directly corresponds to Storybook's internal `storiesOf` API. As a user, this means your existing Storybook knowledge should translate between the three constructs. And technically, this means that the transformations that happen under the hood are predictable and straightforward. ## Writing stories @@ -101,7 +102,7 @@ To add [decorators](../writing-docs/mdx.md#decorators-and-parameters) and [param -In addition, global decorators work just like before, e.g. adding the following to your [`.storybook/preview.js`](../configure/overview.md#configure-story-rendering): +In addition, global decorators work just like before, e.g., adding the following to your [`.storybook/preview.js`](../configure/overview.md#configure-story-rendering): @@ -113,20 +114,38 @@ In addition, global decorators work just like before, e.g. adding the following +### Play function + +Storybook's `play` functions are small snippets of code that run after the story loads. They're helpful methods to help test scenarios that otherwise would require user intervention. For example, if you're working on a login component and want to interact with it and verify the component's workflow, you could write the following story: + + + + + + + ## Documentation-only MDX -Typically, when you use Storybook MDX, you define stories in the MDX and the documentation is automatically associated with those stories. But what if you want to write Markdown-style documentation and have it show up in your Storybook? +Typically, when you use the MDX format, you define your stories and are automatically generated by Storybook. But what if you want to write Markdown-style documentation and have it show up in your Storybook? -If you don't define stories in your MDX, you can write MDX documentation and associate it with an existing story, or embed that MDX as its own documentation node in your Storybook's navigation. +Suppose you don't define stories in your MDX. In that case, you can write MDX documentation and associate it with an existing story or embed that MDX as its documentation node in your Storybook's navigation. -If you don't define a `Meta`, you can write Markdown and associate with an existing story. See ["CSF Stories with MDX Docs"](../writing-docs/mdx.md). +If you don't define a `Meta`, you can write Markdown and associate it with an existing story. See ["CSF Stories with MDX Docs"](../writing-docs/mdx.md). -To get a "documentation-only story", in your UI, define a `` as you normally would, but don't define any stories. It will show up in your UI as a documentation node: +To get a "documentation-only story" in your UI, define a `` as you usually would, but don't define any stories. It will show up in your UI as a documentation node: ![Show documentation](./mdx-documentation-only.png) ## MDX file names -Unless you use a custom webpack configuration, all of your `MDX` files should have the suffix `*.stories.mdx`. This tells Storybook to apply its special processing to the `` and `` elements in the file. +Unless you use a custom webpack configuration, all of your `MDX` files should have the suffix `*.stories.mdx`. It tells Storybook to apply its special processing to the `` and `` elements in the file. -Be sure to update your Storybook config file to load `.stories.mdx` stories, as per the [`addon-docs` installation instructions](https://github.com/storybookjs/storybook/tree/master/addons/docs#installation). +Be sure to update your Storybook config file to load `.stories.mdx` stories, as per the [`addon-docs` installation instructions](https://github.com/storybookjs/storybook/tree/master/addons/docs#installation). \ No newline at end of file diff --git a/docs/api/new-frameworks.md b/docs/api/new-frameworks.md index 5164c1af24f1..940417731bf1 100644 --- a/docs/api/new-frameworks.md +++ b/docs/api/new-frameworks.md @@ -2,33 +2,33 @@ title: 'Frameworks' --- -Storybook is architected to support diverse web frameworks including React, Vue, Angular, Web Components, Svelte and over a dozen others. This guide helps you get started on adding new framework support for Storybook. +Storybook is architected to support diverse web frameworks, including React, Vue, Angular, Web Components, Svelte, and over a dozen others. This guide helps you get started on adding new framework support for Storybook. ## Scaffolding a new framework -The first thing to do is scaffold your framework support in its own repo. +The first thing to do is to scaffold your framework support in its own repo. We recommend adopting the same project structure as the Storybook monorepo. That structure contains the framework package (`app/`) and an example app (`examples/-kitchen-sink`) as well as other associated documentation and configuration as needed. -This may seem like a little more hierarchy than what’s necessary. But because the structure mirrors the way Storybook’s own monorepo is structured, you can reuse Storybook’s tooling and it also makes it easier to move the framework into the Storybook into the monorepo at a later point if that is desirable. +It may seem like a little more hierarchy than what’s necessary. But because the structure mirrors the way Storybook’s monorepo is structured, you can reuse Storybook’s tooling. It also makes it easier to move the framework into the Storybook monorepo later if that is desirable. -We recommend using `@storybook/html` as a starter framework since it’s the simplest one and doesn’t contain any framework-specific oddities. There is a boilerplate to get you started [here](https://github.com/CodeByAlex/storybook-framework-boilerplate). +We recommend using `@storybook/html` as a starter framework since it’s the simplest and contains no framework-specific peculiarities. There is a boilerplate to get you started [here](https://github.com/CodeByAlex/storybook-framework-boilerplate). ## Framework architecture Supporting a new framework in Storybook typically consists of two main aspects: -1. Configuring the server. In Storybook, the server is the node process that runs when you `start-storybook` or `build-storybook`. Configuring the server typically means configuring babel and webpack in framework-specific ways. +1. Configuring the server. In Storybook, the server is the node process that runs when you run `start-storybook` or `build-storybook`. Configuring the server typically means configuring babel and webpack in framework-specific ways. -2. Configuring the client. The client is the code that runs in the browser. Configuring the client means providing a framework-specific story rendering function. +2. Configuring the client. The client is the code that runs in the browser, and configuring it, means providing a framework-specific story rendering function. ## Configuring the server -Storybook has the concept of [presets](../addons/writing-presets.md#presets-api), which are typically babel/webpack configurations for file loading. If your framework has its own file format, e.g. “.vue,” you might need to transform these files into JS files at load time. If you expect every user of your framework to need this, you should add it to the framework. So far every framework added to Storybook has done this, because Storybook’s core configuration is very minimal. +Storybook has the concept of [presets](../addons/writing-presets.md), which are typically babel/webpack configurations for file loading. If your framework has its own file format (e.g., “.vue”), you might need to transform them into JavaScript files at load time. If you assume every user of your framework needs this, you should add it to the framework. So far, every framework added to Storybook has done it because Storybook’s core configuration is extremely minimal. ### Package structure -To add a framework preset, it’s useful to understand the package structure. Each framework typically exposes two executables in its `package.json`: +It's helpful to understand Storybook's package structure before adding a framework preset. Each framework typically exposes two executables in its `package.json`: ```json { @@ -53,8 +53,7 @@ For example, here’s the boilerplate to start the dev server in `start-storyboo - -Thus the meat of adding framework presets is filling in that options object. +Thus the essence of adding framework presets is just filling in that options object. ### Server options @@ -72,36 +71,33 @@ Let’s look at the `@storybook/vue`’s options definition: -The value of the `framework` option (in this case ‘vue’) is something that gets passed to addons and allows them to do special case things for your framework. +The value of the `framework` option (i.e., ‘vue’) is something that gets passed to addons and allows them to do specific tasks related to your framework. -The real meat of this file is the framework presets, and these are standard [Storybook presets](./addons.md#addon-presets) -- you can look at framework packages in the Storybook monorepo (e.g. [React](https://github.com/storybookjs/storybook/blob/next/app/react/src/server/options.ts), [Vue](https://github.com/storybookjs/storybook/blob/next/app/vue/src/server/options.ts), [Web Components](https://github.com/storybookjs/storybook/blob/next/app/web-components/src/server/options.ts)) to see examples of framework-specific customizations. +The essence of this file is the framework presets, and these are standard [Storybook presets](../addons/writing-presets.md) -- you can look at framework packages in the Storybook monorepo (e.g. [React](https://github.com/storybookjs/storybook/blob/next/app/react/src/server/options.ts), [Vue](https://github.com/storybookjs/storybook/blob/next/app/vue/src/server/options.ts), [Web Components](https://github.com/storybookjs/storybook/blob/next/app/web-components/src/server/options.ts)) to see examples of framework-specific customizations. -When developing your own framework that is not published by storybook, you can pass the path to the framework location with the `frameworkPath` key: +While developing your custom framework, not maintained by Storybook, you can specify the path to the location file with the `frameworkPath` key: -```ts -// my-framework/src/server/options.ts + -import { sync } from 'read-pkg-up'; + -export default { - packageJson: sync({ cwd: __dirname }).packageJson, - framework: 'my-framework', - frameworkPath: '@my-framework/storybook', - frameworkPresets: [require.resolve('./framework-preset-my-framework.js')], -}; -``` + -Passing a relative path to `frameworkPath` is also possible, just keep in mind that these are resolved from the storybook config directory (`.storybook` by default). +You can add a relative path to `frameworkPath`. Don't forget that they resolve from the Storybook configuration directory (i.e., `.storybook`) by default. Make sure the `frameworkPath` ends up at the `dist/client/index.js` file within your framework app. ## Configuring the client -To configure the client, you must provide a framework specific render function. Before diving into the details, it’s important to understand how user-written stories relate to what is finally rendered on the screen. +To configure the client, you must provide a framework-specific render function. Before diving into the details, it’s essential to understand how user-written stories relate to what renders on the screen. ### Renderable objects -Storybook stories are ES6 functions that return a “renderable object.” +Storybook stories are ES6 objects that return a “renderable object.” Consider the following React story: @@ -117,7 +113,7 @@ Consider the following React story: In this case, the renderable object is the React element, `
-You can also pass these environment variables when you are [building your Storybook](../workflows/publish-storybook.md) with `build-storybook`. +You can also pass these environment variables when you are [building your Storybook](../sharing/publish-storybook.md) with `build-storybook`. + +Then they'll be hardcoded to the static version of your Storybook. + + +### Using Storybook configuration + +Additionally, you can extend your Storybook configuration file (i.e., [`.storybook/main.js`](../configure/overview.md#configure-story-rendering)) and provide a configuration field that you can use to define specific variables (e.g., API URLs). For example: + + + + + + + +When Storybook loads, it will enable you to access them in your stories similar as you would do if you were working with an `env` file: + + + + -Then they'll be hard coded to the static version of your Storybook. + ### Using environment variables to choose the browser -Storybook allows you to choose the browser you want to preview your stories. Either through an `.env` file entry or directly in your `storybook` script. +Storybook allows you to choose the browser you want to preview your stories. Either through a `.env` file entry or directly in your `storybook` script. The table below lists the available options: | Browser | Example | -|----------|----------------------| +| -------- | -------------------- | | Safari | `BROWSER="safari"` | | Firefox | `BROWSER="firefox"` | | Chromium | `BROWSER="chromium"` |
-Note: By default Storybook will open a new Chrome window as part of its startup process. If you don't have Chrome installed, make sure to include one of the following options, or set your default browser accordingly. -
+💡 By default, Storybook will open a new Chrome window as part of its startup process. If you don't have Chrome installed, make sure to include one of the following options, or set your default browser accordingly. +
\ No newline at end of file diff --git a/docs/configure/features-and-behavior.md b/docs/configure/features-and-behavior.md index 4d419ef78979..d936e062d962 100644 --- a/docs/configure/features-and-behavior.md +++ b/docs/configure/features-and-behavior.md @@ -16,42 +16,43 @@ To control the layout of Storybook’s UI you can use `addons.setConfig` in your The following table details how to use the API values: -| Name | Type | Description | Example Value | -| ----------------------|:-------------:|:-------------------------------------------------------------:|:----------------------------------------------:| -| **isFullscreen** | Boolean |Show story component as full screen |`false` | -| **showNav** | Boolean |Display panel that shows a list of stories |`true` | -| **showPanel** | Boolean |Display panel that shows addon configurations |`true` | -| **panelPosition** | String/Object |Where to show the addon panel |`bottom` or `right` | -| **enableShortcuts** | Boolean |Enable/disable shortcuts |`true` | -| **isToolshown** | Boolean |Show/hide tool bar |`true` | -| **theme** | Object |Storybook Theme, see next section |`undefined` | -| **selectedPanel** | String |Id to select an addon panel |`storybook/actions/panel` | -| **initialActive** | String |Select the default active tab on Mobile |`sidebar` or `canvas` or `addons` | -| **sidebar** | Object |Sidebar options, see below |`{ showRoots: false }` | -| **toolbar** | Object |Modify the tools in the toolbar using the addon id |`{ fullscreen: { hidden: false } } }` | +| Name | Type | Description | Example Value | +| ------------------- | :-----------: | :------------------------------------------------: | :-----------------------------------: | +| **isFullscreen** | Boolean | Show story component as full screen | `false` | +| **showNav** | Boolean | Display panel that shows a list of stories | `true` | +| **showPanel** | Boolean | Display panel that shows addon configurations | `true` | +| **panelPosition** | String/Object | Where to show the addon panel | `bottom` or `right` | +| **enableShortcuts** | Boolean | Enable/disable shortcuts | `true` | +| **showToolbar** | Boolean | Show/hide tool bar | `true` | +| **theme** | Object | Storybook Theme, see next section | `undefined` | +| **selectedPanel** | String | Id to select an addon panel | `storybook/actions/panel` | +| **initialActive** | String | Select the default active tab on Mobile | `sidebar` or `canvas` or `addons` | +| **sidebar** | Object | Sidebar options, see below | `{ showRoots: false }` | +| **toolbar** | Object | Modify the tools in the toolbar using the addon id | `{ fullscreen: { hidden: false } } }` | The following options are configurable under the `sidebar` namespace: -| Name | Type | Description | Example Value | -| ----------------------|:-------------:|:-------------------------------------------------------------:|:----------------------------------------------:| -| **showRoots** | Boolean |Display the top-level nodes as a "root" in the sidebar |`false` | -| **collapsedRoots** | Array |Set of root node IDs to visually collapse by default |`['misc', 'other']` | -| **renderLabel** | Function |Create a custom label for tree nodes; must return a ReactNode |`(item) => {item.name}`| +| Name | Type | Description | Example Value | +| ------------------ | :------: | :-----------------------------------------------------------: | :----------------------------------------------: | +| **showRoots** | Boolean | Display the top-level nodes as a "root" in the sidebar | `false` | +| **collapsedRoots** | Array | Set of root node IDs to visually collapse by default | `['misc', 'other']` | +| **renderLabel** | Function | Create a custom label for tree nodes; must return a ReactNode | `(item) => {item.name}` | The following options are configurable under the `toolbar` namespace: -| Name | Type | Description | Example Value | -| ----------------------|:-------------:|:-------------------------------------------------------------:|:----------------------------------------------:| -| **id** | String |Toggle visibility for toolbar item |`{ hidden: false }` | +| Name | Type | Description | Example Value | +| ------ | :----: | :--------------------------------: | :-----------------: | +| **id** | String | Toggle visibility for toolbar item | `{ hidden: false }` | ## Configuring through URL parameters -Some features can be controlled through URL parameters: +You can use URL parameters to configure some of the available features: -| Config option | Query param | Supported values | -| ----------------------|:-------------:|:--------------------------:| -| **enableShortcuts** | `shortcuts` | `false` | -| **isFullscreen** | `full` | `true` | -| **showNav** | `nav` | `false` | -| **showPanel** | `panel` | `false`, `right`, `bottom` | -| **selectedPanel** | `addonPanel` | Any panel ID | +| Config option | Query param | Supported values | +| ------------------- | :----------: | :------------------------: | +| **enableShortcuts** | `shortcuts` | `false` | +| **isFullscreen** | `full` | `true` | +| **showNav** | `nav` | `false` | +| **showPanel** | `panel` | `false`, `right`, `bottom` | +| **selectedPanel** | `addonPanel` | Any panel ID | +| **showTabs** | `tabs` | `true` | \ No newline at end of file diff --git a/docs/configure/images-and-assets.md b/docs/configure/images-and-assets.md index 0ecc8b4e807b..8049a22db88a 100644 --- a/docs/configure/images-and-assets.md +++ b/docs/configure/images-and-assets.md @@ -6,15 +6,16 @@ Components often rely on images, videos, fonts, and other assets to render as th ### Import assets into stories -You can import any media assets by importing (or requiring) them. This works out of the box with our default config. But, if you are using a custom webpack config, you’ll need to add the file-loader to handle the required files. +You can import any media assets by importing (or requiring) them. It works out of the box with our default config. But, if you are using a custom webpack config, you’ll need to add the [file loader](https://v4.webpack.js.org/loaders/) to handle the required files. -Afterwards you can use any asset in your stories: +Afterward, you can use any asset in your stories: -### Serving static files via Storybook +### Serving static files via Storybook Configuration -We recommend serving static files via Storybook to ensure that your components always have the assets they need to load. This technique is recommended for assets that your components often use like logos, fonts, and icons. +We recommend serving static files via Storybook to ensure that your components always have the assets they need to load. We recommend this technique for assets that your components often use, like logos, fonts, and icons. -Configure a directory (or a list of directories) where your assets live when starting Storybook. Use the`-s` flag in your npm script like so: +Configure a directory (or a list of directories) where your assets live when starting Storybook. Use the`staticDirs` configuration element in your main Storybook configuration file (i.e., `.storybook/main.js`) to specify the directories: -```json -{ - "scripts": { - "start-storybook": "start-storybook -s ./public -p 9001" - } -} -``` + -Or when building your Storybook with `build-storybook`: + -```json -{ - "scripts": { - "build-storybook": "build-storybook -s public" - } -} -``` + -Here `./public` is your static directory. Now use it in a component or story like this. +Here `../public` is your static directory. Now use it in a component or story like this. + + + + + +Or even use a configuration object to define the directories: + + + + + + + +### **[⚠️ Deprecated]** Serving static files via Storybook CLI + +Using `--static-dir` or `-s` option with Storybook CLI is deprecated. It is recommended to use [Storybook static directory configuration option](#serving-static-files-via-storybook-configuration) instead. ### Reference assets from a CDN -Upload your files to an online CDN and reference them. In this example we’re using a placeholder image service. +Upload your files to an online CDN and reference them. In this example, we’re using a placeholder image service. -Note you can change the folder that Storybook uses by setting the `-c` flag to your `start-storybook` and `build-storybook` scripts. +Note that you can change the folder that Storybook uses by setting the `-c` flag to your `start-storybook` and `build-storybook` scripts.
## Configure your Storybook project -The main configuration file is `main.js`. This file controls the behavior of the Storybook server, and so you must restart Storybook’s process when you change it. It contains the following: +The main configuration file is `main.js`. This file controls the Storybook server's behavior, so you must restart Storybook’s process when you change it. It contains the following: @@ -24,31 +24,48 @@ The main configuration file is `main.js`. This file controls the behavior of the -The `main.js` configuration file is a [preset](../addons/addon-types.md) and as such has a powerful interface, but the key fields within it are: +The `main.js` configuration file is a [preset](../addons/addon-types.md) and, as such, has a powerful interface, but the key fields within it are: - `stories` - an array of globs that indicates the [location of your story files](#configure-story-loading), relative to `main.js`. -- `addons` - a list of the [addons](/addons) you are using. -- `webpackFinal` - custom [webpack configuration](./webpack.md#extending-storybooks-webpack-config). +- `addons` - a list of the [addons](https://storybook.js.org/addons/) you are using. +- `webpackFinal` - custom [webpack configuration](../builders/webpack.md#extending-storybooks-webpack-config). - `babel` - custom [babel configuration](./babel.md). +- `framework` - framework specific configurations to help the loading and building process.
- Tip: Customize your default story by referencing it first in the `stories` array. + 💡 Tip: Customize your default story by referencing it first in the `stories` array.
+See all the [available](#using-storybook-api) fields below if you need further customization. + +### Feature flags + +Additionally, you can also provide additional feature flags to your Storybook configuration. Below is an abridged list of available features that are currently available. + +| Configuration element | Description | +| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `storyStoreV7` | Configures Storybook to load stories [on demand](#on-demand-story-loading), rather than during boot up.
`features: { storyStoreV7: true }` | +| `buildStoriesJson` | Generates a `stories.json` file to help story loading with the on demand mode.
`features: { buildStoriesJson: true }` | +| `emotionAlias` | Provides backwards compatibility for Emotion. See the [migration documentation](https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#emotion11-quasi-compatibility) for context.
`features: { emotionAlias: false }` | +| `babelModeV7` | Enables the new [Babel configuration](./babel.md#v7-mode) mode for Storybook.
`features: { babelModeV7: true }` | +| `postcss` | Disables the implicit PostCSS warning. See the [migration documentation](https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#deprecated-implicit-postcss-loader) for context.
`features: { postcss: false }` | +| `modernInlineRender` | Enables Storybook's modern inline rendering mode.
`features: { modernInlineRender: false }` | +| `previewMdx2` | Enables experimental support for [MDX 2](../writing-docs/mdx.md#mdx-2).
`features: { previewMdx2: true }` | + ## Configure story loading -By default, Storybook will load stories from your project based on a glob (pattern matching string) in `.storybook/main.js` that matches all files in your project with extension `.stories.js`. The intention is you colocate a story file with the component it documents. +By default, Storybook will load stories from your project based on a glob (pattern matching string) in `.storybook/main.js` that matches all files in your project with extension `.stories.*`. The intention is you colocate a story file with the component it documents. ``` • └── components - ├── Button.js - └── Button.stories.js + ├── Button.js + └── Button.stories.js ``` -If you want to use a different naming convention, you can alter the glob, using the syntax supported by [micromatch](https://github.com/micromatch/micromatch#extended-globbing). +If you want to use a different naming convention, you can alter the glob using the syntax supported by [picomatch](https://github.com/micromatch/picomatch#globbing-features). -For example if you wanted to pull both `.md` and `.js` files from the `my-project/src/components` directory, you could write: +For example, if you wanted to pull both `.md` and `.js` files from the `my-project/src/components` directory, you could write: @@ -60,20 +77,116 @@ For example if you wanted to pull both `.md` and `.js` files from the `my-projec -If you want to use a custom logic for loading stories which is not supported by a glob pattern, you can supply the final list of stories files: +### With a configuration object -```js -// .storybook/main.js +Additionally, you can customize your Storybook configuration to load your stories based on a configuration object. For example, if you wanted to load your stories from a `packages` directory, you could adjust your `stories` configuration field into the following: -function findStories() { - // your custom logic returns a list of files -} + -module.exports = { - stories: async (list) => [...list, ...findStories()], -}; -``` + + + + +When Storybook starts, it will look for any file containing the `stories` extension inside the `packages/stories` directory and generate the titles for your stories. + +### With a directory + +You can also simplify your Storybook configuration and load the stories based on a directory. For example, if you want to load all the stories inside a `packages/MyStories`, you can adjust the configuration as such: + + + + + + + +### With a custom implementation + +You can also adjust your Storybook configuration and implement your custom logic for loading your stories. For example, suppose you were working on a project that includes a particular pattern that the conventional ways of loading stories could not solve, in that case, you could adjust your configuration as follows: + + + + + + + +### On-demand story loading + +As your Storybook grows in size, it gets challenging to load all of your stories in a performant way, slowing down the loading times and yielding a large bundle. Starting with Storybook 6.4, you can optimize your story loading by enabling the `storyStoreV7` feature flag in your configuration as follows: + + + + + + + +Once you've restarted your Storybook, you'll see an almost immediate performance gain in your loading times and also a decrease in the generated bundle. + +#### Known limitations + +This feature is experimental, and it has some limitations on what you can and cannot do in your stories files. If you plan to use it, you'll need to take into consideration the following limitations: + +- [CSF formats](../api/csf.md) from version 1 to version 3 are supported. The `storiesOf` construct is not. +- Custom`storySort` functions are allowed based on a restricted API. + +## Configure your project with TypeScript + +If you need, you can also configure your Storybook using TypeScript. To get started, add a `.babelrc` file inside your project and include the following Babel presets: + +Rename your `.storybook/main.js` to `.storybook/main.ts` and restart your Storybook. + + + + + + + +### Using Storybook API + +You can also use Storybook's API to configure your project with TypeScript. Under the hood, it mirrors the exact configuration you get by default. Below is an abridged Storybook configuration with TypeScript and additional information about each configuration element. + + + + + + +| Configuration element | Description | +| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `stories` | The array of globs that indicates the [location of your story files](#configure-story-loading), relative to `main.ts` | +| `staticDirs` | Sets a list of directories of [static files](./images-and-assets.md#serving-static-files-via-storybook-configuration) to be loaded by Storybook
`staticDirs:['../public']` | +| `addons` | Sets the list of [addons](https://storybook.js.org/addons/) loaded by Storybook
`addons:['@storybook/addon-essentials']` | +| `typescript` | Configures how Storybook handles [TypeScript files](./typescript.md)
`typescript: { check: false, checkOptions: {} }` | +| `framework` | Configures Storybook based on a set of framework-specific settings
`framework:'@storybook/svelte'` | +| `core` | Configures Storybook's internal features.
`core: { builder: 'webpack5' }` | +| `features` | Enables Storybook's additional features.
See table below for a list of available features `features: { storyStoreV7: true }` | +| `refs` | Configures [Storybook composition](../sharing/storybook-composition.md)
`refs:{ example: { title: 'ExampleStorybook', url:'https://your-url.com' } }` | +| `logLevel` | Configures Storybook's logs in the browser terminal. Useful for debugging
`logLevel: 'debug'` | +| `webpackFinal` | Customize Storybook's [Webpack](../builders/webpack.md) setup
`webpackFinal: async (config:any) => { return config; }` | +| `env` | Defines custom Storybook [environment variables](./environment-variables.md#using-storybook-configuration).
`env: (config) => ({...config, EXAMPLE_VAR: 'Example var' }),` | ## Configure story rendering @@ -85,10 +198,10 @@ The `preview.js` file can be an ES module and export the following keys: - `parameters` - an object of global [parameters](../writing-stories/parameters.md#global-parameters) - `globalTypes` - definition of [globalTypes](../essentials/toolbars-and-globals.md#global-types-and-the-toolbar-annotation) -If you’re looking to change how your stories are ordered, read about [sorting stories](../writing-stories/naming-components-and-hierarchy.md#sorting-stories). +If you’re looking to change how to order your stories, read about [sorting stories](../writing-stories/naming-components-and-hierarchy.md#sorting-stories). ## Configure Storybook’s UI -To control the behaviour of Storybook’s UI (the **“manager”**), you can create a `.storybook/manager.js` file. +To control the behavior of Storybook’s UI (the **“manager”**), you can create a `.storybook/manager.js` file. This file does not have a specific API but is the place to set [UI options](./features-and-behavior.md) and to configure Storybook’s [theme](./theming.md). diff --git a/docs/configure/sidebar-and-urls.md b/docs/configure/sidebar-and-urls.md index bcf9cb2d3161..1e301206e38f 100644 --- a/docs/configure/sidebar-and-urls.md +++ b/docs/configure/sidebar-and-urls.md @@ -2,15 +2,15 @@ title: 'Sidebar & URLS' --- -Storybook’s sidebar lists all your stories grouped by component. When you have a lot of components you may wish to also group those components. To do so, you can add the `/` separator to the `title` of your CSF file and Storybook will group the stories into groups based on common prefixes: +Storybook’s sidebar lists all your stories grouped by component. When you have many components, you may also wish to group those components. To do so, you can add the `/` separator to the `title` of your CSF file, and Storybook will group the stories into groups based on common prefixes: ![Storybook sidebar anatomy](./sidebar-anatomy.jpg) -We recommend using a nesting scheme that mirrors the filesystem path of the components. For example, if you have a file `components/modals/Alert.js` name the CSF file `components/modals/Alert.stories.js` and title it `Components/Modals/Alert`. +We recommend using a nesting scheme that mirrors the filesystem path of the components. For example, if you have a file `components/modals/Alert.js`, name the CSF file `components/modals/Alert.stories.js` and title it `Components/Modals/Alert`. ## Roots -By default, Storybook will treat your top-level nodes as “roots”. Roots are displayed in the UI as “sections” of the hierarchy. Lower level groups are displayed as folders: +By default, Storybook will treat your top-level nodes as “roots”. Roots are displayed in the UI as “sections” of the hierarchy. Lower level groups will show up as folders: ![Storybook sidebar story roots](./sidebar-roots.jpg) @@ -26,48 +26,100 @@ If you’d prefer to show top-level nodes as folders rather than roots, you can -## Generating titles based on `__dirname` +## Permalink to stories -As a CSF file is a JavaScript file, the exports (including the default export) can be generated dynamically. In particular you can use the `__dirname` variable to generate the title based on the path name (this example uses the paths.macro): +By default, Storybook generates an `id` for each story based on the component title and the story name. This `id` in particular is used in the URL for each story, and that URL can serve as a permalink (primarily when you [publish](../sharing/publish-storybook.md) your Storybook). + +Consider the following story: -## Permalinking to stories +Storybook's ID-generation logic will give this the `id` `foo-bar--baz`, so the link would be `?path=/story/foo-bar--baz`. -By default, Storybook generates an `id` for each story based on the component title and the story name. This `id` in particular is used in the URL for each story and that URL can serve as a permalink (especially when you [publish](../workflows/publish-storybook.md) your Storybook). +It is possible to manually set the story's id, which is helpful if you want to rename stories without breaking permalinks. Suppose you want to change the position in the hierarchy to `OtherFoo/Bar` and the story name to `Moo`. Here's how to do that: -Consider the following story: + + + + + + +Storybook will prioritize the `id` over the title for ID generation if provided and prioritize the `story.name` over the export key for display. + +## CSF 3.0 auto-titles + +Storybook 6.4 introduced [CSF 3.0](https://storybook.js.org/blog/component-story-format-3-0/) as an experimental feature, allowing you to write stories more compactly. Suppose you're already using this format to write your stories. In that case, you can omit the `title` element from the default export and allow Storybook automatically infer it based on the file's physical location. For example, given the following configuration and story: -Storybook's ID-generation logic will give this the `id` `foo-bar--baz`, so the link would be `?path=/story/foo-bar--baz`. +When Storybook loads, the story can show up in the sidebar as `components/My Component`. + +### Auto-title filename case + +Starting with Storybook 6.5, story titles generated automatically no longer rely on Lodash's [startCase](https://lodash.com/docs/#startCase). +Instead, the file name casing is preserved, allowing additional control over the story title. For example, `components/My Component` will be defined as `components/MyComponent`. -It is possible to manually set the id of a story, which in particular is useful if you want to rename stories without breaking permalinks. Suppose you want to change the position in the hierarchy to `OtherFoo/Bar` and the story name to `Moo`. Here's how to do that: +If you need, you can revert to the previous pattern by adding the following configuration: + + + +### Auto-title redundant filenames + +In addition to improvements to the story file name casing, a new heuristic was introduced, removing redundant names in case the filename has the same name as the directory name, or if it's called `index.stories.js|ts`. For example, before `components/MyComponent/MyComponent.stories.js` was defined as `Components/MyComponent/MyComponent` in the sidebar. Now it will be defined as `Components/MyComponent`. + +If you need to preserve the naming scheme, you can add the `title` element to the default export. For example: + + + + + + + +### Auto-title prefixes + +Additionally, if you customize your Storybook to load your stories based on a [configuration object](./overview.md#with-a-configuration-object), including a `titlePrefix`, Storybook automatically prefixes all titles to matching stories. For example, assuming you have the following configuration: + + + + -Storybook will prioritize the `id` over the title for ID generation, if provided, and will prioritize the `story.name` over the export key for display. +When Storybook generates the titles for all matching stories, they'll retain the `Custom` prefix. diff --git a/docs/configure/story-layout.md b/docs/configure/story-layout.md index 18636441f8fa..8cdb795498f3 100644 --- a/docs/configure/story-layout.md +++ b/docs/configure/story-layout.md @@ -54,4 +54,4 @@ Or even apply it to specific stories like so: ]} /> - + \ No newline at end of file diff --git a/docs/configure/story-rendering.md b/docs/configure/story-rendering.md index f982f42bf27f..f930fe1e3765 100644 --- a/docs/configure/story-rendering.md +++ b/docs/configure/story-rendering.md @@ -2,11 +2,11 @@ title: 'Story rendering' --- -In Storybook, your stories render in a special “preview” iframe (Canvas tab) inside the larger Storybook web application. The JavaScript build configuration of the preview is controlled by a [webpack](./webpack.md) config, but you also may want to directly control the HTML that is rendered to help your stories render correctly. +In Storybook, your stories render in a particular “preview” iframe (Canvas tab) inside the larger Storybook web application. The JavaScript build configuration of the preview is controlled by a [webpack](../builders/webpack.md) config, but you also may want to directly control the rendered HTML to help your stories render correctly. ## Adding to <head> -If you need to add extra elements to the `head` of the preview iframe, for instance to load static stylesheets, font files, or similar, you can create a file called [`.storybook/preview-head.html`](./overview.md#configure-story-rendering) and add tags like this: +If you need to add extra elements to the `head` of the preview iframe, for instance, to load static stylesheets, font files, or similar, you can create a file called [`.storybook/preview-head.html`](./overview.md#configure-story-rendering) and add tags like this: @@ -18,21 +18,19 @@ If you need to add extra elements to the `head` of the preview iframe, for insta -
-Storybook will inject these tags into the _preview iframe_ where your components are rendered not the Storybook application UI. +Storybook will inject these tags into the _preview iframe_ where your components render, not the Storybook application UI.
-It's also possible to programmatically modify the preview head HTML using a preset defined in the `main.js` file. For more information see [Preview/Manager templates](../addons/writing-presets.md#previewmanager-templates). - +It's also possible to modify the preview head HTML programmatically using a preset defined in the `main.js` file. For more information see [Preview/Manager templates](../addons/writing-presets.md#previewmanager-templates). ## Adding to <body> -Sometimes, you may need to add different tags to the ``. This is useful for adding some custom content roots. +Sometimes, you may need to add different tags to the ``. Helpful for adding some custom content roots. -You can accomplish this by creating a file called `preview-body.html` inside your `.storybook` directory and add tags like this: +You can accomplish this by creating a file called `preview-body.html` inside your `.storybook` directory and adding tags like this: @@ -58,8 +56,8 @@ If using relative sizing in your project (like `rem` or `em`), you may update th
-Storybook will inject these tags into the _preview iframe_ where your components are rendered not the Storybook application UI. +Storybook will inject these tags into the _preview iframe_ where your components render, not the Storybook application UI.
-Similarly to the preview head HTML, preview body HTML can also be updated programmtically using a preset. See [Preview/Manager templates](../addons/writing-presets.md#previewmanager-templates) for more information. +Similarly to the preview head HTML, preview body HTML can also be updated programmatically using a preset. See [Preview/Manager templates](../addons/writing-presets.md#previewmanager-templates) for more information. diff --git a/docs/configure/storybook-addons.md b/docs/configure/storybook-addons.md index 1c56f9065d57..21233c31bf3e 100644 --- a/docs/configure/storybook-addons.md +++ b/docs/configure/storybook-addons.md @@ -22,4 +22,4 @@ There are many, many Storybook addons, but they can be roughly categorized into - **Essential** addons are core-team developed addons that are considered a part of the out-of-the-box user experience. These ship by default with new Storybook installations. - **Core** addons are developed by the core team. They are kept in sync with the development of Storybook itself and written in idiomatic ways as templates for other addons. They can be found within the [Storybook monorepo](https://github.com/storybookjs/storybook/tree/next/addons). -- **Community** addons are addons written by the massive Storybook community. They can be found on our [website](/addons), [GitHub](https://github.com/), and [npm](https://www.npmjs.com/). +- **Community** addons are addons written by the massive Storybook community. They can be found on our [website](https://storybook.js.org/addons/), [GitHub](https://github.com/), and [npm](https://www.npmjs.com/). \ No newline at end of file diff --git a/docs/configure/styling-and-css.md b/docs/configure/styling-and-css.md index 5f00aa2c9969..a6c01a6589bf 100644 --- a/docs/configure/styling-and-css.md +++ b/docs/configure/styling-and-css.md @@ -2,34 +2,20 @@ title: 'Styling and CSS' --- -There are many ways to include CSS in a web application, and correspondingly there are many ways to include CSS in Storybook. Usually it is best to try and replicate what your application does with styling in Storybook’s configuration. +There are many ways to include CSS in a web application, and correspondingly there are many ways to include CSS in Storybook. Usually, it is best to try and replicate what your application does with styling in Storybook’s configuration. ### CSS-in-JS -CSS-in-JS libraries are designed to use basic JavaScript. They often work in Storybook without any extra configuration. Some libraries expect components to be rendered in a specific rendering “context” (for example, to provide themes) and you may need to add a [global decorator](../writing-stories/decorators.md#global-decorators) to supply it. +CSS-in-JS libraries are designed to use basic JavaScript, and they often work in Storybook without any extra configuration. Some libraries expect components to render in a specific rendering “context” (for example, to provide themes), and you may need to add a [global decorator](../writing-stories/decorators.md#global-decorators) to supply it. ### Importing CSS files -If your component files import their own CSS, Storybook’s webpack config will work unmodified with some exceptions: +If your component files import their CSS, Storybook's webpack configuration will work out of the box. The noticeable exception to this is if you're using a CSS precompiler. In this case, you can either install and configure a Storybook preset (e.g., [SCSS preset](https://github.com/storybookjs/presets/tree/master/packages/preset-scss)), or customize [Storybook's webpack configuration](../builders/webpack.md#extending-storybooks-webpack-config) and include the appropriate loader. -- If you are using a CSS precompiler, you may need to add a preset (such as the [SCSS preset](https://github.com/storybookjs/presets/tree/master/packages/preset-scss), or add a loader to Storybook’s webpack config). -- In Angular, you'll need to take special care how you handle CSS: + - - Either [customize your webpack config](./webpack#extending-storybooks-webpack-config) - - Or use syntax to use a inline loader: - - - - - - - -To use your CSS in all stories, you simply import it in [`.storybook/preview.js`](./overview.md#configure-story-rendering) +To use your CSS in all stories, you import it in [`.storybook/preview.js`](./overview.md#configure-story-rendering) ### Adding webfonts -If you need webfonts to be available, you may need to add some code to the [`.storybook/preview-head.html`](./story-rendering.md#adding-to-head) file. We recommend including any assets with your Storybook if possible, in which case you likely want to configure the [static file location](./images-and-assets#serving-static-files-via-storybook). +If you need webfonts to be available, you may need to add some code to the [`.storybook/preview-head.html`](./story-rendering.md#adding-to-head) file. We recommend including any assets with your Storybook if possible, in which case you likely want to configure the [static file location](./images-and-assets.md#serving-static-files-via-storybook-configuration). diff --git a/docs/configure/telemetry.md b/docs/configure/telemetry.md new file mode 100644 index 000000000000..3a4ad9b2003f --- /dev/null +++ b/docs/configure/telemetry.md @@ -0,0 +1,181 @@ +--- +title: 'Telemetry' +--- + +Storybook collects completely anonymous data to help us improve user experience. Participation in this anonymous program is optional, and you may opt-out if you'd not like to share any information. + +## Why is telemetry collected? + +Hundreds of thousands of developers use Storybook daily to build, test, and document components. Storybook is framework agnostic and integrates with the front-end ecosystem: + +- **JavaScript frameworks** such as [React](https://reactjs.org/), [Vue](https://vuejs.org/), and [Svelte](https://svelte.dev/) +- **Libraries** such as [Styled-Components](https://styled-components.com/), [Tailwind](https://tailwindcss.com/), [Redux](https://redux.js.org/) +- **Design tools** such as [Figma](https://figma.com/), [Sketch](https://www.sketch.com/), [Zeplin](https://zeplin.io/) and [InVision](https://www.invisionapp.com/) +- **Workflow tools** such as [Notion](https://www.notion.so/product), [Confluence](https://www.atlassian.com/software/confluence), and [Jira](https://www.atlassian.com/software/jira) + +In the past, our improvement process relied on manually gathering feedback. But with a growing userbase and the need to support a wide variety of integrations, we need a more accurate method for gauging Storybook usage and pain points. + +These telemetry data help us (the maintainers) to prioritize the highest impact projects. That allows us to keep up with trends in the front-end ecosystem and verify that our community's hard work achieves the intended result. + +## What is being collected? + +We collect general usage details, including command invocation, Storybook version, addons, and the view layer. + +Specifically, we track the following information in our telemetry events: + +- Timestamp of the occurrence. +- Command invoked (e.g., `init`, `upgrade`, `start-storybook`). +- Storybook unique identifier: One-way hash generated during Storybook installation process. +- One way hash of the IP address where the event occurred for spam detection. +- Story count. +- Storybook version. +- Storybook metadata: + - Language (e.g., TypeScript, JavaScript). + - Supported view layers (e.g., React, Vue, Angular, Svelte). + - Builder (e.g., Webpack4, Webpack5, Vite). + - Meta framework (e.g., [Next](https://nextjs.org/), [Gatsby](https://www.gatsbyjs.com/), [CRA](https://create-react-app.dev/)). + - [Addons](https://storybook.js.org/addons/) (e.g., [Essentials](../essentials/introduction.md), [Accessibility](https://storybook.js.org/addons/@storybook/addon-a11y/)). + - [Feature flags](./overview.md#feature-flags) (e.g., `buildStoriesJson`). +- Package manager information (e.g., `npm`, `yarn`). +- Monorepo information (e.g., [NX](https://nx.dev/), [Turborepo](https://turborepo.org/)). +- Whether the command was invoked on CI or not. + +Access to the raw data is highly controlled, limited to select members of Storybook's core team who maintain the telemetry. We cannot identify individual users from the dataset: it is anonymized and untraceable back to the user. + +## What about sensitive information? + +We take your privacy and our security very seriously. We perform additional steps to ensure that secure data (e.g., environment variables or other forms of sensitive data) **do not** make their way into our analytics. You can view all the information we collect by setting the `STORYBOOK_TELEMETRY_DEBUG` to `1` to print out the information gathered. For example: + + + + + + + +Will generate the following output: + +```json +{ + "anonymousId": "8bcfdfd5f9616a1923dd92adf89714331b2d18693c722e05152a47f8093392bb", + "eventType": "start", + "payload": { + "storyIndex": { + "storyCount": 4, + "version": 3 + } + }, + "inCI": false, + "metadata": { + "generatedAt": 1648233198722, + "builder": { + "name": "webpack4" + }, + "hasCustomBabel": false, + "hasCustomWebpack": true, + "hasStaticDirs": true, + "hasStorybookEslint": false, + "refCount": 0, + "metaFramework": { + "name": "CRA", + "packageName": "react-scripts", + "version": "4.0.3" + }, + "packageManager": { + "name": "yarn", + "version": "3.1.1", + }, + "monorepo": "Nx", + "features": { + "buildStoriesJson": true + }, + "storybookVersion": "6.5.0", + "language": "typescript", + "storybookPackages": { + "@storybook/addons": { + "version": "6.5.0" + }, + "@storybook/builder-webpack4": { + "version": "6.5.0" + }, + "@storybook/react": { + "version": "6.5.0" + } + }, + "framework": { + "name": "react" + }, + "addons": { + "@storybook/preset-create-react-app": { + "version": "3.2.0" + }, + "@storybook/addon-ie11": { + "version": "0.0.7--canary.5e87b64.0" + }, + "@storybook/addon-essentials": { + "options": { + "viewport": false + }, + "version": "6.5.0" + } + } + } +} +``` + +## Will this data be shared? + +The data we collect is anonymous, not traceable to the source, and only meaningful in aggregate form. No data we collect is personally identifiable. +In the future, we plan to share relevant data with the community through public dashboards (or similar data representation formats). + +## How to opt-out + +You may opt-out of the telemetry by setting Storybook's configuration element `disableTelemetry` to `true`, using the `--disable-telemetry` flag, or setting the environment variable`STORYBOOK_DISABLE_TELEMETRY` to `1`. For example: + + + + + + + +## Crash reports (disabled by default) + +In addition to general usage telemetry, you may also choose to share crash reports. Storybook will then sanitize the error object (removing all user paths) and append it to the telemetry event. To enable crash reporting, you can set the `enableCrashReports` configuration element to `true`, using the `--enable-crash-reports` flag, or set the `STORYBOOK_ENABLE_CRASH_REPORTS` environment variable to `1`. For example: + + + + + + + +Generates the following item in the telemetry event: + + + + + + diff --git a/docs/configure/theming.md b/docs/configure/theming.md index 076b170cc0d2..55e8118bb38f 100644 --- a/docs/configure/theming.md +++ b/docs/configure/theming.md @@ -8,7 +8,7 @@ Storybook is theme-able using a lightweight theming API. It's possible to theme Storybook globally. -Storybook includes two themes that look good out of the box: "normal" (a light theme) and "dark" (a dark theme). Unless you've set your preferred color scheme as dark, Storybook will use the light theme as default. +Storybook includes two themes that look good out of the box: "light" and "dark". Unless you've set your preferred color scheme as dark, Storybook will use the light theme as default. Make sure you have installed [`@storybook/addons`](https://www.npmjs.com/package/@storybook/addons) and [`@storybook/theming`](https://www.npmjs.com/package/@storybook/theming) packages. @@ -32,7 +32,7 @@ When setting a theme, set a complete theme object. The theme is replaced, not co ## Theming docs -[Storybook Docs](../writing-docs/introduction) uses the same theme system as Storybook’s UI but is themed independently from the main UI. +[Storybook Docs](../writing-docs/introduction.md) uses the same theme system as Storybook’s UI but is themed independently from the main UI. Supposing you have a Storybook theme defined for the main UI in [`.storybook/manager.js`](./overview.md#configure-story-rendering): @@ -82,9 +82,10 @@ Inside your `.storybook` directory, create a new file called `YourTheme.js` and Above, we're creating a new theme that will: -- Use Storybook's `light` theme as a baseline. -- Replace Storybook's logo in the sidebar with our own (defined in the brandImage variable). -- Add custom branding information. +- Use Storybook's `light` theme as a baseline. +- Replace Storybook's logo in the sidebar with our own (defined in the brandImage variable). +- Add custom branding information. +- Set the brand link to open in the same window (as opposed to a new one), via the `target` attribute. Finally, we'll need to import the theme into Storybook. Create a new file called `manager.js` in your `.storybook` directory and add the following: @@ -116,8 +117,8 @@ Let's take a look at a more complex example. Copy the code below and paste it in Above, we're updating the theme with the following changes: -- A custom color palette (defined in the `app` and `color` variables). -- Custom fonts (defined in the `font` and `text` variables). +- A custom color palette (defined in the `app` and `color` variables). +- Custom fonts (defined in the `font` and `text` variables). With the new changes introduced, the custom theme should yield a similar result. @@ -131,7 +132,7 @@ The `@storybook/theming` package is built using TypeScript, which should help cr ## CSS escape hatches -The Storybook theme API is narrow by design. If you want to have fine-grained control over the CSS, all UI and Docs components are tagged with class names to make this possible. This is advanced usage: **use at your own risk**. +The Storybook theme API is narrow by design. If you want to have fine-grained control over the CSS, all UI and Docs components are tagged with class names to make this possible. **Use at your own risk** as this is an advanced feature. To style these elements, insert style tags into: @@ -146,7 +147,7 @@ To style these elements, insert style tags into: ## MDX component overrides -If you're using MDX for docs, there's one more level of "themability". MDX allows you to completely override the components that are rendered from Markdown using a components parameter. It's an advanced usage that we don't officially support in Storybook, but it's a powerful mechanism if you need it. +If you're using MDX for docs, there's one more level of "themability". MDX allows you to completely override the rendered components from Markdown using a `components` parameter. It's an advanced usage that we don't officially support in Storybook, but it's a powerful construct if you need it. Here's how you might insert a custom code renderer for `code` blocks on the page, in [`.storybook/preview.js`](./overview.md#configure-story-rendering): @@ -226,4 +227,4 @@ Or with template literals: ]} /> - \ No newline at end of file + diff --git a/docs/configure/typescript.md b/docs/configure/typescript.md index 353d8dda80e5..0dd59c3162bc 100644 --- a/docs/configure/typescript.md +++ b/docs/configure/typescript.md @@ -2,11 +2,11 @@ title: 'TypeScript' --- -Storybook has built-in Typescript support, so your Typescript project should work with zero configuration needed. +Storybook has built-in TypeScript support, so your TypeScript project should work with zero configuration needed. ### Default configuration -The base Typescript configuration uses [`babel-loader`](https://webpack.js.org/loaders/babel-loader/) for Typescript transpilation, and optionally fork-ts-checker-webpack-plugin for checking. +The base TypeScript configuration uses [`babel-loader`](https://webpack.js.org/loaders/babel-loader/) for TypeScript transpilation, and optionally fork-ts-checker-webpack-plugin for checking. Each framework uses the base configuration unless otherwise specified: @@ -16,9 +16,9 @@ Each framework uses the base configuration unless otherwise specified: ### Main.js configuration -To make it easier to configure Typescript handling, use the `typescript` field in your [`.storybook/main.js`](./overview.md#configure-story-rendering). +To make it easier to configure TypeScript handling, use the `typescript` field in your [`.storybook/main.js`](./overview.md#configure-story-rendering). -The following code snippets shows the fields for you to use with TypeScript: +The following code snippets show the fields for you to use with TypeScript: @@ -30,22 +30,20 @@ The following code snippets shows the fields for you to use with TypeScript: -| Field | Framework | Description | Type | -| :------------------------------- | :-------- | :------------------------------------------------------------------------------------------ | :----------------------------------------------------------------------------------------------------- | -| **check** | All | Optionally run fork-ts-checker-webpack-plugin | boolean | +| Field | Framework | Description | Type | +| :------------------------------- | :-------- | :------------------------------------------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------- | +| **check** | All | Optionally run fork-ts-checker-webpack-plugin | boolean | | **checkOptions** | All | Options to pass to fork-ts-checker-webpack-plugin if it's enabled | See Docs | -| **reactDocgen** | React | Which react docgen processor to run: `"react-docgen-typescript"`, `"react-docgen"`, `false` | string or false | -| **reactDocgenTypescriptOptions** | React | Options to pass to react-docgen-typescript-plugin if react-docgen-typescript is enabled. | [See docs](https://github.com/hipstersmoothie/react-docgen-typescript-plugin) | - - +| **reactDocgen** | React | Which react docgen processor to run: `"react-docgen-typescript"`, `"react-docgen"`, `false` | string or false | +| **reactDocgenTypescriptOptions** | React | Options to pass to react-docgen-typescript-plugin if react-docgen-typescript is enabled. | [See docs](https://github.com/hipstersmoothie/react-docgen-typescript-plugin) | ### Overriding the configuration to infer additional props -The configuration provided above will remove any props from any third party libraries. +The configuration provided above will remove any props from any third-party libraries. -If it's required you can adjust the configuration and include the extra props. +If required, you can adjust the configuration and include the extra props. -Adjust the configuration as shown below and any third party props will be displayed as soon as you restart your Storybook. +Adjust the configuration as demonstrated below. And the next time you restart your Storybook, the extra props will also be in the UI. @@ -57,8 +55,6 @@ Adjust the configuration as shown below and any third party props will be displa -Next time you restart your Storybook the extra props will also be in the UI. -
-If you run into an issue where the extra props aren't included, check how your component is being exported. If it's using a default export, change it to a named export and the extra props will be included as well. -
\ No newline at end of file +If you run into an issue where any additional props don't show up, check your component's code. If you're using a default export, change it to a named export, and doing that will ensure that the additional props are included. +
diff --git a/docs/configure/upgrading.md b/docs/configure/upgrading.md index 2bbecc54ac18..08ac9d49be0a 100644 --- a/docs/configure/upgrading.md +++ b/docs/configure/upgrading.md @@ -2,35 +2,35 @@ title: 'Upgrading Storybook' --- -The frontend ecosystem is a fast-moving place. Regular dependency upgrades are a way of life, whether it's upgrading a framework, library, tooling, or all of the above! Storybook provides a few resources to help ease the pain of upgrading. +The frontend ecosystem is a fast-moving place. Regular dependency upgrades are a way of life, whether upgrading a framework, library, tooling, or all of the above! Storybook provides a few resources to help ease the pain of upgrading. ## Upgrade script -The most common upgrade is Storybook itself. [Storybook releases](/releases) follow [Semantic Versioning](https://semver.org/). We publish patch releases with bugfixes continuously, minor versions of Storybook with new features every few months, and major versions of Storybook with breaking changes roughly once per year. +The most common upgrade is Storybook itself. [Storybook releases](https://storybook.js.org/releases) follow [Semantic Versioning](https://semver.org/). We publish patch releases with bug fixes continuously, minor versions of Storybook with new features every few months, and major versions of Storybook with breaking changes roughly once per year. To help ease the pain of keeping Storybook up-to-date, we provide a command-line script: ```sh -npx sb upgrade +npx storybook upgrade ``` -This upgrades all of the Storybook packages in your project to the latest stable version, performs confidence checks of your package versions, and checks for opportunities to run [automigrations](#automigrate) to automatically update your configuration. +This upgrades all of the Storybook packages in your project to the latest stable version, perform confidence checks of your package versions, and checks for opportunities to run [automigrations](#automigrate) to update your configuration automatically.
-In addition to running the command, we also recommend skimming [MIGRATION.md](https://github.com/storybookjs/storybook/blob/next/MIGRATION.md), an exhaustive log of relevant changes and deprecations that might affect your upgrade. +In addition to running the command, we also recommend checking the [MIGRATION.md file](https://github.com/storybookjs/storybook/blob/next/MIGRATION.md), for the detailed log of relevant changes and deprecations that might affect your upgrade.
## Automigrate script -Storybook upgrades are not the only thing to consider: changes in the ecosystem also present challenges. For example, lots of frameworks ([Angular 12](https://angular.io/guide/updating-to-version-12#breaking-changes-in-angular-version-12), [Create React App v5](https://github.com/facebook/create-react-app/pull/11201), [NextJS](https://nextjs.org/docs/upgrading#webpack-5)) have recently migrated from [webpack 4 to webpack 5](https://webpack.js.org/migrate/5/), so even if you don't upgrade your Storybook version, you might need to update your configuration accordingly. That's what Automigrate is for: +Storybook upgrades are not the only thing to consider: changes in the ecosystem also present challenges. For example, lots of frameworks ([Angular 12](https://angular.io/guide/updating-to-version-12#breaking-changes-in-angular-version-12), [Create React App v5](https://github.com/facebook/create-react-app/pull/11201), [NextJS](https://nextjs.org/docs/upgrading#webpack-5)) have recently migrated from [Webpack 4 to Webpack 5](https://webpack.js.org/migrate/5/), so even if you don't upgrade your Storybook version, you might need to update your configuration accordingly. That's what Automigrate is for: ``` -npx sb@next automigrate +npx storybook@next automigrate ``` -This runs a set of common configuration checks, explains what is potentially out-of-date, and offers to fix it for you automatically. It also points to the relevant documentation so you can learn more. This gets run automatically as part of [`sb upgrade`](#upgrade-script), but it's also available on its own in case you don't want to upgrade Storybook. +It runs a set of standard configuration checks, explains what is potentially out-of-date, and offers to fix it for you automatically. It also points to the relevant documentation so you can learn more. It runs automatically as part of [`storybook upgrade`](#upgrade-script) command, but it's also available on its own if you don't want to upgrade Storybook. ## Prereleases @@ -39,7 +39,13 @@ In addition to the above, Storybook is under constant development, and we publis To upgrade to the latest pre-release: ```sh -npx sb@next upgrade --prerelease +npx storybook@next upgrade --prerelease ``` If you'd like to downgrade to a stable version, manually edit the package version numbers in your `package.json` and re-install. + +
+ +Storybook collects completely anonymous data to help us improve user experience. Participation is optional, and you may [opt-out](../configure/telemetry.md#how-to-opt-out) if you'd not like to share any information. + +
diff --git a/docs/configure/webpack.md b/docs/configure/webpack.md index 23a5c3762b5f..c156547d953e 100644 --- a/docs/configure/webpack.md +++ b/docs/configure/webpack.md @@ -2,7 +2,7 @@ title: 'Webpack' --- -Storybook displays your components in a custom web application built using [Webpack](https://webpack.js.org/). Webpack is a complex tool, but our default configuration is intended to cover most use cases. [Addons](/addons) are also available that extend the configuration for other common use cases. +Storybook displays your components in a custom web application built using [Webpack](https://webpack.js.org/). Webpack is a complex tool, but our default configuration is intended to cover most use cases. [Addons](https://storybook.js.org/addons/) are also available that extend the configuration for other everyday use cases. You can customize Storybook's webpack setup by providing a `webpackFinal` field in [`.storybook/main.js`](./overview.md#configure-your-storybook-project) file. @@ -40,19 +40,88 @@ You can import `.json` files and have them expanded to a JavaScript object: -If you want to know the exact details of the webpack config, the best way is to run: +If you want to know the exact details of the webpack config, the best way is to run either of the following: ```shell -yarn storybook --debug-webpack + +## Development mode +yarn start-storybook --debug-webpack + +## Production mode +yarn build-storybook --debug-webpack ``` +### Bundle splitting + +Starting with Storybook 6.4, [bundle splitting](https://v4.webpack.js.org/guides/code-splitting/) is supported through a configuration flag. Update your Storybook configuration and add the `storyStoreV7` flag: + + + + + + + +When you start your Storybook, you'll see an improvement in loading times. Read more about it in the [announcement post](https://storybook.js.org/blog/storybook-on-demand-architecture/) and the [configuration documentation](./overview.md#on-demand-story-loading). + +### Webpack 5 + +Storybook builds your project with Webpack 4 by default. If your project uses Webpack 5, you can opt into the Webpack 5 builder by installing the required dependencies (i.e., `@storybook/builder-webpack5`, `@storybook/manager-webpack5`) and update your Storybook configuration as follows: + + + + + + + +Once you are using Webpack 5, you can further opt into some features to optimize your build: + +#### Lazy Compilation + +Storybook supports Webpack's experimental [lazy compilation](https://webpack.js.org/configuration/experiments/#experimentslazycompilation) feature, via the `lazyCompilation` builder flag: + + + + + + + +This feature applies in development mode, and will mean your Storybook will start up faster, at the cost of slightly slower browsing time when you change stories. + +#### Filesystem Caching + +Storybook supports Webpack's [filesystem caching](https://webpack.js.org/configuration/cache/#cachetype) feature, via the `fsCache` builder flag: + + + + + + + +This feature will mean build output is cached between runs of Storybook, speeding up subsequent startup times. + ### Extending Storybook’s webpack config To extend the above configuration, use the `webpackFinal` field of [`.storybook/main.js`](./overview.md#configure-story-rendering). The value should export a `function`, which will receive the default config as its first argument. The second argument is an options object from Storybook, and this will have information about where config came from, whether we're in production or development mode, etc. -For example, here's a `.storybook/main.js` to add [Sass](https://sass-lang.com/) support: +For example, if you wanted to add [Sass](https://sass-lang.com/) support, you can adjust your configuration as such: @@ -104,12 +173,12 @@ The following code snippet shows how you can replace the loaders from Storybook
-💡 Note: Projects initialized via generators (e.g, Vue CLI) may require that you import their own webpack config file (i.e., /projectRoot/node_modules/@vue/cli-service/webpack.config.js) to use a certain feature with Storybook. For other generators, make sure to check the documentation for instructions. +💡 Projects initialized via generators (e.g, Vue CLI) may require that you import their own webpack config file (i.e., /projectRoot/node_modules/@vue/cli-service/webpack.config.js) to use a certain feature with Storybook. For other generators, make sure to check the documentation for instructions.
### TypeScript Module Resolution -When working with TypeScript projects the default Webpack configuration may fail to resolve module aliases defined in your [`tsconfig` file](https://www.typescriptlang.org/tsconfig). To work around this issue you may use [`tsconfig-paths-webpack-plugin`](https://github.com/dividab/tsconfig-paths-webpack-plugin#tsconfig-paths-webpack-plugin) while [extending Storybook's Webpack config](#extending-storybooks-webpack-config) like: +When working with TypeScript projects, the default Webpack configuration may fail to resolve module aliases defined in your [`tsconfig` file](https://www.typescriptlang.org/tsconfig). To work around this issue you may use [`tsconfig-paths-webpack-plugin`](https://github.com/dividab/tsconfig-paths-webpack-plugin#tsconfig-paths-webpack-plugin) while [extending Storybook's Webpack config](#extending-storybooks-webpack-config) like: @@ -123,4 +192,4 @@ When working with TypeScript projects the default Webpack configuration may fail
💡 Learn more about Storybook's built-in TypeScript support or see this issue for more information. -
\ No newline at end of file +
diff --git a/docs/contribute/code.md b/docs/contribute/code.md index fd73f64cf261..d59237c6fe1d 100644 --- a/docs/contribute/code.md +++ b/docs/contribute/code.md @@ -6,18 +6,21 @@ Contribute a new feature or bug fix to [Storybook's monorepo](https://github.com ## Initial setup -First [fork](https://docs.github.com/en/github/getting-started-with-github/quickstart/fork-a-repo) the Storybook repository then clone and build your fork locally. Run the following commands: +Start by [forking](https://docs.github.com/en/github/getting-started-with-github/quickstart/fork-a-repo) the Storybook monorepo and cloning it locally. ```shell git clone https://github.com/your-username/storybook.git -cd storybook -yarn -yarn bootstrap --core +``` + +Navigate to the `storybook` directory and install the required dependencies with the following commands: + +```shell +yarn && yarn bootstrap --core ``` ## Run tests & examples -Once you've completed the [initial setup](#run-tests-&-examples), you should have a fully functional version of Storybook built on your local machine. Before making any code changes, it's helpful to verify that everything is working as it should. More specifically, the test suite and examples. +Once you've completed the [initial setup](#initial-setup), you should have a fully functional version of Storybook built on your local machine. Before making any code changes, it's helpful to verify that everything is working as it should. More specifically, the test suite and examples. Run the following command to execute the tests: @@ -28,8 +31,7 @@ yarn test Once the tests finish, check if the examples are working with the following commands: ```shell -cd examples/cra-ts-essentials -yarn storybook +cd examples/cra-ts-essentials && yarn storybook ```
@@ -59,7 +61,9 @@ yarn build When asked if you want to start the build in `watch` mode, answer **yes** to develop in interactive mode. Afterward, choose which packages you want to build. For example, if you're going to work on a feature for `@storybook/addon-docs`, you might want to select `@storybook/addon-docs` and `@storybook/components`.
-💡 Build's `watch' mode is great for interactive development. However, for performance reasons it only transpiles your code and doesn't execute the TypeScript compiler. If something isn't working as expected, try running `build` WITHOUT watch mode: it will re-generate TypeScript types and also perform type checking for you. + +💡 Build's `watch` mode is great for interactive development. However, for performance reasons it only transpiles your code and doesn't execute the TypeScript compiler. If something isn't working as expected, try running `build` WITHOUT watch mode: it will re-generate TypeScript types and also perform type checking for you. +
![Storybook package selector](./storybook-build-packages-selection-optimized.png) @@ -92,11 +96,19 @@ Unit tests ensure that Storybook doesn't break accidentally. If your code can re | +-- [filename].test.ts ``` +### End-to-end tests (e2e) + +Storybook's monorepo is set up to rely on end-to-end testing with [Cypress](https://www.cypress.io/) during CI. To help with testing, we encourage running this test suite before submitting your contribution. Detailed below are some steps you can take: + +1. Ensure you have Storybook successfully built in your local branch (i.e., run `yarn bootstrap --core`) +2. Open a terminal and run `yarn local-registry --port 6000 --open --publish` to publish Storybook's packages into a local registry. +3. In a second terminal, set up a reproduction using the local registry and run the Cypress tests with `yarn test:e2e-framework`. + ## Submit a pull request Before submitting your contribution, run the test suite one last time with: -```sh +```shell yarn test ``` @@ -123,28 +135,28 @@ We encourage bug reports to include reproductions. In the same way that it's pos To do so, run the following command in the root of the monorepo: -```sh -npx sb@next link https://github.com/your-username/your-project.git +```shell +npx storybook@next link https://github.com/your-username/your-project.git ``` This command creates a project `../storybook-repros/your-project`, and automatically links it to your local Storybook code. After connecting it, you should be able to run Storybook and develop as mentioned [above](#start-developing). If you already have a reproduction on your local machine, you can similarly link it to your monorepo dev setup with the `--local` flag: -```sh -npx sb@next link --local /path/to/local-repro-directory +```shell +npx storybook@next link --local /path/to/local-repro-directory ```
-💡 The `sb link` command relies on `yarn 2` linking under the hood. It requires that the local repro is using `yarn 2`, which will be the case if you're using the [`sb repro` command](./how-to-reproduce) per our contributing guidelines. If you are trying to link to a non-`yarn 2` project, linking will fail. +💡 The storybook link command relies on yarn 2 linking under the hood. It requires that the local repro is using yarn 2, which will be the case if you're using the [storybook repro command](./how-to-reproduce) per our contributing guidelines. If you are trying to link to a non-yarn 2 project, linking will fail.
## Troubleshooting
-`yarn dev` watches everything but is resource-intensive +yarn build --all --watch watches everything but is resource-intensive -It's troublesome to know which packages you're going to change ahead of time, and watching all of them can be highly demanding, even on modern machines. If you're working on a powerful enough machine, you can use `yarn dev` instead of `yarn build`. +It's troublesome to know which packages you're going to change ahead of time, and watching all of them can be highly demanding, even on modern machines. If you're working on a powerful enough machine, you can use `yarn build --all --watch` instead of `yarn build`.
diff --git a/docs/contribute/how-to-contribute.md b/docs/contribute/how-to-contribute.md index 606f68e49667..894cb309f598 100644 --- a/docs/contribute/how-to-contribute.md +++ b/docs/contribute/how-to-contribute.md @@ -12,11 +12,16 @@ In the interest of fostering an open and welcoming environment, we as contributo - [**Code**](./code.md): Features, bug fixes, dependency updates - [**Docs**](./documentation-updates.md): Typos, clarifications -- [**Integrations**](./../api/new-frameworks): Integrate Storybook with your favorite library -- [**Addons**](./../addons/introduction): Build an addon and share it with the community +- [**Integrations**](./../api/new-frameworks.md): Integrate Storybook with your favorite library +- [**Addons**](./../addons/introduction.md): Build an addon and share it with the community +- [**Examples**](https://github.com/storybookjs/storybook/tree/next/examples/official-storybook): Add an example/test for a feature ## Not sure how to get started? - [Chat in Discord #contributing](https://discord.gg/storybook) - [Browse "good first issues" to fix](https://github.com/storybookjs/storybook/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) - [Submit a bug report or feature request](https://github.com/storybookjs/storybook/issues) + +## Additional resources + +- [**Official Storybook**](https://next--storybookjs.netlify.app/official-storybook/): The Storybook we use to build Storybook diff --git a/docs/contribute/how-to-reproduce.md b/docs/contribute/how-to-reproduce.md index 35f873c11bc9..2936c2be92a7 100644 --- a/docs/contribute/how-to-reproduce.md +++ b/docs/contribute/how-to-reproduce.md @@ -3,21 +3,29 @@ title: 'Create a reproduction' --- A reproducible test case lets you isolate the cause of a problem, which is the first step towards fixing it! This page outlines how to get set up to create a reproduction. - + ## Why should you create a reproduction? A reproducible test case is a great way to share a specific set of conditions that causes a bug. It allows both the maintainers and the community to verify, narrow down the cause of the problem and help you fix the issue. -## Initial setup +## Pre-requisites + +Make sure you have: + +- Installed [`Yarn`](https://yarnpkg.com/) on your local development machine. +- A [GitHub account](https://github.com/signup) for hosting the reproduction's code. +- A [Chromatic account](https://www.chromatic.com/start) for publishing your Storybook. + +## Initial setup First, open a terminal and run the following command: ```shell -npx sb@next repro +npx storybook@next repro ```
-💡 Note: You can add the --template flag to include a custom template. +💡 You can add the --template flag to include a custom template.
Next, select the framework, for example, `react`: @@ -33,24 +41,24 @@ Finally, enter a location for your reproduction: ![Storybook reproduction location](./storybook-reproduction-generator-location-optimized.png)
-💡 Note: If you don't provide a full path for the reproduction it will be generated in the current directory. +💡 If you don't provide a full path for the reproduction it will be generated in the current directory.
If everything worked as it should, you should have a fully functional Storybook set up in your local environment. ## Third-party dependencies & addons -Before adding code, install and configure any necessary packages. For example, if you run into a problem with a CSS framework (e.g., [Tailwind](https://tailwindcss.com/)), you should install and configure it. +Before adding code, install and configure any necessary packages. For example, if you run into a problem with a CSS framework (e.g., [Tailwind](https://tailwindcss.com/)), you should install and configure it. -Install and configure any Storybook [addons](/addons) that relate to the issue (e.g.,`@storybook/addon-a11y`). +Install and configure any Storybook [addons](https://storybook.js.org/addons/) that relate to the issue (e.g.,`@storybook/addon-a11y`). ## Add stories -Any Storybook reproduction wouldn't be complete without [stories](../writing-stories/introduction.md). To help fix your issue faster, we encourage you to include the minimum amount of stories that will replicate your issue. +Any Storybook reproduction wouldn't be complete without [stories](../writing-stories/introduction.md). To help fix your issue faster, we encourage you to include the minimum amount of stories that will replicate your issue. ## Host -When you've finished your work, you'll need to host your reproduction. Start by signing into GitHub.com and create a [new repository](https://github.com/new). +When you've finished your work, you'll need to host your reproduction. Start by signing into GitHub.com and create a [new repository](https://github.com/new). ![github repository for reproductions](./github-new-repository-reproduction-optimized.png) @@ -64,15 +72,14 @@ Then, follow GitHub's instructions to set up the repository. ## Publish -An excellent way to check your reproduction is to have it deployed online. We recommend [Chromatic](https://www.chromatic.com/), a free publishing service created by the Storybook maintainers. It allows you to deploy and host your reproduction safely and securely in the cloud. +An excellent way to check your reproduction is to have it deployed online. We recommend [Chromatic](https://www.chromatic.com/), a free publishing service created by the Storybook maintainers. It allows you to deploy and host your reproduction safely and securely in the cloud. ### Helpful resources when working with Chromatic -- [Publish Storybook](../workflows/publish-storybook.md) +- [Publish Storybook](../sharing/publish-storybook.md) - [Setup Chromatic](https://www.chromatic.com/docs/setup) - [Automate Chromatic with continuous integration](https://www.chromatic.com/docs/ci) - ## Submit the issue Finally, create your issue in the [Storybook issue tracker](https://github.com/storybookjs/storybook/issues/new/choose), go through the required steps, and provide a detailed description of the problem. Add the GitHub repository and [deployed reproduction](https://www.chromatic.com/docs/setup#view-published-storybook) to help with the triage process. diff --git a/docs/contribute/new-snippets.md b/docs/contribute/new-snippets.md index 19970f08f33b..35a88ea36834 100644 --- a/docs/contribute/new-snippets.md +++ b/docs/contribute/new-snippets.md @@ -10,12 +10,12 @@ Storybook maintains code snippets for a [variety of frameworks](./../api/framewo We welcome community contributions to the code snippets. Here's a matrix of the frameworks we have snippets for. Help us add snippets for your favorite framework. -| React | Vue | Angular | Web Components | Svelte | Ember | HTML | Mithril | Marko | Riot | Preact | Rax | -| ---------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------- | ----- | ---- | ------- | ----- | ---- | ------ | --- | -| [✅](https://github.com/storybookjs/storybook/tree/next/docs/snippets/react) | [✅](https://github.com/storybookjs/storybook/tree/next/docs/snippets/vue) | [✅](https://github.com/storybookjs/storybook/tree/next/docs/snippets/angular) | [✅](https://github.com/storybookjs/storybook/tree/next/docs/snippets/web-components) (See note) | [✅](https://github.com/storybookjs/storybook/tree/next/docs/snippets/svelte) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | +| React | Vue | Angular | Web Components | Svelte | Ember | HTML | Preact | +| ---------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----- | ---- | ------ | +| [✅](https://github.com/storybookjs/storybook/tree/next/docs/snippets/react) | [✅](https://github.com/storybookjs/storybook/tree/next/docs/snippets/vue) | [✅](https://github.com/storybookjs/storybook/tree/next/docs/snippets/angular) | [✅](https://github.com/storybookjs/storybook/tree/next/docs/snippets/web-components) (See below) | [✅](https://github.com/storybookjs/storybook/tree/next/docs/snippets/svelte) | ❌ | ❌ | ❌ |
-💡 Note: The Web Components snippets are present but not fully documented. If you're willing to help, submit a pull request. +💡 The Web Components snippets are present but not fully documented. If you're willing to help, submit a pull request.
## Setup @@ -80,7 +80,7 @@ Create the file `ember/your-component.js.mdx`, similar to the other frameworks, ```
-💡 Note: Code snippets are divided into various file extensions, if you're contributing a TypeScript file use .ts.mdx, or if you're adding MDX files use .mdx.mdx . +💡 Code snippets are divided into various file extensions, if you're contributing a TypeScript file use .ts.mdx, or if you're adding MDX files use .mdx.mdx .
Go through the rest of the documentation and repeat the process. @@ -89,11 +89,15 @@ Go through the rest of the documentation and repeat the process. Before submitting your contribution, we advise you to check your work against the Storybook website. Doing this prevents last-minute issues with the documentation and is also an excellent way for the maintainers to merge faster once you submit the pull request. However, failing to do so will lead one of the maintainers to notify you that your contribution has an issue. -Start by forking [frontpage repo](https://github.com/storybookjs/frontpage). Then, clone and install the dependencies with the following commands: +Start by forking [frontpage repo](https://github.com/storybookjs/frontpage) and cloning it locally. ```shell git clone https://github.com/your-username/frontpage.git -cd frontpage +``` + +Navigate to the `frontpage` directory and install the required dependencies with the following command: + +```shell yarn ``` @@ -110,7 +114,7 @@ yarn start:skip-addons ```
-💡 Note: During the start process if there's an issue with the the documentation, the process will stop and you'll get a notification. +💡 During the start process if there's an issue with the documentation, the process will stop and you'll get a notification.
Open a browser window to `http://localhost:8000`, click the Docs link, and select your framework from the dropdown. diff --git a/docs/essentials/actions.md b/docs/essentials/actions.md index af0514f1a163..aeec1b2d1e50 100644 --- a/docs/essentials/actions.md +++ b/docs/essentials/actions.md @@ -17,7 +17,7 @@ Actions work via supplying special Storybook-generated “action” arguments (r ### Action argType annotation -You can use [argTypes](../api/argtypes.md) to tell Storybook that an arg to your story should be an action. Usually it makes sense to do this at the component level (although it can be done per story): +You can use [argTypes](../api/argtypes.md) to tell Storybook that an arg to your story should be an action. Usually, it makes sense to do this at the component level (although you can apply it per individual story): @@ -30,13 +30,25 @@ You can use [argTypes](../api/argtypes.md) to tell Storybook that an arg to your -When Storybook sees this argType it will create an arg that is set to a special “action” callback. If your component calls this arg (based on user interaction) the event will show up in the action panel: +When Storybook sees this argType, it will create an arg set to a special “action” callback. If your component calls this arg (based on the user's interaction or through the `play` function), the event will show up in the action panel: ![Essential Actions addon usage](./addon-actions-screenshot.png) ### Automatically matching args -Another option is to use a parameter to match all [argTypes](../api/argtypes.md) that match a certain pattern. The following configuration automatically creates actions for each `on` argType (which you can either specify manually or can be [inferred automatically](../api/argtypes.md#automatic-argtype-inference)). +Another option is to use a global parameter to match all [argTypes](../api/argtypes.md) that match a certain pattern. The following configuration automatically creates actions for each `on` argType (which you can either specify manually or can be [inferred automatically](../api/argtypes.md#automatic-argtype-inference)). + + + + + + + +If you need more granular control over which `argTypes` are matched, you can adjust your stories and include the `argTypes` parameter. For example: @@ -51,7 +63,7 @@ Another option is to use a parameter to match all [argTypes](../api/argtypes.md)
-NOTE: If you're generating argTypes in using another addon (like [docs](../writing-docs/introduction.md), which is the common behavior) you'll need to make sure that the actions addon loads **AFTER** the other addon. You can do this by listing it later in the addons registration code in [`.storybook/main.js`](../configure/overview.md#configure-story-rendering). This is default in [essentials](./introduction.md). +💡 If you're generating argTypes with another addon (like [docs](../writing-docs/introduction.md), which is the common behavior), ensure the actions addon AFTER the other addon. You can do this by listing it later in the addons registration code in [`.storybook/main.js`](../configure/overview.md#configure-story-rendering). This is default in [essentials](./introduction.md).
@@ -70,8 +82,8 @@ It is also possible to detect if your component is emitting the correct HTML eve -This will bind a standard HTML event handler to the outermost HTML element rendered by your component and trigger an action when the event is called for a given selector. The format is ` `. Selector is optional; it defaults to all elements. +This will bind a standard HTML event handler to the outermost HTML element rendered by your component and trigger an action when the event is called for a given selector. The format is ` `. The selector is optional; it defaults to all elements. ## Advanced / legacy usage -There are also some older ways to use actions as documented in the [advanced README](../../addons/actions/ADVANCED.md). +There are also some older ways to use actions as documented in the [advanced README](../../addons/actions/ADVANCED.md). \ No newline at end of file diff --git a/docs/essentials/addon-interactions-installed-registered.png b/docs/essentials/addon-interactions-installed-registered.png new file mode 100644 index 000000000000..f61c71c770e7 Binary files /dev/null and b/docs/essentials/addon-interactions-installed-registered.png differ diff --git a/docs/essentials/auto-generated-controls/react.mdx b/docs/essentials/auto-generated-controls/react.mdx index ab1b01981cfd..b3653588a1ce 100644 --- a/docs/essentials/auto-generated-controls/react.mdx +++ b/docs/essentials/auto-generated-controls/react.mdx @@ -1,7 +1,7 @@ To use auto-detected controls with React, you must fill in the `component` field in your story metadata: ```ts -// Button.stories.js | Button.stories.jsx | Button.stories.ts | Button.stories.tsx +// Button.stories.js|jsx|ts|tsx import { Button } from './Button'; diff --git a/docs/essentials/backgrounds.md b/docs/essentials/backgrounds.md index e40687a77889..aeee50d61d64 100644 --- a/docs/essentials/backgrounds.md +++ b/docs/essentials/backgrounds.md @@ -2,7 +2,7 @@ title: 'Backgrounds' --- -The backgrounds toolbar item allows you to adjust the background that your story is rendered on via Storybook’s UI: +The backgrounds toolbar addon allows you to set the background color in which the story renders in the UI: -The previous example also removed the prop documentation from the table. In some cases this is fine, however sometimes you might want to still render the prop documentation but without a control. The following example illustrates how: +The previous example also removed the prop documentation from the table. In some cases, this is fine. However, sometimes you might want to render the prop documentation, but without a control. The following example illustrates how: -As with other Storybook properties, such as [decorators](../writing-stories/decorators.md) the same principle can also be applied at a story-level for more granular cases. +💡 As with other Storybook properties, such as [decorators](../writing-stories/decorators.md), you can apply the same pattern at a story level for more granular cases.
+### Conditional controls + +In some cases, it's useful to be able to conditionally exclude a control based on the value of another control. Controls supports basic versions of these use cases with the `if`, which can takes a simple query object to determine whether to include the control. + +Consider a collection of "advanced" settings that are only visible when the user toggles an "advanced" toggle. + + + + + + + +Or consider a constraint where if the user sets one control value, it doesn't make sense for the user to be able to set another value. + + + + + + + +The query object must contain either an `arg` or `global` target: + +| field | type | meaning | +| ------ | ------ | ----------------------------- | +| arg | string | The ID of the arg to test. | +| global | string | The ID of the global to test. | + +It may also contain at most one of the following operators: + +| operator | type | meaning | +| -------- | ------- | ---------------------------------------------------- | +| truthy | boolean | Is the target value truthy? | +| exists | boolean | Is the target value defined? | +| eq | any | Is the target value equal to the provided value? | +| neq | any | Is the target value NOT equal to the provided value? | + +If no operator is provided, that is equivalent to `{ truthy: true }`. + ## Hide NoControls warning If you don't plan to handle the control args inside your Story, you can remove the warning with: @@ -320,9 +362,9 @@ If you don't plan to handle the control args inside your Story, you can remove t ## Filtering controls -In some cases, you may want to either only present a few controls in the controls panel, or present all controls except a small set. +In specific cases, you may require to display only a limited number of controls in the controls panel, or all of them except a particular set. -To make this possible, you can use optional `include` and `exclude` configuration fields in the `controls` parameter, which can be set to either an array of strings, or a regular expression. +To make this possible, you can use optional `include` and `exclude` configuration fields in the `controls` parameter, which you can define as an array of strings, or as a regular expression. Consider the following story snippets: @@ -339,7 +381,7 @@ Consider the following story snippets: ## Sorting controls -By default, controls are unsorted and use whatever order the args data is processed in (`none`). It can also be configured to sort alphabetically by arg name (`alpha`) or alphabetically required args first (`requiredFirst`). +By default, controls are unsorted and use whatever order the args data is processed in (`none`). Additionally, you can sort them alphabetically by the arg's name (`alpha`) or with the required args first (`requiredFirst`). Consider the following snippet to force required args first: diff --git a/docs/essentials/interactions.md b/docs/essentials/interactions.md new file mode 100644 index 000000000000..a46bcc13b11a --- /dev/null +++ b/docs/essentials/interactions.md @@ -0,0 +1,75 @@ +--- +title: 'Interactions' +--- + +The [`play`](../writing-stories/play-function.md) function in Storybook allows you to simulate user interactions to run after a story renders. With the [Interactions](https://storybook.js.org/addons/@storybook/addon-interactions/) addon, you have a way to visualize and debug these interactions. + +## Play function for interactions + +Stories isolate and capture component states in a structured manner. While developing a component, you can quickly cycle through the stories to verify the look and feel. Each story specifies all the inputs required to reproduce a specific state. You can even mock context and API calls, allowing you to handle most use cases of a component. But what about states that require user interaction? + +For example, clicking a button to open/close a dialog box, dragging a list item to reorder it, or filling out a form to check for validation errors. To test those behaviors, you have to interact with the components as a user would. Interactive stories enable you to automate these interactions using a play function. They are small snippets of code that run once the story finishes rendering, emulating the exact steps a user would take to interact with the component. + +### Powered by Testing Library and Jest + +The interactions are written using a Storybook-instrumented version of [Testing Library](https://testing-library.com/) and [Jest](https://jestjs.io/). That gives you a familiar developer-friendly syntax to interact with the DOM and make assertions, but with extra telemetry to help with debugging. + +## Installation + +Since Interactions is still experimental, it doesn't yet ship with Storybook by default. As such, you'll have to install it. You may also want to add our wrappers for Testing Library and Jest. + + + + + + + +Next, update [`.storybook/main.js`](../configure/overview.md#configure-story-rendering) to the following: + + + + + + + +
+ +💡 Make sure to list `@storybook/addon-interactions` **after** the [`@storybook/addon-essentials`](./introduction.md) addon (or the [`@storybook/addon-actions`](./actions.md) if you've installed it individually). + +
+ + +Now when you run Storybook, the Interactions addon will be enabled. + +![Storybook Interactions installed and registered](./addon-interactions-installed-registered.png) + +## Writing interactions + +Interactions run as part of the `play` function of your stories. We rely on Testing Library to do the heavy lifting. + +Make sure to import the Storybook wrappers for Jest and Testing Library rather than importing Jest and Testing Library directly. + + + + + + + +The above example uses the `canvasElement` to scope your element queries to the current story. It's essential if you want your play functions to eventually be compatible with Storybook Docs, which renders multiple components on the same page. + +While you can refer to the [Testing Library documentation](https://testing-library.com/docs/) for details on how to use it, there's an important detail that's different when using the Storybook wrapper: **method invocations must be `await`-ed**. It allows you to step back and forth through your interactions using the debugger. + +Any `args` that have been marked as an Action, either using the [argTypes annotation](./actions.md#action-argtype-annotation) or the [argTypesRegex](./actions.md#automatically-matching-args), will be automatically converted to a [Jest mock function](https://jestjs.io/docs/mock-function-api) (spy). This allows you to make assertions about calls to these functions. diff --git a/docs/essentials/introduction.md b/docs/essentials/introduction.md index 07075ffa6eea..78b3da7d1e38 100644 --- a/docs/essentials/introduction.md +++ b/docs/essentials/introduction.md @@ -2,7 +2,7 @@ title: 'Essential addons' --- -A major strength of Storybook are [addons](/addons/) that extend Storybook’s UI and behavior. Storybook ships by default with a set of “essential” addons that add to the initial user experience. There are many third-party addons as well as “official” addons developed by the Storybook core team. +A major strength of Storybook are [addons](https://storybook.js.org/addons) that extend Storybook’s UI and behavior. Storybook ships by default with a set of “essential” addons that add to the initial user experience. There are many third-party addons as well as “official” addons developed by the Storybook core team. - [Docs](../writing-docs/introduction.md) - [Controls](./controls.md) @@ -10,38 +10,88 @@ A major strength of Storybook are [addons](/addons/) that extend Storybook’s U - [Viewport](./viewport.md) - [Backgrounds](./backgrounds.md) - [Toolbars & globals](./toolbars-and-globals.md) -- [Measure](/addons/@storybook/addon-measure) -- [Outline](/addons/storybook-addon-outline) +- [Measure & outline](./measure-and-outline.md) ### Installation -If you ran `sb init` to include Storybook in your project, the Essentials addon (`@storybook/addon-essentials`) is already installed and configured for you. You can skip the rest of this section. +If you ran `storybook init` to include Storybook in your project, the Essentials addon ([`@storybook/addon-essentials`](https://storybook.js.org/addons/tag/essentials)) is already installed and configured for you. You can skip the rest of this section. If you're upgrading from a previous Storybook version, you'll need to run the following command in your terminal: -```shell -npm install --save-dev @storybook/addon-essentials -``` + -
-💡 Note: If you're using yarn as a package manager, you'll need to adjust the command accordingly. -
+ -Update your Storybook configuration (in `.storybook/main.js`) to include the Essentials addon. + + +Update your Storybook configuration (in [`.storybook/main.js`](../configure/overview.md#configure-story-rendering)) to include the Essentials addon. -```js -// .storybook/main.js + + + -module.exports = { - addons: ['@storybook/addon-essentials'], -}; -``` + ### Configuration Essentials is "zero-config”. It comes with a recommended configuration out of the box. -If you need to reconfigure any of the individual essential addons, install them manually by following its installation instructions and adjusting its configuration to suit your needs. +If you need to reconfigure any of the [individual Essentials addons](https://storybook.js.org/addons/tag/essentials), install them manually by following the installation instructions, register them in your Storybook configuration file (i.e., [`.storybook/main.js`](../configure/overview.md#configure-story-rendering)) and adjust the configuration to suit your needs. For example: + + + + + + + + + + + + + +Below is an abridged configuration and table with all the available options for each addon. + + + + + + + +| Addon | Configuration element | Description | +| ------------------------------ | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `@storybook/addon-actions` | N/A | N/A | +| `@storybook/addon-viewport` | N/A | N/A | +| `@storybook/addon-docs` | `configureJSX` | Enables JSX support in MDX for projects that aren't configured to handle the format.
`configureJSX: true` | +| | `babelOptions` | Provides additional Babel configurations for file transpilation.
`babelOptions: { plugins: [], presets: []}`
Extends `configureJSX`. | +| | `sourceLoaderOptions` | Provides additional configuration for Storybook's source loader.
`sourceLoaderOptions: null` .
Required for [`@storybook/addon-storysource`](https://storybook.js.org/addons/@storybook/addon-storysource). | +| | `transcludeMarkdown` | Enables Markdown file support into MDX and render them as components.
`transcludeMarkdown: true` | +| `@storybook/addon-controls` | N/A | N/A | +| `@storybook/addon-backgrounds` | N/A | N/A | +| `@storybook/addon-toolbars` | N/A | N/A | +| `@storybook/addon-measure` | N/A | N/A | When you start Storybook, your custom configuration will override the default. diff --git a/docs/essentials/measure-and-outline.md b/docs/essentials/measure-and-outline.md index 68c290c58457..ebb804ae27d5 100644 --- a/docs/essentials/measure-and-outline.md +++ b/docs/essentials/measure-and-outline.md @@ -15,7 +15,7 @@ With Storybook's Measure addon, you can quickly visualize each component's measu
-💡 Note: Alternatively you can press the m key on your keyboard to toggle the addon. +💡 Alternatively you can press the m key on your keyboard to toggle the addon.
## Outline addon @@ -26,4 +26,4 @@ With Storybook's Outline addon, you can toggle the outlines associated with all + \ No newline at end of file diff --git a/docs/essentials/toolbars-and-globals.md b/docs/essentials/toolbars-and-globals.md index 901a23a758ad..99f18673735d 100644 --- a/docs/essentials/toolbars-and-globals.md +++ b/docs/essentials/toolbars-and-globals.md @@ -2,11 +2,11 @@ title: 'Toolbars & globals' --- -Storybook ships with toolbar items to control the [viewport](./viewport.md) and [background](./backgrounds.md) the story renders in. You can also create your own toolbar items which control special “globals” which you can then read to create [decorators](../writing-stories/decorators.md) to control story rendering. +Storybook ships with toolbar addons to control the [viewport](./viewport.md) and [background](./backgrounds.md) the story renders in. You can also create your own toolbar items which control special “globals” which you can then read to create [decorators](../writing-stories/decorators.md) to control story rendering. ## Globals -Globals in Storybook represent “global” (as in not story-specific) inputs to the rendering of the story. As they aren’t specific to the story, they aren’t passed in the `args` argument to the story function (although they are accessible as `context.globals`), but typically you use them in decorators, which apply to all stories. +Globals in Storybook represents “global” (as in not story-specific) inputs to the rendering of the story. As they aren’t specific to the story, they aren’t passed in the `args` argument to the story function (although they are accessible as `context.globals`), but typically you use them in decorators, which apply to all stories. When the globals change, the story re-renders, and the decorators rerun with the new values. The easiest way to change globals is to create a toolbar item for them. @@ -26,11 +26,11 @@ Storybook has a simple, declarative syntax for configuring toolbar menus. In you
-As globals are _global_ you can _only_ set `globalTypes` in [`.storybook/preview.js`](../configure/overview.md#configure-story-rendering). +💡 As globals are _global_ you can _only_ set `globalTypes` in [`.storybook/preview.js`](../configure/overview.md#configure-story-rendering).
-When you start your Storybook, you should see a new dropdown in your toolbar with options `light` and `dark`. +When you start your Storybook, you should see a new dropdown with the `light` and `dark` options in your toolbar. ## Create a decorator @@ -50,7 +50,7 @@ For example, suppose you are using `styled-components`. You can add a theme prov ## Advanced usage -So far we've managed to create and consume a global inside Storybook. +So far, we've managed to create and consume a global inside Storybook. Now let's take a look at a more complex example. Let's suppose we wanted to implement a new global called **locale** for internationalization, which shows a flag on the right side of the toolbar. @@ -68,12 +68,12 @@ In your [`.storybook/preview.js`](../configure/overview.md#configure-story-rende
-The icon element used in the examples loads the icons from the @storybook/components package. See [here](../workflows/faq.md#what-icons-are-available-for-my-toolbar-or-my-addon) for the list of available icons that you can use. +💡 The icon element used in the examples loads the icons from the @storybook/components package. See [here](../faq.md#what-icons-are-available-for-my-toolbar-or-my-addon) for the list of available icons that you can use.
- The @storybook/addon-toolbars addon is required to use toolbars. The toolbars addon is included by default in @storybook/addon-essentials. +💡The @storybook/addon-toolbars addon is required to use toolbars. The toolbars addon is included by default in @storybook/addon-essentials.
By adding the configuration element `right`, the text will be displayed on the right side in the toolbar menu once you connect it to a decorator. @@ -116,7 +116,7 @@ Using the example above, you can modify any story to retrieve the **Locale** `gl
-In Storybook 6.0, if you set the global option `passArgsFirst: false` for backwards compatibility, the story context is passed as the first argument: +💡 In Storybook 6.0, if you set the global option `passArgsFirst: false` for backward compatibility, the story context is passed as the first argument: @@ -136,9 +136,9 @@ In Storybook 6.0, if you set the global option `passArgsFirst: false` for backwa ## Consuming globals from within an addon -If you're working on a Storybook addon and you need to retrieve globals, you can do so. The `@storybook/api` package provides a hook for this scenario. You can use the [`useGlobals()`](../addons/addons-api.md#useglobals) hook to retrieve any globals you want. +If you're working on a Storybook addon and need to retrieve globals, you can do so. The `@storybook/api` package provides a hook for this scenario. You can use the [`useGlobals()`](../addons/addons-api.md#useglobals) hook to retrieve any globals you want. -Using the ThemeProvider example above, you could expand it to display which current theme is being shown inside a panel like so: +Using the ThemeProvider example above, you could expand it to display which theme is active inside a panel as such: @@ -152,11 +152,11 @@ Using the ThemeProvider example above, you could expand it to display which curr ## Updating globals from within an addon -If you're working on a Storybook addon that needs to update the global and refreshes the UI, you can do so. As mentioned previously, the `@storybook/api` package provides the necessary hook for this scenario. You can use the `updateGlobals` function to update any global values you want. +If you're working on a Storybook addon that needs to update the global and refreshes the UI, you can do so. As mentioned previously, the `@storybook/api` package provides the necessary hook for this scenario. You can use the `updateGlobals` function to update any global values you need. -Also, you can use the `@storybook/addons` and `@storybook/core-events` packages together to trigger the refresh. +Also, you can use both `@storybook/addons` and `@storybook/core-events` packages together to trigger the refresh. -For example, if you were working on a [toolbar addon](../addons/addon-types.md#toolbars), and you want to refresh the UI and update the global once the user clicks on a button, like so: +For example, if you were working on a [toolbar addon](../addons/addon-types.md#toolbars), and you want to refresh the UI and update the global once the user clicks on a button: diff --git a/docs/essentials/viewport.md b/docs/essentials/viewport.md index 24adc95e0c0d..09b1e8cd856b 100644 --- a/docs/essentials/viewport.md +++ b/docs/essentials/viewport.md @@ -2,7 +2,7 @@ title: 'Viewport' --- -The Viewport toolbar item allows you to adjust the dimensions of the iframe your story is rendered in. This makes it easy to develop responsive UIs. +The Viewport toolbar item allows you to adjust the dimensions of the iframe your story is rendered in. It makes it easy to develop responsive UIs. -The [“Docs”](../writing-docs/introduction.md) tab shows auto-generated documentation about components (inferred from the source code). Usage docs are helpful when sharing reusable components with your team. For example, in a design system or component library. +The [“Docs”](../writing-docs/introduction.md) tab shows auto-generated documentation about components (inferred from the source code). Usage docs are helpful when sharing reusable components with your team, for example, in a design system or component library.
`, }) -export default class DocumentScreen implements OnInit { +export class DocumentScreen implements OnInit { user: any = { id: 0, name: 'Some User' }; document: any = { id: 0, title: 'Some Title' }; @@ -45,4 +45,4 @@ export default class DocumentScreen implements OnInit { }); } } -``` +``` \ No newline at end of file diff --git a/docs/snippets/angular/document-screen-with-graphql.ts.mdx b/docs/snippets/angular/document-screen-with-graphql.ts.mdx index be521f486212..31b4711befd5 100644 --- a/docs/snippets/angular/document-screen-with-graphql.ts.mdx +++ b/docs/snippets/angular/document-screen-with-graphql.ts.mdx @@ -66,4 +66,4 @@ export class SampleGraphqlComponent implements OnInit { }); } } -``` +``` \ No newline at end of file diff --git a/docs/snippets/angular/documentscreen-story-msw-graphql-query.ts.mdx b/docs/snippets/angular/documentscreen-story-msw-graphql-query.ts.mdx index 16849250c632..13f45f9fcfe4 100644 --- a/docs/snippets/angular/documentscreen-story-msw-graphql-query.ts.mdx +++ b/docs/snippets/angular/documentscreen-story-msw-graphql-query.ts.mdx @@ -1,21 +1,28 @@ ```ts // YourPage.stories.ts +import { Meta, Story } from '@storybook/angular'; + import { CommonModule } from '@angular/common'; import { HttpClientModule } from '@angular/common/http'; -import { Story, Meta, moduleMetadata } from '@storybook/angular'; +import { Meta, moduleMetadata, Story } from '@storybook/angular'; import { graphql } from 'msw'; -import DocumentScreen from './YourPage.component'; -import DocumentList from './DocumentList.component'; -import DocumentHeader from './DocumentHeader.component'; -import PageLayout from './PageLayout.component'; +import { DocumentScreen } from './YourPage.component'; +import { DocumentList } from './DocumentList.component'; +import { DocumentHeader } from './DocumentHeader.component'; +import { PageLayout } from './PageLayout.component'; import { MockGraphQLModule } from './mock-graphql.module'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'DocumentScreen', component: DocumentScreen, decorators: [ moduleMetadata({ @@ -23,7 +30,6 @@ export default { imports: [CommonModule, HttpClientModule, MockGraphQLModule], }), ], - title: 'Mock GraphQL query with Storybook and MSW', } as Meta; //👇The mocked data that will be used in the story @@ -75,8 +81,8 @@ const TestData = { ], }; -const PageTemplate: Story = (args) => ({ - props: args, +const PageTemplate: Story = () => ({ + props: {}, }); export const MockedSuccess = PageTemplate.bind({}); @@ -103,4 +109,4 @@ MockedError.parameters = { }), ], }; -``` +``` \ No newline at end of file diff --git a/docs/snippets/angular/documentscreen-story-msw-rest-request.ts.mdx b/docs/snippets/angular/documentscreen-story-msw-rest-request.ts.mdx index 5ae41166c1b6..b322e273b2b2 100644 --- a/docs/snippets/angular/documentscreen-story-msw-rest-request.ts.mdx +++ b/docs/snippets/angular/documentscreen-story-msw-rest-request.ts.mdx @@ -1,19 +1,26 @@ ```ts // YourPage.stories.ts +import { Meta, Story } from '@storybook/angular'; + import { CommonModule } from '@angular/common'; import { HttpClientModule } from '@angular/common/http'; -import { Story, Meta, moduleMetadata } from '@storybook/angular'; +import { Meta, moduleMetadata, Story } from '@storybook/angular'; import { rest } from 'msw'; -import DocumentScreen from './YourPage.component'; -import DocumentList from './DocumentList.component'; -import DocumentHeader from './DocumentHeader.component'; -import PageLayout from './PageLayout.component'; +import { DocumentScreen } from './YourPage.component'; +import { DocumentList } from './DocumentList.component'; +import { DocumentHeader } from './DocumentHeader.component'; +import { PageLayout } from './PageLayout.component'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'DocumentScreen', component: DocumentScreen, decorators: [ moduleMetadata({ @@ -21,7 +28,6 @@ export default { imports: [CommonModule, HttpClientModule], }), ], - title: 'Mock Rest request with Storybook and MSW', } as Meta; //👇The mocked data that will be used in the story @@ -73,8 +79,8 @@ const TestData = { ], }; -const PageTemplate: Story = (args) => ({ - props: args, +const PageTemplate: Story = () => ({ + props: {}, }); export const MockedSuccess = PageTemplate.bind({}); @@ -94,4 +100,4 @@ MockedError.parameters = { }), ], }; -``` +``` \ No newline at end of file diff --git a/docs/snippets/angular/form-story-component-with-play-function.ts.mdx b/docs/snippets/angular/form-story-component-with-play-function.ts.mdx new file mode 100644 index 000000000000..40c91d9e7389 --- /dev/null +++ b/docs/snippets/angular/form-story-component-with-play-function.ts.mdx @@ -0,0 +1,24 @@ +```ts +// Form.stories.ts + +import { userEvent, within } from '@storybook/testing-library'; + +import { LoginForm } from './LoginForm.component'; + +export default { + component: LoginForm, +}; + +export const FilledForm = { + play: async ({ args, canvasElement }) => { + // Starts querying the component from its root element + const canvas = within(canvasElement); + + await userEvent.type(canvas.getByTestId('email'), 'email'); + await userEvent.type(canvas.getByTestId('password'), 'password'); + + // See https://storybook.js.org/docs/7.0/angular/essentials/actions#automatically-matching-args to learn how to setup logging in the Actions panel + await userEvent.click(canvas.getByRole('button')); + }, +}; +``` \ No newline at end of file diff --git a/docs/snippets/angular/list-story-expanded.ts.mdx b/docs/snippets/angular/list-story-expanded.ts.mdx index 5856847a1b6a..2a3d5e1c9f82 100644 --- a/docs/snippets/angular/list-story-expanded.ts.mdx +++ b/docs/snippets/angular/list-story-expanded.ts.mdx @@ -1,46 +1,49 @@ ```ts // List.stories.ts -import { Story, Meta } from '@storybook/angular/types-6-0'; +import { Meta, moduleMetadata, Story } from '@storybook/angular'; -import { moduleMetadata } from '@storybook/angular'; import { CommonModule } from '@angular/common'; -import List from './list.component'; -import ListItem from './list-item.component'; +import { List } from './list.component'; +import { ListItem } from './list-item.component'; export default { - component: List, + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'List', + component: List, decorators: [ moduleMetadata({ - declarations: [List,ListItem], + declarations: [List, ListItem], imports: [CommonModule], }), ], } as Meta; // Always an empty list, not super interesting -export const Empty: Story = (args: List) => ({ +export const Empty: Story = (args) => ({ props: args, - template: ``, + template: ``, }); -export const OneItem: Story = (args) => ({ +export const OneItem: Story = (args) => ({ props: args, template: ` - `, + `, }); -export const ManyItems: Story = (args) => ({ +export const ManyItems: Story = (args) => ({ props: args, template: ` - `, + `, }); -``` +``` \ No newline at end of file diff --git a/docs/snippets/angular/list-story-reuse-data.ts.mdx b/docs/snippets/angular/list-story-reuse-data.ts.mdx index d39179ff0bac..e58dd12c2aa1 100644 --- a/docs/snippets/angular/list-story-reuse-data.ts.mdx +++ b/docs/snippets/angular/list-story-reuse-data.ts.mdx @@ -1,20 +1,44 @@ ```ts // List.stories.ts +import { Meta, moduleMetadata, Story } from '@storybook/angular'; + +import { CommonModule } from '@angular/common'; + +import { List } from './list.component'; +import { ListItem } from './list-item.component'; + //👇 We're importing the necessary stories from ListItem import { Selected, Unselected } from './ListItem.stories'; -export const ManyItems: Story = (args) => ({ +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'List', + component: List, + decorators: [ + moduleMetadata({ + declarations: [List, ListItem], + imports: [CommonModule], + }), + ], +} as Meta; + + +export const ManyItems: Story = (args) => ({ props: args, template: ` - - - - `, + + + + + `, }); ManyItems.args= { - Selected: Selected.args.itemProperty, - Unselected: Unselected.args.itemProperty, + Selected: Selected.args.isSelected, + Unselected: Unselected.args.isSelected, }; -``` +``` \ No newline at end of file diff --git a/docs/snippets/angular/list-story-starter.ts.mdx b/docs/snippets/angular/list-story-starter.ts.mdx index ec53eccb4bdd..d325679ad9e3 100644 --- a/docs/snippets/angular/list-story-starter.ts.mdx +++ b/docs/snippets/angular/list-story-starter.ts.mdx @@ -1,17 +1,19 @@ ```ts // List.stories.ts -import { Story, Meta } from '@storybook/angular/types-6-0'; +import { Story, Meta, moduleMetadata } from '@storybook/angular'; -import { moduleMetadata } from '@storybook/angular'; import { CommonModule } from '@angular/common'; -import List from './list.component'; +import { List } from './list.component'; export default { - title: 'List', + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ component: List, - decorators: [ + decorators: [ moduleMetadata({ declarations: [List], imports: [CommonModule], @@ -20,8 +22,8 @@ export default { } as Meta; // Always an empty list, not super interesting -const Template: Story = (args) => ({ +const Template: Story = (args) => ({ props: args, template: ``, }); -``` +``` \ No newline at end of file diff --git a/docs/snippets/angular/list-story-template.ts.mdx b/docs/snippets/angular/list-story-template.ts.mdx index a2110ee33616..bac6ba8fdb19 100644 --- a/docs/snippets/angular/list-story-template.ts.mdx +++ b/docs/snippets/angular/list-story-template.ts.mdx @@ -1,31 +1,54 @@ ```ts // List.stories.ts -import { Story } from '@storybook/angular/types-6-0'; +import { Meta, moduleMetadata, Story } from '@storybook/angular'; -import ListComponent from './List.component'; -import ListItemComponent from './ListItem.component'; +import { CommonModule } from '@angular/common'; + +import { List } from './list.component'; +import { ListItem } from './list-item.component'; //👇 Imports a specific story from ListItem stories import { Unchecked } from './ListItem.stories'; -const ListTemplate: Story = (args) => ({ - moduleMetadata: { - declarations: [ListComponent, ListItemComponent], - }, +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'List', + component: List, + decorators: [ + moduleMetadata({ + declarations: [List, ListItem], + imports: [CommonModule], + }), + ], +} as Meta; + + +const ListTemplate: Story = (args) => ({ props: args, template: ` - -
- -
-
`, + +
+ +
+
+ `, }); -export const EmptyWithTemplate = ListTemplate.bind({}); -Empty.args = { items: [] }; - +export const Empty = ListTemplate.bind({}); +EmptyListTemplate.args = { + items: [], +}; -export const OneItemWithTemplate = ListTemplate.bind({}); -OneItemWithTemplate.args = { items: [Unchecked.args.item] }; +export const OneItem = ListTemplate.bind({}); +OneItem.args = { + items: [ + { + ...Unchecked.args, + }, + ], +}; ``` \ No newline at end of file diff --git a/docs/snippets/angular/list-story-unchecked.ts.mdx b/docs/snippets/angular/list-story-unchecked.ts.mdx index 09795904fde9..017d94620c1c 100644 --- a/docs/snippets/angular/list-story-unchecked.ts.mdx +++ b/docs/snippets/angular/list-story-unchecked.ts.mdx @@ -1,27 +1,42 @@ ```ts // List.stories.ts -import { Story } from '@storybook/angular/types-6-0'; +import { Meta, moduleMetadata, Story } from '@storybook/angular'; -import ListComponent from './List.component'; -import ListItemComponent from './ListItem.component'; +import { CommonModule } from '@angular/common'; + +import { List } from './list.component'; +import { ListItem } from './list-item.component'; //👇 Imports a specific story from ListItem stories import { Unchecked } from './ListItem.stories'; -export const OneItem: Story = (args) => ({ - moduleMetadata: { - declarations: [ListComponent, ListItemComponent], - }, +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'List', + component: List, + decorators: [ + moduleMetadata({ + declarations: [List, ListItem], + imports: [CommonModule], + }), + ], +} as Meta; + + +export const OneItem: Story = (args) => ({ props: args, template: ` - - - - `, + + + + `, }); OneItem.args = { - ...Unchecked.args, + ...Unchecked.args, }; -``` +``` \ No newline at end of file diff --git a/docs/snippets/angular/list-story-with-subcomponents.ts.mdx b/docs/snippets/angular/list-story-with-subcomponents.ts.mdx index 8bf4f645830c..459bf8791a68 100644 --- a/docs/snippets/angular/list-story-with-subcomponents.ts.mdx +++ b/docs/snippets/angular/list-story-with-subcomponents.ts.mdx @@ -2,24 +2,42 @@ // List.stories.ts import { Meta, moduleMetadata, Story } from '@storybook/angular'; -import { ListItemComponent } from './list-item.component'; -import { ListComponent } from './list.component'; + +import { CommonModule } from '@angular/common'; + +import { List } from './list.component'; +import { ListItem } from './list-item.component'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'List', - component: ListComponent, - subcomponents: { ListItemComponent }, //👈 Adds the ListItem component as a subcomponent + component: List, + subcomponents: { ListItem }, //👈 Adds the ListItem component as a subcomponent + decorators: [ + moduleMetadata({ + declarations: [List, ListItem], + imports: [CommonModule], + }), + ], } as Meta; -const Template: Story = (args) => ({ - props: args, - moduleMetadata: { - declarations: [ListComponent, ListItemComponent], +export const Empty: Story = () => ({ + props: { + args, }, }); -export const OneItem = Template.bind({}); -OneItem.args = { - items: [ListItemComponent], -}; -``` +export const OneItem: Story = () => ({ + props: { + args, + }, + template: ` + + + + `, +}); +``` \ No newline at end of file diff --git a/docs/snippets/angular/loader-story.mdx.mdx b/docs/snippets/angular/loader-story.mdx.mdx index e1f84461b134..b1ea6fa0b5bd 100644 --- a/docs/snippets/angular/loader-story.mdx.mdx +++ b/docs/snippets/angular/loader-story.mdx.mdx @@ -3,7 +3,7 @@ import { Meta, Story } from '@storybook/addon-docs/blocks'; -import TodoItem from './TodoItem'; +import { TodoItem } from './TodoItem'; import fetch from 'node-fetch'; @@ -14,11 +14,10 @@ import fetch from 'node-fetch'; loaders={[ async () => ({ todo: await ( - await fetch("https://jsonplaceholder.typicode.com/todos/1") + await fetch('https://jsonplaceholder.typicode.com/todos/1') ).json(), }), - ]} -> + ]} > {(args, { loaded: { todo } }) => ({ props: { todo: todo, diff --git a/docs/snippets/angular/loader-story.ts.mdx b/docs/snippets/angular/loader-story.ts.mdx index 837cd804a9a5..a48f5f9e78f8 100644 --- a/docs/snippets/angular/loader-story.ts.mdx +++ b/docs/snippets/angular/loader-story.ts.mdx @@ -1,15 +1,20 @@ ```ts // TodoItem.stories.ts -import { moduleMetadata, Story, Meta } from '@storybook/angular'; +import { Meta, moduleMetadata, Story } from '@storybook/angular'; import fetch from 'node-fetch'; import { CommonModule } from '@angular/common'; -import TodoItem from './TodoItem'; +import { TodoItem } from './TodoItem'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'Examples/Loader', component: TodoItem, decorators: [ moduleMetadata({ @@ -17,7 +22,6 @@ export default { imports: [CommonModule], }), ], - title: 'Examples/Loader', } as Meta; export const Primary = (args, { loaded: { todo } }) => { diff --git a/docs/snippets/angular/login-form-with-play-function.mdx.mdx b/docs/snippets/angular/login-form-with-play-function.mdx.mdx new file mode 100644 index 000000000000..31443143cd7d --- /dev/null +++ b/docs/snippets/angular/login-form-with-play-function.mdx.mdx @@ -0,0 +1,45 @@ +```md + + +import { Canvas, Meta, Story } from '@storybook/addon-docs'; + +import { within, userEvent } from '@storybook/testing-library'; + +import { expect } from '@storybook/jest'; + +import { LoginForm } from './LoginForm.component'; + + + +export const Template = (args) => ({ props: args }); + + + + {Template.bind({})} + + + { + // Starts querying the component from its root element + const canvas = within(canvasElement); + + // 👇 Simulate interactions with the component + await userEvent.type(canvas.getByTestId('email'), 'email@provider.com'); + + await userEvent.type(canvas.getByTestId('password'), 'a-random-password'); + + // See https://storybook.js.org/docs/angular/essentials/actions#automatically-matching-args to learn how to setup logging in the Actions panel + await userEvent.click(canvas.getByRole('button')); + + // 👇 Assert DOM structure + await expect( + canvas.getByText( + 'Everything is perfect. Your account is ready and we should probably get you started!' + ) + ).toBeInTheDocument(); + }}> + {Template.bind({})} + + +``` \ No newline at end of file diff --git a/docs/snippets/angular/login-form-with-play-function.ts.mdx b/docs/snippets/angular/login-form-with-play-function.ts.mdx new file mode 100644 index 000000000000..48df0db4da3c --- /dev/null +++ b/docs/snippets/angular/login-form-with-play-function.ts.mdx @@ -0,0 +1,47 @@ +```ts +// LoginForm.stories.ts + +import { Meta, Story } from '@storybook/angular'; + +import { userEvent, within } from '@storybook/testing-library'; + +import { expect } from '@storybook/jest'; + +import { LoginForm } from './LoginForm.component'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'Form', + component: LoginForm, +} as Meta; + +const Template: Story = (args) => ({ + props: args, +}); + +export const EmptyForm: Story = Template.bind({}); + +export const FilledForm: Story = Template.bind({}); +FilledForm.play = async ({ canvasElement }) => { + // Starts querying the component from its root element + const canvas = within(canvasElement); + + // 👇 Simulate interactions with the component + await userEvent.type(canvas.getByTestId('email'), 'email@provider.com'); + + await userEvent.type(canvas.getByTestId('password'), 'a-random-password'); + + // See https://storybook.js.org/docs/angular/essentials/actions#automatically-matching-args to learn how to setup logging in the Actions panel + await userEvent.click(canvas.getByRole('button')); + + // 👇 Assert DOM structure + await expect( + canvas.getByText( + 'Everything is perfect. Your account is ready and we should probably get you started!' + ) + ).toBeInTheDocument(); +}; +``` \ No newline at end of file diff --git a/docs/snippets/angular/mdx-canvas-multiple-stories.mdx.mdx b/docs/snippets/angular/mdx-canvas-multiple-stories.mdx.mdx index 4db96cee2d55..8f34d74ce589 100644 --- a/docs/snippets/angular/mdx-canvas-multiple-stories.mdx.mdx +++ b/docs/snippets/angular/mdx-canvas-multiple-stories.mdx.mdx @@ -1,7 +1,11 @@ ```md - + -import { Canvas, Story } from '@storybook/addon-docs'; +import { Canvas, Meta, Story } from '@storybook/addon-docs'; + +import { Badge } from './badge.component'; + + export const Template = (args) => ({ props: args }); @@ -14,7 +18,6 @@ export const Template = (args) => ({ props: args }); }}> {Template.bind({})} - ({ props: args }); }}> {Template.bind({})} - ({ props: args }); {Template.bind({})} -``` \ No newline at end of file +``` diff --git a/docs/snippets/angular/my-component-play-function-alt-queries.mdx.mdx b/docs/snippets/angular/my-component-play-function-alt-queries.mdx.mdx new file mode 100644 index 000000000000..39d95c5bd919 --- /dev/null +++ b/docs/snippets/angular/my-component-play-function-alt-queries.mdx.mdx @@ -0,0 +1,31 @@ +```md + + +import { Meta, Story } from '@storybook/addon-docs'; + +import { screen, userEvent } from '@storybook/testing-library'; + +import { MyComponent } from './MyComponent.component'; + + + +export const Template = (args) => ({ props: args }); + + { + // See https://storybook.js.org/docs/angular/essentials/actions#automatically-matching-args to learn how to setup logging in the Actions panel + await userEvent.click(screen.getByRole('button', { name: / button label/i })); + }} > + {Template.bind({})} + + + { + // The play function interacts with the component and looks for the text + await screen.findByText('example string'); + }} > + {Template.bind({})} + +``` \ No newline at end of file diff --git a/docs/snippets/angular/my-component-play-function-alt-queries.ts.mdx b/docs/snippets/angular/my-component-play-function-alt-queries.ts.mdx new file mode 100644 index 000000000000..fae563d58d89 --- /dev/null +++ b/docs/snippets/angular/my-component-play-function-alt-queries.ts.mdx @@ -0,0 +1,35 @@ +```ts +// MyComponent.stories.ts + +import { Meta, Story } from '@storybook/addon-docs'; + +import { screen, userEvent } from '@storybook/testing-library'; + +import { MyComponent } from './MyComponent.component'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'QueryMethods', + component: MyComponent, + +} as Meta; + +const Template: Story = (args) => ({ + props: args, +}); + +export const ExampleWithRole: Story = Template.bind({}); +ExampleWithRole.play = async () => { + // See https://storybook.js.org/docs/angular/essentials/actions#automatically-matching-args to learn how to setup logging in the Actions panel + await userEvent.click(screen.getByRole('button', { name: / button label/i })); +}; + +export const ExampleWithText: Story = Template.bind({}); +ExampleWithText.play = async () => { + // The play function interacts with the component and looks for the text + await screen.findByText('example string'); +}; +``` \ No newline at end of file diff --git a/docs/snippets/angular/my-component-play-function-composition.ts.mdx b/docs/snippets/angular/my-component-play-function-composition.ts.mdx new file mode 100644 index 000000000000..818de2f6f011 --- /dev/null +++ b/docs/snippets/angular/my-component-play-function-composition.ts.mdx @@ -0,0 +1,40 @@ +```ts +// MyComponent.stories.ts + +import { Meta, Story } from '@storybook/angular'; + +import { screen, userEvent } from '@storybook/testing-library'; + +import { MyComponent } from './MyComponent.component'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'MyComponent', + component: MyComponent, +} as Meta; + +const Template: Story = (args) => ({ + props: args, +}); + +export const FirstStory: Story = Template.bind({}); +FirstStory.play = async () => { + userEvent.type(screen.getByTestId('an-element'), 'example-value'); +}; + +export const SecondStory: Story = Template.bind({}); +SecondStory.play = async () => { + await userEvent.type(screen.getByTestId('other-element'), 'another value'); +}; + +export const CombinedStories: Story = Template.bind({}); +CombinedStories.play = async () => { + // Runs the FirstStory and Second story play function before running this story's play function + await FirstStory.play(); + await SecondStory.play(); + await userEvent.type(screen.getByTestId('another-element'), 'random value'); +}; +``` \ No newline at end of file diff --git a/docs/snippets/angular/my-component-play-function-waitfor.mdx.mdx b/docs/snippets/angular/my-component-play-function-waitfor.mdx.mdx new file mode 100644 index 000000000000..b0423221fde9 --- /dev/null +++ b/docs/snippets/angular/my-component-play-function-waitfor.mdx.mdx @@ -0,0 +1,36 @@ +```md + + +import { Meta, Story } from '@storybook/addon-docs'; + +import { screen, userEvent, waitFor } from '@storybook/testing-library'; + +import { MyComponent } from './MyComponent.component'; + + + +export const Template = (args) => ({ props: args }); + + { + const Input = screen.getByLabelText('Username', { + selector: 'input', + }); + + await userEvent.type(Input, 'WrongInput', { + delay: 100, + }); + + // See https://storybook.js.org/docs/angular/essentials/actions#automatically-matching-args to learn how to setup logging in the Actions panel + + const Submit = screen.getByRole('button'); + await userEvent.click(Submit); + + await waitFor(async () => { + await userEvent.hover(screen.getByTestId('error')); + }); + }} > + {Template.bind({})} + +``` \ No newline at end of file diff --git a/docs/snippets/angular/my-component-play-function-waitfor.ts.mdx b/docs/snippets/angular/my-component-play-function-waitfor.ts.mdx new file mode 100644 index 000000000000..bb8cfebfc317 --- /dev/null +++ b/docs/snippets/angular/my-component-play-function-waitfor.ts.mdx @@ -0,0 +1,42 @@ +```ts +// MyComponent.stories.ts + +import { Meta, Story } from '@storybook/angular'; + +import { screen, userEvent, waitFor } from '@storybook/testing-library'; + +import { MyComponent } from './MyComponent.component'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'WithAsync', + component: MyComponent, + +} as Meta; + +const Template: Story = (args) => ({ + props: args, +}); + +export const ExampleAsyncStory: Story = Template.bind({}); +ExampleAsyncStory.play = async () => { + const Input = screen.getByLabelText('Username', { + selector: 'input', + }); + + await userEvent.type(Input, 'WrongInput', { + delay: 100, + }); + + // See https://storybook.js.org/docs/angular/essentials/actions#automatically-matching-args to learn how to setup logging in the Actions panel + const Submit = screen.getByRole('button'); + await userEvent.click(Submit); + + await waitFor(async () => { + await userEvent.hover(screen.getByTestId('error')); + }); +}; +``` \ No newline at end of file diff --git a/docs/snippets/angular/my-component-play-function-with-canvas.mdx.mdx b/docs/snippets/angular/my-component-play-function-with-canvas.mdx.mdx new file mode 100644 index 000000000000..420cd8114f5d --- /dev/null +++ b/docs/snippets/angular/my-component-play-function-with-canvas.mdx.mdx @@ -0,0 +1,26 @@ +```md + + +import { Meta, Story } from '@storybook/addon-docs'; + +import { getByRole, userEvent, within } from '@storybook/testing-library'; + +import { MyComponent } from './MyComponent.component'; + + + +export const Template = (args) => ({ props: args }); + + { + // Assigns canvas to the component root element + const canvas = within(canvasElement); + + // Starts querying from the component's root element + await userEvent.type(canvas.getByTestId('example-element'), 'something'); + await userEvent.click(canvas.getByRole('another-element')); + }} > + {Template.bind({})} + +``` \ No newline at end of file diff --git a/docs/snippets/angular/my-component-play-function-with-canvas.ts.mdx b/docs/snippets/angular/my-component-play-function-with-canvas.ts.mdx new file mode 100644 index 000000000000..1cfc409bb7cc --- /dev/null +++ b/docs/snippets/angular/my-component-play-function-with-canvas.ts.mdx @@ -0,0 +1,32 @@ +```ts +// MyComponent.stories.ts + +import { Meta, Story } from '@storybook/angular'; + +import { getByRole, userEvent, within } from '@storybook/testing-library'; + +import { MyComponent } from './MyComponent.component'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'WithCanvasElement', + component: MyComponent, +} as Meta; + +const Template: Story = (args) => ({ + props: args, +}); + +export const ExampleStory: Story = Template.bind({}); +ExampleStory.play = async ({ canvasElement }) => { + // Assigns canvas to the component root element + const canvas = within(canvasElement); + + // Starts querying from the component's root element + await userEvent.type(canvas.getByTestId('example-element'), 'something'); + await userEvent.click(canvas.getByRole('another-element')); +}; +``` \ No newline at end of file diff --git a/docs/snippets/angular/my-component-play-function-with-clickevent.mdx.mdx b/docs/snippets/angular/my-component-play-function-with-clickevent.mdx.mdx new file mode 100644 index 000000000000..f14eb480c156 --- /dev/null +++ b/docs/snippets/angular/my-component-play-function-with-clickevent.mdx.mdx @@ -0,0 +1,31 @@ +```md + + +import { Meta, Story } from '@storybook/addon-docs'; + +import { fireEvent, screen, userEvent } from '@storybook/testing-library'; + +import { MyComponent } from './MyComponent.component'; + + + +export const Template = (args) => ({ props: args }); + + { + // See https://storybook.js.org/docs/angular/essentials/actions#automatically-matching-args to learn how to setup logging in the Actions panel + await userEvent.click(screen.getByRole('button')); + }}> + {Template.bind({})} + + + { + // See https://storybook.js.org/docs/angular/essentials/actions#automatically-matching-args to learn how to setup logging in the Actions panel + await fireEvent.click(screen.getByTestId('data-testid')); + }}> + {Template.bind({})} + +``` \ No newline at end of file diff --git a/docs/snippets/angular/my-component-play-function-with-clickevent.ts.mdx b/docs/snippets/angular/my-component-play-function-with-clickevent.ts.mdx new file mode 100644 index 000000000000..87dc0d2f1c74 --- /dev/null +++ b/docs/snippets/angular/my-component-play-function-with-clickevent.ts.mdx @@ -0,0 +1,34 @@ +```ts +// MyComponent.stories.ts + +import { Meta, Story } from '@storybook/angular'; + +import { fireEvent, screen, userEvent } from '@storybook/testing-library'; + +import { MyComponent } from './MyComponent.component'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'ClickExamples', + component: MyComponent, +} as Meta; + +const Template: Story = (args) => ({ + props: args, +}); + +export const ClickExample: Story = Template.bind({}); +ClickExample.play = async () => { + // See https://storybook.js.org/docs/angular/essentials/actions#automatically-matching-args to learn how to setup logging in the Actions panel + await userEvent.click(screen.getByRole('button')); +}; + +export const FireEventExample: Story = Template.bind({}); +FireEventExample.play = async () => { + // See https://storybook.js.org/docs/angular/essentials/actions#automatically-matching-args to learn how to setup logging in the Actions panel + await fireEvent.click(screen.getByTestId('data-testid')); +}; +``` \ No newline at end of file diff --git a/docs/snippets/angular/my-component-play-function-with-delay.mdx.mdx b/docs/snippets/angular/my-component-play-function-with-delay.mdx.mdx new file mode 100644 index 000000000000..6ed819ac2e70 --- /dev/null +++ b/docs/snippets/angular/my-component-play-function-with-delay.mdx.mdx @@ -0,0 +1,31 @@ +```md + + +import { Meta, Story } from '@storybook/addon-docs'; + +import { screen, userEvent } from '@storybook/testing-library'; + +import { MyComponent } from './MyComponent.component'; + + + +export const Template = (args) => ({ props: args }); + + { + const exampleElement= screen.getByLabelText('example-element'); + + // The delay option set the amount of milliseconds between characters being typed + await userEvent.type(exampleElement, 'random string', { + delay: 100, + }); + + const AnotherExampleElement= screen.getByLabelText('another-example-element'); + await userEvent.type(AnotherExampleElement, 'another random string', { + delay: 100, + }); + }} > + {Template.bind({})} + +``` diff --git a/docs/snippets/angular/my-component-play-function-with-delay.ts.mdx b/docs/snippets/angular/my-component-play-function-with-delay.ts.mdx new file mode 100644 index 000000000000..084f43dd360d --- /dev/null +++ b/docs/snippets/angular/my-component-play-function-with-delay.ts.mdx @@ -0,0 +1,36 @@ +```ts +// MyComponent.stories.ts + +import { Meta, Story } from '@storybook/angular'; + +import { screen, userEvent } from '@storybook/testing-library'; + +import { MyComponent } from './MyComponent.component'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'WithDelay', + component: MyComponent, +} as Meta; + +const Template: Story = (args) => ({ + props: args, +}); + +export const DelayedStory: Story = Template.bind({}); +DelayedStory.play = () => { + const exampleElement= screen.getByLabelText('example-element'); + // The delay option set the amount of milliseconds between characters being typed + await userEvent.type(exampleElement, 'random string', { + delay: 100, + }); + + const AnotherExampleElement= screen.getByLabelText('another-example-element'); + await userEvent.type(AnotherExampleElement, 'another random string', { + delay: 100, + }); +}; +``` diff --git a/docs/snippets/angular/my-component-play-function-with-selectevent.mdx.mdx b/docs/snippets/angular/my-component-play-function-with-selectevent.mdx.mdx new file mode 100644 index 000000000000..4638665ad343 --- /dev/null +++ b/docs/snippets/angular/my-component-play-function-with-selectevent.mdx.mdx @@ -0,0 +1,36 @@ +```md + + +import { Meta, Story } from '@storybook/addon-docs'; + +import { screen, userEvent } from '@storybook/testing-library'; + +import { MyComponent } from './MyComponent.component'; + + + + + +export const sleep= (ms) => { + return new Promise((resolve) => setTimeout(resolve, ms)); +}; + +export const Template = (args) => ({ props: args }); + + { + const select = screen.getByRole('listbox'); + + await userEvent.selectOptions(select, ['One Item']); + await sleep(2000); + + await userEvent.selectOptions(select, ['Another Item']); + await sleep(2000); + + await userEvent.selectOptions(select, ['Yet another item']); + + }}> + {Template.bind({})} + +``` \ No newline at end of file diff --git a/docs/snippets/angular/my-component-play-function-with-selectevent.ts.mdx b/docs/snippets/angular/my-component-play-function-with-selectevent.ts.mdx new file mode 100644 index 000000000000..d88755a5cb1c --- /dev/null +++ b/docs/snippets/angular/my-component-play-function-with-selectevent.ts.mdx @@ -0,0 +1,40 @@ +```ts +// MyComponent.stories.ts + +import { Meta, Story } from '@storybook/angular'; + +import { screen, userEvent } from '@storybook/testing-library'; + +import { MyComponent } from './MyComponent.component'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'WithSelectEvent', + component: MyComponent, +} as Meta; + +// Function to emulate pausing between interactions +function sleep(ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +const Template: Story = (args) => ({ + props: args, +}); + +export const ExampleChangeEvent: Story = Template.bind({}); +ExampleChangeEvent.play = async () => { + const select = screen.getByRole('listbox'); + + await userEvent.selectOptions(select, ['One Item']); + await sleep(2000); + + await userEvent.selectOptions(select, ['Another Item']); + await sleep(2000); + + await userEvent.selectOptions(select, ['Yet another item']); +}; +``` \ No newline at end of file diff --git a/docs/snippets/angular/my-component-story-basic-and-props.ts.mdx b/docs/snippets/angular/my-component-story-basic-and-props.ts.mdx new file mode 100644 index 000000000000..4d212e54bec1 --- /dev/null +++ b/docs/snippets/angular/my-component-story-basic-and-props.ts.mdx @@ -0,0 +1,27 @@ +```ts +// MyComponent.stories.ts + +import { Meta, Story } from '@storybook/angular'; + +import { MyComponent } from './MyComponent.component'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'Path/To/MyComponent', + component: MyComponent, +} as Meta; + + +export const Default: Story = () => ({ + props: {}, +}); + +export const WithProp: Story = () => ({ + props: { + prop: 'value', + }, +}); +``` \ No newline at end of file diff --git a/docs/snippets/angular/my-component-story-configure-viewports.mdx.mdx b/docs/snippets/angular/my-component-story-configure-viewports.mdx.mdx index 2f7d761176f3..4e7ecefe55b3 100644 --- a/docs/snippets/angular/my-component-story-configure-viewports.mdx.mdx +++ b/docs/snippets/angular/my-component-story-configure-viewports.mdx.mdx @@ -5,15 +5,17 @@ import { Meta, Story } from '@storybook/addon-docs'; import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport'; +import { MyComponent } from './MyComponent.component'; + + component={MyComponent} /> {{ - template: '
', + template: '', }}
``` \ No newline at end of file diff --git a/docs/snippets/angular/my-component-story-configure-viewports.ts.mdx b/docs/snippets/angular/my-component-story-configure-viewports.ts.mdx index edb5c126d176..31b17240aaee 100644 --- a/docs/snippets/angular/my-component-story-configure-viewports.ts.mdx +++ b/docs/snippets/angular/my-component-story-configure-viewports.ts.mdx @@ -1,32 +1,32 @@ ```ts // MyComponent.stories.ts -import { Story, Meta } from '@storybook/angular/types-6-0'; +import { Meta, Story } from '@storybook/angular'; + import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport'; -import MyComponent from './MyComponent.component'; +import { MyComponent } from './MyComponent.component'; export default { - title: 'Stories', - component: MyComponent, + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'MyComponent', + component: MyComponent, parameters: { //👇 The viewports object from the Essentials addon viewport: { - /👇 The viewports you want to use + //👇 The viewports you want to use viewports: INITIAL_VIEWPORTS, //👇 Your own default viewport defaultViewport: 'iphone6', - } + }, }, } as Meta; -export const myStory: Story = () => ({ - template: '
' +export const MyStory: Story = () => ({ + template: '', }); -myStory.parameters = { - viewport: { - defaultViewport: 'iphonex' - } -}; ``` \ No newline at end of file diff --git a/docs/snippets/angular/my-component-story-use-globaltype.mdx.mdx b/docs/snippets/angular/my-component-story-use-globaltype.mdx.mdx index b874d71189a2..ffd8be4ad9e7 100644 --- a/docs/snippets/angular/my-component-story-use-globaltype.mdx.mdx +++ b/docs/snippets/angular/my-component-story-use-globaltype.mdx.mdx @@ -1,7 +1,11 @@ ```md -import { Story } from '@storybook/addon-docs'; +import { Meta, Story } from '@storybook/addon-docs'; + +import { MyComponent } from './MyComponent.component'; + + export const getCaptionForLocale = (locale) => { switch(locale) { diff --git a/docs/snippets/angular/my-component-story-use-globaltype.ts.mdx b/docs/snippets/angular/my-component-story-use-globaltype.ts.mdx index 505764d13be0..c0f5e90f1954 100644 --- a/docs/snippets/angular/my-component-story-use-globaltype.ts.mdx +++ b/docs/snippets/angular/my-component-story-use-globaltype.ts.mdx @@ -1,6 +1,19 @@ ```ts // MyComponent.stories.ts +import { Meta } from '@storybook/angular'; + +import { MyComponent } from './MyComponent.component'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'MyComponent', + component: MyComponent, +} as Meta; + const getCaptionForLocale = (locale) => { switch (locale) { case 'es': diff --git a/docs/snippets/angular/my-component-story-with-nonstory.ts.mdx b/docs/snippets/angular/my-component-story-with-nonstory.ts.mdx new file mode 100644 index 000000000000..51b639ed1292 --- /dev/null +++ b/docs/snippets/angular/my-component-story-with-nonstory.ts.mdx @@ -0,0 +1,37 @@ +```ts +// MyComponent.stories.ts + +import { Meta, Story } from '@storybook/angular'; + +import { MyComponent } from './MyComponent.component'; + +import someData from './data.json'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'MyComponent', + component: MyComponent, + includeStories: ['SimpleStory', 'ComplexStory'], // 👈 Storybook loads these stories + excludeStories: /.*Data$/, // 👈 Storybook ignores anything that contains Data +} as Meta; + +const Template: Story = (args) => ({ + props: args, +}); + +export const simpleData = { foo: 1, bar: 'baz' }; +export const complexData = { foo: 1, foobar: { bar: 'baz', baz: someData } }; + +export const SimpleStory = Template.bind({}); +SimpleStory.args = { + data: simpleData, +}; + +export const ComplexStory = Template.bind({}); +ComplexStory.args = { + data: complexData, +}; +``` \ No newline at end of file diff --git a/docs/snippets/angular/my-component-with-env-variables.mdx.mdx b/docs/snippets/angular/my-component-with-env-variables.mdx.mdx index 58dc4322011d..1ece7ecd9a8d 100644 --- a/docs/snippets/angular/my-component-with-env-variables.mdx.mdx +++ b/docs/snippets/angular/my-component-with-env-variables.mdx.mdx @@ -1,21 +1,20 @@ ```md -import { Meta, Story, Canvas } from '@storybook/addon-docs'; +import { Canvas, Meta, Story } from '@storybook/addon-docs'; -import MyComponent from './my-component.component'; +import { MyComponent } from './my-component.component'; - + export const Template = (args) => ({ props: args }); {Template.bind({})} - ``` \ No newline at end of file diff --git a/docs/snippets/angular/my-component-with-env-variables.ts.mdx b/docs/snippets/angular/my-component-with-env-variables.ts.mdx index 2170728dafff..46a610aeab4f 100644 --- a/docs/snippets/angular/my-component-with-env-variables.ts.mdx +++ b/docs/snippets/angular/my-component-with-env-variables.ts.mdx @@ -1,21 +1,25 @@ ```ts // MyComponent.stories.ts -import { Story, Meta } from '@storybook/angular/types-6-0'; +import { Meta, Story } from '@storybook/angular'; -import MyComponent from './mycomponent.component'; +import { MyComponent } from './MyComponent.component'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'MyComponent', component: MyComponent, - title: 'A story using environment variables inside a .env file', } as Meta; -const Template: Story = (args) => ({ - props: args +const Template: Story = (args) => ({ + props: args, }); -export const Default = Template.bind({}); -Default.args = { +export const ExampleStory = Template.bind({}); +ExampleStory.args = { propertyA: process.env.STORYBOOK_DATA_KEY }; ``` \ No newline at end of file diff --git a/docs/snippets/angular/page-story-slots.mdx.mdx b/docs/snippets/angular/page-story-slots.mdx.mdx index c5f87d589668..333bc3bec80f 100644 --- a/docs/snippets/angular/page-story-slots.mdx.mdx +++ b/docs/snippets/angular/page-story-slots.mdx.mdx @@ -1,9 +1,9 @@ ```md - + import { Meta, Story } from '@storybook/addon-docs'; -import Page from './page.component.ts'; +import { Page } from './page.component'; @@ -11,7 +11,7 @@ export const Template = (args) => ({ props: args, template:` - ${args.footer} + ${args.footer} `, }); diff --git a/docs/snippets/angular/page-story-slots.ts.mdx b/docs/snippets/angular/page-story-slots.ts.mdx index fff0622251a4..4a59a2b1b5f7 100644 --- a/docs/snippets/angular/page-story-slots.ts.mdx +++ b/docs/snippets/angular/page-story-slots.ts.mdx @@ -1,15 +1,21 @@ ```ts // Page.stories.ts -import { Meta, Story } from '@storybook/angular/types-6-0'; -import Page from './page.component'; +import { Meta, Story } from '@storybook/angular'; + +import { Page } from './page.component'; export default { - component: Page, + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'Page', + component: Page, } as Meta; -const Template: Story = (args) => ({ + +const Template: Story = (args) => ({ props: args, template: ` @@ -21,5 +27,4 @@ export const CustomFooter = Template.bind({}); CustomFooter.args = { footer: 'Built with Storybook', }; - -``` +``` \ No newline at end of file diff --git a/docs/snippets/angular/page-story-with-args-composition.ts.mdx b/docs/snippets/angular/page-story-with-args-composition.ts.mdx index 4c40c631d25a..6b141cf0a9a7 100644 --- a/docs/snippets/angular/page-story-with-args-composition.ts.mdx +++ b/docs/snippets/angular/page-story-with-args-composition.ts.mdx @@ -1,15 +1,14 @@ ```ts // YourPage.stories.ts -import { moduleMetadata } from '@storybook/angular' -import { Story, Meta } from '@storybook/angular/types-6-0'; +import { Meta, moduleMetadata, Story } from '@storybook/angular'; import { CommonModule } from '@angular/common'; -import DocumentScreen from './YourPage.component'; -import DocumentList from './DocumentList.component'; -import DocumentHeader from './DocumentHeader.component'; -import PageLayout from './PageLayout.component'; +import { DocumentScreen } from './YourPage.component'; +import { DocumentList } from './DocumentList.component'; +import { DocumentHeader } from './DocumentHeader.component'; +import { PageLayout } from './PageLayout.component'; //👇 Imports the required stories import * as PageLayoutStories from './PageLayout.stories'; @@ -17,18 +16,22 @@ import * as DocumentHeaderStories from './DocumentHeader.stories'; import * as DocumentListStories from './DocumentList.stories'; export default { - component: DocumentScreen, + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'DocumentScreen', + component: DocumentScreen, decorators: [ moduleMetadata({ - // imports components to allow component composition with Storybook - declarations: [DocumentList, DocumentHeader,PageLayout], + declarations: [DocumentList, DocumentHeader, PageLayout], imports: [CommonModule], }), ], } as Meta; -const Template: Story = (args) => ({ + +const Template: Story = (args) => ({ props: args, }); diff --git a/docs/snippets/angular/page-story.ts.mdx b/docs/snippets/angular/page-story.ts.mdx index 4dd54b5648f1..b10dacff8340 100644 --- a/docs/snippets/angular/page-story.ts.mdx +++ b/docs/snippets/angular/page-story.ts.mdx @@ -1,18 +1,22 @@ ```ts // Page.stories.ts -import { Story, Meta } from '@storybook/angular/types-6-0'; +import { Meta, moduleMetadata, Story } from '@storybook/angular'; -import { moduleMetadata } from '@storybook/angular'; import { CommonModule } from '@angular/common'; -import Button from './button.component'; -import Header from './header.component'; -import Page from './page.component'; +import { Button } from './button.component'; +import { Header } from './header.component'; +import { Page } from './page.component'; +//👇 Imports all Header stories import * as HeaderStories from './Header.stories'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'Page', component: Page, decorators: [ @@ -23,12 +27,13 @@ export default { ], } as Meta; -const Template: Story = (args) => ({ +const Template: Story = (args) => ({ props: args, }); -export const LoggedIn = Template.bind({}); -LoggedIn.args = { - ...HeaderStories.LoggedIn.args, +export const LoggedIn = { + args: { + ...HeaderStories.LoggedIn.args, + }, }; ``` \ No newline at end of file diff --git a/docs/snippets/angular/register-component-with-play-function.mdx.mdx b/docs/snippets/angular/register-component-with-play-function.mdx.mdx new file mode 100644 index 000000000000..e157ee1d754f --- /dev/null +++ b/docs/snippets/angular/register-component-with-play-function.mdx.mdx @@ -0,0 +1,40 @@ +```md + + +import { Meta, Story } from '@storybook/addon-docs'; + +import { screen, userEvent } from '@storybook/testing-library'; + +import { RegistrationForm } from './RegistrationForm.component'; + + + +export const Template = (args) => ({ props: args }); + + { + const emailInput = screen.getByLabelText('email', { + selector: 'input', + }); + + await userEvent.type(emailInput, 'example-email@email.com', { + delay: 100, + }); + + const passwordInput = screen.getByLabelText('password', { + selector: 'input', + }); + + await userEvent.type(passwordInput, 'ExamplePassword', { + delay: 100, + }); + + // See https://storybook.js.org/docs/angular/essentials/actions#automatically-matching-args to learn how to setup logging in the Actions panel + const Submit = screen.getByRole('button'); + + await userEvent.click(Submit); + }}> + {Template.bind({})} + +``` \ No newline at end of file diff --git a/docs/snippets/angular/register-component-with-play-function.ts.mdx b/docs/snippets/angular/register-component-with-play-function.ts.mdx new file mode 100644 index 000000000000..39f62fd79993 --- /dev/null +++ b/docs/snippets/angular/register-component-with-play-function.ts.mdx @@ -0,0 +1,45 @@ +```ts +// RegistrationForm.stories.ts + +import { Meta, Story } from '@storybook/angular'; + +import { screen, userEvent } from '@storybook/testing-library'; + +import { RegistrationForm } from './RegistrationForm.component'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'RegistrationForm', + component: RegistrationForm, +} as Meta; + +const Template: Story = (args) => ({ + props: args, +}); + +export const FilledForm: Story = Template.bind({}); +FilledForm.play = async () => { + const emailInput = screen.getByLabelText('email', { + selector: 'input', + }); + + await userEvent.type(emailInput, 'example-email@email.com', { + delay: 100, + }); + + const passwordInput = screen.getByLabelText('password', { + selector: 'input', + }); + + await userEvent.type(passwordInput, 'ExamplePassword', { + delay: 100, + }); + // See https://storybook.js.org/docs/angular/essentials/actions#automatically-matching-args to learn how to setup logging in the Actions panel + const Submit = screen.getByRole('button'); + + await userEvent.click(Submit); +}; +``` \ No newline at end of file diff --git a/docs/snippets/angular/simple-page-implementation.ts.mdx b/docs/snippets/angular/simple-page-implementation.ts.mdx index ff6b75176448..84bdbf7aa3b8 100644 --- a/docs/snippets/angular/simple-page-implementation.ts.mdx +++ b/docs/snippets/angular/simple-page-implementation.ts.mdx @@ -12,7 +12,7 @@ import { Component, Input } from '@angular/core'; `, }) -export default class DocumentScreen { +export class DocumentScreen { @Input() user: any = { id: 0, name: 'Some User' }; @@ -22,5 +22,4 @@ export default class DocumentScreen { @Input() subdocuments: any = []; } - ``` \ No newline at end of file diff --git a/docs/snippets/angular/storybook-addon-a11y-disable.mdx.mdx b/docs/snippets/angular/storybook-addon-a11y-disable.mdx.mdx new file mode 100644 index 000000000000..3e1845ee0ffb --- /dev/null +++ b/docs/snippets/angular/storybook-addon-a11y-disable.mdx.mdx @@ -0,0 +1,24 @@ +```md + + +import { Meta, Story } from '@storybook/addon-docs'; + +import { MyComponent } from './MyComponent.component'; + + + +export const Template = () => ({}); + + + {Template.bind({})} + +``` \ No newline at end of file diff --git a/docs/snippets/angular/storybook-addon-a11y-disable.ts.mdx b/docs/snippets/angular/storybook-addon-a11y-disable.ts.mdx new file mode 100644 index 000000000000..7b3aec3f59d2 --- /dev/null +++ b/docs/snippets/angular/storybook-addon-a11y-disable.ts.mdx @@ -0,0 +1,26 @@ +```ts +// MyComponent.stories.ts + +import { Meta, Story } from '@storybook/angular'; + +import { MyComponent } from './MyComponent.component'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'Disable a11y addon', + component: MyComponent, +} as Meta; + +const Template: Story = () => ({}); + +export const NonA11yStory = Template.bind({}); +NonA11yStory.parameters = { + a11y: { + // This option disables all a11y checks on this story + disable: true, + }, +}; +``` \ No newline at end of file diff --git a/docs/snippets/angular/storybook-addon-a11y-story-config.mdx.mdx b/docs/snippets/angular/storybook-addon-a11y-story-config.mdx.mdx new file mode 100644 index 000000000000..4b39ad459c52 --- /dev/null +++ b/docs/snippets/angular/storybook-addon-a11y-story-config.mdx.mdx @@ -0,0 +1,39 @@ +```md + + +import { Meta, Story } from '@storybook/addon-docs'; + +import { MyComponent } from './MyComponent.component'; + + + +export const Template = () => ({}); + + + {Template.bind({})} + +``` \ No newline at end of file diff --git a/docs/snippets/angular/storybook-addon-a11y-story-config.ts.mdx b/docs/snippets/angular/storybook-addon-a11y-story-config.ts.mdx new file mode 100644 index 000000000000..9b434d8a6506 --- /dev/null +++ b/docs/snippets/angular/storybook-addon-a11y-story-config.ts.mdx @@ -0,0 +1,41 @@ +```ts +// MyComponent.stories.ts + +import { Meta, Story } from '@storybook/angular'; + +import { MyComponent } from './MyComponent.component'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'Configure a11y addon', + component: MyComponent, +} as Meta; + +const Template: Story = () => ({}); + +export const ExampleStory = Template.bind({}); +ExampleStory.parameters = { + a11y: { + element: '#root', + config: { + rules: [ + { + // The autocomplete rule will not run based on the CSS selector provided + id: 'autocomplete-valid', + selector: '*:not([autocomplete="nope"])', + }, + { + // Setting the enabled option to false will disable checks for this particular rule on all stories. + id: 'image-alt', + enabled: false, + }, + ], + }, + options: {}, + manual: true, + }, +}; +``` \ No newline at end of file diff --git a/docs/snippets/angular/storybook-angular-inline-css-loader.js.mdx b/docs/snippets/angular/storybook-angular-inline-css-loader.js.mdx deleted file mode 100644 index 2d966e113f0b..000000000000 --- a/docs/snippets/angular/storybook-angular-inline-css-loader.js.mdx +++ /dev/null @@ -1,3 +0,0 @@ -```js -import '!style-loader!css-loader!./styles.css'; -``` \ No newline at end of file diff --git a/docs/snippets/angular/storybook-preview-global-decorator.ts.mdx b/docs/snippets/angular/storybook-preview-global-decorator.ts.mdx index fc26f240d84d..77513950c915 100644 --- a/docs/snippets/angular/storybook-preview-global-decorator.ts.mdx +++ b/docs/snippets/angular/storybook-preview-global-decorator.ts.mdx @@ -6,4 +6,4 @@ import { componentWrapperDecorator } from '@storybook/angular'; export const decorators = [ componentWrapperDecorator((story) => `
${story}
`), ]; -``` +``` \ No newline at end of file diff --git a/docs/snippets/angular/storybook-preview-with-angular-polyfills.js.mdx b/docs/snippets/angular/storybook-preview-with-angular-polyfills.js.mdx new file mode 100644 index 000000000000..915ab54fc980 --- /dev/null +++ b/docs/snippets/angular/storybook-preview-with-angular-polyfills.js.mdx @@ -0,0 +1,21 @@ +```js +// .storybook/preview.js + +import { setCompodocJson } from '@storybook/addon-docs/angular'; +import docJson from '../documentation.json'; + +import '../src/polyfills'; + +setCompodocJson(docJson); + +export const parameters = { + actions: { argTypesRegex: '^on[A-Z].*' }, + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/, + }, + }, + docs: { inlineStories: true }, +}; +``` \ No newline at end of file diff --git a/docs/snippets/angular/storybook-preview-with-styled-components-decorator.ts.mdx b/docs/snippets/angular/storybook-preview-with-styled-components-decorator.ts.mdx index 9d0aa980ed2a..5b58038841fb 100644 --- a/docs/snippets/angular/storybook-preview-with-styled-components-decorator.ts.mdx +++ b/docs/snippets/angular/storybook-preview-with-styled-components-decorator.ts.mdx @@ -17,4 +17,4 @@ export const decorators = [ ({ globals }) => ({ theme: globals.theme }) ), ]; -``` +``` \ No newline at end of file diff --git a/docs/snippets/angular/storybook-run-dev.with-builder.js.mdx b/docs/snippets/angular/storybook-run-dev.with-builder.js.mdx new file mode 100644 index 000000000000..cc38d83dec77 --- /dev/null +++ b/docs/snippets/angular/storybook-run-dev.with-builder.js.mdx @@ -0,0 +1,3 @@ +```shell +ng run my-project:storybook +``` \ No newline at end of file diff --git a/docs/snippets/angular/table-story-fully-customize-controls.mdx.mdx b/docs/snippets/angular/table-story-fully-customize-controls.mdx.mdx index d94776f7c643..51fccdf7d9fa 100644 --- a/docs/snippets/angular/table-story-fully-customize-controls.mdx.mdx +++ b/docs/snippets/angular/table-story-fully-customize-controls.mdx.mdx @@ -1,7 +1,11 @@ ```md -import { Story } from '@storybook/addon-docs'; +import { Meta, Story } from '@storybook/addon-docs'; + +import { Table } from './Table.component'; + + export const TableStory = (args) => ({ props: args, diff --git a/docs/snippets/angular/table-story-fully-customize-controls.ts.mdx b/docs/snippets/angular/table-story-fully-customize-controls.ts.mdx index 7dfbb55d1738..17982a224f13 100644 --- a/docs/snippets/angular/table-story-fully-customize-controls.ts.mdx +++ b/docs/snippets/angular/table-story-fully-customize-controls.ts.mdx @@ -1,7 +1,20 @@ ```ts // Table.stories.ts -const TableStory: Story = (args) => ({ +import { Meta, Story } from '@storybook/angular', + +import { Table } from './Table.component'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'Custom Table', + component: Table, +} as Meta; + +const TableStory: Story = (args) => ({ props: args, template: ` @@ -26,4 +39,4 @@ Numeric.args = { //👇 The remaining args get passed to the `Table` component size: 'large', }; -``` +``` \ No newline at end of file diff --git a/docs/snippets/angular/your-component-with-decorator.mdx.mdx b/docs/snippets/angular/your-component-with-decorator.mdx.mdx index b83c399446f7..b3a823be40b5 100644 --- a/docs/snippets/angular/your-component-with-decorator.mdx.mdx +++ b/docs/snippets/angular/your-component-with-decorator.mdx.mdx @@ -1,5 +1,5 @@ ```md - + import { Meta } from '@storybook/addon-docs'; diff --git a/docs/snippets/angular/your-component-with-decorator.ts.mdx b/docs/snippets/angular/your-component-with-decorator.ts.mdx index 8f29fd5f1bfb..927536968cb5 100644 --- a/docs/snippets/angular/your-component-with-decorator.ts.mdx +++ b/docs/snippets/angular/your-component-with-decorator.ts.mdx @@ -1,11 +1,17 @@ ```ts -// your-component.stories.ts +// YourComponent.stories.ts -import { Meta, componentWrapperDecorator } from '@storybook/angular'; +import { componentWrapperDecorator, Meta } from '@storybook/angular'; + +import { YourComponent } from './your.component'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'YourComponent', component: YourComponent, decorators: [componentWrapperDecorator((story) => `
${story}
`)], } as Meta; -``` +``` \ No newline at end of file diff --git a/docs/snippets/angular/your-component.mdx.mdx b/docs/snippets/angular/your-component.mdx.mdx index d42291faac70..8c2bd62e6f2a 100644 --- a/docs/snippets/angular/your-component.mdx.mdx +++ b/docs/snippets/angular/your-component.mdx.mdx @@ -8,7 +8,7 @@ import { YourComponent } from './your.component'; - + export const Template = (args) => ({ props: args }); diff --git a/docs/snippets/angular/your-component.ts.mdx b/docs/snippets/angular/your-component.ts.mdx index cccec7f8fa00..e33f39347f74 100644 --- a/docs/snippets/angular/your-component.ts.mdx +++ b/docs/snippets/angular/your-component.ts.mdx @@ -3,21 +3,26 @@ import { Meta, Story } from '@storybook/angular'; + import { YourComponent } from './your.component'; //👇 This default export determines where your story goes in the story list export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/angular/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'YourComponent', component: YourComponent, } as Meta; //👇 We create a “template” of how args map to rendering -const Template: Story = (args) => ({ - props: args, +const Template: Story = (args) => ({ + props:args, }); -export const YourStory = Template.bind({}); -YourStory.args = { - /* 👇 The args you need here will depend on your component */ +export const FirstStory = Template.bind({}); +FirstStory.args= { + //👇 The args you need here will depend on your component }; ``` \ No newline at end of file diff --git a/docs/snippets/common/args-usage-with-addons.js.mdx b/docs/snippets/common/args-usage-with-addons.js.mdx index a86ae5b595c8..77d833352065 100644 --- a/docs/snippets/common/args-usage-with-addons.js.mdx +++ b/docs/snippets/common/args-usage-with-addons.js.mdx @@ -1,5 +1,5 @@ ```js -// your-addon/register.js +// your-addon/manager.js import { useArgs } from '@storybook/api'; @@ -9,8 +9,8 @@ const [args, updateArgs, resetArgs] = useArgs(); updateArgs({ key: 'value' }); // To reset one (or more) args: -resetArgs(['key']); +resetArgs((argNames: ['key'])); // To reset all args resetArgs(); -``` +``` \ No newline at end of file diff --git a/docs/snippets/common/badge-story-custom-argtypes.js.mdx b/docs/snippets/common/badge-story-custom-argtypes.js.mdx index 7ffb54787e47..1a4d2a33ec0a 100644 --- a/docs/snippets/common/badge-story-custom-argtypes.js.mdx +++ b/docs/snippets/common/badge-story-custom-argtypes.js.mdx @@ -1,43 +1,43 @@ ```js -// Badge.stories.js | Badge.stories.jsx | Badge.stories.ts | Badge.stories.tsx +// Badge.stories.js|jsx|ts|tsx + +import { Badge } from './Badge'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'Badge', component: Badge, - title: 'CSF/Badge', argTypes: { status: { name: 'Badge Status', description: 'Available options available to the Badge', - options: [ - 'positive', - 'negative', - 'warning', - 'error', - 'neutral' - ], + options: ['positive', 'negative', 'warning', 'error', 'neutral'], table: { defaultValue: { - summary: 'positive' + summary: 'positive', }, type: { summary: 'Shows options to the Badge', - detail: 'Listing of available options' - } + detail: 'Listing of available options', + }, }, }, label: { name: 'Badge Content', description: 'Text shown by Badge', control: { - type: 'text' + type: 'text', }, table: { type: { summary: 'The label contents', - detail: 'Text displayed by the Badge' - } - } - } - } + detail: 'Text displayed by the Badge', + }, + }, + }, + }, }; -``` +``` \ No newline at end of file diff --git a/docs/snippets/common/badge-story-custom-argtypes.mdx.mdx b/docs/snippets/common/badge-story-custom-argtypes.mdx.mdx index 4d5168e1f5e3..6c787f97d614 100644 --- a/docs/snippets/common/badge-story-custom-argtypes.mdx.mdx +++ b/docs/snippets/common/badge-story-custom-argtypes.mdx.mdx @@ -1,7 +1,7 @@ ```md -import { Meta, Story, Canvas, ArgsTable } from '@storybook/addon-docs'; +import { ArgsTable, Canvas, Meta, Story } from '@storybook/addon-docs'; import { Badge } from './Badge'; @@ -42,7 +42,7 @@ import { Badge } from './Badge'; } } }} -/> + component={Badge}/> ### Badge @@ -51,4 +51,4 @@ Let's define a story for our `Badge` component -``` +``` \ No newline at end of file diff --git a/docs/snippets/common/build-storybook-production-mode.npm.js.mdx b/docs/snippets/common/build-storybook-production-mode.npm.js.mdx new file mode 100644 index 000000000000..15ee902eae48 --- /dev/null +++ b/docs/snippets/common/build-storybook-production-mode.npm.js.mdx @@ -0,0 +1,3 @@ +```shell +npm run build-storybook +``` \ No newline at end of file diff --git a/docs/snippets/common/build-storybook-production-mode.yarn.js.mdx b/docs/snippets/common/build-storybook-production-mode.yarn.js.mdx new file mode 100644 index 000000000000..eda3dbd3ad90 --- /dev/null +++ b/docs/snippets/common/build-storybook-production-mode.yarn.js.mdx @@ -0,0 +1,3 @@ +```shell +yarn build-storybook +``` \ No newline at end of file diff --git a/docs/snippets/common/button-group-story-subcomponents.js.mdx b/docs/snippets/common/button-group-story-subcomponents.js.mdx index 27c2aa1d48f6..98111438fa22 100644 --- a/docs/snippets/common/button-group-story-subcomponents.js.mdx +++ b/docs/snippets/common/button-group-story-subcomponents.js.mdx @@ -1,10 +1,14 @@ ```js -// ButtonGroup.stories.js | ButtonGroup.stories.jsx +// ButtonGroup.stories.js|jsx -import { Button, ButtonGroup } from '../ButtonGroup'; +import { Button, ButtonGroup } from './ButtonGroup'; export default { - title: 'Path/to/ButtonGroup', + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'ButtonGroup', component: ButtonGroup, subcomponents: { Button }, }; diff --git a/docs/snippets/common/button-group-story-subcomponents.ts.mdx b/docs/snippets/common/button-group-story-subcomponents.ts.mdx index d5657305d92a..1b5a6f33bc13 100644 --- a/docs/snippets/common/button-group-story-subcomponents.ts.mdx +++ b/docs/snippets/common/button-group-story-subcomponents.ts.mdx @@ -1,12 +1,16 @@ ```ts -// ButtonGroup.stories.ts | ButtonGroup.stories.tsx +// ButtonGroup.stories.ts|tsx -import { Meta } from '@storybook/react/types-6-0'; +import { Meta } from '@storybook/react'; -import { Button, ButtonGroup } from '../ButtonGroup'; +import { Button, ButtonGroup } from './ButtonGroup'; export default { - title: 'Path/to/ButtonGroup', + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'ButtonGroup', component: ButtonGroup, subcomponents: { Button }, } as Meta; diff --git a/docs/snippets/common/button-story-action-event-handle.js.mdx b/docs/snippets/common/button-story-action-event-handle.js.mdx index 653e01aef496..831cd407bcf0 100644 --- a/docs/snippets/common/button-story-action-event-handle.js.mdx +++ b/docs/snippets/common/button-story-action-event-handle.js.mdx @@ -1,8 +1,15 @@ ```js -// Button.stories.js | Button.stories.jsx | Button.stories.ts | Button.stories.tsx +// Button.stories.js|jsx|ts|tsx + +import { Button } from './Button'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'Button', + component: Button, parameters: { actions: { handles: ['mouseover', 'click .btn'], diff --git a/docs/snippets/common/button-story-action-event-handle.mdx.mdx b/docs/snippets/common/button-story-action-event-handle.mdx.mdx index 5ab875ee59df..a25945c9328c 100644 --- a/docs/snippets/common/button-story-action-event-handle.mdx.mdx +++ b/docs/snippets/common/button-story-action-event-handle.mdx.mdx @@ -3,11 +3,14 @@ import { Meta } from '@storybook/addon-docs'; +import { Button } from './Button'; + + }} + component={Button}/> ``` \ No newline at end of file diff --git a/docs/snippets/common/button-story-argtypes-with-categories.js.mdx b/docs/snippets/common/button-story-argtypes-with-categories.js.mdx index cf247036634e..f082f781cb87 100644 --- a/docs/snippets/common/button-story-argtypes-with-categories.js.mdx +++ b/docs/snippets/common/button-story-argtypes-with-categories.js.mdx @@ -1,7 +1,13 @@ ```js -// Button.stories.js | Button.stories.jsx | Button.stories.ts | Button.stories.tsx +// Button.stories.js|jsx|ts|tsx + +import { Button } from './Button'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'Button', component: Button, argTypes: { @@ -9,32 +15,32 @@ export default { backgroundColor: { control: 'color', table: { - category: 'Colors' - } + category: 'Colors', + }, }, primary: { table: { - category: 'Colors' - } + category: 'Colors', + }, }, // Assigns the argType to the Text category label: { table: { - category: 'Text' - } + category: 'Text', + }, }, // Assigns the argType to the Events category onClick: { table: { - category: 'Events' - } + category: 'Events', + }, }, // Assigns the argType to the Sizes category size: { table: { - category: 'Sizes' - } - } - } + category: 'Sizes', + }, + }, + }, }; ``` \ No newline at end of file diff --git a/docs/snippets/common/button-story-argtypes-with-categories.mdx.mdx b/docs/snippets/common/button-story-argtypes-with-categories.mdx.mdx new file mode 100644 index 000000000000..f57d4c8ada12 --- /dev/null +++ b/docs/snippets/common/button-story-argtypes-with-categories.mdx.mdx @@ -0,0 +1,40 @@ +```md + + +import { ArgsTable, Meta } from '@storybook/addon-docs'; + +import { Button } from './Button'; + + +``` \ No newline at end of file diff --git a/docs/snippets/common/button-story-argtypes-with-subcategories.js.mdx b/docs/snippets/common/button-story-argtypes-with-subcategories.js.mdx index 62e7cf67ebb9..216e23a47816 100644 --- a/docs/snippets/common/button-story-argtypes-with-subcategories.js.mdx +++ b/docs/snippets/common/button-story-argtypes-with-subcategories.js.mdx @@ -1,7 +1,13 @@ ```js -// Button.stories.js | Button.stories.jsx | Button.stories.ts | Button.stories.tsx +// Button.stories.js|jsx|ts|tsx + +import { Button } from './Button'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'Button', component: Button, argTypes: { @@ -11,34 +17,34 @@ export default { table: { category: 'Colors', // Assigns the argTypes to a specific subcategory - subcategory: 'Button colors' - } + subcategory: 'Button colors', + }, }, primary: { table: { category: 'Colors', - subcategory: 'Button style' - } + subcategory: 'Button style', + }, }, label: { table: { category: 'Text', - subcategory: 'Button contents' - } + subcategory: 'Button contents', + }, }, // Assigns the argType to the Events category onClick: { table: { category: 'Events', - subcategory: 'Button Events' - } + subcategory: 'Button Events', + }, }, // Assigns the argType to the Sizes category size: { table: { - category: 'Sizes' - } - } - } + category: 'Sizes', + }, + }, + }, }; ``` \ No newline at end of file diff --git a/docs/snippets/common/button-story-argtypes-with-subcategories.mdx.mdx b/docs/snippets/common/button-story-argtypes-with-subcategories.mdx.mdx new file mode 100644 index 000000000000..b5d15bfe7236 --- /dev/null +++ b/docs/snippets/common/button-story-argtypes-with-subcategories.mdx.mdx @@ -0,0 +1,45 @@ +```md + + +import { ArgsTable, Meta, Story } from '@storybook/addon-docs'; + +import { Button } from './Button'; + + +``` \ No newline at end of file diff --git a/docs/snippets/common/button-story-controls-primary-variant.js.mdx b/docs/snippets/common/button-story-controls-primary-variant.js.mdx index f36addd2d26d..4fd71c6e3a0a 100644 --- a/docs/snippets/common/button-story-controls-primary-variant.js.mdx +++ b/docs/snippets/common/button-story-controls-primary-variant.js.mdx @@ -1,8 +1,29 @@ ```js -// Button.stories.js | Button.stories.jsx | Button.stories.ts | Button.stories.tsx +// Button.stories.js|jsx|ts|tsx -const Primary = Template.bind({}); +import { Button } from './Button'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'Button', + component: Button, +}; + +const Template = (args) => ({ + //👇 Your template goes here +}); + +export const Primary = Template.bind({}); Primary.args = { - variant: 'primary', + variant: 'primary', +}; + +export const Primary = { + args: { + variant: 'primary', + }, }; ``` \ No newline at end of file diff --git a/docs/snippets/common/button-story-controls-primary-variant.mdx.mdx b/docs/snippets/common/button-story-controls-primary-variant.mdx.mdx index 87e4b0216333..bf07a883f857 100644 --- a/docs/snippets/common/button-story-controls-primary-variant.mdx.mdx +++ b/docs/snippets/common/button-story-controls-primary-variant.mdx.mdx @@ -1,7 +1,15 @@ ```md -import { Story } from '@storybook/addon-docs'; +import { Meta, Story } from '@storybook/addon-docs'; + +import { Button } from './Button'; + + + +export const Template = (args) => ({ + //👇 Your template goes here +}); + import { Meta } from '@storybook/addon-docs'; diff --git a/docs/snippets/common/button-story-default-export.js.mdx b/docs/snippets/common/button-story-default-export.js.mdx index ec2b02425fd7..a7a5098295c9 100644 --- a/docs/snippets/common/button-story-default-export.js.mdx +++ b/docs/snippets/common/button-story-default-export.js.mdx @@ -1,7 +1,14 @@ ```js -// Button.stories.js | Button.stories.jsx | Button.stories.ts | Button.stories.tsx +// Button.stories.js|jsx|ts|tsx + +import { Button } from './Button'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'Button', + component: Button, }; ``` \ No newline at end of file diff --git a/docs/snippets/common/button-story-disable-addon.js.mdx b/docs/snippets/common/button-story-disable-addon.js.mdx index 84656a63b51e..30655cd5be7b 100644 --- a/docs/snippets/common/button-story-disable-addon.js.mdx +++ b/docs/snippets/common/button-story-disable-addon.js.mdx @@ -1,8 +1,15 @@ ```js -// Button.stories.js | Button.stories.jsx | Button.stories.ts | Button.stories.tsx +// Button.stories.js|jsx|ts|tsx + +import { Button } from './Button'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'Button', + component: Button, parameters: { myAddon: { disable: true }, // Disables the addon }, diff --git a/docs/snippets/common/button-story-disable-docspage-component.js.mdx b/docs/snippets/common/button-story-disable-docspage-component.js.mdx index 9acd2461f7ba..f6da64894f03 100644 --- a/docs/snippets/common/button-story-disable-docspage-component.js.mdx +++ b/docs/snippets/common/button-story-disable-docspage-component.js.mdx @@ -1,18 +1,22 @@ ```js -// Button.stories.js | Button.stories.jsx | Button.stories.ts | Button.stories.tsx +// Button.stories.js|jsx|ts|tsx import { Button } from './Button'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'Button', component: Button, argTypes: { backgroundColor: { control: 'color' }, }, - parameters: { - docs: { - page: null - } + parameters: { + docs: { + page: null, + }, }, }; ``` \ No newline at end of file diff --git a/docs/snippets/common/button-story-docs-code-type.js.mdx b/docs/snippets/common/button-story-docs-code-type.js.mdx index c4130f7d16f2..9fe963c74b40 100644 --- a/docs/snippets/common/button-story-docs-code-type.js.mdx +++ b/docs/snippets/common/button-story-docs-code-type.js.mdx @@ -1,7 +1,13 @@ ```js -// Button.stories.js | Button.stories.jsx | Button.stories.ts | Button.stories.tsx +// Button.stories.js|jsx|ts|tsx + +import { Button } from './Button'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'Button', component: Button, argTypes: { @@ -11,9 +17,9 @@ export default { docs: { source: { type: 'code', - } - } - } + }, + }, + }, }; // Remainder story implementation diff --git a/docs/snippets/common/button-story-docspage-with-custom-component.js.mdx b/docs/snippets/common/button-story-docspage-with-custom-component.js.mdx index 1cfd5c698d85..49b77125e0ee 100644 --- a/docs/snippets/common/button-story-docspage-with-custom-component.js.mdx +++ b/docs/snippets/common/button-story-docspage-with-custom-component.js.mdx @@ -1,20 +1,24 @@ ```js -// Button.stories.js | Button.stories.jsx | Button.stories.ts | Button.stories.tsx +// Button.stories.js|jsx|ts|tsx import { Button } from './Button'; -import ButtonDocumentationComponent from './CustomDocumentationComponent'; +import { CustomDocumentationComponent } from './CustomDocumentationComponent'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'Button', component: Button, argTypes: { backgroundColor: { control: 'color' }, }, - parameters: { - docs: { - page: ButtonDocumentationComponent, - } + parameters: { + docs: { + page: CustomDocumentationComponent, + }, }, }; ``` \ No newline at end of file diff --git a/docs/snippets/common/button-story-docspage-with-mdx.js.mdx b/docs/snippets/common/button-story-docspage-with-mdx.js.mdx index f06e53ac85a4..ce8fad9d9645 100644 --- a/docs/snippets/common/button-story-docspage-with-mdx.js.mdx +++ b/docs/snippets/common/button-story-docspage-with-mdx.js.mdx @@ -1,12 +1,16 @@ ```js -// Button.stories.js | Button.stories.jsx | Button.stories.ts | Button.stories.tsx +// Button.stories.js|jsx|ts|tsx import { Button } from './Button'; -import CustomMDXDocumentation from './Custom-MDX-Documentation.mdx' +import CustomMDXDocumentation from './Custom-MDX-Documentation.mdx'; export default { - title: 'Example/Button', + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'Button', component: Button, argTypes: { backgroundColor: { control: 'color' }, @@ -14,15 +18,31 @@ export default { parameters: { docs: { page: CustomMDXDocumentation, - } + }, }, }; -export const Primary = () => ; +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'Button', + component: Button, +} as ComponentMeta; +export const Primary: ComponentStory = () => ; +``` \ No newline at end of file diff --git a/docs/snippets/react/button-story-with-args.js.mdx b/docs/snippets/react/button-story-with-args.js.mdx index 3d466dc47bdc..430d0187f520 100644 --- a/docs/snippets/react/button-story-with-args.js.mdx +++ b/docs/snippets/react/button-story-with-args.js.mdx @@ -1,13 +1,17 @@ ```js -// Button.stories.js | Button.stories.jsx +// Button.stories.js|jsx import React from 'react'; import { Button } from './Button'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'Button', component: Button, - title: 'Components/Button', }; //👇 We create a “template” of how args map to rendering @@ -15,9 +19,8 @@ const Template = (args) => ; ``` \ No newline at end of file diff --git a/docs/snippets/react/button-story.mdx-with-hooks.mdx.mdx b/docs/snippets/react/button-story.mdx-with-hooks.mdx.mdx new file mode 100644 index 000000000000..41d981b81380 --- /dev/null +++ b/docs/snippets/react/button-story.mdx-with-hooks.mdx.mdx @@ -0,0 +1,30 @@ +```md + + +import { useState } from 'react'; + +import { Canvas, Meta, Story } from '@storybook/addon-docs'; + +import { Button } from './Button'; + + + + + + {() => { + const [value, setValue] = useState('Secondary'); + const [isPrimary, setIsPrimary] = useState(false); + // Sets a click handler to change the label's value + const handleOnChange = () => { + if (!isPrimary) { + setIsPrimary(true); + setValue("Primary"); + } + }; + return ( + ; +export const Primary: ComponentStory = () => ; ``` \ No newline at end of file diff --git a/docs/snippets/react/button-story.with-hooks.js.mdx b/docs/snippets/react/button-story.with-hooks.js.mdx index 0a4f6ea112a2..a55ac3a4bc24 100644 --- a/docs/snippets/react/button-story.with-hooks.js.mdx +++ b/docs/snippets/react/button-story.with-hooks.js.mdx @@ -1,14 +1,23 @@ ```js -// Button.stories.js | Button.stories.ts | Button.stories.jsx | Button.stories.tsx +// Button.stories.js|ts|jsx|tsx import React, { useState } from 'react'; import { Button } from './Button'; +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'Button', + component: Button, +}; + /* -* Example Button story with React Hooks. -* See note below related to this example. -*/ + * Example Button story with React Hooks. + * See note below related to this example. + */ export const Primary = () => { // Sets the hooks for both the label and primary props const [value, setValue] = useState('Secondary'); diff --git a/docs/snippets/react/button-test.js.mdx b/docs/snippets/react/button-test.js.mdx deleted file mode 100644 index 40b8c93004e5..000000000000 --- a/docs/snippets/react/button-test.js.mdx +++ /dev/null @@ -1,17 +0,0 @@ -```js -// Button.test.js - -import React from 'react'; - -import { render, screen } from '@testing-library/react'; - -import '@testing-library/jest-dom/extend-expect'; - -//👇 Imports a specific story for the test -import { Primary } from './Button.stories'; - -it('renders the button in the primary state', () => { - render(); - expect(screen.getByRole('button')).toHaveTextContent('Primary'); -}); -``` \ No newline at end of file diff --git a/docs/snippets/react/checkbox-story-csf.js.mdx b/docs/snippets/react/checkbox-story-csf.js.mdx index b2c02b8831b9..460b871a04bc 100644 --- a/docs/snippets/react/checkbox-story-csf.js.mdx +++ b/docs/snippets/react/checkbox-story-csf.js.mdx @@ -1,12 +1,16 @@ ```js -// Checkbox.stories.js | Checkbox.stories.jsx | // Checkbox.stories.ts | Checkbox.stories.tsx +// Checkbox.stories.js|jsx import React from 'react'; import { Checkbox } from './Checkbox'; export default { - title: 'MDX/Checkbox', + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'Checkbox', component: Checkbox, }; diff --git a/docs/snippets/react/checkbox-story-csf.ts.mdx b/docs/snippets/react/checkbox-story-csf.ts.mdx new file mode 100644 index 000000000000..503a2f991320 --- /dev/null +++ b/docs/snippets/react/checkbox-story-csf.ts.mdx @@ -0,0 +1,26 @@ +```ts +// Checkbox.stories.ts|tsx + +import React from 'react'; + +import { ComponentMeta, ComponentStory } from '@storybook/react'; + +import { Checkbox } from './Checkbox'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'Checkbox', + component: Checkbox, +} as ComponentMeta; + +export const allCheckboxes: ComponentStory = () => ( +
+ + + + +); +``` \ No newline at end of file diff --git a/docs/snippets/react/checkbox-story-starter-example.mdx.mdx b/docs/snippets/react/checkbox-story-starter-example.mdx.mdx index 08630bffdbe4..438833d3ba88 100644 --- a/docs/snippets/react/checkbox-story-starter-example.mdx.mdx +++ b/docs/snippets/react/checkbox-story-starter-example.mdx.mdx @@ -1,7 +1,7 @@ ```md - + -import { Meta, Story, Canvas } from '@storybook/addon-docs'; +import { Canvas, Meta, Story } from '@storybook/addon-docs'; import { Checkbox } from './Checkbox'; diff --git a/docs/snippets/react/checkbox-story.mdx.mdx b/docs/snippets/react/checkbox-story.mdx.mdx index ad5ea3eb9741..2621dc968d12 100644 --- a/docs/snippets/react/checkbox-story.mdx.mdx +++ b/docs/snippets/react/checkbox-story.mdx.mdx @@ -1,45 +1,45 @@ ```md - + -import { Meta, Story, Canvas } from '@storybook/addon-docs'; +import { Canvas, Meta, Story } from '@storybook/addon-docs'; import { Checkbox } from './Checkbox'; +export const Template = (args) => ; + # Checkbox With `MDX`, we can define a story for `Checkbox` right in the middle of our Markdown documentation. -export const Template = (args) => - - {Template.bind({})} - + }}> + {Template.bind({})} +
- {Template.bind({})} - - + }}> + {Template.bind({})} +
+ - {Template.bind({})} - + }}> + {Template.bind({})} + -``` +``` \ No newline at end of file diff --git a/docs/snippets/react/component-story-custom-args-complex.js.mdx b/docs/snippets/react/component-story-custom-args-complex.js.mdx index 417dd18f0e04..870ce8bdd85d 100644 --- a/docs/snippets/react/component-story-custom-args-complex.js.mdx +++ b/docs/snippets/react/component-story-custom-args-complex.js.mdx @@ -1,23 +1,22 @@ ```js -// YourComponent.stories.js | YourComponent.stories.jsx +// YourComponent.stories.js|jsx import React from 'react'; import { YourComponent } from './your-component'; -//👇 Some function to demonstrate the behavior -const someFunction = (valuePropertyA, valuePropertyB) => { - // Makes some computations and returns something -}; - export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'YourComponent', component: YourComponent, - title: 'A complex case with a function', //👇 Creates specific argTypes with options argTypes: { propertyA: { options: ['Item One', 'Item Two', 'Item Three'], - control: { type: 'select' } // Automatically inferred when 'options' is defined + control: { type: 'select' }, // Automatically inferred when 'options' is defined }, propertyB: { options: ['Another Item One', 'Another Item Two', 'Another Item Three'], @@ -25,10 +24,21 @@ export default { }, }; +//👇 Some function to demonstrate the behavior +const someFunction = (valuePropertyA, valuePropertyB) => { + // Makes some computations and returns something +}; + const Template = ({ propertyA, propertyB, ...rest }) => { //👇 Assigns the function result to a variable const someFunctionResult = someFunction(propertyA, propertyB); return ; }; + +export const ExampleStory = Template.bind({}); +ExampleStory.args= { + propertyA: 'Item One', + propertyB: 'Another Item One', +}; ``` \ No newline at end of file diff --git a/docs/snippets/react/component-story-custom-args-complex.mdx.mdx b/docs/snippets/react/component-story-custom-args-complex.mdx.mdx index c3b88e491e54..fcb607b642a6 100644 --- a/docs/snippets/react/component-story-custom-args-complex.mdx.mdx +++ b/docs/snippets/react/component-story-custom-args-complex.mdx.mdx @@ -1,23 +1,20 @@ ```md - + -import { Meta, Story, Canvas } from '@storybook/addon-docs'; +import { Canvas, Meta, Story } from '@storybook/addon-docs'; import { YourComponent } from './your-component'; - + - + export const someFunction = (valuePropertyA, valuePropertyB) => { - - - + // Makes some computations and returns something }; export const Template = ({propertyA,propertyB,...rest})=>{ - - + //👇 Assigns the function result to a variable const someFunctionResult = someFunction(propertyA, propertyB); return ; @@ -25,7 +22,7 @@ const someFunctionResult = someFunction(propertyA, propertyB); -``` +``` \ No newline at end of file diff --git a/docs/snippets/react/component-story-custom-args-complex.ts.mdx b/docs/snippets/react/component-story-custom-args-complex.ts.mdx index 29ed6aa2e9a8..be64e1f14af5 100644 --- a/docs/snippets/react/component-story-custom-args-complex.ts.mdx +++ b/docs/snippets/react/component-story-custom-args-complex.ts.mdx @@ -1,11 +1,11 @@ ```ts -// YourComponent.stories.ts | YourComponent.stories.tsx +// YourComponent.stories.ts|tsx import React from 'react'; -import { Story, Meta } from '@storybook/react'; +import { ComponentStory, ComponentMeta } from '@storybook/react'; -import { YourComponent, YourComponentProps } from './your-component'; +import { YourComponent } from './your-component'; //👇 Some function to demonstrate the behavior const someFunction = (valuePropertyA, valuePropertyB) => { @@ -13,8 +13,11 @@ const someFunction = (valuePropertyA, valuePropertyB) => { }; export default { - component: YourComponent, - title: 'A complex case with a function', + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'YourComponent', //👇 Creates specific argTypes with options argTypes: { propertyA: { @@ -25,12 +28,18 @@ export default { options: ['Another Item One', 'Another Item Two', 'Another Item Three'], }, }, -} as Meta; +} as ComponentMeta; -const Template: Story = ({ propertyA, propertyB, ...rest }) => { +const Template: ComponentStory = ({ propertyA, propertyB, ...rest }) => { //👇 Assigns the result from the function to a variable const someFunctionResult = someFunction(propertyA, propertyB); return ; }; + +export const ExampleStory = Template.bind({}); +ExampleStory.args= { + propertyA: 'Item One', + propertyB: 'Another Item One', +}; ``` \ No newline at end of file diff --git a/docs/snippets/react/component-story-figma-integration.js.mdx b/docs/snippets/react/component-story-figma-integration.js.mdx new file mode 100644 index 000000000000..57ecc2750431 --- /dev/null +++ b/docs/snippets/react/component-story-figma-integration.js.mdx @@ -0,0 +1,27 @@ +```js +// MyComponent.stories.js|jsx + +import React from 'react'; + +import { withDesign } from 'storybook-addon-designs'; + +import { MyComponent } from './MyComponent'; + +// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export +export default { + title: 'FigmaExample', + component: MyComponent, + decorators: [withDesign], +}; + +// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args +const Template = () => ; + +export const Example = Template.bind({}); +Example.parameters = { + design: { + type: 'figma', + url: 'https://www.figma.com/file/Sample-File', + }, +}; +``` \ No newline at end of file diff --git a/docs/snippets/react/component-story-figma-integration.mdx.mdx b/docs/snippets/react/component-story-figma-integration.mdx.mdx new file mode 100644 index 000000000000..455cb3a10eaa --- /dev/null +++ b/docs/snippets/react/component-story-figma-integration.mdx.mdx @@ -0,0 +1,27 @@ +```md + + +import { Canvas, Meta, Story } from '@storybook/addon-docs'; + +import { withDesign } from 'storybook-addon-designs'; + +import { MyComponent } from './MyComponent'; + + + +export const Template = () => ; + + + + {Template.bind({})} + + +``` \ No newline at end of file diff --git a/docs/snippets/react/component-story-figma-integration.ts.mdx b/docs/snippets/react/component-story-figma-integration.ts.mdx new file mode 100644 index 000000000000..1b54ea82e143 --- /dev/null +++ b/docs/snippets/react/component-story-figma-integration.ts.mdx @@ -0,0 +1,29 @@ +```ts +// MyComponent.stories.ts|tsx + +import React from 'react'; + +import { ComponentStory, ComponentMeta } from '@storybook/react'; + +import { withDesign } from 'storybook-addon-designs'; + +import { MyComponent } from './MyComponent'; + +// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export +export default { + title: 'FigmaExample', + component: MyComponent, + decorators: [withDesign], +} as ComponentMeta; + +// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args +const Template: ComponentStory = () => ; + +export const Example = Template.bind({}); +Example.parameters = { + design: { + type: 'figma', + url: 'https://www.figma.com/file/Sample-File', + }, +}; +``` \ No newline at end of file diff --git a/docs/snippets/react/component-story-mdx-story-by-name.mdx.mdx b/docs/snippets/react/component-story-mdx-story-by-name.mdx.mdx index 6935eef55c92..327ceab03a2d 100644 --- a/docs/snippets/react/component-story-mdx-story-by-name.mdx.mdx +++ b/docs/snippets/react/component-story-mdx-story-by-name.mdx.mdx @@ -1,13 +1,19 @@ ```md - + -import { Story } from '@storybook/addon-docs'; +import { Meta, Story } from '@storybook/addon-docs'; import { Button } from './Button'; + + export const Template = (args) =>
- {data.map(row => ({row.map(item => }))} +import React from 'react'; + +import { Table } from './Table'; +import { TD } from './TableDataCell'; +import { TR } from './TableRow'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'Custom Table', + component: Table, +}; + +const TableStory = ({ data, ...args}) => ( +
{item}
+ {data.map((row) => ( + + {row.map((item) => ( + + ))} + + ))}
{item}
-) +); export const Numeric = TableStory.bind({}); - Numeric.args = { //👇 This arg is for the story component data: [[1, 2, 3], [4, 5, 6]], //👇 The remaining args get passed to the `Table` component size: 'large', -} +}; ``` \ No newline at end of file diff --git a/docs/snippets/react/table-story-fully-customize-controls.mdx.mdx b/docs/snippets/react/table-story-fully-customize-controls.mdx.mdx index c180808a93e9..f656ff9b88b6 100644 --- a/docs/snippets/react/table-story-fully-customize-controls.mdx.mdx +++ b/docs/snippets/react/table-story-fully-customize-controls.mdx.mdx @@ -1,9 +1,13 @@ ```md -import { Story } from '@storybook/addon-docs'; +import { Meta, Story } from '@storybook/addon-docs'; -import Table from './Table'; +import { Table } from './Table'; +import { TD } from './TableDataCell'; +import { TR } from './TableRow'; + + export const TableStory = ({ data, ...args }) => ( @@ -16,8 +20,7 @@ export const TableStory = ({ data, ...args }) => ( args={{ data: [[1, 2, 3], [4, 5, 6]], size: 'large', - }} -> + }}> {TableStory.bind({})} ``` \ No newline at end of file diff --git a/docs/snippets/react/your-component-with-decorator.js.mdx b/docs/snippets/react/your-component-with-decorator.js.mdx index ceaf12500515..9b2d3f20058b 100644 --- a/docs/snippets/react/your-component-with-decorator.js.mdx +++ b/docs/snippets/react/your-component-with-decorator.js.mdx @@ -1,14 +1,21 @@ ```js -// YourComponent.stories.js | YourComponent.stories.jsx +// YourComponent.stories.js|jsx + +import { YourComponent } from './YourComponent'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'YourComponent', component: YourComponent, decorators: [ (Story) => (
- +
), ], -} +}; ``` \ No newline at end of file diff --git a/docs/snippets/react/your-component-with-decorator.story-function-js.js.mdx b/docs/snippets/react/your-component-with-decorator.story-function-js.js.mdx index 16b504e77f3c..f7cfb381d284 100644 --- a/docs/snippets/react/your-component-with-decorator.story-function-js.js.mdx +++ b/docs/snippets/react/your-component-with-decorator.story-function-js.js.mdx @@ -1,16 +1,18 @@ ```js -// YourComponent.stories.js | YourComponent.stories.jsx +// YourComponent.stories.js|jsx + +import { YourComponent } from './YourComponent'; // Replacing the element with a Story function is also a good way of writing decorators. // Useful to prevent the full remount of the component's story. + export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'YourComponent', component: YourComponent, - decorators: [ - (Story) => ( -
- {Story()} -
- ), - ], -} + decorators: [(Story) =>
{Story()}
], +}; ``` \ No newline at end of file diff --git a/docs/snippets/react/your-component-with-decorator.story-function-ts.ts.mdx b/docs/snippets/react/your-component-with-decorator.story-function-ts.ts.mdx index 6fe8cd8489e4..9ba55b1da62c 100644 --- a/docs/snippets/react/your-component-with-decorator.story-function-ts.ts.mdx +++ b/docs/snippets/react/your-component-with-decorator.story-function-ts.ts.mdx @@ -1,11 +1,18 @@ ```ts -// YourComponent.stories.ts | YourComponent.stories.tsx +// YourComponent.stories.ts|tsx -import { Meta } from '@storybook/react'; +import { ComponentMeta } from '@storybook/react'; + +import { YourComponent } from './YourComponent'; // Replacing the element with a Story function is also a good way of writing decorators. // Useful to prevent the full remount of the component's story. export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'YourComponent', component: YourComponent, decorators: [ (Story) => ( @@ -14,5 +21,5 @@ export default { ), ], -} as Meta; +} as ComponentMeta; ``` \ No newline at end of file diff --git a/docs/snippets/react/your-component-with-decorator.ts.mdx b/docs/snippets/react/your-component-with-decorator.ts.mdx index c7cc9e780ae8..dc89e46e4c69 100644 --- a/docs/snippets/react/your-component-with-decorator.ts.mdx +++ b/docs/snippets/react/your-component-with-decorator.ts.mdx @@ -1,9 +1,16 @@ ```ts -// YourComponent.stories.ts | YourComponent.stories.tsx +// YourComponent.stories.ts|tsx -import { Meta } from '@storybook/react'; +import { ComponentMeta } from '@storybook/react'; + +import { YourComponent } from './YourComponent'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'YourComponent', component: YourComponent, decorators: [ (Story) => ( @@ -12,5 +19,5 @@ export default { ), ], -} as Meta; +} as ComponentMeta; ``` \ No newline at end of file diff --git a/docs/snippets/react/your-component.js.mdx b/docs/snippets/react/your-component.js.mdx index 8c226cbd9a1c..5b3121d657ac 100644 --- a/docs/snippets/react/your-component.js.mdx +++ b/docs/snippets/react/your-component.js.mdx @@ -1,12 +1,14 @@ ```js -// YourComponent.stories.js | YourComponent.stories.jsx - -import React from 'react'; +// YourComponent.stories.js|jsx import { YourComponent } from './YourComponent'; //👇 This default export determines where your story goes in the story list export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'YourComponent', component: YourComponent, }; @@ -14,9 +16,9 @@ export default { //👇 We create a “template” of how args map to rendering const Template = (args) => ; -export const FirstStory = Template.bind({}); - -FirstStory.args = { - /*👇 The args you need here will depend on your component */ +export const FirstStory = { + args: { + //👇 The args you need here will depend on your component + }, }; -``` \ No newline at end of file +``` diff --git a/docs/snippets/react/your-component.ts.mdx b/docs/snippets/react/your-component.ts.mdx index a5dfee62eabd..cabd3abcb3e7 100644 --- a/docs/snippets/react/your-component.ts.mdx +++ b/docs/snippets/react/your-component.ts.mdx @@ -1,22 +1,27 @@ ```ts -// YourComponent.stories.ts | YourComponent.stories.tsx +// YourComponent.stories.ts|tsx -import React, { ComponentProps } from 'react'; +import React from 'react'; -import { Story, Meta } from '@storybook/react'; +import { ComponentStory, ComponentMeta } from '@storybook/react'; import { YourComponent } from './YourComponent'; //👇 This default export determines where your story goes in the story list export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'YourComponent', component: YourComponent, -} as Meta; +} as ComponentMeta; //👇 We create a “template” of how args map to rendering -const Template: Story> = (args) => ; +const Template: ComponentStory = (args) => ; export const FirstStory = Template.bind({}); + FirstStory.args = { /*👇 The args you need here will depend on your component */ }; diff --git a/docs/snippets/svelte/badge-story.mdx.mdx b/docs/snippets/svelte/badge-story.mdx.mdx index 987ebd1047f9..06a6c95b9386 100644 --- a/docs/snippets/svelte/badge-story.mdx.mdx +++ b/docs/snippets/svelte/badge-story.mdx.mdx @@ -1,9 +1,9 @@ ```md - + -import { Meta, Story, Canvas } from '@storybook/addon-docs'; +import { Canvas, Meta, Story } from '@storybook/addon-docs'; -import { Badge } from './Badge.svelte'; +import Badge from './Badge.svelte'; @@ -16,20 +16,24 @@ export const Template = (args) => ({ Let's define a story for our `Badge` component: - + {Template.bind({})} We can drop it in a `Canvas` to get a code snippet: - + {Template.bind({})} @@ -39,23 +43,37 @@ gets rendered as a group but defines individual stories with unique URLs, which is great for review and testing. - + {Template.bind({})} - + {Template.bind({})} - + + {Template.bind({})} + + with icon) + )}}> {Template.bind({})} -``` \ No newline at end of file +``` diff --git a/docs/snippets/svelte/button-group-story.js.mdx b/docs/snippets/svelte/button-group-story.js.mdx index 8d5237a31a1a..78ebad33838c 100644 --- a/docs/snippets/svelte/button-group-story.js.mdx +++ b/docs/snippets/svelte/button-group-story.js.mdx @@ -2,16 +2,23 @@ // ButtonGroup.stories.js import ButtonGroup from '../ButtonGroup.svelte'; + +//👇 Imports the Button stories import * as ButtonStories from './Button.stories'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/svelte/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'ButtonGroup', component: ButtonGroup, -} +}; const Template = (args) => ({ + Component: ButtonGroup, props: args, - }); +}); export const Pair = Template.bind({}); Pair.args = { diff --git a/docs/snippets/svelte/button-story-click-handler-args.js.mdx b/docs/snippets/svelte/button-story-click-handler-args.js.mdx new file mode 100644 index 000000000000..9970840aa256 --- /dev/null +++ b/docs/snippets/svelte/button-story-click-handler-args.js.mdx @@ -0,0 +1,31 @@ +```js +// Button.stories.js + +import Button from './Button.svelte'; + +import { action } from '@storybook/addon-actions'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/svelte/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'Button', + component: Button, +}; + +export const Text = ({ label, click }) => ({ + Component: Button, + props: { + label, + }, + on: { + click, + }, +}); + +Text.args = { + label: 'Hello', + click: action('clicked'), +}; +``` \ No newline at end of file diff --git a/docs/snippets/svelte/button-story-click-handler-simplificated.native-format.mdx b/docs/snippets/svelte/button-story-click-handler-simplificated.native-format.mdx new file mode 100644 index 000000000000..b56d194e15b3 --- /dev/null +++ b/docs/snippets/svelte/button-story-click-handler-simplificated.native-format.mdx @@ -0,0 +1,27 @@ +```html + + + + + + + + + + + +``` \ No newline at end of file diff --git a/docs/snippets/svelte/button-story-click-handler.js.mdx b/docs/snippets/svelte/button-story-click-handler.js.mdx index 17da89288614..822519e0f529 100644 --- a/docs/snippets/svelte/button-story-click-handler.js.mdx +++ b/docs/snippets/svelte/button-story-click-handler.js.mdx @@ -6,18 +6,21 @@ import Button from './Button.svelte'; import { action } from '@storybook/addon-actions'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/svelte/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'Button', component: Button, }; -export const Text = () =>({ - //👇 This is the same component as the one used in the default export and it's optional +export const Text = () => ({ Component: Button, props:{ label: 'Hello', }, - on:{ - onClick={action('clicked')} - } + on: { + click: action('clicked'), + }, }); ``` \ No newline at end of file diff --git a/docs/snippets/svelte/button-story-click-handler.native-format.mdx b/docs/snippets/svelte/button-story-click-handler.native-format.mdx index c9aaab68c884..ab444718488e 100644 --- a/docs/snippets/svelte/button-story-click-handler.native-format.mdx +++ b/docs/snippets/svelte/button-story-click-handler.native-format.mdx @@ -1,5 +1,5 @@ ```html -<-- Button.stories.svelte --> + diff --git a/docs/snippets/svelte/button-story-decorator.js.mdx b/docs/snippets/svelte/button-story-decorator.js.mdx index be72e9a1082d..41232c9df617 100644 --- a/docs/snippets/svelte/button-story-decorator.js.mdx +++ b/docs/snippets/svelte/button-story-decorator.js.mdx @@ -1,8 +1,22 @@ ```js // Button.stories.js +import Button from './Button.svelte'; import MarginDecorator from './MarginDecorator.svelte'; -export const Primary = … +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/svelte/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'Button', + component: Button, +}; + +const Template = () => ({ + Component: Button, +}) + +export const Primary = Template.bind({}); Primary.decorators = [() => MarginDecorator] ``` \ No newline at end of file diff --git a/docs/snippets/svelte/button-story-decorator.mdx.mdx b/docs/snippets/svelte/button-story-decorator.mdx.mdx index e2cea692618a..101b6c3d6db8 100644 --- a/docs/snippets/svelte/button-story-decorator.mdx.mdx +++ b/docs/snippets/svelte/button-story-decorator.mdx.mdx @@ -1,13 +1,19 @@ ```md -import { Story } from '@storybook/addon-docs'; +import { Meta, Story } from '@storybook/addon-docs'; +import Button from './Button.svelte'; import MarginDecorator from './MarginDecorator.svelte'; + + +export const Template = () => ({ Component:Button }); + MarginDecorator]}> + {Template.bind({})} ``` \ No newline at end of file diff --git a/docs/snippets/svelte/button-story-default-docs-code.js.mdx b/docs/snippets/svelte/button-story-default-docs-code.js.mdx index 34ad96da9c3e..b2fec6cfe5f1 100644 --- a/docs/snippets/svelte/button-story-default-docs-code.js.mdx +++ b/docs/snippets/svelte/button-story-default-docs-code.js.mdx @@ -4,6 +4,10 @@ import Button from './Button.svelte'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/svelte/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'Button', component: Button, //👇 Creates specific argTypes @@ -31,7 +35,6 @@ export const ExampleStory = (args) => { }, }; }; - ExampleStory.args = { primary: true, size: 'small', diff --git a/docs/snippets/svelte/button-story-default-docs-code.mdx.mdx b/docs/snippets/svelte/button-story-default-docs-code.mdx.mdx index 734b9c53c9b7..410d3fc6b0c1 100644 --- a/docs/snippets/svelte/button-story-default-docs-code.mdx.mdx +++ b/docs/snippets/svelte/button-story-default-docs-code.mdx.mdx @@ -21,6 +21,7 @@ export const someFunction = (someValue) => { return `i am a ${someValue}`; }; + ({ Component: Button, props: { - primary: true, - label: 'Button', - }, + primary: true, + label: 'Button', + }, }); Primary.storyName = 'I am the primary'; diff --git a/docs/snippets/svelte/button-story-using-args.js.mdx b/docs/snippets/svelte/button-story-using-args.js.mdx index 0062e54848eb..8aa730112e10 100644 --- a/docs/snippets/svelte/button-story-using-args.js.mdx +++ b/docs/snippets/svelte/button-story-using-args.js.mdx @@ -1,6 +1,17 @@ ```js // Button.stories.js +import Button from './Button.svelte'; + +export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/svelte/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'Button', + component: Button, +}; + //👇 We create a “template” of how args map to rendering const Template = (args) => ({ Component: Button, diff --git a/docs/snippets/svelte/button-story-with-addon-example.js.mdx b/docs/snippets/svelte/button-story-with-addon-example.js.mdx index 54bc9576dea7..876b38d4aae5 100644 --- a/docs/snippets/svelte/button-story-with-addon-example.js.mdx +++ b/docs/snippets/svelte/button-story-with-addon-example.js.mdx @@ -4,6 +4,10 @@ import Button from './Button.svelte'; export default { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/svelte/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'Button', //👇 Creates specific parameters for the story parameters: { @@ -13,8 +17,7 @@ export default { }, }; -export const Basic = (args) => ({ +export const Basic = () => ({ Component: Button, - props: args, }); ``` \ No newline at end of file diff --git a/docs/snippets/svelte/button-story-with-addon-example.native-format.mdx b/docs/snippets/svelte/button-story-with-addon-example.native-format.mdx index abd0f1d5f88e..2a8f80ceb074 100644 --- a/docs/snippets/svelte/button-story-with-addon-example.native-format.mdx +++ b/docs/snippets/svelte/button-story-with-addon-example.native-format.mdx @@ -8,7 +8,7 @@ ({ Component: Button, props: args }); +// 👇 We create a “template” of how args map to rendering +const Template = (args)=>({ + component: Button, + props: args, +}); +//👇 Each story then reuses that template export const Primary = Template.bind({}); - Primary.args = { primary: true, label: 'Button', diff --git a/docs/snippets/svelte/button-story-with-args.mdx.mdx b/docs/snippets/svelte/button-story-with-args.mdx.mdx index 31a439535a29..cd26e64a3168 100644 --- a/docs/snippets/svelte/button-story-with-args.mdx.mdx +++ b/docs/snippets/svelte/button-story-with-args.mdx.mdx @@ -5,13 +5,16 @@ import { Meta, Story } from '@storybook/addon-docs'; import Button from './Button.svelte'; - + + + export const Template = (args) => ({ Component: Button, props: args, }); + + + + + -import { Meta, Story } from '@storybook/addon-docs'; +import { Meta } from '@storybook/addon-docs'; -import Button from './Button.svelte'; +import Button from './Button.svelte'; - + ``` \ No newline at end of file diff --git a/docs/snippets/svelte/button-story-with-blue-args.native-format.mdx b/docs/snippets/svelte/button-story-with-blue-args.native-format.mdx index 59c5bf38e85c..ec793aaceb7f 100644 --- a/docs/snippets/svelte/button-story-with-blue-args.native-format.mdx +++ b/docs/snippets/svelte/button-story-with-blue-args.native-format.mdx @@ -9,7 +9,7 @@ ({ Component: Button, diff --git a/docs/snippets/svelte/button-story-with-emojis.mdx.mdx b/docs/snippets/svelte/button-story-with-emojis.mdx.mdx index 78b1dc8ec510..b9690ff2e4db 100644 --- a/docs/snippets/svelte/button-story-with-emojis.mdx.mdx +++ b/docs/snippets/svelte/button-story-with-emojis.mdx.mdx @@ -5,7 +5,7 @@ import { Meta, Story } from '@storybook/addon-docs'; import Button from './Button.svelte'; - + diff --git a/docs/snippets/svelte/button-story-with-emojis.native-format.mdx b/docs/snippets/svelte/button-story-with-emojis.native-format.mdx index d44721384085..f30d8290eab2 100644 --- a/docs/snippets/svelte/button-story-with-emojis.native-format.mdx +++ b/docs/snippets/svelte/button-story-with-emojis.native-format.mdx @@ -5,7 +5,7 @@ import Button from './Button.svelte'; - +